Commit Graph

140 Commits

Author SHA1 Message Date
Ehsan Akhgari
4080737b33 Bug 1372761 - Avoid needlessly grabbing the timer thread lock when selections change in order to reset the caret timer; r=mats 2017-06-14 17:53:48 -04:00
Mason Chang
e98ed22835 Bug 1337130 - Create a DisplayItemLayer type. r=mattwoodrow 2017-02-14 13:49:27 -08:00
Nicholas Nethercote
bb5a4f7dc2 Bug 1232852 (part 4) - Remove some unused parameters in and around layout/base/. r=heycam. 2016-01-05 16:08:17 -08:00
Mark Capella
33a6284906 Bug 1215959 - (GeckoCaret2) Remove experimental bits added to Touch/Selection carets, r=tylin 2015-12-01 15:25:06 -05:00
Simon Montagu
432859415f Bug 1216096: restore previous RTL caret behaviour by backout of bug 1164963, bug 1177505, and bug 1180417. r=jfkthame 2015-11-10 04:42:23 -08:00
Ting-Yu Lin
a56b2e5e55 Bug 1200194 - Expose nsCaret::GetFrameAndOffset for reuse. r=roc
This function can be reused by AccessibleCaret.
2015-09-09 16:47:20 +08:00
Masayuki Nakano
f59053cabd Bug 555642 part.1 nsCaret should have a way to override the caret visible state for hiding caret temporarily and nsEditor should hide caret if composition string doesn't have caret information r=roc 2015-08-17 20:58:38 +09:00
Birunthan Mohanathas
a29151dc87 Bug 1182996 - Fix and add missing namespace comments. rs=ehsan
The bulk of this commit was generated by running:

  run-clang-tidy.py \
    -checks='-*,llvm-namespace-comment' \
    -header-filter=^/.../mozilla-central/.* \
    -fix
2015-07-13 08:25:42 -07:00
Ted Clancy
983dbf2ce8 Bug 1164693 - Part 1: Directional caret should point in caret direction in bidi paragraphs. r=smontagu 2015-06-05 21:44:54 -04:00
Mark Capella
b246467b7b Bug 988143 - Enable Gecko Touch in Fennec, Android specific nsCaret mods, r=ehsan 2015-05-14 22:06:13 -04:00
Mark Finkle
e6b5f15406 Bug 1159263 - Add support to nsCaret to stop blinking after a set of cycles r=roc r=snorp 2015-04-29 10:23:19 -04:00
Ehsan Akhgari
ea41d8de48 Bug 1145631 - Part 1: Replace MOZ_OVERRIDE and MOZ_FINAL with override and final in the tree; r=froydnj
This patch was automatically generated using the following script:

function convert() {
echo "Converting $1 to $2..."
find . \
       ! -wholename "*/.git*" \
       ! -wholename "obj-ff-dbg*" \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert MOZ_OVERRIDE override
convert MOZ_FINAL final
2015-03-21 12:28:04 -04:00
Morris Tseng
5998dde150 Bug 1094056 - Use nsCaret::GetGeometryForFrame to determine position of selection carets. r=roc 2014-11-11 22:54:00 +01:00
Jonathan Watt
474e2fff50 Bug 1090611 - Make nsCaret::PaintCaret take a Moz2D DrawTarget instead of nsRenderingContext. r=Bas 2014-10-29 17:07:11 +00:00
Trevor Saunders
d67df400c1 bug 1047696 - mark a number of classes MOZ_FINAL to get compilers to devirtualize more r=froydnj 2014-08-05 13:33:55 -04:00
Robert O'Callahan
a127e060c2 Bug 1048752. Part 37: GetGeometryForFrame should return a rect instead of an nsresult. r=tn 2014-08-06 17:19:32 +12:00
Robert O'Callahan
5902534db2 Bug 1048752. Part 35: Remove GetFrameSelection (unused). r=tn 2014-08-06 17:19:31 +12:00
Robert O'Callahan
3d7390b063 Bug 1048752. Part 32: Rename DrawAtPosition to SetCaretPosition and don't make it turn off blinking. r=tn
There's no need for this method to turn off blinking anymore. Its only
caller already calls SetCaretReadOnly to achieve the same effect. That
means we don't actually need the mIsBlinking flag after all.
2014-08-06 17:19:31 +12:00
Robert O'Callahan
e06fa28324 Bug 1048752. Part 30: Simplify caret blinking logic. r=tn
A few things got mashed together here:
-- Inline KillTimer/PrimeTimer into their callers.
-- Instead of having to call StopBlinking and StartBlinking together,
change StartBlinking to ResetBlinking and have it set up
the correct blink state and reset the blink cycle.
-- nsCaret::NotifySelectionChange needs a SchedulePaint
-- nsCaret::DrawAtPosition needs a ResetBlinking
2014-08-06 17:19:30 +12:00
Robert O'Callahan
3a827f62c8 Bug 1048752. Part 28: Remove unused fields and rename mLast* to mOverride*. r=tn 2014-08-06 17:19:30 +12:00
Robert O'Callahan
85137c3fab Bug 1048752. Part 27: Remove obsolete caret state logic and just SchedulePaint as needed. r=tn
This is the core of the whole patch set.

Now GetPaintGeometry/PaintCaret figure out on their own almost all the state
they need every time we paint. So when caret flags change, all we need
to do is SchedulePaint. We don't need to fiddle with mDrawn and most of the
logic in DrawCaret is obsolete. (In fact, it was duplicated by GetGeometry
and friends, and we're removing that duplication.) EraseCaret, CheckCaretState
and UpdateCaretPosition are also obsolete.

We need to have GetPaintGeometry/PaintCaret choose the correct content node
and offset, either getting them from the Selection or using specific data set by
DrawAtPosition. This logic, plus a bit of other code shared between them, is
put into the helper GetFrameAndOffset.
2014-08-06 17:19:29 +12:00
Robert O'Callahan
3f48a9f088 Bug 1048752. Part 26: Move all "should draw caret" responsibility to GetPaintGeometry. r=tn
Instead of checking the mysterious mDrawn state (which is evil and will be
removed), let nsCaret::GetPaintGeometry take sole responsibilty for deciding
whether to draw. It takes the nsStyleUserInterface checks. It also needs to
check blink state, which is made possible by separating blink state into
the mIsBlinkOn flag.
2014-08-06 17:19:29 +12:00
Robert O'Callahan
54fc73fb14 Bug 1048752. Part 25: Inline MustDrawCaret into IsVisible. r=tn
This also fixes what appears to be a bug. MustDrawCaret returned true
when mShowDuringSelection is set even if the caret would otherwise be
hidden due a popup showing. That doesn't make sense.
2014-08-06 17:19:29 +12:00
Robert O'Callahan
d51bd7ae75 Bug 1048752. Part 24: Rename and deCOM Set/GetCaretVisible. r=tn 2014-08-06 17:19:29 +12:00
Robert O'Callahan
1d4bbbe942 Bug 1048752. Part 23: Remove aIgnoreDrawnState from MustDrawCaret. r=tn 2014-08-06 17:19:28 +12:00
Robert O'Callahan
e515900dec Bug 1048752. Part 22: Factor out SelectionLanguageChange call to run early in nsCaret::GetPaintGeometry. r=tn
This code is somewhat tricky. nsCaret::ComputeCaretRects was checking to see
if we have a bidi keyboard, and if so, what direction it's set to.
If the direction changed from the last direction seen for *this caret*,
we fired a SelectionLanguageChange notification on the caret's current
Selection. This looked bogus because the caret can be switched between
selections so it would seem some selections won't get a notification when
they should, but that's how it was. Also, when the SelectionLanguageChange
notification fired we then didn't draw the caret in that iteration, which
seems even more bogus.

This patch fixes all that by moving the logic to fire SelectionLanguageChange
out to GetPaintGeometry and firing the notification every single time without
trying to detect whether the state has changed or not. I carefully examined
the implementation of SelectionLanguageChange and I'm pretty sure it's
idempotent so this should be correct. That doesn't look like an
expensive function, and runs at most once per window paint, so I'm not
worried about perf. Because we now fire SelectionLanguageChange before
reading selection or frame state, it should be fine to carry on after
calling SelectionLanguageChange and drawing the caret based on whatever
changes SelectionLanguageChange has performed.

This also lets us remove mKeyboardRTL, which as noted above seems inherently
bogus.
2014-08-06 17:19:28 +12:00
Robert O'Callahan
c6baf90fef Bug 1048752. Part 21: Instead of storing mCaretRect/mHookRect, recompute them whenever they're needed. r=tn
Also, moves the "If the offset falls outside of the frame" check from
PaintCaret to GetPaintGeometry so we do less work in that case.

UpdateCaretRects is no longer needed.
2014-08-06 17:19:28 +12:00
Robert O'Callahan
490fd8f865 Bug 1048752. Part 20: Inline GetCaretFrame into its callers. r=tn
This duplicates some code, but later patches will modify the callers and then
eventually we'll re-share common code.
2014-08-06 17:19:28 +12:00
Robert O'Callahan
2632a625e0 Bug 1048752. Part 19: Create nsCaret::GetPaintGeometry to call during painting. r=tn
This is the start of the changes to caret-drawing proper.

The idea is to combine GetCaretFrame and GetCaretRect into a method
GetPaintGeometry which looks like GetGeometry but returns values
needed for painting (i.e. including bidi decorations, and returning
a null frame if we're not supposed to paint due to specific caret
state, e.g. in the "off" phase of the blink cycle).

Mostly a straightforward refactoring but there are a few interesting changes:
-- nsDisplayCaret stores its bounds instead of getting them from nsCaret on
demand. Eventually those bounds will not be stored in nsCaret at all.
-- nsDisplayCaret::GetBounds returns true for aSnap. nsCaret draws snapped
rects, so why not.
-- I removed "if (caretRect.Intersects(aDirtyRect))" in EnterPresShell.
As far as I can tell, this check is incorrect because it doesn't take
transforms into account. Since there's at most one drawn caret per window,
hence we do this at most once per paint, I don't think there's any real
performance advantage to having this check.
2014-08-06 17:19:28 +12:00
Robert O'Callahan
8451403377 Bug 1048752. Part 18: Add nsCaret::SchedulePaint. r=tn
We'll use this later.
2014-08-06 17:19:27 +12:00
Robert O'Callahan
bed9de9439 Bug 1048752. Part 17: Rename Get/SetCaretDOMSelection to Get/SetSelection. r=tn
The forward declaration of Selection in nsCaret.h will be used in later patches.
2014-08-06 17:19:27 +12:00
Robert O'Callahan
6fb18233c7 Bug 1048752. Part 16: Move nsFrameSelection::HINT to CaretAssociationHint.h. r=tn
This patch started an attempt to remove nsFrameSelection.h from nsCaret.h
and metastasized into a rather large refactoring patch that removed it
from some other header files as well, and changed nsFrameSelection::HINT
into a global-scope enum with better names. I also converted bools
into CaretAssociationHint in a few places where that was appropriate,
but there are still some more places (GetChildFrameContainingOffset)
where bools need to be converted. I figured this patch was big enough already.
2014-08-06 17:19:27 +12:00
Robert O'Callahan
4ccb5b6a33 Bug 1048752. Part 15: Fix some comments. r=tn 2014-08-06 17:19:26 +12:00
Robert O'Callahan
5bf77116d0 Bug 1048752. Part 14: Split GetGeometry into a static and a non-static version. r=tn
GetGeometry is used in two different ways. Sometimes it's used to get
information about a particular caret. Sometimes it's used to get
information about a particular selection that's not associated with
a caret. Splitting GetGeometry into a non-static version for the former
and a static version for the latter makes this more clear. Also it saves
code since for the latter version we don't have to get an nsCaret first.
2014-08-06 17:19:26 +12:00
Robert O'Callahan
7fc6e3bc4b Bug 1048752. Part 13: Remove GetGeometry's aBidiIndicatorSize. r=tn
Callers always pass null.
2014-08-06 17:19:26 +12:00
Robert O'Callahan
5244a96da8 Bug 1048752. Part 12: Replace mBlinkRate with mIsBlinking. r=tn
We don't need to store the blink rate. Instead we can just fetch it whenever
we need it. However we do need a flag to handle the case where
nsCaret::DrawAtPosition disables blinking.
2014-08-06 17:19:26 +12:00
Robert O'Callahan
af8220e22d Bug 1048752. Part 8: Remove mCaretAspectRatio. r=tn
mCaretAspectRatio doesn't need to be stored. We can recompute it
whenever we need it.
2014-08-06 17:19:25 +12:00
Robert O'Callahan
c72cc5d35d Bug 1048752. Part 7: Remove mCaretWidthCSSPx. r=tn
mCaretWidthCSSPx doesn't need to be stored. We can just recompute it
whenever we need it.
2014-08-06 17:19:25 +12:00
Robert O'Callahan
b7ef4636c8 Bug 1048752. Part 6: Remove 'virtual' declarations. r=tn
These used to be needed for linking with non-libxul builds, but are no
longer needed. The obsolete comment is fixed in a later patch.
2014-08-06 17:19:24 +12:00
Robert O'Callahan
5d0c352219 Bug 1048752. Part 5: Reorder API declarations. r=tn
To make it more clear what's going on, make CaretBlinkCallback protected
and reorder the public methods to put the state-changing "API" methods first.
2014-08-06 17:19:24 +12:00
Robert O'Callahan
6d2de98c57 Bug 1048752. Part 4: Make EViewCoordinates (unused). r=tn 2014-08-06 17:19:24 +12:00
Robert O'Callahan
1d869f9c01 Bug 1048752. Part 3: Make GetCaretFrameForNodeOffset static. r=tn
GetCaretFrameForNodeOffset only uses the nsFrameSelection and mBidiUI
from its nsCaret. For mBidiUI we can just get the pref directly whenever
we need it. By modifying GetCaretFrameForNodeOffset to take nsFrameSelection
as a parameter, we can make it static to make it clear it isn't really
related to the state of the nsCaret.

This may also fix a bug in Selection::GetPrimaryFrameForFocusNode where
things would go unexpectedly wrong if mCaret is temporarily observing
a different selection to the Selection.
2014-08-06 17:19:24 +12:00
Robert O'Callahan
39c3893475 Bug 1048752. Part 2: Remove InvalidateOutsideCaret and MaybeInvalidateCaretPosition. r=tn
I'm quite sure DLBI means we don't need these anymore.
2014-08-06 17:19:23 +12:00
Robert O'Callahan
017f2ede60 Bug 1048752. Part 1: Remove GetCaretReadOnly (unused). r=tn 2014-08-06 17:19:23 +12:00
Ting-Yu Lin
61c2cd738c Bug 1016184 part 1 - Correct documentation in nsCaret.h. r=ehsan 2014-07-14 23:18:00 +02:00
Benoit Jacob
553e5b2a13 Bug 1028588 - Fix dangerous public destructors in layout/ - r=dbaron 2014-06-23 18:40:01 -04:00
Jonathan Watt
fb3412c7d4 Bug 1016680, part 5 - Report the memory used by PresShell::mCaret. r=dbaron 2014-06-22 23:02:59 +01:00
Ehsan Akhgari
c01e9369ee Bug 491863 - Remove IBMBIDI; r=roc 2014-04-23 21:15:29 -04:00
Daniel Holbert
f3a89e8510 Bug 984254: Remove unnecessary nsresult return value on nsCaret::CheckCaretDrawingState(). r=roc 2014-03-17 16:54:30 +08:00
Ehsan Akhgari
45b9b9b617 Bug 906790 - Minimize layout/base #includes; r=roc 2013-08-19 18:55:18 -04:00