summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dist/qt_themes/qdarkstyle/LICENSE.md183
-rw-r--r--dist/qt_themes/qdarkstyle/style.qss607
m---------externals/dynarmic0
-rw-r--r--src/common/common_funcs.h4
-rw-r--r--src/common/logging/backend.cpp2
-rw-r--r--src/common/logging/log.h2
-rw-r--r--src/common/swap.h2
-rw-r--r--src/core/CMakeLists.txt4
-rw-r--r--src/core/file_sys/partition_filesystem.cpp5
-rw-r--r--src/core/hle/service/btm/btm.cpp121
-rw-r--r--src/core/hle/service/btm/btm.h15
-rw-r--r--src/core/hle/service/hid/hid.cpp18
-rw-r--r--src/core/hle/service/service.cpp6
-rw-r--r--src/core/hle/service/wlan/wlan.cpp172
-rw-r--r--src/core/hle/service/wlan/wlan.h15
-rw-r--r--src/yuzu/about_dialog.cpp5
-rw-r--r--src/yuzu/aboutdialog.ui4
-rw-r--r--src/yuzu/configuration/configure_debug.cpp1
-rw-r--r--src/yuzu/configuration/configure_general.cpp1
-rw-r--r--src/yuzu/configuration/configure_graphics.cpp1
-rw-r--r--src/yuzu/configuration/configure_input.cpp2
-rw-r--r--src/yuzu/main.cpp5
22 files changed, 834 insertions, 341 deletions
diff --git a/dist/qt_themes/qdarkstyle/LICENSE.md b/dist/qt_themes/qdarkstyle/LICENSE.md
new file mode 100644
index 000000000..d8910aea5
--- /dev/null
+++ b/dist/qt_themes/qdarkstyle/LICENSE.md
@@ -0,0 +1,183 @@
1# License
2
3## The MIT License (MIT) - Code
4
5Copyright (c) 2013-2018 Colin Duquesnoy
6
7Permission is hereby granted, free of charge, to any person obtaining a copy
8of this software and associated documentation files (the "Software"), to deal
9in the Software without restriction, including without limitation the rights
10to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11copies of the Software, and to permit persons to whom the Software is
12furnished to do so, subject to the following conditions:
13
14The above copyright notice and this permission notice shall be included in
15all copies or substantial portions of the Software.
16
17THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23THE SOFTWARE.
24
25## Creative Commons Attribution International 4.0 - Images
26
27QDarkStyle (c) 2013-2018 Colin Duquesnoy
28
29Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
30
31### Using Creative Commons Public Licenses
32
33Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
34
35* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors).
36
37* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees).
38
39## Creative Commons Attribution 4.0 International Public License
40
41By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
42
43### Section 1 – Definitions
44
45a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
46
47b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
48
49c. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
50
51d. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
52
53e. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
54
55f. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
56
57g. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
58
59h. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License.
60
61i. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
62
63j. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
64
65k. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
66
67### Section 2 – Scope
68
69a. ___License grant.___
70
71 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
72
73 A. reproduce and Share the Licensed Material, in whole or in part; and
74
75 B. produce, reproduce, and Share Adapted Material.
76
77 2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
78
79 3. __Term.__ The term of this Public License is specified in Section 6(a).
80
81 4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
82
83 5. __Downstream recipients.__
84
85 A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
86
87 B. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
88
89 6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
90
91b. ___Other rights.___
92
93 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
94
95 2. Patent and trademark rights are not licensed under this Public License.
96
97 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
98
99### Section 3 – License Conditions
100
101Your exercise of the Licensed Rights is expressly made subject to the following conditions.
102
103a. ___Attribution.___
104
105 1. If You Share the Licensed Material (including in modified form), You must:
106
107 A. retain the following if it is supplied by the Licensor with the Licensed Material:
108
109 i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
110
111 ii. a copyright notice;
112
113 iii. a notice that refers to this Public License;
114
115 iv. a notice that refers to the disclaimer of warranties;
116
117 v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
118
119 B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
120
121 C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
122
123 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
124
125 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
126
127 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
128
129### Section 4 – Sui Generis Database Rights
130
131Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
132
133a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
134
135b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
136
137c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
138
139For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
140
141### Section 5 – Disclaimer of Warranties and Limitation of Liability
142
143a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__
144
145b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__
146
147c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
148
149### Section 6 – Term and Termination
150
151a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
152
153b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
154
155 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
156
157 2. upon express reinstatement by the Licensor.
158
159 For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
160
161c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
162
163d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
164
165### Section 7 – Other Terms and Conditions
166
167a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
168
169b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
170
171### Section 8 – Interpretation
172
173a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
174
175b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
176
177c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
178
179d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
180
181> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
182>
183> Creative Commons may be contacted at creativecommons.org \ No newline at end of file
diff --git a/dist/qt_themes/qdarkstyle/style.qss b/dist/qt_themes/qdarkstyle/style.qss
index c8e50312a..399c38dce 100644
--- a/dist/qt_themes/qdarkstyle/style.qss
+++ b/dist/qt_themes/qdarkstyle/style.qss
@@ -1,40 +1,15 @@
1/* 1QToolTip {
2 * The MIT License (MIT)
3 *
4 * Copyright (c) <2013-2014> <Colin Duquesnoy>
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24QToolTip
25{
26 border: 1px solid #76797C; 2 border: 1px solid #76797C;
27 background-color: rgb(90, 102, 117);; 3 background-color: #5A7566;
28 color: white; 4 color: white;
29 padding: 5px; 5 padding: 0px; /*remove padding, for fix combobox tooltip.*/
30 opacity: 200; 6 opacity: 200;
31} 7}
32 8
33QWidget 9QWidget {
34{
35 color: #eff0f1; 10 color: #eff0f1;
36 background-color: #31363b; 11 background-color: #31363b;
37 selection-background-color:#3daee9; 12 selection-background-color: #3daee9;
38 selection-color: #eff0f1; 13 selection-color: #eff0f1;
39 background-clip: border; 14 background-clip: border;
40 border-image: none; 15 border-image: none;
@@ -42,43 +17,38 @@ QWidget
42 outline: 0; 17 outline: 0;
43} 18}
44 19
45QWidget:item:hover 20QWidget:item:hover {
46{
47 background-color: #18465d; 21 background-color: #18465d;
48 color: #eff0f1; 22 color: #eff0f1;
49} 23}
50 24
51QWidget:item:selected 25QWidget:item:selected {
52{
53 background-color: #18465d; 26 background-color: #18465d;
54} 27}
55 28
56QCheckBox 29QCheckBox {
57{
58 spacing: 5px; 30 spacing: 5px;
59 outline: none; 31 outline: none;
60 color: #eff0f1; 32 color: #eff0f1;
61 margin-bottom: 2px; 33 margin-bottom: 2px;
62} 34}
63 35
64QCheckBox:disabled 36QCheckBox:disabled {
65{
66 color: #76797C; 37 color: #76797C;
67} 38}
68 39
69QCheckBox::indicator, 40QCheckBox::indicator,
70QGroupBox::indicator 41QGroupBox::indicator {
71{
72 width: 18px; 42 width: 18px;
73 height: 18px; 43 height: 18px;
74} 44}
75QGroupBox::indicator 45
76{ 46QGroupBox::indicator {
77 margin-left: 2px; 47 margin-left: 2px;
78} 48}
79 49
80QCheckBox::indicator:unchecked 50QCheckBox::indicator:unchecked,
81{ 51QGroupBox::indicator:unchecked {
82 image: url(:/qss_icons/rc/checkbox_unchecked.png); 52 image: url(:/qss_icons/rc/checkbox_unchecked.png);
83} 53}
84 54
@@ -87,14 +57,13 @@ QCheckBox::indicator:unchecked:focus,
87QCheckBox::indicator:unchecked:pressed, 57QCheckBox::indicator:unchecked:pressed,
88QGroupBox::indicator:unchecked:hover, 58QGroupBox::indicator:unchecked:hover,
89QGroupBox::indicator:unchecked:focus, 59QGroupBox::indicator:unchecked:focus,
90QGroupBox::indicator:unchecked:pressed 60QGroupBox::indicator:unchecked:pressed {
91{ 61 border: none;
92 border: none;
93 image: url(:/qss_icons/rc/checkbox_unchecked_focus.png); 62 image: url(:/qss_icons/rc/checkbox_unchecked_focus.png);
94} 63}
95 64
96QCheckBox::indicator:checked 65QCheckBox::indicator:checked,
97{ 66QGroupBox::indicator:checked {
98 image: url(:/qss_icons/rc/checkbox_checked.png); 67 image: url(:/qss_icons/rc/checkbox_checked.png);
99} 68}
100 69
@@ -103,72 +72,60 @@ QCheckBox::indicator:checked:focus,
103QCheckBox::indicator:checked:pressed, 72QCheckBox::indicator:checked:pressed,
104QGroupBox::indicator:checked:hover, 73QGroupBox::indicator:checked:hover,
105QGroupBox::indicator:checked:focus, 74QGroupBox::indicator:checked:focus,
106QGroupBox::indicator:checked:pressed 75QGroupBox::indicator:checked:pressed {
107{ 76 border: none;
108 border: none;
109 image: url(:/qss_icons/rc/checkbox_checked_focus.png); 77 image: url(:/qss_icons/rc/checkbox_checked_focus.png);
110} 78}
111 79
112 80QCheckBox::indicator:indeterminate {
113QCheckBox::indicator:indeterminate
114{
115 image: url(:/qss_icons/rc/checkbox_indeterminate.png); 81 image: url(:/qss_icons/rc/checkbox_indeterminate.png);
116} 82}
117 83
118QCheckBox::indicator:indeterminate:focus, 84QCheckBox::indicator:indeterminate:focus,
119QCheckBox::indicator:indeterminate:hover, 85QCheckBox::indicator:indeterminate:hover,
120QCheckBox::indicator:indeterminate:pressed 86QCheckBox::indicator:indeterminate:pressed {
121{
122 image: url(:/qss_icons/rc/checkbox_indeterminate_focus.png); 87 image: url(:/qss_icons/rc/checkbox_indeterminate_focus.png);
123} 88}
124 89
125QCheckBox::indicator:checked:disabled, 90QCheckBox::indicator:checked:disabled,
126QGroupBox::indicator:checked:disabled 91QGroupBox::indicator:checked:disabled {
127{
128 image: url(:/qss_icons/rc/checkbox_checked_disabled.png); 92 image: url(:/qss_icons/rc/checkbox_checked_disabled.png);
129} 93}
130 94
131QCheckBox::indicator:unchecked:disabled, 95QCheckBox::indicator:unchecked:disabled,
132QGroupBox::indicator:unchecked:disabled 96QGroupBox::indicator:unchecked:disabled {
133{
134 image: url(:/qss_icons/rc/checkbox_unchecked_disabled.png); 97 image: url(:/qss_icons/rc/checkbox_unchecked_disabled.png);
135} 98}
136 99
137QRadioButton 100QRadioButton {
138{
139 spacing: 5px; 101 spacing: 5px;
140 outline: none; 102 outline: none;
141 color: #eff0f1; 103 color: #eff0f1;
142 margin-bottom: 2px; 104 margin-bottom: 2px;
143} 105}
144 106
145QRadioButton:disabled 107QRadioButton:disabled {
146{
147 color: #76797C; 108 color: #76797C;
148} 109}
149QRadioButton::indicator 110
150{ 111QRadioButton::indicator {
151 width: 21px; 112 width: 21px;
152 height: 21px; 113 height: 21px;
153} 114}
154 115
155QRadioButton::indicator:unchecked 116QRadioButton::indicator:unchecked {
156{
157 image: url(:/qss_icons/rc/radio_unchecked.png); 117 image: url(:/qss_icons/rc/radio_unchecked.png);
158} 118}
159 119
160
161QRadioButton::indicator:unchecked:hover, 120QRadioButton::indicator:unchecked:hover,
162QRadioButton::indicator:unchecked:focus, 121QRadioButton::indicator:unchecked:focus,
163QRadioButton::indicator:unchecked:pressed 122QRadioButton::indicator:unchecked:pressed {
164{
165 border: none; 123 border: none;
166 outline: none; 124 outline: none;
167 image: url(:/qss_icons/rc/radio_unchecked_focus.png); 125 image: url(:/qss_icons/rc/radio_unchecked_focus.png);
168} 126}
169 127
170QRadioButton::indicator:checked 128QRadioButton::indicator:checked {
171{
172 border: none; 129 border: none;
173 outline: none; 130 outline: none;
174 image: url(:/qss_icons/rc/radio_checked.png); 131 image: url(:/qss_icons/rc/radio_checked.png);
@@ -176,72 +133,60 @@ QRadioButton::indicator:checked
176 133
177QRadioButton::indicator:checked:hover, 134QRadioButton::indicator:checked:hover,
178QRadioButton::indicator:checked:focus, 135QRadioButton::indicator:checked:focus,
179QRadioButton::indicator:checked:pressed 136QRadioButton::indicator:checked:pressed {
180{
181 border: none; 137 border: none;
182 outline: none; 138 outline: none;
183 image: url(:/qss_icons/rc/radio_checked_focus.png); 139 image: url(:/qss_icons/rc/radio_checked_focus.png);
184} 140}
185 141
186QRadioButton::indicator:checked:disabled 142QRadioButton::indicator:checked:disabled {
187{
188 outline: none; 143 outline: none;
189 image: url(:/qss_icons/rc/radio_checked_disabled.png); 144 image: url(:/qss_icons/rc/radio_checked_disabled.png);
190} 145}
191 146
192QRadioButton::indicator:unchecked:disabled 147QRadioButton::indicator:unchecked:disabled {
193{
194 image: url(:/qss_icons/rc/radio_unchecked_disabled.png); 148 image: url(:/qss_icons/rc/radio_unchecked_disabled.png);
195} 149}
196 150
197 151QMenuBar {
198QMenuBar
199{
200 background-color: #31363b; 152 background-color: #31363b;
201 color: #eff0f1; 153 color: #eff0f1;
202} 154}
203 155
204QMenuBar::item 156QMenuBar::item {
205{
206 background: transparent; 157 background: transparent;
207} 158}
208 159
209QMenuBar::item:selected 160QMenuBar::item:selected {
210{
211 background: transparent; 161 background: transparent;
212 border: 1px solid #76797C; 162 border: 1px solid #76797C;
213} 163}
214 164
215QMenuBar::item:pressed 165QMenuBar::item:pressed {
216{
217 border: 1px solid #76797C; 166 border: 1px solid #76797C;
218 background-color: #3daee9; 167 background-color: #3daee9;
219 color: #eff0f1; 168 color: #eff0f1;
220 margin-bottom:-1px; 169 margin-bottom: -1px;
221 padding-bottom:1px; 170 padding-bottom: 1px;
222} 171}
223 172
224QMenu 173QMenu {
225{
226 border: 1px solid #76797C; 174 border: 1px solid #76797C;
227 color: #eff0f1; 175 color: #eff0f1;
228 margin: 2px; 176 margin: 2px;
229} 177}
230 178
231QMenu::icon 179QMenu::icon {
232{
233 margin: 5px; 180 margin: 5px;
234} 181}
235 182
236QMenu::item 183QMenu::item {
237{
238 padding: 5px 30px 5px 30px; 184 padding: 5px 30px 5px 30px;
239 margin-left: 5px; 185 border: 1px solid transparent;
240 border: 1px solid transparent; /* reserve space for selection border */ 186 /* reserve space for selection border */
241} 187}
242 188
243QMenu::item:selected 189QMenu::item:selected {
244{
245 color: #eff0f1; 190 color: #eff0f1;
246} 191}
247 192
@@ -257,8 +202,10 @@ QMenu::indicator {
257 height: 18px; 202 height: 18px;
258} 203}
259 204
205
260/* non-exclusive indicator = check box style indicator 206/* non-exclusive indicator = check box style indicator
261 (see QActionGroup::setExclusive) */ 207 (see QActionGroup::setExclusive) */
208
262QMenu::indicator:non-exclusive:unchecked { 209QMenu::indicator:non-exclusive:unchecked {
263 image: url(:/qss_icons/rc/checkbox_unchecked.png); 210 image: url(:/qss_icons/rc/checkbox_unchecked.png);
264} 211}
@@ -275,7 +222,9 @@ QMenu::indicator:non-exclusive:checked:selected {
275 image: url(:/qss_icons/rc/checkbox_checked_disabled.png); 222 image: url(:/qss_icons/rc/checkbox_checked_disabled.png);
276} 223}
277 224
225
278/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */ 226/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */
227
279QMenu::indicator:exclusive:unchecked { 228QMenu::indicator:exclusive:unchecked {
280 image: url(:/qss_icons/rc/radio_unchecked.png); 229 image: url(:/qss_icons/rc/radio_unchecked.png);
281} 230}
@@ -297,33 +246,31 @@ QMenu::right-arrow {
297 image: url(:/qss_icons/rc/right_arrow.png) 246 image: url(:/qss_icons/rc/right_arrow.png)
298} 247}
299 248
300 249QWidget:disabled {
301QWidget:disabled
302{
303 color: #454545; 250 color: #454545;
304 background-color: #31363b; 251 background-color: #31363b;
305} 252}
306 253
307QAbstractItemView 254QAbstractItemView {
308{
309 alternate-background-color: #31363b; 255 alternate-background-color: #31363b;
310 color: #eff0f1; 256 color: #eff0f1;
311 border: 1px solid 3A3939; 257 border: 1px solid #3A3939;
312 border-radius: 2px; 258 border-radius: 2px;
313} 259}
314 260
315QWidget:focus, QMenuBar:focus 261QWidget:focus,
316{ 262QMenuBar:focus {
317 border: 1px solid #3daee9; 263 border: 1px solid #3daee9;
318} 264}
319 265
320QTabWidget:focus, QCheckBox:focus, QRadioButton:focus, QSlider:focus 266QTabWidget:focus,
321{ 267QCheckBox:focus,
268QRadioButton:focus,
269QSlider:focus {
322 border: none; 270 border: none;
323} 271}
324 272
325QLineEdit 273QLineEdit {
326{
327 background-color: #232629; 274 background-color: #232629;
328 padding: 5px; 275 padding: 5px;
329 border-style: solid; 276 border-style: solid;
@@ -332,13 +279,12 @@ QLineEdit
332 color: #eff0f1; 279 color: #eff0f1;
333} 280}
334 281
335QAbstractItemView QLineEdit 282QAbstractItemView QLineEdit {
336{
337 padding: 0; 283 padding: 0;
338} 284}
339 285
340QGroupBox { 286QGroupBox {
341 border:1px solid #76797C; 287 border: 1px solid #76797C;
342 border-radius: 2px; 288 border-radius: 2px;
343 margin-top: 20px; 289 margin-top: 20px;
344} 290}
@@ -351,15 +297,13 @@ QGroupBox::title {
351 padding-top: 10px; 297 padding-top: 10px;
352} 298}
353 299
354QAbstractScrollArea 300QAbstractScrollArea {
355{
356 border-radius: 2px; 301 border-radius: 2px;
357 border: 1px solid #76797C; 302 border: 1px solid #76797C;
358 background-color: transparent; 303 background-color: transparent;
359} 304}
360 305
361QScrollBar:horizontal 306QScrollBar:horizontal {
362{
363 height: 15px; 307 height: 15px;
364 margin: 3px 15px 3px 15px; 308 margin: 3px 15px 3px 15px;
365 border: 1px transparent #2A2929; 309 border: 1px transparent #2A2929;
@@ -367,15 +311,13 @@ QScrollBar:horizontal
367 background-color: #2A2929; 311 background-color: #2A2929;
368} 312}
369 313
370QScrollBar::handle:horizontal 314QScrollBar::handle:horizontal {
371{
372 background-color: #605F5F; 315 background-color: #605F5F;
373 min-width: 5px; 316 min-width: 5px;
374 border-radius: 4px; 317 border-radius: 4px;
375} 318}
376 319
377QScrollBar::add-line:horizontal 320QScrollBar::add-line:horizontal {
378{
379 margin: 0px 3px 0px 3px; 321 margin: 0px 3px 0px 3px;
380 border-image: url(:/qss_icons/rc/right_arrow_disabled.png); 322 border-image: url(:/qss_icons/rc/right_arrow_disabled.png);
381 width: 10px; 323 width: 10px;
@@ -384,8 +326,7 @@ QScrollBar::add-line:horizontal
384 subcontrol-origin: margin; 326 subcontrol-origin: margin;
385} 327}
386 328
387QScrollBar::sub-line:horizontal 329QScrollBar::sub-line:horizontal {
388{
389 margin: 0px 3px 0px 3px; 330 margin: 0px 3px 0px 3px;
390 border-image: url(:/qss_icons/rc/left_arrow_disabled.png); 331 border-image: url(:/qss_icons/rc/left_arrow_disabled.png);
391 height: 10px; 332 height: 10px;
@@ -394,8 +335,8 @@ QScrollBar::sub-line:horizontal
394 subcontrol-origin: margin; 335 subcontrol-origin: margin;
395} 336}
396 337
397QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on 338QScrollBar::add-line:horizontal:hover,
398{ 339QScrollBar::add-line:horizontal:on {
399 border-image: url(:/qss_icons/rc/right_arrow.png); 340 border-image: url(:/qss_icons/rc/right_arrow.png);
400 height: 10px; 341 height: 10px;
401 width: 10px; 342 width: 10px;
@@ -403,9 +344,8 @@ QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on
403 subcontrol-origin: margin; 344 subcontrol-origin: margin;
404} 345}
405 346
406 347QScrollBar::sub-line:horizontal:hover,
407QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on 348QScrollBar::sub-line:horizontal:on {
408{
409 border-image: url(:/qss_icons/rc/left_arrow.png); 349 border-image: url(:/qss_icons/rc/left_arrow.png);
410 height: 10px; 350 height: 10px;
411 width: 10px; 351 width: 10px;
@@ -413,19 +353,17 @@ QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on
413 subcontrol-origin: margin; 353 subcontrol-origin: margin;
414} 354}
415 355
416QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal 356QScrollBar::up-arrow:horizontal,
417{ 357QScrollBar::down-arrow:horizontal {
418 background: none; 358 background: none;
419} 359}
420 360
421 361QScrollBar::add-page:horizontal,
422QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal 362QScrollBar::sub-page:horizontal {
423{
424 background: none; 363 background: none;
425} 364}
426 365
427QScrollBar:vertical 366QScrollBar:vertical {
428{
429 background-color: #2A2929; 367 background-color: #2A2929;
430 width: 15px; 368 width: 15px;
431 margin: 15px 3px 15px 3px; 369 margin: 15px 3px 15px 3px;
@@ -433,15 +371,13 @@ QScrollBar:vertical
433 border-radius: 4px; 371 border-radius: 4px;
434} 372}
435 373
436QScrollBar::handle:vertical 374QScrollBar::handle:vertical {
437{
438 background-color: #605F5F; 375 background-color: #605F5F;
439 min-height: 5px; 376 min-height: 5px;
440 border-radius: 4px; 377 border-radius: 4px;
441} 378}
442 379
443QScrollBar::sub-line:vertical 380QScrollBar::sub-line:vertical {
444{
445 margin: 3px 0px 3px 0px; 381 margin: 3px 0px 3px 0px;
446 border-image: url(:/qss_icons/rc/up_arrow_disabled.png); 382 border-image: url(:/qss_icons/rc/up_arrow_disabled.png);
447 height: 10px; 383 height: 10px;
@@ -450,8 +386,7 @@ QScrollBar::sub-line:vertical
450 subcontrol-origin: margin; 386 subcontrol-origin: margin;
451} 387}
452 388
453QScrollBar::add-line:vertical 389QScrollBar::add-line:vertical {
454{
455 margin: 3px 0px 3px 0px; 390 margin: 3px 0px 3px 0px;
456 border-image: url(:/qss_icons/rc/down_arrow_disabled.png); 391 border-image: url(:/qss_icons/rc/down_arrow_disabled.png);
457 height: 10px; 392 height: 10px;
@@ -460,9 +395,8 @@ QScrollBar::add-line:vertical
460 subcontrol-origin: margin; 395 subcontrol-origin: margin;
461} 396}
462 397
463QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on 398QScrollBar::sub-line:vertical:hover,
464{ 399QScrollBar::sub-line:vertical:on {
465
466 border-image: url(:/qss_icons/rc/up_arrow.png); 400 border-image: url(:/qss_icons/rc/up_arrow.png);
467 height: 10px; 401 height: 10px;
468 width: 10px; 402 width: 10px;
@@ -470,9 +404,8 @@ QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on
470 subcontrol-origin: margin; 404 subcontrol-origin: margin;
471} 405}
472 406
473 407QScrollBar::add-line:vertical:hover,
474QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on 408QScrollBar::add-line:vertical:on {
475{
476 border-image: url(:/qss_icons/rc/down_arrow.png); 409 border-image: url(:/qss_icons/rc/down_arrow.png);
477 height: 10px; 410 height: 10px;
478 width: 10px; 411 width: 10px;
@@ -480,34 +413,31 @@ QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on
480 subcontrol-origin: margin; 413 subcontrol-origin: margin;
481} 414}
482 415
483QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical 416QScrollBar::up-arrow:vertical,
484{ 417QScrollBar::down-arrow:vertical {
485 background: none; 418 background: none;
486} 419}
487 420
488 421QScrollBar::add-page:vertical,
489QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical 422QScrollBar::sub-page:vertical {
490{
491 background: none; 423 background: none;
492} 424}
493 425
494QTextEdit 426QTextEdit {
495{
496 background-color: #232629; 427 background-color: #232629;
497 color: #eff0f1; 428 color: #eff0f1;
498 border: 1px solid #76797C; 429 border: 1px solid #76797C;
499} 430}
500 431
501QPlainTextEdit 432QPlainTextEdit {
502{ 433 background-color: #232629;
503 background-color: #232629;; 434 ;
504 color: #eff0f1; 435 color: #eff0f1;
505 border-radius: 2px; 436 border-radius: 2px;
506 border: 1px solid #76797C; 437 border: 1px solid #76797C;
507} 438}
508 439
509QHeaderView::section 440QHeaderView::section {
510{
511 background-color: #76797C; 441 background-color: #76797C;
512 color: #eff0f1; 442 color: #eff0f1;
513 padding: 5px; 443 padding: 5px;
@@ -520,9 +450,7 @@ QSizeGrip {
520 height: 12px; 450 height: 12px;
521} 451}
522 452
523 453QMainWindow::separator {
524QMainWindow::separator
525{
526 background-color: #31363b; 454 background-color: #31363b;
527 color: white; 455 color: white;
528 padding-left: 4px; 456 padding-left: 4px;
@@ -530,9 +458,7 @@ QMainWindow::separator
530 border: 1px dashed #76797C; 458 border: 1px dashed #76797C;
531} 459}
532 460
533QMainWindow::separator:hover 461QMainWindow::separator:hover {
534{
535
536 background-color: #787876; 462 background-color: #787876;
537 color: white; 463 color: white;
538 padding-left: 4px; 464 padding-left: 4px;
@@ -540,9 +466,7 @@ QMainWindow::separator:hover
540 spacing: 2px; 466 spacing: 2px;
541} 467}
542 468
543 469QMenu::separator {
544QMenu::separator
545{
546 height: 1px; 470 height: 1px;
547 background-color: #76797C; 471 background-color: #76797C;
548 color: white; 472 color: white;
@@ -551,21 +475,17 @@ QMenu::separator
551 margin-right: 5px; 475 margin-right: 5px;
552} 476}
553 477
554 478QFrame {
555QFrame
556{
557 border-radius: 2px; 479 border-radius: 2px;
558 border: 1px solid #76797C; 480 border: 1px solid #76797C;
559} 481}
560 482
561QFrame[frameShape="0"] 483QFrame[frameShape="0"] {
562{
563 border-radius: 2px; 484 border-radius: 2px;
564 border: 1px transparent #76797C; 485 border: 1px transparent #76797C;
565} 486}
566 487
567QStackedWidget 488QStackedWidget {
568{
569 border: 1px transparent black; 489 border: 1px transparent black;
570} 490}
571 491
@@ -578,21 +498,24 @@ QToolBar {
578QToolBar::handle:horizontal { 498QToolBar::handle:horizontal {
579 image: url(:/qss_icons/rc/Hmovetoolbar.png); 499 image: url(:/qss_icons/rc/Hmovetoolbar.png);
580} 500}
501
581QToolBar::handle:vertical { 502QToolBar::handle:vertical {
582 image: url(:/qss_icons/rc/Vmovetoolbar.png); 503 image: url(:/qss_icons/rc/Vmovetoolbar.png);
583} 504}
505
584QToolBar::separator:horizontal { 506QToolBar::separator:horizontal {
585 image: url(:/qss_icons/rc/Hsepartoolbar.png); 507 image: url(:/qss_icons/rc/Hsepartoolbar.png);
586} 508}
509
587QToolBar::separator:vertical { 510QToolBar::separator:vertical {
588 image: url(:/qss_icons/rc/Vsepartoolbar.png); 511 image: url(:/qss_icons/rc/Vsepartoolbar.png);
589} 512}
513
590QToolButton#qt_toolbar_ext_button { 514QToolButton#qt_toolbar_ext_button {
591 background: #58595a 515 background: #58595a
592} 516}
593 517
594QPushButton 518QPushButton {
595{
596 color: #eff0f1; 519 color: #eff0f1;
597 background-color: #31363b; 520 background-color: #31363b;
598 border-width: 1px; 521 border-width: 1px;
@@ -603,8 +526,7 @@ QPushButton
603 outline: none; 526 outline: none;
604} 527}
605 528
606QPushButton:disabled 529QPushButton:disabled {
607{
608 background-color: #31363b; 530 background-color: #31363b;
609 border-width: 1px; 531 border-width: 1px;
610 border-color: #454545; 532 border-color: #454545;
@@ -622,15 +544,13 @@ QPushButton:focus {
622 color: white; 544 color: white;
623} 545}
624 546
625QPushButton:pressed 547QPushButton:pressed {
626{
627 background-color: #3daee9; 548 background-color: #3daee9;
628 padding-top: -15px; 549 padding-top: -15px;
629 padding-bottom: -17px; 550 padding-bottom: -17px;
630} 551}
631 552
632QComboBox 553QComboBox {
633{
634 selection-background-color: #3daee9; 554 selection-background-color: #3daee9;
635 border-style: solid; 555 border-style: solid;
636 border: 1px solid #76797C; 556 border: 1px solid #76797C;
@@ -639,38 +559,40 @@ QComboBox
639 min-width: 75px; 559 min-width: 75px;
640} 560}
641 561
642QPushButton:checked{ 562QPushButton:checked {
643 background-color: #76797C; 563 background-color: #76797C;
644 border-color: #6A6969; 564 border-color: #6A6969;
645} 565}
646 566
647QComboBox:hover,QPushButton:hover,QAbstractSpinBox:hover,QLineEdit:hover,QTextEdit:hover,QPlainTextEdit:hover,QAbstractView:hover,QTreeView:hover 567QComboBox:hover,
648{ 568QPushButton:hover,
569QAbstractSpinBox:hover,
570QLineEdit:hover,
571QTextEdit:hover,
572QPlainTextEdit:hover,
573QAbstractView:hover,
574QTreeView:hover {
649 border: 1px solid #3daee9; 575 border: 1px solid #3daee9;
650 color: #eff0f1; 576 color: #eff0f1;
651} 577}
652 578
653QComboBox:on 579QComboBox:on {
654{
655 padding-top: 3px; 580 padding-top: 3px;
656 padding-left: 4px; 581 padding-left: 4px;
657 selection-background-color: #4a4a4a; 582 selection-background-color: #4a4a4a;
658} 583}
659 584
660QComboBox QAbstractItemView 585QComboBox QAbstractItemView {
661{
662 background-color: #232629; 586 background-color: #232629;
663 border-radius: 2px; 587 border-radius: 2px;
664 border: 1px solid #76797C; 588 border: 1px solid #76797C;
665 selection-background-color: #18465d; 589 selection-background-color: #18465d;
666} 590}
667 591
668QComboBox::drop-down 592QComboBox::drop-down {
669{
670 subcontrol-origin: padding; 593 subcontrol-origin: padding;
671 subcontrol-position: top right; 594 subcontrol-position: top right;
672 width: 15px; 595 width: 15px;
673
674 border-left-width: 0px; 596 border-left-width: 0px;
675 border-left-color: darkgray; 597 border-left-color: darkgray;
676 border-left-style: solid; 598 border-left-style: solid;
@@ -678,14 +600,13 @@ QComboBox::drop-down
678 border-bottom-right-radius: 3px; 600 border-bottom-right-radius: 3px;
679} 601}
680 602
681QComboBox::down-arrow 603QComboBox::down-arrow {
682{
683 image: url(:/qss_icons/rc/down_arrow_disabled.png); 604 image: url(:/qss_icons/rc/down_arrow_disabled.png);
684} 605}
685 606
686QComboBox::down-arrow:on, QComboBox::down-arrow:hover, 607QComboBox::down-arrow:on,
687QComboBox::down-arrow:focus 608QComboBox::down-arrow:hover,
688{ 609QComboBox::down-arrow:focus {
689 image: url(:/qss_icons/rc/down_arrow.png); 610 image: url(:/qss_icons/rc/down_arrow.png);
690} 611}
691 612
@@ -698,49 +619,47 @@ QAbstractSpinBox {
698 min-width: 75px; 619 min-width: 75px;
699} 620}
700 621
701QAbstractSpinBox:up-button 622QAbstractSpinBox:up-button {
702{
703 background-color: transparent; 623 background-color: transparent;
704 subcontrol-origin: border; 624 subcontrol-origin: border;
705 subcontrol-position: center right; 625 subcontrol-position: center right;
706} 626}
707 627
708QAbstractSpinBox:down-button 628QAbstractSpinBox:down-button {
709{
710 background-color: transparent; 629 background-color: transparent;
711 subcontrol-origin: border; 630 subcontrol-origin: border;
712 subcontrol-position: center left; 631 subcontrol-position: center left;
713} 632}
714 633
715QAbstractSpinBox::up-arrow,QAbstractSpinBox::up-arrow:disabled,QAbstractSpinBox::up-arrow:off { 634QAbstractSpinBox::up-arrow,
635QAbstractSpinBox::up-arrow:disabled,
636QAbstractSpinBox::up-arrow:off {
716 image: url(:/qss_icons/rc/up_arrow_disabled.png); 637 image: url(:/qss_icons/rc/up_arrow_disabled.png);
717 width: 10px; 638 width: 10px;
718 height: 10px; 639 height: 10px;
719} 640}
720QAbstractSpinBox::up-arrow:hover 641
721{ 642QAbstractSpinBox::up-arrow:hover {
722 image: url(:/qss_icons/rc/up_arrow.png); 643 image: url(:/qss_icons/rc/up_arrow.png);
723} 644}
724 645
725 646QAbstractSpinBox::down-arrow,
726QAbstractSpinBox::down-arrow,QAbstractSpinBox::down-arrow:disabled,QAbstractSpinBox::down-arrow:off 647QAbstractSpinBox::down-arrow:disabled,
727{ 648QAbstractSpinBox::down-arrow:off {
728 image: url(:/qss_icons/rc/down_arrow_disabled.png); 649 image: url(:/qss_icons/rc/down_arrow_disabled.png);
729 width: 10px; 650 width: 10px;
730 height: 10px; 651 height: 10px;
731} 652}
732QAbstractSpinBox::down-arrow:hover 653
733{ 654QAbstractSpinBox::down-arrow:hover {
734 image: url(:/qss_icons/rc/down_arrow.png); 655 image: url(:/qss_icons/rc/down_arrow.png);
735} 656}
736 657
737 658QLabel {
738QLabel
739{
740 border: 0px solid black; 659 border: 0px solid black;
741} 660}
742 661
743QTabWidget{ 662QTabWidget {
744 border: 0px transparent black; 663 border: 0px transparent black;
745} 664}
746 665
@@ -751,27 +670,24 @@ QTabWidget::pane {
751} 670}
752 671
753QTabWidget::tab-bar { 672QTabWidget::tab-bar {
754 left: 5px; /* move to the right by 5px */ 673 /* left: 5px; move to the right by 5px */
755} 674}
756 675
757QTabBar 676QTabBar {
758{
759 qproperty-drawBase: 0; 677 qproperty-drawBase: 0;
760 border-radius: 3px; 678 border-radius: 3px;
761} 679}
762 680
763QTabBar:focus 681QTabBar:focus {
764{
765 border: 0px transparent black; 682 border: 0px transparent black;
766} 683}
767 684
768QTabBar::close-button { 685QTabBar::close-button {
769 image: url(:/qss_icons/rc/close.png); 686 image: url(:/qss_icons/rc/close.png);
770 background: transparent; 687 background: transparent;
771} 688}
772 689
773QTabBar::close-button:hover 690QTabBar::close-button:hover {
774{
775 image: url(:/qss_icons/rc/close-hover.png); 691 image: url(:/qss_icons/rc/close-hover.png);
776 background: transparent; 692 background: transparent;
777} 693}
@@ -781,7 +697,9 @@ QTabBar::close-button:pressed {
781 background: transparent; 697 background: transparent;
782} 698}
783 699
700
784/* TOP TABS */ 701/* TOP TABS */
702
785QTabBar::tab:top { 703QTabBar::tab:top {
786 color: #eff0f1; 704 color: #eff0f1;
787 border: 1px solid #76797C; 705 border: 1px solid #76797C;
@@ -793,12 +711,11 @@ QTabBar::tab:top {
793 border-top-right-radius: 2px; 711 border-top-right-radius: 2px;
794} 712}
795 713
796QTabBar::tab:top:!selected 714QTabBar::tab:top:selected {
797{
798 color: #eff0f1; 715 color: #eff0f1;
799 background-color: #54575B; 716 background-color: #54575B;
800 border: 1px solid #76797C; 717 border: 1px solid #76797C;
801 border-bottom: 1px transparent black; 718 border-bottom: 2px solid #3daee9;
802 border-top-left-radius: 2px; 719 border-top-left-radius: 2px;
803 border-top-right-radius: 2px; 720 border-top-right-radius: 2px;
804} 721}
@@ -807,7 +724,9 @@ QTabBar::tab:top:!selected:hover {
807 background-color: #3daee9; 724 background-color: #3daee9;
808} 725}
809 726
727
810/* BOTTOM TABS */ 728/* BOTTOM TABS */
729
811QTabBar::tab:bottom { 730QTabBar::tab:bottom {
812 color: #eff0f1; 731 color: #eff0f1;
813 border: 1px solid #76797C; 732 border: 1px solid #76797C;
@@ -819,12 +738,11 @@ QTabBar::tab:bottom {
819 min-width: 50px; 738 min-width: 50px;
820} 739}
821 740
822QTabBar::tab:bottom:!selected 741QTabBar::tab:bottom:selected {
823{
824 color: #eff0f1; 742 color: #eff0f1;
825 background-color: #54575B; 743 background-color: #54575B;
826 border: 1px solid #76797C; 744 border: 1px solid #76797C;
827 border-top: 1px transparent black; 745 border-top: 2px solid #3daee9;
828 border-bottom-left-radius: 2px; 746 border-bottom-left-radius: 2px;
829 border-bottom-right-radius: 2px; 747 border-bottom-right-radius: 2px;
830} 748}
@@ -833,7 +751,9 @@ QTabBar::tab:bottom:!selected:hover {
833 background-color: #3daee9; 751 background-color: #3daee9;
834} 752}
835 753
754
836/* LEFT TABS */ 755/* LEFT TABS */
756
837QTabBar::tab:left { 757QTabBar::tab:left {
838 color: #eff0f1; 758 color: #eff0f1;
839 border: 1px solid #76797C; 759 border: 1px solid #76797C;
@@ -845,12 +765,11 @@ QTabBar::tab:left {
845 min-height: 50px; 765 min-height: 50px;
846} 766}
847 767
848QTabBar::tab:left:!selected 768QTabBar::tab:left:selected {
849{
850 color: #eff0f1; 769 color: #eff0f1;
851 background-color: #54575B; 770 background-color: #54575B;
852 border: 1px solid #76797C; 771 border: 1px solid #76797C;
853 border-left: 1px transparent black; 772 border-left: 2px solid #3daee9;
854 border-top-right-radius: 2px; 773 border-top-right-radius: 2px;
855 border-bottom-right-radius: 2px; 774 border-bottom-right-radius: 2px;
856} 775}
@@ -861,6 +780,7 @@ QTabBar::tab:left:!selected:hover {
861 780
862 781
863/* RIGHT TABS */ 782/* RIGHT TABS */
783
864QTabBar::tab:right { 784QTabBar::tab:right {
865 color: #eff0f1; 785 color: #eff0f1;
866 border: 1px solid #76797C; 786 border: 1px solid #76797C;
@@ -872,12 +792,11 @@ QTabBar::tab:right {
872 min-height: 50px; 792 min-height: 50px;
873} 793}
874 794
875QTabBar::tab:right:!selected 795QTabBar::tab:right:selected {
876{
877 color: #eff0f1; 796 color: #eff0f1;
878 background-color: #54575B; 797 background-color: #54575B;
879 border: 1px solid #76797C; 798 border: 1px solid #76797C;
880 border-right: 1px transparent black; 799 border-right: 2px solid #3daee9;
881 border-top-left-radius: 2px; 800 border-top-left-radius: 2px;
882 border-bottom-left-radius: 2px; 801 border-bottom-left-radius: 2px;
883} 802}
@@ -887,21 +806,20 @@ QTabBar::tab:right:!selected:hover {
887} 806}
888 807
889QTabBar QToolButton::right-arrow:enabled { 808QTabBar QToolButton::right-arrow:enabled {
890 image: url(:/qss_icons/rc/right_arrow.png); 809 image: url(:/qss_icons/rc/right_arrow.png);
891 } 810}
892 811
893 QTabBar QToolButton::left-arrow:enabled { 812QTabBar QToolButton::left-arrow:enabled {
894 image: url(:/qss_icons/rc/left_arrow.png); 813 image: url(:/qss_icons/rc/left_arrow.png);
895 } 814}
896 815
897QTabBar QToolButton::right-arrow:disabled { 816QTabBar QToolButton::right-arrow:disabled {
898 image: url(:/qss_icons/rc/right_arrow_disabled.png); 817 image: url(:/qss_icons/rc/right_arrow_disabled.png);
899 } 818}
900
901 QTabBar QToolButton::left-arrow:disabled {
902 image: url(:/qss_icons/rc/left_arrow_disabled.png);
903 }
904 819
820QTabBar QToolButton::left-arrow:disabled {
821 image: url(:/qss_icons/rc/left_arrow_disabled.png);
822}
905 823
906QDockWidget { 824QDockWidget {
907 background: #31363b; 825 background: #31363b;
@@ -910,29 +828,32 @@ QDockWidget {
910 titlebar-normal-icon: url(:/qss_icons/rc/undock.png); 828 titlebar-normal-icon: url(:/qss_icons/rc/undock.png);
911} 829}
912 830
913QDockWidget::close-button, QDockWidget::float-button { 831QDockWidget::close-button,
832QDockWidget::float-button {
914 border: 1px solid transparent; 833 border: 1px solid transparent;
915 border-radius: 2px; 834 border-radius: 2px;
916 background: transparent; 835 background: transparent;
917} 836}
918 837
919QDockWidget::close-button:hover, QDockWidget::float-button:hover { 838QDockWidget::close-button:hover,
839QDockWidget::float-button:hover {
920 background: rgba(255, 255, 255, 10); 840 background: rgba(255, 255, 255, 10);
921} 841}
922 842
923QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { 843QDockWidget::close-button:pressed,
844QDockWidget::float-button:pressed {
924 padding: 1px -1px -1px 1px; 845 padding: 1px -1px -1px 1px;
925 background: rgba(255, 255, 255, 10); 846 background: rgba(255, 255, 255, 10);
926} 847}
927 848
928QTreeView, QListView 849QTreeView,
929{ 850QListView {
930 border: 1px solid #76797C; 851 border: 1px solid #76797C;
931 background-color: #232629; 852 background-color: #232629;
932} 853}
933 854
934QTreeView:branch:selected, QTreeView:branch:hover 855QTreeView:branch:selected,
935{ 856QTreeView:branch:hover {
936 background: url(:/qss_icons/rc/transparent.png); 857 background: url(:/qss_icons/rc/transparent.png);
937} 858}
938 859
@@ -954,31 +875,75 @@ QTreeView::branch:closed:has-children:has-siblings {
954} 875}
955 876
956QTreeView::branch:open:has-children:!has-siblings, 877QTreeView::branch:open:has-children:!has-siblings,
957QTreeView::branch:open:has-children:has-siblings { 878QTreeView::branch:open:has-children:has-siblings {
958 image: url(:/qss_icons/rc/branch_open.png); 879 image: url(:/qss_icons/rc/branch_open.png);
959} 880}
960 881
961QTreeView::branch:has-children:!has-siblings:closed:hover, 882QTreeView::branch:has-children:!has-siblings:closed:hover,
962QTreeView::branch:closed:has-children:has-siblings:hover { 883QTreeView::branch:closed:has-children:has-siblings:hover {
963 image: url(:/qss_icons/rc/branch_closed-on.png); 884 image: url(:/qss_icons/rc/branch_closed-on.png);
964 } 885}
965 886
966QTreeView::branch:open:has-children:!has-siblings:hover, 887QTreeView::branch:open:has-children:!has-siblings:hover,
967QTreeView::branch:open:has-children:has-siblings:hover { 888QTreeView::branch:open:has-children:has-siblings:hover {
968 image: url(:/qss_icons/rc/branch_open-on.png); 889 image: url(:/qss_icons/rc/branch_open-on.png);
969 } 890}
970 891
971QListView::item:!selected:hover, QTreeView::item:!selected:hover { 892QListView::item:!selected:hover,
893QTreeView::item:!selected:hover {
972 background: #18465d; 894 background: #18465d;
973 outline: 0; 895 outline: 0;
974 color: #eff0f1 896 color: #eff0f1
975} 897}
976 898
977QListView::item:selected:hover, QTreeView::item:selected:hover { 899QListView::item:selected:hover,
900QTreeView::item:selected:hover {
978 background: #287399; 901 background: #287399;
979 color: #eff0f1; 902 color: #eff0f1;
980} 903}
981 904
905QTreeView::indicator:checked,
906QListView::indicator:checked {
907 image: url(:/qss_icons/rc/checkbox_checked.png);
908}
909
910QTreeView::indicator:unchecked,
911QListView::indicator:unchecked {
912 image: url(:/qss_icons/rc/checkbox_unchecked.png);
913}
914
915QTreeView::indicator:indeterminate,
916QListView::indicator:indeterminate {
917 image: url(:/qss_icons/rc/checkbox_indeterminate.png);
918}
919
920QTreeView::indicator:checked:hover,
921QTreeView::indicator:checked:focus,
922QTreeView::indicator:checked:pressed,
923QListView::indicator:checked:hover,
924QListView::indicator:checked:focus,
925QListView::indicator:checked:pressed {
926 image: url(:/qss_icons/rc/checkbox_checked_focus.png);
927}
928
929QTreeView::indicator:unchecked:hover,
930QTreeView::indicator:unchecked:focus,
931QTreeView::indicator:unchecked:pressed,
932QListView::indicator:unchecked:hover,
933QListView::indicator:unchecked:focus,
934QListView::indicator:unchecked:pressed {
935 image: url(:/qss_icons/rc/checkbox_unchecked_focus.png);
936}
937
938QTreeView::indicator:indeterminate:hover,
939QTreeView::indicator:indeterminate:focus,
940QTreeView::indicator:indeterminate:pressed,
941QListView::indicator:indeterminate:hover,
942QListView::indicator:indeterminate:focus,
943QListView::indicator:indeterminate:pressed {
944 image: url(:/qss_icons/rc/checkbox_indeterminate_focus.png);
945}
946
982QSlider::groove:horizontal { 947QSlider::groove:horizontal {
983 border: 1px solid #565a5e; 948 border: 1px solid #565a5e;
984 height: 4px; 949 height: 4px;
@@ -1021,38 +986,49 @@ QToolButton {
1021 padding: 5px; 986 padding: 5px;
1022} 987}
1023 988
1024QToolButton[popupMode="1"] { /* only for MenuButtonPopup */ 989QToolButton[popupMode="1"] {
1025 padding-right: 20px; /* make way for the popup button */ 990 /* only for MenuButtonPopup */
1026 border: 1px #76797C; 991 padding-right: 20px;
1027 border-radius: 5px; 992 /* make way for the popup button */
993 border: 1px #76797C;
994 border-radius: 5px;
1028} 995}
1029 996
1030QToolButton[popupMode="2"] { /* only for InstantPopup */ 997QToolButton[popupMode="2"] {
1031 padding-right: 10px; /* make way for the popup button */ 998 /* only for InstantPopup */
1032 border: 1px #76797C; 999 padding-right: 10px;
1000 /* make way for the popup button */
1001 border: 1px #76797C;
1033} 1002}
1034 1003
1035 1004QToolButton:hover,
1036QToolButton:hover, QToolButton::menu-button:hover { 1005QToolButton::menu-button:hover {
1037 background-color: transparent; 1006 background-color: transparent;
1038 border: 1px solid #3daee9; 1007 border: 1px solid #3daee9;
1039 padding: 5px; 1008 padding: 5px;
1040} 1009}
1041 1010
1042QToolButton:checked, QToolButton:pressed, 1011QToolButton:checked,
1043 QToolButton::menu-button:pressed { 1012QToolButton:pressed,
1013QToolButton::menu-button:pressed {
1044 background-color: #3daee9; 1014 background-color: #3daee9;
1045 border: 1px solid #3daee9; 1015 border: 1px solid #3daee9;
1046 padding: 5px; 1016 padding: 5px;
1047} 1017}
1048 1018
1019
1049/* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */ 1020/* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */
1021
1050QToolButton::menu-indicator { 1022QToolButton::menu-indicator {
1051 image: url(:/qss_icons/rc/down_arrow.png); 1023 image: url(:/qss_icons/rc/down_arrow.png);
1052 top: -7px; left: -2px; /* shift it a bit */ 1024 top: -7px;
1025 left: -2px;
1026 /* shift it a bit */
1053} 1027}
1054 1028
1029
1055/* the subcontrols below are used only in the MenuButtonPopup mode */ 1030/* the subcontrols below are used only in the MenuButtonPopup mode */
1031
1056QToolButton::menu-button { 1032QToolButton::menu-button {
1057 border: 1px transparent #76797C; 1033 border: 1px transparent #76797C;
1058 border-top-right-radius: 6px; 1034 border-top-right-radius: 6px;
@@ -1070,47 +1046,46 @@ QToolButton::menu-arrow:open {
1070 border: 1px solid #76797C; 1046 border: 1px solid #76797C;
1071} 1047}
1072 1048
1073QPushButton::menu-indicator { 1049QPushButton::menu-indicator {
1074 subcontrol-origin: padding; 1050 subcontrol-origin: padding;
1075 subcontrol-position: bottom right; 1051 subcontrol-position: bottom right;
1076 left: 8px; 1052 left: 8px;
1077} 1053}
1078 1054
1079QTableView 1055QTableView {
1080{
1081 border: 1px solid #76797C; 1056 border: 1px solid #76797C;
1082 gridline-color: #31363b; 1057 gridline-color: #31363b;
1083 background-color: #232629; 1058 background-color: #232629;
1084} 1059}
1085 1060
1086 1061QTableView,
1087QTableView, QHeaderView 1062QHeaderView {
1088{
1089 border-radius: 0px; 1063 border-radius: 0px;
1090} 1064}
1091 1065
1092QTableView::item:pressed, QListView::item:pressed, QTreeView::item:pressed { 1066QTableView::item:pressed,
1067QListView::item:pressed,
1068QTreeView::item:pressed {
1093 background: #18465d; 1069 background: #18465d;
1094 color: #eff0f1; 1070 color: #eff0f1;
1095} 1071}
1096 1072
1097QTableView::item:selected:active, QTreeView::item:selected:active, QListView::item:selected:active { 1073QTableView::item:selected:active,
1074QTreeView::item:selected:active,
1075QListView::item:selected:active {
1098 background: #287399; 1076 background: #287399;
1099 color: #eff0f1; 1077 color: #eff0f1;
1100} 1078}
1101 1079
1102 1080QHeaderView {
1103QHeaderView
1104{
1105 background-color: #31363b; 1081 background-color: #31363b;
1106 border: 1px transparent; 1082 border: 1px transparent;
1107 border-radius: 0px; 1083 border-radius: 0px;
1108 margin: 0px; 1084 margin: 0px;
1109 padding: 0px; 1085 padding: 0px;
1110
1111} 1086}
1112 1087
1113QHeaderView::section { 1088QHeaderView::section {
1114 background-color: #31363b; 1089 background-color: #31363b;
1115 color: #eff0f1; 1090 color: #eff0f1;
1116 padding: 5px; 1091 padding: 5px;
@@ -1119,34 +1094,32 @@ QHeaderView::section {
1119 text-align: center; 1094 text-align: center;
1120} 1095}
1121 1096
1122QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one 1097QHeaderView::section::vertical::first,
1123{ 1098QHeaderView::section::vertical::only-one {
1124 border-top: 1px solid #76797C; 1099 border-top: 1px solid #76797C;
1125} 1100}
1126 1101
1127QHeaderView::section::vertical 1102QHeaderView::section::vertical {
1128{
1129 border-top: transparent; 1103 border-top: transparent;
1130} 1104}
1131 1105
1132QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one 1106QHeaderView::section::horizontal::first,
1133{ 1107QHeaderView::section::horizontal::only-one {
1134 border-left: 1px solid #76797C; 1108 border-left: 1px solid #76797C;
1135} 1109}
1136 1110
1137QHeaderView::section::horizontal 1111QHeaderView::section::horizontal {
1138{
1139 border-left: transparent; 1112 border-left: transparent;
1140} 1113}
1141 1114
1142 1115QHeaderView::section:checked {
1143QHeaderView::section:checked
1144 {
1145 color: white; 1116 color: white;
1146 background-color: #334e5e; 1117 background-color: #334e5e;
1147 } 1118}
1119
1120
1121/* style the sort indicator */
1148 1122
1149 /* style the sort indicator */
1150QHeaderView::down-arrow { 1123QHeaderView::down-arrow {
1151 image: url(:/qss_icons/rc/down_arrow.png); 1124 image: url(:/qss_icons/rc/down_arrow.png);
1152} 1125}
@@ -1155,14 +1128,13 @@ QHeaderView::up-arrow {
1155 image: url(:/qss_icons/rc/up_arrow.png); 1128 image: url(:/qss_icons/rc/up_arrow.png);
1156} 1129}
1157 1130
1158
1159QTableCornerButton::section { 1131QTableCornerButton::section {
1160 background-color: #31363b; 1132 background-color: #31363b;
1161 border: 1px transparent #76797C; 1133 border: 1px transparent #76797C;
1162 border-radius: 0px; 1134 border-radius: 0px;
1163} 1135}
1164 1136
1165QToolBox { 1137QToolBox {
1166 padding: 5px; 1138 padding: 5px;
1167 border: 1px transparent black; 1139 border: 1px transparent black;
1168} 1140}
@@ -1176,22 +1148,22 @@ QToolBox::tab {
1176 border-top-right-radius: 5px; 1148 border-top-right-radius: 5px;
1177} 1149}
1178 1150
1179QToolBox::tab:selected { /* italicize selected tabs */ 1151QToolBox::tab:selected {
1152 /* italicize selected tabs */
1180 font: italic; 1153 font: italic;
1181 background-color: #31363b; 1154 background-color: #31363b;
1182 border-color: #3daee9; 1155 border-color: #3daee9;
1183 } 1156}
1184 1157
1185QStatusBar::item { 1158QStatusBar::item {
1186 border: 0px transparent dark; 1159 border: 0px transparent dark;
1187 } 1160}
1188
1189 1161
1190QFrame[height="3"], QFrame[width="3"] { 1162QFrame[height="3"],
1163QFrame[width="3"] {
1191 background-color: #76797C; 1164 background-color: #76797C;
1192} 1165}
1193 1166
1194
1195QSplitter::handle { 1167QSplitter::handle {
1196 border: 1px dashed #76797C; 1168 border: 1px dashed #76797C;
1197} 1169}
@@ -1219,8 +1191,7 @@ QProgressBar::chunk {
1219 background-color: #05B8CC; 1191 background-color: #05B8CC;
1220} 1192}
1221 1193
1222QDateEdit 1194QDateEdit {
1223{
1224 selection-background-color: #3daee9; 1195 selection-background-color: #3daee9;
1225 border-style: solid; 1196 border-style: solid;
1226 border: 1px solid #3375A3; 1197 border: 1px solid #3375A3;
@@ -1229,23 +1200,20 @@ QDateEdit
1229 min-width: 75px; 1200 min-width: 75px;
1230} 1201}
1231 1202
1232QDateEdit:on 1203QDateEdit:on {
1233{
1234 padding-top: 3px; 1204 padding-top: 3px;
1235 padding-left: 4px; 1205 padding-left: 4px;
1236 selection-background-color: #4a4a4a; 1206 selection-background-color: #4a4a4a;
1237} 1207}
1238 1208
1239QDateEdit QAbstractItemView 1209QDateEdit QAbstractItemView {
1240{
1241 background-color: #232629; 1210 background-color: #232629;
1242 border-radius: 2px; 1211 border-radius: 2px;
1243 border: 1px solid #3375A3; 1212 border: 1px solid #3375A3;
1244 selection-background-color: #3daee9; 1213 selection-background-color: #3daee9;
1245} 1214}
1246 1215
1247QDateEdit::drop-down 1216QDateEdit::drop-down {
1248{
1249 subcontrol-origin: padding; 1217 subcontrol-origin: padding;
1250 subcontrol-position: top right; 1218 subcontrol-position: top right;
1251 width: 15px; 1219 width: 15px;
@@ -1256,13 +1224,12 @@ QDateEdit::drop-down
1256 border-bottom-right-radius: 3px; 1224 border-bottom-right-radius: 3px;
1257} 1225}
1258 1226
1259QDateEdit::down-arrow 1227QDateEdit::down-arrow {
1260{
1261 image: url(:/qss_icons/rc/down_arrow_disabled.png); 1228 image: url(:/qss_icons/rc/down_arrow_disabled.png);
1262} 1229}
1263 1230
1264QDateEdit::down-arrow:on, QDateEdit::down-arrow:hover, 1231QDateEdit::down-arrow:on,
1265QDateEdit::down-arrow:focus 1232QDateEdit::down-arrow:hover,
1266{ 1233QDateEdit::down-arrow:focus {
1267 image: url(:/qss_icons/rc/down_arrow.png); 1234 image: url(:/qss_icons/rc/down_arrow.png);
1268} 1235}
diff --git a/externals/dynarmic b/externals/dynarmic
Subproject 98e23801297167db1fd266696484a49096e734c Subproject 73d3efc3e03887fb89c6a7b655d2f79d0e0711a
diff --git a/src/common/common_funcs.h b/src/common/common_funcs.h
index 93f1c0044..8b0d34da6 100644
--- a/src/common/common_funcs.h
+++ b/src/common/common_funcs.h
@@ -6,7 +6,7 @@
6 6
7#include <string> 7#include <string>
8 8
9#if !defined(ARCHITECTURE_x86_64) && !defined(ARCHITECTURE_ARM) 9#if !defined(ARCHITECTURE_x86_64)
10#include <cstdlib> // for exit 10#include <cstdlib> // for exit
11#endif 11#endif
12#include "common/common_types.h" 12#include "common/common_types.h"
@@ -32,8 +32,6 @@
32 32
33#ifdef ARCHITECTURE_x86_64 33#ifdef ARCHITECTURE_x86_64
34#define Crash() __asm__ __volatile__("int $3") 34#define Crash() __asm__ __volatile__("int $3")
35#elif defined(ARCHITECTURE_ARM)
36#define Crash() __asm__ __volatile__("trap")
37#else 35#else
38#define Crash() exit(1) 36#define Crash() exit(1)
39#endif 37#endif
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp
index 38cc85e23..55de535c0 100644
--- a/src/common/logging/backend.cpp
+++ b/src/common/logging/backend.cpp
@@ -169,6 +169,7 @@ void FileBackend::Write(const Entry& entry) {
169 SUB(Service, AOC) \ 169 SUB(Service, AOC) \
170 SUB(Service, APM) \ 170 SUB(Service, APM) \
171 SUB(Service, BCAT) \ 171 SUB(Service, BCAT) \
172 SUB(Service, BTM) \
172 SUB(Service, Fatal) \ 173 SUB(Service, Fatal) \
173 SUB(Service, Friend) \ 174 SUB(Service, Friend) \
174 SUB(Service, FS) \ 175 SUB(Service, FS) \
@@ -192,6 +193,7 @@ void FileBackend::Write(const Entry& entry) {
192 SUB(Service, SSL) \ 193 SUB(Service, SSL) \
193 SUB(Service, Time) \ 194 SUB(Service, Time) \
194 SUB(Service, VI) \ 195 SUB(Service, VI) \
196 SUB(Service, WLAN) \
195 CLS(HW) \ 197 CLS(HW) \
196 SUB(HW, Memory) \ 198 SUB(HW, Memory) \
197 SUB(HW, LCD) \ 199 SUB(HW, LCD) \
diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index db4a80d0a..e8d98de99 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -56,6 +56,7 @@ enum class Class : ClassType {
56 Service_APM, ///< The APM (Performance) service 56 Service_APM, ///< The APM (Performance) service
57 Service_Audio, ///< The Audio (Audio control) service 57 Service_Audio, ///< The Audio (Audio control) service
58 Service_BCAT, ///< The BCAT service 58 Service_BCAT, ///< The BCAT service
59 Service_BTM, ///< The BTM service
59 Service_Fatal, ///< The Fatal service 60 Service_Fatal, ///< The Fatal service
60 Service_Friend, ///< The friend service 61 Service_Friend, ///< The friend service
61 Service_FS, ///< The FS (Filesystem) service 62 Service_FS, ///< The FS (Filesystem) service
@@ -79,6 +80,7 @@ enum class Class : ClassType {
79 Service_SSL, ///< The SSL service 80 Service_SSL, ///< The SSL service
80 Service_Time, ///< The time service 81 Service_Time, ///< The time service
81 Service_VI, ///< The VI (Video interface) service 82 Service_VI, ///< The VI (Video interface) service
83 Service_WLAN, ///< The WLAN (Wireless local area network) service
82 HW, ///< Low-level hardware emulation 84 HW, ///< Low-level hardware emulation
83 HW_Memory, ///< Memory-map and address translation 85 HW_Memory, ///< Memory-map and address translation
84 HW_LCD, ///< LCD register emulation 86 HW_LCD, ///< LCD register emulation
diff --git a/src/common/swap.h b/src/common/swap.h
index fc7af4280..32af0b6ac 100644
--- a/src/common/swap.h
+++ b/src/common/swap.h
@@ -69,7 +69,7 @@ inline u32 swap32(u32 _data) {
69inline u64 swap64(u64 _data) { 69inline u64 swap64(u64 _data) {
70 return _byteswap_uint64(_data); 70 return _byteswap_uint64(_data);
71} 71}
72#elif ARCHITECTURE_ARM 72#elif defined(ARCHITECTURE_ARM) && (__ARM_ARCH >= 6)
73inline u16 swap16(u16 _data) { 73inline u16 swap16(u16 _data) {
74 u32 data = _data; 74 u32 data = _data;
75 __asm__("rev16 %0, %1\n" : "=l"(data) : "l"(data)); 75 __asm__("rev16 %0, %1\n" : "=l"(data) : "l"(data));
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index f1e7e2593..f05e02cfb 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -142,6 +142,8 @@ add_library(core STATIC
142 hle/service/bcat/module.h 142 hle/service/bcat/module.h
143 hle/service/btdrv/btdrv.cpp 143 hle/service/btdrv/btdrv.cpp
144 hle/service/btdrv/btdrv.h 144 hle/service/btdrv/btdrv.h
145 hle/service/btm/btm.cpp
146 hle/service/btm/btm.h
145 hle/service/erpt/erpt.cpp 147 hle/service/erpt/erpt.cpp
146 hle/service/erpt/erpt.h 148 hle/service/erpt/erpt.h
147 hle/service/es/es.cpp 149 hle/service/es/es.cpp
@@ -277,6 +279,8 @@ add_library(core STATIC
277 hle/service/vi/vi_s.h 279 hle/service/vi/vi_s.h
278 hle/service/vi/vi_u.cpp 280 hle/service/vi/vi_u.cpp
279 hle/service/vi/vi_u.h 281 hle/service/vi/vi_u.h
282 hle/service/wlan/wlan.cpp
283 hle/service/wlan/wlan.h
280 hw/hw.cpp 284 hw/hw.cpp
281 hw/hw.h 285 hw/hw.h
282 hw/lcd.cpp 286 hw/lcd.cpp
diff --git a/src/core/file_sys/partition_filesystem.cpp b/src/core/file_sys/partition_filesystem.cpp
index 521e21078..47e032b19 100644
--- a/src/core/file_sys/partition_filesystem.cpp
+++ b/src/core/file_sys/partition_filesystem.cpp
@@ -97,9 +97,8 @@ void PartitionFilesystem::PrintDebugInfo() const {
97 LOG_DEBUG(Service_FS, "Magic: {:.4}", pfs_header.magic); 97 LOG_DEBUG(Service_FS, "Magic: {:.4}", pfs_header.magic);
98 LOG_DEBUG(Service_FS, "Files: {}", pfs_header.num_entries); 98 LOG_DEBUG(Service_FS, "Files: {}", pfs_header.num_entries);
99 for (u32 i = 0; i < pfs_header.num_entries; i++) { 99 for (u32 i = 0; i < pfs_header.num_entries; i++) {
100 LOG_DEBUG(Service_FS, " > File {}: {} (0x{:X} bytes, at 0x{:X})", i, 100 LOG_DEBUG(Service_FS, " > File {}: {} (0x{:X} bytes)", i,
101 pfs_files[i]->GetName(), pfs_files[i]->GetSize(), 101 pfs_files[i]->GetName(), pfs_files[i]->GetSize());
102 dynamic_cast<OffsetVfsFile*>(pfs_files[i].get())->GetOffset());
103 } 102 }
104} 103}
105 104
diff --git a/src/core/hle/service/btm/btm.cpp b/src/core/hle/service/btm/btm.cpp
new file mode 100644
index 000000000..b949bfabd
--- /dev/null
+++ b/src/core/hle/service/btm/btm.cpp
@@ -0,0 +1,121 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <memory>
6
7#include "common/logging/log.h"
8#include "core/hle/ipc_helpers.h"
9#include "core/hle/kernel/hle_ipc.h"
10#include "core/hle/service/btm/btm.h"
11#include "core/hle/service/service.h"
12#include "core/hle/service/sm/sm.h"
13
14namespace Service::BTM {
15
16class BTM final : public ServiceFramework<BTM> {
17public:
18 explicit BTM() : ServiceFramework{"btm"} {
19 // clang-format off
20 static const FunctionInfo functions[] = {
21 {0, nullptr, "Unknown1"},
22 {1, nullptr, "Unknown2"},
23 {2, nullptr, "RegisterSystemEventForConnectedDeviceConditionImpl"},
24 {3, nullptr, "Unknown3"},
25 {4, nullptr, "Unknown4"},
26 {5, nullptr, "Unknown5"},
27 {6, nullptr, "Unknown6"},
28 {7, nullptr, "Unknown7"},
29 {8, nullptr, "RegisterSystemEventForRegisteredDeviceInfoImpl"},
30 {9, nullptr, "Unknown8"},
31 {10, nullptr, "Unknown9"},
32 {11, nullptr, "Unknown10"},
33 {12, nullptr, "Unknown11"},
34 {13, nullptr, "Unknown12"},
35 {14, nullptr, "EnableRadioImpl"},
36 {15, nullptr, "DisableRadioImpl"},
37 {16, nullptr, "Unknown13"},
38 {17, nullptr, "Unknown14"},
39 {18, nullptr, "Unknown15"},
40 {19, nullptr, "Unknown16"},
41 {20, nullptr, "Unknown17"},
42 {21, nullptr, "Unknown18"},
43 };
44 // clang-format on
45
46 RegisterHandlers(functions);
47 }
48};
49
50class BTM_DBG final : public ServiceFramework<BTM_DBG> {
51public:
52 explicit BTM_DBG() : ServiceFramework{"btm:dbg"} {
53 // clang-format off
54 static const FunctionInfo functions[] = {
55 {0, nullptr, "RegisterSystemEventForDiscoveryImpl"},
56 {1, nullptr, "Unknown1"},
57 {2, nullptr, "Unknown2"},
58 {3, nullptr, "Unknown3"},
59 {4, nullptr, "Unknown4"},
60 {5, nullptr, "Unknown5"},
61 {6, nullptr, "Unknown6"},
62 {7, nullptr, "Unknown7"},
63 {8, nullptr, "Unknown8"},
64 };
65 // clang-format on
66
67 RegisterHandlers(functions);
68 }
69};
70
71class IBtmSystemCore final : public ServiceFramework<IBtmSystemCore> {
72public:
73 explicit IBtmSystemCore() : ServiceFramework{"IBtmSystemCore"} {
74 // clang-format off
75 static const FunctionInfo functions[] = {
76 {0, nullptr, "StartGamepadPairingImpl"},
77 {1, nullptr, "CancelGamepadPairingImpl"},
78 {2, nullptr, "ClearGamepadPairingDatabaseImpl"},
79 {3, nullptr, "GetPairedGamepadCountImpl"},
80 {4, nullptr, "EnableRadioImpl"},
81 {5, nullptr, "DisableRadioImpl"},
82 {6, nullptr, "GetRadioOnOffImpl"},
83 {7, nullptr, "AcquireRadioEventImpl"},
84 {8, nullptr, "AcquireGamepadPairingEventImpl"},
85 {9, nullptr, "IsGamepadPairingStartedImpl"},
86 };
87 // clang-format on
88
89 RegisterHandlers(functions);
90 }
91};
92
93class BTM_SYS final : public ServiceFramework<BTM_SYS> {
94public:
95 explicit BTM_SYS() : ServiceFramework{"btm:sys"} {
96 // clang-format off
97 static const FunctionInfo functions[] = {
98 {0, &BTM_SYS::GetCoreImpl, "GetCoreImpl"},
99 };
100 // clang-format on
101
102 RegisterHandlers(functions);
103 }
104
105private:
106 void GetCoreImpl(Kernel::HLERequestContext& ctx) {
107 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
108 rb.Push(RESULT_SUCCESS);
109 rb.PushIpcInterface<IBtmSystemCore>();
110
111 LOG_DEBUG(Service_BTM, "called");
112 }
113};
114
115void InstallInterfaces(SM::ServiceManager& sm) {
116 std::make_shared<BTM>()->InstallAsService(sm);
117 std::make_shared<BTM_DBG>()->InstallAsService(sm);
118 std::make_shared<BTM_SYS>()->InstallAsService(sm);
119}
120
121} // namespace Service::BTM
diff --git a/src/core/hle/service/btm/btm.h b/src/core/hle/service/btm/btm.h
new file mode 100644
index 000000000..e6425a7e3
--- /dev/null
+++ b/src/core/hle/service/btm/btm.h
@@ -0,0 +1,15 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7namespace Service::SM {
8class ServiceManager;
9}
10
11namespace Service::BTM {
12
13void InstallInterfaces(SM::ServiceManager& sm);
14
15} // namespace Service::BTM
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index e4619a547..ed53f96c5 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -326,7 +326,7 @@ public:
326 {79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"}, 326 {79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"},
327 {80, nullptr, "GetGyroscopeZeroDriftMode"}, 327 {80, nullptr, "GetGyroscopeZeroDriftMode"},
328 {81, nullptr, "ResetGyroscopeZeroDriftMode"}, 328 {81, nullptr, "ResetGyroscopeZeroDriftMode"},
329 {82, nullptr, "IsSixAxisSensorAtRest"}, 329 {82, &Hid::IsSixAxisSensorAtRest, "IsSixAxisSensorAtRest"},
330 {91, nullptr, "ActivateGesture"}, 330 {91, nullptr, "ActivateGesture"},
331 {100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"}, 331 {100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"},
332 {101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"}, 332 {101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"},
@@ -343,7 +343,7 @@ public:
343 "SetNpadJoyAssignmentModeSingleByDefault"}, 343 "SetNpadJoyAssignmentModeSingleByDefault"},
344 {123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"}, 344 {123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"},
345 {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"}, 345 {124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"},
346 {125, nullptr, "MergeSingleJoyAsDualJoy"}, 346 {125, &Hid::MergeSingleJoyAsDualJoy, "MergeSingleJoyAsDualJoy"},
347 {126, nullptr, "StartLrAssignmentMode"}, 347 {126, nullptr, "StartLrAssignmentMode"},
348 {127, nullptr, "StopLrAssignmentMode"}, 348 {127, nullptr, "StopLrAssignmentMode"},
349 {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"}, 349 {128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
@@ -455,6 +455,14 @@ private:
455 LOG_WARNING(Service_HID, "(STUBBED) called"); 455 LOG_WARNING(Service_HID, "(STUBBED) called");
456 } 456 }
457 457
458 void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) {
459 IPC::ResponseBuilder rb{ctx, 2};
460 rb.Push(RESULT_SUCCESS);
461 // TODO (Hexagon12): Properly implement reading gyroscope values from controllers.
462 rb.Push(true);
463 LOG_WARNING(Service_HID, "(STUBBED) called");
464 }
465
458 void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { 466 void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) {
459 IPC::ResponseBuilder rb{ctx, 2}; 467 IPC::ResponseBuilder rb{ctx, 2};
460 rb.Push(RESULT_SUCCESS); 468 rb.Push(RESULT_SUCCESS);
@@ -530,6 +538,12 @@ private:
530 LOG_WARNING(Service_HID, "(STUBBED) called"); 538 LOG_WARNING(Service_HID, "(STUBBED) called");
531 } 539 }
532 540
541 void MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) {
542 IPC::ResponseBuilder rb{ctx, 2};
543 rb.Push(RESULT_SUCCESS);
544 LOG_WARNING(Service_HID, "(STUBBED) called");
545 }
546
533 void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { 547 void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
534 IPC::ResponseBuilder rb{ctx, 2}; 548 IPC::ResponseBuilder rb{ctx, 2};
535 rb.Push(RESULT_SUCCESS); 549 rb.Push(RESULT_SUCCESS);
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 5180a0c93..3cad64837 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -22,6 +22,7 @@
22#include "core/hle/service/audio/audio.h" 22#include "core/hle/service/audio/audio.h"
23#include "core/hle/service/bcat/bcat.h" 23#include "core/hle/service/bcat/bcat.h"
24#include "core/hle/service/btdrv/btdrv.h" 24#include "core/hle/service/btdrv/btdrv.h"
25#include "core/hle/service/btm/btm.h"
25#include "core/hle/service/erpt/erpt.h" 26#include "core/hle/service/erpt/erpt.h"
26#include "core/hle/service/es/es.h" 27#include "core/hle/service/es/es.h"
27#include "core/hle/service/eupld/eupld.h" 28#include "core/hle/service/eupld/eupld.h"
@@ -55,6 +56,7 @@
55#include "core/hle/service/ssl/ssl.h" 56#include "core/hle/service/ssl/ssl.h"
56#include "core/hle/service/time/time.h" 57#include "core/hle/service/time/time.h"
57#include "core/hle/service/vi/vi.h" 58#include "core/hle/service/vi/vi.h"
59#include "core/hle/service/wlan/wlan.h"
58 60
59using Kernel::ClientPort; 61using Kernel::ClientPort;
60using Kernel::ServerPort; 62using Kernel::ServerPort;
@@ -201,6 +203,7 @@ void Init(std::shared_ptr<SM::ServiceManager>& sm) {
201 Audio::InstallInterfaces(*sm); 203 Audio::InstallInterfaces(*sm);
202 BCAT::InstallInterfaces(*sm); 204 BCAT::InstallInterfaces(*sm);
203 BtDrv::InstallInterfaces(*sm); 205 BtDrv::InstallInterfaces(*sm);
206 BTM::InstallInterfaces(*sm);
204 ERPT::InstallInterfaces(*sm); 207 ERPT::InstallInterfaces(*sm);
205 ES::InstallInterfaces(*sm); 208 ES::InstallInterfaces(*sm);
206 EUPLD::InstallInterfaces(*sm); 209 EUPLD::InstallInterfaces(*sm);
@@ -225,12 +228,13 @@ void Init(std::shared_ptr<SM::ServiceManager>& sm) {
225 PCTL::InstallInterfaces(*sm); 228 PCTL::InstallInterfaces(*sm);
226 PlayReport::InstallInterfaces(*sm); 229 PlayReport::InstallInterfaces(*sm);
227 PM::InstallInterfaces(*sm); 230 PM::InstallInterfaces(*sm);
231 Set::InstallInterfaces(*sm);
228 Sockets::InstallInterfaces(*sm); 232 Sockets::InstallInterfaces(*sm);
229 SPL::InstallInterfaces(*sm); 233 SPL::InstallInterfaces(*sm);
230 SSL::InstallInterfaces(*sm); 234 SSL::InstallInterfaces(*sm);
231 Time::InstallInterfaces(*sm); 235 Time::InstallInterfaces(*sm);
232 VI::InstallInterfaces(*sm, nv_flinger); 236 VI::InstallInterfaces(*sm, nv_flinger);
233 Set::InstallInterfaces(*sm); 237 WLAN::InstallInterfaces(*sm);
234 238
235 LOG_DEBUG(Service, "initialized OK"); 239 LOG_DEBUG(Service, "initialized OK");
236} 240}
diff --git a/src/core/hle/service/wlan/wlan.cpp b/src/core/hle/service/wlan/wlan.cpp
new file mode 100644
index 000000000..2654594c1
--- /dev/null
+++ b/src/core/hle/service/wlan/wlan.cpp
@@ -0,0 +1,172 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <memory>
6
7#include "core/hle/service/service.h"
8#include "core/hle/service/sm/sm.h"
9#include "core/hle/service/wlan/wlan.h"
10
11namespace Service::WLAN {
12
13class WLANInfra final : public ServiceFramework<WLANInfra> {
14public:
15 explicit WLANInfra() : ServiceFramework{"wlan:inf"} {
16 // clang-format off
17 static const FunctionInfo functions[] = {
18 {0, nullptr, "Unknown1"},
19 {1, nullptr, "Unknown2"},
20 {2, nullptr, "GetMacAddress"},
21 {3, nullptr, "StartScan"},
22 {4, nullptr, "StopScan"},
23 {5, nullptr, "Connect"},
24 {6, nullptr, "CancelConnect"},
25 {7, nullptr, "Disconnect"},
26 {8, nullptr, "Unknown3"},
27 {9, nullptr, "Unknown4"},
28 {10, nullptr, "GetState"},
29 {11, nullptr, "GetScanResult"},
30 {12, nullptr, "GetRssi"},
31 {13, nullptr, "ChangeRxAntenna"},
32 {14, nullptr, "Unknown5"},
33 {15, nullptr, "Unknown6"},
34 {16, nullptr, "RequestWakeUp"},
35 {17, nullptr, "RequestIfUpDown"},
36 {18, nullptr, "Unknown7"},
37 {19, nullptr, "Unknown8"},
38 {20, nullptr, "Unknown9"},
39 {21, nullptr, "Unknown10"},
40 {22, nullptr, "Unknown11"},
41 {23, nullptr, "Unknown12"},
42 {24, nullptr, "Unknown13"},
43 {25, nullptr, "Unknown14"},
44 {26, nullptr, "Unknown15"},
45 {27, nullptr, "Unknown16"},
46 };
47 // clang-format on
48
49 RegisterHandlers(functions);
50 }
51};
52
53class WLANLocal final : public ServiceFramework<WLANLocal> {
54public:
55 explicit WLANLocal() : ServiceFramework{"wlan:lcl"} {
56 // clang-format off
57 static const FunctionInfo functions[] = {
58 {0, nullptr, "Unknown1"},
59 {1, nullptr, "Unknown2"},
60 {2, nullptr, "Unknown3"},
61 {3, nullptr, "Unknown4"},
62 {4, nullptr, "Unknown5"},
63 {5, nullptr, "Unknown6"},
64 {6, nullptr, "GetMacAddress"},
65 {7, nullptr, "CreateBss"},
66 {8, nullptr, "DestroyBss"},
67 {9, nullptr, "StartScan"},
68 {10, nullptr, "StopScan"},
69 {11, nullptr, "Connect"},
70 {12, nullptr, "CancelConnect"},
71 {13, nullptr, "Join"},
72 {14, nullptr, "CancelJoin"},
73 {15, nullptr, "Disconnect"},
74 {16, nullptr, "SetBeaconLostCount"},
75 {17, nullptr, "Unknown7"},
76 {18, nullptr, "Unknown8"},
77 {19, nullptr, "Unknown9"},
78 {20, nullptr, "GetBssIndicationEvent"},
79 {21, nullptr, "GetBssIndicationInfo"},
80 {22, nullptr, "GetState"},
81 {23, nullptr, "GetAllowedChannels"},
82 {24, nullptr, "AddIe"},
83 {25, nullptr, "DeleteIe"},
84 {26, nullptr, "Unknown10"},
85 {27, nullptr, "Unknown11"},
86 {28, nullptr, "CreateRxEntry"},
87 {29, nullptr, "DeleteRxEntry"},
88 {30, nullptr, "Unknown12"},
89 {31, nullptr, "Unknown13"},
90 {32, nullptr, "AddMatchingDataToRxEntry"},
91 {33, nullptr, "RemoveMatchingDataFromRxEntry"},
92 {34, nullptr, "GetScanResult"},
93 {35, nullptr, "Unknown14"},
94 {36, nullptr, "SetActionFrameWithBeacon"},
95 {37, nullptr, "CancelActionFrameWithBeacon"},
96 {38, nullptr, "CreateRxEntryForActionFrame"},
97 {39, nullptr, "DeleteRxEntryForActionFrame"},
98 {40, nullptr, "Unknown15"},
99 {41, nullptr, "Unknown16"},
100 {42, nullptr, "CancelGetActionFrame"},
101 {43, nullptr, "GetRssi"},
102 {44, nullptr, "Unknown17"},
103 {45, nullptr, "Unknown18"},
104 {46, nullptr, "Unknown19"},
105 {47, nullptr, "Unknown20"},
106 {48, nullptr, "Unknown21"},
107 };
108 // clang-format on
109
110 RegisterHandlers(functions);
111 }
112};
113
114class WLANLocalGetFrame final : public ServiceFramework<WLANLocalGetFrame> {
115public:
116 explicit WLANLocalGetFrame() : ServiceFramework{"wlan:lg"} {
117 // clang-format off
118 static const FunctionInfo functions[] = {
119 {0, nullptr, "Unknown"},
120 };
121 // clang-format on
122
123 RegisterHandlers(functions);
124 }
125};
126
127class WLANSocketGetFrame final : public ServiceFramework<WLANSocketGetFrame> {
128public:
129 explicit WLANSocketGetFrame() : ServiceFramework{"wlan:sg"} {
130 // clang-format off
131 static const FunctionInfo functions[] = {
132 {0, nullptr, "Unknown"},
133 };
134 // clang-format on
135
136 RegisterHandlers(functions);
137 }
138};
139
140class WLANSocketManager final : public ServiceFramework<WLANSocketManager> {
141public:
142 explicit WLANSocketManager() : ServiceFramework{"wlan:soc"} {
143 // clang-format off
144 static const FunctionInfo functions[] = {
145 {0, nullptr, "Unknown1"},
146 {1, nullptr, "Unknown2"},
147 {2, nullptr, "Unknown3"},
148 {3, nullptr, "Unknown4"},
149 {4, nullptr, "Unknown5"},
150 {5, nullptr, "Unknown6"},
151 {6, nullptr, "GetMacAddress"},
152 {7, nullptr, "SwitchTsfTimerFunction"},
153 {8, nullptr, "Unknown7"},
154 {9, nullptr, "Unknown8"},
155 {10, nullptr, "Unknown9"},
156 {11, nullptr, "Unknown10"},
157 };
158 // clang-format on
159
160 RegisterHandlers(functions);
161 }
162};
163
164void InstallInterfaces(SM::ServiceManager& sm) {
165 std::make_shared<WLANInfra>()->InstallAsService(sm);
166 std::make_shared<WLANLocal>()->InstallAsService(sm);
167 std::make_shared<WLANLocalGetFrame>()->InstallAsService(sm);
168 std::make_shared<WLANSocketGetFrame>()->InstallAsService(sm);
169 std::make_shared<WLANSocketManager>()->InstallAsService(sm);
170}
171
172} // namespace Service::WLAN
diff --git a/src/core/hle/service/wlan/wlan.h b/src/core/hle/service/wlan/wlan.h
new file mode 100644
index 000000000..054ea928a
--- /dev/null
+++ b/src/core/hle/service/wlan/wlan.h
@@ -0,0 +1,15 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7namespace Service::SM {
8class ServiceManager;
9}
10
11namespace Service::WLAN {
12
13void InstallInterfaces(SM::ServiceManager& sm);
14
15} // namespace Service::WLAN
diff --git a/src/yuzu/about_dialog.cpp b/src/yuzu/about_dialog.cpp
index d6647eeea..39ed3bccf 100644
--- a/src/yuzu/about_dialog.cpp
+++ b/src/yuzu/about_dialog.cpp
@@ -10,8 +10,9 @@
10AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AboutDialog) { 10AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AboutDialog) {
11 ui->setupUi(this); 11 ui->setupUi(this);
12 ui->labelLogo->setPixmap(QIcon::fromTheme("yuzu").pixmap(200)); 12 ui->labelLogo->setPixmap(QIcon::fromTheme("yuzu").pixmap(200));
13 ui->labelBuildInfo->setText(ui->labelBuildInfo->text().arg( 13 ui->labelBuildInfo->setText(
14 Common::g_build_name, Common::g_scm_branch, Common::g_scm_desc)); 14 ui->labelBuildInfo->text().arg(Common::g_build_name, Common::g_scm_branch,
15 Common::g_scm_desc, QString(Common::g_build_date).left(10)));
15} 16}
16 17
17AboutDialog::~AboutDialog() {} 18AboutDialog::~AboutDialog() {}
diff --git a/src/yuzu/aboutdialog.ui b/src/yuzu/aboutdialog.ui
index 2680480cc..f122ba39d 100644
--- a/src/yuzu/aboutdialog.ui
+++ b/src/yuzu/aboutdialog.ui
@@ -70,7 +70,7 @@
70 </sizepolicy> 70 </sizepolicy>
71 </property> 71 </property>
72 <property name="text"> 72 <property name="text">
73 <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;%1 | %2-%3&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 73 <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;%1 | %2-%3 (%4)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
74 </property> 74 </property>
75 </widget> 75 </widget>
76 </item> 76 </item>
@@ -115,7 +115,7 @@ p, li { white-space: pre-wrap; }
115 <item> 115 <item>
116 <widget class="QLabel" name="labelLinks"> 116 <widget class="QLabel" name="labelLinks">
117 <property name="text"> 117 <property name="text">
118 <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://yuzu-emu.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Website&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;https://github.com/yuzu-emu&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Source Code&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;https://github.com/yuzu-emu/yuzu/graphs/contributors&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Contributors&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;https://github.com/yuzu-emu/yuzu/blob/master/license.txt&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;License&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 118 <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://yuzu-emu.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;Website&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;https://github.com/yuzu-emu&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;Source Code&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;https://github.com/yuzu-emu/yuzu/graphs/contributors&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;Contributors&lt;/span&gt;&lt;/a&gt; | &lt;a href=&quot;https://github.com/yuzu-emu/yuzu/blob/master/license.txt&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#039be5;&quot;&gt;License&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
119 </property> 119 </property>
120 <property name="openExternalLinks"> 120 <property name="openExternalLinks">
121 <bool>true</bool> 121 <bool>true</bool>
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index 5e66239ff..7fd07539a 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -44,5 +44,4 @@ void ConfigureDebug::applyConfiguration() {
44 Log::Filter filter; 44 Log::Filter filter;
45 filter.ParseFilterString(Settings::values.log_filter); 45 filter.ParseFilterString(Settings::values.log_filter);
46 Log::SetGlobalFilter(filter); 46 Log::SetGlobalFilter(filter);
47 Settings::Apply();
48} 47}
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index baa558667..cb7d3f8bf 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -44,5 +44,4 @@ void ConfigureGeneral::applyConfiguration() {
44 Settings::values.use_cpu_jit = ui->use_cpu_jit->isChecked(); 44 Settings::values.use_cpu_jit = ui->use_cpu_jit->isChecked();
45 Settings::values.use_multi_core = ui->use_multi_core->isChecked(); 45 Settings::values.use_multi_core = ui->use_multi_core->isChecked();
46 Settings::values.use_docked_mode = ui->use_docked_mode->isChecked(); 46 Settings::values.use_docked_mode = ui->use_docked_mode->isChecked();
47 Settings::Apply();
48} 47}
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp
index 7664880d5..3379b7963 100644
--- a/src/yuzu/configuration/configure_graphics.cpp
+++ b/src/yuzu/configuration/configure_graphics.cpp
@@ -67,5 +67,4 @@ void ConfigureGraphics::applyConfiguration() {
67 ToResolutionFactor(static_cast<Resolution>(ui->resolution_factor_combobox->currentIndex())); 67 ToResolutionFactor(static_cast<Resolution>(ui->resolution_factor_combobox->currentIndex()));
68 Settings::values.toggle_framelimit = ui->toggle_framelimit->isChecked(); 68 Settings::values.toggle_framelimit = ui->toggle_framelimit->isChecked();
69 Settings::values.use_accurate_framebuffers = ui->use_accurate_framebuffers->isChecked(); 69 Settings::values.use_accurate_framebuffers = ui->use_accurate_framebuffers->isChecked();
70 Settings::Apply();
71} 70}
diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp
index 78559e2bb..5e7badedf 100644
--- a/src/yuzu/configuration/configure_input.cpp
+++ b/src/yuzu/configuration/configure_input.cpp
@@ -191,8 +191,6 @@ void ConfigureInput::applyConfiguration() {
191 [](const Common::ParamPackage& param) { return param.Serialize(); }); 191 [](const Common::ParamPackage& param) { return param.Serialize(); });
192 std::transform(analogs_param.begin(), analogs_param.end(), Settings::values.analogs.begin(), 192 std::transform(analogs_param.begin(), analogs_param.end(), Settings::values.analogs.begin(),
193 [](const Common::ParamPackage& param) { return param.Serialize(); }); 193 [](const Common::ParamPackage& param) { return param.Serialize(); });
194
195 Settings::Apply();
196} 194}
197 195
198void ConfigureInput::loadConfiguration() { 196void ConfigureInput::loadConfiguration() {
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 96998643e..be38cfa9b 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -723,10 +723,12 @@ void GMainWindow::ToggleWindowMode() {
723 723
724void GMainWindow::OnConfigure() { 724void GMainWindow::OnConfigure() {
725 ConfigureDialog configureDialog(this); 725 ConfigureDialog configureDialog(this);
726 auto old_theme = UISettings::values.theme;
726 auto result = configureDialog.exec(); 727 auto result = configureDialog.exec();
727 if (result == QDialog::Accepted) { 728 if (result == QDialog::Accepted) {
728 configureDialog.applyConfiguration(); 729 configureDialog.applyConfiguration();
729 UpdateUITheme(); 730 if (UISettings::values.theme != old_theme)
731 UpdateUITheme();
730 config->Save(); 732 config->Save();
731 } 733 }
732} 734}
@@ -957,7 +959,6 @@ int main(int argc, char* argv[]) {
957 QCoreApplication::setOrganizationName("yuzu team"); 959 QCoreApplication::setOrganizationName("yuzu team");
958 QCoreApplication::setApplicationName("yuzu"); 960 QCoreApplication::setApplicationName("yuzu");
959 961
960 QApplication::setAttribute(Qt::AA_X11InitThreads);
961 QApplication::setAttribute(Qt::AA_DontCheckOpenGLContextThreadAffinity); 962 QApplication::setAttribute(Qt::AA_DontCheckOpenGLContextThreadAffinity);
962 QApplication app(argc, argv); 963 QApplication app(argc, argv);
963 964