File indexing completed on 2024-04-28 16:44:34

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 #include "decorationsettings.h"
0007 #include "private/decorationbridge.h"
0008 #include "private/decorationsettingsprivate.h"
0009 
0010 #include <QFontMetrics>
0011 
0012 namespace KDecoration2
0013 {
0014 DecorationSettings::DecorationSettings(DecorationBridge *bridge, QObject *parent)
0015     : QObject(parent)
0016     , d(bridge->settings(this))
0017 {
0018     auto updateUnits = [this] {
0019         int gridUnit = QFontMetrics(font()).boundingRect(QLatin1Char('M')).height();
0020         ;
0021         if (gridUnit % 2 != 0) {
0022             gridUnit++;
0023         }
0024         if (gridUnit != d->gridUnit()) {
0025             d->setGridUnit(gridUnit);
0026             Q_EMIT gridUnitChanged(gridUnit);
0027         }
0028         if (gridUnit != d->largeSpacing()) {
0029             d->setSmallSpacing(qMax(2, (int)(gridUnit / 4))); // 1/4 of gridUnit, at least 2
0030             d->setLargeSpacing(gridUnit); // msize.height
0031             Q_EMIT spacingChanged();
0032         }
0033     };
0034     updateUnits();
0035     connect(this, &DecorationSettings::fontChanged, this, updateUnits);
0036 }
0037 
0038 DecorationSettings::~DecorationSettings() = default;
0039 
0040 #define DELEGATE(type, method)                                                                                                                                 \
0041     type DecorationSettings::method() const                                                                                                                    \
0042     {                                                                                                                                                          \
0043         return d->method();                                                                                                                                    \
0044     }
0045 
0046 DELEGATE(bool, isOnAllDesktopsAvailable)
0047 DELEGATE(bool, isAlphaChannelSupported)
0048 DELEGATE(bool, isCloseOnDoubleClickOnMenu)
0049 DELEGATE(QVector<DecorationButtonType>, decorationButtonsLeft)
0050 DELEGATE(QVector<DecorationButtonType>, decorationButtonsRight)
0051 DELEGATE(BorderSize, borderSize)
0052 DELEGATE(QFont, font)
0053 DELEGATE(QFontMetricsF, fontMetrics)
0054 DELEGATE(int, gridUnit)
0055 DELEGATE(int, smallSpacing)
0056 DELEGATE(int, largeSpacing)
0057 
0058 #undef DELEGATE
0059 
0060 }