forked from enlightenment/efl
and get ourselves another 10% speedup with textblock... :) (and in fact pave
the way for overflow objects) SVN revision: 13169
This commit is contained in:
parent
2eded160da
commit
e9f525ece0
|
@ -515,20 +515,23 @@ evas_object_textblock_layout(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
Layout_Node *lnode;
|
Layout_Node *lnode;
|
||||||
Node *node;
|
Node *node;
|
||||||
int newline;
|
|
||||||
|
|
||||||
|
/* FIXME: if we overflow then this would be punted to an overflow */
|
||||||
|
/* object instead */
|
||||||
|
if (layout.line.y >= h) return;
|
||||||
node = (Node *)l;
|
node = (Node *)l;
|
||||||
// printf("NODE: FMT:\"%s\" TXT:\"%s\"\n", node->format, node->text);
|
// printf("NODE: FMT:\"%s\" TXT:\"%s\"\n", node->format, node->text);
|
||||||
newline = 0;
|
|
||||||
if (node->format)
|
if (node->format)
|
||||||
{
|
{
|
||||||
/* first handle newline, tab etc. etc */
|
/* first handle newline, tab etc. etc */
|
||||||
if (!strcmp(node->format, "\n"))
|
if (!strcmp(node->format, "\n"))
|
||||||
{
|
{
|
||||||
layout.line.x = 0;
|
layout.line.x = 0;
|
||||||
|
if ((layout.line.y + lnode->layout.line.mascent + lnode->layout.line.mdescent) > h)
|
||||||
|
{
|
||||||
|
/* FIXME: this node would overflow to the next textblock */
|
||||||
|
}
|
||||||
layout.line.y += lnode->layout.line.mascent + lnode->layout.line.mdescent;
|
layout.line.y += lnode->layout.line.mascent + lnode->layout.line.mdescent;
|
||||||
layout.line.mascent = 0;
|
|
||||||
layout.line.mdescent = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
evas_object_textblock_layout_format_modify(&layout, node->format);
|
evas_object_textblock_layout_format_modify(&layout, node->format);
|
||||||
|
@ -548,6 +551,16 @@ evas_object_textblock_layout(Evas_Object *obj)
|
||||||
evas_object_textblock_layout_copy(&layout, &(lnode->layout));
|
evas_object_textblock_layout_copy(&layout, &(lnode->layout));
|
||||||
if (lnode->layout.font.name)
|
if (lnode->layout.font.name)
|
||||||
font = evas_font_load(obj->layer->evas, lnode->layout.font.name, lnode->layout.font.source, lnode->layout.font.size);
|
font = evas_font_load(obj->layer->evas, lnode->layout.font.name, lnode->layout.font.source, lnode->layout.font.size);
|
||||||
|
/* if this is at the start of the line... */
|
||||||
|
if (layout.line.x == 0)
|
||||||
|
{
|
||||||
|
if (font) inset = ENFN->font_inset_get(ENDT, font, text);
|
||||||
|
layout.line.inset = inset;
|
||||||
|
layout.line.x = -inset;
|
||||||
|
layout.line.mascent = 0;
|
||||||
|
layout.line.mdescent = 0;
|
||||||
|
line_start = lnode;
|
||||||
|
}
|
||||||
lnode->layout.font.font = font;
|
lnode->layout.font.font = font;
|
||||||
if (font) ascent = ENFN->font_max_ascent_get(ENDT, font);
|
if (font) ascent = ENFN->font_max_ascent_get(ENDT, font);
|
||||||
if (font) descent = ENFN->font_max_descent_get(ENDT, font);
|
if (font) descent = ENFN->font_max_descent_get(ENDT, font);
|
||||||
|
@ -557,14 +570,6 @@ evas_object_textblock_layout(Evas_Object *obj)
|
||||||
layout.line.descent = descent;
|
layout.line.descent = descent;
|
||||||
if (layout.line.mascent < ascent) layout.line.mascent = ascent;
|
if (layout.line.mascent < ascent) layout.line.mascent = ascent;
|
||||||
if (layout.line.mdescent < descent) layout.line.mdescent = descent;
|
if (layout.line.mdescent < descent) layout.line.mdescent = descent;
|
||||||
/* if this is at the start of the line... */
|
|
||||||
if (layout.line.x == 0)
|
|
||||||
{
|
|
||||||
if (font) inset = ENFN->font_inset_get(ENDT, font, text);
|
|
||||||
layout.line.inset = inset;
|
|
||||||
layout.line.x = -inset;
|
|
||||||
line_start = lnode;
|
|
||||||
}
|
|
||||||
if (font) chrpos = ENFN->font_char_at_coords_get(ENDT, font, text,
|
if (font) chrpos = ENFN->font_char_at_coords_get(ENDT, font, text,
|
||||||
w - layout.line.x, 0,
|
w - layout.line.x, 0,
|
||||||
&cx, &cy, &cw, &ch);
|
&cx, &cy, &cw, &ch);
|
||||||
|
@ -656,9 +661,11 @@ evas_object_textblock_layout(Evas_Object *obj)
|
||||||
}
|
}
|
||||||
layout.line.inset = 0;
|
layout.line.inset = 0;
|
||||||
layout.line.x = 0;
|
layout.line.x = 0;
|
||||||
|
if ((layout.line.y + lnode->layout.line.mascent + lnode->layout.line.mdescent) > h)
|
||||||
|
{
|
||||||
|
/* FIXME: this node would overflow to the next textblock */
|
||||||
|
}
|
||||||
layout.line.y += lnode->layout.line.mascent + lnode->layout.line.mdescent;
|
layout.line.y += lnode->layout.line.mascent + lnode->layout.line.mdescent;
|
||||||
layout.line.mascent = 0;
|
|
||||||
layout.line.mdescent = 0;
|
|
||||||
text = text2;
|
text = text2;
|
||||||
/* still more text to go */
|
/* still more text to go */
|
||||||
goto new_node;
|
goto new_node;
|
||||||
|
|
Loading…
Reference in New Issue