You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/03/19 15:04:26 UTC

svn commit: r925220 - in /pivot/trunk/wtk/src/org/apache/pivot/wtk: DesktopApplicationContext.java effects/WatermarkDecorator.java media/drawing/Text.java

Author: gbrown
Date: Fri Mar 19 14:04:26 2010
New Revision: 925220

URL: http://svn.apache.org/viewvc?rev=925220&view=rev
Log:
Apply patch to allow host frame title to update when top-most window changes; add support for derived fonts to WatermarkDecorator and Text classes.

Modified:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/WatermarkDecorator.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/media/drawing/Text.java

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=925220&r1=925219&r2=925220&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/DesktopApplicationContext.java Fri Mar 19 14:04:26 2010
@@ -242,6 +242,18 @@ public final class DesktopApplicationCon
 
     private static Runnable updateFrameTitleBarCallback = null;
 
+    private static final WindowListener TOP_WINDOW_LISTENER = new WindowListener.Adapter() {
+        @Override
+        public void titleChanged(Window window, String previousTitle) {
+            updateFrameTitleBar(window.getRootOwner());
+        }
+
+        @Override
+        public void iconChanged(Window window, Image previousIcon) {
+            updateFrameTitleBar(window.getRootOwner());
+        }
+    };
+
     private static final String DEFAULT_HOST_FRAME_TITLE = "Apache Pivot";
 
     private static final String X_ARGUMENT = "x";
@@ -441,25 +453,29 @@ public final class DesktopApplicationCon
             }
 
             @Override
-            public void componentsRemoved(Container container, int index,
-                Sequence<Component> removed) {
-                if (index == container.getLength()) {
-                    topWindowChanged((Display)container,
-                        (Window)removed.get(removed.getLength() - 1));
+            public void componentsRemoved(Container container, int index, Sequence<Component> removed) {
+                int n = removed.getLength();
+
+                if (index + n == container.getLength()) {
+                    topWindowChanged((Display)container, (Window)removed.get(n - 1));
                 }
             }
 
             @Override
             public void componentMoved(Container container, int from, int to) {
                 int n = container.getLength();
-                if (from == n) {
+
+                if (from == n - 1) {
+                    // The top-most window was moved elsewhere
                     topWindowChanged((Display)container, (Window)container.get(from));
-                } else if (to == n) {
-                    topWindowChanged((Display)container, (Window)container.get(n - 1));
+                } else if (to == n - 1) {
+                    // A new window was moved to top
+                    topWindowChanged((Display)container,
+                        (to > 0) ? (Window)container.get(to - 1) : null);
                 }
             }
 
-            private void topWindowChanged(Display display, Window previousTopWindow) {
+            private void topWindowChanged(Display display, final Window previousTopWindow) {
                 if (updateFrameTitleBarCallback == null) {
                     updateFrameTitleBarCallback = new Runnable() {
                         @Override
@@ -471,9 +487,16 @@ public final class DesktopApplicationCon
                                 windowedHostFrame.setTitle(DEFAULT_HOST_FRAME_TITLE);
                                 windowedHostFrame.setIconImage(null);
                             } else {
+                                if (previousTopWindow != null) {
+                                    Window previousRootOwner = previousTopWindow.getRootOwner();
+                                    previousRootOwner.getWindowListeners().remove(TOP_WINDOW_LISTENER);
+                                }
+
                                 Window topWindow = (Window)display.get(n - 1);
                                 Window rootOwner = topWindow.getRootOwner();
                                 updateFrameTitleBar(rootOwner);
+
+                                rootOwner.getWindowListeners().add(TOP_WINDOW_LISTENER);
                             }
 
                             updateFrameTitleBarCallback = null;

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/WatermarkDecorator.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/WatermarkDecorator.java?rev=925220&r1=925219&r2=925220&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/WatermarkDecorator.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/WatermarkDecorator.java Fri Mar 19 14:04:26 2010
@@ -22,6 +22,8 @@ import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
 import java.net.URL;
 
+import org.apache.pivot.serialization.JSONSerializer;
+import org.apache.pivot.serialization.SerializationException;
 import org.apache.pivot.util.ThreadUtilities;
 import org.apache.pivot.util.concurrent.TaskExecutionException;
 import org.apache.pivot.wtk.ApplicationContext;
@@ -31,6 +33,7 @@ import org.apache.pivot.wtk.BoxPane;
 import org.apache.pivot.wtk.ImageView;
 import org.apache.pivot.wtk.Label;
 import org.apache.pivot.wtk.Orientation;
+import org.apache.pivot.wtk.Theme;
 import org.apache.pivot.wtk.VerticalAlignment;
 import org.apache.pivot.wtk.media.Image;
 
@@ -142,6 +145,10 @@ public class WatermarkDecorator implemen
      * This decorator's font
      */
     public void setFont(Font font) {
+        if (font == null) {
+            throw new IllegalArgumentException("font is null.");
+        }
+
         label.getStyles().put("font", font);
         validate();
     }
@@ -153,7 +160,19 @@ public class WatermarkDecorator implemen
      * This decorator's font
      */
     public final void setFont(String font) {
-        setFont(Font.decode(font));
+        if (font == null) {
+            throw new IllegalArgumentException("font is null.");
+        }
+
+        if (font.startsWith("{")) {
+            try {
+                setFont(Theme.deriveFont(JSONSerializer.parseMap(font)));
+            } catch (SerializationException exception) {
+                throw new IllegalArgumentException(exception);
+            }
+        } else {
+            setFont(Font.decode(font));
+        }
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/media/drawing/Text.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/media/drawing/Text.java?rev=925220&r1=925219&r2=925220&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/media/drawing/Text.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/media/drawing/Text.java Fri Mar 19 14:04:26 2010
@@ -29,10 +29,13 @@ import java.awt.geom.Rectangle2D;
 import java.text.StringCharacterIterator;
 
 import org.apache.pivot.collections.ArrayList;
+import org.apache.pivot.serialization.JSONSerializer;
+import org.apache.pivot.serialization.SerializationException;
 import org.apache.pivot.util.ListenerList;
 import org.apache.pivot.wtk.Bounds;
 import org.apache.pivot.wtk.HorizontalAlignment;
 import org.apache.pivot.wtk.Platform;
+import org.apache.pivot.wtk.Theme;
 
 /**
  * Shape representing a block of text.
@@ -117,7 +120,15 @@ public class Text extends Shape {
             throw new IllegalArgumentException("font is null.");
         }
 
-        setFont(Font.decode(font));
+        if (font.startsWith("{")) {
+            try {
+                setFont(Theme.deriveFont(JSONSerializer.parseMap(font)));
+            } catch (SerializationException exception) {
+                throw new IllegalArgumentException(exception);
+            }
+        } else {
+            setFont(Font.decode(font));
+        }
     }
 
     public int getWidth() {