--- deliantra/Deliantra-Client/DC.pm 2006/04/07 18:20:13 1.3 +++ deliantra/Deliantra-Client/DC.pm 2006/04/07 20:13:13 1.5 @@ -21,6 +21,48 @@ XSLoader::load "Crossfire::Client", $VERSION; } +sub find_rcfile($) { + my $path; + + for (@INC) { + $path = "$_/Crossfire/resources/$_[0]"; + return $path if -r $path; + } + + die "FATAL: can't find required file $_[0]\n"; +} + +sub read_cfg { + my ($file) = @_; + + open CFG, $file + or return; + + my $CFG; + + local $/; + $CFG = eval ; + + $::CFG = $CFG; + + close CFG; +} + +sub write_cfg { + my ($file) = @_; + + open CFG, ">$file" + or return; + + { + local $Data::Dumper::Purity = 1; + $::CFG->{VERSION} = $::VERSION; + print CFG Data::Dumper->Dump ([$::CFG], [qw/CFG/]); + } + + close CFG; +} + package Crossfire::Client::Texture; use Scalar::Util; @@ -29,6 +71,25 @@ my @textures; +sub _new { + my ($class, %data) = @_; + + my $self = bless \%data, $class; + + push @textures, $self; + Scalar::Util::weaken $textures[-1]; + + $self->upload; + + $self +} + +sub new_from_image { + my ($class, $image) = @_; + + $class->_new (image => $image) +} + sub new_from_file { my ($class, $path) = @_; @@ -36,22 +97,19 @@ or die "$path: $!"; local $/; - $class->new_from_data (<$fh>) + $class->new_from_image (<$fh>) } -sub new_from_image { - my ($class, $image) = @_; - - my $self = bless { - image => $data, - }; +sub new_from_surface { + my ($class, $surface) = @_; - push @textures, $self; - Scalar::Util::weaken $textures[-1]; + $surface->rgba; - $self->upload; - - $self + $class->_new ( + data => $surface->pixels, + width => $surface->width, + height => $surface->height, + ) } sub upload { @@ -65,7 +123,7 @@ ($data, $width, $height) = ($self->{data}, $self->{width}, $self->{height}); } else { my $pb = new Gtk2::Gdk::PixbufLoader; - $pb->write ($self->{data}); + $pb->write ($self->{image}); $pb->close; $pb = $pb->get_pixbuf;