Define colors and fonts with the set function

With this changes it is possible to set the colors
with the :set function.
This commit is contained in:
Moritz Lipp 2010-06-14 21:06:26 +02:00
parent f9f5e1b667
commit 0a20bb6218
2 changed files with 114 additions and 66 deletions

View file

@ -20,28 +20,28 @@ static const char BM_PAGE_ENTRY[] = "page";
static const char BM_PAGE_OFFSET[] = "offset";
/* look */
static const char font[] = "monospace normal 9";
static const char default_bgcolor[] = "#000000";
static const char default_fgcolor[] = "#DDDDDD";
static const char inputbar_bgcolor[] = "#141414";
static const char inputbar_fgcolor[] = "#9FBC00";
static const char statusbar_bgcolor[] = "#000000";
static const char statusbar_fgcolor[] = "#FFFFFF";
static const char completion_fgcolor[] = "#DDDDDD";
static const char completion_bgcolor[] = "#232323";
static const char completion_g_fgcolor[] = "#DEDEDE";
static const char completion_g_bgcolor[] = "#FF00FF";
static const char completion_hl_fgcolor[] = "#232323";
static const char completion_hl_bgcolor[] = "#9FBC00";
static const char notification_e_bgcolor[] = "#FF1212";
static const char notification_e_fgcolor[] = "#FFFFFF";
static const char notification_w_bgcolor[] = "#FFF712";
static const char notification_w_fgcolor[] = "#000000";
static const char recolor_darkcolor[] = "#353535";
static const char recolor_lightcolor[] = "#DBDBDB";
char* font = "monospace normal 9";
char* default_bgcolor = "#000000";
char* default_fgcolor = "#DDDDDD";
char* inputbar_bgcolor = "#141414";
char* inputbar_fgcolor = "#9FBC00";
char* statusbar_bgcolor = "#000000";
char* statusbar_fgcolor = "#FFFFFF";
char* completion_fgcolor = "#DDDDDD";
char* completion_bgcolor = "#232323";
char* completion_g_fgcolor = "#DEDEDE";
char* completion_g_bgcolor = "#FF00FF";
char* completion_hl_fgcolor = "#232323";
char* completion_hl_bgcolor = "#9FBC00";
char* notification_e_bgcolor = "#FF1212";
char* notification_e_fgcolor = "#FFFFFF";
char* notification_w_bgcolor = "#FFF712";
char* notification_w_fgcolor = "#000000";
char* recolor_darkcolor = "#353535";
char* recolor_lightcolor = "#DBDBDB";
static const char search_highlight[] = "#9FBC00";
static const char select_text[] = "#000000";
char* search_highlight = "#9FBC00";
char* select_text = "#000000";
/* statusbar */
static const char DEFAULT_TEXT[] = "[No Name]";
@ -183,7 +183,28 @@ SpecialCommand special_commands[] = {
/* settings */
Setting settings[] = {
/* name, variable, type, render, description */
{"recolor", &(Zathura.Global.recolor), 'b', TRUE, "Invert the image"},
{"offset", &(Zathura.PDF.page_offset), 'i', FALSE, "Optional page offset"},
/* name, variable, type, render, re-init, description */
{"recolor", &(Zathura.Global.recolor), 'b', TRUE, FALSE, "Invert the image" },
{"offset", &(Zathura.PDF.page_offset), 'i', FALSE, FALSE, "Optional page offset" },
{"font", &(font), 's', FALSE, TRUE, "The used font" },
{"default_bgcolor", &(default_bgcolor), 's', FALSE, TRUE, "Default background color"},
{"default_fgcolor", &(default_fgcolor), 's', FALSE, TRUE, "Default foreground color"},
{"inputbar_bgcolor", &(inputbar_bgcolor), 's', FALSE, TRUE, "Inputbar background color"},
{"inputbar_fgcolor", &(inputbar_fgcolor), 's', FALSE, TRUE, "Inputbar foreground color"},
{"statusbar_bgcolor", &(statusbar_bgcolor), 's', FALSE, TRUE, "Statusbar background color"},
{"statusbar_fgcolor", &(statusbar_fgcolor), 's', FALSE, TRUE, "Statusbar foreground color"},
{"completion_bgcolor", &(completion_bgcolor), 's', FALSE, TRUE, "Completion background color"},
{"completion_fgcolor", &(completion_fgcolor), 's', FALSE, TRUE, "Completion foreground color"},
{"completion_g_bgcolor", &(completion_g_bgcolor), 's', FALSE, TRUE, "Completion (group) background color"},
{"completion_g_fgcolor", &(completion_g_fgcolor), 's', FALSE, TRUE, "Completion (group) foreground color"},
{"completion_hl_bgcolor", &(completion_hl_bgcolor), 's', FALSE, TRUE, "Completion (highlight) background color"},
{"completion_hl_fgcolor", &(completion_hl_fgcolor), 's', FALSE, TRUE, "Completion (highlight) foreground color"},
{"notification_e_bgcolor", &(notification_e_bgcolor), 's', FALSE, TRUE, "Notification (error) background color"},
{"notification_e_fgcolor", &(notification_e_fgcolor), 's', FALSE, TRUE, "Notification (error) foreground color"},
{"notification_w_bgcolor", &(notification_w_bgcolor), 's', FALSE, TRUE, "Notification (warning) background color"},
{"notification_w_fgcolor", &(notification_w_fgcolor), 's', FALSE, TRUE, "Notification (warning) foreground color"},
{"recolor_darkcolor", &(recolor_darkcolor), 's', FALSE, TRUE, "Recoloring (dark color)"},
{"recolor_lightcolor", &(recolor_lightcolor), 's', FALSE, TRUE, "Recoloring (light color)"},
{"search_highlight", &(search_highlight), 's', FALSE, TRUE, "Highlighted results"},
{"select_text", &(select_text), 's', FALSE, TRUE, "Rectangle of the selected text"},
};

111
zathura.c
View file

@ -130,6 +130,7 @@ typedef struct
void* variable;
char type;
gboolean render;
gboolean reinit;
char* description;
} Setting;
@ -284,6 +285,7 @@ struct
} Zathura;
/* function declarations */
void init_colors();
void init_directories();
void init_zathura();
void add_marker(int);
@ -386,6 +388,54 @@ gboolean cb_watch_file(GFileMonitor*, GFile*, GFile*, GFileMonitorEvent, gpointe
#include "config.h"
/* function implementation */
void
init_colors()
{
/* parse */
gdk_color_parse(default_fgcolor, &(Zathura.Style.default_fg));
gdk_color_parse(default_bgcolor, &(Zathura.Style.default_bg));
gdk_color_parse(inputbar_fgcolor, &(Zathura.Style.inputbar_fg));
gdk_color_parse(inputbar_bgcolor, &(Zathura.Style.inputbar_bg));
gdk_color_parse(statusbar_fgcolor, &(Zathura.Style.statusbar_fg));
gdk_color_parse(statusbar_bgcolor, &(Zathura.Style.statusbar_bg));
gdk_color_parse(completion_fgcolor, &(Zathura.Style.completion_fg));
gdk_color_parse(completion_bgcolor, &(Zathura.Style.completion_bg));
gdk_color_parse(completion_g_fgcolor, &(Zathura.Style.completion_g_fg));
gdk_color_parse(completion_g_fgcolor, &(Zathura.Style.completion_g_fg));
gdk_color_parse(completion_hl_fgcolor, &(Zathura.Style.completion_hl_fg));
gdk_color_parse(completion_hl_bgcolor, &(Zathura.Style.completion_hl_bg));
gdk_color_parse(notification_e_fgcolor, &(Zathura.Style.notification_e_fg));
gdk_color_parse(notification_e_bgcolor, &(Zathura.Style.notification_e_bg));
gdk_color_parse(notification_w_fgcolor, &(Zathura.Style.notification_w_fg));
gdk_color_parse(notification_w_bgcolor, &(Zathura.Style.notification_w_bg));
gdk_color_parse(recolor_darkcolor, &(Zathura.Style.recolor_darkcolor));
gdk_color_parse(recolor_lightcolor, &(Zathura.Style.recolor_lightcolor));
gdk_color_parse(search_highlight, &(Zathura.Style.search_highlight));
gdk_color_parse(select_text, &(Zathura.Style.select_text));
Zathura.Style.font = pango_font_description_from_string(font);
/* drawing area */
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.drawing_area), GTK_STATE_NORMAL, &(Zathura.Style.default_bg));
/* statusbar */
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.statusbar), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_bg));
gtk_widget_modify_fg(GTK_WIDGET(Zathura.Global.status_text), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_fg));
gtk_widget_modify_fg(GTK_WIDGET(Zathura.Global.status_state), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_fg));
gtk_widget_modify_fg(GTK_WIDGET(Zathura.Global.status_buffer), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_fg));
gtk_widget_modify_font(GTK_WIDGET(Zathura.Global.status_text), Zathura.Style.font);
gtk_widget_modify_font(GTK_WIDGET(Zathura.Global.status_state), Zathura.Style.font);
gtk_widget_modify_font(GTK_WIDGET(Zathura.Global.status_buffer), Zathura.Style.font);
/* inputbar */
gtk_widget_modify_base(GTK_WIDGET(Zathura.UI.inputbar), GTK_STATE_NORMAL, &(Zathura.Style.inputbar_bg));
gtk_widget_modify_text(GTK_WIDGET(Zathura.UI.inputbar), GTK_STATE_NORMAL, &(Zathura.Style.inputbar_fg));
gtk_widget_modify_font(GTK_WIDGET(Zathura.UI.inputbar), Zathura.Style.font);
}
void
init_directories()
{
@ -427,29 +477,6 @@ init_zathura()
g_static_mutex_init(&(Zathura.Lock.select_lock));
g_static_mutex_init(&(Zathura.Lock.select_lock));
/* look */
gdk_color_parse(default_fgcolor, &(Zathura.Style.default_fg));
gdk_color_parse(default_bgcolor, &(Zathura.Style.default_bg));
gdk_color_parse(inputbar_fgcolor, &(Zathura.Style.inputbar_fg));
gdk_color_parse(inputbar_bgcolor, &(Zathura.Style.inputbar_bg));
gdk_color_parse(statusbar_fgcolor, &(Zathura.Style.statusbar_fg));
gdk_color_parse(statusbar_bgcolor, &(Zathura.Style.statusbar_bg));
gdk_color_parse(completion_fgcolor, &(Zathura.Style.completion_fg));
gdk_color_parse(completion_bgcolor, &(Zathura.Style.completion_bg));
gdk_color_parse(completion_g_fgcolor, &(Zathura.Style.completion_g_fg));
gdk_color_parse(completion_g_fgcolor, &(Zathura.Style.completion_g_fg));
gdk_color_parse(completion_hl_fgcolor, &(Zathura.Style.completion_hl_fg));
gdk_color_parse(completion_hl_bgcolor, &(Zathura.Style.completion_hl_bg));
gdk_color_parse(notification_e_fgcolor, &(Zathura.Style.notification_e_fg));
gdk_color_parse(notification_e_bgcolor, &(Zathura.Style.notification_e_bg));
gdk_color_parse(notification_w_fgcolor, &(Zathura.Style.notification_w_fg));
gdk_color_parse(notification_w_bgcolor, &(Zathura.Style.notification_w_bg));
gdk_color_parse(recolor_darkcolor, &(Zathura.Style.recolor_darkcolor));
gdk_color_parse(recolor_lightcolor, &(Zathura.Style.recolor_lightcolor));
gdk_color_parse(search_highlight, &(Zathura.Style.search_highlight));
gdk_color_parse(select_text, &(Zathura.Style.select_text));
Zathura.Style.font = pango_font_description_from_string(font);
/* other */
Zathura.Global.mode = NORMAL;
Zathura.Global.viewing_mode = NORMAL;
@ -523,25 +550,14 @@ init_zathura()
#endif
/* drawing area */
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.drawing_area), GTK_STATE_NORMAL, &(Zathura.Style.default_bg));
gtk_widget_show(Zathura.UI.drawing_area);
g_signal_connect(G_OBJECT(Zathura.UI.drawing_area), "expose-event", G_CALLBACK(cb_draw), NULL);
/* statusbar */
gtk_widget_modify_bg(GTK_WIDGET(Zathura.UI.statusbar), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_bg));
Zathura.Global.status_text = GTK_LABEL(gtk_label_new(NULL));
Zathura.Global.status_state = GTK_LABEL(gtk_label_new(NULL));
Zathura.Global.status_buffer = GTK_LABEL(gtk_label_new(NULL));
gtk_widget_modify_fg(GTK_WIDGET(Zathura.Global.status_text), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_fg));
gtk_widget_modify_fg(GTK_WIDGET(Zathura.Global.status_state), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_fg));
gtk_widget_modify_fg(GTK_WIDGET(Zathura.Global.status_buffer), GTK_STATE_NORMAL, &(Zathura.Style.statusbar_fg));
gtk_widget_modify_font(GTK_WIDGET(Zathura.Global.status_text), Zathura.Style.font);
gtk_widget_modify_font(GTK_WIDGET(Zathura.Global.status_state), Zathura.Style.font);
gtk_widget_modify_font(GTK_WIDGET(Zathura.Global.status_buffer), Zathura.Style.font);
gtk_misc_set_alignment(GTK_MISC(Zathura.Global.status_text), 0.0, 0.0);
gtk_misc_set_alignment(GTK_MISC(Zathura.Global.status_state), 1.0, 0.0);
gtk_misc_set_alignment(GTK_MISC(Zathura.Global.status_buffer), 1.0, 0.0);
@ -565,10 +581,6 @@ init_zathura()
gtk_entry_set_has_frame( Zathura.UI.inputbar, FALSE);
gtk_editable_set_editable( GTK_EDITABLE(Zathura.UI.inputbar), TRUE);
gtk_widget_modify_base(GTK_WIDGET(Zathura.UI.inputbar), GTK_STATE_NORMAL, &(Zathura.Style.inputbar_bg));
gtk_widget_modify_text(GTK_WIDGET(Zathura.UI.inputbar), GTK_STATE_NORMAL, &(Zathura.Style.inputbar_fg));
gtk_widget_modify_font(GTK_WIDGET(Zathura.UI.inputbar), Zathura.Style.font);
Zathura.Handler.inputbar_key_press_event =
g_signal_connect(G_OBJECT(Zathura.UI.inputbar), "key-press-event", G_CALLBACK(cb_inputbar_kb_pressed), NULL);
Zathura.Handler.inputbar_activate =
@ -2682,7 +2694,7 @@ cmd_rotate(int argc, char** argv)
gboolean
cmd_set(int argc, char** argv)
{
if(argc <= 0 || argc >= 3)
if(argc <= 0)
return FALSE;
int i;
@ -2715,12 +2727,22 @@ cmd_set(int argc, char** argv)
}
else if(settings[i].type == 's')
{
if(argc != 2)
if(argc < 2)
return FALSE;
/* assembly the arguments back to one string */
int i;
GString *s = g_string_new("");
for(i = 1; i < argc; i++)
{
if(i != 0)
s = g_string_append_c(s, ' ');
s = g_string_append(s, argv[i]);
}
char **x = (char**) settings[i].variable;
if(argv[1])
*x = argv[1];
*x = s->str;
}
else if(settings[i].type == 'c')
{
@ -2732,6 +2754,10 @@ cmd_set(int argc, char** argv)
*x = argv[1][0];
}
/* re-init */
if(settings[i].reinit)
init_colors();
/* render */
if(settings[i].render)
{
@ -3675,6 +3701,7 @@ int main(int argc, char* argv[])
gtk_init(&argc, &argv);
init_zathura();
init_colors();
init_directories();
if(argc >= 2)