Routine Spectre des couleurs Style Windows

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

@ Le soldat Inconnu

C'est bon, je l'ajoute...

A+
Guimauve
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine Spectre des couleurs Style Windows

Message par GallyHC »

Bonjour Guimauve,

Quand on fait un simple clique dans le spectre des couleur cela ne change pas la couleur.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

@GallyHC

Oui, je viens de m'en rendre compte et je travaille là dessus en même temps j'essaie d'ajouter une couleur RGB par défaut mais ça fonctionne pas bien pour l'instant,

Par exemple, je donne RGB(145, 71, 213) comme couleur et c'est RGB(211, 71, 213) qui s'affiche, je comprend pas ce qui se passe.

Je donne des nouvelles plus tard en soirée, demain matin pour vous en europe.

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

Bonjour à tous,

Le bogue indiqué par GallyHC est corrigé. J'ai également corrigé un autre soucis que j'ai trouvé au passage. L'ajout d'une couleur de départ est opérationnel à 100%. (J'ai dû jouer du coude un peu mais je l'ai eu !)

À mon avis, la version 1.0.5 est finale, plus de bogue.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V3.131.634
; Nom du projet : Color Spectrum Requester
; Nom du fichier : Color Spectrum Requester.pb
; Version du fichier : 1.0.5
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 19-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Enumeration
  
  #COLOR_SPECTRUM_TARGET_HUE
  #COLOR_SPECTRUM_TARGET_SATURATION
  #COLOR_SPECTRUM_TARGET_LIGHTNESS
  #COLOR_SPECTRUM_TARGET_RED
  #COLOR_SPECTRUM_TARGET_GREEN
  #COLOR_SPECTRUM_TARGET_BLUE
  
  #COLOR_SPECTRUM_TARGET_WIN_TITLE
  #COLOR_SPECTRUM_TARGET_BTN_REFRESH
  #COLOR_SPECTRUM_TARGET_BTN_VALIDATE
  #COLOR_SPECTRUM_TARGET_BTN_CANCEL
  
EndEnumeration
  

#COLOR_SPECTRUM_SIZE_MAX = 255

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration des Structures <<<<<

Structure Color
  
  StructureUnion
    Red.a
    Hue.a
  EndStructureUnion 
  
  StructureUnion
    Green.a
    Saturation.a
  EndStructureUnion 
  
  StructureUnion
    Blue.a
    Lightness.a
  EndStructureUnion 
  
EndStructure

Structure ColorSpectrum
  
  HSLRGB.l[6] ; Hue, Saturation, Lightness, Red, Green, Blue
  SafeHSLRGB.l[6] ; SafeHue, SafeSaturation, SafeLightness, SafeRed, SafeGreen, SafeBlue
  BackgroundLayer.l
  SpectrumCanvas.l
  LightnessCanvas.l
  WindowHandle.l
  Text.s[10]
  TextHandle.l[7]
  StringHandle.l[6]
  ButtonHandle.l[3]
  
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetColorRed(ColorA)
  
  ColorA\Red
  
EndMacro

Macro GetColorHue(ColorA)
  
  ColorA\Hue
  
EndMacro

Macro GetColorGreen(ColorA)
  
  ColorA\Green
  
EndMacro

Macro GetColorSaturation(ColorA)
  
  ColorA\Saturation
  
EndMacro

Macro GetColorBlue(ColorA)
  
  ColorA\Blue
  
EndMacro

Macro GetColorLightness(ColorA)
  
  ColorA\Lightness
  
EndMacro

Macro GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID)
  
  ColorSpectrumA\HSLRGB[HSLRGBID]
  
EndMacro

Macro GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID)
  
  ColorSpectrumA\SafeHSLRGB[SafeHSLRGBID]
  
EndMacro

Macro GetColorSpectrumBackgroundLayer(ColorSpectrumA)
  
  ColorSpectrumA\BackgroundLayer
  
EndMacro

Macro GetColorSpectrumSpectrumCanvas(ColorSpectrumA)
  
  ColorSpectrumA\SpectrumCanvas
  
EndMacro

Macro GetColorSpectrumLightnessCanvas(ColorSpectrumA)
  
  ColorSpectrumA\LightnessCanvas
  
EndMacro

Macro GetColorSpectrumWindowHandle(ColorSpectrumA)
  
  ColorSpectrumA\WindowHandle
  
EndMacro

Macro GetColorSpectrumText(ColorSpectrumA, TextID)
  
  ColorSpectrumA\Text[TextID]
  
EndMacro

Macro GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID)
  
  ColorSpectrumA\TextHandle[TextHandleID]
  
EndMacro

Macro GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID)
  
  ColorSpectrumA\StringHandle[StringHandleID]
  
EndMacro

Macro GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID)
  
  ColorSpectrumA\ButtonHandle[ButtonHandleID]
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetColorRed(ColorA, P_Red)
  
  GetColorRed(ColorA) = P_Red
  
EndMacro

Macro SetColorHue(ColorA, P_Hue)
  
  GetColorHue(ColorA) = P_Hue
  
EndMacro

Macro SetColorGreen(ColorA, P_Green)
  
  GetColorGreen(ColorA) = P_Green
  
EndMacro

Macro SetColorLightness(ColorA, P_Lightness)
  
  GetColorLightness(ColorA) = P_Lightness
  
EndMacro

Macro SetColorBlue(ColorA, P_Blue)
  
  GetColorBlue(ColorA) = P_Blue
  
EndMacro

Macro SetColorSaturation(ColorA, P_Saturation)
  
  GetColorSaturation(ColorA) = P_Saturation
  
EndMacro

Macro SetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID, P_HSLRGB)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID) = P_HSLRGB
  
EndMacro

Macro SetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID, P_SafeHSLRGB)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID) = P_SafeHSLRGB
  
EndMacro

Macro SetColorSpectrumBackgroundLayer(ColorSpectrumA, P_BackgroundLayer)
  
  GetColorSpectrumBackgroundLayer(ColorSpectrumA) = P_BackgroundLayer
  
EndMacro

Macro SetColorSpectrumSpectrumCanvas(ColorSpectrumA, P_SpectrumCanvas)
  
  GetColorSpectrumSpectrumCanvas(ColorSpectrumA) = P_SpectrumCanvas
  
EndMacro

Macro SetColorSpectrumLightnessCanvas(ColorSpectrumA, P_LightnessCanvas)
  
  GetColorSpectrumLightnessCanvas(ColorSpectrumA) = P_LightnessCanvas
  
EndMacro

Macro SetColorSpectrumWindowHandle(ColorSpectrumA, P_WindowHandle)
  
  GetColorSpectrumWindowHandle(ColorSpectrumA) = P_WindowHandle
  
EndMacro

Macro SetColorSpectrumText(ColorSpectrumA, TextID, P_Text)
  
  GetColorSpectrumText(ColorSpectrumA, TextID) = P_Text
  
EndMacro

Macro SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, P_TextHandle)
  
  GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID) = P_TextHandle
  
EndMacro

Macro SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, P_StringHandle)
  
  GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID) = P_StringHandle
  
EndMacro

Macro SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, P_ButtonHandle)
  
  GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID) = P_ButtonHandle
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Reset <<<<<

Macro ResetColor(ColorA)
  
  ClearStructure(ColorA, Color)
  
EndMacro

Macro ResetColorSpectrum(ColorSpectrumA)
  
  SetColorSpectrumBackgroundLayer(ColorSpectrumA, 0)
  SetColorSpectrumSpectrumCanvas(ColorSpectrumA, 0)
  SetColorSpectrumLightnessCanvas(ColorSpectrumA, 0)
  SetColorSpectrumWindowHandle(ColorSpectrumA, 0)
  
  For TextID = 0 To 9
    SetColorSpectrumText(ColorSpectrumA, TextID, "")
  Next
  
  For TextHandleID = 0 To 6
    SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, 0)
  Next
  
  For StringHandleID = 0 To 5
    SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, 0)
    SetColorSpectrumHSLRGB(ColorSpectrumA, StringHandleID, 0)
    SetColorSpectrumSafeHSLRGB(ColorSpectrumA, StringHandleID, 0)
  Next
  
  For ButtonHandleID = 0 To 2
    SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, 0)
  Next
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs spéciaux <<<<<

Macro GetColorSpectrumHue(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
  
EndMacro

Macro GetColorSpectrumLightness(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
  
EndMacro

Macro GetColorSpectrumSaturation(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
  
EndMacro

Macro GetColorSpectrumRed(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
  
EndMacro

Macro GetColorSpectrumGreen(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
  
EndMacro

Macro GetColorSpectrumBlue(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
  
EndMacro

Macro GetColorSpectrumSafeHue(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
  
EndMacro

Macro GetColorSpectrumSafeLightness(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
  
EndMacro

Macro GetColorSpectrumSafeSaturation(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
  
EndMacro

Macro GetColorSpectrumSafeRed(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
  
EndMacro

Macro GetColorSpectrumSafeGreen(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
  
EndMacro

Macro GetColorSpectrumSafeBlue(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetColorSpectrumHue(ColorSpectrumA, P_Hue)
  
  GetColorSpectrumHue(ColorSpectrumA) = P_Hue
  
EndMacro

Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
  
  GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
  
EndMacro

Macro SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
  
  GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
  
EndMacro

Macro SetColorSpectrumRed(ColorSpectrumA, P_Red)
  
  GetColorSpectrumRed(ColorSpectrumA) = P_Red
  
EndMacro

Macro SetColorSpectrumGreen(ColorSpectrumA, P_Green)
  
  GetColorSpectrumGreen(ColorSpectrumA) = P_Green
  
EndMacro

Macro SetColorSpectrumBlue(ColorSpectrumA, P_Blue)
  
  GetColorSpectrumBlue(ColorSpectrumA) = P_Blue
  
EndMacro

Macro SetColorSpectrumSafeHue(ColorSpectrumA, P_SafeHue)
  
  GetColorSpectrumSafeHue(ColorSpectrumA) = P_SafeHue
  
EndMacro

Macro SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
  
  GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
  
EndMacro

Macro SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
  
  GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
  
EndMacro

Macro SetColorSpectrumSafeRed(ColorSpectrumA, P_SafeRed)
  
  GetColorSpectrumSafeRed(ColorSpectrumA) = P_SafeRed
  
EndMacro

Macro SetColorSpectrumSafeGreen(ColorSpectrumA, P_SafeGreen)
  
  GetColorSpectrumSafeGreen(ColorSpectrumA) = P_SafeGreen
  
EndMacro

Macro SetColorSpectrumSafeBlue(ColorSpectrumA, P_SafeBlue)
  
  GetColorSpectrumSafeBlue(ColorSpectrumA) = P_SafeBlue
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Update <<<<<

Macro UpdateColorRGB(ColorA, P_Red, P_Green, P_Blue)
  
  SetColorRed(ColorA, P_Red)
  SetColorGreen(ColorA, P_Green)
  SetColorBlue(ColorA, P_Blue)
  
EndMacro

Macro UpdateColorHSL(ColorA, P_Hue, P_Saturation, P_Lightness)
  
  SetColorHue(ColorA, P_Hue)  
  SetColorSaturation(ColorA, P_Saturation)
  SetColorLightness(ColorA, P_Lightness)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs de Formatage <<<<<

Macro FormatColorSpectrumRGB(ColorSpectrumA)
  
  "RGB(" + Str(GetColorSpectrumRed(ColorSpectrumA)) + ", "  + Str(GetColorSpectrumGreen(ColorSpectrumA)) + ", " + Str(GetColorSpectrumBlue(ColorSpectrumA)) + ")"
  
EndMacro

Macro FormatColorSpectrumHSL(ColorSpectrumA)
  
  "HSL(" + Str(GetColorSpectrumHue(ColorSpectrumA)) + ", " + Str(GetColorSpectrumSaturation(ColorSpectrumA)) + ", "  + Str(GetColorSpectrumLightness(ColorSpectrumA)) + ")"
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion vers couleur entier long <<<<<

Macro ColorSpectrum_RGB(ColorSpectrumA)
  
  (GetColorSpectrumBlue(ColorSpectrumA) << 16 + GetColorSpectrumGreen(ColorSpectrumA) << 8 + GetColorSpectrumRed(ColorSpectrumA))
  
EndMacro

Macro Color_RGB(ColorA)
  
  (GetColorBlue(ColorA) << 16 + GetColorGreen(ColorA) << 8 + GetColorRed(ColorA))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Min et Max de 3 nombres <<<<<

Macro MinMaxNumber(P_Min, P_Max, P_Number01, P_Number02, P_Number03)
  
  P_Min = P_Number01
  
  If P_Number02 < P_Min
    P_Min = P_Number02
  EndIf
  
  If P_Number03 < P_Min
    P_Min = P_Number03
  EndIf
  
  P_Max = P_Number01
  
  If P_Number02 > P_Max
    P_Max = P_Number02
  EndIf
  
  If P_Number03 > P_Max
    P_Max = P_Number03
  EndIf
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<

Procedure InitializeColorSpectrum(*ColorSpectrumA.ColorSpectrum)
  
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE, "Teinte")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS, "Luminosité")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION, "Saturation")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED, "Rouge")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN, "Vert")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE, "Bleu")
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_WIN_TITLE, "Spectre de couleurs")
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_REFRESH, "Rafraichir")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_VALIDATE, "Valider")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_CANCEL, "Annuler")
  
EndProcedure

Procedure.l Private_ConvertRM(M1.f, M2.f, HueColor.f)
  
  ; ROUTINE DE CALCUL DE LA COMPOSANTE DE COULEUR.
  
  If HueColor > 360
    HueColor - 360
  EndIf
  
  If HueColor < 0
    HueColor + 360
  EndIf
  
  If HueColor < 60
    M1 = M1 + (M2 - M1) * HueColor / 60
  Else
    
    If HueColor < 180
      M1 = M2
    Else
      
      If HueColor < 240
        M1 = M1 + (M2 - M1) * (240 - HueColor) / 60
      EndIf
      
    EndIf
    
  EndIf
  
  ProcedureReturn M1 * 255
EndProcedure

Procedure Convert_RGB_To_HSL(*RGBColorA.Color, *HSLColorA.Color)
  
  ; ROUTINE DE CONSERTION DU RGB EN HLS.
  
  MinMaxNumber(Min.l, Max.l, GetColorRed(*RGBColorA), GetColorGreen(*RGBColorA), GetColorBlue(*RGBColorA))
  
  DeltaMaxMin.l = Max - Min
  SumMaxMin.l = Max + Min
  
  LightnessColor.f = SumMaxMin / 510
  
  If Max = Min
    
    HueColor.f = 0
    SaturationColor.f = 0
    
  Else
    
    NormalizedRed = (Max - GetColorRed(*RGBColorA)) / DeltaMaxMin
    NormalizedGreen = (Max - GetColorGreen(*RGBColorA)) / DeltaMaxMin
    NormalizedBlue = (Max - GetColorBlue(*RGBColorA)) / DeltaMaxMin
    
    If LightnessColor <= 0.5
      SaturationColor = DeltaMaxMin / SumMaxMin
    Else
      SaturationColor = DeltaMaxMin / (510 - SumMaxMin)
    EndIf
    
    If GetColorRed(*RGBColorA) = Max 
      HueColor = 60 * (6 + NormalizedBlue - NormalizedGreen)
    EndIf
    
    If GetColorGreen(*RGBColorA) = Max 
      HueColor = 60 * (2 + NormalizedRed - NormalizedBlue)
    EndIf
    
    If GetColorBlue(*RGBColorA) = Max 
      HueColor = 60 * (4 + NormalizedGreen - NormalizedRed)
    EndIf
    
  EndIf
  
  If HueColor = 360 
    HueColor = 0
  EndIf
  
  HueColor = HueColor / 360 * #COLOR_SPECTRUM_SIZE_MAX
  LightnessColor = LightnessColor * #COLOR_SPECTRUM_SIZE_MAX
  SaturationColor = SaturationColor * #COLOR_SPECTRUM_SIZE_MAX
  
  SetColorHue(*HSLColorA, Int(HueColor))
  SetColorSaturation(*HSLColorA, Int(SaturationColor))
  SetColorLightness(*HSLColorA, Int(LightnessColor))
  
EndProcedure

Procedure Convert_HSL_To_RGB(HueColor.f, LightnessColor.f, SaturationColor.f, *RGBColorA.Color)
  
  ; ROUTINE DE CONSERTION DU HSL EN RGB.
  
  HueColor = HueColor * 360 / #COLOR_SPECTRUM_SIZE_MAX
  SaturationColor = SaturationColor / #COLOR_SPECTRUM_SIZE_MAX
  LightnessColor = LightnessColor / #COLOR_SPECTRUM_SIZE_MAX
  
  If SaturationColor = 0.0
    
    SetColorRed(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
    SetColorGreen(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
    SetColorBlue(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
    
  Else
    
    If LightnessColor <= 0.5
      M2.f = LightnessColor + LightnessColor * SaturationColor
    Else
      M2 = LightnessColor + SaturationColor - LightnessColor * SaturationColor
    EndIf
    
    M1.f = 2 * LightnessColor - M2
    
    SetColorRed(*RGBColorA, Private_ConvertRm(M1, M2, HueColor + 120))
    SetColorGreen(*RGBColorA, Private_ConvertRm(M1, M2, HueColor))
    SetColorBlue(*RGBColorA, Private_ConvertRm(M1, M2, HueColor - 120))
    
  EndIf 
  
EndProcedure

Procedure GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
  
  SetColorSpectrumBackgroundLayer(*ColorSpectrumA, CreateImage(#PB_Any, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
  
  If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
    
    If StartDrawing(ImageOutput(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)))
      
      Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
      
      For SaturationID = 1 To #COLOR_SPECTRUM_SIZE_MAX
        
        For HueID = 1 To #COLOR_SPECTRUM_SIZE_MAX
          
          Convert_HSL_To_RGB(HueID, #COLOR_SPECTRUM_SIZE_MAX / 2, SaturationID, RGBColor.Color)
          
          Plot(HueID, (#COLOR_SPECTRUM_SIZE_MAX - SaturationID) + 1, Color_RGB(RGBColor))
          
        Next
        
      Next
      
      StopDrawing()
      
    EndIf
    
  EndIf
  
EndProcedure

Procedure ColorSpectrum_DrawCross(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE TRACAGE DE LA CROIX DU SPECTRE.
  
  PosX = GetColorSpectrumHue(*ColorSpectrumA)
  PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumSaturation(*ColorSpectrumA)
  
  If PosX < #COLOR_SPECTRUM_SIZE_MAX
    PosX + 1
  EndIf
  
  If PosY < #COLOR_SPECTRUM_SIZE_MAX
    PosY + 1
  EndIf
  
  Box(PosX - 1, PosY - 9, 3, 5, 0)
  Box(PosX - 1, PosY + 5, 3, 5, 0)
  Box(PosX - 9, PosY - 1, 5, 3, 0)
  Box(PosX + 5, PosY - 1, 5, 3, 0)
  
EndProcedure

Procedure ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE TRACAGE DE LA BARRE DE LIGHTNESS
  
  PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
  
  If PosY => #COLOR_SPECTRUM_SIZE_MAX
    PosY = #COLOR_SPECTRUM_SIZE_MAX - 1
  EndIf
  
  Box(22, PosY, 8, 3, 0)
  
EndProcedure

Procedure ColorSpectrum_SpectrumRedraw(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE D'AFFICHAGE DU SPECTRE ET CROIX.
  
  If StartDrawing(CanvasOutput(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)))
    
    If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
      DrawImage(ImageID(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)), 0, 0)
    EndIf
    
    ColorSpectrum_DrawCross(*ColorSpectrumA)
    
    Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
    
    StopDrawing()
    
    SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
    
  EndIf
  
EndProcedure

Procedure ColorSpectrum_LightnessRedraw(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
  
  If StartDrawing(CanvasOutput(GetColorSpectrumLightnessCanvas(*ColorSpectrumA)))
    
    CurrentLightness = GetColorSpectrumLightness(*ColorSpectrumA)
    
    Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $FFFFFF)
    Box(0, 0, 20, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
    
    For LightnessID = 1 To #COLOR_SPECTRUM_SIZE_MAX
      
      Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), LightnessID, GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
      LineXY(1, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, 18, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, Color_RGB(RGBColor))
      
    Next
    
    SetColorSpectrumLightness(*ColorSpectrumA, CurrentLightness)
    
    ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
    
    Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
    SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
    
    StopDrawing()
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Free Gadgets <<<<<

Procedure FreeColorSpectrumGadget(*ColorSpectrumA.ColorSpectrum)
  
  SetColorSpectrumHue(*ColorSpectrumA, 0)
  SetColorSpectrumSaturation(*ColorSpectrumA, 0)
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  SetColorSpectrumRed(*ColorSpectrumA, 0)
  SetColorSpectrumGreen(*ColorSpectrumA, 0)
  SetColorSpectrumBlue(*ColorSpectrumA, 0)
  
  For Index = 0 To 2
    FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index))
    FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index+3))
    FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index))
    FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index+3))    
    FreeGadget(GetColorSpectrumButtonHandle(*ColorSpectrumA, Index))
  Next
  
  FreeGadget(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA))
  FreeGadget(GetColorSpectrumLightnessCanvas(*ColorSpectrumA))
  FreeImage(GetColorSpectrumBackgroundLayer(*ColorSpectrumA))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshHSLColorOutput <<<<<

Procedure RefreshHSLColorOutput(*ColorSpectrumA.ColorSpectrum)
    
  For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_LIGHTNESS
    SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshRGBColorOutput <<<<<

Procedure RefreshRGBColorOutput(*ColorSpectrumA.ColorSpectrum)
  
  Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
  
  SetColorSpectrumRed(*ColorSpectrumA, GetColorRed(RGBColor))
  SetColorSpectrumGreen(*ColorSpectrumA, GetColorGreen(RGBColor))
  SetColorSpectrumBlue(*ColorSpectrumA, GetColorBlue(RGBColor))
  
  For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
    SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchRGBColorInput <<<<<

Procedure CatchRGBColorInput(*ColorSpectrumA.ColorSpectrum)
  
  For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
    SetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
  Next
  
  SetColorRed(RGBColor.Color, GetColorSpectrumRed(*ColorSpectrumA))
  SetColorGreen(RGBColor, GetColorSpectrumGreen(*ColorSpectrumA))
  SetColorBlue(RGBColor, GetColorSpectrumBlue(*ColorSpectrumA))
  Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
  SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
  SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
  SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchSafeHSLRGB <<<<<

Procedure CatchSafeHSLRGB(*ColorSpectrumA.ColorSpectrum)
  
  For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_BLUE
    SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<

Procedure RefeshColorSpectrum(*ColorSpectrumA.ColorSpectrum)
  
  SetColorSpectrumHue(*ColorSpectrumA, 0)
  SetColorSpectrumSaturation(*ColorSpectrumA, 0)
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  SetColorSpectrumRed(*ColorSpectrumA, 0)
  SetColorSpectrumGreen(*ColorSpectrumA, 0)
  SetColorSpectrumBlue(*ColorSpectrumA, 0)
  
  ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
  ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
  RefreshHSLColorOutput(*ColorSpectrumA)
  RefreshRGBColorOutput(*ColorSpectrumA)
  CatchSafeHSLRGB(*ColorSpectrumA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<

Procedure ForceColorSpectrumStartColor(*ColorSpectrumA.ColorSpectrum, Color.l)
  
  If Color <> - 1
    
    SetColorSpectrumRed(*ColorSpectrumA, Red(Color))
    SetColorSpectrumGreen(*ColorSpectrumA, Green(Color))
    SetColorSpectrumBlue(*ColorSpectrumA, Blue(Color))
    
    For Index = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
      SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, Index)))
    Next

    CatchRGBColorInput(*ColorSpectrumA)
    RefreshHSLColorOutput(*ColorSpectrumA)
    
  Else
    
    RefreshRGBColorOutput(*ColorSpectrumA)
    RefreshHSLColorOutput(*ColorSpectrumA)
    
  EndIf

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_SpectrumCanvas_EventManager <<<<<

