14117a24de4c2dedf47db44746f6636ade6e29deareed@google.com/* 24117a24de4c2dedf47db44746f6636ade6e29deareed@google.com * Copyright 2012 Google Inc. 34117a24de4c2dedf47db44746f6636ade6e29deareed@google.com * 44117a24de4c2dedf47db44746f6636ade6e29deareed@google.com * Use of this source code is governed by a BSD-style license that can be 54117a24de4c2dedf47db44746f6636ade6e29deareed@google.com * found in the LICENSE file. 64117a24de4c2dedf47db44746f6636ade6e29deareed@google.com */ 74117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 84117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 104117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#include "SkCanvas.h" 114117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#include "SkPath.h" 124117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#include "SkSurface.h" 134117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 144117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#define ZOOM 32 154117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#define SMALL_W 9 164117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#define SMALL_H 3 174117a24de4c2dedf47db44746f6636ade6e29deareed@google.com#define REPEAT_LOOP 5 184117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 19e8f3062a36d3682f4019309a32b5b84dc9eddf8creedstatic sk_sp<SkSurface> new_surface(int width, int height) { 20e8f3062a36d3682f4019309a32b5b84dc9eddf8creed return SkSurface::MakeRasterN32Premul(width, height); 214117a24de4c2dedf47db44746f6636ade6e29deareed@google.com} 224117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 234117a24de4c2dedf47db44746f6636ade6e29deareed@google.comstatic void draw_pixel_centers(SkCanvas* canvas) { 244117a24de4c2dedf47db44746f6636ade6e29deareed@google.com SkPaint paint; 25125960152dfd7f2aba4c2239131bdf75d9ac2705caryclark paint.setColor(sk_tool_utils::color_to_565(0xFF0088FF)); 264117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.setAntiAlias(true); 27e862d16162fd46ad9b2832c8844b00c81bedbac0skia.committer@gmail.com 284117a24de4c2dedf47db44746f6636ade6e29deareed@google.com for (int y = 0; y < SMALL_H; ++y) { 294117a24de4c2dedf47db44746f6636ade6e29deareed@google.com for (int x = 0; x < SMALL_W; ++x) { 304117a24de4c2dedf47db44746f6636ade6e29deareed@google.com canvas->drawCircle(x + 0.5f, y + 0.5f, 1.5f / ZOOM, paint); 314117a24de4c2dedf47db44746f6636ade6e29deareed@google.com } 324117a24de4c2dedf47db44746f6636ade6e29deareed@google.com } 334117a24de4c2dedf47db44746f6636ade6e29deareed@google.com} 344117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 3541e010cb901c0da9066c4df562030808c9ccd7f8reedstatic void draw_fatpath(SkCanvas* canvas, SkSurface* surface, const SkPath& path) { 364117a24de4c2dedf47db44746f6636ade6e29deareed@google.com SkPaint paint; 374117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 38dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com surface->getCanvas()->clear(SK_ColorTRANSPARENT); 3941e010cb901c0da9066c4df562030808c9ccd7f8reed surface->getCanvas()->drawPath(path, paint); 4096fcdcc219d2a0d3579719b84b28bede76efba64halcanary surface->draw(canvas, 0, 0, nullptr); 414117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 424117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.setAntiAlias(true); 434117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.setColor(SK_ColorRED); 444117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.setStyle(SkPaint::kStroke_Style); 4541e010cb901c0da9066c4df562030808c9ccd7f8reed canvas->drawPath(path, paint); 464117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 474117a24de4c2dedf47db44746f6636ade6e29deareed@google.com draw_pixel_centers(canvas); 484117a24de4c2dedf47db44746f6636ade6e29deareed@google.com} 494117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 502a24338c777462e04a2b26295f9c034155ee8f3ehalcanaryDEF_SIMPLE_GM(fatpathfill, canvas, 512a24338c777462e04a2b26295f9c034155ee8f3ehalcanary SMALL_W * ZOOM, 522a24338c777462e04a2b26295f9c034155ee8f3ehalcanary SMALL_H * ZOOM * REPEAT_LOOP) { 53e8f3062a36d3682f4019309a32b5b84dc9eddf8creed auto surface(new_surface(SMALL_W, SMALL_H)); 544117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 554117a24de4c2dedf47db44746f6636ade6e29deareed@google.com canvas->scale(ZOOM, ZOOM); 564117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 574117a24de4c2dedf47db44746f6636ade6e29deareed@google.com SkPaint paint; 584117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.setStyle(SkPaint::kStroke_Style); 594117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.setStrokeWidth(SK_Scalar1); 604117a24de4c2dedf47db44746f6636ade6e29deareed@google.com 614117a24de4c2dedf47db44746f6636ade6e29deareed@google.com for (int i = 0; i < REPEAT_LOOP; ++i) { 624117a24de4c2dedf47db44746f6636ade6e29deareed@google.com SkPath line, path; 6341e010cb901c0da9066c4df562030808c9ccd7f8reed line.moveTo(1, 2); 6441e010cb901c0da9066c4df562030808c9ccd7f8reed line.lineTo(SkIntToScalar(4 + i), 1); 654117a24de4c2dedf47db44746f6636ade6e29deareed@google.com paint.getFillPath(line, &path); 66e8f3062a36d3682f4019309a32b5b84dc9eddf8creed draw_fatpath(canvas, surface.get(), path); 67e862d16162fd46ad9b2832c8844b00c81bedbac0skia.committer@gmail.com 684117a24de4c2dedf47db44746f6636ade6e29deareed@google.com canvas->translate(0, SMALL_H); 694117a24de4c2dedf47db44746f6636ade6e29deareed@google.com } 702a24338c777462e04a2b26295f9c034155ee8f3ehalcanary} 71