mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 02:08:12 +03:00
PixelPaint: Scope tool actions to the containing window
We achieve this by deferring the construction of the tool buttons until the toolbox widget has been added to a window.
This commit is contained in:
parent
4392413cd1
commit
7973f76790
Notes:
sideshowbarker
2024-07-19 04:39:25 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/7973f767905
@ -38,6 +38,7 @@
|
||||
#include <LibGUI/Action.h>
|
||||
#include <LibGUI/BoxLayout.h>
|
||||
#include <LibGUI/Button.h>
|
||||
#include <LibGUI/Window.h>
|
||||
|
||||
namespace PixelPaint {
|
||||
|
||||
@ -55,12 +56,14 @@ public:
|
||||
builder.append(")");
|
||||
set_tooltip(builder.to_string());
|
||||
|
||||
m_action = GUI::Action::create_checkable(name, shortcut, [this](auto& action) {
|
||||
if (action.is_checked())
|
||||
m_toolbox.on_tool_selection(m_tool);
|
||||
else
|
||||
m_toolbox.on_tool_selection(nullptr);
|
||||
});
|
||||
m_action = GUI::Action::create_checkable(
|
||||
name, shortcut, [this](auto& action) {
|
||||
if (action.is_checked())
|
||||
m_toolbox.on_tool_selection(m_tool);
|
||||
else
|
||||
m_toolbox.on_tool_selection(nullptr);
|
||||
},
|
||||
toolbox.window());
|
||||
|
||||
m_tool->set_action(m_action);
|
||||
set_action(*m_action);
|
||||
@ -101,6 +104,17 @@ ToolboxWidget::ToolboxWidget()
|
||||
m_action_group.set_exclusive(true);
|
||||
m_action_group.set_unchecking_allowed(false);
|
||||
|
||||
deferred_invoke([this](auto&) {
|
||||
setup_tools();
|
||||
});
|
||||
}
|
||||
|
||||
ToolboxWidget::~ToolboxWidget()
|
||||
{
|
||||
}
|
||||
|
||||
void ToolboxWidget::setup_tools()
|
||||
{
|
||||
auto add_tool = [&](const StringView& name, const StringView& icon_name, const GUI::Shortcut& shortcut, NonnullOwnPtr<Tool> tool) -> ToolButton& {
|
||||
m_tools.append(tool.ptr());
|
||||
auto& button = add<ToolButton>(*this, name, shortcut, move(tool));
|
||||
@ -122,8 +136,4 @@ ToolboxWidget::ToolboxWidget()
|
||||
add_tool("Ellipse", "circle", { Mod_Ctrl | Mod_Shift, Key_E }, make<EllipseTool>());
|
||||
}
|
||||
|
||||
ToolboxWidget::~ToolboxWidget()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -50,6 +50,8 @@ public:
|
||||
private:
|
||||
friend class ToolButton;
|
||||
|
||||
void setup_tools();
|
||||
|
||||
explicit ToolboxWidget();
|
||||
GUI::ActionGroup m_action_group;
|
||||
Vector<Tool*> m_tools;
|
||||
|
Loading…
Reference in New Issue
Block a user