File: trackball.h

package info (click to toggle)
meshlab 2020.09%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 45,124 kB
  • sloc: cpp: 400,238; ansic: 31,952; javascript: 1,578; sh: 387; yacc: 238; lex: 139; python: 86; makefile: 29
file content (100 lines) | stat: -rw-r--r-- 4,767 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/****************************************************************************
* VCGLib                                                            o o     *
* Visual and Computer Graphics Library                            o     o   *
*                                                                _   O  _   *
* Copyright(C) 2007                                                \/)\/    *
* Visual Computing Lab                                            /\/|      *
* ISTI - Italian National Research Council                           |      *
*                                                                    \      *
* All rights reserved.                                                      *
*                                                                           *
* This program is free software; you can redistribute it and/or modify      *
* it under the terms of the GNU General Public License as published by      *
* the Free Software Foundation; either version 2 of the License, or         *
* (at your option) any later version.                                       *
*                                                                           *
* This program is distributed in the hope that it will be useful,           *
* but WITHOUT ANY WARRANTY; without even the implied warranty of            *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)          *
* for more details.                                                         *
*                                                                           *
****************************************************************************/

#ifndef QT_TRACKBALL_H
#define QT_TRACKBALL_H
#include <wrap/qt/device_to_logical.h>

/// Transforms the event coordintates (that are device independent)
/// into the expected framebuffer coordinates (e.g.in opengl pixels)
/// This is necessary because trackball works in the viewport coord systems.
inline float QT2VCG_X( QWidget *qw, QMouseEvent *e)
{
  return QTLogicalToDevice(qw,e->x());
}

/// Transforms the event coordintates (that are device independent)
/// into the expected framebuffer coordinates (e.g.in opengl pixels)
/// This is necessary because trackball works in the viewport coord systems.

inline float QT2VCG_Y( QWidget *qw, QMouseEvent *e)
{
  return QTLogicalToDevice(qw,qw->height () - e->y ());
}

/// Takes a QT MouseButton, some QT KeyboardModifiers and returns the equivalent Trackball::Button
inline  vcg::Trackball::Button QT2VCG (Qt::MouseButton qtbt, Qt::KeyboardModifiers modifiers)
{
  int vcgbt = vcg::Trackball::BUTTON_NONE;

  if (qtbt & Qt::LeftButton)	vcgbt |= vcg::Trackball::BUTTON_LEFT;
  if (qtbt & Qt::RightButton)	vcgbt |= vcg::Trackball::BUTTON_RIGHT;
  if (qtbt & Qt::MidButton)		vcgbt |= vcg::Trackball::BUTTON_MIDDLE;

  if (modifiers & Qt::ShiftModifier)		vcgbt |= vcg::Trackball::KEY_SHIFT;
  if (modifiers & Qt::ControlModifier)	vcgbt |= vcg::Trackball::KEY_CTRL;
  if (modifiers & Qt::AltModifier)			vcgbt |= vcg::Trackball::KEY_ALT;

  return vcg::Trackball::Button (vcgbt);
}

/// Takes a QT ket and QT KeyboardModifiers and returns the mouse wheel related Trackball::Button
inline vcg::Trackball::Button QTWheel2VCG (Qt::KeyboardModifiers modifiers)
{
  int vcgbt = vcg::Trackball::WHEEL;

  if (modifiers & Qt::ShiftModifier)		vcgbt |= vcg::Trackball::KEY_SHIFT;
  if (modifiers & Qt::ControlModifier)	vcgbt |= vcg::Trackball::KEY_CTRL;
  if (modifiers & Qt::AltModifier)			vcgbt |= vcg::Trackball::KEY_ALT;

  return vcg::Trackball::Button (vcgbt);
}

/// Takes some QT KeyboardModifiers and returns the mouse wheel related Trackball::Button
inline vcg::Trackball::Button QTKey2VCG (int key, Qt::KeyboardModifiers modifiers)
{
  int vcgbt = 0;
    switch (key) {
        case Qt::Key_W    :
        case Qt::Key_Up   : vcgbt = vcg::Trackball::KEY_UP   ; break;
        case Qt::Key_A    :
        case Qt::Key_Left : vcgbt = vcg::Trackball::KEY_LEFT ; break;
        case Qt::Key_S    :
        case Qt::Key_Down : vcgbt = vcg::Trackball::KEY_DOWN ; break;
        case Qt::Key_D    :
        case Qt::Key_Right: vcgbt = vcg::Trackball::KEY_RIGHT; break;
        case Qt::Key_R    :
        case Qt::Key_PageUp: vcgbt = vcg::Trackball::KEY_PGUP ; break;
        case Qt::Key_F    :
        case Qt::Key_PageDown: vcgbt = vcg::Trackball::KEY_PGDOWN; break;
        default           : vcgbt = 0;
    }

  if (modifiers & Qt::ShiftModifier)		vcgbt |= vcg::Trackball::KEY_SHIFT;
  if (modifiers & Qt::ControlModifier)	vcgbt |= vcg::Trackball::KEY_CTRL;
  if (modifiers & Qt::AltModifier)			vcgbt |= vcg::Trackball::KEY_ALT;

  return vcg::Trackball::Button (vcgbt);
}

#endif // QT_TRACKBALL_H