1 /* 2 * Copyright (C) 2000 Lars Knoll (knoll (at) kde.org) 3 * (C) 2000 Antti Koivisto (koivisto (at) kde.org) 4 * (C) 2000 Dirk Mueller (mueller (at) kde.org) 5 * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2006 Graham Dennis (graham.dennis (at) gmail.com) 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Library General Public 10 * License as published by the Free Software Foundation; either 11 * version 2 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Library General Public License for more details. 17 * 18 * You should have received a copy of the GNU Library General Public License 19 * along with this library; see the file COPYING.LIB. If not, write to 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 * Boston, MA 02110-1301, USA. 22 * 23 */ 24 25 #ifndef CollapsedBorderValue_h 26 #define CollapsedBorderValue_h 27 28 #include "core/rendering/style/BorderValue.h" 29 30 namespace WebCore { 31 32 class CollapsedBorderValue { 33 public: 34 CollapsedBorderValue() 35 : m_color(0) 36 , m_colorIsValid(false) 37 , m_width(0) 38 , m_style(BNONE) 39 , m_precedence(BOFF) 40 , m_transparent(false) 41 { 42 } 43 44 CollapsedBorderValue(const BorderValue& border, const Color& color, EBorderPrecedence precedence) 45 : m_color(color.rgb()) 46 , m_colorIsValid(color.isValid()) 47 , m_width(border.nonZero() ? border.width() : 0) 48 , m_style(border.style()) 49 , m_precedence(precedence) 50 , m_transparent(border.isTransparent()) 51 { 52 } 53 54 unsigned width() const { return m_style > BHIDDEN ? m_width : 0; } 55 EBorderStyle style() const { return static_cast<EBorderStyle>(m_style); } 56 bool exists() const { return m_precedence != BOFF; } 57 Color color() const { return Color(m_color, m_colorIsValid); } 58 bool isTransparent() const { return m_transparent; } 59 EBorderPrecedence precedence() const { return static_cast<EBorderPrecedence>(m_precedence); } 60 61 bool isSameIgnoringColor(const CollapsedBorderValue& o) const 62 { 63 return width() == o.width() && style() == o.style() && precedence() == o.precedence(); 64 } 65 66 private: 67 RGBA32 m_color; 68 unsigned m_colorIsValid : 1; 69 unsigned m_width : 23; 70 unsigned m_style : 4; // EBorderStyle 71 unsigned m_precedence : 3; // EBorderPrecedence 72 unsigned m_transparent : 1; 73 }; 74 75 } // namespace WebCore 76 77 #endif // CollapsedBorderValue_h 78