aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/bigtext.cpp53
-rw-r--r--gyp/gmslides.gypi1
-rw-r--r--src/core/SkDraw.cpp20
3 files changed, 63 insertions, 11 deletions
diff --git a/gm/bigtext.cpp b/gm/bigtext.cpp
new file mode 100644
index 0000000000..e8bddf80c4
--- /dev/null
+++ b/gm/bigtext.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "SkCanvas.h"
+#include "SkPath.h"
+
+/**
+ * Skia may draw from outlines when the size is very large, so we exercise that
+ * here.
+*/
+
+class BigTextGM : public skiagm::GM {
+public:
+ BigTextGM() {}
+
+protected:
+ virtual SkString onShortName() SK_OVERRIDE {
+ return SkString("bigtext");
+ }
+
+ virtual SkISize onISize() SK_OVERRIDE {
+ return SkISize::Make(640, 480);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setTextSize(1500);
+
+ SkRect r;
+ (void)paint.measureText("/", 1, &r);
+ SkPoint pos = {
+ this->width()/2 - r.centerX(),
+ this->height()/2 - r.centerY()
+ };
+
+ paint.setColor(SK_ColorRED);
+ canvas->drawText("/", 1, pos.fX, pos.fY, paint);
+
+ paint.setColor(SK_ColorBLUE);
+ canvas->drawPosText("\\", 1, &pos, paint);
+ }
+
+private:
+ typedef skiagm::GM INHERITED;
+};
+
+DEF_GM( return SkNEW(BigTextGM); )
diff --git a/gyp/gmslides.gypi b/gyp/gmslides.gypi
index c67c2d1dad..632a2757ce 100644
--- a/gyp/gmslides.gypi
+++ b/gyp/gmslides.gypi
@@ -7,6 +7,7 @@
'../gm/arithmode.cpp',
'../gm/bicubicfilter.cpp',
'../gm/bigmatrix.cpp',
+ '../gm/bigtext.cpp',
'../gm/bitmapcopy.cpp',
'../gm/bitmapmatrix.cpp',
'../gm/bitmapfilters.cpp',
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 5782fc537e..30d5956ae8 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -1861,12 +1861,8 @@ void SkDraw::drawPosText_asPaths(const char text[], size_t byteLength,
SkPaint paint(origPaint);
SkScalar matrixScale = paint.setupForAsPaths();
- SkDraw draw(*this);
-
- // Now modify our matrix to account for the canonical text size
- SkMatrix matrix = *fMatrix;
- matrix.preScale(matrixScale, matrixScale);
- const SkScalar posScale = SkScalarInvert(matrixScale);
+ SkMatrix matrix;
+ matrix.setScale(matrixScale, matrixScale);
SkDrawCacheProc glyphCacheProc = paint.getDrawCacheProc();
SkAutoGlyphCache autoCache(paint, NULL, NULL);
@@ -1886,11 +1882,13 @@ void SkDraw::drawPosText_asPaths(const char text[], size_t byteLength,
SkIPoint fixedLoc;
alignProc(tms.fLoc, glyph, &fixedLoc);
- SkMatrix localMatrix = matrix;
- localMatrix.preTranslate(SkFixedToScalar(fixedLoc.fX) * posScale,
- SkFixedToScalar(fixedLoc.fY) * posScale);
- draw.fMatrix = &localMatrix;
- draw.drawPath(*path, paint);
+ matrix[SkMatrix::kMTransX] = SkFixedToScalar(fixedLoc.fX);
+ matrix[SkMatrix::kMTransY] = SkFixedToScalar(fixedLoc.fY);
+ if (fDevice) {
+ fDevice->drawPath(*this, *path, paint, &matrix, false);
+ } else {
+ this->drawPath(*path, paint, &matrix, false);
+ }
}
}
pos += scalarsPerPosition;