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 "SkBlurMask.h"
10#include "SkBlurMaskFilter.h"
11#include "SkCanvas.h"
12#include "SkDevice.h"
13#include "SkGradientShader.h"
14#include "SkGraphics.h"
15#include "SkImageDecoder.h"
16#include "SkPath.h"
17#include "SkRandom.h"
18#include "SkRegion.h"
19#include "SkShader.h"
20#include "SkUtils.h"
21#include "SkXfermode.h"
22#include "SkColorPriv.h"
23#include "SkColorFilter.h"
24#include "SkTime.h"
25#include "SkTypeface.h"
26#include "SkView.h"
27
28#include "SkOSFile.h"
29#include "SkStream.h"
30
31static void check_for_nonwhite(const SkBitmap& bm, int alpha) {
32    if (bm.colorType() != kRGB_565_SkColorType) {
33        return;
34    }
35
36    for (int y = 0; y < bm.height(); y++) {
37        for (int x = 0; x < bm.width(); x++) {
38            uint16_t c = *bm.getAddr16(x, y);
39            if (c != 0xFFFF) {
40                SkDebugf("------ nonwhite alpha=%x [%d %d] %x\n", alpha, x, y, c);
41                return;
42            }
43        }
44    }
45}
46
47class TextAlphaView : public SampleView {
48public:
49    TextAlphaView() {
50        fByte = 0xFF;
51    }
52
53protected:
54    // overrides from SkEventSink
55    virtual bool onQuery(SkEvent* evt)  {
56        if (SampleCode::TitleQ(*evt)) {
57            SampleCode::TitleR(evt, "TextAlpha");
58            return true;
59        }
60        return this->INHERITED::onQuery(evt);
61    }
62
63    virtual void onDrawContent(SkCanvas* canvas) {
64        const char* str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
65        SkPaint paint;
66        SkScalar    x = SkIntToScalar(10);
67        SkScalar    y = SkIntToScalar(20);
68
69        paint.setFlags(0x105);
70
71        paint.setARGB(fByte, 0xFF, 0xFF, 0xFF);
72
73        paint.setMaskFilter(SkBlurMaskFilter::Create(kNormal_SkBlurStyle,
74                                    SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3))));
75        paint.getMaskFilter()->unref();
76
77        SkRandom rand;
78
79        for (int ps = 6; ps <= 35; ps++) {
80            paint.setColor(rand.nextU() | (0xFF << 24));
81            paint.setTextSize(SkIntToScalar(ps));
82            paint.setTextSize(SkIntToScalar(24));
83            canvas->drawText(str, strlen(str), x, y, paint);
84            y += paint.getFontMetrics(NULL);
85        }
86        if (false) { // avoid bit rot, suppress warning
87            check_for_nonwhite(canvas->getDevice()->accessBitmap(false), fByte);
88            SkDebugf("------ byte %x\n", fByte);
89        }
90
91        if (false) {
92            fByte += 1;
93            fByte &= 0xFF;
94            this->inval(NULL);
95        }
96    }
97
98    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned) SK_OVERRIDE {
99        return new Click(this);
100    }
101
102    virtual bool onClick(Click* click) {
103        int y = click->fICurr.fY;
104        if (y < 0) {
105            y = 0;
106        } else if (y > 255) {
107            y = 255;
108        }
109        fByte = y;
110        this->inval(NULL);
111        return true;
112    }
113
114private:
115    int fByte;
116
117    typedef SampleView INHERITED;
118};
119
120//////////////////////////////////////////////////////////////////////////////
121
122static SkView* MyFactory() { return new TextAlphaView; }
123static SkViewRegister reg(MyFactory);
124