Changeset ea459d4 in mainline for uspace/lib/gfxfont/src/glyph.c
- Timestamp:
- 2020-09-24T14:25:21Z (4 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/glyph.c
raaf962e6 rea459d4 315 315 } 316 316 317 /** Load glyph metrics from RIFF TPF file. 318 * 319 * @param parent Parent chunk 320 * @param metrics Place to store glyph metrics 321 * @return EOK on success or an error code 322 */ 323 static errno_t gfx_glyph_metrics_load(riff_rchunk_t *parent, 324 gfx_glyph_metrics_t *metrics) 325 { 326 errno_t rc; 327 riff_rchunk_t mtrck; 328 size_t nread; 329 330 rc = riff_rchunk_match(parent, CKID_gmtr, &mtrck); 331 if (rc != EOK) 332 return rc; 333 334 rc = riff_read(&mtrck, (void *) metrics, sizeof(*metrics), &nread); 335 if (rc != EOK || nread != sizeof(*metrics)) 336 return EIO; 337 338 rc = riff_rchunk_end(&mtrck); 339 if (rc != EOK) 340 return rc; 341 342 return EOK; 343 } 344 317 345 /** Save glyph metrics to RIFF TPF file. 318 346 * … … 342 370 } 343 371 372 /** Load glyph patterns from RIFF TPF file. 373 * 374 * @param parent Parent chunk 375 * @param glyph Glyph 376 * @return EOK on success or an error code 377 */ 378 static errno_t gfx_glyph_patterns_load(riff_rchunk_t *parent, 379 gfx_glyph_t *glyph) 380 { 381 errno_t rc; 382 riff_rchunk_t patck; 383 uint32_t cksize; 384 size_t i; 385 size_t nread; 386 char *buf = NULL; 387 388 rc = riff_rchunk_match(parent, CKID_gpat, &patck); 389 if (rc != EOK) 390 goto error; 391 392 cksize = riff_rchunk_size(&patck); 393 buf = malloc(cksize); 394 if (buf == NULL) { 395 rc = ENOMEM; 396 goto error; 397 } 398 399 rc = riff_read(&patck, buf, cksize, &nread); 400 if (rc != EOK || nread != cksize) 401 goto error; 402 403 i = 0; 404 while (i < cksize) { 405 rc = gfx_glyph_set_pattern(glyph, &buf[i]); 406 if (rc != EOK) 407 goto error; 408 409 i += str_size(&buf[i]) + 1; 410 } 411 412 rc = riff_rchunk_end(&patck); 413 if (rc != EOK) 414 goto error; 415 416 free(buf); 417 return EOK; 418 error: 419 if (buf != NULL) 420 free(buf); 421 return rc; 422 } 344 423 /** Save glyph patterns to RIFF TPF file. 345 424 * … … 377 456 } 378 457 458 /** Load glyph rectangle/origin from RIFF TPF file. 459 * 460 * @param parent Parent chunk 461 * @param glyph Glyph 462 * @return EOK on success or an error code 463 */ 464 static errno_t gfx_glyph_rectangle_origin_load(riff_rchunk_t *parent, 465 gfx_glyph_t *glyph) 466 { 467 errno_t rc; 468 riff_rchunk_t rorck; 469 size_t nread; 470 471 rc = riff_rchunk_match(parent, CKID_gror, &rorck); 472 if (rc != EOK) 473 return rc; 474 475 rc = riff_read(&rorck, (void *) &glyph->rect, sizeof(glyph->rect), 476 &nread); 477 if (rc != EOK || nread != sizeof(glyph->rect)) 478 return EIO; 479 480 rc = riff_read(&rorck, (void *) &glyph->origin, sizeof(glyph->origin), 481 &nread); 482 if (rc != EOK || nread != sizeof(glyph->origin)) 483 return EIO; 484 485 rc = riff_rchunk_end(&rorck); 486 if (rc != EOK) 487 return rc; 488 489 return EOK; 490 } 491 379 492 /** Save glyph rectangle/origin to RIFF TPF file. 380 493 * … … 408 521 } 409 522 523 /** Load glyph from RIFF TPF file. 524 * 525 * @param font Containing font 526 * @param parent Parent chunk 527 * @return EOK on success or an error code 528 */ 529 errno_t gfx_glyph_load(gfx_font_t *font, riff_rchunk_t *parent) 530 { 531 errno_t rc; 532 gfx_glyph_metrics_t metrics; 533 gfx_glyph_t *glyph = NULL; 534 riff_rchunk_t glyphck; 535 536 rc = riff_rchunk_list_match(parent, LTYPE_glph, &glyphck); 537 if (rc != EOK) 538 goto error; 539 540 rc = gfx_glyph_metrics_load(&glyphck, &metrics); 541 if (rc != EOK) 542 goto error; 543 544 rc = gfx_glyph_create(font, &metrics, &glyph); 545 if (rc != EOK) 546 goto error; 547 548 rc = gfx_glyph_patterns_load(&glyphck, glyph); 549 if (rc != EOK) 550 goto error; 551 552 rc = gfx_glyph_rectangle_origin_load(&glyphck, glyph); 553 if (rc != EOK) 554 goto error; 555 556 rc = riff_rchunk_end(&glyphck); 557 if (rc != EOK) 558 goto error; 559 560 return EOK; 561 error: 562 if (glyph != NULL) 563 gfx_glyph_destroy(glyph); 564 return rc; 565 } 566 410 567 /** Save glyph into RIFF TPF file. 411 568 * 412 569 * @param glyph Glyph 413 570 * @param riffw RIFF writer 571 * @return EOK on success or an error code 414 572 */ 415 573 errno_t gfx_glyph_save(gfx_glyph_t *glyph, riffw_t *riffw)
Note:
See TracChangeset
for help on using the changeset viewer.