include/vcl/outdev.hxx | 2 +- vcl/inc/svdata.hxx | 2 +- vcl/inc/window.h | 2 +- vcl/source/app/svmain.cxx | 5 ++--- vcl/source/gdi/print.cxx | 12 +++++------- vcl/source/gdi/virdev.cxx | 7 +++---- vcl/source/outdev/font.cxx | 42 ++++++++++++++++++++---------------------- vcl/source/outdev/outdev.cxx | 11 +---------- vcl/source/window/window.cxx | 8 ++++---- vcl/win/gdi/salfont.cxx | 2 +- 10 files changed, 39 insertions(+), 54 deletions(-)
New commits: commit d9ab7be6c2e4494846081b089710f4dd0b1d2ad3 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sun Aug 19 21:17:52 2018 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Mon Aug 20 15:20:45 2018 +0200 TODO: refcount ImplFontList Change-Id: Ie125f1ac9c14a41e25c3e54beafca2f9e34e4c6f Reviewed-on: https://gerrit.libreoffice.org/59310 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 28dab9a0df9c..ff37b971b344 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -340,7 +340,7 @@ private: GDIMetaFile* mpMetaFile; mutable rtl::Reference<LogicalFontInstance> mpFontInstance; mutable std::shared_ptr<ImplFontCache> mxFontCache; - mutable PhysicalFontCollection* mpFontCollection; + mutable std::shared_ptr<PhysicalFontCollection> mxFontCollection; mutable std::unique_ptr<ImplDeviceFontList> mpDeviceFontList; mutable std::unique_ptr<ImplDeviceFontSizeList> mpDeviceFontSizeList; std::unique_ptr<OutDevStateStack> mpOutDevStateStack; 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 ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits