[PATCH] compositor-headless: Report a more realistic physical size

Pekka Paalanen ppaalanen at gmail.com
Mon Jul 2 14:22:38 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

> 
> 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;

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180702/3dc060de/attachment.sig>


More information about the wayland-devel mailing list