Use setContentMargins in QLineEdit-based input fields

This commit is contained in:
Ilya Fedin 2022-03-01 21:36:23 +04:00 committed by John Preston
parent 1f89e8bd53
commit f2c77daccc
2 changed files with 12 additions and 32 deletions

View file

@ -617,7 +617,6 @@ private:
};
template <typename InputClass>
class InputStyle : public QCommonStyle {
public:
InputStyle() {
@ -626,22 +625,13 @@ public:
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override {
}
QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const override {
switch (r) {
case SE_LineEditContents:
const auto w = widget ? qobject_cast<const InputClass*>(widget) : nullptr;
return w ? w->getTextRect() : QCommonStyle::subElementRect(r, opt, widget);
break;
}
return QCommonStyle::subElementRect(r, opt, widget);
}
static InputStyle<InputClass> *instance() {
static InputStyle *instance() {
if (!_instance) {
if (!QGuiApplication::instance()) {
return nullptr;
}
_instance = new InputStyle<InputClass>();
_instance = new InputStyle();
}
return _instance;
}
@ -651,12 +641,11 @@ public:
}
private:
static InputStyle<InputClass> *_instance;
static InputStyle *_instance;
};
template <typename InputClass>
InputStyle<InputClass> *InputStyle<InputClass>::_instance = nullptr;
InputStyle *InputStyle::_instance = nullptr;
template <typename Iterator>
QString AccumulateText(Iterator begin, Iterator end) {
@ -1000,9 +989,10 @@ FlatInput::FlatInput(
Integration::Instance().textActionsUpdated();
});
setStyle(InputStyle<FlatInput>::instance());
setStyle(InputStyle::instance());
QLineEdit::setTextMargins(0, 0, 0, 0);
setContentsMargins(0, 0, 0, 0);
setContentsMargins(_textMrg + QMargins(-2, -1, -2, -1));
setFrame(false);
setAttribute(Qt::WA_AcceptTouchEvents);
_touchTimer.setSingleShot(true);
@ -1083,14 +1073,11 @@ void FlatInput::touchEvent(QTouchEvent *e) {
void FlatInput::setTextMrg(const QMargins &textMrg) {
_textMrg = textMrg;
setContentsMargins(_textMrg + QMargins(-2, -1, -2, -1));
refreshPlaceholder(_placeholderFull.current());
update();
}
QRect FlatInput::getTextRect() const {
return rect().marginsRemoved(_textMrg + QMargins(-2, -1, -2, -1));
}
void FlatInput::finishAnimations() {
_placeholderFocusedAnimation.stop();
_placeholderVisibleAnimation.stop();
@ -3787,9 +3774,10 @@ MaskedInputField::MaskedInputField(
Integration::Instance().textActionsUpdated();
});
setStyle(InputStyle<MaskedInputField>::instance());
setStyle(InputStyle::instance());
QLineEdit::setTextMargins(0, 0, 0, 0);
setContentsMargins(0, 0, 0, 0);
setContentsMargins(_textMargins + QMargins(-2, -1, -2, -1));
setFrame(false);
setAttribute(Qt::WA_AcceptTouchEvents);
_touchTimer.setSingleShot(true);
@ -3837,6 +3825,7 @@ int MaskedInputField::borderAnimationStart() const {
void MaskedInputField::setTextMargins(const QMargins &mrg) {
_textMargins = mrg;
setContentsMargins(_textMargins + QMargins(-2, -1, -2, -1));
refreshPlaceholder(_placeholderFull.current());
}
@ -3901,10 +3890,6 @@ void MaskedInputField::touchEvent(QTouchEvent *e) {
}
}
QRect MaskedInputField::getTextRect() const {
return rect().marginsRemoved(_textMargins + QMargins(-2, -1, -2, -1));
}
void MaskedInputField::paintEvent(QPaintEvent *e) {
Painter p(this);

View file

@ -56,7 +56,6 @@ enum class InputSubmitSettings {
};
class FlatInput : public RpWidgetBase<QLineEdit> {
// The Q_OBJECT meta info is used for qobject_cast!
Q_OBJECT
using Parent = RpWidgetBase<QLineEdit>;
@ -74,7 +73,6 @@ public:
void finishAnimations();
void setTextMrg(const QMargins &textMrg);
QRect getTextRect() const;
QSize sizeHint() const override;
QSize minimumSizeHint() const override;
@ -557,7 +555,6 @@ private:
};
class MaskedInputField : public RpWidgetBase<QLineEdit> {
// The Q_OBJECT meta info is used for qobject_cast!
Q_OBJECT
using Parent = RpWidgetBase<QLineEdit>;
@ -572,8 +569,6 @@ public:
void showErrorNoFocus();
void hideError();
QRect getTextRect() const;
QSize sizeHint() const override;
QSize minimumSizeHint() const override;