[OpenJDK 2D-Dev] [9] RFR JDK-6574279: validatePage from PrinterJob returns argument under linux

Prasanta Sadhukhan prasanta.sadhukhan at oracle.com
Fri Aug 5 10:20:02 UTC 2016



On 8/4/2016 5:45 PM, Prasanta Sadhukhan wrote:
> I will override in PSPrinterJob but
> 1662             MediaPrintableArea mpa =
> 1663 (MediaPrintableArea)getPrintService().
> 1664 getDefaultAttributeValue(MediaPrintableArea.class);
>
> is returning imageable area of default media of chosen printer from 
> CUPS [ all supported media printable area is obtained from 
> CUPSPrinter#getPageSizes(printer) & then initMedia() populates 
> cupsMediaPrintables which is returned in getMediaPrintableArea()]
> as IPPPrintService#getDefaultAttributeValue() does
> ----------
> if (category == MediaPrintableArea.class) {
>             MediaPrintableArea[] mpas;
>              if ((cps != null)  &&
>                  ((mpas = *cps.getMediaPrintableArea()*) != null)) {
>                  if (defaultMediaIndex == -1) {
>                      // initializes value of defaultMediaIndex
>                      getDefaultAttributeValue(Media.class);
>                  }
>                  return mpas[*defaultMediaIndex*];
>              }
> --------------
> by which mpas[defaultMediaIndex] returns default media printable area.
> In else block, we instantiate mpa of Letter for US locale and A4 for 
> other locales so I was not checking for null as in both if and else 
> block , I was getting MediaPrintableArea instance.
>
> Regarding considering equal margins, I am not sure if there was any 
> way I could get right and left margin separately.
> Please let me know if there is any way you know of.
I have modified to do the change in PSPrinterJob. Regarding the equal 
margin, we do the same in 
http://hg.openjdk.java.net/jdk9/client/jdk/file/abb2a39948fe/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java#l688
http://cr.openjdk.java.net/~psadhukhan/6574279/webrev.01/

Regards
Prasanta
>
> Regards
> Prasanta
> On 8/4/2016 2:32 AM, Philip Race wrote:
>> High-level question. Why is this not an over-ride in PSPrinterJob ?
>>
>>
>> I'm afraid I did not get much past the first line of the change :
>> 1662             MediaPrintableArea mpa =
>> 1663 (MediaPrintableArea)getPrintService().
>> 1664 getDefaultAttributeValue(MediaPrintableArea.class);
>>
>> Read the docs for MediaPrintableArea :-
>> ---
>> To query for the printable area, a client must supply a suitable 
>> context.
>> Without specifying at the very least the size of the media being used
>> no meaningful value for printable area can be obtained.
>> ---
>>
>> .. not to mention you assume a non-null return.
>>
>> and then you use new Paper() .. which is a constructor which
>> knows nothing about the printer. It is *speced* to return
>> US letter with one inch margins.
>>
>> Another reason why this seems like it should be a sub-class over-ride.
>>
>>
>> Also this looks wrong ---
>> 1672             if ((imgX*2) + imgWid > wid) {
>> 1673                 imgWid = wid - imgX*2;
>> 1674             }
>>
>> You can't assume equal margins.
>>
>> -phil.
>>
>> On 7/12/16, 5:05 AM, Prasanta Sadhukhan wrote:
>>> Hi All,
>>>
>>> Please review a fix for an issue where it is seen that if user sets 
>>> invalid imageablearea via Paper.setImageableArea and
>>> then calls PrinterJob.validatePage() in linux, then it does not get 
>>> a valid pageformat
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-6574279
>>> webrev: http://cr.openjdk.java.net/~psadhukhan/6574279/webrev.00/
>>>
>>> Fix is to check for margin as noted via CUPS ppdPageSize() and then 
>>> calculate to find the valid margin in validatePaper()
>>> similar to what we do in native validatePaper() in windows.
>>>
>>> Regards
>>> Prasanta
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160805/3d4d4ad0/attachment.html>


More information about the 2d-dev mailing list