Commit e95d1dc9 authored by Méven Car's avatar Méven Car Committed by Méven Car

KCM/Compositing: Use KConfig XT in UI

Summary:
Use KConfig XT to manage most fields of the KCM.
Simplify code.

Depends on D27955

Test Plan: No functional change

Reviewers: #kwin, ervin, crossi, bport, hchain, zzag

Reviewed By: #kwin, ervin, bport, zzag

Subscribers: anthonyfieroni, zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D27988
parent a94be708
......@@ -10,7 +10,6 @@ remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_STRICT_ITERATORS -DQT_NO_CAST_FR
set(kwincompositing_SRC
main.cpp
compositing.cpp
)
kconfig_add_kcfg_files(kwincompositing_SRC kwincompositing_setting.kcfgc GENERATE_MOC)
......
This diff is collapsed.
/**************************************************************************
* KWin - the KDE window manager *
* This file is part of the KDE project. *
* *
* Copyright (C) 2013 Antonis Tsiapaliokas <kok3rs@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
**************************************************************************/
#ifndef COMPOSITING_H
#define COMPOSITING_H
#include <QAbstractItemModel>
#include <QObject>
#include <KSharedConfig>
class OrgKdeKwinCompositingInterface;
class KWinCompositingSetting;
namespace KWin {
namespace Compositing {
class OpenGLPlatformInterfaceModel;
class Compositing : public QObject
{
Q_OBJECT
Q_PROPERTY(int animationSpeed READ animationSpeed WRITE setAnimationSpeed NOTIFY animationSpeedChanged)
Q_PROPERTY(int windowThumbnail READ windowThumbnail WRITE setWindowThumbnail NOTIFY windowThumbnailChanged)
Q_PROPERTY(int glScaleFilter READ glScaleFilter WRITE setGlScaleFilter NOTIFY glScaleFilterChanged)
Q_PROPERTY(bool xrScaleFilter READ xrScaleFilter WRITE setXrScaleFilter NOTIFY xrScaleFilterChanged)
Q_PROPERTY(int glSwapStrategy READ glSwapStrategy WRITE setGlSwapStrategy NOTIFY glSwapStrategyChanged)
Q_PROPERTY(int compositingType READ compositingType WRITE setCompositingType NOTIFY compositingTypeChanged)
Q_PROPERTY(bool compositingEnabled READ compositingEnabled WRITE setCompositingEnabled NOTIFY compositingEnabledChanged)
Q_PROPERTY(KWin::Compositing::OpenGLPlatformInterfaceModel *openGLPlatformInterfaceModel READ openGLPlatformInterfaceModel CONSTANT)
Q_PROPERTY(int openGLPlatformInterface READ openGLPlatformInterface WRITE setOpenGLPlatformInterface NOTIFY openGLPlatformInterfaceChanged)
Q_PROPERTY(bool windowsBlockCompositing READ windowsBlockCompositing WRITE setWindowsBlockCompositing NOTIFY windowsBlockCompositingChanged)
Q_PROPERTY(bool compositingRequired READ compositingRequired CONSTANT)
public:
explicit Compositing(QObject *parent = nullptr);
Q_INVOKABLE bool OpenGLIsUnsafe() const;
Q_INVOKABLE bool OpenGLIsBroken();
Q_INVOKABLE void reenableOpenGLDetection();
qreal animationSpeed() const;
int windowThumbnail() const;
int glScaleFilter() const;
bool xrScaleFilter() const;
int glSwapStrategy() const;
int compositingType() const;
bool compositingEnabled() const;
int openGLPlatformInterface() const;
bool windowsBlockCompositing() const;
bool compositingRequired() const;
OpenGLPlatformInterfaceModel *openGLPlatformInterfaceModel() const;
void setAnimationSpeed(qreal speed);
void setWindowThumbnail(int index);
void setGlScaleFilter(int index);
void setXrScaleFilter(bool filter);
void setGlSwapStrategy(int strategy);
void setCompositingType(int index);
void setCompositingEnabled(bool enalbed);
void setOpenGLPlatformInterface(int interface);
void setWindowsBlockCompositing(bool set);
void save();
static bool isRunningPlasma();
public Q_SLOTS:
void load();
void defaults();
Q_SIGNALS:
void changed(bool changed);
void defaulted(bool defaulted);
void animationSpeedChanged(qreal);
void windowThumbnailChanged(int);
void glScaleFilterChanged(int);
void xrScaleFilterChanged(int);
void glSwapStrategyChanged(int);
void compositingTypeChanged(int);
void compositingEnabledChanged(bool);
void openGLPlatformInterfaceChanged(int);
void windowsBlockCompositingChanged(bool);
private Q_SLOTS:
void updateSettings();
private:
void applyValues();
qreal m_animationSpeed;
int m_windowThumbnail;
int m_glScaleFilter;
bool m_xrScaleFilter;
int m_glSwapStrategy;
int m_compositingType;
bool m_compositingEnabled;
OpenGLPlatformInterfaceModel *m_openGLPlatformInterfaceModel;
int m_openGLPlatformInterface;
bool m_windowsBlockCompositing;
bool m_windowsBlockingCompositing;
OrgKdeKwinCompositingInterface *m_compositingInterface;
KSharedConfigPtr m_config;
KWinCompositingSetting *m_settings;
};
struct CompositingData;
class CompositingType : public QAbstractItemModel
{
Q_OBJECT
Q_ENUMS(CompositingTypeIndex)
public:
enum CompositingTypeIndex {
OPENGL31_INDEX = 0,
OPENGL20_INDEX,
XRENDER_INDEX
};
enum CompositingTypeRoles {
NameRole = Qt::UserRole +1,
TypeRole = Qt::UserRole +2
};
explicit CompositingType(QObject *parent = nullptr);
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &child) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QHash< int, QByteArray > roleNames() const override;
Q_INVOKABLE int compositingTypeForIndex(int row) const;
Q_INVOKABLE int indexForCompositingType(int type) const;
private:
void generateCompositing();
QList<CompositingData> m_compositingList;
};
struct CompositingData {
QString name;
CompositingType::CompositingTypeIndex type;
};
class OpenGLPlatformInterfaceModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit OpenGLPlatformInterfaceModel(QObject *parent = nullptr);
~OpenGLPlatformInterfaceModel() override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QModelIndex indexForKey(const QString &key) const;
QHash< int, QByteArray > roleNames() const override;
private:
QStringList m_keys;
QStringList m_names;
};
}//end namespace Compositing
}//end namespace KWin
Q_DECLARE_METATYPE(KWin::Compositing::OpenGLPlatformInterfaceModel*)
#endif
......@@ -74,59 +74,125 @@ Alternatively, you might want to use the XRender backend instead.</string>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="animationSpeedLabel">
<item row="2" column="1">
<widget class="QCheckBox" name="kcfg_Enabled">
<property name="text">
<string>Animation speed:</string>
<string>Enable compositor on startup</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="glScaleFilterLabel">
<item row="3" column="0">
<widget class="QLabel" name="animationSpeedLabel">
<property name="text">
<string>Scale method:</string>
<string>Animation speed:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="glScaleFilter">
<item>
<property name="text">
<string>Crisp</string>
</property>
</item>
<item>
<property name="text">
<string>Smooth</string>
</property>
</item>
<item>
<property name="text">
<string>Accurate</string>
</property>
</item>
<item row="3" column="1">
<widget class="QWidget" name="animationSpeedControls" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSlider" name="animationDurationFactor">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>1</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="_3">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Very slow</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Instant</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="xrScaleFilterLabel">
<item row="5" column="0">
<widget class="QLabel" name="scaleMethodLabel">
<property name="text">
<string>Scale method:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="xrScaleFilter">
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<property name="text">
<string>Crisp</string>
</property>
<widget class="QComboBox" name="kcfg_XRenderSmoothScale">
<item>
<property name="text">
<string>Crisp</string>
</property>
</item>
<item>
<property name="text">
<string>Smooth (slower)</string>
</property>
</item>
</widget>
</item>
<item>
<property name="text">
<string>Smooth (slower)</string>
</property>
<widget class="QComboBox" name="kcfg_glTextureFilter">
<item>
<property name="text">
<string>Crisp</string>
</property>
</item>
<item>
<property name="text">
<string>Smooth</string>
</property>
</item>
<item>
<property name="text">
<string>Accurate</string>
</property>
</item>
</widget>
</item>
</widget>
</layout>
</item>
<item row="7" column="0" colspan="2">
<widget class="Line" name="line">
......@@ -143,7 +209,7 @@ Alternatively, you might want to use the XRender backend instead.</string>
</widget>
</item>
<item row="8" column="1">
<widget class="QComboBox" name="type"/>
<widget class="QComboBox" name="backend"/>
</item>
<item row="9" column="0" colspan="2">
<widget class="Line" name="line_2">
......@@ -160,7 +226,7 @@ Alternatively, you might want to use the XRender backend instead.</string>
</widget>
</item>
<item row="10" column="1">
<widget class="QComboBox" name="tearingPrevention">
<widget class="QComboBox" name="kcfg_glPreferBufferSwap">
<item>
<property name="text">
<string>Never</string>
......@@ -196,7 +262,7 @@ Alternatively, you might want to use the XRender backend instead.</string>
</widget>
</item>
<item row="11" column="1">
<widget class="QComboBox" name="windowThumbnail">
<widget class="QComboBox" name="kcfg_HiddenPreviews">
<item>
<property name="text">
<string>Never</string>
......@@ -215,7 +281,7 @@ Alternatively, you might want to use the XRender backend instead.</string>
</widget>
</item>
<item row="13" column="1">
<widget class="QCheckBox" name="windowsBlockCompositing">
<widget class="QCheckBox" name="kcfg_WindowsBlockCompositing">
<property name="toolTip">
<string>Applications can set a hint to block compositing when the window is open.
This brings performance improvements for e.g. games.
......@@ -226,75 +292,6 @@ Alternatively, you might want to use the XRender backend instead.</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QWidget" name="animationSpeedControls" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSlider" name="animationSpeed">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>1</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="_3">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Very slow</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Instant</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="compositingEnabled">
<property name="text">
<string>Enable compositor on startup</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
......
......@@ -13,16 +13,25 @@
<group name="Compositing">
<entry name="HiddenPreviews" type="Int">
<default>5</default>
<entry name="HiddenPreviews" type="Enum">
<default>Shown</default>
<choices>
<choice name="Off" value="4"/>
<choice name="Shown" value="5"/>
<choice name="Always" value="6"/>
</choices>
</entry>
<entry name="glTextureFilter" key="GLTextureFilter" type="Int">
<default>2</default>
<default>2</default>
</entry>
<entry name="XRenderSmoothScale" type="Bool">
<default>false</default>
<entry name="XRenderSmoothScale" type="Enum">
<default>Crisp</default>
<choices>
<choice name="Crisp" value="false" />
<choice name="Smooth" value="true" />
</choices>
</entry>
<entry name="Enabled" type="Bool">
......@@ -34,13 +43,13 @@
</entry>
<entry name="glPreferBufferSwap" key="GLPreferBufferSwap" type="Enum">
<default>a</default>
<default>AutoSwapStrategy</default>
<choices>
<choice name="n" />
<choice name="a" />
<choice name="e" />
<choice name="p" />
<choice name="c" />
<choice name="NoSwapEncourage" value="n" />
<choice name="AutoSwapStrategy" value="a" />
<choice name="ExtendDamage" value="e" />
<choice name="PaintFullScreen" value="p" />
<choice name="CopyFrontBuffer" value="c" />
</choices>
</entry>
......@@ -60,14 +69,6 @@
<default>true</default>
</entry>
<entry name="glPlatformInterface" key="GLPlatformInterface" type="String">
<default>glx</default>
<choices>
<choice name="glx" />
<choice name="egl" />
</choices>
</entry>
</group>
</kcfg>
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment