resize using ALT+RMB
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user