diff --git a/Common/3dParty/html/css/src/StyleProperties.cpp b/Common/3dParty/html/css/src/StyleProperties.cpp
index 8a705a05de..168a185c8a 100644
--- a/Common/3dParty/html/css/src/StyleProperties.cpp
+++ b/Common/3dParty/html/css/src/StyleProperties.cpp
@@ -671,6 +671,12 @@ namespace NSCSS
return true;
}
+ bool CMatrix::SetMatrix(const Aggplus::CMatrix &oValue)
+ {
+ m_oValue = oValue;
+ return true;
+ }
+
bool CMatrix::Empty() const
{
return m_oValue.IsIdentity();
@@ -1030,6 +1036,12 @@ namespace NSCSS
return m_oMatrix.SetValue(wsValue, unLevel, bHardMode);
}
+ bool CTransform::SetMatrix(const Aggplus::CMatrix &oMatrix)
+ {
+ m_oMatrix.SetMatrix(oMatrix);
+ return true;
+ }
+
const CMatrix& CTransform::GetMatrix() const
{
return m_oMatrix;
@@ -1361,7 +1373,7 @@ namespace NSCSS
{
CDigit ::Equation(oFirstText.m_oIndent, oSecondText.m_oIndent);
CString::Equation(oFirstText.m_oAlign, oSecondText.m_oAlign);
- CString::Equation(oFirstText.m_oDecoration, oSecondText.m_oDecoration);
+// CString::Equation(oFirstText.m_oDecoration, oSecondText.m_oDecoration);
CColor ::Equation(oFirstText.m_oColor, oSecondText.m_oColor);
}
@@ -1378,13 +1390,25 @@ namespace NSCSS
bool CText::SetAlign(const std::wstring &wsValue, unsigned int unLevel, bool bHardMode)
{
- return m_oAlign.SetValue(wsValue, {std::make_pair(L"center", L"center"), std::make_pair(L"justify", L"both"), std::make_pair(L"left", L"left"), std::make_pair(L"start", L"left"), std::make_pair(L"right", L"right"), std::make_pair(L"end", L"right")}, unLevel, bHardMode);
+ return m_oAlign.SetValue(wsValue, {std::make_pair(L"center", L"center"), std::make_pair(L"middle", L"center"), std::make_pair(L"justify", L"both"), std::make_pair(L"left", L"left"), std::make_pair(L"start", L"left"), std::make_pair(L"right", L"right"), std::make_pair(L"end", L"right")}, unLevel, bHardMode);
}
bool CText::SetDecoration(const std::wstring &wsValue, unsigned int unLevel, bool bHardMode)
{
- return m_oDecoration.SetValue(wsValue, {std::make_pair(L"underline", L"single"), std::make_pair(L"line-through", L"line-through"), std::make_pair(L"none", L"none")}, unLevel, bHardMode);
- }
+ if (wsValue.empty())
+ return false;
+
+ for (const std::wstring& wsVal : NSCSS::NS_STATIC_FUNCTIONS::GetWordsW(wsValue))
+ {
+ if (m_oDecoration.m_oLine.SetValue(wsVal) ||
+ m_oDecoration.m_oStyle.SetValue(wsValue, {L"solid", L"double", L"dotted", L"dashed", L"wavy"}, unLevel, bHardMode) ||
+ m_oDecoration.m_oColor.SetValue(wsValue, unLevel, bHardMode))
+ continue;
+ else
+ return false;
+ }
+
+ return true; }
bool CText::SetColor(const std::wstring &wsValue, unsigned int unLevel, bool bHardMode)
{
@@ -1401,7 +1425,7 @@ namespace NSCSS
return m_oAlign;
}
- const CString& CText::GetDecoration() const
+ const TTextDecoration& CText::GetDecoration() const
{
return m_oDecoration;
}
@@ -1414,7 +1438,22 @@ namespace NSCSS
bool CText::Empty() const
{
return m_oIndent.Empty() && m_oAlign.Empty() &&
- m_oDecoration.Empty() && m_oColor.Empty();
+ m_oDecoration.m_oLine.Empty() && m_oColor.Empty();
+ }
+
+ bool CText::Underline() const
+ {
+ return m_oDecoration.m_oLine.Underline();
+ }
+
+ bool CText::Overline() const
+ {
+ return m_oDecoration.m_oLine.Overline();
+ }
+
+ bool CText::LineThrough() const
+ {
+ return m_oDecoration.m_oLine.LineThrough();
}
CText &CText::operator+=(const CText &oText)
@@ -1431,7 +1470,7 @@ namespace NSCSS
{
return m_oIndent == oText.m_oIndent &&
m_oAlign == oText.m_oAlign &&
- m_oDecoration == oText.m_oDecoration &&
+// m_oDecoration == oText.m_oDecoration &&
m_oColor == oText.m_oColor;
}
@@ -1588,6 +1627,77 @@ namespace NSCSS
}
// FONT
+ CTextDecorationLine::CTextDecorationLine()
+ : m_bUnderline(false), m_bOverline(false), m_bLineThrough(false)
+ {}
+
+ bool CTextDecorationLine::Empty() const
+ {
+ return false == m_bUnderline && false == m_bOverline && false == m_bLineThrough;
+ }
+
+ bool CTextDecorationLine::SetValue(const std::wstring &wsValue)
+ {
+ if (L"underline" == wsValue)
+ {
+ m_bUnderline = true;
+ return true;
+ }
+ else if (L"overline" == wsValue)
+ {
+ m_bOverline = true;
+ return true;
+ }
+ else if (L"line-through" == wsValue)
+ {
+ m_bLineThrough = true;
+ return true;
+ }
+ else if (L"none" == wsValue)
+ {
+ m_bUnderline = m_bOverline = m_bLineThrough = false;
+ return true;
+ }
+
+ return false;
+ }
+
+ bool CTextDecorationLine::Underline() const
+ {
+ return m_bUnderline;
+ }
+
+ bool CTextDecorationLine::Overline() const
+ {
+ return m_bOverline;
+ }
+
+ bool CTextDecorationLine::LineThrough() const
+ {
+ return m_bLineThrough;
+ }
+
+ CTextDecorationLine &CTextDecorationLine::operator+=(const CTextDecorationLine &oTextDecoration)
+ {
+ if (oTextDecoration.m_bUnderline)
+ m_bUnderline = true;
+ if (oTextDecoration.m_bOverline)
+ m_bOverline = true;
+ if (oTextDecoration.m_bLineThrough)
+ m_bLineThrough = true;
+
+ return *this;
+ }
+
+ TTextDecoration &TTextDecoration::operator+=(const TTextDecoration &oTextDecoration)
+ {
+ m_oLine += oTextDecoration.m_oLine;
+ m_oStyle += oTextDecoration.m_oStyle;
+ m_oColor += oTextDecoration.m_oColor;
+
+ return *this;
+ }
+
CFont::CFont()
: m_oSize(24., 0)
{}
@@ -1725,6 +1835,22 @@ namespace NSCSS
std::make_pair(L"700", L"bold"), std::make_pair(L"800", L"bold"), std::make_pair(L"900", L"bold")}, unLevel, bHardMode);
}
+ bool CFont::UpdateSize(double dSize)
+ {
+ m_oSize = dSize;
+ return true;
+ }
+
+ bool CFont::Bold() const
+ {
+ return m_oWeight == L"bold";
+ }
+
+ bool CFont::Italic() const
+ {
+ return m_oStyle == L"italic";
+ }
+
void CFont::Clear()
{
m_oSize = CDigit(24., 0);
@@ -1893,8 +2019,7 @@ namespace NSCSS
bool CColorValue::Empty() const
{
- return (ColorEmpty == m_enType) || (ColorRGB == m_enType && static_cast(m_pColor)->Empty()) ||
- ((ColorHEX == m_enType || ColorUrl == m_enType) && static_cast(m_pColor)->empty());
+ return ColorEmpty == m_enType;
}
std::wstring CColorValue::GetColor() const
diff --git a/Common/3dParty/html/css/src/StyleProperties.h b/Common/3dParty/html/css/src/StyleProperties.h
index dc55b64c36..18b0b7dbda 100644
--- a/Common/3dParty/html/css/src/StyleProperties.h
+++ b/Common/3dParty/html/css/src/StyleProperties.h
@@ -196,6 +196,7 @@ namespace NSCSS
CMatrix(const Aggplus::CMatrix& oValue, unsigned int unLevel, bool bImportant = false);
bool SetValue(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode) override;
+ bool SetMatrix(const Aggplus::CMatrix& oValue);
bool Empty() const override;
void Clear() override;
@@ -310,6 +311,7 @@ namespace NSCSS
static void Equation(CTransform &oFirstTransform, CTransform &oSecondTransform);
bool SetMatrix(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetMatrix(const Aggplus::CMatrix &oMatrix);
const CMatrix& GetMatrix() const;
@@ -410,6 +412,34 @@ namespace NSCSS
CBorderSide m_oBottom;
};
+ class CTextDecorationLine
+ {
+ bool m_bUnderline;
+ bool m_bOverline;
+ bool m_bLineThrough;
+ public:
+ CTextDecorationLine();
+
+ bool Empty() const;
+
+ bool SetValue(const std::wstring& wsValue);
+
+ bool Underline() const;
+ bool Overline() const;
+ bool LineThrough() const;
+
+ CTextDecorationLine &operator+=(const CTextDecorationLine& oTextDecoration);
+ };
+
+ struct TTextDecoration
+ {
+ CTextDecorationLine m_oLine;
+ CString m_oStyle;
+ CColor m_oColor;
+
+ TTextDecoration& operator+=(const TTextDecoration& oTextDecoration);
+ };
+
class CText
{
public:
@@ -422,20 +452,24 @@ namespace NSCSS
bool SetDecoration(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
bool SetColor (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- const CDigit& GetIndent() const;
- const CString& GetAlign() const;
- const CString& GetDecoration() const;
- const CColor& GetColor() const;
+ const CDigit& GetIndent() const;
+ const CString& GetAlign() const;
+ const TTextDecoration& GetDecoration() const;
+ const CColor& GetColor() const;
bool Empty() const;
+ bool Underline() const;
+ bool Overline() const;
+ bool LineThrough() const;
+
CText& operator+=(const CText& oText);
bool operator==(const CText& oText) const;
private:
- CDigit m_oIndent;
- CString m_oAlign;
- CString m_oDecoration;
- CColor m_oColor;
+ TTextDecoration m_oDecoration;
+ CDigit m_oIndent;
+ CString m_oAlign;
+ CColor m_oColor;
};
class CIndent
@@ -480,17 +514,22 @@ namespace NSCSS
static void Equation(CFont &oFirstFont, CFont &oSecondFont);
- bool SetValue (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetSize (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetLineHeight(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetFamily (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetStretch (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetStyle (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetVariant (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
- bool SetWeight (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetValue (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetSize (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetLineHeight (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetFamily (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetStretch (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetStyle (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetVariant (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+ bool SetWeight (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
+
+ bool UpdateSize(double dSize);
void Clear();
+ bool Bold() const;
+ bool Italic() const;
+
const CDigit& GetSize() const;
const CDigit& GetLineHeight() const;
const CString& GetFamily() const;
@@ -507,11 +546,13 @@ namespace NSCSS
CDigit m_oSize;
CDigit m_oLineHeight;
CString m_oFamily;
- //TODO:: возможно стоит перейти в слудующих переменых на enum
+ //TODO:: возможно стоит перейти в слудующих переменных на enum
CString m_oStretch;
CString m_oStyle;
CString m_oVariant;
CString m_oWeight;
+
+ TTextDecoration m_oTextDecoration;
};
}
}
diff --git a/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp b/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp
index 1c16480004..e72700711b 100644
--- a/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp
+++ b/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp
@@ -386,7 +386,7 @@ namespace NSCSS
oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_Highlight, oStyle.m_oBackground.GetColor().ToWString());
oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_Color, oStyle.m_oText.GetColor().ToWString());
- oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_U, oStyle.m_oText.GetDecoration().ToWString());
+ oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_U, (oStyle.m_oText.GetDecoration().m_oLine.Underline()) ? L"underline" : L"");
oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_Sz, oStyle.m_oFont.GetSize().ToWString());
oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_RFonts, oStyle.m_oFont.GetFamily().ToWString());
oXmlElement.AddPropertiesInR(NSConstValues::NSProperties::RunnerProperties::R_I, oStyle.m_oFont.GetStyle().ToWString());
diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp
index 134d2163bb..5fec11ad8b 100644
--- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp
+++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp
@@ -126,6 +126,9 @@ namespace SVG
{
if (!m_oStroke.m_oColor.Empty())
{
+ if (NSCSS::NSProperties::ColorType::ColorNone == m_oStroke.m_oColor.GetType())
+ return;
+
nTypePath += c_nStroke;
pRenderer->put_PenColor(m_oStroke.m_oColor.ToInt());
diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CPattern.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CPattern.cpp
index 6a266ef96d..1731972882 100644
--- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CPattern.cpp
+++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CPattern.cpp
@@ -49,6 +49,7 @@ namespace SVG
CContainer::Draw(pGrRenderer, pDefs);
pGrRenderer->EndCommand(c_nImageType);
+ RELEASEINTERFACE(pGrRenderer);
oFrame.put_Data(NULL);
@@ -59,8 +60,6 @@ namespace SVG
for (double dY = oParentRect.m_oY.ToDouble(); dY < oParentRect.m_oHeight.ToDouble(); dY += nHeight)
pRenderer->DrawImage(&oImage, dX, dY, nWidth, nHeight);
- RELEASEINTERFACE(pGrRenderer);
-
return true;
}
}
diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp
index 6be4887888..268d49a8e1 100644
--- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp
+++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp
@@ -63,6 +63,15 @@ namespace SVG
if (mAttributes.end() != mAttributes.find(L"line-height"))
m_oFont.SetLineHeight(mAttributes.at(L"line-height"), ushLevel, bHardMode);
+
+ //TEXT
+ if (mAttributes.end() != mAttributes.find(L"text-anchor"))
+ m_oText.SetAlign(mAttributes.at(L"text-anchor"), ushLevel, bHardMode);
+
+ if (mAttributes.end() != mAttributes.find(L"text-decoration"))
+ m_oText.SetDecoration(mAttributes.at(L"text-decoration"), ushLevel, bHardMode);
+
+ Normalize();
}
bool CText::ReadFromXmlNode(XmlUtils::CXmlNode &oNode)
@@ -100,9 +109,6 @@ namespace SVG
if (NULL == pRenderer || m_wsText.empty())
return false;
- double dM11, dM12, dM21, dM22, dRx, dRy;
- pRenderer->GetTransform(&dM11, &dM12, &dM21, &dM22, &dRx, &dRy);
-
double dParentWidth = 0, dParentHeight = 0;
CContainer *pContainer = dynamic_cast(m_pParent);
@@ -115,12 +121,14 @@ namespace SVG
double dX = m_oX.ToDouble(NSCSS::Pixel, dParentWidth);
double dY = m_oY.ToDouble(NSCSS::Pixel, dParentHeight);
- GetWidth();
+ Aggplus::CMatrix oOldMatrix(1., 0., .0, 1., 0., 0.);
- int nPathType = 0;
- Aggplus::CMatrix oOldMatrix(1., 0., 0., 1., 0, 0);
+ int nPlug = 0;
- ApplyStyle(pRenderer, pDefs, nPathType, oOldMatrix);
+ ApplyStyle(pRenderer,pDefs, nPlug, oOldMatrix);
+
+ ApplyTransform(pRenderer, oOldMatrix);
+ ApplyFont(pRenderer, dX, dY);
pRenderer->CommandDrawText(m_wsText, dX, dY, 0, 0);
@@ -134,14 +142,39 @@ namespace SVG
void CText::ApplyStyle(IRenderer *pRenderer, CDefs *pDefs, int& nTypePath, Aggplus::CMatrix& oOldMatrix) const
{
- ApplyTransform(pRenderer, oOldMatrix);
- ApplyFont(pRenderer);
}
- void CText::ApplyFont(IRenderer* pRenderer) const
+// void CText::ApplyStyle(IRenderer *pRenderer, double &dX, double &dY) const
+// {
+// double dFontSize = (!m_oFont.GetSize().Empty()) ? m_oFont.GetSize().ToDouble(NSCSS::Pixel) * 72. / 25.4 : 18.;
+//// ApplyTransform(pRenderer, dX, dY, dFontSize);
+// Aggplus::CMatrix oOld;
+// CObjectBase::ApplyTransform(pRenderer, oOld);
+// ApplyFont(pRenderer, dFontSize);
+// }
+
+// void CText::ApplyTransform(IRenderer *pRenderer, double &dX, double &dY, double &dFontSize) const
+// {
+// double dM11, dM12, dM21, dM22, dRx, dRy;
+
+// pRenderer->GetTransform(&dM11, &dM12, &dM21, &dM22, &dRx, &dRy);
+
+// Aggplus::CMatrix oMatrix(dM11, dM12, dM21, dM22, dRx, dRy);
+// Aggplus::CMatrix oNewMatrix(m_oTransform.GetMatrix().GetValue());
+
+// oMatrix.Multiply(&oNewMatrix);
+
+// oMatrix.TransformPoint(dX, dY);
+// dFontSize *= oNewMatrix.sy();
+// }
+
+ void CText::ApplyFont(IRenderer* pRenderer, double& dX, double& dY) const
{
- pRenderer->put_FontName((!m_oFont.GetFamily().Empty()) ? m_oFont.GetFamily().ToWString() : DefaultFontFamily);
- pRenderer->put_FontSize((!m_oFont.GetSize().Empty()) ? m_oFont.GetSize().ToDouble(NSCSS::Pixel) * 72. / 25.4 : 18.);
+ std::wstring wsFontFamily = (!m_oFont.GetFamily().Empty()) ? m_oFont.GetFamily().ToWString() : DefaultFontFamily;
+ double dFontSize = (!m_oFont.GetSize().Empty()) ? m_oFont.GetSize().ToDouble(NSCSS::Pixel) * 72. / 25.4 : 18.;
+
+ pRenderer->put_FontName(wsFontFamily);
+ pRenderer->put_FontSize(dFontSize);
int nStyle = 0;
@@ -149,10 +182,55 @@ namespace SVG
nStyle |= 0x01;
if (m_oFont.GetStyle() .ToWString() == L"italic")
nStyle |= 0x02;
-// if (pFont->IsUnderline())
-// nStyle |= (1 << 2);
-// if (pFont->IsStrikeOut())
-// nStyle |= (1 << 7);
+ if (m_oText.Underline())
+ nStyle |= (1 << 2);
+
+ // Вычиления размеров текста
+ m_pFontManager->LoadFontByName(wsFontFamily, dFontSize, nStyle, 72, 72);
+ m_pFontManager->SetCharSpacing(0);
+
+ double dKoef = 25.4 / 96;
+ double dFHeight = dFontSize;
+ double dFDescent = dFontSize;
+
+ NSFonts::IFontFile* pFontFile = m_pFontManager->GetFile();
+
+ if (pFontFile)
+ {
+ dFHeight *= pFontFile->GetHeight() / pFontFile->Units_Per_Em() * dKoef;
+ dFDescent *= pFontFile->GetDescender() / pFontFile->Units_Per_Em() * dKoef;
+ }
+ double dFAscent = dFHeight - std::abs(dFDescent);
+
+ float fL, fT, fW, fH, fUndX1, fUndY1, fUndX2, fUndY2, fUndSize;
+
+ m_pFontManager->LoadString1(m_wsText, 0, 0);
+ TBBox oBox = m_pFontManager->MeasureString2();
+ fL = (float)dKoef * (oBox.fMinX);
+ fW = (float)dKoef * (oBox.fMaxX - oBox.fMinX);
+
+ // Просчитаем положение подчеркивания
+ m_pFontManager->GetUnderline(&fUndX1, &fUndY1, &fUndX2, &fUndY2, &fUndSize);
+ fUndY1 *= (float)dKoef;
+ fUndY2 *= (float)dKoef;
+ fUndSize *= (float)dKoef / 2;
+
+ fUndX1 = fL;
+ fUndX2 = fL + fW;
+
+ fT = (float)-dFAscent;
+ fH = (float)dFHeight;
+
+ float fTemp = -fT;
+
+ dX += -fTemp;
+ dY += fTemp;
+
+ if (L"left" == m_oText.GetAlign().ToWString())
+ dX += -fW;
+ else if (L"center" == m_oText.GetAlign().ToWString())
+ dX += -fW / 2;
+
pRenderer->put_FontStyle(nStyle);
pRenderer->put_BrushType(c_BrushTypeSolid);
@@ -177,6 +255,31 @@ namespace SVG
return dWidth;
}
+ void CText::Normalize()
+ {
+ Aggplus::CMatrix oMatrix = m_oTransform.GetMatrix().GetValue();
+
+ double dM11 = oMatrix.sx();
+ double dM22 = oMatrix.sy();
+
+ if (dM11 < 0.05 || dM11 > 100)
+ {
+ m_oX *= dM11;
+ dM11 /= std::abs(dM11);
+ }
+
+ if (dM22 < 0.05 || dM22 > 100)
+ {
+ m_oY *= dM22;
+ m_oFont.UpdateSize(m_oFont.GetSize().ToDouble(NSCSS::Pixel) * dM22);
+ dM22 /= std::abs(dM22);
+ }
+
+ oMatrix.SetElements(dM11, oMatrix.shy(), oMatrix.shx(), dM22, oMatrix.tx(), oMatrix.ty());
+
+ m_oTransform.SetMatrix(oMatrix);
+ }
+
CTspan::CTspan(CObjectBase *pParent) : CObjectBase(pParent), m_oCoord({0, 0})
{
if (NULL != pParent)
diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.h b/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.h
index 0cd892eaf6..e82710d352 100644
--- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.h
+++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.h
@@ -22,11 +22,15 @@ namespace SVG
bool Draw(IRenderer* pRenderer, CDefs *pDefs) const override;
private:
void ApplyStyle(IRenderer* pRenderer, CDefs *pDefs, int& nTypePath, Aggplus::CMatrix& oOldMatrix) const override;
+ void ApplyFont(IRenderer* pRenderer, double& dX, double& dY) const;
- void ApplyFont(IRenderer* pRenderer) const;
+// void ApplyStyle(IRenderer* pRenderer, double& dX, double& dY) const;
+// void ApplyTransform(IRenderer* pRenderer, double& dX, double& dY, double& dFontSize) const;
double GetWidth() const;
+ void Normalize();
+
NSFonts::IFontManager* m_pFontManager;
SvgDigit m_oX;
@@ -37,6 +41,7 @@ namespace SVG
std::vector m_arChildrens;
SvgFont m_oFont;
+ SvgText m_oText;
friend class CTspan;
};
diff --git a/DesktopEditor/raster/Metafile/svg/SvgTypes.h b/DesktopEditor/raster/Metafile/svg/SvgTypes.h
index 6a7587c79a..02f64b6098 100644
--- a/DesktopEditor/raster/Metafile/svg/SvgTypes.h
+++ b/DesktopEditor/raster/Metafile/svg/SvgTypes.h
@@ -16,6 +16,7 @@ namespace SVG
#define SvgTransform NSCSS::NSProperties::CTransform
#define SvgFont NSCSS::NSProperties::CFont
+ #define SvgText NSCSS::NSProperties::CText
struct TStroke
{