Viewport scrollbar is not showing at the right place


#1

here is how i add tabs to my TabComponent which inherits TabbedComponent and this is the only function in my class this class (and constructor)

void TabComponent::newTab(String tabName, Vector2i cellCount, Vector2i cellSize)
{
        // tabs is a vector of MyViewport 
	tabs.emplace_back(new MyViewport(cellCount, cellSize));
	
	std::size_t size = tabs.size() - 1;
	
	addAndMakeVisible(*tabs[size]);

	addTab(tabName, Colour(123, 123, 123), tabs[size], false, size);
	
}

this is my class where i inherit viewport.

class MyViewport : public Viewport
{
public:
	MyViewport(Vector2i cellCount, Vector2i cellSize) : viewportContentComponent(cellCount, cellSize) 
        {
                      	setViewedComponent(&viewportContentComponent, true);
	                       addAndMakeVisible(viewportContentComponent);
         }
private:
	ViewportContentComponent viewportContentComponent;
};
here is my viewportContentComponent , it is used to be the content component of viewport and it also handles its own child components.

class ViewportContentComponent    : public Component
{
public:
    ViewportContentComponent(Vector2i cellCount, Vector2i pCellSize) { /* init members, addAndMakeVisible */ }

    void resized() { /* positioning of textbuttons (cells vector) */ }

private:
     std::vector<ScopedPointer<TextButton>> cells;
     Vector2i cellSize;
};

but when i run with that code, the horizontal scroller only appears when i move the vertical scroller to bottom
and vertical scroller only appears when i move the horizontal scroller to the right.

it looks like the viewport is bigger than the TabComponent ( my class that inherits TabbedComponent ), but i never done anything with its size as you can see in the code.

i tried logging the viewport width and height and it outputs 398x569 while its content component is 4000x4000 so with that output viewport isnt bigger than its content component


#2

The docs for setViewedComponent say:

(Don’t add or remove any child components directly using the normal Component::addChildComponent() methods).

i.e. get rid of addAndMakeVisible.

Hope that helps


#3

yea it works thanks ! you are right. didnt notice the addAndMakeVisible() calls addChildComponent() . thats sneaky ! thanks !