[etoys-dev] Etoys Inbox: Etoys-kfr.160.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Feb 2 17:27:06 EST 2014


A new version of Etoys was added to project Etoys Inbox:
http://source.squeak.org/etoysinbox/Etoys-kfr.160.mcz

==================== Summary ====================

Name: Etoys-kfr.160
Author: kfr
Time: 2 February 2014, 11:25:57 pm
UUID: 4c10efde-06d6-9048-aaa8-aaf79cc84d3e
Ancestors: Etoys-kfr.159

http://tracker.squeakland.org/browse/SQ-1146

=============== Diff against Etoys-kfr.158 ===============

Item was changed:
  ----- Method: CategoryViewer>>booleanPhraseFromPhrase: (in category 'support') -----
  booleanPhraseFromPhrase: phrase
  	"Answer, if possible, a boolean-valued phrase derived from the phrase provided"
  
  	|  retrieverOp retrieverTile |
  	(phrase isKindOf: ParameterTile orOf: FunctionTile) ifTrue: [^ phrase booleanComparatorPhrase].
  
  	phrase isBoolean ifTrue: [^ phrase].
+ 	"((scriptedPlayer respondsTo: #costume) 
+ 		and:[scriptedPlayer costume isInWorld not]) ifTrue: [^ Array new]." 
- 	((scriptedPlayer respondsTo: #costume) 
- 		and:[scriptedPlayer costume isInWorld not]) ifTrue: [^ Array new].
  
  	((phrase isMemberOf: PhraseTileMorph) and: [phrase submorphs size > 1] and: [#(bearingTo: distanceToPlayer:) includes: phrase submorphs second operatorOrExpression])
  		ifTrue:
  			[^ self booleanPhraseFromNumericGetterWithArgument: phrase].
  
  	((retrieverTile _ phrase submorphs last) isKindOf: TileMorph) ifFalse: [^ phrase].
  	retrieverOp _ retrieverTile operatorOrExpression.
  
  	(Vocabulary vocabularyForType: phrase resultType)
  		affordsCoercionToBoolean ifTrue: [
  			retrieverOp =  #getPatchValueIn: ifTrue: [
  				^ self booleanPhraseForGetPatchValueOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp =  #getRedComponentIn: ifTrue: [
  				^ self booleanPhraseForGetColorComponentOfType: phrase resultType componentName: #red  retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp =  #getGreenComponentIn: ifTrue: [
  				^ self booleanPhraseForGetColorComponentOfType: phrase resultType componentName: #green  retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp =  #getBlueComponentIn: ifTrue: [
  				^ self booleanPhraseForGetColorComponentOfType: phrase resultType componentName: #blue retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp = #getUphillIn: ifTrue: [
  				^ self booleanPhraseForGetUpHillOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp = #getDistanceTo: ifTrue: [
  				^ self booleanPhraseForGetDistanceToOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp = #getAngleTo: ifTrue: [
  				^ self booleanPhraseForGetAngleToOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			].
  			retrieverOp = #bounceOn: ifTrue: [
  				^ self booleanPhraseForBounceOnOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			].
  "			(retrieverOp = #bounceOn:color: or: [retrieverOp = #bounceOnColor:]) ifTrue: [
  				^ self booleanPhraseForBounceOnColorOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			]."
  			"retrieverOp = #getTurtleAt: ifTrue: [
  				^ self booleanPhraseForGetTurtleAtOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			]."
  			retrieverOp = #getTurtleOf: ifTrue: [
  				^ self booleanPhraseForGetTurtleOfOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  			].
  
  			^ self booleanPhraseForRetrieverOfType: phrase resultType retrieverOp: retrieverOp player: phrase actualObject.
  
  		].
  	^ phrase!

