hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=50f0ab8602665edffc588c706a8261cf8f109c5e

commit 50f0ab8602665edffc588c706a8261cf8f109c5e
Author: Hermet Park <[email protected]>
Date:   Mon Jun 6 16:21:52 2016 +0900

    live_edit: work fixed size correctly.
    
    rewrite previous logic to fix potential errors.
---
 src/bin/live_edit.c | 306 ++++++++++++----------------------------------------
 1 file changed, 70 insertions(+), 236 deletions(-)

diff --git a/src/bin/live_edit.c b/src/bin/live_edit.c
index f06d30a..d0476e2 100644
--- a/src/bin/live_edit.c
+++ b/src/bin/live_edit.c
@@ -73,6 +73,7 @@ typedef struct live_editor_s
       float rel1_x, rel1_y;
       float rel2_x, rel2_y;
       float align_x, align_y;
+      int min_w, min_h;
       Evas_Object *ctxpopup;
    } rel_to_info;
 
@@ -352,7 +353,7 @@ live_edit_insert(live_data *ld)
 
    //Calculate relative_to values to fix its size
    //in case of width and height are fixed
-   Evas_Coord min_w = 0;
+   Evas_Coord min_w = ld->rel_to_info.min_w;
 
    if (!ld->rel_to_info.rel1_x_part && !ld->rel_to_info.rel2_x_part &&
        elm_check_state_get(ld->fixed_w_check))
@@ -366,7 +367,7 @@ live_edit_insert(live_data *ld)
 
      }
 
-   Evas_Coord min_h = 0;
+   Evas_Coord min_h = ld->rel_to_info.min_h;
 
    if (!ld->rel_to_info.rel1_y_part && !ld->rel_to_info.rel2_y_part &&
        elm_check_state_get(ld->fixed_h_check))
@@ -379,7 +380,6 @@ live_edit_insert(live_data *ld)
         min_h = (Evas_Coord) (((double) vh) *
                               (ld->rel_info.rel2_y - ld->rel_info.rel1_y));
      }
