ソースを参照

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 年 前
コミット
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 };
 };
 
 }