Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / gm / lcdtext.cpp
index b4db0ff..0b5739c 100644 (file)
 #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; )