| Index: third_party/WebKit/Source/core/editing/LayoutSelection.h
|
| diff --git a/third_party/WebKit/Source/core/editing/LayoutSelection.h b/third_party/WebKit/Source/core/editing/LayoutSelection.h
|
| index 17b7c6dc7f5b15a0e312cb984899cfd2868aed52..7005099327dad10716a60144cb4403e5f6933b65 100644
|
| --- a/third_party/WebKit/Source/core/editing/LayoutSelection.h
|
| +++ b/third_party/WebKit/Source/core/editing/LayoutSelection.h
|
| @@ -30,6 +30,42 @@ namespace blink {
|
|
|
| class FrameSelection;
|
|
|
| +// This class represents a selection range in layout tree for painting and
|
| +// paint invalidation.
|
| +// The current selection to be painted is represented as 2 pairs of
|
| +// (LayoutObject, offset).
|
| +// 2 LayoutObjects are only valid for |Text| node without 'transform' or
|
| +// 'first-letter'.
|
| +// TODO(editing-dev): Clarify the meaning of "offset".
|
| +// editing/ passes them as offsets in the DOM tree but layout uses them as
|
| +// offset in the layout tree. This doesn't work in the cases of
|
| +// CSS first-letter or character transform. See crbug.com/17528.
|
| +class SelectionPaintRange {
|
| + DISALLOW_NEW();
|
| +
|
| + public:
|
| + SelectionPaintRange() = default;
|
| + SelectionPaintRange(LayoutObject* start_layout_object,
|
| + int start_offset,
|
| + LayoutObject* end_layout_object,
|
| + int end_offset);
|
| +
|
| + bool operator==(const SelectionPaintRange& other) const;
|
| +
|
| + LayoutObject* StartLayoutObject() const;
|
| + int StartOffset() const;
|
| + LayoutObject* EndLayoutObject() const;
|
| + int EndOffset() const;
|
| +
|
| + bool IsNull() const { return !start_layout_object_; }
|
| +
|
| + private:
|
| + LayoutObject* start_layout_object_ = nullptr;
|
| + int start_offset_ = -1;
|
| + LayoutObject* end_layout_object_ = nullptr;
|
| + int end_offset_ = -1;
|
| +};
|
| +
|
| class LayoutSelection final : public GarbageCollected<LayoutSelection> {
|
| public:
|
| static LayoutSelection* Create(FrameSelection& frame_selection) {
|
| @@ -47,10 +83,7 @@ class LayoutSelection final : public GarbageCollected<LayoutSelection> {
|
| kPaintInvalidationNewMinusOld
|
| };
|
| void SetSelection(
|
| - LayoutObject* start,
|
| - int start_pos,
|
| - LayoutObject*,
|
| - int end_pos,
|
| + const SelectionPaintRange&,
|
| SelectionPaintInvalidationMode = kPaintInvalidationNewXOROld);
|
| void ClearSelection();
|
| std::pair<int, int> SelectionStartEnd();
|
| @@ -67,24 +100,7 @@ class LayoutSelection final : public GarbageCollected<LayoutSelection> {
|
| Member<FrameSelection> frame_selection_;
|
| bool has_pending_selection_ : 1;
|
|
|
| - // The current selection represented as 2 boundaries.
|
| - // Selection boundaries are represented in LayoutView by a tuple
|
| - // (LayoutObject, DOM node offset).
|
| - // See http://www.w3.org/TR/dom/#range for more information.
|
| - //
|
| - // |m_selectionStartPos| and |m_selectionEndPos| are only valid for
|
| - // |Text| node without 'transform' or 'first-letter'.
|
| - //
|
| - // Those are used for selection painting and paint invalidation upon
|
| - // selection change.
|
| - LayoutObject* selection_start_;
|
| - LayoutObject* selection_end_;
|
| -
|
| - // TODO(yosin): Clarify the meaning of these variables. editing/ passes
|
| - // them as offsets in the DOM tree but layout uses them as offset in the
|
| - // layout tree.
|
| - int selection_start_pos_;
|
| - int selection_end_pos_;
|
| + SelectionPaintRange paint_range_;
|
| };
|
|
|
| } // namespace blink
|
|
|