Skip to content

Commit

Permalink
UI|Video Settings: Setting the window to a particular display mode size
Browse files Browse the repository at this point in the history
  • Loading branch information
skyjake committed Sep 11, 2013
1 parent f3d3008 commit 79ddeb4
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 9 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions doomsday/client/data/defaultstyle.pack/images.dei
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
group window {
image background { path = "graphics/background.jpg" }
image borderglow { path = "graphics/borderglow.png" }
image icon { path = "graphics/window.png" }
}

group logo {
Expand Down
2 changes: 2 additions & 0 deletions doomsday/client/include/ui/dialogs/videosettingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ protected slots:
void changeMode(uint selected);
void changeColorDepth(uint selected);
void showColorAdjustments();
void showWindowMenu();
void applyModeToWindow();

private:
DENG2_PRIVATE(d)
Expand Down
59 changes: 50 additions & 9 deletions doomsday/client/src/ui/dialogs/videosettingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange)
CVarToggleWidget *fsaa;
CVarToggleWidget *vsync;
ChoiceWidget *modes;
ButtonWidget *windowButton;
#ifdef USE_COLOR_DEPTH_CHOICE
ChoiceWidget *depths;
#endif
Expand All @@ -58,15 +59,16 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange)
{
ScrollAreaWidget &area = self.area();

area.add(showFps = new VariableToggleWidget(App::config()["window.main.showFps"]));
area.add(fullscreen = new ToggleWidget);
area.add(maximized = new ToggleWidget);
area.add(centered = new ToggleWidget);
area.add(fsaa = new CVarToggleWidget("vid-fsaa"));
area.add(vsync = new CVarToggleWidget("vid-vsync"));
area.add(modes = new ChoiceWidget);
area.add(showFps = new VariableToggleWidget(App::config()["window.main.showFps"]));
area.add(fullscreen = new ToggleWidget);
area.add(maximized = new ToggleWidget);
area.add(centered = new ToggleWidget);
area.add(fsaa = new CVarToggleWidget("vid-fsaa"));
area.add(vsync = new CVarToggleWidget("vid-vsync"));
area.add(modes = new ChoiceWidget);
area.add(windowButton = new ButtonWidget);
#ifdef USE_COLOR_DEPTH_CHOICE
area.add(depths = new ChoiceWidget);
area.add(depths = new ChoiceWidget);
#endif
win.audienceForAttributeChange += this;
}
Expand All @@ -85,6 +87,8 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange)
maximized->setActive(win.isMaximized());
centered->setActive(win.isCentered());

windowButton->enable(!win.isFullScreen() && !win.isMaximized());

fsaa->updateFromCVar();
vsync->updateFromCVar();

Expand Down Expand Up @@ -193,6 +197,10 @@ VideoSettingsDialog::VideoSettingsDialog(String const &name)
<< new DialogButtonItem(DialogWidget::Action, tr("Reset to Defaults"),
new SignalAction(this, SLOT(resetToDefaults())));

d->windowButton->setImage(style().images().image("window.icon"));
d->windowButton->setOverrideImageSize(style().fonts().font("default").height().valuei());
d->windowButton->setAction(new SignalAction(this, SLOT(showWindowMenu())));

// Layout all widgets.
Rule const &gap = style().rules().rule("dialog.gap");

Expand All @@ -210,7 +218,14 @@ VideoSettingsDialog::VideoSettingsDialog(String const &name)
GridLayout modeLayout(d->vsync->rule().left(), d->vsync->rule().bottom() + gap);
modeLayout.setGridSize(2, 0);
modeLayout.setColumnAlignment(0, ui::AlignRight);
modeLayout << *modeLabel << *d->modes;
modeLayout << *modeLabel;

modeLayout.append(*d->modes, d->modes->rule().width() + d->windowButton->rule().width());

d->windowButton->rule()
.setInput(Rule::Top, d->modes->rule().top())
.setInput(Rule::Left, d->modes->rule().right());

#ifdef USE_COLOR_DEPTH_CHOICE
modeLayout << *colorLabel << *d->depths;
#endif
Expand Down Expand Up @@ -269,3 +284,29 @@ void VideoSettingsDialog::showColorAdjustments()
d->win.showColorAdjustments();
d->win.taskBar().closeConfigMenu();
}

void VideoSettingsDialog::showWindowMenu()
{
PopupMenuWidget *menu = new PopupMenuWidget;
menu->setDeleteAfterDismissed(true);
add(menu);

menu->setAnchorAndOpeningDirection(d->windowButton->rule(), ui::Up);
menu->items()
<< new ActionItem(tr("Apply to Window"),
new SignalAction(this, SLOT(applyModeToWindow())));
menu->open();
}

void VideoSettingsDialog::applyModeToWindow()
{
QPoint const res = d->modes->selectedItem().data().toPoint();

int attribs[] = {
ClientWindow::Width, res.x(),
ClientWindow::Height, res.y(),
ClientWindow::End
};

d->win.changeAttributes(attribs);
}

0 comments on commit 79ddeb4

Please sign in to comment.