Commit Graph

21392 Commits

Author SHA1 Message Date
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