Procedure ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
  
  EventType = EventType()
  
  If EventType = #PB_EventType_LeftButtonDown Or ( EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
    
    MouseX.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseX)
    MouseY.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
    
    If MouseX < 0
      MouseX = 0
    Else
      If MouseX > #COLOR_SPECTRUM_SIZE_MAX
        MouseX = #COLOR_SPECTRUM_SIZE_MAX
      EndIf
      
    EndIf
    
    If MouseY < 0
      MouseY = 0
    Else
      If MouseY > #COLOR_SPECTRUM_SIZE_MAX
        MouseY = #COLOR_SPECTRUM_SIZE_MAX 
      EndIf
    EndIf
    
    SetColorSpectrumHue(*ColorSpectrumA, MouseX)
    SetColorSpectrumSaturation(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
    
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
    
    RefreshHSLColorOutput(*ColorSpectrumA)
    RefreshRGBColorOutput(*ColorSpectrumA)
    
    CatchSafeHSLRGB(*ColorSpectrumA)
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_LightnessCanvas_EventManager <<<<<

Procedure ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
  
  EventType = EventType()
  
  If EventType = #PB_EventType_LeftButtonDown Or (EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
    
    MouseY.l = GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
    
    If MouseY < 0
      MouseY = 0
    Else
      
      If MouseY > #COLOR_SPECTRUM_SIZE_MAX
        MouseY = #COLOR_SPECTRUM_SIZE_MAX 
      EndIf
      
    EndIf
    
    SetColorSpectrumLightness(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
    
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
    
    RefreshHSLColorOutput(*ColorSpectrumA)
    RefreshRGBColorOutput(*ColorSpectrumA)
    
    CatchSafeHSLRGB(*ColorSpectrumA)
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Hue Input Control <<<<<

Procedure ColorSpectrum_Input_Control(*ColorSpectrumA.ColorSpectrum, Target.b)
  
  EventType = EventType()
  
  If EventType = #PB_EventType_Change
    
    SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target))))
    
    If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) < 0
      SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 0)
    EndIf
    
    If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) > 255
      SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 255)
    EndIf
    
    Select Target
        
      Case #COLOR_SPECTRUM_TARGET_HUE, #COLOR_SPECTRUM_TARGET_LIGHTNESS, #COLOR_SPECTRUM_TARGET_SATURATION
        SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
        
      Case #COLOR_SPECTRUM_TARGET_RED, #COLOR_SPECTRUM_TARGET_GREEN, #COLOR_SPECTRUM_TARGET_BLUE
        SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
        
        SetColorRed(RGBColor.Color, GetColorSpectrumSafeRed(*ColorSpectrumA))
        SetColorGreen(RGBColor, GetColorSpectrumSafeGreen(*ColorSpectrumA))
        SetColorBlue(RGBColor, GetColorSpectrumSafeBlue(*ColorSpectrumA))
        Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
        SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
        SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
        SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))

    EndSelect
    
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)

  ElseIf EventType = #PB_EventType_LostFocus 

    SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target), Str(GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target)))
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrumRequester <<<<<

Procedure.l ColorSpectrumRequester(*ColorSpectrumA.ColorSpectrum, Color.l = -1)
  
  SetColorSpectrumWindowHandle(*ColorSpectrumA, OpenWindow(#PB_Any, 0, 0, #COLOR_SPECTRUM_SIZE_MAX + 55, #COLOR_SPECTRUM_SIZE_MAX + 140, GetColorSpectrumText(*ColorSpectrumA, 06), #PB_Window_SystemMenu | #PB_Window_ScreenCentered))
  
  If GetColorSpectrumWindowHandle(*ColorSpectrumA) <> #Null
    
    SetColorSpectrumSpectrumCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 5, 5, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
    SetColorSpectrumLightnessCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 270, 5, 30, #COLOR_SPECTRUM_SIZE_MAX + 2))
    
    SetColorSpectrumTextHandle(*ColorSpectrumA, 6, TextGadget(#PB_Any, 5, 270, 80, 84,  "", #PB_Text_Border))
    
    PosX = 10
    PosY = 270
    
    For Index = 0 To 2
      
      SetColorSpectrumTextHandle(*ColorSpectrumA, Index, TextGadget(#PB_Any, 102, PosY, 70, 25,  GetColorSpectrumText(*ColorSpectrumA, Index), #PB_Text_Right))
      SetColorSpectrumStringHandle(*ColorSpectrumA, Index, StringGadget(#PB_Any, 180, PosY, 33, 25, ""))
      SetColorSpectrumTextHandle(*ColorSpectrumA, Index + 3, TextGadget(#PB_Any, 220, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + 3), #PB_Text_Right))
      SetColorSpectrumStringHandle(*ColorSpectrumA, Index + 3, StringGadget(#PB_Any, 270, PosY, 33, 25, ""))
      SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 360, 95, 30, GetColorSpectrumText(*ColorSpectrumA, Index + 7)))
      
      PosX + 100
      PosY + 30
      
    Next
    
    GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
    ForceColorSpectrumStartColor(*ColorSpectrumA, Color)
    CatchSafeHSLRGB(*ColorSpectrumA)
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)

    ReturnSelectedColor.l = -1
    
    Repeat
      
      EventID = WaitWindowEvent(20)
      
      Select EventID
          
        Case #PB_Event_Gadget
          
          Select EventGadget()
              
            Case GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)
              ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA)
              
            Case GetColorSpectrumLightnessCanvas(*ColorSpectrumA)
              ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
              
            Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 0)
              RefeshColorSpectrum(*ColorSpectrumA)
              
            Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 1)
              ReturnSelectedColor = ColorSpectrum_RGB(*ColorSpectrumA)
              EventID = #PB_Event_CloseWindow
              
            Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 2)
              EventID = #PB_Event_CloseWindow
              
          EndSelect
          
      EndSelect
      
    Until EventID = #PB_Event_CloseWindow
    
    FreeColorSpectrumGadget(*ColorSpectrumA)
    CloseWindow(GetColorSpectrumWindowHandle(*ColorSpectrumA))
    
  EndIf
  
  ProcedureReturn ReturnSelectedColor
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

InitializeColorSpectrum(ColorSpectrum.ColorSpectrum)

Color.l = ColorSpectrumRequester(ColorSpectrum, RGB(31, 196, 243))

If Color <> -1
  Debug "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color)) + ", " + Str(Blue(Color)) + ")"
Else
  Debug "L'utilisateur à annuler la sélection de la couleur"
EndIf

ResetColorSpectrum(ColorSpectrum)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Routine Spectre des couleurs Style Windows

Message par dayvid »

Wahou superbe ! :D

Vraiment superbe ce code :wink:

J'ai une petite idée et soucis a vous faire part si vous le permettez !

D'une part, pourquoi les deux programme ne mette pas la même chose sur les valeurs 8O
Image
Deuxio, je propose de mettre a la place de la barre pour la luminosité de la couleur, une petite flèche
Trio, je propose de faire comme paint, de mettre des petite case de couleur
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

dayvid a écrit :Wahou superbe ! :D

Vraiment superbe ce code :wink:

J'ai une petite idée et soucis a vous faire part si vous le permettez !

D'une part, pourquoi les deux programme ne mette pas la même chose sur les valeurs 8O
Image
Deuxio, je propose de mettre a la place de la barre pour la luminosité de la couleur, une petite flèche
Trio, je propose de faire comme paint, de mettre des petite case de couleur
Primo, la zone de sélection de la couleur n'est pas carrée mais rectangulaire ce qui veut dire que les valeurs ne sont pas uniforme horizontalement.
Deusio, mettre une flèche au lien d'une simple barre pour la luminosité, peut-être je vais voir ça aujourd'hui.
Tersio, une zone avec des cases de couleur à la MS Paint moi j'aime pas, je préfère celle de Rhinoceros 3D (le ListviewGadget() avec nom comme on le voit à gauche)

Image

Mais bon il devrait être possible de faire coexister dans le code les deux approches et faire un aiguillage avec un paramètre de contrôle. Je vais voir ce que je peux faire dans ce sens aujourd'hui.

A+
Guimauve
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine Spectre des couleurs Style Windows

Message par GallyHC »

Bonjour,

Le flêche oui pourquoi pas, sinon pour ce que je voulais faire j'avais juste besoin de faire la sélection du spectre et de l'intensite. Sinon quitte a refaire à 100% celui de Windows il est préferable d'utilisé celui de windows.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Routine Spectre des couleurs Style Windows

Message par Ar-S »

Merci guimauve.

Pour qu'il soit parfait, l'ajout de la valeur hex serait pratique (comme dans photoshop)
Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

Ar-S a écrit :Merci guimauve.

Pour qu'il soit parfait, l'ajout de la valeur hex serait pratique (comme dans photoshop)
Image
Juste pour visualiser ou pour entrer une valeur en Hexadécimal ?

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

Bonjour à tous,

Pour ceux qui veulent avoir une flèche au-lieu d'un trait pour sélectionner la luminosité et avoir le fond de la même couleur que le fond de la fenêtre.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V3.131.634
; Nom du projet : Color Spectrum Requester
; Nom du fichier : Color Spectrum Requester.pb
; Version du fichier : 1.0.6
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 19-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Enumeration
  
  #COLOR_SPECTRUM_TARGET_HUE
  #COLOR_SPECTRUM_TARGET_SATURATION
  #COLOR_SPECTRUM_TARGET_LIGHTNESS
  #COLOR_SPECTRUM_TARGET_RED
  #COLOR_SPECTRUM_TARGET_GREEN
  #COLOR_SPECTRUM_TARGET_BLUE
  
  #COLOR_SPECTRUM_TARGET_WIN_TITLE
  #COLOR_SPECTRUM_TARGET_BTN_REFRESH
  #COLOR_SPECTRUM_TARGET_BTN_VALIDATE
  #COLOR_SPECTRUM_TARGET_BTN_CANCEL
  
EndEnumeration
  

#COLOR_SPECTRUM_SIZE_MAX = 255

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration des Structures <<<<<

Structure Color
  
  StructureUnion
    Red.a
    Hue.a
  EndStructureUnion 
  
  StructureUnion
    Green.a
    Saturation.a
  EndStructureUnion 
  
  StructureUnion
    Blue.a
    Lightness.a
  EndStructureUnion 
  
EndStructure

Structure ColorSpectrum
  
  HSLRGB.l[6] ; Hue, Saturation, Lightness, Red, Green, Blue
  SafeHSLRGB.l[6] ; SafeHue, SafeSaturation, SafeLightness, SafeRed, SafeGreen, SafeBlue
  BackgroundLayer.l
  SpectrumCanvas.l
  LightnessCanvas.l
  WindowHandle.l
  Text.s[10]
  TextHandle.l[7]
  StringHandle.l[6]
  ButtonHandle.l[3]
  
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetColorRed(ColorA)
  
  ColorA\Red
  
EndMacro

Macro GetColorHue(ColorA)
  
  ColorA\Hue
  
EndMacro

Macro GetColorGreen(ColorA)
  
  ColorA\Green
  
EndMacro

Macro GetColorSaturation(ColorA)
  
  ColorA\Saturation
  
EndMacro

Macro GetColorBlue(ColorA)
  
  ColorA\Blue
  
EndMacro

Macro GetColorLightness(ColorA)
  
  ColorA\Lightness
  
EndMacro

Macro GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID)
  
  ColorSpectrumA\HSLRGB[HSLRGBID]
  
EndMacro

Macro GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID)
  
  ColorSpectrumA\SafeHSLRGB[SafeHSLRGBID]
  
EndMacro

Macro GetColorSpectrumBackgroundLayer(ColorSpectrumA)
  
  ColorSpectrumA\BackgroundLayer
  
EndMacro

Macro GetColorSpectrumSpectrumCanvas(ColorSpectrumA)
  
  ColorSpectrumA\SpectrumCanvas
  
EndMacro

Macro GetColorSpectrumLightnessCanvas(ColorSpectrumA)
  
  ColorSpectrumA\LightnessCanvas
  
EndMacro

Macro GetColorSpectrumWindowHandle(ColorSpectrumA)
  
  ColorSpectrumA\WindowHandle
  
EndMacro

Macro GetColorSpectrumText(ColorSpectrumA, TextID)
  
  ColorSpectrumA\Text[TextID]
  
EndMacro

Macro GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID)
  
  ColorSpectrumA\TextHandle[TextHandleID]
  
