*/
protected boolean textOpen = false;
+ /**
+ * true if a BT command has been written.
+ */
+ protected boolean inTextMode = false;
+
/**
* the previous Y coordinate of the last word written.
* Used to decide if we can draw the next word on the same line.
/** Saves the graphics state of the rendering engine. */
protected void saveGraphicsState() {
+ endTextObject();
currentStream.add("q\n");
}
/** Restores the last graphics state of the rendering engine. */
protected void restoreGraphicsState() {
+ endTextObject();
currentStream.add("Q\n");
}
/** Indicates the beginning of a text object. */
protected void beginTextObject() {
- currentStream.add("BT\n");
+ if (!inTextMode) {
+ currentStream.add("BT\n");
+ inTextMode = true;
+ }
}
/** Indicates the end of a text object. */
protected void endTextObject() {
- currentStream.add("ET\n");
+ closeText();
+ if (inTextMode) {
+ currentStream.add("ET\n");
+ inTextMode = false;
+ }
}
/**
// multiply with current CTM
currentStream.add(CTMHelper.toPDFString(ctm) + " cm\n");
// Set clip?
- beginTextObject();
}
/**
* @see org.apache.fop.render.AbstractRenderer#endVParea()
*/
protected void endVParea() {
- endTextObject();
restoreGraphicsState();
currentState.pop();
}
bpMarginOffset = region.getBorderAndPaddingWidthBefore();
ipMarginOffset = region.getBorderAndPaddingWidthStart();
}
- beginTextObject();
drawBackAndBorders(region, startx, starty, width, height);
- endTextObject();
}
/**
float width, float height) {
// draw background then border
- boolean started = false;
Trait.Background back;
back = (Trait.Background)block.getTrait(Trait.BACKGROUND);
if (back != null) {
- started = true;
- closeText();
endTextObject();
- //saveGraphicsState();
if (back.getColor() != null) {
updateColor(back.getColor(), true, null);
BorderProps bps = (BorderProps)block.getTrait(Trait.BORDER_BEFORE);
if (bps != null) {
- float endx = startx + width;
-
- if (!started) {
- started = true;
- closeText();
- endTextObject();
- //saveGraphicsState();
- }
+ endTextObject();
float bwidth = bps.width / 1000f;
updateColor(bps.color, false, null);
}
bps = (BorderProps)block.getTrait(Trait.BORDER_AFTER);
if (bps != null) {
- if (!started) {
- started = true;
- closeText();
- endTextObject();
- //saveGraphicsState();
- }
+ endTextObject();
float bwidth = bps.width / 1000f;
updateColor(bps.color, false, null);
}
bps = (BorderProps)block.getTrait(Trait.BORDER_START);
if (bps != null) {
- if (!started) {
- started = true;
- closeText();
- endTextObject();
- //saveGraphicsState();
- }
+ endTextObject();
float bwidth = bps.width / 1000f;
updateColor(bps.color, false, null);
}
bps = (BorderProps)block.getTrait(Trait.BORDER_END);
if (bps != null) {
- if (!started) {
- started = true;
- closeText();
- endTextObject();
- //saveGraphicsState();
- }
+ endTextObject();
float bwidth = bps.width / 1000f;
updateColor(bps.color, false, null);
currentStream.add((x1 + width) + " " + (starty + height) + " l\n");
currentStream.add("S\n");
}
- if (started) {
- //restoreGraphicsState();
- beginTextObject();
- // font last set out of scope in text section
- currentFontName = "";
- }
}
private void updateLineStyle(int style) {
if (bv.getPositioning() == Block.ABSOLUTE) {
- closeText();
-
CTM tempctm = new CTM(containingIPPosition, containingBPPosition);
ctm = tempctm.multiply(ctm);
drawBackAndBorders(bv, x, y, width, height);
- endTextObject();
if (bv.getClip()) {
saveGraphicsState();
clip(x, y, width, height);
if (bv.getClip()) {
restoreGraphicsState();
}
- beginTextObject();
// clip if necessary
} else {
if (ctm != null) {
- closeText();
-
double[] vals = ctm.toArray();
//boolean aclock = vals[2] == 1.0;
if (vals[2] == 1.0) {
// clip if necessary
if (bv.getClip()) {
- if (ctm == null) {
- closeText();
- }
saveGraphicsState();
float x = (float)bv.getXOffset() / 1000f;
float y = (float)bv.getYOffset() / 1000f;
handleBlockTraits(bv);
if (ctm != null) {
- endTextObject();
startVParea(ctm);
currentIPPosition = 0;
currentBPPosition = 0;
if (bv.getClip()) {
restoreGraphicsState();
- if (ctm == null) {
- beginTextObject();
- }
- }
- if (ctm != null) {
- beginTextObject();
}
currentIPPosition = saveIP;
* @see org.apache.fop.render.Renderer#renderText(TextArea)
*/
public void renderText(TextArea text) {
+ beginTextObject();
StringBuffer pdf = new StringBuffer();
String name = (String) text.getTrait(Trait.FONT_NAME);
textOpen = false;
prevWordX = 0;
prevWordY = 0;
+ currentFontName = "";
}
}
* @param viewport the viewport to handle
*/
public void renderViewport(Viewport viewport) {
- closeText();
float x = currentIPPosition / 1000f;
float y = (currentBPPosition + viewport.getOffset()) / 1000f;
float height = viewport.getBPD() / 1000f;
drawBackAndBorders(viewport, x, y, width, height);
- endTextObject();
-
if (viewport.getClip()) {
saveGraphicsState();
if (viewport.getClip()) {
restoreGraphicsState();
}
- beginTextObject();
}
/**
* @param area the leader area to render
*/
public void renderLeader(Leader area) {
- closeText();
- endTextObject();
saveGraphicsState();
int style = area.getRuleStyle();
boolean alt = false;