]> git.saurik.com Git - wxWidgets.git/commitdiff
1. added support for bitmaps with alpha channel
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 21 Aug 2004 22:41:04 +0000 (22:41 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 21 Aug 2004 22:41:04 +0000 (22:41 +0000)
2. use GtkImage instead of deprecated GtkPixmap with GTK2
3. create bogus pixmap instead of GtkLabel in wxStaticBitmap with invalid bitmap

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

include/wx/gtk/statbmp.h
include/wx/gtk1/statbmp.h
src/gtk/bmpbuttn.cpp
src/gtk/statbmp.cpp
src/gtk1/bmpbuttn.cpp
src/gtk1/statbmp.cpp

index 00677618dea55eeacadb6f151320192617688375..8174a8ebf0fd39e65390ff75e4f1a2cd035e33f2 100644 (file)
@@ -56,9 +56,6 @@ public:
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
     
 private:
-    // creates the new pixmap widget
-    void CreatePixmapWidget();
-
     wxBitmap   m_bitmap;
 
     DECLARE_DYNAMIC_CLASS(wxStaticBitmap)
index 00677618dea55eeacadb6f151320192617688375..8174a8ebf0fd39e65390ff75e4f1a2cd035e33f2 100644 (file)
@@ -56,9 +56,6 @@ public:
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
     
 private:
-    // creates the new pixmap widget
-    void CreatePixmapWidget();
-
     wxBitmap   m_bitmap;
 
     DECLARE_DYNAMIC_CLASS(wxStaticBitmap)
index 795f5c5eb924de6116c1a7dd602b9988bd3cee04..55b275d0bbd14640befda1a0dce737788130797f 100644 (file)
@@ -236,14 +236,30 @@ void wxBitmapButton::OnSetBitmap()
     if (child == NULL)
     {
         // initial bitmap
-        GtkWidget *pixmap = gtk_pixmap_new(the_one.GetPixmap(), mask);
+        GtkWidget *pixmap;
+#ifdef __WXGTK20__
+        if (the_one.HasPixbuf())
+            pixmap = gtk_image_new_from_pixbuf(the_one.GetPixbuf());
+        else
+            pixmap = gtk_image_new_from_pixmap(the_one.GetPixmap(), mask);
+#else
+        pixmap = gtk_pixmap_new(the_one.GetPixmap(), mask);
+#endif
         gtk_widget_show(pixmap);
         gtk_container_add(GTK_CONTAINER(m_widget), pixmap);
     }
     else
     {   // subsequent bitmaps
-        GtkPixmap *g_pixmap = GTK_PIXMAP(child);
-        gtk_pixmap_set(g_pixmap, the_one.GetPixmap(), mask);
+#ifdef __WXGTK20__
+        GtkImage *pixmap = GTK_IMAGE(child);
+        if (the_one.HasPixbuf())
+            gtk_image_set_from_pixbuf(pixmap, the_one.GetPixbuf());
+        else
+            gtk_image_set_from_pixmap(pixmap, the_one.GetPixmap(), mask);
+#else
+        GtkPixmap *pixmap = GTK_PIXMAP(child);
+        gtk_pixmap_set(pixmap, the_one.GetPixmap(), mask);
+#endif
     }
 }
 
index 6ec5169750287457e07e8433c6b49035c6150010..af5f1dc484b44e650f5686cfe920d010d84924dd 100644 (file)
@@ -38,24 +38,14 @@ wxStaticBitmap::wxStaticBitmap( wxWindow *parent, wxWindowID id, const wxBitmap
     Create( parent, id, bitmap, pos, size, style, name );
 }
 
-void wxStaticBitmap::CreatePixmapWidget()
-{
-    wxCHECK_RET( m_bitmap.Ok(), wxT("should only be called if we have a bitmap") );
-
-    GdkBitmap *mask = (GdkBitmap *) NULL;
-    if ( m_bitmap.GetMask() )
-        mask = m_bitmap.GetMask()->GetBitmap();
-    m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
-
-    // insert GTK representation
-    (*m_parent->m_insertCallback)(m_parent, this);
-
-    gtk_widget_show( m_widget );
-
-    m_focusWidget = m_widget;
-
-    PostCreation(wxDefaultSize);
-}
+#ifndef __WXGTK20__
+// empty bitmap, so that we can create GtkPixmap widget:
+static char * bogus_xpm[] = {
+"2 2 1 1",
+"      c None",
+"  ",
+"  "};
+#endif
 
 bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bitmap,
                              const wxPoint &pos, const wxSize &size,
