+static void cb_preview_btn_close(GtkButton *button, gpointer data)
+{
+ PreviewData *preview_data = (PreviewData *)data;
+ if (preview_data->rendering)
+ return;
+ gtk_widget_destroy(preview_data->dialog);
+}
+
+static void cb_preview_zoom_100(GtkButton *button, gpointer data)
+{
+ PreviewData *preview_data = (PreviewData*) data;
+ if(preview_data->print_data->zoom != 1.) {
+ preview_data->print_data->zoom = 1.;
+ gtk_widget_queue_draw(preview_data->area);
+ printing_preview_update_zoom_sensitivity(preview_data);
+ }
+}
+
+static void cb_preview_zoom_fit(GtkButton *button, gpointer data)
+{
+ PreviewData *preview_data = (PreviewData*) data;
+ gdouble zoom_w;
+ gdouble zoom_h;
+
+ zoom_w = ((gdouble)preview_data->scrolled_window->allocation.width) /
+ ((gdouble)preview_data->page_width/preview_data->print_data->zoom +
+ PREVIEW_SHADOW_OFFSET);
+ zoom_h = ((gdouble)preview_data->scrolled_window->allocation.height) /
+ ((gdouble)preview_data->page_height/preview_data->print_data->zoom +
+ PREVIEW_SHADOW_OFFSET);
+
+ preview_data->print_data->zoom = MIN(zoom_w,zoom_h) - 0.01;
+
+ if(preview_data->print_data->zoom > PREVIEW_ZOOM_MAX)
+ preview_data->print_data->zoom = PREVIEW_ZOOM_MAX;
+ else if(preview_data->print_data->zoom < PREVIEW_ZOOM_MIN)
+ preview_data->print_data->zoom = PREVIEW_ZOOM_MIN;
+
+ printing_preview_update_zoom_sensitivity(preview_data);
+ gtk_widget_queue_draw(preview_data->area);
+}
+
+static void cb_preview_zoom_in(GtkButton *button, gpointer data)
+{
+ PreviewData *preview_data = (PreviewData*) data;
+ gdouble new_zoom;
+ new_zoom = preview_data->print_data->zoom * PREVIEW_ZOOM_FAC;
+ if(new_zoom <= PREVIEW_ZOOM_MAX) {
+ preview_data->print_data->zoom = new_zoom;
+ printing_preview_update_zoom_sensitivity(preview_data);
+ gtk_widget_queue_draw(preview_data->area);
+ }
+}
+
+static void cb_preview_zoom_out(GtkButton *button, gpointer data)
+{
+ PreviewData *preview_data = (PreviewData*) data;
+ gdouble new_zoom;
+ new_zoom = preview_data->print_data->zoom / PREVIEW_ZOOM_FAC;
+ if(new_zoom >= PREVIEW_ZOOM_MIN) {
+ preview_data->print_data->zoom = new_zoom;
+ printing_preview_update_zoom_sensitivity(preview_data);
+ gtk_widget_queue_draw(preview_data->area);
+ }
+}
+
+static void cb_preview_request_page_setup(GtkPrintOperation *op,
+ GtkPrintContext *context,
+ gint page_nr,
+ GtkPageSetup *setup,gpointer data)
+{
+ GtkPaperSize *paper_size;
+ GtkPaperSize *old_size;
+ gdouble width;
+ gdouble height;
+ gdouble top_margin;
+ gdouble bottom_margin;
+ gdouble left_margin;
+ gdouble right_margin;
+
+ PreviewData *preview_data = (PreviewData*) data;
+
+ old_size = gtk_page_setup_get_paper_size(setup);
+ width = gtk_paper_size_get_width(old_size,GTK_UNIT_INCH);
+ height = gtk_paper_size_get_height(old_size,GTK_UNIT_INCH);
+
+ top_margin = gtk_page_setup_get_top_margin(setup,GTK_UNIT_INCH);
+ bottom_margin = gtk_page_setup_get_bottom_margin(setup,GTK_UNIT_INCH);
+ left_margin = gtk_page_setup_get_left_margin(setup,GTK_UNIT_INCH);
+ right_margin = gtk_page_setup_get_right_margin(setup,GTK_UNIT_INCH);
+
+ paper_size = gtk_paper_size_new_custom("preview paper", "preview_paper",
+ width*preview_data->print_data->zoom,
+ height*preview_data->print_data->zoom,
+ GTK_UNIT_INCH);
+ gtk_page_setup_set_paper_size(setup, paper_size);
+ gtk_paper_size_free(paper_size);
+
+ gtk_page_setup_set_top_margin(setup,top_margin*preview_data->print_data->zoom,
+ GTK_UNIT_INCH);
+ gtk_page_setup_set_bottom_margin(setup,bottom_margin*preview_data->print_data->zoom,
+ GTK_UNIT_INCH);
+ gtk_page_setup_set_left_margin(setup,left_margin*preview_data->print_data->zoom,
+ GTK_UNIT_INCH);
+ gtk_page_setup_set_right_margin(setup,right_margin*preview_data->print_data->zoom,
+ GTK_UNIT_INCH);
+}
+