summaryrefslogtreecommitdiffhomepage
path: root/qfunctionconfigurator/qfunctionconfigurator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qfunctionconfigurator/qfunctionconfigurator.cpp')
-rw-r--r--qfunctionconfigurator/qfunctionconfigurator.cpp63
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();
}