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.