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.18 by root, Sat Apr 8 13:36:26 2006 UTC vs.
Revision 1.22 by elmex, Sat Apr 8 18:18:09 2006 UTC

39 $self->{x} = $x; 39 $self->{x} = $x;
40 $self->{y} = $y; 40 $self->{y} = $y;
41 $self->{z} = $z if defined $z; 41 $self->{z} = $z if defined $z;
42} 42}
43 43
44sub needs_redraw {
45 0
46}
47
44sub size_request { 48sub size_request {
45 die "size_request is abtract"; 49 die "size_request is abtract";
46} 50}
47 51
48sub focus_in { 52sub focus_in {
109sub get { $_[0]->{child} } 113sub get { $_[0]->{child} }
110 114
111sub size_request { $_[0]->{child}->size_request if $_[0]->{child} } 115sub size_request { $_[0]->{child}->size_request if $_[0]->{child} }
112 116
113sub _draw { die "Containers can't be drawn!" } 117sub _draw { die "Containers can't be drawn!" }
118
119package Crossfire::Client::Widget::Window;
120
121our @ISA = Crossfire::Client::Widget::Container::;
122
123use SDL::OpenGL;
124
125sub add {
126 my ($self, $chld) = @_;
127 $self->SUPER::add ($chld);
128 $self->render_chld;
129}
130
131sub render_chld {
132 my ($self) = @_;
133 my $chld = $self->get;
134 my ($w, $h) = $self->size_request;
135
136 $w = $h = 256;
137
138 $self->{texture} =
139 Crossfire::Client::Texture->new_from_opengl (
140 $w, $h, sub {
141 glPushMatrix;
142 glLoadIdentity;
143 $chld->_draw;
144 glPopMatrix;
145 }
146 );
147 $self->{texture}->upload;
148}
149
150sub size_request {
151 my ($self) = @_;
152 my $chld = $self->get
153 or return (0, 0);
154 $chld->size_request
155}
156
157sub _draw {
158 my ($self) = @_;
159
160 my ($w, $h) = $self->size_request;
161 my $tex = $self->{texture}
162 or return;
163
164 glEnable GL_BLEND;
165 glEnable GL_TEXTURE_2D;
166 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE;
167 glBindTexture GL_TEXTURE_2D, $tex->{name};
168
169 glColor 1, 1, 1;
170
171 glBegin GL_QUADS;
172 glTexCoord 0, 0; glVertex 0 , 0;
173 glTexCoord 0, 1; glVertex 0 , $h;
174 glTexCoord 1, 1; glVertex $w , $h;
175 glTexCoord 1, 0; glVertex $w , 0;
176 glEnd;
177
178 glDisable GL_BLEND;
179 glDisable GL_TEXTURE_2D;
180}
114 181
115package Crossfire::Client::Widget::Frame; 182package Crossfire::Client::Widget::Frame;
116 183
117our @ISA = Crossfire::Client::Widget::Container::; 184our @ISA = Crossfire::Client::Widget::Container::;
118 185
358 425
359sub key_up { 426sub key_up {
360} 427}
361 428
362sub _draw { 429sub _draw {
430 my ($self) = @_;
431
363 glEnable GL_TEXTURE_2D; 432 glEnable GL_TEXTURE_2D;
364 glEnable GL_BLEND; 433 glEnable GL_BLEND;
365 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; 434 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE;
366 435
367 my $map = $::CONN->{map}; 436 my $map = $::CONN->{map};
368 437
369 for my $x (0 .. $::CONN->{mapw} - 1) { 438 for my $x (0 .. int $::WIDTH / 32) {
370 for my $y (0 .. $::CONN->{maph} - 1) { 439 for my $y (0 .. int $::HEIGHT / 32) {
371 440
372 my $cell = $map->[$x][$y] 441 my $cell = $map->[$x + $::CONN->{mapx}]
442 [$y + $::CONN->{mapy}]
373 or next; 443 or next;
374 444
375 my $darkness = $cell->[3] * (1 / 255); 445 my $darkness = $cell->[0] * (1 / 255);
446 if ($darkness < 0) {
447 $darkness = 0.5;
448 }
376 glColor $darkness, $darkness, $darkness; 449 glColor $darkness, $darkness, $darkness;
377 450
378 for my $num (grep $_, $cell->[0], $cell->[1], $cell->[2]) { 451 for my $num (grep $_, @$cell[1,2,3]) {
379 my $tex = $::CONN->{face}[$num]{texture} || next; 452 my $tex = $::CONN->{face}[$num]{texture} || next;
380 453
381 glBindTexture GL_TEXTURE_2D, $tex->{name}; 454 glBindTexture GL_TEXTURE_2D, $tex->{name};
382 455
456 my $w = $tex->{width};
457 my $h = $tex->{height};
458
459 my $px = ($x + 1) * 32 - $w;
460 my $py = ($y + 1) * 32 - $h;
461
383 glBegin GL_QUADS; 462 glBegin GL_QUADS;
384 glTexCoord 0, 0; glVertex $x * 32 , $y * 32; 463 glTexCoord 0, 0; glVertex $px , $py;
385 glTexCoord 0, 1; glVertex $x * 32 , $y * 32 + 32; 464 glTexCoord 0, 1; glVertex $px , $py + $h;
386 glTexCoord 1, 1; glVertex $x * 32 + 32, $y * 32 + 32; 465 glTexCoord 1, 1; glVertex $px + $w, $py + $h;
387 glTexCoord 1, 0; glVertex $x * 32 + 32, $y * 32; 466 glTexCoord 1, 0; glVertex $px + $w, $py;
388 glEnd; 467 glEnd;
389 } 468 }
390 } 469 }
391 } 470 }
392 471

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines