Flutter Engine
The Flutter Engine
hugepath.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2018 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
8#include "gm/gm.h"
11#include "include/core/SkPath.h"
12#include "include/core/SkRect.h"
16
17DEF_SIMPLE_GM(path_huge_crbug_800804, canvas, 50, 600) {
19 paint.setAntiAlias(true);
21
22 // exercise various special-cases (e.g. hairlines or not)
23 const float widths[] = { 0.9f, 1.0f, 1.1f };
24
26 for (float w : widths) {
27 paint.setStrokeWidth(w);
28
29 path.reset();
30 path.moveTo(-1000,12345678901234567890.f);
31 path.lineTo(10.5f,200);
32 canvas->drawPath(path, paint);
33
34 path.reset();
35 path.moveTo(30.5f,400);
36 path.lineTo(1000,-9.8765432109876543210e+19f);
37 canvas->drawPath(path, paint);
38
39 canvas->translate(3, 0);
40 }
41}
42
43// Test that we can draw into a huge surface ( > 64K ) and still retain paths and antialiasing.
44static void draw_huge_path(SkCanvas* canvas, int w, int h, bool manual) {
45 SkAutoCanvasRestore acr(canvas, true);
46
48 auto can = surf->getCanvas();
49
52 path.addRoundRect(SkRect::MakeXYWH(4, 4, w - 8, h - 8), 12, 12);
53
54 canvas->save();
55 canvas->clipRect(SkRect::MakeXYWH(4, 4, 64, 64));
56 can->drawPath(path, paint);
57 if (manual) {
58 SkTiledImageUtils::DrawImage(canvas, surf->makeImageSnapshot(), 64 - w, 0);
59 } else {
60 canvas->drawImage(surf->makeImageSnapshot(), 64 - w, 0);
61 }
62 canvas->restore();
63
64 canvas->translate(80, 0);
65 canvas->save();
66 canvas->clipRect(SkRect::MakeXYWH(4, 4, 64, 64));
67 can->clear(0);
68 paint.setAntiAlias(true);
69 can->drawPath(path, paint);
70 if (manual) {
71 SkTiledImageUtils::DrawImage(canvas, surf->makeImageSnapshot(), 64 - w, 0);
72 } else {
73 canvas->drawImage(surf->makeImageSnapshot(), 64 - w, 0);
74 }
75 canvas->restore();
76};
77
78DEF_SIMPLE_GM(path_huge_aa, canvas, 200, 200) {
79 draw_huge_path(canvas, 100, 60, /* manual= */ false);
80 canvas->translate(0, 80);
81 draw_huge_path(canvas, 100 * 1024, 60, /* manual= */ false);
82}
83
84DEF_SIMPLE_GM(path_huge_aa_manual, canvas, 200, 200) {
85 draw_huge_path(canvas, 100, 60, /* manual= */ true);
86 canvas->translate(0, 80);
87 draw_huge_path(canvas, 100 * 1024, 60, /* manual= */ true);
88}
const SkScalar widths[]
Definition: StrokerTest.cpp:39
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
Definition: SkCanvas.cpp:1361
void restore()
Definition: SkCanvas.cpp:461
void translate(SkScalar dx, SkScalar dy)
Definition: SkCanvas.cpp:1278
int save()
Definition: SkCanvas.cpp:447
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
Definition: SkCanvas.h:1528
@ kStroke_Style
set to stroke geometry
Definition: SkPaint.h:194
Definition: SkPath.h:59
const Paint & paint
Definition: color_source.cc:38
static void draw_huge_path(SkCanvas *canvas, int w, int h, bool manual)
Definition: hugepath.cpp:44
DEF_SIMPLE_GM(path_huge_crbug_800804, canvas, 50, 600)
Definition: hugepath.cpp:17
SK_API sk_sp< SkSurface > Raster(const SkImageInfo &imageInfo, size_t rowBytes, const SkSurfaceProps *surfaceProps)
void DrawImage(SkCanvas *canvas, const SkImage *image, SkScalar x, SkScalar y, const SkSamplingOptions &sampling={}, const SkPaint *paint=nullptr, SkCanvas::SrcRectConstraint constraint=SkCanvas::kFast_SrcRectConstraint)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition: switches.h:57
SkScalar w
SkScalar h
static SkImageInfo MakeN32Premul(int width, int height)
static constexpr SkRect MakeXYWH(float x, float y, float w, float h)
Definition: SkRect.h:659