refactored EnumFlags

This commit is contained in:
fourtf
2018-08-07 07:55:31 +02:00
parent bfa75330a4
commit 381177dd24
24 changed files with 422 additions and 394 deletions
+17 -17
View File
@@ -46,7 +46,7 @@ int MessageLayout::getHeight() const
// Layout
// return true if redraw is required
bool MessageLayout::layout(int width, float scale, MessageElement::Flags flags)
bool MessageLayout::layout(int width, float scale, MessageElementFlags flags)
{
// BenchmarkGuard benchmark("MessageLayout::layout()");
@@ -62,7 +62,7 @@ bool MessageLayout::layout(int width, float scale, MessageElement::Flags flags)
// check if layout state changed
if (this->layoutState_ != app->windows->getGeneration()) {
layoutRequired = true;
this->flags |= RequiresBufferUpdate;
this->flags.set(MessageLayoutFlag::RequiresBufferUpdate);
this->layoutState_ = app->windows->getGeneration();
}
@@ -71,8 +71,8 @@ bool MessageLayout::layout(int width, float scale, MessageElement::Flags flags)
this->currentWordFlags_ = flags; // app->settings->getWordTypeMask();
// check if layout was requested manually
layoutRequired |= bool(this->flags & RequiresLayout);
this->flags &= decltype(RequiresLayout)(~RequiresLayout);
layoutRequired |= this->flags.has(MessageLayoutFlag::RequiresLayout);
this->flags.unset(MessageLayoutFlag::RequiresLayout);
// check if dpi changed
layoutRequired |= this->scale_ != scale;
@@ -92,15 +92,15 @@ bool MessageLayout::layout(int width, float scale, MessageElement::Flags flags)
return true;
}
void MessageLayout::actuallyLayout(int width, MessageElement::Flags _flags)
void MessageLayout::actuallyLayout(int width, MessageElementFlags _flags)
{
auto messageFlags = this->message_->flags.value;
auto messageFlags = this->message_->flags;
if (this->flags & MessageLayout::Expanded ||
(_flags & MessageElement::ModeratorTools &&
!(this->message_->flags & Message::MessageFlags::Disabled))) {
messageFlags = Message::MessageFlags(messageFlags &
~Message::MessageFlags::Collapsed);
if (this->flags.has(MessageLayoutFlag::Expanded) ||
(_flags.has(MessageElementFlag::ModeratorTools) &&
!this->message_->flags.has(MessageFlag::Disabled))) //
{
messageFlags.unset(MessageFlag::Collapsed);
}
this->container_.begin(width, this->scale_, messageFlags);
@@ -117,9 +117,9 @@ void MessageLayout::actuallyLayout(int width, MessageElement::Flags _flags)
this->height_ = this->container_.getHeight();
// collapsed state
this->flags &= ~Flags::Collapsed;
this->flags.unset(MessageLayoutFlag::Collapsed);
if (this->container_.isCollapsed()) {
this->flags |= Flags::Collapsed;
this->flags.set(MessageLayoutFlag::Collapsed);
}
}
@@ -160,7 +160,7 @@ void MessageLayout::paint(QPainter &painter, int width, int y, int messageIndex,
this->container_.paintAnimatedElements(painter, y);
// draw disabled
if (this->message_->flags.HasFlag(Message::Disabled)) {
if (this->message_->flags.has(MessageFlag::Disabled)) {
painter.fillRect(0, y, pixmap->width(), pixmap->height(),
app->themes->messages.disabled);
}
@@ -204,12 +204,12 @@ void MessageLayout::updateBuffer(QPixmap *buffer, int /*messageIndex*/,
// draw background
QColor backgroundColor;
if (this->message_->flags & Message::Highlighted) {
if (this->message_->flags.has(MessageFlag::Highlighted)) {
backgroundColor = app->themes->messages.backgrounds.highlighted;
} else if (this->message_->flags & Message::Subscription) {
} else if (this->message_->flags.has(MessageFlag::Subscription)) {
backgroundColor = app->themes->messages.backgrounds.subscription;
} else if (app->settings->alternateMessageBackground.getValue() &&
this->flags & MessageLayout::AlternateBackground) {
this->flags.has(MessageLayoutFlag::AlternateBackground)) {
backgroundColor = app->themes->messages.backgrounds.alternate;
} else {
backgroundColor = app->themes->messages.backgrounds.regular;
+13 -12
View File
@@ -14,17 +14,18 @@
namespace chatterino {
enum class MessageLayoutFlag : uint8_t {
RequiresBufferUpdate = 1 << 1,
RequiresLayout = 1 << 2,
AlternateBackground = 1 << 3,
Collapsed = 1 << 4,
Expanded = 1 << 5,
};
using MessageLayoutFlags = FlagsEnum<MessageLayoutFlag>;
class MessageLayout : boost::noncopyable
{
public:
enum Flags : uint8_t {
RequiresBufferUpdate = 1 << 1,
RequiresLayout = 1 << 2,
AlternateBackground = 1 << 3,
Collapsed = 1 << 4,
Expanded = 1 << 5,
};
MessageLayout(MessagePtr message_);
~MessageLayout();
@@ -34,10 +35,10 @@ public:
int getHeight() const;
// Flags
FlagsEnum<Flags> flags;
MessageLayoutFlags flags;
// Layout
bool layout(int width, float scale_, MessageElement::Flags flags);
bool layout(int width, float scale_, MessageElementFlags flags);
// Painting
void paint(QPainter &painter, int width, int y, int messageIndex,
@@ -70,12 +71,12 @@ private:
float scale_ = -1;
unsigned int bufferUpdatedCount_ = 0;
MessageElement::Flags currentWordFlags_ = MessageElement::None;
MessageElementFlags currentWordFlags_;
int collapsedHeight_ = 32;
// methods
void actuallyLayout(int width, MessageElement::Flags flags);
void actuallyLayout(int width, MessageElementFlags flags);
void updateBuffer(QPixmap *pixmap, int messageIndex, Selection &selection);
};
+11 -10
View File
@@ -30,8 +30,7 @@ float MessageLayoutContainer::getScale() const
}
// methods
void MessageLayoutContainer::begin(int width, float scale,
Message::MessageFlags flags)
void MessageLayoutContainer::begin(int width, float scale, MessageFlags flags)
{
this->clear();
this->width_ = width;
@@ -97,8 +96,8 @@ void MessageLayoutContainer::_addElement(MessageLayoutElement *element,
// compact emote offset
bool isCompactEmote =
!(this->flags_ & Message::DisableCompactEmotes) &&
element->getCreator().getFlags() & MessageElement::EmoteImages;
!this->flags_.has(MessageFlag::DisableCompactEmotes) &&
element->getCreator().getFlags().has(MessageElementFlag::EmoteImages);
if (isCompactEmote) {
newLineHeight -= COMPACT_EMOTES_OFFSET * this->scale_;
@@ -126,7 +125,7 @@ void MessageLayoutContainer::breakLine()
{
int xOffset = 0;
if (this->flags_ & Message::Centered && this->elements_.size() > 0) {
if (this->flags_.has(MessageFlag::Centered) && this->elements_.size() > 0) {
xOffset = (width_ - this->elements_.at(this->elements_.size() - 1)
->getRect()
.right()) /
@@ -137,15 +136,17 @@ void MessageLayoutContainer::breakLine()
MessageLayoutElement *element = this->elements_.at(i).get();
bool isCompactEmote =
!(this->flags_ & Message::DisableCompactEmotes) &&
element->getCreator().getFlags() & MessageElement::EmoteImages;
!this->flags_.has(MessageFlag::DisableCompactEmotes) &&
element->getCreator().getFlags().has(
MessageElementFlag::EmoteImages);
int yExtra = 0;
if (isCompactEmote) {
yExtra = (COMPACT_EMOTES_OFFSET / 2) * this->scale_;
}
// if (element->getCreator().getFlags() & MessageElement::Badges)
// if (element->getCreator().getFlags() &
// MessageElementFlag::Badges)
// {
if (element->getRect().height() < this->textLineHeight_) {
yExtra -= (this->textLineHeight_ - element->getRect().height()) / 2;
@@ -199,7 +200,7 @@ bool MessageLayoutContainer::fitsInLine(int _width)
void MessageLayoutContainer::end()
{
if (!this->canAddElements()) {
static TextElement dotdotdot("...", MessageElement::Collapsed,
static TextElement dotdotdot("...", MessageElementFlag::Collapsed,
MessageColor::Link);
static QString dotdotdotText("...");
@@ -230,7 +231,7 @@ void MessageLayoutContainer::end()
bool MessageLayoutContainer::canCollapse()
{
return getApp()->settings->collpseMessagesMinLines.getValue() > 0 &&
this->flags_ & Message::MessageFlags::Collapsed;
this->flags_.has(MessageFlag::Collapsed);
}
bool MessageLayoutContainer::isCollapsed()
@@ -51,7 +51,7 @@ struct MessageLayoutContainer {
float getScale() const;
// methods
void begin(int width_, float scale_, Message::MessageFlags flags_);
void begin(int width_, float scale_, MessageFlags flags_);
void end();
void clear();
@@ -92,7 +92,7 @@ private:
// variables
float scale_ = 1.f;
int width_ = 0;
Message::MessageFlags flags_ = Message::MessageFlags::None;
MessageFlags flags_ = MessageFlag::None;
int line_ = 0;
int height_ = 0;
int currentX_ = 0;