diff --git a/data/layout.xml b/data/layout.xml
index 61340cb..38c4048 100644
--- a/data/layout.xml
+++ b/data/layout.xml
@@ -11,7 +11,7 @@
-
+
@@ -64,7 +64,7 @@
-
+
@@ -77,25 +77,104 @@
+
+
+
+
+
+
-
-
+
diff --git a/engine/app.cpp b/engine/app.cpp
index 78ffd97..dfc5c80 100644
--- a/engine/app.cpp
+++ b/engine/app.cpp
@@ -156,7 +156,29 @@ void App::init()
{
menu_file->on_click = [=] {
glm::vec2 pos = menu_file->m_pos + glm::vec2(0, menu_file->m_size.y);
- popup = (NodePopupMenu*)layout[const_hash("popup-menu")].m_children[0]->clone();
+ popup = (NodePopupMenu*)layout[const_hash("file-menu")].m_children[0]->clone();
+ popup->SetPositioning(YGPositionTypeAbsolute);
+ popup->SetPosition(pos.x, pos.y);
+ layout[main_id].add_child(popup);
+ layout[main_id].update();
+ };
+ }
+ if (auto* menu_file = layout[main_id].find("menu-edit"))
+ {
+ menu_file->on_click = [=] {
+ glm::vec2 pos = menu_file->m_pos + glm::vec2(0, menu_file->m_size.y);
+ popup = (NodePopupMenu*)layout[const_hash("edit-menu")].m_children[0]->clone();
+ popup->SetPositioning(YGPositionTypeAbsolute);
+ popup->SetPosition(pos.x, pos.y);
+ layout[main_id].add_child(popup);
+ layout[main_id].update();
+ };
+ }
+ if (auto* menu_file = layout[main_id].find("menu-layers"))
+ {
+ menu_file->on_click = [=] {
+ glm::vec2 pos = menu_file->m_pos + glm::vec2(0, menu_file->m_size.y);
+ popup = (NodePopupMenu*)layout[const_hash("layers-menu")].m_children[0]->clone();
popup->SetPositioning(YGPositionTypeAbsolute);
popup->SetPosition(pos.x, pos.y);
layout[main_id].add_child(popup);
diff --git a/engine/app.h b/engine/app.h
index 112961c..6eaa66d 100644
--- a/engine/app.h
+++ b/engine/app.h
@@ -14,6 +14,9 @@ class App
NodeMessageBox* msgbox;
NodeSettings* settings;
NodePopupMenu* popup = nullptr;
+ NodePopupMenu* menu_file = nullptr;
+ NodePopupMenu* menu_edit = nullptr;
+ NodePopupMenu* menu_layers = nullptr;
const uint16_t main_id = const_hash("main");
public:
static App I;
diff --git a/engine/layout.cpp b/engine/layout.cpp
index 80e197a..067ace0 100644
--- a/engine/layout.cpp
+++ b/engine/layout.cpp
@@ -72,12 +72,12 @@ void Node::add_child(Node* n)
void Node::remove_child(Node* n)
{
- auto i = std::find_if(m_children.begin(), m_children.end(), [=](std::unique_ptr& ptr)
- {
- return ptr.get() == n;
- });
- m_children.erase(i);
- YGNodeRemoveChild(y_node, n->y_node);
+ auto i = std::find_if(m_children.begin(), m_children.end(), [=](std::unique_ptr& ptr) { return ptr.get() == n; });
+ if (i != m_children.end())
+ {
+ m_children.erase(i);
+ YGNodeRemoveChild(y_node, n->y_node);
+ }
}
void Node::update(float width, float height)
diff --git a/engine/layout.h b/engine/layout.h
index 92a0b0e..ebc191c 100644
--- a/engine/layout.h
+++ b/engine/layout.h
@@ -652,7 +652,7 @@ public:
virtual Node* clone_instantiate() const override { return new NodeButtonCustom(); }
virtual void clone_copy(Node* dest) const override
{
- Node::clone_copy(dest);
+ NodeBorder::clone_copy(dest);
NodeButtonCustom* n = static_cast(dest);
n->color_normal = color_normal;
n->color_hover = color_hover;
@@ -660,12 +660,14 @@ public:
}
virtual void loaded() override
{
+ NodeBorder::loaded();
//m_thinkness = 1;
//m_border_color = glm::vec4(0, 0, 0, 1);
m_color = color_normal;
}
virtual kEventResult handle_event(Event* e) override
{
+ NodeBorder::handle_event(e);
switch (e->m_type)
{
case kEventType::MouseEnter: