mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-20 22:59:56 +08:00
fix part of 59407 bug
This commit is contained in:
@ -35,44 +35,78 @@
|
||||
|
||||
namespace PPT
|
||||
{
|
||||
namespace Intermediate
|
||||
{
|
||||
CRecordPP10SlideBinaryTagExtension* getPP10SlideBinaryTagExtension(CRecordSlide *pSlide)
|
||||
{
|
||||
CRecordSlideProgTagsContainer* progTag = pSlide->m_pSlideProgTagsContainer;
|
||||
return progTag ? progTag->getPP10SlideBinaryTagExtension() : nullptr;
|
||||
}
|
||||
|
||||
std::vector<SOldAnimation> getOldSlideAnimation(CRecordSlide *pSlide)
|
||||
{
|
||||
std::vector<CRecordShapeContainer*> arrShapeCont;
|
||||
pSlide->GetRecordsByType(&arrShapeCont, true);
|
||||
|
||||
std::vector<SOldAnimation> listOfRawAnimIC;
|
||||
for (auto* pShapeCont : arrShapeCont)
|
||||
{
|
||||
std::vector<CRecordShape* > shape;
|
||||
pShapeCont->GetRecordsByType(&shape, true);
|
||||
std::vector<CRecordAnimationInfoContainer* > anim;
|
||||
pShapeCont->GetRecordsByType(&anim, true);
|
||||
SOldAnimation animIC;
|
||||
if (!anim.empty() && !shape.empty())
|
||||
{
|
||||
animIC.shapeId = shape[0]->m_nID;
|
||||
animIC.anim = anim[0];
|
||||
listOfRawAnimIC.push_back(animIC);
|
||||
}
|
||||
}
|
||||
|
||||
return listOfRawAnimIC;
|
||||
}
|
||||
SlideAnimation ParseSlideAnimation(CRecordSlide *pSlide)
|
||||
{
|
||||
SlideAnimation slideAnim;
|
||||
slideAnim.arrAnim_1995 = getOldSlideAnimation(pSlide);
|
||||
slideAnim.pAnim_2010 = getPP10SlideBinaryTagExtension(pSlide);
|
||||
|
||||
return slideAnim;
|
||||
}
|
||||
}
|
||||
namespace Intermediate
|
||||
{
|
||||
CRecordPP10SlideBinaryTagExtension* getPP10SlideBinaryTagExtension(CRecordSlide *pSlide)
|
||||
{
|
||||
CRecordSlideProgTagsContainer* progTag = pSlide->m_pSlideProgTagsContainer;
|
||||
return progTag ? progTag->getPP10SlideBinaryTagExtension() : nullptr;
|
||||
}
|
||||
|
||||
std::vector<SOldAnimation> getOldSlideAnimation(CRecordSlide *pSlide)
|
||||
{
|
||||
std::vector<CRecordShapeContainer*> arrShapeCont;
|
||||
pSlide->GetRecordsByType(&arrShapeCont, true);
|
||||
|
||||
std::vector<SOldAnimation> listOfRawAnimIC;
|
||||
for (auto* pShapeCont : arrShapeCont)
|
||||
{
|
||||
std::vector<CRecordShape* > shape;
|
||||
pShapeCont->GetRecordsByType(&shape, true);
|
||||
std::vector<CRecordAnimationInfoContainer* > anim;
|
||||
pShapeCont->GetRecordsByType(&anim, true);
|
||||
SOldAnimation animIC;
|
||||
if (!anim.empty() && !shape.empty())
|
||||
{
|
||||
animIC.shapeId = shape[0]->m_nID;
|
||||
animIC.anim = anim[0];
|
||||
listOfRawAnimIC.push_back(animIC);
|
||||
}
|
||||
}
|
||||
|
||||
return listOfRawAnimIC;
|
||||
}
|
||||
|
||||
void AddElementMetadataToSlideAnim(SlideAnimation& anim, CElementPtr element)
|
||||
{
|
||||
if (!element)
|
||||
return;
|
||||
|
||||
auto id = element->m_lID;
|
||||
anim.realShapesIds.insert(id);
|
||||
|
||||
auto type = element->m_etType;
|
||||
if (type == PPT::etPicture || type == PPT::etAudio || type == PPT::etVideo)
|
||||
anim.nonTextShapes.insert(id);
|
||||
}
|
||||
|
||||
void ParseShapes(CSlide *pSlide, SlideAnimation& anim)
|
||||
{
|
||||
CGroupElement *pGroupElement = !pSlide->m_arElements.empty() ? dynamic_cast<CGroupElement *>(pSlide->m_arElements[0].get()) : NULL;
|
||||
|
||||
size_t start_index = 0;
|
||||
|
||||
if (pGroupElement)
|
||||
{
|
||||
for (size_t i = 0; i < pGroupElement->m_pChildElements.size(); ++i)
|
||||
AddElementMetadataToSlideAnim(anim, pGroupElement->m_pChildElements[i]);
|
||||
|
||||
start_index = 1;
|
||||
}
|
||||
|
||||
for (size_t i = start_index; i < pSlide->m_arElements.size(); ++i)
|
||||
AddElementMetadataToSlideAnim(anim, pSlide->m_arElements[i]);
|
||||
|
||||
return;
|
||||
}
|
||||
SlideAnimation ParseSlideAnimation(CRecordSlide *pSlideRecord, CSlide *pCSlide)
|
||||
{
|
||||
SlideAnimation slideAnim;
|
||||
slideAnim.arrAnim_1995 = getOldSlideAnimation(pSlideRecord);
|
||||
slideAnim.pAnim_2010 = getPP10SlideBinaryTagExtension(pSlideRecord);
|
||||
ParseShapes(pCSlide, slideAnim);
|
||||
|
||||
return slideAnim;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user