[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.1' - editeng/source

Kohei Yoshida kohei.yoshida at collabora.com
Sat Jan 28 01:05:44 UTC 2017


 editeng/source/editeng/eerdll.cxx   |   12 ++++++++++--
 editeng/source/editeng/eerdll2.hxx  |    4 ++++
 editeng/source/editeng/impedit.hxx  |    2 +-
 editeng/source/editeng/impedit2.cxx |   32 ++++++++++----------------------
 4 files changed, 25 insertions(+), 25 deletions(-)

New commits:
commit 2cc1436430349590fcc699380997f0b65d914709
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Jan 23 22:01:37 2017 -0500

    tdf#103927: Share single standard VirtualDevice instance.
    
    To avoid creating excessive amounts of VirtualDevice instances. Also,
    since we now have VclPtr, we shouldn't need this bOwnerOfRefDev flag.
    
    This fixes tdf#102688 as well as other GDI-Limit related issues.
    
    See tdf#105469 for other bugs this may fix.
    
    (cherry picked from commit b41186a2fc49e440890b8c86e5367352ffaf9cd6)
    (cherry picked from commit fab2f546d1fb3ceaf5ee5d4d728f1728a8f1e7f3)
    (cherry picked from commit bac2baa785ffc75160de2d15da60901152da33de)
    
     Conflicts:
    	editeng/source/editeng/eerdll2.hxx
    	editeng/source/editeng/impedit2.cxx
    
    Change-Id: Ieda242786c6376c7ac249a9f6d469b670f1ac177

diff --git a/editeng/source/editeng/eerdll.cxx b/editeng/source/editeng/eerdll.cxx
index fad7bb1..f11a3c9 100644
--- a/editeng/source/editeng/eerdll.cxx
+++ b/editeng/source/editeng/eerdll.cxx
@@ -70,6 +70,7 @@
 #include <editeng/forbiddencharacterstable.hxx>
 #include <editeng/justifyitem.hxx>
 #include <rtl/instance.hxx>
+#include <tools/mapunit.hxx>
 
 using namespace ::com::sun::star;
 
@@ -83,9 +84,11 @@ EditDLL& EditDLL::Get()
     return theEditDLL::get();
 }
 
-GlobalEditData::GlobalEditData()
+GlobalEditData::GlobalEditData() :
+    ppDefItems(nullptr),
+    mpVirDev(VclPtr<VirtualDevice>::Create())
 {
-    ppDefItems = nullptr;
+    mpVirDev->SetMapMode(MAP_TWIP);
 }
 
 GlobalEditData::~GlobalEditData()
@@ -193,6 +196,11 @@ uno::Reference< linguistic2::XLanguageGuessing > GlobalEditData::GetLanguageGues
     return xLanguageGuesser;
 }
 
+VclPtr<VirtualDevice> GlobalEditData::GetStdVirtualDevice()
+{
+    return mpVirDev;
+}
+
 EditResId::EditResId(sal_uInt16 nId)
     : ResId(nId, *EditDLL::GetResMgr())
 {
diff --git a/editeng/source/editeng/eerdll2.hxx b/editeng/source/editeng/eerdll2.hxx
index 62b2b2a..f50c559 100644
--- a/editeng/source/editeng/eerdll2.hxx
+++ b/editeng/source/editeng/eerdll2.hxx
@@ -25,6 +25,7 @@
 #include <rtl/ref.hxx>
 
 class SfxPoolItem;
+class VirtualDevice;
 
 class GlobalEditData
 {
@@ -33,6 +34,7 @@ private:
     SfxPoolItem**   ppDefItems;
 
     rtl::Reference<SvxForbiddenCharactersTable> xForbiddenCharsTable;
+    VclPtr<VirtualDevice> mpVirDev;
 
 public:
                     GlobalEditData();
@@ -43,6 +45,8 @@ public:
     rtl::Reference<SvxForbiddenCharactersTable> GetForbiddenCharsTable();
     void            SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> xForbiddenChars ) { xForbiddenCharsTable = xForbiddenChars; }
     css::uno::Reference< css::linguistic2::XLanguageGuessing > GetLanguageGuesser();
+
+    VclPtr<VirtualDevice> GetStdVirtualDevice();
 };
 
 #endif // INCLUDED_EDITENG_SOURCE_EDITENG_EERDLL2_HXX
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index 9a737d3..db74d61 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -423,6 +423,7 @@ private:
 
     VclPtr< VirtualDevice> pVirtDev;
     VclPtr< OutputDevice > pRefDev;
+    VclPtr<VirtualDevice> mpOwnDev;
 
     svtools::ColorConfig*   pColorConfig;
     mutable SvtCTLOptions*  pCTLOptions;
@@ -508,7 +509,6 @@ private:
     bool            bIsInUndo:1;
     bool            bUpdate:1;
     bool            bUndoEnabled:1;
-    bool            bOwnerOfRefDev:1;
     bool            bDowning:1;
     bool            bUseAutoColor:1;
     bool            bForceAutoColor:1;
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index 4572c71..7aaf2cc 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -95,7 +95,6 @@ ImpEditEngine::ImpEditEngine( EditEngine* pEE, SfxItemPool* pItemPool ) :
     bIsInUndo(false),
     bUpdate(true),
     bUndoEnabled(true),
-    bOwnerOfRefDev(false),
     bDowning(false),
     bUseAutoColor(true),
     bForceAutoColor(false),
@@ -174,6 +173,7 @@ ImpEditEngine::~ImpEditEngine()
     bDowning = true;
     SetUpdateMode( false );
 
+    mpOwnDev.disposeAndClear();
     pVirtDev.disposeAndClear();
     delete pEmptyItemSet;
     delete pUndoManager;
@@ -181,26 +181,15 @@ ImpEditEngine::~ImpEditEngine()
     delete mpIMEInfos;
     delete pColorConfig;
     delete pCTLOptions;
-    if ( bOwnerOfRefDev )
-        pRefDev.disposeAndClear();
     delete pSpellInfo;
 }
 
 void ImpEditEngine::SetRefDevice( OutputDevice* pRef )
 {
-    if ( bOwnerOfRefDev )
-        pRefDev.disposeAndClear();
-
-    if ( !pRef )
-    {
-        pRefDev = VclPtr<VirtualDevice>::Create();
-        pRefDev->SetMapMode( MAP_TWIP );
-        bOwnerOfRefDev = true;
-    } else
-    {
+    if (pRef)
         pRefDev = pRef;
-        bOwnerOfRefDev = false;
-    }
+    else
+        pRefDev = EditDLL::Get().GetGlobalData()->GetStdVirtualDevice();
 
     nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width();
 
@@ -216,13 +205,12 @@ void ImpEditEngine::SetRefMapMode( const MapMode& rMapMode )
     if ( GetRefDevice()->GetMapMode() == rMapMode )
         return;
 
-    if ( !bOwnerOfRefDev )
-    {
-        pRefDev = VclPtr<VirtualDevice>::Create();
-        pRefDev->SetMapMode( MAP_TWIP );
-        SetRefDevice( pRefDev );
-        bOwnerOfRefDev = true;
-    }
+    mpOwnDev.disposeAndClear();
+    mpOwnDev = VclPtr<VirtualDevice>::Create();
+    pRefDev = mpOwnDev;
+    pRefDev->SetMapMode( MAP_TWIP );
+    SetRefDevice( pRefDev );
+
     pRefDev->SetMapMode( rMapMode );
     nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width();
     if ( IsFormatted() )


More information about the Libreoffice-commits mailing list