diff options
-rw-r--r-- | src/gui/widgets/listbox.cpp | 71 | ||||
-rw-r--r-- | src/gui/widgets/listbox.h | 6 |
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 |