[squeak-dev] The Trunk: Morphic-KLC.1318.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Mar 10 22:51:24 UTC 2017


Maybe I moved it a bit fast to trunk because it's based on Morphic-bp.1317
But Morphic-bp.1317 does not work that great for me:
After activating Drag To Edges and disabling fastDragWindowForMorphic,
windows are effectively resized...
But they are kind of bouncing on the edge when I release mouse button
Well it's not catastrophic, but needs more care.
I'll wait a bit before merging.

2017-03-10 23:03 GMT+01:00 <commits at source.squeak.org>:

> 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]
>   !
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20170310/b09a28e8/attachment.html>


More information about the Squeak-dev mailing list