aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2018-07-27 09:47:15 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-27 14:10:17 +0000
commitab54e7394d81438f5256b632c71724b480a7f66b (patch)
treeaedbae9659b1d67b069751ae730fb8c09e73f96d /src
parent504dd052b94c318afeadc5c68e1c3b233d7571c1 (diff)
Hide SkTextBlob::GlyphPositioning from public API
Make private, add corresponding SkTextBlobRunIterator enum. Also move SkTextBlobRunIterator to SkTextBlobPriv.h. Change-Id: If3e0beabb0e8484b1ac73c6fc0827e920ca1f93b Reviewed-on: https://skia-review.googlesource.com/142501 Commit-Queue: Florin Malita <fmalita@chromium.org> Reviewed-by: Mike Reed <reed@google.com> Reviewed-by: Herb Derby <herb@google.com> Reviewed-by: Cary Clark <caryclark@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkDevice.cpp10
-rw-r--r--src/core/SkGlyphRun.cpp10
-rw-r--r--src/core/SkGlyphRun.h6
-rw-r--r--src/core/SkOverdrawCanvas.cpp11
-rw-r--r--src/core/SkPaint.cpp8
-rw-r--r--src/core/SkRemoteGlyphCache.cpp6
-rw-r--r--src/core/SkTextBlob.cpp26
-rw-r--r--src/core/SkTextBlobPriv.h37
-rw-r--r--src/core/SkTextBlobRunIterator.h43
-rw-r--r--src/gpu/text/GrTextBlob.cpp1
-rw-r--r--src/gpu/text/GrTextBlobCache.h2
-rw-r--r--src/gpu/text/GrTextContext.cpp2
-rw-r--r--src/gpu/text/GrTextContext.h1
-rw-r--r--src/gpu/text/GrTextUtils.cpp1
-rw-r--r--src/pdf/SkPDFDevice.cpp2
-rw-r--r--src/pdf/SkPDFDevice.h3
16 files changed, 84 insertions, 85 deletions
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index f0829dc4da..b52a82efc1 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -26,7 +26,7 @@
#include "SkShader.h"
#include "SkSpecialImage.h"
#include "SkTLazy.h"
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlobPriv.h"
#include "SkTextToPathIter.h"
#include "SkTo.h"
#include "SkUtils.h"
@@ -153,7 +153,7 @@ void SkBaseDevice::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
it.applyFontToPaint(&runPaint);
switch (it.positioning()) {
- case SkTextBlob::kDefault_Positioning: {
+ case SkTextBlobRunIterator::kDefault_Positioning: {
auto origin = SkPoint::Make(x + offset.x(), y + offset.y());
SkGlyphRunBuilder builder;
builder.drawText(runPaint, (const char*) it.glyphs(), textLen, origin);
@@ -161,16 +161,14 @@ void SkBaseDevice::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
glyphRunList.temporaryShuntToDrawPosText(this, SkPoint::Make(0, 0));
}
break;
- case SkTextBlob::kHorizontal_Positioning:
+ case SkTextBlobRunIterator::kHorizontal_Positioning:
this->drawPosText(it.glyphs(), textLen, it.pos(), 1,
SkPoint::Make(x, y + offset.y()), runPaint);
break;
- case SkTextBlob::kFull_Positioning:
+ case SkTextBlobRunIterator::kFull_Positioning:
this->drawPosText(it.glyphs(), textLen, it.pos(), 2,
SkPoint::Make(x, y), runPaint);
break;
- default:
- SK_ABORT("unhandled positioning mode");
}
}
}
diff --git a/src/core/SkGlyphRun.cpp b/src/core/SkGlyphRun.cpp
index ca52289ea9..7683325c5b 100644
--- a/src/core/SkGlyphRun.cpp
+++ b/src/core/SkGlyphRun.cpp
@@ -24,7 +24,7 @@
#include "SkRasterClip.h"
#include "SkStrikeCache.h"
#include "SkTextBlob.h"
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlobPriv.h"
#include "SkTo.h"
#include "SkUtils.h"
@@ -503,14 +503,14 @@ void SkGlyphRunBuilder::drawTextBlob(const SkPaint& paint, const SkTextBlob& blo
size_t uniqueGlyphIDsSize = 0;
switch (it.positioning()) {
- case SkTextBlob::kDefault_Positioning: {
+ case SkTextBlobRunIterator::kDefault_Positioning: {
uniqueGlyphIDsSize = this->simplifyDrawText(
runPaint, glyphIDs, offset,
currentDenseIndices, currentUniqueGlyphIDs, currentPositions,
text, clusters);
}
break;
- case SkTextBlob::kHorizontal_Positioning: {
+ case SkTextBlobRunIterator::kHorizontal_Positioning: {
auto constY = offset.y();
uniqueGlyphIDsSize = this->simplifyDrawPosTextH(
runPaint, glyphIDs, it.pos(), constY,
@@ -518,14 +518,12 @@ void SkGlyphRunBuilder::drawTextBlob(const SkPaint& paint, const SkTextBlob& blo
text, clusters);
}
break;
- case SkTextBlob::kFull_Positioning:
+ case SkTextBlobRunIterator::kFull_Positioning:
uniqueGlyphIDsSize = this->simplifyDrawPosText(
runPaint, glyphIDs, (const SkPoint*)it.pos(),
currentDenseIndices, currentUniqueGlyphIDs, currentPositions,
text, clusters);
break;
- default:
- SK_ABORT("unhandled positioning mode");
}
currentDenseIndices += runSize;
diff --git a/src/core/SkGlyphRun.h b/src/core/SkGlyphRun.h
index b2d1aad265..1456e6c290 100644
--- a/src/core/SkGlyphRun.h
+++ b/src/core/SkGlyphRun.h
@@ -19,7 +19,7 @@
#include "SkPoint.h"
#include "SkSurfaceProps.h"
#include "SkTemplates.h"
-#include "SkTextBlob.h"
+#include "SkTextBlobPriv.h"
#include "SkTypes.h"
class SkBaseDevice;
@@ -203,7 +203,9 @@ public:
const SkScalar* pos() const { return (const SkScalar*)fList[fIndex].positions().data(); }
const SkPoint& offset() const { return fZero; }
void applyFontToPaint(SkPaint* paint) const { *paint = fList[fIndex].paint(); }
- SkTextBlob::GlyphPositioning positioning() const { return SkTextBlob::kFull_Positioning; }
+ SkTextBlobRunIterator::GlyphPositioning positioning() const {
+ return SkTextBlobRunIterator::kFull_Positioning;
+ }
const uint32_t* clusters() const { return fList[fIndex].clusters().data(); }
uint32_t textSize() const { return fList[fIndex].text().size(); }
const char* text() const { return fList[fIndex].text().data(); }
diff --git a/src/core/SkOverdrawCanvas.cpp b/src/core/SkOverdrawCanvas.cpp
index 35656e0829..249723e494 100644
--- a/src/core/SkOverdrawCanvas.cpp
+++ b/src/core/SkOverdrawCanvas.cpp
@@ -19,7 +19,7 @@
#include "SkRSXform.h"
#include "SkStrikeCache.h"
#include "SkTextBlob.h"
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlobPriv.h"
#include "SkTo.h"
namespace {
@@ -154,20 +154,17 @@ void SkOverdrawCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScal
const SkPoint& offset = it.offset();
it.applyFontToPaint(&runPaint);
switch (it.positioning()) {
- case SkTextBlob::kDefault_Positioning:
+ case SkTextBlobRunIterator::kDefault_Positioning:
this->onDrawText(it.glyphs(), textLen, x + offset.x(), y + offset.y(), runPaint);
break;
- case SkTextBlob::kHorizontal_Positioning:
+ case SkTextBlobRunIterator::kHorizontal_Positioning:
this->drawPosTextCommon(it.glyphs(), textLen, it.pos(), 1,
SkPoint::Make(x, y + offset.y()), runPaint);
break;
- case SkTextBlob::kFull_Positioning:
+ case SkTextBlobRunIterator::kFull_Positioning:
this->drawPosTextCommon(it.glyphs(), textLen, it.pos(), 2, SkPoint::Make(x, y),
runPaint);
break;
- default:
- SkASSERT(false);
- break;
}
}
}
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index 0fdf58b6e5..9b8431e591 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -33,7 +33,7 @@
#include "SkSurfacePriv.h"
#include "SkTLazy.h"
#include "SkTextBlob.h"
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlobPriv.h"
#include "SkTextFormatParams.h"
#include "SkTextToPathIter.h"
#include "SkTo.h"
@@ -1095,15 +1095,15 @@ int SkPaint::getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds
SkScalar* runIntervals = intervals ? intervals + count : nullptr;
switch (it.positioning()) {
- case SkTextBlob::kDefault_Positioning:
+ case SkTextBlobRunIterator::kDefault_Positioning:
count += runPaint.getTextIntercepts(it.glyphs(), runByteCount, it.offset().x(),
it.offset().y(), bounds, runIntervals);
break;
- case SkTextBlob::kHorizontal_Positioning:
+ case SkTextBlobRunIterator::kHorizontal_Positioning:
count += runPaint.getPosTextHIntercepts(it.glyphs(), runByteCount, it.pos(),
it.offset().y(), bounds, runIntervals);
break;
- case SkTextBlob::kFull_Positioning:
+ case SkTextBlobRunIterator::kFull_Positioning:
count += runPaint.getPosTextIntercepts(it.glyphs(), runByteCount,
reinterpret_cast<const SkPoint*>(it.pos()),
bounds, runIntervals);
diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp
index 58422627f5..9aa43ad049 100644
--- a/src/core/SkRemoteGlyphCache.cpp
+++ b/src/core/SkRemoteGlyphCache.cpp
@@ -267,7 +267,7 @@ private:
FAIL_AND_RETURN
}
- if (it.positioning() == SkTextBlob::kDefault_Positioning) {
+ if (it.positioning() == SkTextBlobRunIterator::kDefault_Positioning) {
// Default positioning needs advances. Can't do that.
TRACE_EVENT0("skia", "kDefault_Positioning");
FAIL_AND_RETURN
@@ -291,13 +291,13 @@ private:
SkSTArenaAlloc<120> arena;
SkFindAndPlaceGlyph::MapperInterface* mapper = nullptr;
switch (it.positioning()) {
- case SkTextBlob::kHorizontal_Positioning:
+ case SkTextBlobRunIterator::kHorizontal_Positioning:
posFn = [](int index, const SkScalar* pos) { return SkPoint{pos[index], 0}; };
mapper = SkFindAndPlaceGlyph::CreateMapper(
runMatrix, SkPoint::Make(position.x(), position.y() + it.offset().y()), 1,
&arena);
break;
- case SkTextBlob::kFull_Positioning:
+ case SkTextBlobRunIterator::kFull_Positioning:
posFn = [](int index, const SkScalar* pos) {
return SkPoint{pos[2 * index], pos[2 * index + 1]};
};
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index fcaeec8613..72e7da8011 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -5,7 +5,7 @@
* found in the LICENSE file.
*/
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlob.h"
#include "SkGlyphRun.h"
#include "SkPaintPriv.h"
@@ -333,7 +333,7 @@ namespace {
union PositioningAndExtended {
int32_t intValue;
struct {
- SkTextBlob::GlyphPositioning positioning;
+ uint8_t positioning;
uint8_t extended;
uint16_t padding;
};
@@ -343,6 +343,12 @@ static_assert(sizeof(PositioningAndExtended) == sizeof(int32_t), "");
} // namespace
+enum SkTextBlob::GlyphPositioning : uint8_t {
+ kDefault_Positioning = 0, // Default glyph advances -- zero scalars per glyph.
+ kHorizontal_Positioning = 1, // Horizontal positioning -- one scalar per glyph.
+ kFull_Positioning = 2 // Point positioning -- two scalars per glyph.
+};
+
unsigned SkTextBlob::ScalarsPerGlyph(GlyphPositioning pos) {
// GlyphPositioning values are directly mapped to scalars-per-glyph.
SkASSERT(pos <= 2);
@@ -400,9 +406,16 @@ const SkPoint& SkTextBlobRunIterator::offset() const {
return fCurrentRun->offset();
}
-SkTextBlob::GlyphPositioning SkTextBlobRunIterator::positioning() const {
+SkTextBlobRunIterator::GlyphPositioning SkTextBlobRunIterator::positioning() const {
SkASSERT(!this->done());
- return fCurrentRun->positioning();
+ static_assert(static_cast<GlyphPositioning>(SkTextBlob::kDefault_Positioning) ==
+ kDefault_Positioning, "");
+ static_assert(static_cast<GlyphPositioning>(SkTextBlob::kHorizontal_Positioning) ==
+ kHorizontal_Positioning, "");
+ static_assert(static_cast<GlyphPositioning>(SkTextBlob::kFull_Positioning) ==
+ kFull_Positioning, "");
+
+ return SkTo<GlyphPositioning>(fCurrentRun->positioning());
}
void SkTextBlobRunIterator::applyFontToPaint(SkPaint* paint) const {
@@ -792,7 +805,8 @@ void SkTextBlobPriv::Flatten(const SkTextBlob& blob, SkWriteBuffer& buffer) {
buffer.writeByteArray(it.glyphs(), it.glyphCount() * sizeof(uint16_t));
buffer.writeByteArray(it.pos(),
it.glyphCount() * sizeof(SkScalar) *
- SkTextBlob::ScalarsPerGlyph(it.positioning()));
+ SkTextBlob::ScalarsPerGlyph(
+ SkTo<SkTextBlob::GlyphPositioning>(it.positioning())));
if (pe.extended) {
buffer.writeByteArray(it.clusters(), sizeof(uint32_t) * it.glyphCount());
buffer.writeByteArray(it.text(), it.textSize());
@@ -820,7 +834,7 @@ sk_sp<SkTextBlob> SkTextBlobPriv::MakeFromBuffer(SkReadBuffer& reader) {
PositioningAndExtended pe;
pe.intValue = reader.read32();
- SkTextBlob::GlyphPositioning pos = pe.positioning;
+ const auto pos = SkTo<SkTextBlob::GlyphPositioning>(pe.positioning);
if (glyphCount <= 0 || pos > SkTextBlob::kFull_Positioning) {
return nullptr;
}
diff --git a/src/core/SkTextBlobPriv.h b/src/core/SkTextBlobPriv.h
index 70fdf5a57e..bec6b882a0 100644
--- a/src/core/SkTextBlobPriv.h
+++ b/src/core/SkTextBlobPriv.h
@@ -30,4 +30,41 @@ public:
static sk_sp<SkTextBlob> MakeFromBuffer(SkReadBuffer&);
};
+/**
+ * Iterate through all of the text runs of the text blob. For example:
+ * for (SkTextBlobRunIterator it(blob); !it.done(); it.next()) {
+ * .....
+ * }
+ */
+class SkTextBlobRunIterator {
+public:
+ SkTextBlobRunIterator(const SkTextBlob* blob);
+
+ enum GlyphPositioning : uint8_t {
+ kDefault_Positioning = 0, // Default glyph advances -- zero scalars per glyph.
+ kHorizontal_Positioning = 1, // Horizontal positioning -- one scalar per glyph.
+ kFull_Positioning = 2 // Point positioning -- two scalars per glyph.
+ };
+
+ bool done() const;
+ void next();
+
+ uint32_t glyphCount() const;
+ const uint16_t* glyphs() const;
+ const SkScalar* pos() const;
+ const SkPoint& offset() const;
+ void applyFontToPaint(SkPaint*) const;
+ GlyphPositioning positioning() const;
+ uint32_t* clusters() const;
+ uint32_t textSize() const;
+ char* text() const;
+
+ bool isLCD() const;
+
+private:
+ const SkTextBlob::RunRecord* fCurrentRun;
+
+ SkDEBUGCODE(uint8_t* fStorageTop;)
+};
+
#endif // SkTextBlobPriv_DEFINED
diff --git a/src/core/SkTextBlobRunIterator.h b/src/core/SkTextBlobRunIterator.h
deleted file mode 100644
index 18f41d7dcb..0000000000
--- a/src/core/SkTextBlobRunIterator.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef SkTextBlobRunIterator_DEFINED
-#define SkTextBlobRunIterator_DEFINED
-
-#include "SkTextBlob.h"
-
-/**
- * Iterate through all of the text runs of the text blob. For example:
- * for (SkTextBlobRunIterator it(blob); !it.done(); it.next()) {
- * .....
- * }
- */
-class SkTextBlobRunIterator {
-public:
- SkTextBlobRunIterator(const SkTextBlob* blob);
-
- bool done() const;
- void next();
-
- uint32_t glyphCount() const;
- const uint16_t* glyphs() const;
- const SkScalar* pos() const;
- const SkPoint& offset() const;
- void applyFontToPaint(SkPaint*) const;
- SkTextBlob::GlyphPositioning positioning() const;
- uint32_t* clusters() const;
- uint32_t textSize() const;
- char* text() const;
-
- bool isLCD() const;
-
-private:
- const SkTextBlob::RunRecord* fCurrentRun;
-
- SkDEBUGCODE(uint8_t* fStorageTop;)
-};
-
-#endif // SkTextBlobRunIterator_DEFINED
diff --git a/src/gpu/text/GrTextBlob.cpp b/src/gpu/text/GrTextBlob.cpp
index 7b4507eab0..6bd4c1c3bb 100644
--- a/src/gpu/text/GrTextBlob.cpp
+++ b/src/gpu/text/GrTextBlob.cpp
@@ -14,7 +14,6 @@
#include "SkGlyphCache.h"
#include "SkMaskFilterBase.h"
#include "SkPaintPriv.h"
-#include "SkTextBlobRunIterator.h"
#include "SkTextToPathIter.h"
#include "ops/GrAtlasTextOp.h"
#include <new>
diff --git a/src/gpu/text/GrTextBlobCache.h b/src/gpu/text/GrTextBlobCache.h
index 110e0ad7fc..fe245c99d3 100644
--- a/src/gpu/text/GrTextBlobCache.h
+++ b/src/gpu/text/GrTextBlobCache.h
@@ -12,7 +12,7 @@
#include "SkMessageBus.h"
#include "SkRefCnt.h"
#include "SkTArray.h"
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlobPriv.h"
#include "SkTHash.h"
class GrTextBlobCache {
diff --git a/src/gpu/text/GrTextContext.cpp b/src/gpu/text/GrTextContext.cpp
index aeb99f1548..d57055a511 100644
--- a/src/gpu/text/GrTextContext.cpp
+++ b/src/gpu/text/GrTextContext.cpp
@@ -196,7 +196,7 @@ void GrTextContext::regenerateGlyphRunList(GrTextBlob* cacheBlob,
}
cacheBlob->setRunPaintFlags(run, runPaint.skPaint().getFlags());
- SkASSERT(it.positioning() == SkTextBlob::kFull_Positioning);
+ SkASSERT(it.positioning() == SkTextBlobRunIterator::kFull_Positioning);
if (CanDrawAsDistanceFields(runPaint, viewMatrix, props,
shaderCaps.supportsDistanceFieldText(), fOptions)) {
this->drawDFPosText(cacheBlob, run, glyphCache, props, runPaint,
diff --git a/src/gpu/text/GrTextContext.h b/src/gpu/text/GrTextContext.h
index aa4626e411..0093f846b4 100644
--- a/src/gpu/text/GrTextContext.h
+++ b/src/gpu/text/GrTextContext.h
@@ -12,7 +12,6 @@
#include "GrDistanceFieldAdjustTable.h"
#include "GrGeometryProcessor.h"
#include "GrTextUtils.h"
-#include "SkTextBlobRunIterator.h"
#if GR_TEST_UTILS
#include "GrDrawOpTest.h"
diff --git a/src/gpu/text/GrTextUtils.cpp b/src/gpu/text/GrTextUtils.cpp
index ec5389c464..ba033aaaa5 100644
--- a/src/gpu/text/GrTextUtils.cpp
+++ b/src/gpu/text/GrTextUtils.cpp
@@ -10,7 +10,6 @@
#include "SkGlyphCache.h"
#include "SkGr.h"
#include "SkPaint.h"
-#include "SkTextBlobRunIterator.h"
void GrTextUtils::Paint::initFilteredColor() {
GrColor4f filteredColor = SkColorToUnpremulGrColor4f(fPaint->getColor(), *fDstColorSpaceInfo);
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index cdaeef0418..9cd2892a05 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -43,7 +43,7 @@
#include "SkString.h"
#include "SkSurface.h"
#include "SkTemplates.h"
-#include "SkTextBlobRunIterator.h"
+#include "SkTextBlob.h"
#include "SkTextFormatParams.h"
#include "SkTo.h"
#include "SkUtils.h"
diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h
index 2075202cb9..7bd1a0ee11 100644
--- a/src/pdf/SkPDFDevice.h
+++ b/src/pdf/SkPDFDevice.h
@@ -19,7 +19,7 @@
#include "SkSinglyLinkedList.h"
#include "SkStream.h"
#include "SkTDArray.h"
-#include "SkTextBlob.h"
+#include "SkTextBlobPriv.h"
#include "SkKeyedImage.h"
class SkGlyphRunList;
@@ -241,7 +241,6 @@ private:
int getFontResourceIndex(SkTypeface* typeface, uint16_t glyphID);
-
void internalDrawGlyphRun(const SkGlyphRun& glyphRun, SkPoint offset);
void internalDrawPaint(const SkPaint& paint, ContentEntry* contentEntry);