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

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

Issue 2437923002: cc: Change ClipNode::applies_local_clip to a clip_type enum (Closed)
Patch Set: Fix Windows build Created 4 years, 2 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 | « cc/trees/clip_node.cc ('k') | 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 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 return ConditionalClip{false, gfx::RectF()}; 259 return ConditionalClip{false, gfx::RectF()};
260 } 260 }
261 261
262 if (!include_clip_applied_by_target) { 262 if (!include_clip_applied_by_target) {
263 clip_node = parent_chain.top(); 263 clip_node = parent_chain.top();
264 parent_chain.pop(); 264 parent_chain.pop();
265 } 265 }
266 266
267 // TODO(weiliangc): If we don't create clip for render surface, we don't need 267 // TODO(weiliangc): If we don't create clip for render surface, we don't need
268 // to check applies_local_clip. 268 // to check applies_local_clip.
269 while (!clip_node->applies_local_clip && parent_chain.size() > 0) { 269 while (clip_node->clip_type != ClipNode::ClipType::APPLIES_LOCAL_CLIP &&
270 parent_chain.size() > 0) {
270 clip_node = parent_chain.top(); 271 clip_node = parent_chain.top();
271 parent_chain.pop(); 272 parent_chain.pop();
272 } 273 }
273 274
274 if (!clip_node->applies_local_clip) 275 if (clip_node->clip_type != ClipNode::ClipType::APPLIES_LOCAL_CLIP)
275 // No clip node applying clip in between. 276 // No clip node applying clip in between.
276 return ConditionalClip{false, gfx::RectF()}; 277 return ConditionalClip{false, gfx::RectF()};
277 278
278 ConditionalClip current_clip = ComputeCurrentClip( 279 ConditionalClip current_clip = ComputeCurrentClip(
279 clip_node, property_trees, target_transform_id, target_id); 280 clip_node, property_trees, target_transform_id, target_id);
280 is_clipped = current_clip.is_clipped; 281 is_clipped = current_clip.is_clipped;
281 gfx::RectF accumulated_clip = current_clip.clip_rect; 282 gfx::RectF accumulated_clip = current_clip.clip_rect;
282 283
283 while (parent_chain.size() > 0) { 284 while (parent_chain.size() > 0) {
284 clip_node = parent_chain.top(); 285 clip_node = parent_chain.top();
285 parent_chain.pop(); 286 parent_chain.pop();
286 if (!clip_node->applies_local_clip) { 287 if (clip_node->clip_type != ClipNode::ClipType::APPLIES_LOCAL_CLIP) {
287 continue; 288 continue;
288 } 289 }
289 ConditionalClip current_clip = ComputeCurrentClip( 290 ConditionalClip current_clip = ComputeCurrentClip(
290 clip_node, property_trees, target_transform_id, target_id); 291 clip_node, property_trees, target_transform_id, target_id);
291 292
292 // If transform is not invertible, no clip will be applied. 293 // If transform is not invertible, no clip will be applied.
293 if (!current_clip.is_clipped) 294 if (!current_clip.is_clipped)
294 return ConditionalClip{false, gfx::RectF()}; 295 return ConditionalClip{false, gfx::RectF()};
295 296
296 is_clipped = true; 297 is_clipped = true;
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 parent_to_current, parent_clip_node->combined_clip_in_target_space); 850 parent_to_current, parent_clip_node->combined_clip_in_target_space);
850 parent_clip_in_target_space = MathUtil::ProjectClippedRect( 851 parent_clip_in_target_space = MathUtil::ProjectClippedRect(
851 parent_to_current, parent_clip_node->clip_in_target_space); 852 parent_to_current, parent_clip_node->clip_in_target_space);
852 } 853 }
853 // Only nodes affected by ancestor clips will have their clip adjusted due 854 // Only nodes affected by ancestor clips will have their clip adjusted due
854 // to intersecting with an ancestor clip. But, we still need to propagate 855 // to intersecting with an ancestor clip. But, we still need to propagate
855 // the combined clip to our children because if they are clipped, they may 856 // the combined clip to our children because if they are clipped, they may
856 // need to clip using our parent clip and if we don't propagate it here, 857 // need to clip using our parent clip and if we don't propagate it here,
857 // it will be lost. 858 // it will be lost.
858 if (clip_node->resets_clip && non_root_surfaces_enabled) { 859 if (clip_node->resets_clip && non_root_surfaces_enabled) {
859 if (clip_node->applies_local_clip) { 860 if (clip_node->clip_type == ClipNode::ClipType::APPLIES_LOCAL_CLIP) {
860 clip_node->clip_in_target_space = MathUtil::MapClippedRect( 861 clip_node->clip_in_target_space = MathUtil::MapClippedRect(
861 transform_tree.ToTarget(clip_node->transform_id, 862 transform_tree.ToTarget(clip_node->transform_id,
862 clip_node->target_effect_id), 863 clip_node->target_effect_id),
863 clip_node->clip); 864 clip_node->clip);
864 ResetIfHasNanCoordinate(&clip_node->clip_in_target_space); 865 ResetIfHasNanCoordinate(&clip_node->clip_in_target_space);
865 clip_node->combined_clip_in_target_space = 866 clip_node->combined_clip_in_target_space =
866 gfx::IntersectRects(clip_node->clip_in_target_space, 867 gfx::IntersectRects(clip_node->clip_in_target_space,
867 parent_combined_clip_in_target_space); 868 parent_combined_clip_in_target_space);
868 } else { 869 } else {
869 DCHECK(!clip_node->target_is_clipped); 870 DCHECK(!clip_node->target_is_clipped);
870 DCHECK(!clip_node->layers_are_clipped); 871 DCHECK(!clip_node->layers_are_clipped);
871 clip_node->combined_clip_in_target_space = 872 clip_node->combined_clip_in_target_space =
872 parent_combined_clip_in_target_space; 873 parent_combined_clip_in_target_space;
873 } 874 }
874 ResetIfHasNanCoordinate(&clip_node->combined_clip_in_target_space); 875 ResetIfHasNanCoordinate(&clip_node->combined_clip_in_target_space);
875 continue; 876 continue;
876 } 877 }
877 bool use_only_parent_clip = !clip_node->applies_local_clip; 878 bool use_only_parent_clip =
879 clip_node->clip_type != ClipNode::ClipType::APPLIES_LOCAL_CLIP;
878 if (use_only_parent_clip) { 880 if (use_only_parent_clip) {
879 clip_node->combined_clip_in_target_space = 881 clip_node->combined_clip_in_target_space =
880 parent_combined_clip_in_target_space; 882 parent_combined_clip_in_target_space;
881 if (!non_root_surfaces_enabled) { 883 if (!non_root_surfaces_enabled) {
882 clip_node->clip_in_target_space = 884 clip_node->clip_in_target_space =
883 parent_clip_node->clip_in_target_space; 885 parent_clip_node->clip_in_target_space;
884 } else if (!clip_node->target_is_clipped) { 886 } else if (!clip_node->target_is_clipped) {
885 clip_node->clip_in_target_space = parent_clip_in_target_space; 887 clip_node->clip_in_target_space = parent_clip_in_target_space;
886 } else { 888 } else {
887 // Render Surface applies clip and the owning layer itself applies 889 // Render Surface applies clip and the owning layer itself applies
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1604 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1603 const Layer* overscroll_elasticity_layer, 1605 const Layer* overscroll_elasticity_layer,
1604 const gfx::Vector2dF& elastic_overscroll) { 1606 const gfx::Vector2dF& elastic_overscroll) {
1605 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1607 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1606 elastic_overscroll); 1608 elastic_overscroll);
1607 } 1609 }
1608 1610
1609 } // namespace draw_property_utils 1611 } // namespace draw_property_utils
1610 1612
1611 } // namespace cc 1613 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/clip_node.cc ('k') | cc/trees/layer_tree_host_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698