tuit

toolbox pour des tui - retour accueil

git clone git://bebou.netlib.re/tuit

Log | Files | Refs |

commit f8fd61c6b51d5c580cb56f5f43f517212de87b67
parent d0d25e20ec6a323060a635ce6275cd9d5adb841f
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Mon,  9 Jun 2025 17:49:05 +0200

Gestion du scroll si fenĂȘtre plus petite que liste

Diffstat:
Mchoose.c | 31+++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/choose.c b/choose.c @@ -17,8 +17,9 @@ int main(int argc, char **argv) { tb_set_input_mode(TB_INPUT_ESC | TB_INPUT_MOUSE); struct tb_event ev; - int curline=0; + int curelem=0; int count=0; + int start=0; char line[CARD_NAME_SIZE]; char **list; @@ -32,9 +33,9 @@ int main(int argc, char **argv) { bool quit=false; while(!quit) { - for (int i=0;i<count;i++) { - if (i==curline) tb_printf(0, i, TB_BLACK, TB_WHITE, list[i]); - else tb_printf(0, i, TB_DEFAULT, TB_DEFAULT, list[i]); + for (int i=0;i<min(tb_height(),count);i++) { + if (i+start==curelem) tb_printf(0, i, TB_BLACK, TB_WHITE, list[i+start]); + else tb_printf(0, i, TB_DEFAULT, TB_DEFAULT, list[i+start]); } tb_present(); tb_poll_event(&ev); @@ -44,15 +45,21 @@ int main(int argc, char **argv) { /* enter */ case 13: tb_shutdown(); - printf(list[curline]); + printf(list[curelem]); return 0; /* up */ case 65517: - curline=max(0,curline-1); + if(start!=0) { + start--; + } + curelem=max(0,curelem-1); break; /* down */ case 65516: - curline=min(count-1,curline+1); + if(curelem-start+1==tb_height()) { + start++; + } + curelem=min(count-1,curelem+1); break; case 0: switch(ev.ch) { @@ -69,18 +76,18 @@ int main(int argc, char **argv) { case 3: /*Mouse*/ switch(ev.key) { case 65512: /*MouseLeft*/ - curline=max(0,min(ev.y,count-1)); + curelem=max(0,min(ev.y,count-1)); break; case 65511: /*MouseRight*/ - curline=max(0,min(ev.y,count-1)); + curelem=max(0,min(ev.y,count-1)); tb_shutdown(); - printf(list[curline]); + printf(list[curelem]); return 0; case 65508: /*MouseWheelUp*/ - curline=max(0,curline-1); + curelem=max(0,curelem-1); break; case 65507: /*MouseWheelDown*/ - curline=min(count-1,curline+1); + curelem=min(count-1,curelem+1); break; } }