コード例 #1
0
ファイル: gridbox.cpp プロジェクト: Supermanu/xoreos
void WidgetGridBox::subActive(Widget &widget) {
	if (widget.getTag().endsWith("#Up")) {
		scrollUp(1);
		return;
	}

	if (widget.getTag().endsWith("#Down")) {
		scrollDown(1);
		return;
	}

	if (widget.getTag().endsWith("#Bar")) {
		if (_itemsByRow == 0)
			return;

		//                                                     Round up
		const size_t rowCount   = (_items.size()        + (_itemsByRow - 1)) / _itemsByRow;
		const size_t visibleRow = (_visibleItems.size() + (_itemsByRow - 1)) / _itemsByRow;

		const ptrdiff_t maxStartRow = rowCount - visibleRow;
		if (maxStartRow <= 0)
			return;

		const size_t startRow  = _scrollbar->getState() * maxStartRow;
		const size_t startItem = startRow * _itemsByRow;

		if (startItem == _startItem)
			return;

		_startItem = startItem;
		updateVisible();
		return;
	}

	WidgetListItem *listItem = dynamic_cast<WidgetListItem *>(&widget);
	if (listItem) {
		if (_selectedItem != listItem->getItemNumber()) {
			_selectedItem = listItem->getItemNumber();
			setActive(true);
			playSound("gui_button", Sound::kSoundTypeSFX);
		}
	}
}
コード例 #2
0
ファイル: gridbox.cpp プロジェクト: cc9cii/xoreos
void WidgetGridBox::subActive(Widget &widget) {
	if (widget.getTag().endsWith("#Up")) {
		scrollUp(1);
		return;
	}

	if (widget.getTag().endsWith("#Down")) {
		scrollDown(1);
		return;
	}

	if (widget.getTag().endsWith("#Bar")) {
		if (_items.size() - _visibleItems.size() == 0)
			return;

		uint maxIfFilled = _items.size() + _itemsByRow - _items.size() % _itemsByRow;
		uint maxVisible  = floor(_contentHeight / _items.front()->getHeight()) * _itemsByRow;

		uint startItem = floor(_scrollbar->getState() * (maxIfFilled - maxVisible)
		                       / _itemsByRow) * _itemsByRow;

		if (startItem == _startItem)
			return;

		_startItem = startItem;
		updateVisible();
		return;
	}

	WidgetListItem *listItem = dynamic_cast<WidgetListItem *>(&widget);
	if (listItem) {
		if (_selectedItem != listItem->getItemNumber()) {
			_selectedItem = listItem->getItemNumber();
			setActive(true);
			playSound("gui_button", Sound::kSoundTypeSFX);
		}
	}
}