#' Edge fill scales
#'
#' This set of scales defines new fill scales for edge geoms equivalent to the
#' ones already defined by ggplot2. The parameters are equivalent to the ones
#' from ggplot2 so there is nothing new under the sun. The different geoms will
#' know whether to use edge scales or the standard scales so it is not necessary
#' to write `edge_fill` in the call to the geom - just use `fill`.
#'
#' @return A ggproto object inheriting from `Scale`
#'
#' @family scale_edge_*
#'
#' @name scale_edge_fill
#' @rdname scale_edge_fill
#'
NULL

#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_hue
#'
#' @export
scale_edge_fill_hue <- function(
  ...,
  h = c(0, 360) + 15,
  c = 100,
  l = 65,
  h.start = 0,
  direction = 1,
  na.value = "grey50",
  aesthetics = "edge_fill"
) {
  scale_fill_hue(
    ...,
    h = h,
    c = c,
    l = l,
    h.start = h.start,
    direction = direction,
    na.value = na.value,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_brewer
#'
#' @export
scale_edge_fill_brewer <- function(
  ...,
  type = "seq",
  palette = 1,
  direction = 1,
  aesthetics = "edge_fill"
) {
  scale_fill_brewer(
    ...,
    type = type,
    palette = palette,
    direction = direction,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_distiller
#'
#' @export
scale_edge_fill_distiller <- function(
  ...,
  type = "seq",
  palette = 1,
  direction = -1,
  values = NULL,
  space = "Lab",
  na.value = "grey50",
  guide = "edge_colourbar",
  aesthetics = "edge_fill"
) {
  scale_color_distiller(
    ...,
    type = type,
    palette = palette,
    direction = direction,
    values = values,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_gradient
#'
#' @export
scale_edge_fill_gradient <- function(
  ...,
  low = "#132B43",
  high = "#56B1F7",
  space = "Lab",
  na.value = "grey50",
  guide = "edge_colourbar",
  aesthetics = "edge_fill"
) {
  scale_fill_gradient(
    ...,
    low = low,
    high = high,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_gradient2
#'
#' @importFrom scales muted
#' @export
scale_edge_fill_gradient2 <- function(
  ...,
  low = muted("red"),
  mid = "white",
  high = muted("blue"),
  midpoint = 0,
  space = "Lab",
  na.value = "grey50",
  guide = "edge_colourbar",
  aesthetics = "edge_fill"
) {
  scale_fill_gradient2(
    ...,
    low = low,
    mid = mid,
    high = high,
    midpoint = midpoint,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_gradientn
#'
#' @export
scale_edge_fill_gradientn <- function(
  ...,
  colours,
  values = NULL,
  space = "Lab",
  na.value = "grey50",
  guide = "edge_colourbar",
  aesthetics = "edge_fill",
  colors
) {
  scale_fill_gradientn(
    ...,
    colours = colours,
    values = values,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics,
    colors = colors
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_grey
#'
#' @export
scale_edge_fill_grey <- function(
  ...,
  start = 0.2,
  end = 0.8,
  na.value = "red",
  aesthetics = "edge_fill"
) {
  scale_fill_grey(
    ...,
    start = start,
    end = end,
    na.value = na.value,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_identity
#'
#' @export
scale_edge_fill_identity <- function(
  ...,
  guide = "none",
  aesthetics = "edge_fill"
) {
  scale_fill_identity(..., guide = guide, aesthetics = aesthetics)
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_manual
#'
#' @export
scale_edge_fill_manual <- function(
  ...,
  values,
  aesthetics = "edge_fill",
  breaks = waiver(),
  na.value = "grey50"
) {
  scale_fill_manual(
    ...,
    values = values,
    aesthetics = aesthetics,
    breaks = breaks,
    na.value = na.value
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams viridis::scale_fill_viridis
#'
#' @importFrom viridis scale_fill_viridis
#' @export
scale_edge_fill_viridis <- function(
  ...,
  alpha = 1,
  begin = 0,
  end = 1,
  direction = 1,
  discrete = FALSE,
  option = "D",
  aesthetics = 'edge_fill'
) {
  scale_fill_viridis(
    ...,
    alpha = alpha,
    begin = begin,
    end = end,
    direction = direction,
    discrete = discrete,
    option = option,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_steps
#' @export
scale_edge_fill_steps <- function(
  ...,
  low = "#132B43",
  high = "#56B1F7",
  space = "Lab",
  na.value = "grey50",
  guide = "edge_coloursteps",
  aesthetics = "edge_fill"
) {
  scale_fill_steps(
    ...,
    low = low,
    high = high,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_steps2
#' @export
scale_edge_fill_steps2 <- function(
  ...,
  low = muted("red"),
  mid = "white",
  high = muted("blue"),
  midpoint = 0,
  space = "Lab",
  na.value = "grey50",
  guide = "edge_coloursteps",
  aesthetics = "edge_fill"
) {
  scale_fill_steps2(
    ...,
    low = low,
    mid = mid,
    high = high,
    midpoint = midpoint,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_stepsn
#' @export
scale_edge_fill_stepsn <- function(
  ...,
  colours,
  values = NULL,
  space = "Lab",
  na.value = "grey50",
  guide = "edge_coloursteps",
  aesthetics = "edge_fill",
  colors
) {
  scale_fill_stepsn(
    ...,
    colours = colours,
    values = values,
    space = space,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics,
    colors = colors
  )
}
#' @rdname scale_edge_fill
#'
#' @inheritParams ggplot2::scale_fill_fermenter
#' @export
scale_edge_fill_fermenter <- function(
  ...,
  type = "seq",
  palette = 1,
  direction = -1,
  na.value = "grey50",
  guide = "edge_coloursteps",
  aesthetics = "edge_fill"
) {
  scale_fill_fermenter(
    ...,
    type = type,
    palette = palette,
    direction = direction,
    na.value = na.value,
    guide = guide,
    aesthetics = aesthetics
  )
}
#' @rdname scale_edge_fill
#'
#' @export
scale_edge_fill_continuous <- scale_edge_fill_gradient
#' @rdname scale_edge_fill
#'
#' @export
scale_edge_fill_discrete <- scale_edge_fill_hue
#' @rdname scale_edge_fill
#'
#' @export
scale_edge_fill_binned <- scale_edge_fill_steps
