1 | package CFClient::UI; |
1 | package CFClient::UI; |
2 | |
2 | |
3 | use strict; |
3 | use strict; |
4 | |
4 | |
5 | use Scalar::Util; |
5 | use Scalar::Util (); |
|
|
6 | use List::Util (); |
6 | |
7 | |
7 | use CFClient; |
8 | use CFClient; |
8 | |
9 | |
9 | our ($FOCUS, $HOVER, $GRAB); # various widgets |
10 | our ($FOCUS, $HOVER, $GRAB); # various widgets |
10 | |
11 | |
… | |
… | |
167 | if ($self == $HOVER) { |
168 | if ($self == $HOVER) { |
168 | my ($x, $y) = @$self{qw(x y)}; |
169 | my ($x, $y) = @$self{qw(x y)}; |
169 | |
170 | |
170 | glColor 1, 1, 1, 0.1; |
171 | glColor 1, 1, 1, 0.1; |
171 | glEnable GL_BLEND; |
172 | glEnable GL_BLEND; |
|
|
173 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
172 | glBegin GL_QUADS; |
174 | glBegin GL_QUADS; |
173 | glVertex $x , $y; |
175 | glVertex $x , $y; |
174 | glVertex $x + $self->{w}, $y; |
176 | glVertex $x + $self->{w}, $y; |
175 | glVertex $x + $self->{w}, $y + $self->{h}; |
177 | glVertex $x + $self->{w}, $y + $self->{h}; |
176 | glVertex $x , $y + $self->{h}; |
178 | glVertex $x , $y + $self->{h}; |
… | |
… | |
451 | |
453 | |
452 | my $tex = $self->{texture} |
454 | my $tex = $self->{texture} |
453 | or return; |
455 | or return; |
454 | |
456 | |
455 | glEnable GL_BLEND; |
457 | glEnable GL_BLEND; |
|
|
458 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
456 | glEnable GL_TEXTURE_2D; |
459 | glEnable GL_TEXTURE_2D; |
457 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
460 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
458 | |
461 | |
459 | $tex->draw_quad (0, 0, $w, $h); |
462 | $tex->draw_quad (0, 0, $w, $h); |
460 | |
463 | |
… | |
… | |
561 | |
564 | |
562 | my ($w, $h) = ($self->{w}, $self->{h}); |
565 | my ($w, $h) = ($self->{w}, $self->{h}); |
563 | my ($cw, $ch) = ($self->child->{w}, $self->child->{h}); |
566 | my ($cw, $ch) = ($self->child->{w}, $self->child->{h}); |
564 | |
567 | |
565 | glEnable GL_BLEND; |
568 | glEnable GL_BLEND; |
|
|
569 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
566 | glEnable GL_TEXTURE_2D; |
570 | glEnable GL_TEXTURE_2D; |
567 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
|
|
568 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
571 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
569 | |
572 | |
570 | my $top = $tex[1]; |
573 | my $top = $tex[1]; |
571 | $top->draw_quad (0, 0, $w, $top->{h}); |
574 | $top->draw_quad (0, 0, $w, $top->{h}); |
572 | |
575 | |
… | |
… | |
836 | sub _draw { |
839 | sub _draw { |
837 | my ($self) = @_; |
840 | my ($self) = @_; |
838 | |
841 | |
839 | my $tex = $self->{texture} ||= do { |
842 | my $tex = $self->{texture} ||= do { |
840 | $self->{layout}->set_width ($self->{w}); |
843 | $self->{layout}->set_width ($self->{w}); |
841 | new_from_layout CFClient::Texture $self->{layout}; |
844 | new_from_layout CFClient::Texture $self->{layout} |
842 | }; |
845 | }; |
843 | |
846 | |
844 | glEnable GL_BLEND; |
847 | glEnable GL_BLEND; |
|
|
848 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
845 | glEnable GL_TEXTURE_2D; |
849 | glEnable GL_TEXTURE_2D; |
846 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
|
|
847 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; |
850 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; |
848 | |
851 | |
849 | glColor @{$self->{fg}}; |
852 | glColor @{$self->{fg}}; |
850 | |
853 | |
851 | my $x = |
854 | my $x = |
852 | $self->{align} < 0 ? 0 |
855 | $self->{align} < 0 ? 0 |
853 | : $self->{align} > 0 ? $self->{w} - $self->{texture}{w} |
856 | : $self->{align} > 0 ? $self->{w} - $tex->{w} |
854 | : ($self->{w} + $self->{texture}{w}) * 0.5; |
857 | : ($self->{w} - $tex->{w}) * 0.5; |
855 | |
858 | |
856 | $tex->draw_quad ($x, 0); |
859 | $tex->draw_quad ($x, 0); |
857 | |
860 | |
|
|
861 | glDisable GL_TEXTURE_2D; |
858 | glDisable GL_BLEND; |
862 | glDisable GL_BLEND; |
859 | glDisable GL_TEXTURE_2D; |
863 | glGetError and die; |
860 | } |
864 | } |
861 | |
865 | |
862 | ############################################################################# |
866 | ############################################################################# |
863 | |
867 | |
864 | package CFClient::UI::Entry; |
868 | package CFClient::UI::Entry; |
… | |
… | |
1016 | package CFClient::UI::Slider; |
1020 | package CFClient::UI::Slider; |
1017 | |
1021 | |
1018 | use strict; |
1022 | use strict; |
1019 | |
1023 | |
1020 | use SDL::OpenGL; |
1024 | use SDL::OpenGL; |
1021 | use SDL::OpenGL::Constants; |
|
|
1022 | |
1025 | |
1023 | our @ISA = CFClient::UI::DrawBG::; |
1026 | our @ISA = CFClient::UI::DrawBG::; |
1024 | |
1027 | |
1025 | sub size_request { |
1028 | sub size_request { |
1026 | my ($self) = @_; |
1029 | my ($self) = @_; |
… | |
… | |
1133 | |
1136 | |
1134 | use List::Util qw(min max); |
1137 | use List::Util qw(min max); |
1135 | |
1138 | |
1136 | use SDL; |
1139 | use SDL; |
1137 | use SDL::OpenGL; |
1140 | use SDL::OpenGL; |
1138 | use SDL::OpenGL::Constants; |
|
|
1139 | |
1141 | |
1140 | our @ISA = CFClient::UI::Base::; |
1142 | our @ISA = CFClient::UI::Base::; |
1141 | |
1143 | |
1142 | sub new { |
1144 | sub new { |
1143 | my $class = shift; |
1145 | my $class = shift; |
… | |
… | |
1165 | |
1167 | |
1166 | sub update { |
1168 | sub update { |
1167 | my ($self) = @_; |
1169 | my ($self) = @_; |
1168 | |
1170 | |
1169 | $self->{need_update} = 1; |
1171 | $self->{need_update} = 1; |
|
|
1172 | $self->SUPER::update; |
1170 | } |
1173 | } |
1171 | |
1174 | |
1172 | sub _draw { |
1175 | sub _draw { |
1173 | my ($self) = @_; |
1176 | my ($self) = @_; |
1174 | |
1177 | |
… | |
… | |
1197 | $yofs = $self->{yofs} = min $my, max $my + $::CONN->{maph} - $sh + 1, $self->{yofs}; |
1200 | $yofs = $self->{yofs} = min $my, max $my + $::CONN->{maph} - $sh + 1, $self->{yofs}; |
1198 | } |
1201 | } |
1199 | |
1202 | |
1200 | glEnable GL_TEXTURE_2D; |
1203 | glEnable GL_TEXTURE_2D; |
1201 | glEnable GL_BLEND; |
1204 | glEnable GL_BLEND; |
|
|
1205 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
1202 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
1206 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE; |
1203 | |
1207 | |
1204 | my $sw4 = ($sw + 3) & ~3; |
1208 | my $sw4 = ($sw + 3) & ~3; |
1205 | my $darkness = "\x00" x ($sw4 * $sh); |
1209 | my $darkness = "\x00" x ($sw4 * $sh); |
1206 | |
1210 | |
… | |
… | |
1236 | # |
1240 | # |
1237 | # $lighting = $pb->get_pixels; |
1241 | # $lighting = $pb->get_pixels; |
1238 | # $lighting =~ s/(.)../$1/gs; |
1242 | # $lighting =~ s/(.)../$1/gs; |
1239 | # } |
1243 | # } |
1240 | |
1244 | |
1241 | glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; |
|
|
1242 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; |
1245 | glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; |
1243 | |
1246 | |
1244 | $darkness = new CFClient::Texture |
1247 | $darkness = new CFClient::Texture |
1245 | width => $sw4, |
1248 | w => $sw4, |
1246 | height => $sh, |
1249 | h => $sh, |
1247 | data => $darkness, |
1250 | data => $darkness, |
1248 | internalformat => GL_ALPHA, |
1251 | internalformat => GL_ALPHA, |
1249 | format => GL_ALPHA; |
1252 | format => GL_ALPHA; |
1250 | |
1253 | |
1251 | glColor 0.45, 0.45, 0.45, 1; |
1254 | glColor 0.45, 0.45, 0.45, 1; |