diff options
Diffstat (limited to 'qfunctionconfigurator/qfunctionconfigurator.cpp')
-rw-r--r-- | qfunctionconfigurator/qfunctionconfigurator.cpp | 63 |
1 files changed, 21 insertions, 42 deletions
diff --git a/qfunctionconfigurator/qfunctionconfigurator.cpp b/qfunctionconfigurator/qfunctionconfigurator.cpp index 94a31be5..c1f11ffa 100644 --- a/qfunctionconfigurator/qfunctionconfigurator.cpp +++ b/qfunctionconfigurator/qfunctionconfigurator.cpp @@ -1,9 +1,10 @@ +#include "../opentrack/options.hpp" +using namespace options; #include "qfunctionconfigurator/qfunctionconfigurator.h" #include <QPainter> #include <QPaintEvent> #include <QPen> #include <QPixmap> -#include <QTimer> #include <cmath> #include <algorithm> @@ -20,11 +21,8 @@ QFunctionConfigurator::QFunctionConfigurator(QWidget *parent) : } void QFunctionConfigurator::setConfig(Map* config, const QString& name) { - QSettings settings("opentrack"); - QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); - QSettings iniFile( currentFile, QSettings::IniFormat ); - - config->loadSettings(iniFile, name); + mem<QSettings> iniFile = group::ini_file(); + config->loadSettings(*iniFile, name); _config = config; _draw_function = true; update_range(); @@ -36,7 +34,7 @@ void QFunctionConfigurator::drawBackground() if (!_config) return; _background = QPixmap(width(), height()); - + QPainter painter(&_background); painter.fillRect(rect(), QColor::fromRgb(204, 204, 204)); @@ -135,7 +133,7 @@ void QFunctionConfigurator::drawFunction() static constexpr double step = 1.02; const double max = _config->maxInput(); - + QPointF prev = point_to_pixel(QPointF(0, 0)); for (double i = 0; i < max; i += step) { double val = _config->getValue(i); @@ -156,25 +154,19 @@ void QFunctionConfigurator::paintEvent(QPaintEvent *e) _draw_function = false; drawFunction(); } - + p.drawPixmap(e->rect(), _function); if (_config) { QPen pen(Qt::white, 1, Qt::SolidLine); QList<QPointF> points = _config->getPoints(); if (points.size() && moving_control_point_idx >= 0 && moving_control_point_idx < points.size()) { - QPointF prev = points[0]; + QPointF prev = point_to_pixel(points[0]); for (int i = 1; i < points.size(); i++) { auto tmp = point_to_pixel(points[i]); drawLine(&p, prev, tmp, pen); prev = tmp; } - pen.setWidth(1); - pen.setColor( Qt::white ); - pen.setStyle( Qt::DashLine ); - QPointF pixel_pos = point_to_pixel(points[moving_control_point_idx]); - drawLine(&p, QPoint(pixel_bounds.left(), pixel_pos.y()), QPoint(pixel_pos.x(), pixel_pos.y()), pen); - drawLine(&p, QPoint(pixel_pos.x(), pixel_pos.y()), QPoint(pixel_pos.x(), pixel_bounds.height() + pixel_bounds.top()), pen); } // If the Tracker is active, the 'Last Point' it requested is recorded. @@ -184,12 +176,6 @@ void QFunctionConfigurator::paintEvent(QPaintEvent *e) if (_config->getLastPoint(last)) { QPointF pixel_pos = point_to_pixel( QPointF(fabs(last.x()), fabs(last.y())) ); drawPoint(&p, pixel_pos, QColor(255, 0, 0, 120)); - - pen.setWidth(1); - pen.setColor( Qt::black ); - pen.setStyle( Qt::SolidLine ); - drawLine(&p, QPoint(pixel_bounds.left(), pixel_pos.y()), QPoint(pixel_pos.x(), pixel_pos.y()), pen); - drawLine(&p, QPoint(pixel_pos.x(), pixel_pos.y()), QPoint(pixel_pos.x(), pixel_bounds.width()), pen); } } } @@ -260,32 +246,25 @@ void QFunctionConfigurator::mouseMoveEvent(QMouseEvent *e) { if (!_config) return; - - static constexpr int min_refresh_delay = 12; - - if (timer.isValid() && timer.elapsed() < min_refresh_delay) - return; - - static constexpr int refresh_delay = 17; + QList<QPointF> points = _config->getPoints(); if (moving_control_point_idx != -1 && moving_control_point_idx < points.size()) { setCursor(Qt::ClosedHandCursor); - + bool overlap = false; - + QPointF new_pt = pixel_coord_to_point(e->pos()); - + if (moving_control_point_idx + 1 < points.size()) overlap |= new_pt.x() > points[moving_control_point_idx+1].x(); if (moving_control_point_idx != 0) overlap |= new_pt.x() < points[moving_control_point_idx-1].x(); - + if (overlap) moving_control_point_idx = -1; - else if (timer.isValid() && timer.elapsed() > refresh_delay) + else { - timer.restart(); points[moving_control_point_idx] = new_pt; _config->movePoint(moving_control_point_idx, new_pt); _draw_function = true; @@ -323,7 +302,7 @@ void QFunctionConfigurator::mouseReleaseEvent(QMouseEvent *e) } setCursor(Qt::ArrowCursor); moving_control_point_idx = -1; - + _draw_function = true; update(); } @@ -333,23 +312,24 @@ void QFunctionConfigurator::update_range() { if (!_config) return; - + const double w = width(), h = height(); const double mwl = 40, mhl = 20; const double mwr = 15, mhr = 35; - + pixel_bounds = QRectF(mwl, mhl, (w - mwl - mwr), (h - mhl - mhr)); c = QPointF(pixel_bounds.width() / _config->maxInput(), pixel_bounds.height() / _config->maxOutput()); _draw_function = true; - + _background = QPixmap(); _function = QPixmap(); + + update(); } bool QFunctionConfigurator::point_within_pixel(const QPointF &pt, const QPointF &pixel) { - QPointF pixel2(pixel_bounds.x() + pt.x() * c.x(), - (pixel_bounds.y() + pixel_bounds.height() - pt.y() * c.y())); + QPointF pixel2 = point_to_pixel(pt); return pixel2.x() >= pixel.x() - pointSize && pixel2.x() < pixel.x() + pointSize && pixel2.y() >= pixel.y() - pointSize && pixel2.y() < pixel.y() + pointSize; } @@ -384,5 +364,4 @@ QPointF QFunctionConfigurator::point_to_pixel(const QPointF& point) void QFunctionConfigurator::resizeEvent(QResizeEvent *) { update_range(); - update(); } |