]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxIcon::CreateFromHICON() to wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Feb 2013 16:13:37 +0000 (16:13 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Feb 2013 16:13:37 +0000 (16:13 +0000)
Provide a public method properly assigning an HICON to wxIcon, instead of
asking people to call SetHICON() and SetSize().

Closes #15023.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73489 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/msw/icon.h
interface/wx/icon.h
src/msw/gdiimage.cpp
src/msw/icon.cpp

index 1cc4395a70a4b992ae778642c32ccd770601ab9d..2d107a109c6553596db3124a1672b56747651d18 100644 (file)
@@ -647,6 +647,7 @@ wxMSW:
 - Fix changing labels of menu items with bitmaps (Daniel Hyams).
 - Fix appearance of multiline coloured wxCheckBox (Catalin Raceanu).
 - Allow creating wxCursor from ANI files (Catalin Raceanu).
+- Add wxIcon::CreateFromHICON() (troelsk).
 
 wxOSX/Cocoa:
 
index 21f8abd6b4af6e3123ed92d4448ec12f600b83a2..268677d21bd5b6af0acf050ec68ebfc69b537f62 100644 (file)
@@ -65,6 +65,8 @@ public:
                           wxBitmapType type = wxICON_DEFAULT_TYPE,
                           int desiredWidth = -1, int desiredHeight = -1);
 
+    bool CreateFromHICON(WXHICON icon);
+
     // implementation only from now on
     wxIconRefData *GetIconData() const { return (wxIconRefData *)m_refData; }
 
index 083bce75340f76322c280c281c65a7ae71eb7205..8bbf0c5c1f17b04dbf6c7dcf68d956594e252938 100644 (file)
@@ -179,6 +179,22 @@ public:
     */
     virtual ~wxIcon();
 
+    /**
+        Attach a Windows icon handle.
+
+        This wxMSW-specific method allows to assign a native Windows @c HICON
+        (which must be castes to @c WXHICON opaque handle type) to wxIcon.
+        Notice that this means that the @c HICON will be destroyed by wxIcon
+        when it is destroyed.
+
+        @return @true if successful.
+
+        @onlyfor{wxmsw}
+
+        @since 2.9.5
+    */
+    bool CreateFromHICON(WXHICON icon);
+
     /**
         Returns disabled (dimmed) version of the icon.
 
index 845cbb3d69f93a0aff081fc8eff2545713088446..d19d26afd91dd4024a282628be9651bf385556da 100644 (file)
@@ -432,9 +432,6 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
 {
     icon->UnRef();
 
-    // actual size
-    wxSize size;
-
     HICON hicon = NULL;
 
     // Parse the filename: it may be of the form "filename;n" in order to
@@ -515,25 +512,23 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
         return false;
     }
 
-    size = wxGetHiconSize(hicon);
+    if ( !icon->CreateFromHICON(hicon) )
+        return false;
 
-    if ( (desiredWidth != -1 && desiredWidth != size.x) ||
-         (desiredHeight != -1 && desiredHeight != size.y) )
+    if ( (desiredWidth != -1 && desiredWidth != icon->GetWidth()) ||
+         (desiredHeight != -1 && desiredHeight != icon->GetHeight()) )
     {
         wxLogTrace(wxT("iconload"),
                    wxT("Returning false from wxICOFileHandler::Load because of the size mismatch: actual (%d, %d), requested (%d, %d)"),
-                   size.x, size.y,
+                   icon->GetWidth(), icon->GetHeight(),
                    desiredWidth, desiredHeight);
 
-        ::DestroyIcon(hicon);
+        icon->UnRef();
 
         return false;
     }
 
-    icon->SetHICON((WXHICON)hicon);
-    icon->SetSize(size.x, size.y);
-
-    return icon->IsOk();
+    return true;
 }
 
 bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
@@ -593,12 +588,7 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
     }
 #endif
 
-    wxSize size = wxGetHiconSize(hicon);
-    icon->SetSize(size.x, size.y);
-
-    icon->SetHICON((WXHICON)hicon);
-
-    return icon->IsOk();
+    return icon->CreateFromHICON((WXHICON)hicon);
 }
 
 #if wxUSE_PNG_RESOURCE_HANDLER
index fdd9d501c33f7fc132a04d2ec35a5a5afd7ce244..dccefc51ccc9976eb7869c14d1656396f7016c36 100644 (file)
@@ -156,3 +156,14 @@ bool wxIcon::LoadFile(const wxString& filename,
 
     return handler->Load(this, filename, type, desiredWidth, desiredHeight);
 }
+
+bool wxIcon::CreateFromHICON(WXHICON icon)
+{
+    SetHICON(icon);
+    if ( !IsOk() )
+        return false;
+
+    SetSize(wxGetHiconSize(icon));
+
+    return true;
+}