Offset uniqueness in vector of ColorSteps
Armin Le Grand
armin_le_grand at me.com
Tue Mar 14 14:08:00 UTC 2023
Hi Regina,
good to hear from you, wanted to contact you already anyways, but we
were just moving, so I was pretty busy :-)
On 3/14/23 14:09, Regina Henschel wrote:
> Hi Armin,
>
> you put the ColorSteps into a sorted vector with unique offsets of the
> ColorSteps.
>
> I see a problem with "unique". Both OOXML and SVG allow several color
> stops to have the same offset. Users need it in OOXML and SVG
> gradients to create stepped gradients like those from ODF draw:gradient.
>
> Thus forcing uniqueness in our core will give problems in import
> filter and in implementing the <svg:radialGradient> and
> <svg:linearGradient> from ODF.
Very good hints, thanks for that.
Indeed I thought about having two (or more) identical ColorStops to
allow a 'rapid' color change at the same offset. I abandoned that by
thinking that a very small step could be used that will never get
visible, so e.g.
0.5
0.5000001
But allowing multiple identical may express that indeed better.
The problem is and why I chose uniqueness is also/mainly the UI - how to
represent equal ColorSteps in a UI trying to visualize the ColorSteps...?
So:
- It should then be OK to have a maximum of *two* ColorStops with
identical offset?
- When correcting that, and there are more than two, delete all but 1st
and last? So the in-between ones?
- Also dependent of used colors: if all the same color, identicals can
be deleted, so go to uniqueness.
And Questions for ODF format:
I see e.g. in SVG something like
<linearGradient id="Gradient2" x1="0" x2="0" y1="0" y2="1">
<stop offset="0%" stop-color="red" />
<stop offset="50%" stop-color="black" stop-opacity="0" />
<stop offset="100%" stop-color="blue" />
</linearGradient>
so I would just add elements like
<stop offset="0%" stop-color="red" />
to our ODF, is that OK from your POV? I remember we once discussed that
already, so should be no problem to do that I guess?
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.
Currently we have something like
<draw:gradient draw:name="Gradient_20_2"
draw:display-name="Gradient 2" draw:style="radial" draw:cx="50%"
draw:cy="50%"
draw:start-color="#bf0041"
draw:end-color="#127622"
draw:start-intensity="100%" draw:end-intensity="100%"
draw:border="0%"/>
which would then be something like
<draw:gradient draw:name="Gradient_20_2"
draw:display-name="Gradient 2" draw:style="radial" draw:cx="50%"
draw:cy="50%"
draw:start-color="#bf0041"
<stop offset="0%" stop-color="red" />
draw:end-color="#127622"
draw:start-intensity="100%" draw:end-intensity="100%"
draw:border="0%"/>
For import of 'older' stuff all will be good.
For import of new stuff in older Offices we would fallback to
Start/EndColor and ignore the In-Between steps - any ways the best we
can do AFAIS.
Greetings & thanks in advance,
Armin
>
> Kind regards,
> Regina
--
--
ALG (PGP: EE1C 4B3F E751 D8BC C485 DEC1 3C59 F953 D81C F4A2)
More information about the LibreOffice
mailing list