Chromium Code Reviews| Index: third_party/WebKit/Source/core/style/BorderValue.h |
| diff --git a/third_party/WebKit/Source/core/style/BorderValue.h b/third_party/WebKit/Source/core/style/BorderValue.h |
| index 9c97bfcda155c9b0726d7f34fd3fa0df352cf24d..7260183a0572b3b42283310620ff357fab6507e8 100644 |
| --- a/third_party/WebKit/Source/core/style/BorderValue.h |
| +++ b/third_party/WebKit/Source/core/style/BorderValue.h |
| @@ -32,6 +32,10 @@ |
| namespace blink { |
| +static const int kBorderWidthFractionalBits = 6; |
|
pdr.
2017/01/27 20:28:44
Can you add a comment above here describing the fi
|
| +static const int kBorderWidthDenominator = 1 << kBorderWidthFractionalBits; |
| +static const int kMaxForBorderWidth = ((1 << 26) - 1) / kBorderWidthDenominator; |
| + |
|
pdr.
2017/01/27 20:28:44
Could you add a short unittest for the new fixed p
|
| class BorderValue { |
| DISALLOW_NEW(); |
| friend class ComputedStyle; |
| @@ -40,9 +44,10 @@ class BorderValue { |
| BorderValue() |
| : m_color(0), |
| m_colorIsCurrentColor(true), |
| - m_width(3), |
| m_style(BorderStyleNone), |
| - m_isAuto(OutlineIsAutoOff) {} |
| + m_isAuto(OutlineIsAutoOff) { |
| + setWidth(3); |
| + } |
| bool nonZero() const { return width() && (m_style != BorderStyleNone); } |
| @@ -78,16 +83,27 @@ class BorderValue { |
| : StyleColor(m_color); |
| } |
| - int width() const { return m_width; } |
| + float width() const { |
| + return static_cast<float>(m_width) / kBorderWidthDenominator; |
| + } |
| + void setWidth(float width) { m_width = widthToFixedPoint(width); } |
| + bool widthEquals(float width) const { |
|
pdr.
2017/01/27 20:28:44
Is this used over checking width() to avoid the pe
Karl Øygard
2017/01/28 16:46:27
We have to do this, since width now loses precisio
|
| + return widthToFixedPoint(width) == m_width; |
| + } |
| EBorderStyle style() const { return static_cast<EBorderStyle>(m_style); } |
| void setStyle(EBorderStyle style) { m_style = style; } |
| protected: |
| + static unsigned widthToFixedPoint(float width) { |
| + return static_cast<unsigned>(std::min<float>(width, kMaxForBorderWidth) * |
|
pdr.
2017/01/27 20:28:44
Is this safe when width is negative? Could you add
Karl Øygard
2017/02/10 12:53:18
Done.
|
| + kBorderWidthDenominator); |
| + } |
| + |
| Color m_color; |
| unsigned m_colorIsCurrentColor : 1; |
| - unsigned m_width : 26; |
| + unsigned m_width : 26; // Fixed point width |
|
pdr.
2017/01/27 20:28:44
WDYT of using a typedef to make this a little more
Karl Øygard
2017/02/10 12:53:18
I agree and tried, but the check-webkit-style pres
|
| unsigned m_style : 4; // EBorderStyle |
| // This is only used by OutlineValue but moved here to keep the bits packed. |