qquicktext{edit,input}: Re-render when device pixel ratio changes
Native rendering needs to be perfectly aligned to the pixel grid.
When device pixel ratio changes, this can lead to blurry rendering.
This was addressed for qquicktext in d870ea28
but not
textedit/textinput.
Pick-to: 6.7 6.6 6.5
Change-Id: I75d3172a047e73ba3e8e6cbcf4f5a9651d42c6b0
Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
parent
c45eb82365
commit
ef5df245db
|
@ -1565,6 +1565,27 @@ void QQuickTextEdit::geometryChange(const QRectF &newGeometry, const QRectF &old
|
|||
QQuickImplicitSizeItem::geometryChange(newGeometry, oldGeometry);
|
||||
}
|
||||
|
||||
void QQuickTextEdit::itemChange(ItemChange change, const ItemChangeData &value)
|
||||
{
|
||||
Q_D(QQuickTextEdit);
|
||||
Q_UNUSED(value);
|
||||
switch (change) {
|
||||
case ItemDevicePixelRatioHasChanged:
|
||||
if (d->renderType == NativeRendering) {
|
||||
// Native rendering optimizes for a given pixel grid, so its results must not be scaled.
|
||||
// Text layout code respects the current device pixel ratio automatically, we only need
|
||||
// to rerun layout after the ratio changed.
|
||||
updateSize();
|
||||
updateWholeDocument();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
QQuickImplicitSizeItem::itemChange(change, value);
|
||||
}
|
||||
|
||||
/*!
|
||||
Ensures any delayed caching or data loading the class
|
||||
needs to performed is complete.
|
||||
|
|
|
@ -379,6 +379,7 @@ protected:
|
|||
#endif
|
||||
|
||||
void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
|
||||
void itemChange(ItemChange change, const ItemChangeData &value) override;
|
||||
|
||||
bool event(QEvent *) override;
|
||||
void keyPressEvent(QKeyEvent *) override;
|
||||
|
|
|
@ -1775,6 +1775,26 @@ void QQuickTextInput::geometryChange(const QRectF &newGeometry,
|
|||
QQuickImplicitSizeItem::geometryChange(newGeometry, oldGeometry);
|
||||
}
|
||||
|
||||
void QQuickTextInput::itemChange(ItemChange change, const ItemChangeData &value)
|
||||
{
|
||||
Q_D(QQuickTextInput);
|
||||
Q_UNUSED(value);
|
||||
switch (change) {
|
||||
case ItemDevicePixelRatioHasChanged:
|
||||
if (d->renderType == NativeRendering) {
|
||||
// Native rendering optimizes for a given pixel grid, so its results must not be scaled.
|
||||
// Text layout code respects the current device pixel ratio automatically, we only need
|
||||
// to rerun layout after the ratio changed.
|
||||
d->updateLayout();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
QQuickImplicitSizeItem::itemChange(change, value);
|
||||
}
|
||||
|
||||
void QQuickTextInputPrivate::ensureVisible(int position, int preeditCursor, int preeditLength)
|
||||
{
|
||||
Q_Q(QQuickTextInput);
|
||||
|
|
|
@ -350,6 +350,7 @@ protected:
|
|||
#endif
|
||||
|
||||
void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
|
||||
void itemChange(ItemChange change, const ItemChangeData &value) override;
|
||||
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
|
|
Loading…
Reference in New Issue