November 25, 2020, 08:28:40 AM

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

Offline BlitzBot

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

Description : Self-contained color picker proxy gadget

Code :
Code: BlitzBasic
  1. SuperStrict
  2.  
  3. Import MaxGui.Drivers
  4.  
  5. AddHook(EmitEventHook,TColorPicker.EventHandler,Null,1)
  6.  
  7. Type TColorPicker Extends TProxyGadget
  8.        
  9.         Global list:TList=New TList
  10.        
  11.         Field panel:TGadget
  12.         Field textfield:TGadget
  13.         Field button:TGadget
  14.         Field r:Int,g:Int,b:Int
  15.         Field link:TLink
  16.        
  17.         Method CleanUp()
  18.                 link.remove()
  19.                 Super.CleanUp()
  20.         EndMethod
  21.        
  22.         Function Create:TColorPicker(x:Int,y:Int,width:Int,height:Int,group:TGadget)
  23.                 Local colorpicker:TColorPicker=New TColorPicker
  24.                 colorpicker.panel=CreatePanel(x,y,width,height,group)
  25.                 colorpicker.setproxy(colorpicker.panel)
  26.                 colorpicker.textfield=CreateTextField(0,0,colorpicker.panel.ClientWidth()-colorpicker.panel.ClientHeight(),colorpicker.panel.ClientHeight(),colorpicker.panel)
  27.                 colorpicker.button=CreateButton("",colorpicker.panel.ClientWidth()-colorpicker.panel.ClientHeight(),0,colorpicker.panel.ClientHeight(),colorpicker.panel.ClientHeight(),colorpicker.panel)
  28.                 SetGadgetLayout colorpicker.textfield,1,1,1,1
  29.                 SetGadgetLayout colorpicker.button,0,1,1,1
  30.                 SetGadgetText colorpicker.textfield,"255,255,255"
  31.                 SetGadgetColor colorpicker.button,255,255,255
  32.                 SetGadgetFilter colorpicker.textfield,filter
  33.                 colorpicker.link=list.addlast(colorpicker)
  34.                 Return colorpicker
  35.         EndFunction
  36.        
  37.         Function Filter:Int(event:TEvent,context:Object)
  38.                 If event.ID=EVENT_KEYCHAR
  39.                         If event.data=KEY_BACKSPACE Return 1
  40.                         If event.data=KEY_COMMA Return 1
  41.                         If event.data<48 Or event.data>57 Return 0
  42.                 EndIf
  43.                 Return 1
  44.         EndFunction
  45.        
  46.         Method SetColor(r:Int,g:Int,b:Int)
  47.                 Self.r=r
  48.                 Self.g=g
  49.                 Self.b=b
  50.                 SetGadgetText textfield,r+","+g+","+b
  51.                 SetGadgetColor button,r,g,b
  52.         EndMethod
  53.        
  54.         Method EventHook:TEvent(event:TEvent)
  55.                 If event.id=EVENT_GADGETLOSTFOCUS And event.source=textfield
  56.                         Local sarr:String[]=GadgetText(textfield).split(",")
  57.                         If sarr.length=3
  58.                                 SetColor Int(sarr[0]),Int(sarr[1]),Int(sarr[2])
  59.                         Else
  60.                                 SetColor r,g,b
  61.                         EndIf
  62.                         Return CreateEvent(EVENT_GADGETACTION,Self,b+(g Shl 8)+(r Shl 16)+(255 Shl 24))
  63.                 EndIf
  64.                 If event.id=EVENT_GADGETACTION And event.source=button
  65.                         If RequestColor(r,g,b)
  66.                                 SetColor(RequestedRed(),RequestedGreen(),RequestedBlue())
  67.                                 Return CreateEvent(EVENT_GADGETACTION,Self,b+(g Shl 8)+(r Shl 16)+(255 Shl 24))
  68.                         Else
  69.                                 Return Null
  70.                         EndIf
  71.                 EndIf
  72.                 Return null
  73.         EndMethod
  74.        
  75.         Function EventHandler:Object(id:Int,data:Object,context:Object)
  76.                 If list.isempty() Return data
  77.                 Local event:TEvent
  78.                 Local colorpicker:TColorPicker
  79.                 event=TEvent(data)
  80.                 If event
  81.                         For colorpicker=EachIn list
  82.                                 If colorpicker.button=event.source Or colorpicker.textfield=event.source
  83.                                         Return colorpicker.EventHook(event)
  84.                                 EndIf
  85.                         Next
  86.                 EndIf
  87.                 Return data
  88.         EndFunction
  89.        
  90. EndType
  91.  
  92. Function CreateColorPicker:TColorPicker(x:Int,y:Int,width:Int,height:Int,group:TGadget)
  93.         Return TColorPicker.Create(x,y,width,height,group)
  94. EndFunction
  95.  
  96.  
  97. '----------------------------------------------------------------------------------------------------
  98.  
  99. Local window:TGadget
  100.  
  101. window=CreateWindow("My Window",40,40,320,240)
  102.  
  103. Local cp:TGadget=CreateColorPicker(20,20,200,20,window)
  104. SetGadgetLayout cp,1,1,1,0
  105. SetGadgetColor cp,255,0,0
  106.  
  107.  
  108. While True
  109.         WaitEvent
  110.         Print CurrentEvent.ToString()
  111.         Select EventID()
  112.                 Case EVENT_WINDOWCLOSE
  113.                         End
  114.         End Select
  115. Wend


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal