87 lines
No EOL
3 KiB
Text
87 lines
No EOL
3 KiB
Text
import "luxe: ui/label" for UILabel
|
|
import "luxe: ui/control" for Control
|
|
import "luxe: ui/image" for UIImage
|
|
import "luxe: render" for TextAlign
|
|
import "luxe: world" for UIBehave, UIContain, UI, UIEvent
|
|
import "luxe: assets" for Assets
|
|
import "luxe: asset" for Asset
|
|
|
|
import "math/util" for Util
|
|
import "blocks/ui/box" for UIBox
|
|
import "blocks/ui/clickable" for Clickable
|
|
|
|
class NumberField{
|
|
|
|
static create(ent){
|
|
var root = Control.create(ent)
|
|
Control.set_contain(root, UIContain.row | UIContain.start)//|
|
|
Control.set_size(root, 27, 10)
|
|
|
|
var arrow = Assets.image("assets/wip/8Arrow")
|
|
|
|
var leftArrow = UIImage.create(ent)
|
|
UIImage.set_image(leftArrow, arrow)
|
|
Control.set_size(leftArrow, 8, 8)
|
|
Control.child_add(root, leftArrow)
|
|
Control.set_margin(leftArrow, -1, 0, 0, 0)
|
|
Clickable.make_clickable(leftArrow)
|
|
Clickable.set_on_click(leftArrow){
|
|
var data = Control.get_state_data(root)
|
|
UI.events_emit(root, UIEvent.change, data["value"] - 1)
|
|
}
|
|
|
|
var label = UILabel.create(ent)
|
|
Control.child_add(root, label)
|
|
Control.set_size(label, 12, 10)
|
|
UILabel.set_align_vertical(label, TextAlign.bottom)
|
|
UILabel.set_align(label, TextAlign.center)
|
|
UILabel.set_font(label, Asset.font("assets/fonts/BabyBlocks"))
|
|
UILabel.set_text_size(label, 8)
|
|
UILabel.set_text(label, "0")
|
|
Control.set_margin(label, 1, 0, 0, 0)
|
|
|
|
var rightArrow = UIImage.create(ent)
|
|
UIImage.set_image(rightArrow, arrow)
|
|
Control.set_size(rightArrow, 8, 8)
|
|
Control.child_add(root, rightArrow)
|
|
Control.set_margin(rightArrow, 0, 0, 0, 0)
|
|
UIImage.set_uv(rightArrow, 1, 0, 0, 1)
|
|
Clickable.make_clickable(rightArrow)
|
|
Clickable.set_on_click(rightArrow){
|
|
var data = Control.get_state_data(root)
|
|
UI.events_emit(root, UIEvent.change, data["value"] + 1)
|
|
}
|
|
|
|
//input stuff
|
|
Control.set_allow_input(root, true)
|
|
Control.set_state_data(root, {"pressed": false, "value":0, "drag_start_mouse": -1, "drag_start_value":-1, "label": label})
|
|
Control.set_process(root){|control, data, event, x,y,w,h|
|
|
if(event.control != control) return
|
|
if(!Util.valid_event(event, true)) return
|
|
if(event.type == UIEvent.press){
|
|
data["pressed"] = true
|
|
data["drag_start_mouse"] = event.x
|
|
data["drag_start_value"] = data["value"]
|
|
UI.capture(control)
|
|
UI.event_cancel(ent, event.id)
|
|
}
|
|
if(event.type == UIEvent.move && data["pressed"]){
|
|
var diff = event.x - data["drag_start_mouse"]
|
|
var value_change = diff / 3
|
|
UI.events_emit(control, UIEvent.change, data["drag_start_value"] + value_change)
|
|
}
|
|
if(event.type == UIEvent.release){
|
|
data["pressed"] = false
|
|
UI.uncapture(control)
|
|
}
|
|
}
|
|
|
|
return root
|
|
}
|
|
|
|
static set_value(field, value){
|
|
var data = Control.get_state_data(field)
|
|
data["value"] = value
|
|
UILabel.set_text(data["label"], value.toString)
|
|
}
|
|
} |