• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 #include "SampleCode.h"
9 #include "SkView.h"
10 #include "SkCanvas.h"
11 
12 static const int kILimit = 101;
13 static const SkScalar kLimit = SK_Scalar1 * kILimit;
14 
15 class OvalTestView : public SampleView {
16 public:
17     SkSize      fSize;
18     SkPMColor   fInsideColor;   // signals an interior pixel that was not set
19     SkPMColor   fOutsideColor;  // signals an exterior pixels that was set
20     SkBitmap    fBitmap;
21 
OvalTestView()22 	OvalTestView() {
23         fSize.set(SK_Scalar1, SK_Scalar1);
24 
25         fBitmap.setConfig(SkBitmap::kARGB_8888_Config, kILimit, kILimit);
26         fBitmap.allocPixels();
27 
28         fInsideColor = SkPreMultiplyColor(SK_ColorRED);
29         fOutsideColor = SkPreMultiplyColor(SK_ColorGREEN);
30 
31         this->setBGColor(0xFFDDDDDD);
32     }
33 
34 protected:
35     // overrides from SkEventSink
onQuery(SkEvent * evt)36     virtual bool onQuery(SkEvent* evt) {
37         if (SampleCode::TitleQ(*evt)) {
38             SampleCode::TitleR(evt, "OvalTest");
39             return true;
40         }
41         return this->INHERITED::onQuery(evt);
42     }
43 
drawOval()44     void drawOval() {
45         SkCanvas canvas(fBitmap);
46         SkPaint p;
47 
48         fBitmap.eraseColor(0);
49         canvas.drawOval(SkRect::MakeSize(fSize), p);
50     }
51 
checkOval(int * flatCount,int * buldgeCount)52     int checkOval(int* flatCount, int* buldgeCount) {
53         int flatc = 0;
54         int buldgec = 0;
55         const SkScalar rad = SkScalarHalf(fSize.width());
56         SkScalar cx = SkScalarHalf(fSize.width());
57         SkScalar cy = SkScalarHalf(fSize.height());
58         for (int y = 0; y < kILimit; y++) {
59             for (int x = 0; x < kILimit; x++) {
60                 // measure from pixel centers
61                 SkScalar px = SkIntToScalar(x) + SK_ScalarHalf;
62                 SkScalar py = SkIntToScalar(y) + SK_ScalarHalf;
63 
64                 SkPMColor* ptr = fBitmap.getAddr32(x, y);
65                 SkScalar dist = SkPoint::Length(px - cx, py - cy);
66                 if (dist <= rad && !*ptr) {
67                     flatc++;
68                     *ptr = fInsideColor;
69                 } else if (dist > rad && *ptr) {
70                     buldgec++;
71                     *ptr = fOutsideColor;
72                 }
73             }
74         }
75         if (flatCount) *flatCount = flatc;
76         if (buldgeCount) *buldgeCount = buldgec;
77         return flatc + buldgec;
78     }
79 
onDrawContent(SkCanvas * canvas)80     virtual void onDrawContent(SkCanvas* canvas) {
81         this->drawOval();
82         int flatCount, buldgeCount;
83         this->checkOval(&flatCount, &buldgeCount);
84         this->inval(NULL);
85 
86         canvas->drawBitmap(fBitmap, SkIntToScalar(20), SkIntToScalar(20), NULL);
87 
88 
89         static int gFlatCount;
90         static int gBuldgeCount;
91         gFlatCount += flatCount;
92         gBuldgeCount += buldgeCount;
93 
94         if (fSize.fWidth < kLimit) {
95             SkDebugf("--- width=%g, flat=%d buldge=%d total: flat=%d buldge=%d\n", fSize.fWidth,
96                      flatCount, buldgeCount, gFlatCount, gBuldgeCount);
97             fSize.fWidth += SK_Scalar1;
98             fSize.fHeight += SK_Scalar1;
99         } else {
100          //   fSize.set(SK_Scalar1, SK_Scalar1);
101         }
102     }
103 
onFindClickHandler(SkScalar x,SkScalar y)104     virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
105         this->inval(NULL);
106         return NULL;
107     }
108 
109 private:
110     typedef SampleView INHERITED;
111 };
112 
113 ///////////////////////////////////////////////////////////////////////////////
114 
MyFactory()115 static SkView* MyFactory() { return new OvalTestView; }
116 static SkViewRegister reg(MyFactory);
117 
118