[Libreoffice-commits] .: 3 commits - svtools/source unusedcode.easy vcl/generic vcl/inc vcl/source

Caolán McNamara caolan at kemper.freedesktop.org
Thu Oct 27 04:51:18 PDT 2011


 svtools/source/misc/sampletext.cxx     |    5 +-
 unusedcode.easy                        |   24 +++++++++++++
 vcl/generic/fontmanager/fontconfig.cxx |   18 ++++++++-
 vcl/generic/fontmanager/fontsubst.cxx  |    6 ++-
 vcl/generic/glyphs/glyphcache.cxx      |    7 +++
 vcl/inc/outfont.hxx                    |   19 ++++++++++
 vcl/inc/vcl/fontmanager.hxx            |    3 +
 vcl/source/gdi/outdev3.cxx             |   60 ++++++++++++++++++++++-----------
 8 files changed, 116 insertions(+), 26 deletions(-)

New commits:
commit c17aeee2d97fdc5ff941aae66dd01d6a58386f89
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Oct 27 12:48:42 2011 +0100

    probably better Japanese longer text preview

diff --git a/svtools/source/misc/sampletext.cxx b/svtools/source/misc/sampletext.cxx
index 33a49c6..7c2be7b 100644
--- a/svtools/source/misc/sampletext.cxx
+++ b/svtools/source/misc/sampletext.cxx
@@ -449,10 +449,9 @@ rtl::OUString makeRepresentativeTextForScript(UScriptCode eScript)
         }
         case USCRIPT_JAPANESE:
         {
-            //Iroha
+            //'Beautiful Japanese'
             const sal_Unicode aJa[] = {
-                0x8272, 0x306F, 0x5302, 0x3078, 0x3069, 0x0020, 0x6563,
-                0x308A, 0x306C, 0x308B, 0x3092
+                0x7F8E, 0x3057, 0x3044, 0x65E5, 0x672C, 0x8A9E
             };
             sSampleText = rtl::OUString(aJa, SAL_N_ELEMENTS(aJa));
             break;
commit 5eac2ffaa08d4a9bb251491bfdbca15281c3a21b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Oct 27 12:48:26 2011 +0100

    update unused list

diff --git a/unusedcode.easy b/unusedcode.easy
index db7aeea..b153d42 100644
--- a/unusedcode.easy
+++ b/unusedcode.easy
@@ -199,6 +199,9 @@ Graphic::StartAnimation(OutputDevice*, Point const&, long, OutputDevice*)
 Graphic::WriteEmbedded(SvStream&)
 GraphicReader::IsPreviewModeEnabled() const
 GroupTable::SkipCurrentGroup()
+GtkSalFrame::popIgnoreDamage()
+GtkSalFrame::pushIgnoreDamage()
+GtkSalFrame::signalDraw(_GtkWidget*, _cairo*, void*)
 HTMLControls::Insert(HTMLControl const*&, unsigned short&)
 HTMLControls::Insert(HTMLControl const**, unsigned short)
 HTMLControls::Insert(HTMLControls const*, unsigned short, unsigned short)
@@ -367,6 +370,7 @@ SVGExport::pushClip(basegfx::B2DPolyPolygon const&)
 SalColormap::SalColormap(BitmapPalette const&)
 SalColormap::SetPalette(BitmapPalette const&)
 SalDisplay::IsLocal()
+SalGraphics::AddDevFontSubstitute(OutputDevice*, String const&, String const&, unsigned short)
 SalGraphics::DrawBitmap(SalTwoRect const*, SalBitmap const&, unsigned int, OutputDevice const*)
 SalGraphics::drawAlphaBitmap(SalTwoRect const&, SalBitmap const&, SalBitmap const&)
 SalGraphics::drawPolyLine(basegfx::B2DPolygon const&, double, basegfx::B2DVector const&, basegfx::B2DLineJoin)
@@ -1454,6 +1458,8 @@ _ZSortFlys::Remove(_ZSortFly const&, unsigned short)
 _ZSortFlys_SAR::Replace(_ZSortFly const&, unsigned short)
 _ZSortFlys_SAR::Replace(_ZSortFly const*, unsigned short, unsigned short)
 _ZSortFlys_SAR::_ForEach(unsigned short, unsigned short, unsigned char (*)(_ZSortFly const&, void*), void*)
+basebmp::BitmapDevice::getPaletteEntryCount() const
+basebmp::BitmapDevice::getPixelData(basegfx::B2IPoint const&)
 basebmp::debugDump(boost::shared_ptr<basebmp::BitmapDevice> const&, std::basic_ostream<char, std::char_traits<char> >&)
 basegfx::B1DRange::B1DRange(basegfx::B1IRange const&)
 basegfx::B2DCubicBezier::B2DCubicBezier(basegfx::B2DPoint const&, basegfx::B2DPoint const&)
@@ -2380,11 +2386,15 @@ layoutimpl::getParent(com::sun::star::uno::Reference<com::sun::star::uno::XInter
 layoutimpl::prophlp::getProperty(com::sun::star::uno::Reference<com::sun::star::uno::XInterface> const&, rtl::OUString const&)
 libcmis::SessionFactory::getRepositories(std::__debug::map<int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<int>, std::allocator<std::pair<int const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >)
 libvisio::VSDXCharacterList::getElement(unsigned int)
+libvisio::VSDXContentCollector::charStyleFromStyleSheet(unsigned int)
+libvisio::VSDXContentCollector::paraStyleFromStyleSheet(unsigned int)
+libvisio::VSDXContentCollector::textBlockStyleFromStyleSheet(unsigned int)
 libvisio::VSDXOutputElementList::addEllipse(WPXPropertyList const&)
 libvisio::VSDXOutputElementList::addEndLayer()
 libvisio::VSDXOutputElementList::addStartLayer(WPXPropertyList const&)
 libvisio::VSDXOutputElementList::clear()
 libvisio::VSDXPage::VSDXPage(double, double, unsigned int, unsigned int, libvisio::VSDXOutputElementList const&)
+libvisio::VSDXParagraphList::getElement(unsigned int)
 libvisio::VisioDocument::generateSVG(WPXInputStream*, WPXString&)
 libwpg::WPGraphics::generateSVG(unsigned char const*, unsigned long, WPXString&, libwpg::WPGFileFormat)
 libwpg::WPGraphics::parse(unsigned char const*, unsigned long, libwpg::WPGPaintInterface*, libwpg::WPGFileFormat)
@@ -2604,14 +2614,28 @@ sd::ViewShellBase::RegisterFactory(unsigned short)
 sd::framework::ConfigurationClassifier::GetC1andC2() const
 sd::framework::ConfigurationClassifier::TraceResourceIdVector(char const*, std::__debug::vector<com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId>, std::allocator<com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId> > > const&) const
 sd::framework::ConfigurationTracer::TraceConfiguration(com::sun::star::uno::Reference<com::sun::star::drawing::framework::XConfiguration> const&, char const*)
+sd::slidesorter::cache::GenericPageCache::ReleasePreviewBitmap(SdrPage const*)
+sd::slidesorter::controller::SelectionFunction::EventDescriptor::EventDescriptor(KeyEvent const&, sd::slidesorter::SlideSorter&)
+sd::slidesorter::controller::SlotManager::LinkStubUserEventCallback(void*, void*)
+sd::slidesorter::model::VisualState::SetVisualStateBlend(double)
 sd::slidesorter::view::(anonymous namespace)::Blend(unsigned char, unsigned char, double)
 sd::slidesorter::view::(anonymous namespace)::CalculateColorChannel(double, double, double, double, double)
 sd::slidesorter::view::(anonymous namespace)::PageObjectRun::GetInnerBoundingBox(sd::slidesorter::view::Layouter const&, int) const
 sd::slidesorter::view::(anonymous namespace)::RectangleBackgroundTheme::RectangleBackgroundTheme(boost::shared_ptr<sd::slidesorter::view::Theme> const&, std::__debug::vector<boost::shared_ptr<sd::slidesorter::view::Button>, std::allocator<boost::shared_ptr<sd::slidesorter::view::Button> > > const&)
 sd::slidesorter::view::FontProvider::GetFont(OutputDevice const&)
+sd::slidesorter::view::Layouter::_SetZoom(Fraction)
+sdext::presenter::(anonymous namespace)::MoveInFromBottomAnimator::MoveInFromBottomAnimator(com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId> const&, rtl::Reference<sdext::presenter::PresenterController> const&, bool, std::__debug::vector<boost::function<void ()>, std::allocator<boost::function<void ()> > > const&, std::__debug::vector<boost::function<void ()>, std::allocator<boost::function<void ()> > > const&)
+sdext::presenter::(anonymous namespace)::TransparentOverlayAnimator::TransparentOverlayAnimator(com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId> const&, rtl::Reference<sdext::presenter::PresenterController> const&, bool, std::__debug::vector<boost::function<void ()>, std::allocator<boost::function<void ()> > > const&, std::__debug::vector<boost::function<void ()>, std::allocator<boost::function<void ()> > > const&)
+sdext::presenter::(anonymous namespace)::UnfoldInCenterAnimator::UnfoldInCenterAnimator(com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId> const&, rtl::Reference<sdext::presenter::PresenterController> const&, bool, std::__debug::vector<boost::function<void ()>, std::allocator<boost::function<void ()> > > const&, std::__debug::vector<boost::function<void ()>, std::allocator<boost::function<void ()> > > const&)
 sdext::presenter::PresenterFrameworkObserver::False()
+sdext::presenter::PresenterFrameworkObserver::HasResource(com::sun::star::uno::Reference<com::sun::star::drawing::framework::XConfigurationController> const&, com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId> const&)
 sdext::presenter::PresenterHorizontalScrollBar::PresenterHorizontalScrollBar(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&, com::sun::star::uno::Reference<com::sun::star::awt::XWindow> const&, boost::shared_ptr<sdext::presenter::PresenterPaintManager> const&, boost::function<void (double)> const&)
+sdext::presenter::PresenterSprite::SetPriority(double)
+sdext::presenter::PresenterTextView::PresenterTextView(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&, com::sun::star::uno::Reference<com::sun::star::rendering::XCanvas> const&)
+sdext::presenter::PresenterTextView::SetText(rtl::OUString const&)
 sdext::presenter::PresenterTheme::FontDescriptor::FontDescriptor()
+sdext::presenter::PresenterToolBar::GetCurrentSlideIndex()
+sdext::presenter::PresenterToolBar::GetSlideCount()
 sdr::Comment::Comment(unsigned int, Date, rtl::OUString const&, rtl::OUString const&, basegfx::B2DPoint const&)
 sdr::Comment::SetCreationDate(Date)
 sdr::Comment::SetPosition(basegfx::B2DPoint const&)
commit 58b48f188bbfd9a3382460d6de63848eb3db416d
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Oct 27 12:24:11 2011 +0100

    Resolves: fdo#32665 handle that FreeSerif lacks some glyphs in bold/italic
    
    FreeSerif lacks glyphs in bold/italic variants that it has in the normal one. A
    lot of our glyph fallback infrastructure, especially the caches don't expect
    that a normal variant of a font with extra emboldening or extra font skew can
    be a fallback for a bold/italic variant of itself which exists, but doesn't
    have the missing glyphs that the normal one does.
    
    We really need to improve our glyph/font caching, but we can get 90% of the
    way there by excluding such cases from the caches.

diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
index be91349..a4f5f7f 100644
--- a/vcl/generic/fontmanager/fontconfig.cxx
+++ b/vcl/generic/fontmanager/fontconfig.cxx
@@ -68,6 +68,9 @@ using namespace psp;
 #ifndef FC_EMBOLDEN
     #define FC_EMBOLDEN "embolden"
 #endif
+#ifndef FC_MATRIX
+    #define FC_MATRIX "matrix"
+#endif
 #ifndef FC_FONTFORMAT
     #define FC_FONTFORMAT "fontformat"
 #endif
@@ -747,7 +750,7 @@ static void addtopattern(FcPattern *pPattern,
 rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName,
     rtl::OUString& rMissingCodes, const rtl::OString &rLangAttrib,
     FontItalic &rItalic, FontWeight &rWeight,
-    FontWidth &rWidth, FontPitch &rPitch) const
+    FontWidth &rWidth, FontPitch &rPitch, bool &rEmbolden, ItalicMatrix &rMatrix) const
 {
     rtl::OUString aName;
     FontCfgWrapper& rWrapper = FontCfgWrapper::get();
@@ -834,6 +837,17 @@ rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName,
                     rPitch = convertSpacing(val);
                 if (FcResultMatch == FcPatternGetInteger(pSet->fonts[0], FC_WIDTH, 0, &val))
                     rWidth = convertWidth(val);
+                FcBool bEmbolden;
+                if (FcResultMatch == FcPatternGetBool(pSet->fonts[0], FC_EMBOLDEN, 0, &bEmbolden))
+                    rEmbolden = bEmbolden;
+                FcMatrix *pMatrix = 0;
+                if (FcResultMatch == FcPatternGetMatrix(pSet->fonts[0], FC_MATRIX, 0, &pMatrix))
+                {
+                    rMatrix.xx = pMatrix->xx;
+                    rMatrix.xy = pMatrix->xy;
+                    rMatrix.yx = pMatrix->yx;
+                    rMatrix.yy = pMatrix->yy;
+                }
             }
 
             // update rMissingCodes by removing resolved unicodes
@@ -844,7 +858,7 @@ rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName,
                 FcCharSet* unicodes;
                 if (!FcPatternGetCharSet(pSet->fonts[0], FC_CHARSET, 0, &unicodes))
                 {
-                       for( sal_Int32 nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
+                    for( sal_Int32 nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
                     {
                         // also handle unicode surrogates
                         const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
diff --git a/vcl/generic/fontmanager/fontsubst.cxx b/vcl/generic/fontmanager/fontsubst.cxx
index 3bf2d07..2d187b1 100644
--- a/vcl/generic/fontmanager/fontsubst.cxx
+++ b/vcl/generic/fontmanager/fontsubst.cxx
@@ -127,10 +127,14 @@ static ImplFontSelectData GetFcSubstitute(const ImplFontSelectData &rFontSelData
     FontWeight eWeight = rFontSelData.GetWeight();
     FontWidth eWidth = rFontSelData.GetWidthType();
     FontPitch ePitch = rFontSelData.GetPitch();
+    bool bEmbolden = rFontSelData.mbEmbolden;
+    ItalicMatrix aMatrix = rFontSelData.maItalicMatrix;
 
     const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
-    aRet.maSearchName = rMgr.Substitute( rFontSelData.maTargetName, rMissingCodes, aLangAttrib, eItalic, eWeight, eWidth, ePitch);
+    aRet.maSearchName = rMgr.Substitute( rFontSelData.maTargetName, rMissingCodes, aLangAttrib, eItalic, eWeight, eWidth, ePitch, bEmbolden, aMatrix );
 
+    aRet.maItalicMatrix = aMatrix;
+    aRet.mbEmbolden  = bEmbolden;
     aRet.meItalic    = eItalic;
     aRet.meWeight    = eWeight;
     aRet.meWidthType = eWidth;
diff --git a/vcl/generic/glyphs/glyphcache.cxx b/vcl/generic/glyphs/glyphcache.cxx
index 5322b65..fa712bb 100644
--- a/vcl/generic/glyphs/glyphcache.cxx
+++ b/vcl/generic/glyphs/glyphcache.cxx
@@ -163,6 +163,13 @@ bool GlyphCache::IFSD_Equal::operator()( const ImplFontSelectData& rA, const Imp
         != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName)
         return false;
 #endif
+
+    if (rA.mbEmbolden != rB.mbEmbolden)
+        return false;
+
+    if (rA.maItalicMatrix != rB.maItalicMatrix)
+        return false;
+
     return true;
 }
 
diff --git a/vcl/inc/outfont.hxx b/vcl/inc/outfont.hxx
index faf2b00..857d944 100644
--- a/vcl/inc/outfont.hxx
+++ b/vcl/inc/outfont.hxx
@@ -156,6 +156,22 @@ friend class ImplDevFontListData;
 // - ImplFontSelectData -
 // ----------------------
 
+struct ItalicMatrix
+{
+    double xx, xy, yx, yy;
+    ItalicMatrix() : xx(1), xy(0), yx(0), yy(1) {}
+};
+
+inline bool operator ==(const ItalicMatrix& a, const ItalicMatrix& b)
+{
+    return a.xx == b.xx && a.xy == b.xy && a.yx == b.yx && a.yy == b.yy;
+}
+
+inline bool operator !=(const ItalicMatrix& a, const ItalicMatrix& b)
+{
+    return a.xx != b.xx || a.xy != b.xy || a.yx != b.yx || a.yy != b.yy;
+}
+
 class ImplFontSelectData : public ImplFontAttributes
 {
 public:
@@ -175,6 +191,9 @@ public: // TODO: change to private
     bool                mbVertical;         // vertical mode of requested font
     bool                mbNonAntialiased;   // true if antialiasing is disabled
 
+    bool                mbEmbolden;         // Force emboldening
+    ItalicMatrix        maItalicMatrix;     // Force matrix for slant
+
     const ImplFontData* mpFontData;         // a matching ImplFontData object
     ImplFontEntry*      mpFontEntry;        // pointer to the resulting FontCache entry
 };
diff --git a/vcl/inc/vcl/fontmanager.hxx b/vcl/inc/vcl/fontmanager.hxx
index 0af5e14..4a110ad 100644
--- a/vcl/inc/vcl/fontmanager.hxx
+++ b/vcl/inc/vcl/fontmanager.hxx
@@ -37,6 +37,7 @@
 #include "vcl/dllapi.h"
 #include "vcl/helper.hxx"
 #include "vcl/vclenum.hxx"
+#include "outfont.hxx"
 #include "com/sun/star/lang/Locale.hpp"
 
 #include <vector>
@@ -649,7 +650,7 @@ public:
 
     rtl::OUString Substitute( const rtl::OUString& rFontName, rtl::OUString& rMissingCodes,
         const rtl::OString& rLangAttrib, FontItalic& rItalic, FontWeight& rWeight,
-        FontWidth& rWidth, FontPitch& rPitch) const;
+        FontWidth& rWidth, FontPitch& rPitch, bool &rEmboldening, ItalicMatrix &rMatrix) const;
     bool hasFontconfig() const { return m_bFontconfigSuccess; }
 
     int FreeTypeCharIndex( void *pFace, sal_uInt32 aChar );
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index b0f59cd..3cc438c 100755
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -865,9 +865,11 @@ bool ImplFontData::IsBetterMatch( const ImplFontSelectData& rFSD, FontMatchStatu
 
     if( rFSD.meWeight != WEIGHT_DONTKNOW )
     {
-        // if not bold prefer light fonts to bold fonts
-        int nReqWeight = (int)rFSD.meWeight;
-        if ( rFSD.meWeight > WEIGHT_MEDIUM )
+        // if not bold or requiring emboldening prefer light fonts to bold fonts
+        FontWeight ePatternWeight = rFSD.mbEmbolden ? WEIGHT_NORMAL : rFSD.meWeight;
+
+        int nReqWeight = (int)ePatternWeight;
+        if ( ePatternWeight > WEIGHT_MEDIUM )
             nReqWeight += 100;
 
         int nGivenWeight = (int)meWeight;
@@ -897,14 +899,17 @@ bool ImplFontData::IsBetterMatch( const ImplFontSelectData& rFSD, FontMatchStatu
             nMatch += 150;
     }
 
-    if ( rFSD.meItalic == ITALIC_NONE )
+    // if requiring custom matrix to fake italic, prefer upright font
+    FontItalic ePatternItalic = rFSD.maItalicMatrix != ItalicMatrix() ? ITALIC_NONE : rFSD.meItalic;
+
+    if ( ePatternItalic == ITALIC_NONE )
     {
         if( meItalic == ITALIC_NONE )
             nMatch += 900;
     }
     else
     {
-        if( rFSD.meItalic == meItalic )
+        if( ePatternItalic == meItalic )
             nMatch += 900;
         else if( meItalic != ITALIC_NONE )
             nMatch += 600;
@@ -1457,22 +1462,31 @@ ImplDevFontListData* ImplDevFontList::GetGlyphFallbackFont( ImplFontSelectData&
             else
                 rFontSelData.maSearchName = String();
 
-            // cache the result even if there was no match
-            for(;;)
-            {
-                 if( !rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &rFontSelData.maSearchName ) )
-                     rFontSelData.mpFontEntry->AddFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
-                 if( nStrIndex >= aOldMissingCodes.getLength() )
-                     break;
-                 cChar = aOldMissingCodes.iterateCodePoints( &nStrIndex );
-            }
-            if( rFontSelData.maSearchName.Len() != 0 )
+            //See fdo#32665 for an example. FreeSerif that has glyphs in normal
+            //font, but not in the italic or bold version
+            bool bSubSetOfFontRequiresPropertyFaking = rFontSelData.mbEmbolden || rFontSelData.maItalicMatrix != ItalicMatrix();
+
+            // cache the result even if there was no match, unless its from part of a font for which the properties need
+            // to be faked. We need to rework this cache to take into account that fontconfig can return different fonts
+            // for different input sizes, weights, etc. Basically the cache is way to naive
+            if (!bSubSetOfFontRequiresPropertyFaking)
             {
-                // remove cache entries that were still not resolved
-                for( nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
+                for(;;)
                 {
-                    cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
-                    rFontSelData.mpFontEntry->IgnoreFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+                     if( !rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &rFontSelData.maSearchName ) )
+                         rFontSelData.mpFontEntry->AddFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+                     if( nStrIndex >= aOldMissingCodes.getLength() )
+                         break;
+                     cChar = aOldMissingCodes.iterateCodePoints( &nStrIndex );
+                }
+                if( rFontSelData.maSearchName.Len() != 0 )
+                {
+                    // remove cache entries that were still not resolved
+                    for( nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
+                    {
+                        cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+                        rFontSelData.mpFontEntry->IgnoreFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+                    }
                 }
             }
         }
@@ -2180,6 +2194,7 @@ ImplFontSelectData::ImplFontSelectData( const Font& rFont,
     meLanguage( rFont.GetLanguage() ),
     mbVertical( rFont.IsVertical() ),
     mbNonAntialiased( false ),
+    mbEmbolden( false ),
     mpFontData( NULL ),
     mpFontEntry( NULL )
 {
@@ -2215,6 +2230,7 @@ ImplFontSelectData::ImplFontSelectData( const ImplFontData& rFontData,
     meLanguage( 0 ),
     mbVertical( bVertical ),
     mbNonAntialiased( false ),
+    mbEmbolden( false ),
     mpFontData( &rFontData ),
     mpFontEntry( NULL )
 {
@@ -2297,6 +2313,12 @@ bool ImplFontCache::IFSD_Equal::operator()(const ImplFontSelectData& rA, const I
         return false;
 #endif
 
+    if (rA.mbEmbolden != rB.mbEmbolden)
+        return false;
+
+    if (rA.maItalicMatrix != rB.maItalicMatrix)
+        return false;
+
     return true;
 }
 


More information about the Libreoffice-commits mailing list