January 23, 2021, 04:46:01 AM

Author Topic: [bb] Vein R3 GUI by N [ 1+ years ago ]  (Read 514 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Vein R3 GUI by N [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
Title : Vein R3 GUI
Author : N
Posted : 1+ years ago

Description : This is the GUI I designed for Vein R3 (back when I still had Blitz3D).  This is an old hacked standalone version I had made for a friend, so might as well throw it up here.

Most of the functions are fairly self-explanatory.  E.g., Button creates a button, Window creates a window, so on and so forth.

<a href="codearcs96c7.html?code=1160" target="_blank">Requires my stack code.[/url]


Code :
Code: BlitzBasic
  1. ;#Region DESCRIPTION
  2.         ;; Functions for grabbing input
  3. ;#End Region
  4.  
  5. ;#Region CLASSES
  6.         Type InputEngine
  7.                 Field MX%,MY%,MZ%,MXS%,MYS%,MZS%
  8.                 Field MD1%,MD2%,MD3%,OMD1%,OMD2%,OMD3%
  9.                
  10.                 Field Key%[255]
  11.                 Field OldKey%[255]
  12.         End Type
  13.        
  14.         Global InEngine.InputEngine = New InputEngine
  15. ;#End Region
  16.  
  17. ;#Region PROCEDURES
  18.         Function GrabInput()
  19.                 For i = 1 To 237
  20.                         InEngineOldKey[i] = InEngineKey[i]
  21.                         InEngineKey[i] = KeyDown(i)
  22.                 Next
  23.                
  24.                 InEngineMXS = MouseXSpeed()
  25.                 InEngineMYS = MouseYSpeed()
  26.                 InEngineMZS = MouseZSpeed()
  27.                
  28.                 InEngineMX = MouseX()
  29.                 InEngineMY = MouseY()
  30.                 InEngineMZ = MouseZ()
  31.                
  32.                 InEngineOMD1 = InEngineMD1
  33.                 InEngineOMD2 = InEngineMD2
  34.                 InEngineOMD3 = InEngineMD3
  35.                
  36.                 InEngineMD1 = MouseDown(1)
  37.                 InEngineMD2 = MouseDown(2)
  38.                 InEngineMD3 = MouseDown(3)
  39.         End Function
  40.        
  41.         Function iMouseXSpeed()
  42.                 Return InEngineMXS
  43.         End Function
  44.        
  45.         Function iMouseYSpeed()
  46.                 Return InEngineMYS
  47.         End Function
  48.        
  49.         Function iMouseZSpeed()
  50.                 Return InEngineMZS
  51.         End Function
  52.        
  53.         Function iMouseX()
  54.                 Return InEngineMX
  55.         End Function
  56.        
  57.         Function iMouseY()
  58.                 Return InEngineMY
  59.         End Function
  60.        
  61.         Function iMouseZ()
  62.                 Return InEngineMZ
  63.         End Function
  64.        
  65.         Function iMouseDown(Mouse)
  66.                 Select Mouse
  67.                         Case 1
  68.                                 md = InEngineMD1
  69.                         Case 2
  70.                                 md = InEngineMD2
  71.                         Case 3
  72.                                 md = InEngineMD3
  73.                 End Select
  74.                
  75.                 Return md
  76.         End Function
  77.        
  78.         Function iMouseHit(Mouse)
  79.                 Select Mouse
  80.                         Case 1
  81.                                 omd = InEngineOMD1
  82.                                 md = InEngineMD1
  83.                         Case 2
  84.                                 omd = InEngineOMD2
  85.                                 md = InEngineMD2
  86.                         Case 3
  87.                                 omd = InEngineOMD3
  88.                                 md = InEngineMD3
  89.                 End Select
  90.                
  91.                 Return (omd = 0 And md = 1)
  92.         End Function
  93.        
  94.         Function iMouseUp(Mouse)
  95.                 Select Mouse
  96.                         Case 1
  97.                                 omd = InEngineOMD1
  98.                                 md = InEngineMD1
  99.                         Case 2
  100.                                 omd = InEngineOMD2
  101.                                 md = InEngineMD2
  102.                         Case 3
  103.                                 omd = InEngineOMD3
  104.                                 md = InEngineMD3
  105.                 End Select
  106.                
  107.                 Return (omd = 1 And md = 0)
  108.         End Function
  109.        
  110.         Function iKeyHit(Key)
  111.                 If InEngineKey[Key] = 1 And InEngineOldKey[Key] = 0 Then Return 1
  112.                 Return 0
  113.         End Function
  114.        
  115.         Function iKeyUp(Key)
  116.                 If InEngineKey[Key] = 0 And InEngineOldKey[Key] = 1 Then Return 1
  117.                 Return 0
  118.         End Function
  119.        
  120.         Function iKeyDown(Key)
  121.                 Return InEngineKey[Key]
  122.         End Function
  123.        
  124.         Function iMouseInRect(X,Y,W,H)
  125.                 If (InEnginemx >= X) And (InEnginemy >= Y) And (InEnginemx <= X+W) And (InEnginemy <= Y+H) Return 1
  126.                 Return 0
  127.         End Function
  128.        
  129.         Function iSendMouseHit(Mouse)
  130.                 Select Mouse
  131.                         Case 1
  132.                                 InEngineMD1 = 1
  133.                                 InEngineOMD1 = 0
  134.                         Case 2
  135.                                 InEngineMD2 = 1
  136.                                 InEngineOMD2 = 0
  137.                         Case 3
  138.                                 InEngineMD3 = 1
  139.                                 InEngineOMD3 = 0
  140.                 End Select
  141.         End Function
  142.        
  143.         Function iSendMouseUp(Mouse)
  144.                 Select Mouse
  145.                         Case 1
  146.                                 InEngineMD1 = 0
  147.                                 InEngineOMD1 = 1
  148.                         Case 2
  149.                                 InEngineMD2 = 0
  150.                                 InEngineOMD2 = 1
  151.                         Case 3
  152.                                 InEngineMD3 = 0
  153.                                 InEngineOMD3 = 1
  154.                 End Select
  155.         End Function
  156.        
  157.         Function iSendMouseDown(Mouse)
  158.                 Select Mouse
  159.                         Case 1
  160.                                 InEngineMD1 = 1
  161.                         Case 2
  162.                                 InEngineMD2 = 1
  163.                         Case 3
  164.                                 InEngineMD3 = 1
  165.                 End Select
  166.         End Function
  167. ;#End Region
  168.  
  169.  
  170. ;#Region CLASSES
  171.         Type Event
  172.                 Field GadgetID
  173.                 Field Info$
  174.         End Type
  175. ;#End Region
  176.  
  177. ;#Region PROCEDURES
  178.         Function Event(i.Gadget,Info$)
  179.                 Local e.Event = New Event
  180.                 eGadgetID = Handle(i)
  181.                 eInfo = Info
  182.                 Return Handle(e)
  183.         End Function
  184. ;#End Region
  185.  
  186.  
  187. ;#Region CLASSES
  188.         Type Gadget
  189.                 Field X%,Y%,Z%                                  ;; Local X position, local Y position, Z stack height
  190.                 Field Width%,Height%
  191.                 Field Parent.Gadget                             ;; Parent gadget
  192.                
  193.                 Field Gadgets                                   ;; Stack
  194.                
  195.                 Field Class                                     ;; Gadget class (refer to GUI_ constants)
  196.                 Field State%[32]                                ;; State
  197.                 Field Params%[32]                               ;; Parameters
  198.                
  199.                 Field Content$
  200.                 Field Caption$
  201.                
  202.                 Field MenuStrip.Gadget
  203.                 Field ToolStrip.Gadget
  204.                
  205.                 Field GroupID%
  206.                
  207.                 Field Min#
  208.                 Field Max#
  209.                 Field Val#
  210.                
  211.                 Field Over%
  212.                
  213.                 Field Image                                     ;; Image used in gadget drawing
  214.                
  215.                 Field Mode
  216.                
  217.                 Field Name$
  218.                
  219.                 Field Icon%
  220.         End Type
  221.        
  222.         ;#Region GADGET CLASSES
  223.                 Const GUI_WINDOW = $4000
  224.                
  225.                 Const GUI_LABEL = $4001
  226.                 Const GUI_BUTTON = $4002
  227.                
  228.                 Const GUI_GROUPBOX = $4003
  229.                 Const GUI_ROLLOUT = $4004
  230.                 Const GUI_VIEWPORT = $4013
  231.                
  232.                 Const GUI_PROGRESSBAR = $4005
  233.                 Const GUI_HORSCROLL = $4006
  234.                 Const GUI_VERSCROLL = $4007
  235.                 Const GUI_TRACKBAR = $4008
  236.                 Const GUI_SLIDER = $4009
  237.                
  238.                 Const GUI_RADIO = $400A
  239.                 Const GUI_CHECKBOX = $400B
  240.                
  241.                 Const GUI_MENUSTRIP = $400C
  242.                 Const GUI_MENUTITLE = $400D
  243.                 Const GUI_MENUITEM = $400E
  244.                 Const GUI_MENUBAR = $400F
  245.                
  246.                 Const GUI_CONTEXTMENU = $40010
  247.                 Const GUI_CONTEXTMENUITEM = $4011
  248.                 Const GUI_CONTEXTMENUBAR = $4012
  249.                
  250.                 Const GUI_DIAL = $4013
  251.                
  252.                 Const GUI_LISTBOX = $4014
  253.                 Const GUI_LISTBOXITEM = $4015
  254.                
  255.                 Const GUI_COMBOBOX = $4016
  256.                 Const GUI_COMBOBOXITEM = $4017
  257.                
  258.                 Const GUI_TREEVIEW = $4018
  259.                 Const GUI_TREEVIEWNODE = $4019
  260.                
  261.                 Const GUI_TEXTBOX = $401A
  262.                
  263.                 Const GUI_TABSTRIP = $401B
  264.                 Const GUI_TABPAGE = $401C
  265.                
  266.                 Const GUI_STATUSSTRIP = $401D
  267.                 Const GUI_STATUSITEM = $401E
  268.                
  269.                 Const GUI_TOOLSTRIP = $401F
  270.                 Const GUI_TOOLITEM = $4020
  271.                 Const GUI_TOOLBAR  = $4021
  272.                
  273.                 Const GUI_PANEL = $4022
  274.                
  275.                 Const GUI_IMAGEBOX = $4023
  276.         ;#End Region
  277.        
  278.         ;#Region WINDOW MODES
  279.                 Const WM_TITLEBAR = 1
  280.                 Const WM_CLOSEBTN = 2
  281.                 Const WM_MINBTN = 4
  282.                 Const WM_TITLEBARSHADOW = 8
  283.         ;#End Region
  284.        
  285.         ;#Region PROGRESS BAR MODES
  286.                 Const SLIDER_HOR = 1
  287.                 Const SLIDER_VER = 2
  288.                
  289.                 Const SLIDER_INTEGER = 4
  290.                 Const SLIDER_FLOAT = 8
  291.         ;#End Region
  292.        
  293.         ;#Region STATES
  294.                 Const GADGET_HIDDEN = 30                        ;; Globally used
  295.                
  296.                 Const WINDOW_DRAG = 0
  297.                 Const WINDOW_DRAGX = 1
  298.                 Const WINDOW_DRAGY = 2
  299.                 Const WINDOW_DROPX = 3
  300.                 Const WINDOW_DROPY = 4
  301.                 Const WINDOW_LOCKED = 5
  302.                 Const WINDOW_CLOSEBUTTON = 6
  303.                 Const WINDOW_MINBUTTON = 7
  304.                 Const WINDOW_MINIMIZED = 8
  305.                 Const WINDOW_CLOSED = 9
  306.                
  307.                 Const BUTTON_DOWN = 0
  308.                
  309.                 Const ROLLOUT_CLOSED = 0
  310.                
  311.                 Const TEXTBOX_ACTIVE = 0
  312.                
  313.                 Const TICK_CHECKED = 0
  314.         ;#End Region
  315.        
  316.         ;#Region COLORS
  317.                 Const WINDOW_TITLE_INACTIVE_F = $FF8DE1EB
  318.                 Const WINDOW_TITLE_INACTIVE_T = $FF9EACBA
  319.                 Const WINDOW_TITLE_ACTIVE_F = $FF97C1EB
  320.                 Const WINDOW_TITLE_ACTIVE_T = $FF6790B9
  321.                 Const WINDOW_DIALOG_F = $C8C8C8
  322.                 Const WINDOW_DIALOG_T = $B4B4B4
  323.         ;#End Region
  324.        
  325.         Global GUI_RootGadgets                                  ;; Gadgets with no parent (windows)
  326.         Global GUI_ActiveContextMenu.Gadget             ;; Active (open) context menu
  327.         Global GUI_ContextMenus                                 ;; Context menus
  328.         Global GUI_ContextMenuImage                             ;; Context menu graphic
  329.         Global GUI_ContextMenuItemImage                 ;; Context menu item graphic
  330.         Global GUI_ModalWindow.Gadget                           ;; Modal window
  331.         Global GUI_Font                                         ;; Normal font
  332.         Global GUI_FontBold                                             ;; Bold font
  333.         Global GUI_LFont                                                ;; Large normal font
  334.         Global GUI_LFontBold                                    ;; Large bold font
  335.         Global GUI_MouseCursor                                  ;; Mouse cursor image
  336.         Global GUI_PointerHidden                                        ;; Whether or not the cursor is visible
  337. ;#End Region
  338.  
  339. ;#Region PROCEDURES
  340.         Function UpdateGUI()           
  341.                 If GUI_ModalWindow <> Null Then
  342.                         z = GUI_ModalWindow
  343.                         For g.Gadget = Each Gadget
  344.                                 If gClass = GUI_WINDOW And g <> GUI_ModalWindow And g > z
  345.                                         g = g - 1
  346.                                 EndIf
  347.                         Next
  348.                         GUI_ModalWindow = MoveObjectToBack(GUI_RootGadgets,GUI_ModalWindow)
  349.                 EndIf
  350.                
  351.                 UpdateGadget(GUI_ActiveContextMenu)
  352.                
  353.                 If GUI_ActiveContextMenu <> Null Then
  354.                         cm.Gadget = GUI_ActiveContextMenu
  355.                         If cmOver = 1 Then Return
  356.                 EndIf
  357.                
  358.                 For i = 0 To Objects(GUI_RootGadgets)-1
  359.                         g.Gadget = Object.Gadget(GetObject(GUI_RootGadgets,i))
  360.                         UpdateGadget(g)
  361.                 Next
  362.         End Function
  363.        
  364.         Function UpdateGadget(i.Gadget)
  365.                 If i = Null Then Return
  366.                
  367.                 If iState[30] = 1 Then Return
  368.                
  369.                 Local x = GetGadgetSX(i)
  370.                 Local y = GetGadgetSY(i) + (16*(iMenuStrip <> Null) + 20*(iToolStrip <> Null))*(iClass <> GUI_WINDOW)
  371.                
  372.                 Local r.Gadget = GetRoot(i)
  373.                 Local isActive = (r = Objects(GUI_RootGadgets)-1)
  374.                 If r <> Null Then
  375.                         If rClass = GUI_CONTEXTMENU Then
  376.                                 isActive = 1
  377.                                 x = GetGadgetSX(iParent)
  378.                                 y = GetGadgetSY(iParent)+i*20
  379.                                 iWidth = rWidth
  380.                                 iHeight = 19
  381.                         EndIf
  382.                 EndIf
  383.                
  384.                 Local mh1 = iMouseHit(1)
  385.                 Local mu1 = iMouseUp(1)
  386.                 Local md1 = iMouseDown(1)
  387.                 Local mx = iMouseX()
  388.                 Local my = iMouseY()
  389.                 Local mz = iMouseZ()
  390.                
  391.                 Local rStack
  392.                
  393.                 If iParent <> Null Then
  394.                         rStack = iParentGadgets
  395.                 Else
  396.                         rStack = GUI_RootGadgets
  397.                 EndIf
  398.                
  399.                 Local az = Objects(rStack)-1
  400.                
  401.                 Local over = iMouseInRect(x,y,iWidth,iHeight*(Not iState[WINDOW_MINIMIZED]) + (24*(iClass = GUI_WINDOW)*(iMode And WM_TITLEBAR))+(16*(iMenuStrip <> Null) + 20*(iToolStrip <> Null))*(iClass = GUI_WINDOW))
  402.                 iOver = over
  403.                
  404.                 Local g.Gadget = Null
  405.                
  406.                 Select iClass
  407.                
  408.                         Case GUI_WINDOW
  409.                                 If iState[WINDOW_CLOSED] = 1 Then Return
  410.                                 If GUI_ModalWindow = Null Then
  411.                                         If mh1 And over And i < az Then
  412.                                                 For g.Gadget = Each Gadget
  413.                                                         If gClass = GUI_WINDOW And g > i And g <> i And gParent = iParent Then
  414.                                                                 gx = GetGadgetSX(g)
  415.                                                                 gy = GetGadgetSY(g)
  416.                                                                 If iMouseInRect(gx,gy,gWidth,gHeight*(Not gState[WINDOW_MINIMIZED])+24*((gMode And WM_TITLEBAR) = WM_TITLEBAR)) Then Exit
  417.                                                         EndIf
  418.                                                 Next
  419.                                                
  420.                                                 If g = Null Then
  421.                                                         For g.Gadget = Each Gadget
  422.                                                                 If gClass = GUI_WINDOW And g > i And g <> i Then g = g - 1
  423.                                                         Next
  424.                                                         i = MoveObjectToBack(rStack,i)
  425.                                                 EndIf
  426.                                         EndIf
  427.                                 EndIf
  428.                                
  429.                                 If (iMode And WM_TITLEBAR) = WM_TITLEBAR And i = az Then
  430.                                         overClose = MaxI(iMouseInRect(x+iWidth-20,y+4,16,16),((iMode And WM_CLOSEBTN) = WM_CLOSEBTN))
  431.                                         overMin = MaxI(iMouseInRect(x+iWidth-20-20*((iMode And WM_CLOSEBTN)=WM_CLOSEBTN),y+4,16,16),((iMode And WM_MINBTN) = WM_MINBTN))
  432.                                         If iState[5] = 0 Then
  433.                                                 over = iMouseInRect(x,y,iWidth,24)
  434.                                                
  435.                                                 If mh1 And over And overClose = 0 And overMin = 0 Then
  436.                                                         iState[0] = 1
  437.                                                         iState[1] = iMouseX()
  438.                                                         iState[2] = iMouseY()
  439.                                                         iState[3] = iX
  440.                                                         iState[4] = iY
  441.                                                 ElseIf md1 And iState[0] = 1 Then
  442.                                                         iX = iState[3] + (iMouseX()-iState[1])
  443.                                                         iY = iState[4] + (iMouseY()-iState[2])
  444.                                                 EndIf
  445.                                                
  446.                                                 If mu1 And iState[0] = 1 Then
  447.                                                         iState[0] = 0
  448.                                                 EndIf
  449.                                         EndIf
  450.                                        
  451.                                         If (iMode And WM_CLOSEBTN) = WM_CLOSEBTN Then
  452.                                                 over = overClose
  453.                                                
  454.                                                 If mh1 And over Then
  455.                                                         iState[WINDOW_CLOSEBUTTON] = 1
  456.                                                 ElseIf iState[WINDOW_CLOSEBUTTON] <> 1 And over Then
  457.                                                         iState[WINDOW_CLOSEBUTTON] = 2
  458.                                                 ElseIf iState[WINDOW_CLOSEBUTTON] = 1 And mu1 And over Then
  459.                                                         iState[WINDOW_CLOSEBUTTON] = over*2
  460.                                                         iState[WINDOW_CLOSED] = 1
  461.                                                         Event(i,"Closed")
  462.                                                         For g.Gadget = Each Gadget
  463.                                                                 If g <> i And gClass = GUI_WINDOW Then g = g + 1
  464.                                                         Next
  465.                                                         i = MoveObjectToFront(GUI_RootGadgets,i)
  466.                                                 ElseIf (iState[WINDOW_CLOSEBUTTON] <> 1) Or (iState[WINDOW_CLOSEBUTTON] = 1 And mu1)
  467.                                                         iState[WINDOW_CLOSEBUTTON] = over*2
  468.                                                 EndIf
  469.                                         EndIf
  470.                                        
  471.                                         If (iMode And WM_MINBTN) = WM_MINBTN Then
  472.                                                 over = overMin
  473.                                                
  474.                                                 If mh1 And over Then            ;; You know.. I could have avoided all these i = az things early on, but at the time I was hyped up on coffee and didn't think about it.
  475.                                                         iState[WINDOW_MINBUTTON] = 1
  476.                                                 ElseIf mu1 And over And iState[WINDOW_MINBUTTON] = 1 Then
  477.                                                         iState[WINDOW_MINBUTTON] = over*2
  478.                                                         iState[WINDOW_MINIMIZED] = Not iState[WINDOW_MINIMIZED]
  479.                                                         If iState[WINDOW_MINIMIZED] = 1 Then
  480.                                                                 Event(i,"Shaded")
  481.                                                         Else
  482.                                                                 Event(i,"Unshaded")
  483.                                                         EndIf
  484.                                                 ElseIf (iState[WINDOW_MINBUTTON] <> 1) Or (iState[WINDOW_MINBUTTON] = 1 And mu1)
  485.                                                         iState[WINDOW_MINBUTTON] = over*2
  486.                                                 EndIf
  487.                                         EndIf
  488.                                 EndIf
  489.                        
  490.                         Case GUI_BUTTON
  491.                                 If isActive Then
  492.                                         If iState[0] = 3 Then
  493.                                         ElseIf mh1 And over
  494.                                                 iState[0] = 2
  495.                                         ElseIf mu1 And iState[0] = 2
  496.                                                 iState[0] = over
  497.                                                 Event(i,"Pressed")
  498.                                         ElseIf md1 And iState[0] = 2
  499.                                                 iState[0] = 2           ;; Pointless state check, but it's there for the sake of completeness
  500.                                         ElseIf over Then
  501.                                                 iState[0] = 1
  502.                                         Else
  503.                                                 iState[0] = 0
  504.                                         EndIf
  505.                                 EndIf
  506.                        
  507.                         Case GUI_TEXTBOX
  508.                                 If isActive Then
  509.                                         If mh1 And over Then
  510.                                                 iState[0] = 1
  511.                                                 FlushKeys()
  512.                                         ElseIf iState[0] = 1
  513.                                                 k = GetKey()
  514.                                                
  515.                                                 If k = 13 Then
  516.                                                         iState[0] = 0
  517.                                                         Event(i,iCaption)
  518.                                                 ElseIf k = 8 Then
  519.                                                         iCaption = Left(iCaption,MinI(Len(iCaption)-1,0))
  520.                                                 ElseIf over = 0 And mh1 Then
  521.                                                         iState[0] = 0
  522.                                                         Event(i,iCaption)
  523.                                                 ElseIf k > 31 Then
  524.                                                         iCaption = iCaption + Chr(k)
  525.                                                 EndIf
  526.                                         EndIf
  527.                                 EndIf
  528.                                
  529.                         Case GUI_ROLLOUT
  530.                                 If isActive Then
  531.                                         over = iMouseInRect(x,y,iWidth,16)
  532.                                         If mh1 And over Then
  533.                                                 iState[ROLLOUT_CLOSED] = Not iState[ROLLOUT_CLOSED]
  534.                                                 For g.Gadget = Each Gadget
  535.                                                         If gParent = iParent And g <> i And RectsOverlap(iX,iY,iWidth,2048,gX,gY,gWidth,gHeight) Then
  536.                                                                 gY = gY + (iHeight)*((iState[ROLLOUT_CLOSED] = 0)-(iState[ROLLOUT_CLOSED] = 1))
  537.                                                         EndIf
  538.                                                 Next
  539.                                         EndIf
  540.                                 EndIf
  541.                                
  542.                                 If iState[0] = 1 Then Return
  543.                        
  544.                         Case GUI_RADIO
  545.                                 If isActive Then
  546.                                         If over And mh1 Then
  547.                                                 iState[TICK_CHECKED] = 2
  548.                                         ElseIf md1 And iState[TICK_CHECKED] = 2
  549.                                                 iState[TICK_CHECKED] = 2
  550.                                         ElseIf mu1 And iState[TICK_CHECKED] = 2 And over Then
  551.                                                 For g.Gadget = Each Gadget
  552.                                                         If gParent = iParent And g <> i And gClass = GUI_RADIO Then
  553.                                                                 gVal = 0
  554.                                                         EndIf
  555.                                                 Next
  556.                                                 iVal = 1
  557.                                                 Event(i,1)
  558.                                         Else
  559.                                                 iState[TICK_CHECKED] = over
  560.                                         EndIf
  561.                                 EndIf
  562.                        
  563.                         Case GUI_CHECKBOX
  564.                                 If isActive
  565.                                         If over And mh1 Then
  566.                                                 iState[TICK_CHECKED] = 2
  567.                                         ElseIf md1 And iState[TICK_CHECKED] = 2
  568.                                                 iState[TICK_CHECKED] = 2
  569.                                         ElseIf mu1 And iState[TICK_CHECKED] = 2 And over Then
  570.                                                 iVal = Not iVal
  571.                                                 Event(i,Int iVal)
  572.                                         Else
  573.                                                 iState[TICK_CHECKED] = over
  574.                                         EndIf
  575.                                 EndIf
  576.                        
  577.                         Case GUI_CONTEXTMENU
  578.                                 iHeight = 0
  579.                                 For n = 0 To Objects(iGadgets)-1
  580.                                         g.Gadget = Object.Gadget(GetObject(iGadgets,n))
  581.                                         width = MinI(ImageWidth(gImage)+20,width)
  582.                                         iHeight = iHeight + 16
  583.                                 Next
  584.                                 iWidth = width
  585.                                
  586.                                 iOver = iMouseInRect(iX,iY,iWidth,iHeight)
  587.                                
  588.                                 If (iMouseHit(1) Or iMouseHit(2) Or iMouseHit(3)) And (iOver=0) Then
  589.                                         GUI_ActiveContextMenu = Null
  590.                                 EndIf
  591.                        
  592.                         Case GUI_CONTEXTMENUITEM
  593.                                 x = GetGadgetSX(iParent)
  594.                                 y = GetGadgetSY(iParent)+i*16
  595.                                 iState[0] = iMouseInRect(x,y,iWidth,iHeight-1)
  596.                                 If iState[0] And mu1 Then
  597.                                         Event(i,1)
  598.                                         GUI_ActiveContextMenu = Null
  599.                                 EndIf
  600.                        
  601.                         Case GUI_SLIDER
  602.                                 d# = iMax-iMin
  603.                                 bar# = -(iVal/d)*(iState[1])
  604.                                
  605.                                 If (iMode And SLIDER_HOR) = SLIDER_HOR
  606.                                         p# = (iVal/d)*(iWidth-2)
  607.                                        
  608.                                         over = iMouseInRect(x+p+bar+1,y+1,iState[1],iHeight-2)
  609.                                         If mh1 And over Then
  610.                                                 iState[2] = 1
  611.                                         ElseIf mu1 And iState[2] = 1 Then
  612.                                                 iState[2] = 0
  613.                                                 v# = iVal
  614.                                                 If (iMode And SLIDER_INTEGER) = SLIDER_INTEGER Then v# = Int v
  615.                                                 Event(i,v)
  616.                                         ElseIf iState[2] = 1 And md1 Then
  617.                                                 iVal = MaxF(MinF(iMin+(Float(mx-(x+1))/(iwidth-2))*d,iMin),iMax)
  618.                                                 v# = iVal
  619.                                                 If (iMode And SLIDER_INTEGER) = SLIDER_INTEGER Then v# = Int v
  620.                                                 Event(i,v)
  621.                                         EndIf
  622.                                 Else
  623.                                         p# = (iVal/d)*(iHeight-2)
  624.                                        
  625.                                         over = iMouseInRect(x+1,y+1+p+bar,iWidth-2,iState[1])
  626.                                         If mh1 And over Then
  627.                                                 iState[2] = 1
  628.                                         ElseIf mu1 And iState[2] = 1 Then
  629.                                                 iState[2] = 0
  630.                                                 v# = iVal
  631.                                                 If (iMode And SLIDER_INTEGER) = SLIDER_INTEGER Then v# = Int v
  632.                                                 Event(i,v)
  633.                                         ElseIf iState[2] = 1 And md1 Then
  634.                                                 iVal = MaxF(MinF(iMin+(Float(my-(y+1))/(iHeight-2))*d,iMin),iMax)
  635.                                                 v# = iVal
  636.                                                 If (iMode And SLIDER_INTEGER) = SLIDER_INTEGER Then v# = Int v
  637.                                                 Event(i,v)
  638.                                         EndIf
  639.                                 EndIf
  640.                                
  641.                         Case GUI_TRACKBAR
  642.                                 d# = iMax-iMin
  643.                                 pos = Int(( (iVal-iMin) / d )*iState[1])*iState[2]
  644.                                 bar = Int(((iVal-iMin)/d))*iState[2]
  645.                                 over = iMouseInRect(x+pos-bar+1,y+1,iState[2],iHeight-2)
  646.                                 If mh1 And over Then
  647.                                         iState[0] = 1
  648.                                 ElseIf md1 And iState[0] = 1
  649.                                         iVal = MinF(MaxF(( Float(mx-(x+1)) / iWidth )*d,iMax-(d/iState[1])),iMin)
  650.                                         If (iMode And 16) = 16 Then
  651.                                                 Event(i,iMin+d-iVal)
  652.                                         Else
  653.                                                 Event(i,iVal)
  654.                                         EndIf
  655.                                 ElseIf mu1 And iState[0] = 1
  656.                                         iState[0] = 0
  657.                                         If (iMode And 16) = 16 Then
  658.                                                 Event(i,iMin+d-iVal)
  659.                                         Else
  660.                                                 Event(i,iVal)
  661.                                         EndIf
  662.                                 EndIf
  663.                        
  664.                         Case GUI_TABPAGE
  665.                                 over = iMouseInRect(x+iState[1],y-16,iWidth,iHeight)
  666.                                 If mh1 And over Then
  667.                                         iParentState[0] = i
  668.                                 EndIf
  669.                                
  670.                                 If iParentState[0] <> i Then Return
  671.                        
  672.                         Case GUI_LISTBOXITEM
  673.                                 x = GetGadgetSX(iParent)
  674.                                 y = GetGadgetSY(iParent)+i*20
  675.                                 iOver = iMouseInRect(x,y,iParentWidth,20)
  676.                                 If iOver And mh1 Then
  677.                                         Event(i,iContent)
  678.                                         Event(iParent,Handle(i))
  679.                                         iParentState[LISTBOX_SELECTED] = i
  680.                                         iParentContent  = iName
  681.                                 EndIf
  682.                        
  683.                 End Select
  684.                
  685.                 For n = 0 To Objects(iGadgets)-1
  686.                         g.Gadget = Object.Gadget(GetObject(iGadgets,n))
  687.                         UpdateGadget(g)
  688.                 Next
  689.         End Function
  690.        
  691.         Function Gadget.Gadget(Class,Parent=0,Mode=0,X=0,Y=0,W=0,H=0,Caption$="",GroupID%=0,Min#=0,Max#=0,Val#=0,Name$="",icon$="")
  692.                 Local i.Gadget = New Gadget
  693.                 iClass = Class
  694.                 iParent = Object.Gadget(Parent)
  695.                
  696.                 If iParent <> Null Then
  697.                         i = PushObject(iParentGadgets,Handle(i))
  698.                 ElseIf iParent = Null And iClass = GUI_WINDOW
  699.                         i = PushObject(GUI_RootGadgets,Handle(i))
  700.                 ElseIf iParent = Null And iClass = GUI_CONTEXTMENU
  701.                         i = PushObject(GUI_ContextMenus,Handle(i))
  702.                 Else
  703.                         Delete i
  704.                         Return Null
  705.                 EndIf
  706.                 iX = X
  707.                 iY = Y
  708.                 iWidth = W
  709.                 iHeight = H
  710.                 iCaption = Caption
  711.                 iMin = Min
  712.                 iMax = Max
  713.                 iVal = Val
  714.                 iGadgets = CreateStack()
  715.                 iMode = Mode
  716.                 iIcon = LoadImage(icon)
  717.                 If iIcon <> 0 Then
  718.                         MaskImage iIcon,255,0,255
  719.                 EndIf
  720.                 If iClass = GUI_TOOLSTRIP Then
  721.                         If iParent <> Null iParentToolStrip = i
  722.                 EndIf
  723.                
  724.                 If iClass = GUI_MENUSTRIP Then
  725.                         If iParent <> Null iParentMenuStrip = i
  726.                 EndIf
  727.                
  728.                 If iClass = GUI_SLIDER Or iClass = GUI_TRACKBAR Then
  729.                         iState[1] = GroupID
  730.                 EndIf
  731.                
  732.                 If Name$ = "" Then
  733.                         Select iClass
  734.                                 Case GUI_WINDOW
  735.                                         Name="wnd_"
  736.                                 Case GUI_BUTTON
  737.                                         Name="btn_"
  738.                                 Case GUI_ROLLOUT
  739.                                         Name="rol_"
  740.                                 Case GUI_SLIDER
  741.                                         Name="sld_"
  742.                                 Case GUI_PROGRESSBAR
  743.                                         Name="prg_"
  744.                                 Case GUI_TRACKBAR
  745.                                         Name="trk_"
  746.                                 Case GUI_HORSCROLL
  747.                                         Name="hrs_"
  748.                                 Case GUI_VERSCROLL
  749.                                         Name="vrs_"
  750.                                 Case GUI_PANEL
  751.                                         Name="pnl_"
  752.                                 Case GUI_LISTBOX
  753.                                         Name="lst_"
  754.                                 Case GUI_LISTBOXITEM
  755.                                         Name="lsi_"
  756.                                 Case GUI_COMBOBOX
  757.                                         Name="cmb_"
  758.                                 Case GUI_TREEVIEW
  759.                                         Name="trv_"
  760.                                 Case GUI_RADIO
  761.                                         Name="rad_"
  762.                                 Case GUI_CHECKBOX
  763.                                         Name="cbx_"
  764.                                 Case GUI_CONTEXTMENU
  765.                                         Name="cxm_"
  766.                                 Case GUI_CONTEXTMENUITEM
  767.                                         Name="cxi_"
  768.                                 Case GUI_CONTEXTMENUBAR
  769.                                         Name="cxb_"
  770.                                 Case GUI_TABSTRIP
  771.                                         Name="tab_"
  772.                                 Case GUI_TABPAGE
  773.                                         Name="pag_"
  774.                                 Case GUI_VIEWPORT
  775.                                         Name="v3d_"
  776.                         End Select
  777.                         index = 1
  778.                         For g.Gadget = Each Gadget
  779.                                 If g <> i And gClass = iClass Then index = index + 1
  780.                         Next
  781.                         Name = Name+index
  782.                 EndIf
  783.                
  784.                 iName = Name
  785.                
  786.                 CreateGUIImage(i)
  787.                 Return i
  788.         End Function
  789.        
  790.         Function GetGadgetSX(g.Gadget)
  791.                 Local x
  792.                 While g <> Null
  793.                         x = x + gX
  794.                         If gClass = GUI_MENUSTRIP Then
  795.                                 For i = 0 To Objects(gGadgets)-1
  796.                                         item.Gadget = Object.Gadget(GetObject(gGadgets,i))
  797.                                         x = x + itemWidth
  798.                                 Next
  799.                         EndIf
  800.                         g = gParent
  801.                 Wend
  802.                 Return x
  803.         End Function
  804.        
  805.         Function GetGadgetSY(g.Gadget)
  806.                 Local y
  807.                 While g <> Null
  808.                         y = y + gy
  809.                         g = gParent
  810.                         If g <> Null Then
  811.                                 y = y + ((gClass = GUI_WINDOW)*23*((gMode And WM_TITLEBAR)=WM_TITLEBAR)) + (gClass = GUI_ROLLOUT)*15 + 16*(gMenuStrip <> Null) + 20*(gToolStrip <> Null)
  812.                         EndIf
  813.                 Wend
  814.                 Return y
  815.         End Function
  816.        
  817.         Function GetRoot.Gadget(g.Gadget)
  818.                 While g <> Null
  819.                         If gParent = Null Then Exit
  820.                         g = gParent
  821.                 Wend
  822.                 Return g
  823.         End Function
  824.        
  825.         Function OverGadget(ID)
  826.                 i.Gadget = Object.Gadget(ID)
  827.                 If i = Null Then Return
  828.                 x = GetGadgetSX(i)
  829.                 y = GetGadgetSY(i)
  830.                
  831.                 p.Gadget = GetRoot(i)
  832.                 If p <> Null And p <> i Then
  833.                         If pClass = GUI_WINDOW And p <> Objects(GUI_RootGadgets)-1 Then Return 0
  834.                         If pClass = GUI_WINDOW And pState[WINDOW_MINIMIZED] = 1 Then Return 0
  835.                 EndIf
  836.                
  837.                 If iClass = GUI_TABPAGE Then Return iMouseInRect(x,y,iParentWidth,iParentHeight)*(i = iParentState[0])
  838.                
  839.                 Return iOver
  840.                
  841.                 Select iClass
  842.                         Case GUI_WINDOW
  843.                                 For g.Gadget = Each Gadget
  844.                                         If g > i And gClass = GUI_WINDOW And g <> i Then
  845.                                                 If iMouseInRect(x,y,gWidth,gHeight*(Not gState[WINDOW_MINIMIZED])+24*((gMode And WM_TITLEBAR) = WM_TITLEBAR)) Then Return 0
  846.                                         EndIf
  847.                                 Next
  848.                                 Return iMouseInRect(x,y,iWidth,iHeight*(Not iState[WINDOW_MINIMIZED])+24*((iMode And WM_TITLEBAR) = WM_TITLEBAR))
  849.                         Case GUI_ROLLOUT
  850.                                 Return iMouseInRect(x,y,iWidth,16+iHeight*(iState[ROLLOUT_CLOSED] = 0))
  851.                         Case GUI_RADIO,GUI_CHECKBOX
  852.                                 Return iMouseInRect(x,y,16,16)
  853.                         Case GUI_TABPAGE
  854.                                 Return iMouseInRect(x,y,iParentWidth,iParentHeight)*(i = iParentState[0])
  855.                         Default
  856.                                 Return iMouseInRect(x,y,iWidth,iHeight)
  857.                 End Select
  858.         End Function
  859.        
  860.         Function Window(X,Y,Width,Height,Caption$="",Mode=WM_TITLEBAR Or WM_CLOSEBTN Or WM_MINBTN,icon$="",name$="")
  861.                 Return Handle(Gadget(GUI_WINDOW,0,Mode,X,Y,Width,Height,Caption,0,0,0,0,name,icon))
  862.         End Function
  863.        
  864.         Function Button(Parent,X,Y,Width,Height,Caption$="",icon$="",name$="")
  865.                 Return Handle(Gadget(GUI_BUTTON,Parent,Mode,X,Y,Width,Height,Caption,0,0,0,0,name,icon))
  866.         End Function
  867.        
  868.         Function Radio(Parent,X,Y,Caption$="",Group=0,Ticked=0,name$="")
  869.                 Return Handle(Gadget(GUI_RADIO,Parent,Mode,X,Y,0,0,Caption,Group,0,0,Ticked,name))
  870.         End Function
  871.        
  872.         Function Checkbox(Parent,X,Y,Caption$="",Ticked=0,name$="")
  873.                 Return Handle(Gadget(GUI_CHECKBOX,Parent,Mode,X,Y,0,0,Caption,Group,0,0,Ticked,name))
  874.         End Function
  875.        
  876.         Function Groupbox(Parent,X,Y,Width,Height,Caption$="",icon$="",name$="")
  877.                 Return Handle(Gadget(GUI_GROUPBOX,Parent,Mode,X,Y,Width,Height,Caption,0,0,0,0,name,icon))
  878.         End Function
  879.        
  880.         Function Rollout(Parent,X,Y,Width,Height,Caption$="",Closed=0,name$="")
  881.                 Rollout = Handle(Gadget(GUI_ROLLOUT,Parent,Mode,X,Y,Width,Height,Caption,0,0,0,0,name))
  882.                 If Closed = 1 Then
  883.                         CloseGadget(Rollout)
  884.                 EndIf
  885.                 Return Rollout
  886.         End Function
  887.        
  888.         Function Panel(Parent,X,Y,Width,Height,name$="")
  889.                 Return Handle(Gadget(GUI_PANEL,Parent,Mode,X,Y,Width,Height,0,0,0,0,0,name))
  890.         End Function
  891.        
  892.         Function Slider(Parent,X,Y,Width,Height,MinVal#=0,MaxVal#=1,Val#=0,Orientation=SLIDER_HOR,ValueType=SLIDER_INTEGER,SliderWidth=8,Invert=0,name$="")
  893.                 Return Handle(Gadget(GUI_SLIDER,Parent,Orientation Or ValueType Or (Invert*16),X,Y,Width,Height,"",SliderWidth,MinVal,MaxVal,Val,name))
  894.         End Function
  895.        
  896.         Function TrackBar(Parent,X,Y,Width,Height,MinVal#=0,MaxVal#=1,Val#=0,Segments=8,name$="")
  897.                 Return Handle(Gadget(GUI_TRACKBAR,Parent,0,X,Y,Width,Height,"",Segments,MinVal,MaxVal,Val,name))
  898.         End Function
  899.        
  900.         Function TabStrip(Parent,X,Y,Width,Height,name$="")
  901.                 Return Handle(Gadget(GUI_TABSTRIP,Parent,0,X,Y,Width,Height,"",0,0,0,0,name))
  902.         End Function
  903.        
  904.         Function TabPage(Strip,Caption$="",icon$="",name$="")
  905.                 Return Handle(Gadget(GUI_TABPAGE,Strip,0,0,0,0,0,Caption,0,0,0,0,name,icon))
  906.         End Function
  907.        
  908.         Function TextBox(Parent,X,Y,Width,Height,Caption$="",name$="")
  909.                 Return Handle(Gadget(GUI_TEXTBOX,Parent,0,X,Y,Width,Height,Caption,0,0,0,0,name))
  910.         End Function
  911.        
  912.         Function ContextMenu(name$="")
  913.                 Return Handle(Gadget(GUI_CONTEXTMENU,0,0,0,0,0,0,"",0,0,0,0,name))
  914.         End Function
  915.        
  916.         Function ContextMenuItem(Menu,Caption$,icon$="",name$="")
  917.                 Return Handle(Gadget(GUI_CONTEXTMENUITEM,Menu,0,0,0,0,0,Caption,0,0,0,0,name,icon))
  918.         End Function
  919.        
  920.         Function ContextMenuBar(Menu,name$="")
  921.                 Return Handle(Gadget(GUI_CONTEXTMENUBAR,Menu,0,0,0,0,0,"",0,0,0,0,name))
  922.         End Function
  923.        
  924.         Function Label(Parent,X,Y,Caption$,name$="")
  925.                 Return Handle(Gadget(GUI_LABEL,Parent,0,X,Y,0,0,Caption,0,0,0,0,name))
  926.         End Function
  927.        
  928.         Function Viewport3D(Parent,X,Y,Width,Height,name$="")
  929.                 Return Handle(Gadget(GUI_VIEWPORT,Parent,0,X,Y,Width,Height,0,0,0,0,0,name))
  930.         End Function
  931.        
  932.         Function GetGadget(Name$)
  933.                 For g.Gadget = Each Gadget
  934.                         If gName = Name Then Return Handle(g)
  935.                 Next
  936.                 Return 0
  937.         End Function
  938.        
  939.         Function CloseGadget(ID)
  940.                 i.Gadget = Object.Gadget(ID)
  941.                 If i = Null Then Return
  942.                 Select iClass
  943.                         Case GUI_WINDOW
  944.                                 iState[WINDOW_CLOSED] = 1
  945.                         Case GUI_ROLLOUT
  946.                                 iState[ROLLOUT_CLOSED] = 1
  947.                 End Select
  948.         End Function
  949.        
  950.         Function OpenGadget(ID)
  951.                 i.Gadget = Object.Gadget(ID)
  952.                 If i = Null Then Return
  953.                 Select iClass
  954.                         Case GUI_WINDOW
  955.                                 iState[WINDOW_CLOSED] = 0
  956.                         Case GUI_ROLLOUT
  957.                                 iState[ROLLOUT_CLOSED] = 0
  958.                 End Select
  959.         End Function
  960.        
  961.         Function GetViewportCamera(ID)
  962.                 i.Gadget = Object.Gadget(ID)
  963.                 If i = Null Then Return
  964.                 Return iState[29]*(iClass=GUI_VIEWPORT)
  965.         End Function
  966.        
  967.         Function LockWindow(ID)
  968.                 i.Gadget = Object.Gadget(ID)
  969.                 If i = Null Then Return
  970.                 If iClass = GUI_WINDOW Then iState[WINDOW_LOCKED] = 1
  971.         End Function
  972.        
  973.         Function UnlockWindow(ID)
  974.                 i.Gadget = Object.Gadget(ID)
  975.                 If i = Null Then Return
  976.                 If iClass = GUI_WINDOW Then iState[WINDOW_LOCKED] = 0
  977.         End Function
  978.        
  979.         Function OpenContextMenu(ID,X=65535,Y=65535)
  980.                 i.Gadget = Object.Gadget(ID)
  981.                 If i = Null Then Return
  982.                 If iClass = GUI_CONTEXTMENU Then
  983.                         GUI_ActiveContextMenu = i
  984.                         iX = iMouseX()*(X=65535)+X*(X<>65535)
  985.                         iY = iMouseY()*(Y=65535)+Y*(Y<>65535)
  986.                 EndIf
  987.         End Function
  988.        
  989.         Function ModalWindow(ID)
  990.                 i.Gadget = Object.Gadget(ID)
  991.                 GUI_ModalWindow = i
  992.         End Function
  993.        
  994.         Function HideGadget(ID)
  995.                 i.Gadget = Object.Gadget(ID)
  996.                 If i = Null Then Return
  997.                 iState[GADGET_HIDDEN] = 1
  998.         End Function
  999.        
  1000.         Function ShowGadget(ID)
  1001.                 i.Gadget = Object.Gadget(ID)
  1002.                 If i = Null Then Return
  1003.                 iState[GADGET_HIDDEN] = 0
  1004.         End Function
  1005.        
  1006.         Function GadgetHidden(ID)
  1007.                 i.Gadget = Object.Gadget(ID)
  1008.                 If i = Null Then Return -1
  1009.                 Return iState[GADGET_HIDDEN]
  1010.         End Function
  1011.        
  1012.         Function HideUIPointer()
  1013.                 GUI_PointerHidden = 1
  1014.         End Function
  1015.        
  1016.         Function ShowUIPointer()
  1017.                 GUI_PointerHidden = 0
  1018.         End Function
  1019. ;#End Region
  1020.  
  1021.  
  1022. ;#Region DESCRIPTION
  1023.         ;; Functions for drawing the GUI and other operations pertaining to the generation of images
  1024. ;#End Region
  1025.  
  1026. ;#Region CLASSES
  1027.         Const GRAD_HOR = $5000          ;; Horizontal gradient
  1028.         Const GRAD_VER = $5001          ;; Vertical gradient
  1029.         Const GRAD_BOTH = $5002         ;; Square gradient
  1030.         Const GRAD_RADIAL = $5003       ;; Radial gradient              Starts in upper left corner
  1031.         Const GRAD_RHOR = $5004         ;; Horizontal mirrored gradient
  1032.         Const GRAD_RVER = $5005         ;; Vertical mirrored gradient
  1033. ;#End Region
  1034.  
  1035. ;#Region PROCEDURES
  1036.         Function DrawGUI()
  1037.                 For i = 0 To Objects(GUI_RootGadgets)-1
  1038.                         g.Gadget = Object.Gadget(GetObject(GUI_RootGadgets,i))
  1039.                         DrawGadget(g)
  1040.                 Next
  1041.                
  1042.                 DrawGadget(GUI_ActiveContextMenu)
  1043.                
  1044.                 If GUI_PointerHidden=0 Then DrawImage GUI_MouseCursor,iMouseX(),iMouseY()
  1045.         End Function
  1046.        
  1047.         Function DrawGadget(i.Gadget)
  1048.                 If i = Null Then Return
  1049.                
  1050.                 If iState[30] = 1 Then Return
  1051.                
  1052.                 AX = GetGadgetSX(i)
  1053.                 AY = GetGadgetSY(i) + 16*(iMenuStrip <> Null) + 20*(iToolStrip <> Null)
  1054.                
  1055.                 r.Gadget = GetRoot(i)
  1056.                 If r <> Null And r <> i Then
  1057.                         If rClass = GUI_CONTEXTMENU Then
  1058.                                 AX = GetGadgetSX(iParent)
  1059.                                 AY = GetGadgetSY(iParent)+i*16
  1060.                                
  1061.                                 If iOver = 1 Then
  1062.                                         DrawImageRect GUI_ContextMenuItemImage,AX,AY,0,0,3,16
  1063.                                         DrawImageRect GUI_ContextMenuItemImage,AX+iWidth-3,AY,13,0,3,16
  1064.                                         For x = AX+3 To AX+iWidth-3 Step 10
  1065.                                                 DrawImageRect GUI_ContextMenuItemImage,x,AY,3,0,MaxI(10,AX+iWidth-3-x),16
  1066.                                         Next
  1067.                                 EndIf
  1068.                         EndIf
  1069.                 EndIf
  1070.                
  1071.                 Select iClass
  1072.                         Case GUI_WINDOW
  1073.                                 If iState[29] = 1 Then Return
  1074.                                 If (iMode And WM_TITLEBAR) = WM_TITLEBAR Then
  1075.                                         AY = AY-(16*(iMenuStrip <> Null) + 20*(iToolStrip <> Null))
  1076.                                         If i = Objects(GUI_RootGadgets)-1 Then
  1077.                                                 DrawImageRect iImage,AX,AY,0,iHeight,iWidth,24
  1078.                                         Else
  1079.                                                 DrawImageRect iImage,AX,AY,0,iHeight+24,iWidth,24
  1080.                                         EndIf
  1081.                                        
  1082.                                         If (iMode And WM_CLOSEBTN) = WM_CLOSEBTN
  1083.                                                 Select iState[WINDOW_CLOSEBUTTON]
  1084.                                                         Case 0
  1085.                                                                 DrawImageRect iImage,AX+iWidth-20,AY+4,0,iHeight+48,16,16
  1086.                                                         Case 1
  1087.                                                                 DrawImageRect iImage,AX+iWidth-20,AY+4,32,iHeight+48,16,16
  1088.                                                         Case 2
  1089.                                                                 DrawImageRect iImage,AX+iWidth-20,AY+4,16,iHeight+48,16,16
  1090.                                                 End Select
  1091.                                         EndIf
  1092.                                        
  1093.                                         If (iMode And WM_MINBTN) = WM_MINBTN
  1094.                                                 Select iState[WINDOW_MINBUTTON]
  1095.                                                         Case 0
  1096.                                                                 DrawImageRect iImage,AX+iWidth-20-20*((iMode And WM_CLOSEBTN) = WM_CLOSEBTN),AY+4,0,iHeight+48+16*(iState[WINDOW_MINIMIZED]+1),16,16
  1097.                                                         Case 1
  1098.                                                                 DrawImageRect iImage,AX+iWidth-20-20*((iMode And WM_CLOSEBTN) = WM_CLOSEBTN),AY+4,32,iHeight+48+16*(iState[WINDOW_MINIMIZED]+1),16,16
  1099.                                                         Case 2
  1100.                                                                 DrawImageRect iImage,AX+iWidth-20-20*((iMode And WM_CLOSEBTN) = WM_CLOSEBTN),AY+4,16,iHeight+48+16*(iState[WINDOW_MINIMIZED]+1),16,16
  1101.                                                 End Select
  1102.                                         EndIf
  1103.                                         AY = AY+(16*(iMenuStrip <> Null) + 20*(iToolStrip <> Null))
  1104.                                 EndIf
  1105.                                
  1106.                                 If iState[WINDOW_MINIMIZED] = 1 Then Return
  1107.                                
  1108.                                 DrawImageRect iImage,AX,AY+24*((iMode And WM_TITLEBAR)=WM_TITLEBAR),0,0,iWidth,iHeight
  1109.                        
  1110.                         Case GUI_GROUPBOX
  1111.                                 DrawImage iImage,AX,AY
  1112.                        
  1113.                         Case GUI_BUTTON
  1114.                                 Select iState[0]
  1115.                                         Case 0          ;; Normal
  1116.                                                 DrawImageRect iImage,AX,AY,0,0,iWidth,iHeight
  1117.                                         Case 1          ;; Over
  1118.                                                 DrawImageRect iImage,AX,AY,0,iHeight,iWidth,iHeight
  1119.                                         Case 2          ;; Down
  1120.                                                 DrawImageRect iImage,AX,AY,0,iHeight*2,iWidth,iHeight
  1121.                                         Case 3          ;; Disabled
  1122.                                                 DrawImageRect iImage,AX,AY,0,iHeight*3,iWidth,iHeight
  1123.                                 End Select
  1124.                        
  1125.                         Case GUI_TEXTBOX
  1126.                                 DrawImage iImage,AX,AY
  1127.                                
  1128.                                 b = GB()
  1129.                                 SetBuffer(IB(iState[31]))
  1130.                                 Color 255,255,255
  1131.                                 Rect 0,0,256,256
  1132.                                 SetFont GUI_Font
  1133.                                 Color 0,0,0
  1134.                                 Text 4,iHeight/2,iCaption,0,1
  1135.                                 SetBuffer b
  1136.                                
  1137.                                 DrawImage iState[31],AX+1,AY+1
  1138.                        
  1139.                         Case GUI_ROLLOUT
  1140.                                 DrawImageRect iImage,AX,AY,0,0,iWidth,16+(iHeight*(iState[0] = 0))
  1141.                                 DrawImageRect iImage,AX,AY,16*(iState[0]=0),iHeight+16,16,16
  1142.                                
  1143.                                 If iState[0] = 1 Then DrawGadget(iToolStrip) DrawGadget(iMenuStrip) Return 1
  1144.                                
  1145.                         Case GUI_RADIO,GUI_CHECKBOX
  1146.                                 Select iState[TICK_CHECKED]
  1147.                                         Case 0
  1148.                                                 DrawImageRect iImage,AX,AY,0,0,ImageWidth(iImage),16
  1149.                                         Case 1
  1150.                                                 DrawImageRect iImage,AX,AY,0,16,ImageWidth(iImage),16
  1151.                                         Case 2
  1152.                                                 DrawImageRect iImage,AX,AY,0,32,ImageWidth(iImage),16
  1153.                                         Case 3
  1154.                                                 DrawImageRect iImage,AX,AY,0,48,ImageWidth(iImage),16
  1155.                                 End Select
  1156.                                
  1157.                                 If iVal Then
  1158.                                         Color 255,255,255
  1159.                                         Rect AX+4,AY+4,8,8,1
  1160.                                         Color 0,0,0
  1161.                                         Rect AX+4,AY+4,8,8,0
  1162.                                 EndIf
  1163.                                
  1164.                                 iWidth = ImageWidth(iImage)
  1165.                                 iHeight = 16
  1166.                        
  1167.                         Case GUI_LABEL
  1168.                                 DrawImage iImage,AX+(ImageWidth(iImage)/2)*(iState[0] = 1),AY+(ImageHeight(iImage)/2)*(iState[1] = 1)
  1169.                        
  1170.                         Case GUI_VIEWPORT
  1171.                                 DrawImage iImage,AX,AY
  1172.                        
  1173.                         Case GUI_MENUSTRIP
  1174.                                 If iParent <> Null Then
  1175.                                         Select iParentClass
  1176.                                                 Case GUI_ROLLOUT
  1177.                                                         DrawImage iImage,AX,AY+1-16
  1178.                                                 Default
  1179.                                                         DrawImage iImage,AX,AY+1
  1180.                                         End Select
  1181.                                 Else
  1182.                                         DrawImage iImage,0,0
  1183.                                 EndIf
  1184.                        
  1185.                         Case GUI_MENUITEM
  1186.                                 DrawImage iImage,AX,AY
  1187.                        
  1188.                         Case GUI_CONTEXTMENU
  1189.                                 DrawImageRect iImage,iX-3,iY-3,0,0,3,3
  1190.                                 DrawImageRect iImage,iX+16-3,iY-3,13,0,3,3
  1191.                                 DrawImageRect iImage,iX-3,iY+iHeight,0,13,3,3
  1192.                                 DrawImageRect iImage,iX+16-3,iY+iHeight,13,13,3,3
  1193.                                
  1194.                                 DrawImageRect iImage,iX+iWidth,iY-3,29,0,3,3
  1195.                                 DrawImageRect iImage,iX+iWidth,iY+iHeight,29,13,3,3
  1196.                                
  1197.                                 For x = iX+16 To iX+iWidth Step 10
  1198.                                         DrawImageRect iImage,x,iY-3,19,0,MaxI(10,iX+iWidth-x),3
  1199.                                         DrawImageRect iImage,x,iY+iHeight,19,13,MaxI(10,iX+iWidth-x),3
  1200.                                         For y = iY To iY+iHeight Step 10
  1201.                                                 DrawImageRect iImage,x,y,19,3,MaxI(10,iX+iWidth-x),MaxI(10,iY+iHeight-y)
  1202.                                         Next
  1203.                                 Next
  1204.                                
  1205.                                 For y = iY To iY+iHeight Step 10
  1206.                                         DrawImageRect iImage,iX-3,y,0,3,3,MaxI(10,iY+iHeight-y)
  1207.                                         DrawImageRect iImage,iX+iWidth,y,29,3,3,MaxI(10,iY+iHeight-y)
  1208.                                         DrawImageRect iImage,iX+16-3,y,13,3,3,MaxI(10,iY+iHeight-y)                                    
  1209.                                 Next
  1210.                                
  1211.                                 For x = iX To iX+16-3
  1212.                                         DrawImageRect iImage,x,iY-3,3,0,3,MaxI(10,iX+16-3-x)
  1213.                                         DrawImageRect iImage,x,iY+iHeight,3,13,3,MaxI(10,iX+16-3-x)
  1214.                                         For y = iY To iY+iHeight Step 10
  1215.                                                 DrawImageRect iImage,x,y,3,3,MaxI(10,iX+16-3-x),MaxI(10,iY+iHeight-y)
  1216.                                         Next
  1217.                                 Next
  1218.                        
  1219.                         Case GUI_CONTEXTMENUITEM
  1220.                                 DrawImage iImage,AX+2,AY+(16-ImageHeight(iImage))/2
  1221.                                 If iIcon <> 0 Then DrawImage iIcon,AX-1,AY+(16-ImageHeight(iImage))/2
  1222.                                
  1223.                         Case GUI_SLIDER
  1224.                                 v# = iVal
  1225.                                 If (iMode And SLIDER_INTEGER) = SLIDER_INTEGER Then v = Int v
  1226.                                
  1227.                                 DrawImageRect iImage,AX,AY,0,0,iWidth,iHeight
  1228.                                 d# = iMax-iMin
  1229.                                 If d# = 0 Then d# = .01
  1230.                                 bar# = ((v-iMin)/d)*iState[1]
  1231.                                 If bar+1 = bar Then bar = 0
  1232.                                
  1233.                                 If (iMode And SLIDER_HOR) = SLIDER_HOR Then
  1234.                                         p# = (v/d)*(iWidth-2)
  1235.                                         If p+1 = p Then p=0
  1236.                                         DrawImageRect iImage,AX+1+p-bar,AY+1,iWidth,0,iState[1],iHeight-2
  1237.                                 Else
  1238.                                         p# = (v/d)*(iHeight-2)
  1239.                                         If p+1 = p Then p=0
  1240.                                         DrawImageRect iImage,AX+1,AY+1+p-bar,0,iHeight,iWidth-2,iState[1]
  1241.                                 EndIf
  1242.                        
  1243.                         Case GUI_TRACKBAR
  1244.                                 DrawImageRect iImage,AX,AY,0,0,iWidth+1,iHeight+4
  1245.                                 d# = iMax-iMin
  1246.                                 bar = Int(((iVal-iMin)/d))*iState[2]
  1247.                                 p = Int(( (iVal-iMin) / d )*iState[1])*iState[2]
  1248.                                 DrawImageRect iImage,AX+p-bar+1,AY+1,iWidth+1,0,iState[2]-1,iHeight-2
  1249.                        
  1250.                         Case GUI_TABSTRIP
  1251.                                 DrawImage iImage,AX,AY
  1252.                        
  1253.                         Case GUI_TABPAGE
  1254.                                 If i <> iParentState[0] Then
  1255.                                         DrawImageRect iImage,AX+iState[1],AY-(iHeight-2),0,iHeight,iWidth,iHeight-2
  1256.                                         Return
  1257.                                 Else
  1258.                                         DrawImageRect iImage,AX+iState[1],AY-iHeight,0,0,iWidth,iHeight
  1259.                                 EndIf
  1260.                        
  1261.                         Case GUI_IMAGEBOX
  1262.                                 DrawImage iImage,AX,AY
  1263.                        
  1264.                         Case GUI_LISTBOX
  1265.                                 DrawImage iImage,AX-1,AY-1
  1266.                        
  1267.                         Case GUI_LISTBOXITEM
  1268.                                 y = GetGadgetSY(iParent)
  1269.                                 AX = GetGadgetSX(iParent)
  1270.                                 AY = y+i*20-iState[LISTBOX_SCROLL]
  1271.                                
  1272.                                 If AY < y+iParentHeight Then
  1273.                                         If i = iParentState[LISTBOX_SELECTED] Then
  1274. ;                                               Stop
  1275.                                                 Color 64,140,220
  1276.                                                 Rect AX,AY,iWidth,MinI(MaxI((y+iParentHeight)-(AY),20),0),1
  1277.                                         EndIf
  1278.                                        
  1279.                                         DrawImageRect iImage,AX,AY,0,0,iParentWidth,MinI(MaxI((y+iParentHeight)-(AY),20),0)
  1280.                                 EndIf
  1281.                                
  1282.                 End Select
  1283.                
  1284.                 For n = 0 To Objects(iGadgets)-1
  1285.                         g.Gadget = Object.Gadget(GetObject(iGadgets,n))
  1286.                         DrawGadget(g)
  1287.                 Next
  1288.         End Function
  1289.        
  1290.         Function CreateGUIImage(i.Gadget)
  1291.                 b = GraphicsBuffer()
  1292.                
  1293.                 Select iClass
  1294.                         Case GUI_WINDOW
  1295.                                 If iState[WINDOW_CLOSED] = 1 Then Return
  1296.                                 hasTitle = ((iMode And WM_TITLEBAR) = WM_TITLEBAR)
  1297.                                 If hasTitle Then iHeight = iHeight - 24
  1298.                                
  1299.                                 iImage = CreateImage(iWidth,iHeight+96)
  1300.                                
  1301.                                 SetBuffer(ImageBuffer(iImage))
  1302.                                
  1303.                                 Color 64,64,64
  1304.                                 Rect 0,0,MinI(iWidth,48),iHeight+96
  1305.                                
  1306.                                 GradientRect(1,Not hasTitle,iWidth-2,iHeight-(2-hasTitle),iWidth,iHeight,WINDOW_DIALOG_F,WINDOW_DIALOG_T,GRAD_VER,2,1)
  1307.                                
  1308.                                 Color 200,200,200
  1309.                                 Line 1,1,iWidth-2,1
  1310.                                 Line 1,iHeight-2,iWidth-2,iHeight-2
  1311.                                 Line 1,1,1,iHeight-2
  1312.                                 Line iWidth-2,1,iWidth-2,iHeight-2
  1313.                                
  1314.                                 Color 61*.75,99*.75,139*.75
  1315.                                 Rect 0,iHeight,iWidth,24,1
  1316.                                 GradientRect(1,iHeight+1,iWidth-2,23-hasTitle,iWidth,iHeight+24*2,WINDOW_TITLE_ACTIVE_F,WINDOW_TITLE_ACTIVE_T,GRAD_VER,2,1)
  1317.                                 GradientRect(1,iHeight+1+24,iWidth-2,23-hasTitle,iWidth,iHeight+24*2,WINDOW_TITLE_INACTIVE_F,WINDOW_TITLE_INACTIVE_T,GRAD_VER,2,1)
  1318.                                
  1319.                                 SetFont GUI_LFontBold
  1320.                                
  1321.                                 If (iMode And WM_TITLEBARSHADOW) = WM_TITLEBARSHADOW Then
  1322.                                         Color 0,0,0
  1323.                                         For x = -1 To 1
  1324.                                                 For y = -1 To 1
  1325.                                                         Text 4+x,iHeight+12+y,iCaption,0,1
  1326.                                                         Text 4+x,iHeight+36+y,iCaption,0,1
  1327.                                                 Next
  1328.                                         Next
  1329.                                         Color 255,255,255
  1330.                                 Else
  1331.                                         Color 0,0,0
  1332.                                 EndIf
  1333.                                
  1334.                                 Text 20*(iIcon <> 0)+4,iHeight+12,iCaption,0,1
  1335.                                 Text 20*(iIcon <> 0)+4,iHeight+36,iCaption,0,1
  1336.                                
  1337.                                 If iIcon <> 0 Then
  1338.                                         DrawImage iIcon,2,iHeight+4
  1339.                                         DrawImage iIcon,2,iHeight+28
  1340.                                 EndIf
  1341.                                
  1342.                                 Color 32,32,32
  1343.                                
  1344.                                 Rect 0,iHeight+48,iWidth,48
  1345.                                
  1346.                                 GradientRect 1,iHeight+49,14,14,iWidth,iHeight+96,ColorToInt(190,190,190),ColorToInt(210,210,210),GRAD_VER,2,1,0
  1347.                                 GradientRect 1+16,iHeight+49,14,14,iWidth,iHeight+96,ColorToInt(190,190,190),ColorToInt(255,255,255),GRAD_VER,2,1,0
  1348.                                 GradientRect 1+32,iHeight+49,14,14,iWidth,iHeight+96,ColorToInt(220,220,220),ColorToInt(160,160,160),GRAD_VER,2,1,0
  1349.                                
  1350.                                 GradientRect 1,iHeight+49+16,14,14,iWidth,iHeight+96,ColorToInt(190,190,190),ColorToInt(210,210,210),GRAD_VER,2,1,0
  1351.                                 GradientRect 1+16,iHeight+49+16,14,14,iWidth,iHeight+96,ColorToInt(190,190,190),ColorToInt(255,255,255),GRAD_VER,2,1,0
  1352.                                 GradientRect 1+32,iHeight+49+16,14,14,iWidth,iHeight+96,ColorToInt(220,220,220),ColorToInt(160,160,160),GRAD_VER,2,1,0
  1353.                                
  1354.                                 GradientRect 1,iHeight+49+16*2,14,14,iWidth,iHeight+96,ColorToInt(190,190,190),ColorToInt(210,210,210),GRAD_VER,2,1,0
  1355.                                 GradientRect 1+16,iHeight+49+16*2,14,14,iWidth,iHeight+96,ColorToInt(190,190,190),ColorToInt(255,255,255),GRAD_VER,2,1,0
  1356.                                 GradientRect 1+32,iHeight+49+16*2,14,14,iWidth,iHeight+96,ColorToInt(220,220,220),ColorToInt(160,160,160),GRAD_VER,2,1,0
  1357.                                
  1358.                                 Color 255,255,255
  1359.                                 Line 4,iHeight+48+4+1,11,iHeight+48+11+1
  1360.                                 Line 11,iHeight+48+4+1,4,iHeight+48+11+1
  1361.                                
  1362.                                 Line 4+16,iHeight+48+4+1,11+16,iHeight+48+11+1
  1363.                                 Line 11+16,iHeight+48+4+1,4+16,iHeight+48+11+1
  1364.                                
  1365.                                 Line 4+32,iHeight+48+4+2,11+32,iHeight+48+11+2
  1366.                                 Line 11+32,iHeight+48+4+2,4+32,iHeight+48+11+2
  1367.                                
  1368.                                 Rect 3,iHeight+48+3+1+16,10,3,0
  1369.                                 Rect 3,iHeight+48+3+1+32,10,3,0
  1370.                                 Rect 3,iHeight+48+3+1+32,10,9,0
  1371.                                
  1372.                                 Rect 3+16,iHeight+48+3+1+16,10,3,0
  1373.                                 Rect 3+16,iHeight+48+3+1+32,10,3,0
  1374.                                 Rect 3+16,iHeight+48+3+1+32,10,9,0
  1375.                                
  1376.                                 Rect 3+16*2,iHeight+48+3+2+16,10,3,0
  1377.                                 Rect 3+16*2,iHeight+48+3+2+32,10,3,0
  1378.                                 Rect 3+16*2,iHeight+48+3+2+32,10,9,0
  1379.                                
  1380.                                 Color 0,0,0
  1381.                                
  1382.                                 Rect 3,iHeight+48+3+16,10,3,0
  1383.                                 Rect 3,iHeight+48+3+32,10,3,0
  1384.                                 Rect 3,iHeight+48+3+32,10,9,0
  1385.                                
  1386.                                 Rect 3+16,iHeight+48+3+16,10,3,0
  1387.                                 Rect 3+16,iHeight+48+3+32,10,3,0
  1388.                                 Rect 3+16,iHeight+48+3+32,10,9,0
  1389.                                
  1390.                                 Rect 3+16*2,iHeight+48+3+1+16,10,3,0
  1391.                                 Rect 3+16*2,iHeight+48+3+1+32,10,3,0
  1392.                                 Rect 3+16*2,iHeight+48+3+1+32,10,9,0
  1393.                                
  1394.                                 Line 4,iHeight+48+4,11,iHeight+48+11
  1395.                                 Line 11,iHeight+48+4,4,iHeight+48+11
  1396.                                
  1397.                                 Line 4+16,iHeight+48+4,11+16,iHeight+48+11
  1398.                                 Line 11+16,iHeight+48+4,4+16,iHeight+48+11
  1399.                                
  1400.                                 Line 4+32,iHeight+48+4+1,11+32,iHeight+48+11+1
  1401.                                 Line 11+32,iHeight+48+4+1,4+32,iHeight+48+11+1
  1402.                                
  1403.                         Case GUI_BUTTON
  1404.                                 iImage = CreateImage(iWidth+24*(iIcon<>0),iHeight*4)
  1405.                                
  1406.                                 SetBuffer(IB(iImage))
  1407.                                
  1408.                                 Color 64,64,64
  1409.                                 Rect 0,0,iWidth+24*(iIcon<>0),iHeight+24*2                             
  1410.                                
  1411.                                 GradientRect(1,1,iWidth-2+24*(iIcon<>0),iHeight-2,iWidth+24*(iIcon<>0),iHeight*4,ColorToInt(190,190,190),ColorToInt(230,230,230),GRAD_VER,2,1)
  1412.                                
  1413.                                 GradientRect(1,1+iHeight*1,iWidth-2+24*(iIcon<>0),iHeight-2,iWidth+24*(iIcon<>0),iHeight*4,ColorToInt(190,190,190),ColorToInt(255,255,255),GRAD_VER,2,1)
  1414.                                
  1415.                                 GradientRect(1,1+iHeight*2,iWidth-2+24*(iIcon<>0),iHeight-2,iWidth+24*(iIcon<>0),iHeight*4,ColorToInt(230,230,230),ColorToInt(190,190,190),GRAD_VER,1,1)
  1416.                                
  1417.                                 GradientRect(1,1+iHeight*3,iWidth-2+24*(iIcon<>0),iHeight-2,iWidth+24*(iIcon<>0),iHeight*4,ColorToInt(130,130,130),ColorToInt(150,150,150),GRAD_VER,2,1)
  1418.                                
  1419.                                 SetFont GUI_Font
  1420.                                 Color 48,48,48
  1421.                                 Text iWidth/2+24*(iIcon<>0),iHeight/2,iCaption,1,1
  1422.                                 Color 0,0,0
  1423.                                 Text iWidth/2+24*(iIcon<>0),iHeight/2+iHeight,iCaption,1,1
  1424.                                 Color 128,128,128
  1425.                                 Text iWidth/2+24*(iIcon<>0),iHeight/2+iHeight*3,iCaption,1,1
  1426.                                 Color 0,0,0
  1427.                                 Text iWidth/2+1+24*(iIcon<>0),iHeight/2+iHeight*2+1,iCaption,1,1
  1428.                                
  1429.                                 If iIcon <> 0 Then
  1430.                                         DrawImage iIcon,2,4
  1431.                                         DrawImage iIcon,2,iHeight+4
  1432.                                         DrawImage iIcon,2,iHeight*2+4
  1433.                                         DrawImage iIcon,2,iHeight*3+4
  1434.                                 EndIf
  1435.                                
  1436.                         Case GUI_GROUPBOX
  1437.                                 iImage = CreateImage(iWidth,iHeight+1)
  1438.                                
  1439.                                 SetBuffer(IB(iImage))
  1440.                                
  1441.                                 Color 255,0,255
  1442.                                 Rect 0,0,iWidth,iHeight+1,1
  1443.                                
  1444.                                 SetFont GUI_Font
  1445.                                 bLine 1,4,8,4
  1446.                                 bLine 1,4,1,iHeight-1
  1447.                                 bLine 14+StringWidth(iCaption)+24*(iIcon <> 0),4,iWidth-3,4
  1448.                                 bLine iWidth-2,4,iWidth-2,iHeight-1
  1449.                                 bLine 1,iHeight-1,iWidth-2,iHeight-1
  1450.                                 Color 0,0,0
  1451.                                 Text 12+24*(iIcon <> 0),4,iCaption,0,1
  1452.                                
  1453.                         Case GUI_TEXTBOX
  1454.                                 iImage = CreateImage(iWidth,iHeight)
  1455.                                
  1456.                                 Color 0,0,0
  1457.                                 Rect 0,0,iWidth,iHeight,1
  1458.                                
  1459.                                 Color 255,255,255
  1460.                                 Rect 1,1,256,256,1
  1461.                                
  1462.                                 iState[31] = CreateImage(iWidth-2,iHeight-2)
  1463.                                 MaskImage iState[31],255,0,255
  1464.                        
  1465.                         Case GUI_RADIO,GUI_CHECKBOX
  1466.                                 SetFont GUI_Font
  1467.                                 iImage = CreateImage(18+StringWidth(iCaption),64)
  1468.                                
  1469.                                 w = ImageWidth(iImage)
  1470.                                
  1471.                                 SetBuffer(IB(iImage))
  1472.                                
  1473.                                 Color 255,0,255
  1474.                                 Rect 0,0,w,64,1
  1475.                                
  1476.                                 Color 0,0,0
  1477.                                 SetFont GUI_Font
  1478.                                 Text 18,8,iCaption,0,1
  1479.                                 Text 18,8+16,iCaption,0,1
  1480.                                 Text 18,8+16*2,iCaption,0,1
  1481.                                 Color 128,128,128
  1482.                                 Text 18,8+16*3,iCaption,0,1
  1483.                                
  1484.                                 ;; Normal
  1485.                                 Color 0,0,0
  1486.                                 Rect 1,1,14,14,1
  1487.                                
  1488.                                 Color 110,190,255
  1489.                                 Rect 2,2,12,12,1
  1490.                                
  1491.                                 Color 100,120,150
  1492.                                 Rect 4,4,8,8,1
  1493.                                
  1494.                                 ;; Over
  1495.                                 Color 0,0,0
  1496.                                 Rect 1,1+16,14,14,1
  1497.                                
  1498.                                 Color 160,220,255
  1499.                                 Rect 2,2+16,12,12,1
  1500.                                
  1501.                                 Color 100,120,150
  1502.                                 Rect 4,4+16,8,8,1
  1503.                                
  1504.                                 ;; Down
  1505.                                 Color 0,0,0
  1506.                                 Rect 1,1+16*2,14,14,1
  1507.                                
  1508.                                 Color 110,190,255
  1509.                                 Rect 2,2+16*2,12,12,1
  1510.                                
  1511.                                 Color 100,120,150
  1512.                                 Rect 4,4+16*2,8,8,1
  1513.                                
  1514.                                 ;; Disabled
  1515.                                 Color 0,0,0
  1516.                                 Rect 1,1+16*3,14,14,1
  1517.                                
  1518.                                 Color 110,190,255
  1519.                                 Rect 2,2+16*3,12,12,1
  1520.                                
  1521.                                 Color 100,120,150
  1522.                                 Rect 4,4+16*3,8,8,1
  1523.                        
  1524.                         Case GUI_ROLLOUT
  1525.                                 iImage = CreateImage(iWidth,iHeight+32)
  1526.                                 SetBuffer(IB(iImage))
  1527.                                 Color 0,0,0
  1528.                                 Rect 0,0,iWidth,iHeight+16,1
  1529.                                 GradientRect 1,1,iWidth-2,14,iWidth,iHeight+16,ColorToInt(250,250,250),ColorToInt(230,230,230),GRAD_VER,2,2,0
  1530.                                 Color 255,0,255
  1531.                                 Rect 0,iHeight+16,iWidth,16
  1532.                                 Color 0,0,0
  1533.                                 SetFont GUI_Font
  1534.                                 Text iWidth/2,8,iCaption,1,1
  1535.                                
  1536.                                 Color 0,0,0
  1537.                                 Rect 4,-1+iHeight+16+7,8,2,1
  1538.                                 Rect 4+16,-1+iHeight+16+7,8,2,1
  1539.                                 Rect 16+7,-1+iHeight+16+4,2,8,1
  1540.                                
  1541.                                 Color 255,255,255
  1542.                                 Rect 4,1+iHeight+16+7,8,2,1
  1543.                                 Rect 4+16,1+iHeight+16+7,8,2,1
  1544.                                 Rect 16+7,1+iHeight+16+4,2,8,1
  1545.                                
  1546.                                 Color 96,96,96
  1547.                                 Rect 4,iHeight+16+7,8,2,1
  1548.                                 Rect 4+16,iHeight+16+7,8,2,1
  1549.                                 Rect 16+7,iHeight+16+4,2,8,1
  1550.                                
  1551.                                 Color 255,0,255
  1552.                                 Rect 1,16,iWidth-2,iHeight-1
  1553.                                
  1554.                         Case GUI_LABEL
  1555.                                 SetFont GUI_Font
  1556.                                 iImage = CreateImage(StringWidth(iCaption),FontHeight())
  1557.                                 SetBuffer(IB(iImage))
  1558.                                 Color 255,0,255
  1559.                                 Rect 0,0,ImageWidth(iImage),ImageHeight(iImage),1
  1560.                                 Color 0,0,0
  1561.                                 Text 0,0,iCaption,0,0
  1562.                        
  1563.                         Case GUI_VIEWPORT
  1564.                                 iState[29] = CreateCamera()
  1565.                                 iImage = CreateImage(iWidth,iHeight+1)
  1566.                                 CameraViewport iState[29],0,0,iWidth-2,iHeight-2
  1567.                                 HideEntity iState[29]
  1568.                                
  1569.                                 SetBuffer(IB(iImage))
  1570.                                 Color 230,230,230
  1571.                                 Rect 0,0,iWidth,iHeight+1,1
  1572.                                 Color 0,0,0
  1573.                                 Rect 0,0,iWidth,iHeight,1
  1574.                        
  1575.                         Case GUI_MENUSTRIP
  1576.                                 If iParent <> Null Then
  1577.                                         iWidth = iParentWidth
  1578.                                 Else
  1579.                                         iWidth = GraphicsWidth( )
  1580.                                 EndIf
  1581.                                 iHeight = 16
  1582.                                 iX = 0
  1583.                                 iY = -16
  1584.                                 iImage = CreateImage(iWidth,iHeight)
  1585.                                
  1586.                                 SetBuffer(IB(iImage))
  1587.                                 Color 0,0,0
  1588.                                 Rect 0,0,iWidth,iHeight,1
  1589.                                 GradientRect 1,1,iWidth-2,iHeight-1,iWidth,iHeight,ColorToInt(240,240,240),ColorToInt(220,220,220),GRAD_VER,2,1,0
  1590.                        
  1591.                         Case GUI_CONTEXTMENU
  1592.                                 iImage = GUI_ContextMenuImage
  1593.                        
  1594.                         Case GUI_CONTEXTMENUITEM
  1595.                                 iParentWidth = MinI(iParentWidth,20+StringWidth(iCaption))
  1596.                                 iImage = CreateImage(20+StringWidth(iCaption),16)
  1597.                                 Color 255,0,255
  1598.                                 SetBuffer(IB(iImage))
  1599.                                 Rect 0,0,ImageWidth(iImage),16,1
  1600.                                 Color 0,0,0
  1601.                                 SetFont GUI_Font
  1602.                                 Text 18,8,iCaption,0,1
  1603.                        
  1604.                         Case GUI_SLIDER
  1605.                                 If (iMode And SLIDER_HOR) Then
  1606.                                         iImage = CreateImage(iState[1]+iWidth,iHeight)
  1607.                                         w = iWidth+iState[1]
  1608.                                         h = iHeight
  1609.                                         SetBuffer(IB(iImage))
  1610.                                        
  1611.                                         Color 64,64,64
  1612.                                        
  1613.                                         Rect 0,0,ImageWidth(iImage),ImageHeight(iImage)
  1614.                                        
  1615.                                         GradientRect 1,1,iWidth-2,iHeight-2,iWidth,iHeight,ColorToInt(170,230,255),ColorToInt(130,175,210),GRAD_HOR,1,1,0
  1616.                                        
  1617.                                         GradientRect iWidth+1,0,iState[1]-2,iHeight-2,w*2,h*2,ColorToInt(220,220,220),ColorToInt(190,190,190),GRAD_VER,2,1,0
  1618.                                 Else
  1619.                                         iImage = CreateImage(iWidth,iHeight+iState[1])
  1620.                                         w = iWidth
  1621.                                         h = iHeight+iState[1]
  1622.                                         SetBuffer(IB(iImage))
  1623.                                        
  1624.                                         Color 64,64,64
  1625.                                        
  1626.                                         Rect 0,0,ImageWidth(iImage),ImageHeight(iImage)
  1627.                                        
  1628.                                         GradientRect 1,1,iWidth-2,iHeight-2,iWidth,iHeight,ColorToInt(170,230,255),ColorToInt(130,175,210),GRAD_VER,1,1,0
  1629.                                        
  1630.                                         GradientRect 0,iHeight+1,iWidth-2,iState[1]-2,w*2,h*2,ColorToInt(220,220,220),ColorToInt(190,190,190),GRAD_VER,2,1,0
  1631.                                 EndIf
  1632.                        
  1633.                         Case GUI_TRACKBAR
  1634.                                 st = Float iWidth/iState[1]
  1635.                                
  1636.                                 iImage = CreateImage(iWidth+1+st,iHeight+4)
  1637.                                 SetBuffer(IB(iImage))
  1638.                                
  1639.                                 Color 255,0,255
  1640.                                 Rect 0,0,iWidth+st,iHeight+4,1
  1641.                                
  1642.                                 GradientRect 1,1,iWidth-2,iHeight-2,iWidth,iHeight,ColorToInt(200,200,200),ColorToInt(220,220,220),GRAD_VER,0
  1643.                                
  1644.                                 iState[2] = st
  1645.                                 x=st
  1646.                                 While x < iWidth
  1647.                                         Color 255,255,255
  1648.                                         Rect x+1,0,1,iHeight,1
  1649.                                         Color 64,64,64
  1650.                                         Rect x,0,1,iHeight,1
  1651.                                         x = x + st
  1652.                                 Wend
  1653.                                
  1654.                                 Color 255,255,255
  1655.                                 Rect 0,0,iWidth+1,iHeight+1,0
  1656.                                 Color 64,64,64
  1657.                                 Rect 0,0,iWidth,iHeight,0
  1658.                                
  1659.                                 x=0
  1660.                                 While x < iWidth
  1661.                                         Color 255,255,255
  1662.                                         Rect x+1,iHeight,1,4,1
  1663.                                         Color 64,64,64
  1664.                                         Rect x,iHeight,1,3,1
  1665.                                         x = x + st
  1666.                                 Wend
  1667.                                 x = x - 1
  1668.                                 Color 255,255,255
  1669.                                 Rect x+1,iHeight,1,4,1
  1670.                                 Color 64,64,64
  1671.                                 Rect x,iHeight,1,3,1
  1672.                                
  1673.                                 GradientRect iWidth+1,0,st-1,iHeight-2,iWidth+st+2,iHeight+4,ColorToInt(66,157,221),ColorToInt(32,116,175),GRAD_BOTH,2,1,0
  1674.                                
  1675.                         Case GUI_TABSTRIP
  1676.                                 iImage = CreateImage(iWidth,iHeight)
  1677.                                 SetBuffer(IB(iImage))
  1678.                                 Color 64,64,64
  1679.                                 Rect 0,0,iWidth,iHeight,1
  1680.                                 GradientRect 1,1,iWidth-2,iHeight-2,iWidth,iHeight,ColorToInt(180,180,180),ColorToInt(170,170,170),GRAD_VER,0,0,0
  1681.                        
  1682.                         Case GUI_TABPAGE
  1683.                                 SetFont GUI_Font
  1684.                                 iImage = CreateImage(8+StringWidth(iCaption)+20*(iIcon <> 0),44)
  1685.                                 SetBuffer(IB(iImage))
  1686.                                 iWidth = 8+StringWidth(iCaption)+20*(iIcon <> 0)
  1687.                                 iHeight = 22
  1688.                                 Color 64,64,64
  1689.                                 Rect 0,0,iWidth,iHeight*2,1
  1690.                                 GradientRect 1,1,iWidth-2,iHeight-1,iWidth,iHeight*2,ColorToInt(220,220,220),ColorToInt(225,225,225),GRAD_VER,2,1,0
  1691.                                 GradientRect 1,iHeight+1,iWidth-2,iHeight-1,iWidth,iHeight*2,ColorToInt(190,190,190),ColorToInt(198,198,198),GRAD_VER,2,1,0
  1692.                                 Text 4+18*(iIcon <> 0),iHeight/2,iCaption,0,1
  1693.                                 Text 4+18*(iIcon <> 0),iHeight*1.5,iCaption,0,1
  1694.                                
  1695.                                 iState[1] = 0
  1696.                                 iX = 0
  1697.                                 iY = 0
  1698.                                 For g.Gadget = Each Gadget
  1699.                                         If g <> i And gParent = iParent And gClass = iClass Then
  1700.                                                 iState[1] = iState[1] + gWidth-1
  1701.                                         EndIf
  1702.                                 Next
  1703.                                
  1704.                                 If iIcon <> 0 Then
  1705.                                         DrawImage iIcon,3,3
  1706.                                         DrawImage iIcon,3,3+22
  1707.                                 EndIf
  1708.                        
  1709.                         Case GUI_IMAGEBOX
  1710.                                 iImage = CreateImage(ImageWidth(iGroupID)+2,ImageHeight(iGroupID)+2)
  1711.                                 iWidth = ImageWidth(iImage)
  1712.                                 iHeight = ImageWidth(iImage)
  1713.                                 SetBuffer(IB(iImage))
  1714.                                 Color 64,64,64
  1715.                                 Rect 0,0,iWidth,iHeight,0
  1716.                        
  1717.                         Case GUI_LISTBOX
  1718.                                 iImage = CreateImage(iWidth+2,iHeight+2)
  1719.                                 SetBuffer(IB(iImage))
  1720.                                 Color 0,0,0
  1721.                                 Rect 0,0,iWidth+2,iHeight+2,1
  1722.                                 Color 255,255,255
  1723.                                 Rect 1,1,iWidth,iHeight,1
  1724.                        
  1725.                         Case GUI_LISTBOXITEM
  1726.                                 iImage = CreateImage(iParentWidth,20)
  1727.                                 SetBuffer(IB(iImage))
  1728.                                 Color 255,0,255
  1729.                                 Rect 0,0,iParentWidth,20,1
  1730.                                 Color 0,0,0
  1731.                                 SetFont GUI_Font
  1732.                                 Text 2+18*(iIcon <> 0),10,iCaption,0,1
  1733.                                 If iIcon <> 0 Then
  1734.                                         DrawImage iIcon,2,2
  1735.                                 EndIf
  1736.                                
  1737.                 End Select
  1738.                
  1739.                 If iImage <> 0 Then MaskImage iImage,255,0,255
  1740.                
  1741.                 SetBuffer b
  1742.         End Function
  1743.        
  1744.         Function UpdateViewport(ID,Tween#=1,ClearColor=1,ClearDepth=1,CopyToBuffer=1)
  1745.                 g.Gadget = Object.Gadget(ID)
  1746.                 If g <> Null Then
  1747.                         If gClass = GUI_VIEWPORT Then
  1748.                                 ShowEntity gState[29]
  1749.                                 CameraClsMode gState[29],ClearColor,ClearDepth
  1750.                                 RenderWorld Tween
  1751.                                 If CopyToBuffer Then CopyRect 0,0,gWidth-2,gHeight-2,1,1,BackBuffer(),ImageBuffer(gImage)
  1752.                                 HideEntity gState[29]
  1753.                         EndIf
  1754.                 EndIf
  1755.         End Function
  1756.        
  1757.         Function GradientRect(X,Y,W,H,Mx,My,CF,CT,Dir=GRAD_HOR,Bevel=0,BevelSize=1,Blend=0)
  1758.                 Local RF = CF Shr 16 And 255
  1759.                 Local GF = CF Shr 8 And 255
  1760.                 Local BF = CF And 255
  1761.                
  1762.                 Local RT = CT Shr 16 And 255
  1763.                 Local GT = CT Shr 8 And 255
  1764.                 Local BT = CT And 255
  1765.                
  1766.                 Local ix,iy
  1767.                
  1768.                 Local b = GraphicsBuffer()
  1769.                
  1770.                 LockBuffer(b)
  1771.                
  1772.                 Local d# = 0
  1773.                
  1774.                 For ix = 0 To W-1
  1775.                         For iy = 0 To H-1
  1776.                                 If X+ix < Mx And Y+iy < My And X+ix > -1 And Y+iy > -1 Then
  1777.                                         Select Dir
  1778.                                                 Case GRAD_HOR
  1779.                                                         d# = 1.0 - Float ix/W
  1780.                                                 Case GRAD_VER
  1781.                                                         d# = 1.0 - Float iy/H
  1782.                                                 Case GRAD_BOTH,GRAD_RADIAL
  1783.                                                         d# = 1.0 - (Float iy/H + Float ix/W)/2
  1784.                                                 Case GRAD_RHOR
  1785.                                                         d# = Float Abs(ix-w/2)/(W/2)
  1786.                                                 Case GRAD_RVER
  1787.                                                         d# = Float Abs(iy-h/2)/(H/2)
  1788.                                         End Select
  1789.                                        
  1790.                                         cr = RF*d + RT*(1.0-d)
  1791.                                         cg = GF*d + GT*(1.0-d)
  1792.                                         cb = BF*d + BT*(1.0-d)
  1793.                                        
  1794.                                         Select Blend
  1795.                                                 Case 1          ;; Multiply
  1796.                                                         pix = ReadPixelFast(X+ix,Y+iy)
  1797.                                                         pr = pix Shr 16 And 255
  1798.                                                         pg = pix Shr 8 And 255
  1799.                                                         pb = pix And 255
  1800.                                                         cr = cr*(Float pr/255)
  1801.                                                         cg = cg*(Float pg/255)
  1802.                                                         cb = cb*(Float pb/255)
  1803.                                                 Case 2          ;; Additive
  1804.                                                         pix = ReadPixelFast(X+ix,Y+iy)
  1805.                                                         pr = pix Shr 16 And 255
  1806.                                                         pg = pix Shr 8 And 255
  1807.                                                         pb = pix And 255
  1808.                                                         cr = cr + pr
  1809.                                                         cg = cg + pg
  1810.                                                         cb = cb + pb
  1811.                                                 Case 3          ;; The two combined
  1812.                                                         pix = ReadPixelFast(X+ix,Y+iy)
  1813.                                                         pr = pix Shr 16 And 255
  1814.                                                         pg = pix Shr 8 And 255
  1815.                                                         pb = pix And 255
  1816.                                                         If pr > 127 Then
  1817.                                                                 cr = cr + pr
  1818.                                                         Else
  1819.                                                                 cr = cr*(Float pr/128)
  1820.                                                         EndIf
  1821.                                                        
  1822.                                                         If pg > 127 Then
  1823.                                                                 cg = cg + pg
  1824.                                                         Else
  1825.                                                                 cg = cg*(Float pg/128)
  1826.                                                         EndIf
  1827.                                                        
  1828.                                                         If pb > 127 Then
  1829.                                                                 cb = cb + pb
  1830.                                                         Else
  1831.                                                                 cb = cb*(Float pb/128)
  1832.                                                         EndIf
  1833.                                         End Select
  1834.                                        
  1835.                                        
  1836.                                         Select Bevel
  1837.                                                 Case 1
  1838.                                                         If ix <= BevelSize-1 Or iy <= BevelSize-1
  1839.                                                                 cr = MaxI(cr * .6,255)
  1840.                                                                 cg = MaxI(cg * .6,255)
  1841.                                                                 cb = MaxI(cb * .6,255)
  1842.                                                         EndIf
  1843.                                                         If ix => W-BevelSize+1 Or iy => H-BevelSize+1
  1844.                                                                 cr = MaxI(cr * 1.4,255)
  1845.                                                                 cg = MaxI(cg * 1.4,255)
  1846.                                                                 cb = MaxI(cb * 1.4,255)
  1847.                                                         EndIf
  1848.                                                 Case 2
  1849.                                                         If ix => W-BevelSize+1 Or iy => H-BevelSize+1
  1850.                                                                 cr = MaxI(cr * .6,255)
  1851.                                                                 cg = MaxI(cg * .6,255)
  1852.                                                                 cb = MaxI(cb * .6,255)
  1853.                                                         EndIf
  1854.                                                         If ix <= BevelSize-1 Or iy <= BevelSize-1
  1855.                                                                 cr = MaxI(cr * 1.4,255)
  1856.                                                                 cg = MaxI(cg * 1.4,255)
  1857.                                                                 cb = MaxI(cb * 1.4,255)
  1858.                                                         EndIf
  1859.                                         End Select
  1860.                                        
  1861.                                        
  1862.                                         c = 255 Shl 24 Or MaxI(cr,255) Shl 16 Or MaxI(cg,255) Shl 8 Or MaxI(cb,255)
  1863.                                        
  1864.                                         WritePixelFast X+ix,Y+iy,c,b
  1865.                                 EndIf
  1866.                         Next
  1867.                 Next
  1868.                
  1869.                 UnlockBuffer(b)
  1870.                
  1871.                 Return
  1872.         End Function
  1873.        
  1874.         Function bLine(X,Y,TX,TY)
  1875.                 Color 64,64,64
  1876.                 Line X,Y,TX,TY
  1877.                 Color 225,225,225
  1878.                 Line X+1,Y+1,TX+1,TY+1
  1879.         End Function
  1880.        
  1881.         Function ColorToInt(R%,G%,B%,A%=255)
  1882.                 Return A Shl 24 Or R Shl 16 Or G Shl 8 Or B
  1883.         End Function
  1884. ;#End Region
  1885.  
  1886. ;#Region DESCRIPTION
  1887.         ;; Convenience functions for returning buffer addresses
  1888. ;#End Region
  1889.  
  1890. ;#Region PROCEDURES
  1891.         Function IB(Image)
  1892.                 Return ImageBuffer(Image)
  1893.         End Function
  1894.        
  1895.         Function TB(Texture)
  1896.                 Return TextureBuffer(Texture)
  1897.         End Function
  1898.        
  1899.         Function GB()
  1900.                 Return GraphicsBuffer()
  1901.         End Function
  1902.        
  1903.         Function BB()
  1904.                 Return BackBuffer()
  1905.         End Function
  1906.        
  1907.         Function FB()
  1908.                 Return FrontBuffer()
  1909.         End Function
  1910. ;#End Region
  1911.  
  1912. ;#Region DESCRIPTION
  1913.         ;; Convenience functions for getting the minimum/maximum values of two values
  1914. ;#End Region
  1915.  
  1916. ;#Region PROCEDURES
  1917.         Function MinF#(A#,B#)
  1918.                 If A < B Then Return B
  1919.                 Return A
  1920.         End Function
  1921.        
  1922.         Function MinI%(A%,B%)
  1923.                 If A < B Then Return B
  1924.                 Return A
  1925.         End Function
  1926.        
  1927.         Function MaxF#(A#,B#)
  1928.                 If A > B Then Return B
  1929.                 Return A
  1930.         End Function
  1931.                
  1932.         Function MaxI%(A%,B%)
  1933.                 If A > B Then Return B
  1934.                 Return A
  1935.         End Function
  1936.  
  1937. ;#End Region


Comments :


OJay(Posted 1+ years ago)

 any chance of getting a small sample-code that shows the usage of at least the very important functions?


N(Posted 1+ years ago)

 Nope.The basic idea is that you create your gadgets, update the GUI, iterate over events, and draw the GUI.All the important functions are self explanatory.


jfk EO-11110(Posted 1+ years ago)

 Because the functions are not declared at the beginning of the lines, they are not listed in the IDE (at least in the default IDE, making it a little hard to test things. Besides, a list of the functions with Parameters would also be helpful.


Blitzplotter(Posted 1+ years ago)

 This is cool, I inserted the following at the start to make the GUI persistent:-<div class="quote"> ;#Region DESCRIPTION   ;; Functions for grabbing input;#End RegionInclude "include.bb"While 1      Print "alive"      VWait 10   Wend </div>


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal