aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SampleApp.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-03-16 12:10:02 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-03-16 12:10:02 +0000
commit52f57e1d11a00bdc5efb96709446546cdbc1ff9d (patch)
treedcd66689acda9eb1ff85c7ca9b0faa60b6bf4247 /samplecode/SampleApp.cpp
parent109a2e3afaf8a14c2b7ff545c80c08d0d6d67a3e (diff)
add fling
git-svn-id: http://skia.googlecode.com/svn/trunk@946 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleApp.cpp')
-rw-r--r--samplecode/SampleApp.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index b94960dbe4..3a7a1a6330 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -11,6 +11,7 @@
#include "SampleCode.h"
#include "GrContext.h"
+#include "SkTouchGesture.h"
//#define DEFAULT_TO_GPU
@@ -224,6 +225,9 @@ protected:
virtual bool onEvent(const SkEvent& evt);
virtual bool onQuery(SkEvent* evt);
+ virtual bool onClick(Click* click);
+ virtual Click* onFindClickHandler(SkScalar x, SkScalar y);
+
#if 0
virtual bool handleChar(SkUnichar uni);
virtual bool handleEvent(const SkEvent& evt);
@@ -243,6 +247,8 @@ private:
GrContext* fGrContext;
SkPath fClipPath;
+ SkTouchGesture fGesture;
+
enum CanvasType {
kRaster_CanvasType,
kPicture_CanvasType,
@@ -395,6 +401,20 @@ void SampleWindow::draw(SkCanvas* canvas) {
gAnimTimePrev = gAnimTime;
gAnimTime = SkTime::GetMSecs();
+ // Apply any gesture matrix
+ if (true) {
+ const SkMatrix& localM = fGesture.localM();
+ if (localM.getType() & SkMatrix::kScale_Mask) {
+ canvas->setExternalMatrix(&localM);
+ }
+ canvas->concat(localM);
+ canvas->concat(fGesture.globalM());
+
+ if (fGesture.isActive()) {
+ this->inval(NULL);
+ }
+ }
+
if (fNClip) {
this->INHERITED::draw(canvas);
SkBitmap orig = capture_bitmap(canvas);
@@ -825,6 +845,49 @@ bool SampleWindow::onHandleKey(SkKey key) {
return this->INHERITED::onHandleKey(key);
}
+///////////////////////////////////////////////////////////////////////////////
+
+static const char gGestureClickType[] = "GestureClickType";
+
+class GestureClick : public SkView::Click {
+public:
+ GestureClick(SkView* target) : SkView::Click(target) {
+ this->setType(gGestureClickType);
+ }
+
+ static bool IsGesture(Click* click) {
+ return click->isType(gGestureClickType);
+ }
+};
+
+SkView::Click* SampleWindow::onFindClickHandler(SkScalar x, SkScalar y) {
+ return new GestureClick(this);
+}
+
+bool SampleWindow::onClick(Click* click) {
+ if (GestureClick::IsGesture(click)) {
+ float x = SkScalarToFloat(click->fCurr.fX);
+ float y = SkScalarToFloat(click->fCurr.fY);
+ switch (click->fState) {
+ case SkView::Click::kDown_State:
+ fGesture.touchBegin(click, x, y);
+ break;
+ case SkView::Click::kMoved_State:
+ fGesture.touchMoved(click, x, y);
+ this->inval(NULL);
+ break;
+ case SkView::Click::kUp_State:
+ fGesture.touchEnd(click);
+ this->inval(NULL);
+ break;
+ }
+ return true;
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
void SampleWindow::loadView(SkView* view) {
SkView::F2BIter iter(this);
SkView* prev = iter.next();