mirror of
https://github.com/paxed/dgamelaunch.git
synced 2025-07-31 01:24:43 +02:00
Handle screen size changes.
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@471 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
parent
ec7e3b3d49
commit
65bc2cee98
@ -379,6 +379,7 @@ inprogressmenu (int gameid)
|
|||||||
int is_nhext[14];
|
int is_nhext[14];
|
||||||
sigset_t oldmask, toblock;
|
sigset_t oldmask, toblock;
|
||||||
int idx = -1;
|
int idx = -1;
|
||||||
|
int max_height = -1;
|
||||||
|
|
||||||
if (sortmode == NUM_SORTMODES)
|
if (sortmode == NUM_SORTMODES)
|
||||||
sortmode = globalconfig.sortmode;
|
sortmode = globalconfig.sortmode;
|
||||||
@ -388,12 +389,16 @@ inprogressmenu (int gameid)
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
term_resize_check();
|
||||||
|
max_height = local_LINES - 10;
|
||||||
|
if (max_height < 2) return;
|
||||||
|
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
offset = 0;
|
offset = 0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (offset >= len && offset >= 14)
|
while (offset >= len && offset >= max_height)
|
||||||
offset -= 14;
|
offset -= max_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
erase ();
|
erase ();
|
||||||
@ -408,7 +413,7 @@ inprogressmenu (int gameid)
|
|||||||
/* clean old games and list good ones */
|
/* clean old games and list good ones */
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
for (i = 0; i < 14; i++)
|
for (i = 0; i < max_height; i++)
|
||||||
{
|
{
|
||||||
if (i + offset >= len)
|
if (i + offset >= len)
|
||||||
break;
|
break;
|
||||||
@ -428,12 +433,13 @@ inprogressmenu (int gameid)
|
|||||||
(time (&ctime) - games[i + offset]->idle_time) % 60);
|
(time (&ctime) - games[i + offset]->idle_time) % 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
mvprintw (22, 1, "'s' and 'S' change sort mode (current: %s)", SORTMODE_NAME[sortmode]);
|
mvprintw ((local_LINES-2), 1, "'s' and 'S' change sort mode (current: %s)", SORTMODE_NAME[sortmode]);
|
||||||
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
mvprintw (21, 1, "(%d-%d of %d)", offset + 1, offset + i, len);
|
mvprintw ((local_LINES-3), 1, "(%d-%d of %d)", offset + 1, offset + i, len);
|
||||||
mvaddstr (23, 1,
|
mvaddstr ((local_LINES-1), 1,
|
||||||
"Watch which game? (any key refreshes, 'q' quits, '>'/'<' for more/less) => ");
|
"Watch which game? (any key refreshes, 'q' quits, '>'/'<' for more/less) => ");
|
||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
|
|
||||||
switch ((menuchoice = getch ()))
|
switch ((menuchoice = getch ()))
|
||||||
@ -458,17 +464,17 @@ inprogressmenu (int gameid)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '>':
|
case '>':
|
||||||
if ((offset + 14) >= len)
|
if ((offset + max_height) >= len)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
offset += 14;
|
offset += max_height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '<':
|
case '<':
|
||||||
if ((offset - 14) < 0)
|
if ((offset - max_height) < 0)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
offset -= 14;
|
offset -= max_height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ERR:
|
case ERR:
|
||||||
@ -1968,6 +1974,7 @@ main (int argc, char** argv)
|
|||||||
|
|
||||||
/* signal handlers */
|
/* signal handlers */
|
||||||
signal (SIGHUP, catch_sighup);
|
signal (SIGHUP, catch_sighup);
|
||||||
|
signal(SIGWINCH, sigwinch_func);
|
||||||
|
|
||||||
(void) tcgetattr (0, &tt);
|
(void) tcgetattr (0, &tt);
|
||||||
if (-1 == ioctl (0, TIOCGWINSZ, (char *) &win) || win.ws_row < 4 ||
|
if (-1 == ioctl (0, TIOCGWINSZ, (char *) &win) || win.ws_row < 4 ||
|
||||||
@ -2081,6 +2088,7 @@ main (int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
initcurses ();
|
initcurses ();
|
||||||
|
term_resize_check();
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (runmenuloop(dgl_find_menu(loggedin ? "mainmenu_user" : "mainmenu_anon")))
|
if (runmenuloop(dgl_find_menu(loggedin ? "mainmenu_user" : "mainmenu_anon")))
|
||||||
|
@ -174,6 +174,9 @@ extern int num_games;
|
|||||||
|
|
||||||
extern mode_t default_fmode;
|
extern mode_t default_fmode;
|
||||||
|
|
||||||
|
extern int local_COLS;
|
||||||
|
extern int local_LINES;
|
||||||
|
|
||||||
/* dgamelaunch.c */
|
/* dgamelaunch.c */
|
||||||
extern void create_config(void);
|
extern void create_config(void);
|
||||||
extern void ttyrec_getmaster(void);
|
extern void ttyrec_getmaster(void);
|
||||||
@ -185,6 +188,9 @@ extern void drawbanner(struct dg_banner *ban, unsigned int start_line, unsigned
|
|||||||
extern int check_retard(int reset);
|
extern int check_retard(int reset);
|
||||||
extern char *dgl_format_str(int game, struct dg_user *me, char *str, char *plrname);
|
extern char *dgl_format_str(int game, struct dg_user *me, char *str, char *plrname);
|
||||||
|
|
||||||
|
extern void term_resize_check();
|
||||||
|
extern void sigwinch_func(int sig);
|
||||||
|
|
||||||
extern struct dg_menu *dgl_find_menu(char *menuname);
|
extern struct dg_menu *dgl_find_menu(char *menuname);
|
||||||
|
|
||||||
extern int dgl_exec_cmdqueue(struct dg_cmdpart *queue, int game, struct dg_user *me);
|
extern int dgl_exec_cmdqueue(struct dg_cmdpart *queue, int game, struct dg_user *me);
|
||||||
|
23
dgl-common.c
23
dgl-common.c
@ -54,6 +54,9 @@ int loggedin = 0;
|
|||||||
char *chosen_name;
|
char *chosen_name;
|
||||||
int num_games = 0;
|
int num_games = 0;
|
||||||
|
|
||||||
|
int local_COLS = -1, local_LINES = -1;
|
||||||
|
int curses_resize = 0;
|
||||||
|
|
||||||
int selected_game = 0;
|
int selected_game = 0;
|
||||||
int return_from_submenu = 0;
|
int return_from_submenu = 0;
|
||||||
|
|
||||||
@ -61,6 +64,26 @@ mode_t default_fmode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
|
|||||||
|
|
||||||
struct dg_globalconfig globalconfig;
|
struct dg_globalconfig globalconfig;
|
||||||
|
|
||||||
|
void
|
||||||
|
sigwinch_func(int sig)
|
||||||
|
{
|
||||||
|
signal(SIGWINCH, sigwinch_func);
|
||||||
|
curses_resize = 1;
|
||||||
|
term_resize_check();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
term_resize_check()
|
||||||
|
{
|
||||||
|
if ((COLS == local_COLS) && (LINES == local_LINES) && !curses_resize) return;
|
||||||
|
|
||||||
|
endwin();
|
||||||
|
initcurses();
|
||||||
|
refresh();
|
||||||
|
local_COLS = COLS;
|
||||||
|
local_LINES = LINES;
|
||||||
|
curses_resize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
check_retard(int reset)
|
check_retard(int reset)
|
||||||
|
@ -93,7 +93,7 @@ mygetnstr(char *buf, int maxlen, int doecho)
|
|||||||
else
|
else
|
||||||
beep();
|
beep();
|
||||||
}
|
}
|
||||||
else if (c == 10 || c == 13 || c == KEY_ENTER)
|
else if (c == 10 || c == 13 || c == KEY_ENTER || c == KEY_RESIZE)
|
||||||
break;
|
break;
|
||||||
else if (c == ERR)
|
else if (c == ERR)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user