swt viewport basic functionality
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend
index a7e17f9..fe547bf 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend
@@ -3,21 +3,9 @@
 /**
  * Represents a two-dimensional pixel area.
  */
-class PixelArea {
+interface PixelArea {
 	
-	val PixelRange horizontalPixelRange
-	val PixelRange verticalPixelRange
-	
-	new(int xPixel, int yPixel, int pixelWidth, int pixelHeight) {
-		this.horizontalPixelRange = new PixelRange(xPixel, pixelWidth)
-		this.verticalPixelRange = new PixelRange(yPixel, pixelHeight)
-	}
-	
-	def getHorizontalPixelRange() { horizontalPixelRange }
-	def getVerticalPixelRange() { verticalPixelRange }
-	
-	override toString() {
-		'''[«class.name» x: «horizontalPixelRange.startPixel», y: «verticalPixelRange.startPixel», width: «horizontalPixelRange.pixelSize», height: «verticalPixelRange.pixelSize»]'''
-	}
+	def PixelRange getHorizontalPixelRange()
+	def PixelRange getVerticalPixelRange()
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend
index 3b361d9..ab873c2 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend
@@ -3,25 +3,10 @@
 /**
  * Represents a range of pixels along some linear dimension (e.g. width, height in pixels).
  */
-class PixelRange {
+interface PixelRange {
 	
-	val int startPixel
-	val int endPixel
-	val int pixelSize
-	
-	new(int startPixel, int pixelSize) {
-		this.startPixel = startPixel
-		this.pixelSize = pixelSize
-		
-		this.endPixel = startPixel + pixelSize
-	}
-	
-	def getStartPixel() { startPixel }
-	def getEndPixel() { endPixel }
-	def getPixelSize() { pixelSize }
-	
-	override toString() {
-		'''[«class.name» startPixel: «startPixel», endPixel: «endPixel», size: «pixelSize»]'''
-	}
+	def int getStartPixel()
+	def int getEndPixel()
+	def int getPixelSize()
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
index f4f5617..5e9e11d 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
@@ -34,7 +34,7 @@
 	
 	override getSegmentCount() {
 		val endSegmentPosition = underlyingAxis.getSegmentPositionByPixelLocation(visiblePixelRange.endPixel)
-		endSegmentPosition - originSegmentPosition
+		endSegmentPosition - originSegmentPosition + 1
 	}
 	
 	override getStartPixelOfSegmentPosition(int segmentPosition) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
index fd3e18b..1c8d84d 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
@@ -14,14 +14,17 @@
 	static val int DEFAULT_STYLE_OPTIONS = SWT::NO_BACKGROUND.bitwiseOr(SWT::NO_REDRAW_RESIZE).bitwiseOr(SWT::DOUBLE_BUFFERED).bitwiseOr(SWT::V_SCROLL).bitwiseOr(SWT::H_SCROLL)
 	static val defaultLayerRenderer = new GridLineCellLayerRenderer
 
-	val Layer layer
+	Layer layer
 
-	new(Layer layer, Composite parent) {
-		this(layer, parent, DEFAULT_STYLE_OPTIONS)
+	new(Composite parent) {
+		this(parent, DEFAULT_STYLE_OPTIONS)
 	}
 
-	new(Layer layer, Composite parent, int style) {
+	new(Composite parent, int style) {
 		super(parent, style)
+	}
+	
+	def void setLayer(Layer layer) {
 		this.layer = layer
 		
 		addPaintListener([ PaintEvent event | renderLayer(event.gc) ])
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlHorizontalPixelRange.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlHorizontalPixelRange.xtend
new file mode 100644
index 0000000..0ed5500
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlHorizontalPixelRange.xtend
@@ -0,0 +1,18 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.geometry
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
+import org.eclipse.swt.widgets.Control
+
+class SWTControlHorizontalPixelRange implements PixelRange {
+	
+	val Control control
+	
+	new(Control control) {
+		this.control = control
+	}
+	
+	override getStartPixel() { control.bounds.x }
+	override getPixelSize() { control.bounds.width }
+	override getEndPixel() { startPixel + pixelSize }
+	
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlPixelArea.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlPixelArea.xtend
new file mode 100644
index 0000000..060e742
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlPixelArea.xtend
@@ -0,0 +1,22 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.geometry
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
+import org.eclipse.swt.widgets.Control
+
+class SWTControlPixelArea implements PixelArea {
+	
+	val Control control
+	val PixelRange horizontalPixelRange
+	val PixelRange verticalPixelRange
+	
+	new(Control control) {
+		this.control = control
+		horizontalPixelRange = new SWTControlHorizontalPixelRange(control)
+		verticalPixelRange = new SWTControlVerticalPixelRange(control)
+	}
+	
+	override getHorizontalPixelRange() { horizontalPixelRange }
+	override getVerticalPixelRange() { verticalPixelRange }
+	
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlVerticalPixelRange.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlVerticalPixelRange.xtend
new file mode 100644
index 0000000..2f35be1
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlVerticalPixelRange.xtend
@@ -0,0 +1,18 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.geometry
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
+import org.eclipse.swt.widgets.Control
+
+class SWTControlVerticalPixelRange implements PixelRange {
+	
+	val Control control
+	
+	new(Control control) {
+		this.control = control
+	}
+	
+	override getStartPixel() { control.bounds.y }
+	override getPixelSize() { control.bounds.height }
+	override getEndPixel() { startPixel + pixelSize }
+	
+}
\ No newline at end of file
diff --git a/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend b/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend
index 2606f53..e411bbd 100644
--- a/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend
+++ b/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend
@@ -1,6 +1,8 @@
 package org.eclipse.nebula.widgets.nattable.renderer.swt
 
 import org.eclipse.nebula.widgets.nattable.core.layer.impl.DummyLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
+import org.eclipse.nebula.widgets.nattable.renderer.swt.geometry.SWTControlPixelArea
 import org.eclipse.swt.SWT
 import org.eclipse.swt.layout.FillLayout
 import org.eclipse.swt.widgets.Display
@@ -20,7 +22,7 @@
 		shell.setText("NatTable -> SWT")
 		
 		// Create example control
-		val natTable = new SWTNatTable(layer, shell)
+		val natTable = shell.SWTNatTable
 
 		// Start
 		shell.open
@@ -38,8 +40,13 @@
 		display.dispose
 	}
 	
-	static def getLayer() {
-		new DummyLayer(4, 4, 200, 100)
+	static def getSWTNatTable(Shell shell) {
+		val natTable = new SWTNatTable(shell)
+		
+		val layer = new ViewportLayer(new DummyLayer(4, 4, 200, 100), new SWTControlPixelArea(natTable))
+		natTable.layer = layer
+		
+		natTable
 	}
 	
 }
\ No newline at end of file