2 * Copyright 2015 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef sk_types_priv_DEFINED
9 #define sk_types_priv_DEFINED
11 #include "SkImageInfo.h"
12 #include "SkBlurTypes.h"
13 #include "SkDocument.h"
16 #include "SkPathMeasure.h"
18 #include "SkPicture.h"
20 #include "SkPictureRecorder.h"
24 #include "SkDisplacementMapEffect.h"
25 #include "SkDropShadowImageFilter.h"
26 #include "SkMatrixConvolutionImageFilter.h"
27 #include "Sk1DPathEffect.h"
28 #include "SkFontStyle.h"
29 #include "SkXMLWriter.h"
30 #include "GrContext.h"
31 #include "SkPathOps.h"
33 #include "SkTypeface.h"
34 #include "SkEncodedInfo.h"
35 #include "gl/GrGLInterface.h"
39 #include "sk_shader.h"
40 #include "sk_maskfilter.h"
48 static inline const SkPaint& AsPaint(const sk_paint_t& cpaint) {
49 return reinterpret_cast<const SkPaint&>(cpaint);
52 static inline const SkPaint* AsPaint(const sk_paint_t* cpaint) {
53 return reinterpret_cast<const SkPaint*>(cpaint);
56 static inline SkPaint* AsPaint(sk_paint_t* cpaint) {
57 return reinterpret_cast<SkPaint*>(cpaint);
60 static inline SkMaskFilter* AsMaskFilter(sk_maskfilter_t* cfilter) {
61 return reinterpret_cast<SkMaskFilter*>(cfilter);
64 static inline sk_maskfilter_t* ToMaskFilter(SkMaskFilter* filter) {
65 return reinterpret_cast<sk_maskfilter_t*>(filter);
68 static inline SkShader* AsShader(sk_shader_t* cshader) {
69 return reinterpret_cast<SkShader*>(cshader);
72 static inline SkRect* AsRect(sk_rect_t* crect) {
73 return reinterpret_cast<SkRect*>(crect);
76 static inline const SkRect* AsRect(const sk_rect_t* crect) {
77 return reinterpret_cast<const SkRect*>(crect);
80 static inline const SkRect& AsRect(const sk_rect_t& crect) {
81 return reinterpret_cast<const SkRect&>(crect);
84 static inline sk_rect_t ToRect(const SkRect& rect) {
85 return reinterpret_cast<const sk_rect_t&>(rect);
88 static inline sk_irect_t ToIRect(const SkIRect& rect) {
89 return reinterpret_cast<const sk_irect_t&>(rect);
92 static inline SkIRect* AsIRect(sk_irect_t* crect) {
93 return reinterpret_cast<SkIRect*>(crect);
96 static inline const SkIRect* AsIRect(const sk_irect_t* crect) {
97 return reinterpret_cast<const SkIRect*>(crect);
100 static inline const SkIRect& AsIRect(const sk_irect_t& crect) {
101 return reinterpret_cast<const SkIRect&>(crect);
104 static inline SkRegion* AsRegion(sk_region_t* creg) {
105 return reinterpret_cast<SkRegion*>(creg);
108 static inline SkRegion& AsRegion(sk_region_t& creg) {
109 return reinterpret_cast<SkRegion&>(creg);
112 static inline const SkRegion* AsRegion(const sk_region_t* creg) {
113 return reinterpret_cast<const SkRegion*>(creg);
116 static inline const SkRegion& AsRegion(const sk_region_t& creg) {
117 return reinterpret_cast<const SkRegion&>(creg);
120 static inline sk_region_t* ToRegion(SkRegion* reg) {
121 return reinterpret_cast<sk_region_t*>(reg);
124 static inline const SkBitmap* AsBitmap(const sk_bitmap_t* cbitmap) {
125 return reinterpret_cast<const SkBitmap*>(cbitmap);
128 static inline const SkBitmap& AsBitmap(const sk_bitmap_t& cbitmap) {
129 return reinterpret_cast<const SkBitmap&>(cbitmap);
132 static inline SkBitmap* AsBitmap(sk_bitmap_t* cbitmap) {
133 return reinterpret_cast<SkBitmap*>(cbitmap);
136 static inline const SkPixmap* AsPixmap(const sk_pixmap_t* cpixmap) {
137 return reinterpret_cast<const SkPixmap*>(cpixmap);
140 static inline const SkPixmap& AsPixmap(const sk_pixmap_t& cpixmap) {
141 return reinterpret_cast<const SkPixmap&>(cpixmap);
144 static inline SkPixmap* AsPixmap(sk_pixmap_t* cpixmap) {
145 return reinterpret_cast<SkPixmap*>(cpixmap);
148 static inline SkPixmap& AsPixmap(sk_pixmap_t& cpixmap) {
149 return reinterpret_cast<SkPixmap&>(cpixmap);
152 static inline sk_pixmap_t* ToPixmap(SkPixmap* pixmap) {
153 return reinterpret_cast<sk_pixmap_t*>(pixmap);
156 static inline SkData* AsData(const sk_data_t* cdata) {
157 return reinterpret_cast<SkData*>(const_cast<sk_data_t*>(cdata));
160 static inline sk_data_t* ToData(SkData* data) {
161 return reinterpret_cast<sk_data_t*>(data);
164 static inline sk_path_t* ToPath(SkPath* cpath) {
165 return reinterpret_cast<sk_path_t*>(cpath);
168 static inline const SkPath& AsPath(const sk_path_t& cpath) {
169 return reinterpret_cast<const SkPath&>(cpath);
172 static inline SkPath* AsPath(sk_path_t* cpath) {
173 return reinterpret_cast<SkPath*>(cpath);
176 static inline const SkPath* AsPath(const sk_path_t* cpath) {
177 return reinterpret_cast<const SkPath*>(cpath);
180 static inline const SkImage* AsImage(const sk_image_t* cimage) {
181 return reinterpret_cast<const SkImage*>(cimage);
184 static inline sk_image_t* ToImage(SkImage* cimage) {
185 return reinterpret_cast<sk_image_t*>(cimage);
188 static inline sk_canvas_t* ToCanvas(SkCanvas* canvas) {
189 return reinterpret_cast<sk_canvas_t*>(canvas);
192 static inline SkCanvas* AsCanvas(sk_canvas_t* ccanvas) {
193 return reinterpret_cast<SkCanvas*>(ccanvas);
196 static inline SkPictureRecorder* AsPictureRecorder(sk_picture_recorder_t* crec) {
197 return reinterpret_cast<SkPictureRecorder*>(crec);
200 static inline sk_picture_recorder_t* ToPictureRecorder(SkPictureRecorder* rec) {
201 return reinterpret_cast<sk_picture_recorder_t*>(rec);
204 static inline const SkPicture* AsPicture(const sk_picture_t* cpic) {
205 return reinterpret_cast<const SkPicture*>(cpic);
208 static inline SkPicture* AsPicture(sk_picture_t* cpic) {
209 return reinterpret_cast<SkPicture*>(cpic);
212 static inline sk_picture_t* ToPicture(SkPicture* pic) {
213 return reinterpret_cast<sk_picture_t*>(pic);
216 static inline SkImageFilter* AsImageFilter(sk_imagefilter_t* cfilter) {
217 return reinterpret_cast<SkImageFilter*>(cfilter);
220 static inline SkImageFilter** AsImageFilters(sk_imagefilter_t** cfilter) {
221 return reinterpret_cast<SkImageFilter**>(cfilter);
224 static inline sk_imagefilter_t* ToImageFilter(SkImageFilter* filter) {
225 return reinterpret_cast<sk_imagefilter_t*>(filter);
228 static inline SkColorFilter* AsColorFilter(sk_colorfilter_t* cfilter) {
229 return reinterpret_cast<SkColorFilter*>(cfilter);
232 static inline sk_colorfilter_t* ToColorFilter(SkColorFilter* filter) {
233 return reinterpret_cast<sk_colorfilter_t*>(filter);
236 static inline const SkCodec* AsCodec(const sk_codec_t* codec) {
237 return reinterpret_cast<const SkCodec*>(codec);
240 static inline const SkCodec& AsCodec(const sk_codec_t& codec) {
241 return reinterpret_cast<const SkCodec&>(codec);
244 static inline SkCodec* AsCodec(sk_codec_t* codec) {
245 return reinterpret_cast<SkCodec*>(codec);
248 static inline sk_codec_t* ToCodec(SkCodec* codec) {
249 return reinterpret_cast<sk_codec_t*>(codec);
252 static inline const SkCodec::Options* AsCodecOptions(const sk_codec_options_t* t) {
253 return reinterpret_cast<const SkCodec::Options*>(t);
256 static inline SkTypeface* AsTypeface(sk_typeface_t* typeface) {
257 return reinterpret_cast<SkTypeface*>(typeface);
260 static inline sk_typeface_t* ToTypeface(SkTypeface* typeface) {
261 return reinterpret_cast<sk_typeface_t*>(typeface);
264 static inline sk_colorspace_t* ToColorSpace(SkColorSpace* colorspace) {
265 return reinterpret_cast<sk_colorspace_t*>(colorspace);
268 static inline sk_shader_t* ToShader(SkShader* shader) {
269 return reinterpret_cast<sk_shader_t*>(shader);
272 static inline const SkFILEStream* AsFileStream(const sk_stream_filestream_t* cfilestream) {
273 return reinterpret_cast<const SkFILEStream*>(cfilestream);
276 static inline SkFILEStream* AsFileStream(sk_stream_filestream_t* cfilestream) {
277 return reinterpret_cast<SkFILEStream*>(cfilestream);
280 static inline sk_stream_filestream_t* ToFileStream(SkFILEStream* stream) {
281 return reinterpret_cast<sk_stream_filestream_t*>(stream);
284 static inline const SkMemoryStream* AsMemoryStream(const sk_stream_memorystream_t* cmemorystream) {
285 return reinterpret_cast<const SkMemoryStream*>(cmemorystream);
288 static inline SkMemoryStream* AsMemoryStream(sk_stream_memorystream_t* cmemorystream) {
289 return reinterpret_cast<SkMemoryStream*>(cmemorystream);
292 static inline sk_stream_memorystream_t* ToMemoryStream(SkMemoryStream* stream) {
293 return reinterpret_cast<sk_stream_memorystream_t*>(stream);
296 static inline SkStreamRewindable* AsStreamRewindable(sk_stream_streamrewindable_t* cstreamrewindable) {
297 return reinterpret_cast<SkStreamRewindable*>(cstreamrewindable);
300 static inline const SkStream* AsStream(const sk_stream_t* cstream) {
301 return reinterpret_cast<const SkStream*>(cstream);
304 static inline SkStream* AsStream(sk_stream_t* cstream) {
305 return reinterpret_cast<SkStream*>(cstream);
308 static inline sk_stream_t* ToStream(SkStream* cstream) {
309 return reinterpret_cast<sk_stream_t*>(cstream);
312 static inline sk_stream_asset_t* ToStreamAsset(SkStreamAsset* cstream) {
313 return reinterpret_cast<sk_stream_asset_t*>(cstream);
316 static inline SkStreamAsset* AsStreamAsset(sk_stream_asset_t* cstream) {
317 return reinterpret_cast<SkStreamAsset*>(cstream);
320 static inline SkFILEWStream* AsFileWStream(sk_wstream_filestream_t* cfilestream) {
321 return reinterpret_cast<SkFILEWStream*>(cfilestream);
324 static inline SkDynamicMemoryWStream* AsDynamicMemoryWStream(sk_wstream_dynamicmemorystream_t* cmemorystream) {
325 return reinterpret_cast<SkDynamicMemoryWStream*>(cmemorystream);
328 static inline SkWStream* AsWStream(sk_wstream_t* cstream) {
329 return reinterpret_cast<SkWStream*>(cstream);
332 static inline sk_wstream_filestream_t* ToFileWStream(SkFILEWStream* filestream) {
333 return reinterpret_cast<sk_wstream_filestream_t*>(filestream);
336 static inline sk_wstream_dynamicmemorystream_t* ToDynamicMemoryWStream(SkDynamicMemoryWStream* memorystream) {
337 return reinterpret_cast<sk_wstream_dynamicmemorystream_t*>(memorystream);
340 static inline sk_wstream_t* ToWStream(SkWStream* stream) {
341 return reinterpret_cast<sk_wstream_t*>(stream);
344 static inline const SkPoint& AsPoint(const sk_point_t& p) {
345 return reinterpret_cast<const SkPoint&>(p);
348 static inline const SkPoint* AsPoint(const sk_point_t* p) {
349 return reinterpret_cast<const SkPoint*>(p);
352 static inline SkPoint* AsPoint(sk_point_t* p) {
353 return reinterpret_cast<SkPoint*>(p);
356 static inline sk_point_t* ToPoint(SkPoint *p) {
357 return reinterpret_cast<sk_point_t*>(p);
360 static inline sk_point_t& ToPoint(SkPoint &p) {
361 return reinterpret_cast<sk_point_t&>(p);
364 static inline const SkIPoint& AsIPoint(const sk_ipoint_t& p) {
365 return reinterpret_cast<const SkIPoint&>(p);
368 static inline const SkIPoint* AsIPoint(const sk_ipoint_t* p) {
369 return reinterpret_cast<const SkIPoint*>(p);
372 static inline const SkSize& AsSize(const sk_size_t& p) {
373 return reinterpret_cast<const SkSize&>(p);
376 static inline const SkSize* AsSize(const sk_size_t* p) {
377 return reinterpret_cast<const SkSize*>(p);
380 static inline const SkISize& AsISize(const sk_isize_t& p) {
381 return reinterpret_cast<const SkISize&>(p);
384 static inline const SkISize* AsISize(const sk_isize_t* p) {
385 return reinterpret_cast<const SkISize*>(p);
388 static inline SkISize* AsISize(sk_isize_t* p) {
389 return reinterpret_cast<SkISize*>(p);
392 static inline const sk_isize_t& ToISize(const SkISize& p) {
393 return reinterpret_cast<const sk_isize_t&>(p);
396 static inline const sk_isize_t* ToISize(const SkISize* p) {
397 return reinterpret_cast<const sk_isize_t*>(p);
400 static inline const SkPoint3& AsPoint3(const sk_point3_t& p) {
401 return reinterpret_cast<const SkPoint3&>(p);
404 static inline const SkPoint3* AsPoint3(const sk_point3_t* p) {
405 return reinterpret_cast<const SkPoint3*>(p);
408 static inline const SkImageFilter::CropRect& AsImageFilterCropRect(const sk_imagefilter_croprect_t& p) {
409 return reinterpret_cast<const SkImageFilter::CropRect&>(p);
412 static inline const SkImageFilter::CropRect* AsImageFilterCropRect(const sk_imagefilter_croprect_t* p) {
413 return reinterpret_cast<const SkImageFilter::CropRect*>(p);
416 static inline SkPaint::FontMetrics* AsFontMetrics(sk_fontmetrics_t* p) {
417 return reinterpret_cast<SkPaint::FontMetrics*>(p);
420 static inline sk_fontmetrics_t* ToFontMetrics(SkPaint::FontMetrics* p) {
421 return reinterpret_cast<sk_fontmetrics_t*>(p);
424 static inline SkString* AsString(const sk_string_t* cdata) {
425 return reinterpret_cast<SkString*>(const_cast<sk_string_t*>(cdata));
428 static inline sk_string_t* ToString(SkString* data) {
429 return reinterpret_cast<sk_string_t*>(data);
432 static inline SkDocument* AsDocument(sk_document_t* cdocument) {
433 return reinterpret_cast<SkDocument*>(cdocument);
436 static inline sk_document_t* ToDocument(SkDocument* document) {
437 return reinterpret_cast<sk_document_t*>(document);
440 static inline SkPath::Iter* AsPathIter(sk_path_iterator_t* iter) {
441 return reinterpret_cast<SkPath::Iter*>(iter);
444 static inline sk_path_iterator_t* ToPathIter(SkPath::Iter* iter) {
445 return reinterpret_cast<sk_path_iterator_t*>(iter);
448 static inline SkPath::RawIter* AsPathRawIter(sk_path_rawiterator_t* iter) {
449 return reinterpret_cast<SkPath::RawIter*>(iter);
452 static inline sk_path_rawiterator_t* ToPathRawIter(SkPath::RawIter* iter) {
453 return reinterpret_cast<sk_path_rawiterator_t*>(iter);
456 static inline const SkPathEffect* AsPathEffect(const sk_path_effect_t* p) {
457 return reinterpret_cast<const SkPathEffect*>(p);
460 static inline SkPathEffect* AsPathEffect(sk_path_effect_t* p) {
461 return reinterpret_cast<SkPathEffect*>(p);
464 static inline sk_path_effect_t* ToPathEffect(SkPathEffect* p) {
465 return reinterpret_cast<sk_path_effect_t*>(p);
468 static inline const sk_path_effect_t* ToPathEffect(const SkPathEffect* p) {
469 return reinterpret_cast<const sk_path_effect_t*>(p);
472 static inline const SkColorTable* AsColorTable(const sk_colortable_t* p) {
473 return reinterpret_cast<const SkColorTable*>(p);
476 static inline SkColorTable* AsColorTable(sk_colortable_t* p) {
477 return reinterpret_cast<SkColorTable*>(p);
480 static inline sk_colortable_t* ToColorTable(SkColorTable* p) {
481 return reinterpret_cast<sk_colortable_t*>(p);
484 static inline const sk_colortable_t* ToColorTable(const SkColorTable* p) {
485 return reinterpret_cast<const sk_colortable_t*>(p);
488 static inline const SkPixelRefFactory* AsPixelRefFactory(const sk_pixelref_factory_t* p) {
489 return reinterpret_cast<const SkPixelRefFactory*>(p);
492 static inline SkPixelRefFactory* AsPixelRefFactory(sk_pixelref_factory_t* p) {
493 return reinterpret_cast<SkPixelRefFactory*>(p);
496 static inline sk_pixelref_factory_t* ToColorTable(SkPixelRefFactory* p) {
497 return reinterpret_cast<sk_pixelref_factory_t*>(p);
500 static inline const sk_pixelref_factory_t* ToColorTable(const SkPixelRefFactory* p) {
501 return reinterpret_cast<const sk_pixelref_factory_t*>(p);
504 static inline sk_surface_t* ToSurface(SkSurface* p) {
505 return reinterpret_cast<sk_surface_t*>(p);
508 static inline SkSurface* AsSurface(sk_surface_t* p) {
509 return reinterpret_cast<SkSurface*>(p);
512 static inline gr_context_t* ToGrContext(GrContext* p) {
513 return reinterpret_cast<gr_context_t*>(p);
516 static inline GrContext* AsGrContext(gr_context_t* p) {
517 return reinterpret_cast<GrContext*>(p);
519 static inline const GrContextOptions& AsGrContextOptions(const gr_context_options_t& p) {
520 return reinterpret_cast<const GrContextOptions&>(p);
523 static inline const GrBackendRenderTargetDesc& AsGrBackendRenderTargetDesc(const gr_backend_rendertarget_desc_t& p) {
524 return reinterpret_cast<const GrBackendRenderTargetDesc&>(p);
527 static inline const GrBackendTextureDesc& AsGrBackendTextureDesc(const gr_backend_texture_desc_t& p) {
528 return reinterpret_cast<const GrBackendTextureDesc&>(p);
532 static inline gr_glinterface_t* ToGrGLInterface(GrGLInterface* p) {
533 return reinterpret_cast<gr_glinterface_t*>(p);
536 static inline GrGLInterface* AsGrGLInterface(gr_glinterface_t* p) {
537 return reinterpret_cast<GrGLInterface*>(p);
540 static inline const gr_glinterface_t* ToGrGLInterface(const GrGLInterface* p) {
541 return reinterpret_cast<const gr_glinterface_t*>(p);
544 static inline const GrGLInterface* AsGrGLInterface(const gr_glinterface_t* p) {
545 return reinterpret_cast<const GrGLInterface*>(p);
548 static inline sk_opbuilder_t* ToOpBuilder(SkOpBuilder* p) {
549 return reinterpret_cast<sk_opbuilder_t*>(p);
552 static inline SkOpBuilder* AsOpBuilder(sk_opbuilder_t* p) {
553 return reinterpret_cast<SkOpBuilder*>(p);
556 static inline const SkCanvas::Lattice& AsLattice(const sk_lattice_t& p) {
557 return reinterpret_cast<const SkCanvas::Lattice&>(p);
560 static inline sk_pathmeasure_t* ToPathMeasure(SkPathMeasure* p) {
561 return reinterpret_cast<sk_pathmeasure_t*>(p);
564 static inline SkPathMeasure* AsPathMeasure(sk_pathmeasure_t* p) {
565 return reinterpret_cast<SkPathMeasure*>(p);
568 static inline sk_encodedinfo_t* ToEncodedInfo(SkEncodedInfo *p) {
569 return reinterpret_cast<sk_encodedinfo_t*>(p);
572 static inline sk_encodedinfo_t& ToEncodedInfo(SkEncodedInfo &p) {
573 return reinterpret_cast<sk_encodedinfo_t&>(p);
576 static inline const sk_encodedinfo_t* ToEncodedInfo(const SkEncodedInfo *p) {
577 return reinterpret_cast<const sk_encodedinfo_t*>(p);
580 static inline const sk_encodedinfo_t& ToEncodedInfo(const SkEncodedInfo &p) {
581 return reinterpret_cast<const sk_encodedinfo_t&>(p);
584 static inline SkCodec::FrameInfo* AsFrameInfo(sk_codec_frameinfo_t *p) {
585 return reinterpret_cast<SkCodec::FrameInfo*>(p);
588 static inline sk_codec_frameinfo_t* ToFrameInfo(SkCodec::FrameInfo *p) {
589 return reinterpret_cast<sk_codec_frameinfo_t*>(p);
592 static inline sk_codec_frameinfo_t& ToFrameInfo(SkCodec::FrameInfo &p) {
593 return reinterpret_cast<sk_codec_frameinfo_t&>(p);
596 static inline const sk_codec_frameinfo_t* ToFrameInfo(const SkCodec::FrameInfo *p) {
597 return reinterpret_cast<const sk_codec_frameinfo_t*>(p);
600 static inline const sk_codec_frameinfo_t& ToFrameInfo(const SkCodec::FrameInfo &p) {
601 return reinterpret_cast<const sk_codec_frameinfo_t&>(p);
604 static inline const SkXMLStreamWriter* AsXMLStreamWriter(const sk_xmlstreamwriter_t* p) {
605 return reinterpret_cast<const SkXMLStreamWriter*>(p);
608 static inline SkXMLStreamWriter* AsXMLStreamWriter(sk_xmlstreamwriter_t* p) {
609 return reinterpret_cast<SkXMLStreamWriter*>(p);
612 static inline sk_xmlstreamwriter_t* ToXMLStreamWriter(SkXMLStreamWriter* p) {
613 return reinterpret_cast<sk_xmlstreamwriter_t*>(p);
616 static inline const sk_xmlstreamwriter_t* ToXMLStreamWriter(const SkXMLStreamWriter* p) {
617 return reinterpret_cast<const sk_xmlstreamwriter_t*>(p);
620 static inline const SkXMLWriter* AsXMLWriter(const sk_xmlwriter_t* p) {
621 return reinterpret_cast<const SkXMLWriter*>(p);
624 static inline SkXMLWriter* AsXMLWriter(sk_xmlwriter_t* p) {
625 return reinterpret_cast<SkXMLWriter*>(p);
628 static inline sk_xmlwriter_t* ToXMLWriter(SkXMLWriter* p) {
629 return reinterpret_cast<sk_xmlwriter_t*>(p);
632 static inline const sk_xmlwriter_t* ToXMLWriter(const SkXMLWriter* p) {
633 return reinterpret_cast<const sk_xmlwriter_t*>(p);
636 static inline void from_c(const sk_matrix_t* cmatrix, SkMatrix* matrix) {
638 cmatrix->mat[0], cmatrix->mat[1], cmatrix->mat[2],
639 cmatrix->mat[3], cmatrix->mat[4], cmatrix->mat[5],
640 cmatrix->mat[6], cmatrix->mat[7], cmatrix->mat[8]);
643 static inline void from_sk(const SkMatrix* matrix, sk_matrix_t* cmatrix) {
644 matrix->get9(cmatrix->mat);
647 static inline bool from_c(const sk_imageinfo_t& cinfo, SkImageInfo* info) {
649 *info = SkImageInfo::Make(
652 (SkColorType)cinfo.colorType,
653 (SkAlphaType)cinfo.alphaType);
658 static inline bool from_sk(const SkImageInfo& info, sk_imageinfo_t* cinfo) {
663 (sk_colortype_t)info.colorType(),
664 (sk_alphatype_t)info.alphaType()
670 static inline void from_c(const sk_surfaceprops_t* cprops, SkSurfaceProps* props) {
671 *props = SkSurfaceProps(cprops->flags, (SkPixelGeometry)cprops->pixelGeometry);