Merge pull request #7845 from jordan-woyak/elided-button-fix

DolphinQt: Fix ElidedButton (MappingButton) from growing with long text.
This commit is contained in:
Mat M 2019-03-03 18:53:01 -05:00 committed by GitHub
commit 66a8220011
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 12 deletions

View file

@ -32,7 +32,6 @@
#include "InputCommon/ControllerInterface/Device.h"
constexpr int SLIDER_TICK_COUNT = 100;
constexpr int VERTICAL_PADDING = 2;
static QString EscapeAmpersand(QString&& string)
{
@ -48,18 +47,13 @@ MappingButton::MappingButton(MappingWidget* widget, ControlReference* ref, bool
: ElidedButton(EscapeAmpersand(QString::fromStdString(ref->GetExpression()))), m_parent(widget),
m_reference(ref)
{
// Force all mapping buttons to use stay at a minimal height
int height = QFontMetrics(qApp->font()).height() + 2 * VERTICAL_PADDING;
// Force all mapping buttons to stay at a minimal height.
setFixedHeight(minimumSizeHint().height());
setMinimumHeight(height);
// Make sure that long entries don't throw our layout out of whack.
setFixedWidth(112);
// macOS needs some wiggle room to always get round buttons
setMaximumHeight(height + 8);
// Make sure that long entries don't throw our layout out of whack
setMaximumWidth(115);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
Connect();
setToolTip(

View file

@ -27,6 +27,14 @@ void ElidedButton::setElideMode(Qt::TextElideMode elide_mode)
repaint();
}
QSize ElidedButton::sizeHint() const
{
// Long text produces big sizeHints which is throwing layouts off
// even when setting fixed sizes. This seems like a Qt layout bug.
// Let's always return the sizeHint of an empty button to work around this.
return QPushButton(parentWidget()).sizeHint();
}
void ElidedButton::paintEvent(QPaintEvent* event)
{
QStyleOptionButton option;

View file

@ -12,10 +12,13 @@ class ElidedButton : public QPushButton
public:
explicit ElidedButton(const QString& text = QStringLiteral(""),
Qt::TextElideMode elide_mode = Qt::ElideRight);
Qt::TextElideMode elideMode() const;
void setElideMode(Qt::TextElideMode elide_mode);
QSize sizeHint() const final override;
private:
void paintEvent(QPaintEvent* event) override;
void paintEvent(QPaintEvent* event) final override;
Qt::TextElideMode m_elide_mode;
};