1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 20:08:13 +00:00
serenity/Userland/Applications/PixelPaint/Tools/CloneTool.h
Zaggy1024 7ce346e50e PixelPaint: Allow keydown events to bubble from ImageEditor
Previously, all keydown KeyEvents were accepted, causing parent widgets
not to receive them. With the addition of shortcut handling to keydown,
shortcuts were not called when the ImageEditor was focused.
2022-11-14 16:08:11 +00:00

45 lines
1.4 KiB
C++

/*
* Copyright (c) 2021, Mustafa Quraish <mustafa@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include "BrushTool.h"
namespace PixelPaint {
class CloneTool : public BrushTool {
public:
CloneTool() = default;
virtual ~CloneTool() override = default;
virtual GUI::Widget* get_properties_widget() override;
virtual Variant<Gfx::StandardCursor, NonnullRefPtr<Gfx::Bitmap>> cursor() override;
virtual bool is_overriding_alt() override { return true; }
protected:
virtual void draw_point(Gfx::Bitmap& bitmap, Gfx::Color const& color, Gfx::IntPoint const& point) override;
virtual void draw_line(Gfx::Bitmap& bitmap, Gfx::Color const& color, Gfx::IntPoint const& start, Gfx::IntPoint const& end) override;
virtual void on_mousedown(Layer*, MouseEvent&) override;
virtual void on_mousemove(Layer*, MouseEvent&) override;
virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override;
virtual bool on_keydown(GUI::KeyEvent const&) override;
virtual void on_keyup(GUI::KeyEvent&) override;
private:
virtual StringView tool_name() const override { return "Clone Tool"sv; }
RefPtr<GUI::Widget> m_properties_widget;
Optional<Gfx::IntPoint> m_sample_location;
Optional<Gfx::IntPoint> m_cursor_offset;
bool m_is_selecting_location { false };
Gfx::Color m_marker_color { Gfx::Color::Green };
};
}