Item was changed:
  ----- Method: GraphMorph class>>additionsToViewerCategories (in category '*eToys-scripting') -----
  additionsToViewerCategories
  	"Answer a list of (<categoryName> <list of category specs>) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories."
  
  	^ #(
  
  	(basic (
  (slot cursor 	'The current cursor location, wrapped back to the beginning if appropriate' Number	 readWrite Player getGraphCursor Player setCursorWrapped:)
  
  (slot sampleAtCursor	'The sample value at the current cursor location' Number readWrite Player getSampleAtCursor Player setSampleAtCursor:)))
  
  	(sampling (
  (slot cursor 	'The current cursor location, wrapped back to the beginning if appropriate' Number	 readWrite Player getCursor Player setCursorWrapped:)
  (slot sampleAtCursor	'The sample value at the current cursor location' Number readWrite Player getSampleAtCursor Player setSampleAtCursor:)
  (slot lastValue 'The last value obtained' Number readWrite	Player getLastValue Player setLastValue:)
+ (slot samplingRate '11025, 22050, 44100' SamplingRate readWrite Player getSamplingRate Player setSamplingRate:)
  (command clear 'Clear the graph of current contents')
  (command loadSineWave 'Load a sine wave as the current graph')
  (command loadSound: 'Load the specified sound into the current graph' Sound)
  (command reverse 'Reverse the graph')
+ (command playFromCursorTo: 'Play the current graph as a sound' Number)
+ (slot count 'How many elements are within me' Number readOnly Player getCount unused unused)
  (command play 'Play the current graph as a sound'))))!

Item was changed:
  ----- Method: KedamaExamplerPlayer>>addInstanceVarNamed:withValue: (in category 'player protocol') -----
  addInstanceVarNamed: aName withValue: aValue
  
  	self basicAddInstanceVarNamed: aName withValue: aValue.
  	"turtles _ kedamaWorld turtlesOf: self."
+ 	turtles addInstanceVarNamed: aName withValue: aValue.
- 	turtles addInstanceVarVectorNamed: aName withValue: aValue.
  !

Item was changed:
  ----- Method: KedamaPatchType>>initialValueForASlotFor: (in category 'tile protocol') -----
  initialValueForASlotFor: aPlayer
  	"Answer the value to give initially to a newly created slot of the given type in the given player"
  
+ 	^ aPlayer kedamaWorld defaultPatch!
- 	^ aPlayer costume renderedMorph defaultPatch.!

Item was changed:
  ----- Method: KedamaTurtleVectorPlayer2>>addInstanceVarNamed:withValue: (in category 'player protocol') -----
  addInstanceVarNamed: aName withValue: aValue
  
  	| newArray |
+ 	newArray := self arrayForType: aValue.
+ 	
+ 	arrays := arrays,(Array with: newArray).
+ 	newArray atAllPut: aValue.
- 	(aValue isKindOf: Number) ifTrue: [
- 		newArray _ KedamaFloatArray new: self size.
- 	].
- 	(aValue isKindOf: Color) ifTrue: [
- 		newArray _ WordArray new: self size.
- 	].
- 	(aValue isKindOf: Player) ifTrue: [
- 		newArray _ Array new: self size.
- 	].
- 
- 	arrays _ arrays, newArray.
  	info at: aName asSymbol put: arrays size.
+ 	types at: arrays size put: aValue
+ 
+ 
+ 	
  !

Item was changed:
  ----- Method: KeyPressMorph class>>descriptionForPartsBin (in category 'parts bin') -----
  descriptionForPartsBin
  	^ self
+ 		partName: 'Key press' translatedNoop
+ 		categories: {'Just for Fun' translatedNoop}
+ 		documentation: 'An object that tells you when a specific key has been pressed.' translatedNoop
- 		partName: 'Key press'
- 		categories: #('Just for Fun' )
- 		documentation: 'An object that tells you when a specific key has been pressed.'
  !

Item was changed:
  ----- Method: MethodMorph>>initialize (in category 'initialization') -----
  initialize
  	"initialize the state of the receiver"
  	super initialize.
+ 	!
- 	self useRoundedCorners!

Item was added:
+ ----- Method: ModifyVariableDialogMorph>>chooseType (in category 'accessing') -----
+ chooseType
+ 	(self targetPlayer okayToRemoveSlotNamed: slot) ifFalse:
+ 		[^ self inform: ('Sorry, {1} is in
+ use in a script.' translated format: {slot})].
+ 	super chooseType!

Item was changed:
  ----- Method: NewVariableDialogMorph>>rebuild (in category 'build') -----
  rebuild
+ 	| buttonColor itsName enableDecimalPlaces |
- 	| buttonColor itsName aBoolean |
  	self removeAllMorphs.
  	self addAColumn: {
  		self lockedString: self title.
  	}.
  	self addSeparator.
  
  	self addARow: {
  		self inAColumn: {
  			(self addARow: {
  				self lockedString: 'Name:' translated.
  				self spacer.
  				varNameText := self newTextMorph 
  										contentsWrapped: self varName;
  										selectAll;
  										crAction: (MessageSend
  											receiver: self
  											selector: #doAccept);
  										yourself
  			}) cellPositioning: #center.
+ 			self inAColumn: {
+ 								(self addARow: {
+ 									self lockedString: 'Type:' translated.
+ 									self spacer.
+ 									varTypeButton := self buildVarTypeButton
+ 								}) cellPositioning: #center.
+ 								} named: #varType.
- 			(self addARow: {
- 				self lockedString: 'Type:' translated.
- 				self spacer.
- 				varTypeButton := self buildVarTypeButton
- 			}) cellPositioning: #center.
  		}
  	}.
  	ActiveWorld activeHand newKeyboardFocus: varNameText.
  	self addSeparator.
  	self addDecimalPlaces.
+ 	enableDecimalPlaces := false.
- 	aBoolean := false.
  	(#(#Number #Point) includes: self varType)
+ 		ifTrue: [ enableDecimalPlaces := true].
- 		ifTrue: [ aBoolean := true].
  	self allMorphsDo: [ :each |
  				itsName := each knownName. 
  				(#(decimalPlaces) includes: itsName) ifTrue:
+ 							[self enable: each when: enableDecimalPlaces]].
- 							[self enable: each when: aBoolean]].
  
+ 	
  
+ 
  	buttonColor := self color lighter.
  	self addARow: {
  		self inAColumn: {
  			(self addARow: {
  				self 
  					buttonNamed: 'Accept' translated action: #doAccept color: buttonColor
  					help: 'keep changes made and close panel' translated.
  				self 
  					buttonNamed: 'Cancel' translated action: #doCancel color: buttonColor
  					help: 'cancel changes made and close panel' translated.
  			}) listCentering: #center
  		}
  	}
  !

Item was added:
+ ----- Method: Object>>hasUserDefinedScripts (in category '*Etoys-viewer') -----
+ hasUserDefinedScripts
+ 	"Answer whether the receiver has any user-defined scripts, in the omniuser sense of the term.  This is needed to allow Viewers to look at any object, not just at Players."
+ 
+ 	^ false!

Item was added:
+ ----- Method: Player>>getBlur (in category 'sketch filters') -----
+ getBlur
+ 	^ self getFilterValue: #blur:form:!

Item was added:
+ ----- Method: Player>>getBrightnessShift (in category 'sketch filters') -----
+ getBrightnessShift
+ 	^ self getFilterValue: #brightnessShift:form:!

Item was added:
+ ----- Method: Player>>getFilterValue: (in category 'sketch filters') -----
+ getFilterValue: aFilter
+ 	self costume renderedMorph isSketchMorph ifFalse:[^0].
+ 	 self costume renderedMorph filters
+ 		do: [:i | (i includes: aFilter)
+ 				ifTrue: [^i second]].
+ 	^0!

Item was added:
+ ----- Method: Player>>getFishEye (in category 'sketch filters') -----
+ getFishEye
+ 	^ self getFilterValue: #fishEye:form:!

Item was added:
+ ----- Method: Player>>getHueShift (in category 'sketch filters') -----
+ getHueShift
+ 	^ self getFilterValue: #hueShift:form:!

Item was added:
+ ----- Method: Player>>getSaturationShift (in category 'sketch filters') -----
+ getSaturationShift
+ 	^ self getFilterValue: #saturationShift:form:!

Item was added:
+ ----- Method: Player>>getWhirl (in category 'sketch filters') -----
+ getWhirl
+ 	^ self getFilterValue: #whirl:form:!

Item was changed:
  ----- Method: Player>>includeAtCursor: (in category 'scripts-standard') -----
  includeAtCursor: aPlayer 
  	"Add aPlayer to the list of objects logically 'within' me, at my current cursor position. ."
  
  	| aCostume |
  	(aPlayer isNil or: [aPlayer == self]) ifTrue: [^self].
  	(aPlayer isText or: [aPlayer isString]) 
  		ifTrue: 
  			[^ self costume class == TextFieldMorph 
  				ifTrue: [self costume append: aPlayer]
  				ifFalse: [self]].
  	aCostume := self costume topRendererOrSelf.
- 	aPlayer costume goHome.	"assure it's in view"
  	(aCostume isKindOf: PasteUpMorph) 
  		ifTrue:
  			[aCostume addMorph: aPlayer costume asElementNumber: self getCursor.
  			aCostume updateSubmorphThumbnails]  "also forces redraw"
  		ifFalse:
  			[aCostume addMorphBack: aPlayer.
+ 			self setCursor: aCostume submorphs size].
+ 	aPlayer costume goHome.	"assure it's in view"
+ !
- 			self setCursor: aCostume submorphs size]!

Item was added:
+ ----- Method: Player>>kedamaWorld (in category 'slot-kedama') -----
+ kedamaWorld
+   ^ActiveWorld findDeeplyA: KedamaMorph
+ 	!

Item was added:
+ ----- Method: Player>>removeFilters (in category 'sketch filters') -----
+ removeFilters
+ 	self sendMessageToCostume: #removeFilters!

Item was added:
+ ----- Method: Player>>setBlur: (in category 'sketch filters') -----
+ setBlur: aNumber
+ 	| number |
+ 	self costume renderedMorph isSketchMorph ifFalse:[^nil].
+ 	number := aNumber asInteger min:100 max:0.
+ 	self sendMessageToCostume: #filtersAdd: with: { #blur:form: . number}!

Item was added:
+ ----- Method: Player>>setBrightnessShift: (in category 'sketch filters') -----
+ setBrightnessShift: aNumber
+ 	| number |
+ 	self costume renderedMorph isSketchMorph ifFalse:[^nil].
+ 	number := aNumber asInteger min:100 max:-100.
+ 	self sendMessageToCostume: #filtersAdd: with: { #brightnessShift:form: . number}!

Item was added:
+ ----- Method: Player>>setFishEye: (in category 'sketch filters') -----
+ setFishEye: aNumber
+ 	| number |
+ 	self costume renderedMorph isSketchMorph ifFalse:[^nil].
+ 	number := aNumber asInteger  max:-10.
+ 	self sendMessageToCostume: #filtersAdd: with: { #fishEye:form: . number}!

Item was added:
+ ----- Method: Player>>setHueShift: (in category 'sketch filters') -----
+ setHueShift: aNumber 
+ 	| number |
+ 	self costume renderedMorph isSketchMorph ifFalse:[^nil].
+ 	number := aNumber asInteger min:360 max:-360.
+ 	self sendMessageToCostume: #filtersAdd: with: {#hueShift:form:. number}!

Item was added:
+ ----- Method: Player>>setSaturationShift: (in category 'sketch filters') -----
+ setSaturationShift: aNumber
+ 	| number |
+ 	self costume renderedMorph isSketchMorph ifFalse:[^nil].
+ 	number := aNumber asInteger min:100 max:-100.
+ 	self sendMessageToCostume: #filtersAdd: with: { #saturationShift:form: . number}!

Item was added:
+ ----- Method: Player>>setWhirl: (in category 'sketch filters') -----
+ setWhirl: aNumber
+ 	| number |
+ 	self costume renderedMorph isSketchMorph ifFalse:[^nil].
+ 	number := aNumber truncated.
+ 	self sendMessageToCostume: #filtersAdd: with: { #whirl:form: . number}!

Item was added:
+ ----- Method: SketchMorph class>>additionsToViewerCategoryGraphicsFilters (in category '*eToys-scripting') -----
+ additionsToViewerCategoryGraphicsFilters
+ 	"Answer a list of (<categoryName> <list of category specs>) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories."
+ 
+ 	^ #(
+ #'graphics filters' 
+ (
+ (slot hueShift 'Shift the hue of the pictures colors. -360 to 360' Number readWrite Player getHueShift Player setHueShift:)
+ (slot brightnessShift 'Shift the brightness of the picture. -100 to 100' Number readWrite Player getBrightnessShift Player setBrightnessShift:)
+ (slot saturationShift 'Shift the saturation of the pictures colors. -100 to 100' Number readWrite Player getSaturationShift Player setSaturationShift:)
+ (slot blur 'Blur the picture. 1 to 10' Number readWrite Player getBlur Player setBlur:)
+ (slot fishEye 'Make a fish eye effect on the picture. -10 and up' Number readWrite Player getFishEye Player setFishEye:)
+ (slot whirl 'Make a whirl effect on the picture.' Number readWrite Player getWhirl Player setWhirl:)
+ (command removeFilters 'Remove the picture filters' )
+ ))
+ 
+ 
+ !



More information about the etoys-dev mailing list