diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2008-02-18 09:25:27 +0000 |
|---|---|---|
| committer | joncruz <joncruz@users.sourceforge.net> | 2008-02-18 09:25:27 +0000 |
| commit | e2ef39af06a4ad8fdea30809d3ceeda8580e4d7b (patch) | |
| tree | 92eb8ee65ad6d0dd9b2a4329fbf2978fff912a9e /src/dialogs/eek-preview.cpp | |
| parent | a bunch of updates (diff) | |
| download | inkscape-e2ef39af06a4ad8fdea30809d3ceeda8580e4d7b.tar.gz inkscape-e2ef39af06a4ad8fdea30809d3ceeda8580e4d7b.zip | |
Fixing preview/swatch sizes.
(bzr r4765)
Diffstat (limited to 'src/dialogs/eek-preview.cpp')
| -rw-r--r-- | src/dialogs/eek-preview.cpp | 71 |
1 files changed, 67 insertions, 4 deletions
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; |
