+wxBitmapRefData::wxBitmapRefData(const wxBitmapRefData& data)
+{
+ m_pixmap = 0;
+ m_bitmap = 0;
+ m_display = data.m_display;
+ m_mask = NULL; // FIXME: should copy
+ m_palette = NULL; // FIXME: should copy
+
+ Create(data.m_width, data.m_height, data.m_bpp);
+}
+
+bool wxBitmapRefData::Create(int width, int height, int depth)
+{
+ m_width = width;
+ m_height = height;
+ m_bpp = depth;
+
+ m_display = wxGlobalDisplay();
+
+ wxCHECK_MSG( m_display, false, wxT("No display") );
+
+ int xscreen = DefaultScreen(m_display);
+ int bpp = DefaultDepth(m_display, xscreen);
+ if ( depth == -1 )
+ depth = bpp;
+
+ wxCHECK_MSG( (depth == bpp) || (depth == 1), false,
+ wxT("invalid bitmap depth") );
+
+#if wxUSE_NANOX
+ m_pixmap = (WXPixmap) GrNewPixmap(width, height, NULL);
+#else // !wxUSE_NANOX
+ Window xroot = RootWindow(m_display, xscreen);
+
+ *(depth == 1 ? &m_bitmap : &m_pixmap) =
+ XCreatePixmap(m_display, xroot, width, height, depth);
+#endif // wxUSE_NANOX/!wxUSE_NANOX
+
+ wxCHECK_MSG( m_pixmap || m_bitmap, false, wxT("Bitmap creation failed") );
+
+ return true;
+}
+