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

📄 swfdec_js_movie.c

📁 Swfdec still is development software, but has also followed a rigid no-crashes-allowed policy. I b
💻 C
📖 第 1 页 / 共 3 页
字号:
swfdec_js_movie_attachMovie (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){  SwfdecMovie *movie, *ret;  const char *name, *export;  int depth;  SwfdecContent *content;  SwfdecGraphic *sprite;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  export = swfdec_js_to_string (cx, argv[0]);  name = swfdec_js_to_string (cx, argv[1]);  if (argc > 3) {    SWFDEC_ERROR ("attachMovie's initObject isn't implemented");  }  if (export == NULL || name == NULL)    return JS_FALSE;  sprite = swfdec_root_movie_get_export (SWFDEC_ROOT_MOVIE (movie->root), export);  if (!SWFDEC_IS_SPRITE (sprite)) {    if (sprite == NULL) {      SWFDEC_WARNING ("no symbol with name %s exported", export);    } else {      SWFDEC_WARNING ("can only use attachMovie with sprites");    }    return JS_TRUE;  }  if (!JS_ValueToECMAInt32 (cx, argv[1], &depth))    return JS_FALSE;  if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY)    return JS_TRUE;  ret = swfdec_movie_find (movie, depth);  if (ret)    swfdec_movie_remove (ret);  content = swfdec_content_new (depth);  content->graphic = sprite;  content->depth = depth;  content->clip_depth = 0; /* FIXME: check this */  content->name = g_strdup (name);  content->sequence = content;  content->start = 0;  content->end = G_MAXUINT;  ret = swfdec_movie_new (movie, content);  g_object_weak_ref (G_OBJECT (ret), (GWeakNotify) swfdec_content_free, content);  /* must be set by now, the movie has a name */  if (SWFDEC_SCRIPTABLE (ret)->jsobj == NULL)    return JS_FALSE;  SWFDEC_LOG ("attached %s (%u) as %s to depth %u", export, SWFDEC_CHARACTER (sprite)->id,      ret->name, ret->depth);  /* run init and construct */  swfdec_js_movie_init_from_object (ret, NULL);  swfdec_movie_run_construct (ret);  *rval = OBJECT_TO_JSVAL (SWFDEC_SCRIPTABLE (ret)->jsobj);  return JS_TRUE;}static JSBoolswfdec_js_movie_duplicateMovieClip (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){  SwfdecMovie *movie, *ret;  const char *name;  int depth;  SwfdecContent *content;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }#if 0  /* FIXME: is this still valid? */  if (argc > 2) {    const char *str;    jsval val;    str = swfdec_js_to_string (cx, argv[0]);    if (!str)      return JS_TRUE;    val = swfdec_js_eval (cx, obj, str);    movie = swfdec_js_val_to_movie (cx, val);    if (!movie)      return JS_TRUE;    argv++;    argc--;  }#endif  name = swfdec_js_to_string (cx, argv[0]);  if (name == NULL)    return JS_FALSE;  if (!JS_ValueToECMAInt32 (cx, argv[1], &depth))    return JS_FALSE;  if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY)    return JS_TRUE;  g_assert (movie->parent);  ret = swfdec_movie_find (movie->parent, depth);  if (ret)    swfdec_movie_remove (ret);  content = swfdec_content_new (depth);  *content = *movie->content;  if (content->events)    content->events = swfdec_event_list_copy (content->events);  content->depth = depth;  content->clip_depth = 0; /* FIXME: check this */  content->name = g_strdup (name);  content->sequence = content;  content->start = 0;  content->end = G_MAXUINT;  ret = swfdec_movie_new (movie->parent, content);  g_object_weak_ref (G_OBJECT (ret), (GWeakNotify) swfdec_content_free, content);  /* must be set by now, the movie has a name */  if (SWFDEC_SCRIPTABLE (ret)->jsobj == NULL)    return JS_FALSE;  swfdec_js_copy_props (ret, movie);  SWFDEC_LOG ("duplicated %s as %s to depth %u", movie->name, ret->name, ret->depth);  *rval = OBJECT_TO_JSVAL (SWFDEC_SCRIPTABLE (ret)->jsobj);  return JS_TRUE;}static JSBoolswfdec_js_movie_removeMovieClip (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){  SwfdecMovie *movie;  movie = JS_GetPrivate (cx, obj);  g_assert (movie);  if (swfdec_depth_classify (movie->depth) == SWFDEC_DEPTH_CLASS_DYNAMIC)    swfdec_movie_remove (movie);  return JS_TRUE;}static JSBoolswfdec_js_getURL (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){  const char *url;  const char *target;  SwfdecMovie *movie;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  url = swfdec_js_to_string (cx, argv[0]);  if (!url)    return FALSE;  if (argc > 1) {    target = swfdec_js_to_string (cx, argv[1]);    if (!target)      return JS_FALSE;  } else {    /* FIXME: figure out default target */    g_assert_not_reached ();  }  if (argc > 2) {    /* variables not implemented yet */    g_assert_not_reached ();  }  swfdec_root_movie_load (SWFDEC_ROOT_MOVIE (movie->root), url, target);  return JS_TRUE;}static JSBoolswfdec_js_getDepth (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){  SwfdecMovie *movie;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  *rval = INT_TO_JSVAL (movie->depth);  return JS_TRUE;}static JSFunctionSpec movieclip_methods[] = {  { "attachMovie",	swfdec_js_movie_attachMovie,	3, 0, 0 },  { "duplicateMovieClip", swfdec_js_movie_duplicateMovieClip, 2, 0, 0 },  { "eval",		swfdec_js_global_eval,	      	1, 0, 0 },  { "getBytesLoaded",	mc_getBytesLoaded,		0, 0, 0 },  { "getBytesTotal",	mc_getBytesTotal,		0, 0, 0 },  { "getDepth",		swfdec_js_getDepth,	      	0, 0, 0 },  { "getNextHighestDepth", mc_getNextHighestDepth,    	0, 0, 0 },  { "getProperty",    	swfdec_js_getProperty,		2, 0, 0 },  { "getURL",    	swfdec_js_getURL,		2, 0, 0 },  { "gotoAndPlay",	mc_gotoAndPlay,			1, 0, 0 },  { "gotoAndStop",	mc_gotoAndStop,			1, 0, 0 },  { "hitTest",		mc_hitTest,			1, 0, 0 },  { "nextFrame",	swfdec_js_nextFrame,	      	0, 0, 0 },  { "play",		mc_play,			0, 0, 0 },  { "prevFrame",	swfdec_js_prevFrame,	      	0, 0, 0 },  { "removeMovieClip",	swfdec_js_movie_removeMovieClip,0, 0, 0 },  { "setProperty",    	swfdec_js_setProperty,		3, 0, 0 },  { "startDrag",    	swfdec_js_startDrag,		0, 0, 0 },  { "stop",		mc_stop,			0, 0, 0 },  { "stopDrag",    	swfdec_js_stopDrag,		0, 0, 0 },  { "swapDepths",    	swfdec_js_movie_swapDepths,   	1, 0, 0 },  { NULL }};static JSBoolmc_x_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  d = SWFDEC_TWIPS_TO_DOUBLE (movie->matrix.x0);  return JS_NewNumberValue (cx, d, vp);}static JSBoolmc_x_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  if (!JS_ValueToNumber (cx, *vp, &d))    return JS_FALSE;  if (!finite (d)) {    SWFDEC_WARNING ("trying to move %s._x to a non-finite value, ignoring", movie->name);    return JS_TRUE;  }  movie->modified = TRUE;  d = SWFDEC_DOUBLE_TO_TWIPS (d);  if (d != movie->matrix.x0) {    movie->matrix.x0 = d;    swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);  }  return JS_TRUE;}static JSBoolmc_y_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  swfdec_movie_update (movie);  d = SWFDEC_TWIPS_TO_DOUBLE (movie->matrix.y0);  return JS_NewNumberValue (cx, d, vp);}static JSBoolmc_y_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  if (!JS_ValueToNumber (cx, *vp, &d))    return JS_FALSE;  if (!finite (d)) {    SWFDEC_WARNING ("trying to move %s._y to a non-finite value, ignoring", movie->name);    return JS_TRUE;  }  movie->modified = TRUE;  d = SWFDEC_DOUBLE_TO_TWIPS (d);  if (d != movie->matrix.y0) {    movie->matrix.y0 = d;    swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);  }  return JS_TRUE;}static JSBoolmc_xscale_get (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  d = movie->xscale;  return JS_NewNumberValue (cx, d, vp);}static JSBoolmc_xscale_set (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  if (!JS_ValueToNumber (cx, *vp, &d))    return JS_FALSE;  if (!finite (d)) {    SWFDEC_WARNING ("trying to set xscale to a non-finite value, ignoring");    return JS_TRUE;  }  movie->modified = TRUE;  movie->xscale = d;  swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);  return JS_TRUE;}static JSBoolmc_yscale_get (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = JS_GetPrivate (cx, obj);  g_assert (movie);  d = movie->yscale;  return JS_NewNumberValue (cx, d, vp);}static JSBoolmc_yscale_set (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  if (!JS_ValueToNumber (cx, *vp, &d))    return JS_FALSE;  if (!finite (d)) {    SWFDEC_WARNING ("trying to set yscale to a non-finite value, ignoring");    return JS_TRUE;  }  movie->modified = TRUE;  movie->yscale = d;  swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);  return JS_TRUE;}static JSBoolmc_currentframe (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  *vp = INT_TO_JSVAL (movie->frame + 1);  return JS_TRUE;}static JSBoolmc_framesloaded (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  guint loaded;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  /* only root movies can be partially loaded */  if (SWFDEC_IS_ROOT_MOVIE (movie)) {    SwfdecDecoder *dec = SWFDEC_ROOT_MOVIE (movie->root)->decoder;    loaded = dec->frames_loaded;    g_assert (loaded <= movie->n_frames);  } else {    loaded = movie->n_frames;  }  *vp = INT_TO_JSVAL (loaded);  return JS_TRUE;}static JSBoolmc_name_get (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  JSString *string;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  if (movie->has_name)    string = JS_NewStringCopyZ (cx, movie->name);  else    string = JS_NewStringCopyZ (cx, "");  if (string == NULL)    return JS_FALSE;  *vp = STRING_TO_JSVAL (string);  return JS_TRUE;}static JSBoolmc_name_set (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  const char *str;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  str = swfdec_js_to_string (cx, *vp);  if (str == NULL)    return JS_FALSE;  if (!SWFDEC_IS_ROOT_MOVIE (movie))    swfdec_js_movie_remove_property (movie);  g_free (movie->name);  movie->name = g_strdup (str);  movie->has_name = TRUE;  if (!SWFDEC_IS_ROOT_MOVIE (movie))    swfdec_js_movie_add_property (movie);  return JS_TRUE;}static JSBoolmc_totalframes (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  *vp = INT_TO_JSVAL (movie->n_frames);  return JS_TRUE;}static JSBoolmc_alpha_get (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;  movie = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_MOVIE);  if (movie == NULL) {    SWFDEC_WARNING ("not a movie");    return JS_TRUE;  }  d = movie->color_transform.aa * 100.0 / 256.0;  return JS_NewNumberValue (cx, d, vp);}static JSBoolmc_alpha_set (JSContext *cx, JSObject *obj, jsval id, jsval *vp){  SwfdecMovie *movie;  double d;

⌨️ 快捷键说明

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