108 lines
3.2 KiB
R
108 lines
3.2 KiB
R
|
|
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()
|