view libclient/malikania/js-animation.cpp @ 33:d4f5f7231b84

Misc: switch to .hpp, dos2unix everything while here, #478
author David Demelier <markand@malikania.fr>
date Fri, 17 Jun 2016 13:12:35 +0200
parents a1e80d991968
children 8e1241156034
line wrap: on
line source

/*
 * js-animation.cpp -- animation description (JavaScript binding)
 *
 * Copyright (c) 2013-2016 Malikania Authors
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#include "client-resources-loader.hpp"
#include "js-animation.hpp"

namespace malikania {

namespace {

duk::Ret constructor(duk::ContextPtr ctx)
{
    duk::StackAssert sa(ctx);

    if (!duk_is_constructor_call(ctx)) {
        duk::raise(ctx, DUK_ERR_ERROR, "animation must be new-constructed");
    }

    try {
        auto loader = duk::getGlobal<ClientResourcesLoader *>(ctx, "\xff""\xff""loader");
        auto animation = loader->loadAnimation(duk::require<std::string>(ctx, 0));

        duk::construct(ctx, std::make_shared<Animation>(std::move(animation)));
    } catch (const std::exception &ex) {
        duk::raise(ctx, DUK_ERR_ERROR, "%s", ex.what());
    }

    return 0;
}

} // !namespace

void loadMalikaniaAnimation(duk::ContextPtr ctx)
{
    duk::StackAssert sa(ctx);

    duk::getGlobal<void>(ctx, "Malikania");
    duk::push(ctx, duk::Function{constructor, 1});
    duk::putProperty(ctx, -2, "Animation");
    duk::pop(ctx);
}

} // !malikania