| /* |
| * R : A Computer Language for Statistical Data Analysis |
| * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka |
| * Copyright (C) 1997--2008 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_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 *); |
| |
| |
| /********************************************************/ |
| /* 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 */ |
| /********************************************************/ |
| |
| 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]; |
| 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_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; |
| #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 |