Enlightenment CVS committal

Author  : rbdpngn
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_entry.c 


Log Message:
Simplify some of the entry operation code and use its own format compositing
function.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_entry.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- ewl_entry.c 11 Mar 2005 23:35:24 -0000      1.5
+++ ewl_entry.c 12 Mar 2005 05:07:33 -0000      1.6
@@ -92,7 +92,10 @@
  */
 int ewl_entry_init(Ewl_Entry * e, char *text)
 {
-       Ewl_Widget     *w;
+       char       *tmp;
+       int         r, g, b, a;
+       int         size;
+       Ewl_Widget *w;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR_RET("e", e, FALSE);
@@ -119,6 +122,28 @@
        ecore_dlist_set_free_cb(e->ops, ewl_entry_op_free);
        ecore_dlist_set_free_cb(e->applied, ewl_entry_op_free);
 
+       /*
+        * Apply the default theme information to the text, this
+        * information may be altered programmatically through the operation
+        * queues.
+        */
+       tmp = ewl_theme_data_str_get(w, "font");
+       size = ewl_theme_data_int_get(w, "font_size");
+       ewl_entry_font_set(EWL_ENTRY(w), tmp, size);
+       IF_FREE(tmp);
+
+       /*
+       tmp = ewl_theme_data_str_get(w, "style");
+       etox_context_set_style(e->context, tmp);
+       IF_FREE(tmp);
+       */
+
+       r = ewl_theme_data_int_get(w, "color/r");
+       g = ewl_theme_data_int_get(w, "color/g");
+       b = ewl_theme_data_int_get(w, "color/b");
+       a = ewl_theme_data_int_get(w, "color/a");
+       ewl_entry_color_set(EWL_ENTRY(w), r, g, b, a);
+
        if (text)
                ewl_entry_text_set(e, text);
 
@@ -791,12 +816,8 @@
 
 void ewl_entry_realize_cb(Ewl_Widget * w, void *ev_data, void *user_data)
 {
-       char      *tmp;
-       int        size;
-       char       format[PATH_MAX];
        Ewl_Entry *e;
        Ewl_Embed *emb;
-       int        r, g, b, a;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR("w", w);
@@ -815,35 +836,11 @@
         */
        e->textobj = evas_object_textblock_add(emb->evas);
 
-       /*
-        * Apply the default theme information to the text, this
-        * information may be altered programmatically through the operation
-        * queues.
-        */
-       tmp = ewl_theme_data_str_get(w, "font");
-       size = ewl_theme_data_int_get(w, "font_size");
-
-       snprintf(format, PATH_MAX, "source=%s font=fonts/%s size=%d",
-                       ewl_theme_path_get(), tmp, size);
-       evas_object_textblock_format_insert(e->textobj, format);
-       IF_FREE(tmp);
-
-       /*
-       tmp = ewl_theme_data_str_get(w, "style");
-       etox_context_set_style(e->context, tmp);
-       IF_FREE(tmp);
-       */
-
-       r = ewl_theme_data_int_get(w, "color/r");
-       g = ewl_theme_data_int_get(w, "color/g");
-       b = ewl_theme_data_int_get(w, "color/b");
-       a = ewl_theme_data_int_get(w, "color/a");
-       snprintf(format, PATH_MAX, "color=#%02x%02x%02x%02x", r, g, b, a);
-       evas_object_textblock_format_insert(e->textobj, format);
-
        if (w->fx_clip_box)
                evas_object_clip_set(e->textobj, w->fx_clip_box);
 
+       evas_object_textblock_text_insert(e->textobj, "a ");
+
        /*
         * Apply previous operations and update the size of the entry
         */
@@ -1641,13 +1638,93 @@
                traverse = ecore_dlist_previous;
        }
 
-       while ((op = traverse(e->ops)))
+       while ((op = traverse(l)))
                if (op->type == type)
                        break;
 
        DRETURN_PTR(op, DLEVEL_STABLE);
 }
 
