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) {
}