swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit fd0e372626f5593a16e8ffdc411d5ebda4fb9802
parent 682473bd7dc97c72031c5264637783fccd243d45
Author: Michael Forney <mforney@mforney.org>
Date:   Thu, 16 Jan 2014 02:16:47 -0800

Port to new wld API

This temporarily drops SHM support.

Diffstat:
Mlibswc/compositor.c | 114+++++++++++--------------------------------------------------------------------
Mlibswc/compositor.h | 3---
Dlibswc/cursor_surface.c | 114-------------------------------------------------------------------------------
Dlibswc/cursor_surface.h | 32--------------------------------
Mlibswc/drm.c | 45++++++++++++++++++++++++++++-----------------
Mlibswc/drm.h | 3++-
Mlibswc/drm_buffer.c | 4++--
Mlibswc/drm_buffer.h | 4++--
Mlibswc/local.mk | 1-
Mlibswc/plane.c | 73+++++++++++++++++++++++++++++++++++--------------------------------------
Mlibswc/plane.h | 4++--
Mlibswc/surface.c | 4++--
Mlibswc/swc.c | 2--
13 files changed, 88 insertions(+), 315 deletions(-)

diff --git a/libswc/compositor.c b/libswc/compositor.c @@ -1,6 +1,5 @@ #include "swc.h" #include "compositor.h" -#include "cursor_surface.h" #include "data_device_manager.h" #include "drm.h" #include "drm_buffer.h" @@ -11,6 +10,7 @@ #include "seat.h" #include "surface.h" #include "util.h" +#include "view.h" #include <stdlib.h> #include <stdio.h> @@ -47,54 +47,22 @@ struct view struct buffer_state { - struct wld_drawable * drawable; - /* Only used for SHM buffers */ - pixman_image_t * dst, * src; + struct wld_buffer * buffer; struct wl_listener destroy_listener; }; struct render_target { - struct wld_drawable * drawable; + struct wld_buffer * buffer; pixman_rectangle32_t geometry; }; -static inline uint32_t pixman_format(uint32_t format) -{ - switch (format) - { - case WL_SHM_FORMAT_XRGB8888: - return PIXMAN_x8r8g8b8; - case WL_SHM_FORMAT_ARGB8888: - return PIXMAN_a8r8g8b8; - } - - return 0; -} - -static inline uint32_t wld_format(uint32_t format) -{ - switch (format) - { - case WL_SHM_FORMAT_XRGB8888: - return WLD_FORMAT_XRGB8888; - case WL_SHM_FORMAT_ARGB8888: - return WLD_FORMAT_ARGB8888; - } - - return 0; -} - static void handle_buffer_destroy(struct wl_listener * listener, void * data) { struct buffer_state * state = CONTAINER_OF(listener, typeof(*state), destroy_listener); - if (state->dst) - pixman_image_unref(state->dst); - if (state->src) - pixman_image_unref(state->src); - wld_destroy_drawable(state->drawable); + wld_destroy_buffer(state->buffer); free(state); } @@ -147,9 +115,10 @@ static void repaint_surface(struct render_target * target, pixman_region32_translate(&surface_damage, -surface->geometry.x, -surface->geometry.y); - wld_copy_region(state->drawable, target->drawable, &surface_damage, + wld_copy_region(swc.drm->renderer, state->buffer, surface->geometry.x - target->geometry.x, - surface->geometry.y - target->geometry.y); + surface->geometry.y - target->geometry.y, + &surface_damage); } pixman_region32_fini(&surface_damage); @@ -161,7 +130,7 @@ static void repaint_surface(struct render_target * target, pixman_region32_translate(&border_damage, -target->geometry.x, -target->geometry.y); - wld_fill_region(target->drawable, view->border.color, &border_damage); + wld_fill_region(swc.drm->renderer, view->border.color, &border_damage); } pixman_region32_fini(&border_damage); @@ -183,7 +152,7 @@ static void renderer_repaint(struct render_target * target, { pixman_region32_translate(base_damage, -target->geometry.x, -target->geometry.y); - wld_fill_region(target->drawable, 0xff000000, base_damage); + wld_fill_region(swc.drm->renderer, 0xff000000, base_damage); } wl_list_for_each_reverse(surface, surfaces, link) @@ -192,14 +161,13 @@ static void renderer_repaint(struct render_target * target, repaint_surface(target, surface, damage); } - wld_flush(target->drawable); + wld_flush(swc.drm->renderer); } static void renderer_attach(struct swc_surface * surface, struct wl_resource * resource) { struct buffer_state * state; - struct wl_shm_buffer * shm_buffer; struct swc_drm_buffer * drm_buffer; if (!resource) @@ -212,30 +180,12 @@ static void renderer_attach(struct swc_surface * surface, if (!(state = malloc(sizeof *state))) return; - if ((shm_buffer = wl_shm_buffer_get(resource))) - { - uint32_t width = wl_shm_buffer_get_width(shm_buffer), - height = wl_shm_buffer_get_height(shm_buffer), - format = wl_shm_buffer_get_format(shm_buffer), - pitch = wl_shm_buffer_get_stride(shm_buffer); - void * data = wl_shm_buffer_get_data(shm_buffer); - - state->drawable = wld_drm_create_drawable(swc.drm->context, - width, height, - wld_format(format)); - state->src = pixman_image_create_bits_no_clear(pixman_format(format), - width, height, - data, pitch); - state->dst = wld_map(state->drawable); - } - else if ((drm_buffer = swc_drm_buffer_get(resource))) + if ((drm_buffer = swc_drm_buffer_get(resource))) { if (!(state = malloc(sizeof *state))) return; - state->drawable = drm_buffer->drawable; - state->src = NULL; - state->dst = NULL; + state->buffer = drm_buffer->wld; } else { @@ -249,18 +199,6 @@ static void renderer_attach(struct swc_surface * surface, static void renderer_flush_surface(struct swc_surface * surface) { - struct buffer_state * state; - - state = buffer_state(surface->state.buffer); - assert(state); - - if (!state->src || !state->dst) - return; - - pixman_image_set_clip_region32(state->src, &surface->state.damage); - pixman_image_composite32(PIXMAN_OP_SRC, state->src, NULL, state->dst, - 0, 0, 0, 0, 0, 0, - state->drawable->width, state->drawable->height); } /* }}} */ @@ -636,13 +574,13 @@ static void repaint_output(struct swc_compositor * compositor, pixman_region32_init(&base_damage); pixman_region32_subtract(&base_damage, damage, &compositor->opaque); - target.drawable = swc_plane_get_buffer(&output->framebuffer_plane); + target.buffer = swc_plane_get_buffer(&output->framebuffer_plane); target.geometry.x = output->framebuffer_plane.output->geometry.x + output->framebuffer_plane.x; target.geometry.y = output->framebuffer_plane.output->geometry.y + output->framebuffer_plane.y; - target.geometry.width = target.drawable->width; - target.geometry.height = target.drawable->height; + target.geometry.width = target.buffer->width; + target.geometry.height = target.buffer->height; renderer_repaint(&target, damage, &base_damage, &compositor->surfaces); @@ -778,26 +716,6 @@ static void handle_drm_event(struct wl_listener * listener, void * data) } } -static void handle_pointer_event(struct wl_listener * listener, void * data) -{ - struct swc_event * event = data; - struct swc_pointer_event_data * event_data = event->data; - struct swc_compositor * compositor; - - compositor = CONTAINER_OF(listener, typeof(*compositor), pointer_listener); - - switch (event->type) - { - case SWC_POINTER_CURSOR_CHANGED: - if (event_data->old) - swc_surface_set_view(event_data->old, NULL); - - if (event_data->new) - swc_surface_set_view(event_data->new, &compositor->cursor_view); - break; - } -} - static void handle_terminate(uint32_t time, uint32_t value, void * data) { struct wl_display * display = data; @@ -873,10 +791,8 @@ bool swc_compositor_initialize(struct swc_compositor * compositor, compositor->display = display; compositor->drm_listener.notify = &handle_drm_event; - compositor->pointer_listener.notify = &handle_pointer_event; compositor->scheduled_updates = 0; compositor->pending_flips = 0; - swc_view_initialize(&compositor->cursor_view, &swc_cursor_view_impl); compositor->pointer_handler = (struct swc_pointer_handler) { .focus = &handle_focus, .motion = &handle_motion diff --git a/libswc/compositor.h b/libswc/compositor.h @@ -29,12 +29,9 @@ struct swc_compositor uint32_t scheduled_updates; }; - struct swc_view cursor_view; - struct swc_pointer_handler pointer_handler; struct wl_listener drm_listener; - struct wl_listener pointer_listener; }; bool swc_compositor_initialize(struct swc_compositor * compositor, diff --git a/libswc/cursor_surface.c b/libswc/cursor_surface.c @@ -1,114 +0,0 @@ -/* swc: cursor_surface.c - * - * Copyright (c) 2013 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#include "cursor_surface.h" -#include "compositor.h" -#include "output.h" -#include "plane.h" - -#include <string.h> -#include <wld/wld.h> - -/* Cursor view */ -static const uint32_t cursor_buffer_size = 64 * 64 * 4; - -static void update_plane(struct swc_plane * plane, void * data) -{ - struct wld_drawable * drawable = swc_plane_get_buffer(plane); - - wld_write(drawable, data, cursor_buffer_size); - swc_plane_flip(plane); -} - -static void attach(struct swc_surface * surface, - struct wl_resource * resource) -{ - struct swc_compositor * compositor = CONTAINER_OF - (surface->view, typeof(*compositor), cursor_view); - - if (pixman_region32_not_empty(&surface->state.damage)) - { - struct wl_shm_buffer * buffer = wl_shm_buffer_get(resource); - uint32_t width, height; - - if (!buffer) - return; - - width = wl_shm_buffer_get_width(buffer); - height = wl_shm_buffer_get_height(buffer); - - if (width <= 64 && height <= 64) - { - struct swc_output * output; - char data[cursor_buffer_size]; - - memset(data, 0, sizeof data); - pixman_blt(wl_shm_buffer_get_data(buffer), (uint32_t *) data, - wl_shm_buffer_get_stride(buffer) >> 2, 64, 32, 32, - 0, 0, 0, 0, width, height); - wl_buffer_send_release(resource); - pixman_region32_clear(&surface->state.damage); - - wl_list_for_each(output, &compositor->outputs, link) - { - if (swc_rectangle_overlap(&output->geometry, - &surface->geometry)) - { - update_plane(&output->cursor_plane, data); - } - } - } - } -} - -static void update(struct swc_surface * surface) -{ - swc_surface_send_frame_callbacks(surface, swc_time()); -} - -static void move(struct swc_surface * surface, int32_t x, int32_t y) -{ - struct swc_compositor * compositor = CONTAINER_OF - (surface->view, typeof(*compositor), cursor_view); - struct swc_output * output; - - surface->geometry.x = x; - surface->geometry.y = y; - - wl_list_for_each(output, &compositor->outputs, link) - { - if (swc_rectangle_overlap(&output->geometry, &surface->geometry)) - { - swc_plane_move(&output->cursor_plane, - surface->geometry.x - output->geometry.x, - surface->geometry.y - output->geometry.y); - } - } -} - -const struct swc_view_impl swc_cursor_view_impl = { - .attach = &attach, - .update = &update, - .move = &move -}; - diff --git a/libswc/cursor_surface.h b/libswc/cursor_surface.h @@ -1,32 +0,0 @@ -/* swc: cursor_surface.h - * - * Copyright (c) 2013 Michael Forney - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef SWC_CURSOR_SURFACE_H -#define SWC_CURSOR_SURFACE_H - -#include "view.h" - -extern const struct swc_view_impl swc_cursor_view_impl; - -#endif - diff --git a/libswc/drm.c b/libswc/drm.c @@ -72,16 +72,17 @@ static void create_buffer(struct wl_client * client, uint32_t name, int32_t width, int32_t height, uint32_t stride, uint32_t format) { - struct wld_drawable * drawable; + struct wld_buffer * wld; struct swc_drm_buffer * buffer; + union wld_object object = { .u32 = name }; - drawable = wld_drm_import_gem(swc.drm->context, width, height, format, - name, stride); + wld = wld_import_buffer(swc.drm->context, WLD_DRM_OBJECT_GEM_NAME, object, + width, height, format, stride); - if (!drawable) + if (!wld) goto error0; - buffer = swc_drm_buffer_new(client, id, drawable); + buffer = swc_drm_buffer_new(client, id, wld); if (!buffer) goto error1; @@ -89,7 +90,7 @@ static void create_buffer(struct wl_client * client, return; error1: - wld_destroy_drawable(drawable); + wld_destroy_buffer(wld); error0: wl_resource_post_no_memory(resource); } @@ -114,17 +115,18 @@ static void create_prime_buffer(struct wl_client * client, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2) { - struct wld_drawable * drawable; + struct wld_buffer * wld; struct swc_drm_buffer * buffer; + union wld_object object = { .i = fd }; - drawable = wld_drm_import(swc.drm->context, width, height, format, - fd, stride0); + wld = wld_import_buffer(swc.drm->context, WLD_DRM_OBJECT_PRIME_FD, object, + width, height, format, stride0); close(fd); - if (!drawable) + if (!wld) goto error0; - buffer = swc_drm_buffer_new(client, id, drawable); + buffer = swc_drm_buffer_new(client, id, wld); if (!buffer) goto error1; @@ -132,7 +134,7 @@ static void create_prime_buffer(struct wl_client * client, return; error1: - wld_destroy_drawable(drawable); + wld_destroy_buffer(wld); error0: wl_resource_post_no_memory(resource); } @@ -350,13 +352,19 @@ bool swc_drm_initialize(const char * seat_name) goto error2; } + if (!(swc.drm->renderer = wld_create_renderer(swc.drm->context))) + { + ERROR("Could not create WLD DRM renderer\n"); + goto error3; + } + drm.global = wl_global_create(swc.display, &wl_drm_interface, 2, NULL, &bind_drm); if (!drm.global) { ERROR("Could not create wl_drm global\n"); - goto error3; + goto error4; } drm.event_source = wl_event_loop_add_fd @@ -365,15 +373,17 @@ bool swc_drm_initialize(const char * seat_name) if (!drm.event_source) { ERROR("Could not create DRM event source\n"); - goto error4; + goto error5; } return true; - error4: + error5: wl_global_destroy(drm.global); + error4: + wld_destroy_renderer(swc.drm->renderer); error3: - wld_drm_destroy_context(swc.drm->context); + wld_destroy_context(swc.drm->context); error2: close(swc.drm->fd); error1: @@ -386,7 +396,8 @@ void swc_drm_finalize() { wl_event_source_remove(drm.event_source); wl_global_destroy(drm.global); - wld_drm_destroy_context(swc.drm->context); + wld_destroy_renderer(swc.drm->renderer); + wld_destroy_context(swc.drm->context); free(drm.path); close(swc.drm->fd); } diff --git a/libswc/drm.h b/libswc/drm.h @@ -19,7 +19,8 @@ struct swc_drm_event_data struct swc_drm { int fd; - struct wld_drm_context * context; + struct wld_context * context; + struct wld_renderer * renderer; struct wl_signal event_signal; }; diff --git a/libswc/drm_buffer.c b/libswc/drm_buffer.c @@ -45,7 +45,7 @@ static void buffer_destroy(struct wl_resource * resource) } struct swc_drm_buffer * swc_drm_buffer_new - (struct wl_client * client, uint32_t id, struct wld_drawable * drawable) + (struct wl_client * client, uint32_t id, struct wld_buffer * wld) { struct swc_drm_buffer * buffer; @@ -57,7 +57,7 @@ struct swc_drm_buffer * swc_drm_buffer_new buffer->resource = wl_resource_create(client, &wl_buffer_interface, 1, id); wl_resource_set_implementation(buffer->resource, &drm_buffer_implementation, buffer, &buffer_destroy); - buffer->drawable = drawable; + buffer->wld = wld; return buffer; } diff --git a/libswc/drm_buffer.h b/libswc/drm_buffer.h @@ -31,11 +31,11 @@ struct wl_client; struct swc_drm_buffer { struct wl_resource * resource; - struct wld_drawable * drawable; + struct wld_buffer * wld; }; struct swc_drm_buffer * swc_drm_buffer_new - (struct wl_client * client, uint32_t id, struct wld_drawable * drawable); + (struct wl_client * client, uint32_t id, struct wld_buffer * wld); struct swc_drm_buffer * swc_drm_buffer_get(struct wl_resource * resource); diff --git a/libswc/local.mk b/libswc/local.mk @@ -35,7 +35,6 @@ SWC_SOURCES = \ libswc/output.c \ libswc/plane.c \ libswc/surface.c \ - libswc/cursor_surface.c \ libswc/region.c \ libswc/input_focus.c \ libswc/keyboard.c \ diff --git a/libswc/plane.c b/libswc/plane.c @@ -35,56 +35,54 @@ struct framebuffer { - struct wld_drawable * drawable; - uint32_t fb_id; + struct wld_buffer * buffer; + uint32_t id; }; static bool framebuffer_initialize(struct swc_plane * plane) { - struct framebuffer * buffer - = swc_double_buffer_front(&plane->double_buffer); + struct framebuffer * fb = swc_double_buffer_front(&plane->double_buffer); return drmModeSetCrtc(swc.drm->fd, plane->output->crtc_id, - buffer->fb_id, 0, 0, &plane->output->connector_id, 1, + fb->id, 0, 0, &plane->output->connector_id, 1, &plane->output->current_mode->info) == 0; } static void * framebuffer_create_buffer(struct swc_plane * plane) { - struct wld_drawable * drawable; + struct wld_buffer * buffer; struct swc_output * output = plane->output; - struct framebuffer * buffer; - uint32_t handle; + struct framebuffer * fb; + union wld_object object; - if (!(buffer = malloc(sizeof *buffer))) + if (!(fb = malloc(sizeof *fb))) goto error0; - drawable = wld_drm_create_drawable(swc.drm->context, - output->geometry.width, - output->geometry.height, - WLD_FORMAT_XRGB8888); + buffer = wld_create_buffer(swc.drm->context, + output->geometry.width, output->geometry.height, + WLD_FORMAT_XRGB8888); - if (!drawable) + if (!buffer) { - fprintf(stderr, "Could not create DRM drawable for framebuffer\n"); + fprintf(stderr, "Could not create DRM buffer for framebuffer\n"); goto error1; } - handle = wld_drm_get_handle(drawable); + wld_export(buffer, WLD_DRM_OBJECT_HANDLE, &object); - if (drmModeAddFB(swc.drm->fd, drawable->width, drawable->height, - 24, 32, drawable->pitch, handle, &buffer->fb_id) != 0) + if (drmModeAddFB(swc.drm->fd, buffer->width, buffer->height, + 24, 32, buffer->pitch, object.u32, &fb->id) != 0) { fprintf(stderr, "drmModeAddFB failed\n"); goto error2; } - buffer->drawable = drawable; + fb->buffer = buffer; return buffer; error2: - wld_destroy_drawable(drawable); + wld_destroy_buffer(buffer); error1: free(buffer); error0: @@ -93,25 +91,25 @@ static void * framebuffer_create_buffer(struct swc_plane * plane) static void framebuffer_destroy_buffer(struct swc_plane * plane, void * data) { - struct framebuffer * buffer = data; + struct framebuffer * fb = data; - drmModeRmFB(swc.drm->fd, buffer->fb_id); - wld_destroy_drawable(buffer->drawable); + drmModeRmFB(swc.drm->fd, fb->id); + wld_destroy_buffer(fb->buffer); } -static struct wld_drawable * framebuffer_get_buffer(void * data) +static struct wld_buffer * framebuffer_get_buffer(void * data) { - struct framebuffer * buffer = data; + struct framebuffer * fb = data; - return buffer->drawable; + return fb->buffer; } static bool framebuffer_flip(struct swc_plane * plane) { struct swc_output * output = plane->output; - struct framebuffer * buffer = swc_double_buffer_back(&plane->double_buffer); + struct framebuffer * fb = swc_double_buffer_back(&plane->double_buffer); - return drmModePageFlip(swc.drm->fd, output->crtc_id, buffer->fb_id, + return drmModePageFlip(swc.drm->fd, output->crtc_id, fb->id, DRM_MODE_PAGE_FLIP_EVENT, output) == 0; } @@ -130,30 +128,29 @@ static bool cursor_initialize(struct swc_plane * plane) static void * cursor_create_buffer(struct swc_plane * plane) { - return wld_drm_create_drawable(swc.drm->context, 64, 64, - WLD_FORMAT_ARGB8888); + return wld_create_buffer(swc.drm->context, 64, 64, WLD_FORMAT_ARGB8888); } static void cursor_destroy_buffer(struct swc_plane * plane, void * data) { - struct wld_drawable * drawable = data; + struct wld_buffer * buffer = data; - wld_destroy_drawable(drawable); + wld_destroy_buffer(buffer); } -static struct wld_drawable * cursor_get_buffer(void * data) +static struct wld_buffer * cursor_get_buffer(void * data) { return data; } static bool cursor_flip(struct swc_plane * plane) { - struct wld_drawable * drawable - = swc_double_buffer_back(&plane->double_buffer); - int handle = wld_drm_get_handle(drawable); + struct wld_buffer * buffer = swc_double_buffer_back(&plane->double_buffer); + union wld_object object; + wld_export(buffer, WLD_DRM_OBJECT_HANDLE, &object); return drmModeSetCursor(swc.drm->fd, plane->output->crtc_id, - handle, 64, 64) == 0; + object.u32, 64, 64) == 0; } static bool cursor_move(struct swc_plane * plane, int32_t x, int32_t y) @@ -216,7 +213,7 @@ bool swc_plane_move(struct swc_plane * plane, int32_t x, int32_t y) return false; } -struct wld_drawable * swc_plane_get_buffer(struct swc_plane * plane) +struct wld_buffer * swc_plane_get_buffer(struct swc_plane * plane) { void * back = swc_double_buffer_back(&plane->double_buffer); diff --git a/libswc/plane.h b/libswc/plane.h @@ -33,7 +33,7 @@ struct swc_plane_interface bool (* initialize)(struct swc_plane * plane); void * (* create_buffer)(struct swc_plane * plane); void (* destroy_buffer)(struct swc_plane * plane, void * data); - struct wld_drawable * (* get_buffer)(void * data); + struct wld_buffer * (* get_buffer)(void * data); bool (* flip)(struct swc_plane * plane); bool (* move)(struct swc_plane * plane, int32_t x, int32_t y); }; @@ -57,7 +57,7 @@ bool swc_plane_flip(struct swc_plane * plane); bool swc_plane_move(struct swc_plane * plane, int32_t x, int32_t y); -struct wld_drawable * swc_plane_get_buffer(struct swc_plane * plane); +struct wld_buffer * swc_plane_get_buffer(struct swc_plane * plane); extern const struct swc_plane_interface swc_framebuffer_plane; extern const struct swc_plane_interface swc_cursor_plane; diff --git a/libswc/surface.c b/libswc/surface.c @@ -255,8 +255,8 @@ static void commit(struct wl_client * client, struct wl_resource * resource) } else if ((drm_buffer = swc_drm_buffer_get(surface->state.buffer))) { - set_size(surface, drm_buffer->drawable->width, - drm_buffer->drawable->height); + set_size(surface, + drm_buffer->wld->width, drm_buffer->wld->height); } else WARNING("Unknown buffer type attached\n"); diff --git a/libswc/swc.c b/libswc/swc.c @@ -61,8 +61,6 @@ static void setup_compositor() swc.seat->pointer->handler = &compositor.pointer_handler; wl_signal_add(&swc.seat->pointer->focus.event_signal, swc_window_enter_listener); - wl_signal_add(&swc.seat->pointer->event_signal, - &compositor.pointer_listener); /* Calculate pointer region */ pixman_region32_init(&pointer_region);