Bulia: it's obvious that the current canvas does all this, but I mentioned those requirements in case we wanted to replace it with an external library.
Follow up with some details.
1. Currently there are actually two different canvas, with one drawing into an item of the other: SPCanvas uses a special item, SPCanvasArena, to display an NRArena with all NRArenaItems. I think this could be unified and NRArena should be just a group.
2. Every canvas and arena item can receive events. This is useful when implementing control points, but not for much else, and causes some slowdown when there are many complex paths, because on nearly every motion event the item under the cursor needs to be recalculated. I recall that when I profiled for slowdown in the new node tool, there was a nontrivial amount of time spent in children of pick_item on motion events. While the node tool obviously needs to do this, other tools like the selector don't - they only need to find the item under cursor on clicks. I propose to only pass events to items derived from a specific subclass, that register themselves in a geometric query structure when added to the canvas.
3. In case this project is too ambitious for GSoC, its scope can be reduced so that NRArena rendering is converted to use Cairo operations. Right now graphics are rendered into NRPixblocks.
Regards, Krzysztof