EndMacro

Macro GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID)
  
  ColorSpectrumA\StringHandle[StringHandleID]
  
EndMacro

Macro GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID)
  
  ColorSpectrumA\ButtonHandle[ButtonHandleID]
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetColorRed(ColorA, P_Red)
  
  GetColorRed(ColorA) = P_Red
  
EndMacro

Macro SetColorHue(ColorA, P_Hue)
  
  GetColorHue(ColorA) = P_Hue
  
EndMacro

Macro SetColorGreen(ColorA, P_Green)
  
  GetColorGreen(ColorA) = P_Green
  
EndMacro

Macro SetColorLightness(ColorA, P_Lightness)
  
  GetColorLightness(ColorA) = P_Lightness
  
EndMacro

Macro SetColorBlue(ColorA, P_Blue)
  
  GetColorBlue(ColorA) = P_Blue
  
EndMacro

Macro SetColorSaturation(ColorA, P_Saturation)
  
  GetColorSaturation(ColorA) = P_Saturation
  
EndMacro

Macro SetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID, P_HSLRGB)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID) = P_HSLRGB
  
EndMacro

Macro SetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID, P_SafeHSLRGB)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID) = P_SafeHSLRGB
  
EndMacro

Macro SetColorSpectrumBackgroundLayer(ColorSpectrumA, P_BackgroundLayer)
  
  GetColorSpectrumBackgroundLayer(ColorSpectrumA) = P_BackgroundLayer
  
EndMacro

Macro SetColorSpectrumSpectrumCanvas(ColorSpectrumA, P_SpectrumCanvas)
  
  GetColorSpectrumSpectrumCanvas(ColorSpectrumA) = P_SpectrumCanvas
  
EndMacro

Macro SetColorSpectrumLightnessCanvas(ColorSpectrumA, P_LightnessCanvas)
  
  GetColorSpectrumLightnessCanvas(ColorSpectrumA) = P_LightnessCanvas
  
EndMacro

Macro SetColorSpectrumWindowHandle(ColorSpectrumA, P_WindowHandle)
  
  GetColorSpectrumWindowHandle(ColorSpectrumA) = P_WindowHandle
  
EndMacro

Macro SetColorSpectrumText(ColorSpectrumA, TextID, P_Text)
  
  GetColorSpectrumText(ColorSpectrumA, TextID) = P_Text
  
EndMacro

Macro SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, P_TextHandle)
  
  GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID) = P_TextHandle
  
EndMacro

Macro SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, P_StringHandle)
  
  GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID) = P_StringHandle
  
EndMacro

Macro SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, P_ButtonHandle)
  
  GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID) = P_ButtonHandle
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Reset <<<<<

Macro ResetColor(ColorA)
  
  ClearStructure(ColorA, Color)
  
EndMacro

Macro ResetColorSpectrum(ColorSpectrumA)
  
  SetColorSpectrumBackgroundLayer(ColorSpectrumA, 0)
  SetColorSpectrumSpectrumCanvas(ColorSpectrumA, 0)
  SetColorSpectrumLightnessCanvas(ColorSpectrumA, 0)
  SetColorSpectrumWindowHandle(ColorSpectrumA, 0)
  
  For TextID = 0 To 9
    SetColorSpectrumText(ColorSpectrumA, TextID, "")
  Next
  
  For TextHandleID = 0 To 6
    SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, 0)
  Next
  
  For StringHandleID = 0 To 5
    SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, 0)
    SetColorSpectrumHSLRGB(ColorSpectrumA, StringHandleID, 0)
    SetColorSpectrumSafeHSLRGB(ColorSpectrumA, StringHandleID, 0)
  Next
  
  For ButtonHandleID = 0 To 2
    SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, 0)
  Next
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs spéciaux <<<<<

