diff options
author | Ivo Hinkelmann <ihi@openoffice.org> | 2007-06-06 13:11:27 +0000 |
---|---|---|
committer | Ivo Hinkelmann <ihi@openoffice.org> | 2007-06-06 13:11:27 +0000 |
commit | 016209a99280060a55a0b16c4242277c01b46ac0 (patch) | |
tree | 917867caec92b0a5627d53b9a64cbff5d3ae15d5 /vcl/source/gdi/impimage.cxx | |
parent | 87b37c9ac33d4b6aac21f48dad4803aacc73dcaf (diff) |
INTEGRATION: CWS ka009 (1.19.36); FILE MERGED
2006/10/13 16:25:49 ka 1.19.36.3: RESYNC: (1.19-1.20); FILE MERGED
2006/07/14 14:57:35 dr 1.19.36.2: #i66680# warningfree
2006/07/12 22:03:52 ka 1.19.36.1: #i66680#: added patch for optimized ImageList handling
Diffstat (limited to 'vcl/source/gdi/impimage.cxx')
-rw-r--r-- | vcl/source/gdi/impimage.cxx | 74 |
1 files changed, 43 insertions, 31 deletions
diff --git a/vcl/source/gdi/impimage.cxx b/vcl/source/gdi/impimage.cxx index 65b4e9579499..328d93efadae 100644 --- a/vcl/source/gdi/impimage.cxx +++ b/vcl/source/gdi/impimage.cxx @@ -4,9 +4,9 @@ * * $RCSfile: impimage.cxx,v $ * - * $Revision: 1.20 $ + * $Revision: 1.21 $ * - * last change: $Author: obo $ $Date: 2006-09-17 12:03:20 $ + * last change: $Author: ihi $ $Date: 2007-06-06 14:11:27 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -73,8 +73,9 @@ // ---------------- ImageAryData::ImageAryData() : + maName(), mnId( 0 ), - mnRefCount( 0 ) + maBitmapEx() { } @@ -83,7 +84,13 @@ ImageAryData::ImageAryData() : ImageAryData::ImageAryData( const ImageAryData& rData ) : maName( rData.maName ), mnId( rData.mnId ), - mnRefCount( rData.mnRefCount ) + maBitmapEx( rData.maBitmapEx ) +{ +} + +ImageAryData::ImageAryData( const rtl::OUString &aName, + USHORT nId, const BitmapEx &aBitmap ) + : maName( aName ), mnId( nId ), maBitmapEx( aBitmap ) { } @@ -99,7 +106,7 @@ ImageAryData& ImageAryData::operator=( const ImageAryData& rData ) { maName = rData.maName; mnId = rData.mnId; - mnRefCount = rData.mnRefCount; + maBitmapEx = rData.maBitmapEx; return *this; } @@ -112,38 +119,47 @@ ImplImageList::ImplImageList() { } -// ----------------------------------------------------------------------- +ImplImageList::ImplImageList( const ImplImageList &aSrc ) : + maPrefix( aSrc.maPrefix ), + maImageSize( aSrc.maImageSize ), + mnRefCount( 1 ) +{ + maImages.reserve( aSrc.maImages.size() ); + for ( ImageAryDataVec::const_iterator aIt = aSrc.maImages.begin(), aEnd = aSrc.maImages.end(); aIt != aEnd; ++aIt ) + { + ImageAryData* pAryData = new ImageAryData( **aIt ); + maImages.push_back( pAryData ); + if( pAryData->maName.getLength() ) + maNameHash [ pAryData->maName ] = pAryData; + } +} ImplImageList::~ImplImageList() { - delete mpImageBitmap; - delete[] mpAry; + for ( ImageAryDataVec::iterator aIt = maImages.begin(), aEnd = maImages.end(); aIt != aEnd; ++aIt ) + delete *aIt; } -// -------------------- -// - ImplImageRefData - -// -------------------- - -ImplImageRefData::~ImplImageRefData() +void ImplImageList::AddImage( const ::rtl::OUString &aName, + USHORT nId, const BitmapEx &aBitmapEx ) { - --mpImplData->mnIRefCount; - - if( mpImplData->mnRefCount || mpImplData->mnIRefCount ) - { - --mpImplData->mpAry[mnIndex].mnRefCount; - - if( !mpImplData->mpAry[mnIndex].mnRefCount ) - --mpImplData->mnRealCount; - } - else - delete mpImplData; + ImageAryData *pImg = new ImageAryData( aName, nId, aBitmapEx ); + maImages.push_back( pImg ); + if( aName.getLength() ) + maNameHash [ aName ] = pImg; } -// ----------------------------------------------------------------------- +void ImplImageList::RemoveImage( USHORT nPos ) +{ + ImageAryData *pImg = maImages[ nPos ]; + if( pImg->maName.getLength() ) + maNameHash.erase( pImg->maName ); + maImages.erase( maImages.begin() + nPos ); +} -BOOL ImplImageRefData::IsEqual( const ImplImageRefData& rData ) +USHORT ImplImageList::GetImageCount() const { - return( ( mpImplData == rData.mpImplData ) && ( mnIndex == rData.mnIndex ) ); + return sal::static_int_cast< USHORT >( maImages.size() ); } // ----------------- @@ -193,10 +209,6 @@ ImplImage::~ImplImage() case IMAGETYPE_IMAGE: delete static_cast< ImplImageData* >( mpData ); break; - - case IMAGETYPE_IMAGEREF: - delete static_cast< ImplImageRefData* >( mpData ); - break; } } |