#include "SampleCode.h" #include "SkView.h" #include "SkCanvas.h" #include "SkGradientShader.h" #include "SkGraphics.h" #include "SkImageDecoder.h" #include "SkPath.h" #include "SkPorterDuff.h" #include "SkRegion.h" #include "SkShader.h" #include "SkUtils.h" #include "SkXfermode.h" #include "SkShaderExtras.h" #include "SkColorPriv.h" #include "SkColorFilter.h" #include "SkTime.h" #include "SkTypeface.h" #include "SkImageRef.h" #include "SkOSFile.h" #include "SkStream.h" #define SPECIFIC_IMAGE "/skimages/main.gif" class BitmapRectView : public SkView { public: SkBitmap fBitmap; int fCurrX, fCurrY; BitmapRectView() { SkImageDecoder::DecodeFile(SPECIFIC_IMAGE, &fBitmap); fCurrX = fCurrY = 0; } protected: // overrides from SkEventSink virtual bool onQuery(SkEvent* evt) { if (SampleCode::TitleQ(*evt)) { SkString str("BitmapRect: "); str.append(SPECIFIC_IMAGE); SampleCode::TitleR(evt, str.c_str()); return true; } return this->INHERITED::onQuery(evt); } void drawBG(SkCanvas* canvas) { canvas->drawColor(SK_ColorGRAY); } virtual void onDraw(SkCanvas* canvas) { this->drawBG(canvas); canvas->drawBitmap(fBitmap, 0, 0, NULL); SkIRect subset; const int SRC_WIDTH = 16; const int SRC_HEIGHT = 16; subset.set(0, 0, SRC_WIDTH, SRC_HEIGHT); subset.offset(fCurrX, fCurrY); SkDebugf("---- src x=%d y=%d\n", subset.fLeft, subset.fTop); SkRect dst0, dst1; SkScalar y = SkIntToScalar(fBitmap.height() + 16); dst0.set(SkIntToScalar(50), y, SkIntToScalar(50+SRC_WIDTH), y + SkIntToScalar(SRC_HEIGHT)); dst1 = dst0; dst1.offset(SkIntToScalar(200), 0); dst1.fRight = dst1.fLeft + 8 * dst0.width(); dst1.fBottom = dst1.fTop + 8 * dst0.height(); canvas->drawBitmapRect(fBitmap, &subset, dst0, NULL); canvas->drawBitmapRect(fBitmap, &subset, dst1, NULL); SkPaint paint; paint.setColor(0x88FF0000); canvas->drawRect(dst0, paint); paint.setColor(0x880000FF); canvas->drawRect(dst1, paint); } virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) { return new Click(this); } virtual bool onClick(Click* click) { fCurrX = click->fICurr.fX; fCurrY = click->fICurr.fY; this->inval(NULL); return true; } private: typedef SkView INHERITED; }; ////////////////////////////////////////////////////////////////////////////// static SkView* MyFactory() { return new BitmapRectView; } static SkViewRegister reg(MyFactory);