Exemple #1
0
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;
}
Exemple #2
0
	virtual void OnCreate()
	{
		m_pFrame->CreateInstance(m_pos, GetTagArray());
	}
Exemple #3
0
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;
}