X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=2fc14d2b64c9e777827650f7565125d1fe351aae;hp=c7944179ad5a7185de2dc3c0bf2a30c69ef09860;hb=8a5fd81fea577663e8c0f17e53d5928599d0926d;hpb=5f9b7de5c8c71801141d35497786bf57f75e3ca4 diff --git a/pv/view/view.cpp b/pv/view/view.cpp index c794417..2fc14d2 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -746,6 +746,30 @@ void View::calculate_tick_spacing() set_tick_precision(tick_precision); } +void View::adjust_top_margin() +{ + assert(viewport_); + + const QSize areaSize = viewport_->size(); + + const pair extents = v_extents(); + const int top_margin = owner_visual_v_offset() + extents.first; + const int trace_bottom = owner_visual_v_offset() + extents.first + extents.second; + + // Do we have empty space at the top while the last trace goes out of screen? + if ((top_margin > 0) && (trace_bottom > areaSize.height())) { + const int trace_height = extents.second - extents.first; + + // Center everything vertically if there is enough space + if (areaSize.height() >= trace_height) + set_v_offset(extents.first - + ((areaSize.height() - trace_height) / 2)); + else + // Remove the top margin to make as many traces fit on screen as possible + set_v_offset(extents.first); + } +} + void View::update_scroll() { assert(viewport_); @@ -955,8 +979,12 @@ bool View::eventFilter(QObject *object, QEvent *event) return QObject::eventFilter(object, event); } -void View::resizeEvent(QResizeEvent*) +void View::resizeEvent(QResizeEvent* event) { + // Only adjust the top margin if we shrunk vertically + if (event->size().height() < event->oldSize().height()) + adjust_top_margin(); + update_layout(); }