[Sorry for having part of this email in French, we are talking about optimizing and graph traversal in SqMondrian]
J'ai compris comment fonctionnait la traversée et le dessin des éléments/shapes dans Mondrian. En fait, les deux sont mixés
A chaque fois que tu fais le display sur une shape, tu as :
Shape>>display: anElement on: aCanvas (...) next display: anElement on: aCanvas
Sauf que next est toujours à nil dans la version actuelle de Mondrian !
Legacy code. Yes, I fixed this.
et là c'est bon, on repart sur GraphElement>>display: anElement on: aCanvas aCanvas translateBy: self bounds origin during: [ :canvas | self nodes do: [ :each | each displayOn: canvas ]. self edges do: [ :each | each displayOn: canvas ] ]
NB: anElement est inutile dans les Element
You're right. We should fix this.
La cerise sur le gateau : quand on lance le dessin sur le root node, on a
Element>>shape display: self on: aCanvas
mais shape est nil pour le Root node, donc on passe par UndefinedObject et là c'est bon :)
OK il devrait y avoir moyen de clarifier ça pour faire la traversée directement niveau node dans displayOn: et pas via les Shape.
Yes, the shape knows nothing about the graph structure.
Cheers, Alexandre