PureBasic

Forums PureBasic
Nous sommes le Jeu 23/Mai/2013 18:23

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 59 messages ]  Aller à la page Précédente  1, 2, 3, 4  Suivante
Auteur Message
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Sam 18/Fév/2012 23:57 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
@ Le soldat Inconnu

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

A+
Guimauve


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 0:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 914
Localisation: Nord (France)
Bonjour Guimauve,

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

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 0:43 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
@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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 1:06 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
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:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 10:59 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 13:23 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 13:51 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 914
Localisation: Nord (France)
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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 13:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5223
Merci guimauve.

Pour qu'il soit parfait, l'ajout de la valeur hex serait pratique (comme dans photoshop)
Image

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 15:20 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 16:50 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
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:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 19:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 914
Localisation: Nord (France)
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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 20:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
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)]


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 20:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12954
Le Soldat Inconnu a écrit:
mon sélecteur de couleur,
Image
/


que j'utilise dans EPB :)

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 21:14 
Hors ligne

Inscription: Mer 11/Fév/2004 0:32
Messages: 1015
Localisation: Québec, Canada
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


Haut
 Profil  
 
 Sujet du message: Re: Routine Spectre des couleurs Style Windows
MessagePosté: Dim 19/Fév/2012 21:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5223
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.

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 59 messages ]  Aller à la page Précédente  1, 2, 3, 4  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye