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
