| 
									
										
										
										
											2023-01-05 13:25:55 +01:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  theme_editor_preview.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.                 */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef THEME_EDITOR_PREVIEW_H
 | 
					
						
							|  |  |  | #define THEME_EDITOR_PREVIEW_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "scene/gui/box_container.h"
 | 
					
						
							|  |  |  | #include "scene/resources/theme.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-07 18:59:49 +02:00
										 |  |  | class Button; | 
					
						
							| 
									
										
										
										
											2022-05-17 22:44:15 +02:00
										 |  |  | class ColorPickerButton; | 
					
						
							| 
									
										
										
										
											2023-04-07 18:59:49 +02:00
										 |  |  | class ColorRect; | 
					
						
							|  |  |  | class MarginContainer; | 
					
						
							|  |  |  | class ScrollContainer; | 
					
						
							| 
									
										
										
										
											2022-05-17 22:44:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | class ThemeEditorPreview : public VBoxContainer { | 
					
						
							|  |  |  | 	GDCLASS(ThemeEditorPreview, VBoxContainer); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	ScrollContainer *preview_container = nullptr; | 
					
						
							| 
									
										
										
										
											2023-09-06 16:11:05 +02:00
										 |  |  | 	MarginContainer *preview_root = nullptr; | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	ColorRect *preview_bg = nullptr; | 
					
						
							|  |  |  | 	MarginContainer *preview_overlay = nullptr; | 
					
						
							|  |  |  | 	Control *picker_overlay = nullptr; | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | 	Control *hovered_control = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-16 21:32:58 +03:00
										 |  |  | 	struct ThemeCache { | 
					
						
							|  |  |  | 		Ref<StyleBox> preview_picker_overlay; | 
					
						
							|  |  |  | 		Color preview_picker_overlay_color; | 
					
						
							|  |  |  | 		Ref<StyleBox> preview_picker_label; | 
					
						
							|  |  |  | 		Ref<Font> preview_picker_font; | 
					
						
							| 
									
										
										
										
											2021-10-25 11:49:18 +03:00
										 |  |  | 		int font_size = 16; | 
					
						
							| 
									
										
										
										
											2021-07-16 21:32:58 +03:00
										 |  |  | 	} theme_cache; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | 	double time_left = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _propagate_redraw(Control *p_at); | 
					
						
							|  |  |  | 	void _refresh_interval(); | 
					
						
							|  |  |  | 	void _preview_visibility_changed(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _picker_button_cbk(); | 
					
						
							|  |  |  | 	Control *_find_hovered_control(Control *p_parent, Vector2 p_mouse_position); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _draw_picker_overlay(); | 
					
						
							|  |  |  | 	void _gui_input_picker_overlay(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2021-07-16 21:32:58 +03:00
										 |  |  | 	void _reset_picker_overlay(); | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	HBoxContainer *preview_toolbar = nullptr; | 
					
						
							|  |  |  | 	MarginContainer *preview_content = nullptr; | 
					
						
							|  |  |  | 	Button *picker_button = nullptr; | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void add_preview_overlay(Control *p_overlay); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void _notification(int p_what); | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	void set_preview_theme(const Ref<Theme> &p_theme); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ThemeEditorPreview(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DefaultThemeEditorPreview : public ThemeEditorPreview { | 
					
						
							|  |  |  | 	GDCLASS(DefaultThemeEditorPreview, ThemeEditorPreview); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-17 22:44:15 +02:00
										 |  |  | 	ColorPickerButton *test_color_picker_button = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 	void _notification(int p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | public: | 
					
						
							|  |  |  | 	DefaultThemeEditorPreview(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SceneThemeEditorPreview : public ThemeEditorPreview { | 
					
						
							|  |  |  | 	GDCLASS(SceneThemeEditorPreview, ThemeEditorPreview); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Ref<PackedScene> loaded_scene; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-04 15:06:57 +02:00
										 |  |  | 	Button *reload_scene_button = nullptr; | 
					
						
							| 
									
										
										
										
											2021-03-13 22:30:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void _reload_scene(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 	void _notification(int p_what); | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	bool set_preview_scene(const String &p_path); | 
					
						
							|  |  |  | 	String get_preview_scene_path() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	SceneThemeEditorPreview(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // THEME_EDITOR_PREVIEW_H
 |