blob: c27f21504467e8604329d0f6a162626d26447b36 [file] [log] [blame]
library(grid)
HersheyLabel <- function(x, y=unit(.5, "npc")) {
lines <- strsplit(x, "\n")[[1]]
if (!is.unit(y))
y <- unit(y, "npc")
n <- length(lines)
if (n > 1) {
y <- y + unit(rev(seq(n)) - mean(seq(n)), "lines")
}
grid.text(lines, y=y, gp=gpar(fontfamily="HersheySans"))
}
r1 <- rectGrob(x=1/3, y=2/3, width=.5, height=.5,
gp=gpar(col=NA, fill=rgb(.7, 0, 0, .8)))
r2 <- rectGrob(x=2/3, y=1/3, width=.5, height=.5,
gp=gpar(col=NA, fill=rgb(0, 0, .9, .4)))
group <- function(op) {
grid.rect()
grid.group(r2, op, r1)
HersheyLabel(op, y=1/4)
}
porterDuff <- function() {
grid.newpage()
pushViewport(viewport(layout=grid.layout(3, 4, respect=TRUE)))
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1))
group("over")
popViewport()
pushViewport(viewport(layout.pos.row=1, layout.pos.col=2))
group("clear")
popViewport()
pushViewport(viewport(layout.pos.row=1, layout.pos.col=3))
group("source")
popViewport()
pushViewport(viewport(layout.pos.row=1, layout.pos.col=4))
group("in")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=1))
group("out")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=2))
group("atop")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=3))
group("dest")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=4))
group("dest.over")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=1))
group("dest.in")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=2))
group("dest.out")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=3))
group("dest.atop")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=4))
group("xor")
popViewport()
}
blendModes <- function() {
grid.newpage()
pushViewport(viewport(layout=grid.layout(3, 4, respect=TRUE)))
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1))
group("add")
popViewport()
pushViewport(viewport(layout.pos.row=1, layout.pos.col=2))
group("saturate")
popViewport()
pushViewport(viewport(layout.pos.row=1, layout.pos.col=3))
group("multiply")
popViewport()
pushViewport(viewport(layout.pos.row=1, layout.pos.col=4))
group("screen")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=1))
group("overlay")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=2))
group("darken")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=3))
group("lighten")
popViewport()
pushViewport(viewport(layout.pos.row=2, layout.pos.col=4))
group("color.dodge")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=1))
group("color.burn")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=2))
group("hard.light")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=3))
group("soft.light")
popViewport()
pushViewport(viewport(layout.pos.row=3, layout.pos.col=4))
group("difference")
popViewport()
}
porterDuff()
blendModes()