Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
lcdoverlap.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gm/gm.h"
12#include "include/core/SkFont.h"
14#include "include/core/SkRect.h"
17#include "include/core/SkSize.h"
22#include "tools/ToolUtils.h"
24
25namespace skiagm {
26
27constexpr int kWidth = 750;
28constexpr int kHeight = 750;
29
30class LcdOverlapGM : public skiagm::GM {
31public:
33 const int kPointSize = 25;
34 fTextHeight = SkIntToScalar(kPointSize);
35 }
36
37protected:
38 SkString getName() const override { return SkString("lcdoverlap"); }
39
40 void onOnceBeforeDraw() override {
41 // build text blob
42 SkTextBlobBuilder builder;
43
45 const char* text = "able was I ere I saw elba";
46 font.setSubpixel(true);
48 ToolUtils::add_to_text_blob(&builder, text, font, 0, 0);
49 fBlob = builder.make();
50 }
51
52 SkISize getISize() override { return SkISize::Make(kWidth, kHeight); }
53
55 SkBlendMode mode2) {
56 const SkColor colors[] {
63 };
64
65 for (size_t i = 0; i < std::size(colors); i++) {
66 canvas->save();
67 canvas->translate(x, y);
68 canvas->rotate(360.0f / std::size(colors) * i);
69 canvas->translate(-fBlob->bounds().width() / 2.0f - fBlob->bounds().left() + 0.5f, 0);
70
71 SkPaint textPaint;
72 textPaint.setColor(colors[i]);
73 textPaint.setBlendMode(i % 2 == 0 ? mode : mode2);
74 canvas->drawTextBlob(fBlob, 0, 0, textPaint);
75 canvas->restore();
76 }
77 }
78
88
89private:
90 SkScalar fTextHeight;
92 using INHERITED = skiagm::GM;
93};
94
95//////////////////////////////////////////////////////////////////////////////
96
97DEF_GM( return new LcdOverlapGM; )
98} // namespace skiagm
SkBlendMode
Definition SkBlendMode.h:38
@ kSrcOver
r = s + (1-sa)*d
@ kLuminosity
luminosity of source with hue and saturation of destination
@ kHardLight
multiply or screen, depending on source
constexpr SkColor SK_ColorYELLOW
Definition SkColor.h:139
constexpr SkColor SK_ColorMAGENTA
Definition SkColor.h:147
uint32_t SkColor
Definition SkColor.h:37
constexpr SkColor SK_ColorCYAN
Definition SkColor.h:143
constexpr SkColor SK_ColorBLUE
Definition SkColor.h:135
constexpr SkColor SK_ColorRED
Definition SkColor.h:126
constexpr SkColor SK_ColorGREEN
Definition SkColor.h:131
#define SkIntToScalar(x)
Definition SkScalar.h:57
void restore()
Definition SkCanvas.cpp:465
void translate(SkScalar dx, SkScalar dy)
void rotate(SkScalar degrees)
int save()
Definition SkCanvas.cpp:451
void drawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y, const SkPaint &paint)
@ kSubpixelAntiAlias
glyph positioned in pixel using transparency
void setColor(SkColor color)
Definition SkPaint.cpp:119
void setBlendMode(SkBlendMode mode)
Definition SkPaint.cpp:151
const SkRect & bounds() const
Definition SkTextBlob.h:53
void onOnceBeforeDraw() override
void drawTestCase(SkCanvas *canvas, SkScalar x, SkScalar y, SkBlendMode mode, SkBlendMode mode2)
SkISize getISize() override
void onDraw(SkCanvas *canvas) override
SkString getName() const override
float SkScalar
Definition extension.cpp:12
#define DEF_GM(CODE)
Definition gm.h:40
std::u16string text
double y
double x
sk_sp< SkTypeface > DefaultPortableTypeface()
void add_to_text_blob(SkTextBlobBuilder *builder, const char *text, const SkFont &font, SkScalar x, SkScalar y)
constexpr int kPointSize
constexpr int kWidth
constexpr int kHeight
SkScalar offsetX
SkScalar offsetY
static constexpr SkISize Make(int32_t w, int32_t h)
Definition SkSize.h:20
constexpr float left() const
Definition SkRect.h:734
constexpr float width() const
Definition SkRect.h:762