aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/coloremoji.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-01-13 12:02:17 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-13 17:38:10 +0000
commit6f1d36cc54dc635f5e4d0f925ef79c14914342bb (patch)
treeb133ea2048fe159d2fef718e828ede8965a031cb /gm/coloremoji.cpp
parent0ed3b640c9da71fbbd73c65a4ec1992f85596271 (diff)
Delay SkPaint->GrPaint conversion in text rendering.
This fixes an issue where color filters aren't correctly applied to color glyphs. Instead we apply the filter to the SkPaint's color which is correct for mask glyphs only. Add color filter and alpha + various effects to coloremoji gm Change-Id: If77dece71d43468fec65499857eaaaedb56428e9 Reviewed-on: https://skia-review.googlesource.com/6891 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Jim Van Verth <jvanverth@google.com>
Diffstat (limited to 'gm/coloremoji.cpp')
-rw-r--r--gm/coloremoji.cpp59
1 files changed, 36 insertions, 23 deletions
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp
index c1ebef667f..c139bc9f6e 100644
--- a/gm/coloremoji.cpp
+++ b/gm/coloremoji.cpp
@@ -9,9 +9,9 @@
#include "Resources.h"
#include "SkBlurImageFilter.h"
+#include "SkCanvas.h"
#include "SkColorFilterImageFilter.h"
#include "SkColorMatrixFilter.h"
-#include "SkCanvas.h"
#include "SkGradientShader.h"
#include "SkStream.h"
#include "SkTypeface.h"
@@ -42,6 +42,11 @@ static sk_sp<SkImageFilter> make_blur(float amount, sk_sp<SkImageFilter> input)
return SkBlurImageFilter::Make(amount, amount, std::move(input));
}
+static sk_sp<SkColorFilter> make_color_filter() {
+ return SkColorMatrixFilter::MakeLightingFilter(SkColorSetRGB(0x00, 0x80, 0xFF),
+ SkColorSetRGB(0xFF, 0x20, 0x00));
+}
+
namespace skiagm {
class ColorEmojiGM : public GM {
@@ -64,9 +69,7 @@ protected:
return name;
}
- SkISize onISize() override {
- return SkISize::Make(650, 900);
- }
+ SkISize onISize() override { return SkISize::Make(650, 1200); }
void onDraw(SkCanvas* canvas) override {
@@ -94,26 +97,36 @@ protected:
for (int makeLinear = 0; makeLinear < 2; makeLinear++) {
for (int makeBlur = 0; makeBlur < 2; makeBlur++) {
for (int makeGray = 0; makeGray < 2; makeGray++) {
- SkPaint shaderPaint;
- shaderPaint.setTypeface(paint.refTypeface());
- if (SkToBool(makeLinear)) {
- shaderPaint.setShader(MakeLinear());
- }
-
- if (SkToBool(makeBlur) && SkToBool(makeGray)) {
- sk_sp<SkImageFilter> grayScale(make_grayscale(nullptr));
- sk_sp<SkImageFilter> blur(make_blur(3.0f, std::move(grayScale)));
- shaderPaint.setImageFilter(std::move(blur));
- } else if (SkToBool(makeBlur)) {
- shaderPaint.setImageFilter(make_blur(3.0f, nullptr));
- } else if (SkToBool(makeGray)) {
- shaderPaint.setImageFilter(make_grayscale(nullptr));
+ for (int makeMode = 0; makeMode < 2; ++makeMode) {
+ for (int alpha = 0; alpha < 2; ++alpha) {
+ SkPaint shaderPaint;
+ shaderPaint.setTypeface(sk_ref_sp(paint.getTypeface()));
+ if (SkToBool(makeLinear)) {
+ shaderPaint.setShader(MakeLinear());
+ }
+
+ if (SkToBool(makeBlur) && SkToBool(makeGray)) {
+ sk_sp<SkImageFilter> grayScale(make_grayscale(nullptr));
+ sk_sp<SkImageFilter> blur(make_blur(3.0f, std::move(grayScale)));
+ shaderPaint.setImageFilter(std::move(blur));
+ } else if (SkToBool(makeBlur)) {
+ shaderPaint.setImageFilter(make_blur(3.0f, nullptr));
+ } else if (SkToBool(makeGray)) {
+ shaderPaint.setImageFilter(make_grayscale(nullptr));
+ }
+ if (makeMode) {
+ shaderPaint.setColorFilter(make_color_filter());
+ }
+ if (alpha) {
+ shaderPaint.setAlpha(0x80);
+ }
+ shaderPaint.setTextSize(30);
+ shaderPaint.getFontMetrics(&metrics);
+ y += -metrics.fAscent;
+ canvas->drawText(text, strlen(text), 380, y, shaderPaint);
+ y += metrics.fDescent + metrics.fLeading;
+ }
}
- shaderPaint.setTextSize(30);
- shaderPaint.getFontMetrics(&metrics);
- y += -metrics.fAscent;
- canvas->drawText(text, strlen(text), 380, y, shaderPaint);
- y += metrics.fDescent + metrics.fLeading;
}
}
}