EvanZhu0721 / 公开仓库
SBMS
SBMS complete the calculation rules for the default logical desktop topology relationship and the physical dimensions of the displays in the Windows multi-screen collaboration system.
文件
../ diagnostics.slint8.2 KBgeometry.slint10.0 KBmain.slint54.1 KBscreen-size.slint9.3 KBstream.slint9.4 KBui/pages/screen-size.slint9.3 KB
1
import { LineEdit } from "std-widgets.slint";2
import {3
BackButton,4
CompactComboBox,5
PageActionButton,6
} from "../controls.slint";7
import { MdTokens } from "../theme.slint";8
9
export component ScreenSizePage inherits FocusScope {10
in property <string> screen-size-target: "";11
in property <string> screen-size-native-mode: "";12
in property <string> screen-size-detected-mm: "Not reported";13
in property <string> screen-size-detected-inches: "";14
in-out property <string> screen-size-manual-inches: "";15
in-out property <int> screen-size-aspect-ratio: 0;16
in property <string> screen-size-effective-mm: "";17
in property <string> screen-size-effective-inches: "";18
in property <string> screen-size-source: "";19
in property <string> screen-size-error: "";20
in property <bool> screen-size-valid: true;21
in property <bool> screen-size-save-blocked: false;22
23
callback close-screen-size();24
callback screen-size-edited();25
callback reset-screen-size();26
callback reread-screen-size();27
callback save-screen-size();28
29
key-pressed(event) => {30
if event.text == Key.Escape {31
root.close-screen-size();32
return accept;33
}34
return reject;35
}36
37
Rectangle {38
width: parent.width;39
height: parent.height;40
background: MdTokens.surface;41
42
VerticalLayout {43
padding: MdTokens.space-2;44
spacing: MdTokens.space-1;45
46
HorizontalLayout {47
height: MdTokens.target;48
spacing: MdTokens.space-1;49
BackButton {50
accessible-label: "Back to mapping group";51
clicked => { root.close-screen-size(); }52
}53
Text {54
text: "Screen size";55
color: MdTokens.on-surface;56
font-size: MdTokens.type-title-large;57
font-weight: MdTokens.weight-medium;58
vertical-alignment: center;59
}60
}61
62
Rectangle {63
height: 92px;64
background: MdTokens.surface-container;65
border-radius: MdTokens.shape-medium;66
VerticalLayout {67
padding: 12px;68
spacing: 3px;69
Text {70
text: root.screen-size-target;71
color: MdTokens.on-surface;72
font-size: MdTokens.type-title-medium;73
font-weight: MdTokens.weight-medium;74
overflow: elide;75
}76
Text {77
text: "EDID · " + root.screen-size-detected-mm;78
color: MdTokens.on-surface-variant;79
font-size: MdTokens.type-body-medium;80
}81
Text {82
text: root.screen-size-detected-inches + " · " + root.screen-size-native-mode;83
color: MdTokens.on-surface-variant;84
font-size: MdTokens.type-body-small;85
overflow: elide;86
}87
}88
}89
90
Rectangle {91
height: 136px;92
background: MdTokens.surface-container;93
border-radius: MdTokens.shape-medium;94
VerticalLayout {95
padding: 12px;96
spacing: MdTokens.space-1;97
Text {98
text: "Manual override";99
color: MdTokens.on-surface;100
font-size: MdTokens.type-body-medium;101
font-weight: MdTokens.weight-medium;102
}103
HorizontalLayout {104
height: MdTokens.target;105
spacing: MdTokens.space-1;106
LineEdit {107
horizontal-stretch: 1;108
height: MdTokens.target;109
text <=> root.screen-size-manual-inches;110
placeholder-text: "Diagonal in";111
input-type: InputType.decimal;112
accessible-label: "Target display diagonal in inches";113
edited => { root.screen-size-edited(); }114
}115
CompactComboBox {116
width: 112px;117
height: MdTokens.target;118
model: ["Native", "16:9", "16:10", "3:2", "4:3", "21:9", "32:9"];119
current-index <=> root.screen-size-aspect-ratio;120
control-enabled: root.screen-size-manual-inches != "";121
field-label: "Target display physical aspect ratio";122
selected => { root.screen-size-edited(); }123
}124
}125
Text {126
text: "Diagonal and ratio determine the effective dimensions";127
color: MdTokens.on-surface-variant;128
font-size: MdTokens.type-body-small;129
overflow: elide;130
}131
}132
}133
134
Rectangle {135
height: 72px;136
background: root.screen-size-error == ""137
? MdTokens.primary-container : MdTokens.error-container;138
border-radius: MdTokens.shape-medium;139
VerticalLayout {140
padding: 12px;141
alignment: center;142
spacing: 3px;143
Text {144
text: root.screen-size-error == ""145
? "Effective · " + root.screen-size-effective-mm146
: "Check the value";147
color: root.screen-size-error == ""148
? MdTokens.on-primary-container : MdTokens.on-error-container;149
font-size: MdTokens.type-title-medium;150
font-weight: MdTokens.weight-medium;151
overflow: elide;152
}153
Text {154
text: root.screen-size-error == ""155
? root.screen-size-effective-inches + " · " + root.screen-size-source156
: root.screen-size-error;157
color: root.screen-size-error == ""158
? MdTokens.on-primary-container : MdTokens.on-error-container;159
font-size: MdTokens.type-body-small;160
overflow: elide;161
}162
}163
}164
165
Text {166
height: 32px;167
text: "Only virtual-resolution calculations use this value.";168
color: MdTokens.on-surface-variant;169
font-size: MdTokens.type-body-small;170
wrap: word-wrap;171
}172
173
Rectangle { vertical-stretch: 1; }174
175
HorizontalLayout {176
height: MdTokens.target;177
spacing: MdTokens.space-1;178
PageActionButton {179
text: "Reset";180
enabled: !root.screen-size-save-blocked;181
accessible-label: "Use detected EDID size";182
clicked => { root.reset-screen-size(); }183
}184
PageActionButton {185
text: "Re-read";186
accessible-label: "Read display EDID again";187
clicked => { root.reread-screen-size(); }188
}189
Rectangle { horizontal-stretch: 1; }190
PageActionButton {191
text: "Save";192
enabled: root.screen-size-valid && !root.screen-size-save-blocked;193
primary: true;194
accessible-label: "Save target display physical size";195
clicked => { root.save-screen-size(); }196
}197
}198
}199
}200
}201