refactor canvas modes
This commit is contained in:
@@ -193,22 +193,23 @@ public:
|
||||
|
||||
std::shared_ptr<Brush> m_current_brush;
|
||||
|
||||
enum class kCanvasMode { Draw, Erase, Line, Camera, Grid, Transform, Fill, MaskFree, MaskLine, COUNT };
|
||||
kCanvasMode m_state{ kCanvasMode::Draw };
|
||||
static std::vector<CanvasMode*> modes[];
|
||||
std::vector<CanvasMode*>* m_mode = nullptr;
|
||||
kCanvasMode m_current_mode = kCanvasMode::Draw;
|
||||
std::function<void(kCanvasMode prev, kCanvasMode mode)> on_mode_changed;
|
||||
static void set_mode(kCanvasMode mode)
|
||||
{
|
||||
auto prev = I->m_current_mode;
|
||||
if (I->m_mode)
|
||||
for (auto& m : *I->m_mode)
|
||||
m->leave();
|
||||
I->m_mode = &modes[(int)mode];
|
||||
I->m_state = mode;
|
||||
I->m_current_mode = mode;
|
||||
if (I->m_mode)
|
||||
for (auto& m : *I->m_mode)
|
||||
m->enter();
|
||||
m->enter(prev);
|
||||
if (I->on_mode_changed)
|
||||
I->on_mode_changed(prev, mode);
|
||||
}
|
||||
|
||||
std::vector<Layer::Snapshot> m_layers_snapshot;
|
||||
|
||||
Reference in New Issue
Block a user