< prev index next >

modules/javafx.graphics/src/main/java/com/sun/marlin/Renderer.java

Print this page

        

@@ -41,10 +41,13 @@
     static final float SUBPIXEL_SCALE_X = (float) SUBPIXEL_POSITIONS_X;
     static final float SUBPIXEL_SCALE_Y = (float) SUBPIXEL_POSITIONS_Y;
     static final int SUBPIXEL_MASK_X = SUBPIXEL_POSITIONS_X - 1;
     static final int SUBPIXEL_MASK_Y = SUBPIXEL_POSITIONS_Y - 1;
 
+    private static final float RDR_OFFSET_X = 0.501f / SUBPIXEL_SCALE_X;
+    private static final float RDR_OFFSET_Y = 0.501f / SUBPIXEL_SCALE_Y;
+
     // common to all types of input path segments.
     // OFFSET as bytes
     // only integer values:
     public static final long OFF_CURX_OR  = 0;
     public static final long OFF_ERROR    = OFF_CURX_OR  + SIZE_INT;

@@ -669,38 +672,42 @@
         x0 = x1;
         y0 = y1;
     }
 
     @Override
-    public void curveTo(float x1, float y1,
-            float x2, float y2,
-            float x3, float y3)
+    public void curveTo(float pix_x1, float pix_y1,
+                        float pix_x2, float pix_y2,
+                        float pix_x3, float pix_y3)
     {
-        final float xe = tosubpixx(x3);
-        final float ye = tosubpixy(y3);
-        curve.set(x0, y0, tosubpixx(x1), tosubpixy(y1),
-                          tosubpixx(x2), tosubpixy(y2), xe, ye);
+        final float xe = tosubpixx(pix_x3);
+        final float ye = tosubpixy(pix_y3);
+        curve.set(x0, y0, tosubpixx(pix_x1), tosubpixy(pix_y1),
+                  tosubpixx(pix_x2), tosubpixy(pix_y2), xe, ye);
         curveBreakIntoLinesAndAdd(x0, y0, curve, xe, ye);
         x0 = xe;
         y0 = ye;
     }
 
     @Override
-    public void quadTo(float x1, float y1, float x2, float y2) {
-        final float xe = tosubpixx(x2);
-        final float ye = tosubpixy(y2);
-        curve.set(x0, y0, tosubpixx(x1), tosubpixy(y1), xe, ye);
+    public void quadTo(float pix_x1, float pix_y1,
+                       float pix_x2, float pix_y2)
+    {
+        final float xe = tosubpixx(pix_x2);
+        final float ye = tosubpixy(pix_y2);
+        curve.set(x0, y0, tosubpixx(pix_x1), tosubpixy(pix_y1), xe, ye);
         quadBreakIntoLinesAndAdd(x0, y0, curve, xe, ye);
         x0 = xe;
         y0 = ye;
     }
 
     @Override
     public void closePath() {
-        addLine(x0, y0, sx0, sy0);
-        x0 = sx0;
-        y0 = sy0;
+        if (x0 != sx0 || y0 != sy0) {
+            addLine(x0, y0, sx0, sy0);
+            x0 = sx0;
+            y0 = sy0;
+        }
     }
 
     @Override
     public void pathDone() {
         closePath();

@@ -1550,6 +1557,16 @@
 
     @Override
     public int getOutpixMaxY() {
         return bboxY1;
     }
+
+    @Override
+    public float getOffsetX() {
+        return RDR_OFFSET_X;
+    }
+
+    @Override
+    public float getOffsetY() {
+        return RDR_OFFSET_Y;
+    }
 }
< prev index next >