]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/gdiimage.cpp
fix for handling TAB presses in readonly text controls
[wxWidgets.git] / src / msw / gdiimage.cpp
index ba859915999b9de46105bef72eb6df4653bf608f..6f904e43d70c00bf7a12299fff3baa79d2a22c95 100644 (file)
@@ -184,7 +184,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxICOResourceHandler, wxObject)
 // private functions
 // ----------------------------------------------------------------------------
 
-static wxSize GetHiconSize(HICON hicon);
 #endif
     // __MICROWIN__
 
@@ -454,8 +453,8 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
 
     if ( !hicon )
     {
-        // take any (the first one) icon from the file by default
-        hicon = ::ExtractIcon(wxGetInstance(), nameReal, 0 /* first */);
+        // take any size icon from the file by index
+        hicon = ::ExtractIcon(wxGetInstance(), nameReal, iconIndex);
     }
 
     if ( !hicon )
@@ -466,7 +465,7 @@ bool wxICOFileHandler::LoadIcon(wxIcon *icon,
         return FALSE;
     }
 
-    size = GetHiconSize(hicon);
+    size = wxGetHiconSize(hicon);
 #else // Win16
     HICON hicon = ReadIconFile((wxChar *)name.c_str(),
                                wxGetInstance(),
@@ -511,21 +510,21 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
     // try to load the icon from this program first to allow overriding the
     // standard icons (although why one would want to do it considering that
     // we already have wxApp::GetStdIcon() is unclear)
+
+    // note that we can't just always call LoadImage() because it seems to do
+    // some icon rescaling internally which results in very ugly 16x16 icons
 #if defined(__WIN32__) && !defined(__SC__)
-    if ( !hasSize )
+    if ( hasSize )
     {
-        // use the actual size of the resource (as we don't specify
-        // LR_DEFAULTSIZE)
-        desiredWidth =
-        desiredHeight = 0;
+        hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON,
+                                    desiredWidth, desiredHeight,
+                                    LR_DEFAULTCOLOR);
     }
-
-    hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON,
-                                desiredWidth, desiredHeight,
-                                LR_DEFAULTCOLOR);
-#else // !Win32
-    hicon = ::LoadIcon(wxGetInstance(), name);
+    else
 #endif // Win32/!Win32
+    {
+        hicon = ::LoadIcon(wxGetInstance(), name);
+    }
 
     // next check if it's not a standard icon
     if ( !hicon && !hasSize )
@@ -539,7 +538,7 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
             { wxT("wxICON_QUESTION"),   IDI_QUESTION    },
             { wxT("wxICON_WARNING"),    IDI_EXCLAMATION },
             { wxT("wxICON_ERROR"),      IDI_HAND        },
-            { wxT("wxICON_INFO"),       IDI_ASTERISK    },
+            { wxT("wxICON_INFORMATION"),       IDI_ASTERISK    },
         };
 
         for ( size_t nIcon = 0; !hicon && nIcon < WXSIZEOF(stdIcons); nIcon++ )
@@ -551,15 +550,9 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
         }
     }
 
-    wxSize size = GetHiconSize(hicon);
+    wxSize size = wxGetHiconSize(hicon);
     icon->SetSize(size.x, size.y);
 
-    // Override the found values with desired values
-    if ( hasSize )
-    {
-        icon->SetSize(desiredWidth, desiredHeight);
-    }
-
     icon->SetHICON((WXHICON)hicon);
 
     return icon->Ok();
@@ -569,7 +562,7 @@ bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
 // private functions
 // ----------------------------------------------------------------------------
 
-static wxSize GetHiconSize(HICON hicon)
+wxSize wxGetHiconSize(HICON hicon)
 {
     wxSize size(32, 32);    // default