[Libreoffice-commits] core.git: Branch 'libreoffice-5-3' - vcl/win

Khaled Hosny khaledhosny at eglug.org
Fri Jan 13 11:41:18 UTC 2017


 vcl/win/gdi/salfont.cxx |   17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

New commits:
commit 88d6675a40034fa786efd75cf14175f3c0c83e2e
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Thu Jan 12 22:52:08 2017 +0200

    tdf#105015: Don’t ignore all printer fonts
    
    For whatever reason we query printer output device for fonts and for
    whatever reason GDI will only report fonts from the printer which
    often in formats we want to ignore. This results in aborting the
    application when we reject all fonts on the printer!
    
    Just special case printer output devices and hope for the best.
    
    I think this commit is partially blamed as it is evidenced now that
    there was a good reason to only abort for window output devices, but
    I’m leaving this as it is for now:
    
    commit ea7102c93c33884a68d4dba0de7d52f8ed4f4579
    Author: Chris Sherlock <chris.sherlock79 at gmail.com>
    Date:   Tue Mar 25 21:54:20 2014 +1100
    
        fdo#74702 OutputDevice::ImplInitFontList() fails if no fonts on device
    
        It makes no sense that ImplInitFontList() only fails for Window
        instances. I have carefully checked all the functions that use
        this function, and there are no good cases when no fonts won't cause
        problems. In fact, we have a number of functions that specifically
        rely on the fact that ImplInitFontList will populate
        OutputDevice::mpFontCollection with at least one font.
    
        Therefore, I'm making this abort if it can't populate the collection,
        regardless of whether it is a Window, Printer or VirtualDevice.
    
        I have also refactored GetDefaultDevice - I now check the default
        pOutDev parameter to see if it is NULL (the default), in which case
        it is referring to the default window, so I call on
        Application::GetDefaultDevice() instead of going straight to the
        pimpl data structure used by the Application class.
    
    Change-Id: I3f34ba0cea9f88966ace3a5ef7fac868972ea5ac
    Reviewed-on: https://gerrit.libreoffice.org/33014
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx
index 9de0541..8c120c0 100644
--- a/vcl/win/gdi/salfont.cxx
+++ b/vcl/win/gdi/salfont.cxx
@@ -1406,22 +1406,27 @@ int CALLBACK SalEnumFontsProcExW( const LOGFONTW* lpelfe,
     }
     else
     {
+        // Ignore non-device font on printer.
+        if (pInfo->mbPrinter)
+        {
+            if ((nFontType & RASTER_FONTTYPE) && !(nFontType & DEVICE_FONTTYPE))
+            {
+                SAL_INFO("vcl.gdi", "Unsupported printer font ignored: " << OUString(pLogFont->elfLogFont.lfFaceName));
+                return 1;
+            }
+        }
         // Only SFNT fonts are supported, ignore anything else.
-        if (SalLayout::UseCommonLayout() || OpenGLWrapper::isVCLOpenGLEnabled())
+        else if (SalLayout::UseCommonLayout() || OpenGLWrapper::isVCLOpenGLEnabled())
         {
             if (!(nFontType & TRUETYPE_FONTTYPE) &&
                 !(pMetric->ntmTm.ntmFlags & NTM_PS_OPENTYPE) &&
                 !(pMetric->ntmTm.ntmFlags & NTM_TT_OPENTYPE))
             {
                 SAL_INFO("vcl.gdi", "Unsupported font ignored: " << OUString(pLogFont->elfLogFont.lfFaceName));
-                    return 1;
+                return 1;
             }
         }
 
-        // Ignore non-device font on printer.
-        if (pInfo->mbPrinter && !(nFontType & DEVICE_FONTTYPE))
-            return 1;
-
         WinFontFace* pData = ImplLogMetricToDevFontDataW( pLogFont, &(pMetric->ntmTm), nFontType );
         pData->SetFontId( sal_IntPtr( pInfo->mnFontCount++ ) );
 


More information about the Libreoffice-commits mailing list