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

\name{grid.grob}
\title{Create Grid Graphical Objects, aka "Grob"s}
\alias{grob}
\alias{gTree}
\alias{grobTree}
\alias{childNames}
\alias{gList}
\alias{is.grob}
\description{
  Creating grid graphical objects, short (\dQuote{grob}s).

  \code{grob()} and \code{gTree()} are the basic creators,
  \code{grobTree()} and \code{gList()} take several grobs to build a new
  one.
}
\usage{
## Grob Creation:

grob (..., name = NULL, gp = NULL, vp = NULL, cl = NULL)
gTree(..., name = NULL, gp = NULL, vp = NULL, children = NULL,
      childrenvp = NULL, cl = NULL)
grobTree(..., name = NULL, gp = NULL, vp = NULL,
         childrenvp = NULL, cl = NULL)
gList(...)

## Grob Properties:
childNames(gTree)
is.grob(x)

}
\arguments{
  \item{...}{For \code{grob} and \code{gTree}, the
    named slots describing important features of
    the graphical object.  For \code{gList} and \code{grobTree},
    a series of grob objects. }
  \item{name}{a character identifier for the grob.  Used to find the
    grob on the display list and/or as a child of another grob. }
  \item{children}{a \code{"gList"} object. }
  \item{childrenvp}{a \code{\link{viewport}} object (or \code{NULL}).}
  \item{gp}{A gpar object, typically the output
    from a call to the function \code{gpar}.  This is basically
    a list of graphical parameter settings.}
  \item{vp}{a \code{\link{viewport}} object (or \code{NULL}).}
  \item{cl}{string giving the class attribute for the new class.}
  \item{gTree}{a \code{"gTree"} object.}
  \item{x}{ An \R object. }
}
\details{
  These functions can be used to create a basic \code{"grob"},
  \code{"gTree"}, or \code{"gList"} object, or a new class derived from
  one of these.

  A grid graphical object (\dQuote{grob}) is a description of a graphical
  item.  These basic classes provide default behaviour for
  validating, drawing,
  and modifying graphical objects.  Both \code{grob()} and
  \code{gTree()} call the function \code{\link{validDetails}} to check
  that the object returned is internally coherent.

  A \code{"gTree"} can have other grobs as children;  when a gTree is drawn, it
  draws all of its children.  Before drawing its children, a gTree
  pushes its \code{childrenvp} slot and then navigates back up (calls
  \code{\link{upViewport}}) so that the children can specify their location
  within the \code{childrenvp} via a \code{\link{vpPath}}.

  Grob names need not be unique in general, but all children of a
  gTree must have different names.
  A grob name can be any string, though it is not
  advisable to use the \code{\link{gPath}} separator (currently
  \code{::}) in grob names.

  The function \code{childNames} returns the names of the grobs
  which are children of a gTree.

  All grid primitives (\code{\link{grid.lines}}, \code{grid.rect}, ...)
  and some higher-level grid components (e.g., \code{\link{grid.xaxis}}
  and \code{grid.yaxis}) are derived from these classes.

  \code{grobTree} is just a convenient wrapper for \code{gTree}
  when the only components of the gTree are grobs (so all
  unnamed arguments become children of the gTree).

  The \code{grid.grob} function is defunct.
}
\value{
  An \R object of class \code{"grob"}, a \bold{gr}aphical \bold{ob}ject.
}
\author{Paul Murrell}
\seealso{
  \code{\link{grid.draw}},
  \code{\link{grid.edit}},
  \code{\link{grid.get}}.
}
\keyword{dplot}
