Files
zswm/src/include/types.h

203 lines
4.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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;