blob: c3e574a08e3f63b7adede0ce1f6cf4e3112c9179 [file] [log] [blame]
tfarina20108912014-06-21 10:54:17 -07001/*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +00008#include "sk_tool_utils.h"
Cary Clark992c7b02014-07-31 08:58:44 -04009#include "sk_tool_utils_flags.h"
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +000010
tfarina20108912014-06-21 10:54:17 -070011#include "SkBitmap.h"
12#include "SkCanvas.h"
halcanaryb0cce2c2015-01-26 12:49:00 -080013#include "SkShader.h"
Cary Clark992c7b02014-07-31 08:58:44 -040014#include "SkTestScalerContext.h"
15
16DEFINE_bool(portableFonts, false, "Use portable fonts");
17DEFINE_bool(resourceFonts, false, "Use resource fonts");
tfarina20108912014-06-21 10:54:17 -070018
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +000019namespace sk_tool_utils {
20
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000021const char* colortype_name(SkColorType ct) {
22 switch (ct) {
23 case kUnknown_SkColorType: return "Unknown";
24 case kAlpha_8_SkColorType: return "Alpha_8";
25 case kIndex_8_SkColorType: return "Index_8";
26 case kARGB_4444_SkColorType: return "ARGB_4444";
27 case kRGB_565_SkColorType: return "RGB_565";
28 case kRGBA_8888_SkColorType: return "RGBA_8888";
29 case kBGRA_8888_SkColorType: return "BGRA_8888";
30 default:
31 SkASSERT(false);
32 return "unexpected colortype";
33 }
34}
35
Cary Clark992c7b02014-07-31 08:58:44 -040036SkTypeface* create_portable_typeface(const char* name, SkTypeface::Style style) {
37 SkTypeface* face;
38 if (FLAGS_portableFonts) {
39 face = create_font(name, style);
40 } else if (FLAGS_resourceFonts) {
41 face = resource_font(name, style);
42 } else {
43 face = SkTypeface::CreateFromName(name, style);
caryclark5fb6bd42014-06-23 11:25:00 -070044 }
Cary Clark992c7b02014-07-31 08:58:44 -040045 return face;
46}
47
48void set_portable_typeface(SkPaint* paint, const char* name, SkTypeface::Style style) {
49 SkTypeface* face = create_portable_typeface(name, style);
50 SkSafeUnref(paint->setTypeface(face));
caryclark5fb6bd42014-06-23 11:25:00 -070051}
52
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +000053void write_pixels(SkCanvas* canvas, const SkBitmap& bitmap, int x, int y,
54 SkColorType colorType, SkAlphaType alphaType) {
55 SkBitmap tmp(bitmap);
56 tmp.lockPixels();
skia.committer@gmail.come62513f2014-03-08 03:02:06 +000057
reede5ea5002014-09-03 11:54:58 -070058 const SkImageInfo info = SkImageInfo::Make(tmp.width(), tmp.height(), colorType, alphaType);
skia.committer@gmail.come62513f2014-03-08 03:02:06 +000059
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +000060 canvas->writePixels(info, tmp.getPixels(), tmp.rowBytes(), x, y);
61}
62
halcanaryb0cce2c2015-01-26 12:49:00 -080063SkShader* create_checkerboard_shader(SkColor c1, SkColor c2, int size) {
64 SkBitmap bm;
65 bm.allocN32Pixels(2 * size, 2 * size);
66 bm.eraseColor(c1);
67 bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2);
68 bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2);
69 return SkShader::CreateBitmapShader(
70 bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
71}
72
73void draw_checkerboard(SkCanvas* canvas, SkColor c1, SkColor c2, int size) {
74 SkPaint paint;
75 paint.setShader(create_checkerboard_shader(c1, c2, size))->unref();
halcanaryf77365f2015-01-27 08:38:35 -080076 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
halcanaryb0cce2c2015-01-26 12:49:00 -080077 canvas->drawPaint(paint);
78}
79
tfarina20108912014-06-21 10:54:17 -070080} // namespace sk_tool_utils