canvas/source/vcl/spritecanvashelper.cxx  |    4 +-
 canvas/source/vcl/spritecanvashelper.hxx  |    2 -
 include/svx/sdrpaintwindow.hxx            |    6 +--
 include/svx/svdobj.hxx                    |    3 +
 include/svx/svdpntv.hxx                   |    4 +-
 svx/source/svdraw/sdrpaintwindow.cxx      |   26 +++++++++-------
 svx/source/svdraw/svdedxv.cxx             |    8 ++---
 svx/source/svdraw/svdpntv.cxx             |    8 ++---
 svx/source/svdraw/svdview.cxx             |   14 ++++-----
 svx/source/unodraw/UnoGraphicExporter.cxx |   46 +++++++++++++++---------------
 svx/source/unodraw/unoshape.cxx           |    6 +--
 svx/source/xoutdev/_xoutbmp.cxx           |   38 ++++++++++++------------
 svx/source/xoutdev/xattrbmp.cxx           |   24 +++++++--------
 svx/source/xoutdev/xtabdash.cxx           |   16 +++++-----
 svx/source/xoutdev/xtabgrdt.cxx           |   10 +++---
 svx/source/xoutdev/xtabhtch.cxx           |   16 +++++-----
 svx/source/xoutdev/xtablend.cxx           |   16 +++++-----
 sw/inc/viewsh.hxx                         |   12 +++----
 sw/qa/tiledrendering/tiledrendering.cxx   |    6 +--
 sw/source/core/frmedt/fecopy.cxx          |   18 +++++------
 sw/source/core/layout/paintfrm.cxx        |   14 ++++-----
 sw/source/core/view/vnew.cxx              |    2 -
 sw/source/filter/ww8/wrtww8gr.cxx         |   12 +++----
 vcl/workben/vcldemo.cxx                   |    5 +--
 24 files changed, 160 insertions(+), 156 deletions(-)

New commits:
commit 32f1a7dbca9827642653d314bd96560c093a06ea
Author: Michael Meeks <michael.me...@collabora.com>
Date:   Thu Mar 19 14:38:23 2015 +0000

    Fix OutputDevice members / stack allocation.
    
    Change-Id: Ie57434607b61085a882af40b63d6a4b7aac0d4d3

diff --git a/canvas/source/vcl/spritecanvashelper.cxx 
b/canvas/source/vcl/spritecanvashelper.cxx
index 9164d86..51d01f4 100644
--- a/canvas/source/vcl/spritecanvashelper.cxx
+++ b/canvas/source/vcl/spritecanvashelper.cxx
@@ -324,7 +324,7 @@ namespace vclcanvas
             mpRedrawManager->forEachSprite(
                 ::boost::bind(
                     &spriteRedraw,
-                    ::boost::ref( maVDev.get() ),
+                    ::boost::ref( *maVDev.get() ),
                     _1 ) );
 
             // flush to screen
@@ -582,7 +582,7 @@ namespace vclcanvas
         ::std::for_each( rSortedUpdateSprites.begin(),
                          rSortedUpdateSprites.end(),
                          ::boost::bind( &spriteRedrawStub2,
-                                        ::boost::ref( maVDev.get() ),
+                                        ::boost::ref( *maVDev.get() ),
                                         ::vcl::unotools::b2DPointFromPoint(
                                             aOutputPosition),
                                         _1 ) );
