}
if (m_gdkwindow)
- gdk_draw_lines( m_gdkwindow, m_penGC, gpts, n);
+ gdk_draw_lines( m_gdkwindow, m_penGC, (GdkPoint*) gpts, n);
delete[] gpts_alloc;
}
bool originChanged;
DrawingSetup(gc, originChanged);
- gdk_draw_polygon(m_gdkwindow, gc, true, gdkpoints, n);
+ gdk_draw_polygon(m_gdkwindow, gc, true, (GdkPoint*) gdkpoints, n);
if (originChanged)
gdk_gc_set_ts_origin(gc, 0, 0);
gdkpoints[(i+1)%n].y);
}
*/
- gdk_draw_polygon( m_gdkwindow, m_penGC, FALSE, gdkpoints, n );
+ gdk_draw_polygon( m_gdkwindow, m_penGC, FALSE, (GdkPoint*) gdkpoints, n );
}
}
{
wxMask* m = bitmap.GetMask();
if (m)
- mask = m->GetBitmap();
+ mask = *m;
}
+
+ GdkPixmap* mask_new = NULL;
if (mask)
{
- GdkPixmap* mask_new = NULL;
if (isScaled)
{
mask = ScaleMask(mask, 0, 0, w, h, ww, hh, m_scaleX, m_scaleY);
}
gdk_gc_set_clip_mask(use_gc, mask);
gdk_gc_set_clip_origin(use_gc, xx, yy);
- if (mask_new)
- g_object_unref(mask_new);
}
// determine whether to use pixmap or pixbuf
pixmap = bitmap.GetPixmap();
if (pixmap && gdk_drawable_get_depth(pixmap) == 1)
{
- // convert mono pixmap to color using text fg/bg colors
- pixmap = MonoToColor(pixmap, 0, 0, w, h);
- pixmap_new = pixmap;
+ if (gdk_drawable_get_depth(m_gdkwindow) != 1)
+ {
+ // convert mono pixmap to color using text fg/bg colors
+ pixmap = MonoToColor(pixmap, 0, 0, w, h);
+ pixmap_new = pixmap;
+ }
}
else if (hasAlpha || pixmap == NULL)
pixbuf = bitmap.GetPixbuf();
if (pixmap_new)
g_object_unref(pixmap_new);
if (mask)
+ {
gdk_gc_set_clip_region(use_gc, clipRegion);
+
+ // Notice that we can only release the mask now, we can't do it before
+ // the calls to gdk_draw_xxx() above as they crash with X error with
+ // GTK+ up to 2.20.1 (i.e. it works with 2.20 but is known to not work
+ // with 2.16.1 and below).
+ if (mask_new)
+ g_object_unref(mask_new);
+ }
}
bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest,
{
wxMask* m = bitmap.GetMask();
if (m)
- mask = m->GetBitmap();
+ mask = *m;
}
}
else
}
GdkPixmap* pixmap = NULL;
- if (gdk_drawable_get_depth(srcDrawable) == 1)
+ if (gdk_drawable_get_depth(srcDrawable) == 1 &&
+ (gdk_drawable_get_depth(m_gdkwindow) != 1 || isScaled))
{
// Convert mono pixmap to color using text fg/bg colors.
// Scaling/drawing is simpler if this is done first.
if ((m_brush.GetStyle() == wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
{
gdk_gc_set_fill( m_textGC, GDK_OPAQUE_STIPPLED);
- gdk_gc_set_stipple( m_textGC, m_brush.GetStipple()->GetMask()->GetBitmap() );
+ gdk_gc_set_stipple( m_textGC, *m_brush.GetStipple()->GetMask() );
}
if (m_brush.IsHatch())