use statictextviews to display coordinates in unitmapper



git-svn-id: http://skia.googlecode.com/svn/trunk@491 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleUnitMapper.cpp b/samplecode/SampleUnitMapper.cpp
index cca233a..e045d96 100644
--- a/samplecode/SampleUnitMapper.cpp
+++ b/samplecode/SampleUnitMapper.cpp
@@ -6,9 +6,39 @@
 #include "SkUnitMappers.h"
 #include "SkCubicInterval.h"
 
+#include "SkWidgetViews.h"
+
+static SkStaticTextView* make_textview(SkView* parent,
+                                       const SkRect& bounds,
+                                       const SkPaint& paint) {
+    SkStaticTextView* view = new SkStaticTextView;
+    view->setMode(SkStaticTextView::kFixedSize_Mode);
+    view->setPaint(paint);
+    view->setVisibleP(true);
+    view->setSize(bounds.width(), bounds.height());
+    view->setLoc(bounds.fLeft, bounds.fTop);
+    parent->attachChildToFront(view)->unref();
+    return view;
+}
+
+static void set_scalar(SkStaticTextView* view, SkScalar value) {
+    SkString str;
+    str.appendScalar(value);
+    view->setText(str);
+}
+
 class UnitMapperView : public SkView {
     SkPoint fPts[4];
     SkMatrix fMatrix;
+    SkStaticTextView* fViews[4];
+
+    void setViews() {
+        set_scalar(fViews[0], fPts[1].fX);
+        set_scalar(fViews[1], fPts[1].fY);
+        set_scalar(fViews[2], fPts[2].fX);
+        set_scalar(fViews[3], fPts[2].fY);
+    }
+
 public:
     UnitMapperView() {
         fPts[0].set(0, 0);
@@ -18,6 +48,19 @@
 
         fMatrix.setScale(SK_Scalar1 * 200, -SK_Scalar1 * 200);
         fMatrix.postTranslate(SkIntToScalar(100), SkIntToScalar(300));
+
+        SkRect r = {
+            SkIntToScalar(350), SkIntToScalar(100),
+            SkIntToScalar(500), SkIntToScalar(130)
+        };
+        SkPaint paint;
+        paint.setAntiAlias(true);
+        paint.setTextSize(SkIntToScalar(25));
+        for (int i = 0; i < 4; i++) {
+            fViews[i] = make_textview(this, r, paint);
+            r.offset(0, r.height());
+        }
+        this->setViews();
     }
     
 protected:
@@ -80,26 +123,27 @@
         return pt;
     }
 
-    SkPoint* hittest(SkScalar x, SkScalar y) {
+    int hittest(SkScalar x, SkScalar y) {
         SkPoint target = { x, y };
         SkPoint pts[2] = { fPts[1], fPts[2] };
         fMatrix.mapPoints(pts, 2);
         for (int i = 0; i < 2; i++) {
             if (SkPoint::Distance(pts[i], target) < SkIntToScalar(4)) {
-                return &fPts[i + 1];
+                return i + 1;
             }
         }
-        return NULL;
+        return -1;
     }
 
     virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
-        fDragPt = hittest(x, y);
-        return fDragPt ? new Click(this) : NULL;
+        fDragIndex = hittest(x, y);
+        return fDragIndex >= 0 ? new Click(this) : NULL;
     }
     
     virtual bool onClick(Click* click) {
-        if (fDragPt) {
-            *fDragPt = invertPt(click->fCurr.fX, click->fCurr.fY);
+        if (fDragIndex >= 0) {
+            fPts[fDragIndex] = invertPt(click->fCurr.fX, click->fCurr.fY);
+            this->setViews();
             this->inval(NULL);
             return true;
         }
@@ -107,7 +151,7 @@
     }
     
 private:
-    SkPoint* fDragPt;
+    int fDragIndex;
 
     typedef SkView INHERITED;
 };