mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
fix: get rid of duplicate scale events (#5404)
This commit is contained in:
parent
869562263f
commit
8689bdb481
|
@ -12,6 +12,7 @@
|
|||
- Dev: Add doxygen build target. (#5377)
|
||||
- Dev: Make printing of strings in tests easier. (#5379)
|
||||
- Dev: Refactor and document `Scrollbar`. (#5334, #5393)
|
||||
- Dev: Reduced the amount of scale events. (#5404)
|
||||
|
||||
## 2.5.1
|
||||
|
||||
|
|
|
@ -54,7 +54,11 @@ float BaseWidget::scale() const
|
|||
|
||||
void BaseWidget::setScale(float value)
|
||||
{
|
||||
// update scale value
|
||||
if (this->scale_ == value)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->scale_ = value;
|
||||
|
||||
this->scaleChangedEvent(this->scale());
|
||||
|
|
|
@ -227,7 +227,6 @@ BaseWindow::BaseWindow(FlagsEnum<Flags> _flags, QWidget *parent)
|
|||
[this]() {
|
||||
postToThread([this] {
|
||||
this->updateScale();
|
||||
this->updateScale();
|
||||
});
|
||||
},
|
||||
this->connections_, false);
|
||||
|
|
|
@ -593,6 +593,12 @@ void Notebook::showTabVisibilityInfoPopup()
|
|||
|
||||
void Notebook::refresh()
|
||||
{
|
||||
if (this->refreshPaused_)
|
||||
{
|
||||
this->refreshRequested_ = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this->performLayout();
|
||||
this->updateTabVisibility();
|
||||
}
|
||||
|
@ -652,13 +658,20 @@ void Notebook::resizeAddButton()
|
|||
this->addButton_->setFixedSize(h, h);
|
||||
}
|
||||
|
||||
void Notebook::scaleChangedEvent(float)
|
||||
void Notebook::scaleChangedEvent(float /*scale*/)
|
||||
{
|
||||
this->resizeAddButton();
|
||||
this->refreshPaused_ = true;
|
||||
this->refreshRequested_ = false;
|
||||
for (auto &i : this->items_)
|
||||
{
|
||||
i.tab->updateSize();
|
||||
}
|
||||
this->refreshPaused_ = false;
|
||||
if (this->refreshRequested_)
|
||||
{
|
||||
this->refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void Notebook::resizeEvent(QResizeEvent *)
|
||||
|
|
|
@ -193,7 +193,12 @@ private:
|
|||
bool showAddButton_ = false;
|
||||
int lineOffset_ = 20;
|
||||
bool lockNotebookLayout_ = false;
|
||||
|
||||
bool refreshPaused_ = false;
|
||||
bool refreshRequested_ = false;
|
||||
|
||||
NotebookTabLocation tabLocation_ = NotebookTabLocation::Top;
|
||||
|
||||
QAction *lockNotebookLayoutAction_;
|
||||
QAction *showTabsAction_;
|
||||
QAction *toggleTopMostAction_;
|
||||
|
|
|
@ -397,9 +397,9 @@ void SettingsDialog::refresh()
|
|||
}
|
||||
}
|
||||
|
||||
void SettingsDialog::scaleChangedEvent(float newDpi)
|
||||
void SettingsDialog::scaleChangedEvent(float newScale)
|
||||
{
|
||||
assert(newDpi == 1.F &&
|
||||
assert(newScale == 1.F &&
|
||||
"Scaling is disabled for the settings dialog - its scale should "
|
||||
"always be 1");
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
#include "singletons/WindowManager.hpp"
|
||||
#include "util/Clamp.hpp"
|
||||
#include "util/Helpers.hpp"
|
||||
#include "widgets/dialogs/SettingsDialog.hpp"
|
||||
#include "widgets/Notebook.hpp"
|
||||
|
@ -25,6 +24,8 @@
|
|||
#include <QMimeData>
|
||||
#include <QPainter>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace chatterino {
|
||||
namespace {
|
||||
// Translates the given rectangle by an amount in the direction to appear like the tab is selected.
|
||||
|
@ -182,10 +183,15 @@ void NotebookTab::growWidth(int width)
|
|||
}
|
||||
}
|
||||
|
||||
int NotebookTab::normalTabWidth()
|
||||
int NotebookTab::normalTabWidth() const
|
||||
{
|
||||
return this->normalTabWidthForHeight(this->height());
|
||||
}
|
||||
|
||||
int NotebookTab::normalTabWidthForHeight(int height) const
|
||||
{
|
||||
float scale = this->scale();
|
||||
int width;
|
||||
int width = 0;
|
||||
|
||||
QFontMetrics metrics =
|
||||
getIApp()->getFonts()->getFontMetrics(FontStyle::UiTabs, scale);
|
||||
|
@ -199,13 +205,13 @@ int NotebookTab::normalTabWidth()
|
|||
width = (metrics.horizontalAdvance(this->getTitle()) + int(16 * scale));
|
||||
}
|
||||
|
||||
if (this->height() > 150 * scale)
|
||||
if (static_cast<float>(height) > 150 * scale)
|
||||
{
|
||||
width = this->height();
|
||||
width = height;
|
||||
}
|
||||
else
|
||||
{
|
||||
width = clamp(width, this->height(), int(150 * scale));
|
||||
width = std::clamp(width, height, static_cast<int>(150 * scale));
|
||||
}
|
||||
|
||||
return width;
|
||||
|
@ -214,8 +220,8 @@ int NotebookTab::normalTabWidth()
|
|||
void NotebookTab::updateSize()
|
||||
{
|
||||
float scale = this->scale();
|
||||
int width = this->normalTabWidth();
|
||||
auto height = int(NOTEBOOK_TAB_HEIGHT * scale);
|
||||
auto height = static_cast<int>(NOTEBOOK_TAB_HEIGHT * scale);
|
||||
int width = this->normalTabWidthForHeight(height);
|
||||
|
||||
if (width < this->growWidth_)
|
||||
{
|
||||
|
@ -628,13 +634,13 @@ void NotebookTab::paintEvent(QPaintEvent *)
|
|||
}
|
||||
}
|
||||
|
||||
bool NotebookTab::hasXButton()
|
||||
bool NotebookTab::hasXButton() const
|
||||
{
|
||||
return getSettings()->showTabCloseButton &&
|
||||
this->notebook_->getAllowUserTabManagement();
|
||||
}
|
||||
|
||||
bool NotebookTab::shouldDrawXButton()
|
||||
bool NotebookTab::shouldDrawXButton() const
|
||||
{
|
||||
return this->hasXButton() && (this->mouseOver_ || this->selected_);
|
||||
}
|
||||
|
@ -820,18 +826,15 @@ void NotebookTab::update()
|
|||
Button::update();
|
||||
}
|
||||
|
||||
QRect NotebookTab::getXRect()
|
||||
QRect NotebookTab::getXRect() const
|
||||
{
|
||||
QRect rect = this->rect();
|
||||
float s = this->scale();
|
||||
int size = static_cast<int>(16 * s);
|
||||
|
||||
int centerAdjustment =
|
||||
this->tabLocation_ ==
|
||||
(NotebookTabLocation::Top ||
|
||||
this->tabLocation_ == NotebookTabLocation::Bottom)
|
||||
? (size / 3) // slightly off true center
|
||||
: (size / 2); // true center
|
||||
int centerAdjustment = this->tabLocation_ == NotebookTabLocation::Top
|
||||
? (size / 3) // slightly off true center
|
||||
: (size / 2); // true center
|
||||
|
||||
QRect xRect(rect.right() - static_cast<int>(20 * s),
|
||||
rect.center().y() - centerAdjustment, size, size);
|
||||
|
|
|
@ -71,7 +71,7 @@ public:
|
|||
void hideTabXChanged();
|
||||
|
||||
void growWidth(int width);
|
||||
int normalTabWidth();
|
||||
int normalTabWidth() const;
|
||||
|
||||
protected:
|
||||
void themeChangedEvent() override;
|
||||
|
@ -100,11 +100,13 @@ protected:
|
|||
private:
|
||||
void showRenameDialog();
|
||||
|
||||
bool hasXButton();
|
||||
bool shouldDrawXButton();
|
||||
QRect getXRect();
|
||||
bool hasXButton() const;
|
||||
bool shouldDrawXButton() const;
|
||||
QRect getXRect() const;
|
||||
void titleUpdated();
|
||||
|
||||
int normalTabWidthForHeight(int height) const;
|
||||
|
||||
QPropertyAnimation positionChangedAnimation_;
|
||||
bool positionChangedAnimationRunning_ = false;
|
||||
QPoint positionAnimationDesiredPoint_;
|
||||
|
|
|
@ -271,6 +271,8 @@ SplitHeader::SplitHeader(Split *split)
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
this->scaleChangedEvent(this->scale());
|
||||
}
|
||||
|
||||
void SplitHeader::initializeLayout()
|
||||
|
|
Loading…
Reference in a new issue