Open3D (C++ API)  0.17.0
Layout.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2023 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
11
12namespace open3d {
13namespace visualization {
14namespace gui {
15
16struct Margins {
17 int left;
18 int top;
19 int right;
20 int bottom;
21
28 Margins(); // all values zero
29 Margins(int px);
30 Margins(int horiz_px, int vert_px);
31 Margins(int left_px, int top_px, int right_px, int bottom_px);
32
34 int GetHoriz() const;
36 int GetVert() const;
37};
38
41class Layout1D : public Widget {
42 using Super = Widget;
43
44public:
45 enum Dir { VERT, HORIZ };
46
47 static void debug_PrintPreferredSizes(Layout1D* layout,
49 const Constraints& constraints,
50 int depth = 0);
51
54 Layout1D(Dir dir,
55 int spacing,
56 const Margins& margins,
57 const std::vector<std::shared_ptr<Widget>>& children);
58 virtual ~Layout1D();
59
60 int GetSpacing() const;
61 const Margins& GetMargins() const;
64 void SetSpacing(int spacing);
67 void SetMargins(const Margins& margins);
68
70 const Constraints& constraints) const override;
71 void Layout(const LayoutContext& context) override;
72
74 void AddFixed(int size);
79 void AddStretch();
80
81public:
82 class Fixed : public Widget {
83 public:
84 Fixed(int size, Dir dir);
86 const Constraints& constraints) const override;
87
88 private:
89 int size_;
90 Dir dir_;
91 };
92
93 class Stretch : public Widget {
94 Size CalcPreferredSize(const LayoutContext& context,
95 const Constraints& constraints) const override;
96 };
97
98protected:
99 int GetMinorAxisPreferredSize() const;
101
103 std::vector<std::shared_ptr<Widget>> GetVisibleChildren() const;
104
105private:
106 struct Impl;
107 std::unique_ptr<Impl> impl_;
108};
109
111class Vert : public Layout1D {
112public:
113 static std::shared_ptr<Layout1D::Fixed> MakeFixed(int size);
114 static std::shared_ptr<Layout1D::Stretch> MakeStretch();
115
116 Vert();
119 Vert(int spacing, const Margins& margins = Margins());
120 Vert(int spacing,
121 const Margins& margins,
122 const std::vector<std::shared_ptr<Widget>>& children);
123 virtual ~Vert();
124
125 int GetPreferredWidth() const;
126 void SetPreferredWidth(int w);
127};
128
132class CollapsableVert : public Vert {
133 using Super = Vert;
134
135public:
136 CollapsableVert(const char* text);
137 CollapsableVert(const char* text,
138 int spacing,
139 const Margins& margins = Margins());
140 virtual ~CollapsableVert();
141
146 void SetIsOpen(bool is_open);
147
149 bool GetIsOpen();
150
151 FontId GetFontId() const;
152 void SetFontId(FontId font_id);
153
155 const Constraints& constraints) const override;
156 void Layout(const LayoutContext& context) override;
158
159private:
160 struct Impl;
161 std::unique_ptr<Impl> impl_;
162};
163
165class ScrollableVert : public Vert {
166 using Super = Vert;
167
168public:
170 ScrollableVert(int spacing, const Margins& margins = Margins());
171 ScrollableVert(int spacing,
172 const Margins& margins,
173 const std::vector<std::shared_ptr<Widget>>& children);
174 virtual ~ScrollableVert();
175
177
178private:
179 struct Impl;
180 std::unique_ptr<Impl> impl_;
181};
182
184class Horiz : public Layout1D {
185public:
186 static std::shared_ptr<Layout1D::Fixed> MakeFixed(int size);
187 static std::shared_ptr<Layout1D::Stretch> MakeStretch();
188 static std::shared_ptr<Horiz> MakeCentered(std::shared_ptr<Widget> w);
189
190 Horiz();
193 Horiz(int spacing, const Margins& margins = Margins());
194 Horiz(int spacing,
195 const Margins& margins,
196 const std::vector<std::shared_ptr<Widget>>& children);
197 ~Horiz();
198
199 int GetPreferredHeight() const;
200 void SetPreferredHeight(int h);
201};
202
206class VGrid : public Widget {
207 using Super = Widget;
208
209public:
210 VGrid(int num_cols, int spacing = 0, const Margins& margins = Margins());
211 virtual ~VGrid();
212
213 int GetSpacing() const;
214 const Margins& GetMargins() const;
215
216 int GetPreferredWidth() const;
217 void SetPreferredWidth(int w);
218
220 const Constraints& constraints) const override;
221 void Layout(const LayoutContext& context) override;
222
223private:
224 struct Impl;
225 std::unique_ptr<Impl> impl_;
226};
227
228} // namespace gui
229} // namespace visualization
230} // namespace open3d
ImGuiContext * context
Definition: Window.cpp:76
FontId GetFontId() const
Definition: Layout.cpp:401
CollapsableVert(const char *text)
Definition: Layout.cpp:382
void SetFontId(FontId font_id)
Definition: Layout.cpp:403
virtual ~CollapsableVert()
Definition: Layout.cpp:395
bool GetIsOpen()
Returns true if open and false if collapsed.
Definition: Layout.cpp:399
void Layout(const LayoutContext &context) override
Definition: Layout.cpp:429
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition: Layout.cpp:405
void SetIsOpen(bool is_open)
Definition: Layout.cpp:397
Widget::DrawResult Draw(const DrawContext &context) override
Definition: Layout.cpp:444
Lays out widgets horizontally.
Definition: Layout.h:184
static std::shared_ptr< Horiz > MakeCentered(std::shared_ptr< Widget > w)
Definition: Layout.cpp:533
int GetPreferredHeight() const
Definition: Layout.cpp:552
Horiz()
Definition: Layout.cpp:540
void SetPreferredHeight(int h)
Definition: Layout.cpp:553
static std::shared_ptr< Layout1D::Stretch > MakeStretch()
Definition: Layout.cpp:529
~Horiz()
Definition: Layout.cpp:550
static std::shared_ptr< Layout1D::Fixed > MakeFixed(int size)
Definition: Layout.cpp:525
Fixed(int size, Dir dir)
Definition: Layout.cpp:177
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
Layout1D(Dir dir, int spacing, const Margins &margins, const std::vector< std::shared_ptr< Widget > > &children)
Definition: Layout.cpp:193
virtual ~Layout1D()
Definition: Layout.cpp:203
@ VERT
Definition: Layout.h:45
@ HORIZ
Definition: Layout.h:45
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:165
Widget::DrawResult Draw(const DrawContext &context) override
Definition: Layout.cpp:504
ScrollableVert()
Definition: Layout.cpp:487
virtual ~ScrollableVert()
Definition: Layout.cpp:502
Definition: Layout.h:206
virtual ~VGrid()
Definition: Layout.cpp:572
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition: Layout.cpp:580
VGrid(int num_cols, int spacing=0, const Margins &margins=Margins())
Definition: Layout.cpp:563
const Margins & GetMargins() const
Definition: Layout.cpp:575
void Layout(const LayoutContext &context) override
Definition: Layout.cpp:605
void SetPreferredWidth(int w)
Definition: Layout.cpp:578
int GetSpacing() const
Definition: Layout.cpp:574
int GetPreferredWidth() const
Definition: Layout.cpp:577
Lays out widgets vertically.
Definition: Layout.h:111
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
Definition: Widget.h:49
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:19
int bottom
Definition: Layout.h:20
int GetVert() const
Convenience function that returns top + bottom.
Definition: Layout.cpp:120
Margins()
Definition: Layout.cpp:111
int left
Definition: Layout.h:17
int top
Definition: Layout.h:18
int GetHoriz() const
Convenience function that returns left + right.
Definition: Layout.cpp:118
Definition: Layout.cpp:556