static window_event_result title_handler(window *, const d_event &event, title_screen *ts) { window_event_result result; switch (event.type) { case EVENT_MOUSE_BUTTON_DOWN: if (event_mouse_get_button(event) != 0) return window_event_result::ignored; else if (ts->allow_keys) { return window_event_result::close; } break; case EVENT_KEY_COMMAND: if ((result = call_default_handler(event)) == window_event_result::ignored) if (ts->allow_keys) { return window_event_result::close; } return result; case EVENT_IDLE: timer_delay2(50); if (timer_query() > ts->timer) { return window_event_result::close; } break; case EVENT_WINDOW_DRAW: gr_set_default_canvas(); show_fullscr(*grd_curcanv, ts->title_bm); break; case EVENT_WINDOW_CLOSE: break; default: break; } return window_event_result::ignored; }
static void con_draw(void) { int i = 0, y = 0; if (con_size <= 0) return; gr_set_default_canvas(); auto &canvas = *grd_curcanv; auto &game_font = *GAME_FONT; gr_set_curfont(canvas, GAME_FONT); const uint8_t color = BM_XRGB(0, 0, 0); gr_settransblend(canvas, 7, GR_BLEND_NORMAL); const auto &&fspacy1 = FSPACY(1); const auto &&line_spacing = LINE_SPACING(*canvas.cv_font, *GAME_FONT); y = fspacy1 + (line_spacing * con_size); gr_rect(canvas, 0, 0, SWIDTH, y, color); gr_settransblend(canvas, GR_FADE_OFF, GR_BLEND_NORMAL); i+=con_scroll_offset; gr_set_fontcolor(canvas, BM_XRGB(255, 255, 255), -1); y = cli_draw(y, line_spacing); const auto &&fspacx = FSPACX(); const auto &&fspacx1 = fspacx(1); for (;;) { auto &b = con_buffer[CON_LINES_MAX - 1 - i]; gr_set_fontcolor(canvas, get_console_color_by_priority(b.priority), -1); int w,h; gr_get_string_size(game_font, b.line, &w, &h, nullptr); y -= h + fspacy1; gr_string(canvas, game_font, fspacx1, y, b.line, w, h); i++; if (y<=0 || CON_LINES_MAX-1-i <= 0 || i < 0) break; } gr_rect(canvas, 0, 0, SWIDTH, line_spacing, color); gr_set_fontcolor(canvas, BM_XRGB(255, 255, 255),-1); gr_printf(canvas, game_font, fspacx1, fspacy1, "%s LOG", DESCENT_VERSION); gr_string(canvas, game_font, SWIDTH - fspacx(110), fspacy1, "PAGE-UP/DOWN TO SCROLL"); }
static void menu_draw(MENU *menu) { int i; gr_set_default_canvas(); auto &canvas = *grd_curcanv; // Draw the menu background gr_urect(canvas, menu->x, menu->y, menu->x + menu->w - 1, menu->y + menu->h - 1, CGREY); if ( menu != &Menu[0] ) { gr_ubox(canvas, menu->x, menu->y, menu->x + menu->w - 1, menu->y + menu->h - 1, CBLACK); } // Draw the items for (i=0; i< menu->NumItems; i++ ) item_show( menu, i ); }
// Default event handler for everything except the editor window_event_result standard_handler(const d_event &event) { int key; if (Quitting) { window *wind = window_get_front(); if (!wind) return window_event_result::ignored; // finished quitting if (wind == Game_wind) { int choice; Quitting = 0; choice=nm_messagebox( NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME ); if (choice != 0) return window_event_result::handled; // aborted quitting else { CGameArg.SysAutoDemo = false; Quitting = 1; } } // Close front window, let the code flow continue until all windows closed or quit cancelled if (!window_close(wind)) { Quitting = 0; return window_event_result::handled; } return window_event_result::deleted; // tell the event system we deleted some window } switch (event.type) { case EVENT_MOUSE_BUTTON_DOWN: case EVENT_MOUSE_BUTTON_UP: // No window selecting // We stay with the current one until it's closed/hidden or another one is made // Not the case for the editor break; case EVENT_KEY_COMMAND: key = event_key_get(event); switch (key) { #ifdef macintosh case KEY_COMMAND + KEY_SHIFTED + KEY_3: #endif case KEY_PRINT_SCREEN: { gr_set_default_canvas(); save_screen_shot(0); return window_event_result::handled; } case KEY_ALTED+KEY_ENTER: case KEY_ALTED+KEY_PADENTER: if (Game_wind) if (Game_wind == window_get_front()) return window_event_result::ignored; gr_toggle_fullscreen(); return window_event_result::handled; #if defined(__APPLE__) || defined(macintosh) case KEY_COMMAND+KEY_Q: // Alt-F4 already taken, too bad Quitting = 1; return window_event_result::handled; #endif case KEY_SHIFTED + KEY_ESC: con_showup(); return window_event_result::handled; } break; case EVENT_WINDOW_DRAW: case EVENT_IDLE: //see if redbook song needs to be restarted RBACheckFinishedHook(); return window_event_result::handled; case EVENT_QUIT: #if DXX_USE_EDITOR if (SafetyCheck()) #endif Quitting = 1; return window_event_result::handled; default: break; } return window_event_result::ignored; }