From bf603d233850a180b2184ebf4a5012af39456e87 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Fri, 4 Dec 2009 18:48:29 +0100 Subject: [PATCH] Replace fugly workaround for QTBUG-6322 by one that's much simpler Since it doesn't seem to matter at all what ChatView thinks about the scene's width, we just adjust the sceneRect to be 25ps smaller than it really is. That way, we avoid the whole QTBUG-6322 mess and most probably don't break anything. Yes, zooming works again as well/ --- src/qtui/chatview.cpp | 54 ++++++++----------------------------------- src/qtui/chatview.h | 4 ---- 2 files changed, 9 insertions(+), 49 deletions(-) diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 695b513b..03366c66 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -37,9 +37,7 @@ ChatView::ChatView(BufferId bufferId, QWidget *parent) AbstractChatView(), _bufferContainer(0), _currentScaleFactor(1), - _invalidateFilter(false), - _verticalOffset(0), - _verticalOffsetStable(false) + _invalidateFilter(false) { QList filterList; filterList.append(bufferId); @@ -129,49 +127,15 @@ void ChatView::resizeEvent(QResizeEvent *event) { verticalScrollBar()->setValue(verticalScrollBar()->maximum()); } -// Workaround for QTBUG-6322 -// The viewport rect gets some margins where it shouldn't, resulting in scrollbars to appear void ChatView::adjustSceneRect() { - QRectF rect = scene()->sceneRect(); // qDebug() << "sceneRect" << rect; - if(rect.height() <= viewport()->height()) { - setSceneRect(rect); - return; - } - - if(_verticalOffsetStable && rect.height() > viewport()->height()) - setSceneRect(rect.adjusted(0, 0, 0, _verticalOffset)); - else - setSceneRect(rect); - - QScrollBar *vbar = verticalScrollBar(); - qreal sceneHeight = rect.height(); - qreal viewHeight = vbar->maximum() + viewport()->height() - vbar->minimum(); - if(sceneHeight != viewHeight) { - qreal voffset = sceneHeight - viewHeight; //voffset *= _currentScaleFactor; - // qDebug() << "Adjusting ChatView offset to" << voffset << "(QTBUG-6322)"; - if(sceneHeight + voffset <= viewport()->height()) { - setSceneRect(rect.adjusted(0, -voffset, 0, 0)); - _verticalOffsetStable = false; - return; - } else { - _verticalOffsetStable = true; - _verticalOffset = voffset; - setSceneRect(rect.adjusted(0, 0, 0, voffset)); - } - if(vbar->maximum() + viewport()->height() - vbar->minimum() != sceneHeight) { - //qWarning() << "Workaround for QTBUG-6322 failed!1!!" << vbar->maximum() + viewport()->height() - vbar->minimum() << sceneHeight; - _verticalOffsetStable = false; - adjustSceneRect(); - return; - } - if(voffset == _verticalOffset) - _verticalOffsetStable = true; - else { - //if(voffset <= 0) - _verticalOffset = voffset; - } - } //else - //_verticalOffsetStable = true; + // Workaround for QTBUG-6322 + // If the viewport's sceneRect() is (almost) as wide as as the viewport itself, + // Qt wants to reserve space for scrollbars even if they're turned off, resulting in + // an ugly white space at the bottom of the ChatView. + // Since the view's scene's width actually doesn't matter at all, we just adjust it + // by some hopefully large enough value to avoid this problem. + + setSceneRect(scene()->sceneRect().adjusted(0, 0, -25 ,0)); } void ChatView::mouseMoveWhileSelecting(const QPointF &scenePos) { diff --git a/src/qtui/chatview.h b/src/qtui/chatview.h index 4e88d95c..3c2eba13 100644 --- a/src/qtui/chatview.h +++ b/src/qtui/chatview.h @@ -80,10 +80,6 @@ private: QTimer _scrollTimer; int _scrollOffset; bool _invalidateFilter; - - // workaround for QTBUG-6322 - qreal _verticalOffset; - bool _verticalOffsetStable; }; -- 2.20.1