blob: d209c31f71d34e6dbd48fe16901ad93281706f91 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SV_IMAGE_HXX
#define _SV_IMAGE_HXX
#include <vcl/dllapi.h>
#include <tools/gen.hxx>
#include <tools/resid.hxx>
#include <vcl/sv.h>
#include <vcl/bitmapex.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <vector>
struct ImplImage;
struct ImplImageList;
namespace com { namespace sun { namespace star { namespace graphic { class XGraphic;} } } }
// -----------
// - Defines -
// -----------
#define IMAGE_STDBTN_COLOR Color( 0xC0, 0xC0, 0xC0 )
#define IMAGELIST_IMAGE_NOTFOUND ((sal_uInt16)0xFFFF)
// -----------------------
// - ImageColorTransform -
// -----------------------
enum ImageColorTransform
{
IMAGECOLORTRANSFORM_NONE = 0,
IMAGECOLORTRANSFORM_HIGHCONTRAST = 1,
IMAGECOLORTRANSFORM_MONOCHROME_BLACK = 2,
IMAGECOLORTRANSFORM_MONOCHROME_WHITE = 3
};
// ---------
// - Image -
// ---------
class VCL_DLLPUBLIC Image
{
friend class ImageList;
friend class OutputDevice;
public:
Image();
Image( const ResId& rResId );
Image( const Image& rImage );
Image( const BitmapEx& rBitmapEx );
Image( const Bitmap& rBitmap );
Image( const Bitmap& rBitmap, const Bitmap& rMaskBitmap );
Image( const Bitmap& rBitmap, const Color& rColor );
Image( const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rxGraphic );
~Image();
Size GetSizePixel() const;
BitmapEx GetBitmapEx() const;
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > GetXGraphic() const;
Image GetColorTransformedImage( ImageColorTransform eColorTransform ) const;
static void GetColorTransformArrays( ImageColorTransform eColorTransform, Color*& rpSrcColor, Color*& rpDstColor, sal_uLong& rColorCount );
void Invert();
sal_Bool operator!() const { return( !mpImplData ? true : false ); }
Image& operator=( const Image& rImage );
sal_Bool operator==( const Image& rImage ) const;
sal_Bool operator!=( const Image& rImage ) const { return !(Image::operator==( rImage )); }
private:
ImplImage* mpImplData;
SAL_DLLPRIVATE void ImplInit( const BitmapEx& rBmpEx );
};
// -------------
// - ImageList -
// -------------
class VCL_DLLPUBLIC ImageList
{
public:
ImageList( sal_uInt16 nInit = 8, sal_uInt16 nGrow = 4 );
ImageList( const ResId& rResId );
ImageList( const ::std::vector< ::rtl::OUString >& rNameVector,
const ::rtl::OUString& rPrefix,
const Color* pMaskColor = NULL );
ImageList( const ImageList& rImageList );
~ImageList();
void Clear();
void InsertFromHorizontalStrip( const BitmapEx &rBitmapEx,
const std::vector< rtl::OUString > &rNameVector );
void InsertFromHorizontalBitmap( const ResId& rResId,
sal_uInt16 nCount,
const Color *pNonAlphaMaskColor,
const Color *pSearchColors = NULL,
const Color *pReplaceColors = NULL,
sal_uLong nColorCount = 0);
BitmapEx GetAsHorizontalStrip() const;
sal_uInt16 GetImageCount() const;
Size GetImageSize() const;
void AddImage( sal_uInt16 nNewId, const Image& rImage );
void AddImage( const ::rtl::OUString& rImageName, const Image& rImage );
void ReplaceImage( sal_uInt16 nId, const Image& rImage );
void ReplaceImage( const ::rtl::OUString& rImageName, const Image& rImage );
void ReplaceImage( sal_uInt16 nId, sal_uInt16 nReplaceId );
void ReplaceImage( const ::rtl::OUString& rImageName, const ::rtl::OUString& rReplaceName );
void RemoveImage( sal_uInt16 nId );
void RemoveImage( const ::rtl::OUString& rImageName );
Image GetImage( sal_uInt16 nId ) const;
Image GetImage( const ::rtl::OUString& rImageName ) const;
sal_uInt16 GetImagePos( sal_uInt16 nId ) const;
bool HasImageAtPos( sal_uInt16 nId ) const;
sal_uInt16 GetImagePos( const ::rtl::OUString& rImageName ) const;
sal_uInt16 GetImageId( sal_uInt16 nPos ) const;
void GetImageIds( ::std::vector< sal_uInt16 >& rIds ) const;
::rtl::OUString GetImageName( sal_uInt16 nPos ) const;
void GetImageNames( ::std::vector< ::rtl::OUString >& rNames ) const;
ImageList& operator=( const ImageList& rImageList );
sal_Bool operator==( const ImageList& rImageList ) const;
sal_Bool operator!=( const ImageList& rImageList ) const { return !(ImageList::operator==( rImageList )); }
private:
ImplImageList* mpImplData;
sal_uInt16 mnInitSize;
sal_uInt16 mnGrowSize;
SAL_DLLPRIVATE void ImplInitBitmapEx( const ::rtl::OUString& rUserImageName,
const ::std::vector< ::rtl::OUString >& rImageNames,
const ::rtl::OUString& rSymbolsStyle,
BitmapEx& rBmpEx,
const Color* pMaskColor ) const;
SAL_DLLPRIVATE void ImplInit( sal_uInt16 nItems, const Size &rSize );
SAL_DLLPRIVATE sal_uInt16 ImplGetImageId( const ::rtl::OUString& rImageName ) const;
SAL_DLLPRIVATE void ImplMakeUnique();
};
#endif // _SV_IMAGE_HXX