VTK  9.3.20240418
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 "vtkWrappingHints.h" // For VTK_MARSHALAUTO
36 #include <stack> // for ivar
37 
38 VTK_ABI_NAMESPACE_BEGIN
39 class VTKRENDERINGOPENGL2_EXPORT VTK_MARSHALAUTO vtkCocoaRenderWindow : public vtkOpenGLRenderWindow
40 {
41 public:
44  void PrintSelf(ostream& os, vtkIndent indent) override;
45 
49  void Start() override;
50 
54  void Frame() override;
55 
59  virtual void WindowConfigure();
60 
69  void Initialize() override;
70 
77  void SetFullScreen(vtkTypeBool) override;
78 
82  void WindowRemap() override;
83 
88  virtual void PrefFullScreen();
89 
91 
99  void SetSize(int width, int height) override;
100  void SetSize(int a[2]) override { this->SetSize(a[0], a[1]); }
102 
107  int* GetSize() VTK_SIZEHINT(2) override;
108 
110 
115  void SetPosition(int x, int y) override;
116  void SetPosition(int a[2]) override { this->SetPosition(a[0], a[1]); }
118 
123  int* GetScreenSize() VTK_SIZEHINT(2) override;
124 
129  int* GetPosition() VTK_SIZEHINT(2) override;
130 
135  void SetWindowName(const char*) override;
136 
137  void SetNextWindowInfo(const char*) override
138  {
139  vtkDebugMacro("SetNextWindowInfo not implemented (WindowRemap not implemented).");
140  }
141  void* GetGenericDrawable() override
142  {
143  vtkDebugMacro("Method not implemented.");
144  return nullptr;
145  }
146 
154  void SetDisplayId(void* displayId) override
155  {
156  this->DisplayIndex = displayId ? *(reinterpret_cast<int*>(displayId)) : 0;
157  }
158 
159  void* GetGenericDisplayId() override
160  {
161  vtkDebugMacro("Method not implemented.");
162  return nullptr;
163  }
164 
170  void SetWindowInfo(const char*) override;
171 
177  void SetParentInfo(const char*) override;
178 
179  void SetNextWindowId(void*) override
180  {
181  vtkDebugMacro("SetNextWindowId not implemented (WindowRemap not implemented).");
182  }
183 
189 
193  bool GetPlatformSupportsRenderWindowSharing() override { return true; }
194 
201  void SetStereoCapableWindow(vtkTypeBool capable) override;
202 
206  void MakeCurrent() override;
207 
211  void ReleaseCurrent() override;
212 
216  bool IsCurrent() override;
217 
222 
226  const char* ReportCapabilities() override;
227 
231  vtkTypeBool IsDirect() override;
232 
238  void SetForceMakeCurrent() override;
239 
245 
247 
250  virtual void SetupPalette(void* hDC);
251  virtual void SetupPixelFormat(void* hDC, void* dwFlags, int debug, int bpp = 16, int zbpp = 16);
253 
257  void Finalize() override;
258 
260 
266  void HideCursor() override;
267  void ShowCursor() override;
268  void SetCursorPosition(int x, int y) override;
270 
274  void SetCurrentCursor(int) override;
275 
281 
287 
289 
292  void SetContextId(void*);
293  void* GetContextId();
294  void* GetGenericContext() override { return this->GetContextId(); }
296 
307  virtual void SetRootWindow(void*);
308 
312  virtual void* GetRootWindow();
313 
324  void SetWindowId(void*) override;
325 
329  virtual void* GetWindowId();
330  void* GetGenericWindowId() override { return this->GetWindowId(); }
331 
338  void SetParentId(void* nsview) override;
339 
345  virtual void* GetParentId();
346  void* GetGenericParentId() override { return this->GetParentId(); }
347 
358  void SetWantsBestResolution(bool wantsBest);
360 
369 
371 
374  void SetPixelFormat(void* pixelFormat);
375  void* GetPixelFormat();
377 
379 
386  void PushContext() override;
387  void PopContext() override;
389 
390  void Render() override;
391 
392 protected:
395 
396  std::stack<void*> ContextStack;
397 
399 
400  void CreateAWindow() override;
401  void DestroyWindow() override;
403 
405 
409  void SetCocoaManager(void* manager);
412 
413  void SetCocoaServer(void* server); // Really a vtkCocoaServer*
414  void* GetCocoaServer();
415 
416 private:
418  void operator=(const vtkCocoaRenderWindow&) = delete;
419 
420 private:
421  // Important: this class cannot contain Objective-C instance
422  // variables for 2 reasons:
423  // 1) C++ files include this header
424  // 2) because of garbage collection (the GC scanner does not scan objects create by C++'s new)
425  // Instead, use the CocoaManager dictionary to keep a collection
426  // of what would otherwise be Objective-C instance variables.
427  void* CocoaManager; // Really an NSMutableDictionary*
428 
429  vtkTypeBool WindowCreated;
430  vtkTypeBool ViewCreated;
431  vtkTypeBool CursorHidden;
432 
433  vtkTypeBool ForceMakeCurrent;
434 
435  bool WantsBestResolution;
436  bool ConnectContextToNSView;
437 
438  int DisplayIndex = 0;
439 };
440 
441 VTK_ABI_NAMESPACE_END
442 #endif
Cocoa OpenGL rendering window.
virtual void SetRootWindow(void *)
Sets the NSWindow* associated with this vtkRenderWindow.
const char * ReportCapabilities() override
Get report of capabilities for the render window.
void SetWindowInfo(const char *) override
Set this RenderWindow's window id to a pre-existing window.
void SetDisplayId(void *displayId) override
Set the index of the NSScreen on which the window should be created.
int * GetSize() override
Get the size (width and height) of the rendering window in screen coordinates (in pixels).
void SetParentInfo(const char *) override
See the documentation for SetParentId().
void SetSize(int a[2]) override
Set the size (width and height) of the rendering window in screen coordinates (in pixels).
void WindowRemap() override
Remap the window.
void * GetGenericDisplayId() override
Dummy stubs for vtkWindow API.
void SetParentId(void *nsview) override
Set the NSView* for the vtkRenderWindow to be parented within.
void SetCocoaServer(void *server)
void SetCocoaManager(void *manager)
Accessors for the cocoa manager (Really an NSMutableDictionary*).
void SetFullScreen(vtkTypeBool) override
Change the window to fill the entire screen.
void SetCurrentCursor(int) override
Change the shape of the cursor.
void SetCursorPosition(int x, int y) override
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
void SetStereoCapableWindow(vtkTypeBool capable) override
Prescribe that the window be created in a stereo-capable mode.
void PushContext() override
Ability to push and pop this window's context as the current context.
void SetConnectContextToNSView(bool connect)
Set to false if you want to prevent the NSOpenGLContext from being associated with the NSView.
vtkTypeBool GetEventPending() override
Check to see if an event is pending for this window.
void CreateAWindow() override
Create a not-off-screen window.
void * GetGenericWindowId() override
Dummy stubs for vtkWindow API.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void * GetPixelFormat()
Accessors for the pixel format object (Really an NSOpenGLPixelFormat*).
void SetPixelFormat(void *pixelFormat)
Accessors for the pixel format object (Really an NSOpenGLPixelFormat*).
void PopContext() override
Ability to push and pop this window's context as the current context.
void Frame() override
Finish the rendering process.
static vtkCocoaRenderWindow * New()
void Initialize() override
Initialize the window for rendering.
virtual void SetupPixelFormat(void *hDC, void *dwFlags, int debug, int bpp=16, int zbpp=16)
Initialize OpenGL for this window.
void * GetCocoaManager()
Accessors for the cocoa manager (Really an NSMutableDictionary*).
void DestroyWindow() override
Destroy a not-off-screen window.
void * GetGenericContext() override
Accessors for the OpenGL context (Really an NSOpenGLContext*).
void SetWantsBestResolution(bool wantsBest)
Set to true if you want to force NSViews created by this object to have their wantsBestResolutionOpen...
void Finalize() override
Clean up device contexts, rendering contexts, etc.
~vtkCocoaRenderWindow() override
void Start() override
Begin the rendering process.
void ShowCursor() override
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
virtual vtkTypeBool GetWindowCreated()
Get the WindowCreated flag.
bool IsCurrent() override
Tells if this window is the current OpenGL context for the calling thread.
bool GetPlatformSupportsRenderWindowSharing() override
Does this platform support render window data sharing.
int * GetScreenSize() override
Get the current size of the screen in pixels.
void * GetContextId()
Accessors for the OpenGL context (Really an NSOpenGLContext*).
void SetContextId(void *)
Accessors for the OpenGL context (Really an NSOpenGLContext*).
virtual void * GetParentId()
Get the parent NSView* for this vtkRenderWindow.
void SetPosition(int a[2]) override
Set the position (x and y) of the rendering window in screen coordinates (in pixels).
virtual void * GetRootWindow()
Returns the NSWindow* associated with this vtkRenderWindow.
virtual vtkTypeBool GetViewCreated()
Get the ViewCreated flag.
void SetNextWindowId(void *) override
Dummy stubs for vtkWindow API.
void SetSize(int width, int height) override
Set the size (width and height) of the rendering window in screen coordinates (in pixels).
void * GetGenericParentId() override
Dummy stubs for vtkWindow API.
void SetForceMakeCurrent() override
If called, allow MakeCurrent() to skip cache-check when called.
bool GetConnectContextToNSView()
void SetWindowId(void *) override
Sets the NSView* associated with this vtkRenderWindow.
void HideCursor() override
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
bool InitializeFromCurrentContext() override
Initialize the render window from the information associated with the currently activated OpenGL cont...
virtual void * GetWindowId()
Returns the NSView* associated with this vtkRenderWindow.
void MakeCurrent() override
Make this windows OpenGL context the current context.
void Render() override
Ask each renderer owned by this RenderWindow to render its image and synchronize this process.
void UpdateContext()
Update this window's OpenGL context, e.g.
virtual void PrefFullScreen()
Set the preferred window size to full screen.
virtual void SetupPalette(void *hDC)
Initialize OpenGL for this window.
virtual void WindowConfigure()
Specify various window parameters.
void ReleaseCurrent() override
Release the current context.
std::stack< void * > ContextStack
vtkTypeBool IsDirect() override
Is this render window using hardware acceleration? 0-false, 1-true.
void * GetGenericDrawable() override
Dummy stubs for vtkWindow API.
a simple class to control print indentation
Definition: vtkIndent.h:108
OpenGL rendering window.
@ connect
Definition: vtkX3D.h:176
@ height
Definition: vtkX3D.h:254
int vtkTypeBool
Definition: vtkABI.h:64
#define VTK_SIZEHINT(...)
#define VTK_MARSHALAUTO