Nathan Sobo
cd77870286
In presenter, handle the first line being soft-wrapped
...
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com >
2015-02-03 15:05:44 -07:00
Nathan Sobo
75652e36d9
Remove ? guard from ::oldState and ::newState references
2015-02-03 15:05:44 -07:00
Nathan Sobo
9991cd73c7
Reference scrollingVertically in the proper location in presenter state
2015-02-03 15:05:44 -07:00
Nathan Sobo
ac215e11b4
Fix velocity scrolling upward
...
There’s no need to check that the mouseWheelScreenRow is on screen
before preserving the corresponding line.
2015-02-03 15:05:44 -07:00
Nathan Sobo
20ce35c017
Emit update events in TextEditorPresenter when highlights are removed
2015-02-03 15:05:44 -07:00
Nathan Sobo
edd595a72f
Access mouseWheelScreenRow property instead of calling removed method
2015-02-03 15:05:43 -07:00
Nathan Sobo
0a6116a785
Fix undefined method errors in overlay manager
...
Access properties directly now
2015-02-03 15:05:43 -07:00
Nathan Sobo
2dc29a60ef
Avoid full decorations query when decorations are added
2015-02-03 15:05:43 -07:00
Nathan Sobo
b78522d8e6
Avoid full decoration query when line decorations’ markers change
2015-02-03 15:05:43 -07:00
Nathan Sobo
c6f23c2edb
Dispose of decoration subscriptions when it’s destroyed
2015-02-03 15:05:43 -07:00
Nathan Sobo
342903567e
Avoid full decoration query when line decorations are destroyed
2015-02-03 15:05:43 -07:00
Nathan Sobo
648c58d41e
Hide line decorations for invalid markers again
2015-02-03 15:05:42 -07:00
Nathan Sobo
7deb411e84
Fix randomized spec failures
2015-02-03 15:05:42 -07:00
Nathan Sobo
cf50ec1861
Fix action logging in random spec
2015-02-03 15:05:42 -07:00
Nathan Sobo
4a74d4adba
Avoid decoration queries when updating individual highlight decorations
2015-02-03 15:05:42 -07:00
Nathan Sobo
f337553a70
Handle highlight state updates in ::updateDecorations
2015-02-03 15:05:42 -07:00
Nathan Sobo
0e85efdd28
🐎 Cache line/line-number decorations to avoid per-line queries
2015-02-03 15:05:34 -07:00
Nathan Sobo
3884a30f39
Unify decoration observation
2015-02-03 15:05:33 -07:00
Nathan Sobo
f99b85a299
Use properties directly instead of getters
...
This will emphasize a design where everything is updated when the model
and view measurements change rather than recomputed as needed.
2015-02-03 15:05:33 -07:00
Nathan Sobo
de5c1fc28d
Add randomized fuzz test for TextEditorPresenter
...
This test performs random operations on the editor and assigns random
measurements from the view. After each operation, the state of a
pre-existing presenter is compared with that of a new presenter created
with the same parameters.
Since it’s easier to reason about building fresh state than it is to
reason about state updates, I hope this will catch any bugs in our
update logic as we optimize it and explore every corner case.
2015-02-03 15:05:33 -07:00
Nathan Sobo
89344c6cfd
Update scrollbars state when editor content changes
2015-02-03 15:05:33 -07:00
Nathan Sobo
74e4756ef0
🐎 Don’t update presenter state unless measurements change
2015-02-03 15:05:33 -07:00
Nathan Sobo
510520d2c7
🎨 rename ::getStart/EndRow to ::computeStart/EndRow
2015-02-03 15:05:32 -07:00
Nathan Sobo
4eb39b1be2
Remove unnecessary onDidChangeSoftWrapped subscription
2015-02-03 15:05:32 -07:00
Nathan Sobo
9d507ea692
Break out state updates explicitly when editor content changes
2015-02-03 15:05:32 -07:00
Nathan Sobo
f005b2005f
Add specs for updating scrollWidth when the longest line changes
2015-02-03 15:05:32 -07:00
Nathan Sobo
b521e8dc97
Handle auto-height in TextEditorPresenter
2015-02-03 15:05:32 -07:00
Nathan Sobo
bbc1a264b5
Make each section of presenter state self-contained
...
This means we have some duplicated values in different parts of the
tree, but it’s cleaner in the view since each component only consumes
a single object. Seems like the presenter should convey the correct
data to the correct locations and minimize the logic in the view. A
few duplicated integers is a reasonable trade-off.
2015-02-03 15:05:31 -07:00
Nathan Sobo
da4b3a47ef
Don’t observe decorations in text editor view
2015-02-03 15:05:31 -07:00
Nathan Sobo
0e27bebbb3
Fix indentation
2015-02-03 15:05:31 -07:00
Nathan Sobo
efdba9fc24
Use presenter state for scrollbars and scrollbar corner
2015-02-03 15:05:31 -07:00
Nathan Sobo
0910e86357
Add .right and .bottom to presenter scrollbar states
2015-02-03 15:05:31 -07:00
Nathan Sobo
14776e3f0a
Give each scrollbar its own state object and track visibility
2015-02-03 15:05:30 -07:00
Nathan Sobo
42ab02d7d2
Rename ::clientHeight/Width to ::height and ::contentFrameWidth
...
The term “client” was actually a misnomer here because it typically
means the height excluding the scrollbars, which wasn’t how we were
using it here.
2015-02-03 15:05:30 -07:00
Nathan Sobo
1b5be9aef8
Track horizontal/vertical scrollbar height/width in presenter
2015-02-03 15:05:30 -07:00
Nathan Sobo
9de8ab949f
Drop TextEditorComponent::getRenderedRowRange
2015-02-03 15:05:30 -07:00
Nathan Sobo
6108c04f40
Add spec coverage for deprecated ‘cursor:moved’ event
...
So we don’t accidentally drop it during this transition
2015-02-03 15:05:30 -07:00
Nathan Sobo
d8cafb1fc6
Don’t observe screen line changes in editor component
2015-02-03 15:05:29 -07:00
Nathan Sobo
76241fb779
Handle line and line number preservation in presenter
...
The target of mousewheel events needs to be preserved when scrolling.
It used to be dealt with in the view, but now we can do it in the
presenter for a simpler view implementation.
2015-02-03 15:05:29 -07:00
Nathan Sobo
d9a5d141eb
Clear ::mouseWheelScreenRow after delay even if we don’t actually scroll
2015-02-03 15:05:29 -07:00
Nathan Sobo
37a040a620
Preserve line numbers in presenter based on ::mouseWheelScreenRow
2015-02-03 15:05:29 -07:00
Nathan Sobo
35d3690088
Preserve lines in TextEditorPresenter based on ::mouseWheelScreenRow
2015-02-03 15:05:29 -07:00
Nathan Sobo
578a76ba6b
Make “mouse wheel” 2 words in presenter API
...
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com >
2015-02-03 15:05:28 -07:00
Nathan Sobo
da5ee3fa86
Add TextEditorPresenter::state.mousewheelScreenRow
2015-02-03 15:05:28 -07:00
Nathan Sobo
a88486e950
Use maxLineNumberDigits from presenter state in GutterComponent
2015-02-03 15:05:28 -07:00
Nathan Sobo
1a22952eda
Only store backgroundColor and gutterBackgroundColor on presenter
2015-02-03 15:05:28 -07:00
Nathan Sobo
fd50a0db6c
Construct TextEditorPresenter before component mounts
...
This allows us to use the presenter for all stages of the component
lifecycle rather than needing to wait until it is created.
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com >
2015-02-03 15:05:28 -07:00
Nathan Sobo
ac25596002
Wait for required measurements before building some presenter state
...
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com >
2015-02-03 15:05:27 -07:00
Max Brunsfeld
9cc7ecb1be
Add maxLineNumberDigits to presenter state
2015-02-03 15:05:27 -07:00
Max Brunsfeld
60fca8d8b2
Use presenter state for gutter background color
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2015-02-03 15:05:27 -07:00