| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) | 2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
reserved. |
| 4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. | 4 * Copyright (C) 2011 Adobe Systems Incorporated. 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 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 || (!a.right().isIntrinsicOrAuto() && a.right() != b.right()))) | 361 || (!a.right().isIntrinsicOrAuto() && a.right() != b.right()))) |
| 362 return false; | 362 return false; |
| 363 | 363 |
| 364 // One of the units is fixed or percent in both directions and stayed | 364 // One of the units is fixed or percent in both directions and stayed |
| 365 // that way in the new style. Therefore all we are doing is moving. | 365 // that way in the new style. Therefore all we are doing is moving. |
| 366 return true; | 366 return true; |
| 367 } | 367 } |
| 368 | 368 |
| 369 StyleDifference RenderStyle::visualInvalidationDiff(const RenderStyle& other, un
signed& changedContextSensitiveProperties) const | 369 StyleDifference RenderStyle::visualInvalidationDiff(const RenderStyle& other, un
signed& changedContextSensitiveProperties) const |
| 370 { | 370 { |
| 371 changedContextSensitiveProperties = ContextSensitivePropertyNone; | |
| 372 | |
| 373 // Note, we use .get() on each DataRef below because DataRef::operator== wil
l do a deep | 371 // Note, we use .get() on each DataRef below because DataRef::operator== wil
l do a deep |
| 374 // compare, which is duplicate work when we're going to compare each propert
y inside | 372 // compare, which is duplicate work when we're going to compare each propert
y inside |
| 375 // this function anyway. | 373 // this function anyway. |
| 376 | 374 |
| 377 StyleDifference diff; | 375 StyleDifference diff; |
| 378 if (m_svgStyle.get() != other.m_svgStyle.get()) { | 376 if (m_svgStyle.get() != other.m_svgStyle.get()) |
| 379 diff = m_svgStyle->diff(other.m_svgStyle.get()); | 377 diff = m_svgStyle->diff(other.m_svgStyle.get()); |
| 380 if (diff.needsFullLayout()) | |
| 381 return diff; | |
| 382 } | |
| 383 | 378 |
| 384 if (diffNeedsFullLayout(other)) { | 379 if (!diff.needsFullLayout() && diffNeedsFullLayout(other)) |
| 385 diff.setNeedsFullLayout(); | 380 diff.setNeedsFullLayout(); |
| 386 return diff; | |
| 387 } | |
| 388 | 381 |
| 389 if (position() != StaticPosition && surround->offset != other.surround->offs
et) { | 382 if (!diff.needsFullLayout() && position() != StaticPosition && surround->off
set != other.surround->offset) { |
| 390 // Optimize for the case where a positioned layer is moving but not chan
ging size. | 383 // Optimize for the case where a positioned layer is moving but not chan
ging size. |
| 391 if ((position() == AbsolutePosition || position() == FixedPosition) | 384 if ((position() == AbsolutePosition || position() == FixedPosition) |
| 392 && positionedObjectMovedOnly(surround->offset, other.surround->offse
t, m_box->width())) { | 385 && positionedObjectMovedOnly(surround->offset, other.surround->offse
t, m_box->width())) { |
| 393 diff.setNeedsPositionedMovementLayout(); | 386 diff.setNeedsPositionedMovementLayout(); |
| 394 } else { | 387 } else { |
| 395 // FIXME: We would like to use SimplifiedLayout for relative positio
ning, but we can't quite do that yet. | 388 // FIXME: We would like to use SimplifiedLayout for relative positio
ning, but we can't quite do that yet. |
| 396 // We need to make sure SimplifiedLayout can operate correctly on Re
nderInlines (we will need | 389 // We need to make sure SimplifiedLayout can operate correctly on Re
nderInlines (we will need |
| 397 // to add a selfNeedsSimplifiedLayout bit in order to not get confus
ed and taint every line). | 390 // to add a selfNeedsSimplifiedLayout bit in order to not get confus
ed and taint every line). |
| 398 diff.setNeedsFullLayout(); | 391 diff.setNeedsFullLayout(); |
| 399 return diff; | |
| 400 } | 392 } |
| 401 } | 393 } |
| 402 | 394 |
| 403 if (diffNeedsRepaintLayerOnly(other)) | 395 if (diffNeedsRepaintLayer(other)) |
| 404 diff.setNeedsRepaintLayer(); | 396 diff.setNeedsRepaintLayer(); |
| 405 else if (diffNeedsRepaintObjectOnly(other)) | 397 else if (diffNeedsRepaintObject(other)) |
| 406 diff.setNeedsRepaintObject(); | 398 diff.setNeedsRepaintObject(); |
| 407 | 399 |
| 408 changedContextSensitiveProperties = computeChangedContextSensitiveProperties
(other, diff); | 400 changedContextSensitiveProperties = computeChangedContextSensitiveProperties
(other, diff); |
| 409 | 401 |
| 410 if (diff.needsRepaint() && diff.needsPositionedMovementLayout()) { | 402 if (diff.hasNoChange() && diffNeedsRecompositeLayer(other)) |
| 411 // FIXME: When both repaint and positioned-movement-layout are needed, t
he original | |
| 412 // code promoted diff to StyleDifferenceLayout because the original enum
can't express | |
| 413 // the exact needs in the case. The following code is temporary to keep
the original | |
| 414 // behavior. Will remove in later changes when we optimize and change fu
nctionality, | |
| 415 // which may be just to rebaseline layout test expectations. | |
| 416 diff.clearNeedsRepaint(); | |
| 417 diff.setNeedsFullLayout(); | |
| 418 return diff; | |
| 419 } | |
| 420 | |
| 421 if (diff.hasNoChange() && diffNeedsRecompositeLayerOnly(other)) | |
| 422 diff.setNeedsRecompositeLayer(); | 403 diff.setNeedsRecompositeLayer(); |
| 423 | 404 |
| 424 // Cursors are not checked, since they will be set appropriately in response
to mouse events, | 405 // Cursors are not checked, since they will be set appropriately in response
to mouse events, |
| 425 // so they don't need to cause any repaint or layout. | 406 // so they don't need to cause any repaint or layout. |
| 426 | 407 |
| 427 // Animations don't need to be checked either. We always set the new style o
n the RenderObject, so we will get a chance to fire off | 408 // Animations don't need to be checked either. We always set the new style o
n the RenderObject, so we will get a chance to fire off |
| 428 // the resulting transition properly. | 409 // the resulting transition properly. |
| 429 | 410 |
| 430 return diff; | 411 return diff; |
| 431 } | 412 } |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 if (!m_background->outline().visuallyEqual(other.m_background->outline())) { | 596 if (!m_background->outline().visuallyEqual(other.m_background->outline())) { |
| 616 // FIXME: We only really need to recompute the overflow but we don't hav
e an optimized layout for it. | 597 // FIXME: We only really need to recompute the overflow but we don't hav
e an optimized layout for it. |
| 617 return true; | 598 return true; |
| 618 } | 599 } |
| 619 | 600 |
| 620 // Movement of non-static-positioned object is special cased in RenderStyle:
:visualInvalidationDiff(). | 601 // Movement of non-static-positioned object is special cased in RenderStyle:
:visualInvalidationDiff(). |
| 621 | 602 |
| 622 return false; | 603 return false; |
| 623 } | 604 } |
| 624 | 605 |
| 625 bool RenderStyle::diffNeedsRepaintLayerOnly(const RenderStyle& other) const | 606 bool RenderStyle::diffNeedsRepaintLayer(const RenderStyle& other) const |
| 626 { | 607 { |
| 627 if (position() != StaticPosition && (visual->clip != other.visual->clip || v
isual->hasClip != other.visual->hasClip)) | 608 if (position() != StaticPosition && (visual->clip != other.visual->clip || v
isual->hasClip != other.visual->hasClip)) |
| 628 return true; | 609 return true; |
| 629 | 610 |
| 630 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (rareNonInheritedData
->m_effectiveBlendMode != other.rareNonInheritedData->m_effectiveBlendMode | 611 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (rareNonInheritedData
->m_effectiveBlendMode != other.rareNonInheritedData->m_effectiveBlendMode |
| 631 || rareNonInheritedData->m_isolation != other.rareNonInheritedData->m_is
olation)) | 612 || rareNonInheritedData->m_isolation != other.rareNonInheritedData->m_is
olation)) |
| 632 return true; | 613 return true; |
| 633 | 614 |
| 634 if (rareNonInheritedData->m_mask != other.rareNonInheritedData->m_mask | 615 if (rareNonInheritedData->m_mask != other.rareNonInheritedData->m_mask |
| 635 || rareNonInheritedData->m_maskBoxImage != other.rareNonInheritedData->m
_maskBoxImage) | 616 || rareNonInheritedData->m_maskBoxImage != other.rareNonInheritedData->m
_maskBoxImage) |
| 636 return true; | 617 return true; |
| 637 | 618 |
| 638 return false; | 619 return false; |
| 639 } | 620 } |
| 640 | 621 |
| 641 bool RenderStyle::diffNeedsRepaintObjectOnly(const RenderStyle& other) const | 622 bool RenderStyle::diffNeedsRepaintObject(const RenderStyle& other) const |
| 642 { | 623 { |
| 643 if (inherited_flags._visibility != other.inherited_flags._visibility | 624 if (inherited_flags._visibility != other.inherited_flags._visibility |
| 644 || inherited_flags.m_printColorAdjust != other.inherited_flags.m_printCo
lorAdjust | 625 || inherited_flags.m_printColorAdjust != other.inherited_flags.m_printCo
lorAdjust |
| 645 || inherited_flags._insideLink != other.inherited_flags._insideLink | 626 || inherited_flags._insideLink != other.inherited_flags._insideLink |
| 646 || !surround->border.visuallyEqual(other.surround->border) | 627 || !surround->border.visuallyEqual(other.surround->border) |
| 647 || !m_background->visuallyEqual(*other.m_background) | 628 || !m_background->visuallyEqual(*other.m_background) |
| 648 || rareInheritedData->userModify != other.rareInheritedData->userModify | 629 || rareInheritedData->userModify != other.rareInheritedData->userModify |
| 649 || rareInheritedData->userSelect != other.rareInheritedData->userSelect | 630 || rareInheritedData->userSelect != other.rareInheritedData->userSelect |
| 650 || rareNonInheritedData->userDrag != other.rareNonInheritedData->userDra
g | 631 || rareNonInheritedData->userDrag != other.rareNonInheritedData->userDra
g |
| 651 || rareNonInheritedData->m_borderFit != other.rareNonInheritedData->m_bo
rderFit | 632 || rareNonInheritedData->m_borderFit != other.rareNonInheritedData->m_bo
rderFit |
| 652 || rareNonInheritedData->m_objectFit != other.rareNonInheritedData->m_ob
jectFit | 633 || rareNonInheritedData->m_objectFit != other.rareNonInheritedData->m_ob
jectFit |
| 653 || rareNonInheritedData->m_objectPosition != other.rareNonInheritedData-
>m_objectPosition | 634 || rareNonInheritedData->m_objectPosition != other.rareNonInheritedData-
>m_objectPosition |
| 654 || rareInheritedData->m_imageRendering != other.rareInheritedData->m_ima
geRendering) | 635 || rareInheritedData->m_imageRendering != other.rareInheritedData->m_ima
geRendering) |
| 655 return true; | 636 return true; |
| 656 | 637 |
| 657 if (rareNonInheritedData->m_shapeOutside != other.rareNonInheritedData->m_sh
apeOutside) | 638 if (rareNonInheritedData->m_shapeOutside != other.rareNonInheritedData->m_sh
apeOutside) |
| 658 return true; | 639 return true; |
| 659 | 640 |
| 660 if (rareNonInheritedData->m_clipPath != other.rareNonInheritedData->m_clipPa
th) | 641 if (rareNonInheritedData->m_clipPath != other.rareNonInheritedData->m_clipPa
th) |
| 661 return true; | 642 return true; |
| 662 | 643 |
| 663 return false; | 644 return false; |
| 664 } | 645 } |
| 665 | 646 |
| 666 bool RenderStyle::diffNeedsRecompositeLayerOnly(const RenderStyle& other) const | 647 bool RenderStyle::diffNeedsRecompositeLayer(const RenderStyle& other) const |
| 667 { | 648 { |
| 668 if (rareNonInheritedData.get() != other.rareNonInheritedData.get()) { | 649 if (rareNonInheritedData.get() != other.rareNonInheritedData.get()) { |
| 669 if (rareNonInheritedData->m_transformStyle3D != other.rareNonInheritedDa
ta->m_transformStyle3D | 650 if (rareNonInheritedData->m_transformStyle3D != other.rareNonInheritedDa
ta->m_transformStyle3D |
| 670 || rareNonInheritedData->m_backfaceVisibility != other.rareNonInheri
tedData->m_backfaceVisibility | 651 || rareNonInheritedData->m_backfaceVisibility != other.rareNonInheri
tedData->m_backfaceVisibility |
| 671 || rareNonInheritedData->m_perspective != other.rareNonInheritedData
->m_perspective | 652 || rareNonInheritedData->m_perspective != other.rareNonInheritedData
->m_perspective |
| 672 || rareNonInheritedData->m_perspectiveOriginX != other.rareNonInheri
tedData->m_perspectiveOriginX | 653 || rareNonInheritedData->m_perspectiveOriginX != other.rareNonInheri
tedData->m_perspectiveOriginX |
| 673 || rareNonInheritedData->m_perspectiveOriginY != other.rareNonInheri
tedData->m_perspectiveOriginY | 654 || rareNonInheritedData->m_perspectiveOriginY != other.rareNonInheri
tedData->m_perspectiveOriginY |
| 674 || hasWillChangeCompositingHint() != other.hasWillChangeCompositingH
int() | 655 || hasWillChangeCompositingHint() != other.hasWillChangeCompositingH
int() |
| 675 || hasWillChangeGpuRasterizationHint() != other.hasWillChangeGpuRast
erizationHint()) | 656 || hasWillChangeGpuRasterizationHint() != other.hasWillChangeGpuRast
erizationHint()) |
| 676 return true; | 657 return true; |
| (...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1682 // right | 1663 // right |
| 1683 radiiSum = radii.topRight().height() + radii.bottomRight().height(); | 1664 radiiSum = radii.topRight().height() + radii.bottomRight().height(); |
| 1684 if (radiiSum > rect.height()) | 1665 if (radiiSum > rect.height()) |
| 1685 factor = std::min(rect.height() / radiiSum, factor); | 1666 factor = std::min(rect.height() / radiiSum, factor); |
| 1686 | 1667 |
| 1687 ASSERT(factor <= 1); | 1668 ASSERT(factor <= 1); |
| 1688 return factor; | 1669 return factor; |
| 1689 } | 1670 } |
| 1690 | 1671 |
| 1691 } // namespace WebCore | 1672 } // namespace WebCore |
| OLD | NEW |