home · contact · privacy
Abstract pad scrolling; windows.c only checks for validity of new pad offset, doesn...
authorChristian Heller <c.heller@plomlompom.de>
Mon, 10 Jun 2013 07:46:28 +0000 (09:46 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 10 Jun 2013 07:46:28 +0000 (09:46 +0200)
roguelike.c
roguelike.h
windows.c
windows.h

index 6ae524330e30f0482b0748c485ba992ccb0c394b..f648e00cd769369adf21cb35aaaca107f1ca1596 100644 (file)
@@ -72,6 +72,13 @@ void toggle_window (struct WinMeta * win_meta, struct Win * win) {
   else
     append_window(win_meta, win); }
 
+void scroll_pad (struct WinMeta * win_meta, char dir) {
+// Try to scroll pad left or right.
+  if      ('+' == dir)
+    reset_pad_offset(win_meta, win_meta->pad_offset + 1);
+  else if ('-' == dir)
+    reset_pad_offset(win_meta, win_meta->pad_offset - 1); }
+
 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) {
index fcca90dbe404de59c7496dd1ca6c5ee36d95f4f2..3fdbbaf4c43ea31966dd2a22c349659e00fc212c 100644 (file)
@@ -31,6 +31,7 @@ uint32_t read_uint32_bigendian(FILE * file);
 void write_uint32_bigendian(uint32_t x, FILE * file);
 void save_game(struct World *);
 void toggle_window (struct WinMeta *, struct Win *);
+void scroll_pad (struct WinMeta *, char);
 void growshrink_active_window (struct WinMeta *, char);
 struct Map init_map ();
 void map_scroll (struct Map *, char);
index 3f9cda8c200cba85f50e1bd3f765c9b6ff36267e..13dd161150df1b2988c9528b50876c768cf40302 100644 (file)
--- a/windows.c
+++ b/windows.c
@@ -17,13 +17,6 @@ struct WinMeta init_win_meta (WINDOW * screen) {
   win_meta.active = 0;
   return win_meta; }
 
-void scroll_pad (struct WinMeta * win_meta, char dir) {
-// Scroll pad left or right (if possible).
-  if      ('+' == dir && win_meta->pad_offset + win_meta->width < getmaxx(win_meta->pad) - 1)
-    win_meta->pad_offset++;
-  else if ('-' == dir && win_meta->pad_offset > 0)
-    win_meta->pad_offset--; }
-
 struct Win init_window (struct WinMeta * win_meta, char * title, void * data, void * func) {
 // Create and populate Win struct with sane default values.
   struct Win win;
@@ -221,7 +214,7 @@ void draw_all_windows (struct WinMeta * win_meta) {
     free(all_corners);
     uint16_t y;
     if (win_meta->pad_offset > 0)
-        draw_vertical_scroll_hint(win_meta, win_meta->pad_offset, win_meta->pad_offset + 1, '<');
+      draw_vertical_scroll_hint(win_meta, win_meta->pad_offset, win_meta->pad_offset + 1, '<');
     if (win_meta->pad_offset + win_meta->width < getmaxx(win_meta->pad) - 1)
       for (y = 0; y < win_meta->height; y++)
         draw_vertical_scroll_hint(win_meta, win_meta->pad_offset + win_meta->width - 1,
@@ -287,3 +280,8 @@ void shift_active_window (struct WinMeta * win_meta, char dir) {
           append_window(win_meta, wins[i]);
     free(wins);
     win_meta->active = win_shift; } }
+
+void reset_pad_offset(struct WinMeta * win_meta, uint16_t new_offset) {
+// Apply new_offset to windows pad, if it proves to be sane.
+  if (new_offset >= 0 && new_offset + win_meta->width < getmaxx(win_meta->pad))
+    win_meta->pad_offset = new_offset; }
index 522f26f37b882dd0eba3049327768930287e89ac..df6973146305b4a7f586517b720e7ebbac0706e6 100644 (file)
--- a/windows.h
+++ b/windows.h
@@ -29,7 +29,6 @@ struct Corners {
   struct yx br; };
 
 struct  WinMeta init_win_meta (WINDOW *);
-void scroll_pad (struct WinMeta *, char);
 struct Win init_window (struct WinMeta *, char *, void *, void *);
 void append_window (struct WinMeta *, struct Win *);
 void suspend_window (struct WinMeta *, struct Win *);
@@ -44,3 +43,4 @@ void draw_all_windows (struct WinMeta *);
 void resize_active_window (struct WinMeta *, uint16_t, uint16_t);
 void cycle_active_window (struct WinMeta *, char);
 void shift_active_window (struct WinMeta *, char);
+void reset_pad_offset (struct WinMeta *, uint16_t);