summaryrefslogtreecommitdiffstats
path: root/editor/plugins/gradient_editor_plugin.h
diff options
context:
space:
mode:
Diffstat (limited to 'editor/plugins/gradient_editor_plugin.h')
-rw-r--r--editor/plugins/gradient_editor_plugin.h98
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;