初始化配色方案
This commit is contained in:
46
src/main.c
46
src/main.c
@@ -21,6 +21,8 @@ static gboolean update_wallpaper(gpointer user_data);
|
||||
static void set_wallpaper_by_index(uint32_t index);
|
||||
static wallpaper_config_t *parse_wallpaper_config(void);
|
||||
static void free_wallpaper_config(wallpaper_config_t *wallpaper_config);
|
||||
static void init_color_set(void);
|
||||
static void parse_color(const char *hex, color_t *color);
|
||||
static void init_xcb_event_loop(void);
|
||||
static gboolean handle_xcb_event(GIOChannel *channel, GIOCondition condition,
|
||||
gpointer userdata);
|
||||
@@ -28,6 +30,7 @@ static void cleanup(void);
|
||||
|
||||
static monitor_t *monitors = NULL;
|
||||
static wallpaper_config_t *wallpaper_config = NULL;
|
||||
static color_set_t *color_set = NULL;
|
||||
static GMainLoop *loop = NULL;
|
||||
|
||||
/* 调试函数,开发完成后删除 */
|
||||
@@ -45,6 +48,21 @@ static void print_monitor_list_info(monitor_t *monitor_list) {
|
||||
}
|
||||
printf("======================= monitor info end =======================\n");
|
||||
}
|
||||
static void print_color(const char *prompt, const color_t *color) {
|
||||
const char *p = strlen(prompt) ? " " : "";
|
||||
printf("%s%srgba: #%08x, argb: #%08x\n", prompt, p, color->rgba, color->argb);
|
||||
}
|
||||
static void print_color_set(color_set_t *set) {
|
||||
print_color("== bar bg:", &set->bar_bg);
|
||||
print_color("== tag color:", &set->tag_color);
|
||||
print_color("== active tag color:", &set->active_tag_color);
|
||||
print_color("== layout bg:", &set->layout_color);
|
||||
print_color("== client name color:", &set->client_name_color);
|
||||
print_color("== active client name color:", &set->active_client_name_color);
|
||||
print_color("== status color:", &set->status_color);
|
||||
print_color("== border color:", &set->border_color);
|
||||
print_color("== active border color:", &set->active_border_color);
|
||||
}
|
||||
static void print_wallpaper_config(wallpaper_config_t *config) {
|
||||
if (!config) {
|
||||
printf("no wallpaper\n");
|
||||
@@ -205,6 +223,29 @@ void free_wallpaper_config(wallpaper_config_t *wallpaper_config) {
|
||||
free(wallpaper_config);
|
||||
}
|
||||
|
||||
void init_color_set(void) {
|
||||
color_set = ecalloc(1, sizeof(color_set_t));
|
||||
|
||||
parse_color(bar_bg, &color_set->bar_bg);
|
||||
parse_color(tag_color, &color_set->tag_color);
|
||||
parse_color(active_tag_color, &color_set->active_tag_color);
|
||||
parse_color(layout_color, &color_set->layout_color);
|
||||
parse_color(client_name_color, &color_set->client_name_color);
|
||||
parse_color(active_client_name_color, &color_set->active_client_name_color);
|
||||
parse_color(status_color, &color_set->status_color);
|
||||
parse_color(border_color, &color_set->border_color);
|
||||
parse_color(active_border_color, &color_set->active_border_color);
|
||||
}
|
||||
|
||||
void parse_color(const char *hex, color_t *color) {
|
||||
bool success = hex_color_to_rgba(hex, &color->rgba);
|
||||
if (!success) die("invalid hex color: %s", hex);
|
||||
|
||||
color->argb = rgba_to_argb(color->rgba);
|
||||
extract_color_channel(color->rgba, &color->red, &color->green, &color->blue,
|
||||
&color->alpha);
|
||||
}
|
||||
|
||||
void init_xcb_event_loop(void) {
|
||||
GIOChannel *channel = g_io_channel_unix_new(get_xcb_connection_fd());
|
||||
g_io_channel_set_encoding(channel, NULL, NULL);
|
||||
@@ -230,6 +271,9 @@ void cleanup(void) {
|
||||
free_wallpaper_config(wallpaper_config);
|
||||
wallpaper_config = NULL;
|
||||
|
||||
free(color_set);
|
||||
color_set = NULL;
|
||||
|
||||
monitor_t *m = monitors;
|
||||
client_t *c = m->clients;
|
||||
while (m) {
|
||||
@@ -252,11 +296,13 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
init_monitors();
|
||||
init_color_set();
|
||||
init_wallpaper();
|
||||
|
||||
window_list_t *window_list = scan_window_list();
|
||||
|
||||
print_monitor_list_info(monitors);
|
||||
print_color_set(color_set);
|
||||
print_wallpaper_config(wallpaper_config);
|
||||
print_window_list(window_list);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user