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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 struct ComputedStyleBase { | 74 struct ComputedStyleBase { |
75 void* data_refs[6]; | 75 void* data_refs[6]; |
76 unsigned bitfields_[4]; | 76 unsigned bitfields_[4]; |
77 } base_; | 77 } base_; |
78 | 78 |
79 void* data_refs[1]; | 79 void* data_refs[1]; |
80 void* own_ptrs[1]; | 80 void* own_ptrs[1]; |
81 void* data_ref_svg_style; | 81 void* data_ref_svg_style; |
82 }; | 82 }; |
83 | 83 |
84 // If this fails, the packing algorithm in make_computed_style_base.py has | |
85 // failed to produce the optimal packed size. To fix, update the algorithm to | |
86 // ensure that the buckets are placed so that each takes up at most 1 word. | |
87 ASSERT_SIZE(ComputedStyleBase<ComputedStyle>, SameSizeAsComputedStyleBase); | |
88 | |
89 // If this assert fails, it means that size of ComputedStyle has changed. Please | 84 // If this assert fails, it means that size of ComputedStyle has changed. Please |
90 // check that you really *do* what to increase the size of ComputedStyle, then | 85 // check that you really *do* what to increase the size of ComputedStyle, then |
91 // update the SameSizeAsComputedStyle struct to match the updated storage of | 86 // update the SameSizeAsComputedStyle struct to match the updated storage of |
92 // ComputedStyle. | 87 // ComputedStyle. |
93 ASSERT_SIZE(ComputedStyle, SameSizeAsComputedStyle); | 88 ASSERT_SIZE(ComputedStyle, SameSizeAsComputedStyle); |
94 | 89 |
95 RefPtr<ComputedStyle> ComputedStyle::Create() { | 90 RefPtr<ComputedStyle> ComputedStyle::Create() { |
96 return AdoptRef(new ComputedStyle(InitialStyle())); | 91 return AdoptRef(new ComputedStyle(InitialStyle())); |
97 } | 92 } |
98 | 93 |
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 // Animations don't need to be checked either. We always set the new style on | 524 // Animations don't need to be checked either. We always set the new style on |
530 // the layoutObject, so we will get a chance to fire off the resulting | 525 // the layoutObject, so we will get a chance to fire off the resulting |
531 // transition properly. | 526 // transition properly. |
532 | 527 |
533 return diff; | 528 return diff; |
534 } | 529 } |
535 | 530 |
536 bool ComputedStyle::ScrollAnchorDisablingPropertyChanged( | 531 bool ComputedStyle::ScrollAnchorDisablingPropertyChanged( |
537 const ComputedStyle& other, | 532 const ComputedStyle& other, |
538 const StyleDifference& diff) const { | 533 const StyleDifference& diff) const { |
539 if (ComputedStyleBase::ScrollAnchorDisablingPropertyChanged(other)) | 534 if (ComputedStyleBase::ScrollAnchorDisablingPropertyChanged(*this, other)) |
540 return true; | 535 return true; |
541 | 536 |
542 if (diff.TransformChanged()) | 537 if (diff.TransformChanged()) |
543 return true; | 538 return true; |
544 | 539 |
545 return false; | 540 return false; |
546 } | 541 } |
547 | 542 |
548 bool ComputedStyle::DiffNeedsFullLayoutAndPaintInvalidation( | 543 bool ComputedStyle::DiffNeedsFullLayoutAndPaintInvalidation( |
549 const ComputedStyle& other) const { | 544 const ComputedStyle& other) const { |
550 // FIXME: Not all cases in this method need both full layout and paint | 545 // FIXME: Not all cases in this method need both full layout and paint |
551 // invalidation. | 546 // invalidation. |
552 // Should move cases into DiffNeedsFullLayout() if | 547 // Should move cases into DiffNeedsFullLayout() if |
553 // - don't need paint invalidation at all; | 548 // - don't need paint invalidation at all; |
554 // - or the layoutObject knows how to exactly invalidate paints caused by the | 549 // - or the layoutObject knows how to exactly invalidate paints caused by the |
555 // layout change instead of forced full paint invalidation. | 550 // layout change instead of forced full paint invalidation. |
556 | 551 |
557 if (ComputedStyleBase::DiffNeedsFullLayoutAndPaintInvalidation(other)) | 552 if (ComputedStyleBase::DiffNeedsFullLayoutAndPaintInvalidation(*this, other)) |
558 return true; | 553 return true; |
559 | 554 |
560 if (rare_non_inherited_data_.Get() != other.rare_non_inherited_data_.Get()) { | 555 if (rare_non_inherited_data_.Get() != other.rare_non_inherited_data_.Get()) { |
561 if (rare_non_inherited_data_->appearance_ != | 556 if (rare_non_inherited_data_->appearance_ != |
562 other.rare_non_inherited_data_->appearance_ || | 557 other.rare_non_inherited_data_->appearance_ || |
563 rare_non_inherited_data_->margin_before_collapse_ != | 558 rare_non_inherited_data_->margin_before_collapse_ != |
564 other.rare_non_inherited_data_->margin_before_collapse_ || | 559 other.rare_non_inherited_data_->margin_before_collapse_ || |
565 rare_non_inherited_data_->margin_after_collapse_ != | 560 rare_non_inherited_data_->margin_after_collapse_ != |
566 other.rare_non_inherited_data_->margin_after_collapse_ || | 561 other.rare_non_inherited_data_->margin_after_collapse_ || |
567 rare_non_inherited_data_->line_clamp_ != | 562 rare_non_inherited_data_->line_clamp_ != |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 // selfNeedsSimplifiedLayout bit in order to not get confused and taint | 622 // selfNeedsSimplifiedLayout bit in order to not get confused and taint |
628 // every line). In addition we need to solve the floating object issue | 623 // every line). In addition we need to solve the floating object issue |
629 // when layers come and go. Right now a full layout is necessary to keep | 624 // when layers come and go. Right now a full layout is necessary to keep |
630 // floating object lists sane. | 625 // floating object lists sane. |
631 return true; | 626 return true; |
632 } | 627 } |
633 } | 628 } |
634 | 629 |
635 if (IsDisplayTableType(Display())) { | 630 if (IsDisplayTableType(Display())) { |
636 if (ComputedStyleBase:: | 631 if (ComputedStyleBase:: |
637 DiffNeedsFullLayoutAndPaintInvalidationDisplayTableType(other)) | 632 DiffNeedsFullLayoutAndPaintInvalidationDisplayTableType(*this, |
| 633 other)) |
638 return true; | 634 return true; |
639 | 635 |
640 // In the collapsing border model, 'hidden' suppresses other borders, while | 636 // In the collapsing border model, 'hidden' suppresses other borders, while |
641 // 'none' does not, so these style differences can be width differences. | 637 // 'none' does not, so these style differences can be width differences. |
642 if ((BorderCollapse() == EBorderCollapse::kCollapse) && | 638 if ((BorderCollapse() == EBorderCollapse::kCollapse) && |
643 ((BorderTopStyle() == EBorderStyle::kHidden && | 639 ((BorderTopStyle() == EBorderStyle::kHidden && |
644 other.BorderTopStyle() == EBorderStyle::kNone) || | 640 other.BorderTopStyle() == EBorderStyle::kNone) || |
645 (BorderTopStyle() == EBorderStyle::kNone && | 641 (BorderTopStyle() == EBorderStyle::kNone && |
646 other.BorderTopStyle() == EBorderStyle::kHidden) || | 642 other.BorderTopStyle() == EBorderStyle::kHidden) || |
647 (BorderBottomStyle() == EBorderStyle::kHidden && | 643 (BorderBottomStyle() == EBorderStyle::kHidden && |
648 other.BorderBottomStyle() == EBorderStyle::kNone) || | 644 other.BorderBottomStyle() == EBorderStyle::kNone) || |
649 (BorderBottomStyle() == EBorderStyle::kNone && | 645 (BorderBottomStyle() == EBorderStyle::kNone && |
650 other.BorderBottomStyle() == EBorderStyle::kHidden) || | 646 other.BorderBottomStyle() == EBorderStyle::kHidden) || |
651 (BorderLeftStyle() == EBorderStyle::kHidden && | 647 (BorderLeftStyle() == EBorderStyle::kHidden && |
652 other.BorderLeftStyle() == EBorderStyle::kNone) || | 648 other.BorderLeftStyle() == EBorderStyle::kNone) || |
653 (BorderLeftStyle() == EBorderStyle::kNone && | 649 (BorderLeftStyle() == EBorderStyle::kNone && |
654 other.BorderLeftStyle() == EBorderStyle::kHidden) || | 650 other.BorderLeftStyle() == EBorderStyle::kHidden) || |
655 (BorderRightStyle() == EBorderStyle::kHidden && | 651 (BorderRightStyle() == EBorderStyle::kHidden && |
656 other.BorderRightStyle() == EBorderStyle::kNone) || | 652 other.BorderRightStyle() == EBorderStyle::kNone) || |
657 (BorderRightStyle() == EBorderStyle::kNone && | 653 (BorderRightStyle() == EBorderStyle::kNone && |
658 other.BorderRightStyle() == EBorderStyle::kHidden))) | 654 other.BorderRightStyle() == EBorderStyle::kHidden))) |
659 return true; | 655 return true; |
660 } else if (Display() == EDisplay::kListItem) { | 656 } else if (Display() == EDisplay::kListItem) { |
661 if (ComputedStyleBase:: | 657 if (ComputedStyleBase:: |
662 DiffNeedsFullLayoutAndPaintInvalidationDisplayListItem(other)) | 658 DiffNeedsFullLayoutAndPaintInvalidationDisplayListItem(*this, |
| 659 other)) |
663 return true; | 660 return true; |
664 } | 661 } |
665 | 662 |
666 if ((Visibility() == EVisibility::kCollapse) != | 663 if ((Visibility() == EVisibility::kCollapse) != |
667 (other.Visibility() == EVisibility::kCollapse)) | 664 (other.Visibility() == EVisibility::kCollapse)) |
668 return true; | 665 return true; |
669 | 666 |
670 // Movement of non-static-positioned object is special cased in | 667 // Movement of non-static-positioned object is special cased in |
671 // ComputedStyle::VisualInvalidationDiff(). | 668 // ComputedStyle::VisualInvalidationDiff(). |
672 | 669 |
673 return false; | 670 return false; |
674 } | 671 } |
675 | 672 |
676 bool ComputedStyle::DiffNeedsFullLayout(const ComputedStyle& other) const { | 673 bool ComputedStyle::DiffNeedsFullLayout(const ComputedStyle& other) const { |
677 if (ComputedStyleBase::DiffNeedsFullLayout(other)) | 674 if (ComputedStyleBase::DiffNeedsFullLayout(*this, other)) |
678 return true; | 675 return true; |
679 | 676 |
680 if (box_data_.Get() != other.box_data_.Get()) { | 677 if (box_data_.Get() != other.box_data_.Get()) { |
681 if (box_data_->vertical_align_length_ != | 678 if (box_data_->vertical_align_length_ != |
682 other.box_data_->vertical_align_length_) | 679 other.box_data_->vertical_align_length_) |
683 return true; | 680 return true; |
684 } | 681 } |
685 | 682 |
686 if (VerticalAlign() != other.VerticalAlign() || | 683 if (VerticalAlign() != other.VerticalAlign() || |
687 GetPosition() != other.GetPosition()) | 684 GetPosition() != other.GetPosition()) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 rare_non_inherited_data_->mask_box_image_ != | 719 rare_non_inherited_data_->mask_box_image_ != |
723 other.rare_non_inherited_data_->mask_box_image_) | 720 other.rare_non_inherited_data_->mask_box_image_) |
724 return true; | 721 return true; |
725 } | 722 } |
726 | 723 |
727 return false; | 724 return false; |
728 } | 725 } |
729 | 726 |
730 bool ComputedStyle::DiffNeedsPaintInvalidationObject( | 727 bool ComputedStyle::DiffNeedsPaintInvalidationObject( |
731 const ComputedStyle& other) const { | 728 const ComputedStyle& other) const { |
732 if (ComputedStyleBase::DiffNeedsPaintInvalidationObject(other)) | 729 if (ComputedStyleBase::DiffNeedsPaintInvalidationObject(*this, other)) |
733 return true; | 730 return true; |
734 | 731 |
735 if (!BorderVisuallyEqual(other) || !RadiiEqual(other) || | 732 if (!BorderVisuallyEqual(other) || !RadiiEqual(other) || |
736 *background_data_ != *other.background_data_) | 733 *background_data_ != *other.background_data_) |
737 return true; | 734 return true; |
738 | 735 |
739 if (rare_non_inherited_data_.Get() != other.rare_non_inherited_data_.Get()) { | 736 if (rare_non_inherited_data_.Get() != other.rare_non_inherited_data_.Get()) { |
740 if (rare_non_inherited_data_->user_drag_ != | 737 if (rare_non_inherited_data_->user_drag_ != |
741 other.rare_non_inherited_data_->user_drag_ || | 738 other.rare_non_inherited_data_->user_drag_ || |
742 rare_non_inherited_data_->object_fit_ != | 739 rare_non_inherited_data_->object_fit_ != |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 } | 803 } |
807 | 804 |
808 return false; | 805 return false; |
809 } | 806 } |
810 | 807 |
811 // This doesn't include conditions needing layout or overflow recomputation | 808 // This doesn't include conditions needing layout or overflow recomputation |
812 // which implies visual rect update. | 809 // which implies visual rect update. |
813 bool ComputedStyle::DiffNeedsVisualRectUpdate( | 810 bool ComputedStyle::DiffNeedsVisualRectUpdate( |
814 const ComputedStyle& other) const { | 811 const ComputedStyle& other) const { |
815 // Visual rect is empty if visibility is hidden. | 812 // Visual rect is empty if visibility is hidden. |
816 if (ComputedStyleBase::DiffNeedsVisualRectUpdate(other)) | 813 if (ComputedStyleBase::DiffNeedsVisualRectUpdate(*this, other)) |
817 return true; | 814 return true; |
818 | 815 |
819 // Need to update visual rect of the resizer. | 816 // Need to update visual rect of the resizer. |
820 if (Resize() != other.Resize()) | 817 if (Resize() != other.Resize()) |
821 return true; | 818 return true; |
822 | 819 |
823 return false; | 820 return false; |
824 } | 821 } |
825 | 822 |
826 void ComputedStyle::UpdatePropertySpecificDifferences( | 823 void ComputedStyle::UpdatePropertySpecificDifferences( |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 (rare_non_inherited_data_.Get() != | 879 (rare_non_inherited_data_.Get() != |
883 other.rare_non_inherited_data_.Get() && | 880 other.rare_non_inherited_data_.Get() && |
884 (rare_non_inherited_data_->text_decoration_style_ != | 881 (rare_non_inherited_data_->text_decoration_style_ != |
885 other.rare_non_inherited_data_->text_decoration_style_ || | 882 other.rare_non_inherited_data_->text_decoration_style_ || |
886 rare_non_inherited_data_->text_decoration_color_ != | 883 rare_non_inherited_data_->text_decoration_color_ != |
887 other.rare_non_inherited_data_->text_decoration_color_ || | 884 other.rare_non_inherited_data_->text_decoration_color_ || |
888 rare_non_inherited_data_->visited_link_text_decoration_color_ != | 885 rare_non_inherited_data_->visited_link_text_decoration_color_ != |
889 other.rare_non_inherited_data_ | 886 other.rare_non_inherited_data_ |
890 ->visited_link_text_decoration_color_)) || | 887 ->visited_link_text_decoration_color_)) || |
891 ComputedStyleBase:: | 888 ComputedStyleBase:: |
892 UpdatePropertySpecificDifferencesTextDecorationOrColor(other)) { | 889 UpdatePropertySpecificDifferencesTextDecorationOrColor(*this, |
| 890 other)) { |
893 diff.SetTextDecorationOrColorChanged(); | 891 diff.SetTextDecorationOrColorChanged(); |
894 } | 892 } |
895 } | 893 } |
896 | 894 |
897 bool has_clip = HasOutOfFlowPosition() && !visual_data_->has_auto_clip_; | 895 bool has_clip = HasOutOfFlowPosition() && !visual_data_->has_auto_clip_; |
898 bool other_has_clip = | 896 bool other_has_clip = |
899 other.HasOutOfFlowPosition() && !other.visual_data_->has_auto_clip_; | 897 other.HasOutOfFlowPosition() && !other.visual_data_->has_auto_clip_; |
900 if (has_clip != other_has_clip || | 898 if (has_clip != other_has_clip || |
901 (has_clip && visual_data_->clip_ != other.visual_data_->clip_)) | 899 (has_clip && visual_data_->clip_ != other.visual_data_->clip_)) |
902 diff.SetCSSClipChanged(); | 900 diff.SetCSSClipChanged(); |
(...skipping 1450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2353 if (value < 0) | 2351 if (value < 0) |
2354 fvalue -= 0.5f; | 2352 fvalue -= 0.5f; |
2355 else | 2353 else |
2356 fvalue += 0.5f; | 2354 fvalue += 0.5f; |
2357 } | 2355 } |
2358 | 2356 |
2359 return RoundForImpreciseConversion<int>(fvalue / zoom_factor); | 2357 return RoundForImpreciseConversion<int>(fvalue / zoom_factor); |
2360 } | 2358 } |
2361 | 2359 |
2362 } // namespace blink | 2360 } // namespace blink |
OLD | NEW |