From: joncruz Date: Fri, 7 Apr 2006 08:55:50 +0000 (+0000) Subject: Putting in smaller icon size X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=4a5051f5137c3a1d9720720cb7e9e98d7d3c415f;p=inkscape.git Putting in smaller icon size --- diff --git a/ChangeLog b/ChangeLog index de6d42255..54136d6f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-04-07 Jon A. Cruz + + * src/widgets/desktop-widget.cpp, src/widgets/icon.cpp, + src/widgets/layer-selector.cpp: + + Added implementation of smaller icon size. + 2006-04-06 Jon A. Cruz * src/color-profile.cpp, src/sp-image.cpp: diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 7c70b01fa..b80da8aa4 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -234,7 +234,7 @@ sp_desktop_widget_init (SPDesktopWidget *dtw) gtk_table_attach (GTK_TABLE (tbl), dtw->hscrollbar, 1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_FILL), 0, 0); /* Vertical scrollbar and the sticky zoom button */ dtw->vscrollbar_box = gtk_vbox_new (FALSE, 0); - dtw->sticky_zoom = sp_button_new_from_data ( Inkscape::ICON_SIZE_MENU, + dtw->sticky_zoom = sp_button_new_from_data ( Inkscape::ICON_SIZE_DECORATION, SP_BUTTON_TYPE_TOGGLE, NULL, "sticky_zoom", diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index 55dab2ba7..61c642989 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -36,7 +36,7 @@ static gboolean icon_prerender_task(gpointer data); -static void addPreRender( GtkIconSize lsize, gchar const *name ); +static void addPreRender( Inkscape::IconSize lsize, gchar const *name ); static void sp_icon_class_init(SPIconClass *klass); static void sp_icon_init(SPIcon *icon); @@ -65,10 +65,24 @@ static int sp_icon_get_phys_size(int size); static void sp_icon_overlay_pixels( guchar *px, int width, int height, int stride, unsigned r, unsigned g, unsigned b ); +static void injectCustomSize(); + static GtkWidgetClass *parent_class; static bool sizeDirty = true; +static bool sizeMapDone = false; +static GtkIconSize iconSizeLookup[] = { + GTK_ICON_SIZE_INVALID, + GTK_ICON_SIZE_MENU, + GTK_ICON_SIZE_SMALL_TOOLBAR, + GTK_ICON_SIZE_LARGE_TOOLBAR, + GTK_ICON_SIZE_BUTTON, + GTK_ICON_SIZE_DND, + GTK_ICON_SIZE_DIALOG, + GTK_ICON_SIZE_MENU, // for Inkscape::ICON_SIZE_DECORATION +}; + GtkType sp_icon_get_type() { @@ -242,7 +256,7 @@ static void sp_icon_theme_changed( SPIcon *icon ) static GtkWidget * -sp_icon_new_full( GtkIconSize lsize, gchar const *name ) +sp_icon_new_full( Inkscape::IconSize lsize, gchar const *name ) { static gint dump = prefs_get_int_attribute_limited( "debug.icons", "dumpGtk", 0, 0, 1 ); static gint fallback = prefs_get_int_attribute_limited( "debug.icons", "checkNames", 0, 0, 1 ); @@ -260,7 +274,13 @@ sp_icon_new_full( GtkIconSize lsize, gchar const *name ) GtkWidget *widget = 0; if ( tryLoad ) { - GtkWidget *img = gtk_image_new_from_stock( name, lsize ); + gint trySize = CLAMP( static_cast(lsize), 0, static_cast(G_N_ELEMENTS(iconSizeLookup) - 1) ); + + if ( !sizeMapDone ) { + injectCustomSize(); + } + + GtkWidget *img = gtk_image_new_from_stock( name, iconSizeLookup[trySize] ); if ( img ) { GtkImageType type = gtk_image_get_storage_type( GTK_IMAGE(img) ); if ( type == GTK_IMAGE_STOCK ) { @@ -282,7 +302,7 @@ sp_icon_new_full( GtkIconSize lsize, gchar const *name ) if ( !widget ) { SPIcon *icon = (SPIcon *)g_object_new(SP_TYPE_ICON, NULL); - icon->lsize = (Inkscape::IconSize)lsize; + icon->lsize = lsize; icon->name = g_strdup(name); icon->psize = sp_icon_get_phys_size(lsize); @@ -295,14 +315,13 @@ sp_icon_new_full( GtkIconSize lsize, gchar const *name ) GtkWidget * sp_icon_new( Inkscape::IconSize lsize, gchar const *name ) { -// TODO FIX THIS - return sp_icon_new_full( (GtkIconSize)lsize, name ); + return sp_icon_new_full( lsize, name ); } Gtk::Widget *sp_icon_get_icon( Glib::ustring const &oid, Inkscape::IconSize size ) { Gtk::Widget *result = 0; - GtkWidget *widget = sp_icon_new_full( (GtkIconSize)size, oid.c_str() ); + GtkWidget *widget = sp_icon_new_full( size, oid.c_str() ); if ( widget ) { if ( GTK_IS_IMAGE(widget) ) { @@ -342,13 +361,46 @@ sp_icon_get_gtk_size(int size) return map[size]; } +static void injectCustomSize() +{ + // TODO - still need to handle the case of theme changes and resize, especially as we can't re-register a string. + if ( !sizeMapDone ) + { + gint dump = prefs_get_int_attribute_limited( "debug.icons", "dumpDefault", 0, 0, 1 ); + gint width = 0; + gint height = 0; + if ( gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height ) ) { + gint newWidth = (width > 18) ? (width / 2) : ((width * 2) / 3); + gint newHeight = (height > 18) ? (height / 2) : ((height * 2) / 3); + GtkIconSize newSizeEnum = gtk_icon_size_register( "inkscape-decoration", newWidth, newHeight ); + if ( newSizeEnum ) { + if ( dump ) { + g_message("Registered (%d, %d) <= (%d, %d) as index %d", newWidth, newHeight, width, height, newSizeEnum); + } + guint index = static_cast(Inkscape::ICON_SIZE_DECORATION); + if ( index < G_N_ELEMENTS(iconSizeLookup) ) { + iconSizeLookup[index] = newSizeEnum; + } else if ( dump ) { + g_message("size lookup array too small to store entry"); + } + } + } + sizeMapDone = true; + } + +} + static int sp_icon_get_phys_size(int size) { static bool init = false; - static int lastSys[GTK_ICON_SIZE_DIALOG + 1]; - static int vals[GTK_ICON_SIZE_DIALOG + 1]; + static int lastSys[Inkscape::ICON_SIZE_DECORATION + 1]; + static int vals[Inkscape::ICON_SIZE_DECORATION + 1]; - size = CLAMP( size, GTK_ICON_SIZE_MENU, GTK_ICON_SIZE_DIALOG ); + size = CLAMP( size, GTK_ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION ); + + if ( !sizeMapDone ) { + injectCustomSize(); + } if ( sizeDirty && init ) { GtkIconSize const gtkSizes[] = { @@ -357,7 +409,10 @@ static int sp_icon_get_phys_size(int size) GTK_ICON_SIZE_LARGE_TOOLBAR, GTK_ICON_SIZE_BUTTON, GTK_ICON_SIZE_DND, - GTK_ICON_SIZE_DIALOG + GTK_ICON_SIZE_DIALOG, + static_cast(Inkscape::ICON_SIZE_DECORATION) < G_N_ELEMENTS(iconSizeLookup) ? + iconSizeLookup[static_cast(Inkscape::ICON_SIZE_DECORATION)] : + GTK_ICON_SIZE_MENU }; for (unsigned i = 0; i < G_N_ELEMENTS(gtkSizes) && init; ++i) { unsigned const val_ix(gtkSizes[i]); @@ -374,6 +429,7 @@ static int sp_icon_get_phys_size(int size) if ( !init ) { sizeDirty = false; gint dump = prefs_get_int_attribute_limited( "debug.icons", "dumpDefault", 0, 0, 1 ); + if ( dump ) { g_message( "Default icon sizes:" ); } @@ -385,7 +441,10 @@ static int sp_icon_get_phys_size(int size) GTK_ICON_SIZE_LARGE_TOOLBAR, GTK_ICON_SIZE_BUTTON, GTK_ICON_SIZE_DND, - GTK_ICON_SIZE_DIALOG + GTK_ICON_SIZE_DIALOG, + static_cast(Inkscape::ICON_SIZE_DECORATION) < G_N_ELEMENTS(iconSizeLookup) ? + iconSizeLookup[static_cast(Inkscape::ICON_SIZE_DECORATION)] : + GTK_ICON_SIZE_MENU }; gchar const *const names[] = { "GTK_ICON_SIZE_MENU", @@ -393,7 +452,8 @@ static int sp_icon_get_phys_size(int size) "GTK_ICON_SIZE_LARGE_TOOLBAR", "GTK_ICON_SIZE_BUTTON", "GTK_ICON_SIZE_DND", - "GTK_ICON_SIZE_DIALOG" + "GTK_ICON_SIZE_DIALOG", + "inkscape-decoration" }; GtkWidget *icon = (GtkWidget *)g_object_new(SP_TYPE_ICON, NULL); @@ -849,11 +909,11 @@ void sp_icon_overlay_pixels(guchar *px, int width, int height, int stride, class preRenderItem { public: - preRenderItem( GtkIconSize lsize, gchar const *name ) : + preRenderItem( Inkscape::IconSize lsize, gchar const *name ) : _lsize( lsize ), _name( name ) {} - GtkIconSize _lsize; + Inkscape::IconSize _lsize; Glib::ustring _name; }; @@ -863,7 +923,7 @@ public: static std::queue pendingRenders; static bool callbackHooked = false; -static void addPreRender( GtkIconSize lsize, gchar const *name ) +static void addPreRender( Inkscape::IconSize lsize, gchar const *name ) { if ( !callbackHooked ) diff --git a/src/widgets/layer-selector.cpp b/src/widgets/layer-selector.cpp index b95005cd9..e0c8286b0 100644 --- a/src/widgets/layer-selector.cpp +++ b/src/widgets/layer-selector.cpp @@ -91,7 +91,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) { AlternateIcons *label; - label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_MENU, "visible", "hidden")); + label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, "visible", "hidden")); _visibility_toggle.add(*label); _visibility_toggle.signal_toggled().connect( sigc::compose( @@ -111,7 +111,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) _tooltips.set_tip(_visibility_toggle, _("Toggle current layer visibility")); pack_start(_visibility_toggle, Gtk::PACK_EXPAND_PADDING); - label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_MENU, "lock_unlocked", "width_height_lock")); + label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, "lock_unlocked", "width_height_lock")); _lock_toggle.add(*label); _lock_toggle.signal_toggled().connect( sigc::compose(