#ifndef FontPlatformDataHarfBuzz_h
#define FontPlatformDataHarfBuzz_h
#include "SkPaint.h"
#include "platform/SharedBuffer.h"
#include "platform/fonts/FontDescription.h"
#include "platform/fonts/FontOrientation.h"
#include "platform/fonts/FontRenderStyle.h"
#include "platform/fonts/opentype/OpenTypeVerticalData.h"
#include "wtf/Forward.h"
#include "wtf/HashTableDeletedValueType.h"
#include "wtf/RefPtr.h"
#include "wtf/text/CString.h"
#include "wtf/text/StringImpl.h"
class SkTypeface;
typedef uint32_t SkFontID;
namespace WebCore {
class GraphicsContext;
class HarfBuzzFace;
class PLATFORM_EXPORT FontPlatformData {
public:
FontPlatformData(WTF::HashTableDeletedValueType);
FontPlatformData();
FontPlatformData(float textSize, bool syntheticBold, bool syntheticItalic);
FontPlatformData(const FontPlatformData&);
FontPlatformData(PassRefPtr<SkTypeface>, const char* name, float textSize, bool syntheticBold, bool syntheticItalic, FontOrientation = Horizontal, bool subpixelTextPosition = defaultUseSubpixelPositioning());
FontPlatformData(const FontPlatformData& src, float textSize);
~FontPlatformData();
String fontFamilyName() const;
float size() const { return m_textSize; }
bool isFixedPitch() const;
SkTypeface* typeface() const { return m_typeface.get(); }
HarfBuzzFace* harfBuzzFace() const;
SkFontID uniqueID() const;
unsigned hash() const;
FontOrientation orientation() const { return m_orientation; }
void setOrientation(FontOrientation orientation) { m_orientation = orientation; }
void setSyntheticBold(bool syntheticBold) { m_syntheticBold = syntheticBold; }
void setSyntheticItalic(bool syntheticItalic) { m_syntheticItalic = syntheticItalic; }
bool operator==(const FontPlatformData&) const;
FontPlatformData& operator=(const FontPlatformData&);
bool isHashTableDeletedValue() const { return m_isHashTableDeletedValue; }
#if OS(WIN)
void setMinSizeForAntiAlias(unsigned size) { m_minSizeForAntiAlias = size; }
unsigned minSizeForAntiAlias() const { return m_minSizeForAntiAlias; }
void setHinting(SkPaint::Hinting style)
{
m_style.useAutoHint = 0;
m_style.hintStyle = style;
}
#endif
#if ENABLE(OPENTYPE_VERTICAL)
PassRefPtr<OpenTypeVerticalData> verticalData() const;
PassRefPtr<SharedBuffer> openTypeTable(uint32_t table) const;
#endif
#ifndef NDEBUG
String description() const;
#endif
const FontRenderStyle& fontRenderStyle() const { return m_style; }
void setupPaint(SkPaint*, GraphicsContext* = 0) const;
#if OS(WIN)
int paintTextFlags() const { return m_paintTextFlags; }
#else
static void setHinting(SkPaint::Hinting);
static void setAutoHint(bool);
static void setUseBitmaps(bool);
static void setAntiAlias(bool);
static void setSubpixelRendering(bool);
#endif
private:
bool static defaultUseSubpixelPositioning();
#if !OS(WIN)
void getRenderStyleForStrike(const char*, int);
void querySystemForRenderStyle(bool useSkiaSubpixelPositioning);
#endif
RefPtr<SkTypeface> m_typeface;
#if !OS(WIN)
CString m_family;
#endif
float m_textSize;
bool m_syntheticBold;
bool m_syntheticItalic;
FontOrientation m_orientation;
FontRenderStyle m_style;
mutable RefPtr<HarfBuzzFace> m_harfBuzzFace;
bool m_isHashTableDeletedValue;
#if OS(WIN)
int m_paintTextFlags;
bool m_useSubpixelPositioning;
unsigned m_minSizeForAntiAlias;
#endif
};
}
#endif