873 lines
30 KiB
VB.net
873 lines
30 KiB
VB.net
Imports System.Windows.Forms
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class EgtColorPickerVM
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Friend Event m_CloseWindow(bDialogResult As MessageBoxResult)
|
|
|
|
Friend Event m_SetLuminosityFill(color As Color)
|
|
Friend Event m_UpdateCursorsPos()
|
|
|
|
Private m_sTitle As String = ""
|
|
Public ReadOnly Property sTitle As String
|
|
Get
|
|
Return m_sTitle
|
|
End Get
|
|
End Property
|
|
|
|
Private m_BasicColors As New List(Of EgtColorPicker)
|
|
Public Property BasicColors As List(Of EgtColorPicker)
|
|
Get
|
|
Return m_BasicColors
|
|
End Get
|
|
Set(value As List(Of EgtColorPicker))
|
|
m_BasicColors = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_CustomColors As New List(Of EgtColorPicker)
|
|
Public Property CustomColors As List(Of EgtColorPicker)
|
|
Get
|
|
Return m_CustomColors
|
|
End Get
|
|
Set(value As List(Of EgtColorPicker))
|
|
m_CustomColors = value
|
|
End Set
|
|
End Property
|
|
|
|
Friend Sub SetCustomColors(value As Integer())
|
|
Dim coloraRGB As System.Drawing.Color
|
|
Dim colorRGB As Color
|
|
For i As Integer = 0 To value.Length - 1
|
|
coloraRGB = System.Drawing.Color.FromArgb(value(i).ToString)
|
|
colorRGB = Color.FromRgb(coloraRGB.R, coloraRGB.G, coloraRGB.B)
|
|
m_CustomColors.Insert(i, New EgtColorPicker(New SolidColorBrush(colorRGB)))
|
|
m_CustomColors.RemoveAt(m_CustomColors.Count - 1)
|
|
Next
|
|
m_CustomColors.Reverse()
|
|
SelCustomColor = m_CustomColors(0)
|
|
NotifyPropertyChanged(NameOf(SelCustomColor))
|
|
End Sub
|
|
|
|
Friend Function GetCustomColors() As Integer()
|
|
Dim arrayColor As Integer() = New Integer(m_CustomColors.Count - 1) {}
|
|
Dim coloraRGB As System.Drawing.Color
|
|
Dim colorCode As Integer
|
|
For i As Integer = 0 To m_CustomColors.Count - 1
|
|
Dim intValue As Integer = Integer.Parse(m_CustomColors(i).Fill.ToString().TrimStart("#FF"), System.Globalization.NumberStyles.HexNumber)
|
|
coloraRGB = System.Drawing.Color.FromArgb(intValue)
|
|
'colorCode = BitConverter.ToInt32(New Byte() {coloraRGB.R, coloraRGB.G, coloraRGB.B, &H0}, i)
|
|
colorCode = coloraRGB.ToArgb()
|
|
'arrayColor.Append(colorCode)
|
|
arrayColor(i) = colorCode
|
|
Next
|
|
Return arrayColor
|
|
End Function
|
|
|
|
Private m_HSLColor As New HSLColor
|
|
Public ReadOnly Property HSLColor As HSLColor
|
|
Get
|
|
Return m_HSLColor
|
|
End Get
|
|
End Property
|
|
Friend Sub SetHSLColor(value As Color)
|
|
Dim dHue, dSaturation, dLightness As Double
|
|
HSLColor.RgbToHsl(value, dHue, dSaturation, dLightness)
|
|
m_HSLColor.SetHue(dHue)
|
|
m_HSLColor.SetSaturation(dSaturation)
|
|
m_HSLColor.SetLightness(dLightness)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
RaiseEvent m_UpdateCursorsPos()
|
|
End Sub
|
|
|
|
Private m_CurrColor As Color
|
|
Public ReadOnly Property CurrColor As SolidColorBrush
|
|
Get
|
|
Return New SolidColorBrush(HSLColor.HslToRgb(m_HSLColor.Hue, m_HSLColor.Saturation, m_HSLColor.Lightness))
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SelColor As EgtColorPicker
|
|
Public Property SelColor As EgtColorPicker
|
|
Get
|
|
Return m_SelColor
|
|
End Get
|
|
Set(value As EgtColorPicker)
|
|
m_SelColor = value
|
|
SetHSLColor(value.Fill.Color)
|
|
'm_Fill = m_Color.Fill
|
|
'm_CurrColor = m_Color.Fill.Color
|
|
'm_Luminosity_Fill = m_Color.Fill.Color
|
|
'm_Red = m_Color.Fill.Color.R.ToString
|
|
'm_Green = m_Color.Fill.Color.G.ToString
|
|
'm_Blue = m_Color.Fill.Color.B.ToString
|
|
'm_Hexadecimal = "#" + System.Drawing.Color.FromArgb(m_Red, m_Green, m_Blue).ToArgb().ToString("X6")
|
|
'NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
'NotifyPropertyChanged(NameOf(Fill))
|
|
'NotifyPropertyChanged(NameOf(CurrColor))
|
|
'NotifyPropertyChanged(NameOf(Luminosity_Fill))
|
|
'NotifyPropertyChanged(NameOf(Red))
|
|
'NotifyPropertyChanged(NameOf(Green))
|
|
'NotifyPropertyChanged(NameOf(Blue))
|
|
'If Not IsNothing(m_CustomColor) Then
|
|
' m_CustomColor.SetFill(m_Color.Fill)
|
|
'End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_CustomColor As EgtColorPicker
|
|
Public Property SelCustomColor As EgtColorPicker
|
|
Get
|
|
Return m_CustomColor
|
|
End Get
|
|
Set(value As EgtColorPicker)
|
|
m_CustomColor = value
|
|
m_CurrColor = m_CustomColor.Fill.Color
|
|
m_Luminosity_Fill = m_CustomColor.Fill.Color
|
|
m_Red = m_CustomColor.Fill.Color.R.ToString
|
|
m_Green = m_CustomColor.Fill.Color.G.ToString
|
|
m_Blue = m_CustomColor.Fill.Color.B.ToString
|
|
m_Hexadecimal = "#" + System.Drawing.Color.FromArgb(m_Red, m_Green, m_Blue).ToArgb().ToString("X6")
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
NotifyPropertyChanged(NameOf(Luminosity_Fill))
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Fill As SolidColorBrush
|
|
Public ReadOnly Property Fill As SolidColorBrush
|
|
Get
|
|
Return m_Fill
|
|
End Get
|
|
End Property
|
|
Friend Sub SetCurrColorFill(value As Color)
|
|
m_CurrColor = value
|
|
SetRed(m_CurrColor.R)
|
|
SetGreen(m_CurrColor.G)
|
|
SetBlu(m_CurrColor.B)
|
|
SetHexadecimal(m_CurrColor.ToString)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
NotifyPropertyChanged(NameOf(Luminosity_Fill))
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
End Sub
|
|
|
|
Private m_Luminosity_Fill As Color
|
|
Public ReadOnly Property Luminosity_Fill As SolidColorBrush
|
|
Get
|
|
Return New SolidColorBrush(m_Luminosity_Fill)
|
|
End Get
|
|
End Property
|
|
|
|
Friend Sub SetLuminosityColorFill(value As Color)
|
|
m_CurrColor = value
|
|
SetRed(m_CurrColor.R)
|
|
SetGreen(m_CurrColor.G)
|
|
SetBlu(m_CurrColor.B)
|
|
SetHexadecimal(m_CurrColor.ToString)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
RaiseEvent m_SetLuminosityFill(value)
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
End Sub
|
|
|
|
Private m_Hexadecimal As String
|
|
Public Property Hexadecimal As String
|
|
Get
|
|
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Return "#" & System.Drawing.Color.FromArgb(RgbColor.R, RgbColor.G, RgbColor.B).ToArgb().ToString("X6")
|
|
End Get
|
|
Set(value As String)
|
|
m_Hexadecimal = value
|
|
If m_Hexadecimal.Length >= 8 AndAlso m_Hexadecimal >= "#FF000000" And m_Hexadecimal <= "#FFFFFFFF" Then
|
|
Dim Color As Color = CType(ColorConverter.ConvertFromString(m_Hexadecimal), Color)
|
|
SetCurrColorFill(Color)
|
|
End If
|
|
NotifyPropertyChanged(NameOf(Fill))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Set
|
|
End Property
|
|
|
|
Friend Sub SetHexadecimal(value As String)
|
|
m_Hexadecimal = value
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
|
|
Private m_Red As Double
|
|
Public Property Red As String
|
|
Get
|
|
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Return DoubleToString(RgbColor.R, 0)
|
|
End Get
|
|
Set(value As String)
|
|
If StringToDouble(value, m_Red) And (m_Red >= 0 AndAlso m_Red <= 255) Then
|
|
UpdateRed(m_Red)
|
|
'm_Red = value
|
|
m_Fill = New SolidColorBrush(Color.FromRgb(m_Red, m_Green, m_Blue))
|
|
SetCurrColorFill(m_Fill.Color)
|
|
NotifyPropertyChanged(NameOf(Fill))
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
Else
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Sub SetRed(value As Double)
|
|
m_Red = value
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
End Sub
|
|
|
|
Private m_Green As Double
|
|
Public Property Green As String
|
|
Get
|
|
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Return DoubleToString(RgbColor.G, 0)
|
|
End Get
|
|
Set(value As String)
|
|
If StringToDouble(value, m_Green) And (m_Green >= 0 AndAlso m_Green <= 255) Then
|
|
UpdateGreen(value)
|
|
m_Green = value
|
|
m_Fill = New SolidColorBrush(Color.FromRgb(m_Red, m_Green, m_Blue))
|
|
SetCurrColorFill(m_Fill.Color)
|
|
NotifyPropertyChanged(NameOf(Fill))
|
|
Else
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Sub SetGreen(value As Double)
|
|
m_Green = value
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
End Sub
|
|
|
|
Private m_Blue As Double
|
|
Public Property Blue As String
|
|
Get
|
|
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Return DoubleToString(RgbColor.B, 0)
|
|
End Get
|
|
Set(value As String)
|
|
If StringToDouble(value, m_Blue) And (m_Blue >= 0 AndAlso m_Blue <= 255) Then
|
|
UpdateBlue(value)
|
|
m_Blue = value
|
|
m_Fill = New SolidColorBrush(Color.FromRgb(m_Red, m_Green, m_Blue))
|
|
SetCurrColorFill(m_Fill.Color)
|
|
NotifyPropertyChanged(NameOf(Fill))
|
|
Else
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Sub SetBlu(value As Double)
|
|
m_Blue = value
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
End Sub
|
|
|
|
Private m_Hue As String
|
|
Public Property Hue As String
|
|
Get
|
|
Return m_Hue
|
|
End Get
|
|
Set(value As String)
|
|
Dim dHue As Double = 0
|
|
If StringToDouble(value, dHue) AndAlso dHue >= 0 AndAlso dHue < 360 Then
|
|
UpdateHue(dHue)
|
|
m_Hue = If(value.Last() = "."c, value, DoubleToString(m_HSLColor.Hue, 2))
|
|
RaiseEvent m_UpdateCursorsPos()
|
|
Else
|
|
NotifyPropertyChanged(NameOf(Hue))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Sub UpdateHue()
|
|
m_Hue = DoubleToString(m_HSLColor.Hue, 0)
|
|
NotifyPropertyChanged(NameOf(Hue))
|
|
End Sub
|
|
|
|
Private m_Saturation As String
|
|
Public Property Saturation As String
|
|
Get
|
|
Return m_Saturation
|
|
End Get
|
|
Set(value As String)
|
|
Dim dSaturation As Double = 0
|
|
If StringToDouble(value, dSaturation) AndAlso dSaturation >= 0 AndAlso dSaturation <= 100 Then
|
|
UpdateSaturation(dSaturation / 100)
|
|
m_Saturation = If(value.Last() = "."c, value, DoubleToString(m_HSLColor.Saturation * 100, 2))
|
|
RaiseEvent m_UpdateCursorsPos()
|
|
Else
|
|
NotifyPropertyChanged(NameOf(Saturation))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Sub UpdateSaturation()
|
|
m_Saturation = DoubleToString(m_HSLColor.Saturation * 100, 2)
|
|
NotifyPropertyChanged(NameOf(Saturation))
|
|
End Sub
|
|
|
|
Private m_Lightness As String
|
|
Public Property Lightness As String
|
|
Get
|
|
Return m_Lightness
|
|
End Get
|
|
Set(value As String)
|
|
Dim dLightness As Double = 0
|
|
If StringToDouble(value, dLightness) AndAlso dLightness >= 0 AndAlso dLightness <= 100 Then
|
|
UpdateLightness(dLightness / 100)
|
|
m_Lightness = If(value.Last() = "."c, value, DoubleToString(m_HSLColor.Lightness * 100, 2))
|
|
RaiseEvent m_UpdateCursorsPos()
|
|
Else
|
|
NotifyPropertyChanged(NameOf(Lightness))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Friend Sub UpdateLightness()
|
|
m_Lightness = DoubleToString(m_HSLColor.Lightness * 100, 2)
|
|
NotifyPropertyChanged(NameOf(Lightness))
|
|
End Sub
|
|
|
|
' Definizione comandi
|
|
Private m_cmdCancel As ICommand
|
|
Private m_cmdOk As ICommand
|
|
Private m_cmdSaveColor As ICommand
|
|
|
|
#Region "Messages"
|
|
Public ReadOnly Property Red_Msg As String
|
|
Get
|
|
Return EgtMsg(15050)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Green_Msg As String
|
|
Get
|
|
Return EgtMsg(15051)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Blu_Msg As String
|
|
Get
|
|
Return EgtMsg(15052)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Hexadecimal_Msg As String
|
|
Get
|
|
Return EgtMsg(15053)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property AddCColor_Msg As String
|
|
Get
|
|
Return EgtMsg(15054)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property BasicColor_Msg As String
|
|
Get
|
|
Return EgtMsg(15055)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property CustomColor_Msg As String
|
|
Get
|
|
Return EgtMsg(15056)
|
|
End Get
|
|
End Property
|
|
#End Region
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONTRUCTORS"
|
|
|
|
Sub New()
|
|
EgtColorPicker.SetOwner(Me)
|
|
|
|
'Colori di Base
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.LightCoral)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Khaki)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.LightGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.PaleGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Aqua)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.SteelBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Pink)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.HotPink)))
|
|
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Red)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Yellow)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Lime)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.LimeGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Cyan)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.CornflowerBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumPurple)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Magenta)))
|
|
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Brown)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Orange)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Green)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumSeaGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumSlateBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumVioletRed)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DeepPink)))
|
|
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkRed)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkOrange)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.OliveDrab)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkOliveGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Blue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Navy)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkMagenta)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.BlueViolet)))
|
|
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Maroon)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Firebrick)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.ForestGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkGreen)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MidnightBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkSlateBlue)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Indigo)))
|
|
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Black)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkKhaki)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Olive)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkGray)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumAquamarine)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Gray)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkViolet)))
|
|
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
|
|
'Colori Personalizzati
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
|
|
|
|
NotifyPropertyChanged(NameOf(BasicColors))
|
|
NotifyPropertyChanged(NameOf(CustomColors))
|
|
|
|
SelCustomColor = m_CustomColors(0)
|
|
NotifyPropertyChanged(NameOf(SelCustomColor))
|
|
End Sub
|
|
|
|
#End Region 'CONTRUCTORS"
|
|
Friend Sub UpdateHue(value As Double)
|
|
m_HSLColor.SetHue(value)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
Friend Sub UpdateSaturation(value As Double)
|
|
m_HSLColor.SetSaturation(value)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateHue()
|
|
UpdateLightness()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
Friend Sub UpdateLightness(value As Double)
|
|
m_HSLColor.SetLightness(value)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
Friend Sub UpdateRed(value As Double)
|
|
Dim RGBColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Dim h, s, l As Double
|
|
HSLColor.RgbToHsl(Color.FromRgb(value, RGBColor.G, RGBColor.B), h, s, l)
|
|
SetRed(value)
|
|
m_HSLColor.SetHue(h)
|
|
m_HSLColor.SetSaturation(s)
|
|
m_HSLColor.SetLightness(l)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
Friend Sub UpdateGreen(value As Double)
|
|
Dim RGBColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Dim h, s, l As Double
|
|
HSLColor.RgbToHsl(Color.FromRgb(RGBColor.R, value, RGBColor.B), h, s, l)
|
|
m_HSLColor.SetHue(h)
|
|
m_HSLColor.SetSaturation(s)
|
|
m_HSLColor.SetLightness(l)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
|
|
Friend Sub UpdateBlue(value As Double)
|
|
Dim RGBColor As Color = HSLColor.HslToRgb(m_HSLColor)
|
|
Dim h, s, l As Double
|
|
HSLColor.RgbToHsl(Color.FromRgb(RGBColor.R, RGBColor.G, value), h, s, l)
|
|
m_HSLColor.SetHue(h)
|
|
m_HSLColor.SetSaturation(s)
|
|
m_HSLColor.SetLightness(l)
|
|
NotifyPropertyChanged(NameOf(CurrColor))
|
|
SetLightnessColor()
|
|
UpdateHue()
|
|
UpdateSaturation()
|
|
UpdateLightness()
|
|
NotifyPropertyChanged(NameOf(Red))
|
|
NotifyPropertyChanged(NameOf(Green))
|
|
NotifyPropertyChanged(NameOf(Blue))
|
|
NotifyPropertyChanged(NameOf(Hexadecimal))
|
|
End Sub
|
|
|
|
|
|
Friend Sub SetLightnessColor()
|
|
RaiseEvent m_SetLuminosityFill(HSLColor.HslToRgb(m_HSLColor.Hue, m_HSLColor.Saturation, 0.5))
|
|
End Sub
|
|
|
|
#Region "COMMANDS"
|
|
|
|
Public ReadOnly Property Ok_Command As ICommand
|
|
Get
|
|
If m_cmdOk Is Nothing Then
|
|
m_cmdOk = New Command(AddressOf ok)
|
|
End If
|
|
Return m_cmdOk
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub ok()
|
|
RaiseEvent m_CloseWindow(DialogResult.OK)
|
|
End Sub
|
|
|
|
Public ReadOnly Property Cancel_Command As ICommand
|
|
Get
|
|
If m_cmdCancel Is Nothing Then
|
|
m_cmdCancel = New Command(AddressOf Cancel)
|
|
End If
|
|
Return m_cmdCancel
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub Cancel()
|
|
RaiseEvent m_CloseWindow(DialogResult.Cancel)
|
|
End Sub
|
|
|
|
Public ReadOnly Property SaveColor_Command As ICommand
|
|
Get
|
|
If m_cmdSaveColor Is Nothing Then
|
|
m_cmdSaveColor = New Command(AddressOf SaveColor)
|
|
End If
|
|
Return m_cmdSaveColor
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub SaveColor()
|
|
If Not IsNothing(m_CustomColor) Then
|
|
m_CustomColor.SetFill(CurrColor)
|
|
Dim nIndex As Integer = m_CustomColors.IndexOf(SelCustomColor)
|
|
m_CustomColor = If(nIndex >= 0 AndAlso nIndex < m_CustomColors.Count - 1, m_CustomColors(nIndex + 1), m_CustomColors(0))
|
|
NotifyPropertyChanged(NameOf(SelCustomColor))
|
|
End If
|
|
End Sub
|
|
|
|
#End Region 'COMMANDS
|
|
|
|
End Class
|
|
|
|
Public Class EgtColorPicker
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Private Shared Owner As EgtColorPickerVM
|
|
|
|
Private m_Fill As SolidColorBrush
|
|
Public ReadOnly Property Fill As SolidColorBrush
|
|
Get
|
|
Return m_Fill
|
|
End Get
|
|
End Property
|
|
|
|
Friend Sub SetFill(value As SolidColorBrush)
|
|
m_Fill = value
|
|
NotifyPropertyChanged(NameOf(Fill))
|
|
End Sub
|
|
|
|
Private m_Luminosity_Fill As SolidColorBrush
|
|
Public ReadOnly Property Luminosity_Fill As SolidColorBrush
|
|
Get
|
|
Return m_Luminosity_Fill
|
|
End Get
|
|
End Property
|
|
|
|
Friend Sub SetLumFill(value As SolidColorBrush)
|
|
m_Luminosity_Fill = value
|
|
NotifyPropertyChanged(NameOf(Luminosity_Fill))
|
|
End Sub
|
|
|
|
Private m_CurrColorFill As SolidColorBrush
|
|
Public ReadOnly Property CurrColor_Fill As SolidColorBrush
|
|
Get
|
|
Return m_CurrColorFill
|
|
End Get
|
|
End Property
|
|
|
|
Friend Sub SetCurrFill(value As SolidColorBrush)
|
|
m_CurrColorFill = value
|
|
NotifyPropertyChanged(NameOf(CurrColor_Fill))
|
|
End Sub
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONTRUCTORS"
|
|
|
|
Sub New(Fill As SolidColorBrush)
|
|
m_Fill = Fill
|
|
End Sub
|
|
|
|
#End Region 'CONTRUCTORS"
|
|
|
|
#Region "METHODS"
|
|
|
|
Friend Shared Sub SetOwner(value As EgtColorPickerVM)
|
|
Owner = value
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
End Class
|
|
|
|
Public Class HSLColor
|
|
|
|
Private m_Hue As Double
|
|
Public ReadOnly Property Hue As Double
|
|
Get
|
|
Return m_Hue
|
|
End Get
|
|
End Property
|
|
Friend Sub SetHue(value As Double)
|
|
m_Hue = value
|
|
End Sub
|
|
|
|
Private m_Saturation As Double
|
|
Public ReadOnly Property Saturation As Double
|
|
Get
|
|
Return m_Saturation
|
|
End Get
|
|
End Property
|
|
Friend Sub SetSaturation(value As Double)
|
|
m_Saturation = value
|
|
End Sub
|
|
|
|
Private m_Lightness As Double
|
|
Public ReadOnly Property Lightness As Double
|
|
Get
|
|
Return m_Lightness
|
|
End Get
|
|
End Property
|
|
Friend Sub SetLightness(value As Double)
|
|
m_Lightness = value
|
|
End Sub
|
|
|
|
Sub New()
|
|
End Sub
|
|
|
|
Sub New(Hue As Double, Saturation As Double, Lightness As Double)
|
|
m_Hue = Hue
|
|
m_Saturation = Saturation
|
|
m_Lightness = Lightness
|
|
End Sub
|
|
|
|
'Private Shared Function HslToRgb(ByVal h As Double, ByVal s As Double, ByVal l As Double, ByRef r As Integer, ByRef g As Integer, ByRef b As Integer) As Boolean
|
|
' Dim dConversionH As Double = Math.Round(h, MidpointRounding.AwayFromZero)
|
|
' Dim dConversionS As Double = Math.Round(s, 2)
|
|
' Dim dConversionL As Double = Math.Round(l, 2)
|
|
' Dim C As Double = (1 - Math.Abs(2 * dConversionL - 1)) * dConversionS
|
|
' Dim X = C * (1 - Math.Abs((dConversionH / 60) Mod 2 - 1))
|
|
' Dim m = dConversionL - C / 2
|
|
' Dim dRPrimo As Double
|
|
' Dim dGPrimo As Double
|
|
' Dim dBPrimo As Double
|
|
|
|
' If dConversionH >= 0 Then
|
|
' If dConversionH < 60 Then
|
|
' dRPrimo = C
|
|
' dGPrimo = X
|
|
' dBPrimo = 0
|
|
' ElseIf dConversionH < 120 Then
|
|
' dRPrimo = X
|
|
' dGPrimo = C
|
|
' dBPrimo = 0
|
|
' ElseIf dConversionH < 180 Then
|
|
' dRPrimo = 0
|
|
' dGPrimo = C
|
|
' dBPrimo = X
|
|
' ElseIf dConversionH < 240 Then
|
|
' dRPrimo = 0
|
|
' dGPrimo = X
|
|
' dBPrimo = C
|
|
' ElseIf dConversionH < 300 Then
|
|
' dRPrimo = X
|
|
' dGPrimo = 0
|
|
' dBPrimo = C
|
|
' ElseIf dConversionH < 360 Then
|
|
' dRPrimo = C
|
|
' dGPrimo = 0
|
|
' dBPrimo = X
|
|
' End If
|
|
' End If
|
|
|
|
' r = (dRPrimo + m) * 255
|
|
' g = (dGPrimo + m) * 255
|
|
' b = (dBPrimo + m) * 255
|
|
'End Function
|
|
|
|
Friend Shared Function HslToRgb(ByVal h As Double, ByVal s As Double, ByVal l As Double) As Color
|
|
Dim dConversionH As Double = Math.Round(h, MidpointRounding.AwayFromZero)
|
|
Dim dConversionS As Double = Math.Round(s, 2)
|
|
Dim dConversionL As Double = Math.Round(l, 2)
|
|
Dim C As Double = (1 - Math.Abs(2 * dConversionL - 1)) * dConversionS
|
|
Dim X = C * (1 - Math.Abs((dConversionH / 60) Mod 2 - 1))
|
|
Dim m = dConversionL - C / 2
|
|
Dim dRPrimo As Double
|
|
Dim dGPrimo As Double
|
|
Dim dBPrimo As Double
|
|
|
|
If dConversionH >= 0 Then
|
|
If dConversionH < 60 Then
|
|
dRPrimo = C
|
|
dGPrimo = X
|
|
dBPrimo = 0
|
|
ElseIf dConversionH < 120 Then
|
|
dRPrimo = X
|
|
dGPrimo = C
|
|
dBPrimo = 0
|
|
ElseIf dConversionH < 180 Then
|
|
dRPrimo = 0
|
|
dGPrimo = C
|
|
dBPrimo = X
|
|
ElseIf dConversionH < 240 Then
|
|
dRPrimo = 0
|
|
dGPrimo = X
|
|
dBPrimo = C
|
|
ElseIf dConversionH < 300 Then
|
|
dRPrimo = X
|
|
dGPrimo = 0
|
|
dBPrimo = C
|
|
ElseIf dConversionH < 360 Then
|
|
dRPrimo = C
|
|
dGPrimo = 0
|
|
dBPrimo = X
|
|
End If
|
|
End If
|
|
|
|
Dim r As Double = Math.Floor((dRPrimo + m) * 255)
|
|
Dim g As Double = Math.Floor((dGPrimo + m) * 255)
|
|
Dim b As Double = Math.Floor((dBPrimo + m) * 255)
|
|
Return Color.FromArgb(255, r, g, b)
|
|
End Function
|
|
|
|
Friend Shared Function HslToRgb(HSLColor As HSLColor) As Color
|
|
Return HslToRgb(HSLColor.Hue, HSLColor.Saturation, HSLColor.Lightness)
|
|
End Function
|
|
|
|
Friend Shared Function RgbToHsl(ByVal r As Integer, ByVal g As Integer, ByVal b As Integer, ByRef h As Double, ByRef s As Double, ByRef l As Double) As Boolean
|
|
Dim dRPrimo As Double = r / 255
|
|
Dim dGPrimo As Double = g / 255
|
|
Dim dBPrimo As Double = b / 255
|
|
Dim CMax As Double = Math.Max(dRPrimo, Math.Max(dGPrimo, dBPrimo))
|
|
Dim CMin As Double = Math.Min(dRPrimo, Math.Min(dGPrimo, dBPrimo))
|
|
Dim Delta As Double = CMax - CMin
|
|
If Delta = 0 Then
|
|
h = 0
|
|
ElseIf CMax = dRPrimo Then
|
|
Dim hMod = (((dGPrimo - dBPrimo) / Delta) Mod 6)
|
|
If hMod < 0 Then
|
|
h = 60 * (hMod + 6)
|
|
Else
|
|
h = 60 * hMod
|
|
End If
|
|
ElseIf CMax = dGPrimo Then
|
|
h = 60 * ((dBPrimo - dRPrimo) / Delta + 2)
|
|
ElseIf CMax = dBPrimo Then
|
|
h = 60 * ((dRPrimo - dGPrimo) / Delta + 4)
|
|
End If
|
|
|
|
l = (CMax + CMin) / 2
|
|
|
|
If Delta = 0 Then
|
|
s = 0
|
|
Else
|
|
s = Delta / (1 - Math.Abs(2 * l - 1))
|
|
End If
|
|
h = Math.Round(h, 1)
|
|
s = Math.Round(s, 1)
|
|
l = Math.Round(l, 1)
|
|
Return True
|
|
End Function
|
|
|
|
Friend Shared Function RgbToHsl(RgbColor As Color, ByRef h As Double, ByRef s As Double, ByRef l As Double) As Boolean
|
|
Return RgbToHsl(RgbColor.R, RgbColor.G, RgbColor.B, h, s, l)
|
|
End Function
|
|
|
|
Friend Shared Function RgbToHsl(RgbColor As System.Drawing.Color, ByRef h As Double, ByRef s As Double, ByRef l As Double) As Boolean
|
|
Return RgbToHsl(RgbColor.R, RgbColor.G, RgbColor.B, h, s, l)
|
|
End Function
|
|
Friend Shared Function RgbToHsl(RgbColor As System.Drawing.Color) As HSLColor
|
|
Dim h, s, l As Double
|
|
RgbToHsl(RgbColor.R, RgbColor.G, RgbColor.B, h, s, l)
|
|
Dim NewHSLColor As New HSLColor(h, s, l)
|
|
Return NewHSLColor
|
|
End Function
|
|
|
|
End Class |