--- deliantra/Deliantra-Client/DC/UI.pm 2006/06/01 04:10:29 1.267 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/06/01 05:04:41 1.268 @@ -173,8 +173,8 @@ for my $widget (values %WIDGET) { if ($widget->{is_toplevel}) { - $widget->{x} += $widget->{w} * 0.5 if $widget->{x} =~ /^[0-9.]+$/; - $widget->{y} += $widget->{h} * 0.5 if $widget->{y} =~ /^[0-9.]+$/; + $widget->{x} += int $widget->{w} * 0.5 if $widget->{x} =~ /^[0-9.]+$/; + $widget->{y} += int $widget->{h} * 0.5 if $widget->{y} =~ /^[0-9.]+$/; $widget->{x} = int 0.5 + $widget->{x} * $sx if $widget->{x} =~ /^[0-9.]+$/; $widget->{w} = int 0.5 + $widget->{w} * $sx if exists $widget->{w}; @@ -183,8 +183,8 @@ $widget->{h} = int 0.5 + $widget->{h} * $sy if exists $widget->{h}; $widget->{force_h} = int 0.5 + $widget->{force_h} * $sy if exists $widget->{force_h}; - $widget->{x} -= $widget->{w} * 0.5 if $widget->{x} =~ /^[0-9.]+$/; - $widget->{y} -= $widget->{h} * 0.5 if $widget->{y} =~ /^[0-9.]+$/; + $widget->{x} -= int $widget->{w} * 0.5 if $widget->{x} =~ /^[0-9.]+$/; + $widget->{y} -= int $widget->{h} * 0.5 if $widget->{y} =~ /^[0-9.]+$/; } } @@ -531,13 +531,15 @@ return unless $self->{h} && $self->{w}; + # update screen rectangle local $draw_x = $draw_x + $self->{x}; local $draw_y = $draw_y + $self->{y}; + local $draw_w = $draw_x + $self->{w}; + local $draw_h = $draw_y + $self->{h}; - return if $draw_x + $self->{w} < 0; - return if $draw_x >= $draw_w; - return if $draw_y + $self->{h} < 0; - return if $draw_y >= $draw_h; + # skip widgets that are entirely outside the drawing area + return if ($draw_x + $self->{w} < 0) || ($draw_x >= $draw_w) + || ($draw_y + $self->{h} < 0) || ($draw_y >= $draw_h); glPushMatrix; glTranslate $self->{x}, $self->{y}, 0;