-> paintArea
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainterTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainterTest.xtend
index 0e3614a..677ae50 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainterTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainterTest.xtend
@@ -49,28 +49,28 @@
 	def void paintEverything() {
 		val clipBounds = testLayer.pixelBounds
 		when(testGC.clipBounds).thenReturn(clipBounds)
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testLayer, 12.times).getCell(anyInt, anyInt)
 	}
 	
 	@Test
 	def void clipBoundsLargerThanLayer() {
 		when(testGC.clipBounds).thenReturn(new PixelRectangle(0, 0, 500, 100))
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testLayer, 12.times).getCell(anyInt, anyInt)
 	}
 	
 	@Test
 	def void paintSome_aligned() {
 		when(testGC.clipBounds).thenReturn(new PixelRectangle(100, 20, 200, 20))
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testLayer, 2.times).getCell(anyInt, anyInt)
 	}
 	
 	@Test
 	def void paintSome_unaligned() {
 		when(testGC.clipBounds).thenReturn(new PixelRectangle(50, 22, 200, 20))
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testLayer, 6.times).getCell(anyInt, anyInt)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainterTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainterTest.xtend
index 3448789..079b64f 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainterTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainterTest.xtend
@@ -42,28 +42,28 @@
 	def void paintEverything() {
 		val clipBounds = testLayer.pixelBounds
 		when(testGC.clipBounds).thenReturn(clipBounds)
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testGC, 7.times).drawLine(anyInt, anyInt, anyInt, anyInt)
 	}
 	
 	@Test
 	def void clipBoundsLargerThanLayer() {
 		when(testGC.clipBounds).thenReturn(new PixelRectangle(0, 0, 500, 100))
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testGC, 7.times).drawLine(anyInt, anyInt, anyInt, anyInt)
 	}
 	
 	@Test
 	def void paintSome_aligned() {
 		when(testGC.clipBounds).thenReturn(new PixelRectangle(100, 20, 200, 20))
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testGC, 3.times).drawLine(anyInt, anyInt, anyInt, anyInt)
 	}
 	
 	@Test
 	def void paintSome_unaligned() {
 		when(testGC.clipBounds).thenReturn(new PixelRectangle(50, 22, 200, 20))
-		layerPainter.paintLayer(testLayer, testLayer.pixelBounds, testGC)
+		layerPainter.paintLayer(testLayer, testLayer.pixelArea, testGC)
 		verify(testGC, 3.times).drawLine(anyInt, anyInt, anyInt, anyInt)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
index b0af94e..d7db4d6 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
@@ -1,8 +1,10 @@
 package org.eclipse.nebula.widgets.nattable.core.layer
 
-import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
 import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
 
+import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
+
 /**
  * A set of useful utility functions that calculate invariants that must hold for any Layer.
  */
@@ -79,4 +81,11 @@
 		)
 	}
 	
+	static def PixelArea getPixelArea(Layer layer) {
+		new PixelArea(
+			layer.pixelWidth,
+			layer.pixelHeight
+		)
+	}
+	
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerPainter.xtend
index 076523d..c2d848e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerPainter.xtend
@@ -1,15 +1,20 @@
 package org.eclipse.nebula.widgets.nattable.core.layer
 
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
 import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
 
 interface LayerPainter<T extends Layer> {
 	
 	/**
-	 * @param layer The layer to render.
-	 * @param layerPaintBounds The rectangular pixel area to paint into. The coordinates of this rectangle are relative to this layer itself.
-	 * @param gc The graphics context to render into.
+	 * Paints the specified layer.
+	 * 
+	 * @param layer The layer to paint.
+	 * @param layerPaintArea The width and height of the rectangular pixel area to be painted into.
+	 * 	 This represents the available area to be painted into, and may be different from the actual layer's area.
+	 *   It also may be different from the clipping region of the gc.
+	 * @param gc The graphics context to paint into.
+	 *   The coordinates of the gc should be offset (translated) to the local coordinate system of the specified layer before being passed in.
 	 */
-	def void paintLayer(T layer, PixelRectangle layerPaintBounds, GraphicsContext gc)
+	def void paintLayer(T layer, PixelArea layerPaintArea, GraphicsContext gc)
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellPainter.xtend
index 706caa5..dc83682 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellPainter.xtend
@@ -1,15 +1,20 @@
 package org.eclipse.nebula.widgets.nattable.core.layer.cell
 
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
 import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
 
 interface CellPainter {
 	
 	/**
+	 * Paints the specified cell.
+	 * 
 	 * @param cell The cell to paint.
-	 * @param cellPaintBounds The rectangular pixel area to paint into. The coordinates of this rectangle are relative to this cell itself.
+	 * @param cellPaintArea The width and height of the rectangular pixel area to be painted into.
+	 * 	 This represents the available area to be painted into, and may be different from the actual cell's area.
+	 *   It also may be different from the clipping region of the gc.
 	 * @param gc The graphics context to paint into.
+	 *   The coordinates of the gc should be offset (translated) to the local coordinate system of the specified cell before being passed in.
 	 */
-	def void paintCell(Cell cell, PixelRectangle cellPaintBounds, GraphicsContext gc)
+	def void paintCell(Cell cell, PixelArea cellPaintArea, GraphicsContext gc)
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend
index f8ae497..ef52265 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend
@@ -1,5 +1,6 @@
 package org.eclipse.nebula.widgets.nattable.core.layer.cell.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
@@ -8,14 +9,14 @@
 
 class TextCellPainter implements CellPainter {
 	
-	override paintCell(Cell cell, PixelRectangle cellPaintBounds, GraphicsContext gc) {
+	override paintCell(Cell cell, PixelArea cellPaintArea, GraphicsContext gc) {
 		gc.backgroundColor = new Color(255, 0, 0)
-		gc.fillRectangle(new PixelRectangle(1, 1, cellPaintBounds.width - 2, cellPaintBounds.height - 2))
+		gc.fillRectangle(new PixelRectangle(1, 1, cellPaintArea.width - 2, cellPaintArea.height - 2))
 		
 		val text = cell.dataValue.toString
 		
-		val centerX = cellPaintBounds.width / 2
-		val centerY = cellPaintBounds.height / 2
+		val centerX = cellPaintArea.width / 2
+		val centerY = cellPaintArea.height / 2
 
 		val textWidth = gc.calculateTextWidth(text)
 
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
index 38a0de7..8fc8f60 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
@@ -1,17 +1,18 @@
 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.GraphicsContext
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 import org.eclipse.nebula.widgets.nattable.core.layer.LayerPainter
 import org.eclipse.nebula.widgets.nattable.core.layer.cell.Cell
+import org.eclipse.nebula.widgets.nattable.core.layer.cell.impl.TextCellPainter
 
 import static java.lang.Math.*
 
 import static extension org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangleInvariants.*
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.LayerInvariants.*
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.cell.CellInvariants.*
-import org.eclipse.nebula.widgets.nattable.core.layer.cell.impl.TextCellPainter
 
 class CellLayerPainter implements LayerPainter<Layer> {
 	
@@ -19,7 +20,8 @@
 	
 	// LayerPainter interface
 
-	override paintLayer(Layer layer, PixelRectangle layerPaintBounds, GraphicsContext gc) {
+	override paintLayer(Layer layer, PixelArea layerPaintArea, GraphicsContext gc) {
+		val layerPixelBounds = new PixelRectangle(0, 0, layerPaintArea.width, layerPaintArea.height)
 		val clipBounds = gc.clipBounds
 		
 		val fromColumnPosition = max(layer.getColumnPositionOfXPixel(clipBounds.x), 0)
@@ -36,10 +38,9 @@
 						gc.pushState
 						
 						val cellPixelBounds = cell.adjustedPixelBounds
-						gc.clipBounds = cellPixelBounds.intersect(new PixelRectangle(0, 0, layerPaintBounds.width, layerPaintBounds.height))
+						gc.clipBounds = cellPixelBounds.intersect(layerPixelBounds)
 						gc.translate(cellPixelBounds.x, cellPixelBounds.y)
-						val localCellPaintBounds = new PixelRectangle(0, 0, cellPixelBounds.width, cellPixelBounds.height)
-						cellPainter.paintCell(cell, localCellPaintBounds, gc)
+						cellPainter.paintCell(cell, new PixelArea(cellPixelBounds.width, cellPixelBounds.height), gc)
 						
 						gc.popState
 					}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
index 88f868a..784fb9a 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
@@ -1,5 +1,6 @@
 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
@@ -14,9 +15,9 @@
 	
 	// LayerPainter interface
 	
-	override paintLayer(Layer layer, PixelRectangle layerPaintBounds, GraphicsContext gc) {
+	override paintLayer(Layer layer, PixelArea layerPaintArea, GraphicsContext gc) {
 		// Draw cells
-		super.paintLayer(layer, layerPaintBounds, gc)
+		super.paintLayer(layer, layerPaintArea, gc)
 		
 		// Draw grid lines
 		drawGridLines(layer, gc)
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerPainter.xtend
index fef68da..8fdc450 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerPainter.xtend
@@ -1,6 +1,7 @@
 package org.eclipse.nebula.widgets.nattable.core.layer.impl.composite
 
 import javax.inject.Inject
+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.GraphicsContext
 import org.eclipse.nebula.widgets.nattable.core.graphics.PainterFactory
@@ -12,7 +13,7 @@
 	
 	@Inject extension PainterFactory
 	
-	override paintLayer(CompositeLayer compositeLayer, PixelRectangle layerPaintBounds, GraphicsContext gc) {
+	override paintLayer(CompositeLayer compositeLayer, PixelArea layerPaintArea, GraphicsContext gc) {
 		var yOffset = 0
 		for (compositeRowPosition : 0 ..< compositeLayer.rows.size) {
 			val compositeRow = compositeLayer.rows.get(compositeRowPosition)
@@ -26,12 +27,12 @@
 				gc.pushState
 				gc.translate(xOffset, yOffset)
 				
-				val pixelWidth = if (isLastCompositeColumn) layerPaintBounds.x + layerPaintBounds.width - xOffset else childLayer.pixelWidth
-				val pixelHeight = if (isLastCompositeRow) layerPaintBounds.y + layerPaintBounds.height - yOffset else childLayer.pixelHeight
-				val childLayerPaintBounds = new PixelRectangle(0, 0, pixelWidth, pixelHeight)
+				val pixelWidth = if (isLastCompositeColumn) layerPaintArea.width - xOffset else childLayer.pixelWidth
+				val pixelHeight = if (isLastCompositeRow) layerPaintArea.height - yOffset else childLayer.pixelHeight
+				val childLayerPaintArea = new PixelArea(pixelWidth, pixelHeight)
 				
-				gc.clipBounds = childLayerPaintBounds
-				childLayer.layerPainter.paintLayer(childLayer, childLayerPaintBounds, gc)
+				gc.clipBounds = new PixelRectangle(0, 0, pixelWidth, pixelHeight)
+				childLayer.layerPainter.paintLayer(childLayer, childLayerPaintArea, gc)
 				gc.popState
 				
 				xOffset = xOffset + childLayer.pixelWidth
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend b/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend
index be221bd..33ff2a2 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend
@@ -2,7 +2,7 @@
 
 import javafx.beans.value.ObservableValue
 import javafx.scene.canvas.Canvas
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 import org.eclipse.nebula.widgets.nattable.core.layer.impl.GridLineCellLayerPainter
 import org.eclipse.nebula.widgets.nattable.renderer.javafx.graphics.JavaFXGraphicsContext
@@ -28,8 +28,8 @@
 	}
 	
 	private def paintLayer() {
-		val paintBounds = new PixelRectangle(boundsInLocal.minX as int, boundsInLocal.minY as int, boundsInLocal.width as int, boundsInLocal.height as int)
-		layer.layerPainter.paintLayer(layer, paintBounds, new JavaFXGraphicsContext(this.graphicsContext2D))
+		val paintArea = new PixelArea(boundsInLocal.width as int, boundsInLocal.height as int)
+		layer.layerPainter.paintLayer(layer, paintArea, new JavaFXGraphicsContext(this.graphicsContext2D))
 	}
 	
 	private def getLayerPainter(Layer layer) {
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
index ba6341c..c9aab90 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
@@ -1,7 +1,7 @@
 package org.eclipse.nebula.widgets.nattable.renderer.swt
 
 import com.google.inject.Injector
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
 import org.eclipse.nebula.widgets.nattable.core.graphics.PainterFactory
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.Mode
@@ -59,8 +59,7 @@
 	}
 	
 	private def paintLayer(GC gc) {
-		val paintBounds = new PixelRectangle(bounds.x, bounds.y, bounds.width, bounds.height)
-		layer?.layerPainter?.paintLayer(layer, paintBounds, new SWTGraphicsContext(this, gc))
+		layer?.layerPainter?.paintLayer(layer, new PixelArea(bounds.width, bounds.height), new SWTGraphicsContext(this, gc))
 	}
 	
 }
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
index 0ea814b..aae940c 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
@@ -1,5 +1,6 @@
 package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
 
+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.GraphicsContext
 import org.eclipse.nebula.widgets.nattable.core.layer.LayerPainter
@@ -17,10 +18,10 @@
 	
 	Canvas viewportCanvas
 	
-	override paintLayer(ViewportLayer viewportLayer, PixelRectangle paintBounds, GraphicsContext gc) {
+	override paintLayer(ViewportLayer viewportLayer, PixelArea layerPaintArea, GraphicsContext gc) {
 		val swtGC = gc as SWTGraphicsContext
 		
-		viewportLayer.visiblePixelRectangle = paintBounds
+		viewportLayer.visiblePixelRectangle = new PixelRectangle(0, 0, layerPaintArea.width, layerPaintArea.height)
 		
 		if (viewportCanvas == null) {
 			viewportCanvas = new Canvas(swtGC.SWTComposite, SWT::H_SCROLL.bitwiseOr(SWT::V_SCROLL))
@@ -29,7 +30,7 @@
 			
 			viewportCanvas.addPaintListener([ event |
 				val swtBounds = viewportCanvas.bounds
-				defaultPainter.paintLayer(viewportLayer, new PixelRectangle(swtBounds.x, swtBounds.y, swtBounds.width, swtBounds.height), new SWTGraphicsContext(viewportCanvas, event.gc))
+				defaultPainter.paintLayer(viewportLayer, new PixelArea(swtBounds.width, swtBounds.height), new SWTGraphicsContext(viewportCanvas, event.gc))
 			])
 			
 			// ScrollBar handlers