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