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.384 second using v1.01-cache-2.11-cpan-9b1e4054eb1 )