view nodejs/mbfly_njs.cc @ 556:c9d23f7279a4 Android_Skia

The first testcase that nodejs code can show a MadButterfly window. This testcase call MadButterfly from Javascript with nodejs framework. The testcase show a MadButterfly window in X.
author Thinker K.F. Li <thinker@branda.to>
date Sun, 06 Jun 2010 19:13:21 +0800
parents f69b0814ef3c
children 0ca8437a91fa
line wrap: on
line source

#include <stdio.h>
#include <v8.h>

extern "C" {
#include "X_supp_njs.h"
}

using namespace v8;

/*! \defgroup njs_template_cb Callback functions for v8 engine and nodejs.
 *
 * @{
 */

/*! \brief to Create a njs runtime object for MadButterfly.
 *
 * Three arguments are requried.  They are
 *   - display name,
 *   - width, and
 *   - height.
 */
static Handle<Value>
xnjsmb_new(const Arguments &args) {
    int argc;
    Handle<Value> exc;
    njs_runtime_t *rt;
    char *display_name;
    int width, height;
    Handle<Object> self;

    argc = args.Length();
    if(argc != 3) {
	exc = Exception::Error(String::New("Need 3 arguments."));
	return ThrowException(exc);
    }

    if(!args[0]->IsString() || !args[1]->IsInt32() || !args[2]->IsInt32()) {
	exc = Exception::Error(String::New("Invalid argument type."));
	return ThrowException(exc);
    }
    
    String::Utf8Value disp_utf8(args[0]->ToString());
    display_name = *disp_utf8;
    width = args[1]->Int32Value();
    height = args[2]->Int32Value();
    rt = X_njs_MB_new(display_name, width, height);

    self = args.This();
    self->Set(String::New("_njs_rt"), External::Wrap(rt));
    
    X_njs_MB_init_handle_connection(rt);
}

static Handle<Value>
xnjsmb_handle_connection(const Arguments &args) {
}

/* @} */

Handle<Value>
hello_func(const Arguments &args) {
    HandleScope scope;

    return String::Concat(String::New("World"), args[0]->ToString());
}

extern "C" void
init(Handle<Object> target) {
    HandleScope scope;
    Handle<FunctionTemplate> func;

    func = FunctionTemplate::New(hello_func);
    target->Set(String::New("Hello"), func->GetFunction());

    func = FunctionTemplate::New(xnjsmb_new);
    target->Set(String::New("mb_rt"), func->GetFunction());
}