diff options
| author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-22 02:55:59 +0000 |
|---|---|---|
| committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-22 02:55:59 +0000 |
| commit | 3339ac54a5ed75f2872ab16e9052a8b9ff3564bf (patch) | |
| tree | 42852098db6117ad0f15cf332bc2aacffa322e38 /samplecode/SampleUnitMapper.cpp | |
| parent | 8991c67f0c1b9364bb12dfb0f32a53bd5a3357f3 (diff) | |
Revert of Remove unused (by clients) SkUnitMapper (https://codereview.chromium.org/283273002/) (https://codereview.chromium.org/288343009/)
Reason for revert:
required blink change failed to land
Original issue's description:
> Remove unused (by clients) SkUnitMapper (https://codereview.chromium.org/283273002/)
>
> This reverts commit dd50c83b5b34dab3a077741861b50ed1f2bc6b8f.
>
> BUG=skia:
>
> Committed: http://code.google.com/p/skia/source/detail?r=14830
R=scroggo@google.com, reed@google.com
TBR=reed@google.com, scroggo@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Author: reed@chromium.org
Review URL: https://codereview.chromium.org/296823008
git-svn-id: http://skia.googlecode.com/svn/trunk@14838 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleUnitMapper.cpp')
| -rw-r--r-- | samplecode/SampleUnitMapper.cpp | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/samplecode/SampleUnitMapper.cpp b/samplecode/SampleUnitMapper.cpp new file mode 100644 index 0000000000..db9af09f38 --- /dev/null +++ b/samplecode/SampleUnitMapper.cpp @@ -0,0 +1,172 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "SampleCode.h" +#include "SkView.h" +#include "SkCanvas.h" +#include "SkDevice.h" +#include "SkPaint.h" +#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 SampleView { + 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); + fPts[1].set(SK_Scalar1 / 3, SK_Scalar1 / 3); + fPts[2].set(SK_Scalar1 * 2 / 3, SK_Scalar1 * 2 / 3); + fPts[3].set(SK_Scalar1, SK_Scalar1); + + 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: + // overrides from SkEventSink + virtual bool onQuery(SkEvent* evt) { + if (SampleCode::TitleQ(*evt)) { + SampleCode::TitleR(evt, "UnitMapper"); + return true; + } + return this->INHERITED::onQuery(evt); + } + + virtual void onDrawContent(SkCanvas* canvas) { + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(0xFF8888FF); + + SkRect r = { 0, 0, SK_Scalar1, SK_Scalar1 }; + + canvas->concat(fMatrix); + canvas->drawRect(r, paint); + + paint.setColor(SK_ColorBLACK); + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(0); + paint.setStrokeCap(SkPaint::kRound_Cap); + + SkPath path; + path.moveTo(fPts[0]); + path.cubicTo(fPts[1], fPts[2], fPts[3]); + canvas->drawPath(path, paint); + + paint.setColor(SK_ColorRED); + paint.setStrokeWidth(0); + canvas->drawLine(0, 0, SK_Scalar1, SK_Scalar1, paint); + + paint.setColor(SK_ColorBLUE); + paint.setStrokeWidth(SK_Scalar1 / 60); + for (int i = 0; i < 50; i++) { + SkScalar x = i * SK_Scalar1 / 49; + canvas->drawPoint(x, SkEvalCubicInterval(&fPts[1], x), paint); + } + + paint.setStrokeWidth(SK_Scalar1 / 20); + paint.setColor(SK_ColorGREEN); + canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, &fPts[1], paint); + } + + bool invertPt(SkScalar x, SkScalar y, SkPoint* result) { + if (NULL == result) + return true; + + SkMatrix m; + if (!fMatrix.invert(&m)) { + return false; + } + + m.mapXY(x, y, result); + return true; + } + + 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 i + 1; + } + } + return -1; + } + + virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned) SK_OVERRIDE { + fDragIndex = hittest(x, y); + return fDragIndex >= 0 ? new Click(this) : NULL; + } + + virtual bool onClick(Click* click) { + if (fDragIndex >= 0) { + if (!invertPt(click->fCurr.fX, click->fCurr.fY, + &fPts[fDragIndex])) { + return false; + } + + this->setViews(); + this->inval(NULL); + return true; + } + return false; + } + +private: + int fDragIndex; + + typedef SampleView INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static SkView* MyFactory() { return new UnitMapperView; } +static SkViewRegister reg(MyFactory); |
