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

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

Issue 2127663002: Adjust background clip when local attachment is used with non-visible overflow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restrict to the padding box rect when attachment is local on scrollable element. Created 4 years, 5 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. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 offset.move(absPos.x(), absPos.y()); 697 offset.move(absPos.x(), absPos.y());
698 return toIntSize(offset); 698 return toIntSize(offset);
699 } 699 }
700 700
701 FloatQuad LayoutBox::absoluteContentQuad() const 701 FloatQuad LayoutBox::absoluteContentQuad() const
702 { 702 {
703 LayoutRect rect = contentBoxRect(); 703 LayoutRect rect = contentBoxRect();
704 return localToAbsoluteQuad(FloatRect(rect)); 704 return localToAbsoluteQuad(FloatRect(rect));
705 } 705 }
706 706
707 LayoutRect LayoutBox::backgroundClipRect() const
708 {
709 // TODO(flackr): Check for the maximum background clip rect.
710 switch (style()->backgroundClip()) {
711 case BorderFillBox:
712 // A 'border-box' clip on scrollable elements local attachment is treate d as 'padding-box'.
713 // https://www.w3.org/TR/css3-background/#the-background-attachment
714 if (!style()->isOverflowVisible() && style()->backgroundLayers().attachm ent() == LocalBackgroundAttachment)
715 return paddingBoxRect();
716 return borderBoxRect();
717 break;
718 case PaddingFillBox:
719 return paddingBoxRect();
720 break;
721 case ContentFillBox:
722 return contentBoxRect();
723 break;
724 default:
725 break;
726 }
727 return LayoutRect();
728 }
729
707 void LayoutBox::addOutlineRects(Vector<LayoutRect>& rects, const LayoutPoint& ad ditionalOffset, IncludeBlockVisualOverflowOrNot) const 730 void LayoutBox::addOutlineRects(Vector<LayoutRect>& rects, const LayoutPoint& ad ditionalOffset, IncludeBlockVisualOverflowOrNot) const
708 { 731 {
709 rects.append(LayoutRect(additionalOffset, size())); 732 rects.append(LayoutRect(additionalOffset, size()));
710 } 733 }
711 734
712 bool LayoutBox::canResize() const 735 bool LayoutBox::canResize() const
713 { 736 {
714 // We need a special case for <iframe> because they never have 737 // We need a special case for <iframe> because they never have
715 // hasOverflowClip(). However, they do "implicitly" clip their contents, so 738 // hasOverflowClip(). However, they do "implicitly" clip their contents, so
716 // we want to allow resizing them also. 739 // we want to allow resizing them also.
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 // FIXME: Check the opaqueness of background images. 1374 // FIXME: Check the opaqueness of background images.
1352 1375
1353 // FIXME: Use rounded rect if border radius is present. 1376 // FIXME: Use rounded rect if border radius is present.
1354 if (style()->hasBorderRadius()) 1377 if (style()->hasBorderRadius())
1355 return false; 1378 return false;
1356 if (hasClipPath()) 1379 if (hasClipPath())
1357 return false; 1380 return false;
1358 // FIXME: The background color clip is defined by the last layer. 1381 // FIXME: The background color clip is defined by the last layer.
1359 if (style()->backgroundLayers().next()) 1382 if (style()->backgroundLayers().next())
1360 return false; 1383 return false;
1361 LayoutRect backgroundRect; 1384 return backgroundClipRect().contains(localRect);
1362 switch (style()->backgroundClip()) {
1363 case BorderFillBox:
1364 backgroundRect = borderBoxRect();
1365 break;
1366 case PaddingFillBox:
1367 backgroundRect = paddingBoxRect();
1368 break;
1369 case ContentFillBox:
1370 backgroundRect = contentBoxRect();
1371 break;
1372 default:
1373 break;
1374 }
1375 return backgroundRect.contains(localRect);
1376 } 1385 }
1377 1386
1378 static bool isCandidateForOpaquenessTest(const LayoutBox& childBox) 1387 static bool isCandidateForOpaquenessTest(const LayoutBox& childBox)
1379 { 1388 {
1380 const ComputedStyle& childStyle = childBox.styleRef(); 1389 const ComputedStyle& childStyle = childBox.styleRef();
1381 if (childStyle.position() != StaticPosition && childBox.containingBlock() != childBox.parent()) 1390 if (childStyle.position() != StaticPosition && childBox.containingBlock() != childBox.parent())
1382 return false; 1391 return false;
1383 if (childStyle.visibility() != VISIBLE || childStyle.shapeOutside()) 1392 if (childStyle.visibility() != VISIBLE || childStyle.shapeOutside())
1384 return false; 1393 return false;
1385 if (childBox.size().isZero()) 1394 if (childBox.size().isZero())
(...skipping 3549 matching lines...) Expand 10 before | Expand all | Expand 10 after
4935 m_rareData->m_snapAreas->remove(&snapArea); 4944 m_rareData->m_snapAreas->remove(&snapArea);
4936 } 4945 }
4937 } 4946 }
4938 4947
4939 SnapAreaSet* LayoutBox::snapAreas() const 4948 SnapAreaSet* LayoutBox::snapAreas() const
4940 { 4949 {
4941 return m_rareData ? m_rareData->m_snapAreas.get() : nullptr; 4950 return m_rareData ? m_rareData->m_snapAreas.get() : nullptr;
4942 } 4951 }
4943 4952
4944 } // namespace blink 4953 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698