From 1b9f45ba16df908ec2141a130c0a80106a206eec Mon Sep 17 00:00:00 2001 From: skyjake Date: Mon, 2 Sep 2013 18:55:40 +0300 Subject: [PATCH] Fixed|Refactor|UI|Client: Widget improvements - Use CVarToggleWidget in Video Settings - Menu eats mouse position events (to avoid "leaking" them to widgets underneath) - Adjusted margins for the dialog heading --- .../include/ui/dialogs/videosettingsdialog.h | 2 -- .../client/include/ui/widgets/menuwidget.h | 1 + .../src/ui/dialogs/videosettingsdialog.cpp | 28 ++++++------------- .../client/src/ui/widgets/dialogwidget.cpp | 4 +++ doomsday/client/src/ui/widgets/menuwidget.cpp | 13 +++++++++ 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/doomsday/client/include/ui/dialogs/videosettingsdialog.h b/doomsday/client/include/ui/dialogs/videosettingsdialog.h index ebd6a4195a..b4ee393e10 100644 --- a/doomsday/client/include/ui/dialogs/videosettingsdialog.h +++ b/doomsday/client/include/ui/dialogs/videosettingsdialog.h @@ -32,8 +32,6 @@ class VideoSettingsDialog : public DialogWidget VideoSettingsDialog(de::String const &name = "videosettings"); protected slots: - void toggleAntialias(); - void toggleVerticalSync(); void changeMode(uint selected); void changeColorDepth(uint selected); void showColorAdjustments(); diff --git a/doomsday/client/include/ui/widgets/menuwidget.h b/doomsday/client/include/ui/widgets/menuwidget.h index ba157fdee9..10c35fac06 100644 --- a/doomsday/client/include/ui/widgets/menuwidget.h +++ b/doomsday/client/include/ui/widgets/menuwidget.h @@ -118,6 +118,7 @@ class MenuWidget : public ScrollAreaWidget // Events. void update(); + bool handleEvent(de::Event const &event); public slots: void dismissPopups(); diff --git a/doomsday/client/src/ui/dialogs/videosettingsdialog.cpp b/doomsday/client/src/ui/dialogs/videosettingsdialog.cpp index c31db78e39..cc822cc735 100644 --- a/doomsday/client/src/ui/dialogs/videosettingsdialog.cpp +++ b/doomsday/client/src/ui/dialogs/videosettingsdialog.cpp @@ -18,6 +18,7 @@ #include "ui/dialogs/videosettingsdialog.h" #include "ui/widgets/variabletogglewidget.h" +#include "ui/widgets/cvartogglewidget.h" #include "ui/widgets/choicewidget.h" #include "ui/widgets/taskbarwidget.h" #include "SequentialLayout" @@ -46,8 +47,8 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange) ToggleWidget *fullscreen; ToggleWidget *maximized; ToggleWidget *centered; - ToggleWidget *fsaa; - ToggleWidget *vsync; + CVarToggleWidget *fsaa; + CVarToggleWidget *vsync; ChoiceWidget *modes; #ifdef USE_COLOR_DEPTH_CHOICE ChoiceWidget *depths; @@ -61,8 +62,8 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange) area.add(fullscreen = new ToggleWidget); area.add(maximized = new ToggleWidget); area.add(centered = new ToggleWidget); - area.add(fsaa = new ToggleWidget); - area.add(vsync = new ToggleWidget); + area.add(fsaa = new CVarToggleWidget("vid-fsaa")); + area.add(vsync = new CVarToggleWidget("vid-vsync")); area.add(modes = new ChoiceWidget); #ifdef USE_COLOR_DEPTH_CHOICE area.add(depths = new ChoiceWidget); @@ -83,8 +84,8 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange) fullscreen->setActive(win.isFullScreen()); maximized->setActive(win.isMaximized()); centered->setActive(win.isCentered()); - fsaa->setActive(Con_GetInteger("vid-fsaa") != 0); - vsync->setActive(Con_GetInteger("vid-vsync") != 0); + fsaa->updateFromCVar(); + vsync->updateFromCVar(); // Select the current resolution/size in the mode list. Canvas::Size current; @@ -97,7 +98,8 @@ DENG2_OBSERVES(PersistentCanvasWindow, AttributeChange) current = win.windowRect().size(); } - // Update selected display mode. + // Update selected display mode. We'll find the closest one + // because the current canvas size may be anything. ui::Data::Pos closest = ui::Data::InvalidPos; int delta; for(ui::Data::Pos i = 0; i < modes->items().size(); ++i) @@ -144,10 +146,8 @@ VideoSettingsDialog::VideoSettingsDialog(String const &name) d->showFps->setText(tr("Show FPS")); d->fsaa->setText(tr("Antialias")); - d->fsaa->setAction(new SignalAction(this, SLOT(toggleAntialias()))); d->vsync->setText(tr("VSync")); - d->vsync->setAction(new SignalAction(this, SLOT(toggleVerticalSync()))); LabelWidget *modeLabel = new LabelWidget; modeLabel->setText(tr("Mode:")); @@ -226,16 +226,6 @@ VideoSettingsDialog::VideoSettingsDialog(String const &name) #endif } -void VideoSettingsDialog::toggleAntialias() -{ - Con_SetInteger("vid-fsaa", !Con_GetInteger("vid-fsaa")); -} - -void VideoSettingsDialog::toggleVerticalSync() -{ - Con_SetInteger("vid-vsync", !Con_GetInteger("vid-vsync")); -} - void VideoSettingsDialog::changeMode(uint selected) { QPoint res = d->modes->items().at(selected).data().toPoint(); diff --git a/doomsday/client/src/ui/widgets/dialogwidget.cpp b/doomsday/client/src/ui/widgets/dialogwidget.cpp index 6756624c21..4caa565d1b 100644 --- a/doomsday/client/src/ui/widgets/dialogwidget.cpp +++ b/doomsday/client/src/ui/widgets/dialogwidget.cpp @@ -133,6 +133,10 @@ DENG2_OBSERVES(ui::Data, Removal) heading = new LabelWidget; heading->setFont("heading"); heading->margins().setBottom(""); + heading->margins().setTop(style().rules().rule("gap") + + style().rules().rule("dialog.gap")); + heading->margins().setLeft(style().rules().rule("gap") + + style().rules().rule("dialog.gap")); heading->setSizePolicy(ui::Expand, ui::Expand); heading->setTextColor("accent"); heading->setAlignment(ui::AlignLeft); diff --git a/doomsday/client/src/ui/widgets/menuwidget.cpp b/doomsday/client/src/ui/widgets/menuwidget.cpp index b3922a2c07..a55722cc53 100644 --- a/doomsday/client/src/ui/widgets/menuwidget.cpp +++ b/doomsday/client/src/ui/widgets/menuwidget.cpp @@ -353,6 +353,19 @@ void MenuWidget::update() ScrollAreaWidget::update(); } +bool MenuWidget::handleEvent(Event const &event) +{ + if(event.type() == Event::MousePosition) + { + if(rule().recti().contains(event.as().pos())) + { + // Eat position events inside the menu area. + return true; + } + } + return ScrollAreaWidget::handleEvent(event); +} + void MenuWidget::dismissPopups() { foreach(PopupWidget *pop, d->openPopups)