Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - #include "mainwin.h"
 - #include "utils.h"
 - #include <glib.h>
 - #include <stdio.h>
 - #include <string.h>
 - #include <glib/gstdio.h>
 - #define LOAD_BUFFER_SIZE 65536
 - static ImageList* image_list;
 - static GdkPixbufAnimation* animation;
 - static GtkAnimView* aview;
 - static GdkPixbufLoader* loader;
 - static GCancellable* generator_cancellable = NULL;
 - static void main_win_init( MainWin*mw );
 - static void main_win_finalize( GObject* obj );
 - static void on_prev(MainWin* mw );
 - static void full_screen(MainWin *mw);
 - /* signal handlers */
 - static gboolean on_delete_event( GtkWidget* widget, GdkEventAny* evt );
 - // Begin of GObject-related stuff
 - G_DEFINE_TYPE( MainWin, main_win, GTK_TYPE_WINDOW)
 - void
 - main_win_class_init( MainWinClass* klass )
 - {
 - GObjectClass * obj_class;
 - GtkWidgetClass *widget_class;
 - obj_class = ( GObjectClass * ) klass;
 - obj_class->finalize = main_win_finalize;
 - widget_class = GTK_WIDGET_CLASS ( klass );
 - widget_class->delete_event = on_delete_event;
 - }
 - void main_win_finalize( GObject* obj )
 - {
 - MainWin *mw = (MainWin*)obj;
 - main_win_close(mw);
 - if( G_LIKELY(image_list) )
 - image_list_free(image_list );
 - gtk_main_quit();
 - }
 - GtkWindow*
 - main_win_new()
 - {
 - return (GtkWindow*)g_object_new (MAIN_WIN_TYPE, NULL);
 - }
 - gchar *ui_info =
 - "<ui>"
 - "<toolbar name = 'ToolBar'>"
 - "<toolitem action='Go Back'/>"
 - "<toolitem action='FullScreen'/>"
 - "</toolbar>"
 - "</ui>";
 - static const GtkActionEntry entries[] = {
 - {"Go Back",GTK_STOCK_GO_BACK, "Go Back",
 - "<control>b","Go Back", G_CALLBACK(on_prev)
 - },
 - {"FullScreen",GTK_STOCK_FULLSCREEN, "Full screen",
 - "<control>r","Show the image in FULL SCREEN",G_CALLBACK(full_screen)
 - },
 - };
 - static guint n_entries = G_N_ELEMENTS (entries);
 - void
 - main_win_close( MainWin* mw )
 - {
 - gtk_main_quit ();
 - }
 - void
 - main_win_init( MainWin *mw )
 - {
 - GError *error = NULL;
 - aview = gtk_anim_view_new();
 - image_list = image_list_new();
 - gtk_window_set_default_size((GtkWindow*)mw, 670, 480 );
 - gtk_window_set_position((GtkWindow*)mw, GTK_WIN_POS_CENTER);
 - mw->max_width = gdk_screen_width () * 0.7;
 - mw->max_height = gdk_screen_height () * 0.7;
 - mw->box = gtk_vbox_new(FALSE, 0);
 - mw->img_box = gtk_vbox_new(FALSE, 0);
 - mw->scroll = GTK_IMAGE_SCROLL_WIN (gtk_image_scroll_win_new (aview));
 - gtk_box_pack_start(GTK_BOX(mw->box), mw->img_box, TRUE, TRUE,0);
 - gtk_box_pack_start(GTK_BOX(mw->img_box),mw->scroll,TRUE,TRUE,0);
 - gtk_box_pack_start(GTK_BOX(mw->box), gtk_hseparator_new(), FALSE, TRUE,0);
 - //gtkuimanager
 - mw->actions = gtk_action_group_new ("Actions");
 - mw->uimanager = gtk_ui_manager_new();
 - gtk_ui_manager_insert_action_group (mw->uimanager, mw->actions, 0);
 - gtk_action_group_add_actions (mw->actions, entries, n_entries, (GtkWindow*)mw);
 - gtk_window_add_accel_group (GTK_WINDOW (mw),
 - gtk_ui_manager_get_accel_group (mw->uimanager));
 - gtk_box_pack_end(GTK_BOX (mw->box), gtk_ui_manager_get_widget(mw->uimanager, "/ToolBar"), FALSE, TRUE,0);
 - gtk_toolbar_set_style(gtk_ui_manager_get_widget(mw->uimanager, "/ToolBar"), GTK_TOOLBAR_ICONS);
 - //end gtuimanager
 - gtk_container_add((GtkContainer*)mw, mw->box);
 - gtk_widget_show(mw->box);
 - gtk_widget_show_all(mw);
 - g_object_unref(mw->uimanager);
 - g_signal_connect (G_OBJECT (mw), "destroy",
 - G_CALLBACK (gtk_main_quit), NULL);
 - gtk_widget_grab_focus(aview);
 - }
 - gboolean
 - main_win_open( MainWin* mw, const char* file_path)
 - {
 - GError *error;
 - GInputStream* input_stream;
 - GFile *file = g_file_new_for_path(file_path);
 - loader = gdk_pixbuf_loader_new();
 - animation = gdk_pixbuf_animation_new_from_file(file_path,error);
 - gssize n_read;
 - gboolean res;
 - guchar buffer[LOAD_BUFFER_SIZE];
 - input_stream = g_file_read(file,generator_cancellable ,NULL);
 - res = TRUE;
 - while (1){
 - n_read = g_input_stream_read(input_stream, buffer, sizeof (buffer),generator_cancellable,error);
 - if (n_read < 0) {
 - res = FALSE;
 - error = NULL;
 - break;
 - }
 - if (n_read == 0)
 - break;
 - if (!gdk_pixbuf_loader_write(loader, buffer, sizeof(buffer), error)){
 - res = FALSE;
 - break;
 - }
 - }
 - if (res){
 - animation = gdk_pixbuf_loader_get_animation((loader));
 - gtk_anim_view_set_anim (aview,animation);
 - char* dir_path = g_path_get_dirname( file_path );
 - image_list_open_dir(image_list, dir_path, NULL );
 - image_list_sort_by_name( image_list, GTK_SORT_ASCENDING );
 - image_list_sort_by_name( image_list, GTK_SORT_DESCENDING );
 - g_free( dir_path );
 - char* base_name = g_path_get_basename( file_path );
 - image_list_set_current( image_list, base_name );
 - char* disp_name = g_filename_display_name( base_name );
 - g_free( base_name );
 - g_free( disp_name );
 - gdk_pixbuf_loader_close(loader,NULL);
 - }
 - else
 - {
 - res = FALSE;
 - error = NULL;
 - g_object_unref (input_stream);
 - g_object_unref (file);
 - g_object_unref (generator_cancellable);
 - return;
 - }
 - }
 - // error window
 - void
 - main_win_show_error( MainWin* mw, const char* message )
 - {
 - GtkWidget* dlg = gtk_message_dialog_new( (GtkWindow*)mw,
 - GTK_DIALOG_MODAL,
 - GTK_MESSAGE_ERROR,
 - GTK_BUTTONS_OK,
 - "%s", message );
 - gtk_dialog_run( (GtkDialog*)dlg );
 - gtk_widget_destroy( dlg );
 - }
 - gboolean
 - on_delete_event( GtkWidget* widget, GdkEventAny* evt )
 - {
 - gtk_widget_destroy( widget );
 - return TRUE;
 - }
 - static void
 - full_screen(MainWin* mw)
 - {
 - gtk_window_fullscreen(GTK_WINDOW(mw));
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment