OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All | 5 * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
6 * rights reserved. | 6 * rights reserved. |
7 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 void SetStyleType(PseudoId style_type) { SetStyleTypeInternal(style_type); } | 257 void SetStyleType(PseudoId style_type) { SetStyleTypeInternal(style_type); } |
258 | 258 |
259 ComputedStyle* GetCachedPseudoStyle(PseudoId) const; | 259 ComputedStyle* GetCachedPseudoStyle(PseudoId) const; |
260 ComputedStyle* AddCachedPseudoStyle(PassRefPtr<ComputedStyle>); | 260 ComputedStyle* AddCachedPseudoStyle(PassRefPtr<ComputedStyle>); |
261 void RemoveCachedPseudoStyle(PseudoId); | 261 void RemoveCachedPseudoStyle(PseudoId); |
262 | 262 |
263 const PseudoStyleCache* CachedPseudoStyles() const { | 263 const PseudoStyleCache* CachedPseudoStyles() const { |
264 return cached_pseudo_styles_.get(); | 264 return cached_pseudo_styles_.get(); |
265 } | 265 } |
266 | 266 |
| 267 bool BorderWidthEquals(float border_width_first, |
| 268 float border_width_second) const { |
| 269 return WidthToFixedPoint(border_width_first) == |
| 270 WidthToFixedPoint(border_width_second); |
| 271 } |
| 272 |
267 /** | 273 /** |
268 * ComputedStyle properties | 274 * ComputedStyle properties |
269 * | 275 * |
270 * Each property stored in ComputedStyle is made up of fields. Fields have | 276 * Each property stored in ComputedStyle is made up of fields. Fields have |
271 * initial value functions, getters and setters. A field is preferably a | 277 * initial value functions, getters and setters. A field is preferably a |
272 * basic data type or enum, but can be any type. A set of fields should be | 278 * basic data type or enum, but can be any type. A set of fields should be |
273 * preceded by the property the field is stored for. | 279 * preceded by the property the field is stored for. |
274 * | 280 * |
275 * Field method naming should be done like so: | 281 * Field method naming should be done like so: |
276 * // name-of-property | 282 * // name-of-property |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 | 469 |
464 // border-image-outset | 470 // border-image-outset |
465 const BorderImageLengthBox& BorderImageOutset() const { | 471 const BorderImageLengthBox& BorderImageOutset() const { |
466 return surround_data_->border_.GetImage().Outset(); | 472 return surround_data_->border_.GetImage().Outset(); |
467 } | 473 } |
468 void SetBorderImageOutset(const BorderImageLengthBox&); | 474 void SetBorderImageOutset(const BorderImageLengthBox&); |
469 | 475 |
470 // Border width properties. | 476 // Border width properties. |
471 static float InitialBorderWidth() { return 3; } | 477 static float InitialBorderWidth() { return 3; } |
472 | 478 |
| 479 // TODO(nainar): Move all fixed point logic to a separate class. |
473 // border-top-width | 480 // border-top-width |
474 float BorderTopWidth() const { | 481 float BorderTopWidth() const { |
475 return surround_data_->border_.BorderTopWidth(); | 482 if (surround_data_->border_.top_.Style() == kBorderStyleNone || |
| 483 surround_data_->border_.top_.Style() == kBorderStyleHidden) |
| 484 return 0; |
| 485 return static_cast<float>(BorderTopWidthInternal()) / |
| 486 kBorderWidthDenominator; |
476 } | 487 } |
477 void SetBorderTopWidth(float v) { | 488 void SetBorderTopWidth(float v) { |
478 SET_BORDER_WIDTH(surround_data_, border_.top_, v); | 489 surround_data_.Access()->border_top_width_ = WidthToFixedPoint(v); |
479 } | 490 } |
480 | 491 |
481 // border-bottom-width | 492 // border-bottom-width |
482 float BorderBottomWidth() const { | 493 float BorderBottomWidth() const { |
483 return surround_data_->border_.BorderBottomWidth(); | 494 if (surround_data_->border_.bottom_.Style() == kBorderStyleNone || |
| 495 surround_data_->border_.bottom_.Style() == kBorderStyleHidden) |
| 496 return 0; |
| 497 return static_cast<float>(BorderBottomWidthInternal()) / |
| 498 kBorderWidthDenominator; |
484 } | 499 } |
485 void SetBorderBottomWidth(float v) { | 500 void SetBorderBottomWidth(float v) { |
486 SET_BORDER_WIDTH(surround_data_, border_.bottom_, v); | 501 surround_data_.Access()->border_bottom_width_ = WidthToFixedPoint(v); |
487 } | 502 } |
488 | 503 |
489 // border-left-width | 504 // border-left-width |
490 float BorderLeftWidth() const { | 505 float BorderLeftWidth() const { |
491 return surround_data_->border_.BorderLeftWidth(); | 506 if (surround_data_->border_.left_.Style() == kBorderStyleNone || |
| 507 surround_data_->border_.left_.Style() == kBorderStyleHidden) |
| 508 return 0; |
| 509 return static_cast<float>(BorderLeftWidthInternal()) / |
| 510 kBorderWidthDenominator; |
492 } | 511 } |
493 void SetBorderLeftWidth(float v) { | 512 void SetBorderLeftWidth(float v) { |
494 SET_BORDER_WIDTH(surround_data_, border_.left_, v); | 513 surround_data_.Access()->border_left_width_ = WidthToFixedPoint(v); |
495 } | 514 } |
496 | 515 |
497 // border-right-width | 516 // border-right-width |
498 float BorderRightWidth() const { | 517 float BorderRightWidth() const { |
499 return surround_data_->border_.BorderRightWidth(); | 518 if (surround_data_->border_.right_.Style() == kBorderStyleNone || |
| 519 surround_data_->border_.right_.Style() == kBorderStyleHidden) |
| 520 return 0; |
| 521 return static_cast<float>(BorderRightWidthInternal()) / |
| 522 kBorderWidthDenominator; |
500 } | 523 } |
501 void SetBorderRightWidth(float v) { | 524 void SetBorderRightWidth(float v) { |
502 SET_BORDER_WIDTH(surround_data_, border_.right_, v); | 525 surround_data_.Access()->border_right_width_ = WidthToFixedPoint(v); |
503 } | 526 } |
504 | 527 |
505 // Border style properties. | 528 // Border style properties. |
506 static EBorderStyle InitialBorderStyle() { return kBorderStyleNone; } | 529 static EBorderStyle InitialBorderStyle() { return kBorderStyleNone; } |
507 | 530 |
508 // border-top-style | 531 // border-top-style |
509 EBorderStyle BorderTopStyle() const { | 532 EBorderStyle BorderTopStyle() const { |
510 return surround_data_->border_.Top().Style(); | 533 return surround_data_->border_.Top().Style(); |
511 } | 534 } |
512 void SetBorderTopStyle(EBorderStyle v) { | 535 void SetBorderTopStyle(EBorderStyle v) { |
(...skipping 2302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2815 bool HasBorderImageOutsets() const { | 2838 bool HasBorderImageOutsets() const { |
2816 return BorderImage().HasImage() && BorderImage().Outset().NonZero(); | 2839 return BorderImage().HasImage() && BorderImage().Outset().NonZero(); |
2817 } | 2840 } |
2818 LayoutRectOutsets BorderImageOutsets() const { | 2841 LayoutRectOutsets BorderImageOutsets() const { |
2819 return ImageOutsets(BorderImage()); | 2842 return ImageOutsets(BorderImage()); |
2820 } | 2843 } |
2821 bool BorderImageSlicesFill() const { return Border().GetImage().Fill(); } | 2844 bool BorderImageSlicesFill() const { return Border().GetImage().Fill(); } |
2822 | 2845 |
2823 void SetBorderImageSlicesFill(bool); | 2846 void SetBorderImageSlicesFill(bool); |
2824 const BorderData& Border() const { return surround_data_->border_; } | 2847 const BorderData& Border() const { return surround_data_->border_; } |
2825 const BorderValue& BorderLeft() const { | 2848 const BorderValue BorderLeft() const { |
2826 return surround_data_->border_.Left(); | 2849 return BorderValue(surround_data_->border_.Left(), BorderLeftWidth()); |
2827 } | 2850 } |
2828 const BorderValue& BorderRight() const { | 2851 const BorderValue BorderRight() const { |
2829 return surround_data_->border_.Right(); | 2852 return BorderValue(surround_data_->border_.Right(), BorderRightWidth()); |
2830 } | 2853 } |
2831 const BorderValue& BorderTop() const { return surround_data_->border_.Top(); } | 2854 const BorderValue BorderTop() const { |
2832 const BorderValue& BorderBottom() const { | 2855 return BorderValue(surround_data_->border_.Top(), BorderTopWidth()); |
2833 return surround_data_->border_.Bottom(); | |
2834 } | 2856 } |
2835 const BorderValue& BorderBefore() const; | 2857 const BorderValue BorderBottom() const { |
2836 const BorderValue& BorderAfter() const; | 2858 return BorderValue(surround_data_->border_.Bottom(), BorderBottomWidth()); |
2837 const BorderValue& BorderStart() const; | 2859 } |
2838 const BorderValue& BorderEnd() const; | 2860 bool BorderSizeEquals(const ComputedStyle& o) const { |
| 2861 return BorderWidthEquals(BorderLeftWidth(), o.BorderLeftWidth()) && |
| 2862 BorderWidthEquals(BorderTopWidth(), o.BorderTopWidth()) && |
| 2863 BorderWidthEquals(BorderRightWidth(), o.BorderRightWidth()) && |
| 2864 BorderWidthEquals(BorderBottomWidth(), o.BorderBottomWidth()); |
| 2865 } |
| 2866 const BorderValue BorderBefore() const; |
| 2867 const BorderValue BorderAfter() const; |
| 2868 const BorderValue BorderStart() const; |
| 2869 const BorderValue BorderEnd() const; |
2839 float BorderAfterWidth() const; | 2870 float BorderAfterWidth() const; |
2840 float BorderBeforeWidth() const; | 2871 float BorderBeforeWidth() const; |
2841 float BorderEndWidth() const; | 2872 float BorderEndWidth() const; |
2842 float BorderStartWidth() const; | 2873 float BorderStartWidth() const; |
2843 float BorderOverWidth() const; | 2874 float BorderOverWidth() const; |
2844 float BorderUnderWidth() const; | 2875 float BorderUnderWidth() const; |
2845 | 2876 |
2846 bool HasBorderFill() const { return Border().HasBorderFill(); } | 2877 bool HasBorderFill() const { return Border().HasBorderFill(); } |
2847 bool HasBorder() const { return Border().HasBorder(); } | 2878 bool HasBorder() const { |
| 2879 return Border().HasBorder() || BorderLeftWidth() || BorderRightWidth() || |
| 2880 BorderTopWidth() || BorderBottomWidth(); |
| 2881 } |
2848 bool HasBorderDecoration() const { return HasBorder() || HasBorderFill(); } | 2882 bool HasBorderDecoration() const { return HasBorder() || HasBorderFill(); } |
2849 bool HasBorderRadius() const { | 2883 bool HasBorderRadius() const { |
2850 if (!BorderTopLeftRadius().Width().IsZero()) | 2884 if (!BorderTopLeftRadius().Width().IsZero()) |
2851 return true; | 2885 return true; |
2852 if (!BorderTopRightRadius().Width().IsZero()) | 2886 if (!BorderTopRightRadius().Width().IsZero()) |
2853 return true; | 2887 return true; |
2854 if (!BorderBottomLeftRadius().Width().IsZero()) | 2888 if (!BorderBottomLeftRadius().Width().IsZero()) |
2855 return true; | 2889 return true; |
2856 if (!BorderBottomRightRadius().Width().IsZero()) | 2890 if (!BorderBottomRightRadius().Width().IsZero()) |
2857 return true; | 2891 return true; |
(...skipping 15 matching lines...) Expand all Loading... |
2873 ResetBorderTop(); | 2907 ResetBorderTop(); |
2874 ResetBorderRight(); | 2908 ResetBorderRight(); |
2875 ResetBorderBottom(); | 2909 ResetBorderBottom(); |
2876 ResetBorderLeft(); | 2910 ResetBorderLeft(); |
2877 ResetBorderTopLeftRadius(); | 2911 ResetBorderTopLeftRadius(); |
2878 ResetBorderTopRightRadius(); | 2912 ResetBorderTopRightRadius(); |
2879 ResetBorderBottomLeftRadius(); | 2913 ResetBorderBottomLeftRadius(); |
2880 ResetBorderBottomRightRadius(); | 2914 ResetBorderBottomRightRadius(); |
2881 } | 2915 } |
2882 void ResetBorderTop() { | 2916 void ResetBorderTop() { |
2883 SET_VAR(surround_data_, border_.top_, BorderValue()); | 2917 SET_VAR(surround_data_, border_.top_, BorderColorAndStyle()); |
| 2918 SetBorderTopWidth(3); |
2884 } | 2919 } |
2885 void ResetBorderRight() { | 2920 void ResetBorderRight() { |
2886 SET_VAR(surround_data_, border_.right_, BorderValue()); | 2921 SET_VAR(surround_data_, border_.right_, BorderColorAndStyle()); |
| 2922 SetBorderRightWidth(3); |
2887 } | 2923 } |
2888 void ResetBorderBottom() { | 2924 void ResetBorderBottom() { |
2889 SET_VAR(surround_data_, border_.bottom_, BorderValue()); | 2925 SET_VAR(surround_data_, border_.bottom_, BorderColorAndStyle()); |
| 2926 SetBorderBottomWidth(3); |
2890 } | 2927 } |
2891 void ResetBorderLeft() { | 2928 void ResetBorderLeft() { |
2892 SET_VAR(surround_data_, border_.left_, BorderValue()); | 2929 SET_VAR(surround_data_, border_.left_, BorderColorAndStyle()); |
| 2930 SetBorderLeftWidth(3); |
2893 } | 2931 } |
2894 void ResetBorderImage() { | 2932 void ResetBorderImage() { |
2895 SET_VAR(surround_data_, border_.image_, NinePieceImage()); | 2933 SET_VAR(surround_data_, border_.image_, NinePieceImage()); |
2896 } | 2934 } |
2897 | 2935 |
2898 void SetBorderRadius(const LengthSize& s) { | 2936 void SetBorderRadius(const LengthSize& s) { |
2899 SetBorderTopLeftRadius(s); | 2937 SetBorderTopLeftRadius(s); |
2900 SetBorderTopRightRadius(s); | 2938 SetBorderTopRightRadius(s); |
2901 SetBorderBottomLeftRadius(s); | 2939 SetBorderBottomLeftRadius(s); |
2902 SetBorderBottomRightRadius(s); | 2940 SetBorderBottomRightRadius(s); |
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3654 PseudoBitsInternal() | 1 << (pseudo - kFirstPublicPseudoId))); | 3692 PseudoBitsInternal() | 1 << (pseudo - kFirstPublicPseudoId))); |
3655 } | 3693 } |
3656 | 3694 |
3657 inline bool ComputedStyle::HasPseudoElementStyle() const { | 3695 inline bool ComputedStyle::HasPseudoElementStyle() const { |
3658 return PseudoBitsInternal() & kElementPseudoIdMask; | 3696 return PseudoBitsInternal() & kElementPseudoIdMask; |
3659 } | 3697 } |
3660 | 3698 |
3661 } // namespace blink | 3699 } // namespace blink |
3662 | 3700 |
3663 #endif // ComputedStyle_h | 3701 #endif // ComputedStyle_h |
OLD | NEW |