⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v1.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *			GPAC - Multimedia Framework C SDK * *			Copyright (c) Cyril Concolato 2004-2005 *					All rights reserved * *  This file is part of GPAC / SVG Scene Graph Generator sub-project * *  GPAC is free software; you can redistribute it and/or modify *  it under the terms of the GNU Lesser General Public License as published by *  the Free Software Foundation; either version 2, or (at your option) *  any later version. *    *  GPAC is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU Lesser General Public License for more details. *    *  You should have received a copy of the GNU Lesser General Public *  License along with this library; see the file COPYING.  If not, write to *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  * */#include "svggen.h"void generateNode(FILE *output, SVGGenElement* svg_elt) {	fprintf(output, "typedef struct _tagSVG_SA_%sElement\n{\n", svg_elt->implementation_name);	if (svg_elt->has_transform) {		fprintf(output, "\tTRANSFORMABLE_SVG_ELEMENT\n");	} else {		fprintf(output, "\tBASE_SVG_ELEMENT\n");	}	if (!strcmp(svg_elt->implementation_name, "conditional")) {		fprintf(output, "\tSVGCommandBuffer updates;\n");	} 	generateAttributes(output, svg_elt->attributes, 0);	/*special case for handler node*/	if (!strcmp(svg_elt->implementation_name, "handler")) {		fprintf(output, "\tvoid (*handle_event)(GF_Node *hdl, GF_DOM_Event *event);\n");	}	fprintf(output, "} SVG_SA_%sElement;\n\n\n", svg_elt->implementation_name);}void generateAttributeInfo(FILE *output, char * elt_imp_name, SVGGenAttribute *att, u32 i){	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"%s\";\n", att->svg_name);	fprintf(output, "\t\t\tinfo->fieldType = %s_datatype;\n", att->impl_type);	fprintf(output, "\t\t\tinfo->far_ptr = & ((SVG_SA_%sElement *)node)->%s;\n", elt_imp_name, att->implementation_name);	fprintf(output, "\t\t\treturn GF_OK;\n");}u32 generateCoreInfo(FILE *output, SVGGenElement *elt, u32 start){	u32 i = start;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"id\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_ID_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = gf_node_get_name_address(node);\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"xml:id\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_ID_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = gf_node_get_name_address(node);\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"class\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_String_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVG_SA_Element *)node)->core->_class;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"xml:lang\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_LanguageID_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVG_SA_Element *)node)->core->lang;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"xml:base\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_String_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVG_SA_Element *)node)->core->base;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"xml:space\";\n");	fprintf(output, "\t\t\tinfo->fieldType = XML_Space_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVG_SA_Element *)node)->core->space;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"externalResourcesRequired\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_Boolean_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVG_SA_Element *)node)->core->eRR;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	return i;}void generateAttributeInfoFlat(FILE *output, char *pointer, char *name, char *type, u32 i){	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"%s\";\n", name);	fprintf(output, "\t\t\tinfo->fieldType = %s_datatype;\n", type);	fprintf(output, "\t\t\tinfo->far_ptr = &%s;\n", pointer);	fprintf(output, "\t\t\treturn GF_OK;\n");}u32 generateTransformInfo(FILE *output, SVGGenElement *elt, u32 start){	u32 i = start;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"transform\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_Transform_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVGTransformableElement *)node)->transform;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	return i;}u32 generateMotionTransformInfo(FILE *output, SVGGenElement *elt, u32 start){	u32 i = start;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"motionTransform\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_Motion_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = ((SVGTransformableElement *)node)->motionTransform;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	return i;}u32 generateXYInfo(FILE *output, SVGGenElement *elt, u32 start){	u32 i = start;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"x\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_Coordinate_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVGTransformableElement *)node)->xy.x;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	fprintf(output, "\t\tcase %d:\n", i);	fprintf(output, "\t\t\tinfo->name = \"y\";\n");	fprintf(output, "\t\t\tinfo->fieldType = SVG_Coordinate_datatype;\n");	fprintf(output, "\t\t\tinfo->far_ptr = &((SVGTransformableElement *)node)->xy.y;\n");	fprintf(output, "\t\t\treturn GF_OK;\n");	i++;	return i;}u32 generateGenericInfo(FILE *output, SVGGenElement *elt, u32 index, char *pointer_root, u32 start){	u32 i = start;	int k;	for (k=0; k < generic_attributes[index].array_length; k++) {		char *att_name = generic_attributes[index].array[k];		SVGGenAttribute *a = findAttribute(elt, att_name);		if (a) {			char pointer[500];			if (strstr(att_name, "xlink:")) {				sprintf(pointer, "%s%s", pointer_root, att_name+6);			} else if (strstr(att_name, "xml:")) {				sprintf(pointer, "%s%s", pointer_root, att_name+4);			} else {				char imp_name[50];				svgNameToImplementationName(att_name, imp_name);				sprintf(pointer, "%s%s", pointer_root, imp_name);			}			generateAttributeInfoFlat(output, pointer, a->svg_name, a->impl_type, i);			i++;		}	}	return i;}u32 generateIndexInfo(FILE *output, SVGGenElement *elt, u32 index, u32 start){	u32 i = start;	int k;	for (k=0; k < generic_attributes[index].array_length; k++) {		char *att_name = generic_attributes[index].array[k];		SVGGenAttribute *a = findAttribute(elt, att_name);		if (a) {			fprintf(output, "\tif(!strcmp(\"%s\", name)) return %d;\n", att_name, i); 			i++;		}	}	return i;}void generateNodeImpl(FILE *output, SVGGenElement* svg_elt) {	u32 i;		/***************************************************/		/*				Constructor						   */	/***************************************************/		fprintf(output, "void *gf_svg_new_%s()\n{\n\tSVG_SA_%sElement *p;\n", svg_elt->implementation_name,svg_elt->implementation_name);	fprintf(output, "\tGF_SAFEALLOC(p, SVG_SA_%sElement);\n\tif (!p) return NULL;\n\tgf_node_setup((GF_Node *)p, TAG_SVG_%s);\n\tgf_sg_parent_setup((GF_Node *) p);\n",svg_elt->implementation_name,svg_elt->implementation_name);	fprintf(output, "#ifdef GF_NODE_USE_POINTERS\n");	fprintf(output, "\t((GF_Node *p)->sgprivate->name = \"%s\";\n", svg_elt->implementation_name);	fprintf(output, "\t((GF_Node *p)->sgprivate->node_del = gf_svg_sa_%s_del;\n", svg_elt->implementation_name);	fprintf(output, "\t((GF_Node *p)->sgprivate->get_field = gf_svg_sa_%s_get_attribute;\n", svg_elt->implementation_name);	fprintf(output, "#endif\n");	fprintf(output, "\tgf_svg_sa_init_core((SVG_SA_Element *)p);\n");			if (svg_elt->has_properties || 		svg_elt->has_media_properties || 		svg_elt->has_opacity_properties) {		fprintf(output, "\tgf_svg_sa_init_properties((SVG_SA_Element *)p);\n");			} 	if (svg_elt->has_focus) {		fprintf(output, "\tgf_svg_sa_init_focus((SVG_SA_Element *)p);\n");			} 	if (svg_elt->has_xlink) {		fprintf(output, "\tgf_svg_sa_init_xlink((SVG_SA_Element *)p);\n");			} 	if (svg_elt->has_timing) {		fprintf(output, "\tgf_svg_sa_init_timing((SVG_SA_Element *)p);\n");			} 	if (svg_elt->has_sync) {		fprintf(output, "\tgf_svg_sa_init_sync((SVG_SA_Element *)p);\n");			}	if (svg_elt->has_animation){		fprintf(output, "\tgf_svg_sa_init_anim((SVG_SA_Element *)p);\n");			} 	if (svg_elt->has_conditional) {		fprintf(output, "\tgf_svg_sa_init_conditional((SVG_SA_Element *)p);\n");			} 	if (svg_elt->has_transform) {		fprintf(output, "\tgf_mx2d_init(p->transform.mat);\n");	} 	if (!strcmp(svg_elt->implementation_name, "conditional")) {		fprintf(output, "\tgf_svg_sa_init_lsr_conditional(&p->updates);\n");		fprintf(output, "\tgf_svg_sa_init_timing((SVG_SA_Element *)p);\n");			} 	for (i = 0; i < gf_list_count(svg_elt->attributes); i++) {		SVGGenAttribute *att = gf_list_get(svg_elt->attributes, i);		/* Initialization of complex types */		if ( !strcmp("SVG_Points", att->impl_type) || 			 !strcmp("SVG_Coordinates", att->impl_type) ||			 !strcmp("SMIL_KeyPoints", att->impl_type)) {			fprintf(output, "\tp->%s = gf_list_new();\n", att->implementation_name);		} else if (!strcmp("SVG_PathData", att->impl_type) && !strcmp(svg_elt->svg_name, "animateMotion")) {			fprintf(output, "#ifdef USE_GF_PATH\n");			fprintf(output, "\tgf_path_reset(&p->path);\n");			fprintf(output, "#else\n");			fprintf(output, "\tp->path.commands = gf_list_new();\n");			fprintf(output, "\tp->path.points = gf_list_new();\n");			fprintf(output, "#endif\n");		} else if (!strcmp("SVG_PathData", att->impl_type)) {			fprintf(output, "#ifdef USE_GF_PATH\n");			fprintf(output, "\tgf_path_reset(&p->d);\n");			fprintf(output, "#else\n");			fprintf(output, "\tp->d.commands = gf_list_new();\n");			fprintf(output, "\tp->d.points = gf_list_new();\n");			fprintf(output, "#endif\n");		} else if (!strcmp(att->svg_name, "lsr:enabled")) {			fprintf(output, "\tp->lsr_enabled = 1;\n");		} 	}	/*some default values*/	if (!strcmp(svg_elt->svg_name, "svg")) {		fprintf(output, "\tp->width.type = SVG_NUMBER_PERCENTAGE;\n");		fprintf(output, "\tp->width.value = INT2FIX(100);\n");		fprintf(output, "\tp->height.type = SVG_NUMBER_PERCENTAGE;\n");		fprintf(output, "\tp->height.value = INT2FIX(100);\n");	}	else if (!strcmp(svg_elt->svg_name, "solidColor")) {		fprintf(output, "\tp->properties->solid_opacity.value = FIX_ONE;\n");	}	else if (!strcmp(svg_elt->svg_name, "stop")) {		fprintf(output, "\tp->properties->stop_opacity.value = FIX_ONE;\n");	}	else if (!strcmp(svg_elt->svg_name, "linearGradient")) {		fprintf(output, "\tp->x2.value = FIX_ONE;\n");		fprintf(output, "\tgf_mx2d_init(p->gradientTransform.mat);\n");	}	else if (!strcmp(svg_elt->svg_name, "radialGradient")) {		fprintf(output, "\tp->cx.value = FIX_ONE/2;\n");		fprintf(output, "\tp->cy.value = FIX_ONE/2;\n");		fprintf(output, "\tp->r.value = FIX_ONE/2;\n");		fprintf(output, "\tgf_mx2d_init(p->gradientTransform.mat);\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -