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/02/03 02:38:06 UTC

svn commit: r905861 - in /pivot/trunk: wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTooltipSkin.java wtk/src/org/apache/pivot/wtk/Tooltip.java wtk/src/org/apache/pivot/wtk/TooltipListener.java wtk/src/org/apache/pivot/wtk/skin/ComponentSkin.java

Author: gbrown
Date: Wed Feb  3 01:38:05 2010
New Revision: 905861

URL: http://svn.apache.org/viewvc?rev=905861&view=rev
Log:
Allow tooltips to contain arbitrary content.

Removed:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TooltipListener.java
Modified:
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTooltipSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Tooltip.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ComponentSkin.java

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTooltipSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTooltipSkin.java?rev=905861&r1=905860&r2=905861&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTooltipSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTooltipSkin.java Wed Feb  3 01:38:05 2010
@@ -17,21 +17,20 @@
 package org.apache.pivot.wtk.skin.terra;
 
 import java.awt.Color;
+import java.awt.Graphics2D;
 
 import org.apache.pivot.util.Vote;
-import org.apache.pivot.wtk.Border;
 import org.apache.pivot.wtk.Component;
 import org.apache.pivot.wtk.ComponentKeyListener;
 import org.apache.pivot.wtk.Container;
 import org.apache.pivot.wtk.ContainerMouseListener;
+import org.apache.pivot.wtk.Dimensions;
 import org.apache.pivot.wtk.Display;
+import org.apache.pivot.wtk.GraphicsUtilities;
 import org.apache.pivot.wtk.Insets;
 import org.apache.pivot.wtk.Keyboard;
-import org.apache.pivot.wtk.Label;
 import org.apache.pivot.wtk.Mouse;
-import org.apache.pivot.wtk.Theme;
 import org.apache.pivot.wtk.Tooltip;
-import org.apache.pivot.wtk.TooltipListener;
 import org.apache.pivot.wtk.Window;
 import org.apache.pivot.wtk.effects.DropShadowDecorator;
 import org.apache.pivot.wtk.effects.Transition;
@@ -41,12 +40,7 @@
 /**
  * Tooltip skin.
  */
