Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        edje_calc.c edje_data.c edje_load.c edje_private.h edje_util.c 


Log Message:


and edje started supporting.... TEXTBLOCK2!!!!!
see e_logo.edc for an example. :)

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -3 -r1.66 -r1.67
--- edje_calc.c 25 Aug 2005 13:16:21 -0000      1.66
+++ edje_calc.c 12 Sep 2005 09:43:49 -0000      1.67
@@ -429,7 +429,76 @@
        if (ep->swallow_params.min.h > desc->min.h) minh = 
ep->swallow_params.min.h;
      }
    /* if we have text that wants to make the min size the text size... */
-   if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXT))
+   if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK))
+     {
+       Evas_Coord tw, th, ins_l, ins_r, ins_t, ins_b;
+       char *text = "";
+       char *style = "";
+       Edje_Style *stl  = NULL;
+       Evas_List *l;
+       
+       if (chosen_desc->text.id_source >= 0)
+         {
+            ep->text.source = ed->table_parts[chosen_desc->text.id_source % 
ed->table_parts_size];
+            style = ep->text.source->chosen_description->text.style;
+         }
+       else
+         {
+            ep->text.source = NULL;
+            style = chosen_desc->text.style;
+         }
+       
+       if (chosen_desc->text.id_text_source >= 0)
+         {
+            ep->text.text_source = 
ed->table_parts[chosen_desc->text.id_text_source % ed->table_parts_size];
+            text = ep->text.text_source->chosen_description->text.text;
+            if (ep->text.text_source->text.text) text = 
ep->text.text_source->text.text;
+         }
+       else
+         {
+            ep->text.text_source = NULL;
+            text = chosen_desc->text.text;
+            if (ep->text.text) text = ep->text.text;
+         }
+       
+       for (l = ed->file->styles; l; l = l->next)
+         {
+            stl = l->data;
+            if (!strcmp(stl->name, style)) break;
+            stl = NULL;
+         }
+       
+       if (stl)
+         {
+            char *ptxt;
+            
+            if (evas_object_textblock2_style_get(ep->object) != stl->style)
+              evas_object_textblock2_style_set(ep->object, stl->style);
+            ptxt = evas_object_textblock2_text_markup_get(ep->object);
+            if (((!ptxt) && (text)) || 
+                ((ptxt) && (text) && (strcmp(ptxt, text))) ||
+                ((ptxt) && (!text)))
+              evas_object_textblock2_text_markup_set(ep->object, text);
+            if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y))
+              {
+                 int mw = 0, mh = 0;
+                 
+                 if (!chosen_desc->text.min_x)
+                   {
+                      evas_object_resize(ep->object, params->w, params->h);
+                      evas_object_textblock2_size_formatted_get(ep->object, 
&tw, &th);
+                   }
+                 else
+                   evas_object_textblock2_size_native_get(ep->object, &tw, 
&th);
+                 evas_object_textblock2_style_insets_get(ep->object, &ins_l, 
&ins_r, &ins_t, &ins_b);
+                 mw = ins_l + tw + ins_r;
+                 mh = ins_t + th + ins_b;
+                 if (mw > minw) minw = mw;
+                 if (mh > minh) minh = mh;
+              }
+         }
+     }
+   else if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXT))
      {
        char      *text;
        char      *font;
@@ -1040,6 +1109,11 @@
             evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
             evas_object_resize(ep->object, p3.w, p3.h);
          }
+       else if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK)
+         {
+            evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
+            evas_object_resize(ep->object, p3.w, p3.h);
+         }
        
        if (ep->swallowed_object)
          {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- edje_data.c 26 Jul 2005 13:59:02 -0000      1.23
+++ edje_data.c 12 Sep 2005 09:43:49 -0000      1.24
@@ -2,6 +2,8 @@
 #include "edje_private.h"
 
 Eet_Data_Descriptor *_edje_edd_edje_file = NULL;
+Eet_Data_Descriptor *_edje_edd_edje_style = NULL;
+Eet_Data_Descriptor *_edje_edd_edje_style_tag = NULL;
 Eet_Data_Descriptor *_edje_edd_edje_data = NULL;
 Eet_Data_Descriptor *_edje_edd_edje_font_directory = NULL;
 Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry = NULL;
@@ -38,6 +40,8 @@
 _edje_edd_free(void)
 {
    FREED(_edje_edd_edje_file);
+   FREED(_edje_edd_edje_style);
+   FREED(_edje_edd_edje_style_tag);
    FREED(_edje_edd_edje_data);
    FREED(_edje_edd_edje_font_directory);
    FREED(_edje_edd_edje_font_directory_entry);
@@ -101,6 +105,18 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "key", key, 
EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "value", 
value, EET_T_STRING);
    
+   _edje_edd_edje_style_tag = 
+     NEWD("Edje_Style_Tag", 
+         Edje_Style_Tag);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, 
"key", key, EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, 
"value", value, EET_T_STRING);
+   
+   _edje_edd_edje_style = 
+     NEWD("Edje_Style", 
+         Edje_Style);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style, Edje_Style, "name", 
name, EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_style, Edje_Style, "tags", 
tags, _edje_edd_edje_style_tag);
+   
    /* the main file directory */
    _edje_edd_edje_file = 
      NEWD("Edje_File", 
@@ -112,6 +128,7 @@
    EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", 
image_dir, _edje_edd_edje_image_directory);
    EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, 
"collection_dir", collection_dir, _edje_edd_edje_part_collection_directory);   
    EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "data", data, 
_edje_edd_edje_data);
+   EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "styles", 
styles, _edje_edd_edje_style);
 
    /* parts & programs - loaded induvidually */
    _edje_edd_edje_program_target = 
@@ -208,6 +225,7 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "color3.a", color3.a, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.text", text.text, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.text_class", text.text_class, EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.style", text.style, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.font", text.font, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.size", text.size, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.fit_x", text.fit_x, EET_T_UCHAR);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -3 -r1.66 -r1.67
--- edje_load.c 26 Jul 2005 13:59:03 -0000      1.66
+++ edje_load.c 12 Sep 2005 09:43:49 -0000      1.67
@@ -176,6 +176,8 @@
                  evas_object_color_set(rp->object, 0, 0, 0, 0);
                  evas_object_pass_events_set(rp->object, 1);
               }
+            else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK)
+              rp->object = evas_object_textblock2_add(ed->evas);
             else
               {
                  printf("EDJE ERROR: wrong part type %i!\n", ep->type);
@@ -719,7 +721,7 @@
 _edje_file_add(Edje *ed)
 {
    Eet_File *ef = NULL;
-   Evas_List *l;
+   Evas_List *l, *ll;
    int id = -1;
 
    if (_edje_edd_edje_file == NULL)
@@ -733,7 +735,6 @@
        ed->file = _edje_file_cache_find(ed->path);
        if (!ed->file)
          {
-//          printf("OPEN EDJE %s\n", ed->path);
             ef = eet_open(ed->path, EET_FILE_MODE_READ);
             if (!ef)
               {
@@ -769,6 +770,59 @@
          }
      }
 
+   for (l = ed->file->styles; l; l = l->next)
+     {
+       Edje_Style *stl;
+       Edje_Style_Tag *tag;
+       char *buf = NULL;
+       int len = 0;
+       int def_done;
+       
+       stl = l->data;
+       if (stl->style) break;
+       stl->style = evas_textblock2_style_new();
+       evas_textblock2_style_set(stl->style, (const char *)buf);
+       for (ll = stl->tags; ll; ll = ll->next)
+         {
+            tag = ll->data;
+            len += strlen(tag->key);
+            len += 1;
+            len += 1;
+            len += strlen(tag->value);
+            len += 1;
+         }
+       if (_edje_fontset_append)
+         {
+            len += 1 + strlen("font_fallbacks=") + 
strlen(_edje_fontset_append);
+         }
+       len += 1 + strlen("font_source=") + strlen(ed->path);
+       buf = malloc(len + 1);
+       buf[0] = 0;
+       for (ll = stl->tags; ll; ll = ll->next)
+         {
+            tag = ll->data;
+            strcat(buf, tag->key);
+            strcat(buf, "='");
+            strcat(buf, tag->value);
+            if ((!def_done) && (!strcmp(tag->key, "DEFAULT")))
+              {
+                 if (_edje_fontset_append)
+                   {
+                      strcat(buf, " ");
+                      strcat(buf, "font_fallbacks=");
+                      strcat(buf, _edje_fontset_append);
+                   }
+                 strcat(buf, " ");
+                 strcat(buf, "font_source=");
+                 strcat(buf, ed->path);
+                 def_done = 1;
+              }
+            strcat(buf, "'");
+         }
+       evas_textblock2_style_set(stl->style, buf);
+       free(buf);
+     }
+   
    ed->collection = _edje_collection_find(ed->file, ed->part);
    if (!ed->collection)
      {
@@ -1027,6 +1081,26 @@
    if (edf->compiler) free(edf->compiler);
    if (edf->collection_cache)
      _edje_collection_cleanup(edf);
+   while (edf->styles)
+     {
+       Edje_Style *stl;
+       
+       stl == edf->styles->data;
+       edf->styles = evas_list_remove_list(edf->styles, edf->styles);
+       while (stl->tags)
+         {
+            Edje_Style_Tag *tag;
+            
+            tag = stl->tags->data;
+            stl->tags = evas_list_remove_list(stl->tags, stl->tags);
+            if (tag->key) free(tag->key);
+            if (tag->value) free(tag->value);
+            free(tag);
+         }
+       if (stl->name) free(stl->name);
+       if (stl->style) evas_textblock2_style_free(stl->style);
+       free(stl);
+     }
    free(edf);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -3 -r1.88 -r1.89
--- edje_private.h      5 Sep 2005 10:46:04 -0000       1.88
+++ edje_private.h      12 Sep 2005 09:43:49 -0000      1.89
@@ -68,9 +68,11 @@
 */
 
 typedef struct _Edje_File                            Edje_File;
+typedef struct _Edje_Style                           Edje_Style;
+typedef struct _Edje_Style_Tag                       Edje_Style_Tag;
 typedef struct _Edje_Data                            Edje_Data;
-typedef struct _Edje_Font_Directory                 Edje_Font_Directory;
-typedef struct _Edje_Font_Directory_Entry           Edje_Font_Directory_Entry;
+typedef struct _Edje_Font_Directory                  Edje_Font_Directory;
+typedef struct _Edje_Font_Directory_Entry            Edje_Font_Directory_Entry;
 typedef struct _Edje_Image_Directory                 Edje_Image_Directory;
 typedef struct _Edje_Image_Directory_Entry           
Edje_Image_Directory_Entry;
 typedef struct _Edje_Program                         Edje_Program;
@@ -96,7 +98,8 @@
 #define EDJE_PART_TYPE_TEXT      2
 #define EDJE_PART_TYPE_IMAGE     3
 #define EDJE_PART_TYPE_SWALLOW   4
-#define EDJE_PART_TYPE_LAST      5
+#define EDJE_PART_TYPE_TEXTBLOCK 5
+#define EDJE_PART_TYPE_LAST      6
 
 #define EDJE_TEXT_EFFECT_NONE                0
 #define EDJE_TEXT_EFFECT_PLAIN               1
@@ -160,6 +163,7 @@
    Edje_Image_Directory           *image_dir;
    Edje_Part_Collection_Directory *collection_dir;
    Evas_List                      *data;
+   Evas_List                      *styles;
    
    int                             references;
    char                           *compiler;
@@ -170,6 +174,19 @@
    Evas_List                      *collection_cache;
 };
 
+struct _Edje_Style
+{
+   char                           *name;
+   Evas_List                      *tags;
+   Evas_Textblock_Style           *style;
+};
+
+struct _Edje_Style_Tag
+{
+   char                           *key;
+   char                           *value;
+};
+
 /*----------*/
 
 struct _Edje_Data
@@ -390,6 +407,7 @@
    struct {
       char          *text; /* if "" or NULL, then leave text unchanged */
       char          *text_class; /* how to apply/modify the font */
+      char          *style; /* the text style if a tectblock */
       char          *font; /* if a specific font is asked for */
       
       int            size; /* 0 = use user set size */
@@ -528,6 +546,7 @@
    struct {
       char                  *text;
       char                  *font;
+      char                  *style;
       int                    size;
       struct {
         double              in_w, in_h;
@@ -732,6 +751,8 @@
 };
 
 extern Eet_Data_Descriptor *_edje_edd_edje_file;
+extern Eet_Data_Descriptor *_edje_edd_edje_style;
+extern Eet_Data_Descriptor *_edje_edd_edje_style_tag;
 extern Eet_Data_Descriptor *_edje_edd_edje_data;
 extern Eet_Data_Descriptor *_edje_edd_edje_font_directory;
 extern Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -3 -r1.57 -r1.58
--- edje_util.c 31 May 2005 23:02:29 -0000      1.57
+++ edje_util.c 12 Sep 2005 09:43:49 -0000      1.58
@@ -501,7 +501,8 @@
    if ((!ed) || (!part)) return;
    rp = _edje_real_part_get(ed, (char *)part);
    if (!rp) return;
-   if (rp->part->type != EDJE_PART_TYPE_TEXT) return;
+   if ((rp->part->type != EDJE_PART_TYPE_TEXT) &&
+       (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return;
    if ((!rp->text.text) && (!text))
      return;
    if ((rp->text.text) && (text) && 




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to