From 8ae5a8e7c04c7b204b739dfcd5da9e2e0f83e1eb Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 1 Jul 2010 18:44:46 -0700 Subject: [PATCH] Get to the point of being able to do native drawing. A little cleanup. Change-Id: I37ef0557abf330d91d6fe47e81d062206b3bc346 --- core/jni/android_app_NativeActivity.cpp | 8 ++++++-- native/android/native_window.cpp | 6 ++++++ native/include/android/native_activity.h | 8 -------- native/include/android/native_window.h | 25 ++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp index 49b9609578f46..dab1dba811cb5 100644 --- a/core/jni/android_app_NativeActivity.cpp +++ b/core/jni/android_app_NativeActivity.cpp @@ -362,8 +362,12 @@ onSurfaceChanged_native(JNIEnv* env, jobject clazz, jint handle, jobject surface sp oldNativeWindow = code->nativeWindow; code->setSurface(surface); if (oldNativeWindow != code->nativeWindow) { - if (code->nativeWindow != NULL && code->callbacks.onNativeWindowChanged != NULL) { - code->callbacks.onNativeWindowChanged(&code->activity, + if (oldNativeWindow != NULL && code->callbacks.onNativeWindowDestroyed != NULL) { + code->callbacks.onNativeWindowDestroyed(&code->activity, + oldNativeWindow.get()); + } + if (code->nativeWindow != NULL && code->callbacks.onNativeWindowCreated != NULL) { + code->callbacks.onNativeWindowCreated(&code->activity, code->nativeWindow.get()); } } diff --git a/native/android/native_window.cpp b/native/android/native_window.cpp index 7a6eb6d826e52..448cbfccb6667 100644 --- a/native/android/native_window.cpp +++ b/native/android/native_window.cpp @@ -39,3 +39,9 @@ int32_t ANativeWindow_getHeight(ANativeWindow* window) { int32_t ANativeWindow_getFormat(ANativeWindow* window) { return getWindowProp(window, NATIVE_WINDOW_FORMAT); } + +int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, + int32_t height, int32_t format) { + native_window_set_buffers_geometry(window, width, height, format); + return 0; +} diff --git a/native/include/android/native_activity.h b/native/include/android/native_activity.h index d23e40fbc6273..bf5c641fc1627 100644 --- a/native/include/android/native_activity.h +++ b/native/include/android/native_activity.h @@ -131,14 +131,6 @@ typedef struct ANativeActivityCallbacks { */ void (*onNativeWindowCreated)(ANativeActivity* activity, ANativeWindow* window); - /** - * The drawing window for this native activity has changed. During this time, - * old ANativeWindow object is still valid but no longer active and drawing - * should switch to the new ANativeWindow given here. After returning from - * this function, you must not touch the old window. - */ - void (*onNativeWindowChanged)(ANativeActivity* activity, ANativeWindow* window); - /** * The drawing window for this native activity is going to be destroyed. * You MUST ensure that you do not touch the window object after returning diff --git a/native/include/android/native_window.h b/native/include/android/native_window.h index b3f47b2d3d2fe..678ba3d7c7e28 100644 --- a/native/include/android/native_window.h +++ b/native/include/android/native_window.h @@ -22,6 +22,15 @@ extern "C" { #endif +/* + * Pixel formats that a window can use. + */ +enum { + WINDOW_FORMAT_RGBA_8888 = 1, + WINDOW_FORMAT_RGBX_8888 = 2, + WINDOW_FORMAT_RGB_565 = 4, +}; + struct ANativeWindow; typedef struct ANativeWindow ANativeWindow; @@ -43,6 +52,22 @@ int32_t ANativeWindow_getHeight(ANativeWindow* window); */ int32_t ANativeWindow_getFormat(ANativeWindow* window); +/* + * Change the format and size of the window buffers. + * + * The width and height control the number of pixels in the buffers, not the + * dimensions of the window on screen. If these are different than the + * window's physical size, then it buffer will be scaled to match that size + * when compositing it to the screen. + * + * The format may be one of the window format constants above. + * + * For all of these parameters, if 0 is supplied than the window's base + * value will come back in force. + */ +int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, + int32_t height, int32_t format); + #ifdef __cplusplus }; #endif