Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Edje.h edje_calc.c edje_private.h edje_util.c 


Log Message:


more external aspect support - all working nicely now

===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -3 -r1.45 -r1.46
--- Edje.h      23 Jul 2006 13:50:02 -0000      1.45
+++ Edje.h      23 Jul 2006 19:33:27 -0000      1.46
@@ -47,6 +47,16 @@
 };
 typedef enum _Edje_Message_Type Edje_Message_Type;
 
+enum _Edje_Aspect_Control
+{
+   EDJE_ASPECT_CONTROL_NONE = 0,
+   EDJE_ASPECT_CONTROL_NEITHER = 1,
+   EDJE_ASPECT_CONTROL_HORIZONTAL = 2,
+   EDJE_ASPECT_CONTROL_VERTICAL = 3,
+   EDJE_ASPECT_CONTROL_BOTH = 4
+};
+typedef enum _Edje_Aspect_Control Edje_Aspect_Control;
+
 typedef struct _Edje_Message_String           Edje_Message_String;
 typedef struct _Edje_Message_Int              Edje_Message_Int;
 typedef struct _Edje_Message_Float            Edje_Message_Float;
@@ -175,7 +185,7 @@
    EAPI void         edje_text_class_set(const char *text_class, const char 
*font, Evas_Font_Size size);
    EAPI void         edje_extern_object_min_size_set (Evas_Object *obj, 
Evas_Coord minw, Evas_Coord minh);
    EAPI void         edje_extern_object_max_size_set (Evas_Object *obj, 
Evas_Coord maxw, Evas_Coord maxh);
-   EAPI void         edje_extern_object_aspect_set(Evas_Object *obj, 
Evas_Coord aw, Evas_Coord ah);
+   EAPI void         edje_extern_object_aspect_set(Evas_Object *obj, 
Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah);
        
    /* edje_smart.c */
    EAPI Evas_Object *edje_object_add                 (Evas *evas);
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -3 -r1.82 -r1.83
--- edje_calc.c 23 Jul 2006 13:50:02 -0000      1.82
+++ edje_calc.c 23 Jul 2006 19:33:27 -0000      1.83
@@ -251,6 +251,22 @@
 
    flags = FLAG_XY;
    
+//   if (flags & FLAG_X)
+     {
+       minw = desc->min.w;
+       if (ep->swallow_params.min.w > desc->min.w) minw = 
ep->swallow_params.min.w;
+       maxw = desc->max.w;
+       if ((ep->swallow_params.max.w >= 0) &&
+           (ep->swallow_params.max.w < maxw)) maxw = ep->swallow_params.max.w;
+     }
+//   if (flags & FLAG_Y)
+     {
+       minh = desc->min.h;
+       if (ep->swallow_params.min.h > desc->min.h) minh = 
ep->swallow_params.min.h;
+       maxh = desc->max.h;
+       if ((ep->swallow_params.max.h >= 0) &&
+           (ep->swallow_params.max.h < maxh)) maxh = ep->swallow_params.max.h;
+     }
    /* relative coords of top left & bottom right */
    if (flags & FLAG_X)
      {
@@ -291,6 +307,7 @@
    if ((params->h > 0) && 
        (((flags | ep->calculated) & FLAG_XY) == FLAG_XY))
      {
+       int apref;
        double aspect, amax, amin;
        double new_w, new_h, want_x, want_y, want_w, want_h;
    
@@ -300,7 +317,14 @@
        want_y = params->y;
        want_h = new_h = params->h;
        
+       if ((maxw >= 0) && (new_w > maxw)) new_w = maxw;
+       if (new_w < minw) new_w = minw;
+       
+       if ((maxh >= 0) && (new_h > maxh)) new_h = maxh;
+       if (new_h < minh) new_h = minh;
+       
        aspect = (double)params->w / (double)params->h;
+       apref = desc->aspect.prefer;
        amax = desc->aspect.max;
        amin = desc->aspect.min;
        if ((ep->swallow_params.aspect.w > 0) &&
@@ -308,8 +332,27 @@
          amin = amax = 
          (double)ep->swallow_params.aspect.w /
          (double)ep->swallow_params.aspect.h;
-         
-       if (desc->aspect.prefer == EDJE_ASPECT_PREFER_NONE) /* keep both 
dimensions in check */
+       if (ep->swallow_params.aspect.mode > EDJE_ASPECT_CONTROL_NONE)
+         {
+            switch (ep->swallow_params.aspect.mode)
+              {
+               case EDJE_ASPECT_CONTROL_NEITHER:
+                 apref = EDJE_ASPECT_PREFER_NONE;
+                 break;
+               case EDJE_ASPECT_CONTROL_HORIZONTAL:
+                 apref = EDJE_ASPECT_PREFER_HORIZONTAL;
+                 break;
+               case EDJE_ASPECT_CONTROL_VERTICAL:
+                 apref = EDJE_ASPECT_PREFER_VERTICAL;
+                 break;
+               case EDJE_ASPECT_CONTROL_BOTH:
+                 apref = EDJE_ASPECT_PREFER_BOTH;
+                 break;
+               default:
+                 break;
+              }
+         }
+       if (apref == EDJE_ASPECT_PREFER_NONE) /* keep both dimensions in check 
*/
          {
             /* adjust for max aspect (width / height) */
             if ((amax > 0.0) && (aspect > amax))
@@ -324,7 +367,7 @@
                  new_w = (params->h * amin);
               }
          } /* prefer vertical size as determiner */
-       else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_VERTICAL) /* keep 
both dimensions in check */
+       else if (apref == EDJE_ASPECT_PREFER_VERTICAL) /* keep both dimensions 
in check */
          {
             /* adjust for max aspect (width / height) */
             if ((amax > 0.0) && (aspect > amax))
@@ -333,7 +376,7 @@
             if ((amin > 0.0) && (aspect < amin))
               new_w = (params->h * amin);
          } /* prefer horizontal size as determiner */
-       else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_HORIZONTAL) /* keep 
both dimensions in check */
+       else if (apref == EDJE_ASPECT_PREFER_HORIZONTAL) /* keep both 
dimensions in check */
          {
             /* adjust for max aspect (width / height) */
             if ((amax > 0.0) && (aspect > amax))
@@ -342,7 +385,7 @@
             if ((amin > 0.0) && (aspect < amin))
               new_h = (params->w / amin);
          }
-       else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_BOTH) /* keep both 
dimensions in check */
+       else if (apref == EDJE_ASPECT_PREFER_BOTH) /* keep both dimensions in 
check */
          {
             /* adjust for max aspect (width / height) */
             if ((amax > 0.0) && (aspect > amax))
@@ -358,7 +401,7 @@
               }
          }
        /* do real adjustment */
-       if (desc->aspect.prefer == EDJE_ASPECT_PREFER_BOTH)
+       if (apref == EDJE_ASPECT_PREFER_BOTH)
          {
             /* fix h and vary w */
             if (new_w > params->w)
@@ -375,7 +418,7 @@
                    params->h = new_h;
                  else if (params->h > new_h)
                    params->h = new_h;
-                 if (desc->aspect.prefer == EDJE_ASPECT_PREFER_VERTICAL)
+                 if (apref == EDJE_ASPECT_PREFER_VERTICAL)
                    params->w = new_w;
               }
             else
@@ -384,7 +427,7 @@
                    params->w = new_w;
                  else if (params->w > new_w)
                    params->w = new_w;
-                 if (desc->aspect.prefer == EDJE_ASPECT_PREFER_HORIZONTAL)
+                 if (apref == EDJE_ASPECT_PREFER_HORIZONTAL)
                    params->h = new_h;
               }
          }
@@ -427,16 +470,6 @@
               }
          }
      }
