diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2017-06-15 06:42:02 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-06-18 18:48:42 +0200 |
commit | ab5cd03c9a50cef1dafa32c100e02ab36387db45 (patch) | |
tree | afd2edcafe7a42e51a826be3de865ad9ff42337f | |
parent | 7f68fc115abebd617d495a7d1a18b4fa0158c8e2 (diff) |
gui: don't redraw whole mapping window layout
When we're tracking, we only want to redraw the splines
in the mapping window while the mapping window is open.
It was a major CPU hog to redraw in case the mapping
window's open.
-rw-r--r-- | gui/main-window.cpp | 4 | ||||
-rw-r--r-- | gui/mapping-window.cpp | 49 | ||||
-rw-r--r-- | gui/mapping-window.hpp | 3 |
3 files changed, 39 insertions, 17 deletions
diff --git a/gui/main-window.cpp b/gui/main-window.cpp index aa8e16f3..11479a1a 100644 --- a/gui/main-window.cpp +++ b/gui/main-window.cpp @@ -523,8 +523,8 @@ void MainWindow::display_pose(const double *mapped, const double *raw) ui.pose_display->rotate_async(mapped[Yaw], mapped[Pitch], -mapped[Roll], mapped[TX], mapped[TY], mapped[TZ]); - if (mapping_widget && mapping_widget->isVisible()) - mapping_widget->repaint(); + if (mapping_widget) + mapping_widget->refresh_tab(); QLCDNumber* raw_[] = { ui.raw_x, ui.raw_y, ui.raw_z, diff --git a/gui/mapping-window.cpp b/gui/mapping-window.cpp index 0a5d3049..46224078 100644 --- a/gui/mapping-window.cpp +++ b/gui/mapping-window.cpp @@ -10,7 +10,7 @@ #include "logic/main-settings.hpp" #include "spline/spline-widget.hpp" -MapWidget::MapWidget(Mappings& m) : m(m) +MapWidget::MapWidget(Mappings& m) : m(m), widgets{} { ui.setupUi(this); @@ -43,19 +43,19 @@ void MapWidget::load() bool altp; } qfcs[] = { - { ui.rxconfig, Yaw, nullptr, false, }, - { ui.ryconfig, Pitch, nullptr, false, }, - { ui.rzconfig, Roll, nullptr, false, }, - { ui.txconfig, TX, nullptr, false, }, - { ui.tyconfig, TY, nullptr, false, }, - { ui.tzconfig, TZ, nullptr, false, }, - { ui.rxconfig_alt, Yaw, ui.rx_altp, true, }, - { ui.ryconfig_alt, Pitch, ui.ry_altp, true, }, - { ui.rzconfig_alt, Roll, ui.rz_altp, true, }, - { ui.txconfig_alt, TX, ui.tx_altp, true, }, - { ui.tyconfig_alt, TY, ui.ty_altp, true, }, - { ui.tzconfig_alt, TZ, ui.tz_altp, true, }, - { nullptr, Yaw, nullptr, false } + { ui.rxconfig, Yaw, nullptr, false, }, + { ui.ryconfig, Pitch, nullptr, false, }, + { ui.rzconfig, Roll, nullptr, false, }, + { ui.txconfig, TX, nullptr, false, }, + { ui.tyconfig, TY, nullptr, false, }, + { ui.tzconfig, TZ, nullptr, false, }, + { ui.rxconfig_alt, Yaw, ui.rx_altp, true, }, + { ui.ryconfig_alt, Pitch, ui.ry_altp, true, }, + { ui.rzconfig_alt, Roll, ui.rz_altp, true, }, + { ui.txconfig_alt, TX, ui.tx_altp, true, }, + { ui.tyconfig_alt, TY, ui.ty_altp, true, }, + { ui.tzconfig_alt, TZ, ui.tz_altp, true, }, + { nullptr, Yaw, nullptr, false } }; using a = axis_opts::max_clamp; @@ -100,9 +100,12 @@ void MapWidget::load() qfc.set_snap(x_snap, 1); } }); + // force signal to avoid duplicating the slot's logic - qfcs[i].qfc->setConfig(&conf); + qfc.setConfig(&conf); axis.opts.clamp.valueChanged(axis.opts.clamp); + + widgets[i % 6][altp ? 1 : 0] = &qfc; } } @@ -112,6 +115,22 @@ void MapWidget::closeEvent(QCloseEvent*) invalidate_dialog(); } +void MapWidget::refresh_tab() +{ + if (!isVisible()) + return; + + const int idx = ui.tabWidget->currentIndex(); + + if (likely(idx >= 0 && idx < 6)) + { + widgets[idx][0]->repaint(); + widgets[idx][1]->repaint(); + } + else + qDebug() << "map-widget: bad index" << idx; +} + void MapWidget::save_dialog() { s.b_map->save(); diff --git a/gui/mapping-window.hpp b/gui/mapping-window.hpp index 9403bfb5..ab0da2cc 100644 --- a/gui/mapping-window.hpp +++ b/gui/mapping-window.hpp @@ -14,11 +14,14 @@ class MapWidget final : public QDialog Q_OBJECT public: MapWidget(Mappings& m); + void refresh_tab(); private: Ui::mapping_window ui; Mappings& m; main_settings s; + spline_widget* widgets[6][2]; + void closeEvent(QCloseEvent*) override; void load(); |