# HG changeset patch # User Thinker K.F. Li # Date 1236494681 -28800 # Node ID b391722bf20ec1344533dd239363ffc9ae192875 # Parent d0408540458364d169f77fa5298b5eeff0fe09e0 sh_image_t::img_data is managed by paint_image_t. - sh_image_t should not try to free it. - call sh_text_P_generate_layout() in sh_text_transform() - remove calling from other functions. diff -r d04085404583 -r b391722bf20e examples/menu/filebrowser.c --- a/examples/menu/filebrowser.c Sun Mar 08 11:47:14 2009 +0800 +++ b/examples/menu/filebrowser.c Sun Mar 08 14:44:41 2009 +0800 @@ -67,7 +67,9 @@ void mypreview(MyAppData *data, char *path) { - mb_img_data_t *img = MB_IMG_LDR_LOAD(rdman_img_ldr(MBAPP_RDMAN(myApp)), path); + redraw_man_t *rdman = MBAPP_RDMAN(myApp); + mb_img_ldr_t *ldr = rdman_img_ldr(rdman); + mb_img_data_t *img = MB_IMG_LDR_LOAD(ldr, path); shape_t *obj = (shape_t *) MB_SPRITE_GET_OBJ(myApp->rootsprite, "previewimg"); printf("Preview %s\n",path); diff -r d04085404583 -r b391722bf20e src/X_supp.c --- a/src/X_supp.c Sun Mar 08 11:47:14 2009 +0800 +++ b/src/X_supp.c Sun Mar 08 14:44:41 2009 +0800 @@ -454,7 +454,7 @@ xmb_rt->tman = mb_tman_new(); - img_ldr = simple_mb_img_ldr_new("./"); + img_ldr = simple_mb_img_ldr_new(""); xmb_rt->img_ldr = img_ldr; rdman_set_img_ldr(xmb_rt->rdman, img_ldr); diff -r d04085404583 -r b391722bf20e src/img_ldr.c --- a/src/img_ldr.c Sun Mar 08 11:47:14 2009 +0800 +++ b/src/img_ldr.c Sun Mar 08 14:44:41 2009 +0800 @@ -113,7 +113,7 @@ return NULL; } strcpy((char *)ldr->repo, img_repository); - if(img_repository[sz - 1] != '/') { + if(img_repository[sz - 1] != '/' && strlen(img_repository) != 0) { ((char *)ldr->repo)[sz] = '/'; ((char *)ldr->repo)[sz + 1] = 0; } diff -r d04085404583 -r b391722bf20e src/shape_image.c --- a/src/shape_image.c Sun Mar 08 11:47:14 2009 +0800 +++ b/src/shape_image.c Sun Mar 08 14:44:41 2009 +0800 @@ -65,6 +65,32 @@ static void sh_image_free(shape_t *shape); +int _sh_image_set_img_data(shape_t *shape, mb_img_data_t *img_data, + co_aix x, co_aix y, co_aix w, co_aix h) { + sh_image_t *img = (sh_image_t *)shape; + paint_t *paint; + + ASSERT(img_data != NULL); + ASSERT(shape->obj.obj_type == MBO_IMAGE); + + paint = rdman_paint_image_new(img->rdman, img_data); + if(paint == NULL) + return ERR; + + if(img->paint) + rdman_paint_free(img->rdman, img->paint); + + img->img_data = img_data; + img->x = x; + img->y = y; + img->w = w; + img->h = h; + img->paint = paint; + rdman_paint_fill(img->rdman, paint, (shape_t *)img); + + return OK; +} + /*! \brief Creae a new image shape. * * \param img_data is image data whose owner-ship is transfered. @@ -85,7 +111,7 @@ img->rdman = rdman; img->shape.free = sh_image_free; - r = sh_image_set_img_data((shape_t *)img, img_data, x, y, w, h); + r = _sh_image_set_img_data((shape_t *)img, img_data, x, y, w, h); if(r != OK) { mb_obj_destroy((shape_t *)img); free(img); @@ -100,7 +126,6 @@ rdman_paint_free(img->rdman, img->paint); mb_obj_destroy(shape); - MB_IMG_DATA_FREE(img->img_data); free(img); } @@ -184,30 +209,10 @@ int sh_image_set_img_data(shape_t *shape, mb_img_data_t *img_data, co_aix x, co_aix y, co_aix w, co_aix h) { - sh_image_t *img = (sh_image_t *)shape; - paint_t *paint; - - ASSERT(img_data != NULL); - ASSERT(shape->obj.obj_type == MBO_IMAGE); + int r; - paint = rdman_paint_image_new(img->rdman, img_data); - if(paint == NULL) - return ERR; - - if(img->paint) { - rdman_paint_free(img->rdman, img->paint); - MB_IMG_DATA_FREE(img->img_data); - } - - img->img_data = img_data; - img->x = x; - img->y = y; - img->w = w; - img->h = h; - img->paint = paint; - rdman_paint_fill(img->rdman, paint, (shape_t *)img); - - return OK; + r = _sh_image_set_img_data(shape, img_data, x, y, w, h); + return r; } mb_img_data_t *sh_image_get_img_data(shape_t *shape) { diff -r d04085404583 -r b391722bf20e src/shape_text.c --- a/src/shape_text.c Sun Mar 08 11:47:14 2009 +0800 +++ b/src/shape_text.c Sun Mar 08 14:44:41 2009 +0800 @@ -65,8 +65,7 @@ text->layout = NULL; text->attrs = attrs; text->align = TEXTALIGN_START; - sh_text_P_generate_layout(text, rdman->cr); - + rdman_shape_man(rdman, (shape_t *)text); return (shape_t *)text; @@ -207,6 +206,8 @@ void sh_text_transform(shape_t *shape) { sh_text_t *text; + coord_t *coord; + canvas_t *canvas; co_aix x, y; co_aix shw; PangoRectangle extents; @@ -214,8 +215,12 @@ int r; text = (sh_text_t *)shape; - + text->d_font_size = coord_trans_size(shape->coord, text->font_size); + + coord = sh_get_coord(shape); + canvas = _coord_get_canvas(coord); + sh_text_P_generate_layout(text, (cairo_t *)canvas); x = text->x; y = text->y; @@ -259,7 +264,6 @@ printf("text=%s\n",text->data); } static void draw_text(sh_text_t *text, cairo_t *cr) { - sh_text_P_generate_layout(text, cr); cairo_move_to(cr, text->d_x, text->d_y); pango_cairo_layout_path(cr,text->layout); }