mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 05:24:10 +08:00
671 lines
21 KiB
C++
671 lines
21 KiB
C++
#pragma once
|
|
|
|
#include "Xml.h"
|
|
#include "XmlConst.h"
|
|
|
|
namespace ImageStudio {
|
|
namespace Serialize {
|
|
namespace Paint {
|
|
namespace Common {
|
|
struct CFont : private CXmlAttributeReader
|
|
{
|
|
public:
|
|
NSStructuresGDI::CFont m_oFont;
|
|
|
|
public:
|
|
CFont()
|
|
{
|
|
m_oFont.Name = _T("Times New Roman");
|
|
|
|
m_oFont.Size = 10;
|
|
|
|
m_oFont.Bold = 0;
|
|
m_oFont.Italic = 0;
|
|
m_oFont.Underline = 0;
|
|
m_oFont.Strikeout = 0;
|
|
}
|
|
public:
|
|
void FromXmlNode(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
CString strDefaultValue;
|
|
CString strFamilyName;
|
|
strDefaultValue.Format(_T("%s"), m_oFont.Name);
|
|
strFamilyName = oXmlNode.GetAttributeOrValue(_T("font-name"), strDefaultValue);
|
|
m_oFont.Name = strFamilyName;
|
|
FontFamily oFontFamily(strFamilyName);
|
|
|
|
strDefaultValue.Format(_T("%f"), m_oFont.Size);
|
|
m_oFont.Size = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("font-size"), strDefaultValue));
|
|
if (m_oFont.Size <= 0)
|
|
{
|
|
m_oFont.Size = 12;
|
|
}
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oFont.Bold);
|
|
m_oFont.Bold = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("font-bold"), strDefaultValue));
|
|
if ((!oFontFamily.IsStyleAvailable(Gdiplus::FontStyleRegular)) && ((oFontFamily.IsStyleAvailable(Gdiplus::FontStyleItalic))))
|
|
{
|
|
m_oFont.Italic = true;
|
|
}
|
|
else
|
|
{
|
|
strDefaultValue.Format(_T("%i"), m_oFont.Italic);
|
|
m_oFont.Italic = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("font-italic"), strDefaultValue));
|
|
}
|
|
strDefaultValue.Format(_T("%i"), m_oFont.Underline);
|
|
m_oFont.Underline = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("font-underline"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%i"), m_oFont.Strikeout);
|
|
m_oFont.Strikeout = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("strikeout"), strDefaultValue));
|
|
}
|
|
void FromXmlNode2(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
CString strDefaultValue;
|
|
strDefaultValue.Format(_T("%s"), m_oFont.Name);
|
|
strDefaultValue = oXmlNode.GetAttributeOrValue(_T("font-family"), strDefaultValue);
|
|
if (strDefaultValue != _T(""))
|
|
m_oFont.Name = strDefaultValue;
|
|
|
|
strDefaultValue.Format(_T("%f"), m_oFont.Size);
|
|
REAL fFontSize = FloatPtAttributeFromXml(oXmlNode, _T("font-size"), (REAL)m_oFont.Size);
|
|
if (fFontSize > 0)
|
|
m_oFont.Size = fFontSize;
|
|
else if (fFontSize != 0)
|
|
m_oFont.Size = -fFontSize * m_oFont.Size;
|
|
else
|
|
m_oFont.Size = 12;
|
|
|
|
strDefaultValue.Format(_T("%s"), GetFontWeight(m_oFont));
|
|
SetFontWeight(m_oFont, oXmlNode.GetAttributeOrValue(_T("font-weight"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%s"), GetFontStyle(m_oFont));
|
|
SetFontStyle(m_oFont, oXmlNode.GetAttributeOrValue(_T("font-style"), strDefaultValue));
|
|
ReadUnderline(oXmlNode);
|
|
ReadStrikeout(oXmlNode);
|
|
|
|
m_oFont.CharSpace = XmlUtils::GetDouble(oXmlNode.GetAttribute(_T("letter-spacing"), _T("0"))) * 25.4f / 72.0f;
|
|
}
|
|
|
|
void FromXmlAttributes(XML::IXMLDOMNamedNodeMapPtr pAttributes)
|
|
{
|
|
BSTR bsValue;
|
|
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Family);
|
|
if (NULL != bsValue)
|
|
{
|
|
m_oFont.Name = bsValue;
|
|
SysFreeString(bsValue);
|
|
}
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Size);
|
|
if (NULL != bsValue)
|
|
{
|
|
REAL fFontSize = FloatPtFromBSTR(bsValue, (REAL)m_oFont.Size);
|
|
if (fFontSize > 0)
|
|
m_oFont.Size = fFontSize;
|
|
else if (fFontSize != 0)
|
|
m_oFont.Size = -fFontSize * m_oFont.Size;
|
|
else
|
|
m_oFont.Size = 12;
|
|
|
|
SysFreeString(bsValue);
|
|
}
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Weight);
|
|
if (NULL != bsValue)
|
|
{
|
|
CString strWeight = (CString)bsValue;
|
|
SetFontWeight(m_oFont, strWeight);
|
|
SysFreeString(bsValue);
|
|
}
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Style);
|
|
if (NULL != bsValue)
|
|
{
|
|
CString strStyle = (CString)bsValue;
|
|
SetFontStyle(m_oFont, strStyle);
|
|
SysFreeString(bsValue);
|
|
}
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Underline);
|
|
if (NULL != bsValue)
|
|
{
|
|
CString strUnderline = (CString)bsValue;
|
|
SetFontUnderline(m_oFont, strUnderline);
|
|
SysFreeString(bsValue);
|
|
}
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Strike);
|
|
if (NULL != bsValue)
|
|
{
|
|
CString strStrike = (CString)bsValue;
|
|
SetFontStrikeout(m_oFont, strStrike);
|
|
SysFreeString(bsValue);
|
|
}
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Font_Letter_Spacing);
|
|
if (NULL != bsValue)
|
|
{
|
|
m_oFont.CharSpace = (double)FloatPtFromBSTR(bsValue, (float)m_oFont.CharSpace);
|
|
m_oFont.CharSpace *= 25.4f / 72.0f;
|
|
SysFreeString(bsValue);
|
|
}
|
|
}
|
|
|
|
void FromFont(const NSStructures::CFont& font)
|
|
{
|
|
m_oFont.Name = font.Name;
|
|
m_oFont.Path = font.Path;
|
|
m_oFont.Size = font.Size;
|
|
m_oFont.Bold = font.Bold;
|
|
m_oFont.Italic = font.Italic;
|
|
m_oFont.Underline = font.Underline;
|
|
m_oFont.Strikeout = font.Strikeout;
|
|
m_oFont.StringGID = font.StringGID;
|
|
}
|
|
public:
|
|
Gdiplus::Font* GetGdiFont()
|
|
{
|
|
return m_oFont.GetFont(UnitPoint);
|
|
}
|
|
void SetToRenderer(IAVSRenderer *pRenderer)
|
|
{
|
|
m_oFont.SetToRenderer(pRenderer);
|
|
}
|
|
|
|
public:
|
|
const CString& Name() const
|
|
{
|
|
return m_oFont.Name;
|
|
}
|
|
void SetName(const CString& fontFamily)
|
|
{
|
|
m_oFont.Name = fontFamily;
|
|
}
|
|
float Size() const
|
|
{
|
|
return (float)m_oFont.Size;
|
|
}
|
|
LONG Style() const
|
|
{
|
|
return m_oFont.GetStyle();
|
|
}
|
|
|
|
private:
|
|
void ReadUnderline(XmlUtils::CXmlNode &oFontNode)
|
|
{
|
|
CString strValue = oFontNode.GetAttributeOrValue(_T("underline"));
|
|
if (strValue != _T(""))
|
|
SetFontUnderline(m_oFont, strValue);
|
|
}
|
|
void ReadStrikeout(XmlUtils::CXmlNode &oFontNode)
|
|
{
|
|
CString strValue = oFontNode.GetAttributeOrValue(_T("strike"));
|
|
if (strValue != _T(""))
|
|
SetFontStrikeout(m_oFont, strValue);
|
|
}
|
|
void ToXmlWriter(XmlUtils::CXmlWriter &oXmlWriter)
|
|
{
|
|
m_oFont.ToXmlAttributes(oXmlWriter);
|
|
}
|
|
};
|
|
struct CBrush : private CXmlAttributeReader
|
|
{
|
|
public:
|
|
NSStructuresGDI::CBrush m_oBrush;
|
|
|
|
public:
|
|
// ---
|
|
CBrush()
|
|
{
|
|
m_oBrush.Type = 0;
|
|
|
|
m_oBrush.Color1 = 0;
|
|
m_oBrush.Color2 = 0;
|
|
|
|
m_oBrush.Alpha1 = 255;
|
|
m_oBrush.Alpha2 = 255;
|
|
|
|
m_oBrush.TextureAlpha = 255;
|
|
}
|
|
// ---
|
|
void FromXmlNode(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
CString strDefaultValue = _T("");
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.Type);
|
|
m_oBrush.Type = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-type"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.Color1);
|
|
m_oBrush.Color1 = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-color1"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.Color2);
|
|
m_oBrush.Color2 = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-color2"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.Alpha1);
|
|
m_oBrush.Alpha1 = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-alpha1"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.Alpha2);
|
|
m_oBrush.Alpha2 = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-alpha2"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%s"), m_oBrush.TexturePath);
|
|
m_oBrush.TexturePath = oXmlNode.GetAttributeOrValue(_T("brush-texturepath"), strDefaultValue);
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.TextureAlpha);
|
|
m_oBrush.TextureAlpha = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-texturealpha"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oBrush.TextureMode);
|
|
m_oBrush.TextureMode = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("brush-texturemode"), strDefaultValue));
|
|
|
|
/*strDefaultValue.Format(_T("%i"), m_oBrush.GetRectable());
|
|
m_oBrush.SetRectable(XmlUtils::GetBoolean(oXmlNode.GetAttributeOrValue("brush-rectable"), strDefaultValue)));
|
|
Gdiplus::RectF oRectF = m_oBrush.GetRect();
|
|
strDefaultValue.Format(_T("%f"), oRectF.X);
|
|
oRectF.X = (REAL)XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue("brush-rect-left"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%f"),oRectF.Y);
|
|
oRectF.Y = (REAL)XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue("brush-rect-top"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%f"), oRectF.Width);
|
|
oRectF.Width = (REAL)XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue("brush-rect-width"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%f"), oRectF.Height);
|
|
oRectF.Height = (REAL)XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue("brush-rect-height"), strDefaultValue));
|
|
m_oBrush.SetRect(oRectF);*/
|
|
}
|
|
void FromXmlNode2(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
#ifdef DD_BRUSH_XML
|
|
CString strXml = oXmlNode.GetXml();
|
|
#endif
|
|
|
|
LONG iColor1 = LongAttributeHexFromXml(oXmlNode, _T("color"), m_oBrush.Color1);
|
|
if (iColor1 != 0xFFFFFF)
|
|
m_oBrush.Color1 = BGRToRGB(iColor1);
|
|
else
|
|
m_oBrush.Color1 = 0xFFFFFF;
|
|
}
|
|
|
|
void FromXmlAttributes(XML::IXMLDOMNamedNodeMapPtr pAttributes)
|
|
{
|
|
BSTR bsValue;
|
|
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Brush_Color);
|
|
if (NULL != bsValue)
|
|
{
|
|
LONG iColor1 = LongHexFromBSTR(bsValue, m_oBrush.Color1);
|
|
if (iColor1 != 0xFFFFFF)
|
|
m_oBrush.Color1 = BGRToRGB(iColor1);
|
|
else
|
|
m_oBrush.Color1 = 0xFFFFFF;
|
|
|
|
SysFreeString(bsValue);
|
|
}
|
|
}
|
|
|
|
void FromBrush(const NSStructures::CBrush& brush)
|
|
{
|
|
m_oBrush.Type = brush.Type;
|
|
|
|
m_oBrush.Color1 = brush.Color1;
|
|
m_oBrush.Alpha1 = brush.Alpha1;
|
|
m_oBrush.Color2 = brush.Color2;
|
|
m_oBrush.Alpha2 = brush.Alpha2;
|
|
|
|
m_oBrush.TexturePath = brush.TexturePath;
|
|
m_oBrush.TextureAlpha = brush.TextureAlpha;
|
|
m_oBrush.TextureMode = brush.TextureMode;
|
|
|
|
m_oBrush.Rectable = brush.Rectable;
|
|
m_oBrush.Rect = brush.Rect;
|
|
|
|
m_oBrush.LinearAngle = brush.LinearAngle;
|
|
}
|
|
// ---
|
|
void ToXmlWriter(XmlUtils::CXmlWriter &oXmlWriter)
|
|
{
|
|
m_oBrush.ToXmlAttributes(oXmlWriter);
|
|
}
|
|
// ---
|
|
Gdiplus::Brush* GetGdiBrush()
|
|
{
|
|
return m_oBrush.GetBrush();
|
|
}
|
|
void SetToRenderer(IAVSRenderer *pRenderer)
|
|
{
|
|
m_oBrush.SetToRenderer(pRenderer);
|
|
|
|
}
|
|
void SetToRenderer(IAVSRenderer* renderer, const float& transparency)
|
|
{
|
|
m_oBrush.SetToRenderer(renderer, transparency);
|
|
}
|
|
// ---
|
|
};
|
|
|
|
struct CPen : private CXmlAttributeReader
|
|
{
|
|
public:
|
|
NSStructuresGDI::CPen m_oPen;
|
|
|
|
public:
|
|
CPen()
|
|
{
|
|
m_oPen.Color = 0;
|
|
|
|
m_oPen.Alpha = 255;
|
|
|
|
m_oPen.Size = 0.3528f;
|
|
}
|
|
public:
|
|
void FromXmlNode(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
CString strDefaultValue;
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.Color);
|
|
m_oPen.Color = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-color"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.Alpha);
|
|
m_oPen.Alpha = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-alpha"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.Size);
|
|
m_oPen.Size = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("pen-size"), strDefaultValue))/* * 0.3528f*/;
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.Align);
|
|
m_oPen.Align = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-alignment"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.DashStyle);
|
|
m_oPen.DashStyle = (byte)XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-style"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.LineJoin);
|
|
m_oPen.LineJoin = (byte)XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-line-join"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.LineStartCap);
|
|
m_oPen.LineStartCap = (byte)XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-line-start-cap"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.LineEndCap);
|
|
m_oPen.LineEndCap = (byte)XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-line-end-cap"), strDefaultValue));
|
|
|
|
int nCount = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("pen-dash-pattern-count"), _T("0")));
|
|
if (nCount != 0)
|
|
{
|
|
XmlUtils::CXmlNode oPatternNode;
|
|
if (oXmlNode.GetNode(_T("dash-pattern"), oPatternNode))
|
|
{
|
|
XmlUtils::CXmlNodes oDashNodes;
|
|
if (oPatternNode.GetNodes(_T("dash"), oDashNodes))
|
|
{
|
|
nCount = oDashNodes.GetCount();
|
|
if (nCount != 0)
|
|
{
|
|
double* pDashPattern = new double[nCount];
|
|
XmlUtils::CXmlNode oDashNode;
|
|
for (int i = 0; i < nCount; ++i)
|
|
{
|
|
oDashNodes.GetAt(i, oDashNode);
|
|
pDashPattern[i] = XmlUtils::GetDouble(oDashNode.GetText());
|
|
}
|
|
|
|
m_oPen.SetDashPattern(pDashPattern, nCount);
|
|
RELEASEARRAYOBJECTS(pDashPattern);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oPen.DashOffset);
|
|
m_oPen.DashOffset = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("pen-dash-offset"), strDefaultValue));
|
|
|
|
/*strDefaultValue.Format(_T("%i"), m_oPen.GetStyle());
|
|
strDefaultValue = oXmlNode.GetAttributeOrValue(_T("pen-style"), strDefaultValue);
|
|
SetPenStyle(m_oPen, strDefaultValue);*/
|
|
}
|
|
public:
|
|
Gdiplus::Pen* GetGdiFont()
|
|
{
|
|
return m_oPen.GetPen();
|
|
}
|
|
void SetToRenderer(IAVSRenderer *pRenderer)
|
|
{
|
|
m_oPen.SetToRenderer(pRenderer);
|
|
/*if (m_oPen.Color < 0)
|
|
{
|
|
m_oPen.Color = 0;
|
|
}
|
|
XmlUtils::CXmlWriter oXmlWriter;
|
|
ToXmlWriter(oXmlWriter);
|
|
|
|
CString strXmlPen = _T("<pen");
|
|
strXmlPen += oXmlWriter.GetXmlString();
|
|
strXmlPen += _T("/>");
|
|
|
|
BSTR bstrXmlPen = strXmlPen.AllocSysString();
|
|
|
|
pRenderer->SetPen(bstrXmlPen);
|
|
|
|
SysFreeString(bstrXmlPen);*/
|
|
}
|
|
private:
|
|
void ToXmlWriter(XmlUtils::CXmlWriter &oXmlWriter)
|
|
{
|
|
m_oPen.ToXmlAttributes(oXmlWriter);
|
|
}
|
|
};
|
|
|
|
struct CShadow : private CXmlAttributeReader
|
|
{
|
|
public:
|
|
NSStructuresGDI::CShadow m_oShadow;
|
|
|
|
public:
|
|
// ---
|
|
CShadow()
|
|
{
|
|
m_oShadow.Visible = false;
|
|
|
|
m_oShadow.Color = 0xFFFFFE;
|
|
|
|
m_oShadow.Alpha = 0;
|
|
|
|
m_oShadow.DistanceX = 2;
|
|
m_oShadow.DistanceY = 2;
|
|
|
|
m_oShadow.BlurSize = 0;
|
|
}
|
|
// ---
|
|
void FromXmlNode(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
CString strDefaultValue = _T("");
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oShadow.Visible);
|
|
m_oShadow.Visible = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("shadow-visible"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oShadow.Color);
|
|
m_oShadow.Color = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("shadow-color"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oShadow.Alpha);
|
|
m_oShadow.Alpha = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("shadow-alpha"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%f"), m_oShadow.DistanceX);
|
|
m_oShadow.DistanceX = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("shadow-distancex"), strDefaultValue));
|
|
strDefaultValue.Format(_T("%f"), m_oShadow.DistanceY);
|
|
m_oShadow.DistanceY = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("shadow-distancey"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%f"), m_oShadow.BlurSize);
|
|
m_oShadow.BlurSize = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("shadow-blursize"), strDefaultValue));
|
|
}
|
|
void FromXmlNode2(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
#ifdef DD_BRUSH_XML
|
|
CString strXml = oXmlNode.GetXml();
|
|
#endif
|
|
}
|
|
|
|
void FromXmlAttributes(XML::IXMLDOMNamedNodeMapPtr pAttributes)
|
|
{
|
|
// , FromXmlNode2
|
|
}
|
|
|
|
|
|
// ---
|
|
void ToXmlWriter(XmlUtils::CXmlWriter &oXmlWriter)
|
|
{
|
|
m_oShadow.ToXmlAttributes(oXmlWriter);
|
|
}
|
|
// ---
|
|
void SetToRenderer(IAVSRenderer *pRenderer)
|
|
{
|
|
pRenderer->put_ShadowVisible(m_oShadow.Visible);
|
|
if (m_oShadow.Visible)
|
|
{
|
|
XmlUtils::CXmlWriter oXmlWriter;
|
|
ToXmlWriter(oXmlWriter);
|
|
|
|
CString strXmlShadow = _T("<shadow");
|
|
strXmlShadow += oXmlWriter.GetXmlString();
|
|
strXmlShadow += _T("/>");
|
|
|
|
BSTR bstrXmlShadow = strXmlShadow.AllocSysString();
|
|
|
|
pRenderer->SetShadow(bstrXmlShadow);
|
|
|
|
SysFreeString(bstrXmlShadow);
|
|
}
|
|
}
|
|
};
|
|
|
|
struct CBackground : private CXmlAttributeReader
|
|
{
|
|
public:
|
|
NSStructuresGDI::CBackground m_oBackground;
|
|
|
|
public:
|
|
// ---
|
|
CBackground()
|
|
{
|
|
m_oBackground.Color = 0;
|
|
m_oBackground.Alpha = 0;
|
|
}
|
|
// ---
|
|
void FromXmlNode(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
}
|
|
void FromXmlNode2(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
#ifdef DD_BRUSH_XML
|
|
CString strXml = oXmlNode.GetXml();
|
|
#endif
|
|
|
|
LONG iColor1 = LongAttributeHexFromXml(oXmlNode, _T("background-color"), m_oBackground.Color);
|
|
|
|
if (oXmlNode.GetAttribute(_T("background-color")) != _T(""))
|
|
{
|
|
m_oBackground.Alpha = 255;
|
|
m_oBackground.Color = BGRToRGB(iColor1);
|
|
}
|
|
else
|
|
{
|
|
m_oBackground.Color = iColor1;
|
|
}
|
|
}
|
|
void FromXmlAttributes(XML::IXMLDOMNamedNodeMapPtr pAttributes)
|
|
{
|
|
BSTR bsValue;
|
|
|
|
bsValue = GetAttribute(pAttributes, g_cpszXML_Background_Color);
|
|
if (NULL != bsValue)
|
|
{
|
|
LONG iColor1 = LongHexFromBSTR(bsValue, m_oBackground.Color);
|
|
|
|
m_oBackground.Alpha = 255;
|
|
if (iColor1 != 0xFFFFFF)
|
|
m_oBackground.Color = BGRToRGB(iColor1);
|
|
else
|
|
m_oBackground.Color = 0xFFFFFF;
|
|
|
|
|
|
SysFreeString(bsValue);
|
|
}
|
|
//else
|
|
//{
|
|
// m_oBackground = m_oBackground;
|
|
//}
|
|
}
|
|
|
|
// ---
|
|
void ToXmlWriter(XmlUtils::CXmlWriter &oXmlWriter)
|
|
{
|
|
m_oBackground.ToXmlAttributes(oXmlWriter);
|
|
}
|
|
// ---
|
|
void SetToRenderer(IAVSRenderer *pRenderer)
|
|
{
|
|
XmlUtils::CXmlWriter oXmlWriter;
|
|
ToXmlWriter(oXmlWriter);
|
|
|
|
CString strXmlBackground = _T("<background");
|
|
strXmlBackground += oXmlWriter.GetXmlString();
|
|
strXmlBackground += _T("/>");
|
|
|
|
/*BSTR bstrXmlBackground = strXmlBackground.AllocSysString();
|
|
|
|
pRenderer->SetBackground(bstrXmlBackground);
|
|
|
|
SysFreeString(bstrXmlBackground);*/
|
|
}
|
|
};
|
|
|
|
struct CEdge
|
|
{
|
|
private:
|
|
NSStructuresGDI::CEdgeText m_oEdge;
|
|
|
|
public:
|
|
// ---
|
|
CEdge()
|
|
{
|
|
m_oEdge.Visible = false;
|
|
m_oEdge.Color = 0;
|
|
m_oEdge.Alpha = 0;
|
|
m_oEdge.Dist = 0;
|
|
}
|
|
// ---
|
|
void FromXmlNode(XmlUtils::CXmlNode &oXmlNode)
|
|
{
|
|
CString strDefaultValue;
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oEdge.Visible);
|
|
m_oEdge.Visible = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("edge-visible"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oEdge.Alpha);
|
|
m_oEdge.Alpha = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("shadow-alpha"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oEdge.Color);
|
|
m_oEdge.Color = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("edge-color"), strDefaultValue));
|
|
|
|
strDefaultValue.Format(_T("%i"), m_oEdge.Dist);
|
|
m_oEdge.Dist = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("edge-dist"), strDefaultValue));
|
|
}
|
|
|
|
void FromXmlAttributes(XML::IXMLDOMNamedNodeMapPtr pAttributes)
|
|
{
|
|
//
|
|
}
|
|
// ---
|
|
void ToXmlWriter(XmlUtils::CXmlWriter &oXmlWriter)
|
|
{
|
|
m_oEdge.ToXmlAttributes(oXmlWriter);
|
|
}
|
|
// ---
|
|
void SetToRenderer(IAVSRenderer *pRenderer)
|
|
{
|
|
pRenderer->put_EdgeVisible(m_oEdge.Visible);
|
|
|
|
if (0 != m_oEdge.Visible)
|
|
{
|
|
XmlUtils::CXmlWriter oXmlWriter;
|
|
ToXmlWriter(oXmlWriter);
|
|
|
|
CString strXmlEdge = _T("<edge");
|
|
strXmlEdge += oXmlWriter.GetXmlString();
|
|
strXmlEdge += _T("/>");
|
|
|
|
BSTR bstrXmlEdge = strXmlEdge.AllocSysString();
|
|
|
|
pRenderer->SetEdgeText(bstrXmlEdge);
|
|
|
|
SysFreeString(bstrXmlEdge);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|