home · contact · privacy
Client: Fix bug that made horizontal scrolling jump back on large maps.
[plomrogue] / src / client / draw_wins.c
index 04927db9af9d076f3ad092feb284074a7af1fe02..dc655e76dad51d71d522794a2e240bfa50dbde19 100644 (file)
@@ -1,5 +1,6 @@
 /* src/client/draw_wins.c */
 
+#define _POSIX_C_SOURCE 200809L /* strdup() */
 #include "draw_wins.h"
 #include <ncurses.h> /* typedefs attr_t, chtype, define A_REVERSE */
 #include <stddef.h> /* NULL */
@@ -52,7 +53,7 @@ static void add_text_with_linebreaks(struct Win * win, char * text);
 static void draw_text_from_bottom(struct Win * win, char * text);
 
 /* Return a properly formatted keybinding list line for "kb". */
-static char * get_kb_line(struct KeyBinding * kb, uint8_t linebreak_type);
+static char * get_kb_line(struct KeyBinding * kb);
 
 /* Draw from line "start" on config view for keybindings defined at "kb". */
 static void draw_keybinding_config(struct Win * win, struct KeyBindingDB * kbdb,
@@ -254,20 +255,13 @@ static void draw_text_from_bottom(struct Win * win, char * text)
 
 
 
-static char * get_kb_line(struct KeyBinding * kb, uint8_t linebreak_type)
+static char * get_kb_line(struct KeyBinding * kb)
 {
     char * f_name = "get_kb_line()";
     char * keyname = get_keyname_to_keycode(kb->keycode);
-    char * format = "%-9s %s";
-    uint16_t first_size = 9;
-    if (1 != linebreak_type)
-    {
-        format = "%s: %s";
-        first_size = strlen(keyname) + 1;
-    }
-    uint16_t size = first_size + 1 + strlen(kb->command->dsc_long) + 1;
+    uint16_t size = strlen(keyname) + 3 + strlen(kb->command->dsc_long) + 1;
     char * kb_line = try_malloc(size, f_name);
-    sprintf(kb_line, format, keyname, kb->command->dsc_long);
+    sprintf(kb_line, "%s - %s", keyname, kb->command->dsc_long);
     free(keyname);
     return kb_line;
 }
@@ -282,7 +276,7 @@ static void draw_keybinding_config(struct Win * win, struct KeyBindingDB * kbdb,
         add_line(win, "(none)", 0, &offset, 0);
         return;
     }
-    uint16_t kb_n;
+    uint8_t kb_n;
     for (kb_n = 0; kb_n < kbdb->n_of_kbs; kb_n++)
     {
         attr_t attri = 0;
@@ -295,7 +289,7 @@ static void draw_keybinding_config(struct Win * win, struct KeyBindingDB * kbdb,
             }
             win->center.y = win->winmap_size.y;
         }
-        char * kb_line = get_kb_line(&kbdb->kbs[kb_n], win->linebreak);
+        char * kb_line = get_kb_line(&kbdb->kbs[kb_n]);
         add_line(win, kb_line, attri, &offset, (kbdb->n_of_kbs == kb_n + 1));
         free(kb_line);
     }
@@ -308,8 +302,8 @@ static void draw_titled_keybinding_list(char * title, struct Win * win,
                                         struct KeyBindingDB * kbdb)
 {
     uint8_t state = 0;
-    uint16_t kb_n = 0;
-    for (; (0 == state || kb_n < kbdb->n_of_kbs); kb_n++)
+    uint8_t kb_n = 0;
+    while (0 == state || kb_n < kbdb->n_of_kbs)
     {
         if (0 == state)
         {
@@ -318,9 +312,10 @@ static void draw_titled_keybinding_list(char * title, struct Win * win,
             state = 1 + (0 == kbdb->n_of_kbs);
             continue;
         }
-        char * kb_line = get_kb_line(&kbdb->kbs[kb_n], win->linebreak);
+        char * kb_line = get_kb_line(&kbdb->kbs[kb_n]);
         add_line(win, kb_line, 0, offset, (last * kbdb->n_of_kbs == kb_n + 1));
         free(kb_line);
+        kb_n++;
     }
     if (2 == state)
     {
@@ -343,14 +338,14 @@ extern void draw_win_log(struct Win * win)
 
 extern void draw_win_map(struct Win * win)
 {
-    try_resize_winmap(win, world.map.size.y, world.map.size.x);
+    try_resize_winmap(win, world.map.size.y, world.map.size.x * 2);
     uint16_t z = 0;
     uint16_t x, y;
     for (y = 0; y < world.map.size.y; y++)
     {
         for (x = 0; x < world.map.size.x; x++)
         {
-            set_ch_on_yx(win, y, x, world.map.cells[z]);
+            set_ch_on_yx(win, y, x * 2 + (y % 2), world.map.cells[z]);
             z++;
         }
     }
@@ -402,14 +397,10 @@ extern void draw_win_inventory(struct Win * win)
 
 extern void draw_win_available_keybindings(struct Win * win)
 {
-    char * title = "Active window's keybindings:";
-    struct KeyBindingDB * kbdb;
+    char * title = "Active window's keys:";
     struct Win * win_active = get_win_by_id(world.winDB.active);
-    if     (0 == win_active->view)
-    {
-        kbdb = &win_active->kb;
-    }
-    else if (1 == win_active->view)
+    struct KeyBindingDB * kbdb = &win_active->kb;
+    if      (1 == win_active->view)
     {
         kbdb = &world.kb_wingeom;
     }
@@ -420,7 +411,7 @@ extern void draw_win_available_keybindings(struct Win * win)
     uint16_t offset = 0;
     draw_titled_keybinding_list(title, win, &offset, 0, kbdb);
     add_line(win, " ", 0, &offset, 0);
-    title = "Global keybindings:";
+    title = "Global keys:";
     draw_titled_keybinding_list(title, win, &offset, 1, &world.kb_global);
 }
 
@@ -453,7 +444,7 @@ extern void draw_win_keybindings_winconf_keybindings(struct Win * win)
 
 extern void draw_winconf_keybindings(struct Win * win)
 {
-    char * title = "Window's keybindings:";
+    char * title = "Window's keys:";
     uint16_t offset = 0;
     add_line(win, title, 0, &offset, 0);
     add_line(win, " ", 0, &offset, 0);