From: humper Date: Fri, 8 Aug 2014 19:11:33 +0000 (-0700) Subject: add an animated test to verify that high-quality identity scaling doesn't change... X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~6399 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1d3baeb986732d02987546401d5a4c19705f02a;p=platform%2Fupstream%2FlibSkiaSharp.git add an animated test to verify that high-quality identity scaling doesn't change the image BUG=skia: R=reed@google.com Author: humper@google.com Review URL: https://codereview.chromium.org/454913002 --- diff --git a/gyp/SampleApp.gyp b/gyp/SampleApp.gyp index d5a3479..6f39f71 100644 --- a/gyp/SampleApp.gyp +++ b/gyp/SampleApp.gyp @@ -72,6 +72,7 @@ '../samplecode/SampleHairCurves.cpp', '../samplecode/SampleHairline.cpp', '../samplecode/SampleHairModes.cpp', + '../samplecode/SampleIdentityScale.cpp', '../samplecode/SampleLayerMask.cpp', '../samplecode/SampleLayers.cpp', '../samplecode/SampleLCD.cpp', diff --git a/samplecode/SampleIdentityScale.cpp b/samplecode/SampleIdentityScale.cpp new file mode 100644 index 0000000..a6b5c5c --- /dev/null +++ b/samplecode/SampleIdentityScale.cpp @@ -0,0 +1,92 @@ +/* + * Copyright 2014 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm.h" + +#include "Resources.h" +#include "SampleCode.h" +#include "SkBlurMaskFilter.h" +#include "SkCanvas.h" +#include "SkColorPriv.h" +#include "SkImageDecoder.h" +#include "SkRandom.h" +#include "SkStream.h" +#include "SkTime.h" + +// Intended to exercise pixel snapping observed with scaled images (and +// with non-scaled images, but for a different reason): Bug 1145 + +class IdentityScaleView : public SampleView { +public: + IdentityScaleView(const char imageFilename[]) { + SkString resourcePath = GetResourcePath(imageFilename); + SkImageDecoder* codec = NULL; + SkFILEStream stream(resourcePath.c_str()); + if (stream.isValid()) { + codec = SkImageDecoder::Factory(&stream); + } + if (codec) { + stream.rewind(); + codec->decode(&stream, &fBM, kN32_SkColorType, SkImageDecoder::kDecodePixels_Mode); + SkDELETE(codec); + } else { + fBM.allocN32Pixels(1, 1); + *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad + } + } + +protected: + SkBitmap fBM; + + // overrides from SkEventSink + virtual bool onQuery(SkEvent* evt) SK_OVERRIDE { + if (SampleCode::TitleQ(*evt)) { + SampleCode::TitleR(evt, "IdentityScale"); + return true; + } + return this->INHERITED::onQuery(evt); + } + + virtual void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { + + SkPaint paint; + + paint.setAntiAlias(true); + paint.setTextSize(48); + paint.setFilterLevel(SkPaint::kHigh_FilterLevel); + + SkTime::DateTime time; + SkTime::GetDateTime(&time); + + bool use_scale = (time.fSecond % 2 == 1); + const char *text; + + canvas->save(); + if (use_scale) { + text = "Scaled = 1"; + } else { + + SkRect r = { 100, 100, 356, 356 }; + SkPath clipPath; + clipPath.addRoundRect(r, SkIntToScalar(5), SkIntToScalar(5)); + canvas->clipPath(clipPath, SkRegion::kIntersect_Op, SkToBool(1)); + text = "Scaled = 0"; + } + canvas->drawBitmap( fBM, 100, 100, &paint ); + canvas->restore(); + canvas->drawText( text, strlen(text), 100, 400, paint ); + this->inval(NULL); + } + +private: + typedef SampleView INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static SkView* MyFactory() { return new IdentityScaleView("mandrill_256.png"); } +static SkViewRegister reg(MyFactory);