rendered paste body? 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 <pthread.h>
#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,
+ "<span foreground=\"#2D1784\" size=\"x-large\"><b>PDF Viewer Plugin</b></span>"
+ );
+
+ gchar *msg;
+ msg = g_markup_printf_escaped(_("<span foreground=#ffffff size=normal>Title: </span>"));
+
+ 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;