Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1634.mcz
==================== Summary ====================
Name: Morphic-mt.1634
Author: mt
Time: 5 March 2020, 1:23:09.843611 pm
UUID: 5c787d47-61df-6e45-87c8-4513a96c1ac9
Ancestors: Morphic-mt.1633
Updates some access to colors, which now resides in UI themes. I think most of those methods are not needed anymore. #textHighlightColor: got moved to 60Deprecated.
=============== Diff against Morphic-mt.1633 ===============
Item was changed:
----- Method: Morph class>>selectionBackground (in category 'defaults') -----
selectionBackground
"The background for selected items in lists and tree-list thingies."
^ self subduedHilites ifTrue: [
+ TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2
- Preferences textHighlightColor
] ifFalse: [
"This is tuned so the red-foreground used for list texts stays somewhat legible."
Color r: 0.8 g:0.8 b: 0.81 alpha: 0.85
].
!
Item was removed:
- ----- Method: PluggableListMorph>>textHighlightColor (in category 'initialization') -----
- textHighlightColor
- "Answer my default text highlight color."
- ^self valueOfProperty: #textHighlightColor ifAbsent: [ self textColor negated ].
- !
Item was removed:
- ----- Method: PluggableListMorph>>textHighlightColor: (in category 'initialization') -----
- textHighlightColor: aColor
- "Set my default text highlight color."
- self setProperty: #textHighlightColor toValue: aColor.
- !
Item was changed:
----- Method: TextMorph class>>initialize (in category 'class initialization') -----
initialize "TextMorph initialize"
"Initialize the default text editor class to use"
DefaultEditorClass := SmalltalkEditor.
"Initialize constants shared by classes associated with text display."
CaretForm := (ColorForm extent: 16@5
fromArray: #(2r001100e26 2r001100e26 2r011110e26 2r111111e26 2r110011e26)
offset: -2@0)
+ colors: (Array with: Color transparent with: (TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2)).
- colors: (Array with: Color transparent with: Preferences textHighlightColor).
self registerInFlapsRegistry.
!
Item was changed:
----- Method: TheWorldMenu>>appearanceMenu (in category 'construction') -----
appearanceMenu
"Build the appearance menu for the world."
^self fillIn: (self menu: 'appearance...') from: {
{'preferences...' . { self . #openPreferencesBrowser} . 'Opens a "Preferences Browser" which allows you to alter many settings' } .
{'choose set of preferences...' . { Preferences . #offerThemesMenu} . 'Presents you with a menu of sets or preferences; each item''s balloon-help will tell you about the particular set. If you choose one, many different preferences that come along are set at the same time; you can subsequently change any settings by using a Preferences Panel'} .
nil .
{'system fonts...' . { self . #standardFontDo} . 'Choose the standard fonts to use for code, lists, menus, window titles, etc.'}.
- {'text highlight color...' . { Preferences . #chooseTextHighlightColor} . 'Choose which color should be used for text highlighting in Morphic.'}.
- {'insertion point color...' . { Preferences . #chooseInsertionPointColor} . 'Choose which color to use for the text insertion point in Morphic.'}.
- {'keyboard focus color' . { Preferences . #chooseKeyboardFocusColor} . 'Choose which color to use for highlighting which pane has the keyboard focus'}.
nil.
{#menuColorString . { self . #toggleMenuColorPolicy} . 'Governs whether menu colors should be derived from the desktop color.'}.
{#roundedCornersString . { self . #toggleRoundedCorners} . 'Governs whether morphic windows and menus should have rounded corners.'}.
nil.
{'full screen on' . { DisplayScreen . #fullScreenOn} . 'puts you in full-screen mode, if not already there.'}.
{'full screen off' . { DisplayScreen . #fullScreenOff} . 'if in full-screen mode, takes you out of it.'}.
nil.
{'set display depth...' . {self. #setDisplayDepth} . 'choose how many bits per pixel.'}.
{'set desktop color...' . {self. #changeBackgroundColor} . 'choose a uniform color to use as desktop background.'}.
{'set gradient color...' . {self. #setGradientColor} . 'choose second color to use as gradient for desktop background.'}.
{'use texture background' . { #myWorld . #setStandardTexture} . 'apply a graph-paper-like texture background to the desktop.'}.
nil.
{'clear turtle trails from desktop' . { #myWorld . #clearTurtleTrails} . 'remove any pigment laid down on the desktop by objects moving with their pens down.'}.
{'pen-trail arrowhead size...' . { Preferences. #setArrowheads} . 'choose the shape to be used in arrowheads on pen trails.'}.
}!
Marcel Taeumel uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-mt.386.mcz
==================== Summary ====================
Name: EToys-mt.386
Author: mt
Time: 5 March 2020, 1:21:10.351611 pm
UUID: 86fc41a2-1bfb-7f43-95be-515947b458e1
Ancestors: EToys-mt.385
Removes more deprecated message sends. Adds some new deprecations.
=============== Diff against EToys-mt.385 ===============
Item was changed:
----- Method: CategoryViewer>>addNamePaneTo: (in category 'header pane') -----
addNamePaneTo: header
"Add the namePane, which is a pop-up"
| triangle aLabel |
namePane := BorderedMorph new.
namePane layoutPolicy: TableLayout new.
namePane hResizing: #spaceFill.
namePane listDirection: #leftToRight.
namePane wrapCentering: #center.
namePane cellInset: 2.
namePane layoutInset: 6 @ 0.
namePane color: ScriptingSystem baseColor.
+ namePane borderColor: (self userInterfaceTheme titleBorderColor
- namePane borderColor: (self userInterfaceTheme menuTitleBorderColor
ifNil: [(Color r: 0.6 g: 0.7 b: 1)]).
namePane borderWidth: 0.
namePane height: TileMorph defaultH.
namePane useRoundedCornersInEtoys.
triangle := ImageMorph new image: (ScriptingSystem formAtKey: #MenuTriangle).
namePane addMorph: triangle.
aLabel := StringMorph contents: '---------' font: ScriptingSystem fontForViewerCategoryPopups.
namePane addMorphBack: aLabel.
namePane on: #mouseDown send: #chooseCategory to: self.
header addMorphBack: namePane!
Item was changed:
----- Method: CharRecog>>recogPar (in category 'historical & disused') -----
recogPar | prv cdir result features char r s t dir |
"Inits" (p := Pen new) defaultNib: 1; down.
"for points" pts := ReadWriteStream on: #().
"Event Loop"
+ [EventSensor default anyButtonPressed] whileFalse: [(EventSensor default peekPosition x < 50) ifTrue: [^''].].
- [Sensor anyButtonPressed] whileFalse: [(Sensor mousePoint x < 50) ifTrue: [^''].].
"First-Time" pts reset.
"will hold features" ftrs := ''.
+ (EventSensor default anyButtonPressed) ifTrue:
+ [pts nextPut: (bmin := bmax := t := s := sts := EventSensor default peekPosition).
- (Sensor anyButtonPressed) ifTrue:
- [pts nextPut: (bmin := bmax := t := s := sts := Sensor mousePoint).
p place: sts. cdir := nil.
+ "Each-Time" [EventSensor default anyButtonPressed] whileTrue:
- "Each-Time" [Sensor anyButtonPressed] whileTrue:
[
+ "ink raw input" p goto: (r := EventSensor default peekPosition).
- "ink raw input" p goto: (r := Sensor mousePoint).
"smooth it" s := (0.5*s) + (0.5*r).
"thin the stream" ((s x - t x) abs > 3 or:[(s y - t y) abs > 3]) ifTrue:
[ pts nextPut: t.
"bounding box" bmin := bmin min: s. bmax := bmax max: s.
"get current dir" dir := (self fourDirsFrom: t to: s). t := s.
dir ~= ' dot... ' ifTrue: [
"store new dirs" cdir ~= dir ifTrue: [ftrs := ftrs, (cdir := dir)]].
"for inked t's" p place: t; go: 1; place: r.
].
"End Each-Time Loop" ].
"Last-Time"
"start a new recog for next point" [CharRecog new recognize] fork.
"save last points" pts nextPut: t; nextPut: r.
"find rest of features" features := self extractFeatures.
"find char..." char := CharacterDictionary at: features ifAbsent:
"...or get from user" [ result := FillInTheBlank request:
'Not recognized. type char, or type ~: ', features.
"ignore or..." result = '~' ifTrue: ['']
"...enter new char" ifFalse: [CharacterDictionary at: features put: result. result]].
"control the editor" (char = 'cr' ifTrue: [Transcript cr] ifFalse:
[char = 'bs' ifTrue: [Transcript bs] ifFalse:
[char = 'tab' ifTrue:[Transcript tab] ifFalse:
[Transcript show: char]]]).
"End First-Time Loop" ].
!
Item was changed:
----- Method: CharRecog>>recognize (in category 'historical & disused') -----
recognize | prv cdir result features char r s t dir |
"Alan Kay's recognizer as of 1/31/96. This version preserved for historical purposes, and also because it's still called by the not-yet-deployed method recogPar. Within the current image, the recognizer is now called via #recognizeAndDispatch:until:"
"Inits" (p := Pen new) defaultNib: 1; down.
"for points" pts := ReadWriteStream on: #().
"Event Loop"
+ [(EventSensor default peekPosition x) < 50] whileFalse:
- [(Sensor mousePoint x) < 50] whileFalse:
"First-Time" [pts reset.
"will hold features" ftrs := ''.
+ (EventSensor default anyButtonPressed) ifTrue:
+ [pts nextPut: (bmin := bmax := t := s := sts := EventSensor default peekPosition).
- (Sensor anyButtonPressed) ifTrue:
- [pts nextPut: (bmin := bmax := t := s := sts := Sensor mousePoint).
p place: sts. cdir := nil.
+ "Each-Time" [EventSensor default anyButtonPressed] whileTrue:
- "Each-Time" [Sensor anyButtonPressed] whileTrue:
[
+ "ink raw input" p goto: (r := EventSensor default peekPosition).
- "ink raw input" p goto: (r := Sensor mousePoint).
"smooth it" s := (0.5*s) + (0.5*r).
"thin the stream" ((s x - t x) abs > 3 or:[(s y - t y) abs > 3]) ifTrue:
[ pts nextPut: t.
"bounding box" bmin := bmin min: s. bmax := bmax max: s.
"get current dir" dir := (self fourDirsFrom: t to: s). t := s.
dir ~= ' dot... ' ifTrue: [
"store new dirs" cdir ~= dir ifTrue: [ftrs := ftrs, (cdir := dir)]].
"for inked t's" p place: t; go: 1; place: r.
].
"End Each-Time Loop" ].
"Last-Time"
"save last points" pts nextPut: t; nextPut: r.
"find rest of features" features := self extractFeatures.
"find char..." char := CharacterDictionary at: features ifAbsent:
"...or get from user" [ result := FillInTheBlank request:
'Not recognized. type char, or type ~: ', features.
"ignore or..." result = '~' ifTrue: ['']
"...enter new char" ifFalse: [CharacterDictionary at: features put: result. result]].
"control the editor" (char = 'cr' ifTrue: [Transcript cr] ifFalse:
[char = 'bs' ifTrue: [Transcript bs] ifFalse:
[char = 'tab' ifTrue:[Transcript tab] ifFalse:
[Transcript show: char]]]).
"End First-Time Loop" ].
"End Event-Loop" ].
!
Item was changed:
----- Method: CharRecog>>recognizeAndDispatch:ifUnrecognized:until: (in category 'recognizer') -----
recognizeAndDispatch: charDispatchBlock ifUnrecognized: unrecognizedFeaturesBlock until: terminationBlock
"Recognize characters, and dispatch each one found by evaluating charDispatchBlock; proceed until terminationBlock is true. This method derives directly from Alan's 1/96 #recognize method, but factors out the character dispatch and the termination condition from the main body of the method. 2/2/96 sw. 2/5/96 sw: switch to using a class variable for the character dictionary, and don't put vacuous entries in the dictionary if the user gives an empty response to the prompt, and don't send empty characters onward, and use a variant of the FillInTheBlank that keeps the prompt clear of the working window. 8/17/96 tk: Turn cr, tab, bs into strings so they work.
9/18/96 sw: in this variant, the block for handling unrecognized features is handed in as an argument, so that in some circumstances we can avoid putting up a prompt. unrecognizedFeaturesBlock should be a one-argument block, which is handed in the features and which is expected to return a string which indicates the determined translation -- empty if none."
| prv cdir features char r s t dir |
"Inits" (p := Pen new) defaultNib: 1; down.
"for points" pts := ReadWriteStream on: #().
"Event Loop"
[terminationBlock value] whileFalse:
"First-Time" [pts reset.
"will hold features" ftrs := ''.
+ (EventSensor default anyButtonPressed) ifTrue:
+ [pts nextPut: (bmin := bmax := t := s := sts := EventSensor default peekPosition).
- (Sensor anyButtonPressed) ifTrue:
- [pts nextPut: (bmin := bmax := t := s := sts := Sensor mousePoint).
p place: sts. cdir := nil.
+ "Each-Time" [EventSensor default anyButtonPressed] whileTrue:
+ "ink raw input" [p goto: (r := EventSensor default peekPosition).
- "Each-Time" [Sensor anyButtonPressed] whileTrue:
- "ink raw input" [p goto: (r := Sensor mousePoint).
"smooth it" s := (0.5*s) + (0.5*r).
"thin the stream" ((s x - t x) abs > 3 or:[(s y - t y) abs > 3]) ifTrue:
[pts nextPut: t.
"bounding box" bmin := bmin min: s. bmax := bmax max: s.
"get current dir" dir := (self fourDirsFrom: t to: s). t := s.
dir ~= ' dot... ' ifTrue:
"store new dirs" [cdir ~= dir ifTrue: [ftrs := ftrs, (cdir := dir)]].
"for inked t's" p place: t; go: 1; place: r]].
"End Each-Time Loop"
"Last-Time"
"save last points" pts nextPut: t; nextPut: r.
"find rest of features" features := self extractFeatures.
"find char..." char := CharacterDictionary at: features ifAbsent:
[unrecognizedFeaturesBlock value: features].
"special chars" char size > 0 ifTrue:
[char = 'tab' ifTrue: [char := Tab].
char = 'cr' ifTrue: [char := CR].
"must be a string" char class == Character ifTrue:
[char := String with: char].
char = 'bs' ifTrue: [char := BS].
"control the editor" charDispatchBlock value: char]]]
!
Item was changed:
----- Method: CharRecog>>recognizeAndPutInTranscript (in category 'historical & disused') -----
recognizeAndPutInTranscript
"Call Alan's recognizer repeatedly until the mouse is near the left edge of the screen, and dispatch keystrokes inferred to the Trancript. 2/2/96 sw"
^ self recognizeAndDispatch:
[:char | (char = 'cr') ifTrue: [Transcript cr] ifFalse:
[char = 'bs' ifTrue: [Transcript bs] ifFalse:
[char = 'tab' ifTrue:[Transcript tab] ifFalse:
[Transcript show: char]]]]
until:
+ [EventSensor default peekPosition x < 50]
- [Sensor mousePoint x < 50]
"CharRecog new recognizeAndPutInTranscript"!
Item was changed:
----- Method: DocLibrary>>saveDocCheck: (in category 'doc pane') -----
saveDocCheck: aMorph
"Make sure the document gets attached to the version of the code that the user was looking at. Is there a version of this method in a changeSet beyond the updates we know about? Works even when the user has internal update numbers and the documentation is for external updates (It always is)."
| classAndMethod parts selector class lastUp beyond ours docFor unNum ok key verList ext response |
classAndMethod := aMorph valueOfProperty: #classAndMethod.
classAndMethod ifNil: [
^ self error: 'need to know the class and method']. "later let user set it"
parts := classAndMethod findTokens: ' .'.
selector := parts last asSymbol.
class := Smalltalk at: (parts first asSymbol) ifAbsent: [^ self saveDoc: aMorph].
parts size = 3 ifTrue: [class := class class].
"Four indexes we are looking for:
docFor = highest numbered below lastUpdate that has method.
unNum = a higher unnumbered set that has method.
lastUp = lastUpdate we know about in methodVersions
beyond = any set about lastUp that has the method."
ChangeSet allChangeSets doWithIndex: [:cs :ind | "youngest first"
+ (cs name includesSubstring: lastUpdateName) ifTrue: [lastUp := ind].
- (cs name includesSubString: lastUpdateName) ifTrue: [lastUp := ind].
(cs atSelector: selector class: class) ~~ #none ifTrue: [
lastUp ifNotNil: [beyond := ind. ours := cs name]
ifNil: [cs name first isDigit ifTrue: [docFor := ind]
ifFalse: [unNum := ind. ours := cs name]]]].
"See if version the user sees is the version he is documenting"
ok := beyond == nil.
unNum ifNotNil: [docFor ifNotNil: [ok := docFor > unNum]
ifNil: [ok := false]]. "old changeSets gone"
ok ifTrue: [^ self saveDoc: aMorph].
key := DocLibrary properStemFor: classAndMethod.
verList := (methodVersions at: key ifAbsent: [#()]), #(0 0).
ext := verList first. "external update number we will write to"
response := (PopUpMenu labels: 'Cancel\Broadcast Page' withCRs)
startUpWithCaption: 'You are documenting a method in External Update ', ext asString, '.\There is a more recent version of that method in ' withCRs, ours,
'.\If you are explaining the newer version, please Cancel.\Wait until that version appears in an External Update.' withCRs.
response = 2 ifTrue: [self saveDoc: aMorph].
!
Item was changed:
----- Method: KedamaAttributeEvaluator>>sortDependencies (in category 'actions') -----
sortDependencies
| t keys array |
t := TopologicalSorter new.
keys := attributedTree allOccurences contents.
+ dependencies keys do: [:key |
- dependencies fasterKeys do: [:key |
array := (dependencies at: key) contents.
dependencies at: key put: array.
].
t collection: keys.
t edges: dependencies.
^ t sort.
!
Item was changed:
----- Method: PasteUpMorph class>>putativeAdditionsToViewerCategoryPlayfieldOptions (in category '*Etoys-Squeakland-eToys-scripting') -----
putativeAdditionsToViewerCategoryPlayfieldOptions
"Answer playfield options additions. Some of these are not yet underpinned by code in the current image; these will follow in due course."
^ #(#'playfield options' (
(command roundUpStrays 'Bring back all objects whose current coordinates keep them from being visible, so that at least a portion of each of my interior objects can be seen.')
(command makeFitContents 'Adjust my bounds so that I fit precisely around all the objects within me')
(command showAllPlayers 'Make visible the viewers for all players which have user-written scripts in this playfield.')
(command hideAllPlayers 'Make invisible the viewers for all players in this playfield. This will save space before you publish this project')
(command shuffleSubmorphs 'Rearranges my contents in random order')
- (command restoreDisplay 'Redraws the screen')
(command showAllObjectNames 'show names beneath all the objects currently in my interior, except for those for which showing such names is inappropriate.')
(command hideAllObjectNames 'stop showing names beneath all the objects of my interior, If any of them is marked to "always show name", remove that designation')))!
Item was changed:
----- Method: Preferences class>>openNewPreferencesPanel (in category '*Etoys-Squeakland-preferences panel') -----
openNewPreferencesPanel
"Create and open a new Preferences Panel"
| window |
window := self preferencesControlPanel.
self currentWorld addMorphFront: window.
window center: self currentWorld center.
+ window beKeyWindow.
- window activateAndForceLabelToShow.
"Preferences openNewPreferencesPanel"!
Item was removed:
- ----- Method: Preferences class>>windowColorHelp (in category '*Etoys-Squeakland-window colors') -----
- windowColorHelp
- "Provide help for the window-color panel"
-
- | helpString |
- helpString :=
- 'The "Window Colors" panel lets you select colors for many kinds of standard Squeak windows.
-
- You can change your color preference for any particular tool by clicking on the color swatch and then selecting the desired color from the resulting color-picker.
-
- The three buttons entitled "Bright", "Pastel", and "White" let you revert to any of three different standard color schemes.
-
- The choices you make in the Window Colors panel only affect the colors of new windows that you open.
-
- You can make other tools have their colors governed by this panel by simply implementing #windowColorSpecification on the class side of the model -- consult implementors of that method to see examples of how to do this.'.
-
- (StringHolder new contents: helpString)
- openLabel: 'About Window Colors' translated
-
- "Preferences windowColorHelp"!
Item was removed:
- ----- Method: Preferences class>>windowSpecificationPanel (in category '*Etoys-Squeakland-window colors') -----
- windowSpecificationPanel
- "Put up a panel for specifying window colors"
-
- "Preferences windowSpecificationPanel"
- | aPanel buttonRow aButton aRow aSwatch aColor aWindow aMiniWorld aStringMorph |
- aPanel := AlignmentMorph newColumn hResizing: #shrinkWrap; vResizing: #shrinkWrap;
- layoutInset: 0.
-
- aPanel addMorph: (buttonRow := AlignmentMorph newRow color: (aColor := Color tan lighter)).
-
- buttonRow addTransparentSpacerOfSize: 2@0.
- buttonRow addMorphBack: (SimpleButtonMorph new label: '?'; target: self; actionSelector: #windowColorHelp; setBalloonText: 'Click for an explanation of this panel' translated; color: Color veryVeryLightGray; yourself).
- buttonRow addTransparentSpacerOfSize: 8@0.
- #( ('Bright' installBrightWindowColors yellow
- 'Use standard bright colors for all windows.')
- ('Pastel' installPastelWindowColors paleMagenta
- 'Use standard pastel colors for all windows.')
- ('White' installUniformWindowColors white
- 'Use white backgrounds for all standard windows.')) translatedNoop do:
-
- [:quad |
- aButton := (SimpleButtonMorph new target: self)
- label: quad first translated;
- actionSelector: quad second;
- color: (Color colorFrom: quad third);
- setBalloonText: quad fourth translated;
- yourself.
- buttonRow addMorphBack: aButton.
- buttonRow addTransparentSpacerOfSize: 10@0].
-
- self windowColorTable do:
- [:colorSpec |
- aRow := AlignmentMorph newRow color: aColor.
- aSwatch := ColorSwatch new
- target: self;
- getSelector: #windowColorFor:;
- putSelector: #setWindowColorFor:to:;
- argument: colorSpec classSymbol;
- extent: (40 @ 20);
- setBalloonText: ('Click here to change the standard color to be used for {1} windows.' format: {colorSpec wording translated});
- yourself.
- aRow addMorphFront: aSwatch.
- aRow addTransparentSpacerOfSize: (12 @ 1).
- aRow addMorphBack: (aStringMorph := StringMorph contents: colorSpec wording translated font: TextStyle defaultFont).
- aStringMorph setBalloonText: colorSpec helpMessage translated.
- aPanel addMorphBack: aRow].
-
- Smalltalk isMorphic
- ifTrue:
- [aWindow := aPanel wrappedInWindowWithTitle: 'Window Colors' translated.
- " don't allow the window to be picked up by clicking inside "
- aPanel on: #mouseDown send: #yourself to: aPanel.
- self currentWorld addMorphCentered: aWindow.
- aWindow activateAndForceLabelToShow ]
- ifFalse:
- [(aMiniWorld := MVCWiWPasteUpMorph newWorldForProject: nil)
- addMorph: aPanel.
- aMiniWorld startSteppingSubmorphsOf: aPanel.
- MorphWorldView openOn: aMiniWorld
- label: 'Window Colors' translated
- extent: aMiniWorld fullBounds extent]!
Item was removed:
- ----- Method: SMSqueakMap>>windowColorToUse (in category '*Etoys-Squeakland-model access') -----
- windowColorToUse
-
- ^ self userInterfaceTheme uniformWindowColor ifNil: [Color veryVeryLightGray]!
Item was changed:
----- Method: SoundLibraryTool>>listing (in category 'initialization') -----
listing
| list newList format soundData selectorList formatList |
list := SampledSound soundLibrary keys sort.
selectorList := OrderedCollection new.
formatList := OrderedCollection new.
list
do: [:each |
soundData := (SampledSound soundLibrary at: each) second.
soundData isNumber
ifTrue: [format := 'uncompressed']
ifFalse: [(soundData includesSubString: 'Vorbis')
ifTrue: [format := 'Vorbis']
ifFalse: [(soundData includesSubString: 'Speex')
ifTrue: [format := 'Speex']
+ ifFalse: [(soundData includesSubstring: 'GSM')
- ifFalse: [(soundData includesSubString: 'GSM')
ifTrue: [format := 'GSM']]]].
selectorList add: each.
formatList add: format].
newList := OrderedCollection new.
newList add: selectorList asArray.
showCompression
ifTrue:[newList add: formatList asArray]
ifFalse:[newList add: (Array new: (formatList size) withAll:' ')].
^newList!
Item was changed:
----- Method: UserText>>drawOn: (in category 'drawing') -----
drawOn: aCanvas
"Render the receiver on the given canvas."
super drawOn: aCanvas.
aCanvas isShadowDrawing
ifTrue: [^ self].
self hasFocus
ifTrue: [aCanvas
frameRectangle: (self fullBounds insetBy: 0)
+ color: self keyboardFocusColor]!
- color: Preferences keyboardFocusColor]!
Item was changed:
----- Method: Viewer class>>innerBorderColor (in category '*Etoys-Squeakland-constants') -----
innerBorderColor
+ ^ (UserInterfaceTheme current get: #titleBorderColor for: self) ifNil: [(Color r: 0.6 g: 0.7 b: 1)]!
- ^ Preferences menuTitleBorderColor!
Marcel Taeumel uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-mt.1142.mcz
==================== Summary ====================
Name: System-mt.1142
Author: mt
Time: 5 March 2020, 1:17:57.313611 pm
UUID: c0bcbaf5-9833-b641-ae8a-8e03d89bb84c
Ancestors: System-mt.1141
Adds support for setting a value in the current UI theme similar to retrieving it like this:
self userInterfaceTheme myBackgroundColor: Color black.
=============== Diff against System-mt.1141 ===============
Item was changed:
----- Method: UserInterfaceThemeRequest>>doesNotUnderstand: (in category 'lookup') -----
doesNotUnderstand: aMessage
"Look up the visual attribute specified by aMessage's #selector in the current theme for the current target object."
aMessage numArgs = 0 ifTrue: [
^ (self theme get: self target class -> aMessage selector)
ifNil: [(self theme respondsTo: aMessage selector)
ifTrue: [self theme perform: aMessage selector]
ifFalse: [nil "unset property"]]].
+ aMessage numArgs = 1 ifTrue: [
+ ^ self theme
+ set: self target class -> aMessage selector asSimpleGetter
+ to: aMessage arguments first].
+
^ self theme
perform: aMessage selector
withArguments: aMessage arguments.!
Nicolas Cellier uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-jr.929.mcz
==================== Summary ====================
Name: Tools-jr.929
Author: jr
Time: 30 December 2019, 3:20:08.513977 pm
UUID: 0a4d62fd-022e-1844-b6bc-db1502ab2466
Ancestors: Tools-cmm.928
Show browsed environment in Browser title if it is not the default environment.
=============== Diff against Tools-cmm.928 ===============
Item was changed:
----- Method: Browser>>defaultBrowserTitle (in category 'initialize-release') -----
defaultBrowserTitle
+ | title |
+ title := 'System Browser'.
+ ^ environment = self class environment
+ ifTrue: [title]
+ ifFalse: [title, ' on environment ', environment asString]!
- ^ 'System Browser'!
Nicolas Cellier uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-kfr.930.mcz
==================== Summary ====================
Name: Tools-kfr.930
Author: kfr
Time: 9 February 2020, 9:02:29.519512 pm
UUID: 5ba34f14-47a5-3d41-b77a-e043dad99316
Ancestors: Tools-mt.929
Form preview was displaying wrong colors. Convert preview form to screen depth to make colors display correctly
=============== Diff against Tools-mt.929 ===============
Item was changed:
----- Method: FileList>>readGraphicContents (in category 'private') -----
readGraphicContents
| form maxExtent ext |
+ form := (Form fromFileNamed: self fullName) asFormOfDepth: Display depth.
- form := Form fromFileNamed: self fullName.
maxExtent := lastGraphicsExtent := self availableGraphicsExtent.
ext := form extent.
(maxExtent notNil and: [form extent <= maxExtent]) ifFalse: [
form := form magnify: form boundingBox by: (maxExtent x / form width min: maxExtent y / form height) asPoint smoothing: 3].
contents := ('Image extent: ', ext printString) asText,
(String with: Character cr),
(Text string: ' '
attribute: (TextFontReference toFont:
(FormSetFont new
fromFormArray: (Array with: form)
asciiStart: Character space asInteger
ascent: form height))).
brevityState := #graphic.
^contents!