X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/27529614c292a298e67dd8db1f169c94a4df204c..3d05544e4e71e7ff10984dae5a9b8a07d92f42a6:/src/msw/bitmap.cpp?ds=inline diff --git a/src/msw/bitmap.cpp b/src/msw/bitmap.cpp index 0a89cabca2..e935db2c76 100644 --- a/src/msw/bitmap.cpp +++ b/src/msw/bitmap.cpp @@ -27,6 +27,7 @@ #include "wx/utils.h" #include "wx/app.h" #include "wx/palette.h" +#include "wx/dcmemory.h" #include "wx/bitmap.h" #include "wx/icon.h" #endif @@ -36,9 +37,9 @@ #include "assert.h" -#if USE_XPM_IN_MSW +#if wxUSE_XPM_IN_MSW #define FOR_MSW 1 -#include "../../contrib/wxxpm/libxpm.34b/lib/xpm34.h" +#include "../src/xpm/xpm34.h" #endif #include "wx/msw/dib.h" @@ -78,6 +79,7 @@ wxBitmapRefData::~wxBitmapRefData(void) if (m_bitmapMask) delete m_bitmapMask; m_bitmapMask = NULL; + } wxList wxBitmap::sm_handlers; @@ -168,9 +170,9 @@ wxBitmap::wxBitmap(const wxString& filename, long type) wxTheBitmapList->AddBitmap(this); } -#if USE_XPM_IN_MSW +#if wxUSE_XPM_IN_MSW // Create from data -wxBitmap::wxBitmap(const char **data, wxItem *WXUNUSED(anItem)) +wxBitmap::wxBitmap(char **data, wxItem *WXUNUSED(anItem)) { (void) Create((void *)data, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0); } @@ -394,6 +396,7 @@ wxBitmap wxBitmap::GetBitmapForDC(wxDC& dc) const LPBITMAPINFO lpDib; void *lpBits = NULL; +/* wxASSERT( this->GetPalette() && this->GetPalette()->Ok() && (this->GetPalette()->GetHPALETTE() != 0) ); tmpBitmap.SetPalette(this->GetPalette()); @@ -401,6 +404,23 @@ wxBitmap wxBitmap::GetBitmapForDC(wxDC& dc) const memDC.SetPalette(this->GetPalette()); hPal = (HPALETTE) this->GetPalette()->GetHPALETTE(); +*/ + if( this->GetPalette() && this->GetPalette()->Ok() && (this->GetPalette()->GetHPALETTE() != 0) ) + { + tmpBitmap.SetPalette(* this->GetPalette()); + memDC.SelectObject(tmpBitmap); + memDC.SetPalette(* this->GetPalette()); + hPal = (HPALETTE) this->GetPalette()->GetHPALETTE(); + } + else + { + hPal = (HPALETTE) ::GetStockObject(DEFAULT_PALETTE); + wxPalette palette; + palette.SetHPALETTE( (WXHPALETTE)hPal ); + tmpBitmap.SetPalette( palette ); + memDC.SelectObject(tmpBitmap); + memDC.SetPalette( palette ); + } // set the height negative because in a DIB the order of the lines is reversed createDIB(this->GetWidth(), -this->GetHeight(), this->GetDepth(), hPal, &lpDib); @@ -642,7 +662,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxBMPFileHandler, wxBitmapHandler) bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long flags, int desiredWidth, int desiredHeight) { -#if USE_IMAGE_LOADING_IN_MSW +#if wxUSE_IMAGE_LOADING_IN_MSW wxPalette *palette = NULL; bool success = FALSE; /* @@ -666,7 +686,7 @@ bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long fla bool wxBMPFileHandler::SaveFile(wxBitmap *bitmap, const wxString& name, int type, const wxPalette *pal) { -#if USE_IMAGE_LOADING_IN_MSW +#if wxUSE_IMAGE_LOADING_IN_MSW wxPalette *actualPalette = (wxPalette *)pal; if (!actualPalette && (!M_BITMAPHANDLERDATA->m_bitmapPalette.IsNull())) actualPalette = & (M_BITMAPHANDLERDATA->m_bitmapPalette); @@ -696,7 +716,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxXPMFileHandler, wxBitmapHandler) bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long flags, int desiredWidth, int desiredHeight) { -#if USE_XPM_IN_MSW +#if wxUSE_XPM_IN_MSW XImage *ximage; XpmAttributes xpmAttr; HDC dc; @@ -738,36 +758,36 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long fla bool wxXPMFileHandler::SaveFile(wxBitmap *bitmap, const wxString& name, int type, const wxPalette *palette) { -#if USE_XPM_IN_MSW - HDC dc = NULL; - - Visual *visual = NULL; - XImage ximage; - - dc = CreateCompatibleDC(NULL); - if (dc) - { +#if wxUSE_XPM_IN_MSW + HDC dc = NULL; + + XImage ximage; + + dc = CreateCompatibleDC(NULL); + if (dc) + { if (SelectObject(dc, (HBITMAP) M_BITMAPHANDLERDATA->m_hBitmap)) - { /* for following SetPixel */ - /* fill the XImage struct 'by hand' */ - ximage.width = M_BITMAPHANDLERDATA->m_width; - ximage.height = M_BITMAPHANDLERDATA->m_height; - ximage.depth = M_BITMAPHANDLERDATA->m_depth; - ximage.bitmap = (void *)M_BITMAPHANDLERDATA->m_hBitmap; - int errorStatus = XpmWriteFileFromImage(&dc, WXSTRINGCAST name, - &ximage, (XImage *) NULL, (XpmAttributes *) NULL); - - if (dc) - DeleteDC(dc); - - if (errorStatus == XpmSuccess) - return TRUE; /* no error */ - else - return FALSE; + { + /* for following SetPixel */ + /* fill the XImage struct 'by hand' */ + ximage.width = M_BITMAPHANDLERDATA->m_width; + ximage.height = M_BITMAPHANDLERDATA->m_height; + ximage.depth = M_BITMAPHANDLERDATA->m_depth; + ximage.bitmap = (HBITMAP)M_BITMAPHANDLERDATA->m_hBitmap; + int errorStatus = XpmWriteFileFromImage(&dc, WXSTRINGCAST name, + &ximage, (XImage *) NULL, (XpmAttributes *) NULL); + + if (dc) + DeleteDC(dc); + + if (errorStatus == XpmSuccess) + return TRUE; /* no error */ + else + return FALSE; } else return FALSE; - } else return FALSE; + } else return FALSE; #else - return FALSE; + return FALSE; #endif } @@ -788,7 +808,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxXPMDataHandler, wxBitmapHandler) bool wxXPMDataHandler::Create(wxBitmap *bitmap, void *data, long flags, int width, int height, int depth) { -#if USE_XPM_IN_MSW +#if wxUSE_XPM_IN_MSW XImage *ximage; int ErrorStatus; XpmAttributes xpmAttr;