You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by no...@apache.org on 2010/07/29 12:17:15 UTC
svn commit: r980388 - in /pivot/trunk:
wtk-terra/src/org/apache/pivot/wtk/skin/terra/
wtk/src/org/apache/pivot/wtk/ wtk/src/org/apache/pivot/wtk/skin/
Author: noelgrandin
Date: Thu Jul 29 10:17:15 2010
New Revision: 980388
URL: http://svn.apache.org/viewvc?rev=980388&view=rev
Log:
PIVOT-477 Window and DesktopApplicationContext should support java.awt.Window.setIconImages() to display multi-resolution icons
Modified:
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java
pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java
Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java Thu Jul 29 10:17:15 2010
@@ -25,6 +25,7 @@ import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import org.apache.pivot.collections.Dictionary;
+import org.apache.pivot.collections.Sequence;
import org.apache.pivot.wtk.Bounds;
import org.apache.pivot.wtk.Button;
import org.apache.pivot.wtk.ButtonPressListener;
@@ -329,7 +330,7 @@ public class TerraFrameSkin extends Wind
frame.add(resizeHandle);
- iconChanged(frame, null);
+ iconAdded(frame, null);
titleChanged(frame, null);
activeChanged(frame, null);
maximizedChanged(frame);
@@ -807,10 +808,25 @@ public class TerraFrameSkin extends Wind
}
@Override
- public void iconChanged(Window window, Image previousIcon) {
- Image icon = window.getIcon();
- iconImageView.setVisible(icon != null);
- iconImageView.setImage(icon);
+ public void iconAdded(Window window, Image addedIcon) {
+ if (window.getIcons().getLength() > 0) {
+ iconImageView.setVisible(true);
+ iconImageView.setImage(window.getIcons().get(0));
+ } else {
+ iconImageView.setVisible(false);
+ iconImageView.setImage((Image)null);
+ }
+ }
+
+ @Override
+ public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
+ if (window.getIcons().getLength() > 0) {
+ iconImageView.setVisible(true);
+ iconImageView.setImage(window.getIcons().get(0));
+ } else {
+ iconImageView.setVisible(false);
+ iconImageView.setImage((Image)null);
+ }
}
@Override
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java Thu Jul 29 10:17:15 2010
@@ -23,6 +23,7 @@ import java.awt.GraphicsEnvironment;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
import java.io.File;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
@@ -77,7 +78,12 @@ public final class DesktopApplicationCon
}
@Override
- public void iconChanged(Window window, Image previousIcon) {
+ public void iconAdded(Window window, Image addedIcon) {
+ updateFrameTitleBar();
+ }
+
+ @Override
+ public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
updateFrameTitleBar();
}
};
@@ -148,10 +154,16 @@ public final class DesktopApplicationCon
} else {
((TitledWindow)hostWindow).setTitle(DesktopDisplayHost.this.rootOwner.getTitle());
- Image icon = DesktopDisplayHost.this.rootOwner.getIcon();
- if (icon instanceof Picture) {
- Picture rootPicture = (Picture)icon;
- hostWindow.setIconImage(rootPicture.getBufferedImage());
+ java.util.ArrayList<BufferedImage> pictures = new java.util.ArrayList<BufferedImage>();
+ for (Image icon : DesktopDisplayHost.this.rootOwner.getIcons()) {
+ if (icon instanceof Picture) {
+ pictures.add(((Picture) icon).getBufferedImage());
+ }
+ }
+ if (pictures.size() == 1) {
+ hostWindow.setIconImage(pictures.get(0));
+ } else if (pictures.size() > 1) {
+ hostWindow.setIconImages(pictures);
}
}
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java Thu Jul 29 10:17:15 2010
@@ -17,11 +17,13 @@
package org.apache.pivot.wtk;
import java.net.URL;
+import java.util.Iterator;
import org.apache.pivot.beans.DefaultProperty;
import org.apache.pivot.collections.ArrayList;
import org.apache.pivot.collections.HashMap;
import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.util.ImmutableIterator;
import org.apache.pivot.util.ListenerList;
import org.apache.pivot.util.Vote;
import org.apache.pivot.util.concurrent.TaskExecutionException;
@@ -226,6 +228,65 @@ public class Window extends Container {
}
}
+ public class IconImageSequence implements Sequence<Image>, Iterable<Image> {
+ @Override
+ public int add(Image image) {
+ int index = iconImageList.add(image);
+
+ windowListeners.iconAdded(Window.this, image);
+
+ return index;
+ }
+
+ @Override
+ public void insert(Image image, int index) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Image update(int index, Image image) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public int remove(Image image) {
+ int index = indexOf(image);
+
+ if (index >= 0) {
+ remove(index, 1);
+ }
+
+ return index;
+ }
+
+ @Override
+ public Sequence<Image> remove(int index, int count) {
+ Sequence<Image> removed = iconImageList.remove(index, count);
+ windowListeners.iconsRemoved(Window.this, index, removed);
+ return removed;
+ }
+
+ @Override
+ public Image get(int index) {
+ return iconImageList.get(index);
+ }
+
+ @Override
+ public int indexOf(Image image) {
+ return iconImageList.indexOf(image);
+ }
+
+ @Override
+ public int getLength() {
+ return iconImageList.getLength();
+ }
+
+ @Override
+ public Iterator<Image> iterator() {
+ return new ImmutableIterator<Image>(iconImageList.iterator());
+ }
+ }
+
private static class WindowListenerList extends ListenerList<WindowListener>
implements WindowListener {
@Override
@@ -236,12 +297,19 @@ public class Window extends Container {
}
@Override
- public void iconChanged(Window window, Image previousIcon) {
+ public void iconAdded(Window window, Image addedIcon) {
for (WindowListener listener : this) {
- listener.iconChanged(window, previousIcon);
+ listener.iconAdded(window, addedIcon);
}
}
-
+
+ @Override
+ public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
+ for (WindowListener listener : this) {
+ listener.iconsRemoved(window, index, removed);
+ }
+ }
+
@Override
public void contentChanged(Window window, Component previousContent) {
for (WindowListener listener : this) {
@@ -368,7 +436,8 @@ public class Window extends Container {
private HashMap<Keyboard.KeyStroke, Action> actionMap = new HashMap<Keyboard.KeyStroke, Action>();
private String title = null;
- private Image icon = null;
+ private ArrayList<Image> iconImageList = new ArrayList<Image>();
+ private IconImageSequence iconImageSequence = new IconImageSequence();
private Component content = null;
private Component focusDescendant = null;
@@ -702,30 +771,12 @@ public class Window extends Container {
}
/**
- * Returns the window's icon.
- *
- * @return
- * The window's icon, or <tt>null</tt> if the window has no icon.
+ * Returns the icons for this window.
*/
- public Image getIcon() {
- return icon;
+ public IconImageSequence getIcons() {
+ return iconImageSequence;
}
-
- /**
- * Sets the window's icon.
- *
- * @param icon
- * The window's icon, or <tt>null</tt> for no icon.
- */
- public void setIcon(Image icon) {
- Image previousIcon = this.icon;
-
- if (previousIcon != icon) {
- this.icon = icon;
- windowListeners.iconChanged(this, previousIcon);
- }
- }
-
+
/**
* Sets the window's icon by URL.
* <p>
@@ -753,7 +804,8 @@ public class Window extends Container {
ApplicationContext.getResourceCache().put(iconURL, icon);
}
- setIcon(icon);
+ getIcons().remove(0, getIcons().getLength());
+ getIcons().add(icon);
}
/**
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/WindowListener.java Thu Jul 29 10:17:15 2010
@@ -16,6 +16,7 @@
*/
package org.apache.pivot.wtk;
+import org.apache.pivot.collections.Sequence;
import org.apache.pivot.wtk.media.Image;
/**
@@ -31,7 +32,11 @@ public interface WindowListener {
}
@Override
- public void iconChanged(Window window, Image previousIcon) {
+ public void iconAdded(Window window, Image addedIcon) {
+ }
+
+ @Override
+ public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
}
@Override
@@ -59,9 +64,18 @@ public interface WindowListener {
* Called when a window's icon has changed.
*
* @param window
- * @param previousIcon
+ * @param addedIcon
+ */
+ public void iconAdded(Window window, Image addedIcon);
+
+ /**
+ * Called when a window's icon has changed.
+ *
+ * @param window
+ * @param index
+ * @param removed
*/
- public void iconChanged(Window window, Image previousIcon);
+ public void iconsRemoved(Window window, int index, Sequence<Image> removed);
/**
* Called when a window's content component has changed.
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java?rev=980388&r1=980387&r2=980388&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java Thu Jul 29 10:17:15 2010
@@ -18,6 +18,7 @@ package org.apache.pivot.wtk.skin;
import java.awt.Color;
+import org.apache.pivot.collections.Sequence;
import org.apache.pivot.util.Vote;
import org.apache.pivot.wtk.Bounds;
import org.apache.pivot.wtk.Component;
@@ -127,10 +128,15 @@ public class WindowSkin extends Containe
}
@Override
- public void iconChanged(Window window, Image previousIcon) {
+ public void iconAdded(Window window, Image addedIcon) {
// No-op
}
-
+
+ @Override
+ public void iconsRemoved(Window window, int index, Sequence<Image> removed) {
+ // No-op
+ }
+
@Override
public void contentChanged(Window window, Component previousContent) {
invalidateComponent();