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);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |