]> git.saurik.com Git - wxWidgets.git/commitdiff
Added raw bitmap access support to GTK 2.0.
authorRobert Roebling <robert@roebling.de>
Sun, 13 Feb 2005 15:35:43 +0000 (15:35 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 13 Feb 2005 15:35:43 +0000 (15:35 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31996 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/gtk/bitmap.h
include/wx/gtk1/bitmap.h
include/wx/rawbmp.h
samples/image/image.cpp
src/gtk/bitmap.cpp
src/gtk1/bitmap.cpp

index b77a0a801731e631347d6dd0aa41d5329eb7c581..956e7bcacfe92f9f0e20dc0aa76169c39d252e66 100644 (file)
@@ -43,6 +43,13 @@ All:
   the client size and total size of the window.  Code that sets the 
   client size using the best size, or that added extra space to sizers
   to compensate for this bug may need to be changed.
+- Changed calculation of scrolling area to not clip away some bits
+  due to a rounding error.
+- Changed GetVirtualSize() to return client size by default until
+  SetVirtualSize() gets called. From then on it will only return
+  that.
+- Various changes to how wxListCtrl and wxTreeCtrl react to right
+  mouse clicks and left mouse click for starting a drag operation.
 
 
 All (GUI):
@@ -83,6 +90,9 @@ wxGTK:
   are only called with GTK+ 2.4.x installed and should yield linker
   errors otherwise.
 - wxTextCtrl text insertion efficiency fixed. (Mart Raudsepp)
+- Added wxRawBitmap support
+- Corrected Input method handler code (for Chinese etc.) and its
+  interaction with wxWidgets' events.
 
 wxMac:
 
@@ -101,6 +111,7 @@ wxMSW:
 wxWinCE:
 - Added support for MS Handheld PC 2000. This was done before 2.5.4,
   but not mentioned anywhere.
+- Added (preliminary) support for sockets
 
 wxUniv:
 
index c34381159820dafa61e6eb338ae35d7addbf0807..135805a5ae587e468d16fe818ba7f12d70290f7d 100644 (file)
@@ -20,6 +20,7 @@
 #include "wx/string.h"
 #include "wx/palette.h"
 #include "wx/gdiobj.h"
+#include "wx/rawbmp.h"
 
 #ifdef __WXGTK20__
 typedef struct _GdkPixbuf GdkPixbuf;
@@ -130,6 +131,11 @@ public:
     
     // Basically, this corresponds to Win32 StretchBlt()
     wxBitmap Rescale( int clipx, int clipy, int clipwidth, int clipheight, int width, int height );
+    
+    // raw bitmap access support functions
+    void *GetRawData(wxPixelDataBase& data, int bpp);
+    void UngetRawData(wxPixelDataBase& data);
+
 protected:
     bool CreateFromXpm(const char **bits);
     bool CreateFromImage(const wxImage& image, int depth);
index c34381159820dafa61e6eb338ae35d7addbf0807..135805a5ae587e468d16fe818ba7f12d70290f7d 100644 (file)
@@ -20,6 +20,7 @@
 #include "wx/string.h"
 #include "wx/palette.h"
 #include "wx/gdiobj.h"
+#include "wx/rawbmp.h"
 
 #ifdef __WXGTK20__
 typedef struct _GdkPixbuf GdkPixbuf;
@@ -130,6 +131,11 @@ public:
     
     // Basically, this corresponds to Win32 StretchBlt()
     wxBitmap Rescale( int clipx, int clipy, int clipwidth, int clipheight, int width, int height );
+    
+    // raw bitmap access support functions
+    void *GetRawData(wxPixelDataBase& data, int bpp);
+    void UngetRawData(wxPixelDataBase& data);
+
 protected:
     bool CreateFromXpm(const char **bits);
     bool CreateFromImage(const wxImage& image, int depth);
index 91a29f6f1906c2734233300d137fb8b6bff7c341..0815f09f17aa2394ab4f5ae3759e80c9f22a34bd 100644 (file)
@@ -160,6 +160,11 @@ typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxImagePixelFormat;
     // Cocoa is standard RGB or RGBA (normally it is RGBA)
     typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxNativePixelFormat;
 
+    #define wxPIXEL_FORMAT_ALPHA 3
+#elif defined(__WXGTK__)
+    // Under GTK+ 2.X we use GdkPixbuf, which should be RGBA
+    typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxNativePixelFormat;
+
     #define wxPIXEL_FORMAT_ALPHA 3
 #endif
 
index 4d8d51e527eacb461ea55232b4174f2d12647c83..aeba4678ec90bdaababf04f669714323c1aa05da 100644 (file)
 #include "smile.xbm"
 #include "smile.xpm"
 
-#if defined(__WXMSW__) || defined(__WXMAC__)
+#if defined(__WXMSW__)
     #ifdef wxHAVE_RAW_BITMAP
     #include "wx/rawbmp.h"
     #endif
 #endif
 
+#if defined(__WXMAC__) || defined(__WXGTK__)
+    #define wxHAVE_RAW_BITMAP
+    #include "wx/rawbmp.h"
+#endif
+
 // derived classes
 
 class MyFrame;
@@ -271,7 +276,7 @@ public:
             return;
         }
 
-        data.UseAlpha();
+//        data.UseAlpha();
 
         Data::Iterator p(data);
 
index c8b75d0a4cc7550859a562a46822f39817f6d3a6..289f2653c8664bb3ee044156ae2977dea08b5095 100644 (file)
@@ -306,7 +306,7 @@ bool wxBitmap::Create( int width, int height, int depth )
     if (depth == -1)
         depth = visual->depth;
 
-    wxCHECK_MSG( (depth == visual->depth) || (depth == 1), FALSE,
+    wxCHECK_MSG( (depth == visual->depth) || (depth == 1) || (depth == 32), FALSE,
                     wxT("invalid bitmap depth") )
 
     m_refData = new wxBitmapRefData();
@@ -318,6 +318,14 @@ bool wxBitmap::Create( int width, int height, int depth )
         M_BMPDATA->m_bitmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, 1 );
         M_BMPDATA->m_bpp = 1;
     }
