Re: Routine Spectre des couleurs Style Windows
Publié : sam. 18/févr./2012 23:57
@ Le soldat Inconnu
C'est bon, je l'ajoute...
A+
Guimauve
C'est bon, je l'ajoute...
A+
Guimauve
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V3.131.634
; Nom du projet : Color Spectrum Requester
; Nom du fichier : Color Spectrum Requester.pb
; Version du fichier : 1.0.5
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 19-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Enumeration
#COLOR_SPECTRUM_TARGET_HUE
#COLOR_SPECTRUM_TARGET_SATURATION
#COLOR_SPECTRUM_TARGET_LIGHTNESS
#COLOR_SPECTRUM_TARGET_RED
#COLOR_SPECTRUM_TARGET_GREEN
#COLOR_SPECTRUM_TARGET_BLUE
#COLOR_SPECTRUM_TARGET_WIN_TITLE
#COLOR_SPECTRUM_TARGET_BTN_REFRESH
#COLOR_SPECTRUM_TARGET_BTN_VALIDATE
#COLOR_SPECTRUM_TARGET_BTN_CANCEL
EndEnumeration
#COLOR_SPECTRUM_SIZE_MAX = 255
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration des Structures <<<<<
Structure Color
StructureUnion
Red.a
Hue.a
EndStructureUnion
StructureUnion
Green.a
Saturation.a
EndStructureUnion
StructureUnion
Blue.a
Lightness.a
EndStructureUnion
EndStructure
Structure ColorSpectrum
HSLRGB.l[6] ; Hue, Saturation, Lightness, Red, Green, Blue
SafeHSLRGB.l[6] ; SafeHue, SafeSaturation, SafeLightness, SafeRed, SafeGreen, SafeBlue
BackgroundLayer.l
SpectrumCanvas.l
LightnessCanvas.l
WindowHandle.l
Text.s[10]
TextHandle.l[7]
StringHandle.l[6]
ButtonHandle.l[3]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetColorRed(ColorA)
ColorA\Red
EndMacro
Macro GetColorHue(ColorA)
ColorA\Hue
EndMacro
Macro GetColorGreen(ColorA)
ColorA\Green
EndMacro
Macro GetColorSaturation(ColorA)
ColorA\Saturation
EndMacro
Macro GetColorBlue(ColorA)
ColorA\Blue
EndMacro
Macro GetColorLightness(ColorA)
ColorA\Lightness
EndMacro
Macro GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID)
ColorSpectrumA\HSLRGB[HSLRGBID]
EndMacro
Macro GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID)
ColorSpectrumA\SafeHSLRGB[SafeHSLRGBID]
EndMacro
Macro GetColorSpectrumBackgroundLayer(ColorSpectrumA)
ColorSpectrumA\BackgroundLayer
EndMacro
Macro GetColorSpectrumSpectrumCanvas(ColorSpectrumA)
ColorSpectrumA\SpectrumCanvas
EndMacro
Macro GetColorSpectrumLightnessCanvas(ColorSpectrumA)
ColorSpectrumA\LightnessCanvas
EndMacro
Macro GetColorSpectrumWindowHandle(ColorSpectrumA)
ColorSpectrumA\WindowHandle
EndMacro
Macro GetColorSpectrumText(ColorSpectrumA, TextID)
ColorSpectrumA\Text[TextID]
EndMacro
Macro GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID)
ColorSpectrumA\TextHandle[TextHandleID]
EndMacro
Macro GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID)
ColorSpectrumA\StringHandle[StringHandleID]
EndMacro
Macro GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID)
ColorSpectrumA\ButtonHandle[ButtonHandleID]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetColorRed(ColorA, P_Red)
GetColorRed(ColorA) = P_Red
EndMacro
Macro SetColorHue(ColorA, P_Hue)
GetColorHue(ColorA) = P_Hue
EndMacro
Macro SetColorGreen(ColorA, P_Green)
GetColorGreen(ColorA) = P_Green
EndMacro
Macro SetColorLightness(ColorA, P_Lightness)
GetColorLightness(ColorA) = P_Lightness
EndMacro
Macro SetColorBlue(ColorA, P_Blue)
GetColorBlue(ColorA) = P_Blue
EndMacro
Macro SetColorSaturation(ColorA, P_Saturation)
GetColorSaturation(ColorA) = P_Saturation
EndMacro
Macro SetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID, P_HSLRGB)
GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID) = P_HSLRGB
EndMacro
Macro SetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID, P_SafeHSLRGB)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID) = P_SafeHSLRGB
EndMacro
Macro SetColorSpectrumBackgroundLayer(ColorSpectrumA, P_BackgroundLayer)
GetColorSpectrumBackgroundLayer(ColorSpectrumA) = P_BackgroundLayer
EndMacro
Macro SetColorSpectrumSpectrumCanvas(ColorSpectrumA, P_SpectrumCanvas)
GetColorSpectrumSpectrumCanvas(ColorSpectrumA) = P_SpectrumCanvas
EndMacro
Macro SetColorSpectrumLightnessCanvas(ColorSpectrumA, P_LightnessCanvas)
GetColorSpectrumLightnessCanvas(ColorSpectrumA) = P_LightnessCanvas
EndMacro
Macro SetColorSpectrumWindowHandle(ColorSpectrumA, P_WindowHandle)
GetColorSpectrumWindowHandle(ColorSpectrumA) = P_WindowHandle
EndMacro
Macro SetColorSpectrumText(ColorSpectrumA, TextID, P_Text)
GetColorSpectrumText(ColorSpectrumA, TextID) = P_Text
EndMacro
Macro SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, P_TextHandle)
GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID) = P_TextHandle
EndMacro
Macro SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, P_StringHandle)
GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID) = P_StringHandle
EndMacro
Macro SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, P_ButtonHandle)
GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID) = P_ButtonHandle
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Reset <<<<<
Macro ResetColor(ColorA)
ClearStructure(ColorA, Color)
EndMacro
Macro ResetColorSpectrum(ColorSpectrumA)
SetColorSpectrumBackgroundLayer(ColorSpectrumA, 0)
SetColorSpectrumSpectrumCanvas(ColorSpectrumA, 0)
SetColorSpectrumLightnessCanvas(ColorSpectrumA, 0)
SetColorSpectrumWindowHandle(ColorSpectrumA, 0)
For TextID = 0 To 9
SetColorSpectrumText(ColorSpectrumA, TextID, "")
Next
For TextHandleID = 0 To 6
SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, 0)
Next
For StringHandleID = 0 To 5
SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumHSLRGB(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumSafeHSLRGB(ColorSpectrumA, StringHandleID, 0)
Next
For ButtonHandleID = 0 To 2
SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, 0)
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs spéciaux <<<<<
Macro GetColorSpectrumHue(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
EndMacro
Macro GetColorSpectrumLightness(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
EndMacro
Macro GetColorSpectrumSaturation(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
EndMacro
Macro GetColorSpectrumRed(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
EndMacro
Macro GetColorSpectrumGreen(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
EndMacro
Macro GetColorSpectrumBlue(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
EndMacro
Macro GetColorSpectrumSafeHue(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
EndMacro
Macro GetColorSpectrumSafeLightness(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
EndMacro
Macro GetColorSpectrumSafeSaturation(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
EndMacro
Macro GetColorSpectrumSafeRed(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
EndMacro
Macro GetColorSpectrumSafeGreen(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
EndMacro
Macro GetColorSpectrumSafeBlue(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetColorSpectrumHue(ColorSpectrumA, P_Hue)
GetColorSpectrumHue(ColorSpectrumA) = P_Hue
EndMacro
Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
EndMacro
Macro SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
EndMacro
Macro SetColorSpectrumRed(ColorSpectrumA, P_Red)
GetColorSpectrumRed(ColorSpectrumA) = P_Red
EndMacro
Macro SetColorSpectrumGreen(ColorSpectrumA, P_Green)
GetColorSpectrumGreen(ColorSpectrumA) = P_Green
EndMacro
Macro SetColorSpectrumBlue(ColorSpectrumA, P_Blue)
GetColorSpectrumBlue(ColorSpectrumA) = P_Blue
EndMacro
Macro SetColorSpectrumSafeHue(ColorSpectrumA, P_SafeHue)
GetColorSpectrumSafeHue(ColorSpectrumA) = P_SafeHue
EndMacro
Macro SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
EndMacro
Macro SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
EndMacro
Macro SetColorSpectrumSafeRed(ColorSpectrumA, P_SafeRed)
GetColorSpectrumSafeRed(ColorSpectrumA) = P_SafeRed
EndMacro
Macro SetColorSpectrumSafeGreen(ColorSpectrumA, P_SafeGreen)
GetColorSpectrumSafeGreen(ColorSpectrumA) = P_SafeGreen
EndMacro
Macro SetColorSpectrumSafeBlue(ColorSpectrumA, P_SafeBlue)
GetColorSpectrumSafeBlue(ColorSpectrumA) = P_SafeBlue
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Update <<<<<
Macro UpdateColorRGB(ColorA, P_Red, P_Green, P_Blue)
SetColorRed(ColorA, P_Red)
SetColorGreen(ColorA, P_Green)
SetColorBlue(ColorA, P_Blue)
EndMacro
Macro UpdateColorHSL(ColorA, P_Hue, P_Saturation, P_Lightness)
SetColorHue(ColorA, P_Hue)
SetColorSaturation(ColorA, P_Saturation)
SetColorLightness(ColorA, P_Lightness)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs de Formatage <<<<<
Macro FormatColorSpectrumRGB(ColorSpectrumA)
"RGB(" + Str(GetColorSpectrumRed(ColorSpectrumA)) + ", " + Str(GetColorSpectrumGreen(ColorSpectrumA)) + ", " + Str(GetColorSpectrumBlue(ColorSpectrumA)) + ")"
EndMacro
Macro FormatColorSpectrumHSL(ColorSpectrumA)
"HSL(" + Str(GetColorSpectrumHue(ColorSpectrumA)) + ", " + Str(GetColorSpectrumSaturation(ColorSpectrumA)) + ", " + Str(GetColorSpectrumLightness(ColorSpectrumA)) + ")"
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion vers couleur entier long <<<<<
Macro ColorSpectrum_RGB(ColorSpectrumA)
(GetColorSpectrumBlue(ColorSpectrumA) << 16 + GetColorSpectrumGreen(ColorSpectrumA) << 8 + GetColorSpectrumRed(ColorSpectrumA))
EndMacro
Macro Color_RGB(ColorA)
(GetColorBlue(ColorA) << 16 + GetColorGreen(ColorA) << 8 + GetColorRed(ColorA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Min et Max de 3 nombres <<<<<
Macro MinMaxNumber(P_Min, P_Max, P_Number01, P_Number02, P_Number03)
P_Min = P_Number01
If P_Number02 < P_Min
P_Min = P_Number02
EndIf
If P_Number03 < P_Min
P_Min = P_Number03
EndIf
P_Max = P_Number01
If P_Number02 > P_Max
P_Max = P_Number02
EndIf
If P_Number03 > P_Max
P_Max = P_Number03
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<
Procedure InitializeColorSpectrum(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE, "Teinte")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS, "Luminosité")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION, "Saturation")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED, "Rouge")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN, "Vert")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE, "Bleu")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_WIN_TITLE, "Spectre de couleurs")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_REFRESH, "Rafraichir")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_VALIDATE, "Valider")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_CANCEL, "Annuler")
EndProcedure
Procedure.l Private_ConvertRM(M1.f, M2.f, HueColor.f)
; ROUTINE DE CALCUL DE LA COMPOSANTE DE COULEUR.
If HueColor > 360
HueColor - 360
EndIf
If HueColor < 0
HueColor + 360
EndIf
If HueColor < 60
M1 = M1 + (M2 - M1) * HueColor / 60
Else
If HueColor < 180
M1 = M2
Else
If HueColor < 240
M1 = M1 + (M2 - M1) * (240 - HueColor) / 60
EndIf
EndIf
EndIf
ProcedureReturn M1 * 255
EndProcedure
Procedure Convert_RGB_To_HSL(*RGBColorA.Color, *HSLColorA.Color)
; ROUTINE DE CONSERTION DU RGB EN HLS.
MinMaxNumber(Min.l, Max.l, GetColorRed(*RGBColorA), GetColorGreen(*RGBColorA), GetColorBlue(*RGBColorA))
DeltaMaxMin.l = Max - Min
SumMaxMin.l = Max + Min
LightnessColor.f = SumMaxMin / 510
If Max = Min
HueColor.f = 0
SaturationColor.f = 0
Else
NormalizedRed = (Max - GetColorRed(*RGBColorA)) / DeltaMaxMin
NormalizedGreen = (Max - GetColorGreen(*RGBColorA)) / DeltaMaxMin
NormalizedBlue = (Max - GetColorBlue(*RGBColorA)) / DeltaMaxMin
If LightnessColor <= 0.5
SaturationColor = DeltaMaxMin / SumMaxMin
Else
SaturationColor = DeltaMaxMin / (510 - SumMaxMin)
EndIf
If GetColorRed(*RGBColorA) = Max
HueColor = 60 * (6 + NormalizedBlue - NormalizedGreen)
EndIf
If GetColorGreen(*RGBColorA) = Max
HueColor = 60 * (2 + NormalizedRed - NormalizedBlue)
EndIf
If GetColorBlue(*RGBColorA) = Max
HueColor = 60 * (4 + NormalizedGreen - NormalizedRed)
EndIf
EndIf
If HueColor = 360
HueColor = 0
EndIf
HueColor = HueColor / 360 * #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor * #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor * #COLOR_SPECTRUM_SIZE_MAX
SetColorHue(*HSLColorA, Int(HueColor))
SetColorSaturation(*HSLColorA, Int(SaturationColor))
SetColorLightness(*HSLColorA, Int(LightnessColor))
EndProcedure
Procedure Convert_HSL_To_RGB(HueColor.f, LightnessColor.f, SaturationColor.f, *RGBColorA.Color)
; ROUTINE DE CONSERTION DU HSL EN RGB.
HueColor = HueColor * 360 / #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor / #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor / #COLOR_SPECTRUM_SIZE_MAX
If SaturationColor = 0.0
SetColorRed(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorGreen(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorBlue(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
Else
If LightnessColor <= 0.5
M2.f = LightnessColor + LightnessColor * SaturationColor
Else
M2 = LightnessColor + SaturationColor - LightnessColor * SaturationColor
EndIf
M1.f = 2 * LightnessColor - M2
SetColorRed(*RGBColorA, Private_ConvertRm(M1, M2, HueColor + 120))
SetColorGreen(*RGBColorA, Private_ConvertRm(M1, M2, HueColor))
SetColorBlue(*RGBColorA, Private_ConvertRm(M1, M2, HueColor - 120))
EndIf
EndProcedure
Procedure GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
SetColorSpectrumBackgroundLayer(*ColorSpectrumA, CreateImage(#PB_Any, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
If StartDrawing(ImageOutput(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)))
Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For SaturationID = 1 To #COLOR_SPECTRUM_SIZE_MAX
For HueID = 1 To #COLOR_SPECTRUM_SIZE_MAX
Convert_HSL_To_RGB(HueID, #COLOR_SPECTRUM_SIZE_MAX / 2, SaturationID, RGBColor.Color)
Plot(HueID, (#COLOR_SPECTRUM_SIZE_MAX - SaturationID) + 1, Color_RGB(RGBColor))
Next
Next
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure ColorSpectrum_DrawCross(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA CROIX DU SPECTRE.
PosX = GetColorSpectrumHue(*ColorSpectrumA)
PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumSaturation(*ColorSpectrumA)
If PosX < #COLOR_SPECTRUM_SIZE_MAX
PosX + 1
EndIf
If PosY < #COLOR_SPECTRUM_SIZE_MAX
PosY + 1
EndIf
Box(PosX - 1, PosY - 9, 3, 5, 0)
Box(PosX - 1, PosY + 5, 3, 5, 0)
Box(PosX - 9, PosY - 1, 5, 3, 0)
Box(PosX + 5, PosY - 1, 5, 3, 0)
EndProcedure
Procedure ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA BARRE DE LIGHTNESS
PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
If PosY => #COLOR_SPECTRUM_SIZE_MAX
PosY = #COLOR_SPECTRUM_SIZE_MAX - 1
EndIf
Box(22, PosY, 8, 3, 0)
EndProcedure
Procedure ColorSpectrum_SpectrumRedraw(*ColorSpectrumA.ColorSpectrum)
; ROUTINE D'AFFICHAGE DU SPECTRE ET CROIX.
If StartDrawing(CanvasOutput(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)))
If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
DrawImage(ImageID(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)), 0, 0)
EndIf
ColorSpectrum_DrawCross(*ColorSpectrumA)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
StopDrawing()
SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
EndIf
EndProcedure
Procedure ColorSpectrum_LightnessRedraw(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
If StartDrawing(CanvasOutput(GetColorSpectrumLightnessCanvas(*ColorSpectrumA)))
CurrentLightness = GetColorSpectrumLightness(*ColorSpectrumA)
Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $FFFFFF)
Box(0, 0, 20, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For LightnessID = 1 To #COLOR_SPECTRUM_SIZE_MAX
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), LightnessID, GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
LineXY(1, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, 18, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, Color_RGB(RGBColor))
Next
SetColorSpectrumLightness(*ColorSpectrumA, CurrentLightness)
ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
StopDrawing()
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Free Gadgets <<<<<
Procedure FreeColorSpectrumGadget(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumRed(*ColorSpectrumA, 0)
SetColorSpectrumGreen(*ColorSpectrumA, 0)
SetColorSpectrumBlue(*ColorSpectrumA, 0)
For Index = 0 To 2
FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index))
FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index+3))
FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index))
FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index+3))
FreeGadget(GetColorSpectrumButtonHandle(*ColorSpectrumA, Index))
Next
FreeGadget(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA))
FreeGadget(GetColorSpectrumLightnessCanvas(*ColorSpectrumA))
FreeImage(GetColorSpectrumBackgroundLayer(*ColorSpectrumA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshHSLColorOutput <<<<<
Procedure RefreshHSLColorOutput(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_LIGHTNESS
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshRGBColorOutput <<<<<
Procedure RefreshRGBColorOutput(*ColorSpectrumA.ColorSpectrum)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
SetColorSpectrumRed(*ColorSpectrumA, GetColorRed(RGBColor))
SetColorSpectrumGreen(*ColorSpectrumA, GetColorGreen(RGBColor))
SetColorSpectrumBlue(*ColorSpectrumA, GetColorBlue(RGBColor))
For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchRGBColorInput <<<<<
Procedure CatchRGBColorInput(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
Next
SetColorRed(RGBColor.Color, GetColorSpectrumRed(*ColorSpectrumA))
SetColorGreen(RGBColor, GetColorSpectrumGreen(*ColorSpectrumA))
SetColorBlue(RGBColor, GetColorSpectrumBlue(*ColorSpectrumA))
Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchSafeHSLRGB <<<<<
Procedure CatchSafeHSLRGB(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<
Procedure RefeshColorSpectrum(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumRed(*ColorSpectrumA, 0)
SetColorSpectrumGreen(*ColorSpectrumA, 0)
SetColorSpectrumBlue(*ColorSpectrumA, 0)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<
Procedure ForceColorSpectrumStartColor(*ColorSpectrumA.ColorSpectrum, Color.l)
If Color <> - 1
SetColorSpectrumRed(*ColorSpectrumA, Red(Color))
SetColorSpectrumGreen(*ColorSpectrumA, Green(Color))
SetColorSpectrumBlue(*ColorSpectrumA, Blue(Color))
For Index = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, Index)))
Next
CatchRGBColorInput(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
Else
RefreshRGBColorOutput(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_SpectrumCanvas_EventManager <<<<<
Procedure ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown Or ( EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
MouseX.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseX)
MouseY.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
If MouseX < 0
MouseX = 0
Else
If MouseX > #COLOR_SPECTRUM_SIZE_MAX
MouseX = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
If MouseY < 0
MouseY = 0
Else
If MouseY > #COLOR_SPECTRUM_SIZE_MAX
MouseY = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
SetColorSpectrumHue(*ColorSpectrumA, MouseX)
SetColorSpectrumSaturation(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_LightnessCanvas_EventManager <<<<<
Procedure ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown Or (EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
MouseY.l = GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
If MouseY < 0
MouseY = 0
Else
If MouseY > #COLOR_SPECTRUM_SIZE_MAX
MouseY = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
SetColorSpectrumLightness(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Hue Input Control <<<<<
Procedure ColorSpectrum_Input_Control(*ColorSpectrumA.ColorSpectrum, Target.b)
EventType = EventType()
If EventType = #PB_EventType_Change
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target))))
If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) < 0
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 0)
EndIf
If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) > 255
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 255)
EndIf
Select Target
Case #COLOR_SPECTRUM_TARGET_HUE, #COLOR_SPECTRUM_TARGET_LIGHTNESS, #COLOR_SPECTRUM_TARGET_SATURATION
SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
Case #COLOR_SPECTRUM_TARGET_RED, #COLOR_SPECTRUM_TARGET_GREEN, #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
SetColorRed(RGBColor.Color, GetColorSpectrumSafeRed(*ColorSpectrumA))
SetColorGreen(RGBColor, GetColorSpectrumSafeGreen(*ColorSpectrumA))
SetColorBlue(RGBColor, GetColorSpectrumSafeBlue(*ColorSpectrumA))
Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
EndSelect
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
ElseIf EventType = #PB_EventType_LostFocus
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target), Str(GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrumRequester <<<<<
Procedure.l ColorSpectrumRequester(*ColorSpectrumA.ColorSpectrum, Color.l = -1)
SetColorSpectrumWindowHandle(*ColorSpectrumA, OpenWindow(#PB_Any, 0, 0, #COLOR_SPECTRUM_SIZE_MAX + 55, #COLOR_SPECTRUM_SIZE_MAX + 140, GetColorSpectrumText(*ColorSpectrumA, 06), #PB_Window_SystemMenu | #PB_Window_ScreenCentered))
If GetColorSpectrumWindowHandle(*ColorSpectrumA) <> #Null
SetColorSpectrumSpectrumCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 5, 5, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumLightnessCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 270, 5, 30, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumTextHandle(*ColorSpectrumA, 6, TextGadget(#PB_Any, 5, 270, 80, 84, "", #PB_Text_Border))
PosX = 10
PosY = 270
For Index = 0 To 2
SetColorSpectrumTextHandle(*ColorSpectrumA, Index, TextGadget(#PB_Any, 102, PosY, 70, 25, GetColorSpectrumText(*ColorSpectrumA, Index), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index, StringGadget(#PB_Any, 180, PosY, 33, 25, ""))
SetColorSpectrumTextHandle(*ColorSpectrumA, Index + 3, TextGadget(#PB_Any, 220, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + 3), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index + 3, StringGadget(#PB_Any, 270, PosY, 33, 25, ""))
SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 360, 95, 30, GetColorSpectrumText(*ColorSpectrumA, Index + 7)))
PosX + 100
PosY + 30
Next
GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
ForceColorSpectrumStartColor(*ColorSpectrumA, Color)
CatchSafeHSLRGB(*ColorSpectrumA)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
ReturnSelectedColor.l = -1
Repeat
EventID = WaitWindowEvent(20)
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)
ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA)
Case GetColorSpectrumLightnessCanvas(*ColorSpectrumA)
ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 0)
RefeshColorSpectrum(*ColorSpectrumA)
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 1)
ReturnSelectedColor = ColorSpectrum_RGB(*ColorSpectrumA)
EventID = #PB_Event_CloseWindow
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 2)
EventID = #PB_Event_CloseWindow
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
FreeColorSpectrumGadget(*ColorSpectrumA)
CloseWindow(GetColorSpectrumWindowHandle(*ColorSpectrumA))
EndIf
ProcedureReturn ReturnSelectedColor
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
InitializeColorSpectrum(ColorSpectrum.ColorSpectrum)
Color.l = ColorSpectrumRequester(ColorSpectrum, RGB(31, 196, 243))
If Color <> -1
Debug "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color)) + ", " + Str(Blue(Color)) + ")"
Else
Debug "L'utilisateur à annuler la sélection de la couleur"
EndIf
ResetColorSpectrum(ColorSpectrum)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
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.dayvid a écrit :Wahou superbe !
Vraiment superbe ce code![]()
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![]()
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
Juste pour visualiser ou pour entrer une valeur en Hexadécimal ?Ar-S a écrit :Merci guimauve.
Pour qu'il soit parfait, l'ajout de la valeur hex serait pratique (comme dans photoshop)
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V3.131.634
; Nom du projet : Color Spectrum Requester
; Nom du fichier : Color Spectrum Requester.pb
; Version du fichier : 1.0.6
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 19-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Enumeration
#COLOR_SPECTRUM_TARGET_HUE
#COLOR_SPECTRUM_TARGET_SATURATION
#COLOR_SPECTRUM_TARGET_LIGHTNESS
#COLOR_SPECTRUM_TARGET_RED
#COLOR_SPECTRUM_TARGET_GREEN
#COLOR_SPECTRUM_TARGET_BLUE
#COLOR_SPECTRUM_TARGET_WIN_TITLE
#COLOR_SPECTRUM_TARGET_BTN_REFRESH
#COLOR_SPECTRUM_TARGET_BTN_VALIDATE
#COLOR_SPECTRUM_TARGET_BTN_CANCEL
EndEnumeration
#COLOR_SPECTRUM_SIZE_MAX = 255
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration des Structures <<<<<
Structure Color
StructureUnion
Red.a
Hue.a
EndStructureUnion
StructureUnion
Green.a
Saturation.a
EndStructureUnion
StructureUnion
Blue.a
Lightness.a
EndStructureUnion
EndStructure
Structure ColorSpectrum
HSLRGB.l[6] ; Hue, Saturation, Lightness, Red, Green, Blue
SafeHSLRGB.l[6] ; SafeHue, SafeSaturation, SafeLightness, SafeRed, SafeGreen, SafeBlue
BackgroundLayer.l
SpectrumCanvas.l
LightnessCanvas.l
WindowHandle.l
Text.s[10]
TextHandle.l[7]
StringHandle.l[6]
ButtonHandle.l[3]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetColorRed(ColorA)
ColorA\Red
EndMacro
Macro GetColorHue(ColorA)
ColorA\Hue
EndMacro
Macro GetColorGreen(ColorA)
ColorA\Green
EndMacro
Macro GetColorSaturation(ColorA)
ColorA\Saturation
EndMacro
Macro GetColorBlue(ColorA)
ColorA\Blue
EndMacro
Macro GetColorLightness(ColorA)
ColorA\Lightness
EndMacro
Macro GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID)
ColorSpectrumA\HSLRGB[HSLRGBID]
EndMacro
Macro GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID)
ColorSpectrumA\SafeHSLRGB[SafeHSLRGBID]
EndMacro
Macro GetColorSpectrumBackgroundLayer(ColorSpectrumA)
ColorSpectrumA\BackgroundLayer
EndMacro
Macro GetColorSpectrumSpectrumCanvas(ColorSpectrumA)
ColorSpectrumA\SpectrumCanvas
EndMacro
Macro GetColorSpectrumLightnessCanvas(ColorSpectrumA)
ColorSpectrumA\LightnessCanvas
EndMacro
Macro GetColorSpectrumWindowHandle(ColorSpectrumA)
ColorSpectrumA\WindowHandle
EndMacro
Macro GetColorSpectrumText(ColorSpectrumA, TextID)
ColorSpectrumA\Text[TextID]
EndMacro
Macro GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID)
ColorSpectrumA\TextHandle[TextHandleID]
EndMacro
Macro GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID)
ColorSpectrumA\StringHandle[StringHandleID]
EndMacro
Macro GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID)
ColorSpectrumA\ButtonHandle[ButtonHandleID]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetColorRed(ColorA, P_Red)
GetColorRed(ColorA) = P_Red
EndMacro
Macro SetColorHue(ColorA, P_Hue)
GetColorHue(ColorA) = P_Hue
EndMacro
Macro SetColorGreen(ColorA, P_Green)
GetColorGreen(ColorA) = P_Green
EndMacro
Macro SetColorLightness(ColorA, P_Lightness)
GetColorLightness(ColorA) = P_Lightness
EndMacro
Macro SetColorBlue(ColorA, P_Blue)
GetColorBlue(ColorA) = P_Blue
EndMacro
Macro SetColorSaturation(ColorA, P_Saturation)
GetColorSaturation(ColorA) = P_Saturation
EndMacro
Macro SetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID, P_HSLRGB)
GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID) = P_HSLRGB
EndMacro
Macro SetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID, P_SafeHSLRGB)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID) = P_SafeHSLRGB
EndMacro
Macro SetColorSpectrumBackgroundLayer(ColorSpectrumA, P_BackgroundLayer)
GetColorSpectrumBackgroundLayer(ColorSpectrumA) = P_BackgroundLayer
EndMacro
Macro SetColorSpectrumSpectrumCanvas(ColorSpectrumA, P_SpectrumCanvas)
GetColorSpectrumSpectrumCanvas(ColorSpectrumA) = P_SpectrumCanvas
EndMacro
Macro SetColorSpectrumLightnessCanvas(ColorSpectrumA, P_LightnessCanvas)
GetColorSpectrumLightnessCanvas(ColorSpectrumA) = P_LightnessCanvas
EndMacro
Macro SetColorSpectrumWindowHandle(ColorSpectrumA, P_WindowHandle)
GetColorSpectrumWindowHandle(ColorSpectrumA) = P_WindowHandle
EndMacro
Macro SetColorSpectrumText(ColorSpectrumA, TextID, P_Text)
GetColorSpectrumText(ColorSpectrumA, TextID) = P_Text
EndMacro
Macro SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, P_TextHandle)
GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID) = P_TextHandle
EndMacro
Macro SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, P_StringHandle)
GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID) = P_StringHandle
EndMacro
Macro SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, P_ButtonHandle)
GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID) = P_ButtonHandle
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Reset <<<<<
Macro ResetColor(ColorA)
ClearStructure(ColorA, Color)
EndMacro
Macro ResetColorSpectrum(ColorSpectrumA)
SetColorSpectrumBackgroundLayer(ColorSpectrumA, 0)
SetColorSpectrumSpectrumCanvas(ColorSpectrumA, 0)
SetColorSpectrumLightnessCanvas(ColorSpectrumA, 0)
SetColorSpectrumWindowHandle(ColorSpectrumA, 0)
For TextID = 0 To 9
SetColorSpectrumText(ColorSpectrumA, TextID, "")
Next
For TextHandleID = 0 To 6
SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, 0)
Next
For StringHandleID = 0 To 5
SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumHSLRGB(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumSafeHSLRGB(ColorSpectrumA, StringHandleID, 0)
Next
For ButtonHandleID = 0 To 2
SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, 0)
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs spéciaux <<<<<
Macro GetColorSpectrumHue(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
EndMacro
Macro GetColorSpectrumLightness(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
EndMacro
Macro GetColorSpectrumSaturation(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
EndMacro
Macro GetColorSpectrumRed(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
EndMacro
Macro GetColorSpectrumGreen(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
EndMacro
Macro GetColorSpectrumBlue(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
EndMacro
Macro GetColorSpectrumSafeHue(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
EndMacro
Macro GetColorSpectrumSafeLightness(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
EndMacro
Macro GetColorSpectrumSafeSaturation(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
EndMacro
Macro GetColorSpectrumSafeRed(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
EndMacro
Macro GetColorSpectrumSafeGreen(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
EndMacro
Macro GetColorSpectrumSafeBlue(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetColorSpectrumHue(ColorSpectrumA, P_Hue)
GetColorSpectrumHue(ColorSpectrumA) = P_Hue
EndMacro
Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
EndMacro
Macro SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
EndMacro
Macro SetColorSpectrumRed(ColorSpectrumA, P_Red)
GetColorSpectrumRed(ColorSpectrumA) = P_Red
EndMacro
Macro SetColorSpectrumGreen(ColorSpectrumA, P_Green)
GetColorSpectrumGreen(ColorSpectrumA) = P_Green
EndMacro
Macro SetColorSpectrumBlue(ColorSpectrumA, P_Blue)
GetColorSpectrumBlue(ColorSpectrumA) = P_Blue
EndMacro
Macro SetColorSpectrumSafeHue(ColorSpectrumA, P_SafeHue)
GetColorSpectrumSafeHue(ColorSpectrumA) = P_SafeHue
EndMacro
Macro SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
EndMacro
Macro SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
EndMacro
Macro SetColorSpectrumSafeRed(ColorSpectrumA, P_SafeRed)
GetColorSpectrumSafeRed(ColorSpectrumA) = P_SafeRed
EndMacro
Macro SetColorSpectrumSafeGreen(ColorSpectrumA, P_SafeGreen)
GetColorSpectrumSafeGreen(ColorSpectrumA) = P_SafeGreen
EndMacro
Macro SetColorSpectrumSafeBlue(ColorSpectrumA, P_SafeBlue)
GetColorSpectrumSafeBlue(ColorSpectrumA) = P_SafeBlue
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Update <<<<<
Macro UpdateColorRGB(ColorA, P_Red, P_Green, P_Blue)
SetColorRed(ColorA, P_Red)
SetColorGreen(ColorA, P_Green)
SetColorBlue(ColorA, P_Blue)
EndMacro
Macro UpdateColorHSL(ColorA, P_Hue, P_Saturation, P_Lightness)
SetColorHue(ColorA, P_Hue)
SetColorSaturation(ColorA, P_Saturation)
SetColorLightness(ColorA, P_Lightness)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs de Formatage <<<<<
Macro FormatColorSpectrumRGB(ColorSpectrumA)
"RGB(" + Str(GetColorSpectrumRed(ColorSpectrumA)) + ", " + Str(GetColorSpectrumGreen(ColorSpectrumA)) + ", " + Str(GetColorSpectrumBlue(ColorSpectrumA)) + ")"
EndMacro
Macro FormatColorSpectrumHSL(ColorSpectrumA)
"HSL(" + Str(GetColorSpectrumHue(ColorSpectrumA)) + ", " + Str(GetColorSpectrumSaturation(ColorSpectrumA)) + ", " + Str(GetColorSpectrumLightness(ColorSpectrumA)) + ")"
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion vers couleur entier long <<<<<
Macro ColorSpectrum_RGB(ColorSpectrumA)
(GetColorSpectrumBlue(ColorSpectrumA) << 16 + GetColorSpectrumGreen(ColorSpectrumA) << 8 + GetColorSpectrumRed(ColorSpectrumA))
EndMacro
Macro Color_RGB(ColorA)
(GetColorBlue(ColorA) << 16 + GetColorGreen(ColorA) << 8 + GetColorRed(ColorA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Min et Max de 3 nombres <<<<<
Macro MinMaxNumber(P_Min, P_Max, P_Number01, P_Number02, P_Number03)
P_Min = P_Number01
If P_Number02 < P_Min
P_Min = P_Number02
EndIf
If P_Number03 < P_Min
P_Min = P_Number03
EndIf
P_Max = P_Number01
If P_Number02 > P_Max
P_Max = P_Number02
EndIf
If P_Number03 > P_Max
P_Max = P_Number03
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<
Procedure InitializeColorSpectrum(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE, "Teinte")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS, "Luminosité")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION, "Saturation")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED, "Rouge")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN, "Vert")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE, "Bleu")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_WIN_TITLE, "Spectre de couleurs")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_REFRESH, "Rafraichir")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_VALIDATE, "Valider")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_CANCEL, "Annuler")
EndProcedure
Procedure GetWindowBackgroundColor()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
BackgroundColor.l = GetSysColor_(#COLOR_3DFACE)
CompilerCase #PB_OS_Linux
BackgroundColor.l = RGB(237,235,236)
CompilerCase #PB_OS_MacOS
BackgroundColor.l = RGB(237,235,236)
CompilerEndSelect
ProcedureReturn BackgroundColor
EndProcedure
Procedure.l Private_ConvertRM(M1.f, M2.f, HueColor.f)
; ROUTINE DE CALCUL DE LA COMPOSANTE DE COULEUR.
If HueColor > 360
HueColor - 360
EndIf
If HueColor < 0
HueColor + 360
EndIf
If HueColor < 60
M1 = M1 + (M2 - M1) * HueColor / 60
Else
If HueColor < 180
M1 = M2
Else
If HueColor < 240
M1 = M1 + (M2 - M1) * (240 - HueColor) / 60
EndIf
EndIf
EndIf
ProcedureReturn M1 * 255
EndProcedure
Procedure Convert_RGB_To_HSL(*RGBColorA.Color, *HSLColorA.Color)
; ROUTINE DE CONSERTION DU RGB EN HLS.
MinMaxNumber(Min.l, Max.l, GetColorRed(*RGBColorA), GetColorGreen(*RGBColorA), GetColorBlue(*RGBColorA))
DeltaMaxMin.l = Max - Min
SumMaxMin.l = Max + Min
LightnessColor.f = SumMaxMin / 510
If Max = Min
HueColor.f = 0
SaturationColor.f = 0
Else
NormalizedRed = (Max - GetColorRed(*RGBColorA)) / DeltaMaxMin
NormalizedGreen = (Max - GetColorGreen(*RGBColorA)) / DeltaMaxMin
NormalizedBlue = (Max - GetColorBlue(*RGBColorA)) / DeltaMaxMin
If LightnessColor <= 0.5
SaturationColor = DeltaMaxMin / SumMaxMin
Else
SaturationColor = DeltaMaxMin / (510 - SumMaxMin)
EndIf
If GetColorRed(*RGBColorA) = Max
HueColor = 60 * (6 + NormalizedBlue - NormalizedGreen)
EndIf
If GetColorGreen(*RGBColorA) = Max
HueColor = 60 * (2 + NormalizedRed - NormalizedBlue)
EndIf
If GetColorBlue(*RGBColorA) = Max
HueColor = 60 * (4 + NormalizedGreen - NormalizedRed)
EndIf
EndIf
If HueColor = 360
HueColor = 0
EndIf
HueColor = HueColor / 360 * #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor * #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor * #COLOR_SPECTRUM_SIZE_MAX
SetColorHue(*HSLColorA, Int(HueColor))
SetColorSaturation(*HSLColorA, Int(SaturationColor))
SetColorLightness(*HSLColorA, Int(LightnessColor))
EndProcedure
Procedure Convert_HSL_To_RGB(HueColor.f, LightnessColor.f, SaturationColor.f, *RGBColorA.Color)
; ROUTINE DE CONSERTION DU HSL EN RGB.
HueColor = HueColor * 360 / #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor / #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor / #COLOR_SPECTRUM_SIZE_MAX
If SaturationColor = 0.0
SetColorRed(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorGreen(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorBlue(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
Else
If LightnessColor <= 0.5
M2.f = LightnessColor + LightnessColor * SaturationColor
Else
M2 = LightnessColor + SaturationColor - LightnessColor * SaturationColor
EndIf
M1.f = 2 * LightnessColor - M2
SetColorRed(*RGBColorA, Private_ConvertRm(M1, M2, HueColor + 120))
SetColorGreen(*RGBColorA, Private_ConvertRm(M1, M2, HueColor))
SetColorBlue(*RGBColorA, Private_ConvertRm(M1, M2, HueColor - 120))
EndIf
EndProcedure
Procedure GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
SetColorSpectrumBackgroundLayer(*ColorSpectrumA, CreateImage(#PB_Any, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
If StartDrawing(ImageOutput(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)))
Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For SaturationID = 1 To #COLOR_SPECTRUM_SIZE_MAX
For HueID = 1 To #COLOR_SPECTRUM_SIZE_MAX
Convert_HSL_To_RGB(HueID, #COLOR_SPECTRUM_SIZE_MAX / 2, SaturationID, RGBColor.Color)
Plot(HueID, (#COLOR_SPECTRUM_SIZE_MAX - SaturationID) + 1, Color_RGB(RGBColor))
Next
Next
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure ColorSpectrum_DrawCross(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA CROIX DU SPECTRE.
PosX = GetColorSpectrumHue(*ColorSpectrumA)
PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumSaturation(*ColorSpectrumA)
If PosX < #COLOR_SPECTRUM_SIZE_MAX
PosX + 1
EndIf
If PosY < #COLOR_SPECTRUM_SIZE_MAX
PosY + 1
EndIf
Box(PosX - 1, PosY - 9, 3, 5, 0)
Box(PosX - 1, PosY + 5, 3, 5, 0)
Box(PosX - 9, PosY - 1, 5, 3, 0)
Box(PosX + 5, PosY - 1, 5, 3, 0)
EndProcedure
Procedure ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA BARRE DE LIGHTNESS
PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
If PosY => #COLOR_SPECTRUM_SIZE_MAX
PosY = #COLOR_SPECTRUM_SIZE_MAX - 1
EndIf
; Box(22, PosY, 8, 3, 0)
x1 = 22
x2 = 33
y2 = PosY + 5
y3 = PosY - 5
xm = (x1 + x2) >> 1
LineXY(x1, PosY, x2, y2, 0)
LineXY(x2, y2, x2, y3, 0)
LineXY(x2, y3, x1, PosY, 0)
FillArea(xm, PosY, 0, 0);$FFFFFF)
EndProcedure
Procedure ColorSpectrum_SpectrumRedraw(*ColorSpectrumA.ColorSpectrum)
; ROUTINE D'AFFICHAGE DU SPECTRE ET CROIX.
If StartDrawing(CanvasOutput(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)))
If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
DrawImage(ImageID(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)), 0, 0)
EndIf
ColorSpectrum_DrawCross(*ColorSpectrumA)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
StopDrawing()
SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
EndIf
EndProcedure
Procedure ColorSpectrum_LightnessRedraw(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
If StartDrawing(CanvasOutput(GetColorSpectrumLightnessCanvas(*ColorSpectrumA)))
CurrentLightness = GetColorSpectrumLightness(*ColorSpectrumA)
Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, GetWindowBackgroundColor()); $FFFFFF)
Box(0, 0, 20, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For LightnessID = 1 To #COLOR_SPECTRUM_SIZE_MAX
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), LightnessID, GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
LineXY(1, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, 18, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, Color_RGB(RGBColor))
Next
SetColorSpectrumLightness(*ColorSpectrumA, CurrentLightness)
ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, Color_RGB(RGBColor))
StopDrawing()
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Free Gadgets <<<<<
Procedure FreeColorSpectrumGadget(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumRed(*ColorSpectrumA, 0)
SetColorSpectrumGreen(*ColorSpectrumA, 0)
SetColorSpectrumBlue(*ColorSpectrumA, 0)
For Index = 0 To 2
FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index))
FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index+3))
FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index))
FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index+3))
FreeGadget(GetColorSpectrumButtonHandle(*ColorSpectrumA, Index))
Next
FreeGadget(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA))
FreeGadget(GetColorSpectrumLightnessCanvas(*ColorSpectrumA))
FreeImage(GetColorSpectrumBackgroundLayer(*ColorSpectrumA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshHSLColorOutput <<<<<
Procedure RefreshHSLColorOutput(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_LIGHTNESS
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshRGBColorOutput <<<<<
Procedure RefreshRGBColorOutput(*ColorSpectrumA.ColorSpectrum)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
SetColorSpectrumRed(*ColorSpectrumA, GetColorRed(RGBColor))
SetColorSpectrumGreen(*ColorSpectrumA, GetColorGreen(RGBColor))
SetColorSpectrumBlue(*ColorSpectrumA, GetColorBlue(RGBColor))
For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchRGBColorInput <<<<<
Procedure CatchRGBColorInput(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
Next
SetColorRed(RGBColor.Color, GetColorSpectrumRed(*ColorSpectrumA))
SetColorGreen(RGBColor, GetColorSpectrumGreen(*ColorSpectrumA))
SetColorBlue(RGBColor, GetColorSpectrumBlue(*ColorSpectrumA))
Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchSafeHSLRGB <<<<<
Procedure CatchSafeHSLRGB(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<
Procedure RefeshColorSpectrum(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumRed(*ColorSpectrumA, 0)
SetColorSpectrumGreen(*ColorSpectrumA, 0)
SetColorSpectrumBlue(*ColorSpectrumA, 0)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<
Procedure ForceColorSpectrumStartColor(*ColorSpectrumA.ColorSpectrum, Color.l)
If Color <> - 1
SetColorSpectrumRed(*ColorSpectrumA, Red(Color))
SetColorSpectrumGreen(*ColorSpectrumA, Green(Color))
SetColorSpectrumBlue(*ColorSpectrumA, Blue(Color))
For Index = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, Index)))
Next
CatchRGBColorInput(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
Else
RefreshRGBColorOutput(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_SpectrumCanvas_EventManager <<<<<
Procedure ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown Or ( EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
MouseX.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseX)
MouseY.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
If MouseX < 0
MouseX = 0
Else
If MouseX > #COLOR_SPECTRUM_SIZE_MAX
MouseX = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
If MouseY < 0
MouseY = 0
Else
If MouseY > #COLOR_SPECTRUM_SIZE_MAX
MouseY = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
SetColorSpectrumHue(*ColorSpectrumA, MouseX)
SetColorSpectrumSaturation(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_LightnessCanvas_EventManager <<<<<
Procedure ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown Or (EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
MouseY.l = GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
If MouseY < 0
MouseY = 0
Else
If MouseY > #COLOR_SPECTRUM_SIZE_MAX
MouseY = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
SetColorSpectrumLightness(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Hue Input Control <<<<<
Procedure ColorSpectrum_Input_Control(*ColorSpectrumA.ColorSpectrum, Target.b)
EventType = EventType()
If EventType = #PB_EventType_Change
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target))))
If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) < 0
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 0)
EndIf
If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) > 255
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 255)
EndIf
Select Target
Case #COLOR_SPECTRUM_TARGET_HUE, #COLOR_SPECTRUM_TARGET_LIGHTNESS, #COLOR_SPECTRUM_TARGET_SATURATION
SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
Case #COLOR_SPECTRUM_TARGET_RED, #COLOR_SPECTRUM_TARGET_GREEN, #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
SetColorRed(RGBColor.Color, GetColorSpectrumSafeRed(*ColorSpectrumA))
SetColorGreen(RGBColor, GetColorSpectrumSafeGreen(*ColorSpectrumA))
SetColorBlue(RGBColor, GetColorSpectrumSafeBlue(*ColorSpectrumA))
Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
EndSelect
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
ElseIf EventType = #PB_EventType_LostFocus
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target), Str(GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrumRequester <<<<<
Procedure.l ColorSpectrumRequester(*ColorSpectrumA.ColorSpectrum, Color.l = -1)
SetColorSpectrumWindowHandle(*ColorSpectrumA, OpenWindow(#PB_Any, 0, 0, #COLOR_SPECTRUM_SIZE_MAX + 60, #COLOR_SPECTRUM_SIZE_MAX + 140, GetColorSpectrumText(*ColorSpectrumA, 06), #PB_Window_SystemMenu | #PB_Window_ScreenCentered))
If GetColorSpectrumWindowHandle(*ColorSpectrumA) <> #Null
SetColorSpectrumSpectrumCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 5, 5, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumLightnessCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 270, 5, 35, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumTextHandle(*ColorSpectrumA, 6, TextGadget(#PB_Any, 5, 270, 80, 84, "", #PB_Text_Border))
PosX = 5
PosY = 270
For Index = 0 To 2
SetColorSpectrumTextHandle(*ColorSpectrumA, Index, TextGadget(#PB_Any, 110, PosY, 70, 25, GetColorSpectrumText(*ColorSpectrumA, Index), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index, StringGadget(#PB_Any, 185, PosY, 33, 25, ""))
SetColorSpectrumTextHandle(*ColorSpectrumA, Index + 3, TextGadget(#PB_Any, 225, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + 3), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index + 3, StringGadget(#PB_Any, 275, PosY, 33, 25, ""))
SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 360, 98, 30, GetColorSpectrumText(*ColorSpectrumA, Index + 7)))
PosX + 103
PosY + 30
Next
GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
ForceColorSpectrumStartColor(*ColorSpectrumA, Color)
CatchSafeHSLRGB(*ColorSpectrumA)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
ReturnSelectedColor.l = -1
Repeat
EventID = WaitWindowEvent(20)
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)
ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA)
Case GetColorSpectrumLightnessCanvas(*ColorSpectrumA)
ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 0)
RefeshColorSpectrum(*ColorSpectrumA)
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 1)
ReturnSelectedColor = ColorSpectrum_RGB(*ColorSpectrumA)
EventID = #PB_Event_CloseWindow
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 2)
EventID = #PB_Event_CloseWindow
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
FreeColorSpectrumGadget(*ColorSpectrumA)
CloseWindow(GetColorSpectrumWindowHandle(*ColorSpectrumA))
EndIf
ProcedureReturn ReturnSelectedColor
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
InitializeColorSpectrum(ColorSpectrum.ColorSpectrum)
Color.l = ColorSpectrumRequester(ColorSpectrum, RGB(31, 196, 243))
If Color <> -1
Debug "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color)) + ", " + Str(Blue(Color)) + ")"
Else
Debug "L'utilisateur à annuler la sélection de la couleur"
EndIf
ResetColorSpectrum(ColorSpectrum)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
que j'utilise dans EPBLe Soldat Inconnu a écrit : mon sélecteur de couleur,
/
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".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 canvasgadgetssé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
Juste pour visualiser ça sera suffisantGuimauve a écrit :Juste pour visualiser ou pour entrer une valeur en Hexadécimal ?Ar-S a écrit :Merci guimauve.
Pour qu'il soit parfait, l'ajout de la valeur hex serait pratique (comme dans photoshop)
A+
Guimauve