diff --git a/src/app_layout.cpp b/src/app_layout.cpp index c68468c..7541fe1 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -210,7 +210,7 @@ void App::init_sidebar() button->on_click = [this, button](Node*) { panels->get_child_index(stroke.get()) == -1 ? panels->add_child(stroke) : panels->remove_child(stroke.get()); panels->fix_scroll(); - button->set_active(panels->get_child_index(stroke.get()) == -1); + button->set_active(panels->get_child_index(stroke.get()) != -1); }; } //if (auto* button = layout[main_id]->find("btn-brush")) @@ -234,7 +234,7 @@ void App::init_sidebar() button->on_click = [this, button](Node*) { panels->get_child_index(color.get()) == -1 ? panels->add_child(color) : panels->remove_child(color.get()); panels->fix_scroll(); - button->set_active(panels->get_child_index(color.get()) == -1); + button->set_active(panels->get_child_index(color.get()) != -1); // auto pick = layout[main_id]->add_child(); // pick->m_color_cur->m_color = Canvas::I->m_current_brush->m_tip_color; }; @@ -244,7 +244,7 @@ void App::init_sidebar() button->on_click = [this, button](Node*) { panels->get_child_index(layers.get()) == -1 ? panels->add_child(layers) : panels->remove_child(layers.get()); panels->fix_scroll(); - button->set_active(panels->get_child_index(layers.get()) == -1); + button->set_active(panels->get_child_index(layers.get()) != -1); }; } if (auto* button = layout[main_id]->find("btn-grids-panel")) @@ -252,7 +252,7 @@ void App::init_sidebar() button->on_click = [this, button](Node*) { panels->get_child_index(grid.get()) == -1 ? panels->add_child(grid) : panels->remove_child(grid.get()); panels->fix_scroll(); - button->set_active(panels->get_child_index(grid.get()) == -1); + button->set_active(panels->get_child_index(grid.get()) != -1); }; } } diff --git a/src/canvas_modes.cpp b/src/canvas_modes.cpp index 210c30e..aabea1e 100644 --- a/src/canvas_modes.cpp +++ b/src/canvas_modes.cpp @@ -926,9 +926,14 @@ void CanvasModeTransform::enter(kCanvasMode prev) return; } + // avoid recursive loop, store the last different mode not using Transform + static kCanvasMode last_prev = kCanvasMode::Draw; + if (prev != kCanvasMode::Copy && prev != kCanvasMode::Cut && prev != kCanvasMode::Import) + last_prev = prev; + if (prev != kCanvasMode::MaskFree && prev != kCanvasMode::MaskLine) { - Canvas::set_mode(prev); + Canvas::set_mode(last_prev); return; } @@ -936,7 +941,7 @@ void CanvasModeTransform::enter(kCanvasMode prev) if (m->m_points2d.size() < 3) { - Canvas::set_mode(prev); + Canvas::set_mode(last_prev); return; } diff --git a/src/node_scroll.cpp b/src/node_scroll.cpp index 5883120..dae4935 100644 --- a/src/node_scroll.cpp +++ b/src/node_scroll.cpp @@ -24,41 +24,17 @@ void NodeScroll::fix_scroll() auto rect = get_children_rect(); m_offset = glm::clamp(m_offset, - zw(rect) + zw(m_clip_uncut) - padoff, { 0, 0 }); m_pos_offset_childred = m_offset; +} +void NodeScroll::on_tick(float dt) +{ + auto pad = GetPadding(); + auto rect = get_children_rect(); // fix scrollbar float sz = m_size.y - (pad[0] + pad[2]); - if (rect.w == 0 || rect.w <= sz) - { - YGNodeStyleSetPadding(y_node, YGEdgeRight, 5); - return; - } - YGNodeStyleSetPadding(y_node, YGEdgeRight, 35); -} - -void NodeScroll::loaded() -{ - fix_scroll(); -} - -void NodeScroll::added(Node* parent) -{ - fix_scroll(); -} - -void NodeScroll::on_child_added(Node* child) -{ - fix_scroll(); -} - -void NodeScroll::on_child_removed(Node* child) -{ - fix_scroll(); -} - -void NodeScroll::handle_resize(glm::vec2 old_size, glm::vec2 new_size) -{ - Node::handle_resize(old_size, new_size); - fix_scroll(); + float new_pad = rect.w == 0 || rect.w <= sz ? 5 : 35; + if (pad[1] != new_pad) + YGNodeStyleSetPadding(y_node, YGEdgeRight, new_pad); } void NodeScroll::draw() diff --git a/src/node_scroll.h b/src/node_scroll.h index b3d6b71..a05a276 100644 --- a/src/node_scroll.h +++ b/src/node_scroll.h @@ -14,10 +14,6 @@ public: virtual Node* clone_instantiate() const override; virtual kEventResult handle_event(Event* e) override; virtual void draw() override; - virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override; - virtual void on_child_added(Node* child) override; - virtual void on_child_removed(Node* child) override; - virtual void added(Node* parent) override; - virtual void loaded() override; + virtual void on_tick(float dt) override; void fix_scroll(); };