diff --git a/canvas/source/vcl/spritecanvashelper.hxx 
b/canvas/source/vcl/spritecanvashelper.hxx
index 0396217..a6b3c03 100644
--- a/canvas/source/vcl/spritecanvashelper.hxx
+++ b/canvas/source/vcl/spritecanvashelper.hxx
@@ -41,7 +41,7 @@ namespace vclcanvas
     {
     public:
         SpriteCanvasHelper();
-        ~SpriteCanvasHelper()
+        ~SpriteCanvasHelper();
 
         void init( const OutDevProviderSharedPtr& rOutDev,
                    SpriteCanvas&                  rOwningSpriteCanvas,
diff --git a/include/svx/sdrpaintwindow.hxx b/include/svx/sdrpaintwindow.hxx
index 3a1f1ef..d8f0918 100644
--- a/include/svx/sdrpaintwindow.hxx
+++ b/include/svx/sdrpaintwindow.hxx
@@ -50,10 +50,10 @@ PaintTransparentChildren(vcl::Window & rWindow, Rectangle 
const& rPixelRect);
 class SdrPreRenderDevice
 {
     // The original OutputDevice
-    OutputDevice&                                       mrOutputDevice;
+    OutputDevice&          mrOutputDevice;
 
     // The VirtualDevice for PreRendering
-    VirtualDevice                                       maPreRenderDevice;
+    VclPtr<VirtualDevice>  mpPreRenderDevice;
 
 public:
     explicit SdrPreRenderDevice(OutputDevice& rOriginal);
@@ -63,7 +63,7 @@ public:
     void OutputPreRenderDevice(const vcl::Region& rExpandedRegion);
 
     OutputDevice& GetOriginalOutputDevice() const { return mrOutputDevice; }
-    OutputDevice& GetPreRenderDevice() { return maPreRenderDevice; }
+    OutputDevice& GetPreRenderDevice() { return *mpPreRenderDevice.get(); }
 };
 
 
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index fd1f56f..4ecf505 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -24,6 +24,7 @@
 #include <com/sun/star/uno/Any.hxx>
 #include <cppuhelper/weakref.hxx>
 #include <rtl/ustring.hxx>
+#include <vcl/vclptr.hxx>
 #include <svl/lstner.hxx>
 #include <svl/poolitem.hxx>
 #include <svx/svdtypes.hxx>
@@ -172,7 +173,7 @@ class SVX_DLLPUBLIC SdrObjMacroHitRec
 public:
     Point                       aPos;
     Point                       aDownPos;
-    OutputDevice*               pOut;
+    VclPtr<OutputDevice>        pOut;
     const SetOfByte*            pVisiLayer;
     const SdrPageView*          pPageView;
     sal_uInt16                  nTol;
diff --git a/include/svx/svdpntv.hxx b/include/svx/svdpntv.hxx
index 110bb84..347de0b 100644
--- a/include/svx/svdpntv.hxx
+++ b/include/svx/svdpntv.hxx
@@ -134,8 +134,8 @@ protected:
 #ifdef DBG_UTIL
     VclPtr<SdrItemBrowser>      pItemBrowser;
 #endif
-    const OutputDevice*         pActualOutDev; // Nur zum vergleichen
-    OutputDevice*               pDragWin;
+    VclPtr<OutputDevice>        pActualOutDev; // Nur zum vergleichen
+    VclPtr<OutputDevice>        pDragWin;
     SfxStyleSheet*              pDefaultStyleSheet;
 
     OUString                    aAktLayer;     // Aktueller Zeichenlayer
diff --git a/svx/source/svdraw/sdrpaintwindow.cxx 
b/svx/source/svdraw/sdrpaintwindow.cxx
index 27a0cd0..929273c 100644
--- a/svx/source/svdraw/sdrpaintwindow.cxx
+++ b/svx/source/svdraw/sdrpaintwindow.cxx
@@ -113,31 +113,33 @@ void CandidateMgr::PaintTransparentChildren(vcl::Window & 
rWindow, Rectangle con
 }
 
 SdrPreRenderDevice::SdrPreRenderDevice(OutputDevice& rOriginal)
-:   mrOutputDevice(rOriginal)
+:   mrOutputDevice(rOriginal),
+    mpPreRenderDevice(new VirtualDevice())
 {
 }
 
 SdrPreRenderDevice::~SdrPreRenderDevice()
 {
+    mpPreRenderDevice.disposeAndClear();
 }
 
 void SdrPreRenderDevice::PreparePreRenderDevice()
 {
-    // compare size of maPreRenderDevice with size of visible area
-    if(maPreRenderDevice.GetOutputSizePixel() != 
mrOutputDevice.GetOutputSizePixel())
+    // compare size of mpPreRenderDevice with size of visible area
+    if(mpPreRenderDevice->GetOutputSizePixel() != 
mrOutputDevice.GetOutputSizePixel())
     {
-        
maPreRenderDevice.SetOutputSizePixel(mrOutputDevice.GetOutputSizePixel());
+        
mpPreRenderDevice->SetOutputSizePixel(mrOutputDevice.GetOutputSizePixel());
     }
 
     // Also compare the MapModes for zoom/scroll changes
-    if(maPreRenderDevice.GetMapMode() != mrOutputDevice.GetMapMode())
+    if(mpPreRenderDevice->GetMapMode() != mrOutputDevice.GetMapMode())
     {
-        maPreRenderDevice.SetMapMode(mrOutputDevice.GetMapMode());
+        mpPreRenderDevice->SetMapMode(mrOutputDevice.GetMapMode());
     }
 
     // #i29186#
-    maPreRenderDevice.SetDrawMode(mrOutputDevice.GetDrawMode());
-    maPreRenderDevice.SetSettings(mrOutputDevice.GetSettings());
+    mpPreRenderDevice->SetDrawMode(mrOutputDevice.GetDrawMode());
+    mpPreRenderDevice->SetSettings(mrOutputDevice.GetSettings());
 }
 
 void SdrPreRenderDevice::OutputPreRenderDevice(const vcl::Region& 
rExpandedRegion)
@@ -149,9 +151,9 @@ void SdrPreRenderDevice::OutputPreRenderDevice(const 
vcl::Region& rExpandedRegio
 
     // MapModes off
     bool bMapModeWasEnabledDest(mrOutputDevice.IsMapModeEnabled());
-    bool bMapModeWasEnabledSource(maPreRenderDevice.IsMapModeEnabled());
+    bool bMapModeWasEnabledSource(mpPreRenderDevice->IsMapModeEnabled());
     mrOutputDevice.EnableMapMode(false);
-    maPreRenderDevice.EnableMapMode(false);
+    mpPreRenderDevice->EnableMapMode(false);
 
     RectangleVector aRectangles;
     aRegionPixel.GetRegionRectangles(aRectangles);
@@ -165,7 +167,7 @@ void SdrPreRenderDevice::OutputPreRenderDevice(const 
vcl::Region& rExpandedRegio
         mrOutputDevice.DrawOutDev(
             aTopLeft, aSize,
             aTopLeft, aSize,
-            maPreRenderDevice);
+            *mpPreRenderDevice.get());
 
 #ifdef DBG_UTIL
         // #i74769#
@@ -186,7 +188,7 @@ void SdrPreRenderDevice::OutputPreRenderDevice(const 
vcl::Region& rExpandedRegio
     }
 
     mrOutputDevice.EnableMapMode(bMapModeWasEnabledDest);
-    maPreRenderDevice.EnableMapMode(bMapModeWasEnabledSource);
+    mpPreRenderDevice->EnableMapMode(bMapModeWasEnabledSource);
 }
 
 
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index 553af3d..95bd4d3 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -1723,7 +1723,7 @@ void SdrObjEditView::ImpMacroUp(const Point& rUpPos)
         aHitRec.nTol=nMacroTol;
         aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers();
         aHitRec.pPageView=pMacroPV;
-        aHitRec.pOut=pMacroWin;
+        aHitRec.pOut=pMacroWin.get();
         pMacroObj->PaintMacro(*pMacroWin,Rectangle(),aHitRec);
         bMacroDown=false;
     }
@@ -1740,7 +1740,7 @@ void SdrObjEditView::ImpMacroDown(const Point& rDownPos)
         aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers();
         aHitRec.pPageView=pMacroPV;
         aHitRec.bDown=true;
-        aHitRec.pOut=pMacroWin;
+        aHitRec.pOut=pMacroWin.get();
         pMacroObj->PaintMacro(*pMacroWin,Rectangle(),aHitRec);
         bMacroDown=true;
     }
@@ -1756,7 +1756,7 @@ void SdrObjEditView::MovMacroObj(const Point& rPnt)
         aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers();
         aHitRec.pPageView=pMacroPV;
         aHitRec.bDown=bMacroDown;
-        aHitRec.pOut=pMacroWin;
+        aHitRec.pOut=pMacroWin.get();
         bool bDown=pMacroObj->IsMacroHit(aHitRec);
         if (bDown) ImpMacroDown(rPnt);
         else ImpMacroUp(rPnt);
@@ -1784,7 +1784,7 @@ bool SdrObjEditView::EndMacroObj()
         aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers();
         aHitRec.pPageView=pMacroPV;
         aHitRec.bDown=true;
-        aHitRec.pOut=pMacroWin;
+        aHitRec.pOut=pMacroWin.get();
         bool bRet=pMacroObj->DoMacro(aHitRec);
         pMacroObj=NULL;
         pMacroPV=NULL;
diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx
index 5e2952f..93cd90b 100644
--- a/svx/source/svdraw/svdpntv.cxx
+++ b/svx/source/svdraw/svdpntv.cxx
@@ -405,15 +405,15 @@ sal_uInt16 SdrPaintView::ImpGetHitTolLogic(short nHitTol, 
const OutputDevice* pO
 
 void SdrPaintView::TheresNewMapMode()
 {
-    if (pActualOutDev!=NULL) {
-        
nHitTolLog=(sal_uInt16)((OutputDevice*)pActualOutDev)->PixelToLogic(Size(nHitTolPix,0)).Width();
-        
nMinMovLog=(sal_uInt16)((OutputDevice*)pActualOutDev)->PixelToLogic(Size(nMinMovPix,0)).Width();
+    if (pActualOutDev) {
+        
nHitTolLog=(sal_uInt16)pActualOutDev->PixelToLogic(Size(nHitTolPix,0)).Width();
+        
nMinMovLog=(sal_uInt16)pActualOutDev->PixelToLogic(Size(nMinMovPix,0)).Width();
     }
 }
 
 void SdrPaintView::SetActualWin(const OutputDevice* pWin)
 {
-    pActualOutDev=pWin;
+    pActualOutDev = const_cast<OutputDevice *>(pWin);
     TheresNewMapMode();
 }
 
diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
index 18df2e6..9a94bf8 100644
--- a/svx/source/svdraw/svdview.cxx
+++ b/svx/source/svdraw/svdview.cxx
@@ -488,7 +488,7 @@ SdrHitKind SdrView::PickAnything(const Point& rLogicPos, 
SdrViewEvent& rVEvt) co
                 // we currently don't account for ticker text
                 if(pActualOutDev && pActualOutDev->GetOutDevType() == 
OUTDEV_WINDOW)
                 {
-                    OutlinerView aOLV(pOutliner, 
const_cast<vcl::Window*>(static_cast<const vcl::Window*>(pActualOutDev)));
+                    OutlinerView aOLV(pOutliner, 
const_cast<vcl::Window*>(static_cast<const vcl::Window*>(pActualOutDev.get())));
                     const EditView& aEV=aOLV.GetEditView();
                     const SvxFieldItem* 
pItem=aEV.GetField(aTemporaryTextRelativePosition);
                     if (pItem!=NULL) {
@@ -822,7 +822,7 @@ bool SdrView::DoMouseEvent(const SdrViewEvent& rVEvt)
                     if (eHit==SDRHIT_TEXTEDIT)
                     {
                         bool bRet2(pActualOutDev && OUTDEV_WINDOW == 
pActualOutDev->GetOutDevType() &&
-                            SdrBeginTextEdit(rVEvt.pObj, rVEvt.pPV, 
const_cast<vcl::Window*>(static_cast<const vcl::Window*>(pActualOutDev)), 
false, (SdrOutliner*)0L));
+                            SdrBeginTextEdit(rVEvt.pObj, rVEvt.pPV, 
const_cast<vcl::Window*>(static_cast<const vcl::Window*>(pActualOutDev.get())), 
false, (SdrOutliner*)0L));
 
                         if(bRet2)
                         {
@@ -906,7 +906,7 @@ bool SdrView::DoMouseEvent(const SdrViewEvent& rVEvt)
             } else bRet=BegCreateObj(aLogicPos);
         } break;
         case SDREVENT_BEGMACROOBJ: {
-            
bRet=BegMacroObj(aLogicPos,nHitTolLog,rVEvt.pObj,rVEvt.pPV,const_cast<vcl::Window*>(static_cast<const
 vcl::Window*>(pActualOutDev)));
+            
bRet=BegMacroObj(aLogicPos,nHitTolLog,rVEvt.pObj,rVEvt.pPV,const_cast<vcl::Window*>(static_cast<const
 vcl::Window*>(pActualOutDev.get())));
         } break;
         case SDREVENT_BEGTEXTEDIT: {
             if (!IsObjMarked(rVEvt.pObj)) {
@@ -915,7 +915,7 @@ bool SdrView::DoMouseEvent(const SdrViewEvent& rVEvt)
             }
 
             bRet = pActualOutDev && OUTDEV_WINDOW == 
pActualOutDev->GetOutDevType()&&
-                 SdrBeginTextEdit(rVEvt.pObj, rVEvt.pPV, 
const_cast<vcl::Window*>(static_cast<const vcl::Window*>(pActualOutDev)), 
false, (SdrOutliner*)0L);
+                 SdrBeginTextEdit(rVEvt.pObj, rVEvt.pPV, 
const_cast<vcl::Window*>(static_cast<const vcl::Window*>(pActualOutDev.get())), 
false, (SdrOutliner*)0L);
 
             if(bRet)
             {
@@ -927,8 +927,8 @@ bool SdrView::DoMouseEvent(const SdrViewEvent& rVEvt)
         } break;
         default: break;
     } // switch
-    if (bRet && pActualOutDev!=NULL && 
pActualOutDev->GetOutDevType()==OUTDEV_WINDOW) {
-        vcl::Window* pWin=const_cast<vcl::Window*>(static_cast<const 
vcl::Window*>(pActualOutDev));
+    if (bRet && pActualOutDev && 
pActualOutDev->GetOutDevType()==OUTDEV_WINDOW) {
+        vcl::Window* pWin=const_cast<vcl::Window*>(static_cast<const 
vcl::Window*>(pActualOutDev.get()));
         // left mouse button pressed?
         bool bLeftDown=(rVEvt.nMouseCode&MOUSE_LEFT)!=0 && rVEvt.bMouseDown;
         // left mouse button released?
@@ -970,7 +970,7 @@ Pointer SdrView::GetPreferredPointer(const Point& 
rMousePos, const OutputDevice*
         aHitRec.nTol=nMacroTol;
         aHitRec.pVisiLayer=&pMacroPV->GetVisibleLayers();
         aHitRec.pPageView=pMacroPV;
-        aHitRec.pOut=pMacroWin;
+        aHitRec.pOut=pMacroWin.get();
         aHitRec.bDown=bMacroDown;
         return pMacroObj->GetMacroPointer(aHitRec);
     }
diff --git a/svx/source/unodraw/UnoGraphicExporter.cxx 
b/svx/source/unodraw/UnoGraphicExporter.cxx
index 1f837a9..60eb00f 100644
--- a/svx/source/unodraw/UnoGraphicExporter.cxx
+++ b/svx/source/unodraw/UnoGraphicExporter.cxx
@@ -624,7 +624,7 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
     if( !pPage )
         return false;
 
-    VirtualDevice       aVDev;
+    ScopedVclPtr<VirtualDevice> aVDev( new VirtualDevice() );
     const MapMode       aMap( mpDoc->GetScaleUnit(), Point(), 
rSettings.maScaleX, rSettings.maScaleY );
 
     SdrOutliner& rOutl=mpDoc->GetDrawOutliner(NULL);
@@ -704,15 +704,15 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
                 boost::scoped_ptr< SdrView > pLocalView;
                 if( PTR_CAST( FmFormModel, mpDoc ) )
                 {
-                    pLocalView.reset( new FmFormView( PTR_CAST( FmFormModel, 
mpDoc ), &aVDev ) );
+                    pLocalView.reset( new FmFormView( PTR_CAST( FmFormModel, 
mpDoc ), aVDev ) );
                 }
                 else
                 {
-                    pLocalView.reset( new SdrView( mpDoc, &aVDev ) );
+                    pLocalView.reset( new SdrView( mpDoc, aVDev ) );
                 }
 
 
-                boost::scoped_ptr<VirtualDevice> pVDev(CreatePageVDev( pPage, 
nWidthPix, nHeightPix ));
+                ScopedVclPtr<VirtualDevice> pVDev(CreatePageVDev( pPage, 
nWidthPix, nHeightPix ));
 
                 if( pVDev )
                 {
@@ -726,22 +726,22 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
             {
                 GDIMetaFile aMtf;
 
-                aVDev.SetMapMode( aMap );
+                aVDev->SetMapMode( aMap );
                 if( rSettings.mbUseHighContrast )
-                    aVDev.SetDrawMode( aVDev.GetDrawMode() | 
DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | 
DRAWMODE_SETTINGSGRADIENT );
-                aVDev.EnableOutput( false );
-                aMtf.Record( &aVDev );
+                    aVDev->SetDrawMode( aVDev->GetDrawMode() | 
DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | 
DRAWMODE_SETTINGSGRADIENT );
+                aVDev->EnableOutput( false );
+                aMtf.Record( aVDev );
                 Size aNewSize;
 
                 // create a view
                 boost::scoped_ptr< SdrView > pView;
                 if( PTR_CAST( FmFormModel, mpDoc ) )
                 {
-                    pView.reset(new FmFormView( PTR_CAST( FmFormModel, mpDoc 
), &aVDev ));
+                    pView.reset(new FmFormView( PTR_CAST( FmFormModel, mpDoc 
), aVDev ));
                 }
                 else
                 {
-                    pView.reset(new SdrView( mpDoc, &aVDev ));
+                    pView.reset(new SdrView( mpDoc, aVDev ));
                 }
 
                 pView->SetBordVisible( false );
@@ -754,17 +754,17 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
                 const Rectangle aClipRect( aNewOrg, aNewSize );
                 MapMode         aVMap( aMap );
 
-                aVDev.Push();
+                aVDev->Push();
                 aVMap.SetOrigin( Point( -aNewOrg.X(), -aNewOrg.Y() ) );
-                aVDev.SetRelativeMapMode( aVMap );
-                aVDev.IntersectClipRegion( aClipRect );
+                aVDev->SetRelativeMapMode( aVMap );
+                aVDev->IntersectClipRegion( aClipRect );
 
                 // Use new StandardCheckVisisbilityRedirector
                 ImplExportCheckVisisbilityRedirector aRedirector( 
mpCurrentPage );
 
-                pView->CompleteRedraw(&aVDev, vcl::Region(Rectangle(aNewOrg, 
aNewSize)), &aRedirector);
+                pView->CompleteRedraw(aVDev, vcl::Region(Rectangle(aNewOrg, 
aNewSize)), &aRedirector);
 
-                aVDev.Pop();
+                aVDev->Pop();
 
                 aMtf.Stop();
                 aMtf.WindStart();
@@ -907,7 +907,7 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
         if( !bSingleGraphic )
         {
             // create a metafile for all shapes
-            VirtualDevice   aOut;
+            ScopedVclPtr<VirtualDevice> aOut;
 
             // calculate bound rect for all shapes
             Rectangle aBound;
@@ -927,18 +927,18 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
                 }
             }
 
-            aOut.EnableOutput( false );
-            aOut.SetMapMode( aMap );
+            aOut->EnableOutput( false );
+            aOut->SetMapMode( aMap );
             if( rSettings.mbUseHighContrast )
-                aOut.SetDrawMode( aOut.GetDrawMode() | DRAWMODE_SETTINGSLINE | 
DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT );
+                aOut->SetDrawMode( aOut->GetDrawMode() | DRAWMODE_SETTINGSLINE 
| DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT );
 
             GDIMetaFile aMtf;
             aMtf.Clear();
-            aMtf.Record( &aOut );
+            aMtf.Record( aOut );
 
             MapMode aOutMap( aMap );
             aOutMap.SetOrigin( Point( -aBound.TopLeft().X(), 
-aBound.TopLeft().Y() ) );
-            aOut.SetRelativeMapMode( aOutMap );
+            aOut->SetRelativeMapMode( aOutMap );
 
             sdr::contact::DisplayInfo aDisplayInfo;
 
@@ -956,7 +956,7 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
             {
                 // more effective way to paint a vector of SdrObjects. Hand 
over the processed page
                 // to have it in the
-                sdr::contact::ObjectContactOfObjListPainter 
aMultiObjectPainter(aOut, aShapes, mpCurrentPage);
+                sdr::contact::ObjectContactOfObjListPainter 
aMultiObjectPainter(*aOut.get(), aShapes, mpCurrentPage);
                 ImplExportCheckVisisbilityRedirector 
aCheckVisibilityRedirector(mpCurrentPage);
                 
aMultiObjectPainter.SetViewObjectContactRedirector(&aCheckVisibilityRedirector);
 
@@ -966,7 +966,7 @@ bool GraphicExporter::GetGraphic( ExportSettings& 
rSettings, Graphic& aGraphic,
             aMtf.Stop();
             aMtf.WindStart();
 
-            const Size  aExtSize( aOut.PixelToLogic( Size( 0, 0  ) ) );
+            const Size  aExtSize( aOut->PixelToLogic( Size( 0, 0  ) ) );
             Size        aBoundSize( aBound.GetWidth() + ( aExtSize.Width() ),
                                     aBound.GetHeight() + ( aExtSize.Height() ) 
);
 
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 83c6f77..1279c3c 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -670,13 +670,13 @@ uno::Any SvxShape::GetBitmap( bool bMetaFile /* = false 
*/ ) const
     if( !mpObj.is() || mpModel == NULL || !mpObj->IsInserted() || NULL == 
mpObj->GetPage() )
         return aAny;
 
-    VirtualDevice aVDev;
-    aVDev.SetMapMode(MapMode(MAP_100TH_MM));
+    ScopedVclPtr<VirtualDevice> pVDev( new VirtualDevice() );
+    pVDev->SetMapMode(MapMode(MAP_100TH_MM));
 
     SdrModel* pModel = mpObj->GetModel();
     SdrPage* pPage = mpObj->GetPage();
 
-    boost::scoped_ptr<E3dView> pView(new E3dView( pModel, &aVDev ));
+    boost::scoped_ptr<E3dView> pView(new E3dView( pModel, pVDev.get() ));
     pView->hideMarkHandles();
     SdrPageView* pPageView = pView->ShowSdrPage(pPage);
 
diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx
index a24689b..f769704 100644
--- a/svx/source/xoutdev/_xoutbmp.cxx
+++ b/svx/source/xoutdev/_xoutbmp.cxx
@@ -250,27 +250,27 @@ sal_uInt16 XOutBitmap::WriteGraphic( const Graphic& 
rGraphic, OUString& rFileNam
                     {
                         if( pMtfSize_100TH_MM && ( rGraphic.GetType() != 
GRAPHIC_BITMAP ) )
                         {
-                            VirtualDevice aVDev;
-                            const Size    aSize( aVDev.LogicToPixel( 
*pMtfSize_100TH_MM, MAP_100TH_MM ) );
+                            ScopedVclPtr< VirtualDevice > pVDev(new 
VirtualDevice());
+                            const Size    aSize( pVDev->LogicToPixel( 
*pMtfSize_100TH_MM, MAP_100TH_MM ) );
 
-                            if( aVDev.SetOutputSizePixel( aSize ) )
+                            if( pVDev->SetOutputSizePixel( aSize ) )
                             {
-                                const Wallpaper aWallpaper( 
aVDev.GetBackground() );
+                                const Wallpaper aWallpaper( 
pVDev->GetBackground() );
                                 const Point     aPt;
 
-                                aVDev.SetBackground( Wallpaper( Color( 
COL_BLACK ) ) );
-                                aVDev.Erase();
-                                rGraphic.Draw( &aVDev, aPt, aSize );
+                                pVDev->SetBackground( Wallpaper( Color( 
COL_BLACK ) ) );
+                                pVDev->Erase();
+                                rGraphic.Draw( pVDev.get(), aPt, aSize );
 
-                                const Bitmap aBitmap( aVDev.GetBitmap( aPt, 
aSize ) );
+                                const Bitmap aBitmap( pVDev->GetBitmap( aPt, 
aSize ) );
 
-                                aVDev.SetBackground( aWallpaper );
-                                aVDev.Erase();
-                                rGraphic.Draw( &aVDev, aPt, aSize );
+                                pVDev->SetBackground( aWallpaper );
+                                pVDev->Erase();
+                                rGraphic.Draw( pVDev.get(), aPt, aSize );
 
-                                aVDev.SetRasterOp( ROP_XOR );
-                                aVDev.DrawBitmap( aPt, aSize, aBitmap );
-                                aGraphic = BitmapEx( aBitmap, aVDev.GetBitmap( 
aPt, aSize ) );
+                                pVDev->SetRasterOp( ROP_XOR );
+                                pVDev->DrawBitmap( aPt, aSize, aBitmap );
+                                aGraphic = BitmapEx( aBitmap, 
pVDev->GetBitmap( aPt, aSize ) );
                             }
                             else
                                 aGraphic = rGraphic.GetBitmapEx();
@@ -283,13 +283,13 @@ sal_uInt16 XOutBitmap::WriteGraphic( const Graphic& 
rGraphic, OUString& rFileNam
                 {
                     if( pMtfSize_100TH_MM && ( rGraphic.GetType() != 
GRAPHIC_BITMAP ) )
                     {
-                        VirtualDevice   aVDev;
-                        const Size      aSize( aVDev.LogicToPixel( 
*pMtfSize_100TH_MM, MAP_100TH_MM ) );
+                        ScopedVclPtr< VirtualDevice > pVDev(new 
VirtualDevice());
+                        const Size      aSize( pVDev->LogicToPixel( 
*pMtfSize_100TH_MM, MAP_100TH_MM ) );
 
-                        if( aVDev.SetOutputSizePixel( aSize ) )
+                        if( pVDev->SetOutputSizePixel( aSize ) )
                         {
-                            rGraphic.Draw( &aVDev, Point(), aSize );
-                            aGraphic =  aVDev.GetBitmap( Point(), aSize );
+                            rGraphic.Draw( pVDev.get(), Point(), aSize );
+                            aGraphic = pVDev->GetBitmap( Point(), aSize );
                         }
                         else
                             aGraphic = rGraphic.GetBitmap();
diff --git a/svx/source/xoutdev/xattrbmp.cxx b/svx/source/xoutdev/xattrbmp.cxx
index 101f8d7..28b3ab5 100644
--- a/svx/source/xoutdev/xattrbmp.cxx
+++ b/svx/source/xoutdev/xattrbmp.cxx
@@ -138,7 +138,7 @@ const GraphicObject& XOBitmap::GetGraphicObject() const
 
 void XOBitmap::Bitmap2Array()
 {
-    VirtualDevice   aVD;
+    ScopedVclPtr<VirtualDevice> pVDev( new VirtualDevice() );
     bool            bPixelColor = false;
     const Bitmap    aBitmap( GetBitmap() );
     const sal_uInt16    nLines = 8; // type dependent
@@ -146,23 +146,23 @@ void XOBitmap::Bitmap2Array()
     if( !pPixelArray )
         pPixelArray = new sal_uInt16[ nLines * nLines ];
 
-    aVD.SetOutputSizePixel( aBitmap.GetSizePixel() );
-    aVD.DrawBitmap( Point(), aBitmap );
-    aPixelColor = aBckgrColor = aVD.GetPixel( Point() );
+    pVDev->SetOutputSizePixel( aBitmap.GetSizePixel() );
+    pVDev->DrawBitmap( Point(), aBitmap );
+    aPixelColor = aBckgrColor = pVDev->GetPixel( Point() );
 
     // create array and determine foreground and background color
     for( sal_uInt16 i = 0; i < nLines; i++ )
     {
         for( sal_uInt16 j = 0; j < nLines; j++ )
         {
-            if ( aVD.GetPixel( Point( j, i ) ) == aBckgrColor )
+            if ( pVDev->GetPixel( Point( j, i ) ) == aBckgrColor )
                 *( pPixelArray + j + i * nLines ) = 0;
             else
             {
                 *( pPixelArray + j + i * nLines ) = 1;
                 if( !bPixelColor )
                 {
-                    aPixelColor = aVD.GetPixel( Point( j, i ) );
+                    aPixelColor = pVDev->GetPixel( Point( j, i ) );
                     bPixelColor = true;
                 }
             }
@@ -173,13 +173,13 @@ void XOBitmap::Bitmap2Array()
 /// convert array, fore- and background color into a bitmap
 void XOBitmap::Array2Bitmap()
 {
-    VirtualDevice   aVD;
-    sal_uInt16          nLines = 8; // type dependent
+    ScopedVclPtr<VirtualDevice> pVDev( new VirtualDevice() );
+    sal_uInt16 nLines = 8; // type dependent
 
     if( !pPixelArray )
         return;
 
-    aVD.SetOutputSizePixel( Size( nLines, nLines ) );
+    pVDev->SetOutputSizePixel( Size( nLines, nLines ) );
 
     // create bitmap
     for( sal_uInt16 i = 0; i < nLines; i++ )
@@ -187,13 +187,13 @@ void XOBitmap::Array2Bitmap()
         for( sal_uInt16 j = 0; j < nLines; j++ )
         {
             if( *( pPixelArray + j + i * nLines ) == 0 )
-                aVD.DrawPixel( Point( j, i ), aBckgrColor );
+                pVDev->DrawPixel( Point( j, i ), aBckgrColor );
             else
-                aVD.DrawPixel( Point( j, i ), aPixelColor );
+                pVDev->DrawPixel( Point( j, i ), aPixelColor );
         }
     }
 
-    aGraphicObject = GraphicObject( aVD.GetBitmap( Point(), Size( nLines, 
nLines ) ) );
+    aGraphicObject = GraphicObject( pVDev->GetBitmap( Point(), Size( nLines, 
nLines ) ) );
     bGraphicDirty = false;
 }
 
diff --git a/svx/source/xoutdev/xtabdash.cxx b/svx/source/xoutdev/xtabdash.cxx
index 129490a..07d02a1 100644
--- a/svx/source/xoutdev/xtabdash.cxx
+++ b/svx/source/xoutdev/xtabdash.cxx
@@ -135,11 +135,11 @@ Bitmap XDashList::ImpCreateBitmapForXDash(const XDash* 
pDash)
             aStrokeAttribute));
 
     // prepare VirtualDevice
-    VirtualDevice aVirtualDevice;
+    ScopedVclPtr< VirtualDevice > pVirtualDevice(new VirtualDevice());
     const drawinglayer::geometry::ViewInformation2D aNewViewInformation2D;
 
-    aVirtualDevice.SetOutputSizePixel(aSize);
-    aVirtualDevice.SetDrawMode(rStyleSettings.GetHighContrastMode()
+    pVirtualDevice->SetOutputSizePixel(aSize);
+    pVirtualDevice->SetDrawMode(rStyleSettings.GetHighContrastMode()
         ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | 
DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
         : DRAWMODE_DEFAULT);
 
@@ -150,17 +150,17 @@ Bitmap XDashList::ImpCreateBitmapForXDash(const XDash* 
pDash)
         static const Color aW(COL_WHITE);
         static const Color aG(0xef, 0xef, 0xef);
 
-        aVirtualDevice.DrawCheckered(aNull, aSize, nLen, aW, aG);
+        pVirtualDevice->DrawCheckered(aNull, aSize, nLen, aW, aG);
     }
     else
     {
-        aVirtualDevice.SetBackground(rStyleSettings.GetFieldColor());
-        aVirtualDevice.Erase();
+        pVirtualDevice->SetBackground(rStyleSettings.GetFieldColor());
+        pVirtualDevice->Erase();
     }
 
     // create processor and draw primitives
     boost::scoped_ptr<drawinglayer::processor2d::BaseProcessor2D> 
pProcessor2D(drawinglayer::processor2d::createPixelProcessor2DFromOutputDevice(
-        aVirtualDevice,
+        *pVirtualDevice.get(),
         aNewViewInformation2D));
 
     if(pProcessor2D)
@@ -172,7 +172,7 @@ Bitmap XDashList::ImpCreateBitmapForXDash(const XDash* 
pDash)
     }
 
     // get result bitmap and scale
-    Bitmap aRetval(aVirtualDevice.GetBitmap(Point(0, 0), 
aVirtualDevice.GetOutputSizePixel()));
+    Bitmap aRetval(pVirtualDevice->GetBitmap(Point(0, 0), 
pVirtualDevice->GetOutputSizePixel()));
 
     if(1 != nFactor)
     {
diff --git a/svx/source/xoutdev/xtabgrdt.cxx b/svx/source/xoutdev/xtabgrdt.cxx
index f25a215..5607659 100644
--- a/svx/source/xoutdev/xtabgrdt.cxx
+++ b/svx/source/xoutdev/xtabgrdt.cxx
@@ -181,17 +181,17 @@ Bitmap XGradientList::CreateBitmapForUI( long nIndex )
                 aBlack));
 
         // prepare VirtualDevice
-        VirtualDevice aVirtualDevice;
+        ScopedVclPtr< VirtualDevice > pVirtualDevice(new VirtualDevice());
         const drawinglayer::geometry::ViewInformation2D aNewViewInformation2D;
 
-        aVirtualDevice.SetOutputSizePixel(rSize);
-        aVirtualDevice.SetDrawMode(rStyleSettings.GetHighContrastMode()
+        pVirtualDevice->SetOutputSizePixel(rSize);
+        pVirtualDevice->SetDrawMode(rStyleSettings.GetHighContrastMode()
             ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | 
DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
             : DRAWMODE_DEFAULT);
 
         // create processor and draw primitives
         boost::scoped_ptr<drawinglayer::processor2d::BaseProcessor2D> 
pProcessor2D(drawinglayer::processor2d::createPixelProcessor2DFromOutputDevice(
-            aVirtualDevice,
+            *pVirtualDevice.get(),
             aNewViewInformation2D));
 
         if(pProcessor2D)
@@ -206,7 +206,7 @@ Bitmap XGradientList::CreateBitmapForUI( long nIndex )
         }
 
         // get result bitmap and scale
-        aRetval = aVirtualDevice.GetBitmap(Point(0, 0), 
aVirtualDevice.GetOutputSizePixel());
+        aRetval = pVirtualDevice->GetBitmap(Point(0, 0), 
pVirtualDevice->GetOutputSizePixel());
     }
 
     return aRetval;
diff --git a/svx/source/xoutdev/xtabhtch.cxx b/svx/source/xoutdev/xtabhtch.cxx
index ba73c5c..5553476 100644
--- a/svx/source/xoutdev/xtabhtch.cxx
+++ b/svx/source/xoutdev/xtabhtch.cxx
@@ -142,11 +142,11 @@ Bitmap XHatchList::CreateBitmapForUI( long nIndex )
                 aBlack));
 
         // prepare VirtualDevice
-        VirtualDevice aVirtualDevice;
+        ScopedVclPtr< VirtualDevice > pVirtualDevice(new VirtualDevice());
         const drawinglayer::geometry::ViewInformation2D aNewViewInformation2D;
 
-        aVirtualDevice.SetOutputSizePixel(rSize);
-        aVirtualDevice.SetDrawMode(rStyleSettings.GetHighContrastMode()
+        pVirtualDevice->SetOutputSizePixel(rSize);
+        pVirtualDevice->SetDrawMode(rStyleSettings.GetHighContrastMode()
             ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | 
DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
             : DRAWMODE_DEFAULT);
 
@@ -156,17 +156,17 @@ Bitmap XHatchList::CreateBitmapForUI( long nIndex )
             static const sal_uInt32 nLen(8);
             static const Color aW(COL_WHITE);
             static const Color aG(0xef, 0xef, 0xef);
-            aVirtualDevice.DrawCheckered(aNull, rSize, nLen, aW, aG);
+            pVirtualDevice->DrawCheckered(aNull, rSize, nLen, aW, aG);
         }
         else
         {
-            aVirtualDevice.SetBackground(rStyleSettings.GetFieldColor());
-            aVirtualDevice.Erase();
+            pVirtualDevice->SetBackground(rStyleSettings.GetFieldColor());
+            pVirtualDevice->Erase();
         }
 
         // create processor and draw primitives
         boost::scoped_ptr<drawinglayer::processor2d::BaseProcessor2D> 
pProcessor2D(drawinglayer::processor2d::createPixelProcessor2DFromOutputDevice(
-            aVirtualDevice,
+            *pVirtualDevice.get(),
             aNewViewInformation2D));
 
         if(pProcessor2D)
@@ -180,7 +180,7 @@ Bitmap XHatchList::CreateBitmapForUI( long nIndex )
         }
 
         // get result bitmap and scale
-        aRetval = aVirtualDevice.GetBitmap(Point(0, 0), 
aVirtualDevice.GetOutputSizePixel());
+        aRetval = pVirtualDevice->GetBitmap(Point(0, 0), 
pVirtualDevice->GetOutputSizePixel());
     }
 
     return aRetval;
diff --git a/svx/source/xoutdev/xtablend.cxx b/svx/source/xoutdev/xtablend.cxx
index cd4dae3..1c5b8a8 100644
--- a/svx/source/xoutdev/xtablend.cxx
+++ b/svx/source/xoutdev/xtablend.cxx
@@ -125,11 +125,11 @@ Bitmap XLineEndList::CreateBitmapForUI( long nIndex )
                 aLineStartEndAttribute));
 
         // prepare VirtualDevice
-        VirtualDevice aVirtualDevice;
+        ScopedVclPtr< VirtualDevice > pVirtualDevice(new VirtualDevice());
         const drawinglayer::geometry::ViewInformation2D aNewViewInformation2D;
 
-        aVirtualDevice.SetOutputSizePixel(aSize);
-        aVirtualDevice.SetDrawMode(rStyleSettings.GetHighContrastMode()
+        pVirtualDevice->SetOutputSizePixel(aSize);
+        pVirtualDevice->SetDrawMode(rStyleSettings.GetHighContrastMode()
             ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | 
DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
             : DRAWMODE_DEFAULT);
 
@@ -139,17 +139,17 @@ Bitmap XLineEndList::CreateBitmapForUI( long nIndex )
             static const sal_uInt32 nLen(8);
             static const Color aW(COL_WHITE);
             static const Color aG(0xef, 0xef, 0xef);
-            aVirtualDevice.DrawCheckered(aNull, aSize, nLen, aW, aG);
+            pVirtualDevice->DrawCheckered(aNull, aSize, nLen, aW, aG);
         }
         else
         {
-            aVirtualDevice.SetBackground(rStyleSettings.GetFieldColor());
-            aVirtualDevice.Erase();
+            pVirtualDevice->SetBackground(rStyleSettings.GetFieldColor());
+            pVirtualDevice->Erase();
         }
 
         // create processor and draw primitives
         boost::scoped_ptr<drawinglayer::processor2d::BaseProcessor2D> 
pProcessor2D(drawinglayer::processor2d::createPixelProcessor2DFromOutputDevice(
-            aVirtualDevice,
+            *pVirtualDevice.get(),
             aNewViewInformation2D));
 
         if(pProcessor2D)
@@ -161,7 +161,7 @@ Bitmap XLineEndList::CreateBitmapForUI( long nIndex )
         }
 
         // get result bitmap and scale
-        aRetval = aVirtualDevice.GetBitmap(Point(0, 0), 
aVirtualDevice.GetOutputSizePixel());
+        aRetval = pVirtualDevice->GetBitmap(Point(0, 0), 
pVirtualDevice->GetOutputSizePixel());
     }
 
     return aRetval;
diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx
index 22293b8..8f8abca 100644
--- a/sw/inc/viewsh.hxx
+++ b/sw/inc/viewsh.hxx
@@ -124,11 +124,11 @@ class SW_DLLPUBLIC SwViewShell : public 
sw::Ring<SwViewShell>
 
     SfxViewShell *mpSfxViewShell;
     SwViewImp    *mpImp;             // Core-internals of SwViewShell.
-                                    // The pointer is never 0.
+                                     // The pointer is never 0.
 
-    VclPtr<::vcl::Window> mpWin;             ///< = 0 during printing or pdf 
export
-    OutputDevice *mpOut;              ///< Window, Printer, VirtDev, ...
-    OutputDevice* mpTmpRef;           // Temporariy reference device. Is used
+    VclPtr<::vcl::Window> mpWin;     ///< = 0 during printing or pdf export
+    VclPtr<OutputDevice>  mpOut;     ///< Window, Printer, VirtDev, ...
+    VclPtr<OutputDevice>  mpTmpRef;  // Temporariy reference device. Is used
                                      // during (printer depending) prospect
                                      // and page preview printing
                                      // (because a scaling has to be set at
@@ -160,7 +160,7 @@ class SW_DLLPUBLIC SwViewShell : public 
sw::Ring<SwViewShell>
     bool mbTiledRendering:1; ///< Set if we are doing the tiled rendering 
(using PaintTile()).
 
     SdrPaintWindow*         mpTargetPaintWindow;
-    OutputDevice*           mpBufferedOut;
+    VclPtr<OutputDevice>    mpBufferedOut;
 
     SwRootFrmPtr            mpLayout;
 
@@ -233,7 +233,7 @@ public:
     // #i72754# set of Pre/PostPaints with lock counter and initial target 
OutDev
 protected:
     std::stack<vcl::Region> mPrePostPaintRegions; // acts also as a lock 
counter (empty == not locked)
-    OutputDevice*           mpPrePostOutDev;
+    VclPtr<OutputDevice>    mpPrePostOutDev;
     MapMode                 maPrePostMapMode;
 public:
     void PrePaint();
diff --git a/sw/qa/tiledrendering/tiledrendering.cxx 
b/sw/qa/tiledrendering/tiledrendering.cxx
index a7a84fb..73845bd 100644
--- a/sw/qa/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/tiledrendering/tiledrendering.cxx
@@ -131,13 +131,13 @@ IMPL_LINK ( TiledRenderingDialog, RenderHdl, Button *, 
EMPTYARG )
         // SystemGraphicsData aData;
         // [setup the aData]
         // VirtualDevice aDevice(&aData, [color depth]);
-        VirtualDevice aDevice;
+        ScopedVclPtr< VirtualDevice > pDevice(new VirtualDevice());
 
         // paint to it
-        pViewShell->PaintTile(aDevice, contextWidth, contextHeight, tilePosX, 
tilePosY, tileWidth, tileHeight);
+        pViewShell->PaintTile(*pDevice.get(), contextWidth, contextHeight, 
tilePosX, tilePosY, tileWidth, tileHeight);
 
         // copy the aDevice content to mpImage
-        Bitmap aBitmap(aDevice.GetBitmap(aDevice.PixelToLogic(Point(0,0)), 
aDevice.PixelToLogic(Size(contextWidth, contextHeight))));
+        Bitmap aBitmap(pDevice->GetBitmap(aDevice->PixelToLogic(Point(0,0)), 
pDevice->PixelToLogic(Size(contextWidth, contextHeight))));
         mpImage->SetImage(Image(aBitmap));
 
         // update the dialog size
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx
index 2fb7377..69dc7e8 100644
--- a/sw/source/core/frmedt/fecopy.cxx
+++ b/sw/source/core/frmedt/fecopy.cxx
@@ -1232,15 +1232,15 @@ bool SwFEShell::GetDrawObjGraphic( sal_uLong nFmt, 
Graphic& rGrf ) const
                             Point aPt;
                             GetGrfSize( aSz );
 
-                            VirtualDevice aVirtDev;
-                            aVirtDev.EnableOutput( false );
+                            ScopedVclPtr< VirtualDevice > pVirtDev(new 
VirtualDevice());
+                            pVirtDev->EnableOutput( false );
 
                             MapMode aTmp( GetWin()->GetMapMode() );
                             aTmp.SetOrigin( aPt );
-                            aVirtDev.SetMapMode( aTmp );
+                            pVirtDev->SetMapMode( aTmp );
 
                             GDIMetaFile aMtf;
-                            aMtf.Record( &aVirtDev );
+                            aMtf.Record( pVirtDev.get() );
                             aGrf.Draw( &aVirtDev, aPt, aSz );
                             aMtf.Stop();
                             aMtf.SetPrefMapMode( aTmp );
@@ -1259,14 +1259,14 @@ bool SwFEShell::GetDrawObjGraphic( sal_uLong nFmt, 
Graphic& rGrf ) const
                         // Otherwise it could happen that for vector graphics
                         // many MB's of memory are allocated.
                         const Size aSz( FindFlyFrm()->Prt().SSize() );
-                        VirtualDevice aVirtDev( *GetWin() );
+                        ScopedVclPtr< VirtualDevice > pVirtDev(new 
VirtualDevice(*GetWin()));
 
                         MapMode aTmp( MAP_TWIP );
-                        aVirtDev.SetMapMode( aTmp );
-                        if( aVirtDev.SetOutputSize( aSz ) )
+                        pVirtDev->SetMapMode( aTmp );
+                        if( pVirtDev->SetOutputSize( aSz ) )
                         {
-                            aGrf.Draw( &aVirtDev, Point(), aSz );
-                            rGrf = aVirtDev.GetBitmap( Point(), aSz );
+                            aGrf.Draw( pVirtDev.get(), Point(), aSz );
+                            rGrf = pVirtDev->GetBitmap( Point(), aSz );
                         }
                         else
                         {
diff --git a/sw/source/core/layout/paintfrm.cxx 
b/sw/source/core/layout/paintfrm.cxx
index 228bbee..b408f36 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -7644,21 +7644,21 @@ Graphic SwFlyFrmFmt::MakeGraphic( ImageMap* pMap )
         SwFlyFrm *pFly = static_cast<SwFlyFrm*>(pFirst);
 
         OutputDevice *pOld = pSh->GetOut();
-        VirtualDevice aDev( *pOld );
-        aDev.EnableOutput( false );
+        ScopedVclPtr< VirtualDevice > pDev( new VirtualDevice( *pOld ) );
+        pDev->EnableOutput( false );
 
         GDIMetaFile aMet;
         MapMode aMap( pOld->GetMapMode().GetMapUnit() );
-        aDev.SetMapMode( aMap );
+        pDev->SetMapMode( aMap );
         aMet.SetPrefMapMode( aMap );
 
         ::SwCalcPixStatics( pSh->GetOut() );
         aMet.SetPrefSize( pFly->Frm().SSize() );
 
-        aMet.Record( &aDev );
-        aDev.SetLineColor();
-        aDev.SetFillColor();
-        aDev.SetFont( pOld->GetFont() );
+        aMet.Record( pDev.get() );
+        pDev->SetLineColor();
+        pDev->SetFillColor();
+        pDev->SetFont( pOld->GetFont() );
 
         //Enlarge the rectangle if needed, so the border is painted too.
         SwRect aOut( pFly->Frm() );
diff --git a/sw/source/core/view/vnew.cxx b/sw/source/core/view/vnew.cxx
index 3cfe679..b48f5e9 100644
--- a/sw/source/core/view/vnew.cxx
+++ b/sw/source/core/view/vnew.cxx
@@ -361,7 +361,7 @@ SwViewShell::~SwViewShell()
             this->GetNext() : nullptr );
     }
 
-    delete mpTmpRef;
+    mpTmpRef.disposeAndClear();
     delete mpAccOptions;
 }
 
diff --git a/sw/source/filter/ww8/wrtww8gr.cxx 
b/sw/source/filter/ww8/wrtww8gr.cxx
index fd2e5b1..c021360 100644
--- a/sw/source/filter/ww8/wrtww8gr.cxx
+++ b/sw/source/filter/ww8/wrtww8gr.cxx
@@ -727,9 +727,9 @@ void SwWW8WrGrf::WriteGrfFromGrfNode(SvStream& rStrm, const 
SwGrfNode &rGrfNd,
             {
                 case GRAPHIC_BITMAP:        // Bitmap -> play in Metafile
                     {
-                        VirtualDevice aVirt;
-                        aMeta.Record(&aVirt);
-                        aVirt.DrawBitmap( Point( 0,0 ), rGrf.GetBitmap() );
+                        ScopedVclPtr< VirtualDevice > pVirt(new 
VirtualDevice());
+                        aMeta.Record(pVirt.get());
+                        pVirt->DrawBitmap( Point( 0,0 ), rGrf.GetBitmap() );
                         aMeta.Stop();
                         aMeta.WindStart();
                         aMeta.SetPrefMapMode( rGrf.GetPrefMapMode());
@@ -857,9 +857,9 @@ void SwWW8WrGrf::WriteGrfForBullet(SvStream& rStrm, const 
Graphic &rGrf, sal_uIn
         {
             case GRAPHIC_BITMAP:        // Bitmap -> in Metafile abspielen
             {
-                VirtualDevice aVirt;
-                aMeta.Record(&aVirt);
-                aVirt.DrawBitmap( Point( 0,0 ), rGrf.GetBitmap() );
+                ScopedVclPtr< VirtualDevice > pVirt(new VirtualDevice());
+                aMeta.Record(pVirt.get());
+                pVirt->DrawBitmap( Point( 0,0 ), rGrf.GetBitmap() );
                 aMeta.Stop();
                 aMeta.WindStart();
                 aMeta.SetPrefMapMode( rGrf.GetPrefMapMode());
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 7e94358..8936553 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -805,7 +805,8 @@ public:
         BitmapEx AlphaRecovery(OutputDevice &rDev, Point aPt, BitmapEx &aSrc)
         {
             // Compositing onto 2x colors beyond our control
-            VirtualDevice aWhite, aBlack;
+            ScopedVclPtr< VirtualDevice > aWhite(new VirtualDevice());
+            ScopedVclPtr< VirtualDevice > aBlack(new VirtualDevice());
             aWhite.SetOutputSizePixel(aSrc.GetSizePixel());
             aWhite.SetBackground(Wallpaper(COL_WHITE));
             aWhite.Erase();
@@ -1294,7 +1295,7 @@ public:
         DrawWallpaper(aWholeSize, aWallpaper);
         Pop();
 
-        VirtualDevice aDev(*this);
+        ScopedVclPtr< VirtualDevice > aDev(new VirtualDevice(*this));
         aDev.EnableRTL(IsRTLEnabled());
         aDev.SetOutputSizePixel(aExclude.GetSize());
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to