ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/Deliantra/MapWidget.pm
(Generate patch)

Comparing deliantra/Deliantra/Deliantra/MapWidget.pm (file contents):
Revision 1.31 by root, Mon Mar 20 01:39:00 2006 UTC vs.
Revision 1.32 by root, Mon Mar 20 02:15:36 2006 UTC

34 class_closure => \&set, 34 class_closure => \&set,
35 }, 35 },
36 }; 36 };
37 37
38use List::Util qw(min max); 38use List::Util qw(min max);
39
40#my ($TILE_MINX, $TILE_MINY, $TILE_MAXX, $TILE_MAXY);
41#
42#for (values %TILE) {
43# $TILE_MAXX = max $TILE_MAXX, $_->{w} - 1;
44# $TILE_MAXY = max $TILE_MAXY, $_->{h} - 1;
45#}
46#
47#for (values %ARCH) {
48# for (; $_; $_ = $_->{more}) {
49# $TILE_MINX = min $TILE_MINX, $_->{x};
50# $TILE_MINY = min $TILE_MINY, $_->{y};
51# $TILE_MAXX = max $TILE_MAXX, $_->{x};
52# $TILE_MAXY = max $TILE_MAXY, $_->{y};
53# }
54#}
55 39
56sub INIT_INSTANCE { 40sub INIT_INSTANCE {
57 my ($self) = @_; 41 my ($self) = @_;
58 42
59 $self->signal_connect (destroy => sub { 43 $self->signal_connect (destroy => sub {
248 232
249 $self->{tip}->add (my $frame = new Gtk2::Frame "($x|$y)"); 233 $self->{tip}->add (my $frame = new Gtk2::Frame "($x|$y)");
250 234
251 if ($x < 0 || $x >= $self->{map}{width} 235 if ($x < 0 || $x >= $self->{map}{width}
252 || $y < 0 || $y >= $self->{map}{height}) { 236 || $y < 0 || $y >= $self->{map}{height}) {
253 $frame->add (new Gtk2::Label "<off-map>"); 237 $frame->add (new Gtk2::Label "<off-map>");
254 } else { 238 } else {
255 $frame->add (my $vbox = new Gtk2::VBox 1, 1); 239 $frame->add (my $vbox = new Gtk2::VBox 0, 1);
256 240
257 #TODO: fill tooltip via signal, defaulting to this: 241 #TODO: fill tooltip via signal, defaulting to this:
258 242
259 # fill tooltip with info about $x, $y 243 # fill tooltip with info about $x, $y
260 my $as = $self->{map}{map}[$x][$y] || []; 244 my $as = $self->{map}{map}[$x][$y] || [];
261 for (reverse @$as) { 245 for (reverse @$as) {
262 my $a = $_->{_virtual} || $_;
263
264 $vbox->add (my $hbox = new Gtk2::HBox 0, 2); 246 $vbox->add (my $hbox = new Gtk2::HBox 0, 2);
265 247
266 # this is awful, is this really the best way? 248 # this is awful, is this really the best way?
267 my $pb = new Gtk2::Gdk::Pixbuf 'rgb', 1, 8, TILESIZE, TILESIZE; 249 my $pb = new Gtk2::Gdk::Pixbuf 'rgb', 1, 8, TILESIZE, TILESIZE;
268 $pb->fill (0x00000000); 250 $pb->fill (0x00000000);
269 251
270 $TILE->composite ($pb, 252 $TILE->composite ($pb,
271 0, 0, 253 0, 0,
272 TILESIZE, TILESIZE, 254 TILESIZE, TILESIZE,
273 - ($a->{_face} % 64) * TILESIZE, - TILESIZE * int $a->{_face} / 64, 255 - ($_->{_face} % 64) * TILESIZE, - TILESIZE * int $_->{_face} / 64,
274 1, 1, 'nearest', 255 256 1, 1, 'nearest', 255
275 ); 257 );
276 258
259 my $a = $_->{_virtual} || $_;
260
277 $hbox->add (my $img = new_from_pixbuf Gtk2::Image $pb); 261 $hbox->pack_start ((my $img = new_from_pixbuf Gtk2::Image $pb), 0, 1, 0);
278 $img->set_alignment (0, 0.5); 262 $img->set_alignment (0, 0.5);
279 263
264 my $text = "$a->{_name}";
265 if (my $o = $ARCH{$a->{_name}}) {
266 $text .= "<small>";
267 for my $k (grep /^[^_]/, sort keys %$a) {
268 if ($a->{$k} ne $o->{$k}) {
269 $text .= Glib::Markup::escape_text "\n$k\t$a->{$k}";
270 }
271 }
272 $text .= "</small>";
273 } else {
274 $text .= "\n<unknown archetype>";
275 }
276
280 $hbox->add (my $label = new Gtk2::Label $a->{_name}); 277 $hbox->pack_start (my $label = new Gtk2::Label, 1, 1, 0);
278 $label->set_markup ($text);
281 $label->set_alignment (0, 0.5); 279 $label->set_alignment (0, 0.5);
282 } 280 }
283 } 281 }
284} 282}
285 283

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines