/*Copyright © 2017 Hasan Yavuz ÖzderyaThis file is part of serialplot.serialplot is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.serialplot is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with serialplot. If not, see <http://www.gnu.org/licenses/>.*/#include "zoomer.h"#include <qwt_plot.h>#include <QtDebug>#include <QMouseEvent>Zoomer::Zoomer(QWidget* widget, bool doReplot) :ScrollZoomer(widget){is_panning = false;setTrackerMode(AlwaysOn);// set corner widget between the scrollbars with default background colorauto cornerWidget = new QWidget();auto bgColor = cornerWidget->palette().color(QPalette::Window).name();auto styleSheet = QString("background-color:%1;").arg(bgColor);cornerWidget->setStyleSheet(styleSheet);ScrollZoomer::setCornerWidget(cornerWidget);}void Zoomer::zoom(int up){ScrollZoomer::zoom(up);if(zoomRectIndex() == 0){emit unzoomed();}}void Zoomer::zoom( const QRectF & rect){// set the zoom base when user zooms in to first levelif (zoomRectIndex() == 0){this->setZoomBase(false);}ScrollZoomer::zoom(rect);}QwtText Zoomer::trackerTextF(const QPointF& pos) const{QwtText b = ScrollZoomer::trackerTextF(pos);const QPolygon pa = selection();if (!isActive() || pa.count() < 2){return b;}const QRectF rect = invTransform(QRect(pa.first(), pa.last()).normalized());QString sizeText = QString(" [%1, %2]").\arg(rect.width(), 0, 'g', 4).\arg(rect.height(), 0, 'g', 4);b.setText(b.text() + sizeText);return b;}void Zoomer::drawRubberBand(QPainter* painter) const{const double FILL_ALPHA = 0.2;QColor color = painter->pen().color();color.setAlphaF(FILL_ALPHA);painter->setBrush(color);ScrollZoomer::drawRubberBand(painter);}QRegion Zoomer::rubberBandMask() const{const QPolygon pa = selection();if (pa.count() < 2){return QRegion();}const QRect r = QRect(pa.first(), pa.last()).normalized().adjusted(0, 0, 1, 1);return QRegion(r);}void Zoomer::widgetMousePressEvent(QMouseEvent* mouseEvent){if (mouseEvent->modifiers() & Qt::ControlModifier){is_panning = true;parentWidget()->setCursor(Qt::ClosedHandCursor);pan_point = invTransform(mouseEvent->pos());}else{ScrollZoomer::widgetMousePressEvent(mouseEvent);}}void Zoomer::widgetMouseMoveEvent(QMouseEvent* mouseEvent){if (is_panning){auto cur_point = invTransform(mouseEvent->pos());auto delta = cur_point - pan_point;moveBy(-delta.x(), -delta.y());pan_point = invTransform(mouseEvent->pos());}else{ScrollZoomer::widgetMouseMoveEvent(mouseEvent);}}void Zoomer::widgetMouseReleaseEvent(QMouseEvent* mouseEvent){if (is_panning){is_panning = false;parentWidget()->setCursor(Qt::CrossCursor);}else{ScrollZoomer::widgetMouseReleaseEvent(mouseEvent);}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。