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 2011/04/13 13:48:15 UTC

svn commit: r1091754 - in /pivot/trunk/wtk/src/org/apache/pivot/wtk/skin: TextPaneSkinComponentNodeView.java TextPaneSkinElementView.java TextPaneSkinImageNodeView.java TextPaneSkinNodeView.java TextPaneSkinParagraphView.java TextPaneSkinTextNodeView.java

Author: noelgrandin
Date: Wed Apr 13 11:48:15 2011
New Revision: 1091754

URL: http://svn.apache.org/viewvc?rev=1091754&view=rev
Log:
PIVOT-727 Text of different sizes in a TextPane should have aligned baselines

Modified:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinElementView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java?rev=1091754&r1=1091753&r2=1091754&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinComponentNodeView.java Wed Apr 13 11:48:15 2011
@@ -78,6 +78,18 @@ class TextPaneSkinComponentNodeView exte
     }
 
     @Override
+    public int getBaseline() {
+        ComponentNode componentNode = (ComponentNode) getNode();
+        Component component = componentNode.getComponent();
+
+        int baseline = -1;
+        if (component != null) {
+            baseline = component.getBaseline();
+        }
+        return baseline;
+    }
+
+    @Override
     protected void setSkinLocation(int skinX, int skinY) {
         ComponentNode componentNode = (ComponentNode) getNode();
         Component component = componentNode.getComponent();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinElementView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinElementView.java?rev=1091754&r1=1091753&r2=1091754&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinElementView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinElementView.java Wed Apr 13 11:48:15 2011
@@ -132,6 +132,16 @@ abstract class TextPaneSkinElementView e
     }
 
     @Override
+    public int getBaseline() {
+        int baseline = -1;
+        for (TextPaneSkinNodeView nodeView : nodeViews) {
+            baseline = Math.max(baseline, nodeView.getBaseline());
+
+        }
+        return baseline;
+    }
+
+    @Override
     protected void setSkinLocation(int skinX, int skinY) {
         this.skinX = skinX;
         this.skinY = skinY;

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java?rev=1091754&r1=1091753&r2=1091754&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinImageNodeView.java Wed Apr 13 11:48:15 2011
@@ -72,6 +72,20 @@ class TextPaneSkinImageNodeView extends 
     }
 
     @Override
+    public int getBaseline() {
+        ImageNode imageNode = (ImageNode)getNode();
+        Image image = imageNode.getImage();
+
+        int baseline = -1;
+
+        if (image != null) {
+            baseline = image.getBaseline();
+        }
+
+        return baseline;
+    }
+
+    @Override
     public void paint(Graphics2D graphics) {
         ImageNode imageNode = (ImageNode)getNode();
         Image image = imageNode.getImage();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java?rev=1091754&r1=1091753&r2=1091754&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNodeView.java Wed Apr 13 11:48:15 2011
@@ -75,6 +75,8 @@ abstract class TextPaneSkinNodeView impl
         return height;
     }
 
+    public abstract int getBaseline();
+
     public abstract void paint(Graphics2D g);
 
     public Dimensions getSize() {

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java?rev=1091754&r1=1091753&r2=1091754&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinParagraphView.java Wed Apr 13 11:48:15 2011
@@ -115,10 +115,10 @@ class TextPaneSkinParagraphView extends 
             // Add the row views to this view, lay out, and calculate height
             int x = 0;
             int width = 0;
-            int height = 0;
+            int rowY = 0;
             for (int i = 0, n = rows.getLength(); i < n; i++) {
                 row = rows.get(i);
-                row.y = height;
+                row.y = rowY;
 
                 width = Math.max(width, row.width);
 
@@ -135,17 +135,28 @@ class TextPaneSkinParagraphView extends 
                     // right alignment
                     x = width - row.width;
                 }
+                int rowBaseline = -1;
                 for (TextPaneSkinNodeView nodeView : row.nodeViews) {
-                    // TODO Align to baseline
-                    int y = row.height - nodeView.getHeight();
+                    rowBaseline = Math.max(rowBaseline, nodeView.getBaseline());
+                }
+                for (TextPaneSkinNodeView nodeView : row.nodeViews) {
+                    int nodeViewBaseline = nodeView.getBaseline();
+                    int y;
+                    if (rowBaseline == -1 || nodeViewBaseline == -1) {
+                        // Align to bottom
+                        y = row.height - nodeView.getHeight();
+                    } else {
+                        // Align to baseline
+                        y = rowBaseline - nodeViewBaseline;
+                    }
 
-                    nodeView.setLocation(x, y + height);
+                    nodeView.setLocation(x, y + rowY);
                     x += nodeView.getWidth();
 
                     add(nodeView);
                 }
 
-                height += row.height;
+                rowY += row.height;
             }
 
             // Recalculate terminator bounds
@@ -158,7 +169,7 @@ class TextPaneSkinParagraphView extends 
                 // The terminator is the only character in this paragraph
                 terminatorY = 0;
             } else {
-                terminatorY = height - terminatorHeight;
+                terminatorY = rowY - terminatorHeight;
             }
 
             terminatorBounds = new Bounds(x, terminatorY,
@@ -166,7 +177,7 @@ class TextPaneSkinParagraphView extends 
 
             // Ensure that the paragraph is visible even when empty
             width += terminatorBounds.width;
-            height = Math.max(height, terminatorBounds.height);
+            int height = Math.max(rowY, terminatorBounds.height);
 
             setSize(width, height);
         }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java?rev=1091754&r1=1091753&r2=1091754&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinTextNodeView.java Wed Apr 13 11:48:15 2011
@@ -151,6 +151,14 @@ class TextPaneSkinTextNodeView extends T
     }
 
     @Override
+    public int getBaseline() {
+        FontRenderContext fontRenderContext = Platform.getFontRenderContext();
+        LineMetrics lm = getEffectiveFont().getLineMetrics("", fontRenderContext);
+        float ascent = lm.getAscent();
+        return (int) ascent;
+    }
+
+    @Override
     protected void setSkinLocation(int skinX, int skinY) {
     }