Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ImportedProjects
SVG
Commits
0066c625
Commit
0066c625
authored
Mar 23, 2014
by
cyril andreichuk
Browse files
color blend: fixed gradient's stops order
parent
8f779fcb
Changes
2
Hide whitespace changes
Inline
Side-by-side
Source/Painting/SvgGradientServer.cs
View file @
0066c625
using
System
;
using
System.Collections.Generic
;
using
System.Collections
;
using
System.Text
;
using
System.Drawing
;
using
System.Drawing.Drawing2D
;
...
...
@@ -106,13 +103,14 @@ namespace Svg
/// <param name="opacity">The opacity of the colour blend.</param>
protected
ColorBlend
GetColourBlend
(
SvgVisualElement
owner
,
float
opacity
)
{
ColorBlend
blend
=
new
ColorBlend
();
int
colourBlends
=
this
.
Stops
.
Count
;
bool
insertStart
=
false
;
bool
insertEnd
=
false
;
//gradient.Transform = renderingElement.Transforms.Matrix;
//stops should be processed in reverse order
// May need to increase the number of colour blends because the range *must* be from 0.0 to 1.0.
// E.g. 0.5 - 0.8 isn't valid therefore the rest need to be calculated.
...
...
@@ -120,8 +118,8 @@ namespace Svg
if
(
this
.
Stops
[
0
].
Offset
.
Value
>
0
)
{
colourBlends
++;
// Indicate that a colour has to be dynamically added at the
start
insert
Start
=
true
;
// Indicate that a colour has to be dynamically added at the
end
insert
End
=
true
;
}
// If the last stop doesn't end at 1 a stop
...
...
@@ -129,12 +127,11 @@ namespace Svg
if
(
lastValue
<
100
||
lastValue
<
1
)
{
colourBlends
++;
// Indicate that a colour has to be dynamically added at the
end
insert
End
=
true
;
// Indicate that a colour has to be dynamically added at the
start
insert
Start
=
true
;
}
blend
.
Positions
=
new
float
[
colourBlends
];
blend
.
Colors
=
new
Color
[
colourBlends
];
ColorBlend
blend
=
new
ColorBlend
(
colourBlends
);
// Set positions and colour values
int
actualStops
=
0
;
...
...
@@ -144,15 +141,21 @@ namespace Svg
for
(
int
i
=
0
;
i
<
colourBlends
;
i
++)
{
mergedOpacity
=
opacity
*
this
.
Stops
[
actualStops
].
Opacity
;
position
=
(
this
.
Stops
[
actualStops
].
Offset
.
ToDeviceValue
(
owner
)
/
owner
.
Bounds
.
Width
);
colour
=
Color
.
FromArgb
((
int
)(
mergedOpacity
*
255
),
this
.
Stops
[
actualStops
++].
Colour
);
var
currentStop
=
this
.
Stops
[
this
.
Stops
.
Count
-
1
-
actualStops
];
mergedOpacity
=
opacity
*
currentStop
.
Opacity
;
position
=
1
-
(
currentStop
.
Offset
.
ToDeviceValue
(
owner
)
/
owner
.
Bounds
.
Width
);
colour
=
Color
.
FromArgb
((
int
)(
mergedOpacity
*
255
),
currentStop
.
Colour
);
actualStops
++;
// Insert this colour before itself at position 0
if
(
insertStart
&&
i
==
0
)
{
blend
.
Positions
[
i
]
=
0.0f
;
blend
.
Colors
[
i
++]
=
colour
;
blend
.
Colors
[
i
]
=
colour
;
i
++;
}
blend
.
Positions
[
i
]
=
position
;
...
...
@@ -161,8 +164,10 @@ namespace Svg
// Insert this colour after itself at position 0
if
(
insertEnd
&&
i
==
colourBlends
-
2
)
{
blend
.
Positions
[
i
+
1
]
=
1.0f
;
blend
.
Colors
[++
i
]
=
colour
;
i
++;
blend
.
Positions
[
i
]
=
1.0f
;
blend
.
Colors
[
i
]
=
colour
;
}
}
...
...
@@ -184,12 +189,12 @@ namespace Svg
public
override
SvgElement
DeepCopy
<
T
>()
{
var
newObj
=
base
.
DeepCopy
<
T
>()
as
SvgGradientServer
;
newObj
.
SpreadMethod
=
this
.
SpreadMethod
;
newObj
.
SpreadMethod
=
this
.
SpreadMethod
;
newObj
.
GradientUnits
=
this
.
GradientUnits
;
newObj
.
InheritGradient
=
this
.
InheritGradient
;
return
newObj
;
return
newObj
;
}
}
}
\ No newline at end of file
Source/Painting/SvgRadialGradientServer.cs
View file @
0066c625
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
System.Drawing
;
using
System.Drawing.Drawing2D
;
...
...
@@ -79,33 +76,35 @@ namespace Svg
public
override
Brush
GetBrush
(
SvgVisualElement
renderingElement
,
float
opacity
)
{
GraphicsPath
path
=
new
GraphicsPath
();
float
left
=
this
.
CenterX
.
ToDeviceValue
(
renderingElement
);
float
top
=
this
.
CenterY
.
ToDeviceValue
(
renderingElement
,
true
);
float
radius
=
this
.
Radius
.
ToDeviceValue
(
renderingElement
);
RectangleF
boundingBox
=
(
this
.
GradientUnits
==
SvgCoordinateUnits
.
ObjectBoundingBox
)
?
renderingElement
.
Bounds
:
renderingElement
.
OwnerDocument
.
GetDimensions
();
if
(
radius
>
0
)
if
(
radius
<=
0
)
{
path
.
AddEllipse
(
boundingBox
.
Left
+
left
-
radius
,
boundingBox
.
Top
+
top
-
radius
,
radius
*
2
,
radius
*
2
);
PathGradientBrush
brush
=
new
PathGradientBrush
(
path
);
ColorBlend
blend
=
base
.
GetColourBlend
(
renderingElement
,
opacity
);
brush
.
InterpolationColors
=
blend
;
brush
.
CenterPoint
=
new
PointF
(
boundingBox
.
Left
+
this
.
FocalX
.
ToDeviceValue
(
renderingElement
),
boundingBox
.
Top
+
this
.
FocalY
.
ToDeviceValue
(
renderingElement
,
true
));
return
brush
;
return
null
;
}
return
null
;
GraphicsPath
path
=
new
GraphicsPath
();
float
left
=
this
.
CenterX
.
ToDeviceValue
(
renderingElement
);
float
top
=
this
.
CenterY
.
ToDeviceValue
(
renderingElement
,
true
);
RectangleF
boundingBox
=
(
this
.
GradientUnits
==
SvgCoordinateUnits
.
ObjectBoundingBox
)
?
renderingElement
.
Bounds
:
renderingElement
.
OwnerDocument
.
GetDimensions
();
path
.
AddEllipse
(
boundingBox
.
Left
+
left
-
radius
,
boundingBox
.
Top
+
top
-
radius
,
radius
*
2
,
radius
*
2
);
PathGradientBrush
brush
=
new
PathGradientBrush
(
path
);
ColorBlend
blend
=
base
.
GetColourBlend
(
renderingElement
,
opacity
);
brush
.
InterpolationColors
=
blend
;
brush
.
CenterPoint
=
new
PointF
(
boundingBox
.
Left
+
this
.
FocalX
.
ToDeviceValue
(
renderingElement
),
boundingBox
.
Top
+
this
.
FocalY
.
ToDeviceValue
(
renderingElement
,
true
));
return
brush
;
}
...
...
@@ -118,13 +117,14 @@ namespace Svg
public
override
SvgElement
DeepCopy
<
T
>()
{
var
newObj
=
base
.
DeepCopy
<
T
>()
as
SvgRadialGradientServer
;
newObj
.
CenterX
=
this
.
CenterX
;
newObj
.
CenterY
=
this
.
CenterY
;
newObj
.
Radius
=
this
.
Radius
;
newObj
.
FocalX
=
this
.
FocalX
;
newObj
.
FocalY
=
this
.
FocalY
;
return
newObj
;
return
newObj
;
}
}
}
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment