[Pkg] 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 Packages
mailing list