From ae8ae3d1a2e5a22f42453a02533981f886327c37 Mon Sep 17 00:00:00 2001 From: "djsollen@google.com" Date: Thu, 15 Mar 2012 15:01:34 +0000 Subject: [PATCH] Cleanup sample slide for drawTextOnPath Review URL: https://codereview.appspot.com/5834048 git-svn-id: http://skia.googlecode.com/svn/trunk@3402 2bbb7eff-a529-9590-31e7-b0007b416f81 --- samplecode/SampleTextOnPath.cpp | 208 +++++++++------------------------------- 1 file changed, 45 insertions(+), 163 deletions(-) diff --git a/samplecode/SampleTextOnPath.cpp b/samplecode/SampleTextOnPath.cpp index 2b73e9a..2899e7c 100644 --- a/samplecode/SampleTextOnPath.cpp +++ b/samplecode/SampleTextOnPath.cpp @@ -6,190 +6,67 @@ * found in the LICENSE file. */ #include "SampleCode.h" -#include "SkView.h" +#include "SkBlurDrawLooper.h" #include "SkCanvas.h" -#include "SkGradientShader.h" -#include "SkGraphics.h" -#include "SkImageDecoder.h" -#include "SkPackBits.h" #include "SkPath.h" #include "SkPathMeasure.h" -#include "SkRandom.h" -#include "SkRegion.h" -#include "SkShader.h" -#include "SkUtils.h" -#include "SkColorPriv.h" -#include "SkColorFilter.h" -#include "SkTypeface.h" -#include "SkAvoidXfermode.h" -#define REPEAT_COUNT 0 +#define REPEAT_COUNT 1 -static const char gText[] = "Hamburgefons"; - -static bool gDevKern; - -static void rand_text(char text[], SkRandom& rand, size_t count) { - for (size_t i = 0; i < count; i++) { - text[i] = rand.nextU() & 0x7F; - } -} - -static SkScalar sum_widths(const SkScalar widths[], int count) { - SkScalar w = 0; - for (int i = 0; i < count; i++) { - w += widths[i]; - } - return w; -} - -static void test_measure(const SkPaint& paint) { - char text[256]; - SkScalar widths[256]; - SkRect rects[256]; - SkRect bounds; - int count = 256; - - SkRandom rand; - - for (int i = 0; i < 100; i++) { - rand_text(text, rand, 256); - paint.getTextWidths(text, count, widths, NULL); - SkDEBUGCODE(SkScalar tw0 = sum_widths(widths, count);) - paint.getTextWidths(text, count, widths, rects); - SkDEBUGCODE(SkScalar tw1 = sum_widths(widths, count);) - SkASSERT(tw0 == tw1); - - SkDEBUGCODE(SkScalar w0 = paint.measureText(text, count, NULL);) - SkDEBUGCODE(SkScalar w1 = paint.measureText(text, count, &bounds);) - SkASSERT(w0 == w1); - SkASSERT(w0 == tw0); - - SkRect r = rects[0]; - SkScalar x = 0; - for (int j = 1; j < count; j++) { - x += widths[j-1]; - rects[j].offset(x, 0); - r.join(rects[j]); - } - SkASSERT(r == bounds); - - if (r != bounds) { - printf("flags=%x i=%d [%g %g %g %g] [%g %g %g %g]\n", - paint.getFlags(), i, - SkScalarToFloat(r.fLeft), - SkScalarToFloat(r.fTop), - SkScalarToFloat(r.fRight), - SkScalarToFloat(r.fBottom), - SkScalarToFloat(bounds.fLeft), - SkScalarToFloat(bounds.fTop), - SkScalarToFloat(bounds.fRight), - SkScalarToFloat(bounds.fBottom)); - } - } -} - -static void test_measure() { +static void textStrokePath(SkCanvas* canvas) { SkPaint paint; - - for (int i = 0; i <= SkPaint::kAllFlags; i++) { - paint.setFlags(i); - test_measure(paint); - } -} - -////////////////////////////////////////////////////////////////////////////// - -static void test_textBounds(SkCanvas* canvas) { -// canvas->scale(SK_Scalar1/2, SK_Scalar1/2); - -// canvas->rotate(SkIntToScalar(30)); - - gDevKern = !gDevKern; - - SkScalar x = SkIntToScalar(50); - SkScalar y = SkIntToScalar(150); - SkScalar w[100]; - SkRect r[100], bounds; - - SkPaint paint; - paint.setTextSize(SkIntToScalar(64)); - paint.setAntiAlias(true); - paint.setDevKernText(gDevKern); - - (void)paint.measureText(gText, strlen(gText), &bounds); - paint.setColor(SK_ColorGREEN); - bounds.offset(x, y); - canvas->drawRect(bounds, paint); + SkPath path; + SkRect rect; - int count = paint.getTextWidths(gText, strlen(gText), w, r); + canvas->save(); + canvas->scale(SkIntToScalar(250),SkIntToScalar(250)); - paint.setColor(SK_ColorRED); - for (int i = 0; i < count; i++) { - r[i].offset(x, y); - canvas->drawRect(r[i], paint); - x += w[i]; - } - x = SkIntToScalar(50); - paint.setColor(gDevKern ? SK_ColorDKGRAY : SK_ColorBLACK); - canvas->drawText(gText, strlen(gText), x, y, paint); -} + rect.set(0.0f, 0.21f, 0.78f, 0.99f); -static void create_src(SkBitmap* bitmap, SkBitmap::Config config) { - bitmap->setConfig(config, 100, 100); - bitmap->allocPixels(); - bitmap->eraseColor(0); - - SkCanvas canvas(*bitmap); - SkPaint paint; + path.addArc(rect, SkIntToScalar(280), SkIntToScalar(350)); paint.setAntiAlias(true); - canvas.drawCircle(SkIntToScalar(50), SkIntToScalar(50), - SkIntToScalar(50), paint); -} + paint.setStyle(SkPaint::kStroke_Style); + paint.setColor(0xFFFF0000); + paint.setTextSize(SkFloatToScalar(0.065f)); + paint.setStrokeWidth(SkFloatToScalar(.01f)); -static void blur(SkBitmap* dst, const SkBitmap& src, SkScalar radius) { - *dst = src; -} + canvas->drawPath(path, paint); -static void test_bitmap_blur(SkCanvas* canvas) { - SkBitmap src, dst; - - create_src(&src, SkBitmap::kARGB_8888_Config); - blur(&dst, src, SkIntToScalar(4)); - - SkPaint paint; - - paint.setColor(SK_ColorRED); + paint.setLooper(new SkBlurDrawLooper(SkFloatToScalar(0.002f), + SkFloatToScalar(0.0f), + SkFloatToScalar(0.0f), + (SkColor)0xFF000000))->unref(); - canvas->drawBitmap(dst, SkIntToScalar(30), SkIntToScalar(60), &paint); -} + const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH"; + size_t len = strlen(text); -static SkScalar getpathlen(const SkPath& path) { - SkPathMeasure meas(path, false); - return meas.getLength(); + canvas->drawTextOnPathHV(text, len, path, 0, -0.025f, paint); + canvas->restore(); } -static void test_textpathmatrix(SkCanvas* canvas) { +static void textPathMatrix(SkCanvas* canvas) { SkPaint paint; SkPath path; SkMatrix matrix; - path.moveTo(SkIntToScalar(200), SkIntToScalar(300)); - path.quadTo(SkIntToScalar(400), SkIntToScalar(100), - SkIntToScalar(600), SkIntToScalar(300)); + path.moveTo(SkIntToScalar(050), SkIntToScalar(200)); + path.quadTo(SkIntToScalar(250), SkIntToScalar(000), + SkIntToScalar(450), SkIntToScalar(200)); paint.setAntiAlias(true); paint.setStyle(SkPaint::kStroke_Style); - // canvas->drawPath(path, paint); + canvas->drawPath(path, paint); paint.setStyle(SkPaint::kFill_Style); paint.setTextSize(SkIntToScalar(48)); paint.setTextAlign(SkPaint::kRight_Align); const char* text = "Reflection"; size_t len = strlen(text); - SkScalar pathLen = getpathlen(path); + + SkPathMeasure meas(path, false); + SkScalar pathLen = meas.getLength(); canvas->drawTextOnPath(text, len, path, NULL, paint); @@ -218,7 +95,7 @@ public: r.set(SkIntToScalar(100), SkIntToScalar(100), SkIntToScalar(300), SkIntToScalar(300)); fPath.addOval(r); - fPath.offset(SkIntToScalar(200), 0); + fPath.offset(SkIntToScalar(-50), SkIntToScalar(-50)); fHOffset = SkIntToScalar(50); } @@ -235,32 +112,37 @@ protected: virtual void onDrawContent(SkCanvas* canvas) { SkPaint paint; - paint.setAntiAlias(true); - paint.setTextSize(SkIntToScalar(50)); + paint.setTextSize(SkIntToScalar(48)); + + const char* text = "Hamburgefons"; + size_t len = strlen(text); for (int j = 0; j < REPEAT_COUNT; j++) { SkScalar x = fHOffset; paint.setColor(SK_ColorBLACK); - canvas->drawTextOnPathHV(gText, sizeof(gText)-1, fPath, + canvas->drawTextOnPathHV(text, len, fPath, x, paint.getTextSize()/2, paint); paint.setColor(SK_ColorRED); - canvas->drawTextOnPathHV(gText, sizeof(gText)-1, fPath, + canvas->drawTextOnPathHV(text, len, fPath, x + SkIntToScalar(50), 0, paint); paint.setColor(SK_ColorBLUE); - canvas->drawTextOnPathHV(gText, sizeof(gText)-1, fPath, + canvas->drawTextOnPathHV(text, len, fPath, x + SkIntToScalar(100), -paint.getTextSize()/2, paint); } - + paint.setColor(SK_ColorGREEN); paint.setStyle(SkPaint::kStroke_Style); -// canvas->drawPath(fPath, paint); + canvas->drawPath(fPath, paint); - canvas->translate(0, SkIntToScalar(100)); - test_textpathmatrix(canvas); + canvas->translate(SkIntToScalar(275), 0); + textStrokePath(canvas); + + canvas->translate(SkIntToScalar(-275), SkIntToScalar(250)); + textPathMatrix(canvas); if (REPEAT_COUNT > 1) this->inval(NULL); -- 2.7.4