ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/UI.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/UI.pm (file contents):
Revision 1.252 by root, Sun May 28 23:21:28 2006 UTC vs.
Revision 1.255 by root, Mon May 29 02:01:56 2006 UTC

40 if (!$GRAB) { 40 if (!$GRAB) {
41 for (my $widget = $HOVER; $widget; $widget = $widget->{parent}) { 41 for (my $widget = $HOVER; $widget; $widget = $widget->{parent}) {
42 if (length $widget->{tooltip}) { 42 if (length $widget->{tooltip}) {
43 43
44 if ($TOOLTIP->{owner} != $widget) { 44 if ($TOOLTIP->{owner} != $widget) {
45 $TOOLTIP->hide;
46
45 $TOOLTIP->{owner} = $widget; 47 $TOOLTIP->{owner} = $widget;
46 48
47 my $tip = $widget->{tooltip}; 49 my $tip = $widget->{tooltip};
48 50
49 $tip = $tip->($widget) if CODE:: eq ref $tip; 51 $tip = $tip->($widget) if CODE:: eq ref $tip;
50 52
51 $TOOLTIP->set_tooltip_from ($widget); 53 $TOOLTIP->set_tooltip_from ($widget);
52
53 my ($x, $y) = $widget->coord2global ($widget->{w}, 0);
54
55 ($x, $y) = $widget->coord2global (-$TOOLTIP->{w}, 0)
56 if $x + $TOOLTIP->{w} > $::WIDTH;
57
58 $TOOLTIP->move ($x, $y);
59 $TOOLTIP->show; 54 $TOOLTIP->show;
60 } 55 }
61 56
62 return; 57 return;
63 } 58 }
1005 1000
1006our @ISA = CFClient::UI::Bin::; 1001our @ISA = CFClient::UI::Bin::;
1007 1002
1008use CFClient::OpenGL; 1003use CFClient::OpenGL;
1009 1004
1010my @tex = 1005my $bg =
1006 new_from_file CFClient::Texture CFClient::find_rcfile "d1_bg.png",
1007 mipmap => 1, wrap => 1;
1008
1009my @border =
1011 map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 } 1010 map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
1012 qw(d1_bg.png d1_border_top.png d1_border_right.png d1_border_left.png d1_border_bottom.png); 1011 qw(d1_border_top.png d1_border_right.png d1_border_left.png d1_border_bottom.png);
1013 1012
1014sub new { 1013sub new {
1015 my $class = shift; 1014 my $class = shift;
1016 1015
1017 my $self = $class->SUPER::new ( 1016 my $self = $class->SUPER::new (
1132 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; 1131 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE;
1133 1132
1134 my $border = $self->border; 1133 my $border = $self->border;
1135 1134
1136 glColor @{ $self->{border_bg} }; 1135 glColor @{ $self->{border_bg} };
1137 $tex[1]->draw_quad_alpha (0, 0, $w, $border); 1136 $border[0]->draw_quad_alpha (0, 0, $w, $border);
1138 $tex[3]->draw_quad_alpha (0, $border, $border, $ch); 1137 $border[1]->draw_quad_alpha (0, $border, $border, $ch);
1139 $tex[2]->draw_quad_alpha ($w - $border, $border, $border, $ch); 1138 $border[2]->draw_quad_alpha ($w - $border, $border, $border, $ch);
1140 $tex[4]->draw_quad_alpha (0, $h - $border, $w, $border); 1139 $border[3]->draw_quad_alpha (0, $h - $border, $w, $border);
1141 1140
1142 if (@{$self->{bg}} < 4 || $self->{bg}[3]) { 1141 if (@{$self->{bg}} < 4 || $self->{bg}[3]) {
1143 my $bg = $tex[0]; 1142 glColor @{ $self->{bg} };
1144 1143
1145 # TODO: repeat texture not scale 1144 # TODO: repeat texture not scale
1145 # solve this better(?)
1146 my $rep_x = $cw / $bg->{w}; 1146 $bg->{s} = $cw / $bg->{w};
1147 my $rep_y = $ch / $bg->{h}; 1147 $bg->{t} = $ch / $bg->{h};
1148
1149 glColor @{ $self->{bg} };
1150
1151 $bg->{s} = $rep_x;
1152 $bg->{t} = $rep_y;
1153 $bg->{wrap_mode} = 1;
1154 $bg->draw_quad_alpha ($border, $border, $cw, $ch); 1148 $bg->draw_quad_alpha ($border, $border, $cw, $ch);
1155 } 1149 }
1156 1150
1157 glDisable GL_TEXTURE_2D; 1151 glDisable GL_TEXTURE_2D;
1158 1152
2639 my ($self, $w, $h, $changed) = @_; 2633 my ($self, $w, $h, $changed) = @_;
2640 2634
2641 return unless $changed; 2635 return unless $changed;
2642 2636
2643 $self->SUPER::size_allocate ($w - 4, $h - 4, $changed); 2637 $self->SUPER::size_allocate ($w - 4, $h - 4, $changed);
2638}
2639
2640sub visibility_change {
2641 my ($self, $visible) = @_;
2642
2643 return unless $visible;
2644
2645 $self->{root}->on_post_alloc ("move_$self" => sub {
2646 my $widget = $self->{owner}
2647 or return;
2648
2649 my ($x, $y) = $widget->coord2global ($widget->{w}, 0);
2650
2651 ($x, $y) = $widget->coord2global (-$self->{w}, 0)
2652 if $x + $self->{w} > $::WIDTH;
2653
2654 $self->move ($x, $y);
2655 });
2644} 2656}
2645 2657
2646sub _draw { 2658sub _draw {
2647 my ($self) = @_; 2659 my ($self) = @_;
2648 2660

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines