furrymyad pushed a commit to branch efl-1.16.

http://git.enlightenment.org/core/efl.git/commit/?id=c1e5729ffae0d792a9078fdf50b8264122f5739e

commit c1e5729ffae0d792a9078fdf50b8264122f5739e
Author: Mykyta Biliavskyi <[email protected]>
Date:   Mon May 16 14:25:00 2016 +0300

    Edje_edit: generate state code with inheritance rel block.
    
    Add ability to generate inherited code for relative block.
---
 src/lib/edje/edje_edit.c | 249 +++++++++++++++++++++++++++++++++++------------
 1 file changed, 185 insertions(+), 64 deletions(-)

diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index 6edda8f..e174b71 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -12236,29 +12236,92 @@ _edje_source_with_double_values_append(const char 
*param_name, char val_num, dou
    eina_strbuf_free(string);
 }
 
+#define INHERIT_CHECK(ATTRIBUTE) (pd->ATTRIBUTE != inherit_pd->ATTRIBUTE)
+
+#define INHERIT_CHECK_DOUBLE(ATTRIBUTE_1, ATTRIBUTE_2) ((pd->ATTRIBUTE_1 != 
inherit_pd->ATTRIBUTE_1) || (pd->ATTRIBUTE_2 != inherit_pd->ATTRIBUTE_2))
+
+#define INHERIT_CHECK_STRING(ATTRIBUTE_STR) (strcmp(inherit_pd->ATTRIBUTE_STR, 
pd->ATTRIBUTE_STR))
+
 static void
-_edje_generate_source_state_relative(Edje *ed, Edje_Part_Description_Common 
*pd, Eina_Strbuf *buf)
+_edje_generate_source_state_relative(Edje *ed,
+                                     Edje_Part_Description_Common *pd,
+                                     Edje_Part_Description_Common *inherit_pd,
+                                     Eina_Strbuf *buf)
 {
 
    Eina_Bool ret = EINA_TRUE;
    int attr_amount = 0;
    int indent_space = strlen(I6);
 
-   attr_amount += ((pd->rel1.relative_x == 0) && (pd->rel1.relative_y == 0)) ? 
0 : 1;
-   attr_amount += ((pd->rel1.offset_x == 0) && (pd->rel1.offset_y == 0)) ? 0 : 
1;
-   if ((pd->rel1.id_x != -1) || (pd->rel1.id_y != -1))
+   Eina_Bool relative = EINA_FALSE;
+   Eina_Bool offset = EINA_FALSE;
+   Eina_Bool rel_to = EINA_FALSE;
+   Eina_Bool rel_to_x = EINA_FALSE;
+   Eina_Bool rel_to_y = EINA_FALSE;
+
+   if (inherit_pd)
      {
-        if ((pd->rel1.id_x == -1 && pd->rel1.id_y != -1) ||
-            (pd->rel1.id_x != -1 && pd->rel1.id_y == -1) ||
-            (pd->rel1.id_x == pd->rel1.id_y))
-          {
-             attr_amount++;
-          }
-        else
+         relative = !INHERIT_CHECK_DOUBLE(rel1.relative_x, rel1.relative_y) ? 
EINA_FALSE : EINA_TRUE;
+         offset = !INHERIT_CHECK_DOUBLE(rel1.offset_x, rel1.offset_y) ? 
EINA_FALSE : EINA_TRUE;
+         if ((pd->rel1.id_x != inherit_pd->rel1.id_x) || (pd->rel1.id_y != 
inherit_pd->rel1.id_y))
+           {
+              if (pd->rel1.id_x == inherit_pd->rel1.id_x && pd->rel1.id_y != 
inherit_pd->rel1.id_y)
+                {
+                   rel_to = 1;
+                   rel_to_y = 1;
+                }
+              else if (pd->rel1.id_x != inherit_pd->rel1.id_x && pd->rel1.id_y 
== inherit_pd->rel1.id_y)
+                {
+                   rel_to = 1;
+                   rel_to_x = 1;
+                }
+              else if (pd->rel1.id_x == pd->rel1.id_y && pd->rel1.id_x != -1)
+                {
+                   rel_to = 1;
+                   rel_to_x = EINA_FALSE;
+                   rel_to_y = EINA_FALSE;
+                }
+              else
+                {
+                   rel_to = 2;
+                   rel_to_x = 1;
+                   rel_to_y = 1;
+                }
+           }
+
+     }
+   else
+     {
+        relative = ((pd->rel1.relative_x == 0) && (pd->rel1.relative_y == 0)) 
? EINA_FALSE : EINA_TRUE;
+        offset = ((pd->rel1.offset_x == 0) && (pd->rel1.offset_y == 0)) ? 
EINA_FALSE : EINA_TRUE;
+        if ((pd->rel1.id_x != -1) || (pd->rel1.id_y != -1))
           {
-             attr_amount += 2;
+             if (pd->rel1.id_x == -1 && pd->rel1.id_y != -1)
+               {
+                  rel_to = 1;
+                  rel_to_y = 1;
+               }
+             else if (pd->rel1.id_x != -1 && pd->rel1.id_y == -1)
+               {
+                  rel_to = 1;
+                  rel_to_x = 1;
+               }
+             else if (pd->rel1.id_x == pd->rel1.id_y && pd->rel1.id_x != -1)
+               {
+                  rel_to = 1;
+                  rel_to_x = EINA_FALSE;
+                  rel_to_y = EINA_FALSE;
+               }
+             else
+               {
+                  rel_to = 2;
+                  rel_to_x = 1;
+                  rel_to_y = 1;
+               }
           }
-     }
+    }
+
+   attr_amount = relative + offset + rel_to;
 
    indent_space = strlen(I6);
    if (attr_amount == 1)
