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.

Change-Id: I97a6f553a178b32bc173b83a6716185d126f97e1
Reviewed-on: https://gerrit.libreoffice.org/33508
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
This commit is contained in:
Kohei Yoshida
2017-01-23 22:01:37 -05:00
committed by Kohei Yoshida
parent 326729ce54
commit b41186a2fc
4 changed files with 21 additions and 25 deletions

View File

@@ -70,6 +70,7 @@
#include <editeng/forbiddencharacterstable.hxx> #include <editeng/forbiddencharacterstable.hxx>
#include <editeng/justifyitem.hxx> #include <editeng/justifyitem.hxx>
#include <rtl/instance.hxx> #include <rtl/instance.hxx>
#include <tools/mapunit.hxx>
using namespace ::com::sun::star; using namespace ::com::sun::star;
@@ -83,9 +84,11 @@ EditDLL& EditDLL::Get()
return theEditDLL::get(); return theEditDLL::get();
} }
GlobalEditData::GlobalEditData() GlobalEditData::GlobalEditData() :
ppDefItems(nullptr),
mpVirDev(VclPtr<VirtualDevice>::Create())
{ {
ppDefItems = nullptr; mpVirDev->SetMapMode(MapUnit::MapTwip);
} }
GlobalEditData::~GlobalEditData() GlobalEditData::~GlobalEditData()
@@ -194,6 +197,11 @@ uno::Reference< linguistic2::XLanguageGuessing > const & GlobalEditData::GetLang
return xLanguageGuesser; return xLanguageGuesser;
} }
VclPtr<VirtualDevice> GlobalEditData::GetStdVirtualDevice()
{
return mpVirDev;
}
EditResId::EditResId(sal_uInt16 nId) EditResId::EditResId(sal_uInt16 nId)
: ResId(nId, *EditDLL::GetResMgr()) : ResId(nId, *EditDLL::GetResMgr())
{ {

View File

@@ -25,6 +25,7 @@
#include <rtl/ref.hxx> #include <rtl/ref.hxx>
class SfxPoolItem; class SfxPoolItem;
class VirtualDevice;
class GlobalEditData class GlobalEditData
{ {
@@ -33,6 +34,7 @@ private:
std::vector<SfxPoolItem*>* ppDefItems; std::vector<SfxPoolItem*>* ppDefItems;
rtl::Reference<SvxForbiddenCharactersTable> xForbiddenCharsTable; rtl::Reference<SvxForbiddenCharactersTable> xForbiddenCharsTable;
VclPtr<VirtualDevice> mpVirDev;
public: public:
GlobalEditData(); GlobalEditData();
@@ -43,6 +45,8 @@ public:
rtl::Reference<SvxForbiddenCharactersTable> const & GetForbiddenCharsTable(); rtl::Reference<SvxForbiddenCharactersTable> const & GetForbiddenCharsTable();
void SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> const & xForbiddenChars ) { xForbiddenCharsTable = xForbiddenChars; } void SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> const & xForbiddenChars ) { xForbiddenCharsTable = xForbiddenChars; }
css::uno::Reference< css::linguistic2::XLanguageGuessing > const & GetLanguageGuesser(); css::uno::Reference< css::linguistic2::XLanguageGuessing > const & GetLanguageGuesser();
VclPtr<VirtualDevice> GetStdVirtualDevice();
}; };
#endif // INCLUDED_EDITENG_SOURCE_EDITENG_EERDLL2_HXX #endif // INCLUDED_EDITENG_SOURCE_EDITENG_EERDLL2_HXX

View File

@@ -513,7 +513,6 @@ private:
bool bIsInUndo:1; bool bIsInUndo:1;
bool bUpdate:1; bool bUpdate:1;
bool bUndoEnabled:1; bool bUndoEnabled:1;
bool bOwnerOfRefDev:1;
bool bDowning:1; bool bDowning:1;
bool bUseAutoColor:1; bool bUseAutoColor:1;
bool bForceAutoColor:1; bool bForceAutoColor:1;

View File

@@ -95,7 +95,6 @@ ImpEditEngine::ImpEditEngine( EditEngine* pEE, SfxItemPool* pItemPool ) :
bIsInUndo(false), bIsInUndo(false),
bUpdate(true), bUpdate(true),
bUndoEnabled(true), bUndoEnabled(true),
bOwnerOfRefDev(false),
bDowning(false), bDowning(false),
bUseAutoColor(true), bUseAutoColor(true),
bForceAutoColor(false), bForceAutoColor(false),
@@ -184,26 +183,15 @@ ImpEditEngine::~ImpEditEngine()
delete mpIMEInfos; delete mpIMEInfos;
delete pColorConfig; delete pColorConfig;
delete pCTLOptions; delete pCTLOptions;
if ( bOwnerOfRefDev )
pRefDev.disposeAndClear();
delete pSpellInfo; delete pSpellInfo;
} }
void ImpEditEngine::SetRefDevice( OutputDevice* pRef ) void ImpEditEngine::SetRefDevice( OutputDevice* pRef )
{ {
if ( bOwnerOfRefDev ) if (pRef)
pRefDev.disposeAndClear();
if ( !pRef )
{
pRefDev = VclPtr<VirtualDevice>::Create();
pRefDev->SetMapMode( MapUnit::MapTwip );
bOwnerOfRefDev = true;
} else
{
pRefDev = pRef; pRefDev = pRef;
bOwnerOfRefDev = false; else
} pRefDev = EditDLL::Get().GetGlobalData()->GetStdVirtualDevice();
nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width(); nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width();
@@ -219,13 +207,10 @@ void ImpEditEngine::SetRefMapMode( const MapMode& rMapMode )
if ( GetRefDevice()->GetMapMode() == rMapMode ) if ( GetRefDevice()->GetMapMode() == rMapMode )
return; return;
if ( !bOwnerOfRefDev ) pRefDev = VclPtr<VirtualDevice>::Create();
{ pRefDev->SetMapMode( MapUnit::MapTwip );
pRefDev = VclPtr<VirtualDevice>::Create(); SetRefDevice( pRefDev );
pRefDev->SetMapMode( MapUnit::MapTwip );
SetRefDevice( pRefDev );
bOwnerOfRefDev = true;
}
pRefDev->SetMapMode( rMapMode ); pRefDev->SetMapMode( rMapMode );
nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width(); nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width();
if ( IsFormatted() ) if ( IsFormatted() )