cabana/chart: fix rubber band precision issue (#29887)

fix rubber band precision issue
pull/29880/head
Dean Lee 2 years ago committed by GitHub
parent d0c922ce77
commit 11d157369b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      tools/cabana/chart/chart.cc
  2. 1
      tools/cabana/chart/chart.h
  3. 2
      tools/cabana/chart/chartswidget.cc
  4. 2
      tools/cabana/chart/chartswidget.h

@ -474,7 +474,7 @@ void ChartView::mouseReleaseEvent(QMouseEvent *event) {
auto rubber = findChild<QRubberBand *>(); auto rubber = findChild<QRubberBand *>();
if (event->button() == Qt::LeftButton && rubber && rubber->isVisible()) { if (event->button() == Qt::LeftButton && rubber && rubber->isVisible()) {
rubber->hide(); rubber->hide();
QRectF rect = rubber->geometry().normalized(); auto rect = rubber->geometry().normalized();
double min = chart()->mapToValue(rect.topLeft()).x(); double min = chart()->mapToValue(rect.topLeft()).x();
double max = chart()->mapToValue(rect.bottomRight()).x(); double max = chart()->mapToValue(rect.bottomRight()).x();
@ -698,7 +698,10 @@ void ChartView::drawForeground(QPainter *painter, const QRectF &rect) {
} }
} }
// paint zoom range drawRubberBandTimeRange(painter);
}
void ChartView::drawRubberBandTimeRange(QPainter *painter) {
auto rubber = findChild<QRubberBand *>(); auto rubber = findChild<QRubberBand *>();
if (rubber && rubber->isVisible() && rubber->width() > 1) { if (rubber && rubber->isVisible() && rubber->width() > 1) {
painter->setPen(Qt::white); painter->setPen(Qt::white);

@ -84,6 +84,7 @@ private:
void drawBackground(QPainter *painter, const QRectF &rect) override; void drawBackground(QPainter *painter, const QRectF &rect) override;
void drawDropIndicator(bool draw) { if (std::exchange(can_drop, draw) != can_drop) viewport()->update(); } void drawDropIndicator(bool draw) { if (std::exchange(can_drop, draw) != can_drop) viewport()->update(); }
void drawTimeline(QPainter *painter); void drawTimeline(QPainter *painter);
void drawRubberBandTimeRange(QPainter *painter);
std::tuple<double, double, int> getNiceAxisNumbers(qreal min, qreal max, int tick_count); std::tuple<double, double, int> getNiceAxisNumbers(qreal min, qreal max, int tick_count);
qreal niceNumber(qreal x, bool ceiling); qreal niceNumber(qreal x, bool ceiling);
QXYSeries *createSeries(SeriesType type, QColor color); QXYSeries *createSeries(SeriesType type, QColor color);

@ -219,7 +219,7 @@ void ChartsWidget::updateToolBar() {
undo_zoom_action->setVisible(is_zoomed); undo_zoom_action->setVisible(is_zoomed);
redo_zoom_action->setVisible(is_zoomed); redo_zoom_action->setVisible(is_zoomed);
reset_zoom_action->setVisible(is_zoomed); reset_zoom_action->setVisible(is_zoomed);
reset_zoom_btn->setText(is_zoomed ? tr("%1-%2").arg(zoomed_range.first, 0, 'f', 1).arg(zoomed_range.second, 0, 'f', 1) : ""); reset_zoom_btn->setText(is_zoomed ? tr("%1-%2").arg(zoomed_range.first, 0, 'f', 2).arg(zoomed_range.second, 0, 'f', 2) : "");
remove_all_btn->setEnabled(!charts.isEmpty()); remove_all_btn->setEnabled(!charts.isEmpty());
dock_btn->setIcon(docking ? "arrow-up-right-square" : "arrow-down-left-square"); dock_btn->setIcon(docking ? "arrow-up-right-square" : "arrow-down-left-square");
dock_btn->setToolTip(docking ? tr("Undock charts") : tr("Dock charts")); dock_btn->setToolTip(docking ? tr("Undock charts") : tr("Dock charts"));

@ -120,7 +120,7 @@ class ZoomCommand : public QUndoCommand {
public: public:
ZoomCommand(ChartsWidget *charts, std::pair<double, double> range) : charts(charts), range(range), QUndoCommand() { ZoomCommand(ChartsWidget *charts, std::pair<double, double> range) : charts(charts), range(range), QUndoCommand() {
prev_range = charts->is_zoomed ? charts->zoomed_range : charts->display_range; prev_range = charts->is_zoomed ? charts->zoomed_range : charts->display_range;
setText(QObject::tr("Zoom to %1-%2").arg(range.first, 0, 'f', 1).arg(range.second, 0, 'f', 1)); setText(QObject::tr("Zoom to %1-%2").arg(range.first, 0, 'f', 2).arg(range.second, 0, 'f', 2));
} }
void undo() override { charts->setZoom(prev_range.first, prev_range.second); } void undo() override { charts->setZoom(prev_range.first, prev_range.second); }
void redo() override { charts->setZoom(range.first, range.second); } void redo() override { charts->setZoom(range.first, range.second); }

Loading…
Cancel
Save