mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 18:15:07 +00:00

This changes how the initial tool is beeing set on application startup. With this change the initial tool is set the same way as when the tool is changed via the frontend. Thus it also updates the tool properties window which wasn't done before leaving the properties empty as long the tool was changed for the first time.
103 lines
3.9 KiB
C++
103 lines
3.9 KiB
C++
/*
|
|
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2022, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include "ToolboxWidget.h"
|
|
#include "Tools/BrushTool.h"
|
|
#include "Tools/BucketTool.h"
|
|
#include "Tools/CloneTool.h"
|
|
#include "Tools/EllipseTool.h"
|
|
#include "Tools/EraseTool.h"
|
|
#include "Tools/GradientTool.h"
|
|
#include "Tools/GuideTool.h"
|
|
#include "Tools/LassoSelectTool.h"
|
|
#include "Tools/LineTool.h"
|
|
#include "Tools/MoveTool.h"
|
|
#include "Tools/PenTool.h"
|
|
#include "Tools/PickerTool.h"
|
|
#include "Tools/PolygonalSelectTool.h"
|
|
#include "Tools/RectangleSelectTool.h"
|
|
#include "Tools/RectangleTool.h"
|
|
#include "Tools/SprayTool.h"
|
|
#include "Tools/TextTool.h"
|
|
#include "Tools/WandSelectTool.h"
|
|
#include "Tools/ZoomTool.h"
|
|
#include <LibGUI/Action.h>
|
|
#include <LibGUI/BoxLayout.h>
|
|
#include <LibGUI/Button.h>
|
|
#include <LibGUI/Toolbar.h>
|
|
|
|
REGISTER_WIDGET(PixelPaint, ToolboxWidget);
|
|
|
|
namespace PixelPaint {
|
|
|
|
ToolboxWidget::ToolboxWidget()
|
|
{
|
|
set_fill_with_background_color(true);
|
|
|
|
set_fixed_width(26);
|
|
set_layout<GUI::VerticalBoxLayout>(2, 0);
|
|
|
|
m_action_group.set_exclusive(true);
|
|
m_action_group.set_unchecking_allowed(false);
|
|
|
|
m_toolbar = add<GUI::Toolbar>(Gfx::Orientation::Vertical);
|
|
m_toolbar->set_collapsible(true);
|
|
setup_tools();
|
|
}
|
|
|
|
void ToolboxWidget::setup_tools()
|
|
{
|
|
auto add_tool = [&](StringView icon_name, GUI::Shortcut const& shortcut, NonnullOwnPtr<Tool> tool, bool is_default_tool = false) {
|
|
auto action = GUI::Action::create_checkable(tool->tool_name(), shortcut, Gfx::Bitmap::load_from_file(DeprecatedString::formatted("/res/icons/pixelpaint/{}.png", icon_name)).release_value_but_fixme_should_propagate_errors(),
|
|
[this, tool = tool.ptr()](auto& action) {
|
|
if (action.is_checked()) {
|
|
on_tool_selection(tool);
|
|
m_active_tool = tool;
|
|
} else {
|
|
on_tool_selection(nullptr);
|
|
}
|
|
});
|
|
m_action_group.add_action(action);
|
|
auto& button = m_toolbar->add_action(action);
|
|
button.on_context_menu_request = [action = action.ptr(), tool = tool.ptr()](auto& event) {
|
|
action->activate();
|
|
tool->on_tool_button_contextmenu(event);
|
|
};
|
|
tool->set_action(action);
|
|
m_tools.append(move(tool));
|
|
if (is_default_tool) {
|
|
action->set_checked(true);
|
|
auto default_tool_index = m_tools.size() - 1;
|
|
deferred_invoke([&, default_tool_index]() {
|
|
VERIFY(m_active_tool == nullptr);
|
|
on_tool_selection(m_tools[default_tool_index]);
|
|
});
|
|
}
|
|
};
|
|
|
|
add_tool("move"sv, { 0, Key_M }, make<MoveTool>());
|
|
add_tool("pen"sv, { 0, Key_N }, make<PenTool>(), true);
|
|
add_tool("brush"sv, { 0, Key_P }, make<BrushTool>());
|
|
add_tool("bucket"sv, { Mod_Shift, Key_B }, make<BucketTool>());
|
|
add_tool("spray"sv, { Mod_Shift, Key_S }, make<SprayTool>());
|
|
add_tool("picker"sv, { 0, Key_O }, make<PickerTool>());
|
|
add_tool("eraser"sv, { Mod_Shift, Key_E }, make<EraseTool>());
|
|
add_tool("line"sv, { Mod_Ctrl | Mod_Shift, Key_L }, make<LineTool>());
|
|
add_tool("rectangle"sv, { Mod_Ctrl | Mod_Shift, Key_R }, make<RectangleTool>());
|
|
add_tool("circle"sv, { Mod_Ctrl | Mod_Shift, Key_E }, make<EllipseTool>());
|
|
add_tool("text"sv, { Mod_Ctrl | Mod_Shift, Key_T }, make<TextTool>());
|
|
add_tool("zoom"sv, { 0, Key_Z }, make<ZoomTool>());
|
|
add_tool("rectangle-select"sv, { 0, Key_R }, make<RectangleSelectTool>());
|
|
add_tool("wand-select"sv, { 0, Key_W }, make<WandSelectTool>());
|
|
add_tool("polygonal-select"sv, { Mod_Shift, Key_P }, make<PolygonalSelectTool>());
|
|
add_tool("lasso-select"sv, { 0, Key_L }, make<LassoSelectTool>());
|
|
add_tool("guides"sv, { 0, Key_G }, make<GuideTool>());
|
|
add_tool("clone"sv, { 0, Key_C }, make<CloneTool>());
|
|
add_tool("gradients"sv, { Mod_Ctrl, Key_G }, make<GradientTool>());
|
|
}
|
|
|
|
}
|