harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gregory Shimansky <gshiman...@apache.org>
Subject Re: svn commit: r612466 - in /harmony/enhanced/classlib/trunk: depends/build/ modules/awt/src/main/java/common/org/apache/harmony/awt/gl/render/ modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/ modules/awt/src/main/java/unix/org/apache
Date Wed, 16 Jan 2008 17:16:45 GMT
Alexei Zakharov said the following on 16.01.2008 20:12:
> Alexey,
> 
> I am unable to build classlib after your commit:
> 
>  [hy.javac] Compiling 3863 source files to
> /home/ayzakhar/projects/harmony/working_classlib/build/classes
>  [hy.javac] ----------
>  [hy.javac] 1. ERROR in
> /home/ayzakhar/projects/harmony/working_classlib/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java
> (at line 58)
>  [hy.javac]     surface = new PixmapSurface(display, pixmap,
> xconf.info.lock(), w, h);
>  [hy.javac]                   ^^^^^^^^^^^^^
>  [hy.javac] PixmapSurface cannot be resolved to a type
>  [hy.javac] ----------
>  [hy.javac] 1 problem (1 error)
> 
> Looks like you forgot something.

I added missing files from the patch at 612510.

> 2008/1/16, apetrenko@apache.org <apetrenko@apache.org>:
>> Author: apetrenko
>> Date: Wed Jan 16 06:13:14 2008
>> New Revision: 612466
>>
>> URL: http://svn.apache.org/viewvc?rev=612466&view=rev
>> Log:
>> Patch for HARMONY-5394 "[classlib][awt] XBlitter improvements"
>>
>> Modified:
>>     harmony/enhanced/classlib/trunk/depends/build/defines.mk
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/render/JavaBlitter.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/blitter.cpp
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt
>>     harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile
>>
>> Modified: harmony/enhanced/classlib/trunk/depends/build/defines.mk
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/depends/build/defines.mk?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/depends/build/defines.mk (original)
>> +++ harmony/enhanced/classlib/trunk/depends/build/defines.mk Wed Jan 16 06:13:14 2008
>> @@ -27,7 +27,7 @@
>>  CXX_DLL_LD = $(CXX)
>>  STDCLIBS = -lstdc++
>>  OSLIBS = -lc -lm
>> -XLIBS = -L/usr/X11R6/lib -lX11 -lXft
>> +XLIBS = -L/usr/X11R6/lib -lX11 -lXft -lXext
>>  MDLLIBPREFIX = -Xlinker --start-group
>>  MDLLIBSUFFIX = -Xlinker --end-group
>>  EXELDFLAGS = $(LDFLAGS)
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/render/JavaBlitter.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/render/JavaBlitter.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/render/JavaBlitter.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/render/JavaBlitter.java Wed Jan 16 06:13:14 2008
>> @@ -489,9 +489,9 @@
>>
>>          float[] corners = {
>>              x, y,
>> -            x + width, y,
>> -            x + width, y + height,
>> -            x, y + height
>> +            x + width + 1, y,
>> +            x + width + 1, y + height + 1,
>> +            x, y + height + 1
>>          };
>>
>>          at.transform(corners, 0, corners, 0, 4);
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java Wed Jan 16 06:13:14 2008
>> @@ -36,375 +36,188 @@
>>  import org.apache.harmony.awt.nativebridge.linux.X11;
>>  import org.apache.harmony.awt.nativebridge.linux.X11Defs;
>>
>> +import org.apache.harmony.awt.internal.nls.Messages;
>> +
>>  public class XBlitter implements Blitter {
>> +
>>      static final XBlitter inst = new XBlitter();
>>
>>      public static XBlitter getInstance(){
>>          return inst;
>>      }
>> +    public void blit(int srcX, int srcY, Surface srcSurf, int dstX, int dstY,
>> +            Surface dstSurf, int width, int height, AffineTransform sysxform,
>> +            AffineTransform xform, Composite comp, Color bgcolor,
>> +            MultiRectArea clip) {
>> +
>> +        if(xform == null){
>> +            blit(srcX, srcY, srcSurf, dstX, dstY, dstSurf, width, height,
>> +                    sysxform, comp, bgcolor, clip);
>> +        }else{
>> +            double scaleX = xform.getScaleX();
>> +            double scaleY = xform.getScaleY();
>> +            double scaledX = dstX / scaleX;
>> +            double scaledY = dstY / scaleY;
>> +            AffineTransform at = new AffineTransform();
>> +            at.setToTranslation(scaledX, scaledY);
>> +            xform.concatenate(at);
>> +            sysxform.concatenate(xform);
>> +            blit(srcX, srcY, srcSurf, 0, 0, dstSurf, width, height,
>> +                    sysxform, comp, bgcolor, clip);
>> +        }
>> +    }
>>
>> -    public void blit(
>> -            int srcX, int srcY, Surface srcSurf,
>> -            int dstX, int dstY, Surface dstSurf,
>> -            int width, int height,
>> -            AffineTransform sysxform, AffineTransform xform,
>> -            Composite comp, Color bgcolor, MultiRectArea clip
>> -    ) {
>> -        int type = xform.getType();
>> -        switch (type) {
>> -            case AffineTransform.TYPE_TRANSLATION:
>> -                dstX += xform.getTranslateX();
>> -                dstY += xform.getTranslateY();
>> -            case AffineTransform.TYPE_IDENTITY:
>> -                 blit(srcX, srcY, srcSurf, dstX, dstY, dstSurf,
>> -                         width, height, sysxform, comp, bgcolor, clip);
>> -                break;
>> -            default:
>> -                XSurface xDstSurf = (XSurface) dstSurf;
>> -
>> -                BufferedImage compIm;
>> -                int w = srcSurf.getWidth();
>> -                int h = srcSurf.getHeight();
>> -
>> -                if (!(srcSurf instanceof ImageSurface)) {
>> -                    compIm = xDstSurf.g2d.xConfig.createCompatibleImage(w, h);
>> -
>> -                    NativeImageBlitter.getInstance().blit(
>> -                            srcX, srcY, srcSurf,
>> -                            srcX, srcY,
>> -                            AwtImageBackdoorAccessor.getInstance().getImageSurface(compIm),
>> -                            w, h,
>> -                            AlphaComposite.Src, null, null
>> -                    );
>> -                } else {
>> -                    ColorModel cm = srcSurf.getColorModel();
>> -                    compIm = new BufferedImage(
>> -                            cm,
>> -                            srcSurf.getRaster(),
>> -                            cm.isAlphaPremultiplied(),
>> -                            null
>> -                    );
>> -                }
>> -
>> -                WritableRaster compRaster = compIm.getRaster();
>> -
>> -                AffineTransform at = (AffineTransform) sysxform.clone();
>> -                at.concatenate(xform);
>> -
>> -                // Want to transform without translation to fit into destination image
>> -                // Translation will be added then when blitting to final dest surface
>> -                dstX += at.getTranslateX();
>> -                dstY += at.getTranslateY();
>> -                AffineTransform untranslated =
>> -                        AffineTransform.getTranslateInstance(
>> -                                -at.getTranslateX(),
>> -                                -at.getTranslateY()
>> -                        );
>> -                untranslated.concatenate(at);
>> -
>> -                AffineTransformOp atop =
>> -                        new AffineTransformOp(untranslated, xDstSurf.g2d.getRenderingHints());
>> -
>> -                Rectangle r = atop.getBounds2D(compRaster).getBounds();
>> -                int tWidth = r.width;
>> -                int tHeight = r.height;
>> -
>> -                BufferedImage transformed;
>> -                if (compIm.getColorModel().getTransparency() == Transparency.OPAQUE) {
>> -                    transformed = xDstSurf.g2d.xConfig.createCompatibleImage(tWidth, tHeight);
>> -                } else {
>> -                    ColorModel cm = compIm.getColorModel();
>> -                    transformed =
>> -                            new BufferedImage(
>> -                                    cm,
>> -                                    compIm.getRaster().createCompatibleWritableRaster(
>> -                                            tWidth,
>> -                                            tHeight
>> -                                    ),
>> -                                    cm.isAlphaPremultiplied(),
>> -                                    null
>> -                            );
>> -                }
>> -
>> -                atop.filter(compIm, transformed);
>> -
>> -                if (dstX < 0){
>> -                    tWidth += dstX;
>> -                    dstX = 0;
>> -                }
>> +    public void blit(int srcX, int srcY, Surface srcSurf, int dstX, int dstY,
>> +            Surface dstSurf, int width, int height, AffineTransform sysxform, Composite comp,
>> +            Color bgcolor, MultiRectArea clip) {
>> +
>> +
>> +        if(srcSurf.isNativeDrawable()){
>> +            double matrix[] = null;
>> +            if(sysxform != null){
>> +                int type = sysxform.getType();
>> +                switch (type) {
>> +
>> +                    case AffineTransform.TYPE_TRANSLATION:
>> +                        dstX += sysxform.getTranslateX();
>> +                        dstY += sysxform.getTranslateY();
>> +                    case AffineTransform.TYPE_IDENTITY:
>> +                        break;
>> +
>> +                    default:
>> +                        matrix = new double[6];
>> +                        sysxform.getMatrix(matrix);
>> +                        Rectangle transDstBounds = JavaBlitter.getBounds2D(sysxform, new Rectangle(dstX, dstY, width, height)).getBounds();
>> +                        dstX = transDstBounds.x;
>> +                        dstY = transDstBounds.y;
>> +
>> +                        Rectangle transSrcBounds = JavaBlitter.getBounds2D(sysxform, new Rectangle(srcX, srcY, width, height)).getBounds();
>> +                        srcX = transSrcBounds.x;
>> +                        srcY = transSrcBounds.y;
>> +                        width = transSrcBounds.width;
>> +                        height = transSrcBounds.height;
>>
>> -                if (dstY < 0){
>> -                    tHeight += dstY;
>> -                    dstY = 0;
>>                  }
>>
>> -                blit(
>> -                        0, 0, AwtImageBackdoorAccessor.getInstance().getImageSurface(transformed),
>> -                        dstX, dstY, dstSurf,
>> -                        tWidth, tHeight,
>> -                        comp, bgcolor, clip
>> -                );
>> -        }
>> -    }
>>
>> -    public void blit(
>> -            int srcX, int srcY, Surface srcSurf,
>> -            int dstX, int dstY, Surface dstSurf,
>> -            int width, int height,
>> -            AffineTransform sysxform,
>> -            Composite comp, Color bgcolor, MultiRectArea clip
>> -    ) {
>> -        int type = sysxform.getType();
>> -        switch (type) {
>> -            case AffineTransform.TYPE_TRANSLATION:
>> -            case AffineTransform.TYPE_IDENTITY:
>> -                 blit(
>> -                         srcX, srcY, srcSurf,
>> -                         dstX + (int) sysxform.getTranslateX(),
>> -                         dstY + (int) sysxform.getTranslateY(),
>> -                         dstSurf,
>> -                         width, height,
>> -                         comp, bgcolor, clip
>> -                 );
>> -                break;
>> -            default:
>> -                ColorModel cm = srcSurf.getColorModel();
>> -                WritableRaster compRaster = srcSurf.getRaster();
>> -                BufferedImage compIm = new BufferedImage(
>> -                        cm,
>> -                        compRaster,
>> -                        cm.isAlphaPremultiplied(),
>> -                        null
>> -                );
>> -
>> -                Rectangle transDstBounds = JavaBlitter.getBounds2D(sysxform, new Rectangle(dstX, dstY, width, height)).getBounds();
>> -                int tWidth = transDstBounds.width;
>> -                int tHeight = transDstBounds.height;
>> -                int tX = transDstBounds.x;
>> -                int tY = transDstBounds.y;
>> -
>> -                if(tWidth <= 0 || tHeight <= 0) return;
>> -                BufferedImage transformed = new BufferedImage(dstSurf.getWidth(), dstSurf.getHeight(), BufferedImage.TYPE_INT_ARGB);
>> -
>> -                Surface transfSurf = Surface.getImageSurface(transformed);
>> -                JavaBlitter.getInstance().blit(srcX, srcY, Surface.getImageSurface(compIm),
>> -                        dstX, dstY, transfSurf, width, height, sysxform, AlphaComposite.Src, null, null);
>> -                blit(
>> -                        tX, tY, transfSurf,
>> -                        tX, tY, dstSurf,
>> -                        tWidth, tHeight,
>> -                        comp, bgcolor, clip
>> -                );
>> +            }
>>
>> -        }
>> -    }
>> +            long dstSurfStruct = dstSurf.getSurfaceDataPtr();
>> +            long srcSurfStruct = srcSurf.getSurfaceDataPtr();
>> +            int clipRects[] = null;
>> +            int numVertex = 0;
>> +            if(clip != null){
>> +                clipRects = clip.rect;
>> +                numVertex = clipRects[0] - 1;
>> +            }
>>
>> -    public void blit(
>> -            int srcX, int srcY, Surface srcSurf,
>> -            int dstX, int dstY, Surface dstSurf,
>> -            int width, int height,
>> -            Composite comp, Color bgcolor, MultiRectArea clip
>> -    ) {
>> -
>> -        if (clip == null) {
>> -            clip = new MultiRectArea(new Rectangle(dstX, dstY, width, height));
>> -        } else {
>> -            clip = new MultiRectArea(clip);
>> -        }
>> -        // XXX - todo - need to do smth with bgcolor
>> -        ColorModel srcCM = srcSurf.getColorModel();
>> -        XSurface xDstSurf = (XSurface) dstSurf;
>> -
>> -        if (srcSurf.isNativeDrawable() && srcCM.equals(dstSurf.getColorModel())) {
>> -            if (srcSurf instanceof XSurface) { // Blit from native to native
>> -                XSurface xSrcSurf = (XSurface) srcSurf;
>> -
>> -                XGraphics2D g2d = xDstSurf.g2d;
>> -
>> -                if (comp instanceof AlphaComposite) {
>> -                    switch (((AlphaComposite) comp).getRule()) {
>> -                        case AlphaComposite.SRC:
>> -                        case AlphaComposite.SRC_ATOP:
>> -                        case AlphaComposite.SRC_IN:
>> -                        case AlphaComposite.SRC_OVER:
>> -                            break; // GXCopy - is default
>> -                        case AlphaComposite.DST:
>> -                        case AlphaComposite.DST_ATOP:
>> -                        case AlphaComposite.DST_IN:
>> -                        case AlphaComposite.DST_OVER:
>> -                            g2d.setImageGCFunction(X11Defs.GXnoop);
>> -                            break;
>> -                        case AlphaComposite.SRC_OUT: // Clear
>> -                        case AlphaComposite.DST_OUT: // Clear
>> -                        case AlphaComposite.CLEAR:
>> -                        case AlphaComposite.XOR: // Clear
>> -                            g2d.setImageGCFunction(X11Defs.GXclear);
>> -                            break;
>> -                        default: // Do nothing
>> +            if(comp instanceof AlphaComposite){
>> +                AlphaComposite ac = (AlphaComposite) comp;
>> +                int compType = ac.getRule();
>> +                float alpha = ac.getAlpha();
>> +
>> +                if(srcSurf instanceof ImageSurface){
>> +                    Object data = srcSurf.getData();
>> +
>> +                    int dirtyRegions[] = ((ImageSurface) srcSurf).getDirtyRegions();
>> +                    int regCount = 0;
>> +                    if(dirtyRegions != null) regCount = dirtyRegions[0] - 1;
>> +
>> +                    boolean hasBackground = false;
>> +                    int bgc = 0;
>> +
>> +                    if(bgcolor != null && srcSurf.getTransparency() != Transparency.OPAQUE){
>> +                        hasBackground = true;
>> +                        bgc = bgcolor.getRGB();
>>                      }
>> -                } else {
>> -                    imBlit(
>> -                            srcX, srcY, srcSurf,
>> -                            dstX, dstY, dstSurf,
>> -                            width, height,
>> -                            comp, bgcolor, clip
>> -                    );
>> -                    return;
>> -                }
>> -
>> -                // Get translated clip
>> -                makeClip(dstX, dstY, width, height, clip);
>>
>> -                g2d.setXClip(clip, g2d.imageGC);
>> -                X11 x11 = X11.getInstance();
>> -                x11.XCopyArea(
>> -                        g2d.display,
>> -                        xSrcSurf.g2d.drawable, g2d.drawable,
>> -                        g2d.imageGC,
>> -                        srcX, srcY,
>> -                        width, height,
>> -                        dstX, dstY
>> -                );
>> -                x11.XFlush(g2d.display);
>> -                g2d.resetXClip(g2d.imageGC);
>> -
>> -                g2d.setImageGCFunction(X11Defs.GXcopy);
>> -            } else if (srcSurf.getSurfaceType() == BufferedImage.TYPE_CUSTOM) {
>> -                // source is custom image, slow blit
>> -                imBlit(
>> -                        srcX, srcY, srcSurf,
>> -                        dstX, dstY, dstSurf,
>> -                        width, height,
>> -                        comp, bgcolor, clip
>> -                );
>> -            } else { // source could be compatible image
>> -                int srcTransp = srcCM.getTransparency();
>> -                if (srcTransp == Transparency.OPAQUE) {
>> -                    if (comp instanceof AlphaComposite) {
>> -                        AlphaComposite acomp = (AlphaComposite) comp;
>> -                        if (
>> -                                acomp.getRule() == AlphaComposite.SRC ||
>> -                                (acomp.getAlpha() == 1 &&
>> -                                 (acomp.getRule() == AlphaComposite.SRC_OVER ||
>> -                                  acomp.getRule() == AlphaComposite.SRC_ATOP ||
>> -                                  acomp.getRule() == AlphaComposite.SRC_IN)
>> -                                )
>> -                        ) {
>> -                            // Get translated clip
>> -                            makeClip(dstX, dstY, width, height, clip);
>> -                            xDstSurf.putImage(
>> -                                    clip,
>> -                                    srcSurf.getRaster(),
>> -                                    dstX, dstY,
>> -                                    width, height
>> -                            );
>> -                        } else {
>> -                            imBlit(
>> -                                srcX, srcY, srcSurf,
>> -                                dstX, dstY, dstSurf,
>> -                                width, height,
>> -                                comp, bgcolor, clip
>> -                            );
>> -                        }
>> +                    synchronized(data){
>> +                        bltImage(srcX, srcY, srcSurfStruct, srcSurf.getData(),
>> +                             dstX, dstY, dstSurfStruct, width, height,
>> +                             hasBackground, bgc, compType, alpha, matrix,
>> +                             clipRects, numVertex, srcSurf.invalidated(),
>> +                             dirtyRegions, regCount);
>>                      }
>> -
>> -                } else if (srcTransp == Transparency.BITMASK) {
>> -                    // todo - XXX - optimize here - use native clip mask
>> -                    imBlit(
>> -                        srcX, srcY, srcSurf,
>> -                        dstX, dstY, dstSurf,
>> -                        width, height,
>> -                        comp, bgcolor, clip
>> -                    );
>> -                } else { // have to compose in java - no native alpha composite
>> -                    imBlit(
>> -                        srcX, srcY, srcSurf,
>> -                        dstX, dstY, dstSurf,
>> -                        width, height,
>> -                        comp, bgcolor, clip
>> -                    );
>> -                }
>> +                    srcSurf.validate();
>> +                }else{
>> +                    bltPixmap(srcX, srcY, srcSurfStruct,
>> +                            dstX, dstY, dstSurfStruct,
>> +                            width, height, compType, alpha, matrix,
>> +                            clipRects, numVertex);
>> +                }
>> +            }else if(comp instanceof XORComposite){
>> +                XORComposite xcomp = (XORComposite) comp;
>> +                if(srcSurf instanceof ImageSurface){
>> +                    Object data = srcSurf.getData();
>> +
>> +                    int dirtyRegions[] = ((ImageSurface) srcSurf).getDirtyRegions();
>> +                    int regCount = 0;
>> +                    if(dirtyRegions != null) regCount = dirtyRegions[0] - 1;
>> +
>> +                    synchronized(data){
>> +                        xorImage(srcX, srcY, srcSurfStruct, data,
>> +                                dstX, dstY, dstSurfStruct,
>> +                                width, height, xcomp.getXORColor().getRGB(), matrix,
>> +                                clipRects, numVertex,
>> +                                srcSurf.invalidated(), dirtyRegions, regCount);
>> +                    }
>> +                    srcSurf.validate();
>> +                }else{
>> +                    xorPixmap(srcX, srcY, srcSurfStruct,
>> +                            dstX, dstY, dstSurfStruct,
>> +                            width, height, xcomp.getXORColor().getRGB(), matrix,
>> +                            clipRects, numVertex);
>> +                }
>> +            }else{
>> +                // awt.17=Unknown Composite type : {0}
>> +                throw new IllegalArgumentException(Messages.getString("awt.17",  //$NON-NLS-1$
>> +                        comp.getClass()));
>>              }
>> -        } else {
>> -            imBlit(
>> -                    srcX, srcY, srcSurf,
>> -                    dstX, dstY, dstSurf,
>> -                    width, height,
>> -                    comp, bgcolor, clip
>> -            );
>> +        }else{
>> +            BufferedImage bi;
>> +            if(srcSurf.getTransparency() == Transparency.OPAQUE){
>> +                bi = new BufferedImage(srcSurf.getWidth(), srcSurf.getHeight(), BufferedImage.TYPE_INT_RGB);
>> +            }else{
>> +                bi = new BufferedImage(srcSurf.getWidth(), srcSurf.getHeight(), BufferedImage.TYPE_INT_ARGB);
>> +            }
>> +            Surface tmpSurf = AwtImageBackdoorAccessor.getInstance().getImageSurface(bi);
>> +            JavaBlitter.getInstance().blit(0, 0, srcSurf, 0, 0, tmpSurf,
>> +                    srcSurf.getWidth(), srcSurf.getHeight(),
>> +                    AlphaComposite.Src, null, null);
>> +            blit(srcX, srcY, tmpSurf, dstX, dstY, dstSurf,
>> +                    width, height, comp, bgcolor, clip);
>>          }
>>      }
>>
>> -    private static void imBlit(
>> -            int srcX, int srcY, Surface srcSurf,
>> -            int dstX, int dstY, Surface dstSurf,
>> -            int width, int height,
>> -            Composite comp,
>> -            Color bgcolor,
>> -            MultiRectArea clip
>> -    ) {
>> -
>> -        if(dstX < 0){
>> -            width += dstX;
>> -            dstX = 0;
>> -        }
>> -
>> -        if(dstY < 0){
>> -            height += dstY;
>> -            dstY = 0;
>> -        }
>> -
>> -        if(width <= 0 || height <= 0) return;
>> +    // Native methods
>>
>> -        XSurface xDstSurf = ((XSurface) dstSurf);
>> +    public void blit(int srcX, int srcY, Surface srcSurf, int dstX, int dstY,
>> +            Surface dstSurf, int width, int height,
>> +            Composite comp, Color bgcolor, MultiRectArea clip) {
>>
>> -        boolean srcNoAlpha =
>> -                srcSurf.getColorModel().getTransparency() == Transparency.OPAQUE;
>> +        blit(srcX, srcY, srcSurf, dstX, dstY, dstSurf, width, height,
>> +                null, comp, bgcolor, clip);
>> +    }
>>
>> -        if (comp instanceof AlphaComposite) {
>> -            AlphaComposite acomp = (AlphaComposite) comp;
>> -            if (
>> -                    acomp.getRule() == AlphaComposite.SRC ||
>> -                    (srcNoAlpha && acomp.getAlpha() == 1 &&
>> -                     (acomp.getRule() == AlphaComposite.SRC_OVER ||
>> -                      acomp.getRule() == AlphaComposite.SRC_ATOP ||
>> -                      acomp.getRule() == AlphaComposite.SRC_IN)
>> -                    )
>> -            ) {
>> -                xDstSurf.needServerData = false;
>> -            }
>> -        }
>> +    private native void bltImage(int srcX, int srcY, long srsSurfDataPtr,
>> +            Object srcData, int dstX, int dstY, long dstSurfDataPtr,
>> +            int width, int height, boolean hasBackground, int bgcolor, int compType,
>> +            float alpha, double matrix[], int clip[], int numVertex,
>> +            boolean invalidated, int[] dirtyRegions, int regCount);
>>
>> -        Rectangle2D roi = new Rectangle2D.Float(dstX, dstY, width, height);
>> -        xDstSurf.setRoi(roi);
>> -        NativeImageBlitter.getInstance().blit(
>> -                srcX, srcY, srcSurf,
>> -                0, 0, xDstSurf.getImageSurface(),
>> -                width, height,
>> -                comp, bgcolor, null
>> -        );
>> -
>> -        if (xDstSurf.needServerData) {
>> -            xDstSurf.putImage(clip,
>> -                    (int) (roi.getX()),
>> -                    (int) (roi.getY()),
>> -                    (int) roi.getWidth(),
>> -                    (int) roi.getHeight()
>> -            );
>> +    private native void bltPixmap(int srcX, int srcY, long srsSurfDataPtr,
>> +            int dstX, int dstY, long dstSurfDataPtr,
>> +            int width, int height, int compType,
>> +            float alpha, double matrix[], int clip[], int numVertex);
>>
>> -        } else {
>> -            xDstSurf.putImage(clip, dstX, dstY, width, height);
>> -        }
>> +    private native void xorImage(int srcX, int srcY, long srsSurfDataPtr,
>> +            Object srcData, int dstX, int dstY, long dstSurfDataPtr,
>> +            int width, int height, int xorcolor, double matrix[], int clip[],
>> +            int numVertex, boolean invalidated, int[] dirtyRegions, int regCount);
>>
>> -        xDstSurf.needServerData = true;
>> -    }
>> -
>> -    private static void makeClip(
>> -            int dstX, int dstY,
>> -            int width, int height,
>> -            MultiRectArea clip
>> -    ) {
>> -        Rectangle destRect = new Rectangle(dstX, dstY, width, height);
>> -        clip.intersect(destRect);
>> -    }
>> +    private native void xorPixmap(int srcX, int srcY, long srsSurfDataPtr,
>> +            int dstX, int dstY, long dstSurfDataPtr,
>> +            int width, int height, int xorcolor, double matrix[],
>> +            int clip[], int numVertex);
>>  }
>> +
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java Wed Jan 16 06:13:14 2008
>> @@ -66,10 +66,6 @@
>>      boolean xor_mode = false;
>>
>>      boolean indexModel = false;
>> -
>> -    static{
>> -        System.loadLibrary("gl");
>> -    }
>>
>>      public XGraphics2D(long drawable, int tx, int ty, MultiRectArea clip) {
>>          super(tx, ty, clip);
>> @@ -101,6 +97,41 @@
>>          }
>>      }
>>
>> +    public XGraphics2D(XVolatileImage image, int tx, int ty, int width, int height) {
>> +        this(image, tx, ty, new MultiRectArea(new Rectangle(width, height)));
>> +    }
>> +
>> +    public XGraphics2D(XVolatileImage image, int tx, int ty, MultiRectArea clip) {
>> +        super(tx, ty, clip);
>> +        drawable = image.getPixmap();
>> +        xConfig = (XGraphicsConfiguration) getDeviceConfiguration();
>> +        display = xConfig.dev.display;
>> +        gc = createGC(display, drawable);
>> +
>> +        X11.Visual visual = xConfig.info.get_visual();
>> +        xftDraw = createXftDraw(display, drawable, visual.lock());
>> +        visual.unlock();
>> +
>> +        imageGC = createGC(display, drawable);
>> +
>> +        //xSetForeground(argb); // Set default foregroung to black
>> +
>> +        blitter = XBlitter.getInstance();
>> +        Rectangle bounds = clip.getBounds();
>> +        dstSurf = image.getImageSurface();
>> +
>> +        if (!FontManager.IS_FONTLIB) {
>> +            jtr = DrawableTextRenderer.inst;
>> +        }
>> +
>> +        //setTransformedClip(clip);
>> +        setClip(clip);
>> +
>> +        if (xConfig.getColorModel() instanceof IndexColorModel) {
>> +            indexModel = true;
>> +        }
>> +    }
>> +
>>      public XGraphics2D(long drawable, int tx, int ty, int width, int height) {
>>          this(drawable, tx, ty, new MultiRectArea(new Rectangle(width, height)));
>>      }
>> @@ -214,6 +245,9 @@
>>              LinuxNativeFont.freeXftDrawNative(this.xftDraw);
>>              xftDraw = 0;
>>          }
>> +
>> +        if(dstSurf instanceof XSurface)
>> +            dstSurf.dispose();
>>
>>          if (gc != 0) {
>>              freeGC(display, gc);
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java Wed Jan 16 06:13:14 2008
>> @@ -32,255 +32,55 @@
>>  import org.apache.harmony.awt.gl.*;
>>
>>  public class XSurface extends Surface {
>> -    private static final X11 x11 = X11.getInstance();
>> -
>> -    //int width, height; // XXX - todo - use from superclass
>> -
>> -    XGraphics2D g2d;
>> -
>> -    private BufferedImage lastSnapshot = null;
>> -    boolean needServerData = true;
>> -
>> -    private Rectangle2D roi; // Rectangle of interest
>> -
>> -    private ImageSurface imageSurface;
>> -
>> -    // Cached parameters for XCreateImage
>> -    boolean cachedXCIParams = false;
>> -    int depthXCI;
>> -    int offsetXCI;
>> -    int formatXCI;
>> -    int bitmapPadXCI;
>> -    int bytesPerLineXCI;
>> -
>>
>>      XSurface(XGraphics2D g2d, int width, int height) {
>> -        this.g2d = g2d;
>> +        surfaceDataPtr = createSurfData(g2d.display, g2d.drawable, g2d.imageGC, g2d.xConfig.info.lock(), width, height);
>> +        g2d.xConfig.info.unlock();
>>          this.width = width;
>>          this.height = height;
>> -        roi = new Rectangle2D.Float(0, 0, width, height);
>> -    }
>> -
>> -    void setRoi(Rectangle2D roi) {
>> -        this.roi = roi;
>> -    }
>> -
>> -    public ColorModel getColorModel() {
>> -        return g2d.xConfig.getColorModel();
>>      }
>> -
>> -    public WritableRaster getRaster() {
>> -        if (needServerData) {
>> -            long pixmap = x11.XCreatePixmap(
>> -                    g2d.display,
>> -                    x11.XRootWindow(g2d.display, g2d.xConfig.dev.screen),
>> -                    (int) roi.getWidth(), (int) roi.getHeight(),
>> -                    g2d.xConfig.info.get_depth()
>> -            );
>> -
>> -            x11.XCopyArea(
>> -                    g2d.display,
>> -                    g2d.drawable,
>> -                    pixmap,
>> -                    g2d.imageGC,
>> -                    (int) roi.getX(),
>> -                    (int) roi.getY(),
>> -                    (int) roi.getWidth(), (int) roi.getHeight(),
>> -                    0, 0
>> -            );
>> -
>> -            if (!cachedXCIParams) {
>> -                long xImagePtr = x11.XGetImage(
>> -                        g2d.display,
>> -                        pixmap,
>> -                        0, 0,
>> -                        1, 1,
>> -                        ~(0L), // All bits set to 1, should be same as XAllPlanes() result
>> -                        X11Defs.ZPixmap
>> -                );
>> -
>> -                if (xImagePtr == 0) // Check obtained XImage pointer
>> -                    return null;
>> -
>> -                X11.XImage xTmpImage = x11.createXImage(xImagePtr);
>> -                depthXCI = xTmpImage.get_depth();
>> -                formatXCI = xTmpImage.get_format();
>> -                offsetXCI = xTmpImage.get_xoffset();
>> -                bitmapPadXCI = xTmpImage.get_bitmap_pad();
>> -                bytesPerLineXCI = xTmpImage.get_bytes_per_line();
>> -                xTmpImage.get_f().destroy_image(xTmpImage);
>> -
>> -                cachedXCIParams = true;
>> -            }
>> -
>> -            X11.Visual visual = g2d.xConfig.info.get_visual();
>> -
>> -            long xImagePtr = x11.XCreateImage(
>> -                    g2d.display,
>> -                    visual.lock(),
>> -                    depthXCI,
>> -                    formatXCI,
>> -                    offsetXCI,
>> -                    Utils.memaccess.malloc(height*width*bytesPerLineXCI),
>> -                    width, height,
>> -                    bitmapPadXCI,
>> -                    0
>> -            );
>> -            visual.unlock();
>> -
>> -            X11.XImage xImage = x11.createXImage(xImagePtr);
>> -            xImage.set_byte_order(X11Defs.LSBFirst);
>> -
>> -            xImage = x11.XGetSubImage(
>> -                    g2d.display,
>> -                    pixmap,
>> -                    0, 0,
>> -                    (int) roi.getWidth(), (int) roi.getHeight(),
>> -                    ~(0L), // All bits set to 1, should be same as XAllPlanes() result
>> -                    X11Defs.ZPixmap,
>> -                    xImage, 0, 0
>> -            );
>> -            x11.XFreePixmap(g2d.display, pixmap);
>> -            lastSnapshot = XVolatileImage.biFromXImage(xImage, g2d.xConfig);
>> -
>> -            // Cleanup
>> -            xImage.get_f().destroy_image(xImage);
>> -        } else {
>> -            lastSnapshot = g2d.xConfig.createCompatibleImage(width, height);
>> -        }
>> -
>> -        return lastSnapshot.getRaster();
>> -    }
>> -
>> -    void putImage(MultiRectArea clip, int x, int y, int width, int height) {
>> -        putImage(
>> -                clip,
>> -                lastSnapshot.getRaster(),
>> -                x, y, width, height
>> -        );
>> -    }
>> -
>> -    void putImage(
>> -            MultiRectArea clip, Raster r,
>> -            int dstX, int dstY,
>> -            int dstWidth, int dstHeight
>> -    ) {
>> -        if (r == null) // Just blit last snapshot
>> -            r = lastSnapshot.getRaster();
>> -
>> -        Object data;
>> -        AwtImageBackdoorAccessor dbAccess = AwtImageBackdoorAccessor.getInstance();
>> -        data = dbAccess.getData(r.getDataBuffer());
>> -        LockedArray lockedData = Utils.arraccess.lockArrayShort(data);
>> -
>> -        SampleModel sm = r.getSampleModel();
>> -        int scanlineStride;
>> -        if (sm instanceof ComponentSampleModel) {
>> -            scanlineStride = ((ComponentSampleModel) sm).getScanlineStride();
>> -        } else if (sm instanceof SinglePixelPackedSampleModel) {
>> -            scanlineStride = ((SinglePixelPackedSampleModel) sm).getScanlineStride();
>> -        } else if (sm instanceof MultiPixelPackedSampleModel) {
>> -            scanlineStride = ((MultiPixelPackedSampleModel) sm).getScanlineStride();
>> -        } else {
>> -            return;
>> -        }
>> -
>> -        int pad;
>> -        if (data instanceof byte[]) {
>> -            pad = 8;
>> -        } else if (data instanceof short[]) {
>> -            pad = 16;
>> -            scanlineStride *= 2;
>> -        } else if (data instanceof int[]) {
>> -            pad = 32;
>> -            scanlineStride *= 4;
>> -        } else {
>> +    @Override
>> +    public void dispose() {
>> +        if (surfaceDataPtr == 0) {
>>              return;
>>          }
>> -
>> -        X11.Visual visual = g2d.xConfig.info.get_visual();
>> -
>> -        long xImagePtr = x11.XCreateImage(
>> -                g2d.display,
>> -                visual.lock(),
>> -                g2d.xConfig.info.get_depth(),
>> -                X11Defs.ZPixmap,
>> -                0,
>> -                lockedData.getAddress(),
>> -                r.getWidth(),
>> -                r.getHeight(),
>> -                pad,
>> -                scanlineStride
>> -        );
>> -        visual.unlock();
>> -
>> -        g2d.setXClip(clip, g2d.imageGC);
>> -
>> -        X11.XImage xImage = x11.createXImage(xImagePtr);
>> -        xImage.set_byte_order(X11Defs.LSBFirst); // Set byte order explicitly
>> -
>> -        x11.XPutImage(
>> -                g2d.display,
>> -                g2d.drawable,
>> -                g2d.imageGC,
>> -                xImagePtr,
>> -                0, 0,
>> -                dstX, dstY,
>> -                dstWidth, dstHeight
>> -        );
>> -
>> -        g2d.resetXClip(g2d.imageGC);
>> -
>> -        lockedData.release();
>> -
>> -        xImage.set_data(NativeBridge.getInstance().createInt8Pointer(0, true));
>> -        xImage.get_f().destroy_image(xImage);
>> -    }
>> -
>> -    public void dispose() {
>> -        return;
>> -    }
>> -
>> -    public XGraphics2D getGraphics() {
>> -        return g2d;
>> -    }
>> -
>> -    /*
>> -    public int getWidth() { // XXX - todo - use from superclass
>> -        return this.width;
>> -    }
>> -
>> -    public int getHeight() { // XXX - todo - use from superclass
>> -        return this.height;
>> +
>> +        dispose(surfaceDataPtr);
>> +        surfaceDataPtr = 0;
>>      }
>> -    */
>>
>> +    @Override
>>      public long lock() {
>>          return 0;
>>      }
>>
>> +    @Override
>>      public void unlock() {
>> +
>> +    }
>> +
>> +    @Override
>> +    public ColorModel getColorModel() {
>> +        return null;
>>      }
>>
>> -    public boolean isNativeDrawable() {
>> -        return true;
>> +    @Override
>> +    public WritableRaster getRaster() {
>> +        return null;
>>      }
>>
>> +    @Override
>>      public int getSurfaceType() {
>> -        return BufferedImage.TYPE_CUSTOM;
>> +        return 0;
>>      }
>>
>> +    @Override
>>      public Surface getImageSurface() {
>> -        if (imageSurface == null) {
>> -            imageSurface = new ImageSurface(getColorModel(), getRaster());
>> -        } else {
>> -            imageSurface.setRaster(getRaster());
>> -        }
>> -
>> -        return imageSurface;
>> +        return this;
>>      }
>>
>> -    protected void finalize() throws Throwable {
>> -        imageSurface.dispose();
>> -    }
>> +    private native long createSurfData(long display, long drawable, long gc, long visual_info, int width, int height);
>> +
>> +    private native void dispose(long structPtr);
>> +
>>  }
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java Wed Jan 16 06:13:14 2008
>> @@ -39,7 +39,7 @@
>>
>>      private long pixmap;
>>      private XGraphicsConfiguration xconf;
>> -    private XGraphics2D lastGraphics = null;
>> +    Surface surface;
>>
>>      int width, height;
>>
>> @@ -54,6 +54,9 @@
>>                  w, h,
>>                  xconf.info.get_depth()
>>          );
>> +
>> +        surface = new PixmapSurface(display, pixmap, xconf.info.lock(), w, h);
>> +        xconf.info.unlock();
>>      }
>>
>>      public long getPixmap() {
>> @@ -73,8 +76,7 @@
>>      }
>>
>>      public Graphics2D createGraphics() {
>> -        lastGraphics = new XGraphics2D(pixmap, 0, 0, width, height);
>> -        return lastGraphics;
>> +        return new XGraphics2D(this, 0, 0, width, height);
>>      }
>>
>>      public int validate(GraphicsConfiguration graphicsConfiguration) {
>> @@ -278,13 +280,11 @@
>>      }
>>
>>      public void finalize() {
>> +        surface.dispose();
>>          x11.XFreePixmap(xconf.dev.display, pixmap);
>>      }
>>
>>      public Surface getImageSurface() {
>> -        if (lastGraphics == null)
>> -            createGraphics();
>> -
>> -        return lastGraphics.getSurface();
>> +        return surface;
>>      }
>>  }
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java Wed Jan 16 06:13:14 2008
>> @@ -43,7 +43,7 @@
>>      private static final X11 x11 = X11.getInstance();
>>      private static final NativeBridge bridge = NativeBridge.getInstance();
>>
>> -    private final XServerConnection xConnection = new XServerConnection(x11);
>> +    private final XServerConnection xConnection = XServerConnection.getInstance();
>>      private final long display = xConnection.getDisplay();
>>      private final int screen = xConnection.getScreen();
>>      final WindowManager wm;
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java Wed Jan 16 06:13:14 2008
>> @@ -31,8 +31,10 @@
>>
>>      private final X11 x11;
>>
>> -    public XServerConnection(X11 x11) {
>> -        this.x11 = x11;
>> +    private static XServerConnection instance = new XServerConnection();
>> +
>> +    private XServerConnection() {
>> +        this.x11 = X11.getInstance();;
>>          display = x11.XOpenDisplay(0); //0 - we use default display only
>>          if (display == 0) {
>>              String name = System.getProperty("DISPLAY"); //$NON-NLS-1$
>> @@ -40,7 +42,15 @@
>>              throw new InternalError(Messages.getString("awt.0F", //$NON-NLS-1$
>>                      (name != null ? name : ""))); //$NON-NLS-1$
>>          }
>> +
>>          screen = x11.XDefaultScreen(display);
>> +
>> +        System.loadLibrary("gl");
>> +        init(display, screen);
>> +    }
>> +
>> +    public static XServerConnection getInstance(){
>> +        return instance;
>>      }
>>
>>      public void close() {
>> @@ -54,4 +64,6 @@
>>      public int getScreen() {
>>          return screen;
>>      }
>> +
>> +    private native void init(long display, int screen);
>>  }
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp Wed Jan 16 06:13:14 2008
>> @@ -83,6 +83,10 @@
>>              {
>>                  unsigned int *src, *dst;
>>
>> +#ifdef unix
>> +                unsigned int *s, *d;
>> +#endif
>> +
>>                  src_stride = srcSurf->scanline_stride;
>>                  dst_stride = srcSurf->width;
>>
>> @@ -92,7 +96,16 @@
>>                  dst = (unsigned int *)bmpDataPtr + dst_offset;
>>
>>                  for(int _y = 0; _y < h; _y++, src += src_stride, dst += dst_stride){
>> +#ifdef _WIN32
>>                      memcpy(dst, src, w * sizeof(int));
>> +#endif
>> +
>> +#ifdef unix
>> +                    s = src, d = dst;
>> +                    for(int _x = 0; _x < w; _x++, s++, d++){
>> +                        *d = 0xff000000 | *s;
>> +                    }
>> +#endif
>>                  }
>>              }
>>              break;
>> @@ -668,10 +681,11 @@
>>                      env->ReleasePrimitiveArrayCritical(bandOffsets, p, 0);
>>                      break;
>>              }
>> -            surf->bmp_byte_stride = surf->width << 2;
>>              surf->invalidated = true;
>> +            surf->bmp_byte_stride = surf->width << 2;
>>
>>  #ifdef _WIN32
>> +
>>              surf->bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
>>              surf->bmpInfo.bmiHeader.biWidth = surf->width;
>>              surf->bmpInfo.bmiHeader.biHeight = -surf->height;
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h Wed Jan 16 06:13:14 2008
>> @@ -27,9 +27,11 @@
>>  #include <jni.h>
>>
>>  #ifdef _WIN32
>> -
>>  #include "gl_GDIPlus.h"
>> +#endif
>>
>> +#ifdef unix
>> +#include "XSurfaceInfo.h"
>>  #endif
>>
>>  // Color Space constants
>> @@ -146,7 +148,7 @@
>>      bool isAlphaPre;
>>
>>  #ifdef _WIN32
>> -    // VolataileImage
>> +    // WinVolataileImage
>>      GraphicsInfo *gi;
>>      GLBITMAPINFO bmpInfo;
>>
>> @@ -154,6 +156,16 @@
>>      HDC srcDC;
>>      DWORD rtc;
>>      BOOL isTrueColor;
>> +#endif
>> +
>> +#ifdef unix
>> +    // XVolatileImage
>> +    XImage *ximage;
>> +
>> +    Display *display;
>> +    Drawable drawable;
>> +    GC gc;
>> +    XVisualInfo *visual_info;
>>  #endif
>>
>>
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/blitter.cpp
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/blitter.cpp?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/blitter.cpp (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/shared/blitter.cpp Wed Jan 16 06:13:14 2008
>> @@ -1489,6 +1489,94 @@
>>
>>  #endif
>>
>> +#ifdef unix
>> +          if(!srcSurf->ximage){
>> +              if(XImageByteOrder(srcSurf->display) == LSBFirst){
>> +                  srcSurf->ximage = XGetImage(srcSurf->display, srcSurf->drawable, 0, 0,
>> +                     srcSurf->width, srcSurf->height, ~(0L), ZPixmap);
>> +              }else{
>> +                  XImage *tmp = XGetImage(srcSurf->display, srcSurf->drawable, 0, 0,
>> +                      1, 1, ~(0L), ZPixmap);
>> +
>> +                  srcSurf->ximage = XCreateImage(srcSurf->display, srcSurf->visual_info->visual,
>> +                      tmp->depth, tmp->format, tmp->xoffset, (char *)malloc(tmp->width * tmp->height * tmp->bytes_per_line),
>> +                      srcSurf->width, srcSurf->height, tmp->bitmap_pad, 0);
>> +
>> +                  XDestroyImage(tmp);
>> +
>> +                  srcSurf->ximage->byte_order = LSBFirst;
>> +
>> +                  XGetSubImage(srcSurf->display, srcSurf->drawable, 0, 0,
>> +                      srcSurf->width, srcSurf->height, ~(0L), ZPixmap, srcSurf->ximage, 0, 0);
>> +              }
>> +              srcSurf->scanline_stride_byte = srcSurf->ximage->bytes_per_line;
>> +
>> +              char *info = (char *)srcSurf->visual_info;
>> +              int visual_class = (int)*((int *)(info + sizeof(Visual *) + sizeof(VisualID) + sizeof(int) + sizeof(unsigned int)));
>> +              int bpp = srcSurf->ximage->bits_per_pixel;
>> +
>> +              switch(visual_class){
>> +              case TrueColor:
>> +              case DirectColor:
>> +                  if(bpp == 32){
>> +                      srcSurf->scanline_stride = srcSurf->scanline_stride_byte >> 2;
>> +                      if(srcSurf->visual_info->red_mask == 0xff0000 && srcSurf->visual_info->green_mask == 0xff00 &&
>> +                          srcSurf->visual_info->blue_mask == 0xff){
>> +
>> +                          srcSurf->ss_type = INT_RGB;
>> +                          srcSurf->red_mask = 0xff0000;
>> +                          srcSurf->green_mask = 0xff00;
>> +                          srcSurf->blue_mask = 0xff;
>> +                      } else if (srcSurf->visual_info->red_mask == 0xff && srcSurf->visual_info->green_mask == 0xff00 &&
>> +                          srcSurf->visual_info->blue_mask == 0xff0000){
>> +
>> +                          srcSurf->ss_type = INT_BGR;
>> +                          srcSurf->red_mask = 0xff;
>> +                          srcSurf->green_mask = 0xff00;
>> +                          srcSurf->blue_mask = 0xff0000;
>> +                      } else {
>> +                          srcSurf->ss_type = -1;
>> +                      }
>> +                  }else if(bpp == 16){
>> +                      srcSurf->scanline_stride = srcSurf->scanline_stride_byte >> 1;
>> +                      if(srcSurf->visual_info->red_mask == 0x7c00 && srcSurf->visual_info->green_mask == 0x03e0 &&
>> +                          srcSurf->visual_info->blue_mask == 0x1f){
>> +
>> +                          srcSurf->ss_type = USHORT_555;
>> +                          srcSurf->red_mask = 0x7c00;
>> +                          srcSurf->green_mask = 0x03e0;
>> +                          srcSurf->blue_mask = 0x1f;
>> +                      } else if (srcSurf->visual_info->red_mask == 0xf800 && srcSurf->visual_info->green_mask == 0x07e0 &&
>> +                          srcSurf->visual_info->blue_mask == 0x1f){
>> +
>> +                          srcSurf->ss_type = USHORT_565;
>> +                          srcSurf->red_mask = 0xf800;
>> +                          srcSurf->green_mask = 0x07e0;
>> +                          srcSurf->blue_mask = 0x1f;
>> +                      } else {
>> +                          srcSurf->ss_type = -1;
>> +                      }
>> +                  }else{
>> +                          srcSurf->ss_type = -1;
>> +                  }
>> +                  break;
>> +              case StaticGray:
>> +              case PseudoColor:
>> +              case GrayScale:
>> +              case StaticColor:
>> +                  // TODO: Need to implement parsing of others visual types
>> +                  srcSurf->ss_type = -1;
>> +                  break;
>> +              default:
>> +                  srcSurf->ss_type = -1;
>> +              }
>> +          } else {
>> +                 XGetSubImage(srcSurf->display, srcSurf->drawable, 0, 0,
>> +                     srcSurf->width, srcSurf->height, ~(0L), ZPixmap, srcSurf->ximage, 0, 0);
>> +          }
>> +          srcDataPtr = srcSurf->ximage->data;
>> +#endif
>> +          srcType = srcSurf->ss_type;
>>        }else{
>>            srcDataPtr = env->GetPrimitiveArrayCritical((jarray)srcData, 0);
>>        }
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp Wed Jan 16 06:13:14 2008
>> @@ -26,6 +26,7 @@
>>  #include <X11/Xutil.h>
>>  #include <X11/Xos.h>
>>
>> +#include "XSurfaceInfo.h"
>>  #include "org_apache_harmony_awt_gl_linux_XGraphics2D.h"
>>
>>  JNIEXPORT jlong JNICALL
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt Wed Jan 16 06:13:14 2008
>> @@ -32,3 +32,12 @@
>>  Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setForeground
>>  Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setFunction
>>  Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setStroke
>> +Java_org_apache_harmony_awt_gl_linux_XSurface_createSurfData
>> +Java_org_apache_harmony_awt_gl_linux_XSurface_dispose
>> +Java_org_apache_harmony_awt_gl_linux_PixmapSurface_createSurfData
>> +Java_org_apache_harmony_awt_gl_linux_PixmapSurface_dispose
>> +Java_org_apache_harmony_awt_gl_linux_XBlitter_bltImage
>> +Java_org_apache_harmony_awt_gl_linux_XBlitter_bltPixmap
>> +Java_org_apache_harmony_awt_gl_linux_XBlitter_xorImage
>> +Java_org_apache_harmony_awt_gl_linux_XBlitter_xorPixmap
>> +Java_org_apache_harmony_awt_wtk_linux_XServerConnection_init
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile?rev=612466&r1=612465&r2=612466&view=diff
>> ==============================================================================
>> --- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile (original)
>> +++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile Wed Jan 16 06:13:14 2008
>> @@ -25,6 +25,8 @@
>>    $(SHAREDSUB)/LUTTables.o \
>>    $(SHAREDSUB)/pngdecoder.o \
>>    $(SHAREDSUB)/SurfaceDataStructure.o \
>> +  gl.o \
>> +  XBlitter.o \
>>    XGraphics2D.o \
>>    libpng.a
>>
>>
>>
>>


Mime
View raw message