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.68 by root, Tue Apr 11 17:02:36 2006 UTC vs.
Revision 1.71 by root, Tue Apr 11 17:39:39 2006 UTC

992our @ISA = CFClient::Widget::DrawBG::; 992our @ISA = CFClient::Widget::DrawBG::;
993 993
994sub size_request { 994sub size_request {
995 my ($self) = @_; 995 my ($self) = @_;
996 996
997 my $w = 997 my $w = 50;
998 my $h = 10; 998 my $h = 10;
999 999
1000 $self->{vertical} ? ($h, $w) : ($w, $h) 1000 $self->{vertical} ? ($h, $w) : ($w, $h)
1001} 1001}
1002 1002
1007 1007
1008 $class->SUPER::new ( 1008 $class->SUPER::new (
1009 fg => [1, 1, 1], 1009 fg => [1, 1, 1],
1010 active_fg => [0, 0, 0], 1010 active_fg => [0, 0, 0],
1011 range => [0, 0, 100, 10], 1011 range => [0, 0, 100, 10],
1012 vertical => 0, 1012 vertical => 1,
1013 @_ 1013 @_
1014 ) 1014 )
1015} 1015}
1016 1016
1017sub button_down {
1018 my ($self, $ev, $x, $y) = @_;
1019
1020 $self->SUPER::button_down ($ev, $x, $y);
1021 $self->mouse_motion ($ev, $x, $y);
1022}
1023
1024sub mouse_motion {
1025 my ($self, $ev, $x, $y) = @_;
1026
1027 if ($GRAB == $self) {
1028 my ($value, $lo, $hi, $page) = @{$self->{range}};
1029
1030 my ($x, $w) = $self->{vertical} ? ($y, $self->{h}) : ($x, $self->{w});
1031
1032 $x = $x * ($hi - $lo) / $w + $lo;
1033 $x = $lo if $x < $lo;
1034 $x = $hi - $page if $x > $hi - $page;
1035 $self->{range}[0] = $x;
1036
1037 $self->{changed}($x) if $self->{changed};
1038 $self->update;
1039 }
1040}
1041
1017sub _draw { 1042sub _draw {
1018 my ($self) = @_; 1043 my ($self) = @_;
1019 1044
1020 $self->SUPER::_draw (); 1045 $self->SUPER::_draw ();
1046
1047 glPushMatrix;
1021 1048
1022 my ($w, $h) = @$self{qw(w h)}; 1049 my ($w, $h) = @$self{qw(w h)};
1023 1050
1024 if ($self->{vertical}) { 1051 if ($self->{vertical}) {
1025 # draw a vertical slider like a rotated horizontal slider 1052 # draw a vertical slider like a rotated horizontal slider
1026 1053
1027 glTranslate 0, $self->{w};
1028 glRotate 90, 0, 0, 1; 1054 glRotate 90, 0, 0, 1;
1055 glTranslate 0, -$self->{w}, 0;
1029 1056
1030 ($w, $h) = ($h, $w); 1057 ($w, $h) = ($h, $w);
1031 } 1058 }
1032 1059
1033 my $fg = $FOCUS == $self ? $self->{active_fg} : $self->{fg}; 1060 my $fg = $FOCUS == $self ? $self->{active_fg} : $self->{fg};
1034 my $bg = $FOCUS == $self ? $self->{active_bg} : $self->{bg}; 1061 my $bg = $FOCUS == $self ? $self->{active_bg} : $self->{bg};
1062
1063 my ($value, $lo, $hi, $page) = @{$self->{range}};
1064
1065 $page = int $page * $w / ($hi - $lo);
1066 $value = int +($value - $lo) * $w / ($hi - $lo);
1067
1068 $w -= $page;
1069 $page &= ~1;
1070 glTranslate $page * 0.5, 0, 0;
1035 1071
1036 glColor @$fg; 1072 glColor @$fg;
1037 glBegin GL_LINES; 1073 glBegin GL_LINES;
1038 glVertex 0, 0; glVertex 0, $h; 1074 glVertex 0, 0; glVertex 0, $h;
1039 glVertex $w - 1, 0; glVertex $w - 1, $h; 1075 glVertex $w - 1, 0; glVertex $w - 1, $h;
1040 glVertex 0, $h * 0.5; glVertex $w, $h * 0.5; 1076 glVertex 0, $h * 0.5; glVertex $w, $h * 0.5;
1041 glEnd; 1077 glEnd;
1078
1079 my $knob_a = $value - $page * 0.5;
1080 my $knob_b = $value + $page * 0.5;
1081
1082 glBegin GL_QUADS;
1083 glColor @$fg;
1084 glVertex $knob_a, 0;
1085 glVertex $knob_a, $h;
1086 glVertex $knob_b, $h;
1087 glVertex $knob_b, 0;
1088
1089 if ($knob_a < $knob_b - 2) {
1090 glColor @$bg;
1091 glVertex $knob_a + 1, 1;
1092 glVertex $knob_a + 1, $h - 1;
1093 glVertex $knob_b - 1, $h - 1;
1094 glVertex $knob_b - 1, 1;
1095 }
1096 glEnd;
1097
1098 glPopMatrix;
1042} 1099}
1043 1100
1044############################################################################# 1101#############################################################################
1045 1102
1046package CFClient::Widget::MapWidget; 1103package CFClient::Widget::MapWidget;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines