]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 2 Aug 2012 11:54:05 +0000 (11:54 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 2 Aug 2012 11:54:05 +0000 (11:54 +0000)
MagickCore/geometry.c
MagickCore/geometry.h

index 3f8a41dfc1834407717cde03e3b406dcc956ce3f..2484311d2b57d36a5984f5c63e12ac62dce0dd2a 100644 (file)
@@ -170,6 +170,13 @@ MagickExport MagickStatusType GetGeometry(const char *geometry,ssize_t *x,
         (void) CopyMagickString(p,p+1,MaxTextExtent);
         break;
       }
+      case 'x':
+      case 'X':
+      {
+        flags|=SeparatorValue;
+        p++;
+        break;
+      }
       case '-':
       case '.':
       case ',':
@@ -184,8 +191,6 @@ MagickExport MagickStatusType GetGeometry(const char *geometry,ssize_t *x,
       case '7':
       case '8':
       case '9':
-      case 'x':
-      case 'X':
       case 215:
       {
         p++;
@@ -281,6 +286,19 @@ MagickExport MagickStatusType GetGeometry(const char *geometry,ssize_t *x,
             *y=(-*y);
         }
     }
+  if ((flags & SeparatorValue) == 0)
+    {
+      if (((flags & PercentValue) != 0) && ((flags & WidthValue) == 0))
+        {
+          *width=(*height);
+          flags|=WidthValue;
+        }
+      if (((flags & PercentValue) != 0) && ((flags & HeightValue) == 0))
+        {
+          *height=(*width);
+          flags|=HeightValue;
+        }
+    }
 #if 0
   /* Debugging Geometry */
   (void) fprintf(stderr,"GetGeometry...\n");
@@ -867,6 +885,13 @@ MagickExport MagickStatusType ParseGeometry(const char *geometry,
         (void) CopyMagickString(p,p+1,MaxTextExtent);
         break;
       }
+      case 'x':
+      case 'X':
+      {
+        flags|=SeparatorValue;
+        p++;
+        break;
+      }
       case '-':
       case '+':
       case ',':
@@ -880,8 +905,6 @@ MagickExport MagickStatusType ParseGeometry(const char *geometry,
       case '7':
       case '8':
       case '9':
-      case 'x':
-      case 'X':
       case '/':
       case ':':
       case 215:
@@ -1049,6 +1072,19 @@ MagickExport MagickStatusType ParseGeometry(const char *geometry,
       flags|=SigmaValue;
       flags&=(~XiValue);
     }
+  if ((flags & SeparatorValue) == 0)
+    {
+      if (((flags & PercentValue) != 0) && ((flags & RhoValue) == 0))
+        {
+          geometry_info->rho=geometry_info->sigma;
+          flags|=RhoValue;
+        }
+      if (((flags & PercentValue) != 0) && ((flags & SigmaValue) == 0))
+        {
+          geometry_info->sigma=geometry_info->rho;
+          flags|=SigmaValue;
+        }
+    }
 #if 0
   /* Debugging Geometry */
   (void) fprintf(stderr,"ParseGeometry...\n");
index 46893216730b0745e7410c9eade3e93fdb556f92..2375600509a011b5f6344a2cd86b0de57a62ff2c 100644 (file)
@@ -55,6 +55,7 @@ typedef enum
   CorrelateNormalizeValue = 0x10000, /* '^' see ScaleKernelValue() */
   AreaValue = 0x20000,     /* '@'  resize to area - special use flag */
   DecimalValue = 0x40000,  /* '.'  floating point numbers found */
+  SeparatorValue = 0x80000,  /* 'x'  separator found  */
 #undef AllValues
   AllValues = 0x7fffffff
 } GeometryFlags;