Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: third_party/WebKit/Source/core/style/ComputedStyle.h

Issue 2861773004: Move border-*-width out of BorderValue and store on SurroundData in ComputedStyle instead (Closed)
Patch Set: Change border-*-width from a float to unsigned Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 void SetStyleType(PseudoId style_type) { SetStyleTypeInternal(style_type); } 287 void SetStyleType(PseudoId style_type) { SetStyleTypeInternal(style_type); }
288 288
289 ComputedStyle* GetCachedPseudoStyle(PseudoId) const; 289 ComputedStyle* GetCachedPseudoStyle(PseudoId) const;
290 ComputedStyle* AddCachedPseudoStyle(PassRefPtr<ComputedStyle>); 290 ComputedStyle* AddCachedPseudoStyle(PassRefPtr<ComputedStyle>);
291 void RemoveCachedPseudoStyle(PseudoId); 291 void RemoveCachedPseudoStyle(PseudoId);
292 292
293 const PseudoStyleCache* CachedPseudoStyles() const { 293 const PseudoStyleCache* CachedPseudoStyles() const {
294 return cached_pseudo_styles_.get(); 294 return cached_pseudo_styles_.get();
295 } 295 }
296 296
297 bool BorderWidthEquals(float border_width_first,
298 float border_width_second) const {
299 return WidthToFixedPoint(border_width_first) ==
300 WidthToFixedPoint(border_width_second);
301 }
302
297 /** 303 /**
298 * ComputedStyle properties 304 * ComputedStyle properties
299 * 305 *
300 * Each property stored in ComputedStyle is made up of fields. Fields have 306 * Each property stored in ComputedStyle is made up of fields. Fields have
301 * initial value functions, getters and setters. A field is preferably a 307 * initial value functions, getters and setters. A field is preferably a
302 * basic data type or enum, but can be any type. A set of fields should be 308 * basic data type or enum, but can be any type. A set of fields should be
303 * preceded by the property the field is stored for. 309 * preceded by the property the field is stored for.
304 * 310 *
305 * Field method naming should be done like so: 311 * Field method naming should be done like so:
306 * // name-of-property 312 * // name-of-property
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 const BorderImageLengthBox& BorderImageOutset() const { 501 const BorderImageLengthBox& BorderImageOutset() const {
496 return surround_data_->border_.GetImage().Outset(); 502 return surround_data_->border_.GetImage().Outset();
497 } 503 }
498 void SetBorderImageOutset(const BorderImageLengthBox&); 504 void SetBorderImageOutset(const BorderImageLengthBox&);
499 505
500 // Border width properties. 506 // Border width properties.
501 static float InitialBorderWidth() { return 3; } 507 static float InitialBorderWidth() { return 3; }
502 508
503 // border-top-width 509 // border-top-width
504 float BorderTopWidth() const { 510 float BorderTopWidth() const {
505 return surround_data_->border_.BorderTopWidth(); 511 if (surround_data_->border_.top_.Style() == kBorderStyleNone ||
512 surround_data_->border_.top_.Style() == kBorderStyleHidden)
513 return 0;
514 return static_cast<float>(BorderTopWidthInternal()) /
515 kBorderWidthDenominator;
506 } 516 }
507 void SetBorderTopWidth(float v) { 517 void SetBorderTopWidth(float v) {
508 SET_BORDER_WIDTH(surround_data_, border_.top_, v); 518 surround_data_.Access()->border_top_width_ = WidthToFixedPoint(v);
509 } 519 }
510 520
511 // border-bottom-width 521 // border-bottom-width
512 float BorderBottomWidth() const { 522 float BorderBottomWidth() const {
513 return surround_data_->border_.BorderBottomWidth(); 523 if (surround_data_->border_.bottom_.Style() == kBorderStyleNone ||
524 surround_data_->border_.bottom_.Style() == kBorderStyleHidden)
525 return 0;
526 return static_cast<float>(BorderBottomWidthInternal()) /
527 kBorderWidthDenominator;
514 } 528 }
515 void SetBorderBottomWidth(float v) { 529 void SetBorderBottomWidth(float v) {
516 SET_BORDER_WIDTH(surround_data_, border_.bottom_, v); 530 surround_data_.Access()->border_bottom_width_ = WidthToFixedPoint(v);
517 } 531 }
518 532
519 // border-left-width 533 // border-left-width
520 float BorderLeftWidth() const { 534 float BorderLeftWidth() const {
521 return surround_data_->border_.BorderLeftWidth(); 535 if (surround_data_->border_.left_.Style() == kBorderStyleNone ||
536 surround_data_->border_.left_.Style() == kBorderStyleHidden)
537 return 0;
538 return static_cast<float>(BorderLeftWidthInternal()) /
539 kBorderWidthDenominator;
522 } 540 }
523 void SetBorderLeftWidth(float v) { 541 void SetBorderLeftWidth(float v) {
524 SET_BORDER_WIDTH(surround_data_, border_.left_, v); 542 surround_data_.Access()->border_left_width_ = WidthToFixedPoint(v);
525 } 543 }
526 544
527 // border-right-width 545 // border-right-width
528 float BorderRightWidth() const { 546 float BorderRightWidth() const {
529 return surround_data_->border_.BorderRightWidth(); 547 if (surround_data_->border_.right_.Style() == kBorderStyleNone ||
548 surround_data_->border_.right_.Style() == kBorderStyleHidden)
549 return 0;
550 return static_cast<float>(BorderRightWidthInternal()) /
shend 2017/05/07 23:08:31 The fixed point stuff feels like it should be a cl
nainar 2017/05/08 00:59:57 Yes. Added a todo here on me to take a look at thi
551 kBorderWidthDenominator;
530 } 552 }
531 void SetBorderRightWidth(float v) { 553 void SetBorderRightWidth(float v) {
532 SET_BORDER_WIDTH(surround_data_, border_.right_, v); 554 surround_data_.Access()->border_right_width_ = WidthToFixedPoint(v);
533 } 555 }
534 556
535 // Border style properties. 557 // Border style properties.
536 static EBorderStyle InitialBorderStyle() { return kBorderStyleNone; } 558 static EBorderStyle InitialBorderStyle() { return kBorderStyleNone; }
537 559
538 // border-top-style 560 // border-top-style
539 EBorderStyle BorderTopStyle() const { 561 EBorderStyle BorderTopStyle() const {
540 return surround_data_->border_.Top().Style(); 562 return surround_data_->border_.Top().Style();
541 } 563 }
542 void SetBorderTopStyle(EBorderStyle v) { 564 void SetBorderTopStyle(EBorderStyle v) {
(...skipping 2303 matching lines...) Expand 10 before | Expand all | Expand 10 after
2846 return BorderImage().HasImage() && BorderImage().Outset().NonZero(); 2868 return BorderImage().HasImage() && BorderImage().Outset().NonZero();
2847 } 2869 }
2848 LayoutRectOutsets BorderImageOutsets() const { 2870 LayoutRectOutsets BorderImageOutsets() const {
2849 return ImageOutsets(BorderImage()); 2871 return ImageOutsets(BorderImage());
2850 } 2872 }
2851 bool BorderImageSlicesFill() const { return Border().GetImage().Fill(); } 2873 bool BorderImageSlicesFill() const { return Border().GetImage().Fill(); }
2852 2874
2853 void SetBorderImageSlicesFill(bool); 2875 void SetBorderImageSlicesFill(bool);
2854 const BorderData& Border() const { return surround_data_->border_; } 2876 const BorderData& Border() const { return surround_data_->border_; }
2855 const BorderValue& BorderLeft() const { 2877 const BorderValue& BorderLeft() const {
2856 return surround_data_->border_.Left(); 2878 BorderValue* border_value =
shend 2017/05/07 23:08:30 Have we measured the perf impact of this dynamic a
nainar 2017/05/08 00:59:57 Done.
2879 new BorderValue(surround_data_->border_.Left(), BorderLeftWidth());
2880 return *border_value;
2857 } 2881 }
2858 const BorderValue& BorderRight() const { 2882 const BorderValue& BorderRight() const {
2859 return surround_data_->border_.Right(); 2883 BorderValue* border_value =
2884 new BorderValue(surround_data_->border_.Right(), BorderRightWidth());
2885 return *border_value;
2860 } 2886 }
2861 const BorderValue& BorderTop() const { return surround_data_->border_.Top(); } 2887 const BorderValue& BorderTop() const {
2888 BorderValue* border_value =
2889 new BorderValue(surround_data_->border_.Top(), BorderTopWidth());
2890 return *border_value;
2891 }
2862 const BorderValue& BorderBottom() const { 2892 const BorderValue& BorderBottom() const {
2863 return surround_data_->border_.Bottom(); 2893 BorderValue* border_value =
2894 new BorderValue(surround_data_->border_.Bottom(), BorderBottomWidth());
2895 return *border_value;
2896 }
2897 bool BorderSizeEquals(const ComputedStyle& o) const {
2898 return BorderWidthEquals(BorderLeftWidth(), o.BorderLeftWidth()) &&
2899 BorderWidthEquals(BorderTopWidth(), o.BorderTopWidth()) &&
2900 BorderWidthEquals(BorderRightWidth(), o.BorderRightWidth()) &&
2901 BorderWidthEquals(BorderBottomWidth(), o.BorderBottomWidth());
2864 } 2902 }
2865 const BorderValue& BorderBefore() const; 2903 const BorderValue& BorderBefore() const;
2866 const BorderValue& BorderAfter() const; 2904 const BorderValue& BorderAfter() const;
2867 const BorderValue& BorderStart() const; 2905 const BorderValue& BorderStart() const;
2868 const BorderValue& BorderEnd() const; 2906 const BorderValue& BorderEnd() const;
2869 float BorderAfterWidth() const; 2907 float BorderAfterWidth() const;
2870 float BorderBeforeWidth() const; 2908 float BorderBeforeWidth() const;
2871 float BorderEndWidth() const; 2909 float BorderEndWidth() const;
2872 float BorderStartWidth() const; 2910 float BorderStartWidth() const;
2873 float BorderOverWidth() const; 2911 float BorderOverWidth() const;
2874 float BorderUnderWidth() const; 2912 float BorderUnderWidth() const;
2875 2913
2876 bool HasBorderFill() const { return Border().HasBorderFill(); } 2914 bool HasBorderFill() const { return Border().HasBorderFill(); }
2877 bool HasBorder() const { return Border().HasBorder(); } 2915 bool HasBorder() const {
2916 return Border().HasBorder() || BorderLeftWidth() || BorderRightWidth() ||
2917 BorderTopWidth() || BorderBottomWidth();
2918 }
2878 bool HasBorderDecoration() const { return HasBorder() || HasBorderFill(); } 2919 bool HasBorderDecoration() const { return HasBorder() || HasBorderFill(); }
2879 bool HasBorderRadius() const { 2920 bool HasBorderRadius() const {
2880 if (!BorderTopLeftRadius().Width().IsZero()) 2921 if (!BorderTopLeftRadius().Width().IsZero())
2881 return true; 2922 return true;
2882 if (!BorderTopRightRadius().Width().IsZero()) 2923 if (!BorderTopRightRadius().Width().IsZero())
2883 return true; 2924 return true;
2884 if (!BorderBottomLeftRadius().Width().IsZero()) 2925 if (!BorderBottomLeftRadius().Width().IsZero())
2885 return true; 2926 return true;
2886 if (!BorderBottomRightRadius().Width().IsZero()) 2927 if (!BorderBottomRightRadius().Width().IsZero())
2887 return true; 2928 return true;
(...skipping 15 matching lines...) Expand all
2903 ResetBorderTop(); 2944 ResetBorderTop();
2904 ResetBorderRight(); 2945 ResetBorderRight();
2905 ResetBorderBottom(); 2946 ResetBorderBottom();
2906 ResetBorderLeft(); 2947 ResetBorderLeft();
2907 ResetBorderTopLeftRadius(); 2948 ResetBorderTopLeftRadius();
2908 ResetBorderTopRightRadius(); 2949 ResetBorderTopRightRadius();
2909 ResetBorderBottomLeftRadius(); 2950 ResetBorderBottomLeftRadius();
2910 ResetBorderBottomRightRadius(); 2951 ResetBorderBottomRightRadius();
2911 } 2952 }
2912 void ResetBorderTop() { 2953 void ResetBorderTop() {
2913 SET_VAR(surround_data_, border_.top_, BorderValue()); 2954 SET_VAR(surround_data_, border_.top_, BorderColorAndStyle());
nainar 2017/05/05 07:16:50 hmm on second thought this should probably also re
shend 2017/05/07 23:08:31 Hmm, good question. I would do it here, since Bord
nainar 2017/05/08 00:59:57 Yup. Agreed. Done.
2914 } 2955 }
2915 void ResetBorderRight() { 2956 void ResetBorderRight() {
2916 SET_VAR(surround_data_, border_.right_, BorderValue()); 2957 SET_VAR(surround_data_, border_.right_, BorderColorAndStyle());
2917 } 2958 }
2918 void ResetBorderBottom() { 2959 void ResetBorderBottom() {
2919 SET_VAR(surround_data_, border_.bottom_, BorderValue()); 2960 SET_VAR(surround_data_, border_.bottom_, BorderColorAndStyle());
2920 } 2961 }
2921 void ResetBorderLeft() { 2962 void ResetBorderLeft() {
2922 SET_VAR(surround_data_, border_.left_, BorderValue()); 2963 SET_VAR(surround_data_, border_.left_, BorderColorAndStyle());
2923 } 2964 }
2924 void ResetBorderImage() { 2965 void ResetBorderImage() {
2925 SET_VAR(surround_data_, border_.image_, NinePieceImage()); 2966 SET_VAR(surround_data_, border_.image_, NinePieceImage());
2926 } 2967 }
2927 2968
2928 void SetBorderRadius(const LengthSize& s) { 2969 void SetBorderRadius(const LengthSize& s) {
2929 SetBorderTopLeftRadius(s); 2970 SetBorderTopLeftRadius(s);
2930 SetBorderTopRightRadius(s); 2971 SetBorderTopRightRadius(s);
2931 SetBorderBottomLeftRadius(s); 2972 SetBorderBottomLeftRadius(s);
2932 SetBorderBottomRightRadius(s); 2973 SetBorderBottomRightRadius(s);
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after
3684 PseudoBitsInternal() | 1 << (pseudo - kFirstPublicPseudoId))); 3725 PseudoBitsInternal() | 1 << (pseudo - kFirstPublicPseudoId)));
3685 } 3726 }
3686 3727
3687 inline bool ComputedStyle::HasPseudoElementStyle() const { 3728 inline bool ComputedStyle::HasPseudoElementStyle() const {
3688 return PseudoBitsInternal() & kElementPseudoIdMask; 3729 return PseudoBitsInternal() & kElementPseudoIdMask;
3689 } 3730 }
3690 3731
3691 } // namespace blink 3732 } // namespace blink
3692 3733
3693 #endif // ComputedStyle_h 3734 #endif // ComputedStyle_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698