1aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkCanvas.h" 269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com#include "SkCGUtils.h" 3aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkGraphics.h" 4aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkImageDecoder.h" 5aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkOSFile.h" 6aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkPaint.h" 7aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkPicture.h" 8aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkStream.h" 9aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com#include "SkWindow.h" 10aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 11aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.comstatic void make_filepath(SkString* path, const char* dir, const SkString& name) { 12aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com size_t len = strlen(dir); 13aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path->set(dir); 14aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (len > 0 && dir[len - 1] != '/') { 15aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path->append("/"); 16aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 17aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path->append(name); 18aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com} 19aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 20aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.comstatic SkPicture* LoadPicture(const char path[]) { 21aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPicture* pic = NULL; 22aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 23aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkBitmap bm; 24aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (SkImageDecoder::DecodeFile(path, &bm)) { 25aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com bm.setImmutable(); 26aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pic = SkNEW(SkPicture); 27aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkCanvas* can = pic->beginRecording(bm.width(), bm.height()); 28aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com can->drawBitmap(bm, 0, 0, NULL); 29aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pic->endRecording(); 30aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } else { 31aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkFILEStream stream(path); 32aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (stream.isValid()) { 33aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pic = SkNEW_ARGS(SkPicture, 34aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com (&stream, NULL, &SkImageDecoder::DecodeStream)); 35aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 36aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 37aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (false) { // re-record 38aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPicture p2; 39aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pic->draw(p2.beginRecording(pic->width(), pic->height())); 40aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com p2.endRecording(); 41aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 42aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkString path2(path); 43aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path2.append(".new.skp"); 44aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkFILEWStream writer(path2.c_str()); 45aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com p2.serialize(&writer); 46aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 47aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 48aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com return pic; 49aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com} 50aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 5169f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comclass SkSampleView : public SkView { 5269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.compublic: 5369f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkSampleView() { 5469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com this->setVisibleP(true); 5569f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com this->setClipToBounds(false); 5669f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com }; 5769f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comprotected: 5869f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com virtual void onDraw(SkCanvas* canvas) { 5969f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com canvas->drawColor(0xFFFFFFFF); 6069f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkPaint p; 6169f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com p.setTextSize(20); 6269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com p.setAntiAlias(true); 6369f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com canvas->drawText("Hello World!", 13, 50, 30, p); 64aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com // SkRect r = {50, 50, 80, 80}; 6569f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com p.setColor(0xAA11EEAA); 66aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com // canvas->drawRect(r, p); 67aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 68aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkRect result; 69aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPath path; 70aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.moveTo(0, 0); 71aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.lineTo(1, 1); 72aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.lineTo(1, 8); 73aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.lineTo(0, 9); 74aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkASSERT(path.hasRectangularInterior(&result)); 75aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 76aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.reset(); 77aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.addRect(10, 10, 100, 100, SkPath::kCW_Direction); 78aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.addRect(20, 20, 50, 50, SkPath::kCW_Direction); 79aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.addRect(50, 50, 90, 90, SkPath::kCCW_Direction); 80aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com p.setColor(0xAA335577); 81aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com canvas->drawPath(path, p); 82aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkASSERT(!path.hasRectangularInterior(NULL)); 83aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.reset(); 84aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.addRect(10, 10, 100, 100, SkPath::kCW_Direction); 85aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.addRect(20, 20, 80, 80, SkPath::kCW_Direction); 86aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkRect expected = {20, 20, 80, 80}; 87aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkASSERT(path.hasRectangularInterior(&result)); 88aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkASSERT(result == expected); 89aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 9069f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com } 9169f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comprivate: 9269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com typedef SkView INHERITED; 9369f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com}; 9469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 95aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.comvoid application_init(); 96aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.comvoid application_term(); 97aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 98aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.comstatic int showPathContour(SkPath::Iter& iter) { 99aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com uint8_t verb; 100aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPoint pts[4]; 101aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int moves = 0; 102aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com bool waitForClose = false; 103aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { 104aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com switch (verb) { 105aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com case SkPath::kMove_Verb: 106aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (!waitForClose) { 107aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com ++moves; 108aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com waitForClose = true; 109aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 110aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.moveTo(%1.9g, %1.9g);\n", pts[0].fX, pts[0].fY); 111aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com break; 112aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com case SkPath::kLine_Verb: 113aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.lineTo(%1.9g, %1.9g);\n", pts[1].fX, pts[1].fY); 114aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com break; 115aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com case SkPath::kQuad_Verb: 116aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.quadTo(%1.9g, %1.9g, %1.9g, %1.9g);\n", 117aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY); 118aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com break; 119aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com case SkPath::kCubic_Verb: 120aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.cubicTo(%1.9g, %1.9g, %1.9g, %1.9g, %1.9g, %1.9g);\n", 121aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, 122aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pts[3].fX, pts[3].fY); 123aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com break; 124aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com case SkPath::kClose_Verb: 125aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com waitForClose = false; 126aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.close();\n"); 127aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com break; 128aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com default: 129aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDEBUGFAIL("bad verb"); 130aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkASSERT(0); 131aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com return 0; 132aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 133aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 134aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com return moves; 135aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com} 136aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 137aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.comclass PathCanvas : public SkCanvas { 1387ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com virtual void drawPath(const SkPath& path, const SkPaint& paint) { 139aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (nameonly) { 140aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf(" %s%d,\n", filename.c_str(), ++count); 141aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com return; 142aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 143aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPath::Iter iter(path, true); 144aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("<div id=\"%s%d\">\n", filename.c_str(), ++count); 145aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkASSERT(path.getFillType() < SkPath::kInverseWinding_FillType); 146aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.setFillType(SkPath::k%s_FillType);\n", 147aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.getFillType() == SkPath::kWinding_FillType ? "Winding" : "EvenOdd"); 148aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int contours = showPathContour(iter); 149aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkRect r; 150aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkRect copy = r; 151aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com bool hasOne = path.hasRectangularInterior(&r); 152aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com bool expected = (path.getFillType() == SkPath::kWinding_FillType && contours == 1) 153aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com || (path.getFillType() == SkPath::kEvenOdd_FillType && contours == 2); 154aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (!expected) { 155aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("suspect contours=%d\n", contours); 156aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 157aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int verbs = path.countVerbs(); 158aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int points = path.countPoints(); 159aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (hasOne) { 160aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (rectVerbsMin > verbs) { 161aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com rectVerbsMin = verbs; 162aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 163aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (rectVerbsMax < verbs) { 164aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com rectVerbsMax = verbs; 165aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 166aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (rectPointsMin > points) { 167aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com rectPointsMin = points; 168aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 169aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (rectPointsMax < points) { 170aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com rectPointsMax = points; 171aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 172aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("path.addRect(%1.9g, %1.9g, %1.9g, %1.9g);\n", 173aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com r.fLeft, r.fTop, r.fRight, r.fBottom); 174aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } else { 175aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (verbsMin > verbs) { 176aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com verbsMin = verbs; 177aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 178aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (verbsMax < verbs) { 179aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com verbsMax = verbs; 180aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 181aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (pointsMin > points) { 182aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pointsMin = points; 183aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 184aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (pointsMax < points) { 185aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pointsMax = points; 186aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 187aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("no interior bounds\n"); 188aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 189aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com path.hasRectangularInterior(©); 190aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("</div>\n\n"); 191aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 192aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 193aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com virtual void drawPosTextH(const void* text, size_t byteLength, 194aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com const SkScalar xpos[], SkScalar constY, 195aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com const SkPaint& paint) { 196aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 197aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 198aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.compublic: 199aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com void divName(const SkString& str, bool only) { 200aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com filename = str; 201aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com char* chars = filename.writable_str(); 202aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com while (*chars) { 203aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (*chars == '.' || *chars == '-') *chars = '_'; 204aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com chars++; 205aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 206aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com count = 0; 207aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com nameonly = only; 208aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 209aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 210aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com void init() { 211aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pointsMin = verbsMin = SK_MaxS32; 212aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pointsMax = verbsMax = SK_MinS32; 213aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com rectPointsMin = rectVerbsMin = SK_MaxS32; 214aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com rectPointsMax = rectVerbsMax = SK_MinS32; 215aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 216aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 217aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkString filename; 218aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int count; 219aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com bool nameonly; 220aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int pointsMin; 221aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int pointsMax; 222aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int verbsMin; 223aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int verbsMax; 224aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int rectPointsMin; 225aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int rectPointsMax; 226aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int rectVerbsMin; 227aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com int rectVerbsMax; 228aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com}; 229aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 230aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.combool runone = false; 231aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 23269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comvoid application_init() { 23369f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkGraphics::Init(); 23469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkEvent::Init(); 235aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if (runone) { 236aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com return; 237aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 238aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com const char pictDir[] = "/Volumes/chrome/nih/skia/skp/skp"; 239aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkOSFile::Iter iter(pictDir, "skp"); 240aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkString filename; 241aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com PathCanvas canvas; 242aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com canvas.init(); 243aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com while (iter.next(&filename)) { 244aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkString path; 245aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com // if (true) filename.set("tabl_www_sahadan_com.skp"); 246aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com make_filepath(&path, pictDir, filename); 247aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com canvas.divName(filename, false); 248aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPicture* pic = LoadPicture(path.c_str()); 249aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pic->draw(&canvas); 250aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDELETE(pic); 251aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 252aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("\n</div>\n\n"); 253aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 254aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("<script type=\"text/javascript\">\n\n"); 255aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("var testDivs = [\n"); 256aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 257aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com iter.reset(pictDir, "skp"); 258aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com while (iter.next(&filename)) { 259aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkString path; 260aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com make_filepath(&path, pictDir, filename); 261aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com canvas.divName(filename, true); 262aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkPicture* pic = LoadPicture(path.c_str()); 263aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com pic->draw(&canvas); 264aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDELETE(pic); 265aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com } 266aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("];\n\n"); 267aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 268aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("points min=%d max=%d verbs min=%d max=%d\n", canvas.pointsMin, canvas.pointsMax, 269aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com canvas.verbsMin, canvas.verbsMax); 270aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("rect points min=%d max=%d verbs min=%d max=%d\n", canvas.rectPointsMin, canvas.rectPointsMax, 271aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com canvas.rectVerbsMin, canvas.rectVerbsMax); 272aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com 273aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com SkDebugf("\n"); 27469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com} 27569f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 27669f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comvoid application_term() { 27769f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkGraphics::Term(); 27869f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkEvent::Term(); 27969f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com} 28069f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 28169f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comclass FillLayout : public SkView::Layout { 28269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.comprotected: 28369f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com virtual void onLayoutChildren(SkView* parent) { 28469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkView* view = SkView::F2BIter(parent).next(); 28569f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com view->setSize(parent->width(), parent->height()); 28669f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com } 28769f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com}; 28869f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 28969f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com#import "SimpleApp.h" 29069f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com@implementation SimpleNSView 29169f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 29269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com- (id)initWithDefaults { 293aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com if ((self = [super initWithDefaults])) { 29469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com fWind = new SkOSWindow(self); 29569f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com fWind->setLayout(new FillLayout, false); 29669f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com fWind->attachChildToFront(new SkSampleView)->unref(); 29769f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com } 29869f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com return self; 29969f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com} 30069f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 30169f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com- (void)drawRect:(NSRect)dirtyRect { 30269f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com CGContextRef ctx = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; 30369f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com SkCGDrawBitmap(ctx, fWind->getBitmap(), 0, 0); 30469f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com} 30569f2e05b58cd42bb5925214feb1aecc9a1690f6dyangsu@google.com 306aa35831d1d0e4c798a63fe772430adc4f3a038cdcaryclark@google.com@end 307