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 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 | 362 |
363 // One of the units is fixed or percent in both directions and stayed | 363 // One of the units is fixed or percent in both directions and stayed |
364 // that way in the new style. Therefore all we are doing is moving. | 364 // that way in the new style. Therefore all we are doing is moving. |
365 return true; | 365 return true; |
366 } | 366 } |
367 | 367 |
368 StyleDifference RenderStyle::diff(const RenderStyle* other, unsigned& changedCon
textSensitiveProperties) const | 368 StyleDifference RenderStyle::diff(const RenderStyle* other, unsigned& changedCon
textSensitiveProperties) const |
369 { | 369 { |
370 changedContextSensitiveProperties = ContextSensitivePropertyNone; | 370 changedContextSensitiveProperties = ContextSensitivePropertyNone; |
371 | 371 |
| 372 // Note, we use .get() on each DataRef below because DataRef::operator== wil
l do a deep |
| 373 // compare, which is duplicate work when we're going to compare each propert
y inside |
| 374 // this function anyway. |
| 375 |
372 StyleDifference svgChange = StyleDifferenceEqual; | 376 StyleDifference svgChange = StyleDifferenceEqual; |
373 if (m_svgStyle != other->m_svgStyle) { | 377 if (m_svgStyle.get() != other->m_svgStyle.get()) { |
374 svgChange = m_svgStyle->diff(other->m_svgStyle.get()); | 378 svgChange = m_svgStyle->diff(other->m_svgStyle.get()); |
375 if (svgChange == StyleDifferenceLayout) | 379 if (svgChange == StyleDifferenceLayout) |
376 return svgChange; | 380 return svgChange; |
377 } | 381 } |
378 | 382 |
379 if (m_box->width() != other->m_box->width() | 383 if (m_box.get() != other->m_box.get()) { |
380 || m_box->minWidth() != other->m_box->minWidth() | 384 if (m_box->width() != other->m_box->width() |
381 || m_box->maxWidth() != other->m_box->maxWidth() | 385 || m_box->minWidth() != other->m_box->minWidth() |
382 || m_box->height() != other->m_box->height() | 386 || m_box->maxWidth() != other->m_box->maxWidth() |
383 || m_box->minHeight() != other->m_box->minHeight() | 387 || m_box->height() != other->m_box->height() |
384 || m_box->maxHeight() != other->m_box->maxHeight()) | 388 || m_box->minHeight() != other->m_box->minHeight() |
385 return StyleDifferenceLayout; | 389 || m_box->maxHeight() != other->m_box->maxHeight()) |
| 390 return StyleDifferenceLayout; |
386 | 391 |
387 if (m_box->verticalAlign() != other->m_box->verticalAlign() || noninherited_
flags._vertical_align != other->noninherited_flags._vertical_align) | 392 if (m_box->verticalAlign() != other->m_box->verticalAlign()) |
388 return StyleDifferenceLayout; | 393 return StyleDifferenceLayout; |
389 | 394 |
390 if (m_box->boxSizing() != other->m_box->boxSizing()) | 395 if (m_box->boxSizing() != other->m_box->boxSizing()) |
391 return StyleDifferenceLayout; | 396 return StyleDifferenceLayout; |
| 397 } |
392 | 398 |
393 if (surround->margin != other->surround->margin) | 399 if (surround.get() != other->surround.get()) { |
394 return StyleDifferenceLayout; | 400 if (surround->margin != other->surround->margin) |
| 401 return StyleDifferenceLayout; |
395 | 402 |
396 if (surround->padding != other->surround->padding) | 403 if (surround->padding != other->surround->padding) |
397 return StyleDifferenceLayout; | 404 return StyleDifferenceLayout; |
| 405 |
| 406 // If our border widths change, then we need to layout. Other changes to
borders only necessitate a repaint. |
| 407 if (borderLeftWidth() != other->borderLeftWidth() |
| 408 || borderTopWidth() != other->borderTopWidth() |
| 409 || borderBottomWidth() != other->borderBottomWidth() |
| 410 || borderRightWidth() != other->borderRightWidth()) |
| 411 return StyleDifferenceLayout; |
| 412 } |
398 | 413 |
399 if (rareNonInheritedData.get() != other->rareNonInheritedData.get()) { | 414 if (rareNonInheritedData.get() != other->rareNonInheritedData.get()) { |
400 if (rareNonInheritedData->m_appearance != other->rareNonInheritedData->m
_appearance | 415 if (rareNonInheritedData->m_appearance != other->rareNonInheritedData->m
_appearance |
401 || rareNonInheritedData->marginBeforeCollapse != other->rareNonInher
itedData->marginBeforeCollapse | 416 || rareNonInheritedData->marginBeforeCollapse != other->rareNonInher
itedData->marginBeforeCollapse |
402 || rareNonInheritedData->marginAfterCollapse != other->rareNonInheri
tedData->marginAfterCollapse | 417 || rareNonInheritedData->marginAfterCollapse != other->rareNonInheri
tedData->marginAfterCollapse |
403 || rareNonInheritedData->lineClamp != other->rareNonInheritedData->l
ineClamp | 418 || rareNonInheritedData->lineClamp != other->rareNonInheritedData->l
ineClamp |
404 || rareNonInheritedData->textOverflow != other->rareNonInheritedData
->textOverflow) | 419 || rareNonInheritedData->textOverflow != other->rareNonInheritedData
->textOverflow |
405 return StyleDifferenceLayout; | 420 || rareNonInheritedData->m_regionFragment != other->rareNonInherited
Data->m_regionFragment |
406 | 421 || rareNonInheritedData->m_wrapFlow != other->rareNonInheritedData->
m_wrapFlow |
407 if (rareNonInheritedData->m_regionFragment != other->rareNonInheritedDat
a->m_regionFragment) | |
408 return StyleDifferenceLayout; | |
409 | |
410 if (rareNonInheritedData->m_wrapFlow != other->rareNonInheritedData->m_w
rapFlow | |
411 || rareNonInheritedData->m_wrapThrough != other->rareNonInheritedDat
a->m_wrapThrough | 422 || rareNonInheritedData->m_wrapThrough != other->rareNonInheritedDat
a->m_wrapThrough |
412 || rareNonInheritedData->m_shapeMargin != other->rareNonInheritedDat
a->m_shapeMargin | 423 || rareNonInheritedData->m_shapeMargin != other->rareNonInheritedDat
a->m_shapeMargin |
413 || rareNonInheritedData->m_shapePadding != other->rareNonInheritedDa
ta->m_shapePadding) | 424 || rareNonInheritedData->m_shapePadding != other->rareNonInheritedDa
ta->m_shapePadding |
| 425 || rareNonInheritedData->m_order != other->rareNonInheritedData->m_o
rder |
| 426 || rareNonInheritedData->m_alignContent != other->rareNonInheritedDa
ta->m_alignContent |
| 427 || rareNonInheritedData->m_alignItems != other->rareNonInheritedData
->m_alignItems |
| 428 || rareNonInheritedData->m_alignSelf != other->rareNonInheritedData-
>m_alignSelf |
| 429 || rareNonInheritedData->m_justifyContent != other->rareNonInherited
Data->m_justifyContent |
| 430 || rareNonInheritedData->m_grid.get() != other->rareNonInheritedData
->m_grid.get() |
| 431 || rareNonInheritedData->m_gridItem.get() != other->rareNonInherited
Data->m_gridItem.get() |
| 432 || rareNonInheritedData->m_shapeInside != other->rareNonInheritedDat
a->m_shapeInside |
| 433 || rareNonInheritedData->m_textCombine != other->rareNonInheritedDat
a->m_textCombine |
| 434 || rareNonInheritedData->hasFilters() != other->rareNonInheritedData
->hasFilters()) |
414 return StyleDifferenceLayout; | 435 return StyleDifferenceLayout; |
415 | 436 |
416 if (rareNonInheritedData->m_deprecatedFlexibleBox.get() != other->rareNo
nInheritedData->m_deprecatedFlexibleBox.get() | 437 if (rareNonInheritedData->m_deprecatedFlexibleBox.get() != other->rareNo
nInheritedData->m_deprecatedFlexibleBox.get() |
417 && *rareNonInheritedData->m_deprecatedFlexibleBox.get() != *other->r
areNonInheritedData->m_deprecatedFlexibleBox.get()) | 438 && *rareNonInheritedData->m_deprecatedFlexibleBox.get() != *other->r
areNonInheritedData->m_deprecatedFlexibleBox.get()) |
418 return StyleDifferenceLayout; | 439 return StyleDifferenceLayout; |
419 | 440 |
420 if (rareNonInheritedData->m_flexibleBox.get() != other->rareNonInherited
Data->m_flexibleBox.get() | 441 if (rareNonInheritedData->m_flexibleBox.get() != other->rareNonInherited
Data->m_flexibleBox.get() |
421 && *rareNonInheritedData->m_flexibleBox.get() != *other->rareNonInhe
ritedData->m_flexibleBox.get()) | 442 && *rareNonInheritedData->m_flexibleBox.get() != *other->rareNonInhe
ritedData->m_flexibleBox.get()) |
422 return StyleDifferenceLayout; | 443 return StyleDifferenceLayout; |
423 if (rareNonInheritedData->m_order != other->rareNonInheritedData->m_orde
r | |
424 || rareNonInheritedData->m_alignContent != other->rareNonInheritedDa
ta->m_alignContent | |
425 || rareNonInheritedData->m_alignItems != other->rareNonInheritedData
->m_alignItems | |
426 || rareNonInheritedData->m_alignSelf != other->rareNonInheritedData-
>m_alignSelf | |
427 || rareNonInheritedData->m_justifyContent != other->rareNonInherited
Data->m_justifyContent) | |
428 return StyleDifferenceLayout; | |
429 | 444 |
430 // 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. |
431 if (!rareNonInheritedData->shadowDataEquivalent(*other->rareNonInherited
Data.get())) | 446 if (!rareNonInheritedData->shadowDataEquivalent(*other->rareNonInherited
Data.get())) |
432 return StyleDifferenceLayout; | 447 return StyleDifferenceLayout; |
433 | 448 |
434 if (!rareNonInheritedData->reflectionDataEquivalent(*other->rareNonInher
itedData.get())) | 449 if (!rareNonInheritedData->reflectionDataEquivalent(*other->rareNonInher
itedData.get())) |
435 return StyleDifferenceLayout; | 450 return StyleDifferenceLayout; |
436 | 451 |
437 if (rareNonInheritedData->m_multiCol.get() != other->rareNonInheritedDat
a->m_multiCol.get() | 452 if (rareNonInheritedData->m_multiCol.get() != other->rareNonInheritedDat
a->m_multiCol.get() |
438 && *rareNonInheritedData->m_multiCol.get() != *other->rareNonInherit
edData->m_multiCol.get()) | 453 && *rareNonInheritedData->m_multiCol.get() != *other->rareNonInherit
edData->m_multiCol.get()) |
439 return StyleDifferenceLayout; | 454 return StyleDifferenceLayout; |
440 | 455 |
441 if (rareNonInheritedData->m_transform.get() != other->rareNonInheritedDa
ta->m_transform.get() | 456 if (rareNonInheritedData->m_transform.get() != other->rareNonInheritedDa
ta->m_transform.get() |
442 && *rareNonInheritedData->m_transform.get() != *other->rareNonInheri
tedData->m_transform.get()) { | 457 && *rareNonInheritedData->m_transform.get() != *other->rareNonInheri
tedData->m_transform.get()) { |
443 // Don't return early here; instead take note of the type of | 458 // Don't return early here; instead take note of the type of |
444 // change, and deal with it when looking at compositing. | 459 // change, and deal with it when looking at compositing. |
445 changedContextSensitiveProperties |= ContextSensitivePropertyTransfo
rm; | 460 changedContextSensitiveProperties |= ContextSensitivePropertyTransfo
rm; |
446 } | 461 } |
447 | 462 |
448 if (rareNonInheritedData->m_grid.get() != other->rareNonInheritedData->m
_grid.get() | 463 // If the counter directives change, trigger a relayout to re-calculate
counter values and rebuild the counter node tree. |
449 || rareNonInheritedData->m_gridItem.get() != other->rareNonInherited
Data->m_gridItem.get()) | 464 const CounterDirectiveMap* mapA = rareNonInheritedData->m_counterDirecti
ves.get(); |
| 465 const CounterDirectiveMap* mapB = other->rareNonInheritedData->m_counter
Directives.get(); |
| 466 if (!(mapA == mapB || (mapA && mapB && *mapA == *mapB))) |
450 return StyleDifferenceLayout; | 467 return StyleDifferenceLayout; |
451 | 468 |
452 if (rareNonInheritedData->m_shapeInside != other->rareNonInheritedData->
m_shapeInside) | 469 // We only need do layout for opacity changes if adding or losing opacit
y could trigger a change |
| 470 // in us being a stacking context. |
| 471 if (hasAutoZIndex() != other->hasAutoZIndex() && rareNonInheritedData->h
asOpacity() != other->rareNonInheritedData->hasOpacity()) { |
| 472 // FIXME: We would like to use SimplifiedLayout here, but we can't q
uite do that yet. |
| 473 // We need to make sure SimplifiedLayout can operate correctly on Re
nderInlines (we will need |
| 474 // to add a selfNeedsSimplifiedLayout bit in order to not get confus
ed and taint every line). |
| 475 // In addition we need to solve the floating object issue when layer
s come and go. Right now |
| 476 // a full layout is necessary to keep floating object lists sane. |
453 return StyleDifferenceLayout; | 477 return StyleDifferenceLayout; |
| 478 } |
454 } | 479 } |
455 | 480 |
456 if (rareInheritedData.get() != other->rareInheritedData.get()) { | 481 if (rareInheritedData.get() != other->rareInheritedData.get()) { |
457 if (rareInheritedData->highlight != other->rareInheritedData->highlight | 482 if (rareInheritedData->highlight != other->rareInheritedData->highlight |
458 || rareInheritedData->indent != other->rareInheritedData->indent | 483 || rareInheritedData->indent != other->rareInheritedData->indent |
459 || rareInheritedData->m_textAlignLast != other->rareInheritedData->m
_textAlignLast | 484 || rareInheritedData->m_textAlignLast != other->rareInheritedData->m
_textAlignLast |
460 || rareInheritedData->m_textIndentLine != other->rareInheritedData->
m_textIndentLine | 485 || rareInheritedData->m_textIndentLine != other->rareInheritedData->
m_textIndentLine |
461 || rareInheritedData->m_effectiveZoom != other->rareInheritedData->m
_effectiveZoom | 486 || rareInheritedData->m_effectiveZoom != other->rareInheritedData->m
_effectiveZoom |
462 || rareInheritedData->wordBreak != other->rareInheritedData->wordBre
ak | 487 || rareInheritedData->wordBreak != other->rareInheritedData->wordBre
ak |
463 || rareInheritedData->overflowWrap != other->rareInheritedData->over
flowWrap | 488 || rareInheritedData->overflowWrap != other->rareInheritedData->over
flowWrap |
464 || rareInheritedData->lineBreak != other->rareInheritedData->lineBre
ak | 489 || rareInheritedData->lineBreak != other->rareInheritedData->lineBre
ak |
465 || rareInheritedData->textSecurity != other->rareInheritedData->text
Security | 490 || rareInheritedData->textSecurity != other->rareInheritedData->text
Security |
466 || rareInheritedData->hyphens != other->rareInheritedData->hyphens | 491 || rareInheritedData->hyphens != other->rareInheritedData->hyphens |
467 || rareInheritedData->hyphenationLimitBefore != other->rareInherited
Data->hyphenationLimitBefore | 492 || rareInheritedData->hyphenationLimitBefore != other->rareInherited
Data->hyphenationLimitBefore |
468 || rareInheritedData->hyphenationLimitAfter != other->rareInheritedD
ata->hyphenationLimitAfter | 493 || rareInheritedData->hyphenationLimitAfter != other->rareInheritedD
ata->hyphenationLimitAfter |
469 || rareInheritedData->hyphenationString != other->rareInheritedData-
>hyphenationString | 494 || rareInheritedData->hyphenationString != other->rareInheritedData-
>hyphenationString |
470 || rareInheritedData->locale != other->rareInheritedData->locale | 495 || rareInheritedData->locale != other->rareInheritedData->locale |
471 || rareInheritedData->m_rubyPosition != other->rareInheritedData->m_
rubyPosition | 496 || rareInheritedData->m_rubyPosition != other->rareInheritedData->m_
rubyPosition |
472 || rareInheritedData->textEmphasisMark != other->rareInheritedData->
textEmphasisMark | 497 || rareInheritedData->textEmphasisMark != other->rareInheritedData->
textEmphasisMark |
473 || rareInheritedData->textEmphasisPosition != other->rareInheritedDa
ta->textEmphasisPosition | 498 || rareInheritedData->textEmphasisPosition != other->rareInheritedDa
ta->textEmphasisPosition |
474 || rareInheritedData->textEmphasisCustomMark != other->rareInherited
Data->textEmphasisCustomMark | 499 || rareInheritedData->textEmphasisCustomMark != other->rareInherited
Data->textEmphasisCustomMark |
475 || rareInheritedData->m_textAlignLast != other->rareInheritedData->m
_textAlignLast | 500 || rareInheritedData->m_textAlignLast != other->rareInheritedData->m
_textAlignLast |
476 || rareInheritedData->m_textJustify != other->rareInheritedData->m_t
extJustify | 501 || rareInheritedData->m_textJustify != other->rareInheritedData->m_t
extJustify |
477 || rareInheritedData->m_textOrientation != other->rareInheritedData-
>m_textOrientation | 502 || rareInheritedData->m_textOrientation != other->rareInheritedData-
>m_textOrientation |
478 || rareInheritedData->m_tabSize != other->rareInheritedData->m_tabSi
ze | 503 || rareInheritedData->m_tabSize != other->rareInheritedData->m_tabSi
ze |
479 || rareInheritedData->m_lineBoxContain != other->rareInheritedData->
m_lineBoxContain | 504 || rareInheritedData->m_lineBoxContain != other->rareInheritedData->
m_lineBoxContain |
480 || rareInheritedData->m_lineGrid != other->rareInheritedData->m_line
Grid | 505 || rareInheritedData->m_lineGrid != other->rareInheritedData->m_line
Grid |
481 || rareInheritedData->m_lineSnap != other->rareInheritedData->m_line
Snap | 506 || rareInheritedData->m_lineSnap != other->rareInheritedData->m_line
Snap |
482 || rareInheritedData->m_lineAlign != other->rareInheritedData->m_lin
eAlign | 507 || rareInheritedData->m_lineAlign != other->rareInheritedData->m_lin
eAlign |
483 || rareInheritedData->listStyleImage != other->rareInheritedData->li
stStyleImage) | 508 || rareInheritedData->listStyleImage != other->rareInheritedData->li
stStyleImage |
| 509 || rareInheritedData->textStrokeWidth != other->rareInheritedData->t
extStrokeWidth) |
484 return StyleDifferenceLayout; | 510 return StyleDifferenceLayout; |
485 | 511 |
486 if (!rareInheritedData->shadowDataEquivalent(*other->rareInheritedData.g
et())) | 512 if (!rareInheritedData->shadowDataEquivalent(*other->rareInheritedData.g
et())) |
487 return StyleDifferenceLayout; | 513 return StyleDifferenceLayout; |
488 | 514 |
489 if (textStrokeWidth() != other->textStrokeWidth()) | 515 if (!QuotesData::equals(rareInheritedData->quotes.get(), other->rareInhe
ritedData->quotes.get())) |
490 return StyleDifferenceLayout; | 516 return StyleDifferenceLayout; |
491 } | 517 } |
492 | 518 |
493 if (visual->m_textAutosizingMultiplier != other->visual->m_textAutosizingMul
tiplier) | 519 if (visual->m_textAutosizingMultiplier != other->visual->m_textAutosizingMul
tiplier) |
494 return StyleDifferenceLayout; | 520 return StyleDifferenceLayout; |
495 | 521 |
496 if (inherited->line_height != other->inherited->line_height | 522 if (inherited.get() != other->inherited.get()) { |
| 523 if (inherited->line_height != other->inherited->line_height |
497 || inherited->font != other->inherited->font | 524 || inherited->font != other->inherited->font |
498 || inherited->horizontal_border_spacing != other->inherited->horizontal_
border_spacing | 525 || inherited->horizontal_border_spacing != other->inherited->horizontal_
border_spacing |
499 || inherited->vertical_border_spacing != other->inherited->vertical_bord
er_spacing | 526 || inherited->vertical_border_spacing != other->inherited->vertical_bord
er_spacing) |
500 || inherited_flags._box_direction != other->inherited_flags._box_directi
on | 527 return StyleDifferenceLayout; |
| 528 } |
| 529 |
| 530 if (inherited_flags._box_direction != other->inherited_flags._box_direction |
501 || inherited_flags.m_rtlOrdering != other->inherited_flags.m_rtlOrdering | 531 || inherited_flags.m_rtlOrdering != other->inherited_flags.m_rtlOrdering |
| 532 || inherited_flags._text_align != other->inherited_flags._text_align |
| 533 || inherited_flags._text_transform != other->inherited_flags._text_trans
form |
| 534 || inherited_flags._direction != other->inherited_flags._direction |
| 535 || inherited_flags._white_space != other->inherited_flags._white_space |
| 536 || inherited_flags.m_writingMode != other->inherited_flags.m_writingMode
) |
| 537 return StyleDifferenceLayout; |
| 538 |
| 539 if (noninherited_flags._overflowX != other->noninherited_flags._overflowX |
| 540 || noninherited_flags._overflowY != other->noninherited_flags._overflowY |
| 541 || noninherited_flags._clear != other->noninherited_flags._clear |
| 542 || noninherited_flags._unicodeBidi != other->noninherited_flags._unicode
Bidi |
502 || noninherited_flags._position != other->noninherited_flags._position | 543 || noninherited_flags._position != other->noninherited_flags._position |
503 || noninherited_flags._floating != other->noninherited_flags._floating | 544 || noninherited_flags._floating != other->noninherited_flags._floating |
504 || noninherited_flags._originalDisplay != other->noninherited_flags._ori
ginalDisplay) | 545 || noninherited_flags._originalDisplay != other->noninherited_flags._ori
ginalDisplay |
| 546 || noninherited_flags._vertical_align != other->noninherited_flags._vert
ical_align) |
505 return StyleDifferenceLayout; | 547 return StyleDifferenceLayout; |
506 | 548 |
507 | 549 if (noninherited_flags._effectiveDisplay >= FIRST_TABLE_DISPLAY && noninheri
ted_flags._effectiveDisplay <= LAST_TABLE_DISPLAY) { |
508 if (((int)noninherited_flags._effectiveDisplay) >= TABLE) { | |
509 if (inherited_flags._border_collapse != other->inherited_flags._border_c
ollapse | 550 if (inherited_flags._border_collapse != other->inherited_flags._border_c
ollapse |
510 || inherited_flags._empty_cells != other->inherited_flags._empty_cel
ls | 551 || inherited_flags._empty_cells != other->inherited_flags._empty_cel
ls |
511 || inherited_flags._caption_side != other->inherited_flags._caption_
side | 552 || inherited_flags._caption_side != other->inherited_flags._caption_
side |
512 || noninherited_flags._table_layout != other->noninherited_flags._ta
ble_layout) | 553 || noninherited_flags._table_layout != other->noninherited_flags._ta
ble_layout) |
513 return StyleDifferenceLayout; | 554 return StyleDifferenceLayout; |
514 | 555 |
515 // In the collapsing border model, 'hidden' suppresses other borders, wh
ile 'none' | 556 // In the collapsing border model, 'hidden' suppresses other borders, wh
ile 'none' |
516 // does not, so these style differences can be width differences. | 557 // does not, so these style differences can be width differences. |
517 if (inherited_flags._border_collapse | 558 if (inherited_flags._border_collapse |
518 && ((borderTopStyle() == BHIDDEN && other->borderTopStyle() == BNONE
) | 559 && ((borderTopStyle() == BHIDDEN && other->borderTopStyle() == BNONE
) |
519 || (borderTopStyle() == BNONE && other->borderTopStyle() == BHID
DEN) | 560 || (borderTopStyle() == BNONE && other->borderTopStyle() == BHID
DEN) |
520 || (borderBottomStyle() == BHIDDEN && other->borderBottomStyle()
== BNONE) | 561 || (borderBottomStyle() == BHIDDEN && other->borderBottomStyle()
== BNONE) |
521 || (borderBottomStyle() == BNONE && other->borderBottomStyle() =
= BHIDDEN) | 562 || (borderBottomStyle() == BNONE && other->borderBottomStyle() =
= BHIDDEN) |
522 || (borderLeftStyle() == BHIDDEN && other->borderLeftStyle() ==
BNONE) | 563 || (borderLeftStyle() == BHIDDEN && other->borderLeftStyle() ==
BNONE) |
523 || (borderLeftStyle() == BNONE && other->borderLeftStyle() == BH
IDDEN) | 564 || (borderLeftStyle() == BNONE && other->borderLeftStyle() == BH
IDDEN) |
524 || (borderRightStyle() == BHIDDEN && other->borderRightStyle() =
= BNONE) | 565 || (borderRightStyle() == BHIDDEN && other->borderRightStyle() =
= BNONE) |
525 || (borderRightStyle() == BNONE && other->borderRightStyle() ==
BHIDDEN))) | 566 || (borderRightStyle() == BNONE && other->borderRightStyle() ==
BHIDDEN))) |
526 return StyleDifferenceLayout; | 567 return StyleDifferenceLayout; |
527 } | 568 } else if (noninherited_flags._effectiveDisplay == LIST_ITEM) { |
528 | |
529 if (noninherited_flags._effectiveDisplay == LIST_ITEM) { | |
530 if (inherited_flags._list_style_type != other->inherited_flags._list_sty
le_type | 569 if (inherited_flags._list_style_type != other->inherited_flags._list_sty
le_type |
531 || inherited_flags._list_style_position != other->inherited_flags._l
ist_style_position) | 570 || inherited_flags._list_style_position != other->inherited_flags._l
ist_style_position) |
532 return StyleDifferenceLayout; | 571 return StyleDifferenceLayout; |
533 } | 572 } |
534 | 573 |
535 if (inherited_flags._text_align != other->inherited_flags._text_align | |
536 || inherited_flags._text_transform != other->inherited_flags._text_trans
form | |
537 || inherited_flags._direction != other->inherited_flags._direction | |
538 || inherited_flags._white_space != other->inherited_flags._white_space | |
539 || noninherited_flags._clear != other->noninherited_flags._clear | |
540 || noninherited_flags._unicodeBidi != other->noninherited_flags._unicode
Bidi) | |
541 return StyleDifferenceLayout; | |
542 | |
543 // Check block flow direction. | |
544 if (inherited_flags.m_writingMode != other->inherited_flags.m_writingMode) | |
545 return StyleDifferenceLayout; | |
546 | |
547 // Check text combine mode. | |
548 if (rareNonInheritedData->m_textCombine != other->rareNonInheritedData->m_te
xtCombine) | |
549 return StyleDifferenceLayout; | |
550 | |
551 // Overflow returns a layout hint. | |
552 if (noninherited_flags._overflowX != other->noninherited_flags._overflowX | |
553 || noninherited_flags._overflowY != other->noninherited_flags._overflowY
) | |
554 return StyleDifferenceLayout; | |
555 | |
556 // If our border widths change, then we need to layout. Other changes to bo
rders | |
557 // only necessitate a repaint. | |
558 if (borderLeftWidth() != other->borderLeftWidth() | |
559 || borderTopWidth() != other->borderTopWidth() | |
560 || borderBottomWidth() != other->borderBottomWidth() | |
561 || borderRightWidth() != other->borderRightWidth()) | |
562 return StyleDifferenceLayout; | |
563 | |
564 // If the counter directives change, trigger a relayout to re-calculate coun
ter values and rebuild the counter node tree. | |
565 const CounterDirectiveMap* mapA = rareNonInheritedData->m_counterDirectives.
get(); | |
566 const CounterDirectiveMap* mapB = other->rareNonInheritedData->m_counterDire
ctives.get(); | |
567 if (!(mapA == mapB || (mapA && mapB && *mapA == *mapB))) | |
568 return StyleDifferenceLayout; | |
569 | |
570 if ((visibility() == COLLAPSE) != (other->visibility() == COLLAPSE)) | 574 if ((visibility() == COLLAPSE) != (other->visibility() == COLLAPSE)) |
571 return StyleDifferenceLayout; | 575 return StyleDifferenceLayout; |
572 | 576 |
573 // We only need do layout for opacity changes if adding or losing opacity co
uld trigger a change | |
574 // in us being a stacking context. | |
575 if (hasAutoZIndex() != other->hasAutoZIndex() && rareNonInheritedData->hasOp
acity() != other->rareNonInheritedData->hasOpacity()) { | |
576 // FIXME: We would like to use SimplifiedLayout here, but we can't quite
do that yet. | |
577 // We need to make sure SimplifiedLayout can operate correctly on Render
Inlines (we will need | |
578 // to add a selfNeedsSimplifiedLayout bit in order to not get confused a
nd taint every line). | |
579 // In addition we need to solve the floating object issue when layers co
me and go. Right now | |
580 // a full layout is necessary to keep floating object lists sane. | |
581 return StyleDifferenceLayout; | |
582 } | |
583 | |
584 if (rareNonInheritedData->hasFilters() != other->rareNonInheritedData->hasFi
lters()) | |
585 return StyleDifferenceLayout; | |
586 | |
587 if (!QuotesData::equals(rareInheritedData->quotes.get(), other->rareInherite
dData->quotes.get())) | |
588 return StyleDifferenceLayout; | |
589 | |
590 // SVGRenderStyle::diff() might have returned StyleDifferenceRepaint, eg. if
fill changes. | 577 // SVGRenderStyle::diff() might have returned StyleDifferenceRepaint, eg. if
fill changes. |
591 // If eg. the font-size changed at the same time, we're not allowed to retur
n StyleDifferenceRepaint, | 578 // If eg. the font-size changed at the same time, we're not allowed to retur
n StyleDifferenceRepaint, |
592 // but have to return StyleDifferenceLayout, that's why this if branch come
s after all branches | 579 // but have to return StyleDifferenceLayout, that's why this if branch come
s after all branches |
593 // that are relevant for SVG and might return StyleDifferenceLayout. | 580 // that are relevant for SVG and might return StyleDifferenceLayout. |
594 if (svgChange != StyleDifferenceEqual) | 581 if (svgChange != StyleDifferenceEqual) |
595 return svgChange; | 582 return svgChange; |
596 | 583 |
597 // Make sure these left/top/right/bottom checks stay below all layout checks
and above | 584 // NOTE: This block must be last in this function for the StyleDifferenceLay
outPositionedMovementOnly |
598 // all visible checks. | 585 // optimization to work properly. |
599 if (position() != StaticPosition && surround->offset != other->surround->off
set) { | 586 if (position() != StaticPosition && surround->offset != other->surround->off
set) { |
600 // Optimize for the case where a positioned layer is moving but not chan
ging size. | 587 // Optimize for the case where a positioned layer is moving but not chan
ging size. |
601 if (position() == AbsolutePosition && positionedObjectMoved(surround->of
fset, other->surround->offset, m_box->width()) && repaintOnlyDiff(other, changed
ContextSensitiveProperties) == StyleDifferenceEqual) | 588 if (position() == AbsolutePosition && positionedObjectMoved(surround->of
fset, other->surround->offset, m_box->width()) && repaintOnlyDiff(other, changed
ContextSensitiveProperties) == StyleDifferenceEqual) |
602 return StyleDifferenceLayoutPositionedMovementOnly; | 589 return StyleDifferenceLayoutPositionedMovementOnly; |
603 | |
604 // FIXME: We would like to use SimplifiedLayout for relative positioning
, but we can't quite do that yet. | 590 // FIXME: We would like to use SimplifiedLayout for relative positioning
, but we can't quite do that yet. |
605 // We need to make sure SimplifiedLayout can operate correctly on Render
Inlines (we will need | 591 // We need to make sure SimplifiedLayout can operate correctly on Render
Inlines (we will need |
606 // to add a selfNeedsSimplifiedLayout bit in order to not get confused a
nd taint every line). | 592 // to add a selfNeedsSimplifiedLayout bit in order to not get confused a
nd taint every line). |
607 return StyleDifferenceLayout; | 593 return StyleDifferenceLayout; |
608 } | 594 } |
| 595 |
609 return repaintOnlyDiff(other, changedContextSensitiveProperties); | 596 return repaintOnlyDiff(other, changedContextSensitiveProperties); |
610 } | 597 } |
611 | 598 |
612 StyleDifference RenderStyle::repaintOnlyDiff(const RenderStyle* other, unsigned&
changedContextSensitiveProperties) const | 599 StyleDifference RenderStyle::repaintOnlyDiff(const RenderStyle* other, unsigned&
changedContextSensitiveProperties) const |
613 { | 600 { |
614 if (position() != StaticPosition && (m_box->zIndex() != other->m_box->zIndex
() || m_box->hasAutoZIndex() != other->m_box->hasAutoZIndex() | 601 if (position() != StaticPosition && (m_box->zIndex() != other->m_box->zIndex
() || m_box->hasAutoZIndex() != other->m_box->hasAutoZIndex() |
615 || visual->clip != other->visual->clip || visual->hasClip != other->visu
al->hasClip)) | 602 || visual->clip != other->visual->clip || visual->hasClip != other->visu
al->hasClip)) |
616 return StyleDifferenceRepaintLayer; | 603 return StyleDifferenceRepaintLayer; |
617 | 604 |
618 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (rareNonInheritedData
->m_effectiveBlendMode != other->rareNonInheritedData->m_effectiveBlendMode | 605 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (rareNonInheritedData
->m_effectiveBlendMode != other->rareNonInheritedData->m_effectiveBlendMode |
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1604 } | 1591 } |
1605 | 1592 |
1606 void RenderStyle::setBorderImageOutset(const BorderImageLengthBox& outset) | 1593 void RenderStyle::setBorderImageOutset(const BorderImageLengthBox& outset) |
1607 { | 1594 { |
1608 if (surround->border.m_image.outset() == outset) | 1595 if (surround->border.m_image.outset() == outset) |
1609 return; | 1596 return; |
1610 surround.access()->border.m_image.setOutset(outset); | 1597 surround.access()->border.m_image.setOutset(outset); |
1611 } | 1598 } |
1612 | 1599 |
1613 } // namespace WebCore | 1600 } // namespace WebCore |
OLD | NEW |