NAME
AntTweakBar - Perl bindings for AntTweakBar
SYNOPSIS
use AntTweakBar qw/:all/;
use SDL::Events;
# Setup part: link AntTweakBar with your OpenGL/SDL system
AntTweakBar::init(TW_OPENGL);
AntTweakBar::window_size($width, $height);
# in your main rendering routine
sub display {
AntTweakBar::draw;
}
sub process_events {
SDL::Events::pump_events;
my $event = $self->sdl_event;
while (SDL::Events::poll_event($event)) {
...;
AntTweakBar::eventSDL($event);
}
}
# define bars with variables
my $bar = AntTweakBar->new(
"TweakBar & Perl",
size => '200 400',
color => '96 216 224'
);
my $enabled = 0;
$bar->add_variable(
mode => 'rw',
name => "Enabled",
type => 'bool',
value => \$enabled
);
DESCRIPTION
AntTweakBar (see http://anttweakbar.sourceforge.net/) is nice tiny GUI library for OpenGL/SDL/DirectX applications.
To display AntTweakBar in your OpenGL/SDL application you should do the following:
- intialize AntTweakBar(s):
-
AntTweakBar::init(TW_OPENGL); AntTweakBar::window_size($width, $height);
- draw AntTweakBar(s):
-
AntTweakBar::draw;
- let AntTweakBar(s) respond to user interactions:
-
AntTweakBar::eventSDL($event);
- create AntTweakBar instance(s)
-
my $bar = AntTweakBar->new("TweakBar");
- add variables into the $bar
-
my $value = 3.14; $bar->add_variable( mode => 'rw', name => "Enabled", type => 'integer', value => \$enabled );
See working examples in the eg
directoctory within the distribution.
EXPORT
Constants only
CONSTANTS
The following constants let AntTweakBar know which graphic system do you use.
TW_OPENGL
TW_OPENGL_CORE
TW_DIRECT3D9 (not implemented)
TW_DIRECT3D10 (not implemented)
TW_DIRECT3D11 (not implemented)
METHODS
new
my $bar = AntTweakBar->new(
"TweakBar & Perl",
size => '200 400',
color => '96 216 224'
);
my $another_bar = AntTweakBar->new(
"Misc.",
);
Creates new AntTweakBar instance. Optionally the list of strings of bar-related parameters can be provided. See the list of available at http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:twbarparamsyntax.
add_button
$bar->add_button(
name => 'my_btn',
cb => sub { say "clicked!" },
definition => "label='Click me!'", # optional
);
The definition parameters are the same as for variable. See http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:varparamsyntax#parameters.
add_separator
$bar->add_separator('separator-name');
add_variable
my $zoom = 1.0;
$bar->add_variable(
mode => 'rw',
name => "Zoom",
type => 'number',
value => \$zoom,
definition => " min=0.01 max=2.5 step=0.01 help='Bla-bla-bla.' ",
);
my $bool = undef;
$bar->add_variable(
mode => 'rw',
name => "bool_rw_cb",
type => 'bool',
cb_read => sub { $bool; },
cb_write => sub {
$bool = shift;
say "writing value $bool";
}
);
mode
, name
, type
are mandatory. Either value
or cb_read
should be specified. The definition
and cb_write
are optional.
mode
The mode can be rw
(read/write) or ro
(read only). The mode specified whether the variable value could be modified via AntTweakBar.
name
Defines the unique variable name at tweakbar. Unless label
is specified via defintion
, then name
also defines the visual label. for the variable.
type
Defines the type of variable. Original types http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:twtype has been reduced to:
- bool
- integer
- number (float)
- string
- color3f
-
variable must be reference to array, consisted of 3 float values: rgb.
- color4f
-
variable must be reference to array, consisted of 4 float values: rgba.
- direction
-
3D-vector (direction). The variable must be reference to array, consisted of 3 float values.
- quaternion
-
4D-vector (3D-object rotation). The variable must be reference to array, consisted of 4 float values.
- custom type of Anttweakbar::Type
value
The reference to the variable value. For complex types (e.g. quaternion) it must also be an reference to array of 3 numbers.
cb_read
Closure, that returns the actual value of variable.
cb_write($value)
Closure, that is been invoked when user sets new value to the variable. If cb_write
is undefined, then the variable considered readonly.
definition
An string that allows additiona tuning of variable. See http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:varparamsyntax#parameters for possible values.
remove_variable($name)
$bar->remove_variable('Zoom');
refresh
$bar->refresh;
Tells Anttweakbar that variable values are possibly changed and should be updated.
set_bar_params(%values)
$bar->set_bar_params(
size => '350 700,
valueswidth => '200'
visible => 'false',
);
Updates bar definition at runtime. See http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:twbarparamsyntax.
set_variable_params($var_name, $var_definition)
$bar->set_variable_params('ObjRotation', readonly => 'true');
Updates variable definition at runtime. See http://anttweakbar.sourceforge.net/doc/tools:anttweakbar:varparamsyntax#parameters
INITIALIZATION AND DRAW FUNCTIONS
init
AntTweakBar::init(TW_OPENGL);
Initializes AntTweakBar
terminate
AntTweakBar::terminate
Uninitializes AntTweakBar
window_size
AntTweakBar::window_size(640, 480);
Tell AntTweakBar the actual size of your window
draw
AntTweakBar::draw;
Draw AntTweakBar just before the frame buffer is presented (swapped).
OPENGL EVENT FUNCTIONS
eventMouseButtonGLUT
glutMouseFunc(\&AntTweakBar::eventMouseButtonGLUT);
Let AntTweakBar handles mouse button clicks
eventMouseMotionGLUT
glutMotionFunc(\&AntTweakBar::eventMouseMotionGLUT);
glutPassiveMotionFunc(\&AntTweakBar::eventMouseMotionGLUT);
Let AntTweakBar handles mouse movements with pressed button(s) and passive mouse movements
eventKeyboardGLUT
glutKeyboardFunc(\&AntTweakBar::eventKeyboardGLUT);
Let AntTweakBar handles key presses
eventSpecialGLUT
glutSpecialFunc(\&AntTweakBar::eventSpecialGLUT);
GLUTModifiersFunc
AntTweakBar::GLUTModifiersFunc(\&glutGetModifiers);
SDL EVENT FUNCTION
eventSDL
If you use SDL than it is more simple to let AntTweakBar process all input-related events via single call:
AntTweakBar::eventSDL($sdl_event);
SEE ALSO
Alien::AntTweakBar, SDL, OpenGL, http://anttweakbar.sourceforge.net/
AUTHOR
Ivan Baidakou <dmol@(gmx.com)>
COPYRIGHT AND LICENSE
Copyright (C) 2014 by Ivan Baidakou
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.20.0 or, at your option, any later version of Perl 5 you may have available.