diff options
Diffstat (limited to 'gui/ListWidget.cpp')
| -rw-r--r-- | gui/ListWidget.cpp | 44 | 
1 files changed, 23 insertions, 21 deletions
| diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp index 04c9e8d049..240223f760 100644 --- a/gui/ListWidget.cpp +++ b/gui/ListWidget.cpp @@ -29,19 +29,19 @@  namespace GUI { -ListWidget::ListWidget(GuiObject *boss, int x, int y, int w, int h, WidgetSize ws) -	: EditableWidget(boss, x, y, w, h, ws), CommandSender(boss) { -	init(boss, w, ws); -} -  ListWidget::ListWidget(GuiObject *boss, String name)  	: EditableWidget(boss, name), CommandSender(boss) {  	int w = g_gui.evaluator()->getVar(name + ".w"); -	init(boss, w, g_gui.getWidgetSize()); -} +	WidgetSize ws = g_gui.getWidgetSize(); + +	_leftPadding = g_gui.evaluator()->getVar("ListWidget.leftPadding", 0); +	_rightPadding = g_gui.evaluator()->getVar("ListWidget.rightPadding", 0); +	_topPadding = g_gui.evaluator()->getVar("ListWidget.topPadding", 0); +	_bottomPadding = g_gui.evaluator()->getVar("ListWidget.bottomPadding", 0); +	_hlLeftPadding = g_gui.evaluator()->getVar("ListWidget.hlLeftPadding", 0); +	_hlRightPadding = g_gui.evaluator()->getVar("ListWidget.hlRightPadding", 0); -void ListWidget::init(GuiObject *boss, int w, WidgetSize ws) {  	if (ws == kBigWidgetSize) {  		_w = w - kBigScrollBarWidth;  	} else { @@ -53,7 +53,7 @@ void ListWidget::init(GuiObject *boss, int w, WidgetSize ws) {  	_type = kListWidget;  	_editMode = false;  	_numberingMode = kListNumberingOne; -	_entriesPerPage = (_h - 2) / kLineHeight; +	_entriesPerPage = (_h - _topPadding - _bottomPadding) / kLineHeight;  	_currentPos = 0;  	_selectedItem = -1;  	_scrollBar = new ScrollBarWidget(boss, _x + _w, _y, (ws == kBigWidgetSize ? kBigScrollBarWidth : kNormalScrollBarWidth), _h); @@ -171,7 +171,7 @@ void ListWidget::handleMouseWheel(int x, int y, int direction) {  int ListWidget::findItem(int x, int y) const { -	return (y - 1) / kLineHeight + _currentPos; +	return (y - _topPadding) / kLineHeight + _currentPos;  }  static int matchingCharsIgnoringCase(const char *x, const char *y, bool &stop) { @@ -324,7 +324,7 @@ void ListWidget::drawWidget(bool hilite) {  	// Draw the list items  	for (i = 0, pos = _currentPos; i < _entriesPerPage && pos < len; i++, pos++) { -		const int y = _y + 2 + kLineHeight * i; +		const int y = _y + _topPadding + kLineHeight * i;  		const int fontHeight = kLineHeight;  		bool inverted = false; @@ -337,13 +337,15 @@ void ListWidget::drawWidget(bool hilite) {  		}  		Common::Rect r(getEditRect()); +		int pad = _leftPadding;  		// If in numbering mode, we first print a number prefix  		if (_numberingMode != kListNumberingOff) {  			char temp[10];  			sprintf(temp, "%2d. ", (pos + _numberingMode));  			buffer = temp; -			g_gui.theme()->drawText(Common::Rect(_x + 2, y, _x + r.left, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); +			g_gui.theme()->drawText(Common::Rect(_x, y, _x + r.left + _leftPadding, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, _leftPadding); +			pad = 0;  		}  		int width; @@ -351,20 +353,20 @@ void ListWidget::drawWidget(bool hilite) {  		if (_selectedItem == pos && _editMode) {  			buffer = _editString;  			adjustOffset(); -			width = _w - r.left - 2; -			g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + width, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); +			width = _w - r.left - _hlRightPadding - _leftPadding - _rightPadding; +			g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + width, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, pad);  		} else {  			int maxWidth = _textWidth[i];  			buffer = _list[pos];  			if (_selectedItem != pos) { -				width = g_gui.getStringWidth(buffer); -				if (width > _w - r.left - 2) -					width = _w - r.left - 2; +				width = g_gui.getStringWidth(buffer) + pad; +				if (width > _w - r.left) +					width = _w - r.left;  			} else -				width = _w - r.left - 2; +				width = _w - r.left - _hlRightPadding;  			if (width > maxWidth)  				maxWidth = width; -			g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + maxWidth, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted); +			g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + maxWidth, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, pad);  		}  		_textWidth[i] = width; @@ -372,7 +374,7 @@ void ListWidget::drawWidget(bool hilite) {  }  Common::Rect ListWidget::getEditRect() const { -	Common::Rect r(2, 1, _w - 2 , kLineHeight); +	Common::Rect r(_hlLeftPadding, 1, _w - _hlLeftPadding - _hlRightPadding, kLineHeight);  	const int offset = (_selectedItem - _currentPos) * kLineHeight;  	r.top += offset;  	r.bottom += offset; @@ -381,7 +383,7 @@ Common::Rect ListWidget::getEditRect() const {  		char temp[10];  		// FIXME: Assumes that all digits have the same width.  		sprintf(temp, "%2d. ", (_list.size() - 1 + _numberingMode)); -		r.left += g_gui.getStringWidth(temp); +		r.left += g_gui.getStringWidth(temp) + _leftPadding;  	}  	return r; | 
