mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			182 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| /*
 | |
|  * This file is part of Jkop
 | |
|  * Copyright (c) 2016 Job and Esther Technologies, Inc.
 | |
|  *
 | |
|  * 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.
 | |
|  */
 | |
| 
 | |
| public class SEButtonEntity : SESpriteEntity, SEPointerListener
 | |
| {
 | |
| 	class SEImageButtonEntity : SEButtonEntity
 | |
| 	{
 | |
| 		property SEImage image_normal;
 | |
| 		property SEImage image_hover;
 | |
| 		property SEImage image_pressed;
 | |
| 
 | |
| 		public void update() {
 | |
| 			if(get_pressed()) {
 | |
| 				var img = image_pressed;
 | |
| 				if(img == null) {
 | |
| 					img = image_hover;
 | |
| 				}
 | |
| 				if(img == null) {
 | |
| 					img = image_normal;
 | |
| 				}
 | |
| 				set_image(img);
 | |
| 			}
 | |
| 			else if(get_has_pointer()) {
 | |
| 				var img = image_hover;
 | |
| 				if(img == null) {
 | |
| 					img = image_normal;
 | |
| 				}
 | |
| 				set_image(img);
 | |
| 			}
 | |
| 			else {
 | |
| 				set_image(image_normal);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	class SETextButtonEntity : SEButtonEntity
 | |
| 	{
 | |
| 		property String button_text;
 | |
| 		property String normal_font;
 | |
| 		property String hover_font;
 | |
| 		property String pressed_font;
 | |
| 
 | |
| 		public void update() {
 | |
| 			if(get_pressed()) {
 | |
| 				var ff = pressed_font;
 | |
| 				if(String.is_empty(ff)) {
 | |
| 					ff = hover_font;
 | |
| 				}
 | |
| 				if(String.is_empty(ff)) {
 | |
| 					ff = normal_font;
 | |
| 				}
 | |
| 				set_text(button_text, ff);
 | |
| 			}
 | |
| 			else if(get_has_pointer()) {
 | |
| 				var ff = hover_font;
 | |
| 				if(String.is_empty(ff)) {
 | |
| 					ff = normal_font;
 | |
| 				}
 | |
| 				set_text(button_text, ff);
 | |
| 			}
 | |
| 			else {
 | |
| 				set_text(button_text, normal_font);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public static SEButtonEntity for_image(SEImage img) {
 | |
| 		return(SEButtonEntity.for_images(img, null, null));
 | |
| 	}
 | |
| 
 | |
| 	public static SEButtonEntity for_images(SEImage normal, SEImage hover, SEImage pressed) {
 | |
| 		return(new SEImageButtonEntity().set_image_normal(normal).set_image_hover(hover)
 | |
| 			.set_image_pressed(pressed));
 | |
| 	}
 | |
| 
 | |
| 	public static SEButtonEntity for_text(String text, String normal_font = null, String hover_font = null, String pressed_font = null) {
 | |
| 		return(new SETextButtonEntity().set_button_text(text).set_normal_font(normal_font).set_hover_font(hover_font)
 | |
| 			.set_pressed_font(pressed_font));
 | |
| 	}
 | |
| 
 | |
| 	property SEMessageListener listener;
 | |
| 	property Object data;
 | |
| 	bool pressed = false;
 | |
| 	bool has_pointer = false;
 | |
| 
 | |
| 	public bool get_pressed() {
 | |
| 		return(pressed);
 | |
| 	}
 | |
| 
 | |
| 	public bool get_has_pointer() {
 | |
| 		return(has_pointer);
 | |
| 	}
 | |
| 
 | |
| 	public void initialize(SEResourceCache rsc) {
 | |
| 		base.initialize(rsc);
 | |
| 		update();
 | |
| 	}
 | |
| 
 | |
| 	public virtual void update() {
 | |
| 	}
 | |
| 
 | |
| 	public virtual void on_pointer_enter(SEPointerInfo pi) {
 | |
| 		if(has_pointer) {
 | |
| 			return;
 | |
| 		}
 | |
| 		has_pointer = true;
 | |
| 		update();
 | |
| 	}
 | |
| 
 | |
| 	public virtual void on_pointer_leave(SEPointerInfo pi) {
 | |
| 		if(has_pointer == false && pressed == false) {
 | |
| 			return;
 | |
| 		}
 | |
| 		has_pointer = false;
 | |
| 		pressed = false;
 | |
| 		update();
 | |
| 	}
 | |
| 
 | |
| 	public void on_pointer_move(SEPointerInfo pi) {
 | |
| 		if(pi.is_inside(get_x(), get_y(), get_width(), get_height())) {
 | |
| 			if(has_pointer == false) {
 | |
| 				on_pointer_enter(pi);
 | |
| 			}
 | |
| 		}
 | |
| 		else {
 | |
| 			if(has_pointer) {
 | |
| 				on_pointer_leave(pi);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public void on_pointer_press(SEPointerInfo pi) {
 | |
| 		if(pressed) {
 | |
| 			return;
 | |
| 		}
 | |
| 		if(pi.is_inside(get_x(), get_y(), get_width(), get_height()) == false) {
 | |
| 			return;
 | |
| 		}
 | |
| 		pressed = true;
 | |
| 		update();
 | |
| 	}
 | |
| 
 | |
| 	public void on_pointer_release(SEPointerInfo pi) {
 | |
| 		if(pressed == false) {
 | |
| 			return;
 | |
| 		}
 | |
| 		if(pi.is_inside(get_x(), get_y(), get_width(), get_height()) == false) {
 | |
| 			return;
 | |
| 		}
 | |
| 		on_pointer_click(pi);
 | |
| 		pressed = false;
 | |
| 		update();
 | |
| 	}
 | |
| 
 | |
| 	public virtual void on_pointer_click(SEPointerInfo pi) {
 | |
| 		if(listener != null) {
 | |
| 			listener.on_message(data);
 | |
| 		}
 | |
| 	}
 | |
| }
 |