]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 7 Jun 2015 13:41:56 +0000 (13:41 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 7 Jun 2015 13:41:56 +0000 (13:41 +0000)
MagickCore/draw.c

index 98154f703c51e1209b8b292d97969dde83a7fa75..e6b6de52bc76c0ca55ace668486b33b6005c58f2 100644 (file)
@@ -253,8 +253,10 @@ MagickExport DrawInfo *CloneDrawInfo(const ImageInfo *image_info,
   if (draw_info == (DrawInfo *) NULL)
     return(clone_info);
   exception=AcquireExceptionInfo();
-  (void) CloneString(&clone_info->primitive,draw_info->primitive);
-  (void) CloneString(&clone_info->geometry,draw_info->geometry);
+  if (clone_info->primitive != (char *) NULL)
+    (void) CloneString(&clone_info->primitive,draw_info->primitive);
+  if (draw_info->geometry != (char *) NULL)
+    (void) CloneString(&clone_info->geometry,draw_info->geometry);
   clone_info->viewbox=draw_info->viewbox;
   clone_info->affine=draw_info->affine;
   clone_info->gravity=draw_info->gravity;
@@ -276,24 +278,31 @@ MagickExport DrawInfo *CloneDrawInfo(const ImageInfo *image_info,
   clone_info->dash_offset=draw_info->dash_offset;
   clone_info->decorate=draw_info->decorate;
   clone_info->compose=draw_info->compose;
-  (void) CloneString(&clone_info->text,draw_info->text);
-  (void) CloneString(&clone_info->font,draw_info->font);
-  (void) CloneString(&clone_info->metrics,draw_info->metrics);
-  (void) CloneString(&clone_info->family,draw_info->family);
+  if (draw_info->text != (char *) NULL)
+    (void) CloneString(&clone_info->text,draw_info->text);
+  if (draw_info->font != (char *) NULL)
+    (void) CloneString(&clone_info->font,draw_info->font);
+  if (draw_info->metrics != (char *) NULL)
+    (void) CloneString(&clone_info->metrics,draw_info->metrics);
+  if (draw_info->family != (char *) NULL)
+    (void) CloneString(&clone_info->family,draw_info->family);
   clone_info->style=draw_info->style;
   clone_info->stretch=draw_info->stretch;
   clone_info->weight=draw_info->weight;
-  (void) CloneString(&clone_info->encoding,draw_info->encoding);
+  if (draw_info->encoding != (char *) NULL)
+    (void) CloneString(&clone_info->encoding,draw_info->encoding);
   clone_info->pointsize=draw_info->pointsize;
   clone_info->kerning=draw_info->kerning;
   clone_info->interline_spacing=draw_info->interline_spacing;
   clone_info->interword_spacing=draw_info->interword_spacing;
   clone_info->direction=draw_info->direction;
-  (void) CloneString(&clone_info->density,draw_info->density);
+  if (draw_info->density != (char *) NULL)
+    (void) CloneString(&clone_info->density,draw_info->density);
   clone_info->align=draw_info->align;
   clone_info->undercolor=draw_info->undercolor;
   clone_info->border_color=draw_info->border_color;
-  (void) CloneString(&clone_info->server_name,draw_info->server_name);
+  if (draw_info->server_name != (char *) NULL)
+    (void) CloneString(&clone_info->server_name,draw_info->server_name);
   if (draw_info->dash_pattern != (double *) NULL)
     {
       register ssize_t
@@ -324,7 +333,8 @@ MagickExport DrawInfo *CloneDrawInfo(const ImageInfo *image_info,
         draw_info->gradient.stops,(size_t) number_stops*
         sizeof(*clone_info->gradient.stops));
     }
-  (void) CloneString(&clone_info->clip_mask,draw_info->clip_mask);
+  if (draw_info->clip_mask != (char *) NULL)
+    (void) CloneString(&clone_info->clip_mask,draw_info->clip_mask);
   clone_info->bounds=draw_info->bounds;
   clone_info->clip_units=draw_info->clip_units;
   clone_info->render=draw_info->render;
@@ -4770,12 +4780,16 @@ MagickExport void GetDrawInfo(const ImageInfo *image_info,DrawInfo *draw_info)
   ExceptionInfo
     *exception;
 
+  ImageInfo
+    *clone_info;
+
   /*
     Initialize draw attributes.
   */
   (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
   assert(draw_info != (DrawInfo *) NULL);
   (void) ResetMagickMemory(draw_info,0,sizeof(*draw_info));
+  clone_info=CloneImageInfo(image_info);
   GetAffineMatrix(&draw_info->affine);
   exception=AcquireExceptionInfo();
   (void) QueryColorCompliance("#000F",AllCompliance,&draw_info->fill,
@@ -4794,59 +4808,57 @@ MagickExport void GetDrawInfo(const ImageInfo *image_info,DrawInfo *draw_info)
   draw_info->compose=OverCompositeOp;
   draw_info->render=MagickTrue;
   draw_info->debug=IsEventLogging();
-  if (image_info != (ImageInfo *) NULL)
-    {
-      draw_info->stroke_antialias=image_info->antialias;
-      if (image_info->font != (char *) NULL)
-        draw_info->font=AcquireString(image_info->font);
-      if (image_info->density != (char *) NULL)
-        draw_info->density=AcquireString(image_info->density);
-      draw_info->text_antialias=image_info->antialias;
-      if (image_info->pointsize != 0.0)
-        draw_info->pointsize=image_info->pointsize;
-      draw_info->border_color=image_info->border_color;
-      if (image_info->server_name != (char *) NULL)
-        draw_info->server_name=AcquireString(image_info->server_name);
-      option=GetImageOption(image_info,"encoding");
-      if (option != (const char *) NULL)
-        (void) CloneString(&draw_info->encoding,option);
-      option=GetImageOption(image_info,"kerning");
-      if (option != (const char *) NULL)
-        draw_info->kerning=StringToDouble(option,(char **) NULL);
-      option=GetImageOption(image_info,"interline-spacing");
-      if (option != (const char *) NULL)
-        draw_info->interline_spacing=StringToDouble(option,(char **) NULL);
-      option=GetImageOption(image_info,"interword-spacing");
-      if (option != (const char *) NULL)
-        draw_info->interword_spacing=StringToDouble(option,(char **) NULL);
-      option=GetImageOption(image_info,"direction");
-      if (option != (const char *) NULL)
-        draw_info->direction=(DirectionType) ParseCommandOption(
-          MagickDirectionOptions,MagickFalse,option);
-      else
-        draw_info->direction=UndefinedDirection;
-      option=GetImageOption(image_info,"fill");
-      if (option != (const char *) NULL)
-        (void) QueryColorCompliance(option,AllCompliance,&draw_info->fill,
-          exception);
-      option=GetImageOption(image_info,"stroke");
-      if (option != (const char *) NULL)
-        (void) QueryColorCompliance(option,AllCompliance,&draw_info->stroke,
-          exception);
-      option=GetImageOption(image_info,"strokewidth");
-      if (option != (const char *) NULL)
-        draw_info->stroke_width=StringToDouble(option,(char **) NULL);
-      option=GetImageOption(image_info,"undercolor");
-      if (option != (const char *) NULL)
-        (void) QueryColorCompliance(option,AllCompliance,&draw_info->undercolor,
-          exception);
-      option=GetImageOption(image_info,"gravity");
-      if (option != (const char *) NULL)
-        draw_info->gravity=(GravityType) ParseCommandOption(
-          MagickGravityOptions,MagickFalse,option);
-    }
+  draw_info->stroke_antialias=clone_info->antialias;
+  if (clone_info->font != (char *) NULL)
+    draw_info->font=AcquireString(clone_info->font);
+  if (clone_info->density != (char *) NULL)
+    draw_info->density=AcquireString(clone_info->density);
+  draw_info->text_antialias=clone_info->antialias;
+  if (clone_info->pointsize != 0.0)
+    draw_info->pointsize=clone_info->pointsize;
+  draw_info->border_color=clone_info->border_color;
+  if (clone_info->server_name != (char *) NULL)
+    draw_info->server_name=AcquireString(clone_info->server_name);
+  option=GetImageOption(clone_info,"encoding");
+  if (option != (const char *) NULL)
+    (void) CloneString(&draw_info->encoding,option);
+  option=GetImageOption(clone_info,"kerning");
+  if (option != (const char *) NULL)
+    draw_info->kerning=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"interline-spacing");
+  if (option != (const char *) NULL)
+    draw_info->interline_spacing=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"interword-spacing");
+  if (option != (const char *) NULL)
+    draw_info->interword_spacing=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"direction");
+  if (option != (const char *) NULL)
+    draw_info->direction=(DirectionType) ParseCommandOption(
+      MagickDirectionOptions,MagickFalse,option);
+  else
+    draw_info->direction=UndefinedDirection;
+  option=GetImageOption(clone_info,"fill");
+  if (option != (const char *) NULL)
+    (void) QueryColorCompliance(option,AllCompliance,&draw_info->fill,
+      exception);
+  option=GetImageOption(clone_info,"stroke");
+  if (option != (const char *) NULL)
+    (void) QueryColorCompliance(option,AllCompliance,&draw_info->stroke,
+      exception);
+  option=GetImageOption(clone_info,"strokewidth");
+  if (option != (const char *) NULL)
+    draw_info->stroke_width=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"undercolor");
+  if (option != (const char *) NULL)
+    (void) QueryColorCompliance(option,AllCompliance,&draw_info->undercolor,
+      exception);
+  option=GetImageOption(clone_info,"gravity");
+  if (option != (const char *) NULL)
+    draw_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions,
+      MagickFalse,option);
   exception=DestroyExceptionInfo(exception);
   draw_info->signature=MagickSignature;
+  clone_info=DestroyImageInfo(clone_info);
 }
 \f
 /*