This is an automated email from the git hooks/post-receive script. igor pushed a commit to branch master in repository panel-plugins/xfce4-xkb-plugin.
commit df86d1490a4491fe29056a5a1ee10093d5a9e146 Author: Igor Slepchin <[email protected]> Date: Tue Mar 31 18:40:12 2015 -0400 Bug 11681: Allow adjusting flag sizes While at it, use a slider for adjusting text sizes too. --- panel-plugin/xfce4-xkb-plugin.c | 37 +++++++++++++-- panel-plugin/xfce4-xkb-plugin.h | 3 +- panel-plugin/xkb-cairo.c | 89 +++++++++++++++++++++++++++--------- panel-plugin/xkb-cairo.h | 6 ++- panel-plugin/xkb-callbacks.c | 6 ++- panel-plugin/xkb-config.c | 6 ++- panel-plugin/xkb-config.h | 1 + panel-plugin/xkb-settings-dialog.c | 42 ++++++++++++----- 8 files changed, 146 insertions(+), 44 deletions(-) diff --git a/panel-plugin/xfce4-xkb-plugin.c b/panel-plugin/xfce4-xkb-plugin.c index 52a1e96..2d24f4e 100644 --- a/panel-plugin/xfce4-xkb-plugin.c +++ b/panel-plugin/xfce4-xkb-plugin.c @@ -42,6 +42,9 @@ #include "xkb-cairo.h" #include "xkb-callbacks.h" +#define DISPLAY_TEXTSCALE_LARGE 100 +#define DISPLAY_IMGSCALE_LARGE 100 + /* ------------------------------------------------------------------ * * Panel Plugin Interface * * ------------------------------------------------------------------ */ @@ -288,7 +291,8 @@ xfce_xkb_save_config (XfcePanelPlugin *plugin, t_xkb *xkb) xfce_rc_set_group (rcfile, NULL); xfce_rc_write_int_entry (rcfile, "display_type", xkb->display_type); - xfce_rc_write_int_entry (rcfile, "display_textsize", xkb->display_textsize); + xfce_rc_write_int_entry (rcfile, "display_textscale", xkb->display_text_scale); + xfce_rc_write_int_entry (rcfile, "display_imgscale", xkb->display_img_scale); xfce_rc_write_int_entry (rcfile, "group_policy", xkb->group_policy); xfce_rc_close (rcfile); @@ -299,12 +303,34 @@ static gboolean xkb_load_config (t_xkb *xkb, const gchar *filename) { XfceRc* rcfile; + gint text_scale; + if ((rcfile = xfce_rc_simple_open (filename, TRUE))) { xfce_rc_set_group (rcfile, NULL); xkb->display_type = xfce_rc_read_int_entry (rcfile, "display_type", DISPLAY_TYPE_IMAGE); - xkb->display_textsize = xfce_rc_read_int_entry (rcfile, "display_textsize", DISPLAY_TEXTSIZE_LARGE); + text_scale = xfce_rc_read_int_entry (rcfile, "display_textscale", -1); + if (text_scale < 0) + { + /* Check if the old textsize value is there */ + text_scale = xfce_rc_read_int_entry (rcfile, "display_textsize", -1); + switch (text_scale) + { + case DISPLAY_TEXTSIZE_SMALL: + text_scale = 47; + break; + case DISPLAY_TEXTSIZE_MEDIUM: + text_scale = 70; + break; + case DISPLAY_TEXTSIZE_LARGE: + default: + text_scale = DISPLAY_TEXTSCALE_LARGE; + break; + } + } + xkb->display_text_scale = text_scale; + xkb->display_img_scale = xfce_rc_read_int_entry (rcfile, "display_imgscale", DISPLAY_IMGSCALE_LARGE); xkb->group_policy = xfce_rc_read_int_entry (rcfile, "group_policy", GROUP_POLICY_PER_APPLICATION); xfce_rc_close (rcfile); @@ -318,9 +344,10 @@ xkb_load_config (t_xkb *xkb, const gchar *filename) static void xkb_load_default (t_xkb *xkb) { - xkb->display_type = DISPLAY_TYPE_IMAGE; - xkb->display_textsize = DISPLAY_TEXTSIZE_LARGE; - xkb->group_policy = GROUP_POLICY_PER_APPLICATION; + xkb->display_type = DISPLAY_TYPE_IMAGE; + xkb->display_text_scale = DISPLAY_TEXTSCALE_LARGE; + xkb->display_img_scale = DISPLAY_IMGSCALE_LARGE; + xkb->group_policy = GROUP_POLICY_PER_APPLICATION; } static gboolean diff --git a/panel-plugin/xfce4-xkb-plugin.h b/panel-plugin/xfce4-xkb-plugin.h index 68f6c8a..372a27a 100644 --- a/panel-plugin/xfce4-xkb-plugin.h +++ b/panel-plugin/xfce4-xkb-plugin.h @@ -60,7 +60,8 @@ typedef struct gint button_vsize; /* read allocated button size - see below */ t_display_type display_type; /* display layout as image ot text */ - t_display_textsize display_textsize; /* text size for text layout */ + guint display_text_scale; /* text scale % for text layout */ + guint display_img_scale; /* image scale % for flag layout */ t_group_policy group_policy; /* per-app/window/global policy */ gint button_state; /* gtk state of the button */ diff --git a/panel-plugin/xkb-cairo.c b/panel-plugin/xkb-cairo.c index 27ad119..27454f3 100644 --- a/panel-plugin/xkb-cairo.c +++ b/panel-plugin/xkb-cairo.c @@ -34,8 +34,7 @@ #define XKB_PREFERRED_FONT "Courier New, Courier 10 Pitch, Monospace Bold" #define xkb_cairo_arc_for_flag(cr, x, y, r, a1, a2) \ - xx = layoutx + width - 12 + x; \ - yy = layouty + height - 12 + y; \ + xx = x; yy = y; \ cairo_device_to_user (cr, &xx, &yy); \ cairo_arc (cr, xx, yy, r, a1, a2); @@ -59,7 +58,9 @@ xkb_cairo_draw_flag (cairo_t *cr, gint width, gint height, gint variant_markers_count, - gint textsize, + guint max_variant_markers_count, + guint img_scale, + guint text_scale, GdkColor fgcolor) { gchar *filename; @@ -68,7 +69,9 @@ xkb_cairo_draw_flag (cairo_t *cr, double scalex, scaley; double xx, yy; gint i; - double layoutx, layouty; + double layoutx, layouty, img_width, img_height; + double radius, diameter; + guint spacing; g_assert (cr != NULL); @@ -86,7 +89,7 @@ xkb_cairo_draw_flag (cairo_t *cr, actual_width, actual_height, width, height, variant_markers_count, - textsize, + text_scale, fgcolor); return; } @@ -96,8 +99,17 @@ xkb_cairo_draw_flag (cairo_t *cr, scalex = (double) (width - 4) / dim.width; scaley = (double) (height - 4) / dim.height; - layoutx = (actual_width - width) / 2 + 2; - layouty = (actual_height - height) / 2 + 2; + scalex *= img_scale / 100.0; + scaley *= img_scale / 100.0; + + img_width = dim.width * scalex; + img_height = dim.height * scaley; + + DBG ("scale x/y: %.3f/%.3f, dim w/h: %d/%d, scaled w/h: %.1f/%.1f", + scalex, scaley, dim.width, dim.height, scalex*dim.width, scaley*dim.height); + + layoutx = (actual_width - img_width) / 2; + layouty = (actual_height - img_height) / 2; cairo_translate (cr, layoutx, layouty); cairo_save (cr); @@ -107,15 +119,59 @@ xkb_cairo_draw_flag (cairo_t *cr, cairo_restore (cr); + DBG ("actual width/height: %d/%d; w/h: %d/%d; img w/h: %.1f/%.1f; markers: %d, max markers: %d", + actual_width, actual_height, width, height, img_width, img_height, + variant_markers_count, max_variant_markers_count); + DBG ("layout x/y: %.1f/%.1f", layoutx, layouty); + + if (variant_markers_count > 0) + { + diameter = 5.0; + spacing = 1; + + /* check if the flag is too small to draw variant markers inside it */ + if ((diameter + spacing) * (max_variant_markers_count-1) > img_width - 2) + { + /* draw markers below the flag */ + diameter = 4; + spacing = 0; + layoutx = actual_width / 2 + (max_variant_markers_count - 2) * diameter / 2; + layouty = (actual_height + img_height) / 2 + diameter + 1; + DBG ("small flag"); + } + else + { + /* draw markers inside the flag */ + spacing = 1; + layoutx += img_width - diameter / 2 - 1; + layouty += img_height - diameter / 2 - 1; + DBG ("large flag"); + } + + radius = diameter / 2.0; + + if (layouty > actual_height - radius) + layouty = actual_height - radius; + if (layoutx > actual_width - radius) + layoutx = actual_width - radius; + } + /* draw variant_markers_count circles */ for (i = 0; i < variant_markers_count; i++) { + gint x, y; + cairo_set_source_rgb (cr, 0, 0, 0); cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_width (cr, 1); - xkb_cairo_arc_for_flag (cr, -(7 * i) + 4, 4, 2.5, 0, 2 * G_PI); + x = layoutx - (diameter + spacing) * i + 0.5; + y = layouty; + + DBG ("variant center x/y: %d/%d, diameter: %.1f, spacing: %d", + x, y, diameter, spacing); + xkb_cairo_arc_for_flag (cr, x, y, radius, 0, 2 * G_PI); cairo_set_source_rgb (cr, 0, 0, 0); cairo_fill_preserve (cr); @@ -136,7 +192,7 @@ xkb_cairo_draw_label (cairo_t *cr, const gint width, const gint height, const gint variant_markers_count, - const gint textsize, + const guint text_scale, const GdkColor fgcolor) { gchar *normalized_group_name; @@ -176,18 +232,7 @@ xkb_cairo_draw_label (cairo_t *cr, pango_layout_get_pixel_size (layout, &pango_width, &pango_height); DBG ("pango_width/height: %d/%d", pango_width, pango_height); - switch (textsize){ - case DISPLAY_TEXTSIZE_SMALL: - default: /* catch misconfiguration */ - scalex = scaley = 0.475; - break; - case DISPLAY_TEXTSIZE_MEDIUM: - scalex = scaley = 0.7; - break; - case DISPLAY_TEXTSIZE_LARGE: - scalex = scaley = 1; - break; - } + scalex = scaley = text_scale / 100.0; DBG ("txt size scale x/y: %.2f/%.2f", scalex, scaley); @@ -201,7 +246,7 @@ xkb_cairo_draw_label (cairo_t *cr, { text_width = actual_width - 3 - (variant_markers_count) * diameter; } - else if (textsize == DISPLAY_TEXTSIZE_LARGE) + else if (text_scale >= 99.5) { text_width -= 3; } diff --git a/panel-plugin/xkb-cairo.h b/panel-plugin/xkb-cairo.h index 4be2b24..fbac467 100644 --- a/panel-plugin/xkb-cairo.h +++ b/panel-plugin/xkb-cairo.h @@ -41,7 +41,9 @@ void xkb_cairo_draw_flag (cairo_t *cr, gint width, gint height, gint variant_markers_count, - gint textsize, + guint max_variant_markers_count, + guint img_scale, + guint text_scale, GdkColor fgcolor); void xkb_cairo_draw_label (cairo_t *cr, @@ -52,7 +54,7 @@ void xkb_cairo_draw_label (cairo_t *cr, const gint width, const gint height, const gint variant_markers_count, - const gint textsize, + const guint text_scale, const GdkColor fgcolor); #endif diff --git a/panel-plugin/xkb-callbacks.c b/panel-plugin/xkb-callbacks.c index 179276d..3453c62 100644 --- a/panel-plugin/xkb-callbacks.c +++ b/panel-plugin/xkb-callbacks.c @@ -137,7 +137,9 @@ xkb_plugin_layout_image_exposed (GtkWidget *widget, actual_hsize, actual_vsize, xkb->hsize, vsize, xkb_config_variant_index_for_group (-1), - xkb->display_textsize, + xkb_config_get_max_group_count (), + xkb->display_img_scale, + xkb->display_text_scale, fgcolor ); } @@ -148,7 +150,7 @@ xkb_plugin_layout_image_exposed (GtkWidget *widget, actual_hsize, actual_vsize, xkb->hsize, vsize, xkb_config_variant_index_for_group (-1), - xkb->display_textsize, + xkb->display_text_scale, fgcolor ); } diff --git a/panel-plugin/xkb-config.c b/panel-plugin/xkb-config.c index 70fc426..b7234d2 100644 --- a/panel-plugin/xkb-config.c +++ b/panel-plugin/xkb-config.c @@ -456,7 +456,6 @@ xkb_config_window_closed (guint window_id) } } - gint xkb_config_get_group_count (void) { @@ -465,6 +464,11 @@ xkb_config_get_group_count (void) return config->group_count; } +guint xkb_config_get_max_group_count (void) +{ + return xkl_engine_get_max_num_groups(config->engine); +} + const gchar* xkb_config_get_group_name (gint group) { diff --git a/panel-plugin/xkb-config.h b/panel-plugin/xkb-config.h index 69888d3..072adca 100644 --- a/panel-plugin/xkb-config.h +++ b/panel-plugin/xkb-config.h @@ -52,6 +52,7 @@ gboolean xkb_config_initialize (t_group_policy group_ void xkb_config_finalize (void); void xkb_config_set_group_policy (t_group_policy group_policy); gint xkb_config_get_group_count (void); +guint xkb_config_get_max_group_count (void); const gchar* xkb_config_get_group_name (gint group); const gchar* xkb_config_get_variant (gint group); gboolean xkb_config_set_group (gint group); diff --git a/panel-plugin/xkb-settings-dialog.c b/panel-plugin/xkb-settings-dialog.c index d155bdb..2431773 100644 --- a/panel-plugin/xkb-settings-dialog.c +++ b/panel-plugin/xkb-settings-dialog.c @@ -86,9 +86,16 @@ on_display_type_changed (GtkComboBox *cb, t_xkb *xkb) } static void -on_display_textsize_changed (GtkComboBox *cb, t_xkb *xkb) +on_display_textsize_changed (GtkHScale *scale, t_xkb *xkb) { - xkb->display_textsize = gtk_combo_box_get_active (cb); + xkb->display_text_scale = gtk_range_get_value (GTK_RANGE (scale)); + xkb_refresh_gui (xkb); +} + +static void +on_display_imgsize_changed (GtkHScale *scale, t_xkb *xkb) +{ + xkb->display_img_scale = gtk_range_get_value (GTK_RANGE (scale)); xkb_refresh_gui (xkb); } @@ -105,7 +112,8 @@ xfce_xkb_configure (XfcePanelPlugin *plugin, { GtkWidget *display_type_optmenu, *group_policy_combo; GtkWidget *vbox, *display_type_frame, *group_policy_frame, *bin; - GtkWidget *display_textsize_frame, *display_textsize_optmenu; + GtkWidget *display_textsize_frame, *display_textsize_scale; + GtkWidget *display_imgsize_frame, *display_imgsize_scale; xfce_panel_plugin_block_menu (plugin); @@ -134,12 +142,22 @@ xfce_xkb_configure (XfcePanelPlugin *plugin, gtk_widget_show (display_textsize_frame); gtk_box_pack_start (GTK_BOX (vbox), display_textsize_frame, TRUE, TRUE, 2); - display_textsize_optmenu = gtk_combo_box_new_text (); - gtk_combo_box_append_text (GTK_COMBO_BOX (display_textsize_optmenu), _("small")); - gtk_combo_box_append_text (GTK_COMBO_BOX (display_textsize_optmenu), _("medium")); - gtk_combo_box_append_text (GTK_COMBO_BOX (display_textsize_optmenu), _("large")); - gtk_widget_set_size_request (display_textsize_optmenu, 230, -1); - gtk_container_add (GTK_CONTAINER (bin), display_textsize_optmenu); + display_textsize_scale = gtk_hscale_new_with_range (0, 100, 1); + gtk_range_set_update_policy (GTK_RANGE (display_textsize_scale), GTK_UPDATE_CONTINUOUS); + gtk_scale_set_value_pos (GTK_SCALE (display_textsize_scale), GTK_POS_RIGHT); + gtk_widget_set_size_request (display_textsize_scale, 230, -1); + gtk_container_add (GTK_CONTAINER (bin), display_textsize_scale); + + /* image size option */ + display_imgsize_frame = xfce_gtk_frame_box_new (_("Image size:"), &bin); + gtk_widget_show (display_imgsize_frame); + gtk_box_pack_start (GTK_BOX (vbox), display_imgsize_frame, TRUE, TRUE, 2); + + display_imgsize_scale = gtk_hscale_new_with_range (0, 100, 1); + gtk_range_set_update_policy (GTK_RANGE (display_imgsize_scale), GTK_UPDATE_CONTINUOUS); + gtk_scale_set_value_pos (GTK_SCALE (display_imgsize_scale), GTK_POS_RIGHT); + gtk_widget_set_size_request (display_imgsize_scale, 230, -1); + gtk_container_add (GTK_CONTAINER (bin), display_imgsize_scale); group_policy_frame = xfce_gtk_frame_box_new (_("Manage layout:"), &bin); gtk_widget_show (group_policy_frame); @@ -159,12 +177,14 @@ xfce_xkb_configure (XfcePanelPlugin *plugin, G_CALLBACK (on_settings_close), xkb); gtk_combo_box_set_active (GTK_COMBO_BOX (display_type_optmenu), xkb->display_type); - gtk_combo_box_set_active (GTK_COMBO_BOX (display_textsize_optmenu), xkb->display_textsize); + gtk_range_set_value (GTK_RANGE (display_textsize_scale), xkb->display_text_scale); + gtk_range_set_value (GTK_RANGE (display_imgsize_scale), xkb->display_img_scale); gtk_combo_box_set_active (GTK_COMBO_BOX (group_policy_combo), xkb->group_policy); g_signal_connect (display_type_optmenu, "changed", G_CALLBACK (on_display_type_changed), xkb); g_signal_connect (group_policy_combo, "changed", G_CALLBACK (on_group_policy_changed), xkb); - g_signal_connect (display_textsize_optmenu, "changed", G_CALLBACK (on_display_textsize_changed), xkb); + g_signal_connect (display_textsize_scale, "value_changed", G_CALLBACK (on_display_textsize_changed), xkb); + g_signal_connect (display_imgsize_scale, "value_changed", G_CALLBACK (on_display_imgsize_changed), xkb); gtk_widget_show (settings_dialog); } -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
