in atlas-chart/src/main/scala/com/netflix/atlas/chart/graphics/TimeSeriesStack.scala [45:80]
def draw(g: Graphics2D, x1: Int, y1: Int, x2: Int, y2: Int): Unit = {
val step = xaxis.step
val xscale = xaxis.scale(x1, x2)
val yscale = yaxis.scale(y1, y2)
var t = xaxis.start
while (t < xaxis.end) {
val px1 = xscale(t - step)
val px2 = xscale(t)
val ox = ((t - xaxis.start) / step).toInt
val posY = offsets.posY(ox)
val negY = offsets.negY(ox)
style.configure(g)
ts(t) match {
case v if v == 0.0 && posY == 0.0 && negY == 0.0 =>
// Provides a line along the xaxis to avoid confusion between 0 and NaN (no data)
val py1 = yscale(posY)
g.fillRect(px1, py1, px2 - px1, 1)
case v if v > 0.0 =>
val axisy = yscale(posY)
val py = yscale(v + posY)
val py1 = math.min(axisy, py)
val py2 = math.max(axisy, py) + 1
g.fillRect(px1, py1, px2 - px1, py2 - py1)
offsets.posY(ox) = v + posY
case v if v < 0.0 =>
val axisy = yscale(negY)
val py = yscale(v + negY)
val py1 = math.min(axisy, py)
val py2 = math.max(axisy, py) + 1
g.fillRect(px1, py1, px2 - px1, py2 - py1)
offsets.negY(ox) = v + negY
case _ =>
}
t += step
}
}