1 /* 2 * Copyright (c) 2006, 2007, 2008, Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef FontPlatformDataHarfBuzz_h 32 #define FontPlatformDataHarfBuzz_h 33 34 #include "SkPaint.h" 35 #include "platform/SharedBuffer.h" 36 #include "platform/fonts/FontDescription.h" 37 #include "platform/fonts/FontOrientation.h" 38 #include "platform/fonts/FontRenderStyle.h" 39 #include "platform/fonts/opentype/OpenTypeVerticalData.h" 40 #include "wtf/Forward.h" 41 #include "wtf/HashTableDeletedValueType.h" 42 #include "wtf/RefPtr.h" 43 #include "wtf/text/CString.h" 44 #include "wtf/text/StringImpl.h" 45 46 class SkTypeface; 47 typedef uint32_t SkFontID; 48 49 namespace WebCore { 50 51 class GraphicsContext; 52 class HarfBuzzFace; 53 54 class PLATFORM_EXPORT FontPlatformData { 55 public: 56 // Used for deleted values in the font cache's hash tables. The hash table 57 // will create us with this structure, and it will compare other values 58 // to this "Deleted" one. It expects the Deleted one to be differentiable 59 // from the 0 one (created with the empty constructor), so we can't just 60 // set everything to 0. 61 FontPlatformData(WTF::HashTableDeletedValueType); 62 FontPlatformData(); 63 FontPlatformData(float textSize, bool syntheticBold, bool syntheticItalic); 64 FontPlatformData(const FontPlatformData&); 65 FontPlatformData(PassRefPtr<SkTypeface>, const char* name, float textSize, bool syntheticBold, bool syntheticItalic, FontOrientation = Horizontal, bool subpixelTextPosition = defaultUseSubpixelPositioning()); 66 FontPlatformData(const FontPlatformData& src, float textSize); 67 ~FontPlatformData(); 68 69 String fontFamilyName() const; size()70 float size() const { return m_textSize; } 71 bool isFixedPitch() const; 72 typeface()73 SkTypeface* typeface() const { return m_typeface.get(); } 74 HarfBuzzFace* harfBuzzFace() const; 75 SkFontID uniqueID() const; 76 unsigned hash() const; 77 orientation()78 FontOrientation orientation() const { return m_orientation; } setOrientation(FontOrientation orientation)79 void setOrientation(FontOrientation orientation) { m_orientation = orientation; } setSyntheticBold(bool syntheticBold)80 void setSyntheticBold(bool syntheticBold) { m_syntheticBold = syntheticBold; } setSyntheticItalic(bool syntheticItalic)81 void setSyntheticItalic(bool syntheticItalic) { m_syntheticItalic = syntheticItalic; } 82 bool operator==(const FontPlatformData&) const; 83 FontPlatformData& operator=(const FontPlatformData&); isHashTableDeletedValue()84 bool isHashTableDeletedValue() const { return m_isHashTableDeletedValue; } 85 #if OS(WIN) setMinSizeForAntiAlias(unsigned size)86 void setMinSizeForAntiAlias(unsigned size) { m_minSizeForAntiAlias = size; } minSizeForAntiAlias()87 unsigned minSizeForAntiAlias() const { return m_minSizeForAntiAlias; } setHinting(SkPaint::Hinting style)88 void setHinting(SkPaint::Hinting style) 89 { 90 m_style.useAutoHint = 0; 91 m_style.hintStyle = style; 92 } 93 #endif 94 95 #if ENABLE(OPENTYPE_VERTICAL) 96 PassRefPtr<OpenTypeVerticalData> verticalData() const; 97 PassRefPtr<SharedBuffer> openTypeTable(uint32_t table) const; 98 #endif 99 100 #ifndef NDEBUG 101 String description() const; 102 #endif 103 104 // The returned styles are all actual styles without FontRenderStyle::NoPreference. fontRenderStyle()105 const FontRenderStyle& fontRenderStyle() const { return m_style; } 106 void setupPaint(SkPaint*, GraphicsContext* = 0) const; 107 108 #if OS(WIN) paintTextFlags()109 int paintTextFlags() const { return m_paintTextFlags; } 110 #else 111 static void setHinting(SkPaint::Hinting); 112 static void setAutoHint(bool); 113 static void setUseBitmaps(bool); 114 static void setAntiAlias(bool); 115 static void setSubpixelRendering(bool); 116 #endif 117 118 private: 119 bool static defaultUseSubpixelPositioning(); 120 void querySystemForRenderStyle(bool useSkiaSubpixelPositioning); 121 122 RefPtr<SkTypeface> m_typeface; 123 #if !OS(WIN) 124 CString m_family; 125 #endif 126 float m_textSize; 127 bool m_syntheticBold; 128 bool m_syntheticItalic; 129 FontOrientation m_orientation; 130 FontRenderStyle m_style; 131 mutable RefPtr<HarfBuzzFace> m_harfBuzzFace; 132 bool m_isHashTableDeletedValue; 133 #if OS(WIN) 134 int m_paintTextFlags; 135 bool m_useSubpixelPositioning; 136 unsigned m_minSizeForAntiAlias; 137 #endif 138 }; 139 140 } // namespace WebCore 141 142 #endif // ifdef FontPlatformDataHarfBuzz_h 143