aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SampleDash.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'samplecode/SampleDash.cpp')
-rw-r--r--samplecode/SampleDash.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/samplecode/SampleDash.cpp b/samplecode/SampleDash.cpp
new file mode 100644
index 0000000000..4cef07f208
--- /dev/null
+++ b/samplecode/SampleDash.cpp
@@ -0,0 +1,88 @@
+#include "SampleCode.h"
+#include "SkView.h"
+#include "SkCanvas.h"
+#include "SkGraphics.h"
+#include "SkRandom.h"
+#include "SkDashPathEffect.h"
+#include "SkShader.h"
+
+static void setBitmapDash(SkPaint* paint, int width) {
+ SkColor c = paint->getColor();
+
+ SkBitmap bm;
+ bm.setConfig(SkBitmap::kARGB_8888_Config, 2, 1);
+ bm.allocPixels();
+ bm.lockPixels();
+ *bm.getAddr32(0, 0) = SkPreMultiplyARGB(0xFF, SkColorGetR(c),
+ SkColorGetG(c), SkColorGetB(c));
+ *bm.getAddr32(1, 0) = 0;
+ bm.unlockPixels();
+
+ SkMatrix matrix;
+ matrix.setScale(SkIntToScalar(width), SK_Scalar1);
+
+ SkShader* s = SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
+ SkShader::kClamp_TileMode);
+ s->setLocalMatrix(matrix);
+
+ paint->setShader(s)->unref();
+}
+
+class DashView : public SampleView {
+public:
+ DashView() {
+ this->setBGColor(0xFFDDDDDD);
+ }
+
+protected:
+ // overrides from SkEventSink
+ virtual bool onQuery(SkEvent* evt) {
+ if (SampleCode::TitleQ(*evt)) {
+ SampleCode::TitleR(evt, "Dash");
+ return true;
+ }
+ return this->INHERITED::onQuery(evt);
+ }
+
+ virtual void onDrawContent(SkCanvas* canvas) {
+ static const char* gStr[] = {
+ "11",
+ "44",
+ "112233",
+ "411327463524",
+ };
+
+ SkPaint paint;
+ paint.setStrokeWidth(SkIntToScalar(1));
+
+ SkScalar x0 = SkIntToScalar(10);
+ SkScalar y0 = SkIntToScalar(10);
+ SkScalar x1 = x0 + SkIntToScalar(1000);
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gStr); i++) {
+ SkScalar interval[12];
+ size_t len = SkMin32(strlen(gStr[i]), SK_ARRAY_COUNT(interval));
+ for (size_t j = 0; j < len; j++) {
+ interval[j] = SkIntToScalar(gStr[i][j] - '0');
+ }
+
+ SkDashPathEffect dash(interval, len, 0);
+ paint.setPathEffect(&dash);
+ canvas->drawLine(x0, y0, x1, y0, paint);
+ paint.setPathEffect(NULL);
+
+ y0 += paint.getStrokeWidth() * 3;
+ }
+
+ setBitmapDash(&paint, 3);
+ canvas->drawLine(x0, y0, x1, y0, paint);
+ }
+
+private:
+ typedef SampleView INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static SkView* MyFactory() { return new DashView; }
+static SkViewRegister reg(MyFactory);
+