+#ifdef __WXGTK20__
+    else if (depth == 32)
+    {
+        M_BMPDATA->m_pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, true,
+                                              8, width, height);
+        M_BMPDATA->m_bpp = 32;
+    }
+#endif
     else
     {
         M_BMPDATA->m_pixmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, depth );
@@ -1557,6 +1565,37 @@ void wxBitmap::PurgeOtherRepresentations(wxBitmap::Representation keep)
 
 #endif // __WXGTK20__
 
+void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
+{
+#ifdef __WXGTK20__
+    if (bpp != 32)
+        return NULL;
+        
+    GdkPixbuf *pixbuf = GetPixbuf();
+    if (!pixbuf)
+        return NULL;
+
+#if 0    
+    if (gdk_pixbuf_get_has_alpha( pixbuf ))
+        wxPrintf( wxT("Has alpha\n") );
+    else
+        wxPrintf( wxT("No alpha.\n") );
+#endif
+
+       data.m_height = gdk_pixbuf_get_height( pixbuf );
+       data.m_width = gdk_pixbuf_get_width( pixbuf );
+       data.m_stride = gdk_pixbuf_get_rowstride( pixbuf );
+    
+    return gdk_pixbuf_get_pixels( pixbuf );
+#else
+    return NULL;
+#endif    
+}
+
+void wxBitmap::UngetRawData(wxPixelDataBase& data)
+{
+}
+
 //-----------------------------------------------------------------------------
 // wxBitmapHandler
 //-----------------------------------------------------------------------------
index c8b75d0a4cc7550859a562a46822f39817f6d3a6..289f2653c8664bb3ee044156ae2977dea08b5095 100644 (file)
@@ -306,7 +306,7 @@ bool wxBitmap::Create( int width, int height, int depth )
     if (depth == -1)
         depth = visual->depth;
 
-    wxCHECK_MSG( (depth == visual->depth) || (depth == 1), FALSE,
+    wxCHECK_MSG( (depth == visual->depth) || (depth == 1) || (depth == 32), FALSE,
                     wxT("invalid bitmap depth") )
 
     m_refData = new wxBitmapRefData();
@@ -318,6 +318,14 @@ bool wxBitmap::Create( int width, int height, int depth )
         M_BMPDATA->m_bitmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, 1 );
         M_BMPDATA->m_bpp = 1;
     }
+#ifdef __WXGTK20__
+    else if (depth == 32)
+    {
+        M_BMPDATA->m_pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, true,
+                                              8, width, height);
+        M_BMPDATA->m_bpp = 32;
+    }
+#endif
     else
     {
         M_BMPDATA->m_pixmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, depth );
@@ -1557,6 +1565,37 @@ void wxBitmap::PurgeOtherRepresentations(wxBitmap::Representation keep)
 
 #endif // __WXGTK20__
 
+void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
+{
+#ifdef __WXGTK20__
+    if (bpp != 32)
+        return NULL;
+        
+    GdkPixbuf *pixbuf = GetPixbuf();
+    if (!pixbuf)
+        return NULL;
+
+#if 0    
+    if (gdk_pixbuf_get_has_alpha( pixbuf ))
+        wxPrintf( wxT("Has alpha\n") );
+    else
+        wxPrintf( wxT("No alpha.\n") );
+#endif
+
+       data.m_height = gdk_pixbuf_get_height( pixbuf );
+       data.m_width = gdk_pixbuf_get_width( pixbuf );
+       data.m_stride = gdk_pixbuf_get_rowstride( pixbuf );
+    
+    return gdk_pixbuf_get_pixels( pixbuf );
+#else
+    return NULL;
+#endif    
+}
+
+void wxBitmap::UngetRawData(wxPixelDataBase& data)
+{
+}
+
 //-----------------------------------------------------------------------------
 // wxBitmapHandler
 //-----------------------------------------------------------------------------