aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar halcanary <halcanary@google.com>2015-10-27 14:01:05 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-10-27 14:01:05 -0700
commit337797580de42cdb722caab4bed121311ed7d0d2 (patch)
tree3cd5b713b9d45ba843ab102972335121efcf2c7c /src
parentaef4971443414990cad984817ce4b90fee04bd21 (diff)
Make SkTextBlob::RunIterator public.
Motivation: This will be easier than adding a friend every time I want to create a one-off SkCanvas subclass or SkRemote::Encoder subclass. See also: SkPath::Iter. Review URL: https://codereview.chromium.org/1411723005
Diffstat (limited to 'src')
-rw-r--r--src/core/SkDevice.cpp4
-rw-r--r--src/core/SkTextBlob.cpp28
-rw-r--r--src/core/SkTextBlobRunIterator.h40
-rw-r--r--src/gpu/GrAtlasTextContext.cpp8
-rw-r--r--src/gpu/GrAtlasTextContext.h4
-rw-r--r--src/gpu/GrStencilAndCoverTextContext.cpp3
-rw-r--r--src/gpu/GrTextBlobCache.h4
-rw-r--r--src/gpu/GrTextContext.cpp4
8 files changed, 68 insertions, 27 deletions
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index 1f270af572..34c171db90 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -17,7 +17,7 @@
#include "SkRasterClip.h"
#include "SkRSXform.h"
#include "SkShader.h"
-#include "SkTextBlob.h"
+#include "SkTextBlobRunIterator.h"
#include "SkTextToPathIter.h"
SkBaseDevice::SkBaseDevice(const SkSurfaceProps& surfaceProps)
@@ -103,7 +103,7 @@ void SkBaseDevice::drawTextBlob(const SkDraw& draw, const SkTextBlob* blob, SkSc
SkPaint runPaint = paint;
- SkTextBlob::RunIterator it(blob);
+ SkTextBlobRunIterator it(blob);
for (;!it.done(); it.next()) {
size_t textLen = it.glyphCount() * sizeof(uint16_t);
const SkPoint& offset = it.offset();
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index 7fd96ad8b2..ed26f43db8 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -5,7 +5,7 @@
* found in the LICENSE file.
*/
-#include "SkTextBlob.h"
+#include "SkTextBlobRunIterator.h"
#include "SkReadBuffer.h"
#include "SkTypeface.h"
@@ -220,7 +220,7 @@ void SkTextBlob::flatten(SkWriteBuffer& buffer) const {
buffer.writeRect(fBounds);
SkPaint runPaint;
- RunIterator it(this);
+ SkTextBlobRunIterator it(this);
while (!it.done()) {
SkASSERT(it.glyphCount() > 0);
@@ -294,58 +294,58 @@ unsigned SkTextBlob::ScalarsPerGlyph(GlyphPositioning pos) {
return pos;
}
-SkTextBlob::RunIterator::RunIterator(const SkTextBlob* blob)
- : fCurrentRun(RunRecord::First(blob))
+SkTextBlobRunIterator::SkTextBlobRunIterator(const SkTextBlob* blob)
+ : fCurrentRun(SkTextBlob::RunRecord::First(blob))
, fRemainingRuns(blob->fRunCount) {
SkDEBUGCODE(fStorageTop = (uint8_t*)blob + blob->fStorageSize;)
}
-bool SkTextBlob::RunIterator::done() const {
+bool SkTextBlobRunIterator::done() const {
return fRemainingRuns <= 0;
}
-void SkTextBlob::RunIterator::next() {
+void SkTextBlobRunIterator::next() {
SkASSERT(!this->done());
if (!this->done()) {
SkDEBUGCODE(fCurrentRun->validate(fStorageTop);)
- fCurrentRun = RunRecord::Next(fCurrentRun);
+ fCurrentRun = SkTextBlob::RunRecord::Next(fCurrentRun);
fRemainingRuns--;
}
}
-uint32_t SkTextBlob::RunIterator::glyphCount() const {
+uint32_t SkTextBlobRunIterator::glyphCount() const {
SkASSERT(!this->done());
return fCurrentRun->glyphCount();
}
-const uint16_t* SkTextBlob::RunIterator::glyphs() const {
+const uint16_t* SkTextBlobRunIterator::glyphs() const {
SkASSERT(!this->done());
return fCurrentRun->glyphBuffer();
}
-const SkScalar* SkTextBlob::RunIterator::pos() const {
+const SkScalar* SkTextBlobRunIterator::pos() const {
SkASSERT(!this->done());
return fCurrentRun->posBuffer();
}
-const SkPoint& SkTextBlob::RunIterator::offset() const {
+const SkPoint& SkTextBlobRunIterator::offset() const {
SkASSERT(!this->done());
return fCurrentRun->offset();
}
-SkTextBlob::GlyphPositioning SkTextBlob::RunIterator::positioning() const {
+SkTextBlob::GlyphPositioning SkTextBlobRunIterator::positioning() const {
SkASSERT(!this->done());
return fCurrentRun->positioning();
}
-void SkTextBlob::RunIterator::applyFontToPaint(SkPaint* paint) const {
+void SkTextBlobRunIterator::applyFontToPaint(SkPaint* paint) const {
SkASSERT(!this->done());
fCurrentRun->font().applyToPaint(paint);
}
-bool SkTextBlob::RunIterator::isLCD() const {
+bool SkTextBlobRunIterator::isLCD() const {
return SkToBool(fCurrentRun->font().flags() & SkPaint::kLCDRenderText_Flag);
}
diff --git a/src/core/SkTextBlobRunIterator.h b/src/core/SkTextBlobRunIterator.h
new file mode 100644
index 0000000000..42bbac0bc9
--- /dev/null
+++ b/src/core/SkTextBlobRunIterator.h
@@ -0,0 +1,40 @@
+/*
+ * 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;
+ bool isLCD() const;
+
+private:
+ const SkTextBlob::RunRecord* fCurrentRun;
+ int fRemainingRuns;
+
+ SkDEBUGCODE(uint8_t* fStorageTop;)
+};
+
+#endif // SkTextBlobRunIterator_DEFINED
diff --git a/src/gpu/GrAtlasTextContext.cpp b/src/gpu/GrAtlasTextContext.cpp
index 108d63c919..4d6a675d99 100644
--- a/src/gpu/GrAtlasTextContext.cpp
+++ b/src/gpu/GrAtlasTextContext.cpp
@@ -228,7 +228,7 @@ GrColor GrAtlasTextContext::ComputeCanonicalColor(const SkPaint& paint, bool lcd
// textblob is being built and cache it. However, for the time being textblobs mostly only have 1
// run so this is not a big deal to compute here.
bool GrAtlasTextContext::HasLCD(const SkTextBlob* blob) {
- SkTextBlob::RunIterator it(blob);
+ SkTextBlobRunIterator it(blob);
for (; !it.done(); it.next()) {
if (it.isLCD()) {
return true;
@@ -496,7 +496,7 @@ void GrAtlasTextContext::regenerateTextBlob(GrAtlasTextBlob* cacheBlob,
// Regenerate textblob
SkPaint runPaint = skPaint;
- SkTextBlob::RunIterator it(blob);
+ SkTextBlobRunIterator it(blob);
for (int run = 0; !it.done(); it.next(), run++) {
int glyphCount = it.glyphCount();
size_t textLen = glyphCount * sizeof(uint16_t);
@@ -2050,7 +2050,7 @@ private:
};
void GrAtlasTextContext::flushRunAsPaths(GrDrawContext* dc, GrRenderTarget* rt,
- const SkTextBlob::RunIterator& it,
+ const SkTextBlobRunIterator& it,
const GrClip& clip, const SkPaint& skPaint,
SkDrawFilter* drawFilter, const SkMatrix& viewMatrix,
const SkIRect& clipBounds, SkScalar x, SkScalar y) {
@@ -2190,7 +2190,7 @@ void GrAtlasTextContext::flush(const SkTextBlob* blob,
GrColor color = grPaint.getColor();
- SkTextBlob::RunIterator it(blob);
+ SkTextBlobRunIterator it(blob);
for (int run = 0; !it.done(); it.next(), run++) {
if (cacheBlob->fRuns[run].fDrawAsPaths) {
this->flushRunAsPaths(dc, rt, it, clip, skPaint,
diff --git a/src/gpu/GrAtlasTextContext.h b/src/gpu/GrAtlasTextContext.h
index 3462b65058..f5421a669c 100644
--- a/src/gpu/GrAtlasTextContext.h
+++ b/src/gpu/GrAtlasTextContext.h
@@ -12,7 +12,7 @@
#include "GrAtlasTextBlob.h"
#include "GrGeometryProcessor.h"
-#include "SkTextBlob.h"
+#include "SkTextBlobRunIterator.h"
#ifdef GR_TEST_UTILS
#include "GrBatchTest.h"
@@ -73,7 +73,7 @@ private:
GrGlyph*);
inline void flushRunAsPaths(GrDrawContext*, GrRenderTarget*,
- const SkTextBlob::RunIterator&, const GrClip& clip,
+ const SkTextBlobRunIterator&, const GrClip& clip,
const SkPaint&, SkDrawFilter*,
const SkMatrix& viewMatrix, const SkIRect& clipBounds, SkScalar x,
SkScalar y);
diff --git a/src/gpu/GrStencilAndCoverTextContext.cpp b/src/gpu/GrStencilAndCoverTextContext.cpp
index ee1f1af410..5289d092c7 100644
--- a/src/gpu/GrStencilAndCoverTextContext.cpp
+++ b/src/gpu/GrStencilAndCoverTextContext.cpp
@@ -19,6 +19,7 @@
#include "SkGpuDevice.h"
#include "SkGrPriv.h"
#include "SkPath.h"
+#include "SkTextBlobRunIterator.h"
#include "SkTextMapStateProc.h"
#include "SkTextFormatParams.h"
@@ -204,7 +205,7 @@ void GrStencilAndCoverTextContext::TextBlob::init(const SkTextBlob* skBlob,
const SkPaint& skPaint) {
fCpuMemorySize = sizeof(TextBlob);
SkPaint runPaint(skPaint);
- for (SkTextBlob::RunIterator iter(skBlob); !iter.done(); iter.next()) {
+ for (SkTextBlobRunIterator iter(skBlob); !iter.done(); iter.next()) {
iter.applyFontToPaint(&runPaint); // No need to re-seed the paint.
TextRun* run = SkNEW_INSERT_AT_LLIST_TAIL(this, TextRun, (runPaint));
diff --git a/src/gpu/GrTextBlobCache.h b/src/gpu/GrTextBlobCache.h
index 5f24e2ac16..8eee9d13db 100644
--- a/src/gpu/GrTextBlobCache.h
+++ b/src/gpu/GrTextBlobCache.h
@@ -10,7 +10,7 @@
#include "GrAtlasTextContext.h"
#include "SkTDynamicHash.h"
-#include "SkTextBlob.h"
+#include "SkTextBlobRunIterator.h"
class GrTextBlobCache {
public:
@@ -98,7 +98,7 @@ public:
// TODO move to SkTextBlob
static void BlobGlyphCount(int* glyphCount, int* runCount, const SkTextBlob* blob) {
- SkTextBlob::RunIterator itCounter(blob);
+ SkTextBlobRunIterator itCounter(blob);
for (; !itCounter.done(); itCounter.next(), (*runCount)++) {
*glyphCount += itCounter.glyphCount();
}
diff --git a/src/gpu/GrTextContext.cpp b/src/gpu/GrTextContext.cpp
index a2e245d7e5..0ef18aaeb2 100644
--- a/src/gpu/GrTextContext.cpp
+++ b/src/gpu/GrTextContext.cpp
@@ -17,7 +17,7 @@
#include "SkGlyphCache.h"
#include "SkGpuDevice.h"
#include "SkGrPriv.h"
-#include "SkTextBlob.h"
+#include "SkTextBlobRunIterator.h"
#include "SkTextMapStateProc.h"
#include "SkTextToPathIter.h"
@@ -116,7 +116,7 @@ void GrTextContext::drawTextBlob(GrDrawContext* dc, GrRenderTarget* rt,
SkDrawFilter* drawFilter, const SkIRect& clipBounds) {
SkPaint runPaint = skPaint;
- SkTextBlob::RunIterator it(blob);
+ SkTextBlobRunIterator it(blob);
for (;!it.done(); it.next()) {
size_t textLen = it.glyphCount() * sizeof(uint16_t);
const SkPoint& offset = it.offset();