зеркало из https://github.com/mono/ikvm-fork.git
Fix the LineMetrics and solve some JUnit tests
This commit is contained in:
Родитель
b49e2890ef
Коммит
d6e58ff235
|
@ -28,6 +28,8 @@ import java.awt.font.FontRenderContext;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import sun.awt.SunHints;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -56,11 +58,11 @@ public abstract class Font2D{
|
||||||
* population of the strikes. However since users of these strikes are
|
* population of the strikes. However since users of these strikes are
|
||||||
* transient, then the one that was overwritten would soon be freed.
|
* transient, then the one that was overwritten would soon be freed.
|
||||||
* If there is any problem then a small synchronized block would be
|
* If there is any problem then a small synchronized block would be
|
||||||
* required with its attendant consequences for MP scaleability.
|
* required with its attendant consequences for MP scalability.
|
||||||
*/
|
*/
|
||||||
public FontStrike getStrike(Font font, AffineTransform devTx,
|
public FontStrike getStrike(Font font, AffineTransform devTx, int aa, int fm){
|
||||||
int aa, int fm) {
|
return getStrike(font, new FontRenderContext(devTx, aa == SunHints.INTVAL_TEXT_ANTIALIAS_ON,
|
||||||
return getStrike(font, null);
|
fm == SunHints.INTVAL_FRACTIONALMETRICS_ON));
|
||||||
}
|
}
|
||||||
|
|
||||||
public FontStrike getStrike(Font font, FontRenderContext frc) {
|
public FontStrike getStrike(Font font, FontRenderContext frc) {
|
||||||
|
@ -87,10 +89,35 @@ public abstract class Font2D{
|
||||||
*/
|
*/
|
||||||
public void getFontMetrics(Font font, AffineTransform identityTx, Object antiAliasingHint,
|
public void getFontMetrics(Font font, AffineTransform identityTx, Object antiAliasingHint,
|
||||||
Object fractionalMetricsHint, float[] metrics){
|
Object fractionalMetricsHint, float[] metrics){
|
||||||
// TODO Auto-generated method stub
|
FontRenderContext frc = new FontRenderContext(identityTx, antiAliasingHint, fractionalMetricsHint);
|
||||||
|
StrikeMetrics strikeMetrics = getStrike(font, frc).getFontMetrics();
|
||||||
|
metrics[0] = strikeMetrics.getAscent();
|
||||||
|
metrics[1] = strikeMetrics.getDescent();
|
||||||
|
metrics[2] = strikeMetrics.getLeading();
|
||||||
|
metrics[3] = strikeMetrics.getMaxAdvance();
|
||||||
|
|
||||||
|
getStyleMetrics(font.getSize2D(), metrics, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The length of the metrics array must be >= offset+4, and offset must be
|
||||||
|
* >= 0. Typically offset is 4. This method will
|
||||||
|
* store the following elements in that array before returning:
|
||||||
|
* metrics[off+0]: strikethrough offset
|
||||||
|
* metrics[off+1]: strikethrough thickness
|
||||||
|
* metrics[off+2]: underline offset
|
||||||
|
* metrics[off+3]: underline thickness
|
||||||
|
*
|
||||||
|
* Note that this implementation simply returns default values;
|
||||||
|
* subclasses can override this method to provide more accurate values.
|
||||||
|
*/
|
||||||
|
public void getStyleMetrics(float pointSize, float[] metrics, int offset) {
|
||||||
|
metrics[offset] = -metrics[0] / 2.5f;
|
||||||
|
metrics[offset+1] = pointSize / 12;
|
||||||
|
metrics[offset+2] = metrics[offset+1] / 1.5f;
|
||||||
|
metrics[offset+3] = metrics[offset+1];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The length of the metrics array must be >= 4. This method will
|
* The length of the metrics array must be >= 4. This method will
|
||||||
* store the following elements in that array before returning:
|
* store the following elements in that array before returning:
|
||||||
|
|
|
@ -104,8 +104,8 @@ public class PhysicalStrike extends FontStrike{
|
||||||
float height = family.GetLineSpacing(style) * factor;
|
float height = family.GetLineSpacing(style) * factor;
|
||||||
float leading = height - ascent - descent;
|
float leading = height - ascent - descent;
|
||||||
strike = new StrikeMetrics(
|
strike = new StrikeMetrics(
|
||||||
0, -ascent,
|
0, -ascent - leading/2,
|
||||||
0, descent,
|
0, descent - leading/2,
|
||||||
0.25f, 0,
|
0.25f, 0,
|
||||||
0, leading,
|
0, leading,
|
||||||
size2D * 2, 0);
|
size2D * 2, 0);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче