From ba77e218173cd691c3507403df838a583750783f Mon Sep 17 00:00:00 2001
From: Filippo Scognamiglio <flscogna@gmail.com>
Date: Tue, 30 Sep 2014 00:57:57 +0200
Subject: [PATCH] Bloom quality is now customizable in performance tab.

---
 app/qml/ApplicationSettings.qml    |  6 +++-
 app/qml/PreprocessedTerminal.qml   |  9 ++---
 app/qml/SettingsPerformanceTab.qml | 55 +++++++++++++++++++++++++-----
 3 files changed, 57 insertions(+), 13 deletions(-)

diff --git a/app/qml/ApplicationSettings.qml b/app/qml/ApplicationSettings.qml
index d907efd..66327bf 100644
--- a/app/qml/ApplicationSettings.qml
+++ b/app/qml/ApplicationSettings.qml
@@ -69,6 +69,8 @@ Item{
     property real motion_blur: 0.40
     property real bloom_strength: 0.65
 
+    property real bloom_quality: 1.0
+
     property real chroma_color: 0.0
     property real saturation_color: 0.0
 
@@ -173,7 +175,8 @@ Item{
             fontIndexes: fontIndexes,
             frameReflections: _frameReflections,
             showMenubar: showMenubar,
-            scanline_quality: scanline_quality
+            scanline_quality: scanline_quality,
+            bloom_quality: bloom_quality
         }
         return JSON.stringify(settings);
     }
@@ -245,6 +248,7 @@ Item{
         showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
 
         scanline_quality = settings.scanline_quality !== undefined ? settings.scanline_quality : scanline_quality;
+        bloom_quality = settings.bloom_quality !== undefined ? settings.bloom_quality : bloom_quality;
     }
 
     function loadProfileString(profileString){
diff --git a/app/qml/PreprocessedTerminal.qml b/app/qml/PreprocessedTerminal.qml
index 49f9b84..c8e9b29 100644
--- a/app/qml/PreprocessedTerminal.qml
+++ b/app/qml/PreprocessedTerminal.qml
@@ -303,14 +303,15 @@ Item{
     //  BLOOM  ////////////////////////////////////////////////////////////////
 
     Loader{
+        property real scaling: shadersettings.bloom_quality
         id: bloomEffectLoader
         active: mBloom != 0
-        anchors.fill: parent
+        width: parent.width * scaling
+        height: parent.height * scaling
         sourceComponent: FastBlur{
-            radius: 48
+            radius: 48 * scaling
             source: kterminal
             transparentBorder: true
-            smooth: false
         }
     }
     Loader{
@@ -319,7 +320,7 @@ Item{
         sourceComponent: ShaderEffectSource{
             sourceItem: bloomEffectLoader.item
             hideSource: true
-            smooth: false
+            smooth: true
         }
     }
 
diff --git a/app/qml/SettingsPerformanceTab.qml b/app/qml/SettingsPerformanceTab.qml
index 16ae7f1..a0963b8 100644
--- a/app/qml/SettingsPerformanceTab.qml
+++ b/app/qml/SettingsPerformanceTab.qml
@@ -50,7 +50,7 @@ Tab{
                     value: shadersettings.fps !== 0 ? shadersettings.fps : 60
                 }
                 Text{text: slider.value}
-                Text{text: qsTr("Texture quality")}
+                Text{text: qsTr("Texture Quality")}
                 Slider{
                     Layout.fillWidth: true
                     id: txtslider
@@ -77,13 +77,12 @@ Tab{
                 property var valsStrings: [
                     qsTr("Low"),
                     qsTr("Medium"),
-                    qsTr("High"),
-                    qsTr("Very high")
+                    qsTr("High")
                 ]
 
                 onValsIndexChanged: shadersettings.scanline_quality = vals[valsIndex];
 
-                Text{text: qsTr("Scanline quality")}
+                Text{text: qsTr("Scanlines Quality")}
                 Slider{
                     id: scanlineQualitySlider
                     Layout.fillWidth: true
@@ -105,16 +104,56 @@ Tab{
                 }
             }
         }
+        GroupBox{
+            title: qsTr("Bloom")
+            Layout.fillWidth: true
+            anchors.left: parent.left
+            anchors.right: parent.right
+            GridLayout{
+                id: bloomQualityContainer
+                anchors.fill: parent
+                columns: 3
+                property alias valsIndex: bloomQualitySlider.value
+                property var vals: [0.25, 0.50, 1.00]
+                property var valsStrings: [
+                    qsTr("Low"),
+                    qsTr("Medium"),
+                    qsTr("High")
+                ]
+
+                onValsIndexChanged: shadersettings.bloom_quality = vals[valsIndex];
+
+                Text{text: qsTr("Bloom Quality")}
+                Slider{
+                    id: bloomQualitySlider
+                    Layout.fillWidth: true
+                    onValueChanged: parent.valsIndex = value;
+                    stepSize: 1
+                    Component.onCompleted: {
+                        minimumValue = 0;
+                        maximumValue = 2;
+                        value = parent.vals.indexOf(shadersettings.bloom_quality);
+                    }
+                    Connections{
+                        target: shadersettings
+                        onBloom_qualityChanged:
+                            bloomQualityContainer.valsIndex = bloomQualityContainer.vals.indexOf(shadersettings.bloom_quality);
+                    }
+                }
+                Text{
+                    text: parent.valsStrings[parent.valsIndex];
+                }
+            }
+        }
         GroupBox{
             title: qsTr("Frame")
             Layout.fillWidth: true
             anchors.left: parent.left
             anchors.right: parent.right
             CheckBox{
-                checked: !shadersettings._frameReflections
-                text: qsTr("Disable reflections")
-                onCheckedChanged: shadersettings._frameReflections = !checked
-                enabled: shadersettings.reflectionsAllowed
+                checked: shadersettings._frameReflections
+                text: qsTr("Frame Reflections")
+                onCheckedChanged: shadersettings._frameReflections = checked
             }
         }
     }