de.intarsys.pdf.pd.PDLineAnnotation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jpod Show documentation
Show all versions of jpod Show documentation
This is a fork of http://sourceforge.net/projects/jpodlib/ as development seems to be frozen.
We're providing some bug fixes along with deployments to maven.
package de.intarsys.pdf.pd;
import de.intarsys.pdf.cds.CDSRectangle;
import de.intarsys.pdf.cos.COSArray;
import de.intarsys.pdf.cos.COSBasedObject;
import de.intarsys.pdf.cos.COSFixed;
import de.intarsys.pdf.cos.COSName;
import de.intarsys.pdf.cos.COSNumber;
import de.intarsys.pdf.cos.COSObject;
public class PDLineAnnotation extends PDMarkupAnnotation {
/**
* The meta class implementation
*/
public static class MetaClass extends PDMarkupAnnotation.MetaClass {
protected MetaClass(Class instanceClass) {
super(instanceClass);
}
@Override
protected COSBasedObject doCreateCOSBasedObject(COSObject object) {
return new PDLineAnnotation(object);
}
}
/**
* The meta class instance
*/
public static final MetaClass META = new MetaClass(MetaClass.class.getDeclaringClass());
public PDLineAnnotation(COSObject object) {
super(object);
}
@Override
protected COSName cosGetExpectedSubtype() {
return PDMarkupAnnotation.CN_Subtype_Line;
}
@Override
public float getMinHeight() {
return getBorderStyleWidth();
}
@Override
public float getMinWidth() {
return getBorderStyleWidth();
}
@Override
protected void updateStateRectangle(CDSRectangle oldRectangle, CDSRectangle newRectangle) {
COSArray line = cosGetField(PDMarkupAnnotation.DK_L).asArray();
if (line == null) {
return;
}
// get old rectangle for scaling
double oldX = oldRectangle.getLowerLeftX();
double oldY = oldRectangle.getLowerLeftY();
double oldWidth = oldRectangle.getWidth();
double oldHeight = oldRectangle.getHeight();
double dX = newRectangle.getLowerLeftX() - oldX;
double dY = newRectangle.getLowerLeftY() - oldY;
double fX = newRectangle.getWidth() / oldWidth;
double fY = newRectangle.getHeight() / oldHeight;
// scale
COSArray newLine = COSArray.create();
cosSetField(PDMarkupAnnotation.DK_L, newLine);
COSNumber cosX = (COSNumber) line.get(0);
COSNumber cosY = (COSNumber) line.get(1);
float x = cosX.floatValue();
float y = cosY.floatValue();
newLine.add(COSFixed.create((float) ((x - oldX) * fX + oldX + dX)));
newLine.add(COSFixed.create((float) ((y - oldY) * fY + oldY + dY)));
cosX = (COSNumber) line.get(2);
cosY = (COSNumber) line.get(3);
x = cosX.floatValue();
y = cosY.floatValue();
newLine.add(COSFixed.create((float) ((x - oldX) * fX + oldX + dX)));
newLine.add(COSFixed.create((float) ((y - oldY) * fY + oldY + dY)));
}
}