% Return A Preview For A TrueType or Postscript Font %
% %
% Software Design %
-% John Cristy %
+% Cristy %
% July 1992 %
% %
% %
-% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
#include "MagickCore/type.h"
#include "MagickWand/MagickWand.h"
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
-#if defined(MAGICKCORE_HAVE_FT2BUILD_H)
-# include <ft2build.h>
-#endif
+#include <ft2build.h>
#if defined(FT_FREETYPE_H)
# include FT_FREETYPE_H
#else
static Image *ReadTTFImage(const ImageInfo *image_info,ExceptionInfo *exception)
{
char
- buffer[MaxTextExtent],
+ buffer[MagickPathExtent],
*text;
const char
*Text = (char *)
"abcdefghijklmnopqrstuvwxyz\n"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
- "0123456789.:,;(*!?}^)#${%^&-+@\n",
- *Phrase = (char *) "The quick onyx goblin jumps over the lazy dwarf!";
- /* NOTE: These are Pangrams, which contain every letter in English
- See http://www.artlebedev.ru/kovodstvo/sections/33/
-
- "A quick brown fox jumps over the lazy dog.";
- "Pack my box with five dozen liquor jugs.";
- "The five boxing wizards jump quickly!";
- "Grumpy wizards make toxic brew for the evil Queen and Jack.";
-
- IMv6 used this well known phrase, but it is not a pangram!
- "That which does not destroy me, only makes me stronger.";
- */
+ "0123456789.:,;(*!?}^)#${%^&-+@\n";
const TypeInfo
*type_info;
type_info=GetTypeInfo(image_info->filename,exception);
if ((type_info != (const TypeInfo *) NULL) &&
(type_info->glyphs != (char *) NULL))
- (void) CopyMagickString(image->filename,type_info->glyphs,MaxTextExtent);
+ (void) CopyMagickString(image->filename,type_info->glyphs,MagickPathExtent);
status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
if (status == MagickFalse)
{
image=DestroyImageList(image);
return((Image *) NULL);
}
+ status=SetImageExtent(image,image->columns,image->rows,exception);
+ if (status == MagickFalse)
+ return(DestroyImageList(image));
/*
Color canvas with background color
*/
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- SetPixelPixelInfo(image,&background_color,q);
+ SetPixelViaPixelInfo(image,&background_color,q);
q+=GetPixelChannels(image);
}
if (SyncAuthenticPixels(image,exception) == MagickFalse)
break;
}
- (void) CopyMagickString(image->magick,image_info->magick,MaxTextExtent);
- (void) CopyMagickString(image->filename,image_info->filename,MaxTextExtent);
+ (void) CopyMagickString(image->magick,image_info->magick,MagickPathExtent);
+ (void) CopyMagickString(image->filename,image_info->filename,MagickPathExtent);
/*
Prepare drawing commands
*/
draw_info=CloneDrawInfo(image_info,(DrawInfo *) NULL);
draw_info->font=AcquireString(image->filename);
ConcatenateString(&draw_info->primitive,"push graphic-context\n");
- (void) FormatLocaleString(buffer,MaxTextExtent," viewbox 0 0 %.20g %.20g\n",
+ (void) FormatLocaleString(buffer,MagickPathExtent," viewbox 0 0 %.20g %.20g\n",
(double) image->columns,(double) image->rows);
ConcatenateString(&draw_info->primitive,buffer);
ConcatenateString(&draw_info->primitive," font-size 18\n");
- (void) FormatLocaleString(buffer,MaxTextExtent," text 10,%.20g '",(double) y);
+ (void) FormatLocaleString(buffer,MagickPathExtent," text 10,%.20g '",(double) y);
ConcatenateString(&draw_info->primitive,buffer);
text=EscapeString(Text,'"');
ConcatenateString(&draw_info->primitive,text);
text=DestroyString(text);
- (void) FormatLocaleString(buffer,MaxTextExtent,"'\n");
+ (void) FormatLocaleString(buffer,MagickPathExtent,"'\n");
ConcatenateString(&draw_info->primitive,buffer);
- y+=12*(ssize_t) MultilineCensus((char *) Text);
- /* FUTURE: A setting to specify the text to use */
- for (i=4; i <= 72; )
+ y+=20*(ssize_t) MultilineCensus((char *) Text)+20;
+ for (i=12; i <= 72; i+=6)
{
- y += (i>12) ? i : 12; /* line spacing */
- ConcatenateString(&draw_info->primitive," font-size 12\n");
- (void) FormatLocaleString(buffer,MaxTextExtent," text 10,%.20g '%.20g'\n",
+ y+=i+12;
+ ConcatenateString(&draw_info->primitive," font-size 18\n");
+ (void) FormatLocaleString(buffer,MagickPathExtent," text 10,%.20g '%.20g'\n",
(double) y,(double) i);
ConcatenateString(&draw_info->primitive,buffer);
- (void) FormatLocaleString(buffer,MaxTextExtent," font-size %.20g\n",
+ (void) FormatLocaleString(buffer,MagickPathExtent," font-size %.20g\n",
(double) i);
ConcatenateString(&draw_info->primitive,buffer);
- (void) FormatLocaleString(buffer,MaxTextExtent," text 50,%.20g '%s'\n",
- (double) y, Phrase);
+ (void) FormatLocaleString(buffer,MagickPathExtent," text 50,%.20g "
+ "'That which does not destroy me, only makes me stronger.'\n",(double) y);
ConcatenateString(&draw_info->primitive,buffer);
- if (i < 8)
- i++;
- else if (i < 12)
- i+=2;
- else if (i < 24)
+ if (i >= 24)
i+=6;
- else
- i+=12;
}
ConcatenateString(&draw_info->primitive,"pop graphic-context");
(void) DrawImage(image,draw_info,exception);
ModuleExport size_t RegisterTTFImage(void)
{
char
- version[MaxTextExtent];
+ version[MagickPathExtent];
MagickInfo
*entry;
*version='\0';
#if defined(FREETYPE_MAJOR) && defined(FREETYPE_MINOR) && defined(FREETYPE_PATCH)
- (void) FormatLocaleString(version,MaxTextExtent,"Freetype %d.%d.%d",
+ (void) FormatLocaleString(version,MagickPathExtent,"Freetype %d.%d.%d",
FREETYPE_MAJOR,FREETYPE_MINOR,FREETYPE_PATCH);
#endif
- entry=SetMagickInfo("DFONT");
+ entry=AcquireMagickInfo("TTF","DFONT","Multi-face font package");
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadTTFImage;
#endif
entry->magick=(IsImageFormatHandler *) IsTTF;
- entry->adjoin=MagickFalse;
- entry->description=ConstantString("Multi-face font package");
+ entry->flags^=CoderAdjoinFlag;
if (*version != '\0')
entry->version=ConstantString(version);
- entry->module=ConstantString("TTF");
(void) RegisterMagickInfo(entry);
- entry=SetMagickInfo("PFA");
+ entry=AcquireMagickInfo("TTF","PFA","Postscript Type 1 font (ASCII)");
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadTTFImage;
#endif
entry->magick=(IsImageFormatHandler *) IsPFA;
- entry->adjoin=MagickFalse;
- entry->description=ConstantString("Postscript Type 1 font (ASCII)");
+ entry->flags^=CoderAdjoinFlag;
if (*version != '\0')
entry->version=ConstantString(version);
- entry->module=ConstantString("TTF");
(void) RegisterMagickInfo(entry);
- entry=SetMagickInfo("PFB");
+ entry=AcquireMagickInfo("TTF","PFB","Postscript Type 1 font (binary)");
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadTTFImage;
#endif
entry->magick=(IsImageFormatHandler *) IsPFA;
- entry->adjoin=MagickFalse;
- entry->description=ConstantString("Postscript Type 1 font (binary)");
+ entry->flags^=CoderAdjoinFlag;
if (*version != '\0')
entry->version=ConstantString(version);
- entry->module=ConstantString("TTF");
(void) RegisterMagickInfo(entry);
- entry=SetMagickInfo("OTF");
+ entry=AcquireMagickInfo("TTF","OTF","Open Type font");
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadTTFImage;
#endif
entry->magick=(IsImageFormatHandler *) IsTTF;
- entry->adjoin=MagickFalse;
- entry->description=ConstantString("Open Type font");
+ entry->flags^=CoderAdjoinFlag;
if (*version != '\0')
entry->version=ConstantString(version);
- entry->module=ConstantString("TTF");
(void) RegisterMagickInfo(entry);
- entry=SetMagickInfo("TTC");
+ entry=AcquireMagickInfo("TTF","TTC","TrueType font collection");
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadTTFImage;
#endif
entry->magick=(IsImageFormatHandler *) IsTTF;
- entry->adjoin=MagickFalse;
- entry->description=ConstantString("TrueType font collection");
+ entry->flags^=CoderAdjoinFlag;
if (*version != '\0')
entry->version=ConstantString(version);
- entry->module=ConstantString("TTF");
(void) RegisterMagickInfo(entry);
- entry=SetMagickInfo("TTF");
+ entry=AcquireMagickInfo("TTF","TTF","TrueType font");
#if defined(MAGICKCORE_FREETYPE_DELEGATE)
entry->decoder=(DecodeImageHandler *) ReadTTFImage;
#endif
entry->magick=(IsImageFormatHandler *) IsTTF;
- entry->adjoin=MagickFalse;
- entry->description=ConstantString("TrueType font");
+ entry->flags^=CoderAdjoinFlag;
if (*version != '\0')
entry->version=ConstantString(version);
- entry->module=ConstantString("TTF");
(void) RegisterMagickInfo(entry);
return(MagickImageCoderSignature);
}