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 {