main.qml 9.31 KB
Newer Older
Marco Martin's avatar
Marco Martin committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
   Copyright (c) 2015 Antonis Tsiapaliokas <antonis.tsiapaliokas@kde.org>
   Copyright (c) 2017 Marco Martin <mart@kde.org>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License version 2 as published by the Free Software Foundation.

   This library 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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.
*/

import QtQuick 2.1
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0 as QtControls
import QtQuick.Dialogs 1.2 as QtDialogs
import org.kde.kirigami 2.3 as Kirigami
import org.kde.kcm 1.1 as KCM

KCM.SimpleKCM {
    id: root

    KCM.ConfigModule.quickHelp: i18n("Fonts")

    Kirigami.FormLayout {
        id: formLayout
        readonly property int maxImplicitWidth: Math.max(adjustAllFontsButton.implicitWidth, Math.max(antiAliasingComboBox.implicitWidth, Math.max(excludeField.implicitWidth, Math.max(subPixelCombo.implicitWidth, hintingCombo.implicitWidth))))

        QtControls.Button {
            id: adjustAllFontsButton
            Layout.preferredWidth: formLayout.maxImplicitWidth
            text: i18n("&Adjust All Fonts...")

            onClicked: kcm.adjustAllFonts();
        }

        FontWidget {
            id: generalFontWidget
            label: i18n("General:")
            category: "generalFont"
            font: kcm.generalFont
        }
        FontWidget {
            label: i18n("Fixed width:")
            category: "fixedWidthFont"
            font: kcm.fixedWidthFont
        }
        FontWidget {
            label: i18n("Small:")
            category: "smallFont"
            font: kcm.smallFont
        }
        FontWidget {
            label: i18n("Toolbar:")
            category: "toolbarFont"
            font: kcm.toolbarFont
        }
        FontWidget {
            label: i18n("Menu:")
            category: "menuFont"
            font: kcm.menuFont
        }
        FontWidget {
            label: i18n("Window title:")
            category: "windowTitleFont"
            font: kcm.windowTitleFont
        }
        
        Kirigami.Separator {
            Kirigami.FormData.isSection: true
        }

        QtControls.ComboBox {
            id: antiAliasingComboBox
            Layout.preferredWidth: formLayout.maxImplicitWidth
            Kirigami.FormData.label: i18n("Use anti-aliasing:")

            model: [i18n("Enabled"), i18n("Vendor Default"), i18n("Disabled")]

            currentIndex: kcm.fontAASettings.antiAliasing
            onCurrentIndexChanged: kcm.fontAASettings.antiAliasing = antiAliasingComboBox.currentIndex
        }

        QtControls.CheckBox {
            id: excludeCheckBox
            checked: kcm.fontAASettings.exclude
            onCheckedChanged: kcm.fontAASettings.exclude = checked;
            text: i18n("Exclude range from anti-aliasing")
            Layout.fillWidth: true
            enabled: antiAliasingComboBox.currentIndex == 0
        }

        RowLayout {
            id: excludeField
            Layout.preferredWidth: formLayout.maxImplicitWidth
            enabled: antiAliasingComboBox.currentIndex == 0
            QtControls.SpinBox {
                id: excludeFromSpinBox
                stepSize: 1
                onValueChanged: kcm.fontAASettings.excludeFrom = value
                textFromValue: function(value, locale) { return i18n("%1 pt", value)}
                enabled: excludeCheckBox.checked
            }

            QtControls.Label {
                Layout.fillWidth: true
                horizontalAlignment: Text.AlignHCenter
                text: i18n("to")
            }

            QtControls.SpinBox {
                id: excludeToSpinBox
                stepSize: 1
                onValueChanged: kcm.fontAASettings.excludeTo = value
                textFromValue: function(value, locale) { return i18n("%1 pt", value)}
                enabled: excludeCheckBox.checked
            }
            Connections {
                target: kcm.fontAASettings
                onExcludeFromChanged: excludeFromSpinBox.value = kcm.fontAASettings.excludeFrom;
                onExcludeToChanged: excludeToSpinBox.value = kcm.fontAASettings.excludeTo;
            }
        }

        QtControls.ComboBox {
            id: subPixelCombo
            Layout.preferredWidth: formLayout.maxImplicitWidth
            Kirigami.FormData.label: i18n("Sub-pixel rendering type:")
            currentIndex: kcm.fontAASettings.subPixelCurrentIndex
            onCurrentIndexChanged: kcm.fontAASettings.subPixelCurrentIndex = currentIndex;
            model: kcm.fontAASettings.subPixelOptionsModel
            textRole: "display"
            enabled: antiAliasingComboBox.currentIndex == 0
Julian Wolff's avatar
Julian Wolff committed
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
            popup.height: popup.implicitHeight
            delegate: QtControls.ItemDelegate {
                id: subPixelDelegate
                onWidthChanged: {
                    subPixelCombo.popup.width = Math.max(subPixelCombo.popup.width, width)
                }
                contentItem: ColumnLayout {
                    id: subPixelLayout
                    Kirigami.Heading {
                        id: subPixelComboText
                        text: model.display
                        level: 5
                    }
                    Image {
                        id: subPixelComboImage
                        source: "image://preview/" + model.index + "_" + kcm.fontAASettings.hintingCurrentIndex + ".png"
                        // Setting sourceSize here is necessary as a workaround for QTBUG-38127
                        //
                        // With this bug, images requested from a QQuickImageProvider have an incorrect scale with devicePixelRatio != 1 when sourceSize is not set.
                        //
                        // TODO: Check if QTBUG-38127 is fixed and remove the next two lines.
                        sourceSize.width: 1
                        sourceSize.height: 1
                    }
                }
            }
Marco Martin's avatar
Marco Martin committed
167
168
169
170
171
172
173
174
175
176
177
        }

        QtControls.ComboBox {
            id: hintingCombo
            Layout.preferredWidth: formLayout.maxImplicitWidth
            Kirigami.FormData.label: i18n("Hinting style:")
            currentIndex: kcm.fontAASettings.hintingCurrentIndex
            onCurrentTextChanged: kcm.fontAASettings.hintingCurrentIndex = currentIndex;
            model: kcm.fontAASettings.hintingOptionsModel
            textRole: "display"
            enabled: antiAliasingComboBox.currentIndex == 0
Julian Wolff's avatar
Julian Wolff committed
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
            popup.height: popup.implicitHeight
            delegate: QtControls.ItemDelegate {
                id: hintingDelegate
                onWidthChanged: {
                    hintingCombo.popup.width = Math.max(hintingCombo.popup.width, width)
                }
                contentItem: ColumnLayout {
                    id: hintingLayout
                    Kirigami.Heading {
                        id: hintingComboText
                        text: model.display
                        level: 5
                    }
                    Image {
                        id: hintingComboImage
                        source: "image://preview/" + kcm.fontAASettings.subPixelCurrentIndex + "_" + model.index + ".png"
                        // Setting sourceSize here is necessary as a workaround for QTBUG-38127
                        //
                        // With this bug, images requested from a QQuickImageProvider have an incorrect scale with devicePixelRatio != 1 when sourceSize is not set.
                        //
                        // TODO: Check if QTBUG-38127 is fixed and remove the next two lines.
                        sourceSize.width: 1
                        sourceSize.height: 1
                    }
                }
            }
Marco Martin's avatar
Marco Martin committed
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
        }

        RowLayout {
            QtControls.CheckBox {
                id: dpiCheckBox
                checked: dpiSpinBox.value != 96
                text: i18n("Force Fonts DPI:")
                onCheckedChanged: {
                    if (!dpiCheckBox.checked) {
                        dpiSpinBox.enabled = false;
                        kcm.fontAASettings.dpi = 0;
                    } else {
                        dpiSpinBox.enabled = true;
                    }
                }
            }

            QtControls.SpinBox {
                id: dpiSpinBox
                stepSize: 24
                enabled: dpiCheckBox.checked
                value: kcm.fontAASettings.dpi
                onValueChanged: kcm.fontAASettings.dpi = dpiSpinBox.value
                to: 1000
                from: 96
            }
        }

        QtDialogs.FontDialog {
            id: fontDialog
            title: "Choose a font"
235
            modality: Qt.WindowModal
Marco Martin's avatar
Marco Martin committed
236
237
238
239
240
241
242
243
244
245
246
247
248
            property string currentCategory
            property bool adjustAllFonts: false
            onAccepted: {
                if (adjustAllFonts) {
                    kcm.adjustAllFonts(font);
                } else {
                    kcm[currentCategory] = font;
                }
            }
        }
    }
}