Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(782)

Unified Diff: Source/core/platform/graphics/Font.h

Issue 99103006: Moving GraphicsContext and dependencies from core to platform. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Final patch - fixes Android Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/platform/graphics/Extensions3D.cpp ('k') | Source/core/platform/graphics/Font.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/platform/graphics/Font.h
diff --git a/Source/core/platform/graphics/Font.h b/Source/core/platform/graphics/Font.h
deleted file mode 100644
index eef57889ae41b1226add8ba6b1c16da9b48f7eaa..0000000000000000000000000000000000000000
--- a/Source/core/platform/graphics/Font.h
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
- * (C) 2000 Antti Koivisto (koivisto@kde.org)
- * (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2006, 2007, 2010, 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2008 Holger Hans Peter Freyther
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef Font_h
-#define Font_h
-
-#include "core/platform/graphics/FontFallbackList.h"
-#include "core/platform/graphics/SimpleFontData.h"
-#include "platform/fonts/FontDescription.h"
-#include "platform/fonts/TypesettingFeatures.h"
-#include "platform/text/TextDirection.h"
-#include "wtf/HashMap.h"
-#include "wtf/HashSet.h"
-#include "wtf/MathExtras.h"
-#include "wtf/unicode/CharacterNames.h"
-
-// "X11/X.h" defines Complex to 0 and conflicts
-// with Complex value in CodePath enum.
-#ifdef Complex
-#undef Complex
-#endif
-
-namespace WebCore {
-
-class FloatPoint;
-class FloatRect;
-class FontData;
-class FontMetrics;
-class FontPlatformData;
-class FontSelector;
-class GlyphBuffer;
-class GraphicsContext;
-class TextLayout;
-class TextRun;
-struct TextRunPaintInfo;
-
-struct GlyphData;
-
-struct GlyphOverflow {
- GlyphOverflow()
- : left(0)
- , right(0)
- , top(0)
- , bottom(0)
- , computeBounds(false)
- {
- }
-
- int left;
- int right;
- int top;
- int bottom;
- bool computeBounds;
-};
-
-
-class Font {
-public:
- Font();
- Font(const FontDescription&, float letterSpacing, float wordSpacing);
- // This constructor is only used if the platform wants to start with a native font.
- Font(const FontPlatformData&, bool isPrinting, FontSmoothingMode = AutoSmoothing);
- ~Font();
-
- Font(const Font&);
- Font& operator=(const Font&);
-
- bool operator==(const Font& other) const;
- bool operator!=(const Font& other) const { return !(*this == other); }
-
- const FontDescription& fontDescription() const { return m_fontDescription; }
-
- int pixelSize() const { return fontDescription().computedPixelSize(); }
- float size() const { return fontDescription().computedSize(); }
-
- void update(PassRefPtr<FontSelector>) const;
-
- enum CustomFontNotReadyAction { DoNotPaintIfFontNotReady, UseFallbackIfFontNotReady };
- void drawText(GraphicsContext*, const TextRunPaintInfo&, const FloatPoint&, CustomFontNotReadyAction = DoNotPaintIfFontNotReady) const;
- void drawEmphasisMarks(GraphicsContext*, const TextRunPaintInfo&, const AtomicString& mark, const FloatPoint&) const;
-
- float width(const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, GlyphOverflow* = 0) const;
- float width(const TextRun&, int& charsConsumed, String& glyphName) const;
-
- PassOwnPtr<TextLayout> createLayoutForMacComplexText(const TextRun&, unsigned textLength, float xPos, bool collapseWhiteSpace) const;
- static void deleteLayout(TextLayout*);
- static float width(TextLayout&, unsigned from, unsigned len, HashSet<const SimpleFontData*>* fallbackFonts = 0);
-
- int offsetForPosition(const TextRun&, float position, bool includePartialGlyphs) const;
- FloatRect selectionRectForText(const TextRun&, const FloatPoint&, int h, int from = 0, int to = -1) const;
-
- bool isSmallCaps() const { return m_fontDescription.smallCaps(); }
-
- float wordSpacing() const { return m_wordSpacing; }
- float letterSpacing() const { return m_letterSpacing; }
- void setWordSpacing(float s) { m_wordSpacing = s; }
- void setLetterSpacing(float s) { m_letterSpacing = s; }
- bool isFixedPitch() const;
- bool isPrinterFont() const { return m_fontDescription.usePrinterFont(); }
-
- TypesettingFeatures typesettingFeatures() const { return static_cast<TypesettingFeatures>(m_typesettingFeatures); }
-
- FontFamily& firstFamily() { return m_fontDescription.firstFamily(); }
- const FontFamily& family() const { return m_fontDescription.family(); }
-
- FontItalic italic() const { return m_fontDescription.italic(); }
- FontWeight weight() const { return m_fontDescription.weight(); }
- FontWidthVariant widthVariant() const { return m_fontDescription.widthVariant(); }
-
- bool isPlatformFont() const { return m_isPlatformFont; }
-
- // Metrics that we query the FontFallbackList for.
- const FontMetrics& fontMetrics() const { return primaryFont()->fontMetrics(); }
- float spaceWidth() const { return primaryFont()->spaceWidth() + m_letterSpacing; }
- float tabWidth(const SimpleFontData&, unsigned tabSize, float position) const;
- float tabWidth(unsigned tabSize, float position) const { return tabWidth(*primaryFont(), tabSize, position); }
-
- int emphasisMarkAscent(const AtomicString&) const;
- int emphasisMarkDescent(const AtomicString&) const;
- int emphasisMarkHeight(const AtomicString&) const;
-
- const SimpleFontData* primaryFont() const;
- const FontData* fontDataAt(unsigned) const;
- inline GlyphData glyphDataForCharacter(UChar32 c, bool mirror, FontDataVariant variant = AutoVariant) const
- {
- return glyphDataAndPageForCharacter(c, mirror, variant).first;
- }
-#if OS(MACOSX)
- const SimpleFontData* fontDataForCombiningCharacterSequence(const UChar*, size_t length, FontDataVariant) const;
-#endif
- std::pair<GlyphData, GlyphPage*> glyphDataAndPageForCharacter(UChar32, bool mirror, FontDataVariant = AutoVariant) const;
- bool primaryFontHasGlyphForCharacter(UChar32) const;
-
- static bool isCJKIdeograph(UChar32);
- static bool isCJKIdeographOrSymbol(UChar32);
-
- static unsigned expansionOpportunityCount(const LChar*, size_t length, TextDirection, bool& isAfterExpansion);
- static unsigned expansionOpportunityCount(const UChar*, size_t length, TextDirection, bool& isAfterExpansion);
-
- static void setShouldUseSmoothing(bool);
- static bool shouldUseSmoothing();
-
- enum CodePath { Auto, Simple, Complex, SimpleWithGlyphOverflow };
- CodePath codePath(const TextRun&) const;
- static CodePath characterRangeCodePath(const LChar*, unsigned) { return Simple; }
- static CodePath characterRangeCodePath(const UChar*, unsigned len);
-
-private:
- enum ForTextEmphasisOrNot { NotForTextEmphasis, ForTextEmphasis };
-
- // Returns the initial in-stream advance.
- float getGlyphsAndAdvancesForSimpleText(const TextRun&, int from, int to, GlyphBuffer&, ForTextEmphasisOrNot = NotForTextEmphasis) const;
- void drawSimpleText(GraphicsContext*, const TextRunPaintInfo&, const FloatPoint&) const;
- void drawEmphasisMarksForSimpleText(GraphicsContext*, const TextRunPaintInfo&, const AtomicString& mark, const FloatPoint&) const;
- void drawGlyphs(GraphicsContext*, const SimpleFontData*, const GlyphBuffer&, unsigned from, unsigned numGlyphs, const FloatPoint&, const FloatRect& textRect) const;
- void drawGlyphBuffer(GraphicsContext*, const TextRunPaintInfo&, const GlyphBuffer&, const FloatPoint&) const;
- void drawEmphasisMarks(GraphicsContext*, const TextRunPaintInfo&, const GlyphBuffer&, const AtomicString&, const FloatPoint&) const;
- float floatWidthForSimpleText(const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, GlyphOverflow* = 0) const;
- int offsetForPositionForSimpleText(const TextRun&, float position, bool includePartialGlyphs) const;
- FloatRect selectionRectForSimpleText(const TextRun&, const FloatPoint&, int h, int from, int to) const;
-
- bool getEmphasisMarkGlyphData(const AtomicString&, GlyphData&) const;
-
- static bool canReturnFallbackFontsForComplexText();
- static bool canExpandAroundIdeographsInComplexText();
-
- // Returns the initial in-stream advance.
- float getGlyphsAndAdvancesForComplexText(const TextRun&, int from, int to, GlyphBuffer&, ForTextEmphasisOrNot = NotForTextEmphasis) const;
- void drawComplexText(GraphicsContext*, const TextRunPaintInfo&, const FloatPoint&) const;
- void drawEmphasisMarksForComplexText(GraphicsContext*, const TextRunPaintInfo&, const AtomicString& mark, const FloatPoint&) const;
- float floatWidthForComplexText(const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, GlyphOverflow* = 0) const;
- int offsetForPositionForComplexText(const TextRun&, float position, bool includePartialGlyphs) const;
- FloatRect selectionRectForComplexText(const TextRun&, const FloatPoint&, int h, int from, int to) const;
-
- friend struct WidthIterator;
- friend class SVGTextRunRenderingContext;
-
-public:
- // Useful for debugging the different font rendering code paths.
- static void setCodePath(CodePath);
- static CodePath codePath();
- static CodePath s_codePath;
-
- static void setDefaultTypesettingFeatures(TypesettingFeatures);
- static TypesettingFeatures defaultTypesettingFeatures();
-
- static const uint8_t s_roundingHackCharacterTable[256];
- static bool isRoundingHackCharacter(UChar32 c)
- {
- return !(c & ~0xFF) && s_roundingHackCharacterTable[c];
- }
-
- FontSelector* fontSelector() const;
- static bool treatAsSpace(UChar c) { return c == ' ' || c == '\t' || c == '\n' || c == noBreakSpace; }
- static bool treatAsZeroWidthSpace(UChar c) { return treatAsZeroWidthSpaceInComplexScript(c) || c == 0x200c || c == 0x200d; }
- static bool treatAsZeroWidthSpaceInComplexScript(UChar c) { return c < 0x20 || (c >= 0x7F && c < 0xA0) || c == softHyphen || c == zeroWidthSpace || (c >= 0x200e && c <= 0x200f) || (c >= 0x202a && c <= 0x202e) || c == zeroWidthNoBreakSpace || c == objectReplacementCharacter; }
- static bool canReceiveTextEmphasis(UChar32 c);
-
- static inline UChar normalizeSpaces(UChar character)
- {
- if (treatAsSpace(character))
- return space;
-
- if (treatAsZeroWidthSpace(character))
- return zeroWidthSpace;
-
- return character;
- }
-
- static String normalizeSpaces(const LChar*, unsigned length);
- static String normalizeSpaces(const UChar*, unsigned length);
-
- FontFallbackList* fontList() const { return m_fontFallbackList.get(); }
-
- void willUseFontData() const;
-
-private:
- bool loadingCustomFonts() const
- {
- return m_fontFallbackList && m_fontFallbackList->loadingCustomFonts();
- }
-
- TypesettingFeatures computeTypesettingFeatures() const
- {
- TextRenderingMode textRenderingMode = m_fontDescription.textRenderingMode();
- TypesettingFeatures features = s_defaultTypesettingFeatures;
-
- switch (textRenderingMode) {
- case AutoTextRendering:
- break;
- case OptimizeSpeed:
- features &= ~(Kerning | Ligatures);
- break;
- case GeometricPrecision:
- case OptimizeLegibility:
- features |= Kerning | Ligatures;
- break;
- }
-
- switch (m_fontDescription.kerning()) {
- case FontDescription::NoneKerning:
- features &= ~Kerning;
- break;
- case FontDescription::NormalKerning:
- features |= Kerning;
- break;
- case FontDescription::AutoKerning:
- break;
- }
-
- switch (m_fontDescription.commonLigaturesState()) {
- case FontDescription::DisabledLigaturesState:
- features &= ~Ligatures;
- break;
- case FontDescription::EnabledLigaturesState:
- features |= Ligatures;
- break;
- case FontDescription::NormalLigaturesState:
- break;
- }
-
- return features;
- }
-
- static TypesettingFeatures s_defaultTypesettingFeatures;
-
- FontDescription m_fontDescription;
- mutable RefPtr<FontFallbackList> m_fontFallbackList;
- float m_letterSpacing;
- float m_wordSpacing;
- bool m_isPlatformFont;
- mutable unsigned m_typesettingFeatures : 2; // (TypesettingFeatures) Caches values computed from m_fontDescription.
-};
-
-inline Font::~Font()
-{
-}
-
-inline const SimpleFontData* Font::primaryFont() const
-{
- ASSERT(m_fontFallbackList);
- return m_fontFallbackList->primarySimpleFontData(m_fontDescription);
-}
-
-inline const FontData* Font::fontDataAt(unsigned index) const
-{
- ASSERT(m_fontFallbackList);
- return m_fontFallbackList->fontDataAt(m_fontDescription, index);
-}
-
-inline bool Font::isFixedPitch() const
-{
- ASSERT(m_fontFallbackList);
- return m_fontFallbackList->isFixedPitch(m_fontDescription);
-}
-
-inline FontSelector* Font::fontSelector() const
-{
- return m_fontFallbackList ? m_fontFallbackList->fontSelector() : 0;
-}
-
-inline float Font::tabWidth(const SimpleFontData& fontData, unsigned tabSize, float position) const
-{
- if (!tabSize)
- return letterSpacing();
- float tabWidth = tabSize * fontData.spaceWidth() + letterSpacing();
- return tabWidth - fmodf(position, tabWidth);
-}
-
-}
-
-namespace WTF {
-
-template <> struct OwnedPtrDeleter<WebCore::TextLayout> {
- static void deletePtr(WebCore::TextLayout*);
-};
-
-}
-
-#endif
« no previous file with comments | « Source/core/platform/graphics/Extensions3D.cpp ('k') | Source/core/platform/graphics/Font.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698