## ---- echo = FALSE------------------------------------------------------------
library(knitr)
knitr::opts_chunk$set(
    error = FALSE,
    tidy  = FALSE,
    message = FALSE,
    warning = FALSE,
    fig.align = "center"
)

## -----------------------------------------------------------------------------
library(ComplexHeatmap)
library(InteractiveComplexHeatmap)
set.seed(123)
mat1 = matrix(rnorm(100), 10)
rownames(mat1) = colnames(mat1) = paste0("a", 1:10)
mat2 = matrix(sample(letters[1:10], 100, replace = TRUE), 10)
rownames(mat2) = colnames(mat2) = paste0("b", 1:10)

ht_list = Heatmap(mat1, name = "mat_a", row_km = 2, column_km = 2) +
    Heatmap(mat2, name = "mat_b")

## ---- fig.width = 6, fig.height = 4-------------------------------------------
ht_list = draw(ht_list)
pos = htPositionsOnDevice(ht_list)

## -----------------------------------------------------------------------------
pos

## ---- fig.width = 6, fig.height = 4, echo = FALSE-----------------------------
grid.newpage()
grid.rect(gp = gpar(lty = 2))
for(i in seq_len(nrow(pos))) {
    x_min = pos[i, "x_min"]
    x_max = pos[i, "x_max"]
    y_min = pos[i, "y_min"]
    y_max = pos[i, "y_max"]
    pushViewport(viewport(x = x_min, y = y_min, name = pos[i, "slice"],
        width = x_max - x_min, height = y_max - y_min,
        just = c("left", "bottom")))
    grid.rect()
    upViewport()
}

## ---- fig.width = 6, fig.height = 4, eval = FALSE-----------------------------
#  dev.new(width = 6, height = 4)
#  grid.newpage()
#  grid.rect(gp = gpar(lty = 2))
#  for(i in seq_len(nrow(pos))) {
#      x_min = pos[i, "x_min"]
#      x_max = pos[i, "x_max"]
#      y_min = pos[i, "y_min"]
#      y_max = pos[i, "y_max"]
#      pushViewport(viewport(x = x_min, y = y_min, name = pos[i, "slice"],
#          width = x_max - x_min, height = y_max - y_min,
#          just = c("left", "bottom")))
#      grid.rect()
#      upViewport()
#  }

## ---- echo = FALSE, fig.width = 6, fig.height = 4-----------------------------
source("model.R")

## ---- eval = FALSE------------------------------------------------------------
#  df[1, "row_index"][[1]]
#  unlist(df[1, "row_index"])
#  df$row_index[[1]]

## ---- fig.width = 6, fig.height = 4, eval = FALSE-----------------------------
#  pdf(...)
#  ht_list = draw(ht_list)
#  pos = selectPosition(ht_list, pos = unit(c(3, 3), "cm"))
#  dev.off()

## ---- fig.width = 6, fig.height = 4, echo = FALSE-----------------------------
# pdf(...) or png(...) or other devices, because under this vignette generation, it is
# already under a png() device, I don't need to call `png()` explictly.
ht_list = draw(ht_list)
pos = selectPosition(ht_list, pos = unit(c(3, 3), "cm"))
# remember to dev.off()

## -----------------------------------------------------------------------------
pos

## ---- fig.width = 6, fig.height = 4, eval = FALSE-----------------------------
#  pdf(...)
#  ht_list = draw(ht_list)
#  pos = selectArea(ht_list, pos1 = unit(c(3, 3), "cm"), pos2 = unit(c(5, 5), "cm"))
#  dev.off()

## ---- fig.width = 6, fig.height = 4, echo = FALSE-----------------------------
# pdf(...) or png(...) or other devices
ht_list = draw(ht_list)
pos = selectArea(ht_list, pos1 = unit(c(3, 3), "cm"), pos2 = unit(c(5, 5), "cm"))
# remember to dev.off()

## -----------------------------------------------------------------------------
pos

