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

Unified Diff: third_party/WebKit/Source/platform/fonts/Font.cpp

Issue 2598393002: Do not skip ink for ideographic scripts (Closed)
Patch Set: drott nits Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/fonts/Font.cpp
diff --git a/third_party/WebKit/Source/platform/fonts/Font.cpp b/third_party/WebKit/Source/platform/fonts/Font.cpp
index 838080911c8a562cb2cf2ca0061863304cbaf698..48e3e286e3c1b71336e7d4412e9a262f1e46dfad 100644
--- a/third_party/WebKit/Source/platform/fonts/Font.cpp
+++ b/third_party/WebKit/Source/platform/fonts/Font.cpp
@@ -257,18 +257,29 @@ class GlyphBufferBloberizer {
m_deviceScaleFactor(deviceScaleFactor),
m_hasVerticalOffsets(buffer.hasVerticalOffsets()),
m_index(0),
+ m_endIndex(m_buffer.size()),
m_blobCount(0),
m_rotation(buffer.isEmpty() ? NoRotation : computeBlobRotation(
- buffer.fontDataAt(0))) {}
+ buffer.fontDataAt(0))) {
+ if (m_buffer.hasSkipInkExceptions()) {
+ while (m_endIndex > 0 && m_buffer.isSkipInkException(m_endIndex - 1))
+ m_endIndex--;
+ }
+ }
- bool done() const { return m_index >= m_buffer.size(); }
+ bool done() const { return m_index >= m_endIndex; }
unsigned blobCount() const { return m_blobCount; }
std::pair<sk_sp<SkTextBlob>, BlobRotation> next() {
ASSERT(!done());
const BlobRotation currentRotation = m_rotation;
- while (m_index < m_buffer.size()) {
+ while (m_index < m_endIndex) {
+ if (m_buffer.hasSkipInkExceptions()) {
+ while (m_index < m_endIndex && m_buffer.isSkipInkException(m_index))
+ m_index++;
+ }
+
const SimpleFontData* fontData = m_buffer.fontDataAt(m_index);
ASSERT(fontData);
@@ -282,8 +293,8 @@ class GlyphBufferBloberizer {
}
const unsigned start = m_index++;
- while (m_index < m_buffer.size() &&
- m_buffer.fontDataAt(m_index) == fontData)
+ while (m_index < m_endIndex && m_buffer.fontDataAt(m_index) == fontData &&
+ !m_buffer.isSkipInkException(m_index))
m_index++;
appendRun(start, m_index - start, fontData);
@@ -343,6 +354,7 @@ class GlyphBufferBloberizer {
SkTextBlobBuilder m_builder;
unsigned m_index;
+ unsigned m_endIndex;
unsigned m_blobCount;
BlobRotation m_rotation;
};
@@ -439,6 +451,10 @@ void Font::getTextIntercepts(const TextRunPaintInfo& runInfo,
}
GlyphBuffer glyphBuffer;
+ // Compute skip-ink exceptions in the GlyphBuffer.
+ // Skip the computation if 8Bit(), no such characters in Latin-1.
+ if (!runInfo.run.is8Bit())
+ glyphBuffer.saveSkipInkExceptions();
buildGlyphBuffer(runInfo, glyphBuffer);
// Get the number of intervals, without copying the actual values by

Powered by Google App Engine
This is Rietveld 408576698