static void update_page_setup (CustomWidgetInfo *pinfo) { gdouble paper_width; gdouble paper_height; gdouble offset_x_max, offset_y_max; PrintData *data = pinfo->data; get_page_dimensions (pinfo, &paper_width, &paper_height, GTK_UNIT_INCH); if ((paper_width < (pinfo->data->width / data->xres)) || (paper_height < (pinfo->data->height / data->yres))) { gdouble xres, yres; xres = (gdouble) pinfo->data->width / paper_width; yres = (gdouble) pinfo->data->height / paper_height; data->xres = data->yres = MAX(xres, yres); vik_print_preview_set_image_dpi (VIK_PRINT_PREVIEW (pinfo->preview), data->xres, data->yres); } get_max_offsets (pinfo, &offset_x_max, &offset_y_max); vik_print_preview_set_image_offsets_max (VIK_PRINT_PREVIEW (pinfo->preview), offset_x_max, offset_y_max); update_offsets (pinfo); set_scale_value(pinfo); if (pinfo->preview) vik_print_preview_set_image_offsets (VIK_PRINT_PREVIEW (pinfo->preview), pinfo->data->offset_x, pinfo->data->offset_y); }
static void cb_scale(GtkWidget *widget, gpointer data) { spin_button_ctx_t *sbctx = (spin_button_ctx_t *) data; #ifdef _DEBUG printf("cb_scale: called\n"); #endif set_scale_value(sbctx, gtk_adjustment_get_value(sbctx->adj_scale)); }
static GtkWidget *create_custom_widget_cb(GtkPrintOperation *operation, PrintData *data) { GtkWidget *layout; GtkWidget *main_hbox; GtkWidget *main_vbox; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *button; GtkWidget *label; GtkPageSetup *setup; CustomWidgetInfo *info = g_malloc0(sizeof(CustomWidgetInfo)); g_signal_connect_swapped (data->operation, _("done"), G_CALLBACK (custom_widgets_cleanup), info); info->data = data; setup = gtk_print_operation_get_default_page_setup (data->operation); if (! setup) { setup = gtk_page_setup_new (); gtk_print_operation_set_default_page_setup (data->operation, setup); } layout = gtk_vbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (layout), 12); /* main hbox */ main_hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (layout), main_hbox, TRUE, TRUE, 0); gtk_widget_show (main_hbox); /* main vbox */ main_vbox = gtk_vbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (main_hbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show (main_vbox); vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); /* Page Size */ button = gtk_button_new_with_mnemonic (_("_Adjust Page Size " "and Orientation")); gtk_box_pack_start (GTK_BOX (main_vbox), button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (page_setup_cb), info); gtk_widget_show (button); /* Center */ GtkWidget *combo; const PrintCenterName *center; hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("C_enter:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); combo = vik_combo_box_text_new (); for (center = center_modes; center->name; center++) { vik_combo_box_text_append (combo, _(center->name)); } gtk_combo_box_set_active(GTK_COMBO_BOX(combo), VIK_PRINT_CENTER_BOTH); gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); gtk_widget_show (combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); g_signal_connect(combo, "changed", G_CALLBACK(center_changed_cb), info); info->center_combo = combo; /* ignore page margins */ button = gtk_check_button_new_with_mnemonic (_("Ignore Page _Margins")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), data->use_full_page); gtk_box_pack_start (GTK_BOX (main_vbox), button, FALSE, FALSE, 0); g_signal_connect (button, "toggled", G_CALLBACK (full_page_toggled_cb), info); gtk_widget_show (button); /* scale */ vbox = gtk_vbox_new (FALSE, 1); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("Image S_ize:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); label = gtk_label_new (NULL); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); info->scale_label = label; gtk_box_pack_start (GTK_BOX (hbox), info->scale_label, TRUE, TRUE, 0); gtk_widget_show (info->scale_label); info->scale = gtk_hscale_new_with_range(1, 100, 1); gtk_box_pack_start (GTK_BOX (vbox), info->scale, TRUE, TRUE, 0); gtk_scale_set_draw_value(GTK_SCALE(info->scale), FALSE); gtk_widget_show (info->scale); gtk_label_set_mnemonic_widget (GTK_LABEL (label), info->scale); g_signal_connect(info->scale, "change_value", G_CALLBACK(scale_change_value_cb), info); info->preview = vik_print_preview_new (setup, GDK_DRAWABLE(vik_viewport_get_pixmap(data->vvp))); vik_print_preview_set_use_full_page (VIK_PRINT_PREVIEW(info->preview), data->use_full_page); gtk_box_pack_start (GTK_BOX (main_hbox), info->preview, TRUE, TRUE, 0); gtk_widget_show (info->preview); g_signal_connect (info->preview, "offsets-changed", G_CALLBACK (preview_offsets_changed_cb), info); update_page_setup (info); gdouble offset_x_max, offset_y_max; get_max_offsets (info, &offset_x_max, &offset_y_max); vik_print_preview_set_image_offsets_max (VIK_PRINT_PREVIEW (info->preview), offset_x_max, offset_y_max); set_scale_value(info); return layout; }