diff --git a/data/layout.xml b/data/layout.xml
index 0ab12c6..c0e8df1 100644
--- a/data/layout.xml
+++ b/data/layout.xml
@@ -87,6 +87,9 @@
+
+
+
@@ -746,15 +749,14 @@
-
-
-
+
+
-
-
+ -->
+
@@ -789,7 +791,6 @@
-
@@ -1643,6 +1644,5 @@ Here's a list of what's available in this release.
-->
-
diff --git a/data/paper.jpg b/data/patterns/paper.jpg
similarity index 100%
rename from data/paper.jpg
rename to data/patterns/paper.jpg
diff --git a/data/patterns/thumbs/paper.jpg b/data/patterns/thumbs/paper.jpg
new file mode 100644
index 0000000..2dac86e
Binary files /dev/null and b/data/patterns/thumbs/paper.jpg differ
diff --git a/src/node_checkbox.cpp b/src/node_checkbox.cpp
index 25031f8..f776d3b 100644
--- a/src/node_checkbox.cpp
+++ b/src/node_checkbox.cpp
@@ -86,6 +86,9 @@ void NodeCheckBox::parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute*
{
switch (ka)
{
+ case kAttribute::Padding:
+ m_outer->parse_attributes(ka, attr);
+ break;
case kAttribute::Icon:
m_icon_path = attr->Value();
break;
diff --git a/src/node_dialog_picker.cpp b/src/node_dialog_picker.cpp
index 21cf5c4..6985d5b 100644
--- a/src/node_dialog_picker.cpp
+++ b/src/node_dialog_picker.cpp
@@ -41,6 +41,25 @@ void NodeColorPicker::handle_value_changed()
}
+kEventResult NodeColorPicker::handle_event(Event* e)
+{
+ switch (e->m_type)
+ {
+ case kEventType::MouseUpL:
+ if (!m_mouse_inside)
+ {
+ mouse_release();
+ parent->remove_child(this);
+ if (on_popup_close)
+ on_popup_close(this);
+ }
+ break;
+ default:
+ return kEventResult::Available;
+ break;
+ }
+}
+
void NodeColorPicker::init_controls()
{
m_slider_h = find("hsv-h");
diff --git a/src/node_dialog_picker.h b/src/node_dialog_picker.h
index 97a2859..fe67c89 100644
--- a/src/node_dialog_picker.h
+++ b/src/node_dialog_picker.h
@@ -1,3 +1,4 @@
+#pragma once
#include "node.h"
#include "node_border.h"
#include "node_slider.h"
@@ -7,6 +8,8 @@
class NodeColorPicker : public NodeBorder
{
public:
+ std::function on_popup_close;
+
NodeSliderH* m_slider_h;
NodeSliderH* m_slider_s;
NodeSliderH* m_slider_v;
@@ -27,6 +30,7 @@ public:
virtual void clone_finalize(Node* dest) const override;
virtual void init() override;
virtual void draw() override;
+ virtual kEventResult handle_event(Event* e) override;
void init_controls();
glm::vec3 get_hsv() const;
void handle_value_changed();
diff --git a/src/node_panel_quick.cpp b/src/node_panel_quick.cpp
index 47a7a07..bd3a8fd 100644
--- a/src/node_panel_quick.cpp
+++ b/src/node_panel_quick.cpp
@@ -1,6 +1,7 @@
#include "pch.h"
#include "node_panel_quick.h"
#include "node_stroke_preview.h"
+#include "node_image.h"
Node* NodePanelQuick::clone_instantiate() const
{
@@ -25,7 +26,45 @@ void NodePanelQuick::init_controls()
{
auto s = find("quick-brush1");
s->m_brush = std::make_shared();
- s->m_brush->m_tip_size = 10;
+ s->m_max_size = 10;
s->m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
s->draw_stroke();
+
+ m_picker = std::make_shared();
+ m_picker->m_manager = m_manager;
+ m_picker->init();
+ m_picker->create();
+ m_picker->loaded();
+ m_picker->m_mouse_ignore = false;
+ m_picker->m_flood_events = true;
+ m_picker->m_capture_children = false;
+
+ if (auto b = find("quick-color1"))
+ {
+ b->on_click = [this,b](Node*) {
+ auto screen = root()->m_size;
+ glm::vec2 pos = b->m_pos + glm::vec2(b->m_size.x, 0);
+ root()->add_child(m_picker);
+ auto tick = root()->add_child();
+ tick->SetPositioning(YGPositionTypeAbsolute);
+ tick->SetSize(16, 32);
+ tick->SetPosition(pos.x, pos.y + (b->m_size.y - 32) * 0.5f);
+ tick->set_image("data/ui/popup-tick.png");
+ //float hh = m_picker->m_container->m_children.size() > 10 ? App::I.height / App::I.zoom * .75f : 400.f;
+ //m_picker->SetHeight(4);
+ root()->update();
+ pos.y -= 130;
+ if ((pos.y + m_picker->m_size.y) > screen.y)
+ pos.y = screen.y - m_picker->m_size.y;
+ if (pos.y < 0)
+ pos.y = 0;
+ m_picker->SetPosition(pos.x + 16, pos.y);
+ m_picker->mouse_capture();
+ root()->update();
+
+ m_picker->on_popup_close = [this, tick](Node*) {
+ tick->destroy();
+ };
+ };
+ }
}
diff --git a/src/node_panel_quick.h b/src/node_panel_quick.h
index fdab35d..70f773e 100644
--- a/src/node_panel_quick.h
+++ b/src/node_panel_quick.h
@@ -2,6 +2,7 @@
#include "node.h"
#include "node_button_custom.h"
#include "node_border.h"
+#include "node_dialog_picker.h"
class NodePanelQuick : public NodeBorder
{
@@ -13,6 +14,7 @@ public:
NodeButtonCustom* m_button_color1;
NodeButtonCustom* m_button_color2;
NodeButtonCustom* m_button_color3;
+ std::shared_ptr m_picker;
virtual Node* clone_instantiate() const override;
virtual void clone_finalize(Node* dest) const override;
virtual void init() override;
diff --git a/src/node_stroke_preview.cpp b/src/node_stroke_preview.cpp
index ae20bbb..d3adff8 100644
--- a/src/node_stroke_preview.cpp
+++ b/src/node_stroke_preview.cpp
@@ -262,7 +262,7 @@ void NodeStrokePreview::draw_stroke_immediate()
const auto& b = m_brush;
m_stroke.m_filter_points = false;
- m_stroke.m_max_size = m_size.y * .75f;
+ m_stroke.m_max_size = m_max_size > 0 ? m_max_size : m_size.y * .75f;
m_stroke.m_camera.fov = Canvas::I->m_cam_fov;
m_stroke.m_camera.rot = Canvas::I->m_cam_rot;
m_stroke.reset(true);
diff --git a/src/node_stroke_preview.h b/src/node_stroke_preview.h
index b947907..d660e1f 100644
--- a/src/node_stroke_preview.h
+++ b/src/node_stroke_preview.h
@@ -37,6 +37,7 @@ public:
Stroke m_dual_stroke;
std::vector m_bez_points;
float m_min_flow = 0.f;
+ float m_max_size = 0.f;
virtual Node* clone_instantiate() const override;
virtual void clone_copy(Node* dest) const override;
virtual void clone_children(Node* dest) const override;