Ember
Loading...
Searching...
No Matches
ProportionalLayout.cpp
Go to the documentation of this file.
2
3#include <algorithm>
4
5namespace EmberUI {
6
7void ProportionalLayout::Track(const wxString &paneName, double proportion, double minProportion, bool isWidth) {
8 for (auto &e : m_entries) {
9 if (e.paneName == paneName) {
10 e.proportion = proportion;
11 e.minProportion = minProportion;
12 e.isWidth = isWidth;
13 return;
14 }
15 }
16 m_entries.push_back({paneName, proportion, minProportion, isWidth});
17}
18
19void ProportionalLayout::HandleResize(wxAuiManager *mgr, const wxSize &oldClientSize, const wxSize &newClientSize) {
20 if (!mgr || newClientSize.x <= 0 || newClientSize.y <= 0)
21 return;
22
23 for (auto &entry : m_entries) {
24 wxAuiPaneInfo &pane = mgr->GetPane(entry.paneName);
25 if (!pane.IsOk() || !pane.IsShown())
26 continue;
27
28 if (entry.isWidth) {
29 int oldRef = oldClientSize.x;
30 int newRef = newClientSize.x;
31
32 if (oldRef > 0 && pane.rect.width > 0) {
33 entry.proportion = static_cast<double>(pane.rect.width) / oldRef;
34 }
35
36 int newSize = static_cast<int>(newRef * entry.proportion);
37 int minSize = static_cast<int>(newRef * entry.minProportion);
38 newSize = std::max(newSize, minSize);
39
40 pane.BestSize(wxSize(newSize, -1));
41 pane.MinSize(wxSize(minSize, -1));
42 } else {
43 int oldRef = oldClientSize.y;
44 int newRef = newClientSize.y;
45
46 if (oldRef > 0 && pane.rect.height > 0) {
47 entry.proportion = static_cast<double>(pane.rect.height) / oldRef;
48 }
49
50 int newSize = static_cast<int>(newRef * entry.proportion);
51 int minSize = static_cast<int>(newRef * entry.minProportion);
52 newSize = std::max(newSize, minSize);
53
54 pane.BestSize(wxSize(-1, newSize));
55 pane.MinSize(wxSize(-1, minSize));
56 }
57 }
58}
59
60} // namespace EmberUI
std::vector< PaneEntry > m_entries
void HandleResize(wxAuiManager *mgr, const wxSize &oldClientSize, const wxSize &newClientSize)
Updates pane sizes when the managed window is resized.
void Track(const wxString &paneName, double proportion, double minProportion, bool isWidth)
Registers a pane to track with given proportion and constraints.
Definition Panel.h:8