GuideTool.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include "../Guide.h"
  9. #include "Tool.h"
  10. #include <AK/RefPtr.h>
  11. #include <LibGUI/Menu.h>
  12. namespace PixelPaint {
  13. class GuideTool final : public Tool {
  14. public:
  15. GuideTool() = default;
  16. virtual ~GuideTool() override = default;
  17. virtual void on_mousedown(Layer*, MouseEvent&) override;
  18. virtual void on_mousemove(Layer*, MouseEvent&) override;
  19. virtual void on_mouseup(Layer*, MouseEvent&) override;
  20. virtual void on_context_menu(Layer*, GUI::ContextMenuEvent&) override;
  21. virtual void on_tool_activation() override;
  22. virtual ErrorOr<GUI::Widget*> get_properties_widget() override;
  23. virtual Variant<Gfx::StandardCursor, NonnullRefPtr<Gfx::Bitmap>> cursor() override { return Gfx::StandardCursor::Crosshair; }
  24. private:
  25. virtual StringView tool_name() const override { return "Guide Tool"sv; }
  26. RefPtr<Guide> closest_guide(Gfx::IntPoint);
  27. RefPtr<GUI::Widget> m_properties_widget;
  28. RefPtr<Guide> m_selected_guide;
  29. RefPtr<Guide> m_context_menu_guide;
  30. Gfx::IntPoint m_event_origin;
  31. float m_guide_origin { 0 };
  32. RefPtr<GUI::Menu> m_context_menu;
  33. int m_snap_size { 10 };
  34. };
  35. }