X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/22be0335df28fd3e638c40fe525b6ff323e73c15..a6c811617b84695050e16f09b4fee518c89665a7:/include/wx/msw/dib.h?ds=sidebyside diff --git a/include/wx/msw/dib.h b/include/wx/msw/dib.h index 1bade8910c..7f0d2ecb07 100644 --- a/include/wx/msw/dib.h +++ b/include/wx/msw/dib.h @@ -17,6 +17,8 @@ class WXDLLEXPORT wxPalette; #include "wx/msw/private.h" +#if wxUSE_WXDIB + // ---------------------------------------------------------------------------- // wxDIB: represents a DIB section // ---------------------------------------------------------------------------- @@ -35,6 +37,10 @@ public: wxDIB(int width, int height, int depth) { Init(); (void)Create(width, height, depth); } + // create a DIB from the DDB + wxDIB(const wxBitmap& bmp) + { Init(); (void)Create(bmp); } + // load a DIB from file (any depth is supoprted here unlike above) // // as above, use IsOk() to see if the bitmap was loaded successfully @@ -43,6 +49,7 @@ public: // same as the corresponding ctors but with return value bool Create(int width, int height, int depth); + bool Create(const wxBitmap& bmp); bool Load(const wxString& filename); // dtor is not virtual, this class is not meant to be used polymorphically @@ -66,6 +73,9 @@ public: wxPalette *CreatePalette() const; #endif // wxUSE_PALETTE + // save the DIB as a .BMP file to the file with the given name + bool Save(const wxString& filename); + // accessors // --------- @@ -92,8 +102,8 @@ public: // HBITMAP conversion // ------------------ - // these functions are only used by wxBitmapDataObject implementation in - // src/msw/ole/dataobj.cpp, don't use them directly if possible + // these functions are only used by wxWindows internally right now, please + // don't use them directly if possible as they're subject to change // creates a DDB compatible with the given (or screen) DC from either // a plain DIB or a DIB section (in which case the last parameter must be @@ -102,12 +112,18 @@ public: HDC hdc = 0, void *bits = NULL); + // create a plain DIB (not a DIB section) from a DDB, the caller is + // responsable for freeing it using ::GlobalFree() + static HGLOBAL ConvertFromBitmap(HBITMAP hbmp); + // creates a DIB from the given DDB or calculates the space needed by it: // if pbi is NULL, only the space is calculated, otherwise pbi is supposed // to point at BITMAPINFO of the correct size which is filled by this - // function + // function (this overload is needed for wxBitmapDataObject code in + // src/msw/ole/dataobj.cpp) static size_t ConvertFromBitmap(BITMAPINFO *pbi, HBITMAP hbmp); + // wxImage conversion // ------------------ @@ -137,30 +153,10 @@ public: private: // common part of all ctors - void Init() - { - m_handle = 0; - - m_data = NULL; - - m_width = - m_height = - m_depth = 0; - } + void Init(); // free resources - void Free() - { - if ( m_handle ) - { - if ( !::DeleteObject(m_handle) ) - { - wxLogLastError(wxT("DeleteObject(hDIB)")); - } - - Init(); - } - } + void Free(); // the DIB section handle, 0 if invalid HBITMAP m_handle; @@ -184,6 +180,11 @@ private: m_height, m_depth; + // in some cases we could be using a handle which we didn't create and in + // this case we shouldn't free it neither -- this flag tell us if this is + // the case + bool m_ownsHandle; + // DIBs can't be copied wxDIB(const wxDIB&); @@ -194,21 +195,40 @@ private: // inline functions implementation // ---------------------------------------------------------------------------- -inline wxDIB::~wxDIB() +inline +void wxDIB::Init() { - Free(); + m_handle = 0; + m_ownsHandle = true; + + m_data = NULL; + + m_width = + m_height = + m_depth = 0; } -// the rest is defined in dib.cpp +inline +void wxDIB::Free() +{ + if ( m_handle && m_ownsHandle ) + { + if ( !::DeleteObject(m_handle) ) + { + wxLogLastError(wxT("DeleteObject(hDIB)")); + } -// Save (device dependent) wxBitmap as a DIB -bool wxSaveBitmap(wxChar *filename, wxBitmap *bitmap, wxPalette *palette = NULL); + Init(); + } +} + +inline wxDIB::~wxDIB() +{ + Free(); +} -HANDLE wxBitmapToDIB (HBITMAP hBitmap, HPALETTE hPal); -bool wxReadDIB(LPTSTR lpFileName, HBITMAP *bitmap, HPALETTE *palette); -HANDLE wxReadDIB2(LPTSTR lpFileName); -LPSTR wxFindDIBBits (LPSTR lpbi); -HPALETTE wxMakeDIBPalette(LPBITMAPINFOHEADER lpInfo); +#endif + // wxUSE_WXDIB #endif // _WX_MSW_DIB_H_