Macro GetColorSpectrumHue(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
  
EndMacro

Macro GetColorSpectrumLightness(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
  
EndMacro

Macro GetColorSpectrumSaturation(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
  
EndMacro

Macro GetColorSpectrumRed(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
  
EndMacro

Macro GetColorSpectrumGreen(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
  
EndMacro

Macro GetColorSpectrumBlue(ColorSpectrumA)
  
  GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
  
EndMacro

Macro GetColorSpectrumSafeHue(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
  
EndMacro

Macro GetColorSpectrumSafeLightness(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
  
EndMacro

Macro GetColorSpectrumSafeSaturation(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
  
EndMacro

Macro GetColorSpectrumSafeRed(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
  
EndMacro

Macro GetColorSpectrumSafeGreen(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
  
EndMacro

Macro GetColorSpectrumSafeBlue(ColorSpectrumA)
  
  GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetColorSpectrumHue(ColorSpectrumA, P_Hue)
  
  GetColorSpectrumHue(ColorSpectrumA) = P_Hue
  
EndMacro

Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
  
  GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
  
EndMacro

Macro SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
  
  GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
  
EndMacro

Macro SetColorSpectrumRed(ColorSpectrumA, P_Red)
  
  GetColorSpectrumRed(ColorSpectrumA) = P_Red
  
EndMacro

Macro SetColorSpectrumGreen(ColorSpectrumA, P_Green)
  
  GetColorSpectrumGreen(ColorSpectrumA) = P_Green
  
EndMacro

Macro SetColorSpectrumBlue(ColorSpectrumA, P_Blue)
  
  GetColorSpectrumBlue(ColorSpectrumA) = P_Blue
  
EndMacro

Macro SetColorSpectrumSafeHue(ColorSpectrumA, P_SafeHue)
  
  GetColorSpectrumSafeHue(ColorSpectrumA) = P_SafeHue
  
EndMacro

Macro SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
  
  GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
  
EndMacro

Macro SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
  
  GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
  
EndMacro

Macro SetColorSpectrumSafeRed(ColorSpectrumA, P_SafeRed)
  
  GetColorSpectrumSafeRed(ColorSpectrumA) = P_SafeRed
  
EndMacro

Macro SetColorSpectrumSafeGreen(ColorSpectrumA, P_SafeGreen)
  
  GetColorSpectrumSafeGreen(ColorSpectrumA) = P_SafeGreen
  
EndMacro

Macro SetColorSpectrumSafeBlue(ColorSpectrumA, P_SafeBlue)
  
  GetColorSpectrumSafeBlue(ColorSpectrumA) = P_SafeBlue
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Update <<<<<

Macro UpdateColorRGB(ColorA, P_Red, P_Green, P_Blue)
  
  SetColorRed(ColorA, P_Red)
  SetColorGreen(ColorA, P_Green)
  SetColorBlue(ColorA, P_Blue)
  
EndMacro

Macro UpdateColorHSL(ColorA, P_Hue, P_Saturation, P_Lightness)
  
  SetColorHue(ColorA, P_Hue)  
  SetColorSaturation(ColorA, P_Saturation)
  SetColorLightness(ColorA, P_Lightness)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs de Formatage <<<<<

Macro FormatColorSpectrumRGB(ColorSpectrumA)
  
  "RGB(" + Str(GetColorSpectrumRed(ColorSpectrumA)) + ", "  + Str(GetColorSpectrumGreen(ColorSpectrumA)) + ", " + Str(GetColorSpectrumBlue(ColorSpectrumA)) + ")"
  
EndMacro

Macro FormatColorSpectrumHSL(ColorSpectrumA)
  
  "HSL(" + Str(GetColorSpectrumHue(ColorSpectrumA)) + ", " + Str(GetColorSpectrumSaturation(ColorSpectrumA)) + ", "  + Str(GetColorSpectrumLightness(ColorSpectrumA)) + ")"
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion vers couleur entier long <<<<<

Macro ColorSpectrum_RGB(ColorSpectrumA)
  
  (GetColorSpectrumBlue(ColorSpectrumA) << 16 + GetColorSpectrumGreen(ColorSpectrumA) << 8 + GetColorSpectrumRed(ColorSpectrumA))
  
EndMacro

Macro Color_RGB(ColorA)
  
  (GetColorBlue(ColorA) << 16 + GetColorGreen(ColorA) << 8 + GetColorRed(ColorA))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Min et Max de 3 nombres <<<<<

Macro MinMaxNumber(P_Min, P_Max, P_Number01, P_Number02, P_Number03)
  
  P_Min = P_Number01
  
  If P_Number02 < P_Min
    P_Min = P_Number02
  EndIf
  
  If P_Number03 < P_Min
    P_Min = P_Number03
  EndIf
  
  P_Max = P_Number01
  
  If P_Number02 > P_Max
    P_Max = P_Number02
  EndIf
  
  If P_Number03 > P_Max
    P_Max = P_Number03
  EndIf
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<

Procedure InitializeColorSpectrum(*ColorSpectrumA.ColorSpectrum)
  
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE, "Teinte")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS, "Luminosité")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION, "Saturation")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED, "Rouge")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN, "Vert")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE, "Bleu")
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_WIN_TITLE, "Spectre de couleurs")
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_REFRESH, "Rafraichir")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_VALIDATE, "Valider")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_CANCEL, "Annuler")
  
EndProcedure

Procedure GetWindowBackgroundColor()
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      BackgroundColor.l = GetSysColor_(#COLOR_3DFACE)
      
    CompilerCase #PB_OS_Linux
      BackgroundColor.l = RGB(237,235,236)
      
    CompilerCase #PB_OS_MacOS
      BackgroundColor.l = RGB(237,235,236)
      
  CompilerEndSelect
  
  ProcedureReturn BackgroundColor
EndProcedure

Procedure.l Private_ConvertRM(M1.f, M2.f, HueColor.f)
  
  ; ROUTINE DE CALCUL DE LA COMPOSANTE DE COULEUR.
  
  If HueColor > 360
    HueColor - 360
  EndIf
  
  If HueColor < 0
    HueColor + 360
  EndIf
  
  If HueColor < 60
    M1 = M1 + (M2 - M1) * HueColor / 60
  Else
    
    If HueColor < 180
      M1 = M2
    Else
      
      If HueColor < 240
        M1 = M1 + (M2 - M1) * (240 - HueColor) / 60
      EndIf
      
    EndIf
    
  EndIf
  
  ProcedureReturn M1 * 255
EndProcedure

Procedure Convert_RGB_To_HSL(*RGBColorA.Color, *HSLColorA.Color)
  
  ; ROUTINE DE CONSERTION DU RGB EN HLS.
  
  MinMaxNumber(Min.l, Max.l, GetColorRed(*RGBColorA), GetColorGreen(*RGBColorA), GetColorBlue(*RGBColorA))
  
  DeltaMaxMin.l = Max - Min
  SumMaxMin.l = Max + Min
  
  LightnessColor.f = SumMaxMin / 510
  
  If Max = Min
    
    HueColor.f = 0
    SaturationColor.f = 0
    
  Else
    
    NormalizedRed = (Max - GetColorRed(*RGBColorA)) / DeltaMaxMin
    NormalizedGreen = (Max - GetColorGreen(*RGBColorA)) / DeltaMaxMin
    NormalizedBlue = (Max - GetColorBlue(*RGBColorA)) / DeltaMaxMin
    
    If LightnessColor <= 0.5
      SaturationColor = DeltaMaxMin / SumMaxMin
    Else
      SaturationColor = DeltaMaxMin / (510 - SumMaxMin)
    EndIf
    
    If GetColorRed(*RGBColorA) = Max 
      HueColor = 60 * (6 + NormalizedBlue - NormalizedGreen)
    EndIf
    
    If GetColorGreen(*RGBColorA) = Max 
      HueColor = 60 * (2 + NormalizedRed - NormalizedBlue)
    EndIf
    
    If GetColorBlue(*RGBColorA) = Max 
      HueColor = 60 * (4 + NormalizedGreen - NormalizedRed)
    EndIf
    
  EndIf
  
  If HueColor = 360 
    HueColor = 0
  EndIf
  
  HueColor = HueColor / 360 * #COLOR_SPECTRUM_SIZE_MAX
  LightnessColor = LightnessColor * #COLOR_SPECTRUM_SIZE_MAX
  SaturationColor = SaturationColor * #COLOR_SPECTRUM_SIZE_MAX
  
  SetColorHue(*HSLColorA, Int(HueColor))
  SetColorSaturation(*HSLColorA, Int(SaturationColor))
  SetColorLightness(*HSLColorA, Int(LightnessColor))
  
EndProcedure

Procedure Convert_HSL_To_RGB(HueColor.f, LightnessColor.f, SaturationColor.f, *RGBColorA.Color)
  
  ; ROUTINE DE CONSERTION DU HSL EN RGB.
  
  HueColor = HueColor * 360 / #COLOR_SPECTRUM_SIZE_MAX
  SaturationColor = SaturationColor / #COLOR_SPECTRUM_SIZE_MAX
  LightnessColor = LightnessColor / #COLOR_SPECTRUM_SIZE_MAX
  
  If SaturationColor = 0.0
    
    SetColorRed(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
    SetColorGreen(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
    SetColorBlue(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
    
  Else
    
    If LightnessColor <= 0.5
      M2.f = LightnessColor + LightnessColor * SaturationColor
    Else
      M2 = LightnessColor + SaturationColor - LightnessColor * SaturationColor
    EndIf
    
    M1.f = 2 * LightnessColor - M2
    
    SetColorRed(*RGBColorA, Private_ConvertRm(M1, M2, HueColor + 120))
    SetColorGreen(*RGBColorA, Private_ConvertRm(M1, M2, HueColor))
    SetColorBlue(*RGBColorA, Private_ConvertRm(M1, M2, HueColor - 120))
    
  EndIf 
  
EndProcedure

Procedure GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
  
  SetColorSpectrumBackgroundLayer(*ColorSpectrumA, CreateImage(#PB_Any, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
  
  If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
    
    If StartDrawing(ImageOutput(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)))
      
      Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
      
      For SaturationID = 1 To #COLOR_SPECTRUM_SIZE_MAX
        
        For HueID = 1 To #COLOR_SPECTRUM_SIZE_MAX
          
          Convert_HSL_To_RGB(HueID, #COLOR_SPECTRUM_SIZE_MAX / 2, SaturationID, RGBColor.Color)
          
          Plot(HueID, (#COLOR_SPECTRUM_SIZE_MAX - SaturationID) + 1, Color_RGB(RGBColor))
          
        Next
        
      Next
      
      StopDrawing()
      
    EndIf
    
  EndIf
  
EndProcedure

Procedure ColorSpectrum_DrawCross(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE TRACAGE DE LA CROIX DU SPECTRE.
  
  PosX = GetColorSpectrumHue(*ColorSpectrumA)
  PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumSaturation(*ColorSpectrumA)
  
  If PosX < #COLOR_SPECTRUM_SIZE_MAX
    PosX + 1
  EndIf
  
  If PosY < #COLOR_SPECTRUM_SIZE_MAX
    PosY + 1
  EndIf
  
  Box(PosX - 1, PosY - 9, 3, 5, 0)
  Box(PosX - 1, PosY + 5, 3, 5, 0)
  Box(PosX - 9, PosY - 1, 5, 3, 0)
  Box(PosX + 5, PosY - 1, 5, 3, 0)
  
EndProcedure

Procedure ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE TRACAGE DE LA BARRE DE LIGHTNESS
  
  PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
  
  If PosY => #COLOR_SPECTRUM_SIZE_MAX
    PosY = #COLOR_SPECTRUM_SIZE_MAX - 1
  EndIf
  
  ;   Box(22, PosY, 8, 3, 0)
  
  x1 = 22
  x2 = 33
  y2 = PosY + 5
  y3 = PosY - 5
  xm = (x1 + x2) >> 1
  
  LineXY(x1, PosY, x2, y2, 0)
  LineXY(x2, y2, x2, y3, 0)
  LineXY(x2, y3, x1, PosY, 0)
  FillArea(xm, PosY, 0, 0);$FFFFFF)
  
EndProcedure

Procedure ColorSpectrum_SpectrumRedraw(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE D'AFFICHAGE DU SPECTRE ET CROIX.
  
  If StartDrawing(CanvasOutput(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)))
    
    If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
      DrawImage(ImageID(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)), 0, 0)
    EndIf
    
    ColorSpectrum_DrawCross(*ColorSpectrumA)
    
    Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
    
    StopDrawing()
    
    SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
    
  EndIf
  
EndProcedure

Procedure ColorSpectrum_LightnessRedraw(*ColorSpectrumA.ColorSpectrum)
  
  ; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
  
  If StartDrawing(CanvasOutput(GetColorSpectrumLightnessCanvas(*ColorSpectrumA)))
    
    CurrentLightness = GetColorSpectrumLightness(*ColorSpectrumA)

    Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, GetWindowBackgroundColor()); $FFFFFF)     
    Box(0, 0, 20, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
    
    For LightnessID = 1 To #COLOR_SPECTRUM_SIZE_MAX
      
      Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), LightnessID, GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
      LineXY(1, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, 18, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, Color_RGB(RGBColor))
      
    Next
    
    SetColorSpectrumLightness(*ColorSpectrumA, CurrentLightness)
    
    ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
    
    Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
    SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
    
    StopDrawing()
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Free Gadgets <<<<<

Procedure FreeColorSpectrumGadget(*ColorSpectrumA.ColorSpectrum)
  
  SetColorSpectrumHue(*ColorSpectrumA, 0)
  SetColorSpectrumSaturation(*ColorSpectrumA, 0)
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  SetColorSpectrumRed(*ColorSpectrumA, 0)
  SetColorSpectrumGreen(*ColorSpectrumA, 0)
  SetColorSpectrumBlue(*ColorSpectrumA, 0)
  
  For Index = 0 To 2
    FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index))
    FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index+3))
    FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index))
    FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index+3))    
    FreeGadget(GetColorSpectrumButtonHandle(*ColorSpectrumA, Index))
  Next
  
  FreeGadget(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA))
  FreeGadget(GetColorSpectrumLightnessCanvas(*ColorSpectrumA))
  FreeImage(GetColorSpectrumBackgroundLayer(*ColorSpectrumA))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshHSLColorOutput <<<<<

