[OpenJDK 2D-Dev] [9] RFR JDK-6601097:Margins are not reset to hardware margins when width/height is 0 or -ve alongwith x, y

prasanta sadhukhan prasanta.sadhukhan at oracle.com
Fri Jun 17 06:32:30 UTC 2016


Hi Phil,

Ok. I have added a check for this case in which it will fall back to 
default values since
if ix/iy is too large then we probably will not get anything to print 
inside printable area if we have to leave same margin on the 
right/bottom of the paper.
validatePaper() does not check for ix/iy too large case.

Modified webrev
http://cr.openjdk.java.net/~psadhukhan/6601097/webrev.03/

Regards
Prasanta
On 6/16/2016 5:11 AM, Philip Race wrote:
> I did say so long as the "ix/iy" are also valid. Which means not just 
> positive but that they
> are not too large. Consider
> if (iw <= 0) iw = (float)(page.getPaper().getWidth()/DPI) - (ix*2);
>
> if we have ix = 500 and iw = -20 for a paper with width 800 this will 
> result
> in iw = 800 - (500*2) = -200 ..
>
> -phil.
>
> On 6/8/16, 4:42 AM, prasanta sadhukhan wrote:
>> Hi Phil,
>>
>> As discussed offline, regarding mpa modification in both 
>> setAttributes() and updateAttributesWithPageFormat, I found that
>> updateAttributesWithPageFormat() will be called during pageDialog() 
>> and setPrintable()
>> whereas setAttributes() will be called during print() and 
>> setAttributes() called validatePaper() to validate imageable values, 
>> so in that regard, setAttributes() has final say in validating and 
>> updating invalid mpa values.
>>
>> Regarding bug, I found that if we have -ve width/height, 
>> MediaPrintable constructor throws IAE if width/height is -ve so mpa 
>> values set by user will not be added to pageAttributes (even if there 
>> was valid x,y mpa values)
>> therefore we fallback to Java default paper size and so we will get 
>> mpa values as ix=72 iy=72 iw=451 ih=697 in validatePaper()
>> so to avoid IAE and to use user-set valid values, I have modified the 
>> code to constrain iw/ih with requested ix/iy as you suggested.
>>
>> Please find the modified webrev:
>> http://cr.openjdk.java.net/~psadhukhan/6601097/webrev.02/
>>
>> Regards
>> Prasanta
>> On 5/31/2016 10:12 PM, Phil Race wrote:
>>> Well ... few printers can print on the entire paper. Photo printers are
>>> the ones that can do this. So Paper dimension minus the "hardware 
>>> margins"
>>> are the maximum imageable width.
>>> And then supposing imageable x/y is some perfectly reasonable value 
>>> like 1" each
>>> then you've set iw/ih such that even a printer with zero hardware 
>>> margins has
>>> an imageable area that goes off the bottom and right off the paper.
>>>
>>> More reasonable would be to constrain iw/ih such that they work with 
>>> the
>>> requested ix/iy - assuming they are also valid.
>>>
>>> If all else fails then just using the "default" set of values as if 
>>> the application
>>> had not set any values would be better.
>>>
>>> -phil.
>>>
>>> On 05/26/2016 03:26 AM, prasanta sadhukhan wrote:
>>>> Hi Phil,
>>>>
>>>> I got it rectified.
>>>>
>>>> Please find the modified webrev
>>>>
>>>> http://cr.openjdk.java.net/~psadhukhan/6601097/webrev.01/
>>>>
>>>> Regarding using entire width/height pf paper, I thought since 
>>>> imageable width/height is invalid we should make the entire paper 
>>>> as the imageable area.For invalid x,y we were making it to paper's 
>>>> top/left.
>>>> Else what option do we have, should we calculate 
>>>> width[height]=abs(image[width][height]) instead?
>>>>
>>>> Regards
>>>> Prasanta
>>>> On 5/25/2016 10:07 PM, Philip Race wrote:
>>>>> It seems to me that you are using the wrong units.
>>>>> You have not divided by DPI to get inches.
>>>>>
>>>>> Also I am not sure that the *entire* width/height of the paper is 
>>>>> what you want here
>>>>> but that is secondary to the first issue
>>>>>
>>>>> -phil
>>>>>
>>>>> On 5/19/16, 2:59 AM, prasanta sadhukhan wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> Please review a fix for jdk9 which is a continuation of the fix 
>>>>>> of JDK-6543815.
>>>>>>
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-6601097
>>>>>> webrev: http://cr.openjdk.java.net/~psadhukhan/6601097/webrev.00/
>>>>>>
>>>>>> 6543815 fix resets the x,y to 0 if they are negative before 
>>>>>> creating a MediaPrintableArea and the platform replaces it with 
>>>>>> hardware margins when printing.
>>>>>> This works only if x/y is negative.
>>>>>> But, If either width/height is negative alongwith x or y, then 
>>>>>> the margin is set to the java def 1 inch margin and not hardware 
>>>>>> margins.
>>>>>>
>>>>>> This is because width/height -ve results in IAE in 
>>>>>> MediaPrintableArea constructor and so values are ignored.
>>>>>> Added a check for -ve width/height to make sure width/height are 
>>>>>> set to minimum paper width/height.
>>>>>>
>>>>>> Regards
>>>>>> Prasanta
>>>>>>
>>>>>>
>>>>
>>>
>>

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


More information about the 2d-dev mailing list