change node children from unique to shared ptr, rename Canvas2D to StrokePreview, add panel toolbar with icon buttons to toggle

This commit is contained in:
2017-03-25 17:28:57 +00:00
parent 4da0c3696a
commit a1e3fd4ecf
15 changed files with 216 additions and 65 deletions

View File

@@ -155,7 +155,7 @@ public:
class LayoutManager* m_manager;
uint16_t m_nodeID;
std::string m_nodeID_s;
std::vector<std::unique_ptr<Node>> m_children;
std::vector<std::shared_ptr<Node>> m_children;
Node* current_mouse_capture = nullptr;
Node* current_key_capture = nullptr;
bool m_mouse_captured = false;
@@ -301,7 +301,10 @@ public:
const Node* init_template(const char* id);
void add_child(Node* n);
void add_child(Node* n, int index);
void add_child(std::shared_ptr<Node> n);
void add_child(std::shared_ptr<Node> n, int index);
void remove_child(Node* n);
void remove_all_children();
void move_child(Node* n, int index);
void move_child_offset(Node* n, int offset);
int get_child_index(Node* n);
@@ -732,10 +735,10 @@ public:
case kEventType::KeyDown:
switch (ke->m_key)
{
case VK_BACK:
m_string.erase(m_string.end() - 1);
m_text->set_text(m_string.c_str());
break;
// case VK_BACK:
// m_string.erase(m_string.end() - 1);
// m_text->set_text(m_string.c_str());
// break;
default:
break;
}
@@ -1655,7 +1658,7 @@ public:
}
};
class NodeCanvas2D : public NodeBorder
class NodeStrokePreview : public NodeBorder
{
RTT m_rtt;
Sampler m_sampler;
@@ -1696,7 +1699,7 @@ public:
"}";
m_shader.create(shader_v, shader_f);
}
virtual Node* clone_instantiate() const override { return new NodeCanvas2D(); }
virtual Node* clone_instantiate() const override { return new NodeStrokePreview(); }
virtual void clone_copy(Node* dest) const override
{
NodeBorder::clone_copy(dest);
@@ -1707,7 +1710,7 @@ public:
}
virtual void clone_finalize(Node* dest) const override
{
NodeCanvas2D* n = (NodeCanvas2D*)dest;
NodeStrokePreview* n = (NodeStrokePreview*)dest;
n->init_controls();
}
void init_controls()
@@ -1798,7 +1801,7 @@ public:
class NodePanelStroke : public Node
{
public:
NodeCanvas2D* m_canvas;
NodeStrokePreview* m_canvas;
NodeSliderH* m_tip_size;
NodeSliderH* m_tip_spacing;
NodeSliderH* m_tip_flow;
@@ -1821,26 +1824,26 @@ public:
}
void init_controls()
{
m_canvas = find<NodeCanvas2D>("canvas");
m_canvas = find<NodeStrokePreview>("canvas");
init_slider(m_tip_size, "tip-size", &NodeCanvas2D::m_tip_size);
init_slider(m_tip_spacing, "tip-spacing", &NodeCanvas2D::m_tip_spacing);
init_slider(m_tip_flow, "tip-flow", &NodeCanvas2D::m_tip_flow);
init_slider(m_tip_angle, "tip-angle", &NodeCanvas2D::m_tip_angle);
init_slider(m_jitter_scale, "jitter-scale", &NodeCanvas2D::m_jitter_scale);
init_slider(m_jitter_angle, "jitter-angle", &NodeCanvas2D::m_jitter_angle);
init_slider(m_jitter_spread, "jitter-spread", &NodeCanvas2D::m_jitter_spread);
init_slider(m_jitter_flow, "jitter-flow", &NodeCanvas2D::m_jitter_flow);
init_slider(m_tip_size, "tip-size", &NodeStrokePreview::m_tip_size);
init_slider(m_tip_spacing, "tip-spacing", &NodeStrokePreview::m_tip_spacing);
init_slider(m_tip_flow, "tip-flow", &NodeStrokePreview::m_tip_flow);
init_slider(m_tip_angle, "tip-angle", &NodeStrokePreview::m_tip_angle);
init_slider(m_jitter_scale, "jitter-scale", &NodeStrokePreview::m_jitter_scale);
init_slider(m_jitter_angle, "jitter-angle", &NodeStrokePreview::m_jitter_angle);
init_slider(m_jitter_spread, "jitter-spread", &NodeStrokePreview::m_jitter_spread);
init_slider(m_jitter_flow, "jitter-flow", &NodeStrokePreview::m_jitter_flow);
//m_canvas->draw_stroke();
}
void init_slider(NodeSliderH*& slider, const char* id, float NodeCanvas2D::* prop)
void init_slider(NodeSliderH*& slider, const char* id, float NodeStrokePreview::* prop)
{
slider = find<NodeSliderH>(id);
slider->on_value_changed = std::bind(&NodePanelStroke::handle_slide,
this, prop, std::placeholders::_1, std::placeholders::_2);
m_canvas->*prop = slider->m_value.x;
}
void handle_slide(float NodeCanvas2D::* prop, Node* target, float value)
void handle_slide(float NodeStrokePreview::* prop, Node* target, float value)
{
m_canvas->*prop = value;
m_canvas->draw_stroke();