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;
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);
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);
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;
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);
#define MODIFIER_ALT (1 << 9)
#define MODIFIER_SUPER (1 << 10)
+enum wlsc_output_flags {
+ WL_OUTPUT_FLIPPED = 0x01
+};
+
struct wlsc_vector {
GLfloat f[4];
};
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);