Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-DS.916.mcz
==================== Summary ====================
Name: Morphic-DS.916
Author: DS
Time: 22 April 2015, 11:33:53.08 am
UUID: e58e8bbb-7a37-954a-87a0-5e71904b55c2
Ancestors: Morphic-cmm.915
Add basic support for borderStyles with non-uniform widths.
=============== Diff against Morphic-cmm.915 ===============
Item was added:
+ ----- Method: BorderStyle>>inset (in category 'accessing') -----
+ inset
+ "Possible inset when honoring this border style. The default implementation uses #width to return a uniform inset."
+ ^ self width!
Item was changed:
----- Method: Canvas>>fillRectangle:fillStyle:borderStyle: (in category 'drawing-rectangles') -----
fillRectangle: aRectangle fillStyle: aFillStyle borderStyle: aBorderStyle
"Fill the given rectangle."
aFillStyle isTransparent ifFalse:[
+ self fillRectangle: (aRectangle insetBy: aBorderStyle inset) fillStyle: aFillStyle].
- self fillRectangle: (aRectangle insetBy: aBorderStyle width) fillStyle: aFillStyle].
aBorderStyle ifNil:[^self].
aBorderStyle width <= 0 ifTrue:[^self].
+ aBorderStyle frameRectangle: aRectangle on: self.!
- aBorderStyle frameRectangle: aRectangle on: self
- !
Item was changed:
----- Method: Morph>>innerBounds (in category 'geometry') -----
innerBounds
"Return the inner rectangle enclosed by the bounds of this morph excluding the space taken by its borders. For an unbordered morph, this is just its bounds."
+ ^ self bounds insetBy: self borderStyle inset!
- ^ self bounds insetBy: self borderWidth!
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-tpr.1057.mcz
==================== Summary ====================
Name: Morphic-tpr.1057
Author: tpr
Time: 7 December 2015, 8:24:53.359 pm
UUID: c685257b-5ee7-49b3-a6b7-5255f28cd47f
Ancestors: Morphic-dtl.1056
Add the STWCPW version of cursor gridding to HandMorph.
It may very well be better to add two instance variables rather than use a couple of properties to hold the state.
There may well be other methods needing changes.
To use:
start by sending gridTo: grid origin: origin to the hand
any subsequent temporaryCursor... will be forced to screeen co-ordinates that are on grid sized steps with an offset of the origin.
gridPointRaw provides the frid limited position of the current hand. Older events are *not* gridded - this is one of the places where there may be more to do.
=============== Diff against Morphic-dtl.1056 ===============
Item was added:
+ ----- Method: HandMorph>>gridPointRaw (in category 'gridded cursor') -----
+ gridPointRaw
+ "return my latest position gridded"
+ ^self griddedPoint: self currentEvent position!
Item was added:
+ ----- Method: HandMorph>>gridTo:origin: (in category 'gridded cursor') -----
+ gridTo: grid origin: offset
+ "set a couple of properties to specify gridding for the temporaryCursor; instvars would be nicer"
+ self setProperty: #gridStep toValue: grid;
+ setProperty: #gridOffset toValue: offset!
Item was added:
+ ----- Method: HandMorph>>griddedPoint: (in category 'gridded cursor') -----
+ griddedPoint: aPoint
+ "return the equivalent point snapped to the grid, if indeed any gridding is set"
+ self valueOfProperty: #gridStep ifPresentDo: [:grid| |offset|
+ offset := self valueOfProperty: #gridOffset ifAbsent: [0@0].
+ ^ offset + (aPoint + (grid //2) - offset truncateTo: grid)].
+ ^aPoint!
Item was changed:
----- Method: HandMorph>>position: (in category 'geometry') -----
position: aPoint
"Overridden to align submorph origins to the grid if gridding is on."
| adjustedPosition delta box |
adjustedPosition := aPoint.
+ temporaryCursor ifNotNil: [adjustedPosition := (self griddedPoint: adjustedPosition) + temporaryCursorOffset].
- temporaryCursor ifNotNil: [adjustedPosition := adjustedPosition + temporaryCursorOffset].
"Copied from Morph to avoid owner layoutChanged"
"Change the position of this morph and and all of its submorphs."
delta := adjustedPosition - bounds topLeft.
delta isZero ifTrue: [^ self]. "Null change"
box := self fullBounds.
(delta dotProduct: delta) > 100 ifTrue:[
"e.g., more than 10 pixels moved"
self invalidRect: box.
self invalidRect: (box translateBy: delta).
] ifFalse:[
self invalidRect: (box merge: (box translateBy: delta)).
].
self privateFullMoveBy: delta.
!
Item was added:
+ ----- Method: HandMorph>>turnOffGridding (in category 'gridded cursor') -----
+ turnOffGridding
+ "remove the gridding properties to stop gridding"
+ self removeProperty: #gridStep; removeProperty: #gridOffset!
Nicolas Cellier uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-cmm.601.mcz
==================== Summary ====================
Name: Monticello-cmm.601
Author: cmm
Time: 2 October 2014, 4:34:01.44 pm
UUID: 9031e0e5-b991-46fd-a8f0-20ead172757b
Ancestors: Monticello-topa.600
Recover quick keyboard access to the classic "install" and "revert" functions on the changed definitions list. Otherwise the new "Ignore (I)" function is selected whether "r" or "i" was pressed on the keyboard.
That function has a hot-key anyway, so move it below the the standard Monticello functions.
=============== Diff against Monticello-topa.600 ===============
Item was changed:
----- Method: MCSaveVersionDialog>>methodListMenu: (in category 'as yet unclassified') -----
methodListMenu: aMenu
- aMenu addList:#(
- ('ignore (I)' ignoreSelection 'Do not include this change when saving')
- -).
super methodListMenu: aMenu.
+ aMenu addList:#(-
+ ('ignore (I)' ignoreSelection 'Toggle inclusion of this change when saving')).
^aMenu!
Nicolas Cellier uploaded a new version of Monticello to project The Trunk:
http://source.squeak.org/trunk/Monticello-nice.694.mcz
==================== Summary ====================
Name: Monticello-nice.694
Author: nice
Time: 13 February 2019, 5:10:42.293481 pm
UUID: 32251c33-6f20-4c4f-8e6b-b0bb32019731
Ancestors: Monticello-tpr.693
Warn about false ancestors thru bold-red-UI
A false ancestor is a package that has same name-author.versionNumber than a true ancestor, but not the same id (UUID).
Generally, its contents will be different from the true ancestor.
It is vital to know this information, particularly when browsing an inbox, otherwise we could override a true ancestor when moving/copying this package to repository that already contains the true one.
Right now, the warning is only for selected version in the versionList.
It's because the list is built from version names only and ignore ids.
Most actions will operate on selected version though, so it's better than nothing.
=============== Diff against Monticello-tpr.693 ===============
Item was changed:
MCVersionInspector subclass: #MCRepositoryInspector
+ instanceVariableNames: 'repository packageNames versionNames selectedPackage selectedVersion order versionInfo loaded newer inherited inheritedId'
- instanceVariableNames: 'repository packageNames versionNames selectedPackage selectedVersion order versionInfo loaded newer inherited'
classVariableNames: 'BrowseBranchedVersionsSeparately Order'
poolDictionaries: ''
category: 'Monticello-UI'!
Item was changed:
----- Method: MCRepositoryInspector>>identifyLoadedAndInherited: (in category 'morphic ui') -----
identifyLoadedAndInherited: aMCWorkingCopy
| seen |
seen := Set new.
aMCWorkingCopy ancestors do:
[ : ancestor | loaded add: ancestor versionName.
seen add: ancestor.
ancestor ancestorsDoWhileTrue:
[ : heir | (seen includes: heir)
ifTrue: [ false ]
ifFalse:
[ inherited add: heir versionName.
+ inheritedId add: heir id.
seen add: heir.
true ] ] ]!
Item was changed:
----- Method: MCRepositoryInspector>>initializeEmphasis (in category 'initialize-release') -----
initializeEmphasis
inherited := Set new.
+ inheritedId := Set new.
loaded := Set new!
Item was added:
+ ----- Method: MCRepositoryInspector>>selectedVersionIsFalseAncestor (in category 'testing') -----
+ selectedVersionIsFalseAncestor
+ "Answer true if selectedVersion is a false ancestor of working copy.
+ An ancestor of working copy that has same name, but not same id is a false ancestor!!"
+ ^(selectedVersion notNil
+ and: [(inherited includes: selectedVersion versionName)
+ and: [(inheritedId includes: self versionInfo id) not]])!
Item was added:
+ ----- Method: MCRepositoryInspector>>summary (in category 'morphic ui') -----
+ summary
+ self selectedVersionIsFalseAncestor
+ ifTrue: [^ (Text string: 'Beware, this is a false ancestor whose name conflicts with a true one\' withCRs attributes: {TextColor red. TextEmphasis bold})
+ , super summary].
+ ^ super summary!
Item was changed:
----- Method: MCRepositoryInspector>>versionHighlight: (in category 'morphic ui') -----
+ versionHighlight: aMCVersionName
- versionHighlight: aMCVersionName
inherited ifNil: [inherited := #()].
+ inheritedId ifNil: [inheritedId := #()].
+ (selectedVersion notNil
+ and: [selectedVersion = aMCVersionName
+ and: [self selectedVersionIsFalseAncestor]])
+ ifTrue: ["False ancestor might be dangerous, signal them in red"
+ ^ Text string: aMCVersionName attributes: {TextColor red. TextEmphasis bold}].
+ ^ Text
- ^Text
string: aMCVersionName
+ attribute: (TextEmphasis new
+ emphasisCode: ((loaded includes: aMCVersionName)
+ ifTrue: ["underlined" 4]
+ ifFalse: [(inherited includes: aMCVersionName)
+ ifTrue: [0]
+ ifFalse: ["bold" 1]]))!
- attribute: (TextEmphasis new emphasisCode: (
- ((loaded includes: aMCVersionName) ifTrue: [ 4 "underlined" ]
- ifFalse: [ (inherited includes: aMCVersionName)
- ifTrue: [ 0 ]
- ifFalse: [ 1 "bold" ] ])))!
Item was changed:
----- Method: MCRepositoryInspector>>versionSelection: (in category 'morphic ui') -----
versionSelection: aNumber
selectedVersion := version := nil.
aNumber isZero ifFalse: [ selectedVersion := (self versionList at: aNumber) asString ].
+ self selectedVersionIsFalseAncestor ifTrue: [self changed: #versionList].
self
changed: #versionSelection ;
changed: #summary ;
changed: #hasVersion!
Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-topa.806.mcz
==================== Summary ====================
Name: Collections-topa.806
Author: topa
Time: 12 September 2018, 3:28:40.687052 pm
UUID: 46b95db5-a773-4113-92f0-5ee905404b49
Ancestors: Collections-cmm.805
Fix separators to include U+00A0 (no break space)
Thanks Ron!
=============== Diff against Collections-cmm.805 ===============
Item was changed:
----- Method: Character class>>separators (in category 'instance creation') -----
separators
+ "Answer a collection of space-like separator characters.
+ Note that we do not consider spaces in >8bit code points yet.
+ "
- "Answer a collection of the standard ASCII separator characters."
+ ^ #(9 "tab"
- ^ #(32 "space"
- 13 "cr"
- 9 "tab"
10 "line feed"
+ 12 "form feed"
+ 13 "cr"
+ 32 "space"
+ 160 "non-breaking space, see Unicode Z general category")
+ collect: [:v | Character value: v] as: String
+ " To be considered:
+ 16r1680 OGHAM SPACE MARK
+ 16r2000 EN QUAD
+ 16r2001 EM QUAD
+ 16r2002 EN SPACE
+ 16r2003 EM SPACE
+ 16r2004 THREE-PER-EM SPACE
+ 16r2005 FOUR-PER-EM SPACE
+ 16r2006 SIX-PER-EM SPACE
+ 16r2007 FIGURE SPACE
+ 16r2008 PUNCTUATION SPACE
+ 16r2009 THIN SPACE
+ 16r200A HAIR SPACE
+ 16r2028 LINE SEPARATOR
+ 16r2029 PARAGRAPH SEPARATOR
+ 16r202F NARROW NO-BREAK SPACE
+ 16r205F MEDIUM MATHEMATICAL SPACE
+ 16r3000 IDEOGRAPHIC SPACE
+ "!
- 12 "form feed")
- collect: [:v | Character value: v] as: String!
Item was changed:
+ (PackageInfo named: 'Collections') postscript: 'CharacterSet cleanUp: false.'!
- (PackageInfo named: 'Collections') postscript: 'Character initializeClassificationTable'!
Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.803.mcz
==================== Summary ====================
Name: Collections-eem.803
Author: eem
Time: 21 August 2018, 2:09:17.558296 pm
UUID: 86665c06-0176-4eb8-b9dd-2b8dc3677fd6
Ancestors: Collections-dtl.802
More rational Dictionary>>fillFrom:with: so that collect:as: Dictionary matches e.g. Dictionary withAll:
Since 2010 Dictionary withAll: { 2->3 } => a Dictionary(2->3 ).
But
'abc' collect: [ :each | each -> each asciiValue ] as: Dictionary => a Dictionary(1->$a->97 2->$b->98 3->$c->99 )
With this change no tests appear to break (at least none that explicitly call collect:as:) and
'abc' collect: [ :each | each -> each asciiValue ] as: Dictionary => a Dictionary($a->97 $b->98 $c->99 )
=============== Diff against Collections-dtl.802 ===============
Item was changed:
----- Method: Dictionary>>fillFrom:with: (in category 'private') -----
fillFrom: aCollection with: aBlock
"Evaluate aBlock with each of aCollections's elements as the argument.
Collect the resulting values into self. Answer self."
+ aCollection isSequenceable
+ ifTrue:
+ [aCollection associationsDo:
+ [ :element | self add: (aBlock value: element)]]
+ ifFalse:
+ [aCollection keysAndValuesDo:
+ [ :key :value | self at: key put: (aBlock value: value)]]!
- aCollection keysAndValuesDo: [ :key :value |
- self at: key put: (aBlock value: value) ]!