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 }