SI32 CSWF::FindFrameStart(UI16 usClipID, UI16 usFrame) { SI32 slLeft, slRight, slMiddle, slShowFrame; void **lprgvpTagArray; UI32 ulNumTags; UNKNOWNTAG* lputTag; SHOWFRAME *lpsfShowFrame; if(usFrame==0) return -1; if(usFrame==1) return 0; usFrame--; if(!GetTagArray(usClipID,lprgvpTagArray,ulNumTags)) return -1; if(!lprgvpTagArray) return -1; slLeft=0; slRight=ulNumTags-1; while(slLeft<=slRight) { slMiddle=(slLeft+slRight)/2; slShowFrame=slMiddle; lputTag=(UNKNOWNTAG*)lprgvpTagArray[slShowFrame]; while(lputTag->rhTagHeader.usTagCode!=TAGCODE_SHOWFRAME) { slShowFrame++; lputTag=(UNKNOWNTAG*)lprgvpTagArray[slShowFrame]; } lpsfShowFrame=(SHOWFRAME*)lprgvpTagArray[slShowFrame]; if(lpsfShowFrame->usFrame==usFrame) return slShowFrame+1; else if(lpsfShowFrame->usFrame<usFrame) slLeft=slMiddle+1; else slRight=slMiddle-1; } return -1; }
virtual void OnCreate() { m_pFrame->CreateInstance(m_pos, GetTagArray()); }
UI32 CSWF::SaveFrameAsSVG(UI16 usClipID, UI16 usFrame) { FILE *pfileSVG; char szSVGFileName[MAX_FILEPATH], szID[256]; double sdXMin, sdXMax, sdYMin, sdYMax, sdWidth, sdHeight; void **lprgvpTagArray; UI32 ulNumTags, ulStart; UI16 usFrameCount=0; UNKNOWNTAG* lputTag; SHOWFRAME *lpsfShowFrame; DEFINESHAPE *lpdsShape; CDisplayList cdlDisplayList; LAYER lLayer; if(!GetTagArray(usClipID,lprgvpTagArray,ulNumTags)) return -1; /*dimension calculations*/ sdXMin=double(fhFrameHeader.srFrameSize.slXMin)/20; sdXMax=double(fhFrameHeader.srFrameSize.slXMax)/20; sdYMin=double(fhFrameHeader.srFrameSize.slYMin)/20; sdYMax=double(fhFrameHeader.srFrameSize.slYMax)/20; sdWidth=sdXMax-sdXMin; sdHeight=sdYMax-sdYMin; /*open file*/ CreateFileName(szSVGFileName,"frame",usFrame,"svg"); pfileSVG=fopen(szSVGFileName,"w"); /*info*/ fprintf(pfileSVG,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fprintf(pfileSVG,"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n"); fprintf(pfileSVG,"\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg11.dtd\">\n\n"); fprintf(pfileSVG,"<!-- Generated by SWFRIP -->\n\n"); /*svg*/ fprintf(pfileSVG,"<svg width=\"%0.2f\" height=\"%0.2f\" viewBox=\"%0.2f %0.2f %0.2f %0.2f\">\n\n", sdWidth,sdHeight,sdXMin,sdYMin,sdWidth,sdHeight); /*frame*/ //fprintf(pfileSVG,"<!-- Frame %i -->\n\n",usFrame); //fprintf(pfileSVG,"<g id=\"frame_%i\">\n\n",usFrame); /*generate display list*/ for(UI32 iTag=0; usFrameCount<usFrame && iTag<ulNumTags; iTag++) { lputTag=(UNKNOWNTAG*)lprgvpTagArray[iTag]; switch(lputTag->rhTagHeader.usTagCode) { case TAGCODE_PLACEOBJECT: case TAGCODE_PLACEOBJECT2: cdlDisplayList.Place(lputTag); break; case TAGCODE_REMOVEOBJECT: case TAGCODE_REMOVEOBJECT2: cdlDisplayList.Remove(lputTag); break; case TAGCODE_SHOWFRAME: usFrameCount++; break; } } /*make frame*/ while(cdlDisplayList.GetNextLayer(&lLayer)) { if(GetCharacterType(lLayer.po2Place.usCharacterID)!=SWF_SHAPE) continue; lpdsShape=(DEFINESHAPE*)lprgvpCharacters[lLayer.po2Place.usCharacterID]; //WriteDefineShapeAsSVG(lpdsShape,false,pfileSVG); /*save character*/ //SetExportFormat(SWF_SHAPE,1); //SaveCharacter(lLayer.po2Place.usCharacterID); /*write color transform filter*/ if(lLayer.po2Place.fPlaceFlagHasColorTransform) { sprintf(szID,"color_transform_%p",lLayer.lplNext); WriteColorMatrixFilter(&lLayer.po2Place.cxfwaColorTransform,szID,pfileSVG); fprintf(pfileSVG,"<g filter=\"url(#%s)\">\n",szID); } /*write image*/ /*fprintf(pfileSVG,"<image x=\"%.2f\" y=\"%.2f\"", double(lpdsShape->rShapeBounds.slXMin)/20, double(lpdsShape->rShapeBounds.slYMin)/20); fprintf(pfileSVG," width=\"%.2f\" height=\"%.2f\"", double(lpdsShape->rShapeBounds.slXMax-lpdsShape->rShapeBounds.slXMin)/20, double(lpdsShape->rShapeBounds.slYMax-lpdsShape->rShapeBounds.slYMin)/20); */ //fprintf(pfileSVG,"<use xlink:href=\"#shape_%i\"",lpdsShape->usShapeID); /*inline if(lLayer.po2Place.fPlaceFlagHasColorTransform) fprintf(pfileSVG," filter=\"url(#color_transform_%p)\"",lLayer.lplNext); */ /*if(lLayer.po2Place.fPlaceFlagHasMatrix) WriteTransform(&lLayer.po2Place.mMatrix,pfileSVG); fprintf(pfileSVG," />\n"); */ WriteDefineShapeAsSVG(lpdsShape,true,pfileSVG,&lLayer.po2Place); if(lLayer.po2Place.fPlaceFlagHasColorTransform) fprintf(pfileSVG,"</g>\n"); fprintf(pfileSVG,"\n"); } /*end file*/ //fprintf(pfileSVG,"</g>\n\n"); fprintf(pfileSVG,"</svg>"); fclose(pfileSVG); /*so that szLastRes is this frame*/ CreateFileName(szSVGFileName,"frame",usFrame,"svg"); return 0; }