Tue, 28 Oct 2025 22:03:06 +0100
fix that dependencies for tools are always checked
| 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: 
196diff
changeset | 28 | #include "ascension/text.h" | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 29 | |
| 106 
895f92cff6b8
bring back error.h to reduce compile dependencies
 Mike Becker <universe@uap-core.de> parents: 
105diff
changeset | 30 | #include "ascension/error.h" | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 31 | #include "ascension/shader.h" | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 32 | #include "ascension/constants.h" | 
| 11 | 33 | |
| 89 
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
 Mike Becker <universe@uap-core.de> parents: 
82diff
changeset | 34 | #include <assert.h> | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 35 | #include <cx/printf.h> | 
| 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 36 | |
| 253 | 37 | #include <SDL3_ttf/SDL_ttf.h> | 
| 38 | ||
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 39 | typedef struct asc_text_shader_s { | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 40 | AscShaderProgram program; | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 41 | asc_uniform_loc tex; | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 42 | } AscTextShader; | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 43 | |
| 222 
2cb9a71df7a6
vastly deduplicate shader creation code
 Mike Becker <universe@uap-core.de> parents: 
221diff
changeset | 44 | static void asc_text_shader_init(AscShaderProgram *p, cx_attr_unused int flags) { | 
| 270 
3031d1bb5957
further improve names and docu of the uniform location init functions
 Mike Becker <universe@uap-core.de> parents: 
269diff
changeset | 45 | asc_shader_set_uniform_loc_by_name(p, AscTextShader, tex); | 
| 222 
2cb9a71df7a6
vastly deduplicate shader creation code
 Mike Becker <universe@uap-core.de> parents: 
221diff
changeset | 46 | } | 
| 
2cb9a71df7a6
vastly deduplicate shader creation code
 Mike Becker <universe@uap-core.de> parents: 
221diff
changeset | 47 | |
| 
2cb9a71df7a6
vastly deduplicate shader creation code
 Mike Becker <universe@uap-core.de> parents: 
