Chandra

 view release on metacpan or  search on metacpan

xs/app.xs  view on Meta::CPAN

{
    HV *hv = (HV *)SvRV(self);
    (void)hv_stores(hv, "_on_close", newSVsv(handler));
    RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
    RETVAL

 # ---- assets($root, prefix => $pfx) - lazy Chandra::Assets accessor ----

SV *
assets(self, ...)
    SV *self
CODE:
{
    HV *hv = (HV *)SvRV(self);
    SV **cached_svp = hv_fetchs(hv, "_assets", 0);

    if (cached_svp && SvOK(*cached_svp)) {
        RETVAL = SvREFCNT_inc(*cached_svp);
    } else {
        dSP;
        int count;
        SV *root_sv = (items > 1 && SvOK(ST(1))) ? ST(1) : NULL;

        if (!root_sv) {
            croak("assets() requires a root directory on first call");
        }

        load_module(PERL_LOADMOD_NOIMPORT,
            newSVpvs("Chandra::Assets"), NULL);

        ENTER; SAVETMPS;
        PUSHMARK(SP);
        XPUSHs(sv_2mortal(newSVpvs("Chandra::Assets")));
        XPUSHs(sv_2mortal(newSVpvs("root")));
        XPUSHs(root_sv);
        XPUSHs(sv_2mortal(newSVpvs("app")));
        XPUSHs(self);

        /* Forward remaining named args (prefix => 'xxx', etc.) */
        {
            I32 i;
            for (i = 2; i < items; i++) {
                XPUSHs(ST(i));
            }
        }

        PUTBACK;
        count = call_method("new", G_SCALAR);
        SPAGAIN;
        RETVAL = (count > 0) ? newSVsv(POPs) : newSV(0);
        PUTBACK; FREETMPS; LEAVE;

        (void)hv_stores(hv, "_assets", SvREFCNT_inc(RETVAL));
    }
}
OUTPUT:
    RETVAL

 # ---- clipboard() - returns Chandra::Clipboard class for convenience ----

SV *
clipboard(self)
    SV *self
CODE:
{
    load_module(PERL_LOADMOD_NOIMPORT,
        newSVpvs("Chandra::Clipboard"), NULL);
    RETVAL = newSVpvs("Chandra::Clipboard");
}
OUTPUT:
    RETVAL

 # ---- drag_drop() - lazy Chandra::DragDrop accessor ----

SV *
drag_drop(self)
    SV *self
CODE:
{
    HV *hv = (HV *)SvRV(self);
    SV **cached_svp = hv_fetchs(hv, "_dragdrop", 0);

    if (cached_svp && SvOK(*cached_svp)) {
        RETVAL = SvREFCNT_inc(*cached_svp);
    } else {
        dSP;
        int count;

        load_module(PERL_LOADMOD_NOIMPORT,
            newSVpvs("Chandra::DragDrop"), NULL);

        ENTER; SAVETMPS;
        PUSHMARK(SP);
        XPUSHs(sv_2mortal(newSVpvs("Chandra::DragDrop")));
        XPUSHs(sv_2mortal(newSVpvs("app")));
        XPUSHs(self);
        PUTBACK;
        count = call_method("new", G_SCALAR);
        SPAGAIN;
        RETVAL = (count > 0) ? SvREFCNT_inc(POPs) : &PL_sv_undef;
        PUTBACK; FREETMPS; LEAVE;

        (void)hv_stores(hv, "_dragdrop", SvREFCNT_inc(RETVAL));
    }
}
OUTPUT:
    RETVAL

 # ---- on_file_drop($coderef) - convenience for drag_drop->on_file_drop ----

SV *
on_file_drop(self, callback)
    SV *self
    SV *callback
CODE:
{
    SV *dd;
    dSP;
    int count;

    /* Get or create drag_drop instance */
    ENTER; SAVETMPS;



( run in 2.827 seconds using v1.01-cache-2.11-cpan-302cb4679cc )