summaryrefslogtreecommitdiffstats
path: root/src/gui/widgets/qsplitter.cpp
diff options
context:
space:
mode:
authorJens Bache-Wiig <jbache@trolltech.com>2010-03-24 14:23:22 (GMT)
committerJens Bache-Wiig <jbache@trolltech.com>2010-03-24 14:48:26 (GMT)
commit71ced8e9d2a8cc363a6e8a039e9431ecf8cf9a01 (patch)
treec79ad312606a5e586b06e5a0c582148fa738125d /src/gui/widgets/qsplitter.cpp
parent2a350684c60fd0225234e77d0a01b01471bc9ea8 (diff)
downloadQt-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.cpp32
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