Skip to content

Commit

Permalink
GUI Object clean up is only called in destructor... (08KyPADNjo)
Browse files Browse the repository at this point in the history
GUI Object clean up is only called in destructor instead of either destructor or delete function (08KyPADNjo)
  • Loading branch information
Neko-Box-Coder committed Apr 15, 2023
1 parent e9b487e commit 5b282c5
Show file tree
Hide file tree
Showing 12 changed files with 153 additions and 34 deletions.
15 changes: 15 additions & 0 deletions Include/ssGUI/GUIObjectClasses/CompositeClasses/Dropdown.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,21 @@ namespace ssGUI
);
DropdownObjectCount++;
AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* dropdown = static_cast<ssGUI::Dropdown*>(info.Container);
ssGUI::Dropdown::DropdownObjectCount--;
if(ssGUI::Dropdown::DropdownObjectCount == 0)
dropdown->CleanUpDefaultResources();
}
);
}
int Dropdown::DropdownObjectCount = 0;
Expand Down
15 changes: 15 additions & 0 deletions Include/ssGUI/GUIObjectClasses/CompositeClasses/ImageCanvas.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,21 @@ namespace ssGUI
HorizontalScrollbar = CurrentObjectsReferences.GetObjectIndex(hScrollbar);
VerticalScrollbar = CurrentObjectsReferences.GetObjectIndex(vScrollbar);
ImageCanvasObjectCount++;
AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* imageCanvas = static_cast<ssGUI::ImageCanvas*>(info.Container);
ssGUI::ImageCanvas::ImageCanvasObjectCount--;
if(ssGUI::ImageCanvas::ImageCanvasObjectCount == 0)
imageCanvas->CleanUpDefaultResources();
}
);
}
int ImageCanvas::ImageCanvasObjectCount = 0;
Expand Down
16 changes: 16 additions & 0 deletions Include/ssGUI/GUIObjectClasses/CompositeClasses/StandardWindow.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,22 @@ namespace ssGUI
UpdateCloseButton();
StandardWindowObjectCount++;
AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* standardWindow = static_cast<ssGUI::StandardWindow*>(info.Container);
ssGUI::StandardWindow::StandardWindowObjectCount--;
if(ssGUI::StandardWindow::StandardWindowObjectCount == 0)
standardWindow->CleanUpDefaultResources();
}
);
ssLOG_FUNC_EXIT();
}
Expand Down
16 changes: 15 additions & 1 deletion Include/ssGUI/GUIObjectClasses/Image.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,18 @@ namespace ssGUI
ImageTint(255, 255, 255, 255),
ImageDataChangedId(-1)
{
// AddExtension(new ssGUI::Extensions::Border());
AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* image = static_cast<ssGUI::Image*>(info.Container);
if(image->ImageData != nullptr)
image->ImageData->RemoveDataChangedCallback(image->ImageDataChangedId);
}
);
}
=================================================================
*/
Expand All @@ -48,6 +59,9 @@ namespace ssGUI
virtual void ConstructRenderInfo() override;

public:
//string: ListenerKey
static const std::string ListenerKey;

Image();
virtual ~Image() override;

Expand Down
15 changes: 15 additions & 0 deletions Include/ssGUI/GUIObjectClasses/Text.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,21 @@ namespace ssGUI
);
TextObjectCount++;
AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* text = static_cast<ssGUI::Text*>(info.Container);
ssGUI::Text::TextObjectCount--;
if(ssGUI::Text::TextObjectCount == 0)
text->CleanUpDefaultResources();
}
);
}
int Text::TextObjectCount = 0;
Expand Down
20 changes: 15 additions & 5 deletions Src/ssGUI/GUIObjectClasses/CompositeClasses/Dropdown.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,17 +143,27 @@ namespace ssGUI
);

DropdownObjectCount++;

AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* dropdown = static_cast<ssGUI::Dropdown*>(info.Container);

ssGUI::Dropdown::DropdownObjectCount--;

if(ssGUI::Dropdown::DropdownObjectCount == 0)
dropdown->CleanUpDefaultResources();
}
);
}

Dropdown::~Dropdown()
{
NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();

DropdownObjectCount--;

if(DropdownObjectCount == 0)
CleanUpDefaultResources();

//If the object deallocation is not handled by ssGUIManager
if(!Internal_IsDeleted())
Internal_ChildrenManualDeletion(std::vector<ssGUI::ssGUIObjectIndex>{DropdownMenu});
Expand Down
20 changes: 15 additions & 5 deletions Src/ssGUI/GUIObjectClasses/CompositeClasses/ImageCanvas.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -518,17 +518,27 @@ namespace ssGUI
HorizontalScrollbar = CurrentObjectsReferences.GetObjectIndex(hScrollbar);
VerticalScrollbar = CurrentObjectsReferences.GetObjectIndex(vScrollbar);
ImageCanvasObjectCount++;

AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* imageCanvas = static_cast<ssGUI::ImageCanvas*>(info.Container);

ssGUI::ImageCanvas::ImageCanvasObjectCount--;

if(ssGUI::ImageCanvas::ImageCanvasObjectCount == 0)
imageCanvas->CleanUpDefaultResources();
}
);
}