-
    enventor_object_template_part_insert(base_enventor_get(),
                                         type,
                                         ENVENTOR_TEMPLATE_INSERT_LIVE_EDIT,
@@ -1140,280 +1140,112 @@ relative_to_apply(rel_to_data *rel_data)
    Eina_Bool fixed_h = elm_check_state_get(ld->fixed_h_check);
 
    //Set relative_to properties according to the user input value
-   //Case 1: width and height are relative
-   if (!fixed_w && !fixed_h)
+
+   //x-axis
+   if (rel_data->is_rel_to_x)
      {
-        if (rel_data->is_rel_to_x)
-          {
-             if ((rel_data->rel_x == 0.0) || (rel_data->rel_x == 1.0))
-               {
-                  if ((ld->last_cp == Ctrl_Pt_Rel1) ||
-                      (ld->last_cp == Ctrl_Pt_Rel4) ||
-                      (ld->last_cp == Ctrl_Pt_Left))
-                    {
-                       ld->rel_to_info.rel1_x = rel_data->rel_x;
-                       free(ld->rel_to_info.rel1_x_part);
-                       ld->rel_to_info.rel1_x_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-                  else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
-                           (ld->last_cp == Ctrl_Pt_Rel3) ||
-                           (ld->last_cp == Ctrl_Pt_Right))
-                    {
-                       ld->rel_to_info.rel2_x = rel_data->rel_x;
-                       free(ld->rel_to_info.rel2_x_part);
-                       ld->rel_to_info.rel2_x_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-                }
-          }
-        if (rel_data->is_rel_to_y)
+        //fixed case
+        if (fixed_w)
           {
-             if ((rel_data->rel_y == 0.0) || (rel_data->rel_y == 1.0))
-               {
-                  if ((ld->last_cp == Ctrl_Pt_Rel1) ||
+             if ((ld->last_cp == Ctrl_Pt_Rel1) ||
+                 (ld->last_cp == Ctrl_Pt_Rel4) ||
+                 (ld->last_cp == Ctrl_Pt_Left))
+               ld->rel_to_info.align_x = 0.0;
+             else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
                       (ld->last_cp == Ctrl_Pt_Rel3) ||
-                      (ld->last_cp == Ctrl_Pt_Top))
-                    {
-                       ld->rel_to_info.rel1_y = rel_data->rel_y;
-                       free(ld->rel_to_info.rel1_y_part);
-                       ld->rel_to_info.rel1_y_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-                  else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
-                           (ld->last_cp == Ctrl_Pt_Rel4) ||
-                           (ld->last_cp == Ctrl_Pt_Bottom))
-                    {
-                       ld->rel_to_info.rel2_y = rel_data->rel_y;
-                       free(ld->rel_to_info.rel2_y_part);
-                       ld->rel_to_info.rel2_y_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-               }
+                      (ld->last_cp == Ctrl_Pt_Right))
+               ld->rel_to_info.align_x = 1.0;
+
+             ld->rel_to_info.rel1_x = rel_data->rel_x;
+             ld->rel_to_info.rel2_x = rel_data->rel_x;
+             free(ld->rel_to_info.rel1_x_part);
+             free(ld->rel_to_info.rel2_x_part);
+             ld->rel_to_info.rel1_x_part = strndup(rel_data->part_name,
+                                                   
strlen(rel_data->part_name));
+             ld->rel_to_info.rel2_x_part = strndup(rel_data->part_name,
+                                                   
strlen(rel_data->part_name));
+             ld->rel_to_info.min_w = lw;
           }
-     }
-   //Case 2: width is fixed
-   else if(fixed_w && !fixed_h)
-     {
-        if (rel_data->is_rel_to_x)
+        //non-fixed case
+        else if ((rel_data->rel_x == 0.0) || (rel_data->rel_x == 1.0))
           {
+             ld->rel_to_info.align_x = 0.5;
+             ld->rel_to_info.min_w = 0;
+
              if ((ld->last_cp == Ctrl_Pt_Rel1) ||
                  (ld->last_cp == Ctrl_Pt_Rel4) ||
                  (ld->last_cp == Ctrl_Pt_Left))
                {
-                  ld->rel_to_info.align_x = 0.0;
-                  ld->rel_to_info.align_y = 0.5;
                   ld->rel_to_info.rel1_x = rel_data->rel_x;
-                  ld->rel_to_info.rel2_x = rel_data->rel_x;
                   free(ld->rel_to_info.rel1_x_part);
-                  free(ld->rel_to_info.rel2_x_part);
                   ld->rel_to_info.rel1_x_part =
-                     strndup(rel_data->part_name,
-                             strlen(rel_data->part_name));
-                  ld->rel_to_info.rel2_x_part =
-                     strndup(rel_data->part_name,
-                             strlen(rel_data->part_name));
+                     strndup(rel_data->part_name, strlen(rel_data->part_name));
                }
-             if ((ld->last_cp == Ctrl_Pt_Rel2) ||
-                 (ld->last_cp == Ctrl_Pt_Right))
+             else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
+                      (ld->last_cp == Ctrl_Pt_Rel3) ||
+                      (ld->last_cp == Ctrl_Pt_Right))
                {
-                  ld->rel_to_info.align_x = 1.0;
-                  ld->rel_to_info.align_y = 0.5;
-                  ld->rel_to_info.rel1_x = rel_data->rel_x;
                   ld->rel_to_info.rel2_x = rel_data->rel_x;
-                  free(ld->rel_to_info.rel1_x_part);
                   free(ld->rel_to_info.rel2_x_part);
-                  ld->rel_to_info.rel1_x_part =
-                     strndup(rel_data->part_name, strlen(rel_data->part_name));
                   ld->rel_to_info.rel2_x_part =
                      strndup(rel_data->part_name, strlen(rel_data->part_name));
                }
           }
-        if (rel_data->is_rel_to_y)
+     }
+
+   //y-axis
+   if (rel_data->is_rel_to_y)
+     {
+        //fixed case
+        if (fixed_h)
           {
-             if ((rel_data->rel_y == 0.0) || (rel_data->rel_y == 1.0))
+             if ((ld->last_cp == Ctrl_Pt_Rel1) ||
+                 (ld->last_cp == Ctrl_Pt_Rel3) ||
+                 (ld->last_cp == Ctrl_Pt_Top))
                {
-                  if (ld->last_cp == Ctrl_Pt_Rel1 ||
-                      ld->last_cp == Ctrl_Pt_Rel3 ||
-                      ld->last_cp == Ctrl_Pt_Top)
-                    {
-                       ld->rel_to_info.rel1_y = rel_data->rel_y;
-                       free(ld->rel_to_info.rel1_y_part);
-                       ld->rel_to_info.rel1_y_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-                  else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
-                           (ld->last_cp == Ctrl_Pt_Rel4) ||
-                           (ld->last_cp == Ctrl_Pt_Bottom))
-                    {
-                       ld->rel_to_info.rel2_y = rel_data->rel_y;
-                       free(ld->rel_to_info.rel2_y_part);
-                       ld->rel_to_info.rel2_y_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
+                  ld->rel_to_info.align_y = 0.0;
                }
+             else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
+                      (ld->last_cp == Ctrl_Pt_Rel4) ||
+                      (ld->last_cp == Ctrl_Pt_Bottom))
+               {
+                  ld->rel_to_info.align_y = 1.0;
+               }
+             ld->rel_to_info.rel1_y = rel_data->rel_y;
+             ld->rel_to_info.rel2_y = rel_data->rel_y;
+             free(ld->rel_to_info.rel1_y_part);
+             free(ld->rel_to_info.rel2_y_part);
+             ld->rel_to_info.rel1_y_part = strndup(rel_data->part_name,
+                                                   
strlen(rel_data->part_name));
+             ld->rel_to_info.rel2_y_part = strndup(rel_data->part_name,
+                                                   
strlen(rel_data->part_name));
+             ld->rel_to_info.min_h = lh;
           }
-     }
-   //Case 3: height is fixed
-   else if(!fixed_w && fixed_h)
-     {
-        if (rel_data->is_rel_to_y)
+        //non-fixed case
+        else if ((rel_data->rel_y == 0.0) || (rel_data->rel_y == 1.0))
           {
+             ld->rel_to_info.align_y = 0.5;
+             ld->rel_to_info.min_h = 0;
+
              if ((ld->last_cp == Ctrl_Pt_Rel1) ||
                  (ld->last_cp == Ctrl_Pt_Rel3) ||
                  (ld->last_cp == Ctrl_Pt_Top))
                {
-                  ld->rel_to_info.align_x = 0.5;
-                  ld->rel_to_info.align_y = 0.0;
                   ld->rel_to_info.rel1_y = rel_data->rel_y;
-                  ld->rel_to_info.rel2_y = rel_data->rel_y;
                   free(ld->rel_to_info.rel1_y_part);
-                  free(ld->rel_to_info.rel2_y_part);
                   ld->rel_to_info.rel1_y_part =
                      strndup(rel_data->part_name, strlen(rel_data->part_name));
-                  ld->rel_to_info.rel2_y_part =
-                     strndup(rel_data->part_name, strlen(rel_data->part_name));
                }
-             if ((ld->last_cp == Ctrl_Pt_Rel2) ||
-                 (ld->last_cp == Ctrl_Pt_Rel4) ||
-                 (ld->last_cp == Ctrl_Pt_Bottom))
+             else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
+                      (ld->last_cp == Ctrl_Pt_Rel4) ||
+                      (ld->last_cp == Ctrl_Pt_Bottom))
                {
-                  ld->rel_to_info.align_x = 0.5;
-                  ld->rel_to_info.align_y = 1.0;
-                  ld->rel_to_info.rel1_y = rel_data->rel_y;
                   ld->rel_to_info.rel2_y = rel_data->rel_y;
-                  free(ld->rel_to_info.rel1_y_part);
                   free(ld->rel_to_info.rel2_y_part);
-                  ld->rel_to_info.rel1_y_part =
-                     strndup(rel_data->part_name, strlen(rel_data->part_name));
                   ld->rel_to_info.rel2_y_part =
                      strndup(rel_data->part_name, strlen(rel_data->part_name));
                }
           }
-        if (rel_data->is_rel_to_x)
-          {
-             if ((rel_data->rel_x == 0.0) || (rel_data->rel_x == 1.0))
-               {
-                  if ((ld->last_cp == Ctrl_Pt_Rel1) ||
-                      (ld->last_cp == Ctrl_Pt_Rel4) ||
-                      (ld->last_cp == Ctrl_Pt_Left))
-                    {
-                       ld->rel_to_info.rel1_x = rel_data->rel_x;
-                       free(ld->rel_to_info.rel1_x_part);
-                       ld->rel_to_info.rel1_x_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-                  else if ((ld->last_cp == Ctrl_Pt_Rel2) ||
-                           (ld->last_cp == Ctrl_Pt_Rel3) ||
-                           (ld->last_cp == Ctrl_Pt_Right))
-                    {
-                       ld->rel_to_info.rel2_x = rel_data->rel_x;
-                       free(ld->rel_to_info.rel2_x_part);
-                       ld->rel_to_info.rel2_x_part =
-                          strndup(rel_data->part_name,
-                                  strlen(rel_data->part_name));
-                    }
-               }
-          }
-     }
-   //Case 4: width and height are fixed
-   else if(fixed_w && fixed_h)
-     {
-        double x_add, y_add;
-        x_add = y_add = 0;
-
-       if (ld->last_cp == Ctrl_Pt_Rel1)
-         {
-            ld->rel_to_info.align_x = 0.0;
-            ld->rel_to_info.align_y = 0.0;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Rel2)
-         {
-            x_add = lw;
-            y_add = lh;
-            ld->rel_to_info.align_x = 1.0;
-            ld->rel_to_info.align_y = 1.0;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Rel3)
-         {
-            x_add = lw;
-            ld->rel_to_info.align_x = 1.0;
-            ld->rel_to_info.align_y = 0.0;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Rel4)
-         {
-            y_add = lh;
-            ld->rel_to_info.align_x = 0.0;
-            ld->rel_to_info.align_y = 1.0;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Left)
-         {
-            y_add = (double)lh / 2;
-            ld->rel_to_info.align_x = 0.0;
-            ld->rel_to_info.align_y = 0.5;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Right)
-         {
-            x_add = lw;
-            y_add = (double)lh / 2;
-            ld->rel_to_info.align_x = 1.0;
-            ld->rel_to_info.align_y = 0.5;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Top)
-         {
-            x_add = (double)lw / 2;
-            ld->rel_to_info.align_x = 0.5;
-            ld->rel_to_info.align_y = 0.0;
-         }
-       else if (ld->last_cp == Ctrl_Pt_Bottom)
-         {
-            x_add = (double)lw / 2;
-            y_add = lh;
-            ld->rel_to_info.align_x = 0.5;
-            ld->rel_to_info.align_y = 1.0;
-         }
-
-        free(ld->rel_to_info.rel1_x_part);
-        free(ld->rel_to_info.rel1_y_part);
-        free(ld->rel_to_info.rel2_x_part);
-        free(ld->rel_to_info.rel2_y_part);
-        ld->rel_to_info.rel1_x_part =
-           strndup(rel_data->part_name, strlen(rel_data->part_name));
-        ld->rel_to_info.rel1_y_part =
-           strndup(rel_data->part_name, strlen(rel_data->part_name));
-        ld->rel_to_info.rel2_x_part =
-           strndup(rel_data->part_name, strlen(rel_data->part_name));
-        ld->rel_to_info.rel2_y_part =
-           strndup(rel_data->part_name, strlen(rel_data->part_name));
-
-        //Calculate part relative which is matched to base relative
-        double part_rel_x = (double)fabs(((lx + x_add) - rel_data->pt1.x)) /
-                            (rel_data->pt2.x - rel_data->pt1.x);
-        double part_rel_y = (double)fabs(((ly + y_add) - rel_data->pt1.y)) /
-                            (rel_data->pt2.y - rel_data->pt1.y);
-
-        if (rel_data->is_rel_to_x)
-          {
-             ld->rel_to_info.rel1_x = rel_data->rel_x;
-             ld->rel_to_info.rel2_x = rel_data->rel_x;
-             ld->rel_to_info.rel1_y = part_rel_y;
-             ld->rel_to_info.rel2_y = part_rel_y;
-          }
-
-        if (rel_data->is_rel_to_y)
-          {
-             ld->rel_to_info.rel1_y = rel_data->rel_y;
-             ld->rel_to_info.rel2_y = rel_data->rel_y;
-             ld->rel_to_info.rel1_x = part_rel_x;
-             ld->rel_to_info.rel2_x = part_rel_x;
-          }
      }
 }
 
@@ -2160,6 +1992,8 @@ rel_to_values_reset(live_data *ld)
    ld->rel_to_info.rel1_y_part = NULL;
    ld->rel_to_info.rel2_x_part = NULL;
    ld->rel_to_info.rel2_y_part = NULL;
+   ld->rel_to_info.min_w = 0;
+   ld->rel_to_info.min_h = 0;
 }
 
 static void

-- 


Reply via email to