[etoys-dev] Etoys: Morphic-kfr.82.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Mar 5 15:04:26 EST 2012
Karl Ramberg uploaded a new version of Morphic to project Etoys:
http://source.squeak.org/etoys/Morphic-kfr.82.mcz
==================== Summary ====================
Name: Morphic-kfr.82
Author: kfr
Time: 5 March 2012, 9:03:03 pm
UUID: f9891cac-5355-ee47-86fb-f69e5deeba55
Ancestors: Morphic-kfr.81
Change Set: graphingFixes-sw
Date: 4 March 2012
Author: Scott Wallace
Addresses various bug-reports and recommendations relating to recent number-line and graph-paper updates:
- Enforce reasonable ranges for the sliders governing the grid parameters, taking the grid-size, coarse-grid-size , and playfield dimensions into account.
- Provide a button to request 'graph paper' from the 'generic property sheet' when appropriate.
- Retain position of number line when its pixelsPerUnit changes.
- Disable the 'offset' when coarse-grid in effect.
- Protect sliders against zero-divide that can happen if minVal = maxVal.
- Protect InfiniteForms against incidental calls to #darker and #twiceDarker that can be sent to any object's fillStyle by some of the custom border code.
- Removes about a dozen superfluous methods that had mistakenly lingered in the earlier updates, and removes three inst vars of NumberLineMorph that were remnants from earlier code
=============== Diff against Morphic-kfr.81 ===============
Item was changed:
----- Method: GraphPaperPanel>>adjustOffset: (in category 'adjusting parameters') -----
adjustOffset: aFractionalPoint
"Adjust the offset to reflect the value embodied in the argument supplied."
+ | constrained |
+ constrained := aFractionalPoint min: (1 @ 1) max: (-1 @ -1).
+ offset := (constrained * self gridEvery asPoint) rounded.
- offset := (aFractionalPoint * self extent) rounded.
self showSliderFeedback: offset.
self makeToolReflectCurrentSettings!
Item was changed:
----- Method: GraphPaperPanel>>darkerGridEvery: (in category 'accessing') -----
darkerGridEvery: aNumber
"Set the value of darkerGridEvery."
darkerGridEvery := aNumber rounded.
+ self harmonizeGridEvery.
self makeToolReflectCurrentSettings!
Item was changed:
----- Method: GraphPaperPanel>>doEnables (in category 'private') -----
doEnables
"Carry out appropriate enablings within the receiver's interior."
+ | itsName existing |
+ existing := darkerGridEvery.
+ self harmonizeCoarseGrid.
+ existing = darkerGridEvery ifFalse:
+ [self makeToolReflectCurrentSettings].
+
- | itsName |
self allMorphsDo: [ :each |
itsName := each knownName.
(#(pickerForDarkerGrid darkerGridEvery) includes: itsName) ifTrue:
+ [self enable: each when: self showDarkerGridAlso].
+ (#(offset) includes: itsName) ifTrue:
+ [self enable: each when: true]]!
- [self enable: each when: self showDarkerGridAlso]]!
Item was changed:
----- Method: GraphPaperPanel>>gridEvery: (in category 'accessing') -----
gridEvery: aNumber
"Set the value of gridEvery"
gridEvery := aNumber rounded.
+ self harmonizeCoarseGrid.
self makeToolReflectCurrentSettings!
Item was added:
+ ----- Method: GraphPaperPanel>>harmonizeCoarseGrid (in category 'adjusting parameters') -----
+ harmonizeCoarseGrid
+ "The pixelsPerUnit having changed, reconsider 'darkerGridEvery' and the slider that governs it."
+
+ | aSlider maxGridEvery |
+ maxGridEvery := self maxValueForCoarseGrid.
+ darkerGridEvery := darkerGridEvery min: maxGridEvery max: 2.
+ aSlider := self deepSubpartNamed: #darkerGridEverySlider.
+ aSlider ifNotNil:
+ [aSlider setMaxVal: maxGridEvery.
+ aSlider adjustToValue: darkerGridEvery]
+
+ !
Item was added:
+ ----- Method: GraphPaperPanel>>harmonizeGridEvery (in category 'adjusting parameters') -----
+ harmonizeGridEvery
+ "Other metrics having possibly changed, make sure the gridEvery variable is within range and that its slider offers a reasonable range of values."
+
+ | aSlider maxGridEvery |
+ maxGridEvery := self maxValueForGridEvery.
+ gridEvery := gridEvery min: maxGridEvery max: 10.
+ aSlider := self deepSubpartNamed: #gridEverySlider.
+ aSlider ifNotNil:
+ [aSlider setMaxVal: maxGridEvery.
+ aSlider adjustToValue: gridEvery]
+
+ !
Item was changed:
----- Method: GraphPaperPanel>>initialize (in category 'initialization') -----
initialize
"Initialize the receiver. Notice that, because of GenericPropertiesMorph's custom, 'myTarget' is already set before this is called."
| existing toUse |
super initialize.
existing := myTarget renderedMorph valueOfProperty: #graphPaperParameters.
toUse := existing
ifNotNil:
[existing deepCopy]
ifNil:
[GraphPaperParameters new].
backgroundColor := existing
ifNotNil:
[toUse backgroundColor]
ifNil:
[myTarget color asColor].
gridColor := toUse gridColor.
gridEvery := toUse gridEvery.
showDarkerGridAlso := toUse showDarkerGridAlso.
darkerGridColor := toUse darkerGridColor.
darkerGridEvery := toUse darkerGridEvery.
+ offset := toUse showDarkerGridAlso ifTrue: [toUse offset] ifFalse: [0 @ 0].
- offset := toUse offset.
thingsToRevert at: #fillStyle: put: myTarget fillStyle.
self rebuild.
self makeToolReflectCurrentSettings
!
Item was added:
+ ----- Method: GraphPaperPanel>>maxValueForCoarseGrid (in category 'adjusting parameters') -----
+ maxValueForCoarseGrid
+ "Given the pixelsPerUnit and the dimensions of my target, determine and answer a plausible maximum value for the coarse-grid multiplier."
+
+ | maxDimension |
+ maxDimension := myTarget width max: myTarget height.
+ ^ ((maxDimension // gridEvery) - 1) max: 2!
Item was added:
+ ----- Method: GraphPaperPanel>>maxValueForGridEvery (in category 'adjusting parameters') -----
+ maxValueForGridEvery
+ "Answer the largest plausible value for gridEvery"
+
+ | maxDimension |
+ maxDimension := myTarget width max: myTarget height.
+ ^ self showDarkerGridAlso
+ ifTrue:
+ [maxDimension // darkerGridEvery]
+ ifFalse:
+ [(maxDimension - 1) max: 10]!
Item was changed:
----- Method: GraphPaperPanel>>paneForDarkerGridEvery (in category 'panes') -----
paneForDarkerGridEvery
"Answer a pane for the darkerGridEvery datum."
| aSlider |
aSlider := SimpleSliderMorph new
color: color darker;
extent: 100 at 28;
target: self;
minVal: 2;
maxVal: 40;
actionSelector: #darkerGridEvery:;
+ setNameTo: #darkerGridEverySlider;
adjustToValue: self darkerGridEvery.
^ (self inARow: {
(UpdatingStringMorph new)
getSelector: #darkerGridEvery;
putSelector: #darkerGridEvery:;
target: self;
growable: false;
decimalPlaces: 0;
minimumWidth: 40;
maximumWidth: 40;
yourself.
aSlider}) setNameTo: #darkerGridEvery; yourself!
Item was changed:
----- Method: GraphPaperPanel>>paneForGridEvery (in category 'panes') -----
paneForGridEvery
"Answer a pane to govern the gridEvery datum."
| aSlider |
aSlider := SimpleSliderMorph new
color: color darker;
extent: 100 at 28;
target: self;
minVal: 4;
maxVal: 360;
actionSelector: #gridEvery:;
+ setNameTo: #gridEverySlider;
adjustToValue: self gridEvery.
^ self inARow: {
self lockedString: ('grid size' translated, ' ').
(UpdatingStringMorph new)
getSelector: #gridEvery;
putSelector: #gridEvery:;
target: self;
growable: false;
decimalPlaces: 0;
minimumWidth: 40;
maximumWidth: 40;
yourself.
aSlider}!
Item was changed:
----- Method: GraphPaperPanel>>paneForOffset (in category 'panes') -----
paneForOffset
"Answer a pane for the Offset button."
+ | aPane |
+ aPane := (self inARow: {
- ^ (self inARow: {
self
buildFakeSlider: 'Offset' translated
selector: #adjustOffset:
help: 'Drag in here to change the offset' translated
+ }) hResizing: #shrinkWrap.
+ aPane setNameTo: #offset.
+ ^ aPane
- }) hResizing: #shrinkWrap
!
Item was changed:
----- Method: GraphPaperPanel>>toggleShowDarkerGridAlso (in category 'adjusting parameters') -----
toggleShowDarkerGridAlso
"Toggle whether a secondary grid should be shown."
showDarkerGridAlso := self showDarkerGridAlso not.
+ showDarkerGridAlso ifTrue: [offset := 0].
self rebuild.
self doEnables.
self makeToolReflectCurrentSettings!
Item was added:
+ ----- Method: Morph>>deepSubpartNamed: (in category 'accessing') -----
+ deepSubpartNamed: aName
+ "Answer, from anywhere in the morph tree beneath the receiver, a subpart of the given name -- nil if none."
+
+ ^ self allMorphs detect: [:m | m externalName = aName] ifNone: [nil]!
Item was added:
+ ----- Method: Morph>>wantsGraphPaperAlternative (in category 'testing') -----
+ wantsGraphPaperAlternative
+ "Answer whether the receiver woud be willing to adopt graph paper as a fill style."
+
+ ^ false!
Item was added:
+ ----- Method: PasteUpMorph>>wantsGraphPaperAlternative (in category 'testing') -----
+ wantsGraphPaperAlternative
+ "Answer whether the receiver woud be willing to adopt graph paper as a fill style."
+
+ ^ true!
More information about the etoys-dev
mailing list