52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
|
/**
|
||
|
* @author Christian Burger (christian@krikkel.de)
|
||
|
*/
|
||
|
|
||
|
#include <kNCurses/HorizontalTilingWindowManager.hpp>
|
||
|
#include <kNCurses/Window.hpp>
|
||
|
#include <ncursesw/ncurses.h>
|
||
|
#include <algorithm>
|
||
|
|
||
|
namespace krikkel::NCurses
|
||
|
{
|
||
|
using std::list;
|
||
|
using std::recursive_mutex;
|
||
|
using std::scoped_lock;
|
||
|
|
||
|
HorizontalTilingWindowManager::HorizontalTilingWindowManager(NCursesWindow *rootWindow, std::recursive_mutex *ncursesMutex)
|
||
|
: TilingWindowManager(rootWindow, ncursesMutex)
|
||
|
{}
|
||
|
|
||
|
void HorizontalTilingWindowManager::updateLayout()
|
||
|
{
|
||
|
size_t stackSize = visibleStack.size();
|
||
|
if(stackSize == 0)
|
||
|
{
|
||
|
rootWindow->clear();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
scoped_lock lock(*ncursesMutex);
|
||
|
int availableWidth = rootWindow->width();
|
||
|
int availableHeight = rootWindow->height();
|
||
|
int windowWidth = availableWidth / stackSize - 1;
|
||
|
|
||
|
if((windowWidth + 1) * stackSize < availableWidth)
|
||
|
++windowWidth;
|
||
|
|
||
|
uint16_t x = 0;
|
||
|
list<Window *>::iterator it = visibleStack.begin();
|
||
|
for(size_t index = 0
|
||
|
; index < visibleStack.size() - 1
|
||
|
; ++index)
|
||
|
{
|
||
|
resizeWindow(*it++, availableHeight, windowWidth, 0, x);
|
||
|
x += windowWidth;
|
||
|
{
|
||
|
rootWindow->move(0, x++);
|
||
|
rootWindow->vline(availableHeight);
|
||
|
}
|
||
|
}
|
||
|
resizeWindow(*it, availableHeight, availableWidth - x, 0, x);
|
||
|
}
|
||
|
}
|