OLD | NEW |
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) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 } | 372 } |
373 setHasOverflowClip(shouldClipOverflow); | 373 setHasOverflowClip(shouldClipOverflow); |
374 } | 374 } |
375 | 375 |
376 bool LayoutBlock::allowsOverflowClip() const | 376 bool LayoutBlock::allowsOverflowClip() const |
377 { | 377 { |
378 // If overflow has been propagated to the viewport, it has no effect here. | 378 // If overflow has been propagated to the viewport, it has no effect here. |
379 return node() != document().viewportDefiningElement(); | 379 return node() != document().viewportDefiningElement(); |
380 } | 380 } |
381 | 381 |
382 void LayoutBlock::invalidatePaintOfSubtreesIfNeeded(PaintInvalidationState& chil
dPaintInvalidationState) | 382 void LayoutBlock::invalidatePaintOfSubtreesIfNeeded(const PaintInvalidationState
& childPaintInvalidationState) |
383 { | 383 { |
384 LayoutBox::invalidatePaintOfSubtreesIfNeeded(childPaintInvalidationState); | 384 LayoutBox::invalidatePaintOfSubtreesIfNeeded(childPaintInvalidationState); |
385 | 385 |
386 // Take care of positioned objects. This is required as PaintInvalidationSta
te keeps a single clip rect. | 386 // Take care of positioned objects. This is required as PaintInvalidationSta
te keeps a single clip rect. |
387 if (TrackedLayoutBoxListHashSet* positionedObjects = this->positionedObjects
()) { | 387 if (TrackedLayoutBoxListHashSet* positionedObjects = this->positionedObjects
()) { |
388 for (auto* box : *positionedObjects) { | 388 for (auto* box : *positionedObjects) { |
389 | 389 |
390 // One of the layoutObjects we're skipping over here may be the chil
d's paint invalidation container, | 390 // One of the layoutObjects we're skipping over here may be the chil
d's paint invalidation container, |
391 // so we can't pass our own paint invalidation container along. | 391 // so we can't pass our own paint invalidation container along. |
392 const LayoutBoxModelObject& paintInvalidationContainerForChild = box
->containerForPaintInvalidation(); | 392 const LayoutBoxModelObject& paintInvalidationContainerForChild = box
->containerForPaintInvalidation(); |
393 | 393 |
394 // If it's a new paint invalidation container, we won't have properl
y accumulated the offset into the | 394 // If it's a new paint invalidation container, we won't have properl
y accumulated the offset into the |
395 // PaintInvalidationState. | 395 // PaintInvalidationState. |
396 // FIXME: Teach PaintInvalidationState to handle this case. crbug.co
m/371485 | 396 // FIXME: Teach PaintInvalidationState to handle this case. crbug.co
m/371485 |
397 // Note: when the box itself establishes a paint invalidation contai
ner, the second part of the condition below | 397 if (paintInvalidationContainerForChild != childPaintInvalidationStat
e.paintInvalidationContainer()) { |
398 // will be true because childPaintInvalidationState.paintInvalidatio
nContainer() is the parent paintInvalidationContainer. | |
399 // We need the first part of the condition to exclude the case from
using ForceHorriblySlowRectMapping. | |
400 if (&paintInvalidationContainerForChild != box && paintInvalidationC
ontainerForChild != childPaintInvalidationState.paintInvalidationContainer()) { | |
401 ForceHorriblySlowRectMapping slowRectMapping(&childPaintInvalida
tionState); | 398 ForceHorriblySlowRectMapping slowRectMapping(&childPaintInvalida
tionState); |
402 PaintInvalidationState disabledPaintInvalidationState(childPaint
InvalidationState, *this, paintInvalidationContainerForChild); | 399 PaintInvalidationState disabledPaintInvalidationState(childPaint
InvalidationState, *this, paintInvalidationContainerForChild); |
403 box->invalidateTreeIfNeeded(disabledPaintInvalidationState); | 400 box->invalidateTreeIfNeeded(disabledPaintInvalidationState); |
404 continue; | 401 continue; |
405 } | 402 } |
406 | 403 |
407 // If the positioned layoutObject is absolutely positioned and it is
inside | 404 // If the positioned layoutObject is absolutely positioned and it is
inside |
408 // a relatively positioned inline element, we need to account for | 405 // a relatively positioned inline element, we need to account for |
409 // the inline elements position in PaintInvalidationState. | 406 // the inline elements position in PaintInvalidationState. |
410 if (box->style()->position() == AbsolutePosition) { | 407 if (box->style()->position() == AbsolutePosition) { |
(...skipping 2453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2864 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout
Object* obj) const | 2861 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout
Object* obj) const |
2865 { | 2862 { |
2866 showLayoutObject(); | 2863 showLayoutObject(); |
2867 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) | 2864 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) |
2868 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); | 2865 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); |
2869 } | 2866 } |
2870 | 2867 |
2871 #endif | 2868 #endif |
2872 | 2869 |
2873 } // namespace blink | 2870 } // namespace blink |
OLD | NEW |