Mercurial > MadButterfly
changeset 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 | 962d8436a303 |
children | 0ca8437a91fa |
files | nodejs/Makefile.am nodejs/X_supp_njs.c nodejs/X_supp_njs.h nodejs/mbfly_njs.cc nodejs/testcase.js nodejs/wscript src/X_supp.c |
diffstat | 7 files changed, 75 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/nodejs/Makefile.am Sun Jun 06 15:27:28 2010 +0800 +++ b/nodejs/Makefile.am Sun Jun 06 19:13:21 2010 +0800 @@ -1,7 +1,10 @@ mbfly_node_SRCS = mbfly_njs.cc X_supp_njs.c -mbfly_node_CFLAGS= -I$(abs_top_srcdir)/include -I$(prefix)/include \ +mbfly_node_CFLAGS= -I$(abs_top_builddir)/include \ + -I$(abs_top_srcdir)/include \ + -I$(prefix)/include \ @pangocairo_CFLAGS@ $(CFLAGS) +mbfly_node_LDFLAGS = -L$(abs_top_builddir)/src/.libs @pangocairo_LIBS@ all: mbfly.node clean: clean-mbfly-node @@ -9,6 +12,8 @@ mbfly.node: wscript $(mbfly_node_SRCS) cd $(srcdir); \ CFLAGS="$(mbfly_node_CFLAGS)" \ + LDFLAGS="$(mbfly_node_LDFLAGS)" \ + TOP_BUILDDIR="$(abs_top_builddir)" \ WAFLOCK=$(abs_builddir)/.lock-wscript \ $(NODE_WAF) configure build --blddir=$(abs_builddir)
--- a/nodejs/X_supp_njs.c Sun Jun 06 15:27:28 2010 +0800 +++ b/nodejs/X_supp_njs.c Sun Jun 06 19:13:21 2010 +0800 @@ -68,7 +68,7 @@ mb_tman_t *tman; redraw_man_t *rdman; mb_timeval_t now; - extern int _X_MB_flush_x_conn_nodejs(void *rt); + extern int _X_MB_flush_x_conn_for_nodejs(void *rt); tman = X_MB_tman(rt->xrt); get_now(&now); @@ -76,7 +76,7 @@ rdman = X_MB_rdman(rt->xrt); rdman_redraw_changed(rdman); - _X_MB_flush_x_conn_nodejs(rt->xrt); + _X_MB_flush_x_conn_for_nodejs(rt->xrt); set_next_timeout(rt); } @@ -86,7 +86,7 @@ * \param rt is a runtime object for X. */ void -X_njs_MB_handle_connection(njs_runtime_t *rt) { +X_njs_MB_init_handle_connection(njs_runtime_t *rt) { void *xrt = rt->xrt; mb_tman_t *tman; mb_timeval_t now, tmo;
--- a/nodejs/X_supp_njs.h Sun Jun 06 15:27:28 2010 +0800 +++ b/nodejs/X_supp_njs.h Sun Jun 06 19:13:21 2010 +0800 @@ -4,7 +4,7 @@ struct _njs_runtime; typedef struct _njs_runtime njs_runtime_t; -extern void X_njs_MB_handle_connection(njs_runtime_t *rt); +extern void X_njs_MB_init_handle_connection(njs_runtime_t *rt); extern void X_njs_MB_free(njs_runtime_t *rt); extern njs_runtime_t *X_njs_MB_new(char *display_name, int w, int h); extern void *_X_njs_MB_get_X_runtime(njs_runtime_t *rt);
--- a/nodejs/mbfly_njs.cc Sun Jun 06 15:27:28 2010 +0800 +++ b/nodejs/mbfly_njs.cc Sun Jun 06 19:13:21 2010 +0800 @@ -1,8 +1,62 @@ #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; @@ -17,4 +71,7 @@ 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()); }
--- a/nodejs/testcase.js Sun Jun 06 15:27:28 2010 +0800 +++ b/nodejs/testcase.js Sun Jun 06 19:13:21 2010 +0800 @@ -3,5 +3,6 @@ var sys = require("sys"); sys.puts(r); +var mb_rt = mbfly.mb_rt(":0.0", 300, 200); setTimeout(function() { sys.puts("timeout"); }, 1000);
--- a/nodejs/wscript Sun Jun 06 15:27:28 2010 +0800 +++ b/nodejs/wscript Sun Jun 06 19:13:21 2010 +0800 @@ -9,18 +9,23 @@ def configure(conf): import Options + import os + conf.check_tool('compiler_cxx') conf.check_tool('compiler_cc') conf.check_tool('node_addon') conf.env.SRCDIR = Options.options.srcdir + conf.env.TOP_BUILDDIR = os.environ['TOP_BUILDDIR'] pass def build(conf): - import os + import Utils + obj = conf.new_task_gen('cxx', 'shlib', 'node_addon') obj.target = 'mbfly' obj.source = 'mbfly_njs.cc' obj.add_objects = 'X_supp_njs.o' + obj.staticlib = 'mbfly' obj = conf.new_task_gen('cc', 'shlib', 'node_addon') obj.target = 'X_supp_njs.o'
--- a/src/X_supp.c Sun Jun 06 15:27:28 2010 +0800 +++ b/src/X_supp.c Sun Jun 06 19:13:21 2010 +0800 @@ -666,7 +666,7 @@ /*! \brief Flush buffer for the X connection of a runtime object. */ -int _X_MB_flush_x_conn_nodejs(void *rt) { +int _X_MB_flush_x_conn_for_nodejs(void *rt) { return XFlush(((X_MB_runtime_t *)rt)->display); }