1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7e0e71afc66ee350383486c10e6c760a86663dfcctfarina@chromium.org 86413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkCanvas.h" 9d9ba9a05d6f5766fdb1378b6ed84c0659009a8dascroggo@google.com#include "SkCommandLineFlags.h" 104b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com#include "SkData.h" 1199ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com#include "SkDocument.h" 126413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkGraphics.h" 134b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com#include "SkSurface.h" 144b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com#include "SkImage.h" 154b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com#include "SkStream.h" 166413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkString.h" 176413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 1899ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.comDEFINE_string2(outFile, o, "skhello", "The filename to write the image."); 19604e0c249ef0e11a1b8bc41195081363fd86d892scroggo@google.comDEFINE_string2(text, t, "Hello", "The string to write."); 206413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 2199ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.comstatic void doDraw(SkCanvas* canvas, const SkPaint& paint, const char text[]) { 22918e144408ba218df919528f8b48c544f4767883Mike Reed SkRect bounds = canvas->getLocalClipBounds(); 2399ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com 2499ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com canvas->drawColor(SK_ColorWHITE); 2599ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com canvas->drawText(text, strlen(text), 2699ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com bounds.centerX(), bounds.centerY(), 2799ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com paint); 2899ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com} 2999ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com 3099ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.comstatic bool do_surface(int w, int h, const char path[], const char text[], 3199ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com const SkPaint& paint) { 32702edbd4bc41230902b5fe69d14d15763c27faferobertphillips SkSurfaceProps props(0, kUnknown_SkPixelGeometry); 33e8f3062a36d3682f4019309a32b5b84dc9eddf8creed sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(w, h, &props)); 3499ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com doDraw(surface->getCanvas(), paint, text); 356319367bdcbf5e5050632ab97973f5035d0dd8faskia.committer@gmail.com 369ce9d6772df650ceb0511f275e1a83dffa78ff72reed sk_sp<SkImage> image(surface->makeImageSnapshot()); 3738d909ec2875f79952de08f36adfaac5680d2c53bungeman sk_sp<SkData> data(image->encode()); 3838d909ec2875f79952de08f36adfaac5680d2c53bungeman if (!data) { 3999ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com return false; 4099ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com } 4199ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com SkFILEWStream stream(path); 4299ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com return stream.write(data->data(), data->size()); 4399ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com} 4499ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com 4599ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.comstatic bool do_document(int w, int h, const char path[], const char text[], 4699ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com const SkPaint& paint) { 47676ab68b04597c997e3152f31c08090c0d2ccbe4halcanary sk_sp<SkDocument> doc(SkDocument::MakePDF(path)); 4899ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com if (doc.get()) { 4999ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com SkScalar width = SkIntToScalar(w); 5099ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com SkScalar height = SkIntToScalar(h); 5196fcdcc219d2a0d3579719b84b28bede76efba64halcanary doDraw(doc->beginPage(width, height, nullptr), paint, text); 5299ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com return true; 5399ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com } 5499ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com return false; 5599ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com} 5699ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com 57be28ee2974474800323ce4fabf62a839018be591Mike Kleinint main(int argc, char** argv) { 58d9ba9a05d6f5766fdb1378b6ed84c0659009a8dascroggo@google.com SkCommandLineFlags::SetUsage(""); 59d9ba9a05d6f5766fdb1378b6ed84c0659009a8dascroggo@google.com SkCommandLineFlags::Parse(argc, argv); 6031ea3394a03f010f31d512e753a9f30ca3313e23commit-bot@chromium.org 616413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkAutoGraphics ag; 6299ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com SkString path("skhello"); 636413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkString text("Hello"); 646413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 65604e0c249ef0e11a1b8bc41195081363fd86d892scroggo@google.com if (!FLAGS_outFile.isEmpty()) { 66604e0c249ef0e11a1b8bc41195081363fd86d892scroggo@google.com path.set(FLAGS_outFile[0]); 6731ea3394a03f010f31d512e753a9f30ca3313e23commit-bot@chromium.org } 68604e0c249ef0e11a1b8bc41195081363fd86d892scroggo@google.com if (!FLAGS_text.isEmpty()) { 69604e0c249ef0e11a1b8bc41195081363fd86d892scroggo@google.com text.set(FLAGS_text[0]); 706413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 716413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 726413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkPaint paint; 736413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setAntiAlias(true); 746413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setTextSize(SkIntToScalar(30)); 754b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com paint.setTextAlign(SkPaint::kCenter_Align); 764b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com 776413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkScalar width = paint.measureText(text.c_str(), text.size()); 786413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkScalar spacing = paint.getFontSpacing(); 796413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 80e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com int w = SkScalarRoundToInt(width) + 30; 81e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com int h = SkScalarRoundToInt(spacing) + 30; 826413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 8399ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com static const struct { 8499ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com bool (*fProc)(int w, int h, const char path[], const char text[], 8599ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com const SkPaint&); 8699ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com const char* fSuffix; 8799ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com } gRec[] = { 8899ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com { do_surface, ".png" }, 8999ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com { do_document, ".pdf" }, 904b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cbreed@google.com }; 916319367bdcbf5e5050632ab97973f5035d0dd8faskia.committer@gmail.com 9299ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { 9399ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com SkString file; 9499ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com file.printf("%s%s", path.c_str(), gRec[i].fSuffix); 9599ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com if (!gRec[i].fProc(w, h, file.c_str(), text.c_str(), paint)) { 9699ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com return -1; 9799ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com } 987def5e1630d47cdbfa4b58a9c86bc060693c4d79scroggo@google.com } 9999ac02bb701c1e30b20f2174aac25ffbe487c0afreed@google.com return 0; 1006413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com} 101