[SkDebugger] Show more text blob details
* run count
* glyph count (per run)
* run paint (per run)
R=robertphillips@google.com
Review URL: https://codereview.chromium.org/1507033003
diff --git a/src/utils/debugger/SkDrawCommand.cpp b/src/utils/debugger/SkDrawCommand.cpp
index 66f0c14..330c2c9 100644
--- a/src/utils/debugger/SkDrawCommand.cpp
+++ b/src/utils/debugger/SkDrawCommand.cpp
@@ -11,6 +11,7 @@
#include "SkObjectParser.h"
#include "SkPicture.h"
#include "SkTextBlob.h"
+#include "SkTextBlobRunIterator.h"
// TODO(chudy): Refactor into non subclass model.
@@ -678,18 +679,36 @@
SkDrawTextBlobCommand::SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y,
const SkPaint& paint)
: INHERITED(kDrawTextBlob_OpType)
- , fBlob(blob)
+ , fBlob(SkRef(blob))
, fXPos(x)
, fYPos(y)
, fPaint(paint) {
- blob->ref();
-
- // FIXME: push blob info
+ SkAutoTDelete<SkString> runsStr(new SkString);
fInfo.push(SkObjectParser::ScalarToString(x, "XPOS: "));
fInfo.push(SkObjectParser::ScalarToString(y, "YPOS: "));
fInfo.push(SkObjectParser::RectToString(fBlob->bounds(), "Bounds: "));
+ fInfo.push(runsStr);
fInfo.push(SkObjectParser::PaintToString(paint));
+
+ unsigned runs = 0;
+ SkPaint runPaint(paint);
+ SkTextBlobRunIterator iter(blob);
+ while (!iter.done()) {
+ SkAutoTDelete<SkString> label(new SkString);
+ label->printf("==== Run [%d] ====", runs++);
+ fInfo.push(label.release());
+
+ fInfo.push(SkObjectParser::IntToString(iter.glyphCount(), "GlyphCount: "));
+ iter.applyFontToPaint(&runPaint);
+ fInfo.push(SkObjectParser::PaintToString(runPaint));
+
+ iter.next();
+ }
+
+ runsStr->printf("Runs: %d", runs);
+ // runStr is owned by fInfo at this point.
+ runsStr.release();
}
void SkDrawTextBlobCommand::execute(SkCanvas* canvas) const {