code cleanup: Removed Parameter prevNodeSize from JKQTMathTextNode::draw() and JKQTMathTextNode::getSize()/JKQTMathTextNode::getSizeInternal(), since it is only really necessary for JKQTMathTextSubscriptNode and JKQTMathTextSuperscriptNode
bugfixed possible crash in JKQTMathTextWhitespaceNode (QMap[n1]=QMap[n2]=something; does not work for some reason)
@ -57,6 +57,7 @@ Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
|
||||
<li>IMPROVED/REWORKED rendering of text in text- and math-mode. Now it is more consistent with the output of LaTeX itself</li>
|
||||
<li>IMPROVED/REWORKED rendering of blackboard font: now several different rendering modes can be selected using JKQTMathText::setFontBlackboradMode()</li>
|
||||
<li>BREAKING/REWORKED: The \\verb!...!-command now works the same as in LaTeX</li>
|
||||
<li>BREAKING/CLEANUP: cleanup: Removed Parameter prevNodeSize from JKQTMathTextNode::draw() and JKQTMathTextNode::getSize()/JKQTMathTextNode::getSizeInternal(), since it is only really necessary for JKQTMathTextSubscriptNode and JKQTMathTextSuperscriptNode</li>
|
||||
<li>NEW: JKQTMathTextVerticalListNode allows to typeset a vertical list of lines</li>
|
||||
<li>NEW: JKQTMathText::parse() by default allows linebreaks in the LaTeX string to be parsed. This can be switched off by a parameter</li>
|
||||
<li>NEW: added functions to set the font-size in pixels (as alternative to the existing functions that set them in points), implements request <a href="https://github.com/jkriege2/JKQtPlotter/issues/76">#76</a> from <a href="https://github.com/igormironchik">user:igormironchik</a> </li>
|
||||
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
@ -36,3 +36,35 @@ jkqtmathtext_mathoperator_width_factor.png
|
||||
---
|
||||
jkqtmathtext_limits.png
|
||||
no specifier: $\sum_{i=0}^\infty k_i^2\ \ \lim_{x\rightarrow0}f(x)\ \ \nabla_{x}f(x)$ \ \ \ \ \ {\backslash}limits: $\sum\limits_{i=0}^\infty k_i^2\ \ \lim\limits_{x\rightarrow0}f(x)\ \ \nabla\limits_{x}f(x)$ \ \ \ \ \ {\backslash}nolimits: $\sum\nolimits_{i=0}^\infty k_i^2\ \ \lim\nolimits_{x\rightarrow0}f(x)\ \ \nabla\nolimits_{x}f(x)$
|
||||
---
|
||||
jkqtmathtext_doc_subsupershift_integral.png
|
||||
--fontsoze=30
|
||||
sub-/superscript:\\
|
||||
\begin{tabular}{c:c|c:c}
|
||||
shifted & subs. shifted & unshifted & unshifted\\\hdashline
|
||||
$\int\limits_{\textcolor{blue}{\leftarrow}}^{\textcolor{blue}{\rightarrow}}$ & $\int\nolimits_{\textcolor{blue}{\leftarrow}}^{\textcolor{red}{^0}}$ & $\sum\limits_\textcolor{red}{0}^\textcolor{red}{0}$ & $\sum\nolimits_\textcolor{red}{0}^\textcolor{red}{0}$
|
||||
\end{tabular}
|
||||
---
|
||||
jkqtmathtext_doc_subsupershift_integral_boxes.png
|
||||
--drawboxes --fontsoze=30
|
||||
sub-/superscript:\\
|
||||
\begin{tabular}{c:c|c:c}
|
||||
shifted & subs. shifted & unshifted & unshifted\\\hdashline
|
||||
$\int\limits_{\textcolor{blue}{\leftarrow}}^{\textcolor{blue}{\rightarrow}}$ & $\int\nolimits_{\textcolor{blue}{\leftarrow}}^{\textcolor{red}{^0}}$ & $\sum\limits_\textcolor{red}{0}^\textcolor{red}{0}$ & $\sum\nolimits_\textcolor{red}{0}^\textcolor{red}{0}$
|
||||
\end{tabular}
|
||||
---
|
||||
jkqtmathtext_doc_subsuper_italiccorrection.png
|
||||
--fontsoze=30
|
||||
sub-/superscript:\\
|
||||
\begin{tabular}{c|c}
|
||||
italic-correction & no correction\\\hdashline
|
||||
$x_\textcolor{blue}{\leftarrow}^\textcolor{red}{0}$ & $\mathrm{M}_\textcolor{red}{0}^\textcolor{red}{0}$
|
||||
\end{tabular}
|
||||
---
|
||||
jkqtmathtext_doc_subsuper_italiccorrection_boxes.png
|
||||
--drawboxes --fontsoze=30
|
||||
sub-/superscript:\\
|
||||
\begin{tabular}{c|c}
|
||||
italic-correction & no correction\\\hdashline
|
||||
$x_\textcolor{blue}{\leftarrow}^\textcolor{red}{0}$ & $\mathrm{M}_\textcolor{red}{0}^\textcolor{red}{0}$
|
||||
\end{tabular}
|
||||
|
@ -721,7 +721,13 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathText : public QObject {
|
||||
* by \c \\sum,\\int,... .
|
||||
*/
|
||||
double subsuper_mode_selection_by_size_factor;
|
||||
/** \brief fraction of a whitespace by which to shift a sub-/superscript left/right when the previous text is italic */
|
||||
/** \brief fraction of a whitespace by which to shift a sub-/superscript left/right when the previous text is italic
|
||||
*
|
||||
* \image html jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection.png
|
||||
*
|
||||
* \image html jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection_boxes.png
|
||||
*
|
||||
*/
|
||||
double italic_correction_factor;
|
||||
/** \brief like subsuper_size_factor, but for operators (\c \\sum , \c \\int , ...) where the text is placed above/below the symbol */
|
||||
double operatorsubsuper_size_factor;
|
||||
@ -736,6 +742,10 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathText : public QObject {
|
||||
*/
|
||||
double operatorsubsuper_extraspace_factor;
|
||||
/** \brief for integrals (\c \\int , \c \\oint , ...) the sub-/superscripts above/below the symbol have to be shifted a bit to the left/right to accomodate the shape of the operator symbol (i.e. some free space at the top-left and bottom-right)
|
||||
*
|
||||
* \image html jkqtmathtext/jkqtmathtext_doc_subsupershift_integral.png
|
||||
*
|
||||
* \image html jkqtmathtext/jkqtmathtext_doc_subsupershift_integral_boxes.png
|
||||
*
|
||||
* This factor is multiplied by the symbol width: xshift=intsubsuper_xcorrection_factor*symbolWidth
|
||||
* Then the subscript below is placed at centerx(symbol)-xshift and the superscript at centerx(symbol)+shiftx.
|
||||
@ -745,6 +755,10 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathText : public QObject {
|
||||
*/
|
||||
double intsubsuper_xcorrection_factor;
|
||||
/** \brief for integrals (\c \\int , \c \\oint , ...) the subscripts besides the symbol have to be shifted to the left a bit to the left to accomodate the shape of the operator symbol (i.e. some free space at the bottom-right)
|
||||
*
|
||||
* \image html jkqtmathtext/jkqtmathtext_doc_subsupershift_integral.png
|
||||
*
|
||||
* \image html jkqtmathtext/jkqtmathtext_doc_subsupershift_integral_boxes.png
|
||||
*
|
||||
* This factor is multiplied by the width of an x: xshift=intsubbesides_xcorrection_xfactor*xWidth
|
||||
* Then the subscript besides the symbol is shifted by xshift to the left
|
||||
|
@ -47,12 +47,12 @@ JKQTMathTextBraceNode::JKQTMathTextBraceNode(JKQTMathText* _parent, JKQTMathText
|
||||
JKQTMathTextBraceNode::~JKQTMathTextBraceNode() {
|
||||
}
|
||||
|
||||
void JKQTMathTextBraceNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextBraceNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
double braceWidth=0, braceHeight=0;
|
||||
getSizeInternalAndBrace(painter, currentEv, width, baselineHeight, overallHeight, strikeoutPos, braceWidth, braceHeight, prevNodeSize);
|
||||
getSizeInternalAndBrace(painter, currentEv, width, baselineHeight, overallHeight, strikeoutPos, braceWidth, braceHeight);
|
||||
}
|
||||
|
||||
void JKQTMathTextBraceNode::getSizeInternalAndBrace(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, double &bracewidth, double &braceheight, const JKQTMathTextNodeSize */*prevNodeSize*/)
|
||||
void JKQTMathTextBraceNode::getSizeInternalAndBrace(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, double &bracewidth, double &braceheight)
|
||||
{
|
||||
width=0;
|
||||
baselineHeight=0;
|
||||
@ -87,7 +87,7 @@ void JKQTMathTextBraceNode::getSizeInternalAndBrace(QPainter &painter, JKQTMathT
|
||||
if (closebrace!=MTBTNone && closebrace!=MTBTAny) width+=bracewidth;
|
||||
}
|
||||
|
||||
double JKQTMathTextBraceNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextBraceNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
//std::cout<<"drawing brace-node: '"<<openbrace.toStdString()<<"' ... '"<<closebrace.toStdString()<<"'\n";
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
|
||||
|
@ -48,7 +48,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBraceNode: public JKQTMathTextSingleCh
|
||||
JKQTMathTextBraceNode(JKQTMathText* parent, JKQTMathTextBraceType openbrace, JKQTMathTextBraceType closebrace, JKQTMathTextNode* child);
|
||||
virtual ~JKQTMathTextBraceNode() override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
@ -62,9 +62,9 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBraceNode: public JKQTMathTextSingleCh
|
||||
*
|
||||
* \note This function internally calls getSizeInternalAndBrace() and returns part of its results.
|
||||
*/
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** calculates the size of this node (also returned by getSizeInternal() ) and of the brace */
|
||||
void getSizeInternalAndBrace(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, double& bracewidth, double&braceheight, const JKQTMathTextNodeSize* prevNodeSize=nullptr);
|
||||
void getSizeInternalAndBrace(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, double& bracewidth, double&braceheight);
|
||||
/**\brief opening brace */
|
||||
JKQTMathTextBraceType openbrace;
|
||||
/**\brief closing brace */
|
||||
|
@ -129,7 +129,7 @@ JKQTMathTextDecoratedNode::JKQTMathTextDecoratedNode(JKQTMathText* _parent, Deco
|
||||
JKQTMathTextDecoratedNode::~JKQTMathTextDecoratedNode() {
|
||||
}
|
||||
|
||||
void JKQTMathTextDecoratedNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextDecoratedNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
double cwidth=0, cbaselineHeight=0, coverallHeight=0, cstrikeoutPos=0;
|
||||
getChild()->getSize(painter, ev, cwidth, cbaselineHeight, coverallHeight, cstrikeoutPos);
|
||||
@ -224,7 +224,7 @@ void JKQTMathTextDecoratedNode::fillInstructions()
|
||||
|
||||
}
|
||||
|
||||
double JKQTMathTextDecoratedNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextDecoratedNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
double cwidth=0, cbaselineHeight=0, coverallHeight=0, cstrikeoutPos=0;
|
||||
|
@ -91,7 +91,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextDecoratedNode: public JKQTMathTextSing
|
||||
JKQTMathTextDecoratedNode(JKQTMathText* parent, DecorationType decoration, JKQTMathTextNode* child);
|
||||
virtual ~JKQTMathTextDecoratedNode() override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
@ -100,7 +100,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextDecoratedNode: public JKQTMathTextSing
|
||||
DecorationType getDecoration() const;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief type of decoration that is added to the child node */
|
||||
DecorationType decoration;
|
||||
/** \brief lists all supported instructions */
|
||||
|
@ -123,7 +123,7 @@ QString JKQTMathTextFracNode::getTypeName() const
|
||||
return "MTfracNode";
|
||||
}
|
||||
|
||||
void JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
const QFont f=currentEv.getFont(parentMathText);
|
||||
const QFontMetricsF fm(f, painter.device());
|
||||
JKQTMathTextEnvironment ev1=currentEv;
|
||||
@ -240,7 +240,7 @@ double JKQTMathTextFracNode::getFracScalingFactor() const
|
||||
return parentMathText->getFracFactor();
|
||||
}
|
||||
|
||||
double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
const QFont f=currentEv.getFont(parentMathText);
|
||||
const QFontMetricsF fm(f, painter.device());
|
||||
|
@ -83,7 +83,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextFracNode: public JKQTMathTextDualChild
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc mode */
|
||||
@ -94,7 +94,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextFracNode: public JKQTMathTextDualChild
|
||||
/** \brief fills instructions */
|
||||
static void fillInstructions();
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief actual display type of fraction object */
|
||||
JKQTMathTextFracNode::FracType mode;
|
||||
/** \brief returns the nesting level of the node (of same type of \a sameType \c ==true) */
|
||||
|
@ -78,7 +78,7 @@ QString JKQTMathTextSimpleInstructionNode::getTypeName() const
|
||||
return QLatin1String("JKQTMathTextSimpleInstructionNode(")+instructionName+")";
|
||||
}
|
||||
|
||||
double JKQTMathTextSimpleInstructionNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
double JKQTMathTextSimpleInstructionNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
fillInstructions();
|
||||
@ -124,7 +124,7 @@ size_t JKQTMathTextSimpleInstructionNode::countParametersOfInstruction(const QSt
|
||||
return 0;
|
||||
}
|
||||
|
||||
void JKQTMathTextSimpleInstructionNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, const JKQTMathTextNodeSize */*prevNodeSize*/)
|
||||
void JKQTMathTextSimpleInstructionNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
fillInstructions();
|
||||
QFont f=currentEv.getFont(parentMathText);
|
||||
@ -215,7 +215,7 @@ QString JKQTMathTextModifiedTextPropsInstructionNode::getTypeName() const
|
||||
return QLatin1String("JKQTMathTextModifiedTextPropsInstructionNode(")+instructionName+")";
|
||||
}
|
||||
|
||||
void JKQTMathTextModifiedTextPropsInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextModifiedTextPropsInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
fillInstructions();
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
|
||||
@ -224,7 +224,7 @@ void JKQTMathTextModifiedTextPropsInstructionNode::getSizeInternal(QPainter& pai
|
||||
getChild()->getSize(painter, ev, width, baselineHeight, overallHeight, strikeoutPos);
|
||||
}
|
||||
|
||||
double JKQTMathTextModifiedTextPropsInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextModifiedTextPropsInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
fillInstructions();
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
@ -665,7 +665,7 @@ QString JKQTMathTextBoxInstructionNode::getTypeName() const
|
||||
return QLatin1String("JKQTMathTextBoxInstructionNode(")+instructionName+")";
|
||||
}
|
||||
|
||||
void JKQTMathTextBoxInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextBoxInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
|
||||
const auto& inst=instructions.value(getInstructionName());
|
||||
@ -682,7 +682,7 @@ void JKQTMathTextBoxInstructionNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
overallHeight=overallHeight+2.0*(padding+lw/2.0);
|
||||
}
|
||||
|
||||
double JKQTMathTextBoxInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextBoxInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
|
||||
|
@ -70,7 +70,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSimpleInstructionNode: public JKQTMath
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc instructionName */
|
||||
@ -89,7 +89,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSimpleInstructionNode: public JKQTMath
|
||||
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */
|
||||
struct InstructionProperties {
|
||||
/** \brief this functor implements the instruction */
|
||||
@ -131,7 +131,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextModifiedTextPropsInstructionNode: publ
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
|
||||
@ -150,7 +150,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextModifiedTextPropsInstructionNode: publ
|
||||
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */
|
||||
struct InstructionProperties {
|
||||
/** \brief this functor implements the instruction */
|
||||
@ -188,7 +188,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBoxInstructionNode: public JKQTMathTex
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
|
||||
@ -210,7 +210,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBoxInstructionNode: public JKQTMathTex
|
||||
static void modifyInMathEnvironment(const QString& instructionName, bool& insideMath, const QStringList ¶ms=QStringList());
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief set all properties in \a ev, as appropriate for the represented instruction */
|
||||
bool setupMTenvironment(JKQTMathTextEnvironment &ev) const;
|
||||
|
||||
|
@ -52,7 +52,7 @@ QString JKQTMathTextHorizontalListNode::getTypeName() const
|
||||
return "MTHorizontalListNode";
|
||||
}
|
||||
|
||||
void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
width=0;
|
||||
overallHeight=0;
|
||||
baselineHeight=0;
|
||||
@ -69,16 +69,14 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
double xnew=0;
|
||||
//bool wasBrace=false;
|
||||
for (int i=0; i<nodes.size(); i++) {
|
||||
JKQTMathTextNodeSize prevNodeSize;
|
||||
JKQTMathTextSymbolNode::NodeSize prevNodeSize;
|
||||
JKQTMathTextNodeSize* prevNodeSizePtrForSubscript=nullptr;
|
||||
JKQTMathTextNodeSize* prevNodeSizePtrForSuperscript=nullptr;
|
||||
double subSuperXCorrection=0;
|
||||
double subBesidesXCorrection=0;
|
||||
|
||||
if (i>0) {
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i-1]);
|
||||
if (symbN) symbN->getSymbolSize(painter, currentEv, prevNodeSize.width, prevNodeSize.baselineHeight, prevNodeSize.overallHeight, prevNodeSize.strikeoutPos, subSuperXCorrection, subBesidesXCorrection);
|
||||
else nodes[i-1]->getSize(painter, currentEv, prevNodeSize.width, prevNodeSize.baselineHeight, prevNodeSize.overallHeight, prevNodeSize.strikeoutPos);
|
||||
if (symbN) prevNodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
else prevNodeSize = nodes[i-1]->getSize(painter, currentEv);
|
||||
const double prevAscent=prevNodeSize.baselineHeight;
|
||||
const double prevDescent=prevNodeSize.overallHeight-prevNodeSize.baselineHeight;
|
||||
const bool shouldUseSpecialSubscriptMode=prevAscent>=subsuperSpecialModeAscent;
|
||||
@ -95,9 +93,10 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
// if so, we typeset them at the same x-psotion, so sub/superscripts appear correctly
|
||||
if (nodeI_SuperScript) {
|
||||
if (i+1<nodes.size()) { // is there one mor node behind?
|
||||
if (dynamic_cast<JKQTMathTextSubscriptNode*>(nodes[i+1])) { // is this subscript?
|
||||
JKQTMathTextSubscriptNode* nodeISucc_SubScript=dynamic_cast<JKQTMathTextSubscriptNode*>(nodes[i+1]);
|
||||
if (nodeISucc_SubScript) { // is this subscript?
|
||||
double w1=0, w2=0, oh=0, bh=0, sp=0;
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh, oh, sp, prevNodeSizePtrForSuperscript);
|
||||
nodeI_SuperScript->getSizeWithSpecialPlacement(painter, currentEv, w1, bh, oh, sp, prevNodeSizePtrForSuperscript);
|
||||
|
||||
if (bh>baselineHeight) {
|
||||
overallHeight=overallHeight+bh-baselineHeight;
|
||||
@ -110,7 +109,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
}
|
||||
|
||||
i++;
|
||||
nodes[i]->getSize(painter, currentEv, w2, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
nodeISucc_SubScript->getSizeWithSpecialPlacement(painter, currentEv, w2, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
//qDebug()<<"super_sub: sub: "<<nodes[i]->getTypeName()<<" w2="<<w2<<" bh"<<bh<<" oh="<<oh<<" sp="<<sp;
|
||||
if (bh>baselineHeight) {
|
||||
overallHeight=overallHeight+bh-baselineHeight;
|
||||
@ -121,7 +120,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
overallHeight=baselineHeight+oh-bh;
|
||||
strikeoutPos=sp;
|
||||
}
|
||||
xnew+=qMax(w1+spaceWidth, w2+subBesidesXCorrection);
|
||||
xnew+=qMax(w1+spaceWidth, w2+prevNodeSize.subBesidesXCorrection);
|
||||
|
||||
doDraw=false;
|
||||
//qDebug()<<"### super+sub";
|
||||
@ -130,9 +129,10 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
}
|
||||
} else if (nodeI_SubScript) {
|
||||
if (i+1<nodes.size()) { // is there one mor node behind?
|
||||
if (dynamic_cast<JKQTMathTextSuperscriptNode*>(nodes[i+1])) { // is this subscript?
|
||||
JKQTMathTextSuperscriptNode* nodeISucc_SuperScript=dynamic_cast<JKQTMathTextSuperscriptNode*>(nodes[i+1]);
|
||||
if (nodeISucc_SuperScript) { // is this subscript?
|
||||
double w1=0, w2=0, oh=0, bh=0, sp=0;
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
nodeI_SubScript->getSizeWithSpecialPlacement(painter, currentEv, w1, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
if (bh>baselineHeight) {
|
||||
overallHeight=overallHeight+bh-baselineHeight;
|
||||
baselineHeight=bh;
|
||||
@ -144,7 +144,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
}
|
||||
|
||||
i++;
|
||||
nodes[i]->getSize(painter, currentEv, w2, bh, oh, sp, prevNodeSizePtrForSuperscript);
|
||||
nodeISucc_SuperScript->getSizeWithSpecialPlacement(painter, currentEv, w2, bh, oh, sp, prevNodeSizePtrForSuperscript);
|
||||
if (bh>baselineHeight) {
|
||||
overallHeight=overallHeight+bh-baselineHeight;
|
||||
baselineHeight=bh;
|
||||
@ -154,7 +154,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
overallHeight=baselineHeight+oh-bh;
|
||||
strikeoutPos=sp;
|
||||
}
|
||||
xnew+=qMax(w1+subBesidesXCorrection, w2+spaceWidth);
|
||||
xnew+=qMax(w1+prevNodeSize.subBesidesXCorrection, w2+spaceWidth);
|
||||
|
||||
|
||||
doDraw=false;
|
||||
@ -163,7 +163,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
}
|
||||
} else {
|
||||
double w1=0, oh=0, bh=0, sp=0;
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh, oh, sp);
|
||||
if (bh>baselineHeight) {
|
||||
overallHeight=overallHeight+bh-baselineHeight;
|
||||
baselineHeight=bh;
|
||||
@ -173,7 +173,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
overallHeight=baselineHeight+oh-bh;
|
||||
strikeoutPos=sp;
|
||||
}
|
||||
xnew+=w1-subBesidesXCorrection;
|
||||
xnew+=w1-prevNodeSize.subBesidesXCorrection;
|
||||
doDraw=false;
|
||||
|
||||
}
|
||||
@ -211,7 +211,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
//double d1=oh1-bh1;
|
||||
//double d2=oh2-bh2;
|
||||
//double d3=oh3-bh3;
|
||||
const double neww=qMax(qMax(w1, wsub+subSuperXCorrection), wsup+subSuperXCorrection)+subsuperextrawidth;
|
||||
const double neww=qMax(qMax(w1, wsub+prevNodeSize.subSuperXCorrection), wsup+prevNodeSize.subSuperXCorrection)+subsuperextrawidth;
|
||||
const double newBaselineHeight=bh1+ohsup+subsupershift;
|
||||
if (newBaselineHeight>baselineHeight) {
|
||||
const double extraBaselineHeight=newBaselineHeight-baselineHeight;
|
||||
@ -233,18 +233,19 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
} else if (subn) { // is this subscript?
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getOperatorsubsuperSizeFactor();
|
||||
double w1=0, wsub=0;
|
||||
double oh1=0, ohsub=0;
|
||||
double bh1=0, bhsub=0;
|
||||
double sp1=0, spsub=0;//, sp3=0;
|
||||
double wsub=0;
|
||||
double ohsub=0;
|
||||
double bhsub=0;
|
||||
double spsub=0;//, sp3=0;
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i]);
|
||||
JKQTMathTextSymbolNode::NodeSize nodeSize;
|
||||
if (symbN) {
|
||||
symbN->getSymbolSize(painter, currentEv, w1, bh1, oh1, sp1, subSuperXCorrection, subBesidesXCorrection);
|
||||
nodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
} else {
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh1, oh1, sp1);
|
||||
nodeSize=nodes[i]->getSize(painter, currentEv);
|
||||
}
|
||||
subn->getChild()->getSize(painter, ev, wsub, bhsub, ohsub, spsub);
|
||||
const double descent1=oh1-bh1;
|
||||
const double descent1=nodeSize.getDescent();
|
||||
//double d1=oh1-bh1;
|
||||
//double d2=oh2-bh2;
|
||||
|
||||
@ -253,11 +254,11 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
const double extraDescent=newDescent-(overallHeight-baselineHeight);
|
||||
overallHeight=overallHeight+extraDescent;
|
||||
}
|
||||
if (bh1>baselineHeight) {
|
||||
overallHeight=overallHeight+(bh1-baselineHeight);
|
||||
baselineHeight=bh1;
|
||||
if (nodeSize.baselineHeight>baselineHeight) {
|
||||
overallHeight=overallHeight+(nodeSize.baselineHeight-baselineHeight);
|
||||
baselineHeight=nodeSize.baselineHeight;
|
||||
}
|
||||
const double neww=qMax(w1, wsub+subSuperXCorrection)+subsuperextrawidth;
|
||||
const double neww=qMax(nodeSize.width, wsub+nodeSize.subSuperXCorrection)+subsuperextrawidth;
|
||||
i++;
|
||||
doDraw=false;
|
||||
xnew+=neww;
|
||||
@ -265,22 +266,23 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
} else if (supn) { // is this superscript?
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getOperatorsubsuperSizeFactor();
|
||||
double w1=0, wsup=0;
|
||||
double oh1=0, ohsup=0;
|
||||
double bh1=0, bhsup=0;
|
||||
double sp1=0, spsup=0;//, sp3=0;
|
||||
double wsup=0;
|
||||
double ohsup=0;
|
||||
double bhsup=0;
|
||||
double spsup=0;//, sp3=0;
|
||||
JKQTMathTextSymbolNode::NodeSize nodeSize;
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i]);
|
||||
if (symbN) {
|
||||
symbN->getSymbolSize(painter, currentEv, w1, bh1, oh1, sp1, subSuperXCorrection, subBesidesXCorrection);
|
||||
nodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
} else {
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh1, oh1, sp1);
|
||||
nodeSize=nodes[i]->getSize(painter, currentEv);
|
||||
}
|
||||
const double descent1=oh1-bh1;
|
||||
const double descent1=nodeSize.getDescent();
|
||||
supn->getChild()->getSize(painter, ev, wsup, bhsup, ohsup, spsup);
|
||||
//double d1=oh1-bh1;
|
||||
//double d2=oh2-bh2;
|
||||
|
||||
const double newBaselineHeight=bh1+ohsup+subsupershift;
|
||||
const double newBaselineHeight=nodeSize.baselineHeight+ohsup+subsupershift;
|
||||
if (newBaselineHeight>baselineHeight) {
|
||||
const double extraBaselineHeight=newBaselineHeight-baselineHeight;
|
||||
baselineHeight=newBaselineHeight;
|
||||
@ -290,7 +292,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
overallHeight=baselineHeight+descent1;
|
||||
}
|
||||
|
||||
const double neww=qMax(w1, wsup+subSuperXCorrection)+subsuperextrawidth;
|
||||
const double neww=qMax(nodeSize.width, wsup+nodeSize.subSuperXCorrection)+subsuperextrawidth;
|
||||
i++;
|
||||
doDraw=false;
|
||||
xnew+=neww;
|
||||
@ -301,9 +303,9 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
|
||||
if (i<nodes.size() && doDraw) {
|
||||
double w=0, oh=0, bh=0, sp=0;
|
||||
if (nodeI_SubScript) nodes[i]->getSize(painter, currentEv, w, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
else if (nodeI_SuperScript) nodes[i]->getSize(painter, currentEv, w, bh, oh, sp, prevNodeSizePtrForSuperscript);
|
||||
else nodes[i]->getSize(painter, currentEv, w, bh, oh, sp, nullptr);
|
||||
if (nodeI_SubScript) nodeI_SubScript->getSizeWithSpecialPlacement(painter, currentEv, w, bh, oh, sp, prevNodeSizePtrForSubscript);
|
||||
else if (nodeI_SuperScript) nodeI_SuperScript->getSizeWithSpecialPlacement(painter, currentEv, w, bh, oh, sp, prevNodeSizePtrForSuperscript);
|
||||
else nodes[i]->getSize(painter, currentEv, w, bh, oh, sp);
|
||||
const double cDescent=oh-bh;
|
||||
|
||||
//qDebug()<<"### else: bh="<<bh<<" baselineHeight="<<baselineHeight<<" oh="<<oh<<" overallHeight="<<overallHeight;
|
||||
@ -326,7 +328,7 @@ void JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMath
|
||||
width=xnew;
|
||||
}
|
||||
|
||||
double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
double ynew=y;
|
||||
double xnew=x;
|
||||
@ -339,18 +341,16 @@ double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double
|
||||
for (int i=0; i<nodes.size(); i++) {
|
||||
bool doDraw=true;
|
||||
|
||||
JKQTMathTextNodeSize prevNodeSize;
|
||||
JKQTMathTextSymbolNode::NodeSize prevNodeSize;
|
||||
JKQTMathTextNodeSize* prevNodeSizePtrForSubscript=nullptr;
|
||||
JKQTMathTextNodeSize* prevNodeSizePtrForSuperscript=nullptr;
|
||||
double subSuperXCorrection=0;
|
||||
double subBesidesXCorrection=0;
|
||||
|
||||
if (i>0) {
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i-1]);
|
||||
if (symbN) {
|
||||
symbN->getSymbolSize(painter, currentEv, prevNodeSize.width, prevNodeSize.baselineHeight, prevNodeSize.overallHeight, prevNodeSize.strikeoutPos, subSuperXCorrection, subBesidesXCorrection);
|
||||
prevNodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
} else {
|
||||
nodes[i-1]->getSize(painter, currentEv, prevNodeSize.width, prevNodeSize.baselineHeight, prevNodeSize.overallHeight, prevNodeSize.strikeoutPos);
|
||||
prevNodeSize=nodes[i-1]->getSize(painter, currentEv);
|
||||
}
|
||||
const double prevAscent=prevNodeSize.baselineHeight;
|
||||
const double prevDescent=prevNodeSize.overallHeight-prevNodeSize.baselineHeight;
|
||||
@ -368,15 +368,16 @@ double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double
|
||||
if (nodeI_SuperScript) {
|
||||
|
||||
if (i+1<nodes.size()) { // is there one mor node behind?
|
||||
if (dynamic_cast<JKQTMathTextSubscriptNode*>(nodes[i+1])) { // is this subscript?
|
||||
JKQTMathTextSubscriptNode* nodeISucc_SubScript=dynamic_cast<JKQTMathTextSubscriptNode*>(nodes[i+1]);
|
||||
if (nodeISucc_SubScript) { // is this subscript?
|
||||
|
||||
//painter.setPen(QPen("red"));
|
||||
//painter.drawEllipse(xnew-4,ynew+shift-(ccOverallHeight-ccBaselineHeight)-4,8,8);
|
||||
double xnew1=nodes[i]->draw(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript);
|
||||
double xnew1=nodeI_SuperScript->drawWithSpecialPlacement(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript);
|
||||
i++;
|
||||
//painter.setPen(QPen("magenta"));
|
||||
//painter.drawEllipse(xnew-4,ynew-4,8,8);
|
||||
double xnew2=nodes[i]->draw(painter, xnew-subSuperXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
double xnew2=nodeISucc_SubScript->drawWithSpecialPlacement(painter, xnew-prevNodeSize.subSuperXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
//i++;
|
||||
xnew=qMax(xnew1, xnew2);
|
||||
doDraw=false;
|
||||
@ -384,20 +385,21 @@ double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double
|
||||
}
|
||||
} else if (nodeI_SubScript) {
|
||||
if (i+1<nodes.size()) { // is there one more node behind?
|
||||
if (dynamic_cast<JKQTMathTextSuperscriptNode*>(nodes[i+1])) { // is this subscript?
|
||||
JKQTMathTextSuperscriptNode* nodeISucc_SuperScript=dynamic_cast<JKQTMathTextSuperscriptNode*>(nodes[i+1]);
|
||||
if (nodeISucc_SuperScript) { // is this subscript?
|
||||
//painter.setPen(QPen("red"));
|
||||
//painter.drawEllipse(xnew-4,ynew+shift-(ccOverallHeight-ccBaselineHeight)-4,8,8);
|
||||
double xnew1=nodes[i]->draw(painter, xnew-subSuperXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
double xnew1=nodeI_SubScript->drawWithSpecialPlacement(painter, xnew-prevNodeSize.subSuperXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
i++;
|
||||
//painter.setPen(QPen("magenta"));
|
||||
//painter.drawEllipse(xnew-4,ynew-4,8,8);
|
||||
double xnew2=nodes[i]->draw(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript);
|
||||
double xnew2=nodeISucc_SuperScript->drawWithSpecialPlacement(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript);
|
||||
//i++;
|
||||
xnew=qMax(xnew1, xnew2);
|
||||
doDraw=false;
|
||||
}
|
||||
} else {
|
||||
xnew=nodes[i]->draw(painter, xnew-subBesidesXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
xnew=nodeI_SubScript->drawWithSpecialPlacement(painter, xnew-prevNodeSize.subBesidesXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
doDraw=false;
|
||||
}
|
||||
} else {
|
||||
@ -421,82 +423,85 @@ double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double
|
||||
if (!supn) supn=supn2;
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getOperatorsubsuperSizeFactor();
|
||||
double w1=0, wsub=0, wsup=0;
|
||||
double oh1=0, ohsub=0, ohsup=0;
|
||||
double bh1=0, bhsub=0, bhsup=0, spsub, spsup, sp;
|
||||
double wsub=0, wsup=0;
|
||||
double ohsub=0, ohsup=0;
|
||||
double bhsub=0, bhsup=0, spsub, spsup, sp;
|
||||
JKQTMathTextSymbolNode::NodeSize nodeSize;
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i]);
|
||||
if (symbN) {
|
||||
symbN->getSymbolSize(painter, currentEv, w1, bh1, oh1, sp, subSuperXCorrection, subBesidesXCorrection);
|
||||
nodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
} else {
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh1, oh1, sp);
|
||||
nodeSize=nodes[i]->getSize(painter, currentEv);
|
||||
}
|
||||
|
||||
|
||||
subn->getChild()->getSize(painter, ev, wsub, bhsub, ohsub, spsub);
|
||||
supn->getChild()->getSize(painter, ev, wsup, bhsup, ohsup, spsup);
|
||||
const double descent1=oh1-bh1;
|
||||
const double descent1=nodeSize.getDescent();
|
||||
//double d2=oh2-bh2;
|
||||
const double descent3=ohsup-bhsup;
|
||||
|
||||
const double neww=qMax(qMax(w1, wsub), wsup)+subsuperextrawidth;
|
||||
const double neww=qMax(qMax(nodeSize.width, wsub), wsup)+subsuperextrawidth;
|
||||
//double xnew1=
|
||||
const double xn1=nodes[i]->draw(painter, xnew+(neww-w1)/2.0, ynew, currentEv);
|
||||
const double xn1=nodes[i]->draw(painter, xnew+(neww-nodeSize.width)/2.0, ynew, currentEv);
|
||||
i++;
|
||||
//double xnew2=
|
||||
const double xnsub=subn->getChild()->draw(painter, xnew+(neww-wsub)/2.0-subSuperXCorrection, ynew+bhsub+descent1+subsupershift, ev);
|
||||
const double xnsub=subn->getChild()->draw(painter, xnew+(neww-wsub)/2.0-nodeSize.subSuperXCorrection, ynew+bhsub+descent1+subsupershift, ev);
|
||||
i++;
|
||||
//double xnew3=
|
||||
const double xnsup=supn->getChild()->draw(painter, xnew+(neww-wsup)/2.0+subSuperXCorrection, ynew-bh1-descent3-subsupershift, ev);
|
||||
const double xnsup=supn->getChild()->draw(painter, xnew+(neww-wsup)/2.0+nodeSize.subSuperXCorrection, ynew-nodeSize.baselineHeight-descent3-subsupershift, ev);
|
||||
doDraw=false;
|
||||
xnew=qMax(qMax(xn1, xnsub), xnsup)+subsuperextrawidth/2.0;
|
||||
} else if (subn) { // is this subscript and no following superscript?
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getOperatorsubsuperSizeFactor();
|
||||
double w1=0, wsub=0;
|
||||
double oh1=0, ohsub=0;
|
||||
double bh1=0, bhsub=0, sp=0, spsub=0;
|
||||
double wsub=0;
|
||||
double ohsub=0;
|
||||
double bhsub=0, sp=0, spsub=0;
|
||||
JKQTMathTextSymbolNode::NodeSize nodeSize;
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i]);
|
||||
if (symbN) {
|
||||
symbN->getSymbolSize(painter, currentEv, w1, bh1, oh1, sp, subSuperXCorrection, subBesidesXCorrection);
|
||||
nodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
} else {
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh1, oh1, sp);
|
||||
nodeSize=nodes[i]->getSize(painter, currentEv);
|
||||
}
|
||||
subn->getChild()->getSize(painter, ev, wsub, bhsub, ohsub, spsub);
|
||||
const double descent1=oh1-bh1;
|
||||
const double descent1=nodeSize.getDescent();
|
||||
//double d2=oh2-bh2;
|
||||
|
||||
const double neww=qMax(w1, wsub)+subsuperextrawidth;
|
||||
const double neww=qMax(nodeSize.width, wsub)+subsuperextrawidth;
|
||||
//double xnew1=
|
||||
const double xn1=nodes[i]->draw(painter, xnew+(neww-w1)/2.0, ynew, currentEv);
|
||||
const double xn1=nodes[i]->draw(painter, xnew+(neww-nodeSize.width)/2.0, ynew, currentEv);
|
||||
i++;
|
||||
//double xnew2=
|
||||
const double xnsub=subn->getChild()->draw(painter, xnew+(neww-wsub)/2.0-subSuperXCorrection, ynew+bhsub+descent1+subsupershift, ev)+subsupershift;
|
||||
const double xnsub=subn->getChild()->draw(painter, xnew+(neww-wsub)/2.0-nodeSize.subSuperXCorrection, ynew+bhsub+descent1+subsupershift, ev)+subsupershift;
|
||||
doDraw=false;
|
||||
//xnew+=w;
|
||||
xnew=qMax(xnsub, xn1)+subsuperextrawidth/2.0;
|
||||
} else if (supn) { // is this superscript and no following subscript?
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getOperatorsubsuperSizeFactor();
|
||||
double w1=0, wsup=0;
|
||||
double oh1=0, ohsup=0;
|
||||
double bh1=0, bhsup=0, sp, spsup;
|
||||
double wsup=0;
|
||||
double ohsup=0;
|
||||
double bhsup=0, sp, spsup;
|
||||
JKQTMathTextSymbolNode::NodeSize nodeSize;
|
||||
JKQTMathTextSymbolNode* symbN=dynamic_cast<JKQTMathTextSymbolNode*>(nodes[i]);
|
||||
if (symbN) {
|
||||
symbN->getSymbolSize(painter, currentEv, w1, bh1, oh1, sp, subSuperXCorrection, subBesidesXCorrection);
|
||||
nodeSize=symbN->getSymbolSize(painter, currentEv);
|
||||
} else {
|
||||
nodes[i]->getSize(painter, currentEv, w1, bh1, oh1, sp);
|
||||
nodeSize=nodes[i]->getSize(painter, currentEv);
|
||||
}
|
||||
supn->getChild()->getSize(painter, ev, wsup, bhsup, ohsup, spsup);
|
||||
//double d1=oh1-bh1;
|
||||
//double d2=oh2-bh2;
|
||||
const double descent3=ohsup-bhsup;
|
||||
|
||||
const double neww=qMax(w1, wsup)+subsuperextrawidth;
|
||||
const double neww=qMax(nodeSize.width, wsup)+subsuperextrawidth;
|
||||
//double xnew1=
|
||||
const double xn1=nodes[i]->draw(painter, xnew+(neww-w1)/2.0, ynew, currentEv);
|
||||
const double xn1=nodes[i]->draw(painter, xnew+(neww-nodeSize.width)/2.0, ynew, currentEv);
|
||||
i++;
|
||||
//double xnew3=
|
||||
const double xnsup=supn->getChild()->draw(painter, xnew+(neww-wsup)/2.0+subSuperXCorrection, ynew-bh1-descent3-subsupershift, ev);
|
||||
const double xnsup=supn->getChild()->draw(painter, xnew+(neww-wsup)/2.0+nodeSize.subSuperXCorrection, ynew-nodeSize.baselineHeight-descent3-subsupershift, ev);
|
||||
doDraw=false;
|
||||
xnew=qMax(xn1, xnsup)+subsuperextrawidth/2.0;
|
||||
}
|
||||
@ -504,9 +509,9 @@ double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double
|
||||
}
|
||||
|
||||
if (i<nodes.size() && doDraw) {
|
||||
if (nodeI_SuperScript) xnew=nodes[i]->draw(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript);
|
||||
else if (nodeI_SubScript) xnew=nodes[i]->draw(painter, xnew-subBesidesXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
else xnew=nodes[i]->draw(painter, xnew, ynew, currentEv, nullptr);
|
||||
if (nodeI_SuperScript) xnew=nodeI_SuperScript->drawWithSpecialPlacement(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript);
|
||||
else if (nodeI_SubScript) xnew=nodeI_SubScript->drawWithSpecialPlacement(painter, xnew-prevNodeSize.subBesidesXCorrection, ynew, currentEv, prevNodeSizePtrForSubscript);
|
||||
else xnew=nodes[i]->draw(painter, xnew, ynew, currentEv);
|
||||
}
|
||||
}
|
||||
return xnew;
|
||||
@ -600,7 +605,7 @@ QString JKQTMathTextVerticalListNode::getTypeName() const
|
||||
return "MTVerticalListNode";
|
||||
}
|
||||
|
||||
void JKQTMathTextVerticalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextVerticalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
const LayoutInfo l=calcLayout(painter, currentEv);
|
||||
width=l.width;
|
||||
overallHeight=l.overallHeight;
|
||||
@ -685,7 +690,7 @@ JKQTMathTextVerticalListNode::LayoutInfo JKQTMathTextVerticalListNode::calcLayou
|
||||
return l;
|
||||
}
|
||||
|
||||
double JKQTMathTextVerticalListNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextVerticalListNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
const LayoutInfo l=calcLayout(painter, currentEv);
|
||||
for (int i=0; i<nodes.size(); i++) {
|
||||
|
@ -49,7 +49,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextHorizontalListNode: public JKQTMathTex
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \brief add a child node */
|
||||
@ -70,7 +70,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextHorizontalListNode: public JKQTMathTex
|
||||
virtual JKQTMathTextNode* replaceChild(int i, JKQTMathTextNode* newChild) override;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
QList<JKQTMathTextNode*> nodes;
|
||||
private:
|
||||
/** \brief internal implementation of clearChildren() that is non-virtual, so can be used in the destructor */
|
||||
@ -101,7 +101,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerticalListNode: public JKQTMathTextM
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \brief add a child node */
|
||||
@ -138,7 +138,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerticalListNode: public JKQTMathTextM
|
||||
void setSpacingMode(JKQTMathTextLineSpacingMode value) ;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
|
||||
/** \brief describes the layout of the whole node */
|
||||
struct LayoutInfo: public JKQTMathTextNodeSize {
|
||||
|
@ -362,7 +362,7 @@ JKQTMathTextMatrixNode::LayoutInfo JKQTMathTextMatrixNode::calcLayout(QPainter &
|
||||
return l;
|
||||
}
|
||||
|
||||
void JKQTMathTextMatrixNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextMatrixNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
const LayoutInfo l=calcLayout(painter, currentEv);
|
||||
width=l.width;
|
||||
overallHeight=l.overallHeight;
|
||||
@ -370,7 +370,7 @@ void JKQTMathTextMatrixNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvi
|
||||
strikeoutPos=l.strikeoutPos;
|
||||
}
|
||||
|
||||
double JKQTMathTextMatrixNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextMatrixNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
|
||||
const QFontMetricsF fm(currentEv.getFont(parentMathText), painter.device());
|
||||
|
@ -68,7 +68,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextMatrixNode: public JKQTMathTextMultiCh
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \brief returns the child nodes */
|
||||
@ -122,7 +122,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextMatrixNode: public JKQTMathTextMultiCh
|
||||
*/
|
||||
LayoutInfo calcLayout(QPainter& painter, const JKQTMathTextEnvironment& currentEv) const;
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \copydoc JKQTMathTextNode::setDrawBoxes() */
|
||||
virtual void setDrawBoxes(bool draw) override;
|
||||
/** \brief child nodes making up the matrix, vector of rows */
|
||||
|
@ -50,10 +50,10 @@ JKQTMathTextNode::JKQTMathTextNode(JKQTMathText *_parent):
|
||||
JKQTMathTextNode::~JKQTMathTextNode()
|
||||
= default;
|
||||
|
||||
void JKQTMathTextNode::getSize(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize)
|
||||
void JKQTMathTextNode::getSize(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
double w=width, b=baselineHeight, o=overallHeight, s=strikeoutPos;
|
||||
getSizeInternal(painter, currentEv, w, b, o, s, prevNodeSize);
|
||||
getSizeInternal(painter, currentEv, w, b, o, s);
|
||||
|
||||
if (w<1e5) width=w;
|
||||
if (b<1e5) baselineHeight=b;
|
||||
@ -374,10 +374,10 @@ void JKQTMathTextMultiChildNode::setDrawBoxes(bool draw)
|
||||
|
||||
}
|
||||
|
||||
JKQTMathTextNodeSize JKQTMathTextNode::getSize(QPainter &painter, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
JKQTMathTextNodeSize JKQTMathTextNode::getSize(QPainter &painter, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
JKQTMathTextNodeSize s;
|
||||
getSize(painter, currentEv, s.width, s.baselineHeight, s.overallHeight, s.strikeoutPos, prevNodeSize);
|
||||
getSize(painter, currentEv, s.width, s.baselineHeight, s.overallHeight, s.strikeoutPos);
|
||||
return s;
|
||||
}
|
||||
|
||||
@ -402,12 +402,12 @@ bool JKQTMathTextNoopNode::toHtml(QString &html, JKQTMathTextEnvironment current
|
||||
return true;
|
||||
}
|
||||
|
||||
double JKQTMathTextNoopNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
double JKQTMathTextNoopNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
|
||||
void JKQTMathTextNoopNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
void JKQTMathTextNoopNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
width=0;
|
||||
baselineHeight=0;
|
||||
|
@ -48,18 +48,18 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNode {
|
||||
* \param[out] baselineHeight distance from the bottom of the block/node-box to the baseline
|
||||
* \param[out] overallHeight overall height (bottom to top) of the node, the ascent is \c overallHeight-baselineHeight
|
||||
* \param[out] strikeoutPos position of the strikeout-line
|
||||
* \param[in] prevNodeSize optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
*/
|
||||
void getSize(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr);
|
||||
void getSize(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos);
|
||||
/** \brief determine the size of the node, calls getSizeInternal() implementation of the actual type \see getSizeInternal()
|
||||
*
|
||||
* \param painter painter to use for determining the size
|
||||
* \param currentEv current environment object
|
||||
* \param[in] prevNodeSize optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
* \return all important box size parameters packed as JKQTMathTextNodeSize
|
||||
*
|
||||
*/
|
||||
JKQTMathTextNodeSize getSize(QPainter& painter, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr);
|
||||
JKQTMathTextNodeSize getSize(QPainter& painter, JKQTMathTextEnvironment currentEv);
|
||||
/** \brief calculates the x-size-difference between the given (probably) italic (width externally calculated: \a width_potentiallyitalic, \a ev_potentiallyitalic) and the non-italic version of \a child */
|
||||
double getNonItalicXCorretion(QPainter &painter, double width_potentiallyitalic, const JKQTMathTextEnvironment &ev_potentiallyitalic, JKQTMathTextNode* child) const;
|
||||
/** \brief draw the contents at the designated position
|
||||
@ -68,10 +68,10 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNode {
|
||||
* \param x x-position, where the drawing starts [Pixel]
|
||||
* \param y Y-position of the baseline, where the drawing starts [Pixel]
|
||||
* \param currentEv JKQTMathTextEnvironment object describing the current drawing environment/settings
|
||||
* \param[in] prevNodeSize optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
* \return the x position which to use for the next part of the text
|
||||
*/
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr)=0;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv)=0;
|
||||
/** \brief convert node to HTML and returns \c true on success
|
||||
* \param[out] html new HTML code is APPENDED to this string
|
||||
* \param currentEv JKQTMathTextEnvironment object describing the current drawing environment/settings
|
||||
@ -106,10 +106,9 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNode {
|
||||
* \param[out] baselineHeight distance from the bottom of the block/node-box to the baseline
|
||||
* \param[out] overallHeight overall height (bottom to top) of the node, the ascent is \c overallHeight-baselineHeight
|
||||
* \param[out] strikeoutPos position of the strikeout-line
|
||||
* \param[in] prevNodeSize optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
*/
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr)=0;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos)=0;
|
||||
|
||||
/** \brief parent JKQTMathText object (required for several drawing operations */
|
||||
JKQTMathText* parentMathText;
|
||||
@ -295,10 +294,10 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNoopNode: public JKQTMathTextNode {
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
|
||||
};
|
||||
#endif // JKQTMATHTEXTNODE_H
|
||||
|
@ -50,7 +50,7 @@ JKQTMathTextSqrtNode::~JKQTMathTextSqrtNode() {
|
||||
childDegree=nullptr;
|
||||
}
|
||||
|
||||
void JKQTMathTextSqrtNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextSqrtNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
const QFontMetricsF fm(currentEv.getFont(parentMathText), painter.device());
|
||||
JKQTMathTextEnvironment evSmall=currentEv;
|
||||
evSmall.fontSize=currentEv.fontSize*parentMathText->getSqrtSmallFontFactor();
|
||||
@ -73,7 +73,7 @@ void JKQTMathTextSqrtNode::getSizeInternal(QPainter& painter, JKQTMathTextEnviro
|
||||
}
|
||||
}
|
||||
|
||||
double JKQTMathTextSqrtNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextSqrtNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
|
||||
const QFont f=currentEv.getFont(parentMathText);
|
||||
|
@ -45,7 +45,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSqrtNode: public JKQTMathTextMultiChil
|
||||
JKQTMathTextSqrtNode(JKQTMathText* parent, JKQTMathTextNode* child__, JKQTMathTextNode* childDegree__=nullptr);
|
||||
virtual ~JKQTMathTextSqrtNode() override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
@ -75,7 +75,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSqrtNode: public JKQTMathTextMultiChil
|
||||
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief child node for the part under the root */
|
||||
JKQTMathTextNode* child;
|
||||
/** \brief second child node for the degree of the root (or nullptr if nothing) */
|
||||
|
@ -45,7 +45,7 @@ JKQTMathTextSuperscriptNode::JKQTMathTextSuperscriptNode(JKQTMathText* _parent,
|
||||
JKQTMathTextSuperscriptNode::~JKQTMathTextSuperscriptNode() {
|
||||
}
|
||||
|
||||
void JKQTMathTextSuperscriptNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextSuperscriptNode::getSizeWithSpecialPlacement(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement) {
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getSubsuperSizeFactor();
|
||||
const QFontMetricsF fm(currentEv.getFont(parentMathText), painter.device());
|
||||
@ -55,19 +55,24 @@ void JKQTMathTextSuperscriptNode::getSizeInternal(QPainter& painter, JKQTMathTex
|
||||
const double childDescent=cOverallHeight-cBaselineHeight;
|
||||
double shiftToChildBottom=parentMathText->getSuperShiftFactor()*fm.xHeight();
|
||||
|
||||
if (prevNodeSize!=nullptr) {
|
||||
const double modifiedShift=prevNodeSize->baselineHeight-childDescent-parentMathText->getSpecialSuperShiftFactor()*cBaselineHeight-childDescent;
|
||||
if (prevNodeSizeForSpecialPlacement!=nullptr) {
|
||||
const double modifiedShift=prevNodeSizeForSpecialPlacement->baselineHeight-childDescent-parentMathText->getSpecialSuperShiftFactor()*cBaselineHeight-childDescent;
|
||||
if (modifiedShift>shiftToChildBottom) shiftToChildBottom=modifiedShift;
|
||||
}
|
||||
|
||||
baselineHeight=overallHeight=cOverallHeight+shiftToChildBottom;
|
||||
width=cWidth;
|
||||
if (prevNodeSize!=nullptr) strikeoutPos=prevNodeSize->strikeoutPos;
|
||||
if (prevNodeSizeForSpecialPlacement!=nullptr) strikeoutPos=prevNodeSizeForSpecialPlacement->strikeoutPos;
|
||||
else strikeoutPos=fm.strikeOutPos();
|
||||
if (currentEv.italic && prevNodeSize==nullptr) width=width+double(fm.boundingRect(' ').width())*parentMathText->getItalicCorrectionFactor();
|
||||
if (currentEv.italic && prevNodeSizeForSpecialPlacement==nullptr) width=width+double(fm.boundingRect(' ').width())*parentMathText->getItalicCorrectionFactor();
|
||||
}
|
||||
|
||||
double JKQTMathTextSuperscriptNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextSuperscriptNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
getSizeWithSpecialPlacement(painter, currentEv, width, baselineHeight, overallHeight, strikeoutPos, nullptr);
|
||||
}
|
||||
|
||||
double JKQTMathTextSuperscriptNode::drawWithSpecialPlacement(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getSubsuperSizeFactor();
|
||||
@ -80,17 +85,22 @@ double JKQTMathTextSuperscriptNode::draw(QPainter& painter, double x, double y,
|
||||
const double childDescent=cOverallHeight-cBaselineHeight;
|
||||
double shiftToChildBottom=parentMathText->getSuperShiftFactor()*fm.xHeight();
|
||||
|
||||
if (prevNodeSize!=nullptr) {
|
||||
const double modifiedShift=prevNodeSize->baselineHeight-childDescent-parentMathText->getSpecialSuperShiftFactor()*cBaselineHeight-childDescent;
|
||||
if (prevNodeSizeForSpecialPlacement!=nullptr) {
|
||||
const double modifiedShift=prevNodeSizeForSpecialPlacement->baselineHeight-childDescent-parentMathText->getSpecialSuperShiftFactor()*cBaselineHeight-childDescent;
|
||||
if (modifiedShift>shiftToChildBottom) shiftToChildBottom=modifiedShift;
|
||||
}
|
||||
|
||||
double xx=x;
|
||||
if (currentEv.italic && prevNodeSize==nullptr) xx=xx+double(fm.boundingRect(' ').width())*parentMathText->getItalicCorrectionFactor();
|
||||
if (currentEv.italic && prevNodeSizeForSpecialPlacement==nullptr) xx=xx+double(fm.boundingRect(' ').width())*parentMathText->getItalicCorrectionFactor();
|
||||
|
||||
return getChild()->draw(painter, xx, y-(shiftToChildBottom+childDescent), ev);//+0.5*fm.boundingRect("A").width();
|
||||
}
|
||||
|
||||
double JKQTMathTextSuperscriptNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
return drawWithSpecialPlacement(painter, x, y, currentEv, nullptr);
|
||||
}
|
||||
|
||||
|
||||
QString JKQTMathTextSuperscriptNode::getTypeName() const
|
||||
{
|
||||
@ -121,20 +131,21 @@ JKQTMathTextSubscriptNode::~JKQTMathTextSubscriptNode() {
|
||||
|
||||
}
|
||||
|
||||
void JKQTMathTextSubscriptNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextSubscriptNode::getSizeWithSpecialPlacement(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement) {
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getSubsuperSizeFactor();
|
||||
const QFontMetricsF fm(ev.getFont(parentMathText), painter.device());
|
||||
const QRectF tbr_of_letterM=JKQTMathTextGetTightBoundingRect(currentEv.getFont(parentMathText), "M", painter.device());
|
||||
//const QRectF tbr_of_letterM=JKQTMathTextGetTightBoundingRect(currentEv.getFont(parentMathText), "M", painter.device());
|
||||
const double italic_xshift=qMax(0.0,-fm.rightBearing('x'));// double(fm.boundingRect('x').width())*parentMathText->getItalicCorrectionFactor();
|
||||
|
||||
double cWidth=0, cBaselineHeight=0, cOverallHeight=0, cStrikeoutPos=0;
|
||||
getChild()->getSize(painter, ev, cWidth, cBaselineHeight, cOverallHeight, cStrikeoutPos);
|
||||
//const double childDescent=cOverallHeight-cBaselineHeight;
|
||||
double shift_to_childBaseline=cBaselineHeight-parentMathText->getSubShiftFactor()*fm.xHeight();
|
||||
|
||||
if (prevNodeSize!=nullptr) {
|
||||
if (prevNodeSizeForSpecialPlacement!=nullptr) {
|
||||
//qDebug()<<"oldshift="<<shift<<", prevNodeSize->overallHeight="<<prevNodeSize->overallHeight<<", prevNodeSize->baselineHeight="<<prevNodeSize->baselineHeight;
|
||||
const double parentDescent=prevNodeSize->overallHeight-prevNodeSize->baselineHeight;
|
||||
const double parentDescent=prevNodeSizeForSpecialPlacement->overallHeight-prevNodeSizeForSpecialPlacement->baselineHeight;
|
||||
const double newShift=parentDescent+parentMathText->getSpecialSubShiftFactor()*cBaselineHeight;
|
||||
if (newShift>shift_to_childBaseline) shift_to_childBaseline=newShift;
|
||||
//qDebug()<<"newshift="<<shift;
|
||||
@ -142,26 +153,32 @@ void JKQTMathTextSubscriptNode::getSizeInternal(QPainter& painter, JKQTMathTextE
|
||||
|
||||
baselineHeight=cBaselineHeight-shift_to_childBaseline;
|
||||
overallHeight=cOverallHeight;
|
||||
if (prevNodeSize!=nullptr) strikeoutPos=prevNodeSize->strikeoutPos;
|
||||
if (prevNodeSizeForSpecialPlacement!=nullptr) strikeoutPos=prevNodeSizeForSpecialPlacement->strikeoutPos;
|
||||
else strikeoutPos=fm.strikeOutPos();
|
||||
width=cWidth;
|
||||
if (currentEv.italic && prevNodeSize==nullptr) width=width-double(fm.boundingRect(' ').width())*parentMathText->getItalicCorrectionFactor();
|
||||
if (currentEv.italic && prevNodeSizeForSpecialPlacement==nullptr) width=width-italic_xshift;
|
||||
}
|
||||
|
||||
double JKQTMathTextSubscriptNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextSubscriptNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
getSizeWithSpecialPlacement(painter, currentEv, width, baselineHeight, overallHeight, strikeoutPos, nullptr);
|
||||
}
|
||||
|
||||
double JKQTMathTextSubscriptNode::drawWithSpecialPlacement(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
ev.fontSize=ev.fontSize*parentMathText->getSubsuperSizeFactor();
|
||||
const QFontMetricsF fm(ev.getFont(parentMathText), painter.device());
|
||||
const QRectF tbr_of_letterM=JKQTMathTextGetTightBoundingRect(currentEv.getFont(parentMathText), "M", painter.device());
|
||||
//const QRectF tbr_of_letterM=JKQTMathTextGetTightBoundingRect(currentEv.getFont(parentMathText), "M", painter.device());
|
||||
|
||||
double cWidth=0, cBaselineHeight=0, cOverallHeight=0, cStrikeoutPos=0;
|
||||
getChild()->getSize(painter, ev, cWidth, cBaselineHeight, cOverallHeight, cStrikeoutPos);
|
||||
double shift_to_childBaseline=cBaselineHeight-parentMathText->getSubShiftFactor()*fm.xHeight();
|
||||
const double italic_xshift=qMax(0.0,-fm.rightBearing('x'));// double(fm.boundingRect('x').width())*parentMathText->getItalicCorrectionFactor();
|
||||
|
||||
if (prevNodeSize!=nullptr) {
|
||||
if (prevNodeSizeForSpecialPlacement!=nullptr) {
|
||||
//qDebug()<<"oldshift="<<shift<<", prevNodeSize->overallHeight="<<prevNodeSize->overallHeight<<", prevNodeSize->baselineHeight="<<prevNodeSize->baselineHeight;
|
||||
const double parentDescent=prevNodeSize->overallHeight-prevNodeSize->baselineHeight;
|
||||
const double parentDescent=prevNodeSizeForSpecialPlacement->overallHeight-prevNodeSizeForSpecialPlacement->baselineHeight;
|
||||
const double newShift=parentDescent+parentMathText->getSpecialSubShiftFactor()*cBaselineHeight;
|
||||
if (newShift>shift_to_childBaseline) shift_to_childBaseline=newShift;
|
||||
//qDebug()<<"newshift="<<shift;
|
||||
@ -170,10 +187,18 @@ double JKQTMathTextSubscriptNode::draw(QPainter& painter, double x, double y, JK
|
||||
//qDebug()<<"baselineHeight="<<baselineHeight<<", overallHeight="<<overallHeight<<", strikeoutPos="<<strikeoutPos;
|
||||
//qDebug()<<"shift="<<shift<<", yshift="<<yshift;
|
||||
double xx=x;
|
||||
if (currentEv.italic && prevNodeSize==nullptr) xx=xx-double(fm.boundingRect(' ').width())*parentMathText->getItalicCorrectionFactor();
|
||||
if (currentEv.italic && prevNodeSizeForSpecialPlacement==nullptr) {
|
||||
std::cout<<"italic_xshift="<<italic_xshift<<"\n";
|
||||
xx=xx-italic_xshift;
|
||||
}
|
||||
return getChild()->draw(painter, xx, y+shift_to_childBaseline, ev);//+0.5*fm.boundingRect("A").width();
|
||||
}
|
||||
|
||||
double JKQTMathTextSubscriptNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
return drawWithSpecialPlacement(painter, x, y, currentEv, nullptr);
|
||||
}
|
||||
|
||||
QString JKQTMathTextSubscriptNode::getTypeName() const
|
||||
{
|
||||
return "MTsubscriptNode";
|
||||
|
@ -41,15 +41,38 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSubscriptNode: public JKQTMathTextSing
|
||||
public:
|
||||
explicit JKQTMathTextSubscriptNode(JKQTMathText* parent, JKQTMathTextNode* child);
|
||||
virtual ~JKQTMathTextSubscriptNode() override;
|
||||
/** \brief like draw(), i.e. draws the node, but allows to draw the subscript with special placement rules after large blocks (e.g. braces), when \a prevNodeSizeForSpecialPlacement is not \c nullptr
|
||||
*
|
||||
* \param painter QPainter to use
|
||||
* \param x x-position, where the drawing starts [Pixel]
|
||||
* \param y Y-position of the baseline, where the drawing starts [Pixel]
|
||||
* \param currentEv JKQTMathTextEnvironment object describing the current drawing environment/settings
|
||||
* \param[in] prevNodeSizeForSpecialPlacement optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
* \return the x position which to use for the next part of the text
|
||||
*/
|
||||
double drawWithSpecialPlacement(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement);
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override; /** \brief returns the child node */
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \brief like getSize(), i.e. determine the size of the node, but cares for subscript with special placement rules after large blocks (e.g. braces), when \a prevNodeSizeForSpecialPlacement is not \c nullptr
|
||||
*
|
||||
* \param painter painter to use for determining the size
|
||||
* \param currentEv current environment object
|
||||
* \param[out] width width of the block/node
|
||||
* \param[out] baselineHeight distance from the bottom of the block/node-box to the baseline
|
||||
* \param[out] overallHeight overall height (bottom to top) of the node, the ascent is \c overallHeight-baselineHeight
|
||||
* \param[out] strikeoutPos position of the strikeout-line
|
||||
* \param[in] prevNodeSizeForSpecialPlacement optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
*/
|
||||
void getSizeWithSpecialPlacement(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement);
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
};
|
||||
|
||||
/** \brief subclass representing an superscript node with exactly one argument in the syntax tree
|
||||
@ -63,15 +86,38 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSuperscriptNode: public JKQTMathTextSi
|
||||
public:
|
||||
explicit JKQTMathTextSuperscriptNode(JKQTMathText* parent, JKQTMathTextNode* child);
|
||||
virtual ~JKQTMathTextSuperscriptNode() override;
|
||||
/** \brief like draw(), but allows to draw the superscript with special placement rules after large blocks (e.g. braces), when \a prevNodeSizeForSpecialPlacement is not \c nullptr
|
||||
*
|
||||
* \param painter QPainter to use
|
||||
* \param x x-position, where the drawing starts [Pixel]
|
||||
* \param y Y-position of the baseline, where the drawing starts [Pixel]
|
||||
* \param currentEv JKQTMathTextEnvironment object describing the current drawing environment/settings
|
||||
* \param[in] prevNodeSizeForSpecialPlacement optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
* \return the x position which to use for the next part of the text
|
||||
*/
|
||||
double drawWithSpecialPlacement(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement);
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \brief like getSize(), i.e. determine the size of the node, but cares for superscript with special placement rules after large blocks (e.g. braces), when \a prevNodeSizeForSpecialPlacement is not \c nullptr
|
||||
*
|
||||
* \param painter painter to use for determining the size
|
||||
* \param currentEv current environment object
|
||||
* \param[out] width width of the block/node
|
||||
* \param[out] baselineHeight distance from the bottom of the block/node-box to the baseline
|
||||
* \param[out] overallHeight overall height (bottom to top) of the node, the ascent is \c overallHeight-baselineHeight
|
||||
* \param[out] strikeoutPos position of the strikeout-line
|
||||
* \param[in] prevNodeSizeForSpecialPlacement optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
*/
|
||||
void getSizeWithSpecialPlacement(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSizeForSpecialPlacement) ;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
};
|
||||
|
||||
#endif // JKQTMATHTEXTSUBSUPERSCRIPTNODE_H
|
||||
|
@ -51,12 +51,12 @@ QString JKQTMathTextSymbolNode::getTypeName() const
|
||||
}
|
||||
|
||||
|
||||
void JKQTMathTextSymbolNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize) {
|
||||
void JKQTMathTextSymbolNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
double dummy1, dummy2;
|
||||
getSymbolSizeInternal(painter, currentEv, width, baselineHeight, overallHeight, strikeoutPos, dummy1, dummy2, prevNodeSize);
|
||||
getSymbolSizeInternal(painter, currentEv, width, baselineHeight, overallHeight, strikeoutPos, dummy1, dummy2);
|
||||
}
|
||||
|
||||
void JKQTMathTextSymbolNode::getSymbolSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, double &subSuperXCorrection, double &subBesidesXCorrection, const JKQTMathTextNodeSize */*prevNodeSize*/)
|
||||
void JKQTMathTextSymbolNode::getSymbolSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, double &subSuperXCorrection, double &subBesidesXCorrection)
|
||||
{
|
||||
const auto fullProps=symbols.value(symbolName, SymbolFullProps());
|
||||
const GlobalSymbolFlags globalFlags=fullProps.globalFlags;
|
||||
@ -193,7 +193,7 @@ void JKQTMathTextSymbolNode::drawText(QPainter &p, const QString &text, GlobalSy
|
||||
}
|
||||
|
||||
|
||||
double JKQTMathTextSymbolNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextSymbolNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
double width=0;
|
||||
double baselineHeight=0;
|
||||
@ -288,16 +288,11 @@ QString JKQTMathTextSymbolNode::getSymbolName() const {
|
||||
return this->symbolName;
|
||||
}
|
||||
|
||||
void JKQTMathTextSymbolNode::getSymbolSize(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, double &subSuperXCorrection, double &subBesidesXCorrection, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
JKQTMathTextSymbolNode::NodeSize JKQTMathTextSymbolNode::getSymbolSize(QPainter &painter, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
double w=width, b=baselineHeight, o=overallHeight, s=strikeoutPos;
|
||||
getSymbolSizeInternal(painter, currentEv, w, b, o, s, subSuperXCorrection, subBesidesXCorrection, prevNodeSize);
|
||||
|
||||
if (w<1e5) width=w;
|
||||
if (b<1e5) baselineHeight=b;
|
||||
if (o<1e5) overallHeight=o;
|
||||
if (s<1e5) strikeoutPos=s;
|
||||
|
||||
NodeSize s;
|
||||
getSymbolSizeInternal(painter, currentEv, s.width, s.baselineHeight, s.overallHeight, s.strikeoutPos, s.subSuperXCorrection, s.subBesidesXCorrection);
|
||||
return s;
|
||||
}
|
||||
|
||||
bool JKQTMathTextSymbolNode::hasSymbol(const QString &symbolName)
|
||||
@ -1211,3 +1206,39 @@ QPair<QFont, JKQTMathTextSymbolNode::SymbolProps> JKQTMathTextSymbolNode::Symbol
|
||||
if (has(outProps.flags, BoldOff)) outFont.setBold(false);
|
||||
return QPair<QFont, SymbolProps>(outFont, outProps);
|
||||
}
|
||||
|
||||
JKQTMathTextSymbolNode::NodeSize::NodeSize():
|
||||
JKQTMathTextNodeSize(),
|
||||
subSuperXCorrection(0.0),
|
||||
subBesidesXCorrection(0.0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JKQTMathTextSymbolNode::NodeSize &JKQTMathTextSymbolNode::NodeSize::operator=(const JKQTMathTextNodeSize &other)
|
||||
{
|
||||
subSuperXCorrection=0;
|
||||
subBesidesXCorrection=0;
|
||||
JKQTMathTextNodeSize::operator=(other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
JKQTMathTextSymbolNode::NodeSize &JKQTMathTextSymbolNode::NodeSize::operator=(const NodeSize &other)
|
||||
{
|
||||
subSuperXCorrection=other.subSuperXCorrection;
|
||||
subBesidesXCorrection=other.subBesidesXCorrection;
|
||||
JKQTMathTextNodeSize::operator=(other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
JKQTMathTextSymbolNode::NodeSize::NodeSize(const JKQTMathTextNodeSize &other):
|
||||
NodeSize()
|
||||
{
|
||||
operator=(other);
|
||||
}
|
||||
|
||||
JKQTMathTextSymbolNode::NodeSize::NodeSize(const NodeSize &other):
|
||||
NodeSize()
|
||||
{
|
||||
operator=(other);
|
||||
}
|
||||
|
@ -62,25 +62,33 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSymbolNode: public JKQTMathTextNode {
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
/** \copydoc symbolName */
|
||||
QString getSymbolName() const;
|
||||
/** \brief return type for getSymbolSize(), extends JKQTMathTextNodeSize with information about x-correction for sub- and superscript */
|
||||
struct NodeSize : JKQTMathTextNodeSize {
|
||||
NodeSize();
|
||||
/** \brief x-correction as described for JKQTMathParser::intsubsuper_xcorrection_factor for placing sub-/superscript below/above the symbol, e.g. for integral signs, where the subscript is slightly shifted to the left (from center) and the superscript slightly to the right */
|
||||
double subSuperXCorrection;
|
||||
/** \brief x-correction as described for JKQTMathParser::intsubbesides_xcorrection_xfactor for placing sub-/superscript besides the symbol */
|
||||
double subBesidesXCorrection;
|
||||
|
||||
NodeSize& operator=(const JKQTMathTextNodeSize& other);
|
||||
NodeSize& operator=(const NodeSize& other);
|
||||
NodeSize(const JKQTMathTextNodeSize& other);
|
||||
NodeSize(const NodeSize& other);
|
||||
};
|
||||
|
||||
/** \brief determine the size of the node, calls getSizeInternal() implementation of the actual type \see getSizeInternal()
|
||||
*
|
||||
* \param painter painter to use for determining the size
|
||||
* \param currentEv current environment object
|
||||
* \param[out] width width of the block/node
|
||||
* \param[out] baselineHeight distance from the bottom of the block/node-box to the baseline
|
||||
* \param[out] overallHeight overall height (bottom to top) of the node, the ascent is \c overallHeight-baselineHeight
|
||||
* \param[out] strikeoutPos position of the strikeout-line
|
||||
* \param[out] subSuperXCorrection x-correction as described for JKQTMathParser::intsubsuper_xcorrection_factor for placing sub-/superscript below/above the symbol
|
||||
* \param[out] subBesidesXCorrection x-correction as described for JKQTMathParser::intsubbesides_xcorrection_xfactor for placing sub-/superscript below/above the symbol
|
||||
* \param[in] prevNodeSize optional parameter, describing the size of the previous node (on the left). This may be used for layout of some nodes (e.g. sub/super to move correctly next to large parantheses ...)
|
||||
*
|
||||
* \return all important size properties, packed into a NodeSize struct
|
||||
*/
|
||||
void getSymbolSize(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, double& subSuperXCorrection, double& subBesidesXCorrection, const JKQTMathTextNodeSize* prevNodeSize=nullptr);
|
||||
NodeSize getSymbolSize(QPainter& painter, JKQTMathTextEnvironment currentEv);
|
||||
/** \brief checks whether the given symbol name can be prepresented by this type of node */
|
||||
static bool hasSymbol(const QString& symbolName);
|
||||
/** \brief return a list of all defined symbols */
|
||||
@ -93,9 +101,9 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSymbolNode: public JKQTMathTextNode {
|
||||
static int getSymbolLength(const QString& symbolName);
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \copydoc JKQTMathTextSymbolNode::getSymbolSize() */
|
||||
virtual void getSymbolSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, double& subSuperXCorrection, double& subBesidesXCorrection, const JKQTMathTextNodeSize* prevNodeSize=nullptr) ;
|
||||
virtual void getSymbolSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, double& subSuperXCorrection, double& subBesidesXCorrection) ;
|
||||
|
||||
|
||||
/** \brief this string will be sent to the drawText method with properly set fonts */
|
||||
|
@ -121,7 +121,7 @@ JKQTMathTextTextNode::JKQTMathTextTextNode(JKQTMathText* _parent, const QString&
|
||||
|
||||
JKQTMathTextTextNode::~JKQTMathTextTextNode() = default;
|
||||
|
||||
void JKQTMathTextTextNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextTextNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
QStringList textpart;
|
||||
QList<FontMode> fontMode;
|
||||
QList<double> textpartXPos;
|
||||
@ -275,7 +275,7 @@ void JKQTMathTextTextNode::splitTextForLayout(QPainter &painter, JKQTMathTextEnv
|
||||
}
|
||||
}
|
||||
|
||||
double JKQTMathTextTextNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextTextNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
double width=0;
|
||||
double baselineHeight=0;
|
||||
@ -430,7 +430,7 @@ size_t JKQTMathTextVerbatimNode::getTabSize() const
|
||||
return tabSize;
|
||||
}
|
||||
|
||||
double JKQTMathTextVerbatimNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
double JKQTMathTextVerbatimNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
transformEnvironment(currentEv);
|
||||
@ -468,7 +468,7 @@ bool JKQTMathTextVerbatimNode::toHtml(QString &html, JKQTMathTextEnvironment cur
|
||||
return true;
|
||||
}
|
||||
|
||||
void JKQTMathTextVerbatimNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
void JKQTMathTextVerbatimNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
transformEnvironment(currentEv);
|
||||
const LayoutInfo l=calcLayout(painter, currentEv);
|
||||
|
@ -65,7 +65,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextTextNode: public JKQTMathTextTextBaseN
|
||||
explicit JKQTMathTextTextNode(JKQTMathText* parent, const QString& text, bool addWhitespace, bool stripInnerWhitepace=false);
|
||||
virtual ~JKQTMathTextTextNode() override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override ;
|
||||
/** \brief remove trailing whitespace, is used by simplifyJKQTMathTextNode() */
|
||||
@ -82,7 +82,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextTextNode: public JKQTMathTextTextBaseN
|
||||
FMfallbackSymbol, /*!< \brief use JKQTMathText::getFallbackFontSymbols() */
|
||||
};
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief calculates the size of the node, much like JKQTMathTextNode::getSizeInternal(), but returns additional properties that can be reused for drawing */
|
||||
void getSizeInternalAndData(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, QStringList& textpart, QList<FontMode>& fontMode, QList<double>& textpartXPos) ;
|
||||
/** \brief split text for Math-Modelayout into sections, where each section has a defined way of output
|
||||
@ -130,7 +130,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerbatimNode: public JKQTMathTextTextB
|
||||
/** \copydoc tabSize */
|
||||
size_t getTabSize() const;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
protected:
|
||||
@ -157,7 +157,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerbatimNode: public JKQTMathTextTextB
|
||||
size_t tabSize;
|
||||
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief sets all necessary settings in \a currentEv for drawing this node */
|
||||
virtual void transformEnvironment(JKQTMathTextEnvironment& currentEv) const;
|
||||
|
||||
|
@ -92,6 +92,19 @@ JKQTMathTextWhitespaceNode::WhitespaceProps::WhitespaceProps(JKQTMathTextWhitesp
|
||||
|
||||
}
|
||||
|
||||
JKQTMathTextWhitespaceNode::WhitespaceProps::WhitespaceProps(const WhitespaceProps &other):
|
||||
type(other.type), count(other.count)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JKQTMathTextWhitespaceNode::WhitespaceProps& JKQTMathTextWhitespaceNode::WhitespaceProps::operator=(const WhitespaceProps &other)
|
||||
{
|
||||
type=other.type;
|
||||
count=other.count;
|
||||
return *this;
|
||||
}
|
||||
|
||||
JKQTMathTextWhitespaceNode::Types JKQTMathTextWhitespaceNode::getWhitespaceType() const
|
||||
{
|
||||
return whitespace.type;
|
||||
@ -102,15 +115,15 @@ size_t JKQTMathTextWhitespaceNode::getWhitespaceCount() const
|
||||
return whitespace.count;
|
||||
}
|
||||
|
||||
double JKQTMathTextWhitespaceNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
double JKQTMathTextWhitespaceNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
doDrawBoxes(painter, x,y,currentEv);
|
||||
double width=0, bh=0, oh=0, sp=0;
|
||||
getSize(painter, currentEv, width, bh, oh, sp, prevNodeSize);
|
||||
getSize(painter, currentEv, width, bh, oh, sp);
|
||||
return x+width;
|
||||
}
|
||||
|
||||
void JKQTMathTextWhitespaceNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, const JKQTMathTextNodeSize */*prevNodeSize*/)
|
||||
void JKQTMathTextWhitespaceNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
const double singelWidthPIX=Type2PixelWidth(whitespace.type, currentEv, painter.device());
|
||||
const QFontMetricsF fm(currentEv.getFont(parentMathText));
|
||||
@ -127,13 +140,19 @@ void JKQTMathTextWhitespaceNode::fillSupportedInstructions()
|
||||
if (supportedInstructions.size()==0) {
|
||||
supportedInstructions[" "]=WhitespaceProps(WSTthicker, 1);
|
||||
supportedInstructions["nbsp"]=WhitespaceProps(WSTNonbreaking, 1);
|
||||
supportedInstructions["enspace"]=supportedInstructions["enskip"]=WhitespaceProps(WST1en, 1);
|
||||
supportedInstructions["quad"]=supportedInstructions["emspace"]=WhitespaceProps(WSTQuad, 1);
|
||||
supportedInstructions["enspace"]=WhitespaceProps(WST1en, 1);
|
||||
supportedInstructions["enskip"]=WhitespaceProps(WST1en, 1);
|
||||
supportedInstructions["quad"]=WhitespaceProps(WSTQuad, 1);
|
||||
supportedInstructions["emspace"]=WhitespaceProps(WSTQuad, 1);
|
||||
supportedInstructions["qquad"]=WhitespaceProps(WSTQuad, 2);
|
||||
supportedInstructions[","]=supportedInstructions["thinspace"]=WhitespaceProps(WSTthin, 1);
|
||||
supportedInstructions[":"]=supportedInstructions["medspace"]=WhitespaceProps(WSTmedium, 1);
|
||||
supportedInstructions[";"]=supportedInstructions["thickspace"]=WhitespaceProps(WSTthick, 1);
|
||||
supportedInstructions["!"]=supportedInstructions["negthinspace"]=WhitespaceProps(WSTnegthin, 1);
|
||||
supportedInstructions[","]=WhitespaceProps(WSTthin, 1);
|
||||
supportedInstructions["thinspace"]=WhitespaceProps(WSTthin, 1);
|
||||
supportedInstructions[":"]=WhitespaceProps(WSTmedium, 1);
|
||||
supportedInstructions["medspace"]=WhitespaceProps(WSTmedium, 1);
|
||||
supportedInstructions[";"]=WhitespaceProps(WSTthick, 1);
|
||||
supportedInstructions["thickspace"]=WhitespaceProps(WSTthick, 1);
|
||||
supportedInstructions["!"]=WhitespaceProps(WSTnegthin, 1);
|
||||
supportedInstructions["negthinspace"]=WhitespaceProps(WSTnegthin, 1);
|
||||
supportedInstructions["negmedspace"]=WhitespaceProps(WSTnegmedium, 1);
|
||||
supportedInstructions["negthickspace"]=WhitespaceProps(WSTnegthick, 1);
|
||||
}
|
||||
@ -300,14 +319,14 @@ double JKQTMathTextEmptyBoxNode::getHeight() const
|
||||
return height;
|
||||
}
|
||||
|
||||
double JKQTMathTextEmptyBoxNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize *prevNodeSize)
|
||||
double JKQTMathTextEmptyBoxNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv)
|
||||
{
|
||||
doDrawBoxes(painter, x,y,currentEv);
|
||||
const auto s=getSize(painter, currentEv);
|
||||
return x+s.width;
|
||||
}
|
||||
|
||||
void JKQTMathTextEmptyBoxNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos, const JKQTMathTextNodeSize */*prevNodeSize*/)
|
||||
void JKQTMathTextEmptyBoxNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv, double &width, double &baselineHeight, double &overallHeight, double &strikeoutPos)
|
||||
{
|
||||
const QFontMetricsF fm(currentEv.getFont(parentMathText), painter.device());
|
||||
width=Units2PixelWidth(this->width, widthUnit, currentEv, painter.device());
|
||||
@ -364,7 +383,7 @@ QString JKQTMathTextPhantomNode::getTypeName() const
|
||||
return QLatin1String("JKQTMathTextPhantomNode(")+instructionName+")";
|
||||
}
|
||||
|
||||
void JKQTMathTextPhantomNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
void JKQTMathTextPhantomNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) {
|
||||
fillInstructions();
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
|
||||
@ -384,7 +403,7 @@ void JKQTMathTextPhantomNode::getSizeInternal(QPainter& painter, JKQTMathTextEnv
|
||||
}
|
||||
}
|
||||
|
||||
double JKQTMathTextPhantomNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* /*prevNodeSize*/) {
|
||||
double JKQTMathTextPhantomNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) {
|
||||
doDrawBoxes(painter, x, y, currentEv);
|
||||
JKQTMathTextEnvironment ev=currentEv;
|
||||
|
||||
|
@ -82,13 +82,15 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextWhitespaceNode: public JKQTMathTextNod
|
||||
/** \copydoc WhitespaceProps::count */
|
||||
size_t getWhitespaceCount() const;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief describes a whitespace */
|
||||
struct WhitespaceProps {
|
||||
WhitespaceProps(Types type=WSTNormal, size_t count=1);
|
||||
WhitespaceProps(const WhitespaceProps& other);
|
||||
WhitespaceProps& operator=(const WhitespaceProps& other);
|
||||
/** \brief type of the whitespace represented by this node */
|
||||
Types type;
|
||||
/** \brief number of whitespaces of the given type, represented by this node (default: 1) */
|
||||
@ -137,10 +139,10 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextEmptyBoxNode: public JKQTMathTextNode
|
||||
/** \copydoc height */
|
||||
double getHeight() const;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief width of the (empty) box, units of this value defined in widthUnit */
|
||||
double width;
|
||||
/** \brief units to interpret width */
|
||||
@ -173,7 +175,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextPhantomNode: public JKQTMathTextInstru
|
||||
/** \copydoc JKQTMathTextNode::getTypeName() */
|
||||
virtual QString getTypeName() const override;
|
||||
/** \copydoc JKQTMathTextNode::draw() */
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) override;
|
||||
/** \copydoc JKQTMathTextNode::toHtml() */
|
||||
virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) override;
|
||||
|
||||
@ -184,7 +186,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextPhantomNode: public JKQTMathTextInstru
|
||||
|
||||
protected:
|
||||
/** \copydoc JKQTMathTextNode::getSizeInternal() */
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos, const JKQTMathTextNodeSize* prevNodeSize=nullptr) override;
|
||||
virtual void getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv, double& width, double& baselineHeight, double& overallHeight, double& strikeoutPos) override;
|
||||
/** \brief fills instructions
|
||||
*
|
||||
* \note this is the customization point for new instructions!
|
||||
|