• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "config.h"
6 #include "core/rendering/style/BorderEdge.h"
7 
8 namespace blink {
9 
BorderEdge(int edgeWidth,const Color & edgeColor,EBorderStyle edgeStyle,bool edgeIsTransparent,bool edgeIsPresent)10 BorderEdge::BorderEdge(int edgeWidth, const Color& edgeColor, EBorderStyle edgeStyle, bool edgeIsTransparent, bool edgeIsPresent)
11     : width(edgeWidth)
12     , color(edgeColor)
13     , isTransparent(edgeIsTransparent)
14     , isPresent(edgeIsPresent)
15     , style(edgeStyle)
16 {
17     if (style == DOUBLE && edgeWidth < 3)
18         style = SOLID;
19 }
20 
BorderEdge()21 BorderEdge::BorderEdge()
22     : width(0)
23     , isTransparent(false)
24     , isPresent(false)
25     , style(BHIDDEN)
26 {
27 }
28 
hasVisibleColorAndStyle() const29 bool BorderEdge::hasVisibleColorAndStyle() const
30 {
31     return style > BHIDDEN && !isTransparent;
32 }
33 
shouldRender() const34 bool BorderEdge::shouldRender() const { return isPresent && width && hasVisibleColorAndStyle(); }
presentButInvisible() const35 bool BorderEdge::presentButInvisible() const { return usedWidth() && !hasVisibleColorAndStyle(); }
obscuresBackgroundEdge(float scale) const36 bool BorderEdge::obscuresBackgroundEdge(float scale) const
37 {
38     if (!isPresent || isTransparent || (width * scale) < 2 || color.hasAlpha() || style == BHIDDEN)
39         return false;
40 
41     if (style == DOTTED || style == DASHED)
42         return false;
43 
44     if (style == DOUBLE)
45         return width >= 5 * scale; // The outer band needs to be >= 2px wide at unit scale.
46 
47     return true;
48 }
obscuresBackground() const49 bool BorderEdge::obscuresBackground() const
50 {
51     if (!isPresent || isTransparent || color.hasAlpha() || style == BHIDDEN)
52         return false;
53 
54     if (style == DOTTED || style == DASHED || style == DOUBLE)
55         return false;
56 
57     return true;
58 }
59 
usedWidth() const60 int BorderEdge::usedWidth() const
61 {
62     return isPresent ? width : 0;
63 }
64 
getDoubleBorderStripeWidths(int & outerWidth,int & innerWidth) const65 void BorderEdge::getDoubleBorderStripeWidths(int& outerWidth, int& innerWidth) const
66 {
67     int fullWidth = usedWidth();
68     outerWidth = fullWidth / 3;
69     innerWidth = fullWidth * 2 / 3;
70 
71     // We need certain integer rounding results
72     if (fullWidth % 3 == 2)
73         outerWidth += 1;
74 
75     if (fullWidth % 3 == 1)
76         innerWidth += 1;
77 }
78 
sharesColorWith(const BorderEdge & other) const79 bool BorderEdge::sharesColorWith(const BorderEdge& other) const
80 {
81     return color == other.color;
82 }
83 
84 } // namespace blink
85