Return-Path: Delivered-To: apmail-harmony-dev-archive@www.apache.org Received: (qmail 38287 invoked from network); 16 Jan 2008 17:17:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 16 Jan 2008 17:17:33 -0000 Received: (qmail 55713 invoked by uid 500); 16 Jan 2008 17:17:20 -0000 Delivered-To: apmail-harmony-dev-archive@harmony.apache.org Received: (qmail 55688 invoked by uid 500); 16 Jan 2008 17:17:20 -0000 Mailing-List: contact dev-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list dev@harmony.apache.org Received: (qmail 55679 invoked by uid 99); 16 Jan 2008 17:17:20 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Jan 2008 09:17:20 -0800 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of gshimansky@gmail.com designates 72.14.220.157 as permitted sender) Received: from [72.14.220.157] (HELO fg-out-1718.google.com) (72.14.220.157) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Jan 2008 17:16:53 +0000 Received: by fg-out-1718.google.com with SMTP id 16so330041fgg.36 for ; Wed, 16 Jan 2008 09:16:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:user-agent:mime-version:to:subject:references:in-reply-to:content-type:content-transfer-encoding:sender; bh=WeYEmQBeEJrI7wG4EOpbzj2thzjIOYveupa0rsF5tzg=; b=usSfBU2erjmu8ftQzUyFSlO7uWtLRTO0EtJH8NdZinBXp4DZPso7B27ZXpE38HMIF90RaPim8pN1VHJVVpcYyRWsI+aCu3qNoNK+ivfB1OhLg8+2vIbcez9ZdHxCQHomgjhrmYiAVao6eYdcf6rC9UWluFLocX1Jo9tJQyOmkRU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references:in-reply-to:content-type:content-transfer-encoding:sender; b=OQ9EFwtIuvY9Sd51xWKtOjciM5kNq6At8wSdXAnz7YvbkMSPRg6S1xDbkM4oOkCmtNHK9zFnsUDQN+Qu2GJ4+RNwjUF5ezLOHyvzga5cd5U+DL8t79H/GWgt5ipxym4WEKWi7HwuPab3ePZF/TrRs7eed6Nr3KEcyiutDsWOczs= Received: by 10.86.99.9 with SMTP id w9mr941474fgb.22.1200503817566; Wed, 16 Jan 2008 09:16:57 -0800 (PST) Received: from ?127.0.0.1? ( [140.211.11.9]) by mx.google.com with ESMTPS id 3sm1436610fge.7.2008.01.16.09.16.52 (version=SSLv3 cipher=RC4-MD5); Wed, 16 Jan 2008 09:16:55 -0800 (PST) Message-ID: <478E3BFD.6030008@apache.org> Date: Wed, 16 Jan 2008 20:16:45 +0300 From: Gregory Shimansky User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: dev@harmony.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 References: <2c9597b90801160912h117e4db2j5e18069f8c3b921@mail.gmail.com> In-Reply-To: <2c9597b90801160912h117e4db2j5e18069f8c3b921@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: Gregory Shimansky X-Virus-Checked: Checked by ClamAV on apache.org 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 : >> 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 >> >> #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 >> #include >> >> +#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 >> >> >> >>