It is related to the way Qt manages draw events sent by the X Server.
First, you must know that a draw event is a rectangle in your window that you must redraw.
Then there is two ways:
Logically, during the drawing event handler, you have to draw the less possible things to speed up the drawing.
The only way in Gambas to know what to draw is using the Clip property. of the Draw class.
In the first case, as drawing is clipped by the region, Draw.Clip.[X/Y/W/H] returns the smallest rectangle that includes the region.
But, for example, when you enlarge a little a window, the region contains two rectangles: one at the right of the window, the other at the bottom. And so, the including rectangle is the entire window!
+--------------------------------+---+ | | x | xxx = The region used by Qt | | x | | | x | | | x | | | x | | | x | | | x | | Old size | x | | | x | +--------------------------------+ x | |xxxxxxxxxxxxxxxxxxxxx New size xxxx | +------------------------------------+
When you can easily draw any sub-rectangle of your drawing area, the second way is the better.
When you can't easily do that, i.e. when your drawing is too complex to be easily splitted into a rectangle, you prefer drawing everything each time you receive a Draw event. And so, you do the job twice or more times comparing to the first way. So it is twice or ore slower.
The solution is having a property in the DrawingArea to tell it merging or not drawing events.
This is the Merge property.