x11-backend: Add a --scale option
authorJason Ekstrand <jason@jlekstrand.net>
Fri, 7 Mar 2014 21:29:14 +0000 (15:29 -0600)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 10 Mar 2014 20:29:40 +0000 (13:29 -0700)
man/weston.man
src/compositor-x11.c

index f2d1b4c..fd1c7a5 100644 (file)
@@ -186,6 +186,10 @@ X windows to emulate the same number of outputs.
 Make the default size of each X window
 .IR W x H " pixels."
 .TP
+.B \-\-scale\fR=\fIN\fR
+Give all outputs a scale factor of
+.I N.
+.TP
 .B \-\-use\-pixman
 Use the pixman renderer.  By default weston will try to use EGL and
 GLES2 for rendering.  Passing this option will make weston use the
index 6b5eb64..bb4ac9f 100644 (file)
@@ -56,6 +56,7 @@
 
 static int option_width;
 static int option_height;
+static int option_scale;
 static int option_count;
 
 struct x11_compositor {
@@ -602,8 +603,8 @@ x11_output_wait_for_map(struct x11_compositor *c, struct x11_output *output)
                        if (configure_notify->width % output->scale != 0 ||
                            configure_notify->height % output->scale != 0)
                                weston_log("Resolution is not a multiple of screen size, rounding\n");
-                       output->mode.width = configure_notify->width / output->scale;
-                       output->mode.height = configure_notify->height / output->scale;
+                       output->mode.width = configure_notify->width;
+                       output->mode.height = configure_notify->height;
                        configured = 1;
                        break;
                }
@@ -1478,7 +1479,7 @@ x11_compositor_create(struct wl_display *display,
        struct weston_config_section *section;
        xcb_screen_iterator_t s;
        int i, x = 0, output_count = 0;
-       int width, height, count, scale;
+       int width, height, scale, count;
        const char *section_name;
        char *name, *t, *mode;
        uint32_t transform;
@@ -1534,6 +1535,7 @@ x11_compositor_create(struct wl_display *display,
 
        width = option_width ? option_width : 1024;
        height = option_height ? option_height : 640;
+       scale = option_scale ? option_scale : 1;
        count = option_count ? option_count : 1;
 
        section = NULL;
@@ -1586,7 +1588,7 @@ x11_compositor_create(struct wl_display *display,
        for (i = output_count; i < count; i++) {
                output = x11_compositor_create_output(c, x, 0, width, height,
                                                      fullscreen, no_input, NULL,
-                                                     WL_OUTPUT_TRANSFORM_NORMAL, 1);
+                                                     WL_OUTPUT_TRANSFORM_NORMAL, scale);
                if (output == NULL)
                        goto err_x11_input;
                x = pixman_region32_extents(&output->base.region)->x2;
@@ -1623,6 +1625,7 @@ backend_init(struct wl_display *display, int *argc, char *argv[],
        const struct weston_option x11_options[] = {
                { WESTON_OPTION_INTEGER, "width", 0, &option_width },
                { WESTON_OPTION_INTEGER, "height", 0, &option_height },
+               { WESTON_OPTION_INTEGER, "scale", 0, &option_scale },
                { WESTON_OPTION_BOOLEAN, "fullscreen", 'f', &fullscreen },
                { WESTON_OPTION_INTEGER, "output-count", 0, &option_count },
                { WESTON_OPTION_BOOLEAN, "no-input", 0, &no_input },