コード例 #1
0
ファイル: listbox.cpp プロジェクト: clone2727/xoreos
void WidgetListBox::updateVisible() {
	if (_visibleItems.empty())
		return;

	GfxMan.lockFrame();

	for (size_t i = 0; i < _visibleItems.size(); i++)
		_visibleItems[i]->hide();

	float itemHeight = _items.front()->getHeight();
	float itemY      = _contentY;
	for (size_t i = 0; i < _visibleItems.size(); i++) {
		WidgetListItem *item = _items[_startItem + i];

		itemY -= itemHeight;

		item->setPosition(_contentX, itemY, _contentZ - 5.0f);
		_visibleItems[i] = item;

		if (isVisible())
			_visibleItems[i]->show();
	}

	GfxMan.unlockFrame();
}
コード例 #2
0
ファイル: gridbox.cpp プロジェクト: cc9cii/xoreos
void WidgetGridBox::unlock() {
	assert(_locked);
	_locked = false;

	if (_items.empty()) {
		GfxMan.unlockFrame();
		return;
	}

	_itemsByRow = MIN<uint>(_contentWidth / _items.front()->getWidth(), _items.size());

	uint vCount = MIN<uint>(_contentHeight / _items.front()->getHeight(), _items.size())
	              * _itemsByRow;

	if ((vCount == 0) || (vCount == _visibleItems.size())) {
		GfxMan.unlockFrame();
		return;
	}

	assert(_visibleItems.size() < vCount);
	_visibleItems.reserve(vCount);

	uint start = _startItem + _visibleItems.size();

	float itemHeight = _items.front()->getHeight();
	float itemWidth  = _items.front()->getWidth();
	uint  row        = 0;
	uint  column     = 0;

	// If we reach the last row, compute the items that remains.
	if (_items.size() - _startItem <= _visibleItems.size())
		vCount -= _items.size() % _itemsByRow;

	while (_visibleItems.size() < vCount) {
		WidgetListItem *item = _items[start++];

		// WORKAROUND: The x axis is shifted by 2 pixels in order to correctly render in
		// the charportrait widget.
		float itemY = _contentY - (row + 1) * (itemHeight + _innerVSpace) + _innerVSpace;
		float itemX = _contentX + (column * (itemWidth + _innerHSpace)) - 2.0;
		item->setPosition(itemX, itemY, _contentZ - 5.0);
		_visibleItems.push_back(item);

		if (isVisible())
			_visibleItems.back()->show();

		++column;

		if (column == _itemsByRow) {
			++row;
			column = 0;
		}
	}

	updateScrollbarLength();
	updateScrollbarPosition();

	GfxMan.unlockFrame();
}
コード例 #3
0
ファイル: gridbox.cpp プロジェクト: cc9cii/xoreos
void WidgetGridBox::updateVisible() {
	if (_visibleItems.empty())
		return;

	GfxMan.lockFrame();

	for (uint i = 0; i < _visibleItems.size(); i++)
		_visibleItems[i]->hide();

	if (_visibleItems.size() > _items.size())
		_visibleItems.resize(_items.size());

	float itemHeight = _items.front()->getHeight() + _innerVSpace;
	float itemWidth  = _items.front()->getWidth() + _innerHSpace;
	float itemY      = _contentY - itemHeight + _innerVSpace;

	uint column = 0;
	int  count  = 0;

	if (_items.size() - _startItem <= _visibleItems.size())
		count = _items.size() % _itemsByRow;

	for (uint i = 0; i < (_visibleItems.size() - count); i++) {
		WidgetListItem *item = _items[_startItem + i];

		if (column == _itemsByRow) {
			itemY -= itemHeight;
			column = 0;
		}

		// WORKAROUND: The x axis is shifted by 2 pixels in order to correctly render in
		// the charportrait widget.
		item->setPosition(_contentX + column * itemWidth - 2.0, itemY, _contentZ - 5.0);
		_visibleItems[i] = item;

		if (isVisible())
			_visibleItems[i]->show();

		++column;
	}

	GfxMan.unlockFrame();
}
コード例 #4
0
ファイル: listbox.cpp プロジェクト: clone2727/xoreos
void WidgetListBox::unlock() {
	assert(_locked);
	_locked = false;

	if (_items.empty()) {
		GfxMan.unlockFrame();
		return;
	}

	size_t count = MIN<size_t>(_contentHeight / _items.front()->getHeight(), _items.size());
	if ((count == 0) || (count == _visibleItems.size())) {
		GfxMan.unlockFrame();
		return;
	}

	assert(_visibleItems.size() < count);

	_visibleItems.reserve(count);

	size_t start = _startItem + _visibleItems.size();

	float itemHeight = _items.front()->getHeight();
	while (_visibleItems.size() < count) {
		WidgetListItem *item = _items[start++];

		float itemY = _contentY - (_visibleItems.size() + 1) * itemHeight;
		item->setPosition(_contentX, itemY, _contentZ - 5.0f);

		_visibleItems.push_back(item);
		if (isVisible())
			_visibleItems.back()->show();
	}

	updateScrollbarLength();
	updateScrollbarPosition();

	GfxMan.unlockFrame();
}