Browse Source

Made Viewport remove the old viewed component when setViewedComponent is called, even if it doesn't own it

tags/2021-05-28
jules 9 years ago
parent
commit
5ca221ee11
2 changed files with 17 additions and 13 deletions
  1. +16
    -12
      modules/juce_gui_basics/layout/juce_Viewport.cpp
  2. +1
    -1
      modules/juce_gui_basics/layout/juce_Viewport.h

+ 16
- 12
modules/juce_gui_basics/layout/juce_Viewport.cpp View File

@@ -54,7 +54,7 @@ Viewport::Viewport (const String& name)
Viewport::~Viewport()
{
deleteContentComp();
deleteOrRemoveContentComp();
}
//==============================================================================
@@ -62,20 +62,24 @@ void Viewport::visibleAreaChanged (const Rectangle<int>&) {}
void Viewport::viewedComponentChanged (Component*) {}
//==============================================================================
void Viewport::deleteContentComp()
void Viewport::deleteOrRemoveContentComp()
{
if (contentComp != nullptr)
{
contentComp->removeComponentListener (this);
if (deleteContent)
{
// This sets the content comp to a null pointer before deleting the old one, in case
// anything tries to use the old one while it's in mid-deletion..
ScopedPointer<Component> oldCompDeleter (contentComp);
}
else
{
contentComp = nullptr;
if (deleteContent)
{
// This sets the content comp to a null pointer before deleting the old one, in case
// anything tries to use the old one while it's in mid-deletion..
ScopedPointer<Component> oldCompDeleter (contentComp);
contentComp = nullptr;
}
else
{
contentHolder.removeChildComponent (contentComp);
contentComp = nullptr;
}
}
}
@@ -83,7 +87,7 @@ void Viewport::setViewedComponent (Component* const newViewedComponent, const bo
{
if (contentComp.get() != newViewedComponent)
{
deleteContentComp();
deleteOrRemoveContentComp();
contentComp = newViewedComponent;
deleteContent = deleteComponentWhenNoLongerNeeded;


+ 1
- 1
modules/juce_gui_basics/layout/juce_Viewport.h View File

@@ -274,7 +274,7 @@ private:
Point<int> viewportPosToCompPos (Point<int>) const;
void updateVisibleArea();
void deleteContentComp();
void deleteOrRemoveContentComp();
#if JUCE_CATCH_DEPRECATED_CODE_MISUSE
// If you get an error here, it's because this method's parameters have changed! See the new definition above..


Loading…
Cancel
Save