--- deliantra/Deliantra-Client/bin/deliantra 2008/03/20 22:28:35 1.28 +++ deliantra/Deliantra-Client/bin/deliantra 2008/03/25 02:12:35 1.31 @@ -192,6 +192,7 @@ our $ALT_ENTER_MESSAGE; our $STATUSBOX; +our $MODBOX; our $DEBUG_STATUS; our $INV; @@ -212,6 +213,32 @@ $MESSAGE_DIST->message (@_); } +sub update_modbox { + my $mod = DC::SDL_GetModState; + + my $markup; + + $markup .= $mod & DC::KMOD_CTRL + ? ($MAPWIDGET->{ctrl} ? "[REPEAT]" : "[REPEAT]") + : "[ once ]"; + + $markup .= $mod & DC::KMOD_SHIFT + ? ($MAPWIDGET->{shft} ? "[FIRE]" : "[FIRE]") + : "[move]"; + + $markup .= $mod & (DC::KMOD_ALT | DC::KMOD_META) + ? "[ALT]" + : "[alt]"; + + $markup .= $mod & DC::KMOD_NUM + ? "[NUM]" + : "[num]"; + + # around next statement works around some bug that keeps the + # "font =>" from being used on windows + $MODBOX->set_markup ("$markup"); +} + ############################################################################# #TODO: maybe move into own audio module... @@ -1949,7 +1976,7 @@ for my $node (@path) { $buttons->add (new DC::UI::Button - text => $node->{kw}[0], + text => $node->[DC::Pod::N_KW][0], tooltip => "go to " . (DC::asxml DC::Pod::full_path $node) . "", on_activate => sub { push @history, [$curnode, $viewer->current_paragraph] if $curnode; @future = (); @@ -1959,7 +1986,7 @@ $buttons->add (new DC::UI::Label text => "/"); } - $buttons->add (new DC::UI::Label text => $node->{kw}[0], padding_x => 4, padding_y => 4); + $buttons->add (new DC::UI::Label text => $node->[DC::Pod::N_KW][0], padding_x => 4, padding_y => 4); $curnode = $node; @@ -2148,15 +2175,35 @@ $DEBUG_STATUS->show; $STATUSBOX = new DC::UI::Statusbox; - $STATUSBOX->add ("Use Alt-Enter to toggle fullscreen mode", timeout => 864000, pri => -100, color => [1, 1, 1, 0.8]); + + $MODBOX = new DC::UI::Label + can_events => 1, + can_hover => 1, + markup => "", + align => 0, + font => $FONT_FIXED, + tooltip => "#modifier_box", + tooltip_width => 0.67, + ; + + update_modbox; (new DC::UI::Frame bg => [0, 0, 0, 0.4], force_x => 0, force_y => "max", - child => $STATUSBOX, + child => (my $LR = new DC::UI::VBox), )->show; + $LR->add ($STATUSBOX); + $LR->add ($MODBOX); + $LR->add (new DC::UI::Label + align => 0, + markup => "Use Alt-Enter to toggle fullscreen mode", + fontsize => 0.5, + fg => [1, 1, 0, 0.7], + ); + DC::UI::Toplevel->new ( title => "Minimap", name => "mapmap", @@ -2347,10 +2394,14 @@ video_shutdown; video_init; } else { - DC::UI::feed_sdl_key_down_event ($_[0]); + &DC::UI::feed_sdl_key_down_event; } + update_modbox; + }, + DC::SDL_KEYUP => sub { + &DC::UI::feed_sdl_key_up_event; + update_modbox; }, - DC::SDL_KEYUP => \&DC::UI::feed_sdl_key_up_event, DC::SDL_MOUSEMOTION => \&DC::UI::feed_sdl_motion_event, DC::SDL_MOUSEBUTTONDOWN => \&DC::UI::feed_sdl_button_down_event, DC::SDL_MOUSEBUTTONUP => \&DC::UI::feed_sdl_button_up_event, @@ -2459,12 +2510,12 @@ DC::add_font $_ for @fonts; - DC::pango_init; - $FONT_PROP = new_from_file DC::Font $fonts[0]; $FONT_FIXED = new_from_file DC::Font $fonts[1]; $FONT_PROP->make_default; + + DC::pango_init; } # compare mono (ft) vs. rgba (cairo)