% File src/library/grDevices/man/x11.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2021 R Core Team
% Distributed under GPL 2 or later

\name{x11}
\title{X Window System Graphics (X11)}
\alias{x11}
\alias{X11}
\alias{X11.options}

\description{
  \describe{
    \item{on Windows,}{the \code{X11()} and \code{x11()} functions are
      simple wrappers to \code{\link{windows}()} for historical
      compatibility convenience: Calling \code{x11()} or \code{X11()}
      would work in most cases to open an interactive graphics device.

      In \R versions before 3.6.0, the Windows version had a shorter
      list of formal arguments.  Consequently, calls to \code{X11(*)}
      with arguments should \emph{name} them for back compatibility.

      Almost all information below does \emph{not} apply on Windows.}

    \item{on Unix-alikes}{\code{X11} starts a graphics device driver for
      the X Window System (version 11).  This can only be done on
      machines/accounts that have access to an X server.

      \code{x11} is recognized as a synonym for \code{X11}.

      The \R function is a wrapper for two devices, one based on Xlib
      (\url{https://en.wikipedia.org/wiki/Xlib}) and one using cairographics
      (\url{https://www.cairographics.org}).}
  }
}
\usage{
X11(display = "", width, height, pointsize, gamma, bg, canvas,
    fonts, family, xpos, ypos, title, type, antialias, symbolfamily)

X11.options(\dots, reset = FALSE)
}
\arguments{
  \item{display}{the display on which the graphics window will appear.
    The default is to use the value in the user's environment variable
    \env{DISPLAY}.  This is ignored (with a warning) if an X11 device is
    already open on another display.}

  \item{width, height}{the width and height of the plotting window, in
    inches.  If \code{NA}, taken from the resources and if
    not specified there defaults to \code{7} inches.  See also
    \sQuote{Resources}.}

  \item{pointsize}{the default pointsize to be used.  Defaults to \code{12}.}

  \item{gamma}{gamma correction fudge factor.
    Colours in R are sRGB;  if your monitor does not conform to
    sRGB, you might be able to improve things by tweaking this
    parameter to apply additional gamma correction to the RGB channels.
    By default 1 (no additional gamma correction).}

  \item{bg}{colour, the initial background colour.  Default
    \code{"transparent"}.}

  \item{canvas}{colour.  The colour of the canvas, which is visible only
    when the background colour is transparent.  Should be an opaque colour
    (and any alpha value will be ignored).  Default \code{"white"}.}

  \item{fonts}{for \code{type = "Xlib"} only:
    X11 font description strings into which weight, slant and
    size will be substituted.  There are two, the first for fonts 1 to 4
    and the second for font 5, the symbol font.  See section \sQuote{Fonts}.}

  \item{family}{The default family: a length-one character string.  This
    is primarily intended for cairo-based devices, but for \code{type =
    "Xlib"}, the \code{\link{X11Fonts}()} database is used to map family
    names to \code{fonts} (and this argument takes precedence over that
    one).}

  \item{xpos, ypos}{integer: initial position of the top left corner of the
    window, in pixels.  Negative values are from the opposite corner,
    e.g.\sspace{}\code{xpos = -100} says the top right corner should be 100 pixels
    from the right edge of the screen.  If \code{NA} (the default),
    successive devices are cascaded in 20 pixel steps from the top left.
    See also \sQuote{Resources}.}

  \item{title}{character string, up to 100 bytes.  With the default,
    \code{""}, a suitable title is created internally.  A C-style format
    for an integer will be substituted by the device number (see the
    \code{file} argument to \code{\link{postscript}} for further
    details).  How non-ASCII titles are handled is
    implementation-dependent.}

  \item{type}{character string, one of \code{"Xlib"}, \code{"cairo"},
    \code{"nbcairo"} or \code{"dbcairo"}.  Only the first will be
    available if the system was compiled without support for
    cairographics.  The default is \code{"cairo"} where \R was built
    using \code{pangocairo} (so not usually on macOS), otherwise
    \code{"Xlib"}.}

  \item{antialias}{for cairo types, the type of anti-aliasing (if any)
    to be used.  One of \code{c("default", "none", "gray", "subpixel")}.}

  \item{symbolfamily}{for cairo-based devices only:
      a length-one character string that specifies the font family to
      be used as the "symbol" font (e.g., for \link{plotmath} output).
      The default value is "default", which means that R will choose
      a default "symbol" font based on the graphics device capabilities.}

  \item{reset}{logical: should the defaults be reset to their defaults?}

  \item{\dots}{Any of the arguments to \code{X11}, plus \code{colortype}
    and \code{maxcubesize} (see section \sQuote{Colour Rendering}).}
}
\details{
  The defaults for all of the arguments of \code{X11} are set by
  \code{X11.options}: the \sQuote{Arguments} section gives the
  \sQuote{factory-fresh} defaults.

  The initial size and position are only hints, and may not be acted on
  by the window manager.  Also, some systems (especially laptops) are
  set up to appear to have a screen of a different size to the physical
  screen.

  Option \code{type} selects between two separate devices: \R can be
  built with support for neither, \code{type = "Xlib"} or both.  Where
  both are available, types \code{"cairo"}, \code{"nbcairo"} and
  \code{"dbcairo"} offer
  \itemize{
    \item
    antialiasing of text and lines.
    \item
    translucent colours.
    \item
    scalable text, including to sizes like 4.5 pt.
    \item
    full support for UTF-8, so on systems with suitable fonts you can
    plot in many languages on a single figure (and this will work even
    in non-UTF-8 locales).  The output should be locale-independent.
  }

  There are three variants of the cairo-based device.  \code{type =
  "nbcairo"} has no buffering.  \code{type = "cairo"} has some
  buffering, and supports \code{\link{dev.hold}} and \code{dev.flush}.
  \code{type = "dbcairo"} buffers output and updates the screen about
  every 100ms (by default).  The refresh interval can be set (in units
  of seconds) by e.g.\sspace{}\code{\link{options}(X11updates = 0.25)}: the
  value is consulted when a device is opened.  Updates are only looked
  for every 50ms (at most), and during heavy graphics computations only
  every 500ms.

  Which version will be fastest depends on the X11 connection and the
  type of plotting.  You will probably want to use a buffered type
  unless backing store is in use on the X server (which for example it
  always is on the \code{x86_64} macOS XQuartz server), as otherwise
  repainting when the window is exposed will be slow.  On slow
  connections \code{type = "dbcairo"} will probably give the best
  performance.

  Because of known problems with font selection on macOS without
  Pango (for example, the CRAN distribution), \code{type = "cairo"} is
  not the default there.  These problems have included mixing up bold
  and italic (since worked around), selecting incorrect glyphs and ugly
  or missing symbol glyphs.

  All devices which use an X11 server (including the \code{type =
    "Xlib"} versions of bitmap devices such as \code{\link{png}}) share
  internal structures, which means that they must use the same
  \code{display} and visual.  If you want to change display, first close
  all such devices.

  The cursor shown indicates the state of the device.  If quiescent the
  cursor is an arrow: when the locator is in use it is a crosshair
  cursor, and when plotting computations are in progress (and this can
  be detected) it is a watch cursor.  (The exact cursors displayed will
  depend on the window manager in use.)
}

\section{X11 Fonts}{
  This section applies only to \code{type = "Xlib"}.

  An initial/default font family for the device can be specified via
  the \code{fonts} argument, but if a device-independent R graphics font
  family is specified (e.g., via \code{par(family =)} in the graphics
  package), the X11 device makes use of the X11 font database (see
  \code{X11Fonts}) to convert the R graphics font family to an
  X11-specific font family description.  If \code{family} is supplied as
  an argument, the X11 font database is used to convert that, but
  otherwise the argument \code{fonts} (with default given by
  \code{X11.options}) is used.

  X11 chooses fonts by matching to a pattern, and it is quite possible
  that it will choose a font in the wrong encoding or which does not
  contain glyphs for your language (particularly common in
  \code{iso10646-1} fonts).

  The \code{fonts} argument is a two-element character vector, and the
  first element will be crucial in successfully using
  non-Western-European fonts.  Settings that have proved useful include

  \code{"-*-mincho-\%s-\%s-*-*-\%d-*-*-*-*-*-*-*"} for CJK languages and
  \code{"-cronyx-helvetica-\%s-\%s-*-*-\%d-*-*-*-*-*-*-*"} for Russian.

  For UTF-8 locales, the \code{XLC_LOCALE} databases provide mappings
  between character encodings, and you may need to add an entry for your
  locale (e.g., Fedora Core 3 lacked one for \code{ru_RU.utf8}).
}

\section{Cairo Fonts}{
  The cairographics-based devices work directly with font family names
  such as \code{"Helvetica"} which can be selected initially by the
  \code{family} argument and subsequently by \code{\link{par}} or
  \code{\link{gpar}}.  There are mappings for the three
  device-independent font families, \code{"sans"} for a sans-serif font
  (to \code{"Helvetica"}), \code{"serif"} for a serif font (to
  \code{"Times"}) and \code{"mono"} for a monospaced font (to
  \code{"Courier"}).

  The font selection is handled by \code{Pango} (usually \emph{via}
  \code{fontconfig}) or \code{fontconfig} (on macOS and perhaps
  elsewhere).  The results depend on the fonts installed on the system
  running \R -- setting the environmnent variable \env{FC_DEBUG} to 1
  normally allows some tracing of the selection process.

  This works best when high-quality scalable fonts are installed,
  usually in Type 1 or TrueType formats: see the
  \sQuote{R Installation and Administration} manual for advice on how to
  obtain and install such fonts.
  At present the best rendering (including using kerning)
  will be achieved with TrueType fonts: see
  \url{https://www.freedesktop.org/software/fontconfig/fontconfig-user.html}
  for ways to set up your system to prefer them.  The default family
  (\code{"Helvetica"}) is likely not to use kerning: alternatives which
  should if you have them installed are \code{"Arial"},
  \code{"DejaVu Sans"} and \code{"Liberation Sans"} (and perhaps
  \code{"FreeSans"}).  For those who prefer fonts with serifs, try
  \code{"Times New Roman"}, \code{"DejaVu Serif"} and \code{"Liberation
  Serif"}.  To match LaTeX text, use something like \code{"CM Roman"}.

  Fedora systems from version 31 on do not like the default \code{"symbol"}
  font family for rendering symbols (e.g., \link{plotmath}).  For those
  systems, users should specify a different font via
  \code{symbolfamily}.  The default can also be changed via
  \code{X11.options}. 
  
  %  https://bugs.launchpad.net/ubuntu/+source/fontconfig/+bug/551977
  Problems with incorrect rendering of symbols (e.g., of
  \code{quote(pi)} and \code{expression(10^degree)})
  have been seen on Linux systems which have the Wine
  symbol font installed -- \code{fontconfig} then prefers this and
  misinterprets its encoding.  Adding the following lines
  to \file{~/.fonts.conf} or \file{/etc/fonts/local.conf} may circumvent
  this problem by preferring the URW Type 1 symbol font.
\preformatted{<fontconfig>
<match target="pattern">
  <test name="family"><string>Symbol</string></test>
  <edit name="family" mode="prepend" binding="same">
    <string>Standard Symbols L</string>
  </edit>
</match>
</fontconfig>
}
A test for this is to run at the command line \command{fc-match Symbol}.
If that shows \code{symbol.ttf} that may be the Wine symbol font -- use
\command{locate symbol.ttf} to see if it is found from a directory with
\samp{wine} in the name.
}

\section{Resources}{
  The standard X11 resource \code{geometry} can be used to specify the
  window position and/or size, but will be overridden by values
  specified as arguments or non-\code{NA} defaults set in
  \code{X11.options}.  The class looked for is \code{R_x11}.  Note that
  the resource specifies the width and height in pixels and not in
  inches.  See for example \samp{man X} (or
  \url{https://www.x.org/releases/current/}).
  An example line in \file{~/.Xresources} might be
\preformatted{R_x11*geometry: 900x900-0+0
}
  which specifies a 900 x 900 pixel window at the top right of the screen.
}

\section{Colour Rendering}{
  X11 supports several \sQuote{visual} types, and nowadays almost all
  systems support \sQuote{truecolor} which \code{X11} will use by
  default.  This uses a direct specification of any RGB colour up to the
  depth supported (usually 8 bits per colour).  Other visuals make use
  of a palette to support fewer colours, only grays or even only
  black/white.  The palette is shared between all X11 clients, so it can
  be necessary to limit the number of colours used by \R.

  The default for \code{type = "Xlib"} is to use the best possible colour
  model for the visual of the X11 server: these days this will almost
  always be \sQuote{truecolor}.  This can be overridden by the
  \code{colortype} argument of \code{X11.options}.  \bold{Note:} All
  \code{X11} and \code{type = "Xlib"} \code{\link{bmp}}, \code{jpeg},
  \code{png} and \code{tiff} devices share a \code{colortype} which is
  set when the first device to be opened.  To change the
  \code{colortype} you need to close \emph{all} open such devices, and
  then use \code{X11.options(colortype =)}.

  The colortype types are tried in the order \code{"true"},
  \code{"pseudo"}, \code{"gray"} and \code{"mono"} (black or white
  only).  The values \code{"pseudo"} and \code{"pseudo.cube"} provide
  two colour strategies for a pseudocolor visual.  The first strategy
  provides on-demand colour allocation which produces exact colours
  until the colour resources of the display are exhausted (when plotting
  will fail).  The second allocates (if possible) a standard colour
  cube, and requested colours are approximated by the closest value in
  the cube.

  With \code{colortype} equal to \code{"pseudo.cube"} or \code{"gray"}
  successively smaller palettes are tried until one is completely
  allocated.  If allocation of the smallest attempt fails the device will
  revert to \code{"mono"}.  For \code{"gray"} the search starts at 256
  grays for a display with depth greater than 8, otherwise with half
  the available colours.  For \code{"pseudo.cube"} the maximum cube size
  is set by \code{X11.options(maxcolorsize =)} and defaults to
  256.  With that setting the largest cube tried is 4 levels each for
  RGB, using 64 colours in the palette.

  % A test in 2011 showed that cairo >= 1.6 works on 8-bit visuals,
  % but does not interpret colours correctly.  Done via VNC.
  The cairographics-based devices most likely only work (or work
  correctly) with \sQuote{TrueColor} visuals, although in principle this
  depends on the cairo installation: a warning is given if any other
  visual is encountered.

  \code{type = "Xlib"} supports \sQuote{TrueColor},
  \sQuote{PseudoColor}, \sQuote{GrayScale}, \code{StaticGray} and
  \code{MonoChrome} visuals: \sQuote{StaticColor} and
  \sQuote{DirectColor} visuals are handled only in black/white.
}

\section{Anti-aliasing}{
  Anti-aliasing is only supported for cairographics-based devices, and
  applies to both graphics and fonts.  It is generally preferable for
  lines and text, but can lead to undesirable effects for fills,
  e.g.\sspace{}for \code{\link{image}} plots, and so is never used for fills.

  \code{antialias = "default"} is in principle platform-dependent, but
  seems most often equivalent to \code{antialias = "gray"}.
}

\section{Conventions}{
  This section describes the implementation of the conventions for
  graphics devices set out in the \sQuote{R Internals} manual.

  \itemize{
    \item The default device size is 7 inches square.
    \item Font sizes are in big points.
    \item The default font family is Helvetica.
    \item Line widths in 1/96 inch, minimum one pixel for \code{type =
      "Xlib"}, 0.01 otherwise.
    \item For \code{type = "Xlib"} circle radii are in pixels with
    minimum one.
    \item Colours are interpreted by the X11 server, which is
    \emph{assumed} to conform to sRGB.
  }
}

\section{Warning}{
  Support for all the Unix devices is optional, so in packages
  \code{X11()}  should be used conditionally after checking
  \code{\link{capabilities}("X11")}.
}

\seealso{
  \code{\link{Devices}}, \code{\link{X11Fonts}}, \code{\link{savePlot}}.
}
\examples{\dontrun{
if(.Platform$OS.type == "unix") { # Only on unix-alikes, possibly Mac,
## put something like this is your .Rprofile to customize the defaults
setHook(packageEvent("grDevices", "onLoad"),
        function(...) grDevices::X11.options(width = 8, height = 6, xpos = 0,
                                             pointsize = 10))
}}}
\keyword{device}
