Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
SkSVGDevice::AutoElement Class Reference
Inheritance diagram for SkSVGDevice::AutoElement:
SkNoncopyable

Public Member Functions

 AutoElement (const char name[], SkXMLWriter *writer)
 
 AutoElement (const char name[], const std::unique_ptr< SkXMLWriter > &writer)
 
 AutoElement (const char name[], SkSVGDevice *svgdev, ResourceBucket *bucket, const MxCp &mc, const SkPaint &paint)
 
 ~AutoElement ()
 
void addAttribute (const char name[], const char val[])
 
void addAttribute (const char name[], const SkString &val)
 
void addAttribute (const char name[], int32_t val)
 
void addAttribute (const char name[], SkScalar val)
 
void addText (const SkString &text)
 
void addRectAttributes (const SkRect &)
 
void addPathAttributes (const SkPath &, SkParsePath::PathEncoding)
 
void addTextAttributes (const SkFont &)
 

Detailed Description

Definition at line 282 of file SkSVGDevice.cpp.

Constructor & Destructor Documentation

◆ AutoElement() [1/3]

SkSVGDevice::AutoElement::AutoElement ( const char  name[],
SkXMLWriter writer 
)
inline

Definition at line 284 of file SkSVGDevice.cpp.

285 : fWriter(writer)
286 , fResourceBucket(nullptr) {
287 fWriter->startElement(name);
288 }
void startElement(const char elem[])
const char * name
Definition fuchsia.cc:50

◆ AutoElement() [2/3]

SkSVGDevice::AutoElement::AutoElement ( const char  name[],
const std::unique_ptr< SkXMLWriter > &  writer 
)
inline

Definition at line 290 of file SkSVGDevice.cpp.

291 : AutoElement(name, writer.get()) {}
AutoElement(const char name[], SkXMLWriter *writer)

◆ AutoElement() [3/3]

SkSVGDevice::AutoElement::AutoElement ( const char  name[],
SkSVGDevice svgdev,
ResourceBucket bucket,
const MxCp mc,
const SkPaint paint 
)
inline

Definition at line 293 of file SkSVGDevice.cpp.

295 : fWriter(svgdev->fWriter.get())
296 , fResourceBucket(bucket) {
297
298 svgdev->syncClipStack(*mc.fClipStack);
299 Resources res = this->addResources(mc, paint);
300
301 fWriter->startElement(name);
302
303 this->addPaint(paint, res);
304
305 if (!mc.fMatrix->isIdentity()) {
306 this->addAttribute("transform", svg_transform(*mc.fMatrix));
307 }
308 }
void addAttribute(const char name[], const char val[])
const Paint & paint

◆ ~AutoElement()

SkSVGDevice::AutoElement::~AutoElement ( )
inline

Definition at line 310 of file SkSVGDevice.cpp.

310 {
311 fWriter->endElement();
312 }
void endElement()
Definition SkXMLWriter.h:29

Member Function Documentation

◆ addAttribute() [1/4]

void SkSVGDevice::AutoElement::addAttribute ( const char  name[],
const char  val[] 
)
inline

Definition at line 314 of file SkSVGDevice.cpp.

314 {
315 fWriter->addAttribute(name, val);
316 }
void addAttribute(const char name[], const char value[])

◆ addAttribute() [2/4]

void SkSVGDevice::AutoElement::addAttribute ( const char  name[],
const SkString val 
)
inline

Definition at line 318 of file SkSVGDevice.cpp.

318 {
319 fWriter->addAttribute(name, val.c_str());
320 }
const char * c_str() const
Definition SkString.h:133

◆ addAttribute() [3/4]

void SkSVGDevice::AutoElement::addAttribute ( const char  name[],
int32_t  val 
)
inline

Definition at line 322 of file SkSVGDevice.cpp.

322 {
323 fWriter->addS32Attribute(name, val);
324 }
void addS32Attribute(const char name[], int32_t value)

◆ addAttribute() [4/4]

void SkSVGDevice::AutoElement::addAttribute ( const char  name[],
SkScalar  val 
)
inline

Definition at line 326 of file SkSVGDevice.cpp.

326 {
327 fWriter->addScalarAttribute(name, val);
328 }
void addScalarAttribute(const char name[], SkScalar value)

