1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _SV_IMAGE_H 29 #define _SV_IMAGE_H 30 31 #include <vcl/bitmapex.hxx> 32 33 #include <hash_map> 34 35 // ---------------- 36 // - ImplImageBmp - 37 // ---------------- 38 39 class ImplImageBmp 40 { 41 public: 42 43 ImplImageBmp(); 44 ~ImplImageBmp(); 45 46 void Create( long nItemWidth, long nItemHeight, sal_uInt16 nInitSize ); 47 void Create( const BitmapEx& rBmpEx, long nItemWidth, long nItemHeight,sal_uInt16 nInitSize ); 48 49 void Expand( sal_uInt16 nGrowSize ); 50 51 void Replace( sal_uInt16 nPos, sal_uInt16 nSrcPos ); 52 void Replace( sal_uInt16 nPos, const ImplImageBmp& rImageBmp, sal_uInt16 nSrcPos ); 53 void Replace( sal_uInt16 nPos, const BitmapEx& rBmpEx ); 54 55 void ReplaceColors( const Color* pSrcColors, const Color* pDstColors, sal_uIntPtr nColorCount ); 56 void ColorTransform( BmpColorMode eColorMode ); 57 void Invert(); 58 59 BitmapEx GetBitmapEx( sal_uInt16 nPosCount, sal_uInt16* pPosAry ) const; 60 61 void Draw( sal_uInt16 nPos, OutputDevice* pDev, const Point& rPos, sal_uInt16 nStyle, const Size* pSize = NULL ); 62 63 private: 64 65 BitmapEx maBmpEx; 66 BitmapEx maDisabledBmpEx; 67 BitmapEx* mpDisplayBmp; 68 Size maSize; 69 sal_uInt8* mpInfoAry; 70 sal_uInt16 mnSize; 71 72 void ImplUpdateDisplayBmp( OutputDevice* pOutDev ); 73 void ImplUpdateDisabledBmpEx( int nPos ); 74 75 private: // prevent assignment and copy construction 76 ImplImageBmp( const ImplImageBmp& ); 77 void operator=( const ImplImageBmp& ); 78 }; 79 80 // -------------- 81 // - ImageTypes - 82 // -------------- 83 84 enum ImageType { IMAGETYPE_BITMAP, IMAGETYPE_IMAGE }; 85 86 // ----------------- 87 // - ImplImageList - 88 // ----------------- 89 90 struct ImageAryData 91 { 92 ::rtl::OUString maName; 93 // Images identified by either name, or by id 94 sal_uInt16 mnId; 95 BitmapEx maBitmapEx; 96 97 ImageAryData(); 98 ImageAryData( const rtl::OUString &aName, 99 sal_uInt16 nId, const BitmapEx &aBitmap ); 100 ImageAryData( const ImageAryData& rData ); 101 ~ImageAryData(); 102 103 bool IsLoadable() { return maBitmapEx.IsEmpty() && maName.getLength(); } 104 void Load(const rtl::OUString &rPrefix); 105 106 ImageAryData& operator=( const ImageAryData& rData ); 107 }; 108 109 // ------------------------------------------------------------------------------ 110 111 struct ImplImageList 112 { 113 typedef std::vector<ImageAryData *> ImageAryDataVec; 114 typedef std::hash_map< rtl::OUString, ImageAryData *, rtl::OUStringHash > 115 ImageAryDataNameHash; 116 117 ImageAryDataVec maImages; 118 ImageAryDataNameHash maNameHash; 119 rtl::OUString maPrefix; 120 Size maImageSize; 121 sal_uIntPtr mnRefCount; 122 123 ImplImageList(); 124 ImplImageList( const ImplImageList &aSrc ); 125 ~ImplImageList(); 126 127 void AddImage( const ::rtl::OUString &aName, 128 sal_uInt16 nId, const BitmapEx &aBitmapEx ); 129 void RemoveImage( sal_uInt16 nPos ); 130 sal_uInt16 GetImageCount() const; 131 }; 132 133 // -------------------- 134 // - ImplImageRefData - 135 // -------------------- 136 137 struct ImplImageRefData 138 { 139 ImplImageList* mpImplData; 140 sal_uInt16 mnIndex; 141 142 ImplImageRefData() {} // Um Warning zu umgehen 143 ~ImplImageRefData(); 144 145 sal_Bool IsEqual( const ImplImageRefData& rData ); 146 }; 147 148 // ---------------- 149 // - ImpImageData - 150 // ---------------- 151 152 struct ImplImageData 153 { 154 ImplImageBmp* mpImageBitmap; 155 BitmapEx maBmpEx; 156 157 ImplImageData( const BitmapEx& rBmpEx ); 158 ~ImplImageData(); 159 160 sal_Bool IsEqual( const ImplImageData& rData ); 161 }; 162 163 // ------------- 164 // - ImplImage - 165 // ------------- 166 167 struct ImplImage 168 { 169 sal_uIntPtr mnRefCount; 170 // TODO: use inheritance to get rid of meType+mpData 171 void* mpData; 172 ImageType meType; 173 174 ImplImage(); 175 ~ImplImage(); 176 177 private: // prevent assignment and copy construction 178 ImplImage( const ImplImage&); 179 void operator=( const ImplImage&); 180 }; 181 182 #endif // _SV_IMAGE_H 183