180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 8d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDumpCanvas.h" 10d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger 11d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger#ifdef SK_DEVELOPER 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPicture.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPixelRef.h" 14363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger#include "SkRRect.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include <stdarg.h> 170a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#include <stdio.h> 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// needed just to know that these are all subclassed from SkFlattenable 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkShader.h" 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPathEffect.h" 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkXfermode.h" 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkColorFilter.h" 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPathEffect.h" 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkMaskFilter.h" 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void toString(const SkRect& r, SkString* str) { 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf("[%g,%g %g:%g]", 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(r.fLeft), SkScalarToFloat(r.fTop), 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(r.width()), SkScalarToFloat(r.height())); 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void toString(const SkIRect& r, SkString* str) { 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf("[%d,%d %d:%d]", r.fLeft, r.fTop, r.width(), r.height()); 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 37363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerstatic void toString(const SkRRect& rrect, SkString* str) { 38363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkRect r = rrect.getBounds(); 39363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger str->appendf("[%g,%g %g:%g]", 40363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkScalarToFloat(r.fLeft), SkScalarToFloat(r.fTop), 41363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkScalarToFloat(r.width()), SkScalarToFloat(r.height())); 42363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger if (rrect.isOval()) { 43363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger str->append("()"); 44363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger } else if (rrect.isSimple()) { 45363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger const SkVector& rad = rrect.getSimpleRadii(); 46363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger str->appendf("(%g,%g)", rad.x(), rad.y()); 47363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger } else if (rrect.isComplex()) { 48363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkVector radii[4] = { 49363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger rrect.radii(SkRRect::kUpperLeft_Corner), 50363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger rrect.radii(SkRRect::kUpperRight_Corner), 51363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger rrect.radii(SkRRect::kLowerRight_Corner), 52363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger rrect.radii(SkRRect::kLowerLeft_Corner), 53363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger }; 54363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger str->appendf("(%g,%g %g,%g %g,%g %g,%g)", 55363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger radii[0].x(), radii[0].y(), 56363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger radii[1].x(), radii[1].y(), 57363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger radii[2].x(), radii[2].y(), 58363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger radii[3].x(), radii[3].y()); 59363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger } 60363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 61363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void dumpVerbs(const SkPath& path, SkString* str) { 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPath::Iter iter(path, false); 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPoint pts[4]; 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (;;) { 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (iter.next(pts, false)) { 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPath::kMove_Verb: 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf(" M%g,%g", pts[0].fX, pts[0].fY); 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPath::kLine_Verb: 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf(" L%g,%g", pts[0].fX, pts[0].fY); 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPath::kQuad_Verb: 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf(" Q%g,%g,%g,%g", pts[1].fX, pts[1].fY, 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru pts[2].fX, pts[2].fY); 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPath::kCubic_Verb: 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf(" C%g,%g,%g,%g,%g,%g", pts[1].fX, pts[1].fY, 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY); 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPath::kClose_Verb: 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append("X"); 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPath::kDone_Verb: 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 8658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger case SkPath::kConic_Verb: 8758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkASSERT(0); 8858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger break; 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void toString(const SkPath& path, SkString* str) { 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (path.isEmpty()) { 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append("path:empty"); 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else { 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(path.getBounds(), str); 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if 1 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString s; 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpVerbs(path, &s); 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append(s.c_str()); 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append("]"); 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->prepend("path:["); 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const char* toString(SkRegion::Op op) { 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const char* gOpNames[] = { 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru "DIFF", "SECT", "UNION", "XOR", "RDIFF", "REPLACE" 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return gOpNames[op]; 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void toString(const SkRegion& rgn, SkString* str) { 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append("Region:["); 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(rgn.getBounds(), str); 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append("]"); 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (rgn.isComplex()) { 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append(".complex"); 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const char* toString(SkCanvas::VertexMode vm) { 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const char* gVMNames[] = { 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru "TRIANGLES", "STRIP", "FAN" 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return gVMNames[vm]; 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const char* toString(SkCanvas::PointMode pm) { 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const char* gPMNames[] = { 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru "POINTS", "LINES", "POLYGON" 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return gPMNames[pm]; 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void toString(const void* text, size_t byteLen, SkPaint::TextEncoding enc, 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString* str) { 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // FIXME: this code appears to be untested - and probably unused - and probably wrong 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (enc) { 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPaint::kUTF8_TextEncoding: 1430a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger str->appendf("\"%.*s\"%s", (int)SkTMax<size_t>(byteLen, 32), (const char*) text, 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru byteLen > 32 ? "..." : ""); 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPaint::kUTF16_TextEncoding: 1470a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger str->appendf("\"%.*ls\"%s", (int)SkTMax<size_t>(byteLen, 32), (const wchar_t*) text, 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru byteLen > 64 ? "..." : ""); 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPaint::kUTF32_TextEncoding: 1510a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger str->appendf("\"%.*ls\"%s", (int)SkTMax<size_t>(byteLen, 32), (const wchar_t*) text, 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru byteLen > 128 ? "..." : ""); 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkPaint::kGlyphID_TextEncoding: 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->append("<glyphs>"); 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(false); 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic SkBitmap make_wideopen_bm() { 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const int WIDE_OPEN = 16384; 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBitmap bm; 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bm.setConfig(SkBitmap::kNo_Config, WIDE_OPEN, WIDE_OPEN); 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return bm; 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDumpCanvas::SkDumpCanvas(Dumper* dumper) : INHERITED(make_wideopen_bm()) { 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fNestLevel = 0; 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkSafeRef(dumper); 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fDumper = dumper; 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDumpCanvas::~SkDumpCanvas() { 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkSafeUnref(fDumper); 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::dump(Verb verb, const SkPaint* paint, 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char format[], ...) { 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const size_t BUFFER_SIZE = 1024; 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru char buffer[BUFFER_SIZE]; 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru va_list args; 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru va_start(args, format); 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru vsnprintf(buffer, BUFFER_SIZE, format, args); 19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru va_end(args); 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fDumper) { 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fDumper->dump(this, verb, buffer, paint); 19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint SkDumpCanvas::save(SaveFlags flags) { 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kSave_Verb, NULL, "save(0x%X)", flags); 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::save(flags); 20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint SkDumpCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, 20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SaveFlags flags) { 20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.printf("saveLayer(0x%X)", flags); 21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (bounds) { 21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.append(" bounds"); 21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(*bounds, &str); 21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (paint) { 21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (paint->getAlpha() != 0xFF) { 21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.appendf(" alpha:0x%02X", paint->getAlpha()); 21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (paint->getXfermode()) { 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.appendf(" xfermode:%p", paint->getXfermode()); 22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kSave_Verb, paint, str.c_str()); 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::saveLayer(bounds, paint, flags); 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::restore() { 22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->INHERITED::restore(); 22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kRestore_Verb, NULL, "restore"); 22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::translate(SkScalar dx, SkScalar dy) { 23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kMatrix_Verb, NULL, "translate(%g %g)", 23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(dx), SkScalarToFloat(dy)); 23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::translate(dx, dy); 23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::scale(SkScalar sx, SkScalar sy) { 23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kMatrix_Verb, NULL, "scale(%g %g)", 23980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(sx), SkScalarToFloat(sy)); 24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::scale(sx, sy); 24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::rotate(SkScalar degrees) { 24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kMatrix_Verb, NULL, "rotate(%g)", SkScalarToFloat(degrees)); 24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::rotate(degrees); 24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::skew(SkScalar sx, SkScalar sy) { 24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kMatrix_Verb, NULL, "skew(%g %g)", 25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(sx), SkScalarToFloat(sy)); 25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::skew(sx, sy); 25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::concat(const SkMatrix& matrix) { 25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 256d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger matrix.toString(&str); 25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kMatrix_Verb, NULL, "concat(%s)", str.c_str()); 25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::concat(matrix); 25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::setMatrix(const SkMatrix& matrix) { 26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 263d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger matrix.toString(&str); 26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kMatrix_Verb, NULL, "setMatrix(%s)", str.c_str()); 26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->INHERITED::setMatrix(matrix); 26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 27080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const char* bool_to_aastring(bool doAA) { 27180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return doAA ? "AA" : "BW"; 27280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 27380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 27480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { 27580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 27680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(rect, &str); 27780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kClip_Verb, NULL, "clipRect(%s %s %s)", str.c_str(), toString(op), 27880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool_to_aastring(doAA)); 27980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::clipRect(rect, op, doAA); 28080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 28180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 282363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerbool SkDumpCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) { 283363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkString str; 284363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger toString(rrect, &str); 285363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger this->dump(kClip_Verb, NULL, "clipRRect(%s %s %s)", str.c_str(), toString(op), 286363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger bool_to_aastring(doAA)); 287363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger return this->INHERITED::clipRRect(rrect, op, doAA); 288363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 289363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { 29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(path, &str); 29380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kClip_Verb, NULL, "clipPath(%s %s %s)", str.c_str(), toString(op), 29480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool_to_aastring(doAA)); 29580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::clipPath(path, op, doAA); 29680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 29780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 29880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDumpCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { 29980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 30080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(deviceRgn, &str); 30180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kClip_Verb, NULL, "clipRegion(%s %s)", str.c_str(), 30280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(op)); 30380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return this->INHERITED::clipRegion(deviceRgn, op); 30480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 30580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 30680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 30780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 30880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawPaint(const SkPaint& paint) { 30980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawPaint_Verb, &paint, "drawPaint()"); 31080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 31180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 31280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawPoints(PointMode mode, size_t count, 31380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPoint pts[], const SkPaint& paint) { 31480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawPoints_Verb, &paint, "drawPoints(%s, %d)", toString(mode), 31580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru count); 31680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 31780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 318363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergervoid SkDumpCanvas::drawOval(const SkRect& rect, const SkPaint& paint) { 319363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkString str; 320363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger toString(rect, &str); 321363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger this->dump(kDrawOval_Verb, &paint, "drawOval(%s)", str.c_str()); 322363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 323363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 32480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { 32580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 32680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(rect, &str); 32780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawRect_Verb, &paint, "drawRect(%s)", str.c_str()); 32880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 32980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 330363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergervoid SkDumpCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) { 331363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger SkString str; 332363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger toString(rrect, &str); 333363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger this->dump(kDrawRRect_Verb, &paint, "drawRRect(%s)", str.c_str()); 334363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger} 335363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 33680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawPath(const SkPath& path, const SkPaint& paint) { 33780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 33880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(path, &str); 33980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawPath_Verb, &paint, "drawPath(%s)", str.c_str()); 34080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 34180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 34280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, 34380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPaint* paint) { 34480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 345d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger bitmap.toString(&str); 34680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawBitmap_Verb, paint, "drawBitmap(%s %g %g)", str.c_str(), 34780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(x), SkScalarToFloat(y)); 34880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 34980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 35080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, 3510a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger const SkRect& dst, const SkPaint* paint, 3520a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger DrawBitmapRectFlags flags) { 35380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString bs, rs; 354d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger bitmap.toString(&bs); 35580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(dst, &rs); 35680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // show the src-rect only if its not everything 35780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (src && (src->fLeft > 0 || src->fTop > 0 || 35880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru src->fRight < SkIntToScalar(bitmap.width()) || 35980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru src->fBottom < SkIntToScalar(bitmap.height()))) { 36080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString ss; 36180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(*src, &ss); 36280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru rs.prependf("%s ", ss.c_str()); 36380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 36480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 36580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawBitmap_Verb, paint, "drawBitmapRectToRect(%s %s)", 36680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bs.c_str(), rs.c_str()); 36780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 36880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 36980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 37080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPaint* paint) { 37180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString bs, ms; 372d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger bitmap.toString(&bs); 373d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger m.toString(&ms); 37480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawBitmap_Verb, paint, "drawBitmapMatrix(%s %s)", 37580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bs.c_str(), ms.c_str()); 37680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 37780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 37880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawSprite(const SkBitmap& bitmap, int x, int y, 37980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPaint* paint) { 38080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 381d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger bitmap.toString(&str); 38280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawBitmap_Verb, paint, "drawSprite(%s %d %d)", str.c_str(), 38380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru x, y); 38480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 38580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 38680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawText(const void* text, size_t byteLength, SkScalar x, 38780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar y, const SkPaint& paint) { 38880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 38980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(text, byteLength, paint.getTextEncoding(), &str); 39080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawText_Verb, &paint, "drawText(%s [%d] %g %g)", str.c_str(), 39180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru byteLength, SkScalarToFloat(x), SkScalarToFloat(y)); 39280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 39380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 39480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawPosText(const void* text, size_t byteLength, 39580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPoint pos[], const SkPaint& paint) { 39680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 39780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(text, byteLength, paint.getTextEncoding(), &str); 39880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawText_Verb, &paint, "drawPosText(%s [%d] %g %g ...)", 39980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.c_str(), byteLength, SkScalarToFloat(pos[0].fX), 40080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(pos[0].fY)); 40180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 40280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 40380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawPosTextH(const void* text, size_t byteLength, 40480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar xpos[], SkScalar constY, 40580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPaint& paint) { 40680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 40780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(text, byteLength, paint.getTextEncoding(), &str); 40880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawText_Verb, &paint, "drawPosTextH(%s [%d] %g %g ...)", 40980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.c_str(), byteLength, SkScalarToFloat(xpos[0]), 41080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(constY)); 41180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 41280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 41380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawTextOnPath(const void* text, size_t byteLength, 41480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPath& path, const SkMatrix* matrix, 41580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPaint& paint) { 41680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString str; 41780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(text, byteLength, paint.getTextEncoding(), &str); 41880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawText_Verb, &paint, "drawTextOnPath(%s [%d])", 41980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str.c_str(), byteLength); 42080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 42180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 42280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawPicture(SkPicture& picture) { 42380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawPicture_Verb, NULL, "drawPicture(%p) %d:%d", &picture, 42480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru picture.width(), picture.height()); 42580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fNestLevel += 1; 42680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->INHERITED::drawPicture(picture); 42780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fNestLevel -= 1; 42880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawPicture_Verb, NULL, "endPicture(%p) %d:%d", &picture, 42980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru picture.width(), picture.height()); 43080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 43180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 43280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawVertices(VertexMode vmode, int vertexCount, 43380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPoint vertices[], const SkPoint texs[], 43480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkColor colors[], SkXfermode* xmode, 43580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const uint16_t indices[], int indexCount, 43680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPaint& paint) { 43780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawVertices_Verb, &paint, "drawVertices(%s [%d] %g %g ...)", 43880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru toString(vmode), vertexCount, SkScalarToFloat(vertices[0].fX), 43980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalarToFloat(vertices[0].fY)); 44080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 44180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 44280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDumpCanvas::drawData(const void* data, size_t length) { 44380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// this->dump(kDrawData_Verb, NULL, "drawData(%d)", length); 44480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dump(kDrawData_Verb, NULL, "drawData(%d) %.*s", length, 4450a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger SkTMin<size_t>(length, 64), data); 44680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 44780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 44858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergervoid SkDumpCanvas::beginCommentGroup(const char* description) { 44958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger this->dump(kBeginCommentGroup_Verb, NULL, "beginCommentGroup(%s)", description); 45058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 45158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 45258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergervoid SkDumpCanvas::addComment(const char* kywd, const char* value) { 45358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger this->dump(kAddComment_Verb, NULL, "addComment(%s, %s)", kywd, value); 45458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 45558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 45658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergervoid SkDumpCanvas::endCommentGroup() { 45758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger this->dump(kEndCommentGroup_Verb, NULL, "endCommentGroup()"); 45858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 45958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 46080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 46180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 46280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 46380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkFormatDumper::SkFormatDumper(void (*proc)(const char*, void*), void* refcon) { 46480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fProc = proc; 46580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fRefcon = refcon; 46680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 46780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 46880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void appendPtr(SkString* str, const void* ptr, const char name[]) { 46980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (ptr) { 47080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf(" %s:%p", name, ptr); 47180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 47280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 47380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 47480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void appendFlattenable(SkString* str, const SkFlattenable* ptr, 47580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char name[]) { 47680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (ptr) { 47780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru str->appendf(" %s:%p", name, ptr); 47880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 47980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 48080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 48180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkFormatDumper::dump(SkDumpCanvas* canvas, SkDumpCanvas::Verb verb, 48280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char str[], const SkPaint* p) { 48380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString msg, tab; 48480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const int level = canvas->getNestLevel() + canvas->getSaveCount() - 1; 48580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(level >= 0); 48680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int i = 0; i < level; i++) { 48780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if 0 48880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru tab.append("\t"); 48980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#else 49080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru tab.append(" "); // tabs are often too wide to be useful 49180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 49280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 49380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru msg.printf("%s%s", tab.c_str(), str); 49480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 49580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (p) { 49680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru msg.appendf(" color:0x%08X flags:%X", p->getColor(), p->getFlags()); 49780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendFlattenable(&msg, p->getShader(), "shader"); 49880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendFlattenable(&msg, p->getXfermode(), "xfermode"); 49980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendFlattenable(&msg, p->getPathEffect(), "pathEffect"); 50080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendFlattenable(&msg, p->getMaskFilter(), "maskFilter"); 50180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendFlattenable(&msg, p->getPathEffect(), "pathEffect"); 50280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendFlattenable(&msg, p->getColorFilter(), "filter"); 50380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 50480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkDumpCanvas::kDrawText_Verb == verb) { 50580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru msg.appendf(" textSize:%g", SkScalarToFloat(p->getTextSize())); 50680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru appendPtr(&msg, p->getTypeface(), "typeface"); 50780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 50858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 50958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (p->getStyle() != SkPaint::kFill_Style) { 51058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger msg.appendf(" strokeWidth:%g", SkScalarToFloat(p->getStrokeWidth())); 51158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 51280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 51380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 51480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fProc(msg.c_str(), fRefcon); 51580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 51680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 51780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 51880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 51980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void dumpToDebugf(const char text[], void*) { 52080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s\n", text); 52180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 52280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 52380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDebugfDumper::SkDebugfDumper() : INHERITED(dumpToDebugf, NULL) {} 52480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 525d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger#endif 526