const gchar * gimp_get_mod_string (GdkModifierType modifiers) { static struct { GdkModifierType modifiers; gchar *name; } modifier_strings[] = { { GDK_SHIFT_MASK, NULL }, { GDK_CONTROL_MASK, NULL }, { GDK_MOD1_MASK, NULL }, { GDK_SHIFT_MASK | GDK_CONTROL_MASK, NULL }, { GDK_SHIFT_MASK | GDK_MOD1_MASK, NULL }, { GDK_CONTROL_MASK | GDK_MOD1_MASK, NULL }, { GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK, NULL } }; gint i; for (i = 0; i < G_N_ELEMENTS (modifier_strings); i++) { if (modifiers == modifier_strings[i].modifiers) { if (! modifier_strings[i].name) { GString *str = g_string_new (NULL); if (modifiers & GDK_SHIFT_MASK) { g_string_append (str, gimp_get_mod_name_shift ()); } if (modifiers & GDK_CONTROL_MASK) { if (str->len) g_string_append (str, gimp_get_mod_separator ()); g_string_append (str, gimp_get_mod_name_control ()); } if (modifiers & GDK_MOD1_MASK) { if (str->len) g_string_append (str, gimp_get_mod_separator ()); g_string_append (str, gimp_get_mod_name_alt ()); } modifier_strings[i].name = g_string_free (str, FALSE); } return modifier_strings[i].name; } } return NULL; }
static void gimp_source_tool_oper_update (GimpTool *tool, const GimpCoords *coords, GdkModifierType state, gboolean proximity, GimpDisplay *display) { GimpSourceTool *source_tool = GIMP_SOURCE_TOOL (tool); GimpSourceOptions *options = GIMP_SOURCE_TOOL_GET_OPTIONS (tool); if (proximity) { GimpPaintTool *paint_tool = GIMP_PAINT_TOOL (tool); if (options->use_source) paint_tool->status_ctrl = source_tool->status_set_source_ctrl; else paint_tool->status_ctrl = NULL; } GIMP_TOOL_CLASS (parent_class)->oper_update (tool, coords, state, proximity, display); if (options->use_source) { GimpSourceCore *source = GIMP_SOURCE_CORE (GIMP_PAINT_TOOL (tool)->core); if (source->src_drawable == NULL) { if (state & GDK_CONTROL_MASK) { gimp_tool_replace_status (tool, display, "%s", source_tool->status_set_source); } else { gimp_tool_replace_status (tool, display, "%s%s%s", gimp_get_mod_name_control (), gimp_get_mod_separator (), source_tool->status_set_source); } } else { gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool)); source_tool->src_x = source->src_x; source_tool->src_y = source->src_y; if (! source->first_stroke) { switch (options->align_mode) { case GIMP_SOURCE_ALIGN_YES: source_tool->src_x = coords->x + source->offset_x; source_tool->src_y = coords->y + source->offset_y; break; case GIMP_SOURCE_ALIGN_REGISTERED: source_tool->src_x = coords->x; source_tool->src_y = coords->y; break; default: break; } } gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool)); } } }
GtkWidget * gimp_thumb_box_new (GimpContext *context) { GimpThumbBox *box; GtkWidget *vbox; GtkWidget *vbox2; GtkWidget *ebox; GtkWidget *hbox; GtkWidget *button; GtkWidget *label; gchar *str; gint h, v; GtkRequisition info_requisition; GtkRequisition progress_requisition; g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL); box = g_object_new (GIMP_TYPE_THUMB_BOX, NULL); box->context = context; ebox = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (box), ebox); gtk_widget_show (ebox); g_signal_connect (ebox, "button-press-event", G_CALLBACK (gimp_thumb_box_ebox_button_press), box); str = g_strdup_printf (_("Click to update preview\n" "%s%sClick to force update even " "if preview is up-to-date"), gimp_get_mod_string (GDK_CONTROL_MASK), gimp_get_mod_separator ()); gimp_help_set_help_data (ebox, str, NULL); g_free (str); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (ebox), vbox); gtk_widget_show (vbox); button = gtk_button_new (); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); label = gtk_label_new_with_mnemonic (_("Pr_eview")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_container_add (GTK_CONTAINER (button), label); gtk_widget_show (label); g_signal_connect (button, "button-press-event", G_CALLBACK (gtk_true), NULL); g_signal_connect (button, "button-release-event", G_CALLBACK (gtk_true), NULL); g_signal_connect (button, "enter-notify-event", G_CALLBACK (gtk_true), NULL); g_signal_connect (button, "leave-notify-event", G_CALLBACK (gtk_true), NULL); vbox2 = gtk_vbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (vbox2), 2); gtk_container_add (GTK_CONTAINER (vbox), vbox2); gtk_widget_show (vbox2); hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); box->imagefile = gimp_imagefile_new (context->gimp, NULL); g_signal_connect (box->imagefile, "info-changed", G_CALLBACK (gimp_thumb_box_imagefile_info_changed), box); g_signal_connect (box->imagefile->thumbnail, "notify::thumb-state", G_CALLBACK (gimp_thumb_box_thumb_state_notify), box); gimp_view_renderer_get_frame_size (&h, &v); box->preview = gimp_view_new (context, GIMP_VIEWABLE (box->imagefile), /* add padding for the shadow frame */ context->gimp->config->thumbnail_size + MAX (h, v), 0, FALSE); gtk_box_pack_start (GTK_BOX (hbox), box->preview, TRUE, FALSE, 2); gtk_widget_show (box->preview); gtk_label_set_mnemonic_widget (GTK_LABEL (label), box->preview); g_signal_connect (box->preview, "clicked", G_CALLBACK (gimp_thumb_box_thumbnail_clicked), box); box->filename = gtk_label_new (_("No selection")); gtk_label_set_ellipsize (GTK_LABEL (box->filename), PANGO_ELLIPSIZE_MIDDLE); gtk_label_set_justify (GTK_LABEL (box->filename), GTK_JUSTIFY_CENTER); gimp_label_set_attributes (GTK_LABEL (box->filename), PANGO_ATTR_STYLE, PANGO_STYLE_OBLIQUE, -1); gtk_box_pack_start (GTK_BOX (vbox2), box->filename, FALSE, FALSE, 0); gtk_widget_show (box->filename); box->info = gtk_label_new (" \n \n \n "); gtk_misc_set_alignment (GTK_MISC (box->info), 0.5, 0.0); gtk_label_set_justify (GTK_LABEL (box->info), GTK_JUSTIFY_CENTER); gimp_label_set_attributes (GTK_LABEL (box->info), PANGO_ATTR_SCALE, PANGO_SCALE_SMALL, -1); gtk_box_pack_start (GTK_BOX (vbox2), box->info, FALSE, FALSE, 0); gtk_widget_show (box->info); box->progress = gtk_progress_bar_new (); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (box->progress), "Fog"); gtk_box_pack_end (GTK_BOX (vbox2), box->progress, FALSE, FALSE, 0); gtk_widget_set_no_show_all (box->progress, TRUE); /* don't gtk_widget_show (box->progress); */ /* eek */ gtk_widget_size_request (box->info, &info_requisition); gtk_widget_size_request (box->progress, &progress_requisition); gtk_widget_set_size_request (box->info, progress_requisition.width, info_requisition.height); gtk_widget_set_size_request (box->filename, progress_requisition.width, -1); gtk_widget_set_size_request (box->progress, -1, progress_requisition.height); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (box->progress), ""); return GTK_WIDGET (box); }