1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-01-19 04:02:09 +01:00

Added support for all paths scaling modes

This commit is contained in:
Martin Tůma 2023-05-19 01:30:54 +02:00
parent e351eb6370
commit 8a72b20af8
2 changed files with 25 additions and 3 deletions

View File

@ -154,6 +154,13 @@ void Style::area(QXmlStreamReader &reader, const QString &dir, qreal ratio,
return; return;
} }
} }
if (attr.hasAttribute("scale")) {
QString scale(attr.value("scale").toString());
if (scale == "all")
ri._scale = PathRender::Scale::All;
else if (scale == "none")
ri._scale = PathRender::Scale::None;
}
if (attr.hasAttribute("src")) if (attr.hasAttribute("src"))
file = resourcePath(attr.value("src").toString(), dir); file = resourcePath(attr.value("src").toString(), dir);
if (attr.hasAttribute("symbol-height")) { if (attr.hasAttribute("symbol-height")) {
@ -226,6 +233,13 @@ void Style::line(QXmlStreamReader &reader, const Rule &rule)
else if (join == "bevel") else if (join == "bevel")
ri._strokeJoin = Qt::BevelJoin; ri._strokeJoin = Qt::BevelJoin;
} }
if (attr.hasAttribute("scale")) {
QString scale(attr.value("scale").toString());
if (scale == "all")
ri._scale = PathRender::Scale::All;
else if (scale == "none")
ri._scale = PathRender::Scale::None;
}
if (attr.hasAttribute("curve")) { if (attr.hasAttribute("curve")) {
QString curve(attr.value("curve").toString()); QString curve(attr.value("curve").toString());
if (curve == "cubic") if (curve == "cubic")
@ -656,14 +670,18 @@ QList<const Style::Symbol*> Style::areaSymbols(int zoom) const
QPen Style::PathRender::pen(int zoom) const QPen Style::PathRender::pen(int zoom) const
{ {
if (_strokeColor.isValid()) { if (_strokeColor.isValid()) {
qreal width = (zoom >= 12) qreal width = (_scale > None && zoom >= 12)
? pow(1.5, zoom - 12) * _strokeWidth : _strokeWidth; ? pow(1.5, zoom - 12) * _strokeWidth : _strokeWidth;
QPen p(QBrush(_strokeColor), width, Qt::SolidLine, _strokeCap, QPen p(QBrush(_strokeColor), width, Qt::SolidLine, _strokeCap,
_strokeJoin); _strokeJoin);
if (!_strokeDasharray.isEmpty()) { if (!_strokeDasharray.isEmpty()) {
QVector<qreal>pattern(_strokeDasharray); QVector<qreal>pattern(_strokeDasharray);
for (int i = 0; i < _strokeDasharray.size(); i++) for (int i = 0; i < _strokeDasharray.size(); i++) {
if (_scale > Stroke && zoom >= 12)
pattern[i] = (pow(1.5, zoom - 12) * pattern[i]);
// QPainter pattern is specified in units of the pens width!
pattern[i] /= width; pattern[i] /= width;
}
p.setDashPattern(pattern); p.setDashPattern(pattern);
} }
return p; return p;

View File

@ -136,7 +136,8 @@ public:
public: public:
PathRender(const Rule &rule, int zOrder) : Render(rule), PathRender(const Rule &rule, int zOrder) : Render(rule),
_zOrder(zOrder), _strokeWidth(0), _strokeCap(Qt::RoundCap), _zOrder(zOrder), _strokeWidth(0), _strokeCap(Qt::RoundCap),
_strokeJoin(Qt::RoundJoin), _area(false), _curve(false) {} _strokeJoin(Qt::RoundJoin), _area(false), _curve(false),
_scale(Stroke) {}
int zOrder() const {return _zOrder;} int zOrder() const {return _zOrder;}
QPen pen(int zoom) const; QPen pen(int zoom) const;
@ -147,6 +148,8 @@ public:
private: private:
friend class Style; friend class Style;
enum Scale {None, Stroke, All};
int _zOrder; int _zOrder;
QColor _strokeColor; QColor _strokeColor;
qreal _strokeWidth; qreal _strokeWidth;
@ -155,6 +158,7 @@ public:
Qt::PenJoinStyle _strokeJoin; Qt::PenJoinStyle _strokeJoin;
QBrush _brush; QBrush _brush;
bool _area, _curve; bool _area, _curve;
Scale _scale;
}; };
class CircleRender : public Render class CircleRender : public Render