From e2ef39af06a4ad8fdea30809d3ceeda8580e4d7b Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 18 Feb 2008 09:25:27 +0000 Subject: Fixing preview/swatch sizes. (bzr r4765) --- src/dialogs/eek-preview.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++--- src/dialogs/eek-preview.h | 2 ++ src/dialogs/swatches.cpp | 8 ++--- 3 files changed, 73 insertions(+), 8 deletions(-) (limited to 'src/dialogs') diff --git a/src/dialogs/eek-preview.cpp b/src/dialogs/eek-preview.cpp index 411491777..1716a7cd6 100644 --- a/src/dialogs/eek-preview.cpp +++ b/src/dialogs/eek-preview.cpp @@ -90,6 +90,54 @@ GType eek_preview_get_type(void) return preview_type; } +static guint trackCount = 0; +static guint* trackSizes = 0; +static GtkIconSize* trackKeys = 0; + +void eek_preview_set_size_mappings( guint count, GtkIconSize const* sizes ) +{ + gint width = 0; + gint height = 0; + gint smallest = 512; + gint largest = 0; + guint i = 0; + guint delta = 0; + + for ( i = 0; i < count; ++i ) { + gboolean worked = gtk_icon_size_lookup( sizes[i], &width, &height ); + if ( worked ) { + if ( width < smallest ) { + smallest = width; + } + if ( width > largest ) { + largest = width; + } + } + } + + smallest = (smallest * 3) / 4; + + delta = largest - smallest; + + if ( trackSizes ) { + g_free(trackSizes); + trackSizes = 0; + } + if ( trackKeys ) { + g_free(trackKeys); + trackKeys = 0; + } + + trackCount = count; + trackSizes = g_new(guint, count); + trackKeys = g_new(GtkIconSize, count); + for ( i = 0; i < count; ++i ) { + guint val = smallest + ( (i * delta) / (count-1) ); + trackKeys[i] = sizes[i]; + trackSizes[i] = val; + } +} + GtkWidget* eek_preview_area_new(void) { return NULL; @@ -100,10 +148,25 @@ static void eek_preview_size_request( GtkWidget* widget, GtkRequisition* req ) gint width = 0; gint height = 0; EekPreview* preview = EEK_PREVIEW(widget); - gboolean worked = gtk_icon_size_lookup( preview->_size, &width, &height ); - if ( !worked ) { - width = 16; - height = 16; + gboolean tracked = TRUE; + guint i = 0; + + for ( i = 0; i < trackCount; ++i ) { + tracked = (trackKeys[i] == preview->_size); + if ( tracked ) { + width = trackSizes[i]; + height = width; + break; + } + } + + if ( !tracked ) { + gboolean worked = gtk_icon_size_lookup( preview->_size, &width, &height ); + if ( !worked ) { + width = 16; + height = 16; + g_warning("Size not found [%d]", preview->_size); + } } if ( preview->_view == VIEW_TYPE_LIST ) { width *= 3; diff --git a/src/dialogs/eek-preview.h b/src/dialogs/eek-preview.h index 114be8742..ff2fb78f3 100644 --- a/src/dialogs/eek-preview.h +++ b/src/dialogs/eek-preview.h @@ -117,6 +117,8 @@ LinkType eek_preview_get_linked( EekPreview* splat ); gboolean eek_preview_get_focus_on_click( EekPreview* preview ); void eek_preview_set_focus_on_click( EekPreview* preview, gboolean focus_on_click ); +void eek_preview_set_size_mappings( guint count, GtkIconSize const* sizes ); + G_END_DECLS diff --git a/src/dialogs/swatches.cpp b/src/dialogs/swatches.cpp index 52178e53a..709bce25a 100644 --- a/src/dialogs/swatches.cpp +++ b/src/dialogs/swatches.cpp @@ -511,10 +511,10 @@ Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Inkscape:: lbl->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); widget = lbl; } else { - Glib::ustring blank(" "); - if ( size == Inkscape::ICON_SIZE_MENU || size == Inkscape::ICON_SIZE_DECORATION ) { - blank = " "; - } +// Glib::ustring blank(" "); +// if ( size == Inkscape::ICON_SIZE_MENU || size == Inkscape::ICON_SIZE_DECORATION ) { +// blank = " "; +// } GtkWidget* eekWidget = eek_preview_new(); EekPreview * preview = EEK_PREVIEW(eekWidget); -- cgit v1.2.3