11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
80b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SampleCode.h"
90b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkView.h"
100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkCanvas.h"
110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkGradientShader.h"
120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkGraphics.h"
130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkImageDecoder.h"
140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkPath.h"
150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkRegion.h"
160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkShader.h"
170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkUtils.h"
180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkXfermode.h"
190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkColorPriv.h"
200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkColorFilter.h"
210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkTime.h"
220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkTypeface.h"
230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkOSFile.h"
250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkStream.h"
260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkGpuDevice.h"
281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic void make_bitmap(SkBitmap* bitmap, GrContext* ctx) {
301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkCanvas canvas;
311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    if (ctx) {
331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        SkDevice* dev = new SkGpuDevice(ctx, SkBitmap::kARGB_8888_Config, 64, 64);
341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas.setDevice(dev)->unref();
351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        *bitmap = dev->accessBitmap(false);
361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    } else {
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        bitmap->setConfig(SkBitmap::kARGB_8888_Config, 64, 64);
381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        bitmap->allocPixels();
391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas.setBitmapDevice(*bitmap);
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    }
411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    canvas.drawColor(SK_ColorRED);
430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkPaint paint;
440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    paint.setAntiAlias(true);
450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    const SkPoint pts[] = { { 0, 0 }, { 64, 64 } };
460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    const SkColor colors[] = { SK_ColorWHITE, SK_ColorBLUE };
470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                                   SkShader::kClamp_TileMode))->unref();
490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    canvas.drawCircle(32, 32, 32, paint);
500b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}
510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass BitmapRectView : public SampleView {
530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerpublic:
540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger	BitmapRectView() {
550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        this->setBGColor(SK_ColorGRAY);
560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprotected:
590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // overrides from SkEventSink
600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onQuery(SkEvent* evt) {
610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        if (SampleCode::TitleQ(*evt)) {
620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SampleCode::TitleR(evt, "BitmapRect");
630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            return true;
640b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        }
650b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        return this->INHERITED::onQuery(evt);
660b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
670b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
680b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual void onDrawContent(SkCanvas* canvas) {
691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        GrContext* ctx = SampleCode::GetGr();
701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
710b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        const SkIRect src[] = {
720b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            { 0, 0, 32, 32 },
730b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            { 0, 0, 80, 80 },
740b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            { 32, 32, 96, 96 },
750b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            { -32, -32, 32, 32, }
760b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        };
770b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
780b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        SkPaint paint;
790b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        paint.setStyle(SkPaint::kStroke_Style);
801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        paint.setColor(ctx ? SK_ColorGREEN : SK_ColorYELLOW);
811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        SkBitmap bitmap;
831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        make_bitmap(&bitmap, ctx);
840b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
850b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        SkRect dstR = { 0, 200, 128, 380 };
860b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
870b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        canvas->translate(16, 40);
880b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        for (size_t i = 0; i < SK_ARRAY_COUNT(src); i++) {
890b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SkRect srcR;
900b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            srcR.set(src[i]);
910b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            canvas->drawBitmap(bitmap, 0, 0, &paint);
931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            canvas->drawBitmapRect(bitmap, &src[i], dstR, &paint);
940b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
950b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            canvas->drawRect(dstR, paint);
960b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            canvas->drawRect(srcR, paint);
970b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
980b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            canvas->translate(160, 0);
990b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        }
1000b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
1010b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1020b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprivate:
1030b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    typedef SkView INHERITED;
1040b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger};
1050b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1060b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger//////////////////////////////////////////////////////////////////////////////
1070b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
1080b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkView* MyFactory() { return new BitmapRectView; }
1090b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkViewRegister reg(MyFactory);
1100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
111