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.
148 lines
5.9 KiB
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
|
|
|