X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0fc6958065fc93b8a2d7c8d51d23f7e69bffbdd..2fce94e20c94073fda30327c7c835def4415361c:/include/wx/rawbmp.h?ds=sidebyside diff --git a/include/wx/rawbmp.h b/include/wx/rawbmp.h index b7f3b01c30..105c85714c 100644 --- a/include/wx/rawbmp.h +++ b/include/wx/rawbmp.h @@ -104,7 +104,7 @@ template - + struct WXDLLEXPORT wxPixelFormat { // iterator over pixels is usually of type "ChannelType *" @@ -120,7 +120,7 @@ struct WXDLLEXPORT wxPixelFormat enum { BitsPerPixel = Bpp }; // size of one pixel in ChannelType units (usually bytes) - enum { SizePixel = BitsPerPixel / (8 * sizeof(ChannelType)) }; + enum { SizePixel = Bpp / (8 * sizeof(Channel)) }; // the channels indices inside the pixel enum @@ -143,20 +143,32 @@ struct WXDLLEXPORT wxPixelFormat typedef wxPixelFormat wxImagePixelFormat; // the (most common) native bitmap format without alpha support -typedef wxPixelFormat wxNativePixelFormat; +#if defined(__WXMSW__) + // under MSW the RGB components are inversed, they're in BGR order + typedef wxPixelFormat wxNativePixelFormat; + + #define wxPIXEL_FORMAT_ALPHA 3 +#elif defined(__WXMAC__) + // under Mac, first component is unused but still present, hence we use + // 32bpp, not 24 + typedef wxPixelFormat wxNativePixelFormat; + + #define wxPIXEL_FORMAT_ALPHA 0 +#elif defined(__WXCOCOA__) + // Cocoa is standard RGB or RGBA (normally it is RGBA) + typedef wxPixelFormat wxNativePixelFormat; + + #define wxPIXEL_FORMAT_ALPHA 3 +#endif // the (most common) native format for bitmaps with alpha channel -typedef wxPixelFormat wxAlphaPixelFormat; +#ifdef wxPIXEL_FORMAT_ALPHA + typedef wxPixelFormat wxAlphaPixelFormat; +#endif // wxPIXEL_FORMAT_ALPHA // we also define the (default/best) pixel format for the given class: this is // used as default value for the pixel format in wxPixelIterator template @@ -189,6 +201,8 @@ public: int GetWidth() const { return m_width; } int GetHeight() const { return m_height; } + wxSize GetSize() const { return wxSize(m_width, m_height); } + // the distance between two rows int GetRowStride() const { return m_stride; } @@ -322,7 +336,7 @@ struct WXDLLEXPORT wxPixelDataOut { m_pRGB += PixelFormat::SizePixel; if ( m_pAlpha ) - m_pAlpha += PixelFormat::SizePixel; + ++m_pAlpha; return *this; } @@ -560,10 +574,9 @@ struct WXDLLEXPORT wxPixelDataOut // private: -- see comment in the beginning of the file - // NB: for efficiency reasons this class must *not* have any other - // fields, otherwise it won't be put into a CPU register (as it - // should inside the inner loops) by some compilers, notably - // gcc + // for efficiency reasons this class should not have any other + // fields, otherwise it won't be put into a CPU register (as it + // should inside the inner loops) by some compilers, notably gcc ChannelType *m_ptr; }; @@ -578,7 +591,7 @@ struct WXDLLEXPORT wxPixelDataOut wxPixelDataIn(wxBitmap& bmp, const wxRect& rect) : m_bmp(bmp), m_pixels(bmp, *this) { - InitRect(rect.GetPositions(), rect.GetSize()); + InitRect(rect.GetPosition(), rect.GetSize()); } wxPixelDataIn(wxBitmap& bmp, const wxPoint& pt, const wxSize& sz) @@ -623,26 +636,31 @@ struct WXDLLEXPORT wxPixelDataOut }; }; +#ifdef __VISUALC__ + // typedef-name 'foo' used as synonym for class-name 'bar' + // (VC++ gives this warning each time wxPixelData::Base is used but it + // doesn't make any sense here -- what's wrong with using typedef instead + // of class, this is what it is here for!) + #pragma warning(disable: 4097) +#endif // __VISUALC__ template > class wxPixelData : - public wxPixelDataOut::wxPixelDataIn + public wxPixelDataOut::template wxPixelDataIn { public: - wxPixelData(Image& image) - : wxPixelDataOut::wxPixelDataIn(image) - { - } + typedef + typename wxPixelDataOut::template wxPixelDataIn + Base; - wxPixelData(Image& i, const wxPoint& pt, const wxSize& sz) - : wxPixelDataOut::wxPixelDataIn(i, pt, sz) - { - } + wxPixelData(Image& image) : Base(image) { } - wxPixelData(Image& i, const wxRect& rect) - : wxPixelDataOut::wxPixelDataIn(i, rect) - { - } + wxPixelData(Image& i, const wxRect& rect) : Base(i, rect) { } + + wxPixelData(Image& i, const wxPoint& pt, const wxSize& sz) + : Base(i, pt, sz) + { + } }; @@ -674,6 +692,7 @@ struct WXDLLEXPORT wxPixelIterator : wxPixelData::Iterator #ifdef __VISUALC__ #pragma warning(default: 4355) + #pragma warning(default: 4097) #endif #endif // _WX_RAWBMP_H_BASE_