| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  texture_button.cpp                                                   */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                    http://www.godotengine.org                         */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-01-01 22:01:57 +01:00
										 |  |  | /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* 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.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #include "texture_button.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Size2 TextureButton::get_minimum_size() const { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 	Size2 rscale = Control::get_minimum_size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!expand) { | 
					
						
							|  |  |  | 		if (normal.is_null()) { | 
					
						
							|  |  |  | 			if (pressed.is_null()) { | 
					
						
							|  |  |  | 				if (hover.is_null()) | 
					
						
							|  |  |  | 					if (click_mask.is_null()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						rscale = Size2(); | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 					else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						rscale = click_mask->get_size(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 				else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					rscale = hover->get_size(); | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 			} else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				rscale = pressed->get_size(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 		} else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			rscale = normal->get_size(); | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 	return rscale.abs(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | bool TextureButton::has_point(const Point2 &p_point) const { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (click_mask.is_valid()) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Point2i p = p_point; | 
					
						
							|  |  |  | 		if (p.x < 0 || p.x >= click_mask->get_size().width || p.y < 0 || p.y >= click_mask->get_size().height) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 			return false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return click_mask->get_bit(p); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return Control::has_point(p_point); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TextureButton::_notification(int p_what) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	switch (p_what) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		case NOTIFICATION_DRAW: { | 
					
						
							|  |  |  | 			DrawMode draw_mode = get_draw_mode(); | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			Ref<Texture> texdraw; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 			switch (draw_mode) { | 
					
						
							|  |  |  | 				case DRAW_NORMAL: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if (normal.is_valid()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						texdraw = normal; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 				} break; | 
					
						
							|  |  |  | 				case DRAW_PRESSED: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if (pressed.is_null()) { | 
					
						
							|  |  |  | 						if (hover.is_null()) { | 
					
						
							|  |  |  | 							if (normal.is_valid()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 								texdraw = normal; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 						} else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							texdraw = hover; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					} else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						texdraw = pressed; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 				} break; | 
					
						
							|  |  |  | 				case DRAW_HOVER: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if (hover.is_null()) { | 
					
						
							|  |  |  | 						if (pressed.is_valid() && is_pressed()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							texdraw = pressed; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 						else if (normal.is_valid()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							texdraw = normal; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 					} else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						texdraw = hover; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 				} break; | 
					
						
							|  |  |  | 				case DRAW_DISABLED: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if (disabled.is_null()) { | 
					
						
							|  |  |  | 						if (normal.is_valid()) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							texdraw = normal; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 					} else | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						texdraw = disabled; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 				} break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			if (texdraw.is_valid()) { | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 				Point2 ofs; | 
					
						
							|  |  |  | 				Size2 size = texdraw->get_size(); | 
					
						
							|  |  |  | 				Rect2 tex_regin = Rect2(Point2(), texdraw->get_size()); | 
					
						
							|  |  |  | 				bool tile = false; | 
					
						
							|  |  |  | 				if (expand) { | 
					
						
							|  |  |  | 					switch (stretch_mode) { | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 						case STRETCH_KEEP: | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							size = texdraw->get_size(); | 
					
						
							|  |  |  | 							break; | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 						case STRETCH_SCALE: | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							size = get_size(); | 
					
						
							|  |  |  | 							break; | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 						case STRETCH_TILE: | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							size = get_size(); | 
					
						
							|  |  |  | 							tile = true; | 
					
						
							|  |  |  | 							break; | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 						case STRETCH_KEEP_CENTERED: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							ofs = (get_size() - texdraw->get_size()) / 2; | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							size = texdraw->get_size(); | 
					
						
							|  |  |  | 							break; | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 						case STRETCH_KEEP_ASPECT_CENTERED: | 
					
						
							|  |  |  | 						case STRETCH_KEEP_ASPECT: { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							Size2 _size = get_size(); | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							float tex_width = texdraw->get_width() * _size.height / texdraw->get_height(); | 
					
						
							|  |  |  | 							float tex_height = _size.height; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							if (tex_width > _size.width) { | 
					
						
							|  |  |  | 								tex_width = _size.width; | 
					
						
							|  |  |  | 								tex_height = texdraw->get_height() * tex_width / texdraw->get_width(); | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							if (stretch_mode == STRETCH_KEEP_ASPECT_CENTERED) { | 
					
						
							|  |  |  | 								ofs.x = (_size.width - tex_width) / 2; | 
					
						
							|  |  |  | 								ofs.y = (_size.height - tex_height) / 2; | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							} | 
					
						
							|  |  |  | 							size.width = tex_width; | 
					
						
							|  |  |  | 							size.height = tex_height; | 
					
						
							|  |  |  | 						} break; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						case STRETCH_KEEP_ASPECT_COVERED: { | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							size = get_size(); | 
					
						
							|  |  |  | 							Size2 tex_size = texdraw->get_size(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							Size2 scaleSize(size.width / tex_size.width, size.height / tex_size.height); | 
					
						
							|  |  |  | 							float scale = scaleSize.width > scaleSize.height ? scaleSize.width : scaleSize.height; | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 							Size2 scaledTexSize = tex_size * scale; | 
					
						
							|  |  |  | 							Point2 ofs = ((scaledTexSize - size) / scale).abs() / 2.0f; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							tex_regin = Rect2(ofs, size / scale); | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 						} break; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				if (tile) | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					draw_texture_rect(texdraw, Rect2(ofs, size), tile); | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 				else | 
					
						
							|  |  |  | 					draw_texture_rect_region(texdraw, Rect2(ofs, size), tex_regin); | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 			if (has_focus() && focused.is_valid()) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 				Rect2 drect(Point2(), get_size()); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				draw_texture_rect(focused, drect, false); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 			}; | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void TextureButton::_bind_methods() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_normal_texture", "texture:Texture"), &TextureButton::set_normal_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_pressed_texture", "texture:Texture"), &TextureButton::set_pressed_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_hover_texture", "texture:Texture"), &TextureButton::set_hover_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_disabled_texture", "texture:Texture"), &TextureButton::set_disabled_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_focused_texture", "texture:Texture"), &TextureButton::set_focused_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_click_mask", "mask:BitMap"), &TextureButton::set_click_mask); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_expand", "p_expand"), &TextureButton::set_expand); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_stretch_mode", "p_mode"), &TextureButton::set_stretch_mode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_normal_texture:Texture"), &TextureButton::get_normal_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_pressed_texture:Texture"), &TextureButton::get_pressed_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_hover_texture:Texture"), &TextureButton::get_hover_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_disabled_texture:Texture"), &TextureButton::get_disabled_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_focused_texture:Texture"), &TextureButton::get_focused_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_click_mask:BitMap"), &TextureButton::get_click_mask); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_expand"), &TextureButton::get_expand); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_stretch_mode"), &TextureButton::get_stretch_mode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ADD_GROUP("Textures", "texture_"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_normal", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_normal_texture", "get_normal_texture"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_pressed", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_pressed_texture", "get_pressed_texture"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_hover", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_hover_texture", "get_hover_texture"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_disabled", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_disabled_texture", "get_disabled_texture"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_focused", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_focused_texture", "get_focused_texture"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture_click_mask", PROPERTY_HINT_RESOURCE_TYPE, "BitMap"), "set_click_mask", "get_click_mask"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "expand", PROPERTY_HINT_RESOURCE_TYPE, "bool"), "set_expand", "get_expand"); | 
					
						
							|  |  |  | 	ADD_PROPERTYNO(PropertyInfo(Variant::INT, "stretch_mode", PROPERTY_HINT_ENUM, "Scale,Tile,Keep,Keep Centered,Keep Aspect,Keep Aspect Centered,Keep Aspect Covered"), "set_stretch_mode", "get_stretch_mode"); | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 	BIND_CONSTANT(STRETCH_SCALE); | 
					
						
							|  |  |  | 	BIND_CONSTANT(STRETCH_TILE); | 
					
						
							|  |  |  | 	BIND_CONSTANT(STRETCH_KEEP); | 
					
						
							|  |  |  | 	BIND_CONSTANT(STRETCH_KEEP_CENTERED); | 
					
						
							|  |  |  | 	BIND_CONSTANT(STRETCH_KEEP_ASPECT); | 
					
						
							|  |  |  | 	BIND_CONSTANT(STRETCH_KEEP_ASPECT_CENTERED); | 
					
						
							|  |  |  | 	BIND_CONSTANT(STRETCH_KEEP_ASPECT_COVERED); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void TextureButton::set_normal_texture(const Ref<Texture> &p_normal) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	normal = p_normal; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | 	minimum_size_changed(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void TextureButton::set_pressed_texture(const Ref<Texture> &p_pressed) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	pressed = p_pressed; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void TextureButton::set_hover_texture(const Ref<Texture> &p_hover) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	hover = p_hover; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void TextureButton::set_disabled_texture(const Ref<Texture> &p_disabled) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	disabled = p_disabled; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void TextureButton::set_click_mask(const Ref<BitMap> &p_click_mask) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	click_mask = p_click_mask; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Ref<Texture> TextureButton::get_normal_texture() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return normal; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | Ref<Texture> TextureButton::get_pressed_texture() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return pressed; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | Ref<Texture> TextureButton::get_hover_texture() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return hover; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | Ref<Texture> TextureButton::get_disabled_texture() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return disabled; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | Ref<BitMap> TextureButton::get_click_mask() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return click_mask; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Ref<Texture> TextureButton::get_focused_texture() const { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return focused; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | void TextureButton::set_focused_texture(const Ref<Texture> &p_focused) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	focused = p_focused; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | bool TextureButton::get_expand() const { | 
					
						
							|  |  |  | 	return expand; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | void TextureButton::set_expand(bool p_expand) { | 
					
						
							|  |  |  | 	expand = p_expand; | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 	minimum_size_changed(); | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | void TextureButton::set_stretch_mode(StretchMode p_mode) { | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 	stretch_mode = p_mode; | 
					
						
							|  |  |  | 	update(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | TextureButton::StretchMode TextureButton::get_stretch_mode() const { | 
					
						
							|  |  |  | 	return stretch_mode; | 
					
						
							| 
									
										
										
										
											2015-01-03 00:23:14 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | TextureButton::TextureButton() { | 
					
						
							| 
									
										
										
										
											2017-02-09 22:46:35 +08:00
										 |  |  | 	expand = false; | 
					
						
							| 
									
										
										
										
											2017-02-13 19:41:12 +08:00
										 |  |  | 	stretch_mode = STRETCH_SCALE; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } |