Record parent canvas in newmenu

Use it to avoid resetting to the screen canvas when preparing the
layout.
This commit is contained in:
Kp 2021-09-12 16:20:52 +00:00
parent f9fa374ab4
commit 8d67bcddb0
3 changed files with 9 additions and 8 deletions

View file

@ -304,6 +304,7 @@ struct newmenu_layout
const menu_title title; const menu_title title;
const menu_subtitle subtitle; const menu_subtitle subtitle;
const menu_filename filename; const menu_filename filename;
grs_canvas &parent_canvas;
const tiny_mode_flag tiny_mode; const tiny_mode_flag tiny_mode;
const tab_processing_flag tabs_flag; const tab_processing_flag tabs_flag;
const uint8_t max_on_menu; const uint8_t max_on_menu;
@ -314,9 +315,10 @@ struct newmenu_layout
uint8_t mouse_state; uint8_t mouse_state;
const partial_range_t<newmenu_item *> items; const partial_range_t<newmenu_item *> items;
int scroll_offset = 0; int scroll_offset = 0;
newmenu_layout(const menu_title title, const menu_subtitle subtitle, const menu_filename filename, const tiny_mode_flag tiny_mode, const tab_processing_flag tabs_flag, const adjusted_citem citem_init, const draw_box_flag draw_box) : newmenu_layout(const menu_title title, const menu_subtitle subtitle, const menu_filename filename, grs_canvas &parent_canvas, const tiny_mode_flag tiny_mode, const tab_processing_flag tabs_flag, const adjusted_citem citem_init, const draw_box_flag draw_box) :
citem(citem_init.citem), citem(citem_init.citem),
title(title), subtitle(subtitle), filename(filename), title(title), subtitle(subtitle), filename(filename),
parent_canvas(parent_canvas),
tiny_mode(tiny_mode), tabs_flag(tabs_flag), tiny_mode(tiny_mode), tabs_flag(tabs_flag),
max_on_menu(std::min<uint8_t>(citem_init.items.size(), tiny_mode != tiny_mode_flag::normal ? 21u : 14u)), max_on_menu(std::min<uint8_t>(citem_init.items.size(), tiny_mode != tiny_mode_flag::normal ? 21u : 14u)),
all_text(citem_init.all_text), all_text(citem_init.all_text),
@ -340,7 +342,7 @@ struct newmenu : newmenu_layout, window
{ {
using subfunction_type = int(*)(newmenu *menu, const d_event &event, void *userdata); using subfunction_type = int(*)(newmenu *menu, const d_event &event, void *userdata);
newmenu(const menu_title title, const menu_subtitle subtitle, const menu_filename filename, const tiny_mode_flag tiny_mode, const tab_processing_flag tabs_flag, const adjusted_citem citem_init, grs_canvas &src, const draw_box_flag draw_box = draw_box_flag::menu_background) : newmenu(const menu_title title, const menu_subtitle subtitle, const menu_filename filename, const tiny_mode_flag tiny_mode, const tab_processing_flag tabs_flag, const adjusted_citem citem_init, grs_canvas &src, const draw_box_flag draw_box = draw_box_flag::menu_background) :
newmenu_layout(title, subtitle, filename, tiny_mode, tabs_flag, citem_init, draw_box), window(src, x, y, w, h) newmenu_layout(title, subtitle, filename, src, tiny_mode, tabs_flag, citem_init, draw_box), window(src, x, y, w, h)
{ {
} }
int *rval = nullptr; // Pointer to return value (for polling newmenus) int *rval = nullptr; // Pointer to return value (for polling newmenus)

View file

@ -642,9 +642,10 @@ static void draw_copyright(grs_canvas &canvas, grs_font &game_font)
{ {
gr_set_fontcolor(canvas, BM_XRGB(6, 6, 6), -1); gr_set_fontcolor(canvas, BM_XRGB(6, 6, 6), -1);
const auto &&line_spacing = LINE_SPACING(game_font, game_font); const auto &&line_spacing = LINE_SPACING(game_font, game_font);
gr_string(canvas, game_font, 0x8000, SHEIGHT - line_spacing, TXT_COPYRIGHT); const auto bm_h = canvas.cv_bitmap.bm_h;
gr_string(canvas, game_font, 0x8000, bm_h - line_spacing, TXT_COPYRIGHT);
gr_set_fontcolor(canvas, BM_XRGB(25, 0, 0), -1); gr_set_fontcolor(canvas, BM_XRGB(25, 0, 0), -1);
gr_string(canvas, game_font, 0x8000, SHEIGHT - (line_spacing * 2), DESCENT_VERSION); gr_string(canvas, game_font, 0x8000, bm_h - (line_spacing * 2), DESCENT_VERSION);
} }
//returns flag, true means quit menu //returns flag, true means quit menu
@ -793,8 +794,7 @@ window_event_result main_menu::event_handler(const d_event &event)
break; break;
case EVENT_NEWMENU_DRAW: case EVENT_NEWMENU_DRAW:
gr_set_default_canvas(); draw_copyright(parent_canvas, *GAME_FONT);
draw_copyright(*grd_curcanv, *GAME_FONT);
break; break;
case EVENT_NEWMENU_SELECTED: case EVENT_NEWMENU_SELECTED:

View file

@ -1303,8 +1303,7 @@ static void newmenu_create_structure(newmenu_layout &menu, const grs_font &cv_fo
{ {
int nmenus; int nmenus;
grs_canvas &save_canvas = *grd_curcanv; grs_canvas &save_canvas = *grd_curcanv;
gr_set_default_canvas(); auto &canvas = menu.parent_canvas;
auto &canvas = *grd_curcanv;
auto iterative_layout_max_width = 0u; auto iterative_layout_max_width = 0u;
auto iterative_layout_max_height = 0u; auto iterative_layout_max_height = 0u;