From b0933c29fb9dc3e9a237be15f831e6426d372eef Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 5 Mar 2019 23:41:43 +0100 Subject: [PATCH] integrate quick brushes, simulate pressed keys on windows active --- data/layout.xml | 14 +++++++------- src/app.cpp | 22 +++++++++++----------- src/app_layout.cpp | 19 ++++++++++--------- src/canvas_modes.cpp | 29 ++++++++++++++++++++++------- src/canvas_modes.h | 5 ++++- src/main.cpp | 14 ++++++++++++++ src/node_panel_quick.cpp | 18 +++++++++--------- src/node_panel_quick.h | 2 ++ 8 files changed, 79 insertions(+), 44 deletions(-) diff --git a/data/layout.xml b/data/layout.xml index ed18aee..f6925ec 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -84,9 +84,9 @@ - + @@ -1471,7 +1471,7 @@ Here's a list of what's available in this release. - + @@ -1541,7 +1541,7 @@ Here's a list of what's available in this release. - + - + @@ -1596,8 +1596,8 @@ Here's a list of what's available in this release. - - + + diff --git a/src/app.cpp b/src/app.cpp index 879f041..0fb379f 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -619,23 +619,23 @@ void App::update(float dt) #else glBindFramebuffer(GL_FRAMEBUFFER, 0); #endif - //canvas->watch(observer); glEnable(GL_SCISSOR_TEST); for (int i = 0; i < layout[main_id]->m_children.size(); i++) layout[main_id]->m_children[i]->watch(observer); //msgbox->watch(observer); glDisable(GL_SCISSOR_TEST); -// glEnable(GL_BLEND); -// sampler.bind(0); -// ShaderManager::use(kShader::Texture); -// ShaderManager::u_int(kShaderUniform::Tex, 0); -// ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1.f, 1.f, -1.f, 1.f)); -// glActiveTexture(GL_TEXTURE0); -// uirtt.bindTexture(); -// m_face_plane.draw_fill(); -// uirtt.unbindTexture(); -// glDisable(GL_BLEND); + //canvas->watch(observer); + //glEnable(GL_BLEND); + //sampler.bind(0); + //ShaderManager::use(kShader::Texture); + //ShaderManager::u_int(kShaderUniform::Tex, 0); + //ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1.f, 1.f, -1.f, 1.f)); + //glActiveTexture(GL_TEXTURE0); + //uirtt.bindTexture(); + //m_face_plane.draw_fill(); + //uirtt.unbindTexture(); + //glDisable(GL_BLEND); if (rec_running) { diff --git a/src/app_layout.cpp b/src/app_layout.cpp index 52139f8..aa5e93c 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -116,6 +116,7 @@ void App::init_sidebar() //presets = find_or_create_panel(panels); canvas->m_canvas->on_mode_changed = [this](kCanvasMode prev, kCanvasMode mode) { + brush_update(); }; color->on_color_changed = [this](Node* target, glm::vec4 color) { Canvas::I->m_current_brush->m_tip_color = color; @@ -124,19 +125,18 @@ void App::init_sidebar() stroke->on_brush_changed = [this](Node* target, const std::string& path, const std::string& thumb) { Canvas::I->m_current_brush->load_tip(path, thumb); - stroke->m_preview->draw_stroke(); + brush_update(); }; stroke->on_pattern_changed = [this](Node*target, const std::string& path, const std::string& thumb) { Canvas::I->m_current_brush->load_pattern(path, thumb); - stroke->m_preview->draw_stroke(); + brush_update(); }; stroke->on_dual_changed = [this](Node*target, const std::string& path, const std::string& thumb) { Canvas::I->m_current_brush->load_dual(path, thumb); - stroke->m_preview->draw_stroke(); + brush_update(); }; stroke->on_stroke_change = [this](Node*) { - quick->m_slider_flow->set_value(stroke->m_tip_flow->get_value()); - quick->m_slider_size->set_value(stroke->m_tip_size->get_value()); + brush_update(); }; quick->on_color_change = [this](Node*, glm::vec3 c) { @@ -150,9 +150,8 @@ void App::init_sidebar() stroke->set_size(value, true, true); }; quick->on_brush_change = [this](Node*, std::shared_ptr b) { - Canvas::I->m_current_brush = b; - stroke->m_preview->m_brush = b; - stroke->m_preview->draw_stroke(); + *Canvas::I->m_current_brush = *b; + brush_update(); }; layers->on_layer_add = [this](Node*) { @@ -807,6 +806,8 @@ void App::brush_update() stroke->update_controls(); quick->m_slider_flow->set_value(stroke->m_tip_flow->get_value()); quick->m_slider_size->set_value(stroke->m_tip_size->get_value()); + *quick->m_button_brush_current_preview->m_brush = *Canvas::I->m_current_brush; + quick->m_button_brush_current_preview->draw_stroke(); } void App::init_menu_layer() @@ -968,7 +969,7 @@ void App::initLayout() butt->set_color({ 0, 0, 0, 0 }); //n->SetPosition(100, 100); YGNodeStyleSetPosition(butt->y_node, YGEdgeBottom, 8); - YGNodeStyleSetPosition(butt->y_node, YGEdgeLeft, 15); + YGNodeStyleSetPosition(butt->y_node, YGEdgeLeft, 10); //butt->SetSize(30, 45); layout[main_id]->add_child(butt); diff --git a/src/canvas_modes.cpp b/src/canvas_modes.cpp index b83e587..4a975d9 100644 --- a/src/canvas_modes.cpp +++ b/src/canvas_modes.cpp @@ -265,16 +265,14 @@ void CanvasModePen::leave() void CanvasModePen::enter(kCanvasMode prev) { m_cur_pos = Canvas::I->m_cur_pos; - if (m_brush) - { - *Canvas::I->m_current_brush = *m_brush; - Canvas::I->m_current_brush->load(); - App::I.brush_update(); - } - else + if (!m_brush) { m_brush = std::make_shared(*Canvas::I->m_current_brush); + m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png"); } + *Canvas::I->m_current_brush = *m_brush; + Canvas::I->m_current_brush->load(); + App::I.brush_update(); } //////////////////////////////////////////////////////////////////// @@ -337,6 +335,23 @@ void CanvasModeLine::init() m_line.create(); } +void CanvasModeLine::enter(kCanvasMode prev) +{ + if (!m_brush) + { + m_brush = std::make_shared(); + m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png"); + } + *Canvas::I->m_current_brush = *m_brush; + Canvas::I->m_current_brush->load(); + App::I.brush_update(); +} + +void CanvasModeLine::leave() +{ + *m_brush = *Canvas::I->m_current_brush; +} + //////////////////////////////////////////////////////////////////// void CanvasModeCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc) diff --git a/src/canvas_modes.h b/src/canvas_modes.h index 48cf4c0..48293ff 100644 --- a/src/canvas_modes.h +++ b/src/canvas_modes.h @@ -70,7 +70,6 @@ class CanvasModePen : public CanvasMode bool m_draw_tip = false; bool m_dragging = false; glm::vec2 m_pan_start; - glm::vec2 m_cur_pos; glm::vec2 m_size_pos_start; float m_size_value_start; float m_camera_fov; @@ -88,6 +87,7 @@ public: virtual void enter(kCanvasMode prev) override; virtual void leave() override; bool m_picking = false; + glm::vec2 m_cur_pos; }; class CanvasModeLine : public CanvasMode @@ -96,10 +96,13 @@ class CanvasModeLine : public CanvasMode bool m_dragging = false; glm::vec2 m_drag_start; glm::vec2 m_drag_pos; + std::shared_ptr m_brush; public: virtual void on_MouseEvent(MouseEvent* me, glm::vec2& loc) override; virtual void on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) override; virtual void init() override; + virtual void enter(kCanvasMode prev) override; + virtual void leave() override; }; class CanvasModeGrid : public CanvasMode diff --git a/src/main.cpp b/src/main.cpp index b890309..e4cc76d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -877,6 +877,18 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) } } } + else + { + for (int i = 0; i < 256; i++) + { + if ((int)convert_key(i) == k) + { + bool down = GetKeyState(i) & 0x8000; + if (down) + App::I.key_down((kKey)k); + } + } + } } }); break; @@ -901,7 +913,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) } case WM_SYSKEYDOWN: case WM_KEYDOWN: + if ((lp >> 30 & 1) == 0) // ignore repeated { + std::lock_guard lock(task_mutex); tasklist.emplace_back([wp] { App::I.key_down(convert_key((int)wp)); diff --git a/src/node_panel_quick.cpp b/src/node_panel_quick.cpp index 90b0924..f7395e0 100644 --- a/src/node_panel_quick.cpp +++ b/src/node_panel_quick.cpp @@ -30,12 +30,6 @@ void NodePanelQuick::set_color(glm::vec3 color) void NodePanelQuick::init_controls() { - //auto s = find("quick-brush1"); - //s->m_brush = std::make_shared(); - //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(); @@ -47,13 +41,17 @@ void NodePanelQuick::init_controls() m_slider_size = find("quick-size"); m_slider_size->on_value_changed = [this](Node* target, float value) { - static_cast(m_button_brush_current->m_children[0].get())->draw_stroke(); + auto m = static_cast(Canvas::I->modes[(int)kCanvasMode::Draw][0]); + m->m_cur_pos = m_pos + glm::vec2(m_size.x / 2.f, -50.f); + m_button_brush_current_preview->draw_stroke(); if (on_size_change) on_size_change(target, value); }; m_slider_flow = find("quick-flow"); m_slider_flow->on_value_changed = [this](Node* target, float value) { - static_cast(m_button_brush_current->m_children[0].get())->draw_stroke(); + auto m = static_cast(Canvas::I->modes[(int)kCanvasMode::Draw][0]); + m->m_cur_pos = m_pos + glm::vec2(m_size.x / 2.f, -50.f); + m_button_brush_current_preview->draw_stroke(); if (on_flow_change) on_flow_change(target, value); }; @@ -78,6 +76,7 @@ void NodePanelQuick::init_controls() m_button_brush3 = init_button_brush("quick-brush3"); m_button_brush_current = m_button_brush1; m_button_brush_current->set_active(true); + m_button_brush_current_preview = static_cast(m_button_brush_current->m_children[0].get()); } NodeButtonCustom* NodePanelQuick::init_button_brush(const std::string& name) @@ -103,8 +102,9 @@ void NodePanelQuick::handle_button_brush_click(Node* button) b->set_active(true); m_button_brush_current->set_active(false); m_button_brush_current = b; + m_button_brush_current_preview = static_cast(button->m_children[0].get()); if (on_brush_change) - on_brush_change(this, static_cast(button->m_children[0].get())->m_brush); + on_brush_change(this, m_button_brush_current_preview->m_brush); return; } diff --git a/src/node_panel_quick.h b/src/node_panel_quick.h index 3c229f0..f1add96 100644 --- a/src/node_panel_quick.h +++ b/src/node_panel_quick.h @@ -4,6 +4,7 @@ #include "node_border.h" #include "node_dialog_picker.h" #include "brush.h" +#include "node_stroke_preview.h" class NodePanelQuick : public NodeBorder { @@ -25,6 +26,7 @@ public: NodeButtonCustom* m_button_brush2; NodeButtonCustom* m_button_brush3; NodeButtonCustom* m_button_brush_current; + NodeStrokePreview* m_button_brush_current_preview; std::shared_ptr m_picker; virtual Node* clone_instantiate() const override; virtual void clone_finalize(Node* dest) const override;