AntTweakBar
view release on metacpan or search on metacpan
eg/available-properties.pl view on Meta::CPAN
);
my $bool = undef;
my $double = 0.33;
my $string = "bla-bla";
my $color3f = [1.0, 0.2, 0.4];
my $color4f = [0.0, 0.2, 0.4, 1.0];
my $direction = [1.0, 0.2, 0.4];
my $quaternion = [0.1, 0.2, 0.4, 1.0];
my $custom_idx = 0;
my $b2 = AntTweakBar->new("Perl callbacks");
$b2->add_variable(
mode => 'ro',
name => "bool_ro_cb",
type => 'bool',
cb_read => sub {
say "hello from bool_ro_cb!, bool = $bool";
return undef;
},
);
$b2->add_variable(
lib/AntTweakBar.pm view on Meta::CPAN
}
my $mode = $args{mode };
my $name = $args{name };
my $type = $args{type };
my $value = $args{value };
my $cb_read = $args{cb_read };
my $cb_write = $args{cb_write };
my $definition = $args{definition} // "";
croak "Either value or callbacks should be specified"
if ($value && ($cb_read || $cb_write));
croak "cb_read is mandatory when value isn't specied"
if (!$value && !$cb_read);
croak "value should be a reference"
if ($value && !ref($value));
$type = $type->name if(ref($type) eq 'AntTweakBar::Type');
$definition = _as_definition_string($definition)
if ($definition && ref($definition) eq 'HASH');
_add_variable($self->{_bar_ptr}, $mode, $name, $type, $value,
lib/AntTweakBar.xs view on Meta::CPAN
void _set_variable_parameter(TwBar* bar, const char* variable,
const char* param_name, const char* param_value) {
dTHX;
int result = TwSetParam(bar, variable, param_name, TW_PARAM_CSTRING, 1, param_value);
if(!result)
Perl_croak(aTHX_ "Error applying value '%s' of parameter %s to variable %s : %s",
param_value, param_name, variable, TwGetLastError());
}
/* CALLBACKS */
/* int/bool callbacks */
void TW_CALL _int_getter(void* value, void* data){
dTHX;
SV* sv = SvRV((SV*) data);
SvGETMAGIC(sv);
int iv = SvOK(sv) ? SvIV(sv) : 0;
*(int*)value = iv;
}
void TW_CALL _int_getter_cb(void* value, void* data){
lib/AntTweakBar.xs view on Meta::CPAN
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSViv(*(int*)value)));
PUTBACK;
call_sv(*cb, G_DISCARD);
FREETMPS;
LEAVE;
}
/* number(double) callbacks */
void TW_CALL _number_getter(void* value, void* data){
dTHX;
SV* sv = SvRV((SV*) data);
SvGETMAGIC(sv);
double dv = SvOK(sv) ? SvNV(sv) : 0.0;
*(double*)value = dv;
}
void TW_CALL _number_setter(const void* value, void* data){
lib/AntTweakBar.xs view on Meta::CPAN
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVnv(*(double*)value)));
PUTBACK;
call_sv(*cb, G_DISCARD);
FREETMPS;
LEAVE;
}
/* string callbacks */
void TW_CALL _string_getter(void* value, void* data){
dTHX;
SV* sv = SvRV((SV*) data);
SvGETMAGIC(sv);
const char* string = SvOK(sv) ? SvPV_nolen(sv) : "";
*(const char**)value = string;
}
void TW_CALL _string_getter_cb(void* value, void* data){
( run in 0.366 second using v1.01-cache-2.11-cpan-9b1e4054eb1 )