[squeak-dev] The Trunk: MorphicExtras-tpr.209.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Aug 3 00:54:22 UTC 2017


tim Rowledge uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-tpr.209.mcz

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

Name: MorphicExtras-tpr.209
Author: tpr
Time: 2 August 2017, 5:53:29.922577 pm
UUID: 7ad502c6-49bf-4866-886b-e9e5369b003b
Ancestors: MorphicExtras-tpr.208

tiny changes to the init of Hygrometer and Thermomemter dials

=============== Diff against MorphicExtras-tpr.208 ===============

Item was changed:
  ----- Method: HygrometerDialMorph>>initialize (in category 'initialize-release') -----
  initialize
  	"Build a hygrometer. The background is an ImageMorph showing a dial derived from the same general principles as the BarometerMorph. "
  	| pointerMorph |
  	super initialize.
  	
  	self startAngle: -140 stopAngle: 140;
+ 		startValue: 0 stopValue: 100.
- 		startValue: 25 stopValue: 100.
  	self extent: 200 at 200; color: Color transparent; borderWidth: 0.
  	dialCenter := self center.
  	
  	self buildDial.
  
  	"build our fancy needle as an ImageMorph, set the position to horizontal centre and about 2/3 down so that it rotates about that point when inside the TransformationMorph"
  	pointerMorph := self fancyNeedleOfLength: (self height * 0.65) rounded.
   	pointerMorph position: pointerMorph extent * ( -0.5@ -0.65).
  
  	"we keep track of the TransformationMorph since that is what we have to rotate as the incoming pressure values change"
  	needleMorph := TransformationMorph new position: dialCenter; addMorph: pointerMorph.
  	self addMorph: needleMorph.
  
  	"add a central colored dot. Because we just do."
  	self addMorph: (CircleMorph new extent: 20 at 20; color: Color black; center: dialCenter)
  !

Item was changed:
  ----- Method: ThermometerDialMorph>>buildDial (in category 'dial drawing') -----
  buildDial
  	"start by making a damn big Form, twice the size we want to end up with"
  	|outerRadius destForm canvas tickLabel tickLength beginAngle endAngle tickAngle tickLabelSize maxTicks |
  	outerRadius := self height  - 1.
  	destForm := Form extent: self extent * 2 depth: 32.
  	(canvas := destForm getCanvas) fillOval: (0 at 0 extent: self extent * 2) color: Color white.
  	"outer ring"
  	self drawArcAt: destForm center radius: outerRadius thickness: 1 color: Color black beginAngle: 0 endAngle: 360 onForm: destForm.
  	"inner ring"
  	self drawArcAt: destForm center radius: outerRadius * 0.97 thickness: 1 color: Color black beginAngle: 0 endAngle: 360 onForm: destForm.
  	
  	"outer scale for Fahrenheit"
  	beginAngle := startAngle -360. "needs cleaning up about this"
  	endAngle := stopAngle.
  	
  	self drawArcAt: destForm center radius: outerRadius * 0.8 thickness: 1 color: Color black beginAngle:beginAngle endAngle: stopAngle onForm: destForm.
  	self drawArcAt: destForm center radius: outerRadius * 0.73 thickness: 1 color: Color black beginAngle:beginAngle endAngle: stopAngle onForm: destForm.
+ 
- 	"The Fahrenheit values of our range are 
- 	startValue -5/ 5 * 9 + 32 ->23
- 	stopValue 30 / 5 * 9 + 32 -> 86
- 	which is very conveniently integral but sadly it corresponds to 4.44444 deg per ... degree."
  	maxTicks := stopValue - startValue  / 5 * 9 .
  	tickAngle := endAngle - beginAngle / maxTicks.
  	(startValue / 5 * 9 +32) to: (stopValue / 5 * 9 +32) do: [:tick|
  	tickLength := outerRadius * 0.07.
  		tickLabel := nil.
  		tick \\ 10 = 0 ifTrue: [
  			tickLabel := tick asString.
  			tickLabelSize := 24
  		] ifFalse: [
  			tick \\ 2 = 0 ifTrue:[
  				tickLabel := (tick \\ 10) asString.
  				tickLabelSize := 18
  			] ifFalse: [
  				tickLength := tickLength * 2
  			]
  		].
  		self drawTickRadius: outerRadius * 0.73 length: tickLength thickness: 2 color: Color black angle:  beginAngle + (tick - (startValue / 5 * 9 +32) * tickAngle) onCanvas: canvas.
  		self tickLabel: tickLabel fontSize: tickLabelSize color: Color black centeredAt: dialCenter radius: (outerRadius * 0.73) + tickLength angle: beginAngle + (tick - (startValue / 5 * 9 +32) * tickAngle) onCanvas: canvas.
  	].
  
  	self tickInnerLabel: (String with: (Unicode value: 16rB0) with: $C) fontSize: 36 color: Color black centeredAt: dialCenter radius: (outerRadius * 0.73) angle: 180 onCanvas: canvas.
  	
  	"inner scale for Celsius"
  	beginAngle := startAngle -360. "needs cleaning up about this"
  	endAngle := stopAngle.
  	
  	self drawArcAt: destForm center radius: outerRadius * 0.71 thickness: 1 color: Color black beginAngle:beginAngle endAngle: stopAngle onForm: destForm.
  	self drawArcAt: destForm center radius: outerRadius * 0.63 thickness: 1 color: Color black beginAngle:beginAngle endAngle: stopAngle onForm: destForm.
  	maxTicks := stopValue - startValue.
  	tickAngle := endAngle - beginAngle / maxTicks.
  	tickLength := outerRadius * 0.07.
  	startValue to: stopValue do: [ :tick ||tickThickness|
  		tickLabel := nil.
  		tick \\ 5 = 0 ifTrue: [
  			tickLabelSize := 20.
  			tickThickness := 3.
  			tickLabel :=  tick asString.
  		] ifFalse: [
  			tickThickness := 2.
  		].
  		self drawTickRadius: outerRadius * 0.63 length: tickLength thickness: tickThickness color: Color black angle:  beginAngle + (tick - startValue * tickAngle) onCanvas: canvas.
  		self tickInnerLabel: tickLabel fontSize: tickLabelSize color: Color black centeredAt: dialCenter radius: (outerRadius * 0.63) angle: beginAngle + (tick - startValue * tickAngle) onCanvas: canvas.
  
  	].
  
  	self tickLabel: (String with: (Unicode value: 16rB0) with: $F)  fontSize: 36 color: Color black centeredAt: dialCenter radius: (outerRadius * 0.73) angle: 180 onCanvas: canvas.
  	
  	self addMorph: (destForm magnify: destForm boundingBox by: 0.5 smoothing: 2) asMorph!

Item was changed:
  ----- Method: ThermometerDialMorph>>initialize (in category 'initialize-release') -----
  initialize
  	"Build a thermometer. The background is an ImageMorph showing a dial derived from the same general principles as the BarometerMorph. 
  	The temperature scale is fixed for now at -5C to 30C but ought to be parameterised someday. We'll have the Celcius scale as the inner and a conversion to Fahrenheit as the outer"
  	| pointerMorph |
  	super initialize.
  	
  	self startAngle: -140 stopAngle: 140;
+ 		startValue: -10 stopValue: 35.
- 		startValue: -5 stopValue: 30.
  	self extent: 200 at 200; color: Color transparent; borderWidth: 0.
  	dialCenter := self center.
  	
  	self buildDial.
  
  	"build our fancy needle as an ImageMorph, set the position to horizontal centre and about 2/3 down so that it rotates about that point when inside the TransformationMorph"
  	pointerMorph := self fancyNeedleOfLength: (self height * 0.65) rounded.
   	pointerMorph position: pointerMorph extent * ( -0.5@ -0.65).
  
  	"we keep track of the TransformationMorph since that is what we have to rotate as the incoming pressure values change"
  	needleMorph := TransformationMorph new position: dialCenter; addMorph: pointerMorph.
  	self addMorph: needleMorph.
  
  	"add a central colored dot. Because we just do."
  	self addMorph: (CircleMorph new extent: 20 at 20; color: Color black; center: dialCenter)
  !



More information about the Squeak-dev mailing list