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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/shaping/ShapeResultInlineHeaders.h

Issue 2715773002: Add ShapeResult::RunInfo glyph iterators (Closed)
Patch Set: fillGlyphBufferForResult Created 3 years, 10 months 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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBuffer.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 Google Inc. All rights reserved. 2 * Copyright (c) 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. 3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 91
92 size_t glyphToCharacterIndex(size_t i) const { 92 size_t glyphToCharacterIndex(size_t i) const {
93 return m_startIndex + m_glyphData[i].characterIndex; 93 return m_startIndex + m_glyphData[i].characterIndex;
94 } 94 }
95 95
96 // For memory reporting. 96 // For memory reporting.
97 size_t byteSize() const { 97 size_t byteSize() const {
98 return sizeof(this) + m_glyphData.size() * sizeof(HarfBuzzRunGlyphData); 98 return sizeof(this) + m_glyphData.size() * sizeof(HarfBuzzRunGlyphData);
99 } 99 }
100 100
101 // Iterates over, and applies the functor to all the glyphs in this run.
102 // Also tracks (and returns) a seeded total advance.
103 //
104 // Functor signature:
105 //
106 // bool func(const HarfBuzzRunGlyphData& glyphData, float totalAdvance)
107 //
108 // where the returned bool signals whether iteration should continue (true)
109 // or stop (false).
110 template <typename Func>
111 float forEachGlyph(float initialAdvance, Func func) const {
112 float totalAdvance = initialAdvance;
113
114 for (const auto& glyphData : m_glyphData) {
115 if (!func(glyphData, totalAdvance))
116 break;
117 totalAdvance += glyphData.advance;
118 }
119
120 return totalAdvance;
121 }
122
123 // Same as the above, except it only applies the functor to glyphs in the
124 // specified range, and stops after the range.
125 template <typename Func>
126 float forEachGlyphInRange(float initialAdvance,
127 unsigned from,
128 unsigned to,
129 unsigned indexOffset,
130 Func func) const {
131 return forEachGlyph(
132 initialAdvance,
133 [&](const HarfBuzzRunGlyphData& glyphData, float totalAdvance) -> bool {
134 const uint16_t characterIndex =
135 m_startIndex + glyphData.characterIndex + indexOffset;
136
137 if (characterIndex < from) {
138 // Glyph out-of-range; before the range (and must continue
139 // accumulating advance) in LTR.
140 return !rtl();
141 }
142
143 if (characterIndex >= to) {
144 // Glyph out-of-range; before the range (and must continue
145 // accumulating advance) in RTL.
146 return rtl();
147 }
148
149 // Glyph in range; apply functor.
150 return func(glyphData, totalAdvance, characterIndex);
151 });
152 }
153
101 RefPtr<SimpleFontData> m_fontData; 154 RefPtr<SimpleFontData> m_fontData;
102 hb_direction_t m_direction; 155 hb_direction_t m_direction;
103 hb_script_t m_script; 156 hb_script_t m_script;
104 Vector<HarfBuzzRunGlyphData> m_glyphData; 157 Vector<HarfBuzzRunGlyphData> m_glyphData;
105 unsigned m_startIndex; 158 unsigned m_startIndex;
106 unsigned m_numCharacters; 159 unsigned m_numCharacters;
107 float m_width; 160 float m_width;
108 }; 161 };
109 162
110 } // namespace blink 163 } // namespace blink
111 164
112 #endif // ShapeResultInlineHeaders_h 165 #endif // ShapeResultInlineHeaders_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBuffer.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698