'From OLPC2.0 of ''24 October 2006'' [latest update: #1346] on 11 May 2007 at 7:49:09 pm'! !PolygonMorph methodsFor: 'editing' stamp: 'kfr 5/11/2007 19:48'! updateHandles | newVert oldVert midPts nextVertIx tweens | (handles at: self vertexCursor * 2 - 1) color: Color blue. smoothCurve ifTrue: [handles first center: vertices first. handles last center: vertices last. midPts := OrderedCollection new. nextVertIx := 2. tweens := OrderedCollection new. vertices withIndexDo: [:vertPt :vertIndex | oldVert := handles at: vertIndex * 2 - 1. oldVert position: vertPt - (oldVert extent // 2). (closed or: [vertIndex < vertices size]) ifTrue: [newVert := handles at: vertIndex * 2. newVert position: vertPt + (vertices atWrap: vertIndex + 1) - newVert extent // 2 + (1 @ -1)]]. self lineSegmentsDo: [:p1 :p2 | tweens addLast: p2 asIntegerPoint. p2 = (vertices atWrap: nextVertIx) ifTrue: ["Found endPoint." midPts addLast: (tweens at: tweens size // 2) + (tweens at: tweens size + 1 // 2) // 2. tweens := OrderedCollection new. nextVertIx := nextVertIx + 1]]. midPts withIndexDo: [:midPt :vertIndex | (closed or: [vertIndex < vertices size]) ifTrue: [newVert := handles at: vertIndex * 2. newVert position: midPt - (newVert extent // 2)]]] ifFalse: [vertices withIndexDo: [:vertPt :vertIndex | oldVert := handles at: vertIndex * 2 - 1. oldVert position: vertPt - (oldVert extent // 2). (closed or: [vertIndex < vertices size]) ifTrue: [newVert := handles at: vertIndex * 2. newVert position: vertPt + (vertices atWrap: vertIndex + 1) - newVert extent // 2 + (1 @ -1)]]]! !