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

@@ -5,7 +5,21 @@
#include "texture.h"
#include <poly2tri.h>
class Canvas;
enum class kCanvasMode
{
Draw,
Erase,
Line,
Camera,
Grid,
Import,
Cut,
Copy,
Fill,
MaskFree,
MaskLine,
COUNT,
};
struct CameraData
{
@@ -22,13 +36,13 @@ class CanvasMode
{
public:
static class NodeCanvas* node;
static Canvas* canvas;
//static Canvas* canvas;
virtual void on_MouseEvent(MouseEvent* me, glm::vec2& loc) {}
virtual void on_KeyEvent(KeyEvent* ke) {}
virtual void on_GestureEvent(GestureEvent* ge) {}
virtual void on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) {}
virtual void init() {}
virtual void enter() {}
virtual void enter(kCanvasMode prev) {}
virtual void leave() {}
CanvasMode() = default;
virtual ~CanvasMode() = default;
@@ -71,7 +85,7 @@ public:
virtual void on_GestureEvent(GestureEvent* ge) override;
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;
virtual void enter() override;
virtual void enter(kCanvasMode prev) override;
virtual void leave() override;
bool m_picking = false;
};
@@ -127,14 +141,20 @@ public:
virtual void leave() override;
};
class CanvasModeMaskFree : public CanvasMode
class CanvasModeMaskBase : public CanvasMode
{
protected:
friend class CanvasModeTransform;
DynamicShape m_shape;
bool m_dragging = false;
std::vector<vertex_t> m_points;
std::vector<glm::vec2> m_points2d;
CameraData m_selection_cam;
public:
};
class CanvasModeMaskFree : public CanvasModeMaskBase
{
public:
virtual void on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) override;
virtual void on_MouseEvent(MouseEvent* me, glm::vec2& loc) override;
@@ -143,19 +163,15 @@ public:
void clear();
};
class CanvasModeMaskLine : public CanvasMode
class CanvasModeMaskLine : public CanvasModeMaskBase
{
DynamicShape m_shape;
bool m_dragging = false;
std::vector<vertex_t> m_points;
std::vector<glm::vec2> m_points2d;
std::map<int, int> m_dirty_planes;
bool m_active_tool = false;
public:
virtual void on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) override;
virtual void on_MouseEvent(MouseEvent* me, glm::vec2& loc) override;
virtual void init() override;
virtual void enter() override;
virtual void enter(kCanvasMode prev) override;
virtual void leave() override;
};
@@ -186,6 +202,7 @@ class CanvasModeTransform : public CanvasMode
std::vector<vertex_t> m_points_face[6];
std::map<int, int> m_dirty_planes{};
bool m_active_tool = false;
bool m_commit_on_leave = false;
public:
enum class ActionType : uint8_t { Copy, Cut, Import };
ActionType m_action;
@@ -194,6 +211,6 @@ public:
virtual void on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) override;
virtual void on_MouseEvent(MouseEvent* me, glm::vec2& loc) override;
virtual void init() override;;
virtual void enter() override;
virtual void enter(kCanvasMode prev) override;
virtual void leave() override;
};