Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
DFTextGM Class Reference
Inheritance diagram for DFTextGM:
skiagm::GM

Public Member Functions

 DFTextGM ()
 
- Public Member Functions inherited from skiagm::GM
 GM (SkColor backgroundColor=SK_ColorWHITE)
 
virtual ~GM ()
 
void setMode (Mode mode)
 
Mode getMode () const
 
DrawResult gpuSetup (SkCanvas *, SkString *errorMsg, GraphiteTestContext *=nullptr)
 
void gpuTeardown ()
 
void onceBeforeDraw ()
 
DrawResult draw (SkCanvas *canvas)
 
DrawResult draw (SkCanvas *, SkString *errorMsg)
 
void drawBackground (SkCanvas *)
 
DrawResult drawContent (SkCanvas *canvas)
 
DrawResult drawContent (SkCanvas *, SkString *errorMsg)
 
virtual bool runAsBench () const
 
SkScalar width ()
 
SkScalar height ()
 
SkColor getBGColor () const
 
void setBGColor (SkColor)
 
void drawSizeBounds (SkCanvas *, SkColor)
 
bool animate (double)
 
virtual bool onChar (SkUnichar)
 
bool getControls (SkMetaData *controls)
 
void setControls (const SkMetaData &controls)
 
virtual void modifyGrContextOptions (GrContextOptions *)
 
virtual void modifyGraphiteContextOptions (skgpu::graphite::ContextOptions *) const
 
virtual bool isBazelOnly () const
 
virtual std::map< std::string, std::string > getGoldKeys () const
 

Protected Member Functions

void onOnceBeforeDraw () override
 
SkString getName () const override
 
SkISize getISize () override
 
void onDraw (SkCanvas *inputCanvas) override
 
- Protected Member Functions inherited from skiagm::GM
virtual DrawResult onGpuSetup (SkCanvas *, SkString *, GraphiteTestContext *)
 
virtual void onGpuTeardown ()
 
virtual DrawResult onDraw (SkCanvas *, SkString *errorMsg)
 
virtual bool onAnimate (double)
 
virtual bool onGetControls (SkMetaData *)
 
virtual void onSetControls (const SkMetaData &)
 
GraphiteTestContextgraphiteTestContext () const
 

Additional Inherited Members

- Public Types inherited from skiagm::GM
enum  Mode { kGM_Mode , kSample_Mode , kBench_Mode }
 
using DrawResult = skiagm::DrawResult
 
using GraphiteTestContext = skiatest::graphite::GraphiteTestContext
 
- Static Public Attributes inherited from skiagm::GM
static constexpr char kErrorMsg_DrawSkippedGpuOnly []
 

Detailed Description

Definition at line 40 of file dftext.cpp.

Constructor & Destructor Documentation

◆ DFTextGM()

DFTextGM::DFTextGM ( )
inline

Definition at line 42 of file dftext.cpp.

42 {
43 this->setBGColor(0xFFFFFFFF);
44 }
void setBGColor(SkColor)
Definition gm.cpp:159

Member Function Documentation

◆ getISize()

SkISize DFTextGM::getISize ( )
inlineoverrideprotectedvirtual

Implements skiagm::GM.

Definition at line 51 of file dftext.cpp.

51{ return SkISize::Make(1024, 768); }
static constexpr SkISize Make(int32_t w, int32_t h)
Definition SkSize.h:20

◆ getName()

SkString DFTextGM::getName ( ) const
inlineoverrideprotectedvirtual

Implements skiagm::GM.

Definition at line 49 of file dftext.cpp.

49{ return SkString("dftext"); }

◆ onDraw()

void DFTextGM::onDraw ( SkCanvas inputCanvas)
inlineoverrideprotectedvirtual

Reimplemented from skiagm::GM.

Definition at line 53 of file dftext.cpp.

