X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9ce8d6a2b0fec3ce3f6e838445fdea3445d2ce8d..3bf93e1e9ac6b61e5220967d2ada2d4faec4dd9c:/src/x11/utilsx.cpp?ds=sidebyside diff --git a/src/x11/utilsx.cpp b/src/x11/utilsx.cpp index 1e9acde567..7a25ddbcc5 100644 --- a/src/x11/utilsx.cpp +++ b/src/x11/utilsx.cpp @@ -9,8 +9,78 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#ifdef __VMS +#define XShapeQueryExtension XSHAPEQUERYEXTENSION +#define XtDisplay XTDISPLAY +#endif + #include "wx/x11/privx.h" +#ifdef HAVE_XSHAPE +#ifdef __VMS +# include "wx/vms_x_fix.h" +# include +#else +# include +#endif +#include "wx/region.h" +#include "wx/bitmap.h" +#include "wx/dcmemory.h" +#endif + +// ---------------------------------------------------------------------------- +// XShape code +// ---------------------------------------------------------------------------- + +#ifdef HAVE_XSHAPE + +bool wxDoSetShape( Display* xdisplay, + Window xwindow, + const wxRegion& region ) +{ + int dummy1, dummy2; + + if( !XShapeQueryExtension( xdisplay, &dummy1, &dummy2 ) ) + return false; + + if( region.IsEmpty() ) + { + XShapeCombineMask( xdisplay, xwindow, ShapeBounding, 0, 0, + None, ShapeSet ); + } + else + { + // wxRegion::ConvertToBitmap gives us the wrong Pixmap: + // polichrome and with black and whire reversed + wxRect box = region.GetBox(); + wxBitmap bmp(box.GetRight(), box.GetBottom(), 1); + wxMemoryDC dc; + dc.SelectObject(bmp); + dc.SetBackground(*wxBLACK_BRUSH); + dc.Clear(); + dc.SetClippingRegion(region); + dc.SetBackground(*wxWHITE_BRUSH); + dc.Clear(); + dc.SelectObject(wxNullBitmap); + + XShapeCombineMask( xdisplay, xwindow, ShapeBounding, 0, 0, + (Pixmap)bmp.GetDrawable(), ShapeSet ); + } + + return true; +} + +#else + +bool wxDoSetShape( Display* WXUNUSED(xdisplay), + Window WXUNUSED(xwindow), + const wxRegion& WXUNUSED(region) ) +{ + return false; +} + +#endif + // ---------------------------------------------------------------------------- // wxXVisualInfo // ----------------------------------------------------------------------------