VTK  9.3.1
vtkCocoaRenderWindow.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
30 #ifndef vtkCocoaRenderWindow_h
31 #define vtkCocoaRenderWindow_h
32 
33 #include "vtkOpenGLRenderWindow.h"
34 #include "vtkRenderingOpenGL2Module.h" // For export macro
35 #include <stack> // for ivar
36 
37 VTK_ABI_NAMESPACE_BEGIN
38 class VTKRENDERINGOPENGL2_EXPORT vtkCocoaRenderWindow : public vtkOpenGLRenderWindow
39 {
40 public:
41  static vtkCocoaRenderWindow* New();
43  void PrintSelf(ostream& os, vtkIndent indent) override;
44 
48  void Start() override;
49 
53  void Frame() override;
54 
58  virtual void WindowConfigure();
59 
68  void Initialize() override;
69 
76  void SetFullScreen(vtkTypeBool) override;
77 
81  void WindowRemap() override;
82 
87  virtual void PrefFullScreen();
88 
90 
98  void SetSize(int width, int height) override;
99  void SetSize(int a[2]) override { this->SetSize(a[0], a[1]); }
101 
106  int* GetSize() VTK_SIZEHINT(2) override;
107 
109 
114  void SetPosition(int x, int y) override;
115  void SetPosition(int a[2]) override { this->SetPosition(a[0], a[1]); }
117 
122  int* GetScreenSize() VTK_SIZEHINT(2) override;
123 
128  int* GetPosition() VTK_SIZEHINT(2) override;
129 
134  void SetWindowName(const char*) override;
135 
136  void SetNextWindowInfo(const char*) override
137  {
138  vtkDebugMacro("SetNextWindowInfo not implemented (WindowRemap not implemented).");
139  }
140  void* GetGenericDrawable() override
141  {
142  vtkDebugMacro("Method not implemented.");
143  return nullptr;
144  }
145 
153  void SetDisplayId(void* displayId) override
154  {
155  this->DisplayIndex = displayId ? *(reinterpret_cast<int*>(displayId)) : 0;
156  }
157 
158  void* GetGenericDisplayId() override
159  {
160  vtkDebugMacro("Method not implemented.");
161  return nullptr;
162  }
163 
169  void SetWindowInfo(const char*) override;
170 
176  void SetParentInfo(const char*) override;
177 
178  void SetNextWindowId(void*) override
179  {
180  vtkDebugMacro("SetNextWindowId not implemented (WindowRemap not implemented).");
181  }
182 
187  bool InitializeFromCurrentContext() override;
188 
192  bool GetPlatformSupportsRenderWindowSharing() override { return true; }
193 
200  void SetStereoCapableWindow(vtkTypeBool capable) override;
201 
205  void MakeCurrent() override;
206 
210  void ReleaseCurrent() override;
211 
215  bool IsCurrent() override;
216 
220  void UpdateContext();
221 
225  const char* ReportCapabilities() override;
226 
230  vtkTypeBool IsDirect() override;
231 
237  void SetForceMakeCurrent() override;
238 
243  vtkTypeBool GetEventPending() override;
244 
246 
249  virtual void SetupPalette(void* hDC);
250  virtual void SetupPixelFormat(void* hDC, void* dwFlags, int debug, int bpp = 16, int zbpp = 16);
252 
256  void Finalize() override;
257 
259 
265  void HideCursor() override;
266  void ShowCursor() override;
267  void SetCursorPosition(int x, int y) override;
269 
273  void SetCurrentCursor(int) override;
274 
279  virtual vtkTypeBool GetViewCreated();
280 
285  virtual vtkTypeBool GetWindowCreated();
286 
288 
291  void SetContextId(void*);
292  void* GetContextId();
293  void* GetGenericContext() override { return this->GetContextId(); }
295 
306  virtual void SetRootWindow(void*);
307 
311  virtual void* GetRootWindow();
312 
323  void SetWindowId(void*) override;
324 
328  virtual void* GetWindowId();
329  void* GetGenericWindowId() override { return this->GetWindowId(); }
330 
337  void SetParentId(void* nsview) override;
338 
344  virtual void* GetParentId();
345  void* GetGenericParentId() override { return this->GetParentId(); }
346 
357  void SetWantsBestResolution(bool wantsBest);
358  bool GetWantsBestResolution();
359 
366  void SetConnectContextToNSView(bool connect);
367  bool GetConnectContextToNSView();
368 
370 
373  void SetPixelFormat(void* pixelFormat);
374  void* GetPixelFormat();
376 
378 
385  void PushContext() override;
386  void PopContext() override;
388 
389  void Render() override;
390 
391 protected:
393  ~vtkCocoaRenderWindow() override;
394 
395  std::stack<void*> ContextStack;
396 
397  void CreateGLContext();
398 
399  void CreateAWindow() override;
400  void DestroyWindow() override;
402 
404 
408  void SetCocoaManager(void* manager);
409  void* GetCocoaManager();
411 
412  void SetCocoaServer(void* server); // Really a vtkCocoaServer*
413  void* GetCocoaServer();
414 
415 private:
417  void operator=(const vtkCocoaRenderWindow&) = delete;
418 
419 private:
420  // Important: this class cannot contain Objective-C instance
421  // variables for 2 reasons:
422  // 1) C++ files include this header
423  // 2) because of garbage collection (the GC scanner does not scan objects create by C++'s new)
424  // Instead, use the CocoaManager dictionary to keep a collection
425  // of what would otherwise be Objective-C instance variables.
426  void* CocoaManager; // Really an NSMutableDictionary*
427 
428  vtkTypeBool WindowCreated;
429  vtkTypeBool ViewCreated;
430  vtkTypeBool CursorHidden;
431 
432  vtkTypeBool ForceMakeCurrent;
433 
434  bool WantsBestResolution;
435  bool ConnectContextToNSView;
436 
437  int DisplayIndex = 0;
438 };
439 
440 VTK_ABI_NAMESPACE_END
441 #endif
OpenGL rendering window.
virtual void SetForceMakeCurrent()
If called, allow MakeCurrent() to skip cache-check when called.
std::stack< void * > ContextStack
void * GetGenericDrawable() override
Dummy stubs for vtkWindow API.
virtual void SetFullScreen(vtkTypeBool)
Turn on/off rendering full screen window size.
virtual void WindowRemap()
Remap the rendering window.
virtual void HideCursor()
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
void Render() override
Handle opengl specific code and calls superclass.
Cocoa OpenGL rendering window.
static vtkRenderWindow * New()
Construct an instance of vtkRenderWindow with its screen size set to 300x300, borders turned on...
bool InitializeFromCurrentContext() override
Initialize the render window from the information associated with the currently activated OpenGL cont...
void SetWindowInfo(const char *) override
Dummy stubs for vtkWindow API.
virtual void SetCurrentCursor(int)
Change the shape of the cursor.
virtual bool IsCurrent()
Tells if this window is the current graphics context for the calling thread.
virtual void Finalize()
Finalize the rendering process.
void SetNextWindowId(void *) override
Dummy stubs for vtkWindow API.
void SetParentId(void *) override
Dummy stubs for vtkWindow API.
int vtkTypeBool
Definition: vtkABI.h:64
virtual void SetStereoCapableWindow(vtkTypeBool capable)
Prescribe that the window be created in a stereo-capable mode.
void SetDisplayId(void *displayId) override
Set the index of the NSScreen on which the window should be created.
void SetPosition(int a[2]) override
Set the position (x and y) of the rendering window in screen coordinates (in pixels).
virtual void SetSize(int width, int height)
Set the size (width and height) of the rendering window in screen coordinates (in pixels)...
void SetWindowId(void *) override
Dummy stubs for vtkWindow API.
a simple class to control print indentation
Definition: vtkIndent.h:28
virtual void DestroyWindow()=0
Destroy a not-off-screen window.
void Start() override
Begin the rendering process.
virtual void ShowCursor()
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
void * GetGenericDisplayId() override
Dummy stubs for vtkWindow API.
void * GetGenericContext() override
Accessors for the OpenGL context (Really an NSOpenGLContext*).
virtual int * GetScreenSize()
Get the current size of the screen in pixels.
Definition: vtkWindow.h:94
virtual void SetCursorPosition(int, int)
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
virtual void Initialize()
Initialize the rendering window.
virtual void MakeCurrent()
Make the window current.
Definition: vtkWindow.h:235
virtual void PushContext()
Ability to push and pop this window's context as the current context.
#define VTK_SIZEHINT(...)
const char * ReportCapabilities() override
Get report of capabilities for the render window.
void Frame() override
A termination method performed at the end of the rendering process to do things like swapping buffers...
virtual int * GetSize()
Get the size (width and height) of the rendering window in screen coordinates (in pixels)...
virtual vtkTypeBool GetEventPending()
Check to see if a mouse button has been pressed.
virtual void ReleaseCurrent()
Release the current context.
Definition: vtkWindow.h:241
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void * GetGenericParentId() override
Dummy stubs for vtkWindow API.
void SetSize(int a[2]) override
Set the size (width and height) of the rendering window in screen coordinates (in pixels)...
bool GetPlatformSupportsRenderWindowSharing() override
Does this platform support render window data sharing.
void SetParentInfo(const char *) override
Dummy stubs for vtkWindow API.
virtual void CreateAWindow()=0
Create a not-off-screen window.
virtual vtkTypeBool IsDirect()
Is this render window using hardware acceleration? 0-false, 1-true.
void * GetGenericWindowId() override
Dummy stubs for vtkWindow API.