155 virtual QBrush brush(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) = 0;
156 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
157 void revert(QPainter *p, QSvgExtraStates &states) override;
163 enum ImageRendering: qint8 {
164 ImageRenderingAuto = 0,
165 ImageRenderingOptimizeSpeed = 1,
166 ImageRenderingOptimizeQuality = 2,
169 QSvgQualityStyle(
int color);
170 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
171 void revert(QPainter *p, QSvgExtraStates &states) override;
172 Type type()
const override;
174 void setImageRendering(ImageRendering);
195 qint32 m_imageRendering: 4;
196 qint32 m_oldImageRendering: 4;
197 quint32 m_imageRenderingSet: 1;
205 QSvgOpacityStyle(qreal opacity);
206 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
207 void revert(QPainter *p, QSvgExtraStates &states) override;
208 Type type()
const override;
209 qreal opacity()
const {
return m_opacity; }
210 bool isDefault()
const {
return qFuzzyCompare(m_opacity, qreal(1.0)); }
221 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
222 void revert(QPainter *p, QSvgExtraStates &states) override;
223 Type type()
const override;
225 void setFillRule(Qt::FillRule f);
226 void setFillOpacity(qreal opacity);
227 void setFillStyle(QSvgPaintStyleProperty* style);
228 void setBrush(QBrush brush);
230 const QBrush & qbrush()
const
235 qreal fillOpacity()
const
237 return m_fillOpacity;
240 Qt::FillRule fillRule()
const
245 QSvgPaintStyleProperty* style()
const
250 void setPaintStyleId(
const QString &Id)
255 QString paintStyleId()
const
257 return m_paintStyleId;
260 void setPaintStyleResolved(
bool resolved)
262 m_paintStyleResolved = resolved;
265 bool isPaintStyleResolved()
const
267 return m_paintStyleResolved;
275 QSvgPaintStyleProperty *m_style;
277 Qt::FillRule m_fillRule;
278 Qt::FillRule m_oldFillRule;
280 qreal m_oldFillOpacity;
282 QString m_paintStyleId;
283 uint m_paintStyleResolved : 1;
285 uint m_fillRuleSet : 1;
286 uint m_fillOpacitySet : 1;
313 static const int LIGHTER = -1;
314 static const int BOLDER = 1;
316 QSvgFontStyle(QSvgFont *font, QSvgTinyDocument *doc);
318 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
319 void revert(QPainter *p, QSvgExtraStates &states) override;
320 Type type()
const override;
322 void setSize(qreal size)
326 m_qfont.setPointSizeF(size);
330 void setTextAnchor(Qt::Alignment anchor)
332 m_textAnchor = anchor;
336 void setFamily(
const QString &family)
338 m_qfont.setFamilies({family});
342 void setStyle(QFont::Style fontStyle) {
343 m_qfont.setStyle(fontStyle);
347 void setVariant(QFont::Capitalization fontVariant)
349 m_qfont.setCapitalization(fontVariant);
353 void setWeight(
int weight)
359 QSvgFont * svgFont()
const
364 const QFont &qfont()
const
369 QSvgTinyDocument *doc()
const {
return m_doc;}
373 QSvgTinyDocument *m_doc;
377 Qt::Alignment m_textAnchor;
379 QSvgFont *m_oldSvgFont;
381 Qt::Alignment m_oldTextAnchor;
384 uint m_familySet : 1;
387 uint m_variantSet : 1;
388 uint m_weightSet : 1;
389 uint m_textAnchorSet : 1;
396 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
397 void revert(QPainter *p, QSvgExtraStates &states) override;
398 Type type()
const override;
400 void setStroke(QBrush brush)
402 m_stroke.setBrush(brush);
407 void setStyle(QSvgPaintStyleProperty *style)
413 void setDashArray(
const QList<qreal> &dashes);
415 void setDashArrayNone()
417 m_stroke.setStyle(Qt::SolidLine);
418 m_strokeDashArraySet = 1;
421 void setDashOffset(qreal offset)
423 m_strokeDashOffset = offset;
424 m_strokeDashOffsetSet = 1;
427 void setLineCap(Qt::PenCapStyle cap)
429 m_stroke.setCapStyle(cap);
430 m_strokeLineCapSet = 1;
433 void setLineJoin(Qt::PenJoinStyle join)
435 m_stroke.setJoinStyle(join);
436 m_strokeLineJoinSet = 1;
439 void setMiterLimit(qreal limit)
441 m_stroke.setMiterLimit(limit);
442 m_strokeMiterLimitSet = 1;
445 void setOpacity(qreal opacity)
447 m_strokeOpacity = opacity;
448 m_strokeOpacitySet = 1;
451 void setWidth(qreal width)
453 m_stroke.setWidthF(width);
454 m_strokeWidthSet = 1;
455 Q_ASSERT(!m_strokeDashArraySet);
460 return m_stroke.widthF();
463 void setVectorEffect(
bool nonScalingStroke)
465 m_vectorEffect = nonScalingStroke;
466 m_vectorEffectSet = 1;
469 QSvgPaintStyleProperty* style()
const
474 void setPaintStyleId(
const QString &Id)
479 QString paintStyleId()
const
481 return m_paintStyleId;
484 void setPaintStyleResolved(
bool resolved)
486 m_paintStyleResolved = resolved;
489 bool isPaintStyleResolved()
const
491 return m_paintStyleResolved;
510 qreal m_strokeOpacity;
511 qreal m_oldStrokeOpacity;
512 qreal m_strokeDashOffset;
513 qreal m_oldStrokeDashOffset;
515 QSvgPaintStyleProperty *m_style;
516 QString m_paintStyleId;
517 uint m_paintStyleResolved : 1;
518 uint m_vectorEffect : 1;
519 uint m_oldVectorEffect : 1;
521 uint m_strokeSet : 1;
522 uint m_strokeDashArraySet : 1;
523 uint m_strokeDashOffsetSet : 1;
524 uint m_strokeLineCapSet : 1;
525 uint m_strokeLineJoinSet : 1;
526 uint m_strokeMiterLimitSet : 1;
527 uint m_strokeOpacitySet : 1;
528 uint m_strokeWidthSet : 1;
529 uint m_vectorEffectSet : 1;
560 QSvgGradientStyle(QGradient *grad);
561 ~QSvgGradientStyle() {
delete m_gradient; }
562 Type type()
const override;
564 void setStopLink(
const QString &link, QSvgTinyDocument *doc);
565 QString stopLink()
const {
return m_link; }
567 void resolveStops_helper(QStringList *visited);
569 void setTransform(
const QTransform &transform);
570 QTransform qtransform()
const
575 QGradient *qgradient()
const
580 bool gradientStopsSet()
const
582 return m_gradientStopsSet;
585 void setGradientStopsSet(
bool set)
587 m_gradientStopsSet = set;
590 QBrush brush(QPainter *,
const QSvgNode *, QSvgExtraStates &) override;
592 QGradient *m_gradient;
593 QTransform m_transform;
595 QSvgTinyDocument *m_doc;
597 bool m_gradientStopsSet;
618 QSvgTransformStyle(
const QTransform &transform);
619 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
620 void revert(QPainter *p, QSvgExtraStates &states) override;
621 Type type()
const override;
623 const QTransform & qtransform()
const
627 bool isDefault()
const {
return m_transform.isIdentity(); }
630 QTransform m_transform;
631 QStack<QTransform> m_oldWorldTransform;
637 QSvgCompOpStyle(QPainter::CompositionMode mode);
638 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states) override;
639 void revert(QPainter *p, QSvgExtraStates &states) override;
640 Type type()
const override;
642 const QPainter::CompositionMode & compOp()
const
648 QPainter::CompositionMode m_mode;
650 QPainter::CompositionMode m_oldMode;
714 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
715 void revert(QPainter *p, QSvgExtraStates &states);
716 QSvgRefCounter<QSvgQualityStyle> quality;
717 QSvgRefCounter<QSvgFillStyle> fill;
718 QSvgRefCounter<QSvgViewportFillStyle> viewportFill;
719 QSvgRefCounter<QSvgFontStyle> font;
720 QSvgRefCounter<QSvgStrokeStyle> stroke;
721 QSvgRefCounter<QSvgSolidColorStyle> solidColor;
722 QSvgRefCounter<QSvgGradientStyle> gradient;
723 QSvgRefCounter<QSvgPatternStyle> pattern;
724 QSvgRefCounter<QSvgTransformStyle> transform;
725 QSvgRefCounter<QSvgOpacityStyle> opacity;
726 QSvgRefCounter<QSvgCompOpStyle> compop;
727 QSvgRefCounter<QSvgOffsetStyle> offset;
750 ~QSvgAnimatedStyle();
752 void apply(QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
753 void revert(QPainter *p, QSvgExtraStates &states);
756 void savePaintingState(
const QPainter *p,
const QSvgNode *node, QSvgExtraStates &states);
757 void fetchStyleState(
const QSvgAbstractAnimation *animation, QSvgStyleState ¤tStyle);
758 void applyStyle(QPainter *p, QSvgExtraStates &states,
const QSvgStyleState ¤tStyle);
761 QTransform m_worldTransform;
762 QTransform m_transformToNode;
763 QSvgStyleState m_static;