Hi guys I thought I'd share an example source code of the API in it's current form (from one of my test examples):
Code: Select all
Global NewMap layoutmap.s()
IncludeFile "ProGUI.pbi"
CompilerIf #PB_Compiler_Backend = #PB_Backend_C
Debug "Using C backend"
CompilerEndIf
driver = #PG_RenderDirect2D
;driver = #PG_RenderVector
;driver = #PG_RenderCairo
StartProGUI(driver)
; Global timg1 = LoadImg("Icons\bg_96dpi.jpg", 0)
Global timg1 = LoadImg("Icons\bg_96dpi.png", 0)
;Global backgroundMask = LoadImg("Icons\backgroundMask.png", 0)
Global backBrush = CreateImgBrush(timg1)
BrushSetExtendMode(backBrush, #PG_Brush_ExtendMode_Repeat, #PG_Brush_ExtendMode_Repeat)
;BrushSetScale(backBrush, 1, 1, 150, 150)
;BrushSetScale(backBrush, 1.5, 1.5, 200, 0)
;BrushSetPosition(backBrush, 200, 0)
;BrushSetRotation(backBrush, 45, 200, 0)
;FreeImg(timg1)
Global timg2 = LoadImg("Icons\boingball.png", 0)
; Global timg3 = ImgGrab(timg2, 0, 0, 40, 40)
Global testimg = CreateImg(200, 200, RGBA(255, 0, 255, 255))
BeginDraw(OutputImg(testimg))
DrawBox(20, 20, 50, 50, RGB(255, 255, 0), 1)
EndDraw()
Global tbordermask = LoadImg("Icons\border_new_mask2.png", 0)
Global tborderimg = LoadImg("Icons\border_new2.png", 0)
rc.RECT
rc\left = 20
rc\right = 70
rc\top = 20
rc\bottom = 70
; Global tborderimg = LoadImg("Icons\border29_.png", 0)
; rc.RECT
; rc\left = 50
; rc\right = 210
; rc\top = 50
; rc\bottom = 210
Global tborder = CreateBorder(tborderimg, tbordermask, rc)
;Global ttext = CreateText("Hello this is a test!", "Verdana", 30)
Global ttext = CreateText("ABCD abcd 1234 ASbd!Qgjq - default menu font - ", "Verdana", 12)
Procedure draw(*window.Window, EventType, *eventData.PG_EventData)
Static count.f
; DrawClear(RGB(240, 240, 240), 1)
;
; DrawBoxFill(0, 0, WindowGetWidth(*window), WindowGetHeight(*window), backBrush)
DrawClear(0, 0)
;DrawClear(RGB(240, 240, 240), 1)
BeginLayer(0, 0, WindowGetWidth(*window), WindowGetHeight(*window), 1, 0, tborder)
BrushSetOpacity(backBrush, 0.7)
DrawBoxFill(0, 0, WindowGetWidth(*window), WindowGetHeight(*window), backBrush)
EndProcedure
Procedure drawForeground(*window.Window, EventType, *eventData.PG_EventData)
;DrawBox(0, 0, *eventData\width, *eventData\height, RGB(240, 0, 0), 0.8)
EndLayer()
EndProcedure
Procedure drawTestWidget(*widget.Widget, EventType, *eventData.PG_EventData)
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(0, 200, 0), 0.5)
EndProcedure
Procedure CreateTestWidget()
*widget = CreateWidget(0, 0, 0, 0)
AddEventHandler(*widget, #PG_Event_Draw, @drawTestWidget())
;AddEventHandler(*widget, #PG_Event_DrawForeground, @drawForeground())
layout = CreateLayout()
LayoutSetType(layout, #PG_Layout_Type_Flex)
LayoutSetProperty(layout, #PG_Flex_Direction, #PG_Flex_Direction_Row)
LayoutSetProperty(layout, #PG_Flex_Wrap, #PG_Flex_Wrap_Enabled)
WidgetSetLayout(*widget, layout)
ProcedureReturn *widget
EndProcedure
Procedure drawTestWidget2(*widget.Widget, EventType, *eventData.PG_EventData)
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(200, 200, 0), 0.5)
EndProcedure
Procedure drawTestWidget3(*widget.Widget, EventType, *eventData.PG_EventData)
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(200, 200, 0), 0.5)
EndProcedure
Procedure drawTestWidget4(*widget.Widget, EventType, *eventData.PG_EventData)
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(0, 200, 200), 0.5)
EndProcedure
Procedure CreateTestWidget2()
*widget = CreateWidget(0, 0, 0, 0)
AddEventHandler(*widget, #PG_Event_Draw, @drawTestWidget2())
layout = CreateLayout()
LayoutSetType(layout, #PG_Layout_Type_Flex)
LayoutSetProperty(layout, #PG_Flex_Direction, #PG_Flex_Direction_Column)
LayoutSetProperty(layout, #PG_Flex_Wrap, #PG_Flex_Wrap_Enabled)
WidgetSetLayout(*widget, layout)
ProcedureReturn *widget
EndProcedure
Procedure CreateTestWidget3()
*widget = CreateWidget(0, 0, 0, 0)
AddEventHandler(*widget, #PG_Event_Draw, @drawTestWidget3())
layout = CreateLayout()
LayoutSetType(layout, #PG_Layout_Type_Grid)
LayoutSetProperty(layout, #PG_Grid_Flow, #PG_Grid_Flow_RowDense)
WidgetSetLayout(*widget, layout)
ProcedureReturn *widget
EndProcedure
Procedure CreateTestWidget4()
*widget = CreateWidget(0, 0, 0, 0)
AddEventHandler(*widget, #PG_Event_Draw, @drawTestWidget4())
layout = CreateLayout()
LayoutSetType(layout, #PG_Layout_Type_Grid)
LayoutSetProperty(layout, #PG_Grid_Flow, #PG_Grid_Flow_RowDense)
WidgetSetLayout(*widget, layout)
ProcedureReturn *widget
EndProcedure
Procedure WindowMouseLeftButtonDownEventHandler(Window, EventType, *eventData.PG_EventData, *userData)
Debug "WindowMouseLeftButtonDownEventHandler: " + Str(Window) + " mouseX: " + Str(*eventData\x) + " mouseY: " + Str(*eventData\y)
WindowSetMouseCapture(Window)
EndProcedure
Procedure WindowMouseLeftButtonUpEventHandler(Window, EventType, *eventData.PG_EventData, *userData)
Debug "WindowMouseLeftButtonUpEventHandler: " + Str(Window) + " mouseX: " + Str(*eventData\x) + " mouseY: " + Str(*eventData\y)
WindowReleaseMouseCapture()
EndProcedure
Procedure WindowMouseMoveEventHandler(Window, EventType, *eventData.PG_EventData, *userData)
Debug "WindowMouseMoveEventHandler: " + Str(Window) + " mouseX: " + Str(*eventData\x) + " mouseY: " + Str(*eventData\y)
EndProcedure
Procedure WindowMouseEnterEventHandler(Window, EventType, *eventData.PG_EventData, *userData)
Debug "WindowMouseEnterEventHandler: " + Str(Window)
EndProcedure
Procedure WindowMouseLeaveEventHandler(Window, EventType, *eventData.PG_EventData, *userData)
Debug "WindowMouseLeaveEventHandler: " + Str(Window)
EndProcedure
Procedure WidgetMouseLeftButtonDownEventHandler(*Widget.Widget, EventType, *eventData.PG_EventData, *userData)
Debug "WidgetMouseLeftButtonDownEventHandler: " + Str(Widget) + " mouseX: " + Str(*eventData\x) + " mouseY: " + Str(*eventData\y)
EndProcedure
Procedure WidgetMouseLeftButtonUpEventHandler(*Widget.Widget, EventType, *eventData.PG_EventData, *userData)
Debug "WidgetMouseLeftButtonUpEventHandler: " + Str(Widget) + " mouseX: " + Str(*eventData\x) + " mouseY: " + Str(*eventData\y)
EndProcedure
Procedure WidgetMouseMoveEventHandler(Widget, EventType, *eventData.PG_EventData, *userData)
Debug "WidgetMouseMoveEventHandler: " + Str(Widget) + " mouseX: " + Str(*eventData\x) + " mouseY: " + Str(*eventData\y)
EndProcedure
Procedure WidgetMouseEnterEventHandler(Widget, EventType, *eventData.PG_EventData, *userData)
Debug "WidgetMouseEnterEventHandler: " + Str(Widget)
EndProcedure
Procedure WidgetMouseLeaveEventHandler(Widget, EventType, *eventData.PG_EventData, *userData)
Debug "WidgetMouseLeaveEventHandler: " + Str(Widget)
EndProcedure
Structure TestWidget
*window.Window
isClick.i
isOver.i
EndStructure
Procedure TestWidgetEventHandler(Widget, EventType, *eventData.PG_EventData, *userData)
Select EventType
Case #PG_Event_Draw
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(0, 50, 100), 1)
*testWidget.TestWidget = *userData
If *testWidget\isClick
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(255, 0, 0), 0.8)
EndIf
If *testWidget\isOver
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(200, 200, 255), 0.3)
EndIf
Case #PG_Event_MouseLeftButtonDown
*testWidget.TestWidget = *userData
*testWidget\isClick = #True
WidgetSetMouseCapture(Widget)
WidgetRedraw(Widget)
Case #PG_Event_MouseLeftButtonUp
*testWidget.TestWidget = *userData
*testWidget\isClick = #False
WidgetReleaseMouseCapture()
WidgetRedraw(Widget)
Case #PG_Event_MouseEnter
*testWidget.TestWidget = *userData
*testWidget\isOver = #True
Debug "Enter"
WidgetRedraw(Widget)
Case #PG_Event_MouseLeave
*testWidget.TestWidget = *userData
*testWidget\isOver = #False
Debug "Leave"
WidgetRedraw(Widget)
Case #PG_Event_MouseMove
Debug "move x: " + Str(*eventData\x) + " y: " + Str(*eventData\y)
EndSelect
EndProcedure
Procedure CreateTestWidget5(*window)
*widget = CreateWidget(0, 0, 0, 0)
*testWidget.TestWidget = AllocateStructure(TestWidget)
*testWidget\window = *window
AddEventHandler(*widget, #PG_Event_Draw, @TestWidgetEventHandler(), *testWidget)
AddEventHandler(*widget, #PG_Event_MouseLeftButtonDown, @TestWidgetEventHandler(), *testWidget)
AddEventHandler(*widget, #PG_Event_MouseLeftButtonUp, @TestWidgetEventHandler(), *testWidget)
AddEventHandler(*widget, #PG_Event_MouseEnter, @TestWidgetEventHandler(), *testWidget)
AddEventHandler(*widget, #PG_Event_MouseLeave, @TestWidgetEventHandler(), *testWidget)
AddEventHandler(*widget, #PG_Event_MouseMove, @TestWidgetEventHandler(), *testWidget)
ProcedureReturn *widget
EndProcedure
Procedure WindowAnimateEventHandler(Window, EventType, *eventData.PG_EventData, *userData)
Static brushX.d, brushY.d, brushZoom.d = 1, brushZoomSpeed.d, brushZoomFlip
brushY + 1
max.d = 0.01
speed.d = 0.0001
If brushZoomFlip
brushZoomSpeed - speed
If brushZoomSpeed < -max
brushZoomFlip = #False
EndIf
Else
brushZoomSpeed + speed
If brushZoomSpeed > max
brushZoomFlip = #True
EndIf
EndIf
brushZoom + brushZoomSpeed
BrushSetScale(backBrush, brushZoom, brushZoom, WindowGetWidth(Window)/2, WindowGetHeight(Window)/2)
BrushSetPosition(backBrush, brushX, brushY)
WindowRedraw(Window)
EndProcedure
Structure Sprite
x.d
y.d
width.d
height.d
direction.i
EndStructure
Procedure drawTestWidgetAnim(*widget.Widget, EventType, *eventData.PG_EventData, *sprite.Sprite)
DrawBox(0, 0, *eventData\width, *eventData\height, RGB(0, 0, 200), 0.5)
DrawBox(*sprite\x, *sprite\y, *sprite\width, *sprite\height, RGB(200, 0, 0), 0.8)
EndProcedure
Procedure TestWidgetEventHandlerAnim(*widget.Widget, EventType, *eventData.PG_EventData, *sprite.Sprite)
Select EventType
Case #PG_Event_Animate
Select *eventData\state
Case #PG_Event_Animate_Update
If *sprite\direction = 0
*sprite\x + 1
Else
*sprite\x - 1
EndIf
If *sprite\x < 0
*sprite\x = 0
*sprite\direction = 0
ElseIf *sprite\x + *sprite\width > 200
*sprite\x = 200 - *sprite\width
*sprite\direction = 1
EndIf
WidgetRedraw(*widget)
EndSelect
EndSelect
EndProcedure
Procedure CreateTestWidgetAnim(x, y, width, height)
*widget = CreateWidget(x, y, width, height)
*sprite.Sprite = AllocateStructure(Sprite)
*sprite\width = 20
*sprite\height = 20
*sprite\y = 80
AddEventHandler(*widget, #PG_Event_Draw, @drawTestWidgetAnim(), *sprite)
AddEventHandler(*widget, #PG_Event_Animate, @TestWidgetEventHandlerAnim(), *sprite)
anim = StartAnimation(*widget, "testAnim2")
; layout = CreateLayout()
; LayoutSetType(layout, #PG_Layout_Type_Flex)
; LayoutSetProperty(layout, #PG_Flex_Direction, #PG_Flex_Direction_Row)
; LayoutSetProperty(layout, #PG_Flex_Wrap, #PG_Flex_Wrap_Enabled)
; WidgetSetLayout(*widget, layout)
ProcedureReturn *widget
EndProcedure
OpenConsole()
;*window.Window = CreateWindow(0, 0, 800, 600, "Test", #PG_Window_MinimizeWidget | #PG_Window_MaximizeWidget | #PG_Window_Sizeable)
*window.Window = CreateWindow(0, 0, 800, 600, "Test", #PG_Window_BorderLess | #PG_Window_Sizeable, 0)
; AddEventHandler(*window, #PG_Event_MouseEnter, @WindowMouseEnterEventHandler())
; AddEventHandler(*window, #PG_Event_MouseLeave, @WindowMouseLeaveEventHandler())
; AddEventHandler(*window, #PG_Event_MouseMove, @WindowMouseMoveEventHandler())
; AddEventHandler(*window, #PG_Event_MouseLeftButtonDown, @WindowMouseLeftButtonDownEventHandler())
; AddEventHandler(*window, #PG_Event_MouseLeftButtonUp, @WindowMouseLeftButtonUpEventHandler())
layout = LayoutGetCurrent()
layoutmap(Str(layout)) = "window grid layout 1"
LayoutSetType(layout, #PG_Layout_Type_Grid)
LayoutSetProperty(layout, #PG_Grid_Flow, #PG_Grid_Flow_RowDense)
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0) ; 200
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 0, 0)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 1, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 2, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 2, 20)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 3, 20, #PG_Grid_Percent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 3, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 4, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 4, 20)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 5, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 6, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 7, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateColumnSize, 7, 20)
;LayoutSetProperty(layout, #PG_Grid_DefaultColumnMinSize, 0)
;LayoutSetProperty(layout, #PG_Grid_DefaultColumnSize, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_DefaultColumnMaxSize, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_DefaultRowMinSize, 0)
;LayoutSetProperty(layout, #PG_Grid_DefaultRowMaxSize, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_DefaultRowSize, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_AlignContent, #PG_Grid_AlignContent_SpaceAround)
LayoutSetProperty(layout, #PG_Grid_GapSize, 5, 5)
LayoutSetProperty(layout, #PG_Layout_Padding, 20)
;LayoutSetProperty(layout, #PG_Grid_SpanMode, #PG_Grid_SpanMode_Tight, #PG_Grid_SpanMode_Even)
;LayoutSetProperty(layout, #PG_Grid_JustifyContent, #PG_Grid_JustifyContent_SpaceAround)
;LayoutSetProperty(layout, #PG_Grid_AlignContent, #PG_Grid_AlignContent_SpaceAround)
;LayoutSetProperty(layout, #PG_Grid_JustifyItems, #PG_Grid_JustifyItems_Center)
;LayoutSetProperty(layout, #PG_Grid_AlignItems, #PG_Grid_AlignItems_Center)
For n = 1 To 28
widget = CreateWidget(0, 0, 0, 0)
item = LayoutGetItemFromWidget(widget)
If n = 1
AddEventHandler(widget, #PG_Event_MouseMove, @WidgetMouseMoveEventHandler())
AddEventHandler(widget, #PG_Event_MouseEnter, @WidgetMouseEnterEventHandler())
AddEventHandler(widget, #PG_Event_MouseLeave, @WidgetMouseLeaveEventHandler())
EndIf
If n = 2
AddEventHandler(widget, #PG_Event_MouseMove, @WidgetMouseMoveEventHandler())
AddEventHandler(widget, #PG_Event_MouseEnter, @WidgetMouseEnterEventHandler())
AddEventHandler(widget, #PG_Event_MouseLeave, @WidgetMouseLeaveEventHandler())
EndIf
; LayoutSetItemProperty(item, #PG_Layout_Item_IdealWidth, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 30)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 30)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_Justify, #PG_Layout_Item_Justify_Center)
; LayoutSetItemProperty(item, #PG_Layout_Item_Align, #PG_Layout_Item_Align_Center)
Next
widget = CreateTestWidget3()
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 6)
LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 6)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, #PG_Layout_FitContent)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
layout2 = LayoutGetCurrent()
layoutmap(Str(layout2)) = "grid layout 2"
LayoutSetProperty(layout2, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout2, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout2, #PG_Grid_TemplateColumnSize, 0, 0)
; LayoutSetProperty(layout2, #PG_Grid_TemplateColumnMinSize, 2, #PG_Grid_MaxContent)
; LayoutSetProperty(layout2, #PG_Grid_TemplateColumnMinSize, 3, #PG_Grid_MaxContent)
; LayoutSetProperty(layout2, #PG_Grid_TemplateRowMinSize, 2, #PG_Grid_MaxContent)
; LayoutSetProperty(layout2, #PG_Grid_TemplateRowMinSize, 3, #PG_Grid_MaxContent)
; LayoutSetProperty(layout2, #PG_Grid_DefaultColumnMinSize, 50)
; LayoutSetProperty(layout2, #PG_Grid_DefaultRowMinSize, 50)
LayoutSetProperty(layout2, #PG_Grid_GapSize, 5, 5)
LayoutSetProperty(layout2, #PG_Layout_Padding, 20)
For n = 1 To 12
widget = CreateWidget(0, 0, 0, 0)
item = LayoutGetItemFromWidget(widget)
If n = 1
AddEventHandler(widget, #PG_Event_MouseMove, @WidgetMouseMoveEventHandler())
AddEventHandler(widget, #PG_Event_MouseEnter, @WidgetMouseEnterEventHandler())
AddEventHandler(widget, #PG_Event_MouseLeave, @WidgetMouseLeaveEventHandler())
EndIf
; LayoutSetItemProperty(item, #PG_Layout_Item_IdealWidth, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 30)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 30)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_Justify, #PG_Layout_Item_Justify_Center)
; LayoutSetItemProperty(item, #PG_Layout_Item_Align, #PG_Layout_Item_Align_Center)
Next
widget = CreateTestWidget4()
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, #PG_Layout_FitContent)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
layout3 = LayoutGetCurrent()
layoutmap(Str(layout3)) = "grid layout 3"
LayoutSetProperty(layout3, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout3, #PG_Grid_TemplateColumnSize, 0, 0)
LayoutSetProperty(layout3, #PG_Grid_TemplateColumnSize, 0, 0)
;LayoutSetProperty(layout3, #PG_Grid_TemplateColumnMinSize, 2, #PG_Grid_MaxContent)
;LayoutSetProperty(layout3, #PG_Grid_TemplateColumnMinSize, 3, #PG_Grid_MaxContent)
;LayoutSetProperty(layout3, #PG_Grid_TemplateRowMinSize, 2, #PG_Grid_MaxContent)
;LayoutSetProperty(layout3, #PG_Grid_TemplateRowMinSize, 3, #PG_Grid_MaxContent)
;LayoutSetProperty(layout3, #PG_Grid_DefaultColumnMinSize, 50)
;LayoutSetProperty(layout3, #PG_Grid_DefaultRowMinSize, 50)
LayoutSetProperty(layout3, #PG_Grid_GapSize, 5, 5)
LayoutSetProperty(layout3, #PG_Layout_Padding, 20)
For n = 1 To 12
widget = CreateWidget(0, 0, 0, 0)
item = LayoutGetItemFromWidget(widget)
; LayoutSetItemProperty(item, #PG_Layout_Item_IdealWidth, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 30)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 30)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_Justify, #PG_Layout_Item_Justify_Center)
; LayoutSetItemProperty(item, #PG_Layout_Item_Align, #PG_Layout_Item_Align_Center)
Next
widget = CreateTestWidget()
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 200)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 100)
layout2 = LayoutGetCurrent()
layoutmap(Str(layout2)) = "flex layout"
For n = 1 To 4;000
widget = CreateWidget(380, 50, Random(100), 0)
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 50)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 50)
LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
Next
LayoutSetCurrent(layout3)
widget = CreateTestWidget()
AddEventHandler(widget, #PG_Event_MouseMove, @WidgetMouseMoveEventHandler())
AddEventHandler(widget, #PG_Event_MouseEnter, @WidgetMouseEnterEventHandler())
AddEventHandler(widget, #PG_Event_MouseLeave, @WidgetMouseLeaveEventHandler())
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnStart, 4)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 200)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 100)
layout2 = LayoutGetCurrent()
layoutmap(Str(layout2)) = "flex layout"
For n = 1 To 5;000
widget = CreateWidget(380, 50, Random(100), 0)
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 50)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 50)
LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
Next
widget = CreateButtonOS2(0, 0, 100, 200)
widget = CreateTestWidget5(*window)
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 50)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 50)
LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
CreateTestWidgetAnim(0, 0, 200, 200)
LayoutSetCurrent(layout)
;testWidget = CreateWidget(0, 0, 0, 0)
testWidget = CreateTestWidget()
item = LayoutGetItemFromWidget(testWidget)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 4)
LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 11)
;LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
;LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 4)
;LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 10)
layout2 = LayoutGetCurrent()
layoutmap(Str(layout2)) = "flex layout 2"
For n = 1 To 10;000
widget = CreateWidget(380, 50, Random(250), 0)
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_idealWidth, 60)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 60)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 30)
LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
Next
LayoutSetCurrent(layout)
testWidget = CreateTestWidget()
item = LayoutGetItemFromWidget(testWidget)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 4)
;LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 4)
;LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 1)
LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 10)
layout2 = LayoutGetCurrent()
layoutmap(Str(layout2)) = "flex layout 3"
For n = 1 To 10;000
widget = CreateWidget(380, 50, Random(250), 0) ; 250
item = LayoutGetItemFromWidget(widget)
LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 30)
LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 30)
LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
Next
LayoutSetCurrent(layout)
; testWidget = CreateTestWidget()
; item = LayoutGetItemFromWidget(testWidget)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
; LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
; LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 3)
; LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, 2)
; LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, 4)
; layout2 = LayoutGetCurrent()
; layoutmap(Str(layout2)) = "flex layout 2"
; For n = 1 To 10;000
; widget = CreateWidget(380, 50, Random(250), 0)
; item = LayoutGetItemFromWidget(widget)
; LayoutSetItemProperty(item, #PG_Layout_Item_idealWidth, 60)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 60)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 30)
; LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
; Next
; LayoutSetCurrent(layout)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 9, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 10, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 11, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 12, #PG_Grid_MaxContent)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 9, 50)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 10, 50)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 11, 50)
;LayoutSetProperty(layout, #PG_Grid_TemplateRowSize, 9, 10, #PG_Grid_Percent)
; testWidget = CreateWidget(0, 0, 100, 50)
; item = LayoutGetItemFromWidget(testWidget)
; LayoutSetItemProperty(item, #PG_Layout_Item_ColumnStart, 4)
; LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 9)
; testWidget = CreateWidget(0, 0, 100, 50)
; item = LayoutGetItemFromWidget(testWidget)
; LayoutSetItemProperty(item, #PG_Layout_Item_ColumnStart, 4)
; LayoutSetItemProperty(item, #PG_Layout_Item_RowStart, 10)
AddEventHandler(*window, #PG_Event_Draw, @draw())
AddEventHandler(*window, #PG_Event_DrawForeground, @drawForeground())
AddEventHandler(*window, #PG_Event_Animate, @WindowAnimateEventHandler())
StartAnimation(*window, "windowAnim")
WindowShow(*window)
AddKeyboardShortcut(*window\window, #PB_Shortcut_Down, 1)
AddKeyboardShortcut(*window\window, #PB_Shortcut_Up, 2)
AddKeyboardShortcut(*window\window, #PB_Shortcut_Left, 3)
AddKeyboardShortcut(*window\window, #PB_Shortcut_Right, 4)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Menu
Select EventMenu()
Case 1
*layout.Layout = layout
*layout\yScrollOffset - 10
WindowRedraw(*window)
Case 2
*layout.Layout = layout
*layout\yScrollOffset + 10
WindowRedraw(*window)
Case 3
*layout.Layout = layout
*layout\xScrollOffset + 10
WindowRedraw(*window)
Case 4
*layout.Layout = layout
*layout\xScrollOffset - 10
WindowRedraw(*window)
EndSelect
EndIf
;If Event = #WM_MOUSEMOVE
;*layout.Layout = layout
;*layout\yScrollOffset - 5
;callback_DrawWindow(*window)
;EndIf
If event = #PB_Event_LeftClick
; widget = CreateWidget(0, 0, 0, 0)
; item = LayoutGetItemFromWidget(widget)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_IdealWidth, 30)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 30)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_Justify, #PG_Layout_Item_Justify_Center)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_Align, #PG_Layout_Item_Align_Center)
;
; ;LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 50)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 20 + Random(100))
; ;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 50)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_IdealWidth, Random(200))
; ; If Random(8) = 0
; ; col = 1 + Random(22)
; ; row = 1 + Random(3)
; ; ;Debug col
; ; ;Debug row
; ; LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, col)
; ; LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, row)
; ; EndIf
; *window\callback_ResizeWindow(*window)
; *window\callback_DrawWindow(*window)
EndIf
If event = #PB_Event_RightClick
; ;widget = CreateWidget(0, 0, 0, 0)
; testWidget = CreateTestWidget()
; item = LayoutGetItemFromWidget(testWidget)
; ;item = LayoutGetItemFromWidget(widget)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 50)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_IdealHeight, 100)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 50)
; ;LayoutSetItemProperty(item, #PG_Layout_Item_IdealWidth, 200)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, #PG_Layout_FitContent)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, #PG_Layout_FitContent)
; ;If Random(8) = 0
; col = 1 + Random(6)
; row = 1 + Random(3)
; ;Debug col
; ;Debug row
; LayoutSetItemProperty(item, #PG_Layout_Item_ColumnSpan, col)
; LayoutSetItemProperty(item, #PG_Layout_Item_RowSpan, row)
; ;EndIf
;
;
; layout2 = LayoutGetCurrent()
;
; LayoutSetCurrent(layout2)
; For n = 1 To 10;000
; widget = CreateWidget(380, 50, Random(250), 0)
; item = LayoutGetItemFromWidget(widget)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinWidth, 100)
; LayoutSetItemProperty(item, #PG_Layout_Item_MinHeight, 50)
; LayoutSetItemProperty(item, #PG_Layout_Item_Margin, 5)
; Next
; LayoutSetCurrent(layout)
;
; *window\callback_ResizeWindow(*window)
; *window\callback_DrawWindow(*window)
EndIf
Until Event = #PB_Event_CloseWindow; Or Event = #PB_Event_RightClick
StopProGUI()