blob: 217a2cac6627dc186269f3cc19ba546177f52adb [file] [log] [blame]
humperd1d3bae2014-08-08 12:11:33 -07001/*
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
msarettd15750c2016-03-18 15:48:49 -07008#include "DecodeFile.h"
humperd1d3bae2014-08-08 12:11:33 -07009#include "Resources.h"
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040010#include "Sample.h"
humperd1d3bae2014-08-08 12:11:33 -070011#include "SkBlurMaskFilter.h"
12#include "SkCanvas.h"
13#include "SkColorPriv.h"
bungemand3ebb482015-08-05 13:57:49 -070014#include "SkPath.h"
humperd1d3bae2014-08-08 12:11:33 -070015#include "SkRandom.h"
16#include "SkStream.h"
17#include "SkTime.h"
Mike Reedebfce6d2016-12-12 10:02:12 -050018#include "SkClipOpPriv.h"
humperd1d3bae2014-08-08 12:11:33 -070019
20// Intended to exercise pixel snapping observed with scaled images (and
21// with non-scaled images, but for a different reason): Bug 1145
22
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040023class IdentityScaleView : public Sample {
humperd1d3bae2014-08-08 12:11:33 -070024public:
25 IdentityScaleView(const char imageFilename[]) {
Mike Reed0933bc92017-12-09 01:27:41 +000026 if (!DecodeDataToBitmap(GetResourceAsData(imageFilename), &fBM)) {
27 fBM.allocN32Pixels(1, 1);
28 *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad
29 }
humperd1d3bae2014-08-08 12:11:33 -070030 }
31
32protected:
33 SkBitmap fBM;
34
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040035 bool onQuery(Sample::Event* evt) override {
36 if (Sample::TitleQ(*evt)) {
37 Sample::TitleR(evt, "IdentityScale");
humperd1d3bae2014-08-08 12:11:33 -070038 return true;
39 }
40 return this->INHERITED::onQuery(evt);
41 }
42
mtklein36352bf2015-03-25 18:17:31 -070043 void onDrawContent(SkCanvas* canvas) override {
humperd1d3bae2014-08-08 12:11:33 -070044
45 SkPaint paint;
46
47 paint.setAntiAlias(true);
48 paint.setTextSize(48);
reed93a12152015-03-16 10:08:34 -070049 paint.setFilterQuality(kHigh_SkFilterQuality);
humperd1d3bae2014-08-08 12:11:33 -070050
51 SkTime::DateTime time;
52 SkTime::GetDateTime(&time);
53
54 bool use_scale = (time.fSecond % 2 == 1);
55 const char *text;
56
57 canvas->save();
58 if (use_scale) {
59 text = "Scaled = 1";
60 } else {
61
62 SkRect r = { 100, 100, 356, 356 };
63 SkPath clipPath;
64 clipPath.addRoundRect(r, SkIntToScalar(5), SkIntToScalar(5));
Mike Reedc1f77742016-12-09 09:00:50 -050065 canvas->clipPath(clipPath, kIntersect_SkClipOp, true);
humperd1d3bae2014-08-08 12:11:33 -070066 text = "Scaled = 0";
67 }
68 canvas->drawBitmap( fBM, 100, 100, &paint );
69 canvas->restore();
Cary Clark2a475ea2017-04-28 15:35:12 -040070 canvas->drawString(text, 100, 400, paint );
humperd1d3bae2014-08-08 12:11:33 -070071 }
72
73private:
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040074 typedef Sample INHERITED;
humperd1d3bae2014-08-08 12:11:33 -070075};
76
77//////////////////////////////////////////////////////////////////////////////
78
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040079DEF_SAMPLE( return new IdentityScaleView("images/mandrill_256.png"); )