incubator-ooo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Armin Le Grand <>
Subject Re: Problems with axial gradient and low color steps
Date Fri, 14 Sep 2012 02:30:53 GMT
Hi Regina,

On 13.09.2012 22:43, Regina Henschel wrote:
> Hi Armin,
> comments inline.
> Armin Le Grand schrieb:
>> Hi Regina,
>> On 08.09.2012 21:27, Regina Henschel wrote:
>>> Hi Armin,
>>> Armin Le Grand schrieb:
>>>>      Hi Regina,
>>>> On 06.09.2012 21:35, Regina Henschel wrote:
>>>>> Hi all,
>>>>> I see a lot of problems with axial gradients, but I'm not sure about
>>>>> the
>>>>> desired behavior.
>>>>> Please have look at attachment
>>>>> in bug
>>>>> Problem (1): How many color steps has an axial gradient, if the user
>>>>> set
>>>>> it to n steps in the UI? Old versions (SO5.2 to at least OOo2.4.3)
>>>>> make
>>>>> it in n steps, with n/2 steps blending color "up" and n/2 steps
>>>>> blending
>>>>> color "down". Around OOo3.2.1 this behavior was changed so that (n-1)
>>>>> steps "up", 1 step in the middle and (n-1) steps down. In AOO we have
>>>>> now (n-1) steps "up" and (n-1) steps "down". The ODF does not specify
>>>>> it.
>>> How many stripes should the shape show, if the user sets the step count
>>> to 5 ?
>>> 5 -> old behavior, does not fit at all
>>> 8 -> behavior in 3.4.1 and 3.5
>>> 9 -> behavior in 3.2.1, only one middle strip
>>> 10 -> I would prefer this; as in 3.2.1, but with double middle strip
>> I agree. I first thought about 9, but 10 is the exactly once mirrored
>> behaviour of 'linear'. Do we have a task for it?
> I have written

Okay, I can use that.

>>>>> Problem (2): What colors should the steps have? In the old version the
>>>>> colors for "up" and "down" where different, what I think has been a
>>>>> bug.
>>>> Yes. Also the step count was wrongly interpreted. There are numerous
>>>> errors in the old, VCL-based gradient painters.
>>>>> In AOO 3.4.1 version neither the start not the end color is used, only
>>>>> values between.
>>>> Start and end color should be used (if visible). In the Yellow/Green
>>>> example this seems to be okay.
>>> Compare it with pure color green and pure color yellow and compare it
>>> with a linear gradient with green -> yellow and linear gradient with
>>> yellow -> green.
>>> The linear gradient includes the start color and excludes the end color.
>>> (I think that it would be better the other way round, because the start
>>> color can be included via border. But that is a different problem.)
>>> The axial gradient has neither start nor end color.
>> I see this both as errors. Start and end color should always be used. Do
>> we have tasks for this?
> I think, that it can be handled together in
>, because it is all
> in the same file.

Okay, agreed.

>>>>> Problem (3): The old gradients are still used for presentation mode,
>>>> AFAIK presentation has its own gradient rendering, targeted at
>>>> system-specific canvases. If redoing this, it sould use the primitives
>>>> directly (one day). It's an export.
>>>>> converting to bitmap,
>>>> Should use primitives nowadays. If not, should be changed to do so.
>>> Indeed, that is fixed in AOO3.5. It is correct for export to png and jpg
>>> too in AOO3.5.
>>> Copy and Save as "GDI metafile" is better in AOO3.5 than in AOO3.4.1.
>>> The gradient is the same as for the shape and the gradient rotates
>>> together with the shape, as expected for a picture. But 'Break' and
>>> 'Convert to bitmap' are wrong. 'Convert to bitmap' looses the rotation
>>> which comes from the shape rotation and 'Break' looses the step count in
>>> addition. But that is not specific for axial gradient.
>>>>> export to pdf
>>>> Yes, is based on and 'paints' metafiles (but not with the VCL
>>>> mechanisms). It's an export and should be changed to primitive usage
>>>> one
>>>> day.
>>> Mh. If I export it to pdf using my build with my changes in
>>> OutputDevice::ImplDrawLinearGradient, I can see exact this changes.
>> Okay, so export to metafile uses OutputDevice::ImplDrawLinearGradient.
>>>>> and flash.
>>>> Not sure about this, also an export.
>>>>> I think, that needs to be
>>>>> fixed. I have looked around, and think, that it is in
>>>>> OutputDevice::ImplDrawLinearGradient in
>>>>> \main\vcl\source\gdi\outdev4.cxx. Is that right? If yes, are other
>>>>> places effected as well? Should it be fixed or is someone working on
>>>>> more general solution?
>>>> It *could* be fixed there if really used. Have You tried to set breaks
>>>> (pr fprintfs) to check this? Most usages should not use it.
>>> No. I have changed the colors and steps in
>>> OutputDevice::ImplDrawLinearGradient and can see those changes using the
>>> resulting build.
>> Good.
>>>> If it is used, it could be made to work using temp primitives
>>>> internally
>>>> to ensure equal rendering.
>>> As far as I have tested, OutputDevice::ImplDrawLinearGradient is used in
>>> presentation mode, export to pdf, swf, emf, and wmf. The exports to png
>>> and jgp are OK in AOO3.5. I havn't tested other formats.
>>>> For all exports which are nowadays still based on metafiles the
>>>> solution
>>>> should be to rewrite/modify these exports to be based on primitives in
>>>> the future.
>>> Do I understand you correct, that you think, it is not worth to correct
>>> OutputDevice::ImplDrawLinearGradient? But the effort should be to make
>>> it totally superfluous?
>> No. I appreciate and (more than) welcome when you correct the behaviour
>> in OutputDevice::ImplDrawLinearGradient. This is the only (and probably
>> best) short-term solution.
> It is now in

Good. Should we add a cross-reference to the two tasks?

>> I just wanted to say that - if it would be a lot of work - it may be
>> worth to think about fixing it by migragting more exporters to primitive
>> usage. Doing so would in the optimal canse make the old gradient
>> rendering (OutputDevice::ImplDrawLinearGradient) obsolete, so fixing
>> that would be redundant.
>> When it's reasonable time effort to correct
>> OutputDevice::ImplDrawLinearGradient and (as it surely is) still far
>> away (unfortunately) to change other exporters to primitives, I am more
>> than happy to change it.
>> I'm looking forward to review those changes...
> I know what parts are wrong and can fix it using the methods, which are
> currently used in OutputDevice::ImplDrawLinearGradient. Some loops and
> color calculations need to be corrected. If that is OK, I can start.
> I don't know, how it can be done using primitives and would need a
> little bit assistance in that case.

I think when you can fix it in the traditional way it would be just 
okay. If you want to fix it using primitives I can give you advice. In 
the long run it sould be used less and less, so fixing the existing 
implementation will be okay when its not too complex. Thanks for your 
assistance here!

> Kind regards
> Regina


View raw message