This commit is contained in:
Elena.Subbotina
2023-08-07 11:36:56 +03:00
parent e57b3e22fd
commit a0e1760e94
2 changed files with 59 additions and 46 deletions

View File

@ -738,22 +738,23 @@ void OOXShapeReader::Parse(ReaderParameter oParam, PPTX::Logic::SolidFill *oox_s
// } // }
} }
//----------------------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------------------------
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::SolidFill *oox_solid_fill, std::wstring *change_sheme_color) void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::SolidFill *oox_solid_fill, PPTX::Logic::SchemeClr* change_color)
{ {
if (!oox_solid_fill)return; if (!oox_solid_fill) return;
unsigned int nColor = 0xffffff; //white unsigned int nColor = 0xffffff; //white
_CP_OPT(double) opacity; _CP_OPT(double) opacity;
if (change_sheme_color && oox_solid_fill->Color.getType() == OOX::et_a_schemeClr) if (change_color && oox_solid_fill->Color.getType() == OOX::et_a_schemeClr)
{ {
PPTX::Logic::SchemeClr *pSchemeColor = new PPTX::Logic::SchemeClr(); nColor = oParam.oDocx->m_pTheme->themeElements.clrScheme.GetABGRFromScheme(change_color->val.get());
pSchemeColor->val.set(*change_sheme_color); opacity = nColor & 0xff000000;
nColor = nColor & 0x00ffffff;
oox_solid_fill->Color.Color.reset(pSchemeColor); }
else
{
Parse(oParam, oox_solid_fill, nColor, opacity);
} }
Parse(oParam, oox_solid_fill, nColor, opacity);
pOutput->m_nFillColor = nColor; pOutput->m_nFillColor = nColor;
@ -873,7 +874,7 @@ bool OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
} }
return result; return result;
} }
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::GradFill *oox_grad_fill, std::wstring *change_sheme_color) void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::GradFill *oox_grad_fill, PPTX::Logic::SchemeClr* change_color)
{ {
if (!oox_grad_fill)return; if (!oox_grad_fill)return;
@ -920,41 +921,46 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
for (size_t i = 0; i < oox_grad_fill->GsLst.size(); i++) for (size_t i = 0; i < oox_grad_fill->GsLst.size(); i++)
{ {
unsigned int hexColor; unsigned int nColor;
_CP_OPT(double) opacity; _CP_OPT(double) opacity;
if (change_sheme_color && oox_grad_fill->GsLst[i].color.getType() == OOX::et_a_schemeClr) if (change_color && oox_grad_fill->GsLst[i].color.getType() == OOX::et_a_schemeClr)
{ {
//oox_grad_fill->GsLst[i]->m_oShemeClr.m_oVal.FromString(*change_sheme_color); nColor = oParam.oDocx->m_pTheme->themeElements.clrScheme.GetABGRFromScheme(change_color->val.get());
opacity = nColor & 0xff000000;
nColor = nColor & 0x00ffffff;
}
else
{
Parse(oParam, oox_grad_fill->GsLst[i].color.Color.GetPointer(), nColor, opacity);
} }
Parse(oParam, oox_grad_fill->GsLst[i].color.Color.GetPointer(), hexColor, opacity);
if (i == 0) if (i == 0)
{ {
pOutput->m_nFillColor = hexColor; pOutput->m_nFillColor = nColor;
if (opacity) if (opacity)
pOutput->m_nFillOpacity = (int)(*opacity * 100); pOutput->m_nFillOpacity = (int)(*opacity * 100);
} }
else if (i == oox_grad_fill->GsLst.size() - 1 && i > 0) else if (i == oox_grad_fill->GsLst.size() - 1 && i > 0)
{ {
pOutput->m_nFillColor2 = hexColor; pOutput->m_nFillColor2 = nColor;
if (opacity) if (opacity)
pOutput->m_nFillOpacity2 = (int)(*opacity * 100); pOutput->m_nFillOpacity2 = (int)(*opacity * 100);
} }
if (bColorsSet) if (bColorsSet)
{ {
pOutput->m_aFillShadeColors.push_back(std::make_pair((int)hexColor, oox_grad_fill->GsLst[i].pos)); pOutput->m_aFillShadeColors.push_back(std::make_pair((int)nColor, oox_grad_fill->GsLst[i].pos));
} }
} }
} }
} }
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::PattFill *oox_pattern_fill, std::wstring *change_sheme_color) void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::PattFill *oox_pattern_fill, PPTX::Logic::SchemeClr* change_color)
{ {
if (!oox_pattern_fill)return; if (!oox_pattern_fill)return;
} }
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Ln *oox_line_prop, std::wstring *change_sheme_color) void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Ln *oox_line_prop, PPTX::Logic::SchemeClr* change_color)
{ {
if (!oox_line_prop)return; if (!oox_line_prop)return;
@ -971,17 +977,18 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
} }
else if (fill.IsInit()) else if (fill.IsInit())
{ {
if (change_sheme_color && fill->Color.getType() == OOX::et_a_schemeClr)
{
PPTX::Logic::SchemeClr *pSchemeColor = new PPTX::Logic::SchemeClr();
pSchemeColor->val.set(*change_sheme_color);
fill->Color.Color.reset(pSchemeColor);
}
unsigned int nColor = 0; //black unsigned int nColor = 0; //black
_CP_OPT(double) opacity; _CP_OPT(double) opacity;
if (change_color && fill->Color.getType() == OOX::et_a_schemeClr)
Parse(oParam, fill.GetPointer(), nColor, opacity); {
nColor = oParam.oDocx->m_pTheme->themeElements.clrScheme.GetABGRFromScheme(change_color->val.get());
opacity = nColor & 0xff000000;
nColor = nColor & 0x00ffffff;
}
else
{
Parse(oParam, fill.GetPointer(), nColor, opacity);
}
pOutput->m_nLineColor = nColor; pOutput->m_nLineColor = nColor;
} }
else else
@ -1043,29 +1050,29 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::
if (!oParam.oDocx->m_pTheme || fmt_index <0) return; if (!oParam.oDocx->m_pTheme || fmt_index <0) return;
if (style_ref->Color.is<PPTX::Logic::SchemeClr>() == false) return; PPTX::Logic::SchemeClr* pSchemeClr = NULL;
if (style_ref->Color.is<PPTX::Logic::SchemeClr>())
{
pSchemeClr = dynamic_cast<PPTX::Logic::SchemeClr*>(style_ref->Color.Color.GetPointer());
}
PPTX::Logic::SchemeClr & schemeClr = style_ref->Color.as<PPTX::Logic::SchemeClr>();
std::wstring color = schemeClr.val.get();
if (type == 1) if (type == 1)
{ {
if (fmt_index < 1000 && fmt_index < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst.size()) if (fmt_index < 1000 && fmt_index < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst.size())
{ {
Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst[fmt_index], &color); Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst[fmt_index], pSchemeClr);
} }
else if (fmt_index > 1000 && ((fmt_index-1000) < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst.size())) else if (fmt_index > 1000 && ((fmt_index-1000) < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst.size()))
{ {
fmt_index -= 1000; fmt_index -= 1000;
Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst[fmt_index], &color); Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst[fmt_index], pSchemeClr);
} }
} }
if (type == 2 && fmt_index < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.lnStyleLst.size()) if (type == 2 && fmt_index < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.lnStyleLst.size())
{ {
Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.lnStyleLst[fmt_index], &color); Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.lnStyleLst[fmt_index], pSchemeClr);
} }
//if (style_matrix_ref->getType() == OOX::et_a_effectRef && fmt_index < theme->m_oThemeElements.m_oFmtScheme.m_oEffectStyleLst.m_arrEffectStyle.size()) //if (style_matrix_ref->getType() == OOX::et_a_effectRef && fmt_index < theme->m_oThemeElements.m_oFmtScheme.m_oEffectStyleLst.m_arrEffectStyle.size())
@ -1584,16 +1591,16 @@ bool OOXShapeReader::ParseVmlObject ( ReaderParameter oParam , RtfShapePtr& pOut
} }
return true; return true;
} }
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, std::wstring *change_sheme_color) void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, PPTX::Logic::SchemeClr* change_color)
{ {
if (!oox_fill) return; if (!oox_fill) return;
switch(oox_fill->m_type) switch(oox_fill->m_type)
{ {
case PPTX::Logic::UniFill::blipFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::BlipFill*>(oox_fill->Fill.operator ->())); break; case PPTX::Logic::UniFill::blipFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::BlipFill*>(oox_fill->Fill.operator ->())); break;
case PPTX::Logic::UniFill::gradFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::GradFill*>(oox_fill->Fill.operator ->()), change_sheme_color); break; case PPTX::Logic::UniFill::gradFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::GradFill*>(oox_fill->Fill.operator ->()), change_color); break;
case PPTX::Logic::UniFill::pattFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::PattFill*>(oox_fill->Fill.operator ->()), change_sheme_color); break; case PPTX::Logic::UniFill::pattFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::PattFill*>(oox_fill->Fill.operator ->()), change_color); break;
case PPTX::Logic::UniFill::solidFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::SolidFill*>(oox_fill->Fill.operator ->()), change_sheme_color);break; case PPTX::Logic::UniFill::solidFill: Parse(oParam, pOutput, dynamic_cast<PPTX::Logic::SolidFill*>(oox_fill->Fill.operator ->()), change_color);break;
} }
} }
bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool bUsedType) bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool bUsedType)

