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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBox.cpp

Issue 2863933003: Remove the parameter of LayoutBox::XXXOverflowRectForPropagation() (Closed)
Patch Set: - Created 3 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc.
7 * All rights reserved. 7 * All rights reserved.
8 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 8 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 5046 matching lines...) Expand 10 before | Expand all | Expand 10 after
5057 5057
5058 DISABLE_CFI_PERF 5058 DISABLE_CFI_PERF
5059 void LayoutBox::AddOverflowFromChild(const LayoutBox& child, 5059 void LayoutBox::AddOverflowFromChild(const LayoutBox& child,
5060 const LayoutSize& delta) { 5060 const LayoutSize& delta) {
5061 // Never allow flow threads to propagate overflow up to a parent. 5061 // Never allow flow threads to propagate overflow up to a parent.
5062 if (child.IsLayoutFlowThread()) 5062 if (child.IsLayoutFlowThread())
5063 return; 5063 return;
5064 5064
5065 // Only propagate layout overflow from the child if the child isn't clipping 5065 // Only propagate layout overflow from the child if the child isn't clipping
5066 // its overflow. If it is, then its overflow is internal to it, and we don't 5066 // its overflow. If it is, then its overflow is internal to it, and we don't
5067 // care about it. layoutOverflowRectForPropagation takes care of this and just 5067 // care about it. LayoutOverflowRectForPropagation takes care of this and just
5068 // propagates the border box rect instead. 5068 // propagates the border box rect instead.
5069 LayoutRect child_layout_overflow_rect = 5069 LayoutRect child_layout_overflow_rect =
5070 child.LayoutOverflowRectForPropagation(StyleRef()); 5070 child.LayoutOverflowRectForPropagation();
5071 child_layout_overflow_rect.Move(delta); 5071 child_layout_overflow_rect.Move(delta);
5072 AddLayoutOverflow(child_layout_overflow_rect); 5072 AddLayoutOverflow(child_layout_overflow_rect);
5073 5073
5074 // Add in visual overflow from the child. Even if the child clips its 5074 // Add in visual overflow from the child. Even if the child clips its
5075 // overflow, it may still have visual overflow of its own set from box shadows 5075 // overflow, it may still have visual overflow of its own set from box shadows
5076 // or reflections. It is unnecessary to propagate this overflow if we are 5076 // or reflections. It is unnecessary to propagate this overflow if we are
5077 // clipping our own overflow. 5077 // clipping our own overflow.
5078 if (child.HasSelfPaintingLayer()) 5078 if (child.HasSelfPaintingLayer())
5079 return; 5079 return;
5080 LayoutRect child_visual_overflow_rect = 5080 LayoutRect child_visual_overflow_rect =
5081 child.VisualOverflowRectForPropagation(StyleRef()); 5081 child.VisualOverflowRectForPropagation();
5082 child_visual_overflow_rect.Move(delta); 5082 child_visual_overflow_rect.Move(delta);
5083 AddContentsVisualOverflow(child_visual_overflow_rect); 5083 AddContentsVisualOverflow(child_visual_overflow_rect);
5084 } 5084 }
5085 5085
5086 bool LayoutBox::HasTopOverflow() const { 5086 bool LayoutBox::HasTopOverflow() const {
5087 return !Style()->IsLeftToRightDirection() && !IsHorizontalWritingMode(); 5087 return !Style()->IsLeftToRightDirection() && !IsHorizontalWritingMode();
5088 } 5088 }
5089 5089
5090 bool LayoutBox::HasLeftOverflow() const { 5090 bool LayoutBox::HasLeftOverflow() const {
5091 return !Style()->IsLeftToRightDirection() && IsHorizontalWritingMode(); 5091 return !Style()->IsLeftToRightDirection() && IsHorizontalWritingMode();
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
5269 while (curr) { 5269 while (curr) {
5270 PaintLayer* layer = 5270 PaintLayer* layer =
5271 curr->HasLayer() && curr->IsBox() ? ToLayoutBox(curr)->Layer() : 0; 5271 curr->HasLayer() && curr->IsBox() ? ToLayoutBox(curr)->Layer() : 0;
5272 if (layer && layer->IsSelfPaintingLayer()) 5272 if (layer && layer->IsSelfPaintingLayer())
5273 return layer; 5273 return layer;
5274 curr = curr->Parent(); 5274 curr = curr->Parent();
5275 } 5275 }
5276 return nullptr; 5276 return nullptr;
5277 } 5277 }
5278 5278
5279 LayoutRect LayoutBox::LogicalVisualOverflowRectForPropagation( 5279 LayoutRect LayoutBox::LogicalVisualOverflowRectForPropagation() const {
5280 const ComputedStyle& parent_style) const { 5280 LayoutRect rect = VisualOverflowRectForPropagation();
5281 LayoutRect rect = VisualOverflowRectForPropagation(parent_style); 5281 if (!Parent()->StyleRef().IsHorizontalWritingMode())
5282 if (!parent_style.IsHorizontalWritingMode())
5283 return rect.TransposedRect(); 5282 return rect.TransposedRect();
5284 return rect; 5283 return rect;
5285 } 5284 }
5286 5285
5287 DISABLE_CFI_PERF 5286 DISABLE_CFI_PERF
5288 LayoutRect LayoutBox::VisualOverflowRectForPropagation( 5287 LayoutRect LayoutBox::RectForOverflowPropagation(const LayoutRect& rect) const {
5289 const ComputedStyle& parent_style) const { 5288 // If the child and parent are in the same blocks direction, then we don't
5290 // If the writing modes of the child and parent match, then we don't have to 5289 // have to do anything fancy. Just return the rect.
5291 // do anything fancy. Just return the result. 5290 if (Parent()->StyleRef().IsFlippedBlocksWritingMode() ==
5292 LayoutRect rect = VisualOverflowRect(); 5291 StyleRef().IsFlippedBlocksWritingMode())
5293 if (parent_style.GetWritingMode() == Style()->GetWritingMode())
5294 return rect; 5292 return rect;
5295 5293
5296 // We are putting ourselves into our parent's coordinate space. If there is a 5294 // Convert the rect into parent's blocks direction by flipping along the y
5297 // flipped block mismatch in a particular axis, then we have to flip the rect 5295 // axis.
5298 // along that axis. 5296 LayoutRect result = rect;
5299 if (IsFlippedBlocksWritingMode(Style()->GetWritingMode()) || 5297 result.SetX(Size().Width() - rect.MaxX());
5300 IsFlippedBlocksWritingMode(parent_style.GetWritingMode())) 5298 return result;
5301 rect.SetX(Size().Width() - rect.MaxX());
5302
5303 return rect;
5304 } 5299 }
5305 5300
5306 DISABLE_CFI_PERF 5301 DISABLE_CFI_PERF
5307 LayoutRect LayoutBox::LogicalLayoutOverflowRectForPropagation( 5302 LayoutRect LayoutBox::LogicalLayoutOverflowRectForPropagation() const {
5308 const ComputedStyle& parent_style) const { 5303 LayoutRect rect = LayoutOverflowRectForPropagation();
5309 LayoutRect rect = LayoutOverflowRectForPropagation(parent_style); 5304 if (!Parent()->StyleRef().IsHorizontalWritingMode())
5310 if (!parent_style.IsHorizontalWritingMode())
5311 return rect.TransposedRect(); 5305 return rect.TransposedRect();
5312 return rect; 5306 return rect;
5313 } 5307 }
5314 5308
5315 DISABLE_CFI_PERF 5309 DISABLE_CFI_PERF
5316 LayoutRect LayoutBox::LayoutOverflowRectForPropagation( 5310 LayoutRect LayoutBox::LayoutOverflowRectForPropagation() const {
5317 const ComputedStyle& parent_style) const {
5318 // Only propagate interior layout overflow if we don't clip it. 5311 // Only propagate interior layout overflow if we don't clip it.
5319 LayoutRect rect = BorderBoxRect(); 5312 LayoutRect rect = BorderBoxRect();
5320 // We want to include the margin, but only when it adds height. Quirky margins 5313 // We want to include the margin, but only when it adds height. Quirky margins
5321 // don't contribute height nor do the margins of self-collapsing blocks. 5314 // don't contribute height nor do the margins of self-collapsing blocks.
5322 if (!StyleRef().HasMarginAfterQuirk() && !IsSelfCollapsingBlock()) 5315 if (!StyleRef().HasMarginAfterQuirk() && !IsSelfCollapsingBlock())
5323 rect.Expand(IsHorizontalWritingMode() 5316 rect.Expand(IsHorizontalWritingMode()
5324 ? LayoutSize(LayoutUnit(), MarginAfter()) 5317 ? LayoutSize(LayoutUnit(), MarginAfter())
5325 : LayoutSize(MarginAfter(), LayoutUnit())); 5318 : LayoutSize(MarginAfter(), LayoutUnit()));
5326 5319
5327 if (!HasOverflowClip()) 5320 if (!HasOverflowClip())
5328 rect.Unite(LayoutOverflowRect()); 5321 rect.Unite(LayoutOverflowRect());
5329 5322
5330 bool has_transform = HasLayer() && Layer()->Transform(); 5323 bool has_transform = HasLayer() && Layer()->Transform();
5331 if (IsInFlowPositioned() || has_transform) { 5324 if (IsInFlowPositioned() || has_transform) {
5332 // If we are relatively positioned or if we have a transform, then we have 5325 // If we are relatively positioned or if we have a transform, then we have
5333 // to convert this rectangle into physical coordinates, apply relative 5326 // to convert this rectangle into physical coordinates, apply relative
5334 // positioning and transforms to it, and then convert it back. 5327 // positioning and transforms to it, and then convert it back.
5335 FlipForWritingMode(rect); 5328 FlipForWritingMode(rect);
5336 5329
5337 if (has_transform) 5330 if (has_transform)
5338 rect = Layer()->CurrentTransform().MapRect(rect); 5331 rect = Layer()->CurrentTransform().MapRect(rect);
5339 5332
5340 if (IsInFlowPositioned()) 5333 if (IsInFlowPositioned())
5341 rect.Move(OffsetForInFlowPosition()); 5334 rect.Move(OffsetForInFlowPosition());
5342 5335
5343 // Now we need to flip back. 5336 // Now we need to flip back.
5344 FlipForWritingMode(rect); 5337 FlipForWritingMode(rect);
5345 } 5338 }
5346 5339
5347 // If the writing modes of the child and parent match, then we don't have to 5340 return RectForOverflowPropagation(rect);
5348 // do anything fancy. Just return the result.
5349 if (parent_style.GetWritingMode() == Style()->GetWritingMode())
5350 return rect;
5351
5352 // We are putting ourselves into our parent's coordinate space. If there is a
5353 // flipped block mismatch in a particular axis, then we have to flip the rect
5354 // along that axis.
5355 if (IsFlippedBlocksWritingMode(Style()->GetWritingMode()) ||
5356 IsFlippedBlocksWritingMode(parent_style.GetWritingMode()))
5357 rect.SetX(Size().Width() - rect.MaxX());
5358
5359 return rect;
5360 } 5341 }
5361 5342
5362 DISABLE_CFI_PERF 5343 DISABLE_CFI_PERF
5363 LayoutRect LayoutBox::NoOverflowRect() const { 5344 LayoutRect LayoutBox::NoOverflowRect() const {
5364 // Because of the special coordinate system used for overflow rectangles and 5345 // Because of the special coordinate system used for overflow rectangles and
5365 // many other rectangles (not quite logical, not quite physical), we need to 5346 // many other rectangles (not quite logical, not quite physical), we need to
5366 // flip the block progression coordinate in vertical-rl writing mode. In other 5347 // flip the block progression coordinate in vertical-rl writing mode. In other
5367 // words, the rectangle returned is physical, except for the block direction 5348 // words, the rectangle returned is physical, except for the block direction
5368 // progression coordinate (x in vertical writing mode), which is always 5349 // progression coordinate (x in vertical writing mode), which is always
5369 // "logical top". Apart from the flipping, this method does the same thing as 5350 // "logical top". Apart from the flipping, this method does the same thing as
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
5904 void LayoutBox::MutableForPainting:: 5885 void LayoutBox::MutableForPainting::
5905 SavePreviousContentBoxSizeAndLayoutOverflowRect() { 5886 SavePreviousContentBoxSizeAndLayoutOverflowRect() {
5906 auto& rare_data = GetLayoutBox().EnsureRareData(); 5887 auto& rare_data = GetLayoutBox().EnsureRareData();
5907 rare_data.has_previous_content_box_size_and_layout_overflow_rect_ = true; 5888 rare_data.has_previous_content_box_size_and_layout_overflow_rect_ = true;
5908 rare_data.previous_content_box_size_ = GetLayoutBox().ContentBoxRect().Size(); 5889 rare_data.previous_content_box_size_ = GetLayoutBox().ContentBoxRect().Size();
5909 rare_data.previous_layout_overflow_rect_ = 5890 rare_data.previous_layout_overflow_rect_ =
5910 GetLayoutBox().LayoutOverflowRect(); 5891 GetLayoutBox().LayoutOverflowRect();
5911 } 5892 }
5912 5893
5913 } // namespace blink 5894 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.h ('k') | third_party/WebKit/Source/core/layout/LayoutBoxTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698