221diff
changeset | 48 | static AscShaderProgram *asc_text_shader_create(int flags) { | 
| 223 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 49 | return asc_shader_create((AscShaderCodes){ | 
| 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 50 | .vtx = {.source_file = "sprite_vtx.glsl"}, | 
| 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 51 | .frag = { | 
| 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 52 | .source_file = "sprite_frag.glsl", | 
| 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 53 | .preamble_code = (const char*[]){"#define USE_RECT"}, | 
| 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 54 | .preamble_code_flags = 1 | 
| 
4f32c7755138
clean up the messy shader code specification
 Mike Becker <universe@uap-core.de> parents: 
222diff
changeset | 55 | }, | 
| 222 
2cb9a71df7a6
vastly deduplicate shader creation code
 Mike Becker <universe@uap-core.de> parents: 
221diff
changeset | 56 | }, sizeof(AscTextShader), asc_text_shader_init, flags); | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 57 | } | 
| 3 | 58 | |
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 59 | static void asc_text_update(AscSceneNode *node) { | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 60 | asc_ptr_cast(AscText, text, node); | 
| 29 
1d001eb694dc
bring first scene graph to live
 Mike Becker <universe@uap-core.de> parents: 
26diff
changeset | 61 | |
| 16 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 62 | // Render text onto a surface | 
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 63 | TTF_Font *font = asc_font_load(text->font); | 
| 207 
4d184a8706b1
add asc_scene_node_init() - fixes #695
 Mike Becker <universe@uap-core.de> parents: 
206diff
changeset | 64 | if (font == NULL) { | 
| 
4d184a8706b1
add asc_scene_node_init() - fixes #695
 Mike Becker <universe@uap-core.de> parents: 
206diff
changeset | 65 | // cannot load font - hide the text node to avoid errors when trying to draw | 
| 259 
1315ac4d1368
add show/hide functions for scene nodes
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 66 | asc_scene_node_hide(node); | 
| 207 
4d184a8706b1
add asc_scene_node_init() - fixes #695
 Mike Becker <universe@uap-core.de> parents: 
206diff
changeset | 67 | return; | 
| 
4d184a8706b1
add asc_scene_node_init() - fixes #695
 Mike Becker <universe@uap-core.de> parents: 
206diff
changeset | 68 | } | 
| 253 | 69 | static TTF_HorizontalAlignment alignments[] = { | 
| 70 | TTF_HORIZONTAL_ALIGN_LEFT, | |
| 71 | TTF_HORIZONTAL_ALIGN_CENTER, | |
| 72 | TTF_HORIZONTAL_ALIGN_RIGHT | |
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 73 | }; | 
| 253 | 74 | TTF_SetFontWrapAlignment( | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 75 | font, alignments[text->base.flags & ASC_TEXT_ALIGNMENT_MASK]); | 
| 255 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 76 | SDL_Surface *surface = TTF_RenderText_Blended_Wrapped( | 
| 256 
60014484121c
remove the asc_col4i datatype in favor of a unified asc_color type
 Mike Becker <universe@uap-core.de> parents: 
255diff
changeset | 77 | font, text->text.ptr, text->text.length, asc_color_sdl(text->color), text->max_width | 
| 16 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 78 | ); | 
| 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 79 | if (surface == NULL) { | 
| 92 | 80 | 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: 
14diff
changeset | 81 | return; | 
| 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 82 | } | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 83 | if (asc_test_flag(text->base.flags, ASC_TEXT_CENTERED_FLAG)) { | 
| 206 | 84 | asc_scene_node_set_origin(node, ASC_VEC3F(surface->w / 2, 0, 0)); | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 85 | } | 
| 4 
b7acda6a4476
add simple color data types
 Mike Becker <universe@uap-core.de> parents: 
3diff
changeset | 86 | |
| 135 
062703d3f5cc
remove the need for a second pair of texture coordinates
 Mike Becker <universe@uap-core.de> parents: 
122diff
changeset | 87 | // Transfer Image Data | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 88 | 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: 
122diff
changeset | 89 | |
| 116 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 90 | // If dimensions changed, update the mesh | 
| 208 
658bccb1bf73
improve OpenGL error handling
 Mike Becker <universe@uap-core.de> parents: 
207diff
changeset | 91 | if (text->dimension.width != (unsigned)surface->w || text->dimension.height != (unsigned)surface->h) { | 
| 
658bccb1bf73
improve OpenGL error handling
 Mike Becker <universe@uap-core.de> parents: 
207diff
changeset | 92 | text->dimension.width = surface->w; | 
| 
658bccb1bf73
improve OpenGL error handling
 Mike Becker <universe@uap-core.de> parents: 
207diff
changeset | 93 | text->dimension.height = surface->h; | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 94 | 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: 
194diff
changeset | 95 | asc_mesh_plane_2d(&text->mesh, | 
| 175 
e5544920377e
improve macros in datatypes.h - fixes #692
 Mike Becker <universe@uap-core.de> parents: 
162diff
changeset | 96 | .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: 
122diff
changeset | 97 | .uv_scale = uv_scale | 
| 
062703d3f5cc
remove the need for a second pair of texture coordinates
 Mike Becker <universe@uap-core.de> parents: 
122diff
changeset | 98 | ); | 
| 116 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 99 | } | 
| 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 100 | |
| 16 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 101 | // Free the surface | 
| 253 | 102 | SDL_DestroySurface(surface); | 
| 116 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 103 | |
| 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 104 | // Schedule for transform update | 
| 206 | 105 | asc_scene_node_update_transform(node); | 
| 16 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 106 | } | 
| 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
14diff
changeset | 107 | |
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 108 | 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: 
194diff
changeset | 109 | asc_cptr_cast(AscText, text, node); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 110 | |
| 208 
658bccb1bf73
improve OpenGL error handling
 Mike Becker <universe@uap-core.de> parents: 
207diff
changeset | 111 | // early exit when the text has no width | 
| 
658bccb1bf73
improve OpenGL error handling
 Mike Becker <universe@uap-core.de> parents: 
207diff
changeset | 112 | if (text->dimension.width == 0) return; | 
| 
658bccb1bf73
improve OpenGL error handling
 Mike Becker <universe@uap-core.de> parents: 
207diff
changeset | 113 | |
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 114 | // Activate shader | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 115 | // TODO: scene should know which shader we are going to activate s.t. it can pre-sort nodes | 
| 239 
3b78ad115ccd
remove the possibility of non-lazy-initializable shader programs
 Mike Becker <universe@uap-core.de> parents: 
