Parcourir la source

PixelPaint: Have `ToolboxWidget` keep track of active tool

Since there's only one global toolbox, it makes sense to store the
active tool in here, since we don't really have control over the
deletion of an editor.
Mustafa Quraish il y a 3 ans
Parent
commit
ecf8f243a6

+ 4 - 2
Userland/Applications/PixelPaint/ToolboxWidget.cpp

@@ -53,10 +53,12 @@ void ToolboxWidget::setup_tools()
     auto add_tool = [&](String name, StringView const& icon_name, GUI::Shortcut const& shortcut, NonnullOwnPtr<Tool> tool) {
         auto action = GUI::Action::create_checkable(move(name), shortcut, Gfx::Bitmap::try_load_from_file(String::formatted("/res/icons/pixelpaint/{}.png", icon_name)),
             [this, tool = tool.ptr()](auto& action) {
-                if (action.is_checked())
+                if (action.is_checked()) {
                     on_tool_selection(tool);
-                else
+                    m_active_tool = tool;
+                } else {
                     on_tool_selection(nullptr);
+                }
             });
         m_action_group.add_action(action);
         auto& button = m_toolbar->add_action(action);

+ 3 - 0
Userland/Applications/PixelPaint/ToolboxWidget.h

@@ -29,6 +29,8 @@ public:
             callback(tool);
     }
 
+    Tool* active_tool() const { return m_active_tool; }
+
 private:
     friend class ToolButton;
 
@@ -38,6 +40,7 @@ private:
     RefPtr<GUI::Toolbar> m_toolbar;
     GUI::ActionGroup m_action_group;
     NonnullOwnPtrVector<Tool> m_tools;
+    Tool* m_active_tool { nullptr };
 };
 
 }