diff nodejs/coord.cc @ 557:0ca8437a91fa Android_Skia

Implement Indexed Property interceptors
author Thinker K.F. Li <thinker@branda.to>
date Sun, 06 Jun 2010 21:27:34 +0800
parents
children ce7a35abcb0d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nodejs/coord.cc	Sun Jun 06 21:27:34 2010 +0800
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <v8.h>
+
+extern "C" {
+#include "mb.h"
+#include "mb_X_supp.h"
+#include "mb_tools.h"
+#include "X_supp_njs.h"
+}
+
+using namespace v8;
+
+static Handle<Value>
+xnjsmb_coord_get_index(uint32_t index, const AccessorInfo &info) {
+    HandleScope scope;
+    Handle<Object> self;
+    coord_t *coord;
+    co_aix v;
+    Handle<Value> exc;
+
+    if(index < 0 || index >= 6) {
+	exc = Exception::Error(String::New("Invalid index"));
+	return ThrowException(exc);
+    }
+    
+    self = info.This();
+    coord = (coord_t *)External::Unwrap(self->Get(String::New("_njs_coord")));
+    v = coord_get_matrix(coord)[index];
+
+    return Number::New(v);
+}
+
+static Handle<Value>
+xnjsmb_coord_set_index(uint32_t index, Local<Value> value,
+		       const AccessorInfo &info) {
+    
+    HandleScope scope;
+    Handle<Object> self;
+    redraw_man_t *rdman;
+    coord_t *coord;
+    co_aix v;
+    Handle<Value> exc;
+
+    if(index < 0 || index >= 6) {
+	exc = Exception::Error(String::New("Invalid index"));
+	return ThrowException(exc);
+    }
+    if(!value->IsNumber()) {
+	exc = Exception::Error(String::New("Invalid value"));
+	return ThrowException(exc);
+    }
+
+    self = info.This();
+    coord = (coord_t *)External::Unwrap(self->Get(String::New("_njs_coord")));
+    v = value->NumberValue();
+    coord_get_matrix(coord)[index] = v;
+
+    rdman = (redraw_man_t *)
+	External::Unwrap(self->Get(String::New("_njs_rdman")));
+    rdman_coord_changed(rdman, coord);
+
+    return value;
+}