RectangleMorph subclass: #VideoFxMorph instanceVariableNames: 'framesProcessed enabled displayForm target targetOrigForm' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VideoFxMorph methodsFor: 'accessing' stamp: 'dmoc 5/11/2010 13:11'! incFramesProcessed framesProcessed := framesProcessed + 1! ! !VideoFxMorph methodsFor: 'drawing' stamp: 'dmoc 5/16/2010 13:54'! drawOn: aCanvas aCanvas paintImage: self class icon at: self position ! ! !VideoFxMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/11/2010 12:54'! getEnabled ^ enabled! ! !VideoFxMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/11/2010 12:55'! getFramesProcessed ^ framesProcessed! ! !VideoFxMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 15:30'! resetFramesProcessed self setFramesProcessed: 0! ! !VideoFxMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 15:52'! setEnabled: aBoolean enabled := aBoolean. self updateBalloonText. ! ! !VideoFxMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/11/2010 15:40'! setFramesProcessed: aNumber framesProcessed := aNumber asInteger! ! !VideoFxMorph methodsFor: 'geometry' stamp: 'dmoc 5/16/2010 15:26'! extent: aPoint "Do nothing; my extent is determined by my image Form." ! ! !VideoFxMorph methodsFor: 'initialization' stamp: 'dmoc 5/16/2010 16:04'! initialize super initialize. super extent: self class icon extent. self color: Color blue. self extent: 64@64. self borderWidth: 0. self toggleCornerRounding. enabled := false. framesProcessed := 0. ! ! !VideoFxMorph methodsFor: 'initialization' stamp: 'dmoc 5/12/2010 17:59'! processNewFrame: f ^ self subclassResponsibility! ! !VideoFxMorph methodsFor: 'private' stamp: 'dmoc 5/16/2010 15:59'! enabledAsString ^ enabled ifTrue: ['enabled'] ifFalse: ['disabled']! ! !VideoFxMorph methodsFor: 'private' stamp: 'dmoc 5/16/2010 15:51'! updateBalloonText self setBalloonText: 'You should not see me!!'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VideoFxMorph class instanceVariableNames: ''! !VideoFxMorph class methodsFor: 'scripting' stamp: 'dmoc 5/16/2010 15:33'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot enabled 'Enable effect' Boolean readWrite Player getVfxEffectEnabled Player setVfxEffectEnabled:) (slot framesProcessed 'Number of frames processed' Number readWrite Player getVfxFramesProcessed Player setVfxFramesProcessed:) " (command resetFramesProcessed 'Reset to zero') " )) ) ! ! !VideoFxMorph class methodsFor: 'misc' stamp: 'dmoc 5/12/2010 17:49'! icon "Original file: imagecodericon.png" ^ (PNGReadWriter on: (Base64MimeConverter mimeDecodeToBytes: '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 /i957VpDfrfOMwAAAABJRU5ErkJggg==' readStream) readStream) nextImage ! ! !VideoFxMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:12'! includeInNewMorphMenu ^ false! ! VideoFxMorph subclass: #VfxBlurMorph instanceVariableNames: 'fxBlur' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxBlurMorph methodsFor: 'accessing' stamp: 'dmoc 5/16/2010 23:09'! processNewFrame: aForm | d f bits w outBits | enabled ifFalse: [^ aForm]. fxBlur = 0 ifTrue: [^ aForm]. d := aForm depth. f := aForm asFormOfDepth: 32. bits := f bits. " outBits := bits copy. " w := f width. fxBlur timesRepeat: [ " outBits := bits copy. " ScratchPlugin primBlur: bits into: bits width: w. " f bits: outBits. " ]. (d ~= 32) ifTrue: [f := f asFormOfDepth: d]. self incFramesProcessed. ^ f.! ! !VfxBlurMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 17:38'! getFxBlur ^ fxBlur! ! !VfxBlurMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 17:41'! setFxBlur: aNumber ((0 to: 100) includes: aNumber) ifFalse: [^ self]. fxBlur := aNumber. self updateBalloonText! ! !VfxBlurMorph methodsFor: 'initialization' stamp: 'dmoc 5/16/2010 17:41'! initialize super initialize. self setFxBlur: 0. ! ! !VfxBlurMorph methodsFor: 'private' stamp: 'dmoc 5/16/2010 17:42'! updateBalloonText self setBalloonText: 'fxBlur: ', fxBlur asString, ' (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxBlurMorph class instanceVariableNames: ''! !VfxBlurMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/16/2010 17:38'! initialize "VfxBlurMorph initialize" " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: self icon) forSymbol: self name. "! ! !VfxBlurMorph class methodsFor: 'misc' stamp: 'dmoc 5/16/2010 17:35'! icon ^ super icon! ! !VfxBlurMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:13'! includeInNewMorphMenu ^ true! ! !VfxBlurMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:44'! descriptionForPartsBin ^ self partName: 'fxBlur' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'blur effect' translatedNoop sampleImageForm: self icon! ! !VfxBlurMorph class methodsFor: 'scripting' stamp: 'dmoc 5/16/2010 23:06'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot blur 'Effect' Number readWrite Player getFxBlur Player setFxBlur:) )) ) ! ! VideoFxMorph subclass: #VfxBrightnessMorph instanceVariableNames: 'fxBrightness' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxBrightnessMorph methodsFor: 'accessing' stamp: 'dmoc 5/16/2010 22:58'! processNewFrame: aForm enabled ifFalse: [^ aForm]. fxBrightness = 0 ifTrue: [^ aForm]. ScratchPlugin primShiftBrightness: aForm bits into: aForm bits by: fxBrightness. self incFramesProcessed. ^ aForm.! ! !VfxBrightnessMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/11/2010 13:05'! getFxBrightness ^ fxBrightness! ! !VfxBrightnessMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 15:50'! setFxBrightness: aNumber ((-100 to: 100) includes: aNumber) ifFalse: [^ self]. fxBrightness := aNumber. self updateBalloonText.! ! !VfxBrightnessMorph methodsFor: 'initialization' stamp: 'dmoc 5/16/2010 16:05'! initialize super initialize. self setFxBrightness: 0. ! ! !VfxBrightnessMorph methodsFor: 'private' stamp: 'dmoc 5/16/2010 16:00'! updateBalloonText self setBalloonText: 'fxBrightness: ', fxBrightness asString, ' (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxBrightnessMorph class instanceVariableNames: ''! !VfxBrightnessMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/12/2010 17:51'! initialize "VfxBrightnessMorph initialize" " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: self icon) forSymbol: self name. "! ! !VfxBrightnessMorph class methodsFor: 'misc' stamp: 'dmoc 5/12/2010 17:49'! icon ^ super icon! ! !VfxBrightnessMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:13'! includeInNewMorphMenu ^ true! ! !VfxBrightnessMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:44'! descriptionForPartsBin ^ self partName: 'fxBrightness' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'control brightness.' translatedNoop sampleImageForm: self icon! ! !VfxBrightnessMorph class methodsFor: 'scripting' stamp: 'dmoc 5/11/2010 13:15'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot brightness 'Effect' Number readWrite Player getFxBrightness Player setFxBrightness:) )) ) ! ! VideoFxMorph subclass: #VfxColorTrackerMorph instanceVariableNames: 'trackerTolerance trackerColor trackerEnabled trackerXY trackerPoints' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxColorTrackerMorph methodsFor: 'accessing' stamp: 'dmoc 5/11/2010 13:12'! processNewFrame: form | f avx avy div | enabled ifFalse: [^ form]. avx := avy := div := 0. f := form. 0 to: f height by: 16 do: [:y | 0 to: f width by: 16 do: [:x | ((trackerColor diff: (f colorAt: x @ y)) < trackerTolerance) ifTrue: [ f colorAt: x @ y put: Color green. avx := avx + x. avy := avy + y. div := div + 1. ] ] ]. div = 0 ifTrue: [trackerXY := 0@0] ifFalse: [trackerXY := ((avx // div / f width) @ (avy // div / f height)) ]. trackerPoints := div. self incFramesProcessed. ^ f! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/9/2010 14:38'! defaultFloatPrecisionFor: aGetSelector (#(#getTrackerTolerance ) includes: aGetSelector) ifTrue: [^ 0.01]. (#(#getTrackerX #getTrackerY) includes: aGetSelector) ifTrue: [^ 0.001]. ^ super defaultFloatPrecisionFor: aGetSelector! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 13:33'! getTrackerColor ^ trackerColor! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 17:24'! getTrackerPoints ^ trackerPoints! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 13:34'! getTrackerTolerance ^ trackerTolerance! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 13:36'! getTrackerX ^ trackerXY x! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 13:36'! getTrackerY ^ trackerXY y! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/9/2010 18:02'! getWorldH ^ World height! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/9/2010 18:02'! getWorldW ^ World width! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 13:34'! setTrackerColor: aColor trackerColor := aColor! ! !VfxColorTrackerMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/3/2010 13:33'! setTrackerTolerance: aNumber trackerTolerance := aNumber! ! !VfxColorTrackerMorph methodsFor: 'initialization' stamp: 'dmoc 5/16/2010 16:06'! initialize super initialize. trackerColor := Color red. trackerTolerance := 0.1. trackerXY := 0@0. trackerPoints := 0. self updateBalloonText. ! ! !VfxColorTrackerMorph methodsFor: 'private' stamp: 'dmoc 5/16/2010 16:01'! updateBalloonText self setBalloonText: 'fxColorTracker (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxColorTrackerMorph class instanceVariableNames: ''! !VfxColorTrackerMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/12/2010 17:54'! initialize "VfxColorTrackerMorph initialize." " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: (super new) imageForm) forSymbol: self name. "! ! !VfxColorTrackerMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:14'! includeInNewMorphMenu ^ true! ! !VfxColorTrackerMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:44'! descriptionForPartsBin ^ self partName: 'fxColorTracker' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'Simple color tracker.' translatedNoop sampleImageForm: self icon! ! !VfxColorTrackerMorph class methodsFor: 'scripting' stamp: 'dmoc 5/13/2010 08:58'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot colorToTrack 'The color to track' Color readWrite Player getTrackerColor Player setTrackerColor:) (slot colorTolerance 'The tolerance of the track color' Number readWrite Player getTrackerTolerance Player setTrackerTolerance:) " (slot trackingEnabled 'Enable color tracking' Boolean readWrite Player getTrackerEnabled Player setTrackerEnabled:) " (slot colorTolerance 'The tolerance of the track color' Number readWrite Player getTrackerTolerance Player setTrackerTolerance:) (slot trackerX 'x position' Number readOnly Player getTrackerX Player unused) (slot trackerY 'y position' Number readOnly Player getTrackerY Player unused) (slot trackerPoints 'ignore Unmatched string quote ->' Number readOnly Player getTrackerPoints Player unused) " (slot worldWidth 'world width' Number readOnly Player getWorldW Player unused) (slot worldHeight 'world height' Number readOnly Player getWorldH Player unused) " )) ) ! ! VideoFxMorph subclass: #VfxFisheyeMorph instanceVariableNames: 'fxFisheye' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxFisheyeMorph methodsFor: 'accessing' stamp: 'dmoc 5/24/2010 08:57'! processNewFrame: aForm | bits outBits | enabled ifFalse: [^ aForm]. fxFisheye = 0 ifTrue: [^ aForm]. bits := aForm bits. outBits := bits copy. ScratchPlugin primFisheye: bits into: outBits width: (aForm width) power: (100 + fxFisheye). aForm bits: outBits. self incFramesProcessed. ^ aForm.! ! !VfxFisheyeMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 23:15'! getFxFisheye ^ fxFisheye! ! !VfxFisheyeMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/24/2010 08:57'! setFxFisheye: aNumber fxFisheye := aNumber. self updateBalloonText.! ! !VfxFisheyeMorph methodsFor: 'initialization' stamp: 'dmoc 5/16/2010 23:17'! initialize super initialize. self setFxFisheye: 0. ! ! !VfxFisheyeMorph methodsFor: 'private' stamp: 'dmoc 5/16/2010 23:18'! updateBalloonText self setBalloonText: 'fxFisheye: ', fxFisheye asString, ' (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxFisheyeMorph class instanceVariableNames: ''! !VfxFisheyeMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/16/2010 23:14'! initialize "VfxFisheyeMorph initialize" " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: self icon) forSymbol: self name. "! ! !VfxFisheyeMorph class methodsFor: 'misc' stamp: 'dmoc 5/16/2010 17:35'! icon ^ super icon! ! !VfxFisheyeMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:15'! includeInNewMorphMenu ^ true! ! !VfxFisheyeMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:44'! descriptionForPartsBin ^ self partName: 'fxFisheye' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'Fisheye effect' translatedNoop sampleImageForm: self icon! ! !VfxFisheyeMorph class methodsFor: 'scripting' stamp: 'dmoc 5/16/2010 23:14'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot fishEye 'Effect' Number readWrite Player getFxFisheye Player setFxFisheye:) )) ) ! ! VideoFxMorph subclass: #VfxHueMorph instanceVariableNames: 'fxHue' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxHueMorph methodsFor: 'accessing' stamp: 'dmoc 5/17/2010 16:32'! processNewFrame: aForm enabled ifFalse: [^ aForm]. fxHue = 0 ifTrue: [^ aForm]. ScratchPlugin primShiftHue: aForm bits into: aForm bits byDegrees: fxHue. self incFramesProcessed. ^ aForm.! ! !VfxHueMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/17/2010 16:28'! getFxHue ^ fxHue! ! !VfxHueMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/16/2010 17:35'! setFxBrightness: aNumber ((-100 to: 100) includes: aNumber) ifFalse: [^ self]. fxBrightness := aNumber. self updateBalloonText.! ! !VfxHueMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/17/2010 16:30'! setFxHue: degrees ((-360 to: 360) includes: degrees) ifFalse: [^ self]. fxHue := degrees. self updateBalloonText.! ! !VfxHueMorph methodsFor: 'initialization' stamp: 'dmoc 5/17/2010 16:30'! initialize super initialize. self setFxHue: 0. ! ! !VfxHueMorph methodsFor: 'private' stamp: 'dmoc 5/17/2010 16:33'! updateBalloonText self setBalloonText: 'fxHue: ', fxHue asString, ' (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxHueMorph class instanceVariableNames: ''! !VfxHueMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/17/2010 16:28'! initialize "VfxHueMorph initialize" " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: self icon) forSymbol: self name. "! ! !VfxHueMorph class methodsFor: 'misc' stamp: 'dmoc 5/16/2010 17:35'! icon ^ super icon! ! !VfxHueMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:15'! includeInNewMorphMenu ^ true! ! !VfxHueMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:45'! descriptionForPartsBin ^ self partName: 'fxHue' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'control hue.' translatedNoop sampleImageForm: self icon! ! !VfxHueMorph class methodsFor: 'scripting' stamp: 'dmoc 5/17/2010 16:27'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot hue 'Effect' Number readWrite Player getFxHue Player setFxHue:) )) ) ! ! VideoFxMorph subclass: #VfxSaturationMorph instanceVariableNames: 'fxSaturation' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxSaturationMorph methodsFor: 'accessing' stamp: 'dmoc 5/17/2010 16:39'! processNewFrame: aForm enabled ifFalse: [^ aForm]. fxSaturation = 0 ifTrue: [^ aForm]. ScratchPlugin primShiftSaturation: aForm bits into: aForm bits by: fxSaturation. self incFramesProcessed. ^ aForm.! ! !VfxSaturationMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/17/2010 16:40'! getFxSaturation ^ fxSaturation! ! !VfxSaturationMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/17/2010 16:41'! setFxSaturation: aNumber ((-100 to: 100) includes: aNumber) ifFalse: [^ self]. fxSaturation := aNumber. self updateBalloonText.! ! !VfxSaturationMorph methodsFor: 'initialization' stamp: 'dmoc 5/17/2010 16:42'! initialize super initialize. self setFxSaturation: 0. ! ! !VfxSaturationMorph methodsFor: 'private' stamp: 'dmoc 5/17/2010 16:42'! updateBalloonText self setBalloonText: 'fxSaturation: ', fxSaturation asString, ' (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxSaturationMorph class instanceVariableNames: ''! !VfxSaturationMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/17/2010 16:37'! initialize "VfxSaturationMorph initialize" " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: self icon) forSymbol: self name. "! ! !VfxSaturationMorph class methodsFor: 'misc' stamp: 'dmoc 5/16/2010 17:35'! icon ^ super icon! ! !VfxSaturationMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:15'! includeInNewMorphMenu ^ true! ! !VfxSaturationMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:45'! descriptionForPartsBin ^ self partName: 'fxSaturation' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'control Saturation.' translatedNoop sampleImageForm: self icon! ! !VfxSaturationMorph class methodsFor: 'scripting' stamp: 'dmoc 5/17/2010 16:38'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot saturation 'Effect' Number readWrite Player getFxSaturation Player setFxSaturation:) )) ) ! ! VideoFxMorph subclass: #VfxWhirlMorph instanceVariableNames: 'fxWhirl' classVariableNames: '' poolDictionaries: '' category: 'VideoFx'! !VfxWhirlMorph methodsFor: 'accessing' stamp: 'dmoc 5/17/2010 16:50'! processNewFrame: aForm | outBits | enabled ifFalse: [^ aForm]. fxWhirl = 0 ifTrue: [^ aForm]. outBits := aForm bits copy. ScratchPlugin primWhirl: aForm bits into: outBits width: aForm width angle: fxWhirl. aForm bits: outBits. self incFramesProcessed. ^ aForm.! ! !VfxWhirlMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/17/2010 16:46'! getFxWhirl ^ fxWhirl! ! !VfxWhirlMorph methodsFor: 'e-toy support' stamp: 'dmoc 5/17/2010 16:47'! setFxWhirl: degrees fxWhirl := degrees. self updateBalloonText.! ! !VfxWhirlMorph methodsFor: 'initialization' stamp: 'dmoc 5/17/2010 16:48'! initialize super initialize. self setFxWhirl: 0. ! ! !VfxWhirlMorph methodsFor: 'private' stamp: 'dmoc 5/17/2010 16:47'! updateBalloonText self setBalloonText: 'fxWhirl: ', fxWhirl asString, ' (', self enabledAsString, ')'. ! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! VfxWhirlMorph class instanceVariableNames: ''! !VfxWhirlMorph class methodsFor: 'class initialization' stamp: 'dmoc 5/17/2010 16:45'! initialize "VfxWhirlMorph initialize" " PartsBin cacheThumbnail: (Thumbnail new makeThumbnailFromForm: self icon) forSymbol: self name. "! ! !VfxWhirlMorph class methodsFor: 'misc' stamp: 'dmoc 5/16/2010 17:35'! icon ^ super icon! ! !VfxWhirlMorph class methodsFor: 'new-morph participation' stamp: 'dmoc 5/18/2010 14:16'! includeInNewMorphMenu ^ true! ! !VfxWhirlMorph class methodsFor: 'parts bin' stamp: 'dmoc 5/17/2010 19:45'! descriptionForPartsBin ^ self partName: 'fxWhirl' translatedNoop categories: {'WebCam' translatedNoop} documentation: 'control whirl.' translatedNoop sampleImageForm: self icon! ! !VfxWhirlMorph class methodsFor: 'scripting' stamp: 'dmoc 5/17/2010 16:45'! additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (#'effect' ( (slot whirl 'Effect' Number readWrite Player getFxWhirl Player setFxWhirl:) )) ) ! ! VfxBlurMorph initialize! VfxBrightnessMorph initialize! VfxColorTrackerMorph initialize! VfxFisheyeMorph initialize! VfxHueMorph initialize! VfxSaturationMorph initialize! VfxWhirlMorph initialize!