diff nodejs/coord.cc @ 843:2bcacd29d95f

Define accessor for x and y to implement absolute location
author wycc
date Sun, 19 Sep 2010 11:36:03 +0800
parents 379fd510ba38
children 88bd0eee2b00
line wrap: on
line diff
--- a/nodejs/coord.cc	Sat Sep 18 21:23:51 2010 +0800
+++ b/nodejs/coord.cc	Sun Sep 19 11:36:03 2010 +0800
@@ -282,6 +282,74 @@
     return Number::New(opacity);
 }
 
+#define cc(i) (coord_get_matrix(coord)[i])
+static void
+xnjsmb_coord_set_y(Handle<Object> self, coord_t *coord, Handle<Value> value, const char **str)
+{
+    Handle<Object> js_rt;
+    redraw_man_t *rdman;
+    co_aix y,ty;
+    co_aix xx,yy;
+
+    js_rt = GET(self, "mbrt")->ToObject();
+    ASSERT(js_rt != NULL);
+    rdman = xnjsmb_rt_rdman(js_rt);
+
+
+    ty = value->NumberValue();
+    xx = GET(self,"_x")->ToNumber()->NumberValue();
+    yy = GET(self,"_y")->ToNumber()->NumberValue();
+    y = ty-cc(3)*xx-cc(4)*yy;
+    coord_get_matrix(coord)[5] = y;
+    rdman_coord_changed(rdman, coord);
+}
+
+static Handle<Value>
+xnjsmb_coord_get_y(Handle<Object> self, coord_t *coord,
+			      const char **err) {
+    co_aix y;
+    co_aix xx,yy;
+    
+    xx = GET(self,"_x")->ToNumber()->NumberValue();
+    yy = GET(self,"_y")->ToNumber()->NumberValue();
+
+    y = cc(3)*xx+cc(4)*yy+cc(5);
+    return Number::New(y);
+}
+static void
+xnjsmb_coord_set_x(Handle<Object> self, coord_t *coord, Handle<Value> value, const char **str)
+{
+    Handle<Object> js_rt;
+    redraw_man_t *rdman;
+    co_aix x,tx;
+    co_aix xx,yy;
+    
+    xx = GET(self,"_x")->ToNumber()->NumberValue();
+    yy = GET(self,"_y")->ToNumber()->NumberValue();
+    js_rt = GET(self, "mbrt")->ToObject();
+    ASSERT(js_rt != NULL);
+    rdman = xnjsmb_rt_rdman(js_rt);
+    
+    tx = value->NumberValue();
+    x = tx-cc(0)*xx-cc(1)*yy;
+    coord_get_matrix(coord)[2] = x;
+    rdman_coord_changed(rdman, coord);
+}
+
+static Handle<Value>
+xnjsmb_coord_get_x(Handle<Object> self, coord_t *coord,
+			      const char **err) {
+    co_aix x;
+    co_aix xx,yy;
+    
+    xx = GET(self,"_x")->ToNumber()->NumberValue();
+    yy = GET(self,"_y")->ToNumber()->NumberValue();
+
+    x = cc(0)*xx+cc(1)*yy+cc(2);
+    return Number::New(x);
+}
+#undef m
+
 #include "coord-inc.h"
 
 /*! \brief This function used by \ref xnjsmb_mb_rt to wrap coord object.