14
14
#include " input/input.h"
15
15
#include " io/gamefiles/lang.h"
16
16
#include " window/window_city.h"
17
+ #include " widget/widget_sidebar.h"
17
18
#include " game/game.h"
18
19
19
20
static void button_menu_item (int index, int param2);
@@ -127,17 +128,18 @@ struct overlay_menu_data_t {
127
128
128
129
overlay_menu_data_t g_overlay_menu_data;
129
130
130
- static void init (void ) {
131
+ static void init () {
131
132
auto & data = g_overlay_menu_data;
132
133
data.selected_submenu = 0 ;
133
- data.num_submenu_items = 0 ;
134
+ data.num_submenu_items = 0 ;
134
135
}
135
136
136
- static void draw_background ( void ) {
137
+ static void window_overlay_draw_background ( ) {
137
138
window_city_draw_panels ();
139
+ widget_sidebar_city_draw_foreground ();
138
140
}
139
141
140
- static int get_sidebar_x_offset (void ) {
142
+ static int get_sidebar_x_offset () {
141
143
vec2i view_pos, view_size;
142
144
const view_data_t &viewport = city_view_viewport ();
143
145
city_view_get_viewport (viewport, view_pos, view_size);
@@ -190,7 +192,7 @@ const char* game_state_overlay_text(int index) {
190
192
return (const char *)lang_get_string (e_text_overlay_menu, index );
191
193
}
192
194
193
- static void draw_foreground () {
195
+ static void window_overlay_draw_foreground () {
194
196
painter ctx = game.painter ();
195
197
auto & data = g_overlay_menu_data;
196
198
window_city_draw ();
@@ -231,14 +233,16 @@ static void open_submenu(int index, int keep_open) {
231
233
232
234
static void close_submenu (void ) {
233
235
auto & data = g_overlay_menu_data;
234
- data.keep_submenu_open = 0 ;
235
- data.selected_menu = 0 ;
236
- data.selected_submenu = 0 ;
237
- data.num_submenu_items = 0 ;
238
- window_invalidate ();
236
+ if (data.selected_menu || data.selected_submenu ) {
237
+ data.keep_submenu_open = 0 ;
238
+ data.selected_menu = 0 ;
239
+ data.selected_submenu = 0 ;
240
+ data.num_submenu_items = 0 ;
241
+ window_invalidate ();
242
+ }
239
243
}
240
244
241
- static void handle_submenu_focus (void ) {
245
+ static void window_overlay_handle_submenu_focus (void ) {
242
246
auto & data = g_overlay_menu_data;
243
247
if (data.menu_focus_button_id || data.submenu_focus_button_id ) {
244
248
data.submenu_focus_time = time_get_millis ();
@@ -250,14 +254,14 @@ static void handle_submenu_focus(void) {
250
254
}
251
255
}
252
256
253
- static void handle_input (const mouse* m, const hotkeys* h) {
257
+ static void window_overlay_handle_input (const mouse* m, const hotkeys* h) {
254
258
auto & data = g_overlay_menu_data;
255
259
int x_offset = get_sidebar_x_offset ();
256
260
bool handled = false ;
257
261
handled |= !!generic_buttons_handle_mouse (m, {x_offset - 170 , 72 }, menu_buttons, 8 , &data.menu_focus_button_id );
258
262
259
263
if (!data.keep_submenu_open ) {
260
- handle_submenu_focus ();
264
+ window_overlay_handle_submenu_focus ();
261
265
}
262
266
263
267
if (data.selected_submenu ) {
@@ -302,9 +306,9 @@ static void button_submenu_item(int index, int param2) {
302
306
void window_overlay_menu_show (void ) {
303
307
window_type window = {
304
308
WINDOW_OVERLAY_MENU,
305
- draw_background ,
306
- draw_foreground ,
307
- handle_input
309
+ window_overlay_draw_background ,
310
+ window_overlay_draw_foreground ,
311
+ window_overlay_handle_input
308
312
};
309
313
init ();
310
314
window_show (&window);
0 commit comments