jdk/src/solaris/classes/sun/java2d/xr/XRRenderer.java
changeset 14495 358de9aebab7
parent 12393 c88c137e54fc
child 20419 be660188e0b4
equal deleted inserted replaced
14423:3a57240fa374 14495:358de9aebab7
    25 
    25 
    26 package sun.java2d.xr;
    26 package sun.java2d.xr;
    27 
    27 
    28 import java.awt.*;
    28 import java.awt.*;
    29 import java.awt.geom.*;
    29 import java.awt.geom.*;
    30 
       
    31 import sun.awt.SunToolkit;
    30 import sun.awt.SunToolkit;
    32 import sun.java2d.SunGraphics2D;
    31 import sun.java2d.SunGraphics2D;
    33 import sun.java2d.loops.*;
    32 import sun.java2d.loops.*;
    34 import sun.java2d.pipe.Region;
    33 import sun.java2d.pipe.Region;
    35 import sun.java2d.pipe.PixelDrawPipe;
    34 import sun.java2d.pipe.PixelDrawPipe;
    37 import sun.java2d.pipe.ShapeDrawPipe;
    36 import sun.java2d.pipe.ShapeDrawPipe;
    38 import sun.java2d.pipe.SpanIterator;
    37 import sun.java2d.pipe.SpanIterator;
    39 import sun.java2d.pipe.ShapeSpanIterator;
    38 import sun.java2d.pipe.ShapeSpanIterator;
    40 import sun.java2d.pipe.LoopPipe;
    39 import sun.java2d.pipe.LoopPipe;
    41 
    40 
       
    41 import static sun.java2d.xr.XRUtils.clampToShort;
       
    42 import static sun.java2d.xr.XRUtils.clampToUShort;
       
    43 
    42 /**
    44 /**
    43  * XRender provides only accalerated rectangles. To emulate higher "order"
    45  * XRender provides only accalerated rectangles. To emulate higher "order"
    44  *  geometry we have to pass everything else to DoPath/FillSpans.
    46  *  geometry we have to pass everything else to DoPath/FillSpans.
    45  *
    47  *
    46  * TODO: DrawRect could be instrified
    48  * TODO: DrawRect could be instrified
    68                                                sg2d.paint, sg2d);
    70                                                sg2d.paint, sg2d);
    69     }
    71     }
    70 
    72 
    71     public void drawLine(SunGraphics2D sg2d, int x1, int y1, int x2, int y2) {
    73     public void drawLine(SunGraphics2D sg2d, int x1, int y1, int x2, int y2) {
    72         Region compClip = sg2d.getCompClip();
    74         Region compClip = sg2d.getCompClip();
    73         int transX1 = x1 + sg2d.transX;
    75         int transX1 = Region.clipAdd(x1, sg2d.transX);
    74         int transY1 = y1 + sg2d.transY;
    76         int transY1 = Region.clipAdd(y1, sg2d.transY);
    75         int transX2 = x2 + sg2d.transX;
    77         int transX2 = Region.clipAdd(x2, sg2d.transX);
    76         int transY2 = y2 + sg2d.transY;
    78         int transY2 = Region.clipAdd(y2, sg2d.transY);
    77 
    79 
    78         // Non clipped fast path
    80         // Non clipped fast path
    79         if (compClip.contains(transX1, transY1)
    81         if (compClip.contains(transX1, transY1)
    80                 && compClip.contains(transX2, transY2)) {
    82                 && compClip.contains(transX2, transY2)) {
       
    83             SunToolkit.awtLock();
    81             try {
    84             try {
    82                 SunToolkit.awtLock();
       
    83 
       
    84                 validateSurface(sg2d);
    85                 validateSurface(sg2d);
    85                 tileManager.addLine(transX1, transY1, transX2, transY2);
    86                 tileManager.addLine(transX1, transY1, transX2, transY2);
    86                 tileManager.fillMask((XRSurfaceData) sg2d.surfaceData);
    87                 tileManager.fillMask((XRSurfaceData) sg2d.surfaceData);
    87             } finally {
    88             } finally {
    88                 SunToolkit.awtUnlock();
    89                 SunToolkit.awtUnlock();
   113     public void drawPolygon(SunGraphics2D sg2d,
   114     public void drawPolygon(SunGraphics2D sg2d,
   114                             int xpoints[], int ypoints[], int npoints) {
   115                             int xpoints[], int ypoints[], int npoints) {
   115         draw(sg2d, new Polygon(xpoints, ypoints, npoints));
   116         draw(sg2d, new Polygon(xpoints, ypoints, npoints));
   116     }
   117     }
   117 
   118 
   118     public synchronized void fillRect(SunGraphics2D sg2d,
   119     public void fillRect(SunGraphics2D sg2d, int x, int y, int width, int height) {
   119                                       int x, int y, int width, int height) {
   120         x = Region.clipAdd(x, sg2d.transX);
       
   121         y = Region.clipAdd(y, sg2d.transY);
       
   122 
       
   123         /*
       
   124          * Limit x/y to signed short, width/height to unsigned short,
       
   125          * to match the X11 coordinate limits for rectangles.
       
   126          * Correct width/height in case x/y have been modified by clipping.
       
   127          */
       
   128         if (x > Short.MAX_VALUE || y > Short.MAX_VALUE) {
       
   129             return;
       
   130         }
       
   131 
       
   132         int x2 = Region.dimAdd(x, width);
       
   133         int y2 = Region.dimAdd(y, height);
       
   134 
       
   135         if (x2 < Short.MIN_VALUE || y2 < Short.MIN_VALUE) {
       
   136             return;
       
   137         }
       
   138 
       
   139         x = clampToShort(x);
       
   140         y = clampToShort(y);
       
   141         width = clampToUShort(x2 - x);
       
   142         height = clampToUShort(y2 - y);
       
   143 
       
   144         if (width == 0 || height == 0) {
       
   145             return;
       
   146         }
       
   147 
   120         SunToolkit.awtLock();
   148         SunToolkit.awtLock();
   121         try {
   149         try {
   122             validateSurface(sg2d);
   150             validateSurface(sg2d);
   123 
       
   124             XRSurfaceData xrsd = (XRSurfaceData) sg2d.surfaceData;
       
   125 
       
   126             x += sg2d.transform.getTranslateX();
       
   127             y += sg2d.transform.getTranslateY();
       
   128 
       
   129             tileManager.addRect(x, y, width, height);
   151             tileManager.addRect(x, y, width, height);
   130             tileManager.fillMask(xrsd);
   152             tileManager.fillMask((XRSurfaceData) sg2d.surfaceData);
   131 
       
   132         } finally {
   153         } finally {
   133             SunToolkit.awtUnlock();
   154             SunToolkit.awtUnlock();
   134         }
   155         }
   135     }
   156     }
   136 
   157