unless you do fancy stuff with outer object allocation, this should return the first parent canvas
best regards
Paulo Egidio
Multiverse Designer
UCanvasPanel* GetParentCanvas(UWidget* widget)
{
UCanvasPanel* Canvas = nullptr;
do
{
startloop:
auto candidate = widget->GetParent();
if (candidate == nullptr)
{
// try outer object
UObject* outter = widget;
while (true)
{
outter = outter->GetOuter();
if (outter == nullptr)
return nullptr;
auto w = Cast<UWidget>(outter);
if (w != nullptr)
{
widget = w;
goto startloop;
}
}
}
else
widget = candidate;
Canvas = Cast<UCanvasPanel>(widget);
} while (Canvas == nullptr);
return Canvas;
}