diff options
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | tools/skhello.cpp | 65 |
2 files changed, 80 insertions, 1 deletions
@@ -153,6 +153,19 @@ skimage: $(SKIMAGE_OBJS) out/libskia.a ############################################################################## +SKHELLO_SRCS := skhello.cpp + +SKHELLO_SRCS := $(addprefix tools/, $(SKHELLO_SRCS)) + +SKHELLO_OBJS := $(SKHELLO_SRCS:.cpp=.o) +SKHELLO_OBJS := $(addprefix out/, $(SKHELLO_OBJS)) + +skhello: $(SKHELLO_OBJS) out/libskia.a + @echo "linking shkello..." + $(HIDE)g++ $(SKHELLO_OBJS) out/libskia.a -o out/tools/skhello $(LINKER_OPTS) + +############################################################################## + include gm/gm_files.mk GM_SRCS := $(addprefix gm/, $(SOURCE)) @@ -170,7 +183,7 @@ gm: $(GM_OBJS) out/libskia.a ############################################################################## .PHONY: all -all: $ bench gm skimage tests +all: $ bench gm skimage tests skhello .PHONY: clean clean: @@ -183,6 +196,7 @@ help: @echo " bench: out/bench/bench" @echo " gm: out/gm/gm" @echo " skimage: out/tools/skimage" + @echo " skhello: out/tools/skhello" @echo " tests: out/tests/tests" @echo " clean: removes entire out/ directory" @echo " help: this text" diff --git a/tools/skhello.cpp b/tools/skhello.cpp new file mode 100644 index 0000000000..6f56d4c0e9 --- /dev/null +++ b/tools/skhello.cpp @@ -0,0 +1,65 @@ +#include "SkCanvas.h" +#include "SkGraphics.h" +//#include "SkImageDecoder.h" +#include "SkImageEncoder.h" +//#include "SkStream.h" +#include "SkString.h" +#include "SkTemplates.h" + +static void show_help() { + SkDebugf("usage: skhello [-o out-dir] [-t 'hello']\n default output: skhello.png\n"); +} + +int main (int argc, char * const argv[]) { + SkAutoGraphics ag; + SkString path("skhello.png"); + SkString text("Hello"); + + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--help")) { + show_help(); + return 0; + } + if (!strcmp(argv[i], "-o")) { + if (i == argc-1) { + SkDebugf("ERROR: -o needs a following filename\n"); + return -1; + } + path.set(argv[i+1]); + i += 1; // skip the out dir name + } else if (!strcmp(argv[i], "-t")) { + if (i == argc-1) { + SkDebugf("ERROR: -t needs a following string\n"); + return -1; + } + text.set(argv[i+1]); + i += 1; // skip the text string + } + } + + SkPaint paint; + paint.setAntiAlias(true); + paint.setTextSize(SkIntToScalar(30)); + SkScalar width = paint.measureText(text.c_str(), text.size()); + SkScalar spacing = paint.getFontSpacing(); + + int w = SkScalarRound(width) + 30; + int h = SkScalarRound(spacing) + 30; + SkBitmap bitmap; + bitmap.setConfig(SkBitmap::kARGB_8888_Config, w, h); + bitmap.allocPixels(); + + SkCanvas canvas(bitmap); + canvas.drawColor(SK_ColorWHITE); + + paint.setTextAlign(SkPaint::kCenter_Align); + canvas.drawText(text.c_str(), text.size(), + SkIntToScalar(w)/2, SkIntToScalar(h)*2/3, + paint); + + SkImageEncoder::EncodeFile(path.c_str(), bitmap, + SkImageEncoder::kPNG_Type, 100); + + return 0; +} + |