OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
6 | 6 |
7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/numerics/safe_conversions.h" | 8 #include "base/numerics/safe_conversions.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 draw_properties_.visible_layer_rect, draw_properties_.clip_rect, | 318 draw_properties_.visible_layer_rect, draw_properties_.clip_rect, |
319 is_clipped_, draw_properties_.opacity, draw_blend_mode_, | 319 is_clipped_, draw_properties_.opacity, draw_blend_mode_, |
320 sorting_context_id_); | 320 sorting_context_id_); |
321 } | 321 } |
322 | 322 |
323 void LayerImpl::PopulateScaledSharedQuadState(SharedQuadState* state, | 323 void LayerImpl::PopulateScaledSharedQuadState(SharedQuadState* state, |
324 float scale) const { | 324 float scale) const { |
325 gfx::Transform scaled_draw_transform = | 325 gfx::Transform scaled_draw_transform = |
326 draw_properties_.target_space_transform; | 326 draw_properties_.target_space_transform; |
327 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 327 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
328 gfx::Size scaled_bounds = gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale)); | 328 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); |
329 gfx::Rect scaled_visible_layer_rect = | 329 gfx::Rect scaled_visible_layer_rect = |
330 gfx::ScaleToEnclosingRect(visible_layer_rect(), scale); | 330 gfx::ScaleToEnclosingRect(visible_layer_rect(), scale); |
331 scaled_visible_layer_rect.Intersect(gfx::Rect(scaled_bounds)); | 331 scaled_visible_layer_rect.Intersect(gfx::Rect(scaled_bounds)); |
332 | 332 |
333 state->SetAll(scaled_draw_transform, scaled_bounds, scaled_visible_layer_rect, | 333 state->SetAll(scaled_draw_transform, scaled_bounds, scaled_visible_layer_rect, |
334 draw_properties().clip_rect, is_clipped_, | 334 draw_properties().clip_rect, is_clipped_, |
335 draw_properties().opacity, draw_blend_mode_, | 335 draw_properties().opacity, draw_blend_mode_, |
336 sorting_context_id_); | 336 sorting_context_id_); |
337 } | 337 } |
338 | 338 |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 transform_tree.SetOuterViewportBoundsDelta(bounds_delta); | 977 transform_tree.SetOuterViewportBoundsDelta(bounds_delta); |
978 | 978 |
979 ScrollbarParametersDidChange(true); | 979 ScrollbarParametersDidChange(true); |
980 | 980 |
981 if (masks_to_bounds()) { | 981 if (masks_to_bounds()) { |
982 // If layer is clipping, then update the clip node using the new bounds. | 982 // If layer is clipping, then update the clip node using the new bounds. |
983 ClipNode* clip_node = | 983 ClipNode* clip_node = |
984 layer_tree_impl()->property_trees()->clip_tree.Node(clip_tree_index()); | 984 layer_tree_impl()->property_trees()->clip_tree.Node(clip_tree_index()); |
985 if (clip_node) { | 985 if (clip_node) { |
986 DCHECK(id() == clip_node->owner_id); | 986 DCHECK(id() == clip_node->owner_id); |
987 clip_node->data.clip = | 987 clip_node->data.clip = gfx::RectF( |
988 gfx::RectF(gfx::PointF() + offset_to_transform_parent(), bounds()); | 988 gfx::PointF() + offset_to_transform_parent(), gfx::SizeF(bounds())); |
989 layer_tree_impl()->property_trees()->clip_tree.set_needs_update(true); | 989 layer_tree_impl()->property_trees()->clip_tree.set_needs_update(true); |
990 } | 990 } |
991 | 991 |
992 NoteLayerPropertyChangedForSubtree(); | 992 NoteLayerPropertyChangedForSubtree(); |
993 } else { | 993 } else { |
994 NoteLayerPropertyChanged(); | 994 NoteLayerPropertyChanged(); |
995 } | 995 } |
996 } | 996 } |
997 | 997 |
998 void LayerImpl::SetMaskLayer(scoped_ptr<LayerImpl> mask_layer) { | 998 void LayerImpl::SetMaskLayer(scoped_ptr<LayerImpl> mask_layer) { |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1521 | 1521 |
1522 float scale_factor = 1.f; | 1522 float scale_factor = 1.f; |
1523 for (LayerImpl const* current_layer = this; | 1523 for (LayerImpl const* current_layer = this; |
1524 current_layer != scroll_clip_layer_->parent(); | 1524 current_layer != scroll_clip_layer_->parent(); |
1525 current_layer = current_layer->parent()) { | 1525 current_layer = current_layer->parent()) { |
1526 if (current_layer == page_scale_layer) | 1526 if (current_layer == page_scale_layer) |
1527 scale_factor = layer_tree_impl()->current_page_scale_factor(); | 1527 scale_factor = layer_tree_impl()->current_page_scale_factor(); |
1528 } | 1528 } |
1529 | 1529 |
1530 gfx::SizeF scaled_scroll_bounds = | 1530 gfx::SizeF scaled_scroll_bounds = |
1531 gfx::ToFlooredSize(gfx::ScaleSize(BoundsForScrolling(), scale_factor)); | 1531 gfx::ScaleSize(BoundsForScrolling(), scale_factor); |
1532 scaled_scroll_bounds = gfx::ToFlooredSize(scaled_scroll_bounds); | 1532 scaled_scroll_bounds.SetSize(std::floor(scaled_scroll_bounds.width()), |
| 1533 std::floor(scaled_scroll_bounds.height())); |
1533 | 1534 |
1534 gfx::ScrollOffset max_offset( | 1535 gfx::ScrollOffset max_offset( |
1535 scaled_scroll_bounds.width() - scroll_clip_layer_->bounds().width(), | 1536 scaled_scroll_bounds.width() - scroll_clip_layer_->bounds().width(), |
1536 scaled_scroll_bounds.height() - scroll_clip_layer_->bounds().height()); | 1537 scaled_scroll_bounds.height() - scroll_clip_layer_->bounds().height()); |
1537 // We need the final scroll offset to be in CSS coords. | 1538 // We need the final scroll offset to be in CSS coords. |
1538 max_offset.Scale(1 / scale_factor); | 1539 max_offset.Scale(1 / scale_factor); |
1539 max_offset.SetToMax(gfx::ScrollOffset()); | 1540 max_offset.SetToMax(gfx::ScrollOffset()); |
1540 return max_offset; | 1541 return max_offset; |
1541 } | 1542 } |
1542 | 1543 |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1895 | 1896 |
1896 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { | 1897 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { |
1897 return MathUtil::MapEnclosingClippedRect( | 1898 return MathUtil::MapEnclosingClippedRect( |
1898 draw_properties_.target_space_transform, gfx::Rect(bounds())); | 1899 draw_properties_.target_space_transform, gfx::Rect(bounds())); |
1899 } | 1900 } |
1900 | 1901 |
1901 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { | 1902 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { |
1902 gfx::Transform scaled_draw_transform = | 1903 gfx::Transform scaled_draw_transform = |
1903 draw_properties_.target_space_transform; | 1904 draw_properties_.target_space_transform; |
1904 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 1905 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
1905 gfx::Size scaled_bounds = gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale)); | 1906 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); |
1906 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, | 1907 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, |
1907 gfx::Rect(scaled_bounds)); | 1908 gfx::Rect(scaled_bounds)); |
1908 } | 1909 } |
1909 | 1910 |
1910 float LayerImpl::GetIdealContentsScale() const { | 1911 float LayerImpl::GetIdealContentsScale() const { |
1911 float page_scale = IsAffectedByPageScale() | 1912 float page_scale = IsAffectedByPageScale() |
1912 ? layer_tree_impl()->current_page_scale_factor() | 1913 ? layer_tree_impl()->current_page_scale_factor() |
1913 : 1.f; | 1914 : 1.f; |
1914 float device_scale = layer_tree_impl()->device_scale_factor(); | 1915 float device_scale = layer_tree_impl()->device_scale_factor(); |
1915 | 1916 |
1916 float default_scale = page_scale * device_scale; | 1917 float default_scale = page_scale * device_scale; |
1917 if (!layer_tree_impl() | 1918 if (!layer_tree_impl() |
1918 ->settings() | 1919 ->settings() |
1919 .layer_transforms_should_scale_layer_contents) { | 1920 .layer_transforms_should_scale_layer_contents) { |
1920 return default_scale; | 1921 return default_scale; |
1921 } | 1922 } |
1922 | 1923 |
1923 // TODO(enne): the transform needs to come from property trees instead of | 1924 // TODO(enne): the transform needs to come from property trees instead of |
1924 // draw properties. | 1925 // draw properties. |
1925 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1926 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1926 draw_properties().target_space_transform, default_scale); | 1927 draw_properties().target_space_transform, default_scale); |
1927 return std::max(transform_scales.x(), transform_scales.y()); | 1928 return std::max(transform_scales.x(), transform_scales.y()); |
1928 } | 1929 } |
1929 | 1930 |
1930 } // namespace cc | 1931 } // namespace cc |
OLD | NEW |