From c32758c4586882e9b3b09a241189388848b6c4c1 Mon Sep 17 00:00:00 2001 From: Antonis Tsiapaliokas Date: Thu, 22 Aug 2013 18:49:49 +0300 Subject: [PATCH] Add ComboBox for Compositing Type and for Graphics System --- kcmkwin/kwincompositing/compositing.cpp | 71 ++++++++++++++++++++++ kcmkwin/kwincompositing/compositing.h | 12 ++++ kcmkwin/kwincompositing/qml/EffectView.qml | 19 ++++++ 3 files changed, 102 insertions(+) diff --git a/kcmkwin/kwincompositing/compositing.cpp b/kcmkwin/kwincompositing/compositing.cpp index fd374e977b..efd8cf3f83 100644 --- a/kcmkwin/kwincompositing/compositing.cpp +++ b/kcmkwin/kwincompositing/compositing.cpp @@ -26,6 +26,8 @@ #include #include +#include + namespace KWin { namespace Compositing { @@ -59,5 +61,74 @@ bool Compositing::OpenGLIsBroken() { return false; } +void Compositing::syncConfig(int openGLType, int graphicsSystem) { + QString graphicsSystemType; + QString backend; + bool glLegacy; + bool glCore; + + + switch (openGLType) { + case OPENGL31_INDEX: + backend = "OpenGL"; + glLegacy = false; + glCore = true; + break; + case OPENGL20_INDEX: + backend = "OpenGL"; + glLegacy = false; + glCore = false; + break; + case OPENGL12_INDEX: + backend = "OpenGL"; + glLegacy = true; + glCore = false; + break; + case XRENDER_INDEX: + backend = "XRender"; + glLegacy = false; + glCore = false; + break; + } + + graphicsSystem == 0 ? graphicsSystemType = "native" : graphicsSystemType = "raster"; + + KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Compositing"); + kwinConfig.writeEntry("Backend", backend); + kwinConfig.writeEntry("GLLegacy", glLegacy); + kwinConfig.writeEntry("GLCore", glCore); + kwinConfig.writeEntry("GraphicsSystem", graphicsSystemType); + kwinConfig.sync(); +} + +int Compositing::currentOpenGLType() { + KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Compositing"); + QString backend = kwinConfig.readEntry("Backend", "OpenGL"); + bool glLegacy = kwinConfig.readEntry("GLLegacy", false); + bool glCore = kwinConfig.readEntry("GLCore", false); + int currentIndex = OPENGL20_INDEX; + + if (backend == "OpenGL") { + if (glLegacy) { + currentIndex = OPENGL12_INDEX; + } else if (glCore) { + currentIndex = OPENGL31_INDEX; + } else { + currentIndex = OPENGL20_INDEX; + } + } else { + currentIndex = XRENDER_INDEX; + } + + return currentIndex; +} + +int Compositing::currentGraphicsSystem() { + KConfigGroup kwinConfig(KSharedConfig::openConfig("kwinrc"), "Compositing"); + QString graphicsSystem = kwinConfig.readEntry("GraphicsSystem", "native"); + + return graphicsSystem == "native" ? 0 : 1; +} + }//end namespace Compositing }//end namespace KWin diff --git a/kcmkwin/kwincompositing/compositing.h b/kcmkwin/kwincompositing/compositing.h index c1c85958d2..6b91e333aa 100644 --- a/kcmkwin/kwincompositing/compositing.h +++ b/kcmkwin/kwincompositing/compositing.h @@ -35,6 +35,18 @@ public: Q_INVOKABLE bool OpenGLIsUnsafe(); Q_INVOKABLE bool OpenGLIsBroken(); + Q_INVOKABLE void syncConfig(int openGLType, int graphicsSystem); + Q_INVOKABLE int currentOpenGLType(); + Q_INVOKABLE int currentGraphicsSystem(); + +private: + + enum OpenGLTypeIndex { + OPENGL31_INDEX = 0, + OPENGL20_INDEX, + OPENGL12_INDEX, + XRENDER_INDEX + }; }; }//end namespace Compositing }//end namespace KWin diff --git a/kcmkwin/kwincompositing/qml/EffectView.qml b/kcmkwin/kwincompositing/qml/EffectView.qml index 4ff9e5414b..b84ea7788f 100644 --- a/kcmkwin/kwincompositing/qml/EffectView.qml +++ b/kcmkwin/kwincompositing/qml/EffectView.qml @@ -54,6 +54,24 @@ Item { onClicked: effectModel.enableWidnowManagement(windowManagement.checked) } + ComboBox { + id: openGLType + model: ["OpenGL 3.1", "OpenGL 2.1", "OpenGL 1.2", "XRender"] + currentIndex: compositing.currentOpenGLType() + anchors.top: windowManagement.bottom + anchors.left: col.right + onCurrentIndexChanged: apply.enabled = true + } + + ComboBox { + id: graphicsSystem + model: ["Native", "Raster"] + currentIndex: compositing.currentGraphicsSystem() + anchors.top: openGLType.bottom + anchors.left: col.right + onCurrentIndexChanged: apply.enabled = true + } + ColumnLayout { id: col height: parent.height @@ -122,6 +140,7 @@ Item { effectModel.syncConfig(); effectModel.reload(); apply.enabled = false; + compositing.syncConfig(openGLType.currentIndex, graphicsSystem.currentIndex); } }