refactor canvas modes

This commit is contained in:
2019-02-01 22:51:25 +01:00
parent e3f6d1cc44
commit 8e5a8eec1b
12 changed files with 326 additions and 272 deletions

View File

@@ -6,9 +6,6 @@
#include "node_progress_bar.h"
#include "node_dialog_picker.h"
static glm::vec4 color_button_normal{ .1, .1, .1, 1 };
static glm::vec4 color_button_hlight{ 1, .0, .0, 1 };
void App::title_update()
{
static char str[256];
@@ -126,21 +123,8 @@ void App::init_sidebar()
grid = find_or_create_panel<NodePanelGrid>(panels);
//presets = find_or_create_panel<NodePanelBrushPreset>(panels);
// if (canvas)
// {
// Canvas::I->m_current_brush->m_tip_color = color->m_color;
// stroke->m_canvas->draw_stroke();
// }
//presets->on_brush_changed = [this](Node* target, std::shared_ptr<Brush>& b) {
// // don't change some params
// b->m_tip_size = Canvas::I->m_current_brush->m_tip_size;
// b->m_tip_color = Canvas::I->m_current_brush->m_tip_color;
// *Canvas::I->m_current_brush = *b;
// stroke->m_preview->draw_stroke();
// stroke->m_brush_thumb->set_image(b->m_brush_thumb_path);
// stroke->update_controls();
//};
canvas->m_canvas->on_mode_changed = [this](kCanvasMode prev, kCanvasMode mode) {
};
color->on_color_changed = [this](Node* target, glm::vec4 color) {
Canvas::I->m_current_brush->m_tip_color = color;
};
@@ -226,7 +210,7 @@ void App::init_sidebar()
button->on_click = [this, button](Node*) {
panels->get_child_index(stroke.get()) == -1 ? panels->add_child(stroke) : panels->remove_child(stroke.get());
panels->fix_scroll();
button->set_color(panels->get_child_index(stroke.get()) == -1 ? color_button_normal : color_button_hlight);
button->set_active(panels->get_child_index(stroke.get()) == -1);
};
}
//if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-brush"))
@@ -250,7 +234,7 @@ void App::init_sidebar()
button->on_click = [this, button](Node*) {
panels->get_child_index(color.get()) == -1 ? panels->add_child(color) : panels->remove_child(color.get());
panels->fix_scroll();
button->set_color(panels->get_child_index(color.get()) == -1 ? color_button_normal : color_button_hlight);
button->set_active(panels->get_child_index(color.get()) == -1);
// auto pick = layout[main_id]->add_child<NodeColorPicker>();
// pick->m_color_cur->m_color = Canvas::I->m_current_brush->m_tip_color;
};
@@ -260,7 +244,7 @@ void App::init_sidebar()
button->on_click = [this, button](Node*) {
panels->get_child_index(layers.get()) == -1 ? panels->add_child(layers) : panels->remove_child(layers.get());
panels->fix_scroll();
button->set_color(panels->get_child_index(layers.get()) == -1 ? color_button_normal : color_button_hlight);
button->set_active(panels->get_child_index(layers.get()) == -1);
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-grids-panel"))
@@ -268,23 +252,23 @@ void App::init_sidebar()
button->on_click = [this, button](Node*) {
panels->get_child_index(grid.get()) == -1 ? panels->add_child(grid) : panels->remove_child(grid.get());
panels->fix_scroll();
button->set_color(panels->get_child_index(grid.get()) == -1 ? color_button_normal : color_button_hlight);
button->set_active(panels->get_child_index(grid.get()) == -1);
};
}
}
template<class T>
void select_button(Node* main, T* button) {
main->find<NodeButtonCustom>("btn-pen")->set_color(color_button_normal);
main->find<NodeButtonCustom>("btn-erase")->set_color(color_button_normal);
main->find<NodeButtonCustom>("btn-line")->set_color(color_button_normal);
main->find<NodeButton>("btn-cam")->set_color(color_button_normal);
main->find<NodeButton>("btn-grid")->set_color(color_button_normal);
main->find<NodeButton>("btn-copy")->set_color(color_button_normal);
main->find<NodeButton>("btn-cut")->set_color(color_button_normal);
main->find<NodeButtonCustom>("btn-pen")->set_active(false);
main->find<NodeButtonCustom>("btn-erase")->set_active(false);
main->find<NodeButtonCustom>("btn-line")->set_active(false);
main->find<NodeButton>("btn-cam")->set_active(false);
main->find<NodeButton>("btn-grid")->set_active(false);
main->find<NodeButton>("btn-copy")->set_active(false);
main->find<NodeButton>("btn-cut")->set_active(false);
//main->find<NodeButton>("btn-fill")->set_color(color_button_normal);
main->find<NodeButtonCustom>("btn-mask-free")->set_color(color_button_normal);
main->find<NodeButtonCustom>("btn-mask-line")->set_color(color_button_normal);
button->set_color(color_button_hlight);
main->find<NodeButtonCustom>("btn-mask-free")->set_active(false);
main->find<NodeButtonCustom>("btn-mask-line")->set_active(false);
button->set_active(false);
};
void App::init_toolbar_draw()
@@ -293,16 +277,16 @@ void App::init_toolbar_draw()
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::Draw);
Canvas::set_mode(kCanvasMode::Draw);
};
button->set_color(color_button_hlight);
Canvas::set_mode(Canvas::kCanvasMode::Draw);
//button->set_active(true);
Canvas::set_mode(kCanvasMode::Draw);
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-pick"))
{
button->on_click = [this](Node*) {
CanvasModePen* mode = (CanvasModePen*)canvas->m_canvas->modes[(int)Canvas::kCanvasMode::Draw][0];
if (mode && canvas->m_canvas->m_current_mode == Canvas::kCanvasMode::Draw)
CanvasModePen* mode = (CanvasModePen*)canvas->m_canvas->modes[(int)kCanvasMode::Draw][0];
if (mode && canvas->m_canvas->m_current_mode == kCanvasMode::Draw)
{
mode->m_picking = !mode->m_picking;
}
@@ -318,67 +302,67 @@ void App::init_toolbar_draw()
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::Erase);
Canvas::set_mode(kCanvasMode::Erase);
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-line"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::Line);
Canvas::set_mode(kCanvasMode::Line);
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-cam"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::Camera);
Canvas::set_mode(kCanvasMode::Camera);
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-grid"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::Grid);
Canvas::set_mode(kCanvasMode::Grid);
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-copy"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
auto m = static_cast<CanvasModeTransform*>(canvas->m_canvas->modes[(int)Canvas::kCanvasMode::Transform][0]);
auto m = static_cast<CanvasModeTransform*>(canvas->m_canvas->modes[(int)kCanvasMode::Copy][0]);
m->m_action = CanvasModeTransform::ActionType::Copy;
Canvas::set_mode(Canvas::kCanvasMode::Transform);
Canvas::set_mode(kCanvasMode::Copy);
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-cut"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
auto m = static_cast<CanvasModeTransform*>(canvas->m_canvas->modes[(int)Canvas::kCanvasMode::Transform][0]);
auto m = static_cast<CanvasModeTransform*>(canvas->m_canvas->modes[(int)kCanvasMode::Cut][0]);
m->m_action = CanvasModeTransform::ActionType::Cut;
Canvas::set_mode(Canvas::kCanvasMode::Transform);
Canvas::set_mode(kCanvasMode::Cut);
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-fill"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::Fill);
Canvas::set_mode(kCanvasMode::Fill);
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-mask-free"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::MaskFree);
Canvas::set_mode(kCanvasMode::MaskFree);
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-mask-line"))
{
button->on_click = [this, button](Node*) {
select_button(layout[main_id], button);
Canvas::set_mode(Canvas::kCanvasMode::MaskLine);
Canvas::set_mode(kCanvasMode::MaskLine);
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-bucket"))
@@ -426,10 +410,10 @@ void App::init_menu_file()
}
else
{
auto m = static_cast<CanvasModeTransform*>(canvas->m_canvas->modes[(int)Canvas::kCanvasMode::Transform][0]);
auto m = static_cast<CanvasModeTransform*>(canvas->m_canvas->modes[(int)kCanvasMode::Import][0]);
m->m_action = CanvasModeTransform::ActionType::Import;
m->m_source_image = std::move(img);
Canvas::set_mode(Canvas::kCanvasMode::Transform);
Canvas::set_mode(kCanvasMode::Import);
}
async_redraw();
async_end();
@@ -701,7 +685,7 @@ void App::init_menu_layer()
popup->m_flood_events = true;
popup->m_capture_children = false;
popup->find<NodeButtonCustom>("clear-grids")->on_click = [this](Node*) {
CanvasModeGrid* mode = (CanvasModeGrid*)Canvas::modes[(int)Canvas::kCanvasMode::Grid][0];
CanvasModeGrid* mode = (CanvasModeGrid*)Canvas::modes[(int)kCanvasMode::Grid][0];
mode->clear();
popup->mouse_release();
popup->destroy();