EllipseTool.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2021, Mustafa Quraish <mustafa@serenityos.org>
  4. * Copyright (c) 2022, the SerenityOS developers.
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #pragma once
  9. #include "Tool.h"
  10. #include <LibGUI/Forward.h>
  11. #include <LibGUI/TextBox.h>
  12. #include <LibGfx/Point.h>
  13. namespace PixelPaint {
  14. class EllipseTool final : public Tool {
  15. public:
  16. EllipseTool() = default;
  17. virtual ~EllipseTool() override = default;
  18. virtual void on_mousedown(Layer*, MouseEvent&) override;
  19. virtual void on_mousemove(Layer*, MouseEvent&) override;
  20. virtual void on_mouseup(Layer*, MouseEvent&) override;
  21. virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override;
  22. virtual bool on_keydown(GUI::KeyEvent&) override;
  23. virtual ErrorOr<GUI::Widget*> get_properties_widget() override;
  24. virtual Variant<Gfx::StandardCursor, NonnullRefPtr<Gfx::Bitmap>> cursor() override { return Gfx::StandardCursor::Crosshair; }
  25. private:
  26. virtual StringView tool_name() const override { return "Ellipse Tool"sv; }
  27. enum class FillMode {
  28. Outline,
  29. Fill
  30. };
  31. enum class DrawMode {
  32. FromCenter,
  33. FromCorner,
  34. };
  35. void draw_using(GUI::Painter&, Gfx::IntPoint start_position, Gfx::IntPoint end_position, int thickness);
  36. RefPtr<GUI::Widget> m_properties_widget;
  37. RefPtr<GUI::TextBox> m_aspect_w_textbox;
  38. RefPtr<GUI::TextBox> m_aspect_h_textbox;
  39. GUI::MouseButton m_drawing_button { GUI::MouseButton::None };
  40. Gfx::IntPoint m_ellipse_start_position;
  41. Gfx::IntPoint m_ellipse_end_position;
  42. int m_thickness { 1 };
  43. FillMode m_fill_mode { FillMode::Outline };
  44. DrawMode m_draw_mode { DrawMode::FromCorner };
  45. Optional<float> m_aspect_ratio;
  46. bool m_antialias_enabled { false };
  47. };
  48. }