#ifndef FGCANVASELEMENT_H #define FGCANVASELEMENT_H #include #include #include #include #include class LocalProp; class FGCanvasPaintContext; class FGCanvasGroup; class FGCanvasElement : public QObject { Q_OBJECT public: explicit FGCanvasElement(FGCanvasGroup* pr, LocalProp* prop); void paint(FGCanvasPaintContext* context) const; QTransform combinedTransform() const; bool isVisible() const; int zIndex() const; const FGCanvasGroup* parentGroup() const; static bool isStyleProperty(QByteArray name); LocalProp* property() const; void setHighlighted(bool hilighted); bool isHighlighted() const; protected: virtual void doPaint(FGCanvasPaintContext* context) const; virtual bool onChildAdded(LocalProp* prop); virtual bool onChildRemoved(LocalProp* prop); const LocalProp* _propertyRoot; const FGCanvasGroup* _parent; QColor fillColor() const; QColor parseColorValue(QVariant value) const; virtual void markStyleDirty(); QVariant getCascadedStyle(const char* name, QVariant defaultValue = QVariant()) const; private: void onCenterChanged(QVariant value); void markTransformsDirty(); void markZIndexDirty(QVariant value); void onVisibleChanged(QVariant value); void markClipDirty(); private: friend class FGCanvasGroup; bool _visible = true; bool _highlighted = false; mutable bool _transformsDirty = true; mutable bool _styleDirty = true; mutable QTransform _combinedTransform; QPointF _center; mutable QColor _fillColor; int _zIndex = 0; QByteArray _svgElementId; mutable bool _clipDirty = true; mutable bool _hasClip = false; mutable QRectF _clipRect; void parseCSSClip(QByteArray value) const; float parseCSSValue(QByteArray value) const; }; using FGCanvasElementVec = std::vector; #endif // FGCANVASELEMENT_H