# HG changeset patch # User Enmk # Date 1367682293 -10800 # Node ID 0f94fad335717191effb7f93eab8fb3e5c28688b # Parent 135a61863b0a80988415e6b72578c285f58a1571 Added support for deskbar mode diff -r 135a61863b0a -r 0f94fad33571 panel-plugin/xfce4-xkb-plugin.c --- a/panel-plugin/xfce4-xkb-plugin.c Sat May 04 18:41:11 2013 +0300 +++ b/panel-plugin/xfce4-xkb-plugin.c Sat May 04 18:44:53 2013 +0300 @@ -51,6 +51,14 @@ GtkOrientation orientation, t_xkb *xkb); +static void xfce_xkb_nrows_changed (XfcePanelPlugin *plugin, + guint rows, + t_xkb *xkb); + +static void xfce_xkb_mode_changed (XfcePanelPlugin *plugin, + XfcePanelPluginMode mode, + t_xkb *xkb); + static gboolean xfce_xkb_set_size (XfcePanelPlugin *plugin, gint size, t_xkb *xkb); @@ -67,7 +75,7 @@ static void xkb_free (t_xkb *xkb); static gboolean xkb_calculate_sizes (t_xkb *xkb, - GtkOrientation orientation, + XfcePanelPluginMode orientation, gint panel_size); static gboolean xkb_load_config (t_xkb *xkb, @@ -93,6 +101,12 @@ g_signal_connect (plugin, "orientation-changed", G_CALLBACK (xfce_xkb_orientation_changed), xkb); + g_signal_connect (plugin, "nrows-changed", + G_CALLBACK (xfce_xkb_nrows_changed), xkb); + + g_signal_connect (plugin, "mode-changed", + G_CALLBACK (xfce_xkb_mode_changed), xkb); + g_signal_connect (plugin, "size-changed", G_CALLBACK (xfce_xkb_set_size), xkb); @@ -117,14 +131,30 @@ GtkOrientation orientation, t_xkb *xkb) { - xkb_calculate_sizes (xkb, orientation, xfce_panel_plugin_get_size (plugin)); + xkb_calculate_sizes (xkb, xfce_panel_plugin_get_mode (plugin), xfce_panel_plugin_get_size(plugin)); +} + +static void +xfce_xkb_nrows_changed (XfcePanelPlugin *plugin, + guint rows, + t_xkb *xkb) +{ + xkb_calculate_sizes (xkb, xfce_panel_plugin_get_mode (plugin), xfce_panel_plugin_get_size(plugin)); +} + +static void +xfce_xkb_mode_changed (XfcePanelPlugin *plugin, + XfcePanelPluginMode mode, + t_xkb *xkb) +{ + xkb_calculate_sizes (xkb, mode, xfce_panel_plugin_get_size(plugin)); } static gboolean xfce_xkb_set_size (XfcePanelPlugin *plugin, gint size, t_xkb *xkb) { - return xkb_calculate_sizes (xkb, xfce_panel_plugin_get_orientation (plugin), size); + return xkb_calculate_sizes (xkb, xfce_panel_plugin_get_mode (plugin), size); } static void @@ -333,22 +363,32 @@ } static gboolean -xkb_calculate_sizes (t_xkb *xkb, GtkOrientation orientation, gint panel_size) +xkb_calculate_sizes (t_xkb *xkb, XfcePanelPluginMode orientation, gint panel_size) { - +// XfcePanelPluginMode mode = xfce_panel_plugin_get_mode(xkb->plugin); switch (orientation) { - case GTK_ORIENTATION_HORIZONTAL: + case XFCE_PANEL_PLUGIN_MODE_HORIZONTAL: xkb->vsize = panel_size; xkb->hsize = (int) (1.33 * panel_size); gtk_widget_set_size_request (xkb->btn, xkb->hsize, xkb->vsize); break; - case GTK_ORIENTATION_VERTICAL: + case XFCE_PANEL_PLUGIN_MODE_VERTICAL: xkb->hsize = panel_size; xkb->vsize = (int) (0.75 * panel_size); if (xkb->vsize < 10) xkb->vsize = 10; gtk_widget_set_size_request (xkb->btn, xkb->hsize, xkb->vsize); break; + case XFCE_PANEL_PLUGIN_MODE_DESKBAR: + { + xkb->hsize = panel_size; + guint rows = xfce_panel_plugin_get_nrows(xkb->plugin); + xkb->vsize = rows == 0 ? ( (int) (0.75 * panel_size) ) + : ( (int) (panel_size/(rows)) ); + if (xkb->vsize < 10) xkb->vsize = 10; + gtk_widget_set_size_request (xkb->btn, xkb->hsize, xkb->vsize); + break; + } default: break; } # HG changeset patch # User Enmk # Date 1367682311 -10800 # Node ID 91996dd2a8d6e7f21fe2fcfadf3dad22b56954fd # Parent 0f94fad335717191effb7f93eab8fb3e5c28688b Text is now entirely inside the button diff -r 0f94fad33571 -r 91996dd2a8d6 panel-plugin/xkb-cairo.c --- a/panel-plugin/xkb-cairo.c Sat May 04 18:44:53 2013 +0300 +++ b/panel-plugin/xkb-cairo.c Sat May 04 18:45:11 2013 +0300 @@ -161,16 +161,17 @@ } pango_layout_set_text (layout, normalized_group_name, -1); + gint font_size = width < height ? width : height; switch (textsize){ case DISPLAY_TEXTSIZE_SMALL: default: /* catch misconfiguration */ - g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.375 * panel_size) ); + g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.375 * font_size) ); break; case DISPLAY_TEXTSIZE_MEDIUM: - g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.600 * panel_size) ); + g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.600 * font_size) ); break; case DISPLAY_TEXTSIZE_LARGE: - g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.900 * panel_size) ); + g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.900 * font_size) ); break; } # HG changeset patch # User Enmk # Date 1367687681 -10800 # Node ID cb06ccbb63ef09116617c312669e23dd7e64d5a6 # Parent 91996dd2a8d6e7f21fe2fcfadf3dad22b56954fd Flag is not streched in deskbar mode diff -r 91996dd2a8d6 -r cb06ccbb63ef panel-plugin/xkb-cairo.c --- a/panel-plugin/xkb-cairo.c Sat May 04 18:45:11 2013 +0300 +++ b/panel-plugin/xkb-cairo.c Sat May 04 20:14:41 2013 +0300 @@ -90,18 +90,19 @@ scalex = (double) (width - 4) / dim.width; scaley = (double) (height - 4) / dim.height; + double scale = scalex < scaley ? scalex : scaley;//min of scales if (handle) { - layoutx = (actual_width - width) / 2 + 2; - layouty = (actual_height - height) / 2 + 2; + layoutx = (actual_width - dim.width*scale) / 2; + layouty = (actual_height - dim.height*scale) / 2; cairo_translate (cr, layoutx, layouty); //cairo_translate (cr, 2, 2); cairo_save (cr); - cairo_scale (cr, scalex, scaley); + cairo_scale (cr, scale, scale); rsvg_handle_render_cairo (handle, cr); cairo_restore (cr);