home · contact · privacy
Negative values may now be passed to init_win() for sizes in negative relation to...
[plomrogue] / src / windows.h
index 9650ba2e0a1314b4f1eaab486d565d30313e4e5f..a98bbdb6708f8fc50c03d46be7cf4573be0b2f08 100644 (file)
@@ -9,7 +9,8 @@
  *
  * Windows can be almost any width (number has to fit into 16 bits); the virtual
  * screen grows with them as needed -- but only horizontally and only up to 2^16
- * cells. Their height is limited by the height of the terminal screen.
+ * cells. Their height is limited by the height of the terminal screen, which
+ * must also fit into 2^16 cells.
  *
  * Positioning of windows can only indirectly be influenced: by resizing them,
  * and by shifting their relative position inside the (currently invisible)
@@ -22,7 +23,9 @@
  * Functions that return uint8_t return these error codes:
  * 0 - success
  * 1 - memory allocation error (of ncurses' pads/windows, or scroll hint texts)
- * 2 - activity forces virtual screen to grow beyond width of 2^16 cells
+ * 2 - would force virtual screen to grow beyond width or height of 2^16 cells
+ *
+ * TODO: Expose less internals to the API.
  *
  * TODO: Think up a more intuitive window positioning algorithm or at least make
  * the chain that windows are positioned by visible.
@@ -100,16 +103,19 @@ extern uint8_t init_win_meta(WINDOW * screen, struct WinMeta * wmeta);
  * and appointing "func"() to interpret and draw the content stored at "data"
  * if the window is visible.
  *
- * A value for "width" <1 will trigger a fallback to width=1. A "height" < 1 or
- * larger than the maximum window height possible within the virtual screen will
- * trigger a fallback to the maximum height possible (i.e. pass a "height" of 0
- * to initialize the window to its largest possible height).
+ * Pass 0 for "width" to make the window as wide as the terminal screen. Pass
+ * negative values for "width" to make the size so many cells smaller than the
+ * terminal screen. Pass 0 for "height" to give the window the maximum allowed
+ * height: one cell smaller than the terminal screen. Pass negative values to
+ * make the window so many smalls smaller than the terminal screen. The maximum
+ * allowed height is also applied for positive values that exceed it or negative
+ * values that would reduce the window height < 1 cell.
  *
  * Other members of the Win struct are initialized to 0. The window will stay
  * invisible until appended to the chain of visible windows via append_win().
  */
 extern struct Win init_win(struct WinMeta * wmeta, char * title,
-                           uint16_t height, uint16_t width,
+                           int16_t height, int16_t width,
                            void * data, void * func);
 
 
@@ -143,7 +149,7 @@ extern uint8_t resize_active_win(struct WinMeta * wmeta, struct yx_uint16 size);
 
 
 
-/* Cycle active window selection forwards ("dir" == "n") or backwards (any
+/* Cycle active window selection forwards ("dir" == "f") or backwards (any
  * other "dir"). Wrap around in the windows chain if start / end of it is met.
  * Does nothing if no window is active.
  */
@@ -151,7 +157,7 @@ extern void cycle_active_win(struct WinMeta * wmeta, char dir);
 
 
 
-/* Move active window forwards ("dir" == "f") or backwards ("dir" == "b").
+/* Move active window forwards ("dir" == "f") or backwards (any other "dir").
  * Wrap around in the window chain if start / end of it is met. Does nothing if
  * no window is active.
  */