diff options
Diffstat (limited to 'core/include/fxge/fx_dib.h')
-rw-r--r-- | core/include/fxge/fx_dib.h | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/core/include/fxge/fx_dib.h b/core/include/fxge/fx_dib.h index 43746e5d48..e39bad2b87 100644 --- a/core/include/fxge/fx_dib.h +++ b/core/include/fxge/fx_dib.h @@ -160,23 +160,30 @@ FX_ARGB ArgbEncode(int a, FX_COLORREF rgb); #define FXSETFLAG_ALPHA_FILL(flag, val) flag = ((val) | (flag & 0xffffff00)) #define FXSETFLAG_ALPHA_STROKE(flag, val) \ flag = (((val) << 16) | (flag & 0xff00ffff)) - class CFX_DIBSource { public: virtual ~CFX_DIBSource(); int GetWidth() const { return m_Width; } + int GetHeight() const { return m_Height; } FXDIB_Format GetFormat() const { return (FXDIB_Format)(m_AlphaFlag * 0x100 + m_bpp); } + FX_DWORD GetPitch() const { return m_Pitch; } + FX_DWORD* GetPalette() const { return m_pPalette; } - virtual uint8_t* GetBuffer() const; + virtual uint8_t* GetBuffer() const { return NULL; } + virtual const uint8_t* GetScanline(int line) const = 0; - virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const; + + virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const { + return FALSE; + } + virtual void DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp, @@ -184,6 +191,7 @@ class CFX_DIBSource { FX_BOOL bFlipX, int clip_left, int clip_width) const = 0; + virtual void SetDownSampleSize(int width, int height) {} int GetBPP() const { return m_bpp; } @@ -211,6 +219,7 @@ class CFX_DIBSource { void CopyPalette(const FX_DWORD* pSrcPal, FX_DWORD size = 256); CFX_DIBitmap* Clone(const FX_RECT* pClip = NULL) const; + CFX_DIBitmap* CloneConvert(FXDIB_Format format, const FX_RECT* pClip = NULL, void* pIccTransform = NULL) const; @@ -219,6 +228,7 @@ class CFX_DIBSource { int dest_height, FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const; + CFX_DIBitmap* TransformTo(const CFX_Matrix* pMatrix, int& left, int& top, @@ -226,6 +236,7 @@ class CFX_DIBSource { const FX_RECT* pClip = NULL) const; CFX_DIBitmap* GetAlphaMask(const FX_RECT* pClip = NULL) const; + FX_BOOL CopyAlphaMask(const CFX_DIBSource* pAlphaMask, const FX_RECT* pClip = NULL); @@ -251,15 +262,23 @@ class CFX_DIBSource { CFX_DIBSource(); int m_Width; + int m_Height; + int m_bpp; + FX_DWORD m_AlphaFlag; + FX_DWORD m_Pitch; + FX_DWORD* m_pPalette; void BuildPalette(); + FX_BOOL BuildAlphaMask(); + int FindPalette(FX_DWORD color) const; + void GetPalette(FX_DWORD* pal, int alpha) const; }; class CFX_DIBitmap : public CFX_DIBSource { @@ -277,8 +296,10 @@ class CFX_DIBitmap : public CFX_DIBSource { FX_BOOL Copy(const CFX_DIBSource* pSrc); // CFX_DIBSource - uint8_t* GetBuffer() const override; - const uint8_t* GetScanline(int line) const override; + uint8_t* GetBuffer() const override { return m_pBuffer; } + const uint8_t* GetScanline(int line) const override { + return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL; + } void DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp, |