From f33838f1876dfdd8c66cc8711eb6ea29085f0d76 Mon Sep 17 00:00:00 2001 From: jkriege2 Date: Thu, 2 Jun 2022 23:05:58 +0200 Subject: [PATCH] added debug-feature to show boxes around text in the plot --- doc/dox/whatsnew.dox | 1 + doc/images/debugShowRegionBoxes.png | Bin 0 -> 75377 bytes doc/images/debugShowTextBoxes.png | Bin 0 -> 16193 bytes examples/styling/test_styling.cpp | 1 + examples/styling/test_styling.ui | 9 +++- .../graphs/jkqtpgeoannotations.cpp | 2 +- lib/jkqtplotter/jkqtpbaseplotter.cpp | 21 ++++++-- lib/jkqtplotter/jkqtpbaseplotter.h | 20 ++++++++ lib/jkqtplotter/jkqtpbaseplotterstyle.cpp | 6 +++ lib/jkqtplotter/jkqtpbaseplotterstyle.h | 14 ++++- lib/jkqtplotter/jkqtpcoordinateaxes.cpp | 48 +++++++++--------- lib/jkqtplotter/jkqtpimagetools.cpp | 8 +-- lib/jkqtplotter/jkqtplotter.cpp | 14 ++--- 13 files changed, 102 insertions(+), 42 deletions(-) create mode 100644 doc/images/debugShowRegionBoxes.png create mode 100644 doc/images/debugShowTextBoxes.png diff --git a/doc/dox/whatsnew.dox b/doc/dox/whatsnew.dox index 1e10d8746d..65fb766966 100644 --- a/doc/dox/whatsnew.dox +++ b/doc/dox/whatsnew.dox @@ -23,6 +23,7 @@ Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
  • NEW/BREAKING CHANGE: data tooltip can now also be shown when "just" moving the mouse (so far this was only possible when dragging the mouse with a button pressed). This also removes JKQtPlotter::getActMouseLeftAsToolTip() and adds JKQtPlotter::getActMouseMoveToolTip() instead! Also the default toolbars and context menus changed!
  • NEW: new "seaborn" style for plots
  • NEW/BREAKING CHANGE: changed JKQTPColorDerivationMode into a struct, which extends its capabilities above the previously available few enum-items
  • +
  • NEW: added debug-feature to show boxes around text in the plot
  • \subsection page_whatsnew_TRUNK_DOWNLOAD trunk: Download diff --git a/doc/images/debugShowRegionBoxes.png b/doc/images/debugShowRegionBoxes.png new file mode 100644 index 0000000000000000000000000000000000000000..a14a82dc42e43e7f57bc1ccf2405fb76b4b5593b GIT binary patch literal 75377 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 literal 0 HcmV?d00001 diff --git a/doc/images/debugShowTextBoxes.png b/doc/images/debugShowTextBoxes.png new file mode 100644 index 0000000000000000000000000000000000000000..a6be185a71e5ad70db0bb705e7c07493ef14a9fc GIT binary patch literal 16193 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 S9QeW=OchkLogX, SIGNAL(toggled(bool)), ui->plot->getXAxis(), SLOT(setLogAxis(bool))); connect(ui->chkLogY, SIGNAL(toggled(bool)), ui->plot->getYAxis(), SLOT(setLogAxis(bool))); connect(ui->chkDebugBoxes, SIGNAL(toggled(bool)), ui->plot->getPlotter(), SLOT(enableDebugShowRegionBoxes(bool))); + connect(ui->chkDebugTextBoxes, SIGNAL(toggled(bool)), ui->plot->getPlotter(), SLOT(enableDebugShowTextBoxes(bool))); // store JKQTPlotter plotterStyle to a temporary INI-file // and then load that temporary file into the plainTextEdit, diff --git a/examples/styling/test_styling.ui b/examples/styling/test_styling.ui index 840d7f0377..75e8f92fda 100644 --- a/examples/styling/test_styling.ui +++ b/examples/styling/test_styling.ui @@ -40,7 +40,14 @@ - enabled + regions + + + + + + + text diff --git a/lib/jkqtplotter/graphs/jkqtpgeoannotations.cpp b/lib/jkqtplotter/graphs/jkqtpgeoannotations.cpp index 9e9a7a7f18..1c37f4595b 100644 --- a/lib/jkqtplotter/graphs/jkqtpgeoannotations.cpp +++ b/lib/jkqtplotter/graphs/jkqtpgeoannotations.cpp @@ -130,7 +130,7 @@ void JKQTPGeoText::draw(JKQTPEnhancedPainter& painter) { parent->getMathText()->setFontSize(getTextFontSize()*parent->getFontSizeMultiplier()); parent->getMathText()->setFontColor(getTextColor()); parent->getMathText()->parse(text); - parent->getMathText()->draw(painter, transformX(x), transformY(y)); + parent->getMathText()->draw(painter, transformX(x), transformY(y), parent->getCurrentPlotterStyle().debugShowTextBoxes); } diff --git a/lib/jkqtplotter/jkqtpbaseplotter.cpp b/lib/jkqtplotter/jkqtpbaseplotter.cpp index 162e99d2dc..241c77d67a 100644 --- a/lib/jkqtplotter/jkqtpbaseplotter.cpp +++ b/lib/jkqtplotter/jkqtpbaseplotter.cpp @@ -1271,7 +1271,7 @@ void JKQTBasePlotter::drawPlot(JKQTPEnhancedPainter& painter) { double a=0,d=0,so=0,w=0; getTextSizeDetail(plotterStyle.plotLabelFontName,plotterStyle.plotLabelFontSize*fontSizeMultiplier,plotLabel, painter, w, a, d, so); QSizeF s=QSizeF(w, a+d); - mathText.draw(painter, internalPlotBorderLeft+(internalPlotWidth-s.width())/2.0,plotterStyle.plotBorderTop+a*1.2); + mathText.draw(painter, internalPlotBorderLeft+(internalPlotWidth-s.width())/2.0,plotterStyle.plotBorderTop+a*1.2, plotterStyle.debugShowTextBoxes); if (plotterStyle.debugShowRegionBoxes) { painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); QPen p("blue"); @@ -3134,11 +3134,24 @@ void JKQTBasePlotter::enableDebugShowRegionBoxes(bool enabled) } } +void JKQTBasePlotter::enableDebugShowTextBoxes(bool enabled) +{ + if (plotterStyle.debugShowTextBoxes != enabled) { + plotterStyle.debugShowTextBoxes = enabled; + redrawPlot(); + } +} + bool JKQTBasePlotter::isDebugShowRegionBoxesEnabled() const { return plotterStyle.debugShowRegionBoxes; } +bool JKQTBasePlotter::isDebugShowTextBoxesEnabled() const +{ + return plotterStyle.debugShowTextBoxes; +} + QString JKQTBasePlotter::getCSVcommentInitializer() const { return plotterStyle.CSVcommentInitializer; @@ -4157,7 +4170,7 @@ void JKQTBasePlotter::drawKeyContents(JKQTPEnhancedPainter& painter, double x, d mathText.parse(g->getTitle()); QRectF txtRect(x+(plotterStyle.keyStyle.sampleLineLength+plotterStyle.keyStyle.xSeparation)*Xwid,y, key_text_width, itheight); - mathText.draw(painter, Qt::AlignLeft|Qt::AlignVCenter, txtRect); + mathText.draw(painter, Qt::AlignLeft|Qt::AlignVCenter, txtRect, plotterStyle.debugShowTextBoxes); //if (itheightgetTitle()); QRectF txtRect(x+(plotterStyle.keyStyle.sampleLineLength+plotterStyle.keyStyle.xSeparation)*Xwid,y, fs.width(), itheight); - mathText.draw(painter, Qt::AlignLeft|Qt::AlignVCenter, txtRect); + mathText.draw(painter, Qt::AlignLeft|Qt::AlignVCenter, txtRect, plotterStyle.debugShowTextBoxes); if (plotterStyle.debugShowRegionBoxes) { painter.save(); auto __finalpaintinner=JKQTPFinally([&painter]() {painter.restore();}); QPen p("orange"); @@ -4243,7 +4256,7 @@ void JKQTBasePlotter::drawKeyContents(JKQTPEnhancedPainter& painter, double x, d mathText.parse(g->getTitle()); //QSizeF fs=mt.getSize(painter); QRectF txtRect(xx+(plotterStyle.keyStyle.sampleLineLength+plotterStyle.keyStyle.xSeparation)*Xwid,yy, key_text_width, key_text_height); - mathText.draw(painter, Qt::AlignLeft|Qt::AlignVCenter, txtRect); + mathText.draw(painter, Qt::AlignLeft|Qt::AlignVCenter, txtRect, plotterStyle.debugShowTextBoxes); if (plotterStyle.debugShowRegionBoxes) { painter.save(); auto __finalpaintinner=JKQTPFinally([&painter]() {painter.restore();}); diff --git a/lib/jkqtplotter/jkqtpbaseplotter.h b/lib/jkqtplotter/jkqtpbaseplotter.h index 71994ef088..f42c8b0177 100644 --- a/lib/jkqtplotter/jkqtpbaseplotter.h +++ b/lib/jkqtplotter/jkqtpbaseplotter.h @@ -736,10 +736,20 @@ class JKQTPLOTTER_LIB_EXPORT JKQTBasePlotter: public QObject { /** \copydoc JKQTBasePlotterStyle::defaultFontName */ QString getDefaultTextFontName() const; /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the different regions in the plot (border, axes, ...) + * + * + * \image html debugShowRegionBoxes.png * * \see JKQTBasePlotterStyle::debugShowRegionBoxes, enableDebugShowRegionBoxes() */ bool isDebugShowRegionBoxesEnabled() const; + /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the extent of text + * + * \image html debugShowTextBoxes.png + * + * \see JKQTBasePlotterStyle::debugShowTextBoxes, enableDebugShowTextBoxes() + */ + bool isDebugShowTextBoxesEnabled() const; /** \copydoc JKQTBasePlotterStyle::plotFrameVisible */ bool isPlotFrameVisible() const; /** \copydoc JKQTBasePlotterStyle::plotFrameColor */ @@ -1570,10 +1580,20 @@ class JKQTPLOTTER_LIB_EXPORT JKQTBasePlotter: public QObject { void setCSVcommentInitializer(const QString & __value); /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the different regions in the plot (border, axes, ...) + * + * \image html debugShowRegionBoxes.png * * \see JKQTBasePlotterStyle::debugShowRegionBoxes, isDebugShowRegionBoxesEnabled() */ void enableDebugShowRegionBoxes(bool enabled=true); + + /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the extent of text in the plot + * + * \image html debugShowTextBoxes.png + * + * \see JKQTBasePlotterStyle::debugShowTextBoxes, isDebugShowRegionTextEnabled() + */ + void enableDebugShowTextBoxes(bool enabled=true); protected: /** \brief this is a cache for JKQTBasePlotter::textSizeData calculated with JKQTBasePlotter::getTextSizeDetail() */ static QHash s_TextSizeDataCache; diff --git a/lib/jkqtplotter/jkqtpbaseplotterstyle.cpp b/lib/jkqtplotter/jkqtpbaseplotterstyle.cpp index dc4d68f4b8..1d4b199b91 100644 --- a/lib/jkqtplotter/jkqtpbaseplotterstyle.cpp +++ b/lib/jkqtplotter/jkqtpbaseplotterstyle.cpp @@ -6,6 +6,8 @@ JKQTBasePlotterStyle::JKQTBasePlotterStyle(): debugShowRegionBoxes(false), debugRegionLineWidth(3), + debugShowTextBoxes(false), + debugTextBoxLineWidth(1), CSVdecimalSeparator("."), CSVcommentInitializer("# "), plotBorderTop(5), @@ -45,6 +47,8 @@ void JKQTBasePlotterStyle::loadSettings(const QSettings &settings, const QString plotBorderBottom=settings.value(group+"plot_border_bottom", defaultStyle.plotBorderBottom).toInt(); debugShowRegionBoxes=settings.value(group+"debug_show_region_boxes", defaultStyle.debugShowRegionBoxes).toBool(); debugRegionLineWidth=settings.value(group+"debug_region_linewidth", defaultStyle.debugRegionLineWidth).toDouble(); + debugShowTextBoxes=settings.value(group+"debug_show_text_boxes", defaultStyle.debugShowTextBoxes).toBool(); + debugTextBoxLineWidth=settings.value(group+"debug_textbox_linewidth", defaultStyle.debugTextBoxLineWidth).toDouble(); plotLabelFontName=settings.value(group+"plot_label_font_name", defaultStyle.plotLabelFontName).toString(); plotLabelFontSize=settings.value(group+"plot_label_font_size", defaultStyle.plotLabelFontSize).toDouble(); widgetBackgroundBrush=QBrush(jkqtp_String2QColor(settings.value(group+"widget_background_color", jkqtp_QColor2String(defaultStyle.widgetBackgroundBrush.color())).toString())); @@ -77,6 +81,8 @@ void JKQTBasePlotterStyle::saveSettings(QSettings &settings, const QString &grou settings.setValue(group+"csv_comment_initializer", CSVcommentInitializer); settings.setValue(group+"debug_show_region_boxes", debugShowRegionBoxes); settings.setValue(group+"debug_region_linewidth", debugRegionLineWidth); + settings.setValue(group+"debug_textbox_linewidth", debugShowTextBoxes); + settings.setValue(group+"debug_region_linewidth", debugTextBoxLineWidth); settings.setValue(group+"antialiase_system", useAntiAliasingForSystem); settings.setValue(group+"antialiase_text", useAntiAliasingForText); settings.setValue(group+"widget_background_color", jkqtp_QColor2String(widgetBackgroundBrush.color())); diff --git a/lib/jkqtplotter/jkqtpbaseplotterstyle.h b/lib/jkqtplotter/jkqtpbaseplotterstyle.h index 9aa463888d..530ac584a4 100644 --- a/lib/jkqtplotter/jkqtpbaseplotterstyle.h +++ b/lib/jkqtplotter/jkqtpbaseplotterstyle.h @@ -66,10 +66,22 @@ class JKQTPLOTTER_LIB_EXPORT JKQTBasePlotterStyle { */ void saveSettings(QSettings& settings, const QString& group=QString("plots/")) const; - /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the different regions in the plot (border, axes, ...) */ + /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the different regions in the plot (border, axes, ...) + * + * \image html debugShowRegionBoxes.png + * + */ bool debugShowRegionBoxes; /** \brief width of the lines that are drawn, when debugShowRegionBoxes \c ==true [in pixels] */ double debugRegionLineWidth; + /** \brief if set \c true (default: \c false ) the JKQTBasePlotter draws colored rectangles to indicate the outline etc. of text inside the plot + * + * \image html debugShowTextBoxes.png + * + */ + bool debugShowTextBoxes; + /** \brief width of the lines that are drawn, when debugShowTextBoxes \c ==true [in pixels] */ + double debugTextBoxLineWidth; /** \brief the decimal separator used when exporting data to text files */ diff --git a/lib/jkqtplotter/jkqtpcoordinateaxes.cpp b/lib/jkqtplotter/jkqtpcoordinateaxes.cpp index c89fd6b964..443d7f9e46 100644 --- a/lib/jkqtplotter/jkqtpcoordinateaxes.cpp +++ b/lib/jkqtplotter/jkqtpcoordinateaxes.cpp @@ -1225,13 +1225,13 @@ void JKQTPVerticalAxis::drawTickLabel1(JKQTPEnhancedPainter &painter, double xx, painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); painter.translate(lx+width-1.25*strikeoutPos, yy-width/2.0); painter.rotate(axisStyle.tickLabelAngle); - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else if (axisStyle.tickLabelAngle==-90) { painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); painter.translate(lx+width-0.25*strikeoutPos, yy+width/2.0); painter.rotate(axisStyle.tickLabelAngle); - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else if (axisStyle.tickLabelAngle!=0) { painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); @@ -1242,10 +1242,10 @@ void JKQTPVerticalAxis::drawTickLabel1(JKQTPEnhancedPainter &painter, double xx, painter.translate(lx+strikeoutPos+(width-strikeoutPos)*(1.0-cos(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI)), yy+strikeoutPos+width*sin(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI)); painter.rotate(axisStyle.tickLabelAngle); } - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else { - getParentMathText()->draw(painter, lx, yy+strikeoutPos); + getParentMathText()->draw(painter, lx, yy+strikeoutPos, parent->getCurrentPlotterStyle().debugShowTextBoxes); } } } @@ -1266,13 +1266,13 @@ void JKQTPVerticalAxis::drawTickLabel2(JKQTPEnhancedPainter &painter, double xx, painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); painter.translate(lx+descent, yy-width/2.0); painter.rotate(axisStyle.tickLabelAngle); - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else if (axisStyle.tickLabelAngle==-90) { painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); painter.translate(lx+ascent, yy+width/2.0); painter.rotate(axisStyle.tickLabelAngle); - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else if (axisStyle.tickLabelAngle!=0) { painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); @@ -1284,10 +1284,10 @@ void JKQTPVerticalAxis::drawTickLabel2(JKQTPEnhancedPainter &painter, double xx, } painter.translate(lx+shiftx, yy+strikeoutPos); painter.rotate(-axisStyle.tickLabelAngle); - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else { - getParentMathText()->draw(painter, lx, yy+strikeoutPos); + getParentMathText()->draw(painter, lx, yy+strikeoutPos, parent->getCurrentPlotterStyle().debugShowTextBoxes); } } } @@ -1539,13 +1539,13 @@ void JKQTPVerticalAxis::drawAxes(JKQTPEnhancedPainter& painter) { //painter.drawEllipse(-4, -4, 8, 8); switch(axisStyle.labelPosition) { case JKQTPLabelMax: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelMin: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelCenter: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; } if (getParent()->getCurrentPlotterStyle().debugShowRegionBoxes) { @@ -1579,13 +1579,13 @@ void JKQTPVerticalAxis::drawAxes(JKQTPEnhancedPainter& painter) { //painter.drawEllipse(-4, -4, 8, 8); switch(axisStyle.labelPosition) { case JKQTPLabelMax: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelMin: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelCenter: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; } if (getParent()->getCurrentPlotterStyle().debugShowRegionBoxes) { @@ -1864,10 +1864,10 @@ void JKQTPHorizontalAxis::drawTickLabel1(JKQTPEnhancedPainter &painter, double x painter.translate(xx+fabs(ascent*sin(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI)/2.0)-width*fabs(cos(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI)), lx0+ascent*fabs(cos(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI))+fabs(width*sin(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI))); painter.rotate(axisStyle.tickLabelAngle); } - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else { - getParentMathText()->draw(painter, xx-width/2.0, lx); + getParentMathText()->draw(painter, xx-width/2.0, lx, parent->getCurrentPlotterStyle().debugShowTextBoxes); } } } @@ -1894,10 +1894,10 @@ void JKQTPHorizontalAxis::drawTickLabel2(JKQTPEnhancedPainter &painter, double x painter.translate(xx-fabs(descent*sin(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI)/2.0)-width*fabs(cos(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI)), lx0-descent*fabs(cos(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI))-fabs(width*sin(fabs(axisStyle.tickLabelAngle)/180.0*JKQTPSTATISTICS_PI))); painter.rotate(-axisStyle.tickLabelAngle); } - getParentMathText()->draw(painter, 0,0); + getParentMathText()->draw(painter, 0,0, parent->getCurrentPlotterStyle().debugShowTextBoxes); } else { - getParentMathText()->draw(painter, xx-width/2.0, lx); + getParentMathText()->draw(painter, xx-width/2.0, lx, parent->getCurrentPlotterStyle().debugShowTextBoxes); } @@ -2135,13 +2135,13 @@ void JKQTPHorizontalAxis::drawAxes(JKQTPEnhancedPainter& painter) { //painter.drawEllipse(-4, -4, 8, 8); switch(axisStyle.labelPosition) { case JKQTPLabelMax: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelMin: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelCenter: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; } if (getParent()->getCurrentPlotterStyle().debugShowRegionBoxes) { @@ -2174,13 +2174,13 @@ void JKQTPHorizontalAxis::drawAxes(JKQTPEnhancedPainter& painter) { //painter.drawEllipse(-4, -4, 8, 8); switch(axisStyle.labelPosition) { case JKQTPLabelMax: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignRight, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelMin: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignLeft, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; case JKQTPLabelCenter: - getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect); + getParentMathText()->draw(painter, Qt::AlignBottom|Qt::AlignHCenter, rect, parent->getCurrentPlotterStyle().debugShowTextBoxes); break; } if (getParent()->getCurrentPlotterStyle().debugShowRegionBoxes) { diff --git a/lib/jkqtplotter/jkqtpimagetools.cpp b/lib/jkqtplotter/jkqtpimagetools.cpp index 9bfc29bcb7..de0ea809cb 100644 --- a/lib/jkqtplotter/jkqtpimagetools.cpp +++ b/lib/jkqtplotter/jkqtpimagetools.cpp @@ -156,7 +156,7 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa cbParent->getMathText()->setFontSize(imageNameFontSize*cbParent->getFontSizeMultiplier()); cbParent->getMathText()->setFontRomanOrSpecial(imageNameFontName); cbParent->getMathText()->parse(imageName); - cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(rightSpace.x(), rightSpace.y(), rightSpace.width(), (rightSpace.height()-barHeight)/2)); + cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(rightSpace.x(), rightSpace.y(), rightSpace.width(), (rightSpace.height()-barHeight)/2), cbParent->getCurrentPlotterStyle().debugShowTextBoxes); } @@ -215,7 +215,7 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa cbParent->getMathText()->setFontSize(imageNameFontSize*cbParent->getFontSizeMultiplier()); cbParent->getMathText()->setFontRomanOrSpecial(imageNameFontName); cbParent->getMathText()->parse(imageName); - cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(topSpace.right()-(topSpace.width()-barWidth)/2, topSpace.y(), (topSpace.width()-barWidth)/2, topSpace.height())); + cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(topSpace.right()-(topSpace.width()-barWidth)/2, topSpace.y(), (topSpace.width()-barWidth)/2, topSpace.height()), cbParent->getCurrentPlotterStyle().debugShowTextBoxes); } @@ -664,7 +664,7 @@ void JKQTPColorPaletteWithModifierStyleAndToolsMixin::cbDrawOutside(JKQTPEnhance cbParent->getMathText()->setFontSize(imageNameFontSize*cbParent->getFontSizeMultiplier()); cbParent->getMathText()->setFontRomanOrSpecial(cbParent->getCurrentPlotterStyle().defaultFontName); cbParent->getMathText()->parse(imageName); - cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(rightSpace.x(), rightSpace.y(), rightSpace.width(), (rightSpace.height()-barHeight)/2)); + cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(rightSpace.x(), rightSpace.y(), rightSpace.width(), (rightSpace.height()-barHeight)/2), cbParent->getCurrentPlotterStyle().debugShowTextBoxes); } @@ -717,7 +717,7 @@ void JKQTPColorPaletteWithModifierStyleAndToolsMixin::cbDrawOutside(JKQTPEnhance cbParent->getMathText()->setFontSize(imageNameFontSize*cbParent->getFontSizeMultiplier()); cbParent->getMathText()->setFontRomanOrSpecial(cbParent->getCurrentPlotterStyle().defaultFontName); cbParent->getMathText()->parse(imageName); - cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(topSpace.right()-(topSpace.width()-barWidth)/2, topSpace.y(), (topSpace.width()-barWidth)/2, topSpace.height())); + cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRectF(topSpace.right()-(topSpace.width()-barWidth)/2, topSpace.y(), (topSpace.width()-barWidth)/2, topSpace.height()), cbParent->getCurrentPlotterStyle().debugShowTextBoxes); } diff --git a/lib/jkqtplotter/jkqtplotter.cpp b/lib/jkqtplotter/jkqtplotter.cpp index 7dcefff22c..4e0fcfb0be 100644 --- a/lib/jkqtplotter/jkqtplotter.cpp +++ b/lib/jkqtplotter/jkqtplotter.cpp @@ -574,11 +574,11 @@ void JKQTPlotter::paintUserAction() { if (y1>y2) { QRectF rec((x1+x2)/2.0-w/2.0, y1+2, w, a+d); painter.fillRect(rec, plotterStyle.userActionOpaqueBrush); - getPlotter()->getMathText()->draw(painter, Qt::AlignTop, rec); + getPlotter()->getMathText()->draw(painter, Qt::AlignTop, rec, getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); } else { QRectF rec((x1+x2)/2.0-w/2.0, y1-2-a-d, w, a+d); painter.fillRect(rec, plotterStyle.userActionOpaqueBrush); - getPlotter()->getMathText()->draw(painter, Qt::AlignBottom, rec); + getPlotter()->getMathText()->draw(painter, Qt::AlignBottom, rec, getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); } txt=jkqtp_floattolatexqstr(dy, 3); @@ -588,11 +588,11 @@ void JKQTPlotter::paintUserAction() { if (x2>x1) { QRectF rec(x2+2, (y1+y2)/2.0-(a+d)/2.0, w, a+d); painter.fillRect(rec, plotterStyle.userActionOpaqueBrush); - getPlotter()->getMathText()->draw(painter, Qt::AlignVCenter|Qt::AlignLeft, rec); + getPlotter()->getMathText()->draw(painter, Qt::AlignVCenter|Qt::AlignLeft, rec, getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); } else { QRectF rec(x2-2-w, (y1+y2)/2.0-(a+d)/2.0, w, a+d); painter.fillRect(rec, plotterStyle.userActionOpaqueBrush); - getPlotter()->getMathText()->draw(painter, Qt::AlignVCenter|Qt::AlignRight, rec); + getPlotter()->getMathText()->draw(painter, Qt::AlignVCenter|Qt::AlignRight, rec, getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); } @@ -602,11 +602,11 @@ void JKQTPlotter::paintUserAction() { if (x2getMathText()->draw(painter,Qt::AlignTop|Qt::AlignLeft, rec); + getPlotter()->getMathText()->draw(painter,Qt::AlignTop|Qt::AlignLeft, rec, getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); } else { QRectF rec((x1+x2)/2.0-w, (y1+y2)/2.0-(a+d)/2.0, w, a+d); painter.fillRect(rec, plotterStyle.userActionOpaqueBrush); - getPlotter()->getMathText()->draw(painter,Qt::AlignTop|Qt::AlignRight, rec); + getPlotter()->getMathText()->draw(painter,Qt::AlignTop|Qt::AlignRight, rec, getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); } @@ -691,7 +691,7 @@ void JKQTPlotter::paintUserAction() { JKQTPDrawTooltip(painter, mouseDragMarkers[0].pos.x(), mouseDragMarkers[0].pos.y(), rall); for (int i=0; igetMathText()->parse(txts[i]); - getPlotter()->getMathText()->draw(painter, Qt::AlignTop|Qt::AlignLeft, rects[i]); + getPlotter()->getMathText()->draw(painter, Qt::AlignTop|Qt::AlignLeft, rects[i], getPlotter()->getCurrentPlotterStyle().debugShowTextBoxes); QStringList el=getPlotter()->getMathText()->getErrorList(); if (el.size()>0) { qDebug()<<"error parsing LaTeX string fo tooltip ("<