| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  sprite_frames_editor_plugin.h                                         */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*                         This file is part of:                          */ | 
					
						
							|  |  |  | /*                             GODOT ENGINE                               */ | 
					
						
							|  |  |  | /*                        https://godotengine.org                         */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ | 
					
						
							|  |  |  | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining  */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the        */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including    */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,    */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to     */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to  */ | 
					
						
							|  |  |  | /* the following conditions:                                              */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be         */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.        */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #ifndef SPRITE_FRAMES_EDITOR_PLUGIN_H
 | 
					
						
							|  |  |  | #define SPRITE_FRAMES_EDITOR_PLUGIN_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-21 01:11:35 -07:00
										 |  |  | #include "editor/plugins/editor_plugin.h"
 | 
					
						
							| 
									
										
										
										
											2022-02-12 02:46:22 +01:00
										 |  |  | #include "scene/gui/button.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "scene/gui/dialogs.h"
 | 
					
						
							| 
									
										
										
										
											2022-02-12 02:46:22 +01:00
										 |  |  | #include "scene/gui/item_list.h"
 | 
					
						
							| 
									
										
										
										
											2021-06-10 15:42:55 +02:00
										 |  |  | #include "scene/gui/line_edit.h"
 | 
					
						
							| 
									
										
										
										
											2020-08-13 12:15:08 +01:00
										 |  |  | #include "scene/gui/scroll_container.h"
 | 
					
						
							| 
									
										
										
										
											2022-02-12 02:46:22 +01:00
										 |  |  | #include "scene/gui/spin_box.h"
 | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | #include "scene/gui/split_container.h"
 | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | #include "scene/gui/texture_rect.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "scene/gui/tree.h"
 | 
					
						
							| 
									
										
										
										
											2023-07-11 22:29:09 +02:00
										 |  |  | #include "scene/resources/image_texture.h"
 | 
					
						
							| 
									
										
										
										
											2024-12-21 01:11:43 +08:00
										 |  |  | #include "scene/resources/sprite_frames.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | class OptionButton; | 
					
						
							| 
									
										
										
										
											2022-02-12 02:46:22 +01:00
										 |  |  | class EditorFileDialog; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-28 22:11:10 -05:00
										 |  |  | class ClipboardSpriteFrames : public Resource { | 
					
						
							|  |  |  | 	GDCLASS(ClipboardSpriteFrames, Resource); | 
					
						
							| 
									
										
										
										
											2022-11-26 17:00:38 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2023-11-28 22:11:10 -05:00
										 |  |  | 	struct Frame { | 
					
						
							|  |  |  | 		Ref<Texture2D> texture; | 
					
						
							|  |  |  | 		float duration; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	Vector<Frame> frames; | 
					
						
							| 
									
										
										
										
											2022-11-26 17:00:38 +03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-07 22:54:59 -02:00
										 |  |  | class SpriteFramesEditor : public HSplitContainer { | 
					
						
							|  |  |  | 	GDCLASS(SpriteFramesEditor, HSplitContainer); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	Ref<SpriteFrames> frames; | 
					
						
							|  |  |  | 	Node *animated_sprite = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-09 17:30:00 +08:00
										 |  |  | 	enum { | 
					
						
							|  |  |  | 		PARAM_USE_CURRENT, // Used in callbacks to indicate `dominant_param` should be not updated.
 | 
					
						
							| 
									
										
										
										
											2022-05-23 21:32:19 +02:00
										 |  |  | 		PARAM_FRAME_COUNT, // Keep "Horizontal" & "Vertical" values.
 | 
					
						
							| 
									
										
										
										
											2022-04-09 17:30:00 +08:00
										 |  |  | 		PARAM_SIZE, // Keep "Size" values.
 | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	int dominant_param = PARAM_FRAME_COUNT; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | 	enum { | 
					
						
							|  |  |  | 		FRAME_ORDER_SELECTION, // Order frames were selected in.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// By Row.
 | 
					
						
							|  |  |  | 		FRAME_ORDER_LEFT_RIGHT_TOP_BOTTOM, | 
					
						
							|  |  |  | 		FRAME_ORDER_LEFT_RIGHT_BOTTOM_TOP, | 
					
						
							|  |  |  | 		FRAME_ORDER_RIGHT_LEFT_TOP_BOTTOM, | 
					
						
							|  |  |  | 		FRAME_ORDER_RIGHT_LEFT_BOTTOM_TOP, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// By Column.
 | 
					
						
							|  |  |  | 		FRAME_ORDER_TOP_BOTTOM_LEFT_RIGHT, | 
					
						
							|  |  |  | 		FRAME_ORDER_TOP_BOTTOM_RIGHT_LEFT, | 
					
						
							|  |  |  | 		FRAME_ORDER_BOTTOM_TOP_LEFT_RIGHT, | 
					
						
							|  |  |  | 		FRAME_ORDER_BOTTOM_TOP_RIGHT_LEFT, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 13:24:41 +00:00
										 |  |  | 	enum { | 
					
						
							|  |  |  | 		MENU_SHOW_IN_FILESYSTEM, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	int right_clicked_frame = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-06 14:47:13 +01:00
										 |  |  | 	bool read_only = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	Ref<Texture2D> autoplay_icon; | 
					
						
							|  |  |  | 	Ref<Texture2D> stop_icon; | 
					
						
							|  |  |  | 	Ref<Texture2D> pause_icon; | 
					
						
							| 
									
										
										
										
											2023-01-28 20:06:50 +03:00
										 |  |  | 	Ref<Texture2D> empty_icon = memnew(ImageTexture); | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	HBoxContainer *playback_container = nullptr; | 
					
						
							|  |  |  | 	Button *stop = nullptr; | 
					
						
							|  |  |  | 	Button *play = nullptr; | 
					
						
							|  |  |  | 	Button *play_from = nullptr; | 
					
						
							|  |  |  | 	Button *play_bw = nullptr; | 
					
						
							|  |  |  | 	Button *play_bw_from = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	Button *load = nullptr; | 
					
						
							|  |  |  | 	Button *load_sheet = nullptr; | 
					
						
							| 
									
										
										
										
											2022-09-24 18:01:52 +10:00
										 |  |  | 	Button *delete_frame = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	Button *copy = nullptr; | 
					
						
							|  |  |  | 	Button *paste = nullptr; | 
					
						
							| 
									
										
										
										
											2022-09-24 18:01:52 +10:00
										 |  |  | 	Button *empty_before = nullptr; | 
					
						
							|  |  |  | 	Button *empty_after = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	Button *move_up = nullptr; | 
					
						
							|  |  |  | 	Button *move_down = nullptr; | 
					
						
							|  |  |  | 	Button *zoom_out = nullptr; | 
					
						
							|  |  |  | 	Button *zoom_reset = nullptr; | 
					
						
							|  |  |  | 	Button *zoom_in = nullptr; | 
					
						
							| 
									
										
										
										
											2022-11-26 17:00:38 +03:00
										 |  |  | 	SpinBox *frame_duration = nullptr; | 
					
						
							|  |  |  | 	ItemList *frame_list = nullptr; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool loading_scene; | 
					
						
							| 
									
										
										
										
											2023-11-28 22:11:10 -05:00
										 |  |  | 	Vector<int> selection; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-24 18:01:52 +10:00
										 |  |  | 	Button *add_anim = nullptr; | 
					
						
							| 
									
										
										
										
											2024-06-26 17:59:15 +08:00
										 |  |  | 	Button *duplicate_anim = nullptr; | 
					
						
							| 
									
										
										
										
											2022-09-24 18:01:52 +10:00
										 |  |  | 	Button *delete_anim = nullptr; | 
					
						
							| 
									
										
										
										
											2023-01-28 20:06:50 +03:00
										 |  |  | 	SpinBox *anim_speed = nullptr; | 
					
						
							|  |  |  | 	Button *anim_loop = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	HBoxContainer *autoplay_container = nullptr; | 
					
						
							|  |  |  | 	Button *autoplay = nullptr; | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-28 20:06:50 +03:00
										 |  |  | 	LineEdit *anim_search_box = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	Tree *animations = nullptr; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-19 01:14:11 +02:00
										 |  |  | 	Label *missing_anim_label = nullptr; | 
					
						
							|  |  |  | 	VBoxContainer *anim_frames_vb = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	EditorFileDialog *file = nullptr; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	AcceptDialog *dialog = nullptr; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 13:24:41 +00:00
										 |  |  | 	PopupMenu *menu = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 	StringName edited_anim; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	ConfirmationDialog *delete_dialog = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ConfirmationDialog *split_sheet_dialog = nullptr; | 
					
						
							|  |  |  | 	ScrollContainer *split_sheet_scroll = nullptr; | 
					
						
							|  |  |  | 	TextureRect *split_sheet_preview = nullptr; | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | 	VBoxContainer *split_sheet_settings_vb = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	SpinBox *split_sheet_h = nullptr; | 
					
						
							|  |  |  | 	SpinBox *split_sheet_v = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-09 17:30:00 +08:00
										 |  |  | 	SpinBox *split_sheet_size_x = nullptr; | 
					
						
							|  |  |  | 	SpinBox *split_sheet_size_y = nullptr; | 
					
						
							|  |  |  | 	SpinBox *split_sheet_sep_x = nullptr; | 
					
						
							|  |  |  | 	SpinBox *split_sheet_sep_y = nullptr; | 
					
						
							|  |  |  | 	SpinBox *split_sheet_offset_x = nullptr; | 
					
						
							|  |  |  | 	SpinBox *split_sheet_offset_y = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	Button *split_sheet_zoom_out = nullptr; | 
					
						
							|  |  |  | 	Button *split_sheet_zoom_reset = nullptr; | 
					
						
							|  |  |  | 	Button *split_sheet_zoom_in = nullptr; | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | 	Button *toggle_settings_button = nullptr; | 
					
						
							|  |  |  | 	OptionButton *split_sheet_order = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	EditorFileDialog *file_split_sheet = nullptr; | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | 	HashMap<int, int> frames_selected; // Key is frame index. Value is selection order.
 | 
					
						
							| 
									
										
										
										
											2022-05-19 17:00:06 +02:00
										 |  |  | 	HashSet<int> frames_toggled_by_mouse_hover; | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | 	Vector<Pair<int, int>> frames_ordered; // First is the index to be ordered by. Second is the actual frame index.
 | 
					
						
							|  |  |  | 	int selected_count = 0; | 
					
						
							|  |  |  | 	bool frames_need_sort = false; | 
					
						
							| 
									
										
										
										
											2022-05-02 16:28:25 +02:00
										 |  |  | 	int last_frame_selected = 0; | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-12 22:49:49 +03:00
										 |  |  | 	Size2i previous_texture_size; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-13 12:15:08 +01:00
										 |  |  | 	float scale_ratio; | 
					
						
							|  |  |  | 	int thumbnail_default_size; | 
					
						
							|  |  |  | 	float thumbnail_zoom; | 
					
						
							|  |  |  | 	float max_thumbnail_zoom; | 
					
						
							|  |  |  | 	float min_thumbnail_zoom; | 
					
						
							|  |  |  | 	float sheet_zoom; | 
					
						
							|  |  |  | 	float max_sheet_zoom; | 
					
						
							|  |  |  | 	float min_sheet_zoom; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-09 17:30:00 +08:00
										 |  |  | 	Size2i _get_frame_count() const; | 
					
						
							|  |  |  | 	Size2i _get_frame_size() const; | 
					
						
							|  |  |  | 	Size2i _get_offset() const; | 
					
						
							|  |  |  | 	Size2i _get_separation() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _load_pressed(); | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	void _file_load_request(const Vector<String> &p_path, int p_at_pos = -1); | 
					
						
							| 
									
										
										
										
											2017-10-27 12:25:13 +08:00
										 |  |  | 	void _copy_pressed(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _paste_pressed(); | 
					
						
							| 
									
										
										
										
											2023-11-28 22:11:10 -05:00
										 |  |  | 	void _paste_frame_array(const Ref<ClipboardSpriteFrames> &p_clipboard_frames); | 
					
						
							|  |  |  | 	void _paste_texture(const Ref<Texture2D> &p_texture); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _empty_pressed(); | 
					
						
							| 
									
										
										
										
											2015-04-02 07:22:17 -03:00
										 |  |  | 	void _empty2_pressed(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _delete_pressed(); | 
					
						
							|  |  |  | 	void _up_pressed(); | 
					
						
							|  |  |  | 	void _down_pressed(); | 
					
						
							| 
									
										
										
										
											2022-11-26 17:00:38 +03:00
										 |  |  | 	void _frame_duration_changed(double p_value); | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 	void _update_library(bool p_skip_selector = false); | 
					
						
							| 
									
										
										
										
											2023-09-14 18:06:49 +08:00
										 |  |  | 	void _update_library_impl(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	void _update_stop_icon(); | 
					
						
							|  |  |  | 	void _play_pressed(); | 
					
						
							|  |  |  | 	void _play_from_pressed(); | 
					
						
							|  |  |  | 	void _play_bw_pressed(); | 
					
						
							|  |  |  | 	void _play_bw_from_pressed(); | 
					
						
							|  |  |  | 	void _autoplay_pressed(); | 
					
						
							|  |  |  | 	void _stop_pressed(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _animation_selected(); | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 	void _animation_name_edited(); | 
					
						
							|  |  |  | 	void _animation_add(); | 
					
						
							| 
									
										
										
										
											2024-06-26 17:59:15 +08:00
										 |  |  | 	void _animation_duplicate(); | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 	void _animation_remove(); | 
					
						
							| 
									
										
										
										
											2019-09-06 11:07:36 +02:00
										 |  |  | 	void _animation_remove_confirmed(); | 
					
						
							| 
									
										
										
										
											2021-06-10 15:42:55 +02:00
										 |  |  | 	void _animation_search_text_changed(const String &p_text); | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 	void _animation_loop_changed(); | 
					
						
							| 
									
										
										
										
											2022-11-26 17:00:38 +03:00
										 |  |  | 	void _animation_speed_changed(double p_value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _frame_list_gui_input(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2023-11-28 22:11:10 -05:00
										 |  |  | 	void _frame_list_item_selected(int p_index, bool p_selected); | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 13:24:41 +00:00
										 |  |  | 	void _menu_selected(int p_index); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-13 12:15:08 +01:00
										 |  |  | 	void _zoom_in(); | 
					
						
							|  |  |  | 	void _zoom_out(); | 
					
						
							|  |  |  | 	void _zoom_reset(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 18:06:49 +08:00
										 |  |  | 	bool animations_dirty = false; | 
					
						
							|  |  |  | 	bool pending_update = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 	bool updating; | 
					
						
							| 
									
										
										
										
											2022-04-09 17:30:00 +08:00
										 |  |  | 	bool updating_split_settings = false; // Skip SpinBox/Range callback when setting value by code.
 | 
					
						
							| 
									
										
										
										
											2016-05-14 23:48:23 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Variant get_drag_data_fw(const Point2 &p_point, Control *p_from); | 
					
						
							|  |  |  | 	bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; | 
					
						
							|  |  |  | 	void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 	void _open_sprite_sheet(); | 
					
						
							| 
									
										
										
										
											2024-08-11 16:38:41 +01:00
										 |  |  | 	void _auto_slice_sprite_sheet(); | 
					
						
							|  |  |  | 	bool _matches_background_color(const Color &p_background_color, const Color &p_pixel_color); | 
					
						
							|  |  |  | 	Size2i _estimate_sprite_sheet_size(const Ref<Texture2D> p_texture); | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 	void _prepare_sprite_sheet(const String &p_file); | 
					
						
							| 
									
										
										
										
											2021-09-07 15:27:19 +02:00
										 |  |  | 	int _sheet_preview_position_to_frame_index(const Vector2 &p_position); | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 	void _sheet_preview_draw(); | 
					
						
							| 
									
										
										
										
											2022-04-09 17:30:00 +08:00
										 |  |  | 	void _sheet_spin_changed(double p_value, int p_dominant_param); | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 	void _sheet_preview_input(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2020-08-13 12:15:08 +01:00
										 |  |  | 	void _sheet_scroll_input(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 	void _sheet_add_frames(); | 
					
						
							| 
									
										
										
										
											2022-03-14 21:19:35 +08:00
										 |  |  | 	void _sheet_zoom_on_position(float p_zoom, const Vector2 &p_position); | 
					
						
							| 
									
										
										
										
											2020-08-13 12:15:08 +01:00
										 |  |  | 	void _sheet_zoom_in(); | 
					
						
							|  |  |  | 	void _sheet_zoom_out(); | 
					
						
							|  |  |  | 	void _sheet_zoom_reset(); | 
					
						
							| 
									
										
										
										
											2023-02-24 16:00:28 +01:00
										 |  |  | 	void _sheet_order_selected(int p_option); | 
					
						
							|  |  |  | 	void _sheet_select_all_frames(); | 
					
						
							|  |  |  | 	void _sheet_clear_all_frames(); | 
					
						
							|  |  |  | 	void _sheet_sort_frames(); | 
					
						
							|  |  |  | 	void _toggle_show_settings(); | 
					
						
							|  |  |  | 	void _update_show_settings(); | 
					
						
							| 
									
										
										
										
											2019-04-13 22:15:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	void _edit(); | 
					
						
							|  |  |  | 	void _fetch_sprite_node(); | 
					
						
							|  |  |  | 	void _remove_sprite_node(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool sprite_node_updating = false; | 
					
						
							|  |  |  | 	void _sync_animation(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _select_animation(const String &p_name, bool p_update_node = true); | 
					
						
							|  |  |  | 	void _rename_node_animation(EditorUndoRedoManager *undo_redo, bool is_undo, const String &p_filter, const String &p_new_animation, const String &p_new_autoplay); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | protected: | 
					
						
							|  |  |  | 	void _notification(int p_what); | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	void _node_removed(Node *p_node); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2023-01-21 14:51:03 +09:00
										 |  |  | 	void edit(Ref<SpriteFrames> p_frames); | 
					
						
							| 
									
										
										
										
											2024-06-12 21:42:49 -04:00
										 |  |  | 	Ref<SpriteFrames> get_sprite_frames() const; | 
					
						
							| 
									
										
										
										
											2024-04-17 19:51:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	SpriteFramesEditor(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SpriteFramesEditorPlugin : public EditorPlugin { | 
					
						
							| 
									
										
										
										
											2017-01-02 23:03:46 -03:00
										 |  |  | 	GDCLASS(SpriteFramesEditorPlugin, EditorPlugin); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	SpriteFramesEditor *frames_editor = nullptr; | 
					
						
							|  |  |  | 	Button *button = nullptr; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2024-10-12 19:42:12 -07:00
										 |  |  | 	virtual String get_plugin_name() const override { return "SpriteFrames"; } | 
					
						
							| 
									
										
										
										
											2020-07-10 11:34:39 +01:00
										 |  |  | 	bool has_main_screen() const override { return false; } | 
					
						
							|  |  |  | 	virtual void edit(Object *p_object) override; | 
					
						
							|  |  |  | 	virtual bool handles(Object *p_object) const override; | 
					
						
							|  |  |  | 	virtual void make_visible(bool p_visible) override; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 10:36:51 +01:00
										 |  |  | 	SpriteFramesEditorPlugin(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	~SpriteFramesEditorPlugin(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // SPRITE_FRAMES_EDITOR_PLUGIN_H
 |