diff --git a/android/app/activity.nim b/android/app/activity.nim index c6fee3a..028849b 100644 --- a/android/app/activity.nim +++ b/android/app/activity.nim @@ -11,6 +11,8 @@ jclass android.app.Activity* of ContextWrapper: proc getApplication*(): Application proc getWindowManager*(): WindowManager proc onCreate*(savedInstanceState: Bundle) + proc onResume*() + proc onPause*() proc setContentView*(v: View) var gCurrentActivity {.threadvar.}: Activity @@ -22,11 +24,9 @@ proc setCurrentActivity*(a: Activity) = proc getSDLMainActivity(): Activity = let cls = JVMClass.getByFqcn("org/libsdl/app/SDLActivity") if not cls.isNil: - let meth = cls.getStaticMethodId("getContext", "()Landroid/content/Context;") - if not cast[pointer](meth).isNil: - let j = cls.callObjectMethodRaw(meth, []) - if not j.isNil: - result = Activity.fromJObject(j) + let j = cls.callMethod(jobject, "getContext", "()Landroid/content/Context;") + if not j.isNil: + result = Activity.fromJObject(j) proc currentActivityIfPresent*(): Activity = if gCurrentActivity.isNil: diff --git a/android/graphics/canvas.nim b/android/graphics/canvas.nim new file mode 100644 index 0000000..964cfd3 --- /dev/null +++ b/android/graphics/canvas.nim @@ -0,0 +1,8 @@ +import jnim +import android/graphics/Paint + +jclass android.graphics.Canvas* of JVMObject: + proc drawPaint*(paint: Paint) + proc drawRect*(left: jfloat, top: jfloat, right: jfloat, bottom: jfloat, + paint: Paint) + proc drawCircle*(cx: jfloat, cy: jfloat, radius: jfloat, paint: Paint) diff --git a/android/graphics/paint.nim b/android/graphics/paint.nim new file mode 100644 index 0000000..651f3bf --- /dev/null +++ b/android/graphics/paint.nim @@ -0,0 +1,5 @@ +import jnim + +jclass android.graphics.Paint* of JVMObject: + proc new* + proc setColor*(color: jint) diff --git a/android/view/input_event.nim b/android/view/input_event.nim new file mode 100644 index 0000000..bb22937 --- /dev/null +++ b/android/view/input_event.nim @@ -0,0 +1,3 @@ +import jnim + +jclassDef android.view.InputEvent* of JVMObject diff --git a/android/view/motion_event.nim b/android/view/motion_event.nim index 837ce9c..65d6f16 100644 --- a/android/view/motion_event.nim +++ b/android/view/motion_event.nim @@ -1,2 +1,5 @@ import jnim +import android/view/input_event + +jclassDef android.view.MotionEvent* of InputEvent diff --git a/android/view/surface.nim b/android/view/surface.nim new file mode 100644 index 0000000..6dae7ab --- /dev/null +++ b/android/view/surface.nim @@ -0,0 +1,4 @@ +import jnim + +jclass android.view.Surface* of JVMObject: + proc isValid*(): jboolean diff --git a/android/view/surface_holder.nim b/android/view/surface_holder.nim index c6dd91f..65c18aa 100644 --- a/android/view/surface_holder.nim +++ b/android/view/surface_holder.nim @@ -1,5 +1,21 @@ import jnim +import android/graphics/canvas +import android/view/surface -jclass android.view.SurfaceHolder* of JVMObject: - proc setFixedSize*(width, height: jint) +jclassDef android.view.SurfaceHolder* of JVMObject +jclassDef android.view.`SurfaceHolder$Callback`* of JVMObject +type + SurfaceHolderCallback* = `SurfaceHolder$Callback` + +jclassImpl android.view.SurfaceHolder* of JVMObject: + proc setFixedSize*(width, height: jint) + proc getSurface*: Surface + proc lockCanvas*: Canvas + proc unlockCanvasAndPost*(canvas: Canvas) + proc addCallback*(callback: SurfaceHolderCallback) + +jclassImpl android.view.`SurfaceHolder$Callback`* of JVMObject: + proc surfaceCreated*(holder: SurfaceHolder) + proc surfaceChanged*(holder: SurfaceHolder, format: jint, width: jint, height: jint) + proc surfaceDestroyed*(holder: SurfaceHolder) diff --git a/android/view/surface_view.nim b/android/view/surface_view.nim index 3a7705a..38286c5 100644 --- a/android/view/surface_view.nim +++ b/android/view/surface_view.nim @@ -1,5 +1,6 @@ import jnim -import android/view/[view, surface_holder] +import android/view/[view, surface_holder, motion_event] -jclass android.view.SurfaceView* of View: - proc getHolder*(): SurfaceHolder +jclass android.view.SurfaceView* extends View: + proc getHolder*: SurfaceHolder + proc onTouchEvent*(evt: MotionEvent): jboolean