226diff
changeset | 116 | const AscShaderProgram *shader = asc_shader_lookup( | 
| 226 
18327d2df79d
simplify how pre-defined shader IDs work
 Mike Becker <universe@uap-core.de> parents: 
223diff
changeset | 117 | ASC_SHADER_TEXT(0), | 
| 
18327d2df79d
simplify how pre-defined shader IDs work
 Mike Becker <universe@uap-core.de> parents: 
223diff
changeset | 118 | asc_text_shader_create, 0 | 
| 
18327d2df79d
simplify how pre-defined shader IDs work
 Mike Becker <universe@uap-core.de> parents: 
223diff
changeset | 119 | ); | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 120 | if (asc_shader_use(shader, camera)) return; | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 121 | asc_cptr_cast(AscTextShader, text_shader, shader); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 122 | |
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 123 | // Upload model matrix | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 124 | asc_shader_upload_model_matrix(shader, node); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 125 | |
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 126 | // Bind texture | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 127 | asc_texture_bind(text->texture, text_shader->tex, 0); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 128 | |
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 129 | // Draw mesh | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 130 | asc_mesh_draw_triangle_strip(&text->mesh); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 131 | } | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 132 | |
| 113 
71ba88258ea0
change node's free function to a destroy function
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 133 | static void asc_text_destroy(AscSceneNode *node) { | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 134 | asc_ptr_cast(AscText, text, node); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 135 | asc_mesh_destroy(&text->mesh); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 136 | asc_texture_destroy(text->texture, 1); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 137 | assert(text->texture->refcount == 0); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 138 | cxFreeDefault(text->texture); | 
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 139 | cx_strfree(&text->text); | 
| 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 140 | } | 
| 32 
86468a71dd73
add transformation matrix
 Mike Becker <universe@uap-core.de> parents: 
29diff
changeset | 141 | |
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 142 | 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: 
116diff
changeset | 143 | AscText *text = cxZallocDefault(sizeof(AscText)); | 
| 207 
4d184a8706b1
add asc_scene_node_init() - fixes #695
 Mike Becker <universe@uap-core.de> parents: 
206diff
changeset | 144 | asc_ptr_cast(AscSceneNode, node, text); | 
| 32 
86468a71dd73
add transformation matrix
 Mike Becker <universe@uap-core.de> parents: 
29diff
changeset | 145 | |
| 115 
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
 Mike Becker <universe@uap-core.de> parents: 
114diff
changeset | 146 | // text properties | 
| 
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
 Mike Becker <universe@uap-core.de> parents: 
114diff
changeset | 147 | node->flags = args.alignment; // use flags variable to save some space | 
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 148 | text->max_width = args.max_width; | 
| 214 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 149 | text->font = args.font; | 
| 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 150 | if (text->font.size == 0) { | 
| 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 151 | text->font.size = 12; | 
| 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 152 | } | 
| 256 
60014484121c
remove the asc_col4i datatype in favor of a unified asc_color type
 Mike Becker <universe@uap-core.de> parents: 
