| 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 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 if (width.isIntrinsicOrAuto() | 360 if (width.isIntrinsicOrAuto() |
| 361 && ((!a.left().isIntrinsicOrAuto() && a.left() != b.left()) | 361 && ((!a.left().isIntrinsicOrAuto() && a.left() != b.left()) |
| 362 || (!a.right().isIntrinsicOrAuto() && a.right() != b.right()))) | 362 || (!a.right().isIntrinsicOrAuto() && a.right() != b.right()))) |
| 363 return false; | 363 return false; |
| 364 | 364 |
| 365 // One of the units is fixed or percent in both directions and stayed | 365 // One of the units is fixed or percent in both directions and stayed |
| 366 // that way in the new style. Therefore all we are doing is moving. | 366 // that way in the new style. Therefore all we are doing is moving. |
| 367 return true; | 367 return true; |
| 368 } | 368 } |
| 369 | 369 |
| 370 StyleDifference RenderStyle::visualInvalidationDiff(const RenderStyle* other, un
signed& changedContextSensitiveProperties) const | 370 StyleDifference RenderStyle::visualInvalidationDiff(const RenderStyle& other, un
signed& changedContextSensitiveProperties) const |
| 371 { | 371 { |
| 372 changedContextSensitiveProperties = ContextSensitivePropertyNone; | 372 changedContextSensitiveProperties = ContextSensitivePropertyNone; |
| 373 | 373 |
| 374 // Note, we use .get() on each DataRef below because DataRef::operator== wil
l do a deep | 374 // Note, we use .get() on each DataRef below because DataRef::operator== wil
l do a deep |
| 375 // compare, which is duplicate work when we're going to compare each propert
y inside | 375 // compare, which is duplicate work when we're going to compare each propert
y inside |
| 376 // this function anyway. | 376 // this function anyway. |
| 377 | 377 |
| 378 StyleDifference svgChange = StyleDifferenceEqual; | 378 StyleDifference svgChange = StyleDifferenceEqual; |
| 379 if (m_svgStyle.get() != other->m_svgStyle.get()) { | 379 if (m_svgStyle.get() != other.m_svgStyle.get()) { |
| 380 svgChange = m_svgStyle->diff(other->m_svgStyle.get()); | 380 svgChange = m_svgStyle->diff(other.m_svgStyle.get()); |
| 381 if (svgChange == StyleDifferenceLayout) | 381 if (svgChange == StyleDifferenceLayout) |
| 382 return svgChange; | 382 return svgChange; |
| 383 } | 383 } |
| 384 | 384 |
| 385 if (m_box.get() != other->m_box.get()) { | 385 if (m_box.get() != other.m_box.get()) { |
| 386 if (m_box->width() != other->m_box->width() | 386 if (m_box->width() != other.m_box->width() |
| 387 || m_box->minWidth() != other->m_box->minWidth() | 387 || m_box->minWidth() != other.m_box->minWidth() |
| 388 || m_box->maxWidth() != other->m_box->maxWidth() | 388 || m_box->maxWidth() != other.m_box->maxWidth() |
| 389 || m_box->height() != other->m_box->height() | 389 || m_box->height() != other.m_box->height() |
| 390 || m_box->minHeight() != other->m_box->minHeight() | 390 || m_box->minHeight() != other.m_box->minHeight() |
| 391 || m_box->maxHeight() != other->m_box->maxHeight()) | 391 || m_box->maxHeight() != other.m_box->maxHeight()) |
| 392 return StyleDifferenceLayout; | 392 return StyleDifferenceLayout; |
| 393 | 393 |
| 394 if (m_box->verticalAlign() != other->m_box->verticalAlign()) | 394 if (m_box->verticalAlign() != other.m_box->verticalAlign()) |
| 395 return StyleDifferenceLayout; | 395 return StyleDifferenceLayout; |
| 396 | 396 |
| 397 if (m_box->boxSizing() != other->m_box->boxSizing()) | 397 if (m_box->boxSizing() != other.m_box->boxSizing()) |
| 398 return StyleDifferenceLayout; | 398 return StyleDifferenceLayout; |
| 399 } | 399 } |
| 400 | 400 |
| 401 if (surround.get() != other->surround.get()) { | 401 if (surround.get() != other.surround.get()) { |
| 402 if (surround->margin != other->surround->margin) | 402 if (surround->margin != other.surround->margin) |
| 403 return StyleDifferenceLayout; | 403 return StyleDifferenceLayout; |
| 404 | 404 |
| 405 if (surround->padding != other->surround->padding) | 405 if (surround->padding != other.surround->padding) |
| 406 return StyleDifferenceLayout; | 406 return StyleDifferenceLayout; |
| 407 | 407 |
| 408 // If our border widths change, then we need to layout. Other changes to
borders only necessitate a repaint. | 408 // If our border widths change, then we need to layout. Other changes to
borders only necessitate a repaint. |
| 409 if (borderLeftWidth() != other->borderLeftWidth() | 409 if (borderLeftWidth() != other.borderLeftWidth() |
| 410 || borderTopWidth() != other->borderTopWidth() | 410 || borderTopWidth() != other.borderTopWidth() |
| 411 || borderBottomWidth() != other->borderBottomWidth() | 411 || borderBottomWidth() != other.borderBottomWidth() |
| 412 || borderRightWidth() != other->borderRightWidth()) | 412 || borderRightWidth() != other.borderRightWidth()) |
| 413 return StyleDifferenceLayout; | 413 return StyleDifferenceLayout; |
| 414 } | 414 } |
| 415 | 415 |
| 416 if (rareNonInheritedData.get() != other->rareNonInheritedData.get()) { | 416 if (rareNonInheritedData.get() != other.rareNonInheritedData.get()) { |
| 417 if (rareNonInheritedData->m_appearance != other->rareNonInheritedData->m
_appearance | 417 if (rareNonInheritedData->m_appearance != other.rareNonInheritedData->m_
appearance |
| 418 || rareNonInheritedData->marginBeforeCollapse != other->rareNonInher
itedData->marginBeforeCollapse | 418 || rareNonInheritedData->marginBeforeCollapse != other.rareNonInheri
tedData->marginBeforeCollapse |
| 419 || rareNonInheritedData->marginAfterCollapse != other->rareNonInheri
tedData->marginAfterCollapse | 419 || rareNonInheritedData->marginAfterCollapse != other.rareNonInherit
edData->marginAfterCollapse |
| 420 || rareNonInheritedData->lineClamp != other->rareNonInheritedData->l
ineClamp | 420 || rareNonInheritedData->lineClamp != other.rareNonInheritedData->li
neClamp |
| 421 || rareNonInheritedData->textOverflow != other->rareNonInheritedData
->textOverflow | 421 || rareNonInheritedData->textOverflow != other.rareNonInheritedData-
>textOverflow |
| 422 || rareNonInheritedData->m_wrapFlow != other->rareNonInheritedData->
m_wrapFlow | 422 || rareNonInheritedData->m_wrapFlow != other.rareNonInheritedData->m
_wrapFlow |
| 423 || rareNonInheritedData->m_wrapThrough != other->rareNonInheritedDat
a->m_wrapThrough | 423 || rareNonInheritedData->m_wrapThrough != other.rareNonInheritedData
->m_wrapThrough |
| 424 || rareNonInheritedData->m_shapeMargin != other->rareNonInheritedDat
a->m_shapeMargin | 424 || rareNonInheritedData->m_shapeMargin != other.rareNonInheritedData
->m_shapeMargin |
| 425 || rareNonInheritedData->m_shapePadding != other->rareNonInheritedDa
ta->m_shapePadding | 425 || rareNonInheritedData->m_shapePadding != other.rareNonInheritedDat
a->m_shapePadding |
| 426 || rareNonInheritedData->m_order != other->rareNonInheritedData->m_o
rder | 426 || rareNonInheritedData->m_order != other.rareNonInheritedData->m_or
der |
| 427 || rareNonInheritedData->m_alignContent != other->rareNonInheritedDa
ta->m_alignContent | 427 || rareNonInheritedData->m_alignContent != other.rareNonInheritedDat
a->m_alignContent |
| 428 || rareNonInheritedData->m_alignItems != other->rareNonInheritedData
->m_alignItems | 428 || rareNonInheritedData->m_alignItems != other.rareNonInheritedData-
>m_alignItems |
| 429 || rareNonInheritedData->m_alignSelf != other->rareNonInheritedData-
>m_alignSelf | 429 || rareNonInheritedData->m_alignSelf != other.rareNonInheritedData->
m_alignSelf |
| 430 || rareNonInheritedData->m_justifyContent != other->rareNonInherited
Data->m_justifyContent | 430 || rareNonInheritedData->m_justifyContent != other.rareNonInheritedD
ata->m_justifyContent |
| 431 || rareNonInheritedData->m_grid.get() != other->rareNonInheritedData
->m_grid.get() | 431 || rareNonInheritedData->m_grid.get() != other.rareNonInheritedData-
>m_grid.get() |
| 432 || rareNonInheritedData->m_gridItem.get() != other->rareNonInherited
Data->m_gridItem.get() | 432 || rareNonInheritedData->m_gridItem.get() != other.rareNonInheritedD
ata->m_gridItem.get() |
| 433 || rareNonInheritedData->m_textCombine != other->rareNonInheritedDat
a->m_textCombine | 433 || rareNonInheritedData->m_textCombine != other.rareNonInheritedData
->m_textCombine |
| 434 || rareNonInheritedData->hasFilters() != other->rareNonInheritedData
->hasFilters()) | 434 || rareNonInheritedData->hasFilters() != other.rareNonInheritedData-
>hasFilters()) |
| 435 return StyleDifferenceLayout; | 435 return StyleDifferenceLayout; |
| 436 | 436 |
| 437 if (rareNonInheritedData->m_deprecatedFlexibleBox.get() != other->rareNo
nInheritedData->m_deprecatedFlexibleBox.get() | 437 if (rareNonInheritedData->m_deprecatedFlexibleBox.get() != other.rareNon
InheritedData->m_deprecatedFlexibleBox.get() |
| 438 && *rareNonInheritedData->m_deprecatedFlexibleBox.get() != *other->r
areNonInheritedData->m_deprecatedFlexibleBox.get()) | 438 && *rareNonInheritedData->m_deprecatedFlexibleBox.get() != *other.ra
reNonInheritedData->m_deprecatedFlexibleBox.get()) |
| 439 return StyleDifferenceLayout; | 439 return StyleDifferenceLayout; |
| 440 | 440 |
| 441 if (rareNonInheritedData->m_flexibleBox.get() != other->rareNonInherited
Data->m_flexibleBox.get() | 441 if (rareNonInheritedData->m_flexibleBox.get() != other.rareNonInheritedD
ata->m_flexibleBox.get() |
| 442 && *rareNonInheritedData->m_flexibleBox.get() != *other->rareNonInhe
ritedData->m_flexibleBox.get()) | 442 && *rareNonInheritedData->m_flexibleBox.get() != *other.rareNonInher
itedData->m_flexibleBox.get()) |
| 443 return StyleDifferenceLayout; | 443 return StyleDifferenceLayout; |
| 444 | 444 |
| 445 // FIXME: We should add an optimized form of layout that just recomputes
visual overflow. | 445 // FIXME: We should add an optimized form of layout that just recomputes
visual overflow. |
| 446 if (!rareNonInheritedData->shadowDataEquivalent(*other->rareNonInherited
Data.get())) | 446 if (!rareNonInheritedData->shadowDataEquivalent(*other.rareNonInheritedD
ata.get())) |
| 447 return StyleDifferenceLayout; | 447 return StyleDifferenceLayout; |
| 448 | 448 |
| 449 if (!rareNonInheritedData->reflectionDataEquivalent(*other->rareNonInher
itedData.get())) | 449 if (!rareNonInheritedData->reflectionDataEquivalent(*other.rareNonInheri
tedData.get())) |
| 450 return StyleDifferenceLayout; | 450 return StyleDifferenceLayout; |
| 451 | 451 |
| 452 if (rareNonInheritedData->m_multiCol.get() != other->rareNonInheritedDat
a->m_multiCol.get() | 452 if (rareNonInheritedData->m_multiCol.get() != other.rareNonInheritedData
->m_multiCol.get() |
| 453 && *rareNonInheritedData->m_multiCol.get() != *other->rareNonInherit
edData->m_multiCol.get()) | 453 && *rareNonInheritedData->m_multiCol.get() != *other.rareNonInherite
dData->m_multiCol.get()) |
| 454 return StyleDifferenceLayout; | 454 return StyleDifferenceLayout; |
| 455 | 455 |
| 456 if (!transformDataEquivalent(other)) { | 456 if (!transformDataEquivalent(other)) { |
| 457 // Don't return early here; instead take note of the type of | 457 // Don't return early here; instead take note of the type of |
| 458 // change, and deal with it when looking at compositing. | 458 // change, and deal with it when looking at compositing. |
| 459 changedContextSensitiveProperties |= ContextSensitivePropertyTransfo
rm; | 459 changedContextSensitiveProperties |= ContextSensitivePropertyTransfo
rm; |
| 460 } | 460 } |
| 461 | 461 |
| 462 // If the counter directives change, trigger a relayout to re-calculate
counter values and rebuild the counter node tree. | 462 // If the counter directives change, trigger a relayout to re-calculate
counter values and rebuild the counter node tree. |
| 463 const CounterDirectiveMap* mapA = rareNonInheritedData->m_counterDirecti
ves.get(); | 463 const CounterDirectiveMap* mapA = rareNonInheritedData->m_counterDirecti
ves.get(); |
| 464 const CounterDirectiveMap* mapB = other->rareNonInheritedData->m_counter
Directives.get(); | 464 const CounterDirectiveMap* mapB = other.rareNonInheritedData->m_counterD
irectives.get(); |
| 465 if (!(mapA == mapB || (mapA && mapB && *mapA == *mapB))) | 465 if (!(mapA == mapB || (mapA && mapB && *mapA == *mapB))) |
| 466 return StyleDifferenceLayout; | 466 return StyleDifferenceLayout; |
| 467 | 467 |
| 468 // We only need do layout for opacity changes if adding or losing opacit
y could trigger a change | 468 // We only need do layout for opacity changes if adding or losing opacit
y could trigger a change |
| 469 // in us being a stacking context. | 469 // in us being a stacking context. |
| 470 if (hasAutoZIndex() != other->hasAutoZIndex() && rareNonInheritedData->h
asOpacity() != other->rareNonInheritedData->hasOpacity()) { | 470 if (hasAutoZIndex() != other.hasAutoZIndex() && rareNonInheritedData->ha
sOpacity() != other.rareNonInheritedData->hasOpacity()) { |
| 471 // FIXME: We would like to use SimplifiedLayout here, but we can't q
uite do that yet. | 471 // FIXME: We would like to use SimplifiedLayout here, but we can't q
uite do that yet. |
| 472 // We need to make sure SimplifiedLayout can operate correctly on Re
nderInlines (we will need | 472 // We need to make sure SimplifiedLayout can operate correctly on Re
nderInlines (we will need |
| 473 // to add a selfNeedsSimplifiedLayout bit in order to not get confus
ed and taint every line). | 473 // to add a selfNeedsSimplifiedLayout bit in order to not get confus
ed and taint every line). |
| 474 // In addition we need to solve the floating object issue when layer
s come and go. Right now | 474 // In addition we need to solve the floating object issue when layer
s come and go. Right now |
| 475 // a full layout is necessary to keep floating object lists sane. | 475 // a full layout is necessary to keep floating object lists sane. |
| 476 return StyleDifferenceLayout; | 476 return StyleDifferenceLayout; |
| 477 } | 477 } |
| 478 } | 478 } |
| 479 | 479 |
| 480 if (rareInheritedData.get() != other->rareInheritedData.get()) { | 480 if (rareInheritedData.get() != other.rareInheritedData.get()) { |
| 481 if (rareInheritedData->highlight != other->rareInheritedData->highlight | 481 if (rareInheritedData->highlight != other.rareInheritedData->highlight |
| 482 || rareInheritedData->indent != other->rareInheritedData->indent | 482 || rareInheritedData->indent != other.rareInheritedData->indent |
| 483 || rareInheritedData->m_textAlignLast != other->rareInheritedData->m
_textAlignLast | 483 || rareInheritedData->m_textAlignLast != other.rareInheritedData->m_
textAlignLast |
| 484 || rareInheritedData->m_textIndentLine != other->rareInheritedData->
m_textIndentLine | 484 || rareInheritedData->m_textIndentLine != other.rareInheritedData->m
_textIndentLine |
| 485 || rareInheritedData->m_effectiveZoom != other->rareInheritedData->m
_effectiveZoom | 485 || rareInheritedData->m_effectiveZoom != other.rareInheritedData->m_
effectiveZoom |
| 486 || rareInheritedData->wordBreak != other->rareInheritedData->wordBre
ak | 486 || rareInheritedData->wordBreak != other.rareInheritedData->wordBrea
k |
| 487 || rareInheritedData->overflowWrap != other->rareInheritedData->over
flowWrap | 487 || rareInheritedData->overflowWrap != other.rareInheritedData->overf
lowWrap |
| 488 || rareInheritedData->lineBreak != other->rareInheritedData->lineBre
ak | 488 || rareInheritedData->lineBreak != other.rareInheritedData->lineBrea
k |
| 489 || rareInheritedData->textSecurity != other->rareInheritedData->text
Security | 489 || rareInheritedData->textSecurity != other.rareInheritedData->textS
ecurity |
| 490 || rareInheritedData->hyphens != other->rareInheritedData->hyphens | 490 || rareInheritedData->hyphens != other.rareInheritedData->hyphens |
| 491 || rareInheritedData->hyphenationLimitBefore != other->rareInherited
Data->hyphenationLimitBefore | 491 || rareInheritedData->hyphenationLimitBefore != other.rareInheritedD
ata->hyphenationLimitBefore |
| 492 || rareInheritedData->hyphenationLimitAfter != other->rareInheritedD
ata->hyphenationLimitAfter | 492 || rareInheritedData->hyphenationLimitAfter != other.rareInheritedDa
ta->hyphenationLimitAfter |
| 493 || rareInheritedData->hyphenationString != other->rareInheritedData-
>hyphenationString | 493 || rareInheritedData->hyphenationString != other.rareInheritedData->
hyphenationString |
| 494 || rareInheritedData->locale != other->rareInheritedData->locale | 494 || rareInheritedData->locale != other.rareInheritedData->locale |
| 495 || rareInheritedData->m_rubyPosition != other->rareInheritedData->m_
rubyPosition | 495 || rareInheritedData->m_rubyPosition != other.rareInheritedData->m_r
ubyPosition |
| 496 || rareInheritedData->textEmphasisMark != other->rareInheritedData->
textEmphasisMark | 496 || rareInheritedData->textEmphasisMark != other.rareInheritedData->t
extEmphasisMark |
| 497 || rareInheritedData->textEmphasisPosition != other->rareInheritedDa
ta->textEmphasisPosition | 497 || rareInheritedData->textEmphasisPosition != other.rareInheritedDat
a->textEmphasisPosition |
| 498 || rareInheritedData->textEmphasisCustomMark != other->rareInherited
Data->textEmphasisCustomMark | 498 || rareInheritedData->textEmphasisCustomMark != other.rareInheritedD
ata->textEmphasisCustomMark |
| 499 || rareInheritedData->m_textJustify != other->rareInheritedData->m_t
extJustify | 499 || rareInheritedData->m_textJustify != other.rareInheritedData->m_te
xtJustify |
| 500 || rareInheritedData->m_textOrientation != other->rareInheritedData-
>m_textOrientation | 500 || rareInheritedData->m_textOrientation != other.rareInheritedData->
m_textOrientation |
| 501 || rareInheritedData->m_tabSize != other->rareInheritedData->m_tabSi
ze | 501 || rareInheritedData->m_tabSize != other.rareInheritedData->m_tabSiz
e |
| 502 || rareInheritedData->m_lineBoxContain != other->rareInheritedData->
m_lineBoxContain | 502 || rareInheritedData->m_lineBoxContain != other.rareInheritedData->m
_lineBoxContain |
| 503 || rareInheritedData->listStyleImage != other->rareInheritedData->li
stStyleImage | 503 || rareInheritedData->listStyleImage != other.rareInheritedData->lis
tStyleImage |
| 504 || rareInheritedData->textStrokeWidth != other->rareInheritedData->t
extStrokeWidth) | 504 || rareInheritedData->textStrokeWidth != other.rareInheritedData->te
xtStrokeWidth) |
| 505 return StyleDifferenceLayout; | 505 return StyleDifferenceLayout; |
| 506 | 506 |
| 507 if (!rareInheritedData->shadowDataEquivalent(*other->rareInheritedData.g
et())) | 507 if (!rareInheritedData->shadowDataEquivalent(*other.rareInheritedData.ge
t())) |
| 508 return StyleDifferenceLayout; | 508 return StyleDifferenceLayout; |
| 509 | 509 |
| 510 if (!QuotesData::equals(rareInheritedData->quotes.get(), other->rareInhe
ritedData->quotes.get())) | 510 if (!QuotesData::equals(rareInheritedData->quotes.get(), other.rareInher
itedData->quotes.get())) |
| 511 return StyleDifferenceLayout; | 511 return StyleDifferenceLayout; |
| 512 } | 512 } |
| 513 | 513 |
| 514 if (visual->m_textAutosizingMultiplier != other->visual->m_textAutosizingMul
tiplier) | 514 if (visual->m_textAutosizingMultiplier != other.visual->m_textAutosizingMult
iplier) |
| 515 return StyleDifferenceLayout; | 515 return StyleDifferenceLayout; |
| 516 | 516 |
| 517 if (inherited.get() != other->inherited.get()) { | 517 if (inherited.get() != other.inherited.get()) { |
| 518 if (inherited->line_height != other->inherited->line_height | 518 if (inherited->line_height != other.inherited->line_height |
| 519 || inherited->font != other->inherited->font | 519 || inherited->font != other.inherited->font |
| 520 || inherited->horizontal_border_spacing != other->inherited->horizontal_
border_spacing | 520 || inherited->horizontal_border_spacing != other.inherited->horizontal_b
order_spacing |
| 521 || inherited->vertical_border_spacing != other->inherited->vertical_bord
er_spacing) | 521 || inherited->vertical_border_spacing != other.inherited->vertical_borde
r_spacing) |
| 522 return StyleDifferenceLayout; | 522 return StyleDifferenceLayout; |
| 523 } | 523 } |
| 524 | 524 |
| 525 if (inherited_flags._box_direction != other->inherited_flags._box_direction | 525 if (inherited_flags._box_direction != other.inherited_flags._box_direction |
| 526 || inherited_flags.m_rtlOrdering != other->inherited_flags.m_rtlOrdering | 526 || inherited_flags.m_rtlOrdering != other.inherited_flags.m_rtlOrdering |
| 527 || inherited_flags._text_align != other->inherited_flags._text_align | 527 || inherited_flags._text_align != other.inherited_flags._text_align |
| 528 || inherited_flags._text_transform != other->inherited_flags._text_trans
form | 528 || inherited_flags._text_transform != other.inherited_flags._text_transf
orm |
| 529 || inherited_flags._direction != other->inherited_flags._direction | 529 || inherited_flags._direction != other.inherited_flags._direction |
| 530 || inherited_flags._white_space != other->inherited_flags._white_space | 530 || inherited_flags._white_space != other.inherited_flags._white_space |
| 531 || inherited_flags.m_writingMode != other->inherited_flags.m_writingMode
) | 531 || inherited_flags.m_writingMode != other.inherited_flags.m_writingMode) |
| 532 return StyleDifferenceLayout; | 532 return StyleDifferenceLayout; |
| 533 | 533 |
| 534 if (noninherited_flags._overflowX != other->noninherited_flags._overflowX | 534 if (noninherited_flags._overflowX != other.noninherited_flags._overflowX |
| 535 || noninherited_flags._overflowY != other->noninherited_flags._overflowY | 535 || noninherited_flags._overflowY != other.noninherited_flags._overflowY |
| 536 || noninherited_flags._clear != other->noninherited_flags._clear | 536 || noninherited_flags._clear != other.noninherited_flags._clear |
| 537 || noninherited_flags._unicodeBidi != other->noninherited_flags._unicode
Bidi | 537 || noninherited_flags._unicodeBidi != other.noninherited_flags._unicodeB
idi |
| 538 || noninherited_flags._position != other->noninherited_flags._position | 538 || noninherited_flags._position != other.noninherited_flags._position |
| 539 || noninherited_flags._floating != other->noninherited_flags._floating | 539 || noninherited_flags._floating != other.noninherited_flags._floating |
| 540 || noninherited_flags._originalDisplay != other->noninherited_flags._ori
ginalDisplay | 540 || noninherited_flags._originalDisplay != other.noninherited_flags._orig
inalDisplay |
| 541 || noninherited_flags._vertical_align != other->noninherited_flags._vert
ical_align) | 541 || noninherited_flags._vertical_align != other.noninherited_flags._verti
cal_align) |
| 542 return StyleDifferenceLayout; | 542 return StyleDifferenceLayout; |
| 543 | 543 |
| 544 if (noninherited_flags._effectiveDisplay >= FIRST_TABLE_DISPLAY && noninheri
ted_flags._effectiveDisplay <= LAST_TABLE_DISPLAY) { | 544 if (noninherited_flags._effectiveDisplay >= FIRST_TABLE_DISPLAY && noninheri
ted_flags._effectiveDisplay <= LAST_TABLE_DISPLAY) { |
| 545 if (inherited_flags._border_collapse != other->inherited_flags._border_c
ollapse | 545 if (inherited_flags._border_collapse != other.inherited_flags._border_co
llapse |
| 546 || inherited_flags._empty_cells != other->inherited_flags._empty_cel
ls | 546 || inherited_flags._empty_cells != other.inherited_flags._empty_cell
s |
| 547 || inherited_flags._caption_side != other->inherited_flags._caption_
side | 547 || inherited_flags._caption_side != other.inherited_flags._caption_s
ide |
| 548 || noninherited_flags._table_layout != other->noninherited_flags._ta
ble_layout) | 548 || noninherited_flags._table_layout != other.noninherited_flags._tab
le_layout) |
| 549 return StyleDifferenceLayout; | 549 return StyleDifferenceLayout; |
| 550 | 550 |
| 551 // In the collapsing border model, 'hidden' suppresses other borders, wh
ile 'none' | 551 // In the collapsing border model, 'hidden' suppresses other borders, wh
ile 'none' |
| 552 // does not, so these style differences can be width differences. | 552 // does not, so these style differences can be width differences. |
| 553 if (inherited_flags._border_collapse | 553 if (inherited_flags._border_collapse |
| 554 && ((borderTopStyle() == BHIDDEN && other->borderTopStyle() == BNONE
) | 554 && ((borderTopStyle() == BHIDDEN && other.borderTopStyle() == BNONE) |
| 555 || (borderTopStyle() == BNONE && other->borderTopStyle() == BHID
DEN) | 555 || (borderTopStyle() == BNONE && other.borderTopStyle() == BHIDD
EN) |
| 556 || (borderBottomStyle() == BHIDDEN && other->borderBottomStyle()
== BNONE) | 556 || (borderBottomStyle() == BHIDDEN && other.borderBottomStyle()
== BNONE) |
| 557 || (borderBottomStyle() == BNONE && other->borderBottomStyle() =
= BHIDDEN) | 557 || (borderBottomStyle() == BNONE && other.borderBottomStyle() ==
BHIDDEN) |
| 558 || (borderLeftStyle() == BHIDDEN && other->borderLeftStyle() ==
BNONE) | 558 || (borderLeftStyle() == BHIDDEN && other.borderLeftStyle() == B
NONE) |
| 559 || (borderLeftStyle() == BNONE && other->borderLeftStyle() == BH
IDDEN) | 559 || (borderLeftStyle() == BNONE && other.borderLeftStyle() == BHI
DDEN) |
| 560 || (borderRightStyle() == BHIDDEN && other->borderRightStyle() =
= BNONE) | 560 || (borderRightStyle() == BHIDDEN && other.borderRightStyle() ==
BNONE) |
| 561 || (borderRightStyle() == BNONE && other->borderRightStyle() ==
BHIDDEN))) | 561 || (borderRightStyle() == BNONE && other.borderRightStyle() == B
HIDDEN))) |
| 562 return StyleDifferenceLayout; | 562 return StyleDifferenceLayout; |
| 563 } else if (noninherited_flags._effectiveDisplay == LIST_ITEM) { | 563 } else if (noninherited_flags._effectiveDisplay == LIST_ITEM) { |
| 564 if (inherited_flags._list_style_type != other->inherited_flags._list_sty
le_type | 564 if (inherited_flags._list_style_type != other.inherited_flags._list_styl
e_type |
| 565 || inherited_flags._list_style_position != other->inherited_flags._l
ist_style_position) | 565 || inherited_flags._list_style_position != other.inherited_flags._li
st_style_position) |
| 566 return StyleDifferenceLayout; | 566 return StyleDifferenceLayout; |
| 567 } | 567 } |
| 568 | 568 |
| 569 if ((visibility() == COLLAPSE) != (other->visibility() == COLLAPSE)) | 569 if ((visibility() == COLLAPSE) != (other.visibility() == COLLAPSE)) |
| 570 return StyleDifferenceLayout; | 570 return StyleDifferenceLayout; |
| 571 | 571 |
| 572 // SVGRenderStyle::diff() might have returned StyleDifferenceRepaint, eg. if
fill changes. | 572 // SVGRenderStyle::diff() might have returned StyleDifferenceRepaint, eg. if
fill changes. |
| 573 // If eg. the font-size changed at the same time, we're not allowed to retur
n StyleDifferenceRepaint, | 573 // If eg. the font-size changed at the same time, we're not allowed to retur
n StyleDifferenceRepaint, |
| 574 // but have to return StyleDifferenceLayout, that's why this if branch come
s after all branches | 574 // but have to return StyleDifferenceLayout, that's why this if branch come
s after all branches |
| 575 // that are relevant for SVG and might return StyleDifferenceLayout. | 575 // that are relevant for SVG and might return StyleDifferenceLayout. |
| 576 if (svgChange != StyleDifferenceEqual) | 576 if (svgChange != StyleDifferenceEqual) |
| 577 return svgChange; | 577 return svgChange; |
| 578 | 578 |
| 579 // NOTE: This block must be last in this function for the StyleDifferenceLay
outPositionedMovementOnly | 579 // NOTE: This block must be last in this function for the StyleDifferenceLay
outPositionedMovementOnly |
| 580 // optimization to work properly. | 580 // optimization to work properly. |
| 581 if (position() != StaticPosition && surround->offset != other->surround->off
set) { | 581 if (position() != StaticPosition && surround->offset != other.surround->offs
et) { |
| 582 // Optimize for the case where a positioned layer is moving but not chan
ging size. | 582 // Optimize for the case where a positioned layer is moving but not chan
ging size. |
| 583 if ((position() == AbsolutePosition || position() == FixedPosition) | 583 if ((position() == AbsolutePosition || position() == FixedPosition) |
| 584 && positionedObjectMovedOnly(surround->offset, other->surround->offs
et, m_box->width()) | 584 && positionedObjectMovedOnly(surround->offset, other.surround->offse
t, m_box->width()) |
| 585 && repaintOnlyDiff(other, changedContextSensitiveProperties) == Styl
eDifferenceEqual) | 585 && repaintOnlyDiff(other, changedContextSensitiveProperties) == Styl
eDifferenceEqual) |
| 586 return StyleDifferenceLayoutPositionedMovementOnly; | 586 return StyleDifferenceLayoutPositionedMovementOnly; |
| 587 // FIXME: We would like to use SimplifiedLayout for relative positioning
, but we can't quite do that yet. | 587 // FIXME: We would like to use SimplifiedLayout for relative positioning
, but we can't quite do that yet. |
| 588 // We need to make sure SimplifiedLayout can operate correctly on Render
Inlines (we will need | 588 // We need to make sure SimplifiedLayout can operate correctly on Render
Inlines (we will need |
| 589 // to add a selfNeedsSimplifiedLayout bit in order to not get confused a
nd taint every line). | 589 // to add a selfNeedsSimplifiedLayout bit in order to not get confused a
nd taint every line). |
| 590 return StyleDifferenceLayout; | 590 return StyleDifferenceLayout; |
| 591 } | 591 } |
| 592 | 592 |
| 593 return repaintOnlyDiff(other, changedContextSensitiveProperties); | 593 return repaintOnlyDiff(other, changedContextSensitiveProperties); |
| 594 } | 594 } |
| 595 | 595 |
| 596 StyleDifference RenderStyle::repaintOnlyDiff(const RenderStyle* other, unsigned&
changedContextSensitiveProperties) const | 596 StyleDifference RenderStyle::repaintOnlyDiff(const RenderStyle& other, unsigned&
changedContextSensitiveProperties) const |
| 597 { | 597 { |
| 598 if (position() != StaticPosition && (m_box->zIndex() != other->m_box->zIndex
() || m_box->hasAutoZIndex() != other->m_box->hasAutoZIndex() | 598 if (position() != StaticPosition && (m_box->zIndex() != other.m_box->zIndex(
) || m_box->hasAutoZIndex() != other.m_box->hasAutoZIndex() |
| 599 || visual->clip != other->visual->clip || visual->hasClip != other->visu
al->hasClip)) | 599 || visual->clip != other.visual->clip || visual->hasClip != other.visual
->hasClip)) |
| 600 return StyleDifferenceRepaintLayer; | 600 return StyleDifferenceRepaintLayer; |
| 601 | 601 |
| 602 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (rareNonInheritedData
->m_effectiveBlendMode != other->rareNonInheritedData->m_effectiveBlendMode | 602 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (rareNonInheritedData
->m_effectiveBlendMode != other.rareNonInheritedData->m_effectiveBlendMode |
| 603 || rareNonInheritedData->m_isolation != other->rareNonInheritedData->m_i
solation)) | 603 || rareNonInheritedData->m_isolation != other.rareNonInheritedData->m_is
olation)) |
| 604 return StyleDifferenceRepaintLayer; | 604 return StyleDifferenceRepaintLayer; |
| 605 | 605 |
| 606 if (rareNonInheritedData->opacity != other->rareNonInheritedData->opacity) { | 606 if (rareNonInheritedData->opacity != other.rareNonInheritedData->opacity) { |
| 607 // Don't return early here; instead take note of the type of change, | 607 // Don't return early here; instead take note of the type of change, |
| 608 // and deal with it when looking at compositing. | 608 // and deal with it when looking at compositing. |
| 609 changedContextSensitiveProperties |= ContextSensitivePropertyOpacity; | 609 changedContextSensitiveProperties |= ContextSensitivePropertyOpacity; |
| 610 } | 610 } |
| 611 | 611 |
| 612 if (rareNonInheritedData->m_filter.get() != other->rareNonInheritedData->m_f
ilter.get() | 612 if (rareNonInheritedData->m_filter.get() != other.rareNonInheritedData->m_fi
lter.get() |
| 613 && *rareNonInheritedData->m_filter.get() != *other->rareNonInheritedData
->m_filter.get()) { | 613 && *rareNonInheritedData->m_filter.get() != *other.rareNonInheritedData-
>m_filter.get()) { |
| 614 // Don't return early here; instead take note of the type of change, | 614 // Don't return early here; instead take note of the type of change, |
| 615 // and deal with it when looking at compositing. | 615 // and deal with it when looking at compositing. |
| 616 changedContextSensitiveProperties |= ContextSensitivePropertyFilter; | 616 changedContextSensitiveProperties |= ContextSensitivePropertyFilter; |
| 617 } | 617 } |
| 618 | 618 |
| 619 if (rareNonInheritedData->m_mask != other->rareNonInheritedData->m_mask | 619 if (rareNonInheritedData->m_mask != other.rareNonInheritedData->m_mask |
| 620 || rareNonInheritedData->m_maskBoxImage != other->rareNonInheritedData->
m_maskBoxImage) | 620 || rareNonInheritedData->m_maskBoxImage != other.rareNonInheritedData->m
_maskBoxImage) |
| 621 return StyleDifferenceRepaintLayer; | 621 return StyleDifferenceRepaintLayer; |
| 622 | 622 |
| 623 if (inherited_flags._visibility != other->inherited_flags._visibility | 623 if (inherited_flags._visibility != other.inherited_flags._visibility |
| 624 || inherited_flags.m_printColorAdjust != other->inherited_flags.m_printC
olorAdjust | 624 || inherited_flags.m_printColorAdjust != other.inherited_flags.m_printCo
lorAdjust |
| 625 || inherited_flags._insideLink != other->inherited_flags._insideLink | 625 || inherited_flags._insideLink != other.inherited_flags._insideLink |
| 626 || surround->border != other->surround->border | 626 || surround->border != other.surround->border |
| 627 || *m_background.get() != *other->m_background.get() | 627 || *m_background.get() != *other.m_background.get() |
| 628 || rareInheritedData->userModify != other->rareInheritedData->userModify | 628 || rareInheritedData->userModify != other.rareInheritedData->userModify |
| 629 || rareInheritedData->userSelect != other->rareInheritedData->userSelect | 629 || rareInheritedData->userSelect != other.rareInheritedData->userSelect |
| 630 || rareNonInheritedData->userDrag != other->rareNonInheritedData->userDr
ag | 630 || rareNonInheritedData->userDrag != other.rareNonInheritedData->userDra
g |
| 631 || rareNonInheritedData->m_borderFit != other->rareNonInheritedData->m_b
orderFit | 631 || rareNonInheritedData->m_borderFit != other.rareNonInheritedData->m_bo
rderFit |
| 632 || rareNonInheritedData->m_objectFit != other->rareNonInheritedData->m_o
bjectFit | 632 || rareNonInheritedData->m_objectFit != other.rareNonInheritedData->m_ob
jectFit |
| 633 || rareNonInheritedData->m_objectPosition != other->rareNonInheritedData
->m_objectPosition | 633 || rareNonInheritedData->m_objectPosition != other.rareNonInheritedData-
>m_objectPosition |
| 634 || rareInheritedData->m_imageRendering != other->rareInheritedData->m_im
ageRendering) | 634 || rareInheritedData->m_imageRendering != other.rareInheritedData->m_ima
geRendering) |
| 635 return StyleDifferenceRepaint; | 635 return StyleDifferenceRepaint; |
| 636 | 636 |
| 637 // FIXME: The current spec is being reworked to remove dependencies betw
een exclusions and affected | 637 // FIXME: The current spec is being reworked to remove dependencies betw
een exclusions and affected |
| 638 // content. There's a proposal to use floats instead. In that case, wrap
-shape should actually relayout | 638 // content. There's a proposal to use floats instead. In that case, wrap
-shape should actually relayout |
| 639 // the parent container. For sure, I will have to revisit this code, but
for now I've added this in order | 639 // the parent container. For sure, I will have to revisit this code, but
for now I've added this in order |
| 640 // to avoid having diff() == StyleDifferenceEqual where wrap-shapes actu
ally differ. | 640 // to avoid having diff() == StyleDifferenceEqual where wrap-shapes actu
ally differ. |
| 641 // Tracking bug: https://bugs.webkit.org/show_bug.cgi?id=62991 | 641 // Tracking bug: https://bugs.webkit.org/show_bug.cgi?id=62991 |
| 642 if (rareNonInheritedData->m_shapeOutside != other->rareNonInheritedData-
>m_shapeOutside) | 642 if (rareNonInheritedData->m_shapeOutside != other.rareNonInheritedData->
m_shapeOutside) |
| 643 return StyleDifferenceRepaint; | 643 return StyleDifferenceRepaint; |
| 644 | 644 |
| 645 if (rareNonInheritedData->m_clipPath != other->rareNonInheritedData->m_c
lipPath) | 645 if (rareNonInheritedData->m_clipPath != other.rareNonInheritedData->m_cl
ipPath) |
| 646 return StyleDifferenceRepaint; | 646 return StyleDifferenceRepaint; |
| 647 | 647 |
| 648 if (rareNonInheritedData.get() != other->rareNonInheritedData.get()) { | 648 if (rareNonInheritedData.get() != other.rareNonInheritedData.get()) { |
| 649 if (rareNonInheritedData->m_transformStyle3D != other->rareNonInheritedD
ata->m_transformStyle3D | 649 if (rareNonInheritedData->m_transformStyle3D != other.rareNonInheritedDa
ta->m_transformStyle3D |
| 650 || rareNonInheritedData->m_backfaceVisibility != other->rareNonInher
itedData->m_backfaceVisibility | 650 || rareNonInheritedData->m_backfaceVisibility != other.rareNonInheri
tedData->m_backfaceVisibility |
| 651 || rareNonInheritedData->m_perspective != other->rareNonInheritedDat
a->m_perspective | 651 || rareNonInheritedData->m_perspective != other.rareNonInheritedData
->m_perspective |
| 652 || rareNonInheritedData->m_perspectiveOriginX != other->rareNonInher
itedData->m_perspectiveOriginX | 652 || rareNonInheritedData->m_perspectiveOriginX != other.rareNonInheri
tedData->m_perspectiveOriginX |
| 653 || rareNonInheritedData->m_perspectiveOriginY != other->rareNonInher
itedData->m_perspectiveOriginY | 653 || rareNonInheritedData->m_perspectiveOriginY != other.rareNonInheri
tedData->m_perspectiveOriginY |
| 654 || hasWillChangeCompositingHint() != other->hasWillChangeCompositing
Hint() | 654 || hasWillChangeCompositingHint() != other.hasWillChangeCompositingH
int() |
| 655 || hasWillChangeGpuRasterizationHint() != other->hasWillChangeGpuRas
terizationHint()) | 655 || hasWillChangeGpuRasterizationHint() != other.hasWillChangeGpuRast
erizationHint()) |
| 656 return StyleDifferenceRecompositeLayer; | 656 return StyleDifferenceRecompositeLayer; |
| 657 } | 657 } |
| 658 | 658 |
| 659 if (inherited->color != other->inherited->color | 659 if (inherited->color != other.inherited->color |
| 660 || inherited_flags._text_decorations != other->inherited_flags._text_dec
orations | 660 || inherited_flags._text_decorations != other.inherited_flags._text_deco
rations |
| 661 || visual->textDecoration != other->visual->textDecoration | 661 || visual->textDecoration != other.visual->textDecoration |
| 662 || rareNonInheritedData->m_textDecorationStyle != other->rareNonInherite
dData->m_textDecorationStyle | 662 || rareNonInheritedData->m_textDecorationStyle != other.rareNonInherited
Data->m_textDecorationStyle |
| 663 || rareNonInheritedData->m_textDecorationColor != other->rareNonInherite
dData->m_textDecorationColor | 663 || rareNonInheritedData->m_textDecorationColor != other.rareNonInherited
Data->m_textDecorationColor |
| 664 || rareInheritedData->textFillColor() != other->rareInheritedData->textF
illColor() | 664 || rareInheritedData->textFillColor() != other.rareInheritedData->textFi
llColor() |
| 665 || rareInheritedData->textStrokeColor() != other->rareInheritedData->tex
tStrokeColor() | 665 || rareInheritedData->textStrokeColor() != other.rareInheritedData->text
StrokeColor() |
| 666 || rareInheritedData->textEmphasisColor() != other->rareInheritedData->t
extEmphasisColor() | 666 || rareInheritedData->textEmphasisColor() != other.rareInheritedData->te
xtEmphasisColor() |
| 667 || rareInheritedData->textEmphasisFill != other->rareInheritedData->text
EmphasisFill) | 667 || rareInheritedData->textEmphasisFill != other.rareInheritedData->textE
mphasisFill) |
| 668 return StyleDifferenceRepaintIfTextOrColorChange; | 668 return StyleDifferenceRepaintIfTextOrColorChange; |
| 669 | 669 |
| 670 // Cursors are not checked, since they will be set appropriately in response
to mouse events, | 670 // Cursors are not checked, since they will be set appropriately in response
to mouse events, |
| 671 // so they don't need to cause any repaint or layout. | 671 // so they don't need to cause any repaint or layout. |
| 672 | 672 |
| 673 // Animations don't need to be checked either. We always set the new style
on the RenderObject, so we will get a chance to fire off | 673 // Animations don't need to be checked either. We always set the new style
on the RenderObject, so we will get a chance to fire off |
| 674 // the resulting transition properly. | 674 // the resulting transition properly. |
| 675 return StyleDifferenceEqual; | 675 return StyleDifferenceEqual; |
| 676 } | 676 } |
| 677 | 677 |
| (...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 // right | 1654 // right |
| 1655 radiiSum = radii.topRight().height() + radii.bottomRight().height(); | 1655 radiiSum = radii.topRight().height() + radii.bottomRight().height(); |
| 1656 if (radiiSum > rect.height()) | 1656 if (radiiSum > rect.height()) |
| 1657 factor = std::min(rect.height() / radiiSum, factor); | 1657 factor = std::min(rect.height() / radiiSum, factor); |
| 1658 | 1658 |
| 1659 ASSERT(factor <= 1); | 1659 ASSERT(factor <= 1); |
| 1660 return factor; | 1660 return factor; |
| 1661 } | 1661 } |
| 1662 | 1662 |
| 1663 } // namespace WebCore | 1663 } // namespace WebCore |
| OLD | NEW |