aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/gradtext.cpp
diff options
context:
space:
mode:
authorGravatar tomhudson@google.com <tomhudson@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-11 14:41:19 +0000
committerGravatar tomhudson@google.com <tomhudson@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-11 14:41:19 +0000
commitcb325ceda16fab97fd3281785e6ae10fcb8dcf83 (patch)
tree02b2b3ca690ce52f7b8a6577fd6ddc23e6ce29b6 /gm/gradtext.cpp
parent96dde455188311973b7a9d2beabe9c38a87b3623 (diff)
Change TextContext handling of stages and draw targets; this allows us to
assert in GrContext::setPaint() that all stages are disabled every time the paint is set. Watch for possible performance implications. http://codereview.appspot.com/6347043/ git-svn-id: http://skia.googlecode.com/svn/trunk@4531 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/gradtext.cpp')
-rw-r--r--gm/gradtext.cpp76
1 files changed, 75 insertions, 1 deletions
diff --git a/gm/gradtext.cpp b/gm/gradtext.cpp
index a3769d2728..c155cb76b4 100644
--- a/gm/gradtext.cpp
+++ b/gm/gradtext.cpp
@@ -8,6 +8,7 @@
#include "gm.h"
#include "SkCanvas.h"
#include "SkGradientShader.h"
+#include "SkTypeface.h"
// test shader w/ transparency
static SkShader* make_grad(SkScalar width) {
@@ -27,8 +28,77 @@ static SkShader* make_grad2(SkScalar width) {
SkShader::kMirror_TileMode);
}
+static SkShader* make_chrome_solid() {
+ SkColor colors[] = { SK_ColorGREEN, SK_ColorGREEN };
+ SkPoint pts[] = { { 0, 0 }, { 1, 0 } };
+ return SkGradientShader::CreateLinear(pts, colors, NULL, 2,
+ SkShader::kClamp_TileMode);
+}
+
namespace skiagm {
+// Replicate chrome layout test - clipped pathed gradient-shaded text
+class ChromeGradTextGM1 : public GM {
+public:
+ ChromeGradTextGM1() { }
+protected:
+
+ virtual SkString onShortName() { return SkString("chrome_gradtext1"); }
+ virtual SkISize onISize() { return make_isize(500, 480); }
+ virtual void onDraw(SkCanvas* canvas) {
+ SkPaint paint;
+ const SkISize& size = this->getISize();
+ SkRect r = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100));
+
+ canvas->clipRect(r);
+
+ paint.setColor(SK_ColorRED);
+ canvas->drawRect(r, paint);
+
+ // Minimal repro doesn't require AA, LCD, or a nondefault typeface
+ paint.setShader(make_chrome_solid())->unref();
+ paint.setTextSize(SkIntToScalar(500));
+
+ canvas->drawText("I", 1, 0, 100, paint);
+ }
+private:
+ typedef GM INHERITED;
+};
+
+
+// Replicate chrome layout test - switching between solid & gadient text
+class ChromeGradTextGM2 : public GM {
+public:
+ ChromeGradTextGM2() { }
+protected:
+
+ virtual SkString onShortName() { return SkString("chrome_gradtext2"); }
+ virtual SkISize onISize() { return make_isize(500, 480); }
+ virtual void onDraw(SkCanvas* canvas) {
+ SkPaint paint;
+ const SkISize& size = this->getISize();
+ SkRect r = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100));
+
+
+ paint.setStyle(SkPaint::kFill_Style);
+ canvas->drawText("Normal Fill Text", 16, 0, 50, paint);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawText("Normal Stroke Text", 18, 0, 100, paint);
+
+ // Minimal repro doesn't require AA, LCD, or a nondefault typeface
+ paint.setShader(make_chrome_solid())->unref();
+
+ paint.setStyle(SkPaint::kFill_Style);
+ canvas->drawText("Gradient Fill Text", 18, 0, 150, paint);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawText("Gradient Stroke Text", 20, 0, 200, paint);
+ }
+private:
+ typedef GM INHERITED;
+};
+
+
+
class GradTextGM : public GM {
public:
GradTextGM () {}
@@ -91,7 +161,11 @@ private:
//////////////////////////////////////////////////////////////////////////////
static GM* MyFactory(void*) { return new GradTextGM; }
-static GMRegistry reg(MyFactory);
+static GM* CMyFactory(void*) { return new ChromeGradTextGM1; }
+static GM* CMyFactory2(void*) { return new ChromeGradTextGM2; }
+static GMRegistry reg(MyFactory);
+static GMRegistry Creg(CMyFactory);
+static GMRegistry Creg2(CMyFactory2);
}