SampleIdentityScale.cpp revision c465d13e6fca5e171bde45d35b2dd43117f4702e
1/*
2 * Copyright 2014 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 "DecodeFile.h"
9#include "gm.h"
10
11#include "Resources.h"
12#include "SampleCode.h"
13#include "SkBlurMaskFilter.h"
14#include "SkCanvas.h"
15#include "SkColorPriv.h"
16#include "SkPath.h"
17#include "SkRandom.h"
18#include "SkStream.h"
19#include "SkTime.h"
20#include "SkClipOpPriv.h"
21
22// Intended to exercise pixel snapping observed with scaled images (and
23// with non-scaled images, but for a different reason):  Bug 1145
24
25class IdentityScaleView : public SampleView {
26public:
27    IdentityScaleView(const char imageFilename[]) {
28      SkString resourcePath = GetResourcePath(imageFilename);
29      if (!decode_file(resourcePath.c_str(), &fBM)) {
30          fBM.allocN32Pixels(1, 1);
31          *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad
32      }
33    }
34
35protected:
36    SkBitmap fBM;
37
38    // overrides from SkEventSink
39    bool onQuery(SkEvent* evt) override {
40        if (SampleCode::TitleQ(*evt)) {
41            SampleCode::TitleR(evt, "IdentityScale");
42            return true;
43        }
44        return this->INHERITED::onQuery(evt);
45    }
46
47    void onDrawContent(SkCanvas* canvas) override {
48
49        SkPaint paint;
50
51        paint.setAntiAlias(true);
52        paint.setTextSize(48);
53        paint.setFilterQuality(kHigh_SkFilterQuality);
54
55        SkTime::DateTime time;
56        SkTime::GetDateTime(&time);
57
58        bool use_scale = (time.fSecond % 2 == 1);
59        const char *text;
60
61        canvas->save();
62        if (use_scale) {
63          text = "Scaled = 1";
64        } else {
65
66          SkRect r = { 100, 100, 356, 356 };
67          SkPath clipPath;
68          clipPath.addRoundRect(r, SkIntToScalar(5), SkIntToScalar(5));
69          canvas->clipPath(clipPath, kIntersect_SkClipOp, true);
70          text = "Scaled = 0";
71        }
72        canvas->drawBitmap( fBM, 100, 100, &paint );
73        canvas->restore();
74        canvas->drawString(text, 100, 400, paint );
75    }
76
77private:
78    typedef SampleView INHERITED;
79};
80
81//////////////////////////////////////////////////////////////////////////////
82
83static SkView* MyFactory() { return new IdentityScaleView("images/mandrill_256.png"); }
84static SkViewRegister reg(MyFactory);
85