Procedure RefreshHSLColorOutput(*ColorSpectrumA.ColorSpectrum)
    
  For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_LIGHTNESS
    SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshRGBColorOutput <<<<<

Procedure RefreshRGBColorOutput(*ColorSpectrumA.ColorSpectrum)
  
  Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
  
  SetColorSpectrumRed(*ColorSpectrumA, GetColorRed(RGBColor))
  SetColorSpectrumGreen(*ColorSpectrumA, GetColorGreen(RGBColor))
  SetColorSpectrumBlue(*ColorSpectrumA, GetColorBlue(RGBColor))
  
  For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
    SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchRGBColorInput <<<<<

Procedure CatchRGBColorInput(*ColorSpectrumA.ColorSpectrum)
  
  For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
    SetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
  Next
  
  SetColorRed(RGBColor.Color, GetColorSpectrumRed(*ColorSpectrumA))
  SetColorGreen(RGBColor, GetColorSpectrumGreen(*ColorSpectrumA))
  SetColorBlue(RGBColor, GetColorSpectrumBlue(*ColorSpectrumA))
  Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
  SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
  SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
  SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchSafeHSLRGB <<<<<

Procedure CatchSafeHSLRGB(*ColorSpectrumA.ColorSpectrum)
  
  For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_BLUE
    SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<

Procedure RefeshColorSpectrum(*ColorSpectrumA.ColorSpectrum)
  
  SetColorSpectrumHue(*ColorSpectrumA, 0)
  SetColorSpectrumSaturation(*ColorSpectrumA, 0)
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  SetColorSpectrumRed(*ColorSpectrumA, 0)
  SetColorSpectrumGreen(*ColorSpectrumA, 0)
  SetColorSpectrumBlue(*ColorSpectrumA, 0)
  
  ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
  ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
  RefreshHSLColorOutput(*ColorSpectrumA)
  RefreshRGBColorOutput(*ColorSpectrumA)
  CatchSafeHSLRGB(*ColorSpectrumA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<

Procedure ForceColorSpectrumStartColor(*ColorSpectrumA.ColorSpectrum, Color.l)
  
  If Color <> - 1
    
    SetColorSpectrumRed(*ColorSpectrumA, Red(Color))
    SetColorSpectrumGreen(*ColorSpectrumA, Green(Color))
    SetColorSpectrumBlue(*ColorSpectrumA, Blue(Color))
    
    For Index = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
      SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, Index)))
    Next

    CatchRGBColorInput(*ColorSpectrumA)
    RefreshHSLColorOutput(*ColorSpectrumA)
    
  Else
    
    RefreshRGBColorOutput(*ColorSpectrumA)
    RefreshHSLColorOutput(*ColorSpectrumA)
    
  EndIf

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_SpectrumCanvas_EventManager <<<<<

