]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/bitmap.h
Use wxAlphaPixelData if the source bitmap depth is 32 or if on wxGTK and there is...
[wxWidgets.git] / include / wx / os2 / bitmap.h
index fa4b750192edb3386de29b8dc68ade28c3e627fe..653dd9635a66aea007158ae92aa64d97f1b2d8b4 100644 (file)
 #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
@@ -37,10 +34,11 @@ class WXDLLEXPORT wxControl;
 //     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();
@@ -54,18 +52,18 @@ public:
     // ------------
 
     wxDC*                           m_pSelectedInto;
-    HPS                             m_hPresentationSpace;
-    LONG                            m_lId;
 
-    // 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
@@ -73,7 +71,11 @@ public:
 
     // Copy constructors
     inline wxBitmap(const wxBitmap& rBitmap)
-      { Init(); Ref(rBitmap); }
+        : wxGDIImage(rBitmap)
+    {
+        Init();
+        SetHandle(rBitmap.GetHandle());
+    }
 
     // Initialize with raw data
     wxBitmap( const char bits[]
@@ -83,41 +85,53 @@ public:
             );
 
     // 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);
@@ -133,6 +147,12 @@ public:
 
     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);
 
@@ -141,59 +161,50 @@ public:
 
     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_nQuality : 0); }
 
     void SetQuality(int nQ);
 
     wxPalette* GetPalette() const
-      { return (GetBitmapData() ? (& GetBitmapData()->m_vBitmapPalette) : (wxPalette*) NULL); }
+      { return (GetBitmapData() ? (& GetBitmapData()->m_vBitmapPalette) : NULL); }
 
     void       SetPalette(const wxPalette& rPalette);
 
     inline wxMask* GetMask() const
-      { return (GetBitmapData() ? GetBitmapData()->m_pBitmapMask : (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 hBmp)
@@ -206,15 +217,13 @@ public:
       { if (GetBitmapData()) GetBitmapData()->m_pSelectedInto = pDc; }
 
     inline wxDC* GetSelectedInto() const
-      { return (GetBitmapData() ? GetBitmapData()->m_pSelectedInto : (wxDC*) NULL); }
+      { 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;
 
-    inline LONG GetId() const
-      { return (GetBitmapData() ? GetBitmapData()->m_lId : 0L); }
-
-
 protected:
     // common part of all ctors
     void Init();
@@ -222,20 +231,26 @@ 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
@@ -275,16 +290,13 @@ public:
 protected:
     WXHBITMAP                       m_hMaskBitmap;
     DECLARE_DYNAMIC_CLASS(wxMask)
-private:
-    HDC                             m_hDc;
-    HPS                             m_hPs;
-};
+}; // 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()
@@ -292,7 +304,7 @@ public:
 
     inline wxBitmapHandler( const wxString& rName
                     ,const wxString& rExt
-                    ,long            lType
+                    ,wxBitmapType lType
                    )
                    : wxGDIImageHandler( rName
                                        ,rExt
@@ -303,46 +315,58 @@ public:
     // 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
-                          ,HPS             hPs
-                          ,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
-                      ,HPS             hPs
-                      ,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_