summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/widgets/listbox.cpp71
-rw-r--r--src/gui/widgets/listbox.h6
2 files changed, 58 insertions, 19 deletions
diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp
index 4d05e496e..51751c463 100644
--- a/src/gui/widgets/listbox.cpp
+++ b/src/gui/widgets/listbox.cpp
@@ -51,7 +51,8 @@ ListBox::ListBox(const Widget2 *const widget,
mOldSelected(-1),
mPadding(0),
mSkin(nullptr),
- mDistributeMousePressed(true)
+ mDistributeMousePressed(true),
+ mCenterText(false)
{
mForegroundColor = getThemeColor(Theme::LISTBOX);
@@ -96,28 +97,62 @@ void ListBox::draw(gcn::Graphics *graphics)
graphics->setColor(mHighlightColor);
gcn::Font *const font = getFont();
const int rowHeight = getRowHeight();
+ const int width = mDimension.width;
- // Draw filled rectangle around the selected list element
- if (mSelected >= 0)
+ if (mCenterText)
{
- graphics->fillRectangle(gcn::Rectangle(mPadding,
- rowHeight * mSelected + mPadding,
- mDimension.width - 2 * mPadding, rowHeight));
-
- g->setColorAll(mForegroundSelectedColor,
- mForegroundSelectedColor2);
- font->drawString(graphics, mListModel->getElementAt(mSelected),
- mPadding, mSelected * rowHeight + mPadding);
+ // Draw filled rectangle around the selected list element
+ if (mSelected >= 0)
+ {
+ graphics->fillRectangle(gcn::Rectangle(mPadding,
+ rowHeight * mSelected + mPadding,
+ mDimension.width - 2 * mPadding, rowHeight));
+
+ g->setColorAll(mForegroundSelectedColor,
+ mForegroundSelectedColor2);
+ const std::string str = mListModel->getElementAt(mSelected);
+ font->drawString(graphics, str,
+ (width - font->getWidth(str)) / 2,
+ mSelected * rowHeight + mPadding);
+ }
+ // Draw the list elements
+ g->setColorAll(mForegroundColor, mForegroundColor2);
+ const int sz = mListModel->getNumberOfElements();
+ for (int i = 0, y = mPadding; i < sz; ++i, y += rowHeight)
+ {
+ if (i != mSelected)
+ {
+ const std::string str = mListModel->getElementAt(i);
+ font->drawString(graphics, str,
+ (width - font->getWidth(str)) / 2, y);
+ }
+ }
}
- // Draw the list elements
- g->setColorAll(mForegroundColor, mForegroundColor2);
- const int sz = mListModel->getNumberOfElements();
- for (int i = 0, y = mPadding; i < sz; ++i, y += rowHeight)
+ else
{
- if (i != mSelected)
+ // Draw filled rectangle around the selected list element
+ if (mSelected >= 0)
+ {
+ graphics->fillRectangle(gcn::Rectangle(mPadding,
+ rowHeight * mSelected + mPadding,
+ mDimension.width - 2 * mPadding, rowHeight));
+
+ g->setColorAll(mForegroundSelectedColor,
+ mForegroundSelectedColor2);
+ const std::string str = mListModel->getElementAt(mSelected);
+ font->drawString(graphics, str, mPadding,
+ mSelected * rowHeight + mPadding);
+ }
+ // Draw the list elements
+ g->setColorAll(mForegroundColor, mForegroundColor2);
+ const int sz = mListModel->getNumberOfElements();
+ for (int i = 0, y = mPadding; i < sz; ++i, y += rowHeight)
{
- font->drawString(graphics, mListModel->getElementAt(i),
- mPadding, y);
+ if (i != mSelected)
+ {
+ const std::string str = mListModel->getElementAt(i);
+ font->drawString(graphics, str, mPadding, y);
+ }
}
}
BLOCK_END("ListBox::draw")
diff --git a/src/gui/widgets/listbox.h b/src/gui/widgets/listbox.h
index 113174332..dd22ca431 100644
--- a/src/gui/widgets/listbox.h
+++ b/src/gui/widgets/listbox.h
@@ -82,7 +82,7 @@ class ListBox : public gcn::ListBox,
void refocus();
- void setDistributeMousePressed(bool b)
+ void setDistributeMousePressed(const bool b)
{ mDistributeMousePressed = b; }
virtual void adjustSize();
@@ -91,6 +91,9 @@ class ListBox : public gcn::ListBox,
virtual int getSelectionByMouse(const int y) const;
+ void setCenter(const bool b)
+ { mCenterText = b; }
+
protected:
gcn::Color mHighlightColor;
gcn::Color mForegroundColor2;
@@ -101,6 +104,7 @@ class ListBox : public gcn::ListBox,
Skin *mSkin;
static float mAlpha;
bool mDistributeMousePressed;
+ bool mCenterText;
};
#endif // GUI_WIDGETS_LISTBOX_H