163 enum ImageRendering: qint8 {
164 ImageRenderingAuto = 0,
165 ImageRenderingOptimizeSpeed = 1,
166 ImageRenderingOptimizeQuality = 2,
169 QSvgQualityStyle(
int color);
170 ~QSvgQualityStyle() override;
172 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
173 void revert(QPainter *p, QSvgExtraStates &states) override;
174 Type type()
const override;
176 void setImageRendering(ImageRendering);
197 qint32 m_imageRendering: 4;
198 qint32 m_oldImageRendering: 4;
199 quint32 m_imageRenderingSet: 1;
207 QSvgOpacityStyle(qreal opacity);
208 ~QSvgOpacityStyle() override;
210 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
211 void revert(QPainter *p, QSvgExtraStates &states) override;
212 Type type()
const override;
213 qreal opacity()
const {
return m_opacity; }
214 bool isDefault()
const {
return qFuzzyCompare(m_opacity, qreal(1.0)); }
225 ~QSvgFillStyle() override;
227 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
228 void revert(QPainter *p, QSvgExtraStates &states) override;
229 Type type()
const override;
231 void setFillRule(Qt::FillRule f);
232 void setFillOpacity(qreal opacity);
233 void setPaintServer(QSvgPaintServerSharedPtr paintServer);
234 void setBrush(QBrush brush);
236 const QBrush & qbrush()
const
241 qreal fillOpacity()
const
243 return m_fillOpacity;
246 Qt::FillRule fillRule()
const
251 QSvgPaintServer *paintServer()
const
253 return m_paintServer.get();
256 void setPaintStyleId(
const QString &Id)
261 QString paintStyleId()
const
263 return m_paintStyleId;
271 QSvgPaintServerSharedPtr m_paintServer;
273 Qt::FillRule m_fillRule{Qt::WindingFill};
274 Qt::FillRule m_oldFillRule{Qt::WindingFill};
275 qreal m_fillOpacity{1.0};
276 qreal m_oldFillOpacity{0.};
278 QString m_paintStyleId;
280 uint m_fillRuleSet : 1;
281 uint m_fillOpacitySet : 1;
310 static const int LIGHTER = -1;
311 static const int BOLDER = 1;
313 QSvgFontStyle(QSvgFont *font, QSvgDocument *doc);
315 ~QSvgFontStyle() override;
317 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
318 void revert(QPainter *p, QSvgExtraStates &states) override;
319 Type type()
const override;
321 void setSize(qreal size)
325 m_qfont.setPointSizeF(size);
329 void setTextAnchor(Qt::Alignment anchor)
331 m_textAnchor = anchor;
335 void setFamily(
const QString &family)
337 m_qfont.setFamilies({family});
341 void setStyle(QFont::Style fontStyle) {
342 m_qfont.setStyle(fontStyle);
346 void setVariant(QFont::Capitalization fontVariant)
348 m_qfont.setCapitalization(fontVariant);
352 void setWeight(
int weight)
358 QSvgFont * svgFont()
const
363 const QFont &qfont()
const
368 QSvgDocument *doc()
const {
return m_doc;}
376 Qt::Alignment m_textAnchor;
378 QSvgFont *m_oldSvgFont =
nullptr;
380 Qt::Alignment m_oldTextAnchor;
383 uint m_familySet : 1;
386 uint m_variantSet : 1;
387 uint m_weightSet : 1;
388 uint m_textAnchorSet : 1;
395 ~QSvgStrokeStyle() override;
397 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
398 void revert(QPainter *p, QSvgExtraStates &states) override;
399 Type type()
const override;
401 void setStroke(QBrush brush)
403 m_stroke.setBrush(brush);
404 m_paintServer.reset();
408 void setPaintServer(QSvgPaintServerSharedPtr paintServer)
410 m_paintServer = std::move(paintServer);
414 void setDashArray(
const QList<qreal> &dashes);
416 void setDashArrayNone()
418 m_stroke.setStyle(Qt::SolidLine);
419 m_strokeDashArraySet = 1;
422 void setDashOffset(qreal offset)
424 m_strokeDashOffset = offset;
425 m_strokeDashOffsetSet = 1;
428 void setLineCap(Qt::PenCapStyle cap)
430 m_stroke.setCapStyle(cap);
431 m_strokeLineCapSet = 1;
434 void setLineJoin(Qt::PenJoinStyle join)
436 m_stroke.setJoinStyle(join);
437 m_strokeLineJoinSet = 1;
440 void setMiterLimit(qreal limit)
442 m_stroke.setMiterLimit(limit);
443 m_strokeMiterLimitSet = 1;
446 void setOpacity(qreal opacity)
448 m_strokeOpacity = opacity;
449 m_strokeOpacitySet = 1;
452 void setWidth(qreal width)
454 m_stroke.setWidthF(width);
455 m_strokeWidthSet = 1;
456 Q_ASSERT(!m_strokeDashArraySet);
461 return m_stroke.widthF();
464 void setVectorEffect(
bool nonScalingStroke)
466 m_vectorEffect = nonScalingStroke;
467 m_vectorEffectSet = 1;
470 QSvgPaintServer *paintServer()
const
472 return m_paintServer.get();
475 void setPaintStyleId(
const QString &Id)
480 QString paintStyleId()
const
482 return m_paintStyleId;
501 qreal m_strokeOpacity{1.0};
502 qreal m_oldStrokeOpacity{0.};
503 qreal m_strokeDashOffset{0.};
504 qreal m_oldStrokeDashOffset{0.};
506 QSvgPaintServerSharedPtr m_paintServer;
507 QString m_paintStyleId;
508 uint m_vectorEffect : 1;
509 uint m_oldVectorEffect : 1;
511 uint m_strokeSet : 1;
512 uint m_strokeDashArraySet : 1;
513 uint m_strokeDashOffsetSet : 1;
514 uint m_strokeLineCapSet : 1;
515 uint m_strokeLineJoinSet : 1;
516 uint m_strokeMiterLimitSet : 1;
517 uint m_strokeOpacitySet : 1;
518 uint m_strokeWidthSet : 1;
519 uint m_vectorEffectSet : 1;
525 QSvgTransformStyle(
const QTransform &transform);
526 ~QSvgTransformStyle() override;
528 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
529 void revert(QPainter *p, QSvgExtraStates &states) override;
530 Type type()
const override;
532 const QTransform & qtransform()
const
536 bool isDefault()
const {
return m_transform.isIdentity(); }
539 QTransform m_transform;
540 QStack<QTransform> m_oldWorldTransform;
546 QSvgCompOpStyle(QPainter::CompositionMode mode);
547 ~QSvgCompOpStyle() override;
549 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
550 void revert(QPainter *p, QSvgExtraStates &states) override;
551 Type type()
const override;
553 const QPainter::CompositionMode & compOp()
const
559 QPainter::CompositionMode m_mode;
561 QPainter::CompositionMode m_oldMode{QPainter::CompositionMode_SourceOver};
567 QSvgOffsetStyle() =
default;
568 ~QSvgOffsetStyle() override;
570 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
571 void revert(QPainter *p, QSvgExtraStates &states) override;
572 Type type()
const override;
574 void setPath(
const QPainterPath &path)
579 const QPainterPath &path()
const
584 void setRotateAngle(qreal angle)
586 m_rotateAngle = angle;
589 qreal rotateAngle()
const
591 return m_rotateAngle;
594 void setRotateType(QtSvg::OffsetRotateType type)
599 QtSvg::OffsetRotateType rotateType()
const
604 void setDistance(qreal distance)
606 m_distance = distance;
609 qreal distance()
const
616 qreal m_distance{0.};
617 qreal m_rotateAngle{0.};
618 QtSvg::OffsetRotateType m_rotateType{QtSvg::OffsetRotateType::Auto};
627 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
628 void revert(QPainter *p, QSvgExtraStates &states);
629 QSvgRefCounter<QSvgQualityStyle> quality;
630 QSvgRefCounter<QSvgFillStyle> fill;
631 QSvgRefCounter<QSvgViewportFillStyle> viewportFill;
632 QSvgRefCounter<QSvgFontStyle> font;
633 QSvgRefCounter<QSvgStrokeStyle> stroke;
634 QSvgRefCounter<QSvgTransformStyle> transform;
635 QSvgRefCounter<QSvgOpacityStyle> opacity;
636 QSvgRefCounter<QSvgCompOpStyle> compop;
637 QSvgRefCounter<QSvgOffsetStyle> offset;
660 ~QSvgAnimatedStyle();
662 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
663 void revert(QPainter *p, QSvgExtraStates &states);
666 void savePaintingState(
const QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
667 void fetchStyleState(
const QSvgAbstractAnimation *animation, QSvgStyleState ¤tStyle);
668 void applyStyle(QPainter *p, QSvgExtraStates &states,
const QSvgStyleState ¤tStyle);
671 QTransform m_worldTransform;
672 QTransform m_transformToNode;
673 QSvgStyleState m_static;