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
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
** Copyright 2004, Axel Dörfler, [email protected]. All rights reserved.
|
** Copyright 2004, Axel Dörfler, [email protected]. 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();
|
menu->Hide();
|
||||||
|
|
||||||
run_menu(item->Submenu());
|
run_menu(item->Submenu());
|
||||||
|
if (item->Target() != NULL)
|
||||||
|
(*item->Target())(menu, item);
|
||||||
|
|
||||||
// restore current menu
|
// restore current menu
|
||||||
sMenuOffset = offset;
|
sMenuOffset = offset;
|
||||||
@@ -316,6 +318,7 @@ platform_add_menus(Menu *menu)
|
|||||||
switch (menu->Type()) {
|
switch (menu->Type()) {
|
||||||
case MAIN_MENU:
|
case MAIN_MENU:
|
||||||
menu->AddItem(item = new MenuItem("Select fail-safe video mode", video_mode_menu()));
|
menu->AddItem(item = new MenuItem("Select fail-safe video mode", video_mode_menu()));
|
||||||
|
item->SetTarget(video_mode_hook);
|
||||||
break;
|
break;
|
||||||
case SAFE_MODE_MENU:
|
case SAFE_MODE_MENU:
|
||||||
menu->AddItem(item = new MenuItem("Don't call the BIOS"));
|
menu->AddItem(item = new MenuItem("Don't call the BIOS"));
|
||||||
|
|||||||
@@ -241,6 +241,59 @@ vesa_set_palette(const uint8 *palette, int32 firstIndex, int32 numEntries)
|
|||||||
// #pragma mark -
|
// #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
|
extern "C" void
|
||||||
platform_switch_to_logo(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
|
extern "C" status_t
|
||||||
platform_init_video(void)
|
platform_init_video(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2004, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the Haiku License.
|
||||||
|
*/
|
||||||
#ifndef VIDEO_H
|
#ifndef VIDEO_H
|
||||||
#define VIDEO_H
|
#define VIDEO_H
|
||||||
|
|
||||||
@@ -5,12 +9,10 @@
|
|||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
class Menu;
|
class Menu;
|
||||||
|
class MenuItem;
|
||||||
|
|
||||||
|
bool video_mode_hook(Menu *menu, MenuItem *item);
|
||||||
Menu *video_mode_menu();
|
Menu *video_mode_menu();
|
||||||
|
|
||||||
extern "C"
|
|
||||||
#endif
|
|
||||||
status_t video_init(void);
|
|
||||||
|
|
||||||
#endif /* VIDEO_H */
|
#endif /* VIDEO_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user