[squeak-dev] The Trunk: Morphic-cmm.1463.mcz

karl ramberg karlramberg at gmail.com
Fri Sep 14 16:27:02 UTC 2018


Nice, halo activation works again :-D

Best,
Karl

On Fri, Sep 7, 2018 at 9:38 PM <commits at source.squeak.org> wrote:

> Chris Muller uploaded a new version of Morphic to project The Trunk:
> http://source.squeak.org/trunk/Morphic-cmm.1463.mcz
>
> ==================== Summary ====================
>
> Name: Morphic-cmm.1463
> Author: cmm
> Time: 7 September 2018, 2:37:21.377647 pm
> UUID: c11ac7b7-0b5b-4814-87d3-9c8eb2b62bce
> Ancestors: Morphic-cmm.1462
>
> - Fix halo-invocation on a rotated Morph when halos are on the World.
> - Provide access to the TextIndent attribute on the alignment menu.
> - Fix a NonBooleanReceiver error that appeared when pressing backspace on
> a read-only text field.
>
> =============== Diff against Morphic-cmm.1462 ===============
>
> Item was changed:
>   ----- Method: PasteUpMorph>>tryInvokeHalo: (in category
> 'events-processing') -----
>   tryInvokeHalo: aUserInputEvent
>         "Invoke halos around the top-most world container at
> aUserInputEvent's #position.  If it was already halo'd, zero-in on its next
> inward component morph at that position.  Holding Shift during the click
> reverses this traversal order."
>         | stack innermost haloTarget |
>         Preferences noviceMode ifTrue: [ ^ self ].
>         Morph haloForAll ifFalse: [ ^ self ].
>         "the stack is the top-most morph to bottom-most."
>         stack := (self morphsAt: aUserInputEvent position unlocked: true)
> select:
>                 [ : each | each wantsHaloFromClick or: [ each
> handlesMouseDown: aUserInputEvent ] ].
>         innermost := aUserInputEvent hand halo
>                 ifNil: [ stack first ]
>                 ifNotNil:
>                         [ : existingHalo | stack allButFirst "existingHalo
> is first on the stack, not a target"
>                                 detect: [ : each | each owner == self ]
>                                 ifFound:
>                                         [ : worldContainer | "Is
> existingHalo's target part of the same worldContainer as the morph clicked?"
>                                         (existingHalo target withAllOwners
> includes: worldContainer)
> +                                               ifTrue: [ "same hierarchy,
> let #transferHalo: continue to handle it for now."  ^self ]
> -                                               ifTrue: [ "same hierarchy,
> let #transferHalo: continue to handle it for now."  ^ self ]
>                                                 ifFalse:
>                                                         [ "different
> hierarchy, remove + add."
>                                                         aUserInputEvent
> hand removeHalo.
>                                                         aUserInputEvent
> shiftPressed
>                                                                 ifTrue: [
> stack second "first is still the just removed halo" ]
>                                                                 ifFalse: [
> worldContainer ] ] ]
> +                               ifNone: [ "existingHalo is on the World,
> defer to #transferHalo: for now."  ^self ] ].
> -                               ifNone: [ "Shouldn't get here, but
> defensive code."  self ] ].
>         "If modifier key is pressed, start at innermost (the target),
> otherwise the outermost (direct child of the world (self))."
>         haloTarget  := (innermost == self or: [aUserInputEvent
> shiftPressed])
>                 ifTrue: [ innermost ]
>                 ifFalse:
>                          [ "Find the outermost owner that wants it."
>                         innermost withAllOwners reversed allButFirst
>                                 detect: [ : each | each wantsHaloFromClick
> ]
>                                 ifNone: [ "haloTarget has its own
> mouseDown handler, don't halo."  ^ self ] ].
>         "Now that we have the haloTarget, show the halo."
>         aUserInputEvent hand
>                 newMouseFocus: haloTarget
>                 event: aUserInputEvent.
>         haloTarget invokeHaloOrMove: aUserInputEvent.
>         "aUserInputEvent has been consumed, don't let it cause any further
> side-effects."
>         aUserInputEvent ignore!
>
> Item was changed:
>   ----- Method: TextEditor>>backTo: (in category 'typing support') -----
>   backTo: startIndex
>         "During typing, backspace to startIndex. If there already is a
> selection, just delete that selection. Otherwise, check if we did something
> else than backward-deletion and start a new command if so."
>
> +       morph readOnly ifTrue: [^ false].
> -       morph readOnly ifTrue: [^ self].
>
>         self hasSelection ifTrue: [
>                 "Add checkpoint in undo history."
>                 self replaceSelectionWith: self nullText.
>                 ^ true].
>
>         startIndex > self text size ifTrue: [^ false].
>
>         self selectInvisiblyFrom: startIndex to: self stopIndex-1.
>
>         self isTypingIn ifTrue: [
>                 self history current type = #backward
>                         ifFalse: [self closeTypeIn]
>                         ifTrue: [
>                                 "Accumulate all deleted characters in
> current undo command."
>                                 self history current contentsBefore
> replaceFrom: 1 to: 0 with: self selection.
>                                 self history current intervalBefore in:
> [:i |
>                                         self history current
> intervalBefore: (startIndex to: i last)]]].
>
>         self openTypeInFor: #backward.
>         self zapSelectionWith: self nullText.
>
>         ^ false!
>
> Item was changed:
>   ----- Method: TextEditor>>changeAlignment (in category 'menu messages')
> -----
>   changeAlignment
> +       | options reply |
> +       options := self existingIndentation
> +               caseOf:
> +                       {[0]-> [ #('leftFlush' 'indented' 'centered'
> 'justified' 'rightFlush') ].
> +                       [1] -> [ #('leftFlush' 'indented more' 'centered'
> 'justified' 'rightFlush') ]}
> +               otherwise: [ #('leftFlush' 'indented less' 'indented more'
> 'centered' 'justified' 'rightFlush') ].
> +       reply := UIManager default chooseFrom: options values: options.
> +       reply ifNil: [ ^ self ].
> -       | aList reply  |
> -       aList := #(leftFlush centered justified rightFlush).
> -       reply := UIManager default chooseFrom: aList values: aList.
> -       reply ifNil:[^self].
>         self setAlignment: reply.
>         paragraph composeAll.
>         self recomputeSelection.
>         ^ true!
>
> Item was added:
> + ----- Method: TextEditor>>existingIndentation (in category 'private')
> -----
> + existingIndentation
> +       ^ paragraph text indentationAmountAt: (self encompassLine: self
> selectionInterval)!
>
> Item was changed:
>   ----- Method: TextEditor>>setAlignment: (in category 'menu messages')
> -----
> + setAlignment: selectionString
> +       | attr interval  |
> +       attr := selectionString
> +               caseOf:
> +                       { [ 'indented' ] -> [ TextIndent amount: 1 ].
> +                       [ 'indented more' ] -> [ TextIndent amount: self
> existingIndentation+1 ].
> +                       [ 'indented less' ] -> [  TextIndent amount: (self
> existingIndentation-1 max: 0) ]}
> +               otherwise:
> +                       [ TextAlignment perform: selectionString asSymbol
> ].
> - setAlignment: aSymbol
> -       | attr interval |
> -       attr := TextAlignment perform: aSymbol.
>         interval := self encompassLine: self selectionInterval.
> +       paragraph
> -       paragraph
>                 replaceFrom: interval first
>                 to: interval last
>                 with: ((paragraph text copyFrom: interval first to:
> interval last) addAttribute: attr)!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20180914/3101dc78/attachment.html>


More information about the Squeak-dev mailing list