53 {
54 SkScalar textSizes[] = { 9.0f, 9.0f*2.0f, 9.0f*5.0f, 9.0f*2.0f*5.0f };
55 SkScalar scales[] = { 2.0f*5.0f, 5.0f, 2.0f, 1.0f };
56
57 // set up offscreen rendering with distance field text
58 auto ctx = inputCanvas->recordingContext();
61 inputCanvas->imageInfo().refColorSpace());
62 SkSurfaceProps inputProps;
63 inputCanvas->getProps(&inputProps);
65 inputProps.pixelGeometry());
67 SkCanvas* canvas = surface ? surface->getCanvas() : inputCanvas;
68 // init our new canvas with the old canvas's matrix
69 canvas->setMatrix(inputCanvas->getLocalToDeviceAs3x3());
70 // apply global scale to test glyph positioning
71 canvas->scale(1.05f, 1.05f);
72 canvas->clear(0xffffffff);
73
75 paint.setAntiAlias(true);
76
78 font.setSubpixel(true);
79
80 const char* text = "Hamburgefons";
81 const size_t textLen = strlen(text);
82
83 // check scaling up
86 for (size_t i = 0; i < std::size(textSizes); ++i) {
87 SkAutoCanvasRestore acr(canvas, true);
88 canvas->translate(x, y);
89 canvas->scale(scales[i], scales[i]);
90 font.setSize(textSizes[i]);
91 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, 0, 0, font, paint);
92 y += font.getMetrics(nullptr)*scales[i];
93 }
94
95 // check rotation
96 for (size_t i = 0; i < 5; ++i) {
97 SkScalar rotX = SkIntToScalar(10);
98 SkScalar rotY = y;
99
100 SkAutoCanvasRestore acr(canvas, true);
101 canvas->translate(SkIntToScalar(10 + i * 200), -80);
102 canvas->rotate(SkIntToScalar(i * 5), rotX, rotY);
103 for (int ps = 6; ps <= 32; ps += 3) {
104 font.setSize(SkIntToScalar(ps));
105 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, rotX, rotY, font, paint);
106 rotY += font.getMetrics(nullptr);
107 }
108 }
109
110 // check scaling down
112 x = SkIntToScalar(680);
113 y = SkIntToScalar(20);
114 size_t arraySize = std::size(textSizes);
115 for (size_t i = 0; i < arraySize; ++i) {
116 SkAutoCanvasRestore acr(canvas, true);
117 canvas->translate(x, y);
118 SkScalar scaleFactor = SkScalarInvert(scales[arraySize - i - 1]);
119 canvas->scale(scaleFactor, scaleFactor);
120 font.setSize(textSizes[i]);
121 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, 0, 0, font, paint);
122 y += font.getMetrics(nullptr)*scaleFactor;
123 }
124
125 // check pos text
126 {
127 SkAutoCanvasRestore acr(canvas, true);
128
129 canvas->scale(2.0f, 2.0f);
130
132 int count = font.textToGlyphs(text, textLen, SkTextEncoding::kUTF8, glyphs.get(), textLen);
134 font.setSize(textSizes[0]);
135 font.getPos(glyphs.get(), count, pos.get(), {340, 75});
136
137 auto blob = SkTextBlob::MakeFromPosText(glyphs.get(), count * sizeof(SkGlyphID),
138 pos.get(), font, SkTextEncoding::kGlyphID);
139 canvas->drawTextBlob(blob, 0, 0, paint);
140 }
141
142
143 // check gamma-corrected blending
144 const SkColor fg[] = {
145 0xFFFFFFFF,
146 0xFFFFFF00, 0xFFFF00FF, 0xFF00FFFF,
147 0xFFFF0000, 0xFF00FF00, 0xFF0000FF,
148 0xFF000000,
149 };
150
151 paint.setColor(0xFFF7F3F7);
152 SkRect r = SkRect::MakeLTRB(670, 215, 820, 397);
153 canvas->drawRect(r, paint);
154
155 x = SkIntToScalar(680);
156 y = SkIntToScalar(235);
157 font.setSize(SkIntToScalar(19));
158 for (size_t i = 0; i < std::size(fg); ++i) {
159 paint.setColor(fg[i]);
160
161 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, x, y, font, paint);
162 y += font.getMetrics(nullptr);
163 }
164
165 paint.setColor(0xFF181C18);
166 r = SkRect::MakeLTRB(820, 215, 970, 397);
167 canvas->drawRect(r, paint);
168
169 x = SkIntToScalar(830);
170 y = SkIntToScalar(235);
171 font.setSize(SkIntToScalar(19));
172 for (size_t i = 0; i < std::size(fg); ++i) {
173 paint.setColor(fg[i]);
174
175 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, x, y, font, paint);
176 y += font.getMetrics(nullptr);
177 }
178
179 // check skew
180 {
182 SkAutoCanvasRestore acr(canvas, true);
183 canvas->skew(0.0f, 0.151515f);
184 font.setSize(SkIntToScalar(32));
185 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, 745, 70, font, paint);
186 }
187 {
189 SkAutoCanvasRestore acr(canvas, true);
190 canvas->skew(0.5f, 0.0f);
191 font.setSize(SkIntToScalar(32));
192 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, 580, 125, font, paint);
193 }
194
195 // check perspective
196 {
198 SkAutoCanvasRestore acr(canvas, true);
199 SkMatrix persp;
200 persp.setAll(0.9839f, 0, 0,
201 0.2246f, 0.6829f, 0,
202 0.0002352f, -0.0003844f, 1);
203 canvas->concat(persp);
204 canvas->translate(1100, -295);
205 font.setSize(37.5f);
206 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, 0, 0, font, paint);
207 }
208 {
209 font.setSubpixel(false);
210 font.setEdging(SkFont::Edging::kAlias);
211 SkAutoCanvasRestore acr(canvas, true);
212 SkMatrix persp;
213 persp.setAll(0.9839f, 0, 0,
214 0.2246f, 0.6829f, 0,
215 0.0002352f, -0.0003844f, 1);
216 canvas->concat(persp);
217 canvas->translate(1075, -245);
218 canvas->scale(375, 375);
219 font.setSize(0.1f);
220 canvas->drawSimpleText(text, textLen, SkTextEncoding::kUTF8, 0, 0, font, paint);
221 }
222
223 // check color emoji
224 if (fEmojiSample.typeface) {
225 SkFont emojiFont;
226 emojiFont.setSubpixel(true);
227 emojiFont.setTypeface(fEmojiSample.typeface);
228 emojiFont.setSize(SkIntToScalar(19));
229 canvas->drawSimpleText(fEmojiSample.sampleText,
230 strlen(fEmojiSample.sampleText),
232 670,
233 90,
234 emojiFont,
235 paint);
236 }
237
238 // render offscreen buffer
239 if (surface) {
240 SkAutoCanvasRestore acr(inputCanvas, true);
241 // since we prepended this matrix already, we blit using identity
242 inputCanvas->resetMatrix();
243 inputCanvas->drawImage(surface->makeImageSnapshot().get(), 0, 0);
244 }
245 }
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
uint16_t glyphs[5]
int count
SkPoint pos
@ kPremul_SkAlphaType
pixel components are premultiplied by alpha
Definition SkAlphaType.h:29
uint32_t SkColor
Definition SkColor.h:37
@ kUTF8
uses bytes to represent UTF-8 or ASCII
@ kGlyphID
uses two byte words to represent glyph indices
#define SkScalarInvert(x)
Definition SkScalar.h:73
#define SkIntToScalar(x)
Definition SkScalar.h:57
constexpr int SkToInt(S x)
Definition SkTo.h:29
uint16_t SkGlyphID
Definition SkTypes.h:179
SkISize getISize() override
Definition dftext.cpp:51
bool getProps(SkSurfaceProps *props) const
void drawRect(const SkRect &rect, const SkPaint &paint)
void drawSimpleText(const void *text, size_t byteLength, SkTextEncoding encoding, SkScalar x, SkScalar y, const SkFont &font, const SkPaint &paint)
void translate(SkScalar dx, SkScalar dy)
SkMatrix getLocalToDeviceAs3x3() const
Definition SkCanvas.h:2222
virtual GrRecordingContext * recordingContext() const
void clear(SkColor color)
Definition SkCanvas.h:1199
void rotate(SkScalar degrees)
void resetMatrix()
void setMatrix(const SkM44 &matrix)
void scale(SkScalar sx, SkScalar sy)
void concat(const SkMatrix &matrix)
SkImageInfo imageInfo() const
void skew(SkScalar sx, SkScalar sy)
void drawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y, const SkPaint &paint)
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
Definition SkCanvas.h:1528
void setSubpixel(bool subpixel)
Definition SkFont.cpp:109
void setTypeface(sk_sp< SkTypeface > tf)
Definition SkFont.cpp:90
void setSize(SkScalar textSize)
Definition SkFont.cpp:129
@ kAntiAlias
may have transparent pixels on glyph edges
@ kAlias
no transparent pixels on glyph edges
@ kSubpixelAntiAlias
glyph positioned in pixel using transparency
SkMatrix & setAll(SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, SkScalar persp0, SkScalar persp1, SkScalar persp2)
Definition SkMatrix.h:562
@ kUseDeviceIndependentFonts_Flag
uint32_t flags() const
SkPixelGeometry pixelGeometry() const
static sk_sp< SkTextBlob > MakeFromPosText(const void *text, size_t byteLength, const SkPoint pos[], const SkFont &font, SkTextEncoding encoding=SkTextEncoding::kUTF8)
const Paint & paint
VkSurfaceKHR surface
Definition main.cc:49
float SkScalar
Definition extension.cpp:12
std::u16string text
double y
double x
SK_API sk_sp< SkSurface > RenderTarget(GrRecordingContext *context, skgpu::Budgeted budgeted, const SkImageInfo &imageInfo, int sampleCount, GrSurfaceOrigin surfaceOrigin, const SkSurfaceProps *surfaceProps, bool shouldCreateWithMips=false, bool isProtected=false)
sk_sp< SkTypeface > CreatePortableTypeface(const char *name, SkFontStyle style)
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition switches.h:259
font
Font Metadata and Metrics.
sk_sp< SkColorSpace > refColorSpace() const
static SkImageInfo MakeN32(int width, int height, SkAlphaType at)
static constexpr SkRect MakeLTRB(float l, float t, float r, float b)
Definition SkRect.h:646
sk_sp< SkTypeface > typeface

◆ onOnceBeforeDraw()

void DFTextGM::onOnceBeforeDraw ( )
inlineoverrideprotectedvirtual

Reimplemented from skiagm::GM.

Definition at line 47 of file dftext.cpp.

47{ fEmojiSample = ToolUtils::EmojiSample(); }
EmojiTestSample EmojiSample()

The documentation for this class was generated from the following file: