[squeak-dev] The Trunk: Morphic-KLC.1318.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Mar 10 22:03:40 UTC 2017
Nicolas Cellier uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-KLC.1318.mcz
==================== Summary ====================
Name: Morphic-KLC.1318
Author: KLC
Time: 10 March 2017, 3:57:38.932783 pm
UUID: 968604ea-690e-e84d-9905-e1ffc9b5dfc2
Ancestors: Morphic-bp.1317
Update Squeak Swiki link in Morph class comment.
=============== Diff against Morphic-bp.1316 ===============
Item was changed:
Object subclass: #Morph
instanceVariableNames: 'bounds owner submorphs fullBounds color extension'
classVariableNames: 'IndicateKeyboardFocus PreferredCornerRadius UseSoftDropShadow'
poolDictionaries: ''
category: 'Morphic-Kernel'!
+ !Morph commentStamp: 'KLC 3/10/2017 15:50' prior: 0!
+ A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://wiki.squeak.org/squeak/30.
- !Morph commentStamp: 'efc 2/26/2003 20:01' prior: 0!
- A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30.
Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method.
The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain.
My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly.
Structure:
instance var Type Description
bounds Rectangle A Rectangle indicating my position and a size that will enclose me.
owner Morph My parent Morph, or nil for the top-level Morph, which is a
or nil world, typically a PasteUpMorph.
submorphs Array My child Morphs.
fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs.
color Color My primary color. Subclasses can use this in different ways.
extension MorphExtension Allows extra properties to be stored without adding a
or nil storage burden to all morphs.
By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning.
Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.!
Item was changed:
MorphicModel subclass: #SystemWindow
+ instanceVariableNames: 'labelString stripes label closeBox collapseBox paneMorphs paneRects collapsedFrame fullFrame isCollapsed isActive isLookingFocused menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox savedBounds'
- instanceVariableNames: 'labelString stripes label closeBox collapseBox paneMorphs paneRects collapsedFrame fullFrame isCollapsed isActive isLookingFocused menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox'
classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand DragToEdges ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows RoundedWindowCorners TopWindow WindowTitleActiveOnFirstClick WindowsRaiseOnClick'
poolDictionaries: ''
category: 'Morphic-Windows'!
!SystemWindow commentStamp: '<historical>' prior: 0!
SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing.
The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.!
Item was changed:
----- Method: SystemWindow>>handleListenEvent: (in category 'events') -----
handleListenEvent: aUserInputEvent
"See #mouseEnterDragging:. Watch for finished drag-and-drop action and lock contents accordingly."
-
(aUserInputEvent isMouse and: [ aUserInputEvent hand hasSubmorphs not ]) ifTrue:
[ self isKeyWindow ifFalse: [ self passivateIfNeeded ].
+ aUserInputEvent hand removeMouseListener: self ].
+
+ (aUserInputEvent hand submorphs includes: self) ifTrue: [
+ | clearArea selector |
+ clearArea := ActiveWorld clearArea.
+ (self class dragToEdges and: [(selector := self dragToEdgesSelectorFor: aUserInputEvent cursorPoint in: clearArea) notNil])
+ ifTrue: [
+ savedBounds ifNil: [savedBounds := self bounds].
+ self newBounds: (clearArea perform: selector)]
+ ifFalse: [
+ savedBounds ifNotNil: [
+ self newBounds: savedBounds.
+ savedBounds := nil]]]!
- aUserInputEvent hand removeMouseListener: self ].!
Item was changed:
----- Method: SystemWindow>>justDroppedInto:event: (in category 'geometry') -----
justDroppedInto: aMorph event: anEvent
+ savedBounds := nil.
-
isCollapsed
ifTrue: [self position: ((self position max: 0 at 0) grid: 8 at 8).
collapsedFrame := self bounds]
ifFalse: [fullFrame := self bounds].
self beKeyWindow.
self hasDropShadow: Preferences menuAppearance3d. "See #startDragFromLabel:."
aMorph == self world ifTrue: [self assureLabelAreaVisible].
(Project uiManager openToolsAttachedToMouseCursor and: (self hasProperty: #initialDrop))
ifTrue: [
self removeProperty: #initialDrop.
(self submorphs detect: [:m | m isKindOf: BottomRightGripMorph] ifNone: [])
ifNotNil: [:grip |
grip
referencePoint: anEvent position;
setProperty: #targetHadDropShadow toValue: true "See MorphicToolBuilder >> #open:".
self hasDropShadow: false.
anEvent hand newMouseFocus: grip]].
^super justDroppedInto: aMorph event: anEvent!
Item was changed:
----- Method: SystemWindow>>startDragFromLabel: (in category 'events') -----
startDragFromLabel: evt
"When label events are active, we need to pass dragging to the window explicitely
The window only recognizes a drag with an offset of more than 3 pixels"
self isSticky ifTrue: [^ self].
self fastFramingOn
ifTrue: [self doFastFrameDrag: evt cursorPoint]
ifFalse: [
self hasDropShadow: false.
+ evt hand grabMorph: self topRendererOrSelf.
+ evt hand addMouseListener: self]
- evt hand grabMorph: self topRendererOrSelf]
!
More information about the Squeak-dev
mailing list
|