Index: trunk/src/com/kitfox/svg/SVGRoot.java
===================================================================
--- trunk/src/com/kitfox/svg/SVGRoot.java	(revision 8084)
+++ trunk/src/com/kitfox/svg/SVGRoot.java	(revision 10787)
@@ -263,4 +263,39 @@
         prepareViewport();
 
+        Rectangle targetViewport = g.getClipBounds();
+
+        Rectangle deviceViewport = diagram.getDeviceViewport();
+        if (width != null && height != null)
+        {
+            float xx, yy, ww, hh;
+            
+            xx = (x == null) ? 0 : StyleAttribute.convertUnitsToPixels(x.getUnits(), x.getValue());
+            if (width.getUnits() == NumberWithUnits.UT_PERCENT)
+            {
+                ww = width.getValue() * deviceViewport.width;
+            }
+            else
+            {
+                ww = StyleAttribute.convertUnitsToPixels(width.getUnits(), width.getValue());
+            }
+            
+            yy = (y == null) ? 0 : StyleAttribute.convertUnitsToPixels(y.getUnits(), y.getValue());
+            if (height.getUnits() == NumberWithUnits.UT_PERCENT)
+            {
+                hh = height.getValue() * deviceViewport.height;
+            }
+            else
+            {
+                hh = StyleAttribute.convertUnitsToPixels(height.getUnits(), height.getValue());
+            }
+            
+            targetViewport = new Rectangle((int)xx, (int)yy, (int)ww, (int)hh);
+        }
+        else
+        {
+            targetViewport = new Rectangle(deviceViewport);
+        }
+        clipRect.setRect(targetViewport);
+
         if (viewBox == null)
         {
@@ -269,11 +304,7 @@
         else
         {
-            Rectangle deviceViewport = g.getClipBounds();
-            //If viewport window is set, we are drawing to entire viewport
-            clipRect.setRect(deviceViewport);
-            
             viewXform.setToIdentity();
-            viewXform.setToTranslation(deviceViewport.x, deviceViewport.y);
-            viewXform.scale(deviceViewport.width, deviceViewport.height);
+            viewXform.setToTranslation(targetViewport.x, targetViewport.y);
+            viewXform.scale(targetViewport.width, targetViewport.height);
             viewXform.scale(1 / viewBox.width, 1 / viewBox.height);
             viewXform.translate(-viewBox.x, -viewBox.y);
