Commit Graph

27 Commits

Author SHA1 Message Date
Nathan Sobo
38f51ce74d Extract LinesTileComponent to minimize diff/patch overhead
When typing on a single line, only a single tile needs to be updated.
When moving the cursor no tiles need to be updated.
2017-05-05 09:29:27 +02:00
Nathan Sobo
eae8e15155 Extract LineNumberGutterComponent to reduce patching 2017-05-05 09:29:27 +02:00
Nathan Sobo
c2dcc0121b Add a key to line number divs 2017-05-05 09:29:27 +02:00
Nathan Sobo
c22a81dc57 Remove logging 2017-05-05 09:29:27 +02:00
Nathan Sobo
55ed9e4f62 Pre-assign measuremets.scrollTop when autoscrolling
This avoids work when the scroll event happens asynchronously because
we'll treat the event as a no-op since the measurements didn't change.
2017-05-05 09:29:27 +02:00
Nathan Sobo
192e7c6b63 Handle direct focus of hidden input and avoid redundant focus renders 2017-05-05 09:29:27 +02:00
Nathan Sobo
b8a3e2f163 Don't clear elements owned by other components from line nodes map
We should really be recycling elements when they move between lines, but
that's a bigger project.
2017-05-05 09:29:27 +02:00
Nathan Sobo
19db16664f Don't autoscroll to impossible scrollTop locations 2017-05-05 09:29:27 +02:00
Nathan Sobo
d929720d24 Use null sentinel value for autoscrollTop to avoid bug with negatives 2017-05-05 09:29:27 +02:00
Nathan Sobo
ec045d9333 Gracefully handle focus events that occur before the attachedCallback 2017-05-05 09:29:27 +02:00
Nathan Sobo
ff2f9b192a Implement vertical autoscroll; still need tests 2017-05-05 09:29:27 +02:00
Nathan Sobo
4c51ae77dd Handle text input 2017-05-05 09:29:27 +02:00
Nathan Sobo
c52d66377f Render hidden input and handle focus and blur 2017-05-05 09:29:27 +02:00
Nathan Sobo
9487c1cd00 Move lines class 2017-05-05 09:29:27 +02:00
Nathan Sobo
d780b15248 Add cursor rendering tests 2017-05-05 09:29:27 +02:00
Nathan Sobo
c8166c1bb3 Render cursors after measuring horizontal positions 2017-05-05 09:29:27 +02:00
Nathan Sobo
43386b0483 Always update twice assuming we may need to measure
This prepares the ground for measuring absoltue cursor positions.
2017-05-05 09:29:27 +02:00
Nathan Sobo
583c2c537d Iron out scheduling issues
* Ensure multiple calls to scheduleUpdate only result in a single call
to updateSync in the future.
* Explicit calls to update sync after scheduling an update fulfill the
scheduled update.
* Track whether we think the editor is visible or not to avoid redundant
didShow calls.
* Ensure we only update on resize events if the editor actually changed
size.
2017-05-05 09:29:27 +02:00
Nathan Sobo
19d1d148eb Measure the longest visible screen line on initial render 2017-05-05 09:29:27 +02:00
Nathan Sobo
ede5d5e5f4 Add coverage for gutter measurement and horizontal translation on scroll 2017-05-05 09:29:27 +02:00
Nathan Sobo
b863790390 Start on new TextEditorComponent specs; avoid excessive line numbers 2017-05-05 09:29:27 +02:00
Nathan Sobo
9765d9dbcd Translate gutter so it remains visible when scrolling to the right
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2017-05-05 09:29:27 +02:00
Nathan Sobo
d2d560eac6 Render character measurement line via virtual DOM
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2017-05-05 09:29:27 +02:00
Nathan Sobo
b38fafc83a Absolutely position line number tiles
Static positioning doesn’t seem to improve layout performance
2017-05-05 09:29:27 +02:00
Nathan Sobo
aed4d8876f Use contain: strict on line number gutter and its tiles
This improves layout time of scrolling by limiting the extent of gutter re-layouts.

Signed-off-by: Antonio Scandurra <as-cii@github.com>
2017-05-05 09:29:27 +02:00
Nathan Sobo
f94144ff4b WIP 2017-05-05 09:29:27 +02:00
Nathan Sobo
f237d70357 WIP 2017-05-05 09:29:27 +02:00