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

This patch adds scaling function to the move tool. When the cursor is over the lower right corner of the layer, it changes. This is to signify that the layer can be scaled by dragging the mouse. There is currently no preview of the scaling. Doing a resize every time the mouse moves leads to unexpected behavior.
36 lines
955 B
C++
36 lines
955 B
C++
/*
|
|
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2022, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "../Layer.h"
|
|
#include "Tool.h"
|
|
|
|
namespace PixelPaint {
|
|
|
|
class MoveTool final : public Tool {
|
|
public:
|
|
MoveTool() = default;
|
|
virtual ~MoveTool() override = default;
|
|
|
|
virtual void on_mousedown(Layer*, MouseEvent&) override;
|
|
virtual void on_mousemove(Layer*, MouseEvent&) override;
|
|
virtual void on_mouseup(Layer*, MouseEvent&) override;
|
|
virtual void on_keydown(GUI::KeyEvent&) override;
|
|
virtual Variant<Gfx::StandardCursor, NonnullRefPtr<Gfx::Bitmap>> cursor() override;
|
|
|
|
private:
|
|
virtual StringView tool_name() const override { return "Move Tool"sv; }
|
|
|
|
RefPtr<Layer> m_layer_being_moved;
|
|
Gfx::IntPoint m_event_origin;
|
|
Gfx::IntPoint m_layer_origin;
|
|
bool m_scaling { false };
|
|
bool m_mouse_in_resize_corner { false };
|
|
};
|
|
|
|
}
|