summaryrefslogtreecommitdiff
path: root/libgnomekbd/gkbd-indicator.c
diff options
context:
space:
mode:
authorSergey V. Udaltsov <svu@gnome.org>2009-11-05 20:03:16 +0000
committerSergey V. Udaltsov <svu@gnome.org>2009-11-05 20:03:16 +0000
commitd1a110cf1950868bab323398a6b5e74e96bf58bc (patch)
treea972adb15a91aa37c9fb496207a354c596ba2e66 /libgnomekbd/gkbd-indicator.c
parentfb77e35bbcbaaa52e02272ff92a9b64bbb59036e (diff)
downloadlibgnomekbd-d1a110cf1950868bab323398a6b5e74e96bf58bc.tar.gz
Do not scale/dither if size is right
Diffstat (limited to 'libgnomekbd/gkbd-indicator.c')
-rw-r--r--libgnomekbd/gkbd-indicator.c47
1 files changed, 29 insertions, 18 deletions
diff --git a/libgnomekbd/gkbd-indicator.c b/libgnomekbd/gkbd-indicator.c
index 2fb388a..9158c47 100644
--- a/libgnomekbd/gkbd-indicator.c
+++ b/libgnomekbd/gkbd-indicator.c
@@ -87,16 +87,17 @@ gkbd_indicator_set_tooltips (GkbdIndicator * gki, const char *str);
void
gkbd_indicator_set_tooltips (GkbdIndicator * gki, const char *str)
{
- g_assert (str == NULL || g_utf8_validate (str, -1, NULL));
+ g_assert (str == NULL || g_utf8_validate (str, -1, NULL));
- gtk_widget_set_tooltip_text (GTK_WIDGET (gki), str);
+ gtk_widget_set_tooltip_text (GTK_WIDGET (gki), str);
if (gki->priv->set_parent_tooltips) {
- GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (gki));
- if (parent) {
- gtk_widget_set_tooltip_text (parent, str);
- }
- }
+ GtkWidget *parent =
+ gtk_widget_get_parent (GTK_WIDGET (gki));
+ if (parent) {
+ gtk_widget_set_tooltip_text (parent, str);
+ }
+ }
}
void
@@ -122,8 +123,7 @@ gkbd_indicator_fill (GkbdIndicator * gki)
GtkWidget *page, *decorated_page = NULL;
gchar *full_group_name =
(grp <
- g_strv_length (globals.
- full_group_names)) ?
+ g_strv_length (globals.full_group_names)) ?
globals.full_group_names[grp] : "?";
page = gkbd_indicator_prepare_drawing (gki, grp);
@@ -184,6 +184,12 @@ flag_exposed (GtkWidget * flag, GdkEventExpose * event, GdkPixbuf * image)
/* Image width and height */
int iw = gdk_pixbuf_get_width (image);
int ih = gdk_pixbuf_get_height (image);
+ gboolean scaling_needed =
+ !((flag->allocation.width == iw &&
+ flag->allocation.height <= ih) ||
+ (flag->allocation.width >= iw &&
+ flag->allocation.height == ih));
+
/* widget-to-image scales, X and Y */
double xwiratio = 1.0 * flag->allocation.width / iw;
double ywiratio = 1.0 * flag->allocation.height / ih;
@@ -197,15 +203,20 @@ flag_exposed (GtkWidget * flag, GdkEventExpose * event, GdkPixbuf * image)
int ox = (flag->allocation.width - sw) >> 1;
int oy = (flag->allocation.height - sh) >> 1;
- GdkPixbuf *scaled = gdk_pixbuf_scale_simple (image, sw, sh,
- GDK_INTERP_HYPER);
+ GdkPixbuf *scaled =
+ scaling_needed ? gdk_pixbuf_scale_simple (image, sw, sh,
+ GDK_INTERP_HYPER) :
+ image;
gdk_draw_pixbuf (GDK_DRAWABLE (flag->window),
NULL,
scaled,
0, 0,
- ox, oy, sw, sh, GDK_RGB_DITHER_NORMAL, 0, 0);
- g_object_unref (G_OBJECT (scaled));
+ ox, oy, sw, sh,
+ scaling_needed ? GDK_RGB_DITHER_NORMAL :
+ GDK_RGB_DITHER_NONE, 0, 0);
+ if (scaling_needed)
+ g_object_unref (G_OBJECT (scaled));
}
static GtkWidget *
@@ -252,8 +263,8 @@ gkbd_indicator_prepare_drawing (GkbdIndicator * gki, int group)
if (xkl_engine_get_features (globals.engine) &
XKLF_MULTIPLE_LAYOUTS_SUPPORTED) {
char *full_layout_name = (char *)
- g_slist_nth_data (globals.kbd_cfg.
- layouts_variants,
+ g_slist_nth_data (globals.
+ kbd_cfg.layouts_variants,
group);
char *variant_name;
if (!gkbd_keyboard_config_split_items
@@ -498,8 +509,7 @@ gkbd_indicator_set_current_page (GkbdIndicator * gki)
cur_state = xkl_engine_get_current_state (globals.engine);
if (cur_state->group >= 0)
gkbd_indicator_set_current_page_for_group (gki,
- cur_state->
- group);
+ cur_state->group);
}
void
@@ -741,7 +751,8 @@ gkbd_indicator_global_init (void)
globals.registry =
xkl_config_registry_get_instance (globals.engine);
- xkl_config_registry_load (globals.registry, globals.cfg.load_extra_items);
+ xkl_config_registry_load (globals.registry,
+ globals.cfg.load_extra_items);
gkbd_keyboard_config_load_from_x_current (&globals.kbd_cfg,
xklrec);