Mercurial > MadButterfly
annotate src/shape_stext.c @ 489:23c7667b3ec0 Android_Skia
Fix a potential bug when destroy a rdman.
When a rdman is dirty, free shapes and coords works specially.
Objects are append to a free list. They are not real freed until
rdman being clean. redraw_man_destroy() free shapes and coords with
free functions of them. If rdman is dirty when destroy it, objects
would be leaked. The changeset make rdman clean before free shapes
and coords to make objects being freed correctly.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sun, 22 Nov 2009 20:41:27 +0800 |
parents | 744c64eb3182 |
children | 5781b2485e38 |
rev | line source |
---|---|
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 #include <stdio.h> |
475
744c64eb3182
Since cairo-ft.h is not used, removes it.
Thinker K.F. Li <thinker@branda.to>
parents:
473
diff
changeset
|
2 #include <string.h> |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
3 #include "mb_graph_engine.h" |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 #include "mb_shapes.h" |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
5 #include "mb_tools.h" |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
7 #ifdef UNITTEST |
425
09a66063b25d
Fix issue of missed function for unittest.
Thinker K.F. Li <thinker@branda.to>
parents:
424
diff
changeset
|
8 |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
9 #define NO_DOX(x) x |
425
09a66063b25d
Fix issue of missed function for unittest.
Thinker K.F. Li <thinker@branda.to>
parents:
424
diff
changeset
|
10 #define UT_FAKE(r, x, param) \ |
09a66063b25d
Fix issue of missed function for unittest.
Thinker K.F. Li <thinker@branda.to>
parents:
424
diff
changeset
|
11 r x param {} |
09a66063b25d
Fix issue of missed function for unittest.
Thinker K.F. Li <thinker@branda.to>
parents:
424
diff
changeset
|
12 |
09a66063b25d
Fix issue of missed function for unittest.
Thinker K.F. Li <thinker@branda.to>
parents:
424
diff
changeset
|
13 UT_FAKE(void, sh_stext_transform, (shape_t *shape)); |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
14 UT_FAKE(void, sh_stext_draw, (shape_t *shape, mbe_t *cr)); |
425
09a66063b25d
Fix issue of missed function for unittest.
Thinker K.F. Li <thinker@branda.to>
parents:
424
diff
changeset
|
15 |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
16 typedef struct _ut_area { |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
17 co_aix x, y; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
18 co_aix w, h; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
19 } ut_area_t; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
20 #define area_t ut_area_t |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
21 |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
22 typedef struct _ut_shape { |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
23 co_aix aggr[6]; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
24 void (*free)(struct _ut_shape *); |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
25 ut_area_t area; |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
26 } ut_shape_t; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
27 #define shape_t ut_shape_t |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
28 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
29 #undef sh_get_aggr_matrix |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
30 #define sh_get_aggr_matrix(sh) (sh)->aggr |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
31 |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
32 #undef sh_get_area |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
33 #define sh_get_area(sh) (&(sh)->area) |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
34 |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
35 #undef mb_obj_init |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
36 #define mb_obj_init(o, t) |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
37 #undef rdman_shape_man |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
38 #define rdman_shape_man(rdman, sh) |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
39 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
40 #define rdman_shape_stext_new ut_rdman_shape_stext_new |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
41 #define sh_stext_transform ut_sh_stext_transform |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
42 #define sh_stext_draw ut_sh_stext_draw |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
43 #define sh_stext_set_text ut_sh_stext_set_text |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
44 #define sh_stext_set_style ut_sh_stext_set_style |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
45 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
46 #undef mbe_get_scaled_font |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
47 #define mbe_get_scaled_font(cr) ((mbe_scaled_font_t *)NULL) |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
48 #undef mbe_set_scaled_font |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
49 #define mbe_set_scaled_font(cr, scaled) ((mbe_scaled_font_t *)NULL) |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
50 #undef mbe_scaled_font_reference |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
51 #define mbe_scaled_font_reference(x) |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
52 #define MAX_MOVE 32 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
53 NO_DOX(static co_aix move_xys[MAX_MOVE][2]); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
54 NO_DOX(static int move_cnt = 0); |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
55 #undef mbe_move_to |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
56 #define mbe_move_to(cr, x, y) \ |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
57 do { \ |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
58 move_xys[move_cnt][0] = x; \ |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
59 move_xys[move_cnt++][1] = y; \ |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
60 } while(0) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
61 #undef mbe_scaled_font_destroy |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
62 #define mbe_scaled_font_destroy(scaled) |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
63 #undef mbe_text_path |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
64 #define mbe_text_path(cr, buf) |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
65 |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
66 #endif /* UNITTEST */ |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
67 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
68 #ifndef ASSERT |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
69 #define ASSERT(x) |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
70 #endif |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
71 #define OK 0 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
72 #define ERR -1 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
73 |
407 | 74 /*! \page stext Simple Text |
75 * | |
76 * A sh_stext_t is broken into fragments. Each fragment comprises the text | |
77 * and the styles applied on the fragement. The styles determines font face | |
78 * used to show the text. The fragment of text with styles is called | |
79 * styled block. | |
80 */ | |
81 | |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
82 /*! \defgroup fontconfig_freetype Fontconfig and FreeType Layer. |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
83 * |
411 | 84 * This layer implements a font provider to rest of the system. |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
85 * It bases on fontconfig and FreeType supporting of Cairo. |
411 | 86 * If you want to provide stext with technologies other than fontconfig and |
87 * FreeType, just replace this layer with the implmenetation that you want. | |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
88 * |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
89 * @{ |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
90 */ |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
91 /*! \brief Stakeholder of scaled font. |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
92 * |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
93 * It is actually a mbe_scaled_font_t, now. But, it should not be |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
94 * noticed by out-siders. Only \ref fontconfig_freetype |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
95 * should known it. |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
96 */ |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
97 typedef struct _mb_scaled_font mb_scaled_font_t; |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
98 |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
99 /*! \brief Stakeholder of scaled font. |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
100 * |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
101 * Although, mb_text_extents_t is defined as a mbe_scaled_font_t, but |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
102 * programmers should assume it is opague. |
407 | 103 * |
104 * An extents is the span of showing a fragement of text on the output device. | |
105 * It includes x and y advance of cursor after showinng the text. | |
106 * The cursor maybe not really existed. But, the advance is computed as | |
107 * the cursor existed. It also includes width and height of the text. | |
108 * The bearing of a styled block is the left-top corner of the bounding box. | |
109 * The bounding box of a styled block is the minimal rectangle, on the | |
110 * output device, that can contain the text. The bearing is related to | |
111 * the base line for an extents. | |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
112 */ |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
113 typedef mbe_text_extents_t mb_text_extents_t; |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
114 |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
115 #define MBE_GET_X_ADV(ext) ((ext)->x_advance) |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
116 #define MBE_GET_Y_ADV(ext) ((ext)->y_advance) |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
117 #define MBE_GET_X_BEARING(ext) ((ext)->x_bearing) |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
118 #define MBE_GET_Y_BEARING(ext) ((ext)->y_bearing) |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
119 #define MBE_GET_WIDTH(ext) ((ext)->width) |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
120 #define MBE_GET_HEIGHT(ext) ((ext)->height) |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
121 #define MBE_SET_X_ADV(ext, v) do { ((ext)->x_advance) = v; } while(0) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
122 #define MBE_SET_Y_ADV(ext, v) do { ((ext)->y_advance) = v; } while(0) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
123 #define MBE_SET_X_BEARING(ext, v) do { ((ext)->x_bearing) = v; } while(0) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
124 #define MBE_SET_Y_BEARING(ext, v) do { ((ext)->y_bearing) = v; } while(0) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
125 #define MBE_SET_WIDTH(ext, v) do { ((ext)->width) = v; } while(0) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
126 #define MBE_SET_HEIGHT(ext, v) do { ((ext)->height) = v; } while(0) |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
127 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
450
diff
changeset
|
128 static mb_font_face_t * |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
450
diff
changeset
|
129 query_font_face(const char *family, int slant, int weight) { |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
450
diff
changeset
|
130 return (mb_font_face_t *)mbe_query_font_face(family, slant, weight); |
394
b3d5ce48670a
Use fontconfig to find out a font for a family/slant/weight pattern
Thinker K.F. Li <thinker@branda.to>
parents:
393
diff
changeset
|
131 } |
b3d5ce48670a
Use fontconfig to find out a font for a family/slant/weight pattern
Thinker K.F. Li <thinker@branda.to>
parents:
393
diff
changeset
|
132 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
450
diff
changeset
|
133 static void |
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
450
diff
changeset
|
134 free_font_face(mb_font_face_t *face) { |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
135 ASSERT(face == NULL); |
395 | 136 |
465
d8181696b689
Move functions into graphic engine layers.
Thinker K.F. Li <thinker@branda.to>
parents:
450
diff
changeset
|
137 mbe_free_font_face((mbe_font_face_t *)face); |
395 | 138 } |
139 | |
140 /*! \brief This is scaled font for specified size and extent. | |
141 * | |
142 * Font face only specified which font would be used to draw text | |
143 * message. But, it also need to scale glyphs to specified size and | |
144 * rotation. This function return a scaled font specified by a | |
145 * matrix that transform glyph from design space of the font to | |
146 * user space of cairo surface. | |
147 */ | |
148 static | |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
149 mb_scaled_font_t *make_scaled_font_face_matrix(mb_font_face_t *face, |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
150 co_aix *matrix) { |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
151 mbe_scaled_font_t *scaled_font; |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
470
diff
changeset
|
152 static co_aix id[6] = { 1, 0, 0, |
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
470
diff
changeset
|
153 0, 1, 0 }; |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
154 |
395 | 155 ASSERT(matrix != NULL); |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
156 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
157 scaled_font = mbe_scaled_font_create((mbe_font_face_t *)face, |
473
ba64f928542b
Remove mbe_matrix_t type.
Thinker K.F. Li <thinker@branda.to>
parents:
470
diff
changeset
|
158 matrix, &id); |
395 | 159 |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
160 return (mb_scaled_font_t *)scaled_font; |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
161 } |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
162 |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
163 static |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
164 void scaled_font_free(mb_scaled_font_t *scaled_font) { |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
165 mbe_scaled_font_destroy((mbe_scaled_font_t *)scaled_font); |
395 | 166 } |
167 | |
168 static | |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
169 void compute_text_extents(mb_scaled_font_t *scaled_font, const char *txt, |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
170 mb_text_extents_t *extents) { |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
171 mbe_scaled_font_text_extents((mbe_scaled_font_t *)scaled_font, |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
172 txt, |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
173 (mbe_text_extents_t *)extents); |
395 | 174 } |
175 | |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
176 static |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
177 mb_text_extents_t *mb_text_extents_new(void) { |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
178 mbe_text_extents_t *extents; |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
179 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
180 extents = (mbe_text_extents_t *)malloc(sizeof(mbe_text_extents_t)); |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
181 return extents; |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
182 } |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
183 |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
184 static |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
185 void mb_text_extents_free(mb_text_extents_t *extents) { |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
186 free(extents); |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
187 } |
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
188 |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
189 static |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
190 void draw_text_scaled(mbe_t *cr, const char *txt, int tlen, |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
191 mb_scaled_font_t *scaled, co_aix x, co_aix y) { |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
192 mbe_scaled_font_t *saved_scaled; |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
193 int total_tlen; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
194 const char *buf; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
195 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
196 total_tlen = strlen(txt); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
197 if(total_tlen > tlen) |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
198 buf = strndup(txt, tlen); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
199 else |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
200 buf = txt; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
201 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
202 saved_scaled = mbe_get_scaled_font(cr); |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
203 mbe_scaled_font_reference(saved_scaled); |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
204 mbe_set_scaled_font(cr, (mbe_scaled_font_t *)scaled); |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
205 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
206 mbe_move_to(cr, x, y); |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
207 mbe_text_path(cr, buf); |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
208 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
209 mbe_set_scaled_font(cr, saved_scaled); |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
210 mbe_scaled_font_destroy(saved_scaled); |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
211 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
212 if(total_tlen > tlen) |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
213 free((char *)buf); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
214 } |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
215 |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
216 /* @} */ |
395 | 217 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
218 /*! \brief Query and return a font face for a specified attribute vector. |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
219 * |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
220 * Programmers use mb_font_face_t to specify fonts used to show a |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
221 * block of text on the output device. They can get mb_font_face_t with |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
222 * this function. The objects return by mb_font_face_query() should be |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
223 * freed with mb_font_face_free() when they are not more used. |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
224 * |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
225 * \param family is the name of a font family (times). |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
226 * \param slant is one of \ref MB_FONT_SLANTS. |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
227 * \param weight decides if a font is thin or heavy. |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
228 */ |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
229 mb_font_face_t *mb_font_face_query(redraw_man_t *rdman, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
230 const char *family, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
231 int slant, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
232 int weight) { |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
233 return query_font_face(family, slant, weight); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
234 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
235 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
236 void mb_font_face_free(mb_font_face_t *face) { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
237 ASSERT(face != NULL); |
396
7fe0b1ee92b6
Add extents supporting into Fontconfig and FreeType Layer
Thinker K.F. Li <thinker@branda.to>
parents:
395
diff
changeset
|
238 free_font_face(face); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
239 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
240 |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
241 DARRAY(scaled_fonts_lst, mb_scaled_font_t *); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
242 DARRAY_DEFINE(scaled_fonts_lst, mb_scaled_font_t *); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
243 DARRAY(style_blks_lst, mb_style_blk_t); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
244 DARRAY_DEFINE_ADV(style_blks_lst, mb_style_blk_t); |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
245 DARRAY(extents_lst, mb_text_extents_t); |
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
246 DARRAY_DEFINE_ADV(extents_lst, mb_text_extents_t); |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
247 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
248 /*! \brief A simple implementation of text shape. |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
249 * |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
250 */ |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
251 typedef struct _sh_stext { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
252 shape_t shape; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
253 const char *txt; /*!< \brief Text to be showed */ |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
254 style_blks_lst_t style_blks; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
255 co_aix x, y; |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
256 co_aix dx, dy; |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
257 scaled_fonts_lst_t scaled_fonts; |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
258 mb_text_extents_t extents; |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
259 extents_lst_t sub_exts; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
260 } sh_stext_t; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
261 |
419
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
262 static |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
263 void _rdman_shape_stext_free(shape_t *shape) { |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
264 sh_stext_t *txt_o = (sh_stext_t *)shape; |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
265 int i; |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
266 |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
267 DARRAY_DESTROY(&txt_o->style_blks); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
268 |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
269 for(i = 0; i < txt_o->scaled_fonts.num; i++) |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
270 scaled_font_free(txt_o->scaled_fonts.ds[i]); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
271 DARRAY_DESTROY(&txt_o->scaled_fonts); |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
272 DARRAY_DESTROY(&txt_o->sub_exts); |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
273 |
419
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
274 if(txt_o->txt) |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
275 free((void *)txt_o->txt); |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
276 |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
277 free(txt_o); |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
278 } |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
279 |
429
9d5506968efb
Change the interface of rdman_shape_stext_new().
Thinker K.F. Li <thinker@branda.to>
parents:
427
diff
changeset
|
280 shape_t *rdman_shape_stext_new(redraw_man_t *rdman, const char *txt, |
9d5506968efb
Change the interface of rdman_shape_stext_new().
Thinker K.F. Li <thinker@branda.to>
parents:
427
diff
changeset
|
281 co_aix x, co_aix y) { |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
282 sh_stext_t *txt_o; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
283 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
284 ASSERT(txt != NULL); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
285 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
286 txt_o = (sh_stext_t *)malloc(sizeof(sh_stext_t)); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
287 if(txt_o == NULL) |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
288 return NULL; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
289 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
290 memset(&txt_o->shape, 0, sizeof(shape_t)); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
291 mb_obj_init(txt_o, MBO_STEXT); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
292 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
293 txt_o->txt = strdup(txt); |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
294 DARRAY_INIT(&txt_o->style_blks); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
295 txt_o->x = x; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
296 txt_o->y = y; |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
297 DARRAY_INIT(&txt_o->scaled_fonts); |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
298 DARRAY_INIT(&txt_o->sub_exts); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
299 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
300 if(txt_o->txt == NULL) { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
301 free(txt_o); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
302 txt_o = NULL; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
303 } |
419
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
304 |
7c921fda21be
Set free function for sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
418
diff
changeset
|
305 txt_o->shape.free = _rdman_shape_stext_free; |
418
af6adacbed07
Make sh_stext object managed by rdman.
Thinker K.F. Li <thinker@branda.to>
parents:
417
diff
changeset
|
306 |
af6adacbed07
Make sh_stext object managed by rdman.
Thinker K.F. Li <thinker@branda.to>
parents:
417
diff
changeset
|
307 rdman_shape_man(rdman, (shape_t *)txt_o); |
af6adacbed07
Make sh_stext object managed by rdman.
Thinker K.F. Li <thinker@branda.to>
parents:
417
diff
changeset
|
308 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
309 return (shape_t *)txt_o; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
310 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
311 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
312 static |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
313 int compute_utf8_chars_sz(const char *txt, int n_chars) { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
314 int i; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
315 const char *p = txt; |
415
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
316 const char *v; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
317 |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
318 for(i = 0; i < n_chars && *p; i++) { |
415
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
319 if(!(*p & 0x80)) /* single byte */ |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
320 p++; |
415
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
321 else if((*p & 0xe0) == 0xc0) /* 2 bytes */ |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
322 p += 2; |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
323 else if((*p & 0xf0) == 0xe0) /* 3 bytes */ |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
324 p += 3; |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
325 else if((*p & 0xf8) == 0xf0) /* 4 bytes */ |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
326 p += 4; |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
327 else |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
328 return ERR; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
329 } |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
330 if(i < n_chars) |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
331 return ERR; |
415
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
332 |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
333 for(v = txt; v != p; v++) |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
334 if(*v == '\x0') |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
335 return ERR; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
336 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
337 return p - txt; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
338 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
339 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
340 static |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
341 mb_scaled_font_t *make_scaled_font_face(sh_stext_t *txt_o, |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
342 mb_font_face_t *face, |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
343 co_aix shift_x, co_aix shift_y, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
344 co_aix font_sz) { |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
345 co_aix matrix[6], scaled_matrix[6]; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
346 co_aix *aggr; |
446
2437047b8bb8
Fix bug of propertional shifting of sh_stext_t.
Thinker K.F. Li <thinker@branda.to>
parents:
437
diff
changeset
|
347 co_aix noshift_aggr[6]; |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
348 mb_scaled_font_t *scaled; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
349 |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
350 aggr = sh_get_aggr_matrix((shape_t *)txt_o); |
446
2437047b8bb8
Fix bug of propertional shifting of sh_stext_t.
Thinker K.F. Li <thinker@branda.to>
parents:
437
diff
changeset
|
351 memcpy(noshift_aggr, aggr, sizeof(co_aix) * 6); |
2437047b8bb8
Fix bug of propertional shifting of sh_stext_t.
Thinker K.F. Li <thinker@branda.to>
parents:
437
diff
changeset
|
352 noshift_aggr[2] = 0; |
2437047b8bb8
Fix bug of propertional shifting of sh_stext_t.
Thinker K.F. Li <thinker@branda.to>
parents:
437
diff
changeset
|
353 noshift_aggr[5] = 0; |
2437047b8bb8
Fix bug of propertional shifting of sh_stext_t.
Thinker K.F. Li <thinker@branda.to>
parents:
437
diff
changeset
|
354 |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
355 matrix[0] = font_sz; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
356 matrix[1] = 0; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
357 matrix[2] = shift_x; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
358 matrix[3] = 0; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
359 matrix[4] = font_sz; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
360 matrix[5] += shift_y; |
446
2437047b8bb8
Fix bug of propertional shifting of sh_stext_t.
Thinker K.F. Li <thinker@branda.to>
parents:
437
diff
changeset
|
361 matrix_mul(noshift_aggr, matrix, scaled_matrix); |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
362 |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
363 scaled = make_scaled_font_face_matrix(face, scaled_matrix); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
364 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
365 return scaled; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
366 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
367 |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
368 /*! \brief Extend an extents from another sub-extents. |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
369 * |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
370 * A styled text is styled by several styled blocks, so extents of |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
371 * blocks should be computed separated, collected, and aggreagated |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
372 * into a full extents. |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
373 */ |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
374 static |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
375 void extent_extents(mb_text_extents_t *full, mb_text_extents_t *sub) { |
437
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
376 co_aix f_rbx, f_rby; /* rb stands for right bottom */ |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
377 co_aix s_rbx, s_rby; |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
378 co_aix s_xbr, s_ybr; |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
379 co_aix new_x_adv, new_y_adv; |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
380 |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
381 f_rbx = MBE_GET_X_BEARING(full) + MBE_GET_WIDTH(full); |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
382 f_rby = MBE_GET_Y_BEARING(full) + MBE_GET_HEIGHT(full); |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
383 s_xbr = MBE_GET_X_BEARING(sub) + MBE_GET_X_ADV(full); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
384 s_ybr = MBE_GET_Y_BEARING(sub) + MBE_GET_Y_ADV(full); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
385 s_rbx = s_xbr + MBE_GET_WIDTH(sub); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
386 s_rby = s_ybr + MBE_GET_HEIGHT(sub); |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
387 |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
388 /* set bearing */ |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
389 if(MBE_GET_X_BEARING(full) > s_xbr) |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
390 MBE_SET_X_BEARING(full, s_xbr); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
391 if(MBE_GET_Y_BEARING(full) > s_ybr) |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
392 MBE_SET_Y_BEARING(full, s_ybr); |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
393 |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
394 /* set width/height */ |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
395 if(f_rbx < s_rbx) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
396 MBE_SET_WIDTH(full, s_rbx - MBE_GET_X_BEARING(full)); |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
397 else |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
398 MBE_SET_WIDTH(full, f_rbx - MBE_GET_X_BEARING(full)); |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
399 if(f_rby < s_rby) |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
400 MBE_SET_HEIGHT(full, s_rby - MBE_GET_Y_BEARING(full)); |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
401 else |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
402 MBE_SET_HEIGHT(full, f_rby - MBE_GET_Y_BEARING(full)); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
403 |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
404 /* set x/y advance */ |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
405 new_x_adv = MBE_GET_X_ADV(full) + MBE_GET_X_ADV(sub); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
406 new_y_adv = MBE_GET_Y_ADV(full) + MBE_GET_Y_ADV(sub); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
407 MBE_SET_X_ADV(full, new_x_adv); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
408 MBE_SET_Y_ADV(full, new_y_adv); |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
409 } |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
410 |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
411 /*! \brief Compute extents of a stext object according style blocks. |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
412 * |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
413 * It create scaled fonts for style blocks, compute their extents, |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
414 * and compute where they should be draw acoording advance of style |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
415 * blocks before a style block. |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
416 * |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
417 * The scaled font that is created by this function for style blocks |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
418 * are drawed at origin. So, extents of these blocks are also based |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
419 * on that the text are drawed at origin of user space. But, |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
420 * aggreagated extents (sh_stext_t::extents) accounts x/y advances |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
421 * to create correct extents for full text string with style blocks. |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
422 * |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
423 * This function assumes texts are always drawed at 0, 0. So, |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
424 * transform function should adjust x and y bearing corresponding |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
425 * x, y of text to compute area. |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
426 */ |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
427 static |
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
428 void compute_styled_extents_n_scaled_font(sh_stext_t *txt_o) { |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
429 mb_style_blk_t *blk; |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
430 style_blks_lst_t *style_blks; |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
431 int blk_txt_len; |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
432 mb_scaled_font_t *scaled; |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
433 scaled_fonts_lst_t *scaled_fonts; |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
434 extents_lst_t *sub_exts; |
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
435 mb_text_extents_t *sub; |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
436 char *txt, saved; |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
437 int i, nscaled; |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
438 |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
439 scaled_fonts = &txt_o->scaled_fonts; |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
440 for(i = 0; i < scaled_fonts->num; i++) |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
441 scaled_font_free(scaled_fonts->ds[i]); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
442 DARRAY_CLEAN(scaled_fonts); |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
443 |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
444 style_blks = &txt_o->style_blks; |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
445 blk = style_blks->ds; |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
446 |
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
447 sub_exts = &txt_o->sub_exts; |
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
448 DARRAY_CLEAN(sub_exts); |
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
449 extents_lst_adv(sub_exts, style_blks->num); |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
450 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
451 txt = (char *)txt_o->txt; |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
452 for(i = 0; i < style_blks->num; i++) { |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
453 scaled = make_scaled_font_face(txt_o, blk->face, |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
454 0, 0, blk->font_sz); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
455 ASSERT(scaled != NULL); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
456 scaled_fonts_lst_add(scaled_fonts, scaled); |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
457 sub = sub_exts->ds + i; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
458 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
459 blk_txt_len = compute_utf8_chars_sz(txt, blk->n_chars); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
460 ASSERT(blk_txt_len != ERR); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
461 |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
462 saved = txt[blk_txt_len]; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
463 txt[blk_txt_len] = 0; |
426
aa320386072c
Keep sub-extents for style blocks.
Thinker K.F. Li <thinker@branda.to>
parents:
425
diff
changeset
|
464 compute_text_extents(scaled, txt, sub); |
397
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
465 txt[blk_txt_len] = saved; |
55f38c2cdb8f
Refactor function of computing text extents
Thinker K.F. Li <thinker@branda.to>
parents:
396
diff
changeset
|
466 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
467 blk++; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
468 txt += blk_txt_len; |
437
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
469 } |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
470 |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
471 if(style_blks->num > 0) { |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
472 sub = sub_exts->ds; |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
473 memcpy(&txt_o->extents, sub, sizeof(mb_text_extents_t)); |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
474 for(i = 1; i < style_blks->num; i++) { |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
475 sub = sub_exts->ds + i; |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
476 extent_extents(&txt_o->extents, sub); |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
477 } |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
478 } else |
e73b3644d802
Fix bug of compute extents of sh_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
436
diff
changeset
|
479 memset(&txt_o->extents, sizeof(mb_text_extents_t), 0); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
480 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
481 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
482 /* |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
483 * What we have to do in sh_stext_transform() is |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
484 * - computing bounding box for the text, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
485 * - computing offset x,y for the text of style blocks, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
486 * - free old scaled fonts, and |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
487 * - making scaled fonts for style blocks. |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
488 * |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
489 * Extents of style blocks are computed with x,y at 0,0. |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
490 * So, we should add x,y, after transforming by the aggreagated matrix, |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
491 * to output area. |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
492 */ |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
493 void sh_stext_transform(shape_t *shape) { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
494 sh_stext_t *txt_o = (sh_stext_t *)shape; |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
495 area_t *area; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
496 mb_text_extents_t *ext; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
497 co_aix *aggr; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
498 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
499 ASSERT(txt_o != NULL); |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
500 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
501 aggr = sh_get_aggr_matrix(shape); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
502 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
503 txt_o->dx = txt_o->x; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
504 txt_o->dy = txt_o->y; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
505 matrix_trans_pos(aggr, &txt_o->dx, &txt_o->dy); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
506 |
403
aee0f66b1154
Compute extents of a styled text
Thinker K.F. Li <thinker@branda.to>
parents:
397
diff
changeset
|
507 compute_styled_extents_n_scaled_font(txt_o); |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
508 ext = &txt_o->extents; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
509 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
510 area = sh_get_area(shape); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
511 area->x = MBE_GET_X_BEARING(ext) + txt_o->dx; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
512 area->y = MBE_GET_Y_BEARING(ext) + txt_o->dy; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
513 area->w = MBE_GET_WIDTH(ext); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
514 area->h = MBE_GET_HEIGHT(ext); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
515 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
516 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
447
diff
changeset
|
517 void sh_stext_draw(shape_t *shape, mbe_t *cr) { |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
518 sh_stext_t *txt_o = (sh_stext_t *)shape; |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
519 co_aix x, y; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
520 const char *txt; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
521 scaled_fonts_lst_t *scaled_fonts; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
522 mb_scaled_font_t *scaled; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
523 style_blks_lst_t *style_blks; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
524 mb_style_blk_t *blk; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
525 mb_text_extents_t *ext; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
526 int blk_txt_len; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
527 int i; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
528 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
529 ASSERT(txt_o != NULL); |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
530 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
531 x = txt_o->dx; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
532 y = txt_o->dy; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
533 txt = txt_o->txt; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
534 scaled_fonts = &txt_o->scaled_fonts; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
535 style_blks = &txt_o->style_blks; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
536 ext = txt_o->sub_exts.ds; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
537 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
538 for(i = 0; i < scaled_fonts->num; i++) { |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
539 scaled = scaled_fonts->ds[i]; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
540 blk = style_blks->ds + i; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
541 blk_txt_len = compute_utf8_chars_sz(txt, blk->n_chars); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
542 draw_text_scaled(cr, txt, blk_txt_len, scaled, x, y); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
543 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
544 x += MBE_GET_X_ADV(ext); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
545 y += MBE_GET_Y_ADV(ext); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
546 txt += blk_txt_len; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
547 } |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
548 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
549 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
550 int sh_stext_set_text(shape_t *shape, const char *txt) { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
551 sh_stext_t *txt_o = (sh_stext_t *)shape; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
552 char *new_txt; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
553 int sz; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
554 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
555 ASSERT(txt_o != NULL); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
556 ASSERT(txt != NULL); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
557 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
558 sz = strlen(txt) + 1; |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
559 new_txt = (char *)realloc((void *)txt_o->txt, sz); |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
560 if(new_txt == NULL) |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
561 return ERR; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
562 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
563 memcpy(new_txt, txt, sz); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
564 txt_o->txt = new_txt; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
565 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
566 return OK; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
567 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
568 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
569 int sh_stext_set_style(shape_t *shape, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
570 const mb_style_blk_t *blks, |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
571 int nblks) { |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
572 sh_stext_t *txt_o = (sh_stext_t *)shape; |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
573 style_blks_lst_t *style_blks; |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
574 mb_style_blk_t *new_blks; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
575 int sz; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
576 |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
577 ASSERT(txt_o != NULL); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
578 ASSERT(nblks >= 0); |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
579 |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
580 style_blks = &txt_o->style_blks; |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
581 DARRAY_CLEAN(style_blks); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
582 style_blks_lst_adv(style_blks, nblks); |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
583 |
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
584 memcpy(style_blks->ds, |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
585 blks, nblks * sizeof(mb_style_blk_t)); |
422
c6c0d017dc8e
Use DARRAY to manage variable length list
Thinker K.F. Li <thinker@branda.to>
parents:
421
diff
changeset
|
586 |
393
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
587 return OK; |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
588 } |
27774b93521e
Add sh_stext_t to implement a simple version of text shape.
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
589 |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
590 #ifdef UNITTEST |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
591 |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
592 #include <CUnit/Basic.h> |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
593 |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
594 static |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
595 void test_query_font_face(void) { |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
596 mb_font_face_t *face; |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
597 |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
598 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
599 CU_ASSERT(face != NULL); |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
600 |
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
601 free_font_face(face); |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
602 } |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
603 |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
604 static |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
605 void test_make_scaled_font_face_matrix(void) { |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
606 co_aix matrix[6] = {5, 0, 0, 0, 5, 0}; |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
607 mb_font_face_t *face; |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
608 mb_scaled_font_t *scaled; |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
609 |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
610 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
611 CU_ASSERT(face != NULL); |
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
612 |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
613 scaled = make_scaled_font_face_matrix(face, matrix); |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
614 CU_ASSERT(scaled != NULL); |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
615 |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
616 scaled_font_free(scaled); |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
617 free_font_face(face); |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
618 } |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
619 |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
620 static |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
621 void test_compute_text_extents(void) { |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
622 co_aix matrix[6] = {10, 0, 0, 0, 10, 0}; |
423
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
623 co_aix x_adv1, x_adv2; |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
624 co_aix x_bearing1, x_bearing2; |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
625 mb_font_face_t *face; |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
626 mb_scaled_font_t *scaled; |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
627 mb_text_extents_t ext; |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
628 |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
629 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
630 CU_ASSERT(face != NULL) |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
631 scaled = make_scaled_font_face_matrix(face, matrix); |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
632 CU_ASSERT(scaled != NULL); |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
633 |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
634 compute_text_extents(scaled, "test", &ext); |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
635 CU_ASSERT(MBE_GET_HEIGHT(&ext) >= 5 && MBE_GET_HEIGHT(&ext) <= 12); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
636 CU_ASSERT(MBE_GET_WIDTH(&ext) >= 16 && MBE_GET_WIDTH(&ext) <= 48); |
423
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
637 x_adv1 = MBE_GET_X_ADV(&ext); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
638 x_bearing1 = MBE_GET_X_BEARING(&ext); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
639 scaled_font_free(scaled); |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
640 |
423
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
641 matrix[2] = 5; |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
642 scaled = make_scaled_font_face_matrix(face, matrix); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
643 CU_ASSERT(scaled != NULL); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
644 |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
645 compute_text_extents(scaled, "test", &ext); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
646 CU_ASSERT(MBE_GET_HEIGHT(&ext) >= 5 && MBE_GET_HEIGHT(&ext) <= 12); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
647 CU_ASSERT(MBE_GET_WIDTH(&ext) >= 16 && MBE_GET_WIDTH(&ext) <= 48); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
648 x_adv2 = MBE_GET_X_ADV(&ext); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
649 x_bearing2 = MBE_GET_X_BEARING(&ext); |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
650 scaled_font_free(scaled); |
423
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
651 |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
652 CU_ASSERT(x_adv1 == x_adv2); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
653 CU_ASSERT((x_bearing1 + 5) == x_bearing2); |
3ba48126c49c
Check bearing and advance of text_extents.
Thinker K.F. Li <thinker@branda.to>
parents:
422
diff
changeset
|
654 |
413
35712e4bad0e
Make shape_stext.c pass test cases.
Thinker K.F. Li <thinker@branda.to>
parents:
412
diff
changeset
|
655 free_font_face(face); |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
656 } |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
657 |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
658 static |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
659 void test_extent_extents(void) { |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
660 mb_text_extents_t ext1, ext2; |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
661 |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
662 MBE_SET_WIDTH(&ext1, 20); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
663 MBE_SET_HEIGHT(&ext1, 10); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
664 MBE_SET_X_BEARING(&ext1, 1); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
665 MBE_SET_Y_BEARING(&ext1, -8); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
666 MBE_SET_X_ADV(&ext1, 21); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
667 MBE_SET_Y_ADV(&ext1, -3); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
668 |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
669 MBE_SET_WIDTH(&ext2, 30); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
670 MBE_SET_HEIGHT(&ext2, 11); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
671 MBE_SET_X_BEARING(&ext2, 2); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
672 MBE_SET_Y_BEARING(&ext2, -11); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
673 MBE_SET_X_ADV(&ext2, 32); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
674 MBE_SET_Y_ADV(&ext2, -5); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
675 |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
676 extent_extents(&ext1, &ext2); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
677 |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
678 CU_ASSERT(MBE_GET_WIDTH(&ext1) == 52); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
679 CU_ASSERT(MBE_GET_HEIGHT(&ext1) == 16); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
680 CU_ASSERT(MBE_GET_X_BEARING(&ext1) == 1); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
681 CU_ASSERT(MBE_GET_Y_BEARING(&ext1) == -14); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
682 CU_ASSERT(MBE_GET_X_ADV(&ext1) == 53); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
683 CU_ASSERT(MBE_GET_Y_ADV(&ext1) == -8); |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
684 } |
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
685 |
415
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
686 static |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
687 void test_compute_utf8_chars_sz(void) { |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
688 const char *str = "\xe4\xb8\xad\xe6\x96\x87test\xe6\xb8\xac\xe8\xa9\xa6"; |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
689 int sz; |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
690 |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
691 sz = compute_utf8_chars_sz(str, 4); |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
692 CU_ASSERT(sz == 8); |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
693 |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
694 sz = compute_utf8_chars_sz(str, 9); |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
695 CU_ASSERT(sz == ERR); |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
696 } |
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
697 |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
698 static |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
699 void test_compute_styled_extents_n_scaled_font(void) { |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
700 sh_stext_t *txt_o; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
701 co_aix *aggr; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
702 mb_style_blk_t blks[2]; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
703 mb_font_face_t *face; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
704 mb_text_extents_t *ext; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
705 int r; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
706 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
707 txt_o = (sh_stext_t *)rdman_shape_stext_new((redraw_man_t *)NULL, |
429
9d5506968efb
Change the interface of rdman_shape_stext_new().
Thinker K.F. Li <thinker@branda.to>
parents:
427
diff
changeset
|
708 "Hello World", 10, 15); |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
709 CU_ASSERT(txt_o != NULL); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
710 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
711 aggr = txt_o->shape.aggr; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
712 aggr[0] = 1; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
713 aggr[1] = 0; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
714 aggr[2] = 0; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
715 aggr[3] = 0; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
716 aggr[4] = 1; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
717 aggr[5] = 0; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
718 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
719 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
720 CU_ASSERT(face != NULL); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
721 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
722 blks[0].n_chars = 5; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
723 blks[0].face = face; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
724 blks[0].font_sz = 10; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
725 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
726 blks[1].n_chars = 4; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
727 blks[1].face = face; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
728 blks[1].font_sz = 15.5; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
729 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
730 r = sh_stext_set_style((shape_t *)txt_o, blks, 2); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
731 CU_ASSERT(r == OK); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
732 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
733 compute_styled_extents_n_scaled_font(txt_o); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
734 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
735 ext = &txt_o->extents; |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
736 CU_ASSERT(MBE_GET_HEIGHT(ext) > 11); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
737 CU_ASSERT(MBE_GET_HEIGHT(ext) < 20); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
738 CU_ASSERT(MBE_GET_WIDTH(ext) > 36); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
739 CU_ASSERT(MBE_GET_WIDTH(ext) < 72); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
740 CU_ASSERT(MBE_GET_X_ADV(ext) > 36); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
741 CU_ASSERT(MBE_GET_X_ADV(ext) < 72); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
742 CU_ASSERT(MBE_GET_Y_ADV(ext) == 0); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
743 |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
744 _rdman_shape_stext_free((shape_t *)txt_o); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
745 free_font_face(face); |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
746 } |
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
747 |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
748 static |
433
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
749 void test_compute_styled_extents_n_scaled_font_rotate(void) { |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
750 sh_stext_t *txt_o; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
751 co_aix *aggr; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
752 mb_style_blk_t blks[2]; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
753 mb_font_face_t *face; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
754 mb_text_extents_t *ext; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
755 int r; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
756 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
757 txt_o = (sh_stext_t *)rdman_shape_stext_new((redraw_man_t *)NULL, |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
758 "Hello World", 10, 15); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
759 CU_ASSERT(txt_o != NULL); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
760 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
761 aggr = txt_o->shape.aggr; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
762 aggr[0] = 1; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
763 aggr[1] = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
764 aggr[2] = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
765 aggr[3] = 1; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
766 aggr[4] = 1; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
767 aggr[5] = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
768 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
769 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
770 CU_ASSERT(face != NULL); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
771 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
772 blks[0].n_chars = 5; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
773 blks[0].face = face; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
774 blks[0].font_sz = 10; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
775 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
776 blks[1].n_chars = 4; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
777 blks[1].face = face; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
778 blks[1].font_sz = 15.5; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
779 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
780 r = sh_stext_set_style((shape_t *)txt_o, blks, 2); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
781 CU_ASSERT(r == OK); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
782 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
783 compute_styled_extents_n_scaled_font(txt_o); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
784 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
785 ext = &txt_o->extents; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
786 CU_ASSERT(MBE_GET_HEIGHT(ext) > 47); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
787 CU_ASSERT(MBE_GET_HEIGHT(ext) < 92); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
788 CU_ASSERT(MBE_GET_WIDTH(ext) > 36); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
789 CU_ASSERT(MBE_GET_WIDTH(ext) < 72); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
790 CU_ASSERT(MBE_GET_X_ADV(ext) > 36); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
791 CU_ASSERT(MBE_GET_X_ADV(ext) < 72); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
792 CU_ASSERT(MBE_GET_Y_ADV(ext) > 36); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
793 CU_ASSERT(MBE_GET_Y_ADV(ext) < 72); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
794 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
795 _rdman_shape_stext_free((shape_t *)txt_o); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
796 free_font_face(face); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
797 } |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
798 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
799 static |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
800 void test_sh_stext_transform(void) { |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
801 sh_stext_t *txt_o; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
802 mb_style_blk_t blks[2]; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
803 co_aix *aggr; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
804 mb_font_face_t *face; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
805 area_t *area; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
806 int r; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
807 |
429
9d5506968efb
Change the interface of rdman_shape_stext_new().
Thinker K.F. Li <thinker@branda.to>
parents:
427
diff
changeset
|
808 txt_o = (sh_stext_t *)rdman_shape_stext_new(NULL, "hello world", 100, 50); |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
809 CU_ASSERT(txt_o != NULL); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
810 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
811 aggr = txt_o->shape.aggr; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
812 aggr[0] = 2; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
813 aggr[1] = 0; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
814 aggr[2] = 0; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
815 aggr[3] = 0; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
816 aggr[4] = 1; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
817 aggr[5] = 0; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
818 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
819 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
820 CU_ASSERT(face != NULL); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
821 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
822 blks[0].n_chars = 5; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
823 blks[0].face = face; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
824 blks[0].font_sz = 10; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
825 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
826 blks[1].n_chars = 4; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
827 blks[1].face = face; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
828 blks[1].font_sz = 15.5; |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
829 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
830 r = sh_stext_set_style((shape_t *)txt_o, blks, 2); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
831 CU_ASSERT(r == OK); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
832 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
833 sh_stext_transform((shape_t *)txt_o); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
834 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
835 area = sh_get_area((shape_t *)txt_o); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
836 CU_ASSERT(area->x >= 200 && area->x < 220); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
837 CU_ASSERT(area->y >= 40 && area->y < 50); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
838 CU_ASSERT(area->w >= 80 && area->w < 120); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
839 CU_ASSERT(area->h >= 8 && area->h < 12); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
840 |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
841 _rdman_shape_stext_free((shape_t *)txt_o); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
842 free_font_face(face); |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
843 } |
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
844 |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
845 static |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
846 void test_sh_stext_draw(void) { |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
847 sh_stext_t *txt_o; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
848 mb_style_blk_t blks[2]; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
849 co_aix *aggr; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
850 mb_font_face_t *face; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
851 area_t *area; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
852 int r; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
853 |
429
9d5506968efb
Change the interface of rdman_shape_stext_new().
Thinker K.F. Li <thinker@branda.to>
parents:
427
diff
changeset
|
854 txt_o = (sh_stext_t *)rdman_shape_stext_new(NULL, "hello world", 100, 50); |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
855 CU_ASSERT(txt_o != NULL); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
856 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
857 aggr = txt_o->shape.aggr; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
858 aggr[0] = 2; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
859 aggr[1] = 0; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
860 aggr[2] = 0; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
861 aggr[3] = 0; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
862 aggr[4] = 1; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
863 aggr[5] = 0; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
864 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
865 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
866 CU_ASSERT(face != NULL); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
867 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
868 blks[0].n_chars = 5; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
869 blks[0].face = face; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
870 blks[0].font_sz = 10; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
871 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
872 blks[1].n_chars = 6; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
873 blks[1].face = face; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
874 blks[1].font_sz = 15.5; |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
875 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
876 r = sh_stext_set_style((shape_t *)txt_o, blks, 2); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
877 CU_ASSERT(r == OK); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
878 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
879 sh_stext_transform((shape_t *)txt_o); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
880 |
433
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
881 move_cnt = 0; |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
882 sh_stext_draw((shape_t *)txt_o, NULL); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
883 CU_ASSERT(move_cnt == 2); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
884 CU_ASSERT(move_xys[0][0] == 200); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
885 CU_ASSERT(move_xys[0][1] == 50); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
886 CU_ASSERT(move_xys[1][0] >= 240 && move_xys[1][0] < 270); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
887 CU_ASSERT(move_xys[1][1] == 50); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
888 |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
889 _rdman_shape_stext_free((shape_t *)txt_o); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
890 free_font_face(face); |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
891 } |
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
892 |
433
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
893 static |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
894 void test_sh_stext_draw_rotate(void) { |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
895 sh_stext_t *txt_o; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
896 mb_style_blk_t blks[2]; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
897 co_aix *aggr; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
898 mb_font_face_t *face; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
899 area_t *area; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
900 int r; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
901 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
902 txt_o = (sh_stext_t *)rdman_shape_stext_new(NULL, "hello world", 100, 50); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
903 CU_ASSERT(txt_o != NULL); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
904 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
905 aggr = txt_o->shape.aggr; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
906 aggr[0] = 2; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
907 aggr[1] = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
908 aggr[2] = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
909 aggr[3] = 1; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
910 aggr[4] = 1; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
911 aggr[5] = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
912 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
913 face = query_font_face("serif", MB_FONT_SLANT_ROMAN, 100); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
914 CU_ASSERT(face != NULL); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
915 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
916 blks[0].n_chars = 5; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
917 blks[0].face = face; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
918 blks[0].font_sz = 10; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
919 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
920 blks[1].n_chars = 6; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
921 blks[1].face = face; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
922 blks[1].font_sz = 15.5; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
923 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
924 r = sh_stext_set_style((shape_t *)txt_o, blks, 2); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
925 CU_ASSERT(r == OK); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
926 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
927 sh_stext_transform((shape_t *)txt_o); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
928 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
929 move_cnt = 0; |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
930 sh_stext_draw((shape_t *)txt_o, NULL); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
931 CU_ASSERT(move_cnt == 2); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
932 CU_ASSERT(move_xys[0][0] == 200); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
933 CU_ASSERT(move_xys[0][1] == 150); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
934 CU_ASSERT(move_xys[1][0] >= 240 && move_xys[1][0] < 270); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
935 CU_ASSERT(move_xys[1][1] >= 170 && move_xys[1][1] < 185); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
936 |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
937 _rdman_shape_stext_free((shape_t *)txt_o); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
938 free_font_face(face); |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
939 } |
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
940 |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
941 #include <CUnit/Basic.h> |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
942 CU_pSuite get_stext_suite(void) { |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
943 CU_pSuite suite; |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
944 |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
945 suite = CU_add_suite("Suite_stext", NULL, NULL); |
412
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
946 CU_ADD_TEST(suite, test_query_font_face); |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
947 CU_ADD_TEST(suite, test_make_scaled_font_face_matrix); |
a456e267279a
Test cases for shape_stext.
Thinker K.F. Li <thinker@branda.to>
parents:
411
diff
changeset
|
948 CU_ADD_TEST(suite, test_compute_text_extents); |
414
bbf036c315be
Fix extent_extents to make it pass the test case.
Thinker K.F. Li <thinker@branda.to>
parents:
413
diff
changeset
|
949 CU_ADD_TEST(suite, test_extent_extents); |
415
fef1b8076041
Make compute_utf8_chars_sz to compute length of n UTF 8 characters correctly.
Thinker K.F. Li <thinker@branda.to>
parents:
414
diff
changeset
|
950 CU_ADD_TEST(suite, test_compute_utf8_chars_sz); |
421
1e48453bb282
Make compute_styled_extents_n_scaled_font() pass the test.
Thinker K.F. Li <thinker@branda.to>
parents:
420
diff
changeset
|
951 CU_ADD_TEST(suite, test_compute_styled_extents_n_scaled_font); |
433
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
952 CU_ADD_TEST(suite, test_compute_styled_extents_n_scaled_font_rotate); |
424
585baa462778
Make sh_stext_transform() pass first test case for him.
Thinker K.F. Li <thinker@branda.to>
parents:
423
diff
changeset
|
953 CU_ADD_TEST(suite, test_sh_stext_transform); |
427
8f900da42eed
Make sh_text_draw() passes first test case.
Thinker K.F. Li <thinker@branda.to>
parents:
426
diff
changeset
|
954 CU_ADD_TEST(suite, test_sh_stext_draw); |
433
099941c3becf
Test cases for ratation on sh_stext
Thinker K.F. Li <thinker@branda.to>
parents:
429
diff
changeset
|
955 CU_ADD_TEST(suite, test_sh_stext_draw_rotate); |
410
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
956 |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
957 return suite; |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
958 } |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
959 |
1a923ea699c1
shape_stext.c, now, is unittested.
Thinker K.F. Li <thinker@branda.to>
parents:
407
diff
changeset
|
960 #endif /* UNITTEST */ |