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

Side by Side Diff: Source/core/layout/LayoutInline.cpp

Issue 1278543002: Include the whole outline into visual overflow (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Avoid the global map Created 5 years, 4 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 | Annotate | Revision Log
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 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 return clippedOverflowRect(paintInvalidationContainer); 1043 return clippedOverflowRect(paintInvalidationContainer);
1044 } 1044 }
1045 1045
1046 LayoutRect LayoutInline::clippedOverflowRect(const LayoutBoxModelObject* paintIn validationContainer, const PaintInvalidationState* paintInvalidationState) const 1046 LayoutRect LayoutInline::clippedOverflowRect(const LayoutBoxModelObject* paintIn validationContainer, const PaintInvalidationState* paintInvalidationState) const
1047 { 1047 {
1048 const LayoutBoxModelObject* continuation = this->continuation(); 1048 const LayoutBoxModelObject* continuation = this->continuation();
1049 if ((!firstLineBoxIncludingCulling() && !continuation) || style()->visibilit y() != VISIBLE) 1049 if ((!firstLineBoxIncludingCulling() && !continuation) || style()->visibilit y() != VISIBLE)
1050 return LayoutRect(); 1050 return LayoutRect();
1051 1051
1052 LayoutRect overflowRect(linesVisualOverflowBoundingBox()); 1052 LayoutRect overflowRect(linesVisualOverflowBoundingBox());
1053 mapRectToPaintInvalidationBacking(paintInvalidationContainer, overflowRect, paintInvalidationState);
1054 1053
1055 LayoutUnit outlineOutset = style()->outlineOutsetExtent(); 1054 LayoutUnit outlineOutset = style()->outlineOutsetExtent();
1056 if (outlineOutset) { 1055 if (outlineOutset) {
1057 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling() ) { 1056 Vector<LayoutRect> rects;
1058 if (!curr->isText()) 1057 addOutlineRectsForChildrenAndContinuations(rects, LayoutPoint());
1059 overflowRect.unite(curr->rectWithOutlineForPaintInvalidation(pai ntInvalidationContainer, outlineOutset)); 1058 LayoutRect outlineRect = unionRect(rects);
1059 if (!outlineRect.isEmpty()) {
1060 outlineRect.inflate(outlineOutset);
1061 overflowRect.unite(outlineRect);
1060 } 1062 }
1061
1062 if (continuation && !continuation->isInline() && continuation->parent())
1063 overflowRect.unite(continuation->rectWithOutlineForPaintInvalidation (paintInvalidationContainer, outlineOutset));
1064 } 1063 }
1065 1064
1065 mapRectToPaintInvalidationBacking(paintInvalidationContainer, overflowRect, paintInvalidationState);
1066 return overflowRect; 1066 return overflowRect;
1067 } 1067 }
1068 1068
1069 LayoutRect LayoutInline::rectWithOutlineForPaintInvalidation(const LayoutBoxMode lObject* paintInvalidationContainer, LayoutUnit outlineWidth, const PaintInvalid ationState* paintInvalidationState) const
1070 {
1071 LayoutRect r(LayoutBoxModelObject::rectWithOutlineForPaintInvalidation(paint InvalidationContainer, outlineWidth, paintInvalidationState));
1072 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) {
1073 if (!curr->isText())
1074 r.unite(curr->rectWithOutlineForPaintInvalidation(paintInvalidationC ontainer, outlineWidth, paintInvalidationState));
1075 }
1076 return r;
1077 }
1078
1079 void LayoutInline::mapRectToPaintInvalidationBacking(const LayoutBoxModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* pai ntInvalidationState) const 1069 void LayoutInline::mapRectToPaintInvalidationBacking(const LayoutBoxModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* pai ntInvalidationState) const
1080 { 1070 {
1081 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer)) { 1071 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer)) {
1082 if (style()->hasInFlowPosition() && layer()) 1072 if (style()->hasInFlowPosition() && layer())
1083 rect.move(layer()->offsetForInFlowPosition()); 1073 rect.move(layer()->offsetForInFlowPosition());
1084 rect.move(paintInvalidationState->paintOffset()); 1074 rect.move(paintInvalidationState->paintOffset());
1085 if (paintInvalidationState->isClipped()) 1075 if (paintInvalidationState->isClipped())
1086 rect.intersect(paintInvalidationState->clipRect()); 1076 rect.intersect(paintInvalidationState->clipRect());
1087 return; 1077 return;
1088 } 1078 }
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 }; 1365 };
1376 1366
1377 } // unnamed namespace 1367 } // unnamed namespace
1378 1368
1379 void LayoutInline::addOutlineRects(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset) const 1369 void LayoutInline::addOutlineRects(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset) const
1380 { 1370 {
1381 AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additio nalOffset); 1371 AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additio nalOffset);
1382 generateLineBoxRects(context); 1372 generateLineBoxRects(context);
1383 addOutlineRectsForChildrenAndContinuations(rects, additionalOffset); 1373 addOutlineRectsForChildrenAndContinuations(rects, additionalOffset);
1384 } 1374 }
1375
chrishtr 2015/08/27 18:20:59 spurious
Xianzhu 2015/08/27 19:23:13 Done.
1385 void LayoutInline::addOutlineRectsForChildrenAndContinuations(Vector<LayoutRect> & rects, const LayoutPoint& additionalOffset) const 1376 void LayoutInline::addOutlineRectsForChildrenAndContinuations(Vector<LayoutRect> & rects, const LayoutPoint& additionalOffset) const
1386 { 1377 {
1387 addOutlineRectsForNormalChildren(rects, additionalOffset); 1378 addOutlineRectsForNormalChildren(rects, additionalOffset);
1388 addOutlineRectsForContinuations(rects, additionalOffset); 1379 addOutlineRectsForContinuations(rects, additionalOffset);
1389 } 1380 }
1390 1381
1391 void LayoutInline::addOutlineRectsForContinuations(Vector<LayoutRect>& rects, co nst LayoutPoint& additionalOffset) const 1382 void LayoutInline::addOutlineRectsForContinuations(Vector<LayoutRect>& rects, co nst LayoutPoint& additionalOffset) const
1392 { 1383 {
1393 if (LayoutBoxModelObject* continuation = this->continuation()) { 1384 if (LayoutBoxModelObject* continuation = this->continuation()) {
1394 if (continuation->isInline()) 1385 if (continuation->isInline())
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1429 } 1420 }
1430 1421
1431 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer) const 1422 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer) const
1432 { 1423 {
1433 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine r); 1424 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine r);
1434 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) 1425 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox())
1435 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); 1426 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box);
1436 } 1427 }
1437 1428
1438 } // namespace blink 1429 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698