Option to set Settings size at per screen level

--the Latte Settings window tries its best in order
to provide a nice experience concerning its width/height
ratio and a width size that is best for its contents.
There are cases that this fails so the user in the
best to set it right. Latte now provides two shortcuts
Meta+Scroll, that changes the width scale ratio and
Ctrl+Scroll, that changes the height scale ratio when
settings are in Basic mode.
The previous shortcuts must be applied when the mouse
is over the empty areas in the Settings View window.
pull/5/head
Michail Vourlakos 6 years ago
parent 6290ec33cf
commit 4048edc7f9

@ -58,6 +58,8 @@ UniversalSettings::UniversalSettings(KSharedConfig::Ptr config, QObject *parent)
connect(this, &UniversalSettings::screenTrackerIntervalChanged, this, &UniversalSettings::saveConfig); connect(this, &UniversalSettings::screenTrackerIntervalChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::showInfoWindowChanged, this, &UniversalSettings::saveConfig); connect(this, &UniversalSettings::showInfoWindowChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::versionChanged, this, &UniversalSettings::saveConfig); connect(this, &UniversalSettings::versionChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::screenScalesChanged, this, &UniversalSettings::saveScalesConfig);
} }
UniversalSettings::~UniversalSettings() UniversalSettings::~UniversalSettings()
@ -75,6 +77,9 @@ void UniversalSettings::load()
setAutostart(true); setAutostart(true);
} }
//! init screen scales
m_screenScalesGroup = m_universalGroup.group("ScreenScales");
//! load configuration //! load configuration
loadConfig(); loadConfig();
@ -374,6 +379,42 @@ void UniversalSettings::setMouseSensitivity(Types::MouseSensitivity sensitivity)
emit mouseSensitivityChanged(); emit mouseSensitivityChanged();
} }
float UniversalSettings::screenWidthScale(QString screenName) const
{
if (!m_screenScales.contains(screenName)) {
return 1;
}
return m_screenScales[screenName].first;
}
float UniversalSettings::screenHeightScale(QString screenName) const
{
if (!m_screenScales.contains(screenName)) {
return 1;
}
return m_screenScales[screenName].second;
}
void UniversalSettings::setScreenScales(QString screenName, float widthScale, float heightScale)
{
if (!m_screenScales.contains(screenName)) {
m_screenScales[screenName].first = widthScale;
m_screenScales[screenName].second = heightScale;
} else {
if (m_screenScales[screenName].first == widthScale
&& m_screenScales[screenName].second == heightScale) {
return;
}
m_screenScales[screenName].first = widthScale;
m_screenScales[screenName].second = heightScale;
}
emit screenScalesChanged();
}
void UniversalSettings::loadConfig() void UniversalSettings::loadConfig()
{ {
m_version = m_universalGroup.readEntry("version", 1); m_version = m_universalGroup.readEntry("version", 1);
@ -389,6 +430,8 @@ void UniversalSettings::loadConfig()
m_showInfoWindow = m_universalGroup.readEntry("showInfoWindow", true); m_showInfoWindow = m_universalGroup.readEntry("showInfoWindow", true);
m_memoryUsage = static_cast<Types::LayoutsMemoryUsage>(m_universalGroup.readEntry("memoryUsage", (int)Types::SingleLayout)); m_memoryUsage = static_cast<Types::LayoutsMemoryUsage>(m_universalGroup.readEntry("memoryUsage", (int)Types::SingleLayout));
m_mouseSensitivity = static_cast<Types::MouseSensitivity>(m_universalGroup.readEntry("mouseSensitivity", (int)Types::HighSensitivity)); m_mouseSensitivity = static_cast<Types::MouseSensitivity>(m_universalGroup.readEntry("mouseSensitivity", (int)Types::HighSensitivity));
loadScalesConfig();
} }
void UniversalSettings::saveConfig() void UniversalSettings::saveConfig()
@ -445,4 +488,26 @@ QScreen *UniversalSettings::atScreens(QQmlListProperty<QScreen> *property, int i
return qGuiApp->screens().at(index); return qGuiApp->screens().at(index);
} }
void UniversalSettings::loadScalesConfig()
{
for (const auto &screenName : m_screenScalesGroup.keyList()) {
QString scalesStr = m_screenScalesGroup.readEntry(screenName, QString());
QStringList scales = scalesStr.split(";");
if (scales.count() == 2) {
m_screenScales[screenName] = qMakePair(scales[0].toFloat(), scales[1].toFloat());
}
}
}
void UniversalSettings::saveScalesConfig()
{
for (const auto &screenName : m_screenScales.keys()) {
QStringList scales;
scales << QString::number(m_screenScales[screenName].first) << QString::number(m_screenScales[screenName].second);
m_screenScalesGroup.writeEntry(screenName, scales.join(";"));
}
m_screenScalesGroup.sync();
}
} }

