Hi,

I've been playing around with evas for a while now and I came across
this segv when I was playing trying to use evas_object_text_style_set().

I discovered that in evas/src/lib/canvas/evas_object_text.c, the
evas_object_text_render() method assumes there's a clipping object when
setting the outline/shadow colors.

Here's a quick patch to fix the problem. I'm not quite sure whether I
understand it, but I don't set clip objects usually, is that required?

Cheers,

Alastair

-- 
Alastair Tse (liquidx)
Python, Bluetooth, PDA, Chinese/JK Package Developer
[W] http://dev.gentoo.org/~liquidx/ [EMAIL PROTECTED] [EMAIL PROTECTED]
Index: evas_object_text.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_text.c,v
retrieving revision 1.50
diff -u -r1.50 evas_object_text.c
--- evas_object_text.c	6 Jan 2006 23:05:17 -0000	1.50
+++ evas_object_text.c	14 Jan 2006 01:22:58 -0000
@@ -1243,18 +1243,33 @@
 				object->sub.col.a);
 
 #define COLOR_SET(object, sub, col) \
-	ENFN->context_color_set(output, context, \
+        if (obj->cur.clipper)\
+	   ENFN->context_color_set(output, context, \
 				((int)object->sub.col.r * ((int)obj->cur.clipper->cur.cache.clip.r + 1)) >> 8, \
 				((int)object->sub.col.g * ((int)obj->cur.clipper->cur.cache.clip.g + 1)) >> 8, \
 				((int)object->sub.col.b * ((int)obj->cur.clipper->cur.cache.clip.b + 1)) >> 8, \
-				((int)object->sub.col.a * ((int)obj->cur.clipper->cur.cache.clip.a + 1)) >> 8);
+				((int)object->sub.col.a * ((int)obj->cur.clipper->cur.cache.clip.a + 1)) >> 8); \
+        else\
+	   ENFN->context_color_set(output, context, \
+				object->sub.col.r, \
+				object->sub.col.g, \
+				object->sub.col.b, \
+				object->sub.col.a);
 
 #define COLOR_SET_AMUL(object, sub, col, amul) \
-	ENFN->context_color_set(output, context, \
+        if (obj->cur.clipper) \
+  	    ENFN->context_color_set(output, context, \
 				((int)object->sub.col.r * ((int)obj->cur.clipper->cur.cache.clip.r + 1)) >> 8, \
 				((int)object->sub.col.g * ((int)obj->cur.clipper->cur.cache.clip.g + 1)) >> 8, \
 				((int)object->sub.col.b * ((int)obj->cur.clipper->cur.cache.clip.b + 1)) >> 8, \
-				((((int)object->sub.col.a * ((int)obj->cur.clipper->cur.cache.clip.a + 1)) >> 8) * amul) / 255);
+				((((int)object->sub.col.a * ((int)obj->cur.clipper->cur.cache.clip.a + 1)) >> 8) * amul) / 255); \
+        else \
+  	    ENFN->context_color_set(output, context, \
+				object->sub.col.r, \
+				object->sub.col.g, \
+				object->sub.col.b, \
+				(((int)object->sub.col.a) * amul) / 255);
+          
 
 #define DRAW_TEXT(ox, oy) \
    if ((o->engine_data) && (o->cur.text)) \

Reply via email to