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