Open3D (C++ API)  0.19.0
Window.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.open3d.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <functional>
11 #include <memory>
12 #include <string>
13 
20 
21 namespace open3d {
22 namespace visualization {
23 namespace gui {
24 
25 class Dialog;
26 class Menu;
27 class Renderer;
28 struct Theme;
29 
30 class Window {
31  friend class Application;
32  friend class Renderer;
33 
34 public:
35  static const int FLAG_HIDDEN;
36  static const int FLAG_TOPMOST;
37 
41  explicit Window(const std::string& title, int flags = 0);
42 
46  Window(const std::string& title,
47  int width,
48  int height,
49  int flags = 0); // centered
50 
54  Window(const std::string& title,
55  int x,
56  int y,
57  int width,
58  int height,
59  int flags = 0);
60  virtual ~Window();
61 
62  const Theme& GetTheme() const;
64 
67  Rect GetOSFrame() const;
70  void SetOSFrame(const Rect& r);
71 
72  const char* GetTitle() const;
73  void SetTitle(const char* title);
74 
77  void SizeToFit();
78 
80  void SetSize(const Size& size);
83  Size GetSize() const;
86  Rect GetContentRect() const;
88  float GetScaling() const;
90  Point GlobalToWindowCoord(int global_x, int global_y);
91 
92  bool IsVisible() const;
93  void Show(bool vis = true);
96  void Close();
97 
99  void SetNeedsLayout();
102  void PostRedraw();
103 
104  void SetTopmost(bool topmost);
105  void RaiseToTop() const;
106 
107  bool IsActiveWindow() const;
108 
110  void SetFocusWidget(Widget* w);
111 
112  void AddChild(std::shared_ptr<Widget> w);
113 
118  std::function<void()> callback);
119 
123  void SetOnTickEvent(std::function<bool()> callback);
124 
128  void SetOnClose(std::function<bool()> callback);
129 
133  void SetOnKeyEvent(std::function<bool(const KeyEvent&)> callback);
134 
137  void ShowDialog(std::shared_ptr<Dialog> dlg);
139  void CloseDialog();
140 
141  void ShowMessageBox(const char* title, const char* message);
142 
144  void SetClipboardText(const std::string& text);
145 
148  void DestroyWindow();
149 
150  // Override to handle menu items
151  virtual void OnMenuItemSelected(Menu::ItemId item_id);
152 
153  // Override to handle drag and drop on the windows.
154  virtual void OnDragDropped(const char* path);
155 
156  // Shows or hides the menubar, except on macOS when using real windows.
157  // This is intended to be used when using HeadlessWindowSystem but may
158  // be useful in other circumstances.
159  void ShowMenu(bool show);
160 
161  int GetMouseMods() const; // internal, for WindowSystem
162 
166  std::string GetWebRTCUID() const;
167 
168 protected:
174  virtual Size CalcPreferredSize();
175 
179  virtual void Layout(const LayoutContext& context);
180 
182 
183  const std::vector<std::shared_ptr<Widget>>& GetChildren() const;
184 
185 public:
186  // these are intended for internal delivery of events
187  void OnDraw();
188  void OnResize();
189  void OnMouseEvent(const MouseEvent& e);
190  void OnKeyEvent(const KeyEvent& e);
191  void OnTextInput(const TextInputEvent& e);
192  void OnTickEvent(const TickEvent& e);
193 
195 
196 private:
197  void CreateRenderer();
198  Widget::DrawResult DrawOnce(bool is_layout_pass);
199  void* MakeDrawContextCurrent() const;
200  void RestoreDrawContext(void* old_context) const;
201 
202 private:
203  struct Impl;
204  std::unique_ptr<Impl> impl_;
205 };
206 
207 } // namespace gui
208 } // namespace visualization
209 } // namespace open3d
std::function< void(std::shared_ptr< core::Tensor >)> callback
Definition: FilamentRenderer.cpp:301
ImGuiContext * context
Definition: Window.cpp:99
Definition: Application.h:40
int ItemId
Definition: MenuBase.h:28
Definition: Widget.h:49
DrawResult
Definition: Widget.h:95
Definition: Window.h:30
WindowSystem::OSWindow GetOSWindow() const
Definition: Window.cpp:738
void SetOnMenuItemActivated(Menu::ItemId item_id, std::function< void()> callback)
Definition: Window.cpp:634
const Theme & GetTheme() const
Definition: Window.cpp:477
void OnMouseEvent(const MouseEvent &e)
Definition: Window.cpp:1117
void CloseDialog()
Closes the dialog.
Definition: Window.cpp:680
void SetTitle(const char *title)
Definition: Window.cpp:498
void SetOnKeyEvent(std::function< bool(const KeyEvent &)> callback)
Definition: Window.cpp:647
void PostRedraw()
Definition: Window.cpp:605
LayoutContext GetLayoutContext()
Definition: Window.cpp:716
void SetOnClose(std::function< bool()> callback)
Definition: Window.cpp:643
void AddChild(std::shared_ptr< Widget > w)
Definition: Window.cpp:629
const char * GetTitle() const
Definition: Window.cpp:496
void SetOSFrame(const Rect &r)
Definition: Window.cpp:490
std::string GetWebRTCUID() const
Definition: Window.cpp:450
friend class Renderer
Definition: Window.h:32
void ShowMessageBox(const char *title, const char *message)
Definition: Window.cpp:693
void ShowDialog(std::shared_ptr< Dialog > dlg)
Definition: Window.cpp:651
virtual void Layout(const LayoutContext &context)
Definition: Window.cpp:718
virtual void OnDragDropped(const char *path)
Definition: Window.cpp:1307
Size GetSize() const
Definition: Window.cpp:553
virtual Size CalcPreferredSize()
Definition: Window.cpp:507
int GetMouseMods() const
Definition: Window.cpp:448
void SetSize(const Size &size)
Sets the size of the window in pixels. Includes menubar on Linux.
Definition: Window.cpp:540
static const int FLAG_HIDDEN
Definition: Window.h:35
void Show(bool vis=true)
Definition: Window.cpp:586
visualization::rendering::Renderer & GetRenderer() const
Definition: Window.cpp:479
void OnResize()
Definition: Window.cpp:1041
Rect GetOSFrame() const
Definition: Window.cpp:483
void Close()
Definition: Window.cpp:591
Point GlobalToWindowCoord(int global_x, int global_y)
Returns the global point (in OS pixels) in window local coordinates.
Definition: Window.cpp:575
void RaiseToTop() const
Definition: Window.cpp:617
const std::vector< std::shared_ptr< Widget > > & GetChildren() const
Definition: Window.cpp:463
void OnDraw()
Definition: Window.cpp:1010
void SetClipboardText(const std::string &text)
Copies text to the system clipboard.
Definition: Window.cpp:706
void SetNeedsLayout()
Instructs the window to relayout before the next draw.
Definition: Window.cpp:603
void DestroyWindow()
Definition: Window.cpp:441
bool IsVisible() const
Definition: Window.cpp:581
void OnTickEvent(const TickEvent &e)
Definition: Window.cpp:1287
bool IsActiveWindow() const
Definition: Window.cpp:622
void SetOnTickEvent(std::function< bool()> callback)
Definition: Window.cpp:639
static const int FLAG_TOPMOST
Definition: Window.h:36
float GetScaling() const
Returns the scaling factor from OS pixels to device pixels.
Definition: Window.cpp:570
virtual void OnMenuItemSelected(Menu::ItemId item_id)
Definition: Window.cpp:730
Rect GetContentRect() const
Definition: Window.cpp:558
void SetFocusWidget(Widget *w)
Sets.
Definition: Window.cpp:627
Window(const std::string &title, int flags=0)
Definition: Window.cpp:265
void ShowMenu(bool show)
Definition: Window.cpp:711
void OnTextInput(const TextInputEvent &e)
Definition: Window.cpp:1278
virtual ~Window()
Definition: Window.cpp:432
void SizeToFit()
Definition: Window.cpp:532
void OnKeyEvent(const KeyEvent &e)
Definition: Window.cpp:1237
void * OSWindow
Definition: WindowSystem.h:29
int width
Definition: FilePCD.cpp:52
int size
Definition: FilePCD.cpp:40
int height
Definition: FilePCD.cpp:53
Definition: PinholeCameraIntrinsic.cpp:16
Definition: Events.h:203
Definition: Theme.h:20