/* * EdgeApp.cpp * edge * * Created by Cary Clark on 7/6/11. * Copyright 2011 __MyCompanyName__. All rights reserved. * */ #include "SkCanvas.h" #include "SkDevice.h" #include "SkGraphics.h" #include "SkImageEncoder.h" #include "SkPaint.h" #include "SkPicture.h" #include "SkStream.h" #include "SkTime.h" #include "SkWindow.h" #include "SkTouchGesture.h" #include "SkTypeface.h" #include "Intersection_Tests.h" extern void CreateSweep(SkBitmap* , float width); extern void CreateHorz(SkBitmap* ); extern void CreateVert(SkBitmap* ); extern void CreateAngle(SkBitmap* sweep, float angle); extern void SkAntiEdge_Test(); static const char gCharEvtName[] = "Char_Event"; static const char gKeyEvtName[] = "Key_Event"; class SkEdgeView : public SkView { public: SkEdgeView() { CreateSweep(&fSweep_1_0, 1); CreateSweep(&fSweep_1_2, 1.2f); CreateSweep(&fSweep_1_4, 1.4f); CreateSweep(&fSweep_1_6, 1.6f); CreateHorz(&fBitmapH); CreateVert(&fBitmapV); CreateAngle(&fAngle_12, 12); CreateAngle(&fAngle_45, 45); } virtual ~SkEdgeView() {} protected: virtual void onDraw(SkCanvas* canvas) { canvas->drawColor(SK_ColorWHITE); canvas->drawBitmap(fSweep_1_0, 0, 10); canvas->drawBitmap(fBitmapH, 110, 10); canvas->drawBitmap(fBitmapV, 220, 10); canvas->drawBitmap(fSweep_1_2, 0, 110); canvas->drawBitmap(fSweep_1_4, 100, 110); canvas->drawBitmap(fSweep_1_6, 200, 110); canvas->drawBitmap(fAngle_12, 0, 200); canvas->drawBitmap(fAngle_45, 124, 220); } private: SkBitmap fSweep_1_0; SkBitmap fSweep_1_2; SkBitmap fSweep_1_4; SkBitmap fSweep_1_6; SkBitmap fBitmapH; SkBitmap fBitmapV; SkBitmap fAngle_12; SkBitmap fAngle_45; typedef SkView INHERITED; }; class EdgeWindow : public SkOSWindow { public: EdgeWindow(void* hwnd) : INHERITED(hwnd) { this->setConfig(SkBitmap::kARGB_8888_Config); this->setVisibleP(true); fView.setVisibleP(true); fView.setClipToBounds(false); this->attachChildToFront(&fView)->unref(); } virtual ~EdgeWindow() {} virtual void draw(SkCanvas* canvas){ this->INHERITED::draw(canvas); } protected: SkEdgeView fView; virtual void onDraw(SkCanvas* canvas) { } virtual bool onHandleKey(SkKey key) { SkEvent evt(gKeyEvtName); evt.setFast32(key); if (fView.doQuery(&evt)) { return true; } return this->INHERITED::onHandleKey(key); } virtual bool onHandleChar(SkUnichar uni) { SkEvent evt(gCharEvtName); evt.setFast32(uni); if (fView.doQuery(&evt)) { return true; } return this->INHERITED::onHandleChar(uni); } virtual void onSizeChange() { fView.setSize(this->width(), this->height()); this->INHERITED::onSizeChange(); } virtual SkCanvas* beforeChildren(SkCanvas* canvas) { return this->INHERITED::beforeChildren(canvas); } virtual void afterChildren(SkCanvas*) {} virtual void beforeChild(SkView* child, SkCanvas* canvas) {} virtual void afterChild(SkView* child, SkCanvas* canvas) {} virtual bool onEvent(const SkEvent& evt) { return this->INHERITED::onEvent(evt); } virtual bool onQuery(SkEvent* evt) { return this->INHERITED::onQuery(evt); } virtual bool onDispatchClick(int x, int y, Click::State state, void* owner) { int w = SkScalarRound(this->width()); int h = SkScalarRound(this->height()); // check for the resize-box if (w - x < 16 && h - y < 16) { return false; // let the OS handle the click } else { return this->INHERITED::onDispatchClick(x, y, state, owner); } } virtual bool onClick(Click* click) { return false; } virtual Click* onFindClickHandler(SkScalar x, SkScalar y) { return 0; } typedef SkOSWindow INHERITED; }; #include "SkApplication.h" SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) { return new EdgeWindow(hwnd); } void application_init() { SkGraphics::Init(); SkEvent::Init(); Intersection_Tests(); SkAntiEdge_Test(); } void application_term() { SkEvent::Term(); SkGraphics::Term(); }