quick panel brushes slots

This commit is contained in:
2019-05-11 17:03:12 +02:00
parent 36fd575b96
commit 51dcc56dd6
3 changed files with 112 additions and 25 deletions

View File

@@ -28,6 +28,78 @@ void NodePanelQuick::set_color(glm::vec3 color)
m_button_color_current_inner->m_color = glm::vec4(color, 1.f);
}
int NodePanelQuick::get_selected_brush_index() const
{
auto it = std::find(m_button_brushes.begin(), m_button_brushes.end(), m_button_brush_current);
return std::distance(m_button_brushes.begin(), it);
}
void NodePanelQuick::set_selected_brush_index(int idx)
{
if (m_button_brush_current)
m_button_brush_current->set_active(false);
m_button_brush_current = m_button_brushes[idx];
m_button_brush_current->set_active(true);
m_button_brush_current_preview = static_cast<NodeStrokePreview*>(m_button_brush_current->m_children[0].get());
}
int NodePanelQuick::get_selected_color_index() const
{
auto it = std::find(m_button_colors.begin(), m_button_colors.end(), m_button_color_current);
return std::distance(m_button_colors.begin(), it);
}
void NodePanelQuick::set_selected_color_index(int idx)
{
if (m_button_color_current)
m_button_color_current->set_active(false);
m_button_color_current = m_button_colors[idx];
m_button_color_current->set_active(true);
m_button_color_current_inner = static_cast<NodeBorder*>(m_button_color_current->m_children[0].get());
}
NodePanelQuick::MiniState NodePanelQuick::get_state() const
{
MiniState s;
s.brush_index = get_selected_brush_index();
s.color_index = get_selected_color_index();
for (int i = 0; i < 3; i++)
{
s.brushes[i] = static_cast<NodeStrokePreview*>(m_button_brushes[i]->m_children[0].get())->m_brush;
s.colors[i] = static_cast<NodeBorder*>(m_button_color_current->m_children[0].get())->m_color;
}
return s;
}
void NodePanelQuick::set_state(const MiniState& state)
{
for (int i = 0; i < 3; i++)
{
auto b = static_cast<NodeStrokePreview*>(m_button_brushes[i]->m_children[0].get());
b->m_brush = state.brushes[i];
auto c = static_cast<NodeBorder*>(m_button_color_current->m_children[0].get());
c->m_color = state.colors[i];
}
set_selected_color_index(state.color_index);
set_selected_brush_index(state.brush_index);
m_button_brush_current_preview->draw_stroke();
}
void NodePanelQuick::reset_state()
{
for (int i = 0; i < 3; i++)
{
auto b = static_cast<NodeStrokePreview*>(m_button_brushes[i]->m_children[0].get());
b->m_brush = std::make_shared<Brush>();
b->m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
auto c = static_cast<NodeBorder*>(m_button_color_current->m_children[0].get());
c->m_color = glm::vec4(0, 0, 0, 1);
}
set_selected_brush_index(0);
set_selected_color_index(0);
m_button_brush_current_preview->draw_stroke();
}
void NodePanelQuick::init_controls()
{
m_picker = std::make_shared<NodeColorPicker>();
@@ -79,26 +151,20 @@ void NodePanelQuick::init_controls()
on_flow_change(target, value);
};
m_button_color1 = find<NodeButtonCustom>("quick-color1");
m_button_color2 = find<NodeButtonCustom>("quick-color2");
m_button_color3 = find<NodeButtonCustom>("quick-color3");
m_button_color_current = m_button_color1;
for (int i = 0; i < m_button_colors.size(); i++)
{
m_button_colors[i] = find<NodeButtonCustom>(fmt::format("quick-color{}", i + 1).c_str());
m_button_colors[i]->on_click = std::bind(&this_class::handle_button_color_click, this, std::placeholders::_1);
m_button_colors[i]->color_active = { 0, 0, 0, 0.5f };
m_button_colors[i]->set_color({ 0, 0, 0, 0 });
}
m_button_color_current = m_button_colors[0];
m_button_color_current->set_active(true);
m_button_color_current_inner = static_cast<NodeBorder*>(m_button_color_current->m_children[0].get());
m_button_color1->on_click = std::bind(&this_class::handle_button_color_click, this, std::placeholders::_1);
m_button_color2->on_click = std::bind(&this_class::handle_button_color_click, this, std::placeholders::_1);
m_button_color3->on_click = std::bind(&this_class::handle_button_color_click, this, std::placeholders::_1);
m_button_color1->color_active = { 0, 0, 0, 0.5f };
m_button_color2->color_active = { 0, 0, 0, 0.5f };
m_button_color3->color_active = { 0, 0, 0, 0.5f };
m_button_color1->set_color({ 0, 0, 0, 0 });
m_button_color2->set_color({ 0, 0, 0, 0 });
m_button_color3->set_color({ 0, 0, 0, 0 });
m_button_brush1 = init_button_brush("quick-brush1");
m_button_brush2 = init_button_brush("quick-brush2");
m_button_brush3 = init_button_brush("quick-brush3");
m_button_brush_current = m_button_brush1;
for (int i = 0; i < m_button_brushes.size(); i++)
m_button_brushes[i] = init_button_brush(fmt::format("quick-brush{}", i + 1));
m_button_brush_current = m_button_brushes[0];
m_button_brush_current->set_active(true);
m_button_brush_current_preview = static_cast<NodeStrokePreview*>(m_button_brush_current->m_children[0].get());
}
@@ -108,11 +174,11 @@ NodeButtonCustom* NodePanelQuick::init_button_brush(const std::string& name)
auto button = find<NodeButtonCustom>(name.c_str());
button->on_click = std::bind(&this_class::handle_button_brush_click, this, std::placeholders::_1);
auto pr = static_cast<NodeStrokePreview*>(button->m_children[0].get());
pr->m_brush = std::make_shared<Brush>();
pr->m_brush = std::make_shared<Brush>();;
pr->m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
pr->m_max_size = 20;
pr->m_pad_override = 0;
pr->m_draw_first = true;
pr->m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
pr->draw_stroke();
return button;
}