mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-10 12:46:46 +00:00
Fixed issues introduced by upgrading to Qt 5.15. WIP: upgrade to Qt 6 WIP: QML fixes. [sklp-ci] WIP: macOS font fix. WIP: backend is a now a singleton. WIP: remove version number of import. WIP: fixed missing Action in qmldir. WIP: fixed errors on program exit. WIP: CMake detects host arch on mac if not specified.
143 lines
4.9 KiB
QML
143 lines
4.9 KiB
QML
// Copyright (c) 2022 Proton AG
|
|
//
|
|
// This file is part of Proton Mail Bridge.
|
|
//
|
|
// Proton Mail Bridge 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 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Proton Mail Bridge 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 Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Controls.impl
|
|
import QtQuick.Templates as T
|
|
|
|
import "." as Proton
|
|
|
|
T.Label {
|
|
id: root
|
|
|
|
property ColorScheme colorScheme
|
|
|
|
enum LabelType {
|
|
// weight 700, size 28, height 36
|
|
Heading,
|
|
// weight 700, size 20, height 24
|
|
Title,
|
|
// weight 400, size 18, height 26
|
|
Lead,
|
|
// weight 400, size 14, height 20, spacing 0.2
|
|
Body,
|
|
// weight 600, size 14, height 20, spacing 0.2
|
|
Body_semibold,
|
|
// weight 700, size 14, height 20, spacing 0.2
|
|
Body_bold,
|
|
// weight 400, size 12, height 16, spacing 0.4
|
|
Caption,
|
|
// weight 600, size 12, height 16, spacing 0.4
|
|
Caption_semibold,
|
|
// weight 700, size 12, height 16, spacing 0.4
|
|
Caption_bold
|
|
}
|
|
property int type: Proton.Label.LabelType.Body
|
|
|
|
color: root.enabled ? root.colorScheme.text_norm : root.colorScheme.text_disabled
|
|
linkColor: root.colorScheme.interaction_norm
|
|
palette.link: linkColor
|
|
|
|
font.family: ProtonStyle.font_family
|
|
lineHeightMode: Text.FixedHeight
|
|
|
|
font.weight: {
|
|
switch (root.type) {
|
|
case Proton.Label.LabelType.Heading:
|
|
return ProtonStyle.fontWeight_700
|
|
case Proton.Label.LabelType.Title:
|
|
return ProtonStyle.fontWeight_700
|
|
case Proton.Label.LabelType.Lead:
|
|
return ProtonStyle.fontWeight_400
|
|
case Proton.Label.LabelType.Body:
|
|
return ProtonStyle.fontWeight_400
|
|
case Proton.Label.LabelType.Body_semibold:
|
|
return ProtonStyle.fontWeight_600
|
|
case Proton.Label.LabelType.Body_bold:
|
|
return ProtonStyle.fontWeight_700
|
|
case Proton.Label.LabelType.Caption:
|
|
return ProtonStyle.fontWeight_400
|
|
case Proton.Label.LabelType.Caption_semibold:
|
|
return ProtonStyle.fontWeight_600
|
|
case Proton.Label.LabelType.Caption_bold:
|
|
return ProtonStyle.fontWeight_700
|
|
}
|
|
}
|
|
|
|
font.pixelSize: {
|
|
switch (root.type) {
|
|
case Proton.Label.LabelType.Heading:
|
|
return ProtonStyle.heading_font_size
|
|
case Proton.Label.LabelType.Title:
|
|
return ProtonStyle.title_font_size
|
|
case Proton.Label.LabelType.Lead:
|
|
return ProtonStyle.lead_font_size
|
|
case Proton.Label.LabelType.Body:
|
|
case Proton.Label.LabelType.Body_semibold:
|
|
case Proton.Label.LabelType.Body_bold:
|
|
return ProtonStyle.body_font_size
|
|
case Proton.Label.LabelType.Caption:
|
|
case Proton.Label.LabelType.Caption_semibold:
|
|
case Proton.Label.LabelType.Caption_bold:
|
|
return ProtonStyle.caption_font_size
|
|
}
|
|
}
|
|
|
|
lineHeight: {
|
|
switch (root.type) {
|
|
case Proton.Label.LabelType.Heading:
|
|
return ProtonStyle.heading_line_height
|
|
case Proton.Label.LabelType.Title:
|
|
return ProtonStyle.title_line_height
|
|
case Proton.Label.LabelType.Lead:
|
|
return ProtonStyle.lead_line_height
|
|
case Proton.Label.LabelType.Body:
|
|
case Proton.Label.LabelType.Body_semibold:
|
|
case Proton.Label.LabelType.Body_bold:
|
|
return ProtonStyle.body_line_height
|
|
case Proton.Label.LabelType.Caption:
|
|
case Proton.Label.LabelType.Caption_semibold:
|
|
case Proton.Label.LabelType.Caption_bold:
|
|
return ProtonStyle.caption_line_height
|
|
}
|
|
}
|
|
|
|
font.letterSpacing: {
|
|
switch (root.type) {
|
|
case Proton.Label.LabelType.Heading:
|
|
case Proton.Label.LabelType.Title:
|
|
case Proton.Label.LabelType.Lead:
|
|
return 0
|
|
case Proton.Label.LabelType.Body:
|
|
case Proton.Label.LabelType.Body_semibold:
|
|
case Proton.Label.LabelType.Body_bold:
|
|
return ProtonStyle.body_letter_spacing
|
|
case Proton.Label.LabelType.Caption:
|
|
case Proton.Label.LabelType.Caption_semibold:
|
|
case Proton.Label.LabelType.Caption_bold:
|
|
return ProtonStyle.caption_letter_spacing
|
|
}
|
|
}
|
|
|
|
verticalAlignment: Text.AlignBottom
|
|
|
|
function link(url, text) {
|
|
return `<a href="${url}">${text}</a>`
|
|
}
|
|
}
|