static void high_quality_checkbutton_toggled_cb (GtkToggleButton *button, GthFileToolResize *self) { self->priv->high_quality = gtk_toggle_button_get_active (button); update_image_size (self); }
static void resize_task_completed_cb (GthTask *task, GError *error, gpointer user_data) { GthFileToolResize *self = user_data; GtkWidget *window; GtkWidget *viewer_page; self->priv->resize_task = NULL; if (self->priv->closing) { g_object_unref (task); gth_image_viewer_page_tool_reset_image (GTH_IMAGE_VIEWER_PAGE_TOOL (self)); return; } if (error != NULL) { if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) update_image_size (self); g_object_unref (task); return; } _cairo_clear_surface (&self->priv->new_image); self->priv->new_image = gth_image_task_get_destination_surface (GTH_IMAGE_TASK (task)); if (self->priv->new_image == NULL) { g_object_unref (task); return; } window = gth_file_tool_get_window (GTH_FILE_TOOL (self)); viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window)); gth_image_viewer_page_set_image (GTH_IMAGE_VIEWER_PAGE (viewer_page), self->priv->new_image, FALSE); if (self->priv->apply_to_original) { gth_image_history_add_surface (gth_image_viewer_page_get_history (GTH_IMAGE_VIEWER_PAGE (viewer_page)), self->priv->new_image, -1, TRUE); gth_viewer_page_focus (GTH_VIEWER_PAGE (viewer_page)); gth_file_tool_hide_options (GTH_FILE_TOOL (self)); } else { update_dimensione_info_label (self, "new_dimensions_label", self->priv->new_width, self->priv->new_height, TRUE); update_dimensione_info_label (self, "scale_factor_label", (double) self->priv->new_width / self->priv->original_width, (double) self->priv->new_height / self->priv->original_height, FALSE); } g_object_unref (task); }
static void gth_file_tool_resize_apply_options (GthFileTool *base) { GthFileToolResize *self; self = (GthFileToolResize *) base; self->priv->apply_to_original = TRUE; update_image_size (self); }
static void selection_height_value_changed_cb (GtkSpinButton *spin, GthFileToolResize *self) { if (self->priv->unit == GTH_UNIT_PIXELS) self->priv->new_height = MAX (gtk_spin_button_get_value_as_int (spin), 1); else if (self->priv->unit == GTH_UNIT_PERCENTAGE) self->priv->new_height = MAX ((int) round ((gtk_spin_button_get_value (spin) / 100.0) * self->priv->original_height), 1); if (self->priv->fixed_aspect_ratio) { g_signal_handlers_block_by_data (GET_WIDGET ("resize_width_spinbutton"), self); self->priv->new_width = MAX ((int) round ((double) self->priv->new_height * self->priv->aspect_ratio), 1); if (self->priv->unit == GTH_UNIT_PIXELS) gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("resize_width_spinbutton")), self->priv->new_width); else if (self->priv->unit == GTH_UNIT_PERCENTAGE) gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("resize_width_spinbutton")), ((double) self->priv->new_width) / self->priv->original_width * 100.0); g_signal_handlers_unblock_by_data (GET_WIDGET ("resize_width_spinbutton"), self); } update_image_size (self); }
static void set_image_size (GthFileToolResize *self, int w, int h, int ratio) { self->priv->fixed_aspect_ratio = TRUE; self->priv->aspect_ratio = (double) w / h;; self->priv->new_width = w; self->priv->new_height = h; self->priv->unit = GTH_UNIT_PIXELS; update_size_spin_buttons_from_unit_value (self); g_signal_handlers_block_by_data (GET_WIDGET ("resize_width_spinbutton"), self); g_signal_handlers_block_by_data (GET_WIDGET ("resize_height_spinbutton"), self); g_signal_handlers_block_by_data (GET_WIDGET ("unit_combobox"), self); g_signal_handlers_block_by_data (self->priv->ratio_combobox, self); g_signal_handlers_block_by_data (GET_WIDGET ("invert_ratio_checkbutton"), self); g_signal_handlers_block_by_data (GET_WIDGET ("ratio_w_spinbutton"), self); g_signal_handlers_block_by_data (GET_WIDGET ("ratio_h_spinbutton"), self); gtk_combo_box_set_active (GTK_COMBO_BOX (GET_WIDGET ("unit_combobox")), PIXELS_UNIT_POSITION); gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->ratio_combobox), ratio); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("invert_ratio_checkbutton")), FALSE); gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("resize_width_spinbutton")), w); gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("resize_height_spinbutton")), h); gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("ratio_w_spinbutton")), w); gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("ratio_h_spinbutton")), h); g_signal_handlers_unblock_by_data (GET_WIDGET ("resize_width_spinbutton"), self); g_signal_handlers_unblock_by_data (GET_WIDGET ("resize_height_spinbutton"), self); g_signal_handlers_unblock_by_data (GET_WIDGET ("unit_combobox"), self); g_signal_handlers_unblock_by_data (self->priv->ratio_combobox, self); g_signal_handlers_unblock_by_data (GET_WIDGET ("invert_ratio_checkbutton"), self); g_signal_handlers_unblock_by_data (GET_WIDGET ("ratio_w_spinbutton"), self); g_signal_handlers_unblock_by_data (GET_WIDGET ("ratio_h_spinbutton"), self); update_image_size (self); }
void S9xXVDisplayDriver::update (int width, int height) { int current_width, current_height, final_pitch; uint8 *final_buffer; int dst_x, dst_y, dst_width, dst_height; GtkAllocation allocation; gtk_widget_get_allocation (drawing_area, &allocation); current_width = allocation.width; current_height = allocation.height; if (width <= 0) { gdk_window_hide (gdk_window); return; } if (output_window_width != current_width || output_window_height != current_height) { resize_window (current_width, current_height); } if (config->scale_method > 0) { uint8 *src_buffer = (uint8 *) padded_buffer[0]; uint8 *dst_buffer = (uint8 *) padded_buffer[1]; int src_pitch = image_width * image_bpp; int dst_pitch = scaled_max_width * image_bpp; S9xFilter (src_buffer, src_pitch, dst_buffer, dst_pitch, width, height); final_buffer = (uint8 *) padded_buffer[1]; final_pitch = dst_pitch; } else { final_buffer = (uint8 *) padded_buffer[0]; final_pitch = image_width * image_bpp; } update_image_size (width, height); if (format == FOURCC_YUY2) { S9xConvertYUV (final_buffer, (uint8 *) xv_image->data, final_pitch, 2 * xv_image->width, width + (width < xv_image->width ? (width % 2) + 4 : 0), height + (height < xv_image->height ? 4 : 0)); } else { S9xConvertMask (final_buffer, (uint8 *) xv_image->data, final_pitch, bytes_per_pixel * xv_image->width, width + (width < xv_image->width ? (width % 2) + 4 : 0), height + (height < xv_image->height ? 4 : 0), rshift, gshift, bshift, bpp); } dst_x = width; dst_y = height; dst_width = current_width; dst_height = current_height; S9xApplyAspect (dst_x, dst_y, dst_width, dst_height); if (last_known_width != dst_width || last_known_height != dst_height) { last_known_width = dst_width; last_known_height = dst_height; clear (); } XvShmPutImage (display, xv_portid, xwindow, XDefaultGC (display, XDefaultScreen (display)), xv_image, 0, 0, width, height, dst_x, dst_y, dst_width, dst_height, False); top_level->set_mouseable_area (dst_x, dst_y, dst_width, dst_height); XSync (display, False); return; }