void App::makeGUI() { shared_ptr<GuiWindow> window = GuiWindow::create("Controls", debugWindow->theme(), Rect2D::xywh(0,0,0,0), GuiTheme::TOOL_WINDOW_STYLE); GuiPane* pane = window->pane(); pane->addLabel("Use WASD keys + right mouse to move"); pane->addButton("Render High Res.", this, &App::onRender); pane->addNumberBox("Rays per pixel", &m_raysPerPixel, "", GuiTheme::LINEAR_SLIDER, 1, 30, 1); pane->addNumberBox("Max bounces", &m_maxBounces, "", GuiTheme::LINEAR_SLIDER, 1, 16, 1); pane->addSlider("Fogginess", &m_fogginess, 0.0f, .1f); pane->addNumberBox("Aperture", &m_aperture, "", GuiTheme::LINEAR_SLIDER, 0, 100, 1); pane->addNumberBox("Focal Length", &m_focalLength, "", GuiTheme::LINEAR_SLIDER, 0, 100, 1); window->pack(); window->setVisible(true); addWidget(window); }
void App::makeGUI() { // Initialize the developer HUD (using the existing scene) createDeveloperHUD(); debugWindow->setVisible(false); developerWindow->videoRecordDialog->setVisible(false); developerWindow->cameraControlWindow->setVisible(false); developerWindow->sceneEditorWindow->setVisible(false); developerWindow->setVisible(false); showRenderingStats = false; GuiPane* infoPane = debugPane->addPane("Info", GuiTheme::ORNATE_PANE_STYLE); infoPane->beginRow(); { infoPane->addButton("Pause", [this]() { m_automata.setPaused(!m_automata.paused()); }); infoPane->addNumberBox("BPM", &m_automata.m_bpm, "", GuiTheme::LINEAR_SLIDER, 30, 300); infoPane->addEnumClassRadioButtons("Display Mode", &m_automata.m_displayMode); } infoPane->endRow(); // Example of how to add debugging controls infoPane->pack(); // More examples of debugging GUI controls: // debugPane->addCheckBox("Use explicit checking", &explicitCheck); // debugPane->addTextBox("Name", &myName); // debugPane->addNumberBox("height", &height, "m", GuiTheme::LINEAR_SLIDER, 1.0f, 2.5f); // button = debugPane->addButton("Run Simulator"); debugWindow->pack(); debugWindow->setRect(Rect2D::xywh(0, 0, (float)window()->width(), debugWindow->rect().height())); }
PhysicsFrameSplineEditor::PhysicsFrameSplineEditor(const GuiText& caption, GuiPane* dockPane, shared_ptr<GuiTheme> theme) : GuiWindow(caption, theme, Rect2D::xywh(0,0,100,40), GuiTheme::TOOL_WINDOW_STYLE, GuiWindow::HIDE_ON_CLOSE), m_selectedControlPointIndex(0), m_isDocked(dockPane != NULL) { m_cachedPhysicsFrameString = CFrame(m_cachedPhysicsFrameValue).toAny().unparse(); m_spline.append(CFrame()); m_surface.reset(new SplineSurface(this)); m_nodeManipulator = ThirdPersonManipulator::create(); m_nodeManipulator->setEnabled(false); GuiPane* p = dockPane; if (p == NULL) { // Place into the window p = pane(); } else { // No need to show the window setVisible(false); } GuiPane* cpPane = p->addPane("Control Point", GuiTheme::ORNATE_PANE_STYLE); cpPane->moveBy(0, -15); Array<std::string> indexList; getIndexRange(1, indexList); m_selectedControlPointDropDown = cpPane->addDropDownList("Control point: ", indexList, &m_selectedControlPointIndex, GuiControl::Callback(this, &PhysicsFrameSplineEditor::controlPointDropDownCallback)); cpPane->addNumberBox("Time", Pointer<float>(this, &PhysicsFrameSplineEditor::selectedNodeTime, &PhysicsFrameSplineEditor::setSelectedNodeTime), "s"); cpPane->addTextBox("", Pointer<std::string>(this, &PhysicsFrameSplineEditor::selectedNodePFrameAsString, &PhysicsFrameSplineEditor::setSelectedNodePFrameFromString)); cpPane->beginRow(); { GuiButton* b = cpPane->addButton("Add new", this, &PhysicsFrameSplineEditor::addControlPoint); b->moveBy(-2, -7); m_removeSelectedButton = cpPane->addButton("Remove", this, &PhysicsFrameSplineEditor::removeSelectedControlPoint); } cpPane->endRow(); cpPane->pack(); GuiPane* exPane = p->addPane("Extrapolation Mode", GuiTheme::NO_PANE_STYLE); exPane->beginRow(); { GuiControl* linearButton = exPane->addRadioButton("Linear", SplineExtrapolationMode::LINEAR, this, &PhysicsFrameSplineEditor::extrapolationMode, &PhysicsFrameSplineEditor::setExtrapolationMode); GuiControl* clampedButton = exPane->addRadioButton("Clamped", SplineExtrapolationMode::CLAMP, this, &PhysicsFrameSplineEditor::extrapolationMode, &PhysicsFrameSplineEditor::setExtrapolationMode); clampedButton->moveRightOf(linearButton); clampedButton->moveBy(-145, 0); GuiControl* cyclicButton = exPane->addRadioButton("Cyclic", SplineExtrapolationMode::CYCLIC, this, &PhysicsFrameSplineEditor::extrapolationMode, &PhysicsFrameSplineEditor::setExtrapolationMode); cyclicButton->moveRightOf(clampedButton); cyclicButton->moveBy(-140, 0); } exPane->endRow(); exPane->pack(); GuiPane* inPane = p->addPane("Interpolation Mode", GuiTheme::NO_PANE_STYLE); inPane->beginRow(); { GuiControl* linearButton = inPane->addRadioButton("Linear", SplineInterpolationMode::LINEAR, this, &PhysicsFrameSplineEditor::interpolationMode, &PhysicsFrameSplineEditor::setInterpolationMode); GuiControl* cubicButton = inPane->addRadioButton("Cubic", SplineInterpolationMode::CUBIC, this, &PhysicsFrameSplineEditor::interpolationMode, &PhysicsFrameSplineEditor::setInterpolationMode); cubicButton->moveRightOf(linearButton); cubicButton->moveBy(-145, 0); } inPane->endRow(); inPane->pack(); GuiPane* finalIntervalPane = p->addPane("Final Interval", GuiTheme::NO_PANE_STYLE); finalIntervalPane->moveRightOf(exPane); finalIntervalPane->moveBy(-100, -5); static int m_explicitFinalInterval = 0; m_finalIntervalChoice[0] = finalIntervalPane->addRadioButton("automatic", 0, &m_explicitFinalInterval); finalIntervalPane->beginRow(); { m_finalIntervalChoice[1] = finalIntervalPane->addRadioButton("", 1, &m_explicitFinalInterval); m_finalIntervalBox = finalIntervalPane->addNumberBox("", &m_spline.finalInterval, "s", GuiTheme::NO_SLIDER, -1.0f, 10000.0f, 0.001f); m_finalIntervalBox->setWidth(76); m_finalIntervalBox->moveBy(-2, 0); } finalIntervalPane->endRow(); pack(); setEnabled(false); }
void VideoRecordDialog::makeGUI() { pane()->addCheckBox("Record GUI (Surface2D)", &m_captureGUI); pane()->addLabel(GuiText("Video", shared_ptr<GFont>(), 12)); GuiPane* moviePane = pane()->addPane("", GuiTheme::ORNATE_PANE_STYLE); GuiLabel* label = NULL; GuiDropDownList* formatList = moviePane->addDropDownList("Format", m_formatList, &m_templateIndex); const float width = 300.0f; // Increase caption size to line up with the motion blur box const float captionSize = 90.0f; formatList->setWidth(width); formatList->setCaptionWidth(captionSize); moviePane->addNumberBox("Quality", &m_quality, "", GuiTheme::LOG_SLIDER, 0.1f, 25.0f); if (false) { // For future expansion GuiCheckBox* motionCheck = moviePane->addCheckBox("Motion Blur", &m_enableMotionBlur); m_framesBox = moviePane->addNumberBox("", &m_motionBlurFrames, "frames", GuiTheme::LINEAR_SLIDER, 2, 20); m_framesBox->setUnitsSize(46); m_framesBox->moveRightOf(motionCheck); m_framesBox->setWidth(210); } GuiNumberBox<float>* recordBox = moviePane->addNumberBox("Record as if", &m_recordFPS, "fps", GuiTheme::NO_SLIDER, 1.0f, 120.0f, 0.1f); recordBox->setCaptionWidth(captionSize); GuiNumberBox<float>* playbackBox = moviePane->addNumberBox("Playback at", &m_playbackFPS, "fps", GuiTheme::NO_SLIDER, 1.0f, 120.0f, 0.1f); playbackBox->setCaptionWidth(captionSize); const OSWindow* window = OSWindow::current(); int w = window->width() / 2; int h = window->height() / 2; moviePane->addCheckBox(format("Half-size (%d x %d)", w, h), &m_halfSize); if (false) { // For future expansion moviePane->addCheckBox("Show cursor", &m_showCursor); } label = moviePane->addLabel("Hot key:"); label->setWidth(captionSize); moviePane->addLabel(m_hotKeyString)->moveRightOf(label); // Add record on the same line as previous hotkey box m_recordButton = moviePane->addButton("Record Now (" + m_hotKeyString + ")"); m_recordButton->moveBy(moviePane->rect().width() - m_recordButton->rect().width() - 5, -27); moviePane->pack(); moviePane->setWidth(pane()->rect().width()); /////////////////////////////////////////////////////////////////////////////////// pane()->addLabel(GuiText("Screenshot", shared_ptr<GFont>(), 12)); GuiPane* ssPane = pane()->addPane("", GuiTheme::ORNATE_PANE_STYLE); m_ssFormatList.append("JPG", "PNG", "BMP", "TGA"); GuiDropDownList* ssFormatList = ssPane->addDropDownList("Format", m_ssFormatList, &m_ssFormatIndex); m_ssFormatIndex = 0; ssFormatList->setWidth(width); ssFormatList->setCaptionWidth(captionSize); label = ssPane->addLabel("Hot key:"); label->setWidth(captionSize); ssPane->addLabel(m_ssHotKeyString)->moveRightOf(label); ssPane->pack(); ssPane->setWidth(pane()->rect().width()); /////////////////////////////////////////////////////////////////////////////////// pack(); setRect(Rect2D::xywh(rect().x0(), rect().y0(), rect().width() + 5, rect().height() + 2)); }
PhysicsFrameSplineEditor::PhysicsFrameSplineEditor(const GuiText& caption, GuiPane* dockPane, GuiTheme::Ref theme) : GuiWindow(caption, theme, Rect2D::xywh(0,0,100,40), GuiTheme::TOOL_WINDOW_STYLE, GuiWindow::HIDE_ON_CLOSE), m_selectedControlPointIndex(0), m_isDocked(dockPane != NULL) { m_cachedPhysicsFrameString = CFrame(m_cachedPhysicsFrameValue).toAny().unparse(); m_spline.append(CFrame()); m_surface = new SplineSurface(this); m_nodeManipulator = ThirdPersonManipulator::create(); m_nodeManipulator->setEnabled(false); GuiPane* p = dockPane; if (p == NULL) { // Place into the window p = pane(); } else { // No need to show the window setVisible(false); } GuiPane* cpPane = p->addPane("Control Point", GuiTheme::ORNATE_PANE_STYLE); cpPane->moveBy(0, -15); if (false) { static float x,y,z; //static const float translationControlWidth = 80; static const float rotationControlWidth = 40; //static const float captionWidth = 10; static const float rotationPrecision = 0.1; //static const float translationPrecision = 0.001; static const std::string degrees = "\xba"; cpPane->beginRow(); { GuiNumberBox<float>* c = NULL; static std::string s = "100.0, 100.0, 100.0"; GuiControl* t = cpPane->addTextBox("xyz (", &s); t->setWidth(155); t->setCaptionWidth(26); cpPane->addLabel(") m"); c = cpPane->addNumberBox("", &x, degrees, GuiTheme::NO_SLIDER, -finf(), finf(), rotationPrecision); c->moveBy(20, 0); c->setCaptionWidth(0); c->setWidth(rotationControlWidth); c->setUnitsSize(8); c = cpPane->addNumberBox("", &y, degrees, GuiTheme::NO_SLIDER, -finf(), finf(), rotationPrecision); c->setCaptionWidth(0); c->setWidth(rotationControlWidth); c->setUnitsSize(8); c = cpPane->addNumberBox("", &z, degrees, GuiTheme::NO_SLIDER, -finf(), finf(), rotationPrecision); c->setCaptionWidth(0); c->setWidth(rotationControlWidth); c->setUnitsSize(8); } cpPane->endRow(); } cpPane->addLabel("Control point: 0"); cpPane->addNumberBox("Time", Pointer<float>(this, &PhysicsFrameSplineEditor::selectedNodeTime, &PhysicsFrameSplineEditor::setSelectedNodeTime), "s"); cpPane->addTextBox("", Pointer<std::string>(this, &PhysicsFrameSplineEditor::selectedNodePFrameAsString, &PhysicsFrameSplineEditor::setSelectedNodePFrameFromString)); cpPane->beginRow(); { GuiButton* b = cpPane->addButton("Add new", this, &PhysicsFrameSplineEditor::addControlPoint); b->moveBy(-2, -7); m_removeSelectedButton = cpPane->addButton("Remove", this, &PhysicsFrameSplineEditor::removeSelectedControlPoint); } cpPane->endRow(); cpPane->pack(); GuiControl* prev = p->addCheckBox("Loop with final interval", Pointer<bool>(this, &PhysicsFrameSplineEditor::cyclic, &PhysicsFrameSplineEditor::setCyclic)); GuiPane* finalIntervalPane = p->addPane("", GuiTheme::NO_PANE_STYLE); finalIntervalPane->moveRightOf(prev); finalIntervalPane->moveBy(-1, -5); static int m_explicitFinalInterval = 0; m_finalIntervalChoice[0] = finalIntervalPane->addRadioButton("automatic", 0, &m_explicitFinalInterval); finalIntervalPane->beginRow(); { m_finalIntervalChoice[1] = finalIntervalPane->addRadioButton("", 1, &m_explicitFinalInterval); m_finalIntervalBox = finalIntervalPane->addNumberBox("", &m_spline.finalInterval, "s", GuiTheme::NO_SLIDER, -1.0f, 10000.0f, 0.001f); m_finalIntervalBox->setWidth(76); m_finalIntervalBox->moveBy(-2, 0); } finalIntervalPane->endRow(); pack(); setEnabled(false); }