@@ -36,19 +36,12 @@ BrEditor >> beReadOnlyWithoutSelection [
36
36
37
37
{ #category : #accessing }
38
38
BrEditor >> computeVerticalScrollExtent [
39
- ^ (self layout
40
- findFirstVisibleChildClosestToEndCompletelyVisible: true
41
- acceptPartiallyVisible: true ) segment textEnd
42
- - (self layout
43
- findFirstVisibleChildClosestToStartCompletelyVisible: true
44
- acceptPartiallyVisible: true ) segment textStart
39
+ ^ self lastVisibleSegment textEnd - self firstVisibleSegment textStart
45
40
]
46
41
47
42
{ #category : #accessing }
48
43
BrEditor >> computeVerticalScrollOffset [
49
- ^ (self layout
50
- findFirstVisibleChildClosestToStartCompletelyVisible: true
51
- acceptPartiallyVisible: true ) segment textStart
44
+ ^ self firstVisibleSegment textStart
52
45
]
53
46
54
47
{ #category : #accessing }
@@ -101,6 +94,13 @@ BrEditor >> editor: aBrTextEditor [
101
94
aBrTextEditor consumeClickEvent: false
102
95
]
103
96
97
+ { #category : #accessing }
98
+ BrEditor >> firstVisibleSegment [
99
+ ^ (self layout
100
+ findFirstVisibleChildClosestToStartCompletelyVisible: true
101
+ acceptPartiallyVisible: true ) segment
102
+ ]
103
+
104
104
{ #category : #initialization }
105
105
BrEditor >> initialize [
106
106
super initialize.
@@ -120,6 +120,7 @@ BrEditor >> initialize [
120
120
121
121
self when: BlMouseUpEvent do: [ :anEvent | anEvent consumed: true ].
122
122
self when: BlClickEvent do: [ :anEvent | anEvent consumed: true ].
123
+ self when: BrScrollByWish do: [:aWish | self onScrollBy: aWish]
123
124
]
124
125
125
126
{ #category : #' api - editor' }
@@ -148,13 +149,30 @@ BrEditor >> isReadOnly [
148
149
^ self viewModel mode isReadOnly
149
150
]
150
151
152
+ { #category : #accessing }
153
+ BrEditor >> lastVisibleSegment [
154
+ ^ (self layout
155
+ findFirstVisibleChildClosestToEndCompletelyVisible: true
156
+ acceptPartiallyVisible: true ) segment
157
+ ]
158
+
151
159
{ #category : #' editor - operations' }
152
160
BrEditor >> navigator [
153
161
< return: #BrTextEditorNavigator >
154
162
155
163
^ self editor navigator
156
164
]
157
165
166
+ { #category : #' api - scrolling' }
167
+ BrEditor >> onScrollBy: aWish [
168
+ | position linesOnScreen |
169
+ position := aWish delta y asInteger.
170
+ linesOnScreen := self lastVisibleSegment index - self firstVisibleSegment index.
171
+ position > self computeVerticalScrollExtent
172
+ ifTrue: [ self scrollToPosition: self lastVisibleSegment index + linesOnScreen ]
173
+ ifFalse: [ self scrollToPosition: self firstVisibleSegment index - linesOnScreen ]
174
+ ]
175
+
158
176
{ #category : #' editor - operations' }
159
177
BrEditor >> selecter [
160
178
< return: #BrTextEditorSelecter >
0 commit comments