Page 4 sur 4

Re: Routine Spectre des couleurs Style Windows

Publié : dim. 19/févr./2012 21:49
par Guimauve
@Ar-S

Je vais étudier le tout ce soir, là j'ai d'autre truc à faire pour les 2-3 prochaines heures.

A+
Guimauve

Re: Routine Spectre des couleurs Style Windows

Publié : dim. 19/févr./2012 22:01
par Le Soldat Inconnu
On doit pouvoir compiler sous Linux car en fait j'utilise peu d'API

Le truc le plus important en API, c'est la limitation de la zone de déplacement de la souris quand on maintient le clic, si tu as un code pour ça sous Linux, je le fait compatible sans soucis.
Les autres API que j'utilise, c'est pour masquer/afficher le curseur et pour prélever une couleur sur l'écran.

@Dobro : j'ai vu que tu l'utilisais dans EBP ;)

Re: Routine Spectre des couleurs Style Windows

Publié : dim. 19/févr./2012 22:06
par Backup
@Guimauve
une petite coche pour sortir le rgb avec valeur hex

rgb($51,$26,$FF)

;)

Re: Routine Spectre des couleurs Style Windows

Publié : dim. 19/févr./2012 22:42
par GallyHC
Bonjour tous,

Guimauve> je prefere ma petite fleche NA lol :)

Pour avoir le code en hex cela est très simple je penses. Dans la procedure d'affichage des Couleur RGB, on fait.

Code : Tout sélectionner

