[OpenJDK 2D-Dev] [9] RFR JDK-8162796: [macosx] LinearGradientPaint and RadialGradientPaint are not printed on OS X.

Phil Race philip.race at oracle.com
Thu Oct 27 20:31:32 UTC 2016


Sorry  .. I forgot one thing I meant to mention.
Please remove all those commented out frprintf debugging statements.

298 //fprintf(stderr, "gradientInfo->start.x %f, gradientInfo->start.y 
%f\n",
299 // gradientInfo->start.x, gradientInfo->start.y);
300 //fprintf(stderr, "gradientInfo->end.x %f, gradientInfo->end.y %f\n",
301 // gradientInfo->end.x, gradientInfo->end.y);


-phil.

On 10/26/2016 08:43 AM, Philip Race wrote:
> +1
>
> -phil.
>
> On 10/25/16, 11:01 PM, Prasanta Sadhukhan wrote:
>> Please find the webrev with modified testcase
>>
>> http://cr.openjdk.java.net/~psadhukhan/8162796/webrev.03/
>>
>> Regards
>> Prasanta
>> On 10/26/2016 2:45 AM, Philip Race wrote:
>>> Hi,
>>>
>>> This looks to work properly although I have a couple of nits and a 
>>> concern that perhaps we just need to live with.
>>>
>>> * @requires (os.family == "mac")
>>>
>>> Why ? This test should be valid across OSes .. and SFAIK Mac is the 
>>> only place it would fail without this fix.
>>> Both tests have this issue.
>>>
>>> I'd like the test(s) to use  [something like]
>>>   Point2D.Double p2 = new Point2D.Double(DIM/2.0, DIM/2.0);
>>>
>>> Otherwise the size of the shape to be filled neatly matches the span 
>>> of the gradient and that can hide bugs.
>>>
>>> I am not sure how much to be concerned that the "raster" path relies 
>>> on creating a custom paint whose
>>> size matches the bounds of the shape to which the paint will be 
>>> applied ..
>>> 536             PaintContext context = 
>>> sg2d.paint.createContext(sg2d.getDeviceColorModel(), userBounds, 
>>> userBounds, sIdentityMatrix, sg2d.getRenderingHints());
>>> 537             WritableRaster raster = (WritableRaster) 
>>> (context.getRaster(userBounds.x, userBounds.y, userBounds.width, 
>>> userBounds.height));
>>>
>>> If applied to a very large shape it will need a very large image.
>>> But this seems the only way to get the gradient with the right 
>>> reflect/repeat behaviour.
>>>
>>> -phil.
>>>
>>> On 10/24/16, 1:38 AM, Prasanta Sadhukhan wrote:
>>>> Please find modified webrev with Linear/Radial Gradient NO_CYCLE 
>>>> option catered through quartz api and REPEAT/REFLECT option catered 
>>>> via raster path.
>>>> http://cr.openjdk.java.net/~psadhukhan/8162796/webrev.02/
>>>>
>>>> Regards
>>>> Prasanta
>>>> On 10/22/2016 9:28 PM, Prasanta Sadhukhan wrote:
>>>>>
>>>>>
>>>>> On 10/22/2016 4:50 AM, Philip Race wrote:
>>>>>> Well it is confusing since in particular this exact change is in 
>>>>>> both webrevs :-
>>>>>> http://cr.openjdk.java.net/~psadhukhan/8162796/webrev.01/src/java.desktop/macosx/native/libawt_lwawt/awt/QuartzSurfaceData.m.sdiff.html 
>>>>>>
>>>>>>
>>>>> Yes. This is same and I had to add this in both webrevs as 
>>>>> TexturePaint patch is not yet approved.
>>>>>> One thing that I think seems less ideal about this fix, at least for
>>>>>> the Gradient case is that it is creating an image which shows 
>>>>>> pixelisation
>>>>>> effects when I zoom in using Preview ..
>>>>>>
>>>>>> I don't think the previous code showed those effects so it may be 
>>>>>> you
>>>>>> want a hybrid, using the original code when you can.
>>>>> ok. I will make NO_CYCLE option to go through quartz and other 
>>>>> REPEAT/REFLECT option to go though raster texturepaint path.
>>>>>
>>>>> Regards
>>>>> Prasanta
>>>>>> That probably is not an issue for TexturePaint ..
>>>>>>
>>>>>> -phil
>>>>>>
>>>>>> On 10/20/16, 9:40 PM, Prasanta Sadhukhan wrote:
>>>>>>> No, this webrev supports LinearGradient/RadialGradient for all 3 
>>>>>>> options. The fix seems to be almost same as in TexturePaint but 
>>>>>>> in a different else block in OSXSurfaceData.java.
>>>>>>>
>>>>>>> Regards
>>>>>>> Prasanta
>>>>>>> On 10/20/2016 9:31 PM, Phil Race wrote:
>>>>>>>> Leaving aside the tests, the webrev here looks to be the one 
>>>>>>>> proposed
>>>>>>>> for the TexturePaint bug. Did you get things mixed up ?
>>>>>>>>
>>>>>>>> -phil.
>>>>>>>>
>>>>>>>> On 10/20/2016 02:22 AM, Prasanta Sadhukhan wrote:
>>>>>>>>> Hi Phil,
>>>>>>>>>
>>>>>>>>> I have modified the webrev to support REFLECT and REPEAT 
>>>>>>>>> albeit via raster path and not via Quartz api, as Quartz 
>>>>>>>>> cannot handle REPEAT/REFLECT.
>>>>>>>>> http://cr.openjdk.java.net/~psadhukhan/8162796/webrev.01/
>>>>>>>>>
>>>>>>>>> Have tested with different fractions, stops, color.
>>>>>>>>>
>>>>>>>>> Regards
>>>>>>>>> Prasanta
>>>>>>>>> On 9/28/2016 2:06 AM, Philip Race wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> LinearGradientPaint has three options as to how it is 
>>>>>>>>>> extended beyond the end point
>>>>>>>>>>
>>>>>>>>>> https://docs.oracle.com/javase/8/docs/api/java/awt/MultipleGradientPaint.CycleMethod.html 
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> So far as I can see this code (and perhaps quartz) can only 
>>>>>>>>>> handle NO_CYCLE ..
>>>>>>>>>>
>>>>>>>>>> If REFLECT or REPEAT are specified and Quartz can't handle it 
>>>>>>>>>> we will need to
>>>>>>>>>> fall back to the raster path.
>>>>>>>>>>
>>>>>>>>>> I think it would be helpful to extend the test with examples 
>>>>>>>>>> that use these and
>>>>>>>>>> also more than just the two colours .. add a variant that 
>>>>>>>>>> tries more like 4 ...
>>>>>>>>>>
>>>>>>>>>> -phil.
>>>>>>>>>>
>>>>>>>>>> On 9/22/16, 2:03 AM, Prasanta Sadhukhan wrote:
>>>>>>>>>>> Hi All,
>>>>>>>>>>>
>>>>>>>>>>> Please review a fix for jdk9 where it is seen that 
>>>>>>>>>>> LinearGradientPaint is not getting printed on osx.
>>>>>>>>>>> The below webrev is only for LinearGradientPaint
>>>>>>>>>>> and RadialGradientPaint will be handled separately.
>>>>>>>>>>>
>>>>>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8162796
>>>>>>>>>>> webrev: 
>>>>>>>>>>> http://cr.openjdk.java.net/~psadhukhan/8162796/webrev.00/
>>>>>>>>>>>
>>>>>>>>>>> Issue was LinearGradientPaint is not handled in osx from 
>>>>>>>>>>> jdk7 onwards. It handles simple GradientPaint.
>>>>>>>>>>> Code is added as per
>>>>>>>>>>> https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadings/dq_shadings.html#//apple_ref/doc/uid/TP30001066-CH207-TPXREF101 
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> to use "CGGradientRef" quartz datatype to support 
>>>>>>>>>>> LinearGradientPaint.
>>>>>>>>>>> CGGradientRef is used compared to CGShadingRef because it is 
>>>>>>>>>>> mentioned in CGGradientRef,  i is "Easy to define more than 
>>>>>>>>>>> two locations and colors." as we set 2 or more colors and 2 
>>>>>>>>>>> or more fractions in LinearGradientPaint.
>>>>>>>>>>>
>>>>>>>>>>> Regards
>>>>>>>>>>> Prasanta
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>>
>>

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


More information about the 2d-dev mailing list