+static char *ewl_entry_op_format_current_get(Ewl_Entry *e)
+{
+       Ewl_Entry_Op_Color *ec;
+       Ewl_Entry_Op_Font *ef;
+       Ewl_Entry_Op_Style *es;
+       Ewl_Entry_Op_Align *ea;
+       char *cstr;
+       char *fstr;
+       char *sstr;
+               char *astr;
+               char *vstr;
+       int size;
+       char format[PATH_MAX];
+
+       /*
+        * Find the relevant 
+        */
+       ec = ewl_entry_op_relevant_find(e, EWL_ENTRY_OP_TYPE_COLOR_SET);
+       if (ec) {
+               cstr = malloc(10);
+               if (cstr)
+                       snprintf(cstr, 10, "#%02x%02x%02x%02x", ec->r,
+                                       ec->g, ec->b, ec->a);
+       }
+       else {
+               cstr = strdup("#000000ff");
+       }
+
+       ef = ewl_entry_op_relevant_find(e, EWL_ENTRY_OP_TYPE_FONT_SET);
+       if (ef) {
+               fstr = strdup(ef->font);
+               size = ef->size;
+       }
+       else {
+               fstr  = strdup("Vera");
+               size = 10;
+       }
+
+       es = ewl_entry_op_relevant_find(e, EWL_ENTRY_OP_TYPE_STYLE_SET);
+       if (es) {
+               sstr = strdup(es->style);
+       }
+       else {
+               sstr  = strdup("none");
+       }
+
+       ea = ewl_entry_op_relevant_find(e, EWL_ENTRY_OP_TYPE_ALIGN_SET);
+       if (ea) {
+               if (ea->align & EWL_FLAG_ALIGN_LEFT)
+                       astr = strdup("left");
+               else if (ea->align & EWL_FLAG_ALIGN_RIGHT)
+                       astr = strdup("right");
+               else
+                       astr = strdup("center");
+
+               if (ea->align & EWL_FLAG_ALIGN_TOP)
+                       vstr = strdup("top");
+               else if (ea->align & EWL_FLAG_ALIGN_BOTTOM)
+                       vstr = strdup("bottom");
+               else
+                       vstr = strdup("baseline");
+       }
+       else {
+               astr = strdup("left");
+               vstr = strdup("baseline");
+       }
+
+       snprintf(format, PATH_MAX,
+               "color=%s source=%s font=fonts/%s size=%d style=%s align=%s 
valign=%s",
+               cstr, ewl_theme_path_get(), fstr, size, sstr, astr, vstr);
+
+       IF_FREE(cstr);
+       IF_FREE(fstr);
+       IF_FREE(sstr);
+       IF_FREE(astr);
+       IF_FREE(vstr);
+
+       DRETURN_PTR(strdup(format), DLEVEL_STABLE);
+}
+
 static void ewl_entry_ops_apply(Ewl_Entry *e)
 {
        Ewl_Entry_Op *op;
@@ -1703,31 +1780,15 @@
 static void
 ewl_entry_op_color_apply(Ewl_Entry *e, Ewl_Entry_Op *op)
 {
-       int or = 0, og = 0, ob = 0, oa = 255;
-       char *format;
        char nformat[16];
        Ewl_Entry_Op_Color *opc = (Ewl_Entry_Op_Color *)op;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       format = evas_object_textblock_format_current_get(e->textobj);
-       if (format)
-               sscanf(format, "color=#%02x%02x%02x%02x", &or, &og, &ob, &oa);
-
        snprintf(nformat, 16, "color=#%02x%02x%02x%02x", opc->r, opc->g,
                        opc->b, opc->a);
        evas_object_textblock_format_insert(e->textobj, nformat);
 
-       IF_FREE(format);
-
-       /*
-        * Store the previous values for undoing.
-        */
-       opc->r = or;
-       opc->g = og;
-       opc->b = ob;
-       opc->a = oa;
-
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
@@ -1755,31 +1816,15 @@
 static void
 ewl_entry_op_font_apply(Ewl_Entry *e, Ewl_Entry_Op *op)
 {
-       char of[PATH_MAX];
        char nformat[PATH_MAX];
-       char *format;
-       int size;
        Ewl_Entry_Op_Font *opf = (Ewl_Entry_Op_Font *)op;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       of[0] = '\0';
-       size = 1;
-       format = evas_object_textblock_format_current_get(e->textobj);
-       if (format) {
-               sscanf(format, "font=%s", of);
-               sscanf(format, "size=%d", &size);
-       }
-
-       snprintf(nformat, PATH_MAX, "font=%s size=%d", opf->font, opf->size);
+       snprintf(nformat, PATH_MAX, "source=%s font=fonts/%s size=%d",
+                       ewl_theme_path_get(), opf->font, opf->size);
        evas_object_textblock_format_insert(e->textobj, nformat);
 
-       IF_FREE(format);
-
-       FREE(opf->font);
-       opf->font = strdup(of);
-       opf->size = size;
-
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
@@ -1818,19 +1863,17 @@
 static void
 ewl_entry_op_style_apply(Ewl_Entry *e, Ewl_Entry_Op *op)
 {
-       char *style = NULL;
        Ewl_Entry_Op_Style *ops = (Ewl_Entry_Op_Style *)op;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
+       ops = NULL;
+
        /*
        style = etox_context_get_style(e->context);
        etox_context_set_style(e->context, ops->style);
        */
 
-       FREE(ops->style);
-       ops->style = style;
-
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
@@ -1869,40 +1912,12 @@
 static void
 ewl_entry_op_align_apply(Ewl_Entry *e, Ewl_Entry_Op *op)
 {
-       unsigned int align;
        char *format;
-       char alignment[32];
        char nformat[64];
        Ewl_Entry_Op_Align *opa = (Ewl_Entry_Op_Align *)op;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       format = evas_object_textblock_format_current_get(e->textobj);
-
-       sscanf(format, "align=%s", alignment);
-
-       /*
-        * Default to left aligned. This will help with handling fully
-        * justified text.
-        */
-       if (!strcmp(alignment, "center"))
-               align = EWL_FLAG_ALIGN_CENTER;
-       else if (!strcmp(alignment, "right"))
-               align = EWL_FLAG_ALIGN_RIGHT;
-       else
-               align = EWL_FLAG_ALIGN_LEFT;
-
-       sscanf(format, "valign=%s", alignment);
-
-       if (!strcmp(alignment, "baseline"))
-               align |= EWL_FLAG_ALIGN_CENTER;
-       else if (!strcmp(alignment, "top"))
-               align |= EWL_FLAG_ALIGN_TOP;
-       else
-               align |= EWL_FLAG_ALIGN_BOTTOM;
-
-       FREE(format);
-
        if (opa->align & EWL_FLAG_ALIGN_RIGHT) {
                format = "right";
        }
@@ -1925,8 +1940,6 @@
 
        evas_object_textblock_format_insert(e->textobj, nformat);
 
-       opa->align = align;
-
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
@@ -2045,8 +2058,7 @@
        len = evas_object_textblock_length_get(e->textobj);
        if (op->type == EWL_ENTRY_OP_TYPE_TEXT_SET) {
                char *nf;
-               evas_object_textblock_cursor_pos_set(e->textobj, len);
-               nf = evas_object_textblock_format_current_get(e->textobj);
+               nf = ewl_entry_op_format_current_get(e);
                evas_object_textblock_cursor_pos_set(e->textobj, 0);
                evas_object_textblock_text_del(e->textobj, len);
                if (nf)




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to