From 4e95f451a793dbac5dbc31361cdc5049de48c3cc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 24 Dec 2012 22:32:04 +0300 Subject: Add color for selected text in listboxes. New theme color: LISTBOX_SELECTED --- src/gui/serverdialog.cpp | 7 ++++--- src/gui/theme.cpp | 1 + src/gui/theme.h | 1 + src/gui/widgets/extendedlistbox.cpp | 33 ++++++++++++++++++++++++++------- src/gui/widgets/listbox.cpp | 15 +++++++++++++-- src/gui/widgets/listbox.h | 1 + src/gui/widgets/shoplistbox.cpp | 5 ++++- 7 files changed, 50 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index 5cc1c2acb..2f0610999 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -160,7 +160,6 @@ public: ServersListModel *const model) : ListBox(widget, model), mHighlightColor(getThemeColor(Theme::HIGHLIGHT)), - mTextColor(getThemeColor(Theme::LISTBOX)), mNotSupportedColor(getThemeColor(Theme::SERVER_VERSION_NOT_SUPPORTED)) { } @@ -196,7 +195,10 @@ public: { ServerInfo info = model->getServer(i); - graphics->setColor(mTextColor); + if (mSelected == i) + graphics->setColor(mForegroundSelectedColor); + else + graphics->setColor(mForegroundColor); int top; int x = mPadding; @@ -235,7 +237,6 @@ public: } private: gcn::Color mHighlightColor; - gcn::Color mTextColor; gcn::Color mNotSupportedColor; }; diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp index 46506ecb4..8a4f3573c 100644 --- a/src/gui/theme.cpp +++ b/src/gui/theme.cpp @@ -725,6 +725,7 @@ static int readColorType(const std::string &type) "DROPDOWN", "LABEL", "LISTBOX", + "LISTBOX_SELECTED", "RADIOBUTTON", "POPUP", "TAB", diff --git a/src/gui/theme.h b/src/gui/theme.h index bd5e27708..741f3be44 100644 --- a/src/gui/theme.h +++ b/src/gui/theme.h @@ -203,6 +203,7 @@ class Theme final : public Palette, public ConfigListener DROPDOWN, LABEL, LISTBOX, + LISTBOX_SELECTED, RADIOBUTTON, POPUP, TAB, diff --git a/src/gui/widgets/extendedlistbox.cpp b/src/gui/widgets/extendedlistbox.cpp index bb138b456..bad1472ac 100644 --- a/src/gui/widgets/extendedlistbox.cpp +++ b/src/gui/widgets/extendedlistbox.cpp @@ -82,18 +82,37 @@ void ExtendedListBox::draw(gcn::Graphics *graphics) for (int i = 0, y = 0; i < mListModel->getNumberOfElements(); ++i, y += height) { - const Image *const image = model->getImageAt(i); + if (i != mSelected) + { + const Image *const image = model->getImageAt(i); + if (!image) + { + graphics->drawText(mListModel->getElementAt(i), + mPadding, y + textPos); + } + else + { + g->drawImage(image, mImagePadding, y + (height + - image->getHeight()) / 2 + mPadding); + graphics->drawText(mListModel->getElementAt(i), + image->getWidth() + mImagePadding + mSpacing, y + textPos); + } + } + } + if (mSelected >= 0) + { + const Image *const image = model->getImageAt(mSelected); if (!image) { - graphics->drawText(mListModel->getElementAt(i), - mPadding, y + textPos); + graphics->drawText(mListModel->getElementAt(mSelected), + mPadding, mSelected * height + textPos); } else { - g->drawImage(image, mImagePadding, y + (height - - image->getHeight()) / 2 + mPadding); - graphics->drawText(mListModel->getElementAt(i), - image->getWidth() + mImagePadding + mSpacing, y + textPos); + graphics->setColor(mForegroundSelectedColor); + graphics->drawText(mListModel->getElementAt(mSelected), + image->getWidth() + mImagePadding + mSpacing, + mSelected * height + textPos); } } BLOCK_END("ExtendedListBox::draw") diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp index 4de4e360f..87ecc9460 100644 --- a/src/gui/widgets/listbox.cpp +++ b/src/gui/widgets/listbox.cpp @@ -46,6 +46,7 @@ ListBox::ListBox(const Widget2 *const widget, gcn::ListBox(listModel), Widget2(widget), mHighlightColor(getThemeColor(Theme::HIGHLIGHT)), + mForegroundSelectedColor(getThemeColor(Theme::LISTBOX_SELECTED)), mDistributeMousePressed(true), mOldSelected(-1), mPadding(0) @@ -102,13 +103,23 @@ void ListBox::draw(gcn::Graphics *graphics) height * mSelected + mPadding, getWidth() - 2 * mPadding, height)); } + const int sel = getSelected(); + if (sel >= 0) + { + graphics->setColor(mForegroundSelectedColor); + graphics->drawText(mListModel->getElementAt(sel), + mPadding, sel * height + mPadding); + } // Draw the list elements graphics->setColor(mForegroundColor); for (int i = 0, y = 0; i < mListModel->getNumberOfElements(); ++i, y += height) { - graphics->drawText(mListModel->getElementAt(i), - mPadding, y + mPadding); + if (i != sel) + { + graphics->drawText(mListModel->getElementAt(i), + mPadding, y + mPadding); + } } BLOCK_END("ListBox::draw") } diff --git a/src/gui/widgets/listbox.h b/src/gui/widgets/listbox.h index 442840a29..36f48e7b7 100644 --- a/src/gui/widgets/listbox.h +++ b/src/gui/widgets/listbox.h @@ -89,6 +89,7 @@ class ListBox : public gcn::ListBox, protected: gcn::Color mHighlightColor; + gcn::Color mForegroundSelectedColor; bool mDistributeMousePressed; int mOldSelected; int mPadding; diff --git a/src/gui/widgets/shoplistbox.cpp b/src/gui/widgets/shoplistbox.cpp index 86c2e2e67..7d23189d1 100644 --- a/src/gui/widgets/shoplistbox.cpp +++ b/src/gui/widgets/shoplistbox.cpp @@ -155,7 +155,10 @@ void ShopListBox::draw(gcn::Graphics *gcnGraphics) graphics->drawImage(icon, mPadding, y + mPadding); } } - graphics->setColor(mForegroundColor); + if (mSelected == i) + graphics->setColor(mForegroundSelectedColor); + else + graphics->setColor(mForegroundColor); graphics->drawText(mListModel->getElementAt(i), ITEM_ICON_SIZE + mPadding, y + (ITEM_ICON_SIZE - getFont()->getHeight()) / 2 + mPadding); -- cgit v1.2.3-70-g09d2