Mercurial > MadButterfly
annotate nodejs/coord.cc @ 776:77b561bb7929
Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
However, the image does not work here since it does not use the transformation of the group.
author | wycc |
---|---|
date | Mon, 30 Aug 2010 08:56:44 +0800 |
parents | 13669b28826d |
children | 61c217f8cec8 |
rev | line source |
---|---|
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 #include <stdio.h> |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
2 #include <v8.h> |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 extern "C" { |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 #include "mb.h" |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 #include "mb_X_supp.h" |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 #include "mb_tools.h" |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 #include "X_supp_njs.h" |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 } |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
11 #include "mbfly_njs.h" |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
12 |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
13 #ifndef ASSERT |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
14 #define ASSERT(x) |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
15 #endif |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
16 |
743
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
17 #define OK 0 |
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
18 |
739
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
19 /*! \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
|
20 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
21 * 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
|
22 * 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
|
23 * 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
|
24 * 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
|
25 * 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
|
26 * it. |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
27 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
28 * 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
|
29 * 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
|
30 * 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
|
31 * 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
|
32 * 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
|
33 * 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
|
34 * 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
|
35 * 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
|
36 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
37 * 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
|
38 * 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
|
39 * 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
|
40 * |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
41 * 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
|
42 * == 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
|
43 * 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
|
44 * 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
|
45 * |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
46 * 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
|
47 * 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
|
48 * 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
|
49 * invalidated. |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
50 * |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
51 * 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
|
52 * 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
|
53 * 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
|
54 * 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
|
55 */ |
4916c3a3fe3c
Design doc for life-cycle of MB objects for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
695
diff
changeset
|
56 |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
57 using namespace v8; |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
58 |
684
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
59 /*! \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
|
60 * \ingroup xnjsmb |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
61 * |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
62 * @{ |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
63 */ |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
64 /*! \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
|
65 * |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
66 * \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
|
67 * |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
68 * \sa \ref jsgc |
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 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
|
71 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
|
72 Persistent<Object> *child_hdl; |
24038e7a365b
Reorder instructions to invalidate coords correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
741
diff
changeset
|
73 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
|
74 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
|
75 shape_t *mem; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
76 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
|
77 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
78 /* 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
|
79 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
|
80 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
|
81 PROP_JSOBJ); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 delete child_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
|
86 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
87 /* 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
|
88 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
|
89 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
|
90 PROP_JSOBJ); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
91 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
|
92 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
|
93 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
|
94 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
|
95 } |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
96 } |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
97 } |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
98 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
99 /*! \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
|
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 * \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
|
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 * \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
|
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 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
|
106 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
|
107 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
|
108 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
|
109 int r; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
110 |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
111 rdman_coord_changed(rdman, coord); |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
112 |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
113 last_child = NULL; |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
114 FOR_COORDS_POSTORDER(coord, child) { |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
115 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
|
116 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
|
117 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
118 THROW_noret("Unknown error"); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
119 } |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
120 |
745
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
121 /* Free members of a coord */ |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
122 last_mem = NULL; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
123 FOR_COORD_SHAPES(child, mem) { |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
124 if(last_mem != NULL) { |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
125 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
|
126 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
127 THROW_noret("Unknown error"); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
128 } |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
129 |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
130 last_mem = mem; |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
131 } |
744
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
132 if(last_mem != NULL) { |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
133 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
|
134 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
135 THROW_noret("Unknown error"); |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
136 } |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
137 |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
138 last_child = child; |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
139 } |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
140 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
|
141 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
|
142 if(r != OK) |
6a988e23ad2a
A dirty implementation of removing subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
743
diff
changeset
|
143 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
|
144 } |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
145 } |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
146 |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
147 static void |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
148 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
|
149 Persistent<Object> *self_hdl; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
150 subject_t *subject; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
151 Handle<Value> subject_o; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
152 |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
153 /* 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
|
154 * later, without create new js object. |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
155 */ |
743
dd1f3382d6a4
Create a persistent handle for coords and shapes correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
742
diff
changeset
|
156 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
|
157 *self_hdl = Persistent<Object>::New(self); |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
158 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
|
159 |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
160 subject = coord->mouse_event; |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
161 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
|
162 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
|
163 SET(self, "valid", Boolean::New(1)); |
680
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
164 } |
a588eefd3f04
Refactor to xnjsmb_coord_mod().
Thinker K.F. Li <thinker@branda.to>
parents:
667
diff
changeset
|
165 |
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
|
166 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
|
167 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
|
168 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
|
169 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
|
170 *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
|
171 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
|
172 } |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
173 |
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
|
174 return coord_get_matrix(coord)[idx]; |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
175 } |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
176 |
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
|
177 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
|
178 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
|
179 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
|
180 Handle<Object> js_rt; |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
181 redraw_man_t *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
|
182 |
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 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
|
184 *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
|
185 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
|
186 } |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
187 |
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
|
188 coord_get_matrix(coord)[idx] = v; |
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 |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
190 js_rt = GET(self, "mbrt")->ToObject(); |
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
191 rdman = xnjsmb_rt_rdman(js_rt); |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
192 rdman_coord_changed(rdman, coord); |
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
193 |
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
|
194 return v; |
557
0ca8437a91fa
Implement Indexed Property interceptors
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
195 } |
560
ce7a35abcb0d
Function to instantiate coord for Javascript
Thinker K.F. Li <thinker@branda.to>
parents:
557
diff
changeset
|
196 |
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
|
197 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
|
198 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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 int r; |
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
204 |
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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 *err = "Unknown error"; |
748
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
210 |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
211 /* see \ref jsgc */ |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
212 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
|
213 PROP_JSOBJ); |
56a5e08cd8af
Make shapes can be removed from the tree
Thinker K.F. Li <thinker@codemud.net>
parents:
746
diff
changeset
|
214 shape_hdl->ClearWeak(); |
566
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
215 } |
6639d386db78
Function of add a shape to a coord in Javascript.
Thinker K.F. Li <thinker@branda.to>
parents:
563
diff
changeset
|
216 |
741
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
217 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
|
218 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
|
219 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
|
220 redraw_man_t *rdman; |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
221 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
222 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
|
223 THROW_noret("Invalid object"); |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
224 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
225 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
|
226 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
|
227 |
4ccb0553e804
Refactor code of free C objects into xnjsmb_coord_free_subtree
Thinker K.F. Li <thinker@codemud.net>
parents:
744
diff
changeset
|
228 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
|
229 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
|
230 } |
d8764f10e141
Remove a coord from the tree in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
739
diff
changeset
|
231 |
749
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
232 static void |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
233 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
|
234 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
|
235 redraw_man_t *rdman; |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
236 |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
237 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
|
238 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
|
239 rdman = xnjsmb_rt_rdman(js_rt); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
240 |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
241 coord_show(coord); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
242 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
|
243 } |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
244 |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
245 static void |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
246 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
|
247 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
|
248 redraw_man_t *rdman; |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
249 |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
250 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
|
251 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
|
252 rdman = xnjsmb_rt_rdman(js_rt); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
253 |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
254 coord_hide(coord); |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
255 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
|
256 } |
ed59e659a202
Implement binding for hide/show for shapes and coords
Thinker K.F. Li <thinker@codemud.net>
parents:
748
diff
changeset
|
257 |
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
|
258 #include "coord-inc.h" |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
259 |
684
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
260 /*! \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
|
261 */ |
666
b6fb543d69ee
Use binding generator to implement mb_rt
Thinker K.F. Li <thinker@branda.to>
parents:
661
diff
changeset
|
262 Handle<Value> export_xnjsmb_auto_coord_new(coord_t *coord) { |
695 | 263 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
|
264 } |
b6fb543d69ee
Use binding generator to implement mb_rt
Thinker K.F. Li <thinker@branda.to>
parents:
661
diff
changeset
|
265 |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
266 /*! \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
|
267 * |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
268 * \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
|
269 * |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
270 * 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
|
271 * Javascript. |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
272 */ |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
273 void |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
274 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
|
275 redraw_man_t *rdman; |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
276 coord_t *root; |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
277 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
|
278 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
|
279 |
90c7726bc953
Replace part code of coord.cc by the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
566
diff
changeset
|
280 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
|
281 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
|
282 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
|
283 } |
562
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
284 |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
285 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
|
286 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
|
287 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
|
288 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
|
289 |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
290 SET(js_rt, "root", obj); |
1b6402f07cd4
Make root coord availabe for Javascript code
Thinker K.F. Li <thinker@branda.to>
parents:
560
diff
changeset
|
291 } |
684
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
292 |
b346e4699e55
Add more comment for JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
680
diff
changeset
|
293 /* @} */ |