? src/doc_info.xpm ? src/rotate_left.xpm ? src/rotate_right.xpm Index: src/poppler_viewer.c =================================================================== RCS file: /pack/anoncvs/sylpheedclaws/plugins/pdf_viewer/src/Attic/poppler_viewer.c,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 poppler_viewer.c --- src/poppler_viewer.c 2007/02/27 10:09:00 1.1.2.5 +++ src/poppler_viewer.c 2007/02/28 16:01:03 @@ -53,12 +53,17 @@ #include "zoom_in.xpm" #include "zoom_out.xpm" #include "zoom_width.xpm" +#include "rotate_right.xpm" +#include "rotate_left.xpm" +#include "doc_info.xpm" #ifdef USE_PTHREAD #include #endif #define ZOOM_FACTOR 0.3 +#define ROTATION 90 + static void poppler_pdf_view_update(MimeViewer *_viewer, gboolean reload_file, int page_num); struct _PopplerViewer @@ -81,14 +86,20 @@ struct _PopplerViewer GtkWidget *zoom_out; GtkWidget *zoom_fit; GtkWidget *zoom_width; + GtkWidget *rotate_left; + GtkWidget *rotate_right; + GtkWidget *doc_info; + GtkWidget *dialog_doc_info; GtkWidget *hbox; GtkTooltips *button_bar_tips; PopplerDocument *pdf_doc; PopplerPage *pdf_page; gchar *filename; gchar *fsname; + gchar *doc_info_text; gint cur_page_int; gint num_pages_int; + gint rotate; double zoom; double width; double height; @@ -106,10 +117,10 @@ typedef struct _PopplerViewer PopplerVie static MimeViewerFactory poppler_viewer_factory; + static GtkWidget *poppler_get_widget(MimeViewer *_viewer) { PopplerViewer *viewer = (PopplerViewer *) _viewer; - debug_print("poppler_get_widget: %p\n", viewer->vbox); return GTK_WIDGET(viewer->vbox); @@ -125,12 +136,10 @@ static void poppler_next_page_cb(GtkButt { if (viewer->cur_page_int < viewer->num_pages_int) poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int + 1); - } static void poppler_zoom_in_cb(GtkButton *button, PopplerViewer *viewer) { - if (viewer->zoom < 4) { viewer->zoom += ZOOM_FACTOR; poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); @@ -139,7 +148,6 @@ static void poppler_zoom_in_cb(GtkButton static void poppler_zoom_out_cb(GtkButton *button, PopplerViewer *viewer) { - if (viewer->zoom > 0.3) { viewer->zoom -= ZOOM_FACTOR; poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); @@ -155,6 +163,7 @@ static void poppler_zoom_fit_cb(GtkButto debug_print("height: %d\n", allocation->height); xratio = allocation->width / viewer->width; yratio = allocation->height / viewer->height; + if (xratio >= yratio) viewer->zoom = yratio; else @@ -173,6 +182,75 @@ static void poppler_zoom_width_cb(GtkBut poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); } +static void poppler_rotate_right_cb(GtkButton *button, PopplerViewer *viewer) +{ + if (viewer->rotate == 360) + viewer->rotate = 0; + + viewer->rotate += (gint) ROTATION; + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); +} + +static void poppler_rotate_left_cb(GtkButton *button, PopplerViewer *viewer) +{ + if (viewer->rotate == 0) + viewer->rotate = 360; + + viewer->rotate = abs(viewer->rotate - (gint) ROTATION); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); +} +static void poppler_document_info_cb(GtkButton *button, PopplerViewer *viewer) +{ + gchar *title, *format, *author, *subject, *keywords, *creator, *producer, *linearized; + GTime creation_date, mod_date; + PopplerPageLayout layout; + PopplerPageMode mode; + PopplerViewerPreferences view_prefs; + + g_object_get (viewer->pdf_doc, + "title", &title, + "format", &format, + "author", &author, + "subject", &subject, + "keywords", &keywords, + "creation-date", &creation_date, + "mod-date", &mod_date, + "creator", &creator, + "producer", &producer, + "linearized", &linearized, + "page-mode", &mode, + "page-layout", &layout, + "viewer-preferences", &view_prefs, + NULL); + + viewer->dialog_doc_info = gtk_message_dialog_new_with_markup( + GTK_WINDOW(mainwindow_get_mainwindow()->window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + "PDF Viewer Plugin" + ); + + gchar *msg; + msg = g_markup_printf_escaped(_("Title: ")); + + gtk_message_dialog_format_secondary_markup( + GTK_MESSAGE_DIALOG(viewer->dialog_doc_info), + "%s", + msg + ); + + g_free(msg); + + gtk_widget_set_size_request(viewer->dialog_doc_info, -1, -1); + gtk_widget_show(GTK_WIDGET(viewer->dialog_doc_info)); + gtk_widget_ref(GTK_WIDGET(viewer->dialog_doc_info)); + + g_signal_connect_swapped(viewer->dialog_doc_info, + "response", + G_CALLBACK(gtk_widget_destroy), + viewer->dialog_doc_info); +} static gboolean entry_current_page_cb(GtkEntry *entry, GdkEventKey *event, PopplerViewer *viewer) { char *endptr; @@ -266,6 +344,9 @@ static void poppler_show_controls(Popple gtk_widget_show(viewer->zoom_width); gtk_widget_show(viewer->vsep); gtk_widget_show(viewer->vsep1); + gtk_widget_show(viewer->rotate_right); + gtk_widget_show(viewer->rotate_left); + gtk_widget_show(viewer->doc_info); } else { gtk_widget_hide(viewer->cur_page); gtk_widget_hide(viewer->num_pages); @@ -277,6 +358,9 @@ static void poppler_show_controls(Popple gtk_widget_hide(viewer->zoom_width); gtk_widget_hide(viewer->vsep); gtk_widget_hide(viewer->vsep1); + gtk_widget_hide(viewer->rotate_right); + gtk_widget_hide(viewer->rotate_left); + gtk_widget_hide(viewer->doc_info); } } @@ -302,17 +386,26 @@ static void poppler_pdf_view_update(Mime } if (poppler_mimepart_get_type(viewer->to_load) == TYPE_PS) { - stock_pixmap_gdk(viewer->hbox, STOCK_PIXMAP_MIME_PS, &viewer->icon_pixmap, &viewer->icon_bitmap); + stock_pixmap_gdk(viewer->hbox, + STOCK_PIXMAP_MIME_PS, + &viewer->icon_pixmap, + &viewer->icon_bitmap); gtk_image_set_from_pixmap(GTK_IMAGE(viewer->icon_type), viewer->icon_pixmap, viewer->icon_bitmap); } else if (poppler_mimepart_get_type(viewer->to_load) == TYPE_PDF) { - stock_pixmap_gdk(viewer->hbox, STOCK_PIXMAP_MIME_PDF, &viewer->icon_pixmap, &viewer->icon_bitmap); + stock_pixmap_gdk(viewer->hbox, + STOCK_PIXMAP_MIME_PDF, + &viewer->icon_pixmap, + &viewer->icon_bitmap); gtk_image_set_from_pixmap(GTK_IMAGE(viewer->icon_type), viewer->icon_pixmap, viewer->icon_bitmap); } else { - stock_pixmap_gdk(viewer->hbox, STOCK_PIXMAP_MIME_APPLICATION, &viewer->icon_pixmap, &viewer->icon_bitmap); + stock_pixmap_gdk(viewer->hbox, + STOCK_PIXMAP_MIME_APPLICATION, + &viewer->icon_pixmap, + &viewer->icon_bitmap); gtk_image_set_from_pixmap(GTK_IMAGE(viewer->icon_type), viewer->icon_pixmap, viewer->icon_bitmap); } - gtk_label_set_text(GTK_LABEL(viewer->doc_label), "Loading..."); + gtk_label_set_text(GTK_LABEL(viewer->doc_label), _("Loading...")); poppler_show_controls(viewer, FALSE); GTK_EVENTS_FLUSH(); @@ -347,7 +440,12 @@ static void poppler_pdf_view_update(Mime } if (viewer->pdf_doc == NULL) { strretchomp(error->message); - stock_pixmap_gdk(viewer->hbox, STOCK_PIXMAP_MIME_APPLICATION, &viewer->icon_pixmap, &viewer->icon_bitmap); + + stock_pixmap_gdk(viewer->hbox, + STOCK_PIXMAP_MIME_APPLICATION, + &viewer->icon_pixmap, + &viewer->icon_bitmap); + gtk_image_set_from_pixmap(GTK_IMAGE(viewer->icon_type), viewer->icon_pixmap, viewer->icon_bitmap); gtk_label_set_text(GTK_LABEL(viewer->doc_label), error->message); g_error_free(error); @@ -366,14 +464,28 @@ static void poppler_pdf_view_update(Mime } gtk_entry_set_text(GTK_ENTRY(viewer->cur_page), g_strdup_printf("%d",page_num)); - - poppler_page_get_size(viewer->pdf_page, &viewer->width, &viewer->height); - - pb = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, (int)(viewer->width * viewer->zoom), (int)(viewer->height * viewer->zoom)); - poppler_page_render_to_pixbuf (viewer->pdf_page, 0, 0, - (int)(viewer->width * viewer->zoom), (int)(viewer->height * viewer->zoom), viewer->zoom, 0, pb); - gtk_image_set_from_pixbuf(GTK_IMAGE(viewer->pdf_view), - pb); + if(viewer->rotate == 90 || viewer->rotate == 270) { + poppler_page_get_size(viewer->pdf_page, &viewer->height, &viewer->width); + } + else { + poppler_page_get_size(viewer->pdf_page, &viewer->width, &viewer->height); + } + + pb = gdk_pixbuf_new (GDK_COLORSPACE_RGB, + FALSE, 8, + (int)(viewer->width * viewer->zoom), + (int)(viewer->height * viewer->zoom)); + + poppler_page_render_to_pixbuf (viewer->pdf_page, + 0, + 0, + (int)(viewer->width * viewer->zoom), + (int)(viewer->height * viewer->zoom), + viewer->zoom, + viewer->rotate, + pb); + + gtk_image_set_from_pixbuf(GTK_IMAGE(viewer->pdf_view), pb); g_object_unref(G_OBJECT(pb)); g_object_unref(G_OBJECT(viewer->pdf_page)); @@ -436,6 +548,7 @@ static void poppler_show_mimepart(MimeVi { PopplerViewer *viewer = (PopplerViewer *) _viewer; viewer->zoom = 1.0; + viewer->rotate = 0; viewer->to_load = partinfo; gtk_timeout_add(5, (GtkFunction)poppler_show_mimepart_real, viewer); @@ -583,7 +696,21 @@ static MimeViewer *poppler_viewer_create gtk_widget_set_size_request(viewer->zoom_width, -1, -1); button_set_pixmap(viewer->zoom_width, zoom_width_xpm); + viewer->rotate_left = gtk_button_new(); + gtk_widget_set_size_request(viewer->rotate_left, -1, -1); + button_set_pixmap(viewer->rotate_left, rotate_left_xpm); + + viewer->rotate_right = gtk_button_new(); + gtk_widget_set_size_request(viewer->rotate_right, -1, -1); + button_set_pixmap(viewer->rotate_right, rotate_right_xpm); + + viewer->doc_info = gtk_button_new(); + gtk_widget_set_size_request(viewer->doc_info, -1, -1); + button_set_pixmap(viewer->doc_info, doc_info_xpm); + viewer->num_pages = gtk_label_new(""); + + gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(viewer->scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); @@ -604,7 +731,10 @@ static MimeViewer *poppler_viewer_create gtk_widget_show(viewer->hbox); - stock_pixmap_gdk(viewer->hbox, STOCK_PIXMAP_MIME_TEXT_PLAIN, &viewer->icon_pixmap, &viewer->icon_bitmap); + stock_pixmap_gdk(viewer->hbox, + STOCK_PIXMAP_MIME_TEXT_PLAIN, + &viewer->icon_pixmap, + &viewer->icon_bitmap); gtk_image_set_from_pixmap(GTK_IMAGE(viewer->icon_type), viewer->icon_pixmap, viewer->icon_bitmap); gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->icon_type, FALSE, FALSE, 0); @@ -623,7 +753,11 @@ static MimeViewer *poppler_viewer_create gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->zoom_fit, FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->zoom_width, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->rotate_left, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->rotate_right, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->doc_info, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(viewer->vbox), viewer->hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(viewer->vbox), viewer->scrollwin, TRUE, TRUE, 0); @@ -657,6 +791,12 @@ static MimeViewer *poppler_viewer_create gtk_widget_show(GTK_WIDGET(viewer->zoom_width)); gtk_widget_ref(GTK_WIDGET(viewer->zoom_width)); + gtk_widget_show(GTK_WIDGET(viewer->rotate_right)); + gtk_widget_ref(GTK_WIDGET(viewer->rotate_right)); + gtk_widget_show(GTK_WIDGET(viewer->rotate_left)); + gtk_widget_ref(GTK_WIDGET(viewer->rotate_left)); + gtk_widget_show(GTK_WIDGET(viewer->doc_info)); + gtk_widget_ref(GTK_WIDGET(viewer->doc_info)); gtk_widget_show(GTK_WIDGET(viewer->doc_label)); gtk_widget_ref(GTK_WIDGET(viewer->doc_label)); gtk_widget_show(GTK_WIDGET(viewer->icon_type)); @@ -665,43 +805,109 @@ static MimeViewer *poppler_viewer_create gtk_widget_ref(GTK_WIDGET(viewer->pdf_view)); /* setting tooltips */ - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->prev, - _("Previous Page"), - ""); - - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->next, - _("Next Page"), - ""); - - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->zoom_in, - _("Zoom In"), - ""); - - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->zoom_out, - _("Zoom Out"), - ""); - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->zoom_fit, - _("Fit Page"), - ""); - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->zoom_width, - _("Fit Page Width"), - ""); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->prev, + _("Previous Page"), + ""); + + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->next, + _("Next Page"), + ""); + + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->zoom_in, + _("Zoom In"), + ""); + + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->zoom_out, + _("Zoom Out"), + ""); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->zoom_fit, + _("Fit Page"), + ""); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->zoom_width, + _("Fit Page Width"), + ""); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->rotate_left, + _("Rotate Left"), + ""); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->rotate_right, + _("Rotate Right"), + ""); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), + viewer->doc_info, + _("Document Info"), + ""); + /* Signals */ - g_signal_connect (G_OBJECT(viewer->cur_page), "key_press_event", G_CALLBACK(entry_current_page_cb), (gpointer) viewer); - - //g_signal_connect (G_OBJECT(viewer->scrollwin), "key_press_event", G_CALLBACK(scrollwin_key_down_cb), (gpointer) viewer); - //g_signal_connect (G_OBJECT(viewer->scrollwin), "key_press_event", G_CALLBACK(scrollwin_key_up_cb), (gpointer) viewer); - //g_signal_connect (G_OBJECT(viewer->scrollwin), "key_press_event", G_CALLBACK(scrollwin_page_down_cb), (gpointer) viewer); - //g_signal_connect (G_OBJECT(viewer->pdf_view), "key_press_event", G_CALLBACK(scrollwin_page_up_cb), (gpointer) viewer); - - g_signal_connect (G_OBJECT(viewer->prev), "clicked", G_CALLBACK(poppler_prev_page_cb), (gpointer) viewer); - g_signal_connect (G_OBJECT(viewer->next), "clicked", G_CALLBACK(poppler_next_page_cb), (gpointer) viewer); - g_signal_connect (G_OBJECT(viewer->zoom_in), "clicked", G_CALLBACK(poppler_zoom_in_cb), (gpointer) viewer); - g_signal_connect (G_OBJECT(viewer->zoom_out), "clicked", G_CALLBACK(poppler_zoom_out_cb), (gpointer) viewer); - - g_signal_connect (G_OBJECT(viewer->zoom_fit), "clicked", G_CALLBACK(poppler_zoom_fit_cb), (gpointer) viewer); - g_signal_connect (G_OBJECT(viewer->zoom_width), "clicked", G_CALLBACK(poppler_zoom_width_cb), (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->cur_page), + "key_press_event", + G_CALLBACK(entry_current_page_cb), + (gpointer) viewer); + /* + g_signal_connect (G_OBJECT(viewer->scrollwin), + "key_press_event", + G_CALLBACK(scrollwin_key_down_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->scrollwin), + "key_press_event", + G_CALLBACK(scrollwin_key_up_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->scrollwin), + "key_press_event", + G_CALLBACK(scrollwin_page_down_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->pdf_view), + "key_press_event", + G_CALLBACK(scrollwin_page_up_cb), + (gpointer) viewer); + */ + + g_signal_connect (G_OBJECT(viewer->prev), + "clicked", + G_CALLBACK(poppler_prev_page_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->next), + "clicked", + G_CALLBACK(poppler_next_page_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->zoom_in), + "clicked", + G_CALLBACK(poppler_zoom_in_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->zoom_out), + "clicked", + G_CALLBACK(poppler_zoom_out_cb), + (gpointer) viewer); + + g_signal_connect (G_OBJECT(viewer->zoom_fit), + "clicked", + G_CALLBACK(poppler_zoom_fit_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->zoom_width), + "clicked", + G_CALLBACK(poppler_zoom_width_cb), + (gpointer) viewer); + + g_signal_connect (G_OBJECT(viewer->rotate_right), + "clicked", + G_CALLBACK(poppler_rotate_right_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->rotate_left), + "clicked", + G_CALLBACK(poppler_rotate_left_cb), + (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->doc_info), + "clicked", + G_CALLBACK(poppler_document_info_cb), + (gpointer) viewer); viewer->filename = NULL; return (MimeViewer *) viewer;