Chromium Code Reviews| Index: ui/compositor/clip_transform_recorder.cc |
| diff --git a/ui/compositor/clip_transform_recorder.cc b/ui/compositor/clip_transform_recorder.cc |
| index ddc70d15ea2a32f65cf4adc839555bf9e51abee2..46bb149fbe70ca06702e648dcd285d4f20c7a9e5 100644 |
| --- a/ui/compositor/clip_transform_recorder.cc |
| +++ b/ui/compositor/clip_transform_recorder.cc |
| @@ -11,32 +11,40 @@ |
| #include "cc/playback/transform_display_item.h" |
| #include "ui/compositor/paint_context.h" |
| #include "ui/gfx/canvas.h" |
| +#include "ui/gfx/geometry/rect.h" |
| #include "ui/gfx/path.h" |
| namespace ui { |
| -ClipTransformRecorder::ClipTransformRecorder(const PaintContext& context) |
| - : context_(context), num_closers_(0) { |
| -} |
| +ClipTransformRecorder::ClipTransformRecorder(const PaintContext& context, |
| + const gfx::Size& visual_size) |
| + : context_(context), |
| + visual_rect_(context.ToVisualRect(visual_size)), |
| + num_closers_(0) {} |
| ClipTransformRecorder::~ClipTransformRecorder() { |
| for (size_t i = 0; i < num_closers_; ++i) { |
| switch (closers_[i]) { |
| case CLIP_RECT: |
| - context_.list_->CreateAndAppendItem<cc::EndClipDisplayItem>(); |
| + context_.list_->CreateAndAppendItem<cc::EndClipDisplayItem>( |
| + visual_rect_); |
| break; |
| case CLIP_PATH: |
| - context_.list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>(); |
| + context_.list_->CreateAndAppendItem<cc::EndClipPathDisplayItem>( |
| + visual_rect_); |
| break; |
| case TRANSFORM: |
| - context_.list_->CreateAndAppendItem<cc::EndTransformDisplayItem>(); |
| + context_.list_->CreateAndAppendItem<cc::EndTransformDisplayItem>( |
| + visual_rect_); |
| break; |
| } |
| } |
| } |
| void ClipTransformRecorder::ClipRect(const gfx::Rect& clip_rect) { |
| - auto* item = context_.list_->CreateAndAppendItem<cc::ClipDisplayItem>(); |
| + gfx::Rect visual_rect = clip_rect + context_.offset_; |
|
danakj
2015/11/06 00:32:45
use the same help on context as above?
also, comm
wkorman
2015/11/16 19:01:03
Renamed to clip_in_layer_space.
|
| + auto* item = |
| + context_.list_->CreateAndAppendItem<cc::ClipDisplayItem>(visual_rect); |
| item->SetNew(clip_rect, std::vector<SkRRect>()); |
| DCHECK_LT(num_closers_, arraysize(closers_)); |
| closers_[num_closers_++] = CLIP_RECT; |
| @@ -44,7 +52,9 @@ void ClipTransformRecorder::ClipRect(const gfx::Rect& clip_rect) { |
| void ClipTransformRecorder::ClipPath(const gfx::Path& clip_path) { |
| bool anti_alias = false; |
| - auto* item = context_.list_->CreateAndAppendItem<cc::ClipPathDisplayItem>(); |
| + // As a further optimization, consider passing a more granular visual rect. |
| + auto* item = context_.list_->CreateAndAppendItem<cc::ClipPathDisplayItem>( |
| + visual_rect_); |
| item->SetNew(clip_path, SkRegion::kIntersect_Op, anti_alias); |
| DCHECK_LT(num_closers_, arraysize(closers_)); |
| closers_[num_closers_++] = CLIP_PATH; |
| @@ -53,14 +63,17 @@ void ClipTransformRecorder::ClipPath(const gfx::Path& clip_path) { |
| void ClipTransformRecorder::ClipPathWithAntiAliasing( |
| const gfx::Path& clip_path) { |
| bool anti_alias = true; |
| - auto* item = context_.list_->CreateAndAppendItem<cc::ClipPathDisplayItem>(); |
| + // As a further optimization, consider passing a more granular visual rect. |
| + auto* item = context_.list_->CreateAndAppendItem<cc::ClipPathDisplayItem>( |
| + visual_rect_); |
| item->SetNew(clip_path, SkRegion::kIntersect_Op, anti_alias); |
| DCHECK_LT(num_closers_, arraysize(closers_)); |
| closers_[num_closers_++] = CLIP_PATH; |
| } |
| void ClipTransformRecorder::Transform(const gfx::Transform& transform) { |
| - auto* item = context_.list_->CreateAndAppendItem<cc::TransformDisplayItem>(); |
| + auto* item = context_.list_->CreateAndAppendItem<cc::TransformDisplayItem>( |
| + visual_rect_); |
| item->SetNew(transform); |
| DCHECK_LT(num_closers_, arraysize(closers_)); |
| closers_[num_closers_++] = TRANSFORM; |