From 73e7be1617217396c5f1eead52af87bc7fef2357 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 6 Aug 2013 14:02:19 +0300 Subject: add colors tab into chat emotes window. --- src/gui/widgets/colorpage.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/gui/widgets/colorpage.cpp (limited to 'src/gui/widgets/colorpage.cpp') 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 . + */ + +#include "gui/widgets/colorpage.h" + +#include "gui/widgets/colormodel.h" + +#include "resources/resourcemanager.h" + +#include + +#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( + mListModel); + Graphics *const g = static_cast(graphics); + + mHighlightColor.a = static_cast(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") +} -- cgit v1.2.3-60-g2f50