--- deliantra/Deliantra-Client/DC/MapWidget.pm 2006/04/22 21:47:45 1.8 +++ deliantra/Deliantra-Client/DC/MapWidget.pm 2006/04/24 11:54:26 1.14 @@ -1,6 +1,7 @@ package CFClient::MapWidget; use strict; +use utf8; use List::Util qw(min max); @@ -82,11 +83,13 @@ glNewList $self->{list}; if ($::MAP) { - my $sw = int $::WIDTH / 32; - my $sh = int $::HEIGHT / 32; + my $sw = int $::WIDTH / (32 * $::CFG->{map_scale}); + my $sh = int $::HEIGHT / (32 * $::CFG->{map_scale}); - my $sx = $::CFG->{map_shift_x}; my $sx0 = $sx & 31; $sx = ($sx - $sx0) / 32; - my $sy = $::CFG->{map_shift_y}; my $sy0 = $sy & 31; $sy = ($sy - $sy0) / 32; + glScale $::CFG->{map_scale}, $::CFG->{map_scale}; + + my $sx = $::CFG->{map_shift_x} / $::CFG->{map_scale}; my $sx0 = $sx & 31; $sx = ($sx - $sx0) / 32; + my $sy = $::CFG->{map_shift_y} / $::CFG->{map_scale}; my $sy0 = $sy & 31; $sy = ($sy - $sy0) / 32; glTranslate $sx0 - 32, $sy0 - 32, 0; @@ -214,6 +217,8 @@ if ($sym == CFClient::SDLK_KP5) { $::CONN->user_send ("stay fire"); + } elsif ($sym == ord ",") { + $::CONN->user_send ("take"); } elsif ($sym == ord "a") { $::CONN->user_send ("apply"); } elsif ($sym == ord "'") { @@ -236,7 +241,8 @@ command => $self->{command}, can_focus => 1, connect_execute => sub { - $::CONN->user_send ($_[1]); + # todo: support callback instead of user_send + $::CONN->user_send ($_[1][1]); }, connect_close => sub { (delete $self->{command_widget})->hide; @@ -244,6 +250,7 @@ }, ; $self->{command_widget}->key_down ($ev); + return unless $self->{command_widget}; $self->{command_widget}->show; $self->{command_widget}->focus_in; } @@ -264,12 +271,11 @@ } sub add_command { - my ($self, $command, $widget, $cb) = @_; + my ($self, $command, $tooltip, $widget, $cb) = @_; (my $abbrev = $command) =~ s/(\S)[^[:space:]_]*[[:space:]_]+/$1/g; - push @{$self->{command}}, [$abbrev, $command]; - #warn "$command|$abbrev|$widget\n";#d# + push @{$self->{command}}, [$abbrev, $command, $tooltip, $widget, $cb]; } package CFClient::MapWidget::Command; @@ -287,8 +293,9 @@ @_, children => [map CFClient::UI::Label->new ( - can_hover => 1, - fontsize => $_, + can_hover => 1, + can_events => 1, + fontsize => $_, ), 1, 1, 0.8, 0.8, 0.8, 0.8, 0.8 ], ); @@ -326,9 +333,10 @@ for (0..5) { $self->{children}[$_ + 1]->set_text ($found[$_] ? "$found[$_][0] ($found[$_][1][1])" : ""); + $self->{children}[$_ + 1]{tooltip} = ($found[$_] ? $found[$_][1][2] : ""); } - $self->{select} = $found[0][1][1] + $self->{select} = $found[0][1] if @found; if (@found > 6) { @@ -351,10 +359,14 @@ } } elsif ($ev->{sym} == 27) { $self->emit ("close"); - } elsif ($ev->{unicode}) { + return; + } elsif ((chr $ev->{unicode}) =~ /^[[:alpha:]]$/) { $self->{search} .= chr $ev->{unicode}; $self->update_labels; } + + length $self->{search} + or $self->emit ("close"); } 1