diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/CPUView.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/CPUView.kt index cd79b58b8..180c964b8 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/CPUView.kt +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/CPUView.kt @@ -71,7 +71,7 @@ class CPUView @JvmOverloads constructor( canvas.queueEvent { TNSCanvas.nativeCustomWithBitmapFlush(canvas.nativeContext, it) handler!!.post { - canvas.pendingInvalidate = false + canvas.invalidateState = TNSCanvas.InvalidateState.NONE invalidate() } } diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt index f90df160d..19c1c452b 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt @@ -149,19 +149,19 @@ internal class GLContext { queueEvent { if (reference != null) { val canvasView = reference!!.get() - if (canvasView != null && canvasView.nativeContext != 0L && canvasView.pendingInvalidate) { + if (canvasView != null && canvasView.nativeContext != 0L && canvasView.invalidateState == TNSCanvas.InvalidateState.INVALIDATING) { TNSCanvas.nativeFlush(canvasView.nativeContext) if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) { Log.e("JS", "GLContext: Cannot swap buffers!") } - canvasView.pendingInvalidate = false + canvasView.invalidateState = TNSCanvas.InvalidateState.NONE } else { // WebGL if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) { Log.e("JS", "GLContext: Cannot swap buffers!") } if (canvasView != null) { - canvasView.pendingInvalidate = false + canvasView.invalidateState = TNSCanvas.InvalidateState.NONE } } } diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvas.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvas.kt index eb2a5d36b..61db631dd 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvas.kt +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvas.kt @@ -46,7 +46,7 @@ class TNSCanvas : FrameLayout, FrameCallback, ActivityLifecycleCallbacks { } @JvmField - internal var pendingInvalidate = false + internal var invalidateState = InvalidateState.NONE internal var contextType = ContextType.NONE internal var actualContextType = "" internal var useCpu = false @@ -122,9 +122,14 @@ class TNSCanvas : FrameLayout, FrameCallback, ActivityLifecycleCallbacks { private val mainHandler = Handler(Looper.getMainLooper()) + enum class InvalidateState { + NONE, PENDING, INVALIDATING + } + override fun doFrame(frameTimeNanos: Long) { if (!isHandleInvalidationManually) { - if (pendingInvalidate) { + if (invalidateState == InvalidateState.PENDING) { + invalidateState = InvalidateState.INVALIDATING flush() } } diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt index 14f0260ae..12cd81805 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt @@ -523,7 +523,7 @@ class TNSCanvasRenderingContext2D internal constructor(val canvas: TNSCanvas) : private fun updateCanvas() { // synchronized (canvasView.lock) { - canvas.pendingInvalidate = true + canvas.invalidateState = TNSCanvas.InvalidateState.PENDING //} } diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt index 8fb1f5b16..b11a8b63c 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt @@ -39,7 +39,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext { fun updateCanvas() { // synchronized (canvasView.lock) { - canvas.pendingInvalidate = true + canvas.invalidateState = TNSCanvas.InvalidateState.PENDING //} } diff --git a/packages/canvas/typings/android.d.ts b/packages/canvas/typings/android.d.ts index 6bba43b6a..aee4e9d90 100644 --- a/packages/canvas/typings/android.d.ts +++ b/packages/canvas/typings/android.d.ts @@ -309,7 +309,7 @@ declare module org { export module canvas { export class TNSCanvas { public static class: java.lang.Class; - public pendingInvalidate: boolean; + public invalidateState: org.nativescript.canvas.TNSCanvas.ContextType; public contextAlpha: boolean; public contextAntialias: boolean; public contextDepth: boolean; @@ -459,6 +459,14 @@ declare module org { public constructor(); public onResult(param0: string): void; } + export class InvalidateState { + public static class: java.lang.Class; + public static NONE: org.nativescript.canvas.TNSCanvas.InvalidateState; + public static PENDING: org.nativescript.canvas.TNSCanvas.InvalidateState; + public static INVALIDATING: org.nativescript.canvas.TNSCanvas.InvalidateState; + public static valueOf(param0: string): org.nativescript.canvas.TNSCanvas.InvalidateState; + public static values(): androidNative.Array; + } export class Listener { public static class: java.lang.Class; /**