Color Picker

Post your working scripts, libraries and tools for AHK v1.1 and older
User avatar
Hellbent
Posts: 2109
Joined: 23 Sep 2017, 13:34

Re: Color Picker

Post by Hellbent » 26 Jan 2020, 01:12

Thanks @thebbandit

I do have a basic class for the sliders. You can find it here.
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=61051&p=259167

thebbandit
Posts: 45
Joined: 02 Jul 2019, 11:34

Re: Color Picker

Post by thebbandit » 26 Jan 2020, 15:09

Wow, you never cease to amaze. Thank you for your continued efforts with AHK, you are doing a great service to the community.

jly
Posts: 89
Joined: 30 Sep 2020, 06:06

Re: Color Picker

Post by jly » 23 Apr 2021, 06:49

White theme only modified background and font colors. Make it look clearer.

Code: Select all



;111111 -> F0F0F0
;330000 -> FFF0F0
;330000 -> FFF0F0
;AA2222 -> FF0000
;22AA22 -> 00FF00
;2222AA -> 0000FF

;003300 -> EBFFEB
;000033 -> C8C8FF

;333333 -> D3D3D3

;F2F2F2 -> F2F2F2
;caaaaaa -> C000000
;"F0F0F0","777777","252525","880000","992222" -> "000000","000000","FFFFFF","FFF0F0","FEC9D8"
;252525
;003366 -> F0F0F0

;003388 -> F3F3F3


#SingleInstance, Force
SetBatchLines,-1
#NoEnv
SetWorkingDir,%A_ScriptDir%
pButton_StartUp()
global pButton:={}
global Press_active:=0,Hover_On:=0,Active_Button
global Main_Window:={Y: 0 , W: 300 , H: 600 }
Main_Window.X:=(A_ScreenWidth-Main_Window.W)-100
global RedSliderValue := 0 , GreenSliderValue := 0 , BlueSliderValue := 0 , GreyScaleSliderValue := 0
;global RGBColorBlock := "000000"
global RGBColorBlock := "FFFFFF"
;global GreyScaleColorBlock := "000000"
global GreyScaleColorBlock := "FFFFFF"
global RedTrigger , GreenTrigger , BlueTrigger , GreyScaleTrigger , OutputColor
global RedHexValue := "00" , GreenHexValue := "00" , BlueHexValue := "00" , GreyScaleHexValue := "00"
global RedDecValue := "0" , GreenDecValue := "0" , BlueDecValue := "0" , GreyScaleDecValue := GreyScaleSliderValue
global RedMin1:=0 , RedMax1:=255 , RedMin2:=0 , RedMax2:=255
global GreenMin1:=0 , GreenMax1:=255 , GreenMin2:=0 , GreenMax2:=255
global BlueMin1:=0 , BlueMax1:=255 , BlueMin2:=0 , BlueMax2:=255
global Saved_Colors_List:= [] , savedcoloredit:="" , allownewsavedvalue:=0
IfExist, Color_Picker_v2_Saved_Colors_List.txt
{
	FileRead,svdcol,Color_Picker_v2_Saved_Colors_List.txt
	Loop, Parse, svdcol ,*
		Saved_Colors_List[A_Index]:=A_LoopField
}
IfNotExist, Color_Picker_v2_Saved_Colors_List.txt
{
	Loop, 150	{
		Saved_Colors_List[A_Index]:="777777",tempcollist:="777777*"
		FileAppend,%tempcollist%,Color_Picker_v2_Saved_Colors_List.txt
	}
}
Create_Main_Window(),Create_SUB_Window(),CREATE_MIXER_WINDOW(),CREATE_SAVED_WINDOW(),CREATE_RANDOM_WINDOW()
SetTimer,SETPICKERONTOP,400
return
GuiClose:
	ExitApp
GuiContextMenu:
	(Tog:=!Tog)?(Main_Window.H:=40):(Main_Window.H:=600)
	Gui,1:Show,% "h" Main_Window.H " NA"
	return
CREATE_MIXER_WINDOW(){
	Gui, 3: +Parent2 -DPIScale -Caption
	;Gui, 3: Color, D3D3D3 , D3D3D3
	Gui, 3: Color, FFFFFF , D3D3D3
	DRAW_OUTLINE( 3 , 0 , 0 ,250  , 470 , "444444" , "black" ),DRAW_OUTLINE( 3 , 1 , 1 ,248  , 468 , "D3D3D3" , "F0F0F0" )
	ADD_COLOR_DISPLAYS(),ADD_RGB_SLIDERS(),ADD_GREYSCALE_SLIDERS(),ADD_MIXER_BUTTONS()
	Gui, 3: Show,x7 y10 w250 h470
}
CREATE_SAVED_WINDOW(){
	global
	Gui, 4: +Parent2 -DPIScale -Caption
	;Gui, 4: Color,D3D3D3,F2F2F2
	Gui, 4: Color,FFFFFF,F2F2F2
	x:=25
	Loop, 11	{
		Gui,4:Add,Progress,x%x% y40 w1 h300 BackgroundBlack
		x+=20
	}
	y:=40
	Loop, 16	{
		Gui,4:Add,Progress,x25 y%y% w200 h1 BackgroundBlack
		y+=20
	}
	y:=41,i:=1
	Loop, 15	{
		x:=26
		Loop, 10	{
			Gui,4:Add,Text,x%x% y%y% w19 h19 BackgroundTrans vGUISavedColorTRIGGER_%i% gChange_Colors
			Gui,4:Add,Progress,% "x" x " y" y " w19 h19 Background" Saved_Colors_List[i] " vGUISavedColor_" i
			i++,x+=20
		}
		y+=20
	}
	Gui,4:Font,C000000 s10 w500,Segoe ui
	Gui,4:add,Edit, x75 y355 w100 h20 Center Uppercase -E0x200 vSAVEDCOLOREDIT gSubmit_4,
	DRAW_OUTLINE( 4 , 74 , 354 ,102  , 22 , "777777" , "666666" )
	pButton.Push(New Progress_Button("4",pButton.Length()+1,"SETADDTOSAVEDLIST",10,390,110,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","ADD COLOR",1))
	pButton.Push(New Progress_Button("4",pButton.Length()+1,"SETREMOVEFROMSAVEDLIST",130,390,110,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","REMOVE COLOR",1))
	pButton.Push(New Progress_Button("4",pButton.Length()+1,"CLEARALLSAVEDCOLORS",50,420,150,30,"000000","000000","FFFFFF","FFF0F0","FEC9D8","CLEAR ALL COLORS",7))
	Gui, 4: Show,x7 y10 w250 h470
	Gui, 4: Hide
}
CLEARALLSAVEDCOLORS(){
	stime:=A_TickCount
	While(GETKEYSTATE("LBUTTON")){
		if(A_TickCount-stime>3000){
			Loop 150	{
				GuiControl,% "4:+Background777777", GUISavedColor_%A_Index%
				Saved_Colors_List[A_Index]:="777777"
			}
			SAVECOLORLISTTOFILE()
			return
		}
	}
}
Change_Colors(){
	if(ALLOWNEWSAVEDVALUE=1){
		ALLOWNEWSAVEDVALUE:=0
		StringTrimLeft,tsop,A_GUICONTROL,21
		Saved_Colors_List[tsop]:=SAVEDCOLOREDIT
		GuiControl,% "4:+Background" Saved_Colors_List[tsop], GUISavedColor_%tsop%
		SAVECOLORLISTTOFILE()
	}else if(ALLOWNEWSAVEDVALUE=2){
		ALLOWNEWSAVEDVALUE:=0
		StringTrimLeft,tsop,A_GUICONTROL,21
		Saved_Colors_List[tsop]:="777777"
		GuiControl,% "4:+Background" Saved_Colors_List[tsop], GUISavedColor_%tsop%
		SAVECOLORLISTTOFILE()
	}
}
Submit_4(){
	Gui,4:Submit,NoHide
}
SETREMOVEFROMSAVEDLIST(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	ALLOWNEWSAVEDVALUE:=2
}
SETADDTOSAVEDLIST(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	ALLOWNEWSAVEDVALUE:=1
}
SAVECOLORLISTTOFILE(){
	FileDelete,Color_Picker_v2_Saved_Colors_List.txt
	Loop, 150	{
		tvtstf:=Saved_Colors_List[A_Index] "*"
		FileAppend,%tvtstf%,Color_Picker_v2_Saved_Colors_List.txt
	}
}
Move_Window(){
	POSTMESSAGE , 0XA1 , 2
	SETTIMER , WATCH_HOVER , OFF
	WHILE( GETKEYSTATE( "LBUTTON" ) )
		SLEEP , 10
	SETTIMER , WATCH_HOVER , ON
}
DRAW_OUTLINE( GUI_NAME , X , Y , W , H , COLOR1 :="BLACK", COLOR2 := "BLACK" , THICKNESS := 1 ) {
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y " W" W " H" THICKNESS " BACKGROUND" COLOR1
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y " W" THICKNESS " H" H " BACKGROUND" COLOR1
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y + H - THICKNESS " W" W " H" THICKNESS " BACKGROUND" COLOR2
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X + W - THICKNESS " Y" Y " W" THICKNESS " H" H " BACKGROUND" COLOR2
}
DRAW_LINE( GUI_NAME , X , Y , W , H , COLOR ) {
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y " W" W " H" H " BACKGROUND" COLOR
}
ADD_GREYSCALE_SLIDERS(){
	Gui, 3:Font,C000000 s10 w600 , Segoe UI
	Gui, 3:Add,Text,x190 y140 w20 h256 vGREYSCALETRIGGER gADJUST_SLIDER
	Gui, 3:Add,Progress,x165 y110 w70 h316 BackgroundF0F0F0
	Gui, 3:Add,Edit,x170 y115 w60 h20 Center -E0x200 Disabled vGreyScaleHexValue ,% GreyScaleHexValue
	Gui, 3:Add,Progress,x190 y140 w20 h256 BackgroundD3D3D3 c888888 Range0-255 Vertical vGREYSCALESLIDERVALUE ,% GreyScaleSliderValue
	Gui, 3:Add,Edit,x170 y401 w60 h20 Center -E0x200 Disabled vGreyScaleDecValue ,% GreyScaleDecValue
}
ADD_RGB_SLIDERS(){
	Gui, 3:Add,Text,x30 y140 w20 h256 vREDTRIGGER gADJUST_SLIDER
	Gui, 3:Add,Text,x73 y140 w20 h256 vGREENTRIGGER gADJUST_SLIDER
	Gui, 3:Add,Text,x115 y140 w20 h256 vBLUETRIGGER gADJUST_SLIDER
	Gui, 3:Add,Progress,x10 y110 w145 h316 BackgroundF0F0F0
	Gui, 3:Font,cffffff s10 w600 , Segoe UI
	Gui, 3:Add,Edit,x25 y115 w30 h20 Center -E0x200 Disabled vRedHexValue ,% RedHexValue
	Gui, 3:Add,Edit,x68 y115 w30 h20 Center -E0x200 Disabled vGreenHexValue ,% GreenHexValue
	Gui, 3:Add,Edit,x110 y115 w30 h20 Center -E0x200 Disabled vBlueHexValue ,% BlueHexValue
	Gui, 3:Add,Progress,x30 y140 w20 h256 BackgroundFFF0F0 cFF0000 Range0-255 Vertical vREDSLIDERVALUE,% RedSliderValue
	Gui, 3:Add,Progress,x73 y140 w20 h256 BackgroundEBFFEB c00FF00 Range0-255 Vertical vGREENSLIDERVALUE,% GreenSliderValue
	Gui, 3:Add,Progress,x115 y140 w20 h256 BackgroundC8C8FF c0000FF Range0-255 Vertical vBLUESLIDERVALUE,% BlueSliderValue
	Gui, 3:Add,Edit,x25 y401 w30 h20 Center -E0x200 Disabled vRedDecValue ,% RedDecValue
	Gui, 3:Add,Edit,x68 y401 w30 h20 Center -E0x200 Disabled vGreenDecValue ,% GreenDecValue
	Gui, 3:Add,Edit,x110 y401 w30 h20 Center -E0x200 Disabled vBlueDecValue ,% BlueDecValue
}
GETCOLORFROMSCREEN(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	While(!GetKeyState("Ctrl")){
		CoordMode,Mouse,Screen
		CoordMode,Pixel,Screen
		Tooltip, Press ""Ctrl"" to lock color. %OutputColor%
		MouseGetPos,tcx,tcy
		PixelGetColor,OutputColor,tcx,tcy,RGB
		UPDATECOLORDISPLAYS(OutputColor)
	}
	ToolTip,
	StringTrimLeft,OutputColor,OutputColor,2
	Clipboard:=OutputColor
	GuiControl,4:,SAVEDCOLOREDIT,% OutputColor
}
UPDATECOLORDISPLAYS(OutputColor){
	StringTrimLeft,OutputColor,OutputColor,2
	StringLeft , r ,  OutputColor , 2
	StringTrimLeft,OutputColor,OutputColor,2
	StringLeft , g ,  OutputColor , 2
	StringTrimLeft,OutputColor,OutputColor,2
	StringLeft , b ,  OutputColor , 2
	r:= "0x" r,g:="0x" g,b:="0x" b
	RedSliderValue:=r+0,GreenSliderValue:=g+0,BlueSliderValue:=b+0
	GreyScaleSliderValue:=Round((RedSliderValue+GreenSliderValue+BlueSliderValue)/3)
	GuiControl,3:,RedSliderValue,% RedSliderValue
	GuiControl,3:,GreenSliderValue,% GreenSliderValue
	GuiControl,3:,BlueSliderValue,% BlueSliderValue
	GuiControl,3:,GreyScaleSliderValue,% GreyScaleSliderValue
	UPDATERGBCOLORBLOCK(RedSliderValue,GreenSliderValue,BlueSliderValue,GreyScaleSliderValue)
}
ADJUST_SLIDER(){
	Coordmode,Mouse,Client
	SLIDERVALUE:=0
	While(GETKEYSTATE("LButton")){
		MouseGetPos,Rx,Ry
		if(GETKEYSTATE("UP")){
			if(ry-1>194)
				MouseMove,Rx,ry-1
			KeyWait,Up,Up
		}else if(GETKEYSTATE("Down")){
			if(ry+1<451)
				MouseMove,Rx,ry+1
			KeyWait,Down,Up
		}else if(GETKEYSTATE("Left")){
			if(ry+1<451)
				MouseMove,Rx,ry+1
		}else if(GETKEYSTATE("Right")){
			if(ry-1>194)
				MouseMove,Rx,ry-1
		}
		SLIDERVALUE:=(RY-195) * -1
		(SLIDERVALUE < -255) ? (SLIDERVALUE:=-255) : (SLIDERVALUE > 0) ? (SLIDERVALUE:=0)
		if(A_GuiControl="RedTrigger"){
		RedSliderValue:=SLIDERVALUE+255
		GuiControl,3:,RedSliderValue,% RedSliderValue
		ToolTip,% RedSliderValue
		}else if(A_GuiControl="GreenTrigger"){
		GreenSliderValue:=SLIDERVALUE+255
		GuiControl,3:,GreenSliderValue,% GreenSliderValue
		ToolTip,% GreenSliderValue
		}else if(A_GuiControl="BlueTrigger"){
		BlueSliderValue:=SLIDERVALUE+255
		GuiControl,3:,BlueSliderValue,% BlueSliderValue
		ToolTip,% BlueSliderValue
		}else if(A_GuiControl="GreyScaleTrigger"){
		GreyScaleSliderValue:=SLIDERVALUE+255
		GuiControl,3:,GreyScaleSliderValue,% GreyScaleSliderValue
		ToolTip,% GreyScaleSliderValue
		}
		UPDATERGBCOLORBLOCK(RedSliderValue,GreenSliderValue,BlueSliderValue,GreyScaleSliderValue)
	}
	ToolTip,
}
Create_SUB_Window(){
	Gui, 2: +Parent1 -DPIScale -Caption
	Gui, 2: Color, F0F0F0
	DRAW_OUTLINE( 2 , 0 , 0 ,260  , 575, "444444" , "black" ),DRAW_OUTLINE( 2 , 1 , 1 ,258  , 573, "D3D3D3" , "F0F0F0" )
	Gui, 2: Show,% "x30 y45 w" Main_Window.W-40 " h" Main_Window.H - 75
}
SETPICKERONTOP(){
	WINGETTITLE,CWIN,A
	IF(CWIN!="HB Color Picker v2.0.1")
		GUI,1:SHOW,NA
}
Create_Main_Window(){
	Gui, 1: +AlwaysOnTop -DPIScale -Caption +LastFound
	Winset,Transcolor,112343
	Gui, 1: Color,112343
	Gui,1:Font,C000000 s10 w600 , Segoe UI
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"Move_Window",floor((Main_Window.W-150)//2),10,150,30,"BLACK","777777","D3D3D3","F0F0F0","BLACK","HB Color Picker",5))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"RGBSUBWINDOW",6,60,23,120,"444444","777777","D3D3D3","F0F0F0","F3F3F3","M`nI`nX`nE`nR",15))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"SAVEDSUBWINDOW",6,190,23,120,"444444","777777","D3D3D3","F0F0F0","F3F3F3","S`nA`nV`nE`nD",15))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"RANDOMSUBWINDOW",6,320,23,120,"444444","777777","D3D3D3","F0F0F0","F3F3F3","R`nA`nN`nD`nO`nM",8))
	;pButton.Push(New Progress_Button("1",pButton.Length()+1,"GETCOLORFROMSCREEN",75,530,170,30,"F0F0F0","777777","252525","008833","992222","GET COLOR",5))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"GETCOLORFROMSCREEN",75,530,170,30,"F0F0F0","777777","F0F0F0","FFF0F0","FEC9D8","GET COLOR",5))
	;Gui, 1: Show,% "x" Main_Window.X " y" Main_Window.Y " w" Main_Window.W " h" Main_Window.H , HB Color Picker v2.0.1
	Gui, 1: Show,%  " w" Main_Window.W " h" Main_Window.H , HB Color Picker v2.0.1
}
CREATE_RANDOM_WINDOW(){
	Gui, 5: +Parent2 -DPIScale -Caption
	;Gui, 5: Color, F2F2F2,D3D3D3
	Gui, 5: Color, FFFFFF,D3D3D3
	DRAW_OUTLINE( 5 , 0 , 0 ,250  , 470 , "444444" , "black" ),DRAW_OUTLINE( 5 , 1 , 1 ,248  , 468 , "D3D3D3" , "F0F0F0" )
	;Gui,5:Font,cdddddd s10 ,Segoe Ui
	Gui,5:Font,c000000 s10 ,Segoe Ui
	Gui,5:Add,Text,cRed x15 y5 w65 h18 BackgroundTrans Center ,RED
	Gui,5:Add,Text,cGreen x90 y5 w65 h18 BackgroundTrans Center ,GREEN
	Gui,5:Add,Text,c0055ff x165 y5 w65 h18 BackgroundTrans Center ,BLUE
	Gui,5:Add,Edit,x15 y25 w30 h18 -e0x200  Center Number Limit3 vRedMin1 gSUBMIT_5 , % RedMin1
	Gui,5:Add,Edit,x50 y25 w30 h18 -e0x200  Center Number Limit3 vRedMAX1 gSUBMIT_5 , % RedMAX1
	Gui,5:Add,Edit,x90 y25 w30 h18 -e0x200  Center Number Limit3 vGreenMin1 gSUBMIT_5 , % GreenMin1
	Gui,5:Add,Edit,x125 y25 w30 h18 -e0x200  Center Number Limit3 vGreenMAX1  gSUBMIT_5 , % GreenMAX1
	Gui,5:Add,Edit,x165 y25 w30 h18 -e0x200  Center Number Limit3 vBlueMIN1 gSUBMIT_5 , % BlueMIN1
	Gui,5:Add,Edit,x200 y25 w30 h18 -e0x200  Center Number Limit3 vBlueMAX1 gSUBMIT_5 , % BlueMAX1
	pButton.Push(New Progress_Button("5",pButton.Length()+1,"Create_RANDOM_SET",60,200,130,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","GENERATE",0))
	Gui,5:Add,Text,cRed x15 y225 w65 h18 BackgroundTrans Center ,RED
	Gui,5:Add,Text,cGreen x90 y225 w65 h18 BackgroundTrans Center ,GREEN
	Gui,5:Add,Text,c0055ff x165 y225 w65 h18 BackgroundTrans Center ,BLUE
	Gui,5:Add,Edit,x15 y245 w30 h18 -e0x200  Center Number Limit3 vRedMin2 gSUBMIT_5 , % RedMin2
	Gui,5:Add,Edit,x50 y245 w30 h18 -e0x200  Center Number Limit3 vRedMAX2 gSUBMIT_5 , % RedMAX2
	Gui,5:Add,Edit,x90 y245 w30 h18 -e0x200  Center Number Limit3 vGreenMin2 gSUBMIT_5 , % GreenMin2
	Gui,5:Add,Edit,x125 y245 w30 h18 -e0x200  Center Number Limit3 vGreenMAX2  gSUBMIT_5 , % GreenMAX2
	Gui,5:Add,Edit,x165 y245 w30 h18 -e0x200  Center Number Limit3 vBlueMIN2 gSUBMIT_5 , % BlueMIN2
	Gui,5:Add,Edit,x200 y245 w30 h18 -e0x200  Center Number Limit3 vBlueMAX2 gSUBMIT_5 , % BlueMAX2
	pButton.Push(New Progress_Button("5",pButton.Length()+1,"Create_RANDOM_SET",60,440,130,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","GENERATE",0))
	Gui, 5: Show,x7 y10 w250 h470
}
SUBMIT_5(){
	Gui,5:Submit,NoHide
}
Create_RANDOM_SET(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	(A_GuiControl=11)?(GENERATERANDOMCOLORWINDOWS(6,RedMin1,RedMAX1,GreenMin1,GreenMAX1,BlueMIN1,BlueMAX1,50,7))
	:(A_GuiControl=12)?(GENERATERANDOMCOLORWINDOWS(7,RedMin2,RedMAX2,GreenMin2,GreenMAX2,BlueMIN2,BlueMAX2,270,8))
}
GENERATERANDOMCOLORWINDOWS(genWindow,RMIN,RMAX,GMIN,GMAX,BMIN,BMAX,yttt,lc){
	Gui,% genWindow ": Destroy"
	Gui,% genWindow ": +Parent5 -Caption -DPISCALE"
	Gui,% genWindow ":Color" ,F2F2F2
	y:=0,tw:=20,th:=tw
	Loop, % LC	{
		x:=0
		Loop, 10	{
			RandomColor:=Random_Colour(RMIN,RMAX,GMIN,GMAX,BMIN,BMAX)
			Gui,% genWindow ": Add" ,Progress,x%x% y%y% w%tw% h%th% Background%RandomColor%
			x+=tw
		}
		y+=th
	}
	Gui,% genWindow ": Show",x25 y%yttt% w200 h160
}
ADD_MIXER_BUTTONS(){
	pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPRGB",20,438,100,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","CLIP RGB",1))
	;pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPGREYSCALE",130,438,100,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","CLIP GREY",1))
	;pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPGREYSCALE",130,438,100,20,"FFFFFF","000000","F0F0F0","FFF0F0","992222","CLIP GREY",1))
	;pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPGREYSCALE",130,438,100,20,"000000","000000","F0F0F0","FFF0F0","992222","CLIP GREY",1))
	pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPGREYSCALE",130,438,100,20,"000000","000000","FFFFFF","FFF0F0","FEC9D8","CLIP GREY",1))
	DRAW_LINE( 3 , 21 , 458 , 100 , 1 , "F2F2F2" ),DRAW_LINE( 3 , 120 , 439 , 1 , 20 , "F2F2F2" ),DRAW_LINE( 3 , 131 , 458 , 100 , 1 , "F2F2F2" ),DRAW_LINE( 3 , 230 , 439 , 1 , 20 , "F2F2F2" )
}
RGBSUBWINDOW(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	GUI,3:Show
	Gui,4:Hide
	Gui,5:Hide
}
SAVEDSUBWINDOW(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	GUI,4:Show
	Gui,3:Hide
	Gui,5:Hide
}
RANDOMSUBWINDOW(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	GUI,5:Show
	Gui,3:Hide
	Gui,4:Hide
}
CLIPRGB(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	Clipboard := RGBColorBlock
	GuiControl,4:,SAVEDCOLOREDIT,% RGBColorBlock
}
CLIPGREYSCALE(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() )
		RETURN
	Clipboard := GreyScaleColorBlock
	GuiControl,4:,SAVEDCOLOREDIT,% GreyScaleColorBlock
}
UPDATERGBCOLORBLOCK(REDSLIDERVALUEt,GREENSLIDERVALUEt,BLUESLIDERVALUEt,GREYSCALESLIDERVALUEt){
	GuiControl,3:,GreyScaleDecValue,% GREYSCALESLIDERVALUEt
	GuiControl,3:,RedDecValue,% REDSLIDERVALUEt
	GuiControl,3:,GreenDecValue,% GREENSLIDERVALUEt
	GuiControl,3:,BlueDecValue,% BLUESLIDERVALUEt
	SETFORMAT , INTEGER , HEX
	REDSLIDERVALUEt += 0 , GREENSLIDERVALUEt += 0 , BLUESLIDERVALUEt += 0 , GREYSCALESLIDERVALUEt += 0
	StringTrimLeft,GREYSCALESLIDERVALUEt,GREYSCALESLIDERVALUEt,2
	StringTrimLeft,REDSLIDERVALUEt,REDSLIDERVALUEt,2
	StringTrimLeft,GREENSLIDERVALUEt,GREENSLIDERVALUEt,2
	StringTrimLeft,BLUESLIDERVALUEt,BLUESLIDERVALUEt,2
	SETFORMAT , INTEGER , DECIMAL
	(strlen(GREYSCALESLIDERVALUEt)=1)?(GREYSCALESLIDERVALUEt:="0" GREYSCALESLIDERVALUEt)
	(strlen(REDSLIDERVALUEt)=1)?(REDSLIDERVALUEt:="0" REDSLIDERVALUEt)
	(strlen(GREENSLIDERVALUEt)=1)?(GREENSLIDERVALUEt:="0" GREENSLIDERVALUEt)
	(strlen(BLUESLIDERVALUEt)=1)?(BLUESLIDERVALUEt:="0" BLUESLIDERVALUEt)
	GuiControl,3:,GreyScaleHexValue,% GREYSCALESLIDERVALUEt
	GREYSCALESLIDERVALUEt.= GREYSCALESLIDERVALUEt GREYSCALESLIDERVALUEt
	GreyScaleColorBlock := GREYSCALESLIDERVALUEt
	GuiControl,3:,RedHexValue,% REDSLIDERVALUEt
	GuiControl,3:,GreenHexValue,% GREENSLIDERVALUEt
	GuiControl,3:,BlueHexValue,% BLUESLIDERVALUEt
	RGBColorBlock:= REDSLIDERVALUEt . GREENSLIDERVALUEt . BLUESLIDERVALUEt
	GuiControl, 3: +c%RGBColorBlock% , RGBColorBlock,
	GuiControl, 3: +c%GreyScaleColorBlock% , GreyScaleColorBlock,
}
ADD_COLOR_DISPLAYS(){
	Gui,3:Add,Progress,x7 y6 w235 h100 BackgroundF2F2F2
	DRAW_OUTLINE( 3 , 6 , 5 , 237 , 102 , "444444" , "black" )
	Gui, 3:Add,Progress,x20 y15 w130 h80 BackgroundBlack c%RGBColorBlock% vRGBCOLORBLOCK, 100
	DRAW_OUTLINE( 3 , 19 , 14 , 132 , 82 , "F0F0F0" , "F0F0F0" )
	Gui, 3:Add,Progress,x160 y15 w70 h80 BackgroundBlack c%GreyScaleColorBlock% vGREYSCALECOLORBLOCK, 100
	DRAW_OUTLINE( 3 , 159 , 14 , 72 , 82 , "F0F0F0" , "F0F0F0" )
}
Random_Colour(Range_R_Min:=0,Range_R_Max:=255,Range_G_Min:=0,Range_G_Max:=255,Range_B_Min:=0,Range_B_Max:=255){
	 RGBCOLOR := { 1 : ( Random( Range_R_Min , Range_R_Max ) ) , 2 : Random( Range_G_Min , Range_G_Max ) , 3 : Random( Range_B_Min , Range_B_Max ) }
	FOR COLOR IN RGBCOLOR	{
		SETFORMAT , INTEGER , HEX
		RGBCOLOR[ A_INDEX ] += 0
		TEMP := RGBCOLOR[A_INDEX]
		STRINGREPLACE , TEMP , TEMP , 0x
		RGBCOLOR[A_INDEX] := TEMP
		SETFORMAT , INTEGER , DECIMAL
		IF( STRLEN( RGBCOLOR[ A_INDEX ] ) < 2 )
			RGBCOLOR[ A_INDEX ] := "0" RGBCOLOR[ A_INDEX ]
		TEMPCOLOR .= RGBCOLOR[ A_INDEX ]
	}
	RETURN TEMPCOLOR
}
Random(MIN,MAX){
	Random,OUTPUT,MIN,MAX
	return OUTPUT
}
pButton_StartUp(){
	SetTimer,Watch_Hover,10
}
Watch_Hover(){
	global
	if(Press_active=0){
		if(Hover_On=0){
			MouseGetPos,,,,ctrl,2
			loop,% pButton.Length()	{
				GuiControlGet,cName,% pButton[A_Index].Window_Name ":Name",% ctrl
				cut:=Strlen(cName)
				StringLeft,bName,cName,cut-2
					if(bname=pButton[A_Index].Button_Name){
						pButton[A_Index].Button_Hover_On()
						Hover_On:=1,Active_Button:=bname,win:=pButton[A_Index].Window_Name
						return
					}
			}
		}else if(Hover_On=1){
			MouseGetPos,,,,ctrl,2
			GuiControlGet,cName,%win%:Name,% ctrl
			cut:=Strlen(cName)
			StringLeft,nBName,cName,cut-2
			if(NbName!=Active_Button){
				pButton[Active_Button].Button_Hover_Off(),Hover_On:=0,Active_Button:=""
			}
		}
	}
}
Class Progress_Button	{
	__New(Window_Name,Button_Name,Label,x,y,w,h,BC,TRC,TC1,TC2,TC3,Button_Text,Text_Offset:=0){
		This.Text_Offset:=Text_Offset,This.Window_Name:=Window_Name,This.Button_Name:=Button_Name,This.Label:=Label
		This.Button_ID1:=Button_Name "_1",This.Button_ID2:=Button_Name "_2",This.Button_ID3:=Button_Name "_3",This.Button_ID4:=Button_Name "_4"
		This.Button_Text:=Button_Text,This.X:=x,This.Y:=y,This.W:=w,This.H:=h
		This.Bottom_Color:=BC,This.Trim_Color:=TRC,This.Top_Color_1:=TC1,This.Top_Color_2:=TC2,This.Top_Color_3:=TC3
		This.Add_Button()
	}
	Add_Button(){
		global
		Gui,% This.Window_Name ":Add",Text,% "x" This.X " y" This.Y " w" This.W " h" This.H " v" This.Button_Name " g" This.Label
		Gui,% This.Window_Name ":Add",Progress,% "x" This.X " y" This.Y " w" This.W " h" This.H " Background" This.Bottom_Color " v" This.Button_ID1
		Gui,% This.Window_Name ":Add",Progress,% "x" This.X " y" This.Y " w" This.W-1 " h" This.H-1 " Background" This.Trim_Color " v" This.Button_ID2
		Gui,% This.Window_Name ":Add",Progress,% "x" This.X+1 " y" This.Y+1 " w" This.W-2 " h" This.H-2 " Background" This.Top_Color_1 " v" This.Button_ID3
		Gui,% This.Window_Name ":Add",Text,% "x" This.X+1 " y" This.Y+This.Text_Offset " w" This.W-2 "  Center BackgroundTrans v" This.Button_ID4,% This.Button_Text
	}
	Button_Press(){
		global
		Press_Active:=1
		GuiControl,% This.Window_Name ":Move",% This.Button_ID4,% "x" This.X+1 " y" This.Y+1+This.Text_Offset
		sleep,-1
		GuiControl,% This.Window_Name ":Hide",This.Button_ID2
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_3,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID1
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
		While(GetKeyState("LButton"))
			Sleep, 10
		MouseGetPos,,,,ctrl,2
		GuiControlGet,cName,% win ":Name",% ctrl
		cut:=Strlen(cName)
		StringLeft,bName,cName,cut-2
		if(bname=This.Button_Name){
			GuiControl,% This.Window_Name ":Show",This.Button_ID2
			GuiControl,% This.Window_Name ":+Background" This.Top_Color_1,% This.Button_ID3
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID1
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID2
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID3
			GuiControl,% This.Window_Name ":Move",% This.Button_ID4,% "x" This.X " y" This.Y+This.Text_Offset
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
			%bName%.Button_Hover_On(),Hover_On:=0,Active_Button:=bname,Press_Active:=0
			sleep,10
			return true
		}
		GuiControl,% This.Window_Name ":Show",This.Button_ID2
		GuiControl,% This.Window_Name ":Move",% This.Button_ID4,% "x" This.X " y" This.Y+This.Text_Offset
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_1,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID1
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID2
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
		Hover_On:=0,Press_Active:=0
		sleep,10
		return False
	}
	Button_Hover_On(){
		global
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_2,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
	}
	Button_Hover_Off(){
		global
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_1,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
	}
}
esc::ExitApp
Attachments
Color_Picker_White_Theme.png
Color_Picker_White_Theme.png (15.29 KiB) Viewed 1053 times

Valhallaa
Posts: 1
Joined: 16 May 2021, 01:11

Re: Color Picker

Post by Valhallaa » 24 May 2022, 21:57

@Hellbent
I know this is old, but it wasn't working on my quad 58" 4k setup, even when I turned all except one 4k, so I fixed it, but everything else works great. I hope this helps someone in the future, at least until Pulover's Macro Creator for AHK V2. I do hope that is a thing; I love it; it's better than the paid maco creators like Jitbit, a program I own.

Code: Select all

if not A_IsAdmin
{
	Run *RunAs "%A_ScriptFullPath%"  ; Requires v1.0.92.01+
	ExitApp
}

#SingleInstance, Force
SetBatchLines,-1 
#NoEnv
SetWorkingDir,%A_ScriptDir%
pButton_StartUp()
global pButton:={} 
global Press_active:=0,Hover_On:=0,Active_Button
global Main_Window:={Y: 0 , W: 300 , H: 600 }
Main_Window.X:=(A_ScreenWidth-Main_Window.W)-100
global REDSLIDERVALUE := 0 , GREENSLIDERVALUE := 0 , BLUESLIDERVALUE := 0 , RGBCOLORBLOCK := "000000" , GREYSCALESLIDERVALUE := 0 , GREYSCALECOLORBLOCK := "000000"
global REDTRIGGER , GREENTRIGGER , BLUETRIGGER , GREYSCALETRIGGER , OUTPUTCOLOR
global REDHEXVALUE := "00" , GREENHEXVALUE := "00" , BLUEHEXVALUE := "00" , GREYSCALEHEXVALUE := "00"
global REDDECVALUE := "0" , GREENDECVALUE := "0" , BLUEDECVALUE := "0" , GREYSCALEDECVALUE := GREYSCALESLIDERVALUE
global REDMIN1:=0 , REDMAX1:=255 , REDMIN2:=0 , REDMAX2:=255
global GREENMIN1:=0 , GREENMAX1:=255 , GREENMIN2:=0 , GREENMAX2:=255
global BLUEMIN1:=0 , BLUEMAX1:=255 , BLUEMIN2:=0 , BLUEMAX2:=255
global Saved_Colors_List:= [] , SAVEDCOLOREDIT:="" , ALLOWNEWSAVEDVALUE:=0
IfExist, Color_Picker_v2_Saved_Colors_List.txt
{
	FileRead,svdcol,Color_Picker_v2_Saved_Colors_List.txt
	Loop, Parse, svdcol ,*		
		Saved_Colors_List[A_Index]:=A_LoopField
}
IfNotExist, Color_Picker_v2_Saved_Colors_List.txt
{	
	Loop, 150	{
		Saved_Colors_List[A_Index]:="777777",tempcollist:="777777*" 
		FileAppend,%tempcollist%,Color_Picker_v2_Saved_Colors_List.txt
	}
}
Create_Main_Window(),Create_SUB_Window(),CREATE_MIXER_WINDOW(),CREATE_SAVED_WINDOW(),CREATE_RANDOM_WINDOW()
SetTimer,SETPICKERONTOP,400
return
GuiClose:
	ExitApp
GuiContextMenu:
	(Tog:=!Tog)?(Main_Window.H:=40):(Main_Window.H:=600)
	Gui,1:Show,% "h" Main_Window.H " NA"
	return
CREATE_MIXER_WINDOW(){
	Gui, 3: +Parent2 +DPIScale -Caption
	Gui, 3: Color, 333333 , 333333
	DRAW_OUTLINE( 3 , 0 , 0 ,250  , 470 , "444444" , "black" ),DRAW_OUTLINE( 3 , 1 , 1 ,248  , 468 , "333333" , "111111" )
	ADD_COLOR_DISPLAYS(),ADD_RGB_SLIDERS(),ADD_GREYSCALE_SLIDERS(),ADD_MIXER_BUTTONS()
	Gui, 3: Show,x7 y10 w250 h470
}
CREATE_SAVED_WINDOW(){
	global
	Gui, 4: +Parent2 +DPIScale -Caption
	Gui, 4: Color,333333,222222
	x:=25
	Loop, 11	{
		Gui,4:Add,Progress,x%x% y40 w1 h300 BackgroundBlack
		x+=20
	}
	y:=40
	Loop, 16	{
		Gui,4:Add,Progress,x25 y%y% w200 h1 BackgroundBlack
		y+=20
	}	
	y:=41,i:=1
	Loop, 15	{
		x:=26
		Loop, 10	{
			Gui,4:Add,Text,x%x% y%y% w19 h19 BackgroundTrans vGUISavedColorTRIGGER_%i% gChange_Colors
			Gui,4:Add,Progress,% "x" x " y" y " w19 h19 Background" Saved_Colors_List[i] " vGUISavedColor_" i
			i++,x+=20
		}
		y+=20	
	}
	Gui,4:Font,caaaaaa s10 w500,Segoe ui
	Gui,4:add,Edit, x75 y355 w100 h20 Center Uppercase -E0x200 vSAVEDCOLOREDIT gSubmit_4,
	DRAW_OUTLINE( 4 , 74 , 354 ,102  , 22 , "777777" , "666666" )
	pButton.Push(New Progress_Button("4",pButton.Length()+1,"SETADDTOSAVEDLIST",10,390,110,20,"111111","777777","252525","880000","992222","ADD COLOR",1))
	pButton.Push(New Progress_Button("4",pButton.Length()+1,"SETREMOVEFROMSAVEDLIST",130,390,110,20,"111111","777777","252525","880000","992222","REMOVE COLOR",1))
	pButton.Push(New Progress_Button("4",pButton.Length()+1,"CLEARALLSAVEDCOLORS",50,420,150,30,"111111","777777","252525","880000","992222","CLEAR ALL COLORS",7))
	Gui, 4: Show,x7 y10 w250 h470
	Gui, 4: Hide
}
CLEARALLSAVEDCOLORS(){
	stime:=A_TickCount
	While(GETKEYSTATE("LBUTTON")){
		if(A_TickCount-stime>3000){
			Loop 150	{
				GuiControl,% "4:+Background777777", GUISavedColor_%A_Index%
				Saved_Colors_List[A_Index]:="777777"
			}
			SAVECOLORLISTTOFILE()
			return			
		}
	}
}
Change_Colors(){
	if(ALLOWNEWSAVEDVALUE=1){
		ALLOWNEWSAVEDVALUE:=0
		StringTrimLeft,tsop,A_GUICONTROL,21
		Saved_Colors_List[tsop]:=SAVEDCOLOREDIT
		GuiControl,% "4:+Background" Saved_Colors_List[tsop], GUISavedColor_%tsop%
		SAVECOLORLISTTOFILE()
	}else if(ALLOWNEWSAVEDVALUE=2){
		ALLOWNEWSAVEDVALUE:=0
		StringTrimLeft,tsop,A_GUICONTROL,21
		Saved_Colors_List[tsop]:="777777"
		GuiControl,% "4:+Background" Saved_Colors_List[tsop], GUISavedColor_%tsop%
		SAVECOLORLISTTOFILE()
	}
}
Submit_4(){
	Gui,4:Submit,NoHide
}
SETREMOVEFROMSAVEDLIST(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	ALLOWNEWSAVEDVALUE:=2
}
SETADDTOSAVEDLIST(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	ALLOWNEWSAVEDVALUE:=1
}
SAVECOLORLISTTOFILE(){
	FileDelete,Color_Picker_v2_Saved_Colors_List.txt
	Loop, 150	{
		tvtstf:=Saved_Colors_List[A_Index] "*"
		FileAppend,%tvtstf%,Color_Picker_v2_Saved_Colors_List.txt
	}
}
Move_Window(){
	POSTMESSAGE , 0XA1 , 2
	SETTIMER , WATCH_HOVER , OFF
	WHILE( GETKEYSTATE( "LBUTTON" ) )
		SLEEP , 10
	SETTIMER , WATCH_HOVER , ON
}
DRAW_OUTLINE( GUI_NAME , X , Y , W , H , COLOR1 :="BLACK", COLOR2 := "BLACK" , THICKNESS := 1 ) {
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y " W" W " H" THICKNESS " BACKGROUND" COLOR1 
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y " W" THICKNESS " H" H " BACKGROUND" COLOR1 
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y + H - THICKNESS " W" W " H" THICKNESS " BACKGROUND" COLOR2 
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X + W - THICKNESS " Y" Y " W" THICKNESS " H" H " BACKGROUND" COLOR2 	
}
DRAW_LINE( GUI_NAME , X , Y , W , H , COLOR ) {
	GUI , % GUI_NAME ": ADD" , PROGRESS , % "X" X " Y" Y " W" W " H" H " BACKGROUND" COLOR 
}
ADD_GREYSCALE_SLIDERS(){
	Gui, 3:Font,caaaaaa s10 w600 , Segoe UI
	Gui, 3:Add,Text,x190 y140 w20 h256 vGREYSCALETRIGGER gADJUST_SLIDER 
	Gui, 3:Add,Progress,x165 y110 w70 h316 Background111111 
	Gui, 3:Add,Edit,x170 y115 w60 h20 Center -E0x200 Disabled vGREYSCALEHEXVALUE ,% GREYSCALEHEXVALUE
	Gui, 3:Add,Progress,x190 y140 w20 h256 Background333333 c888888 Range0-255 Vertical vGREYSCALESLIDERVALUE ,% GREYSCALESLIDERVALUE
	Gui, 3:Add,Edit,x170 y401 w60 h20 Center -E0x200 Disabled vGREYSCALEDECVALUE ,% GREYSCALEDECVALUE
}
ADD_RGB_SLIDERS(){
	Gui, 3:Add,Text,x30 y140 w20 h256 vREDTRIGGER gADJUST_SLIDER
	Gui, 3:Add,Text,x73 y140 w20 h256 vGREENTRIGGER gADJUST_SLIDER
	Gui, 3:Add,Text,x115 y140 w20 h256 vBLUETRIGGER gADJUST_SLIDER
	Gui, 3:Add,Progress,x10 y110 w145 h316 Background111111 
	Gui, 3:Font,cffffff s10 w600 , Segoe UI
	Gui, 3:Add,Edit,x25 y115 w30 h20 Center -E0x200 Disabled vREDHEXVALUE ,% REDHEXVALUE
	Gui, 3:Add,Edit,x68 y115 w30 h20 Center -E0x200 Disabled vGREENHEXVALUE ,% GREENHEXVALUE
	Gui, 3:Add,Edit,x110 y115 w30 h20 Center -E0x200 Disabled vBLUEHEXVALUE ,% BLUEHEXVALUE
	Gui, 3:Add,Progress,x30 y140 w20 h256 Background330000 caa2222 Range0-255 Vertical vREDSLIDERVALUE,% REDSLIDERVALUE
	Gui, 3:Add,Progress,x73 y140 w20 h256 Background003300 c22aa22 Range0-255 Vertical vGREENSLIDERVALUE,% GREENSLIDERVALUE
	Gui, 3:Add,Progress,x115 y140 w20 h256 Background000033 c2222aa Range0-255 Vertical vBLUESLIDERVALUE,% BLUESLIDERVALUE
	Gui, 3:Add,Edit,x25 y401 w30 h20 Center -E0x200 Disabled vREDDECVALUE ,% REDDECVALUE
	Gui, 3:Add,Edit,x68 y401 w30 h20 Center -E0x200 Disabled vGREENDECVALUE ,% GREENDECVALUE
	Gui, 3:Add,Edit,x110 y401 w30 h20 Center -E0x200 Disabled vBLUEDECVALUE ,% BLUEDECVALUE
}
GETCOLORFROMSCREEN(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	While(!GetKeyState("Ctrl")){
		CoordMode,Mouse,Screen
		CoordMode,Pixel,Screen
		Tooltip, Press ""Ctrl"" to lock color. %OUTPUTCOLOR%
		MouseGetPos,tcx,tcy
		tcx:=tcx*3
		tcy:=tcy*3
		PixelGetColor,OUTPUTCOLOR,tcx,tcy,RGB
		UPDATECOLORDISPLAYS(OUTPUTCOLOR)
	}
	ToolTip,
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	Clipboard:=OUTPUTCOLOR
	GuiControl,4:,SAVEDCOLOREDIT,% OUTPUTCOLOR
}
UPDATECOLORDISPLAYS(OUTPUTCOLOR){
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	StringLeft , r ,  OUTPUTCOLOR , 2
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	StringLeft , g ,  OUTPUTCOLOR , 2
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	StringLeft , b ,  OUTPUTCOLOR , 2
	r:= "0x" r,g:="0x" g,b:="0x" b
	REDSLIDERVALUE:=r+0,GreenSLIDERVALUE:=g+0,BlueSLIDERVALUE:=b+0
	GreyScaleSLIDERVALUE:=Round((REDSLIDERVALUE+GreenSLIDERVALUE+BlueSLIDERVALUE)/3)
	GuiControl,3:,REDSLIDERVALUE,% REDSLIDERVALUE
	GuiControl,3:,GreenSLIDERVALUE,% GreenSLIDERVALUE
	GuiControl,3:,BlueSLIDERVALUE,% BlueSLIDERVALUE
	GuiControl,3:,GreyScaleSLIDERVALUE,% GreyScaleSLIDERVALUE
	UPDATERGBCOLORBLOCK(REDSLIDERVALUE,GreenSLIDERVALUE,BlueSLIDERVALUE,GreyScaleSLIDERVALUE)
}
ADJUST_SLIDER(){
	Coordmode,Mouse,Client
	SLIDERVALUE:=0
	While(GETKEYSTATE("LButton")){
		MouseGetPos,Rx,Ry
		if(GETKEYSTATE("UP")){
			if(ry-1>194)
				MouseMove,Rx,ry-1
			KeyWait,Up,Up
		}else if(GETKEYSTATE("Down")){
			if(ry+1<451)
				MouseMove,Rx,ry+1
			KeyWait,Down,Up
		}else if(GETKEYSTATE("Left")){
			if(ry+1<451)
				MouseMove,Rx,ry+1
		}else if(GETKEYSTATE("Right")){
			if(ry-1>194)
				MouseMove,Rx,ry-1
		}
		SLIDERVALUE:=(RY-195) * -1 
		(SLIDERVALUE < -255) ? (SLIDERVALUE:=-255) : (SLIDERVALUE > 0) ? (SLIDERVALUE:=0)
		if(A_GuiControl="REDTRIGGER"){
		REDSLIDERVALUE:=SLIDERVALUE+255
		GuiControl,3:,REDSLIDERVALUE,% REDSLIDERVALUE 
		ToolTip,% REDSLIDERVALUE
		}else if(A_GuiControl="GREENTRIGGER"){
		GREENSLIDERVALUE:=SLIDERVALUE+255
		GuiControl,3:,GREENSLIDERVALUE,% GREENSLIDERVALUE 
		ToolTip,% GREENSLIDERVALUE
		}else if(A_GuiControl="BLUETRIGGER"){
		BLUESLIDERVALUE:=SLIDERVALUE+255
		GuiControl,3:,BLUESLIDERVALUE,% BLUESLIDERVALUE 
		ToolTip,% BLUESLIDERVALUE
		}else if(A_GuiControl="GREYSCALETRIGGER"){
		GREYSCALESLIDERVALUE:=SLIDERVALUE+255
		GuiControl,3:,GREYSCALESLIDERVALUE,% GREYSCALESLIDERVALUE 
		ToolTip,% GREYSCALESLIDERVALUE
		}
		UPDATERGBCOLORBLOCK(REDSLIDERVALUE,GREENSLIDERVALUE,BLUESLIDERVALUE,GREYSCALESLIDERVALUE)
	}
	ToolTip,
}
Create_SUB_Window(){
	Gui, 2: +Parent1 +DPIScale -Caption
	Gui, 2: Color, 111111
	DRAW_OUTLINE( 2 , 0 , 0 ,260  , 575, "444444" , "black" ),DRAW_OUTLINE( 2 , 1 , 1 ,258  , 573, "333333" , "111111" )
	Gui, 2: Show,% "x30 y45 w" Main_Window.W-40 " h" Main_Window.H - 75
}
SETPICKERONTOP(){
	WINGETTITLE,CWIN,A
	IF(CWIN!="HB Color Picker v2.0.1")
		GUI,1:SHOW,NA
}
Create_Main_Window(){
	Gui, 1: +AlwaysOnTop +DPIScale -Caption +LastFound
	Winset,Transcolor,112343
	Gui, 1: Color,112343 
	Gui,1:Font,caaaaaa s10 w600 , Segoe UI
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"Move_Window",floor((Main_Window.W-150)//2),10,150,30,"BLACK","777777","333333","003366","BLACK","HB Color Picker",5))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"RGBSUBWINDOW",6,60,23,120,"444444","777777","333333","003366","003388","M`nI`nX`nE`nR",15))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"SAVEDSUBWINDOW",6,190,23,120,"444444","777777","333333","003366","003388","S`nA`nV`nE`nD",15))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"RANDOMSUBWINDOW",6,320,23,120,"444444","777777","333333","003366","003388","R`nA`nN`nD`nO`nM",8))
	pButton.Push(New Progress_Button("1",pButton.Length()+1,"GETCOLORFROMSCREEN",75,530,170,30,"111111","777777","252525","008833","992222","GET COLOR",5))
	Gui, 1: Show,% "x" Main_Window.X " y" Main_Window.Y " w" Main_Window.W " h" Main_Window.H , HB Color Picker v2.0.1
}
CREATE_RANDOM_WINDOW(){
	Gui, 5: +Parent2 +DPIScale -Caption
	Gui, 5: Color, 222222,333333
	DRAW_OUTLINE( 5 , 0 , 0 ,250  , 470 , "444444" , "black" ),DRAW_OUTLINE( 5 , 1 , 1 ,248  , 468 , "333333" , "111111" )
	Gui,5:Font,cdddddd s10 ,Segoe Ui
	Gui,5:Add,Text,cRed x15 y5 w65 h18 BackgroundTrans Center ,RED
	Gui,5:Add,Text,cGreen x90 y5 w65 h18 BackgroundTrans Center ,GREEN
	Gui,5:Add,Text,c0055ff x165 y5 w65 h18 BackgroundTrans Center ,BLUE
	Gui,5:Add,Edit,x15 y25 w30 h18 -e0x200  Center Number Limit3 vREDMIN1 gSUBMIT_5 , % REDMIN1
	Gui,5:Add,Edit,x50 y25 w30 h18 -e0x200  Center Number Limit3 vREDMAX1 gSUBMIT_5 , % REDMAX1
	Gui,5:Add,Edit,x90 y25 w30 h18 -e0x200  Center Number Limit3 vGREENMIN1 gSUBMIT_5 , % GREENMIN1
	Gui,5:Add,Edit,x125 y25 w30 h18 -e0x200  Center Number Limit3 vGREENMAX1  gSUBMIT_5 , % GREENMAX1
	Gui,5:Add,Edit,x165 y25 w30 h18 -e0x200  Center Number Limit3 vBLUEMIN1 gSUBMIT_5 , % BLUEMIN1
	Gui,5:Add,Edit,x200 y25 w30 h18 -e0x200  Center Number Limit3 vBLUEMAX1 gSUBMIT_5 , % BLUEMAX1
	pButton.Push(New Progress_Button("5",pButton.Length()+1,"Create_RANDOM_SET",60,200,130,20,"BLACK","777777","333333","003366","BLACK","GENERATE",0))
	Gui,5:Add,Text,cRed x15 y225 w65 h18 BackgroundTrans Center ,RED
	Gui,5:Add,Text,cGreen x90 y225 w65 h18 BackgroundTrans Center ,GREEN
	Gui,5:Add,Text,c0055ff x165 y225 w65 h18 BackgroundTrans Center ,BLUE
	Gui,5:Add,Edit,x15 y245 w30 h18 -e0x200  Center Number Limit3 vREDMIN2 gSUBMIT_5 , % REDMIN2
	Gui,5:Add,Edit,x50 y245 w30 h18 -e0x200  Center Number Limit3 vREDMAX2 gSUBMIT_5 , % REDMAX2
	Gui,5:Add,Edit,x90 y245 w30 h18 -e0x200  Center Number Limit3 vGREENMIN2 gSUBMIT_5 , % GREENMIN2
	Gui,5:Add,Edit,x125 y245 w30 h18 -e0x200  Center Number Limit3 vGREENMAX2  gSUBMIT_5 , % GREENMAX2
	Gui,5:Add,Edit,x165 y245 w30 h18 -e0x200  Center Number Limit3 vBLUEMIN2 gSUBMIT_5 , % BLUEMIN2
	Gui,5:Add,Edit,x200 y245 w30 h18 -e0x200  Center Number Limit3 vBLUEMAX2 gSUBMIT_5 , % BLUEMAX2
	pButton.Push(New Progress_Button("5",pButton.Length()+1,"Create_RANDOM_SET",60,440,130,20,"BLACK","777777","333333","003366","BLACK","GENERATE",0))
	Gui, 5: Show,x7 y10 w250 h470
}
SUBMIT_5(){
	Gui,5:Submit,NoHide
}
Create_RANDOM_SET(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	(A_GuiControl=11)?(GENERATERANDOMCOLORWINDOWS(6,REDMIN1,REDMAX1,GREENMIN1,GREENMAX1,BLUEMIN1,BLUEMAX1,50,7))
	:(A_GuiControl=12)?(GENERATERANDOMCOLORWINDOWS(7,REDMIN2,REDMAX2,GREENMIN2,GREENMAX2,BLUEMIN2,BLUEMAX2,270,8))
}
GENERATERANDOMCOLORWINDOWS(genWindow,RMIN,RMAX,GMIN,GMAX,BMIN,BMAX,yttt,lc){
	Gui,% genWindow ": Destroy"
	Gui,% genWindow ": +Parent5 -Caption +DPISCALE"
	Gui,% genWindow ":Color" ,222222
	y:=0,tw:=20,th:=tw
	Loop, % LC	{
		x:=0
		Loop, 10	{
			RandomColor:=Random_Colour(RMIN,RMAX,GMIN,GMAX,BMIN,BMAX)
			Gui,% genWindow ": Add" ,Progress,x%x% y%y% w%tw% h%th% Background%RandomColor%
			x+=tw
		}
		y+=th	
	}
	Gui,% genWindow ": Show",x25 y%yttt% w200 h160
}
ADD_MIXER_BUTTONS(){
	pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPRGB",20,438,100,20,"111111","777777","252525","880000","992222","CLIP RGB",1))
	pButton.Push(New Progress_Button("3",pButton.Length()+1,"CLIPGREYSCALE",130,438,100,20,"111111","777777","252525","880000","992222","CLIP GREY",1))
	DRAW_LINE( 3 , 21 , 458 , 100 , 1 , "222222" ),DRAW_LINE( 3 , 120 , 439 , 1 , 20 , "222222" ),DRAW_LINE( 3 , 131 , 458 , 100 , 1 , "222222" ),DRAW_LINE( 3 , 230 , 439 , 1 , 20 , "222222" )
}
RGBSUBWINDOW(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	GUI,3:Show
	Gui,4:Hide
	Gui,5:Hide
}
SAVEDSUBWINDOW(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	GUI,4:Show
	Gui,3:Hide
	Gui,5:Hide
}
RANDOMSUBWINDOW(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	GUI,5:Show
	Gui,3:Hide
	Gui,4:Hide
}
CLIPRGB(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	Clipboard := RGBCOLORBLOCK
	GuiControl,4:,SAVEDCOLOREDIT,% RGBCOLORBLOCK
}
CLIPGREYSCALE(){
	IF( !PBUTTON[ A_GUICONTROL ].BUTTON_PRESS() ) 
		RETURN
	Clipboard := GREYSCALECOLORBLOCK
	GuiControl,4:,SAVEDCOLOREDIT,% GREYSCALECOLORBLOCK
}
UPDATERGBCOLORBLOCK(REDSLIDERVALUEt,GREENSLIDERVALUEt,BLUESLIDERVALUEt,GREYSCALESLIDERVALUEt){
	GuiControl,3:,GREYSCALEDECVALUE,% GREYSCALESLIDERVALUEt
	GuiControl,3:,REDDECVALUE,% REDSLIDERVALUEt
	GuiControl,3:,GREENDECVALUE,% GREENSLIDERVALUEt
	GuiControl,3:,BLUEDECVALUE,% BLUESLIDERVALUEt
	SETFORMAT , INTEGER , HEX
	REDSLIDERVALUEt += 0 , GREENSLIDERVALUEt += 0 , BLUESLIDERVALUEt += 0 , GREYSCALESLIDERVALUEt += 0
	StringTrimLeft,GREYSCALESLIDERVALUEt,GREYSCALESLIDERVALUEt,2
	StringTrimLeft,REDSLIDERVALUEt,REDSLIDERVALUEt,2
	StringTrimLeft,GREENSLIDERVALUEt,GREENSLIDERVALUEt,2
	StringTrimLeft,BLUESLIDERVALUEt,BLUESLIDERVALUEt,2
	SETFORMAT , INTEGER , DECIMAL
	(strlen(GREYSCALESLIDERVALUEt)=1)?(GREYSCALESLIDERVALUEt:="0" GREYSCALESLIDERVALUEt)
	(strlen(REDSLIDERVALUEt)=1)?(REDSLIDERVALUEt:="0" REDSLIDERVALUEt)
	(strlen(GREENSLIDERVALUEt)=1)?(GREENSLIDERVALUEt:="0" GREENSLIDERVALUEt)
	(strlen(BLUESLIDERVALUEt)=1)?(BLUESLIDERVALUEt:="0" BLUESLIDERVALUEt)
	GuiControl,3:,GREYSCALEHEXVALUE,% GREYSCALESLIDERVALUEt
	GREYSCALESLIDERVALUEt.= GREYSCALESLIDERVALUEt GREYSCALESLIDERVALUEt
	GREYSCALECOLORBLOCK := GREYSCALESLIDERVALUEt
	GuiControl,3:,REDHEXVALUE,% REDSLIDERVALUEt
	GuiControl,3:,GREENHEXVALUE,% GREENSLIDERVALUEt
	GuiControl,3:,BLUEHEXVALUE,% BLUESLIDERVALUEt
	RGBCOLORBLOCK:= REDSLIDERVALUEt . GREENSLIDERVALUEt . BLUESLIDERVALUEt
	GuiControl, 3: +c%RGBCOLORBLOCK% , RGBCOLORBLOCK,
	GuiControl, 3: +c%GREYSCALECOLORBLOCK% , GREYSCALECOLORBLOCK,
}
ADD_COLOR_DISPLAYS(){
	Gui,3:Add,Progress,x7 y6 w235 h100 Background222222
	DRAW_OUTLINE( 3 , 6 , 5 , 237 , 102 , "444444" , "black" )
	Gui, 3:Add,Progress,x20 y15 w130 h80 BackgroundBlack c%RGBCOLORBLOCK% vRGBCOLORBLOCK, 100
	DRAW_OUTLINE( 3 , 19 , 14 , 132 , 82 , "111111" , "111111" )
	Gui, 3:Add,Progress,x160 y15 w70 h80 BackgroundBlack c%GREYSCALECOLORBLOCK% vGREYSCALECOLORBLOCK, 100
	DRAW_OUTLINE( 3 , 159 , 14 , 72 , 82 , "111111" , "111111" )
}
Random_Colour(Range_R_Min:=0,Range_R_Max:=255,Range_G_Min:=0,Range_G_Max:=255,Range_B_Min:=0,Range_B_Max:=255){
	 RGBCOLOR := { 1 : ( Random( Range_R_Min , Range_R_Max ) ) , 2 : Random( Range_G_Min , Range_G_Max ) , 3 : Random( Range_B_Min , Range_B_Max ) }
	FOR COLOR IN RGBCOLOR	{
		SETFORMAT , INTEGER , HEX
		RGBCOLOR[ A_INDEX ] += 0
		TEMP := RGBCOLOR[A_INDEX]
		STRINGREPLACE , TEMP , TEMP , 0x 
		RGBCOLOR[A_INDEX] := TEMP
		SETFORMAT , INTEGER , DECIMAL	
		IF( STRLEN( RGBCOLOR[ A_INDEX ] ) < 2 )
			RGBCOLOR[ A_INDEX ] := "0" RGBCOLOR[ A_INDEX ]
		TEMPCOLOR .= RGBCOLOR[ A_INDEX ]
	}
	RETURN TEMPCOLOR
}
Random(MIN,MAX){
	Random,OUTPUT,MIN,MAX
	return OUTPUT
}
pButton_StartUp(){
	SetTimer,Watch_Hover,10
}
Watch_Hover(){
	global
	if(Press_active=0){
		if(Hover_On=0){
			MouseGetPos,,,,ctrl,2
			loop,% pButton.Length()	{
				GuiControlGet,cName,% pButton[A_Index].Window_Name ":Name",% ctrl
				cut:=Strlen(cName)
				StringLeft,bName,cName,cut-2
					if(bname=pButton[A_Index].Button_Name){
						pButton[A_Index].Button_Hover_On()
						Hover_On:=1,Active_Button:=bname,win:=pButton[A_Index].Window_Name
						return
					}
			}
		}else if(Hover_On=1){
			MouseGetPos,,,,ctrl,2
			GuiControlGet,cName,%win%:Name,% ctrl
			cut:=Strlen(cName)
			StringLeft,nBName,cName,cut-2
			if(NbName!=Active_Button){
				pButton[Active_Button].Button_Hover_Off(),Hover_On:=0,Active_Button:=""
			}
		}
	}
}
Class Progress_Button	{
	__New(Window_Name,Button_Name,Label,x,y,w,h,BC,TRC,TC1,TC2,TC3,Button_Text,Text_Offset:=0){
		This.Text_Offset:=Text_Offset,This.Window_Name:=Window_Name,This.Button_Name:=Button_Name,This.Label:=Label
		This.Button_ID1:=Button_Name "_1",This.Button_ID2:=Button_Name "_2",This.Button_ID3:=Button_Name "_3",This.Button_ID4:=Button_Name "_4"
		This.Button_Text:=Button_Text,This.X:=x,This.Y:=y,This.W:=w,This.H:=h
		This.Bottom_Color:=BC,This.Trim_Color:=TRC,This.Top_Color_1:=TC1,This.Top_Color_2:=TC2,This.Top_Color_3:=TC3
		This.Add_Button()
	}
	Add_Button(){
		global
		Gui,% This.Window_Name ":Add",Text,% "x" This.X " y" This.Y " w" This.W " h" This.H " v" This.Button_Name " g" This.Label
		Gui,% This.Window_Name ":Add",Progress,% "x" This.X " y" This.Y " w" This.W " h" This.H " Background" This.Bottom_Color " v" This.Button_ID1
		Gui,% This.Window_Name ":Add",Progress,% "x" This.X " y" This.Y " w" This.W-1 " h" This.H-1 " Background" This.Trim_Color " v" This.Button_ID2
		Gui,% This.Window_Name ":Add",Progress,% "x" This.X+1 " y" This.Y+1 " w" This.W-2 " h" This.H-2 " Background" This.Top_Color_1 " v" This.Button_ID3
		Gui,% This.Window_Name ":Add",Text,% "x" This.X+1 " y" This.Y+This.Text_Offset " w" This.W-2 "  Center BackgroundTrans v" This.Button_ID4,% This.Button_Text
	}
	Button_Press(){
		global
		Press_Active:=1
		GuiControl,% This.Window_Name ":Move",% This.Button_ID4,% "x" This.X+1 " y" This.Y+1+This.Text_Offset
		sleep,-1
		GuiControl,% This.Window_Name ":Hide",This.Button_ID2
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_3,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID1
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
		While(GetKeyState("LButton"))
			Sleep, 10
		MouseGetPos,,,,ctrl,2
		GuiControlGet,cName,% win ":Name",% ctrl
		cut:=Strlen(cName)
		StringLeft,bName,cName,cut-2
		if(bname=This.Button_Name){
			GuiControl,% This.Window_Name ":Show",This.Button_ID2
			GuiControl,% This.Window_Name ":+Background" This.Top_Color_1,% This.Button_ID3
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID1
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID2
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID3
			GuiControl,% This.Window_Name ":Move",% This.Button_ID4,% "x" This.X " y" This.Y+This.Text_Offset
			GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
			%bName%.Button_Hover_On(),Hover_On:=0,Active_Button:=bname,Press_Active:=0
			sleep,10
			return true
		}
		GuiControl,% This.Window_Name ":Show",This.Button_ID2
		GuiControl,% This.Window_Name ":Move",% This.Button_ID4,% "x" This.X " y" This.Y+This.Text_Offset
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_1,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID1
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID2
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
		Hover_On:=0,Press_Active:=0
		sleep,10
		return False
	}
	Button_Hover_On(){
		global
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_2,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
	}
	Button_Hover_Off(){
		global
		GuiControl,% This.Window_Name ":+Background" This.Top_Color_1,% This.Button_ID3
		GuiControl,% This.Window_Name ":+Redraw",% This.Button_ID4
	}
}

User avatar
Hellbent
Posts: 2109
Joined: 23 Sep 2017, 13:34

Re: Color Picker

Post by Hellbent » 01 Feb 2023, 13:08

Version 3.1
Requires Windows 8+

.
20230201121111.png
20230201121111.png (233.74 KiB) Viewed 640 times
.
20230201124643.png
20230201124643.png (296.01 KiB) Viewed 640 times
.
color picker 3.gif
color picker 3.gif (601.7 KiB) Viewed 640 times
.

Code: Select all

;Color Picker v3.1
;Written By: HB
;Date Written: Feb 1st, 2023
;Last Edit: Feb 1st, 2023
;Log: 2nd to last color swatch is based off of the first two saved colors in the top left of the window.
;

;****************************************************************************************************************************************************************************
#Include <My Altered GDIP LIB> ;<<<--- ( GDIP ) https://www.autohotkey.com/boards/viewtopic.php?f=6&t=6517
;~ #Include <PopUpWindow_V2> ; At the bottom of the script 
;~ #Include <HB Vectors v2>  ; At the bottom of the script
;****************************************************************************************************************************************************************************
#SingleInstance, Force
SetBatchLines, -1
SetControlDelay, -1
Gdip_Startup()

Scale := 1
Gui1 := New PopUpWindow( { AutoShow: 1 , X: A_ScreenWidth - 400 * Scale , Y: 150 , W: 370 * Scale , H: 220 * Scale , Options: " -DPIScale +AlwaysOnTop " } )

Gui1.Scale := Scale

Gui1.Controls := {}
Gui1.Handles := []

Gui1.Controls.MoveButton := 			{ X: 44 , Y: 40 , W: 170 , H: 15 , Method: "MoveWindow" } 						;Done
Gui1.Controls.CloseButton := 			{ X: 315 , Y: 40 , W: 18 , H: 15 , Method: "GuiClose" }							;Done
Gui1.Controls.RedHex := 				{ X: 224 , Y: 40 , W: 20 , H: 15 , Method: "AdjustRedHexValue" }				;Done
Gui1.Controls.GreenHex := 				{ X: 254 , Y: 40 , W: 20 , H: 15 , Method: "AdjustGreenHexValue" }				;Done
Gui1.Controls.BlueHex := 				{ X: 284 , Y: 40 , W: 20 , H: 15 , Method: "AdjustBlueHexValue" }				;Done
Gui1.Controls.ColorPalette := 			{ X: 20 , Y: 80 , W: 332 , H: 72 , Method: "SelectColorFromPalette" }			;Done
Gui1.Controls.ActiveColorDisplay := 	{ X: 20 , Y: 170 , W: 30 , H: 30 , Method: "ClipboardColor" }					;Done
Gui1.Controls.UseHexPrefixCheckBox := 	{ X: 60 , Y: 165 , W: 50 , H: 35 , Method: "ToggleUseHexPrefix" , Value: 1 }	;Done
Gui1.Controls.RGBRadio := 				{ X: 120 , Y: 165 , W: 50 , H: 35 , Method: "SetRGBOutputType" }				;Done
Gui1.Controls.ARGBRadio := 				{ X: 180 , Y: 165 , W: 50 , H: 35 , Method: "SetARGBOutputType" }				;Done
Gui1.Controls.ListCheckbox := 			{ X: 240 , Y: 165 , W: 50 , H: 35 , Method: "CreateColorList" , Value: 0 }		;Done
Gui1.Controls.AutoClipCheckbox := 		{ X: 300 , Y: 165 , W: 50 , H: 35 , Method: "ToggleAutoClip" , Value: 0 }		;Done


for k , v in Gui1.Controls	{
	cc := Gui1.Controls[ k ]
	Gui, % Gui1.Hwnd ":Add", Text, % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale " hwndhwnd g" cc.Method
	cc.Hwnd := Hwnd
	cc.Name := k
	Gui1.Handles[ hwnd ] := cc
}

Gui1.SavedColors := []
Loop, 36	{
	iniRead, outColor, % A_ScriptFullPath, SavedColorData , Color_%A_Index%
	Gui1.SavedColors[ A_Index ] := outColor
}

Gui1.SavedColorButtons := []	;Done
Index := 0
w := 15 , h := 15
y := 20 
;colors 1 - 34
Loop, 2	{
	x := 18
	Loop, 17	{
		++Index
		Gui1.SavedColorButtons[ Index ] := { X: x , Y: y , W: w , H: h , Method: "SavedColorsPalette" , Color: Gui1.SavedColors[ Index ] , Index: Index }
		x += 20
	}
	y += 40
}

;color 35
++Index
Gui1.SavedColorButtons[ Index ] := { X: 18 , Y: 40 , W: w , H: h , Method: "SavedColorsPalette" , Color: Gui1.SavedColors[ Index ] , Index: Index }

;color 36
++Index
Gui1.SavedColorButtons[ Index ] := { X: ( 18 + 16 * 20 ) , Y: 40 , W: w , H: h , Method: "SavedColorsPalette" , Color: Gui1.SavedColors[ Index ] , Index: Index }

Loop, 36	{
	cc := Gui1.SavedColorButtons[ A_Index ]
	Gui, % Gui1.Hwnd ":Add", Text, % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale " hwndhwnd g" cc.Method
	Gui1.Handles[ hwnd ] := cc
	cc.Hwnd := hwnd
}


Gui1.ColorList := ""

Gui1.OutputType 	:= 2

Gui1.AlphaValue 	:= "FF"
Gui1.RedValue 		:= "FF"
Gui1.GreenValue 	:= "FF"
Gui1.BlueValue 		:= "FF"

Gui1.AlphaDec := 255
Gui1.RedDec := 255
Gui1.GreenDec := 255
Gui1.BlueDec := 255

Gui1.Tog := 0
Gui1.LastScale := Gui1.Scale

Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )

return
GuiClose:
;~ *ESC::
	ExitApp


#If WinActive( "ahk_Id " Gui1.Hwnd )
	
	^UP::
		Gui1.Tog := 0
		ls := Gui1.Scale
		( ( Gui1.Scale += .25 ) > 3 ) ? ( Gui1.Scale := 3 )
		if( ls != Gui1.Scale ){
			for k , v in Gui1.Controls	{
				cc := Gui1.Controls[ k ]
				GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
			}
			Loop, 36	{
				cc := Gui1.SavedColorButtons[ A_Index ]
				GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
			}
			Gui1.UpdateSettings( { X: A_ScreenWidth - 400 * Gui1.Scale , Y: 150 , W: 370 * Gui1.Scale , H: 220 * Gui1.Scale } , 1 )
			Gui1.ClearWindow()
			Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
		}
		Sleep, 100
		return
		
	^Down::
		Gui1.Tog := 0
		ls := Gui1.Scale
		( ( Gui1.Scale -= .25 ) < .25 ) ? ( Gui1.Scale := .25 )
		if( ls != Gui1.Scale ){
			for k , v in Gui1.Controls	{
				cc := Gui1.Controls[ k ]
				GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
			}
			Loop, 36	{
				cc := Gui1.SavedColorButtons[ A_Index ]
				GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
			}
			Gui1.UpdateSettings( { X: A_ScreenWidth - 400 * Gui1.Scale , Y: 150 , W: 370 * Gui1.Scale , H: 220 * Gui1.Scale } , 1 )
			Gui1.ClearWindow()
			Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
		}
		Sleep, 100
		return
	
	
	Left::
		MouseMove, -1 , 0 ,, R
		return
	
	Right::
		MouseMove, 1 , 0 ,, R
		return
		
	+Left::
		MouseMove, -10 , 0 ,, R
		return
	
	+Right::
		MouseMove, 10 , 0 ,, R
		return
	
	Down::
	+Down::
	Up::
	+Up::	
		gosub, SelectColorFromPalette
		return
		
#If 

GuiContextMenu:
	if( Gui1.Tog := !Gui1.Tog ){
		
		Gui1.LastScale := Gui1.Scale
		Gui1.Scale := 0.25
		for k , v in Gui1.Controls	{
			cc := Gui1.Controls[ k ]
			GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
		}
		Loop, 36	{
			cc := Gui1.SavedColorButtons[ A_Index ]
			GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
		}
	}else{
		Gui1.Scale := Gui1.LastScale
		for k , v in Gui1.Controls	{
			cc := Gui1.Controls[ k ]
			GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
		}
		Loop, 36	{
			cc := Gui1.SavedColorButtons[ A_Index ]
			GuiControl, % Gui1.Hwnd ":Move" , % cc.Hwnd , % "x" cc.X * Gui1.Scale " y" cc.Y * Gui1.Scale " w" cc.W * Gui1.Scale " h" cc.H * Gui1.Scale
		}
	}
	Gui1.UpdateSettings( { X: A_ScreenWidth - 400 * Gui1.Scale , Y: 150 , W: 370 * Gui1.Scale , H: 220 * Gui1.Scale } , 1 )
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	return

MoveWindow:
	if( GetKeyState( "Shift" ) ){
		oV := Gui1.AlphaValue := "FF"
		oD := Gui1.AlphaDec := 255
		CoordMode, Mouse, Client
		MouseGetPos, x , y
		StartVector := New Vector( x , y )
		While( GetKeyState( "LButton" , "P" ) ){
			MouseGetPos, x , y
			EndVector := New Vector( x , y )
			dist := Floor( StartVector.Dist( EndVector ) - 30 )
			( ( Gui1.AlphaDec := 255 - Dist ) > 255 ) ? ( Gui1.AlphaDec := 255 ) : ( Gui1.AlphaDec < 0 ) ? ( Gui1.AlphaDec := 0 )
			Gui1.AlphaValue := FHex( Gui1.AlphaDec )
			( Gui1.AlphaDec <= 15 ) ? ( Gui1.AlphaValue := "0" SubStr( Gui1.AlphaValue , 3 ) ) : ( Gui1.AlphaValue := SubStr( Gui1.AlphaValue , 3 ) )
			
			if( oD != Gui1.AlphaDec || oV != Gui1.AlphaValue ){
				oV := Gui1.AlphaValue
				oD := Gui1.AlphaDec
				Gui1.ClearWindow()
				Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
				ToolTip, % Gui1.AlphaDec "`n" Gui1.AlphaValue
				Sleep, 30
			}
			
		}
		ToolTip,	
	}else{
		PostMessage, 0xA1, 2
		While( GetKeyState( "LButton" , "P" ) )
			Sleep, 30
		WinGetPos, x, y,,, % "ahk_id " Gui1.Hwnd
		Gui1.X := x , Gui1.Y := y
	}
	return

SavedColorsPalette:

	MouseGetPos,,,, ctrl , 2
	cc := Gui1.Handles[ ctrl ]
	if( GetKeyState( "Shift" ) ){
		CoordMode, Mouse, Screen
		CoordMode, Pixel, Screen
		colorWindow := New PopUpWindow( { AutoShow: 1 , X: "Center" , Y: "Center" , W: 60 , H: 60 , Options: " +AlwaysOnTop -DPIScale +Owner" Gui1.Hwnd } ) 
		While( !GetKeyState( "ctrl" ) ){
			ToolTip, Press ctrl to capture a color
			MouseGetPos, x , y
			PixelGetColor, oc , x , y , RGB
			colorwindow.UpdateSettings( { X: x + 50 , Y: y - 60 } )
			colorwindow.ClearWindow()
			colorwindow.PaintBackground( { Color: "0xFF" SubStr( oc , 3 ) , X: 2 , Y: 2 , W: colorwindow.W - 4 , H: colorwindow.H - 4 , Round: 10 } , AutoUpdate := 1 )
			Sleep, 30
		}
		ToolTip,
		colorwindow.DeleteWindow()
		cc.Color := SubStr( oc , 3 )
		IniWrite, % cc.Color , % A_ScriptFullPath , SavedColorData , % "Color_" cc.Index
		Gui1.ClearWindow()
		Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
		Sleep, 100	
		
	}else{
		Gui1.RedValue := SubStr( cc.Color , 1 , 2 )
		Gui1.GreenValue := SubStr( cc.Color , 3 , 2 )
		Gui1.BlueValue := SubStr( cc.Color , 5 , 2 )
		Gui1.ClearWindow()
		Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
		Sleep, 100	
	}
	GoSub, CheckList
	return

AdjustRedHexValue:
	oV := Gui1.RedValue := "FF"
	oD := Gui1.RedDec := 255
	CoordMode, Mouse, Client
	MouseGetPos, x , y
	StartVector := New Vector( x , y )
	While( GetKeyState( "LButton" , "P" ) ){
		MouseGetPos, x , y
		EndVector := New Vector( x , y )
		dist := Floor( StartVector.Dist( EndVector ) - 10 )
		( ( Gui1.RedDec := 255 - Dist ) > 255 ) ? ( Gui1.RedDec := 255 ) : ( Gui1.RedDec < 0 ) ? ( Gui1.RedDec := 0 )
		Gui1.RedValue := FHex( Gui1.RedDec )
		( Gui1.RedDec <= 15 ) ? ( Gui1.RedValue := "0" SubStr( Gui1.RedValue , 3 ) ) : ( Gui1.RedValue := SubStr( Gui1.RedValue , 3 ) )
		
		if( oD != Gui1.RedDec || oV != Gui1.RedValue ){
			oV := Gui1.RedValue
			oD := Gui1.RedDec
			Gui1.ClearWindow()
			Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
			ToolTip, % Gui1.RedDec "`n" Gui1.RedValue
			Sleep, 30
		}
		
	}
	ToolTip,
	return
	
AdjustGreenHexValue:
	oV := Gui1.GreenValue := "FF"
	oD := Gui1.GreenDec := 255
	CoordMode, Mouse, Client
	MouseGetPos, x , y
	StartVector := New Vector( x , y )
	While( GetKeyState( "LButton" , "P" ) ){
		MouseGetPos, x , y
		EndVector := New Vector( x , y )
		dist := Floor( StartVector.Dist( EndVector ) - 10 )
		( ( Gui1.GreenDec := 255 - Dist ) > 255 ) ? ( Gui1.GreenDec := 255 ) : ( Gui1.GreenDec < 0 ) ? ( Gui1.GreenDec := 0 )
		Gui1.GreenValue := FHex( Gui1.GreenDec )
		( Gui1.GreenDec <= 15 ) ? ( Gui1.GreenValue := "0" SubStr( Gui1.GreenValue , 3 ) ) : ( Gui1.GreenValue := SubStr( Gui1.GreenValue , 3 ) )
		if( oD != Gui1.GreenDec || oV != Gui1.GreenValue ){
			oV := Gui1.GreenValue
			oD := Gui1.GreenDec
			Gui1.ClearWindow()
			Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
			ToolTip, % Gui1.GreenDec "`n" Gui1.GreenValue
			Sleep, 30
		}
		
	}
	ToolTip,
	return

AdjustBlueHexValue:
	oV := Gui1.BlueValue := "FF"
	oD := Gui1.BlueDec := 255
	CoordMode, Mouse, Client
	MouseGetPos, x , y
	StartVector := New Vector( x , y )
	While( GetKeyState( "LButton" , "P" ) ){
		MouseGetPos, x , y
		EndVector := New Vector( x , y )
		dist := Floor( StartVector.Dist( EndVector ) - 10 )
		( ( Gui1.BlueDec := 255 - Dist ) > 255 ) ? ( Gui1.BlueDec := 255 ) : ( Gui1.BlueDec < 0 ) ? ( Gui1.BlueDec := 0 )
		Gui1.BlueValue := FHex( Gui1.BlueDec )
		( Gui1.BlueDec <= 15 ) ? ( Gui1.BlueValue := "0" SubStr( Gui1.BlueValue , 3 ) ) : ( Gui1.BlueValue := SubStr( Gui1.BlueValue , 3 ) )
		if( oD != Gui1.BlueDec || oV != Gui1.BlueValue ){
			oV := Gui1.BlueValue
			oD := Gui1.BlueDec
			Gui1.ClearWindow()
			Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
			ToolTip, % Gui1.BlueDec "`n" Gui1.BlueValue
			Sleep, 30
		}
		
	}
	ToolTip,
	return

SelectColorFromPalette:
	CoordMode, Pixel , client
	CoordMode, Mouse , client
	MouseGetPos, x , y
	PixelGetColor, outColor , x , y , RGB
		
	Gui1.RedValue := SubStr( outColor , 3 , 2 )
	Gui1.GreenValue := SubStr( outColor , 5 , 2 )
	Gui1.BlueValue := SubStr( outColor , 7 , 2 )
		
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	Sleep, 30
	While( GetKeyState( "LButton" , "P" ) ){
		MouseGetPos, x , y
		PixelGetColor, outColor , x , y , RGB
		
		Gui1.RedValue := SubStr( outColor , 3 , 2 )
		Gui1.GreenValue := SubStr( outColor , 5 , 2 )
		Gui1.BlueValue := SubStr( outColor , 7 , 2 )
		
		Gui1.ClearWindow()
		Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
		Sleep, 30
	}
	CheckList:
	if( Gui1.Controls.AutoClipCheckbox.Value ){
		
		if( Gui1.Controls.ListCheckbox.Value ){
			
			
			if( Gui1.Controls.UseHexPrefixCheckBox.Value ){
				
				if( Gui1.OutputType = 1 ){
					if(  StrLen( Gui1.ColorList ) < 6 ){
						
						Clipboard := Gui1.ColorList .= """0x" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """0x" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}else{
					if(  StrLen( Gui1.ColorList ) < 6 ){
						Clipboard := Gui1.ColorList .= """0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}
			}else{
				if( Gui1.OutputType = 1 ){
					if(  StrLen( Gui1.ColorList ) < 6 ){
						
						Clipboard := Gui1.ColorList .= """" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}else{
					if(  StrLen( Gui1.ColorList ) < 6 ){
						Clipboard := Gui1.ColorList .= """" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}
			}
			
		}else{
			
			Clipboard := ( Gui1.Controls.UseHexPrefixCheckBox.Value ) ? ( ( Gui1.OutputType = 1 ) ? ( "0x" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) : ( "0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) ) : ( ( Gui1.OutputType = 1 ) ? ( Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) : ( Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) )
		
		}
		
		SoundBeep,
	}
	return

ClipboardColor:
	if( Gui1.Controls.ListCheckbox.Value ){
			
			
			if( Gui1.Controls.UseHexPrefixCheckBox.Value ){
				
				if( Gui1.OutputType = 1 ){
					if(  StrLen( Gui1.ColorList ) < 6 ){
						
						Clipboard := Gui1.ColorList .= """0x" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """0x" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}else{
					if(  StrLen( Gui1.ColorList ) < 6 ){
						Clipboard := Gui1.ColorList .= """0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}
			}else{
				if( Gui1.OutputType = 1 ){
					if(  StrLen( Gui1.ColorList ) < 6 ){
						
						Clipboard := Gui1.ColorList .= """" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}else{
					if(  StrLen( Gui1.ColorList ) < 6 ){
						Clipboard := Gui1.ColorList .= """" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}else{
						Gui1.ColorList := SubStr( Gui1.ColorList , 1 , StrLen( Gui1.ColorList ) - 1 )
						Clipboard := Gui1.ColorList .= ", " """" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue """" " ]"
					}
				}
			}
			;~ SoundBeep,
		}else{
			Clipboard := ( Gui1.Controls.UseHexPrefixCheckBox.Value ) ? ( ( Gui1.OutputType = 1 ) ? ( "0x" Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) : ( "0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) ) : ( ( Gui1.OutputType = 1 ) ? ( Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) : ( Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) )
		}
		SoundBeep,
	return

ToggleUseHexPrefix:
	Gui1.Controls.UseHexPrefixCheckBox.Value := !Gui1.Controls.UseHexPrefixCheckBox.Value
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	Sleep, 30
	return
	
SetRGBOutputType:
	Gui1.OutputType := 1
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	Sleep, 30
	return

SetARGBOutputType:
	Gui1.OutputType := 2
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	Sleep, 30
	return

CreateColorList:
	Gui1.ColorList := "[ "
	Gui1.Controls.ListCheckbox.Value := !Gui1.Controls.ListCheckbox.Value
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	Sleep, 30
	return

ToggleAutoClip:
	Gui1.Controls.AutoClipCheckbox.Value := !Gui1.Controls.AutoClipCheckbox.Value
	Gui1.ClearWindow()
	Gui1.DrawBitmap( ColorPickerv3Graphics( Gui1 , Gui1.Scale ) , { X: 0 , Y: 0 , W: Gui1.W , H: Gui1.H } , dispose := 1 , AutoUpdate := 1 )
	Sleep, 30
	return

_GetGray( OUTPUTCOLOR ){ ;From HB color picker v2
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	StringLeft , r ,  OUTPUTCOLOR , 2
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	StringLeft , g ,  OUTPUTCOLOR , 2
	StringTrimLeft,OUTPUTCOLOR,OUTPUTCOLOR,2
	StringLeft , b ,  OUTPUTCOLOR , 2
	r := "0x" r , g := "0x" g , b := "0x" b
	REDSLIDERVALUE:=r+0,GreenSLIDERVALUE:=g+0,BlueSLIDERVALUE:=b+0
	GreyScaleSLIDERVALUE:=Round((REDSLIDERVALUE+GreenSLIDERVALUE+BlueSLIDERVALUE)/3)
	return GreyScaleSLIDERVALUE
}

ColorPickerv3Graphics( Gui1 , ScaleFactor := 1 ){
	;Bitmap Created Using: HB Bitmap Maker
	pBitmap := Gdip_CreateBitmap( 370 * ScaleFactor , 220 * ScaleFactor ) , G := Gdip_GraphicsFromImage( pBitmap ) , Gdip_SetSmoothingMode( G , 2 )
	Brush := Gdip_BrushCreateSolid( "0x99004444" ) , Gdip_FillRoundedRectangle( G , Brush , 10 * ScaleFactor , 10 * ScaleFactor , 350 * ScaleFactor , 200 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrush( 166 * ScaleFactor , 43 * ScaleFactor , 220 * ScaleFactor , 62 * ScaleFactor , "0x3300ff00" , "0x33ffff00" , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 10 * ScaleFactor , 10 * ScaleFactor , 350 * ScaleFactor , 200 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 173 * ScaleFactor , 11 * ScaleFactor , 187 * ScaleFactor , 149 * ScaleFactor , "0xff444444" , "0xff222222" , 0 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 15 * ScaleFactor , 15 * ScaleFactor , 340 * ScaleFactor , 140 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	w := 15 , h := 15
	y := 20 
	Index := 0
	;colors 1 - 34
	Loop, 2	{
		x := 18
		Loop, 17	{
			Brush := Gdip_BrushCreateSolid( "0xFF" Gui1.SavedColorButtons[ ++Index ].Color ) , Gdip_FillEllipse( G , Brush , x * ScaleFactor , y * ScaleFactor , w * ScaleFactor , h * ScaleFactor ) , Gdip_DeleteBrush( Brush )
			x += 20
		}
		y += 40
	}
	;color 35
	Brush := Gdip_BrushCreateSolid( "0xFF" Gui1.SavedColorButtons[ ++Index ].Color ) , Gdip_FillEllipse( G , Brush , 18 * ScaleFactor , 40 * ScaleFactor , w * ScaleFactor , h * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;color 36
	Brush := Gdip_BrushCreateSolid( "0xFF" Gui1.SavedColorButtons[ ++Index ].Color ) , Gdip_FillEllipse( G , Brush , ( 18 + 16 * 20 ) * ScaleFactor , 40 * ScaleFactor , w * ScaleFactor , h * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;red
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 80 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFFff0000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 80 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 80 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFFF0000" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 80 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Yellow
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 85 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFFffFF00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 85 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 85 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFFFFF00" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 85 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Green
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 90 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFF00FF00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 90 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 90 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF00FF00" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 90 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Aqua
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 95 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFF00FFFF" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 95 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 95 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF00ffff" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 95 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Blue
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 100 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFF0000ff" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 100 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 100 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF0000ff" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 100 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Purple
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 105 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFFff00FF" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 105 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 105 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFff00ff" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 105 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Red and Yellow
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 110 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFFFFF00" , "0xFFff0000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 110 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Red and green
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 110 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFff0000" , "0xFF00FF00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 110 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Red and aqua
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 115 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF00FFFF" , "0xFFff0000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 115 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Red and blue
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 115 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFff0000" , "0xFF0000ff" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 115 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Red and Purple
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 120 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFFF00ff" , "0xFFff0000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 120 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Yellow and green
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 120 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffFF00" , "0xFF00FF00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 120 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Yellow and aqua
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 115 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF00FFFF" , "0xFFffff00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 125 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Yellow and Blue
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 125 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFffff00" , "0xFF0000ff" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 125 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Yellow and Purple
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 130 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFFFF00ff" , "0xFFffff00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 130 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Grenn and Aqua
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 130 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF00ff00" , "0xFF00FFFF" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 130 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Green and Blue
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 135 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF0000fF" , "0xFF00ff00" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 135 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Green and Purple
	Brush := Gdip_CreateLineBrushFromRect( 185 * ScaleFactor , 135 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor , "0xFF00ff00" , "0xFFff00ff" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 185 * ScaleFactor , 135 * ScaleFactor , 165 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;User colors ( Uses the first two saved colors )
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 140 * ScaleFactor , 330 * ScaleFactor , 5 * ScaleFactor , "0xFF" Gui1.SavedColorButtons[ 1 ].Color , "0xFF" Gui1.SavedColorButtons[ 2 ].Color , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 140 * ScaleFactor , 330 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Black and White
	Brush := Gdip_CreateLineBrushFromRect( 20 * ScaleFactor , 145 * ScaleFactor , 330 * ScaleFactor , 5 * ScaleFactor , "0xFFffffff" , "0xFF000000" , 0 , 1 ) , Gdip_FillRectangle( G , Brush , 20 * ScaleFactor , 145 * ScaleFactor , 330 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 173 * ScaleFactor , 11 * ScaleFactor , 187 * ScaleFactor , 149 * ScaleFactor , "0xff444444" , "0xff222222" , 0 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 15 * ScaleFactor , 160 * ScaleFactor , 340 * ScaleFactor , 45 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;active color
	Brush := Gdip_CreateLineBrushFromRect( 22 * ScaleFactor , 172 * ScaleFactor , 30 * ScaleFactor , 25 * ScaleFactor , "0xaaF0F0F0" , "0xFF000000" , 1 , 1 ) , Gdip_FillEllipse( G , Brush , 20 * ScaleFactor , 170 * ScaleFactor , 30 * ScaleFactor , 30 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 28 * ScaleFactor , 176 * ScaleFactor , 16 * ScaleFactor , 17 * ScaleFactor , "0xaaF0F0F0" , "0xFF000000" , 1 , 1 ) , Gdip_FillEllipse( G , Brush , 22 * ScaleFactor , 172 * ScaleFactor , 26 * ScaleFactor , 26 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0x" Gui1.AlphaValue Gui1.RedValue Gui1.GreenValue Gui1.BlueValue ) , Gdip_FillEllipse( G , Brush , 23 * ScaleFactor , 173 * ScaleFactor , 24 * ScaleFactor , 24 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;0x Button
	Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 164 * ScaleFactor , 46 * ScaleFactor , 35 * ScaleFactor , "0x66000000" , "0x66F0F0F0" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 60 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 61 * ScaleFactor , 166 * ScaleFactor , 50 * ScaleFactor , 33 * ScaleFactor , "0x99F0F0F0" , "0x99000000" , 1 , 1 ) , Pen := Gdip_CreatePenFromBrush( Brush , 1 ) , Gdip_DeleteBrush( Brush ) , Gdip_DrawRectangle( G , Pen , 60 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeletePen( Pen )
	if( Gui1.Controls.UseHexPrefixCheckBox.Value ){
		;active
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 62 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		;active
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 64 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		;active
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "0x" , "s" 20 * ScaleFactor " Center vCenter  c" Brush " x" 66 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		;active
		Brush := Gdip_BrushCreateSolid( "0xFF00ffff" ) , Gdip_TextToGraphics( G , "0x" , "s" 20 * ScaleFactor " Center vCenter  c" Brush " x" 65 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}else{
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF62666a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 62 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		;not active
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF32363a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 64 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		;Not active
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "0x" , "s" 20 * ScaleFactor " Center vCenter  c" Brush " x" 66 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		;Not active
		Brush := Gdip_BrushCreateSolid( "0xFFF0F0F0" ) , Gdip_TextToGraphics( G , "0x" , "s" 20 * ScaleFactor " Center vCenter  c" Brush " x" 65 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}
	;RGB
	Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 164 * ScaleFactor , 46 * ScaleFactor , 35 * ScaleFactor , "0x66000000" , "0x66F0F0F0" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 120 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 61 * ScaleFactor , 166 * ScaleFactor , 50 * ScaleFactor , 33 * ScaleFactor , "0x99F0F0F0" , "0x99000000" , 1 , 1 ) , Pen := Gdip_CreatePenFromBrush( Brush , 1 ) , Gdip_DeleteBrush( Brush ) , Gdip_DrawRectangle( G , Pen , 120 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeletePen( Pen )
	if( Gui1.OutputType = 1 ){
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 122 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 124 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "RGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 126 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF00ffff" ) , Gdip_TextToGraphics( G , "RGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 125 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}else{
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF62666a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 122 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF32363a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 124 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "RGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 126 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFFF0F0F0" ) , Gdip_TextToGraphics( G , "RGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 125 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}
	;ARGB
	Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 164 * ScaleFactor , 46 * ScaleFactor , 35 * ScaleFactor , "0x66000000" , "0x66F0F0F0" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 180 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 61 * ScaleFactor , 166 * ScaleFactor , 50 * ScaleFactor , 33 * ScaleFactor , "0x99F0F0F0" , "0x99000000" , 1 , 1 ) , Pen := Gdip_CreatePenFromBrush( Brush , 1 ) , Gdip_DeleteBrush( Brush ) , Gdip_DrawRectangle( G , Pen , 180 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeletePen( Pen )
	if( Gui1.OutputType = 2 ){
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 182 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 184 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "ARGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 186 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF00ffff" ) , Gdip_TextToGraphics( G , "ARGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 185 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}else{
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF62666a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 182 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF32363a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 184 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "ARGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 186 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFFF0F0F0" ) , Gdip_TextToGraphics( G , "ARGB" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 185 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}
	;List
	Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 164 * ScaleFactor , 46 * ScaleFactor , 35 * ScaleFactor , "0x66000000" , "0x66F0F0F0" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 240 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 61 * ScaleFactor , 166 * ScaleFactor , 50 * ScaleFactor , 33 * ScaleFactor , "0x99F0F0F0" , "0x99000000" , 1 , 1 ) , Pen := Gdip_CreatePenFromBrush( Brush , 1 ) , Gdip_DeleteBrush( Brush ) , Gdip_DrawRectangle( G , Pen , 240 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeletePen( Pen )
	if( Gui1.Controls.ListCheckbox.Value ){
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 242 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 244 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "List" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 246 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF00ffff" ) , Gdip_TextToGraphics( G , "List" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 245 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}else{
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF62666a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 242 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF32363a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 244 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "List" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 246 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFFF0F0F0" ) , Gdip_TextToGraphics( G , "List" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 245 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}
	;Auto Clip
	Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 164 * ScaleFactor , 46 * ScaleFactor , 35 * ScaleFactor , "0x66000000" , "0x66F0F0F0" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 300 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_CreateLineBrushFromRect( 61 * ScaleFactor , 166 * ScaleFactor , 50 * ScaleFactor , 33 * ScaleFactor , "0x99F0F0F0" , "0x99000000" , 1 , 1 ) , Pen := Gdip_CreatePenFromBrush( Brush , 1 ) , Gdip_DeleteBrush( Brush ) , Gdip_DrawRectangle( G , Pen , 300 * ScaleFactor , 165 * ScaleFactor , 50 * ScaleFactor , 35 * ScaleFactor ) , Gdip_DeletePen( Pen )
	if( Gui1.Controls.AutoClipCheckbox.Value ){
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 302 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF2121FF" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 304 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "Auto Clip" , "s" 8 * ScaleFactor " Center vCenter Bold c" Brush " x" 306 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF00ffff" ) , Gdip_TextToGraphics( G , "Auto Clip" , "s" 8 * ScaleFactor " Center vCenter Bold c" Brush " x" 305 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}else{
		Brush := Gdip_CreateLineBrushFromRect( 62 * ScaleFactor , 167 * ScaleFactor , 45 * ScaleFactor , 29 * ScaleFactor , "0xFF62666a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 302 * ScaleFactor , 167 * ScaleFactor , 46 * ScaleFactor , 31 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_CreateLineBrushFromRect( 67 * ScaleFactor , 170 * ScaleFactor , 41 * ScaleFactor , 92 * ScaleFactor , "0xFF32363a" , "0xFF000000" , 1 , 1 ) , Gdip_FillRoundedRectangle( G , Brush , 304 * ScaleFactor , 169 * ScaleFactor , 42 * ScaleFactor , 27 * ScaleFactor , 5 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "Auto Clip" , "s" 8 * ScaleFactor " Center vCenter Bold c" Brush " x" 306 * ScaleFactor " y" 171 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
		Brush := Gdip_BrushCreateSolid( "0xFFF0F0F0" ) , Gdip_TextToGraphics( G , "Auto Clip" , "s" 8 * ScaleFactor " Center vCenter Bold c" Brush " x" 305 * ScaleFactor " y" 170 * ScaleFactor  , "Comic Sans Ms" , 42 * ScaleFactor , 27 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	}
	;cp move
	Brush := Gdip_CreateLineBrushFromRect( 315 * ScaleFactor , 40 * ScaleFactor , 18 * ScaleFactor , 15 * ScaleFactor , "0xFF444444" , "0xFF22262a" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 44 * ScaleFactor , 40 * ScaleFactor , 170 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "HB Color Picker v3" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 44 * ScaleFactor " y" 40 * ScaleFactor  , "Segoe UI" , 170 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF222222" ) , Gdip_TextToGraphics( G , "HB Color Picker v3" , "s" 12 * ScaleFactor " Center vCenter Bold c" Brush " x" 44 * ScaleFactor " y" 40 * ScaleFactor  , "Segoe UI" , 170 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;close button
	Brush := Gdip_CreateLineBrushFromRect( 315 * ScaleFactor , 40 * ScaleFactor , 18 * ScaleFactor , 15 * ScaleFactor , "0xFF444444" , "0xFF22262a" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 314 * ScaleFactor , 40 * ScaleFactor , 20 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF000000" ) , Gdip_TextToGraphics( G , "x" , "s" 16 * ScaleFactor " Center vCenter Bold c" Brush " x" 316 * ScaleFactor " y" 40 * ScaleFactor  , "Segoe UI" , 20 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFFacacac" ) , Gdip_TextToGraphics( G , "x" , "s" 16 * ScaleFactor " Center vCenter Bold c" Brush " x" 315 * ScaleFactor " y" 39 * ScaleFactor  , "Segoe UI" , 20 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Red Hex
	Brush := Gdip_CreateLineBrushFromRect( 315 * ScaleFactor , 40 * ScaleFactor , 18 * ScaleFactor , 15 * ScaleFactor , "0xFF444444" , "0xFF22262a" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 224 * ScaleFactor , 40 * ScaleFactor , 20 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF222222" ) , Gdip_FillRectangle( G , Brush , 226 * ScaleFactor , 42 * ScaleFactor , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xff000000" ) , Gdip_TextToGraphics( G , Gui1.RedValue , "s" 8 * ScaleFactor " Center vCenter  c" Brush " x" 228 * ScaleFactor " y" 43 * ScaleFactor  , "Segoe UI" , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFFFF0000" ) , Gdip_TextToGraphics( G , Gui1.RedValue , "s" 8 * ScaleFactor " Center vCenter  c" Brush " x" 227 * ScaleFactor " y" 42 * ScaleFactor  , "Segoe UI" , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Green Hex
	Brush := Gdip_CreateLineBrushFromRect( 315 * ScaleFactor , 40 * ScaleFactor , 18 * ScaleFactor , 15 * ScaleFactor , "0xFF444444" , "0xFF22262a" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 254 * ScaleFactor , 40 * ScaleFactor , 20 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF222222" ) , Gdip_FillRectangle( G , Brush , 256 * ScaleFactor , 42 * ScaleFactor , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xff000000" ) , Gdip_TextToGraphics( G , Gui1.GreenValue , "s" 8 * ScaleFactor " Center vCenter  c" Brush " x" 258 * ScaleFactor " y" 43 * ScaleFactor  , "Segoe UI" , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF00ff00" ) , Gdip_TextToGraphics( G , Gui1.GreenValue , "s" 8 * ScaleFactor " Center vCenter  c" Brush " x" 257 * ScaleFactor " y" 42 * ScaleFactor  , "Segoe UI" , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	;Blue Hex
	Brush := Gdip_CreateLineBrushFromRect( 315 * ScaleFactor , 40 * ScaleFactor , 18 * ScaleFactor , 15 * ScaleFactor , "0xFF444444" , "0xFF22262a" , 1 , 1 ) , Gdip_FillRectangle( G , Brush , 284 * ScaleFactor , 40 * ScaleFactor , 20 * ScaleFactor , 15 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF222222" ) , Gdip_FillRectangle( G , Brush , 286 * ScaleFactor , 42 * ScaleFactor , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xff000000" ) , Gdip_TextToGraphics( G , Gui1.BlueValue , "s" 8 * ScaleFactor " Center vCenter  c" Brush " x" 288 * ScaleFactor " y" 43 * ScaleFactor  , "Segoe UI" , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Brush := Gdip_BrushCreateSolid( "0xFF0000FF" ) , Gdip_TextToGraphics( G , Gui1.BlueValue , "s" 8 * ScaleFactor " Center vCenter  c" Brush " x" 287 * ScaleFactor " y" 42 * ScaleFactor  , "Segoe UI" , 16 * ScaleFactor , 11 * ScaleFactor ) , Gdip_DeleteBrush( Brush )
	Gdip_DeleteGraphics( G )
	return pBitmap
}

;*******************************************************************************************************************	
;*******************************************************************************************************************	
FHex( int, pad=0 ) { ; Function by [VxE]. Formats an integer (decimals are truncated) as hex.
	;https://www.autohotkey.com/board/topic/85571-dec-hex-without-setformat-command/
	; "Pad" may be the minimum number of digits that should appear on the right of the "0x".
	Static hx := "0123456789ABCDEF"
	If !( 0 < int |= 0 )
		Return !int ? "0x0" : "-" FHex( -int, pad )
	s := 1 + Floor( Ln( int ) / Ln( 16 ) )
	h := SubStr( "0x0000000000000000", 1, pad := pad < s ? s + 2 : pad < 16 ? pad + 2 : 18 )
	u := A_IsUnicode = 1
	Loop % s
		NumPut( *( &hx + ( ( int & 15 ) << u ) ), h, pad - A_Index << u, "UChar" ), int >>= 4
	Return h
}
;*******************************************************************************************************************	
;*******************************************************************************************************************
/*

[ SavedColorData ]
Color_1=B4D52A
Color_2=007689
Color_3=F9F906
Color_4=FFFF98
Color_5=006767
Color_6=007272
Color_7=007777
Color_8=007B7B
Color_9=008B8B
Color_10=009B9B
Color_11=00ABAB
Color_12=00BBBB
Color_13=00CBCB
Color_14=00DBDB
Color_15=00EBEB
Color_16=00FBFB
Color_17=FF00FF
Color_18=FBFFFF
Color_19=DCFFFF
Color_20=BDFFFF
Color_21=9DFFFF
Color_22=7EFFFF
Color_23=60FFFF
Color_24=3FFFFF
Color_25=20FFFF
Color_26=02FFFF
Color_27=00E3E3
Color_28=00C3C3
Color_29=00A3A3
Color_30=008585
Color_31=006868
Color_32=004646
Color_33=002929
Color_34=000909
Color_35=FF0000
Color_36=0B0BFF

*/
;####################################################################################################################################################################################
;####################################################################################################################################################################################
;####################################################################################################################################################################################
;####################################################################################################################################################################################
class PopUpWindow	{
;PopUpWindow v2.2
;Date Written: Oct 28th, 2021
;Last Edit: Feb 7th, 2022 :Changed the trigger method.
;Written By: Hellbent aka CivReborn
;SpcThanks: teadrinker , malcev 
	static Index := 0 , Windows := [] , Handles := [] , EditHwnd , HelperHwnd
	__New( obj := "" ){
		This._SetDefaults()
		This.UpdateSettings( obj )
		This._CreateWindow()
		This._CreateWindowGraphics()
		if( This.AutoShow )
			This.ShowWindow( This.Title )
	}
	_SetDefaults(){
		This.X := 10
		This.Y := 10
		This.W := 10
		This.H := 10
		This.Smoothing := 2
		This.Options := " -DPIScale +AlwaysOnTop "
		This.AutoShow := 0
		This.GdipStartUp := 0
		This.Title := ""
		
		This.Controls := []
		This.Handles := []
		This.Index := 0 
	}
	AddTrigger( obj ){
		local k , v , cc , bd
		
		This.Controls[ ++This.Index ] := { 	X:		10
										,	Y:		10
										,	W:		10
										,	H:		10	}
		for k, v in obj
			This.Controls[ This.Index ][ k ] := obj[ k ] 
		cc := This.Controls[ This.Index ]
		Gui, % This.Hwnd ":Add", Text, % "x" cc.X " y" cc.Y " w" cc.W " h" cc.H " hwndhwnd"
		This.Handles[ hwnd ] := This.Index
		This.Controls[ This.Index ].Hwnd := hwnd
		
		if( IsObject( cc.Label ) ){
			bd := cc.Label
			GuiControl, % This.Hwnd ":+G" , % hwnd , % bd
		}else{
			bd := This._TriggerCall.Bind( This )
			GuiControl, % This.Hwnd ":+G" , % hwnd , % bd
		}
		return hwnd
		
	}
	_TriggerCall(){
		MouseGetPos,,,, ctrl, 2
		Try
			;~ SetTimer, % This.Controls[ This.Handles[ ctrl ] ].Label, -0
			gosub, % This.Controls[ This.Handles[ ctrl ] ].Label
		
				
	}
	DrawTriggers( color := "0xFFFF0000" , AutoUpdate := 0 ){
		local brush , cc 
		Brush := Gdip_BrushCreateSolid( color ) 
		Gdip_SetSmoothingMode( This.G , 3 )
		loop, % This.Controls.Length()	{
			cc := This.Controls[ A_Index ]
			Gdip_FillRectangle( This.G , Brush , cc.x , cc.y , cc.w , cc.h )
		
		}
		Gdip_DeleteBrush( Brush )
		Gdip_SetSmoothingMode( This.G , This.Smoothing )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	UpdateSettings( obj := "" , UpdateGraphics := 0 ){
		local k , v
		if( IsObject( obj ) )
			for k, v in obj
				This[ k ] := obj[ k ]
		( This.X = "Center" ) ? ( This.X := ( A_ScreenWidth - This.W ) / 2 ) 	
		( This.Y = "Center" ) ? ( This.Y := ( A_ScreenHeight - This.H ) / 2 ) 	
		if( UpdateGraphics ){
			This._DestroyWindowsGraphics()
			This._CreateWindowGraphics()
		}
	}
	_CreateWindow(){
		local hwnd
		Gui , New, % " +LastFound +E0x80000 hwndhwnd -Caption  " This.Options
		PopUpWindow.Index++
		This.Index := PopUpWindow.Index
		PopUpWindow.Windows[ PopUpWindow.Index ] := This
		This.Hwnd := hwnd
		PopUpWindow.Handles[ hwnd ] := PopUpWindow.Index
		if( This.GdipStartUp && !PopUpWindow.pToken )
			PopUpWindow.pToken := GDIP_STARTUP()
	}
	_DestroyWindowsGraphics(){
		Gdip_DeleteGraphics( This.G )
		SelectObject( This.hdc , This.obm )
		DeleteObject( This.hbm )
		DeleteDC( This.hdc )
	}
	_CreateWindowGraphics(){
		This.hbm := CreateDIBSection( This.W , This.H )
		This.hdc := CreateCompatibleDC()
		This.obm := SelectObject( This.hdc , This.hbm )
		This.G := Gdip_GraphicsFromHDC( This.hdc )
		Gdip_SetSmoothingMode( This.G , This.Smoothing )
	}
	ShowWindow( Title := "" ){
		Gui , % This.Hwnd ":Show", % "x" This.X " y" This.Y " w" This.W " h" This.H " NA", % Title
	}
	HideWindow(){
		Gui , % This.Hwnd ":Hide",
	}
	UpdateWindow( alpha := 255 ){
		UpdateLayeredWindow( This.hwnd , This.hdc , This.X , This.Y , This.W , This.H , alpha )
	}
	ClearWindow( AutoUpdate := 0 ){
		Gdip_GraphicsClear( This.G )
		if( Autoupdate )
			This.UpdateWindow()
	}
	DrawBitmap( pBitmap , obj , dispose := 1 , AutoUpdate := 0 ){
		Gdip_DrawImage( This.G , pBitmap , obj.X , obj.Y , obj.W , obj.H )
		if( dispose )
			Gdip_DisposeImage( pBitmap )
		if( Autoupdate )
			This.UpdateWindow()
	}
	PaintBackground( color := "0xFF000000" , AutoUpdate := 0 ){
		if( isObject( color ) ){
			Brush := Gdip_BrushCreateSolid( ( color.HasKey( "Color" ) ) ? ( color.Color ) : ( "0xFF000000" ) ) 
			if( color.Haskey( "Round" ) )
				Gdip_FillRoundedRectangle( This.G , Brush , color.X , color.Y , color.W , color.H , color.Round )
			else
				Gdip_FillRectangle( This.G , Brush , color.X , color.Y , color.W , color.H ) 
		}else{
			Brush := Gdip_BrushCreateSolid( color ) 
			Gdip_FillRectangle( This.G , Brush , -1 , -1 , This.W + 2 , This.H + 2 ) 
		}
		Gdip_DeleteBrush( Brush )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	DeleteWindow( GDIPShutdown := 0 ){
		Gui, % This.Hwnd ":Destroy"
		SelectObject( This.hdc , This.obm )
		DeleteObject( This.hbm )
		DeleteDC( This.hdc )
		Gdip_DeleteGraphics( This.G )
		hwnd := This.Hwnd
		for k, v in PopUpWindow.Windows[ Hwnd ]
			This[k] := ""
		PopUpWindow.Windows[ Hwnd ] := ""
		if( GDIPShutdown ){
			Gdip_Shutdown( PopUpWindow.pToken )
			PopUpWindow.pToken := ""
		}
	}
	_OnClose( wParam ){
		if( wParam = 0xF060 ){	;SC_CLOSE ;[ clicking on the gui close button ]
			Try{
				Gui, % PopUpWindow.HelperHwnd ":Destroy"
				SoundBeep, 555
			}
		}
	}
	CreateCachedBitmap( pBitmap , Dispose := 0 ){
		local pCachedBitmap
		if( This.CachedBitmap )
			This.DisposeCachedbitmap()
		DllCall( "gdiplus\GdipCreateCachedBitmap" , "Ptr" , pBitmap , "Ptr" , this.G , "PtrP" , pCachedBitmap )
		This.CachedBitmap := pCachedBitmap
		if( Dispose )
			Gdip_DisposeImage( pBitmap )
	}
	DrawCachedBitmap( AutoUpdate := 0 ){
		DllCall( "gdiplus\GdipDrawCachedBitmap" , "Ptr" , this.G , "Ptr" , This.CachedBitmap , "Int" , 0 , "Int" , 0 )
		if( AutoUpdate )
			This.UpdateWindow()
	}
	DisposeCachedbitmap(){
		DllCall( "gdiplus\GdipDeleteCachedBitmap" , "Ptr" , This.CachedBitmap )
	}
	Helper(){
		local hwnd , MethodList := ["__New","UpdateSettings","ShowWindow","HideWindow","UpdateWindow","ClearWindow","DrawBitmap","PaintBackground","DeleteWindow" , "AddTrigger" , "DrawTriggers", "CreateCachedBitmap" , "DrawCachedBitmap" , "DisposeCachedbitmap" ]
		Gui, New, +AlwaysOnTop +ToolWindow +HwndHwnd
		PopUpWindow.HelperHwnd := hwnd
		Gui, Add, Edit, xm ym w250 r1 Center hwndhwnd, Gui1
		PopUpWindow.EditHwnd := hwnd
		loop, % MethodList.Length()	
			Gui, Add, Button, xm y+1 w250 r1 gPopUpWindow._HelperClip, % MethodList[ A_Index ]
		Gui, Show,,
		OnMessage( 0x112 , This._OnClose.Bind( hwnd ) )
	}
	_HelperClip(){
		local ClipList 
		
		GuiControlGet, out, % PopUpWindow.HelperHwnd ":", % PopUpWindow.EditHwnd	
		
		ClipList := 		{ 	__New: 					" := New PopUpWindow( { AutoShow: 1 , X: 0 , Y: 0 , W: A_ScreenWidth , H: A_ScreenHeight , Options: "" -DPIScale +AlwaysOnTop "" } )"
							,	UpdateSettings:			".UpdateSettings( { X: """" , Y: """" , W: """" , H: """" } , UpdateGraphics := 0 )"
							,	ShowWindow:				".ShowWindow( Title := """" )"
							,	HideWindow:				".HideWindow()"
							,	UpdateWindow:			".UpdateWindow()"
							,	ClearWindow:			".ClearWindow( AutoUpdate := 0 )"
							,	DrawBitmap:				".DrawBitmap( pBitmap := """" , { X: 0 , Y: 0 , W: " Out ".W , H: " Out ".H } , dispose := 1 , AutoUpdate := 0 )"
							,	PaintBackground:		".PaintBackground( color := ""0xFF000000"" , AutoUpdate := 0 )  "  ";{ Color: ""0xFF000000"" , X: 2 , Y: 2 , W: " Out ".W - 4 , H: " Out ".H - 4 , Round: 10 }"
							,	DeleteWindow:			".DeleteWindow( GDIPShutdown := 0 )"
							,	AddTrigger:				".AddTrigger( { X: """" , Y: """" , W: """" , H: """" , Value: """" , Label: """" } )"	
							,	DrawTriggers:			".DrawTriggers( color := ""0xFFFF0000"" , AutoUpdate := 0 )"	
							,	CreateCachedBitmap:		".CreateCachedBitmap( pBitmap , Dispose := 0 )"	
							,	DrawCachedBitmap: 		".DrawCachedBitmap( AutoUpdate := 0 )"	
							,	DisposeCachedbitmap:	".DisposeCachedbitmap()"	}
							
		clipboard := Out ClipList[ A_GuiControl ]
		
	}
}
;************
;Vector Class
;**************************************************************************************************************************************************************************
;00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 
;00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 
;00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 
;**************************************************************************************************************************************************************************
Class Vector	{
	;Written By: HB
	;Date: Sept 23rd, 2022
	;Last Edit: Sept 24th, 2022
	;Purpose: Vector math class 
	;Credit: Rohwedder 
	;Resources: 
		;Line intercept concepts and code: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=37175
		;Create an Arrow: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=92039&p=479129#p478944
		;Getting an angle: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=108760&p=483661#p483678
		;Setting an Angle: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=108760&p=483786#p483811
		;
		
	static RadToDeg := 45 / ATan( 1 ) 
		, DegToRad := ATan( 1 ) / 45 
		
	__New( x := 0 , y := 0 , rotate := 0 ){ 
		if( IsObject( x ) ){
			if( rotate = 3 ){
				This.X := x.X * -1
				,This.Y := x.Y * -1
			}else if( rotate = 2 ){
				This.X := x.Y 
				,This.Y := x.X * -1
			}else if( rotate = 1 ){
				This.X := x.Y * -1
				,This.Y := x.X 
			}else{
				This.X := x.X
				,This.Y := x.Y
			}
		}else{
			if( rotate = 3 ){
				This.X := X * -1
				,This.Y := Y * -1
			}else if( rotate = 2 ){
				This.X := Y 
				,This.Y := X * -1
			}else if( rotate = 1 ){
				This.X := Y * -1
				,This.Y := X 
			}else{
				This.X := X
				,This.Y := Y
			}
		}
	}
	Add( x , y := "" ){
		if( IsObject( x ) ){
			This.X += x.X
			,This.Y += x.Y
		}else if( y = "" ){
			This.X += x 
			,This.Y += x
		}else{
			This.X += x 
			,This.Y += y 
		}
	}
	Sub( x , y := "" ){
		if( IsObject( x ) ){
			This.X -= x.X
			,This.Y -= x.Y
		}else if( y = "" ){
			This.X -= X
			,This.Y -= X
		}else{
			This.X -= X
			,This.Y -= Y
		}
	}
	Div( x , y := "" ){
		if( IsObject( x ) ){
			This.X /= x.X
			,This.Y /= x.Y
		}else if( x && y = "" ){
			This.X /= x 
			,This.Y /= x 
		}else{
			This.X /= X
			,This.Y /= Y
		}
	}
	Mult( x , y := "" ){
		if( IsObject( x ) ){
			This.X *= x.X
			,This.Y *= x.Y
		}else if( x && y = "" ){
			This.X *= x 
			,This.Y *= x 
		}else{
			This.X *= X
			,This.Y *= Y
		}
	}
	Dist( x , y := "" ){
		if( IsObject( x ) )
			return Sqrt( ( ( This.X - x.X ) **2 ) + ( ( This.Y - x.Y ) **2 ) )
		else 
			return Sqrt( ( ( This.X - X ) **2 ) + ( ( This.Y - Y ) **2 ) )
	}
	GetMag(){
		return Sqrt( This.X * This.X + This.Y * This.Y )
	}
	SetMag( magnitude ){
		local m := This.GetMag()
		This.X := This.X * magnitude / m
		,This.Y := This.Y * magnitude / m
	}
	MagSq(){
		return This.GetMag()**2
	}	
	Dot( x , y := "" ){
		if( IsObject( x ) )
			return ( This.X * x.X ) + ( This.Y * x.Y )
		else
			return ( This.X * X ) + ( This.Y * Y )
	}
	Cross( x , y := "" ){
		if( IsObject( x ) )
			return This.X * x.Y - This.Y * x.X
		else
			return This.X * Y - This.Y * X
		
	}
	Norm(){
		local m := This.GetMag()
		This.X /= m
		This.Y /= m
	}
	GetAngle(){ 
		local angle 
		( (  angle := Vector.RadToDeg * DllCall( "msvcrt\atan2" , "Double" , This.Y , "Double" , This.X , "CDECL Double" ) ) < 0 ) ? ( angle += 360 )
		return angle
	}
	SetAngle( newAngle := 0 , NewVector := 0 ){
		local Angle := This.GetAngle()
		, ChangeAngle := newAngle - Angle 
		, Co := Cos( Vector.DegToRad * ChangeAngle )
		, Si := Sin( Vector.DegToRad * ChangeAngle )
		, X := This.X 
		, Y := This.Y
		, X2 := X * Co - Y * Si 
		, Y2 := X * Si + Y * Co 
		
		if( !NewVector )
			This.X := X2 , This.Y := Y2
		else 
			return New Vector( X2 , Y2 )
	}
	RotateAngle( rotationAmount := 90 , NewVector := 0 ){
		local Co := Cos( Vector.DegToRad * rotationAmount )
		, Si := Sin( Vector.DegToRad * rotationAmount )
		, X := This.X 
		, Y := This.Y
		, X2 := X * Co - Y * Si 
		, Y2 := X * Si + Y * Co 
		
		if( !NewVector )
			This.X := X2 , This.Y := Y2
		else 
			return New Vector( X2 , Y2 )
	}
	;********************************************
	;class methods
	TestLineInterceptPoint( interceptPoint , Line1 , Line2 ){ ; Line = { Start: { X: , Y: } , End: { X: , Y: } } , interceptPoint = { X: , Y: }
		local
		for k , v in [ "X" , "Y" ]	
			M%v%_Min := min( Line1.Start[ v ] , Line1.End[ v ] )
			,M%v%_Max := max( Line1.Start[ v ] , Line1.End[ v ] )
			,L%v%_Min := min( Line2.Start[ v ] , Line2.End[ v ] )
			,L%v%_Max := max( Line2.Start[ v ] , Line2.End[ v ] )
		if( !( interceptPoint.X < Mx_Min || interceptPoint.X > Mx_Max || interceptPoint.X < Lx_Min || interceptPoint.X > Lx_Max ) && !( interceptPoint.Y < My_Min || interceptPoint.Y > My_Max || interceptPoint.Y < Ly_Min || interceptPoint.Y > Ly_Max ) )
			return 1
		return 0
	}
	GetLineInterceptPoint( Line1 , Line2 ){ ; Line = { Start: { X: , Y: } , End: { X: , Y: } }
		local A1 := Line1.End.Y - Line1.Start.Y
		,B1 := Line1.Start.X - Line1.End.X
		,C1 := A1 * Line1.Start.X + B1 * Line1.Start.Y
		,A2 := Line2.End.Y - Line2.Start.Y
		,B2 := Line2.Start.X - Line2.End.X
		,C2 := A2 * Line2.Start.X + B2 * Line2.Start.Y
		,Denominator := A1 * B2 - A2 * B1 
		return New Vector( { X: ( ( B2 * C1 - B1 * C2 ) / Denominator )  , Y: ( ( A1 * C2 - A2 * C1 ) / Denominator ) } )
	}
	;********************************************
}
;**************************************************************************************************************************************************************************
;00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 
;00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 
;00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 00000 <<<>>> 00000 
;**************************************************************************************************************************************************************************


Post Reply

Return to “Scripts and Functions (v1)”