You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/08/15 05:05:22 UTC
svn commit: r566010 - in /harmony/enhanced/classlib/branches/java6/modules:
awt/src/main/java/common/java/awt/
awt/src/main/java/common/org/apache/harmony/awt/gl/
awt/src/main/java/common/org/apache/harmony/awt/gl/image/
awt/src/main/java/common/org/ap...
Author: pyang
Date: Tue Aug 14 20:05:21 2007
New Revision: 566010
URL: http://svn.apache.org/viewvc?view=rev&rev=566010
Log:
Merge updates from classlib trunk@565677 since r564086
Added:
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/LockingKeys.cpp
- copied unchanged from r565677, harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/windows/LockingKeys.cpp
Modified:
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/java/awt/Toolkit.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/CommonGraphics2D.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/image/BufferedImageGraphics2D.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/wtk/WTK.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWTK.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/windows/org/apache/harmony/awt/wtk/windows/WinWTK.java
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.cpp
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.h
harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/makefile
harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/HashMap.java
harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/LinkedHashMap.java
harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Random.java
harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/HashMapTest.java
harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/LinkedHashMapTest.java
harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/RandomTest.java
harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/JOptionPane.java
harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/HTMLDocument.java
harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java
harmony/enhanced/classlib/branches/java6/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/java/awt/Toolkit.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/java/awt/Toolkit.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/java/awt/Toolkit.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/java/awt/Toolkit.java Tue Aug 14 20:05:21 2007
@@ -28,6 +28,7 @@
import java.awt.event.AWTEventListener;
import java.awt.event.AWTEventListenerProxy;
import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
import java.awt.im.InputMethodHighlight;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
@@ -795,16 +796,16 @@
}
}
- public boolean getLockingKeyState(int a0) throws UnsupportedOperationException, org.apache.harmony.luni.util.NotImplementedException {
- lockAWT();
- try {
- } finally {
- unlockAWT();
- }
- if (true) {
- throw new RuntimeException("Method is not implemented"); //TODO: implement //$NON-NLS-1$
+ public boolean getLockingKeyState(int keyCode) throws UnsupportedOperationException {
+
+ if (keyCode != KeyEvent.VK_CAPS_LOCK &&
+ keyCode != KeyEvent.VK_NUM_LOCK &&
+ keyCode != KeyEvent.VK_SCROLL_LOCK &&
+ keyCode != KeyEvent.VK_KANA_LOCK) {
+ throw new IllegalArgumentException();
}
- return true;
+
+ return wtk.getLockingState(keyCode);
}
public int getMaximumCursorColors() throws HeadlessException {
@@ -952,16 +953,16 @@
}
}
- public void setLockingKeyState(int a0, boolean a1) throws UnsupportedOperationException, org.apache.harmony.luni.util.NotImplementedException {
- lockAWT();
- try {
- } finally {
- unlockAWT();
- }
- if (true) {
- throw new RuntimeException("Method is not implemented"); //TODO: implement //$NON-NLS-1$
+ public void setLockingKeyState(int keyCode, boolean on) throws UnsupportedOperationException {
+
+ if (keyCode != KeyEvent.VK_CAPS_LOCK &&
+ keyCode != KeyEvent.VK_NUM_LOCK &&
+ keyCode != KeyEvent.VK_SCROLL_LOCK &&
+ keyCode != KeyEvent.VK_KANA_LOCK) {
+ throw new IllegalArgumentException();
}
- return;
+
+ wtk.setLockingState(keyCode, on);
}
void onQueueEmpty() {
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/CommonGraphics2D.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/CommonGraphics2D.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/CommonGraphics2D.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/CommonGraphics2D.java Tue Aug 14 20:05:21 2007
@@ -654,70 +654,6 @@
drawString(str, (float)x, (float)y);
}
- @Override
- public void drawString(String str, float x, float y) {
- if (debugOutput) {
- System.err.println("CommonGraphics2D.drawString("+str+", "+x+", "+y+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- }
-
- AffineTransform at = (AffineTransform)this.getTransform().clone();
- AffineTransform fontTransform = font.getTransform();
- at.concatenate(fontTransform);
-
- if (!at.isIdentity()){
- // TYPE_TRANSLATION
- if (at.getType() == AffineTransform.TYPE_TRANSLATION){
- jtr.drawString(this, str,
- (float)(x+fontTransform.getTranslateX()),
- (float)(y+fontTransform.getTranslateY()));
- return;
- }
- // TODO: we use slow type of drawing strings when Font object
- // in Graphics has transforms, we just fill outlines. New textrenderer
- // is to be implemented.
- Shape sh = font.createGlyphVector(this.getFontRenderContext(), str).getOutline(x, y);
- fill(sh);
- } else {
- jtr.drawString(this, str, x, y);
- }
-
- }
-
- @Override
- public void drawGlyphVector(GlyphVector gv, float x, float y) {
-
- AffineTransform at = gv.getFont().getTransform();
-
- double[] matrix = new double[6];
- if ((at != null) && (!at.isIdentity())){
-
- int atType = at.getType();
- at.getMatrix(matrix);
-
- // TYPE_TRANSLATION
- if ((atType == AffineTransform.TYPE_TRANSLATION) &&
- ((gv.getLayoutFlags() & GlyphVector.FLAG_HAS_TRANSFORMS) == 0)){
- jtr.drawGlyphVector(this, gv, (int)(x+matrix[4]), (int)(y+matrix[5]));
- return;
- }
- } else {
- if (((gv.getLayoutFlags() & GlyphVector.FLAG_HAS_TRANSFORMS) == 0)){
- jtr.drawGlyphVector(this, gv, x, y);
- return;
- }
- }
-
- // TODO: we use slow type of drawing strings when Font object
- // in Graphics has transforms, we just fill outlines. New textrenderer
- // is to be implemented.
-
- Shape sh = gv.getOutline(x, y);
- this.fill(sh);
-
- }
-
-
-
/***************************************************************************
*
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/image/BufferedImageGraphics2D.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/image/BufferedImageGraphics2D.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/image/BufferedImageGraphics2D.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/gl/image/BufferedImageGraphics2D.java Tue Aug 14 20:05:21 2007
@@ -23,6 +23,8 @@
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.font.GlyphVector;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
@@ -75,5 +77,17 @@
public WritableRaster getWritableRaster() {
return bi.getRaster();
+ }
+
+ @Override
+ public void drawString(String str, float x, float y) {
+ Shape sh = font.createGlyphVector(this.getFontRenderContext(), str).getOutline(x, y);
+ fill(sh);
+ }
+
+ @Override
+ public void drawGlyphVector(GlyphVector gv, float x, float y) {
+ Shape sh = gv.getOutline(x, y);
+ this.fill(sh);
}
}
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/wtk/WTK.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/wtk/WTK.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/wtk/WTK.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/common/org/apache/harmony/awt/wtk/WTK.java Tue Aug 14 20:05:21 2007
@@ -58,4 +58,10 @@
* @return implementation of NativeIM
*/
public abstract NativeIM getNativeIM();
+
+ /**
+ * Perform platform specific operations with locking keys.
+ */
+ public abstract boolean getLockingState(int keyCode);
+ public abstract void setLockingState(int keyCode, boolean on);
}
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?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- 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 Tue Aug 14 20:05:21 2007
@@ -24,6 +24,7 @@
package org.apache.harmony.awt.gl.linux;
import java.awt.*;
+import java.awt.font.GlyphVector;
import java.awt.image.IndexColorModel;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
@@ -530,5 +531,62 @@
} else {
simpleComposite = false;
}
+ }
+
+ @Override
+ public void drawString(String str, float x, float y) {
+ AffineTransform at = (AffineTransform)this.getTransform().clone();
+ AffineTransform fontTransform = font.getTransform();
+ at.concatenate(fontTransform);
+
+ if (!at.isIdentity()){
+ // TYPE_TRANSLATION
+ if (at.getType() == AffineTransform.TYPE_TRANSLATION){
+ jtr.drawString(this, str,
+ (float)(x+fontTransform.getTranslateX()),
+ (float)(y+fontTransform.getTranslateY()));
+ return;
+ }
+ // TODO: we use slow type of drawing strings when Font object
+ // in Graphics has transforms, we just fill outlines. New textrenderer
+ // is to be implemented.
+ Shape sh = font.createGlyphVector(this.getFontRenderContext(), str).getOutline(x, y);
+ fill(sh);
+ } else {
+ jtr.drawString(this, str, x, y);
+ }
+ }
+
+ @Override
+ public void drawGlyphVector(GlyphVector gv, float x, float y) {
+
+ AffineTransform at = gv.getFont().getTransform();
+
+ double[] matrix = new double[6];
+ if ((at != null) && (!at.isIdentity())){
+
+ int atType = at.getType();
+ at.getMatrix(matrix);
+
+ // TYPE_TRANSLATION
+ if ((atType == AffineTransform.TYPE_TRANSLATION) &&
+ ((gv.getLayoutFlags() & GlyphVector.FLAG_HAS_TRANSFORMS) == 0)){
+ jtr.drawGlyphVector(this, gv, (int)(x+matrix[4]), (int)(y+matrix[5]));
+ return;
+ }
+ } else {
+ if (((gv.getLayoutFlags() & GlyphVector.FLAG_HAS_TRANSFORMS) == 0)){
+ jtr.drawGlyphVector(this, gv, x, y);
+ return;
+ }
+ }
+
+ // TODO: we use slow type of drawing strings when Font object
+ // in Graphics has transforms, we just fill outlines. New textrenderer
+ // is to be implemented.
+
+ Shape sh = gv.getOutline(x, y);
+ this.fill(sh);
+
}
}
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWTK.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWTK.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWTK.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/unix/org/apache/harmony/awt/wtk/linux/LinuxWTK.java Tue Aug 14 20:05:21 2007
@@ -89,6 +89,15 @@
return null;
}
+ public boolean getLockingState(int keyCode) {
+ // TODO implement
+ return false;
+ }
+
+ public void setLockingState(int keyCode, boolean on) {
+ // TODO implement
+ }
+
private final LinuxWindowFactory windowFactory = new LinuxWindowFactory();
private final LinuxEventQueue eventQueue = new LinuxEventQueue(windowFactory);
private final GraphicsFactory graphicsFactory = new org.apache.harmony.awt.gl.linux.LinuxGraphics2DFactory();
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/windows/org/apache/harmony/awt/wtk/windows/WinWTK.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/windows/org/apache/harmony/awt/wtk/windows/WinWTK.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/windows/org/apache/harmony/awt/wtk/windows/WinWTK.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/java/windows/org/apache/harmony/awt/wtk/windows/WinWTK.java Tue Aug 14 20:05:21 2007
@@ -27,6 +27,10 @@
public class WinWTK extends WTK {
+ static {
+ System.loadLibrary("gl"); //$NON-NLS-1$
+ }
+
/**
* @see org.apache.harmony.awt.wtk.WTK#getGraphicsFactory()
*/
@@ -97,6 +101,10 @@
}
return im;
}
+
+ public native boolean getLockingState(int keyCode);
+
+ public native void setLockingState(int keyCode, boolean on);
private final WinSystemProperties systemProperties = new WinSystemProperties();
private final WinEventQueue eventQueue = new WinEventQueue(systemProperties);
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.cpp?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.cpp (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.cpp Tue Aug 14 20:05:21 2007
@@ -21,6 +21,7 @@
*/
#include "SurfaceDataStructure.h"
+#include "bitmapSurface.h"
#include "org_apache_harmony_awt_gl_windows_GDISurface.h"
#include "org_apache_harmony_awt_gl_windows_GDIBlitter.h"
#include "blitter.h"
@@ -68,7 +69,6 @@
HBRUSH brush = CreateSolidBrush(RGB(r, g, b));
SelectObject(tmpDC, brush);
PatBlt(tmpDC, 0, 0, w, h, PATCOPY);
-
if(initBitmap(srcSurf, env, srcData, true)){
BLENDFUNCTION bf;
bf.AlphaFormat = AC_SRC_ALPHA;
@@ -214,24 +214,36 @@
env->ReleasePrimitiveArrayCritical(matrix, old_mtrx, 0);
SetGraphicsMode(dstSurf->gi->hdc, GM_ADVANCED);
- GetWorldTransform(dstSurf->gi->hdc, ¤tTransform);
- SetWorldTransform(dstSurf->gi->hdc, &transform);
}
HRGN oldClip = setGdiClip(env, dstSurf->gi->hdc, clip, numVertex);
switch(blitStruct.blitFunctintType){
case ALPHA_BLEND:
+ GetWorldTransform(dstSurf->gi->hdc, ¤tTransform);
+ SetWorldTransform(dstSurf->gi->hdc, &transform);
AlphaBlend(dstSurf->gi->hdc, dstX, dstY, width, height, srcSurf->srcDC,
srcX, srcY, width, height, blitStruct.blendFunc);
break;
case TRANSPARENT_BLT:
+ GetWorldTransform(dstSurf->gi->hdc, ¤tTransform);
+ SetWorldTransform(dstSurf->gi->hdc, &transform);
TransparentBlt(dstSurf->gi->hdc, dstX, dstY, width, height, srcSurf->srcDC,
srcX, srcY, width, height, srcSurf->rtc);
break;
+ case COMPOSITE_BLT:
+ {
+ void *srcDataPtr = env->GetPrimitiveArrayCritical((jarray)srcData, 0);
+ CompositeBlt(dstSurf->gi->hdc, dstX, dstY, width, height, srcSurf, srcDataPtr,
+ srcX, srcY, compType, srca, ¤tTransform, &transform);
+ env->ReleasePrimitiveArrayCritical((jarray)srcData, srcDataPtr, 0);
+ }
+ break;
default:
+ GetWorldTransform(dstSurf->gi->hdc, ¤tTransform);
+ SetWorldTransform(dstSurf->gi->hdc, &transform);
BitBlt(dstSurf->gi->hdc, dstX, dstY, width, height, srcSurf->srcDC,
srcX, srcY, blitStruct.rastOp);
break;
@@ -413,18 +425,18 @@
blitStruct->rastOp = BLACKNESS;
return true;
}
- if(srcSurf->invalidated || srcSurf->isAlphaPre != false){
- if(!initBitmap(srcSurf, env, srcData, false)) return false;
- }
+ if(srcSurf->invalidated || srcSurf->isAlphaPre != false){
+ if(!initBitmap(srcSurf, env, srcData, false)) return false;
+ }
blitStruct->blitFunctintType = BIT_BLT;
blitStruct->rastOp = SRCCOPY;
return true;
case COMPOSITE_SRC_OVER:
case COMPOSITE_SRC_ATOP:
- if(srcSurf->invalidated || srcSurf->isAlphaPre != true){
- if(!initBitmap(srcSurf, env, srcData, true)) return false;
- }
+ if(srcSurf->invalidated || srcSurf->isAlphaPre != true){
+ if(!initBitmap(srcSurf, env, srcData, true)) return false;
+ }
if(srcSurf->transparency != GL_OPAQUE || srcConstAlpha != 255){
blitStruct->blitFunctintType = ALPHA_BLEND;
blitStruct->blendFunc.AlphaFormat = srcSurf->transparency != GL_OPAQUE ? AC_SRC_ALPHA : 0;
@@ -448,18 +460,19 @@
blitStruct->rastOp = BLACKNESS;
return true;
}
- // TODO Need to check src alpha
- return false;
+ blitStruct->blitFunctintType = COMPOSITE_BLT;
+ return true;
case COMPOSITE_DST_OUT:
case COMPOSITE_XOR:
+ if(srcConstAlpha != 255) return false;
if(srcConstAlpha == 255 && srcSurf->transparency == GL_OPAQUE){
blitStruct->blitFunctintType = BIT_BLT;
blitStruct->rastOp = BLACKNESS;
return true;
}
- // TODO Need to check src alpha
- return false;
+ blitStruct->blitFunctintType = COMPOSITE_BLT;
+ return true;
default:
return false;
@@ -469,14 +482,106 @@
BOOL initBitmap
(SURFACE_STRUCTURE *srcSurf, JNIEnv *env, jobject srcData, BOOL alphaPre){
- HBITMAP srcBmp = srcSurf->bitmap;
+ HBITMAP srcBmp = srcSurf->bitmap;
if(!srcBmp){
return false;
}
- updateCache(srcSurf, env, srcData, alphaPre != 0);
- SetDIBits(srcSurf->srcDC, srcSurf->bitmap, 0, srcSurf->height, srcSurf->bmpData, (BITMAPINFO *)&srcSurf->bmpInfo, DIB_RGB_COLORS);
+ updateCache(srcSurf, env, srcData, alphaPre != 0);
+ SetDIBits(srcSurf->srcDC, srcSurf->bitmap, 0, srcSurf->height, srcSurf->bmpData, (BITMAPINFO *)&srcSurf->bmpInfo, DIB_RGB_COLORS);
return true;
}
+void CompositeBlt
+(HDC dstDC, jint dstX, jint dstY, jint width, jint height, SURFACE_STRUCTURE *srcSurf,
+ void * srcData, jint srcX, jint srcY, UINT compType, UCHAR alpha, PXFORM currentTransform,
+ PXFORM transform){
+
+ HDC dc = GetDC(NULL);
+ if(dc == NULL) return;
+
+ HDC tmpDC = CreateCompatibleDC(dc);
+ if(!tmpDC){
+ ReleaseDC(NULL, dc);
+ return;
+ }
+
+ HBITMAP tmpBitmap = CreateCompatibleBitmap(dc, width, height);
+ if(tmpBitmap == NULL){
+ ReleaseDC(NULL, dc);
+ DeleteDC(tmpDC);
+ return;
+ }
+ ReleaseDC(NULL, dc);
+ SelectObject(tmpDC, tmpBitmap);
+
+ GraphicsInfo *gi = (GraphicsInfo *)malloc(sizeof(GraphicsInfo));
+ if(gi == NULL){
+ DeleteObject(tmpBitmap);
+ DeleteDC(tmpDC);
+ return;
+ }
+ memset(gi, 0, sizeof(GraphicsInfo));
+
+ SURFACE_STRUCTURE *tmpSurf = (SURFACE_STRUCTURE *)malloc(sizeof(SURFACE_STRUCTURE));
+ if(tmpSurf == NULL){
+ DeleteObject(tmpBitmap);
+ DeleteDC(tmpDC);
+ free(gi);
+ return;
+ }
+ memset(tmpSurf, 0, sizeof(SURFACE_STRUCTURE));
+
+ gi->hdc = tmpDC;
+ gi->bmp = tmpBitmap;
+
+ tmpSurf->width = width;
+ tmpSurf->height = height;
+ tmpSurf->gi = (GraphicsInfo *)gi;
+ parseFormat(tmpSurf);
+ tmpSurf->bmpData = (BYTE *)malloc(tmpSurf->bmpInfo.bmiHeader.biSizeImage);
+ if(tmpSurf->bmpData == NULL){
+ DeleteObject(tmpBitmap);
+ DeleteDC(tmpDC);
+ free(gi);
+ free(tmpSurf);
+ return;
+ }
+
+ BitBlt(tmpDC, 0, 0, width, height, dstDC, dstX, dstY, SRCCOPY);
+
+ GetDIBits(tmpDC, tmpBitmap, 0, tmpSurf->height, tmpSurf->bmpData,
+ (BITMAPINFO *)&tmpSurf->bmpInfo, DIB_RGB_COLORS);
+
+ switch(compType){
+ case COMPOSITE_DST_IN:
+ case COMPOSITE_DST_ATOP:
+ dst_atop_custom(srcX, srcY, srcSurf, srcData, 0, 0, tmpSurf,
+ tmpSurf->bmpData, width, height, alpha);
+ break;
+
+ case COMPOSITE_DST_OUT:
+ case COMPOSITE_XOR:
+ dst_out_custom(srcX, srcY, srcSurf, srcData, 0, 0, tmpSurf,
+ tmpSurf->bmpData, width, height, alpha);
+ }
+
+ SetDIBits(tmpDC, tmpBitmap, 0, tmpSurf->height, tmpSurf->bmpData, (BITMAPINFO *)&tmpSurf->bmpInfo, DIB_RGB_COLORS);
+
+ GetWorldTransform(dstDC, currentTransform);
+ SetWorldTransform(dstDC, transform);
+ BitBlt(dstDC, dstX, dstY, width, height, tmpDC, 0, 0, SRCCOPY);
+
+ DeleteObject(tmpBitmap);
+ DeleteDC(tmpDC);
+
+ free(gi);
+ free(tmpSurf->bmpData);
+ if(tmpSurf->bits) free(tmpSurf->bits);
+ if(tmpSurf->colormap) free(tmpSurf->colormap);
+ if(tmpSurf->bank_indexes) free(tmpSurf->bank_indexes);
+ if(tmpSurf->band_offsets) free(tmpSurf->band_offsets);
+ free(tmpSurf);
+
+}
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.h?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.h (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/GDIBlitter.h Tue Aug 14 20:05:21 2007
@@ -33,6 +33,7 @@
#define TRANSPARENT_BLT 1
#define ALPHA_BLEND 2
#define NULL_BLT 3
+#define COMPOSITE_BLT 4
void findNonExistColor(DWORD &, DWORD *, UINT);
BOOL isRepeatColor(UINT , DWORD *, UINT);
@@ -41,4 +42,7 @@
UCHAR srcConstAlpha, BLITSTRUCT *blitStruct);
BOOL initBitmap(SURFACE_STRUCTURE *srcSurf, JNIEnv *env, jobject srcData, BOOL alphaPre);
+
+void CompositeBlt(HDC, jint, jint, jint, jint, SURFACE_STRUCTURE *, void *, jint, jint, UINT, UCHAR, PXFORM, PXFORM);
+
#endif
Modified: harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/makefile?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/makefile (original)
+++ harmony/enhanced/classlib/branches/java6/modules/awt/src/main/native/gl/windows/makefile Tue Aug 14 20:05:21 2007
@@ -23,7 +23,7 @@
LIBNAME=$(LIBPATH)$(LIBBASE).lib
HYLDFLAGS = $(HYLDFLAGS) -def:$(LIBBASE).def
-HYCFLAGS = $(HYCFLAGS) /I$(SHAREDSUB)include /I$(SHAREDSUB) \
+HYCFLAGS = $(HYCFLAGS) /D_WIN32_WINNT=0x0500 /I$(SHAREDSUB)include /I$(SHAREDSUB) \
/I$(PNG_DIR) /Iinclude
BUILDFILES = \
@@ -32,6 +32,7 @@
WinGDIPGraphics2D.obj \
WinGraphicsEnvironment.obj \
WinThemeGraphics.obj \
+ LockingKeys.obj \
$(SHAREDSUB)blitter.obj \
$(SHAREDSUB)gifdecoder.obj \
$(SHAREDSUB)LUTTables.obj \
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/HashMap.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/HashMap.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/HashMap.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/HashMap.java Tue Aug 14 20:05:21 2007
@@ -331,11 +331,16 @@
public Object clone() {
try {
HashMap<K, V> map = (HashMap<K, V>) super.clone();
+ map.elementCount = 0;
map.elementData = newElementArray(elementData.length);
Entry<K, V> entry;
for (int i = 0; i < elementData.length; i++) {
- if ((entry = elementData[i]) != null) {
- map.elementData[i] = (Entry<K, V>) entry.clone();
+ if ((entry = elementData[i]) != null){
+ map.putImpl(entry.getKey(), entry.getValue());
+ while (entry.next != null){
+ entry = entry.next;
+ map.putImpl(entry.getKey(), entry.getValue());
+ }
}
}
return map;
@@ -526,7 +531,7 @@
return putImpl(key, value);
}
- private V putImpl(K key, V value) {
+ V putImpl(K key, V value) {
Entry<K,V> entry;
if(key == null) {
entry = findNullKeyEntry();
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/LinkedHashMap.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/LinkedHashMap.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/LinkedHashMap.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/LinkedHashMap.java Tue Aug 14 20:05:21 2007
@@ -332,7 +332,20 @@
*/
@Override
public V put(K key, V value) {
+ V result = putImpl(key,value);
+
+ if (removeEldestEntry(head)) {
+ remove(head.key);
+ }
+
+ return result;
+ }
+
+ V putImpl(K key, V value){
LinkedHashMapEntry<K, V> m;
+ if (elementCount == 0){
+ head = tail = null;
+ }
if (key == null) {
m = (LinkedHashMapEntry<K, V>)findNullKeyEntry();
if (m == null) {
@@ -352,7 +365,7 @@
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % elementData.length;
m = (LinkedHashMapEntry<K, V>)findNonNullKeyEntry(key, index, hash);
- if (m == null) {
+ if (m == null) {
modCount++;
if (++elementCount > threshold) {
rehash();
@@ -366,11 +379,6 @@
V result = m.value;
m.value = value;
-
- if (removeEldestEntry(head)) {
- remove(head.key);
- }
-
return result;
}
@@ -583,21 +591,4 @@
head = tail = null;
}
- /**
- * Answers a new HashMap with the same mappings and size as this HashMap.
- *
- * @return a shallow copy of this HashMap
- *
- * @see java.lang.Cloneable
- */
- @Override
- @SuppressWarnings("unchecked")
- public Object clone() {
- LinkedHashMap<K, V> map = (LinkedHashMap<K, V>) super.clone();
- map.clear();
- for (Map.Entry<K, V> entry : entrySet()) {
- map.put(entry.getKey(), entry.getValue());
- }
- return map;
- }
}
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Random.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Random.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Random.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/java/java/util/Random.java Tue Aug 14 20:05:21 2007
@@ -59,7 +59,7 @@
* @see #setSeed
*/
public Random() {
- setSeed(System.currentTimeMillis());
+ setSeed(System.currentTimeMillis() + hashCode());
}
/**
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/HashMapTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/HashMapTest.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/HashMapTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/HashMapTest.java Tue Aug 14 20:05:21 2007
@@ -187,6 +187,17 @@
assertTrue("keySet() is identical", key2 != keys);
assertEquals("keySet() was not cloned",
"key2", key2.iterator().next());
+
+ // regresion test for HARMONY-4603
+ HashMap hashmap = new HashMap();
+ MockClonable mock = new MockClonable(1);
+ hashmap.put(1, mock);
+ assertEquals(1, ((MockClonable) hashmap.get(1)).i);
+ HashMap hm3 = (HashMap)hashmap.clone();
+ assertEquals(1, ((MockClonable) hm3.get(1)).i);
+ mock.i = 0;
+ assertEquals(0, ((MockClonable) hashmap.get(1)).i);
+ assertEquals(0, ((MockClonable) hm3.get(1)).i);
}
/**
@@ -477,6 +488,19 @@
expected += key.hashCode() ^ val.hashCode();
assertEquals(expected, map.hashCode());
}
+
+ class MockClonable implements Cloneable{
+ public int i;
+
+ public MockClonable(int i) {
+ this.i = i;
+ }
+
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ return new MockClonable(i);
+ }
+ }
/**
* Sets up the fixture, for example, open a network connection. This method
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/LinkedHashMapTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/LinkedHashMapTest.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/LinkedHashMapTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/LinkedHashMapTest.java Tue Aug 14 20:05:21 2007
@@ -371,6 +371,33 @@
assertEquals("keySet() was not cloned",
"key2", key2.iterator().next());
}
+
+ // regresion test for HARMONY-4603
+ public void test_clone_Mock() {
+ LinkedHashMap hashMap = new MockMap();
+ String value = "value a";
+ hashMap.put("key", value);
+ MockMap cloneMap = (MockMap) hashMap.clone();
+ assertEquals(value, cloneMap.get("key"));
+ assertEquals(hashMap, cloneMap);
+ assertEquals(1, cloneMap.num);
+
+ hashMap.put("key", "value b");
+ assertFalse(hashMap.equals(cloneMap));
+ }
+
+ class MockMap extends LinkedHashMap {
+ int num;
+
+ public Object put(Object k, Object v) {
+ num++;
+ return super.put(k, v);
+ }
+
+ protected boolean removeEldestEntry(Map.Entry e) {
+ return num > 1;
+ }
+ }
/**
* @tests java.util.LinkedHashMap#containsKey(java.lang.Object)
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/RandomTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/RandomTest.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/RandomTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/RandomTest.java Tue Aug 14 20:05:21 2007
@@ -243,6 +243,17 @@
"Reseting a random to its old seed did not result in the same chain of values as it gave before",
aRandom.nextLong() == randomArray[counter]);
}
+
+ // two random create at a time should also generated different results
+ // regression test for Harmony 4616
+ public void test_random_generate() throws Exception {
+ for (int i = 0; i < 100; i++) {
+ Random random1 = new Random();
+ Random random2 = new Random();
+ assertFalse(random1.nextLong() == random2.nextLong());
+ }
+ }
+
/**
* Sets up the fixture, for example, open a network connection. This method
Modified: harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/JOptionPane.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/JOptionPane.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/JOptionPane.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/JOptionPane.java Tue Aug 14 20:05:21 2007
@@ -456,6 +456,7 @@
Object oldValue = message;
message = newMessage;
firePropertyChange(MESSAGE_PROPERTY, oldValue, newMessage);
+ updateUI();
}
public Object getMessage() {
@@ -466,6 +467,7 @@
Icon oldValue = icon;
icon = newIcon;
firePropertyChange(ICON_PROPERTY, oldValue, newIcon);
+ updateUI();
}
public Icon getIcon() {
@@ -476,6 +478,7 @@
Object oldValue = value;
value = newValue;
firePropertyChange(VALUE_PROPERTY, oldValue, newValue);
+ updateUI();
}
public Object getValue() {
@@ -486,6 +489,7 @@
Object[] oldValue = options;
options = newOptions;
firePropertyChange(OPTIONS_PROPERTY, oldValue, newOptions);
+ updateUI();
}
public Object[] getOptions() {
@@ -496,6 +500,7 @@
Object oldValue = initialValue;
initialValue = newValue;
firePropertyChange(INITIAL_VALUE_PROPERTY, oldValue, newValue);
+ updateUI();
}
public Object getInitialValue() {
@@ -519,6 +524,7 @@
"JOptionPane.WARNING_MESSAGE, JOptionPane.QUESTION_MESSAGE " + //$NON-NLS-1$
"or JOptionPane.PLAIN_MESSAGE"); //$NON-NLS-1$
}
+ updateUI();
}
public int getMessageType() {
@@ -538,6 +544,7 @@
default:
throw new RuntimeException(Messages.getString("swing.20")); //$NON-NLS-1$
}
+ updateUI();
}
public int getOptionType() {
@@ -549,6 +556,7 @@
selectionValues = newValues;
firePropertyChange(SELECTION_VALUES_PROPERTY, oldSelectionValues, newValues);
setWantsInput(selectionValues != null);
+ updateUI();
}
public Object[] getSelectionValues() {
@@ -559,6 +567,7 @@
Object oldInitialSelectionValue = initialSelectionValue;
initialSelectionValue = newValue;
firePropertyChange(INITIAL_SELECTION_VALUE_PROPERTY, oldInitialSelectionValue, newValue);
+ updateUI();
}
public Object getInitialSelectionValue() {
@@ -569,6 +578,7 @@
Object oldValue = inputValue;
inputValue = newValue;
firePropertyChange(INPUT_VALUE_PROPERTY, oldValue, newValue);
+ updateUI();
}
public Object getInputValue() {
@@ -583,6 +593,7 @@
boolean oldValue = wantsInput;
wantsInput = newValue;
firePropertyChange(WANTS_INPUT_PROPERTY, oldValue, newValue);
+ updateUI();
}
public boolean getWantsInput() {
@@ -638,5 +649,6 @@
return;
}
dialog.getRootPane().setWindowDecorationStyle(messageTypeToRootPaneDecoration(messageType));
+ //updateUI();
}
}
Modified: harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/HTMLDocument.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/HTMLDocument.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/HTMLDocument.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/HTMLDocument.java Tue Aug 14 20:05:21 2007
@@ -690,8 +690,22 @@
}
}
- protected void preContent(final char[] data) {
- addContent(data, 0, data.length);
+ protected void preContent(char[] data) {
+ int offset = 0;
+
+ for (int i = 0; i < data.length; i++) {
+ if ((data[i] == '\n') || (data[i] == '\r')) {
+ addContent(data, offset, i - offset);
+ blockClose(HTML.Tag.IMPLIED);
+
+ blockOpen(HTML.Tag.IMPLIED, new SimpleAttributeSet());
+ offset = i + 1;
+ }
+ }
+
+ if (offset < data.length) {
+ addContent(data, offset, data.length - offset);
+ }
}
protected void addContent(final char[] data, final int offset,
Modified: harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java Tue Aug 14 20:05:21 2007
@@ -381,6 +381,8 @@
private int offsetCDATA=0;
private LexerTextStateType textState = LexerTextStateType.DEFAULT;
+
+ private int preEntryCounter;
/**
* Decsribes whether a piece of text (no white space) was parsed.
@@ -544,17 +546,8 @@
buffer.append(yytext());
break;
case LINE_TERMINATOR:
- if (terminatorSkipped) {
- buffer.append(yytext());
- }
- /*
- * Collapses if there is only one last line terminator.
- * If there are more then doesn't do it (same as RI)
- * FIXME
- */
- skipLastLineTerminator = !lastWasLineTerminator;
- lastWasLineTerminator = true;
- terminatorSkipped = true;
+ buffer.append(yytext());
+ terminatorSkipped = false;
break;
case TEXT:
buffer.append(yytext());
@@ -644,7 +637,7 @@
textParsed = false;
terminatorSkipped = false;
lastWasLineTerminator = false;
- textState = LexerTextStateType.DEFAULT;
+
return textToken;
}
@@ -801,7 +794,13 @@
* @param newState the new lexical state
*/
public final void yybegin(int newState) {
- zzLexicalState = newState;
+ if ((newState == ENDTAG) && isPreformatted(yytext().substring(2))) {
+ preEntryCounter --;
+ textState = (preEntryCounter == 0) ? LexerTextStateType.DEFAULT :
+ LexerTextStateType.PREFORMATTED;
+ }
+
+ zzLexicalState = newState;
}
@@ -1460,6 +1459,7 @@
yybegin(TAG_IGNORE_ATTS);
} else {
if (isPreformatted(tagName)) {
+ preEntryCounter ++;
textState = LexerTextStateType.PREFORMATTED;
}
currentCDATAClosingTag = null;
Modified: harmony/enhanced/classlib/branches/java6/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java?view=diff&rev=566010&r1=566009&r2=566010
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java Tue Aug 14 20:05:21 2007
@@ -20,10 +20,12 @@
*/
package javax.swing.text.html;
+import java.io.StringReader;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.text.AttributeSet;
+import javax.swing.text.Element;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.Style;
@@ -543,9 +545,8 @@
assertEquals(2, reader.parseBuffer.size());
reader.handleText(text.toCharArray(), 0);
- assertEquals(3, reader.parseBuffer.size());
- ElementSpec spec = (ElementSpec)reader.parseBuffer.get(2);
- assertEquals(text.length(), spec.getLength());
+ assertEquals(7, reader.parseBuffer.size());
+ ElementSpec spec = (ElementSpec)reader.parseBuffer.get(6);
assertEquals(text.length(), spec.getArray().length);
}
@@ -559,10 +560,39 @@
assertEquals(2, reader.parseBuffer.size());
reader.preContent(text.toCharArray());
- assertEquals(3, reader.parseBuffer.size());
- ElementSpec spec = (ElementSpec)reader.parseBuffer.get(2);
- assertEquals(text.length(), spec.getLength());
+ assertEquals(7, reader.parseBuffer.size());
+ ElementSpec spec = (ElementSpec)reader.parseBuffer.get(6);
assertEquals(text.length(), spec.getArray().length);
+ }
+
+ public void testHarmony_4582() throws Exception {
+ final Element pre;
+ final HTMLDocument doc = new HTMLDocument();
+
+ new HTMLEditorKit().read(new StringReader("<html><body><pre>line1\n" //$NON-NLS-1$
+ + "line2</pre></body></html>"), doc, 0); //$NON-NLS-1$
+
+ assertEquals("line1", doc.getText(1, 5)); //$NON-NLS-1$
+ assertEquals("line2", doc.getText(7, 5)); //$NON-NLS-1$
+
+ pre = doc.getRootElements()[0].getElement(1).getElement(0);
+ assertEquals(1, pre.getElement(0).getStartOffset());
+ assertEquals(7, pre.getElement(0).getEndOffset());
+ assertEquals(7, pre.getElement(1).getStartOffset());
+ assertEquals(13, pre.getElement(1).getEndOffset());
+ }
+
+ public void testHarmony_4615() throws Exception {
+ final HTMLDocument doc = new HTMLDocument();
+
+ new HTMLEditorKit().read(new StringReader("<html><body><pre>line1\n" //$NON-NLS-1$
+ + "<font color='red'>line2 \n line3</font>" //$NON-NLS-1$
+ + "line3</pre>line4 \n line4</body></html>"), doc, 0); //$NON-NLS-1$
+
+ assertEquals("line1\n", doc.getText(1, 6)); //$NON-NLS-1$
+ assertEquals("line2 \n line3", doc.getText(7, 13)); //$NON-NLS-1$
+ assertEquals("line3", doc.getText(20, 5)); //$NON-NLS-1$
+ assertEquals("line4 line4", doc.getText(26, 11)); //$NON-NLS-1$
}
public void testTag_ContentWhitespaces() {