feat: manual split

This commit is contained in:
DreamMaoMao 2026-05-14 11:06:48 +08:00
parent de694264a0
commit 8a3b94bc6f
7 changed files with 439 additions and 92 deletions

View file

@ -249,6 +249,7 @@ typedef struct {
int32_t dwindle_smart_split;
int32_t dwindle_smart_resize;
int32_t dwindle_drop_simple_split;
int32_t dwindle_manual_split;
float dwindle_split_ratio;
uint32_t hotarea_size;
@ -326,6 +327,7 @@ typedef struct {
float rootcolor[4];
float bordercolor[4];
float dropcolor[4];
float splitcolor[4];
float focuscolor[4];
float maximizescreencolor[4];
float urgentcolor[4];
@ -1222,6 +1224,8 @@ FuncType parse_func_name(char *func_name, Arg *arg, char *arg_value,
(*arg).i = parse_direction(arg_value);
} else if (strcmp(func_name, "toggle_all_floating") == 0) {
func = toggle_all_floating;
} else if (strcmp(func_name, "dwindle_toggle_split_direction") == 0) {
func = dwindle_toggle_split_direction;
} else {
return NULL;
}
@ -1635,6 +1639,8 @@ bool parse_option(Config *config, char *key, char *value) {
config->dwindle_smart_resize = atoi(value);
} else if (strcmp(key, "dwindle_drop_simple_split") == 0) {
config->dwindle_drop_simple_split = atoi(value);
} else if (strcmp(key, "dwindle_manual_split") == 0) {
config->dwindle_manual_split = atoi(value);
} else if (strcmp(key, "dwindle_split_ratio") == 0) {
config->dwindle_split_ratio = atof(value);
} else if (strcmp(key, "hotarea_size") == 0) {
@ -1777,6 +1783,17 @@ bool parse_option(Config *config, char *key, char *value) {
} else {
convert_hex_to_rgba(config->dropcolor, color);
}
} else if (strcmp(key, "splitcolor") == 0) {
int64_t color = parse_color(value);
if (color == -1) {
fprintf(stderr,
"\033[1m\033[31m[ERROR]:\033[33m Invalid splitcolor "
"format: %s\n",
value);
return false;
} else {
convert_hex_to_rgba(config->splitcolor, color);
}
} else if (strcmp(key, "focuscolor") == 0) {
int64_t color = parse_color(value);
if (color == -1) {
@ -3209,6 +3226,7 @@ void override_config(void) {
config.dwindle_smart_resize = CLAMP_INT(config.dwindle_smart_resize, 0, 1);
config.dwindle_drop_simple_split =
CLAMP_INT(config.dwindle_drop_simple_split, 0, 1);
config.dwindle_manual_split = CLAMP_INT(config.dwindle_manual_split, 0, 1);
config.dwindle_split_ratio =
CLAMP_FLOAT(config.dwindle_split_ratio, 0.05f, 0.95f);
config.hotarea_size = CLAMP_INT(config.hotarea_size, 1, 1000);
@ -3356,6 +3374,7 @@ void set_value_default() {
config.dwindle_smart_split = 0;
config.dwindle_smart_resize = 0;
config.dwindle_drop_simple_split = 1;
config.dwindle_manual_split = 0;
config.dwindle_split_ratio = 0.5f;
config.log_level = WLR_ERROR;
@ -3503,10 +3522,14 @@ void set_value_default() {
config.bordercolor[1] = 0x44 / 255.0f;
config.bordercolor[2] = 0x44 / 255.0f;
config.bordercolor[3] = 1.0f;
config.dropcolor[0] = 0x8f / 255.0f;
config.dropcolor[1] = 0xba / 255.0f;
config.dropcolor[2] = 0x7c / 255.0f;
config.dropcolor[0] = 0xd5 / 255.0f;
config.dropcolor[1] = 0x89 / 255.0f;
config.dropcolor[2] = 0x9d / 255.0f;
config.dropcolor[3] = 0.5f;
config.splitcolor[0] = 0xeb / 255.0f;
config.splitcolor[1] = 0x44 / 255.0f;
config.splitcolor[2] = 0x1e / 255.0f;
config.splitcolor[3] = 1.0f;
config.focuscolor[0] = 0xc6 / 255.0f;
config.focuscolor[1] = 0x6b / 255.0f;
config.focuscolor[2] = 0x25 / 255.0f;
@ -3767,6 +3790,8 @@ void reapply_property(void) {
}
wlr_scene_rect_set_color(c->droparea, config.dropcolor);
wlr_scene_rect_set_color(c->splitindicator[0], config.splitcolor);
wlr_scene_rect_set_color(c->splitindicator[1], config.splitcolor);
}
}
}