All pastes #375747 Raw Edit

Something

public text v1 · immutable
#375747 ·published 2007-02-28 16:01 UTC
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;