That doesn't seem to help, unfortunately, as the ContainerGadgets still seem to get resized when they shouldn't. That doesn't happen on Windows. However, on both macOS and Windows, all ContainerGadgets fire their resize event when the window is resized...I'm not sure if that's the expected behaviour, especially for the RightTopContainer and RightBottomContainer as they don't actually change their size.
. The SplitterGadget on the right 'jumps'. This is even more pronounced in my project that contains a lot of gadgets in those two containers. It's horribly slow and laggy.
Code: Select all
EnableExplicit
Enumeration
#RightSplitter
#LeftSplitter
#MiddleSplitter
#MainSplitter
EndEnumeration
Procedure.i GadgetSizeChanged(Gadget.i)
Static NewMap Size.s()
If (FindMapElement(Size(), Hex(Gadget)))
If ((Hex(GadgetWidth(Gadget)) = StringField(Size(), 1, ",")) And
(Hex(GadgetHeight(Gadget)) = StringField(Size(), 2, ",")))
ProcedureReturn (#False)
EndIf
EndIf
Size(Hex(Gadget)) = Hex(GadgetWidth(Gadget)) + "," + Hex(GadgetHeight(Gadget))
ProcedureReturn (#True)
EndProcedure
Procedure OnContainerResized()
Protected gadget, child, itemCount
gadget = EventGadget()
child = GetGadgetData(EventGadget())
If GadgetSizeChanged(gadget)
ResizeGadget(child, #PB_Ignore, #PB_Ignore, GadgetWidth(gadget), GadgetHeight(gadget))
SetGadgetText(child, Str(Random(100)))
EndIf
EndProcedure
Procedure OnWindowSized()
ResizeGadget(#MainSplitter, 0, 0, WindowWidth(0), WindowHeight(0))
EndProcedure
Procedure.i MakeContainer()
Protected id, child
id = ContainerGadget(#PB_Any, 0, 0, 0, 0, #PB_Container_Single)
child = StringGadget(#PB_Any, 0, 0, 0, 0, "")
SetGadgetData(id, child)
CloseGadgetList()
BindGadgetEvent(id, @OnContainerResized(), #PB_EventType_Resize)
ProcedureReturn id
EndProcedure
Global RightTopContainer, RightBottomContainer, LeftTopContainer, LeftBottomContainer, MiddleContainer
OpenWindow(0, 0, 0, 640, 480, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
BindEvent(#PB_Event_SizeWindow, @OnWindowSized(), 0)
LoadFont(0, "Verdana", 20)
SetGadgetFont(#PB_Default, FontID(0))
RightTopContainer = MakeContainer()
RightBottomContainer = MakeContainer()
LeftTopContainer = MakeContainer()
LeftBottomContainer = MakeContainer()
MiddleContainer = MakeContainer()
SplitterGadget(#RightSplitter, 0, 0, 100, 100, RightTopContainer, RightBottomContainer)
SplitterGadget(#LeftSplitter, 0, 0, 100, 100, LeftTopContainer, LeftBottomContainer)
SplitterGadget(#MiddleSplitter, 0, 0, 640, 480, MiddleContainer, #RightSplitter, #PB_Splitter_Vertical | #PB_Splitter_SecondFixed)
SplitterGadget(#MainSplitter, 0, 0, 640, 480, #LeftSplitter, #MiddleSplitter, #PB_Splitter_Vertical)
SetGadgetState(#MiddleSplitter, 100)
SetGadgetState(#LeftSplitter, 100)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow