Commit Graph

355 Commits

Author SHA1 Message Date
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
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
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
Olli Pettay
d65779731f Bug 1026164, improve focus handling in shadow dom, r=wchen 2014-08-06 02:23:02 +03: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
Morris Tseng
736a718652 Bug 987718 - Part 2: Expose GetHintForPosition to nsFrameSelection; r=roc 2014-06-04 22:53:00 +02:00
Mats Palmgren
93a6cff703 Bug 508665 - part 3, Change GetContentInsertionFrame() to return a nsContainerFrame*, and return null for leaf frames. Deal with GetContentInsertionFrame() returning null in a couple of places. r=roc 2014-05-24 22:20:39 +00:00
Birunthan Mohanathas
eeb9aaaa94 Bug 900908 - Part 3: Change uses of numbered macros in nsIClassInfoImpl.h/nsISupportsImpl.h to the variadic variants. r=froydnj 2014-04-27 03:06:00 -04:00
Aryeh Gregor
366b23e568 Bug 950386 - Move mozilla::Selection to mozilla::dom::Selection; r=ehsan 2014-04-10 19:09:40 +03: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
68bfe70f09 Bug 927728 - Part 1: Replace PRUnichar with char16_t; r=roc
This patch was automatically generated by the following script:

#!/bin/bash
# Command to convert PRUnichar to char16_t

function convert() {
echo "Converting $1 to $2..."
find . ! -wholename "*nsprpub*" \
       ! -wholename "*security/nss*" \
       ! -wholename "*modules/libmar*" \
       ! -wholename "*/.hg*" \
       ! -wholename "obj-ff-dbg*" \
       ! -name prtypes.h \
       ! -name Char16.h \
         -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 PRUnichar char16_t
2014-01-04 10:02:17 -05:00
Ehsan Akhgari
4ba92fdc4c Bug 949445 - Part 1: Move selectionLanguageChange to nsISelectionPrivate; r=bzbarsky 2013-12-17 09:12:17 -05:00
Ehsan Akhgari
45b9b9b617 Bug 906790 - Minimize layout/base #includes; r=roc 2013-08-19 18:55:18 -04:00
Andreas Gal
3d1370f97f Bug 867047 - remove caret theming support and the Gtk2 implementation r=roc 2013-04-30 12:17:08 -07:00
Trevor Saunders
08fdf22a1b bug 845562 - remove GetFrameSelection() from nsISelectionPrivate r=smaug 2013-02-15 15:09:28 -05:00
Jonathan Kew
b21d195aac bug 842514 - consistently use signed types for appUnitsPerDevPixel variables. r=roc 2013-02-19 21:46:27 +00:00
L. David Baron
ce4e1b1b22 Bug 781360 patch 4: Remove the Get from nsStyleContext::GetStyleData and nsIFrame::GetStyleDataExternal, which never return null. r=dholbert 2013-02-16 13:51:03 -08:00
L. David Baron
ca6c366dc6 Bug 781360 patch 3: Rename {nsIFrame,nsStyleContext,nsComputedDOMStyle}::GetStyle* to Style*, since they can never return null. r=dholbert
Except for the changes in:
  layout/generic/nsIFrame.h (part)
  layout/style/nsComputedDOMStyle.h (all)
  layout/style/nsRuleNode.cpp (part)
  layout/style/nsStyleContext.cpp (part)
  layout/style/nsStyleContext.h (part)
(see patch 3b in the bug), this patch was written with the sed script:
s/\<GetStyle\(Font\|Color\|List\|Text\|Visibility\|Quotes\|UserInterface\|TableBorder\|SVG\|Background\|Position\|TextReset\|Display\|Content\|UIReset\|Table\|Margin\|Padding\|Border\|Outline\|XUL\|SVGReset\|Column\)\>/Style\1/g
2013-02-16 13:51:02 -08:00
Mats Palmgren
7532b4e736 Bug 786533 - Replace NS_MIN/NS_MAX with std::min/std::max and #include <algorithm> where needed. r=ehsan 2013-01-15 13:22:03 +01:00
Nicholas Nethercote
84a7ba7d6a Bug 824397 - Use NS_ENSURE_{TRUE,FALSE,SUCCESS}_VOID(foo) instead of NS_ENSURE_{TRUE,FALSE,SUCCESS}(foo, ). r=derf. 2012-12-23 20:45:57 -08:00
Boris Zbarsky
71a72b6dc3 Bug 815671 part 3. Make nsXULPopupManager::GetVisiblePopups use an array out param instead of returning array object copies. r=roc 2012-11-29 11:14:13 -05:00
Matt Woodrow
e813da3696 Bug 539356 - Part 9c - Remove old invalidation code. r=bz 2012-08-29 17:39:31 +12:00
Ed Morley
ed4fe023b5 Revert mozilla-inbound to e4dd1fa6d222 for crashes and test failures on a CLOSED TREE 2012-09-27 16:34:46 +01:00
Matt Woodrow
24eaff95c9 Bug 539356 - Part 9 - Implement DLBI. r=roc,bz,jwatt 2012-08-29 17:38:58 +12:00
Ehsan Akhgari
243c878d26 Bug 579517 - Part 1: Automated conversion of NSPR numeric types to stdint types in Gecko; r=bsmedberg
This patch was generated by a script.  Here's the source of the script for
future reference:

function convert() {
echo "Converting $1 to $2..."
find . ! -wholename "*nsprpub*" \
       ! -wholename "*security/nss*" \
       ! -wholename "*/.hg*" \
       ! -wholename "obj-ff-dbg*" \
       ! -name nsXPCOMCID.h \
       ! -name prtypes.h \
         -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 PRInt8 int8_t
convert PRUint8 uint8_t
convert PRInt16 int16_t
convert PRUint16 uint16_t
convert PRInt32 int32_t
convert PRUint32 uint32_t
convert PRInt64 int64_t
convert PRUint64 uint64_t

convert PRIntn int
convert PRUintn unsigned

convert PRSize size_t

convert PROffset32 int32_t
convert PROffset64 int64_t

convert PRPtrdiff ptrdiff_t

convert PRFloat64 double
2012-08-22 11:56:38 -04:00
Aryeh Gregor
8b4a23fc4c Bug 777292 part 2 - Change all nsnull to nullptr 2012-07-30 17:20:58 +03:00
Ehsan Akhgari
d07e155f48 Backout changeset f568fc280fb0 (bug 539356) because of performance and correctness regressions 2012-07-03 20:24:55 -04:00
Matt Woodrow
145d424c02 Bug 539356 - Part 9 - Implement DLBI. r=roc,bz,jwatt 2012-06-30 15:06:11 +12:00
Ed Morley
7212749e9b Merge mozilla-central to mozilla-inbound 2012-05-21 13:19:38 +01:00
Gervase Markham
cb6a072c2a Bug 716478 - update licence to MPL 2. 2012-05-21 12:12:37 +01:00
L. David Baron
2548b743d5 Remove width determination parameters from font inflation methods. (Bug 747720, patch 5) r=roc
These are no longer needed since we're getting the width from the
nsFontInflationData.
2012-05-20 22:18:28 -07:00
Ehsan Akhgari
e540249c84 Bug 696229 - Adjust the hint correctly while drawing the caret for drag/drop so that it gets attached to the beginning of the lines correctly; r=roc 2012-05-11 14:50:19 -04:00
Ehsan Akhgari
5529aea5fb Bug 726592 - Uninitialised value use in nsTextFrame::GetChildFrameContainingOffset; r=roc 2012-03-26 09:09:38 -07:00