Offset uniqueness in vector of ColorSteps

Regina Henschel rb.henschel at t-online.de
Wed Mar 15 15:24:55 UTC 2023


Hi Armin, hi Michael,

Michael, I have put you an CC, because this is about ODF. Do you prefer 
one of the ideas (A)(B)(C)(D) or have a better idea?

Armin Le Grand schrieb am 15.03.2023 um 11:20:
> Hi Regina,
{..]

> 
> Yes, we cannot change our stuff too far to get to svg definitions - we 
> will not get rid of these. We will also not have a svg:spreadMethod. The 
> currently important point is to use existing svg definitions (to not get 
> even further away from svg as needed) as far as possible, as far in 
> their svg meaning as possible, too.
> 
> For now we need to get the Color-Stops added to 'our' gradients. Do you 
> have concrete examples/advice how to do that?

I can think of these ways:
(A)
Add a child element <draw:gradient-stop-list> as optional child element 
to <draw:gradient>.
Specify that if a <draw:gradient-stop-list> child element is present, 
then the attributes draw:start-color, draw:start-intensity, 
draw:end-color, draw:end-intensity and draw:gradient-step-count are ignored.
The <draw:gradient-stop-list> element has <svg:stop> child elements, in RNG
     <rng:zeroOrMore>
         <rng:ref name="svg-stop"/>
     </rng:zeroOrMore>
Specify that the rules in 13.2.4 SVG 1.1. for interpreting the 
svg:offset values and handling of less than two <svg:stop> elements 
shall be followed.

(B)
Add
     <rng:zeroOrMore>
         <rng:ref name="svg-stop"/>
     </rng:zeroOrMore>
as child elements to <draw:gradient> and a boolean attribute
draw:multicolor.
If draw:multicolor is true, then the child elements <svg:stop> are used 
and draw:start-color ... are ignored, otherwise draw:start-color ... are 
used.
Specify that the rules in 13.2.4 SVG 1.1. ... shall be followed.

(C)
Add total new <draw:multicolor-gradient> element. Define it that way, 
that it is suitable to describe OOXML gradFill and suitable to describe 
a multi-color version of LO's current <draw:gradient> element. That 
includes not only a list of gradient stops but in addition a focus 
rectangle and a tile rectangle.

(D)
Add
     <rng:zeroOrMore>
         <rng:ref name="svg-stop"/>
     </rng:zeroOrMore>
as child elements to <draw:gradient>
Add that in case <svg:stop> child elements exist, draw:start-color 
together with draw:start-intensity is treated as being a <svg:stop> 
element with svg:offset="0%" and svg:opacity="1" before all given 
<svg:stop> elements,
and draw:end-color together with draw:end-intensity is treated as being 
a svg:stop element with svg:offset="100%" and svg:opacity="1" after all 
given <svg:stop> elements,
and draw:gradient-step-count is treated as "0".
Specify that the rules in 13.2.4 SVG 1.1. ... shall be followed.

>>> I would take out from this the StartColor (AKA offset == 0.0) and the 
>>> EndColor (AKA offset == 1.0), so in the normal case there would be no 
>>> change at all. >
>>> If there are ColorSteps with offset != 0.0 or 1.0 I would create that 
>>> extra-entries for these.
>>
>> What do you mean by "take out"?
> 
> 
> Just that for 0% I would use our draw:start-color and for 100% our 
> draw:end-color. I would only write new entries in svg-conform semantic 
> for offsets ]0%..100%[. This is to stay as compatible as possible. It 
> also makes no sense to 'double' the information with having the same 
> color represented e.g. for StartColor once as draw:start-color and once 
> as <stop offset="0%"/>.

I think, that would be like I have described as way (D).


Because the introduction of theme colors, it might be needed to extend 
<svg:stop> to not only have stop-color attribute in the sense of SVG but 
allow a reference to a scheme-color in addition. In case of (D) that 
would have to be added for start- and end-color too.

Kind regards,
Regina


More information about the LibreOffice mailing list