Mercurial > MadButterfly
annotate nodejs/coord.cc @ 1414:036f2b447860
Merge
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 06 Apr 2011 14:37:34 +0800 |
parents | 88c8c874f4b8 |
children | f34d2fcbcd0d |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 #include <stdio.h> |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 #include <v8.h> |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 extern "C" { |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 #include "mb.h" |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 #include "mb_X_supp.h" |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 #include "mb_tools.h" |
1056
88bd0eee2b00
Rename X_supp_njs.[ch] to njs_mb_supp.[ch].
Thinker K.F. Li <thinker@codemud.net>
parents:
843
diff
changeset
|
10 #include "njs_mb_supp.h" |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 } |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
13 #include "mbfly_njs.h" |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
14 |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
15 #ifndef ASSERT |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
16 #define ASSERT(x) |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
17 #endif |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
18 |
743
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
19 #define OK 0 |
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
20 |
739
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
21 /*! \page jsgc How to Manage Life-cycle of Objects for Javascript. |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
22 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
23 * The life-cycle of MadButterfly ojects are simple. A object is live |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
24 * when it is created and dead when it is free. When a coord or shape |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
25 * is free, it is also removed from the tree. There is not way to |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
26 * remove a coord or a shape without freeing it. So, if you want to |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
27 * remove a coord or a shape object from the tree, you can only free |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
28 * it. |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
29 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
30 * Javascript, in conventional, does not free an object. It has GC, |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
31 * the engine, being used, will free an object if it is no more |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
32 * referenced. So, we had better provide a removing function, but |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
33 * actually free an object. In idea situation, a new MB object would |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
34 * be created for and attached on the JS object, when an object added |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
35 * back to the tree. But, it means we need to keep states of an |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
36 * object and create a new one with the same states later. It is |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
37 * complicated. So, once an object is removed, it is invalidated. |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
38 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
39 * I hope someone would implement a higher abstract layer, in JS, to |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
40 * implement the idea model that recreate a new object when an |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
41 * invalidated JS object being added back. |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
42 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
43 * An invalid object is the one with NULL internal field and obj.valid |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
44 * == false. The binding of MadButterfly hold a reference to every |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
45 * object added to the tree of a mbrt (runtime object), and remove the |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
46 * reference and invalidate it when it being removed. |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
47 * |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
48 * For coords, they are always attached to the tree when it is valid. |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
49 * So, binding hold a persistent reference to it. The reference is |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
50 * purged when a coord being removed from the tree and being |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
51 * invalidated. |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
52 * |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
53 * For any shape, it is not attached to the tree at begining, but is |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
54 * attached to a tree laterly, or is collected by GC. The binding |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
55 * hold a weak reference for a new shape, and upgrade to a strong |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
56 * reference when the shape being added to the tree. |
739
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
57 */ |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
58 |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
59 using namespace v8; |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
60 |
684
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
61 /*! \defgroup xnjsmb_coord JS binding for coord objects. |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
62 * \ingroup xnjsmb |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
63 * |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
64 * @{ |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
65 */ |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
66 /*! \brief Invalidate JS objects for coords and shapes in a subtree. |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
67 * |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
68 * \param self is the object of the root of subtree. |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
69 * |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
70 * \sa \ref jsgc |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
71 */ |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
72 static void |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
73 xnjsmb_coord_invalidate_subtree(coord_t *coord) { |
742
24038e7a365b
Reorder instructions to invalidate coords correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
741
diff
changeset
|
74 Persistent<Object> *child_hdl; |
24038e7a365b
Reorder instructions to invalidate coords correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
741
diff
changeset
|
75 Persistent<Object> *mem_hdl; |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
76 coord_t *child; |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
77 shape_t *mem; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
78 Handle<Value> _false = Boolean::New(0); |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
79 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
80 /* Invalidate all coords in the subtree */ |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
81 FOR_COORDS_PREORDER(coord, child) { |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
82 child_hdl = (Persistent<Object> *)mb_prop_get(&child->obj.props, |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
83 PROP_JSOBJ); |
1406
88c8c874f4b8
Check if the js object has been deleted. This prevent the issue that a coord is removed twice.
wycc
parents:
1377
diff
changeset
|
84 if (child_hdl == NULL) continue; |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
85 SET(*child_hdl, "valid", _false); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
86 WRAP(*child_hdl, NULL); |
766
be0e02948c1d
Improve resource management for coords, shapes and paints.
Thinker K.F. Li <thinker@codemud.net>
parents:
749
diff
changeset
|
87 child_hdl->Dispose(); |
746
1dbc74a14199
Delete internal reference ob binding when invalidating coords and/or shapes
Thinker K.F. Li <thinker@codemud.net>
parents:
745
diff
changeset
|
88 delete child_hdl; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
89 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
90 /* Invalidate members of a coord */ |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
91 FOR_COORD_SHAPES(child, mem) { |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
92 mem_hdl = (Persistent<Object> *)mb_prop_get(&mem->obj.props, |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
93 PROP_JSOBJ); |
1406
88c8c874f4b8
Check if the js object has been deleted. This prevent the issue that a coord is removed twice.
wycc
parents:
1377
diff
changeset
|
94 if (mem_hdl == NULL) continue; |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
95 SET(*mem_hdl, "valid", _false); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
96 WRAP(*mem_hdl, NULL); |
766
be0e02948c1d
Improve resource management for coords, shapes and paints.
Thinker K.F. Li <thinker@codemud.net>
parents:
749
diff
changeset
|
97 mem_hdl->Dispose(); |
746
1dbc74a14199
Delete internal reference ob binding when invalidating coords and/or shapes
Thinker K.F. Li <thinker@codemud.net>
parents:
745
diff
changeset
|
98 delete mem_hdl; |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
99 } |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
100 } |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
101 } |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
102 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
103 /*! \brief Free C objects for coords and shapes in a subtree. |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
104 * |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
105 * \param self is the object of the root of subtree. |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
106 * |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
107 * \sa \ref jsgc |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
108 */ |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
109 static void |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
110 xnjsmb_coord_free_subtree(redraw_man_t *rdman, coord_t *coord) { |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
111 coord_t *child, *last_child; |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
112 shape_t *mem, *last_mem; |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
113 int r; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
114 |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
115 rdman_coord_changed(rdman, coord); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
116 |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
117 last_child = NULL; |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
118 FOR_COORDS_POSTORDER(coord, child) { |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
119 if(last_child != NULL) { |
768
13669b28826d
Fix issue of memory leaking for coord objects.
Thinker K.F. Li <thinker@codemud.net>
parents:
766
diff
changeset
|
120 r = rdman_coord_free(rdman, last_child); |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
121 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
122 THROW_noret("Unknown error"); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
123 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
124 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
125 /* Free members of a coord */ |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
126 last_mem = NULL; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
127 FOR_COORD_SHAPES(child, mem) { |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
128 if(last_mem != NULL) { |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
129 r = rdman_shape_free(rdman, last_mem); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
130 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
131 THROW_noret("Unknown error"); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
132 } |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
133 |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
134 last_mem = mem; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
135 } |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
136 if(last_mem != NULL) { |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
137 r = rdman_shape_free(rdman, last_mem); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
138 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
139 THROW_noret("Unknown error"); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
140 } |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
141 |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
142 last_child = child; |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
143 } |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
144 if(last_child != NULL) { |
768
13669b28826d
Fix issue of memory leaking for coord objects.
Thinker K.F. Li <thinker@codemud.net>
parents:
766
diff
changeset
|
145 r = rdman_coord_free(rdman, last_child); |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
146 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
147 THROW_noret("Unknown error"); |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
148 } |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
149 } |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
150 |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
151 static void |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
152 xnjsmb_coord_mod(Handle<Object> self, coord_t *coord) { |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
153 Persistent<Object> *self_hdl; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
154 subject_t *subject; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
155 Handle<Value> subject_o; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
156 |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
157 /* Keep associated js object in property store for retrieving, |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
158 * later, without create new js object. |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
159 */ |
743
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
160 self_hdl = new Persistent<Object>(); |
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
161 *self_hdl = Persistent<Object>::New(self); |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
162 mb_prop_set(&coord->obj.props, PROP_JSOBJ, self_hdl); |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
163 |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
164 subject = coord->mouse_event; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
165 subject_o = export_xnjsmb_auto_subject_new(subject); |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
166 SET(self, "mouse_event", subject_o); |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
167 SET(self, "valid", Boolean::New(1)); |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
168 } |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
169 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
170 static float |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
171 coord_get_index(coord_t *coord, Handle<Object> self, int idx, |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
172 const char **err) { |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
173 if(idx < 0 || idx >= 6) { |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
174 *err = "Invalid index: out of range"; |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
175 return 0; |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
176 } |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
177 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
178 return coord_get_matrix(coord)[idx]; |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
179 } |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
180 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
181 static float |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
182 coord_set_index(coord_t *coord, Handle<Object> self, |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
183 int idx, float v, const char **err) { |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
184 Handle<Object> js_rt; |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
185 redraw_man_t *rdman; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
186 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
187 if(idx < 0 || idx >= 6) { |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
188 *err = "Invalid index: out of range"; |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
189 return 0; |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
190 } |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
191 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
192 coord_get_matrix(coord)[idx] = v; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
193 |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
194 js_rt = GET(self, "mbrt")->ToObject(); |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
195 rdman = xnjsmb_rt_rdman(js_rt); |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
196 rdman_coord_changed(rdman, coord); |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
197 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
198 return v; |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
199 } |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
200 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
201 static void |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
202 xnjsmb_coord_add_shape(coord_t *coord, Handle<Object> self, |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
203 shape_t *shape, const char **err) { |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
204 Handle<Object> js_rt; |
748
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
205 Persistent<Object> *shape_hdl; |
566
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
206 redraw_man_t *rdman; |
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
207 int r; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
208 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
209 js_rt = GET(self, "mbrt")->ToObject(); |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
210 rdman = xnjsmb_rt_rdman(js_rt); |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
211 r = rdman_add_shape(rdman, shape, coord); |
566
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
212 if(r != 0) |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
213 *err = "Unknown error"; |
748
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
214 |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
215 /* see \ref jsgc */ |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
216 shape_hdl = (Persistent<Object> *)mb_prop_get(&shape->obj.props, |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
217 PROP_JSOBJ); |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
218 shape_hdl->ClearWeak(); |
778
61c217f8cec8
Fix bug of transformation from user space to image space.
Thinker K.F. Li <thinker@codemud.net>
parents:
768
diff
changeset
|
219 rdman_shape_changed(rdman, shape); |
566
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
220 } |
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
221 |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
222 static void |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
223 xnjsmb_coord_remove(coord_t *coord, Handle<Object> self) { |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
224 Handle<Object> js_rt; |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
225 redraw_man_t *rdman; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
226 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
227 if(!GET(self, "valid")->ToBoolean()->Value()) /* Invalidated object */ |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
228 THROW_noret("Invalid object"); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
229 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
230 js_rt = GET(self, "mbrt")->ToObject(); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
231 rdman = xnjsmb_rt_rdman(js_rt); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
232 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
233 xnjsmb_coord_invalidate_subtree(coord); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
234 xnjsmb_coord_free_subtree(rdman, coord); |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
235 } |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
236 |
1377
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
237 static void |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
238 _xnjsmb_coord_clone_from_subtree_mod(Handle<Object> src, Handle<Value> ret) { |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
239 Handle<Object> js_rt; |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
240 Handle<Object> ret_obj = ret->ToObject(); |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
241 |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
242 js_rt = GET(src, "mbrt")->ToObject(); |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
243 SET(ret_obj, "mbrt", js_rt); |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
244 } |
8ecee58c85c6
Fix issue of crashing for cloned subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
1372
diff
changeset
|
245 |
1372
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
246 static coord_t * |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
247 xnjsmb_coord_clone_from_subtree(coord_t *coord, Handle<Object> self, |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
248 coord_t *src, const char **err) { |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
249 Handle<Object> js_rt; |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
250 redraw_man_t *rdman; |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
251 coord_t *cloning; |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
252 |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
253 js_rt = GET(self, "mbrt")->ToObject(); |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
254 ASSERT(js_rt != NULL); |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
255 rdman = xnjsmb_rt_rdman(js_rt); |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
256 |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
257 cloning = rdman_coord_clone_from_subtree(rdman, coord, src); |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
258 if(cloning == NULL) { |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
259 *err = "can not clone a subtree (allocate memory)"; |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
260 return NULL; |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
261 } |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
262 |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
263 return cloning; |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
264 } |
0afd598a0b30
Add clone_from_subtree() for coord object of nodejs
Thinker K.F. Li <thinker@codemud.net>
parents:
1056
diff
changeset
|
265 |
749
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
266 static void |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
267 xnjsmb_coord_show(coord_t *coord, Handle<Object> self) { |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
268 Handle<Object> js_rt; |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
269 redraw_man_t *rdman; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
270 |
749
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
271 js_rt = GET(self, "mbrt")->ToObject(); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
272 ASSERT(js_rt != NULL); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
273 rdman = xnjsmb_rt_rdman(js_rt); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
274 |
749
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
275 coord_show(coord); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
276 rdman_coord_changed(rdman, coord); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
277 } |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
278 |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
279 static void |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
280 xnjsmb_coord_hide(coord_t *coord, Handle<Object> self) { |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
281 Handle<Object> js_rt; |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
282 redraw_man_t *rdman; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
283 |
749
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
284 js_rt = GET(self, "mbrt")->ToObject(); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
285 ASSERT(js_rt != NULL); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
286 rdman = xnjsmb_rt_rdman(js_rt); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
287 |
749
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
288 coord_hide(coord); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
289 rdman_coord_changed(rdman, coord); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
290 } |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
291 |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
292 static void |
829
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
293 xnjsmb_coord_set_opacity(Handle<Object> self, coord_t *coord, Handle<Value> value, const char **str) |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
294 { |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
295 Handle<Object> js_rt; |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
296 redraw_man_t *rdman; |
829
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
297 |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
298 js_rt = GET(self, "mbrt")->ToObject(); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
299 ASSERT(js_rt != NULL); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
300 rdman = xnjsmb_rt_rdman(js_rt); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
301 |
829
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
302 |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
303 coord_set_opacity(coord, value->NumberValue()); |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
304 rdman_coord_changed(rdman, coord); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
305 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
778
diff
changeset
|
306 |
829
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
307 static Handle<Value> |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
308 xnjsmb_coord_get_opacity(Handle<Object> self, coord_t *coord, |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
309 const char **err) { |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
310 float opacity; |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
311 |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
312 opacity = coord_get_opacity(coord); |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
313 return Number::New(opacity); |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
314 } |
379fd510ba38
Define accessor for the opacity attribute of the coord
wycc
parents:
822
diff
changeset
|
315 |
843
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
316 #define cc(i) (coord_get_matrix(coord)[i]) |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
317 static void |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
318 xnjsmb_coord_set_y(Handle<Object> self, coord_t *coord, Handle<Value> value, const char **str) |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
319 { |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
320 Handle<Object> js_rt; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
321 redraw_man_t *rdman; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
322 co_aix y,ty; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
323 co_aix xx,yy; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
324 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
325 js_rt = GET(self, "mbrt")->ToObject(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
326 ASSERT(js_rt != NULL); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
327 rdman = xnjsmb_rt_rdman(js_rt); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
328 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
329 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
330 ty = value->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
331 xx = GET(self,"_x")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
332 yy = GET(self,"_y")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
333 y = ty-cc(3)*xx-cc(4)*yy; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
334 coord_get_matrix(coord)[5] = y; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
335 rdman_coord_changed(rdman, coord); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
336 } |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
337 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
338 static Handle<Value> |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
339 xnjsmb_coord_get_y(Handle<Object> self, coord_t *coord, |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
340 const char **err) { |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
341 co_aix y; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
342 co_aix xx,yy; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
343 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
344 xx = GET(self,"_x")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
345 yy = GET(self,"_y")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
346 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
347 y = cc(3)*xx+cc(4)*yy+cc(5); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
348 return Number::New(y); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
349 } |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
350 static void |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
351 xnjsmb_coord_set_x(Handle<Object> self, coord_t *coord, Handle<Value> value, const char **str) |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
352 { |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
353 Handle<Object> js_rt; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
354 redraw_man_t *rdman; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
355 co_aix x,tx; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
356 co_aix xx,yy; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
357 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
358 xx = GET(self,"_x")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
359 yy = GET(self,"_y")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
360 js_rt = GET(self, "mbrt")->ToObject(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
361 ASSERT(js_rt != NULL); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
362 rdman = xnjsmb_rt_rdman(js_rt); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
363 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
364 tx = value->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
365 x = tx-cc(0)*xx-cc(1)*yy; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
366 coord_get_matrix(coord)[2] = x; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
367 rdman_coord_changed(rdman, coord); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
368 } |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
369 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
370 static Handle<Value> |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
371 xnjsmb_coord_get_x(Handle<Object> self, coord_t *coord, |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
372 const char **err) { |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
373 co_aix x; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
374 co_aix xx,yy; |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
375 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
376 xx = GET(self,"_x")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
377 yy = GET(self,"_y")->ToNumber()->NumberValue(); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
378 |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
379 x = cc(0)*xx+cc(1)*yy+cc(2); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
380 return Number::New(x); |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
381 } |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
382 #undef m |
2bcacd29d95f
Define accessor for x and y to implement absolute location
wycc
parents:
829
diff
changeset
|
383 |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
384 #include "coord-inc.h" |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
385 |
684
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
386 /*! \brief This function used by \ref xnjsmb_mb_rt to wrap coord object. |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
387 */ |
666
b6fb543d69ee
Use binding generator to implement mb_rt
Thinker K.F. Li <thinker@branda.to>
parents:
661
diff
changeset
|
388 Handle<Value> export_xnjsmb_auto_coord_new(coord_t *coord) { |
695 | 389 return xnjsmb_auto_coord_new(coord); |
666
b6fb543d69ee
Use binding generator to implement mb_rt
Thinker K.F. Li <thinker@branda.to>
parents:
661
diff
changeset
|
390 } |
b6fb543d69ee
Use binding generator to implement mb_rt
Thinker K.F. Li <thinker@branda.to>
parents:
661
diff
changeset
|
391 |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
392 /*! \brief Initialize Javascript object for root coord of a runtime. |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
393 * |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
394 * \param js_rt is the runtime object to create the root object for. |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
395 * |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
396 * After the function, js_rt.root is the object for root coord in |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
397 * Javascript. |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
398 */ |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
399 void |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
400 xnjsmb_coord_mkroot(Handle<Object> js_rt) { |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
401 redraw_man_t *rdman; |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
402 coord_t *root; |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
403 Handle<Object> obj; |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
404 static int init_flag = 0; |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
405 |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
406 if(!init_flag) { |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
407 xnjsmb_auto_coord_init(); |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
408 init_flag = 1; |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
409 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
810
diff
changeset
|
410 |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
411 rdman = xnjsmb_rt_rdman(js_rt); |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
412 root = rdman_get_root(rdman); |
661
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
413 obj = xnjsmb_auto_coord_new(root).As<Object>(); |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
414 SET(obj, "mbrt", js_rt); |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
415 |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
416 SET(js_rt, "root", obj); |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
417 } |
684
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
418 |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
419 /* @} */ |