static void gimp_display_shell_resolution_changed_handler (GimpImage *image, GimpDisplayShell *shell) { gimp_display_shell_scale_update (shell); if (shell->dot_for_dot) { if (shell->unit != GIMP_UNIT_PIXEL) { gimp_display_shell_rulers_update (shell); } gimp_display_shell_scaled (shell); } else { /* A resolution change has the same effect as a size change from * a display shell point of view. Force a redraw of the display * so that we don't get any display garbage. */ GimpDisplayConfig *config = shell->display->config; gboolean resize_window; /* Resize windows only in multi-window mode */ resize_window = (config->resize_windows_on_resize && ! GIMP_GUI_CONFIG (config)->single_window_mode); gimp_display_shell_scale_resize (shell, resize_window, FALSE); } }
/** * gimp_display_shell_scroll_clamp_and_update: * @shell: * * Helper function for calling two functions that are commonly called * in pairs. **/ void gimp_display_shell_scroll_clamp_and_update (GimpDisplayShell *shell) { GimpImage *image; g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); image = gimp_display_get_image (shell->display); if (image) { gint bounds_x; gint bounds_y; gint bounds_width; gint bounds_height; gint min_offset_x; gint max_offset_x; gint min_offset_y; gint max_offset_y; gint offset_x; gint offset_y; gimp_display_shell_rotate_update_transform (shell); gimp_display_shell_scale_get_image_bounds (shell, &bounds_x, &bounds_y, &bounds_width, &bounds_height); if (shell->disp_width < bounds_width) { min_offset_x = bounds_x - shell->disp_width * OVERPAN_FACTOR; max_offset_x = bounds_x + bounds_width - shell->disp_width * (1.0 - OVERPAN_FACTOR); } else { gint overpan_amount; overpan_amount = shell->disp_width - bounds_width * (1.0 - OVERPAN_FACTOR); min_offset_x = bounds_x - overpan_amount; max_offset_x = bounds_x + bounds_width - shell->disp_width + overpan_amount; } if (shell->disp_height < bounds_height) { min_offset_y = bounds_y - shell->disp_height * OVERPAN_FACTOR; max_offset_y = bounds_y + bounds_height - shell->disp_height * (1.0 - OVERPAN_FACTOR); } else { gint overpan_amount; overpan_amount = shell->disp_height - bounds_height * (1.0 - OVERPAN_FACTOR); min_offset_y = bounds_y - overpan_amount; max_offset_y = bounds_y + bounds_height + overpan_amount - shell->disp_height; } /* Clamp */ offset_x = CLAMP (shell->offset_x, min_offset_x, max_offset_x); offset_y = CLAMP (shell->offset_y, min_offset_y, max_offset_y); if (offset_x != shell->offset_x || offset_y != shell->offset_y) { shell->offset_x = offset_x; shell->offset_y = offset_y; gimp_display_shell_rotate_update_transform (shell); } /* Set scrollbar stepper sensitiity */ gimp_display_shell_scrollbars_update_steppers (shell, min_offset_x, max_offset_x, min_offset_y, max_offset_y); } else { shell->offset_x = 0; shell->offset_y = 0; } gimp_display_shell_scrollbars_update (shell); gimp_display_shell_rulers_update (shell); }