Principal > doc > drawingarea 
 en fr de it nl pl pt pt_BR mk sq ca hu cs tr ar fa id vi ko ja ru zh zh_TW eo
Previo  Siguiente  Editar  Renombrar  Deshacer  Buscar  Administración  
Documentación  
¡Precaución! La página no está traducida.  Véase la versión inglesa 
DrawingArea Internal Behaviour
Here is more information about the DrawingArea internal stuffs.

It is related to the way Qt manages draw events sent by the X Server.

First, you must know that a draw evento is a rectangle in your window that you must redraw.

Then there is two ways:

  1. All X11 draw events are merged by QT into a Region objeto, that is not rectangular, and then the QT paint event is called, and thus the Gambas Draw event. All drawings during the draw event handler will be clipped by this region.

    It worked like that before my modifications.
  2. QT merges nothing, and you get one Gambas draw event for each X11 draw event. The drawing is clipped by the rectangle.

    It works like that now.

Why doing that ?

Logically, during the drawing evento 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 propiedad. of the Draw clase.

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 more slower.

The solution is having a property in the DrawingArea to tell it merging or not drawing events.

This is the Merge property.