Andreas Raab uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-MAD.203.mcz ==================== Summary ==================== Name: Morphic-MAD.203 Author: MAD Time: 6 October 2009, 7:24:39 am UUID: 3098c8d3-ea9e-4db8-910e-53d9bf57f9e2 Ancestors: Morphic-ar.202 Hack to fix problem with rounding of buttons - I'm happy to take advice on how to address the underlying problem. I've also slightly increased the radius so that the curve is visible. =============== Diff against Morphic-ar.202 =============== Item was changed: ----- Method: BalloonCanvas>>makeRoundRectShape:radius: (in category 'private') ----- makeRoundRectShape: aRectangle radius: radius "decompose a rounded rectangle into bezier form" | ovalDiameter rectExtent segments points endPoint seg idx offset rectOffset | ovalDiameter := (radius * 2) asPoint min: aRectangle extent. (ovalDiameter x <= 0 or:[ovalDiameter y <= 0]) ifTrue:[ "degenerates into rectangle - just hand back four lines" | topLeft topRight bottomLeft bottomRight | topLeft := aRectangle topLeft. topRight := aRectangle topRight. bottomLeft := aRectangle bottomLeft. bottomRight := aRectangle bottomRight. points := Array new: 4*3. points at: 1 put: topLeft. points at: 2 put: topLeft. points at: 3 put: topRight. points at: 4 put: topRight. points at: 5 put: topRight. points at: 6 put: bottomRight. points at: 7 put: bottomRight. points at: 8 put: bottomRight. points at: 9 put: bottomLeft. points at: 10 put: bottomLeft. points at: 11 put: bottomLeft. points at: 12 put: topLeft. ^points ]. rectExtent := aRectangle extent - ovalDiameter. rectOffset := aRectangle origin. segments := Bezier2Segment makeEllipseSegments: (0@0 extent: ovalDiameter). "patch up the segments to include lines connecting the oval parts. we need: 8*3 points for the oval parts + 4*3 points for the connecting lines" points := Array new: 12*3. idx := 0. + "Tweaked offsets to clean up curves. MAD" + endPoint := segments last end + rectOffset + (0@-1). - endPoint := segments last end + rectOffset. 1 to: 8 by: 2 do:[:i| + i = 1 ifTrue:[offset := rectOffset + (rectExtent x @ 0) + (1@-1)]. "top, tr" + i = 3 ifTrue:[offset := rectOffset + rectExtent + (1@1)]. "right, br" + i = 5 ifTrue:[offset := rectOffset + (0 @ rectExtent y) + (0@1)]. "bottom, bl" + i = 7 ifTrue:[offset := rectOffset + (0@-1)]."left, tl" - i = 1 ifTrue:[offset := rectOffset + (rectExtent x @ 0)]. - i = 3 ifTrue:[offset := rectOffset + rectExtent]. - i = 5 ifTrue:[offset := rectOffset + (0 @ rectExtent y)]. - i = 7 ifTrue:[offset := rectOffset]. seg := segments at: i. "insert a line segment for the horizontal part of the round rect" points at: (idx := idx+1) put: endPoint. points at: (idx := idx+1) put: endPoint. points at: (idx := idx+1) put: seg start + offset. "now the first half-arc" points at: (idx := idx+1) put: seg start + offset. points at: (idx := idx+1) put: seg via + offset. points at: (idx := idx+1) put: seg end + offset. "the second half-arc" seg := segments at: i+1. points at: (idx := idx+1) put: seg start + offset. points at: (idx := idx+1) put: seg via + offset. points at: (idx := idx+1) put: seg end + offset. endPoint := seg end + offset. ]. ^points! Item was changed: ----- Method: PluggableButtonMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas | cc gradient | cc := self color. cc isTransparent ifTrue:[cc := Color gray: 0.9]. self enabled ifFalse:[cc := Color lightGray]. cc brightness > 0.9 ifTrue:[cc := cc adjustBrightness: 0.9 - cc brightness]. showSelectionFeedback ifTrue:[ gradient := GradientFillStyle ramp: { 0 -> (Color gray: 0.75). 0.5 -> (Color gray: 0.85). 0.51 -> (Color gray: 0.9). 1 -> (Color gray: 1). }. ] ifFalse:[ gradient := GradientFillStyle ramp: { 0.0 -> Color white. 0.5 -> (cc). 0.51-> (cc adjustBrightness: -0.1). 1 -> (Color gray: 0.95). } ]. gradient origin: bounds topLeft. gradient direction: 0@self height. + ^aCanvas frameAndFillRoundRect: bounds radius: 8 fillStyle: gradient borderWidth: 1 borderColor: Color lightGray.! - ^aCanvas frameAndFillRoundRect: bounds radius: 6 fillStyle: gradient borderWidth: 1 borderColor: Color lightGray.! |
Free forum by Nabble | Edit this page |