#ifndef _WX_BITMAP_H_
#define _WX_BITMAP_H_
-#ifdef __GNUG__
- #pragma interface "bitmap.h"
-#endif
-
+#include "wx/os2/private.h"
#include "wx/os2/gdiimage.h"
#include "wx/gdicmn.h"
#include "wx/palette.h"
-class WXDLLEXPORT wxDC;
-class WXDLLEXPORT wxControl;
-class WXDLLEXPORT wxBitmap;
-class WXDLLEXPORT wxBitmapHandler;
-class WXDLLEXPORT wxIcon;
-class WXDLLEXPORT wxMask;
-class WXDLLEXPORT wxCursor;
-class WXDLLEXPORT wxControl;
+class WXDLLIMPEXP_FWD_CORE wxDC;
+class WXDLLIMPEXP_FWD_CORE wxControl;
+class WXDLLIMPEXP_FWD_CORE wxBitmap;
+class WXDLLIMPEXP_FWD_CORE wxBitmapHandler;
+class WXDLLIMPEXP_FWD_CORE wxIcon;
+class WXDLLIMPEXP_FWD_CORE wxMask;
+class WXDLLIMPEXP_FWD_CORE wxCursor;
+class WXDLLIMPEXP_FWD_CORE wxControl;
+class WXDLLIMPEXP_FWD_CORE wxPixelDataBase;
// ----------------------------------------------------------------------------
// Bitmap data
// wxBitmap functions accessing it
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxBitmapRefData : public wxGDIImageRefData
+class WXDLLIMPEXP_CORE wxBitmapRefData : public wxGDIImageRefData
{
public:
wxBitmapRefData();
+ wxBitmapRefData(const wxBitmapRefData &tocopy);
virtual ~wxBitmapRefData() { Free(); }
virtual void Free();
// ------------
wxDC* m_pSelectedInto;
- HPS m_hPresentationSpace;
- // optional mask for transparent drawing
+ //
+ // Optional mask for transparent drawing
+ //
wxMask* m_pBitmapMask;
-};
+}; // end of CLASS wxBitmapRefData
// ----------------------------------------------------------------------------
// wxBitmap: a mono or colour bitmap
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxBitmap : public wxGDIImage
+class WXDLLIMPEXP_CORE wxBitmap : public wxGDIImage
{
public:
// default ctor creates an invalid bitmap, you must Create() it later
// Copy constructors
inline wxBitmap(const wxBitmap& rBitmap)
- { Init(); Ref(rBitmap); }
+ : wxGDIImage(rBitmap)
+ {
+ Init();
+ SetHandle(rBitmap.GetHandle());
+ }
// Initialize with raw data
wxBitmap( const char bits[]
);
// Initialize with XPM data
- wxBitmap( char** ppData
- ,wxControl* pAnItem = NULL
- );
+ wxBitmap(const char* const* bits);
+#ifdef wxNEEDS_CHARPP
+ // needed for old GCC
+ wxBitmap(char** data)
+ {
+ *this = wxBitmap(const_cast<const char* const*>(data));
+ }
+#endif
- // Load a file or resource
- wxBitmap( const wxString& rName
- ,long lType = wxBITMAP_TYPE_BMP_RESOURCE
+ // Load a resource
+ wxBitmap( int nId
+ ,wxBitmapType lType = wxBITMAP_DEFAULT_TYPE
);
+ // For compatiability with other ports, under OS/2 does same as default ctor
+ inline wxBitmap( const wxString& WXUNUSED(rFilename)
+ ,wxBitmapType WXUNUSED(lType)
+ )
+ { Init(); }
// New constructor for generalised creation from data
- wxBitmap( void* pData
- ,long lType
+ wxBitmap( const void* pData
+ ,wxBitmapType lType
,int nWidth
,int nHeight
,int nDepth = 1
);
// If depth is omitted, will create a bitmap compatible with the display
- wxBitmap( int nWidth
- ,int nHeight
- ,int nDepth = -1
- );
+ wxBitmap( int nWidth, int nHeight, int nDepth = -1 )
+ {
+ Init();
+ (void)Create(nWidth, nHeight, nDepth);
+ }
+ wxBitmap( const wxSize& sz, int nDepth = -1 )
+ {
+ Init();
+ (void)Create(sz, nDepth);
+ }
+
+ wxBitmap( const wxImage& image, int depth = -1 )
+ { (void)CreateFromImage(image, depth); }
// we must have this, otherwise icons are silently copied into bitmaps using
// the copy ctor but the resulting bitmap is invalid!
inline wxBitmap(const wxIcon& rIcon)
{ Init(); CopyFromIcon(rIcon); }
- wxBitmap& operator=(const wxBitmap& rBitmap)
- {
- if ( m_refData != rBitmap.m_refData )
- Ref(rBitmap);
- return(*this);
- }
-
wxBitmap& operator=(const wxIcon& rIcon)
{
(void)CopyFromIcon(rIcon);
virtual ~wxBitmap();
+ wxImage ConvertToImage() const;
+ wxBitmap ConvertToDisabled(unsigned char brightness = 255) const;
+
+ // get the given part of bitmap
+ wxBitmap GetSubBitmap(const wxRect& rRect) const;
+
// copies the contents and mask of the given (colour) icon to the bitmap
bool CopyFromIcon(const wxIcon& rIcon);
virtual bool Create( int nWidth
,int nHeight
- ,int nDepth = -1
+ ,int nDepth = wxBITMAP_SCREEN_DEPTH
);
- virtual bool Create( void* pData
- ,long lType
+ virtual bool Create(const wxSize& sz, int depth = wxBITMAP_SCREEN_DEPTH)
+ { return Create(sz.GetWidth(), sz.GetHeight(), depth); }
+
+ virtual bool Create( const void* pData
+ ,wxBitmapType lType
,int nWidth
,int nHeight
,int nDepth = 1
);
+ virtual bool LoadFile( int nId
+ ,wxBitmapType lType = wxBITMAP_DEFAULT_TYPE
+ );
virtual bool LoadFile( const wxString& rName
- ,long lType = wxBITMAP_TYPE_BMP_RESOURCE
+ ,wxBitmapType lType = wxBITMAP_DEFAULT_TYPE
);
virtual bool SaveFile( const wxString& rName
- ,int lType
+ ,wxBitmapType lType
,const wxPalette* pCmap = NULL
);
inline wxBitmapRefData* GetBitmapData() const
{ return (wxBitmapRefData *)m_refData; }
+ // raw bitmap access support functions
+ void *GetRawData(wxPixelDataBase& data, int bpp);
+ void UngetRawData(wxPixelDataBase& data);
+
inline int GetQuality() const
- { return (GetBitmapData() ? GetBitmapData()->m_quality : 0); }
+ { return (GetBitmapData() ? GetBitmapData()->m_nQuality : 0); }
void SetQuality(int nQ);
wxPalette* GetPalette() const
- { return (GetBitmapData() ? (& GetBitmapData()->m_bitmapPalette) : (wxPalette*) NULL); }
+ { return (GetBitmapData() ? (& GetBitmapData()->m_vBitmapPalette) : NULL); }
void SetPalette(const wxPalette& rPalette);
inline wxMask* GetMask() const
- { return (GetBitmapData() ? GetBitmapData()->m_bitmapMask : (wxMask*) NULL); }
+ { return (GetBitmapData() ? GetBitmapData()->m_pBitmapMask : NULL); }
void SetMask(wxMask* pMask) ;
- inline bool operator==(const wxBitmap& rBitmap)
- { return m_refData == rBitmap.m_refData; }
-
- inline bool operator!=(const wxBitmap& rBitmap)
- { return m_refData != rBitmap.m_refData; }
-
-#if WXWIN_COMPATIBILITY_2
- void SetOk(bool bIsOk);
-#endif // WXWIN_COMPATIBILITY_2
-
-#if WXWIN_COMPATIBILITY
- inline wxPalette* GetColourMap() const
- { return GetPalette(); }
-
- inline void SetColourMap(wxPalette* pCmap)
- { SetPalette(*pCmap); };
-
-#endif // WXWIN_COMPATIBILITY
-
// Implementation
public:
- inline void SetHBITMAP(WXHBITMAP hHmp)
- { SetHandle((WXHANDLE)bmp); }
+ inline void SetHBITMAP(WXHBITMAP hBmp)
+ { SetHandle((WXHANDLE)hBmp); }
inline WXHBITMAP GetHBITMAP() const
{ return (WXHBITMAP)GetHandle(); }
inline void SetSelectedInto(wxDC* pDc)
- { if (GetBitmapData()) GetBitmapData()->m_selectedInto = pDc; }
+ { if (GetBitmapData()) GetBitmapData()->m_pSelectedInto = pDc; }
inline wxDC* GetSelectedInto() const
- { return (GetBitmapData() ? GetBitmapData()->m_selectedInto : (wxDC*) NULL); }
-
- // Creates a bitmap that matches the device context's depth, from an
- // arbitray bitmap. At present, the original bitmap must have an associated
- // palette. (TODO: use a default palette if no palette exists.) This
- // function is necessary for you to Blit an arbitrary bitmap (which may
- // have the wrong depth). wxDC::SelectObject will compare the depth of the
- // bitmap with the DC's depth, and create a new bitmap if the depths
- // differ. Eventually we should perhaps make this a public API function so
- // that an app can efficiently produce bitmaps of the correct depth. The
- // Windows solution is to use SetDibBits to blit an arbotrary DIB directly
- // to a DC, but this is too Windows-specific, hence this solution of
- // quietly converting the wxBitmap. Contributed by Frederic Villeneuve
- // <frederic.villeneuve@natinst.com>
+ { return (GetBitmapData() ? GetBitmapData()->m_pSelectedInto : NULL); }
+
+ inline bool IsMono(void) const { return m_bIsMono; }
+
+ // An OS/2 version that probably doesn't do anything like the msw version
wxBitmap GetBitmapForDC(wxDC& rDc) const;
protected:
inline virtual wxGDIImageRefData* CreateData() const
{ return new wxBitmapRefData; }
+ bool CreateFromImage(const wxImage& image, int depth);
+
+ virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
+
private:
bool CopyFromIconOrCursor(const wxGDIImage& rIcon);
+ bool m_bIsMono;
DECLARE_DYNAMIC_CLASS(wxBitmap)
-};
+}; // end of CLASS wxBitmap
// ----------------------------------------------------------------------------
// wxMask: a mono bitmap used for drawing bitmaps transparently.
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxMask : public wxObject
+class WXDLLIMPEXP_CORE wxMask : public wxObject
{
public:
wxMask();
+ wxMask( const wxMask& tocopy);
// Construct a mask from a bitmap and a colour indicating the transparent
// area
protected:
WXHBITMAP m_hMaskBitmap;
DECLARE_DYNAMIC_CLASS(wxMask)
-};
+}; // end of CLASS wxMask
// ----------------------------------------------------------------------------
// wxBitmapHandler is a class which knows how to load/save bitmaps to/from file
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxBitmapHandler : public wxGDIImageHandler
+class WXDLLIMPEXP_CORE wxBitmapHandler : public wxGDIImageHandler
{
public:
inline wxBitmapHandler()
inline wxBitmapHandler( const wxString& rName
,const wxString& rExt
- ,long lType
+ ,wxBitmapType lType
)
: wxGDIImageHandler( rName
,rExt
// keep wxBitmapHandler derived from wxGDIImageHandler compatible with the
// old class which worked only with bitmaps
virtual bool Create( wxBitmap* pBitmap
- ,void* pData
- ,long lFlags
+ ,const void* pData
+ ,wxBitmapType lType
,int nWidth
,int nHeight
,int nDepth = 1
);
+ virtual bool LoadFile( wxBitmap* pBitmap
+ ,int nId
+ ,wxBitmapType lType
+ ,int nDesiredWidth
+ ,int nDesiredHeight
+ );
virtual bool LoadFile( wxBitmap* pBitmap
,const wxString& rName
- ,long lFlags
+ ,wxBitmapType lType
,int nDesiredWidth
,int nDesiredHeight
);
virtual bool SaveFile( wxBitmap* pBitmap
,const wxString& rName
- ,int lType
+ ,wxBitmapType lType
,const wxPalette* pPalette = NULL
- );
+ ) const;
virtual bool Create( wxGDIImage* pImage
- ,void* pData
- ,long lFlags
+ ,const void* pData
+ ,wxBitmapType lFlags
,int nWidth
,int nHeight
,int nDepth = 1
);
virtual bool Load( wxGDIImage* pImage
- ,const wxString& rName
- ,long lFlags
+ ,int nId
+ ,wxBitmapType lFlags
,int nDesiredWidth
,int nDesiredHeight
);
- virtual bool Save(wxGDIImage* pImage
- const wxString& rName
- int lType
- );
+ virtual bool Save( const wxGDIImage* pImage
+ ,const wxString& rName
+ ,wxBitmapType lType
+ ) const;
private:
+ inline virtual bool Load( wxGDIImage* WXUNUSED(pImage)
+ ,const wxString& WXUNUSED(rName)
+ ,WXHANDLE WXUNUSED(hPs)
+ ,wxBitmapType WXUNUSED(lFlags)
+ ,int WXUNUSED(nDesiredWidth)
+ ,int WXUNUSED(nDesiredHeight)
+ )
+ { return false; }
DECLARE_DYNAMIC_CLASS(wxBitmapHandler)
-};
+}; // end of CLASS wxBitmapHandler
#endif
// _WX_BITMAP_H_