From: Christian Heller Date: Fri, 17 May 2013 00:57:00 +0000 (+0200) Subject: Restructured window resizing. windows.c now only contains a general resize with width... X-Git-Tag: tce~1286 X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Bdeck_id%7D%7D/%7B%7Btodo.date%7D%7D?a=commitdiff_plain;h=8e65812566e9109f3d672ddfb4c4a30f042f917f;p=plomrogue Restructured window resizing. windows.c now only contains a general resize with width/height values, while growing/shrinking by 1 is handled inside roguelike.c --- diff --git a/roguelike.c b/roguelike.c index bc21ab5..bc971d4 100644 --- a/roguelike.c +++ b/roguelike.c @@ -44,6 +44,7 @@ void draw_map (struct Win *); void draw_info (struct Win *); void draw_keys_window (struct Win *); void toggle_window (struct WinMeta *, struct Win *); +void growshrink_active_window (struct WinMeta *, char); void init_keybindings(struct World *); struct Map init_map (); void map_scroll (struct Map *, char); @@ -192,6 +193,21 @@ void toggle_window (struct WinMeta * win_meta, struct Win * win) { else append_window(win_meta, win); } +void growshrink_active_window (struct WinMeta * win_meta, char change) { +// Grow or shrink active window horizontally or vertically by one cell size. + if (0 != win_meta->active) { + int height = win_meta->active->height; + int width = win_meta->active->width; + if (change == '-') + height--; + else if (change == '+') + height++; + else if (change == '_') + width--; + else if (change == '*') + width++; + resize_active_window (win_meta, height, width); } } + void init_keybindings(struct World * world) { // Initialize keybindings from file "keybindings". FILE * file = fopen("keybindings", "r"); @@ -495,13 +511,13 @@ int main () { else if (key == get_action_key(world.keybindings, "shift backwards")) shift_window(&win_meta, 'b'); else if (key == get_action_key(world.keybindings, "grow horizontally")) - resize_window(&win_meta, '*'); + growshrink_active_window(&win_meta, '*'); else if (key == get_action_key(world.keybindings, "shrink horizontally")) - resize_window(&win_meta, '_'); + growshrink_active_window(&win_meta, '_'); else if (key == get_action_key(world.keybindings, "grow vertically")) - resize_window(&win_meta, '+'); + growshrink_active_window(&win_meta, '+'); else if (key == get_action_key(world.keybindings, "shrink vertically")) - resize_window(&win_meta, '-'); + growshrink_active_window(&win_meta, '-'); else if (key == get_action_key(world.keybindings, "save keys")) save_keybindings(&world); else if (key == get_action_key(world.keybindings, "keys nav up")) diff --git a/windows.c b/windows.c index 659318d..ff0adb2 100644 --- a/windows.c +++ b/windows.c @@ -192,17 +192,11 @@ void draw_all_windows (struct WinMeta * win_meta) { free(all_corners); } doupdate(); } -void resize_window (struct WinMeta * win_meta, char change) { +void resize_active_window (struct WinMeta * win_meta, int height, int width) { // Grow or shrink currently active window. Correct its geometry and that of its followers. - if (0 != win_meta->active) { - if (change == '-' && win_meta->active->height > 1) - win_meta->active->height--; - else if (change == '+' && win_meta->active->height < win_meta->height - 1) - win_meta->active->height++; - else if (change == '_' && win_meta->active->width > 1) - win_meta->active->width--; - else if (change == '*') - win_meta->active->width++; + if (0 != win_meta->active && width > 0 && height > 0 && height < win_meta->height) { + win_meta->active->height = height; + win_meta->active->width = width; update_windows(win_meta, win_meta->chain_start); } } void cycle_active_window (struct WinMeta * win_meta, char dir) { diff --git a/windows.h b/windows.h index 23fbdc1..c802e05 100644 --- a/windows.h +++ b/windows.h @@ -40,6 +40,6 @@ void draw_windows (struct Win *); void draw_windows_borders (struct Win *, struct Win *, struct Corners *, int); void draw_window_borders (struct Win *, char); void draw_all_windows (struct WinMeta *); -void resize_window (struct WinMeta *, char); +void resize_active_window (struct WinMeta *, int, int); void cycle_active_window (struct WinMeta *, char); void shift_window (struct WinMeta *, char);