home · contact · privacy
init_window() now initializes Win.data and Win.draw, too
[plomrogue] / roguelike.c
index bc21ab5a0dfb5b6c23bbc51fac3b514f777b5e81..f530d453abd5b4799ba4efa0c943b7e63c55fe3f 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");
@@ -455,18 +471,10 @@ int main () {
   raw();
   struct WinMeta win_meta = init_win_meta(screen);
 
-  struct Win win_keys = init_window(&win_meta, "Keys");
-  win_keys.draw = draw_keys_window;
-  win_keys.data = &world;
-  struct Win win_map = init_window(&win_meta, "Map");
-  win_map.draw = draw_map;
-  win_map.data = &world;
-  struct Win win_info = init_window(&win_meta, "Info");
-  win_info.draw = draw_info;
-  win_info.data = &world;
-  struct Win win_log = init_window(&win_meta, "Log");
-  win_log.draw = draw_log;
-  win_log.data = &world;
+  struct Win win_keys = init_window(&win_meta, "Keys", &world, draw_keys_window);
+  struct Win win_map = init_window(&win_meta, "Map", &world, draw_map);
+  struct Win win_info = init_window(&win_meta, "Info", &world, draw_info);
+  struct Win win_log = init_window(&win_meta, "Log", &world, draw_log);
 
   int key;
   while (1) {
@@ -491,17 +499,17 @@ int main () {
     else if (key == get_action_key(world.keybindings, "cycle backwards"))
       cycle_active_window(&win_meta, 'p');
     else if (key == get_action_key(world.keybindings, "shift forwards"))
-      shift_window(&win_meta, 'f');
+      shift_active_window(&win_meta, 'f');
     else if (key == get_action_key(world.keybindings, "shift backwards"))
-      shift_window(&win_meta, 'b');
+      shift_active_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"))