diff --git a/data/layout.xml b/data/layout.xml
index 041d722..d712eab 100644
--- a/data/layout.xml
+++ b/data/layout.xml
@@ -124,11 +124,11 @@
-
-
+
+
-
+
@@ -1280,7 +1280,7 @@ Here's a list of what's available in this release.
-
+
diff --git a/src/app.cpp b/src/app.cpp
index 575bdf1..e37a72a 100644
--- a/src/app.cpp
+++ b/src/app.cpp
@@ -594,6 +594,8 @@ void App::update(float dt)
}
//auto box = n->m_clip;
//glm::ivec4 c = glm::vec4((int)box.x - 1, (int)(height / zoom - box.y - box.w) - 1, (int)box.z + 2, (int)box.w + 2) * zoom;
+ if (box.z <= 0.f || box.w <= 0.f)
+ return false;
glm::ivec4 c = glm::vec4((int)box.x, (int)(height / zoom - box.y - box.w), (int)box.z, (int)box.w) * zoom;
glScissor(c.x + off_x, c.y + off_y, c.z, c.w);
n->draw();
diff --git a/src/app.h b/src/app.h
index d3eccab..4e3b706 100644
--- a/src/app.h
+++ b/src/app.h
@@ -64,6 +64,9 @@ public:
std::shared_ptr grid;
std::shared_ptr presets;
NodePanelQuick* quick;
+ NodePanelColor* floating_color;
+ NodeColorPicker* floating_picker;
+ NodePanelBrushPreset* floating_presets;
NodeCanvas* canvas;
const uint16_t main_id = const_hash("main");
const std::array res_map{ 512, 1024, 1536, 2048, 4096, 8192 };
diff --git a/src/app_layout.cpp b/src/app_layout.cpp
index b9b482c..69c9fb3 100644
--- a/src/app_layout.cpp
+++ b/src/app_layout.cpp
@@ -5,6 +5,7 @@
#include "node_text.h"
#include "node_progress_bar.h"
#include "node_dialog_picker.h"
+#include "node_panel_floating.h"
void App::title_update()
{
@@ -872,6 +873,10 @@ void App::brush_update()
*quick->m_button_brush_current_preview->m_brush = *Canvas::I->m_current_brush;
quick->m_button_brush_current_preview->draw_stroke();
quick->m_button_color_current_inner->m_color = Canvas::I->m_current_brush->m_tip_color;
+ if (floating_picker)
+ floating_picker->set_color(Canvas::I->m_current_brush->m_tip_color);
+ if (floating_color)
+ floating_color->set_color(Canvas::I->m_current_brush->m_tip_color);
}
void App::init_menu_layer()
@@ -1080,8 +1085,41 @@ void App::initLayout()
};
}
+ // test floating panel
+ auto fp_presets = layout[main_id]->add_child();
+ floating_presets = fp_presets->m_container->add_child();
+ floating_presets->SetHeightP(100);
+ floating_presets->on_brush_changed = [this](Node* target, std::shared_ptr& b) {
+ auto c = Canvas::I->m_current_brush->m_tip_color;
+ *Canvas::I->m_current_brush = *b;
+ Canvas::I->m_current_brush->m_tip_color = c;
+ Canvas::I->m_current_brush->load();
+ brush_update();
+ };
+
+ auto fp_color = layout[main_id]->add_child();
+ floating_color = fp_color->m_container->add_child();
+ floating_color->SetHeightP(100);
+ floating_color->find("title")->destroy();
+ floating_color->on_color_changed = [this](Node* target, glm::vec4 color) {
+ Canvas::I->m_current_brush->m_tip_color = color;
+ brush_update();
+ };
+
+ auto fp_picker = layout[main_id]->add_child();
+ fp_picker->m_container->SetSize(300, 500);
+ floating_picker = fp_picker->m_container->add_child();
+ floating_picker->m_autohide = false;
+ floating_picker->on_color_change = [this](Node* target, glm::vec3 color) {
+ Canvas::I->m_current_brush->m_tip_color = glm::vec4(color, 1.f);
+ brush_update();
+ };
+ //picker->SetHeightP(100);
+ //color->find("title")->destroy();
+
App::I.redraw = true;
};
+
LOG("initializing layout xml");
if (layout.m_loaded)
{
diff --git a/src/node.cpp b/src/node.cpp
index 2b3e382..8c5e141 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -302,6 +302,8 @@ const Node* Node::init_template(const char* id)
void Node::add_child(Node* n)
{
+ if (n->m_parent)
+ n->m_parent->remove_child(n);
m_children.emplace_back(n);
n->m_parent = this;
n->m_manager = m_manager;
@@ -312,6 +314,8 @@ void Node::add_child(Node* n)
void Node::add_child(Node* n, int index)
{
+ if (n->m_parent)
+ n->m_parent->remove_child(n);
m_children.emplace_back(n);
n->m_parent = this;
n->m_manager = m_manager;
@@ -322,6 +326,8 @@ void Node::add_child(Node* n, int index)
void Node::add_child(std::shared_ptr n)
{
+ if (n->m_parent)
+ n->m_parent->remove_child(n.get());
m_children.push_back(n);
n->m_parent = this;
n->m_manager = m_manager;
@@ -332,6 +338,8 @@ void Node::add_child(std::shared_ptr n)
void Node::add_child(std::shared_ptr n, int index)
{
+ if (n->m_parent)
+ n->m_parent->remove_child(n.get());
m_children.insert(m_children.begin() + index, n);
n->m_parent = this;
n->m_manager = m_manager;
diff --git a/src/node_dialog_picker.cpp b/src/node_dialog_picker.cpp
index 6b5a3d1..25942ee 100644
--- a/src/node_dialog_picker.cpp
+++ b/src/node_dialog_picker.cpp
@@ -46,7 +46,7 @@ kEventResult NodeColorPicker::handle_event(Event* e)
switch (e->m_type)
{
case kEventType::MouseLeave:
- if (!m_interacted)
+ if (!m_interacted || !m_autohide)
break;
// else fall through
case kEventType::MouseUpL:
diff --git a/src/node_dialog_picker.h b/src/node_dialog_picker.h
index 8c7f70e..fc1b478 100644
--- a/src/node_dialog_picker.h
+++ b/src/node_dialog_picker.h
@@ -12,6 +12,7 @@ public:
std::function on_color_change;
bool m_interacted = false;
+ bool m_autohide = true;
NodeSliderH* m_slider_h;
NodeSliderH* m_slider_s;
NodeSliderH* m_slider_v;