diff options
Diffstat (limited to 'src/inkview.cpp')
| -rw-r--r-- | src/inkview.cpp | 365 |
1 files changed, 179 insertions, 186 deletions
diff --git a/src/inkview.cpp b/src/inkview.cpp index 8b7492798..3fcd9ed8a 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -30,10 +30,6 @@ # include "config.h" #endif -#ifdef HAVE_GETOPT_H -#include <getopt.h> -#endif - #include <cstring> #include <sys/stat.h> #include <locale.h> @@ -106,70 +102,67 @@ static GtkWidget *ctrlwin = NULL; int sp_main_gui (int, char const**) { return 0; } int sp_main_console (int, char const**) { return 0; } -static int -sp_svgview_main_delete (GtkWidget */*widget*/, GdkEvent */*event*/, struct SPSlideShow */*ss*/) +static int sp_svgview_main_delete (GtkWidget */*widget*/, + GdkEvent */*event*/, + struct SPSlideShow */*ss*/) { gtk_main_quit (); return FALSE; } -static int -sp_svgview_main_key_press (GtkWidget */*widget*/, GdkEventKey *event, struct SPSlideShow *ss) +static int sp_svgview_main_key_press (GtkWidget */*widget*/, + GdkEventKey *event, + struct SPSlideShow *ss) { switch (event->keyval) { - case GDK_KEY_Up: - case GDK_KEY_Home: - sp_svgview_goto_first(ss); - break; - case GDK_KEY_Down: - case GDK_KEY_End: - sp_svgview_goto_last(ss); - break; - case GDK_KEY_F11: -#ifdef HAVE_GTK_WINDOW_FULLSCREEN - if (ss->fullscreen) { - gtk_window_unfullscreen (GTK_WINDOW(ss->window)); - ss->fullscreen = false; - } else { - gtk_window_fullscreen (GTK_WINDOW(ss->window)); - ss->fullscreen = true; - } -#else - std::cout<<"Your GTK+ does not support fullscreen mode. Upgrade to 2.2."<<std::endl; -#endif - break; - case GDK_KEY_Return: - sp_svgview_control_show (ss); - break; - case GDK_KEY_KP_Page_Down: - case GDK_KEY_Page_Down: - case GDK_KEY_Right: - case GDK_KEY_space: - sp_svgview_show_next (ss); - break; - case GDK_KEY_KP_Page_Up: - case GDK_KEY_Page_Up: - case GDK_KEY_Left: - case GDK_KEY_BackSpace: - sp_svgview_show_prev (ss); - break; - case GDK_KEY_Escape: - case GDK_KEY_q: - case GDK_KEY_Q: - gtk_main_quit(); - break; - default: - break; + case GDK_KEY_Up: + case GDK_KEY_Home: + sp_svgview_goto_first(ss); + break; + case GDK_KEY_Down: + case GDK_KEY_End: + sp_svgview_goto_last(ss); + break; + case GDK_KEY_F11: + if (ss->fullscreen) { + gtk_window_unfullscreen (GTK_WINDOW(ss->window)); + ss->fullscreen = false; + } else { + gtk_window_fullscreen (GTK_WINDOW(ss->window)); + ss->fullscreen = true; + } + break; + case GDK_KEY_Return: + sp_svgview_control_show (ss); + break; + case GDK_KEY_KP_Page_Down: + case GDK_KEY_Page_Down: + case GDK_KEY_Right: + case GDK_KEY_space: + sp_svgview_show_next (ss); + break; + case GDK_KEY_KP_Page_Up: + case GDK_KEY_Page_Up: + case GDK_KEY_Left: + case GDK_KEY_BackSpace: + sp_svgview_show_prev (ss); + break; + case GDK_KEY_Escape: + case GDK_KEY_q: + case GDK_KEY_Q: + gtk_main_quit(); + break; + default: + break; } gtk_window_set_title(GTK_WINDOW(ss->window), ss->doc->getName()); return TRUE; } -int -main (int argc, const char **argv) +int main (int argc, const char **argv) { if (argc == 1) { - usage(); + usage(); } // Prevents errors like "Unable to wrap GdkPixbuf..." (in nr-filter-image.cpp for example) @@ -179,21 +172,25 @@ main (int argc, const char **argv) struct SPSlideShow ss; - int option, - num_parsed_options = 0; + int num_parsed_options = 0; // the list of arguments is in the net line - while ((option = getopt(argc, (char* const* )argv, "t:")) != -1) - { - switch(option) { - case 't': // for timer - // fprintf(stderr, "set timer arg %s\n", optarg ); - ss.timer = atoi(optarg); - num_parsed_options += 2; // 2 because of flag + option + for (int i = 1; i < argc; i++) { + if ((argv[i][0] == '-')) { + if (!strcmp(argv[i], "--")) { break; - case '?': - default: - usage(); + } + else if ((!strcmp(argv[i], "-t"))) { + if (i + 1 >= argc) { + usage(); + } + ss.timer = atoi(argv[i+1]); + num_parsed_options = i+1; + i++; + } + else { + usage(); + } } } @@ -236,82 +233,84 @@ main (int argc, const char **argv) // starting at where the commandline options stopped parsing because // we want all the files to be in the list for (i = num_parsed_options + 1 ; i < argc; i++) { - struct stat st; - if (stat (argv[i], &st) - || !S_ISREG (st.st_mode) - || (st.st_size < 64)) { - fprintf(stderr, "could not open file %s\n", argv[i]); - } else { - -#ifdef WITH_INKJAR - if (is_jar(argv[i])) { - Inkjar::JarFileReader jar_file_reader(argv[i]); - for (;;) { - GByteArray *gba = jar_file_reader.get_next_file(); - if (gba == NULL) { - char *c_ptr; - gchar *last_filename = jar_file_reader.get_last_filename(); - if (last_filename == NULL) - break; - if ((c_ptr = std::strrchr(last_filename, '/')) != NULL) { - if (*(++c_ptr) == '\0') { - g_free(last_filename); - continue; - } - } - } else if (gba->len > 0) { - //::write(1, gba->data, gba->len); - /* Append to list */ - if (ss.length >= ss.size) { - /* Expand */ - ss.size <<= 1; - ss.slides = g_renew (char *, ss.slides, ss.size); - } - - ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data, - gba->len, - TRUE); - gchar *last_filename = jar_file_reader.get_last_filename(); - if (ss.doc) { - ss.slides[ss.length++] = strdup (last_filename); - (ss.doc)->setUri (last_filename); - } - g_byte_array_free(gba, TRUE); - g_free(last_filename); - } else - break; - } - } else { -#endif /* WITH_INKJAR */ - /* Append to list */ - if (ss.length >= ss.size) { - /* Expand */ - ss.size <<= 1; - ss.slides = g_renew (char *, ss.slides, ss.size); - - } - - ss.slides[ss.length++] = strdup (argv[i]); - + struct stat st; + if (stat (argv[i], &st) + || !S_ISREG (st.st_mode) + || (st.st_size < 64)) { + fprintf(stderr, "could not open file %s\n", argv[i]); + } else { + + #ifdef WITH_INKJAR + if (is_jar(argv[i])) { + Inkjar::JarFileReader jar_file_reader(argv[i]); + for (;;) { + GByteArray *gba = jar_file_reader.get_next_file(); + if (gba == NULL) { + char *c_ptr; + gchar *last_filename = jar_file_reader.get_last_filename(); + if (last_filename == NULL) + break; + if ((c_ptr = std::strrchr(last_filename, '/')) != NULL) { + if (*(++c_ptr) == '\0') { + g_free(last_filename); + continue; + } + } + } else if (gba->len > 0) { + //::write(1, gba->data, gba->len); + /* Append to list */ + if (ss.length >= ss.size) { + /* Expand */ + ss.size <<= 1; + ss.slides = g_renew (char *, ss.slides, ss.size); + } + + ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data, + gba->len, + TRUE); + gchar *last_filename = jar_file_reader.get_last_filename(); + if (ss.doc) { + ss.slides[ss.length++] = strdup (last_filename); + (ss.doc)->setUri (last_filename); + } + g_byte_array_free(gba, TRUE); + g_free(last_filename); + } else { + break; + } + } + } else { + #endif /* WITH_INKJAR */ + /* Append to list */ + if (ss.length >= ss.size) { + /* Expand */ + ss.size <<= 1; + ss.slides = g_renew (char *, ss.slides, ss.size); + } + + ss.slides[ss.length++] = strdup (argv[i]); + + if (!ss.doc) { + ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false); if (!ss.doc) { - ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false); - if (!ss.doc) - ++ss.current; - } -#ifdef WITH_INKJAR - } -#endif - } + ++ss.current; + } + } + #ifdef WITH_INKJAR + } + #endif + } } - if(!ss.doc) + if(!ss.doc) { return 1; /* none of the slides loadable */ - + } + w = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title( GTK_WINDOW(w), ss.doc->getName() ); gtk_window_set_default_size (GTK_WINDOW (w), - MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64), - MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64)); + MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64), + MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64)); ss.window = w; g_signal_connect (G_OBJECT (w), "delete_event", (GCallback) sp_svgview_main_delete, &ss); @@ -331,8 +330,9 @@ main (int argc, const char **argv) return 0; } -static int -sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, GdkEvent */*event*/, void */*data*/) +static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, + GdkEvent */*event*/, + void */*data*/) { ctrlwin = NULL; return FALSE; @@ -341,97 +341,92 @@ sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, GdkEvent */*event*/, void */*d static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss) { if (!ctrlwin) { - ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); + ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE); gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window)); g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss); g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); #if GTK_CHECK_VERSION(3,0,0) - GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); + GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); #else - GtkWidget *t = gtk_hbutton_box_new(); + GtkWidget *t = gtk_hbutton_box_new(); #endif - gtk_container_add(GTK_CONTAINER(ctrlwin), t); + gtk_container_add(GTK_CONTAINER(ctrlwin), t); #if GTK_CHECK_VERSION(3,10,0) GtkWidget *b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON); #else - GtkWidget *b = gtk_button_new(); + GtkWidget *b = gtk_button_new(); GtkWidget *img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON); gtk_button_set_image(GTK_BUTTON(b), img); #endif - gtk_container_add(GTK_CONTAINER(t), b); + gtk_container_add(GTK_CONTAINER(t), b); - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss); + g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss); #if GTK_CHECK_VERSION(3,10,0) b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON); #else - b = gtk_button_new(); + b = gtk_button_new(); img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON); gtk_button_set_image(GTK_BUTTON(b), img); #endif - gtk_container_add(GTK_CONTAINER(t), b); + gtk_container_add(GTK_CONTAINER(t), b); - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss); + g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss); #if GTK_CHECK_VERSION(3,10,0) b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON); #else - b = gtk_button_new(); + b = gtk_button_new(); img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON); gtk_button_set_image(GTK_BUTTON(b), img); #endif - gtk_container_add(GTK_CONTAINER(t), b); + gtk_container_add(GTK_CONTAINER(t), b); - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss); + g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss); #if GTK_CHECK_VERSION(3,10,0) b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON); #else - b = gtk_button_new(); + b = gtk_button_new(); img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON); gtk_button_set_image(GTK_BUTTON(b), img); #endif - gtk_container_add(GTK_CONTAINER(t), b); - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss); - gtk_widget_show_all(ctrlwin); + gtk_container_add(GTK_CONTAINER(t), b); + g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss); + gtk_widget_show_all(ctrlwin); } else { - gtk_window_present(GTK_WINDOW(ctrlwin)); + gtk_window_present(GTK_WINDOW(ctrlwin)); } return NULL; } -static int -sp_svgview_show_next_cb (GtkWidget */*widget*/, void *data) +static int sp_svgview_show_next_cb (GtkWidget */*widget*/, void *data) { sp_svgview_show_next(static_cast<struct SPSlideShow *>(data)); return FALSE; } -static int -sp_svgview_show_prev_cb (GtkWidget */*widget*/, void *data) +static int sp_svgview_show_prev_cb (GtkWidget */*widget*/, void *data) { sp_svgview_show_prev(static_cast<struct SPSlideShow *>(data)); return FALSE; } -static int -sp_svgview_goto_first_cb (GtkWidget */*widget*/, void *data) +static int sp_svgview_goto_first_cb (GtkWidget */*widget*/, void *data) { sp_svgview_goto_first(static_cast<struct SPSlideShow *>(data)); return FALSE; } -static int -sp_svgview_goto_last_cb (GtkWidget */*widget*/, void *data) +static int sp_svgview_goto_last_cb (GtkWidget */*widget*/, void *data) { sp_svgview_goto_last(static_cast<struct SPSlideShow *>(data)); return FALSE; } -static void -sp_svgview_waiting_cursor(struct SPSlideShow *ss) +static void sp_svgview_waiting_cursor(struct SPSlideShow *ss) { GdkCursor *waiting = gdk_cursor_new(GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), waiting); @@ -449,12 +444,12 @@ sp_svgview_waiting_cursor(struct SPSlideShow *ss) gdk_cursor_unref(waiting); #endif } - while(gtk_events_pending()) + while(gtk_events_pending()) { gtk_main_iteration(); + } } -static void -sp_svgview_normal_cursor(struct SPSlideShow *ss) +static void sp_svgview_normal_cursor(struct SPSlideShow *ss) { gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), NULL); if (ctrlwin) { @@ -462,8 +457,9 @@ sp_svgview_normal_cursor(struct SPSlideShow *ss) } } -static void -sp_svgview_set_document(struct SPSlideShow *ss, SPDocument *doc, int current) +static void sp_svgview_set_document(struct SPSlideShow *ss, + SPDocument *doc, + int current) { if (doc && doc != ss->doc) { doc->ensureUpToDate(); @@ -473,8 +469,7 @@ sp_svgview_set_document(struct SPSlideShow *ss, SPDocument *doc, int current) } } -static void -sp_svgview_show_next (struct SPSlideShow *ss) +static void sp_svgview_show_next (struct SPSlideShow *ss) { sp_svgview_waiting_cursor(ss); @@ -489,8 +484,7 @@ sp_svgview_show_next (struct SPSlideShow *ss) sp_svgview_normal_cursor(ss); } -static void -sp_svgview_show_prev (struct SPSlideShow *ss) +static void sp_svgview_show_prev (struct SPSlideShow *ss) { sp_svgview_waiting_cursor(ss); @@ -505,16 +499,16 @@ sp_svgview_show_prev (struct SPSlideShow *ss) sp_svgview_normal_cursor(ss); } -static void -sp_svgview_goto_first (struct SPSlideShow *ss) +static void sp_svgview_goto_first (struct SPSlideShow *ss) { sp_svgview_waiting_cursor(ss); SPDocument *doc = NULL; int current = 0; while ( !doc && (current < ss->length - 1)) { - if (current == ss->current) + if (current == ss->current) { break; + } doc = SPDocument::createNewDoc (ss->slides[current++], TRUE, false); } @@ -523,16 +517,16 @@ sp_svgview_goto_first (struct SPSlideShow *ss) sp_svgview_normal_cursor(ss); } -static void -sp_svgview_goto_last (struct SPSlideShow *ss) +static void sp_svgview_goto_last (struct SPSlideShow *ss) { sp_svgview_waiting_cursor(ss); SPDocument *doc = NULL; int current = ss->length - 1; while (!doc && (current >= 0)) { - if (current == ss->current) + if (current == ss->current) { break; + } doc = SPDocument::createNewDoc (ss->slides[current--], TRUE, false); } @@ -542,8 +536,7 @@ sp_svgview_goto_last (struct SPSlideShow *ss) } #ifdef WITH_INKJAR -static bool -is_jar(char const *filename) +static bool is_jar(char const *filename) { /* fixme: Check MIME type or something. /usr/share/misc/file/magic suggests that checking for initial string "PK\003\004" in content should suffice. */ @@ -560,12 +553,12 @@ is_jar(char const *filename) static void usage() { fprintf(stderr, - "Usage: inkview [OPTIONS...] [FILES ...]\n" - "\twhere FILES are SVG (.svg or .svgz)" + "Usage: inkview [OPTIONS...] [FILES ...]\n" + "\twhere FILES are SVG (.svg or .svgz)" #ifdef WITH_INKJAR - " or archives of SVGs (.sxw, .jar)" + " or archives of SVGs (.sxw, .jar)" #endif - "\n"); + "\n"); exit(1); } |
