diff options
author | Takeshi Abe <tabe@fixedpoint.jp> | 2016-09-25 19:56:52 +0900 |
---|---|---|
committer | Khaled Hosny <khaledhosny@eglug.org> | 2016-09-29 20:13:26 +0000 |
commit | 663e26f24f1fa1abadc37838983bebd7407d65f8 (patch) | |
tree | 27217b4520199f2fb3eff00d3c02b223563cad44 /starmath/source/node.cxx | |
parent | 38d61128467aedc2935443be21c38168f5e00df6 (diff) |
tdf#53472, tdf#102268: Reimplement "intd"
This reverts its original implementation introduced with
93e6291c29d547c0c29c6e43b2ca4b36a3e8506f partially, and
improves the patch proposed at 746633bd0315939fd5e0b50c90692d356d2ed678
(but reverted at e265ea36df02310881e959a031b74578b323bfa5).
Change-Id: If0aa5b985cac45a1cd9ea87bae293243af9d12b2
Reviewed-on: https://gerrit.libreoffice.org/29271
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Khaled Hosny <khaledhosny@eglug.org>
Diffstat (limited to 'starmath/source/node.cxx')
-rw-r--r-- | starmath/source/node.cxx | 94 |
1 files changed, 12 insertions, 82 deletions
diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx index efd26e70b0fa..e6ee8834d5c9 100644 --- a/starmath/source/node.cxx +++ b/starmath/source/node.cxx @@ -775,53 +775,6 @@ void SmRootNode::CreateTextFromNode(OUString &rText) /**************************************************************************/ -void SmDynIntegralNode::Arrange(OutputDevice &rDev, const SmFormat &rFormat) -{ - SmNode *pDynIntegralSym = Symbol(), - *pBody = Body(); - assert(pDynIntegralSym); - assert(pBody); - - pBody->Arrange(rDev, rFormat); - - long nHeight = pBody->GetHeight(); - pDynIntegralSym->AdaptToY(rDev, nHeight); - - pDynIntegralSym->Arrange(rDev, rFormat); - - Point aPos = pDynIntegralSym->AlignTo(*pBody, RectPos::Left, RectHorAlign::Center, RectVerAlign::Baseline); - //! override calculated vertical position - aPos.Y() = pDynIntegralSym->GetTop() + pBody->GetBottom() - pDynIntegralSym->GetBottom(); - pDynIntegralSym->MoveTo(aPos); - - - // override its own rectangle with pBody's - SmRect::operator = (*pBody); - // extends this rectangle with the symbol's one - ExtendBy(*pDynIntegralSym, RectCopyMBL::This); - -} - - -void SmDynIntegralNode::CreateTextFromNode(OUString &rText) -{ - - rText += "intd "; - SmNode *pBody = Body(); - - if (pBody->GetNumSubNodes() > 1) - rText += "{ "; - - pBody->CreateTextFromNode(rText); - - if (pBody->GetNumSubNodes() > 1) - rText += "} "; -} - - -/**************************************************************************/ - - void SmBinHorNode::Arrange(OutputDevice &rDev, const SmFormat &rFormat) { SmNode *pLeft = LeftOperand(), @@ -1663,30 +1616,33 @@ void SmOperNode::Arrange(OutputDevice &rDev, const SmFormat &rFormat) assert(pOper); assert(pBody); - //patch pBody->Arrange(rDev,rFormat); - //patch long nHeight = pBody->GetHeight(); SmNode *pSymbol = GetSymbol(); pSymbol->SetSize(Fraction(CalcSymbolHeight(*pSymbol, rFormat), pSymbol->GetFont().GetFontSize().Height())); pBody->Arrange(rDev, rFormat); + bool bDynamicallySized = false; + if (pSymbol->GetToken().eType == TINTD) + { + long nBodyHeight = pBody->GetHeight(); + long nFontHeight = pSymbol->GetFont().GetFontSize().Height(); + if (nFontHeight < nBodyHeight) + { + pSymbol->SetSize(Fraction(nBodyHeight, nFontHeight)); + bDynamicallySized = true; + } + } pOper->Arrange(rDev, rFormat); - //patch pSymbol->AdaptToY(rDev,nHeight); - //patch pSymbol->Arrange(rDev, rFormat); - //patch Point aPos= pSymbol->AlignTo(*pBody, RectPos::Left, RectHorAlign::Center, RectVerAlign::Mid); - //patch aPos.Y() = pSymbol->GetTop()+pBody->GetBottom() - pSymbol->GetBottom(); - //patch pSymbol->MoveTo(aPos); long nOrigHeight = GetFont().GetFontSize().Height(), nDist = nOrigHeight * rFormat.GetDistance(DIS_OPERATORSPACE) / 100L; - Point aPos = pOper->AlignTo(*pBody, RectPos::Left, RectHorAlign::Center, /*RectVerAlign::CenterY*/RectVerAlign::Mid); + Point aPos = pOper->AlignTo(*pBody, RectPos::Left, RectHorAlign::Center, bDynamicallySized ? RectVerAlign::CenterY : RectVerAlign::Mid); aPos.X() -= nDist; pOper->MoveTo(aPos); SmRect::operator = (*pBody); - //patch ExtendBy(*pSymbol, RectCopyMBL::This); ExtendBy(*pOper, RectCopyMBL::This); } @@ -2040,23 +1996,6 @@ void SmRootSymbolNode::AdaptToY(OutputDevice &rDev, sal_uLong nHeight) /**************************************************************************/ -void SmDynIntegralSymbolNode::AdaptToY(OutputDevice &rDev, sal_uLong nHeight) -{ - static const long nFactor = 12L; - - // The new height equals (1 + nFactor) * oldHeight - // nFactor was chosen for keeping the integral sign from becoming too "fat". - SmMathSymbolNode::AdaptToY(rDev, nHeight + nHeight / nFactor); - - // keep the ratio - long nCurWidth = GetSize().Width(); - SmMathSymbolNode::AdaptToX(rDev, nCurWidth + nCurWidth / nFactor); -} - - -/**************************************************************************/ - - void SmRectangleNode::AdaptToX(OutputDevice &/*rDev*/, sal_uLong nWidth) { aToSize.Width() = nWidth; @@ -2938,15 +2877,6 @@ void SmRootSymbolNode::Accept(SmVisitor* pVisitor) { pVisitor->Visit(this); } -void SmDynIntegralNode::Accept(SmVisitor* pVisitor) { - pVisitor->Visit(this); -} - - -void SmDynIntegralSymbolNode::Accept(SmVisitor* pVisitor) { - pVisitor->Visit(this); -} - void SmRectangleNode::Accept(SmVisitor* pVisitor) { pVisitor->Visit(this); } |