diff options
author | Jens Bache-Wiig <jbache@trolltech.com> | 2010-03-24 14:23:22 (GMT) |
---|---|---|
committer | Jens Bache-Wiig <jbache@trolltech.com> | 2010-03-24 14:48:26 (GMT) |
commit | 71ced8e9d2a8cc363a6e8a039e9431ecf8cf9a01 (patch) | |
tree | c79ad312606a5e586b06e5a0c582148fa738125d /src/gui/widgets/qsplitter.cpp | |
parent | 2a350684c60fd0225234e77d0a01b01471bc9ea8 (diff) | |
download | Qt-71ced8e9d2a8cc363a6e8a039e9431ecf8cf9a01.zip Qt-71ced8e9d2a8cc363a6e8a039e9431ecf8cf9a01.tar.gz Qt-71ced8e9d2a8cc363a6e8a039e9431ecf8cf9a01.tar.bz2 |
Give 1-pixel splitters a larger grab area
This is a trick we have applied to Qt Creator for a
while and it makes sense to backport this into Qt.
Essentially 1-pixel splitters are unusable at the
moment. With this fix the actual splitter handle
will be 5 pixels wide and slightly overlap neighbouring
widgets. The layout code in QSplitter alreadu use
the contentsRect to support this behavior.
Task-number: QTBUG-9335
Reviewed-by: thierry
Diffstat (limited to 'src/gui/widgets/qsplitter.cpp')
-rw-r--r-- | src/gui/widgets/qsplitter.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/gui/widgets/qsplitter.cpp b/src/gui/widgets/qsplitter.cpp index 597b28b..88b7517 100644 --- a/src/gui/widgets/qsplitter.cpp +++ b/src/gui/widgets/qsplitter.cpp @@ -227,6 +227,33 @@ QSize QSplitterHandle::sizeHint() const /*! \reimp */ +void QSplitterHandle::resizeEvent(QResizeEvent *event) +{ + Q_D(const QSplitterHandle); + + // When splitters are only 1 pixel large we increase the + // actual grab area to five pixels + + // 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); + setAttribute(Qt::WA_MouseNoMask, useTinyMode); + if (useTinyMode) { + if (orientation() == Qt::Horizontal) + setContentsMargins(2, 0, 2, 0); + else + setContentsMargins(0, 2, 0, 2); + setMask(QRegion(contentsRect())); + } + + QWidget::resizeEvent(event); +} + +/*! + \reimp +*/ bool QSplitterHandle::event(QEvent *event) { Q_D(QSplitterHandle); @@ -301,7 +328,7 @@ void QSplitterHandle::paintEvent(QPaintEvent *) Q_D(QSplitterHandle); QPainter p(this); QStyleOption opt(0); - opt.rect = rect(); + opt.rect = contentsRect(); opt.palette = palette(); if (orientation() == Qt::Horizontal) opt.state = QStyle::State_Horizontal; @@ -1662,6 +1689,9 @@ void QSplitter::setSizes(const QList<int> &list) By default, this property contains a value that depends on the user's platform and style preferences. + + If you set handleWidth to 1, the actual grab area will grow to overlap a + few pixels of it's respective widgets. */ int QSplitter::handleWidth() const |