blob: 46d1ea6907d96a0da2103778ff37ceccd0abaa40 [file] [log] [blame]
# File src/library/grid/R/edit.R
# Part of the R package, https://www.R-project.org
#
# Copyright (C) 1995-2012 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/
# All args just used as args to editGrob
gEdit <- function(...) {
edit <- list(...)
class(edit) <- "gEdit"
edit
}
is.gEdit <- function(x) {
inherits(x, "gEdit")
}
applyEdit <- function(x, edit) {
if (is.null(edit)) {
x
} else {
if (!is.gEdit(edit))
stop("invalid 'edit' information")
# Intended to handle whether edit has gPath spec or not
newx <- do.call("editGrob", c(list(x), edit))
# If edit was specified for non-existent child, newx will be NULL
if (is.null(newx))
x
else
newx
}
}
# A list of gEdit's to apply to the same grob
gEditList <- function(...) {
edits <- list(...)
if (!all(sapply(edits, is.gEdit)))
stop("'gEditList' can only contain 'gEdit' objects")
class(edits) <- "gEditList"
edits
}
is.gEditList <- function(x) {
inherits(x, "gEditList")
}
applyEdits <- function(x, edits) {
if (is.null(edits)) {
x
} else {
if (is.gEdit(edits))
applyEdit(x, edits)
else {
if (!inherits(edits, "gEditList"))
stop("invalid 'edit' information")
for (i in edits)
x <- applyEdits(x, i)
x
}
}
}