Add threshold to auto scroll

This commit is contained in:
Ryan Huffman 2014-04-23 15:37:28 -07:00
parent d56a4e169e
commit 1774f6c9bd
2 changed files with 12 additions and 6 deletions

View file

@ -171,7 +171,7 @@ void ChatWindow::addTimeStamp() {
timeLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
timeLabel->setAlignment(Qt::AlignLeft);
bool atBottom = isAtBottom();
bool atBottom = isNearBottom();
ui->messagesVBoxLayout->addWidget(timeLabel);
ui->messagesVBoxLayout->parentWidget()->updateGeometry();
@ -288,7 +288,7 @@ void ChatWindow::messageReceived(const QXmppMessage& message) {
messageText = messageText.replace(regexHifiLinks, "<a href=\"hifi://\\1\">\\1</a>");
messageArea->setHtml(userLabel + messageText);
bool atBottom = isAtBottom();
bool atBottom = isNearBottom();
ui->messagesVBoxLayout->addWidget(messageArea);
ui->messagesVBoxLayout->parentWidget()->updateGeometry();
@ -308,13 +308,13 @@ void ChatWindow::messageReceived(const QXmppMessage& message) {
#endif
bool ChatWindow::isAtBottom() {
bool ChatWindow::isNearBottom() {
QScrollBar* verticalScrollBar = ui->messagesScrollArea->verticalScrollBar();
return verticalScrollBar->sliderPosition() == verticalScrollBar->maximum();
return verticalScrollBar->value() >= verticalScrollBar->maximum() - Ui::AUTO_SCROLL_THRESHOLD;
}
// Scroll chat message area to bottom.
void ChatWindow::scrollToBottom() {
QScrollBar* verticalScrollBar = ui->messagesScrollArea->verticalScrollBar();
verticalScrollBar->setSliderPosition(verticalScrollBar->maximum());
verticalScrollBar->setValue(verticalScrollBar->maximum());
}

View file

@ -27,6 +27,12 @@
#endif
namespace Ui {
// Maximum amount the chat can be scrolled up in order to auto scroll.
const int AUTO_SCROLL_THRESHOLD = 20;
class ChatWindow;
}
@ -49,7 +55,7 @@ private:
#endif
void startTimerForTimeStamps();
void addTimeStamp();
bool isAtBottom();
bool isNearBottom();
void scrollToBottom();
Ui::ChatWindow* ui;