public void XRRenderRectangles(XRSurfaceData dst, GrowableRectArray rects) {
   if (xorEnabled) {
     con.GCRectangles(dst.getXid(), dst.getGC(), rects);
   } else {
     con.renderRectangles(dst.getPicture(), compRule, solidColor, rects);
   }
 }
  private XRCompositeManager(XRSurfaceData surface) {
    con = new XRBackendNative();
    // con = XRBackendJava.getInstance();

    String gradProp = System.getProperty("sun.java2d.xrgradcache");
    enableGradCache =
        gradProp == null || !(gradProp.equalsIgnoreCase("false") || gradProp.equalsIgnoreCase("f"));

    XRPaints.register(this);

    initResources(surface);

    maskBuffer = new MaskTileManager(this, surface.getXid());
    textRenderer = new XRTextRenderer(this);
    maskImage = new XRMaskImage(this, surface.getXid());
  }
  public void validateCompositeState(
      Composite comp, AffineTransform xform, Paint paint, SunGraphics2D sg2d) {
    boolean updatePaint = (paint != validatedPaint) || paint == null;

    // validate composite
    if ((comp != validatedComp)) {
      if (comp != null) {
        setComposite(comp);
      } else {
        comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
        setComposite(comp);
      }
      // the paint state is dependent on the composite state, so make
      // sure we update the color below
      updatePaint = true;
      validatedComp = comp;
    }

    if (sg2d != null && validatedPixel != sg2d.pixel) {
      validatedPixel = sg2d.pixel;
      setForeground(validatedPixel);
    }

    // validate paint
    if (updatePaint) {
      if (paint != null && sg2d != null && sg2d.paintState >= SunGraphics2D.PAINT_GRADIENT) {
        XRPaints.setPaint(sg2d, paint);
      } else {
        XRResetPaint();
      }
      validatedPaint = paint;
    }

    if (src != solidSrcPict) {
      AffineTransform at = (AffineTransform) xform.clone();
      try {
        at.invert();
      } catch (NoninvertibleTransformException e) {
        at.setToIdentity();
      }
      src.validateAsSource(at, -1, -1);
    }
  }
  public void initResources(XRSurfaceData surface) {
    int parentXid = surface.getXid();

    int solidPixmap = con.createPixmap(parentXid, 32, 1, 1);
    int solidSrcPictXID = con.createPicture(solidPixmap, XRUtils.PictStandardARGB32);
    con.setPictureRepeat(solidSrcPictXID, XRUtils.RepeatNormal);
    con.renderRectangle(solidSrcPictXID, XRUtils.PictOpSrc, XRColor.FULL_ALPHA, 0, 0, 1, 1);
    solidSrcPict = new XRSurfaceData.XRInternalSurfaceData(con, solidSrcPictXID, null);
    setForeground(0);

    int extraAlphaMask = con.createPixmap(parentXid, 8, 1, 1);
    alphaMaskPict = con.createPicture(extraAlphaMask, XRUtils.PictStandardA8);
    con.setPictureRepeat(alphaMaskPict, XRUtils.RepeatNormal);
    con.renderRectangle(alphaMaskPict, XRUtils.PictOpClear, XRColor.NO_ALPHA, 0, 0, 1, 1);

    if (enableGradCache) {
      gradCachePixmap =
          con.createPixmap(parentXid, 32, MaskTileManager.MASK_SIZE, MaskTileManager.MASK_SIZE);
      gradCachePicture = con.createPicture(gradCachePixmap, XRUtils.PictStandardARGB32);
    }
  }