On Oct 1, 2007, at 21:19 , Klaus D. Witzel wrote:
I referred to #saveBitsUnderCornersOf:on:in:corners: which copies the bits under potential round corner areas, then the client's block is evaluated, then #tweakCornersOf:on:in:borderWidth:corners: puts back some of those bits. Impossible with a one dimensional SVG +html stream :( or similiar media, for that matter.
During rendering the to-be-rounded Morph does not know that, so I signal a RoundedCornersNotification and exchange rounding information between the related methods (the borderWidthForRounding I think) which [the methods and their receivers] may be far away from each other on the stack. I need the "to be rounded" info at the SVG+xhtml element level. Example attached, FireFox/Opera and Inkskape recommended, Morph class names are in the element id. Magnify to 200% and inspect the corners.
Hehe, I had to do a similar hack for the Rome canvas in Tweak ... I did away with the whole saveBits mess:
roundCornersOf: aPlayer in: bounds during: aBlock aPlayer roundCorners ifFalse: [^aBlock value]. ^aBlock on: RomeTweakWantsRoundedCorners do: [:ex | ex resume: (ex bounds = bounds ifTrue: [aPlayer roundCornerFlags] ifFalse: [nil])]
roundedCornersFor: aRectangle ^(RomeTweakWantsRoundedCorners forBounds: aRectangle) signal
frameAndFillRectangle: r fillColor: c borderWidth: borderWidth borderColor: borderColor (self roundedCornersFor: r) ifNotNilDo: [:corners | ^self frameAndFillRoundRect: r radius: 6 fillStyle: c borderWidth: borderWidth borderColor: borderColor corners: corners].
canvas selectFill: c asRomeFill. canvas selectPenWidth: borderWidth color: borderColor. canvas drawRectangle: (r insetByRomePenWidth: borderWidth color: borderColor).
- Bert -