--- deliantra/Deliantra-Client/DC/UI.pm 2006/06/05 02:28:30 1.283 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/06/05 03:06:04 1.284 @@ -5,6 +5,7 @@ use Scalar::Util (); use List::Util (); +use Event; use CFClient; use CFClient::Texture; @@ -18,30 +19,7 @@ our %WIDGET; # all widgets, weak-referenced -sub get_layout { - my $layout; - - for (grep { $_->{name} } values %WIDGET) { - my $win = $layout->{$_->{name}} = { }; - - $win->{x} = ($_->{x} + $_->{w} * 0.5) / $::WIDTH if $_->{x} =~ /^[0-9.]+$/; - $win->{y} = ($_->{y} + $_->{h} * 0.5) / $::HEIGHT if $_->{y} =~ /^[0-9.]+$/; - $win->{w} = $_->{w} / $::WIDTH if defined $_->{w}; - $win->{h} = $_->{h} / $::HEIGHT if defined $_->{h}; - - $win->{show} = $_->{visible} && $_->{is_toplevel}; - } - - $layout -} - -sub set_layout { - my ($layout) = @_; - - $LAYOUT = $layout; -} - -sub check_tooltip { +our $TOOLTIP_WATCHER = Event->idle (min => 1/60, cb => sub { return if $ENV{CFPLUS_DEBUG} & 8; if (!$GRAB) { @@ -67,6 +45,29 @@ $TOOLTIP->hide; delete $TOOLTIP->{owner}; +}); + +sub get_layout { + my $layout; + + for (grep { $_->{name} } values %WIDGET) { + my $win = $layout->{$_->{name}} = { }; + + $win->{x} = ($_->{x} + $_->{w} * 0.5) / $::WIDTH if $_->{x} =~ /^[0-9.]+$/; + $win->{y} = ($_->{y} + $_->{h} * 0.5) / $::HEIGHT if $_->{y} =~ /^[0-9.]+$/; + $win->{w} = $_->{w} / $::WIDTH if defined $_->{w}; + $win->{h} = $_->{h} / $::HEIGHT if defined $_->{h}; + + $win->{show} = $_->{visible} && $_->{is_toplevel}; + } + + $layout +} + +sub set_layout { + my ($layout) = @_; + + $LAYOUT = $layout; } # class methods for events @@ -90,7 +91,7 @@ $GRAB = $widget; $GRAB->update if $GRAB; - check_tooltip; + $TOOLTIP_WATCHER->cb->(); } $BUTTON_STATE |= 1 << ($ev->{button} - 1); @@ -115,7 +116,7 @@ $grab->update if $grab; $GRAB->update if $GRAB; - check_tooltip; + $TOOLTIP_WATCHER->cb->(); } } @@ -131,7 +132,7 @@ $hover->update if $hover && $hover->{can_hover}; $HOVER->update if $HOVER && $HOVER->{can_hover}; - check_tooltip; + $TOOLTIP_WATCHER->start; } $HOVER->emit (mouse_motion => $ev, $HOVER->coord2local ($x, $y)) @@ -279,7 +280,7 @@ undef $GRAB if $GRAB == $self; undef $HOVER if $HOVER == $self; - CFClient::UI::check_tooltip + $CFClient::UI::TOOLTIP_WATCHER->cb->() if $TOOLTIP->{owner} == $self; $self->focus_out; @@ -401,7 +402,7 @@ if ($CFClient::UI::TOOLTIP->{owner} == $self) { delete $CFClient::UI::TOOLTIP->{owner}; - CFClient::UI::check_tooltip; + $CFClient::UI::TOOLTIP_WATCHER->cb->(); } }