You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/08/04 09:10:49 UTC
svn commit: r562669 - in /harmony/enhanced/classlib/trunk/modules/swing/src:
main/java/common/javax/swing/text/html/
test/api/java.injected/javax/swing/text/html/
Author: apetrenko
Date: Sat Aug 4 00:10:48 2007
New Revision: 562669
URL: http://svn.apache.org/viewvc?view=rev&rev=562669
Log:
Patch for HARMONY-4573 "[classlib][swing][html] Images are not displayed correctly repeatedly"
Modified:
harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/BackgroundImageLoader.java
harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/CSS.java
harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/FormViewComponentFactory.java
harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/ImageView.java
harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/ImageViewTest.java
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/BackgroundImageLoader.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/BackgroundImageLoader.java?view=diff&rev=562669&r1=562668&r2=562669
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/BackgroundImageLoader.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/BackgroundImageLoader.java Sat Aug 4 00:10:48 2007
@@ -40,16 +40,26 @@
private volatile boolean ready;
private volatile boolean error;
- BackgroundImageLoader(final URL url,
+ private boolean synchronous;
+ Object lock = new Object();
+
+ final Toolkit tk = Toolkit.getDefaultToolkit();
+
+ BackgroundImageLoader(final URL url, boolean synchronous,
final int desiredWidth, final int desiredHeight) {
this.desiredWidth = desiredWidth;
this.desiredHeight = desiredHeight;
+ this.synchronous = synchronous;
+
error = url == null;
if (!error) {
- final Toolkit tk = Toolkit.getDefaultToolkit();
image = tk.createImage(url);
- tk.prepareImage(image, desiredWidth, desiredHeight, this);
+ if (synchronous){
+ waitForImage();
+ } else {
+ tk.prepareImage(image, desiredWidth, desiredHeight, this);
+ }
} else {
image = null;
}
@@ -64,16 +74,22 @@
if ((flags & HEIGHT) != 0) {
imageHeight = desiredHeight == -1 ? height : desiredHeight;
}
- if ((flags & ALLBITS) != 0) {
+ if ((flags & (FRAMEBITS | ALLBITS)) != 0) {
ready = true;
onReady();
}
if ((flags & (ERROR | ABORT)) != 0) {
error = true;
onError();
- return false;
}
- return width == -1 || height == -1 || !ready;
+
+ if (synchronous){
+ synchronized (lock){
+ lock.notify();
+ }
+ }
+
+ return (flags & ALLBITS) == 0;
}
public final Image getImage() {
@@ -97,11 +113,15 @@
}
public final void waitForImage() {
- while (!ready && !error) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ synchronized (lock){
+ if (!tk.prepareImage(image, desiredWidth, desiredHeight, this)) {
+ while (!(error | ready)) {
+ try {
+ lock.wait(1000);
+ } catch(InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
}
}
}
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/CSS.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/CSS.java?view=diff&rev=562669&r1=562668&r2=562669
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/CSS.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/CSS.java Sat Aug 4 00:10:48 2007
@@ -528,7 +528,7 @@
if (path != null && imageLoader == null) {
final URL url = HTML.resolveURL(path, base);
- imageLoader = new BackgroundImageLoader(url, -1, -1) {
+ imageLoader = new BackgroundImageLoader(url, true, -1, -1) {
protected void onReady() {
super.onReady();
notifyViews();
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/FormViewComponentFactory.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/FormViewComponentFactory.java?view=diff&rev=562669&r1=562668&r2=562669
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/FormViewComponentFactory.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/FormViewComponentFactory.java Sat Aug 4 00:10:48 2007
@@ -86,7 +86,7 @@
if (url == null) {
icon = HTMLIconFactory.getLoadingFailedIcon();
} else {
- loader = new BackgroundImageLoader(url, -1, -1) {
+ loader = new BackgroundImageLoader(url, true, -1, -1) {
protected void onReady() {
super.onReady();
view.preferenceChanged(view, true, true);
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/ImageView.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/ImageView.java?view=diff&rev=562669&r1=562668&r2=562669
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/ImageView.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/ImageView.java Sat Aug 4 00:10:48 2007
@@ -53,9 +53,9 @@
private BackgroundImageLoader loader;
private String src;
- private URL imageURL;
- private boolean synchronous;
+ //TODO We can load images only synchronously yet
+ private boolean synchronous = true;
private Color color;
@@ -67,15 +67,12 @@
}
public Image getImage() {
- return loader.image;
+ return loader.getImage();
}
public URL getImageURL() {
- if (imageURL == null) {
- URL base = ((HTMLDocument)getDocument()).getBase();
- imageURL = HTML.resolveURL(src, base);
- }
- return imageURL;
+ URL base = ((HTMLDocument)getDocument()).getBase();
+ return HTML.resolveURL(src, base);
}
public Icon getLoadingImageIcon() {
@@ -167,10 +164,8 @@
if (!loader.isReady()) {
if (!synchronous) {
getLoadingImageIcon().paintIcon(null, g, rc.x, rc.y);
- } else {
- loader.waitForImage();
+ return;
}
- return;
}
g.drawImage(getImage(), rc.x, rc.y, rc.width, rc.height, loader);
@@ -242,8 +237,7 @@
}
private void createImage(final int desiredWidth, final int desiredHeight) {
- imageURL = null;
- loader = new BackgroundImageLoader(getImageURL(),
+ loader = new BackgroundImageLoader(getImageURL(), synchronous,
desiredWidth, desiredHeight) {
protected void onReady() {
super.onReady();
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/ImageViewTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/ImageViewTest.java?view=diff&rev=562669&r1=562668&r2=562669
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/ImageViewTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/ImageViewTest.java Sat Aug 4 00:10:48 2007
@@ -263,17 +263,11 @@
assertEquals(isHarmony() ? 18 : 38, icon.getIconHeight());
}
- public void testSetLoadsSynchronously() {
- assertFalse(view.getLoadsSynchronously());
-
+ public void testSetGetLoadsSynchronously() {
view.setLoadsSynchronously(true);
assertTrue(view.getLoadsSynchronously());
view.setLoadsSynchronously(false);
- assertFalse(view.getLoadsSynchronously());
- }
-
- public void testGetLoadsSynchronously() {
assertFalse(view.getLoadsSynchronously());
}