summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLouis-Francis Ratté-Boulianne <lfrb@collabora.com>2014-12-03 17:02:37 -0500
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-12-15 22:47:05 +0100
commit313e89f9fbb1aa0da148d4d75be649327d67d8f7 (patch)
treef73303acb395df982ac2fc6d42aad04949a502a1 /include
parente2b093f66e2613ad1a85c662159f57df4bc96a67 (diff)
vcl: Add BitmapInfoAccess for bitmaps' metadata access
Change-Id: Iec9f8c7d8f7cded0aef9e017373e44387dc0b05c
Diffstat (limited to 'include')
-rw-r--r--include/vcl/bitmap.hxx4
-rw-r--r--include/vcl/bmpacc.hxx120
-rw-r--r--include/vcl/salbtype.hxx10
3 files changed, 85 insertions, 49 deletions
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index 3f6ceeff6913..1ce448133367 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -293,6 +293,7 @@ private:
}
};
+class BitmapInfoAccess;
class BitmapReadAccess;
class BitmapWriteAccess;
class BitmapPalette;
@@ -849,9 +850,10 @@ public:
public:
+ BitmapInfoAccess* AcquireInfoAccess();
BitmapReadAccess* AcquireReadAccess();
BitmapWriteAccess* AcquireWriteAccess();
- void ReleaseAccess( BitmapReadAccess* pAccess );
+ void ReleaseAccess( BitmapInfoAccess* pAccess );
typedef vcl::ScopedBitmapAccess< BitmapReadAccess, Bitmap, &Bitmap::AcquireReadAccess >
ScopedReadAccess;
diff --git a/include/vcl/bmpacc.hxx b/include/vcl/bmpacc.hxx
index 252599b5f76c..bc43dbf175a9 100644
--- a/include/vcl/bmpacc.hxx
+++ b/include/vcl/bmpacc.hxx
@@ -62,14 +62,14 @@ typedef BitmapColor (*FncGetPixel)( ConstScanline pScanline, long nX, const Colo
typedef void (*FncSetPixel)( Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask& rMask );
-// - BitmapReadAccess -
-class VCL_DLLPUBLIC BitmapReadAccess
+// - BitmapInfoAccess -
+class VCL_DLLPUBLIC BitmapInfoAccess
{
- friend class BitmapWriteAccess;
+ friend class BitmapReadAccess;
public:
- BitmapReadAccess( Bitmap& rBitmap );
- virtual ~BitmapReadAccess();
+ BitmapInfoAccess( Bitmap& rBitmap );
+ virtual ~BitmapInfoAccess();
inline bool operator!() const;
@@ -87,9 +87,6 @@ public:
inline sal_uInt16 GetBitCount() const;
inline BitmapColor GetBestMatchingColor( const BitmapColor& rBitmapColor );
- inline Scanline GetBuffer() const;
- inline Scanline GetScanline( long nY ) const;
-
inline bool HasPalette() const;
inline const BitmapPalette& GetPalette() const;
inline sal_uInt16 GetPaletteEntryCount() const;
@@ -100,6 +97,38 @@ public:
inline bool HasColorMask() const;
inline ColorMask& GetColorMask() const;
+private:
+
+ BitmapInfoAccess() {}
+ BitmapInfoAccess( const BitmapInfoAccess& ) {}
+ BitmapInfoAccess& operator=( const BitmapInfoAccess& ) { return *this; }
+
+protected:
+ Bitmap maBitmap;
+ BitmapBuffer* mpBuffer;
+ ColorMask maColorMask;
+ BitmapAccessMode mnAccessMode;
+
+ SAL_DLLPRIVATE void ImplCreate( Bitmap& rBitmap );
+ SAL_DLLPRIVATE void ImplDestroy();
+
+protected:
+ BitmapInfoAccess( Bitmap& rBitmap, BitmapAccessMode nMode );
+
+};
+
+// - BitmapReadAccess -
+class VCL_DLLPUBLIC BitmapReadAccess : public BitmapInfoAccess
+{
+ friend class BitmapWriteAccess;
+
+public:
+ BitmapReadAccess( Bitmap& rBitmap );
+ virtual ~BitmapReadAccess();
+
+ inline Scanline GetBuffer() const;
+ inline Scanline GetScanline( long nY ) const;
+
inline BitmapColor GetPixelFromData( const sal_uInt8* pData, long nX ) const;
inline void SetPixelOnData( sal_uInt8* pData, long nX, const BitmapColor& rBitmapColor );
inline BitmapColor GetPixel( long nY, long nX ) const;
@@ -117,21 +146,16 @@ public:
private:
BitmapReadAccess() {}
- BitmapReadAccess( const BitmapReadAccess& ) {}
+ BitmapReadAccess( const BitmapReadAccess& ) : BitmapInfoAccess() {}
BitmapReadAccess& operator=( const BitmapReadAccess& ) { return *this; }
protected:
- Bitmap maBitmap;
- BitmapBuffer* mpBuffer;
Scanline* mpScanBuf;
- ColorMask maColorMask;
FncGetPixel mFncGetPixel;
FncSetPixel mFncSetPixel;
- bool mbModify;
-
- SAL_DLLPRIVATE void ImplCreate( Bitmap& rBitmap );
- SAL_DLLPRIVATE void ImplDestroy();
+ SAL_DLLPRIVATE void ImplInitScanBuffer( Bitmap& rBitmap );
+ SAL_DLLPRIVATE void ImplClearScanBuffer();
SAL_DLLPRIVATE bool ImplSetAccessPointers( sal_uLong nFormat );
public:
@@ -158,7 +182,7 @@ public:
DECL_FORMAT( _32BIT_TC_MASK )
protected:
- BitmapReadAccess( Bitmap& rBitmap, bool bModify );
+ BitmapReadAccess( Bitmap& rBitmap, BitmapAccessMode nMode );
};
@@ -206,61 +230,61 @@ private:
};
// - Inlines -
-inline bool BitmapReadAccess::operator!() const
+inline bool BitmapInfoAccess::operator!() const
{
return( mpBuffer == NULL );
}
-inline long BitmapReadAccess::Width() const
+inline long BitmapInfoAccess::Width() const
{
return( mpBuffer ? mpBuffer->mnWidth : 0L );
}
-inline long BitmapReadAccess::Height() const
+inline long BitmapInfoAccess::Height() const
{
return( mpBuffer ? mpBuffer->mnHeight : 0L );
}
-inline Point BitmapReadAccess::TopLeft() const
+inline Point BitmapInfoAccess::TopLeft() const
{
return Point();
}
-inline Point BitmapReadAccess::BottomRight() const
+inline Point BitmapInfoAccess::BottomRight() const
{
return Point( Width() - 1L, Height() - 1L );
}
-inline bool BitmapReadAccess::IsTopDown() const
+inline bool BitmapInfoAccess::IsTopDown() const
{
assert(mpBuffer && "Access is not valid!");
return mpBuffer && ( BMP_SCANLINE_ADJUSTMENT( mpBuffer->mnFormat ) == BMP_FORMAT_TOP_DOWN );
}
-inline bool BitmapReadAccess::IsBottomUp() const
+inline bool BitmapInfoAccess::IsBottomUp() const
{
return !IsTopDown();
}
-inline sal_uLong BitmapReadAccess::GetScanlineFormat() const
+inline sal_uLong BitmapInfoAccess::GetScanlineFormat() const
{
assert(mpBuffer && "Access is not valid!");
return( mpBuffer ? BMP_SCANLINE_FORMAT( mpBuffer->mnFormat ) : 0UL );
}
-inline sal_uLong BitmapReadAccess::GetScanlineSize() const
+inline sal_uLong BitmapInfoAccess::GetScanlineSize() const
{
assert(mpBuffer && "Access is not valid!");
return( mpBuffer ? mpBuffer->mnScanlineSize : 0UL );
}
-inline sal_uInt16 BitmapReadAccess::GetBitCount() const
+inline sal_uInt16 BitmapInfoAccess::GetBitCount() const
{
assert(mpBuffer && "Access is not valid!");
return( mpBuffer ? mpBuffer->mnBitCount : 0 );
}
-inline BitmapColor BitmapReadAccess::GetBestMatchingColor( const BitmapColor& rBitmapColor )
+inline BitmapColor BitmapInfoAccess::GetBestMatchingColor( const BitmapColor& rBitmapColor )
{
if( HasPalette() )
return BitmapColor( (sal_uInt8) GetBestPaletteIndex( rBitmapColor ) );
@@ -268,50 +292,37 @@ inline BitmapColor BitmapReadAccess::GetBestMatchingColor( const BitmapColor& rB
return rBitmapColor;
}
-inline Scanline BitmapReadAccess::GetBuffer() const
-{
- assert(mpBuffer && "Access is not valid!");
- return( mpBuffer ? mpBuffer->mpBits : NULL );
-}
-
-inline Scanline BitmapReadAccess::GetScanline( long nY ) const
-{
- assert(mpBuffer && "Access is not valid!");
- assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!");
- return( mpBuffer ? mpScanBuf[ nY ] : NULL );
-}
-
-inline bool BitmapReadAccess::HasPalette() const
+inline bool BitmapInfoAccess::HasPalette() const
{
assert(mpBuffer && "Access is not valid!");
return( mpBuffer && !!mpBuffer->maPalette );
}
-inline const BitmapPalette& BitmapReadAccess::GetPalette() const
+inline const BitmapPalette& BitmapInfoAccess::GetPalette() const
{
assert(mpBuffer && "Access is not valid!");
return mpBuffer->maPalette;
}
-inline sal_uInt16 BitmapReadAccess::GetPaletteEntryCount() const
+inline sal_uInt16 BitmapInfoAccess::GetPaletteEntryCount() const
{
assert(HasPalette() && "Bitmap has no palette!");
return( HasPalette() ? mpBuffer->maPalette.GetEntryCount() : 0 );
}
-inline const BitmapColor& BitmapReadAccess::GetPaletteColor( sal_uInt16 nColor ) const
+inline const BitmapColor& BitmapInfoAccess::GetPaletteColor( sal_uInt16 nColor ) const
{
assert(mpBuffer && "Access is not valid!");
assert(HasPalette() && "Bitmap has no palette!");
return mpBuffer->maPalette[ nColor ];
}
-inline const BitmapColor& BitmapReadAccess::GetBestPaletteColor( const BitmapColor& rBitmapColor ) const
+inline const BitmapColor& BitmapInfoAccess::GetBestPaletteColor( const BitmapColor& rBitmapColor ) const
{
return GetPaletteColor( GetBestPaletteIndex( rBitmapColor ) );
}
-inline bool BitmapReadAccess::HasColorMask() const
+inline bool BitmapInfoAccess::HasColorMask() const
{
assert(mpBuffer && "Access is not valid!");
const sal_uLong nFormat = BMP_SCANLINE_FORMAT( mpBuffer->mnFormat );
@@ -323,12 +334,25 @@ inline bool BitmapReadAccess::HasColorMask() const
nFormat == BMP_FORMAT_32BIT_TC_MASK );
}
-inline ColorMask& BitmapReadAccess::GetColorMask() const
+inline ColorMask& BitmapInfoAccess::GetColorMask() const
{
assert(mpBuffer && "Access is not valid!");
return mpBuffer->maColorMask;
}
+inline Scanline BitmapReadAccess::GetBuffer() const
+{
+ assert(mpBuffer && "Access is not valid!");
+ return( mpBuffer ? mpBuffer->mpBits : NULL );
+}
+
+inline Scanline BitmapReadAccess::GetScanline( long nY ) const
+{
+ assert(mpBuffer && "Access is not valid!");
+ assert(nY < mpBuffer->mnHeight && "y-coordinate out of range!");
+ return( mpBuffer ? mpScanBuf[ nY ] : NULL );
+}
+
inline BitmapColor BitmapReadAccess::GetPixel( long nY, long nX ) const
{
assert(mpBuffer && "Access is not valid!");
diff --git a/include/vcl/salbtype.hxx b/include/vcl/salbtype.hxx
index 9859aa3f1b83..d4ccb94f0649 100644
--- a/include/vcl/salbtype.hxx
+++ b/include/vcl/salbtype.hxx
@@ -268,6 +268,16 @@ struct VCL_DLLPUBLIC BitmapBuffer
};
+// - Access modes -
+typedef enum
+{
+ BITMAP_INFO_ACCESS,
+ BITMAP_READ_ACCESS,
+ BITMAP_WRITE_ACCESS
+}
+BitmapAccessMode;
+
+
// - StretchAndConvert -