255diff
changeset | 153 | if (asc_memcmpz(&args.color, sizeof(asc_color))) { | 
| 
60014484121c
remove the asc_col4i datatype in favor of a unified asc_color type
 Mike Becker <universe@uap-core.de> parents: 
255diff
changeset | 154 | text->color = ASC_RGB(1, 1, 1); | 
| 214 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 155 | } else { | 
| 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 156 | text->color = args.color; | 
| 
9d460888a83e
remove global active font and color (also fixes #693)
 Mike Becker <universe@uap-core.de> parents: 
212diff
changeset | 157 | } | 
| 59 
764fbb013252
use fancy named parameters for asc_text()
 Mike Becker <universe@uap-core.de> parents: 
58diff
changeset | 158 | if (args.text == NULL) { | 
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 159 | text->text = cx_mutstr(strdup(" ")); | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 160 | } else { | 
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 161 | text->text = cx_mutstr(strdup(args.text)); | 
| 32 
86468a71dd73
add transformation matrix
 Mike Becker <universe@uap-core.de> parents: 
29diff
changeset | 162 | } | 
| 204 
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
 Mike Becker <universe@uap-core.de> parents: 
198diff
changeset | 163 | if (args.centered) { | 
| 
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
 Mike Becker <universe@uap-core.de> parents: 
198diff
changeset | 164 | asc_set_flag(node->flags, ASC_TEXT_CENTERED_FLAG); | 
| 
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
 Mike Becker <universe@uap-core.de> parents: 
198diff
changeset | 165 | } | 
| 32 
86468a71dd73
add transformation matrix
 Mike Becker <universe@uap-core.de> parents: 
29diff
changeset | 166 | |
| 116 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 167 | // initialize texture | 
| 
bfb2a7d62047
replace scaling with correct mesh sizes
 Mike Becker <universe@uap-core.de> parents: 
115diff
changeset | 168 | // mesh will be created in the update func | 
| 196 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 169 | text->texture = cxMallocDefault(sizeof(AscTexture)); | 
| 
ac2ade047d5b
remove dependency to AscSprite from AscText
 Mike Becker <universe@uap-core.de> parents: 
194diff
changeset | 170 | asc_texture_init_rectangle(text->texture, 1); | 
| 209 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 171 | |
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 172 | // basic node properties | 
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 173 | asc_scene_node_init(node, | 
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 174 | ASC_SCENE_NODE_FUNCS(asc_text), | 
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 175 | .name = args.name, | 
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 176 | .render_group = ASC_RENDER_GROUP_2D_BLEND, | 
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 177 | .pos2d = ASC_VEC2I(args.x, args.y) | 
| 
90fc22696e94
fix accidental overwrite of the update flag when creating text
 Mike Becker <universe@uap-core.de> parents: 
208diff
changeset | 178 | ); | 
| 37 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: 
36diff
changeset | 179 | |
| 71 
baa73a0be3ce
centralize draw functions
 Mike Becker <universe@uap-core.de> parents: 
66diff
changeset | 180 | return node; | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 181 | } | 
| 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 182 | |
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 183 | void asc_text_alignment( | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 184 | AscText *node, | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 185 | enum asc_text_alignment alignment | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 186 | ) { | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 187 | 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: 
193diff
changeset | 188 | asc_set_flag_masked(snode->flags, ASC_TEXT_ALIGNMENT_MASK, alignment); | 
| 206 | 189 | asc_scene_node_update(snode); | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 190 | } | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 191 | |
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 192 | 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: 
193diff
changeset | 193 | 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: 
193diff
changeset | 194 | if (centered) { | 
| 265 
5c915d01bdc0
add simple game over screen
 Mike Becker <universe@uap-core.de> parents: 
259diff
changeset | 195 | asc_clear_flag(snode->flags, ASC_TEXT_ALIGN_CENTER); | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 196 | } else { | 
| 265 
5c915d01bdc0
add simple game over screen
 Mike Becker <universe@uap-core.de> parents: 
259diff
changeset | 197 | asc_set_flag(snode->flags, ASC_TEXT_ALIGN_CENTER); | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 198 | } | 
| 206 | 199 | asc_scene_node_update(snode); | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 200 | } | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 201 | |
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 202 | 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: 
193diff
changeset | 203 | node->max_width = max_width; | 
| 206 | 204 | asc_scene_node_update((AscSceneNode*)node); | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 205 | } | 
| 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 206 | |
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 207 | void asc_text_printf( | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 208 | AscText *node, | 
| 149 
560772519ff9
resolve east-west conflict
 Mike Becker <universe@uap-core.de> parents: 
144diff
changeset | 209 | const char *format, | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 210 | ... | 
| 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 211 | ) { | 
| 255 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 212 | size_t buflen = node->text.length + 1; | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 213 | va_list ap; | 
| 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 214 | va_start(ap, format); | 
| 255 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 215 | int ret = cx_vsprintf( | 
| 194 
7985c3b64460
improve signatures of other text functions and make them linkable symbols
 Mike Becker <universe@uap-core.de> parents: 
193diff
changeset | 216 | &node->text.ptr, | 
| 255 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 217 | &buflen, | 
| 74 
25fb39f8863a
fix memory leak in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
71diff
changeset | 218 | format, | 
| 
25fb39f8863a
fix memory leak in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
71diff
changeset | 219 | ap | 
| 
25fb39f8863a
fix memory leak in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
71diff
changeset | 220 | ); | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 221 | va_end(ap); | 
| 255 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 222 | if (ret < 0) { | 
| 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 223 | asc_wprintf("Unexpected error code when formatting text: %d", ret); | 
| 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 224 | node->text.length = 0; | 
| 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 225 | } else { | 
| 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 226 | node->text.length = ret; | 
| 
0e0a0bf4f7e4
fix wrong text length stored in asc_text_printf()
 Mike Becker <universe@uap-core.de> parents: 
253diff
changeset | 227 | } | 
| 206 | 228 | asc_scene_node_update((AscSceneNode*)node); | 
| 58 
26ebb2f1e6e6
improve ui/text.h interface a lot
 Mike Becker <universe@uap-core.de> parents: 
57diff
changeset | 229 | } | 
| 76 
eb16be99b0ad
update to newest versions of uwproj and ucx
 Mike Becker <universe@uap-core.de> parents: 
74diff
changeset | 230 |