diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2011-05-12 21:29:22 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2011-05-12 21:29:22 -0400 |
commit | 4bde293ff8109d55eeaee8732f5a6ee0c8cd4bd9 (patch) | |
tree | 9bc28fe4281feeb90758a2f6cfb28988da348287 | |
parent | 4453ba084aae5a00318b9dfdeda95e8eaa17494c (diff) |
Add event to associate visuals with a pixel format token
-rw-r--r-- | protocol/wayland.xml | 11 | ||||
-rw-r--r-- | wayland/wayland-client.c | 39 | ||||
-rw-r--r-- | wayland/wayland-server.c | 46 |
3 files changed, 46 insertions, 50 deletions
diff --git a/protocol/wayland.xml b/protocol/wayland.xml index afeaf9e..9d0a539 100644 --- a/protocol/wayland.xml +++ b/protocol/wayland.xml @@ -83,6 +83,17 @@ <request name="create_surface"> <arg name="id" type="new_id" interface="wl_surface"/> </request> + + <enum name="visual"> + <entry name="argb32" value="0"/> + <entry name="premultiplied_argb32" value="1"/> + <entry name="xrgb32" value="2"/> + </enum> + + <event name="token_visual"> + <arg name="id" type="new_id" interface="wl_object"/> + <arg name="token" type="uint"/> + </event> </interface> <!-- Shared memory support --> diff --git a/wayland/wayland-client.c b/wayland/wayland-client.c index 3d28cc5..0852662 100644 --- a/wayland/wayland-client.c +++ b/wayland/wayland-client.c @@ -82,10 +82,6 @@ struct wl_display { struct wl_list global_listener_list; struct wl_list global_list; - struct wl_visual *argb_visual; - struct wl_visual *premultiplied_argb_visual; - struct wl_visual *rgb_visual; - wl_display_update_func_t update; void *update_data; @@ -208,39 +204,6 @@ wl_proxy_marshal(struct wl_proxy *proxy, uint32_t opcode, ...) wl_closure_destroy(closure); } -static void -add_visual(struct wl_display *display, uint32_t id) -{ - struct wl_visual *visual; - - visual = (struct wl_visual *) - wl_proxy_create_for_id(display, &wl_visual_interface, id); - if (display->argb_visual == NULL) - display->argb_visual = visual; - else if (display->premultiplied_argb_visual == NULL) - display->premultiplied_argb_visual = visual; - else - display->rgb_visual = visual; -} - -WL_EXPORT struct wl_visual * -wl_display_get_argb_visual(struct wl_display *display) -{ - return display->argb_visual; -} - -WL_EXPORT struct wl_visual * -wl_display_get_premultiplied_argb_visual(struct wl_display *display) -{ - return display->premultiplied_argb_visual; -} - -WL_EXPORT struct wl_visual * -wl_display_get_rgb_visual(struct wl_display *display) -{ - return display->rgb_visual; -} - /* Can't do this, there may be more than one instance of an * interface... */ WL_EXPORT uint32_t @@ -278,8 +241,6 @@ display_handle_global(void *data, if (strcmp(interface, "wl_display") == 0) wl_hash_table_insert(display->objects, id, &display->proxy.object); - else if (strcmp(interface, "wl_visual") == 0) - add_visual(display, id); global = malloc(sizeof *global); global->id = id; diff --git a/wayland/wayland-server.c b/wayland/wayland-server.c index 0d76bb0..d30df5b 100644 --- a/wayland/wayland-server.c +++ b/wayland/wayland-server.c @@ -822,6 +822,29 @@ wl_display_add_socket(struct wl_display *display, const char *name) return 0; } +static void +compositor_bind(struct wl_client *client, + struct wl_object *global, uint32_t version) +{ + struct wl_compositor *compositor = + container_of(global, struct wl_compositor, object); + + wl_client_post_event(client, global, + WL_COMPOSITOR_TOKEN_VISUAL, + &compositor->argb_visual.object, + WL_COMPOSITOR_VISUAL_ARGB32); + + wl_client_post_event(client, global, + WL_COMPOSITOR_TOKEN_VISUAL, + &compositor->premultiplied_argb_visual.object, + WL_COMPOSITOR_VISUAL_PREMULTIPLIED_ARGB32); + + wl_client_post_event(client, global, + WL_COMPOSITOR_TOKEN_VISUAL, + &compositor->rgb_visual.object, + WL_COMPOSITOR_VISUAL_XRGB32); +} + WL_EXPORT int wl_compositor_init(struct wl_compositor *compositor, const struct wl_compositor_interface *interface, @@ -830,13 +853,15 @@ wl_compositor_init(struct wl_compositor *compositor, compositor->object.interface = &wl_compositor_interface; compositor->object.implementation = (void (**)(void)) interface; wl_display_add_object(display, &compositor->object); - if (wl_display_add_global(display, &compositor->object, NULL)) + if (wl_display_add_global(display, + &compositor->object, compositor_bind)) return -1; compositor->argb_visual.object.interface = &wl_visual_interface; compositor->argb_visual.object.implementation = NULL; wl_display_add_object(display, &compositor->argb_visual.object); - if (wl_display_add_global(display, &compositor->argb_visual.object, NULL)) + if (wl_display_add_global(display, + &compositor->argb_visual.object, NULL)) return -1; compositor->premultiplied_argb_visual.object.interface = @@ -844,18 +869,17 @@ wl_compositor_init(struct wl_compositor *compositor, compositor->premultiplied_argb_visual.object.implementation = NULL; wl_display_add_object(display, &compositor->premultiplied_argb_visual.object); - if (wl_display_add_global(display, - &compositor->premultiplied_argb_visual.object, - NULL)) - return -1; + if (wl_display_add_global(display, + &compositor->premultiplied_argb_visual.object, + NULL)) + return -1; compositor->rgb_visual.object.interface = &wl_visual_interface; compositor->rgb_visual.object.implementation = NULL; - wl_display_add_object(display, - &compositor->rgb_visual.object); - if (wl_display_add_global(display, - &compositor->rgb_visual.object, NULL)) - return -1; + wl_display_add_object(display, &compositor->rgb_visual.object); + if (wl_display_add_global(display, + &compositor->rgb_visual.object, NULL)) + return -1; return 0; } |