xDetails.utextvpDynamic <- function(x, theta) {
    h <- unit(1, "npc") + unit(.2, "lines")
    grobX(rectGrob(height=h, y=1, just="top",
                   vp=paste0(x$name, ".vp")), theta)
}

yDetails.utextvpDynamic <- function(x, theta) {
    h <- unit(1, "npc") + unit(.2, "lines")
    grobY(rectGrob(height=h, y=1, just="top",
                   vp=paste0(x$name, ".vp")), theta)
}


ug <- utextvpDynamic("underlined text")
grid.draw(ug)
grid.circle(.1, .8, r=unit(1, "mm"), gp=gpar(fill="black"))
grid.segments(.1, .8, 
              grobX("utext", 180), grobY("utext", 270))


grid.rect(gp=gpar(col="grey"))
ug <- utextvpDynamic("underlined text")
grid.draw(ug)
grid.circle(.1, .8, r=unit(1, "mm"), gp=gpar(fill="black"))
grid.segments(.1, .8, 
              grobX("utext", 180), grobY("utext", 270))


