Chromium Code Reviews| 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 | 48 |
| 49 RenderObject* object() const { return m_object.get(); } | 49 RenderObject* object() const { return m_object.get(); } |
| 50 | 50 |
| 51 protected: | 51 protected: |
| 52 RawPtrWillBeMember<RenderObject> m_object; | 52 RawPtrWillBeMember<RenderObject> m_object; |
| 53 RawPtrWillBeMember<const RenderLayerModelObject> m_paintInvalidationContaine r; | 53 RawPtrWillBeMember<const RenderLayerModelObject> m_paintInvalidationContaine r; |
| 54 RenderObject::SelectionState m_state; | 54 RenderObject::SelectionState m_state; |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderObject. | 57 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderObject. |
| 58 class RenderSelectionInfo final : public RenderSelectionInfoBase { | 58 class RenderSelectionInfo final : public RenderSelectionInfoBase { |
|
Xianzhu
2014/11/03 17:03:36
Can we combine RenderSelectionInfoBase into Render
Julien - ping for review
2014/11/03 17:29:20
Yes, however I didn't want to burden this patch wi
| |
| 59 public: | 59 public: |
| 60 RenderSelectionInfo(RenderObject* o) | 60 RenderSelectionInfo(RenderObject* o) |
| 61 : RenderSelectionInfoBase(o) | 61 : RenderSelectionInfoBase(o) |
| 62 { | 62 { |
| 63 if (m_paintInvalidationContainer && o->canUpdateSelectionOnRootLineBoxes ()) { | 63 if (m_paintInvalidationContainer && o->canUpdateSelectionOnRootLineBoxes ()) { |
| 64 m_rect = o->selectionRectForPaintInvalidation(m_paintInvalidationCon tainer); | 64 m_rect = o->selectionRectForPaintInvalidation(m_paintInvalidationCon tainer); |
| 65 // FIXME: groupedMapping() leaks the squashing abstraction. See Rend erBlockSelectionInfo for more details. | 65 // FIXME: groupedMapping() leaks the squashing abstraction. See Rend erBlockSelectionInfo for more details. |
| 66 if (m_paintInvalidationContainer->layer()->groupedMapping()) | 66 if (m_paintInvalidationContainer->layer()->groupedMapping()) |
| 67 RenderLayer::mapRectToPaintBackingCoordinates(m_paintInvalidatio nContainer, m_rect); | 67 RenderLayer::mapRectToPaintBackingCoordinates(m_paintInvalidatio nContainer, m_rect); |
| 68 } else { | 68 } else { |
| 69 m_rect = LayoutRect(); | 69 m_rect = LayoutRect(); |
| 70 } | 70 } |
| 71 } | 71 } |
| 72 | 72 |
| 73 void invalidatePaint() | |
| 74 { | |
| 75 m_object->invalidatePaintUsingContainer(m_paintInvalidationContainer, en closingIntRect(m_rect), PaintInvalidationSelection); | |
| 76 } | |
| 77 | |
| 78 LayoutRect absoluteSelectionRect() const | 73 LayoutRect absoluteSelectionRect() const |
| 79 { | 74 { |
| 80 if (!m_paintInvalidationContainer) | 75 if (!m_paintInvalidationContainer) |
| 81 return LayoutRect(); | 76 return LayoutRect(); |
| 82 | 77 |
| 83 FloatQuad absQuad = m_paintInvalidationContainer->localToAbsoluteQuad(Fl oatRect(m_rect)); | 78 FloatQuad absQuad = m_paintInvalidationContainer->localToAbsoluteQuad(Fl oatRect(m_rect)); |
| 84 return absQuad.enclosingBoundingBox(); | 79 return absQuad.enclosingBoundingBox(); |
| 85 } | 80 } |
| 86 | 81 |
| 87 bool hasChangedFrom(const RenderSelectionInfo& other) const | |
| 88 { | |
| 89 // There is no point in comparing selection info for different objects. | |
| 90 ASSERT(m_object == other.m_object); | |
| 91 ASSERT(m_paintInvalidationContainer == other.m_paintInvalidationContaine r); | |
| 92 | |
| 93 return m_state != other.m_state || m_rect != other.m_rect; | |
| 94 } | |
| 95 | |
| 96 private: | 82 private: |
| 97 LayoutRect m_rect; // relative to paint invalidation container | 83 LayoutRect m_rect; // relative to paint invalidation container |
| 98 }; | 84 }; |
| 99 | 85 |
| 100 // This struct is used when the selection changes to cache the old and new state of the selection for each RenderBlock. | |
| 101 class RenderBlockSelectionInfo final : public RenderSelectionInfoBase { | |
| 102 public: | |
| 103 RenderBlockSelectionInfo(RenderBlock* b) | |
| 104 : RenderSelectionInfoBase(b) | |
| 105 { | |
| 106 if (m_paintInvalidationContainer && b->canUpdateSelectionOnRootLineBoxes ()) | |
| 107 m_rects = block()->selectionGapRectsForPaintInvalidation(m_paintInva lidationContainer); | |
| 108 else | |
| 109 m_rects = GapRects(); | |
| 110 } | |
| 111 | |
| 112 void invalidatePaint() | |
| 113 { | |
| 114 LayoutRect paintInvalidationRect = m_rects; | |
| 115 // FIXME: this is leaking the squashing abstraction. However, removing t he groupedMapping() condiitional causes | |
| 116 // RenderBox::mapRectToPaintInvalidationBacking to get called, which mak es rect adjustments even if you pass the same | |
| 117 // paintInvalidationContainer as the render object. Find out why it does that and fix. | |
| 118 if (m_paintInvalidationContainer && m_paintInvalidationContainer->layer( )->groupedMapping()) | |
| 119 RenderLayer::mapRectToPaintBackingCoordinates(m_paintInvalidationCon tainer, paintInvalidationRect); | |
| 120 m_object->invalidatePaintUsingContainer(m_paintInvalidationContainer, en closingIntRect(paintInvalidationRect), PaintInvalidationSelection); | |
| 121 } | |
| 122 | |
| 123 bool hasChangedFrom(const RenderBlockSelectionInfo& other) const | |
| 124 { | |
| 125 // There is no point in comparing selection info for different objects. | |
| 126 ASSERT(m_object == other.m_object); | |
| 127 ASSERT(m_paintInvalidationContainer == other.m_paintInvalidationContaine r); | |
| 128 | |
| 129 return m_state != other.m_state || m_rects != other.m_rects; | |
| 130 } | |
| 131 | |
| 132 private: | |
| 133 RenderBlock* block() const { return toRenderBlock(m_object); } | |
| 134 | |
| 135 GapRects m_rects; // relative to paint invalidation container | |
| 136 }; | |
| 137 | |
| 138 } // namespace blink | 86 } // namespace blink |
| 139 | 87 |
| 140 | 88 |
| 141 #endif // RenderSelectionInfo_h | 89 #endif // RenderSelectionInfo_h |
| OLD | NEW |