From c830f68a06904a2d78e60bca460c7237b814193f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 13 May 2009 12:20:14 +0000 Subject: [PATCH] 1. fix scalecache to actually respect env vars set! 2. fix textblock cursor stuff in corner case. SVN revision: 40617 --- legacy/evas/src/lib/canvas/evas_object_textblock.c | 14 ++++++++++++-- .../src/lib/engines/common/evas_image_scalecache.c | 13 ++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index fed1e0d8f3..2e4a888d8c 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -2259,12 +2259,22 @@ _find_layout_item_line_match(Evas_Object *obj, Evas_Object_Textblock_Node *n, in { Evas_Object_Textblock_Format_Item *fit; Evas_Object_Textblock_Item *it; - + Evas_Object_Textblock_Line *lnn; + + lnn = (Evas_Object_Textblock_Line *)(((Eina_Inlist *)ln)->next); EINA_INLIST_FOREACH(ln->items, it) { if (it->source_node == n) { - if ((int)(it->source_pos + strlen(it->text)) >= pos) + Evas_Object_Textblock_Item *itn; + int p; + + itn = (Evas_Object_Textblock_Item *)(((Eina_Inlist *)it)->next); + p = (int)(it->source_pos + strlen(it->text)); + if ((p > pos) || + ((p == pos) && (!lnn) && + ((!itn) | + ((itn) && (itn->source_node != n))))) { *lnr = ln; *itr = it; diff --git a/legacy/evas/src/lib/engines/common/evas_image_scalecache.c b/legacy/evas/src/lib/engines/common/evas_image_scalecache.c index 53e2af165c..d3bb57d979 100644 --- a/legacy/evas/src/lib/engines/common/evas_image_scalecache.c +++ b/legacy/evas/src/lib/engines/common/evas_image_scalecache.c @@ -197,7 +197,7 @@ _sci_find(RGBA_Image *im, { Eina_List *l; Scaleitem *sci; - + EINA_LIST_FOREACH(im->cache.list, l, sci) { if ( @@ -236,9 +236,14 @@ _sci_find(RGBA_Image *im, // printf(" 1- %i\n", sci->dst_w * sci->dst_h * 4); cache_list = eina_inlist_remove(cache_list, (Eina_Inlist *)sci); } + if (max_scale_items < 1) return NULL; } else { + if (max_scale_items < 1) return NULL; + + if (eina_list_count(im->cache.list) > (max_scale_items - 1)) + return NULL; sci = malloc(sizeof(Scaleitem)); memset(sci, 0, sizeof(Eina_Inlist)); sci->parent_im = im; @@ -376,6 +381,12 @@ evas_common_rgba_image_scalecache_prepare(Image_Entry *ie, RGBA_Image *dst, sci = _sci_find(im, dc, smooth, src_region_x, src_region_y, src_region_w, src_region_h, dst_region_w, dst_region_h); + if (!sci) + { + LKU(cache_lock); + LKU(im->cache.lock); + return; + } // printf("%10i | %4i %4i %4ix%4i -> %4i %4i %4ix%4i | %i\n", // (int)use_counter, // src_region_x, src_region_y, src_region_w, src_region_h,