ImageCanvas::~ImageCanvas()
{
NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();

ImageCanvasObjectCount--;

if(ImageCanvasObjectCount == 0)
CleanUpDefaultResources();

//If the object deallocation is not handled by ssGUIManager
if(!Internal_IsDeleted())
Internal_ChildrenManualDeletion(std::vector<ssGUI::ssGUIObjectIndex>{HorizontalScrollbar, VerticalScrollbar});
Expand Down
6 changes: 1 addition & 5 deletions Src/ssGUI/GUIObjectClasses/CompositeClasses/MenuItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,7 @@ namespace ssGUI
MenuItem::~MenuItem()
{
NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();

//NOTE: Handled in Slider
//If the object deallocation is not handled by ssGUIManager
//if(!Internal_IsDeleted())
// Internal_ChildrenManualDeletion(std::vector<ssGUI::ssGUIObjectIndex>{KnobObject});
//NOTE: Children resources deallocation is Handled in Slider
}

ssGUI::Enums::GUIObjectType MenuItem::GetType() const
Expand Down
6 changes: 1 addition & 5 deletions Src/ssGUI/GUIObjectClasses/CompositeClasses/Scrollbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,7 @@ namespace ssGUI
Scrollbar::~Scrollbar()
{
NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();

//NOTE: Handled in Slider
//If the object deallocation is not handled by ssGUIManager
//if(!Internal_IsDeleted())
// Internal_ChildrenManualDeletion(std::vector<ssGUI::ssGUIObjectIndex>{KnobObject});
//NOTE: Children resources deallocation is Handled in Slider
}

void Scrollbar::SetScrollbarSize(float size)
Expand Down
21 changes: 16 additions & 5 deletions Src/ssGUI/GUIObjectClasses/CompositeClasses/StandardWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,18 +320,29 @@ namespace ssGUI
UpdateCloseButton();

StandardWindowObjectCount++;

AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* standardWindow = static_cast<ssGUI::StandardWindow*>(info.Container);

ssGUI::StandardWindow::StandardWindowObjectCount--;

if(ssGUI::StandardWindow::StandardWindowObjectCount == 0)
standardWindow->CleanUpDefaultResources();
}
);

ssLOG_FUNC_EXIT();
}

StandardWindow::~StandardWindow()
{
NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();

StandardWindowObjectCount--;

if(StandardWindowObjectCount == 0)
CleanUpDefaultResources();

//If the object deallocation is not handled by ssGUIManager
if(!Internal_IsDeleted())
Internal_ChildrenManualDeletion(std::vector<ssGUI::ssGUIObjectIndex>{WindowTitle, WindowIcon, CloseButton});
Expand Down
18 changes: 14 additions & 4 deletions Src/ssGUI/GUIObjectClasses/Image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,19 +130,29 @@ namespace ssGUI
DrawingProperties.push_back(currentProperty);
}

const std::string Image::ListenerKey = "Slider";

Image::Image() : ImageData(nullptr),
Fitting(ssGUI::Enums::ImageFitting::FIT_WHOLE_IMAGE),
ImageTint(255, 255, 255, 255),
ImageDataChangedId(-1)
{
// AddExtension(new ssGUI::Extensions::Border());
AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* image = static_cast<ssGUI::Image*>(info.Container);

if(image->ImageData != nullptr)
image->ImageData->RemoveDataChangedCallback(image->ImageDataChangedId);
}
);
}

Image::~Image()
{
if(ImageData != nullptr)
ImageData->RemoveDataChangedCallback(ImageDataChangedId);

NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();
}

Expand Down
19 changes: 15 additions & 4 deletions Src/ssGUI/GUIObjectClasses/Text.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1302,15 +1302,26 @@ namespace ssGUI
);

TextObjectCount++;

AddEventCallback(ssGUI::Enums::EventType::BEFORE_OBJECT_DESTROY)->AddEventListener
(
ListenerKey,
this,
[](ssGUI::EventInfo info)
{
auto* text = static_cast<ssGUI::Text*>(info.Container);

ssGUI::Text::TextObjectCount--;

if(ssGUI::Text::TextObjectCount == 0)
text->CleanUpDefaultResources();
}
);
}

Text::~Text()
{
NotifyAndRemoveOnObjectDestroyEventCallbackIfExist();
TextObjectCount--;

if(TextObjectCount == 0)
CleanUpDefaultResources();
}

void Text::ComputeCharactersPositionAndSize()
Expand Down

0 comments on commit 5b282c5

Please sign in to comment.