static void gimp_container_combo_box_set_view_size (GimpContainerView *view) { GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (view)); GtkTreeIter iter; gboolean iter_valid; gint view_size; gint border_width; view_size = gimp_container_view_get_view_size (view, &border_width); for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); iter_valid; iter_valid = gtk_tree_model_iter_next (model, &iter)) { GimpViewRenderer *renderer; gtk_tree_model_get (model, &iter, COLUMN_RENDERER, &renderer, -1); gimp_view_renderer_set_size (renderer, view_size, border_width); g_object_unref (renderer); } }
static void gimp_view_renderer_size_changed (GimpViewRenderer *renderer, GimpViewable *viewable) { if (renderer->size != -1) gimp_view_renderer_set_size (renderer, renderer->size, renderer->border_width); gimp_view_renderer_invalidate (renderer); }
void gimp_component_editor_set_view_size (GimpComponentEditor *editor, gint view_size) { GtkWidget *tree_widget; GtkStyle *tree_style; GtkIconSize icon_size; GtkTreeIter iter; gboolean iter_valid; g_return_if_fail (GIMP_IS_COMPONENT_EDITOR (editor)); g_return_if_fail (view_size > 0 && view_size <= GIMP_VIEWABLE_MAX_PREVIEW_SIZE); tree_widget = GTK_WIDGET (editor->view); tree_style = gtk_widget_get_style (tree_widget); icon_size = gimp_get_icon_size (tree_widget, GIMP_STOCK_VISIBLE, GTK_ICON_SIZE_BUTTON, view_size - 2 * tree_style->xthickness, view_size - 2 * tree_style->ythickness); g_object_set (editor->eye_cell, "stock-size", icon_size, NULL); for (iter_valid = gtk_tree_model_get_iter_first (editor->model, &iter); iter_valid; iter_valid = gtk_tree_model_iter_next (editor->model, &iter)) { GimpViewRenderer *renderer; gtk_tree_model_get (editor->model, &iter, COLUMN_RENDERER, &renderer, -1); gimp_view_renderer_set_size (renderer, view_size, 1); g_object_unref (renderer); } editor->view_size = view_size; gtk_tree_view_columns_autosize (editor->view); }
void gimp_view_renderer_set_dot_for_dot (GimpViewRenderer *renderer, gboolean dot_for_dot) { g_return_if_fail (GIMP_IS_VIEW_RENDERER (renderer)); if (dot_for_dot != renderer->dot_for_dot) { renderer->dot_for_dot = dot_for_dot ? TRUE: FALSE; if (renderer->size != -1) gimp_view_renderer_set_size (renderer, renderer->size, renderer->border_width); gimp_view_renderer_invalidate (renderer); } }
static void gimp_container_grid_view_set_view_size (GimpContainerView *view) { GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view); GtkWrapBoxChild *child; gint view_size; view_size = gimp_container_view_get_view_size (view, NULL); for (child = GTK_WRAP_BOX (grid_view->wrap_box)->children; child; child = child->next) { GimpView *view = GIMP_VIEW (child->widget); gimp_view_renderer_set_size (view->renderer, view_size, view->renderer->border_width); } gtk_widget_queue_resize (grid_view->wrap_box); }
GimpViewRenderer * gimp_view_renderer_new (GimpContext *context, GType viewable_type, gint size, gint border_width, gboolean is_popup) { GimpViewRenderer *renderer; g_return_val_if_fail (context == NULL || GIMP_IS_CONTEXT (context), NULL); g_return_val_if_fail (g_type_is_a (viewable_type, GIMP_TYPE_VIEWABLE), NULL); g_return_val_if_fail (size > 0 && size <= GIMP_VIEWABLE_MAX_PREVIEW_SIZE, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= GIMP_VIEW_MAX_BORDER_WIDTH, NULL); renderer = gimp_view_renderer_new_internal (context, viewable_type, is_popup); gimp_view_renderer_set_size (renderer, size, border_width); gimp_view_renderer_remove_idle (renderer); return renderer; }
static GtkWidget * gimp_navigation_editor_new_private (GimpMenuFactory *menu_factory, GimpDisplayShell *shell) { GimpNavigationEditor *editor; g_return_val_if_fail (menu_factory == NULL || GIMP_IS_MENU_FACTORY (menu_factory), NULL); g_return_val_if_fail (shell == NULL || GIMP_IS_DISPLAY_SHELL (shell), NULL); g_return_val_if_fail (menu_factory || shell, NULL); if (shell) { Gimp *gimp = shell->display->gimp; GimpDisplayConfig *config = shell->display->config; GimpView *view; editor = g_object_new (GIMP_TYPE_NAVIGATION_EDITOR, NULL); view = GIMP_VIEW (editor->view); gimp_view_renderer_set_size (view->renderer, config->nav_preview_size * 3, view->renderer->border_width); gimp_view_renderer_set_context (view->renderer, gimp_get_user_context (gimp)); gimp_navigation_editor_set_shell (editor, shell); } else { GtkWidget *hscale; GtkWidget *hbox; editor = g_object_new (GIMP_TYPE_NAVIGATION_EDITOR, "menu-factory", menu_factory, "menu-identifier", "<NavigationEditor>", NULL); gtk_widget_set_size_request (editor->view, GIMP_VIEW_SIZE_HUGE, GIMP_VIEW_SIZE_HUGE); gimp_view_set_expand (GIMP_VIEW (editor->view), TRUE); /* the editor buttons */ editor->zoom_out_button = gimp_editor_add_action_button (GIMP_EDITOR (editor), "view", "view-zoom-out", NULL); editor->zoom_in_button = gimp_editor_add_action_button (GIMP_EDITOR (editor), "view", "view-zoom-in", NULL); editor->zoom_100_button = gimp_editor_add_action_button (GIMP_EDITOR (editor), "view", "view-zoom-1-1", NULL); editor->zoom_fit_in_button = gimp_editor_add_action_button (GIMP_EDITOR (editor), "view", "view-zoom-fit-in", NULL); editor->zoom_fill_button = gimp_editor_add_action_button (GIMP_EDITOR (editor), "view", "view-zoom-fill", NULL); editor->shrink_wrap_button = gimp_editor_add_action_button (GIMP_EDITOR (editor), "view", "view-shrink-wrap", NULL); /* the zoom scale */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_end (GTK_BOX (editor), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); editor->zoom_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -8.0, 8.0, 0.5, 1.0, 0.0)); g_signal_connect (editor->zoom_adjustment, "value-changed", G_CALLBACK (gimp_navigation_editor_zoom_adj_changed), editor); hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, editor->zoom_adjustment); gtk_scale_set_draw_value (GTK_SCALE (hscale), FALSE); gtk_box_pack_start (GTK_BOX (hbox), hscale, TRUE, TRUE, 0); gtk_widget_show (hscale); /* the zoom label */ editor->zoom_label = gtk_label_new ("100%"); gtk_label_set_width_chars (GTK_LABEL (editor->zoom_label), 7); gtk_box_pack_start (GTK_BOX (hbox), editor->zoom_label, FALSE, FALSE, 0); gtk_widget_show (editor->zoom_label); } gimp_view_renderer_set_background (GIMP_VIEW (editor->view)->renderer, GIMP_STOCK_TEXTURE); return GTK_WIDGET (editor); }
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); }
void gimp_view_renderer_set_viewable (GimpViewRenderer *renderer, GimpViewable *viewable) { g_return_if_fail (GIMP_IS_VIEW_RENDERER (renderer)); g_return_if_fail (viewable == NULL || GIMP_IS_VIEWABLE (viewable)); if (viewable) g_return_if_fail (g_type_is_a (G_TYPE_FROM_INSTANCE (viewable), renderer->viewable_type)); if (viewable == renderer->viewable) return; if (renderer->surface) { cairo_surface_destroy (renderer->surface); renderer->surface = NULL; } if (renderer->pixbuf) { g_object_unref (renderer->pixbuf); renderer->pixbuf = NULL; } gimp_view_renderer_transform_free (renderer); if (renderer->viewable) { g_object_weak_unref (G_OBJECT (renderer->viewable), (GWeakNotify) gimp_view_renderer_weak_notify, renderer); g_signal_handlers_disconnect_by_func (renderer->viewable, G_CALLBACK (gimp_view_renderer_invalidate), renderer); g_signal_handlers_disconnect_by_func (renderer->viewable, G_CALLBACK (gimp_view_renderer_size_changed), renderer); if (GIMP_IS_COLOR_MANAGED (renderer->viewable)) g_signal_handlers_disconnect_by_func (renderer->viewable, G_CALLBACK (gimp_view_renderer_profile_changed), renderer); } renderer->viewable = viewable; if (renderer->viewable) { g_object_weak_ref (G_OBJECT (renderer->viewable), (GWeakNotify) gimp_view_renderer_weak_notify, renderer); g_signal_connect_swapped (renderer->viewable, "invalidate-preview", G_CALLBACK (gimp_view_renderer_invalidate), renderer); g_signal_connect_swapped (renderer->viewable, "size-changed", G_CALLBACK (gimp_view_renderer_size_changed), renderer); if (GIMP_IS_COLOR_MANAGED (renderer->viewable)) g_signal_connect_swapped (renderer->viewable, "profile-changed", G_CALLBACK (gimp_view_renderer_profile_changed), renderer); if (renderer->size != -1) gimp_view_renderer_set_size (renderer, renderer->size, renderer->border_width); gimp_view_renderer_invalidate (renderer); } else { gimp_view_renderer_update_idle (renderer); } }