[squeak-dev] The Trunk: Morphic-nice.502.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Dec 29 15:14:10 UTC 2010
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-nice.502.mcz
==================== Summary ====================
Name: Morphic-nice.502
Author: nice
Time: 29 December 2010, 4:12:44.089 pm
UUID: 46f308ec-bfaf-4cca-abeb-ccda9b2c6f4f
Ancestors: Morphic-mtf.501
Add a few spaces in order to avoid Transcript warnings about @- ambiguity when recompiling.
=============== Diff against Morphic-mtf.501 ===============
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: [
- (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 := 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).
- segments := Bezier2Segment makeEllipseSegments: (0 at 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.
- points := Array new: 12*3.
idx := 0.
"Tweaked offsets to clean up curves. MAD"
+ endPoint := segments last end + rectOffset + (0 @ -1).
+ 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"
- endPoint := segments last end + rectOffset + (0 at -1).
- 1 to: 8 by: 2 do:[:i|
- i = 1 ifTrue:[offset := rectOffset + (rectExtent x @ 0) + (1 at -1)]. "top, tr"
- i = 3 ifTrue:[offset := rectOffset + rectExtent + (1 at 1)]. "right, br"
- i = 5 ifTrue:[offset := rectOffset + (0 @ rectExtent y) + (0 at 1)]. "bottom, bl"
- i = 7 ifTrue:[offset := rectOffset + (0 at -1)]."left, tl"
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.
- 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.
- 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.
- 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: MorphicProject>>setAsBackground: (in category 'utilities') -----
setAsBackground: aForm
"Set aForm as a background image."
+ | thisWorld newColor |
+ thisWorld := self currentWorld.
- | world newColor |
- world := self currentWorld.
newColor := InfiniteForm with: aForm.
aForm rememberCommand:
(Command new cmdWording: 'set background to a picture' translated;
+ undoTarget: thisWorld selector: #color: argument: thisWorld color;
+ redoTarget: thisWorld selector: #color: argument: newColor).
+ thisWorld color: newColor
- undoTarget: world selector: #color: argument: world color;
- redoTarget: world selector: #color: argument: newColor).
- world color: newColor
!
Item was changed:
----- Method: PolygonMorph>>nudgeForLabel: (in category 'attachments') -----
nudgeForLabel: aRectangle
"Try to move the label off me. Prefer labels on the top and right."
| i flags nudge |
+ (self bounds intersects: aRectangle) ifFalse: [^ 0 @ 0 ].
- (self bounds intersects: aRectangle) ifFalse: [^ 0 at 0 ].
flags := 0.
+ nudge := 0 @ 0.
- nudge := 0 at 0.
i := 1.
aRectangle lineSegmentsDo: [ :rp1 :rp2 | | rectSeg |
rectSeg := LineSegment from: rp1 to: rp2.
self straightLineSegmentsDo: [ :lp1 :lp2 | | polySeg int |
polySeg := LineSegment from: lp1 to: lp2.
int := polySeg intersectionWith: rectSeg.
int ifNotNil: [ flags := flags bitOr: i ].
].
i := i * 2.
].
"Now flags has bitflags for which sides"
nudge := flags caseOf: {
"no intersection"
+ [ 0 ] -> [ 0 @ 0 ].
- [ 0 ] -> [ 0 at 0 ].
"2 adjacent sides only"
+ [ 9 ] -> [ 1 @ 1 ].
+ [ 3 ] -> [ -1 @ 1 ].
+ [ 12 ] -> [ 1 @ -1 ].
+ [ 6 ] -> [ -1 @ -1 ].
- [ 9 ] -> [ 1 at 1 ].
- [ 3 ] -> [ -1 at 1 ].
- [ 12 ] -> [ 1 at -1 ].
- [ 6 ] -> [ -1 at -1 ].
"2 opposite sides only"
+ [ 10 ] -> [ 0 @ -1 ].
+ [ 5 ] -> [ 1 @ 0 ].
- [ 10 ] -> [ 0 at -1 ].
- [ 5 ] -> [ 1 at 0 ].
"only 1 side"
+ [ 8 ] -> [ -1 @ 0 ].
+ [ 1 ] -> [ 0 @ -1 ].
+ [ 2 ] -> [ 1 @ 0 ].
+ [ 4 ] -> [ 0 @ 1 ].
- [ 8 ] -> [ -1 at 0 ].
- [ 1 ] -> [ 0 at -1 ].
- [ 2 ] -> [ 1 at 0 ].
- [ 4 ] -> [ 0 at 1 ].
"3 sides"
+ [ 11 ] -> [ 0 @ 1 ].
+ [ 13 ] -> [ 1 @ 0 ].
+ [ 14 ] -> [ 0 @ -1 ].
+ [ 7 ] -> [ -1 @ 0 ].
- [ 11 ] -> [ 0 at 1 ].
- [ 13 ] -> [ 1 at 0 ].
- [ 14 ] -> [ 0 at -1 ].
- [ 7 ] -> [ -1 at 0 ].
"all sides"
+ [ 15 ] -> [ 1 @ -1 "move up and to the right" ].
- [ 15 ] -> [ 1 at -1 "move up and to the right" ].
}.
^nudge!
Item was changed:
----- Method: PreDebugWindow>>adjustBookControls (in category 'as yet unclassified') -----
adjustBookControls
| inner |
proceedButton ifNil: [^ self].
+ proceedButton align: proceedButton topLeft with: (inner := self innerBounds) topLeft + (35 @ -4).
+ debugButton align: debugButton topRight with: inner topRight - (16 @ 4).!
- proceedButton align: proceedButton topLeft with: (inner := self innerBounds) topLeft + (35 at -4).
- debugButton align: debugButton topRight with: inner topRight - (16 at 4).!
Item was changed:
----- Method: ScrollPane>>vResizeScrollBar (in category 'geometry') -----
vResizeScrollBar
| w topLeft borderHeight innerWidth |
w := self scrollBarThickness.
innerWidth := self flatColoredScrollBarLook
ifTrue:
[borderHeight := borderWidth.
0]
ifFalse:
[borderHeight := 0.
1].
topLeft := scrollBarOnLeft
ifTrue:
[retractableScrollBar
ifTrue: [bounds topLeft - ((w - borderWidth) @ (0 - borderHeight))]
ifFalse: [bounds topLeft + ((borderWidth - innerWidth) @ borderHeight)]]
ifFalse:
[retractableScrollBar
ifTrue: [bounds topRight - (borderWidth @ (0 - borderHeight))]
ifFalse:
[bounds topRight - ((w + borderWidth - innerWidth) @ (0 - borderHeight))]].
scrollBar
+ bounds: (topLeft + ((scrollBarOnLeft ifTrue: [-1] ifFalse: [1]) @ -1) extent: w @ self vScrollBarHeight)
- bounds: (topLeft + ((scrollBarOnLeft ifTrue: [-1] ifFalse: [1]) @-1) extent: w @ self vScrollBarHeight)
!
Item was changed:
----- Method: TTSampleFontMorph>>drawCharactersOn: (in category 'drawing') -----
drawCharactersOn: aCanvas
| glyph origin r offset cy m |
+ 0 to: 255 do: [:i |
- 0 to: 255 do:[:i|
glyph := font at: i.
origin := font bounds extent * ((i \\ 16) @ (i // 16)).
r := origin extent: font bounds extent.
offset := r center - glyph bounds center.
cy := glyph bounds center y.
m := MatrixTransform2x3 withOffset: 0 at cy.
+ m := m composedWithLocal: (MatrixTransform2x3 withScale: 1 @ -1).
+ m := m composedWithLocal: (MatrixTransform2x3 withOffset: 0 @ cy negated).
- m := m composedWithLocal: (MatrixTransform2x3 withScale: 1 at -1).
- m := m composedWithLocal: (MatrixTransform2x3 withOffset: 0 at cy negated).
m := m composedWithGlobal: (MatrixTransform2x3 withOffset: offset).
+ aCanvas asBalloonCanvas preserveStateDuring: [:balloonCanvas |
- aCanvas asBalloonCanvas preserveStateDuring:[:balloonCanvas|
balloonCanvas transformBy: m.
balloonCanvas drawGeneralBezierShape: glyph contours
color: color
borderWidth: 0
borderColor: Color black.
].
].!
Item was changed:
----- Method: TTSampleStringMorph>>computeTransform (in category 'private') -----
computeTransform
| cy |
cy := bounds origin y + bounds corner y * 0.5.
transform := MatrixTransform2x3
transformFromLocal: (ttBounds insetBy: borderWidth negated)
toGlobal: bounds.
+ transform := transform composedWithGlobal:(MatrixTransform2x3 withOffset: 0 @ cy negated).
+ transform := transform composedWithGlobal:(MatrixTransform2x3 withScale: 1.0 @ -1.0).
+ transform := transform composedWithGlobal:(MatrixTransform2x3 withOffset: 0 @ cy).
- transform := transform composedWithGlobal:(MatrixTransform2x3 withOffset: 0 at cy negated).
- transform := transform composedWithGlobal:(MatrixTransform2x3 withScale: 1.0 at -1.0).
- transform := transform composedWithGlobal:(MatrixTransform2x3 withOffset: 0 at cy).
^transform!
More information about the Squeak-dev
mailing list
|