X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fscreens.c;h=75727695da592bc04ff969a5856d061fc761c334;hb=11c94b20f4d8020213d2df5fde3637e837a03f05;hp=6fccd1dc8be066b53ce467c6bc540c3c54167495;hpb=c21cf4c301f745142f3cbb4987efe6446a3a8c4e;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 6fccd1dc..75727695 100644 --- a/src/screens.c +++ b/src/screens.c @@ -41,6 +41,20 @@ /* for HandleChooseLevel() */ #define MAX_LEVEL_SERIES_ON_SCREEN (SCR_FIELDY - 2) +/* buttons and scrollbars identifiers */ +#define SCREEN_CTRL_ID_SCROLL_UP 0 +#define SCREEN_CTRL_ID_SCROLL_DOWN 1 +#define SCREEN_CTRL_ID_SCROLL_VERTICAL 2 + +#define NUM_SCREEN_SCROLLBUTTONS 2 +#define NUM_SCREEN_SCROLLBARS 1 +#define NUM_SCREEN_GADGETS 3 + +/* forward declaration for internal use */ +static void HandleScreenGadgets(struct GadgetInfo *); + +static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS]; + #ifdef MSDOS extern unsigned char get_ascii(KeySym); #endif @@ -815,17 +829,39 @@ void DrawChooseLevel() UnmapAllGadgets(); CloseDoor(DOOR_CLOSE_2); + ClearWindow(); + HandleChooseLevel(0,0, 0,0, MB_MENU_INITIALIZE); + MapChooseLevelGadgets(); + FadeToFront(); InitAnimation(); - HandleChooseLevel(0,0, 0,0, MB_MENU_INITIALIZE); +} + +static void AdjustChooseLevelScrollbar(int id, int first_entry) +{ + struct GadgetInfo *gi = screen_gadget[id]; + int items_max, items_visible, item_position; + + items_max = num_leveldirs; + items_visible = MAX_LEVEL_SERIES_ON_SCREEN - 1; + item_position = first_entry; + + if (item_position > items_max - items_visible) + item_position = items_max - items_visible; + + ModifyGadget(gi, GDI_SCROLLBAR_ITEMS_MAX, items_max, + GDI_SCROLLBAR_ITEM_POSITION, item_position, GDI_END); } static void drawChooseLevelList(int first_entry, int num_page_entries) { int i; char buffer[SCR_FIELDX * 2]; + int max_buffer_len = (SCR_FIELDX - 2) * 2; + + XFillRectangle(display, backbuffer, gc, SX, SY, SXSIZE - 32, SYSIZE); + redraw_mask |= REDRAW_FIELD; - ClearWindow(); DrawText(SX, SY, "Level Directories", FS_BIG, FC_GREEN); for(i=0; icustom_id; + + if (game_status != CHOOSELEVEL) + return; + + switch (id) + { + case SCREEN_CTRL_ID_SCROLL_UP: + HandleChooseLevel(SX,SY + 32, 0,0, MB_MENU_MARK); + break; + + case SCREEN_CTRL_ID_SCROLL_DOWN: + HandleChooseLevel(SX,SY + SYSIZE - 32, 0,0, MB_MENU_MARK); + break; + + case SCREEN_CTRL_ID_SCROLL_VERTICAL: + HandleChooseLevel(0,0, 1,gi->event.item_position, MB_MENU_INITIALIZE); + break; + + default: + break; + } +}