]> git.saurik.com Git - wxWidgets.git/commitdiff
Added GetBitmap, GetIcon to wxImageList
authorJulian Smart <julian@anthemion.co.uk>
Sun, 27 Feb 2005 10:36:58 +0000 (10:36 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sun, 27 Feb 2005 10:36:58 +0000 (10:36 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
include/wx/generic/imaglist.h
include/wx/msw/imaglist.h
src/cocoa/notebook.mm
src/generic/imaglist.cpp
src/gtk/notebook.cpp
src/gtk/treegtk.cpp
src/gtk1/notebook.cpp
src/gtk1/treegtk.cpp
src/mac/carbon/notebmac.cpp
src/mac/classic/notebmac.cpp
src/msw/imaglist.cpp
src/univ/notebook.cpp

index 692302e433a1b66940e81f63afceb34ae3ac54fb..11e51fbe9d2f4576ef7df4e7081d6679ce9e5998 100644 (file)
@@ -68,7 +68,8 @@ public:
     int Add( const wxBitmap& bitmap );
     int Add( const wxBitmap& bitmap, const wxBitmap& mask );
     int Add( const wxBitmap& bitmap, const wxColour& maskColour );
-    const wxBitmap *GetBitmap(int index) const;
+    wxBitmap GetBitmap(int index) const;
+    wxIcon GetIcon(int index) const;
     bool Replace( int index, const wxBitmap &bitmap );
     bool Remove( int index );
     bool RemoveAll();
@@ -77,6 +78,8 @@ public:
               int flags = wxIMAGELIST_DRAW_NORMAL,
               bool solidBackground = false);
 
+    // Internal use only
+    const wxBitmap *GetBitmapPtr(int index) const;
 private:
     wxList  m_images;
 
index dce0618369ca127e5d458bd63f401d32e033a5ed..1f66f8c6ca7f374ddcafe08a9d284202704b7136 100644 (file)
@@ -130,6 +130,12 @@ public:
             int flags = wxIMAGELIST_DRAW_NORMAL,
             bool solidBackground = false);
 
+  // Get a bitmap
+  wxBitmap GetBitmap(int index) const;
+
+  // Get an icon
+  wxIcon GetIcon(int index) const;
+
   // TODO: miscellaneous functionality
 /*
   wxIcon *MakeIcon(int index);
index 12863c1b90ed177376c7ff93bef83400ed8f28b2..33687e9f0b7f3fbe07ca67b2cb73d2a2b5a196f4 100644 (file)
@@ -202,7 +202,7 @@ bool wxNotebook::InsertPage( size_t pos,
     m_pages.Insert(page,pos);
     NSTabViewItem *tvitem = [[WXCTabViewImageItem alloc] initWithIdentifier:nil];
     [tvitem setLabel: wxNSStringWithWxString(title)];
-    const wxBitmap *bmp = (imageId!=-1)?m_imageList->GetBitmap(imageId):NULL;
+    const wxBitmap *bmp = (imageId!=-1)?m_imageList->GetBitmapPtr(imageId):NULL;
     if(bmp)
         [(WXCTabViewImageItem*) tvitem setImage: bmp->GetNSImage(true)];
 
@@ -250,7 +250,7 @@ int wxNotebook::GetPageImage(size_t nPage) const
 
 bool wxNotebook::SetPageImage(size_t nPage, int nImage)
 {
-    const wxBitmap *bmp = nImage!=-1?m_imageList->GetBitmap(nImage):NULL;
+    const wxBitmap *bmp = nImage!=-1?m_imageList->GetBitmapPtr(nImage):NULL;
     if(!bmp)
         return false;
     NSTabViewItem *tvitem = [GetNSTabView() tabViewItemAtIndex: nPage];
index 54e53a6200cec811b00f5c7cb5a11ec1d6493f4b..f1ab5376d5d9ce265de2aabba8e80823ca72830c 100644 (file)
@@ -107,7 +107,7 @@ int wxGenericImageList::Add( const wxBitmap& bitmap, const wxColour& maskColour
     return Add(wxBitmap(img));
 }
 
-const wxBitmap *wxGenericImageList::GetBitmap( int index ) const
+const wxBitmap *wxGenericImageList::GetBitmapPtr( int index ) const
 {
     wxList::compatibility_iterator node = m_images.Item( index );
 
@@ -116,6 +116,30 @@ const wxBitmap *wxGenericImageList::GetBitmap( int index ) const
     return (wxBitmap*)node->GetData();
 }
 
+// Get the bitmap
+wxBitmap wxImageList::GetBitmap(int index) const
+{
+    const wxBitmap* bmp = GetBitmapPtr(index);
+    if (bmp)
+        return *bmp;
+    else
+        return wxNullBitmap;
+}
+
+// Get the icon
+wxIcon wxImageList::GetIcon(int index) const
+{
+    const wxBitmap* bmp = GetBitmapPtr(index);
+    if (bmp)
+    {
+        wxIcon icon;
+        icon.CopyFromBitmap(*bmp);
+        return icon;
+    }
+    else
+        return wxNullIcon;
+}
+
 bool wxGenericImageList::Replace( int index, const wxBitmap &bitmap )
 {
     wxList::compatibility_iterator node = m_images.Item( index );
index 75a64b0233c0da3a925461760caf5dd7904d9f01..d58e2fe172d066fd708b89b54aeb986542569f74 100644 (file)
@@ -499,7 +499,7 @@ bool wxNotebook::SetPageImage( size_t page, int image )
     wxASSERT( m_imageList != NULL ); /* Just in case */
 
     /* Construct the new pixmap */
