Fix paint clipping region with GTK+ >= 3.20
Apparently the clip is no longer set properly. Fixes wxDC::Clear() overwriting
areas outside the window. Problem can be seen in the Audacity toolbars.
(cherry picked from commit bca7313499
)
This commit is contained in:
@@ -4099,9 +4099,21 @@ void wxWindowGTK::GTKSendPaintEvents(const GdkRegion* region)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
m_paintContext = cr;
|
{
|
||||||
|
cairo_region_t* region = gdk_window_get_clip_region(gtk_widget_get_window(m_wxwindow));
|
||||||
|
cairo_rectangle_int_t rect;
|
||||||
|
cairo_region_get_extents(region, &rect);
|
||||||
|
cairo_region_destroy(region);
|
||||||
|
cairo_rectangle(cr, rect.x, rect.y, rect.width, rect.height);
|
||||||
|
cairo_clip(cr);
|
||||||
|
}
|
||||||
double x1, y1, x2, y2;
|
double x1, y1, x2, y2;
|
||||||
cairo_clip_extents(cr, &x1, &y1, &x2, &y2);
|
cairo_clip_extents(cr, &x1, &y1, &x2, &y2);
|
||||||
|
|
||||||
|
if (x1 >= x2 || y1 >= y2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_paintContext = cr;
|
||||||
m_updateRegion = wxRegion(int(x1), int(y1), int(x2 - x1), int(y2 - y1));
|
m_updateRegion = wxRegion(int(x1), int(y1), int(x2 - x1), int(y2 - y1));
|
||||||
#else // !__WXGTK3__
|
#else // !__WXGTK3__
|
||||||
m_updateRegion = wxRegion(region);
|
m_updateRegion = wxRegion(region);
|
||||||
|
Reference in New Issue
Block a user