void gimp_view_renderer_set_size (GimpViewRenderer *renderer, gint view_size, gint border_width) { gint width; gint height; g_return_if_fail (GIMP_IS_VIEW_RENDERER (renderer)); g_return_if_fail (view_size > 0 && view_size <= GIMP_VIEWABLE_MAX_PREVIEW_SIZE); g_return_if_fail (border_width >= 0 && border_width <= GIMP_VIEW_MAX_BORDER_WIDTH); renderer->size = view_size; if (renderer->viewable) { gimp_viewable_get_preview_size (renderer->viewable, view_size, renderer->is_popup, renderer->dot_for_dot, &width, &height); } else { width = view_size; height = view_size; } gimp_view_renderer_set_size_full (renderer, width, height, border_width); }
static void gimp_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GimpView *view = GIMP_VIEW (widget); gint width; gint height; if (view->expand) { width = MIN (GIMP_VIEWABLE_MAX_PREVIEW_SIZE, allocation->width - 2 * view->renderer->border_width); height = MIN (GIMP_VIEWABLE_MAX_PREVIEW_SIZE, allocation->height - 2 * view->renderer->border_width); if (view->renderer->width != width || view->renderer->height != height) { gint border_width = view->renderer->border_width; if (view->renderer->size != -1 && view->renderer->viewable) { gint view_width; gint view_height; gint scaled_width; gint scaled_height; gimp_viewable_get_preview_size (view->renderer->viewable, GIMP_VIEWABLE_MAX_PREVIEW_SIZE, view->renderer->is_popup, view->renderer->dot_for_dot, &view_width, &view_height); gimp_viewable_calc_preview_size (view_width, view_height, width, height, TRUE, 1.0, 1.0, &scaled_width, &scaled_height, NULL); if (scaled_width > width) { scaled_height = scaled_height * width / scaled_width; scaled_width = scaled_width * width / scaled_width; } else if (scaled_height > height) { scaled_width = scaled_width * height / scaled_height; scaled_height = scaled_height * height / scaled_height; } gimp_view_renderer_set_size (view->renderer, MAX (scaled_width, scaled_height), border_width); } else { gimp_view_renderer_set_size_full (view->renderer, width, height, border_width); } gimp_view_renderer_remove_idle (view->renderer); } } width = (view->renderer->width + 2 * view->renderer->border_width); height = (view->renderer->height + 2 * view->renderer->border_width); if (allocation->width > width) allocation->x += (allocation->width - width) / 2; if (allocation->height > height) allocation->y += (allocation->height - height) / 2; allocation->width = width; allocation->height = height; gtk_widget_set_allocation (widget, allocation); if (gtk_widget_get_realized (widget)) gdk_window_move_resize (view->event_window, allocation->x, allocation->y, allocation->width, allocation->height); }