1
0
Fork 0
flightgear/utils/fgqcanvas/fgcanvaspath.h
James Turner 490592d96e Remote-canvas handles rects / round-rects directly.
When a rect shape is specified, paint it directly instead of converting
to a path, since this might be much cheaper.
2016-12-18 21:55:32 +00:00

49 lines
1.2 KiB
C++

#ifndef FGCANVASPATH_H
#define FGCANVASPATH_H
#include "fgcanvaselement.h"
#include <QPainterPath>
#include <QPen>
class FGCanvasPath : public FGCanvasElement
{
public:
FGCanvasPath(FGCanvasGroup* pr, LocalProp* prop);
protected:
virtual void doPaint(FGCanvasPaintContext* context) const override;
virtual void markStyleDirty() override;
private:
void markPathDirty();
void markStrokeDirty();
private:
bool onChildAdded(LocalProp *prop) override;
void rebuildPath() const;
void rebuildPen() const;
void rebuildPathFromCommands(const std::vector<int>& commands, const std::vector<float>& coords) const;
bool rebuildFromSVGData(std::vector<int>& commands, std::vector<float>& coords) const;
bool rebuildFromRect(std::vector<int> &commands, std::vector<float> &coords) const;
private:
enum PaintType
{
Path,
Rect,
RoundRect
};
mutable bool _pathDirty = true;
mutable QPainterPath _painterPath;
mutable bool _penDirty = true;
mutable QPen _stroke;
bool _isRect = false;
mutable PaintType _paintType = Path;
mutable QRectF _rect;
mutable QSizeF _roundRectRadius;
};
#endif // FGCANVASPATH_H