Commit Graph

345 Commits

Author SHA1 Message Date
Max Brunsfeld
482824047c ⬆️ text-buffer 2017-10-30 17:26:21 -07:00
Nathan Sobo
5779111799 Use destroyFoldsContainingBufferPosition in more cases 2017-10-25 12:50:56 -06:00
Justin Ratner
089717cbd3 fix failing test 2017-10-20 15:46:27 -06:00
Justin Ratner
d0bdbb861b update overlay itself instead of text editor when resize occurs 2017-10-20 11:30:50 -06:00
Antonio Scandurra
65af9e953b Stop dragging only when user interacts with keyboard
Previously, we used to prevent the user from dragging the selection
further when the buffer was about to change. This was problematic
because any change in the buffer, even one that was performed
"automatically" by a package, would cancel the dragging action and
result in a confusing experience for the user.

On the other hand, we want to prevent users from accidentally selecting
text when they perform an edit (see #15217, #15405).

This commit addresses both concerns by canceling the dragging as soon as
the user interacts with the keyboard, instead of canceling the dragging
when the buffer is about to change.

One downside of this approach is that it changes the behavior of
pressing a keystroke that does not result in a buffer change, e.g.
Shift, Arrow Keys, etc.

Signed-off-by: Jason Rudolph <jasonrudolph@github.com>
2017-10-17 18:50:20 +02:00
Justin Ratner
0c35c26805 fix infinite overlay resizing loop 2017-10-14 19:05:54 -06:00
Antonio Scandurra
7853e3cd8c Don't throw when destroying block decorations inside marker change event 2017-10-11 09:42:53 +02:00
Antonio Scandurra
683cdeac27 Always revert to composition checkpoint, even if input is disabled
Previously, if the user opened the IME menu while input was disabled, we
would create a composition checkpoint without reverting to it after the
composition ended. When enabling input again, the first keystroke would
cause any buffer change that occurred between the IME composition and
the keystroke to be reverted.

With this commit we will always revert and delete the composition
checkpoint as soon as the composition ends, regardless of whether the
input is enabled or not.
2017-10-06 13:34:16 +02:00
Nathan Sobo
835efd3d68 Clear the dimensions cache after updating the soft wrap column
Updating the soft wrap column could cause us to compute different values
for derived dimensions, so any dimensions that were cached *in the
process* of updating the soft wrap column need to be cleared.
2017-10-05 15:47:59 -06:00
Antonio Scandurra
f640e9339d Make comment more succinct
Signed-off-by: Nathan Sobo <nathan@github.com>
2017-10-05 18:54:26 +02:00
Antonio Scandurra
8759f9dac7 Clear dimensions cache when approximate screen line count changes 2017-10-05 13:51:23 +02:00
Nathan Sobo
293b52d797 Fix rendering bug when folds hide the vertical scrollbar w/ soft wrap on 2017-10-03 11:09:44 -06:00
Matthew Dapena-Tretter
eb46d0a5c6 Fix mouseup listener cleanup when dragging in text editor 2017-09-29 14:34:43 -07:00
Wliu
1a4e6c4c85 Merge pull request #15603 from jsoref/spelling
Spelling
2017-09-10 18:29:38 +02:00
Josh Soref
cb3fb74d6b spelling: horizontal 2017-09-10 15:46:39 +00:00
Josh Soref
cbc4823cde spelling: combinations 2017-09-10 15:46:38 +00:00
Antonio Scandurra
c1981ffb44 Correctly remove block decorations whose markers have been destroyed
In https://github.com/atom/atom/pull/15503 we mistakenly assumed
`marker.isValid` accounted only for the validity of the marker. However,
that method returns `false` also for markers that are valid but have
been destroyed. As a result, the editor component was mistakenly not
removing block decorations associated with such markers.

With this commit we will rely on the local `wasValid` variable instead.
If its value is `true`, it means that the block decoration has been
accounted for in the `lineTopIndex` and must, as a result, be cleaned up
in case the marker or the decoration gets destroyed.
2017-09-07 17:52:04 +02:00
Antonio Scandurra
4b3fa34d4e Merge pull request #15580 from atom/as-update-scrollbars-on-detach-reattach
Flush scroll position to dummy scrollbar components on re-attach
2017-09-07 16:39:16 +02:00
Antonio Scandurra
806b652da4 Flush scroll position to dummy scrollbar components on re-attach
This prevents the dummy scrollbars from resetting their position to `0`
when the editor element is moved elsewhere in the DOM (e.g. when
splitting a pane item).
2017-09-07 15:05:42 +02:00
Indrek Ardel
499ef16013 Default re-used element class name to empty string 2017-09-07 14:48:35 +03:00
Antonio Scandurra
7bd2c670e1 Merge pull request #15546 from atom/as-never-autoscroll-when-clicking-on-content
Don't autoscroll when using the mouse to add, delete or move selections
2017-09-06 02:12:15 -07:00
Antonio Scandurra
20ea98ad41 Don't render block decorations located outside the visible range
Previously, when trying to use block decorations on non-empty markers,
Atom could sometimes throw an error if such markers ended or started at
a position that was not currently rendered.

In fact, even if we already restricted the decoration query to markers
that intersected the visible row range, markers that were only partially
visible would still be considered for rendering. If, depending on the
`reversed` property, we decided to render the tail or head of the marker
in question and this was outside the viewport, Atom would throw the
aforementioned exception.

This commit addresses the above issue by explicitly ignoring block
decorations that are located on rows that are not yet rendered.
2017-09-05 18:05:35 +02:00
Antonio Scandurra
91bb1e12c7 Don't autoscroll when using the mouse to add, delete or move selections 2017-09-05 15:26:54 +02:00
Antonio Scandurra
6e919e7acd Don't remeasure invalid block decorations
This fixes an uncaught exception that was being thrown after
invalidating a marker and resizing the editor.
2017-09-02 11:11:27 +02:00
Antonio Scandurra
53135c5d0d Call this.didMouseDown instead of props.didMouseDown in dummy scrollbars 2017-08-31 14:23:11 +02:00
Antonio Scandurra
3e10a84d49 Merge pull request #15506 from atom/as-honor-scrollbar-visible-only-when-scrolling
Honor macOS "Show scrollbars only when scrolling" setting
2017-08-31 11:29:26 +02:00
Antonio Scandurra
f85deec482 Merge pull request #15503 from atom/as-fix-invalidated-block-decoration-markers
Fix rendering of block decorations for invalid markers
2017-08-31 11:29:14 +02:00
Antonio Scandurra
12e6740c9c Merge pull request #15487 from atom/as-scroll-sensitivity
Always honor scroll intent on mousewheel
2017-08-31 11:28:16 +02:00
Antonio Scandurra
50088b16c9 Honor macOS "Show scrollbars only when scrolling" setting
Previously, we were hiding scrollbars when their height/width was 0. On
macOS, however, users can decide to only show scrollbars while
scrolling, which causes Atom to detect scrollbars as being invisible
during measurements. As a result, we were mistakenly setting the
visibility property to `hidden` when this setting was on, thus
preventing users from seeing the scrollbar on scroll.

With this commit we are changing the dummy scrollbar components to only
become invisible when the content is not scrollable rather than when the
scrollbars have zero width or height.

As part of this, we have also renamed the
`is{Horizontal,Vertical}ScrollbarVisible` functions to
`canScroll{Horizontally,Vertically}`, to better express their intent.
2017-08-30 17:11:40 +02:00
Antonio Scandurra
af42b4b86f Move DummyScrollbarComponent into its own GPU layer
This was fixed back in bac9922 and, due to the same reasons, not having
a separate layer causes the "Show scrollbars only when scrolling"
setting on macOS to not work properly.
2017-08-30 16:11:21 +02:00
Antonio Scandurra
9bf47f31cb Fix rendering of block decorations for invalid markers
Previously, when a marker became invalid we would delete the
corresponding block decoration from the DOM, without however removing it
from the `lineTopIndex`. Also, we had a similar issue when decorating a
marker that was already invalid: we would account for it in the index
without adding it to the DOM.

This commit addresses the above problems by ensuring that block
decorations are never added for invalid markers. At the same time, the
editor component will still keep track of changes on the marker that was
decorated, so that it can detect when its validity changes and render it
appropriately.
2017-08-30 14:25:20 +02:00
Antonio Scandurra
76e2e03139 Always honor scroll intent on mousewheel
This commit introduces a change in the way we respond to mousewheel
events. In particular, if `delta * scrollSensitivity` is less than 1 or
greater than -1, we will round it up or down in an attempt to honor the
user's scroll intent.
2017-08-29 13:39:11 +02:00
Antonio Scandurra
b486e3edda Move highlight decorations outside of tiles
As a consequence of https://github.com/atom/atom/pull/15378, we are now
able to render highlight decorations in a separate div, as opposed to
having an highlight container for each tile.

Code-wise this is much simpler, because highlights spanning multiple
tiles can be represented via a single region and don't need to be split
across the tiles they span anymore. As a byproduct, performance should
improve as well, because the number of nodes that need to be managed
should decrease significantly.

This also fixes https://github.com/atom/atom/issues/15449, and other
similar rendering artifacts, because highlight decoration DOM nodes
won't need to move between tiles anymore when their position changes.
2017-08-29 11:44:07 +02:00
Antonio Scandurra
f45c0236ab Enhance error when a line component is not found for a screen line
Signed-off-by: Nathan Sobo <nathan@github.com>
2017-08-23 14:52:56 +02:00
Antonio Scandurra
74ae169fcc Maintain a map of line components instead of line nodes and text nodes
Other than simplifying the code, this will help us understand whether
https://github.com/atom/atom/issues/15263 might be related to a node
reuse issue.

Signed-off-by: Nathan Sobo <nathan@github.com>
2017-08-23 14:52:50 +02:00
Nathan Sobo
b8d22fb4ba Fix lint error 2017-08-22 22:00:54 -06:00
Nathan Sobo
b5f68a6434 Include more metadata when missing a line node in horizontal measurement 2017-08-22 21:03:01 -06:00
Antonio Scandurra
0372db43bb Don't select when typing while also holding the left mouse button 2017-08-22 12:04:52 +02:00
Antonio Scandurra
66e576f6e3 Merge pull request #15378 from atom/as-fix-cropped-fonts
Drop use of GPU tiles for lines and line numbers
2017-08-21 10:44:58 +02:00
Nathan Sobo
3d0d1ae44e Prevent block decoration margins from collapsing during measurement
We now render a 1px high sentinel element between off-screen block
decorations before measuring them to prevent margins from collapsing.
2017-08-20 08:23:41 -06:00
Nathan Sobo
835ed10f7c Handle highlight end rows with 'before' blocks in addition to 'after' 2017-08-20 07:32:44 -06:00
Nathan Sobo
f33051da33 Fix highlight end pixel position calculation
Previously, we were calculating the position preceding block decorations
for the row following the end of the highlighted range, but that's
actually wrong. We just want the position following block decorations of
the end of the highlighted range, plus one line height. This prevents us
from incorrectly rendering the end of highlight after block decorations
that immediately follow the end of the highlighted range.
2017-08-20 07:00:50 -06:00
Antonio Scandurra
e2ef250fb1 🎨 2017-08-20 10:05:22 +02:00
Antonio Scandurra
effc6d9d21 Fix line number position when block decorations are at tile boundaries
When there are block decorations, we compute a `marginTop` style for
line numbers, so that they can be aligned correctly to the corresponding
line nodes.

This commit fixes a regression in the logic that calculated the
`marginTop` value, which was failing to correctly render line numbers
when block decorations were located right before the end of a tile, or
exactly at
the beginning of it.
2017-08-19 15:40:32 +02:00
Antonio Scandurra
7267c5d269 Drop use of GPU tiles for lines and line numbers
At the cost of a very minimal reduction in layout performance, we gain
reliable rendering at all line heights and don't have to worry about
characters that extend above/below the footprint of a line.

Signed-off-by: Nathan Sobo <nathan@github.com>
2017-08-18 15:56:54 +02:00
Antonio Scandurra
88a06f8c5b Always round GPU layer dimensions to physical pixel boundaries
This ensure subpixel anti-aliasing works when `window.devicePixelRatio`
is not an integer.

Signed-off-by: Nathan Sobo <nathan@github.com>
2017-08-17 19:56:13 +02:00
Antonio Scandurra
1ffc8997d2 Set visibility: hidden on dummy scrollbars if native ones are invisible
This prevents the cursor from unexpectedly changing when approaching the
bottom/right corner of the editor with the mouse, even when no scrollbar
is being shown.
2017-08-17 15:11:32 +02:00
Antonio Scandurra
1b5ed62e4f Ignore scroll requests to NaN, null or undefined positions 2017-08-17 09:17:52 +02:00
Nathan Sobo
cd8233028d Merge pull request #15347 from atom/ns-capture-mouseup
Use capture phase for mouseup handler
2017-08-16 17:24:37 -06:00
Nathan Sobo
d88ddc3d4d Merge pull request #15345 from atom/ns-round-max-scroll-top
Round return values of getMaxScrollTop, getScrollHeight
2017-08-16 17:24:09 -06:00