Procedure DrawRGBText()
; ROUTINE D'AFFICHAGE DES INFOS RGB.
  Define lCR.l
  Define lCG.l
  Define lCB.l

  HLSToRGB(lCH, lCL, lCS, @lCR, @lCG, @lCB)
  SetGadgetText(#String_3, Str(lCR))
  SetGadgetText(#String_4, Str(lCG))
  SetGadgetText(#String_5, Str(lCB))
  
  Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")
  
EndProcedure
Donc on Concatène le "#" + rgb et cela donne : Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")

Voila j'ai mis a jour le code...

Cordialement,
GallyHC

Re: Routine Spectre des couleurs Style Windows

Publié : lun. 20/févr./2012 1:22
par Guimauve
GallyHC a écrit :Bonjour tous,

Guimauve> je prefere ma petite fleche NA lol :)

Pour avoir le code en hex cela est très simple je penses. Dans la procedure d'affichage des Couleur RGB, on fait.

Code : Tout sélectionner

Procedure DrawRGBText()
; ROUTINE D'AFFICHAGE DES INFOS RGB.
  Define lCR.l
  Define lCG.l
  Define lCB.l

  HLSToRGB(lCH, lCL, lCS, @lCR, @lCG, @lCB)
  SetGadgetText(#String_3, Str(lCR))
  SetGadgetText(#String_4, Str(lCG))
  SetGadgetText(#String_5, Str(lCB))
  
  Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")
  
EndProcedure
Donc on Concatène le "#" + rgb et cela donne : Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")

Voila j'ai mis a jour le code...

Cordialement,
GallyHC
Si on veut l'afficher mais ça je savais comment faire. Je songe a ajouter la possibilité d'entrer une couleur en Hexa et c'est là que je ne suis pas sûr de comment m'y prendre. Pour le moment je tente de compléter la procédure GetWindowBackgroundColor(). Elle est opérationnel pour Windows et Linux (GTK+ uniquement), la partie MacOS reste à faire.

Pour ceux qui sont courageux voici le code :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GetWindowBackgroundColor()
; File Name : GetWindowBackgroundColor.pb
; File version: 0.0.1
; Programmation : In Progress
; Programmed by : Guimauve
; Date : 19-02-2012
; Last Update : 19-02-2012
; PureBasic code : 4.60
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

CompilerSelect #PB_Compiler_OS
    
  CompilerCase #PB_OS_Linux
    
    ImportC ""
      gtk_style_lookup_color(*style, ColorName.p-utf8, *Color)
    EndImport
    
  CompilerCase #PB_OS_MacOS
    
CompilerEndSelect

Procedure GetWindowBackgroundColor()
  
  CompilerSelect #PB_Compiler_OS
      
    CompilerCase #PB_OS_Windows 
      BackgroundColor.l = GetSysColor_(#COLOR_3DFACE)
      
    CompilerCase #PB_OS_Linux
      
      BtnGadget = ButtonGadget(#PB_Any,0,0,0,0,"") ; Il faut créer un bouton bidon pour récupérer la couleur
      
      If BtnGadget <> #Null
        
        ColorNameAscii.s = Space(Len("bg_color"))
        
        PokeS(@ColorNameAscii, "bg_color", -1, #PB_UTF8)
        
        gtk_widget_realize_(GadgetID(BtnGadget))
        
        *style.GtkStyle = gtk_rc_get_style_(GadgetID(BtnGadget))
        
        If gtk_style_lookup_color(*style, ColorNameAscii, @BGColor.GDKColor)
          Red = (BGColor\red / 255) & $FF 
          Green = (BGColor\green / 255) & $FF 
          Blue = (BGColor\blue / 255) & $FF 
        Else
          Red = 238
          Green = 237
          Blue = 236
        EndIf
        
        FreeGadget(BtnGadget) ; On se débarasse du bouton bidon
        
      EndIf
      
      BackgroundColor.l = RGB(Red, Green, Blue)
      
    CompilerCase #PB_OS_MacOS
      BackgroundColor.l = RGB(237,235,236)
      
  CompilerEndSelect
  
  ProcedureReturn BackgroundColor
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Il y a un bout de code à étudier pour MacOS ici :

http://www.purebasic.fr/english/viewtop ... 92#p355870

Mais là moi je fais une pause jusqu'à demain matin.

A+
Guimauve

Re: Routine Spectre des couleurs Style Windows

Publié : lun. 20/févr./2012 12:00
par GallyHC
Bonjour Guimauve,

La solution je parlais juste pour moi et c'été plus avec RSet() pour que ce soit plus propre :)

Cordialement,
GallyHC

Re: Routine Spectre des couleurs Style Windows

Publié : lun. 20/févr./2012 22:26
par GallyHC
Bonjour,

J'ai aussi teste sur le mac pour voir ce que cela donne, presque tout fonctionne sauf un TextGadget() pour mettre la couleur en grand et cela ne fonctionne pas du tout sur mac. Donc windows ok, linux ok mais pas Mac.

En gros on ne peu pas changer la couleur de fond d'un TextGadget() sur mac

Voila la capture pour voir le probleme :

Image

Cordialement,
GallyHC

Re: Routine Spectre des couleurs Style Windows

Publié : lun. 20/févr./2012 23:25
par Le Soldat Inconnu
pourquoi tu n'utilise pas un CanvasGadget pour la couleur sélectionnée ?

Re: Routine Spectre des couleurs Style Windows

Publié : lun. 20/févr./2012 23:44
par Guimauve
Le Soldat Inconnu a écrit :pourquoi tu n'utilise pas un CanvasGadget pour la couleur sélectionnée ?
Parce que c'est , euh, ... comment dire ... UN PEU OVER KILL ! Mais juste un peu ! En revanche, on pourrait passer par un ColorPreviewGadget()

Sinon, voici la version 1.0.8 avec l'affichage de la valeur html. On ne peut pas entrer de valeur pour le moment.

Édition : V1.0.9 Remplacement du TextGadget() par un ColorPreviewGadget() pour l'affichage de la couleur actuelle.

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.9
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 20-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

CompilerSelect #PB_Compiler_OS
    
  CompilerCase #PB_OS_Linux
    
    ImportC ""
      gtk_style_lookup_color(*style, ColorName.p-utf8, *Color)
    EndImport
    
  CompilerCase #PB_OS_MacOS
    
CompilerEndSelect

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_HTML
  #COLOR_SPECTRUM_TARGET_PREVIEW
  
  #COLOR_SPECTRUM_TARGET_MAX

EndEnumeration

Enumeration

  #COLOR_SPECTRUM_TEXT_HUE
  #COLOR_SPECTRUM_TEXT_SATURATION
  #COLOR_SPECTRUM_TEXT_LIGHTNESS
  #COLOR_SPECTRUM_TEXT_RED
  #COLOR_SPECTRUM_TEXT_GREEN
  #COLOR_SPECTRUM_TEXT_BLUE
  #COLOR_SPECTRUM_TEXT_HTML
  #COLOR_SPECTRUM_TEXT_WIN_TITLE
  #COLOR_SPECTRUM_TEXT_BTN_REFRESH
  #COLOR_SPECTRUM_TEXT_BTN_VALIDATE
  #COLOR_SPECTRUM_TEXT_BTN_CANCEL
  
  #COLOR_SPECTRUM_TEXT_MAX

EndEnumeration

Enumeration

  #COLOR_SPECTRUM_BTN_REFRESH
  #COLOR_SPECTRUM_BTN_VALIDATE
  #COLOR_SPECTRUM_BTN_CANCEL
  
  #COLOR_SPECTRUM_BTN_MAX

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

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< 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

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< 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

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetColor(ColorA)
  
  ClearStructure(ColorA, Color)
  
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

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

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
  WindowBackgroundColor.l
  Text.s[#COLOR_SPECTRUM_TEXT_MAX]
  TextHandle.l[#COLOR_SPECTRUM_TARGET_MAX]
  StringHandle.l[#COLOR_SPECTRUM_TARGET_MAX]
  ButtonHandle.l[#COLOR_SPECTRUM_BTN_MAX]
  
EndStructure

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

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 GetColorSpectrumWindowBackgroundColor(ColorSpectrumA)
  
  ColorSpectrumA\WindowBackgroundColor
  
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 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 SetColorSpectrumWindowBackgroundColor(ColorSpectrumA, P_WindowBackgroundColor)
  
  GetColorSpectrumWindowBackgroundColor(ColorSpectrumA) = P_WindowBackgroundColor
  
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

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetColorSpectrum(ColorSpectrumA)
  
  SetColorSpectrumBackgroundLayer(ColorSpectrumA, 0)
  SetColorSpectrumSpectrumCanvas(ColorSpectrumA, 0)
  SetColorSpectrumLightnessCanvas(ColorSpectrumA, 0)
  SetColorSpectrumWindowHandle(ColorSpectrumA, 0)
  SetColorSpectrumWindowBackgroundColor(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 SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
  
  GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
  
EndMacro

Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
  
  GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
  
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 SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
  
  GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
  
EndMacro

Macro SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
  
  GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
  
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

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.012 secondes (30333.33 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< 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

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion RGB vers Hexa <<<<<

Macro ColorSpectrum_RGB_To_Hexa(ColorSpectrumA)
  
  RSet(Hex(GetColorSpectrumRed(ColorSpectrumA)), 2, "0") + RSet(Hex(GetColorSpectrumGreen(ColorSpectrumA)), 2, "0") + RSet(Hex(GetColorSpectrumBlue(ColorSpectrumA)), 2, "0") 
  
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)
  
  ; On force des valeurs initiales pour le HSL
  SetColorSpectrumHue(*ColorSpectrumA, 0)
  SetColorSpectrumSaturation(*ColorSpectrumA, 0)
  SetColorSpectrumLightness(*ColorSpectrumA, 127)
  
  ; On met les textes en Français, il faudrait vérifier pour une éventuelle
  ; intégration avec le système de Language basé sur les fichiers *.mo.
  ; L'autre solution est d'initialiser ColorSpectrum, puis ajouter une 
  ; commande de transfer entre la structure ColorSpectrum et le système
  ; de Language. Si on ne fait pas de ResetColorSpectrum() l'initialisation
  ; pourra être faite au lancement du programme principal et les textes 
  ; resteront en mémoire jusqu'à la fin du programme.
  
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_HUE, "Teinte")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_LIGHTNESS, "Luminosité")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_SATURATION, "Saturation")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_RED, "Rouge")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_GREEN, "Vert")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BLUE, "Bleu")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_HTML, "Html")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_WIN_TITLE, "Spectre de couleurs")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BTN_REFRESH, "Rafraichir")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BTN_VALIDATE, "Valider")
  SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BTN_CANCEL, "Annuler")

EndProcedure

Procedure GetWindowBackgroundColor() 
  
  CompilerSelect #PB_Compiler_OS 
      
    CompilerCase #PB_OS_Windows  
      BackgroundColor.l = GetSysColor_(#COLOR_3DFACE) 
      
    CompilerCase #PB_OS_Linux 
      
      BtnGadget = ButtonGadget(#PB_Any,0,0,0,0,"") ; Il faut créer un bouton bidon pour récupérer la couleur 
      
      If BtnGadget <> #Null 
        
        ColorNameUTF8.s = Space(Len("bg_color")) 
        
        PokeS(@ColorNameUTF8, "bg_color", -1, #PB_UTF8) 
        
        gtk_widget_realize_(GadgetID(BtnGadget)) 
        
        *style.GtkStyle = gtk_rc_get_style_(GadgetID(BtnGadget)) 
        
        If gtk_style_lookup_color(*style, ColorNameUTF8, @BGColor.GDKColor) 
          Red = (BGColor\red / 255) & $FF  
          Green = (BGColor\green / 255) & $FF  
          Blue = (BGColor\blue / 255) & $FF  
        Else 
          Red = 238 
          Green = 237 
          Blue = 236 
        EndIf 
        
        FreeGadget(BtnGadget) ; On se débarasse du bouton bidon 
        
      EndIf 
      
      BackgroundColor.l = RGB(Red, Green, Blue) 
      
    CompilerCase #PB_OS_MacOS 
      BackgroundColor.l = RGB(237,235,236) 
      
  CompilerEndSelect 
  
  ProcedureReturn BackgroundColor 
EndProcedure 

Procedure UpdateColorPreviewGadget(GadgetID.l, Color.l)
  
  If GetGadgetData(GadgetID) <> #Null
    
    Width = GadgetWidth(GadgetID)
    Height = GadgetHeight(GadgetID)
    
    If StartDrawing(ImageOutput(GetGadgetData(GadgetID)))
      
      Box(0, 0, Width, Height, Color)
      DrawingMode(#PB_2DDrawing_Outlined)
      Box(0, 0, Width, Height, 0)
      
      StopDrawing()
      
      SetGadgetState(GadgetID, ImageID(GetGadgetData(GadgetID)))
      
    EndIf 
    
  EndIf
  
EndProcedure 

Procedure ColorPreviewGadget(GadgetID.l, x.w, y.w, Width.w, Height.w, Color.l)
  
  GadgetHandle = ImageGadget(GadgetID, x, y, Width, Height, 0)
  
  If GadgetID = #PB_Any 
    GadgetID = GadgetHandle 
  EndIf 
  
  SetGadgetData(GadgetID, CreateImage(#PB_Any, Width, Height))
  UpdateColorPreviewGadget(GadgetID, Color)
  
  ProcedureReturn GadgetHandle 
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
  
  y1 = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
  
  If y1 => #COLOR_SPECTRUM_SIZE_MAX
    y1 = #COLOR_SPECTRUM_SIZE_MAX - 1
  EndIf
  
  ;   Box(22, PosY, 8, 3, 0)
  
  x1 = 22
  x2 = 33
  y1 + 1
  y2 = y1 + 5
  y3 = y1 - 5
  xm = (x1 + x2) >> 1
  
  LineXY(x1, y1, x2, y2, 0)
  LineXY(x2, y2, x2, y3, 0)
  LineXY(x2, y3, x1, y1, 0)
  FillArea(xm, y1, 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)
    
    StopDrawing()
    
    Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
    UpdateColorPreviewGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_PREVIEW), 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, GetColorSpectrumWindowBackgroundColor(*ColorSpectrumA))     
    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)   
    StopDrawing()

    Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
    UpdateColorPreviewGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_PREVIEW), Color_RGB(RGBColor))
    
  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
  
  SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML), ColorSpectrum_RGB_To_Hexa(*ColorSpectrumA))
  
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
  
  SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML), ColorSpectrum_RGB_To_Hexa(*ColorSpectrumA))
  
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 + 170, GetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_WIN_TITLE), #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, #COLOR_SPECTRUM_TARGET_PREVIEW, ColorPreviewGadget(#PB_Any, 5, 270, 80, 84, 0))
    
    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 + #COLOR_SPECTRUM_TARGET_RED, TextGadget(#PB_Any, 225, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TEXT_RED), #PB_Text_Right))
      SetColorSpectrumStringHandle(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TARGET_RED, StringGadget(#PB_Any, 275, PosY, 33, 25, ""))
      
      SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 390, 98, 30, GetColorSpectrumText(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TEXT_BTN_REFRESH)))
      
      PosX + 103
      PosY + 30

    Next
    
    SetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML, TextGadget(#PB_Any, 163, PosY, 70, 25,  GetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_HTML), #PB_Text_Right))
    SetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML, StringGadget(#PB_Any, 238, PosY, 70, 25, "", #PB_String_ReadOnly))
    
    SetColorSpectrumWindowBackgroundColor(*ColorSpectrumA, GetWindowBackgroundColor())
    GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
    ForceColorSpectrumStartColor(*ColorSpectrumA, Color)
    CatchSafeHSLRGB(*ColorSpectrumA)
    ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
    ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
    
    ReturnSelectedColor.l = -1
    
    Repeat
      
      EventID = WaitWindowEvent()
      
      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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<

Re: Routine Spectre des couleurs Style Windows

Publié : lun. 20/févr./2012 23:54
par Le Soldat Inconnu
ColorPreviewGadget() ?? c'est quoi cette bête ? j'ai pas de ça dans mon PB moi 8O

Re: Routine Spectre des couleurs Style Windows

Publié : mar. 21/févr./2012 0:33
par Guimauve
Le Soldat Inconnu a écrit :ColorPreviewGadget() ?? c'est quoi cette bête ? j'ai pas de ça dans mon PB moi 8O
Il est enfouis dans le code précédent. je le redonne ici :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : ColorPreviewGadget
; Fichier : ColorPreviewGadget.pb
; Version : 1.0.1
; Programmation : OK
; Programmé par : Guimauve
; Date : 03-05-2007
; Mise à jour : 20-02-2012
; Codé avec PureBasic V4.61 Beta
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure UpdateColorPreviewGadget(GadgetID.l, Color.l)
  
  If GetGadgetData(GadgetID) <> #Null
    
    Width = GadgetWidth(GadgetID)
    Height = GadgetHeight(GadgetID)
    
    If StartDrawing(ImageOutput(GetGadgetData(GadgetID)))
      
      Box(0, 0, Width, Height, Color)
      DrawingMode(#PB_2DDrawing_Outlined)
      Box(0, 0, Width, Height, 0)
      
      StopDrawing()
      
      SetGadgetState(GadgetID, ImageID(GetGadgetData(GadgetID)))
      
    EndIf 
    
  EndIf
  
EndProcedure 

Procedure ColorPreviewGadget(GadgetID.l, x.w, y.w, Width.w, Height.w, Color.l)
  
  GadgetHandle = ImageGadget(GadgetID, x, y, Width, Height, 0)
  
  If GadgetID = #PB_Any 
    GadgetID = GadgetHandle 
  EndIf 
  
  SetGadgetData(GadgetID, CreateImage(#PB_Any, Width, Height))
  UpdateColorPreviewGadget(GadgetID, Color)
  
  ProcedureReturn GadgetHandle 
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<< 
A+
Guimauve

Re: Routine Spectre des couleurs Style Windows

Publié : jeu. 23/févr./2012 0:37
par Guimauve
Bonjour à tous,

Pour la question de la couleur de fond de la fenêtre utilisé pour dessiner, suite a une suggestion sur le forum anglais. La solution la plus simple et vraiment multi plate-forme serait d'imposer une couleur pour le fond de la fenêtre et l'utiliser pour dessiner le fond du LightnessCanvasGadget() afin de ne pas avoir de fond blanc par défaut.

Vous en pensez quoi ? Je laisse le code actuel sur le forum mais je modifie celui que j'ai dans mes codes pour le rendre plus simple. J'attends vos retour avec impatience.

A+
Guimauve

Re: Routine Spectre des couleurs Style Windows

Publié : sam. 25/févr./2012 14:48
par dayvid
Mode boulet > On

Moi je t'es demander 3 fonction
mais je n'es rien eux :cry:

:lol: Et puis en plus toujours pas compris pourquoi les valeurs sont différentes, bref

Mode boulet > Off

Re: Routine Spectre des couleurs Style Windows

Publié : sam. 25/févr./2012 15:15
par GallyHC
bonjour,

C'est juste un calcul mathematique alors tout depend de comment on le fait, dans ma version j'ai esseyer de prendre tout en compte donc peu etre plus precis je ne sais pas? mais bon dans tout les cas c'est a pas grand chose. si tu utilise mspaint deja regarde que le spectre de couleur de seven et vista son 2 fois moin grand que celui que j'ai fait. sachant que pour ma part je suis en 256 * 256 pixels.

Alors la precision est dans le calcul et viole le pourquoi du comment

cordialement,
gallyhc