mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
For bug #72300
This commit is contained in:
@ -53,7 +53,7 @@ namespace MetaFile
|
||||
virtual void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, unsigned int nBlendMode) = 0;
|
||||
|
||||
virtual void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) = 0;
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) = 0;
|
||||
|
||||
virtual void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) = 0;
|
||||
|
||||
|
||||
@ -352,7 +352,7 @@ namespace MetaFile
|
||||
|
||||
}
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double _dX, double _dY, double* pDx, int iGraphicsMode, double dXScale, double dYScale)
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double _dX, double _dY, double* pDx, int iGraphicsMode, double dXScale, double dYScale, bool bExChars)
|
||||
{
|
||||
CheckEndPath();
|
||||
const IFont* pFont = m_pFile->GetFont();
|
||||
@ -681,11 +681,12 @@ namespace MetaFile
|
||||
m_pRenderer->put_BrushColor1(m_pFile->GetTextColor());
|
||||
m_pRenderer->put_BrushAlpha1(255);
|
||||
|
||||
if (bExChars)
|
||||
m_pRenderer->put_FontStringGID(TRUE);
|
||||
|
||||
// Рисуем сам текст
|
||||
if (NULL == pDx)
|
||||
{
|
||||
m_pRenderer->CommandDrawText(wsString, dX, dY, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned int unUnicodeLen = 0;
|
||||
@ -704,6 +705,9 @@ namespace MetaFile
|
||||
}
|
||||
}
|
||||
|
||||
if (bExChars)
|
||||
m_pRenderer->put_FontStringGID(FALSE);
|
||||
|
||||
if (bChangeCTM)
|
||||
m_pRenderer->ResetTransform();
|
||||
}
|
||||
|
||||
@ -218,7 +218,7 @@ namespace MetaFile
|
||||
void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, unsigned int unBlendMode) override {};
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override {};
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override {};
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override {};
|
||||
|
||||
|
||||
@ -80,10 +80,10 @@ namespace MetaFile
|
||||
}
|
||||
|
||||
void CEmfInterpretatorArray::DrawString(std::wstring &wsText, unsigned int unCharsCount, double dX, double dY, double *pDx,
|
||||
int iGraphicsMode, double dXScale, double dYScale)
|
||||
int iGraphicsMode, double dXScale, double dYScale, bool bExChars)
|
||||
{
|
||||
for (CEmfInterpretatorBase* pInterpretator : m_arInterpretators)
|
||||
pInterpretator->DrawString(wsText, unCharsCount, dX, dY, pDx, iGraphicsMode, dXScale, dYScale);
|
||||
pInterpretator->DrawString(wsText, unCharsCount, dX, dY, pDx, iGraphicsMode, dXScale, dYScale, bExChars);
|
||||
}
|
||||
|
||||
void CEmfInterpretatorArray::DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints)
|
||||
|
||||
@ -36,7 +36,7 @@ namespace MetaFile
|
||||
void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, unsigned int unBlendMode) override;
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override;
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override;
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override;
|
||||
|
||||
|
||||
@ -41,10 +41,10 @@ namespace MetaFile
|
||||
}
|
||||
|
||||
void CEmfInterpretatorRender::DrawString(std::wstring &wsText, unsigned int unCharsCount, double dX, double dY, double *pDx,
|
||||
int iGraphicsMode, double dXScale, double dYScale)
|
||||
int iGraphicsMode, double dXScale, double dYScale, bool bExChars)
|
||||
{
|
||||
if (NULL != m_pMetaFileRenderer)
|
||||
m_pMetaFileRenderer->DrawString(wsText, unCharsCount, dX, dY, pDx, iGraphicsMode, dXScale, dYScale);
|
||||
m_pMetaFileRenderer->DrawString(wsText, unCharsCount, dX, dY, pDx, iGraphicsMode, dXScale, dYScale, bExChars);
|
||||
}
|
||||
|
||||
void CEmfInterpretatorRender::DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints)
|
||||
|
||||
@ -22,7 +22,7 @@ namespace MetaFile
|
||||
void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, unsigned int unBlendMode) override;
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override;
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override;
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override;
|
||||
|
||||
|
||||
@ -202,7 +202,7 @@ namespace MetaFile
|
||||
void End() override {};
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override {};
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override {};
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override {};
|
||||
|
||||
|
||||
@ -216,7 +216,7 @@ namespace MetaFile
|
||||
void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, unsigned int unBlendMode) override {};
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override {};
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override {};
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override {};
|
||||
|
||||
|
||||
@ -411,7 +411,7 @@ namespace MetaFile
|
||||
}
|
||||
|
||||
void CEmfParserBase::DrawText(std::wstring &wsString, unsigned int unCharsCount, int _nX, int _nY,
|
||||
int *pnDx, int iGraphicsMode, TScale oScale)
|
||||
int *pnDx, int iGraphicsMode, TScale oScale, bool bExChars)
|
||||
{
|
||||
int nX = _nX;
|
||||
int nY = _nY;
|
||||
@ -448,7 +448,7 @@ namespace MetaFile
|
||||
}
|
||||
}
|
||||
|
||||
m_pInterpretator->DrawString(wsString, unCharsCount, dX, dY, pdDx, iGraphicsMode, oScale.X, oScale.Y);
|
||||
m_pInterpretator->DrawString(wsString, unCharsCount, dX, dY, pdDx, iGraphicsMode, oScale.X, oScale.Y, bExChars);
|
||||
|
||||
if (pdDx)
|
||||
delete[] pdDx;
|
||||
@ -480,7 +480,7 @@ namespace MetaFile
|
||||
}
|
||||
}
|
||||
|
||||
DrawText(wsText, oText.unChars, oText.oReference.X, oText.oReference.Y, pDx, iGraphicsMode, oScale);
|
||||
DrawText(wsText, oText.unChars, oText.oReference.X, oText.oReference.Y, pDx, iGraphicsMode, oScale, oText.unOptions & 0x00000010);
|
||||
|
||||
if (pDx)
|
||||
delete[] pDx;
|
||||
@ -550,7 +550,7 @@ namespace MetaFile
|
||||
}
|
||||
|
||||
if (unLen)
|
||||
DrawText(wsText, unLen, oText.oReference.X, oText.oReference.Y, pDx, iGraphicsMode, oScale);
|
||||
DrawText(wsText, unLen, oText.oReference.X, oText.oReference.Y, pDx, iGraphicsMode, oScale, oText.unOptions & 0x00000010);
|
||||
|
||||
if (pDx)
|
||||
delete[] pDx;
|
||||
|
||||
@ -156,7 +156,7 @@ namespace MetaFile
|
||||
void ArcTo(int nL, int nT, int nR, int nB, double dStart, double dSweep);
|
||||
|
||||
void DrawPath(bool bStroke, bool bFill, bool bClosePath = true);
|
||||
void DrawText(std::wstring &wsString, unsigned int unCharsCount, int _nX, int _nY, int *pnDx, int iGraphicsMode, TScale oScale);
|
||||
void DrawText(std::wstring &wsString, unsigned int unCharsCount, int _nX, int _nY, int *pnDx, int iGraphicsMode, TScale oScale, bool bExChars);
|
||||
void DrawTextA(TEmrTextA &oText, int iGraphicsMode, TScale oScale = TScale(1, 1));
|
||||
void DrawTextW(TEmrTextW &oText, int iGraphicsMode, TScale oScale = TScale(1, 1));
|
||||
|
||||
|
||||
@ -222,11 +222,6 @@ namespace MetaFile
|
||||
if (NULL == m_pParser || NULL == m_pParser->GetFont())
|
||||
return;
|
||||
|
||||
const std::wstring wsNormalizedText = StringNormalization(wsText);
|
||||
|
||||
if (wsNormalizedText.empty())
|
||||
return;
|
||||
|
||||
AddClip();
|
||||
|
||||
NodeAttributes arNodeAttributes;
|
||||
@ -401,19 +396,19 @@ namespace MetaFile
|
||||
|
||||
arNodeAttributes.Add(L"xml:space", L"preserve");
|
||||
|
||||
size_t unPosLineBreak = wsNormalizedText.find(L"\n");
|
||||
size_t unPosLineBreak = wsText.find(L"\n");
|
||||
|
||||
std::wstring wsXCoord;
|
||||
|
||||
if (arDx.empty() || arDx.size() < wsNormalizedText.length())
|
||||
if (arDx.empty() || arDx.size() < wsText.length())
|
||||
wsXCoord = ConvertToWString(dXCoord);
|
||||
else
|
||||
{
|
||||
std::vector<double> arXCoords(wsNormalizedText.length());
|
||||
std::vector<double> arXCoords(wsText.length());
|
||||
|
||||
arXCoords[0] = dXCoord;
|
||||
|
||||
for (unsigned int unIndex = 1; unIndex < wsNormalizedText.length(); ++unIndex)
|
||||
for (unsigned int unIndex = 1; unIndex < wsText.length(); ++unIndex)
|
||||
arXCoords[unIndex] = arDx[unIndex - 1] + arXCoords[unIndex - 1];
|
||||
|
||||
wsXCoord = ConvertToWString(arXCoords);
|
||||
@ -424,7 +419,7 @@ namespace MetaFile
|
||||
arNodeAttributes.Add(L"x", wsXCoord);
|
||||
arNodeAttributes.Add(L"y", dYCoord);
|
||||
|
||||
WriteNode(L"text", arNodeAttributes, wsNormalizedText);
|
||||
WriteNode(L"text", arNodeAttributes, StringNormalization(wsText));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -436,11 +431,11 @@ namespace MetaFile
|
||||
do
|
||||
{
|
||||
WriteNode(L"tspan", {{L"x", wsXCoord},
|
||||
{L"y", ConvertToWString(dYNewCoord)}}, wsNormalizedText.substr(unStart, unPosLineBreak - unStart));
|
||||
{L"y", ConvertToWString(dYNewCoord)}}, StringNormalization(wsText.substr(unStart, unPosLineBreak - unStart)));
|
||||
|
||||
dYNewCoord += dFontHeight * 1.6;
|
||||
unStart = wsNormalizedText.find_first_not_of(L"\n", unPosLineBreak);
|
||||
unPosLineBreak = wsNormalizedText.find(L"\n", unStart);
|
||||
unStart = wsText.find_first_not_of(L"\n", unPosLineBreak);
|
||||
unPosLineBreak = wsText.find(L"\n", unStart);
|
||||
}
|
||||
while(unStart != std::wstring::npos);
|
||||
|
||||
|
||||
@ -29,10 +29,10 @@ namespace MetaFile
|
||||
}
|
||||
|
||||
void CWmfInterpretatorRender::DrawString(std::wstring &wsText, unsigned int unCharsCount, double dX, double dY, double *pDx,
|
||||
int iGraphicsMode, double dXScale, double dYScale)
|
||||
int iGraphicsMode, double dXScale, double dYScale, bool bExChars)
|
||||
{
|
||||
if (NULL != m_pMetaFileRenderer)
|
||||
m_pMetaFileRenderer->DrawString(wsText, unCharsCount, dX, dY, pDx, iGraphicsMode, dXScale, dYScale);
|
||||
m_pMetaFileRenderer->DrawString(wsText, unCharsCount, dX, dY, pDx, iGraphicsMode, dXScale, dYScale, bExChars);
|
||||
}
|
||||
|
||||
void CWmfInterpretatorRender::DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints)
|
||||
|
||||
@ -19,7 +19,7 @@ namespace MetaFile
|
||||
void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, unsigned int unBlendMode) override;
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override;
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override;
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override;
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ namespace MetaFile
|
||||
void End() override {};
|
||||
|
||||
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx,
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1) override {};
|
||||
int iGraphicsMode = 1, double dXScale = 1, double dYScale = 1, bool bExChars = false) override {};
|
||||
|
||||
void DrawDriverString(const std::wstring& wsString, const std::vector<TPointD>& arPoints) override {};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user