OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 12 matching lines...) Expand all Loading... | |
23 */ | 23 */ |
24 | 24 |
25 #ifndef RenderSelectionInfo_h | 25 #ifndef RenderSelectionInfo_h |
26 #define RenderSelectionInfo_h | 26 #define RenderSelectionInfo_h |
27 | 27 |
28 #include "core/rendering/RenderBox.h" | 28 #include "core/rendering/RenderBox.h" |
29 #include "platform/geometry/IntRect.h" | 29 #include "platform/geometry/IntRect.h" |
30 | 30 |
31 namespace blink { | 31 namespace blink { |
32 | 32 |
33 class RenderSelectionInfoBase { | 33 class RenderSelectionInfoBase : public NoBaseWillBeGarbageCollected<RenderSelect ionInfoBase> { |
34 WTF_MAKE_NONCOPYABLE(RenderSelectionInfoBase); WTF_MAKE_FAST_ALLOCATED; | 34 WTF_MAKE_NONCOPYABLE(RenderSelectionInfoBase); WTF_MAKE_FAST_ALLOCATED_WILL_ BE_REMOVED; |
35 public: | 35 public: |
36 RenderSelectionInfoBase() | 36 RenderSelectionInfoBase() |
37 : m_object(0) | 37 : m_object(nullptr) |
38 , m_repaintContainer(0) | 38 , m_repaintContainer(0) |
39 , m_state(RenderObject::SelectionNone) | 39 , m_state(RenderObject::SelectionNone) |
40 { | 40 { |
41 } | 41 } |
42 | 42 |
43 RenderSelectionInfoBase(RenderObject* o) | 43 RenderSelectionInfoBase(RenderObject* o) |
44 : m_object(o) | 44 : m_object(o) |
45 , m_repaintContainer(o->containerForPaintInvalidation()) | 45 , m_repaintContainer(o->containerForPaintInvalidation()) |
46 , m_state(o->selectionState()) | 46 , m_state(o->selectionState()) |
47 { | 47 { |
48 } | 48 } |
49 | 49 |
50 void trace(Visitor* visitor) { visitor->trace(m_object); } | |
50 RenderObject* object() const { return m_object; } | 51 RenderObject* object() const { return m_object; } |
51 const RenderLayerModelObject* repaintContainer() const { return m_repaintCon tainer; } | 52 const RenderLayerModelObject* repaintContainer() const { return m_repaintCon tainer; } |
52 RenderObject::SelectionState state() const { return m_state; } | 53 RenderObject::SelectionState state() const { return m_state; } |
53 | 54 |
54 protected: | 55 protected: |
55 RenderObject* m_object; | 56 RawPtrWillBeMember<RenderObject> m_object; |
56 const RenderLayerModelObject* m_repaintContainer; | 57 const RenderLayerModelObject* m_repaintContainer; |
haraken
2014/08/14 08:13:41
Can we use a Member for this?
tkent
2014/08/14 08:51:23
Yes. I overlooked it.
Done in Patch Set 2.
| |
57 RenderObject::SelectionState m_state; | 58 RenderObject::SelectionState m_state; |
58 }; | 59 }; |
59 | 60 |
60 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderObject. | 61 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderObject. |
61 class RenderSelectionInfo : public RenderSelectionInfoBase { | 62 class RenderSelectionInfo FINAL : public RenderSelectionInfoBase { |
62 public: | 63 public: |
63 RenderSelectionInfo(RenderObject* o, bool clipToVisibleContent) | 64 RenderSelectionInfo(RenderObject* o, bool clipToVisibleContent) |
64 : RenderSelectionInfoBase(o) | 65 : RenderSelectionInfoBase(o) |
65 { | 66 { |
66 if (o->canUpdateSelectionOnRootLineBoxes()) { | 67 if (o->canUpdateSelectionOnRootLineBoxes()) { |
67 m_rect = o->selectionRectForPaintInvalidation(m_repaintContainer, cl ipToVisibleContent); | 68 m_rect = o->selectionRectForPaintInvalidation(m_repaintContainer, cl ipToVisibleContent); |
68 // FIXME: groupedMapping() leaks the squashing abstraction. See Rend erBlockSelectionInfo for more details. | 69 // FIXME: groupedMapping() leaks the squashing abstraction. See Rend erBlockSelectionInfo for more details. |
69 if (m_repaintContainer && m_repaintContainer->layer()->groupedMappin g()) | 70 if (m_repaintContainer && m_repaintContainer->layer()->groupedMappin g()) |
70 RenderLayer::mapRectToPaintInvalidationBacking(m_repaintContaine r, m_repaintContainer, m_rect); | 71 RenderLayer::mapRectToPaintInvalidationBacking(m_repaintContaine r, m_repaintContainer, m_rect); |
71 } else { | 72 } else { |
72 m_rect = LayoutRect(); | 73 m_rect = LayoutRect(); |
73 } | 74 } |
74 } | 75 } |
75 | 76 |
76 void repaint() | 77 void repaint() |
77 { | 78 { |
78 m_object->invalidatePaintUsingContainer(m_repaintContainer, m_rect, Inva lidationSelection); | 79 m_object->invalidatePaintUsingContainer(m_repaintContainer, m_rect, Inva lidationSelection); |
79 } | 80 } |
80 | 81 |
81 LayoutRect rect() const { return m_rect; } | 82 LayoutRect rect() const { return m_rect; } |
82 | 83 |
83 private: | 84 private: |
84 LayoutRect m_rect; // relative to repaint container | 85 LayoutRect m_rect; // relative to repaint container |
85 }; | 86 }; |
86 | 87 |
87 | 88 |
88 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderBlock. | 89 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderBlock. |
89 class RenderBlockSelectionInfo : public RenderSelectionInfoBase { | 90 class RenderBlockSelectionInfo FINAL : public RenderSelectionInfoBase { |
90 public: | 91 public: |
91 RenderBlockSelectionInfo(RenderBlock* b) | 92 RenderBlockSelectionInfo(RenderBlock* b) |
92 : RenderSelectionInfoBase(b) | 93 : RenderSelectionInfoBase(b) |
93 { | 94 { |
94 if (b->canUpdateSelectionOnRootLineBoxes()) | 95 if (b->canUpdateSelectionOnRootLineBoxes()) |
95 m_rects = block()->selectionGapRectsForRepaint(m_repaintContainer); | 96 m_rects = block()->selectionGapRectsForRepaint(m_repaintContainer); |
96 else | 97 else |
97 m_rects = GapRects(); | 98 m_rects = GapRects(); |
98 } | 99 } |
99 | 100 |
(...skipping 12 matching lines...) Expand all Loading... | |
112 GapRects rects() const { return m_rects; } | 113 GapRects rects() const { return m_rects; } |
113 | 114 |
114 private: | 115 private: |
115 GapRects m_rects; // relative to repaint container | 116 GapRects m_rects; // relative to repaint container |
116 }; | 117 }; |
117 | 118 |
118 } // namespace blink | 119 } // namespace blink |
119 | 120 |
120 | 121 |
121 #endif // RenderSelectionInfo_h | 122 #endif // RenderSelectionInfo_h |
OLD | NEW |