< prev index next >
src/java.desktop/share/classes/sun/print/RasterPrinterJob.java
Print this page
@@ -789,16 +789,19 @@
}
updateAttributesWithPageFormat(pservice, page, attributes);
return page;
}
- final GraphicsConfiguration gc =
- GraphicsEnvironment.getLocalGraphicsEnvironment().
+ GraphicsConfiguration grCfg = null;
+ Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+ if (w != null) {
+ grCfg = w.getGraphicsConfiguration();
+ } else {
+ grCfg = GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice().getDefaultConfiguration();
- Rectangle bounds = gc.getBounds();
- int x = bounds.x+bounds.width/3;
- int y = bounds.y+bounds.height/3;
+ }
+ final GraphicsConfiguration gc = grCfg;
PrintService service = java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<PrintService>() {
public PrintService run() {
PrintService service = getPrintService();
@@ -812,13 +815,48 @@
if (service == null) {
return null;
}
+ // we position the dialog a little beyond the upper-left corner of the window
+ // which is consistent with the NATIVE page dialog
+ Rectangle gcBounds = gc.getBounds();
+ int x = gcBounds.x+50;
+ int y = gcBounds.y+50;
ServiceDialog pageDialog = new ServiceDialog(gc, x, y, service,
DocFlavor.SERVICE_FORMATTED.PAGEABLE,
attributes, (Frame)null);
+
+ Rectangle dlgBounds = pageDialog.getBounds();
+
+ // if portion of dialog is not within the gc boundary
+ if (!gcBounds.contains(dlgBounds)) {
+
+ int dlgWidth = 0;
+ int dlgHeight = 0;
+
+ // if dialog bounds exceed window bounds, check if
+ // positioning the dialog by moving it (bounds.x + bounds.width) - dlgBound.width
+ // will result in moving it beyond the window bounds, then
+ // position it at window top-left
+ // so that dialog is entirely on-screen
+ if ((gcBounds.x + gcBounds.width - dlgBounds.width) > gcBounds.x) {
+ x = (gcBounds.x + gcBounds.width) - dlgBounds.width;
+ dlgWidth = dlgBounds.width;;
+ } else {
+ x = gcBounds.x;
+ dlgWidth = gcBounds.width;
+ }
+ if ((gcBounds.y + gcBounds.height - dlgBounds.height) > gcBounds.y) {
+ y = (gcBounds.y + gcBounds.height) - dlgBounds.height;
+ dlgHeight = dlgBounds.height;
+ } else {
+ y = gcBounds.y;
+ dlgHeight = gcBounds.height;
+ }
+ pageDialog.setBounds(x, y, dlgWidth, dlgHeight);
+ }
pageDialog.show();
if (pageDialog.getStatus() == ServiceDialog.APPROVE) {
PrintRequestAttributeSet newas =
pageDialog.getAttributes();
@@ -891,13 +929,19 @@
* to a chosen printer.
*
* We raise privilege when we put up the dialog, to avoid
* the "warning applet window" banner.
*/
- final GraphicsConfiguration gc =
- GraphicsEnvironment.getLocalGraphicsEnvironment().
+ GraphicsConfiguration grCfg = null;
+ Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+ if (w != null) {
+ grCfg = w.getGraphicsConfiguration();
+ } else {
+ grCfg = GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice().getDefaultConfiguration();
+ }
+ final GraphicsConfiguration gc = grCfg;
PrintService service = java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<PrintService>() {
public PrintService run() {
PrintService service = getPrintService();
@@ -938,13 +982,14 @@
services = new PrintService[1];
services[0] = service;
}
}
- Rectangle bounds = gc.getBounds();
- int x = bounds.x+bounds.width/3;
- int y = bounds.y+bounds.height/3;
+ // we position the dialog a little beyond the upper-left corner of the window
+ // which is consistent with the NATIVE print dialog
+ int x = 50;
+ int y = 50;
PrintService newService;
// temporarily add an attribute pointing back to this job.
PrinterJobWrapper jobWrapper = new PrinterJobWrapper(this);
attributes.add(jobWrapper);
try {
< prev index next >