def draw()

in atlas-chart/src/main/scala/com/netflix/atlas/chart/graphics/TimeAxis.scala [84:129]


  def draw(g: Graphics2D, x1: Int, y1: Int, x2: Int, y2: Int): Unit = {
    val txtH = ChartSettings.smallFontDims.height
    val labelPadding = TimeAxis.minTickLabelWidth / 2

    // Horizontal line across the bottom of the chart. The main horizontal line for the axis is
    // made faint so it is easier to see lines in the chart that are directly against the axis.
    style.withAlpha(alpha).configure(g)
    g.drawLine(x1, y1, x2, y1)

    style.configure(g)
    val xscale = scale(x1, x2)
    val majorTicks = ticks(x1, x2).filter(_.major)
    var indicatedTransition = false
    majorTicks.foreach { tick =>
      val px = xscale(tick.timestamp)
      if (px >= x1 && px <= x2) {
        // Vertical tick mark
        g.drawLine(px, y1, px, y1 + 4)

        // Label for the tick mark
        if (tick.timestamp >= transitionTime && !indicatedTransition) {
          indicatedTransition = true
          val before = transition.getOffsetBefore
          val after = transition.getOffsetAfter
          val delta = Duration.ofSeconds(after.getTotalSeconds - before.getTotalSeconds)
          val label = (if (delta.isNegative) "" else "+") + delta.toString.substring(2)
          val txt =
            Text(label, font = ChartSettings.smallFont, style = style.copy(color = Color.RED))
          txt.draw(g, px - labelPadding, y1 + txtH / 2, px + labelPadding, y1 + txtH)
        } else {
          val txt = Text(tick.label, font = ChartSettings.smallFont, style = style)
          txt.draw(g, px - labelPadding, y1 + txtH / 2, px + labelPadding, y1 + txtH)
        }
      }
    }

    // Show short form of time zone as a label for the axis
    if (showZone) {
      val name = zone.getDisplayName(TextStyle.NARROW_STANDALONE, Locale.US)
      val zoneLabel =
        Text(name, font = ChartSettings.smallFont, style = style, alignment = TextAlignment.RIGHT)
      val labelW = (name.length + 2) * ChartSettings.smallFontDims.width
      val padding = labelPadding + 2
      zoneLabel.draw(g, x1 - labelW - padding, y1 + txtH / 2, x1 - padding, y1 + txtH)
    }
  }