Index: webkit/port/platform/graphics/UniscribeHelper.h |
=================================================================== |
--- webkit/port/platform/graphics/UniscribeHelper.h (revision 5490) |
+++ webkit/port/platform/graphics/UniscribeHelper.h (working copy) |
@@ -4,22 +4,22 @@ |
// |
// A wrapper around Uniscribe that provides a reasonable API. |
-#ifndef BASE_GFX_UNISCRIBE_H__ |
-#define BASE_GFX_UNISCRIBE_H__ |
+#ifndef UniscribeHelper_h |
+#define UniscribeHelper_h |
#include <windows.h> |
#include <usp10.h> |
-#include <wchar.h> |
#include <map> |
-#include <vector> |
-#include "base/stack_container.h" |
+#include "wtf/Vector.h" |
+ |
#include "testing/gtest/include/gtest/gtest_prod.h" |
+#include "unicode/uchar.h" |
-namespace gfx { |
+namespace WebCore { |
-#define UNISCRIBE_STATE_STACK_RUNS 8 |
-#define UNISCRIBE_STATE_STACK_CHARS 32 |
+#define UNISCRIBE_HELPER_STACK_RUNS 8 |
+#define UNISCRIBE_HELPER_STACK_CHARS 32 |
// This object should be safe to create & destroy frequently, as long as the |
// caller preserves the script_cache when possible (this data may be slow to |
@@ -29,338 +29,352 @@ |
// working with to avoid expensive heap operations. Therefore, not only should |
// you not worry about creating and destroying it, you should try to not keep |
// them around. |
-class UniscribeState { |
- public: |
- // Initializes this Uniscribe run with the text pointed to by |run| with |
- // |length|. The input is NOT null terminated. |
- // |
- // The is_rtl flag should be set if the input script is RTL. It is assumed |
- // that the caller has already divided up the input text (using ICU, for |
- // example) into runs of the same direction of script. This avoids |
- // disagreements between the caller and Uniscribe later (see FillItems). |
- // |
- // A script cache should be provided by the caller that is initialized to |
- // NULL. When the caller is done with the cache (it may be stored between |
- // runs as long as it is used consistently with the same HFONT), it should |
- // call ScriptFreeCache(). |
- UniscribeState(const wchar_t* input, |
- int input_length, |
- bool is_rtl, |
- HFONT hfont, |
- SCRIPT_CACHE* script_cache, |
- SCRIPT_FONTPROPERTIES* font_properties); |
+class UniscribeHelper { |
+public: |
+ // Initializes this Uniscribe run with the text pointed to by |run| with |
+ // |length|. The input is NOT null terminated. |
+ // |
+ // The is_rtl flag should be set if the input script is RTL. It is assumed |
+ // that the caller has already divided up the input text (using ICU, for |
+ // example) into runs of the same direction of script. This avoids |
+ // disagreements between the caller and Uniscribe later (see FillItems). |
+ // |
+ // A script cache should be provided by the caller that is initialized to |
+ // NULL. When the caller is done with the cache (it may be stored between |
+ // runs as long as it is used consistently with the same HFONT), it should |
+ // call ScriptFreeCache(). |
+ UniscribeHelper(const UChar* input, |
+ int inputLength, |
+ bool isRtl, |
+ HFONT hfont, |
+ SCRIPT_CACHE* scriptCache, |
+ SCRIPT_FONTPROPERTIES* fontProperties); |
- virtual ~UniscribeState(); |
+ virtual ~UniscribeHelper(); |
- // Sets Uniscribe's directional override flag. False by default. |
- bool directional_override() const { |
- return directional_override_; |
- } |
- void set_directional_override(bool override) { |
- directional_override_ = override; |
- } |
+ // Sets Uniscribe's directional override flag. False by default. |
+ bool directionalOverride() const |
+ { |
+ return m_directionalOverride; |
+ } |
+ void setDirectionalOverride(bool override) |
+ { |
+ m_directionalOverride = override; |
+ } |
- // Set's Uniscribe's no-ligate override flag. False by default. |
- bool inhibit_ligate() const { |
- return inhibit_ligate_; |
- } |
- void set_inhibit_ligate(bool inhibit) { |
- inhibit_ligate_ = inhibit; |
- } |
+ // Set's Uniscribe's no-ligate override flag. False by default. |
+ bool inhibitLigate() const |
+ { |
+ return m_inhibitLigate; |
+ } |
+ void setInhibitLigate(bool inhibit) |
+ { |
+ m_inhibitLigate = inhibit; |
+ } |
- // Set letter spacing. We will try to insert this much space between |
- // graphemes (one or more glyphs perceived as a single unit by ordinary users |
- // of a script). Positive values increase letter spacing, negative values |
- // decrease it. 0 by default. |
- int letter_spacing() const { |
- return letter_spacing_; |
- } |
- void set_letter_spacing(int letter_spacing) { |
- letter_spacing_ = letter_spacing; |
- } |
+ // Set letter spacing. We will try to insert this much space between |
+ // graphemes (one or more glyphs perceived as a single unit by ordinary |
+ // users of a script). Positive values increase letter spacing, negative |
+ // values decrease it. 0 by default. |
+ int letterSpacing() const |
+ { |
+ return m_letterSpacing; |
+ } |
+ void setLetterSpacing(int letterSpacing) |
+ { |
+ m_letterSpacing = letterSpacing; |
+ } |
- // Set the width of a standard space character. We use this to normalize |
- // space widths. Windows will make spaces after Hindi characters larger than |
- // other spaces. A space_width of 0 means to use the default space width. |
- // |
- // Must be set before Init() is called. |
- int space_width() const { |
- return space_width_; |
- } |
- void set_space_width(int space_width) { |
- space_width_ = space_width; |
- } |
+ // Set the width of a standard space character. We use this to normalize |
+ // space widths. Windows will make spaces after Hindi characters larger than |
+ // other spaces. A space_width of 0 means to use the default space width. |
+ // |
+ // Must be set before Init() is called. |
+ int spaceWidth() const |
+ { |
+ return m_spaceWidth; |
+ } |
+ void setSpaceWidth(int spaceWidth) |
+ { |
+ m_spaceWidth = spaceWidth; |
+ } |
- // Set word spacing. We will try to insert this much extra space between |
- // each word in the input (beyond whatever whitespace character separates |
- // words). Positive values lead to increased letter spacing, negative values |
- // decrease it. 0 by default. |
- // |
- // Must be set before Init() is called. |
- int word_spacing() const { |
- return word_spacing_; |
- } |
- void set_word_spacing(int word_spacing) { |
- word_spacing_ = word_spacing; |
- } |
- void set_ascent(int ascent) { |
- ascent_ = ascent; |
- } |
+ // Set word spacing. We will try to insert this much extra space between |
+ // each word in the input (beyond whatever whitespace character separates |
+ // words). Positive values lead to increased letter spacing, negative values |
+ // decrease it. 0 by default. |
+ // |
+ // Must be set before Init() is called. |
+ int wordSpacing() const |
+ { |
+ return m_wordSpacing; |
+ } |
+ void setWordSpacing(int wordSpacing) |
+ { |
+ m_wordSpacing = wordSpacing; |
+ } |
- // You must call this after setting any options but before doing any |
- // other calls like asking for widths or drawing. |
- void Init() { InitWithOptionalLengthProtection(true); } |
+ void setAscent(int ascent) |
+ { |
+ m_ascent = ascent; |
+ } |
- // Returns the total width in pixels of the text run. |
- int Width() const; |
+ // You must call this after setting any options but before doing any |
+ // other calls like asking for widths or drawing. |
+ void Init() |
+ { |
+ InitWithOptionalLengthProtection(true); |
+ } |
- // Call to justify the text, with the amount of space that should be ADDED to |
- // get the desired width that the column should be justified to. Normally, |
- // spaces are inserted, but for Arabic there will be kashidas (extra strokes) |
- // inserted instead. |
- // |
- // This function MUST be called AFTER Init(). |
- void Justify(int additional_space); |
+ // Returns the total width in pixels of the text run. |
+ int Width() const; |
- // Computes the given character offset into a pixel offset of the beginning |
- // of that character. |
- int CharacterToX(int offset) const; |
+ // Call to justify the text, with the amount of space that should be ADDED |
+ // to get the desired width that the column should be justified to. |
+ // Normally, spaces are inserted, but for Arabic there will be kashidas |
+ // (extra strokes) inserted instead. |
+ // |
+ // This function MUST be called AFTER Init(). |
+ void Justify(int additionalSpace); |
- // Converts the given pixel X position into a logical character offset into |
- // the run. For positions appearing before the first character, this will |
- // return -1. |
- int XToCharacter(int x) const; |
+ // Computes the given character offset into a pixel offset of the beginning |
+ // of that character. |
+ int CharacterToX(int offset) const; |
- // Draws the given characters to (x, y) in the given DC. The font will be |
- // handled by this function, but the font color and other attributes should |
- // be pre-set. |
- // |
- // The y position is the upper left corner, NOT the baseline. |
- void Draw(HDC dc, int x, int y, int from, int to); |
+ // Converts the given pixel X position into a logical character offset into |
+ // the run. For positions appearing before the first character, this will |
+ // return -1. |
+ int XToCharacter(int x) const; |
- // Returns the first glyph assigned to the character at the given offset. |
- // This function is used to retrieve glyph information when Uniscribe is |
- // being used to generate glyphs for non-complex, non-BMP (above U+FFFF) |
- // characters. These characters are not otherwise special and have no |
- // complex shaping rules, so we don't otherwise need Uniscribe, except |
- // Uniscribe is the only way to get glyphs for non-BMP characters. |
- // |
- // Returns 0 if there is no glyph for the given character. |
- WORD FirstGlyphForCharacter(int char_offset) const; |
+ // Draws the given characters to (x, y) in the given DC. The font will be |
+ // handled by this function, but the font color and other attributes should |
+ // be pre-set. |
+ // |
+ // The y position is the upper left corner, NOT the baseline. |
+ void Draw(HDC dc, int x, int y, int from, int to); |
- protected: |
- // Backend for init. The flag allows the unit test to specify whether we |
- // should fail early for very long strings like normal, or try to pass the |
- // long string to Uniscribe. The latter provides a way to force failure of |
- // shaping. |
- void InitWithOptionalLengthProtection(bool length_protection); |
+ // Returns the first glyph assigned to the character at the given offset. |
+ // This function is used to retrieve glyph information when Uniscribe is |
+ // being used to generate glyphs for non-complex, non-BMP (above U+FFFF) |
+ // characters. These characters are not otherwise special and have no |
+ // complex shaping rules, so we don't otherwise need Uniscribe, except |
+ // Uniscribe is the only way to get glyphs for non-BMP characters. |
+ // |
+ // Returns 0 if there is no glyph for the given character. |
+ WORD FirstGlyphForCharacter(int charOffset) const; |
- // Tries to preload the font when the it is not accessible. |
- // This is the default implementation and it does not do anything. |
- virtual void TryToPreloadFont(HFONT font) {} |
+protected: |
+ // Backend for init. The flag allows the unit test to specify whether we |
+ // should fail early for very long strings like normal, or try to pass the |
+ // long string to Uniscribe. The latter provides a way to force failure of |
+ // shaping. |
+ void InitWithOptionalLengthProtection(bool lengthProtection); |
- private: |
- FRIEND_TEST(UniscribeTest, TooBig); |
+ // Tries to preload the font when the it is not accessible. |
+ // This is the default implementation and it does not do anything. |
+ virtual void TryToPreloadFont(HFONT font) {} |
- // An array corresponding to each item in runs_ containing information |
- // on each of the glyphs that were generated. Like runs_, this is in |
- // reading order. However, for rtl text, the characters within each |
- // item will be reversed. |
- struct Shaping { |
- Shaping() |
- : pre_padding(0), |
- hfont_(NULL), |
- script_cache_(NULL), |
- ascent_offset_(0) { |
- abc.abcA = 0; |
- abc.abcB = 0; |
- abc.abcC = 0; |
- } |
+private: |
+ FRIEND_TEST(UniscribeTest, TooBig); |
- // Returns the number of glyphs (which will be drawn to the screen) |
- // in this run. |
- int glyph_length() const { |
- return static_cast<int>(glyphs->size()); |
- } |
+ // An array corresponding to each item in runs_ containing information |
+ // on each of the glyphs that were generated. Like runs_, this is in |
+ // reading order. However, for rtl text, the characters within each |
+ // item will be reversed. |
+ struct Shaping { |
+ Shaping() |
+ : m_prePadding(0) |
+ , m_hfont(NULL) |
+ , m_scriptCache(NULL) |
+ , m_ascentOffset(0) { |
+ m_abc.abcA = 0; |
+ m_abc.abcB = 0; |
+ m_abc.abcC = 0; |
+ } |
- // Returns the number of characters (that we started with) in this run. |
- int char_length() const { |
- return static_cast<int>(logs->size()); |
- } |
+ // Returns the number of glyphs (which will be drawn to the screen) |
+ // in this run. |
+ int glyphLength() const |
+ { |
+ return static_cast<int>(m_glyphs.size()); |
+ } |
- // Returns the advance array that should be used when measuring glyphs. |
- // The returned pointer will indicate an array with glyph_length() elements |
- // and the advance that should be used for each one. This is either the |
- // real advance, or the justified advances if there is one, and is the |
- // array we want to use for measurement. |
- const int* effective_advances() const { |
- if (advance->empty()) |
- return 0; |
- if (justify->empty()) |
- return &advance[0]; |
- return &justify[0]; |
- } |
+ // Returns the number of characters (that we started with) in this run. |
+ int charLength() const |
+ { |
+ return static_cast<int>(m_logs.size()); |
+ } |
- // This is the advance amount of space that we have added to the beginning |
- // of the run. It is like the ABC's |A| advance but one that we create and |
- // must handle internally whenever computing with pixel offsets. |
- int pre_padding; |
+ // Returns the advance array that should be used when measuring glyphs. |
+ // The returned pointer will indicate an array with glyph_length() |
+ // elements and the advance that should be used for each one. This is |
+ // either the real advance, or the justified advances if there is one, |
+ // and is the array we want to use for measurement. |
+ const int* effectiveAdvances() const |
+ { |
+ if (m_advance.size() == 0) |
+ return 0; |
+ if (m_justify.size() == 0) |
+ return &m_advance[0]; |
+ return &m_justify[0]; |
+ } |
- // Glyph indices in the font used to display this item. These indices |
- // are in screen order. |
- StackVector<WORD, UNISCRIBE_STATE_STACK_CHARS> glyphs; |
+ // This is the advance amount of space that we have added to the |
+ // beginning of the run. It is like the ABC's |A| advance but one that |
+ // we create and must handle internally whenever computing with pixel |
+ // offsets. |
+ int m_prePadding; |
- // For each input character, this tells us the first glyph index it |
- // generated. This is the only array with size of the input chars. |
- // |
- // All offsets are from the beginning of this run. Multiple characters can |
- // generate one glyph, in which case there will be adjacent duplicates in |
- // this list. One character can also generate multiple glyphs, in which |
- // case there will be skipped indices in this list. |
- StackVector<WORD, UNISCRIBE_STATE_STACK_CHARS> logs; |
+ // Glyph indices in the font used to display this item. These indices |
+ // are in screen order. |
+ Vector<WORD, UNISCRIBE_HELPER_STACK_CHARS> m_glyphs; |
- // Flags and such for each glyph. |
- StackVector<SCRIPT_VISATTR, UNISCRIBE_STATE_STACK_CHARS> visattr; |
+ // For each input character, this tells us the first glyph index it |
+ // generated. This is the only array with size of the input chars. |
+ // |
+ // All offsets are from the beginning of this run. Multiple characters |
+ // can generate one glyph, in which case there will be adjacent |
+ // duplicates in this list. One character can also generate multiple |
+ // glyphs, in which case there will be skipped indices in this list. |
+ Vector<WORD, UNISCRIBE_HELPER_STACK_CHARS> m_logs; |
- // Horizontal advances for each glyph listed above, this is basically |
- // how wide each glyph is. |
- StackVector<int, UNISCRIBE_STATE_STACK_CHARS> advance; |
+ // Flags and such for each glyph. |
+ Vector<SCRIPT_VISATTR, UNISCRIBE_HELPER_STACK_CHARS> m_visattr; |
- // This contains glyph offsets, from the nominal position of a glyph. It |
- // is used to adjust the positions of multiple combining characters |
- // around/above/below base characters in a context-sensitive manner so |
- // that they don't bump against each other and the base character. |
- StackVector<GOFFSET, UNISCRIBE_STATE_STACK_CHARS> offsets; |
+ // Horizontal advances for each glyph listed above, this is basically |
+ // how wide each glyph is. |
+ Vector<int, UNISCRIBE_HELPER_STACK_CHARS> m_advance; |
- // Filled by a call to Justify, this is empty for nonjustified text. |
- // If nonempty, this contains the array of justify characters for each |
- // character as returned by ScriptJustify. |
- // |
- // This is the same as the advance array, but with extra space added for |
- // some characters. The difference between a glyph's |justify| width and |
- // it's |advance| width is the extra space added. |
- StackVector<int, UNISCRIBE_STATE_STACK_CHARS> justify; |
+ // This contains glyph offsets, from the nominal position of a glyph. |
+ // It is used to adjust the positions of multiple combining characters |
+ // around/above/below base characters in a context-sensitive manner so |
+ // that they don't bump against each other and the base character. |
+ Vector<GOFFSET, UNISCRIBE_HELPER_STACK_CHARS> m_offsets; |
- // Sizing information for this run. This treats the entire run as a |
- // character with a preceeding advance, width, and ending advance. |
- // The B width is the sum of the |advance| array, and the A and C widths |
- // are any extra spacing applied to each end. |
- // |
- // It is unclear from the documentation what this actually means. From |
- // experimentation, it seems that the sum of the character advances is |
- // always the sum of the ABC values, and I'm not sure what you're supposed |
- // to do with the ABC values. |
- ABC abc; |
+ // Filled by a call to Justify, this is empty for nonjustified text. |
+ // If nonempty, this contains the array of justify characters for each |
+ // character as returned by ScriptJustify. |
+ // |
+ // This is the same as the advance array, but with extra space added |
+ // for some characters. The difference between a glyph's |justify| |
+ // width and it's |advance| width is the extra space added. |
+ Vector<int, UNISCRIBE_HELPER_STACK_CHARS> m_justify; |
- // Pointers to windows font data used to render this run. |
- HFONT hfont_; |
- SCRIPT_CACHE* script_cache_; |
+ // Sizing information for this run. This treats the entire run as a |
+ // character with a preceeding advance, width, and ending advance. The |
+ // B width is the sum of the |advance| array, and the A and C widths |
+ // are any extra spacing applied to each end. |
+ // |
+ // It is unclear from the documentation what this actually means. From |
+ // experimentation, it seems that the sum of the character advances is |
+ // always the sum of the ABC values, and I'm not sure what you're |
+ // supposed to do with the ABC values. |
+ ABC m_abc; |
- // Ascent offset between the ascent of the primary font |
- // and that of the fallback font. The offset needs to be applied, |
- // when drawing a string, to align multiple runs rendered with |
- // different fonts. |
- int ascent_offset_; |
- }; |
+ // Pointers to windows font data used to render this run. |
+ HFONT m_hfont; |
+ SCRIPT_CACHE* m_scriptCache; |
- // Computes the runs_ array from the text run. |
- void FillRuns(); |
+ // Ascent offset between the ascent of the primary font |
+ // and that of the fallback font. The offset needs to be applied, |
+ // when drawing a string, to align multiple runs rendered with |
+ // different fonts. |
+ int m_ascentOffset; |
+ }; |
- // Computes the shapes_ array given an runs_ array already filled in. |
- void FillShapes(); |
+ // Computes the runs_ array from the text run. |
+ void FillRuns(); |
- // Fills in the screen_order_ array (see below). |
- void FillScreenOrder(); |
+ // Computes the shapes_ array given an runs_ array already filled in. |
+ void FillShapes(); |
- // Called to update the glyph positions based on the current spacing options |
- // that are set. |
- void ApplySpacing(); |
+ // Fills in the screen_order_ array (see below). |
+ void FillScreenOrder(); |
- // Normalizes all advances for spaces to the same width. This keeps windows |
- // from making spaces after Hindi characters larger, which is then |
- // inconsistent with our meaure of the width since WebKit doesn't include |
- // spaces in text-runs sent to uniscribe unless white-space:pre. |
- void AdjustSpaceAdvances(); |
+ // Called to update the glyph positions based on the current spacing |
+ // options that are set. |
+ void ApplySpacing(); |
- // Returns the total width of a single item. |
- int AdvanceForItem(int item_index) const; |
+ // Normalizes all advances for spaces to the same width. This keeps windows |
+ // from making spaces after Hindi characters larger, which is then |
+ // inconsistent with our meaure of the width since WebKit doesn't include |
+ // spaces in text-runs sent to uniscribe unless white-space:pre. |
+ void AdjustSpaceAdvances(); |
- // Shapes a run (pointed to by |input|) using |hfont| first. |
- // Tries a series of fonts specified retrieved with NextWinFontData |
- // and finally a font covering characters in |*input|. A string pointed |
- // by |input| comes from ScriptItemize and is supposed to contain |
- // characters belonging to a single script aside from characters |
- // common to all scripts (e.g. space). |
- bool Shape(const wchar_t* input, |
- int item_length, |
- int num_glyphs, |
- SCRIPT_ITEM& run, |
- Shaping& shaping); |
+ // Returns the total width of a single item. |
+ int AdvanceForItem(int item_index) const; |
- // Gets Windows font data for the next best font to try in the list |
- // of fonts. When there's no more font available, returns false |
- // without touching any of out params. Need to call ResetFontIndex |
- // to start scanning of the font list from the beginning. |
- virtual bool NextWinFontData(HFONT* hfont, |
- SCRIPT_CACHE** script_cache, |
- SCRIPT_FONTPROPERTIES** font_properties, |
- int* ascent) { |
- return false; |
- } |
+ // Shapes a run (pointed to by |input|) using |hfont| first. |
+ // Tries a series of fonts specified retrieved with NextWinFontData |
+ // and finally a font covering characters in |*input|. A string pointed |
+ // by |input| comes from ScriptItemize and is supposed to contain |
+ // characters belonging to a single script aside from characters common to |
+ // all scripts (e.g. space). |
+ bool Shape(const UChar* input, |
+ int item_length, |
+ int num_glyphs, |
+ SCRIPT_ITEM& run, |
+ Shaping& shaping); |
- // Resets the font index to the first in the list of fonts |
- // to try after the primaryFont turns out not to work. With font_index |
- // reset, NextWinFontData scans fallback fonts from the beginning. |
- virtual void ResetFontIndex() {} |
+ // Gets Windows font data for the next best font to try in the list |
+ // of fonts. When there's no more font available, returns false |
+ // without touching any of out params. Need to call ResetFontIndex |
+ // to start scanning of the font list from the beginning. |
+ virtual bool NextWinFontData(HFONT* hfont, |
+ SCRIPT_CACHE** script_cache, |
+ SCRIPT_FONTPROPERTIES** font_properties, |
+ int* ascent) { |
+ return false; |
+ } |
- // The input data for this run of Uniscribe. See the constructor. |
- const wchar_t* input_; |
- const int input_length_; |
- const bool is_rtl_; |
+ // Resets the font index to the first in the list of fonts to try after the |
+ // primaryFont turns out not to work. With fontIndex reset, |
+ // NextWinFontData scans fallback fonts from the beginning. |
+ virtual void ResetFontIndex() {} |
- // Windows font data for the primary font : |
- // In a sense, logfont_ and style_ are redundant because |
- // hfont_ contains all the information. However, invoking GetObject, |
- // everytime we need the height and the style, is rather expensive so |
- // that we cache them. Would it be better to add getter and (virtual) |
- // setter for the height and the style of the primary font, instead of |
- // logfont_? Then, a derived class ctor can set ascent_, height_ and style_ |
- // if they're known. Getters for them would have to 'infer' their values from |
- // hfont_ ONLY when they're not set. |
- HFONT hfont_; |
- SCRIPT_CACHE* script_cache_; |
- SCRIPT_FONTPROPERTIES* font_properties_; |
- int ascent_; |
- LOGFONT logfont_; |
- int style_; |
+ // The input data for this run of Uniscribe. See the constructor. |
+ const UChar* m_input; |
+ const int m_inputLength; |
+ const bool m_isRtl; |
- // Options, see the getters/setters above. |
- bool directional_override_; |
- bool inhibit_ligate_; |
- int letter_spacing_; |
- int space_width_; |
- int word_spacing_; |
- int justification_width_; |
+ // Windows font data for the primary font. In a sense, m_logfont and m_style |
+ // are redundant because m_hfont contains all the information. However, |
+ // invoking GetObject, everytime we need the height and the style, is rather |
+ // expensive so that we cache them. Would it be better to add getter and |
+ // (virtual) setter for the height and the style of the primary font, |
+ // instead of m_logfont? Then, a derived class ctor can set m_ascent, |
+ // m_height and m_style if they're known. Getters for them would have to |
+ // 'infer' their values from m_hfont ONLY when they're not set. |
+ HFONT m_hfont; |
+ SCRIPT_CACHE* m_scriptCache; |
+ SCRIPT_FONTPROPERTIES* m_fontProperties; |
+ int m_ascent; |
+ LOGFONT m_logfont; |
+ int m_style; |
- // Uniscribe breaks the text into Runs. These are one length of text that is |
- // in one script and one direction. This array is in reading order. |
- StackVector<SCRIPT_ITEM, UNISCRIBE_STATE_STACK_RUNS> runs_; |
+ // Options, see the getters/setters above. |
+ bool m_directionalOverride; |
+ bool m_inhibitLigate; |
+ int m_letterSpacing; |
+ int m_spaceWidth; |
+ int m_wordSpacing; |
- StackVector<Shaping, UNISCRIBE_STATE_STACK_RUNS> shapes_; |
+ // Uniscribe breaks the text into Runs. These are one length of text that is |
+ // in one script and one direction. This array is in reading order. |
+ Vector<SCRIPT_ITEM, UNISCRIBE_HELPER_STACK_RUNS> m_runs; |
- // This is a mapping between reading order and screen order for the items. |
- // Uniscribe's items array are in reading order. For right-to-left text, |
- // or mixed (although WebKit's |TextRun| should really be only one |
- // direction), this makes it very difficult to compute character offsets |
- // and positions. This list is in screen order from left to right, and |
- // gives the index into the |runs_| and |shapes_| arrays of each |
- // subsequent item. |
- StackVector<int, UNISCRIBE_STATE_STACK_RUNS> screen_order_; |
+ Vector<Shaping, UNISCRIBE_HELPER_STACK_RUNS> m_shapes; |
- DISALLOW_EVIL_CONSTRUCTORS(UniscribeState); |
+ // This is a mapping between reading order and screen order for the items. |
+ // Uniscribe's items array are in reading order. For right-to-left text, |
+ // or mixed (although WebKit's |TextRun| should really be only one |
+ // direction), this makes it very difficult to compute character offsets |
+ // and positions. This list is in screen order from left to right, and |
+ // gives the index into the |m_runs| and |m_shapes| arrays of each |
+ // subsequent item. |
+ Vector<int, UNISCRIBE_HELPER_STACK_RUNS> m_screenOrder; |
}; |
-} // namespace gfx |
+} // namespace WebCore |
-#endif // BASE_GFX_UNISCRIBE_H__ |
- |
+#endif // UniscribeHelper_h |
Property changes on: webkit\port\platform\graphics\UniscribeHelper.h |
___________________________________________________________________ |
Added: svn:mergeinfo |
Merged /branches/chrome_webkit_merge_branch/base/gfx/uniscribe.h:r69-2775 |