Mercurial > MadButterfly
changeset 843:2bcacd29d95f
Define accessor for x and y to implement absolute location
author | wycc |
---|---|
date | Sun, 19 Sep 2010 11:36:03 +0800 |
parents | 76fe4afce640 |
children | 3c48a77b75d3 |
files | nodejs/coord.cc nodejs/coord.m4 |
diffstat | 2 files changed, 73 insertions(+), 1 deletions(-) [+] |
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.
--- a/nodejs/coord.m4 Sat Sep 18 21:23:51 2010 +0800 +++ b/nodejs/coord.m4 Sun Sep 19 11:36:03 2010 +0800 @@ -1,6 +1,10 @@ define([PROJ_PREFIX], [xnjsmb_auto_])dnl STRUCT([coord], [coord_t], - [ACCESSOR([opacity], [xnjsmb_coord_get_opacity],[xnjsmb_coord_set_opacity])], + [ + ACCESSOR([opacity], [xnjsmb_coord_get_opacity],[xnjsmb_coord_set_opacity]), + ACCESSOR([x], [xnjsmb_coord_get_x],[xnjsmb_coord_set_x]), + ACCESSOR([y], [xnjsmb_coord_get_y],[xnjsmb_coord_set_y]), + ], [METHOD([add_shape], [xnjsmb_coord_add_shape], (SELF, OBJ([shape], [shape], [shape_t]), ERR), 1, []), METHOD([remove], [xnjsmb_coord_remove], (SELF), 0, []),