blob: 95ea1a7591748c5db32143cb6ce7b18dbb2f9a23 [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
reed@google.com3cec4d72011-07-06 13:59:47 +000027#include "SkGpuDevice.h"
28
reed@google.com1b195bc2011-07-06 15:10:25 +000029static void make_bitmap(SkBitmap* bitmap, GrContext* ctx) {
reed@google.com3cec4d72011-07-06 13:59:47 +000030 SkCanvas canvas;
31
32 if (ctx) {
33 SkDevice* dev = new SkGpuDevice(ctx, SkBitmap::kARGB_8888_Config, 64, 64);
34 canvas.setDevice(dev)->unref();
35 *bitmap = dev->accessBitmap(false);
36 } else {
37 bitmap->setConfig(SkBitmap::kARGB_8888_Config, 64, 64);
38 bitmap->allocPixels();
39 canvas.setBitmapDevice(*bitmap);
40 }
41
reed@android.comfead49e2009-10-15 18:51:46 +000042 canvas.drawColor(SK_ColorRED);
43 SkPaint paint;
44 paint.setAntiAlias(true);
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000045 const SkPoint pts[] = { { 0, 0 }, { 64, 64 } };
reed@android.comfead49e2009-10-15 18:51:46 +000046 const SkColor colors[] = { SK_ColorWHITE, SK_ColorBLUE };
47 paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
reed@google.com3cec4d72011-07-06 13:59:47 +000048 SkShader::kClamp_TileMode))->unref();
reed@android.comfead49e2009-10-15 18:51:46 +000049 canvas.drawCircle(32, 32, 32, paint);
reed@android.comfead49e2009-10-15 18:51:46 +000050}
reed@android.com8a1c16f2008-12-17 15:59:43 +000051
reed@google.comf2183392011-04-22 14:10:48 +000052class BitmapRectView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000053public:
reed@android.com8a1c16f2008-12-17 15:59:43 +000054 BitmapRectView() {
reed@google.comf2183392011-04-22 14:10:48 +000055 this->setBGColor(SK_ColorGRAY);
reed@android.com8a1c16f2008-12-17 15:59:43 +000056 }
57
58protected:
59 // overrides from SkEventSink
reed@android.comfead49e2009-10-15 18:51:46 +000060 virtual bool onQuery(SkEvent* evt) {
61 if (SampleCode::TitleQ(*evt)) {
62 SampleCode::TitleR(evt, "BitmapRect");
reed@android.com8a1c16f2008-12-17 15:59:43 +000063 return true;
64 }
65 return this->INHERITED::onQuery(evt);
66 }
67
reed@google.comf2183392011-04-22 14:10:48 +000068 virtual void onDrawContent(SkCanvas* canvas) {
reed@google.comb636adf2011-09-06 19:34:13 +000069 GrContext* ctx = SampleCode::GetGr();
reed@google.com1b195bc2011-07-06 15:10:25 +000070
reed@android.comfead49e2009-10-15 18:51:46 +000071 const SkIRect src[] = {
72 { 0, 0, 32, 32 },
reed@android.com87899992009-10-16 14:48:38 +000073 { 0, 0, 80, 80 },
reed@android.comfead49e2009-10-15 18:51:46 +000074 { 32, 32, 96, 96 },
75 { -32, -32, 32, 32, }
76 };
77
reed@android.com8a1c16f2008-12-17 15:59:43 +000078 SkPaint paint;
reed@android.comfead49e2009-10-15 18:51:46 +000079 paint.setStyle(SkPaint::kStroke_Style);
reed@google.com1b195bc2011-07-06 15:10:25 +000080 paint.setColor(ctx ? SK_ColorGREEN : SK_ColorYELLOW);
reed@android.comfead49e2009-10-15 18:51:46 +000081
reed@google.com3cec4d72011-07-06 13:59:47 +000082 SkBitmap bitmap;
reed@google.com1b195bc2011-07-06 15:10:25 +000083 make_bitmap(&bitmap, ctx);
reed@google.com3cec4d72011-07-06 13:59:47 +000084
reed@android.comfead49e2009-10-15 18:51:46 +000085 SkRect dstR = { 0, 200, 128, 380 };
86
87 canvas->translate(16, 40);
88 for (size_t i = 0; i < SK_ARRAY_COUNT(src); i++) {
reed@android.com87899992009-10-16 14:48:38 +000089 SkRect srcR;
90 srcR.set(src[i]);
reed@android.comf2b98d62010-12-20 18:26:13 +000091
reed@google.com3cec4d72011-07-06 13:59:47 +000092 canvas->drawBitmap(bitmap, 0, 0, &paint);
93 canvas->drawBitmapRect(bitmap, &src[i], dstR, &paint);
reed@android.comfead49e2009-10-15 18:51:46 +000094
reed@android.comfead49e2009-10-15 18:51:46 +000095 canvas->drawRect(dstR, paint);
reed@android.comf2b98d62010-12-20 18:26:13 +000096 canvas->drawRect(srcR, paint);
reed@android.comfead49e2009-10-15 18:51:46 +000097
98 canvas->translate(160, 0);
99 }
reed@android.com8a1c16f2008-12-17 15:59:43 +0000100 }
101
102private:
103 typedef SkView INHERITED;
104};
105
106//////////////////////////////////////////////////////////////////////////////
107
108static SkView* MyFactory() { return new BitmapRectView; }
109static SkViewRegister reg(MyFactory);
110