skhello.cpp revision ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976e
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
86413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkCanvas.h"
96413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkGraphics.h"
106413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com//#include "SkImageDecoder.h"
116413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkImageEncoder.h"
126413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com//#include "SkStream.h"
136413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkString.h"
146413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkTemplates.h"
156413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
166413e79414b4a8e4111cfd4c35959d10d9312440reed@android.comstatic void show_help() {
176413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkDebugf("usage: skhello [-o out-dir] [-t 'hello']\n  default output: skhello.png\n");
186413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com}
196413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
206413e79414b4a8e4111cfd4c35959d10d9312440reed@android.comint main (int argc, char * const argv[]) {
216413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkAutoGraphics ag;
226413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkString path("skhello.png");
236413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkString text("Hello");
246413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
256413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    for (int i = 1; i < argc; i++) {
266413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com        if (!strcmp(argv[i], "--help")) {
276413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            show_help();
286413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            return 0;
296413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com        }
306413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com        if (!strcmp(argv[i], "-o")) {
316413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            if (i == argc-1) {
326413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                SkDebugf("ERROR: -o needs a following filename\n");
336413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                return -1;
346413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            }
356413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            path.set(argv[i+1]);
366413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            i += 1; // skip the out dir name
376413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com        } else if (!strcmp(argv[i], "-t")) {
386413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            if (i == argc-1) {
396413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                SkDebugf("ERROR: -t needs a following string\n");
406413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                return -1;
416413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            }
426413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            text.set(argv[i+1]);
436413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com            i += 1; // skip the text string
446413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com        }
456413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    }
466413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
476413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkPaint paint;
486413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    paint.setAntiAlias(true);
496413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    paint.setTextSize(SkIntToScalar(30));
506413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkScalar width = paint.measureText(text.c_str(), text.size());
516413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkScalar spacing = paint.getFontSpacing();
526413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
536413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    int w = SkScalarRound(width) + 30;
546413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    int h = SkScalarRound(spacing) + 30;
556413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkBitmap bitmap;
566413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    bitmap.setConfig(SkBitmap::kARGB_8888_Config, w, h);
576413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    bitmap.allocPixels();
586413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
596413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    SkCanvas canvas(bitmap);
606413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    canvas.drawColor(SK_ColorWHITE);
616413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
626413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    paint.setTextAlign(SkPaint::kCenter_Align);
636413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com    canvas.drawText(text.c_str(), text.size(),
646413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                    SkIntToScalar(w)/2, SkIntToScalar(h)*2/3,
656413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                    paint);
666413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
67fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com    bool success = SkImageEncoder::EncodeFile(path.c_str(), bitmap,
686413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com                               SkImageEncoder::kPNG_Type, 100);
69fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com    if (!success) {
70fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com        SkDebugf("--- failed to write %s\n", path.c_str());
71fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com    }
72fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com    return !success;
736413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com}
746413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com
75