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

📄 vivi_debugger.c

📁 Swfdec is a decoder/renderer for Macromedia Flash animations. The decoding and rendering engine is
💻 C
字号:
/* Vivified * Copyright (C) 2007 Benjamin Otte <otte@gnome.org> * * This library 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.1 of the License, or (at your option) any later version. *  * This library 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; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor,  * Boston, MA  02110-1301  USA */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "vivi_debugger.h"#include "vivi_application.h"#include "vivi_marshal.h"/* FIXME: oops */#include "libswfdec/swfdec_player_internal.h"enum {  ADD,  REMOVE,  STEP,  ENTER_FRAME,  LEAVE_FRAME,  SET_VARIABLE,  LAST_SIGNAL};G_DEFINE_TYPE (ViviDebugger, vivi_debugger, SWFDEC_TYPE_AS_DEBUGGER)static guint signals[LAST_SIGNAL] = { 0, };static gbooleanvivi_accumulate_or (GSignalInvocationHint *ihint, GValue *return_accu,     const GValue *handler_return, gpointer data){  if (g_value_get_boolean (handler_return))    g_value_set_boolean (return_accu, TRUE);  return TRUE;}static voidvivi_debugger_dispose (GObject *object){  //ViviDebugger *debugger = VIVI_DEBUGGER (object);  G_OBJECT_CLASS (vivi_debugger_parent_class)->dispose (object);}static voidvivi_debugger_break (ViviDebugger *debugger){  ViviApplication *app = debugger->app;  SwfdecPlayer *player = app->player;  g_assert (app);  if (app->playback_state == VIVI_APPLICATION_EXITING)    return;  if (app->playback_state == VIVI_APPLICATION_PLAYING) {    app->playback_count--;    if (app->playback_count > 0)      return;  }  swfdec_player_unlock_soft (player);  app->playback_state = 0;  app->playback_count = 0;  app->loop = g_main_loop_new (NULL, FALSE);  g_object_notify (G_OBJECT (app), "interrupted");  vivi_application_check (app);  g_main_loop_run (app->loop);  g_main_loop_unref (app->loop);  app->loop = NULL;  g_object_notify (G_OBJECT (app), "interrupted");  vivi_application_check (app);  swfdec_player_lock_soft (player);}static voidvivi_debugger_add (SwfdecAsDebugger *debugger, SwfdecAsContext *context,     SwfdecAsObject *object){  gboolean retval = FALSE;  g_signal_emit (debugger, signals[ADD], 0, object, &retval);  if (retval)    vivi_debugger_break (VIVI_DEBUGGER (debugger));}static voidvivi_debugger_remove (SwfdecAsDebugger *debugger, SwfdecAsContext *context,     SwfdecAsObject *object){  gboolean retval = FALSE;  g_signal_emit (debugger, signals[REMOVE], 0, object, &retval);  if (retval)    vivi_debugger_break (VIVI_DEBUGGER (debugger));}static voidvivi_debugger_step (SwfdecAsDebugger *debugger, SwfdecAsContext *context){  gboolean retval = FALSE;  g_signal_emit (debugger, signals[STEP], 0, &retval);  if (!retval) {    ViviApplication *app = VIVI_DEBUGGER (debugger)->app;    if (app->playback_state == VIVI_APPLICATION_STEPPING) {      app->playback_count--;      if (app->playback_count == 0)	retval = TRUE;    }  }  if (retval)    vivi_debugger_break (VIVI_DEBUGGER (debugger));}static voidvivi_debugger_enter_frame (SwfdecAsDebugger *debugger, SwfdecAsContext *context, SwfdecAsFrame *frame){  gboolean retval = FALSE;  g_signal_emit (debugger, signals[ENTER_FRAME], 0, frame, &retval);  if (retval)    vivi_debugger_break (VIVI_DEBUGGER (debugger));}static voidvivi_debugger_leave_frame (SwfdecAsDebugger *debugger, SwfdecAsContext *context,     SwfdecAsFrame *frame, const SwfdecAsValue *ret){  gboolean retval = FALSE;  g_signal_emit (debugger, signals[LEAVE_FRAME], 0, frame, ret, &retval);  if (retval)    vivi_debugger_break (VIVI_DEBUGGER (debugger));}static voidvivi_debugger_set_variable (SwfdecAsDebugger *debugger, SwfdecAsContext *context,     SwfdecAsObject *object, const char *variable, const SwfdecAsValue *value){  gboolean retval = FALSE;  g_signal_emit (debugger, signals[SET_VARIABLE], 0, object, variable, value, &retval);  if (retval)    vivi_debugger_break (VIVI_DEBUGGER (debugger));}static voidvivi_debugger_class_init (ViviDebuggerClass *klass){  GObjectClass *object_class = G_OBJECT_CLASS (klass);  SwfdecAsDebuggerClass *debugger_class = SWFDEC_AS_DEBUGGER_CLASS (klass);  object_class->dispose = vivi_debugger_dispose;  signals[ADD] = g_signal_new ("add", G_TYPE_FROM_CLASS (klass),      G_SIGNAL_RUN_LAST, 0, vivi_accumulate_or, NULL, vivi_marshal_BOOLEAN__OBJECT,      G_TYPE_BOOLEAN, 1, SWFDEC_TYPE_AS_OBJECT);  signals[REMOVE] = g_signal_new ("remove", G_TYPE_FROM_CLASS (klass),      G_SIGNAL_RUN_LAST, 0, vivi_accumulate_or, NULL, vivi_marshal_BOOLEAN__OBJECT,      G_TYPE_BOOLEAN, 1, SWFDEC_TYPE_AS_OBJECT);  signals[STEP] = g_signal_new ("step", G_TYPE_FROM_CLASS (klass),      G_SIGNAL_RUN_LAST, 0, vivi_accumulate_or, NULL, vivi_marshal_BOOLEAN__VOID,      G_TYPE_BOOLEAN, 0);  signals[ENTER_FRAME] = g_signal_new ("enter-frame", G_TYPE_FROM_CLASS (klass),      G_SIGNAL_RUN_LAST, 0, vivi_accumulate_or, NULL, vivi_marshal_BOOLEAN__OBJECT,      G_TYPE_BOOLEAN, 1, SWFDEC_TYPE_AS_FRAME);  signals[LEAVE_FRAME] = g_signal_new ("leave-frame", G_TYPE_FROM_CLASS (klass),      G_SIGNAL_RUN_LAST, 0, vivi_accumulate_or, NULL, vivi_marshal_BOOLEAN__OBJECT_POINTER,      G_TYPE_BOOLEAN, 2, SWFDEC_TYPE_AS_FRAME, G_TYPE_POINTER);  signals[SET_VARIABLE] = g_signal_new ("set-variable", G_TYPE_FROM_CLASS (klass),      G_SIGNAL_RUN_LAST, 0, vivi_accumulate_or, NULL, vivi_marshal_BOOLEAN__OBJECT_STRING_POINTER,      G_TYPE_BOOLEAN, 3, SWFDEC_TYPE_AS_OBJECT, G_TYPE_STRING, G_TYPE_POINTER);  debugger_class->add = vivi_debugger_add;  debugger_class->remove = vivi_debugger_remove;  debugger_class->step = vivi_debugger_step;  debugger_class->enter_frame = vivi_debugger_enter_frame;  debugger_class->leave_frame = vivi_debugger_leave_frame;  debugger_class->set_variable = vivi_debugger_set_variable;}static voidvivi_debugger_init (ViviDebugger *debugger){}

⌨️ 快捷键说明

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