1 /* This file is part of the GNU plotutils package.  Copyright (C) 1995,
2    1996, 1997, 1998, 1999, 2000, 2005, 2008, Free Software Foundation, Inc.
3 
4    The GNU plotutils package is free software.  You may redistribute it
5    and/or modify it under the terms of the GNU General Public License as
6    published by the Free Software foundation; either version 2, or (at your
7    option) any later version.
8 
9    The GNU plotutils package is distributed in the hope that it will be
10    useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License along
15    with the GNU plotutils package; see the file COPYING.  If not, write to
16    the Free Software Foundation, Inc., 51 Franklin St., Fifth Floor,
17    Boston, MA 02110-1301, USA. */
18 
19 /* This is a header file for the XAffText module, which was originally
20    independent of libplot.  The module is in x_afftext.c.  It may be used
21    independently of libplot.
22 
23    To use the module independently of libplot, simply do not specify
24    "-DLIBPLOT" at compile time.
25 
26    The module supplies two external functions, which are generalizations of
27    the core X11 function XDrawString: XAffDrawRotString and
28    XAffDrawAffString.  They draw, respectively, a rotated text string and
29    (more generally) a matrix-transformed text string, using a specified
30    core X font.  The rotation angle and transformation matrix are specified
31    by the user.  The matrix is passed as a 4-element array, with the
32    element ordering convention, and sign conventions, being those of the
33    Matrix XLFD extension.
34 
35    `XAffText' is an abbreviation of `X11 affinely transformed text'.  The
36    module was inspired by Alan Richardson's xvertext module for displaying
37    rotated text strings in X11, using the core X fonts.  It works in a
38    similar way.  (It retrieves a bitmap from the X server into an XImage,
39    transforms the XImage, monochrome pixel by pixel, and sends it back to a
40    bitmap on the server, for use as a stipple.)  But it supports arbitrary
41    transformation matrices, and pays extra attention to pixel-level
42    accuracy.  It uses integer arithmetic when possible. */
43 
44 #include <X11/Xlib.h>
45 
46 #ifdef LIBPLOT
47 /* Change the names of the two external functions of the module by
48    prepending "_x_" to them, for consistency with other internal (but
49    externally visible) X11-related functions in libplot.  */
50 #define XAffDrawAffString _pl_XAffDrawAffString
51 #define XAffDrawRotString _pl_XAffDrawRotString
52 #endif
53 
54 extern int XAffDrawAffString (Display *dpy, Drawable drawable, GC gc, XFontStruct *font, int x, int y, double a[4], const char *text);
55 extern int XAffDrawRotString (Display *dpy, Drawable drawable, GC gc, XFontStruct *font, int x, int y, double angle, const char *text);
56