) {
if (d == null || !d.ulOn && d.imUlStroke == null && !d.strikeThrough) {
return segmentOutline; // Nothing to do
}
Area res = new Area(segmentOutline);
float left = (float) trs.getLogicalBounds().getMinX() - trs.x;
float right = (float) trs.getLogicalBounds().getMaxX() - trs.x;
d.getStrokes(trs.metrics);
if (d.strikeThrough) {
float y = trs.metrics.strikethroughOffset;
res.add(new Area(d.strikeThroughStroke.createStrokedShape(
new Line2D.Float(left, y, right, y)
)));
}
if (d.ulOn) {
float y = trs.metrics.underlineOffset;
res.add(new Area(d.ulStroke.createStrokedShape(
new Line2D.Float(left, y, right, y)
)));
}
if (d.imUlStroke != null) {
float y = trs.metrics.underlineOffset;
res.add(new Area(d.imUlStroke.createStrokedShape(
new Line2D.Float(left, y, right, y)
)));
if (d.imUlStroke2 != null) {
y++;
res.add(new Area(d.imUlStroke2.createStrokedShape(
new Line2D.Float(left, y, right, y)
)));
}
}