203 lines
4.4 KiB
C
203 lines
4.4 KiB
C
#pragma once
|
||
|
||
#include <stdbool.h>
|
||
#include <stdint.h>
|
||
|
||
typedef struct monitor_t monitor_t;
|
||
typedef struct client_t client_t;
|
||
|
||
typedef struct layout_t {
|
||
const char *symbol;
|
||
void (*arrange)(monitor_t *monitor);
|
||
} layout_t;
|
||
|
||
/* 避免引入 xcb 头文件 */
|
||
typedef uint32_t xcb_window_t;
|
||
|
||
struct monitor_t {
|
||
uint32_t index;
|
||
int32_t monitor_x, monitor_y, window_x, window_y;
|
||
uint32_t monitor_width, monitor_height, window_width, window_height;
|
||
|
||
uint32_t selected_tags;
|
||
char **tags;
|
||
|
||
/* 为了避免引入 cairo 相关头文件,这里用 void *
|
||
* 指针代替实际的指针类型,使用时强转为相应指针类型使用即可 */
|
||
void *cr; /* cairo_t */
|
||
|
||
const layout_t *layout;
|
||
monitor_t *next;
|
||
|
||
client_t *clients;
|
||
client_t *clients_stack;
|
||
client_t *selected_client;
|
||
|
||
int32_t pointer_x; /* 记录光标 x 坐标位置 */
|
||
int32_t pointer_y; /* 记录光标 y 坐标位置 */
|
||
|
||
xcb_window_t bar_window;
|
||
};
|
||
|
||
struct client_t {
|
||
char name[256];
|
||
int32_t x, y, old_x, old_y;
|
||
uint32_t width, height, border_width, old_width, old_height, old_border_width;
|
||
uint32_t tags;
|
||
bool fullscreen;
|
||
bool floating;
|
||
bool maximize;
|
||
|
||
monitor_t *monitor;
|
||
client_t *next;
|
||
client_t *stack_next;
|
||
|
||
xcb_window_t window;
|
||
};
|
||
|
||
#define CLIENT_VISIBLE(C) ((C)->tags & (C)->monitor->selected_tags)
|
||
|
||
typedef struct wallpaper_config_t {
|
||
uint32_t count;
|
||
char **path_list;
|
||
} wallpaper_config_t;
|
||
|
||
/* 窗口默认屏幕和 tags */
|
||
typedef struct rule_tag_t {
|
||
const uint32_t monitor_amount;
|
||
uint32_t monitor_index;
|
||
uint32_t tags;
|
||
} rule_tag_t;
|
||
typedef struct rule_action_t {
|
||
bool switch_to_tag;
|
||
bool fullscreen;
|
||
bool maximize;
|
||
bool floating;
|
||
} rule_action_t;
|
||
/* 新建窗口规则 */
|
||
typedef struct rule_t {
|
||
/* 规则匹配字段组 */
|
||
const char *class;
|
||
const char *instance;
|
||
const char *title;
|
||
const rule_tag_t *tag; /* 默认所在屏幕和 tags 设置,以 {0} 结尾 */
|
||
const rule_action_t action;
|
||
} rule_t;
|
||
|
||
typedef union user_action_arg_t {
|
||
bool b;
|
||
int32_t i;
|
||
uint32_t ui;
|
||
float f;
|
||
const void *ptr;
|
||
} user_action_arg_t;
|
||
|
||
typedef struct keybinding_t {
|
||
uint32_t modifiers;
|
||
uint32_t key_symbol;
|
||
void (*func)(const user_action_arg_t *);
|
||
const user_action_arg_t arg;
|
||
} keybinding_t;
|
||
|
||
typedef struct color_t {
|
||
uint32_t rgba;
|
||
uint32_t argb;
|
||
double red;
|
||
double green;
|
||
double blue;
|
||
double alpha;
|
||
} color_t;
|
||
typedef struct color_set_t {
|
||
color_t bar_bg;
|
||
color_t tag_bg;
|
||
color_t active_tag_bg;
|
||
color_t tag_color;
|
||
color_t active_tag_color;
|
||
color_t layout_color;
|
||
color_t client_name_bg;
|
||
color_t client_name_color;
|
||
color_t active_client_name_bg;
|
||
color_t active_client_name_color;
|
||
color_t status_net_recv_color;
|
||
color_t status_net_send_color;
|
||
color_t status_volume_color;
|
||
color_t status_memory_color;
|
||
color_t status_cpu_color;
|
||
color_t status_datetime_color;
|
||
color_t border_color;
|
||
color_t active_border_color;
|
||
} color_set_t;
|
||
|
||
typedef struct {
|
||
char mem_used_text[32];
|
||
char swap_used_text[32];
|
||
|
||
float mem_percent;
|
||
float swap_percent;
|
||
uint64_t mem_used;
|
||
uint64_t swap_used;
|
||
|
||
uint64_t mem_total;
|
||
uint64_t mem_free;
|
||
uint64_t buffers;
|
||
uint64_t cached;
|
||
uint64_t swap_total;
|
||
uint64_t swap_free;
|
||
uint64_t s_reclaimable;
|
||
} memory_usage_t;
|
||
|
||
typedef struct {
|
||
uint64_t rx_bytes;
|
||
uint64_t tx_bytes;
|
||
char up[128];
|
||
char down[128];
|
||
} net_speed_t;
|
||
|
||
typedef struct {
|
||
uint32_t index;
|
||
int mute;
|
||
int avg_volume; /* 各通道平均音量(百分比) */
|
||
int volumes[5]; /* 各通道音量(百分比) */
|
||
char device[512]; /* 音频设备名称 */
|
||
} pulse_t;
|
||
|
||
typedef struct {
|
||
pulse_t pulse;
|
||
net_speed_t net_speed;
|
||
memory_usage_t mem_usage;
|
||
double cpu_usage_percent;
|
||
char time[256];
|
||
} status_t;
|
||
|
||
typedef struct icon_res_t {
|
||
/* 图像像素数据(RGBA 顺序) */
|
||
uint32_t *pixels;
|
||
/* cairo_surface_t * 类型,为避免引入 cairo 头文件使用 void * 类型代替 */
|
||
void *surface;
|
||
} icon_res_t;
|
||
typedef struct icons_t {
|
||
icon_res_t net_down;
|
||
icon_res_t net_up;
|
||
icon_res_t volume;
|
||
icon_res_t memory;
|
||
icon_res_t cpu;
|
||
icon_res_t clock;
|
||
} icons_t;
|
||
|
||
typedef enum click_area_t {
|
||
click_tag,
|
||
click_layout_symbol,
|
||
click_window_title,
|
||
click_status,
|
||
click_client_window,
|
||
click_root_win,
|
||
} click_area_t;
|
||
|
||
typedef struct button_t {
|
||
click_area_t click_area;
|
||
uint16_t modifiers;
|
||
uint8_t button;
|
||
void (*func)(const user_action_arg_t *);
|
||
const user_action_arg_t arg;
|
||
} button_t;
|