From a104674fdf344a65f1d22662565f6ee885283d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 22 Jun 2004 01:19:53 +0000 Subject: [PATCH] Fixed typo, corrected video mode menu usage. run_menu() now supports menu_item_hook for CHOICE_MENU submenu items. Now selects the video mode chosen in the menu - it's broken right now if you enter the boot menu without asking for it (i.e. when there is no boot volume found). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8116 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/boot/platform/bios_ia32/menu.cpp | 5 +- src/kernel/boot/platform/bios_ia32/video.cpp | 84 ++++++++++++-------- src/kernel/boot/platform/bios_ia32/video.h | 12 +-- 3 files changed, 64 insertions(+), 37 deletions(-) diff --git a/src/kernel/boot/platform/bios_ia32/menu.cpp b/src/kernel/boot/platform/bios_ia32/menu.cpp index 23c621874b..b39fb2824b 100644 --- a/src/kernel/boot/platform/bios_ia32/menu.cpp +++ b/src/kernel/boot/platform/bios_ia32/menu.cpp @@ -1,6 +1,6 @@ /* ** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. -** Distributed under the terms of the OpenBeOS License. +** Distributed under the terms of the Haiku License. */ @@ -278,6 +278,8 @@ run_menu(Menu *menu) menu->Hide(); run_menu(item->Submenu()); + if (item->Target() != NULL) + (*item->Target())(menu, item); // restore current menu sMenuOffset = offset; @@ -316,6 +318,7 @@ platform_add_menus(Menu *menu) switch (menu->Type()) { case MAIN_MENU: menu->AddItem(item = new MenuItem("Select fail-safe video mode", video_mode_menu())); + item->SetTarget(video_mode_hook); break; case SAFE_MODE_MENU: menu->AddItem(item = new MenuItem("Don't call the BIOS")); diff --git a/src/kernel/boot/platform/bios_ia32/video.cpp b/src/kernel/boot/platform/bios_ia32/video.cpp index 50d306c7bc..537b056d6f 100644 --- a/src/kernel/boot/platform/bios_ia32/video.cpp +++ b/src/kernel/boot/platform/bios_ia32/video.cpp @@ -241,6 +241,59 @@ vesa_set_palette(const uint8 *palette, int32 firstIndex, int32 numEntries) // #pragma mark - +bool +video_mode_hook(Menu *menu, MenuItem *item) +{ + // find selected mode + video_mode *mode = NULL; + + menu = item->Submenu(); + item = menu->FindMarked(); + if (item != NULL) + mode = (video_mode *)item->Data(); + + if (mode != sMode) { + // update standard mode + // ToDo: update fb settings! + sMode = mode; + } + + return true; +} + + +Menu * +video_mode_menu() +{ + Menu *menu = new Menu(CHOICE_MENU, "Select Video Mode"); + MenuItem *item; + + menu->AddItem(item = new MenuItem("Default")); + item->SetMarked(true); + item->Select(true); + + menu->AddItem(new MenuItem("Standard VGA")); + + video_mode *mode = NULL; + while ((mode = (video_mode *)list_get_next_item(&sModeList, mode)) != NULL) { + char label[64]; + sprintf(label, "%ldx%ld %ld bit", mode->width, mode->height, mode->bits_per_pixel); + + menu->AddItem(item = new MenuItem(label)); + item->SetData(mode); + } + + menu->AddSeparatorItem(); + menu->AddItem(item = new MenuItem("Return to main menu")); + item->SetType(MENU_ITEM_NO_CHOICE); + + return menu; +} + + +// #pragma mark - + + extern "C" void platform_switch_to_logo(void) { @@ -305,37 +358,6 @@ platform_switch_to_text_mode(void) } -// #pragma mark - - - -Menu * -video_mode_menu() -{ - Menu *menu = new Menu(CHOICE_MENU, "Select video mode:"); - MenuItem *item; - - menu->AddItem(item = new MenuItem("Default")); - item->SetMarked(true); - item->Select(true); - - menu->AddItem(new MenuItem("Standard VGA")); - - video_mode *mode = NULL; - while ((mode = (video_mode *)list_get_next_item(&sModeList, mode)) != NULL) { - char label[64]; - sprintf(label, "%ldx%ld %ld bit", mode->width, mode->height, mode->bits_per_pixel); - - menu->AddItem(item = new MenuItem(label)); - item->SetData(mode); - } - - menu->AddSeparatorItem(); - menu->AddItem(item = new MenuItem("Return to main manu")); - - return menu; -} - - extern "C" status_t platform_init_video(void) { diff --git a/src/kernel/boot/platform/bios_ia32/video.h b/src/kernel/boot/platform/bios_ia32/video.h index cf7cd8cba9..37cd88782c 100644 --- a/src/kernel/boot/platform/bios_ia32/video.h +++ b/src/kernel/boot/platform/bios_ia32/video.h @@ -1,3 +1,7 @@ +/* +** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the Haiku License. +*/ #ifndef VIDEO_H #define VIDEO_H @@ -5,12 +9,10 @@ #include -#ifdef __cplusplus class Menu; +class MenuItem; + +bool video_mode_hook(Menu *menu, MenuItem *item); Menu *video_mode_menu(); -extern "C" -#endif -status_t video_init(void); - #endif /* VIDEO_H */