# File src/library/grid/R/zzz.R # Part of the R package, https://www.R-project.org # # Copyright (C) 1995-2016 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. # # A copy of the GNU General Public License is available at # https://www.R-project.org/Licenses/ ## environment used for evaluation in the C code ## assigned here to protect from GC, but otherwise unused at R level .GridEvalEnv <- new.env() # This should be the only grid global variable(?) # It contains the list of state structures corresponding to the # state for each device. # The state structures are stored in here so that they do not # get garbage collected. assign(".GRID.STATE", vector("list", 64L), envir = .GridEvalEnv) ## 64 comes from the maximum number of R devices allowed to be open at ## one time, see R_MaxDevices in Graphics.h. .noGenerics <- TRUE utils::globalVariables(c("n", "vp", "path")) .onLoad <- function(libname, pkgname) { ## want eval in C code to see unexported objects environment(.GridEvalEnv) <- asNamespace("grid") .Call(C_initGrid, .GridEvalEnv) .grid.loaded <<- TRUE } .onUnload <- function(libpath) { if (.grid.loaded) { ## Kill all existing devices to avoid replay ## of display list which tries to run grid code ## Not very friendly to other registered graphics systems ## but its safety first for now if(length(.Devices) > 1L) warning("shutting down all devices when unloading 'grid' namespace", call. = FALSE) graphics.off() .Call(C_killGrid) } library.dynam.unload("grid", libpath) } ## .gridplot.hook <- function() ## { ## pushViewport(viewport(width=unit(1, "npc") - unit(1, "lines"), ## x=0, just="left")) ## grid.text(paste("help(", ..nameEx, ")"), ## x=unit(1, "npc") + unit(0.5, "lines"), ## y=unit(0.8, "npc"), rot=90, ## gp=gpar(col="orchid")) ## }