--- deliantra/Deliantra-Client/DC/UI.pm 2006/05/26 20:50:35 1.241 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/05/27 20:00:40 1.242 @@ -11,12 +11,31 @@ our ($FOCUS, $HOVER, $GRAB); # various widgets +our $LAYOUT; our $ROOT; our $TOOLTIP; our $BUTTON_STATE; our %WIDGET; # all widgets, weak-referenced +sub get_layout { + for (grep { $_->{name} } values %WIDGET) { + $LAYOUT->{$_->{name}} = { + x => $_->{x} / $::WIDTH, + y => $_->{y} / $::HEIGHT, + w => $_->{w} / $::WIDTH, + h => $_->{h} / $::HEIGHT + }; + } + + return $LAYOUT; +} + +sub set_layout { + my ($layout) = @_; + $LAYOUT = $layout; +} + sub check_tooltip { if (!$GRAB) { for (my $widget = $HOVER; $widget; $widget = $widget->{parent}) { @@ -196,6 +215,13 @@ Scalar::Util::weaken ($CFClient::UI::WIDGET{$self+0} = $self); + if (my $layout = $CFClient::UI::LAYOUT->{$self->{name}}) { + $self->{user_x} = $layout->{x} * $::WIDTH; + $self->{user_y} = $layout->{y} * $::HEIGHT; + $self->{user_w} = ($layout->{w} != 0 ? $layout->{w} : 1) * $::WIDTH; + $self->{user_h} = ($layout->{h} != 0 ? $layout->{h} : 1) * $::HEIGHT; + } + $self }