comparison src/redraw_man.c @ 1372:0afd598a0b30

Add clone_from_subtree() for coord object of nodejs
author Thinker K.F. Li <thinker@codemud.net>
date Mon, 07 Mar 2011 09:38:09 +0800
parents 36cbe73813a8
children e5b3d68d0b05
comparison
equal deleted inserted replaced
1371:36cbe73813a8 1372:0afd598a0b30
1107 * \param parent is a coord where the cloning subtree would be hooked. 1107 * \param parent is a coord where the cloning subtree would be hooked.
1108 * \param src is the coord that cloned subtree is rooted. 1108 * \param src is the coord that cloned subtree is rooted.
1109 * \return the root of new subtree. 1109 * \return the root of new subtree.
1110 */ 1110 */
1111 coord_t * 1111 coord_t *
1112 rdman_coord_clone_subtree(redraw_man_t *rdman, 1112 rdman_coord_clone_from_subtree(redraw_man_t *rdman,
1113 coord_t *parent, coord_t *src) { 1113 coord_t *parent, coord_t *src) {
1114 coord_t *cloning; 1114 coord_t *cloning;
1115 coord_t *child; 1115 coord_t *child;
1116 shape_t *member, *cloning_member; 1116 shape_t *member, *cloning_member;
1117 geo_t *member_geo; 1117 geo_t *member_geo;
1118 int member_idx, child_pos; 1118 int member_idx, child_pos;
1135 1135
1136 member_geo = NEXT_MEMBER(member_geo); 1136 member_geo = NEXT_MEMBER(member_geo);
1137 member_idx++; 1137 member_idx++;
1138 } 1138 }
1139 1139
1140 rdman_coord_clone_subtree(rdman, cloning, child); 1140 rdman_coord_clone_from_subtree(rdman, cloning, child);
1141 } 1141 }
1142 1142
1143 /* Clone remain members after last child if any */ 1143 /* Clone remain members after last child if any */
1144 while(member_geo) { 1144 while(member_geo) {
1145 member = member_geo->shape; 1145 member = member_geo->shape;
3106 rdman_paint_free(rdman, paint); 3106 rdman_paint_free(rdman, paint);
3107 redraw_man_destroy(rdman); 3107 redraw_man_destroy(rdman);
3108 } 3108 }
3109 3109
3110 static void 3110 static void
3111 test_rdman_coord_clone_subtree(void) { 3111 test_rdman_coord_clone_from_subtree(void) {
3112 redraw_man_t _rdman; 3112 redraw_man_t _rdman;
3113 redraw_man_t *rdman; 3113 redraw_man_t *rdman;
3114 coord_t *coord1, *coord2, *coord3; 3114 coord_t *coord1, *coord2, *coord3;
3115 coord_t *cloning; 3115 coord_t *cloning;
3116 shape_t *sh1, *sh2; 3116 shape_t *sh1, *sh2;
3134 rdman_add_shape(rdman, (shape_t *)sh2, coord2); 3134 rdman_add_shape(rdman, (shape_t *)sh2, coord2);
3135 3135
3136 coord3 = rdman_coord_new(rdman, coord2); 3136 coord3 = rdman_coord_new(rdman, coord2);
3137 CU_ASSERT(coord3 != NULL); 3137 CU_ASSERT(coord3 != NULL);
3138 3138
3139 cloning = rdman_coord_clone_subtree(rdman, rdman->root_coord, coord1); 3139 cloning = rdman_coord_clone_from_subtree(rdman, rdman->root_coord, coord1);
3140 CU_ASSERT(NEXT_CHILD(coord1) == cloning); 3140 CU_ASSERT(NEXT_CHILD(coord1) == cloning);
3141 3141
3142 cloning_visit = FIRST_CHILD(cloning); 3142 cloning_visit = FIRST_CHILD(cloning);
3143 CU_ASSERT(cloning_visit != NULL); 3143 CU_ASSERT(cloning_visit != NULL);
3144 CU_ASSERT(cloning_visit->before_pmem == 1); 3144 CU_ASSERT(cloning_visit->before_pmem == 1);
3157 CU_ADD_TEST(suite, test_rdman_free_objs); 3157 CU_ADD_TEST(suite, test_rdman_free_objs);
3158 CU_ADD_TEST(suite, test_setup_canvas_info); 3158 CU_ADD_TEST(suite, test_setup_canvas_info);
3159 CU_ADD_TEST(suite, test_own_canvas_area); 3159 CU_ADD_TEST(suite, test_own_canvas_area);
3160 CU_ADD_TEST(suite, test_own_canvas); 3160 CU_ADD_TEST(suite, test_own_canvas);
3161 CU_ADD_TEST(suite, test_own_canvas_redraw); 3161 CU_ADD_TEST(suite, test_own_canvas_redraw);
3162 CU_ADD_TEST(suite, test_rdman_coord_clone_subtree); 3162 CU_ADD_TEST(suite, test_rdman_coord_clone_from_subtree);
3163 3163
3164 return suite; 3164 return suite;
3165 } 3165 }
3166 3166
3167 #endif /* UNITTEST */ 3167 #endif /* UNITTEST */