74 lines
2.0 KiB
C++
74 lines
2.0 KiB
C++
|
|
#include "UiFrameWork.h"
|
|||
|
|
|
|||
|
|
std::map<uint64_t , int>UI_HOVER_ZORDER;
|
|||
|
|
std::map<uint64_t, UiFrameWork*>UI_HOVER_OBJECT;
|
|||
|
|
|
|||
|
|
void UiFrameWork::OnHoverEvent(Event* evt) {
|
|||
|
|
//ÿ<><C3BF>UI<55>౻<EFBFBD><E0B1BB>ͣʱ<CDA3>ͻ<EFBFBD><CDBB><EFBFBD>Map <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
UI_HOVER_ZORDER[this->GetObjectID()] = this->GetZOrder();
|
|||
|
|
UI_HOVER_OBJECT[this->GetObjectID()] = this;
|
|||
|
|
|
|||
|
|
//ȡ<><C8A1>Map<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
auto MaxZorderMap = std::max_element(UI_HOVER_ZORDER.begin(), UI_HOVER_ZORDER.end(), [](std::pair<std::uint64_t, int> left, std::pair<std::uint64_t, int> right) { return left.second < right.second; });
|
|||
|
|
|
|||
|
|
std::map<uint64_t, UiFrameWork*>::reverse_iterator iter;
|
|||
|
|
for (iter = UI_HOVER_OBJECT.rbegin(); iter != UI_HOVER_OBJECT.rend(); iter++) {
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ͵<C7BE><CDB5><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ͣ
|
|||
|
|
if (iter->first == MaxZorderMap->first) {
|
|||
|
|
iter->second->OnHover();
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
iter->second->OnOut();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void UiFrameWork::OnOutEvent(Event* evt) {
|
|||
|
|
//ÿ<><C3BF>UI<55><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>ͣʱ <20>ͻ<EFBFBD><CDBB><EFBFBD>Map<61><70> <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
UI_HOVER_ZORDER.erase(this->GetObjectID());
|
|||
|
|
UI_HOVER_OBJECT.erase(this->GetObjectID());
|
|||
|
|
|
|||
|
|
this->OnOut();
|
|||
|
|
|
|||
|
|
//ȡ<><C8A1>Map<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
auto MaxZorderMap = std::max_element(UI_HOVER_ZORDER.begin(), UI_HOVER_ZORDER.end(), [](std::pair<std::uint64_t, int> left, std::pair<std::uint64_t, int> right) { return left.second < right.second; });
|
|||
|
|
|
|||
|
|
std::map<uint64_t, UiFrameWork*>::reverse_iterator iter;
|
|||
|
|
for (iter = UI_HOVER_OBJECT.rbegin(); iter != UI_HOVER_OBJECT.rend(); iter++) {
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ͵<C7BE><CDB5><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ͣ
|
|||
|
|
if (iter->first == MaxZorderMap->first) {
|
|||
|
|
iter->second->OnHover();
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
iter->second->OnOut();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void UiFrameWork::RemoveZorder()
|
|||
|
|
{
|
|||
|
|
UI_HOVER_ZORDER.erase(this->GetObjectID());
|
|||
|
|
UI_HOVER_OBJECT.erase(this->GetObjectID());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void UiFrameWork::OnHover()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void UiFrameWork::OnOut()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void UiFrameWork::Init()
|
|||
|
|
{
|
|||
|
|
//UI<55><49> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ComponentPtr comp = new MouseSensor;
|
|||
|
|
AddComponent(0, comp);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>¼<EFBFBD>
|
|||
|
|
AddListener<MouseHoverEvent>(Closure(this, &UiFrameWork::OnHoverEvent));
|
|||
|
|
AddListener<MouseOutEvent>(Closure(this, &UiFrameWork::OnOutEvent));
|
|||
|
|
}
|