diff --git a/src/preferences/screen/ScreenWindow.cpp b/src/preferences/screen/ScreenWindow.cpp index 599c122a74..ec7bf362be 100644 --- a/src/preferences/screen/ScreenWindow.cpp +++ b/src/preferences/screen/ScreenWindow.cpp @@ -212,29 +212,51 @@ ScreenWindow::ScreenWindow(ScreenSettings* settings) // box on the left with workspace count and monitor view - BBox* screenBox = new BBox("screen box"); - BGroupLayout* layout = new BGroupLayout(B_VERTICAL, B_USE_SMALL_SPACING); - layout->SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, - B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING); - screenBox->SetLayout(layout); + fScreenBox = new BBox("screen box"); + BGroupView* groupView = new BGroupView(B_VERTICAL, B_USE_SMALL_SPACING); + fScreenBox->AddChild(groupView); + fScreenBox->SetLabel("placeholder"); + // Needed for layouting, will be replaced with screen name/size + groupView->GroupLayout()->SetInsets(B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING); - fMonitorInfo = new BStringView("monitor info", ""); - fMonitorInfo->SetAlignment(B_ALIGN_CENTER); - screenBox->AddChild(fMonitorInfo); - - fDeviceInfo = new BStringView("monitor info", ""); + fDeviceInfo = new BStringView("device info", ""); fDeviceInfo->SetAlignment(B_ALIGN_CENTER); - screenBox->AddChild(fDeviceInfo); + groupView->AddChild(fDeviceInfo); float scaling = std::max(1.0f, be_plain_font->Size() / 12.0f); fMonitorView = new MonitorView(BRect(0.0, 0.0, 80.0 * scaling, 80.0 * scaling), "monitor", screen.Frame().IntegerWidth() + 1, screen.Frame().IntegerHeight() + 1); - screenBox->AddChild(fMonitorView); + fMonitorView->SetToolTip(B_TRANSLATE("Set background" B_UTF8_ELLIPSIS)); + groupView->AddChild(fMonitorView); - BStringView* workspaces = new BStringView("workspaces", - B_TRANSLATE("Workspaces")); - workspaces->SetAlignment(B_ALIGN_CENTER); + // brightness slider + fBrightnessSlider = new BSlider("brightness", B_TRANSLATE("Brightness:"), + NULL, 0, 255, B_HORIZONTAL); + groupView->AddChild(fBrightnessSlider); + + if (screen.GetBrightness(&fOriginalBrightness) == B_OK) { + fBrightnessSlider->SetModificationMessage( + new BMessage(SLIDER_BRIGHTNESS_MSG)); + fBrightnessSlider->SetValue(fOriginalBrightness * 255); + } else { + // The driver does not support changing the brightness, + // so hide the slider + fBrightnessSlider->Hide(); + fOriginalBrightness = -1; + } + + // box on the left below the screen box with workspaces + + BBox* workspacesBox = new BBox("workspaces box"); + workspacesBox->SetLabel(B_TRANSLATE("Workspaces")); + + BGroupLayout* workspacesLayout = new BGroupLayout(B_VERTICAL); + workspacesLayout->SetInsets(B_USE_DEFAULT_SPACING, + be_control_look->DefaultItemSpacing() * 2, B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING); + workspacesBox->SetLayout(workspacesLayout); fColumnsControl = new BSpinner("columns", B_TRANSLATE("Columns:"), new BMessage(kMsgWorkspaceColumnsChanged)); @@ -252,9 +274,8 @@ ScreenWindow::ScreenWindow(ScreenSettings* settings) fColumnsControl->SetValue(columns); fRowsControl->SetValue(rows); - screenBox->AddChild(BLayoutBuilder::Group<>() + workspacesBox->AddChild(BLayoutBuilder::Group<>() .AddGroup(B_VERTICAL, B_USE_SMALL_SPACING) - .Add(workspaces) .AddGroup(B_HORIZONTAL, 0) .AddGlue() .AddGrid(B_USE_DEFAULT_SPACING, B_USE_SMALL_SPACING) @@ -270,11 +291,12 @@ ScreenWindow::ScreenWindow(ScreenSettings* settings) .End() .View()); - fBackgroundsButton = new BButton("BackgroundsButton", - B_TRANSLATE("Set background" B_UTF8_ELLIPSIS), - new BMessage(BUTTON_LAUNCH_BACKGROUNDS_MSG)); - fBackgroundsButton->SetFontSize(be_plain_font->Size() * 0.9); - screenBox->AddChild(fBackgroundsButton); + // put workspaces slider in a vertical group with a half space above so + // if hidden you won't see the extra space. + BView* workspacesView = BLayoutBuilder::Group<>(B_VERTICAL, 0) + .AddStrut(B_USE_HALF_ITEM_SPACING) + .Add(workspacesBox) + .View(); // box on the right with screen resolution, etc. @@ -510,22 +532,6 @@ ScreenWindow::ScreenWindow(ScreenSettings* settings) .Add(fTVStandardField->CreateMenuBarLayoutItem(), 1, 6) .End(); - fBrightnessSlider = new BSlider("brightness", B_TRANSLATE("Brightness:"), - NULL, 0, 255, B_HORIZONTAL); - - status_t result = screen.GetBrightness(&fOriginalBrightness); - if (result == B_OK) { - fBrightnessSlider->SetModificationMessage( - new BMessage(SLIDER_BRIGHTNESS_MSG)); - fBrightnessSlider->SetValue(fOriginalBrightness * 255); - } else { - // The driver does not support changing the brightness, - // so hide the slider - fBrightnessSlider->Hide(); - - fOriginalBrightness = -1; - } - // TODO: we don't support getting the screen's preferred settings /* fDefaultsButton = new BButton(buttonRect, "DefaultsButton", "Defaults", new BMessage(BUTTON_DEFAULTS_MSG));*/ @@ -546,12 +552,13 @@ ScreenWindow::ScreenWindow(ScreenSettings* settings) BLayoutBuilder::Group<>(this, B_VERTICAL, B_USE_DEFAULT_SPACING) .AddGroup(B_HORIZONTAL) .AddGroup(B_VERTICAL, 0, 1) - .AddStrut(floorf(controlsBox->TopBorderOffset()) - 1) - .Add(screenBox) + .AddStrut(floorf(controlsBox->TopBorderOffset() + - fScreenBox->TopBorderOffset())) + .Add(fScreenBox) + .Add(workspacesView) .End() .AddGroup(B_VERTICAL, 0, 1) .Add(controlsBox, 2) - .Add(fBrightnessSlider) .End() .End() .AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING) @@ -1283,13 +1290,9 @@ ScreenWindow::_UpdateMonitor() snprintf(text, sizeof(text), "%s%s%s %g\"", info.vendor, info.name[0] ? " " : "", info.name, diagonalInches); - fMonitorInfo->SetText(text); - - if (fMonitorInfo->IsHidden(fMonitorInfo)) - fMonitorInfo->Show(); + fScreenBox->SetLabel(text); } else { - if (!fMonitorInfo->IsHidden(fMonitorInfo)) - fMonitorInfo->Hide(); + fScreenBox->SetLabel(B_TRANSLATE("Display info")); } // Add info about the graphics device diff --git a/src/preferences/screen/ScreenWindow.h b/src/preferences/screen/ScreenWindow.h index 8698625144..fa465bf52b 100644 --- a/src/preferences/screen/ScreenWindow.h +++ b/src/preferences/screen/ScreenWindow.h @@ -68,7 +68,7 @@ private: bool fIsVesa; bool fBootWorkspaceApplied; - BStringView* fMonitorInfo; + BBox* fScreenBox; BStringView* fDeviceInfo; MonitorView* fMonitorView; BMenuItem* fAllWorkspacesItem; @@ -102,8 +102,6 @@ private: BButton* fApplyButton; BButton* fRevertButton; - BButton* fBackgroundsButton; - ScreenMode fScreenMode; ScreenMode fUndoScreenMode; // screen modes for all workspaces