Пример #1
0
static void swf_svg_print_matrix(SWFReader *read, GF_Matrix2D *mat)
{
	if (!gf_mx2d_is_identity(*mat))
	{
		GF_Point2D  scale;
		GF_Point2D  translate;
		Fixed       rotate;
		if( gf_mx2d_decompose(mat, &scale, &rotate, &translate))
		{
			swf_svg_print(read, "transform=\"");
			if (translate.x != 0 || translate.y != 0)
			{
				swf_svg_print(read, "translate(%g, %g) ", FIX2FLT(translate.x), FIX2FLT(translate.y));
			}
			if (rotate != 0)
			{
				swf_svg_print(read, "rotate(%g) ", FIX2FLT(rotate));
			}
			if (scale.x != FIX_ONE || scale.y != FIX_ONE)
			{
				swf_svg_print(read, "scale(%g, %g) ", FIX2FLT(scale.x), FIX2FLT(scale.y));
			}
			swf_svg_print(read, "\" ");
		}
		else
		{
			swf_svg_print(read, "transform=\"matrix(%g,%g,%g,%g,%g,%g)\" ", FIX2FLT(mat->m[0]), FIX2FLT(mat->m[3]), FIX2FLT(mat->m[1]), FIX2FLT(mat->m[4]), FIX2FLT(mat->m[2]), FIX2FLT(mat->m[5]) );
		}
	}
}
Пример #2
0
static void StatSVGAttribute(GF_SceneStatistics *stat, GF_FieldInfo *field)
{
	u32 i = 0;

	stat->nb_svg_attributes++;

	switch (field->fieldType) {
	case SVG_PathData_datatype:
		{
#if USE_GF_PATH
			SVG_PathData *d = (SVG_PathData *)field->far_ptr;
			for (i=0; i<d->n_points; i++) {
				StatSVGPoint(stat, &(d->points[i]));
				stat->count_2d ++;
			}		
#else
			SVG_PathData *d = (SVG_PathData *)field->far_ptr;
			for (i=0; i<gf_list_count(d->points); i++) {
				SVG_Point *p = (SVG_Point *)gf_list_get(d->points, i);
				StatSVGPoint(stat, (SFVec2f *)p);
				stat->count_2d ++;
			}
#endif
		}
		break;
	case SVG_ViewBox_datatype:
		{
			SVG_ViewBox *vB = (SVG_ViewBox *)field->far_ptr;
			StatFixed(stat, vB->x, 0);
			StatFixed(stat, vB->y, 0);
			StatFixed(stat, vB->width, 0);
			StatFixed(stat, vB->height, 0);
		}
		break;
	case SVG_Points_datatype:
	case SVG_Coordinates_datatype:
		{
			GF_List *points = *((GF_List **)field->far_ptr);
			for (i=0; i<gf_list_count(points); i++) {
				SVG_Point *p = (SVG_Point *)gf_list_get(points, i);
				StatSVGPoint(stat, (SFVec2f *)p);
				stat->count_2d ++;
			}
		}
		break;
	case SVG_Transform_datatype:
		{
			GF_Matrix2D *mx = &((SVG_Transform *)field->far_ptr)->mat;
			if (!gf_mx2d_is_identity(*mx) && !(!mx->m[0] && !mx->m[1] && !mx->m[3] && !mx->m[4])) {
				StatFixed(stat, mx->m[0], 1);
				StatFixed(stat, mx->m[1], 1);
				StatFixed(stat, mx->m[3], 1);
				StatFixed(stat, mx->m[4], 1);				
				StatFixed(stat, mx->m[2], 0);
				StatFixed(stat, mx->m[5], 0);
			} 
		}
		break;
	case SVG_Motion_datatype:
		{
			GF_Matrix2D *mx = (GF_Matrix2D *)field->far_ptr;
			if (!gf_mx2d_is_identity(*mx) && !(!mx->m[0] && !mx->m[1] && !mx->m[3] && !mx->m[4])) {
				StatFixed(stat, mx->m[0], 1);
				StatFixed(stat, mx->m[1], 1);
				StatFixed(stat, mx->m[3], 1);
				StatFixed(stat, mx->m[4], 1);				
				StatFixed(stat, mx->m[2], 0);
				StatFixed(stat, mx->m[5], 0);
			} 
		}
		break;
	case SVG_Length_datatype:
	case SVG_Coordinate_datatype: 
		StatFixed(stat, ((SVG_Number *)field->far_ptr)->value, 0);
		break;
	}
}