Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Edje_Edit.h edje_calc.c edje_data.c 


Log Message:


just when you thoguht all was stable in edje land... i added a tag and field!

never fear. its backwards compatible. this lets you choose how aspect is
calculated and confined :)

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje_Edit.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- Edje_Edit.h 27 Apr 2004 08:16:12 -0000      1.9
+++ Edje_Edit.h 24 May 2004 07:58:37 -0000      1.10
@@ -128,6 +128,10 @@
 #define EDJE_VAR_FLOAT  2
 #define EDJE_VAR_STRING 3
 
+#define EDJE_ASPECT_PREFER_NONE       0
+#define EDJE_ASPECT_PREFER_VERTICAL   1
+#define EDJE_ASPECT_PREFER_HORIZONTAL 2
+
 #define EDJE_VAR_MAGIC_BASE 0x12fe84ba
 
 /*----------*/
@@ -304,6 +308,7 @@
 
    struct {
       double         min, max; /* aspect = w/h */
+      unsigned char  prefer; /* NEITHER = 0, VERTICAL = 1, HORIZONTAL = 2 */
    } aspect;
    
    struct {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- edje_calc.c 27 Apr 2004 08:16:13 -0000      1.28
+++ edje_calc.c 24 May 2004 07:58:37 -0000      1.29
@@ -316,6 +316,7 @@
      params->y + 1;
    
    /* aspect */
+#if 0   
    if (params->h > 0)
      {
        double aspect;
@@ -368,7 +369,122 @@
               }
          }
      }
-
+#else
+   if (params->h > 0)
+     {
+       double aspect;
+       double new_w, new_h;
+   
+       new_h = params->h;
+       new_w = params->w;
+       aspect = (double)params->w / (double)params->h;
+       if (desc->aspect.prefer == EDJE_ASPECT_PREFER_NONE) /* keep both dimensions in 
check */
+         {
+            /* adjust for max aspect (width / height) */
+            if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
+              {
+                 new_h = (params->w / desc->aspect.max);
+                 new_w = (params->h * desc->aspect.max);
+              }
+            printf("[a] %s [%3.3f -> %3.3f] (%ix%i) -> (%3.3fx%3.3f)\n", 
+                   ep->part->name, 
+                   desc->aspect.min, desc->aspect.max,
+                   params->w, params->h,
+                   new_w, new_h);
+            /* adjust for min aspect (width / height) */
+            if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
+              {
+                 new_h = (params->w / desc->aspect.min);
+                 new_w = (params->h * desc->aspect.min);
+              }
+            printf("  [b] %s [%3.3f -> %3.3f] (%ix%i) -> (%3.3fx%3.3f)\n", 
+                   ep->part->name, 
+                   desc->aspect.min, desc->aspect.max,
+                   params->w, params->h,
+                   new_w, new_h);
+         } /* prefer vertical size as determiner */
+       else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_VERTICAL) /* keep both 
dimensions in check */
+         {
+            /* adjust for max aspect (width / height) */
+            if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
+              {
+                 new_w = (params->h * desc->aspect.max);
+              }
+            printf("[a] %s [%3.3f -> %3.3f] (%ix%i) -> (%3.3fx%3.3f)\n", 
+                   ep->part->name, 
+                   desc->aspect.min, desc->aspect.max,
+                   params->w, params->h,
+                   new_w, new_h);
+            /* adjust for min aspect (width / height) */
+            if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
+              {
+                 new_w = (params->h * desc->aspect.min);
+              }
+            printf("  [b] %s [%3.3f -> %3.3f] (%ix%i) -> (%3.3fx%3.3f)\n", 
+                   ep->part->name, 
+                   desc->aspect.min, desc->aspect.max,
+                   params->w, params->h,
+                   new_w, new_h);
+         } /* prefer horizontal size as determiner */
+       else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_HORIZONTAL) /* keep both 
dimensions in check */
+         {
+            /* adjust for max aspect (width / height) */
+            if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
+              {
+                 new_h = (params->w / desc->aspect.max);
+              }
+            printf("[a] %s [%3.3f -> %3.3f] (%ix%i) -> (%3.3fx%3.3f)\n", 
+                   ep->part->name, 
+                   desc->aspect.min, desc->aspect.max,
+                   params->w, params->h,
+                   new_w, new_h);
+            /* adjust for min aspect (width / height) */
+            if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
+              {
+                 new_h = (params->w / desc->aspect.min);
+              }
+            printf("  [b] %s [%3.3f -> %3.3f] (%ix%i) -> (%3.3fx%3.3f)\n", 
+                   ep->part->name, 
+                   desc->aspect.min, desc->aspect.max,
+                   params->w, params->h,
+                   new_w, new_h);
+         }
+       /* do real adjustment */
+       if ((params->h - new_h) > (params->w - new_w))
+         {
+            if (params->h < new_h)
+              {
+                 params->y = params->y +
+                   ((params->h - new_h) * (1.0 - desc->align.y));
+                 params->h = new_h;
+              }
+            else if (params->h > new_h)
+              {
+                 params->y = params->y +
+                   ((params->h - new_h) * desc->align.y);
+                 params->h = new_h;
+              }
+            params->w = new_w;
+         }
+       else
+         {
+            if (params->w < new_w)
+              {
+                 params->x = params->x +
+                   ((params->w - new_w) * (1.0 - desc->align.x));
+                 params->w = new_w;
+              }
+            else if (params->w > new_w)
+              {
+                 params->x = params->x +
+                   ((params->w - new_w) * desc->align.x);
+                 params->w = new_w;
+              }
+            params->h = new_h;
+         }
+     }
+#endif
+   
    /* size step */
    if (desc->step.x > 0)
      {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- edje_data.c 8 Mar 2004 02:43:48 -0000       1.16
+++ edje_data.c 24 May 2004 07:58:37 -0000      1.17
@@ -146,6 +146,7 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "step.y", step.y, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "aspect.min", aspect.min, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "aspect.max", aspect.max, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "aspect.prefer", aspect.prefer, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "rel1.relative_x", rel1.relative_x, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "rel1.relative_y", rel1.relative_y, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "rel1.offset_x", rel1.offset_x, EET_T_INT);




-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to