Changeset ea459d4 in mainline for uspace/lib/gfxfont/src/typeface.c
- Timestamp:
- 2020-09-24T14:25:21Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 120031a5
- Parents:
- aaf962e6
- git-author:
- Jiri Svoboda <jiri@…> (2020-09-22 17:25:10)
- git-committer:
- Jiri Svoboda <jiri@…> (2020-09-24 14:25:21)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/gfxfont/src/typeface.c
raaf962e6 rea459d4 38 38 #include <errno.h> 39 39 #include <gfx/bitmap.h> 40 #include <gfx/font.h> 40 41 #include <gfx/glyph.h> 41 42 #include <gfx/typeface.h> … … 78 79 void gfx_typeface_destroy(gfx_typeface_t *tface) 79 80 { 81 gfx_font_info_t *finfo; 82 83 if (tface->riffr != NULL) 84 (void) riff_rclose(tface->riffr); 85 86 finfo = gfx_typeface_first_font(tface); 87 while (finfo != NULL) { 88 if (finfo->font != NULL) 89 gfx_font_close(finfo->font); 90 list_remove(&finfo->lfonts); 91 free(finfo); 92 93 finfo = gfx_typeface_first_font(tface); 94 } 95 80 96 free(tface); 81 97 } … … 111 127 112 128 return list_get_instance(link, gfx_font_info_t, lfonts); 129 } 130 131 /** Open typeface from a TPF file. 132 * 133 * @param gc Graphic context 134 * @param fname File name 135 * @param rtface Place to store pointer to open typeface 136 * @return EOK on success or an error code 137 */ 138 errno_t gfx_typeface_open(gfx_context_t *gc, const char *fname, 139 gfx_typeface_t **rtface) 140 { 141 riffr_t *riffr = NULL; 142 gfx_typeface_t *tface = NULL; 143 errno_t rc; 144 riff_rchunk_t riffck; 145 uint32_t format; 146 147 rc = gfx_typeface_create(gc, &tface); 148 if (rc != EOK) 149 goto error; 150 151 rc = riff_ropen(fname, &riffck, &riffr); 152 if (rc != EOK) 153 goto error; 154 155 rc = riff_read_uint32(&riffck, &format); 156 if (rc != EOK) 157 goto error; 158 159 if (format != FORM_TPFC) { 160 rc = ENOTSUP; 161 goto error; 162 } 163 164 while (true) { 165 rc = gfx_font_info_load(tface, &riffck); 166 if (rc == ENOENT) 167 break; 168 169 if (rc != EOK) 170 goto error; 171 } 172 173 rc = riff_rchunk_end(&riffck); 174 if (rc != EOK) 175 goto error; 176 177 tface->riffr = riffr; 178 *rtface = tface; 179 return EOK; 180 error: 181 if (riffr != NULL) 182 riff_rclose(riffr); 183 if (tface != NULL) 184 gfx_typeface_destroy(tface); 185 return rc; 186 } 187 188 /** Make sure all typeface fonts are loaded. 189 * 190 * @param tface Typeface 191 * @return EOK on success or an error code 192 */ 193 static errno_t gfx_typeface_loadin(gfx_typeface_t *tface) 194 { 195 gfx_font_t *font; 196 gfx_font_info_t *finfo; 197 errno_t rc; 198 199 finfo = gfx_typeface_first_font(tface); 200 while (finfo != NULL) { 201 /* Open font to make sure it is loaded */ 202 rc = gfx_font_open(finfo, &font); 203 if (rc != EOK) 204 return rc; 205 206 /* Don't need this anymore */ 207 (void)font; 208 209 finfo = gfx_typeface_next_font(finfo); 210 } 211 212 return EOK; 113 213 } 114 214 … … 125 225 gfx_font_info_t *finfo; 126 226 riff_wchunk_t riffck; 227 228 /* 229 * Make sure all fonts are loaded before writing (in case 230 * we are writing into our original backing file). 231 */ 232 rc = gfx_typeface_loadin(tface); 233 if (rc != EOK) 234 return rc; 127 235 128 236 rc = riff_wopen(fname, &riffw);
Note:
See TracChangeset
for help on using the changeset viewer.