@ -29,6 +29,7 @@
#include <QObject> #include <QObject>
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <QHash> #include <QHash>
#include <QPair>
#include <QPointer> #include <QPointer>
#include <QQmlListProperty> #include <QQmlListProperty>
#include <QScreen> #include <QScreen>
@ -38,8 +39,12 @@
#include <KSharedConfig> #include <KSharedConfig>
namespace Latte { namespace Latte {
class LayoutManager; class LayoutManager;
}
namespace Latte {
//width_scale, height_scale
typedef QPair<float, float> ScreenScales;
//! This class holds all the settings that are universally available //! This class holds all the settings that are universally available
//! independent of layouts //! independent of layouts
@ -113,6 +118,10 @@ public slots:
Q_INVOKABLE QString splitterIconPath(); Q_INVOKABLE QString splitterIconPath();
Q_INVOKABLE QString trademarkIconPath(); Q_INVOKABLE QString trademarkIconPath();
Q_INVOKABLE float screenWidthScale(QString screenName) const;
Q_INVOKABLE float screenHeightScale(QString screenName) const;
Q_INVOKABLE void setScreenScales(QString screenName, float widthScale, float heightScale);
signals: signals:
void autostartChanged(); void autostartChanged();
void canDisableBordersChanged(); void canDisableBordersChanged();
@ -125,13 +134,16 @@ signals:
void layoutsMemoryUsageChanged(); void layoutsMemoryUsageChanged();
void metaPressAndHoldEnabledChanged(); void metaPressAndHoldEnabledChanged();
void mouseSensitivityChanged(); void mouseSensitivityChanged();
void screenScalesChanged();
void screenTrackerIntervalChanged(); void screenTrackerIntervalChanged();
void showInfoWindowChanged(); void showInfoWindowChanged();
void versionChanged(); void versionChanged();
private slots: private slots:
void loadConfig(); void loadConfig();
void loadScalesConfig();
void saveConfig(); void saveConfig();
void saveScalesConfig();
private: private:
void cleanupSettings(); void cleanupSettings();
@ -163,8 +175,12 @@ private:
Types::LayoutsMemoryUsage m_memoryUsage; Types::LayoutsMemoryUsage m_memoryUsage;
Types::MouseSensitivity m_mouseSensitivity{Types::HighSensitivity}; Types::MouseSensitivity m_mouseSensitivity{Types::HighSensitivity};
//! ScreenName, <width_scale, height_scale>
QHash<QString, ScreenScales> m_screenScales;
QPointer<Latte::Corona> m_corona; QPointer<Latte::Corona> m_corona;
KConfigGroup m_screenScalesGroup;
KConfigGroup m_universalGroup; KConfigGroup m_universalGroup;
KSharedConfig::Ptr m_config; KSharedConfig::Ptr m_config;

@ -245,14 +245,6 @@
<entry name="configurationSticker" type="Bool"> <entry name="configurationSticker" type="Bool">
<default>false</default> <default>false</default>
</entry> </entry>
<entry name="windowWidthScale" type="Int">
<default>100</default>
<label>user set dock settings window width scale</label>
</entry>
<entry name="windowHeightScale" type="Int">
<default>100</default>
<label>user set dock settings window height scale</label>
</entry>
<!-- Animations --> <!-- Animations -->
<entry name="animationsEnabled" type="Bool"> <entry name="animationsEnabled" type="Bool">
<default>true</default> <default>true</default>

@ -62,13 +62,13 @@ FocusScope {
property int proposedWidth: 0.84 * proposedHeight + units.smallSpacing * 2 property int proposedWidth: 0.84 * proposedHeight + units.smallSpacing * 2
property int proposedHeight: 36 * theme.mSize(theme.defaultFont).height property int proposedHeight: 36 * theme.mSize(theme.defaultFont).height
//! user set scales based on its preference, e.g. 96% of the proposed size
property int userScaleWidth: plasmoid.configuration.windowWidthScale
property int userScaleHeight: plasmoid.configuration.windowHeightScale
//! chosen size to be applied, if the user has set or not a different scale for the settings window //! chosen size to be applied, if the user has set or not a different scale for the settings window
property int chosenWidth: userScaleWidth !== 100 ? (userScaleWidth/100) * proposedWidth : proposedWidth property int chosenWidth: userScaleWidth !== 1 ? userScaleWidth * proposedWidth : proposedWidth
property int chosenHeight: userScaleHeight !== 100 ? (userScaleHeight/100) * heightLevel * proposedHeight : heightLevel * proposedHeight property int chosenHeight: userScaleHeight !== 1 ? userScaleHeight * heightLevel * proposedHeight : heightLevel * proposedHeight
//! user set scales based on its preference, e.g. 96% of the proposed size
property real userScaleWidth: 1
property real userScaleHeight: 1
readonly property real heightLevel: (dialog.expertLevel ? 100 : 1) readonly property real heightLevel: (dialog.expertLevel ? 100 : 1)
@ -105,6 +105,20 @@ FocusScope {
} }
} }
Component.onCompleted: {
updateScales();
}
Connections {
target: latteView.positioner
onCurrentScreenNameChanged: dialog.updateScales();
}
function updateScales() {
userScaleWidth = universalSettings.screenWidthScale(latteView.positioner.currentScreenName);
userScaleHeight = universalSettings.screenHeightScale(latteView.positioner.currentScreenName);
}
PlasmaCore.FrameSvgItem{ PlasmaCore.FrameSvgItem{
anchors.fill: parent anchors.fill: parent
imagePath: "dialogs/background" imagePath: "dialogs/background"
@ -117,8 +131,10 @@ FocusScope {
hoverEnabled: true hoverEnabled: true
property bool blockWheel: false property bool blockWheel: false
property bool updatingWidthScale: false
property bool updatingHeightScale: false
property bool wheelTriggeredOnce: false property bool wheelTriggeredOnce: false
property int scaleStep: 4 property real scaleStep: 0.04
onContainsMouseChanged: { onContainsMouseChanged: {
if (!containsMouse) { if (!containsMouse) {
@ -127,10 +143,16 @@ FocusScope {
} }
onWheel: { onWheel: {
if (blockWheel || !(wheel.modifiers & Qt.MetaModifier)){ var metaModifier = (wheel.modifiers & Qt.MetaModifier);
var ctrlModifier = (wheel.modifiers & Qt.ControlModifier);
if (blockWheel || !(metaModifier || ctrlModifier)){
return; return;
} }
updatingWidthScale = metaModifier || (dialog.expertLevel && ctrlModifier);
updatingHeightScale = !dialog.expertLevel && ctrlModifier;
blockWheel = true; blockWheel = true;
wheelTriggeredOnce = true; wheelTriggeredOnce = true;
scrollDelayer.start(); scrollDelayer.start();
@ -139,13 +161,27 @@ FocusScope {
//positive direction //positive direction
if (angle > 12) { if (angle > 12) {
plasmoid.configuration.windowWidthScale = plasmoid.configuration.windowWidthScale + scaleStep; var scales;
plasmoid.configuration.windowHeightScale = plasmoid.configuration.windowHeightScale + scaleStep; if (updatingWidthScale) {
userScaleWidth = userScaleWidth + scaleStep;
}
if (updatingHeightScale) {
userScaleHeight = userScaleHeight + scaleStep;
}
universalSettings.setScreenScales(latteView.positioner.currentScreenName, userScaleWidth, userScaleHeight);
viewConfig.syncGeometry(); viewConfig.syncGeometry();
//negative direction //negative direction
} else if (angle < -12) { } else if (angle < -12) {
plasmoid.configuration.windowWidthScale = plasmoid.configuration.windowWidthScale - scaleStep; if (updatingWidthScale) {
plasmoid.configuration.windowHeightScale = plasmoid.configuration.windowHeightScale - scaleStep; userScaleWidth = userScaleWidth - scaleStep;
}
if (updatingHeightScale) {
userScaleHeight = userScaleHeight - scaleStep;
}
universalSettings.setScreenScales(latteView.positioner.currentScreenName, userScaleWidth, userScaleHeight);
viewConfig.syncGeometry(); viewConfig.syncGeometry();
} }
} }
@ -154,7 +190,9 @@ FocusScope {
PlasmaComponents.Label{ PlasmaComponents.Label{
anchors.top: parent.top anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
text: i18nc("view settings window scale","Window scale at %0%").arg(userScaleWidth) text: backgroundMouseArea.updatingWidthScale ?
i18nc("view settings width scale","Width scale at %0%").arg(userScaleWidth * 100) :
i18nc("view settings height scale","Height scale at %0%").arg(userScaleHeight * 100)
visible: backgroundMouseArea.containsMouse && backgroundMouseArea.wheelTriggeredOnce visible: backgroundMouseArea.containsMouse && backgroundMouseArea.wheelTriggeredOnce
} }

Loading…
Cancel
Save