MaterialX 1.38.2
WindowWrapper.h
1//
2// TM & (c) 2017 Lucasfilm Entertainment Company Ltd. and Lucasfilm Ltd.
3// All rights reserved. See LICENSE.txt for license.
4//
5
6#ifndef MATERIALX_WINDOWWRAPPER_H
7#define MATERIALX_WINDOWWRAPPER_H
8
9#if defined(_WIN32)
10#define WIN32_LEAN_AND_MEAN
11#include <windows.h>
12#elif defined(__linux__)
13#include <X11/X.h> // for Window
14#include <X11/Xlib.h> // for Display
15using Widget = struct _WidgetRec*;
16#endif
17
18#include <memory>
19
20namespace MaterialX
21{
23#if defined(_WIN32)
25using ExternalWindowHandle = HWND;
27using InternalWindowHandle = HDC;
29using DisplayHandle = void*;
30#elif defined(__linux__)
32using ExternalWindowHandle = Widget;
34using InternalWindowHandle = Window;
36using DisplayHandle = Display*;
38using Widget = struct _WidgetRec*;
39#elif defined(__APPLE__)
41using ExternalWindowHandle = void*;
43using InternalWindowHandle = void*;
45using DisplayHandle = void*;
46#else
47using Widget = void*;
48using ExternalWindowHandle = void*;
49using InternalWindowHandle = void*;
50using DisplayHandle = void*;
51#endif
52
54using WindowWrapperPtr = std::shared_ptr<class WindowWrapper>;
55
61{
62 public:
64 static WindowWrapperPtr create(ExternalWindowHandle externalHandle = {},
65 InternalWindowHandle internalHandle = {},
66 DisplayHandle display = {});
67
68 // Default destructor
69 virtual ~WindowWrapper();
70
72 ExternalWindowHandle externalHandle() const
73 {
74 return _externalHandle;
75 }
76
78 InternalWindowHandle internalHandle() const
79 {
80 return _internalHandle;
81 }
82
85 bool isValid() const
86 {
87 return _internalHandle != 0;
88 }
89
91 void release();
92
93#if defined(__linux__)
95 Display* getXDisplay() const
96 {
97 return _xDisplay;
98 }
99#endif
100
101 protected:
102 WindowWrapper(ExternalWindowHandle externalHandle,
103 InternalWindowHandle internalHandle,
104 DisplayHandle display);
105
106 protected:
107 ExternalWindowHandle _externalHandle;
108 InternalWindowHandle _internalHandle;
109
110#if defined(__linux__)
112 Window _framebufferWindow;
114 Display* _xDisplay;
115#endif
116};
117
118} // namespace MaterialX
119
120#endif
Generic wrapper for encapsulating a "window" construct.
Definition: WindowWrapper.h:61
void release()
Release resources stored in wrapper.
bool isValid() const
Check that there is a valid OS handle set.
Definition: WindowWrapper.h:85
static WindowWrapperPtr create(ExternalWindowHandle externalHandle={}, InternalWindowHandle internalHandle={}, DisplayHandle display={})
Create a new WindowWrapper.
Definition: WindowWrapper.cpp:110
ExternalWindowHandle externalHandle() const
Return "external" handle.
Definition: WindowWrapper.h:72
InternalWindowHandle internalHandle() const
Return "internal" handle.
Definition: WindowWrapper.h:78