--- deliantra/Deliantra-Client/DC/UI.pm 2006/07/23 16:11:12 1.334
+++ deliantra/Deliantra-Client/DC/UI.pm 2006/11/18 23:31:23 1.354
@@ -1,4 +1,4 @@
-package CFClient::UI;
+package CFPlus::UI;
use utf8;
use strict;
@@ -7,8 +7,9 @@
use List::Util ();
use Event;
-use CFClient;
-use CFClient::Texture;
+use CFPlus;
+use CFPlus::Pod;
+use CFPlus::Texture;
our ($FOCUS, $HOVER, $GRAB); # various widgets
@@ -98,7 +99,9 @@
my ($ev) = @_;
my ($x, $y) = ($ev->{x}, $ev->{y});
- unless ($BUTTON_STATE) {
+ $BUTTON_STATE |= 1 << ($ev->{button} - 1);
+
+ unless ($GRAB) {
my $widget = $ROOT->find_widget ($x, $y);
$GRAB = $widget;
@@ -107,8 +110,6 @@
$TOOLTIP_WATCHER->cb->();
}
- $BUTTON_STATE |= 1 << ($ev->{button} - 1);
-
if ($GRAB) {
if ($ev->{button} == 4 || $ev->{button} == 5) {
# mousewheel
@@ -209,7 +210,7 @@
#############################################################################
-package CFClient::UI::Event;
+package CFPlus::UI::Event;
sub xy {
$_[1]->coord2local ($_[0]{x}, $_[0]{y})
@@ -217,11 +218,11 @@
#############################################################################
-package CFClient::UI::Base;
+package CFPlus::UI::Base;
use strict;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -236,7 +237,7 @@
@_
}, $class;
- Scalar::Util::weaken ($CFClient::UI::WIDGET{$self+0} = $self);
+ Scalar::Util::weaken ($CFPlus::UI::WIDGET{$self+0} = $self);
for (keys %$self) {
if (/^on_(.*)$/) {
@@ -244,11 +245,11 @@
}
}
- if (my $layout = $CFClient::UI::LAYOUT->{$self->{name}}) {
- $self->{x} = $layout->{x} * $CFClient::UI::ROOT->{alloc_w} if exists $layout->{x};
- $self->{y} = $layout->{y} * $CFClient::UI::ROOT->{alloc_h} if exists $layout->{y};
- $self->{force_w} = $layout->{w} * $CFClient::UI::ROOT->{alloc_w} if exists $layout->{w};
- $self->{force_h} = $layout->{h} * $CFClient::UI::ROOT->{alloc_h} if exists $layout->{h};
+ if (my $layout = $CFPlus::UI::LAYOUT->{$self->{name}}) {
+ $self->{x} = $layout->{x} * $CFPlus::UI::ROOT->{alloc_w} if exists $layout->{x};
+ $self->{y} = $layout->{y} * $CFPlus::UI::ROOT->{alloc_h} if exists $layout->{y};
+ $self->{force_w} = $layout->{w} * $CFPlus::UI::ROOT->{alloc_w} if exists $layout->{w};
+ $self->{force_h} = $layout->{h} * $CFPlus::UI::ROOT->{alloc_h} if exists $layout->{h};
$self->{x} -= $self->{force_w} * 0.5 if exists $layout->{x};
$self->{y} -= $self->{force_h} * 0.5 if exists $layout->{y};
@@ -271,7 +272,7 @@
return if $self->{parent};
- $CFClient::UI::ROOT->add ($self);
+ $CFPlus::UI::ROOT->add ($self);
}
sub set_visible {
@@ -302,7 +303,7 @@
undef $GRAB if $GRAB == $self;
undef $HOVER if $HOVER == $self;
- $CFClient::UI::TOOLTIP_WATCHER->cb->()
+ $CFPlus::UI::TOOLTIP_WATCHER->cb->()
if $TOOLTIP->{owner} == $self;
$self->emit ("focus_out");
@@ -369,8 +370,8 @@
if ($self->{aspect}) {
my ($ow, $oh) = ($w, $h);
- $w = List::Util::min $w, int $h * $self->{aspect};
- $h = List::Util::min $h, int $w / $self->{aspect};
+ $w = List::Util::min $w, CFPlus::ceil $h * $self->{aspect};
+ $h = List::Util::min $h, CFPlus::ceil $w / $self->{aspect};
# use alignment to adjust x, y
@@ -421,9 +422,9 @@
$self->{tooltip} = $tooltip;
- if ($CFClient::UI::TOOLTIP->{owner} == $self) {
- delete $CFClient::UI::TOOLTIP->{owner};
- $CFClient::UI::TOOLTIP_WATCHER->cb->();
+ if ($CFPlus::UI::TOOLTIP->{owner} == $self) {
+ delete $CFPlus::UI::TOOLTIP->{owner};
+ $CFPlus::UI::TOOLTIP_WATCHER->cb->();
}
}
@@ -499,7 +500,7 @@
push @{ $self->{signal_cb}{$signal} }, $cb;
- defined wantarray and CFClient::guard {
+ defined wantarray and CFPlus::guard {
@{ $self->{signal_cb}{$signal} } = grep $_ != $cb,
@{ $self->{signal_cb}{$signal} };
}
@@ -515,8 +516,8 @@
sub emit {
my ($self, $signal, @args) = @_;
- # I do not really like this solution, but I dislike duplication
- # and needlessly verbose code, too.
+ # I do not really like this solution, but I do not like duplication
+ # and needlessly verbose code, either.
my @append
= $has_coords{$signal}
? $args[0]->xy ($self)
@@ -524,10 +525,23 @@
#warn +(caller(1))[3] . "emit $signal on $self (parent $self->{parent})\n";#d#
+ if ($self->{tooltip} =~ /Apply.*audio/) {
+ warn "2 ", join ":", @{ $self->{signal_cb}{$signal} || []}, "\n";#d#
+ warn "3 $self->{parent}\n";#d#
+ }
+
#d##TODO# stop propagating at first true, do not use sum
+ my $res =
(List::Util::sum map $_->($self, @args, @append), @{$self->{signal_cb}{$signal} || []}) # before
|| ($self->can ("invoke_$signal") || sub { 1 })->($self, @args, @append) # closure
|| ($self->{parent} && $self->{parent}->emit ($signal, @args)) # parent
+ ;
+ if ($self->{tooltip} =~ /Apply.*audio/) {
+ warn "4 ", join ":", @{ $self->{signal_cb}{$signal} || []}, "\n";#d#
+ warn "5 $self->{parent}\n";#d#
+ }
+
+ $res
}
sub find_widget {
@@ -621,7 +635,7 @@
glVertex 0 , $self->{h} - 1;
glEnd;
glPopMatrix;
- #CFClient::UI::Label->new (w => $self->{w}, h => $self->{h}, text => $self, fontsize => 0)->_draw;
+ #CFPlus::UI::Label->new (w => $self->{w}, h => $self->{h}, text => $self, fontsize => 0)->_draw;
}
$self->_draw;
@@ -637,7 +651,7 @@
sub DESTROY {
my ($self) = @_;
- return if CFClient::in_destruct;
+ return if CFPlus::in_destruct;
delete $WIDGET{$self+0};
@@ -647,12 +661,12 @@
#############################################################################
-package CFClient::UI::DrawBG;
+package CFPlus::UI::DrawBG;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::Base::;
use strict;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -693,9 +707,9 @@
#############################################################################
-package CFClient::UI::Empty;
+package CFPlus::UI::Empty;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::Base::;
sub new {
my ($class, %arg) = @_;
@@ -712,9 +726,9 @@
#############################################################################
-package CFClient::UI::Container;
+package CFPlus::UI::Container;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::Base::;
sub new {
my ($class, %arg) = @_;
@@ -810,14 +824,14 @@
#############################################################################
-package CFClient::UI::Bin;
+package CFPlus::UI::Bin;
-our @ISA = CFClient::UI::Container::;
+our @ISA = CFPlus::UI::Container::;
sub new {
my ($class, %arg) = @_;
- my $child = (delete $arg{child}) || new CFClient::UI::Empty::;
+ my $child = (delete $arg{child}) || new CFPlus::UI::Empty::;
$class->SUPER::new (children => [$child], %arg)
}
@@ -834,7 +848,7 @@
$self->SUPER::remove ($widget);
- $self->{children} = [new CFClient::UI::Empty]
+ $self->{children} = [new CFPlus::UI::Empty]
unless @{$self->{children}};
}
@@ -856,11 +870,11 @@
# back-buffered drawing area
-package CFClient::UI::Window;
+package CFPlus::UI::Window;
-our @ISA = CFClient::UI::Bin::;
+our @ISA = CFPlus::UI::Bin::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my ($class, %arg) = @_;
@@ -892,26 +906,24 @@
sub render_child {
my ($self) = @_;
- $self->{texture} = new_from_opengl CFClient::Texture $self->{w}, $self->{h}, sub {
+ $self->{texture} = new_from_opengl CFPlus::Texture $self->{w}, $self->{h}, sub {
glClearColor 0, 0, 0, 0;
glClear GL_COLOR_BUFFER_BIT;
{
- package CFClient::UI::Base;
+ package CFPlus::UI::Base;
- ($draw_x, $draw_y, $draw_w, $draw_h) =
+ local ($draw_x, $draw_y, $draw_w, $draw_h) =
(0, 0, $self->{w}, $self->{h});
- }
- $self->_render;
+ $self->_render;
+ }
};
}
sub _draw {
my ($self) = @_;
- my ($w, $h) = @$self{qw(w h)};
-
my $tex = $self->{texture}
or return;
@@ -919,16 +931,16 @@
glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE;
glColor 0, 0, 0, 1;
- $tex->draw_quad_alpha_premultiplied (0, 0, $w, $h);
+ $tex->draw_quad_alpha_premultiplied (0, 0);
glDisable GL_TEXTURE_2D;
}
#############################################################################
-package CFClient::UI::ViewPort;
+package CFPlus::UI::ViewPort;
-our @ISA = CFClient::UI::Window::;
+our @ISA = CFPlus::UI::Window::;
sub new {
my $class = shift;
@@ -998,26 +1010,26 @@
) {
$self->child->find_widget ($x + $self->{view_x}, $y + $self->{view_y})
} else {
- $self->CFClient::UI::Base::find_widget ($x, $y)
+ $self->CFPlus::UI::Base::find_widget ($x, $y)
}
}
sub _render {
my ($self) = @_;
- local $CFClient::UI::Base::draw_x = $CFClient::UI::Base::draw_x - $self->{view_x};
- local $CFClient::UI::Base::draw_y = $CFClient::UI::Base::draw_y - $self->{view_y};
+ local $CFPlus::UI::Base::draw_x = $CFPlus::UI::Base::draw_x - $self->{view_x};
+ local $CFPlus::UI::Base::draw_y = $CFPlus::UI::Base::draw_y - $self->{view_y};
- CFClient::OpenGL::glTranslate -$self->{view_x}, -$self->{view_y};
+ CFPlus::OpenGL::glTranslate -$self->{view_x}, -$self->{view_y};
$self->SUPER::_render;
}
#############################################################################
-package CFClient::UI::ScrolledWindow;
+package CFPlus::UI::ScrolledWindow;
-our @ISA = CFClient::UI::HBox::;
+our @ISA = CFPlus::UI::HBox::;
sub new {
my ($class, %arg) = @_;
@@ -1026,7 +1038,7 @@
my $self;
- my $slider = new CFClient::UI::Slider
+ my $slider = new CFPlus::UI::Slider
vertical => 1,
range => [0, 0, 1, 0.01], # HACK fix
on_changed => sub {
@@ -1035,7 +1047,7 @@
;
$self = $class->SUPER::new (
- vp => (new CFClient::UI::ViewPort expand => 1),
+ vp => (new CFPlus::UI::ViewPort expand => 1),
can_events => 1,
slider => $slider,
%arg,
@@ -1089,11 +1101,11 @@
#############################################################################
-package CFClient::UI::Frame;
+package CFPlus::UI::Frame;
-our @ISA = CFClient::UI::Bin::;
+our @ISA = CFPlus::UI::Bin::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -1129,18 +1141,118 @@
#############################################################################
-package CFClient::UI::FancyFrame;
+package CFPlus::UI::FancyFrame;
+
+our @ISA = CFPlus::UI::Bin::;
+
+use CFPlus::OpenGL;
+
+sub new {
+ my ($class, %arg) = @_;
+
+ if ((exists $arg{label}) && !ref $arg{label}) {
+ $arg{label} = new CFPlus::UI::Label
+ align => 1,
+ valign => 0,
+ text => $arg{label},
+ fontsize => ($arg{border} || 0.8) * 0.75;
+ }
+
+ my $self = $class->SUPER::new (
+ # label => "",
+ fg => [0.6, 0.3, 0.1],
+ border => 0.8,
+ style => 'single',
+ %arg,
+ );
+
+ $self
+}
+
+sub add {
+ my ($self, @widgets) = @_;
+
+ $self->SUPER::add (@widgets);
+ $self->CFPlus::UI::Container::add ($self->{label}) if $self->{label};
+}
+
+sub border {
+ int $_[0]{border} * $::FONTSIZE
+}
+
+sub size_request {
+ my ($self) = @_;
+
+ ($self->{label_w}, undef) = $self->{label}->size_request
+ if $self->{label};
+
+ my ($w, $h) = $self->SUPER::size_request;
+
+ (
+ $w + $self->border * 2,
+ $h + $self->border * 2,
+ )
+}
+
+sub invoke_size_allocate {
+ my ($self, $w, $h) = @_;
+
+ my $border = $self->border;
+
+ $w -= List::Util::max 0, $border * 2;
+ $h -= List::Util::max 0, $border * 2;
+
+ if (my $label = $self->{label}) {
+ $label->{w} = List::Util::max 0, List::Util::min $self->{label_w}, $w - $border * 2;
+ $label->{h} = List::Util::min $h, $border;
+ $label->invoke_size_allocate ($label->{w}, $label->{h});
+ }
+
+ $self->child->configure ($border, $border, $w, $h);
+
+ 1
+}
+
+sub _draw {
+ my ($self) = @_;
+
+ my $child = $self->{children}[0];
+
+ my $border = $self->border;
+ my ($w, $h) = ($self->{w}, $self->{h});
+
+ $child->draw;
+
+ glColor @{$self->{fg}};
+ glBegin GL_LINE_STRIP;
+ glVertex $border * 1.5 , $border * 0.5 + 0.5;
+ glVertex $border * 0.5 + 0.5, $border * 0.5 + 0.5;
+ glVertex $border * 0.5 + 0.5, $h - $border * 0.5 + 0.5;
+ glVertex $w - $border * 0.5 + 0.5, $h - $border * 0.5 + 0.5;
+ glVertex $w - $border * 0.5 + 0.5, $border * 0.5 + 0.5;
+ glVertex $self->{label} ? $border * 2 + $self->{label}{w} : $border * 1.5, $border * 0.5 + 0.5;
+ glEnd;
+
+ if ($self->{label}) {
+ glTranslate $border * 2, 0;
+ $self->{label}->_draw;
+ }
+}
+
+#############################################################################
+
+package CFPlus::UI::Toplevel;
-our @ISA = CFClient::UI::Bin::;
+our @ISA = CFPlus::UI::Bin::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
my $bg =
- new_from_file CFClient::Texture CFClient::find_rcfile "d1_bg.png",
+ new_from_file CFPlus::Texture CFPlus::find_rcfile "d1_bg.png",
mipmap => 1, wrap => 1;
my @border =
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw(d1_border_top.png d1_border_right.png d1_border_left.png d1_border_bottom.png);
sub new {
@@ -1156,7 +1268,7 @@
%arg,
);
- $self->{title_widget} = new CFClient::UI::Label
+ $self->{title_widget} = new CFPlus::UI::Label
align => 0,
valign => 1,
text => $self->{title},
@@ -1165,11 +1277,11 @@
if ($self->{has_close_button}) {
$self->{close_button} =
- new CFClient::UI::ImageButton
+ new CFPlus::UI::ImageButton
path => 'x1_close.png',
on_activate => sub { $self->emit ("delete") };
- $self->CFClient::UI::Container::add ($self->{close_button});
+ $self->CFPlus::UI::Container::add ($self->{close_button});
}
$self
@@ -1179,8 +1291,8 @@
my ($self, @widgets) = @_;
$self->SUPER::add (@widgets);
- $self->CFClient::UI::Container::add ($self->{close_button}) if $self->{close_button};
- $self->CFClient::UI::Container::add ($self->{title_widget}) if $self->{title_widget};
+ $self->CFPlus::UI::Container::add ($self->{close_button}) if $self->{close_button};
+ $self->CFPlus::UI::Container::add ($self->{title_widget}) if $self->{title_widget};
}
sub border {
@@ -1298,6 +1410,14 @@
! ! $self->{motion}
}
+sub invoke_visibility_change {
+ my ($self, $visible) = @_;
+
+ delete $self->{motion} unless $visible;
+
+ 0
+}
+
sub _draw {
my ($self) = @_;
@@ -1344,13 +1464,13 @@
#############################################################################
-package CFClient::UI::Table;
+package CFPlus::UI::Table;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::Base::;
use List::Util qw(max sum);
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -1450,8 +1570,8 @@
$ws->[$_] += $col_expand[$_] / $col_expand * ($w - $req_w) for 0 .. $#$ws;
$hs->[$_] *= 1 * $h / $req_h for 0 .. $#$hs;
- CFClient::UI::harmonize $ws;
- CFClient::UI::harmonize $hs;
+ CFPlus::UI::harmonize $ws;
+ CFPlus::UI::harmonize $hs;
my $y;
@@ -1504,9 +1624,9 @@
#############################################################################
-package CFClient::UI::Box;
+package CFPlus::UI::Box;
-our @ISA = CFClient::UI::Container::;
+our @ISA = CFPlus::UI::Container::;
sub size_request {
my ($self) = @_;
@@ -1549,7 +1669,7 @@
}
}
- CFClient::UI::harmonize \@req;
+ CFPlus::UI::harmonize \@req;
my $pos = 0;
for (0 .. $#children) {
@@ -1564,9 +1684,9 @@
#############################################################################
-package CFClient::UI::HBox;
+package CFPlus::UI::HBox;
-our @ISA = CFClient::UI::Box::;
+our @ISA = CFPlus::UI::Box::;
sub new {
my $class = shift;
@@ -1579,9 +1699,9 @@
#############################################################################
-package CFClient::UI::VBox;
+package CFPlus::UI::VBox;
-our @ISA = CFClient::UI::Box::;
+our @ISA = CFPlus::UI::Box::;
sub new {
my $class = shift;
@@ -1594,11 +1714,11 @@
#############################################################################
-package CFClient::UI::Label;
+package CFPlus::UI::Label;
-our @ISA = CFClient::UI::DrawBG::;
+our @ISA = CFPlus::UI::DrawBG::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my ($class, %arg) = @_;
@@ -1611,8 +1731,9 @@
#text => initial text
#markup => initial narkup
#max_w => maximum pixel width
+ #style => 0, # render flags
ellipsise => 3, # end
- layout => (new CFClient::Layout),
+ layout => (new CFPlus::Layout),
fontsize => 1,
align => -1,
valign => -1,
@@ -1623,7 +1744,7 @@
);
if (exists $self->{template}) {
- my $layout = new CFClient::Layout;
+ my $layout = new CFPlus::Layout;
$layout->set_text (delete $self->{template});
$self->{template} = $layout;
}
@@ -1771,16 +1892,16 @@
my $w = List::Util::min $self->{w} + 4, $size->[0];
my $h = List::Util::min $self->{h} + 2, $size->[1];
- $self->{layout}->render ($self->{ox}, $self->{oy});
+ $self->{layout}->render ($self->{ox}, $self->{oy}, $self->{style});
}
#############################################################################
-package CFClient::UI::EntryBase;
+package CFPlus::UI::EntryBase;
-our @ISA = CFClient::UI::Label::;
+our @ISA = CFPlus::UI::Label::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -1852,14 +1973,17 @@
substr $text, --$self->{cursor}, 1, "" if $self->{cursor};
} elsif ($uni == 127) {
substr $text, $self->{cursor}, 1, "";
- } elsif ($sym == CFClient::SDLK_LEFT) {
+ } elsif ($sym == CFPlus::SDLK_LEFT) {
--$self->{cursor} if $self->{cursor};
- } elsif ($sym == CFClient::SDLK_RIGHT) {
+ } elsif ($sym == CFPlus::SDLK_RIGHT) {
++$self->{cursor} if $self->{cursor} < length $self->{text};
- } elsif ($sym == CFClient::SDLK_HOME) {
+ } elsif ($sym == CFPlus::SDLK_HOME) {
$self->{cursor} = 0;
- } elsif ($sym == CFClient::SDLK_END) {
+ } elsif ($sym == CFPlus::SDLK_END) {
$self->{cursor} = length $text;
+ } elsif ($uni == 21) { # ctrl-u
+ $text = "";
+ $self->{cursor} = 0;
} elsif ($uni == 27) {
$self->emit ('escape');
} elsif ($uni) {
@@ -1942,19 +2066,18 @@
@$self{qw(cur_x cur_y cur_h)} = $self->{layout}->cursor_pos (length $text)
}
- glColor @{$self->{fg}};
glBegin GL_LINES;
- glVertex $self->{cur_x} + $self->{ox}, $self->{cur_y} + $self->{oy};
- glVertex $self->{cur_x} + $self->{ox}, $self->{cur_y} + $self->{oy} + $self->{cur_h};
+ glVertex 0.5 + $self->{cur_x} + $self->{ox}, $self->{cur_y} + $self->{oy};
+ glVertex 0.5 + $self->{cur_x} + $self->{ox}, $self->{cur_y} + $self->{oy} + $self->{cur_h};
glEnd;
}
}
-package CFClient::UI::Entry;
+package CFPlus::UI::Entry;
-our @ISA = CFClient::UI::EntryBase::;
+our @ISA = CFPlus::UI::EntryBase::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub invoke_key_down {
my ($self, $ev) = @_;
@@ -1970,7 +2093,7 @@
$self->emit (activate => $txt);
$self->update;
- } elsif ($sym == CFClient::SDLK_UP) {
+ } elsif ($sym == CFPlus::SDLK_UP) {
if ($self->{history_pointer} < 0) {
$self->{history_saveback} = $self->get_text;
}
@@ -1982,7 +2105,7 @@
$self->set_text ($self->{history}->[$self->{history_pointer}]);
}
- } elsif ($sym == CFClient::SDLK_DOWN) {
+ } elsif ($sym == CFPlus::SDLK_DOWN) {
$self->{history_pointer}--;
$self->{history_pointer} = -1 if $self->{history_pointer} < 0;
@@ -2001,14 +2124,14 @@
#############################################################################
-package CFClient::UI::Button;
+package CFPlus::UI::Button;
-our @ISA = CFClient::UI::Label::;
+our @ISA = CFPlus::UI::Label::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
my @tex =
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw(b1_button_active.png);
sub new {
@@ -2055,51 +2178,15 @@
#############################################################################
-package CFClient::UI::ImageButton;
-
-our @ISA = CFClient::UI::Image::;
-
-use CFClient::OpenGL;
-
-my %textures;
+package CFPlus::UI::CheckBox;
-sub new {
- my $class = shift;
-
- my $self = $class->SUPER::new (
- padding_x => 4,
- padding_y => 4,
- fg => [1, 1, 1],
- active_fg => [0, 0, 1],
- can_hover => 1,
- align => 0,
- valign => 0,
- can_events => 1,
- @_
- );
-}
-
-sub invoke_button_up {
- my ($self, $ev, $x, $y) = @_;
-
- $self->emit ("activate")
- if $x >= 0 && $x < $self->{w}
- && $y >= 0 && $y < $self->{h};
-
- 1
-}
-
-#############################################################################
-
-package CFClient::UI::CheckBox;
-
-our @ISA = CFClient::UI::DrawBG::;
+our @ISA = CFPlus::UI::DrawBG::;
my @tex =
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw(c1_checkbox_bg.png c1_checkbox_active.png);
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -2166,11 +2253,11 @@
#############################################################################
-package CFClient::UI::Image;
+package CFPlus::UI::Image;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::Base::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
our %texture_cache;
@@ -2186,7 +2273,7 @@
or Carp::croak "'path' or 'tex' attributes required";
$self->{tex} ||= $texture_cache{$self->{path}} ||=
- new_from_file CFClient::Texture CFClient::find_rcfile $self->{path}, mipmap => 1;
+ new_from_file CFPlus::Texture CFPlus::find_rcfile $self->{path}, mipmap => 1;
Scalar::Util::weaken $texture_cache{$self->{path}};
@@ -2198,17 +2285,14 @@
sub STORABLE_freeze {
my ($self, $cloning) = @_;
- warn "freeze<$self>\n";#d#
-
$self->{path}
- or die "cannot serialise CFClient::UI::Image on non-loadable images\n";
+ or die "cannot serialise CFPlus::UI::Image on non-loadable images\n";
$self->{path}
}
sub STORABLE_attach {
my ($self, $cloning, $path) = @_;
- warn "attach<@_>\n";#d#
$self->new (path => $path)
}
@@ -2243,29 +2327,65 @@
#############################################################################
-package CFClient::UI::VGauge;
+package CFPlus::UI::ImageButton;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::Image::;
+
+use CFPlus::OpenGL;
+
+my %textures;
+
+sub new {
+ my $class = shift;
+
+ my $self = $class->SUPER::new (
+ padding_x => 4,
+ padding_y => 4,
+ fg => [1, 1, 1],
+ active_fg => [0, 0, 1],
+ can_hover => 1,
+ align => 0,
+ valign => 0,
+ can_events => 1,
+ @_
+ );
+}
+
+sub invoke_button_up {
+ my ($self, $ev, $x, $y) = @_;
+
+ $self->emit ("activate")
+ if $x >= 0 && $x < $self->{w}
+ && $y >= 0 && $y < $self->{h};
+
+ 1
+}
+
+#############################################################################
+
+package CFPlus::UI::VGauge;
+
+our @ISA = CFPlus::UI::Base::;
use List::Util qw(min max);
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
my %tex = (
food => [
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw/g1_food_gauge_empty.png g1_food_gauge_full.png/
],
grace => [
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw/g1_grace_gauge_empty.png g1_grace_gauge_full.png g1_grace_gauge_overflow.png/
],
hp => [
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw/g1_hp_gauge_empty.png g1_hp_gauge_full.png/
],
mana => [
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_, mipmap => 1 }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_, mipmap => 1 }
qw/g1_mana_gauge_empty.png g1_mana_gauge_full.png g1_mana_gauge_overflow.png/
],
);
@@ -2378,9 +2498,9 @@
#############################################################################
-package CFClient::UI::Gauge;
+package CFPlus::UI::Gauge;
-our @ISA = CFClient::UI::VBox::;
+our @ISA = CFPlus::UI::VBox::;
sub new {
my ($class, %arg) = @_;
@@ -2392,9 +2512,9 @@
%arg,
);
- $self->add ($self->{value} = new CFClient::UI::Label valign => +1, align => 0, template => "999");
- $self->add ($self->{gauge} = new CFClient::UI::VGauge type => $self->{type}, expand => 1, can_hover => 1);
- $self->add ($self->{max} = new CFClient::UI::Label valign => -1, align => 0, template => "999");
+ $self->add ($self->{value} = new CFPlus::UI::Label valign => +1, align => 0, template => "999");
+ $self->add ($self->{gauge} = new CFPlus::UI::VGauge type => $self->{type}, expand => 1, can_hover => 1);
+ $self->add ($self->{max} = new CFPlus::UI::Label valign => -1, align => 0, template => "999");
$self
}
@@ -2425,16 +2545,16 @@
#############################################################################
-package CFClient::UI::Slider;
+package CFPlus::UI::Slider;
use strict;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
-our @ISA = CFClient::UI::DrawBG::;
+our @ISA = CFPlus::UI::DrawBG::;
my @tex =
- map { new_from_file CFClient::Texture CFClient::find_rcfile $_ }
+ map { new_from_file CFPlus::Texture CFPlus::find_rcfile $_ }
qw(s1_slider.png s1_slider_bg.png);
sub new {
@@ -2599,9 +2719,9 @@
#############################################################################
-package CFClient::UI::ValSlider;
+package CFPlus::UI::ValSlider;
-our @ISA = CFClient::UI::HBox::;
+our @ISA = CFPlus::UI::HBox::;
sub new {
my ($class, %arg) = @_;
@@ -2609,8 +2729,8 @@
my $range = delete $arg{range};
my $self = $class->SUPER::new (
- slider => (new CFClient::UI::Slider expand => 1, range => $range),
- entry => (new CFClient::UI::Label text => "", template => delete $arg{template}),
+ slider => (new CFPlus::UI::Slider expand => 1, range => $range),
+ entry => (new CFPlus::UI::Label text => "", template => delete $arg{template}),
to_value => sub { shift },
from_value => sub { shift },
%arg,
@@ -2640,11 +2760,11 @@
#############################################################################
-package CFClient::UI::TextScroller;
+package CFPlus::UI::TextScroller;
-our @ISA = CFClient::UI::HBox::;
+our @ISA = CFPlus::UI::HBox::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -2656,12 +2776,12 @@
#font => default_font
@_,
- layout => (new CFClient::Layout),
+ layout => (new CFPlus::Layout),
par => [],
height => 0,
children => [
- (new CFClient::UI::Empty expand => 1),
- (new CFClient::UI::Slider vertical => 1),
+ (new CFPlus::UI::Empty expand => 1),
+ (new CFPlus::UI::Slider vertical => 1),
],
);
@@ -2748,6 +2868,21 @@
$self->{children}[1]->set_value ($offset);
}
+sub current_paragraph {
+ my ($self) = @_;
+
+ $self->{top_paragraph} - 1
+}
+
+sub scroll_to {
+ my ($self, $para) = @_;
+
+ $para = List::Util::max 0, List::Util::min $#{$self->{par}}, $para;
+
+ $self->{scroll_to} = $para;
+ $self->update;
+}
+
sub clear {
my ($self) = @_;
@@ -2760,21 +2895,22 @@
}
sub add_paragraph {
- my ($self, $color, $para, $indent) = @_;
-
- my ($text, @w) = ref $para ? @$para : $para;
+ my $self = shift;
- $para = {
- w => 1e10,
- wrapped => 1,
- fg => $color,
- indent => $indent,
- markup => $text,
- widget => \@w,
- };
+ for my $para (@_) {
+ $para = {
+ fg => [1, 1, 1, 1],
+ indent => 0,
+ markup => "",
+ widget => [],
+ ref $para ? %$para : (markup => $para),
+ w => 1e10,
+ wrapped => 1,
+ };
- $self->add (@w) if @w;
- push @{$self->{par}}, $para;
+ $self->add (@{ $para->{widget} }) if @{ $para->{widget} };
+ push @{$self->{par}}, $para;
+ }
$self->{need_reflow}++;
$self->update;
@@ -2783,65 +2919,79 @@
sub scroll_to_bottom {
my ($self) = @_;
- $self->{scroll_to_bottom} = 1;
+ $self->{scroll_to} = $#{$self->{par}};
$self->update;
}
-sub update {
+sub force_uptodate {
my ($self) = @_;
- $self->SUPER::update;
+ if (delete $self->{need_reflow}) {
+ my ($W, $H) = @{$self->{children}[0]}{qw(w h)};
- return unless $self->{h} > 0;
+ my $height = 0;
- delete $self->{texture};
+ for my $para (@{$self->{par}}) {
+ if ($para->{w} != $W && ($para->{wrapped} || $para->{w} > $W)) {
+ my $layout = $self->get_layout ($para);
+ my ($w, $h) = $layout->size;
+
+ $para->{w} = $w + $para->{indent};
+ $para->{h} = $h;
+ $para->{wrapped} = $layout->has_wrapped;
+ }
- $ROOT->on_post_alloc ($self => sub {
- my ($W, $H) = @{$self->{children}[0]}{qw(w h)};
+ $para->{y} = $height;
+ $height += $para->{h};
+ }
- if (delete $self->{need_reflow}) {
- my $height = 0;
+ $self->{height} = $height;
+ $self->{children}[1]->set_range ([$self->{children}[1]{range}[0], 0, $height, $H, 1]);
- for my $para (@{$self->{par}}) {
- if ($para->{w} != $W && ($para->{wrapped} || $para->{w} > $W)) {
- my $layout = $self->get_layout ($para);
- my ($w, $h) = $layout->size;
+ delete $self->{texture};
+ }
- $para->{w} = $w + $para->{indent};
- $para->{h} = $h;
- $para->{wrapped} = $layout->has_wrapped;
- }
+ if (my $paridx = delete $self->{scroll_to}) {
+ $self->{children}[1]->set_value ($self->{par}[$paridx]{y});
+ }
+}
- $height += $para->{h};
- }
+sub update {
+ my ($self) = @_;
- $self->{height} = $height;
+ $self->SUPER::update;
- $self->{children}[1]->set_range ([$self->{children}[1]{range}[0], 0, $height, $H, 1]);
+ return unless $self->{h} > 0;
- delete $self->{texture};
- }
+ delete $self->{texture};
- if (delete $self->{scroll_to_bottom}) {
- $self->{children}[1]->set_value (1e10);
- }
+ $ROOT->on_post_alloc ($self => sub {
+ $self->force_uptodate;
- $self->{texture} ||= new_from_opengl CFClient::Texture $W, $H, sub {
+ my ($W, $H) = @{$self->{children}[0]}{qw(w h)};
+
+ $self->{texture} ||= new_from_opengl CFPlus::Texture $W, $H, sub {
glClearColor 0, 0, 0, 0;
glClear GL_COLOR_BUFFER_BIT;
+ package CFPlus::UI::Base;
+ local ($draw_x, $draw_y, $draw_w, $draw_h) =
+ (0, 0, $self->{w}, $self->{h});
+
+ my $top = int $self->{children}[1]{range}[0];
+
+ my $paridx = 0;
+ my $top_paragraph;
my $top = int $self->{children}[1]{range}[0];
my $y0 = $top;
my $y1 = $top + $H;
- my $y = 0;
-
for my $para (@{$self->{par}}) {
my $h = $para->{h};
+ my $y = $para->{y};
if ($y0 < $y + $h && $y < $y1) {
-
my $layout = $self->get_layout ($para);
$layout->render ($para->{indent}, $y - $y0);
@@ -2860,8 +3010,11 @@
}
}
- $y += $h;
+ $paridx++;
+ $top_paragraph ||= $paridx if $y >= $top;
}
+
+ $self->{top_paragraph} = $top_paragraph;
};
});
}
@@ -2889,11 +3042,11 @@
#############################################################################
-package CFClient::UI::Animator;
+package CFPlus::UI::Animator;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
-our @ISA = CFClient::UI::Bin::;
+our @ISA = CFPlus::UI::Bin::;
sub moveto {
my ($self, $x, $y) = @_;
@@ -2931,9 +3084,9 @@
#############################################################################
-package CFClient::UI::Flopper;
+package CFPlus::UI::Flopper;
-our @ISA = CFClient::UI::Button::;
+our @ISA = CFPlus::UI::Button::;
sub new {
my $class = shift;
@@ -2955,11 +3108,11 @@
#############################################################################
-package CFClient::UI::Tooltip;
+package CFPlus::UI::Tooltip;
-our @ISA = CFClient::UI::Bin::;
+our @ISA = CFPlus::UI::Bin::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -2973,6 +3126,9 @@
sub set_tooltip_from {
my ($self, $widget) = @_;
+ $widget->{tooltip} = CFPlus::Pod::section_label tooltip => $1
+ if $widget->{tooltip} =~ /^#(.*)$/;
+
my $tooltip = $widget->{tooltip};
if ($ENV{CFPLUS_DEBUG} & 2) {
@@ -2985,11 +3141,11 @@
$tooltip =~ s/^\n+//;
$tooltip =~ s/\n+$//;
- $self->add (new CFClient::UI::Label
+ $self->add (new CFPlus::UI::Label
markup => $tooltip,
max_w => ($widget->{tooltip_width} || 0.25) * $::WIDTH,
fontsize => 0.8,
- fg => [0, 0, 0, 1],
+ style => 1, # FLAG_INVERSE
ellipsise => 0,
font => ($widget->{tooltip_font} || $::FONT_PROP),
);
@@ -3061,11 +3217,11 @@
#############################################################################
-package CFClient::UI::Face;
+package CFPlus::UI::Face;
-our @ISA = CFClient::UI::Base::;
+our @ISA = CFPlus::UI::DrawBG::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -3110,6 +3266,8 @@
return unless $::CONN;
+ $self->SUPER::_draw;
+
my $face;
if ($self->{frame}) {
@@ -3141,19 +3299,19 @@
#############################################################################
-package CFClient::UI::Buttonbar;
+package CFPlus::UI::Buttonbar;
-our @ISA = CFClient::UI::HBox::;
+our @ISA = CFPlus::UI::HBox::;
-# TODO: should actualyl wrap buttons and other goodies.
+# TODO: should actually wrap buttons and other goodies.
#############################################################################
-package CFClient::UI::Menu;
+package CFPlus::UI::Menu;
-our @ISA = CFClient::UI::FancyFrame::;
+our @ISA = CFPlus::UI::Toplevel::;
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -3164,7 +3322,7 @@
@_,
);
- $self->add ($self->{vbox} = new CFClient::UI::VBox);
+ $self->add ($self->{vbox} = new CFPlus::UI::VBox);
for my $item (@{ $self->{items} }) {
my ($widget, $cb, $tooltip) = @$item;
@@ -3174,18 +3332,18 @@
if ($widget =~ /\t/) {
my ($left, $right) = split /\t/, $widget, 2;
- $widget = new CFClient::UI::HBox
+ $widget = new CFPlus::UI::HBox
can_hover => 1,
can_events => 1,
tooltip => $tooltip,
children => [
- (new CFClient::UI::Label markup => $left, expand => 1),
- (new CFClient::UI::Label markup => $right, align => +1),
+ (new CFPlus::UI::Label markup => $left, expand => 1),
+ (new CFPlus::UI::Label markup => $right, align => +1),
],
;
} else {
- $widget = new CFClient::UI::Label
+ $widget = new CFPlus::UI::Label
can_hover => 1,
can_events => 1,
markup => $widget,
@@ -3243,9 +3401,9 @@
#############################################################################
-package CFClient::UI::Multiplexer;
+package CFPlus::UI::Multiplexer;
-our @ISA = CFClient::UI::Container::;
+our @ISA = CFPlus::UI::Container::;
sub new {
my $class = shift;
@@ -3316,16 +3474,16 @@
#############################################################################
-package CFClient::UI::Notebook;
+package CFPlus::UI::Notebook;
-our @ISA = CFClient::UI::VBox::;
+our @ISA = CFPlus::UI::VBox::;
sub new {
my $class = shift;
my $self = $class->SUPER::new (
- buttonbar => (new CFClient::UI::Buttonbar),
- multiplexer => (new CFClient::UI::Multiplexer expand => 1),
+ buttonbar => (new CFPlus::UI::Buttonbar),
+ multiplexer => (new CFPlus::UI::Multiplexer expand => 1),
# filter => # will be put between multiplexer and $self
@_,
);
@@ -3341,7 +3499,7 @@
Scalar::Util::weaken $self;
- $self->{buttonbar}->add (new CFClient::UI::Button
+ $self->{buttonbar}->add (new CFPlus::UI::Button
markup => $title,
tooltip => $tooltip,
on_activate => sub { $self->set_current_page ($widget) },
@@ -3365,11 +3523,11 @@
#############################################################################
-package CFClient::UI::Combobox;
+package CFPlus::UI::Selector;
use utf8;
-our @ISA = CFClient::UI::Button::;
+our @ISA = CFPlus::UI::Button::;
sub new {
my $class = shift;
@@ -3396,7 +3554,7 @@
push @menu_items, [$tooltip || $title, sub { $self->set_value ($value) }];
}
- CFClient::UI::Menu->new (items => \@menu_items)->popup ($ev);
+ CFPlus::UI::Menu->new (items => \@menu_items)->popup ($ev);
}
sub _set_value {
@@ -3421,9 +3579,9 @@
#############################################################################
-package CFClient::UI::Statusbox;
+package CFPlus::UI::Statusbox;
-our @ISA = CFClient::UI::VBox::;
+our @ISA = CFPlus::UI::VBox::;
sub new {
my $class = shift;
@@ -3445,8 +3603,8 @@
my $NOW = Time::HiRes::time;
# freeze display when hovering over any label
- return if $CFClient::UI::TOOLTIP->{owner}
- && grep $CFClient::UI::TOOLTIP->{owner} == $_->{label},
+ return if $CFPlus::UI::TOOLTIP->{owner}
+ && grep $CFPlus::UI::TOOLTIP->{owner} == $_->{label},
values %{ $self->{item} };
while (my ($k, $v) = each %{ $self->{item} }) {
@@ -3477,7 +3635,7 @@
s/\s+/ /g;
}
- new CFClient::UI::Label
+ new CFPlus::UI::Label
markup => $short,
tooltip => $item->{tooltip},
tooltip_font => $::FONT_PROP,
@@ -3566,9 +3724,9 @@
#############################################################################
-package CFClient::UI::Inventory;
+package CFPlus::UI::Inventory;
-our @ISA = CFClient::UI::Table::;
+our @ISA = CFPlus::UI::Table::;
sub new {
my $class = shift;
@@ -3594,7 +3752,7 @@
my @adds;
my $row = 0;
for my $item ($self->{sort}->(@{ $self->{items} })) {
- CFClient::Item::update_widgets $item;
+ CFPlus::Item::update_widgets $item;
push @adds, 0, $row, $item->{face_widget};
push @adds, 1, $row, $item->{desc_widget};
@@ -3628,9 +3786,9 @@
#############################################################################
-package CFClient::UI::SpellList;
+package CFPlus::UI::SpellList;
-our @ISA = CFClient::UI::Table::;
+our @ISA = CFPlus::UI::Table::;
sub new {
my $class = shift;
@@ -3658,16 +3816,16 @@
sub rebuild_spell_list {
my ($self) = @_;
- $CFClient::UI::ROOT->on_refresh ($self => sub {
+ $CFPlus::UI::ROOT->on_refresh ($self => sub {
$self->clear;
return unless $::CONN;
- $self->add (1, 0, new CFClient::UI::Label text => "Spell Name", @TOOLTIP_NAME);
- $self->add (2, 0, new CFClient::UI::Label text => "Skill", @TOOLTIP_SKILL);
- $self->add (3, 0, new CFClient::UI::Label text => "Lvl" , @TOOLTIP_LVL);
- $self->add (4, 0, new CFClient::UI::Label text => "Sp/Gp", @TOOLTIP_SP);
- $self->add (5, 0, new CFClient::UI::Label text => "Dmg" , @TOOLTIP_DMG);
+ $self->add (1, 0, new CFPlus::UI::Label text => "Spell Name", @TOOLTIP_NAME);
+ $self->add (2, 0, new CFPlus::UI::Label text => "Skill", @TOOLTIP_SKILL);
+ $self->add (3, 0, new CFPlus::UI::Label text => "Lvl" , @TOOLTIP_LVL);
+ $self->add (4, 0, new CFPlus::UI::Label text => "Sp/Gp", @TOOLTIP_SP);
+ $self->add (5, 0, new CFPlus::UI::Label text => "Dmg" , @TOOLTIP_DMG);
my $row = 0;
@@ -3684,7 +3842,7 @@
} elsif ($ev->{button} == 2) {
$::CONN->user_send ("invoke $spell->{name}");
} elsif ($ev->{button} == 3) {
- (new CFClient::UI::Menu
+ (new CFPlus::UI::Menu
items => [
["bind cast $spell->{name} to a key" => sub { $::BIND_EDITOR->do_quick_binding (["cast $spell->{name}"]) }],
["bind invoke $spell->{name} to a key" => sub { $::BIND_EDITOR->do_quick_binding (["invoke $spell->{name}"]) }],
@@ -3697,12 +3855,12 @@
1
};
- my $tooltip = "$spell->{message}$TOOLTIP_ALL";
+ my $tooltip = (CFPlus::asxml $spell->{message}) . $TOOLTIP_ALL;
#TODO: add path info to tooltip
- #$self->add (6, $row, new CFClient::UI::Label text => $spell->{path});
+ #$self->add (6, $row, new CFPlus::UI::Label text => $spell->{path});
- $self->add (0, $row, new CFClient::UI::Face
+ $self->add (0, $row, new CFPlus::UI::Face
face => $spell->{face},
can_hover => 1,
can_events => 1,
@@ -3710,7 +3868,7 @@
on_button_down => $spell_cb,
);
- $self->add (1, $row, new CFClient::UI::Label
+ $self->add (1, $row, new CFPlus::UI::Label
expand => 1,
text => $spell->{name},
can_hover => 1,
@@ -3719,10 +3877,10 @@
on_button_down => $spell_cb,
);
- $self->add (2, $row, new CFClient::UI::Label text => $::CONN->{skill_info}{$spell->{skill}}, @TOOLTIP_SKILL);
- $self->add (3, $row, new CFClient::UI::Label text => $spell->{level}, @TOOLTIP_LVL);
- $self->add (4, $row, new CFClient::UI::Label text => $spell->{mana} || $spell->{grace}, @TOOLTIP_SP);
- $self->add (5, $row, new CFClient::UI::Label text => $spell->{damage}, @TOOLTIP_DMG);
+ $self->add (2, $row, new CFPlus::UI::Label text => $::CONN->{skill_info}{$spell->{skill}}, @TOOLTIP_SKILL);
+ $self->add (3, $row, new CFPlus::UI::Label text => $spell->{level}, @TOOLTIP_LVL);
+ $self->add (4, $row, new CFPlus::UI::Label text => $spell->{mana} || $spell->{grace}, @TOOLTIP_SP);
+ $self->add (5, $row, new CFPlus::UI::Label text => $spell->{damage}, @TOOLTIP_DMG);
}
});
}
@@ -3750,13 +3908,13 @@
#############################################################################
-package CFClient::UI::Root;
+package CFPlus::UI::Root;
-our @ISA = CFClient::UI::Container::;
+our @ISA = CFPlus::UI::Container::;
use List::Util qw(min max);
-use CFClient::OpenGL;
+use CFPlus::OpenGL;
sub new {
my $class = shift;
@@ -3945,6 +4103,9 @@
$w = max $widget->{min_w}, $w;
$h = max $widget->{min_h}, $h;
+# $w = min $self->{w} - $widget->{x}, $w if $self->{w};
+# $h = min $self->{h} - $widget->{y}, $h if $self->{h};
+
$w = min $widget->{max_w}, $w if exists $widget->{max_w};
$h = min $widget->{max_h}, $h if exists $widget->{max_h};
@@ -3980,21 +4141,21 @@
glLoadIdentity;
{
- package CFClient::UI::Base;
+ package CFPlus::UI::Base;
- ($draw_x, $draw_y, $draw_w, $draw_h) =
+ local ($draw_x, $draw_y, $draw_w, $draw_h) =
(0, 0, $self->{w}, $self->{h});
- }
- $self->_draw;
+ $self->_draw;
+ }
}
#############################################################################
-package CFClient::UI;
+package CFPlus::UI;
-$ROOT = new CFClient::UI::Root;
-$TOOLTIP = new CFClient::UI::Tooltip z => 900;
+$ROOT = new CFPlus::UI::Root;
+$TOOLTIP = new CFPlus::UI::Tooltip z => 900;
1