1dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com/*
2dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com * Copyright 2013 Google Inc.
3dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com *
4dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com * Use of this source code is governed by a BSD-style license that can be
5dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com * found in the LICENSE file.
6dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com */
7dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#include "SampleCode.h"
8dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
9dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#include "SkCanvas.h"
10dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#include "SkRandom.h"
11dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#include "SkRRect.h"
12dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#include "SkTime.h"
13dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
14dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com// Implementation in C++ of Mozilla Canvas2D benchmark Canvas Clock Test
15dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com// See https://code.google.com/p/skia/issues/detail?id=1626
16dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
17dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#define USE_PATH 1
18dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
19dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.comclass ClockView : public SampleView {
20dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.compublic:
21dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com    ClockView() {}
22dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
23dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.comprotected:
24dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com    // overrides from SkEventSink
2536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onQuery(SkEvent* evt) override {
26dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        if (SampleCode::TitleQ(*evt)) {
27dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            SampleCode::TitleR(evt, "Clock");
28dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            return true;
29dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        }
30dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        return this->INHERITED::onQuery(evt);
31dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com    }
32dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawContent(SkCanvas* canvas) override {
34dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkPaint paintFill;
35dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkPaint paintStroke;
36dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkPath  path;
37dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
38dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->save();
39dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->translate(150, 150);
40dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->scale(0.4f, 0.4f);
41dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->rotate(-180.f/2.f);
42dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
43dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintFill.setAntiAlias(true);
44dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintFill.setColor(SK_ColorBLACK);
45dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setAntiAlias(true);
46dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStyle(SkPaint::kStroke_Style);
47dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setColor(SK_ColorBLACK);
48dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeWidth(8);
49dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeCap(SkPaint::kRound_Cap);
50dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
51dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        // Hour marks
52dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkRect rect;
53dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifndef USE_PATH
54dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(200-4, -4, 240+4, 4);
55dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkRRect rrect;
56dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkVector radii[4] = {{4,4}, {4,4}, {4,4}, {4,4}};
57dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rrect.setRectRadii(rect, radii);
58dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
59dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->save();
60dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        for (int i=0;i<12;i++){
61dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            canvas->rotate(180.f/6.f);
62dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
63dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            path.reset();
64dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            path.moveTo(200,0);
65dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            path.lineTo(240,0);
66dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            canvas->drawPath(path, paintStroke);
67dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
68dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            canvas->drawRRect(rrect, paintFill);
69dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
70dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        }
71dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->restore();
72dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
73dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        // Minute marks
74dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->save();
75dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
76dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeWidth(5);
77dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
78dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(231.5f, -2.5f, 242.5, 2.5f);
79dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[0] = SkPoint::Make(2.5f,2.5f);
80dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[1] = SkPoint::Make(2.5f,2.5f);
81dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[2] = SkPoint::Make(2.5f,2.5f);
82dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[3] = SkPoint::Make(2.5f,2.5f);
83dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rrect.setRectRadii(rect, radii);
84dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
85dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        for (int i=0;i<60;i++){
86dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            if (i%5 == 0) {
87dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com                canvas->rotate(180.f/30.f);
88dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com                continue;
89dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            }
90dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
91dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            path.reset();
92dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            path.moveTo(234,0);
93dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            path.lineTo(240,0);
94dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            canvas->drawPath(path, paintStroke);
95dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
96dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            canvas->drawRRect(rrect, paintFill);
97dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
98dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com            canvas->rotate(180.f/30.f);
99dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        }
100dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->restore();
101dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
102dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkTime::DateTime time;
103dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        SkTime::GetDateTime(&time);
104dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        time.fHour = time.fHour >= 12 ? time.fHour-12 : time.fHour;
105dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintFill.setColor(SK_ColorBLACK);
106dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
107dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        // Write hours
108dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->save();
109dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->rotate(time.fHour*(180.f/6.f) + time.fMinute*(180.f/360.f)
110dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com                       + time.fSecond*(180.f/21600.f) );
111dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
112dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeWidth(14);
113dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.reset();
114dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.moveTo(-20,0);
115dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.lineTo(80,0);
116dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintStroke);
117dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
118dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-20-7, -7, 80+7, 7);
119dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[0] = SkPoint::Make(7,7);
120dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[1] = SkPoint::Make(7,7);
121dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[2] = SkPoint::Make(7,7);
122dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[3] = SkPoint::Make(7,7);
123dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rrect.setRectRadii(rect, radii);
124dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawRRect(rrect, paintFill);
125dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
126dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->restore();
127dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
128dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        // Write minutes
129dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->save();
130dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->rotate(time.fMinute*(180.f/30.f)
131dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com                       + time.fSecond*(180.f/1800.f) );
132dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
133dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeWidth(10);
134dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.reset();
135dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.moveTo(-56,0);
136dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.lineTo(224,0);
137dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintStroke);
138dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
139dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-56-5, -5, 224+5, 5);
140dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[0] = SkPoint::Make(5,5);
141dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[1] = SkPoint::Make(5,5);
142dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[2] = SkPoint::Make(5,5);
143dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[3] = SkPoint::Make(5,5);
144dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rrect.setRectRadii(rect, radii);
145dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawRRect(rrect, paintFill);
146dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
147dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->restore();
148dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
149dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        // Write seconds
150dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->save();
151dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->rotate(time.fSecond*(180.f/30.f));
152dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintFill.setColor(0xffd40000);
153dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setColor(0xffd40000);
154dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeWidth(6);
155dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
156dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.reset();
157dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.moveTo(-60,0);
158dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.lineTo(166,0);
159dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintStroke);
160dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
161dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-60-3, -3, 166+3, 3);
162dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[0] = SkPoint::Make(3,3);
163dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[1] = SkPoint::Make(3,3);
164dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[2] = SkPoint::Make(3,3);
165dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        radii[3] = SkPoint::Make(3,3);
166dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rrect.setRectRadii(rect, radii);
167dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawRRect(rrect, paintFill);
168dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
169dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-20, -20, 20, 20);
170dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
171dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.reset();
172dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 0, 0, false);
173dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.addOval(rect, SkPath::kCCW_Direction);
174dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 360, 0, true);
175dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintFill);
176dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
177dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawOval(rect, paintFill);
178dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
179dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-20+190, -20, 20+190, 20);
180dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
181dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.reset();
182dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 0, 0, false);
183dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.addOval(rect, SkPath::kCCW_Direction);
184dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 360, 0, true);
185dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintStroke);
186dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
187dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawOval(rect, paintStroke);
188dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
189dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintFill.setColor(0xff505050);
190dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
191dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-6, -6, 6, 6);
192dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 0, 0, false);
193dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.addOval(rect, SkPath::kCCW_Direction);
194dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 360, 0, true);
195dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintFill);
196dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
197dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawOval(rect, paintFill);
198dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-6, -6, 6, 6);
199dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawOval(rect, paintFill);
200dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
201dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->restore();
202dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
203dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setStrokeWidth(18);
204dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        paintStroke.setColor(0xff325FA2);
205dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        rect = SkRect::MakeLTRB(-284, -284, 284, 284);
206dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#ifdef USE_PATH
207dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.reset();
208dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 0, 0, false);
209dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.addOval(rect, SkPath::kCCW_Direction);
210dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        path.arcTo(rect, 360, 0, true);
211dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawPath(path, paintStroke);
212dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#else
213dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->drawOval(rect, paintStroke);
214dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com#endif
215dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
216dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        canvas->restore();
217dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
218dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com        this->inval(NULL);
219dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com    }
220dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
221dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.comprivate:
222dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
223dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com    typedef SampleView INHERITED;
224dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com};
225dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
226dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com//////////////////////////////////////////////////////////////////////////////
227dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.com
228dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.comstatic SkView* MyFactory() { return new ClockView; }
229dcd36f3c9db6ff415834276d5f4b5fa1ced8ba25jvanverth@google.comstatic SkViewRegister reg(MyFactory);
230