Hello All,
here is the version I'm using now (sorry for my bad English).
Code:
; +======================================================+
; | |
; +------------------------------------------------------+
; | COPYRIGHT(C)2017-2018, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 5.62 (MODULE) |
; +--------------+---------------------------------------+
; | VER & REV | 0.0.4 |
; +--------------+---------------------------------------+
; | Program name | |
; +======================================================+
; +======================================================+
; | Original Version: 0.0.4 |
; +--------------+---------------------------------------+
; | Created by | GallyHomeCorp |
; | Graphix by | GallyHomeCorp |
; +--------------+---------------------------------------+
; | Comments: | |
; +--------------+ |
; | |
; | |
; | |
; +======================================================+
; +======================================================+
; | Système d'Exploitation |
; +--------------+---------------------------------------+
; | Window | Oui |
; | Linux | Oui |
; | MacOS | Oui |
; +======================================================+
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
;- INITIALISATION DES DIRECTIVES DU COMPILEUR.
DisableASM
CompilerIf #PB_Compiler_EnableExplicit
EnableExplicit
CompilerEndIf
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
#PB_Event_CustomGadget_Color = #PB_Event_FirstCustomValue + 102
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
DeclareModule ColorSelector
;
DisableASM
CompilerIf #PB_Compiler_EnableExplicit
EnableExplicit
CompilerEndIf
;
;- DECLARATION PUBLIQUES DU MODULE.
;
CompilerIf Defined(PB_Event_CustomGadget_Color, #PB_Constant) = #False
#PB_Event_CustomGadget_Color = #PB_Event_FirstCustomValue + 102
CompilerEndIf
;
CompilerIf Defined(_CONVERTRM, #PB_Procedure) = #False
Declare.l _CONVERTRM(fM1.f, fM2.f, fCH.f)
CompilerEndIf
CompilerIf Defined(_RGB_TO_HSL, #PB_Procedure) = #False
Declare.l _RGB_TO_HSL(red.a, green.a, blue.a, alpha=0)
CompilerEndIf
CompilerIf Defined(_HSL_TO_RGB, #PB_Procedure) = #False
Declare _HSL_TO_RGB(fCH.f, fCL.f, fCS.f, *bCR, *bCG, *bCB)
CompilerEndIf
;
Declare _CreateGadget (gadget.i, x.l, y.l)
Declare _GetGadgetState (gadget.i)
Declare _SetGadgetState (gadget.i, color.i)
Declare _GetGadgetData (gadget.i, colortype.s)
Declare _SetGadgetData (gadget.i, colortype.s, value.l)
Declare _DisableGadget (gadget.i, stat.b)
Declare _HideGadget (gadget.i, stat.b)
Declare _FreeGadget (gadget.i)
Declare _GetGadgetBackColor (gadget.i)
Declare _SetGadgetBackColor (gadget.i, color.i)
EndDeclareModule
;
;
;
Module ColorSelector
;
DisableASM
CompilerIf #PB_Compiler_EnableExplicit
EnableExplicit
CompilerEndIf
;
;- DECLARATION PRIVES DU MODULE.
;
#COLOR_SELECTOR_SIZE_MAX = 256
#COLOR_SELECTOR_LIGHT_PX = 263
#COLOR_SELECTOR_LIGHT_PY = 31
;
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
Structure point
x.l
y.l
EndStructure
CompilerEndIf
CompilerIf Defined(_WINDOW_BACKGROUND, #PB_Procedure) = #False
Procedure _WINDOW_BACKGROUND(hwnd.i = 0)
;
; http://www.purebasic.fr/english/viewtopic.php?p=472982#p472982
;
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
;
Protected color = GetSysColor_(#COLOR_WINDOW)
If color = $FFFFFF Or color=0
color = GetSysColor_(#COLOR_BTNFACE)
EndIf
ProcedureReturn color
;
CompilerCase #PB_OS_Linux
;
Protected *style.GtkStyle, *color.GdkColor
*style = gtk_widget_get_style_(hwnd)
*color = *style\bg[0]
ProcedureReturn RGB(*color\red >> 8, *color\green >> 8, *color\blue >> 8)
;
CompilerCase #PB_OS_MacOS
;
Protected.i color, Rect.NSRect, Image
Protected.i NSColor = CocoaMessage(#Null, #Null, "NSColor windowBackgroundColor")
If NSColor
Rect\size\width = 1
Rect\size\height = 1
Image = CreateImage(#PB_Any, 1, 1)
StartDrawing(ImageOutput(Image))
CocoaMessage(#Null, NSColor, "drawSwatchInRect:@", @Rect)
color = Point(0, 0)
StopDrawing()
FreeImage(Image)
ProcedureReturn color
Else
ProcedureReturn -1
EndIf
;
CompilerEndSelect
EndProcedure
CompilerEndIf
Structure _STRUTURE_COLORSELECT
window.i
gadget.i
gadgetid.i
x.l
y.l
position.point
state.l
bordercolor.i
background.i
disable.b
actived.b
hide.b
bCH.l
bCS.l
bCL.l
bCY.l
iImage.i
;
lchannel_r.l
lchannel_g.l
lchannel_b.l
EndStructure
Global.i iimage_selectcolor
Global.i iimage_selectcross
Global.i iimage_selectarrow
Global NewMap _CREATE_COLORSELECT._STRUTURE_COLORSELECT()
;
;-
;
Procedure.l _CONVERTRM(fM1.f, fM2.f, fCH.f)
;
;
;
If fCH > 360
fCH - 360
ElseIf fCH < 0
fCH + 360
EndIf
;
If fCH < 60
fM1 = fM1 + (fM2 - fM1) * fCH / 60
ElseIf fCH < 180
fM1 = fM2
ElseIf fCH < 240
fM1 = fM1 + (fM2 - fM1) * (240 - fCH) / 60
EndIf
;
;
;
ProcedureReturn fM1 * (#COLOR_SELECTOR_SIZE_MAX - 1)
EndProcedure
;
;-
;
Procedure.l _RGB_TO_HSL(red.a, green.a, blue.a, alpha=0)
;
;
;
Protected.f r = red / 255
Protected.f g = green / 255
Protected.f b = blue / 255
Protected.f cmax, cmin, h_, c, m, h, s, l
Protected.l imax, imin
;
If r>=g And r>=b
imax=1
cmax=r
EndIf
If g>=r And g>=b
imax=2
cmax=g
EndIf
If b>=r And b>=g
imax=3
cmax=b
EndIf
If r<=g And r<=b
imin=1
cmin=r
EndIf
If g<=r And g<=b
imin=2
cmin=g
EndIf
If b<=r And b<=g
imin=3
cmin=b
EndIf
c=cmax-cmin
Select imax
Case 1
h_ = Mod((g - b) / c + 6, 6)
Case 2
h_ = (b - r) / c + 2
Case 3
h_ = (r - g) / c + 4
EndSelect
h = h_ / 6
l = (cmax + cmin) / 2
If l <> 1
s = c / (1 - Abs(2 * l - 1))
Else
s=0
EndIf
ProcedureReturn RGB(h * 255, s * 255, l *255)
EndProcedure
;
Procedure _HSL_TO_RGB(fCH.f, fCL.f, fCS.f, *bCR, *bCG, *bCB)
;
; ROUTINE DE CONSERTION DU HLS EN RGB.
;
Protected.f fM1, fM2
;
fCH = fCH * 360 / (#COLOR_SELECTOR_SIZE_MAX - 1)
fCL = fCL / #COLOR_SELECTOR_SIZE_MAX
fCS = fCS / (#COLOR_SELECTOR_SIZE_MAX - 1)
If fCL < 0.5
fM2 = fCL + fCL * fCS
Else
fM2 = fCL + fCS - fCL * fCS
EndIf
fM1 = 2 * fCL - fM2
;
;
;
If fCS = 0
PokeL(*bCR, fCL * 255)
PokeL(*bCG, fCL * 255)
PokeL(*bCB, fCL * 255)
Else
PokeL(*bCR, _CONVERTRM(fM1, fM2, fCH + 120))
PokeL(*bCG, _CONVERTRM(fM1, fM2, fCH ))
PokeL(*bCB, _CONVERTRM(fM1, fM2, fCH - 120))
EndIf
EndProcedure
;
;-
;
Procedure CUSTUMGadget_ColorCross(lX.l, lY.l)
;
; ROUTINE DE TRACAGE DE LA CROIX DU PAN/TILT.
;
If IsImage(iimage_selectcross) = 0
iimage_selectcross = CreateImage(#PB_Any, (lX * 2) + 1, (lY * 2) + 1, 32, #PB_Image_Transparent)
If IsImage(iimage_selectcross)
If StartDrawing(ImageOutput(iimage_selectcross))
DrawingMode(#PB_2DDrawing_AllChannels)
Box(lX - 1, lY - 9, 3, 5, $FF010101)
Box(lX - 1, lY + 5, 3, 5, $FF010101)
Box(lX - 9, lY - 1, 5, 3, $FF010101)
Box(lX + 5, lY - 1, 5, 3, $FF010101)
Box(lX - 3, lY - 3, 7, 7, $FF010101)
Box(lX - 1, lY - 1, 3, 3, $000000FF)
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
Procedure CUSTUMGadget_ColorArrow(lX.l, lY.l)
;
;
;
If IsImage(iimage_selectarrow) = 0
iimage_selectarrow = CreateImage(#PB_Any, 6, 11, 32, #PB_Image_Transparent)
If IsImage(iimage_selectarrow)
If StartDrawing(ImageOutput(iimage_selectarrow))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box ( 0, 0, 6, 11, RGBA(255, 255, 255, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Line(lX, lY, 5, -5, $FF444444)
Line(lX, lY, 5, 5, $FF444444)
LineXY(lX + 5, lY - 5, lX + 5, lY + 5, $FF444444)
FillArea(lX + 2, lY, $FF444444, $FF444444)
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
Procedure CUSTUMGadget_ColorBox()
;
; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
;
Protected.l lH, lS
Protected.l bCR, bCG, bCB
If IsImage(iimage_selectcolor) = 0
iimage_selectcolor = CreateImage(#PB_Any, #COLOR_SELECTOR_SIZE_MAX + 2, #COLOR_SELECTOR_SIZE_MAX + 2, 24, $0)
If IsImage(iimage_selectcolor)
If StartDrawing(ImageOutput(iimage_selectcolor))
For lS = 1 To #COLOR_SELECTOR_SIZE_MAX
For lH = 1 To #COLOR_SELECTOR_SIZE_MAX
_HSL_TO_RGB (lH - 1, (#COLOR_SELECTOR_SIZE_MAX - 1) / 2, lS, @bCR, @bCG, @bCB)
Plot(lH, (#COLOR_SELECTOR_SIZE_MAX - lS) + 1, RGB(bCR, bCG, bCB))
Next lH
Next lS
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
Procedure CUSTUMGadget_DrawColorLight(gadget.i)
;
; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
;
Protected.l j, bCR, bCG, bCB
Protected.f fpas = 255 / 216
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
If IsImage(_CREATE_COLORSELECT()\iImage)
FreeImage(_CREATE_COLORSELECT()\iImage)
EndIf
_CREATE_COLORSELECT()\iImage = CreateImage(#PB_Any, 27, #COLOR_SELECTOR_SIZE_MAX - 27)
If IsImage(_CREATE_COLORSELECT()\iImage)
If StartDrawing(ImageOutput(_CREATE_COLORSELECT()\iImage))
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, 27, #COLOR_SELECTOR_SIZE_MAX - 27, _CREATE_COLORSELECT()\background)
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 4, 19, #COLOR_SELECTOR_SIZE_MAX - 37 , _CREATE_COLORSELECT()\bordercolor)
;
For j = 0 To #COLOR_SELECTOR_SIZE_MAX - 40
_HSL_TO_RGB(_CREATE_COLORSELECT()\bCH, j * fpas, _CREATE_COLORSELECT()\bCS, @bCR, @bCG, @bCB)
LineXY(1, (#COLOR_SELECTOR_SIZE_MAX - 40 + 5) - j, 17, (#COLOR_SELECTOR_SIZE_MAX - 40 + 5) - j, RGB(bCR, bCG, bCB))
Next j
;
DrawingMode(#PB_2DDrawing_Default)
LineXY(19, 5, 22, 5, _CREATE_COLORSELECT()\bordercolor)
LineXY(19, 221, 22, 221, _CREATE_COLORSELECT()\bordercolor)
LineXY(19, ((#COLOR_SELECTOR_SIZE_MAX - 27) / 2) - 1, 22, ((#COLOR_SELECTOR_SIZE_MAX - 27) / 2) - 1, _CREATE_COLORSELECT()\bordercolor)
;
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
Procedure CUSTUMGadget_DrawColorselect(gadget.i)
;
; ROUTINE DE TRACAGE DU .
;
Protected.l iCR, iCG, iCB
Protected.l x, y, j
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
_HSL_TO_RGB (_CREATE_COLORSELECT()\bCH, _CREATE_COLORSELECT()\bCL, _CREATE_COLORSELECT()\bCS, @iCR, @iCG, @iCB)
;
If _CREATE_COLORSELECT()\actived = #True And IsGadget(_CREATE_COLORSELECT()\gadget)
If StartDrawing(CanvasOutput(_CREATE_COLORSELECT()\gadget))
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, 290, 258, _CREATE_COLORSELECT()\background)
;
If IsImage(iimage_selectcolor)
DrawImage(ImageID(iimage_selectcolor), 0, 0)
EndIf
If IsImage(iimage_selectcross)
DrawAlphaImage(ImageID(iimage_selectcross), _CREATE_COLORSELECT()\position\x - 9, _CREATE_COLORSELECT()\position\y - 9)
EndIf
Box(258, 0, 290, 258, _CREATE_COLORSELECT()\background)
;
Box(262, 0, 28, 28, _CREATE_COLORSELECT()\bordercolor)
Box(263, 1, 26, 26, RGB(iCR, iCG, iCB))
If IsImage(_CREATE_COLORSELECT()\iImage)
DrawImage(ImageID(_CREATE_COLORSELECT()\iImage), #COLOR_SELECTOR_LIGHT_PX, #COLOR_SELECTOR_LIGHT_PY)
EndIf
If IsImage(iimage_selectarrow)
DrawAlphaImage(ImageID(iimage_selectarrow), #COLOR_SELECTOR_LIGHT_PX + 21, #COLOR_SELECTOR_LIGHT_PY + _CREATE_COLORSELECT()\bCY - 5)
EndIf
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, #COLOR_SELECTOR_SIZE_MAX + 2, #COLOR_SELECTOR_SIZE_MAX + 2, $606060)
;
If _CREATE_COLORSELECT()\disable = #True
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0, 0, 290, 258, RGBA(Red(_CREATE_COLORSELECT()\background), Green(_CREATE_COLORSELECT()\background), Blue(_CREATE_COLORSELECT()\background), 144))
EndIf
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
;
;-
;
Procedure _OnEvent_SCANBORDERS(lvalue.l, lmin.l, lmax.l)
;
;
;
If lvalue < lmin
lvalue = lmin
ElseIf lvalue > lmax
lvalue = lmax
EndIf
;
ProcedureReturn lvalue
EndProcedure
;
Procedure _OnEvent_CUSTUMCOLOR()
;
;
;
Protected.i event = EventType ()
Protected.i gadget = EventGadget()
Protected.i _SAV_MOUSE_X, _SAV_MOUSE_Y
Static.b _SAV_MOUSE_CLIC, _SAV_CAPTURE
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
If GetGadgetAttribute(gadget, #PB_Canvas_WheelDelta)
;
If _CREATE_COLORSELECT()\disable = #False
_CREATE_COLORSELECT()\bCL + GetGadgetAttribute(gadget, #PB_Canvas_WheelDelta)
_CREATE_COLORSELECT()\bCL = _OnEvent_SCANBORDERS(_CREATE_COLORSELECT()\bCL, 0, #COLOR_SELECTOR_SIZE_MAX)
_CREATE_COLORSELECT()\bCY = 221 - Round(_CREATE_COLORSELECT()\bCL / (256 / 216), #PB_Round_Up)
;
PostEvent(#PB_Event_CustomGadget_Color, _CREATE_COLORSELECT()\window, _CREATE_COLORSELECT()\gadget)
CUSTUMGadget_DrawColorselect(_CREATE_COLORSELECT()\gadget)
;
ProcedureReturn
EndIf
;
EndIf
If event = #PB_EventType_LeftButtonDown Or (event = #PB_EventType_MouseMove And GetGadgetAttribute(gadget, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton) And _SAV_CAPTURE = #True
_SAV_CAPTURE = #True
;
_SAV_MOUSE_X = GetGadgetAttribute(gadget, #PB_Canvas_MouseX)
_SAV_MOUSE_Y = GetGadgetAttribute(gadget, #PB_Canvas_MouseY)
;
If _SAV_MOUSE_CLIC = 0
If _SAV_MOUSE_X >= 0 And _SAV_MOUSE_Y >= 0 And _SAV_MOUSE_X <= #COLOR_SELECTOR_SIZE_MAX And _SAV_MOUSE_Y <= #COLOR_SELECTOR_SIZE_MAX
_SAV_MOUSE_CLIC = 1
EndIf
If _SAV_MOUSE_X >= #COLOR_SELECTOR_LIGHT_PX And _SAV_MOUSE_Y >= #COLOR_SELECTOR_LIGHT_PY And _SAV_MOUSE_X <= #COLOR_SELECTOR_LIGHT_PX + 17 And _SAV_MOUSE_Y <= #COLOR_SELECTOR_LIGHT_PY + (#COLOR_SELECTOR_SIZE_MAX - 27)
_SAV_MOUSE_CLIC = 2
EndIf
EndIf
;
If _SAV_MOUSE_CLIC <> 0
If _CREATE_COLORSELECT()\disable = #False
If _SAV_MOUSE_CLIC = 1
_SAV_MOUSE_X = _OnEvent_SCANBORDERS(_SAV_MOUSE_X, 1, #COLOR_SELECTOR_SIZE_MAX)
_SAV_MOUSE_Y = _OnEvent_SCANBORDERS(_SAV_MOUSE_Y, 1, #COLOR_SELECTOR_SIZE_MAX)
;
_CREATE_COLORSELECT()\position\x = _SAV_MOUSE_X
_CREATE_COLORSELECT()\position\y = _SAV_MOUSE_Y
_CREATE_COLORSELECT()\bCH = _CREATE_COLORSELECT()\position\x - 1
_CREATE_COLORSELECT()\bCS = #COLOR_SELECTOR_SIZE_MAX - _CREATE_COLORSELECT()\position\y
;
CUSTUMGadget_DrawColorLight (_CREATE_COLORSELECT()\gadget)
EndIf
If _SAV_MOUSE_CLIC = 2
_SAV_MOUSE_Y = _OnEvent_SCANBORDERS(_SAV_MOUSE_Y, #COLOR_SELECTOR_LIGHT_PY + 5, #COLOR_SELECTOR_LIGHT_PY + (#COLOR_SELECTOR_SIZE_MAX - 35))
;
_CREATE_COLORSELECT()\bCY = (_SAV_MOUSE_Y - #COLOR_SELECTOR_LIGHT_PY)
_CREATE_COLORSELECT()\bCL = 256 - Int(((_SAV_MOUSE_Y - #COLOR_SELECTOR_LIGHT_PY) - 5) * (256 / 216))
EndIf
;
If _SAV_MOUSE_CLIC <> 0
PostEvent(#PB_Event_CustomGadget_Color, _CREATE_COLORSELECT()\window, _CREATE_COLORSELECT()\gadget)
EndIf
CUSTUMGadget_DrawColorselect(_CREATE_COLORSELECT()\gadget)
;
EndIf
EndIf
;
Else
If _SAV_MOUSE_CLIC <> 0
_SAV_MOUSE_CLIC = 0
EndIf
If event = #PB_EventType_MouseLeave
_SAV_CAPTURE = #False
EndIf
EndIf
EndIf
EndProcedure
;
;-
;
Procedure _CreateGadget(gadget.i, x.l, y.l)
;
;
;
Protected.i ivalue
;
;
;
If gadget = #PB_Any
gadget = CanvasGadget(#PB_Any, x, y, 290, 258, #PB_Container_BorderLess | #PB_Canvas_Keyboard)
ivalue = gadget
Else
ivalue = CanvasGadget(gadget, x, y, 290, 258, #PB_Container_BorderLess | #PB_Canvas_Keyboard)
EndIf
AddMapElement(_CREATE_COLORSELECT(), Str(gadget), #PB_Map_ElementCheck)
;
;
;
_CREATE_COLORSELECT()\window = GetActiveWindow()
_CREATE_COLORSELECT()\gadget = gadget
_CREATE_COLORSELECT()\gadgetid = ivalue
_CREATE_COLORSELECT()\x = x
_CREATE_COLORSELECT()\y = y
_CREATE_COLORSELECT()\position\x = _CREATE_COLORSELECT()\bCH + 1
_CREATE_COLORSELECT()\position\y = #COLOR_SELECTOR_SIZE_MAX - _CREATE_COLORSELECT()\bCS
_CREATE_COLORSELECT()\disable = #False
_CREATE_COLORSELECT()\actived = #True
_CREATE_COLORSELECT()\state = 2
;
_CREATE_COLORSELECT()\bordercolor = $505050
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
_CREATE_COLORSELECT()\background = _WINDOW_BACKGROUND(#Null)
CompilerElse
_CREATE_COLORSELECT()\background = _WINDOW_BACKGROUND(WindowID(_CREATE_COLORSELECT()\window))
CompilerEndIf
;
_CREATE_COLORSELECT()\bCH = 0
_CREATE_COLORSELECT()\bCS = 0
_CREATE_COLORSELECT()\bCL = 0
_CREATE_COLORSELECT()\bCY = 216 - Int(_CREATE_COLORSELECT()\bCL * (216 / 255)) + 5
;
;
;
CUSTUMGadget_DrawColorLight (_CREATE_COLORSELECT()\gadget)
CUSTUMGadget_DrawColorselect(_CREATE_COLORSELECT()\gadget)
;
BindGadgetEvent (_CREATE_COLORSELECT()\gadget, @_OnEvent_CUSTUMCOLOR(), #PB_All)
;
ProcedureReturn ivalue
EndProcedure
Procedure _GetGadgetState(gadget.i)
;
;
;
Protected.l iCR, iCG, iCB
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
_HSL_TO_RGB (_CREATE_COLORSELECT()\bCH, _CREATE_COLORSELECT()\bCL, _CREATE_COLORSELECT()\bCS, @iCR, @iCG, @iCB)
ProcedureReturn RGB(iCR, iCG, iCB)
EndIf
EndProcedure
Procedure _SetGadgetState(gadget.i, color.i)
;
;
;
EndProcedure
Procedure _GetGadgetBackColor(gadget.i)
;
;
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
ProcedureReturn _CREATE_COLORSELECT()\background
EndIf
EndProcedure
Procedure _SetGadgetBackColor(gadget.i, color.i)
;
;
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
_CREATE_COLORSELECT()\background = color
CUSTUMGadget_DrawColorLight (_CREATE_COLORSELECT()\gadget)
CUSTUMGadget_DrawColorselect(_CREATE_COLORSELECT()\gadget)
EndIf
EndProcedure
Procedure _GetGadgetData(gadget.i, colortype.s)
;
; ROUTINE DE RECUPERATION DU LA VALEUR DU SLIDER.
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
Select LCase(colortype)
Case "red"
ProcedureReturn _CREATE_COLORSELECT()\lchannel_r
Case "green"
ProcedureReturn _CREATE_COLORSELECT()\lchannel_g
Case "blue"
ProcedureReturn _CREATE_COLORSELECT()\lchannel_b
EndSelect
EndIf
EndProcedure
Procedure _SetGadgetData(gadget.i, colortype.s, value.l)
;
; ROUTINE DE CHANGEMENT DE LA VALEUR DU SLIDER.
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
Select LCase(colortype)
Case "red"
_CREATE_COLORSELECT()\lchannel_r = value
Case "green"
_CREATE_COLORSELECT()\lchannel_g = value
Case "blue"
_CREATE_COLORSELECT()\lchannel_b = value
EndSelect
EndIf
EndProcedure
Procedure _DisableGadget(gadget.i, value.b)
;
;
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
_CREATE_COLORSELECT()\disable = value
;
CUSTUMGadget_DrawColorselect(_CREATE_COLORSELECT()\gadget)
EndIf
EndProcedure
Procedure _HideGadget(gadget.i, value.b)
;
;
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
_CREATE_COLORSELECT()\hide = value
HideGadget(gadget, value)
EndIf
EndProcedure
Procedure _FreeGadget(gadget.i)
;
;
;
If FindMapElement(_CREATE_COLORSELECT(), Str(gadget)) <> #Null
UnbindGadgetEvent(_CREATE_COLORSELECT()\gadget, @_OnEvent_CUSTUMCOLOR())
;
FreeGadget(_CREATE_COLORSELECT()\gadget)
DeleteMapElement(_CREATE_COLORSELECT(), Str(gadget))
EndIf
EndProcedure
;
CUSTUMGadget_ColorBox ()
CUSTUMGadget_ColorArrow (0, 5)
CUSTUMGadget_ColorCross (9, 9)
EndModule
; ; ****************************************************************************
; ; ****************************************************************************
; ; ****************************************************************************
; ;-
; ;- ROUTINE DE TEST DES FONCTIONS (MODULE).
;
CompilerIf #PB_Compiler_IsMainFile = 1
Define.l event, i, j = 1
Define.b aa, ba, ab, bb
OpenWindow (0, 0, 0, 640, 425, "Custum Gadget", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
Define a = ColorSelector::_CreateGadget(#PB_Any, 10, 10)
Define b = ColorSelector::_CreateGadget(#PB_Any, 340, 10)
ButtonGadget(10, 10, 280, 150, 40, "hide Selector 1")
ButtonGadget(11, 10, 322, 150, 40, "hide Selector 2")
ButtonGadget(12, 162, 280, 150, 40, "Disable Selector 1")
ButtonGadget(13, 162, 322, 150, 40, "Disable Selector 2")
ButtonGadget(14, 314, 280, 150, 40, "Delete Selector 1")
ButtonGadget(15, 314, 322, 150, 40, "Delete Selector 2")
TextGadget (16, 10, 380, 400, 20, "COLOR: $0")
TextGadget (17, 10, 405, 400, 20, "COLOR: $0")
Repeat
event = WaitWindowEvent(10)
If event = #PB_Event_Gadget
Select EventGadget()
Case 10
aa ! 1
ColorSelector::_HideGadget(a, aa)
Case 11
ba ! 1
ColorSelector::_HideGadget(b, ba)
Case 12
ab ! 1
ColorSelector::_DisableGadget(a, ab)
Case 13
bb ! 1
ColorSelector::_DisableGadget(b, bb)
Case 14
ColorSelector::_FreeGadget(a)
Case 15
ColorSelector::_FreeGadget(b)
EndSelect
EndIf
If event = #PB_Event_CustomGadget_Color
Select EventGadget()
Case a
SetGadgetText(16, "COLOR: $" + Hex(ColorSelector::_GetGadgetState(a)))
Case b
SetGadgetText(17, "COLOR: $" + Hex(ColorSelector::_GetGadgetState(b)))
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
CompilerEndIf
cordially,
GallyHC