]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/bitmap.cpp
rtti api mods added
[wxWidgets.git] / src / x11 / bitmap.cpp
index cbee3462f6f768c6c1e6395b1852672c37131b75..12a782db436a60ac61ecc242dffc1968d31d2cd6 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "bitmap.h"
 #endif
 
 #pragma implementation "bitmap.h"
 #endif
 
@@ -375,6 +375,46 @@ bool wxBitmap::Create(void *data, wxBitmapType type,
     return handler->Create(this, data, type, width, height, depth);
 }
 
     return handler->Create(this, data, type, width, height, depth);
 }
 
+bool wxBitmap::Create(WXPixmap pixmap)
+{
+    UnRef();
+    Pixmap xpixmap = (Pixmap)pixmap;
+    Display* xdisplay = wxGlobalDisplay();
+    int xscreen = DefaultScreen( xdisplay );
+    Window xroot = RootWindow( xdisplay, xscreen );
+
+    // make a copy of the Pixmap
+    Window root;
+    Pixmap copy;
+    int x, y;
+    unsigned width, height, border, depth;
+
+    XGetGeometry( xdisplay, (Drawable)xpixmap, &root, &x, &y,
+                  &width, &height, &border, &depth );
+    copy = XCreatePixmap( xdisplay, xroot, width, height, depth );
+
+    GC gc = XCreateGC( xdisplay, copy, 0, NULL );
+    XCopyArea( xdisplay, xpixmap, copy, gc, 0, 0, width, height, 0, 0 );
+    XFreeGC( xdisplay, gc );
+
+    // fill in ref data
+    wxBitmapRefData* ref = new wxBitmapRefData();
+
+    if( depth == 1 )
+        ref->m_bitmap = (WXPixmap)copy;
+    else
+        ref->m_pixmap = (WXPixmap)copy;
+
+    ref->m_display = (WXDisplay*)xdisplay;
+    ref->m_width = width;
+    ref->m_height = height;
+    ref->m_bpp = depth;
+
+    m_refData = ref;
+
+    return true;
+}
+
 bool wxBitmap::CreateFromXpm( const char **bits )
 {
     wxCHECK_MSG( bits, FALSE, _T("NULL pointer in wxBitmap::CreateFromXpm") );
 bool wxBitmap::CreateFromXpm( const char **bits )
 {
     wxCHECK_MSG( bits, FALSE, _T("NULL pointer in wxBitmap::CreateFromXpm") );
@@ -1359,6 +1399,8 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name,
         wxImage image(decoder.ReadFile(stream));
         return image.Ok() && bitmap->CreateFromImage(image);
     }
         wxImage image(decoder.ReadFile(stream));
         return image.Ok() && bitmap->CreateFromImage(image);
     }
+
+    return FALSE;
 #else // !wxHAVE_LIB_XPM && !wxUSE_STREAMS
     return FALSE;
 #endif // wxHAVE_LIB_XPM / wxUSE_STREAMS
 #else // !wxHAVE_LIB_XPM && !wxUSE_STREAMS
     return FALSE;
 #endif // wxHAVE_LIB_XPM / wxUSE_STREAMS
@@ -1530,9 +1572,10 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *bits,
     M_BMPHANDLERDATA->m_bpp = 1;
 
     return TRUE;
     M_BMPHANDLERDATA->m_bpp = 1;
 
     return TRUE;
-#endif
-    wxCHECK_MSG( M_BMPHANDLERDATA->m_bitmap, FALSE,
+#else
+   wxCHECK_MSG( M_BMPHANDLERDATA->m_bitmap, FALSE,
                  wxT("couldn't create bitmap") );
                  wxT("couldn't create bitmap") );
+#endif
 }
 
 void wxBitmap::InitStandardHandlers()
 }
 
 void wxBitmap::InitStandardHandlers()