156 enum ImageRendering: qint8 {
157 ImageRenderingAuto = 0,
158 ImageRenderingOptimizeSpeed = 1,
159 ImageRenderingOptimizeQuality = 2,
162 QSvgQualityStyle(
int color);
163 ~QSvgQualityStyle() override;
165 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
166 void revert(QPainter *p, QSvgExtraStates &states) override;
167 Type type()
const override;
169 void setImageRendering(ImageRendering);
190 qint32 m_imageRendering: 4;
191 qint32 m_oldImageRendering: 4;
192 quint32 m_imageRenderingSet: 1;
200 QSvgOpacityStyle(qreal opacity);
201 ~QSvgOpacityStyle() override;
203 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
204 void revert(QPainter *p, QSvgExtraStates &states) override;
205 Type type()
const override;
206 qreal opacity()
const {
return m_opacity; }
207 bool isDefault()
const {
return qFuzzyCompare(m_opacity, qreal(1.0)); }
218 ~QSvgFillStyle() override;
220 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
221 void revert(QPainter *p, QSvgExtraStates &states) override;
222 Type type()
const override;
224 void setFillRule(Qt::FillRule f);
225 void setFillOpacity(qreal opacity);
226 void setPaintServer(QSvgPaintServerSharedPtr paintServer);
227 void setBrush(QBrush brush);
229 const QBrush & qbrush()
const
234 qreal fillOpacity()
const
236 return m_fillOpacity;
239 Qt::FillRule fillRule()
const
244 QSvgPaintServer *paintServer()
const
246 return m_paintServer.get();
249 void setPaintStyleId(
const QString &Id)
254 QString paintStyleId()
const
256 return m_paintStyleId;
264 QSvgPaintServerSharedPtr m_paintServer;
266 Qt::FillRule m_fillRule{Qt::WindingFill};
267 Qt::FillRule m_oldFillRule{Qt::WindingFill};
268 qreal m_fillOpacity{1.0};
269 qreal m_oldFillOpacity{0.};
271 QString m_paintStyleId;
273 uint m_fillRuleSet : 1;
274 uint m_fillOpacitySet : 1;
303 static const int LIGHTER = -1;
304 static const int BOLDER = 1;
306 QSvgFontStyle(QSvgFont *font, QSvgDocument *doc);
308 ~QSvgFontStyle() override;
310 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
311 void revert(QPainter *p, QSvgExtraStates &states) override;
312 Type type()
const override;
314 void setSize(qreal size)
318 m_qfont.setPointSizeF(size);
322 void setTextAnchor(Qt::Alignment anchor)
324 m_textAnchor = anchor;
328 void setFamily(
const QString &family)
330 m_qfont.setFamilies({family});
334 void setStyle(QFont::Style fontStyle) {
335 m_qfont.setStyle(fontStyle);
339 void setVariant(QFont::Capitalization fontVariant)
341 m_qfont.setCapitalization(fontVariant);
345 void setWeight(
int weight)
351 QSvgFont * svgFont()
const
356 const QFont &qfont()
const
361 QSvgDocument *doc()
const {
return m_doc;}
369 Qt::Alignment m_textAnchor;
371 QSvgFont *m_oldSvgFont =
nullptr;
373 Qt::Alignment m_oldTextAnchor;
376 uint m_familySet : 1;
379 uint m_variantSet : 1;
380 uint m_weightSet : 1;
381 uint m_textAnchorSet : 1;
388 ~QSvgStrokeStyle() override;
390 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
391 void revert(QPainter *p, QSvgExtraStates &states) override;
392 Type type()
const override;
394 void setStroke(QBrush brush)
396 m_stroke.setBrush(brush);
397 m_paintServer.reset();
401 void setPaintServer(QSvgPaintServerSharedPtr paintServer)
403 m_paintServer = paintServer;
407 void setDashArray(
const QList<qreal> &dashes);
409 void setDashArrayNone()
411 m_stroke.setStyle(Qt::SolidLine);
412 m_strokeDashArraySet = 1;
415 void setDashOffset(qreal offset)
417 m_strokeDashOffset = offset;
418 m_strokeDashOffsetSet = 1;
421 void setLineCap(Qt::PenCapStyle cap)
423 m_stroke.setCapStyle(cap);
424 m_strokeLineCapSet = 1;
427 void setLineJoin(Qt::PenJoinStyle join)
429 m_stroke.setJoinStyle(join);
430 m_strokeLineJoinSet = 1;
433 void setMiterLimit(qreal limit)
435 m_stroke.setMiterLimit(limit);
436 m_strokeMiterLimitSet = 1;
439 void setOpacity(qreal opacity)
441 m_strokeOpacity = opacity;
442 m_strokeOpacitySet = 1;
445 void setWidth(qreal width)
447 m_stroke.setWidthF(width);
448 m_strokeWidthSet = 1;
449 Q_ASSERT(!m_strokeDashArraySet);
454 return m_stroke.widthF();
457 void setVectorEffect(
bool nonScalingStroke)
459 m_vectorEffect = nonScalingStroke;
460 m_vectorEffectSet = 1;
463 QSvgPaintServer *paintServer()
const
465 return m_paintServer.get();
468 void setPaintStyleId(
const QString &Id)
473 QString paintStyleId()
const
475 return m_paintStyleId;
494 qreal m_strokeOpacity{1.0};
495 qreal m_oldStrokeOpacity{0.};
496 qreal m_strokeDashOffset{0.};
497 qreal m_oldStrokeDashOffset{0.};
499 QSvgPaintServerSharedPtr m_paintServer;
500 QString m_paintStyleId;
501 uint m_vectorEffect : 1;
502 uint m_oldVectorEffect : 1;
504 uint m_strokeSet : 1;
505 uint m_strokeDashArraySet : 1;
506 uint m_strokeDashOffsetSet : 1;
507 uint m_strokeLineCapSet : 1;
508 uint m_strokeLineJoinSet : 1;
509 uint m_strokeMiterLimitSet : 1;
510 uint m_strokeOpacitySet : 1;
511 uint m_strokeWidthSet : 1;
512 uint m_vectorEffectSet : 1;
518 QSvgTransformStyle(
const QTransform &transform);
519 ~QSvgTransformStyle() override;
521 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
522 void revert(QPainter *p, QSvgExtraStates &states) override;
523 Type type()
const override;
525 const QTransform & qtransform()
const
529 bool isDefault()
const {
return m_transform.isIdentity(); }
532 QTransform m_transform;
533 QStack<QTransform> m_oldWorldTransform;
539 QSvgCompOpStyle(QPainter::CompositionMode mode);
540 ~QSvgCompOpStyle() override;
542 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
543 void revert(QPainter *p, QSvgExtraStates &states) override;
544 Type type()
const override;
546 const QPainter::CompositionMode & compOp()
const
552 QPainter::CompositionMode m_mode;
554 QPainter::CompositionMode m_oldMode{QPainter::CompositionMode_SourceOver};
560 QSvgOffsetStyle() =
default;
561 ~QSvgOffsetStyle() override;
563 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
564 void revert(QPainter *p, QSvgExtraStates &states) override;
565 Type type()
const override;
567 void setPath(
const QPainterPath &path)
572 const QPainterPath &path()
const
577 void setRotateAngle(qreal angle)
579 m_rotateAngle = angle;
582 qreal rotateAngle()
const
584 return m_rotateAngle;
587 void setRotateType(QtSvg::OffsetRotateType type)
592 QtSvg::OffsetRotateType rotateType()
const
597 void setDistance(qreal distance)
599 m_distance = distance;
602 qreal distance()
const
609 qreal m_distance{0.};
610 qreal m_rotateAngle{0.};
611 QtSvg::OffsetRotateType m_rotateType{QtSvg::OffsetRotateType::Auto};
620 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
621 void revert(QPainter *p, QSvgExtraStates &states);
622 QSvgRefCounter<QSvgQualityStyle> quality;
623 QSvgRefCounter<QSvgFillStyle> fill;
624 QSvgRefCounter<QSvgViewportFillStyle> viewportFill;
625 QSvgRefCounter<QSvgFontStyle> font;
626 QSvgRefCounter<QSvgStrokeStyle> stroke;
627 QSvgRefCounter<QSvgTransformStyle> transform;
628 QSvgRefCounter<QSvgOpacityStyle> opacity;
629 QSvgRefCounter<QSvgCompOpStyle> compop;
630 QSvgRefCounter<QSvgOffsetStyle> offset;
653 ~QSvgAnimatedStyle();
655 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
656 void revert(QPainter *p, QSvgExtraStates &states);
659 void savePaintingState(
const QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
660 void fetchStyleState(
const QSvgAbstractAnimation *animation, QSvgStyleState ¤tStyle);
661 void applyStyle(QPainter *p, QSvgExtraStates &states,
const QSvgStyleState ¤tStyle);
664 QTransform m_worldTransform;
665 QTransform m_transformToNode;
666 QSvgStyleState m_static;