This commit is contained in:
Kirill Polyakov
2025-10-02 18:20:12 +03:00
parent add2a66da9
commit 21a637594a
15 changed files with 34 additions and 35 deletions

View File

@ -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;

View File

@ -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();
}

View File

@ -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 {};

View File

@ -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)

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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 {};

View File

@ -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 {};

View File

@ -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;

View File

@ -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));

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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 {};