blob: 158f4b9400569df18552116ced726d99f715729f [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_SALBMP_H
#define _SV_SALBMP_H
#include "tools/gen.hxx"
#include "basebmp/bitmapdevice.hxx"
#include "vcl/salbtype.hxx"
#include "aqua/salconst.h"
#include "aqua/salgdi.h"
#include "saldata.hxx"
#include "salinst.hxx"
#include "salvd.hxx"
#include "salbmp.hxx"
#include "salcolorutils.hxx"
// --------------
// - SalBitmap -
// --------------
struct BitmapBuffer;
class BitmapColor;
class BitmapPalette;
class AquaSalVirtualDevice;
class AquaSalGraphics;
class AquaSalBitmap : public SalBitmap
{
public:
CGContextRef mxGraphicContext;
mutable CGImageRef mxCachedImage;
BitmapPalette maPalette;
basebmp::RawMemorySharedArray maUserBuffer;
basebmp::RawMemorySharedArray maContextBuffer;
sal_uInt16 mnBits;
int mnWidth;
int mnHeight;
sal_uInt32 mnBytesPerRow;
public:
AquaSalBitmap();
virtual ~AquaSalBitmap();
public:
// SalBitmap methods
bool Create( const Size& rSize, sal_uInt16 nBitCount, const BitmapPalette& rPal );
bool Create( const SalBitmap& rSalBmp );
bool Create( const SalBitmap& rSalBmp, SalGraphics* pGraphics );
bool Create( const SalBitmap& rSalBmp, sal_uInt16 nNewBitCount );
void Destroy();
Size GetSize() const;
sal_uInt16 GetBitCount() const;
BitmapBuffer *AcquireBuffer( bool bReadOnly );
void ReleaseBuffer( BitmapBuffer* pBuffer, bool bReadOnly );
bool GetSystemData( BitmapSystemData& rData );
private:
// quartz helper
bool CreateContext();
void DestroyContext();
bool AllocateUserData();
void ConvertBitmapData( sal_uInt32 nWidth, sal_uInt32 nHeight,
sal_uInt16 nDestBits, sal_uInt32 nDestBytesPerRow, const BitmapPalette& rDestPalette, sal_uInt8* pDestData,
sal_uInt16 nSrcBits, sal_uInt32 nSrcBytesPerRow, const BitmapPalette& rSrcPalette, sal_uInt8* pSrcData );
public:
bool Create( CGLayerRef xLayer, int nBitCount, int nX, int nY, int nWidth, int nHeight, bool bMirrorVert = true );
public:
CGImageRef CreateWithMask( const AquaSalBitmap& rMask, int nX, int nY, int nWidth, int nHeight ) const;
CGImageRef CreateColorMask( int nX, int nY, int nWidth, int nHeight, SalColor nMaskColor ) const;
CGImageRef CreateCroppedImage( int nX, int nY, int nWidth, int nHeight ) const;
};
#endif // _SV_SALBMP_HXX