X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7fd328a34dce31f4995585a4046e95361ba1c8e2..43f4e852a1b2ac37c3db6a2b87315192ac549191:/src/msw/icon.cpp diff --git a/src/msw/icon.cpp b/src/msw/icon.cpp index c0070fc713..dccefc51cc 100644 --- a/src/msw/icon.cpp +++ b/src/msw/icon.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/icon.cpp +// Name: src/msw/icon.cpp // Purpose: wxIcon class // Author: Julian Smart // Modified by: 20.11.99 (VZ): don't derive from wxBitmap any more @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "icon.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -29,7 +25,6 @@ #endif #ifndef WX_PRECOMP - #include "wx/defs.h" #include "wx/list.h" #include "wx/utils.h" #include "wx/app.h" @@ -77,18 +72,46 @@ wxIcon::wxIcon(const char bits[], int width, int height) } wxIcon::wxIcon(const wxString& iconfile, - long flags, + wxBitmapType type, int desiredWidth, int desiredHeight) { - LoadFile(iconfile, flags, desiredWidth, desiredHeight); + LoadFile(iconfile, type, desiredWidth, desiredHeight); +} + +wxIcon::wxIcon(const wxIconLocation& loc) +{ + // wxICOFileHandler accepts names in the format "filename;index" + wxString fullname = loc.GetFileName(); + if ( loc.GetIndex() ) + { + fullname << wxT(';') << loc.GetIndex(); + } + //else: 0 is default + + LoadFile(fullname, wxBITMAP_TYPE_ICO); } wxIcon::~wxIcon() { } +wxObjectRefData *wxIcon::CloneRefData(const wxObjectRefData *dataOrig) const +{ + const wxIconRefData * + data = static_cast(dataOrig); + if ( !data ) + return NULL; + + // we don't have to copy m_hIcon because we're only called from SetHICON() + // which overwrites m_hIcon anyhow currently + // + // and if we're called from SetWidth/Height/Depth(), it doesn't make sense + // to copy it neither as the handle would be inconsistent with the new size + return new wxIconRefData(*data); +} + void wxIcon::CopyFromBitmap(const wxBitmap& bmp) { #ifndef __WXMICROWIN__ @@ -105,14 +128,14 @@ void wxIcon::CopyFromBitmap(const wxBitmap& bmp) #endif // __WXMICROWIN__ } -void wxIcon::CreateIconFromXpm(const char **data) +void wxIcon::CreateIconFromXpm(const char* const* data) { wxBitmap bmp(data); CopyFromBitmap(bmp); } bool wxIcon::LoadFile(const wxString& filename, - long type, + wxBitmapType type, int desiredWidth, int desiredHeight) { UnRef(); @@ -121,10 +144,26 @@ bool wxIcon::LoadFile(const wxString& filename, if ( !handler ) { - // say something? - return FALSE; + // load via wxBitmap which, in turn, uses wxImage allowing us to + // support more formats + wxBitmap bmp; + if ( !bmp.LoadFile(filename, type) ) + return false; + + CopyFromBitmap(bmp); + return true; } return handler->Load(this, filename, type, desiredWidth, desiredHeight); } +bool wxIcon::CreateFromHICON(WXHICON icon) +{ + SetHICON(icon); + if ( !IsOk() ) + return false; + + SetSize(wxGetHiconSize(icon)); + + return true; +}