blob: 784fb9a55b8330f1b19c32efcadcd4838b6ef078 [file] [log] [blame]
package org.eclipse.nebula.widgets.nattable.core.layer.impl
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
import org.eclipse.nebula.widgets.nattable.core.graphics.Color
import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
import org.eclipse.nebula.widgets.nattable.core.layer.Layer
import org.eclipse.nebula.widgets.nattable.core.layer.cell.Cell
import static java.lang.Math.*
import static extension org.eclipse.nebula.widgets.nattable.core.layer.LayerInvariants.*
class GridLineCellLayerPainter extends CellLayerPainter {
// LayerPainter interface
override paintLayer(Layer layer, PixelArea layerPaintArea, GraphicsContext gc) {
// Draw cells
super.paintLayer(layer, layerPaintArea, gc)
// Draw grid lines
drawGridLines(layer, gc)
}
// CellLayerPainter methods
override protected getAdjustedPixelBounds(Cell cell) {
val pixelBounds = super.getAdjustedPixelBounds(cell)
new PixelRectangle(
pixelBounds.x,
pixelBounds.y,
pixelBounds.width - 1,
pixelBounds.height - 1
)
}
//
def drawGridLines(Layer layer, GraphicsContext gc) {
gc.pushState
gc.foregroundColor = new Color(0, 0, 255)
// Draw
val clipBounds = gc.clipBounds
val pixelWidth = layer.getPixelWidth
val pixelHeight = layer.getPixelHeight
// Draw horizontal grid lines
val fromRowPosition = max(layer.getRowPositionOfYPixel(clipBounds.y) + 1, 1)
val toRowPosition = min(layer.getRowPositionOfYPixel(clipBounds.y + clipBounds.height), layer.rowCount)
if (fromRowPosition <= toRowPosition)
for (rowPosition : fromRowPosition .. toRowPosition) {
val y = layer.getStartYPixelOfRowPosition(rowPosition) - 1
gc.drawLine(
0, y,
pixelWidth, y
)
}
// Draw vertical grid lines
val fromColumnPosition = max(layer.getColumnPositionOfXPixel(clipBounds.x) + 1, 1)
val toColumnPosition = min(layer.getColumnPositionOfXPixel(clipBounds.x + clipBounds.width), layer.columnCount)
if (fromColumnPosition <= toColumnPosition)
for (columnPosition : fromColumnPosition .. toColumnPosition) {
val x = layer.getStartXPixelOfColumnPosition(columnPosition) - 1
gc.drawLine(
x, 0,
x, pixelHeight
)
}
gc.popState
}
}