include/vcl/outdev.hxx | 49 --- include/vcl/outdevmap.hxx | 44 +++ include/vcl/outdevstate.hxx | 78 ++++++ vcl/Library_vcl.mk | 1 vcl/source/app/settings.cxx | 14 - vcl/source/outdev/outdev.cxx | 475 +++++++++++++++----------------------- vcl/source/outdev/outdevstate.cxx | 82 ++++++ 7 files changed, 415 insertions(+), 328 deletions(-)
New commits: commit 5e57796c80d5f6e1888ff40bed5b4c1a081db93a Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Fri Apr 25 22:55:47 2014 +1000 VCL: Move OutputDevice map structures to own VCL header file Change-Id: Ifbaa51018d47fde72be80d5d1870fdda214db320 diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index c0a2306..40f3345 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -33,8 +33,8 @@ #include <vcl/wall.hxx> #include <vcl/metaact.hxx> #include <vcl/salnativewidgets.hxx> - #include <vcl/outdevstate.hxx> +#include <vcl/outdevmap.hxx> #include <basegfx/vector/b2enums.hxx> #include <basegfx/polygon/b2dpolypolygon.hxx> @@ -122,26 +122,6 @@ namespace vcl struct FontCapabilities; } -// OutputDevice-Data - -struct ImplMapRes -{ - long mnMapOfsX; // Offset in X direction - long mnMapOfsY; // Offset in Y direction - long mnMapScNumX; // Scaling factor - numerator in X direction - long mnMapScNumY; // Scaling factor - numerator in Y direction - long mnMapScDenomX; // Scaling factor - denominator in X direction - long mnMapScDenomY; // Scaling factor - denominator in Y direction -}; - -struct ImplThresholdRes -{ - long mnThresLogToPixX; // Thresholds for calculation - long mnThresLogToPixY; // with BigInts - long mnThresPixToLogX; // "" - long mnThresPixToLogY; // "" -}; - // OutputDevice-Types // Flags for DrawText() diff --git a/include/vcl/outdevmap.hxx b/include/vcl/outdevmap.hxx new file mode 100644 index 0000000..cda9e62 --- /dev/null +++ b/include/vcl/outdevmap.hxx @@ -0,0 +1,44 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_INC_OUTDEVMAP_HXX +#define INCLUDED_VCL_INC_OUTDEVMAP_HXX + + +struct ImplMapRes +{ + long mnMapOfsX; // Offset in X direction + long mnMapOfsY; // Offset in Y direction + long mnMapScNumX; // Scaling factor - numerator in X direction + long mnMapScNumY; // Scaling factor - numerator in Y direction + long mnMapScDenomX; // Scaling factor - denominator in X direction + long mnMapScDenomY; // Scaling factor - denominator in Y direction +}; + +struct ImplThresholdRes +{ + long mnThresLogToPixX; // Thresholds for calculation + long mnThresLogToPixY; // with BigInts + long mnThresPixToLogX; // "" + long mnThresPixToLogY; // "" +}; + +#endif // INCLUDED_VCL_INC_OUTDEVMAP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit cf3c6cb40f99fa1761a6af3d7447a899b9447868 Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Fri Apr 25 20:56:35 2014 +1000 VCL: ImpObjStack replaced with std::stack ImpObjStack uses it's own home-grown stack and stack functions. There is a function that unwinds the stack, but really it would be better if we used std::set. In fact, this is better, because the name ImpObjStack is really not terribly descriptive. I've replaced it with a stack of OutDevState objects. Change-Id: I87bdd4340ad77b7ffd9ff176fa5a9ffeac8b8666 diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index da3b4b3..c0a2306 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -34,6 +34,8 @@ #include <vcl/metaact.hxx> #include <vcl/salnativewidgets.hxx> +#include <vcl/outdevstate.hxx> + #include <basegfx/vector/b2enums.hxx> #include <basegfx/polygon/b2dpolypolygon.hxx> @@ -45,6 +47,7 @@ #include <com/sun/star/uno/Reference.h> #include <vector> +#include <stack> #if defined UNX #define GLYPH_FONT_HEIGHT 128 @@ -57,7 +60,7 @@ struct ImplOutDevData; class ImplFontEntry; -struct ImplObjStack; +class OutDevState; struct SystemGraphicsData; struct SystemFontData; struct SystemTextLayoutData; @@ -141,25 +144,6 @@ struct ImplThresholdRes // OutputDevice-Types -// Flags for Push() -#define PUSH_LINECOLOR ((sal_uInt16)0x0001) -#define PUSH_FILLCOLOR ((sal_uInt16)0x0002) -#define PUSH_FONT ((sal_uInt16)0x0004) -#define PUSH_TEXTCOLOR ((sal_uInt16)0x0008) -#define PUSH_MAPMODE ((sal_uInt16)0x0010) -#define PUSH_CLIPREGION ((sal_uInt16)0x0020) -#define PUSH_RASTEROP ((sal_uInt16)0x0040) -#define PUSH_TEXTFILLCOLOR ((sal_uInt16)0x0080) -#define PUSH_TEXTALIGN ((sal_uInt16)0x0100) -#define PUSH_REFPOINT ((sal_uInt16)0x0200) -#define PUSH_TEXTLINECOLOR ((sal_uInt16)0x0400) -#define PUSH_TEXTLAYOUTMODE ((sal_uInt16)0x0800) -#define PUSH_TEXTLANGUAGE ((sal_uInt16)0x1000) -#define PUSH_OVERLINECOLOR ((sal_uInt16)0x2000) -#define PUSH_ALLTEXT (PUSH_TEXTCOLOR | PUSH_TEXTFILLCOLOR | PUSH_TEXTLINECOLOR | PUSH_OVERLINECOLOR | PUSH_TEXTALIGN | PUSH_TEXTLAYOUTMODE | PUSH_TEXTLANGUAGE) -#define PUSH_ALLFONT (PUSH_ALLTEXT | PUSH_FONT) -#define PUSH_ALL ((sal_uInt16)0xFFFF) - // Flags for DrawText() #define TEXT_DRAW_DISABLE ((sal_uInt16)0x0001) #define TEXT_DRAW_MNEMONIC ((sal_uInt16)0x0002) @@ -300,7 +284,7 @@ private: mutable PhysicalFontCollection* mpFontCollection; mutable ImplGetDevFontList* mpGetDevFontList; mutable ImplGetDevSizeList* mpGetDevSizeList; - ImplObjStack* mpObjStack; + std::stack < OutDevState* >* mpOutDevStateStack; ImplOutDevData* mpOutDevData; VCLXGraphicsList_impl* mpUnoGraphicsList; vcl::PDFWriterImpl* mpPDFWriter; diff --git a/include/vcl/outdevstate.hxx b/include/vcl/outdevstate.hxx new file mode 100644 index 0000000..1a08845 --- /dev/null +++ b/include/vcl/outdevstate.hxx @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_INC_OUTDEVSTATE_HXX +#define INCLUDED_VCL_INC_OUTDEVSTATE_HXX + +#include <sal/types.h> + +#include <vcl/mapmod.hxx> +#include <vcl/region.hxx> +#include <vcl/font.hxx> +#include <vcl/vclenum.hxx> + +#include <tools/gen.hxx> +#include <tools/color.hxx> +#include <tools/fontenum.hxx> + +// Flags for OutputDevice::Push() and OutDevState +#define PUSH_LINECOLOR ((sal_uInt16)0x0001) +#define PUSH_FILLCOLOR ((sal_uInt16)0x0002) +#define PUSH_FONT ((sal_uInt16)0x0004) +#define PUSH_TEXTCOLOR ((sal_uInt16)0x0008) +#define PUSH_MAPMODE ((sal_uInt16)0x0010) +#define PUSH_CLIPREGION ((sal_uInt16)0x0020) +#define PUSH_RASTEROP ((sal_uInt16)0x0040) +#define PUSH_TEXTFILLCOLOR ((sal_uInt16)0x0080) +#define PUSH_TEXTALIGN ((sal_uInt16)0x0100) +#define PUSH_REFPOINT ((sal_uInt16)0x0200) +#define PUSH_TEXTLINECOLOR ((sal_uInt16)0x0400) +#define PUSH_TEXTLAYOUTMODE ((sal_uInt16)0x0800) +#define PUSH_TEXTLANGUAGE ((sal_uInt16)0x1000) +#define PUSH_OVERLINECOLOR ((sal_uInt16)0x2000) +#define PUSH_ALLTEXT (PUSH_TEXTCOLOR | PUSH_TEXTFILLCOLOR | PUSH_TEXTLINECOLOR | PUSH_OVERLINECOLOR | PUSH_TEXTALIGN | PUSH_TEXTLAYOUTMODE | PUSH_TEXTLANGUAGE) +#define PUSH_ALLFONT (PUSH_ALLTEXT | PUSH_FONT) +#define PUSH_ALL ((sal_uInt16)0xFFFF) + +class OutDevState +{ +public: + ~OutDevState(); + + MapMode* mpMapMode; + bool mbMapActive; + Region* mpClipRegion; + Color* mpLineColor; + Color* mpFillColor; + Font* mpFont; + Color* mpTextColor; + Color* mpTextFillColor; + Color* mpTextLineColor; + Color* mpOverlineColor; + Point* mpRefPoint; + TextAlign meTextAlign; + RasterOp meRasterOp; + sal_uLong mnTextLayoutMode; + LanguageType meTextLanguage; + sal_uInt16 mnFlags; +}; + +#endif // INCLUDED_VCL_INC_OUTDEVSTATE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index 4d40694..1d22db8 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -235,6 +235,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/gdi/octree \ vcl/source/gdi/oldprintadaptor \ vcl/source/outdev/outdev \ + vcl/source/outdev/outdevstate \ vcl/source/outdev/clipping \ vcl/source/outdev/polygon \ vcl/source/outdev/transparent \ diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx index ad9bfa1..ff37b98 100644 --- a/vcl/source/app/settings.cxx +++ b/vcl/source/app/settings.cxx @@ -33,13 +33,13 @@ #include <vcl/IconThemeScanner.hxx> #include <vcl/IconThemeSelector.hxx> #include <vcl/IconThemeInfo.hxx> -#include "vcl/svapp.hxx" -#include "vcl/event.hxx" -#include "vcl/settings.hxx" -#include "vcl/i18nhelp.hxx" -#include "vcl/configsettings.hxx" -#include "vcl/gradient.hxx" -#include "vcl/outdev.hxx" +#include <vcl/svapp.hxx> +#include <vcl/event.hxx> +#include <vcl/settings.hxx> +#include <vcl/i18nhelp.hxx> +#include <vcl/configsettings.hxx> +#include <vcl/gradient.hxx> +#include <vcl/outdev.hxx> #include "unotools/fontcfg.hxx" #include "unotools/localedatawrapper.hxx" diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index b141ea5..270f4b3 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -31,9 +31,11 @@ #include <vcl/outdev.hxx> #include <vcl/unowrap.hxx> #include <vcl/settings.hxx> -#include <svsys.h> #include <vcl/sysdata.hxx> +#include <vcl/outdevstate.hxx> + +#include <svsys.h> #include <salgdi.hxx> #include <sallayout.hxx> #include <salframe.hxx> @@ -43,6 +45,7 @@ #include <window.h> #include <outdev.h> #include <outdata.hxx> + #include "PhysicalFontCollection.hxx" #include <basegfx/point/b2dpoint.hxx> @@ -62,6 +65,7 @@ #include <comphelper/processfactory.hxx> #include <numeric> +#include <stack> #ifdef DISABLE_DYNLOADING // Linking all needed LO code into one .so/executable, these already @@ -73,76 +77,6 @@ namespace { } #endif -struct ImplObjStack -{ - ImplObjStack* mpPrev; - MapMode* mpMapMode; - bool mbMapActive; - Region* mpClipRegion; - Color* mpLineColor; - Color* mpFillColor; - Font* mpFont; - Color* mpTextColor; - Color* mpTextFillColor; - Color* mpTextLineColor; - Color* mpOverlineColor; - Point* mpRefPoint; - TextAlign meTextAlign; - RasterOp meRasterOp; - sal_uLong mnTextLayoutMode; - LanguageType meTextLanguage; - sal_uInt16 mnFlags; -}; - -static void ImplDeleteObjStack( ImplObjStack* pObjStack ) -{ - if ( pObjStack->mnFlags & PUSH_LINECOLOR ) - { - if ( pObjStack->mpLineColor ) - delete pObjStack->mpLineColor; - } - if ( pObjStack->mnFlags & PUSH_FILLCOLOR ) - { - if ( pObjStack->mpFillColor ) - delete pObjStack->mpFillColor; - } - if ( pObjStack->mnFlags & PUSH_FONT ) - delete pObjStack->mpFont; - if ( pObjStack->mnFlags & PUSH_TEXTCOLOR ) - delete pObjStack->mpTextColor; - if ( pObjStack->mnFlags & PUSH_TEXTFILLCOLOR ) - { - if ( pObjStack->mpTextFillColor ) - delete pObjStack->mpTextFillColor; - } - if ( pObjStack->mnFlags & PUSH_TEXTLINECOLOR ) - { - if ( pObjStack->mpTextLineColor ) - delete pObjStack->mpTextLineColor; - } - if ( pObjStack->mnFlags & PUSH_OVERLINECOLOR ) - { - if ( pObjStack->mpOverlineColor ) - delete pObjStack->mpOverlineColor; - } - if ( pObjStack->mnFlags & PUSH_MAPMODE ) - { - if ( pObjStack->mpMapMode ) - delete pObjStack->mpMapMode; - } - if ( pObjStack->mnFlags & PUSH_CLIPREGION ) - { - if ( pObjStack->mpClipRegion ) - delete pObjStack->mpClipRegion; - } - if ( pObjStack->mnFlags & PUSH_REFPOINT ) - { - if ( pObjStack->mpRefPoint ) - delete pObjStack->mpRefPoint; - } - - delete pObjStack; -} bool OutputDevice::ImplIsAntiparallel() const { @@ -175,7 +109,7 @@ OutputDevice::OutputDevice() : mpFontCollection = NULL; mpGetDevFontList = NULL; mpGetDevSizeList = NULL; - mpObjStack = NULL; + mpOutDevStateStack = new std::stack< OutDevState* >(); mpOutDevData = NULL; mpPDFWriter = NULL; mpAlphaVDev = NULL; @@ -277,25 +211,25 @@ OutputDevice::~OutputDevice() delete mpOutDevData; } - ImplObjStack* pData = mpObjStack; - if ( pData ) + // for some reason, we haven't removed state from the stack properly + if ( !mpOutDevStateStack->empty() ) { SAL_WARN( "vcl.gdi", "OutputDevice::~OutputDevice(): OutputDevice::Push() calls != OutputDevice::Pop() calls" ); - while ( pData ) + while ( !mpOutDevStateStack->empty() ) { - ImplObjStack* pTemp = pData; - pData = pData->mpPrev; - ImplDeleteObjStack( pTemp ); + mpOutDevStateStack->pop(); } } // release the active font instance if( mpFontEntry ) mpFontCache->Release( mpFontEntry ); + // remove cached results of GetDevFontList/GetDevSizeList // TODO: use smart pointers for them if( mpGetDevFontList ) delete mpGetDevFontList; + if( mpGetDevSizeList ) delete mpGetDevSizeList; @@ -323,6 +257,191 @@ OutputDevice::~OutputDevice() delete mpAlphaVDev; } +void OutputDevice::Push( sal_uInt16 nFlags ) +{ + + if ( mpMetaFile ) + mpMetaFile->AddAction( new MetaPushAction( nFlags ) ); + + OutDevState* pState = new OutDevState; + + pState->mnFlags = nFlags; + + if ( nFlags & PUSH_LINECOLOR ) + { + if ( mbLineColor ) + pState->mpLineColor = new Color( maLineColor ); + else + pState->mpLineColor = NULL; + } + if ( nFlags & PUSH_FILLCOLOR ) + { + if ( mbFillColor ) + pState->mpFillColor = new Color( maFillColor ); + else + pState->mpFillColor = NULL; + } + if ( nFlags & PUSH_FONT ) + pState->mpFont = new Font( maFont ); + if ( nFlags & PUSH_TEXTCOLOR ) + pState->mpTextColor = new Color( GetTextColor() ); + if ( nFlags & PUSH_TEXTFILLCOLOR ) + { + if ( IsTextFillColor() ) + pState->mpTextFillColor = new Color( GetTextFillColor() ); + else + pState->mpTextFillColor = NULL; + } + if ( nFlags & PUSH_TEXTLINECOLOR ) + { + if ( IsTextLineColor() ) + pState->mpTextLineColor = new Color( GetTextLineColor() ); + else + pState->mpTextLineColor = NULL; + } + if ( nFlags & PUSH_OVERLINECOLOR ) + { + if ( IsOverlineColor() ) + pState->mpOverlineColor = new Color( GetOverlineColor() ); + else + pState->mpOverlineColor = NULL; + } + if ( nFlags & PUSH_TEXTALIGN ) + pState->meTextAlign = GetTextAlign(); + if( nFlags & PUSH_TEXTLAYOUTMODE ) + pState->mnTextLayoutMode = GetLayoutMode(); + if( nFlags & PUSH_TEXTLANGUAGE ) + pState->meTextLanguage = GetDigitLanguage(); + if ( nFlags & PUSH_RASTEROP ) + pState->meRasterOp = GetRasterOp(); + if ( nFlags & PUSH_MAPMODE ) + { + pState->mpMapMode = new MapMode( maMapMode ); + pState->mbMapActive = mbMap; + } + if ( nFlags & PUSH_CLIPREGION ) + { + if ( mbClipRegion ) + pState->mpClipRegion = new Region( maRegion ); + else + pState->mpClipRegion = NULL; + } + if ( nFlags & PUSH_REFPOINT ) + { + if ( mbRefPoint ) + pState->mpRefPoint = new Point( maRefPoint ); + else + pState->mpRefPoint = NULL; + } + + mpOutDevStateStack->push( pState ); + + if( mpAlphaVDev ) + mpAlphaVDev->Push(); +} + +void OutputDevice::Pop() +{ + + if( mpMetaFile ) + mpMetaFile->AddAction( new MetaPopAction() ); + + GDIMetaFile* pOldMetaFile = mpMetaFile; + OutDevState* pState = new OutDevState; + mpMetaFile = NULL; + + if ( mpOutDevStateStack->empty() ) + { + SAL_WARN( "vcl.gdi", "OutputDevice::Pop() without OutputDevice::Push()" ); + return; + } + + if( mpAlphaVDev ) + mpAlphaVDev->Pop(); + + if ( pState->mnFlags & PUSH_LINECOLOR ) + { + if ( pState->mpLineColor ) + SetLineColor( *pState->mpLineColor ); + else + SetLineColor(); + } + + if ( pState->mnFlags & PUSH_FILLCOLOR ) + { + if ( pState->mpFillColor ) + SetFillColor( *pState->mpFillColor ); + else + SetFillColor(); + } + + if ( pState->mnFlags & PUSH_FONT ) + SetFont( *pState->mpFont ); + + if ( pState->mnFlags & PUSH_TEXTCOLOR ) + SetTextColor( *pState->mpTextColor ); + + if ( pState->mnFlags & PUSH_TEXTFILLCOLOR ) + { + if ( pState->mpTextFillColor ) + SetTextFillColor( *pState->mpTextFillColor ); + else + SetTextFillColor(); + } + + if ( pState->mnFlags & PUSH_TEXTLINECOLOR ) + { + if ( pState->mpTextLineColor ) + SetTextLineColor( *pState->mpTextLineColor ); + else + SetTextLineColor(); + } + + if ( pState->mnFlags & PUSH_OVERLINECOLOR ) + { + if ( pState->mpOverlineColor ) + SetOverlineColor( *pState->mpOverlineColor ); + else + SetOverlineColor(); + } + + if ( pState->mnFlags & PUSH_TEXTALIGN ) + SetTextAlign( pState->meTextAlign ); + + if( pState->mnFlags & PUSH_TEXTLAYOUTMODE ) + SetLayoutMode( pState->mnTextLayoutMode ); + + if( pState->mnFlags & PUSH_TEXTLANGUAGE ) + SetDigitLanguage( pState->meTextLanguage ); + + if ( pState->mnFlags & PUSH_RASTEROP ) + SetRasterOp( pState->meRasterOp ); + + if ( pState->mnFlags & PUSH_MAPMODE ) + { + if ( pState->mpMapMode ) + SetMapMode( *pState->mpMapMode ); + else + SetMapMode(); + mbMap = pState->mbMapActive; + } + + if ( pState->mnFlags & PUSH_CLIPREGION ) + SetDeviceClipRegion( pState->mpClipRegion ); + + if ( pState->mnFlags & PUSH_REFPOINT ) + { + if ( pState->mpRefPoint ) + SetRefPoint( *pState->mpRefPoint ); + else + SetRefPoint(); + } + + mpOutDevStateStack->pop(); + + mpMetaFile = pOldMetaFile; +} + bool OutputDevice::supportsOperation( OutDevSupportType eType ) const { if( !mpGraphics ) @@ -993,188 +1112,7 @@ void OutputDevice::SetRefPoint( const Point& rRefPoint ) sal_uInt32 OutputDevice::GetGCStackDepth() const { - const ImplObjStack* pData = mpObjStack; - sal_uInt32 nDepth = 0; - while( pData ) - { - nDepth++; - pData = pData->mpPrev; - } - return nDepth; -} - -void OutputDevice::Push( sal_uInt16 nFlags ) -{ - - if ( mpMetaFile ) - mpMetaFile->AddAction( new MetaPushAction( nFlags ) ); - - ImplObjStack* pData = new ImplObjStack; - pData->mpPrev = mpObjStack; - mpObjStack = pData; - - pData->mnFlags = nFlags; - - if ( nFlags & PUSH_LINECOLOR ) - { - if ( mbLineColor ) - pData->mpLineColor = new Color( maLineColor ); - else - pData->mpLineColor = NULL; - } - if ( nFlags & PUSH_FILLCOLOR ) - { - if ( mbFillColor ) - pData->mpFillColor = new Color( maFillColor ); - else - pData->mpFillColor = NULL; - } - if ( nFlags & PUSH_FONT ) - pData->mpFont = new Font( maFont ); - if ( nFlags & PUSH_TEXTCOLOR ) - pData->mpTextColor = new Color( GetTextColor() ); - if ( nFlags & PUSH_TEXTFILLCOLOR ) - { - if ( IsTextFillColor() ) - pData->mpTextFillColor = new Color( GetTextFillColor() ); - else - pData->mpTextFillColor = NULL; - } - if ( nFlags & PUSH_TEXTLINECOLOR ) - { - if ( IsTextLineColor() ) - pData->mpTextLineColor = new Color( GetTextLineColor() ); - else - pData->mpTextLineColor = NULL; - } - if ( nFlags & PUSH_OVERLINECOLOR ) - { - if ( IsOverlineColor() ) - pData->mpOverlineColor = new Color( GetOverlineColor() ); - else - pData->mpOverlineColor = NULL; - } - if ( nFlags & PUSH_TEXTALIGN ) - pData->meTextAlign = GetTextAlign(); - if( nFlags & PUSH_TEXTLAYOUTMODE ) - pData->mnTextLayoutMode = GetLayoutMode(); - if( nFlags & PUSH_TEXTLANGUAGE ) - pData->meTextLanguage = GetDigitLanguage(); - if ( nFlags & PUSH_RASTEROP ) - pData->meRasterOp = GetRasterOp(); - if ( nFlags & PUSH_MAPMODE ) - { - pData->mpMapMode = new MapMode( maMapMode ); - pData->mbMapActive = mbMap; - } - if ( nFlags & PUSH_CLIPREGION ) - { - if ( mbClipRegion ) - pData->mpClipRegion = new Region( maRegion ); - else - pData->mpClipRegion = NULL; - } - if ( nFlags & PUSH_REFPOINT ) - { - if ( mbRefPoint ) - pData->mpRefPoint = new Point( maRefPoint ); - else - pData->mpRefPoint = NULL; - } - - if( mpAlphaVDev ) - mpAlphaVDev->Push(); -} - -void OutputDevice::Pop() -{ - - if( mpMetaFile ) - mpMetaFile->AddAction( new MetaPopAction() ); - - GDIMetaFile* pOldMetaFile = mpMetaFile; - ImplObjStack* pData = mpObjStack; - mpMetaFile = NULL; - - if ( !pData ) - { - SAL_WARN( "vcl.gdi", "OutputDevice::Pop() without OutputDevice::Push()" ); - return; - } - - if( mpAlphaVDev ) - mpAlphaVDev->Pop(); - - mpObjStack = pData->mpPrev; - - if ( pData->mnFlags & PUSH_LINECOLOR ) - { - if ( pData->mpLineColor ) - SetLineColor( *pData->mpLineColor ); - else - SetLineColor(); - } - if ( pData->mnFlags & PUSH_FILLCOLOR ) - { - if ( pData->mpFillColor ) - SetFillColor( *pData->mpFillColor ); - else - SetFillColor(); - } - if ( pData->mnFlags & PUSH_FONT ) - SetFont( *pData->mpFont ); - if ( pData->mnFlags & PUSH_TEXTCOLOR ) - SetTextColor( *pData->mpTextColor ); - if ( pData->mnFlags & PUSH_TEXTFILLCOLOR ) - { - if ( pData->mpTextFillColor ) - SetTextFillColor( *pData->mpTextFillColor ); - else - SetTextFillColor(); - } - if ( pData->mnFlags & PUSH_TEXTLINECOLOR ) - { - if ( pData->mpTextLineColor ) - SetTextLineColor( *pData->mpTextLineColor ); - else - SetTextLineColor(); - } - if ( pData->mnFlags & PUSH_OVERLINECOLOR ) - { - if ( pData->mpOverlineColor ) - SetOverlineColor( *pData->mpOverlineColor ); - else - SetOverlineColor(); - } - if ( pData->mnFlags & PUSH_TEXTALIGN ) - SetTextAlign( pData->meTextAlign ); - if( pData->mnFlags & PUSH_TEXTLAYOUTMODE ) - SetLayoutMode( pData->mnTextLayoutMode ); - if( pData->mnFlags & PUSH_TEXTLANGUAGE ) - SetDigitLanguage( pData->meTextLanguage ); - if ( pData->mnFlags & PUSH_RASTEROP ) - SetRasterOp( pData->meRasterOp ); - if ( pData->mnFlags & PUSH_MAPMODE ) - { - if ( pData->mpMapMode ) - SetMapMode( *pData->mpMapMode ); - else - SetMapMode(); - mbMap = pData->mbMapActive; - } - if ( pData->mnFlags & PUSH_CLIPREGION ) - SetDeviceClipRegion( pData->mpClipRegion ); - if ( pData->mnFlags & PUSH_REFPOINT ) - { - if ( pData->mpRefPoint ) - SetRefPoint( *pData->mpRefPoint ); - else - SetRefPoint(); - } - - ImplDeleteObjStack( pData ); - - mpMetaFile = pOldMetaFile; + return mpOutDevStateStack->size(); } void OutputDevice::SetConnectMetaFile( GDIMetaFile* pMtf ) diff --git a/vcl/source/outdev/outdevstate.cxx b/vcl/source/outdev/outdevstate.cxx new file mode 100644 index 0000000..da4b004 --- /dev/null +++ b/vcl/source/outdev/outdevstate.cxx @@ -0,0 +1,82 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/types.h> + +#include <vcl/mapmod.hxx> +#include <vcl/region.hxx> +#include <vcl/font.hxx> +#include <vcl/vclenum.hxx> + +#include <tools/gen.hxx> +#include <tools/color.hxx> +#include <tools/fontenum.hxx> + +#include <vcl/outdevstate.hxx> +#include "sallayout.hxx" + +OutDevState::~OutDevState() +{ + if ( mnFlags & PUSH_LINECOLOR ) + { + if ( mpLineColor ) + delete mpLineColor; + } + if ( mnFlags & PUSH_FILLCOLOR ) + { + if ( mpFillColor ) + delete mpFillColor; + } + if ( mnFlags & PUSH_FONT ) + delete mpFont; + if ( mnFlags & PUSH_TEXTCOLOR ) + delete mpTextColor; + if ( mnFlags & PUSH_TEXTFILLCOLOR ) + { + if ( mpTextFillColor ) + delete mpTextFillColor; + } + if ( mnFlags & PUSH_TEXTLINECOLOR ) + { + if ( mpTextLineColor ) + delete mpTextLineColor; + } + if ( mnFlags & PUSH_OVERLINECOLOR ) + { + if ( mpOverlineColor ) + delete mpOverlineColor; + } + if ( mnFlags & PUSH_MAPMODE ) + { + if ( mpMapMode ) + delete mpMapMode; + } + if ( mnFlags & PUSH_CLIPREGION ) + { + if ( mpClipRegion ) + delete mpClipRegion; + } + if ( mnFlags & PUSH_REFPOINT ) + { + if ( mpRefPoint ) + delete mpRefPoint; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit ef3b68886c2bf851ac4ff7511c0418ba8393ee29 Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Fri Apr 25 15:41:25 2014 +1000 VCL: Remove unused and deprecated debug check function Change-Id: I3fcf630b8a0ef5be0d98ddc11a746e07885bae53 diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 82f6df2..da3b4b3 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -265,8 +265,6 @@ class VCLXGraphics; typedef ::std::vector< VCLXGraphics* > VCLXGraphicsList_impl; -const char* ImplDbgCheckOutputDevice( const void* pObj ); - sal_uLong AdjustTwoRect( SalTwoRect& rTwoRect, const Size& rSizePix ); void AdjustTwoRect( SalTwoRect& rTwoRect, const Rectangle& rValidSrcRect ); @@ -290,7 +288,6 @@ class VCL_DLLPUBLIC OutputDevice friend class Window; friend class WorkWindow; friend class vcl::PDFWriterImpl; - friend const char* ImplDbgCheckOutputDevice( const void* pObj ); friend void ImplHandleResize( Window* pWindow, long nNewWidth, long nNewHeight ); private: diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index 77265fb..b141ea5 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -73,23 +73,6 @@ namespace { } #endif -#ifdef DBG_UTIL -const char* ImplDbgCheckOutputDevice( const void* pObj ) -{ - DBG_TESTSOLARMUTEX(); - - const OutputDevice* pOutDev = (OutputDevice*)pObj; - - if ( (pOutDev->GetOutDevType() != OUTDEV_DONTKNOW) && - (pOutDev->GetOutDevType() != OUTDEV_WINDOW) && - (pOutDev->GetOutDevType() != OUTDEV_PRINTER) && - (pOutDev->GetOutDevType() != OUTDEV_VIRDEV) ) - return "OutputDevice data overwrite"; - - return NULL; -} -#endif - struct ImplObjStack { ImplObjStack* mpPrev; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits