implement pen and erase as strategy pattern introducing the CanvasMode classes
This commit is contained in:
@@ -1967,15 +1967,6 @@ public:
|
||||
|
||||
class NodeCanvas : public Node
|
||||
{
|
||||
bool m_dragging = false;
|
||||
bool m_draggingR = false;
|
||||
glm::vec2 m_dragR_start;
|
||||
glm::vec2 m_pan_start;
|
||||
glm::vec2 m_pan;
|
||||
glm::vec2 m_cur;
|
||||
float m_camera_fov;
|
||||
float m_zoom_canvas = 1.f;
|
||||
float m_zoom_start;
|
||||
public:
|
||||
std::string data_path;
|
||||
std::unique_ptr<ui::Canvas> m_canvas;
|
||||
@@ -1987,9 +1978,9 @@ public:
|
||||
{
|
||||
m_mouse_ignore = false;
|
||||
m_canvas = std::make_unique<ui::Canvas>();
|
||||
CanvasMode::node = this;
|
||||
CanvasMode::canvas = m_canvas.get();
|
||||
m_canvas->create(1024, 1024);
|
||||
//m_canvas->layer_add("asd");
|
||||
//m_canvas->clear();
|
||||
m_sampler.create();
|
||||
m_face_plane.create<1>(2, 2);
|
||||
}
|
||||
@@ -1998,7 +1989,6 @@ public:
|
||||
Node::restore_context();
|
||||
m_canvas->create(1024, 1024);
|
||||
m_sampler.create();
|
||||
//m_canvas->clear();
|
||||
m_face_plane.create<1>(2, 2);
|
||||
m_canvas->snapshot_restore();
|
||||
}
|
||||
@@ -2023,7 +2013,7 @@ public:
|
||||
glm::ivec4 c = (glm::ivec4)glm::vec4(box.x, (int)(vp[3] - box.y - box.w), box.z, box.w);
|
||||
glViewport(c.x, c.y, c.z, c.w);
|
||||
|
||||
m_canvas->m_cam_rot = m_pan * 0.003f;
|
||||
//m_canvas->m_cam_rot = m_pan * 0.003f;
|
||||
|
||||
//glm::mat4 proj = glm::ortho(0.f, box.z, 0.f, box.w, -1000.f, 1000.f);
|
||||
glm::mat4 proj = glm::perspective(glm::radians(m_canvas->m_cam_fov), box.z / box.w, 0.1f, 1000.f);
|
||||
@@ -2054,7 +2044,7 @@ public:
|
||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp);
|
||||
for (auto layer_index : m_canvas->m_order)
|
||||
{
|
||||
if (!(m_canvas->m_state == ui::Canvas::kPenState::Erase &&
|
||||
if (!(m_canvas->m_state == ui::Canvas::kCanvasMode::Erase &&
|
||||
m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index))
|
||||
{
|
||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_layers[layer_index].m_opacity);
|
||||
@@ -2104,67 +2094,47 @@ public:
|
||||
switch (e->m_type)
|
||||
{
|
||||
case kEventType::MouseDownL:
|
||||
{
|
||||
m_canvas->stroke_start(loc, 1.f, m_brush);
|
||||
m_dragging = true;
|
||||
mouse_capture();
|
||||
m_canvas->m_mode->on_MouseDownL(me, loc);
|
||||
break;
|
||||
}
|
||||
case kEventType::MouseUpL:
|
||||
m_canvas->stroke_end();
|
||||
m_dragging = false;
|
||||
mouse_release();
|
||||
m_canvas->m_mode->on_MouseUpL(me, loc);
|
||||
break;
|
||||
case kEventType::MouseDownR:
|
||||
m_draggingR = true;
|
||||
m_dragR_start = me->m_pos;
|
||||
m_pan_start = m_pan;
|
||||
mouse_capture();
|
||||
m_canvas->m_mode->on_MouseDownR(me, loc);
|
||||
break;
|
||||
case kEventType::MouseUpR:
|
||||
m_draggingR = false;
|
||||
mouse_release();
|
||||
m_canvas->m_mode->on_MouseUpR(me, loc);
|
||||
break;
|
||||
case kEventType::MouseMove:
|
||||
if (m_dragging)
|
||||
m_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;
|
||||
m_canvas->m_mode->on_MouseMove(me, loc);
|
||||
break;
|
||||
case kEventType::MouseScroll:
|
||||
m_zoom_canvas += me->m_scroll_delta * 0.1f;
|
||||
m_canvas->m_cam_fov -= me->m_scroll_delta * 20.1f;
|
||||
m_canvas->m_mode->on_MouseScroll(me, loc);
|
||||
break;
|
||||
case kEventType::MouseCancel:
|
||||
m_dragging = false;
|
||||
mouse_release();
|
||||
m_canvas->m_mode->on_MouseCancel(me, loc);
|
||||
break;
|
||||
case kEventType::KeyDown:
|
||||
if (ke->m_key == kKey::KeyE)
|
||||
m_canvas->m_state = ui::Canvas::kPenState::Erase;
|
||||
if (ke->m_key == kKey::KeySpacebar)
|
||||
m_canvas->m_alpha_lock = true;
|
||||
if (ke->m_key == kKey::AndroidVolumeUp)
|
||||
m_zoom_canvas *= 0.9f;
|
||||
if (ke->m_key == kKey::AndroidVolumeDown)
|
||||
m_zoom_canvas *= 1.1f;
|
||||
// if (ke->m_key == kKey::KeyE)
|
||||
// m_canvas->m_state = ui::Canvas::kPenState::Erase;
|
||||
// if (ke->m_key == kKey::KeySpacebar)
|
||||
// m_canvas->m_alpha_lock = true;
|
||||
// if (ke->m_key == kKey::AndroidVolumeUp)
|
||||
// m_zoom_canvas *= 0.9f;
|
||||
// if (ke->m_key == kKey::AndroidVolumeDown)
|
||||
// m_zoom_canvas *= 1.1f;
|
||||
break;
|
||||
case kEventType::KeyUp:
|
||||
if (ke->m_key == kKey::KeyE)
|
||||
m_canvas->m_state = ui::Canvas::kPenState::Draw;
|
||||
if (ke->m_key == kKey::KeySpacebar)
|
||||
m_canvas->m_alpha_lock = false;
|
||||
// if (ke->m_key == kKey::KeyE)
|
||||
// m_canvas->m_state = ui::Canvas::kPenState::Draw;
|
||||
// if (ke->m_key == kKey::KeySpacebar)
|
||||
// m_canvas->m_alpha_lock = false;
|
||||
break;
|
||||
case kEventType::GestureStart:
|
||||
m_pan_start = m_pan;
|
||||
m_zoom_start = m_zoom_canvas;
|
||||
m_camera_fov = m_canvas->m_cam_fov;
|
||||
m_canvas->m_mode->on_GestureStart(ge);
|
||||
break;
|
||||
case kEventType::GestureMove:
|
||||
m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(-1, -1) * 0.3f;
|
||||
m_canvas->m_cam_fov = m_camera_fov - ge->m_distance_delta * .05f;
|
||||
//m_zoom_canvas = m_zoom_start + ge->m_distance_delta * .001f;
|
||||
m_canvas->m_mode->on_GestureMove(ge);
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
|
||||
Reference in New Issue
Block a user