Karl Ramberg uploaded a new version of Morphic to project Etoys: http://source.squeak.org/etoys/Morphic-kfr.97.mcz
==================== Summary ====================
Name: Morphic-kfr.97 Author: kfr Time: 25 October 2012, 7:56:46 am UUID: 6d5a2911-44d6-824d-90f4-59b32c1c8a03 Ancestors: Morphic-kfr.96
Add Etoy interfaces to ScratchPlugin picture manipulation methods http://tracker.squeakland.org/browse/SQ-996
=============== Diff against Morphic-kfr.96 ===============
Item was changed: Morph subclass: #SketchMorph + instanceVariableNames: 'originalForm rotationStyle scalePoint framesToDwell rotatedForm filters' - instanceVariableNames: 'originalForm rotationStyle scalePoint framesToDwell rotatedForm' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'!
+ !SketchMorph commentStamp: 'kfr. 11/7/2011 11:32' prior: 0! + SketchMorph commentStamp: '<historical>' prior: 0!! + The morph that results when the user draws a color bitmap using the PaintBox (SketchEditorMorph and PaintBoxMorph). - !SketchMorph commentStamp: '<historical>' prior: 0! - The morph that results when the user draws a color bitmap using the PaintBox (SketchEditorMorph and PaintBoxMorph).
forwardDirection is the angle at which the object will go forward. When the rotationStyle is not #normal, then forwardDirection is any angle, while the rotation is highly restricted. If flexed, this is remembered by the Transform morph. For non-normal rotationStyle, it is rotationDegrees.
setupAngle (a property) is where the user put the green arrow to indicate which direction on the picture is forward. When #normal, draw the morph initially at (0.0 - setupAngle). The enclosing TransformationMorph then rotates it to the true angle. + - rotationDegrees In a #normal object, rotationDegrees is constant an equal to setupAngle. + For non-normal, it is the direction the object is going. - For non-normal, it is the direction the object is going.
+ When repainting, set it back to its original state. The green arrow is set to setupAngle, and the sketch is shown as drawn originally (rotationDegrees = 0). - When repainting, set it back to its original state. The green arrow is set to setupAngle, and the sketch is shown as drawn originally (rotationDegrees = 0).
+ rotationStyle = normal (turns), leftRight, upDown, fixed. - rotationStyle = normal (turns), leftRight, upDown, fixed. When leftRight upDown or fixed, bit map has severe restrictions. !
Item was added: + ----- Method: SketchMorph>>blur:form: (in category 'filters') ----- + blur: aWidth form: filteredForm + | f fOut fWidth | + aWidth = 0 ifTrue:[^ filteredForm]. + f := filteredForm asFormOfDepth: 32. + fWidth := f width + (aWidth - 1) max: f width. + fOut := f deepCopy. + ScratchPlugin + primBlur: f bits + into: fOut bits + width: fWidth. + ^ fOut asFormOfDepth: 16!
Item was added: + ----- Method: SketchMorph>>brightnessShift:form: (in category 'filters') ----- + brightnessShift: aShift form: filteredForm + | f fOut shift | + aShift = 0 ifTrue:[^ filteredForm]. + shift := aShift min: 100 max: -100. + f := filteredForm asFormOfDepth: 32. + fOut := f deepCopy. + ScratchPlugin + primShiftBrightness: f bits + into: fOut bits + by: shift. + ^ fOut asFormOfDepth: 16!
Item was added: + ----- Method: SketchMorph>>filters (in category 'filters') ----- + filters + ^ filters + ifNil: [filters := OrderedCollection new]!
Item was added: + ----- Method: SketchMorph>>filtersAdd: (in category 'filters') ----- + filtersAdd: aFilterWithValue + self filters + do: [:i | (i includes: aFilterWithValue first) + ifTrue: [filters remove: i]]. + filters add: aFilterWithValue. + self layoutChanged!
Item was added: + ----- Method: SketchMorph>>fishEye:form: (in category 'filters') ----- + fishEye: aPower form: aForm + | f fOut power | + aPower = 0 ifTrue:[^aForm]. + power := (100 + (aPower * 10)) max:0. + f := aForm asFormOfDepth: 32. + fOut := f deepCopy. + ScratchPlugin primFisheye: f bits into: fOut bits width: f width power: power. + ^fOut asFormOfDepth: 16!
Item was changed: ----- Method: SketchMorph>>generateRotatedForm (in category 'drawing') ----- generateRotatedForm + | scalePt smoothPix pair filteredForm | + scalePoint + ifNil: [scalePoint := 1 @ 1]. - "Compute my rotatedForm and offsetWhenRotated." - - | scalePt smoothPix pair | - scalePoint ifNil: [scalePoint := 1 @ 1]. scalePt := scalePoint x abs @ scalePoint y abs. + rotationStyle == #none + ifTrue: [scalePt := 1 @ 1]. - rotationStyle == #none ifTrue: [scalePt := 1 @ 1]. - "smoothPix := (scalePt x < 1.0 or: [scalePt y < 1.0]) - ifTrue: [2] - ifFalse: [1]." smoothPix := 1. + rotationStyle = #leftRight + ifTrue: [self heading asSmallAngleDegrees < 0.0 - rotationStyle = #leftRight - ifTrue: - [self heading asSmallAngleDegrees < 0.0 ifTrue: [scalePt := scalePt x negated @ scalePt y]]. + rotationStyle = #upDown + ifTrue: [self heading asSmallAngleDegrees abs > 90.0 - rotationStyle = #upDown - ifTrue: - [self heading asSmallAngleDegrees abs > 90.0 ifTrue: [scalePt := scalePt x @ scalePt y negated]]. + filteredForm := originalForm copy. + filters + ifNotNil: [filters + do: [:filter | filteredForm := self + perform: filter first + withArguments: (filter allButFirst copyWith: filteredForm)]]. + rotatedForm := (scalePt = (1 @ 1) + and: [filters isNil]) - rotatedForm := scalePt = (1 @ 1) ifTrue: [originalForm] + ifFalse: [((rotationStyle == #normal + and: [self useInterpolation]) + and: [filters isNil]) + ifTrue: [^ self generateInterpolatedForm]. + pair := WarpBlt current + rotate: filteredForm - ifFalse: - ["ar 11/19/2001: I am uncertain what happens in the case of rotationStyle ~~ normal" - - (rotationStyle == #normal and: [self useInterpolation]) - ifTrue: [^self generateInterpolatedForm]. - pair := WarpBlt current - rotate: originalForm degrees: 0 center: originalForm boundingBox center scaleBy: scalePt smoothing: smoothPix. pair first]!
Item was added: + ----- Method: SketchMorph>>hueShift:form: (in category 'filters') ----- + hueShift: aShift form: filteredForm + | f fOut shift | + aShift = 0 ifTrue:[^ filteredForm]. + shift := aShift min: 180 max: -180. + f := filteredForm asFormOfDepth: 32. + fOut := f deepCopy. + ScratchPlugin + primShiftHue: f bits + into: fOut bits + byDegrees: shift. + ^ fOut asFormOfDepth: 16!
Item was added: + ----- Method: SketchMorph>>removeFilters (in category 'filters') ----- + removeFilters + filters := nil. + self layoutChanged!
Item was added: + ----- Method: SketchMorph>>saturationShift:form: (in category 'filters') ----- + saturationShift: aShift form: filteredForm + | f fOut shift | + aShift = 0 ifTrue:[^ filteredForm]. + shift := aShift min: 100 max: -100. + f := filteredForm asFormOfDepth: 32. + fOut := f deepCopy. + ScratchPlugin + primShiftSaturation: f bits + into: fOut bits + by: shift. + ^ fOut asFormOfDepth: 16!
Item was added: + ----- Method: SketchMorph>>whirl:form: (in category 'filters') ----- + whirl: anAngle form: aForm + | f fOut | + anAngle = 0 ifTrue:[^aForm]. + + f := aForm asFormOfDepth: 32. + fOut := f deepCopy. + ScratchPlugin primWhirl: f bits into: fOut bits width: f width angle: anAngle. + ^fOut asFormOfDepth: 16!
etoys-dev@lists.squeakfoundation.org