blob: 5cdf5680df6ad14365890794eedeec54bb8e22cc [file] [log] [blame]
/*
* R : A Computer Language for Statistical Data Analysis
* Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka
* Copyright (C) 1997--2021 The R Core Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, a copy is available at
* https://www.R-project.org/Licenses/
*/
#ifndef R_DEV_X11_H
#define R_DEV_X11_H
#define SYMBOL_FONTFACE 5
/* These are the currently supported device "models" */
typedef enum {
MONOCHROME = 0,
GRAYSCALE,
PSEUDOCOLOR1,
PSEUDOCOLOR2,
TRUECOLOR
} X_COLORTYPE;
typedef enum {
WINDOW, /* NB: have "type > WINDOW" below ... */
XIMAGE,
PNG,
JPEG,
TIFF,
PNGdirect,
SVG,
PDF,
PS,
BMP
} X_GTYPE;
#include <stdio.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
#include <X11/Intrinsic.h> /*-> Xlib.h Xutil.h Xresource.h .. */
#ifdef HAVE_WORKING_X11_CAIRO
# ifdef HAVE_PANGOCAIRO
# include <pango/pango.h>
# include <pango/pangocairo.h>
# else
# include <cairo.h>
# endif
# include <cairo-xlib.h>
#endif
Rboolean X11DeviceDriver(pDevDesc, const char*, double, double, double,
double, X_COLORTYPE, int, int, int, SEXP,
int, int, int, const char *, int, int, const char *,
const char *, Rboolean);
/********************************************************/
/* Each driver can have its own device-specic graphical */
/* parameters and resources. these should be wrapped */
/* in a structure (like the x11Desc structure below) */
/* and attached to the overall device description via */
/* the dd->deviceSpecific pointer */
/* NOTE that there are generic graphical parameters */
/* which must be set by the device driver, but are */
/* common to all device types (see Graphics.h) */
/* so go in the GPar structure rather than this device- */
/* specific structure */
/********************************************************/
/*
A similar-enough structure of the same name is used in
src/library/grDevices/src/cairo/cairoBM.h
*/
typedef struct {
/* Graphics Parameters */
/* Local device copy so that we can detect */
/* when parameter changes. */
/* Used to detect changes */
int lty; /* Line type */
double lwd;
R_GE_lineend lend;
R_GE_linejoin ljoin;
double lwdscale; /* scaling to get a multiple
of 1/96" */
int col; /* Color */
int fill;
int bg; /* bg */
int canvas; /* Canvas colour */
int fontface; /* Typeface 1:5 */
int fontsize; /* Size in points */
double pointsize; /* Size in points */
char basefontfamily[500]; /* Initial font family */
/* X11 Driver Specific */
/* Parameters with copy per X11 device. */
int windowWidth; /* Window width (pixels) */
int windowHeight; /* Window height (pixels) */
int resize; /* Window resized */
Window window; /* Graphics Window */
GC wgc; /* GC for window */
XSetWindowAttributes attributes; /* Window attributes */
XRectangle clip; /* The clipping rectangle */
R_XFont *font;
char fontfamily[500]; /* CURRENT fontfamily */
char symbolfamily[500];
Rboolean usePUA;
X_GTYPE type; /* Window or pixmap? */
int npages; /* counter for a bitmap device */
FILE *fp; /* file for a bitmap device */
char filename[PATH_MAX]; /* filename for a bitmap device */
int quality; /* JPEG quality/TIFF compression */
Rboolean handleOwnEvents; /* Flag indicating whether events will
be handled externally from R (TRUE),
or whether R is to handle the events
(FALSE) */
int res_dpi; /* used for png/jpeg/tiff */
Rboolean warn_trans; /* have we warned about translucent cols? */
char title[101];
Rboolean onefile;
#ifdef HAVE_WORKING_X11_CAIRO
/* In the buffered cases, xcc and xcs are the xlib context and surface
whereas cc, cs are an RGB24 image surface.
In the non-buffered case, xcc and xcs are NULL and cc, cs are the
cairo context and surface used directly.
*/
Rboolean useCairo, buffered;
cairo_t *cc, *xcc;
cairo_surface_t *cs, *xcs;
cairo_antialias_t antialias;
double last, last_activity, update_interval;
int numPatterns;
cairo_pattern_t **patterns;
int numClipPaths;
cairo_path_t **clippaths;
int appending;
int numMasks;
cairo_pattern_t **masks;
int currentMask;
int numGroups;
cairo_pattern_t **groups;
#endif
double fontscale;
int holdlevel;
} X11Desc;
typedef X11Desc* pX11Desc;
/* This is a private header, so why are these here? */
X11Desc *Rf_allocX11DeviceDesc(double ps);
int Rf_setX11Display(Display *dpy, double gamma_fac, X_COLORTYPE colormodel,
int maxcube, Rboolean setHandlers);
int Rf_setX11DeviceData(pDevDesc dd, double gamma_fac, X11Desc *xd);
#endif