summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/waffle/waffle.h6
-rw-r--r--src/waffle/android/droid_platform.c1
-rw-r--r--src/waffle/android/droid_surfaceflingerlink.cpp35
-rw-r--r--src/waffle/android/droid_surfaceflingerlink.h7
-rw-r--r--src/waffle/android/droid_window.c17
-rw-r--r--src/waffle/android/droid_window.h5
-rw-r--r--src/waffle/api/waffle_window.c24
-rw-r--r--src/waffle/core/wcore_platform.h5
8 files changed, 100 insertions, 0 deletions
diff --git a/include/waffle/waffle.h b/include/waffle/waffle.h
index 00670fb..237b434 100644
--- a/include/waffle/waffle.h
+++ b/include/waffle/waffle.h
@@ -246,6 +246,12 @@ WAFFLE_API bool
waffle_window_show(struct waffle_window *self);
WAFFLE_API bool
+waffle_window_resize(
+ struct waffle_window *self,
+ int32_t width,
+ int32_t height);
+
+WAFFLE_API bool
waffle_window_swap_buffers(struct waffle_window *self);
WAFFLE_API union waffle_native_window*
diff --git a/src/waffle/android/droid_platform.c b/src/waffle/android/droid_platform.c
index f904685..bbf2b14 100644
--- a/src/waffle/android/droid_platform.c
+++ b/src/waffle/android/droid_platform.c
@@ -134,6 +134,7 @@ static const struct wcore_platform_vtbl droid_platform_vtbl = {
.destroy = droid_window_destroy,
.show = droid_window_show,
.swap_buffers = wegl_window_swap_buffers,
+ .resize = droid_window_resize,
.get_native = NULL,
},
};
diff --git a/src/waffle/android/droid_surfaceflingerlink.cpp b/src/waffle/android/droid_surfaceflingerlink.cpp
index 29f5757..f98d493 100644
--- a/src/waffle/android/droid_surfaceflingerlink.cpp
+++ b/src/waffle/android/droid_surfaceflingerlink.cpp
@@ -180,6 +180,27 @@ droid_show_surface(
return true;
}
+bool
+droid_resize_surface(
+ droid_surfaceflinger_container* pSFContainer,
+ droid_ANativeWindow_container* pANWContainer,
+ int width,
+ int height)
+{
+ int iRVal;
+
+ pSFContainer->composer_client->openGlobalTransaction();
+ iRVal = pANWContainer->surface_control->setSize(width, height);
+ pSFContainer->composer_client->closeGlobalTransaction();
+
+ if (iRVal != NO_ERROR) {
+ wcore_errorf(WAFFLE_ERROR_UNKNOWN,
+ "Error in android::SurfaceControl->setSize");
+ return false;
+ }
+ return true;
+}
+
void
droid_destroy_surface(
droid_surfaceflinger_container* pSFContainer,
@@ -249,6 +270,20 @@ droid_show_surface(
(pANWContainer));
}
+extern "C" bool
+droid_resize_surface(
+ droid_surfaceflinger_container* pSFContainer,
+ droid_ANativeWindow_container* pANWContainer,
+ int height,
+ int width)
+{
+ return waffle::droid_resize_surface(
+ reinterpret_cast<waffle::droid_surfaceflinger_container*>
+ (pSFContainer),
+ reinterpret_cast<waffle::droid_ANativeWindow_container*>
+ (pANWContainer), height, width);
+}
+
extern "C" void
droid_destroy_surface(
droid_surfaceflinger_container* pSFContainer,
diff --git a/src/waffle/android/droid_surfaceflingerlink.h b/src/waffle/android/droid_surfaceflingerlink.h
index bf01c14..53aeb4f 100644
--- a/src/waffle/android/droid_surfaceflingerlink.h
+++ b/src/waffle/android/droid_surfaceflingerlink.h
@@ -40,6 +40,13 @@ droid_show_surface(
struct droid_surfaceflinger_container* pSFContainer,
struct droid_ANativeWindow_container* pANWContainer);
+bool
+droid_resize_surface(
+ struct droid_surfaceflinger_container* pSFContainer,
+ struct droid_ANativeWindow_container* pANWContainer,
+ int width,
+ int height);
+
struct droid_ANativeWindow_container*
droid_create_surface(
int width,
diff --git a/src/waffle/android/droid_window.c b/src/waffle/android/droid_window.c
index 688b3de..b776b65 100644
--- a/src/waffle/android/droid_window.c
+++ b/src/waffle/android/droid_window.c
@@ -97,3 +97,20 @@ droid_window_show(struct wcore_window *wc_self)
return droid_show_surface(dpy->pSFContainer, self->pANWContainer);
}
+
+bool
+droid_window_resize(struct wcore_window *wc_self,
+ int32_t width,
+ int32_t height)
+{
+ struct droid_window *self = droid_window(wc_self);
+ struct droid_display *dpy;
+
+ if (!self)
+ return false;
+
+ dpy = droid_display(wc_self->display);
+
+ return droid_resize_surface(dpy->pSFContainer, self->pANWContainer,
+ width, height);
+}
diff --git a/src/waffle/android/droid_window.h b/src/waffle/android/droid_window.h
index 956ff41..85064cd 100644
--- a/src/waffle/android/droid_window.h
+++ b/src/waffle/android/droid_window.h
@@ -59,3 +59,8 @@ droid_window_destroy(struct wcore_window *wc_self);
bool
droid_window_show(struct wcore_window *wc_self);
+
+bool
+droid_window_resize(struct wcore_window *wc_self,
+ int32_t width,
+ int32_t height);
diff --git a/src/waffle/api/waffle_window.c b/src/waffle/api/waffle_window.c
index 85f29a2..9fd60ac 100644
--- a/src/waffle/api/waffle_window.c
+++ b/src/waffle/api/waffle_window.c
@@ -93,6 +93,30 @@ waffle_window_show(struct waffle_window *self)
}
bool
+waffle_window_resize(
+ struct waffle_window *self,
+ int32_t width,
+ int32_t height)
+{
+ struct wcore_window *wc_self = wcore_window(self);
+
+ const struct api_object *obj_list[] = {
+ wc_self ? &wc_self->api : NULL,
+ };
+
+ if (!api_check_entry(obj_list, 1))
+ return false;
+
+ if (api_platform->vtbl->window.resize) {
+ return api_platform->vtbl->window.resize(wc_self, width, height);
+ }
+ else {
+ wcore_error(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM);
+ return NULL;
+ }
+}
+
+bool
waffle_window_swap_buffers(struct waffle_window *self)
{
struct wcore_window *wc_self = wcore_window(self);
diff --git a/src/waffle/core/wcore_platform.h b/src/waffle/core/wcore_platform.h
index ae602f5..65de879 100644
--- a/src/waffle/core/wcore_platform.h
+++ b/src/waffle/core/wcore_platform.h
@@ -124,6 +124,11 @@ struct wcore_platform_vtbl {
bool
(*swap_buffers)(struct wcore_window *window);
+ bool
+ (*resize)(struct wcore_window *window,
+ int32_t height,
+ int32_t width);
+
/// May be null.
union waffle_native_window*
(*get_native)(struct wcore_window *window);