There are two hard problems in computer science: cache validation, variable substitution, and off-by-one errors. (unknown source)The uncounted latter is often referred to as OBOE or, with a geek sense of humor, "Obi-Wan error".
Obi-Wan In Eclipse Diagram EditorsIn an older post, I already mentioned one major weakness of GEF (3.x): All coordinates are integers. One problem with that is that it can easily result in off-by-one rendering bugs. That unfortunately holds for many frameworks built on top of GEF. Have a close look at the gradient fill, anchor points (where connections are touching the nodes), clipping bounds and the arrow head in the following screenshots from the standard examples:
JavaDocs of JavaFX's Shape class.
"Smooth" CurvesYou have to take round-off errors into account when approximating smooth curves (splines) with integer polylines. Otherwise your allegedly smooth curve will go zigzag. This might be the reason why GEF does not have any curves. GMF does:
Arrow HeadsI'd expect an edges arrow head them to be aligned with the tangent of the edge at the anchor point. For polylines this is the line connecting the anchor with the last bendpoint. Same for Bézier curves, but apparently not for splines like these:
The last screenshot also shows that the line cap style plays a role at the tip of the arrow head.
Use the ForceGEF 4 will have double coordinates and Bézier curves. But at the time of writing this blogpost, there hasn't been an official release yet. It is not clear either whether and when it will be adopted by downstream projects.
I came across all this when trying to calculate edges and arrow heads for my sparetime JavaFX diagram editor project. Luckily, JavaFX uses double coordinates only. JavaFX also includes quadratic and cubic Bézier curves. These curves are really smooth and drawn fast, though I must admit I'd have expected B-Splines at least.
I am going to demonstrate this at EclipseCon Europe 2013. Stay tuned for more.