src/text.c

changeset 115
e5f8c99b0987
parent 114
5b91bbab1ac0
child 116
bfb2a7d62047
equal deleted inserted replaced
114:5b91bbab1ac0 115:e5f8c99b0987
71 } 71 }
72 72
73 static void asc_text_destroy(AscSceneNode *node) { 73 static void asc_text_destroy(AscSceneNode *node) {
74 AscText *text = (AscText*) node; 74 AscText *text = (AscText*) node;
75 AscSprite *sprite = (AscSprite*) node; 75 AscSprite *sprite = (AscSprite*) node;
76 asc_mesh_destroy(&sprite->mesh);
76 asc_texture_destroy(sprite->texture, 1); 77 asc_texture_destroy(sprite->texture, 1);
77 assert(sprite->texture->refcount == 0); 78 assert(sprite->texture->refcount == 0);
78 free(sprite->texture); 79 free(sprite->texture);
79 cx_strfree(&text->text); 80 cx_strfree(&text->text);
80 } 81 }
81 82
82 AscSceneNode *asc_text_create(struct asc_text_create_args args) { 83 AscSceneNode *asc_text_create(struct asc_text_create_args args) {
83 AscText *text = calloc(1, sizeof(AscText)); 84 AscText *text = calloc(1, sizeof(AscText));
84 AscSceneNode *node = (AscSceneNode*) text; 85 AscSceneNode *node = &text->base.data;
85 86
87 // node properties
88 asc_scene_node_name(node, args.name);
86 node->render_group = ASC_RENDER_GROUP_SPRITE_BLEND; 89 node->render_group = ASC_RENDER_GROUP_SPRITE_BLEND;
87 node->destroy_func = asc_text_destroy; 90 node->destroy_func = asc_text_destroy;
88 node->update_func = asc_text_update; 91 node->update_func = asc_text_update;
89
90 node->flags = args.alignment;
91 node->position = asc_vec3f_new(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET); 92 node->position = asc_vec3f_new(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET);
92 node->scale.depth = 1.f; 93 node->scale.depth = 1.f;
94
95 // text properties
96 node->flags = args.alignment; // use flags variable to save some space
93 text->max_width = args.max_width; 97 text->max_width = args.max_width;
94 text->font = asc_active_font; 98 text->font = asc_active_font;
95 text->color = asc_context.ink; 99 text->color = asc_context.ink;
96 if (args.text == NULL) { 100 if (args.text == NULL) {
97 text->text = cx_mutstr(strdup(" ")); 101 text->text = cx_mutstr(strdup(" "));
98 } else { 102 } else {
99 text->text = cx_mutstr(strdup(args.text)); 103 text->text = cx_mutstr(strdup(args.text));
100 } 104 }
101 105
102 // initialize 106 // initialize mesh and texture
103 asc_scene_node_name(node, args.name); 107 asc_mesh_plane_2d(&text->base.mesh);
104 text->base.texture = malloc(sizeof(AscTexture)); 108 text->base.texture = malloc(sizeof(AscTexture));
105 asc_texture_init_rectangle(text->base.texture, 1); 109 asc_texture_init_rectangle(text->base.texture, 1);
106 asc_text_update(node); 110 asc_text_update(node);
107 111
108 return node; 112 return node;

mercurial