1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_svx.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // include --------------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #ifndef SVX_LIGHT 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp> 36*cdf0e10cSrcweir #include "svx/XPropertyTable.hxx" 37*cdf0e10cSrcweir #include <unotools/ucbstreamhelper.hxx> 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir #include "xmlxtexp.hxx" 40*cdf0e10cSrcweir #include "xmlxtimp.hxx" 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #endif 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #include <tools/urlobj.hxx> 45*cdf0e10cSrcweir #include <vcl/virdev.hxx> 46*cdf0e10cSrcweir #include <svl/itemset.hxx> 47*cdf0e10cSrcweir #include <sfx2/docfile.hxx> 48*cdf0e10cSrcweir #include <svx/dialogs.hrc> 49*cdf0e10cSrcweir #include <svx/dialmgr.hxx> 50*cdf0e10cSrcweir #include <svx/xtable.hxx> 51*cdf0e10cSrcweir #include <svx/xpool.hxx> 52*cdf0e10cSrcweir #include <svx/xfillit0.hxx> 53*cdf0e10cSrcweir #include <svx/xflgrit.hxx> 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir #include <svx/svdorect.hxx> 56*cdf0e10cSrcweir #include <svx/svdmodel.hxx> 57*cdf0e10cSrcweir #include <svx/sdr/contact/objectcontactofobjlistpainter.hxx> 58*cdf0e10cSrcweir #include <svx/sdr/contact/displayinfo.hxx> 59*cdf0e10cSrcweir #include <vcl/svapp.hxx> 60*cdf0e10cSrcweir #include <svx/xlnclit.hxx> 61*cdf0e10cSrcweir #include <svx/xgrscit.hxx> 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir #define GLOBALOVERFLOW 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir using namespace com::sun::star; 66*cdf0e10cSrcweir using namespace rtl; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir sal_Unicode const pszExtGradient[] = {'s','o','g'}; 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir char const aChckGradient[] = { 0x04, 0x00, 'S','O','G','L'}; // < 5.2 71*cdf0e10cSrcweir char const aChckGradient0[] = { 0x04, 0x00, 'S','O','G','0'}; // = 5.2 72*cdf0e10cSrcweir char const aChckXML[] = { '<', '?', 'x', 'm', 'l' }; // = 6.0 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir // --------------------- 75*cdf0e10cSrcweir // class XGradientTable 76*cdf0e10cSrcweir // --------------------- 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir /************************************************************************* 79*cdf0e10cSrcweir |* 80*cdf0e10cSrcweir |* XGradientTable::XGradientTable() 81*cdf0e10cSrcweir |* 82*cdf0e10cSrcweir *************************************************************************/ 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir XGradientTable::XGradientTable( const String& rPath, 85*cdf0e10cSrcweir XOutdevItemPool* pInPool, 86*cdf0e10cSrcweir sal_uInt16 nInitSize, sal_uInt16 nReSize ) : 87*cdf0e10cSrcweir XPropertyTable( rPath, pInPool, nInitSize, nReSize) 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir pBmpTable = new Table( nInitSize, nReSize ); 90*cdf0e10cSrcweir } 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir /************************************************************************/ 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir XGradientTable::~XGradientTable() 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir } 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir /************************************************************************/ 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir XGradientEntry* XGradientTable::Replace(long nIndex, XGradientEntry* pEntry ) 101*cdf0e10cSrcweir { 102*cdf0e10cSrcweir return (XGradientEntry*) XPropertyTable::Replace(nIndex, pEntry); 103*cdf0e10cSrcweir } 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir /************************************************************************/ 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir XGradientEntry* XGradientTable::Remove(long nIndex) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir return (XGradientEntry*) XPropertyTable::Remove(nIndex, 0); 110*cdf0e10cSrcweir } 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir /************************************************************************/ 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir XGradientEntry* XGradientTable::GetGradient(long nIndex) const 115*cdf0e10cSrcweir { 116*cdf0e10cSrcweir return (XGradientEntry*) XPropertyTable::Get(nIndex, 0); 117*cdf0e10cSrcweir } 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir /************************************************************************/ 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir sal_Bool XGradientTable::Load() 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir return( sal_False ); 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir /************************************************************************/ 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir sal_Bool XGradientTable::Save() 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir return( sal_False ); 131*cdf0e10cSrcweir } 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir /************************************************************************/ 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir sal_Bool XGradientTable::Create() 136*cdf0e10cSrcweir { 137*cdf0e10cSrcweir return( sal_False ); 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir /************************************************************************/ 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir sal_Bool XGradientTable::CreateBitmapsForUI() 143*cdf0e10cSrcweir { 144*cdf0e10cSrcweir return( sal_False ); 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir /************************************************************************/ 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir Bitmap* XGradientTable::CreateBitmapForUI( long /*nIndex*/, sal_Bool /*bDelete*/) 150*cdf0e10cSrcweir { 151*cdf0e10cSrcweir return( NULL ); 152*cdf0e10cSrcweir } 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir // -------------------- 155*cdf0e10cSrcweir // class XGradientList 156*cdf0e10cSrcweir // -------------------- 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir class impXGradientList 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir private: 161*cdf0e10cSrcweir VirtualDevice* mpVirtualDevice; 162*cdf0e10cSrcweir SdrModel* mpSdrModel; 163*cdf0e10cSrcweir SdrObject* mpBackgroundObject; 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir public: 166*cdf0e10cSrcweir impXGradientList(VirtualDevice* pV, SdrModel* pM, SdrObject* pB) 167*cdf0e10cSrcweir : mpVirtualDevice(pV), 168*cdf0e10cSrcweir mpSdrModel(pM), 169*cdf0e10cSrcweir mpBackgroundObject(pB) 170*cdf0e10cSrcweir {} 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir ~impXGradientList() 173*cdf0e10cSrcweir { 174*cdf0e10cSrcweir delete mpVirtualDevice; 175*cdf0e10cSrcweir SdrObject::Free(mpBackgroundObject); 176*cdf0e10cSrcweir delete mpSdrModel; 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir VirtualDevice* getVirtualDevice() const { return mpVirtualDevice; } 180*cdf0e10cSrcweir SdrObject* getBackgroundObject() const { return mpBackgroundObject; } 181*cdf0e10cSrcweir }; 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir void XGradientList::impCreate() 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir if(!mpData) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir const Point aZero(0, 0); 188*cdf0e10cSrcweir const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir VirtualDevice* pVirDev = new VirtualDevice; 191*cdf0e10cSrcweir OSL_ENSURE(0 != pVirDev, "XGradientList: no VirtualDevice created!" ); 192*cdf0e10cSrcweir pVirDev->SetMapMode(MAP_100TH_MM); 193*cdf0e10cSrcweir const Size aSize(pVirDev->PixelToLogic(Size(BITMAP_WIDTH, BITMAP_HEIGHT))); 194*cdf0e10cSrcweir pVirDev->SetOutputSize(aSize); 195*cdf0e10cSrcweir pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode() 196*cdf0e10cSrcweir ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT 197*cdf0e10cSrcweir : DRAWMODE_DEFAULT); 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir SdrModel* pSdrModel = new SdrModel(); 200*cdf0e10cSrcweir OSL_ENSURE(0 != pSdrModel, "XGradientList: no SdrModel created!" ); 201*cdf0e10cSrcweir pSdrModel->GetItemPool().FreezeIdRanges(); 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir const Size aSinglePixel(pVirDev->PixelToLogic(Size(1, 1))); 204*cdf0e10cSrcweir const Rectangle aBackgroundSize(aZero, Size(aSize.getWidth() - aSinglePixel.getWidth(), aSize.getHeight() - aSinglePixel.getHeight())); 205*cdf0e10cSrcweir SdrObject* pBackgroundObject = new SdrRectObj(aBackgroundSize); 206*cdf0e10cSrcweir OSL_ENSURE(0 != pBackgroundObject, "XGradientList: no BackgroundObject created!" ); 207*cdf0e10cSrcweir pBackgroundObject->SetModel(pSdrModel); 208*cdf0e10cSrcweir pBackgroundObject->SetMergedItem(XFillStyleItem(XFILL_GRADIENT)); 209*cdf0e10cSrcweir pBackgroundObject->SetMergedItem(XLineStyleItem(XLINE_SOLID)); 210*cdf0e10cSrcweir pBackgroundObject->SetMergedItem(XLineColorItem(String(), Color(COL_BLACK))); 211*cdf0e10cSrcweir pBackgroundObject->SetMergedItem(XGradientStepCountItem(sal_uInt16((BITMAP_WIDTH + BITMAP_HEIGHT) / 3))); 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir mpData = new impXGradientList(pVirDev, pSdrModel, pBackgroundObject); 214*cdf0e10cSrcweir OSL_ENSURE(0 != mpData, "XGradientList: data creation went wrong!" ); 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir void XGradientList::impDestroy() 219*cdf0e10cSrcweir { 220*cdf0e10cSrcweir if(mpData) 221*cdf0e10cSrcweir { 222*cdf0e10cSrcweir delete mpData; 223*cdf0e10cSrcweir mpData = 0; 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir XGradientList::XGradientList( const String& rPath, XOutdevItemPool* pInPool, sal_uInt16 nInitSize, sal_uInt16 nReSize) 228*cdf0e10cSrcweir : XPropertyList(rPath, pInPool, nInitSize, nReSize), 229*cdf0e10cSrcweir mpData(0) 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir pBmpList = new List(nInitSize, nReSize); 232*cdf0e10cSrcweir } 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir XGradientList::~XGradientList() 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir if(mpData) 237*cdf0e10cSrcweir { 238*cdf0e10cSrcweir delete mpData; 239*cdf0e10cSrcweir mpData = 0; 240*cdf0e10cSrcweir } 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir XGradientEntry* XGradientList::Replace(XGradientEntry* pEntry, long nIndex ) 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir return( (XGradientEntry*) XPropertyList::Replace( pEntry, nIndex ) ); 246*cdf0e10cSrcweir } 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir XGradientEntry* XGradientList::Remove(long nIndex) 249*cdf0e10cSrcweir { 250*cdf0e10cSrcweir return( (XGradientEntry*) XPropertyList::Remove( nIndex, 0 ) ); 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir XGradientEntry* XGradientList::GetGradient(long nIndex) const 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir return( (XGradientEntry*) XPropertyList::Get( nIndex, 0 ) ); 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir sal_Bool XGradientList::Load() 259*cdf0e10cSrcweir { 260*cdf0e10cSrcweir if( bListDirty ) 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir bListDirty = sal_False; 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir INetURLObject aURL( aPath ); 265*cdf0e10cSrcweir 266*cdf0e10cSrcweir if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) 267*cdf0e10cSrcweir { 268*cdf0e10cSrcweir DBG_ASSERT( !aPath.Len(), "invalid URL" ); 269*cdf0e10cSrcweir return sal_False; 270*cdf0e10cSrcweir } 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir aURL.Append( aName ); 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir if( !aURL.getExtension().getLength() ) 275*cdf0e10cSrcweir aURL.setExtension( rtl::OUString( pszExtGradient, 3 ) ); 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xTable( SvxUnoXGradientTable_createInstance( this ), uno::UNO_QUERY ); 278*cdf0e10cSrcweir return SvxXMLXTableImport::load( aURL.GetMainURL( INetURLObject::NO_DECODE ), xTable ); 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir } 281*cdf0e10cSrcweir return( sal_False ); 282*cdf0e10cSrcweir } 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir sal_Bool XGradientList::Save() 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir INetURLObject aURL( aPath ); 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir if( INET_PROT_NOT_VALID == aURL.GetProtocol() ) 289*cdf0e10cSrcweir { 290*cdf0e10cSrcweir DBG_ASSERT( !aPath.Len(), "invalid URL" ); 291*cdf0e10cSrcweir return sal_False; 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir aURL.Append( aName ); 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir if( !aURL.getExtension().getLength() ) 297*cdf0e10cSrcweir aURL.setExtension( rtl::OUString( pszExtGradient, 3 ) ); 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir uno::Reference< container::XNameContainer > xTable( SvxUnoXGradientTable_createInstance( this ), uno::UNO_QUERY ); 300*cdf0e10cSrcweir return SvxXMLXTableExportComponent::save( aURL.GetMainURL( INetURLObject::NO_DECODE ), xTable ); 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir sal_Bool XGradientList::Create() 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir XubString aStr( SVX_RES( RID_SVXSTR_GRADIENT ) ); 306*cdf0e10cSrcweir xub_StrLen nLen; 307*cdf0e10cSrcweir 308*cdf0e10cSrcweir aStr.AppendAscii(" 1"); 309*cdf0e10cSrcweir nLen = aStr.Len() - 1; 310*cdf0e10cSrcweir Insert(new XGradientEntry(XGradient(RGB_Color(COL_BLACK ),RGB_Color(COL_WHITE ),XGRAD_LINEAR , 0,10,10, 0,100,100),aStr)); 311*cdf0e10cSrcweir aStr.SetChar(nLen, sal_Unicode('2')); 312*cdf0e10cSrcweir Insert(new XGradientEntry(XGradient(RGB_Color(COL_BLUE ),RGB_Color(COL_RED ),XGRAD_AXIAL , 300,20,20,10,100,100),aStr)); 313*cdf0e10cSrcweir aStr.SetChar(nLen, sal_Unicode('3')); 314*cdf0e10cSrcweir Insert(new XGradientEntry(XGradient(RGB_Color(COL_RED ),RGB_Color(COL_YELLOW ),XGRAD_RADIAL , 600,30,30,20,100,100),aStr)); 315*cdf0e10cSrcweir aStr.SetChar(nLen, sal_Unicode('4')); 316*cdf0e10cSrcweir Insert(new XGradientEntry(XGradient(RGB_Color(COL_YELLOW ),RGB_Color(COL_GREEN ),XGRAD_ELLIPTICAL, 900,40,40,30,100,100),aStr)); 317*cdf0e10cSrcweir aStr.SetChar(nLen, sal_Unicode('5')); 318*cdf0e10cSrcweir Insert(new XGradientEntry(XGradient(RGB_Color(COL_GREEN ),RGB_Color(COL_MAGENTA),XGRAD_SQUARE , 1200,50,50,40,100,100),aStr)); 319*cdf0e10cSrcweir aStr.SetChar(nLen, sal_Unicode('6')); 320*cdf0e10cSrcweir Insert(new XGradientEntry(XGradient(RGB_Color(COL_MAGENTA),RGB_Color(COL_YELLOW ),XGRAD_RECT , 1900,60,60,50,100,100),aStr)); 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir return( sal_True ); 323*cdf0e10cSrcweir } 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir sal_Bool XGradientList::CreateBitmapsForUI() 326*cdf0e10cSrcweir { 327*cdf0e10cSrcweir impCreate(); 328*cdf0e10cSrcweir 329*cdf0e10cSrcweir for( long i = 0; i < Count(); i++) 330*cdf0e10cSrcweir { 331*cdf0e10cSrcweir Bitmap* pBmp = CreateBitmapForUI( i, sal_False ); 332*cdf0e10cSrcweir DBG_ASSERT( pBmp, "XGradientList: Bitmap(UI) konnte nicht erzeugt werden!" ); 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir if( pBmp ) 335*cdf0e10cSrcweir pBmpList->Insert( pBmp, i ); 336*cdf0e10cSrcweir } 337*cdf0e10cSrcweir 338*cdf0e10cSrcweir impDestroy(); 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir return( sal_False ); 341*cdf0e10cSrcweir } 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir Bitmap* XGradientList::CreateBitmapForUI( long nIndex, sal_Bool bDelete ) 344*cdf0e10cSrcweir { 345*cdf0e10cSrcweir impCreate(); 346*cdf0e10cSrcweir VirtualDevice* pVD = mpData->getVirtualDevice(); 347*cdf0e10cSrcweir SdrObject* pBackgroundObject = mpData->getBackgroundObject(); 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir const SfxItemSet& rItemSet = pBackgroundObject->GetMergedItemSet(); 350*cdf0e10cSrcweir pBackgroundObject->SetMergedItem(XFillStyleItem(XFILL_GRADIENT)); 351*cdf0e10cSrcweir pBackgroundObject->SetMergedItem(XFillGradientItem(rItemSet.GetPool(), GetGradient(nIndex)->GetGradient())); 352*cdf0e10cSrcweir 353*cdf0e10cSrcweir sdr::contact::SdrObjectVector aObjectVector; 354*cdf0e10cSrcweir aObjectVector.push_back(pBackgroundObject); 355*cdf0e10cSrcweir sdr::contact::ObjectContactOfObjListPainter aPainter(*pVD, aObjectVector, 0); 356*cdf0e10cSrcweir sdr::contact::DisplayInfo aDisplayInfo; 357*cdf0e10cSrcweir 358*cdf0e10cSrcweir aPainter.ProcessDisplay(aDisplayInfo); 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir const Point aZero(0, 0); 361*cdf0e10cSrcweir Bitmap* pBitmap = new Bitmap(pVD->GetBitmap(aZero, pVD->GetOutputSize())); 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir if(bDelete) 364*cdf0e10cSrcweir { 365*cdf0e10cSrcweir impDestroy(); 366*cdf0e10cSrcweir } 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir return pBitmap; 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 372*cdf0e10cSrcweir // eof 373