@@ -12272,64 +12335,119 @@ _edje_generate_source_state_relative(Edje *ed, 
Edje_Part_Description_Common *pd,
         else
           BUF_APPEND(I5 "rel1.");
 
-        if (pd->rel1.relative_x != 0 || pd->rel1.relative_y != 0)
+        if (relative)
           {
-             char relative[strlen("relative") + indent_space + 1];
-             snprintf(relative, strlen("relative") + indent_space + 1,
+             char relative_str[strlen("relative") + indent_space + 1];
+             snprintf(relative_str, strlen("relative") + indent_space + 1,
                       "%*srelative", indent_space, "");
-             _edje_source_with_double_values_append(relative, 2,
+             _edje_source_with_double_values_append(relative_str, 2,
                                                   
TO_DOUBLE(pd->rel1.relative_x),
                                                   
TO_DOUBLE(pd->rel1.relative_y),
                                                   buf, &ret);
           }
 
-        if (pd->rel1.offset_x != 0 || pd->rel1.offset_y != 0)
+        if (offset)
           BUF_APPENDF("%*soffset: %d %d;\n", indent_space, "",
                       pd->rel1.offset_x, pd->rel1.offset_y);
 
-        if (pd->rel1.id_x != -1 && pd->rel1.id_x == pd->rel1.id_y)
+        if (rel_to != 0)
           {
-            BUF_APPENDF("%*sto: \"%s\";\n", indent_space, "",
-                        ed->table_parts[pd->rel1.id_x]->part->name);
-          }
-        else
-          {
-             if (pd->rel1.id_x != -1)
-               BUF_APPENDF("%*sto_x: \"%s\";\n", indent_space, "",
-                           ed->table_parts[pd->rel1.id_x]->part->name);
+            if (rel_to_x == 0 && rel_to_y == 0)
+              {
+                 BUF_APPENDF("%*sto: \"%s\";\n", indent_space, "",
+                             pd->rel1.id_x == -1 ? "" :  
ed->table_parts[pd->rel1.id_x]->part->name);
+              }
+            if (rel_to_x == 1)
+              {
+                 BUF_APPENDF("%*sto_x: \"%s\";\n", indent_space, "",
+                            pd->rel1.id_x == -1 ? "" 
:ed->table_parts[pd->rel1.id_x]->part->name);
+              }
 
-             if (pd->rel1.id_y != -1)
-               BUF_APPENDF("%*sto_y: \"%s\";\n", indent_space, "",
-                           ed->table_parts[pd->rel1.id_y]->part->name);
+            if (rel_to_y == 1)
+              {
+                BUF_APPENDF("%*sto_y: \"%s\";\n", indent_space, "",
+                           pd->rel1.id_y == -1 ? "" : 
ed->table_parts[pd->rel1.id_y]->part->name);
+             }
           }
-
         if (attr_amount > 1)
            BUF_APPEND(I5 "}\n");
      }
 
-
+   //Rel 2
    attr_amount = 0;
-   attr_amount += ((pd->rel2.relative_x == 1) && (pd->rel2.relative_y == 1)) ? 
0 : 1;
-   attr_amount += ((pd->rel2.offset_x == -1) && (pd->rel2.offset_y == -1)) ? 0 
: 1;
-   if ((pd->rel2.id_x != -1) || (pd->rel2.id_y != -1))
+   relative = EINA_FALSE;
+   offset = EINA_FALSE;
+   rel_to = EINA_FALSE;
+   rel_to_x = EINA_FALSE;
+   rel_to_y = EINA_FALSE;
+   if (inherit_pd)
      {
-        if ((pd->rel2.id_x == -1 && pd->rel2.id_y != -1) ||
-            (pd->rel2.id_x != -1 && pd->rel2.id_y == -1) ||
-            (pd->rel2.id_x == pd->rel2.id_y))
-          {
-             attr_amount++;
-          }
-        else
+         relative = !INHERIT_CHECK_DOUBLE(rel2.relative_x, rel2.relative_y) ? 
EINA_FALSE : EINA_TRUE;
+         offset = !INHERIT_CHECK_DOUBLE(rel2.offset_x, rel2.offset_y) ? 
EINA_FALSE : EINA_TRUE;
+         if ((pd->rel2.id_x != inherit_pd->rel2.id_x) || (pd->rel2.id_y != 
inherit_pd->rel2.id_y))
+           {
+              if (pd->rel2.id_x == inherit_pd->rel2.id_x && pd->rel2.id_y != 
inherit_pd->rel2.id_y)
+                {
+                   rel_to = 1;
+                   rel_to_y = 1;
+                }
+              else if (pd->rel2.id_x != inherit_pd->rel2.id_x && pd->rel2.id_y 
== inherit_pd->rel2.id_y)
+                {
+                   rel_to = 1;
+                   rel_to_x = 1;
+                }
+              else if (pd->rel2.id_x == pd->rel2.id_y && pd->rel2.id_x != -1)
+                {
+                   rel_to = 1;
+                   rel_to_x = EINA_FALSE;
+                   rel_to_y = EINA_FALSE;
+                }
+              else
+                {
+                   rel_to = 2;
+                   rel_to_x = 1;
+                   rel_to_y = 1;
+                }
+           }
+
+     }
+   else
+     {
+        relative = ((pd->rel2.relative_x == 1) && (pd->rel2.relative_y == 1)) 
? EINA_FALSE : EINA_TRUE;
+        offset = ((pd->rel2.offset_x == -1) && (pd->rel2.offset_y == -1)) ? 
EINA_FALSE : EINA_TRUE;
+        if ((pd->rel2.id_x != -1) || (pd->rel2.id_y != -1))
           {
-             attr_amount += 2;
+             if (pd->rel2.id_x == -1 && pd->rel2.id_y != -1)
+               {
+                  rel_to = 1;
+                  rel_to_y = 1;
+               }
+             else if (pd->rel2.id_x != -1 && pd->rel2.id_y == -1)
+               {
+                  rel_to = 1;
+                  rel_to_x = 1;
+               }
+             else if (pd->rel2.id_x == pd->rel2.id_y && pd->rel2.id_x != -1)
+               {
+                  rel_to = 1;
+                  rel_to_x = EINA_FALSE;
+                  rel_to_y = EINA_FALSE;
+               }
+             else
+               {
+                  rel_to = 2;
+                  rel_to_x = 1;
+                  rel_to_y = 1;
+               }
           }
-     }
+    }
+
+   attr_amount = relative + offset + rel_to;
 
    indent_space = strlen(I6);
    if (attr_amount == 1)
      indent_space = 0;
 
-   //Rel2
    if (attr_amount)
      {
         if (attr_amount > 1)
@@ -12337,37 +12455,40 @@ _edje_generate_source_state_relative(Edje *ed, 
Edje_Part_Description_Common *pd,
         else
           BUF_APPEND(I5 "rel2.");
 
-        if (pd->rel2.relative_x != 1 || pd->rel2.relative_y != 1)
+        if (relative)
           {
-             char relative[strlen("relative") + indent_space + 1];
-             snprintf(relative, strlen("relative") + indent_space + 1,
+             char relative_str[strlen("relative") + indent_space + 1];
+             snprintf(relative_str, strlen("relative") + indent_space + 1,
                       "%*srelative", indent_space, "");
-             _edje_source_with_double_values_append(relative, 2,
+             _edje_source_with_double_values_append(relative_str, 2,
                                                   
TO_DOUBLE(pd->rel2.relative_x),
                                                   
TO_DOUBLE(pd->rel2.relative_y),
                                                   buf, &ret);
           }
 
-        if (pd->rel2.offset_x != -1 || pd->rel2.offset_y != -1)
+        if (offset)
           BUF_APPENDF("%*soffset: %d %d;\n", indent_space, "",
                       pd->rel2.offset_x, pd->rel2.offset_y);
 
-        if (pd->rel2.id_x != -1 && pd->rel2.id_x == pd->rel2.id_y)
+        if (rel_to != 0)
           {
-            BUF_APPENDF("%*sto: \"%s\";\n", indent_space, "",
-                        ed->table_parts[pd->rel2.id_x]->part->name);
-          }
-        else
-          {
-             if (pd->rel2.id_x != -1)
-               BUF_APPENDF("%*sto_x: \"%s\";\n", indent_space, "",
-                           ed->table_parts[pd->rel2.id_x]->part->name);
+            if (rel_to_x == 0 && rel_to_y == 0 )
+              {
+                 BUF_APPENDF("%*sto: \"%s\";\n", indent_space, "",
+                              pd->rel2.id_x == -1 ? "" : 
ed->table_parts[pd->rel2.id_x]->part->name);
+              }
+            if (rel_to_x == 1)
+              {
+                 BUF_APPENDF("%*sto_x: \"%s\";\n", indent_space, "",
+                            pd->rel2.id_x == -1 ? "" : 
ed->table_parts[pd->rel2.id_x]->part->name);
+              }
 
-             if (pd->rel2.id_y != -1)
-               BUF_APPENDF("%*sto_y: \"%s\";\n", indent_space, "",
-                           ed->table_parts[pd->rel2.id_y]->part->name);
+            if (rel_to_y == 1)
+              {
+                BUF_APPENDF("%*sto_y: \"%s\";\n", indent_space, "",
+                           pd->rel2.id_y == -1 ? "" : 
ed->table_parts[pd->rel2.id_y]->part->name);
+             }
           }
-
         if (attr_amount > 1)
            BUF_APPEND(I5 "}\n");
      }
@@ -13519,7 +13640,7 @@ _edje_generate_source_of_state(Evas_Object *obj, const 
char *part, const char *s
      }
 
    //Relative block
-    _edje_generate_source_state_relative(ed, pd, buf);
+   _edje_generate_source_state_relative(ed, pd, inherit_pd, buf);
 
    if (zplane || focal)
      {

-- 


Reply via email to