}
static void
+drm_output_attach_surface(void *o, pepper_object_t *surface, int *w, int *h)
+{
+ pepper_renderer_attach_surface(((drm_output_t *)o)->renderer, surface, w, h);
+}
+
+static void
drm_output_add_frame_listener(void *o, struct wl_listener *listener)
{
drm_output_t *output = (drm_output_t *)o;
drm_output_set_mode,
drm_output_repaint,
+ drm_output_attach_surface,
drm_output_add_frame_listener,
};
}
static void
+fbdev_output_attach_surface(void *o, pepper_object_t *surface, int *w, int *h)
+{
+ pepper_renderer_attach_surface(((fbdev_output_t *)o)->renderer, surface, w, h);
+}
+
+static void
fbdev_output_add_frame_listener(void *o, struct wl_listener *listener)
{
fbdev_output_t *output = (fbdev_output_t *)o;
fbdev_output_set_mode,
fbdev_output_repaint,
+ fbdev_output_attach_surface,
fbdev_output_add_frame_listener,
};
int32_t w, h;
};
+pepper_buffer_t *
+pepper_buffer_from_resource(struct wl_resource *resource);
+
struct pepper_surface_state
{
pepper_buffer_t *buffer;
void
pepper_region_destroy(pepper_region_t *region);
-pepper_buffer_t *
-pepper_buffer_from_resource(struct wl_resource *resource);
-
/* Input */
struct pepper_seat
{
void (*repaint)(void *output,
const pepper_list_t *view_list, const pixman_region32_t *damage);
+ void (*attach_surface)(void *output, pepper_object_t *surface, int *w, int *h);
void (*add_frame_listener)(void *output, struct wl_listener *listener);
};
static void
attach_surface_to_outputs(pepper_surface_t *surface)
{
- /* TODO: */
+ pepper_output_t *output;
+ int w, h;
+
+ wl_list_for_each(output, &surface->compositor->output_list, link)
+ {
+ output->interface->attach_surface(output->data, &surface->base, &w, &h);
+
+ surface->buffer.buffer->w = w;
+ surface->buffer.buffer->h = h;
+ }
}
void
}
static void
+wayland_output_attach_surface(void *o, pepper_object_t *surface, int *w, int *h)
+{
+ pepper_renderer_attach_surface(((wayland_output_t *)o)->renderer, surface, w, h);
+}
+
+static void
wayland_output_add_frame_listener(void *o, struct wl_listener *listener)
{
wayland_output_t *output = o;
wayland_output_set_mode,
wayland_output_repaint,
+ wayland_output_attach_surface,
wayland_output_add_frame_listener,
};
}
static void
+x11_output_attach_surface(void *o, pepper_object_t *surface, int *w, int *h)
+{
+ pepper_renderer_attach_surface(((x11_output_t *)o)->renderer, surface, w, h);
+}
+
+static void
x11_output_add_frame_listener(void *o, struct wl_listener *listener)
{
x11_output_t *output = o;
x11_output_set_mode,
x11_output_repaint,
+ x11_output_attach_surface,
x11_output_add_frame_listener,
};