◆ addPathAttributes()

void SkSVGDevice::AutoElement::addPathAttributes ( const SkPath path,
SkParsePath::PathEncoding  encoding 
)

Definition at line 679 of file SkSVGDevice.cpp.

680 {
681 this->addAttribute("d", SkParsePath::ToSVGString(path, encoding));
682}
static SkString ToSVGString(const SkPath &, PathEncoding=PathEncoding::Absolute)

◆ addRectAttributes()

void SkSVGDevice::AutoElement::addRectAttributes ( const SkRect rect)

Definition at line 666 of file SkSVGDevice.cpp.

666 {
667 // x, y default to 0
668 if (rect.x() != 0) {
669 this->addAttribute("x", rect.x());
670 }
671 if (rect.y() != 0) {
672 this->addAttribute("y", rect.y());
673 }
674
675 this->addAttribute("width", rect.width());
676 this->addAttribute("height", rect.height());
677}
sk_sp< SkBlender > blender SkRect rect
Definition SkRecords.h:350
constexpr float x() const
Definition SkRect.h:720
constexpr float y() const
Definition SkRect.h:727
constexpr float height() const
Definition SkRect.h:769
constexpr float width() const
Definition SkRect.h:762

◆ addText()

void SkSVGDevice::AutoElement::addText ( const SkString text)
inline

Definition at line 330 of file SkSVGDevice.cpp.

330 {
331 fWriter->addText(text.c_str(), text.size());
332 }
void addText(const char text[], size_t length)
std::u16string text

◆ addTextAttributes()

void SkSVGDevice::AutoElement::addTextAttributes ( const SkFont font)

Definition at line 684 of file SkSVGDevice.cpp.

684 {
685 this->addAttribute("font-size", font.getSize());
686
687 SkString familyName;
688 THashSet<SkString> familySet;
689 sk_sp<SkTypeface> tface = font.refTypeface();
690
691 SkASSERT(tface);
692 SkFontStyle style = tface->fontStyle();
693 if (style.slant() == SkFontStyle::kItalic_Slant) {
694 this->addAttribute("font-style", "italic");
695 } else if (style.slant() == SkFontStyle::kOblique_Slant) {
696 this->addAttribute("font-style", "oblique");
697 }
698 int weightIndex = (SkTPin(style.weight(), 100, 900) - 50) / 100;
699 if (weightIndex != 3) {
700 static constexpr const char* weights[] = {
701 "100", "200", "300", "normal", "400", "500", "600", "bold", "800", "900"
702 };
703 this->addAttribute("font-weight", weights[weightIndex]);
704 }
705 int stretchIndex = style.width() - 1;
706 if (stretchIndex != 4) {
707 static constexpr const char* stretches[] = {
708 "ultra-condensed", "extra-condensed", "condensed", "semi-condensed",
709 "normal",
710 "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"
711 };
712 this->addAttribute("font-stretch", stretches[stretchIndex]);
713 }
714
715 sk_sp<SkTypeface::LocalizedStrings> familyNameIter(tface->createFamilyNameIterator());
716 SkTypeface::LocalizedString familyString;
717 if (familyNameIter) {
718 while (familyNameIter->next(&familyString)) {
719 if (familySet.contains(familyString.fString)) {
720 continue;
721 }
722 familySet.add(familyString.fString);
723 familyName.appendf((familyName.isEmpty() ? "%s" : ", %s"), familyString.fString.c_str());
724 }
725 }
726 if (!familyName.isEmpty()) {
727 this->addAttribute("font-family", familyName);
728 }
729}
#define SkASSERT(cond)
Definition SkAssert.h:116
static constexpr const T & SkTPin(const T &x, const T &lo, const T &hi)
Definition SkTPin.h:19
Slant slant() const
Definition SkFontStyle.h:64
int width() const
Definition SkFontStyle.h:63
int weight() const
Definition SkFontStyle.h:62
SkScalar getSize() const
Definition SkFont.h:217
bool isEmpty() const
Definition SkString.h:130
void void void appendf(const char format[],...) SK_PRINTF_LIKE(2
Definition SkString.cpp:550
void add(T item)
Definition SkTHash.h:573
bool contains(const T &item) const
Definition SkTHash.h:576
font
Font Metadata and Metrics.

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