Add option to align icons left or right

This commit is contained in:
Gjum 2014-02-26 22:42:05 +01:00
parent d9e68803dc
commit 01327a6bc4
5 changed files with 30 additions and 10 deletions

View File

@ -16,6 +16,7 @@
#define ColBG 0 #define ColBG 0
enum alignment { left, center, right }; enum alignment { left, center, right };
enum icon_position_t { icons_left, icons_right, icons_off };
enum separator_color { FOREGROUND, AUTO, FRAME, CUSTOM }; enum separator_color { FOREGROUND, AUTO, FRAME, CUSTOM };
enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD }; enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD };

View File

@ -138,8 +138,8 @@
# Browser for opening urls in context menu. # Browser for opening urls in context menu.
browser = /usr/bin/firefox -new-tab browser = /usr/bin/firefox -new-tab
# Show icons in notifications. # Align icons left/right/off
show_icons = no icon_position = off
# Path to default icons. # Path to default icons.
icon_path = /usr/share/icons/gnome/32x32/status/ icon_path = /usr/share/icons/gnome/32x32/status/

View File

@ -192,10 +192,23 @@ void load_settings(char *cmdline_config_path)
option_get_string("global", "browser", "-browser", browser, option_get_string("global", "browser", "-browser", browser,
"path to browser"); "path to browser");
settings.show_icons = {
option_get_bool("global", "show_icons", char *c = option_get_string("global", "icon_position",
"-show_icons", false, "-icon_position", "off",
"show icons in notifications"); "Align icons left/right/off");
if (strlen(c) > 0) {
if (strcmp(c, "left") == 0)
settings.icon_position = icons_left;
else if (strcmp(c, "right") == 0)
settings.icon_position = icons_right;
else if (strcmp(c, "off") == 0)
settings.icon_position = icons_off;
else
fprintf(stderr,
"Warning: unknown icon position: %s\n", c);
free(c);
}
}
settings.icon_path = settings.icon_path =
option_get_string("global", "icon_path", "-icon_path", icon_path, option_get_string("global", "icon_path", "-icon_path", icon_path,

View File

@ -42,7 +42,7 @@ typedef struct _settings {
char *dmenu; char *dmenu;
char **dmenu_cmd; char **dmenu_cmd;
char *browser; char *browser;
bool show_icons; enum icon_position_t icon_position;
char *icon_path; char *icon_path;
enum follow_mode f_mode; enum follow_mode f_mode;
keyboard_shortcut close_ks; keyboard_shortcut close_ks;

12
x.c
View File

@ -268,7 +268,7 @@ static colored_layout *r_init_shared(cairo_t *c, notification *n)
} }
cl->icon = NULL; cl->icon = NULL;
if (strlen(n->icon) > 0 && settings.show_icons) if (strlen(n->icon) > 0 && settings.icon_position != icons_off)
cl->icon = cairo_image_surface_create_from_png(n->icon); cl->icon = cairo_image_surface_create_from_png(n->icon);
cl->fg = x_string_to_color_t(n->color_strings[ColFG]); cl->fg = x_string_to_color_t(n->color_strings[ColFG]);
@ -396,7 +396,9 @@ static dimension_t x_render_layout(cairo_t *c, colored_layout *cl, dimension_t d
cairo_fill(c); cairo_fill(c);
dim.y += settings.padding; dim.y += settings.padding;
cairo_move_to(c, settings.h_padding, dim.y); if (cl->icon && settings.icon_position == icons_left)
cairo_move_to(c, cairo_image_surface_get_width(cl->icon) + 2 * settings.h_padding, dim.y);
else cairo_move_to(c, settings.h_padding, dim.y);
cairo_set_source_rgb(c, cl->fg.r, cl->fg.g, cl->fg.b); cairo_set_source_rgb(c, cl->fg.r, cl->fg.g, cl->fg.b);
pango_cairo_update_layout(c, cl->l); pango_cairo_update_layout(c, cl->l);
pango_cairo_show_layout(c, cl->l); pango_cairo_show_layout(c, cl->l);
@ -417,8 +419,12 @@ static dimension_t x_render_layout(cairo_t *c, colored_layout *cl, dimension_t d
if (cl->icon) { if (cl->icon) {
unsigned int image_width = cairo_image_surface_get_width(cl->icon), unsigned int image_width = cairo_image_surface_get_width(cl->icon),
image_height = cairo_image_surface_get_height(cl->icon), image_height = cairo_image_surface_get_height(cl->icon),
image_x = bg_width - settings.h_padding - image_width, image_x,
image_y = bg_y + settings.padding; image_y = bg_y + settings.padding;
if (settings.icon_position == icons_left) image_x = settings.h_padding;
else image_x = bg_width - settings.h_padding - image_width;
cairo_set_source_surface (c, cl->icon, image_x, image_y); cairo_set_source_surface (c, cl->icon, image_x, image_y);
cairo_rectangle (c, image_x, image_y, image_width, image_height); cairo_rectangle (c, image_x, image_y, image_width, image_height);
cairo_fill (c); cairo_fill (c);