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_subtitle subtitle;
const menu_filename filename;
grs_canvas &parent_canvas;
const tiny_mode_flag tiny_mode;
const tab_processing_flag tabs_flag;
const uint8_t max_on_menu;
@ -314,9 +315,10 @@ struct newmenu_layout
uint8_t mouse_state;
const partial_range_t<newmenu_item *> items;
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),
title(title), subtitle(subtitle), filename(filename),
parent_canvas(parent_canvas),
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)),
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);
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)

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);
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_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
@ -793,8 +794,7 @@ window_event_result main_menu::event_handler(const d_event &event)
break;
case EVENT_NEWMENU_DRAW:
gr_set_default_canvas();
draw_copyright(*grd_curcanv, *GAME_FONT);
draw_copyright(parent_canvas, *GAME_FONT);
break;
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;
grs_canvas &save_canvas = *grd_curcanv;
gr_set_default_canvas();
auto &canvas = *grd_curcanv;
auto &canvas = menu.parent_canvas;
auto iterative_layout_max_width = 0u;
auto iterative_layout_max_height = 0u;