-   if (flags & FLAG_X)
-     {
-       minw = desc->min.w;
-       if (ep->swallow_params.min.w > desc->min.w) minw = 
ep->swallow_params.min.w;
-     }
-   if (flags & FLAG_Y)
-     {
-       minh = desc->min.h;
-       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_TEXTBLOCK))
      {
@@ -709,18 +742,6 @@
                  params->h = minh;
               }
          }
-     }
-   if (flags & FLAG_X)
-     {
-       maxw = desc->max.w;
-       if ((ep->swallow_params.max.w >= 0) &&
-           (ep->swallow_params.max.w < maxw)) maxw = ep->swallow_params.max.w;
-     }
-   if (flags & FLAG_Y)
-     {
-       maxh = desc->max.h;
-       if ((ep->swallow_params.max.h >= 0) &&
-           (ep->swallow_params.max.h < maxh)) maxh = ep->swallow_params.max.h;
      }
    /* adjust for max size */
    if (flags & FLAG_X)
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -3 -r1.111 -r1.112
--- edje_private.h      23 Jul 2006 13:50:02 -0000      1.111
+++ edje_private.h      23 Jul 2006 19:33:27 -0000      1.112
@@ -582,6 +582,7 @@
         int                 w, h;
       } min, max;
       struct {
+        unsigned char       mode;
         int                 w, h;
       } aspect;
    } swallow_params;
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -3 -r1.80 -r1.81
--- edje_util.c 23 Jul 2006 13:50:02 -0000      1.80
+++ edje_util.c 23 Jul 2006 19:33:27 -0000      1.81
@@ -744,20 +744,22 @@
        rp->swallow_params.max.h = h;
      }
      {
-       int w1, h1, w2, h2, aw, ah;
+       int w1, h1, w2, h2, am, aw, ah;
        
        w1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minw");
        h1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minh");
        w2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxw");
        h2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxh");
+       am = (int)evas_object_data_get(obj_swallow, "\377 edje.aspm");
        aw = (int)evas_object_data_get(obj_swallow, "\377 edje.aspw");
        ah = (int)evas_object_data_get(obj_swallow, "\377 edje.asph");
        rp->swallow_params.min.w = w1;
        rp->swallow_params.min.h = h1;
        if (w2 > 0) rp->swallow_params.max.w = w2;
        if (h2 > 0) rp->swallow_params.max.h = h2;
-       if (aw > 0) rp->swallow_params.aspect.w = aw;
-       if (ah > 0) rp->swallow_params.aspect.h = ah;
+       rp->swallow_params.aspect.mode = am;
+       rp->swallow_params.aspect.w = aw;
+       rp->swallow_params.aspect.h = ah;
      }
    ed->dirty = 1;
    _edje_recalc(ed);   
@@ -815,6 +817,7 @@
 
 /** Set the object aspect size
  * @param obj A valid Evas_Object handle
+ * @param aspect The aspect control axes
  * @param aw The aspect radio width
  * @param ah The aspect ratio height
  *
@@ -824,17 +827,23 @@
  * scale of both aspwct width and height.
  */
 EAPI void
-edje_extern_object_aspect_set(Evas_Object *obj, Evas_Coord aw, Evas_Coord ah)
+edje_extern_object_aspect_set(Evas_Object *obj, Edje_Aspect_Control aspect, 
Evas_Coord aw, Evas_Coord ah)
 {
    int mw, mh;
-   
+   int mc;
+
+   mc = aspect;
    mw = aw;
    mh = ah;
-   if (mw >= 0)
+   if (mc > 0)
+     evas_object_data_set(obj, "\377 edje.aspm", (void *)mc);
+   else
+     evas_object_data_del(obj, "\377 edje.aspm"); 
+   if (mw > 0)
      evas_object_data_set(obj, "\377 edje.aspw", (void *)mw);
    else
      evas_object_data_del(obj, "\377 edje.aspw"); 
-   if (mh >= 0)
+   if (mh > 0)
      evas_object_data_set(obj, "\377 edje.asph", (void *)mh);
    else
      evas_object_data_del(obj, "\377 edje.asph");



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to