Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmallsql <smallsql>2012-03-22 01:37:33 +0400
committersmallsql <smallsql>2012-03-22 01:37:33 +0400
commitc4c5d53aaefa1a32a50626f5772709b0e3eb72e0 (patch)
tree1bff26f513b0d364fb8b1e41e459df80fd9112e5 /openjdk/sun/print
parentfefdd5a209c2621c3459442282b614f3160b3d7c (diff)
Add support for custom paper format
Diffstat (limited to 'openjdk/sun/print')
-rw-r--r--openjdk/sun/print/Win32PrintService.java27
1 files changed, 22 insertions, 5 deletions
diff --git a/openjdk/sun/print/Win32PrintService.java b/openjdk/sun/print/Win32PrintService.java
index cccff8d8..11df5f70 100644
--- a/openjdk/sun/print/Win32PrintService.java
+++ b/openjdk/sun/print/Win32PrintService.java
@@ -31,6 +31,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Hashtable;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@@ -98,7 +99,9 @@ public class Win32PrintService implements PrintService {
};
/** Mapping for PageSize.RawKind to predefined MediaSizeName */
- private static final MediaSizeName[] MEDIA_NAMES = new MediaSizeName[44];
+ private static final MediaSizeName[] MEDIA_NAMES = new MediaSizeName[70];
+
+ private static final Hashtable<String, MediaSizeName> CUSTOM_MEDIA_NAME = new Hashtable<>();
/* it turns out to be inconvenient to store the other categories
* separately because many attributes are in multiple categories.
@@ -119,7 +122,7 @@ public class Win32PrintService implements PrintService {
Chromaticity.class
};
- // conversion from 1/100 Inch (.NET) to um (Java)
+ // conversion from 1/100 Inch (.NET) to µm (Java)
private static final int INCH100_TO_MYM = 254;
private static final int MATCH_DIFF = 500; // 0.5 mm
@@ -168,6 +171,10 @@ public class Win32PrintService implements PrintService {
MEDIA_NAMES[41] = MediaSizeName.ISO_B4 ;
MEDIA_NAMES[42] = MediaSizeName.JAPANESE_POSTCARD ;
MEDIA_NAMES[43] = MediaSizeName.NA_9X11_ENVELOPE ;
+
+ MEDIA_NAMES[65] = MediaSizeName.ISO_A2 ;
+
+ MEDIA_NAMES[69] = MediaSizeName.ISO_A6 ;
// // augment the media size with the .NET default sizes available on the printer
// PrinterSettings ps = new PrinterSettings();
@@ -649,9 +656,13 @@ public class Win32PrintService implements PrintService {
* @return
*/
private MediaSizeName findMatchingMedia( PaperSize paper ){
- if( paper.get_RawKind() > 0 && paper.get_RawKind() <= MEDIA_NAMES.length ){
+ int rawKind = paper.get_RawKind();
+ if( rawKind > 0 && rawKind <= MEDIA_NAMES.length ){
// match to predefined size
- return MEDIA_NAMES[ paper.get_RawKind() - 1 ];
+ MediaSizeName media = MEDIA_NAMES[ rawKind - 1 ];
+ if( media != null ) {
+ return media;
+ }
}
int x = paper.get_Width() * INCH100_TO_MYM;
int y = paper.get_Height() * INCH100_TO_MYM;
@@ -668,7 +679,13 @@ public class Win32PrintService implements PrintService {
}
}
}
- return null;
+ MediaSizeName media = CUSTOM_MEDIA_NAME.get(paper.get_PaperName());
+ if (media == null) {
+ media = new CustomMediaSizeName(paper.get_PaperName());
+ CUSTOM_MEDIA_NAME.put(paper.get_PaperName(), media);
+ new MediaSize(paper.get_Width(), paper.get_Height(), MediaSize.INCH/100, media);
+ }
+ return media;
}
/**