@@ -66,52 +56,50 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
     {
-        wxFAIL_MSG( wxT("wxXX creation failed") );
-    return FALSE;
+        wxFAIL_MSG( wxT("wxStaticBitmap creation failed") );
+        return false;
     }
 
     m_bitmap = bitmap;
 
-    if (m_bitmap.Ok())
-    {
-        GdkBitmap *mask = (GdkBitmap *) NULL;
-        if ( m_bitmap.GetMask() )
-            mask = m_bitmap.GetMask()->GetBitmap();
-        m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
-    }
-    else
-    {
-        m_widget = gtk_label_new( "Bitmap" );
-        m_focusWidget = m_widget;
-    }
+#ifdef __WXGTK20__
+    m_widget = gtk_image_new();
+#else
+    wxBitmap bmp(bitmap.Ok() ? bitmap : wxBitmap(bogus_xpm));
+    m_widget = gtk_pixmap_new(bmp.GetPixmap(), NULL);
+#endif
+
+    if (bitmap.Ok())
+        SetBitmap(bitmap);
 
     PostCreation(size);
     m_parent->DoAddChild( this );
 
-    return TRUE;
+    return true;
 }
 
 void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
 {
-    bool hasWidget = m_bitmap.Ok();
     m_bitmap = bitmap;
 
     if (m_bitmap.Ok())
     {
-        if (!hasWidget)
+        GdkBitmap *mask = (GdkBitmap *) NULL;
+        if (m_bitmap.GetMask())
+            mask = m_bitmap.GetMask()->GetBitmap();
+    
+#ifdef __WXGTK20__
+        if (m_bitmap.HasPixbuf())
         {
-            gtk_widget_destroy( m_widget );
-
-            /* recreate m_widget because we've created a label
-               and not a bitmap above */
-            CreatePixmapWidget();
+            gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
+                                      m_bitmap.GetPixbuf());
         }
         else
-        {
-            GdkBitmap *mask = (GdkBitmap *) NULL;
-            if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap();
-            gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask );
-        }
+            gtk_image_set_from_pixmap(GTK_IMAGE(m_widget),
+                                      m_bitmap.GetPixmap(), mask);
+#else
+        gtk_pixmap_set(GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask);
+#endif
 
         InvalidateBestSize();
         SetSize(GetBestSize());
index 795f5c5eb924de6116c1a7dd602b9988bd3cee04..55b275d0bbd14640befda1a0dce737788130797f 100644 (file)
@@ -236,14 +236,30 @@ void wxBitmapButton::OnSetBitmap()
     if (child == NULL)
     {
         // initial bitmap
-        GtkWidget *pixmap = gtk_pixmap_new(the_one.GetPixmap(), mask);
+        GtkWidget *pixmap;
+#ifdef __WXGTK20__
+        if (the_one.HasPixbuf())
+            pixmap = gtk_image_new_from_pixbuf(the_one.GetPixbuf());
+        else
+            pixmap = gtk_image_new_from_pixmap(the_one.GetPixmap(), mask);
+#else
+        pixmap = gtk_pixmap_new(the_one.GetPixmap(), mask);
+#endif
         gtk_widget_show(pixmap);
         gtk_container_add(GTK_CONTAINER(m_widget), pixmap);
     }
     else
     {   // subsequent bitmaps
-        GtkPixmap *g_pixmap = GTK_PIXMAP(child);
-        gtk_pixmap_set(g_pixmap, the_one.GetPixmap(), mask);
+#ifdef __WXGTK20__
+        GtkImage *pixmap = GTK_IMAGE(child);
+        if (the_one.HasPixbuf())
+            gtk_image_set_from_pixbuf(pixmap, the_one.GetPixbuf());
+        else
+            gtk_image_set_from_pixmap(pixmap, the_one.GetPixmap(), mask);
+#else
+        GtkPixmap *pixmap = GTK_PIXMAP(child);
+        gtk_pixmap_set(pixmap, the_one.GetPixmap(), mask);
+#endif
     }
 }
 
