Skip to content

Commit f56a504

Browse files
committed
utility for grabbing props
1 parent 98fb83e commit f56a504

File tree

4 files changed

+21
-17
lines changed

4 files changed

+21
-17
lines changed

R/save.R

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,7 @@ get_plot_background <- function(plot, bg = NULL, default = "transparent") {
245245
return(default)
246246
}
247247
bg <- calc_element("plot.background", plot_theme(plot))
248-
bg <- if (S7::prop_exists(bg, "fill")) bg@fill else NULL
249-
bg %||% "transparent"
248+
try_prop(bg, "fill") %||% "transparent"
250249
}
251250

252251
validate_device <- function(device, filename = NULL, dpi = 300, call = caller_env()) {

R/theme.R

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -821,10 +821,7 @@ calc_element <- function(element, theme, verbose = FALSE, skip_blank = FALSE,
821821
# recursion; we initiate skipping blanks if we encounter an element that
822822
# doesn't inherit blank.
823823
skip_blank <- skip_blank ||
824-
(!is.null(el_out) &&
825-
!isTRUE(S7::S7_inherits(el_out) &&
826-
S7::prop_exists(el_out, "inherit.blank") &&
827-
el_out@inherit.blank))
824+
(!is.null(el_out) && !isTRUE(try_prop(el_out, "inherit.blank")))
828825

829826
parents <- lapply(
830827
pnames,
@@ -964,8 +961,8 @@ combine_elements <- function(e1, e2) {
964961

965962
# If e2 is element_blank, and e1 inherits blank inherit everything from e2,
966963
# otherwise ignore e2
967-
if (S7::S7_inherits(e2, element_blank)) {
968-
if (S7::prop_exists(e1, "inherit.blank") && e1@inherit.blank) {
964+
if (is_theme_element(e2, "blank")) {
965+
if (isTRUE(try_prop(e1, "inherit.blank"))) {
969966
return(e2)
970967
} else {
971968
return(e1)
@@ -977,12 +974,12 @@ combine_elements <- function(e1, e2) {
977974
S7::props(e1)[n] <- S7::props(e2)[n]
978975

979976
# Calculate relative sizes
980-
if (S7::prop_exists(e1, "size") && is.rel(e1@size)) {
977+
if (is.rel(try_prop(e1, "size"))) {
981978
e1@size <- e2@size * unclass(e1@size)
982979
}
983980

984981
# Calculate relative linewidth
985-
if (S7::prop_exists(e1, "linewidth") && is.rel(e1@linewidth)) {
982+
if (is.rel(try_prop(e1, "linewidth"))) {
986983
e1@linewidth <- e2@linewidth * unclass(e1@linewidth)
987984
}
988985

R/utilities.R

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -959,3 +959,13 @@ compute_data_size <- function(data, size, default = 0.9,
959959
data[[target]] <- res * (default %||% 0.9)
960960
data
961961
}
962+
963+
try_prop <- function(object, name, default = NULL) {
964+
if (!S7::S7_inherits(object)) {
965+
return(default)
966+
}
967+
if (!S7::prop_exists(object, name)) {
968+
return(default)
969+
}
970+
S7::prop(object, name)
971+
}

tests/testthat/test-theme.R

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -344,13 +344,11 @@ test_that("element tree can be modified", {
344344

345345
test_that("all elements in complete themes have inherit.blank=TRUE", {
346346
inherit_blanks <- function(theme) {
347-
all(vapply(theme, function(el) {
348-
if (is_theme_element(el) && S7::prop_exists(el, "inherit.blank")) {
349-
el@inherit.blank
350-
} else {
351-
TRUE
352-
}
353-
}, logical(1)))
347+
all(vapply(
348+
theme, try_prop,
349+
name = "inherit.blank", default = TRUE,
350+
logical(1)
351+
))
354352
}
355353
expect_true(inherit_blanks(theme_grey()))
356354
expect_true(inherit_blanks(theme_bw()))

0 commit comments

Comments
 (0)