refactor canvas modes

This commit is contained in:
2019-02-01 22:51:25 +01:00
parent e3f6d1cc44
commit 8e5a8eec1b
12 changed files with 326 additions and 272 deletions

View File

@@ -25,8 +25,7 @@ void NodeCanvas::init()
m_face_plane.create<1>(2, 2);
m_line.create();
CanvasMode::node = this;
CanvasMode::canvas = m_canvas.get();
for (int i = 0; i < (int)Canvas::kCanvasMode::COUNT; i++)
for (int i = 0; i < (int)kCanvasMode::COUNT; i++)
for (auto m : Canvas::modes[i])
m->init();
@@ -44,8 +43,7 @@ void NodeCanvas::restore_context()
m_face_plane.create<1>(2, 2);
m_canvas->snapshot_restore();
CanvasMode::node = this;
CanvasMode::canvas = m_canvas.get();
for (int i = 0; i < (int)Canvas::kCanvasMode::COUNT; i++)
for (int i = 0; i < (int)kCanvasMode::COUNT; i++)
for (auto m : Canvas::modes[i])
m->init();
}
@@ -172,7 +170,7 @@ void NodeCanvas::draw()
m_canvas->m_plane_transform[plane_index] *
glm::translate(glm::vec3(0, 0, -1));
if (m_canvas->m_current_stroke && m_canvas->m_state == Canvas::kCanvasMode::Erase && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
if (m_canvas->m_current_stroke && m_canvas->m_current_mode == kCanvasMode::Erase && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
{
m_sampler.bind(0);
ShaderManager::use(kShader::CompErase);
@@ -352,17 +350,15 @@ void NodeCanvas::draw()
}
glDisable(GL_DEPTH_TEST);
auto transform_mode = static_cast<CanvasModeTransform*>(Canvas::modes[(int)Canvas::kCanvasMode::Transform][0]);
bool importing = transform_mode->m_action == CanvasModeTransform::ActionType::Import;
if (m_canvas->m_smask_active || m_canvas->m_state == Canvas::kCanvasMode::Transform && !importing)
if (m_canvas->m_smask_active || m_canvas->m_current_mode == kCanvasMode::Copy || m_canvas->m_current_mode == kCanvasMode::Cut)
{
m_canvas->modes[(int)Canvas::kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
m_canvas->modes[(int)Canvas::kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
m_canvas->modes[(int)kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
m_canvas->modes[(int)kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
}
// keep drawing the grids
if (m_canvas->m_state != Canvas::kCanvasMode::Grid)
for (auto& mode : Canvas::modes[(int)Canvas::kCanvasMode::Grid])
if (m_canvas->m_current_mode != kCanvasMode::Grid)
for (auto& mode : Canvas::modes[(int)kCanvasMode::Grid])
mode->on_Draw(ortho_proj, proj, camera);
App::I.grid->draw_heightmap(proj, camera, false);
@@ -415,8 +411,8 @@ kEventResult NodeCanvas::handle_event(Event* e)
if (stylus_eraser != me->m_eraser)
{
Canvas::set_mode(me->m_eraser ?
Canvas::kCanvasMode::Erase :
Canvas::kCanvasMode::Draw);
kCanvasMode::Erase :
kCanvasMode::Draw);
stylus_eraser = me->m_eraser;
}
case kEventType::MouseScroll:
@@ -431,7 +427,7 @@ kEventResult NodeCanvas::handle_event(Event* e)
break;
case kEventType::KeyDown:
if (ke->m_key == kKey::KeyE)
Canvas::set_mode(Canvas::kCanvasMode::Erase);
Canvas::set_mode(kCanvasMode::Erase);
if (ke->m_key == kKey::AndroidBack)
if (!ActionManager::empty())
ActionManager::undo();
@@ -439,7 +435,7 @@ kEventResult NodeCanvas::handle_event(Event* e)
break;
case kEventType::KeyUp:
if (ke->m_key == kKey::KeyE)
Canvas::set_mode(Canvas::kCanvasMode::Draw);
Canvas::set_mode(kCanvasMode::Draw);
if (ke->m_key == kKey::KeyTab)
App::I.toggle_ui();
if (ke->m_key == kKey::KeyZ && App::I.keys[(int)kKey::KeyCtrl])