aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@google.com>2018-05-20 23:15:43 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-20 23:15:48 +0000
commit32a4910e57b1fdd3c8671de1ee85e05ca21d079f (patch)
tree9ae07529b8f56406fa5890827782b592895245a0 /src/core
parent5191880cbf3ee4d122b0d11b4945fbab0784fda7 (diff)
Revert "remove toString"
This reverts commit 5191880cbf3ee4d122b0d11b4945fbab0784fda7. Reason for revert: broke flutter Original change's description: > remove toString > > toString may have been used by obsolete debugger only > find out if that is so > > R=​brianosman@google.com,bsalomon@google.com > > Docs-Preview: https://skia.org/?cl=119894 > Bug:830651 > Change-Id: I737f19b7d3fbc869bea2f443fa3b5ed7c1393ffd > Reviewed-on: https://skia-review.googlesource.com/119894 > Commit-Queue: Cary Clark <caryclark@google.com> > Reviewed-by: Brian Salomon <bsalomon@google.com> TBR=bsalomon@google.com,brianosman@google.com,caryclark@google.com,caryclark@skia.org Change-Id: I9f81de6c3615ee0608bcea9081b77239b4b8816c No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: 830651 Reviewed-on: https://skia-review.googlesource.com/129340 Reviewed-by: Cary Clark <caryclark@google.com> Commit-Queue: Cary Clark <caryclark@google.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkBitmap.cpp27
-rw-r--r--src/core/SkBlitter.cpp13
-rw-r--r--src/core/SkBlurImageFilter.cpp13
-rw-r--r--src/core/SkBlurMF.cpp18
-rw-r--r--src/core/SkColorFilter.cpp15
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.cpp13
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.h2
-rw-r--r--src/core/SkDraw_vertices.cpp10
-rw-r--r--src/core/SkImageFilter.cpp29
-rw-r--r--src/core/SkLocalMatrixImageFilter.cpp5
-rw-r--r--src/core/SkLocalMatrixImageFilter.h1
-rw-r--r--src/core/SkMaskFilter.cpp14
-rw-r--r--src/core/SkMatrix.cpp8
-rw-r--r--src/core/SkMatrixImageFilter.cpp22
-rw-r--r--src/core/SkMatrixImageFilter.h1
-rw-r--r--src/core/SkModeColorFilter.cpp7
-rw-r--r--src/core/SkModeColorFilter.h2
-rw-r--r--src/core/SkPaint.cpp149
-rw-r--r--src/core/SkPathEffect.cpp27
-rw-r--r--src/core/SkStringUtils.cpp10
-rw-r--r--src/core/SkStringUtils.h10
21 files changed, 394 insertions, 2 deletions
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 91510007cf..579573367f 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -633,6 +633,33 @@ void SkBitmap::validate() const {
}
#endif
+#include "SkString.h"
+void SkBitmap::toString(SkString* str) const {
+
+ static const char* gColorTypeNames[kLastEnum_SkColorType + 1] = {
+ "UNKNOWN", "A8", "565", "4444", "RGBA", "BGRA", "INDEX8",
+ };
+
+ str->appendf("bitmap: ((%d, %d) %s", this->width(), this->height(),
+ gColorTypeNames[this->colorType()]);
+
+ str->append(" (");
+ if (this->isOpaque()) {
+ str->append("opaque");
+ } else {
+ str->append("transparent");
+ }
+ if (this->isImmutable()) {
+ str->append(", immutable");
+ } else {
+ str->append(", not-immutable");
+ }
+ str->append(")");
+
+ str->appendf(" pixelref:%p", this->pixelRef());
+ str->append(")");
+}
+
///////////////////////////////////////////////////////////////////////////////
bool SkBitmap::peekPixels(SkPixmap* pmap) const {
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 44cc8f1734..5cf8147019 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -861,6 +861,19 @@ public:
typedef Context INHERITED;
};
+ void toString(SkString* str) const override {
+ str->append("Sk3DShader: (");
+
+ if (fProxy) {
+ str->append("Proxy: ");
+ as_SB(fProxy)->toString(str);
+ }
+
+ this->INHERITED::toString(str);
+
+ str->append(")");
+ }
+
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Sk3DShader)
protected:
diff --git a/src/core/SkBlurImageFilter.cpp b/src/core/SkBlurImageFilter.cpp
index 818644818c..a53d061b37 100644
--- a/src/core/SkBlurImageFilter.cpp
+++ b/src/core/SkBlurImageFilter.cpp
@@ -41,6 +41,7 @@ public:
SkRect computeFastBounds(const SkRect&) const override;
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilterImpl)
protected:
@@ -696,3 +697,15 @@ SkIRect SkBlurImageFilterImpl::onFilterNodeBounds(const SkIRect& src, const SkMa
SkVector sigma = map_sigma(fSigma, ctm);
return src.makeOutset(SkScalarCeilToInt(sigma.x() * 3), SkScalarCeilToInt(sigma.y() * 3));
}
+
+void SkBlurImageFilterImpl::toString(SkString* str) const {
+ str->appendf("SkBlurImageFilterImpl: (");
+ str->appendf("sigma: (%f, %f) tileMode: %d input (", fSigma.fWidth, fSigma.fHeight,
+ static_cast<int>(fTileMode));
+
+ if (this->getInput(0)) {
+ this->getInput(0)->toString(str);
+ }
+
+ str->append("))");
+}
diff --git a/src/core/SkBlurMF.cpp b/src/core/SkBlurMF.cpp
index 23cca83655..d716c33f68 100644
--- a/src/core/SkBlurMF.cpp
+++ b/src/core/SkBlurMF.cpp
@@ -77,6 +77,7 @@ public:
void computeFastBounds(const SkRect&, SkRect*) const override;
bool asABlur(BlurRec*) const override;
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurMaskFilterImpl)
protected:
@@ -991,6 +992,23 @@ sk_sp<GrTextureProxy> SkBlurMaskFilterImpl::filterMaskGPU(GrContext* context,
#endif // SK_SUPPORT_GPU
+
+void SkBlurMaskFilterImpl::toString(SkString* str) const {
+ str->append("SkBlurMaskFilterImpl: (");
+
+ str->append("sigma: ");
+ str->appendScalar(fSigma);
+ str->append(" ");
+
+ static const char* gStyleName[kLastEnum_SkBlurStyle + 1] = {
+ "normal", "solid", "outer", "inner"
+ };
+
+ str->appendf("style: %s ", gStyleName[fBlurStyle]);
+ str->appendf("respectCTM: %s ", fRespectCTM ? "true" : "false");
+ str->append(")");
+}
+
void sk_register_blur_maskfilter_createproc() {
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl)
}
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 41ebb42669..5362c1aca7 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -98,6 +98,15 @@ public:
return fOuter->getFlags() & fInner->getFlags();
}
+ void toString(SkString* str) const override {
+ SkString outerS, innerS;
+ fOuter->toString(&outerS);
+ fInner->toString(&innerS);
+ // These strings can be long. SkString::appendf has limitations.
+ str->append(SkStringPrintf("SkComposeColorFilter: outer(%s) inner(%s)", outerS.c_str(),
+ innerS.c_str()));
+ }
+
void onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkArenaAlloc* scratch,
bool shaderIsOpaque) const override {
bool innerIsOpaque = shaderIsOpaque;
@@ -216,6 +225,8 @@ public:
}
#endif
+ void toString(SkString* str) const override;
+
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSRGBGammaColorFilter)
void onAppendStages(SkRasterPipeline* p, SkColorSpace*, SkArenaAlloc* alloc,
@@ -256,6 +267,10 @@ sk_sp<SkFlattenable> SkSRGBGammaColorFilter::CreateProc(SkReadBuffer& buffer) {
return sk_sp<SkFlattenable>(new SkSRGBGammaColorFilter(static_cast<Direction>(dir)));
}
+void SkSRGBGammaColorFilter::toString(SkString* str) const {
+ str->append("srgbgamma");
+}
+
template <SkSRGBGammaColorFilter::Direction dir>
sk_sp<SkColorFilter> MakeSRGBGammaCF() {
static SkColorFilter* gSingleton = new SkSRGBGammaColorFilter(dir);
diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp
index 98fa95ae16..09b0e76136 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.cpp
+++ b/src/core/SkColorMatrixFilterRowMajor255.cpp
@@ -299,6 +299,19 @@ std::unique_ptr<GrFragmentProcessor> SkColorMatrixFilterRowMajor255::asFragmentP
#endif
+void SkColorMatrixFilterRowMajor255::toString(SkString* str) const {
+ str->append("SkColorMatrixFilterRowMajor255: ");
+
+ str->append("matrix: (");
+ for (int i = 0; i < 20; ++i) {
+ str->appendScalar(fMatrix[i]);
+ if (i < 19) {
+ str->append(", ");
+ }
+ }
+ str->append(")");
+}
+
///////////////////////////////////////////////////////////////////////////////
sk_sp<SkColorFilter> SkColorFilter::MakeMatrixFilterRowMajor255(const SkScalar array[20]) {
diff --git a/src/core/SkColorMatrixFilterRowMajor255.h b/src/core/SkColorMatrixFilterRowMajor255.h
index c2a38cf42f..0260379ef9 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.h
+++ b/src/core/SkColorMatrixFilterRowMajor255.h
@@ -27,6 +27,8 @@ public:
GrContext*, const GrColorSpaceInfo&) const override;
#endif
+ void toString(SkString* str) const override;
+
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
protected:
diff --git a/src/core/SkDraw_vertices.cpp b/src/core/SkDraw_vertices.cpp
index de6eaea5b6..000be07cea 100644
--- a/src/core/SkDraw_vertices.cpp
+++ b/src/core/SkDraw_vertices.cpp
@@ -77,6 +77,8 @@ public:
bool isOpaque() const override { return fIsOpaque; }
+ void toString(SkString* str) const override;
+
// For serialization. This will never be called.
Factory getFactory() const override { SK_ABORT("not reached"); return nullptr; }
@@ -97,6 +99,14 @@ private:
typedef SkShaderBase INHERITED;
};
+void SkTriColorShader::toString(SkString* str) const {
+ str->append("SkTriColorShader: (");
+
+ this->INHERITED::toString(str);
+
+ str->append(")");
+}
+
static bool SK_WARN_UNUSED_RESULT
update_tricolor_matrix(const SkMatrix& ctmInv, const SkPoint pts[], const SkPM4f colors[],
int index0, int index1, int index2, Matrix43* result) {
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index 77095fb5b9..aabfef09bb 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -28,6 +28,35 @@
#include "SkGr.h"
#endif
+void SkImageFilter::CropRect::toString(SkString* str) const {
+ if (!fFlags) {
+ return;
+ }
+
+ str->appendf("cropRect (");
+ if (fFlags & CropRect::kHasLeft_CropEdge) {
+ str->appendf("%.2f, ", fRect.fLeft);
+ } else {
+ str->appendf("X, ");
+ }
+ if (fFlags & CropRect::kHasTop_CropEdge) {
+ str->appendf("%.2f, ", fRect.fTop);
+ } else {
+ str->appendf("X, ");
+ }
+ if (fFlags & CropRect::kHasWidth_CropEdge) {
+ str->appendf("%.2f, ", fRect.width());
+ } else {
+ str->appendf("X, ");
+ }
+ if (fFlags & CropRect::kHasHeight_CropEdge) {
+ str->appendf("%.2f", fRect.height());
+ } else {
+ str->appendf("X");
+ }
+ str->appendf(") ");
+}
+
void SkImageFilter::CropRect::applyTo(const SkIRect& imageBounds,
const SkMatrix& ctm,
bool embiggen,
diff --git a/src/core/SkLocalMatrixImageFilter.cpp b/src/core/SkLocalMatrixImageFilter.cpp
index fb484c9448..07db7aff77 100644
--- a/src/core/SkLocalMatrixImageFilter.cpp
+++ b/src/core/SkLocalMatrixImageFilter.cpp
@@ -67,3 +67,8 @@ const {
}
return this->refMe();
}
+
+void SkLocalMatrixImageFilter::toString(SkString* str) const {
+ str->append("SkLocalMatrixImageFilter: (");
+ str->append(")");
+}
diff --git a/src/core/SkLocalMatrixImageFilter.h b/src/core/SkLocalMatrixImageFilter.h
index 79cc73a4fd..89a7e9d145 100644
--- a/src/core/SkLocalMatrixImageFilter.h
+++ b/src/core/SkLocalMatrixImageFilter.h
@@ -18,6 +18,7 @@ class SkLocalMatrixImageFilter : public SkImageFilter {
public:
static sk_sp<SkImageFilter> Make(const SkMatrix& localM, sk_sp<SkImageFilter> input);
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixImageFilter)
protected:
diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp
index 3ff4f93405..52cdc3cc9b 100644
--- a/src/core/SkMaskFilter.cpp
+++ b/src/core/SkMaskFilter.cpp
@@ -405,6 +405,7 @@ public:
}
SkMask::Format getFormat() const override { return SkMask::kA8_Format; }
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeMF)
protected:
@@ -469,6 +470,10 @@ sk_sp<SkFlattenable> SkComposeMF::CreateProc(SkReadBuffer& buffer) {
return SkMaskFilter::MakeCompose(std::move(outer), std::move(inner));
}
+void SkComposeMF::toString(SkString* str) const {
+ str->set("SkComposeMF:");
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
class SkCombineMF : public SkMaskFilterBase {
@@ -493,6 +498,7 @@ public:
SkMask::Format getFormat() const override { return SkMask::kA8_Format; }
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkCombineMF)
protected:
@@ -619,6 +625,10 @@ sk_sp<SkFlattenable> SkCombineMF::CreateProc(SkReadBuffer& buffer) {
return SkMaskFilter::MakeCombine(std::move(dst), std::move(src), mode);
}
+void SkCombineMF::toString(SkString* str) const {
+ str->set("SkCombineMF:");
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
class SkMatrixMF : public SkMaskFilterBase {
@@ -642,6 +652,10 @@ public:
SkMask::Format getFormat() const override { return as_MFB(fFilter)->getFormat(); }
+ void toString(SkString* str) const override {
+ str->set("SkMatrixMF:");
+ }
+
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixMF)
protected:
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
index d3bdb38b78..990f5b4652 100644
--- a/src/core/SkMatrix.cpp
+++ b/src/core/SkMatrix.cpp
@@ -1659,10 +1659,14 @@ size_t SkMatrix::readFromMemory(const void* buffer, size_t length) {
void SkMatrix::dump() const {
SkString str;
- str.appendf("[%8.4f %8.4f %8.4f][%8.4f %8.4f %8.4f][%8.4f %8.4f %8.4f]",
+ this->toString(&str);
+ SkDebugf("%s\n", str.c_str());
+}
+
+void SkMatrix::toString(SkString* str) const {
+ str->appendf("[%8.4f %8.4f %8.4f][%8.4f %8.4f %8.4f][%8.4f %8.4f %8.4f]",
fMat[0], fMat[1], fMat[2], fMat[3], fMat[4], fMat[5],
fMat[6], fMat[7], fMat[8]);
- SkDebugf("%s\n", str.c_str());
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkMatrixImageFilter.cpp b/src/core/SkMatrixImageFilter.cpp
index e56abbc96a..47b0d4245e 100644
--- a/src/core/SkMatrixImageFilter.cpp
+++ b/src/core/SkMatrixImageFilter.cpp
@@ -143,3 +143,25 @@ SkIRect SkMatrixImageFilter::onFilterNodeBounds(const SkIRect& src, const SkMatr
return result;
}
+
+void SkMatrixImageFilter::toString(SkString* str) const {
+ str->appendf("SkMatrixImageFilter: (");
+
+ str->appendf("transform: (%f %f %f %f %f %f %f %f %f)",
+ fTransform[SkMatrix::kMScaleX],
+ fTransform[SkMatrix::kMSkewX],
+ fTransform[SkMatrix::kMTransX],
+ fTransform[SkMatrix::kMSkewY],
+ fTransform[SkMatrix::kMScaleY],
+ fTransform[SkMatrix::kMTransY],
+ fTransform[SkMatrix::kMPersp0],
+ fTransform[SkMatrix::kMPersp1],
+ fTransform[SkMatrix::kMPersp2]);
+
+ str->append("<dt>FilterLevel:</dt><dd>");
+ static const char* gFilterLevelStrings[] = { "None", "Low", "Medium", "High" };
+ str->append(gFilterLevelStrings[fFilterQuality]);
+ str->append("</dd>");
+
+ str->appendf(")");
+}
diff --git a/src/core/SkMatrixImageFilter.h b/src/core/SkMatrixImageFilter.h
index 1a6bcf5ebf..b43df9166d 100644
--- a/src/core/SkMatrixImageFilter.h
+++ b/src/core/SkMatrixImageFilter.h
@@ -31,6 +31,7 @@ public:
SkRect computeFastBounds(const SkRect&) const override;
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixImageFilter)
protected:
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index 7e1e26e91a..b3d6aa2e8d 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -31,6 +31,13 @@ SkModeColorFilter::SkModeColorFilter(SkColor color, SkBlendMode mode) {
fPMColor = SkPreMultiplyColor(fColor);
}
+void SkModeColorFilter::toString(SkString* str) const {
+ str->append("SkModeColorFilter: color: 0x");
+ str->appendHex(fColor);
+ str->append(" mode: ");
+ str->append(SkBlendMode_Name(fMode));
+}
+
bool SkModeColorFilter::asColorMode(SkColor* color, SkBlendMode* mode) const {
if (color) {
*color = fColor;
diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h
index 025839fa47..a2a629f2c1 100644
--- a/src/core/SkModeColorFilter.h
+++ b/src/core/SkModeColorFilter.h
@@ -22,6 +22,8 @@ public:
bool asColorMode(SkColor*, SkBlendMode*) const override;
uint32_t getFlags() const override;
+ void toString(SkString* str) const override;
+
#if SK_SUPPORT_GPU
std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(
GrContext*, const GrColorSpaceInfo&) const override;
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index c76b98121e..82dec0ea8c 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -1384,6 +1384,155 @@ const SkRect& SkPaint::doComputeFastBounds(const SkRect& origSrc,
return *storage;
}
+void SkPaint::toString(SkString* str) const {
+ str->append("<dl><dt>SkPaint:</dt><dd><dl>");
+
+ SkTypeface* typeface = this->getTypeface();
+ if (typeface) {
+ SkDynamicMemoryWStream ostream;
+ typeface->serialize(&ostream);
+ std::unique_ptr<SkStreamAsset> istream(ostream.detachAsStream());
+
+ SkFontDescriptor descriptor;
+ if (!SkFontDescriptor::Deserialize(istream.get(), &descriptor)) {
+ str->append("<dt>FontDescriptor deserialization failed</dt>");
+ } else {
+ str->append("<dt>Font Family Name:</dt><dd>");
+ str->append(descriptor.getFamilyName());
+ str->append("</dd><dt>Font Full Name:</dt><dd>");
+ str->append(descriptor.getFullName());
+ str->append("</dd><dt>Font PS Name:</dt><dd>");
+ str->append(descriptor.getPostscriptName());
+ str->append("</dd>");
+ }
+ }
+
+ str->append("<dt>TextSize:</dt><dd>");
+ str->appendScalar(this->getTextSize());
+ str->append("</dd>");
+
+ str->append("<dt>TextScaleX:</dt><dd>");
+ str->appendScalar(this->getTextScaleX());
+ str->append("</dd>");
+
+ str->append("<dt>TextSkewX:</dt><dd>");
+ str->appendScalar(this->getTextSkewX());
+ str->append("</dd>");
+
+ SkPathEffect* pathEffect = this->getPathEffect();
+ if (pathEffect) {
+ str->append("<dt>PathEffect:</dt><dd>");
+ pathEffect->toString(str);
+ str->append("</dd>");
+ }
+
+ if (const auto* shader = as_SB(this->getShader())) {
+ str->append("<dt>Shader:</dt><dd>");
+ shader->toString(str);
+ str->append("</dd>");
+ }
+
+ if (!this->isSrcOver()) {
+ str->appendf("<dt>Xfermode:</dt><dd>%d</dd>", fBlendMode);
+ }
+
+ SkMaskFilter* maskFilter = this->getMaskFilter();
+ if (maskFilter) {
+ str->append("<dt>MaskFilter:</dt><dd>");
+ as_MFB(maskFilter)->toString(str);
+ str->append("</dd>");
+ }
+
+ SkColorFilter* colorFilter = this->getColorFilter();
+ if (colorFilter) {
+ str->append("<dt>ColorFilter:</dt><dd>");
+ colorFilter->toString(str);
+ str->append("</dd>");
+ }
+
+ SkDrawLooper* looper = this->getLooper();
+ if (looper) {
+ str->append("<dt>DrawLooper:</dt><dd>");
+ looper->toString(str);
+ str->append("</dd>");
+ }
+
+ SkImageFilter* imageFilter = this->getImageFilter();
+ if (imageFilter) {
+ str->append("<dt>ImageFilter:</dt><dd>");
+ imageFilter->toString(str);
+ str->append("</dd>");
+ }
+
+ str->append("<dt>Color:</dt><dd>0x");
+ SkColor color = this->getColor();
+ str->appendHex(color);
+ str->append("</dd>");
+
+ str->append("<dt>Stroke Width:</dt><dd>");
+ str->appendScalar(this->getStrokeWidth());
+ str->append("</dd>");
+
+ str->append("<dt>Stroke Miter:</dt><dd>");
+ str->appendScalar(this->getStrokeMiter());
+ str->append("</dd>");
+
+ str->append("<dt>Flags:</dt><dd>(");
+ if (this->getFlags()) {
+ bool needSeparator = false;
+ SkAddFlagToString(str, this->isAntiAlias(), "AntiAlias", &needSeparator);
+ SkAddFlagToString(str, this->isDither(), "Dither", &needSeparator);
+ SkAddFlagToString(str, this->isFakeBoldText(), "FakeBoldText", &needSeparator);
+ SkAddFlagToString(str, this->isLinearText(), "LinearText", &needSeparator);
+ SkAddFlagToString(str, this->isSubpixelText(), "SubpixelText", &needSeparator);
+ SkAddFlagToString(str, this->isLCDRenderText(), "LCDRenderText", &needSeparator);
+ SkAddFlagToString(str, this->isEmbeddedBitmapText(),
+ "EmbeddedBitmapText", &needSeparator);
+ SkAddFlagToString(str, this->isAutohinted(), "Autohinted", &needSeparator);
+ SkAddFlagToString(str, this->isVerticalText(), "VerticalText", &needSeparator);
+ } else {
+ str->append("None");
+ }
+ str->append(")</dd>");
+
+ str->append("<dt>FilterLevel:</dt><dd>");
+ static const char* gFilterQualityStrings[] = { "None", "Low", "Medium", "High" };
+ str->append(gFilterQualityStrings[this->getFilterQuality()]);
+ str->append("</dd>");
+
+ str->append("<dt>TextAlign:</dt><dd>");
+ static const char* gTextAlignStrings[SkPaint::kAlignCount] = { "Left", "Center", "Right" };
+ str->append(gTextAlignStrings[this->getTextAlign()]);
+ str->append("</dd>");
+
+ str->append("<dt>CapType:</dt><dd>");
+ static const char* gStrokeCapStrings[SkPaint::kCapCount] = { "Butt", "Round", "Square" };
+ str->append(gStrokeCapStrings[this->getStrokeCap()]);
+ str->append("</dd>");
+
+ str->append("<dt>JoinType:</dt><dd>");
+ static const char* gJoinStrings[SkPaint::kJoinCount] = { "Miter", "Round", "Bevel" };
+ str->append(gJoinStrings[this->getStrokeJoin()]);
+ str->append("</dd>");
+
+ str->append("<dt>Style:</dt><dd>");
+ static const char* gStyleStrings[SkPaint::kStyleCount] = { "Fill", "Stroke", "StrokeAndFill" };
+ str->append(gStyleStrings[this->getStyle()]);
+ str->append("</dd>");
+
+ str->append("<dt>TextEncoding:</dt><dd>");
+ static const char* gTextEncodingStrings[] = { "UTF8", "UTF16", "UTF32", "GlyphID" };
+ str->append(gTextEncodingStrings[this->getTextEncoding()]);
+ str->append("</dd>");
+
+ str->append("<dt>Hinting:</dt><dd>");
+ static const char* gHintingStrings[] = { "None", "Slight", "Normal", "Full" };
+ str->append(gHintingStrings[this->getHinting()]);
+ str->append("</dd>");
+
+ str->append("</dd></dl></dl>");
+}
+
///////////////////////////////////////////////////////////////////////////////
static bool has_thick_frame(const SkPaint& paint) {
diff --git a/src/core/SkPathEffect.cpp b/src/core/SkPathEffect.cpp
index e315275196..09d7e542c7 100644
--- a/src/core/SkPathEffect.cpp
+++ b/src/core/SkPathEffect.cpp
@@ -51,10 +51,23 @@ protected:
sk_sp<SkPathEffect> fPE0;
sk_sp<SkPathEffect> fPE1;
+ void toString(SkString* str) const override;
+
private:
typedef SkPathEffect INHERITED;
};
+void SkPairPathEffect::toString(SkString* str) const {
+ str->appendf("first: ");
+ if (fPE0) {
+ fPE0->toString(str);
+ }
+ str->appendf(" second: ");
+ if (fPE1) {
+ fPE1->toString(str);
+ }
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
/** \class SkComposePathEffect
@@ -91,6 +104,7 @@ public:
}
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposePathEffect)
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
@@ -116,6 +130,12 @@ sk_sp<SkFlattenable> SkComposePathEffect::CreateProc(SkReadBuffer& buffer) {
return SkComposePathEffect::Make(std::move(pe0), std::move(pe1));
}
+void SkComposePathEffect::toString(SkString* str) const {
+ str->appendf("SkComposePathEffect: (");
+ this->INHERITED::toString(str);
+ str->appendf(")");
+}
+
///////////////////////////////////////////////////////////////////////////////
/** \class SkSumPathEffect
@@ -148,6 +168,7 @@ public:
}
+ void toString(SkString* str) const override;
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSumPathEffect)
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
@@ -173,6 +194,12 @@ sk_sp<SkFlattenable> SkSumPathEffect::CreateProc(SkReadBuffer& buffer) {
return SkSumPathEffect::Make(pe0, pe1);
}
+void SkSumPathEffect::toString(SkString* str) const {
+ str->appendf("SkSumPathEffect: (");
+ this->INHERITED::toString(str);
+ str->appendf(")");
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
sk_sp<SkPathEffect> SkPathEffect::MakeSum(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second) {
diff --git a/src/core/SkStringUtils.cpp b/src/core/SkStringUtils.cpp
index 00d8c8787c..9745b2325b 100644
--- a/src/core/SkStringUtils.cpp
+++ b/src/core/SkStringUtils.cpp
@@ -9,6 +9,16 @@
#include "SkStringUtils.h"
#include "SkUtils.h"
+void SkAddFlagToString(SkString* string, bool flag, const char* flagStr, bool* needSeparator) {
+ if (flag) {
+ if (*needSeparator) {
+ string->append("|");
+ }
+ string->append(flagStr);
+ *needSeparator = true;
+ }
+}
+
void SkAppendScalar(SkString* str, SkScalar value, SkScalarAsStringType asType) {
switch (asType) {
case kHex_SkScalarAsStringType:
diff --git a/src/core/SkStringUtils.h b/src/core/SkStringUtils.h
index ac587d6717..f2a1443ff4 100644
--- a/src/core/SkStringUtils.h
+++ b/src/core/SkStringUtils.h
@@ -12,6 +12,16 @@
class SkString;
+/**
+ * Add 'flagStr' to 'string' and set 'needSeparator' to true only if 'flag' is
+ * true. If 'needSeparator' is true append a '|' before 'flagStr'. This method
+ * is used to streamline the creation of ASCII flag strings within the toString
+ * methods.
+ */
+void SkAddFlagToString(SkString* string, bool flag,
+ const char* flagStr, bool* needSeparator);
+
+
enum SkScalarAsStringType {
kDec_SkScalarAsStringType,
kHex_SkScalarAsStringType,