for (i = 0; i < count; i++) {
ec->pointer_buffers[i] =
wlsc_drm_buffer_create(ec, width, height,
- &ec->argb_visual);
+ &ec->compositor.argb_visual);
glEGLImageTargetTexture2DOES(GL_TEXTURE_2D,
ec->pointer_buffers[i]->image);
texture_from_png(pointer_images[i].filename, width, height);
GLenum format;
background = wlsc_surface_create(output->compositor,
- &output->compositor->rgb_visual,
+ &output->compositor->compositor.rgb_visual,
output->x, output->y,
output->width, output->height);
if (background == NULL)
glUniformMatrix4fv(ec->proj_uniform, 1, GL_FALSE, tmp.d);
glUniform1i(ec->tex_uniform, 0);
- if (es->visual == &ec->argb_visual) {
+ if (es->visual == &ec->compositor.argb_visual) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
- } else if (es->visual == &ec->premultiplied_argb_visual) {
+ } else if (es->visual == &ec->compositor.premultiplied_argb_visual) {
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
} else {
wl_display_add_object(ec->wl_display, &device->input_device.object);
wl_display_add_global(ec->wl_display, &device->input_device.object, NULL);
- device->sprite = wlsc_surface_create(ec, &ec->argb_visual,
+ device->sprite = wlsc_surface_create(ec, &ec->compositor.argb_visual,
device->input_device.x,
device->input_device.y, 32, 32);
device->hotspot_x = 16;
return 0;
}
-static void
-add_visuals(struct wlsc_compositor *ec)
-{
- ec->argb_visual.object.interface = &wl_visual_interface;
- ec->argb_visual.object.implementation = NULL;
- wl_display_add_object(ec->wl_display, &ec->argb_visual.object);
- wl_display_add_global(ec->wl_display, &ec->argb_visual.object, NULL);
-
- ec->premultiplied_argb_visual.object.interface = &wl_visual_interface;
- ec->premultiplied_argb_visual.object.implementation = NULL;
- wl_display_add_object(ec->wl_display,
- &ec->premultiplied_argb_visual.object);
- wl_display_add_global(ec->wl_display,
- &ec->premultiplied_argb_visual.object, NULL);
-
- ec->rgb_visual.object.interface = &wl_visual_interface;
- ec->rgb_visual.object.implementation = NULL;
- wl_display_add_object(ec->wl_display, &ec->rgb_visual.object);
- wl_display_add_global(ec->wl_display, &ec->rgb_visual.object, NULL);
-}
-
void
wlsc_output_init(struct wlsc_output *output, struct wlsc_compositor *c,
int x, int y, int width, int height)
ec->wl_display = display;
- ec->compositor.object.interface = &wl_compositor_interface;
- ec->compositor.object.implementation =
- (void (**)(void)) &compositor_interface;
-
- wl_display_add_object(display, &ec->compositor.object);
- if (wl_display_add_global(display, &ec->compositor.object, NULL))
- return -1;
+ wl_compositor_init(&ec->compositor, &compositor_interface, display);
wlsc_shm_init(ec);
if (wl_display_add_global(display, &ec->shell.object, NULL))
return -1;
- add_visuals(ec);
-
wl_list_init(&ec->surface_list);
wl_list_init(&ec->input_device_list);
wl_list_init(&ec->output_list);
return 0;
}
+
+WL_EXPORT int
+wl_compositor_init(struct wl_compositor *compositor,
+ const struct wl_compositor_interface *interface,
+ struct wl_display *display)
+{
+ 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))
+ 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);
+ wl_display_add_global(display, &compositor->argb_visual.object, NULL);
+
+ compositor->premultiplied_argb_visual.object.interface =
+ &wl_visual_interface;
+ compositor->premultiplied_argb_visual.object.implementation = NULL;
+ wl_display_add_object(display,
+ &compositor->premultiplied_argb_visual.object);
+ wl_display_add_global(display,
+ &compositor->premultiplied_argb_visual.object,
+ NULL);
+
+ compositor->rgb_visual.object.interface = &wl_visual_interface;
+ compositor->rgb_visual.object.implementation = NULL;
+ wl_display_add_object(display,
+ &compositor->rgb_visual.object);
+ wl_display_add_global(display,
+ &compositor->rgb_visual.object, NULL);
+
+ return 0;
+}
void wl_client_post_no_memory(struct wl_client *client);
void wl_client_post_global(struct wl_client *client, struct wl_object *object);
+struct wl_visual {
+ struct wl_object object;
+};
+
struct wl_compositor {
struct wl_object object;
+ struct wl_visual argb_visual;
+ struct wl_visual premultiplied_argb_visual;
+ struct wl_visual rgb_visual;
};
struct wl_resource {
struct wl_object object;
};
-struct wl_visual {
- struct wl_object object;
-};
-
struct wl_grab;
struct wl_grab_interface {
void (*motion)(struct wl_grab *grab,
struct wl_surface *surface,
uint32_t time);
+int
+wl_compositor_init(struct wl_compositor *compositor,
+ const struct wl_compositor_interface *interface,
+ struct wl_display *display);
#ifdef __cplusplus
}