diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-08-06 14:02:19 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-08-06 14:12:59 +0300 |
commit | 73e7be1617217396c5f1eead52af87bc7fef2357 (patch) | |
tree | b985dfd5f1173a6c7e1c741c796a4a61de0cefa8 /src/gui/widgets/colorpage.cpp | |
parent | 5ffbb0ca66337bd13a21a1875cc5bec5cc9a724d (diff) | |
download | plus-73e7be1617217396c5f1eead52af87bc7fef2357.tar.gz plus-73e7be1617217396c5f1eead52af87bc7fef2357.tar.bz2 plus-73e7be1617217396c5f1eead52af87bc7fef2357.tar.xz plus-73e7be1617217396c5f1eead52af87bc7fef2357.zip |
add colors tab into chat emotes window.
Diffstat (limited to 'src/gui/widgets/colorpage.cpp')
-rw-r--r-- | src/gui/widgets/colorpage.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/gui/widgets/colorpage.cpp b/src/gui/widgets/colorpage.cpp new file mode 100644 index 000000000..bd37dbeeb --- /dev/null +++ b/src/gui/widgets/colorpage.cpp @@ -0,0 +1,110 @@ +/* + * The ManaPlus Client + * Copyright (C) 2013 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "gui/widgets/colorpage.h" + +#include "gui/widgets/colormodel.h" + +#include "resources/resourcemanager.h" + +#include <guichan/font.hpp> + +#include "debug.h" + +ColorPage::ColorPage(const Widget2 *const widget, + gcn::ListModel *const listModel, + const std::string &skin) : + ListBox(widget, listModel, skin), + mItemPadding(mSkin ? mSkin->getOption("itemPadding") : 1) +{ +// addMouseListener(this); + const gcn::Font *const font = getFont(); + if (font) + mRowHeight = font->getHeight() + 2 * mItemPadding; + else + mRowHeight = 13; + adjustSize(); +} + +ColorPage::~ColorPage() +{ +} + +void ColorPage::draw(gcn::Graphics *graphics) +{ + BLOCK_START("ColorPage::draw") + + ColorModel *const model = static_cast<ColorModel* const>( + mListModel); + Graphics *const g = static_cast<Graphics *const>(graphics); + + mHighlightColor.a = static_cast<int>(mAlpha * 255.0f); + graphics->setColor(mHighlightColor); + updateAlpha(); + gcn::Font *const font = getFont(); + + const int rowHeight = getRowHeight(); + const int width = mDimension.width; + + if (mSelected >= 0) + { + graphics->fillRectangle(gcn::Rectangle(mPadding, + rowHeight * mSelected + mPadding, + mDimension.width - 2 * mPadding, rowHeight)); + + const ColorPair *const colors = model->getColorAt(mSelected); + g->setColorAll(*colors->color1, *colors->color2); + const std::string str = mListModel->getElementAt(mSelected); + font->drawString(graphics, str, (width - font->getWidth(str)) / 2, + mSelected * rowHeight + mPadding); + } + + g->setColorAll(mForegroundColor, mForegroundColor2); + const int sz = mListModel->getNumberOfElements(); + for (int i = 0, y = mPadding; i < sz; ++i, y += rowHeight) + { + if (i != mSelected) + { + const ColorPair *const colors = model->getColorAt(i); + g->setColorAll(*colors->color1, *colors->color2); + const std::string str = mListModel->getElementAt(i); + font->drawString(graphics, str, (width - font->getWidth(str)) / 2, + y); + } + } + + BLOCK_END("ColorPage::draw") +} + +void ColorPage::resetAction() +{ + setSelected(-1); +} + +void ColorPage::adjustSize() +{ + BLOCK_START("ColorPage::adjustSize") + if (mListModel) + { + setHeight(getRowHeight() * mListModel->getNumberOfElements() + + 2 * mPadding + 20); + } + BLOCK_END("ColorPage::adjustSize") +} |