Nathan Sobo
b23dcb7b9f
Eliminate caching of linesVnode
2017-05-05 09:29:30 +02:00
Nathan Sobo
7d7a6ab507
Pass props to GutterContainerComponent instead of reaching up to parent
...
There are still a few rootComponent references remaining in the
LineNumberGutterComponent. These should be removed and instead we should
consult this data when constructing the line numbers to render.
2017-05-05 09:29:30 +02:00
Nathan Sobo
8c7f4d91f8
🎨
2017-05-05 09:29:30 +02:00
Nathan Sobo
656cabda0f
Initialize all measurements to 0
2017-05-05 09:29:30 +02:00
Nathan Sobo
1ca4c69c87
WIP: Start extracting gutter component
2017-05-05 09:29:30 +02:00
Nathan Sobo
44539b1dc6
Remove some redundant styling
2017-05-05 09:29:30 +02:00
Nathan Sobo
0996d90be3
Add scrollbar classes in case any packages or themes target them
2017-05-05 09:29:30 +02:00
Nathan Sobo
207cd31054
Add highlights class for package compatibility
2017-05-05 09:29:30 +02:00
Antonio Scandurra
6ed7cd97cc
Add highlight decoration classes to region elements as well
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:30 +02:00
Antonio Scandurra
4bcace1628
Don't remeasure scrollbars for mini editors
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:30 +02:00
Antonio Scandurra
e1ae3749c0
Add a pixelPositionForMouseEvent method
...
This was a private method in the previous implementation that was used
by some packages.
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:30 +02:00
Antonio Scandurra
37b5d2eb4d
Restore scrollbar positions correctly on reload
2017-05-05 09:29:30 +02:00
Antonio Scandurra
72d6316459
Fix shift-scroll on Windows and Linux
2017-05-05 09:29:29 +02:00
Antonio Scandurra
8f5e4216dc
Fix more lint errors
2017-05-05 09:29:29 +02:00
Antonio Scandurra
6a083e14a2
Schedule component updates directly from the model
...
The only event-based APIs we kept are for listening to changes in block
decoration markers.
2017-05-05 09:29:29 +02:00
Antonio Scandurra
a890528ec9
Use Math.round for positions that are at the end of a line
2017-05-05 09:29:29 +02:00
Nathan Sobo
5bbbe1d790
Give line numbers the full width of the line number gutter
2017-05-05 09:29:29 +02:00
Nathan Sobo
1cc68e408e
Add TextEditorComponent.screenPositionForPixelPositionSync
...
This method can be used to translate a pixel position to a screen
position even if the line is not currently rendered on screen.
2017-05-05 09:29:29 +02:00
Nathan Sobo
3d6921cca3
Add cursor decorations
...
These decorations allow the class and style of a cursor associated with
any marker to be customized.
/cc @t9md
2017-05-05 09:29:29 +02:00
Antonio Scandurra
3bca09bf27
Schedule update when setting scroll top row or scroll left column
2017-05-05 09:29:29 +02:00
Antonio Scandurra
e4659aad87
Add data-screen-row to line nodes
2017-05-05 09:29:29 +02:00
Antonio Scandurra
9d79b0189f
Fix cursor positioning around fold markers
2017-05-05 09:29:29 +02:00
Antonio Scandurra
1e6a1c61e7
Add middle mouse pasting on Linux
2017-05-05 09:29:29 +02:00
Antonio Scandurra
2f356f85d3
Make process.platform easier to mock
2017-05-05 09:29:29 +02:00
Nathan Sobo
348d085880
Only enable cursor blink optimization when updateSync is using scheduler
...
This ensures that direct calls to updateSync from places like scroll
handlers never take this optimization path.
2017-05-05 09:29:29 +02:00
Antonio Scandurra
c38da710ae
Don't remove non accented character from history, improve test coverage
...
Unfortunately Chromium does not trigger a `compositionstart` before
firing the text input event for the non accented character. Using `undo`
to remove such character from the history is risky because it could be
grouped with a previous change, thus making Atom undo too much.
With this commit we simply keep the behavior master exhibits as of
today. In the process of rewriting this code path, however, we fixed a
bug that occurred when opening the accented character menu while holding
another key, and improved test coverage as well by simulating the events
the browser triggers.
2017-05-05 09:29:29 +02:00
Nathan Sobo
f2070ef880
Restore editor scroll position across reloads
...
This commit introduces the concept of a scrollTopRow and
scrollLeftColumn which is used to query and update the logical scroll
position.
2017-05-05 09:29:29 +02:00
Antonio Scandurra
9ccfd3415c
Remeasure gutter dimensions when a gutter changes its visibility
2017-05-05 09:29:29 +02:00
Nathan Sobo
5ea4096464
Guard gitFirst/LastVisibleScreenRow
...
These methods are sometimes called by the model before the editor has
been attached to the DOM.
2017-05-05 09:29:29 +02:00
Nathan Sobo
eb7cdf2a34
Delegate get/setFirstVisibleScreenColumn from the model to the component
2017-05-05 09:29:29 +02:00
Nathan Sobo
4f52637518
Delegate setFirstVisibleScreenRow from the model to the component
2017-05-05 09:29:29 +02:00
Nathan Sobo
19f5535d68
Add back the measureDimensions method since some packages rely on it
...
Ideally, packages would resize and then wait for an update. But we set
up an example of calling measureDimensions directly in find-and-replace
so the easiest thing for now is just to keep this method around.
2017-05-05 09:29:29 +02:00
Nathan Sobo
4d8137a7f5
Add keys to gutterContainer and scrollContainer to avoid recycling issue
...
Previously, when the gutter container was removed due to the editor
becoming mini, the lack of keys caused the gutter to be updated with the
recycled cursors vnode. But then we tried to remove the cursors vnode
not realizing it had been moved and tore down all the references.
We probably need to revisit whether it makes sense to recycle vnodes.
2017-05-05 09:29:29 +02:00
Antonio Scandurra
240a472d3a
Disable ResizeObserver temporarily in resize callback to avoid warning
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:29 +02:00
Antonio Scandurra
6eed22aa90
Disconnect resize observers in overlay components on editor detach
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:29 +02:00
Antonio Scandurra
f7c55b9473
Honor the updateSynchronously parameter
2017-05-05 09:29:29 +02:00
Nathan Sobo
5b07334993
Assign bufferRow property to line number nodes
...
I wish we didn't need this, but it's currently relied on by several
packages including bookmarks.
2017-05-05 09:29:29 +02:00
Nathan Sobo
c76fc5af2d
Round column measurements to nearest whole pixel
...
This preserves the expected behavior for positioning overlays, etc so
that package tests keep passing.
2017-05-05 09:29:29 +02:00
Nathan Sobo
a536c5950a
Add TextEditorElement.pixelPositionForScreen/BufferPosition
...
These methods require us to render off-screen lines in some
circumstances in order to measure them, so this commit extends the
rendering of the longest line to include arbitrary lines.
2017-05-05 09:29:29 +02:00
Nathan Sobo
0441625fba
Set lineHeightInPixels on model for backward compatibility
2017-05-05 09:29:29 +02:00
Nathan Sobo
174bac378d
Fix lint errors
2017-05-05 09:29:29 +02:00
Nathan Sobo
c8f2fbb657
Get TextEditorElement tests passing
2017-05-05 09:29:29 +02:00
Nathan Sobo
bfa410b114
Add has-selection class to editors with non-empty selections
2017-05-05 09:29:29 +02:00
Nathan Sobo
f83ad6bb7c
Give cursors at the end of lines the width of an 'x' character
2017-05-05 09:29:29 +02:00
Nathan Sobo
87eb16f5ed
Fix clicking fold placeholders by ignoring pointer events on cursors div
2017-05-05 09:29:29 +02:00
Nathan Sobo
336aa0f521
Hide scrollbars in mini editors
2017-05-05 09:29:29 +02:00
Nathan Sobo
e602b5c466
Account for scrollbars and padding in autoHeight/Width mode
2017-05-05 09:29:29 +02:00
Antonio Scandurra
893da22c55
Replace element-resize-detector with experimental ResizeObserver API
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:29 +02:00
Antonio Scandurra
837871700d
Position dummy line element absolutely and make it invisible
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:29 +02:00
Antonio Scandurra
8372d08b49
Don't share block decoration/character measurement vnodes across instances
...
Signed-off-by: Nathan Sobo <nathan@github.com >
2017-05-05 09:29:29 +02:00