DropDownWindow::DropDownWindow(const SPtr<RenderWindow>& parent, const SPtr<Camera>& camera, const Vector2I& position, UINT32 width, UINT32 height) : mRenderWindow(parent), mFrontHitBox(nullptr), mBackHitBox(nullptr), mRootPanel(nullptr), mPosition(position) , mWidth(width), mHeight(height) { mSceneObject = SceneObject::create("EditorWindow", SOF_Internal | SOF_Persistent | SOF_DontSave); mGUI = mSceneObject->addComponent<CGUIWidget>(camera); mGUI->setDepth(0); // Needs to be in front of everything mGUI->setSkin(BuiltinEditorResources::instance().getSkin()); mRootPanel = mGUI->getPanel()->addNewElement<GUIPanel>(); GUIPanel* frontHitBoxPanel = mRootPanel->addNewElement<GUIPanel>(std::numeric_limits<INT16>::min()); mFrontHitBox = GUIDropDownHitBox::create(false, false); mFrontHitBox->onFocusLost.connect(std::bind(&DropDownWindow::dropDownFocusLost, this)); mFrontHitBox->setFocus(true); frontHitBoxPanel->addElement(mFrontHitBox); GUIPanel* backHitBoxPanel = mRootPanel->addNewElement<GUIPanel>(std::numeric_limits<INT16>::max()); mBackHitBox = GUIDropDownHitBox::create(false, true); backHitBoxPanel->addElement(mBackHitBox); SPtr<Viewport> viewport = camera->getViewport(); GUIPanel* captureHitBoxPanel = mGUI->getPanel()->addNewElement<GUIPanel>(std::numeric_limits<INT16>::max()); GUIDropDownHitBox* captureHitBox = GUIDropDownHitBox::create(true, false); captureHitBox->setBounds(Rect2I(0, 0, viewport->getWidth(), viewport->getHeight())); captureHitBoxPanel->addElement(captureHitBox); setSize(width, height); GUIPanel* backgroundPanel = mRootPanel->addNewElement<GUIPanel>(500); backgroundPanel->addElement(GUITexture::create(TextureScaleMode::RepeatToFit, GUIOptions(GUIOption::flexibleWidth(), GUIOption::flexibleHeight()), "WindowBackground")); GUIPanel* windowFramePanel = mRootPanel->addNewElement<GUIPanel>(499); GUIWindowFrame* windowFrame = GUIWindowFrame::create("WindowFrame"); windowFramePanel->addElement(windowFrame); mContents = mRootPanel->addNewElement<GUIPanel>(); mContents->setPosition(1, 1); mContents->setWidth(width - 2); mContents->setHeight(height - 2); }
WindowFrameWidget::WindowFrameWidget(const HSceneObject& parent, bool allowResize, const SPtr<Camera>& camera, RenderWindow* parentWindow, const HGUISkin& skin) :CGUIWidget(parent, camera), mAllowResize(allowResize), mWindowFramePanel(nullptr), mParentWindow(parentWindow) { setSkin(skin); GUIPanel* backgroundPanel = getPanel()->addNewElement<GUIPanel>(500); backgroundPanel->addElement(GUITexture::create(TextureScaleMode::RepeatToFit, GUIOptions(GUIOption::flexibleWidth(), GUIOption::flexibleHeight()), "WindowBackground")); mWindowFramePanel = getPanel()->addNewElement<GUIPanel>(499); mWindowFrame = GUIWindowFrame::create("WindowFrame"); mWindowFramePanel->addElement(mWindowFrame); refreshNonClientAreas(); }