blob: 684c9761b0227a527109d03aab5f6595e28fe75e [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SampleCode.h"
9#include "SkView.h"
10#include "SkCanvas.h"
11#include "SkGradientShader.h"
12#include "SkGraphics.h"
13#include "SkImageDecoder.h"
14#include "SkPath.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000015#include "SkRegion.h"
16#include "SkShader.h"
17#include "SkUtils.h"
18#include "SkXfermode.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000019#include "SkColorPriv.h"
20#include "SkColorFilter.h"
21#include "SkTime.h"
22#include "SkTypeface.h"
23
reed@android.com8a1c16f2008-12-17 15:59:43 +000024#include "SkOSFile.h"
25#include "SkStream.h"
26
bsalomon@google.comcf8fb1f2012-08-02 14:03:32 +000027#if SK_SUPPORT_GPU
reed@google.com3cec4d72011-07-06 13:59:47 +000028#include "SkGpuDevice.h"
bsalomon@google.comcf8fb1f2012-08-02 14:03:32 +000029#else
30class GrContext;
31#endif
32
reed@google.com3cec4d72011-07-06 13:59:47 +000033
reed@google.com1b195bc2011-07-06 15:10:25 +000034static void make_bitmap(SkBitmap* bitmap, GrContext* ctx) {
reed@google.com3cec4d72011-07-06 13:59:47 +000035 SkCanvas canvas;
36
bsalomon@google.comcf8fb1f2012-08-02 14:03:32 +000037#if SK_SUPPORT_GPU
reed@google.com3cec4d72011-07-06 13:59:47 +000038 if (ctx) {
39 SkDevice* dev = new SkGpuDevice(ctx, SkBitmap::kARGB_8888_Config, 64, 64);
40 canvas.setDevice(dev)->unref();
41 *bitmap = dev->accessBitmap(false);
bsalomon@google.comcf8fb1f2012-08-02 14:03:32 +000042 } else
43#endif
44 {
reed@google.com3cec4d72011-07-06 13:59:47 +000045 bitmap->setConfig(SkBitmap::kARGB_8888_Config, 64, 64);
46 bitmap->allocPixels();
47 canvas.setBitmapDevice(*bitmap);
48 }
49
reed@android.comfead49e2009-10-15 18:51:46 +000050 canvas.drawColor(SK_ColorRED);
51 SkPaint paint;
52 paint.setAntiAlias(true);
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000053 const SkPoint pts[] = { { 0, 0 }, { 64, 64 } };
reed@android.comfead49e2009-10-15 18:51:46 +000054 const SkColor colors[] = { SK_ColorWHITE, SK_ColorBLUE };
55 paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
reed@google.com3cec4d72011-07-06 13:59:47 +000056 SkShader::kClamp_TileMode))->unref();
reed@android.comfead49e2009-10-15 18:51:46 +000057 canvas.drawCircle(32, 32, 32, paint);
reed@android.comfead49e2009-10-15 18:51:46 +000058}
reed@android.com8a1c16f2008-12-17 15:59:43 +000059
reed@google.comf2183392011-04-22 14:10:48 +000060class BitmapRectView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000061public:
reed@android.com8a1c16f2008-12-17 15:59:43 +000062 BitmapRectView() {
reed@google.comf2183392011-04-22 14:10:48 +000063 this->setBGColor(SK_ColorGRAY);
reed@android.com8a1c16f2008-12-17 15:59:43 +000064 }
65
66protected:
67 // overrides from SkEventSink
reed@android.comfead49e2009-10-15 18:51:46 +000068 virtual bool onQuery(SkEvent* evt) {
69 if (SampleCode::TitleQ(*evt)) {
70 SampleCode::TitleR(evt, "BitmapRect");
reed@android.com8a1c16f2008-12-17 15:59:43 +000071 return true;
72 }
73 return this->INHERITED::onQuery(evt);
74 }
75
reed@google.comf2183392011-04-22 14:10:48 +000076 virtual void onDrawContent(SkCanvas* canvas) {
reed@google.comb636adf2011-09-06 19:34:13 +000077 GrContext* ctx = SampleCode::GetGr();
reed@google.com1b195bc2011-07-06 15:10:25 +000078
reed@android.comfead49e2009-10-15 18:51:46 +000079 const SkIRect src[] = {
80 { 0, 0, 32, 32 },
reed@android.com87899992009-10-16 14:48:38 +000081 { 0, 0, 80, 80 },
reed@android.comfead49e2009-10-15 18:51:46 +000082 { 32, 32, 96, 96 },
83 { -32, -32, 32, 32, }
84 };
85
reed@android.com8a1c16f2008-12-17 15:59:43 +000086 SkPaint paint;
reed@android.comfead49e2009-10-15 18:51:46 +000087 paint.setStyle(SkPaint::kStroke_Style);
reed@google.com1b195bc2011-07-06 15:10:25 +000088 paint.setColor(ctx ? SK_ColorGREEN : SK_ColorYELLOW);
reed@android.comfead49e2009-10-15 18:51:46 +000089
reed@google.com3cec4d72011-07-06 13:59:47 +000090 SkBitmap bitmap;
reed@google.com1b195bc2011-07-06 15:10:25 +000091 make_bitmap(&bitmap, ctx);
reed@google.com3cec4d72011-07-06 13:59:47 +000092
reed@android.comfead49e2009-10-15 18:51:46 +000093 SkRect dstR = { 0, 200, 128, 380 };
94
95 canvas->translate(16, 40);
96 for (size_t i = 0; i < SK_ARRAY_COUNT(src); i++) {
reed@android.com87899992009-10-16 14:48:38 +000097 SkRect srcR;
98 srcR.set(src[i]);
reed@android.comf2b98d62010-12-20 18:26:13 +000099
reed@google.com3cec4d72011-07-06 13:59:47 +0000100 canvas->drawBitmap(bitmap, 0, 0, &paint);
101 canvas->drawBitmapRect(bitmap, &src[i], dstR, &paint);
reed@android.comfead49e2009-10-15 18:51:46 +0000102
reed@android.comfead49e2009-10-15 18:51:46 +0000103 canvas->drawRect(dstR, paint);
reed@android.comf2b98d62010-12-20 18:26:13 +0000104 canvas->drawRect(srcR, paint);
reed@android.comfead49e2009-10-15 18:51:46 +0000105
106 canvas->translate(160, 0);
107 }
reed@android.com8a1c16f2008-12-17 15:59:43 +0000108 }
109
110private:
111 typedef SkView INHERITED;
112};
113
114//////////////////////////////////////////////////////////////////////////////
115
116static SkView* MyFactory() { return new BitmapRectView; }
117static SkViewRegister reg(MyFactory);
118