[PATCH weston 1/2] simple-touch: Use damage_buffer if available
Giulio Camuffo
giuliocamuffo at gmail.com
Fri Feb 12 07:03:16 UTC 2016
2016-02-12 6:26 GMT+02:00 Bryce Harrington <bryce at osg.samsung.com>:
> On Fri, Jan 08, 2016 at 03:00:55PM -0600, Derek Foreman wrote:
>> Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
>> ---
>> clients/simple-touch.c | 18 +++++++++++++++---
>> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> Given that the demo clients exist to show the functionality of the
> weston they're included with, damage_buffer is always going to be
> available, isn't it?
But it can be used to test other compositors too. I think demo clients
should strive to be compatible with as many compositors as possible.
>
> Maybe just keep the client concise and just use the new API?
>
> If we do want to demonstrate both routines, then IMHO the code should
> either show or explain why one would prefer one over the other. I
> imagine a new wayland coder would be looking at simple-touch as a simple
> example of how to do touch, and might get confused seeing two ways to do
> it.
>
> Bryce
>
>> diff --git a/clients/simple-touch.c b/clients/simple-touch.c
>> index 446f2ca..383d802 100644
>> --- a/clients/simple-touch.c
>> +++ b/clients/simple-touch.c
>> @@ -56,6 +56,7 @@ struct touch {
>> int has_argb;
>> int width, height;
>> void *data;
>> + bool use_damage_buffer;
>> };
>>
>> static void
>> @@ -148,7 +149,10 @@ touch_paint(struct touch *touch, int32_t x, int32_t y, int32_t id)
>> p[2] = c;
>>
>> wl_surface_attach(touch->surface, touch->buffer, 0, 0);
>> - wl_surface_damage(touch->surface, x - 2, y - 2, 5, 5);
>> + if (touch->use_damage_buffer)
>> + wl_surface_damage_buffer(touch->surface, x - 2, y - 2, 5, 5);
>> + else
>> + wl_surface_damage(touch->surface, x - 2, y - 2, 5, 5);
>> /* todo: We could queue up more damage before committing, if there
>> * are more input events to handle.
>> */
>> @@ -269,9 +273,13 @@ handle_global(void *data, struct wl_registry *registry,
>> struct touch *touch = data;
>>
>> if (strcmp(interface, "wl_compositor") == 0) {
>> + int cv = MIN(WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION, version);
>> +
>> touch->compositor =
>> wl_registry_bind(registry, name,
>> - &wl_compositor_interface, 1);
>> + &wl_compositor_interface, cv);
>> + if (cv >= WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION)
>> + touch->use_damage_buffer = true;
>> } else if (strcmp(interface, "wl_shell") == 0) {
>> touch->shell =
>> wl_registry_bind(registry, name,
>> @@ -308,6 +316,7 @@ touch_create(int width, int height)
>> touch->display = wl_display_connect(NULL);
>> assert(touch->display);
>>
>> + touch->use_damage_buffer = false;
>> touch->has_argb = 0;
>> touch->registry = wl_display_get_registry(touch->display);
>> wl_registry_add_listener(touch->registry, ®istry_listener, touch);
>> @@ -337,7 +346,10 @@ touch_create(int width, int height)
>>
>> memset(touch->data, 64, width * height * 4);
>> wl_surface_attach(touch->surface, touch->buffer, 0, 0);
>> - wl_surface_damage(touch->surface, 0, 0, width, height);
>> + if (touch->use_damage_buffer)
>> + wl_surface_damage_buffer(touch->surface, 0, 0, width, height);
>> + else
>> + wl_surface_damage(touch->surface, 0, 0, width, height);
>> wl_surface_commit(touch->surface);
>>
>> return touch;
>> --
>> 2.6.4
>>
>> _______________________________________________
>> wayland-devel mailing list
>> wayland-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list