compositor: Add flags parameter to wlsc_output_init
authorBenjamin Franzke <benjaminfranzke@googlemail.com>
Fri, 18 Feb 2011 15:51:37 +0000 (16:51 +0100)
committerBenjamin Franzke <benjaminfranzke@googlemail.com>
Tue, 1 Mar 2011 15:21:01 +0000 (16:21 +0100)
Currently available flags:
 - WL_OUTPUT_FLIPPED

compositor/compositor-drm.c
compositor/compositor-wayland.c
compositor/compositor-x11.c
compositor/compositor.c
compositor/compositor.h

index 83fc744..806afc6 100644 (file)
@@ -208,7 +208,7 @@ create_output_for_connector(struct drm_compositor *ec,
 
        memset(output, 0, sizeof *output);
        wlsc_output_init(&output->base, &ec->base, 0, 0,
-                        mode->hdisplay, mode->vdisplay);
+                        mode->hdisplay, mode->vdisplay, 0);
 
        output->crtc_id = resources->crtcs[i];
        output->connector_id = connector->connector_id;
index 11320d8..1793089 100644 (file)
@@ -233,7 +233,7 @@ wayland_compositor_create_output(struct wayland_compositor *c,
                return -1;
        memset(output, 0, sizeof *output);
 
-       wlsc_output_init(&output->base, &c->base, 0, 0, width, height);
+       wlsc_output_init(&output->base, &c->base, 0, 0, width, height, 0);
        output->parent.surface =
                wl_compositor_create_surface(c->parent.compositor);
        wl_surface_set_user_data(output->parent.surface, output);
index f4cb129..27b7cd9 100644 (file)
@@ -363,7 +363,7 @@ x11_compositor_create_output(struct x11_compositor *c, int width, int height)
                return -1;
 
        memset(output, 0, sizeof *output);
-       wlsc_output_init(&output->base, &c->base, 0, 0, width, height);
+       wlsc_output_init(&output->base, &c->base, 0, 0, width, height, 0);
 
        values[1] = c->null_cursor;
        output->window = xcb_generate_id(c->conn);
index 2fcbb70..e3989d5 100644 (file)
@@ -1288,8 +1288,10 @@ init_shaders(struct wlsc_compositor *ec)
 
 void
 wlsc_output_init(struct wlsc_output *output, struct wlsc_compositor *c,
-                int x, int y, int width, int height)
+                int x, int y, int width, int height, uint32_t flags)
 {
+       int flip;
+
        output->compositor = c;
        output->x = x;
        output->y = y;
@@ -1305,8 +1307,11 @@ wlsc_output_init(struct wlsc_output *output, struct wlsc_compositor *c,
        wlsc_matrix_translate(&output->matrix,
                              -output->x - output->width / 2.0,
                              -output->y - output->height / 2.0, 0);
+
+       flip = (flags & WL_OUTPUT_FLIPPED) ? -1 : 1;
        wlsc_matrix_scale(&output->matrix,
-                         2.0 / output->width, 2.0 / output->height, 1);
+                         2.0 / output->width,
+                         flip * 2.0 / output->height, 1);
 
        output->object.interface = &wl_output_interface;
        wl_display_add_object(c->wl_display, &output->object);
index b0901e8..1279e76 100644 (file)
@@ -130,6 +130,10 @@ struct wlsc_compositor {
 #define MODIFIER_ALT   (1 << 9)
 #define MODIFIER_SUPER (1 << 10)
 
+enum wlsc_output_flags {
+       WL_OUTPUT_FLIPPED = 0x01
+};
+
 struct wlsc_vector {
        GLfloat f[4];
 };
@@ -215,7 +219,7 @@ int
 wlsc_compositor_init(struct wlsc_compositor *ec, struct wl_display *display);
 void
 wlsc_output_init(struct wlsc_output *output, struct wlsc_compositor *c,
-                int x, int y, int width, int height);
+                int x, int y, int width, int height, uint32_t flags);
 void
 wlsc_input_device_init(struct wlsc_input_device *device,
                       struct wlsc_compositor *ec);