--- deliantra/Deliantra-Client/bin/pclient 2006/04/08 17:21:01 1.32
+++ deliantra/Deliantra-Client/bin/pclient 2006/04/09 17:39:56 1.46
@@ -32,7 +32,7 @@
our $HEIGHT;
our $FULLSCREEN;
-our $UIFONT;
+our $FONTSIZE;
our $SDL_TIMER;
our $SDL_APP;
@@ -43,7 +43,11 @@
our $ALT_ENTER_MESSAGE;
-our $tw;
+our $TOPLEVEL;
+
+our $tw; # Test widget #d#
+
+my $last_refresh;
sub init_screen {
$SDL_APP = new SDL::App
@@ -59,38 +63,56 @@
-fullscreen => $FULLSCREEN,
-resizeable => 0;
+ $last_refresh = SDL::GetTicks;
+
%GL_EXT = map +($_ => 1), split /\s+/, Crossfire::Client::gl_extensions;
$GL_EXT{GL_ARB_texture_non_power_of_two}
or warn "WARNING: non-power-of-two opengl extension required";
- $UIFONT = SDL::TTFOpenFont Crossfire::Client::find_rcfile "uifont.ttf", $HEIGHT / 40
- or die "TTFOpenFont: $!";
+ $FONTSIZE = int $HEIGHT / 50;
- $ALT_ENTER_MESSAGE = new Crossfire::Client::Widget::Label 0, $HEIGHT - $HEIGHT / 40, 10, $UIFONT, "Alt-Enter toggles fullscreen mode";
+ $ALT_ENTER_MESSAGE = new Crossfire::Client::Widget::Label
+ 0, $FONTSIZE, $HEIGHT - $FONTSIZE, $FONTSIZE,
+ "Use Alt-Enter to toggle fullscreen mode";
$ALT_ENTER_MESSAGE->move (0, $HEIGHT - ($ALT_ENTER_MESSAGE->size_request)[1]);
- $ALT_ENTER_MESSAGE->activate;
+ $TOPLEVEL->add ($ALT_ENTER_MESSAGE);
- $tw = new Crossfire::Client::Widget::Window;
- $tw->add (my $lbl = new Crossfire::Client::Widget::Label 0, $HEIGHT - $HEIGHT / 40, 10, $UIFONT, "Foo in the garden!");
-# $tw = new Crossfire::Client::Widget::Label 0, $HEIGHT - $HEIGHT / 40, 10, $UIFONT, "Foo in the garden!";
-
- $tw->move (0, $HEIGHT - 50);
- $tw->activate;
+ # Test code #d#
+ unless ($tw) { # haha...
+ $tw = new Crossfire::Client::Widget::Animator;
+ my $lbl1 = new Crossfire::Client::Widget::Label
+ 0, 0, 10, $FONTSIZE, "This is a\nTEST!\nOf a themed\nFrame!";
+ my $lbl2 = new Crossfire::Client::Widget::Label
+ 0, 0, 10, $FONTSIZE, "LBL2";
+
+ my $vb = new Crossfire::Client::Widget::VBox;
+ my $f = new Crossfire::Client::Widget::FancyFrame;
+ my $f2 = new Crossfire::Client::Widget::FancyFrame;
+ $f->add ($lbl1);
+ $f2->add ($lbl2);
+ $vb->add ($f);
+ $vb->add ($f2, 1);
+
+ $tw->add ($vb);
+ $tw->w (400);
+ $tw->h (300);
+ $tw->move ($WIDTH - 200, 0);
+ $tw->moveto (0, 0);
+ $TOPLEVEL->add ($tw);
+
+# $f->move ($WIDTH - 200, 0);
+# $TOPLEVEL->add ($f);
+ }
glClearColor 0, 0, 0, 0;
glEnable GL_TEXTURE_2D;
+ glEnable GL_COLOR_MATERIAL;
glShadeModel GL_FLAT;
glDisable GL_DEPTH_TEST;
glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA;
- glMatrixMode GL_PROJECTION;
- glLoadIdentity;
- glOrtho 0, $WIDTH, $HEIGHT, 0, -100 , 100;
-
- glMatrixMode GL_MODELVIEW;
-
$_->() for @GL_INIT;
}
@@ -112,7 +134,12 @@
host => $CFG->{host},
port => $CFG->{port},
user => $CFG->{user},
- pass => $CFG->{password};
+ pass => $CFG->{password},
+ mapw => 50,
+ maph => 37,
+ ;
+
+ Crossfire::Client::lowdelay fileno $CONN->{fh};
}
sub stop_game {
@@ -125,23 +152,54 @@
sub force_refresh {
glViewport 0, 0, $WIDTH, $HEIGHT;
+
+ glMatrixMode GL_PROJECTION;
+ glLoadIdentity;
+ glOrtho 0, $WIDTH, $HEIGHT, 0, -6000 , 6000;
+ glMatrixMode GL_MODELVIEW;
+
glClear GL_COLOR_BUFFER_BIT;
- $_->draw for @Crossfire::Client::Widget::ACTIVE_WIDGETS;
+ $TOPLEVEL->draw;
SDL::GLSwapBuffers;
}
+my %ANIMATE;
+
my $refresh_handler;
sub refresh {
$refresh_handler ||= add Glib::Idle sub {
+ my $next_refresh = SDL::GetTicks;
+ my $interval = ($next_refresh - $last_refresh) * 0.001;
+ $last_refresh = $next_refresh;
+
force_refresh;
- undef $refresh_handler;
- 0
+ $_->animate ($interval) for grep $_, values %ANIMATE;
+
+ if (%ANIMATE) {
+ 1
+ } else {
+ undef $refresh_handler;
+ 0
+ }
};
}
+sub animation_start {
+ my ($widget) = @_;
+ $ANIMATE{$widget} = $widget;
+ Scalar::Util::weaken $ANIMATE{$widget};
+
+ refresh;
+}
+
+sub animation_stop {
+ my ($widget) = @_;
+ delete $ANIMATE{$widget};
+}
+
%SDL_CB = (
SDL_QUIT() => sub {
main_quit Gtk2;
@@ -188,13 +246,13 @@
sub conn::map_scroll {
my ($self, $dx, $dy) = @_;
- refresh;
+# refresh;
}
sub conn::map_clear {
my ($self) = @_;
- refresh;
+# refresh;
}
sub conn::face_find {
@@ -211,6 +269,12 @@
$face->{texture} = new_from_image Crossfire::Client::Texture delete $face->{image};
}
+sub conn::query {
+ my ($self, $flags, $prompt) = @_;
+
+ warn "<<<>>\n";#d#
+}
+
sub gtk_add_cfg_field {
my ($tbl, $cfg, $klbl, $key, $value) = @_;
my $i = $cfg->{_i}++;
@@ -306,11 +370,12 @@
#############################################################################
SDL::Init SDL_INIT_EVERYTHING;
-SDL::TTFInit;
+
+$TOPLEVEL = Crossfire::Client::Widget::Toplevel->new;
my $mapwidget = Crossfire::Client::Widget::MapWidget->new;
-$mapwidget->activate;
+$TOPLEVEL->add ($mapwidget);
$mapwidget->focus_in;
Crossfire::Client::read_cfg "$Crossfire::VARDIR/pclientrc";
@@ -323,6 +388,8 @@
port => 13327,
};
+Crossfire::Client::set_font Crossfire::Client::find_rcfile "uifont.ttf";
+
$FACECACHE = eval { Crossfire::load_ref "$Crossfire::VARDIR/pclient.faces" } || {};
run_config_dialog