mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:18:11 +00:00

This adds support for the Tools in PixelPaint to use different cursors within ImageEditor. For now most of them get the crosshair cursor since it's the most fitting, but in the future we will want to add custom cursors.
48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "Selection.h"
|
|
#include "Tool.h"
|
|
|
|
#include <AK/Vector.h>
|
|
#include <LibGUI/Widget.h>
|
|
|
|
namespace PixelPaint {
|
|
|
|
class RectangleSelectTool final : public Tool {
|
|
public:
|
|
RectangleSelectTool();
|
|
virtual ~RectangleSelectTool();
|
|
|
|
virtual void on_mousedown(Layer&, GUI::MouseEvent&, GUI::MouseEvent&) override;
|
|
virtual void on_mousemove(Layer&, GUI::MouseEvent&, GUI::MouseEvent&) override;
|
|
virtual void on_mouseup(Layer&, GUI::MouseEvent&, GUI::MouseEvent&) override;
|
|
virtual void on_keydown(GUI::KeyEvent&) override;
|
|
virtual void on_keyup(GUI::KeyEvent&) override;
|
|
virtual void on_second_paint(Layer const&, GUI::PaintEvent&) override;
|
|
virtual GUI::Widget* get_properties_widget() override;
|
|
virtual Gfx::StandardCursor cursor() override { return Gfx::StandardCursor::Crosshair; }
|
|
|
|
private:
|
|
enum class MovingMode {
|
|
MovingOrigin,
|
|
AroundCenter,
|
|
None,
|
|
};
|
|
|
|
RefPtr<GUI::Widget> m_properties_widget;
|
|
Vector<String> m_merge_mode_names {};
|
|
Selection::MergeMode m_merge_mode { Selection::MergeMode::Set };
|
|
float m_edge_feathering { 0.0f };
|
|
bool m_selecting { false };
|
|
MovingMode m_moving_mode { MovingMode::None };
|
|
Gfx::IntPoint m_selection_start;
|
|
Gfx::IntPoint m_selection_end;
|
|
};
|
|
|
|
}
|