[Pkg] The Trunk: Morphic-mt.982.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue May 19 14:23:11 UTC 2015
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.982.mcz
==================== Summary ====================
Name: Morphic-mt.982
Author: mt
Time: 19 May 2015, 4:22:25.19 pm
UUID: a0f7d55f-83af-db48-9b48-472af0a98f38
Ancestors: Morphic-mt.981
Fixed several bugs related to scrolling in scroll panes, lists, or text fields.
This update makes all tests for scroll panes green.
=============== Diff against Morphic-mt.981 ===============
Item was added:
+ ----- Method: PluggableListMorph>>offsetToShow: (in category 'scrolling') -----
+ offsetToShow: aRectangle
+ "Due to the approximation of the horizontal scroll range and the primary interaction along the vertical axis, we snap back to 0 on the horizontal axis."
+
+ ^ 0 @ (super offsetToShow: aRectangle) y!
Item was changed:
----- Method: ScrollPane>>hScrollBarValue: (in category 'scrolling') -----
hScrollBarValue: scrollValue
scroller hasSubmorphs ifFalse: [^ self].
lockOffset == true ifFalse: [
+ scroller offset: (scrollValue max: 0) @ scroller offset y].
- scroller offset: scrollValue @scroller offset y].
!
Item was changed:
----- Method: ScrollPane>>handleResizeAction: (in category 'geometry') -----
handleResizeAction: aBlock
"Ensure layout properties after resizing takes place."
+ | oldExtent |
+ oldExtent := self extent.
- | oldW oldH |
- oldW := self width.
- oldH := self height.
aBlock value ifFalse: [^ self].
"Now reset widget sizes"
+ self extent ~= oldExtent ifTrue: [
+ self
+ resizeScrollBars;
+ resizeScroller;
+ setScrollDeltas].!
- self
- resizeScrollBars;
- resizeScroller;
- hideOrShowScrollBars.
-
- "Now resetScrollDeltas where appropriate."
- self height ~~ oldH ifTrue: [self vSetScrollDelta].
- self width ~~ oldW ifTrue: [self hSetScrollDelta].!
Item was changed:
----- Method: ScrollPane>>offsetToShow: (in category 'scrolling') -----
offsetToShow: aRectangle
"Calculate the offset necessary to show the rectangle."
+ | offset scrollRange target |
- | offset scrollRange |
offset := scroller offset.
+ scrollRange := self hTotalScrollRange @ self vTotalScrollRange.
+
+ "Normalize the incoming rectangle."
+ target :=
+ (scroller width < aRectangle width
+ ifTrue: [offset x < aRectangle left "Coming from left?"
+ ifTrue: [aRectangle right - scroller width]
+ ifFalse: [aRectangle left]]
+ ifFalse: [aRectangle left])
+ @
+ (scroller height < aRectangle height
+ ifTrue: [offset y < aRectangle top "Coming from top?"
+ ifTrue: [aRectangle bottom - scroller height]
+ ifFalse: [aRectangle top]]
+ ifFalse: [aRectangle top])
+ corner:
+ (scroller width < aRectangle width
+ ifTrue: [offset x + scroller width > aRectangle right "Coming from right?"
+ ifTrue: [aRectangle left + scroller width]
+ ifFalse: [aRectangle right]]
+ ifFalse: [aRectangle right])
+ @
+ (scroller height < aRectangle height
+ ifTrue: [offset y + scroller height > aRectangle bottom "Coming from bottom?"
+ ifTrue: [aRectangle top + scroller height]
+ ifFalse: [aRectangle bottom]]
+ ifFalse: [aRectangle bottom]).
- scrollRange := self hUnadjustedScrollRange @ self vUnadjustedScrollRange.
"Vertical Scrolling"
+ target top < offset y
+ ifTrue: [offset := offset x @ target top].
+ target bottom > (offset y + scroller height)
+ ifTrue: [offset := offset x @ (target bottom - scroller height)].
- (aRectangle top - offset y) < 0
- ifTrue: [offset := offset x @ (
- (aRectangle top min: scrollRange y - scroller height))].
-
- ((aRectangle bottom - offset y) > scroller height and: [aRectangle height <= scroller height])
- ifTrue: [offset := offset x @ (
- (aRectangle top - scroller height + aRectangle height min: scrollRange y - scroller height))].
"Horizontal Scrolling"
+ target left < offset x
+ ifTrue: [offset := target left @ offset y].
+ target right > (offset x + scroller width)
+ ifTrue: [offset := (target right - scroller width) @ offset y].
- (aRectangle left - offset x) < 0
- ifTrue: [offset := (
- (aRectangle left min: scrollRange x - scroller width)) @ offset y].
-
- ((aRectangle right - offset x) > scroller width and: [aRectangle width <= scroller width])
- ifTrue: [offset := (
- (aRectangle left - scroller width + aRectangle width min: scrollRange x - scroller width)) @ offset y].
+ ^ (offset min: scrollRange - scroller extent) max: 0 at 0!
- ^ offset!
Item was changed:
----- Method: ScrollPane>>vScrollBarValue: (in category 'scrolling') -----
vScrollBarValue: scrollValue
scroller hasSubmorphs ifFalse: [^ self].
lockOffset == true ifFalse: [
+ scroller offset: scroller offset x @ (scrollValue max: 0)].
- scroller offset: scroller offset x @ scrollValue].
!
More information about the Packages
mailing list