From 44beb75b0468251b9f551f92a4657b8f7b40f9c2 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Wed, 29 Jun 2016 07:08:02 -0700 Subject: [PATCH] UI: Add scaling filter options for scene items to UI Adds scale filtering options to the scene item right-click context menu. --- obs/data/locale/en-US.ini | 7 +++++++ obs/window-basic-main.cpp | 36 ++++++++++++++++++++++++++++++++++++ obs/window-basic-main.hpp | 3 +++ 3 files changed, 46 insertions(+) diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini index 76d0abf73..6baa2e89b 100644 --- a/obs/data/locale/en-US.ini +++ b/obs/data/locale/en-US.ini @@ -168,6 +168,13 @@ Basic.DisplayCapture="Display Capture" # display context menu Basic.Main.PreviewConextMenu.Enable="Enable Preview" +# scale filtering +ScaleFiltering="Scale Filtering" +ScaleFiltering.Point="Point" +ScaleFiltering.Bilinear="Bilinear" +ScaleFiltering.Bicubic="Bicubic" +ScaleFiltering.Lanczos="Lanczos" + # deinterlacing Deinterlacing="Deinterlacing" Deinterlacing.Discard="Discard" diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 96dbb993d..b5427f973 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -2881,6 +2881,38 @@ QMenu *OBSBasic::AddDeinterlacingMenu(obs_source_t *source) return menu; } +void OBSBasic::SetScaleFilter() +{ + QAction *action = reinterpret_cast(sender()); + obs_scale_type mode = (obs_scale_type)action->property("mode").toInt(); + OBSSceneItem sceneItem = GetCurrentSceneItem(); + + obs_sceneitem_set_scale_filter(sceneItem, mode); +} + +QMenu *OBSBasic::AddScaleFilteringMenu(obs_sceneitem_t *item) +{ + QMenu *menu = new QMenu(QTStr("ScaleFiltering")); + obs_scale_type scaleFilter = obs_sceneitem_get_scale_filter(item); + QAction *action; + +#define ADD_MODE(name, mode) \ + action = menu->addAction(QTStr("" name), this, \ + SLOT(SetScaleFilter())); \ + action->setProperty("mode", (int)mode); \ + action->setCheckable(true); \ + action->setChecked(scaleFilter == mode); + + ADD_MODE("Disable", OBS_SCALE_DISABLE); + ADD_MODE("ScaleFiltering.Point", OBS_SCALE_POINT); + ADD_MODE("ScaleFiltering.Bilinear", OBS_SCALE_BILINEAR); + ADD_MODE("ScaleFiltering.Bicubic", OBS_SCALE_BICUBIC); + ADD_MODE("ScaleFiltering.Lanczos", OBS_SCALE_LANCZOS); +#undef ADD_MODE + + return menu; +} + void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview) { QMenu popup(this); @@ -2939,6 +2971,10 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview) popup.addMenu(AddDeinterlacingMenu(source)); popup.addSeparator(); } + + popup.addMenu(AddScaleFilteringMenu(sceneItem)); + popup.addSeparator(); + popup.addMenu(sourceProjector); popup.addSeparator(); diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index aa2db1b29..5f9034873 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -333,6 +333,8 @@ private slots: void SetDeinterlacingMode(); void SetDeinterlacingOrder(); + void SetScaleFilter(); + private: /* OBS Callbacks */ static void SceneReordered(void *data, calldata_t *params); @@ -400,6 +402,7 @@ public: void ReorderSceneItem(obs_sceneitem_t *item, size_t idx); QMenu *AddDeinterlacingMenu(obs_source_t *source); + QMenu *AddScaleFilteringMenu(obs_sceneitem_t *item); void CreateSourcePopupMenu(QListWidgetItem *item, bool preview); void UpdateTitleBar();