diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-08-19 18:21:01 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-08-20 14:40:05 +0200 |
commit | 7d44fb6d97f629839bb896142ccb4ce0c55db707 (patch) | |
tree | 5838bb831fb558649fd02d98c0cdffab0e116a37 | |
parent | 401cba4c20fbc930f034168872642428d7459218 (diff) |
TODO: refcount ImplFontCache
Change-Id: Ia4499c2a1515aebaff9edf0e843fc66c7fb1414e
Reviewed-on: https://gerrit.libreoffice.org/59309
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/vcl/outdev.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/svdata.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/window.h | 4 | ||||
-rw-r--r-- | vcl/source/app/svmain.cxx | 5 | ||||
-rw-r--r-- | vcl/source/gdi/print.cxx | 13 | ||||
-rw-r--r-- | vcl/source/gdi/virdev.cxx | 7 | ||||
-rw-r--r-- | vcl/source/outdev/font.cxx | 20 | ||||
-rw-r--r-- | vcl/source/outdev/outdev.cxx | 10 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 6 |
9 files changed, 27 insertions, 42 deletions
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 553baf20e591..28dab9a0df9c 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -339,7 +339,7 @@ private: mutable VclPtr<OutputDevice> mpNextGraphics; ///< Next output device in list GDIMetaFile* mpMetaFile; mutable rtl::Reference<LogicalFontInstance> mpFontInstance; - mutable ImplFontCache* mpFontCache; + mutable std::shared_ptr<ImplFontCache> mxFontCache; mutable PhysicalFontCollection* mpFontCollection; mutable std::unique_ptr<ImplDeviceFontList> mpDeviceFontList; mutable std::unique_ptr<ImplDeviceFontSizeList> mpDeviceFontSizeList; diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx index 407f1ceff165..7b35a0283e93 100644 --- a/vcl/inc/svdata.hxx +++ b/vcl/inc/svdata.hxx @@ -185,7 +185,7 @@ struct ImplSVGDIData VclPtr<Printer> mpLastPrinter; // Last Printer ImplPrnQueueList* mpPrinterQueueList = nullptr; // List of all printer queue PhysicalFontCollection* mpScreenFontList = nullptr; // Screen-Font-List - ImplFontCache* mpScreenFontCache = nullptr; // Screen-Font-Cache + std::shared_ptr<ImplFontCache> mxScreenFontCache; // Screen-Font-Cache ImplDirectFontSubstitution* mpDirectFontSubst = nullptr; // Font-Substitutions defined in Tools->Options->Fonts GraphicConverter* mpGrfConverter = nullptr; // Converter for graphics long mnAppFontX = 0; // AppFont X-Numenator for 40/tel Width diff --git a/vcl/inc/window.h b/vcl/inc/window.h index 0e2ee4a7cb6f..f1a5f66ef830 100644 --- a/vcl/inc/window.h +++ b/vcl/inc/window.h @@ -127,9 +127,9 @@ struct ImplFrameData VclPtr<vcl::Window> mpFocusWin; //< focus window (is also set, when frame doesn't have the focus) 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 + std::vector<VclPtr<vcl::Window> > maOwnerDrawList; //< List of system windows with owner draw decoration PhysicalFontCollection* mpFontCollection; //< Font-List for this frame - ImplFontCache* mpFontCache; //< Font-Cache 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 ImplSVEvent * mnFocusId; //< FocusId for PostUserLink diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx index 432d6335db54..dcd049cd86b8 100644 --- a/vcl/source/app/svmain.cxx +++ b/vcl/source/app/svmain.cxx @@ -361,7 +361,7 @@ bool InitVCL() // Initialize global data pSVData->maGDIData.mpScreenFontList = new PhysicalFontCollection; - pSVData->maGDIData.mpScreenFontCache = new ImplFontCache; + pSVData->maGDIData.mxScreenFontCache.reset(new ImplFontCache); pSVData->maGDIData.mpGrfConverter = new GraphicConverter; g_bIsLeanException = getenv("LO_LEAN_EXCEPTION") != nullptr; @@ -617,8 +617,7 @@ void DeInitVCL() delete pSVData->maGDIData.mpScreenFontList; pSVData->maGDIData.mpScreenFontList = nullptr; - delete pSVData->maGDIData.mpScreenFontCache; - pSVData->maGDIData.mpScreenFontCache = nullptr; + pSVData->maGDIData.mxScreenFontCache.reset(); // Deinit Sal if (pSVData->mpDefInst) diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx index b11b453395c8..877c85e45315 100644 --- a/vcl/source/gdi/print.cxx +++ b/vcl/source/gdi/print.cxx @@ -678,7 +678,7 @@ void Printer::ImplInit( SalPrinterQueueInfo* pInfo ) // Init data ImplUpdatePageData(); mpFontCollection = new PhysicalFontCollection(); - mpFontCache = new ImplFontCache(); + mxFontCache.reset(new ImplFontCache); mpGraphics->GetDevFontList( mpFontCollection ); } @@ -692,7 +692,7 @@ void Printer::ImplInitDisplay() mpDisplayDev = VclPtr<VirtualDevice>::Create(); mpFontCollection = pSVData->maGDIData.mpScreenFontList; - mpFontCache = pSVData->maGDIData.mpScreenFontCache; + mxFontCache = pSVData->maGDIData.mxScreenFontCache; mnDPIX = mpDisplayDev->mnDPIX; mnDPIY = mpDisplayDev->mnDPIY; } @@ -936,8 +936,7 @@ void Printer::dispose() mpFontInstance.clear(); mpDeviceFontList.reset(); mpDeviceFontSizeList.reset(); - delete mpFontCache; - mpFontCache = nullptr; + mxFontCache.reset(); // font list deleted by OutputDevice dtor } @@ -1074,9 +1073,8 @@ bool Printer::SetPrinterProps( const Printer* pPrinter ) mpDeviceFontList.reset(); mpDeviceFontSizeList.reset(); // clean up font list - delete mpFontCache; + mxFontCache.reset(); delete mpFontCollection; - mpFontCache = nullptr; mpFontCollection = nullptr; mbInitFont = true; @@ -1104,9 +1102,8 @@ bool Printer::SetPrinterProps( const Printer* pPrinter ) mpFontInstance.clear(); mpDeviceFontList.reset(); mpDeviceFontSizeList.reset(); - delete mpFontCache; + mxFontCache.reset(); delete mpFontCollection; - mpFontCache = nullptr; mpFontCollection = nullptr; mbInitFont = true; mbNewFont = true; diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx index 4f3b65b58ede..cecdfa53ef76 100644 --- a/vcl/source/gdi/virdev.cxx +++ b/vcl/source/gdi/virdev.cxx @@ -169,7 +169,7 @@ void VirtualDevice::ImplInitVirDev( const OutputDevice* pOutDev, meOutDevType = OUTDEV_VIRDEV; mbDevOutput = true; mpFontCollection = pSVData->maGDIData.mpScreenFontList; - mpFontCache = pSVData->maGDIData.mpScreenFontCache; + mxFontCache = pSVData->maGDIData.mxScreenFontCache; mnDPIX = pOutDev->mnDPIX; mnDPIY = pOutDev->mnDPIY; mnDPIScalePercentage = pOutDev->mnDPIScalePercentage; @@ -496,15 +496,14 @@ void VirtualDevice::ImplSetReferenceDevice( RefDevMode i_eRefDevMode, sal_Int32 ImplSVData* pSVData = ImplGetSVData(); if( mpFontCollection && (mpFontCollection != pSVData->maGDIData.mpScreenFontList) ) delete mpFontCollection; - if( mpFontCache && (mpFontCache != pSVData->maGDIData.mpScreenFontCache) ) - delete mpFontCache; + mxFontCache.reset(); // get font list with scalable fonts only AcquireGraphics(); mpFontCollection = pSVData->maGDIData.mpScreenFontList->Clone(); // prepare to use new font lists - mpFontCache = new ImplFontCache(); + mxFontCache.reset(new ImplFontCache); } sal_uInt16 VirtualDevice::GetBitCount() const diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx index d41ba14a0414..f79c0a0493ee 100644 --- a/vcl/source/outdev/font.cxx +++ b/vcl/source/outdev/font.cxx @@ -531,8 +531,8 @@ void OutputDevice::ImplClearFontData( const bool bNewFontLists ) { ImplSVData* pSVData = ImplGetSVData(); - if( mpFontCache && mpFontCache != pSVData->maGDIData.mpScreenFontCache ) - mpFontCache->Invalidate(); + if (mxFontCache && mxFontCache != pSVData->maGDIData.mxScreenFontCache) + mxFontCache->Invalidate(); if ( bNewFontLists ) { @@ -546,10 +546,8 @@ void OutputDevice::ImplClearFontData( const bool bNewFontLists ) { if( mpFontCollection && mpFontCollection != pSVData->maGDIData.mpScreenFontList ) delete mpFontCollection; - if( mpFontCache && mpFontCache != pSVData->maGDIData.mpScreenFontCache ) - delete mpFontCache; + mxFontCache.reset(); mpFontCollection = nullptr; - mpFontCache = nullptr; } } } @@ -586,7 +584,7 @@ void OutputDevice::ImplRefreshFontData( const bool bNewFontLists ) if( mpPDFWriter ) { mpFontCollection = pSVData->maGDIData.mpScreenFontList->Clone(); - mpFontCache = new ImplFontCache(); + mxFontCache.reset(new ImplFontCache); } else { @@ -621,7 +619,7 @@ void OutputDevice::ImplClearAllFontData(bool bNewFontLists) ImplUpdateFontDataForAllFrames( &OutputDevice::ImplClearFontData, bNewFontLists ); // clear global font lists to have them updated - pSVData->maGDIData.mpScreenFontCache->Invalidate(); + pSVData->maGDIData.mxScreenFontCache->Invalidate(); if ( bNewFontLists ) { pSVData->maGDIData.mpScreenFontList->Clear(); @@ -917,7 +915,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->mpFontCache->GetFontInstance( pOutDev->mpFontCollection, aFont, aSize, fExactHeight ); + rtl::Reference<LogicalFontInstance> pFontInstance = pOutDev->mxFontCache->GetFontInstance( pOutDev->mpFontCollection, aFont, aSize, fExactHeight ); if (pFontInstance) { assert(pFontInstance->GetFontFace()); @@ -1031,7 +1029,7 @@ bool OutputDevice::ImplNewFont() const { const ImplSVData* pSVData = ImplGetSVData(); if( mpFontCollection == pSVData->maGDIData.mpScreenFontList - || mpFontCache == pSVData->maGDIData.mpScreenFontCache ) + || mxFontCache == pSVData->maGDIData.mxScreenFontCache ) const_cast<OutputDevice&>(*this).ImplUpdateFontData(); } @@ -1067,7 +1065,7 @@ bool OutputDevice::ImplNewFont() const // get font entry rtl::Reference<LogicalFontInstance> pOldFontInstance = mpFontInstance; - mpFontInstance = mpFontCache->GetFontInstance( mpFontCollection, maFont, aSize, fExactHeight ); + mpFontInstance = mxFontCache->GetFontInstance( mpFontCollection, maFont, aSize, fExactHeight ); bool bNewFontInstance = pOldFontInstance.get() != mpFontInstance.get(); pOldFontInstance.clear(); @@ -1382,7 +1380,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 = mpFontCache->GetGlyphFallbackFont( mpFontCollection, + rtl::Reference<LogicalFontInstance> pFallbackFont = mxFontCache->GetGlyphFallbackFont( mpFontCollection, aFontSelData, nFallbackLevel, aMissingCodes ); if( !pFallbackFont ) break; diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index 901b20580fdf..a251389990bd 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; - mpFontCache = nullptr; mpFontCollection = nullptr; mpDeviceFontList = nullptr; mpDeviceFontSizeList = nullptr; @@ -179,14 +178,7 @@ void OutputDevice::dispose() mpDeviceFontSizeList.reset(); // release ImplFontCache specific to this OutputDevice - // TODO: refcount ImplFontCache - if( mpFontCache - && (mpFontCache != ImplGetSVData()->maGDIData.mpScreenFontCache) - && (ImplGetSVData()->maGDIData.mpScreenFontCache != nullptr) ) - { - delete mpFontCache; - mpFontCache = nullptr; - } + mxFontCache.reset(); // release ImplFontList specific to this OutputDevice // TODO: refcount ImplFontList diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 08f61fe76f8f..91e772478013 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -779,7 +779,7 @@ ImplFrameData::ImplFrameData( vcl::Window *pWindow ) mpMouseMoveWin = nullptr; mpMouseDownWin = nullptr; mpFontCollection = pSVData->maGDIData.mpScreenFontList; - mpFontCache = pSVData->maGDIData.mpScreenFontCache; + mxFontCache = pSVData->maGDIData.mxScreenFontCache; mnFocusId = nullptr; mnMouseMoveId = nullptr; mnLastMouseX = -1; @@ -1080,7 +1080,7 @@ void Window::ImplInit( vcl::Window* pParent, WinBits nStyle, SystemParentData* p // #99318: make sure fontcache and list is available before call to SetSettings mpFontCollection = mpWindowImpl->mpFrameData->mpFontCollection; - mpFontCache = mpWindowImpl->mpFrameData->mpFontCache; + mxFontCache = mpWindowImpl->mpFrameData->mxFontCache; if ( mpWindowImpl->mbFrame ) { @@ -1753,7 +1753,7 @@ void Window::ImplNewInputContext() else aSize.setHeight( (12*pFocusWin->mnDPIY)/72 ); } - pFontInstance = pFocusWin->mpFontCache->GetFontInstance( pFocusWin->mpFontCollection, + pFontInstance = pFocusWin->mxFontCache->GetFontInstance( pFocusWin->mpFontCollection, rFont, aSize, static_cast<float>(aSize.Height()) ); if ( pFontInstance ) aNewContext.mpFont = pFontInstance; |