Procedure ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
  
  EventType = EventType()
  
  If EventType = #PB_EventType_LeftButtonDown Or ( EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
    
    MouseX.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseX)
    MouseY.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
    
    If MouseX < 0
      MouseX = 0
    Else
      If MouseX > #COLOR_SPECTRUM_SIZE_MAX
        MouseX = #COLOR_SPECTRUM_SIZE_MAX
      EndIf
      
    EndIf
    
    If MouseY < 0
      MouseY = 0
    Else
      If MouseY > #COLOR_SPECTRUM_SIZE_MAX
        MouseY = #COLOR_SPECTRUM_SIZE_MAX 
      EndIf
    EndIf
    
    SetColorSpectrumHue(*ColorSpectrumA, MouseX)
    SetColorSpectrumSaturation(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
    
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
    
    RefreshHSLColorOutput(*ColorSpectrumA)
    RefreshRGBColorOutput(*ColorSpectrumA)
    
    CatchSafeHSLRGB(*ColorSpectrumA)
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_LightnessCanvas_EventManager <<<<<

Procedure ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
  
  EventType = EventType()
  
  If EventType = #PB_EventType_LeftButtonDown Or (EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
    
    MouseY.l = GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
    
    If MouseY < 0
      MouseY = 0
    Else
      
      If MouseY > #COLOR_SPECTRUM_SIZE_MAX
        MouseY = #COLOR_SPECTRUM_SIZE_MAX 
      EndIf
      
    EndIf
    
    SetColorSpectrumLightness(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
    
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
    
    RefreshHSLColorOutput(*ColorSpectrumA)
    RefreshRGBColorOutput(*ColorSpectrumA)
    
    CatchSafeHSLRGB(*ColorSpectrumA)
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Hue Input Control <<<<<

Procedure ColorSpectrum_Input_Control(*ColorSpectrumA.ColorSpectrum, Target.b)
  
  EventType = EventType()
  
  If EventType = #PB_EventType_Change
    
    SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target))))
    
    If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) < 0
      SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 0)
    EndIf
    
    If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) > 255
      SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 255)
    EndIf
    
    Select Target
        
      Case #COLOR_SPECTRUM_TARGET_HUE, #COLOR_SPECTRUM_TARGET_LIGHTNESS, #COLOR_SPECTRUM_TARGET_SATURATION
        SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
        
      Case #COLOR_SPECTRUM_TARGET_RED, #COLOR_SPECTRUM_TARGET_GREEN, #COLOR_SPECTRUM_TARGET_BLUE
        SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
        
        SetColorRed(RGBColor.Color, GetColorSpectrumSafeRed(*ColorSpectrumA))
        SetColorGreen(RGBColor, GetColorSpectrumSafeGreen(*ColorSpectrumA))
        SetColorBlue(RGBColor, GetColorSpectrumSafeBlue(*ColorSpectrumA))
        Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
        SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
        SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
        SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))

    EndSelect
    
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)

  ElseIf EventType = #PB_EventType_LostFocus 

    SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target), Str(GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target)))
    
  EndIf
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrumRequester <<<<<

Procedure.l ColorSpectrumRequester(*ColorSpectrumA.ColorSpectrum, Color.l = -1)
  
  SetColorSpectrumWindowHandle(*ColorSpectrumA, OpenWindow(#PB_Any, 0, 0, #COLOR_SPECTRUM_SIZE_MAX + 60, #COLOR_SPECTRUM_SIZE_MAX + 140, GetColorSpectrumText(*ColorSpectrumA, 06), #PB_Window_SystemMenu | #PB_Window_ScreenCentered))
  
  If GetColorSpectrumWindowHandle(*ColorSpectrumA) <> #Null
    
    SetColorSpectrumSpectrumCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 5, 5, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
    SetColorSpectrumLightnessCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 270, 5, 35, #COLOR_SPECTRUM_SIZE_MAX + 2))
    
    SetColorSpectrumTextHandle(*ColorSpectrumA, 6, TextGadget(#PB_Any, 5, 270, 80, 84,  "", #PB_Text_Border))
    
    PosX = 5
    PosY = 270
    
    For Index = 0 To 2
      
      SetColorSpectrumTextHandle(*ColorSpectrumA, Index, TextGadget(#PB_Any, 110, PosY, 70, 25,  GetColorSpectrumText(*ColorSpectrumA, Index), #PB_Text_Right))
      SetColorSpectrumStringHandle(*ColorSpectrumA, Index, StringGadget(#PB_Any, 185, PosY, 33, 25, ""))
      SetColorSpectrumTextHandle(*ColorSpectrumA, Index + 3, TextGadget(#PB_Any, 225, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + 3), #PB_Text_Right))
      SetColorSpectrumStringHandle(*ColorSpectrumA, Index + 3, StringGadget(#PB_Any, 275, PosY, 33, 25, ""))
      SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 360, 98, 30, GetColorSpectrumText(*ColorSpectrumA, Index + 7)))
      
      PosX + 103
      PosY + 30
      
    Next
    
    GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
    ForceColorSpectrumStartColor(*ColorSpectrumA, Color)
    CatchSafeHSLRGB(*ColorSpectrumA)
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)

    ReturnSelectedColor.l = -1
    
    Repeat
      
      EventID = WaitWindowEvent(20)
      
      Select EventID
          
        Case #PB_Event_Gadget
          
          Select EventGadget()
              
            Case GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)
              ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA)
              
            Case GetColorSpectrumLightnessCanvas(*ColorSpectrumA)
              ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
              
            Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
              ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
              
            Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 0)
              RefeshColorSpectrum(*ColorSpectrumA)
              
            Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 1)
              ReturnSelectedColor = ColorSpectrum_RGB(*ColorSpectrumA)
              EventID = #PB_Event_CloseWindow
              
            Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 2)
              EventID = #PB_Event_CloseWindow
              
          EndSelect
          
      EndSelect
      
    Until EventID = #PB_Event_CloseWindow
    
    FreeColorSpectrumGadget(*ColorSpectrumA)
    CloseWindow(GetColorSpectrumWindowHandle(*ColorSpectrumA))
    
  EndIf
  
  ProcedureReturn ReturnSelectedColor
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

InitializeColorSpectrum(ColorSpectrum.ColorSpectrum)

Color.l = ColorSpectrumRequester(ColorSpectrum, RGB(31, 196, 243))

If Color <> -1
  Debug "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color)) + ", " + Str(Blue(Color)) + ")"
Else
  Debug "L'utilisateur à annuler la sélection de la couleur"
EndIf

ResetColorSpectrum(ColorSpectrum)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Routine Spectre des couleurs Style Windows

Message par GallyHC »

Bonjour,

J'ai aussi mis a jour mon code et la capture au premier message du topic :). j'ai aussi mis une fleche pour que tout le monde soit content :)

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Routine Spectre des couleurs Style Windows

Message par Le Soldat Inconnu »

Après le style, c'est une question de gout, mais le sélecteur de couleur de Windows me sort par les yeux dans tous les cas :mrgreen:

En parlant de ça, il faudrait que je mette des canvasgadget dans le mien, cela me retirerait de l'API windows.
J'ai jamais utilisé le canvasgadget encore, faut que j'essaie la bête.

mon sélecteur de couleur, moi, c'est une sorte de plagia de celui de photoshop
Image


Édition :
Pfiou, quel bourrin, je ne peut pas utiliser de canvasgadget, j'avais fait un truc tellement barbare que ce serait plus compliqué de mettre des canvasgadgets 8O sérieux, des fois, je me demande comment j'ai réussi à pondre un truc pareil.
J'utilise le dessin direct sur la fenêtre et je dessine l'ensemble de l'affichage d'un coup, bref, si j'utilise le canvasgadget, je vais être obligé d'éclater mon dessin monobloc en plusieurs parties et j'ai pas envie :mrgreen:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Routine Spectre des couleurs Style Windows

Message par Backup »

Le Soldat Inconnu a écrit : mon sélecteur de couleur,
Image
/
que j'utilise dans EPB :)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Routine Spectre des couleurs Style Windows

Message par Guimauve »

Le Soldat Inconnu a écrit :Pfiou, quel bourrin, je ne peut pas utiliser de canvasgadget, j'avais fait un truc tellement barbare que ce serait plus compliqué de mettre des canvasgadgets 8O sérieux, des fois, je me demande comment j'ai réussi à pondre un truc pareil. J'utilise le dessin direct sur la fenêtre et je dessine l'ensemble de l'affichage d'un coup, bref, si j'utilise le canvasgadget, je vais être obligé d'éclater mon dessin monobloc en plusieurs parties et j'ai pas envie :mrgreen:
C'est vraiment dommage que tu utilise l'API windows uniquement, ça empêche la portabilité. Mais une chose est sûr, ton sélecteur de couleur est vraiment "Eyes Candy".
L'avantage d'utiliser les CanvasGadget() est que le code compile pour Windows et pour Linux. Bien entendu l'aspect des gadgets change en fonction de l'OS mais ça reste portable.

Voici ce que ça donne sous LinuxMint 12 x64 + Gnome-Shell :

Image

Et sous Windows (Image de GallyHC, version différente sans les boutons de contrôle)

Image

A+
Guimauve
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Routine Spectre des couleurs Style Windows

Message par Ar-S »

Guimauve a écrit :
Ar-S a écrit :Merci guimauve.

Pour qu'il soit parfait, l'ajout de la valeur hex serait pratique (comme dans photoshop)
Image
Juste pour visualiser ou pour entrer une valeur en Hexadécimal ?

A+
Guimauve
Juste pour visualiser ça sera suffisant :wink:
Entrer une valeur en Hexadécimal est un plus mais pour ma part non obligatoire.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre