[PATCH] compositor-headless: Report a more realistic physical size
Simon Ser
contact at emersion.fr
Mon Jul 2 14:29:48 UTC 2018
> On Thu, 12 Apr 2018 09:31:48 +0200
> Johan Klokkhammer Helsing <johan.helsing at qt.io> wrote:
>
> > Some clients rely on the physical size to determine the physical DPI. With the
> > previous implementation, we would report 1px==1mm, which is a DPI of 25.4,
> > which is incredibly low.
> >
> > The problem is solved by setting a physical size so the DPI is close to 72
> > instead. If the output is scaled, the DPI is set to the corresponding multiple
> > of 72.
> >
> > This makes the headless backend more usable for automated testing of DPI
> > sensitive functionality such as point sized fonts.
> >
> > Signed-off-by: Johan Klokkhammer Helsing <johan.helsing at qt.io>
> > ---
> > libweston/compositor-headless.c | 16 ++++++++++++----
> > 1 file changed, 12 insertions(+), 4 deletions(-)
>
> Hi,
>
> this is a good idea, but could you rebase this patch to master?
>
>
> Thanks,
> pq
Hi,
Would it make sense to change the protocol to allow compositors to send a zero
physical size in case it isn't relevant?
> >
> > diff --git a/libweston/compositor-headless.c b/libweston/compositor-headless.c
> > index 9307a36a..9f1a1a72 100644
> > --- a/libweston/compositor-headless.c
> > +++ b/libweston/compositor-headless.c
> > @@ -180,12 +180,19 @@ err_malloc:
> > return -1;
> > }
> >
> > +static int
> > +physical_size_for_dpi(int pixels, int dpi)
> > +{
> > + static const float mm_per_inch = 25.4;
> > + return pixels * mm_per_inch / dpi;
> > +}
> > +
> > static int
> > headless_output_set_size(struct weston_output *base,
> > int width, int height)
> > {
> > struct headless_output *output = to_headless_output(base);
> > - int output_width, output_height;
> > + int output_width, output_height, output_dpi;
> >
> > /* We can only be called once. */
> > assert(!output->base.current_mode);
> > @@ -207,9 +214,10 @@ headless_output_set_size(struct weston_output *base,
> > output->base.make = "weston";
> > output->base.model = "headless";
> >
> > - /* XXX: Calculate proper size. */
> > - output->base.mm_width = width;
> > - output->base.mm_height = height;
> > + /* XXX: Make this configurable */
> > + output_dpi = 72 * output->base.scale;
> > + output->base.mm_width = physical_size_for_dpi(output_width, output_dpi);
> > + output->base.mm_height = physical_size_for_dpi(output_height, output_dpi);
> >
> > output->base.start_repaint_loop = headless_output_start_repaint_loop;
> > output->base.repaint = headless_output_repaint;
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list