Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
Layout.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 <string>
11
13
14namespace open3d {
15namespace visualization {
16namespace gui {
17
18struct Margins {
19 int left;
20 int top;
21 int right;
22 int bottom;
23
30 Margins(); // all values zero
31 Margins(int px);
32 Margins(int horiz_px, int vert_px);
33 Margins(int left_px, int top_px, int right_px, int bottom_px);
34
36 int GetHoriz() const;
38 int GetVert() const;
39};
40
43class Layout1D : public Widget {
44 using Super = Widget;
45
46public:
47 enum Dir { VERT, HORIZ };
48
49 static void debug_PrintPreferredSizes(Layout1D* layout,
51 const Constraints& constraints,
52 int depth = 0);
53
56 Layout1D(Dir dir,
57 int spacing,
58 const Margins& margins,
59 const std::vector<std::shared_ptr<Widget>>& children);
60 virtual ~Layout1D();
61
62 int GetSpacing() const;
63 const Margins& GetMargins() const;
66 void SetSpacing(int spacing);
69 void SetMargins(const Margins& margins);
70
72 const Constraints& constraints) const override;
73 void Layout(const LayoutContext& context) override;
74
76 void AddFixed(int size);
81 void AddStretch();
82
83public:
84 class Fixed : public Widget {
85 public:
86 Fixed(int size, Dir dir);
88 const Constraints& constraints) const override;
89
90 private:
91 int size_;
92 Dir dir_;
93 };
94
95 class Stretch : public Widget {
96 Size CalcPreferredSize(const LayoutContext& context,
97 const Constraints& constraints) const override;
98 };
99
100protected:
101 int GetMinorAxisPreferredSize() const;
103
105 std::vector<std::shared_ptr<Widget>> GetVisibleChildren() const;
106
107private:
108 struct Impl;
109 std::unique_ptr<Impl> impl_;
110};
111
113class Vert : public Layout1D {
114public:
115 static std::shared_ptr<Layout1D::Fixed> MakeFixed(int size);
116 static std::shared_ptr<Layout1D::Stretch> MakeStretch();
117
118 Vert();
121 Vert(int spacing, const Margins& margins = Margins());
122 Vert(int spacing,
123 const Margins& margins,
124 const std::vector<std::shared_ptr<Widget>>& children);
125 virtual ~Vert();
126
127 int GetPreferredWidth() const;
128 void SetPreferredWidth(int w);
129};
130
134class CollapsableVert : public Vert {
135 using Super = Vert;
136
137public:
138 CollapsableVert(const char* text);
139 CollapsableVert(const char* text,
140 int spacing,
141 const Margins& margins = Margins());
142 virtual ~CollapsableVert();
143
148 void SetIsOpen(bool is_open);
149
151 bool GetIsOpen();
152
153 void SetText(const char* text);
154 std::string GetText() const;
155
156 FontId GetFontId() const;
157 void SetFontId(FontId font_id);
158
160 const Constraints& constraints) const override;
161 void Layout(const LayoutContext& context) override;
163
164private:
165 struct Impl;
166 std::unique_ptr<Impl> impl_;
167};
168
170class ScrollableVert : public Vert {
171 using Super = Vert;
172
173public:
175 ScrollableVert(int spacing, const Margins& margins = Margins());
176 ScrollableVert(int spacing,
177 const Margins& margins,
178 const std::vector<std::shared_ptr<Widget>>& children);
179 virtual ~ScrollableVert();
180
182
183private:
184 struct Impl;
185 std::unique_ptr<Impl> impl_;
186};
187
189class Horiz : public Layout1D {
190public:
191 static std::shared_ptr<Layout1D::Fixed> MakeFixed(int size);
192 static std::shared_ptr<Layout1D::Stretch> MakeStretch();
193 static std::shared_ptr<Horiz> MakeCentered(std::shared_ptr<Widget> w);
194
195 Horiz();
198 Horiz(int spacing, const Margins& margins = Margins());
199 Horiz(int spacing,
200 const Margins& margins,
201 const std::vector<std::shared_ptr<Widget>>& children);
202 ~Horiz();
203
204 int GetPreferredHeight() const;
205 void SetPreferredHeight(int h);
206};
207
211class VGrid : public Widget {
212 using Super = Widget;
213
214public:
215 VGrid(int num_cols, int spacing = 0, const Margins& margins = Margins());
216 virtual ~VGrid();
217
218 int GetSpacing() const;
219 const Margins& GetMargins() const;
220
221 int GetPreferredWidth() const;
222 void SetPreferredWidth(int w);
223
225 const Constraints& constraints) const override;
226 void Layout(const LayoutContext& context) override;
227
228private:
229 struct Impl;
230 std::unique_ptr<Impl> impl_;
231};
232
233} // namespace gui
234} // namespace visualization
235} // namespace open3d
ImGuiContext * context
Definition Window.cpp:76
void SetText(const char *text)
Definition Layout.cpp:398
FontId GetFontId() const
Definition Layout.cpp:407
void SetFontId(FontId font_id)
Definition Layout.cpp:409
virtual ~CollapsableVert()
Definition Layout.cpp:392
bool GetIsOpen()
Returns true if open and false if collapsed.
Definition Layout.cpp:396
void Layout(const LayoutContext &context) override
Definition Layout.cpp:435
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition Layout.cpp:411
void SetIsOpen(bool is_open)
Definition Layout.cpp:394
std::string GetText() const
Definition Layout.cpp:405
Widget::DrawResult Draw(const DrawContext &context) override
Definition Layout.cpp:450
Lays out widgets horizontally.
Definition Layout.h:189
static std::shared_ptr< Horiz > MakeCentered(std::shared_ptr< Widget > w)
Definition Layout.cpp:539
int GetPreferredHeight() const
Definition Layout.cpp:558
Horiz()
Definition Layout.cpp:546
void SetPreferredHeight(int h)
Definition Layout.cpp:559
static std::shared_ptr< Layout1D::Stretch > MakeStretch()
Definition Layout.cpp:535
~Horiz()
Definition Layout.cpp:556
static std::shared_ptr< Layout1D::Fixed > MakeFixed(int size)
Definition Layout.cpp:531
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition Layout.cpp:179
const Margins & GetMargins() const
Definition Layout.cpp:206
int GetSpacing() const
Definition Layout.cpp:205
void SetMargins(const Margins &margins)
Definition Layout.cpp:218
static void debug_PrintPreferredSizes(Layout1D *layout, const LayoutContext &context, const Constraints &constraints, int depth=0)
Definition Layout.cpp:130
Margins & GetMutableMargins()
Definition Layout.cpp:207
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition Layout.cpp:234
void AddStretch()
Definition Layout.cpp:232
void SetSpacing(int spacing)
Definition Layout.cpp:217
virtual ~Layout1D()
Definition Layout.cpp:203
@ VERT
Definition Layout.h:47
@ HORIZ
Definition Layout.h:47
void Layout(const LayoutContext &context) override
Definition Layout.cpp:258
std::vector< std::shared_ptr< Widget > > GetVisibleChildren() const
Definition Layout.cpp:208
void SetMinorAxisPreferredSize(int size)
Definition Layout.cpp:228
void AddFixed(int size)
Adds a fixed number of pixels after the previously added widget.
Definition Layout.cpp:220
int GetMinorAxisPreferredSize() const
Definition Layout.cpp:224
This a vertical layout that scrolls if it is smaller than its contents.
Definition Layout.h:170
Widget::DrawResult Draw(const DrawContext &context) override
Definition Layout.cpp:510
ScrollableVert()
Definition Layout.cpp:493
virtual ~ScrollableVert()
Definition Layout.cpp:508
Definition Layout.h:211
virtual ~VGrid()
Definition Layout.cpp:578
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition Layout.cpp:586
const Margins & GetMargins() const
Definition Layout.cpp:581
void Layout(const LayoutContext &context) override
Definition Layout.cpp:611
void SetPreferredWidth(int w)
Definition Layout.cpp:584
int GetSpacing() const
Definition Layout.cpp:580
int GetPreferredWidth() const
Definition Layout.cpp:583
Lays out widgets vertically.
Definition Layout.h:113
static std::shared_ptr< Layout1D::Stretch > MakeStretch()
Definition Layout.cpp:355
Vert()
Definition Layout.cpp:359
static std::shared_ptr< Layout1D::Fixed > MakeFixed(int size)
Definition Layout.cpp:351
void SetPreferredWidth(int w)
Definition Layout.cpp:372
int GetPreferredWidth() const
Definition Layout.cpp:371
virtual ~Vert()
Definition Layout.cpp:369
Widget()
Definition Widget.cpp:34
DrawResult
Definition Widget.h:95
int size
Definition FilePCD.cpp:40
unsigned int FontId
Definition Gui.h:68
Definition PinholeCameraIntrinsic.cpp:16
int right
Definition Layout.h:21
int bottom
Definition Layout.h:22
int GetVert() const
Convenience function that returns top + bottom.
Definition Layout.cpp:120
Margins()
Definition Layout.cpp:111
int left
Definition Layout.h:19
int top
Definition Layout.h:20
int GetHoriz() const
Convenience function that returns left + right.
Definition Layout.cpp:118