use strict; use warnings; use SDLx::App; use lib 'lib'; use SDLx::Widget::Menu; my $app = SDLx::App->new( w => 800, h => 600, eoq => 1, ); my $show_menu = 1; my $menu_event_id; my $menu = SDLx::Widget::Menu->new( topleft => [100, 230] )->items( 'Some Option' => sub { }, 'Open Submenu' => \&open_submenu, 'Some Other Option' => sub { }, 'Quit' => sub { $show_menu = 0; }, ); my $show_submenu = 0; my $submenu = SDLx::Widget::Menu->new( topleft => [100, 530] )->items( 'Item 1' => sub { }, 'Item 2' => sub { }, 'Item 3' => sub { }, 'Back' => sub { $show_submenu = 0 }, ); open_menu(); $app->add_show_handler( sub { $app->draw_rect( undef, undef ); $menu->render($app); $submenu->render($app) if $show_submenu; $app->update; } ); $app->run; exit; sub open_submenu { $submenu->selected( undef ); $show_submenu = 1; $app->remove_event_handler( $menu_event_id ); my $submenu_id; $submenu_id = $app->add_event_handler( sub { $submenu->event_hook( $_[0] ); if ($show_submenu == 0) { $app->remove_event_handler( $submenu_id ); open_menu(); } }); } sub open_menu { $menu->selected( undef ); $menu_event_id = $app->add_event_handler( sub { $menu->event_hook( $_[0] ); $app->stop if $show_menu == 0; }); }