File: vtkTDxUnixDevice.h

package info (click to toggle)
vtk6 6.3.0%2Bdfsg2-8.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 118,972 kB
  • sloc: cpp: 1,442,790; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,119; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 154; makefile: 68; objc: 17
file content (138 lines) | stat: -rw-r--r-- 4,902 bytes parent folder | download | duplicates (5)
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkTDxUnixDevice.h

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// .NAME vtkTDxUnixDevice - Implementation of vtkTDxDevice on Unix
// .SECTION Description
// vtkTDxUnixDevice is a concrete implementation of vtkTDxDevice on Unix
// It uses the Magellan API.
// .SECTION See Also
// vtkTDxDevice, vtkTDxWinDevice

#ifndef vtkTDxUnixDevice_h
#define vtkTDxUnixDevice_h

#include "vtkRenderingOpenGLModule.h" // For export macro
#include "vtkTDxDevice.h"
//#include <X11/Xlib.h> // Needed for X types used in the public interface
class vtkRenderWindowInteractor;

// We cannot include <X11/Xlib.h> (which defines "Display *",
// "Window" and "XEvent *") because it defines macro like None that would
// conflict with qt4/Qt/qcoreevent.h which defines None as a QEvent::Type
// value.
typedef void vtkTDxUnixDeviceDisplay;
typedef unsigned int vtkTDxUnixDeviceWindow;
typedef void vtkTDxUnixDeviceXEvent;

class VTKRENDERINGOPENGL_EXPORT vtkTDxUnixDevice : public vtkTDxDevice
{
public:
  static vtkTDxUnixDevice *New();
  vtkTypeMacro(vtkTDxUnixDevice,vtkTDxDevice);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // Get the ID of the X Display. Initial value is 0.
  // The return value type is actually a "Display *"
  vtkTDxUnixDeviceDisplay *GetDisplayId() const;

  // Description:
  // Get the ID of the X Window. Initial value is 0.
  // The return value type is actually a "Window"
  vtkTDxUnixDeviceWindow GetWindowId() const;

  // Description:
  // Set the ID of the X Display.
  // The argument type is actually a "Display *".
  // \pre not_yet_initialized: !GetInitialized()
  void SetDisplayId(vtkTDxUnixDeviceDisplay *id);

  // Description:
  // Set the ID of the X Window.
  // \pre not_yet_initialized: !GetInitialized()
  void SetWindowId(vtkTDxUnixDeviceWindow id);

  // Description:
  // Initialize the device with the current display and window ids.
  // It updates the value of GetInitialized().
  // Initialization can fail (if the device is not present or the driver is
  // not running). You must look for the value of
  // GetInitialized() before processing further.
  // This interactor does not have to be set  before calling Initialize().
  // However, in order to handle the events the Interactor has to be set
  // otherwise ProcessEvent will be a no-op.
  // \pre not_yet_initialized: !GetInitialized()
  // \pre valid_display: GetDisplayId()!=0
  // \pre valid_window: GetWindowId()!=0
  // \pre valid_interactor: GetInteractor()!=0
  void Initialize();

  // Description:
  // See description in the superclass. Implementation for Unix.
  virtual void Close();

  // Description:
  // Translate the X11 event by invoking a VTK event, if the event came from
  // the device.
  // Return true if the event passed in argument was effectively an event from
  // the device, return false otherwise.
  // The interactor has to be set in order to get some events, otherwise they
  // will be ignored.
  // \pre initialized: GetInitialized()
  // \pre e_exists: e!=0
  // \pre e_is_client_message: e->type==ClientMessage
  bool ProcessEvent(const vtkTDxUnixDeviceXEvent *e);

  // Description:
  // PROBABLY TRANSFER IT TO THE SUPERCLASS
  // Get/Set Scale factor on the translation motion. Initial value is 1.0
  vtkGetMacro(TranslationScale,double);
  vtkSetMacro(TranslationScale,double);

  // Description:
  // PROBABLY TRANSFER IT TO THE SUPERCLASS
  // Get/Set Scale factor on the rotation motion. Initial value is 1.0
  vtkGetMacro(RotationScale,double);
  vtkSetMacro(RotationScale,double);

  // Description:
  // Set the sensitivity of the device for the current application.
  // A neutral value is 1.0.
  // \pre initialized: GetInitialized()
  void SetSensitivity(double sensitivity);

protected:
  // Description:
  // Default constructor. Just set initial values for
  // DisplayId (0), WindowId (0), TranslationScale (1.0),
  // RotationScale (1.0).
  vtkTDxUnixDevice();

  // Description:
  // Destructor. If the device is not initialized, do nothing. If the device
  // is initialized, close the device.
  virtual ~vtkTDxUnixDevice();

  vtkTDxUnixDeviceDisplay *DisplayId;
  vtkTDxUnixDeviceWindow WindowId;

  double TranslationScale;
  double RotationScale;

private:
  vtkTDxUnixDevice(const vtkTDxUnixDevice&);  // Not implemented.
  void operator=(const vtkTDxUnixDevice&);  // Not implemented.
};

#endif