Attempt to work around the Mac text layout bug.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@1630 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -42,6 +42,7 @@ import java.util.HashMap;
|
|||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
|
|
||||||
import com.samskivert.Log;
|
import com.samskivert.Log;
|
||||||
|
import com.samskivert.util.RunAnywhere;
|
||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
import com.samskivert.util.Tuple;
|
import com.samskivert.util.Tuple;
|
||||||
|
|
||||||
@@ -321,7 +322,7 @@ public class Label implements SwingConstants, LabelStyleConstants
|
|||||||
// languages, anyway)
|
// languages, anyway)
|
||||||
if (_constraints.width == -1) {
|
if (_constraints.width == -1) {
|
||||||
TextLayout layout = new TextLayout(textIterator(gfx), frc);
|
TextLayout layout = new TextLayout(textIterator(gfx), frc);
|
||||||
Rectangle2D bounds = layout.getBounds();
|
Rectangle2D bounds = getBounds(layout);
|
||||||
|
|
||||||
int lines = 1;
|
int lines = 1;
|
||||||
double width = getWidth(bounds)/lines;
|
double width = getWidth(bounds)/lines;
|
||||||
@@ -343,7 +344,7 @@ public class Label implements SwingConstants, LabelStyleConstants
|
|||||||
}
|
}
|
||||||
|
|
||||||
TextLayout layout = new TextLayout(textIterator(gfx), frc);
|
TextLayout layout = new TextLayout(textIterator(gfx), frc);
|
||||||
Rectangle2D bounds = layout.getBounds();
|
Rectangle2D bounds = getBounds(layout);
|
||||||
int lines = Math.round(targetHeight / getHeight(layout));
|
int lines = Math.round(targetHeight / getHeight(layout));
|
||||||
if (lines > 1) {
|
if (lines > 1) {
|
||||||
int targetWidth = (int)Math.round(getWidth(bounds) / lines);
|
int targetWidth = (int)Math.round(getWidth(bounds) / lines);
|
||||||
@@ -372,7 +373,7 @@ public class Label implements SwingConstants, LabelStyleConstants
|
|||||||
// then layout on one line and call it good
|
// then layout on one line and call it good
|
||||||
if (layouts == null) {
|
if (layouts == null) {
|
||||||
TextLayout layout = new TextLayout(textIterator(gfx), frc);
|
TextLayout layout = new TextLayout(textIterator(gfx), frc);
|
||||||
Rectangle2D bounds = layout.getBounds();
|
Rectangle2D bounds = getBounds(layout);
|
||||||
// for some reason JDK1.3 on Linux chokes on setSize(double,double)
|
// for some reason JDK1.3 on Linux chokes on setSize(double,double)
|
||||||
_size.setSize(Math.ceil(getWidth(bounds)),
|
_size.setSize(Math.ceil(getWidth(bounds)),
|
||||||
Math.ceil(getHeight(layout)));
|
Math.ceil(getHeight(layout)));
|
||||||
@@ -427,7 +428,7 @@ public class Label implements SwingConstants, LabelStyleConstants
|
|||||||
if (layout == null) {
|
if (layout == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Rectangle2D bounds = layout.getBounds();
|
Rectangle2D bounds = getBounds(layout);
|
||||||
width = Math.max(width, getWidth(bounds));
|
width = Math.max(width, getWidth(bounds));
|
||||||
height += getHeight(layout);
|
height += getHeight(layout);
|
||||||
layouts.add(new Tuple(layout, bounds));
|
layouts.add(new Tuple(layout, bounds));
|
||||||
@@ -568,6 +569,19 @@ public class Label implements SwingConstants, LabelStyleConstants
|
|||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the bounds of the supplied text layout in a way that works
|
||||||
|
* around the various befuckeries that currently happen on the Mac.
|
||||||
|
*/
|
||||||
|
protected Rectangle2D getBounds (TextLayout layout)
|
||||||
|
{
|
||||||
|
if (RunAnywhere.isMacOS()) {
|
||||||
|
return layout.getOutline(null).getBounds();
|
||||||
|
} else {
|
||||||
|
return layout.getBounds();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the height based on the leading, ascent and descent rather
|
* Computes the height based on the leading, ascent and descent rather
|
||||||
* than what the layout reports via <code>getBounds()</code> which
|
* than what the layout reports via <code>getBounds()</code> which
|
||||||
|
|||||||
Reference in New Issue
Block a user