big speedups for scrolling and drawing big textblock (once they are

formatted) as it will skip (relatively quickly0 draws outside the canvas
viewport. this could become quicker with a fask line-skip table to specific
coordinates, but for now, it's a
LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOT
better. like going from 1fps to 60fps+



SVN revision: 45836
This commit is contained in:
Carsten Haitzler 2010-02-03 15:47:13 +00:00
parent 75ea198b66
commit 1dedddf95d
1 changed files with 42 additions and 26 deletions

View File

@ -884,35 +884,36 @@ _format_color_parse(const char *str, unsigned char *r, unsigned char *g, unsigne
*b = (*b * *a) / 255;
}
static const char *fontstr;
static const char *font_fallbacksstr;
static const char *font_sizestr;
static const char *font_sourcestr;
static const char *colorstr;
static const char *underline_colorstr;
static const char *underline2_colorstr;
static const char *outline_colorstr;
static const char *shadow_colorstr;
static const char *glow_colorstr;
static const char *glow2_colorstr;
static const char *backing_colorstr;
static const char *strikethrough_colorstr;
static const char *alignstr;
static const char *valignstr;
static const char *wrapstr;
static const char *left_marginstr;
static const char *right_marginstr;
static const char *underlinestr;
static const char *strikethroughstr;
static const char *backingstr;
static const char *stylestr;
static const char *tabstopsstr;
static const char *linesizestr;
static const char *linerelsizestr;
static const char *fontstr = NULL;
static const char *font_fallbacksstr = NULL;
static const char *font_sizestr = NULL;
static const char *font_sourcestr = NULL;
static const char *colorstr = NULL;
static const char *underline_colorstr = NULL;
static const char *underline2_colorstr = NULL;
static const char *outline_colorstr = NULL;
static const char *shadow_colorstr = NULL;
static const char *glow_colorstr = NULL;
static const char *glow2_colorstr = NULL;
static const char *backing_colorstr = NULL;
static const char *strikethrough_colorstr = NULL;
static const char *alignstr = NULL;
static const char *valignstr = NULL;
static const char *wrapstr = NULL;
static const char *left_marginstr = NULL;
static const char *right_marginstr = NULL;
static const char *underlinestr = NULL;
static const char *strikethroughstr = NULL;
static const char *backingstr = NULL;
static const char *stylestr = NULL;
static const char *tabstopsstr = NULL;
static const char *linesizestr = NULL;
static const char *linerelsizestr = NULL;
static void
_format_command_init(void)
{
if (fontstr) return;
fontstr = eina_stringshare_add("font");
font_fallbacksstr = eina_stringshare_add("font_fallbacks");
font_sizestr = eina_stringshare_add("font_size");
@ -943,6 +944,7 @@ _format_command_init(void)
static void
_format_command_shutdown(void)
{
return;
eina_stringshare_del(fontstr);
eina_stringshare_del(font_fallbacksstr);
eina_stringshare_del(font_sizestr);
@ -1863,6 +1865,7 @@ _layout_text_append(Ctxt *c, Evas_Object_Textblock_Format *fmt, Evas_Object_Text
str = n->text;
tbase = str;
}
// printf("add: wrap: %i|%i, width: %i '%s'\n", fmt->wrap_word, fmt->wrap_char, c->w, str);
new_line = 0;
empty_item = 0;
while (str)
@ -5207,13 +5210,26 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
pline = 0; \
pline2 = 0; \
pstrike = 0; \
if ((obj->cur.geometry.y + ln->y + ln->h) < \
(obj->layer->evas->viewport.y - 20)) \
continue; \
if ((obj->cur.geometry.y + ln->y) > \
(obj->layer->evas->viewport.y + obj->layer->evas->viewport.h + 20)) \
break; \
EINA_INLIST_FOREACH(ln->items, it) \
{ \
int yoff; \
\
yoff = ln->baseline; \
if (it->format->valign != -1.0) \
yoff = (it->format->valign * (double)(ln->h - it->h)) + it->baseline;
yoff = (it->format->valign * (double)(ln->h - it->h)) + it->baseline; \
if ((obj->cur.geometry.x + ln->x + it->x - it->inset + it->w) < \
(obj->layer->evas->viewport.x - 20)) \
continue; \
if ((obj->cur.geometry.x + ln->x + it->x - it->inset) > \
(obj->layer->evas->viewport.x + obj->layer->evas->viewport.w + 20)) \
break; \
#define ITEM_WALK_END() \
} \
}