Unexport QWidgetResizeHandler and remove move functionality

Address FIXME comment.

The class is not public, and only used in QtWidgets for the resizing of
docking widgets. The move functionality is unused, and has been
removed.

Change-Id: Id477f36cb7d449b06e124950fed6f5f182aa5721
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
Volker Hilsheimer 2020-04-03 09:57:10 +02:00
parent 708d365a64
commit ab71c9c996
4 changed files with 39 additions and 110 deletions

View File

@ -887,12 +887,10 @@ void QDockWidgetPrivate::endDrag(bool abort)
void QDockWidgetPrivate::setResizerActive(bool active)
{
Q_Q(QDockWidget);
if (active && !resizer) {
if (active && !resizer)
resizer = new QWidgetResizeHandler(q);
resizer->setMovingEnabled(false);
}
if (resizer)
resizer->setActive(QWidgetResizeHandler::Resize, active);
resizer->setEnabled(active);
}
bool QDockWidgetPrivate::isAnimating() const

View File

@ -200,7 +200,6 @@ public:
QDockWidgetGroupLayout(QDockWidgetGroupWindow* parent) : QLayout(parent) {
setSizeConstraint(QLayout::SetMinAndMaxSize);
resizer = new QWidgetResizeHandler(parent);
resizer->setMovingEnabled(false);
}
~QDockWidgetGroupLayout() {
layoutState.deleteAllLayoutItems();
@ -259,7 +258,7 @@ public:
li->apply(false);
if (savedState.rect.isValid())
savedState.rect = li->rect;
resizer->setActive(QWidgetResizeHandler::Resize, !nativeWindowDeco());
resizer->setEnabled(!nativeWindowDeco());
}
QDockAreaLayoutInfo *dockAreaLayoutInfo() { return &layoutState; }

View File

