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.41 by root, Sun Apr 9 21:50:21 2006 UTC vs.
Revision 1.42 by root, Sun Apr 9 22:00:58 2006 UTC

219 $_[0]{children}[0]->size_request if $_[0]{children}[0]; 219 $_[0]{children}[0]->size_request if $_[0]{children}[0];
220} 220}
221 221
222sub size_allocate { 222sub size_allocate {
223 my ($self, $w, $h) = @_; 223 my ($self, $w, $h) = @_;
224
224 $self->SUPER::size_allocate ($w, $h); 225 $self->SUPER::size_allocate ($w, $h);
225 $self->{children}[0]->size_allocate ($w, $h) 226 $self->{children}[0]->size_allocate ($w, $h)
226 if $self->{children}[0] 227 if $self->{children}[0]
227} 228}
228 229
236 my ($self) = @_; 237 my ($self) = @_;
237 238
238 ::refresh (); 239 ::refresh ();
239} 240}
240 241
242sub add {
243 my ($self, $widget) = @_;
244
245 $self->SUPER::add ($widget);
246
247 $widget->size_allocate ($widget->size_request);
248}
249
241############################################################################# 250#############################################################################
242 251
243package Crossfire::Client::Widget::Window; 252package Crossfire::Client::Widget::Window;
244 253
245our @ISA = Crossfire::Client::Widget::Bin::; 254our @ISA = Crossfire::Client::Widget::Bin::;
246 255
247use SDL::OpenGL; 256use SDL::OpenGL;
248 257
249sub add { 258sub new {
250 my ($self, $chld) = @_; 259 my ($class, $x, $y, $z, $w, $h) = @_;
251 warn "ADD $chld\n";
252 $self->SUPER::add ($chld);
253 $chld->set_parent ($self);
254}
255 260
256sub remove { 261 my $self = $class->SUPER::new;
257 my ($self) = @_; 262
258 # TODO FIXME: removing a child from a window will crash, see render_chld 263 @$self{qw(x y z w h)} = ($x, $y, $z, $w, $h);
259 # $self->update;
260} 264}
261 265
262sub update { 266sub update {
263 my ($self) = @_; 267 my ($self) = @_;
268
264 $self->render_chld; 269 $self->render_chld;
270 $self->SUPER::update;
265} 271}
266 272
267sub render_chld { 273sub render_chld {
268 my ($self) = @_; 274 my ($self) = @_;
269 my $chld = $self->get;
270 my ($w, $h) = $self->size_request;
271 275
272 require Carp;
273 Carp::cluck "RENDERCHI $w $h";
274 warn "RENDERCHI $w $h\n";
275 $self->{texture} = 276 $self->{texture} =
276 Crossfire::Client::Texture->new_from_opengl ( 277 Crossfire::Client::Texture->new_from_opengl (
277 $w, $h, sub { $chld->draw } 278 $self->{w}, $self->{h}, sub { $self->child->draw }
278 ); 279 );
279 $self->{texture}->upload;
280}
281
282sub size_request {
283 my ($self) = @_;
284 ($self->w, $self->h)
285} 280}
286 281
287sub size_allocate { 282sub size_allocate {
288 my ($self, $w, $h) = @_; 283 my ($self, $w, $h) = @_;
289 284
290 $self->w ($w); 285 $self->{w} = $w;
291 $self->h ($h); 286 $self->{h} = $h;
287
292 $self->get->size_allocate ($w, $h); 288 $self->child->size_allocate ($w, $h);
293 289
294 $self->update; #TODO: Move this to the size_request event propably? 290 $self->render_chld;
295} 291}
296 292
297sub _draw { 293sub _draw {
298 my ($self) = @_; 294 my ($self) = @_;
299 295
336 map { $_ + 4 } $chld->size_request; 332 map { $_ + 4 } $chld->size_request;
337} 333}
338 334
339sub size_allocate { 335sub size_allocate {
340 my ($self, $w, $h) = @_; 336 my ($self, $w, $h) = @_;
341 337
342 $self->SUPER::size_allocate ($w, $h); 338 $self->{w} = $w;
339 $self->{h} = $h;
343 340
344 $self->child->size_allocate ($w - 4, $h - 4); 341 $self->child->size_allocate ($w - 4, $h - 4);
345 $self->child->move (2, 2); 342 $self->child->move (2, 2);
346} 343}
347 344

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines