Christoph Thiede uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-ct.2042.mcz
==================== Summary ====================
Name: Morphic-ct.2042
Author: ct
Time: 13 September 2022, 12:56:21.695245 pm
UUID: a7bc1e43-0ab0-ae4a-86e0-a5b567be9252
Ancestors: Morphic-ct.2041
Improves high-dpi support for sliders. Scroll bars were already high-dpi-sensitive and are not affected by this change.
=============== Diff against Morphic-ct.2041 ===============
Item was changed:
----- Method: Slider>>defaultBounds (in category 'initialization') -----
defaultBounds
"answer the default bounds for the receiver"
+ ^ 0 @ 0 corner: 16 px @ 100 px!
- ^ 0 @ 0 corner: 16 @ 100!
Item was changed:
----- Method: Slider>>sliderThickness (in category 'geometry') -----
sliderThickness
+ ^ 7 px!
- ^ 7!
Christoph Thiede uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-ct.2041.mcz
==================== Summary ====================
Name: Morphic-ct.2041
Author: ct
Time: 13 September 2022, 12:21:12.708695 pm
UUID: a8ebbbd7-0bfd-9241-8a0d-9bed28da4251
Ancestors: Morphic-ct.2039
Adds an optimization to TransformationMorph>>#extent: that also helps to avoid layout divergence/ever-shrinkage in TransformationMorphs with odd extents for now. Besides this patch, we should still consider a "preciseExtent" solution as described in the referenced issue.
=============== Diff against Morphic-ct.2039 ===============
Item was changed:
----- Method: TransformationMorph>>extent: (in category 'geometry') -----
extent: newExtent
+ "Optimization (see super). ct: Currently also used as a backstop to avoid layout divergence for odd extents caused by rounding errors for the bounds. In the future, we might want to try to remember the precise bounds in the receiver. See: http://lists.squeakfoundation.org/pipermail/squeak-dev/2022-August/221968.h…"
+ self extent = newExtent ifTrue: [^ self].
+
self renderedMorph == self
ifTrue: [super extent: newExtent]
ifFalse: [
self adjustAfter: [
| scaleFactor |
scaleFactor := (self scale * newExtent r / self fullBounds extent r) max: 0.1.
self scale: (scaleFactor detentBy: 0.1 atMultiplesOf: 1.0 snap: false)]].!
Christoph Thiede uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-ct.332.mcz
==================== Summary ====================
Name: MorphicExtras-ct.332
Author: ct
Time: 13 September 2022, 10:43:26.542293 am
UUID: b8569da9-9d0e-2d40-9b14-c72daf1534be
Ancestors: MorphicExtras-ct.331
Makes tick indicator high-dpi-sensitive.
=============== Diff against MorphicExtras-ct.331 ===============
Item was changed:
----- Method: TickIndicatorMorph>>drawOn: (in category 'drawing') -----
drawOn: aCanvas
| r center cc deg |
super drawOn: aCanvas.
corners ifNil:[
+ r := (bounds topCenter - bounds center) r - 2 px.
- r := (bounds topCenter - bounds center) r - 2.
corners := Array new: 32.
1 to: corners size do:[:i|
deg := 360.0 / corners size * (i-1).
corners at: i put: (Point r: r degrees: deg-90) asIntegerPoint]].
index := index \\ corners size.
cc := color darker.
center := bounds center.
1 to: corners size by: 4 do:[:i|
+ aCanvas fillRectangle: (center + (corners at: i)-2 extent: 4 px @ 4 px) color: cc.
- aCanvas fillRectangle: (center + (corners at: i)-2 extent: 4@4) color: cc.
].
cc := cc darker.
+ aCanvas line: center to: center + (corners at: index + 1) width: 2 px color: cc.!
- aCanvas line: center to: center + (corners at: index + 1) width: 2 color: cc.!
Item was changed:
----- Method: TickIndicatorMorph>>extent: (in category 'geometry') -----
extent: aPoint
+ super extent: ((aPoint x max: aPoint y) roundDownTo: 4 px) asPoint.
- super extent: ((aPoint x max: aPoint y) asInteger bitClear: 3) asPoint.
corners := nil.!
Item was changed:
----- Method: TickIndicatorMorph>>initialize (in category 'initialization') -----
initialize
"initialize the state of the receiver"
super initialize.
""
+ self extent: 30 px @ 30 px.
- self extent: 30 @ 30.
index := 0!
Christoph Thiede uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ct.1371.mcz
==================== Summary ====================
Name: System-ct.1371
Author: ct
Time: 13 September 2022, 10:15:48.374172 am
UUID: 6ec2954f-5dcc-3f41-b3a7-3c4310973c7f
Ancestors: System-ct.1370
Documents an example on ChangeSet class>>#removeChangeSetsNamedSuchThat:.
=============== Diff against System-ct.1370 ===============
Item was changed:
----- Method: ChangeSet class>>removeChangeSetsNamedSuchThat: (in category 'enumerating') -----
removeChangeSetsNamedSuchThat: nameBlock
+ "
+ Example (this should match a Monticello version names from installing the update stream):
+
+ self removeChangeSetsNamedSuchThat: [:name | name matchesRegex: '[\w-]+-\w+\.\d+']
+ "
(self changeSetsNamedSuchThat: nameBlock)
do: [:cs | self removeChangeSet: cs]!
Christoph Thiede uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-ct.483.mcz
==================== Summary ====================
Name: EToys-ct.483
Author: ct
Time: 13 September 2022, 10:04:53.483293 am
UUID: 29d2f5c2-b618-5140-9ea4-e35b7cad312b
Ancestors: EToys-ct.482
Complements System-ct.1370 (Project explicitName).
=============== Diff against EToys-ct.482 ===============
Item was changed:
----- Method: Project>>name: (in category '*Etoys-Squeakland-accessing') -----
name: aString
+ changeSet ifNil: [
+ self flag: #ct. "Can we redirect to #explicitName: here instead of creating change set, or does anyone rely on this side effect?"
+ changeSet := ChangeSet new].
- changeSet ifNil: [changeSet := ChangeSet new].
(aString isEmpty or: [aString = changeSet name])
ifFalse: [changeSet name: (ChangeSet uniqueNameLike: aString)]!
Christoph Thiede uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ct.1370.mcz
==================== Summary ====================
Name: System-ct.1370
Author: ct
Time: 13 September 2022, 10:03:33.429293 am
UUID: 23193c2a-bc1f-8a40-8979-9a4f67da6542
Ancestors: System-cmm.1369
Adds an optional #explicitName property to Project that may deviate from the name of the associated change set. For instance, this can be helpful when sharing the same change set between multiple projects.
This commit is part of reconstruction of Objectland (also known as "The Worlds of Squeak"). For more information, see: http://forum.world.st/The-Inbox-MorphicExtras-ct-267-mcz-td5104764.html
=============== Diff against System-cmm.1369 ===============
Item was changed:
Model subclass: #Project
+ instanceVariableNames: 'world uiManager changeSet transcript parentProject previousProject displayDepth viewSize thumbnail nextProject projectParameters version urlList lastDirectory lastSavedAtSeconds projectPreferenceFlagDictionary resourceManager explicitName'
- instanceVariableNames: 'world uiManager changeSet transcript parentProject previousProject displayDepth viewSize thumbnail nextProject projectParameters version urlList lastDirectory lastSavedAtSeconds projectPreferenceFlagDictionary resourceManager'
classVariableNames: 'AllProjects CurrentProject EmergencyRecoveryRequested GoalFreePercent GoalNotMoreThan'
poolDictionaries: ''
category: 'System-Support'!
!Project commentStamp: 'cbr 7/27/2010 21:36' prior: 0!
A Project stores the state of a complete Squeak desktop, including
the windows, and the currently active changeSet. A project knows who
its parent project is. When you change projects, whether by entering
or exiting, the screen state of the project being exited is saved in
that project.
A project is retained by its view in the parent world. It is
effectively named by the name of its changeSet, which can be changed
either by renaming in a changeSorter, or by editing the label of its
view from the parent project.
As the site of major context switch, Projects are the locus of
swapping between the old MVC and the new Morphic worlds. The
distinction is based on whether the variable 'world' contains a
WorldMorph or a ControlManager.
Saving and Loading
Projects may be stored on the disk in external format. (Project
named: 'xxx') exportSegment, or choose 'store project on file...'.
Projects may be loaded from a server and stored back. Storing on a
server never overwrites; it always makes a new version. A project
remembers the url of where it lives in urlList. The list is length
one, for now. The url may point to a local disk instead of a server.
All projects that the user looks at are cached in the Squeaklet
folder. Sorted by server. The cache holds the most recent version
only.
When a project is loaded into Squeak, its objects are converted to
the current version. There are three levels of conversion. First,
each object is converted from raw bits to an object in its old
format. Then it is sent some or all of these messages:
comeFullyUpOnReload: smartRefStream Used to
re-discover an object that already exists in this image, such as a
resource, global variable, Character, or Symbol. (sent to objects in
outPointers)
convertToCurrentVersion: varDict refStream: smartRefStrm
fill in fields that have been added to a class since
the object was stored. Used to set the extra inst var to a default
value. Or, return a new object of a different class. (sent to
objects that changed instance variables)
fixUponLoad: aProject refStream: smartRefStrm
change the object due to conventions that have changed on the
project level. (sent to all objects in the incoming project)
Here is the calling sequence for storing out a Project:
Project saveAs
Project storeOnServer
Project storeOnServerWithProgressInfo
Project storeOnServerInnards
Project exportSegmentFileName:directory:
Project exportSegmentWithChangeSet:fileName:directory:
ImageSegment writeForExportWithSources:inDirectory:changeSet:
!
Item was added:
+ ----- Method: Project>>explicitName (in category 'accessing') -----
+ explicitName
+ "An explicit name string that can be specified to override the name of the associated change set. For instance, this can be helpful when sharing the same change set between multiple projects. See #name. Optional."
+
+ ^ explicitName!
Item was added:
+ ----- Method: Project>>explicitName: (in category 'accessing') -----
+ explicitName: aStringOrNil
+ "An explicit name string that can be specified to override the name of the associated change set. For instance, this can be helpful when sharing the same change set between multiple projects. See #name. Optional."
+
+ explicitName := aStringOrNil.!
Item was changed:
----- Method: Project>>name (in category 'accessing') -----
name
+ self explicitName ifNotNil: [^ self explicitName].
+ changeSet ifNotNil: [^ changeSet name].
+ ^ 'no name'!
- changeSet == nil ifTrue: [^ 'no name'].
- ^ changeSet name!