[PATCH resent] Option to use DPI calculated from EDID

Guillem Jover guillem at hadrons.org
Sun Jan 3 15:26:10 PST 2016


Hi!

On Mon, 2011-10-31 at 13:16:21 +0100, Michal Suchanek wrote:
> It adds back functionality lost a few years ago which makes X
> needlessly hard to use on devices that report correct DPI and aren't
> 96 DPI which is the value unconditionally set since commit fff00d

This affected me recently too when setting up a new laptop, quite
annoying. Here's a quick review.

> From 33a200fa5b670a9e479e8d9be533ec1112867213 Mon Sep 17 00:00:00 2001
> From: Michal Suchanek <hramrach at centrum.cz>
> Date: Sat, 24 Sep 2011 18:46:29 +0200
> Subject: [PATCH] Add option to set default DPI
> 
>  The default DPI can be either specified as fixed value or 'auto'
>  meaning DDC is used when available.
> 
>  Based on patch by Nick Bowler

> Index: xserver/hw/xfree86/common/xf86Config.c
> ===================================================================
> --- xserver.orig/hw/xfree86/common/xf86Config.c	2011-10-11 18:58:07.000000000 +0200
> +++ xserver/hw/xfree86/common/xf86Config.c	2011-10-11 18:59:40.000000000 +0200
> @@ -880,6 +883,15 @@
>  	}
>      }
>  
> +
> +    xf86Info.defaultDPI = DEFAULT_DPI;
> +    if ((s = xf86GetOptValString(FlagOptions, FLAG_DEFAULT_DPI))) {
> +	if (!xf86NameCmp(s, "auto")) {
> +	    xf86Info.defaultDPI = 0;
> +	} else {
> +	    xf86Info.defaultDPI = strtoul(s, NULL, 0);

This does not check for parsing errors.

> +	}
> +    }
>  #ifdef RANDR
>      xf86Info.disableRandR = FALSE;
>      xf86Info.randRFrom = X_DEFAULT;
> Index: xserver/hw/xfree86/man/xorg.conf.man
> ===================================================================
> --- xserver.orig/hw/xfree86/man/xorg.conf.man	2011-10-10 17:52:26.000000000 +0200
> +++ xserver/hw/xfree86/man/xorg.conf.man	2011-10-11 18:59:40.000000000 +0200
> @@ -544,6 +544,12 @@
>  and are passed to clients.
>  Default: off.
>  .TP 7
> +.BI "Option \*qDefaultDPI\*q  \*q" string \*q
> +This option allows to set a fixed DPI which is reported for all screens or the

"allows to" is not correct, I guess either "makes it possible to" or
some sentence rewording to avoid the usage.

> +special value \*qauto\*q which infers DPI from screen size read from DDC. The
> +fallback in case DDC reading fails is 96.
> +Default: 96.
> +.TP 7
>  .BI "Option \*qDisableVidModeExtension\*q  \*q" boolean \*q
>  This disables the parts of the VidMode extension used by the xvidtune client
>  that can be used to change the video modes.
> Index: xserver/hw/xfree86/modes/xf86RandR12.c
> ===================================================================
> --- xserver.orig/hw/xfree86/modes/xf86RandR12.c	2011-10-11 18:58:07.000000000 +0200
> +++ xserver/hw/xfree86/modes/xf86RandR12.c	2011-10-11 18:59:40.000000000 +0200
> @@ -807,6 +807,7 @@
>  	else
>  	{
>  	    xf86OutputPtr   output = xf86CompatOutput(pScrn);
> +	    xf86CrtcPtr     crtc   = output->crtc;
>  
>  	    if (output &&
>  		output->conf_monitor &&
> @@ -819,11 +820,27 @@
>  		mmWidth = output->conf_monitor->mon_width;
>  		mmHeight = output->conf_monitor->mon_height;
>  	    }
> -	    else
> +	    else if (!xf86Info.defaultDPI && crtc && crtc->mode.HDisplay &&
> +		     output->mm_width && output->mm_height)

You could move the «else if (xf86Info.defaultDPI)» before this one and
avoid having to check for !xf86Info.defaultDPI.

> +	    {
> +		/*
> +		 * If the output has a mode and a declared size, use that
> +		 * to scale the screen size
> +		 */
> +		DisplayModePtr	mode = &crtc->mode;
> +		mmWidth = output->mm_width * width / mode->HDisplay;
> +		mmHeight = output->mm_height * height / mode->VDisplay;
> +	    }
> +	    else if (xf86Info.defaultDPI)
>  	    {
>  		/*
>  		 * Otherwise, just set the screen to DEFAULT_DPI
>  		 */

This comment seems misplaced.

> +		mmWidth = width * 25.4 / xf86Info.defaultDPI;
> +		mmHeight = height * 25.4 / xf86Info.defaultDPI;
> +	    }
> +	    else
> +	    {
>  		mmWidth = width * 25.4 / DEFAULT_DPI;
>  		mmHeight = height * 25.4 / DEFAULT_DPI;
>  	    }

Thanks,
Guillem


More information about the xorg-devel mailing list