skhello.cpp revision 5987f58036574ccf23049b5fe71f29a441d0641d
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" 96413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkGraphics.h" 106413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkImageEncoder.h" 116413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkString.h" 126413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 136413e79414b4a8e4111cfd4c35959d10d9312440reed@android.comstatic void show_help() { 146413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkDebugf("usage: skhello [-o out-dir] [-t 'hello']\n default output: skhello.png\n"); 156413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com} 166413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 175987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.comint tool_main(int argc, char** argv); 185987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.comint tool_main(int argc, char** argv) { 196413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkAutoGraphics ag; 206413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkString path("skhello.png"); 216413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkString text("Hello"); 226413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 236413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com for (int i = 1; i < argc; i++) { 246413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (!strcmp(argv[i], "--help")) { 256413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com show_help(); 266413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com return 0; 276413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 286413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (!strcmp(argv[i], "-o")) { 296413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (i == argc-1) { 306413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkDebugf("ERROR: -o needs a following filename\n"); 316413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com return -1; 326413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 336413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com path.set(argv[i+1]); 346413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com i += 1; // skip the out dir name 356413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } else if (!strcmp(argv[i], "-t")) { 366413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (i == argc-1) { 376413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkDebugf("ERROR: -t needs a following string\n"); 386413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com return -1; 396413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 406413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com text.set(argv[i+1]); 416413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com i += 1; // skip the text string 426413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 436413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 446413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 456413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkPaint paint; 466413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setAntiAlias(true); 476413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setTextSize(SkIntToScalar(30)); 486413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkScalar width = paint.measureText(text.c_str(), text.size()); 496413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkScalar spacing = paint.getFontSpacing(); 506413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 516413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com int w = SkScalarRound(width) + 30; 526413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com int h = SkScalarRound(spacing) + 30; 536413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkBitmap bitmap; 546413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com bitmap.setConfig(SkBitmap::kARGB_8888_Config, w, h); 556413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com bitmap.allocPixels(); 566413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 576413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkCanvas canvas(bitmap); 586413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com canvas.drawColor(SK_ColorWHITE); 59d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 606413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setTextAlign(SkPaint::kCenter_Align); 616413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com canvas.drawText(text.c_str(), text.size(), 626413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkIntToScalar(w)/2, SkIntToScalar(h)*2/3, 636413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint); 646413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 65fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com bool success = SkImageEncoder::EncodeFile(path.c_str(), bitmap, 666413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkImageEncoder::kPNG_Type, 100); 67fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com if (!success) { 68fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com SkDebugf("--- failed to write %s\n", path.c_str()); 69fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com } 70fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com return !success; 716413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com} 725987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.com 735987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.com#if !defined SK_BUILD_FOR_IOS 745987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.comint main(int argc, char * const argv[]) { 755987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.com return tool_main(argc, (char**) argv); 765987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.com} 775987f58036574ccf23049b5fe71f29a441d0641dcaryclark@google.com#endif 78