diff options
Diffstat (limited to 'editor/plugins/gradient_editor_plugin.h')
| -rw-r--r-- | editor/plugins/gradient_editor_plugin.h | 98 |
1 files changed, 87 insertions, 11 deletions
diff --git a/editor/plugins/gradient_editor_plugin.h b/editor/plugins/gradient_editor_plugin.h index f6908f2cbd..06d79d55ab 100644 --- a/editor/plugins/gradient_editor_plugin.h +++ b/editor/plugins/gradient_editor_plugin.h @@ -33,26 +33,102 @@ #include "editor/editor_inspector.h" #include "editor/editor_plugin.h" -#include "gradient_editor.h" -class GradientReverseButton : public BaseButton { - GDCLASS(GradientReverseButton, BaseButton); +class EditorSpinSlider; +class ColorPicker; +class PopupPanel; +class GradientTexture1D; - int margin = 2; +class GradientEdit : public Control { + GDCLASS(GradientEdit, Control); + Ref<Gradient> gradient; + Ref<GradientTexture1D> preview_texture; + + PopupPanel *popup = nullptr; + ColorPicker *picker = nullptr; + + bool snap_enabled = false; + int snap_count = 10; + + enum GrabMode { + GRAB_NONE, + GRAB_ADD, + GRAB_MOVE + }; + + GrabMode grabbing = GRAB_NONE; + float pre_grab_offset = 0.5; + int pre_grab_index = -1; + int selected_index = -1; + int hovered_index = -1; + + // Make sure to use the scaled values below. + const int BASE_SPACING = 4; + const int BASE_HANDLE_WIDTH = 8; + + int draw_spacing = BASE_SPACING; + int handle_width = BASE_HANDLE_WIDTH; + + int _get_gradient_rect_width() const; + + void _color_changed(const Color &p_color); + void _redraw(); + + int _get_point_at(int p_xpos) const; + int _predict_insertion_index(float p_offset); + void _show_color_picker(); + +protected: + virtual void gui_input(const Ref<InputEvent> &p_event) override; + void _notification(int p_what); + static void _bind_methods(); + +public: + void set_gradient(const Ref<Gradient> &p_gradient); + const Ref<Gradient> &get_gradient() const; + + ColorPicker *get_picker() const; + PopupPanel *get_popup() const; + + void set_selected_index(int p_index); + + void add_point(float p_offset, const Color &p_color); + void remove_point(int p_index); + void set_offset(int p_index, float p_offset); + void set_color(int p_index, const Color &p_color); + void reverse_gradient(); + + void set_snap_enabled(bool p_enabled); + void set_snap_count(int p_count); + + GradientEdit(); +}; + +class GradientEditor : public VBoxContainer { + GDCLASS(GradientEditor, VBoxContainer); + + Button *reverse_button = nullptr; + Button *snap_button = nullptr; + EditorSpinSlider *snap_count_edit = nullptr; + GradientEdit *gradient_editor_rect = nullptr; + + void _set_snap_enabled(bool p_enabled); + void _set_snap_count(int p_count); + +protected: void _notification(int p_what); - virtual Size2 get_minimum_size() const override; + +public: + static const int DEFAULT_SNAP; + void set_gradient(const Ref<Gradient> &p_gradient); + + GradientEditor(); }; class EditorInspectorPluginGradient : public EditorInspectorPlugin { GDCLASS(EditorInspectorPluginGradient, EditorInspectorPlugin); - GradientEditor *editor = nullptr; - HBoxContainer *gradient_tools_hbox = nullptr; - GradientReverseButton *reverse_btn = nullptr; - - void _reverse_button_pressed(); - public: virtual bool can_handle(Object *p_object) override; virtual void parse_begin(Object *p_object) override; |
