Difference between revisions of "GridLayout"
m (Bot: Automated text replacement (-<code>[:space:]?<cpp/>(.*?)</code> +<syntaxhighlight lang="cpp">\1</syntaxhighlight>)) |
m (Robot: Cosmetic changes) |
||
(One intermediate revision by the same user not shown) | |||
Line 12: | Line 12: | ||
== Example == | == Example == | ||
The following snippet is an example from the embedded documentation: | The following snippet is an example from the embedded documentation: | ||
− | < | + | <source lang="cpp"> |
// create a new window and its layout manager | // create a new window and its layout manager | ||
CEGUI::Window *wnd = (CEGUI::FrameWindow *)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/FrameWindow", (CEGUI::utf8*)"MyWindow"); | CEGUI::Window *wnd = (CEGUI::FrameWindow *)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/FrameWindow", (CEGUI::utf8*)"MyWindow"); | ||
Line 45: | Line 45: | ||
layout->setOuterMargin(UDim(1.0/256, 0.0)); // adds a margin to the window's whole client area | layout->setOuterMargin(UDim(1.0/256, 0.0)); // adds a margin to the window's whole client area | ||
− | wnd->setMinSize(layout->getMinSize()); | + | wnd->setMinSize(layout->getMinSize()); // asks the layout manager for the window's minimum size |
wnd->setSize(wnd->getMinSize()); | wnd->setSize(wnd->getMinSize()); | ||
− | layout->layout(); | + | layout->layout(); // forces an initial layout |
− | </ | + | </source> |
The resulting window will look like this: | The resulting window will look like this: |
Latest revision as of 23:22, 3 March 2011
Written for CEGUI 0.6
Works with versions 0.6.x (obsolete)
Introduction
It is hard to hard-code a layout that is constantly looking good with different screen resolutions and for different window sizes - especially when dealing with resizable windows. Often, two wdgets are too close together or too far apart. The GridLayout class solves such problems: This class provides a layout manager for CEGUI that lays out a given window according to an invisible grid laid over the window's client area. The size of the grid's cells is changed according to some parameters when the window size changes. The widgets, the client application registers with the layout manager, stick to specific cells and change their size when the cells do. This concept (inspired by Trolltechs Qt) allows for many different and complex window layouts. The header file is documented with doxygen tags.
Questions, remarks, comments, blame, etc. shall be posted within the GridLayout forum thread.
Example
The following snippet is an example from the embedded documentation:
// create a new window and its layout manager CEGUI::Window *wnd = (CEGUI::FrameWindow *)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/FrameWindow", (CEGUI::utf8*)"MyWindow"); GridLayout *layout = new GridLayout(wnd, true); // setting the second parameter to true will // cause self-destruction of the layout manager on destruction of the window CEGUI::Window *btn; btn = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", (CEGUI::utf8*)"Btn1"); btn->setText("1"); layout->addChildWindow(btn, 0, 0, 3, 3, UDim(1.0/512, 0.0)); btn = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", (CEGUI::utf8*)"Btn1"); btn->setText("2"); btn->setMinSize(CEGUI::UVector2(UDim(0.06, 0.0), UDim(0.03, 0.0))); layout->addChildWindow(btn, 2, 0, 1, 1, UDim(1.0/512, 0.0)); btn = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", (CEGUI::utf8*)"Btn1"); btn->setText("3"); btn->setMinSize(CEGUI::UVector2(UDim(0.06, 0.0), UDim(0.03, 0.0))); layout->addChildWindow(btn, 2, 1, 1, 1, UDim(1.0/512, 0.0)); btn = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", (CEGUI::utf8*)"Btn1"); btn->setText("4"); btn->setMinSize(CEGUI::UVector2(UDim(0.06, 0.0), UDim(0.03, 0.0))); layout->addChildWindow(btn, 1, 3, 1, 1, UDim(1.0/512, 0.0)); btn = CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/Button", (CEGUI::utf8*)"Btn1"); btn->setText("5"); btn->setMinSize(CEGUI::UVector2(UDim(0.06, 0.0), UDim(0.03, 0.0))); layout->addChildWindow(btn, 2, 3, 1, 1, UDim(1.0/512, 0.0)); layout->setRowStretch(0, 0); layout->setRowStretch(1, 0); layout->setRowStretch(3, 0); layout->setColStretch(1, 0); layout->setColStretch(2, 0); layout->setOuterMargin(UDim(1.0/256, 0.0)); // adds a margin to the window's whole client area wnd->setMinSize(layout->getMinSize()); // asks the layout manager for the window's minimum size wnd->setSize(wnd->getMinSize()); layout->layout(); // forces an initial layout
The resulting window will look like this:
1 | 2 | |
3 | ||
4 | 5 |
Only the button captioned "1" will resize when resizing the window and when viewing the window with a different resolution, everything will look the same as before
Download
The files are too big to be inlined into this page. You may download them here