1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
using System;
using System.Collections.Generic;
using Xamarin.PropertyEditing.Drawing;
namespace Xamarin.PropertyEditing.ViewModels
{
internal class BrushPropertyViewModel : PropertyViewModel<CommonBrush>
{
public BrushPropertyViewModel (IPropertyInfo property, IEnumerable<IObjectEditor> editors)
: base (property, editors)
{
if (property.Type.IsAssignableFrom (typeof (CommonSolidBrush))) {
Solid = new SolidBrushViewModel (this,
property is IColorSpaced colorSpacedPropertyInfo ? colorSpacedPropertyInfo.ColorSpaces : null);
}
}
public SolidBrushViewModel Solid { get; }
public double Opacity {
get => Value == null ? 1.0 : Value.Opacity;
set {
if (Value is null) return;
if (Value is CommonSolidBrush solid) {
Value = new CommonSolidBrush (solid.Color, solid.ColorSpace, value);
} else if (Value is CommonImageBrush img) {
Value = new CommonImageBrush (
img.ImageSource, img.AlignmentX, img.AlignmentY, img.Stretch, img.TileMode,
img.ViewBox, img.ViewBoxUnits, img.ViewPort, img.ViewPortUnits, value);
} else if (Value is CommonLinearGradientBrush linear) {
Value = new CommonLinearGradientBrush (
linear.StartPoint, linear.EndPoint, linear.GradientStops,
linear.ColorInterpolationMode, linear.MappingMode, linear.SpreadMethod, value);
} else if (Value is CommonRadialGradientBrush radial) {
Value = new CommonRadialGradientBrush (
radial.Center, radial.GradientOrigin, radial.RadiusX, radial.RadiusY,
radial.GradientStops, radial.ColorInterpolationMode, radial.MappingMode,
radial.SpreadMethod, value);
} else {
throw new InvalidOperationException ("Value is an unsupported brush type.");
}
OnPropertyChanged ();
}
}
protected override void UpdateCurrentValue ()
{
base.UpdateCurrentValue ();
OnPropertyChanged (nameof (Opacity));
}
}
}
|