diff options
author | Gabriel de Dietrich <gabriel.dedietrich@qt.io> | 2016-12-15 11:33:58 -0800 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@qt.io> | 2016-12-23 19:23:24 +0000 |
commit | 2f797f8a9177198cc6683d3047a5a3fa807fef4a (patch) | |
tree | f7c2d0cc92be8a5c97f3f414151ca2b9b7cf695e /src/widgets/widgets/qsplitter.cpp | |
parent | 6d1d66a0429d2eb36beb192112b9a7bb8ae00b9a (diff) |
QSplitterHandle: Ensure a minimum grab area
This used to work only for 0- and 1-pixel wide handles. However,
and paradoxically, 2- and 3-pixel wide handles would end up with
narrower grab areas. We now ensure a 4 or 5 minimum grab area,
depending on the handle width parity.
The patch also clears the margins and mask if the handle size is
increased at some point.
Change-Id: I8a16e39fb34b5452d9021dbde8c22bec79df0243
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/widgets/widgets/qsplitter.cpp')
-rw-r--r-- | src/widgets/widgets/qsplitter.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/widgets/widgets/qsplitter.cpp b/src/widgets/widgets/qsplitter.cpp index 77a793e951..e58fedba20 100644 --- a/src/widgets/widgets/qsplitter.cpp +++ b/src/widgets/widgets/qsplitter.cpp @@ -241,21 +241,24 @@ void QSplitterHandle::resizeEvent(QResizeEvent *event) { Q_D(const QSplitterHandle); - // When splitters are only 1 or 0 pixel large we increase the - // actual grab area to five pixels + // Ensure the actual grab area is at least 4 or 5 pixels + const int handleMargin = (5 - d->s->handleWidth()) / 2; // Note that QSplitter uses contentsRect for layouting // and ensures that handles are drawn on top of widgets // We simply use the contents margins for draggin and only // paint the mask area - bool useTinyMode = (d->s->handleWidth() <= 1); + const bool useTinyMode = handleMargin > 0; setAttribute(Qt::WA_MouseNoMask, useTinyMode); if (useTinyMode) { if (orientation() == Qt::Horizontal) - setContentsMargins(2, 0, 2, 0); + setContentsMargins(handleMargin, 0, handleMargin, 0); else - setContentsMargins(0, 2, 0, 2); + setContentsMargins(0, handleMargin, 0, handleMargin); setMask(QRegion(contentsRect())); + } else { + setContentsMargins(0, 0, 0, 0); + clearMask(); } QWidget::resizeEvent(event); |