You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libreoffice/0001-Cut-Gordian-Knot-of-wh...

148 lines
5.9 KiB

From 22ec51681687c4d700336603f6f37e981ad37bf2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 22 Mar 2011 12:59:42 +0000
Subject: [PATCH] Cut Gordian Knot of who owns the font options
---
vcl/inc/vcl/glyphcache.hxx | 8 +++++---
vcl/source/glyphs/gcach_ftyp.cxx | 5 ++---
vcl/source/glyphs/gcach_ftyp.hxx | 6 +++---
vcl/source/glyphs/glyphcache.cxx | 2 --
vcl/unx/source/gdi/salgdi3.cxx | 8 ++++----
5 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/vcl/inc/vcl/glyphcache.hxx b/vcl/inc/vcl/glyphcache.hxx
index 351eb13..6a375a4 100644
--- a/vcl/inc/vcl/glyphcache.hxx
+++ b/vcl/inc/vcl/glyphcache.hxx
@@ -45,6 +45,7 @@
#include <tools/gen.hxx>
#include <hash_map>
#include <hash_set>
+#include <boost/shared_ptr.hpp>
namespace basegfx { class B2DPolyPolygon; }
@@ -182,8 +183,9 @@
virtual bool TestFont() const { return true; }
virtual void* GetFtFace() const { return 0; }
virtual int GetLoadFlags() const { return 0; }
- virtual void SetFontOptions( const ImplFontOptions*) {}
- virtual const ImplFontOptions* GetFontOptions() const { return 0; }
+ virtual void SetFontOptions( boost::shared_ptr<ImplFontOptions> ) {}
+ virtual boost::shared_ptr<ImplFontOptions> GetFontOptions() const
+ { return boost::shared_ptr<ImplFontOptions>(); }
virtual bool NeedsArtificialBold() const { return false; }
virtual bool NeedsArtificialItalic() const { return false; }
@@ -261,7 +263,7 @@
{
private:
ServerFont* mpServerFont;
- ImplFontOptions* mpFontOptions;
+ boost::shared_ptr<ImplFontOptions> mpFontOptions;
bool mbGotFontOptions;
public:
diff --git a/vcl/source/glyphs/gcach_ftyp.cxx b/vcl/source/glyphs/gcach_ftyp.cxx
index 3de5082..d482916 100644
--- a/vcl/source/glyphs/gcach_ftyp.cxx
+++ b/vcl/source/glyphs/gcach_ftyp.cxx
@@ -769,7 +769,6 @@ FreetypeServerFont::FreetypeServerFont( const ImplFontSelectData& rFSD, FtFontIn
mpFontInfo( pFI ),
maFaceFT( NULL ),
maSizeFT( NULL ),
- mpFontOptions( NULL ),
mbFaceOk( false ),
maRecodeConverter( NULL ),
mpLayoutEngine( NULL )
@@ -915,7 +914,7 @@ FreetypeServerFont::FreetypeServerFont( const ImplFontSelectData& rFSD, FtFontIn
mnLoadFlags |= FT_LOAD_NO_BITMAP;
}
-void FreetypeServerFont::SetFontOptions( const ImplFontOptions* pFontOptions)
+void FreetypeServerFont::SetFontOptions( boost::shared_ptr<ImplFontOptions> pFontOptions)
{
mpFontOptions = pFontOptions;
@@ -970,7 +969,7 @@ void FreetypeServerFont::SetFontOptions( const ImplFontOptions* pFontOptions)
mnLoadFlags |= FT_LOAD_NO_BITMAP;
}
-const ImplFontOptions* FreetypeServerFont::GetFontOptions() const
+boost::shared_ptr<ImplFontOptions> FreetypeServerFont::GetFontOptions() const
{
return mpFontOptions;
}
diff --git a/vcl/source/glyphs/gcach_ftyp.hxx b/vcl/source/glyphs/gcach_ftyp.hxx
index 8ebef45..0af4ed1 100644
--- a/vcl/source/glyphs/gcach_ftyp.hxx
+++ b/vcl/source/glyphs/gcach_ftyp.hxx
@@ -191,8 +191,8 @@ public:
virtual int GetFontFaceNum() const { return mpFontInfo->GetFaceNum(); }
virtual bool TestFont() const;
virtual void* GetFtFace() const;
- virtual void SetFontOptions( const ImplFontOptions*);
- virtual const ImplFontOptions* GetFontOptions() const;
+ virtual void SetFontOptions( boost::shared_ptr<ImplFontOptions> );
+ virtual boost::shared_ptr<ImplFontOptions> GetFontOptions() const;
virtual int GetLoadFlags() const { return (mnLoadFlags & ~FT_LOAD_IGNORE_TRANSFORM); }
virtual bool NeedsArtificialBold() const { return mbArtBold; }
virtual bool NeedsArtificialItalic() const { return mbArtItalic; }
@@ -239,7 +239,7 @@ private:
FT_FaceRec_* maFaceFT;
FT_SizeRec_* maSizeFT;
- const ImplFontOptions* mpFontOptions;
+ boost::shared_ptr<ImplFontOptions> mpFontOptions;
bool mbFaceOk;
bool mbArtItalic;
diff --git a/vcl/source/glyphs/glyphcache.cxx b/vcl/source/glyphs/glyphcache.cxx
index 649ffb4..373c430 100644
--- a/vcl/source/glyphs/glyphcache.cxx
+++ b/vcl/source/glyphs/glyphcache.cxx
@@ -534,7 +534,6 @@ bool ServerFont::IsGlyphInvisible( int nGlyphIndex )
ImplServerFontEntry::ImplServerFontEntry( ImplFontSelectData& rFSD )
: ImplFontEntry( rFSD )
, mpServerFont( NULL )
-, mpFontOptions( NULL )
, mbGotFontOptions( false )
{}
@@ -543,7 +542,6 @@ ImplServerFontEntry::ImplServerFontEntry( ImplFontSelectData& rFSD )
ImplServerFontEntry::~ImplServerFontEntry()
{
// TODO: remove the ServerFont here instead of in the GlyphCache
- delete mpFontOptions;
}
// =======================================================================
diff --git a/vcl/unx/source/gdi/salgdi3.cxx b/vcl/unx/source/gdi/salgdi3.cxx
index 20fd3cd..4365356 100644
--- a/vcl/unx/source/gdi/salgdi3.cxx
+++ b/vcl/unx/source/gdi/salgdi3.cxx
@@ -665,8 +665,8 @@
{
// get and cache the font options
mbGotFontOptions = true;
- mpFontOptions = GetFCFontOptions( *maFontSelData.mpFontData,
- maFontSelData.mnHeight );
+ mpFontOptions.reset(GetFCFontOptions( *maFontSelData.mpFontData,
+ maFontSelData.mnHeight ));
}
// apply the font options
mpServerFont->SetFontOptions( mpFontOptions );
@@ -1043,7 +1043,7 @@
font_face = (cairo_font_face_t*)m_aCairoFontsCache.FindCachedFont(pId);
if (!font_face)
{
- const ImplFontOptions *pOptions = rFont.GetFontOptions();
+ const ImplFontOptions *pOptions = rFont.GetFontOptions().get();
void *pPattern = pOptions ? pOptions->GetPattern(pId) : NULL;
if (pPattern)
font_face = rCairo.ft_font_face_create_for_pattern(pPattern);
--
1.7.4.1