| 
									
										
										
										
											2023-01-05 13:25:55 +01:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  button.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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-01 10:33:58 -06:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "scene/gui/base_button.h"
 | 
					
						
							| 
									
										
										
										
											2020-09-03 14:22:16 +03:00
										 |  |  | #include "scene/resources/text_paragraph.h"
 | 
					
						
							| 
									
										
										
										
											2017-01-10 01:04:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | class Button : public BaseButton { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(Button, BaseButton); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2021-02-09 18:24:36 +01:00
										 |  |  | 	bool flat = false; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String text; | 
					
						
							| 
									
										
										
										
											2017-01-09 16:43:44 -03:00
										 |  |  | 	String xl_text; | 
					
						
							| 
									
										
										
										
											2020-09-03 14:22:16 +03:00
										 |  |  | 	Ref<TextParagraph> text_buf; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String language; | 
					
						
							|  |  |  | 	TextDirection text_direction = TEXT_DIRECTION_AUTO; | 
					
						
							| 
									
										
										
										
											2024-01-09 22:12:26 +02:00
										 |  |  | 	TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_OFF; | 
					
						
							| 
									
										
										
										
											2025-03-16 13:57:01 +02:00
										 |  |  | 	BitField<TextServer::LineBreakFlag> autowrap_flags_trim = TextServer::BREAK_TRIM_END_EDGE_SPACES; | 
					
						
							| 
									
										
										
										
											2022-06-15 11:01:45 +03:00
										 |  |  | 	TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING; | 
					
						
							| 
									
										
										
										
											2020-09-03 14:22:16 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 15:43:37 -03:00
										 |  |  | 	Ref<Texture2D> icon; | 
					
						
							| 
									
										
										
										
											2021-02-09 18:24:36 +01:00
										 |  |  | 	bool expand_icon = false; | 
					
						
							|  |  |  | 	bool clip_text = false; | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_CENTER; | 
					
						
							| 
									
										
										
										
											2023-03-03 21:21:41 +01:00
										 |  |  | 	HorizontalAlignment horizontal_icon_alignment = HORIZONTAL_ALIGNMENT_LEFT; | 
					
						
							|  |  |  | 	VerticalAlignment vertical_icon_alignment = VERTICAL_ALIGNMENT_CENTER; | 
					
						
							| 
									
										
										
										
											2021-02-09 18:24:36 +01:00
										 |  |  | 	float _internal_margin[4] = {}; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-31 15:02:40 +03:00
										 |  |  | 	struct ThemeCache { | 
					
						
							|  |  |  | 		Ref<StyleBox> normal; | 
					
						
							|  |  |  | 		Ref<StyleBox> normal_mirrored; | 
					
						
							|  |  |  | 		Ref<StyleBox> pressed; | 
					
						
							|  |  |  | 		Ref<StyleBox> pressed_mirrored; | 
					
						
							|  |  |  | 		Ref<StyleBox> hover; | 
					
						
							|  |  |  | 		Ref<StyleBox> hover_mirrored; | 
					
						
							|  |  |  | 		Ref<StyleBox> hover_pressed; | 
					
						
							|  |  |  | 		Ref<StyleBox> hover_pressed_mirrored; | 
					
						
							|  |  |  | 		Ref<StyleBox> disabled; | 
					
						
							|  |  |  | 		Ref<StyleBox> disabled_mirrored; | 
					
						
							|  |  |  | 		Ref<StyleBox> focus; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-16 10:46:24 +03:00
										 |  |  | 		Size2 max_style_size; | 
					
						
							|  |  |  | 		float style_margin_left = 0; | 
					
						
							|  |  |  | 		float style_margin_right = 0; | 
					
						
							|  |  |  | 		float style_margin_top = 0; | 
					
						
							|  |  |  | 		float style_margin_bottom = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-02 22:53:17 +03:00
										 |  |  | 		bool align_to_largest_stylebox = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-31 15:02:40 +03:00
										 |  |  | 		Color font_color; | 
					
						
							|  |  |  | 		Color font_focus_color; | 
					
						
							|  |  |  | 		Color font_pressed_color; | 
					
						
							|  |  |  | 		Color font_hover_color; | 
					
						
							|  |  |  | 		Color font_hover_pressed_color; | 
					
						
							|  |  |  | 		Color font_disabled_color; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Ref<Font> font; | 
					
						
							|  |  |  | 		int font_size = 0; | 
					
						
							|  |  |  | 		int outline_size = 0; | 
					
						
							|  |  |  | 		Color font_outline_color; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Color icon_normal_color; | 
					
						
							|  |  |  | 		Color icon_focus_color; | 
					
						
							|  |  |  | 		Color icon_pressed_color; | 
					
						
							|  |  |  | 		Color icon_hover_color; | 
					
						
							|  |  |  | 		Color icon_hover_pressed_color; | 
					
						
							|  |  |  | 		Color icon_disabled_color; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Ref<Texture2D> icon; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		int h_separation = 0; | 
					
						
							| 
									
										
										
										
											2023-03-31 21:17:59 +02:00
										 |  |  | 		int icon_max_width = 0; | 
					
						
							| 
									
										
										
										
											2024-10-09 19:41:03 +03:00
										 |  |  | 		int line_spacing = 0; | 
					
						
							| 
									
										
										
										
											2022-08-31 15:02:40 +03:00
										 |  |  | 	} theme_cache; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-29 21:23:12 -07:00
										 |  |  | 	void _shape(Ref<TextParagraph> p_paragraph = Ref<TextParagraph>(), String p_text = "") const; | 
					
						
							| 
									
										
										
										
											2023-05-17 14:49:59 +02:00
										 |  |  | 	void _texture_changed(); | 
					
						
							| 
									
										
										
										
											2024-06-20 14:59:09 +02:00
										 |  |  | 	void _update_style_margins(const Ref<StyleBox> &p_stylebox); | 
					
						
							| 
									
										
										
										
											2020-09-03 14:22:16 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2024-05-16 10:46:24 +03:00
										 |  |  | 	virtual void _update_theme_item_cache() override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-22 16:24:29 +00:00
										 |  |  | 	void _set_internal_margin(Side p_side, float p_value); | 
					
						
							| 
									
										
										
										
											2023-04-12 09:34:00 +08:00
										 |  |  | 	virtual void _queue_update_size_cache(); | 
					
						
							| 
									
										
										
										
											2025-03-09 11:12:45 +08:00
										 |  |  | 	virtual String _get_translated_text(const String &p_text) const; | 
					
						
							| 
									
										
										
										
											2023-09-08 21:00:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-08 10:56:19 +01:00
										 |  |  | 	Size2 _fit_icon_size(const Size2 &p_size) const; | 
					
						
							| 
									
										
										
										
											2022-08-13 13:46:07 +08:00
										 |  |  | 	Ref<StyleBox> _get_current_stylebox() const; | 
					
						
							| 
									
										
										
										
											2024-05-16 10:46:24 +03:00
										 |  |  | 	Size2 _get_largest_stylebox_size() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _notification(int p_what); | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 	static void _bind_methods(); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:31:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2020-07-10 11:34:39 +01:00
										 |  |  | 	virtual Size2 get_minimum_size() const override; | 
					
						
							| 
									
										
										
										
											2017-12-23 14:54:45 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-19 02:15:55 +01:00
										 |  |  | 	Size2 get_minimum_size_for_text_and_icon(const String &p_text, Ref<Texture2D> p_icon) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_text(const String &p_text); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	String get_text() const; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-15 11:01:45 +03:00
										 |  |  | 	void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior); | 
					
						
							|  |  |  | 	TextServer::OverrunBehavior get_text_overrun_behavior() const; | 
					
						
							| 
									
										
										
										
											2022-06-08 19:02:27 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-09 22:12:26 +02:00
										 |  |  | 	void set_autowrap_mode(TextServer::AutowrapMode p_mode); | 
					
						
							|  |  |  | 	TextServer::AutowrapMode get_autowrap_mode() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-16 13:57:01 +02:00
										 |  |  | 	void set_autowrap_trim_flags(BitField<TextServer::LineBreakFlag> p_flags); | 
					
						
							|  |  |  | 	BitField<TextServer::LineBreakFlag> get_autowrap_trim_flags() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-03 14:22:16 +03:00
										 |  |  | 	void set_text_direction(TextDirection p_text_direction); | 
					
						
							|  |  |  | 	TextDirection get_text_direction() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void set_language(const String &p_language); | 
					
						
							|  |  |  | 	String get_language() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-09 15:21:47 -07:00
										 |  |  | 	void set_button_icon(const Ref<Texture2D> &p_icon); | 
					
						
							|  |  |  | 	Ref<Texture2D> get_button_icon() const; | 
					
						
							| 
									
										
										
										
											2016-03-09 00:00:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-08 23:26:13 +02:00
										 |  |  | 	void set_expand_icon(bool p_enabled); | 
					
						
							| 
									
										
										
										
											2019-08-20 13:41:14 -03:00
										 |  |  | 	bool is_expand_icon() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-08 23:26:13 +02:00
										 |  |  | 	void set_flat(bool p_enabled); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool is_flat() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-08 23:26:13 +02:00
										 |  |  | 	void set_clip_text(bool p_enabled); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool get_clip_text() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	void set_text_alignment(HorizontalAlignment p_alignment); | 
					
						
							|  |  |  | 	HorizontalAlignment get_text_alignment() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	void set_icon_alignment(HorizontalAlignment p_alignment); | 
					
						
							| 
									
										
										
										
											2023-03-03 21:21:41 +01:00
										 |  |  | 	void set_vertical_icon_alignment(VerticalAlignment p_alignment); | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	HorizontalAlignment get_icon_alignment() const; | 
					
						
							| 
									
										
										
										
											2023-03-03 21:21:41 +01:00
										 |  |  | 	VerticalAlignment get_vertical_icon_alignment() const; | 
					
						
							| 
									
										
										
										
											2019-10-24 23:29:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Button(const String &p_text = String()); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	~Button(); | 
					
						
							|  |  |  | }; |