You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2008/01/21 12:55:41 UTC

svn commit: r613858 [2/5] - in /harmony/enhanced/classlib/branches/java6: depends/build/ depends/libs/freebsd.x86/ depends/libs/linux.ia64/ depends/libs/linux.ppc32/ depends/libs/linux.ppc64/ depends/libs/linux.x86.libstdc++6/ depends/libs/linux.x86/ d...

Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XBlitter.java Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XSurface.java Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XVolatileImage.java Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWindowFactory.java Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/XServerConnection.java Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.cpp Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/SurfaceDataStructure.h Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/native/gl/shared/blitter.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/blitter.cpp?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/blitter.cpp (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/shared/blitter.cpp Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/native/gl/unix/exports.txt
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/exports.txt?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/exports.txt (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/exports.txt Mon Jan 21 03:55:17 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/branches/java6/modules/awt/src/main/native/gl/unix/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/makefile?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/makefile (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/unix/makefile Mon Jan 21 03:55:17 2008
@@ -25,6 +25,8 @@
   $(SHAREDSUB)/LUTTables.o \
   $(SHAREDSUB)/pngdecoder.o \
   $(SHAREDSUB)/SurfaceDataStructure.o \
+  gl.o \
+  XBlitter.o \
   XGraphics2D.o \
   libpng.a
 
@@ -36,7 +38,7 @@
 	$(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a \
 	$(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
 
-OSLIBS += $(STDCLIBS)
+OSLIBS += $(STDCLIBS) $(XLIBS)
 
 DLLNAME=../libgl$(HY_SHLIB_SUFFIX)
 EXPNAME=HYGL_0.1

Modified: harmony/enhanced/classlib/branches/java6/modules/instrument/build.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/instrument/build.xml?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/instrument/build.xml (original)
+++ harmony/enhanced/classlib/branches/java6/modules/instrument/build.xml Mon Jan 21 03:55:17 2008
@@ -37,15 +37,6 @@
         </or>
     </fileset>
     
-    <condition property="iculib.zip" 
-        value="${depends.oss}/icu4c-3.4-harmony-windows.x86_64.zip"
-        else="${depends.oss}/icu4c-3.4-harmony.zip">
-        <and>
-            <isset property="is.windows"/>
-            <isset property="is.x86_64"/>
-        </and>
-    </condition>
-
     <property name="instrument.exclude.file" location="${hy.hdk}/build/instrument.exclude" />
 
     <target name="build" depends="compile-java, copy-resources, build-jar" />
@@ -64,16 +55,6 @@
     <!-- internal target for local and global test run sequence -->
     <target name="-test-module" depends="build, compile-tests, prepare-exclude, run-tests" />
 
-    <target name="overlay-oss">
-        <mkdir dir="${hy.instrument.src.main.native}/icu4c/unicode" />
-        <unzip src="${iculib.zip}" dest="${hy.instrument.src.main.native}/icu4c/unicode" />
-        <chmod dir="${hy.instrument.src.main.native}/icu4c/unicode" perm="ugo+r" />
-    </target>
-    
-    <target name="clean-overlay-oss">
-        <delete dir="${hy.instrument.src.main.native}/icu4c" quiet="true" />
-    </target>
-    
     <!-- Build native code -->
     <target name="build-native" >
         <make dir="${hy.instrument.src.main.native}/instrument/${hy.os.family}" />

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/.classpath
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/.classpath?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/.classpath (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/.classpath Mon Jan 21 03:55:17 2008
@@ -1,19 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry output="bin/main" kind="src" path="src/main/java"/>
-	<classpathentry output="bin/test" kind="src" path="src/test/api/windows"/>
-	<classpathentry output="bin/test" kind="src" path="src/test/api/common"/>
-	<classpathentry output="bin/test" kind="src" path="src/test/api/unix"/>
-	<classpathentry output="bin/main" kind="src" path="src/main/resources"/>
-	<classpathentry output="bin/test" kind="src" path="src/test/resources"/>
-    <classpathentry output="bin/test" kind="src" path="src/test/impl/windows"/>
-    <classpathentry output="bin/test" kind="src" path="src/test/impl/common"/>
-    <classpathentry output="bin/test" kind="src" path="src/test/impl/unix"/>
+	<classpathentry kind="src" output="bin/main" path="src/main/java"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/api/windows"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/api/common"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/api/unix"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/resources"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/impl/windows"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/impl/common"/>
+	<classpathentry kind="src" output="bin/test" path="src/test/impl/unix"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
 		<accessrules>
 			<accessrule kind="accessible" pattern="**/*"/>
 		</accessrules>
 	</classpathentry>
-	<classpathentry sourcepath="JUNIT_SRC_HOME/junitsrc.zip" kind="var" path="JUNIT_HOME/junit.jar"/>
+	<classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="JUNIT_SRC_HOME/junitsrc.zip"/>
 	<classpathentry kind="output" path="bin/main"/>
 </classpath>

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.common
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.common?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.common (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.common Mon Jan 21 03:55:17 2008
@@ -1,2 +1,7 @@
-tests/api/java/net/URLClassLoaderTest.java
-tests/api/java/net/ExcludedProxyTest.java
+org/apache/harmony/luni/tests/java/net/URLClassLoaderTest.java
+org/apache/harmony/luni/tests/java/net/ExcludedProxyTest.java
+org/apache/harmony/luni/tests/java/util/CurrencyTest.java
+org/apache/harmony/luni/tests/java/util/FormatterTest.java
+org/apache/harmony/luni/tests/java/util/GregorianCalendarTest.java
+org/apache/harmony/luni/tests/java/util/LocaleTest.java
+org/apache/harmony/luni/tests/java/util/ScannerTest.java

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.drl
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.drl?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.drl (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.drl Mon Jan 21 03:55:17 2008
@@ -1,5 +1,5 @@
 org/apache/harmony/luni/tests/java/lang/ThreadTest.java
-tests/api/java/net/SocketTest.java
+org/apache/harmony/luni/tests/java/net/SocketTest.java
 
 # HARMONY-4043 (was duplicate HARMONY-4753)
 org/apache/harmony/luni/tests/java/lang/SecurityManager2Test.java

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.ibm
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.ibm?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.ibm (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86.ibm Mon Jan 21 03:55:17 2008
@@ -1,4 +1,4 @@
-tests/api/java/util/PropertiesTest.java
+org/apache/harmony/luni/tests/java/util/PropertiesTest.java
 org/apache/harmony/luni/tests/java/lang/SecurityManager2Test.java
 org/apache/harmony/luni/tests/java/lang/PackageTest.java
 org/apache/harmony/luni/tests/java/lang/PackageTest.java

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86_64.drl
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86_64.drl?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86_64.drl (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.linux.x86_64.drl Mon Jan 21 03:55:17 2008
@@ -1,7 +1,7 @@
 org/apache/harmony/luni/tests/java/net/InetAddressTest.java
 org/apache/harmony/luni/tests/java/lang/ThreadTest.java
-tests/api/java/net/SocketTest.java
-tests/api/java/net/MulticastSocketTest.java
+org/apache/harmony/luni/tests/java/net/SocketTest.java
+org/apache/harmony/luni/tests/java/net/MulticastSocketTest.java
 
 # HARMONY-4043 (was duplicate HARMONY-4753)
 org/apache/harmony/luni/tests/java/lang/SecurityManager2Test.java

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86.ibm
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86.ibm?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86.ibm (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86.ibm Mon Jan 21 03:55:17 2008
@@ -1,3 +1,3 @@
-tests/api/java/util/PropertiesTest.java
+org/apache/harmony/luni/tests/java/util/PropertiesTest.java
 org/apache/harmony/luni/tests/java/lang/SecurityManager2Test.java
 org/apache/harmony/luni/tests/java/lang/PackageTest.java

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86_64.drl
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86_64.drl?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86_64.drl (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/make/exclude.windows.x86_64.drl Mon Jan 21 03:55:17 2008
@@ -1,5 +1,5 @@
-tests/api/java/net/MulticastSocketTest.java
-tests/api/java/util/ArrayListTest.java
+org/apache/harmony/luni/tests/java/net/MulticastSocketTest.java
+org/apache/harmony/luni/tests/java/util/ArrayListTest.java
 
 # HARMONY-4043 (was duplicate HARMONY-4753)
 org/apache/harmony/luni/tests/java/lang/SecurityManager2Test.java

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Calendar.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Calendar.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Calendar.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Calendar.java Mon Jan 21 03:55:17 2008
@@ -156,11 +156,13 @@
 	 */
 	protected Calendar(TimeZone timezone, Locale locale) {
 		this(timezone);
-		ResourceBundle bundle = Locale.getBundle("Locale", locale); //$NON-NLS-1$
-		setFirstDayOfWeek(((Integer) bundle.getObject("First_Day")).intValue()); //$NON-NLS-1$
-		setMinimalDaysInFirstWeek(((Integer) bundle.getObject("Minimal_Days")) //$NON-NLS-1$
-				.intValue());
+        com.ibm.icu.util.Calendar icuCalendar = com.ibm.icu.util.Calendar
+                .getInstance(com.ibm.icu.util.SimpleTimeZone
+                        .getTimeZone(timezone.getID()), locale);
+        setFirstDayOfWeek(icuCalendar.getFirstDayOfWeek());
+        setMinimalDaysInFirstWeek(icuCalendar.getMinimalDaysInFirstWeek());
 	}
+
 
 	/**
 	 * Adds the specified amount to a Calendar field.

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Collections.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Collections.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Collections.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Collections.java Mon Jan 21 03:55:17 2008
@@ -1840,7 +1840,7 @@
         if (!(list instanceof RandomAccess)) {
             Object[] array = list.toArray();
             for (int i = array.length - 1; i > 0; i--) {
-                int index = random.nextInt() % (i + 1);
+                int index = random.nextInt(i + 1);
                 if (index < 0) {
                     index = -index;
                 }
@@ -1859,7 +1859,7 @@
         } else {
             List<Object> rawList = (List<Object>) list;
             for (int i = rawList.size() - 1; i > 0; i--) {
-                int index = random.nextInt() % (i + 1);
+                int index = random.nextInt(i + 1);
                 if (index < 0) {
                     index = -index;
                 }

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Currency.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Currency.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Currency.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Currency.java Mon Jan 21 03:55:17 2008
@@ -19,8 +19,6 @@
 
 import java.io.Serializable;
 
-import org.apache.harmony.luni.util.Msg;
-
 /**
  * This class represents a currency as identified in the ISO 4217 currency
  * codes.
@@ -33,10 +31,6 @@
 
     private String currencyCode;
 
-    private static String currencyVars = "EURO, HK, PREEURO"; //$NON-NLS-1$
-
-    private transient int defaultFractionDigits;
-
     /**
      * @param currencyCode
      */
@@ -60,20 +54,7 @@
         Currency currency = codesToCurrencies.get(currencyCode);
 
         if (currency == null) {
-            ResourceBundle bundle = Locale.getBundle(
-                    "ISO4CurrenciesToDigits", Locale.getDefault()); //$NON-NLS-1$
             currency = new Currency(currencyCode);
-
-            String defaultFractionDigits = null;
-            try {
-                defaultFractionDigits = bundle.getString(currencyCode);
-            } catch (MissingResourceException e) {
-                throw new IllegalArgumentException(
-                        org.apache.harmony.luni.util.Msg.getString(
-                                "K0322", currencyCode)); //$NON-NLS-1$
-            }
-            currency.defaultFractionDigits = Integer
-                    .parseInt(defaultFractionDigits);
             codesToCurrencies.put(currencyCode, currency);
         }
 
@@ -91,21 +72,11 @@
      *             if the locale's country is not a supported ISO 3166 Country
      */
     public static Currency getInstance(Locale locale) {
-        String country = locale.getCountry();
-        String variant = locale.getVariant();
-        if (!variant.equals("") && currencyVars.indexOf(variant) > -1) { //$NON-NLS-1$
-            country = country + "_" + variant; //$NON-NLS-1$
-        }
-
-        ResourceBundle bundle = Locale.getBundle(
-                "ISO4Currencies", Locale.getDefault()); //$NON-NLS-1$
-        String currencyCode = null;
-        try {
-            currencyCode = bundle.getString(country);
-        } catch (MissingResourceException e) {
-            throw new IllegalArgumentException(Msg.getString(
-                    "K0323", locale.toString())); //$NON-NLS-1$
+        com.ibm.icu.util.Currency currency = com.ibm.icu.util.Currency.getInstance(locale);
+        if(currency == null) {
+            return null;
         }
+        String currencyCode = currency.getCurrencyCode();
 
         if (currencyCode.equals("None")) { //$NON-NLS-1$
             return null;
@@ -161,35 +132,7 @@
         if (locale.getCountry().equals("")) { //$NON-NLS-1$
             return currencyCode;
         }
-
-        // check in the Locale bundle first, if the local has the same currency
-        ResourceBundle bundle = Locale.getBundle("Locale", locale); //$NON-NLS-1$
-        if (((String) bundle.getObject("IntCurrencySymbol")) //$NON-NLS-1$
-                .equals(currencyCode)) {
-            return (String) bundle.getObject("CurrencySymbol"); //$NON-NLS-1$
-        }
-
-        // search for a Currency bundle
-        bundle = null;
-        try {
-            bundle = Locale.getBundle("Currency", locale); //$NON-NLS-1$
-        } catch (MissingResourceException e) {
-            return currencyCode;
-        }
-
-        // is the bundle found for a different country? (for instance the
-        // default locale's currency bundle)
-        if (!bundle.getLocale().getCountry().equals(locale.getCountry())) {
-            return currencyCode;
-        }
-
-        // check if the currency bundle for this locale
-        // has an entry for this currency
-        String result = (String) bundle.handleGetObject(currencyCode);
-        if (result != null) {
-            return result;
-        }
-        return currencyCode;
+        return com.ibm.icu.util.Currency.getInstance(currencyCode).getSymbol(locale);
     }
 
     /**
@@ -200,7 +143,7 @@
      * @return the default number of fraction digits for this currency
      */
     public int getDefaultFractionDigits() {
-        return defaultFractionDigits;
+        return com.ibm.icu.util.Currency.getInstance(currencyCode).getDefaultFractionDigits();
     }
 
     /**

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Locale.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Locale.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Locale.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Locale.java Mon Jan 21 03:55:17 2008
@@ -24,14 +24,12 @@
 import java.io.ObjectStreamField;
 import java.io.Serializable;
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-import org.apache.harmony.luni.internal.locale.Country;
-import org.apache.harmony.luni.internal.locale.Language;
 import org.apache.harmony.luni.util.PriviAction;
-import org.apache.harmony.luni.util.Util;
+
+import com.ibm.icu.util.ULocale;
 
 /**
  * Locale represents a language/country/variant combination. It is an identifier
@@ -180,6 +178,8 @@
     private transient String languageCode;
     private transient String variantCode;
 
+    private transient ULocale uLocale;
+
 	/**
 	 * Constructs a default which is used during static initialization of the
 	 * default for the platform.
@@ -226,7 +226,14 @@
         if (language == null || country == null || variant == null) {
             throw new NullPointerException();
         }
-        languageCode = Util.toASCIILowerCase(language);
+        if(language.length() == 0 && country.length() == 0){
+            languageCode = "";
+            countryCode = "";
+            variantCode = variant;
+            return;
+        }
+        this.uLocale = new ULocale(language, country, variant);
+        languageCode = uLocale.getLanguage();
         // Map new language codes to the obsolete language
         // codes so the correct resource bundles will be used.
         if (languageCode.equals("he")) {//$NON-NLS-1$
@@ -238,9 +245,9 @@
         }
 
         // countryCode is defined in ASCII character set
-        countryCode = Util.toASCIIUpperCase(country);
+        countryCode = uLocale.getCountry();
 
-        variantCode = variant;
+        variantCode = uLocale.getVariant();
     }
 
 	/**
@@ -377,16 +384,13 @@
 	 * @return an array of Locale
 	 */
 	public static Locale[] getAvailableLocales() {
-		if (availableLocales == null) {
-            availableLocales = AccessController
-                    .doPrivileged(new PrivilegedAction<Locale[]>() {
-                        public Locale[] run() {
-                            return find("org/apache/harmony/luni/internal/locale/Locale_"); //$NON-NLS-1$
+		ULocale[] ulocales =  ULocale.getAvailableLocales();
+        Locale[] locales = new Locale[ulocales.length];
+        for (int i = 0; i < locales.length; i++) {
+            locales[i] = ulocales[i].toLocale();
                         }
-                    });
+        return locales;
         }
-		return availableLocales.clone();
-	}
 
 	/**
 	 * Gets the country code for this Locale.
@@ -427,25 +431,8 @@
 	 * @return a country name
 	 */
 	public String getDisplayCountry(Locale locale) {
-		if (countryCode.length() == 0) {
-            return countryCode;
+		return ULocale.forLocale(this).getDisplayCountry(ULocale.forLocale(locale));
         }
-		try {
-			// First try the specified locale
-			ResourceBundle bundle = getBundle("Country", locale); //$NON-NLS-1$
-			String result = (String) bundle.handleGetObject(countryCode);
-			if (result != null) {
-                return result;
-            }
-			// Now use the default locale
-			if (locale != Locale.getDefault()) {
-                bundle = getBundle("Country", Locale.getDefault()); //$NON-NLS-1$
-            }
-			return bundle.getString(countryCode);
-		} catch (MissingResourceException e) {
-			return countryCode;
-		}
-	}
 
 	/**
 	 * Gets the full language name in the default Locale for the language code
@@ -468,25 +455,8 @@
 	 * @return a language name
 	 */
 	public String getDisplayLanguage(Locale locale) {
-		if (languageCode.length() == 0) {
-            return languageCode;
+        return ULocale.forLocale(this).getDisplayLanguage(ULocale.forLocale(locale));
         }
-		try {
-			// First try the specified locale
-			ResourceBundle bundle = getBundle("Language", locale); //$NON-NLS-1$
-			String result = (String) bundle.handleGetObject(languageCode);
-			if (result != null) {
-                return result;
-            }
-			// Now use the default locale
-			if (locale != Locale.getDefault()) {
-                bundle = getBundle("Language", Locale.getDefault()); //$NON-NLS-1$
-            }
-			return bundle.getString(languageCode);
-		} catch (MissingResourceException e) {
-			return languageCode;
-		}
-	}
 
 	/**
 	 * Gets the full language, country, and variant names in the default Locale
@@ -556,32 +526,8 @@
 	 * @return a variant name
 	 */
 	public String getDisplayVariant(Locale locale) {
-		if (variantCode.length() == 0) {
-            return variantCode;
+        return ULocale.forLocale(this).getDisplayVariant(ULocale.forLocale(locale));
         }
-		ResourceBundle bundle;
-		try {
-			bundle = getBundle("Variant", locale); //$NON-NLS-1$
-		} catch (MissingResourceException e) {
-			return variantCode.replace('_', ',');
-		}
-
-		StringBuffer result = new StringBuffer();
-		StringTokenizer tokens = new StringTokenizer(variantCode, "_"); //$NON-NLS-1$
-		while (tokens.hasMoreTokens()) {
-			String code, variant = tokens.nextToken();
-			try {
-				code = bundle.getString(variant);
-			} catch (MissingResourceException e) {
-				code = variant;
-			}
-			result.append(code);
-			if (tokens.hasMoreTokens()) {
-                result.append(',');
-            }
-		}
-		return result.toString();
-	}
 
 	/**
 	 * Gets the three letter ISO country code which corresponds to the country
@@ -593,12 +539,8 @@
 	 *                when there is no matching three letter ISO country code
 	 */
 	public String getISO3Country() throws MissingResourceException {
-		if (countryCode.length() == 0) {
-            return ""; //$NON-NLS-1$
+        return ULocale.forLocale(this).getISO3Country();
         }
-		ResourceBundle bundle = getBundle("ISO3Countries", this); //$NON-NLS-1$
-		return bundle.getString(countryCode);
-	}
 
 	/**
 	 * Gets the three letter ISO language code which corresponds to the language
@@ -610,12 +552,8 @@
 	 *                when there is no matching three letter ISO language code
 	 */
 	public String getISO3Language() throws MissingResourceException {
-		if (languageCode.length() == 0) {
-            return ""; //$NON-NLS-1$
+        return ULocale.forLocale(this).getISO3Language();
         }
-		ResourceBundle bundle = getBundle("ISO3Languages", this); //$NON-NLS-1$
-		return bundle.getString(languageCode);
-	}
 
 	/**
 	 * Gets the list of two letter ISO country codes which can be used as the
@@ -624,19 +562,8 @@
 	 * @return an array of String
 	 */
 	public static String[] getISOCountries() {
-        ListResourceBundle bundle = new Country();
-
-        // To initialize the table
-        Enumeration<String> keys = bundle.getKeys(); 
-        int size = bundle.table.size();
-        String[] result = new String[size];
-        int index = 0;
-        while (keys.hasMoreElements()) {
-            String element = keys.nextElement();
-            result[index++] = element;
+        return ULocale.getISOCountries();
         }
-        return result;
-    }
 
 	/**
 	 * Gets the list of two letter ISO language codes which can be used as the
@@ -645,16 +572,8 @@
 	 * @return an array of String
 	 */
 	public static String[] getISOLanguages() {
-		ListResourceBundle bundle = new Language();
-        Enumeration<String> keys = bundle.getKeys(); // to initialize the
-                                                        // table
-		String[] result = new String[bundle.table.size()];
-		int index = 0;
-		while (keys.hasMoreElements()) {
-            result[index++] = keys.nextElement();
+        return ULocale.getISOLanguages();
         }
-		return result;
-	}
 
 	/**
 	 * Gets the language code for this Locale.
@@ -732,17 +651,6 @@
 			result.append(variantCode);
 		}
 		return result.toString();
-	}
-
-	static ResourceBundle getBundle(final String clName, final Locale locale) {
-        return AccessController
-                .doPrivileged(new PrivilegedAction<ResourceBundle>() {
-					public ResourceBundle run() {
-                        return ResourceBundle.getBundle(
-                                "org.apache.harmony.luni.internal.locale." //$NON-NLS-1$
-								+ clName, locale);
-					}
-				});
 	}
 
 	private static final ObjectStreamField[] serialPersistentFields = {

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/SimpleTimeZone.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/SimpleTimeZone.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/SimpleTimeZone.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/SimpleTimeZone.java Mon Jan 21 03:55:17 2008
@@ -69,6 +69,10 @@
 
     private int dstSavings = 3600000;
 
+    private transient com.ibm.icu.util.TimeZone icuTZ;
+
+    private boolean isSimple;
+
     /**
      * Constructs a new SimpleTimeZone using the specified offset for standard
      * time from GMT and the specified time zone ID.
@@ -81,6 +85,12 @@
     public SimpleTimeZone(int offset, String name) {
         setID(name);
         rawOffset = offset;
+        icuTZ = com.ibm.icu.util.TimeZone.getTimeZone(name);
+        if (icuTZ instanceof com.ibm.icu.util.SimpleTimeZone) {
+            isSimple = true;
+            icuTZ.setRawOffset(offset);
+        }
+        useDaylight = icuTZ.useDaylightTime();
     }
 
     /**
@@ -159,7 +169,17 @@
     public SimpleTimeZone(int offset, String name, int startMonth,
             int startDay, int startDayOfWeek, int startTime, int endMonth,
             int endDay, int endDayOfWeek, int endTime, int daylightSavings) {
-        this(offset, name);
+        icuTZ = com.ibm.icu.util.TimeZone.getTimeZone(name);
+        if (icuTZ instanceof com.ibm.icu.util.SimpleTimeZone) {
+            isSimple = true;
+            com.ibm.icu.util.SimpleTimeZone tz = (com.ibm.icu.util.SimpleTimeZone)icuTZ;
+            tz.setRawOffset(offset);
+            tz.setStartRule(startMonth, startDay, startDayOfWeek, startTime);
+            tz.setEndRule(endMonth, endDay, endDayOfWeek, endTime);
+            tz.setDSTSavings(daylightSavings);
+        }
+        setID(name);
+        rawOffset = offset;
         if (daylightSavings <= 0) {
             throw new IllegalArgumentException(Msg.getString(
                     "K00e9", daylightSavings)); //$NON-NLS-1$
@@ -168,6 +188,8 @@
 
         setStartRule(startMonth, startDay, startDayOfWeek, startTime);
         setEndRule(endMonth, endDay, endDayOfWeek, endTime);
+        
+        useDaylight = daylightSavings > 0 || icuTZ.useDaylightTime();
     }
 
     /**
@@ -312,123 +334,7 @@
         if (month != Calendar.FEBRUARY || day != 29 || !isLeapYear(year)) {
             checkDay(month, day);
         }
-
-        if (!useDaylightTime() || era != GregorianCalendar.AD
-                || year < startYear) {
-            return rawOffset;
-        }
-        if (endMonth < startMonth) {
-            if (month > endMonth && month < startMonth) {
-                return rawOffset;
-            }
-        } else {
-            if (month < startMonth || month > endMonth) {
-                return rawOffset;
-            }
-        }
-
-        int ruleDay = 0, daysInMonth, firstDayOfMonth = mod7(dayOfWeek - day);
-        if (month == startMonth) {
-            switch (startMode) {
-            case DOM_MODE:
-                ruleDay = startDay;
-                break;
-            case DOW_IN_MONTH_MODE:
-                if (startDay >= 0) {
-                    ruleDay = mod7(startDayOfWeek - firstDayOfMonth) + 1
-                            + (startDay - 1) * 7;
-                } else {
-                    daysInMonth = GregorianCalendar.DaysInMonth[startMonth];
-                    if (startMonth == Calendar.FEBRUARY && isLeapYear(year)) {
-                        daysInMonth += 1;
-                    }
-                    ruleDay = daysInMonth
-                            + 1
-                            + mod7(startDayOfWeek
-                                    - (firstDayOfMonth + daysInMonth))
-                            + startDay * 7;
-                }
-                break;
-            case DOW_GE_DOM_MODE:
-                ruleDay = startDay
-                        + mod7(startDayOfWeek
-                                - (firstDayOfMonth + startDay - 1));
-                break;
-            case DOW_LE_DOM_MODE:
-                ruleDay = startDay
-                        + mod7(startDayOfWeek
-                                - (firstDayOfMonth + startDay - 1));
-                if (ruleDay != startDay) {
-                    ruleDay -= 7;
-                }
-                break;
-            }
-            if (ruleDay > day || ruleDay == day && time < startTime) {
-                return rawOffset;
-            }
-        }
-
-        int ruleTime = endTime - dstSavings;
-        int nextMonth = (month + 1) % 12;
-        if (month == endMonth || (ruleTime < 0 && nextMonth == endMonth)) {
-            switch (endMode) {
-            case DOM_MODE:
-                ruleDay = endDay;
-                break;
-            case DOW_IN_MONTH_MODE:
-                if (endDay >= 0) {
-                    ruleDay = mod7(endDayOfWeek - firstDayOfMonth) + 1
-                            + (endDay - 1) * 7;
-                } else {
-                    daysInMonth = GregorianCalendar.DaysInMonth[endMonth];
-                    if (endMonth == Calendar.FEBRUARY && isLeapYear(year)) {
-                        daysInMonth++;
-                    }
-                    ruleDay = daysInMonth
-                            + 1
-                            + mod7(endDayOfWeek
-                                    - (firstDayOfMonth + daysInMonth)) + endDay
-                            * 7;
-                }
-                break;
-            case DOW_GE_DOM_MODE:
-                ruleDay = endDay
-                        + mod7(endDayOfWeek - (firstDayOfMonth + endDay - 1));
-                break;
-            case DOW_LE_DOM_MODE:
-                ruleDay = endDay
-                        + mod7(endDayOfWeek - (firstDayOfMonth + endDay - 1));
-                if (ruleDay != endDay) {
-                    ruleDay -= 7;
-                }
-                break;
-            }
-
-            int ruleMonth = endMonth;
-            if (ruleTime < 0) {
-                int changeDays = 1 - (ruleTime / 86400000);
-                ruleTime = (ruleTime % 86400000) + 86400000;
-                ruleDay -= changeDays;
-                if (ruleDay <= 0) {
-                    if (--ruleMonth < Calendar.JANUARY) {
-                        ruleMonth = Calendar.DECEMBER;
-                    }
-                    ruleDay += GregorianCalendar.DaysInMonth[ruleMonth];
-                    if (ruleMonth == Calendar.FEBRUARY && isLeapYear(year)) {
-                        ruleDay++;
-                    }
-                }
-            }
-
-            if (month == ruleMonth) {
-                if (ruleDay < day || ruleDay == day && time >= ruleTime) {
-                    return rawOffset;
-                }
-            } else if (nextMonth != ruleMonth) {
-                return rawOffset;
-            }
-        }
-        return rawOffset + dstSavings;
+        return icuTZ.getOffset(era, year, month, day, dayOfWeek, time);
     }
 
     /**
@@ -442,13 +348,7 @@
      */
     @Override
     public int getOffset(long time) {
-        if (!useDaylightTime()) {
-            return rawOffset;
-        }
-        if (daylightSavings == null) {
-            daylightSavings = new GregorianCalendar(this);
-        }
-        return daylightSavings.getOffset(time + rawOffset);
+        return icuTZ.getOffset(time);
     }
 
     /**
@@ -521,15 +421,7 @@
      */
     @Override
     public boolean inDaylightTime(Date time) {
-        // check for null pointer
-        long millis = time.getTime();
-        if (!useDaylightTime()) {
-            return false;
-        }
-        if (daylightSavings == null) {
-            daylightSavings = new GregorianCalendar(this);
-        }
-        return daylightSavings.getOffset(millis + rawOffset) != rawOffset;
+        return icuTZ.inDaylightTime(time);
     }
 
     private boolean isLeapYear(int year) {
@@ -539,11 +431,6 @@
         return year % 4 == 0;
     }
 
-    private int mod7(int num1) {
-        int rem = num1 % 7;
-        return (num1 < 0 && rem < 0) ? 7 + rem : rem;
-    }
-
     /**
      * Sets the daylight savings offset in milliseconds for this SimpleTimeZone.
      * 
@@ -627,6 +514,10 @@
         endDayOfWeek = 0; // Initialize this value for hasSameRules()
         endTime = time;
         setEndMode();
+        if (isSimple) {
+            ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month,
+                    dayOfMonth, time);
+        }
     }
 
     /**
@@ -650,6 +541,10 @@
         endDayOfWeek = dayOfWeek;
         endTime = time;
         setEndMode();
+        if (isSimple) {
+            ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day,
+                    dayOfWeek, time);
+        }
     }
 
     /**
@@ -675,6 +570,10 @@
         endDayOfWeek = -dayOfWeek;
         endTime = time;
         setEndMode();
+        if (isSimple) {
+            ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setEndRule(month, day,
+                    dayOfWeek, time, after);
+        }
     }
 
     /**
@@ -738,6 +637,10 @@
         startDayOfWeek = 0; // Initialize this value for hasSameRules()
         startTime = time;
         setStartMode();
+        if (isSimple) {
+            ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month,
+                    dayOfMonth, time);
+        }
     }
 
     /**
@@ -761,6 +664,10 @@
         startDayOfWeek = dayOfWeek;
         startTime = time;
         setStartMode();
+        if (isSimple) {
+            ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day,
+                    dayOfWeek, time);
+        }
     }
 
     /**
@@ -786,6 +693,10 @@
         startDayOfWeek = -dayOfWeek;
         startTime = time;
         setStartMode();
+        if (isSimple) {
+            ((com.ibm.icu.util.SimpleTimeZone) icuTZ).setStartRule(month, day,
+                    dayOfWeek, time, after);
+        }
     }
 
     /**

Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/TimeZone.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/TimeZone.java?rev=613858&r1=613857&r2=613858&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/TimeZone.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/TimeZone.java Mon Jan 21 03:55:17 2008
@@ -19,6 +19,7 @@
 
 import java.io.Serializable;
 import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.text.DateFormatSymbols;
 
 import org.apache.harmony.luni.util.PriviAction;
@@ -447,6 +448,7 @@
      */
     public static synchronized void setDefault(TimeZone timezone) {
         if (timezone != null) {
+            setICUDefaultTimeZone(timezone);
             Default = timezone;
             return;
         }
@@ -484,6 +486,28 @@
             // if property user.timezone is set in command line (with -D option)
             Default = getTimeZone(zone);
         }
+        setICUDefaultTimeZone(Default);
+    }
+
+    private static void setICUDefaultTimeZone(TimeZone timezone) {
+        final com.ibm.icu.util.TimeZone icuTZ = com.ibm.icu.util.TimeZone
+                .getTimeZone(timezone.getID());
+
+        AccessController
+                .doPrivileged(new PrivilegedAction<java.lang.reflect.Field>() {
+                    public java.lang.reflect.Field run() {
+                        java.lang.reflect.Field field = null;
+                        try {
+                            field = com.ibm.icu.util.TimeZone.class
+                                    .getDeclaredField("defaultZone");
+                            field.setAccessible(true);
+                            field.set("defaultZone", icuTZ);
+                        } catch (Exception e) {
+                            return null;
+                        }
+                        return field;
+                    }
+                });
     }
 
     /**