summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-08-19 21:17:52 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-08-20 15:20:45 +0200
commitd9ab7be6c2e4494846081b089710f4dd0b1d2ad3 (patch)
tree6a2b2cb3c0ff3ce76459d5dd03df0ceb6e61296b /vcl
parent7fe7805f0fe7924bb0e190207d8ea320353d2810 (diff)
TODO: refcount ImplFontList
Change-Id: Ie125f1ac9c14a41e25c3e54beafca2f9e34e4c6f Reviewed-on: https://gerrit.libreoffice.org/59310 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/svdata.hxx2
-rw-r--r--vcl/inc/window.h2
-rw-r--r--vcl/source/app/svmain.cxx5
-rw-r--r--vcl/source/gdi/print.cxx12
-rw-r--r--vcl/source/gdi/virdev.cxx7
-rw-r--r--vcl/source/outdev/font.cxx42
-rw-r--r--vcl/source/outdev/outdev.cxx11
-rw-r--r--vcl/source/window/window.cxx8
-rw-r--r--vcl/win/gdi/salfont.cxx2
9 files changed, 38 insertions, 53 deletions
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index 7b35a0283e93..52980ec3260b 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -184,7 +184,7 @@ struct ImplSVGDIData
VclPtr<Printer> mpFirstPrinter; // First Printer
VclPtr<Printer> mpLastPrinter; // Last Printer
ImplPrnQueueList* mpPrinterQueueList = nullptr; // List of all printer queue
- PhysicalFontCollection* mpScreenFontList = nullptr; // Screen-Font-List
+ std::shared_ptr<PhysicalFontCollection> mxScreenFontList; // Screen-Font-List
std::shared_ptr<ImplFontCache> mxScreenFontCache; // Screen-Font-Cache
ImplDirectFontSubstitution* mpDirectFontSubst = nullptr; // Font-Substitutions defined in Tools->Options->Fonts
GraphicConverter* mpGrfConverter = nullptr; // Converter for graphics
diff --git a/vcl/inc/window.h b/vcl/inc/window.h
index f1a5f66ef830..21448efd9496 100644
--- a/vcl/inc/window.h
+++ b/vcl/inc/window.h
@@ -128,7 +128,7 @@ struct ImplFrameData
VclPtr<vcl::Window> mpMouseMoveWin; //< last window, where MouseMove() called
VclPtr<vcl::Window> mpMouseDownWin; //< last window, where MouseButtonDown() called
std::vector<VclPtr<vcl::Window> > maOwnerDrawList; //< List of system windows with owner draw decoration
- PhysicalFontCollection* mpFontCollection; //< Font-List for this frame
+ std::shared_ptr<PhysicalFontCollection> mxFontCollection; //< Font-List for this frame
std::shared_ptr<ImplFontCache> mxFontCache; //< Font-Cache for this frame
sal_Int32 mnDPIX; //< Original Screen Resolution
sal_Int32 mnDPIY; //< Original Screen Resolution
diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx
index dcd049cd86b8..a91b5c6686db 100644
--- a/vcl/source/app/svmain.cxx
+++ b/vcl/source/app/svmain.cxx
@@ -360,7 +360,7 @@ bool InitVCL()
pSVData->maAppData.mpAppFileName = new OUString( aNativeFileName );
// Initialize global data
- pSVData->maGDIData.mpScreenFontList = new PhysicalFontCollection;
+ pSVData->maGDIData.mxScreenFontList.reset(new PhysicalFontCollection);
pSVData->maGDIData.mxScreenFontCache.reset(new ImplFontCache);
pSVData->maGDIData.mpGrfConverter = new GraphicConverter;
@@ -615,8 +615,7 @@ void DeInitVCL()
pSVData->maWinData.mpAutoScrollWin = nullptr;
pSVData->maWinData.mpLastWheelWindow = nullptr;
- delete pSVData->maGDIData.mpScreenFontList;
- pSVData->maGDIData.mpScreenFontList = nullptr;
+ pSVData->maGDIData.mxScreenFontList.reset();
pSVData->maGDIData.mxScreenFontCache.reset();
// Deinit Sal
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 877c85e45315..4f62d062f8a2 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -677,9 +677,9 @@ void Printer::ImplInit( SalPrinterQueueInfo* pInfo )
// Init data
ImplUpdatePageData();
- mpFontCollection = new PhysicalFontCollection();
+ mxFontCollection.reset(new PhysicalFontCollection);
mxFontCache.reset(new ImplFontCache);
- mpGraphics->GetDevFontList( mpFontCollection );
+ mpGraphics->GetDevFontList(mxFontCollection.get());
}
void Printer::ImplInitDisplay()
@@ -691,7 +691,7 @@ void Printer::ImplInitDisplay()
mpJobGraphics = nullptr;
mpDisplayDev = VclPtr<VirtualDevice>::Create();
- mpFontCollection = pSVData->maGDIData.mpScreenFontList;
+ mxFontCollection = pSVData->maGDIData.mxScreenFontList;
mxFontCache = pSVData->maGDIData.mxScreenFontCache;
mnDPIX = mpDisplayDev->mnDPIX;
mnDPIY = mpDisplayDev->mnDPIY;
@@ -1074,8 +1074,7 @@ bool Printer::SetPrinterProps( const Printer* pPrinter )
mpDeviceFontSizeList.reset();
// clean up font list
mxFontCache.reset();
- delete mpFontCollection;
- mpFontCollection = nullptr;
+ mxFontCollection.reset();
mbInitFont = true;
mbNewFont = true;
@@ -1103,8 +1102,7 @@ bool Printer::SetPrinterProps( const Printer* pPrinter )
mpDeviceFontList.reset();
mpDeviceFontSizeList.reset();
mxFontCache.reset();
- delete mpFontCollection;
- mpFontCollection = nullptr;
+ mxFontCollection.reset();
mbInitFont = true;
mbNewFont = true;
mpInfoPrinter = nullptr;
diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx
index cecdfa53ef76..f48d9b3b1473 100644
--- a/vcl/source/gdi/virdev.cxx
+++ b/vcl/source/gdi/virdev.cxx
@@ -168,7 +168,7 @@ void VirtualDevice::ImplInitVirDev( const OutputDevice* pOutDev,
meOutDevType = OUTDEV_VIRDEV;
mbDevOutput = true;
- mpFontCollection = pSVData->maGDIData.mpScreenFontList;
+ mxFontCollection = pSVData->maGDIData.mxScreenFontList;
mxFontCache = pSVData->maGDIData.mxScreenFontCache;
mnDPIX = pOutDev->mnDPIX;
mnDPIY = pOutDev->mnDPIY;
@@ -494,13 +494,12 @@ void VirtualDevice::ImplSetReferenceDevice( RefDevMode i_eRefDevMode, sal_Int32
// preserve global font lists
ImplSVData* pSVData = ImplGetSVData();
- if( mpFontCollection && (mpFontCollection != pSVData->maGDIData.mpScreenFontList) )
- delete mpFontCollection;
+ mxFontCollection.reset();
mxFontCache.reset();
// get font list with scalable fonts only
AcquireGraphics();
- mpFontCollection = pSVData->maGDIData.mpScreenFontList->Clone();
+ mxFontCollection.reset(pSVData->maGDIData.mxScreenFontList->Clone());
// prepare to use new font lists
mxFontCache.reset(new ImplFontCache);
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index f79c0a0493ee..81a825fe17f8 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -69,12 +69,12 @@ int OutputDevice::GetDevFontCount() const
{
if( !mpDeviceFontList )
{
- if (!mpFontCollection)
+ if (!mxFontCollection)
{
return 0;
}
- mpDeviceFontList = mpFontCollection->GetDeviceFontList();
+ mpDeviceFontList = mxFontCollection->GetDeviceFontList();
if (!mpDeviceFontList->Count())
{
@@ -87,7 +87,7 @@ int OutputDevice::GetDevFontCount() const
bool OutputDevice::IsFontAvailable( const OUString& rFontName ) const
{
- PhysicalFontFamily* pFound = mpFontCollection->FindFontFamily( rFontName );
+ PhysicalFontFamily* pFound = mxFontCollection->FindFontFamily( rFontName );
return (pFound != nullptr);
}
@@ -96,7 +96,7 @@ int OutputDevice::GetDevFontSizeCount( const vcl::Font& rFont ) const
mpDeviceFontSizeList.reset();
ImplInitFontList();
- mpDeviceFontSizeList = mpFontCollection->GetDeviceFontSizeList( rFont.GetFamilyName() );
+ mpDeviceFontSizeList = mxFontCollection->GetDeviceFontSizeList( rFont.GetFamilyName() );
return mpDeviceFontSizeList->Count();
}
@@ -155,7 +155,7 @@ bool OutputDevice::AddTempDevFont( const OUString& rFileURL, const OUString& rFo
if( !mpGraphics && !AcquireGraphics() )
return false;
- bool bRC = mpGraphics->AddTempDevFont( mpFontCollection, rFileURL, rFontName );
+ bool bRC = mpGraphics->AddTempDevFont( mxFontCollection.get(), rFileURL, rFontName );
if( !bRC )
return false;
@@ -539,15 +539,13 @@ void OutputDevice::ImplClearFontData( const bool bNewFontLists )
// we need a graphics
if ( AcquireGraphics() )
{
- if( mpFontCollection && mpFontCollection != pSVData->maGDIData.mpScreenFontList )
- mpFontCollection->Clear();
+ if (mxFontCollection && mxFontCollection != pSVData->maGDIData.mxScreenFontList)
+ mxFontCollection->Clear();
if( mpPDFWriter )
{
- if( mpFontCollection && mpFontCollection != pSVData->maGDIData.mpScreenFontList )
- delete mpFontCollection;
+ mxFontCollection.reset();
mxFontCache.reset();
- mpFontCollection = nullptr;
}
}
}
@@ -583,12 +581,12 @@ void OutputDevice::ImplRefreshFontData( const bool bNewFontLists )
{
if( mpPDFWriter )
{
- mpFontCollection = pSVData->maGDIData.mpScreenFontList->Clone();
+ mxFontCollection.reset(pSVData->maGDIData.mxScreenFontList->Clone());
mxFontCache.reset(new ImplFontCache);
}
else
{
- mpGraphics->GetDevFontList( mpFontCollection );
+ mpGraphics->GetDevFontList( mxFontCollection.get() );
}
}
}
@@ -622,7 +620,7 @@ void OutputDevice::ImplClearAllFontData(bool bNewFontLists)
pSVData->maGDIData.mxScreenFontCache->Invalidate();
if ( bNewFontLists )
{
- pSVData->maGDIData.mpScreenFontList->Clear();
+ pSVData->maGDIData.mxScreenFontList->Clear();
vcl::Window * pFrame = pSVData->maWinData.mpFirstFrame;
if ( pFrame )
{
@@ -630,7 +628,7 @@ void OutputDevice::ImplClearAllFontData(bool bNewFontLists)
{
OutputDevice *pDevice = pFrame;
pDevice->mpGraphics->ClearDevFontCache();
- pDevice->mpGraphics->GetDevFontList(pFrame->mpWindowImpl->mpFrameData->mpFontCollection);
+ pDevice->mpGraphics->GetDevFontList(pFrame->mpWindowImpl->mpFrameData->mxFontCollection.get());
}
}
}
@@ -869,7 +867,7 @@ vcl::Font OutputDevice::GetDefaultFont( DefaultFontType nType, LanguageType eLan
sal_Int32 nIndex = 0;
do
{
- PhysicalFontFamily* pFontFamily = pOutDev->mpFontCollection->FindFontFamily( GetNextFontToken( aSearch, nIndex ) );
+ PhysicalFontFamily* pFontFamily = pOutDev->mxFontCollection->FindFontFamily( GetNextFontToken( aSearch, nIndex ) );
if( pFontFamily )
{
AddTokenFontName( aName, pFontFamily->GetFamilyName() );
@@ -915,7 +913,7 @@ vcl::Font OutputDevice::GetDefaultFont( DefaultFontType nType, LanguageType eLan
// get the name of the first available font
float fExactHeight = static_cast<float>(aSize.Height());
- rtl::Reference<LogicalFontInstance> pFontInstance = pOutDev->mxFontCache->GetFontInstance( pOutDev->mpFontCollection, aFont, aSize, fExactHeight );
+ rtl::Reference<LogicalFontInstance> pFontInstance = pOutDev->mxFontCache->GetFontInstance( pOutDev->mxFontCollection.get(), aFont, aSize, fExactHeight );
if (pFontInstance)
{
assert(pFontInstance->GetFontFace());
@@ -974,15 +972,15 @@ vcl::Font OutputDevice::GetDefaultFont( DefaultFontType nType, LanguageType eLan
void OutputDevice::ImplInitFontList() const
{
- if( !mpFontCollection->Count() )
+ if( !mxFontCollection->Count() )
{
if( mpGraphics || AcquireGraphics() )
{
SAL_INFO( "vcl.gdi", "OutputDevice::ImplInitFontList()" );
- mpGraphics->GetDevFontList( mpFontCollection );
+ mpGraphics->GetDevFontList(mxFontCollection.get());
// There is absolutely no way there should be no fonts available on the device
- if( !mpFontCollection->Count() )
+ if( !mxFontCollection->Count() )
{
OUString aError( "Application error: no fonts and no vcl resource found on your system" );
OUString aResStr(VclResId(SV_ACCESSERROR_NO_FONTS));
@@ -1028,7 +1026,7 @@ bool OutputDevice::ImplNewFont() const
if( mpPDFWriter )
{
const ImplSVData* pSVData = ImplGetSVData();
- if( mpFontCollection == pSVData->maGDIData.mpScreenFontList
+ if( mxFontCollection == pSVData->maGDIData.mxScreenFontList
|| mxFontCache == pSVData->maGDIData.mxScreenFontCache )
const_cast<OutputDevice&>(*this).ImplUpdateFontData();
}
@@ -1065,7 +1063,7 @@ bool OutputDevice::ImplNewFont() const
// get font entry
rtl::Reference<LogicalFontInstance> pOldFontInstance = mpFontInstance;
- mpFontInstance = mxFontCache->GetFontInstance( mpFontCollection, maFont, aSize, fExactHeight );
+ mpFontInstance = mxFontCache->GetFontInstance( mxFontCollection.get(), maFont, aSize, fExactHeight );
bool bNewFontInstance = pOldFontInstance.get() != mpFontInstance.get();
pOldFontInstance.clear();
@@ -1380,7 +1378,7 @@ std::unique_ptr<SalLayout> OutputDevice::ImplGlyphFallbackLayout( std::unique_pt
// if the system-specific glyph fallback is active
aFontSelData.mpFontInstance = mpFontInstance; // reset the fontinstance to base-level
- rtl::Reference<LogicalFontInstance> pFallbackFont = mxFontCache->GetGlyphFallbackFont( mpFontCollection,
+ rtl::Reference<LogicalFontInstance> pFallbackFont = mxFontCache->GetGlyphFallbackFont( mxFontCollection.get(),
aFontSelData, nFallbackLevel, aMissingCodes );
if( !pFallbackFont )
break;
diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx
index a251389990bd..340c0a68f495 100644
--- a/vcl/source/outdev/outdev.cxx
+++ b/vcl/source/outdev/outdev.cxx
@@ -58,7 +58,6 @@ OutputDevice::OutputDevice() :
mpNextGraphics = nullptr;
mpMetaFile = nullptr;
mpFontInstance = nullptr;
- mpFontCollection = nullptr;
mpDeviceFontList = nullptr;
mpDeviceFontSizeList = nullptr;
mpOutDevStateStack.reset(new OutDevStateStack);
@@ -181,15 +180,7 @@ void OutputDevice::dispose()
mxFontCache.reset();
// release ImplFontList specific to this OutputDevice
- // TODO: refcount ImplFontList
- if( mpFontCollection
- && (mpFontCollection != ImplGetSVData()->maGDIData.mpScreenFontList)
- && (ImplGetSVData()->maGDIData.mpScreenFontList != nullptr) )
- {
- mpFontCollection->Clear();
- delete mpFontCollection;
- mpFontCollection = nullptr;
- }
+ mxFontCollection.reset();
mpAlphaVDev.disposeAndClear();
mpPrevGraphics.clear();
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 91e772478013..243d30a93beb 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -778,7 +778,7 @@ ImplFrameData::ImplFrameData( vcl::Window *pWindow )
mpFocusWin = nullptr;
mpMouseMoveWin = nullptr;
mpMouseDownWin = nullptr;
- mpFontCollection = pSVData->maGDIData.mpScreenFontList;
+ mxFontCollection = pSVData->maGDIData.mxScreenFontList;
mxFontCache = pSVData->maGDIData.mxScreenFontCache;
mnFocusId = nullptr;
mnMouseMoveId = nullptr;
@@ -1079,8 +1079,8 @@ void Window::ImplInit( vcl::Window* pParent, WinBits nStyle, SystemParentData* p
mpWindowImpl->mpRealParent = pRealParent;
// #99318: make sure fontcache and list is available before call to SetSettings
- mpFontCollection = mpWindowImpl->mpFrameData->mpFontCollection;
- mxFontCache = mpWindowImpl->mpFrameData->mxFontCache;
+ mxFontCollection = mpWindowImpl->mpFrameData->mxFontCollection;
+ mxFontCache = mpWindowImpl->mpFrameData->mxFontCache;
if ( mpWindowImpl->mbFrame )
{
@@ -1753,7 +1753,7 @@ void Window::ImplNewInputContext()
else
aSize.setHeight( (12*pFocusWin->mnDPIY)/72 );
}
- pFontInstance = pFocusWin->mxFontCache->GetFontInstance( pFocusWin->mpFontCollection,
+ pFontInstance = pFocusWin->mxFontCache->GetFontInstance( pFocusWin->mxFontCollection.get(),
rFont, aSize, static_cast<float>(aSize.Height()) );
if ( pFontInstance )
aNewContext.mpFont = pFontInstance;
diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx
index 61f76dd74608..7ea455715136 100644
--- a/vcl/win/gdi/salfont.cxx
+++ b/vcl/win/gdi/salfont.cxx
@@ -288,7 +288,7 @@ bool WinGlyphFallbackSubstititution::FindFontSubstitute( FontSelectPattern& rFon
// first level fallback:
// try use the locale specific default fonts defined in VCL.xcu
- const PhysicalFontCollection* pFontCollection = ImplGetSVData()->maGDIData.mpScreenFontList;
+ const PhysicalFontCollection* pFontCollection = ImplGetSVData()->maGDIData.mxScreenFontList.get();
PhysicalFontFamily* pFontFamily = findDevFontListByLocale(*pFontCollection, aLanguageTag);
if( pFontFamily )
{