YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
joywidget.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: LGPL-2.1-or-later
4 */
5
6#ifdef MSVC
7 #define _USE_MATH_DEFINES
8#endif
9#include <cmath>
10
11#include <yarp/os/Time.h>
12#include <yarp/os/Log.h>
13#include <yarp/os/LogStream.h>
14#include <qpainter.h>
15
16#include "joywidget.h"
17
18Joywidget::Joywidget(QWidget* parent, const char* name, int size)
19{
20 joysize=size;
21 this->setParent(parent);
22 this->setObjectName(name);
23 this->resize(QSize(size+5, size+5));
24 pressed = false;
25 mousePoint.setX(size/2);
26 mousePoint.setY(size/2);
27 this->update();
28 cursorSize=10;
29}
30
34
35void Joywidget::mousePressEvent(QMouseEvent* event)
36{
37 if (event->button() == Qt::LeftButton)
38 {
39 mousePoint = event->pos();
40 pressed = true;
41 }
42}
43
44void Joywidget::mouseMoveEvent(QMouseEvent* event)
45{
46 if ((event->buttons() & Qt::LeftButton) && pressed)
47 {
48 QPoint currentPos = event->pos();
49 double x = currentPos.x() - (joysize /2);
50 double y = currentPos.y() - (joysize /2);
51 double centerDistance = sqrt((x*x)+(y*y));
52 double centerDirection = atan2(x,y);
53 if (centerDistance < (joysize/2 -cursorSize))
54 {
55 mousePoint = currentPos;
56 }
57 else
58 {
59 double newCenterDistance = (joysize/2 -cursorSize);
60 double newX = newCenterDistance * sin(centerDirection)+ joysize/2;
61 double newY = newCenterDistance * cos(centerDirection)+ joysize/2;
62 mousePoint = QPoint(newX, newY);
63 }
64 drawCursor();
65 }
66}
67
68void Joywidget::mouseReleaseEvent(QMouseEvent* event)
69{
70 if (event->button() == Qt::LeftButton && pressed)
71 {
72 mousePoint.setX(joysize/2);
73 mousePoint.setY(joysize/2);
74 pressed = false;
75 drawCursor();
76 }
77}
78
79void Joywidget::paintEvent(QPaintEvent* event)
80{
81 QPainter painter(this);
82 painter.setPen(QColor("#000000"));
83 painter.setBrush(QBrush("#FFFFFF"));
84 painter.drawRect(QRect(QPoint(0, 0), QSize(joysize, joysize)));
85
86 painter.setPen(QColor("#000000"));
87 painter.setBrush(QBrush("#909090"));
88 painter.drawEllipse(QPoint(joysize / 2, joysize / 2), joysize / 2, joysize / 2);
89
90 painter.setPen(QColor("#000000"));
91 painter.setBrush(QBrush("#000000"));
92 painter.drawEllipse(mousePoint, int(cursorSize), int(cursorSize));
93}
94
95void Joywidget::drawCursor()
96{
97 this->update();
98}
99
100void Joywidget::getStatus(double& vel_lin_percent, double& vel_dir)
101{
102 double x = mousePoint.x() - joysize/2;
103 double y = mousePoint.y() - joysize/2;
104 double centerDistance = sqrt((x * x) + (y * y));
105 vel_lin_percent = (centerDistance) / (double(joysize) / 2);
106 vel_dir = atan2(x, y);
107}
Joywidget(QWidget *parent=0, const char *name="", int size=100)
Definition joywidget.cpp:18
void mousePressEvent(QMouseEvent *event) override
Definition joywidget.cpp:35
void mouseMoveEvent(QMouseEvent *event) override
Definition joywidget.cpp:44
void mouseReleaseEvent(QMouseEvent *event) override
Definition joywidget.cpp:68
void getStatus(double &vel_lin_percent, double &vel_dir)
void paintEvent(QPaintEvent *event) override
Definition joywidget.cpp:79