#ifndef FontDescription_h
#define FontDescription_h
#include "FontFamily.h"
#include "FontRenderingMode.h"
#include "FontTraitsMask.h"
namespace WebCore {
enum FontWeight {
FontWeight100,
FontWeight200,
FontWeight300,
FontWeight400,
FontWeight500,
FontWeight600,
FontWeight700,
FontWeight800,
FontWeight900,
FontWeightNormal = FontWeight400,
FontWeightBold = FontWeight700
};
class FontDescription {
public:
enum GenericFamilyType { NoFamily, StandardFamily, SerifFamily, SansSerifFamily,
MonospaceFamily, CursiveFamily, FantasyFamily };
FontDescription()
: m_specifiedSize(0)
, m_computedSize(0)
, m_italic(false)
, m_smallCaps(false)
, m_isAbsoluteSize(false)
, m_weight(FontWeightNormal)
, m_genericFamily(NoFamily)
, m_usePrinterFont(false)
, m_renderingMode(NormalRenderingMode)
, m_keywordSize(0)
{
}
bool operator==(const FontDescription&) const;
bool operator!=(const FontDescription& other) const { return !(*this == other); }
const FontFamily& family() const { return m_familyList; }
FontFamily& firstFamily() { return m_familyList; }
float specifiedSize() const { return m_specifiedSize; }
float computedSize() const { return m_computedSize; }
bool italic() const { return m_italic; }
int computedPixelSize() const { return int(m_computedSize + 0.5f); }
bool smallCaps() const { return m_smallCaps; }
bool isAbsoluteSize() const { return m_isAbsoluteSize; }
FontWeight weight() const { return static_cast<FontWeight>(m_weight); }
FontWeight lighterWeight() const;
FontWeight bolderWeight() const;
GenericFamilyType genericFamily() const { return static_cast<GenericFamilyType>(m_genericFamily); }
bool usePrinterFont() const { return m_usePrinterFont; }
FontRenderingMode renderingMode() const { return static_cast<FontRenderingMode>(m_renderingMode); }
unsigned keywordSize() const { return m_keywordSize; }
FontTraitsMask traitsMask() const;
void setFamily(const FontFamily& family) { m_familyList = family; }
void setComputedSize(float s) { m_computedSize = s; }
void setSpecifiedSize(float s) { m_specifiedSize = s; }
void setItalic(bool i) { m_italic = i; }
void setSmallCaps(bool c) { m_smallCaps = c; }
void setIsAbsoluteSize(bool s) { m_isAbsoluteSize = s; }
void setWeight(FontWeight w) { m_weight = w; }
void setGenericFamily(GenericFamilyType genericFamily) { m_genericFamily = genericFamily; }
void setUsePrinterFont(bool p) { m_usePrinterFont = p; }
void setRenderingMode(FontRenderingMode mode) { m_renderingMode = mode; }
void setKeywordSize(unsigned s) { m_keywordSize = s; }
private:
FontFamily m_familyList;
float m_specifiedSize; float m_computedSize;
bool m_italic : 1;
bool m_smallCaps : 1;
bool m_isAbsoluteSize : 1; unsigned m_weight : 8; unsigned m_genericFamily : 3; bool m_usePrinterFont : 1;
unsigned m_renderingMode : 1;
unsigned m_keywordSize : 4; };
inline bool FontDescription::operator==(const FontDescription& other) const
{
return m_familyList == other.m_familyList
&& m_specifiedSize == other.m_specifiedSize
&& m_computedSize == other.m_computedSize
&& m_italic == other.m_italic
&& m_smallCaps == other.m_smallCaps
&& m_isAbsoluteSize == other.m_isAbsoluteSize
&& m_weight == other.m_weight
&& m_genericFamily == other.m_genericFamily
&& m_usePrinterFont == other.m_usePrinterFont
&& m_renderingMode == other.m_renderingMode
&& m_keywordSize == other.m_keywordSize;
}
}
#endif