On Tue, 19 Aug 2003, Alex Deucher wrote:

> How is DPI supposed to work if you have a virtual desktop larger than
> the current mode?  the current code seems to produce the wrong DPI. 
> xf86SetDpi() has the following code:
> 
>      if (pScrn->widthmm > 0) {
>         pScrn->xDpi =
>           (int)((double)pScrn->virtualX * MMPERINCH / pScrn->widthmm);
>      }
>      if (pScrn->heightmm > 0) {
>         pScrn->yDpi =
>          (int)((double)pScrn->virtualY * MMPERINCH / pScrn->heightmm);
>      }
> 
> if you have, for example,
> DisplaySize 300 230 
> and a virtual resolution of say 2048x768 and a mode of 1024x768, the
> DPI would get set to 173, 84.  which (I think) is wrong.  it should be
> 86, 84 which is what you would get when your mode matches your virtual
> resolution.  I'm having the same problem with Mergedfb since it uses a
> virtual resolution with two viewports looking into it.  I could add the
> heightmm or widthmm of both heads to make the DPI "correct" for the
> virtual size with respect to the two heads.  I'm not sure how xinerama
> deals with it.  maybe the current behavior is right?  I dunno.

PanoramiXCreateConnectionBlock() in xc/programs/Xserver/Xext/panoramiX.c 
has:
    /*
     *  OK, change some dimensions so it looks as if it were one big screen
     */
    
    old_width = root->pixWidth;
    old_height = root->pixHeight;

    root->pixWidth = PanoramiXPixWidth;
    root->pixHeight = PanoramiXPixHeight;
    width_mult = (1.0 * root->pixWidth) / old_width;
    height_mult = (1.0 * root->pixHeight) / old_height;
    root->mmWidth *= width_mult;
    root->mmHeight *= height_mult;

which adjusts mmWidth and mmHeight in the manner you are proposing.
mmWidth becomes pScrn->widthmm inside xf86SetDpi().

-- 
Andrew C Aitchison

_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to