Skip to content
Snippets Groups Projects
Commit 78ed78c4 authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Improve layout of Emoji Picker

Respect system styling
Increase size of emojis (to remove empty space)
Add hover effect (partially adresses #41)
Less hardcoding of sizes
Use emoji font (color)
parent 49ec388c
No related branches found
No related tags found
No related merge requests found
......@@ -232,6 +232,10 @@ emoji--Panel > * {
color: #caccd1;
}
emoji--Category {
qproperty-hoverBackgroundColor: rgba(230, 230, 230, 30);
}
emoji--Category,
emoji--Category > * {
background-color: #2d3139;
......
......@@ -200,6 +200,10 @@ emoji--Panel > * {
color: #333;
}
emoji--Category {
qproperty-hoverBackgroundColor: rgba(200, 200, 200, 70);
}
emoji--Category,
emoji--Category > * {
background-color: white;
......
......@@ -85,10 +85,10 @@ QListWidget {
background-color: palette(window);
}
RoomInfoListItem {
RoomInfoListItem, UserMentionsWidget {
qproperty-mentionedColor: palette(alternate-base);
qproperty-highlightedBackgroundColor: palette(highlight);
qproperty-hoverBackgroundColor: palette(base);
qproperty-hoverBackgroundColor: palette(light);
qproperty-backgroundColor: palette(window);
qproperty-titleColor: palette(text);
......@@ -116,7 +116,7 @@ RoomInfoListItem {
CommunitiesListItem {
qproperty-highlightedBackgroundColor: palette(highlight);
qproperty-hoverBackgroundColor: palette(base);
qproperty-hoverBackgroundColor: palette(light);
qproperty-backgroundColor: palette(window);
qproperty-avatarBgColor: palette(base);
......@@ -131,6 +131,22 @@ LoadingIndicator {
qproperty-color: palette(light);
}
emoji--Panel,
emoji--Panel > * {
background-color: palette(base);
color: palette(text);
}
emoji--Category {
qproperty-hoverBackgroundColor: palette(highlight);
}
emoji--Category,
emoji--Category > * {
background-color: palette(window);
color: palette(text);
}
FloatingButton {
qproperty-backgroundColor: palette(base);
qproperty-foregroundColor: palette(text);
......
......@@ -43,15 +43,18 @@ Category::Category(QString category, std::vector<Emoji> emoji, QWidget *parent)
emojiListView_->setViewMode(QListView::IconMode);
emojiListView_->setFlow(QListView::LeftToRight);
emojiListView_->setResizeMode(QListView::Adjust);
emojiListView_->setMouseTracking(true);
emojiListView_->verticalScrollBar()->setEnabled(false);
emojiListView_->horizontalScrollBar()->setEnabled(false);
const int cols = 7;
const int rows = emoji.size() / 7;
const int rows = emoji.size() / 7 + 1;
const int emojiSize = 48;
const int gridSize = emojiSize + 4;
// TODO: Be precise here. Take the parent into consideration.
emojiListView_->setFixedSize(cols * 50 + 20, rows * 50 + 20);
emojiListView_->setGridSize(QSize(50, 50));
emojiListView_->setFixedSize(cols * gridSize + 20, rows * gridSize);
emojiListView_->setGridSize(QSize(gridSize, gridSize));
emojiListView_->setDragEnabled(false);
emojiListView_->setEditTriggers(QAbstractItemView::NoEditTriggers);
......@@ -59,7 +62,7 @@ Category::Category(QString category, std::vector<Emoji> emoji, QWidget *parent)
data_->unicode = e.unicode;
auto item = new QStandardItem;
item->setSizeHint(QSize(24, 24));
item->setSizeHint(QSize(emojiSize, emojiSize));
QVariant unicode(data_->unicode);
item->setData(unicode.toString(), Qt::UserRole);
......
......@@ -17,6 +17,7 @@
#pragma once
#include <QColor>
#include <QLabel>
#include <QLayout>
#include <QListView>
......@@ -29,9 +30,13 @@ namespace emoji {
class Category : public QWidget
{
Q_OBJECT
Q_PROPERTY(
QColor hoverBackgroundColor READ hoverBackgroundColor WRITE setHoverBackgroundColor)
public:
Category(QString category, std::vector<Emoji> emoji, QWidget *parent = nullptr);
QColor hoverBackgroundColor() const { return hoverBackgroundColor_; }
void setHoverBackgroundColor(QColor color) { hoverBackgroundColor_ = color; }
signals:
void emojiSelected(const QString &emoji);
......@@ -55,5 +60,7 @@ private:
emoji::ItemDelegate *delegate_;
QLabel *category_;
QColor hoverBackgroundColor_;
};
} // namespace emoji
......@@ -37,12 +37,22 @@ ItemDelegate::paint(QPainter *painter,
{
Q_UNUSED(index);
painter->save();
QStyleOptionViewItem viewOption(option);
auto emoji = index.data(Qt::UserRole).toString();
// QFont font("Emoji One");
QFont font;
font.setFamily("emoji");
font.setPixelSize(48);
painter->setFont(font);
if (option.state & QStyle::State_MouseOver) {
painter->setBackgroundMode(Qt::OpaqueMode);
QColor hoverColor = parent()->property("hoverBackgroundColor").value<QColor>();
painter->setBackground(hoverColor);
}
painter->drawText(viewOption.rect, Qt::AlignCenter, emoji);
painter->restore();
}
......@@ -202,14 +202,12 @@ Panel::showCategory(const Category *category)
return;
// HACK
// If we want to go to a previous category and position the label at the top
// the 6*50 offset won't work because not all the categories have the same
// height. To ensure the category is at the top, we move to the top and go as
// normal to the next category.
// We want the top of the category to be visible, so scroll to the top first and then to the
// category
if (current > posToGo)
this->scrollArea_->ensureVisible(0, 0, 0, 0);
posToGo += 6 * 50;
posToGo += scrollArea_->height();
this->scrollArea_->ensureVisible(0, posToGo, 0, 0);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment