Hi,

On Fri, Feb 5, 2016 at 2:02 AM, Chris Sherlock
<chris.sherloc...@gmail.com> wrote:
> There were a series of patches that handled hi-DPI displays in 2014 that 
> Keith did for us and that were pushed by Kendy:

Yes, and I continued later on with the patches when I got a laptop
with HiDPI screen and running Fedora.

>> I've just pushed a backport of the hi-dpi patches from master to gerrit
>> for libreoffice-4-2 integration - as was requested earlier, to fix the
>> unfortunate state of LibreOffice on the hi-dpi displays.  It is the
>> following 5 patches (order is important):
>>
>> https://gerrit.libreoffice.org/#/c/8516/
>> https://gerrit.libreoffice.org/#/c/8517/
>> https://gerrit.libreoffice.org/#/c/8518/
>> https://gerrit.libreoffice.org/#/c/8519/
>> https://gerrit.libreoffice.org/#/c/8520/
>>
>> Keith confirmed that they fix the hi-dpi issues he was seeing in
>> LibreOffice 4.2.
>>
>> They are supposed to be safe for normal displays; that is anything
>> non-safe should be enclosed in an "if (mnDPIScaleFactor > 1)".  Few
>> cases make the computation a bit more general, like:
>>
>> +    long yOffset = (aRect.GetHeight() - 
>> mpImpl->maImage.GetSizePixel().Height()) / 2;
>> +
>>      if( mpImpl->mnState == SIGNATURESTATE_SIGNATURES_OK )
>>      {
>> -        ++aRect.Top();
>> +        aRect.Top() += yOffset;
>
> I’m wondering if this is the area I should focus on.
>
> I’m not entirely sure how the scaling factor is being worked out, we seem to 
> do this in Window::ImplInit and Window::ImplInitResolutionSettings with the 
> following calculation:
>
> mnDPIScaleFactor = std::max(1, (mpWindowImpl->mpFrameData->mnDPIY + 48) / 96);
>
> Does anyone know what the underlying theory is behind this calculation? 96 
> seems to be a hardcoded DPI value assumed for all screens, but I can’t quite 
> work out where the 48 number comes from…

You need the scale factor for bitmaps (icons) and some other places in
the UI (mostly the places where we draw 1 pixel lines) because when
you increase the DPI everything becomes larger pixel wise but bitmaps
stay as they are. When you start to approach 192 DPI (2*96) we
increase the scaling factor and scale the bitmaps by the scaling
factor. 48 is there only so that we scale before we hit 192 DPI - at
around 144 DPI (however in the latest code this starts at 169 DPI).

OSX is however excluded from this - it does its scaling in the backend
AFAIK. (see WIndow::CountDPIScaleFactor)

> I’m also wondering if it might not be better for us to move this calculation 
> out of Window and into SalGraphics, given it is the SalGraphics backend that 
> really gives the DPI via GetResolution.

Yes, it would be better to do it in the backend I guess.

> Another thing is: we seem to have this idea of logical coordinates, as 
> opposed to device coordinates all through OutputDevice, and also there is a 
> way of setting the OutputDevice mapmode. I’ve never quite understood what the 
> idea behind this is. Can anyone give me any insights into this?

OutputDevice backends work only with pixels - you can set the mapmode
to a logical mode and all the inputs can be in that logical
coordinates. OutputDevice will automatically convert them to pixels. I
don't like this however. I think this doesn't belong on the
OutputDevice and it just adds bloat - if we need something like this
then as a wrapper around OutputDevice that does this
(LogicalOutputDevice?).

> Chris
>
> P.S. I’ve just checked my Mac and the default scaling option is indeed lower 
> than what I was expecting - the default on my Mac with a Retina screen is 
> 2560x1440.
>
> Hint for OS X developers: to change actual screen resolutions, you need to:
>
> 1. Go to System Preferences
> 2. Go into the Display panel
> 3. In the Display tab, hold down the option key on your keyboard and click on 
> the Scaled radio option
>
> This will give you the chance to set the actual screen resolution, as opposed 
> to the more limited graphical option that OS X gives you.

Regards, Tomaž
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to