index 6ec5169750287457e07e8433c6b49035c6150010..af5f1dc484b44e650f5686cfe920d010d84924dd 100644 (file)
@@ -38,24 +38,14 @@ wxStaticBitmap::wxStaticBitmap( wxWindow *parent, wxWindowID id, const wxBitmap
     Create( parent, id, bitmap, pos, size, style, name );
 }
 
-void wxStaticBitmap::CreatePixmapWidget()
-{
-    wxCHECK_RET( m_bitmap.Ok(), wxT("should only be called if we have a bitmap") );
-
-    GdkBitmap *mask = (GdkBitmap *) NULL;
-    if ( m_bitmap.GetMask() )
-        mask = m_bitmap.GetMask()->GetBitmap();
-    m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
-
-    // insert GTK representation
-    (*m_parent->m_insertCallback)(m_parent, this);
-
-    gtk_widget_show( m_widget );
-
-    m_focusWidget = m_widget;
-
-    PostCreation(wxDefaultSize);
-}
+#ifndef __WXGTK20__
+// empty bitmap, so that we can create GtkPixmap widget:
+static char * bogus_xpm[] = {
+"2 2 1 1",
+"      c None",
+"  ",
+"  "};
+#endif
 
 bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bitmap,
                              const wxPoint &pos, const wxSize &size,
@@ -66,52 +56,50 @@ bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bi
     if (!PreCreation( parent, pos, size ) ||
         !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
     {
-        wxFAIL_MSG( wxT("wxXX creation failed") );
-    return FALSE;
+        wxFAIL_MSG( wxT("wxStaticBitmap creation failed") );
+        return false;
     }
 
     m_bitmap = bitmap;
 
-    if (m_bitmap.Ok())
-    {
-        GdkBitmap *mask = (GdkBitmap *) NULL;
-        if ( m_bitmap.GetMask() )
-            mask = m_bitmap.GetMask()->GetBitmap();
-        m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask );
-    }
-    else
-    {
-        m_widget = gtk_label_new( "Bitmap" );
-        m_focusWidget = m_widget;
-    }
+#ifdef __WXGTK20__
+    m_widget = gtk_image_new();
+#else
+    wxBitmap bmp(bitmap.Ok() ? bitmap : wxBitmap(bogus_xpm));
+    m_widget = gtk_pixmap_new(bmp.GetPixmap(), NULL);
+#endif
+
+    if (bitmap.Ok())
+        SetBitmap(bitmap);
 
     PostCreation(size);
     m_parent->DoAddChild( this );
 
-    return TRUE;
+    return true;
 }
 
 void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap )
 {
-    bool hasWidget = m_bitmap.Ok();
     m_bitmap = bitmap;
 
     if (m_bitmap.Ok())
     {
-        if (!hasWidget)
+        GdkBitmap *mask = (GdkBitmap *) NULL;
+        if (m_bitmap.GetMask())
+            mask = m_bitmap.GetMask()->GetBitmap();
+    
+#ifdef __WXGTK20__
+        if (m_bitmap.HasPixbuf())
         {
-            gtk_widget_destroy( m_widget );
-
-            /* recreate m_widget because we've created a label
-               and not a bitmap above */
-            CreatePixmapWidget();
+            gtk_image_set_from_pixbuf(GTK_IMAGE(m_widget),
+                                      m_bitmap.GetPixbuf());
         }
         else
-        {
-            GdkBitmap *mask = (GdkBitmap *) NULL;
-            if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap();
-            gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask );
-        }
+            gtk_image_set_from_pixmap(GTK_IMAGE(m_widget),
+                                      m_bitmap.GetPixmap(), mask);
+#else
+        gtk_pixmap_set(GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask);
+#endif
 
         InvalidateBestSize();
         SetSize(GetBestSize());