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 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 // 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 |
372 // 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 |
373 // this function anyway. | 373 // this function anyway. |
374 | 374 |
375 StyleDifference diff; | 375 StyleDifference diff; |
376 if (m_svgStyle.get() != other.m_svgStyle.get()) | 376 if (m_svgStyle.get() != other.m_svgStyle.get()) |
377 diff = m_svgStyle->diff(other.m_svgStyle.get()); | 377 diff = m_svgStyle->diff(other.m_svgStyle.get()); |
378 | 378 |
| 379 if ((!diff.needsFullLayout() || !diff.needsRepaint()) && diffNeedsFullLayout
AndRepaint(other)) { |
| 380 diff.setNeedsFullLayout(); |
| 381 diff.setNeedsRepaintObject(); |
| 382 } |
| 383 |
379 if (!diff.needsFullLayout() && diffNeedsFullLayout(other)) | 384 if (!diff.needsFullLayout() && diffNeedsFullLayout(other)) |
380 diff.setNeedsFullLayout(); | 385 diff.setNeedsFullLayout(); |
381 | 386 |
382 if (!diff.needsFullLayout() && position() != StaticPosition && surround->off
set != other.surround->offset) { | 387 if (!diff.needsFullLayout() && position() != StaticPosition && surround->off
set != other.surround->offset) { |
383 // Optimize for the case where a positioned layer is moving but not chan
ging size. | 388 // Optimize for the case where a positioned layer is moving but not chan
ging size. |
384 if ((position() == AbsolutePosition || position() == FixedPosition) | 389 if ((position() == AbsolutePosition || position() == FixedPosition) |
385 && positionedObjectMovedOnly(surround->offset, other.surround->offse
t, m_box->width())) { | 390 && positionedObjectMovedOnly(surround->offset, other.surround->offse
t, m_box->width())) { |
386 diff.setNeedsPositionedMovementLayout(); | 391 diff.setNeedsPositionedMovementLayout(); |
387 } else { | 392 } else { |
388 // FIXME: We would like to use SimplifiedLayout for relative positio
ning, but we can't quite do that yet. | 393 // FIXME: We would like to use SimplifiedLayout for relative positio
ning, but we can't quite do that yet. |
(...skipping 15 matching lines...) Expand all Loading... |
404 | 409 |
405 // Cursors are not checked, since they will be set appropriately in response
to mouse events, | 410 // Cursors are not checked, since they will be set appropriately in response
to mouse events, |
406 // so they don't need to cause any repaint or layout. | 411 // so they don't need to cause any repaint or layout. |
407 | 412 |
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 | 413 // 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 |
409 // the resulting transition properly. | 414 // the resulting transition properly. |
410 | 415 |
411 return diff; | 416 return diff; |
412 } | 417 } |
413 | 418 |
414 bool RenderStyle::diffNeedsFullLayout(const RenderStyle& other) const | 419 bool RenderStyle::diffNeedsFullLayoutAndRepaint(const RenderStyle& other) const |
415 { | 420 { |
| 421 // FIXME: Not all cases in this method need both full layout and repaint. |
| 422 // Should move cases into diffNeedsFullLayout() if |
| 423 // - don't need repaint at all; |
| 424 // - or the renderer knows how to exactly repaint caused by the layout chang
e |
| 425 // instead of forced full repaint. |
| 426 |
416 if (m_box.get() != other.m_box.get()) { | 427 if (m_box.get() != other.m_box.get()) { |
417 if (m_box->width() != other.m_box->width() | 428 if (m_box->width() != other.m_box->width() |
418 || m_box->minWidth() != other.m_box->minWidth() | 429 || m_box->minWidth() != other.m_box->minWidth() |
419 || m_box->maxWidth() != other.m_box->maxWidth() | 430 || m_box->maxWidth() != other.m_box->maxWidth() |
420 || m_box->height() != other.m_box->height() | 431 || m_box->height() != other.m_box->height() |
421 || m_box->minHeight() != other.m_box->minHeight() | 432 || m_box->minHeight() != other.m_box->minHeight() |
422 || m_box->maxHeight() != other.m_box->maxHeight()) | 433 || m_box->maxHeight() != other.m_box->maxHeight()) |
423 return true; | 434 return true; |
424 | 435 |
425 if (m_box->verticalAlign() != other.m_box->verticalAlign()) | 436 if (m_box->verticalAlign() != other.m_box->verticalAlign()) |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 if (!m_background->outline().visuallyEqual(other.m_background->outline())) { | 607 if (!m_background->outline().visuallyEqual(other.m_background->outline())) { |
597 // FIXME: We only really need to recompute the overflow but we don't hav
e an optimized layout for it. | 608 // FIXME: We only really need to recompute the overflow but we don't hav
e an optimized layout for it. |
598 return true; | 609 return true; |
599 } | 610 } |
600 | 611 |
601 // Movement of non-static-positioned object is special cased in RenderStyle:
:visualInvalidationDiff(). | 612 // Movement of non-static-positioned object is special cased in RenderStyle:
:visualInvalidationDiff(). |
602 | 613 |
603 return false; | 614 return false; |
604 } | 615 } |
605 | 616 |
| 617 bool RenderStyle::diffNeedsFullLayout(const RenderStyle& other) const |
| 618 { |
| 619 return false; |
| 620 } |
| 621 |
606 bool RenderStyle::diffNeedsRepaintLayer(const RenderStyle& other) const | 622 bool RenderStyle::diffNeedsRepaintLayer(const RenderStyle& other) const |
607 { | 623 { |
608 if (position() != StaticPosition && (visual->clip != other.visual->clip || v
isual->hasClip != other.visual->hasClip)) | 624 if (position() != StaticPosition && (visual->clip != other.visual->clip || v
isual->hasClip != other.visual->hasClip)) |
609 return true; | 625 return true; |
610 | 626 |
611 if (rareNonInheritedData.get() != other.rareNonInheritedData.get()) { | 627 if (rareNonInheritedData.get() != other.rareNonInheritedData.get()) { |
612 if (RuntimeEnabledFeatures::cssCompositingEnabled() | 628 if (RuntimeEnabledFeatures::cssCompositingEnabled() |
613 && (rareNonInheritedData->m_effectiveBlendMode != other.rareNonInher
itedData->m_effectiveBlendMode | 629 && (rareNonInheritedData->m_effectiveBlendMode != other.rareNonInher
itedData->m_effectiveBlendMode |
614 || rareNonInheritedData->m_isolation != other.rareNonInheritedDa
ta->m_isolation)) | 630 || rareNonInheritedData->m_isolation != other.rareNonInheritedDa
ta->m_isolation)) |
615 return true; | 631 return true; |
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1690 // right | 1706 // right |
1691 radiiSum = radii.topRight().height() + radii.bottomRight().height(); | 1707 radiiSum = radii.topRight().height() + radii.bottomRight().height(); |
1692 if (radiiSum > rect.height()) | 1708 if (radiiSum > rect.height()) |
1693 factor = std::min(rect.height() / radiiSum, factor); | 1709 factor = std::min(rect.height() / radiiSum, factor); |
1694 | 1710 |
1695 ASSERT(factor <= 1); | 1711 ASSERT(factor <= 1); |
1696 return factor; | 1712 return factor; |
1697 } | 1713 } |
1698 | 1714 |
1699 } // namespace WebCore | 1715 } // namespace WebCore |
OLD | NEW |