TextTool.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * Copyright (c) 2022, Timothy Slater <tslater2006@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include "Tool.h"
  8. #include <LibCore/Timer.h>
  9. #include <LibGUI/ActionGroup.h>
  10. #include <LibGUI/Label.h>
  11. #include <LibGUI/Painter.h>
  12. #include <LibGUI/TextEditor.h>
  13. #include <LibGUI/TextPosition.h>
  14. namespace PixelPaint {
  15. class TextTool;
  16. class TextToolEditor : public GUI::TextEditor {
  17. C_OBJECT(TextToolEditor)
  18. public:
  19. virtual ~TextToolEditor() override = default;
  20. virtual void handle_keyevent(Badge<TextTool>, GUI::KeyEvent&);
  21. Vector<NonnullRefPtr<GUI::Action>> actions();
  22. protected:
  23. TextToolEditor();
  24. };
  25. class TextTool final : public Tool {
  26. public:
  27. TextTool();
  28. virtual ~TextTool() override = default;
  29. virtual void on_mousemove(Layer*, MouseEvent&) override;
  30. virtual void on_mouseup(Layer*, MouseEvent&) override;
  31. virtual void on_mousedown(Layer*, MouseEvent&) override;
  32. virtual bool on_keydown(GUI::KeyEvent&) override;
  33. virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override;
  34. virtual void on_primary_color_change(Color) override;
  35. virtual void on_tool_deactivation() override;
  36. virtual Variant<Gfx::StandardCursor, NonnullRefPtr<Gfx::Bitmap const>> cursor() override;
  37. virtual NonnullRefPtr<GUI::Widget> get_properties_widget() override;
  38. private:
  39. virtual StringView tool_name() const override { return "Text Tool"sv; }
  40. void apply_text_to_layer();
  41. void reset_tool();
  42. RefPtr<GUI::Widget> m_properties_widget;
  43. RefPtr<GUI::Label> m_font_label;
  44. RefPtr<Core::Timer> m_cursor_blink_timer;
  45. RefPtr<PixelPaint::TextToolEditor> m_text_editor;
  46. Gfx::IntPoint m_add_text_position { 0, 0 };
  47. RefPtr<Gfx::Font const> m_selected_font;
  48. bool m_text_input_is_active { false };
  49. bool m_cursor_blink_state { false };
  50. bool m_mouse_is_over_text { false };
  51. bool m_is_dragging { false };
  52. Gfx::IntPoint m_drag_start_point;
  53. Gfx::IntRect m_ants_rect;
  54. Color m_text_color;
  55. };
  56. }