View File

@ -46,7 +46,13 @@ namespace OOX
class CBackground; class CBackground;
} }
} }
namespace PPTX
{
namespace Logic
{
class SchemeClr;
}
}
class OOXShapeReader class OOXShapeReader
{ {
public: public:
@ -86,13 +92,13 @@ private:
void Parse(ReaderParameter oParam, PPTX::Logic::SolidFill *oox_solid_fill, unsigned int & nColor, _CP_OPT(double) &opacity); void Parse(ReaderParameter oParam, PPTX::Logic::SolidFill *oox_solid_fill, unsigned int & nColor, _CP_OPT(double) &opacity);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::StyleRef *style_ref, int type); void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::StyleRef *style_ref, int type);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Ln *oox_line_prop, std::wstring *change_sheme_color = NULL); void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Ln *oox_line_prop, PPTX::Logic::SchemeClr* change_color = NULL);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, std::wstring *change_sheme_color = NULL); void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, PPTX::Logic::SchemeClr* change_color = NULL);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::GradFill *oox_grad_fill, std::wstring *change_sheme_color = NULL); void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::GradFill *oox_grad_fill, PPTX::Logic::SchemeClr* change_color = NULL);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::PattFill *oox_pattern_fill, std::wstring *change_sheme_color = NULL); void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::PattFill *oox_pattern_fill, PPTX::Logic::SchemeClr* change_color = NULL);
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::SolidFill *oox_solid_fill, std::wstring *change_sheme_color = NULL); void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::SolidFill *oox_solid_fill, PPTX::Logic::SchemeClr* change_color = NULL);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
OOX::Vml::CVmlCommonElements *m_vmlElement = NULL; OOX::Vml::CVmlCommonElements *m_vmlElement = NULL;
OOX::WritingElementWithChilds<OOX::WritingElement> *m_arrElement = NULL; OOX::WritingElementWithChilds<OOX::WritingElement> *m_arrElement = NULL;