-    const wxBitmap *bmp = m_imageList->GetBitmap(image);
+    const wxBitmap *bmp = m_imageList->GetBitmapPtr(image);
     GdkPixmap *pixmap = bmp->GetPixmap();
     GdkBitmap *mask = (GdkBitmap*) NULL;
     if ( bmp->GetMask() )
@@ -673,7 +673,7 @@ bool wxNotebook::InsertPage( size_t position,
     {
         wxASSERT( m_imageList != NULL );
 
-        const wxBitmap *bmp = m_imageList->GetBitmap(imageId);
+        const wxBitmap *bmp = m_imageList->GetBitmapPtr(imageId);
         GdkPixmap *pixmap = bmp->GetPixmap();
         GdkBitmap *mask = (GdkBitmap*) NULL;
         if ( bmp->GetMask() )
index 8c2dd7b4a408e494313354f6229a5018a309c5aa..0e2ad4c3c8de932a7c43e7e1c69ca38370c67624 100644 (file)
@@ -496,7 +496,7 @@ printf("begin insert\n");
   const wxBitmap *bmp;
   const wxImageList *list;
   if ((list = GetImageList(wxIMAGE_LIST_NORMAL)) != NULL)
-    if ((bmp = list->GetBitmap(image)) != NULL)
+    if ((bmp = list->GetBitmapPtr(image)) != NULL)
       if (bmp->Ok()) {
         GdkBitmap *mask = NULL;
         if (bmp->GetMask())
index 75a64b0233c0da3a925461760caf5dd7904d9f01..d58e2fe172d066fd708b89b54aeb986542569f74 100644 (file)
@@ -499,7 +499,7 @@ bool wxNotebook::SetPageImage( size_t page, int image )
     wxASSERT( m_imageList != NULL ); /* Just in case */
 
     /* Construct the new pixmap */
-    const wxBitmap *bmp = m_imageList->GetBitmap(image);
+    const wxBitmap *bmp = m_imageList->GetBitmapPtr(image);
     GdkPixmap *pixmap = bmp->GetPixmap();
     GdkBitmap *mask = (GdkBitmap*) NULL;
     if ( bmp->GetMask() )
@@ -673,7 +673,7 @@ bool wxNotebook::InsertPage( size_t position,
     {
         wxASSERT( m_imageList != NULL );
 
-        const wxBitmap *bmp = m_imageList->GetBitmap(imageId);
+        const wxBitmap *bmp = m_imageList->GetBitmapPtr(imageId);
         GdkPixmap *pixmap = bmp->GetPixmap();
         GdkBitmap *mask = (GdkBitmap*) NULL;
         if ( bmp->GetMask() )
index 8c2dd7b4a408e494313354f6229a5018a309c5aa..0e2ad4c3c8de932a7c43e7e1c69ca38370c67624 100644 (file)
@@ -496,7 +496,7 @@ printf("begin insert\n");
   const wxBitmap *bmp;
   const wxImageList *list;
   if ((list = GetImageList(wxIMAGE_LIST_NORMAL)) != NULL)
-    if ((bmp = list->GetBitmap(image)) != NULL)
+    if ((bmp = list->GetBitmapPtr(image)) != NULL)
       if (bmp->Ok()) {
         GdkBitmap *mask = NULL;
         if (bmp->GetMask())
index e382c62449e24335a4dc926d343ecaf1b2e2b24f..aedbc3ccf18489fc6c42402cae34237977dbafd1 100644 (file)
@@ -351,7 +351,7 @@ void wxNotebook::MacSetupTabs()
 
         if ( GetImageList() && GetPageImage(ii) >= 0 && UMAGetSystemVersion() >= 0x1020 )
         {
-            const wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ;
+            const wxBitmap* bmap = GetImageList()->GetBitmapPtr( GetPageImage(ii ) ) ;
             if ( bmap )
             {
                 ControlButtonContentInfo info ;
index a553ef66f1eca408eaa81748b181c8b6256cd497..b7664be30d70a7161e92025484fc2b3ae98fb1cf 100644 (file)
@@ -457,7 +457,7 @@ void wxNotebook::MacSetupTabs()
             // afterwards Unregister it (IconRef is ref counted, so it will stay on the tab even if we
             // unregister it) in case this will ever lead to having the same icon everywhere add some kind
             // of static counter
-            const wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ;
+            const wxBitmap* bmap = GetImageList()->GetBitmapPtr( GetPageImage(ii ) ) ;
             if ( bmap )
             {
                 wxBitmap scaledBitmap ;
index ca1952008269fdf309aded771c08b0e5a9afbd3f..785a18c637274512ec79dd1400f007fbb81e7450 100644 (file)
@@ -42,6 +42,7 @@
 
 #include "wx/log.h"
 #include "wx/intl.h"
+#include "wx/image.h"
 
 #include "wx/msw/imaglist.h"
 #include "wx/msw/private.h"
@@ -293,6 +294,62 @@ bool wxImageList::Draw(int index,
     return ok;
 }
 
+// Get the bitmap
+wxBitmap wxImageList::GetBitmap(int index) const
+{
+    int bmp_width = 0, bmp_height = 0;
+    GetSize(index, bmp_width, bmp_height);
+
+    wxBitmap bitmap(bmp_width, bmp_height);
+    wxMemoryDC dc;
+    dc.SelectObject(bitmap);
+
+    // draw it the first time to find a suitable mask colour
+    ((wxImageList*)this)->Draw(index, dc, 0, 0, wxIMAGELIST_DRAW_TRANSPARENT);
+    dc.SelectObject(wxNullBitmap);
+
+    // find the suitable mask colour
+    wxImage image = bitmap.ConvertToImage();
+    unsigned char r = 0, g = 0, b = 0;
+    image.FindFirstUnusedColour(&r, &g, &b);
+
+    // redraw whole image and bitmap in the mask colour
+    image.Create(bmp_width, bmp_height);
+    image.Replace(0, 0, 0, r, g, b);
+    bitmap = wxBitmap(image);
+
+    // redraw icon over the mask colour to actually draw it
+    dc.SelectObject(bitmap);
+    ((wxImageList*)this)->Draw(index, dc, 0, 0, wxIMAGELIST_DRAW_TRANSPARENT);
+    dc.SelectObject(wxNullBitmap);
+
+    // get the image, set the mask colour and convert back to get transparent bitmap
+    image = bitmap.ConvertToImage();
+    image.SetMaskColour(r, g, b);
+    bitmap = wxBitmap(image);
+    
+    return bitmap;
+}
+
+// Get the icon
+wxIcon wxImageList::GetIcon(int index) const
+{
+    HICON hIcon = ImageList_ExtractIcon(0, GetHImageList(), index);
+    if (hIcon)
+    {
+        wxIcon icon;
+        icon.SetHICON((WXHICON)hIcon);
+        
+        int iconW, iconH;
+        GetSize(index, iconW, iconH);
+        icon.SetSize(iconW, iconH);
+        
+        return icon;
+    }
+    else               
+        return wxNullIcon;
+}
+
 // ----------------------------------------------------------------------------
 // helpers
 // ----------------------------------------------------------------------------
index 2b9e19f9ffc4e9bb1f903782ed41a8eeaf0c988d..8326d62016b091ace422445237dfdd5b8afc9f8d 100644 (file)
@@ -473,7 +473,7 @@ void wxNotebook::DoDrawTab(wxDC& dc, const wxRect& rect, size_t n)
         m_imageList->Draw(image, dc, 0, 0, wxIMAGELIST_DRAW_NORMAL, true);
         dc.SelectObject(wxNullBitmap);
 #else
-        bmp = *m_imageList->GetBitmap(image);
+        bmp = m_imageList->GetBitmap(image);
 #endif
     }