R/caption.R

Defines functions add_caption.tracker add_caption.gg caption

Documented in add_caption.gg add_caption.tracker caption

#' @title Add Caption to Tracker
#'
#' @param tracker ggtrack tracker object
#' @param caption \code{character} or \code{grob} to add to footer. Text can be
#' \code{html} or \code{md} and is passed directly to \link[gridtext]{richtext_grob}
#' @param position data.frame generated by get \link[ggtrack]{get_positions}
#' @param ... additional options passed through to \link[gridtext]{richtext_grob}
#'
#' @importFrom gridtext richtext_grob
#' @importFrom ggplot2 annotation_custom
#'
#' @return tracker
#' @export
#'
#' @examples
#' \dontrun{
#'   make_tracker() %>% add_caption('your caption')
#' }
caption <- function(tracker, caption, position, ...) {

  if (is.character(caption)) {
    tg <- richtext_grob(caption, x = 0, hjust = 0, name = 'caption', ...)
  } else if ('grob' %in% class(caption)) {
    tg <- caption
  } else {
    stop('A caption needs to be either text or a "grob"')
  }

  # define position
  p <- as.list(position[position$order == 'C', ])

  tracker +
    annotation_custom(tg, xmin = p$xmin, xmax = p$xmax)

}



#' @rdname caption
#' @family add_caption
#' @family gg
#' @family tracker
#' @export
add_caption <- function (tracker, ...) {
  UseMethod("add_caption", tracker)
}

#' @rdname caption
#' @family add_caption
#' @family gg
#' @export
add_caption.gg <- function(tracker, caption, position, ...) {

  caption(tracker, caption, position, ...)

}

#' @rdname caption
#' @family add_caption
#' @family tracker
#' @export
add_caption.tracker <- function(tracker, caption, ...) {

  height_tracker <- tracker$height
  position <- tracker$pos
  banner <- tracker$track
  git <- tracker$git
  ts <- tracker$ts

  tracker$track <- caption(banner, caption, position, ...)

  mtrack <- obj_tracker(tracker, 'caption')

  return(mtrack)

}
mrjoh3/ggtrack documentation built on Dec. 21, 2021, 10:08 p.m.