You can now put WAFFLE_WINDOW_FULLSCREEN in the attribute list passed to waffle_window_create2() and get a full screen window. Only glx and x11_egl implemented so far.
Signed-off-by: Frank Henigman <fjhenig...@google.com> --- include/waffle/waffle.h | 1 + src/waffle/api/waffle_window.c | 69 ++++++++++++++++++++++-------------------- src/waffle/glx/glx_window.c | 12 ++++++-- src/waffle/xegl/xegl_window.c | 13 ++++++-- 4 files changed, 59 insertions(+), 36 deletions(-) diff --git a/include/waffle/waffle.h b/include/waffle/waffle.h index 297a487..df0218e 100644 --- a/include/waffle/waffle.h +++ b/include/waffle/waffle.h @@ -172,6 +172,7 @@ enum waffle_enum { WAFFLE_WINDOW_WIDTH = 0x0310, WAFFLE_WINDOW_HEIGHT = 0x0311, + WAFFLE_WINDOW_FULLSCREEN = 0x0312, }; const char* diff --git a/src/waffle/api/waffle_window.c b/src/waffle/api/waffle_window.c index 9ab63ca..10004c0 100644 --- a/src/waffle/api/waffle_window.c +++ b/src/waffle/api/waffle_window.c @@ -42,6 +42,7 @@ waffle_window_create2( struct wcore_config *wc_config = wcore_config(config); intptr_t *attrib_list_filtered = NULL; intptr_t width = 0, height = 0; + intptr_t unused; const struct api_object *obj_list[] = { wc_config ? &wc_config->api : NULL, @@ -53,38 +54,42 @@ waffle_window_create2( attrib_list_filtered = wcore_attrib_list_copy(attrib_list); - if (!wcore_attrib_list_pop(attrib_list_filtered, - WAFFLE_WINDOW_WIDTH, &width)) { - wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, - "required attribute WAFFLE_WINDOW_WIDTH is missing"); - goto done; - } - - if (!wcore_attrib_list_pop(attrib_list_filtered, - WAFFLE_WINDOW_HEIGHT, &height)) { - wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, - "required attribute WAFFLE_WINDOW_HEIGHT is missing"); - goto done; - } - - if (width <= 0) { - wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, - "WAFFLE_WINDOW_WIDTH is not positive"); - goto done; - } else if (width > INT32_MAX) { - wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, - "WAFFLE_WINDOW_WIDTH is greater than INT32_MAX"); - goto done; - } - - if (height <= 0) { - wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, - "WAFFLE_WINDOW_HEIGHT is not positive"); - goto done; - } else if (height > INT32_MAX) { - wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, - "WAFFLE_WINDOW_HEIGHT is greater than INT32_MAX"); - goto done; + if (!wcore_attrib_list_get(attrib_list_filtered, + WAFFLE_WINDOW_FULLSCREEN, &unused)) { + + if (!wcore_attrib_list_pop(attrib_list_filtered, + WAFFLE_WINDOW_WIDTH, &width)) { + wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, + "required attribute WAFFLE_WINDOW_WIDTH is missing"); + goto done; + } + + if (!wcore_attrib_list_pop(attrib_list_filtered, + WAFFLE_WINDOW_HEIGHT, &height)) { + wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, + "required attribute WAFFLE_WINDOW_HEIGHT is missing"); + goto done; + } + + if (width <= 0) { + wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, + "WAFFLE_WINDOW_WIDTH is not positive"); + goto done; + } else if (width > INT32_MAX) { + wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, + "WAFFLE_WINDOW_WIDTH is greater than INT32_MAX"); + goto done; + } + + if (height <= 0) { + wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, + "WAFFLE_WINDOW_HEIGHT is not positive"); + goto done; + } else if (height > INT32_MAX) { + wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE, + "WAFFLE_WINDOW_HEIGHT is greater than INT32_MAX"); + goto done; + } } wc_self = api_platform->vtbl->window.create(api_platform, diff --git a/src/waffle/glx/glx_window.c b/src/waffle/glx/glx_window.c index 331bb51..8be188c 100644 --- a/src/waffle/glx/glx_window.c +++ b/src/waffle/glx/glx_window.c @@ -61,9 +61,17 @@ glx_window_create(struct wcore_platform *wc_plat, struct glx_display *dpy = glx_display(wc_config->display); struct glx_config *config = glx_config(wc_config); bool ok = true; + intptr_t unused; + size_t expect = 0; - if (wcore_attrib_list_length(attrib_list) > 0) { - wcore_error_bad_attribute(attrib_list[0]); + if (wcore_attrib_list_get(attrib_list, WAFFLE_WINDOW_FULLSCREEN, &unused)) { + width = DisplayWidth(dpy->x11.xlib, dpy->x11.screen); + height = DisplayHeight(dpy->x11.xlib, dpy->x11.screen); + expect = 1; + } + + if (wcore_attrib_list_length(attrib_list) > expect) { + wcore_error_bad_attribute(attrib_list[expect]); return NULL; } diff --git a/src/waffle/xegl/xegl_window.c b/src/waffle/xegl/xegl_window.c index ab66314..511158a 100644 --- a/src/waffle/xegl/xegl_window.c +++ b/src/waffle/xegl/xegl_window.c @@ -66,9 +66,18 @@ xegl_window_create(struct wcore_platform *wc_plat, struct wegl_platform *plat = wegl_platform(wc_plat); xcb_visualid_t visual; bool ok = true; + intptr_t unused; + size_t expect = 0; + + if (wcore_attrib_list_get(attrib_list, WAFFLE_WINDOW_FULLSCREEN, &unused)) + { + width = DisplayWidth(dpy->x11.xlib, dpy->x11.screen); + height = DisplayHeight(dpy->x11.xlib, dpy->x11.screen); + expect = 1; + } - if (wcore_attrib_list_length(attrib_list) > 0) { - wcore_error_bad_attribute(attrib_list[0]); + if (wcore_attrib_list_length(attrib_list) > expect) { + wcore_error_bad_attribute(attrib_list[expect]); return NULL; } -- 2.2.0.rc0.207.ga3a616c _______________________________________________ waffle mailing list waffle@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/waffle