Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/gfxfont/test/text.c

    r7470d97 r9eb8d12  
    3030#include <gfx/context.h>
    3131#include <gfx/font.h>
     32#include <gfx/glyph.h>
    3233#include <gfx/text.h>
    3334#include <gfx/typeface.h>
     
    140141        rc = gfx_puttext(font, &pos, &fmt, "Hello world!");
    141142        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     143
     144        gfx_font_close(font);
     145        gfx_typeface_destroy(tface);
     146        gfx_color_delete(color);
     147
     148        rc = gfx_context_delete(gc);
     149        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     150}
     151
     152/** gfx_text_start_pos() correctly computes text start position */
     153PCUT_TEST(text_start_pos)
     154{
     155        gfx_font_props_t props;
     156        gfx_font_metrics_t metrics;
     157        gfx_typeface_t *tface;
     158        gfx_font_t *font;
     159        gfx_context_t *gc;
     160        gfx_color_t *color;
     161        gfx_text_fmt_t fmt;
     162        gfx_coord2_t pos;
     163        test_gc_t tgc;
     164        errno_t rc;
     165
     166        rc = gfx_context_new(&test_ops, (void *)&tgc, &gc);
     167        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     168
     169        rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
     170        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     171
     172        rc = gfx_typeface_create(gc, &tface);
     173        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     174
     175        gfx_font_props_init(&props);
     176        gfx_font_metrics_init(&metrics);
     177        metrics.ascent = 10; // XXX
     178        metrics.descent = 10; // XXX
     179        rc = gfx_font_create(tface, &props, &metrics, &font);
     180        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     181
     182        gfx_text_fmt_init(&fmt);
     183        fmt.color = color;
     184        pos.x = 0;
     185        pos.y = 0;
     186
     187        rc = gfx_puttext(font, &pos, &fmt, "Hello world!");
     188        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     189
     190        gfx_font_close(font);
     191        gfx_typeface_destroy(tface);
     192        gfx_color_delete(color);
     193
     194        rc = gfx_context_delete(gc);
     195        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     196}
     197
     198/** gfx_text_find_pos() finds position in text */
     199PCUT_TEST(text_find_pos)
     200{
     201        gfx_font_props_t props;
     202        gfx_font_metrics_t metrics;
     203        gfx_typeface_t *tface;
     204        gfx_font_t *font;
     205        gfx_glyph_metrics_t gmetrics;
     206        gfx_glyph_t *glyph1;
     207        gfx_glyph_t *glyph2;
     208        gfx_context_t *gc;
     209        gfx_text_fmt_t fmt;
     210        gfx_coord2_t anchor;
     211        gfx_coord2_t fpos;
     212        size_t off;
     213        test_gc_t tgc;
     214        errno_t rc;
     215
     216        rc = gfx_context_new(&test_ops, (void *)&tgc, &gc);
     217        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     218
     219        rc = gfx_typeface_create(gc, &tface);
     220        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     221
     222        gfx_font_props_init(&props);
     223        gfx_font_metrics_init(&metrics);
     224        rc = gfx_font_create(tface, &props, &metrics, &font);
     225        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     226
     227        /* Need to create some glyphs with metrics */
     228        gfx_glyph_metrics_init(&gmetrics);
     229        gmetrics.advance = 10;
     230
     231        rc = gfx_glyph_create(font, &gmetrics, &glyph1);
     232        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     233
     234        rc = gfx_glyph_set_pattern(glyph1, "A");
     235        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     236
     237        gfx_glyph_metrics_init(&gmetrics);
     238        gmetrics.advance = 1;
     239
     240        rc = gfx_glyph_create(font, &gmetrics, &glyph2);
     241        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     242
     243        rc = gfx_glyph_set_pattern(glyph2, "i");
     244        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     245
     246        gfx_text_fmt_init(&fmt);
     247        anchor.x = 10;
     248        anchor.y = 0;
     249
     250        fpos.x = 9;
     251        fpos.y = 0;
     252        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     253        PCUT_ASSERT_INT_EQUALS(0, off);
     254
     255        fpos.x = 10;
     256        fpos.y = 0;
     257        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     258        PCUT_ASSERT_INT_EQUALS(0, off);
     259
     260        fpos.x = 11;
     261        fpos.y = 0;
     262        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     263        PCUT_ASSERT_INT_EQUALS(0, off);
     264
     265        fpos.x = 19;
     266        fpos.y = 0;
     267        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     268        PCUT_ASSERT_INT_EQUALS(1, off);
     269
     270        fpos.x = 20;
     271        fpos.y = 0;
     272        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     273        PCUT_ASSERT_INT_EQUALS(2, off);
     274
     275        fpos.x = 21;
     276        fpos.y = 0;
     277        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     278        PCUT_ASSERT_INT_EQUALS(3, off);
     279
     280        fpos.x = 22;
     281        fpos.y = 0;
     282        off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos);
     283        PCUT_ASSERT_INT_EQUALS(3, off);
     284
     285        gfx_glyph_destroy(glyph1);
     286        gfx_glyph_destroy(glyph2);
     287
     288        gfx_font_close(font);
     289        gfx_typeface_destroy(tface);
     290
     291        rc = gfx_context_delete(gc);
     292        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     293}
     294
     295/** gfx_text_find_pos() finds position in text in text mode */
     296PCUT_TEST(text_find_pos_text)
     297{
     298        gfx_typeface_t *tface;
     299        gfx_font_t *font;
     300        gfx_context_t *gc;
     301        test_gc_t tgc;
     302        size_t off;
     303        gfx_text_fmt_t fmt;
     304        gfx_coord2_t anchor;
     305        gfx_coord2_t fpos;
     306        errno_t rc;
     307
     308        rc = gfx_context_new(&test_ops, (void *)&tgc, &gc);
     309        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     310
     311        rc = gfx_typeface_create(gc, &tface);
     312        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     313
     314        rc = gfx_font_create_textmode(tface, &font);
     315        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     316
     317        anchor.x = 10;
     318        anchor.y = 0;
     319        gfx_text_fmt_init(&fmt);
     320
     321        fpos.x = 9;
     322        fpos.y = 0;
     323        off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos);
     324        PCUT_ASSERT_INT_EQUALS(0, off);
     325
     326        fpos.x = 10;
     327        fpos.y = 0;
     328        off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos);
     329        PCUT_ASSERT_INT_EQUALS(0, off);
     330
     331        fpos.x = 11;
     332        fpos.y = 0;
     333        off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos);
     334        PCUT_ASSERT_INT_EQUALS(1, off);
     335
     336        fpos.x = 12;
     337        fpos.y = 0;
     338        off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos);
     339        PCUT_ASSERT_INT_EQUALS(2, off);
     340
     341        fpos.x = 13;
     342        fpos.y = 0;
     343        off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos);
     344        PCUT_ASSERT_INT_EQUALS(3, off);
     345
     346        fpos.x = 14;
     347        fpos.y = 0;
     348        off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos);
     349        PCUT_ASSERT_INT_EQUALS(3, off);
     350
     351        gfx_font_close(font);
     352        gfx_typeface_destroy(tface);
     353
     354        rc = gfx_context_delete(gc);
     355        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     356}
     357
     358/** gfx_text_cont() produces correct continuation parameters */
     359PCUT_TEST(text_cont)
     360{
     361        gfx_typeface_t *tface;
     362        gfx_font_t *font;
     363        gfx_context_t *gc;
     364        gfx_color_t *color;
     365        test_gc_t tgc;
     366        gfx_text_fmt_t fmt;
     367        gfx_coord2_t anchor;
     368        gfx_coord2_t cpos;
     369        gfx_text_fmt_t cfmt;
     370        errno_t rc;
     371
     372        rc = gfx_context_new(&test_ops, (void *)&tgc, &gc);
     373        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     374
     375        rc = gfx_typeface_create(gc, &tface);
     376        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     377
     378        rc = gfx_font_create_textmode(tface, &font);
     379        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     380
     381        rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
     382        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     383
     384        anchor.x = 10;
     385        anchor.y = 20;
     386        gfx_text_fmt_init(&fmt);
     387        fmt.color = color;
     388
     389        gfx_text_cont(font, &anchor, &fmt, "Abc", &cpos, &cfmt);
     390
     391        PCUT_ASSERT_INT_EQUALS(13, cpos.x);
     392        PCUT_ASSERT_INT_EQUALS(20, cpos.y);
     393        PCUT_ASSERT_EQUALS(fmt.color, cfmt.color);
     394        PCUT_ASSERT_EQUALS(gfx_halign_left, cfmt.halign);
     395        PCUT_ASSERT_EQUALS(gfx_valign_baseline, cfmt.valign);
     396
     397        gfx_font_close(font);
     398        gfx_typeface_destroy(tface);
     399        gfx_color_delete(color);
     400
     401        rc = gfx_context_delete(gc);
     402        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     403}
     404
     405/** gfx_text_rect() computes bounding rectangle */
     406PCUT_TEST(text_rect)
     407{
     408        gfx_typeface_t *tface;
     409        gfx_font_t *font;
     410        gfx_context_t *gc;
     411        gfx_color_t *color;
     412        test_gc_t tgc;
     413        gfx_text_fmt_t fmt;
     414        gfx_coord2_t anchor;
     415        gfx_rect_t rect;
     416        errno_t rc;
     417
     418        rc = gfx_context_new(&test_ops, (void *)&tgc, &gc);
     419        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     420
     421        rc = gfx_typeface_create(gc, &tface);
     422        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     423
     424        rc = gfx_font_create_textmode(tface, &font);
     425        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     426
     427        rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
     428        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     429
     430        anchor.x = 10;
     431        anchor.y = 20;
     432        gfx_text_fmt_init(&fmt);
     433        fmt.color = color;
     434
     435        gfx_text_rect(font, &anchor, &fmt, "Abc", &rect);
     436
     437        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     438        PCUT_ASSERT_INT_EQUALS(20, rect.p0.y);
     439        PCUT_ASSERT_INT_EQUALS(13, rect.p1.x);
     440        PCUT_ASSERT_INT_EQUALS(21, rect.p1.y);
    142441
    143442        gfx_font_close(font);
Note: See TracChangeset for help on using the changeset viewer.