| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
| 4 * Copyright (C) 2013 Google Inc. All rights reserved. | 4 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 ~FontDescriptionChangeScope() | 53 ~FontDescriptionChangeScope() |
| 54 { | 54 { |
| 55 m_fontBuilder->didChangeFontParameters(m_fontBuilder->m_style->setFontDe
scription(m_fontDescription)); | 55 m_fontBuilder->didChangeFontParameters(m_fontBuilder->m_style->setFontDe
scription(m_fontDescription)); |
| 56 } | 56 } |
| 57 | 57 |
| 58 private: | 58 private: |
| 59 RawPtrWillBeMember<FontBuilder> m_fontBuilder; | 59 RawPtrWillBeMember<FontBuilder> m_fontBuilder; |
| 60 FontDescription m_fontDescription; | 60 FontDescription m_fontDescription; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 FontBuilder::FontBuilder() | 63 FontBuilder::FontBuilder(const Document& document) |
| 64 : m_document(nullptr) | 64 : m_document(document) |
| 65 , m_style(0) | 65 , m_style(nullptr) |
| 66 , m_fontDirty(false) | 66 , m_fontDirty(false) |
| 67 { | 67 { |
| 68 } | |
| 69 | |
| 70 void FontBuilder::initForStyleResolve(const Document& document, RenderStyle* sty
le) | |
| 71 { | |
| 72 ASSERT(document.frame()); | 68 ASSERT(document.frame()); |
| 73 m_document = &document; | |
| 74 m_style = style; | |
| 75 m_fontDirty = false; | |
| 76 } | 69 } |
| 77 | 70 |
| 78 void FontBuilder::setInitial(float effectiveZoom) | 71 void FontBuilder::setInitial(float effectiveZoom) |
| 79 { | 72 { |
| 80 ASSERT(m_document && m_document->settings()); | 73 ASSERT(m_document.settings()); |
| 81 if (!m_document || !m_document->settings()) | 74 if (!m_document.settings()) |
| 82 return; | 75 return; |
| 83 | 76 |
| 84 FontDescriptionChangeScope scope(this); | 77 FontDescriptionChangeScope scope(this); |
| 85 | 78 |
| 86 scope.reset(); | 79 scope.reset(); |
| 87 setFamilyDescription(scope.fontDescription(), FontBuilder::initialFamilyDesc
ription()); | 80 setFamilyDescription(scope.fontDescription(), FontBuilder::initialFamilyDesc
ription()); |
| 88 setSize(scope.fontDescription(), FontBuilder::initialSize()); | 81 setSize(scope.fontDescription(), FontBuilder::initialSize()); |
| 89 } | 82 } |
| 90 | 83 |
| 91 void FontBuilder::inheritFrom(const FontDescription& fontDescription) | 84 void FontBuilder::inheritFrom(const FontDescription& fontDescription) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 105 FontDescriptionChangeScope scope(this); | 98 FontDescriptionChangeScope scope(this); |
| 106 | 99 |
| 107 FontDescription fontDescription; | 100 FontDescription fontDescription; |
| 108 RenderTheme::theme().systemFont(valueId, fontDescription); | 101 RenderTheme::theme().systemFont(valueId, fontDescription); |
| 109 | 102 |
| 110 // Double-check and see if the theme did anything. If not, don't bother upda
ting the font. | 103 // Double-check and see if the theme did anything. If not, don't bother upda
ting the font. |
| 111 if (!fontDescription.isAbsoluteSize()) | 104 if (!fontDescription.isAbsoluteSize()) |
| 112 return; | 105 return; |
| 113 | 106 |
| 114 // Make sure the rendering mode and printer font settings are updated. | 107 // Make sure the rendering mode and printer font settings are updated. |
| 115 const Settings* settings = m_document->settings(); | 108 const Settings* settings = m_document.settings(); |
| 116 ASSERT(settings); // If we're doing style resolution, this document should a
lways be in a frame and thus have settings | 109 ASSERT(settings); // If we're doing style resolution, this document should a
lways be in a frame and thus have settings |
| 117 if (!settings) | 110 if (!settings) |
| 118 return; | 111 return; |
| 119 | 112 |
| 120 // Handle the zoom factor. | 113 // Handle the zoom factor. |
| 121 fontDescription.setComputedSize(getComputedSizeFromSpecifiedSize(fontDescrip
tion, effectiveZoom, fontDescription.specifiedSize())); | 114 fontDescription.setComputedSize(getComputedSizeFromSpecifiedSize(fontDescrip
tion, effectiveZoom, fontDescription.specifiedSize())); |
| 122 scope.set(fontDescription); | 115 scope.set(fontDescription); |
| 123 } | 116 } |
| 124 | 117 |
| 125 FontFamily FontBuilder::standardFontFamily() const | 118 FontFamily FontBuilder::standardFontFamily() const |
| 126 { | 119 { |
| 127 FontFamily family; | 120 FontFamily family; |
| 128 family.setFamily(standardFontFamilyName()); | 121 family.setFamily(standardFontFamilyName()); |
| 129 return family; | 122 return family; |
| 130 } | 123 } |
| 131 | 124 |
| 132 AtomicString FontBuilder::standardFontFamilyName() const | 125 AtomicString FontBuilder::standardFontFamilyName() const |
| 133 { | 126 { |
| 134 ASSERT(m_document); | 127 Settings* settings = m_document.settings(); |
| 135 Settings* settings = m_document->settings(); | |
| 136 if (settings) | 128 if (settings) |
| 137 return settings->genericFontFamilySettings().standard(); | 129 return settings->genericFontFamilySettings().standard(); |
| 138 return AtomicString(); | 130 return AtomicString(); |
| 139 } | 131 } |
| 140 | 132 |
| 141 AtomicString FontBuilder::genericFontFamilyName(FontDescription::GenericFamilyTy
pe genericFamily) const | 133 AtomicString FontBuilder::genericFontFamilyName(FontDescription::GenericFamilyTy
pe genericFamily) const |
| 142 { | 134 { |
| 143 switch (genericFamily) { | 135 switch (genericFamily) { |
| 144 default: | 136 default: |
| 145 ASSERT_NOT_REACHED(); | 137 ASSERT_NOT_REACHED(); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 | 250 |
| 259 if (fontDescription.keywordSize() && fontDescription.fixedPitchFontType() !=
oldFixedPitchFontType) | 251 if (fontDescription.keywordSize() && fontDescription.fixedPitchFontType() !=
oldFixedPitchFontType) |
| 260 setSize(fontDescription, FontDescription::Size(fontDescription.keywordSi
ze(), 0.0f, false)); | 252 setSize(fontDescription, FontDescription::Size(fontDescription.keywordSi
ze(), 0.0f, false)); |
| 261 } | 253 } |
| 262 | 254 |
| 263 void FontBuilder::setSize(FontDescription& fontDescription, const FontDescriptio
n::Size& size) | 255 void FontBuilder::setSize(FontDescription& fontDescription, const FontDescriptio
n::Size& size) |
| 264 { | 256 { |
| 265 float specifiedSize = size.value; | 257 float specifiedSize = size.value; |
| 266 | 258 |
| 267 if (!specifiedSize && size.keyword) | 259 if (!specifiedSize && size.keyword) |
| 268 specifiedSize = FontSize::fontSizeForKeyword(m_document, size.keyword, f
ontDescription.fixedPitchFontType()); | 260 specifiedSize = FontSize::fontSizeForKeyword(&m_document, size.keyword,
fontDescription.fixedPitchFontType()); |
| 269 | 261 |
| 270 if (specifiedSize < 0) | 262 if (specifiedSize < 0) |
| 271 return; | 263 return; |
| 272 | 264 |
| 273 // Overly large font sizes will cause crashes on some platforms (such as Win
dows). | 265 // Overly large font sizes will cause crashes on some platforms (such as Win
dows). |
| 274 // Cap font size here to make sure that doesn't happen. | 266 // Cap font size here to make sure that doesn't happen. |
| 275 specifiedSize = std::min(maximumAllowedFontSize, specifiedSize); | 267 specifiedSize = std::min(maximumAllowedFontSize, specifiedSize); |
| 276 | 268 |
| 277 fontDescription.setKeywordSize(size.keyword); | 269 fontDescription.setKeywordSize(size.keyword); |
| 278 fontDescription.setSpecifiedSize(specifiedSize); | 270 fontDescription.setSpecifiedSize(specifiedSize); |
| 279 fontDescription.setIsAbsoluteSize(size.isAbsolute); | 271 fontDescription.setIsAbsoluteSize(size.isAbsolute); |
| 280 } | 272 } |
| 281 | 273 |
| 282 float FontBuilder::getComputedSizeFromSpecifiedSize(FontDescription& fontDescrip
tion, float effectiveZoom, float specifiedSize) | 274 float FontBuilder::getComputedSizeFromSpecifiedSize(FontDescription& fontDescrip
tion, float effectiveZoom, float specifiedSize) |
| 283 { | 275 { |
| 284 float zoomFactor = effectiveZoom; | 276 float zoomFactor = effectiveZoom; |
| 285 // FIXME: Why is this here!!!!?! | 277 // FIXME: Why is this here!!!!?! |
| 286 if (LocalFrame* frame = m_document->frame()) | 278 if (LocalFrame* frame = m_document.frame()) |
| 287 zoomFactor *= frame->textZoomFactor(); | 279 zoomFactor *= frame->textZoomFactor(); |
| 288 | 280 |
| 289 return FontSize::getComputedSizeFromSpecifiedSize(m_document, zoomFactor, fo
ntDescription.isAbsoluteSize(), specifiedSize); | 281 return FontSize::getComputedSizeFromSpecifiedSize(&m_document, zoomFactor, f
ontDescription.isAbsoluteSize(), specifiedSize); |
| 290 } | 282 } |
| 291 | 283 |
| 292 static void getFontAndGlyphOrientation(const RenderStyle* style, FontOrientation
& fontOrientation, NonCJKGlyphOrientation& glyphOrientation) | 284 static void getFontAndGlyphOrientation(const RenderStyle* style, FontOrientation
& fontOrientation, NonCJKGlyphOrientation& glyphOrientation) |
| 293 { | 285 { |
| 294 if (style->isHorizontalWritingMode()) { | 286 if (style->isHorizontalWritingMode()) { |
| 295 fontOrientation = Horizontal; | 287 fontOrientation = Horizontal; |
| 296 glyphOrientation = NonCJKGlyphOrientationVerticalRight; | 288 glyphOrientation = NonCJKGlyphOrientationVerticalRight; |
| 297 return; | 289 return; |
| 298 } | 290 } |
| 299 | 291 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 if (scope.fontDescription().genericFamily() != FontDescription::MonospaceFam
ily | 350 if (scope.fontDescription().genericFamily() != FontDescription::MonospaceFam
ily |
| 359 && parentFontDescription.genericFamily() != FontDescription::MonospaceFa
mily) | 351 && parentFontDescription.genericFamily() != FontDescription::MonospaceFa
mily) |
| 360 return; | 352 return; |
| 361 | 353 |
| 362 // We know the parent is monospace or the child is monospace, and that font | 354 // We know the parent is monospace or the child is monospace, and that font |
| 363 // size was unspecified. We want to scale our font size as appropriate. | 355 // size was unspecified. We want to scale our font size as appropriate. |
| 364 // If the font uses a keyword size, then we refetch from the table rather th
an | 356 // If the font uses a keyword size, then we refetch from the table rather th
an |
| 365 // multiplying by our scale factor. | 357 // multiplying by our scale factor. |
| 366 float size; | 358 float size; |
| 367 if (scope.fontDescription().keywordSize()) { | 359 if (scope.fontDescription().keywordSize()) { |
| 368 size = FontSize::fontSizeForKeyword(m_document, scope.fontDescription().
keywordSize(), scope.fontDescription().fixedPitchFontType()); | 360 size = FontSize::fontSizeForKeyword(&m_document, scope.fontDescription()
.keywordSize(), scope.fontDescription().fixedPitchFontType()); |
| 369 } else { | 361 } else { |
| 370 Settings* settings = m_document->settings(); | 362 Settings* settings = m_document.settings(); |
| 371 float fixedScaleFactor = (settings && settings->defaultFixedFontSize() &
& settings->defaultFontSize()) | 363 float fixedScaleFactor = (settings && settings->defaultFixedFontSize() &
& settings->defaultFontSize()) |
| 372 ? static_cast<float>(settings->defaultFixedFontSize()) / settings->d
efaultFontSize() | 364 ? static_cast<float>(settings->defaultFixedFontSize()) / settings->d
efaultFontSize() |
| 373 : 1; | 365 : 1; |
| 374 size = parentFontDescription.fixedPitchFontType() == FixedPitchFont ? | 366 size = parentFontDescription.fixedPitchFontType() == FixedPitchFont ? |
| 375 scope.fontDescription().specifiedSize() / fixedScaleFactor : | 367 scope.fontDescription().specifiedSize() / fixedScaleFactor : |
| 376 scope.fontDescription().specifiedSize() * fixedScaleFactor; | 368 scope.fontDescription().specifiedSize() * fixedScaleFactor; |
| 377 } | 369 } |
| 378 | 370 |
| 379 scope.fontDescription().setSpecifiedSize(size); | 371 scope.fontDescription().setSpecifiedSize(size); |
| 380 updateComputedSize(scope.fontDescription(), style); | 372 updateComputedSize(scope.fontDescription(), style); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 FontOrientation fontOrientation; | 413 FontOrientation fontOrientation; |
| 422 NonCJKGlyphOrientation glyphOrientation; | 414 NonCJKGlyphOrientation glyphOrientation; |
| 423 getFontAndGlyphOrientation(documentStyle, fontOrientation, glyphOrientation)
; | 415 getFontAndGlyphOrientation(documentStyle, fontOrientation, glyphOrientation)
; |
| 424 fontDescription.setOrientation(fontOrientation); | 416 fontDescription.setOrientation(fontOrientation); |
| 425 fontDescription.setNonCJKGlyphOrientation(glyphOrientation); | 417 fontDescription.setNonCJKGlyphOrientation(glyphOrientation); |
| 426 documentStyle->setFontDescription(fontDescription); | 418 documentStyle->setFontDescription(fontDescription); |
| 427 documentStyle->font().update(fontSelector); | 419 documentStyle->font().update(fontSelector); |
| 428 } | 420 } |
| 429 | 421 |
| 430 } | 422 } |
| OLD | NEW |