[squeak-dev] The Inbox: Morphic-cmm.1614.mcz

Marcel Taeumel marcel.taeumel at hpi.de
Mon Jan 6 10:26:35 UTC 2020


With Tools-mt.929, I put a simple workaround for this into Trunk.

This topic needs further discussion as it adresses multiple concerns.

Also see: http://forum.world.st/The-Inbox-Morphic-cmm-1615-mcz-td5109271.html [http://forum.world.st/The-Inbox-Morphic-cmm-1615-mcz-td5109271.html] :-)

Best,
Marcel
Am 02.01.2020 03:32:02 schrieb commits at source.squeak.org <commits at source.squeak.org>:
Chris Muller uploaded a new version of Morphic to project The Inbox:
http://source.squeak.org/inbox/Morphic-cmm.1614.mcz

==================== Summary ====================

Name: Morphic-cmm.1614
Author: cmm
Time: 1 January 2020, 8:31:35.610123 pm
UUID: 563f11e4-b784-40b6-af72-03338e6069ad
Ancestors: Morphic-mt.1612

When a text selection cannot fit into its text pane, show its upper-left, rather than its lower-right, so stepping through code in a small window is possible.

=============== Diff against Morphic-mt.1612 ===============

Item was changed:
----- Method: PluggableTextMorph>>scrollSelectionIntoView: (in category 'editor access') -----
scrollSelectionIntoView: event
"Scroll my text into view. Due to line composition mechanism, we must never use the right of a character block because the lines last character block right value always comes from a global container and is *not* line specific."
+ self flag: #fixIntervalCache.
+ "mt: We should find a better design for discarding unused text editors in text morphs and restoring them on demand."
-
- self flag: #fixIntervalCache. "mt: We should find a better design for discarding unused text editors in text morphs and restoring them on demand."
selectionInterval := textMorph editor markIndex to: textMorph editor pointIndex - 1.
+ self scrollToShow:
+ (textMorph editor hasSelection
+ ifTrue: [ textMorph editor startBlock topLeft corner: textMorph editor stopBlock bottomLeft ]
+ ifFalse: [ textMorph editor startBlock withWidth: 1 ]).
-
- textMorph editor hasSelection
- ifFalse: [self scrollToShow: (textMorph editor startBlock withWidth: 1)]
- ifTrue: [
- self scrollToShow: (textMorph editor startBlock topLeft corner: textMorph editor stopBlock bottomLeft).
- self scrollToShow: (textMorph editor pointBlock withWidth: 1). "Ensure text cursor visibility."].
-
^ true!

Item was changed:
----- Method: ScrollPane>>keyStroke: (in category 'event handling') -----
+ keyStroke: aKeyboardEvent
+ "If pane is not empty, let the last submorph handle the event."
+ scroller submorphs ifNotEmpty: [ : subs | subs last keyStroke: aKeyboardEvent ]!
- keyStroke: evt
- "If pane is not empty, pass the event to the last submorph,
-  assuming it is the most appropriate recipient (!!)"
-
- scroller submorphs last keyStroke: evt!

Item was changed:
----- Method: ScrollPane>>offsetToShow: (in category 'scrolling') -----
offsetToShow: aRectangle
"Calculate the offset necessary to show the rectangle."

| offset scrollRange target |
self fullBounds. "We need updated bounds."
offset := scroller offset.
scrollRange := self hTotalScrollRange @ self vTotalScrollRange.

"Normalize the incoming rectangle."
target :=
+ aRectangle left @ aRectangle top
- (scroller width
- ifTrue: [offset x
- ifTrue: [aRectangle right - scroller width]
- ifFalse: [aRectangle left]]
- ifFalse: [aRectangle left])
- @
- (scroller height
- ifTrue: [offset y
- ifTrue: [aRectangle bottom - scroller height]
- ifFalse: [aRectangle top]]
- ifFalse: [aRectangle top])
corner:
(scroller width
ifTrue: [offset x + scroller width > aRectangle right "Coming from right?"
ifTrue: [aRectangle left + scroller width]
ifFalse: [aRectangle right]]
ifFalse: [aRectangle right])
@
(scroller height
ifTrue: [offset y + scroller height > aRectangle bottom "Coming from bottom?"
ifTrue: [aRectangle top + scroller height]
ifFalse: [aRectangle bottom]]
ifFalse: [aRectangle bottom]).

"Vertical Scrolling"
- target top
- ifTrue: [offset := offset x @ target top].
target bottom > (offset y + scroller height)
ifTrue: [offset := offset x @ (target bottom - scroller height)].
+ target top
+ ifTrue: [offset := offset x @ target top].

"Horizontal Scrolling"
- target left
- ifTrue: [offset := target left @ offset y].
target right > (offset x + scroller width)
ifTrue: [offset := (target right - scroller width) @ offset y].
+ target left
+ ifTrue: [offset := target left @ offset y].

^ (offset min: scrollRange - scroller extent) max: 0 at 0!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200106/de269961/attachment.html>


More information about the Squeak-dev mailing list