summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 03b3d24)
raw | patch | inline | side by side (parent: 03b3d24)
author | joncruz <joncruz@users.sourceforge.net> | |
Sun, 21 Sep 2008 09:59:34 +0000 (09:59 +0000) | ||
committer | joncruz <joncruz@users.sourceforge.net> | |
Sun, 21 Sep 2008 09:59:34 +0000 (09:59 +0000) |
src/icon-size.h | patch | blob | history | |
src/ink-action.cpp | patch | blob | history | |
src/ui/widget/panel.cpp | patch | blob | history | |
src/widgets/icon.cpp | patch | blob | history |
diff --git a/src/icon-size.h b/src/icon-size.h
index 772c7994321357c72b1fb2a0bad0f47d65d06984..da2b3854dd6539529290c98be7e72d88fea4a789 100644 (file)
--- a/src/icon-size.h
+++ b/src/icon-size.h
enum IconSize {
ICON_SIZE_INVALID = ::GTK_ICON_SIZE_INVALID,
- ICON_SIZE_MENU = ::GTK_ICON_SIZE_MENU,
- ICON_SIZE_SMALL_TOOLBAR = ::GTK_ICON_SIZE_SMALL_TOOLBAR,
- ICON_SIZE_LARGE_TOOLBAR = ::GTK_ICON_SIZE_LARGE_TOOLBAR,
- ICON_SIZE_BUTTON = ::GTK_ICON_SIZE_BUTTON,
- ICON_SIZE_DND = ::GTK_ICON_SIZE_DND,
- ICON_SIZE_DIALOG = ::GTK_ICON_SIZE_DIALOG,
+ ICON_SIZE_MENU = ::GTK_ICON_SIZE_MENU,
+ ICON_SIZE_SMALL_TOOLBAR = ::GTK_ICON_SIZE_SMALL_TOOLBAR,
+ ICON_SIZE_LARGE_TOOLBAR = ::GTK_ICON_SIZE_LARGE_TOOLBAR,
+ ICON_SIZE_BUTTON = ::GTK_ICON_SIZE_BUTTON,
+ ICON_SIZE_DND = ::GTK_ICON_SIZE_DND,
+ ICON_SIZE_DIALOG = ::GTK_ICON_SIZE_DIALOG,
ICON_SIZE_DECORATION
};
+ GtkIconSize getRegisteredIconSize( IconSize size );
} // namespace Inkscape
#endif // SEEN_ICON_SIZE_H
diff --git a/src/ink-action.cpp b/src/ink-action.cpp
index c09cade057cb121da51bbd9eff0a6fbad2262e2b..acb65d1310f522be7163a41c68ac8541e30da1b0 100644 (file)
--- a/src/ink-action.cpp
+++ b/src/ink-action.cpp
#include <glib/gi18n.h>
+#include <gtk/gtkalignment.h>
#include <gtk/gtktooltips.h>
#include <gtk/gtktoolitem.h>
#include <gtk/gtktoggletoolbutton.h>
"Icon Size",
"The size the icon",
(int)Inkscape::ICON_SIZE_MENU,
- (int)Inkscape::ICON_SIZE_DECORATION,
+ (int)99,
(int)Inkscape::ICON_SIZE_SMALL_TOOLBAR,
(GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) );
"label", label,
"tooltip", tooltip,
"iconId", inkId,
- "iconSize", size,
+ "iconSize", Inkscape::getRegisteredIconSize(size),
NULL );
InkToggleAction* action = INK_TOGGLE_ACTION( obj );
GtkToolButton* button = GTK_TOOL_BUTTON(item);
if ( act->private_data->iconId ) {
GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId );
- gtk_tool_button_set_icon_widget( button, child );
+ GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 );
+ gtk_container_add( GTK_CONTAINER(align), child );
+ gtk_tool_button_set_icon_widget( button, align );
} else {
gchar *label;
g_object_get (G_OBJECT(action), "short_label", &label, NULL);
"label", label,
"tooltip", tooltip,
"iconId", inkId,
- "iconSize", size,
+ "iconSize", Inkscape::getRegisteredIconSize(size),
NULL );
InkRadioAction* action = INK_RADIO_ACTION( obj );
index fa33dca78cdc33c1525cee27641c118d8336b396..9333ffc359d185590d2c4ebff1ccdcfca4f3892c 100644 (file)
--- a/src/ui/widget/panel.cpp
+++ b/src/ui/widget/panel.cpp
void Panel::prep() {
GtkIconSize sizes[] = {
- static_cast<GtkIconSize>(Inkscape::ICON_SIZE_DECORATION),
+ Inkscape::getRegisteredIconSize(Inkscape::ICON_SIZE_DECORATION),
GTK_ICON_SIZE_MENU,
GTK_ICON_SIZE_SMALL_TOOLBAR,
GTK_ICON_SIZE_BUTTON,
Glib::ustring two_label(_("Grid"));
Gtk::RadioMenuItem *one = manage(new Gtk::RadioMenuItem(group, one_label));
Gtk::RadioMenuItem *two = manage(new Gtk::RadioMenuItem(group, two_label));
-
+
if (panel_mode == 0) {
one->set_active(true);
} else if (panel_mode == 1) {
two->set_active(true);
}
-
+
_menu->append(*one);
_non_horizontal.push_back(one);
_menu->append(*two);
one->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_MODE, 0));
two->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_MODE, 1));
}
-
+
{
Glib::ustring heightItemLabel(Q_("swatches|Size"));
-
+
//TRANSLATORS: Indicates size of colour swatches
const gchar *heightLabels[] = {
N_("tiny"),
N_("large"),
N_("huge")
};
-
+
Gtk::MenuItem *sizeItem = manage(new Gtk::MenuItem(heightItemLabel));
Gtk::Menu *sizeMenu = manage(new Gtk::Menu());
sizeItem->set_submenu(*sizeMenu);
-
+
Gtk::RadioMenuItem::Group heightGroup;
for (unsigned int i = 0; i < G_N_ELEMENTS(heightLabels); i++) {
Glib::ustring _label(Q_(heightLabels[i]));
}
_item->signal_activate().connect(sigc::bind<int, int>(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_SIZE, i));
}
-
- _menu->append(*sizeItem);
+
+ _menu->append(*sizeItem);
}
-
+
{
Glib::ustring widthItemLabel(Q_("swatches|Width"));
-
+
//TRANSLATORS: Indicates width of colour swatches
const gchar *widthLabels[] = {
N_("narrower"),
check->signal_toggled().connect(sigc::bind<Gtk::CheckMenuItem*>(sigc::mem_fun(*this, &Panel::_wrapToggled), check));
}
-
+
Gtk::SeparatorMenuItem *sep;
sep = manage(new Gtk::SeparatorMenuItem());
_menu->append(*sep);
gint width = 0;
gint height = 0;
- if ( gtk_icon_size_lookup( static_cast<GtkIconSize>(Inkscape::ICON_SIZE_DECORATION), &width, &height ) ) {
+ if ( gtk_icon_size_lookup( Inkscape::getRegisteredIconSize(Inkscape::ICON_SIZE_DECORATION), &width, &height ) ) {
_temp_arrow.set_size_request(width, height);
}
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index f9e4bf94172ba58acddd7824ae02d98b37d43292..183481cf68091b3573fbdf2729a870c1fa5e2ae1 100644 (file)
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
static gboolean icon_prerender_task(gpointer data);
-static void addPreRender( Inkscape::IconSize lsize, gchar const *name );
+static void addPreRender( GtkIconSize lsize, gchar const *name );
static void sp_icon_class_init(SPIconClass *klass);
static void sp_icon_init(SPIcon *icon);
static void sp_icon_theme_changed( SPIcon *icon );
static GdkPixbuf *sp_icon_image_load_pixmap(gchar const *name, unsigned lsize, unsigned psize);
-static GdkPixbuf *sp_icon_image_load_svg(gchar const *name, unsigned lsize, unsigned psize);
+static GdkPixbuf *sp_icon_image_load_svg(gchar const *name, GtkIconSize lsize, unsigned psize);
static void sp_icon_overlay_pixels( guchar *px, int width, int height, int stride,
unsigned r, unsigned g, unsigned b );
class IconCacheItem
{
public:
- IconCacheItem( Inkscape::IconSize lsize, GdkPixbuf* pb ) :
+ IconCacheItem( GtkIconSize lsize, GdkPixbuf* pb ) :
_lsize( lsize ),
_pb( pb )
{}
- Inkscape::IconSize _lsize;
+ GtkIconSize _lsize;
GdkPixbuf* _pb;
};
if ( !icon->pb ) {
icon->psize = sp_icon_get_phys_size(icon->lsize);
- GdkPixbuf *pb = sp_icon_image_load_svg( icon->name, icon->lsize, icon->psize );
+ GdkPixbuf *pb = sp_icon_image_load_svg( icon->name, Inkscape::getRegisteredIconSize(icon->lsize), icon->psize );
if (!pb) {
pb = sp_icon_image_load_pixmap( icon->name, icon->lsize, icon->psize );
}
static void imageMapCB(GtkWidget* widget, gpointer user_data);
static void imageMapNamedCB(GtkWidget* widget, gpointer user_data);
-static void populate_placeholder_icon(gchar const* name, unsigned lsize);
-static bool prerender_icon(gchar const *name, unsigned lsize, unsigned psize);
+static void populate_placeholder_icon(gchar const* name, GtkIconSize size);
+static bool prerender_icon(gchar const *name, GtkIconSize lsize, unsigned psize);
static Glib::ustring icon_cache_key(gchar const *name, unsigned lsize, unsigned psize);
static GdkPixbuf *get_cached_pixbuf(Glib::ustring const &key);
GtkWidget *widget = 0;
gint trySize = CLAMP( static_cast<gint>(lsize), 0, static_cast<gint>(G_N_ELEMENTS(iconSizeLookup) - 1) );
-
if ( !sizeMapDone ) {
injectCustomSize();
}
+ GtkIconSize mappedSize = iconSizeLookup[trySize];
GtkStockItem stock;
gboolean stockFound = gtk_stock_lookup( name, &stock );
bool flagMe = false;
if ( legacyNames.find(name) != legacyNames.end() ) {
- img = gtk_image_new_from_icon_name( name, iconSizeLookup[trySize] );
+ img = gtk_image_new_from_icon_name( name, mappedSize );
flagMe = true;
if ( dump ) {
- g_message("gtk_image_new_from_icon_name( '%s', %d ) = %p", name, iconSizeLookup[trySize], img);
+ g_message("gtk_image_new_from_icon_name( '%s', %d ) = %p", name, mappedSize, img);
GtkImageType thing = gtk_image_get_storage_type(GTK_IMAGE(img));
g_message(" Type is %d %s", (int)thing, (thing == GTK_IMAGE_EMPTY ? "Empty" : "ok"));
}
} else {
- img = gtk_image_new_from_stock( name, iconSizeLookup[trySize] );
+ img = gtk_image_new_from_stock( name, mappedSize );
}
if ( img ) {
if ( type == GTK_IMAGE_STOCK ) {
if ( !stockFound ) {
// It's not showing as a stock ID, so assume it will be present internally
- populate_placeholder_icon( name, lsize );
- addPreRender( lsize, name );
+ populate_placeholder_icon( name, mappedSize );
+ addPreRender( mappedSize, name );
// Add a hook to render if set visible before prerender is done.
- g_signal_connect( G_OBJECT(img), "map", G_CALLBACK(imageMapCB), GINT_TO_POINTER(static_cast<int>(lsize)) );
+ g_signal_connect( G_OBJECT(img), "map", G_CALLBACK(imageMapCB), GINT_TO_POINTER(static_cast<int>(mappedSize)) );
if ( dump ) {
- g_message(" connecting %p for imageMapCB for [%s] %d", img, name, (int)lsize);
+ g_message(" connecting %p for imageMapCB for [%s] %d", img, name, (int)mappedSize);
}
}
widget = GTK_WIDGET(img);
img = 0;
if ( dump ) {
- g_message( "loaded gtk '%s' %d (GTK_IMAGE_STOCK) %s on %p", name, lsize, (stockFound ? "STOCK" : "local"), widget );
+ g_message( "loaded gtk '%s' %d (GTK_IMAGE_STOCK) %s on %p", name, mappedSize, (stockFound ? "STOCK" : "local"), widget );
}
} else if ( type == GTK_IMAGE_ICON_NAME ) {
widget = GTK_WIDGET(img);
if ( prefs_get_int_attribute_limited( "options.iconrender", "named_nodelay", 0, 0, 1 ) ) {
int psize = sp_icon_get_phys_size(lsize);
- prerender_icon(name, lsize, psize);
+ prerender_icon(name, mappedSize, psize);
} else {
- addPreRender( lsize, name );
+ addPreRender( mappedSize, name );
}
} else {
if ( dump ) {
Gtk::Widget *sp_icon_get_icon( Glib::ustring const &oid, Inkscape::IconSize size )
{
Gtk::Widget *result = 0;
- GtkWidget *widget = sp_icon_new_full( size, oid.c_str() );
+ GtkWidget *widget = sp_icon_new_full( static_cast<Inkscape::IconSize>(Inkscape::getRegisteredIconSize(size)), oid.c_str() );
if ( widget ) {
if ( GTK_IS_IMAGE(widget) ) {
return sizemap[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.
}
}
+GtkIconSize Inkscape::getRegisteredIconSize( Inkscape::IconSize size )
+{
+ GtkIconSize other = GTK_ICON_SIZE_MENU;
+ injectCustomSize();
+ size = CLAMP( size, Inkscape::ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION );
+ if ( size == Inkscape::ICON_SIZE_DECORATION ) {
+ other = gtk_icon_size_from_name("inkscape-decoration");
+ } else {
+ other = static_cast<GtkIconSize>(size);
+ }
+
+ return other;
+}
+
+
// PUBLIC CALL:
int sp_icon_get_phys_size(int size)
{
return px;
}
-static void populate_placeholder_icon(gchar const* name, unsigned lsize)
+static void populate_placeholder_icon(gchar const* name, GtkIconSize size)
{
if ( iconSetCache.find(name) == iconSetCache.end() ) {
// only add a placeholder if nothing is already set
Gtk::IconSet icnset;
Gtk::IconSource src;
src.set_icon_name( GTK_STOCK_MISSING_IMAGE );
- src.set_size( Gtk::IconSize(lsize) );
+ src.set_size( Gtk::IconSize(size) );
icnset.add_source(src);
inkyIcons->add(Gtk::StockID(name), icnset);
}
}
-static void addToIconSet(GdkPixbuf* pb, gchar const* name, unsigned lsize, unsigned psize) {
+static void addToIconSet(GdkPixbuf* pb, gchar const* name, GtkIconSize lsize, unsigned psize) {
static gint dump = prefs_get_int_attribute_limited( "debug.icons", "dumpGtk", 0, 0, 1 );
GtkStockItem stock;
gboolean stockFound = gtk_stock_lookup( name, &stock );
@@ -889,12 +905,12 @@ static void addToIconSet(GdkPixbuf* pb, gchar const* name, unsigned lsize, unsig
}
for ( std::vector<IconCacheItem>::iterator it = iconSetCache[name].begin(); it != iconSetCache[name].end(); ++it ) {
- if ( it->_lsize == Inkscape::IconSize(lsize) ) {
+ if ( it->_lsize == lsize ) {
iconSetCache[name].erase(it);
break;
}
}
- iconSetCache[name].push_back(IconCacheItem(Inkscape::IconSize(lsize), pb));
+ iconSetCache[name].push_back(IconCacheItem(lsize, pb));
Gtk::IconSet icnset;
for ( std::vector<IconCacheItem>::iterator it = iconSetCache[name].begin(); it != iconSetCache[name].end(); ++it ) {
@@ -910,7 +926,7 @@ static void addToIconSet(GdkPixbuf* pb, gchar const* name, unsigned lsize, unsig
}
// returns true if icon needed preloading, false if nothing was done
-bool prerender_icon(gchar const *name, unsigned lsize, unsigned psize)
+bool prerender_icon(gchar const *name, GtkIconSize lsize, unsigned psize)
{
static gint dump = prefs_get_int_attribute_limited( "debug.icons", "dumpGtk", 0, 0, 1 );
Glib::ustring key = icon_cache_key(name, lsize, psize);
}
}
-static GdkPixbuf *sp_icon_image_load_svg(gchar const *name, unsigned lsize, unsigned psize)
+static GdkPixbuf *sp_icon_image_load_svg(gchar const *name, GtkIconSize lsize, unsigned psize)
{
Glib::ustring key = icon_cache_key(name, lsize, psize);
class preRenderItem
{
public:
- preRenderItem( Inkscape::IconSize lsize, gchar const *name ) :
+ preRenderItem( GtkIconSize lsize, gchar const *name ) :
_lsize( lsize ),
_name( name )
{}
- Inkscape::IconSize _lsize;
+ GtkIconSize _lsize;
Glib::ustring _name;
};
static std::vector<preRenderItem> pendingRenders;
static bool callbackHooked = false;
-static void addPreRender( Inkscape::IconSize lsize, gchar const *name )
+static void addPreRender( GtkIconSize lsize, gchar const *name )
{
if ( !callbackHooked )
{
gchar* id = 0;
GtkIconSize size = GTK_ICON_SIZE_INVALID;
gtk_image_get_stock(GTK_IMAGE(widget), &id, &size);
- int lsize = GPOINTER_TO_INT(user_data);
+ GtkIconSize lsize = static_cast<GtkIconSize>(GPOINTER_TO_INT(user_data));
if ( id ) {
int psize = sp_icon_get_phys_size(lsize);
//g_message("imageMapCB(%p) for %s:%d:%d", widget, id, lsize, psize);
for ( std::vector<preRenderItem>::iterator it = pendingRenders.begin(); it != pendingRenders.end(); ++it ) {
- if ( (it->_name == id) && (it->_lsize == static_cast<Inkscape::IconSize>(lsize)) ) {
+ if ( (it->_name == id) && (it->_lsize == lsize) ) {
prerender_icon(id, lsize, psize);
pendingRenders.erase(it);
//g_message(" prerender for %s:%d:%d", id, lsize, psize);
+ if (lsize != size) {
+ int psize = sp_icon_get_phys_size(size);
+ prerender_icon(id, size, psize);
+ }
break;
}
}
GtkImageType type = gtk_image_get_storage_type( GTK_IMAGE(img) );
if ( type == GTK_IMAGE_ICON_NAME ) {
for ( std::vector<preRenderItem>::iterator it = pendingRenders.begin(); it != pendingRenders.end(); ++it ) {
- if ( (it->_name == iconName) && (it->_lsize == static_cast<Inkscape::IconSize>(size)) ) {
+ if ( (it->_name == iconName) && (it->_lsize == size) ) {
int psize = sp_icon_get_phys_size(size);
prerender_icon(iconName, size, psize);
pendingRenders.erase(it);