| 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 | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights |
| 4 * reserved. | 4 * reserved. |
| 5 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. | 5 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 if ((!diff.needsFullLayout() || !diff.needsFullPaintInvalidation()) && | 525 if ((!diff.needsFullLayout() || !diff.needsFullPaintInvalidation()) && |
| 526 diffNeedsFullLayoutAndPaintInvalidation(other)) { | 526 diffNeedsFullLayoutAndPaintInvalidation(other)) { |
| 527 diff.setNeedsFullLayout(); | 527 diff.setNeedsFullLayout(); |
| 528 diff.setNeedsPaintInvalidationObject(); | 528 diff.setNeedsPaintInvalidationObject(); |
| 529 } | 529 } |
| 530 | 530 |
| 531 if (!diff.needsFullLayout() && diffNeedsFullLayout(other)) | 531 if (!diff.needsFullLayout() && diffNeedsFullLayout(other)) |
| 532 diff.setNeedsFullLayout(); | 532 diff.setNeedsFullLayout(); |
| 533 | 533 |
| 534 if (!diff.needsFullLayout() && | 534 if (!diff.needsFullLayout() && |
| 535 m_surround->margin != other.m_surround->margin) { | 535 m_surround->m_margin != other.m_surround->m_margin) { |
| 536 // Relative-positioned elements collapse their margins so need a full | 536 // Relative-positioned elements collapse their margins so need a full |
| 537 // layout. | 537 // layout. |
| 538 if (hasOutOfFlowPosition()) | 538 if (hasOutOfFlowPosition()) |
| 539 diff.setNeedsPositionedMovementLayout(); | 539 diff.setNeedsPositionedMovementLayout(); |
| 540 else | 540 else |
| 541 diff.setNeedsFullLayout(); | 541 diff.setNeedsFullLayout(); |
| 542 } | 542 } |
| 543 | 543 |
| 544 if (!diff.needsFullLayout() && position() != EPosition::kStatic && | 544 if (!diff.needsFullLayout() && position() != EPosition::kStatic && |
| 545 !offsetEqual(other)) { | 545 !offsetEqual(other)) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 if (m_box->width() != other.m_box->width() || | 587 if (m_box->width() != other.m_box->width() || |
| 588 m_box->minWidth() != other.m_box->minWidth() || | 588 m_box->minWidth() != other.m_box->minWidth() || |
| 589 m_box->maxWidth() != other.m_box->maxWidth() || | 589 m_box->maxWidth() != other.m_box->maxWidth() || |
| 590 m_box->height() != other.m_box->height() || | 590 m_box->height() != other.m_box->height() || |
| 591 m_box->minHeight() != other.m_box->minHeight() || | 591 m_box->minHeight() != other.m_box->minHeight() || |
| 592 m_box->maxHeight() != other.m_box->maxHeight()) | 592 m_box->maxHeight() != other.m_box->maxHeight()) |
| 593 return true; | 593 return true; |
| 594 } | 594 } |
| 595 | 595 |
| 596 if (m_surround.get() != other.m_surround.get()) { | 596 if (m_surround.get() != other.m_surround.get()) { |
| 597 if (m_surround->margin != other.m_surround->margin || !offsetEqual(other) || | 597 if (m_surround->m_margin != other.m_surround->m_margin || |
| 598 m_surround->padding != other.m_surround->padding) | 598 !offsetEqual(other) || |
| 599 m_surround->m_padding != other.m_surround->m_padding) |
| 599 return true; | 600 return true; |
| 600 } | 601 } |
| 601 | 602 |
| 602 if (diff.transformChanged()) | 603 if (diff.transformChanged()) |
| 603 return true; | 604 return true; |
| 604 | 605 |
| 605 return false; | 606 return false; |
| 606 } | 607 } |
| 607 | 608 |
| 608 bool ComputedStyle::diffNeedsFullLayoutAndPaintInvalidation( | 609 bool ComputedStyle::diffNeedsFullLayoutAndPaintInvalidation( |
| 609 const ComputedStyle& other) const { | 610 const ComputedStyle& other) const { |
| 610 // FIXME: Not all cases in this method need both full layout and paint | 611 // FIXME: Not all cases in this method need both full layout and paint |
| 611 // invalidation. | 612 // invalidation. |
| 612 // Should move cases into diffNeedsFullLayout() if | 613 // Should move cases into diffNeedsFullLayout() if |
| 613 // - don't need paint invalidation at all; | 614 // - don't need paint invalidation at all; |
| 614 // - or the layoutObject knows how to exactly invalidate paints caused by the | 615 // - or the layoutObject knows how to exactly invalidate paints caused by the |
| 615 // layout change instead of forced full paint invalidation. | 616 // layout change instead of forced full paint invalidation. |
| 616 | 617 |
| 617 if (m_surround.get() != other.m_surround.get()) { | 618 if (m_surround.get() != other.m_surround.get()) { |
| 618 // If our border widths change, then we need to layout. Other changes to | 619 // If our border widths change, then we need to layout. Other changes to |
| 619 // borders only necessitate a paint invalidation. | 620 // borders only necessitate a paint invalidation. |
| 620 if (borderLeftWidth() != other.borderLeftWidth() || | 621 if (borderLeftWidth() != other.borderLeftWidth() || |
| 621 borderTopWidth() != other.borderTopWidth() || | 622 borderTopWidth() != other.borderTopWidth() || |
| 622 borderBottomWidth() != other.borderBottomWidth() || | 623 borderBottomWidth() != other.borderBottomWidth() || |
| 623 borderRightWidth() != other.borderRightWidth()) | 624 borderRightWidth() != other.borderRightWidth()) |
| 624 return true; | 625 return true; |
| 625 | 626 |
| 626 if (m_surround->padding != other.m_surround->padding) | 627 if (m_surround->m_padding != other.m_surround->m_padding) |
| 627 return true; | 628 return true; |
| 628 } | 629 } |
| 629 | 630 |
| 630 if (m_rareNonInheritedData.get() != other.m_rareNonInheritedData.get()) { | 631 if (m_rareNonInheritedData.get() != other.m_rareNonInheritedData.get()) { |
| 631 if (m_rareNonInheritedData->m_appearance != | 632 if (m_rareNonInheritedData->m_appearance != |
| 632 other.m_rareNonInheritedData->m_appearance || | 633 other.m_rareNonInheritedData->m_appearance || |
| 633 m_rareNonInheritedData->marginBeforeCollapse != | 634 m_rareNonInheritedData->marginBeforeCollapse != |
| 634 other.m_rareNonInheritedData->marginBeforeCollapse || | 635 other.m_rareNonInheritedData->marginBeforeCollapse || |
| 635 m_rareNonInheritedData->marginAfterCollapse != | 636 m_rareNonInheritedData->marginAfterCollapse != |
| 636 other.m_rareNonInheritedData->marginAfterCollapse || | 637 other.m_rareNonInheritedData->marginAfterCollapse || |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 } | 904 } |
| 904 | 905 |
| 905 return false; | 906 return false; |
| 906 } | 907 } |
| 907 | 908 |
| 908 bool ComputedStyle::diffNeedsPaintInvalidationObject( | 909 bool ComputedStyle::diffNeedsPaintInvalidationObject( |
| 909 const ComputedStyle& other) const { | 910 const ComputedStyle& other) const { |
| 910 if (visibility() != other.visibility() || | 911 if (visibility() != other.visibility() || |
| 911 printColorAdjust() != other.printColorAdjust() || | 912 printColorAdjust() != other.printColorAdjust() || |
| 912 insideLink() != other.insideLink() || | 913 insideLink() != other.insideLink() || |
| 913 !m_surround->border.visuallyEqual(other.m_surround->border) || | 914 !m_surround->m_border.visuallyEqual(other.m_surround->m_border) || |
| 914 *m_background != *other.m_background) | 915 *m_background != *other.m_background) |
| 915 return true; | 916 return true; |
| 916 | 917 |
| 917 if (m_rareInheritedData.get() != other.m_rareInheritedData.get()) { | 918 if (m_rareInheritedData.get() != other.m_rareInheritedData.get()) { |
| 918 if (m_rareInheritedData->userModify != | 919 if (m_rareInheritedData->userModify != |
| 919 other.m_rareInheritedData->userModify || | 920 other.m_rareInheritedData->userModify || |
| 920 m_rareInheritedData->userSelect != | 921 m_rareInheritedData->userSelect != |
| 921 other.m_rareInheritedData->userSelect || | 922 other.m_rareInheritedData->userSelect || |
| 922 m_rareInheritedData->m_imageRendering != | 923 m_rareInheritedData->m_imageRendering != |
| 923 other.m_rareInheritedData->m_imageRendering) | 924 other.m_rareInheritedData->m_imageRendering) |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 | 1052 |
| 1052 if (!m_rareNonInheritedData->reflectionDataEquivalent( | 1053 if (!m_rareNonInheritedData->reflectionDataEquivalent( |
| 1053 *other.m_rareNonInheritedData.get())) | 1054 *other.m_rareNonInheritedData.get())) |
| 1054 diff.setFilterChanged(); | 1055 diff.setFilterChanged(); |
| 1055 | 1056 |
| 1056 if (!m_rareNonInheritedData->m_outline.visuallyEqual( | 1057 if (!m_rareNonInheritedData->m_outline.visuallyEqual( |
| 1057 other.m_rareNonInheritedData->m_outline)) | 1058 other.m_rareNonInheritedData->m_outline)) |
| 1058 diff.setNeedsRecomputeOverflow(); | 1059 diff.setNeedsRecomputeOverflow(); |
| 1059 } | 1060 } |
| 1060 | 1061 |
| 1061 if (!m_surround->border.visualOverflowEqual(other.m_surround->border)) | 1062 if (!m_surround->m_border.visualOverflowEqual(other.m_surround->m_border)) |
| 1062 diff.setNeedsRecomputeOverflow(); | 1063 diff.setNeedsRecomputeOverflow(); |
| 1063 | 1064 |
| 1064 if (!diff.needsFullPaintInvalidation()) { | 1065 if (!diff.needsFullPaintInvalidation()) { |
| 1065 if (m_styleInheritedData->color != other.m_styleInheritedData->color || | 1066 if (m_styleInheritedData->color != other.m_styleInheritedData->color || |
| 1066 m_styleInheritedData->visitedLinkColor != | 1067 m_styleInheritedData->visitedLinkColor != |
| 1067 other.m_styleInheritedData->visitedLinkColor || | 1068 other.m_styleInheritedData->visitedLinkColor || |
| 1068 m_hasSimpleUnderline != other.m_hasSimpleUnderline || | 1069 m_hasSimpleUnderline != other.m_hasSimpleUnderline || |
| 1069 m_visual->textDecoration != other.m_visual->textDecoration) { | 1070 m_visual->textDecoration != other.m_visual->textDecoration) { |
| 1070 diff.setTextDecorationOrColorChanged(); | 1071 diff.setTextDecorationOrColorChanged(); |
| 1071 } else if (m_rareNonInheritedData.get() != | 1072 } else if (m_rareNonInheritedData.get() != |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1463 SET_VAR(m_styleInheritedData, vertical_border_spacing, v); | 1464 SET_VAR(m_styleInheritedData, vertical_border_spacing, v); |
| 1464 } | 1465 } |
| 1465 | 1466 |
| 1466 FloatRoundedRect ComputedStyle::getRoundedBorderFor( | 1467 FloatRoundedRect ComputedStyle::getRoundedBorderFor( |
| 1467 const LayoutRect& borderRect, | 1468 const LayoutRect& borderRect, |
| 1468 bool includeLogicalLeftEdge, | 1469 bool includeLogicalLeftEdge, |
| 1469 bool includeLogicalRightEdge) const { | 1470 bool includeLogicalRightEdge) const { |
| 1470 FloatRoundedRect roundedRect(pixelSnappedIntRect(borderRect)); | 1471 FloatRoundedRect roundedRect(pixelSnappedIntRect(borderRect)); |
| 1471 if (hasBorderRadius()) { | 1472 if (hasBorderRadius()) { |
| 1472 FloatRoundedRect::Radii radii = | 1473 FloatRoundedRect::Radii radii = |
| 1473 calcRadiiFor(m_surround->border, borderRect.size()); | 1474 calcRadiiFor(m_surround->m_border, borderRect.size()); |
| 1474 roundedRect.includeLogicalEdges(radii, isHorizontalWritingMode(), | 1475 roundedRect.includeLogicalEdges(radii, isHorizontalWritingMode(), |
| 1475 includeLogicalLeftEdge, | 1476 includeLogicalLeftEdge, |
| 1476 includeLogicalRightEdge); | 1477 includeLogicalRightEdge); |
| 1477 roundedRect.constrainRadii(); | 1478 roundedRect.constrainRadii(); |
| 1478 } | 1479 } |
| 1479 return roundedRect; | 1480 return roundedRect; |
| 1480 } | 1481 } |
| 1481 | 1482 |
| 1482 FloatRoundedRect ComputedStyle::getRoundedInnerBorderFor( | 1483 FloatRoundedRect ComputedStyle::getRoundedInnerBorderFor( |
| 1483 const LayoutRect& borderRect, | 1484 const LayoutRect& borderRect, |
| (...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2374 const NinePieceImage& image) const { | 2375 const NinePieceImage& image) const { |
| 2375 return LayoutRectOutsets( | 2376 return LayoutRectOutsets( |
| 2376 NinePieceImage::computeOutset(image.outset().top(), borderTopWidth()), | 2377 NinePieceImage::computeOutset(image.outset().top(), borderTopWidth()), |
| 2377 NinePieceImage::computeOutset(image.outset().right(), borderRightWidth()), | 2378 NinePieceImage::computeOutset(image.outset().right(), borderRightWidth()), |
| 2378 NinePieceImage::computeOutset(image.outset().bottom(), | 2379 NinePieceImage::computeOutset(image.outset().bottom(), |
| 2379 borderBottomWidth()), | 2380 borderBottomWidth()), |
| 2380 NinePieceImage::computeOutset(image.outset().left(), borderLeftWidth())); | 2381 NinePieceImage::computeOutset(image.outset().left(), borderLeftWidth())); |
| 2381 } | 2382 } |
| 2382 | 2383 |
| 2383 void ComputedStyle::setBorderImageSource(StyleImage* image) { | 2384 void ComputedStyle::setBorderImageSource(StyleImage* image) { |
| 2384 if (m_surround->border.m_image.image() == image) | 2385 if (m_surround->m_border.m_image.image() == image) |
| 2385 return; | 2386 return; |
| 2386 m_surround.access()->border.m_image.setImage(image); | 2387 m_surround.access()->m_border.m_image.setImage(image); |
| 2387 } | 2388 } |
| 2388 | 2389 |
| 2389 void ComputedStyle::setBorderImageSlices(const LengthBox& slices) { | 2390 void ComputedStyle::setBorderImageSlices(const LengthBox& slices) { |
| 2390 if (m_surround->border.m_image.imageSlices() == slices) | 2391 if (m_surround->m_border.m_image.imageSlices() == slices) |
| 2391 return; | 2392 return; |
| 2392 m_surround.access()->border.m_image.setImageSlices(slices); | 2393 m_surround.access()->m_border.m_image.setImageSlices(slices); |
| 2393 } | 2394 } |
| 2394 | 2395 |
| 2395 void ComputedStyle::setBorderImageSlicesFill(bool fill) { | 2396 void ComputedStyle::setBorderImageSlicesFill(bool fill) { |
| 2396 if (m_surround->border.m_image.fill() == fill) | 2397 if (m_surround->m_border.m_image.fill() == fill) |
| 2397 return; | 2398 return; |
| 2398 m_surround.access()->border.m_image.setFill(fill); | 2399 m_surround.access()->m_border.m_image.setFill(fill); |
| 2399 } | 2400 } |
| 2400 | 2401 |
| 2401 void ComputedStyle::setBorderImageWidth(const BorderImageLengthBox& slices) { | 2402 void ComputedStyle::setBorderImageWidth(const BorderImageLengthBox& slices) { |
| 2402 if (m_surround->border.m_image.borderSlices() == slices) | 2403 if (m_surround->m_border.m_image.borderSlices() == slices) |
| 2403 return; | 2404 return; |
| 2404 m_surround.access()->border.m_image.setBorderSlices(slices); | 2405 m_surround.access()->m_border.m_image.setBorderSlices(slices); |
| 2405 } | 2406 } |
| 2406 | 2407 |
| 2407 void ComputedStyle::setBorderImageOutset(const BorderImageLengthBox& outset) { | 2408 void ComputedStyle::setBorderImageOutset(const BorderImageLengthBox& outset) { |
| 2408 if (m_surround->border.m_image.outset() == outset) | 2409 if (m_surround->m_border.m_image.outset() == outset) |
| 2409 return; | 2410 return; |
| 2410 m_surround.access()->border.m_image.setOutset(outset); | 2411 m_surround.access()->m_border.m_image.setOutset(outset); |
| 2411 } | 2412 } |
| 2412 | 2413 |
| 2413 bool ComputedStyle::borderObscuresBackground() const { | 2414 bool ComputedStyle::borderObscuresBackground() const { |
| 2414 if (!hasBorder()) | 2415 if (!hasBorder()) |
| 2415 return false; | 2416 return false; |
| 2416 | 2417 |
| 2417 // Bail if we have any border-image for now. We could look at the image alpha | 2418 // Bail if we have any border-image for now. We could look at the image alpha |
| 2418 // to improve this. | 2419 // to improve this. |
| 2419 if (borderImage().image()) | 2420 if (borderImage().image()) |
| 2420 return false; | 2421 return false; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2494 if (value < 0) | 2495 if (value < 0) |
| 2495 fvalue -= 0.5f; | 2496 fvalue -= 0.5f; |
| 2496 else | 2497 else |
| 2497 fvalue += 0.5f; | 2498 fvalue += 0.5f; |
| 2498 } | 2499 } |
| 2499 | 2500 |
| 2500 return roundForImpreciseConversion<int>(fvalue / zoomFactor); | 2501 return roundForImpreciseConversion<int>(fvalue / zoomFactor); |
| 2501 } | 2502 } |
| 2502 | 2503 |
| 2503 } // namespace blink | 2504 } // namespace blink |
| OLD | NEW |