package main import ( "fmt" "strconv" "strings" "github.com/anoshenko/rui" ) const pointerEventsDemoText = ` GridLayout { width = 100%, height = 100%, cell-height = "1fr, auto", content = [ GridLayout { padding = 12px, content = [ GridLayout { id = pointerEventsTest, cell-horizontal-align = center, cell-vertical-align = center, border = _{ style = solid, width = 1px, color = gray}, content = [ TextView { id = pointerEventsText, text = "Test box", } ] } ], }, Resizable { row = 1, side = top, background-color = lightgrey, height = 200px, content = EditView { id = pointerEventsLog, type = multiline, read-only = true, wrap = true, } }, ] } ` func createPointerEventsDemo(session rui.Session) rui.View { view := rui.CreateViewFromText(session, pointerEventsDemoText) if view == nil { return nil } addToLog := func(tag string, event rui.PointerEvent) { var buffer strings.Builder appendBool := func(name string, value bool) { buffer.WriteString(`, `) buffer.WriteString(name) if value { buffer.WriteString(` = true`) } else { buffer.WriteString(` = false`) } } appendInt := func(name string, value int) { buffer.WriteString(`, `) buffer.WriteString(name) buffer.WriteString(` = `) buffer.WriteString(strconv.Itoa(value)) } appendFloat := func(name string, value float64) { buffer.WriteString(fmt.Sprintf(`, %s = %g`, name, value)) } appendPoint := func(name string, x, y float64) { buffer.WriteString(fmt.Sprintf(`, %s = (%g:%g)`, name, x, y)) } buffer.WriteString(tag) buffer.WriteString(`: TimeStamp = `) buffer.WriteString(strconv.FormatUint(event.TimeStamp, 10)) appendInt("Button", event.Button) appendInt("Buttons", event.Buttons) appendPoint("(X:Y)", event.X, event.Y) appendPoint("Client (X:Y)", event.ClientX, event.ClientY) appendPoint("Screen (X:Y)", event.ScreenX, event.ScreenY) appendFloat("Width", event.Width) appendFloat("Height", event.Height) appendFloat("Pressure", event.Pressure) appendFloat("TangentialPressure", event.TangentialPressure) appendFloat("TiltX", event.TiltX) appendFloat("TiltY", event.TiltY) appendFloat("Twist", event.Twist) buffer.WriteString(`, PointerType = `) buffer.WriteString(event.PointerType) appendBool("IsPrimary", event.IsPrimary) appendBool("CtrlKey", event.CtrlKey) appendBool("ShiftKey", event.ShiftKey) appendBool("AltKey", event.AltKey) appendBool("MetaKey", event.MetaKey) buffer.WriteString(";\n\n") rui.AppendEditText(view, "pointerEventsLog", buffer.String()) rui.ScrollViewToEnd(view, "pointerEventsLog") } rui.SetParams(view, "pointerEventsTest", rui.Params{ rui.PointerDown: func(v rui.View, event rui.PointerEvent) { addToLog("pointer-down", event) }, rui.PointerUp: func(v rui.View, event rui.PointerEvent) { addToLog("pointer-up", event) }, rui.PointerOut: func(v rui.View, event rui.PointerEvent) { addToLog("pointer-out", event) rui.Set(view, "pointerEventsText", rui.Text, "Pointer out") }, rui.PointerOver: func(v rui.View, event rui.PointerEvent) { addToLog("pointer-over", event) }, rui.PointerCancel: func(v rui.View, event rui.PointerEvent) { addToLog("pointer-cancel", event) }, rui.PointerMove: func(v rui.View, event rui.PointerEvent) { rui.Set(view, "pointerEventsText", rui.Text, fmt.Sprintf("(X:Y): (%g : %g)
Client (X:Y): (%g : %g)
Screen (X:Y): (%g : %g)", event.X, event.Y, event.ClientX, event.ClientY, event.ScreenX, event.ScreenY)) }, }) return view }