resize using ALT+RMB

This commit is contained in:
2018-07-27 11:20:28 +02:00
parent a2abdfba7e
commit b06453bd7b
2 changed files with 35 additions and 5 deletions

View File

@@ -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);

View File

@@ -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;