On Mon, 17 Jun 2024 05:54:37 GMT, Renjith Kannath Pariyangad 
<rkannathp...@openjdk.org> wrote:

> Hi Reviewers,
> 
> This fix will resolve page range not printing proper pages if the rage begin 
> from 2 or above on Mac machines. 
> I have verified the manual range related tests like PageRanges.java, 
> ClippedImages.java and test.java and confirmed its fixing the issue.
> 
> Please review and let me know your suggestions if any.

> I added some traces and ran the test `PageRanges.java` with and without your 
> proposed changes.
> 
> The diff:
> 
> ```diff
> diff --git 
> a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java 
> b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java
> index 416a3ee002b..6ddf46896b2 100644
> --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java
> +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java
> @@ -33,6 +33,7 @@
>  import java.net.URI;
>  import java.security.AccessController;
>  import java.security.PrivilegedAction;
> +import java.util.Arrays;
>  import java.util.concurrent.atomic.AtomicReference;
>  
>  import javax.print.*;
> @@ -325,6 +325,8 @@ public void print(PrintRequestAttributeSet attributes) 
> throws PrinterException {
>                  lastPage = mDocument.getNumberOfPages() - 1;
>              }
>          }
> +        System.out.println("print: firstPage = " + firstPage + "; "
> +                           + "lastPage = " + lastPage);
>  
>          try {
>              synchronized (this) {
> @@ -338,7 +340,11 @@ public void print(PrintRequestAttributeSet attributes) 
> throws PrinterException {
>                                                   : 
> (PageRanges)attributes.get(PageRanges.class);
>              int[][] prMembers = (pr == null) ? new int[0][0] : 
> pr.getMembers();
>              int loopi = 0;
> +            System.out.println("pr = " + pr);
> +            System.out.println("prMembers = " + 
> Arrays.deepToString(prMembers));
>              do {
> +                System.out.println("printLoop: firstPage = " + firstPage + 
> "; "
> +                                   + "lastPage = " + lastPage);
>                  if (EventQueue.isDispatchThread()) {
>                      // This is an AWT EventQueue, and this print rendering 
> loop needs to block it.
>  
> ```
> 
> The output:
> 
> ```
> 2-3 + 3-5 without Renjith changes
> print: firstPage = 1; lastPage = 2
> pr = 2-3
> prMembers = [[2, 3]]
> printLoop: firstPage = 1; lastPage = 2
> print: firstPage = 2; lastPage = 4
> pr = 3-5
> prMembers = [[3, 5]]
> printLoop: firstPage = 2; lastPage = 4
> 
> 2-3 + 3-5 with Renjith changes
> print: firstPage = 0; lastPage = -1
> pr = 2-3
> prMembers = [[2, 3]]
> printLoop: firstPage = 0; lastPage = -1
> print: firstPage = 0; lastPage = -1
> pr = 3-5
> prMembers = [[3, 5]]
> printLoop: firstPage = 0; lastPage = -1
> ```
> 
> In the first case, I got page 3 and page 5 printed; with Renjith's changes, I 
> got the correct range printed 2-3 and 3-5.
> 
> So it works… kind of. I believe the bug is somewhere in native code.
> 
> What would be printed if `PageRanges` contains several ranges? This case 
> should be supported as well.
> 
> Since the last page to be printed is -1, `PrinterView->knowsPageRange` sets 
> `aRange->length` to `NSIntegerMax`. This does not look right, even though it 
> works.
> 
> https://github.com/openjdk/jdk/blob/08ace27da1d9cd215c77471eabf41417ff6282d2/src/java.desktop/macosx/native/libawt_lwawt/awt/PrinterView.m#L130-L152

Yes, there is some disconnect. For all OS (MAC with above changes) print range 
is working properly only with following values firstPage =0 and lastPage =-1 at 
**RasterPrinterJob.java** and highly depend on **pageRangesAttr** . I don't 
think there is any issue with native code, with this change I have brought MAC 
same as other OS.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/19740#issuecomment-2182895930

Reply via email to