--- deliantra/Deliantra-Client/DC/UI.pm 2006/04/23 00:08:29 1.150 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/04/23 00:57:39 1.151 @@ -10,8 +10,30 @@ our ($FOCUS, $HOVER, $GRAB); # various widgets our $ROOT; +our $TOOLTIP; our $BUTTON_STATE; +sub check_tooltip { + if (!$GRAB) { + for (my $widget = $HOVER; $widget; $widget = $widget->{parent}) { + if (exists $widget->{tooltip}) { + + if ($TOOLTIP->{owner} != $widget) { + $TOOLTIP->{owner} = $widget; + $TOOLTIP->set_text ($widget->{tooltip}); + $TOOLTIP->move ($widget->coord2global ($widget->{w}, 0)); + $TOOLTIP->show; + } + + return; + } + } + } + + $TOOLTIP->hide; + delete $TOOLTIP->{owner}; +} + # class methods for events sub feed_sdl_key_down_event { $FOCUS->key_down ($_[0]) if $FOCUS; @@ -30,6 +52,8 @@ $GRAB = $widget; $GRAB->update if $GRAB; + + check_tooltip; } $BUTTON_STATE |= 1 << ($ev->{button} - 1); @@ -51,6 +75,8 @@ my $grab = $GRAB; undef $GRAB; $grab->update if $grab; $GRAB->update if $GRAB; + + check_tooltip; } } @@ -65,6 +91,8 @@ $hover->update if $hover && $hover->{can_hover}; $HOVER->update if $HOVER && $HOVER->{can_hover}; + + check_tooltip; } $HOVER->mouse_motion ($ev, $HOVER->coord2local ($x, $y)) if $HOVER; @@ -435,6 +463,7 @@ $self->{children} = [ grep $_ != $child, @{ $self->{children} } ]; $self->check_size; + $self->update; } sub find_widget { @@ -1687,26 +1716,20 @@ our @ISA = CFClient::UI::VBox::; sub new { - my ($class, %arg) = shift; + my ($class, %arg) = @_; my $self = $class->SUPER::new ( - @_, + tooltip => $arg{type}, + %arg, ); - $self->{value} = new CFClient::UI::Label valign => 1, align => 0, template => "999"; - $self->{max} = new CFClient::UI::Label valign => 1, align => 0, template => "999"; - $self->add ($self->{value}); + $self->add ($self->{value} = new CFClient::UI::Label valign => +1, align => 0, template => "999"); $self->add ($self->{gauge} = new CFClient::UI::VGauge type => $self->{type}, expand => 1); - $self->add ($self->{max}); + $self->add ($self->{max} = new CFClient::UI::Label valign => -1, align => 0, template => "999"); $self } -sub size_request { - my ($self) = @_; - (($self->{max}->size_request)[0], 0) -} - sub set_fontsize { my ($self, $fsize) = @_; @@ -2192,6 +2215,7 @@ package CFClient::UI; $ROOT = new CFClient::UI::Root; +$TOOLTIP = new CFClient::UI::Label fontsize => 0.8, can_events => 0; 1