Issue #230 fix scaling problems with printing to high dpi printers
Change-Id: I64e609d3b01a839d3b8927eedfd85f81ffc0301f Former-commit-id: 22418489fd697c94b2350d79e7701c8399842e2e
This commit is contained in:
parent
83fbf80c98
commit
f78fa301a8
2 changed files with 743 additions and 731 deletions
|
@ -33,8 +33,6 @@ import java.util.HashMap;
|
|||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.swt.printing.Printer;
|
||||
import org.eclipse.swt.printing.PrinterData;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
|
@ -48,6 +46,8 @@ import org.eclipse.swt.graphics.Rectangle;
|
|||
import org.eclipse.swt.graphics.Transform;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.printing.Printer;
|
||||
import org.eclipse.swt.printing.PrinterData;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
|
@ -61,16 +61,16 @@ import org.eclipse.swt.widgets.Spinner;
|
|||
import org.eclipse.swt.widgets.Text;
|
||||
|
||||
import com.raytheon.uf.viz.core.IDisplayPane;
|
||||
import com.raytheon.uf.viz.core.drawables.ResourcePair;
|
||||
import com.raytheon.uf.viz.core.rsc.ResourceList;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.DensityCapability;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.MagnificationCapability;
|
||||
import com.raytheon.uf.viz.d2d.core.ID2DRenderableDisplay;
|
||||
import com.raytheon.uf.viz.d2d.ui.DensityPopulator;
|
||||
import com.raytheon.uf.viz.d2d.ui.MagnificationPopulator;
|
||||
import com.raytheon.viz.ui.EditorUtil;
|
||||
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||
import com.raytheon.viz.ui.editor.AbstractEditor;
|
||||
import com.raytheon.uf.viz.d2d.ui.DensityPopulator;
|
||||
import com.raytheon.uf.viz.d2d.ui.MagnificationPopulator;
|
||||
import com.raytheon.uf.viz.core.drawables.ResourcePair;
|
||||
import com.raytheon.uf.viz.core.rsc.ResourceList;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.MagnificationCapability;
|
||||
import com.raytheon.uf.viz.core.rsc.capabilities.DensityCapability;
|
||||
import com.raytheon.uf.viz.d2d.core.ID2DRenderableDisplay;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
|
@ -135,7 +135,7 @@ public class PrintDialog extends CaveSWTDialog {
|
|||
|
||||
private DensityInformationStorage densityInformationStorage = null;
|
||||
|
||||
private float SCALE_CONST = .75f;
|
||||
private float SCALE_CONST = .89f;
|
||||
|
||||
private class MagnificationInformationStorage {
|
||||
private double applicationMagnification = 0.0;
|
||||
|
@ -710,8 +710,10 @@ public class PrintDialog extends CaveSWTDialog {
|
|||
Transform transform = new Transform(gc.getDevice());
|
||||
transform.translate(offset.x, offset.y);
|
||||
|
||||
transform.scale(printerSettings.scale * SCALE_CONST,
|
||||
printerSettings.scale * SCALE_CONST);
|
||||
transform.scale(SCALE_CONST * printerSettings.scale
|
||||
* printerDPI.x / (float) screenDPI.x, SCALE_CONST
|
||||
* printerSettings.scale * printerDPI.y
|
||||
/ (float) screenDPI.y);
|
||||
gc.setTransform(transform);
|
||||
|
||||
gc.drawImage(image, 0, 0);
|
||||
|
|
|
@ -40,6 +40,7 @@ import org.eclipse.swt.graphics.GC;
|
|||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.graphics.Transform;
|
||||
import org.eclipse.swt.printing.PrintDialog;
|
||||
import org.eclipse.swt.printing.Printer;
|
||||
import org.eclipse.swt.printing.PrinterData;
|
||||
|
@ -167,10 +168,16 @@ public class NsharpPrintHandle {
|
|||
Rectangle trim = printer.computeTrim(0, 0, 0, 0);
|
||||
Point dpi = printer.getDPI();
|
||||
|
||||
leftMargin = dpi.x + trim.x; // one inch from left side of paper
|
||||
rightMargin = clientArea.width - dpi.x + trim.x + trim.width; // one inch from right side of paper
|
||||
topMargin = dpi.y + trim.y; // one inch from top edge of paper
|
||||
bottomMargin = clientArea.height - dpi.y + trim.y + trim.height; // one inch from bottom edge of paper
|
||||
float dpiScaleX = dpi.x/72f;
|
||||
float dpiScaleY = dpi.y/72f;
|
||||
|
||||
Transform transform = new Transform(printer);
|
||||
transform.scale(dpiScaleX, dpiScaleY);
|
||||
|
||||
leftMargin = 72 + trim.x; // one inch from left side of paper
|
||||
rightMargin = clientArea.width - 72 + trim.x + trim.width; // one inch from right side of paper
|
||||
topMargin = 72 + trim.y; // one inch from top edge of paper
|
||||
bottomMargin = clientArea.height - 72 + trim.y + trim.height; // one inch from bottom edge of paper
|
||||
//System.out.println("leftMargin="+leftMargin+"rightMargin="+rightMargin+"topMargin"+topMargin+"bottomMargin"+bottomMargin);
|
||||
//leftMargin=54rightMargin=521topMargin54bottomMargin701
|
||||
/* Create a buffer for computing tab width. */
|
||||
|
@ -181,7 +188,9 @@ public class NsharpPrintHandle {
|
|||
|
||||
/* Create printer GC, and create and set the printer font & foreground color. */
|
||||
gc = new GC(printer);
|
||||
printerFont = new Font(printer, "Courier", 5, SWT.NORMAL);
|
||||
int fontSize = (int) Math.round(5/dpiScaleY);
|
||||
fontSize = Math.max(1, fontSize);
|
||||
printerFont = new Font(printer, "Courier", fontSize, SWT.NORMAL);
|
||||
gc.setFont(printerFont);
|
||||
tabWidth = gc.stringExtent(tabs).x;
|
||||
lineHeight = gc.getFontMetrics().getHeight();
|
||||
|
@ -192,7 +201,7 @@ public class NsharpPrintHandle {
|
|||
rgb = new RGB(255,255,255);//white
|
||||
printerBackgroundColor = new Color(printer, rgb);
|
||||
gc.setBackground(printerBackgroundColor);
|
||||
|
||||
gc.setTransform(transform);
|
||||
printer.startPage();
|
||||
// Print SkewT square
|
||||
gc.drawRectangle(leftMargin+SKEWT_X_ORIG, topMargin, SKEWT_WIDTH, SKEWT_HEIGHT);
|
||||
|
@ -322,6 +331,7 @@ public class NsharpPrintHandle {
|
|||
printerFont.dispose();
|
||||
printerForegroundColor.dispose();
|
||||
printerBackgroundColor.dispose();
|
||||
transform.dispose();
|
||||
gc.dispose();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue