CollapsedBorderValue.h [plain text]
#pragma once
#include "BorderValue.h"
#include "LayoutUnit.h"
namespace WebCore {
class CollapsedBorderValue {
public:
CollapsedBorderValue()
: m_style(BNONE)
, m_precedence(BOFF)
, m_transparent(false)
{
}
CollapsedBorderValue(const BorderValue& border, const Color& color, EBorderPrecedence precedence)
: m_width(LayoutUnit(border.nonZero() ? border.width() : 0))
, m_color(color)
, m_style(border.style())
, m_precedence(precedence)
, m_transparent(border.isTransparent())
{
}
LayoutUnit width() const { return m_style > BHIDDEN ? m_width : LayoutUnit::fromPixel(0); }
EBorderStyle style() const { return static_cast<EBorderStyle>(m_style); }
bool exists() const { return m_precedence != BOFF; }
const Color& color() const { return m_color; }
bool isTransparent() const { return m_transparent; }
EBorderPrecedence precedence() const { return static_cast<EBorderPrecedence>(m_precedence); }
bool isSameIgnoringColor(const CollapsedBorderValue& o) const
{
return width() == o.width() && style() == o.style() && precedence() == o.precedence();
}
static LayoutUnit adjustedCollapsedBorderWidth(float borderWidth, float deviceScaleFactor, bool roundUp);
private:
LayoutUnit m_width;
Color m_color;
unsigned m_style : 4; unsigned m_precedence : 3; unsigned m_transparent : 1;
};
inline LayoutUnit CollapsedBorderValue::adjustedCollapsedBorderWidth(float borderWidth, float deviceScaleFactor, bool roundUp)
{
float halfCollapsedBorderWidth = (borderWidth + (roundUp ? (1 / deviceScaleFactor) : 0)) / 2;
return floorToDevicePixel(halfCollapsedBorderWidth, deviceScaleFactor);
}
}