/* * Copyright (c) 2022, Timothy Slater * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "Tool.h" #include #include #include #include #include #include namespace PixelPaint { class TextTool; class TextToolEditor : public GUI::TextEditor { C_OBJECT(TextToolEditor) public: virtual ~TextToolEditor() override = default; virtual void handle_keyevent(Badge, GUI::KeyEvent&); Vector> actions(); protected: TextToolEditor(); }; class TextTool final : public Tool { public: TextTool(); virtual ~TextTool() override = default; virtual void on_mousemove(Layer*, MouseEvent&) override; virtual void on_mouseup(Layer*, MouseEvent&) override; virtual void on_mousedown(Layer*, MouseEvent&) override; virtual bool on_keydown(GUI::KeyEvent&) override; virtual void on_second_paint(Layer const*, GUI::PaintEvent&) override; virtual void on_primary_color_change(Color) override; virtual void on_tool_deactivation() override; virtual Variant> cursor() override; virtual NonnullRefPtr get_properties_widget() override; private: virtual StringView tool_name() const override { return "Text Tool"sv; } void apply_text_to_layer(); void reset_tool(); RefPtr m_properties_widget; RefPtr m_font_label; RefPtr m_cursor_blink_timer; RefPtr m_text_editor; Gfx::IntPoint m_add_text_position { 0, 0 }; RefPtr m_selected_font; bool m_text_input_is_active { false }; bool m_cursor_blink_state { false }; bool m_mouse_is_over_text { false }; bool m_is_dragging { false }; Gfx::IntPoint m_drag_start_point; Gfx::IntRect m_ants_rect; Color m_text_color; }; }