git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4962 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			344 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			344 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/os2/bitmap.h
 | |
| // Purpose:     wxBitmap class
 | |
| // Author:      David Webster
 | |
| // Modified by:
 | |
| // Created:     11/28/99
 | |
| // RCS-ID:      $Id$
 | |
| // Copyright:   (c) David Webster
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #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;
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // Bitmap data
 | |
| //
 | |
| // NB: this class is private, but declared here to make it possible inline
 | |
| //     wxBitmap functions accessing it
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLEXPORT wxBitmapRefData : public wxGDIImageRefData
 | |
| {
 | |
| public:
 | |
|     wxBitmapRefData();
 | |
|     virtual ~wxBitmapRefData() { Free(); }
 | |
| 
 | |
|     virtual void Free();
 | |
| 
 | |
| public:
 | |
|     int                             m_nNumColors;
 | |
|     wxPalette                       m_vBitmapPalette;
 | |
|     int                             m_nQuality;
 | |
| 
 | |
|     // OS2-specific
 | |
|     // ------------
 | |
| 
 | |
|     wxDC*                           m_pSelectedInto;
 | |
|     HPS                             m_hPresentationSpace;
 | |
| 
 | |
|     // optional mask for transparent drawing
 | |
|     wxMask*                         m_pBitmapMask;
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxBitmap: a mono or colour bitmap
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLEXPORT wxBitmap : public wxGDIImage
 | |
| {
 | |
| public:
 | |
|     // default ctor creates an invalid bitmap, you must Create() it later
 | |
|     wxBitmap() { Init(); }
 | |
| 
 | |
|     // Copy constructors
 | |
|     inline wxBitmap(const wxBitmap& rBitmap)
 | |
|       { Init(); Ref(rBitmap); }
 | |
| 
 | |
|     // Initialize with raw data
 | |
|     wxBitmap( const char bits[]
 | |
|              ,int        nWidth
 | |
|              ,int        nHeight
 | |
|              ,int        nDepth = 1
 | |
|             );
 | |
| 
 | |
|     // Initialize with XPM data
 | |
|     wxBitmap( char**     ppData
 | |
|              ,wxControl* pAnItem = NULL
 | |
|             );
 | |
| 
 | |
|     // Load a file or resource
 | |
|     wxBitmap( const wxString& rName
 | |
|              ,long            lType = wxBITMAP_TYPE_BMP_RESOURCE
 | |
|             );
 | |
| 
 | |
|     // New constructor for generalised creation from data
 | |
|     wxBitmap( void* pData
 | |
|              ,long  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
 | |
|             );
 | |
| 
 | |
|     // 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);
 | |
| 
 | |
|         return(*this);
 | |
|     }
 | |
| 
 | |
|     wxBitmap& operator=(const wxCursor& rCursor)
 | |
|     {
 | |
|         (void)CopyFromCursor(rCursor);
 | |
|         return (*this);
 | |
|     }
 | |
| 
 | |
|     virtual ~wxBitmap();
 | |
| 
 | |
|     // copies the contents and mask of the given (colour) icon to the bitmap
 | |
|     bool CopyFromIcon(const wxIcon& rIcon);
 | |
| 
 | |
|     // copies the contents and mask of the given cursor to the bitmap
 | |
|     bool CopyFromCursor(const wxCursor& rCursor);
 | |
| 
 | |
|     virtual bool Create( int nWidth
 | |
|                         ,int nHeight
 | |
|                         ,int nDepth = -1
 | |
|                        );
 | |
|     virtual bool Create( void* pData
 | |
|                         ,long  lType
 | |
|                         ,int   nWidth
 | |
|                         ,int   nHeight
 | |
|                         ,int   nDepth = 1
 | |
|                        );
 | |
|     virtual bool LoadFile( const wxString& rName
 | |
|                           ,long            lType = wxBITMAP_TYPE_BMP_RESOURCE
 | |
|                          );
 | |
|     virtual bool SaveFile( const wxString&  rName
 | |
|                           ,int              lType
 | |
|                           ,const wxPalette* pCmap = NULL
 | |
|                          );
 | |
| 
 | |
|     inline wxBitmapRefData* GetBitmapData() const
 | |
|       { return (wxBitmapRefData *)m_refData; }
 | |
| 
 | |
|     inline int GetQuality() const
 | |
|       { return (GetBitmapData() ? GetBitmapData()->m_nQuality : 0); }
 | |
| 
 | |
|     void SetQuality(int nQ);
 | |
| 
 | |
|     wxPalette* GetPalette() const
 | |
|       { return (GetBitmapData() ? (& GetBitmapData()->m_vBitmapPalette) : (wxPalette*) NULL); }
 | |
| 
 | |
|     void       SetPalette(const wxPalette& rPalette);
 | |
| 
 | |
|     inline wxMask* GetMask() const
 | |
|       { return (GetBitmapData() ? GetBitmapData()->m_pBitmapMask : (wxMask*) 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)
 | |
|       { SetHandle((WXHANDLE)hBmp); }
 | |
| 
 | |
|     inline WXHBITMAP GetHBITMAP() const
 | |
|       { return (WXHBITMAP)GetHandle(); }
 | |
| 
 | |
|     inline void  SetSelectedInto(wxDC* pDc)
 | |
|       { if (GetBitmapData()) GetBitmapData()->m_pSelectedInto = pDc; }
 | |
| 
 | |
|     inline wxDC* GetSelectedInto() const
 | |
|       { return (GetBitmapData() ? GetBitmapData()->m_pSelectedInto : (wxDC*) NULL); }
 | |
| 
 | |
|     // An OS/2 version that probably doesn't do anything like the msw version
 | |
|     wxBitmap GetBitmapForDC(wxDC& rDc) const;
 | |
| 
 | |
| protected:
 | |
|     // common part of all ctors
 | |
|     void Init();
 | |
| 
 | |
|     inline virtual wxGDIImageRefData* CreateData() const
 | |
|         { return new wxBitmapRefData; }
 | |
| 
 | |
| private:
 | |
|     bool CopyFromIconOrCursor(const wxGDIImage& rIcon);
 | |
| 
 | |
|     DECLARE_DYNAMIC_CLASS(wxBitmap)
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxMask: a mono bitmap used for drawing bitmaps transparently.
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLEXPORT wxMask : public wxObject
 | |
| {
 | |
| public:
 | |
|     wxMask();
 | |
| 
 | |
|     // Construct a mask from a bitmap and a colour indicating the transparent
 | |
|     // area
 | |
|     wxMask( const wxBitmap& rBitmap
 | |
|            ,const wxColour& rColour
 | |
|           );
 | |
| 
 | |
|     // Construct a mask from a bitmap and a palette index indicating the
 | |
|     // transparent area
 | |
|     wxMask( const wxBitmap& rBitmap
 | |
|            ,int             nPaletteIndex
 | |
|           );
 | |
| 
 | |
|     // Construct a mask from a mono bitmap (copies the bitmap).
 | |
|     wxMask(const wxBitmap& rBitmap);
 | |
| 
 | |
|     // construct a mask from the givne bitmap handle
 | |
|     wxMask(WXHBITMAP hBmp)
 | |
|       { m_hMaskBitmap = hBmp; }
 | |
| 
 | |
|     virtual ~wxMask();
 | |
| 
 | |
|     bool Create( const wxBitmap& bitmap
 | |
|                 ,const wxColour& rColour
 | |
|                );
 | |
|     bool Create( const wxBitmap& rBitmap
 | |
|                 ,int             nPaletteIndex
 | |
|                );
 | |
|     bool Create(const wxBitmap& rBitmap);
 | |
| 
 | |
|     // Implementation
 | |
|     WXHBITMAP GetMaskBitmap() const
 | |
|       { return m_hMaskBitmap; }
 | |
|     void SetMaskBitmap(WXHBITMAP hBmp)
 | |
|       { m_hMaskBitmap = hBmp; }
 | |
| 
 | |
| protected:
 | |
|     WXHBITMAP                       m_hMaskBitmap;
 | |
|     DECLARE_DYNAMIC_CLASS(wxMask)
 | |
| private:
 | |
|     HDC                             m_hDc;
 | |
|     HPS                             m_hPs;
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxBitmapHandler is a class which knows how to load/save bitmaps to/from file
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLEXPORT wxBitmapHandler : public wxGDIImageHandler
 | |
| {
 | |
| public:
 | |
|     inline wxBitmapHandler()
 | |
|       { m_lType = wxBITMAP_TYPE_INVALID; }
 | |
| 
 | |
|     inline wxBitmapHandler( const wxString& rName
 | |
|                     ,const wxString& rExt
 | |
|                     ,long            lType
 | |
|                    )
 | |
|                    : wxGDIImageHandler( rName
 | |
|                                        ,rExt
 | |
|                                        ,lType)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     // keep wxBitmapHandler derived from wxGDIImageHandler compatible with the
 | |
|     // old class which worked only with bitmaps
 | |
|     virtual bool Create( wxBitmap* pBitmap
 | |
|                         ,void*     pData
 | |
|                         ,long      lFlags
 | |
|                         ,int       nWidth
 | |
|                         ,int       nHeight
 | |
|                         ,int       nDepth = 1
 | |
|                        );
 | |
|     virtual bool LoadFile( wxBitmap*       pBitmap
 | |
|                           ,const wxString& rName
 | |
|                           ,HPS             hPs
 | |
|                           ,long            lFlags
 | |
|                           ,int             nDesiredWidth
 | |
|                           ,int             nDesiredHeight
 | |
|                          );
 | |
|     virtual bool SaveFile( wxBitmap*        pBitmap
 | |
|                           ,const wxString&  rName
 | |
|                           ,int              lType
 | |
|                           ,const wxPalette* pPalette = NULL
 | |
|                          );
 | |
| 
 | |
|     virtual bool Create( wxGDIImage* pImage
 | |
|                         ,void*       pData
 | |
|                         ,long        lFlags
 | |
|                         ,int         nWidth
 | |
|                         ,int         nHeight
 | |
|                         ,int         nDepth = 1
 | |
|                        );
 | |
|     virtual bool Load( wxGDIImage*     pImage
 | |
|                       ,const wxString& rName
 | |
|                       ,HPS             hPs
 | |
|                       ,long            lFlags
 | |
|                       ,int             nDesiredWidth
 | |
|                       ,int             nDesiredHeight
 | |
|                      );
 | |
|     virtual bool Save( wxGDIImage*     pImage
 | |
|                       ,const wxString& rName
 | |
|                       ,int             lType
 | |
|                      );
 | |
| private:
 | |
|     DECLARE_DYNAMIC_CLASS(wxBitmapHandler)
 | |
| };
 | |
| 
 | |
| #endif
 | |
|   // _WX_BITMAP_H_
 |