complete left click event handle
This commit is contained in:
@@ -52,6 +52,39 @@ enum class kShapeType : uint16_t
|
||||
Slice9 = const_hash("slice9"),
|
||||
};
|
||||
|
||||
enum class kEventResult : uint8_t
|
||||
{
|
||||
Handled,
|
||||
UnHandled,
|
||||
};
|
||||
|
||||
enum class kEventCategory : uint8_t
|
||||
{
|
||||
MouseEvent,
|
||||
};
|
||||
enum class kEventType : uint8_t
|
||||
{
|
||||
MouseDownL,
|
||||
MouseDownR,
|
||||
MouseMove,
|
||||
MouseUpL,
|
||||
MouseUpR,
|
||||
};
|
||||
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
kEventCategory m_cat;
|
||||
kEventType m_type;
|
||||
};
|
||||
|
||||
class MouseEvent : public Event
|
||||
{
|
||||
public:
|
||||
MouseEvent() { m_cat = kEventCategory::MouseEvent; }
|
||||
glm::vec2 m_pos;
|
||||
};
|
||||
|
||||
class Widget
|
||||
{
|
||||
public:
|
||||
@@ -65,6 +98,7 @@ public:
|
||||
virtual void draw() { }
|
||||
virtual void parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute* attr) { }
|
||||
virtual void update() { }
|
||||
virtual kEventResult on_event(Event* e) { return kEventResult::UnHandled; }
|
||||
};
|
||||
|
||||
class WidgetRef : public Widget
|
||||
@@ -136,6 +170,11 @@ public:
|
||||
break;
|
||||
}
|
||||
}
|
||||
virtual kEventResult on_event(Event* e)
|
||||
{
|
||||
m_color = rand_color();
|
||||
return kEventResult::Handled;
|
||||
}
|
||||
};
|
||||
|
||||
class WidgetShape : public Widget
|
||||
@@ -288,6 +327,11 @@ public:
|
||||
{
|
||||
mvp = proj * pos;
|
||||
}
|
||||
virtual kEventResult on_event(Event* e)
|
||||
{
|
||||
m_color = rand_color();
|
||||
return kEventResult::Handled;
|
||||
}
|
||||
};
|
||||
|
||||
class WidgetImage : public Widget
|
||||
@@ -366,6 +410,11 @@ public:
|
||||
break;
|
||||
}
|
||||
}
|
||||
virtual kEventResult on_event(Event* e)
|
||||
{
|
||||
MouseEvent* me = static_cast<MouseEvent*>(e);
|
||||
return kEventResult::UnHandled;
|
||||
}
|
||||
};
|
||||
|
||||
class Node
|
||||
@@ -377,22 +426,28 @@ class Node
|
||||
class LayoutManager* m_manager;
|
||||
|
||||
public:
|
||||
uint16_t m_nodeID;
|
||||
std::string m_nodeID_s;
|
||||
std::vector<Node> m_children;
|
||||
std::unique_ptr<Widget> m_widget;
|
||||
glm::vec2 m_pos;
|
||||
glm::vec2 m_size;
|
||||
glm::vec4 m_clip;
|
||||
std::string m_name;
|
||||
bool m_display = true;
|
||||
Node(const Node&) = delete;
|
||||
Node& operator=(const Node&) = delete;
|
||||
Node&& operator=(Node&& o) { return std::forward<Node>(o); }
|
||||
Node(Node&& o)
|
||||
{
|
||||
m_name = std::move(o.m_name);
|
||||
m_nodeID_s = std::move(o.m_nodeID_s);
|
||||
m_widget = std::move(o.m_widget);
|
||||
m_children = std::move(o.m_children);
|
||||
for (auto& c : m_children)
|
||||
c.parent = this;
|
||||
m_nodeID = o.m_nodeID;
|
||||
m_display = o.m_display;
|
||||
parent = o.parent;
|
||||
y_node = o.y_node;
|
||||
m_pos = o.m_pos;
|
||||
@@ -444,6 +499,8 @@ public:
|
||||
void load_internal(const tinyxml2::XMLElement* x_node);
|
||||
void draw();
|
||||
Node clone();
|
||||
Node* find(const char* ids);
|
||||
kEventResult on_event(Event* e);
|
||||
|
||||
class iterator
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user