separate pen mode and camera in different modes to be composed, start implementing line draw mode
This commit is contained in:
@@ -7,58 +7,115 @@
|
||||
NodeCanvas* CanvasMode::node;
|
||||
ui::Canvas* CanvasMode::canvas;
|
||||
|
||||
void CanvasModePen::on_MouseDownL(MouseEvent* me, glm::vec2& loc)
|
||||
void CanvasModeBasicCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
canvas->stroke_start(loc, 1.f, node->m_brush);
|
||||
m_dragging = true;
|
||||
node->mouse_capture();
|
||||
switch (me->m_type)
|
||||
{
|
||||
case kEventType::MouseDownL:
|
||||
break;
|
||||
case kEventType::MouseUpL:
|
||||
break;
|
||||
case kEventType::MouseDownR:
|
||||
m_draggingR = true;
|
||||
m_dragR_start = me->m_pos;
|
||||
m_pan_start = canvas->m_pan;
|
||||
node->mouse_capture();
|
||||
break;
|
||||
case kEventType::MouseUpR:
|
||||
m_draggingR = false;
|
||||
node->mouse_release();
|
||||
break;
|
||||
case kEventType::MouseMove:
|
||||
if (m_draggingR)
|
||||
canvas->m_pan = m_pan_start + (me->m_pos - m_dragR_start) * glm::vec2(-1, -1);
|
||||
canvas->m_cam_rot = canvas->m_pan * 0.003f;
|
||||
break;
|
||||
case kEventType::MouseScroll:
|
||||
m_zoom_canvas += me->m_scroll_delta * 0.1f;
|
||||
canvas->m_cam_fov -= me->m_scroll_delta * 20.1f;
|
||||
break;
|
||||
case kEventType::MouseCancel:
|
||||
m_draggingR = false;
|
||||
node->mouse_release();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void CanvasModePen::on_MouseUpL(MouseEvent* me, glm::vec2& loc)
|
||||
|
||||
void CanvasModeBasicCamera::on_GestureEvent(GestureEvent* ge)
|
||||
{
|
||||
canvas->stroke_end();
|
||||
m_dragging = false;
|
||||
node->mouse_release();
|
||||
switch (ge->m_type)
|
||||
{
|
||||
case kEventType::GestureStart:
|
||||
m_pan_start = canvas->m_pan;
|
||||
m_zoom_start = m_zoom_canvas;
|
||||
m_camera_fov = canvas->m_cam_fov;
|
||||
break;
|
||||
case kEventType::GestureMove:
|
||||
canvas->m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(-1, -1) * 0.3f;
|
||||
canvas->m_cam_fov = m_camera_fov - ge->m_distance_delta * .05f;
|
||||
canvas->m_cam_rot = canvas->m_pan * 0.003f;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void CanvasModePen::on_MouseDownR(MouseEvent* me, glm::vec2& loc)
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
m_draggingR = true;
|
||||
m_dragR_start = me->m_pos;
|
||||
m_pan_start = m_pan;
|
||||
node->mouse_capture();
|
||||
switch (me->m_type)
|
||||
{
|
||||
case kEventType::MouseDownL:
|
||||
canvas->stroke_start(loc, 1.f, node->m_brush);
|
||||
m_dragging = true;
|
||||
node->mouse_capture();
|
||||
break;
|
||||
case kEventType::MouseUpL:
|
||||
canvas->stroke_end();
|
||||
m_dragging = false;
|
||||
node->mouse_release();
|
||||
break;
|
||||
case kEventType::MouseMove:
|
||||
if (m_dragging)
|
||||
canvas->stroke_update(loc, 1.f);
|
||||
break;
|
||||
case kEventType::MouseCancel:
|
||||
m_dragging = false;
|
||||
node->mouse_release();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void CanvasModePen::on_MouseUpR(MouseEvent* me, glm::vec2& loc)
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CanvasModeLine::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
m_draggingR = false;
|
||||
node->mouse_release();
|
||||
}
|
||||
void CanvasModePen::on_MouseMove(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
if (m_dragging)
|
||||
canvas->stroke_update(loc, 1.f);
|
||||
if (m_draggingR)
|
||||
m_pan = m_pan_start + (me->m_pos - m_dragR_start) * glm::vec2(-1, -1);
|
||||
m_cur = loc;
|
||||
canvas->m_cam_rot = m_pan * 0.003f;
|
||||
}
|
||||
void CanvasModePen::on_MouseScroll(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
m_zoom_canvas += me->m_scroll_delta * 0.1f;
|
||||
canvas->m_cam_fov -= me->m_scroll_delta * 20.1f;
|
||||
}
|
||||
void CanvasModePen::on_MouseCancel(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
m_dragging = false;
|
||||
node->mouse_release();
|
||||
}
|
||||
void CanvasModePen::on_GestureStart(GestureEvent* ge)
|
||||
{
|
||||
m_pan_start = m_pan;
|
||||
m_zoom_start = m_zoom_canvas;
|
||||
m_camera_fov = canvas->m_cam_fov;
|
||||
}
|
||||
void CanvasModePen::on_GestureMove(GestureEvent* ge)
|
||||
{
|
||||
m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(-1, -1) * 0.3f;
|
||||
canvas->m_cam_fov = m_camera_fov - ge->m_distance_delta * .05f;
|
||||
canvas->m_cam_rot = m_pan * 0.003f;
|
||||
switch (me->m_type)
|
||||
{
|
||||
case kEventType::MouseDownL:
|
||||
if (m_stage == 0)
|
||||
{
|
||||
canvas->stroke_start(loc, 1.f, node->m_brush);
|
||||
node->mouse_capture();
|
||||
m_stage = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
canvas->stroke_update(loc, 1.f);
|
||||
//canvas->stroke_end();
|
||||
node->mouse_release();
|
||||
m_stage = 0;
|
||||
}
|
||||
break;
|
||||
case kEventType::MouseCancel:
|
||||
node->mouse_release();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user