/************************************************************************ Configure scroll bars ************************************************************************/ void ScrolledItemListBase::configureScrollbars(const Size& doc_size) { Scrollbar* v = getVertScrollbar(); Scrollbar* h = getHorzScrollbar(); Size render_area_size = getItemRenderArea().getSize(); // setup the pane size float pane_size_w = ceguimax(doc_size.d_width, render_area_size.d_width); UVector2 pane_size(cegui_absdim(pane_size_w), cegui_absdim(doc_size.d_height)); d_pane->setMinSize(pane_size); d_pane->setMaxSize(pane_size); //d_pane->setWindowSize(pane_size); // "fix" scrollbar visibility if (d_forceVScroll || doc_size.d_height > render_area_size.d_height) { v->show(); } else { v->hide(); } //render_area_size = getItemRenderArea().getSize(); if (d_forceHScroll || doc_size.d_width > render_area_size.d_width) { h->show(); } else { h->hide(); } // get a fresh item render area Rect render_area = getItemRenderArea(); render_area_size = render_area.getSize(); // update the pane clipper area static_cast<ClippedContainer*>(d_pane)->setClipArea(render_area); // setup vertical scrollbar v->setDocumentSize(doc_size.d_height); v->setPageSize(render_area_size.d_height); v->setStepSize(ceguimax(1.0f, render_area_size.d_height / 10.0f)); v->setScrollPosition(v->getScrollPosition()); // setup horizontal scrollbar h->setDocumentSize(doc_size.d_width); h->setPageSize(render_area_size.d_width); h->setStepSize(ceguimax(1.0f, render_area_size.d_width / 10.0f)); h->setScrollPosition(h->getScrollPosition()); }
//----------------------------------------------------------------------------// void ScrollablePane::configureScrollbars(void) { // controls should all be valid by this stage Scrollbar* vertScrollbar = getVertScrollbar(); Scrollbar* horzScrollbar = getHorzScrollbar(); // enable required scrollbars vertScrollbar->setVisible(isVertScrollbarNeeded()); horzScrollbar->setVisible(isHorzScrollbarNeeded()); // Check if the addition of the horizontal scrollbar means we // now also need the vertical bar. if (horzScrollbar->isVisible()) { vertScrollbar->setVisible(isVertScrollbarNeeded()); } performChildWindowLayout(); // get viewable area Rect viewableArea(getViewableArea()); // set up vertical scroll bar values vertScrollbar->setDocumentSize(fabsf(d_contentRect.getHeight())); vertScrollbar->setPageSize(viewableArea.getHeight()); vertScrollbar->setStepSize(ceguimax(1.0f, viewableArea.getHeight() * d_vertStep)); vertScrollbar->setOverlapSize(ceguimax(1.0f, viewableArea.getHeight() * d_vertOverlap)); vertScrollbar->setScrollPosition(vertScrollbar->getScrollPosition()); // set up horizontal scroll bar values horzScrollbar->setDocumentSize(fabsf(d_contentRect.getWidth())); horzScrollbar->setPageSize(viewableArea.getWidth()); horzScrollbar->setStepSize(ceguimax(1.0f, viewableArea.getWidth() * d_horzStep)); horzScrollbar->setOverlapSize(ceguimax(1.0f, viewableArea.getWidth() * d_horzOverlap)); horzScrollbar->setScrollPosition(horzScrollbar->getScrollPosition()); }
/************************************************************************* display required integrated scroll bars according to current state of the list box and update their values. *************************************************************************/ void Listbox::configureScrollbars(void) { Scrollbar* vertScrollbar = getVertScrollbar(); Scrollbar* horzScrollbar = getHorzScrollbar(); float totalHeight = getTotalItemsHeight(); float widestItem = getWidestItemWidth(); // // First show or hide the scroll bars as needed (or requested) // // show or hide vertical scroll bar as required (or as specified by option) if ((totalHeight > getListRenderArea().getHeight()) || d_forceVertScroll) { vertScrollbar->show(); // show or hide horizontal scroll bar as required (or as specified by option) if ((widestItem > getListRenderArea().getWidth()) || d_forceHorzScroll) { horzScrollbar->show(); } else { horzScrollbar->hide(); } } else { // show or hide horizontal scroll bar as required (or as specified by option) if ((widestItem > getListRenderArea().getWidth()) || d_forceHorzScroll) { horzScrollbar->show(); // show or hide vertical scroll bar as required (or as specified by option) if ((totalHeight > getListRenderArea().getHeight()) || d_forceVertScroll) { vertScrollbar->show(); } else { vertScrollbar->hide(); } } else { vertScrollbar->hide(); horzScrollbar->hide(); } } // // Set up scroll bar values // Rect renderArea(getListRenderArea()); vertScrollbar->setDocumentSize(totalHeight); vertScrollbar->setPageSize(renderArea.getHeight()); vertScrollbar->setStepSize(ceguimax(1.0f, renderArea.getHeight() / 10.0f)); vertScrollbar->setScrollPosition(vertScrollbar->getScrollPosition()); horzScrollbar->setDocumentSize(widestItem); horzScrollbar->setPageSize(renderArea.getWidth()); horzScrollbar->setStepSize(ceguimax(1.0f, renderArea.getWidth() / 10.0f)); horzScrollbar->setScrollPosition(horzScrollbar->getScrollPosition()); }
/************************************************************************* Sample specific initialisation goes here. *************************************************************************/ bool Demo4Sample::initialiseSample() { using namespace CEGUI; // we will make extensive use of the WindowManager. WindowManager& winMgr = WindowManager::getSingleton(); // load scheme and set up defaults SchemeManager::getSingleton().loadScheme("TaharezLook.scheme"); System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow"); //FontManager::getSingleton().createFont("Commonwealth-10.font"); // load an image to use as a background ImagesetManager::getSingleton().createImagesetFromImageFile("BackgroundImage", "GPN-2000-001437.tga"); // here we will use a StaticImage as the root, then we can use it to place a background image Window* background = winMgr.createWindow("TaharezLook/StaticImage", "background_wnd"); // set position and size background->setPosition(UVector2(cegui_reldim(0), cegui_reldim( 0))); background->setSize(UVector2(cegui_reldim(1), cegui_reldim( 1))); // disable frame and standard background background->setProperty("FrameEnabled", "false"); background->setProperty("BackgroundEnabled", "false"); // set the background image background->setProperty("Image", "set:BackgroundImage image:full_image"); // install this as the root GUI sheet System::getSingleton().setGUISheet(background); // now we create a DefaultWindow which we will attach all the widgets to. We could // have attached them to the background StaticImage, though we want to be a bit tricky // since we do not wish the background to be faded by the slider - so we create this // container window so we can affect all the other widgets, but leave the background // unchanged. Window* sheet = winMgr.createWindow("DefaultWindow", "root_wnd"); // attach this to the 'real' root background->addChildWindow(sheet); // // widget initialisation // // quit button PushButton* btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "QuitButton")); sheet->addChildWindow(btn); btn->setText("Quit!"); btn->setPosition(UVector2(cegui_reldim(0.035f), cegui_reldim( 0.0f))); btn->setSize(UVector2(cegui_reldim(0.1f), cegui_reldim( 0.036f))); btn->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&Demo4Sample::handleQuit, this)); btn->setAlwaysOnTop(true); // Alpha-slider Slider* slider = static_cast<Slider*>(winMgr.createWindow("TaharezLook/Slider", "my slider")); sheet->addChildWindow(slider); slider->setPosition(UVector2(cegui_reldim(0.136f), cegui_reldim( 0.0f))); slider->setSize(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.075f))); slider->setAlwaysOnTop(true); // here we disable inherited alpha so that we will always be able to see the slider slider->setInheritsAlpha(false); // set up slider config slider->setCurrentValue(1.0f); slider->setClickStep(0.1f); // subscribe handler that will process slider position changes. slider->subscribeEvent(Slider::EventValueChanged, &sliderHandler); // big scroll bar Scrollbar* vscb = static_cast<Scrollbar*>(winMgr.createWindow("TaharezLook/LargeVerticalScrollbar", "Vert Scroll 1")); sheet->addChildWindow(vscb); vscb->setPosition(UVector2(cegui_reldim(0.0f), cegui_reldim( 0.0f))); vscb->setMinSize(UVector2(cegui_reldim(0.01f), cegui_reldim( 0.01f))); vscb->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 1.0f))); vscb->setSize(UVector2(cegui_reldim(0.035f), cegui_reldim( 0.83f))); vscb->setDocumentSize(100); vscb->setPageSize(5); vscb->setStepSize(1); vscb->setAlwaysOnTop(true); // mini vert scroll bar Scrollbar* mvsb = static_cast<Scrollbar*>(winMgr.createWindow("TaharezLook/VerticalScrollbar", "MiniVertScroll 1")); sheet->addChildWindow(mvsb); mvsb->setPosition(UVector2(cegui_reldim(0.99f), cegui_reldim( 0.015f))); mvsb->setMinSize(UVector2(cegui_reldim(0.01f), cegui_reldim( 0.01f))); mvsb->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 1.0f))); mvsb->setSize(UVector2(cegui_reldim(0.01f), cegui_reldim( 0.5f))); mvsb->setDocumentSize(360); mvsb->setPageSize(45); mvsb->setStepSize(1); mvsb->setAlwaysOnTop(true); // mini horz scroll bar Scrollbar* mhsb = static_cast<Scrollbar*>(winMgr.createWindow("TaharezLook/HorizontalScrollbar", "MiniHorzScroll 1")); sheet->addChildWindow(mhsb); mhsb->setPosition(UVector2(cegui_reldim(0.485f), cegui_reldim( 0.0f))); mhsb->setMinSize(UVector2(cegui_reldim(0.01f), cegui_reldim( 0.01f))); mhsb->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 1.0f))); mhsb->setSize(UVector2(cegui_reldim(0.5f), cegui_reldim( 0.015f))); mhsb->setDocumentSize(360); mhsb->setPageSize(45); mhsb->setStepSize(1); mhsb->setAlwaysOnTop(true); // // Build a window with some text and formatting options via radio buttons etc // FrameWindow* textwnd = static_cast<FrameWindow*>(winMgr.createWindow("TaharezLook/FrameWindow", "TextWindow")); sheet->addChildWindow(textwnd); textwnd->setPosition(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f))); textwnd->setMaxSize(UVector2(cegui_reldim(0.75f), cegui_reldim( 0.75f))); textwnd->setMinSize(UVector2(cegui_reldim(0.1f), cegui_reldim( 0.1f))); textwnd->setSize(UVector2(cegui_reldim(0.5f), cegui_reldim( 0.5f))); textwnd->setCloseButtonEnabled(false); textwnd->setText("Crazy Eddie's GUI - Demo 4"); Window* st = winMgr.createWindow("TaharezLook/StaticText", "TextWindow/Static"); textwnd->addChildWindow(st); st->setPosition(UVector2(cegui_reldim(0.1f), cegui_reldim( 0.22f))); st->setSize(UVector2(cegui_reldim(0.5f), cegui_reldim( 0.6f))); st = winMgr.createWindow("TaharezLook/StaticText", "TextWindow/Group label 1"); textwnd->addChildWindow(st); st->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.23f))); st->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); st->setText("Horz. Formatting"); // disable frame and background on static control st->setProperty("FrameEnabled", "false"); st->setProperty("BackgroundEnabled", "false"); st = winMgr.createWindow("TaharezLook/StaticText", "TextWindow/Group label 2"); textwnd->addChildWindow(st); st->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.53f))); st->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); st->setText("Vert. Formatting"); // disable frame and background on static control st->setProperty("FrameEnabled", "false"); st->setProperty("BackgroundEnabled", "false"); st = winMgr.createWindow("TaharezLook/StaticText", "TextWindow/Box label"); textwnd->addChildWindow(st); st->setPosition(UVector2(cegui_reldim(0.12f), cegui_reldim( 0.15f))); st->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); st->setText("Formatted Output"); // disable frame and background on static control st->setProperty("FrameEnabled", "false"); st->setProperty("BackgroundEnabled", "false"); // groupbox st = winMgr.createWindow("TaharezLook/GroupBox", "TextWindow/GroupBox1"); textwnd->addChildWindow(st); st->setPosition(UVector2(cegui_reldim(0.03f), cegui_reldim(0.08f))); st->setSize(UVector2(cegui_reldim(0.94f), cegui_reldim(0.90f))); st->setText("Text samples"); // word-wrap checkbox Checkbox* cb = static_cast<Checkbox*>(winMgr.createWindow("TaharezLook/Checkbox", "TextWindow/CB1")); textwnd->addChildWindow(cb); cb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.13f))); cb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); cb->setText("Word Wrap"); // subscribe a handler to listen for when the check-box button select state changes cb->subscribeEvent(Checkbox::EventCheckStateChanged, &formatChangedHandler); // horizontal formatting radio group RadioButton* rb = static_cast<RadioButton*>(winMgr.createWindow("TaharezLook/RadioButton", "TextWindow/RB1")); textwnd->addChildWindow(rb); rb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.3f))); rb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); rb->setGroupID(1); rb->setText("Left Aligned"); // subscribe a handler to listen for when the radio button select state changes rb->subscribeEvent(RadioButton::EventSelectStateChanged, &formatChangedHandler); rb = static_cast<RadioButton*>(winMgr.createWindow("TaharezLook/RadioButton", "TextWindow/RB2")); textwnd->addChildWindow(rb); rb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.35f))); rb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); rb->setGroupID(1); rb->setText("Right Aligned"); // subscribe a handler to listen for when the radio button select state changes rb->subscribeEvent(RadioButton::EventSelectStateChanged, &formatChangedHandler); rb = static_cast<RadioButton*>(winMgr.createWindow("TaharezLook/RadioButton", "TextWindow/RB3")); textwnd->addChildWindow(rb); rb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.4f))); rb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); rb->setGroupID(1); rb->setText("Centred"); // subscribe a handler to listen for when the radio button select state changes rb->subscribeEvent(RadioButton::EventSelectStateChanged, &formatChangedHandler); // vertical formatting radio group rb = static_cast<RadioButton*>(winMgr.createWindow("TaharezLook/RadioButton", "TextWindow/RB4")); textwnd->addChildWindow(rb); rb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.6f))); rb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); rb->setGroupID(2); rb->setText("Top Aligned"); // subscribe a handler to listen for when the radio button select state changes rb->subscribeEvent(RadioButton::EventSelectStateChanged, &formatChangedHandler); rb = static_cast<RadioButton*>(winMgr.createWindow("TaharezLook/RadioButton", "TextWindow/RB5")); textwnd->addChildWindow(rb); rb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.65f))); rb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); rb->setGroupID(2); rb->setText("Bottom Aligned"); // subscribe a handler to listen for when the radio button select state changes rb->subscribeEvent(RadioButton::EventSelectStateChanged, &formatChangedHandler); rb = static_cast<RadioButton*>(winMgr.createWindow("TaharezLook/RadioButton", "TextWindow/RB6")); textwnd->addChildWindow(rb); rb->setPosition(UVector2(cegui_reldim(0.65f), cegui_reldim( 0.7f))); rb->setSize(UVector2(cegui_reldim(0.35f), cegui_reldim( 0.05f))); rb->setGroupID(2); rb->setText("Centred"); // subscribe a handler to listen for when the radio button select state changes rb->subscribeEvent(RadioButton::EventSelectStateChanged, &formatChangedHandler); // Edit box for text entry Editbox* eb = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "TextWindow/Editbox1")); textwnd->addChildWindow(eb); eb->setPosition(UVector2(cegui_reldim(0.05f), cegui_reldim( 0.85f))); eb->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.04f))); eb->setSize(UVector2(cegui_reldim(0.90f), cegui_reldim( 0.08f))); // subscribe a handler to listen for when the text changes eb->subscribeEvent(Window::EventTextChanged, &textChangedHandler); // // Controls are set up. Install initial settings // static_cast<Checkbox*>(winMgr.getWindow("TextWindow/CB1"))->setSelected(true); static_cast<RadioButton*>(winMgr.getWindow("TextWindow/RB1"))->setSelected(true); static_cast<RadioButton*>(winMgr.getWindow("TextWindow/RB4"))->setSelected(true); winMgr.getWindow("TextWindow/Editbox1")->setText("Come on then, edit me!"); // success! return true; }
/************************************************************************* display required integrated scroll bars according to current state of the list box and update their values. *************************************************************************/ void Listbox::configureScrollbars(void) { Scrollbar* vertScrollbar; Scrollbar* horzScrollbar; try { vertScrollbar = static_cast<Scrollbar*>(WindowManager::getSingleton().getWindow(getName() + "__auto_vscrollbar__")); horzScrollbar = static_cast<Scrollbar*>(WindowManager::getSingleton().getWindow(getName() + "__auto_hscrollbar__")); } catch (UnknownObjectException) { // no scrollbars? Can't configure then! return; } float totalHeight = getTotalItemsHeight(); float widestItem = getWidestItemWidth(); // // First show or hide the scroll bars as needed (or requested) // // show or hide vertical scroll bar as required (or as specified by option) if ((totalHeight > getListRenderArea().getHeight()) || d_forceVertScroll) { vertScrollbar->show(); // show or hide horizontal scroll bar as required (or as specified by option) if ((widestItem > getListRenderArea().getWidth()) || d_forceHorzScroll) { horzScrollbar->show(); } else { horzScrollbar->hide(); } } else { // show or hide horizontal scroll bar as required (or as specified by option) if ((widestItem > getListRenderArea().getWidth()) || d_forceHorzScroll) { horzScrollbar->show(); // show or hide vertical scroll bar as required (or as specified by option) if ((totalHeight > getListRenderArea().getHeight()) || d_forceVertScroll) { vertScrollbar->show(); } else { vertScrollbar->hide(); } } else { vertScrollbar->hide(); horzScrollbar->hide(); } } // // Set up scroll bar values // Rect renderArea(getListRenderArea()); vertScrollbar->setDocumentSize(totalHeight); vertScrollbar->setPageSize(renderArea.getHeight()); vertScrollbar->setStepSize(ceguimax(1.0f, renderArea.getHeight() / 10.0f)); vertScrollbar->setScrollPosition(vertScrollbar->getScrollPosition()); horzScrollbar->setDocumentSize(widestItem); horzScrollbar->setPageSize(renderArea.getWidth()); horzScrollbar->setStepSize(ceguimax(1.0f, renderArea.getWidth() / 10.0f)); horzScrollbar->setScrollPosition(horzScrollbar->getScrollPosition()); }