Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Side by Side Diff: cc/trees/draw_property_utils.cc

Issue 2345793003: Include viewport clip in visible rect of unclipped surfaces (2) (Closed)
Patch Set: delete test Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "cc/trees/draw_property_utils.h" 5 #include "cc/trees/draw_property_utils.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 420 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
421 target_to_content, combined_clip_rect_in_target_space)); 421 target_to_content, combined_clip_rect_in_target_space));
422 visible_rect.Intersect(gfx::Rect(layer_bounds)); 422 visible_rect.Intersect(gfx::Rect(layer_bounds));
423 layer->set_visible_layer_rect(visible_rect); 423 layer->set_visible_layer_rect(visible_rect);
424 } else { 424 } else {
425 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); 425 layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
426 } 426 }
427 continue; 427 continue;
428 } 428 }
429 429
430 // When both the layer and the target are unclipped, the entire layer 430 // When both the layer and the target are unclipped, we only have to apply
431 // content rect is visible. 431 // the viewport clip.
432 const bool fully_visible = 432 const bool fully_visible =
433 !clip_node->layers_are_clipped && !clip_node->target_is_clipped; 433 !clip_node->layers_are_clipped && !clip_node->target_is_clipped;
434 434
435 if (fully_visible) { 435 if (fully_visible) {
436 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); 436 if (!transform_node->ancestors_are_invertible) {
437 // An animated singular transform may become non-singular during the
438 // animation, so we still need to compute a visible rect. In this
439 // situation, we treat the entire layer as visible.
440 layer->set_visible_layer_rect(gfx::Rect(layer_bounds));
441 } else {
442 gfx::Transform from_screen;
443 from_screen.Translate(-layer->offset_to_transform_parent().x(),
444 -layer->offset_to_transform_parent().y());
445 from_screen.PreconcatTransform(
446 property_trees->transform_tree.FromScreen(transform_node->id));
447 gfx::Rect visible_rect =
448 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
449 from_screen, property_trees->clip_tree.ViewportClip()));
450 visible_rect.Intersect(gfx::Rect(layer_bounds));
451 layer->set_visible_layer_rect(visible_rect);
452 }
437 continue; 453 continue;
438 } 454 }
439 455
440 int target_node_id = transform_tree.ContentTargetId(transform_node->id); 456 int target_node_id = transform_tree.ContentTargetId(transform_node->id);
441 457
442 // The clip node stores clip rect in its target space. If required, 458 // The clip node stores clip rect in its target space. If required,
443 // this clip rect should be mapped to the current layer's target space. 459 // this clip rect should be mapped to the current layer's target space.
444 gfx::RectF combined_clip_rect_in_target_space; 460 gfx::RectF combined_clip_rect_in_target_space;
445 461
446 if (clip_node->target_transform_id != target_node_id) { 462 if (clip_node->target_transform_id != target_node_id) {
(...skipping 1138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1601 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1586 const Layer* overscroll_elasticity_layer, 1602 const Layer* overscroll_elasticity_layer,
1587 const gfx::Vector2dF& elastic_overscroll) { 1603 const gfx::Vector2dF& elastic_overscroll) {
1588 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1604 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1589 elastic_overscroll); 1605 elastic_overscroll);
1590 } 1606 }
1591 1607
1592 } // namespace draw_property_utils 1608 } // namespace draw_property_utils
1593 1609
1594 } // namespace cc 1610 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698