2013/9/22 Markus Engel <p637777@...1081...>:
If you set the breakpoint immediately before you press the group button, you can watch the grouping happen. Each one of these eight handles is redrawn by one call to "render", and some "dirty" areas are redrawn by the other many calls that happen.
The handles are not drawn with DrawingItem, they are drawn by SPCtrl, defined in the file sodipodi-ctrl.h.
The display hierarchy looks like this:
- The top level object is SPCanvas, which draws on the screen using window coordinates - SPCanvas renders a tree of SPCanvasItem - Subclasses of SPCanvasItem include SPCtrl (control points), SPCtrlRect (selection rectange and page border), SPCanvasBPath (path outline) and SPCanvasText (snapping hint text) - There is a special subclass of SPCanvasItem called SPCanvasArena, which contains an Inkscape::Drawing - Inkscape::Drawing renders a tree of Inkscape::DrawingItem in document / desktop coordinates - this hierarchy is entirely independent of SPCanvasItem - Each SPItem has a method called show(), which creates the DrawingItems which visualise the SPItem on the canvas. Some DrawingItems are not visible due to being used as clipping paths or masks.
It looks to me as if the whole visible area is divided into a lot of small chunks and they are all rendered individually.
This is indeed what is happening. Under normal circumstances, the drawing area is split into vertical strips which are drawn separately to improve responsiveness. You can see those partial redraws happening when you edit an object with a large Gaussian blur.
Regards, Krzysztof