Ooops
September 23, 2020, 07:41:26 AM

Author Topic: [bb] Color edit proxy gadget by JoshK [ 1+ years ago ]  (Read 1127 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Color edit proxy gadget by JoshK [ 1+ years ago ]
« on: June 29, 2017, 12:28:42 AM »
Title : Color edit proxy gadget
Author : JoshK
Posted : 1+ years ago

Description : Color gadget

Code :
Code: BlitzBasic
  1. SuperStrict
  2.  
  3. Import MaxGui.Drivers
  4. Import "Spinner.bmx"
  5. Import "VectorEdit.bmx"
  6.  
  7. Local window:TGadget
  8.  
  9. window=CreateWindow("Coloredit Example",40,40,320,240)
  10.  
  11. Local label:TGadget
  12. Local coloredit:Tcoloredit
  13. Local x:Int=4,y:Int=4
  14.  
  15. label=CreateLabel("Color:",x,y,60,18,window)
  16. SetGadgetLayout label,1,0,1,0
  17. y:+18
  18. coloredit=CreateColorEdit(x,y,180,20,window)
  19. SetColorEditColor(coloredit,255,220,0)
  20. SetGadgetLayout coloredit,1,1,1,0
  21. y:+22
  22.  
  23. label=CreateLabel("Color with alpha:",x,y,120,18,window)
  24. SetGadgetLayout label,1,0,1,0
  25. y:+18
  26. coloredit=CreateColorEdit(x,y,180,20,window,COLOREDIT_ALPHA)
  27. SetColorEditColor(coloredit,128,128,128,128)
  28. SetGadgetLayout coloredit,1,1,1,0
  29. y:+22
  30.  
  31.  
  32. While True
  33.         WaitEvent
  34.         Print CurrentEvent.ToString()
  35.         Select EventID()
  36.                 Case EVENT_WINDOWCLOSE
  37.                         End
  38.         End Select
  39. Wend
  40.  
  41.  
  42. '-------------------------------------------------------------------
  43.  
  44. Const COLOREDIT_ALPHA:Int=1
  45.  
  46. Type TColorEdit Extends TProxygadget
  47.        
  48.         Field panel:TGadget
  49.         Field spinner:TSpinner[4]
  50.         Field button:TGadget
  51.         Field style:Int
  52.         Field subpanel:TGadget
  53.         Field r%=255,g%=255,b%=255,a%=255
  54.         Field vectoredit:TVectorEdit
  55.        
  56.         Method Cleanup()
  57.                 RemoveHook(EmitEventHook,EventHook,Self)
  58.                 Super.cleanup()
  59.         EndMethod
  60.  
  61.         Method SetColor(r:Int,g:Int,b:Int)
  62.                 Local gadget:TGadget
  63.                 panel.SetColor(r,g,b)
  64.                 vectoredit.SetColor(r,g,b)
  65.                 'subpanel.SetColor(r,g,b)
  66.                 'spinner[0].SetColor(r,g,b)
  67.                 'spinner[1].SetColor(r,g,b)
  68.                 'spinner[2].SetColor(r,g,b)
  69.                 'If spinner[3] spinner[3].SetColor(r,g,b)
  70.                 button.SetColor(Self.r,Self.g,Self.b)
  71.         EndMethod
  72.        
  73.         Method SetTextColor(r:Int,g:Int,b:Int)
  74.                 Local gadget:TGadget
  75.                 panel.SetTextColor(r,g,b)
  76.                 vectoredit.SetTextColor(r,g,b)
  77.                 'subpanel.SetTextColor(r,g,b)
  78.                 'spinner[0].SetTextColor(r,g,b)
  79.                 'spinner[1].SetTextColor(r,g,b)
  80.                 'spinner[2].SetTextColor(r,g,b)
  81.                 'If spinner[3] spinner[3].SetTextColor(r,g,b)
  82.         EndMethod
  83.        
  84.         Function Create:TColorEdit(x:Int,y:Int,width:Int,height:Int,group:TGadget,style:Int=0)
  85.                 Local coloredit:Tcoloredit
  86.                 Local sw:Int
  87.                 Local k:Int
  88.                                
  89.                 coloredit=New Tcoloredit
  90.                 coloredit.style=style
  91.                
  92.                 coloredit.panel=CreatePanel(x,y,width,height,group)
  93.                
  94.                 'coloredit.subpanel=CreatePanel(0,0,coloredit.panel.ClientWidth()-coloredit.panel.ClientHeight(),coloredit.panel.ClientHeight(),coloredit.panel)
  95.                 'SetGadgetLayout coloredit.subpanel,1,1,1,1
  96.                
  97.                 If COLOREDIT_ALPHA & style
  98.                         k=4
  99.                 Else
  100.                         k=3
  101.                 EndIf
  102.                
  103.                
  104.                 coloredit.vectoredit=CreateVectorEdit(0,0,coloredit.panel.ClientWidth()-coloredit.panel.ClientHeight(),coloredit.panel.ClientHeight(),coloredit.panel,k)
  105.                 SetVectorEditRange(coloredit.vectoredit,0,255,0)
  106.                 SetVectorEditValue(coloredit.vectoredit,[255.0,255.0,255.0,255.0])
  107.                
  108.                 Rem
  109.                 sw=coloredit.subpanel.ClientWidth()/k
  110.                
  111.                 For Local n:Int=0 To k-1
  112.                         coloredit.spinner[n]=CreateSpinner(sw*n,0,sw,coloredit.subpanel.ClientHeight(),coloredit.subpanel)     
  113.                         SetSpinnerRange coloredit.spinner[n],0,255,0
  114.                 Next
  115.                
  116.                 If COLOREDIT_ALPHA & style
  117.                         SetGadgetLayout coloredit.spinner[0],1,2,1,1
  118.                         SetGadgetLayout coloredit.spinner[1],2,2,1,1
  119.                         SetGadgetLayout coloredit.spinner[2],2,2,1,1
  120.                         SetGadgetLayout coloredit.spinner[3],2,1,1,1
  121.                 Else
  122.                         SetGadgetLayout coloredit.spinner[0],1,2,1,1
  123.                         SetGadgetLayout coloredit.spinner[1],2,2,1,1
  124.                         SetGadgetLayout coloredit.spinner[2],2,1,1,1
  125.                 EndIf
  126.                 EndRem
  127.                
  128.                 coloredit.button=CreateButton("",coloredit.panel.ClientWidth()-coloredit.panel.ClientHeight(),0,coloredit.panel.ClientHeight(),coloredit.panel.ClientHeight(),coloredit.panel)         
  129.                 SetGadgetLayout coloredit.button,0,1,1,1
  130.                
  131.                 coloredit.setproxy(coloredit.panel)
  132.                
  133.                 coloredit.SetColor_(255,255,255)
  134.                
  135.                 AddHook(EmitEventHook,EventHook,coloredit)
  136.                 Return coloredit
  137.         EndFunction
  138.        
  139.         Method GetColor:Int()
  140.                 Local color:Int
  141.                 Local ch:Byte[4]
  142.                 ch[0]=r
  143.                 ch[1]=g
  144.                 ch[2]=b
  145.                 ch[3]=a
  146.                 MemCopy Varptr color,ch,4
  147.                 Return color
  148.         EndMethod
  149.        
  150.         Method SetColor_(r%,g%,b%,a:Int=255)
  151.                 Self.r=r
  152.                 Self.g=g
  153.                 Self.b=b
  154.                 SetGadgetColor button,r,g,b
  155.                 SetVectorEditValue(vectoredit,[Float(r),Float(g),Float(b),Float(a)])
  156.                 'SetSpinnerValue(spinner[0],r)
  157.                 'SetSpinnerValue(spinner[1],g)
  158.                 'SetSpinnerValue(spinner[2],b)
  159.                 'If spinner[3] SetSpinnerValue(spinner[3],a)
  160.         EndMethod
  161.        
  162.         Function EventHook:Object(id:Int,data:Object,context:Object)
  163.                 Local event:TEvent
  164.                 Local coloredit:Tcoloredit
  165.                
  166.                 event=TEvent(data)
  167.                 If event
  168.                         coloredit=Tcoloredit(context)
  169.                         If coloredit
  170.                                 Select event.id                
  171.                                 Case EVENT_GADGETACTION
  172.                                         Select event.source
  173.                                         Case coloredit.vectoredit
  174.                                                 Local r%,g%,b%,a%=255
  175.                                                 Local t:Float[]
  176.                                                 t=VectorEditValue(coloredit.vectoredit)
  177.                                                 r=t[0]
  178.                                                 g=t[1]
  179.                                                 b=t[2]
  180.                                                 If (COLOREDIT_ALPHA & coloredit.style)
  181.                                                         a=t[3]
  182.                                                 EndIf
  183.                                                 coloredit.SetColor_(r,g,b,a)
  184.                                                 EmitEvent CreateEvent(EVENT_GADGETACTION,coloredit,coloredit.GetColor())
  185.                                                 Return Null
  186.                                         'Case coloredit.spinner[0],coloredit.spinner[1],coloredit.spinner[2],coloredit.spinner[3]
  187.                                         '       If event.source=coloredit.spinner[3] And coloredit.spinner[3]=Null Return data
  188.                                         '       Local a%=0
  189.                                         '       If coloredit.spinner[3] a=SpinnerValue(coloredit.spinner[3])
  190.                                         '       coloredit.SetColor_(SpinnerValue(coloredit.spinner[0]),SpinnerValue(coloredit.spinner[1]),SpinnerValue(coloredit.spinner[2]),a)
  191.                                         '       EmitEvent CreateEvent(EVENT_GADGETACTION,coloredit,coloredit.GetColor())
  192.                                         '       Return Null
  193.                                         Case coloredit.button
  194.                                                 If RequestColor(coloredit.r,coloredit.g,coloredit.b)
  195.                                                         coloredit.SetColor_(RequestedRed(),RequestedGreen(),RequestedBlue())
  196.                                                         EmitEvent CreateEvent(EVENT_GADGETACTION,coloredit,coloredit.GetColor())
  197.                                                 EndIf
  198.                                                 Return Null
  199.                                         EndSelect
  200.                                 EndSelect
  201.                         EndIf
  202.                 EndIf
  203.                 Return data
  204.         EndFunction
  205.        
  206. EndType
  207.  
  208. Rem
  209. bbdoc:
  210. EndRem
  211. Function CreateColorEdit:TColorEdit(x:Int,y:Int,width:Int,height:Int,group:TGadget,flags:Int=0)
  212.         Return TColorEdit.Create(x,y,width,height,group,flags)
  213. EndFunction
  214.  
  215. Rem
  216. bbdoc:
  217. EndRem
  218. Function ColorEditColor:Int(coloredit:TColorEdit)
  219.         Return coloredit.GetColor()
  220. EndFunction
  221.  
  222. Rem
  223. bbdoc:
  224. EndRem
  225. Function SetColorEditColor:Int(coloredit:TColorEdit,r:Int,g:Int,b:Int,a:Int=255)
  226.         Return coloredit.SetColor_(r,g,b,a)
  227. EndFunction


Comments :


GaryV(Posted 1+ years ago)

 Very nice.  Thank you for sharing.


JoshK(Posted 1+ years ago)

 Added optional alpha control.


JoshK(Posted 1+ years ago)

 Updated to use vector editor.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal