| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv
ed. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv
ed. |
| 6 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 6 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| 11 * version 2 of the License, or (at your option) any later version. | 11 * version 2 of the License, or (at your option) any later version. |
| 12 * | 12 * |
| 13 * This library is distributed in the hope that it will be useful, | 13 * This library is distributed in the hope that it will be useful, |
| 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 16 * Library General Public License for more details. | 16 * Library General Public License for more details. |
| 17 * | 17 * |
| 18 * You should have received a copy of the GNU Library General Public License | 18 * You should have received a copy of the GNU Library General Public License |
| 19 * along with this library; see the file COPYING.LIother.m_ If not, write to | 19 * along with this library; see the file COPYING.LIother.m_ If not, write to |
| 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 21 * Boston, MA 02110-1301, USA. | 21 * Boston, MA 02110-1301, USA. |
| 22 * | 22 * |
| 23 */ | 23 */ |
| 24 | 24 |
| 25 #ifndef FontDescription_h | 25 #ifndef FontDescription_h |
| 26 #define FontDescription_h | 26 #define FontDescription_h |
| 27 | 27 |
| 28 #include "SkFontStyle.h" | 28 #include "SkFontStyle.h" |
| 29 #include "platform/FontFamilyNames.h" | 29 #include "platform/FontFamilyNames.h" |
| 30 #include "platform/LayoutLocale.h" |
| 30 #include "platform/fonts/FontCacheKey.h" | 31 #include "platform/fonts/FontCacheKey.h" |
| 31 #include "platform/fonts/FontFamily.h" | 32 #include "platform/fonts/FontFamily.h" |
| 32 #include "platform/fonts/FontFeatureSettings.h" | 33 #include "platform/fonts/FontFeatureSettings.h" |
| 33 #include "platform/fonts/FontOrientation.h" | 34 #include "platform/fonts/FontOrientation.h" |
| 34 #include "platform/fonts/FontSmoothingMode.h" | 35 #include "platform/fonts/FontSmoothingMode.h" |
| 35 #include "platform/fonts/FontTraits.h" | 36 #include "platform/fonts/FontTraits.h" |
| 36 #include "platform/fonts/FontVariantNumeric.h" | 37 #include "platform/fonts/FontVariantNumeric.h" |
| 37 #include "platform/fonts/FontWidthVariant.h" | 38 #include "platform/fonts/FontWidthVariant.h" |
| 38 #include "platform/fonts/TextRenderingMode.h" | 39 #include "platform/fonts/TextRenderingMode.h" |
| 39 #include "platform/fonts/TypesettingFeatures.h" | 40 #include "platform/fonts/TypesettingFeatures.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 m_fields.m_stretch = FontStretchNormal; | 84 m_fields.m_stretch = FontStretchNormal; |
| 84 m_fields.m_genericFamily = NoFamily; | 85 m_fields.m_genericFamily = NoFamily; |
| 85 m_fields.m_kerning = AutoKerning; | 86 m_fields.m_kerning = AutoKerning; |
| 86 m_fields.m_commonLigaturesState = NormalLigaturesState; | 87 m_fields.m_commonLigaturesState = NormalLigaturesState; |
| 87 m_fields.m_discretionaryLigaturesState = NormalLigaturesState; | 88 m_fields.m_discretionaryLigaturesState = NormalLigaturesState; |
| 88 m_fields.m_historicalLigaturesState = NormalLigaturesState; | 89 m_fields.m_historicalLigaturesState = NormalLigaturesState; |
| 89 m_fields.m_contextualLigaturesState = NormalLigaturesState; | 90 m_fields.m_contextualLigaturesState = NormalLigaturesState; |
| 90 m_fields.m_keywordSize = 0; | 91 m_fields.m_keywordSize = 0; |
| 91 m_fields.m_fontSmoothing = AutoSmoothing; | 92 m_fields.m_fontSmoothing = AutoSmoothing; |
| 92 m_fields.m_textRendering = AutoTextRendering; | 93 m_fields.m_textRendering = AutoTextRendering; |
| 93 m_fields.m_script = USCRIPT_COMMON; | |
| 94 m_fields.m_syntheticBold = false; | 94 m_fields.m_syntheticBold = false; |
| 95 m_fields.m_syntheticItalic = false; | 95 m_fields.m_syntheticItalic = false; |
| 96 m_fields.m_subpixelTextPosition = s_useSubpixelTextPositioning; | 96 m_fields.m_subpixelTextPosition = s_useSubpixelTextPositioning; |
| 97 m_fields.m_typesettingFeatures = s_defaultTypesettingFeatures; | 97 m_fields.m_typesettingFeatures = s_defaultTypesettingFeatures; |
| 98 m_fields.m_variantNumeric = FontVariantNumeric().m_fieldsAsUnsigned; | 98 m_fields.m_variantNumeric = FontVariantNumeric().m_fieldsAsUnsigned; |
| 99 } | 99 } |
| 100 | 100 |
| 101 bool operator==(const FontDescription&) const; | 101 bool operator==(const FontDescription&) const; |
| 102 bool operator!=(const FontDescription& other) const { return !(*this == othe
r); } | 102 bool operator!=(const FontDescription& other) const { return !(*this == othe
r); } |
| 103 | 103 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 Kerning getKerning() const { return static_cast<Kerning>(m_fields.m_kerning)
; } | 171 Kerning getKerning() const { return static_cast<Kerning>(m_fields.m_kerning)
; } |
| 172 VariantLigatures getVariantLigatures() const; | 172 VariantLigatures getVariantLigatures() const; |
| 173 FontVariantNumeric variantNumeric() const { return FontVariantNumeric::init
ializeFromUnsigned(m_fields.m_variantNumeric); }; | 173 FontVariantNumeric variantNumeric() const { return FontVariantNumeric::init
ializeFromUnsigned(m_fields.m_variantNumeric); }; |
| 174 LigaturesState commonLigaturesState() const { return static_cast<LigaturesSt
ate>(m_fields.m_commonLigaturesState); } | 174 LigaturesState commonLigaturesState() const { return static_cast<LigaturesSt
ate>(m_fields.m_commonLigaturesState); } |
| 175 LigaturesState discretionaryLigaturesState() const { return static_cast<Liga
turesState>(m_fields.m_discretionaryLigaturesState); } | 175 LigaturesState discretionaryLigaturesState() const { return static_cast<Liga
turesState>(m_fields.m_discretionaryLigaturesState); } |
| 176 LigaturesState historicalLigaturesState() const { return static_cast<Ligatur
esState>(m_fields.m_historicalLigaturesState); } | 176 LigaturesState historicalLigaturesState() const { return static_cast<Ligatur
esState>(m_fields.m_historicalLigaturesState); } |
| 177 LigaturesState contextualLigaturesState() const { return static_cast<Ligatur
esState>(m_fields.m_contextualLigaturesState); } | 177 LigaturesState contextualLigaturesState() const { return static_cast<Ligatur
esState>(m_fields.m_contextualLigaturesState); } |
| 178 unsigned keywordSize() const { return m_fields.m_keywordSize; } | 178 unsigned keywordSize() const { return m_fields.m_keywordSize; } |
| 179 FontSmoothingMode fontSmoothing() const { return static_cast<FontSmoothingMo
de>(m_fields.m_fontSmoothing); } | 179 FontSmoothingMode fontSmoothing() const { return static_cast<FontSmoothingMo
de>(m_fields.m_fontSmoothing); } |
| 180 TextRenderingMode textRendering() const { return static_cast<TextRenderingMo
de>(m_fields.m_textRendering); } | 180 TextRenderingMode textRendering() const { return static_cast<TextRenderingMo
de>(m_fields.m_textRendering); } |
| 181 UScriptCode script() const { return static_cast<UScriptCode>(m_fields.m_scri
pt); } | 181 const LayoutLocale* locale() const { return m_locale.get(); } |
| 182 const AtomicString& locale(bool includeDefault = true) const; | 182 const LayoutLocale& localeOrDefault() const { return LayoutLocale::valueOrDe
fault(m_locale.get()); } |
| 183 UScriptCode script() const { return localeOrDefault().script(); } |
| 183 bool isSyntheticBold() const { return m_fields.m_syntheticBold; } | 184 bool isSyntheticBold() const { return m_fields.m_syntheticBold; } |
| 184 bool isSyntheticItalic() const { return m_fields.m_syntheticItalic; } | 185 bool isSyntheticItalic() const { return m_fields.m_syntheticItalic; } |
| 185 bool useSubpixelPositioning() const { return m_fields.m_subpixelTextPosition
; } | 186 bool useSubpixelPositioning() const { return m_fields.m_subpixelTextPosition
; } |
| 186 | 187 |
| 187 FontTraits traits() const; | 188 FontTraits traits() const; |
| 188 float wordSpacing() const { return m_wordSpacing; } | 189 float wordSpacing() const { return m_wordSpacing; } |
| 189 float letterSpacing() const { return m_letterSpacing; } | 190 float letterSpacing() const { return m_letterSpacing; } |
| 190 FontOrientation orientation() const { return static_cast<FontOrientation>(m_
fields.m_orientation); } | 191 FontOrientation orientation() const { return static_cast<FontOrientation>(m_
fields.m_orientation); } |
| 191 bool isVerticalAnyUpright() const { return blink::isVerticalAnyUpright(orien
tation()); } | 192 bool isVerticalAnyUpright() const { return blink::isVerticalAnyUpright(orien
tation()); } |
| 192 bool isVerticalNonCJKUpright() const { return blink::isVerticalNonCJKUpright
(orientation()); } | 193 bool isVerticalNonCJKUpright() const { return blink::isVerticalNonCJKUpright
(orientation()); } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 210 void setIsAbsoluteSize(bool s) { m_fields.m_isAbsoluteSize = s; } | 211 void setIsAbsoluteSize(bool s) { m_fields.m_isAbsoluteSize = s; } |
| 211 void setWeight(FontWeight w) { m_fields.m_weight = w; } | 212 void setWeight(FontWeight w) { m_fields.m_weight = w; } |
| 212 void setStretch(FontStretch s) { m_fields.m_stretch = s; } | 213 void setStretch(FontStretch s) { m_fields.m_stretch = s; } |
| 213 void setGenericFamily(GenericFamilyType genericFamily) { m_fields.m_genericF
amily = genericFamily; } | 214 void setGenericFamily(GenericFamilyType genericFamily) { m_fields.m_genericF
amily = genericFamily; } |
| 214 void setKerning(Kerning kerning) { m_fields.m_kerning = kerning; updateTypes
ettingFeatures(); } | 215 void setKerning(Kerning kerning) { m_fields.m_kerning = kerning; updateTypes
ettingFeatures(); } |
| 215 void setKeywordSize(unsigned s) { m_fields.m_keywordSize = s; } | 216 void setKeywordSize(unsigned s) { m_fields.m_keywordSize = s; } |
| 216 void setFontSmoothing(FontSmoothingMode smoothing) { m_fields.m_fontSmoothin
g = smoothing; } | 217 void setFontSmoothing(FontSmoothingMode smoothing) { m_fields.m_fontSmoothin
g = smoothing; } |
| 217 void setTextRendering(TextRenderingMode rendering) { m_fields.m_textRenderin
g = rendering; updateTypesettingFeatures(); } | 218 void setTextRendering(TextRenderingMode rendering) { m_fields.m_textRenderin
g = rendering; updateTypesettingFeatures(); } |
| 218 void setOrientation(FontOrientation orientation) { m_fields.m_orientation =
static_cast<unsigned>(orientation); } | 219 void setOrientation(FontOrientation orientation) { m_fields.m_orientation =
static_cast<unsigned>(orientation); } |
| 219 void setWidthVariant(FontWidthVariant widthVariant) { m_fields.m_widthVarian
t = widthVariant; } | 220 void setWidthVariant(FontWidthVariant widthVariant) { m_fields.m_widthVarian
t = widthVariant; } |
| 220 void setLocale(const AtomicString& locale) | 221 void setLocale(PassRefPtr<const LayoutLocale> locale) { m_locale = locale; } |
| 221 { | |
| 222 m_locale = locale; | |
| 223 m_fields.m_script = localeToScriptCodeForFontSelection(locale); | |
| 224 } | |
| 225 void setSyntheticBold(bool syntheticBold) { m_fields.m_syntheticBold = synth
eticBold; } | 222 void setSyntheticBold(bool syntheticBold) { m_fields.m_syntheticBold = synth
eticBold; } |
| 226 void setSyntheticItalic(bool syntheticItalic) { m_fields.m_syntheticItalic =
syntheticItalic; } | 223 void setSyntheticItalic(bool syntheticItalic) { m_fields.m_syntheticItalic =
syntheticItalic; } |
| 227 void setFeatureSettings(PassRefPtr<FontFeatureSettings> settings) { m_featur
eSettings = settings; } | 224 void setFeatureSettings(PassRefPtr<FontFeatureSettings> settings) { m_featur
eSettings = settings; } |
| 228 void setTraits(FontTraits); | 225 void setTraits(FontTraits); |
| 229 void setWordSpacing(float s) { m_wordSpacing = s; } | 226 void setWordSpacing(float s) { m_wordSpacing = s; } |
| 230 void setLetterSpacing(float s) { m_letterSpacing = s; updateTypesettingFeatu
res(); } | 227 void setLetterSpacing(float s) { m_letterSpacing = s; updateTypesettingFeatu
res(); } |
| 231 | 228 |
| 232 TypesettingFeatures getTypesettingFeatures() const { return static_cast<Type
settingFeatures>(m_fields.m_typesettingFeatures); } | 229 TypesettingFeatures getTypesettingFeatures() const { return static_cast<Type
settingFeatures>(m_fields.m_typesettingFeatures); } |
| 233 | 230 |
| 234 static void setSubpixelPositioning(bool b) { s_useSubpixelTextPositioning =
b; } | 231 static void setSubpixelPositioning(bool b) { s_useSubpixelTextPositioning =
b; } |
| 235 static bool subpixelPositioning() { return s_useSubpixelTextPositioning; } | 232 static bool subpixelPositioning() { return s_useSubpixelTextPositioning; } |
| 236 | 233 |
| 237 static void setDefaultTypesettingFeatures(TypesettingFeatures); | 234 static void setDefaultTypesettingFeatures(TypesettingFeatures); |
| 238 static TypesettingFeatures defaultTypesettingFeatures(); | 235 static TypesettingFeatures defaultTypesettingFeatures(); |
| 239 | 236 |
| 240 unsigned styleHashWithoutFamilyList() const; | 237 unsigned styleHashWithoutFamilyList() const; |
| 241 // TODO(drott): We should not expose internal structure here, but rather int
roduce | 238 // TODO(drott): We should not expose internal structure here, but rather int
roduce |
| 242 // a hash function here. | 239 // a hash function here. |
| 243 unsigned bitmapFields() const { return m_fieldsAsUnsigned.parts[0]; } | 240 unsigned bitmapFields() const { return m_fieldsAsUnsigned.parts[0]; } |
| 244 unsigned auxiliaryBitmapFields() const { return m_fieldsAsUnsigned.parts[1];
} | 241 unsigned auxiliaryBitmapFields() const { return m_fieldsAsUnsigned.parts[1];
} |
| 245 | 242 |
| 246 SkFontStyle skiaFontStyle() const; | 243 SkFontStyle skiaFontStyle() const; |
| 247 | 244 |
| 248 private: | 245 private: |
| 249 FontFamily m_familyList; // The list of font families to be used. | 246 FontFamily m_familyList; // The list of font families to be used. |
| 250 RefPtr<FontFeatureSettings> m_featureSettings; | 247 RefPtr<FontFeatureSettings> m_featureSettings; |
| 251 AtomicString m_locale; | 248 RefPtr<const LayoutLocale> m_locale; |
| 252 | 249 |
| 253 void updateTypesettingFeatures(); | 250 void updateTypesettingFeatures(); |
| 254 | 251 |
| 255 float m_specifiedSize; // Specified CSS value. Independent of rendering is
sues such as integer | 252 float m_specifiedSize; // Specified CSS value. Independent of rendering is
sues such as integer |
| 256 // rounding, minimum font sizes, and zooming. | 253 // rounding, minimum font sizes, and zooming. |
| 257 float m_computedSize; // Computed size adjusted for the minimum font size
and the zoom factor. | 254 float m_computedSize; // Computed size adjusted for the minimum font size
and the zoom factor. |
| 258 | 255 |
| 259 // (Given aspect value / aspect value of a font family) * specifiedSize. | 256 // (Given aspect value / aspect value of a font family) * specifiedSize. |
| 260 // This value is adjusted for the minimum font size and the zoom factor | 257 // This value is adjusted for the minimum font size and the zoom factor |
| 261 // as well as a computed size is. | 258 // as well as a computed size is. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 287 unsigned m_discretionaryLigaturesState : 2; | 284 unsigned m_discretionaryLigaturesState : 2; |
| 288 unsigned m_historicalLigaturesState : 2; | 285 unsigned m_historicalLigaturesState : 2; |
| 289 unsigned m_contextualLigaturesState : 2; | 286 unsigned m_contextualLigaturesState : 2; |
| 290 | 287 |
| 291 unsigned m_keywordSize : 4; // We cache whether or not a font is current
ly represented by a CSS keyword (e.g., medium). If so, | 288 unsigned m_keywordSize : 4; // We cache whether or not a font is current
ly represented by a CSS keyword (e.g., medium). If so, |
| 292 // then we can accurately translate across different generic families to
adjust for different preference settings | 289 // then we can accurately translate across different generic families to
adjust for different preference settings |
| 293 // (e.g., 13px monospace vs. 16px everything else). Sizes are 1-8 (like
the HTML size values for <font>). | 290 // (e.g., 13px monospace vs. 16px everything else). Sizes are 1-8 (like
the HTML size values for <font>). |
| 294 | 291 |
| 295 unsigned m_fontSmoothing : 2; // FontSmoothingMode | 292 unsigned m_fontSmoothing : 2; // FontSmoothingMode |
| 296 unsigned m_textRendering : 2; // TextRenderingMode | 293 unsigned m_textRendering : 2; // TextRenderingMode |
| 297 unsigned m_script : 7; // Used to help choose an appropriate font for ge
neric font families. | |
| 298 unsigned m_syntheticBold : 1; | 294 unsigned m_syntheticBold : 1; |
| 299 unsigned m_syntheticItalic : 1; | 295 unsigned m_syntheticItalic : 1; |
| 300 unsigned m_subpixelTextPosition : 1; | 296 unsigned m_subpixelTextPosition : 1; |
| 301 unsigned m_typesettingFeatures : 3; | 297 unsigned m_typesettingFeatures : 3; |
| 302 unsigned m_variantNumeric : 8; | 298 unsigned m_variantNumeric : 8; |
| 303 }; | 299 }; |
| 304 | 300 |
| 305 static_assert(sizeof(BitFields) == sizeof(FieldsAsUnsignedType), | 301 static_assert(sizeof(BitFields) == sizeof(FieldsAsUnsignedType), |
| 306 "Mapped bitfield datatypes must have identical size."); | 302 "Mapped bitfield datatypes must have identical size."); |
| 307 union { | 303 union { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 325 && m_letterSpacing == other.m_letterSpacing | 321 && m_letterSpacing == other.m_letterSpacing |
| 326 && m_wordSpacing == other.m_wordSpacing | 322 && m_wordSpacing == other.m_wordSpacing |
| 327 && m_fieldsAsUnsigned.parts[0] == other.m_fieldsAsUnsigned.parts[0] | 323 && m_fieldsAsUnsigned.parts[0] == other.m_fieldsAsUnsigned.parts[0] |
| 328 && m_fieldsAsUnsigned.parts[1] == other.m_fieldsAsUnsigned.parts[1] | 324 && m_fieldsAsUnsigned.parts[1] == other.m_fieldsAsUnsigned.parts[1] |
| 329 && (m_featureSettings == other.m_featureSettings || (m_featureSettings &
& other.m_featureSettings && *m_featureSettings == *other.m_featureSettings)); | 325 && (m_featureSettings == other.m_featureSettings || (m_featureSettings &
& other.m_featureSettings && *m_featureSettings == *other.m_featureSettings)); |
| 330 } | 326 } |
| 331 | 327 |
| 332 } // namespace blink | 328 } // namespace blink |
| 333 | 329 |
| 334 #endif | 330 #endif |
| OLD | NEW |