home · contact · privacy
Restructured window resizing. windows.c now only contains a general resize with width...
authorChristian Heller <c.heller@plomlompom.de>
Fri, 17 May 2013 00:57:00 +0000 (02:57 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 17 May 2013 00:57:00 +0000 (02:57 +0200)
roguelike.c
windows.c
windows.h

index bc21ab5a0dfb5b6c23bbc51fac3b514f777b5e81..bc971d4fba4fc4c6739f93b3257ec6b2dbb5e74d 100644 (file)
@@ -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"))
index 659318deeea90a4343f95437eec3f9cc92804c4c..ff0adb2bf370bb4f5b3b32bdbe2de84c98260a29 100644 (file)
--- 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) {
index 23fbdc1f59ac42f829fe9ecbdba3cc8cefd6f86d..c802e055c056f61b51f40354f6e82b30e36f534e 100644 (file)
--- 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);