mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
ui/app: implement Command for system events
And add CommandBack for the Android back button. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -50,4 +50,9 @@ public class GioActivity extends Activity {
|
||||
super.onLowMemory();
|
||||
view.lowMemory();
|
||||
}
|
||||
|
||||
@Override public void onBackPressed() {
|
||||
if (!view.backPressed())
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,6 +163,10 @@ public class GioView extends SurfaceView implements Choreographer.FrameCallback
|
||||
onLowMemory();
|
||||
}
|
||||
|
||||
boolean backPressed() {
|
||||
return onBack(nhandle);
|
||||
}
|
||||
|
||||
static private native long onCreateView(GioView view);
|
||||
static private native void onDestroyView(long handle);
|
||||
static private native void onStartView(long handle);
|
||||
@@ -174,6 +178,7 @@ public class GioView extends SurfaceView implements Choreographer.FrameCallback
|
||||
static private native void onTouchEvent(long handle, int action, int pointerID, int tool, float x, float y, long time);
|
||||
static private native void onKeyEvent(long handle, int code, int character, long time);
|
||||
static private native void onFrameCallback(long handle, long nanos);
|
||||
static private native boolean onBack(long handle);
|
||||
|
||||
private static class InputConnection extends BaseInputConnection {
|
||||
private final Editable editable;
|
||||
|
||||
+19
-4
@@ -10,6 +10,10 @@ import (
|
||||
"gioui.org/ui"
|
||||
)
|
||||
|
||||
type Event interface {
|
||||
ImplementsEvent()
|
||||
}
|
||||
|
||||
type Draw struct {
|
||||
Config *ui.Config
|
||||
Size image.Point
|
||||
@@ -23,12 +27,16 @@ type ChangeStage struct {
|
||||
Stage Stage
|
||||
}
|
||||
|
||||
type Stage uint8
|
||||
|
||||
type Event interface {
|
||||
ImplementsEvent()
|
||||
// Command is a system event.
|
||||
type Command struct {
|
||||
Type CommandType
|
||||
// Suppress the default action of the command.
|
||||
Cancel bool
|
||||
}
|
||||
|
||||
type Stage uint8
|
||||
type CommandType uint8
|
||||
|
||||
type Input interface {
|
||||
ImplementsInput()
|
||||
}
|
||||
@@ -39,6 +47,12 @@ const (
|
||||
StageVisible
|
||||
)
|
||||
|
||||
const (
|
||||
// CommandBack is the command for a back action
|
||||
// such as the Android back button.
|
||||
CommandBack CommandType = iota
|
||||
)
|
||||
|
||||
const (
|
||||
inchPrDp = 1.0 / 160
|
||||
mmPrDp = 25.4 / 160
|
||||
@@ -98,6 +112,7 @@ func (l Stage) String() string {
|
||||
|
||||
func (_ Draw) ImplementsEvent() {}
|
||||
func (_ ChangeStage) ImplementsEvent() {}
|
||||
func (_ *Command) ImplementsEvent() {}
|
||||
|
||||
func init() {
|
||||
args := strings.Split(extraArgs, "|")
|
||||
|
||||
@@ -72,6 +72,11 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserver) {
|
||||
.name = "onFrameCallback",
|
||||
.signature = "(JJ)V",
|
||||
.fnPtr = onFrameCallback
|
||||
},
|
||||
{
|
||||
.name = "onBack",
|
||||
.signature = "(J)Z",
|
||||
.fnPtr = onBack
|
||||
}
|
||||
};
|
||||
if ((*env)->RegisterNatives(env, viewClass, methods, sizeof(methods)/sizeof(methods[0])) != 0) {
|
||||
|
||||
@@ -180,6 +180,17 @@ func onFrameCallback(env *C.JNIEnv, class C.jclass, view C.jlong, nanos C.jlong)
|
||||
}
|
||||
}
|
||||
|
||||
//export onBack
|
||||
func onBack(env *C.JNIEnv, class C.jclass, view C.jlong) C.jboolean {
|
||||
w := views[view]
|
||||
ev := &Command{Type: CommandBack}
|
||||
w.event(ev)
|
||||
if ev.Cancel {
|
||||
return C.JNI_TRUE
|
||||
}
|
||||
return C.JNI_FALSE
|
||||
}
|
||||
|
||||
func (w *window) setVisible() {
|
||||
win := w.aNativeWindow()
|
||||
width, height := C.ANativeWindow_getWidth(win), C.ANativeWindow_getHeight(win)
|
||||
|
||||
@@ -206,6 +206,9 @@ func (w *Window) event(e Event) {
|
||||
needRedraw = true
|
||||
case key.Event:
|
||||
needRedraw = true
|
||||
case *Command:
|
||||
needAck = true
|
||||
needRedraw = true
|
||||
case ChangeStage:
|
||||
w.stage = e.Stage
|
||||
if w.stage > StageDead {
|
||||
|
||||
Reference in New Issue
Block a user