mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
fix custom shape
This commit is contained in:
@ -476,9 +476,8 @@ namespace NSCustomVML
|
|||||||
}
|
}
|
||||||
bool CCustomVML::IsCustom()
|
bool CCustomVML::IsCustom()
|
||||||
{
|
{
|
||||||
//return (m_bIsVerticesPresent && m_bIsPathPresent);
|
return ((m_bIsVerticesPresent || !m_arVertices.empty()) && (m_bIsPathPresent || !m_arSegments.empty()));
|
||||||
return (m_bIsVerticesPresent && !m_arVertices.empty() && (m_bIsPathPresent || !m_arSegments.empty()));
|
}
|
||||||
}
|
|
||||||
void CCustomVML::SetPath(ODRAW::RulesType ePath)
|
void CCustomVML::SetPath(ODRAW::RulesType ePath)
|
||||||
{
|
{
|
||||||
m_ePath = ePath;
|
m_ePath = ePath;
|
||||||
|
|||||||
@ -5029,36 +5029,53 @@ void CDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem* oElem, XmlUtils
|
|||||||
nullable_string sColor2;
|
nullable_string sColor2;
|
||||||
XmlMacroReadAttributeBase(oNodeFill, L"color2", sColor2);
|
XmlMacroReadAttributeBase(oNodeFill, L"color2", sColor2);
|
||||||
|
|
||||||
|
nullable_string sOpacity2;
|
||||||
|
XmlMacroReadAttributeBase(oNodeFill, L"o:opacity2", sOpacity2);
|
||||||
|
|
||||||
nullable_string sFocus;
|
nullable_string sFocus;
|
||||||
XmlMacroReadAttributeBase(oNodeFill, L"focus", sFocus);
|
XmlMacroReadAttributeBase(oNodeFill, L"focus", sFocus);
|
||||||
//
|
|
||||||
|
nullable<SimpleTypes::Vml::CVml_Vector2D_Percentage> oFocusPosition;
|
||||||
|
XmlMacroReadAttributeBase(oNodeFill, L"focusposition", oFocusPosition);
|
||||||
|
|
||||||
if (sType.is_init() && (*sType == L"gradient" || *sType == L"gradientradial" || *sType == L"gradientRadial"))
|
if (sType.is_init() && (*sType == L"gradient" || *sType == L"gradientradial" || *sType == L"gradientRadial"))
|
||||||
{
|
{
|
||||||
PPTX::Logic::GradFill* pGradFill = new PPTX::Logic::GradFill();
|
PPTX::Logic::GradFill* pGradFill = new PPTX::Logic::GradFill();
|
||||||
pGradFill->m_namespace = L"a";
|
pGradFill->m_namespace = L"a";
|
||||||
|
|
||||||
|
PPTX::Logic::Gs Gs_;
|
||||||
|
Gs_.color.Color = new PPTX::Logic::SrgbClr();
|
||||||
|
|
||||||
if (sColor.is_init())
|
if (sColor.is_init())
|
||||||
{
|
{
|
||||||
ODRAW::CColor color;
|
ODRAW::CColor color;
|
||||||
if (NS_DWC_Common::getColorFromString(*sColor, color))
|
if (NS_DWC_Common::getColorFromString(*sColor, color))
|
||||||
{
|
{
|
||||||
PPTX::Logic::Gs Gs_;
|
|
||||||
Gs_.color.Color = new PPTX::Logic::SrgbClr();
|
|
||||||
Gs_.color.Color->SetRGB(color.R, color.G, color.B);
|
|
||||||
|
|
||||||
Gs_.pos = 0;
|
|
||||||
pGradFill->GsLst.push_back(Gs_);
|
|
||||||
|
|
||||||
R = color.R;
|
R = color.R;
|
||||||
G = color.G;
|
G = color.G;
|
||||||
B = color.B;
|
B = color.B;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sColor2.is_init())
|
Gs_.color.Color->SetRGB(R, G, B);
|
||||||
|
if (sOpacity.is_init())
|
||||||
|
{
|
||||||
|
BYTE lAlpha = NS_DWC_Common::getOpacityFromString(*sOpacity);
|
||||||
|
|
||||||
|
PPTX::Logic::ColorModifier oMod;
|
||||||
|
oMod.name = L"alpha";
|
||||||
|
int nA = (int)(lAlpha * 100000.0 / 255.0);
|
||||||
|
oMod.val = nA;
|
||||||
|
Gs_.color.Color->Modifiers.push_back(oMod);
|
||||||
|
}
|
||||||
|
Gs_.pos = 0;
|
||||||
|
pGradFill->GsLst.push_back(Gs_);
|
||||||
|
|
||||||
|
if (sColor2.is_init() || sOpacity2.is_init())
|
||||||
{
|
{
|
||||||
PPTX::Logic::Gs Gs_;
|
PPTX::Logic::Gs Gs_;
|
||||||
Gs_.color.Color = new PPTX::Logic::SrgbClr();
|
Gs_.color.Color = new PPTX::Logic::SrgbClr();
|
||||||
if (sColor2->find(L"fill") != -1)
|
|
||||||
|
if (sColor2.is_init() && (std::wstring::npos != sColor2->find(L"fill")))
|
||||||
{
|
{
|
||||||
std::wstring sColorEffect = *sColor2;
|
std::wstring sColorEffect = *sColor2;
|
||||||
if (sColorEffect.length() > 5)
|
if (sColorEffect.length() > 5)
|
||||||
@ -5072,12 +5089,24 @@ void CDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem* oElem, XmlUtils
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ODRAW::CColor color;
|
ODRAW::CColor color;
|
||||||
if (NS_DWC_Common::getColorFromString(*sColor2, color))
|
if (sColor2.is_init() && NS_DWC_Common::getColorFromString(*sColor2, color))
|
||||||
{
|
{
|
||||||
Gs_.color.Color->SetRGB(color.R, color.G, color.B);
|
R = color.R;
|
||||||
|
G = color.G;
|
||||||
|
B = color.B;
|
||||||
}
|
}
|
||||||
|
Gs_.color.Color->SetRGB(R, G, B);
|
||||||
}
|
}
|
||||||
|
if (sOpacity2.is_init())
|
||||||
|
{
|
||||||
|
BYTE lAlpha = NS_DWC_Common::getOpacityFromString(*sOpacity2);
|
||||||
|
|
||||||
|
PPTX::Logic::ColorModifier oMod;
|
||||||
|
oMod.name = L"alpha";
|
||||||
|
int nA = (int)(lAlpha * 100000.0 / 255.0);
|
||||||
|
oMod.val = nA;
|
||||||
|
Gs_.color.Color->Modifiers.push_back(oMod);
|
||||||
|
}
|
||||||
Gs_.pos = 100 * 1000;
|
Gs_.pos = 100 * 1000;
|
||||||
pGradFill->GsLst.push_back( Gs_ );
|
pGradFill->GsLst.push_back( Gs_ );
|
||||||
}
|
}
|
||||||
@ -5093,17 +5122,30 @@ void CDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem* oElem, XmlUtils
|
|||||||
pGradFill->GsLst.push_back( Gs_ );
|
pGradFill->GsLst.push_back( Gs_ );
|
||||||
}
|
}
|
||||||
//todooo method
|
//todooo method
|
||||||
if (sRotate.is_init())
|
|
||||||
|
if (oFocusPosition.is_init() && (*sType == L"gradientradial" || *sType == L"gradientRadial"))
|
||||||
{
|
{
|
||||||
pGradFill->lin = new PPTX::Logic::Lin();
|
pGradFill->path.Init();
|
||||||
pGradFill->lin->scaled = 1;
|
pGradFill->path->path = 2;
|
||||||
|
pGradFill->path->rect.Init();
|
||||||
if (*sRotate == L"l") pGradFill->lin->ang = 0 * 60000;
|
pGradFill->path->rect->b = XmlUtils::ToString(100 - int(oFocusPosition->GetY() * 100)) + L"%";
|
||||||
if (*sRotate == L"t") pGradFill->lin->ang = 90 * 60000;
|
pGradFill->path->rect->t = XmlUtils::ToString(int(oFocusPosition->GetY() * 100)) + L"%";
|
||||||
if (*sRotate == L"b") pGradFill->lin->ang = 270 * 60000;
|
pGradFill->path->rect->l = XmlUtils::ToString(oFocusPosition->GetX() * 100) + L"%";
|
||||||
if (*sRotate == L"r") pGradFill->lin->ang = 180 * 60000;
|
pGradFill->path->rect->r = XmlUtils::ToString(100 - int(oFocusPosition->GetX() * 100)) + L"%";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (sRotate.is_init())
|
||||||
|
{
|
||||||
|
pGradFill->lin = new PPTX::Logic::Lin();
|
||||||
|
pGradFill->lin->scaled = 1;
|
||||||
|
|
||||||
|
if (*sRotate == L"l") pGradFill->lin->ang = 0 * 60000;
|
||||||
|
if (*sRotate == L"t") pGradFill->lin->ang = 90 * 60000;
|
||||||
|
if (*sRotate == L"b") pGradFill->lin->ang = 270 * 60000;
|
||||||
|
if (*sRotate == L"r") pGradFill->lin->ang = 180 * 60000;
|
||||||
|
}
|
||||||
|
}
|
||||||
pSpPr->Fill.m_type = PPTX::Logic::UniFill::gradFill;
|
pSpPr->Fill.m_type = PPTX::Logic::UniFill::gradFill;
|
||||||
pSpPr->Fill.Fill = pGradFill;
|
pSpPr->Fill.Fill = pGradFill;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user