Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1399.mcz
==================== Summary ====================
Name: Morphic-mt.1399
Author: mt
Time: 21 February 2018, 8:30:20.139447 am
UUID: 255b694a-28f2-4d77-94e0-6eccbc80f8d3
Ancestors: Morphic-mt.1398
Fixes the use of #shadowPoint: such as via the halo control menu to configure drop shadows of morphs.
=============== Diff against Morphic-mt.1398 ===============
Item was changed:
----- Method: Morph>>shadowPoint: (in category 'drop shadows') -----
shadowPoint: newPoint
+ "Can be reset in #addDropShadow."
+
+ | delta |
+ delta := newPoint - self center.
+ self shadowOffset: (self useSoftDropShadow
+ ifTrue: [(10@8 corner: 10@12) outsetBy: delta]
+ ifFalse: [delta]).
+
+ !
- self changed.
- self shadowOffset: newPoint - self center // 5.
- fullBounds ifNotNil:[fullBounds := self privateFullBounds].
- self changed.!
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1398.mcz
==================== Summary ====================
Name: Morphic-mt.1398
Author: mt
Time: 21 February 2018, 8:16:34.893099 am
UUID: be36db5d-0096-234f-ac7c-7ae5ad6644fa
Ancestors: Morphic-mt.1397
Adds more documentation about system-window concepts: activate/passivate, look focused/unfocused, and being the "key" window on screen.
=============== Diff against Morphic-mt.1397 ===============
Item was changed:
----- Method: SystemWindow>>activate (in category 'focus') -----
activate
+ "An active window delegate user input events as usual to its contents such as buttons or lists. There is a preference to ensure that all windows stay active regardless of being focused or not. Also take a look at #passivate, #lookFocused, and #beKeyWindow."
+
- "Bring the receiver to the top. If I am modal, bring along my modal owning window and my model child as well."
-
self isActive ifTrue: [self lookFocused. ^ self].
self topRendererOrSelf owner ifNil: [^ self "avoid spurious activate when drop in trash"].
self isActive: true.
"Special handling for expanded windows."
self isCollapsed ifFalse: [
model modelWakeUpIn: self.
self positionSubmorphs].
self submorphsDo: [:each | each unlock].
self lookFocused.!
Item was changed:
----- Method: SystemWindow>>beKeyWindow (in category 'top window') -----
beKeyWindow
+ "Let me be the most important window on the screen. I am at the top and I can have a shadow to get more attention by the user. I am the window that is responsible for window keyboard shortcuts. Also see #isKeyWindow, #activate, and #lookFocused."
- "Let me be the most important window on the screen. I am at the top and I can have a shadow to get more attention by the user. I am the window that is responsible for window keyboard shortcuts."
| oldKeyWindow |
self isKeyWindow ifTrue: [^ self].
oldKeyWindow := TopWindow.
TopWindow := self.
self
unlockWindowDecorations; "here, because all windows might be active anyway"
activate; "if not already active, activate now"
comeToFront. "key windows are on top"
"Change appearance to get noticed."
self hasDropShadow: Preferences menuAppearance3d.
(self valueOfProperty: #borderWidthWhenActive)
ifNotNil: [:bw | self acquireBorderWidth: bw].
oldKeyWindow ifNotNil: [:wnd |
wnd passivateIfNeeded.
"Change appearance to not look prettier than the new key window."
wnd hasDropShadow: false.
(wnd valueOfProperty: #borderWidthWhenInactive)
ifNotNil: [:bw | wnd acquireBorderWidth: bw]].
"Synchronize focus look with position of current hand because any call could have made this window the new key window."
self updateFocusLookAtHand.!
Item was changed:
----- Method: SystemWindow>>isKeyWindow (in category 'top window') -----
isKeyWindow
+ "The key window is the window with the user's main attention. It usually has a shadow or other visual hints to separate it from other windows. Usually, the key window is at the top of the screen. On large screens, however, many windows may appear at the top. Also see #beKeyWindow, #activate, and #lookFocused."
- "The key window is the window with the user's main attention. It usually has a shadow or other visual hints to separate it from other windows. Usually, the key window is at the top of the screen. On large screens, however, many windows may appear at the top."
^ self == self class keyWindow!
Item was changed:
----- Method: SystemWindow>>lookFocused (in category 'focus') -----
lookFocused
+ "Some elements of windows change visually depending on the user input focus. This is property is orthogonal to being active or passive. Active windows can either look focused or unfocused. Passive windows will always look unfocused. Also see #lookUnfocused, #activate, #passivate, and #beKeyWindow."
- "Optimize performance."
self isLookingFocused ifTrue: [^ self].
self isLookingFocused: true.
label ifNotNil: [ label color: (self userInterfaceTheme focusedLabelColor ifNil: [Color black]) ].
(self isKeyWindow or: [self class windowTitleActiveOnFirstClick])
ifTrue: [self undimWindowButtons].
self paneColorToUse in: [ : col |
self
setStripeColorsFrom: col ;
adoptPaneColor: col].!
Item was changed:
----- Method: SystemWindow>>lookUnfocused (in category 'focus') -----
lookUnfocused
+ "See #lookFocused, #activate, and #passivate."
- "Optimize performance."
self isLookingFocused ifFalse: [^ self].
self isLookingFocused: false.
label ifNotNil: [ label color: (self userInterfaceTheme unfocusedLabelColor ifNil: [Color darkGray]) ].
self dimWindowButtons.
self paneColorToUseWhenNotActive in: [ : col |
self
setStripeColorsFrom: col ;
adoptPaneColor: col ]!
Item was changed:
----- Method: SystemWindow>>passivate (in category 'focus') -----
passivate
+ "A passive window's contents do not handle user input events until being activated, for example, by a single extra mouse click. There is a preference to configure whether windows can be passive at all. Also see #activate and #lookUnfocused."
- "Reconfigure my focus according to preferences."
self isActive ifFalse: [^ self].
self isActive: false.
self isCollapsed ifFalse: [model modelSleep].
self submorphsDo: [:each | each lock].
self activeHand keyboardFocus ifNotNil: [:morph |
morph containingWindow == self
ifTrue: [self activeHand releaseKeyboardFocus]].
self lookUnfocused.!
Hi all,
About a year ago I accidentally a small Erlang-style Actors
implementation for Squeak, based on subclassing Process, using Message
for, er, messages, and using Promise for RPC.
It draws on my experience of Erlang programming in a few ways: it has
links and monitors for between-actor failure signalling; it has library
actors representing sockets; it has a simple tracing facility. There's
crude and no doubt heavily problematic support for basic Morphic
interaction.
Over the past couple of weeks I've been dusting it off, fleshing it out,
and documenting it. (Hence some of the stuff I've been trying out wrt
Promises.)
It's available at http://squeaksource.com/Actors.html.
Installation instructions, documentation and tutorials can be found at
https://tonyg.github.io/squeak-actors/
(I spent rather too much time writing documentation.)
It's by no means as ambitious as Squeak-E or Henry's Raven - it only
deals with single-image in-image messaging between actors, and doesn't
have the E-style ability to refer to objects within a vat. Instead it
follows Erlang in having references denote actors (i.e. vats, roughly),
rather than anything more fine-grained.
Next steps could be:
- a Workspace that was actor aware, i.e. each Workspace an actor.
- better Supervisors.
- tools for visualizing the current constellation of actors,
perhaps based on Ned Konz's Connectors?
- an ActorEventTrace subclass that is able to draw message interaction
diagrams as a Morph.
- a screencast of building an IRC client maybe?
Cheers,
Tony
PS. I did try to port it to Pharo. The first obstacle was lack of class
Promise - fairly easily overcome. The second, worse obstacle was weird
failures and incompatibilities in Socket support. I gave up at that point.
PPS. I'd love to see it running on Cuis.
Inria opended a call for experienced researchers. This is a three year contract, with in total 8 research positions.
REQUIREMENTS
- Have a French doctorate or an equivalent international degree
- Be able to prove at least eight years of research and/or post-doctoral academic or industrial experience;
- No age or nationality conditions.
- Deadline: April 3rd, 2018
Before writing their research program, the applicants are strongly encouraged to contact the teams
or project(s)-teams leaders concerned by their applications. More information on the official website:
https://www.inria.fr/en/institute/recruitment/offers/advanced-research-posi… <https://www.inria.fr/en/institute/recruitment/offers/advanced-research-posi…>
MISSION
Join one of our two lines of research: Tools for Software Maintenance or New Programming
Language Constructs for Software Evolution.
THE REGION
Lille is strategically located in Northern Europe with train connections to Paris (1h), London (1h30)
and Brussels (30 min.) The Nord Pas de Calais region is a dynamic area in both industry and research
for computer science with companies that are european leaders in their branch. Lille, the capital of
northern France is an attractive metropolis of over 1 million inhabitants. Cost of living in Lille is lower
than that of very big cities such as Paris and London.
THE TEAM
RMoD is an Inria research project team. It consists of 5 permant researchers (Inria CR and DR, as
well as University Assistant Professors) and Engineers, postdocs and students (Master and PhD).
RMoD is an international team with around 20 members from six countries.
LINKS:
RMoD: http://rmod.lille.inria.fr <http://rmod.lille.inria.fr/>
INRIA Lille: http://www.inria.fr/lille/ <http://www.inria.fr/lille/>
INRIA in General: http://www.inria.fr <http://www.inria.fr/>
Lille:
http://en.wikipedia.org/wiki/Lille <http://en.wikipedia.org/wiki/Lille>
http://wikitravel.org/en/Lille <http://wikitravel.org/en/Lille>
Please contact the head of the research team: Stephane.Ducasse(a)inria.fr <mailto:Stephane.Ducasse@inria.fr> or one
of the following group members: Nicolas.Anquetil(a)inria.fr <mailto:Nicolas.Anquetil@inria.fr>, Marcus.Denker(a)inria.fr <mailto:Marcus.Denker@inria.fr>
Permanent Link: https://rmod.inria.fr/web/blog/2018-02-17 <https://rmod.inria.fr/web/blog/2018-02-17>
Inria opended a call for starting researchers. This is a three year contract.
REQUIREMENTS
- Have a French doctorate or an equivalent international degree
- From 2 to 8 years of experience in research (after the thesis)
- No age or nationality conditions.
- Deadline: April 3rd, 2018
Before writing their research program, the applicants are strongly encouraged to contact the teams
or project(s)-teams leaders concerned by their applications. More information on the official website:
https://www.inria.fr/en/institute/recruitment/offers/starting-research-posi…
MISSION
Join one of our two lines of research: Tools for Software Maintenance or New Programming
Language Constructs for Software Evolution.
THE REGION
Lille is strategically located in Northern Europe with train connections to Paris (1h), London (1h30)
and Brussels (30 min.) The Nord Pas de Calais region is a dynamic area in both industry and research
for computer science with companies that are european leaders in their branch. Lille, the capital of
northern France is an attractive metropolis of over 1 million inhabitants. Cost of living in Lille is lower
than that of very big cities such as Paris and London.
THE TEAM
RMoD is an Inria research project team. It consists of 5 permant researchers (Inria CR and DR, as
well as University Assistant Professors) and Engineers, postdocs and students (Master and PhD).
RMoD is an international team with more than 20 members from six countries.
LINKS:
RMoD: http://rmod.lille.inria.fr
INRIA Lille: http://www.inria.fr/lille/
INRIA in General: http://www.inria.fr
Lille:
http://en.wikipedia.org/wiki/Lillehttp://wikitravel.org/en/Lille
Please contact the head of the research team: Stephane.Ducasse(a)inria.fr or one
of the following group members: Nicolas.Anquetil(a)inria.fr, Marcus.Denker(a)inria.fr
Permanent Link: https://rmod.inria.fr/web/blog/2018-02-19
David T. Lewis uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-dtl.222.mcz
==================== Summary ====================
Name: MorphicExtras-dtl.222
Author: dtl
Time: 19 February 2018, 9:58:54.987645 pm
UUID: 7d4e14dd-aad7-4cf8-8f68-41e1381c4727
Ancestors: MorphicExtras-tpr.221
FlapTab>>positionObject: anObject atEdgeOf: container expects container to be a Morph, not a Rectangle. Make it so when sending from FlapTab>>positionObject.
Fixes flap opening in a Worldlet, such as the flap tabs in "EventRecordingSpace open".
=============== Diff against MorphicExtras-tpr.221 ===============
Item was changed:
----- Method: FlapTab>>positionObject: (in category 'positioning') -----
positionObject: anObject
"anObject could be myself or my referent"
+ | pum clearArea |
- "Could consider container := referent pasteUpMorph, to allow flaps on things other than the world, but for the moment, let's skip it!!"
-
- "19 sept 2000 - going for all paste ups"
-
- | pum |
pum := self pasteUpMorph ifNil: [^ self].
+ clearArea := Morph newBounds: pum clearArea.
^self
positionObject: anObject
+ atEdgeOf: clearArea!
- atEdgeOf: pum clearArea!
David T. Lewis uploaded a new version of 51Deprecated to project The Trunk:
http://source.squeak.org/trunk/51Deprecated-dtl.52.mcz
==================== Summary ====================
Name: 51Deprecated-dtl.52
Author: dtl
Time: 19 February 2018, 7:41:19.828484 pm
UUID: 13333f50-41fe-49bb-a577-d20ef5afcff9
Ancestors: 51Deprecated-dtl.51
Do not deprecate PastePuMorph>>privateOuterDisplayWorld, see Morphic-dtl.1396.
=============== Diff against 51Deprecated-dtl.51 ===============
Item was removed:
- ----- Method: PasteUpMorph>>privateOuterDisplayWorld (in category '*51Deprecated-Morphic') -----
- privateOuterDisplayWorld
-
- self deprecated.
- worldState displayWorld: self submorphs: submorphs
- !
David T. Lewis uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-dtl.1396.mcz
==================== Summary ====================
Name: Morphic-dtl.1396
Author: dtl
Time: 18 February 2018, 4:53:20.499469 pm
UUID: 19d166b4-6992-40eb-b115-f0d605c9307b
Ancestors: Morphic-dtl.1395
For world-in-world uses such as a Worldlet, displayWorld should act upon the outermost containing world morph. Restore this behavior by un-deprecating PasteUpMorph>>privateOuterDisplayWorld and updating its implementation to match the current PasteUpMorph>>displayWorld, then reverting to the original version of PasteUpMorph>>displayWorld, which sends privateOuterDisplayWorld to the outermost world morph (which usually is self).
See discussion in [squeak-dev] Event Theatre in Object Catalog sparks DNU in 6.0-trunk
=============== Diff against Morphic-dtl.1395 ===============
Item was changed:
----- Method: PasteUpMorph>>displayWorld (in category 'world state') -----
displayWorld
+ self outermostWorldMorph privateOuterDisplayWorld
+ !
- (self valueOfProperty: #shouldDisplayWorld ifAbsent: [true])
- ifTrue: [worldState displayWorld: self submorphs: submorphs].!
Item was added:
+ ----- Method: PasteUpMorph>>privateOuterDisplayWorld (in category 'world state') -----
+ privateOuterDisplayWorld
+
+ (self valueOfProperty: #shouldDisplayWorld ifAbsent: [true])
+ ifTrue: [worldState displayWorld: self submorphs: submorphs].!
David T. Lewis uploaded a new version of Morphic to project The Inbox:
http://source.squeak.org/inbox/Morphic-dtl.1397.mcz
==================== Summary ====================
Name: Morphic-dtl.1397
Author: dtl
Time: 18 February 2018, 7:47:52.917246 pm
UUID: e43a00c9-b146-4838-b631-d0210ddb934b
Ancestors: Morphic-dtl.1396
Implement Rectangle>>innerBounds to support morphic geometry calculations, e.g. for flap layout positioning. Allows flaps in a Worldlet to function properly.
=============== Diff against Morphic-dtl.1396 ===============
Item was added:
+ ----- Method: Rectangle>>innerBounds (in category '*Morphic') -----
+ innerBounds
+ "Return the inner rectangle enclosed by the bounds of this rectangle or
+ morph. A rectangle may represent an interior region of a morph."
+
+ ^ self
+ !