diff --git a/client/src/ui/editor.cpp b/client/src/ui/editor.cpp index 3beaea3..6ad1dec 100644 --- a/client/src/ui/editor.cpp +++ b/client/src/ui/editor.cpp @@ -49,10 +49,10 @@ void Editor::handle_input(SDL_Event* event, int window_x, int window_y, int wind void Editor::render(const RenderContext& context, int x, int y, int width, int height) { int menu_bar_height = _menu_bar->get_height(); int menu_bar_y_gl = y + height - menu_bar_height; - _menu_bar->render(context.shape_renderer, context.txt_renderer, x, menu_bar_y_gl, width); _view->render(context.txt_renderer, x, y, width, height - menu_bar_height, context.show_cursor); + _menu_bar->render(context.shape_renderer, context.txt_renderer, x, menu_bar_y_gl, width); } void Editor::scroll(int amount, int content_height) { diff --git a/client/src/ui/menu_bar.cpp b/client/src/ui/menu_bar.cpp index 1ca890d..8db5ff6 100644 --- a/client/src/ui/menu_bar.cpp +++ b/client/src/ui/menu_bar.cpp @@ -30,36 +30,41 @@ void MenuBar::handle_event(SDL_Event* event, int window_x, int window_y, int win if(event->type == SDL_EVENT_MOUSE_BUTTON_DOWN) { int mouse_x = event->button.x; int mouse_y = event->button.y; + const int title_bar_height = 30; - int menu_x = window_x; - for(size_t i = 0; i < _menus.size(); ++i) { - int menu_width = 60; /* Just hardcode this for now. */ - if(mouse_x >= menu_x && mouse_x <= menu_x + menu_width && - mouse_y >= window_y && mouse_y <= window_y + _height) { + int menu_bar_screen_y = window_y + title_bar_height; + int current_menu_x = window_x; + bool click_on_bar = false; - if(_open_menu_index == (int)i) { - _open_menu_index = -1; /* Close if open already. */ - } else { - _open_menu_index = i; + if(mouse_y >= menu_bar_screen_y && mouse_y <= menu_bar_screen_y + _height) { + for(size_t i = 0; i < _menus.size(); ++i) { + int menu_width = 60; + if(mouse_x >= current_menu_x && mouse_x <= current_menu_x + menu_width) { + _open_menu_index = (_open_menu_index == (int)i) ? -1: i; + click_on_bar = true; + break; } - return; + current_menu_x += menu_width; } - menu_x += menu_width; } + if(click_on_bar) return; + if(_open_menu_index != -1) { Menu& open_menu = _menus[_open_menu_index]; - int item_y = window_gl_y + _height; + int dropdown_x = window_x + (_open_menu_index * 60); + int dropdown_y = menu_bar_screen_y + _height; int item_height = 30; int dropdown_width = 150; + for(const auto& item: open_menu.items) { - if(mouse_x >= window_x && mouse_x <= window_x + dropdown_width && - (window_gl_y - mouse_y) >= item_y && (window_gl_y - mouse_y) <= item_y + item_height) { + if(mouse_x >= dropdown_x && mouse_x <= dropdown_x + dropdown_width && + mouse_y >= dropdown_y && mouse_y <= dropdown_y + item_height) { item.action(); _open_menu_index = -1; /* Close menu. */ return; } - item_y += item_height; + dropdown_y += item_height; } } /* Close any open menu when clicked outside. */