Sat, 12 Jul 2025 23:05:43 +0200
add rotation functions, but rotation with special point of origin is still broken
3 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | * Copyright 2023 Mike Becker. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions are met: | |
7 | * | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | * 2. Redistributions in binary form must reproduce the above copyright | |
12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the distribution. | |
14 | * | |
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 | * POSSIBILITY OF SUCH DAMAGE. | |
26 | */ | |
27 | ||
198
916d2d125ecf
remove ui subdir in includes
Mike Becker <universe@uap-core.de>
parents:
196
diff
changeset
|
28 | #include "ascension/text.h" |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
29 | |
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
30 | #include "ascension/error.h" |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
31 | #include "ascension/context.h" |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
32 | #include "ascension/shader.h" |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
33 | #include "ascension/constants.h" |
11 | 34 | |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
35 | #include <assert.h> |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
36 | #include <cx/printf.h> |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
37 | |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
38 | typedef struct asc_text_shader_s { |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
39 | AscShaderProgram program; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
40 | asc_uniform_loc tex; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
41 | } AscTextShader; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
42 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
43 | AscShaderProgram *asc_text_shader_create(cx_attr_unused int unused) { |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
44 | AscShaderCodes codes; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
45 | // TODO: with more advanced feature we want to create specific text shaders |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
46 | if (asc_shader_load_code_files((AscShaderCodeInfo){ |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
47 | .files.vtx = "sprite_vtx.glsl", |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
48 | .files.frag = "sprite_frag.glsl", |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
49 | .defines.frag = "#define USE_RECT", |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
50 | }, &codes)) { |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
51 | asc_error("Loading text shader failed."); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
52 | return NULL; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
53 | } |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
54 | AscShaderProgram *shader = asc_shader_create(codes, sizeof(*shader)); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
55 | if (asc_shader_invalid(shader)) { |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
56 | asc_shader_free_codes(codes); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
57 | return shader; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
58 | } |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
59 | asc_ptr_cast(AscTextShader, text_shader, shader); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
60 | text_shader->tex = asc_shader_get_uniform_loc(shader, "tex"); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
61 | asc_shader_free_codes(codes); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
62 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
63 | asc_error_catch_all_gl(); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
64 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
65 | return shader; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
66 | } |
3 | 67 | |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
68 | static void asc_text_update(AscSceneNode *node) { |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
69 | asc_ptr_cast(AscText, text, node); |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
26
diff
changeset
|
70 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
71 | // Render text onto a surface |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
72 | TTF_Font *font = asc_font_load(text->font); |
162
d3598c834f9b
improve NULL-safety - fixes #690
Mike Becker <universe@uap-core.de>
parents:
150
diff
changeset
|
73 | if (font == NULL) return; |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
74 | static int alignments[] = { |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
75 | TTF_WRAPPED_ALIGN_LEFT, |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
76 | TTF_WRAPPED_ALIGN_CENTER, |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
77 | TTF_WRAPPED_ALIGN_RIGHT |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
78 | }; |
57
7daec2f067a9
implement centered wrapped text
Mike Becker <universe@uap-core.de>
parents:
54
diff
changeset
|
79 | TTF_SetFontWrappedAlign( |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
80 | font, alignments[text->base.flags & ASC_TEXT_ALIGNMENT_MASK]); |
18
00c0632f0f40
fix missing UTF8 support for text rendering
Mike Becker <universe@uap-core.de>
parents:
17
diff
changeset
|
81 | SDL_Surface *surface = TTF_RenderUTF8_Blended_Wrapped( |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
82 | font, text->text.ptr, asc_col_sdl(text->color), text->max_width |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
83 | ); |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
84 | if (surface == NULL) { |
92 | 85 | asc_error("Rendering TTF surface failed: %s", SDL_GetError()); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
86 | return; |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
87 | } |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
88 | if (asc_test_flag(text->base.flags, ASC_TEXT_CENTERED_FLAG)) { |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
89 | unsigned short newoffx = surface->w / 2; |
189
2c063b225183
remove separate vectors for position, rotation, scale from scene node
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
90 | asc_transform_translate2f(node->transform, ASC_VEC2F(text->offx - newoffx, 0)); |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
91 | text->offx = newoffx; |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
92 | } |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
93 | |
135
062703d3f5cc
remove the need for a second pair of texture coordinates
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
94 | // Transfer Image Data |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
95 | asc_texture_from_surface(text->texture, surface); |
135
062703d3f5cc
remove the need for a second pair of texture coordinates
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
96 | |
116
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
97 | // If dimensions changed, update the mesh |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
98 | if (text->dimension.x != (unsigned)surface->w || text->dimension.y != (unsigned)surface->h) { |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
99 | text->dimension.x = surface->w; |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
100 | text->dimension.y = surface->h; |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
101 | const asc_vec2f uv_scale = asc_texture_calculate_uv_scale(text->texture, text->dimension, ASC_VEC2F_1); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
102 | asc_mesh_plane_2d(&text->mesh, |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
162
diff
changeset
|
103 | .size = ASC_VEC2F(surface->w, surface->h), |
135
062703d3f5cc
remove the need for a second pair of texture coordinates
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
104 | .uv_scale = uv_scale |
062703d3f5cc
remove the need for a second pair of texture coordinates
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
105 | ); |
116
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
106 | } |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
107 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
108 | // Free the surface |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
109 | SDL_FreeSurface(surface); |
116
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
110 | |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
111 | // Schedule for transform update |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
112 | asc_node_update_transform(node); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
113 | } |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
114 | |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
115 | static void asc_text_draw(const AscCamera *camera, const AscSceneNode *node) { |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
116 | asc_cptr_cast(AscText, text, node); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
117 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
118 | // Activate shader |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
119 | // TODO: scene should know which shader we are going to activate s.t. it can pre-sort nodes |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
120 | const AscShaderProgram *shader = asc_shader_lookup_or_create( |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
121 | ASC_SHADER_TEXT, asc_text_shader_create, 0); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
122 | if (asc_shader_use(shader, camera)) return; |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
123 | asc_cptr_cast(AscTextShader, text_shader, shader); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
124 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
125 | // Upload model matrix |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
126 | asc_shader_upload_model_matrix(shader, node); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
127 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
128 | // Bind texture |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
129 | asc_texture_bind(text->texture, text_shader->tex, 0); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
130 | |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
131 | // Draw mesh |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
132 | asc_mesh_draw_triangle_strip(&text->mesh); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
133 | } |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
134 | |
113
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
135 | static void asc_text_destroy(AscSceneNode *node) { |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
136 | asc_ptr_cast(AscText, text, node); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
137 | asc_mesh_destroy(&text->mesh); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
138 | asc_texture_destroy(text->texture, 1); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
139 | assert(text->texture->refcount == 0); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
140 | cxFreeDefault(text->texture); |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
141 | cx_strfree(&text->text); |
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
142 | } |
32
86468a71dd73
add transformation matrix
Mike Becker <universe@uap-core.de>
parents:
29
diff
changeset
|
143 | |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
144 | AscSceneNode *asc_text_create(struct asc_text_create_args args) { |
122
1b118cd3e369
replace all stdlib malloc/free with UCX allocator
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
145 | AscText *text = cxZallocDefault(sizeof(AscText)); |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
146 | AscSceneNode *node = &text->base; |
32
86468a71dd73
add transformation matrix
Mike Becker <universe@uap-core.de>
parents:
29
diff
changeset
|
147 | |
115
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
148 | // node properties |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
149 | asc_scene_node_name(node, args.name); |
150
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
150 | node->render_group = ASC_RENDER_GROUP_2D_BLEND; |
113
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
151 | node->destroy_func = asc_text_destroy; |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
152 | node->update_func = asc_text_update; |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
153 | node->draw_func = asc_text_draw; |
189
2c063b225183
remove separate vectors for position, rotation, scale from scene node
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
154 | asc_transform_identity(node->transform); |
2c063b225183
remove separate vectors for position, rotation, scale from scene node
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
155 | asc_transform_translate3f(node->transform, |
2c063b225183
remove separate vectors for position, rotation, scale from scene node
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
156 | ASC_VEC3F(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET)); |
115
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
157 | |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
158 | // text properties |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
159 | node->flags = args.alignment; // use flags variable to save some space |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
160 | text->max_width = args.max_width; |
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
161 | text->font = asc_active_font; |
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
162 | text->color = asc_context.ink; |
59
764fbb013252
use fancy named parameters for asc_text()
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
163 | if (args.text == NULL) { |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
164 | text->text = cx_mutstr(strdup(" ")); |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
165 | } else { |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
166 | text->text = cx_mutstr(strdup(args.text)); |
32
86468a71dd73
add transformation matrix
Mike Becker <universe@uap-core.de>
parents:
29
diff
changeset
|
167 | } |
86468a71dd73
add transformation matrix
Mike Becker <universe@uap-core.de>
parents:
29
diff
changeset
|
168 | |
116
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
169 | // initialize texture |
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
115
diff
changeset
|
170 | // mesh will be created in the update func |
196
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
171 | text->texture = cxMallocDefault(sizeof(AscTexture)); |
ac2ade047d5b
remove dependency to AscSprite from AscText
Mike Becker <universe@uap-core.de>
parents:
194
diff
changeset
|
172 | asc_texture_init_rectangle(text->texture, 1); |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
173 | asc_text_update(node); |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
174 | |
71
baa73a0be3ce
centralize draw functions
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
175 | return node; |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
176 | } |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
177 | |
194
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
178 | void asc_text_alignment( |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
179 | AscText *node, |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
180 | enum asc_text_alignment alignment |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
181 | ) { |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
182 | asc_ptr_cast(AscSceneNode, snode, node); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
183 | asc_set_flag_masked(snode->flags, ASC_TEXT_ALIGNMENT_MASK, alignment); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
184 | asc_node_update(snode); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
185 | } |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
186 | |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
187 | void asc_text_centered(AscText *node, bool centered) { |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
188 | asc_ptr_cast(AscSceneNode, snode, node); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
189 | if (centered) { |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
190 | asc_clear_flag(snode->flags, ASC_TEXT_ALIGN_CENTERED); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
191 | } else { |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
192 | asc_set_flag(snode->flags, ASC_TEXT_ALIGN_CENTERED); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
193 | } |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
194 | asc_node_update(snode); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
195 | } |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
196 | |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
197 | void asc_text_max_width(AscText *node, unsigned max_width) { |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
198 | node->max_width = max_width; |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
199 | asc_node_update((AscSceneNode*)node); |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
200 | } |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
201 | |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
202 | void asc_text_printf( |
194
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
203 | AscText *node, |
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
204 | const char *format, |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
205 | ... |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
206 | ) { |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
207 | va_list ap; |
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
208 | va_start(ap, format); |
74
25fb39f8863a
fix memory leak in asc_text_printf()
Mike Becker <universe@uap-core.de>
parents:
71
diff
changeset
|
209 | cx_vsprintf( |
194
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
210 | &node->text.ptr, |
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
211 | &node->text.length, |
74
25fb39f8863a
fix memory leak in asc_text_printf()
Mike Becker <universe@uap-core.de>
parents:
71
diff
changeset
|
212 | format, |
25fb39f8863a
fix memory leak in asc_text_printf()
Mike Becker <universe@uap-core.de>
parents:
71
diff
changeset
|
213 | ap |
25fb39f8863a
fix memory leak in asc_text_printf()
Mike Becker <universe@uap-core.de>
parents:
71
diff
changeset
|
214 | ); |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
215 | va_end(ap); |
194
7985c3b64460
improve signatures of other text functions and make them linkable symbols
Mike Becker <universe@uap-core.de>
parents:
193
diff
changeset
|
216 | asc_node_update((AscSceneNode*)node); |
58
26ebb2f1e6e6
improve ui/text.h interface a lot
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
217 | } |
76
eb16be99b0ad
update to newest versions of uwproj and ucx
Mike Becker <universe@uap-core.de>
parents:
74
diff
changeset
|
218 |