Chromium Code Reviews| Index: chrome/browser/gtk/dialogs_gtk.cc |
| =================================================================== |
| --- chrome/browser/gtk/dialogs_gtk.cc (revision 19623) |
| +++ chrome/browser/gtk/dialogs_gtk.cc (working copy) |
| @@ -17,6 +17,14 @@ |
| #include "chrome/browser/shell_dialogs.h" |
| #include "grit/generated_resources.h" |
| +// The size of the preview we display for selected image files. We set height |
| +// larger than width because generally there is more free space vertically |
| +// than horiztonally (setting the preview image will alway expand the width of |
| +// the dialog, but usually not the height). The image's aspect ratio will always |
| +// be preserved. |
| +static const int kPreviewWidth = 256; |
| +static const int kPreviewHeight = 512; |
| + |
| // Implementation of SelectFileDialog that shows a Gtk common dialog for |
| // choosing a file or folder. |
| // This acts as a modal dialog. Ideally we want to only act modally for the |
| @@ -88,6 +96,10 @@ |
| static void OnSelectMultiFileDialogResponse( |
| GtkWidget* dialog, gint response_id, SelectFileDialogImpl* dialog_impl); |
| + // Callback for when we update the preview for the selection. |
| + static void OnUpdatePreview(GtkFileChooser* chooser, |
| + SelectFileDialogImpl* dialog); |
| + |
| // The listener to be notified of selection completion. |
| Listener* listener_; |
| @@ -112,6 +124,9 @@ |
| static FilePath* last_saved_path_; |
| static FilePath* last_opened_path_; |
| + // The GtkImage widget for showing previews of selected images. |
| + GtkWidget* preview_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImpl); |
| }; |
| @@ -188,6 +203,10 @@ |
| return; |
| } |
| + preview_ = gtk_image_new(); |
| + g_signal_connect(dialog, "update-preview", G_CALLBACK(OnUpdatePreview), this); |
| + gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog), preview_); |
| + |
| params_map_[dialog] = params; |
| gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); |
| gtk_widget_show_all(dialog); |
| @@ -409,3 +428,20 @@ |
| g_slist_free(filenames); |
| dialog_impl->MultiFilesSelected(dialog, filenames_fp); |
| } |
| + |
| +// static |
| +void SelectFileDialogImpl::OnUpdatePreview(GtkFileChooser* chooser, |
| + SelectFileDialogImpl* dialog) { |
| + gchar* filename = gtk_file_chooser_get_preview_filename(chooser); |
| + if (!filename) |
| + return; |
| + // This will preserve the image's aspect ratio. |
| + GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file_at_size(filename, kPreviewWidth, |
| + kPreviewHeight, NULL); |
| + g_free(filename); |
| + if (pixbuf) { |
| + gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->preview_), pixbuf); |
| + g_object_unref(pixbuf); |
| + } |
| + gtk_file_chooser_set_preview_widget_active(chooser, pixbuf ? true : false); |
|
Evan Martin
2009/06/30 20:16:58
maybe TRUE and FALSE here
|
| +} |