diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-01-05 14:09:17 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-01-05 15:00:54 +0000 |
commit | 3cd39b91f872ca32b09a362de2cb0efaf0e2ba3b (patch) | |
tree | 43cdb5f4e075c00eb6b63648ed825a1281192e8e /vcl/source/image | |
parent | 4f5cd607e30633ca51263c2f45c4753e8990302f (diff) |
move ImageList to framework
this can probably be replaced by a std::*map<Image>
Change-Id: Ic36c5f406f5ea51cb9ff135858e319e0877179c7
Diffstat (limited to 'vcl/source/image')
-rw-r--r-- | vcl/source/image/ImageArrayData.cxx | 93 | ||||
-rw-r--r-- | vcl/source/image/ImageList.cxx | 317 | ||||
-rw-r--r-- | vcl/source/image/ImplImageList.cxx | 73 |
3 files changed, 0 insertions, 483 deletions
diff --git a/vcl/source/image/ImageArrayData.cxx b/vcl/source/image/ImageArrayData.cxx deleted file mode 100644 index e1854d2aa55a..000000000000 --- a/vcl/source/image/ImageArrayData.cxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- 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 <vcl/outdev.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/alpha.hxx> -#include <vcl/window.hxx> -#include <vcl/bitmapaccess.hxx> -#include <vcl/virdev.hxx> -#include <vcl/image.hxx> -#include <vcl/settings.hxx> -#include <vcl/svapp.hxx> -#include <vcl/ImageTree.hxx> - -#include <image.h> -#include <memory> - -#if OSL_DEBUG_LEVEL > 0 -#include <rtl/strbuf.hxx> -#endif - -#include "BitmapProcessor.hxx" - -ImageAryData::ImageAryData( const ImageAryData& rData ) : - maName( rData.maName ), - mnId( rData.mnId ), - maBitmapEx( rData.maBitmapEx ) -{ -} - -ImageAryData::ImageAryData( const OUString &aName, - sal_uInt16 nId, const BitmapEx &aBitmap ) - : maName( aName ), mnId( nId ), maBitmapEx( aBitmap ) -{ -} - -ImageAryData::~ImageAryData() -{ -} - -ImageAryData& ImageAryData::operator=( const ImageAryData& rData ) -{ - maName = rData.maName; - mnId = rData.mnId; - maBitmapEx = rData.maBitmapEx; - - return *this; -} - -void ImageAryData::Load(const OUString &rPrefix) -{ - OUString aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme(); - - OUString aFileName = rPrefix; - aFileName += maName; - - bool bSuccess = ImageTree::get().loadImage(aFileName, aIconTheme, maBitmapEx, true); - - if (bSuccess) - {} -#if OSL_DEBUG_LEVEL > 0 - else - { - OStringBuffer aMessage; - aMessage.append( "ImageAryData::Load: failed to load image '" ); - aMessage.append( OUStringToOString( aFileName, RTL_TEXTENCODING_UTF8 ).getStr() ); - aMessage.append( "'" ); - aMessage.append( " from icon theme '" ); - aMessage.append( OUStringToOString( aIconTheme, RTL_TEXTENCODING_UTF8 ).getStr() ); - aMessage.append( "'" ); - OSL_FAIL( aMessage.makeStringAndClear().getStr() ); - } -#endif -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/image/ImageList.cxx b/vcl/source/image/ImageList.cxx deleted file mode 100644 index 6610c51c3216..000000000000 --- a/vcl/source/image/ImageList.cxx +++ /dev/null @@ -1,317 +0,0 @@ -/* -*- 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 <osl/file.hxx> -#include <tools/debug.hxx> -#include <tools/stream.hxx> -#include <tools/rc.h> -#include <tools/rc.hxx> -#include <tools/resmgr.hxx> -#include <vcl/settings.hxx> -#include <vcl/outdev.hxx> -#include <vcl/graph.hxx> -#include <vcl/graphicfilter.hxx> -#include <vcl/svapp.hxx> -#include <vcl/image.hxx> -#include <vcl/imagerepository.hxx> -#include <vcl/ImageTree.hxx> -#include <image.h> - -ImageList::ImageList() -{ -} - -ImageList::ImageList(const std::vector< OUString >& rNameVector, - const OUString& rPrefix) -{ - SAL_INFO( "vcl", "vcl: ImageList::ImageList(const vector< OUString >& ..." ); - - ImplInit( sal::static_int_cast< sal_uInt16 >( rNameVector.size() ), Size() ); - - mpImplData->maPrefix = rPrefix; - for( size_t i = 0; i < rNameVector.size(); ++i ) - { - mpImplData->AddImage( rNameVector[ i ], static_cast< sal_uInt16 >( i ) + 1, BitmapEx() ); - } -} - -void ImageList::ImplInit( sal_uInt16 nItems, const Size &rSize ) -{ - mpImplData.reset(new ImplImageList); - mpImplData->maImages.reserve( nItems ); - mpImplData->maImageSize = rSize; -} - -// FIXME: Rather a performance hazard -BitmapEx ImageList::GetAsHorizontalStrip() const -{ - Size aSize( mpImplData->maImageSize ); - sal_uInt16 nCount = GetImageCount(); - if( !nCount ) - return BitmapEx(); - aSize.Width() *= nCount; - - // Load any stragglers - for (sal_uInt16 nIdx = 0; nIdx < nCount; nIdx++) - { - ImageAryData *pData = mpImplData->maImages[ nIdx ]; - if( pData->IsLoadable() ) - pData->Load( mpImplData->maPrefix ); - } - - BitmapEx aTempl = mpImplData->maImages[ 0 ]->maBitmapEx; - BitmapEx aResult; - Bitmap aPixels( aSize, aTempl.GetBitmap().GetBitCount() ); - if( aTempl.IsAlpha() ) - aResult = BitmapEx( aPixels, AlphaMask( aSize ) ); - else if( aTempl.IsTransparent() ) - aResult = BitmapEx( aPixels, Bitmap( aSize, aTempl.GetMask().GetBitCount() ) ); - else - aResult = BitmapEx( aPixels ); - - Rectangle aSrcRect( Point( 0, 0 ), mpImplData->maImageSize ); - for (sal_uInt16 nIdx = 0; nIdx < nCount; nIdx++) - { - Rectangle aDestRect( Point( nIdx * mpImplData->maImageSize.Width(), 0 ), - mpImplData->maImageSize ); - ImageAryData *pData = mpImplData->maImages[ nIdx ]; - aResult.CopyPixel( aDestRect, aSrcRect, &pData->maBitmapEx); - } - - return aResult; -} - -void ImageList::InsertFromHorizontalStrip( const BitmapEx &rBitmapEx, - const std::vector< OUString > &rNameVector ) -{ - sal_uInt16 nItems = sal::static_int_cast< sal_uInt16 >( rNameVector.size() ); - - if (!nItems) - return; - - Size aSize( rBitmapEx.GetSizePixel() ); - DBG_ASSERT (rBitmapEx.GetSizePixel().Width() % nItems == 0, - "ImageList::InsertFromHorizontalStrip - very odd size"); - aSize.Width() /= nItems; - ImplInit( nItems, aSize ); - - for (sal_uInt16 nIdx = 0; nIdx < nItems; nIdx++) - { - BitmapEx aBitmap( rBitmapEx, Point( nIdx * aSize.Width(), 0 ), aSize ); - mpImplData->AddImage( rNameVector[ nIdx ], nIdx + 1, aBitmap ); - } -} - -sal_uInt16 ImageList::ImplGetImageId( const OUString& rImageName ) const -{ - ImageAryData *pImg = mpImplData->maNameHash[ rImageName ]; - if( pImg ) - return pImg->mnId; - else - return 0; -} - -void ImageList::AddImage( const OUString& rImageName, const Image& rImage ) -{ - SAL_WARN_IF( GetImagePos( rImageName ) != IMAGELIST_IMAGE_NOTFOUND, "vcl", "ImageList::AddImage() - ImageName already exists" ); - - if( !mpImplData ) - ImplInit( 0, rImage.GetSizePixel() ); - - mpImplData->AddImage( rImageName, GetImageCount() + 1, - rImage.GetBitmapEx() ); -} - -void ImageList::ReplaceImage( const OUString& rImageName, const Image& rImage ) -{ - const sal_uInt16 nId = ImplGetImageId( rImageName ); - - if( nId ) - { - //Just replace the bitmap rather than doing RemoveImage / AddImage - //which breaks index-based iteration. - ImageAryData *pImg = mpImplData->maNameHash[ rImageName ]; - pImg->maBitmapEx = rImage.GetBitmapEx(); - } -} - -void ImageList::RemoveImage( sal_uInt16 nId ) -{ - for( size_t i = 0; i < mpImplData->maImages.size(); ++i ) - { - if( mpImplData->maImages[ i ]->mnId == nId ) - { - mpImplData->RemoveImage( static_cast< sal_uInt16 >( i ) ); - break; - } - } -} - -Image ImageList::GetImage( sal_uInt16 nId ) const -{ - Image aRet; - - if (mpImplData) - { - for (ImageAryData* pImageData : mpImplData->maImages) - { - if (pImageData->mnId == nId) - { - if (pImageData->IsLoadable()) - pImageData->Load(mpImplData->maPrefix); - aRet = Image(pImageData->maBitmapEx); - } - } - } - - if (!aRet) - { - BitmapEx rBitmap; - bool bResult = vcl::ImageRepository::loadDefaultImage(rBitmap); - if (bResult) - aRet = Image(rBitmap); - } - - return aRet; -} - -Image ImageList::GetImage( const OUString& rImageName ) const -{ - if( mpImplData ) - { - ImageAryData *pImg = mpImplData->maNameHash[ rImageName ]; - - if( pImg ) - { - if( pImg->IsLoadable() ) - pImg->Load( mpImplData->maPrefix ); - return Image( pImg->maBitmapEx ); - } - } - - return Image(); -} - -sal_uInt16 ImageList::GetImageCount() const -{ - return mpImplData ? static_cast< sal_uInt16 >( mpImplData->maImages.size() ) : 0; -} - -sal_uInt16 ImageList::GetImagePos( sal_uInt16 nId ) const -{ - - if( mpImplData && nId ) - { - for( size_t i = 0; i < mpImplData->maImages.size(); ++i ) - { - if (mpImplData->maImages[ i ]->mnId == nId) - return static_cast< sal_uInt16 >( i ); - } - } - - return IMAGELIST_IMAGE_NOTFOUND; -} - -bool ImageList::HasImageForId( sal_uInt16 nId ) const -{ - return GetImagePos( nId ) != IMAGELIST_IMAGE_NOTFOUND; -} - -sal_uInt16 ImageList::GetImagePos( const OUString& rImageName ) const -{ - if( mpImplData && !rImageName.isEmpty() ) - { - for( size_t i = 0; i < mpImplData->maImages.size(); i++ ) - { - if (mpImplData->maImages[i]->maName == rImageName) - return static_cast< sal_uInt16 >( i ); - } - } - - return IMAGELIST_IMAGE_NOTFOUND; -} - -sal_uInt16 ImageList::GetImageId( sal_uInt16 nPos ) const -{ - if( mpImplData && (nPos < GetImageCount()) ) - return mpImplData->maImages[ nPos ]->mnId; - - return 0; -} - -OUString ImageList::GetImageName( sal_uInt16 nPos ) const -{ - if( mpImplData && (nPos < GetImageCount()) ) - return mpImplData->maImages[ nPos ]->maName; - - return OUString(); -} - -void ImageList::GetImageNames( std::vector< OUString >& rNames ) const -{ - SAL_INFO( "vcl", "vcl: ImageList::GetImageNames" ); - - rNames = std::vector< OUString >(); - - if( mpImplData ) - { - for(const ImageAryData* pImage : mpImplData->maImages) - { - const OUString& rName( pImage->maName ); - if( !rName.isEmpty()) - rNames.push_back( rName ); - } - } -} - -Size ImageList::GetImageSize() const -{ - Size aRet; - - if( mpImplData ) - { - aRet = mpImplData->maImageSize; - - // force load of 1st image to see - uncommon case. - if( aRet.Width() == 0 && aRet.Height() == 0 && - !mpImplData->maImages.empty() ) - { - Image aTmp = GetImage( mpImplData->maImages[ 0 ]->mnId ); - aRet = mpImplData->maImageSize = aTmp.GetSizePixel(); - } - } - return aRet; -} - -bool ImageList::operator==( const ImageList& rImageList ) const -{ - bool bRet = false; - - if( rImageList.mpImplData == mpImplData ) - bRet = true; - else if( !rImageList.mpImplData || !mpImplData ) - bRet = false; - else if( rImageList.GetImageCount() == GetImageCount() && - rImageList.mpImplData->maImageSize == mpImplData->maImageSize ) - bRet = true; // strange semantic - - return bRet; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/image/ImplImageList.cxx b/vcl/source/image/ImplImageList.cxx deleted file mode 100644 index f1a0d94973c8..000000000000 --- a/vcl/source/image/ImplImageList.cxx +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- 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 <vcl/outdev.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/alpha.hxx> -#include <vcl/window.hxx> -#include <vcl/bitmapaccess.hxx> -#include <vcl/virdev.hxx> -#include <vcl/image.hxx> -#include <vcl/settings.hxx> - -#include <image.h> -#include <memory> - -ImplImageList::ImplImageList() -{ -} - -ImplImageList::ImplImageList( const ImplImageList &aSrc ) - : maPrefix(aSrc.maPrefix) - , maImageSize(aSrc.maImageSize) -{ - maImages.reserve( aSrc.maImages.size() ); - for ( std::vector<ImageAryData *>::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.isEmpty() ) - maNameHash [ pAryData->maName ] = pAryData; - } -} - -ImplImageList::~ImplImageList() -{ - for ( std::vector<ImageAryData *>::iterator aIt = maImages.begin(), aEnd = maImages.end(); aIt != aEnd; ++aIt ) - delete *aIt; -} - -void ImplImageList::AddImage( const OUString &aName, - sal_uInt16 nId, const BitmapEx &aBitmapEx ) -{ - ImageAryData *pImg = new ImageAryData( aName, nId, aBitmapEx ); - maImages.push_back( pImg ); - if( !aName.isEmpty() ) - maNameHash [ aName ] = pImg; -} - -void ImplImageList::RemoveImage( sal_uInt16 nPos ) -{ - ImageAryData *pImg = maImages[ nPos ]; - if( !pImg->maName.isEmpty() ) - maNameHash.erase( pImg->maName ); - maImages.erase( maImages.begin() + nPos ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |