Browse 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 3 years ago
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 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)),
         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) {
             [this, tool = tool.ptr()](auto& action) {
-                if (action.is_checked())
+                if (action.is_checked()) {
                     on_tool_selection(tool);
                     on_tool_selection(tool);
-                else
+                    m_active_tool = tool;
+                } else {
                     on_tool_selection(nullptr);
                     on_tool_selection(nullptr);
+                }
             });
             });
         m_action_group.add_action(action);
         m_action_group.add_action(action);
         auto& button = m_toolbar->add_action(action);
         auto& button = m_toolbar->add_action(action);

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

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