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

📄 svg_smjs.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 4 页
字号:
	}		break;	case SVG_Paint_datatype:	{		SVG_Paint *paint = (SVG_Paint *)info.far_ptr;		if (1 || paint->type==SVG_PAINT_COLOR) {			newObj = JS_NewObject(c, &svg_rt->rgbClass, 0, 0);			GF_SAFEALLOC(rgb, rgbCI);			rgb->r = (u8) (255*FIX2FLT(paint->color.red) );			rgb->g = (u8) (255*FIX2FLT(paint->color.green) );			rgb->b = (u8) (255*FIX2FLT(paint->color.blue) );			JS_SetPrivate(c, newObj, rgb);			*rval = OBJECT_TO_JSVAL(newObj);			return JS_TRUE;		}		return JS_FALSE;	}	}	return JS_FALSE;}JSBool svg_udom_set_trait(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_Err e;	GF_FieldInfo info;	char *val = NULL;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE;	if (argc==3) {		char fullName[1024];		if (!JSVAL_IS_STRING(argv[1])) return JS_FALSE;		strcpy(fullName, JS_GetStringBytes(JSVAL_TO_STRING(argv[0])) );		strcat(fullName, ":");		strcat(fullName, JS_GetStringBytes(JSVAL_TO_STRING(argv[1])) );		e = gf_node_get_field_by_name(n, fullName, &info);		val = JS_GetStringBytes(JSVAL_TO_STRING(argv[2]));	} else if (argc==2) {		e = gf_node_get_field_by_name(n, JS_GetStringBytes(JSVAL_TO_STRING(argv[0])), &info);		val = JS_GetStringBytes(JSVAL_TO_STRING(argv[1]));	} else e = GF_BAD_PARAM;	if (!val || (e!=GF_OK)) return JS_FALSE;	*rval = JSVAL_VOID;	switch (info.fieldType) {	/* inheritable floats */	case SVG_FontSize_datatype:	case SVG_Color_datatype:	case SVG_Paint_datatype:	/* inheritable float and unit */	case SVG_Length_datatype:	case SVG_Coordinate_datatype:	/*Number*/	case SVG_Number_datatype:/*all string traits*/	case SVG_Boolean_datatype:	case SVG_FillRule_datatype:	case SVG_StrokeLineJoin_datatype:	case SVG_StrokeLineCap_datatype:	case SVG_FontStyle_datatype:	case SVG_FontWeight_datatype:	case SVG_FontVariant_datatype:	case SVG_TextAnchor_datatype:	case SVG_Display_datatype:	case SVG_Visibility_datatype:	case SMIL_AttributeType_datatype:	case SMIL_CalcMode_datatype:	case SMIL_Additive_datatype:	case SMIL_Accumulate_datatype:	case SMIL_Restart_datatype:	case SMIL_Fill_datatype:	case SVG_GradientUnit_datatype:	case SVG_PreserveAspectRatio_datatype:/*end of string traits*//*DOM string traits*/	case SVG_FontFamily_datatype:	case XMLRI_datatype:	case SVG_String_datatype:	case SVG_ContentType_datatype:	case SVG_LanguageID_datatype:/*end of DOM string traits*/		gf_svg_parse_attribute(n, &info, val, 0);		svg_node_changed(n, &info);		break;#if 0/*SVGT 1.2 default traits*/	case SMIL_KeyTimes_datatype:	case SMIL_KeyPoints_datatype:	case SMIL_KeySplines_datatype:	case SVG_Coordinates_datatype:	case SVG_StrokeDashArray_datatype:	case SVG_Points_datatype:	case SVG_Motion_datatype:/*end SVGT 1.2 default traits*//*unimplemented/unnkown/FIXME traits*/	case SMIL_SyncTolerance_datatype:	case SVG_TransformType_datatype:	case SVG_TransformList_datatype:	case SMIL_AnimateValue_datatype:	case SMIL_AnimateValues_datatype:	case SMIL_AttributeName_datatype:	case SMIL_Times_datatype:	case SMIL_Duration_datatype:	case SMIL_RepeatCount_datatype:	default:/*end unimplemented/unnkown/FIXME traits*/		return JS_FALSE;#endif	}	return JS_TRUE;}JSBool svg_udom_set_float_trait(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_FieldInfo info;	jsdouble d;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=2) return JS_FALSE;	if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE;	if (!JSVAL_IS_NUMBER(argv[1])) return JS_FALSE;	JS_ValueToNumber(c, argv[1], &d);	*rval = JSVAL_VOID;	if (gf_node_get_field_by_name(n, JS_GetStringBytes(JSVAL_TO_STRING(argv[0])), &info) != GF_OK) return JS_FALSE;	switch (info.fieldType) {	/* inheritable floats */	case SVG_FontSize_datatype:	case SVG_Length_datatype:	case SVG_Coordinate_datatype:	case SVG_Number_datatype:	{		SVG_Number *l = (SVG_Number *)info.far_ptr;		l->type=SVG_NUMBER_VALUE;		l->value = FLT2FIX(d);		break;	}	default:		return JS_FALSE;	}	svg_node_changed(n, &info);	return JS_TRUE;}JSBool svg_udom_set_matrix_trait(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	JSObject *mO;	char *szName;	GF_FieldInfo info;	GF_Matrix2D *mx;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=2) return JS_FALSE;	if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE;	szName = JS_GetStringBytes(JSVAL_TO_STRING(argv[0]));	if (!JSVAL_IS_OBJECT(argv[1])) return JS_FALSE;	mO = JSVAL_TO_OBJECT(argv[1]);	if (!JS_InstanceOf(c, mO, &svg_rt->matrixClass, NULL) ) return JS_FALSE;	mx = JS_GetPrivate(c, mO);	if (!mx) return JS_FALSE;	if (gf_node_get_field_by_name(n, szName, &info) != GF_OK) return JS_FALSE;	if (info.fieldType==SVG_Transform_datatype) {		gf_mx2d_copy(((SVG_Transform*)info.far_ptr)->mat, *mx);		svg_node_changed(n, NULL);		return JS_TRUE;	}	return JS_FALSE;}JSBool svg_udom_set_rect_trait(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	JSObject *rO;	char *szName;	GF_FieldInfo info;	rectCI *rc;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=2) return JS_FALSE;	if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE;	szName = JS_GetStringBytes(JSVAL_TO_STRING(argv[0]));	if (!JSVAL_IS_OBJECT(argv[1])) return JS_FALSE;	rO = JSVAL_TO_OBJECT(argv[1]);	if (!JS_InstanceOf(c, rO, &svg_rt->rectClass, NULL) ) return JS_FALSE;	rc = JS_GetPrivate(c, rO);	if (!rc) return JS_FALSE;	if (gf_node_get_field_by_name(n, szName, &info) != GF_OK) return JS_FALSE;	if (info.fieldType==SVG_ViewBox_datatype) {		SVG_ViewBox *v = (SVG_ViewBox *)info.far_ptr;		v->x = FLT2FIX(rc->x);		v->y = FLT2FIX(rc->y);		v->width = FLT2FIX(rc->w);		v->height = FLT2FIX(rc->h);		svg_node_changed(n, NULL);		return JS_TRUE;	}	return JS_FALSE;}JSBool svg_udom_set_path_trait(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	pathCI *path;	GF_FieldInfo info;	JSObject *pO;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=2) return JS_FALSE;	if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE;	if (!JSVAL_IS_OBJECT(argv[1])) return JS_FALSE;	pO = JSVAL_TO_OBJECT(argv[1]);	if (!JS_InstanceOf(c, pO, &svg_rt->pathClass, NULL) ) return JS_FALSE;	path = JS_GetPrivate(c, pO);	if (!path) return JS_FALSE;	if (gf_node_get_field_by_name(n, JS_GetStringBytes(JSVAL_TO_STRING(argv[0])), &info) != GF_OK) return JS_FALSE;	if (info.fieldType==SVG_PathData_datatype) {#if USE_GF_PATH#else		u32 i;		u32 nb_pts;		SVG_PathData *d = (SVG_PathData *)info.far_ptr;		while (gf_list_count(d->commands)) {			u8 *t = gf_list_get(d->commands, 0);			gf_list_rem(d->commands, 0);			free(t);		}		while (gf_list_count(d->points)) {			SVG_Point *t = gf_list_get(d->points, 0);			gf_list_rem(d->points, 0);			free(t);		}		nb_pts = 0;		for (i=0; i<path->nb_coms; i++) {			u8 *t = malloc(sizeof(u8));			*t = path->tags[i];			gf_list_add(d->commands, t);			switch (*t) {			case 0:			case 1: nb_pts++; break;			case 2: nb_pts+=3; break;			case 4: nb_pts+=2; break;			}		}		for (i=0; i<nb_pts; i++) {			SVG_Point *t = malloc(sizeof(SVG_Point));			t->x = FLT2FIX(path->pts[i].x);			t->y = FLT2FIX(path->pts[i].y);			gf_list_add(d->points, t);		}		svg_node_changed(n, NULL);		return JS_TRUE;#endif	}	return JS_FALSE;}JSBool svg_udom_set_rgb_color_trait(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_FieldInfo info;	rgbCI *rgb;	JSObject *colO;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=2) return JS_FALSE;	if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE;	if (!JSVAL_IS_OBJECT(argv[1])) return JS_FALSE;	colO = JSVAL_TO_OBJECT(argv[1]);	if (!JS_InstanceOf(c, colO, &svg_rt->rgbClass, NULL) ) return JS_FALSE;	rgb = JS_GetPrivate(c, colO);	if (!rgb) return JS_FALSE;	*rval = JSVAL_VOID;	if (gf_node_get_field_by_name(n, JS_GetStringBytes(JSVAL_TO_STRING(argv[0])), &info) != GF_OK) return JS_FALSE;	switch (info.fieldType) {	case SVG_Color_datatype:	{		SVG_Color *col = (SVG_Color *)info.far_ptr;		col->type = SVG_COLOR_RGBCOLOR;		col->red = FLT2FIX(rgb->r / 255.0f);		col->green = FLT2FIX(rgb->g / 255.0f);		col->blue = FLT2FIX(rgb->b / 255.0f);		svg_node_changed(n, &info);		return JS_TRUE;	}	case SVG_Paint_datatype:	{		SVG_Paint *paint = (SVG_Paint *)info.far_ptr;		paint->type = SVG_PAINT_COLOR;		paint->color.type = SVG_COLOR_RGBCOLOR;		paint->color.red = FLT2FIX(rgb->r / 255.0f);		paint->color.green = FLT2FIX(rgb->g / 255.0f);		paint->color.blue = FLT2FIX(rgb->b / 255.0f);		svg_node_changed(n, &info);		return JS_TRUE;	}	}	return JS_FALSE;}static JSBool svg_get_bbox(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval, Bool get_screen){	GF_JSAPIParam par;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n || argc) return JS_FALSE;	par.bbox.is_set = 0;	if (ScriptAction(n->sgprivate->scenegraph, get_screen ? GF_JSAPI_OP_GET_SCREEN_BBOX : GF_JSAPI_OP_GET_LOCAL_BBOX, (GF_Node *)n, &par) && par.bbox.is_set) {		JSObject *rO = JS_NewObject(c, &svg_rt->rectClass, 0, 0);		rectCI *rc = malloc(sizeof(rectCI));		rc->sg = NULL;		rc->x = FIX2FLT(par.bbox.min_edge.x);		/*BBox is in 3D coord system style*/		rc->y = FIX2FLT(par.bbox.min_edge.y);		rc->w = FIX2FLT(par.bbox.max_edge.x - par.bbox.min_edge.x);		rc->h = FIX2FLT(par.bbox.max_edge.y - par.bbox.min_edge.y);		JS_SetPrivate(c, rO, rc);		*rval = OBJECT_TO_JSVAL(rO);		return JS_TRUE;	}	return JS_FALSE;}JSBool svg_udom_get_local_bbox(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	return svg_get_bbox(c, obj, argc, argv, rval, 0);}JSBool svg_udom_get_screen_bbox(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	return svg_get_bbox(c, obj, argc, argv, rval, 1);}JSBool svg_udom_get_screen_ctm(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_JSAPIParam par;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n || argc) return JS_FALSE;	if (ScriptAction(n->sgprivate->scenegraph, GF_JSAPI_OP_GET_TRANSFORM, (GF_Node *)n, &par)) {		JSObject *mO = JS_NewObject(c, &svg_rt->matrixClass, 0, 0);		GF_Matrix2D *mx = malloc(sizeof(GF_Matrix2D));		gf_mx2d_from_mx(mx, &par.mx);		JS_SetPrivate(c, mO, mx);		*rval = OBJECT_TO_JSVAL(mO);		return JS_TRUE;	}	return JS_FALSE;}JSBool svg_udom_create_matrix_components(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_Matrix2D *mx;	JSObject *mat;	jsdouble v;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=6) return JS_FALSE;		GF_SAFEALLOC(mx, GF_Matrix2D)	JS_ValueToNumber(c, argv[0], &v);	mx->m[0] = FLT2FIX(v);	JS_ValueToNumber(c, argv[1], &v);	mx->m[3] = FLT2FIX(v);	JS_ValueToNumber(c, argv[2], &v);	mx->m[1] = FLT2FIX(v);	JS_ValueToNumber(c, argv[3], &v);	mx->m[4] = FLT2FIX(v);	JS_ValueToNumber(c, argv[4], &v);	mx->m[2] = FLT2FIX(v);	JS_ValueToNumber(c, argv[5], &v);	mx->m[5] = FLT2FIX(v);	mat = JS_NewObject(c, &svg_rt->matrixClass, 0, 0);	JS_SetPrivate(c, mat, mx);	*rval = OBJECT_TO_JSVAL(mat);	return JS_TRUE;}JSBool svg_udom_create_rect(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	rectCI *rc;	JSObject *r;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n || argc) return JS_FALSE;	GF_SAFEALLOC(rc, rectCI);	r = JS_NewObject(c, &svg_rt->rectClass, 0, 0);	JS_SetPrivate(c, r, rc);	*rval = OBJECT_TO_JSVAL(r);	return JS_TRUE;}JSBool svg_udom_create_path(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	pathCI *path;	JSObject *p;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n || argc) return JS_FALSE;	GF_SAFEALLOC(path, pathCI);	p = JS_NewObject(c, &svg_rt->pathClass, 0, 0);	JS_SetPrivate(c, p, path);	*rval = OBJECT_TO_JSVAL(p);	return JS_TRUE;}JSBool svg_udom_create_color(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	rgbCI *col;	JSObject *p;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if (argc!=3) return JS_FALSE;	GF_SAFEALLOC(col, rgbCI);	col->r = JSVAL_TO_INT(argv[0]);	col->g = JSVAL_TO_INT(argv[1]);	col->b = JSVAL_TO_INT(argv[2]);	p = JS_NewObject(c, &svg_rt->rgbClass, 0, 0);	JS_SetPrivate(c, p, col);	*rval = OBJECT_TO_JSVAL(p);	return JS_TRUE;}JSBool svg_udom_move_focus(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_JSAPIParam par;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if ((argc!=1) || !JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;	par.opt = JSVAL_TO_INT(argv[1]);	if (ScriptAction(n->sgprivate->scenegraph, GF_JSAPI_OP_SET_FOCUS, (GF_Node *)n, &par)) 		return JS_TRUE;	return JS_FALSE;}JSBool svg_udom_set_focus(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_JSAPIParam par;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n) return JS_FALSE;	if ((argc!=1) || !JSVAL_IS_OBJECT(argv[0])) return JS_FALSE;	par.node = dom_get_node(c, JSVAL_TO_OBJECT(argv[0]), NULL);	/*NOT IN THE GRAPH*/	if (!par.node || !par.node->sgprivate->num_instances) return JS_FALSE;	if (ScriptAction(n->sgprivate->scenegraph, GF_JSAPI_OP_SET_FOCUS, (GF_Node *)n, &par)) 		return JS_TRUE;	return JS_FALSE;}JSBool svg_udom_get_focus(JSContext *c, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	GF_JSAPIParam par;	GF_Node *n = dom_get_node(c, obj, NULL);	if (!n || argc) return JS_FALSE;		*rval = JSVAL_VOID;	if (!ScriptAction(n->sgprivate->scenegraph, GF_JSAPI_OP_GET_FOCUS, (GF_Node *)n, &par)) 		return JS_FALSE;	if (par.node) {		*rval = dom_element_construct(c, par.node);	}	return JS_TRUE;}JSBool svg_udom_get_property(JSContext *c, GF_Node *_n, u32 svg_prop_id, jsval *vp){	GF_JSAPIParam par;	jsdouble *d;	JSString *s;	SVG_Element *n = (SVG_Element*)_n;	switch (svg_prop_id) {	/*id*/	case 0: 	{		const char *node_name = gf_node_get_name((GF_Node*)n);		if (node_name) {			s = JS_NewStringCopyZ(c, node_name);			*vp = STRING_TO_JSVAL( s );			return JS_TRUE;		}		return JS_FALSE;	}	/*currentScale*/	case 1:		if (n->sgprivate->tag!=TAG_SVG_svg) return JS_FALSE;		if (ScriptAction(n->sgprivate->scenegraph, GF_JSAPI_OP_GET_SCALE, (GF_Node *)n, &par)) {			d = JS_NewDouble(c, FIX2FLT(par.val) );			*vp = DOUBLE_TO_JSVAL(d);			return JS_TRUE;		}		return JS_FALSE;	/*currentRotate*/	case 2: 		if (n->sgprivate->tag!=TAG_SVG_svg) return JS_FALSE;		if (ScriptAction(n->sgprivate->scenegraph, GF_JSAPI_OP_GET_ROTATION, (GF_Node *)n, &par)) {			d = JS_NewDouble(c, FIX2FLT(par.val) );			*vp = DOUBLE_TO_JSVAL(d);			return JS_TRUE;		}

⌨️ 快捷键说明

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