diff --git a/src/Mod/TechDraw/Gui/QGCustomSvg.cpp b/src/Mod/TechDraw/Gui/QGCustomSvg.cpp index aa5153b62..0469e68b4 100644 --- a/src/Mod/TechDraw/Gui/QGCustomSvg.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomSvg.cpp @@ -26,6 +26,8 @@ #include #endif +#include + #include #include "QGCustomSvg.h" @@ -37,6 +39,7 @@ QGCustomSvg::QGCustomSvg() setAcceptHoverEvents(false); setFlag(QGraphicsItem::ItemIsSelectable, false); setFlag(QGraphicsItem::ItemIsMovable, false); + setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); m_svgRender = new QSvgRenderer(); } @@ -69,10 +72,20 @@ void QGCustomSvg::centerAt(double cX, double cY) bool QGCustomSvg::load(QByteArray *svgBytes) { bool success = m_svgRender->load(*svgBytes); + prepareGeometryChange(); setSharedRenderer(m_svgRender); return(success); } +QRectF QGCustomSvg::boundingRect() const +{ + QRectF box = m_svgRender->viewBoxF(); + double w = box.width(); + double h = box.height(); + QRectF newRect(0,0,w*scale(),h*scale()); + return newRect.adjusted(-1.,-1.,1.,1.); +} + void QGCustomSvg::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { QStyleOptionGraphicsItem myOption(*option); myOption.state &= ~QStyle::State_Selected; diff --git a/src/Mod/TechDraw/Gui/QGCustomSvg.h b/src/Mod/TechDraw/Gui/QGCustomSvg.h index 9a600cb12..f28073c88 100644 --- a/src/Mod/TechDraw/Gui/QGCustomSvg.h +++ b/src/Mod/TechDraw/Gui/QGCustomSvg.h @@ -50,6 +50,7 @@ public: virtual void centerAt(QPointF centerPos); virtual void centerAt(double cX, double cY); virtual bool load(QByteArray *svgString); + virtual QRectF boundingRect(void) const override; protected: QSvgRenderer *m_svgRender; diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index e31738865..b3252e30b 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -290,7 +290,6 @@ void QGIView::draw() void QGIView::drawBorder() { - prepareGeometryChange(); if (!borderVisible) { m_label.hide(); m_border.hide(); @@ -332,6 +331,7 @@ void QGIView::drawBorder() displayArea.top(), frameWidth, frameHeight); + prepareGeometryChange(); m_border.setRect(frameArea); m_border.setPos(0.,0.); diff --git a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp index cd103c1a8..e4695fb4d 100644 --- a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp @@ -31,9 +31,10 @@ #include #include #include +#include #endif -#include +//#include #include #include @@ -54,6 +55,7 @@ QGIViewSymbol::QGIViewSymbol() setAcceptHoverEvents(true); setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); m_svgItem = new QGCustomSvg(); addToGroup(m_svgItem); @@ -103,10 +105,6 @@ void QGIViewSymbol::draw() return; } -//note: svg's are overscaled by (72 pixels(pts actually) /in)*(1 in/25.4 mm) = 2.834645669 (could be 96/25.4(CSS)? 110/25.4?) -//due to 1 sceneUnit (1mm) = 1 pixel for some QtSvg functions - TechDraw::DrawViewSymbol *viewSymbol = dynamic_cast(getViewObject()); - setScale(viewSymbol->Scale.getValue()); drawSvg(); if (borderVisible) { drawBorder(); @@ -119,9 +117,12 @@ void QGIViewSymbol::drawSvg() return; TechDraw::DrawViewSymbol *viewSymbol = dynamic_cast(getViewObject()); +//note: svg's are overscaled by (72 pixels(pts actually) /in)*(1 in/25.4 mm) = 2.834645669 (could be 96/25.4(CSS)? 110/25.4?) +//due to 1 sceneUnit (1mm) = 1 pixel for some QtSvg functions + + m_svgItem->setScale(viewSymbol->Scale.getValue()); QString qs(QString::fromUtf8(viewSymbol->Symbol.getValue())); - symbolToSvg(qs); } @@ -133,9 +134,9 @@ void QGIViewSymbol::symbolToSvg(QString qs) QByteArray qba; qba.append(qs); + prepareGeometryChange(); if (!m_svgItem->load(&qba)) { Base::Console().Error("Error - Could not load Symbol into SVG renderer for %s\n", getViewObject()->getNameInDocument()); } m_svgItem->setPos(0.,0.); } -