2
0
mirror of synced 2025-02-23 14:58:12 +00:00
mobile/app/x11.go
2014-10-13 09:24:05 +11:00

86 lines
1.6 KiB
Go

// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build linux,!android
package app
// Simple on-screen app debugging for X11. Not an officially supported
// development target for apps, as screens with mice are very different
// than screens with touch panels.
/*
#cgo LDFLAGS: -lEGL -lGLESv2 -lX11
void runApp(void);
*/
import "C"
import (
"runtime"
"sync"
"code.google.com/p/go.mobile/event"
"code.google.com/p/go.mobile/geom"
)
var cb Callbacks
func run(callbacks Callbacks) {
runtime.LockOSThread()
cb = callbacks
C.runApp()
}
//export onResize
func onResize(w, h int) {
// TODO(nigeltao): don't assume 72 DPI. DisplayWidth / DisplayWidthMM
// is probably the best place to start looking.
geom.Scale = 1
geom.Width = geom.Pt(w)
geom.Height = geom.Pt(h)
}
var events struct {
sync.Mutex
pending []event.Touch
}
func sendTouch(ty event.TouchType, x, y float32) {
events.Lock()
events.pending = append(events.pending, event.Touch{
Type: ty,
Loc: geom.Point{
X: geom.Pt(x),
Y: geom.Pt(y),
},
})
events.Unlock()
}
//export onTouchStart
func onTouchStart(x, y float32) { sendTouch(event.TouchStart, x, y) }
//export onTouchMove
func onTouchMove(x, y float32) { sendTouch(event.TouchMove, x, y) }
//export onTouchEnd
func onTouchEnd(x, y float32) { sendTouch(event.TouchEnd, x, y) }
//export onDraw
func onDraw() {
events.Lock()
pending := events.pending
events.pending = nil
events.Unlock()
for _, e := range pending {
if cb.Touch != nil {
cb.Touch(e)
}
}
if cb.Draw != nil {
cb.Draw()
}
}