Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Unified Diff: gm/lcdblendmodes.cpp

Issue 1313623002: Add support for blending of LCD for all blend modes. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Added gm Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | include/gpu/effects/GrPorterDuffXferProcessor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/lcdblendmodes.cpp
diff --git a/gm/lcdblendmodes.cpp b/gm/lcdblendmodes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a64221f2d6146c6edd5ad4f6236cb791894f3d7e
--- /dev/null
+++ b/gm/lcdblendmodes.cpp
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
robertphillips 2015/09/14 16:04:14 This doesn't seem correct ?
egdaniel 2015/09/15 14:26:10 Done.
+/* Tests text rendering with LCD and subpixel rendering turned on and off.
+ */
+
+#include "gm.h"
+#include "SkCanvas.h"
robertphillips 2015/09/14 16:04:14 Do we need SkPicture*.h ?
egdaniel 2015/09/15 14:26:10 Done.
+#include "SkPicture.h"
+#include "SkPictureImageFilter.h"
+#include "SkPictureRecorder.h"
+#include "SkSurface.h"
+
+
+class LcdBlendGM : public skiagm::GM {
+public:
+ LcdBlendGM() {
robertphillips 2015/09/14 16:04:14 kPointSize ?
egdaniel 2015/09/15 14:26:10 Done.
+ const int pointSize = 36;
robertphillips 2015/09/14 16:04:14 fTextHeight ?
egdaniel 2015/09/15 14:26:10 Done.
+ textHeight = SkIntToScalar(pointSize);
+ }
+
+protected:
+
+ void onOnceBeforeDraw() override {
+ fTypeface.reset(sk_tool_utils::create_portable_typeface("serif", SkTypeface::kNormal));
+ }
robertphillips 2015/09/14 16:04:14 \n ? override ?
egdaniel 2015/09/15 14:26:10 Done.
+ SkString onShortName() {
+ SkString name("lcdblendmodes");
+ name.append(sk_tool_utils::major_platform_os_name());
+ return name;
+ }
+
robertphillips 2015/09/14 16:04:14 override ?
egdaniel 2015/09/15 14:26:10 Done.
+ SkISize onISize() { return SkISize::Make(720, 750); }
+
robertphillips 2015/09/14 16:04:14 override ?
egdaniel 2015/09/15 14:26:10 Done.
+ virtual void onDraw(SkCanvas* canvas) {
robertphillips 2015/09/14 16:04:14 this-> ?
egdaniel 2015/09/15 14:26:10 Done.
+ drawColumn(canvas, SK_ColorBLACK, SK_ColorWHITE);
+ canvas->translate(240, 0);
+ drawColumn(canvas, SK_ColorWHITE, SK_ColorBLACK);
+ canvas->translate(240, 0);
+ drawColumn(canvas, SK_ColorBLUE, SK_ColorMAGENTA);
+ }
+
+ void drawColumn(SkCanvas* canvas, SkColor backgroundColor, SkColor textColor) {
+ const struct {
+ SkXfermode::Mode fMode;
+ const char* fLabel;
+ } gModes[] = {
+ { SkXfermode::kClear_Mode, "Clear" },
+ { SkXfermode::kSrc_Mode, "Src" },
+ { SkXfermode::kDst_Mode, "Dst" },
+ { SkXfermode::kSrcOver_Mode, "SrcOver" },
+ { SkXfermode::kDstOver_Mode, "DstOver" },
+ { SkXfermode::kSrcIn_Mode, "SrcIn" },
+ { SkXfermode::kDstIn_Mode, "DstIn" },
+ { SkXfermode::kSrcOut_Mode, "SrcOut" },
+ { SkXfermode::kDstOut_Mode, "DstOut" },
+ { SkXfermode::kSrcATop_Mode, "SrcATop" },
+ { SkXfermode::kDstATop_Mode, "DstATop" },
+ { SkXfermode::kXor_Mode, "Xor" },
+ { SkXfermode::kPlus_Mode, "Plus" },
+ { SkXfermode::kModulate_Mode, "Modulate" },
+ { SkXfermode::kScreen_Mode, "Screen" },
+ { SkXfermode::kOverlay_Mode, "Overlay" },
+ { SkXfermode::kDarken_Mode, "Darken" },
+ { SkXfermode::kLighten_Mode, "Lighten" },
+ { SkXfermode::kColorDodge_Mode, "ColorDodge" },
+ { SkXfermode::kColorBurn_Mode, "ColorBurn" },
+ { SkXfermode::kHardLight_Mode, "HardLight" },
+ { SkXfermode::kSoftLight_Mode, "SoftLight" },
+ { SkXfermode::kDifference_Mode, "Difference" },
+ { SkXfermode::kExclusion_Mode, "Exclusion" },
+ { SkXfermode::kMultiply_Mode, "Multiply" },
+ { SkXfermode::kHue_Mode, "Hue" },
+ { SkXfermode::kSaturation_Mode, "Saturation" },
+ { SkXfermode::kColor_Mode, "Color" },
+ { SkXfermode::kLuminosity_Mode, "Luminosity" },
+ };
+ // Draw background rect
+ SkPaint backgroundPaint;
+ backgroundPaint.setColor(backgroundColor);
+ canvas->drawRectCoords(0, 0, 240, 750, backgroundPaint);
+ SkScalar y = 25;
+ for (size_t m = 0; m < SK_ARRAY_COUNT(gModes); m++) {
robertphillips 2015/09/14 16:04:14 make this one line ?
egdaniel 2015/09/15 14:26:10 Done.
+ SkAutoTUnref<SkXfermode> xfermode;
+ xfermode.reset(SkXfermode::Create(gModes[m].fMode));
+ SkPaint paint;
+ paint.setColor(textColor);
+ paint.setAntiAlias(true);
+ paint.setSubpixelText(true);
+ paint.setLCDRenderText(true);
+ paint.setTextSize(25);
+ paint.setXfermode(xfermode);
+ paint.setTypeface(fTypeface);
+
robertphillips 2015/09/14 16:04:14 Why make a SkString just to get the c_str out ?
egdaniel 2015/09/15 14:26:10 Done.
+ SkString string(gModes[m].fLabel);
+ canvas->drawText(string.c_str(), string.size(), 0, y, paint);
bsalomon 2015/09/14 14:32:45 should we have a variation that uses variable shad
egdaniel 2015/09/15 14:26:10 Done.
+ y+=25;
+ }
+ }
+
+private:
robertphillips 2015/09/14 16:04:14 put this last ?
egdaniel 2015/09/15 14:26:10 Done.
+ typedef skiagm::GM INHERITED;
+ SkScalar textHeight;
+ SkAutoTUnref<SkTypeface> fTypeface;
+};
+
+DEF_GM( return new LcdBlendGM; )
« no previous file with comments | « no previous file | include/gpu/effects/GrPorterDuffXferProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698