Index: gm/lcdtext.cpp |
diff --git a/gm/lcdtext.cpp b/gm/lcdtext.cpp |
index b4db0ff12af378bbdc00f0f1030cfa4394702d79..0b5739c7abb95d37dfd0c540b263ea0b0389cf83 100644 |
--- a/gm/lcdtext.cpp |
+++ b/gm/lcdtext.cpp |
@@ -13,25 +13,23 @@ |
#include "gm.h" |
#include "SkCanvas.h" |
-namespace skiagm { |
- |
-class LcdTextGM : public GM { |
+class LcdTextGM : public skiagm::GM { |
public: |
LcdTextGM() { |
const int pointSize = 36; |
textHeight = SkIntToScalar(pointSize); |
} |
- |
+ |
protected: |
- |
+ |
SkString onShortName() { |
return SkString("lcdtext"); |
} |
- |
+ |
SkISize onISize() { return SkISize::Make(640, 480); } |
- |
+ |
virtual void onDraw(SkCanvas* canvas) { |
- |
+ |
y = textHeight; |
drawText(canvas, SkString("TEXT: SubpixelTrue LCDRenderTrue"), |
true, true); |
@@ -42,7 +40,7 @@ protected: |
drawText(canvas, SkString("TEXT: SubpixelFalse LCDRenderFalse"), |
false, false); |
} |
- |
+ |
void drawText(SkCanvas* canvas, const SkString& string, |
bool subpixelTextEnabled, bool lcdRenderTextEnabled) { |
SkPaint paint; |
@@ -53,19 +51,78 @@ protected: |
paint.setSubpixelText(subpixelTextEnabled); |
paint.setLCDRenderText(lcdRenderTextEnabled); |
paint.setTextSize(textHeight); |
- |
+ |
canvas->drawText(string.c_str(), string.size(), 0, y, paint); |
y += textHeight; |
} |
- |
+ |
private: |
- typedef GM INHERITED; |
+ typedef skiagm::GM INHERITED; |
SkScalar y, textHeight; |
}; |
-/////////////////////////////////////////////////////////////////////////////// |
+/* |
+ * Skia will automatically disable LCD requests if the total size exceeds some limit |
+ * (hard coded in this test for now, as it is now avaiable as an API) |
+ * |
+ * Test this both by changing "textsize" and by changing the computed size (textsize * CTM) |
+ */ |
+class LcdTextSizeGM : public skiagm::GM { |
+ enum { |
+ kLCDTextSizeLimit = 48 |
+ }; |
+ |
+ static void ScaleAbout(SkCanvas* canvas, SkScalar sx, SkScalar sy, SkScalar px, SkScalar py) { |
+ SkMatrix m; |
+ m.setScale(sx, sy, px, py); |
+ canvas->concat(m); |
+ } |
-static GM* MyFactory(void*) { return new LcdTextGM; } |
-static GMRegistry reg(MyFactory); |
+public: |
+ LcdTextSizeGM() {} |
+ |
+protected: |
+ SkString onShortName() { |
+ return SkString("lcdtextsize"); |
+ } |
+ |
+ SkISize onISize() { return SkISize::Make(320, 120); } |
+ |
+ virtual void onDraw(SkCanvas* canvas) { |
+ const char* lcd_text = "LCD"; |
+ const char* gray_text = "GRAY"; |
+ |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ paint.setLCDRenderText(true); |
+ |
+ const struct { |
+ SkPoint fLoc; |
+ SkScalar fTextSize; |
+ SkScalar fScale; |
+ const char* fText; |
+ } rec[] = { |
+ { { 10, 50 }, kLCDTextSizeLimit - 1, 1, lcd_text }, |
+ { { 160, 50 }, kLCDTextSizeLimit + 1, 1, gray_text }, |
+ { { 10, 100 }, kLCDTextSizeLimit / 2, 1.99f, lcd_text }, |
+ { { 160, 100 }, kLCDTextSizeLimit / 2, 2.01f, gray_text }, |
+ }; |
+ |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { |
+ const SkPoint loc = rec[i].fLoc; |
+ SkAutoCanvasRestore acr(canvas, true); |
+ |
+ paint.setTextSize(rec[i].fTextSize); |
+ ScaleAbout(canvas, rec[i].fScale, rec[i].fScale, loc.x(), loc.y()); |
+ canvas->drawText(rec[i].fText, strlen(rec[i].fText), loc.x(), loc.y(), paint); |
+ } |
+ } |
+ |
+private: |
+ typedef skiagm::GM INHERITED; |
+}; |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
-} |
+DEF_GM( return new LcdTextGM; ) |
+DEF_GM( return new LcdTextSizeGM; ) |