📄 tubesock.c
字号:
/* * Copyright (c) 2002, Bob Doan * *---------------------------------------------------------------------- * This file is part of tubesock - the GTK/GNOME swf player. * * tubesock is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * tubesock 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with tubesock; if not, write to the Free Software * Foundation, Inc.: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *---------------------------------------------------------------------- */#include <tubesock.h>/* Obligatory basic callback */static void get_a_file( GtkWidget *w, gpointer data ) { GtkWidget *filesel = gtk_file_selection_new("FIND A SWF FILE"); //char *filename; //filename = gtk_file_selection_get_filename(((GtkFileSelection *)(filesel))); gtk_widget_show (filesel);}static GtkItemFactoryEntry menu_items[] = { { "/_File", NULL, NULL, 0, "<Branch>" }, { "/File/_Open", "<control>O", get_a_file, 0, NULL }, { "/File/sep1", NULL, NULL, 0, "<Separator>" }, { "/File/Quit", "<control>Q", gtk_main_quit, 0, NULL }, { "/_Player", NULL, NULL, 0, "<Branch>" }, { "/Player/Play", NULL, NULL, 0, NULL }, { "/Player/Stop", NULL, NULL, 0, NULL }, { "/_Help", NULL, NULL, 0, "<LastBranch>" }, { "/_Help/About", NULL, NULL, 0, NULL },};void get_main_menu( GtkWidget *window, GtkWidget **menubar ) { GtkItemFactory *item_factory; GtkAccelGroup *accel_group; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); accel_group = gtk_accel_group_new (); item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group); gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); if (menubar) *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}//gpointer (*GThreadFunc) (gpointer data);//gboolean (*GtkFunction) (gpointer data);gboolean run_wrapper(gpointer data) { static struct swf_element *e=NULL; struct tubesock *ts = data; gulong frames_per_second = (1000000 / (double)ts->swf->header.framerate); static GTimer* watch = NULL; if(e != NULL && e->type == SWF_TYPE_SHOWFRAME) { if(watch == NULL) { watch = g_timer_new(); g_timer_start (watch); } else { //Every other time but the first..... gulong micro; g_timer_stop(watch); g_timer_elapsed (watch, µ); if(micro < frames_per_second) usleep(frames_per_second - micro); g_timer_reset(watch); g_timer_start(watch); } } e = swf_gui_run(ts, e); if(e == NULL) return 0; else return 1;}int main( int argc, char *argv[] ) { struct swf_file *swf; struct tubesock *ts; GdkColor color; GtkWidget *window; GtkWidget *main_vbox; GtkWidget *menubar; GtkWidget *toolbar; GtkWidget *close_button; GtkWidget *next_button; GtkWidget *play_button; GtkWidget *stop_button;// GThread* thread;// GError *error; if(argc != 2) { printf("Syntax: %s filename\n", argv[0]); return 1; } swf = swf_new(argv[1]); swf_read(swf); gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_show (window); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW (window), "Tubesock - GTK/GNOME SWF player"); gtk_widget_set_size_request (GTK_WIDGET (window), SWF_TO_PIXEL(swf->header.framesize.max_x), SWF_TO_PIXEL(swf->header.framesize.max_y)+30); main_vbox = gtk_vbox_new (FALSE, 1); gtk_widget_set_size_request (GTK_WIDGET (main_vbox), SWF_TO_PIXEL(swf->header.framesize.max_x), SWF_TO_PIXEL(swf->header.framesize.max_y)+30); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (window), main_vbox); gtk_widget_show (main_vbox); get_main_menu (window, &menubar); gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); toolbar = gtk_toolbar_new( ); gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), GTK_ORIENTATION_HORIZONTAL); gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH); gtk_container_set_border_width (GTK_CONTAINER (toolbar), 0); gtk_container_add (GTK_CONTAINER (main_vbox), toolbar); gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); gtk_box_pack_end (GTK_BOX (main_vbox), toolbar, TRUE, TRUE, 0); gtk_widget_show(toolbar); gtk_widget_show (menubar); close_button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "Close", "Closes this app", "Private", NULL, GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_show(close_button); next_button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "Next", "Next Frame", "Private", NULL, GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_show(next_button); play_button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "Play", "Play", "Private", NULL, GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_show(play_button); stop_button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "Stop", "Stop DAMIT!", "Private", NULL, GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_widget_show(stop_button); ts = swf_gui_init(swf, window, main_vbox); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1);//DEFAULT TO WHITE FOR NOW!! color.red = 0xFFFF; color.blue = 0xFFFF; color.green = 0xFFFF; gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color);// if (!g_thread_supported ()) g_thread_init (NULL);// thread = g_thread_create(run_wrapper, ts, 0, &error); // swf_gui_run(ts); gtk_idle_add (run_wrapper, ts); gtk_main (); printf("\a\a\a\a"); //swf_free(swf); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -