/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.ui.editor.print;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.printing.Printer;
public class Page {
Printer printer;
GraphicalViewer viewer = null;
double scale = 1;
int width = 0;
int height = 0;
int x = 0;
int y = 0;
int number = 1;
Font font;
int space = 0;
String[] text;
PageFormat pageFormat = null;
Rectangle rect;
boolean select = false;
PropertyChangeSupport pcs = new PropertyChangeSupport(this);
boolean textPrint = false;
public Pages pages = null;
public Page(Pages pages, String[] text, Font f, int space, PageFormat pf,
int number) {
this.textPrint = true;
this.text = text;
this.font = f;
this.space = space;
this.pageFormat = pf;
this.number = number;
this.pages = pages;
}
public Page(Pages pages, Rectangle r, GraphicalViewer viewer,
PageFormat pf, double scale, int x, int y, int number) {
this.rect = r;
this.viewer = viewer;
this.pageFormat = pf;
this.scale = scale;
this.x = x;
this.y = y;
this.number = number;
this.textPrint = false;
this.pages = pages;
}
public void printText() {
}
public void printImage() {
PageFormat pf = this.getPageFormat();
Printer printer = pf.getPrinter();
Point screenDPI = pf.getDisplay().getDPI();
Point printerDPI = printer.getDPI();
int scaleFactorX = printerDPI.x / screenDPI.x;
int scaleFactorY = printerDPI.y / screenDPI.y;
Rectangle trim = printer.computeTrim(0, 0, 0, 0);
if (printer.startPage()) {
Image displayImage = this.pages.getPrintImage();
ImageData imageData = displayImage.getImageData();
Rectangle real = new Rectangle(this.x, this.y, pf
.getImageableWidth(), pf.getImageableHeight());
GC gp = new GC(printer);
if ((int) (imageData.width * this.scale) <= real.width
&& (int) (imageData.height * this.scale) <= real.height) {
gp.drawImage(displayImage, 0, 0, imageData.width,
imageData.height, -trim.x, -trim.y, (int) (scaleFactorX
* imageData.width * this.scale),
(int) (scaleFactorY * imageData.height * this.scale));
} else {
Rectangle scaleReal = new Rectangle(
(int) (real.x / this.scale),
(int) (real.y / this.scale),
(int) (real.width / this.scale),
(int) (real.height / this.scale));
Image newImg = new Image(pf.getDisplay(), displayImage
.getImageData());
GC tgc = new GC(newImg);
Image tmpImg = new Image(pf.getDisplay(), scaleReal.width,
scaleReal.height);
tgc.copyArea(tmpImg, scaleReal.x, scaleReal.y);
tgc.dispose();
displayImage = new Image(printer, tmpImg.getImageData());
imageData = displayImage.getImageData();
gp.drawImage(displayImage, 0, 0, imageData.width,
imageData.height, -trim.x, -trim.y, (int) (scaleFactorX
* imageData.width * this.scale),
(int) (scaleFactorY * imageData.height * this.scale));
}
gp.dispose();
printer.endPage();
}
}
public void drawPageInfo(GC g2, PageFormat pf) {
}
public void setRectangle(Rectangle r) {
this.rect = r;
}
public Rectangle getRectangle() {
return this.rect;
}
public void setSelected(boolean select) {
boolean oldValue = this.select;
this.select = select;
pcs.firePropertyChange("select", oldValue, select); //$NON-NLS-1$
}
public boolean isSelected() {
return this.select;
}
public void addPropertyChangeListener(PropertyChangeListener pcl) {
pcs.addPropertyChangeListener(pcl);
}
public void removePropertyChangeListener(PropertyChangeListener pcl) {
pcs.removePropertyChangeListener(pcl);
}
public int getNumber() {
return this.number;
}
public PageFormat getPageFormat() {
return this.pageFormat;
}
}