-public class TerraTooltipSkin extends WindowSkin implements TooltipListener {
-    private Label label = new Label();
-    private Border border = new Border();
-
-    private boolean fade = true;
-
+public class TerraTooltipSkin extends WindowSkin {
     private ContainerMouseListener displayMouseListener = new ContainerMouseListener() {
         @Override
         public boolean mouseMove(Container container, int x, int y) {
@@ -90,28 +84,20 @@
     };
 
     private Transition closeTransition = null;
-
     private DropShadowDecorator dropShadowDecorator = null;
+    private boolean fade = true;
+
+    private Color borderColor;
+    private Insets padding;
 
     private static final int CLOSE_TRANSITION_DURATION = 500;
     private static final int CLOSE_TRANSITION_RATE = 30;
 
     public TerraTooltipSkin() {
-        setBackgroundColor((Color)null);
+        setBackgroundColor(new Color(0xff, 0xff, 0xe0, 0xf0));
 
-        // Add the label to the border
-        border.setContent(label);
-
-        // Apply the default styles
-        TerraTheme theme = (TerraTheme)Theme.getTheme();
-        Component.StyleDictionary labelStyles = label.getStyles();
-        labelStyles.put("font", theme.getFont());
-        labelStyles.put("color", Color.BLACK);
-
-        Component.StyleDictionary borderStyles = border.getStyles();
-        borderStyles.put("backgroundColor", new Color(0xff, 0xff, 0xe0, 0xf0));
-        borderStyles.put("color", Color.BLACK);
-        borderStyles.put("padding", new Insets(2));
+        borderColor = Color.BLACK;
+        padding = new Insets(2);
     }
 
     @Override
@@ -122,11 +108,90 @@
 
         dropShadowDecorator = new DropShadowDecorator(5, 2, 2);
         tooltip.getDecorators().add(dropShadowDecorator);
+    }
+
+    @Override
+    public int getPreferredWidth(int height) {
+        int preferredWidth = 0;
+
+        Tooltip tooltip = (Tooltip)getComponent();
+        Component content = tooltip.getContent();
+
+        if (height != -1) {
+            height -= (padding.top + padding.bottom + 2);
+        }
+
+        if (content != null) {
+            preferredWidth = content.getPreferredWidth(height);
+        }
+
+        preferredWidth += (padding.left + padding.right + 2);
+
+        return preferredWidth;
+    }
+
+    @Override
+    public int getPreferredHeight(int width) {
+        int preferredHeight = 0;
+
+        Tooltip tooltip = (Tooltip)getComponent();
+        Component content = tooltip.getContent();
+
+        if (width != -1) {
+            width -= (padding.left + padding.right + 2);
+        }
 
-        tooltip.setContent(border);
-        tooltip.getTooltipListeners().add(this);
+        if (content != null) {
+            preferredHeight = content.getPreferredHeight(width);
+        }
+
+        preferredHeight += (padding.top + padding.bottom + 2);
+
+        return preferredHeight;
+    }
+
+    @Override
+    public Dimensions getPreferredSize() {
+        int preferredWidth = 0;
+        int preferredHeight = 0;
 
-        label.setText(tooltip.getText());
+        Tooltip tooltip = (Tooltip)getComponent();
+        Component content = tooltip.getContent();
+
+        if (content != null) {
+            Dimensions contentSize = content.getPreferredSize();
+            preferredWidth = contentSize.width;
+            preferredHeight = contentSize.height;
+        }
+
+        preferredWidth += (padding.left + padding.right + 2);
+        preferredHeight += (padding.top + padding.bottom + 2);
+
+        return new Dimensions(preferredWidth, preferredHeight);
+    }
+
+    @Override
+    public void layout() {
+        Tooltip tooltip = (Tooltip)getComponent();
+        Component content = tooltip.getContent();
+
+        if (content != null) {
+            int contentWidth = Math.max(getWidth() - (padding.left + padding.right + 2), 0);
+            int contentHeight = Math.max(getHeight() - (padding.top + padding.bottom + 2), 0);
+            content.setSize(contentWidth, contentHeight);
+            content.setLocation(padding.left + 1, padding.top + 1);
+        }
+    }
+
+    @Override
+    public void paint(Graphics2D graphics) {
+        super.paint(graphics);
+
+        int width = getWidth();
+        int height = getHeight();
+
+        graphics.setColor(borderColor);
+        GraphicsUtilities.drawRect(graphics, 0, 0, width, height);
     }
 
     @Override
@@ -185,9 +250,4 @@
 
         closeTransition = null;
     }
-
-    @Override
-    public void textChanged(Tooltip tooltip, String previousText) {
-        label.setText(tooltip.getText());
-    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Tooltip.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Tooltip.java?rev=905861&r1=905860&r2=905861&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Tooltip.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Tooltip.java Wed Feb  3 01:38:05 2010
@@ -16,47 +16,19 @@
  */
 package org.apache.pivot.wtk;
 
-import org.apache.pivot.util.ListenerList;
-
 /**
  * Window representing a "tooltip". Tooltips are used to provide additional
  * context information to a user. A tooltip generally appears after a certain
  * amount of time has passed and closes when the user moves the mouse.
  */
 public class Tooltip extends Window {
-    private static class TooltipListenerList extends ListenerList<TooltipListener>
-        implements TooltipListener {
-        @Override
-        public void textChanged(Tooltip tooltip, String previousText) {
-            for (TooltipListener listener : this) {
-                listener.textChanged(tooltip, previousText);
-            }
-        }
+    public Tooltip() {
+        this(null);
     }
 
-    private String text = null;
-
-    private TooltipListenerList tooltipListeners = new TooltipListenerList();
+    public Tooltip(Component content) {
+        super(content);
 
-    public Tooltip(String text) {
-        setText(text);
         installThemeSkin(Tooltip.class);
     }
-
-    public String getText() {
-        return text;
-    }
-
-    public void setText(String text) {
-        String previousText = this.text;
-
-        if (previousText != text) {
-            this.text = text;
-            tooltipListeners.textChanged(this, previousText);
-        }
-    }
-
-    public ListenerList<TooltipListener> getTooltipListeners() {
-        return tooltipListeners;
-    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ComponentSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ComponentSkin.java?rev=905861&r1=905860&r2=905861&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ComponentSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/ComponentSkin.java Wed Feb  3 01:38:05 2010
@@ -37,6 +37,7 @@
 import org.apache.pivot.wtk.DragSource;
 import org.apache.pivot.wtk.DropTarget;
 import org.apache.pivot.wtk.Keyboard;
+import org.apache.pivot.wtk.Label;
 import org.apache.pivot.wtk.MenuHandler;
 import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Point;
@@ -59,7 +60,7 @@
             // The tooltip text may have been cleared while the timeout was
             // outstanding; if so, don't display the tooltip
             if (tooltipText != null) {
-                final Tooltip tooltip = new Tooltip(tooltipText);
+                final Tooltip tooltip = new Tooltip(new Label(tooltipText));
 
                 Point location = component.getDisplay().getMouseLocation();
                 int x = location.x;