# HG changeset patch # User Thinker K.F. Li # Date 1217017672 -28800 # Node ID 6eecdd331fe7bd02869b83389c5e0c8fc97d08dc # Parent 94b4b5bd88104d052e08f2eb121b432a7cf2a5dd Fix bug in testcase diff -r 94b4b5bd8810 -r 6eecdd331fe7 orgfiles/index.muse --- a/orgfiles/index.muse Sat Jul 26 03:20:49 2008 +0800 +++ b/orgfiles/index.muse Sat Jul 26 04:27:52 2008 +0800 @@ -57,3 +57,9 @@ transform functions of containers, it is called aggregated transform function. The aggregated transform function of elements are computed with [[http://en.wikipedia.org/wiki/Dynamic_programming][dynamic programming]]. + +** Use Absolute +Since we need to tranform positions, positions are transform to +absolute coordinations if they are specified relative. It is +fine when a relative position are rotated or resized. But, it +would be wrong when shifting. diff -r 94b4b5bd8810 -r 6eecdd331fe7 src/X_main.c --- a/src/X_main.c Sat Jul 26 03:20:49 2008 +0800 +++ b/src/X_main.c Sat Jul 26 04:27:52 2008 +0800 @@ -11,7 +11,7 @@ shape_t *path; coord_t coord; - path = sh_path_new("m80 80 c 20 5 -30 20 10 30 l -30 0 z"); + path = sh_path_new("m80 80 c 20 5 -30 20 10 30 t -30 0 z"); memset(coord.aggr_matrix, 0, sizeof(co_aix) * 6); coord.aggr_matrix[0] = 1; coord.aggr_matrix[1] = 0.5; diff -r 94b4b5bd8810 -r 6eecdd331fe7 src/shape_path.c --- a/src/shape_path.c Sat Jul 26 03:20:49 2008 +0800 +++ b/src/shape_path.c Sat Jul 26 04:27:52 2008 +0800 @@ -317,6 +317,8 @@ return OK; } +/*! \brief Create a path from value of 'data' of SVG path. + */ shape_t *sh_path_new(char *data) { sh_path_t *path; int cmd_cnt, arg_cnt; @@ -362,6 +364,11 @@ return (shape_t *)path; } +/*! \brief Transform a path from user space to device space. + * + * TODO: associate coord_t with shape objects and transform them + * automatically. + */ void sh_path_transform(shape_t *shape, coord_t *coord) { sh_path_t *path; co_aix *user_args, *dev_args; @@ -514,16 +521,16 @@ path = (sh_path_t *)sh_path_new("M 33 25l33 55C 33 87 44 22 55 99L33 77z"); CU_ASSERT(path != NULL); - CU_ASSERT(path->cmd_len == 8); + CU_ASSERT(path->cmd_len == ((5 + sizeof(co_aix) * 2 + 3) & ~0x3)); CU_ASSERT(path->arg_len == 12); - CU_ASSERT(strcmp(path->user_data, "MlCLz") == 0); - CU_ASSERT(strcmp(path->dev_data, "MlCLz") == 0); + CU_ASSERT(strcmp(path->user_data, "MLCLZ") == 0); + CU_ASSERT(strcmp(path->dev_data, "MLCLZ") == 0); args = (co_aix *)(path->user_data + path->cmd_len); CU_ASSERT(args[0] == 33); CU_ASSERT(args[1] == 25); - CU_ASSERT(args[2] == 33); - CU_ASSERT(args[3] == 55); + CU_ASSERT(args[2] == 66); + CU_ASSERT(args[3] == 80); CU_ASSERT(args[4] == 33); CU_ASSERT(args[5] == 87); CU_ASSERT(args[6] == 44); @@ -542,10 +549,10 @@ path = (sh_path_t *)sh_path_new("M 33 25l33 55C 33 87 44 22 55 99L33 77z"); CU_ASSERT(path != NULL); - CU_ASSERT(path->cmd_len == 8); + CU_ASSERT(path->cmd_len == ((5 + sizeof(co_aix) * 2 + 3) & ~0x3)); CU_ASSERT(path->arg_len == 12); - CU_ASSERT(strcmp(path->user_data, "MlCLz") == 0); - CU_ASSERT(strcmp(path->dev_data, "MlCLz") == 0); + CU_ASSERT(strcmp(path->user_data, "MLCLZ") == 0); + CU_ASSERT(strcmp(path->dev_data, "MLCLZ") == 0); coord.aggr_matrix[0] = 1; coord.aggr_matrix[1] = 0; @@ -558,8 +565,8 @@ args = (co_aix *)(path->dev_data + path->cmd_len); CU_ASSERT(args[0] == 34); CU_ASSERT(args[1] == 50); - CU_ASSERT(args[2] == 34); - CU_ASSERT(args[3] == 110); + CU_ASSERT(args[2] == 67); + CU_ASSERT(args[3] == 160); CU_ASSERT(args[4] == 34); CU_ASSERT(args[5] == 174); CU_ASSERT(args[6] == 45);