forked from AuroraMiddleware/gtk
Don't support the old handling of zero height/width in gdk_window_clear_area
We used to handle zero height/width specially in the non-double buffered case due to the weird behaviour of XClearArea in this case. However this is undocumented, incompatible with what happens on double-buffered drawing, and just not a good API. So, we drop this behaviour, having fixed gtkclist.c which used this.
This commit is contained in:
parent
0df4283574
commit
e1554d8466
@ -54,4 +54,14 @@
|
|||||||
simply create a new cairo context for each expose event.
|
simply create a new cairo context for each expose event.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Due to a weird API in XClearArea the gdk_window_clear_area() call handled
|
||||||
|
a specified width or height of zero to mean "to end of window" for
|
||||||
|
non-doublebuffered drawing. This has been changed to be consistent with
|
||||||
|
the docs and what happens in the doublebuffered case. All code in gtk+
|
||||||
|
that relied on this has been fixed, but it is possible (although unlikely)
|
||||||
|
that third party applications rely on this. If you need to do this, just
|
||||||
|
implement it yourself using gdk_drawable_get_size().
|
||||||
|
</para>
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -4349,7 +4349,6 @@ gdk_window_clear_area_internal (GdkWindow *window,
|
|||||||
gint height,
|
gint height,
|
||||||
gboolean send_expose)
|
gboolean send_expose)
|
||||||
{
|
{
|
||||||
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
||||||
GdkRectangle rect;
|
GdkRectangle rect;
|
||||||
GdkRegion *region;
|
GdkRegion *region;
|
||||||
|
|
||||||
@ -4358,12 +4357,10 @@ gdk_window_clear_area_internal (GdkWindow *window,
|
|||||||
if (GDK_WINDOW_DESTROYED (window))
|
if (GDK_WINDOW_DESTROYED (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* This is what XClearArea does, and e.g. GtkCList uses it,
|
/* Terminate early to avoid weird interpretation of
|
||||||
so we need to duplicate that */
|
zero width/height by XClearArea */
|
||||||
if (width == 0)
|
if (width == 0 || height == 0)
|
||||||
width = private->width - x;
|
return;
|
||||||
if (height == 0)
|
|
||||||
height = private->height - y;
|
|
||||||
|
|
||||||
rect.x = x;
|
rect.x = x;
|
||||||
rect.y = y;
|
rect.y = y;
|
||||||
|
Loading…
Reference in New Issue
Block a user