| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/paint/RoundedInnerRectClipper.h" | 5 #include "core/paint/RoundedInnerRectClipper.h" |
| 6 | 6 |
| 7 #include "core/layout/LayoutObject.h" | |
| 8 #include "core/paint/PaintInfo.h" | 7 #include "core/paint/PaintInfo.h" |
| 9 #include "platform/graphics/paint/ClipDisplayItem.h" | 8 #include "platform/graphics/paint/ClipDisplayItem.h" |
| 10 #include "platform/graphics/paint/PaintController.h" | 9 #include "platform/graphics/paint/PaintController.h" |
| 11 | 10 |
| 12 namespace blink { | 11 namespace blink { |
| 13 | 12 |
| 14 RoundedInnerRectClipper::RoundedInnerRectClipper( | 13 RoundedInnerRectClipper::RoundedInnerRectClipper( |
| 15 const LayoutObject& layout_object, | 14 const DisplayItemClient& display_item, |
| 16 const PaintInfo& paint_info, | 15 const PaintInfo& paint_info, |
| 17 const LayoutRect& rect, | 16 const LayoutRect& rect, |
| 18 const FloatRoundedRect& clip_rect, | 17 const FloatRoundedRect& clip_rect, |
| 19 RoundedInnerRectClipperBehavior behavior) | 18 RoundedInnerRectClipperBehavior behavior) |
| 20 : layout_object_(layout_object), | 19 : display_item_(display_item), |
| 21 paint_info_(paint_info), | 20 paint_info_(paint_info), |
| 22 use_paint_controller_(behavior == kApplyToDisplayList), | 21 use_paint_controller_(behavior == kApplyToDisplayList), |
| 23 clip_type_(use_paint_controller_ | 22 clip_type_(use_paint_controller_ |
| 24 ? paint_info_.DisplayItemTypeForClipping() | 23 ? paint_info_.DisplayItemTypeForClipping() |
| 25 : DisplayItem::kClipBoxPaintPhaseFirst) { | 24 : DisplayItem::kClipBoxPaintPhaseFirst) { |
| 26 Vector<FloatRoundedRect> rounded_rect_clips; | 25 Vector<FloatRoundedRect> rounded_rect_clips; |
| 27 if (clip_rect.IsRenderable()) { | 26 if (clip_rect.IsRenderable()) { |
| 28 rounded_rect_clips.push_back(clip_rect); | 27 rounded_rect_clips.push_back(clip_rect); |
| 29 } else { | 28 } else { |
| 30 // We create a rounded rect for each of the corners and clip it, while | 29 // We create a rounded rect for each of the corners and clip it, while |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 clip_rect.Rect().MaxY() - rect.Y().ToFloat()); | 62 clip_rect.Rect().MaxY() - rect.Y().ToFloat()); |
| 64 FloatRoundedRect::Radii bottom_corner_radii; | 63 FloatRoundedRect::Radii bottom_corner_radii; |
| 65 bottom_corner_radii.SetBottomLeft(clip_rect.GetRadii().BottomLeft()); | 64 bottom_corner_radii.SetBottomLeft(clip_rect.GetRadii().BottomLeft()); |
| 66 rounded_rect_clips.push_back( | 65 rounded_rect_clips.push_back( |
| 67 FloatRoundedRect(bottom_corner, bottom_corner_radii)); | 66 FloatRoundedRect(bottom_corner, bottom_corner_radii)); |
| 68 } | 67 } |
| 69 } | 68 } |
| 70 | 69 |
| 71 if (use_paint_controller_) { | 70 if (use_paint_controller_) { |
| 72 paint_info_.context.GetPaintController().CreateAndAppend<ClipDisplayItem>( | 71 paint_info_.context.GetPaintController().CreateAndAppend<ClipDisplayItem>( |
| 73 layout_object, clip_type_, LayoutRect::InfiniteIntRect(), | 72 display_item, clip_type_, LayoutRect::InfiniteIntRect(), |
| 74 rounded_rect_clips); | 73 rounded_rect_clips); |
| 75 } else { | 74 } else { |
| 76 ClipDisplayItem clip_display_item(layout_object, clip_type_, | 75 ClipDisplayItem clip_display_item(display_item, clip_type_, |
| 77 LayoutRect::InfiniteIntRect(), | 76 LayoutRect::InfiniteIntRect(), |
| 78 rounded_rect_clips); | 77 rounded_rect_clips); |
| 79 clip_display_item.Replay(paint_info.context); | 78 clip_display_item.Replay(paint_info.context); |
| 80 } | 79 } |
| 81 } | 80 } |
| 82 | 81 |
| 83 RoundedInnerRectClipper::~RoundedInnerRectClipper() { | 82 RoundedInnerRectClipper::~RoundedInnerRectClipper() { |
| 84 DisplayItem::Type end_type = DisplayItem::ClipTypeToEndClipType(clip_type_); | 83 DisplayItem::Type end_type = DisplayItem::ClipTypeToEndClipType(clip_type_); |
| 85 if (use_paint_controller_) { | 84 if (use_paint_controller_) { |
| 86 paint_info_.context.GetPaintController().EndItem<EndClipDisplayItem>( | 85 paint_info_.context.GetPaintController().EndItem<EndClipDisplayItem>( |
| 87 layout_object_, end_type); | 86 display_item_, end_type); |
| 88 } else { | 87 } else { |
| 89 EndClipDisplayItem end_clip_display_item(layout_object_, end_type); | 88 EndClipDisplayItem end_clip_display_item(display_item_, end_type); |
| 90 end_clip_display_item.Replay(paint_info_.context); | 89 end_clip_display_item.Replay(paint_info_.context); |
| 91 } | 90 } |
| 92 } | 91 } |
| 93 | 92 |
| 94 } // namespace blink | 93 } // namespace blink |
| OLD | NEW |