diff --git a/engine/canvas_modes.cpp b/engine/canvas_modes.cpp index 9c18550..c20ba1f 100644 --- a/engine/canvas_modes.cpp +++ b/engine/canvas_modes.cpp @@ -20,6 +20,8 @@ void CanvasModeBasicCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc) case kEventType::MouseUpL: break; case kEventType::MouseDownR: + if (App::I.keys[(int)kKey::KeyAlt]) + break; m_draggingR = true; m_dragR_start = me->m_pos; m_pan_start = canvas->m_pan; @@ -104,8 +106,26 @@ void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc) m_dragging = false; m_picking = false; break; + case kEventType::MouseDownR: + if (App::I.keys[(int)kKey::KeyAlt]) + { + m_resizing = true; + m_dragging = true; + m_size_pos_start = m_cur_pos; + m_size_value_start = canvas->m_current_brush.m_tip_size; + node->mouse_capture(); + } + break; + case kEventType::MouseUpR: + if (m_dragging && m_resizing) + { + node->mouse_release(); + m_dragging = false; + m_resizing = false; + } + break; case kEventType::MouseMove: - if (m_dragging && !m_picking) + if (m_dragging && !m_picking && !m_resizing) canvas->stroke_update(loc, me->m_pressure); if (m_dragging && m_picking) { @@ -113,6 +133,11 @@ void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc) canvas->m_current_brush.m_tip_color = pix; App::I.color->set_color(pix); } + if (m_dragging && m_resizing) + { + auto diff = m_cur_pos - m_size_pos_start; + canvas->m_current_brush.m_tip_size = m_size_value_start + diff.x * 0.001f; + } m_cur_pos = loc; break; case kEventType::MouseCancel: @@ -123,9 +148,9 @@ void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc) node->mouse_release(); } if (m_picking) - { m_picking = false; - } + if (m_resizing) + m_resizing = false; break; default: break; @@ -135,8 +160,9 @@ void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc) void CanvasModePen::on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) { #ifndef __IOS__ - if (!m_dragging && !m_picking) + if (!m_dragging && !m_picking || m_resizing) { + auto pos = m_resizing ? m_size_pos_start : m_cur_pos; ui::ShaderManager::use(ui::kShader::StrokePreview); ui::ShaderManager::u_int(ui::kShaderUniform::Tex, 0); ui::ShaderManager::u_float(ui::kShaderUniform::Alpha, canvas->m_current_brush.m_tip_flow); @@ -147,7 +173,7 @@ void CanvasModePen::on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, glm::scale(glm::vec3(1, -1, 1)) * ortho * - glm::translate(glm::vec3(m_cur_pos, 0)) * + glm::translate(glm::vec3(pos, 0)) * glm::scale(glm::vec3(canvas->m_current_brush.m_tip_size * 800.f * tip_scale)) ); glEnable(GL_BLEND); diff --git a/engine/canvas_modes.h b/engine/canvas_modes.h index d923c7b..c70c398 100644 --- a/engine/canvas_modes.h +++ b/engine/canvas_modes.h @@ -40,11 +40,15 @@ class CanvasModePen : public CanvasMode 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; float m_zoom_canvas = 1.f; float m_zoom_start; bool m_valid_brush = false; ui::Brush m_brush; + // resizing the tip + bool m_resizing = false; 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;