@ -58,46 +58,37 @@ QT_BEGIN_NAMESPACE
static bool resizeHorizontalDirectionFixed = false;
static bool resizeVerticalDirectionFixed = false;
// ### fixme: Qt 6: No longer export QWidgetResizeHandler and remove "Move"
// functionality. Currently, only the resize functionality is used by QDockWidget.
// Historically, the class was used in Qt 3's QWorkspace (predecessor to QMdiArea).
QWidgetResizeHandler::QWidgetResizeHandler(QWidget *parent, QWidget *cw)
: QObject(parent), widget(parent), childWidget(cw ? cw : parent),
fw(0), extrahei(0), buttonDown(false), moveResizeMode(false), sizeprotect(true), movingEnabled(true)
fw(0), extrahei(0), buttonDown(false), active(false)
{
mode = Nowhere;
widget->setMouseTracking(true);
QFrame *frame = qobject_cast<QFrame*>(widget);
range = frame ? frame->frameWidth() : RANGE;
range = qMax(RANGE, range);
activeForMove = activeForResize = true;
enabled = true;
widget->installEventFilter(this);
}
void QWidgetResizeHandler::setActive(Action ac, bool b)
void QWidgetResizeHandler::setEnabled(bool b)
{
if (ac & Move)
activeForMove = b;
if (ac & Resize)
activeForResize = b;
if (b == enabled)
return;
if (!isActive())
enabled = b;
if (!enabled)
setMouseCursor(Nowhere);
}
bool QWidgetResizeHandler::isActive(Action ac) const
bool QWidgetResizeHandler::isEnabled() const
{
bool b = false;
if (ac & Move) b = activeForMove;
if (ac & Resize) b |= activeForResize;
return b;
return enabled;
}
bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
{
if (!isActive()
if (!isEnabled()
|| (ee->type() != QEvent::MouseButtonPress
&& ee->type() != QEvent::MouseButtonRelease
&& ee->type() != QEvent::MouseMove
@ -126,35 +117,24 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
if (e->button() == Qt::LeftButton) {
buttonDown = false;
emit activate();
bool me = movingEnabled;
movingEnabled = (me && o == widget);
mouseMoveEvent(e);
movingEnabled = me;
buttonDown = true;
moveOffset = widget->mapFromGlobal(e->globalPos());
invertedMoveOffset = widget->rect().bottomRight() - moveOffset;
if (mode == Center) {
if (movingEnabled)
return true;
} else {
if (mode != Center)
return true;
}
}
} break;
case QEvent::MouseButtonRelease:
if (w->isMaximized())
break;
if (static_cast<QMouseEvent *>(ee)->button() == Qt::LeftButton) {
moveResizeMode = false;
active = false;
buttonDown = false;
widget->releaseMouse();
widget->releaseKeyboard();
if (mode == Center) {
if (movingEnabled)
return true;
} else {
if (mode != Center)
return true;
}
}
break;
case QEvent::MouseMove: {
@ -162,16 +142,9 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
break;
QMouseEvent *e = static_cast<QMouseEvent *>(ee);
buttonDown = buttonDown && (e->buttons() & Qt::LeftButton); // safety, state machine broken!
bool me = movingEnabled;
movingEnabled = (me && o == widget && (buttonDown || moveResizeMode));
mouseMoveEvent(e);
movingEnabled = me;
if (mode == Center) {
if (movingEnabled)
return true;
} else {
if (mode != Center)
return true;
}
} break;
case QEvent::KeyPress:
keyPressEvent(static_cast<QKeyEvent *>(ee));
@ -193,7 +166,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
{
QPoint pos = widget->mapFromGlobal(e->globalPos());
if (!moveResizeMode && !buttonDown) {
if (!active && !buttonDown) {
if (pos.y() <= range && pos.x() <= range)
mode = TopLeft;
else if (pos.y() >= widget->height()-range && pos.x() >= widget->width()-range)
@ -215,7 +188,7 @@ void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
else
mode = Nowhere;
if (widget->isMinimized() || !isActive(Resize))
if (widget->isMinimized() || !isEnabled())
mode = Center;
#ifndef QT_NO_CURSOR
setMouseCursor(mode);
@ -223,7 +196,7 @@ void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
return;
}
if (mode == Center && !movingEnabled)
if (mode == Center)
return;
if (widget->testAttribute(Qt::WA_WState_ConfigPending))
@ -237,9 +210,9 @@ void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
globalPos.rx() = 0;
if (globalPos.y() < 0)
globalPos.ry() = 0;
if (sizeprotect && globalPos.x() > widget->parentWidget()->width())
if (globalPos.x() > widget->parentWidget()->width())
globalPos.rx() = widget->parentWidget()->width();
if (sizeprotect && globalPos.y() > widget->parentWidget()->height())
if (globalPos.y() > widget->parentWidget()->height())
globalPos.ry() = widget->parentWidget()->height();
}
@ -300,9 +273,6 @@ void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
case Right:
geom = QRect(widget->geometry().topLeft(), QPoint(p.x(), widget->geometry().bottom())) ;
break;
case Center:
geom.moveTopLeft(pp);
break;
default:
break;
}
@ -314,10 +284,7 @@ void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
if (geom != widget->geometry() &&
(widget->isWindow() || widget->parentWidget()->rect().intersects(geom))) {
if (mode == Center)
widget->move(geom.topLeft());
else
widget->setGeometry(geom);
widget->setGeometry(geom);
}
}
@ -361,7 +328,7 @@ void QWidgetResizeHandler::setMouseCursor(MousePosition m)
void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
{
if (!isMove() && !isResize())
if (!isResizing())
return;
bool is_control = e->modifiers() & Qt::ControlModifier;
int delta = is_control?1:8;
@ -378,7 +345,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
invertedMoveOffset.rx() -= delta;
}
}
if (isResize() && !resizeHorizontalDirectionFixed) {
if (isResizing() && !resizeHorizontalDirectionFixed) {
resizeHorizontalDirectionFixed = true;
if (mode == BottomRight)
mode = BottomLeft;
@ -403,7 +370,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
invertedMoveOffset.rx() -= delta;
}
}
if (isResize() && !resizeHorizontalDirectionFixed) {
if (isResizing() && !resizeHorizontalDirectionFixed) {
resizeHorizontalDirectionFixed = true;
if (mode == BottomLeft)
mode = BottomRight;
@ -428,7 +395,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
invertedMoveOffset.ry() -= delta;
}
}
if (isResize() && !resizeVerticalDirectionFixed) {
if (isResizing() && !resizeVerticalDirectionFixed) {
resizeVerticalDirectionFixed = true;
if (mode == BottomLeft)
mode = TopLeft;
@ -453,7 +420,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
invertedMoveOffset.ry() -= delta;
}
}
if (isResize() && !resizeVerticalDirectionFixed) {
if (isResizing() && !resizeVerticalDirectionFixed) {
resizeVerticalDirectionFixed = true;
if (mode == TopLeft)
mode = BottomLeft;
@ -471,7 +438,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
case Qt::Key_Return:
case Qt::Key_Enter:
case Qt::Key_Escape:
moveResizeMode = false;
active = false;
widget->releaseMouse();
widget->releaseKeyboard();
buttonDown = false;
@ -485,10 +452,10 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e)
void QWidgetResizeHandler::doResize()
{
if (!activeForResize)
if (!enabled)
return;
moveResizeMode = true;
active = true;
moveOffset = widget->mapFromGlobal(QCursor::pos());
if (moveOffset.x() < widget->width()/2) {
if (moveOffset.y() < widget->height()/2)
@ -513,23 +480,6 @@ void QWidgetResizeHandler::doResize()
resizeVerticalDirectionFixed = false;
}
void QWidgetResizeHandler::doMove()
{
if (!activeForMove)
return;
mode = Center;
moveResizeMode = true;
moveOffset = widget->mapFromGlobal(QCursor::pos());
invertedMoveOffset = widget->rect().bottomRight() - moveOffset;
#ifndef QT_NO_CURSOR
widget->grabMouse(Qt::SizeAllCursor);
#else
widget->grabMouse();
#endif
widget->grabKeyboard();
}
QT_END_NAMESPACE
#include "moc_qwidgetresizehandler_p.cpp"

View File

@ -62,34 +62,22 @@ QT_BEGIN_NAMESPACE
class QMouseEvent;
class QKeyEvent;
class Q_WIDGETS_EXPORT QWidgetResizeHandler : public QObject
class QWidgetResizeHandler : public QObject
{
Q_OBJECT
public:
enum Action {
Move = 0x01,
Resize = 0x02,
Any = Move|Resize
};
explicit QWidgetResizeHandler(QWidget *parent, QWidget *cw = nullptr);
void setActive(bool b) { setActive(Any, b); }
void setActive(Action ac, bool b);
bool isActive() const { return isActive(Any); }
bool isActive(Action ac) const;
void setMovingEnabled(bool b) { movingEnabled = b; }
bool isMovingEnabled() const { return movingEnabled; }
void setEnabled(bool b);
bool isEnabled() const;
bool isButtonDown() const { return buttonDown; }
void setExtraHeight(int h) { extrahei = h; }
void setSizeProtection(bool b) { sizeprotect = b; }
void setFrameWidth(int w) { fw = w; }
void doResize();
void doMove();
Q_SIGNALS:
void activate();
@ -117,19 +105,13 @@ private:
int fw;
int extrahei;
int range;
uint buttonDown :1;
uint moveResizeMode :1;
uint activeForResize :1;
uint sizeprotect :1;
uint movingEnabled :1;
uint activeForMove :1;
uint buttonDown :1;
uint active :1;
uint enabled :1;
void setMouseCursor(MousePosition m);
bool isMove() const {
return moveResizeMode && mode == Center;
}
bool isResize() const {
return moveResizeMode && !isMove();
bool isResizing() const {
return active && mode != Center;
}
};