Compare commits
700 Commits
render-tex
...
4.16.3
Author | SHA1 | Date | |
---|---|---|---|
|
65ba22f8ae | ||
|
7d5157e99b | ||
|
4f0ac05b16 | ||
|
6ad0cc7399 | ||
|
503534df00 | ||
|
a7f342d202 | ||
|
ac9bf2f773 | ||
|
3367a6209b | ||
|
3cbb4aeb19 | ||
|
0128aa9ead | ||
|
24f2540ba5 | ||
|
d13303496f | ||
|
2847fdd36f | ||
|
c042b3bf83 | ||
|
289aa4553f | ||
|
c785deacd2 | ||
|
78ffc7cefb | ||
|
6f44be847f | ||
|
3424b80ef1 | ||
|
5cf0d4f7fd | ||
|
f916d82280 | ||
|
7d0cb2f006 | ||
|
c2417dc107 | ||
|
d4202b836a | ||
|
82f08089f1 | ||
|
1610ecbbac | ||
|
b0048df3c6 | ||
|
b6370e1b0c | ||
|
8360bfc772 | ||
|
5670fea30d | ||
|
fabe179dab | ||
|
630699fb68 | ||
|
3f4a414b1d | ||
|
4569b1ab40 | ||
|
a484e8fc37 | ||
|
d51bf6d905 | ||
|
358b0b4d13 | ||
|
8648a67c10 | ||
|
f9b3ce95c2 | ||
|
c828813d78 | ||
|
5935dc174f | ||
|
b623b2acef | ||
|
cc867eeccf | ||
|
17bdb4c8fb | ||
|
9ded3e64a2 | ||
|
60b1496091 | ||
|
dc1b2d4117 | ||
|
e205f13495 | ||
|
72718b7193 | ||
|
db95e37e15 | ||
|
f9714cc054 | ||
|
58c49ce6b0 | ||
|
13364cea74 | ||
|
f6014bdc08 | ||
|
6070edfa61 | ||
|
0600357373 | ||
|
7873ebac2a | ||
|
8edd376ab8 | ||
|
6f300557bf | ||
|
bcda071d7d | ||
|
9df3a50c87 | ||
|
70d41583b3 | ||
|
a50df37d52 | ||
|
b7d07ae190 | ||
|
3610ac0fd1 | ||
|
9f855eecb1 | ||
|
ffc8f34dfd | ||
|
7acc1c0125 | ||
|
6059eaf355 | ||
|
26971c48d4 | ||
|
b42caef0ed | ||
|
b3706daf90 | ||
|
24dc9dc653 | ||
|
172dfb14c4 | ||
|
3b43078b08 | ||
|
f2e75529cb | ||
|
eed58b4051 | ||
|
28a01ca954 | ||
|
efd5395ecf | ||
|
376dbe9def | ||
|
bba7979670 | ||
|
01aafc6e65 | ||
|
fa86bfcb55 | ||
|
c3d9f4a9ac | ||
|
d11ac3585d | ||
|
8f78a0f809 | ||
|
3286d9f1b5 | ||
|
ee38c96ee3 | ||
|
e5705bd141 | ||
|
753d74d676 | ||
|
670b4aabac | ||
|
eba9316c12 | ||
|
7f3835cc4f | ||
|
be89fa7919 | ||
|
20d6938a90 | ||
|
6f4f4d0123 | ||
|
250322deb0 | ||
|
bdee95c32c | ||
|
1ffd23dbab | ||
|
e92bd4d9ce | ||
|
24841a8d5b | ||
|
c2dc459167 | ||
|
d87ce14869 | ||
|
e9735f0c35 | ||
|
d320373262 | ||
|
a84fe6bde6 | ||
|
a8748598b6 | ||
|
748acaf654 | ||
|
1ff9d1545d | ||
|
e35670a014 | ||
|
9690c87736 | ||
|
a60d96a9ac | ||
|
0a9b501743 | ||
|
6dd55e381d | ||
|
abd8d40bf9 | ||
|
348e938698 | ||
|
4e0a909ca9 | ||
|
8964f6f0cc | ||
|
b807b84e16 | ||
|
97a2c3a656 | ||
|
5925c4c51f | ||
|
0fa2ae48d4 | ||
|
43303bf7e5 | ||
|
f26f491d58 | ||
|
a9b46e8409 | ||
|
b27e67999b | ||
|
3177fd14f9 | ||
|
9ba41ed6e8 | ||
|
70f2e2e09c | ||
|
56fc8f0077 | ||
|
85abff343e | ||
|
6cefdfeddd | ||
|
75fa51ef6d | ||
|
4181b4b142 | ||
|
7b55d2cf1a | ||
|
03230181ce | ||
|
5e4f692e63 | ||
|
e9a046c439 | ||
|
182de7c957 | ||
|
6c939819a3 | ||
|
6288be286f | ||
|
76a13596aa | ||
|
c18cd6050b | ||
|
60f5d4c93e | ||
|
03840151ac | ||
|
2e44f3e2ff | ||
|
4f9fd5cf1d | ||
|
59f334622b | ||
|
c505a08e46 | ||
|
ffae0010c4 | ||
|
6c72a223f5 | ||
|
5a027594c3 | ||
|
ebc3600f78 | ||
|
ae0cf9ff54 | ||
|
08bf8b7464 | ||
|
0201abca5e | ||
|
d87b566c59 | ||
|
572b4140f9 | ||
|
6241471f3e | ||
|
1ae9cdb4c9 | ||
|
c1e1b54034 | ||
|
f654cb7d3b | ||
|
85beb4fa20 | ||
|
a0e81996eb | ||
|
ec477ef71d | ||
|
3afc760644 | ||
|
ba32140671 | ||
|
91d36dd410 | ||
|
4fd1e32752 | ||
|
b538adf2c0 | ||
|
d16c9fbaca | ||
|
9b6063c07c | ||
|
d1a4740894 | ||
|
5186c4dc45 | ||
|
ca9664cdfd | ||
|
6c9edbf0da | ||
|
b8d2b1d3ce | ||
|
0274294a6f | ||
|
03b19d8861 | ||
|
171612671f | ||
|
d3db28b3f4 | ||
|
896ea5b753 | ||
|
5498b077fd | ||
|
534a9b6ba0 | ||
|
cea961f4f4 | ||
|
848c6815d3 | ||
|
46559039f3 | ||
|
eb7a42bc13 | ||
|
ffe56fe6b3 | ||
|
d4ba57fcc3 | ||
|
a95c9ebc51 | ||
|
9195c39756 | ||
|
e0ffeb8ded | ||
|
d9bb434c1f | ||
|
866c83909c | ||
|
4965b7b6fa | ||
|
45f3e86457 | ||
|
c033de9b83 | ||
|
3f7f9b705e | ||
|
b6d19f4c8b | ||
|
3a2b8f94ec | ||
|
3a5933a519 | ||
|
4c295dc49c | ||
|
03ebb41262 | ||
|
b0c3265561 | ||
|
98943b28aa | ||
|
c354c5a63d | ||
|
2f8cb9b2d0 | ||
|
7559a87e8a | ||
|
b2394691cc | ||
|
5a94004b59 | ||
|
3bd609d77c | ||
|
84d2961a91 | ||
|
3a9f26113f | ||
|
6a240c36ac | ||
|
aaf4261969 | ||
|
0211299846 | ||
|
aca11d6879 | ||
|
5dceb7f7d2 | ||
|
3372b1a84b | ||
|
75a4eca13a | ||
|
13f0ab881e | ||
|
d4b45526b2 | ||
|
c06e1f4848 | ||
|
6a4a52d110 | ||
|
ed6f5b8755 | ||
|
e87b4dca71 | ||
|
567c8b5ab3 | ||
|
7aeca0512c | ||
|
5567934fc9 | ||
|
63bece1fe7 | ||
|
ad3c285fc6 | ||
|
47c461b25b | ||
|
97f0aa7875 | ||
|
8e54460a48 | ||
|
4c4d260199 | ||
|
b18c6b5781 | ||
|
d76e241558 | ||
|
13cbd9fcc7 | ||
|
6e54589d9e | ||
|
c781c0ff24 | ||
|
105ff3a25f | ||
|
0277e26152 | ||
|
563cce5530 | ||
|
b0e4be7fda | ||
|
e29701a203 | ||
|
6a1cd87480 | ||
|
3db858b45f | ||
|
49ee69f316 | ||
|
b43e0a3423 | ||
|
8054099d0e | ||
|
a8e49cc21f | ||
|
5f1ec18550 | ||
|
6b5c5714e5 | ||
|
9a8e5b07ae | ||
|
3f4cf65686 | ||
|
345eca1efe | ||
|
166afbf8e8 | ||
|
9120d1c834 | ||
|
083f9e7723 | ||
|
a0cfc6c404 | ||
|
edc50c85ef | ||
|
4794bc3db6 | ||
|
2299c02639 | ||
|
ae13a82a9a | ||
|
6c88713f82 | ||
|
5c6fedae17 | ||
|
5faa1c3d6e | ||
|
074bcd33be | ||
|
5b6b42b5a9 | ||
|
ae8a06cdca | ||
|
cba4ce03e5 | ||
|
5e82ad3ea7 | ||
|
c9bbf5820b | ||
|
bb0b764172 | ||
|
ae8e9ef650 | ||
|
8df7ff75bb | ||
|
bbfd8e0e89 | ||
|
467212877f | ||
|
204b8857a1 | ||
|
a524524ffd | ||
|
3ef1f448a3 | ||
|
a5df8f2f35 | ||
|
b56a8c7f88 | ||
|
649782b547 | ||
|
97245e9baa | ||
|
0f3c27c8a5 | ||
|
3273637179 | ||
|
1eaa0e9b74 | ||
|
28d1bce2d4 | ||
|
b8072d8562 | ||
|
da9886d822 | ||
|
747f2e5af6 | ||
|
aeb3ee0969 | ||
|
e248f1a4b5 | ||
|
d23833285e | ||
|
ff9fe6857f | ||
|
58f2d3fbe7 | ||
|
d9f75581be | ||
|
307efe2172 | ||
|
4ea4dc9176 | ||
|
fa25015e8c | ||
|
296b6b1ed5 | ||
|
b88fe301be | ||
|
ffd836e6f4 | ||
|
457cf66d0d | ||
|
36765745a1 | ||
|
46c19a3d28 | ||
|
6cf928eb6c | ||
|
a0d076f01a | ||
|
37c744759c | ||
|
277a05eb8c | ||
|
0376e4668c | ||
|
9d5652de64 | ||
|
bb109b5d9e | ||
|
d630ddd182 | ||
|
e268041a42 | ||
|
f9cbeeeedc | ||
|
62542f836f | ||
|
6d4c74fdce | ||
|
3dac4a01c6 | ||
|
f598ec00f5 | ||
|
6fc18f4b37 | ||
|
8c9f16fa7a | ||
|
001ca0a982 | ||
|
b23c0248ba | ||
|
c4c352facc | ||
|
30af6d1159 | ||
|
1fac3fe44e | ||
|
8ac6c08f00 | ||
|
5b62f29b5e | ||
|
817cfb09f8 | ||
|
8da478ab34 | ||
|
8d866c5980 | ||
|
467e622778 | ||
|
aa81df921b | ||
|
328020b241 | ||
|
41cd0c6f13 | ||
|
db02abe54e | ||
|
447bc18c48 | ||
|
283c66251b | ||
|
63b68d2f5e | ||
|
7e09a5648a | ||
|
4a0b833548 | ||
|
86bec01640 | ||
|
b07a2a968d | ||
|
997d553520 | ||
|
8eb05850cb | ||
|
98eaec99ee | ||
|
8fb946f6e8 | ||
|
a10670c991 | ||
|
48f347e62b | ||
|
ed1c047cf2 | ||
|
ea9c2a72d9 | ||
|
15edfe4ffa | ||
|
c2698e2be9 | ||
|
0defdc4af5 | ||
|
ea9b47f1b6 | ||
|
65c8320a32 | ||
|
a7afde2e7d | ||
|
a876a829e4 | ||
|
f4bd883003 | ||
|
0fcdadc531 | ||
|
d58b545ffb | ||
|
8ca299e82b | ||
|
a231a2114a | ||
|
ab41a549f8 | ||
|
a9997a3af6 | ||
|
6d86b16dbe | ||
|
779d32747d | ||
|
ffeca06bd6 | ||
|
83b387e782 | ||
|
b41fe2e093 | ||
|
93573218d4 | ||
|
076968dc1e | ||
|
5e6cf622e3 | ||
|
90c65e3611 | ||
|
afe75aedc2 | ||
|
8b215a453c | ||
|
c3329123a3 | ||
|
107ef2017c | ||
|
acad180cee | ||
|
504ca9c0c8 | ||
|
2d9f28c0ff | ||
|
07b3e8785c | ||
|
68ef86ac4f | ||
|
beb20fb1db | ||
|
3a965088a2 | ||
|
89118ee7ba | ||
|
4b5d503cf0 | ||
|
aeac103fbc | ||
|
cd153e8a53 | ||
|
5369b07eb0 | ||
|
58f7b966d0 | ||
|
4be1d754b7 | ||
|
c1351fb659 | ||
|
d8926de40e | ||
|
73c94cf1d6 | ||
|
c2a637f68a | ||
|
6a986f03b6 | ||
|
a52ae238ab | ||
|
8a0d688a61 | ||
|
3260b8f142 | ||
|
dc8e01d469 | ||
|
0105da3238 | ||
|
8979515aa4 | ||
|
a8c827455d | ||
|
798edf5300 | ||
|
54758bee1f | ||
|
cfe0da1eed | ||
|
1198dc76a4 | ||
|
bed3e9918b | ||
|
d76bb2991a | ||
|
e962e86fcd | ||
|
dd59c90842 | ||
|
c03720879e | ||
|
a62787ebb2 | ||
|
2a7541342c | ||
|
f96d6cdb2b | ||
|
3ea6ddd321 | ||
|
17f7d80fcf | ||
|
e3437c748a | ||
|
f1d80727d0 | ||
|
c7fabe2897 | ||
|
cc1c3799b6 | ||
|
a196bf1132 | ||
|
4bcfeebdea | ||
|
740965016f | ||
|
39e6301f42 | ||
|
fd02c885e9 | ||
|
26a2966a7b | ||
|
29cfcbdc97 | ||
|
de62ea96ab | ||
|
2d230f79a6 | ||
|
cde094a0df | ||
|
2fb3dc8c90 | ||
|
f6a8ba0ccb | ||
|
f650f96b69 | ||
|
c230546a2c | ||
|
f3ac0535f8 | ||
|
7ce942d3fb | ||
|
56a8e947df | ||
|
f592a303e4 | ||
|
e14670d457 | ||
|
0acf9caa8e | ||
|
22860389de | ||
|
16e764b402 | ||
|
85862c4e22 | ||
|
eb764d43f8 | ||
|
6b57f596f7 | ||
|
cefaec5d6f | ||
|
29b6eab0ea | ||
|
360674f523 | ||
|
7900f91e46 | ||
|
e4248503cf | ||
|
168bab34f7 | ||
|
46e7ea8c1e | ||
|
1ce7de0fb8 | ||
|
d9a0f3cfe2 | ||
|
200cec3321 | ||
|
d4e730db0c | ||
|
ca78d845df | ||
|
9ff31dd29b | ||
|
0815359a20 | ||
|
96139a902d | ||
|
a6233ac852 | ||
|
4e9ebb5299 | ||
|
585f31fa2e | ||
|
69e7838461 | ||
|
3fe3800b7c | ||
|
491275b444 | ||
|
1cd107d5ab | ||
|
5af2d95bff | ||
|
62f5db06a1 | ||
|
e32a12f877 | ||
|
584733f034 | ||
|
c3c1819e12 | ||
|
3f36ebc6e7 | ||
|
4aea2d2e09 | ||
|
4e9107d4b1 | ||
|
7d895720be | ||
|
323dde2b10 | ||
|
ac16e375c7 | ||
|
31143f9611 | ||
|
7da4844dcc | ||
|
c9e4abcd3a | ||
|
6e80fde45f | ||
|
d182b133a9 | ||
|
5e3240a32f | ||
|
436989d745 | ||
|
f62606105e | ||
|
0f85a40a25 | ||
|
16ad1e428f | ||
|
a6e0028899 | ||
|
dc3def1afd | ||
|
a14e426fb5 | ||
|
a1a4026867 | ||
|
aff1b88c92 | ||
|
dc072f881c | ||
|
824ccfc562 | ||
|
8c6e5ca131 | ||
|
a7b69ad9b5 | ||
|
3cd25516ab | ||
|
f3c8c5a9c0 | ||
|
6878200ccf | ||
|
e1fbd52c29 | ||
|
79c2df8392 | ||
|
0888402cea | ||
|
3dae3205e7 | ||
|
4858122d17 | ||
|
a19023277f | ||
|
72dc9e3bf1 | ||
|
5f814cc30a | ||
|
23aafbf09f | ||
|
761dc7cad0 | ||
|
f62a873eef | ||
|
03c99ebc99 | ||
|
cb339f85b8 | ||
|
5d056eabf6 | ||
|
4e77667ab8 | ||
|
d3e3ddf897 | ||
|
fca983e81e | ||
|
b1995d0d77 | ||
|
8ccfda4972 | ||
|
9a47c0f923 | ||
|
b33b679b13 | ||
|
8d41ecff3e | ||
|
85bcf9a366 | ||
|
b27e3631f0 | ||
|
4d5ba0631d | ||
|
0f618ae29e | ||
|
13d415f2f6 | ||
|
e7b14ae26e | ||
|
07658347a9 | ||
|
0436801a9c | ||
|
4da593a3de | ||
|
f5194bbf83 | ||
|
15552e5478 | ||
|
d9616c1993 | ||
|
5dbce5ce9b | ||
|
1f47c36e49 | ||
|
ed05890740 | ||
|
68d73dcce5 | ||
|
9643a21827 | ||
|
07b64c2f0f | ||
|
3df3ec2a29 | ||
|
0015fda94c | ||
|
589f483e7b | ||
|
a77f8c9f62 | ||
|
1d7aa9e40b | ||
|
8de4b04819 | ||
|
175dba86fd | ||
|
767b9b9405 | ||
|
202a51d9e3 | ||
|
3014d36a61 | ||
|
d718fda057 | ||
|
bbb7b365d5 | ||
|
740e485160 | ||
|
5a69127862 | ||
|
798883f21a | ||
|
bec71a15b4 | ||
|
c4baf60044 | ||
|
d32081401f | ||
|
ed119ae246 | ||
|
51768d0e16 | ||
|
6f1a4e5bb9 | ||
|
e323d2a93e | ||
|
23922eebf1 | ||
|
92bd85ba30 | ||
|
ca7aa30bc5 | ||
|
d17972427a | ||
|
25f0c81530 | ||
|
4f95d126ba | ||
|
310196cc59 | ||
|
8052bcc69c | ||
|
04ee41d7b0 | ||
|
23af1cd8ad | ||
|
4426194ee6 | ||
|
92c119e12c | ||
|
ff02665407 | ||
|
d471ed5912 | ||
|
b92ca5da02 | ||
|
0f7c0f616c | ||
|
5551f30400 | ||
|
2c10d72fe5 | ||
|
44fe51247c | ||
|
3a99f1e9f1 | ||
|
d233f0ca3e | ||
|
c548bdc3fe | ||
|
839d797292 | ||
|
f8a30ddfc1 | ||
|
bb0eb3af45 | ||
|
999d9bc73b | ||
|
16c7003acb | ||
|
f64045c229 | ||
|
58aebc4447 | ||
|
3b3b6036f8 | ||
|
75748f4ae9 | ||
|
f90fb68aec | ||
|
4fa3943e51 | ||
|
0a92f741b3 | ||
|
a35f8d52d6 | ||
|
b08ccc0bec | ||
|
523cd0dff7 | ||
|
8ac1806015 | ||
|
0b2275774f | ||
|
4fbfe9b041 | ||
|
b6c848d711 | ||
|
a467cfd060 | ||
|
f24be8476e | ||
|
904b1815b5 | ||
|
d6322c6389 | ||
|
2ee16e5dd9 | ||
|
f846315a6a | ||
|
5329b7d211 | ||
|
ac18a665d5 | ||
|
c492e71aed | ||
|
4ea1319c6b | ||
|
2aac3c2cc9 | ||
|
55d18bdc06 | ||
|
abefa0ab00 | ||
|
ea28dc8cff | ||
|
d3b9eb7fc8 | ||
|
cdb61923af | ||
|
070ddcd14b | ||
|
355890b421 | ||
|
d86407f263 | ||
|
a24a7db72b | ||
|
2096a29b06 | ||
|
ce352b5538 | ||
|
4bcd2c75cc | ||
|
3c3bf0192d | ||
|
cf84d999d8 | ||
|
668628941e | ||
|
33f8fa331d | ||
|
7814d1fd75 | ||
|
b57c3008a3 | ||
|
99d291eb69 | ||
|
8e35398371 | ||
|
3313fd4e2b | ||
|
56c02dd7d1 | ||
|
4e4ed1e2d5 | ||
|
82aa2cb5c2 | ||
|
e9944148d5 | ||
|
afa4eb7d35 | ||
|
55597d88a4 | ||
|
ac37b589b6 | ||
|
b9d868b8eb | ||
|
30e5bfcbf0 | ||
|
57e21683a6 | ||
|
852ecf7c20 | ||
|
5976debfcd | ||
|
08fcba63d0 | ||
|
1abe9760ab | ||
|
9a4d8453ed | ||
|
b637c3e201 | ||
|
292f54dd60 | ||
|
1328c1409a | ||
|
dbeddd4417 | ||
|
add5dec4a9 | ||
|
97b51dc070 | ||
|
88c9a30f77 | ||
|
83035c1d4b | ||
|
50c19a6534 | ||
|
5c071cb02e | ||
|
6edb526561 | ||
|
ee18156675 | ||
|
e70a961ac1 | ||
|
ffdc8c8f60 | ||
|
fd78bd3eaf | ||
|
f2ccba0988 | ||
|
8ee465c630 | ||
|
31b655c9eb | ||
|
7fd65cc3c1 | ||
|
8089222fc3 | ||
|
0667bd39fb | ||
|
a4854dfa9e | ||
|
6c54d0a7e2 | ||
|
341860eb4d | ||
|
876445f080 | ||
|
03ef6a7719 | ||
|
2960bb7cb2 | ||
|
161c0f0963 | ||
|
3002591d08 | ||
|
1b2b9726f8 | ||
|
a3691d311b | ||
|
89d449352f | ||
|
e220e6dae7 | ||
|
bd3d1f7715 | ||
|
f3ffa99f6a | ||
|
85830c059e | ||
|
6435d5083a | ||
|
f0925e4ef2 | ||
|
df87b1820b | ||
|
170f099ce1 | ||
|
ccc6f7c24e | ||
|
41b21b6634 | ||
|
b46a900d71 | ||
|
4fa661b450 | ||
|
4da8d39ec5 |
@@ -26,7 +26,8 @@ variables:
|
||||
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
||||
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-testsuite=true -Dintrospection=enabled"
|
||||
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v49"
|
||||
MESON_TEST_MAX_PROCESSES: 8
|
||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v52"
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
@@ -118,8 +119,9 @@ release-build:
|
||||
script:
|
||||
- .gitlab-ci/show-info-linux.sh
|
||||
- mkdir _install
|
||||
- export PATH="$HOME/.local/bin:${CI_PROJECT_DIR}/_install/bin:$PATH"
|
||||
- .gitlab-ci/install-meson-project.sh --prefix ${CI_PROJECT_DIR}/_install https://gitlab.gnome.org/jadahl/catch.git main
|
||||
# don't use catch by default, since it causes sporadic test failures
|
||||
# - export PATH="$HOME/.local/bin:${CI_PROJECT_DIR}/_install/bin:$PATH"
|
||||
# - .gitlab-ci/install-meson-project.sh --prefix ${CI_PROJECT_DIR}/_install https://gitlab.gnome.org/jadahl/catch.git main
|
||||
- meson subprojects download
|
||||
- meson subprojects update --reset
|
||||
- meson setup
|
||||
@@ -414,11 +416,12 @@ static-scan:
|
||||
# Run tests with the address sanitizer. We need to turn off introspection
|
||||
# and f16c, since they are incompatible with asan
|
||||
asan-build:
|
||||
image: $FEDORA_IMAGE
|
||||
extends: .build-fedora-default
|
||||
tags: [ asan ]
|
||||
stage: analysis
|
||||
needs: []
|
||||
variables:
|
||||
MESON_TEST_MAX_PROCESSES: 4
|
||||
script:
|
||||
- export PATH="$HOME/.local/bin:$PATH"
|
||||
- CC=clang meson setup
|
||||
|
@@ -1,4 +1,4 @@
|
||||
FROM fedora:39
|
||||
FROM fedora:40
|
||||
|
||||
RUN dnf -y install \
|
||||
adwaita-icon-theme \
|
||||
@@ -99,8 +99,11 @@ RUN dnf -y install \
|
||||
which \
|
||||
wireplumber \
|
||||
xorg-x11-server-Xvfb \
|
||||
&& dnf -y update \
|
||||
&& dnf clean all
|
||||
|
||||
RUN rm /usr/share/vulkan/icd.d/powervr_mesa_icd.x86_64.json
|
||||
|
||||
# Enable sudo for wheel users
|
||||
RUN sed -i -e 's/# %wheel/%wheel/' -e '0,/%wheel/{s/%wheel/# %wheel/}' /etc/sudoers
|
||||
|
||||
|
@@ -8,17 +8,19 @@ builddir=$1
|
||||
setup=$2
|
||||
suite=$3
|
||||
multiplier=${MESON_TEST_TIMEOUT_MULTIPLIER:-1}
|
||||
n_processes=${MESON_TEST_MAX_PROCESSES:-1}
|
||||
|
||||
# Ignore memory leaks lower in dependencies
|
||||
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:detect_leaks=0:allocator_may_return_null=1
|
||||
export G_SLICE=always-malloc
|
||||
|
||||
case "${setup}" in
|
||||
x11*)
|
||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
||||
dbus-run-session -- \
|
||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
||||
meson test -C ${builddir} \
|
||||
--quiet \
|
||||
--timeout-multiplier "${multiplier}" \
|
||||
--num-processes "${n_processes}" \
|
||||
--print-errorlogs \
|
||||
--setup=${setup} \
|
||||
--suite=${suite//,/ --suite=} \
|
||||
@@ -40,9 +42,11 @@ case "${setup}" in
|
||||
compositor=$!
|
||||
export WAYLAND_DISPLAY=wayland-5
|
||||
|
||||
meson test -C ${builddir} \
|
||||
dbus-run-session -- \
|
||||
meson test -C ${builddir} \
|
||||
--quiet \
|
||||
--timeout-multiplier "${multiplier}" \
|
||||
--num-processes "${n_processes}" \
|
||||
--print-errorlogs \
|
||||
--setup=${setup} \
|
||||
--suite=${suite//,/ --suite=} \
|
||||
@@ -63,9 +67,11 @@ case "${setup}" in
|
||||
server=$!
|
||||
export BROADWAY_DISPLAY=:5
|
||||
|
||||
meson test -C ${builddir} \
|
||||
dbus-run-session -- \
|
||||
meson test -C ${builddir} \
|
||||
--quiet \
|
||||
--timeout-multiplier "${multiplier}" \
|
||||
--num-processes "${n_processes}" \
|
||||
--print-errorlogs \
|
||||
--setup=${setup} \
|
||||
--suite=${suite//,/ --suite=} \
|
||||
|
307
NEWS
307
NEWS
@@ -1,6 +1,311 @@
|
||||
Overview of Changes in 4.15.5, xx-xx-xxxx
|
||||
Overview of Changes in 4.16.3, 04-10-2024
|
||||
=========================================
|
||||
|
||||
* GtkScrolledWindow
|
||||
- Fix criticals in size allocation code
|
||||
|
||||
* GtkFileChooser
|
||||
- Fix a crash in the portal code
|
||||
|
||||
* GtkPicture
|
||||
- Avoid unnecessary resizes
|
||||
|
||||
* GtkVideo
|
||||
- Make dmabufs work without GL
|
||||
|
||||
* Accessibility:
|
||||
- Always realized non-widget accessibles
|
||||
|
||||
* Wayland:
|
||||
- Improve settings portal handling
|
||||
- Improve fallback for cursor themes
|
||||
- Sync default values for settings with schema defaults
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
Galician
|
||||
Swedish
|
||||
|
||||
|
||||
Overview of Changes in 4.16.2, 25-09-2024
|
||||
=========================================
|
||||
|
||||
* GtkLabel:
|
||||
- Fix centered text in RTL
|
||||
|
||||
* Gsk:
|
||||
- Speed up some Vulkan operations
|
||||
- Improve startup speed by avoiding initialization
|
||||
of GL and Vulkan in most cases
|
||||
- Reduce critials at startup to warnings
|
||||
- Fix a crash on startup with some Vulkan drivers
|
||||
- Fix a big texture leak in NGL
|
||||
|
||||
* Gdk:
|
||||
- Speed up memory format conversions
|
||||
|
||||
* Wayland:
|
||||
- Be more careful with mimetypes during DND or copy-paste
|
||||
|
||||
* Tools:
|
||||
- builder-tool: Improve conversion of boxes
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
Bulgarian
|
||||
Catalan
|
||||
Chinese (China)
|
||||
Georgian
|
||||
German
|
||||
Hebrew
|
||||
Indonesian
|
||||
Persian
|
||||
Polish
|
||||
Portuguese
|
||||
Slovenian
|
||||
Spanish
|
||||
Turkish
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in 4.16.1, 16-09-2024
|
||||
=========================================
|
||||
|
||||
* GtkFileChooser:
|
||||
- Plug a memory leak
|
||||
|
||||
* GtkCalendar:
|
||||
- Avoid ending up with invalid dates
|
||||
|
||||
* Printing:
|
||||
- Fix initial printer selection in the print dialog
|
||||
|
||||
* Gsk:
|
||||
- Fix shadows for opaque textures
|
||||
- Fix a crash in a corner case
|
||||
|
||||
* Css:
|
||||
- Make relative paths work again in theme files
|
||||
|
||||
* Accessibility:
|
||||
- Fix detection of the Flatpak portal
|
||||
|
||||
* MacOS:
|
||||
- Fix keyboard input in popovers
|
||||
- Keep DND icons above regular windows
|
||||
- Ignore events from DND icons
|
||||
|
||||
* Translation updates
|
||||
Basque
|
||||
British English
|
||||
Bulgarian
|
||||
Czech
|
||||
Danish
|
||||
Georgian
|
||||
Hungarian
|
||||
Lithuanian
|
||||
Portuguese
|
||||
Spanish
|
||||
Swedish
|
||||
|
||||
|
||||
Overview of Changes in 4.16.0, 06-09-2024
|
||||
=========================================
|
||||
|
||||
Note: This release changes the default GSK renderer to be Vulkan,
|
||||
on Wayland. Other platforms still use ngl. The intent of this change
|
||||
is to use the best available platform APIs. You can still override
|
||||
the renderer choice using the GSK_RENDERER environment variable.
|
||||
|
||||
We believe that most of the problems reported with the new renderers
|
||||
during the 4.13 and 4.15 development cycles have been addressed by now.
|
||||
|
||||
But the new renderers and dmabuf support are using graphics drivers
|
||||
in different ways than the old gl renderer, and trigger new driver bugs.
|
||||
Therefore, it is recommended to use the latest mesa release (24.2)
|
||||
with the new renderers.
|
||||
|
||||
* GtkScale:
|
||||
- Fix positioning of scale values
|
||||
|
||||
* GtkEmojiChooser:
|
||||
- Make Control-clicks work for the recent section
|
||||
|
||||
* GtkPopover:
|
||||
- Make sure focus lands on the right widget when cascading
|
||||
|
||||
* GtkSpinButton:
|
||||
- Disable Emoji input for numeric spin buttons
|
||||
|
||||
* GtkSingleSelection:
|
||||
- Implement unselect_all
|
||||
|
||||
* Accssibility:
|
||||
- Fix roles for radio buttons
|
||||
- Check if ATs are listening before exporting trees
|
||||
- Add a check for sandboxed accessibility bus
|
||||
- Fix handling of the error message relation
|
||||
- Turn criticals into debug messages
|
||||
- Set expanded states properly in menus
|
||||
|
||||
* CSS:
|
||||
- Fix a few issues on bigendian systems
|
||||
- Avoid a crash with relative colors
|
||||
|
||||
* GSK:
|
||||
- Use the right GL context when exporting textures
|
||||
- Don't let colors influence depth decisions
|
||||
- Allow uploading of mipmap levels when tiling textures
|
||||
|
||||
* GDK:
|
||||
- Update keysyms from libX11 1.8.10
|
||||
- Implement cpu-side mipmapping
|
||||
- Use a thread pool for color conversions and mipmapping
|
||||
|
||||
* Vulkan:
|
||||
- Fix drag surface offsets
|
||||
|
||||
* Wayland:
|
||||
- Fix a crash
|
||||
- Associate EGL windows with context later
|
||||
|
||||
* X11:
|
||||
- Fix initial EGL context creation
|
||||
- Fix a problem with GL context creation
|
||||
|
||||
* Broadway:
|
||||
- Implement compute_size and request_layout
|
||||
|
||||
* MacOS:
|
||||
- Set transparent backgroiund for toplevel windows
|
||||
|
||||
* Windows:
|
||||
- Improve debug output
|
||||
- Detect Mesas d3d12 driver and request GDI compat
|
||||
|
||||
* Demos:
|
||||
- Set window icons in demos
|
||||
- Add a 64k x 64k image to the image scaling demo
|
||||
|
||||
* Translation updates
|
||||
Belarusian
|
||||
Brazilian Portuguese
|
||||
Catalan
|
||||
Czech
|
||||
Galician
|
||||
German
|
||||
Hebrew
|
||||
Indonesian
|
||||
Korean
|
||||
Lithuanian
|
||||
Persian
|
||||
Polish
|
||||
Portuguese
|
||||
Slovenian
|
||||
Spanish
|
||||
Turkish
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in 4.15.6, 26-08-2024
|
||||
=========================================
|
||||
|
||||
* GtkCheckButton:
|
||||
- Add a grouped style class for radio buttons
|
||||
|
||||
* GtkScale:
|
||||
- Fix alignment and positioning problems
|
||||
|
||||
* Css:
|
||||
- Fix crashes in the variable support
|
||||
|
||||
* Gsk:
|
||||
- Make graphics offloading work better with kwin
|
||||
- Make colorstate transfer functions more robust
|
||||
- GC dead textures more agressively
|
||||
- Only use a single render pass per frame
|
||||
|
||||
* GL:
|
||||
- Round damage rectangles properly
|
||||
- Use the shared context when creating textures
|
||||
- Fix a file descriptor leak in dmabuf export
|
||||
|
||||
* Vulkan:
|
||||
- Round damage rectangles properly
|
||||
|
||||
* Wayland:
|
||||
- Work with the kwin implementation of xx-color-management-v4
|
||||
|
||||
* Windows:
|
||||
- Make gtk_show_uri use SHOpenWithDialog()
|
||||
- Enable incremental rendering with WGL
|
||||
|
||||
* Macos:
|
||||
- Open context menus on Ctrl-left click
|
||||
|
||||
* Debugging:
|
||||
- Show color state information in the inspector
|
||||
- Collect input event traces in the recorder
|
||||
- Add shortcuts for toggling recording: Super-r
|
||||
and for screenshots: Super-c
|
||||
- Split the GDK_DEBUG env var into GDK_DEBUG and GDK_DISABLE
|
||||
- Add GDK_DISABLE=color-mgmt and GDK_DISABLE=offload
|
||||
|
||||
* Tools:
|
||||
- Add a 'Paste as node' action in gtk4-node-editor
|
||||
|
||||
* Translations updates
|
||||
Basque
|
||||
Belarusian
|
||||
Brazilian Portuguese
|
||||
Chinese (China)
|
||||
Georgian
|
||||
Hebrew
|
||||
Hindi
|
||||
Russian
|
||||
Slovenian
|
||||
Turkish
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in 4.15.5, 11-08-2024
|
||||
=========================================
|
||||
|
||||
* GtkTextView:
|
||||
- ADd GtkTextBufferCommitNotify
|
||||
|
||||
* CSS:
|
||||
- Propagate color state information to GSK for many features:
|
||||
colors, borders, shadows, text
|
||||
|
||||
* Gdk:
|
||||
- Fix an fd leak in the Vulkan code
|
||||
- Fix a leak of EGLSurfaces and DMA buffers
|
||||
- Set the opaque region of surfaces automatically based on their content
|
||||
|
||||
* Gsk:
|
||||
- Fix Emoji rendering in Vulkan
|
||||
- Rework color handling to take color states into account
|
||||
- Implement more powerful occlusion culling
|
||||
- Minimize our use of renderpasses
|
||||
|
||||
* Macos:
|
||||
- Fix window transparency
|
||||
|
||||
* Debugging:
|
||||
- The inspector shows details about color states
|
||||
|
||||
* Deprecations:
|
||||
- gdk_draw_context_begin/end_frame
|
||||
- gdk_surface_set_opaque_region
|
||||
|
||||
* Build:
|
||||
- Require gstreamer 1.24
|
||||
|
||||
* Translation updates
|
||||
Romanian
|
||||
|
||||
|
||||
Overview of Changes in 4.15.4, 30-07-2024
|
||||
=========================================
|
||||
|
||||
|
@@ -454,6 +454,9 @@
|
||||
<file>icons/16x16/categories/applications-other.png</file>
|
||||
<file>icons/48x48/status/starred.png</file>
|
||||
<file alias="icons/scalable/apps/org.gtk.Demo4.svg">data/scalable/apps/org.gtk.Demo4.svg</file>
|
||||
<file>portland-rose-thumbnail.png</file>
|
||||
<file>large-image-thumbnail.png</file>
|
||||
<file compressed="true">large-image.png</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/Demo4/gtk">
|
||||
<file preprocess="xml-stripblanks">help-overlay.ui</file>
|
||||
|
@@ -55,7 +55,7 @@ mode_switch_state_set (GtkSwitch *sw,
|
||||
{
|
||||
gtk_widget_set_visible (label, TRUE);
|
||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (sw),
|
||||
GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE, label,
|
||||
GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE, label, NULL,
|
||||
-1);
|
||||
gtk_accessible_update_state (GTK_ACCESSIBLE (sw),
|
||||
GTK_ACCESSIBLE_STATE_INVALID, GTK_ACCESSIBLE_INVALID_TRUE,
|
||||
|
@@ -14,6 +14,103 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include "demo3widget.h"
|
||||
|
||||
static GtkWidget *window = NULL;
|
||||
static GCancellable *cancellable = NULL;
|
||||
|
||||
static void
|
||||
load_texture (GTask *task,
|
||||
gpointer source_object,
|
||||
gpointer task_data,
|
||||
GCancellable *cable)
|
||||
{
|
||||
GFile *file = task_data;
|
||||
GdkTexture *texture;
|
||||
GError *error = NULL;
|
||||
|
||||
texture = gdk_texture_new_from_file (file, &error);
|
||||
|
||||
if (texture)
|
||||
g_task_return_pointer (task, texture, g_object_unref);
|
||||
else
|
||||
g_task_return_error (task, error);
|
||||
}
|
||||
|
||||
static void
|
||||
set_wait_cursor (GtkWidget *widget)
|
||||
{
|
||||
gtk_widget_set_cursor_from_name (GTK_WIDGET (gtk_widget_get_root (widget)), "wait");
|
||||
}
|
||||
|
||||
static void
|
||||
unset_wait_cursor (GtkWidget *widget)
|
||||
{
|
||||
gtk_widget_set_cursor (GTK_WIDGET (gtk_widget_get_root (widget)), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
texture_loaded (GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer data)
|
||||
{
|
||||
GdkTexture *texture;
|
||||
GError *error = NULL;
|
||||
|
||||
texture = g_task_propagate_pointer (G_TASK (result), &error);
|
||||
|
||||
if (!texture)
|
||||
{
|
||||
g_print ("%s\n", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!window)
|
||||
{
|
||||
g_object_unref (texture);
|
||||
return;
|
||||
}
|
||||
|
||||
unset_wait_cursor (GTK_WIDGET (data));
|
||||
|
||||
g_object_set (G_OBJECT (data), "texture", texture, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
open_file_async (GFile *file,
|
||||
GtkWidget *demo)
|
||||
{
|
||||
GTask *task;
|
||||
|
||||
set_wait_cursor (demo);
|
||||
|
||||
task = g_task_new (demo, cancellable, texture_loaded, demo);
|
||||
g_task_set_task_data (task, g_object_ref (file), g_object_unref);
|
||||
g_task_run_in_thread (task, load_texture);
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
static void
|
||||
open_portland_rose (GtkWidget *button,
|
||||
GtkWidget *demo)
|
||||
{
|
||||
GFile *file;
|
||||
|
||||
file = g_file_new_for_uri ("resource:///transparent/portland-rose.jpg");
|
||||
open_file_async (file, demo);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
static void
|
||||
open_large_image (GtkWidget *button,
|
||||
GtkWidget *demo)
|
||||
{
|
||||
GFile *file;
|
||||
|
||||
file = g_file_new_for_uri ("resource:///org/gtk/Demo4/large-image.png");
|
||||
open_file_async (file, demo);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
static void
|
||||
file_opened (GObject *source,
|
||||
GAsyncResult *result,
|
||||
@@ -21,7 +118,6 @@ file_opened (GObject *source,
|
||||
{
|
||||
GFile *file;
|
||||
GError *error = NULL;
|
||||
GdkTexture *texture;
|
||||
|
||||
file = gtk_file_dialog_open_finish (GTK_FILE_DIALOG (source), result, &error);
|
||||
|
||||
@@ -32,17 +128,9 @@ file_opened (GObject *source,
|
||||
return;
|
||||
}
|
||||
|
||||
texture = gdk_texture_new_from_file (file, &error);
|
||||
g_object_unref (file);
|
||||
if (!texture)
|
||||
{
|
||||
g_print ("%s\n", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
open_file_async (file, data);
|
||||
|
||||
g_object_set (G_OBJECT (data), "texture", texture, NULL);
|
||||
g_object_unref (texture);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -116,11 +204,26 @@ transform_from (GBinding *binding,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
free_cancellable (gpointer data)
|
||||
{
|
||||
g_cancellable_cancel (cancellable);
|
||||
g_clear_object (&cancellable);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
cancel_load (GtkWidget *widget,
|
||||
GVariant *args,
|
||||
gpointer data)
|
||||
{
|
||||
unset_wait_cursor (widget);
|
||||
g_cancellable_cancel (G_CANCELLABLE (data));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_image_scaling (GtkWidget *do_widget)
|
||||
{
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
GtkWidget *box;
|
||||
@@ -130,6 +233,7 @@ do_image_scaling (GtkWidget *do_widget)
|
||||
GtkWidget *scale;
|
||||
GtkWidget *dropdown;
|
||||
GtkWidget *button;
|
||||
GtkEventController *controller;
|
||||
|
||||
window = gtk_window_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Image Scaling");
|
||||
@@ -138,6 +242,20 @@ do_image_scaling (GtkWidget *do_widget)
|
||||
gtk_widget_get_display (do_widget));
|
||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||
|
||||
cancellable = g_cancellable_new ();
|
||||
g_object_set_data_full (G_OBJECT (window), "cancellable",
|
||||
cancellable, free_cancellable);
|
||||
|
||||
controller = gtk_shortcut_controller_new ();
|
||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
||||
gtk_shortcut_new (
|
||||
gtk_keyval_trigger_new (GDK_KEY_Escape, 0),
|
||||
gtk_callback_action_new (cancel_load, cancellable, NULL)
|
||||
));
|
||||
gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (controller),
|
||||
GTK_SHORTCUT_SCOPE_GLOBAL);
|
||||
gtk_widget_add_controller (window, controller);
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_window_set_child (GTK_WINDOW (window), box);
|
||||
|
||||
@@ -156,6 +274,22 @@ do_image_scaling (GtkWidget *do_widget)
|
||||
g_signal_connect (button, "clicked", G_CALLBACK (open_file), widget);
|
||||
gtk_box_append (GTK_BOX (box2), button);
|
||||
|
||||
button = gtk_button_new ();
|
||||
gtk_button_set_child (GTK_BUTTON (button),
|
||||
gtk_image_new_from_resource ("/org/gtk/Demo4/portland-rose-thumbnail.png"));
|
||||
gtk_widget_add_css_class (button, "image-button");
|
||||
gtk_widget_set_tooltip_text (button, "Portland Rose");
|
||||
g_signal_connect (button, "clicked", G_CALLBACK (open_portland_rose), widget);
|
||||
gtk_box_append (GTK_BOX (box2), button);
|
||||
|
||||
button = gtk_button_new ();
|
||||
gtk_button_set_child (GTK_BUTTON (button),
|
||||
gtk_image_new_from_resource ("/org/gtk/Demo4/large-image-thumbnail.png"));
|
||||
gtk_widget_add_css_class (button, "image-button");
|
||||
gtk_widget_set_tooltip_text (button, "Large image");
|
||||
g_signal_connect (button, "clicked", G_CALLBACK (open_large_image), widget);
|
||||
gtk_box_append (GTK_BOX (box2), button);
|
||||
|
||||
button = gtk_button_new_from_icon_name ("object-rotate-right-symbolic");
|
||||
gtk_widget_set_tooltip_text (button, "Rotate");
|
||||
g_signal_connect (button, "clicked", G_CALLBACK (rotate), widget);
|
||||
@@ -191,7 +325,9 @@ do_image_scaling (GtkWidget *do_widget)
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_set_visible (window, TRUE);
|
||||
else
|
||||
gtk_window_destroy (GTK_WINDOW (window));
|
||||
{
|
||||
gtk_window_destroy (GTK_WINDOW (window));
|
||||
}
|
||||
|
||||
return window;
|
||||
}
|
||||
|
BIN
demos/gtk-demo/large-image-thumbnail.png
Normal file
BIN
demos/gtk-demo/large-image-thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
BIN
demos/gtk-demo/large-image.png
Normal file
BIN
demos/gtk-demo/large-image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 622 KiB |
@@ -1068,6 +1068,8 @@ command_line (GApplication *app,
|
||||
|
||||
window = gtk_application_get_windows (GTK_APPLICATION (app))->data;
|
||||
|
||||
gtk_window_set_icon_name (GTK_WINDOW (window), "org.gtk.Demo4");
|
||||
|
||||
if (name == NULL)
|
||||
goto out;
|
||||
|
||||
|
@@ -225,7 +225,8 @@ print_ready (GObject *source,
|
||||
|
||||
if (!g_output_stream_close (stream, NULL, &error))
|
||||
{
|
||||
g_print ("Error from close: %s\n", error->message);
|
||||
if (!g_error_matches (error, GTK_DIALOG_ERROR, GTK_DIALOG_ERROR_DISMISSED))
|
||||
g_print ("Error from close: %s\n", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
|
BIN
demos/gtk-demo/portland-rose-thumbnail.png
Normal file
BIN
demos/gtk-demo/portland-rose-thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
@@ -139,6 +139,8 @@ icon_browser_app_activate (GApplication *app)
|
||||
if (g_strcmp0 (PROFILE, "devel") == 0)
|
||||
gtk_widget_add_css_class (GTK_WIDGET (win), "devel");
|
||||
|
||||
gtk_window_set_icon_name (GTK_WINDOW (win), "org.gtk.IconBrowser4");
|
||||
|
||||
gtk_window_present (GTK_WINDOW (win));
|
||||
}
|
||||
|
||||
|
@@ -219,6 +219,8 @@ node_editor_application_activate (GApplication *app)
|
||||
if (g_strcmp0 (PROFILE, "devel") == 0)
|
||||
gtk_widget_add_css_class (GTK_WIDGET (win), "devel");
|
||||
|
||||
gtk_window_set_icon_name (GTK_WINDOW (win), "org.gtk.gtk4.NodeEditor");
|
||||
|
||||
gtk_window_present (GTK_WINDOW (win));
|
||||
}
|
||||
|
||||
|
@@ -1205,6 +1205,19 @@ node_editor_window_add_renderer (NodeEditorWindow *self,
|
||||
g_object_unref (paintable);
|
||||
}
|
||||
|
||||
static void
|
||||
update_paste_action (GdkClipboard *clipboard,
|
||||
GParamSpec *pspec,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (data);
|
||||
gboolean has_node;
|
||||
|
||||
has_node = gdk_content_formats_contain_mime_type (gdk_clipboard_get_formats (clipboard), "application/x-gtk-render-node");
|
||||
|
||||
gtk_widget_action_set_enabled (widget, "paste-node", has_node);
|
||||
}
|
||||
|
||||
static void
|
||||
node_editor_window_realize (GtkWidget *widget)
|
||||
{
|
||||
@@ -1242,6 +1255,7 @@ node_editor_window_realize (GtkWidget *widget)
|
||||
self->after_paint_handler = g_signal_connect (frameclock, "after-paint",
|
||||
G_CALLBACK (after_paint), self);
|
||||
|
||||
g_signal_connect (gtk_widget_get_clipboard (widget), "notify::formats", G_CALLBACK (update_paste_action), widget);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1251,6 +1265,8 @@ node_editor_window_unrealize (GtkWidget *widget)
|
||||
GdkFrameClock *frameclock;
|
||||
guint i;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (gtk_widget_get_clipboard (widget), update_paste_action, widget);
|
||||
|
||||
frameclock = gtk_widget_get_frame_clock (widget);
|
||||
g_signal_handler_disconnect (frameclock, self->after_paint_handler);
|
||||
self->after_paint_handler = 0;
|
||||
@@ -1615,6 +1631,41 @@ edit_action_cb (GtkWidget *widget,
|
||||
node_editor_window_edit (self, &start);
|
||||
}
|
||||
|
||||
static void
|
||||
text_received (GObject *source,
|
||||
GAsyncResult *result,
|
||||
gpointer data)
|
||||
{
|
||||
GdkClipboard *clipboard = GDK_CLIPBOARD (source);
|
||||
NodeEditorWindow *self = NODE_EDITOR_WINDOW (data);
|
||||
char *text;
|
||||
|
||||
text = gdk_clipboard_read_text_finish (clipboard, result, NULL);
|
||||
if (text)
|
||||
{
|
||||
GtkTextBuffer *buffer;
|
||||
GtkTextIter start, end;
|
||||
|
||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||
gtk_text_buffer_begin_user_action (buffer);
|
||||
gtk_text_buffer_get_bounds (buffer, &start, &end);
|
||||
gtk_text_buffer_delete (buffer, &start, &end);
|
||||
gtk_text_buffer_insert (buffer, &start, text, -1);
|
||||
gtk_text_buffer_end_user_action (buffer);
|
||||
g_free (text);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
paste_node_cb (GtkWidget *widget,
|
||||
const char *action_name,
|
||||
GVariant *parameter)
|
||||
{
|
||||
GdkClipboard *clipboard = gtk_widget_get_clipboard (widget);
|
||||
|
||||
gdk_clipboard_read_text_async (clipboard, NULL, text_received, widget);
|
||||
}
|
||||
|
||||
static void
|
||||
node_editor_window_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
@@ -1727,6 +1778,13 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
||||
action = gtk_named_action_new ("smart-edit");
|
||||
shortcut = gtk_shortcut_new (trigger, action);
|
||||
gtk_widget_class_add_shortcut (widget_class, shortcut);
|
||||
|
||||
gtk_widget_class_install_action (widget_class, "paste-node", NULL, paste_node_cb);
|
||||
|
||||
trigger = gtk_keyval_trigger_new (GDK_KEY_v, GDK_CONTROL_MASK | GDK_SHIFT_MASK);
|
||||
action = gtk_named_action_new ("paste-node");
|
||||
shortcut = gtk_shortcut_new (trigger, action);
|
||||
gtk_widget_class_add_shortcut (widget_class, shortcut);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
|
@@ -22,6 +22,10 @@
|
||||
</menu>
|
||||
<menu id="extra_menu">
|
||||
<section>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Paste _Node</attribute>
|
||||
<attribute name="action">paste-node</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Assisted _Edit</attribute>
|
||||
<attribute name="action">smart-edit</attribute>
|
||||
|
@@ -798,7 +798,7 @@ activate (GApplication *app)
|
||||
if (g_strcmp0 (PROFILE, "devel") == 0)
|
||||
gtk_widget_add_css_class (GTK_WIDGET (main_window), "devel");
|
||||
|
||||
gtk_window_set_icon_name (GTK_WINDOW (main_window), "text-editor");
|
||||
gtk_window_set_icon_name (GTK_WINDOW (main_window), "org.gtk.PrintEditor4");
|
||||
gtk_window_set_default_size (GTK_WINDOW (main_window), 400, 600);
|
||||
gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW (main_window), TRUE);
|
||||
update_title (GTK_WINDOW (main_window));
|
||||
|
@@ -2241,6 +2241,7 @@ activate (GApplication *app)
|
||||
if (g_strcmp0 (PROFILE, "devel") == 0)
|
||||
gtk_widget_add_css_class (GTK_WIDGET (window), "devel");
|
||||
|
||||
gtk_window_set_icon_name (window, "org.gtk.WidgetFactory4");
|
||||
gtk_application_add_window (GTK_APPLICATION (app), window);
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (window),
|
||||
win_entries, G_N_ELEMENTS (win_entries),
|
||||
|
@@ -151,10 +151,11 @@ Checks whether the widget is set to be visible or not.
|
||||
- Methods are special functions whose first argument is always the instance
|
||||
of a certain class. The instance argument for newly written code should be
|
||||
called `self`.
|
||||
- If a method is a setter or a getter for an object property, you should
|
||||
add an `(attributes org.gtk.Method.set_property=property-name)` or a
|
||||
an `(attributes org.gtk.Method.get_property=property-name)` annotation
|
||||
to the method's identifier
|
||||
- If a method is a setter or a getter for an object property
|
||||
`GtkClassName:prop-name`, and if its name does not match the naming scheme
|
||||
`gtk_class_name_{g,s}et_prop_name`, you should add a `(set-property
|
||||
prop-name)` or a `(get-property prop-name)` annotation to the method's
|
||||
identifier
|
||||
- If a method changes one or more properties as side effect, link those
|
||||
properties in the method's description
|
||||
- If a method is a signal emitter, you should use the
|
||||
@@ -192,9 +193,10 @@ Checks whether the widget is set to be visible or not.
|
||||
purposes.
|
||||
- Always note if setting a property has side effects, like causing another
|
||||
property to change state.
|
||||
- If the property has public accessors you should annotate it with
|
||||
the `(attributes org.gtk.Property.set=setter_function)` and
|
||||
`(attributes org.gtk.Property.get=getter_function)` attributes
|
||||
- If a property `GtkClassName:prop-name` has a public getter or setter, and
|
||||
they do not match the naming scheme `gtk_class_name_{g,s}et_prop_name` you
|
||||
should annotate it with the `(setter setter_function)` and `(getter
|
||||
getter_function)`.
|
||||
- The syntax for property documentation is:
|
||||
|
||||
```c
|
||||
|
@@ -38,7 +38,7 @@ if get_option('documentation')
|
||||
gdk_gir[0],
|
||||
],
|
||||
depends: gdk_gir[0],
|
||||
suite: ['docs'],
|
||||
suite: ['docs', 'failing'],
|
||||
)
|
||||
|
||||
if x11_enabled
|
||||
|
@@ -1,12 +1,16 @@
|
||||
Title: The Broadway windowing system
|
||||
Slug: broadway
|
||||
|
||||
## Using GTK with Broadway
|
||||
|
||||
The GDK Broadway backend provides support for displaying GTK applications in
|
||||
a web browser, using HTML5 and web sockets.
|
||||
|
||||
To run your application in this way, first run the broadway server,
|
||||
Broadway was written as an experiment and is not the most actively developed
|
||||
backend. It supports the features that were required of GDK backends in GTK 4.0,
|
||||
but may not be up-to-date with the latest developments.
|
||||
|
||||
## Using GTK with Broadway
|
||||
|
||||
To run your application under Broadway, first run the broadway server,
|
||||
`gtk-broadwayd`, that ships with GTK:
|
||||
|
||||
```
|
||||
|
@@ -66,8 +66,8 @@ The clock has several phases:
|
||||
- Layout
|
||||
- Paint
|
||||
|
||||
The phases happens in this order and we will always run each
|
||||
phase through before going back to the start.
|
||||
The phases happen in this order and all phases will always run
|
||||
through before going back to the start.
|
||||
|
||||
The Events phase is a stretch of time between each redraw where
|
||||
GTK processes input events from the user and other events
|
||||
|
@@ -260,4 +260,4 @@ name = "StyleProvider"
|
||||
hidden = true
|
||||
|
||||
[check]
|
||||
skip_deprecated = true
|
||||
ignore_deprecated = true
|
||||
|
@@ -74,7 +74,7 @@ if get_option('documentation')
|
||||
gtk_gir[0],
|
||||
],
|
||||
depends: gtk_gir[0],
|
||||
suite: ['docs'],
|
||||
suite: ['docs', 'failing'],
|
||||
)
|
||||
endif
|
||||
|
||||
|
@@ -24,36 +24,36 @@ the motivation and goals of larger API changes.
|
||||
## Cell renderers are going away
|
||||
|
||||
Cell renderers were introduced in GTK 2 to support rendering of
|
||||
"big data" UIs, in particular treeviews. Over the years, more
|
||||
"data-like" widgets have started to use them, and cell renderers
|
||||
“big data” UIs, in particular treeviews. Over the years, more
|
||||
“data-like” widgets have started to use them, and cell renderers
|
||||
have grown into a shadowy, alternative rendering infrastructure
|
||||
that duplicates much of what widgets do, while duplicating the
|
||||
code and adding their own dose of bugs.
|
||||
|
||||
In GTK 4, replacement widgets for GtkTreeView, GtkIconView and
|
||||
GtkComboBox have appeared: GtkListView, GtkColumnView, GtkGridView
|
||||
and GtkDropDown. For GTK 5, we will take the next step and remove
|
||||
In GTK 4, replacement widgets for `GtkTreeView`, `GtkIconView` and
|
||||
`GtkComboBox` have appeared: [class@Gtk.ListView], [class@Gtk.ColumnView], [class@Gtk.GridView]
|
||||
and [class@Gtk.DropDown]. For GTK 5, we will take the next step and remove
|
||||
all cell renderer-based widgets.
|
||||
|
||||
## Themed rendering APIs are going away
|
||||
|
||||
The old GTK 2 era rendering APIs for theme components like
|
||||
gtk_render_frame() or gtk_render_check() have not been used by
|
||||
`gtk_render_frame()` or `gtk_render_check()` have not been used by
|
||||
GTK itself even in later GTK 3, but they have been kept around
|
||||
for the benefit of "external drawing" users - applications that
|
||||
for the benefit of “external drawing” users — applications that
|
||||
want their controls to look like GTK without using widgets.
|
||||
|
||||
Supporting this is increasingly getting in the way of making
|
||||
the GTK CSS machinery fast and correct. One notable problem is
|
||||
that temporary style changes (using gtk_style_context_save())
|
||||
that temporary style changes (using `gtk_style_context_save()`)
|
||||
is breaking animations. Therefore, these APIs will be going away
|
||||
in GTK 5, together with their more modern GtkSnapshot variants
|
||||
like gtk_snapshot_render_background() or gtk_snapshot_render_focus().
|
||||
in GTK 5, together with their more modern [class@Gtk.Snapshot] variants
|
||||
like `gtk_snapshot_render_background()` or `gtk_snapshot_render_focus()`.
|
||||
|
||||
The best way to render parts of your widget using CSS styling
|
||||
is to use subwidgets. For example, to show a piece of text with
|
||||
fonts, effects and shadows according to the current CSS style,
|
||||
use a GtkLabel.
|
||||
use a [class@Gtk.Label].
|
||||
|
||||
If you have a need for custom drawing that fits into the current
|
||||
(dark or light) theme, e.g. for rendering a graph, you can still
|
||||
@@ -62,28 +62,28 @@ get the current style foreground color, using
|
||||
|
||||
## Local stylesheets are going away
|
||||
|
||||
The cascading part of GTK's CSS implementation is complicated by
|
||||
The cascading part of GTK’s CSS implementation is complicated by
|
||||
the existence of local stylesheets (i.e. those added with
|
||||
gtk_style_context_add_provider()). And local stylesheets are
|
||||
`gtk_style_context_add_provider()`). And local stylesheets are
|
||||
unintuitive in that they do not apply to the whole subtree of
|
||||
widgets, but just to the one widget where the stylesheet was
|
||||
added.
|
||||
|
||||
GTK 5 will no longer provide this functionality. The recommendations
|
||||
is to use a global stylesheet (i.e. gtk_style_context_add_provider_for_display())
|
||||
GTK 5 will no longer provide this functionality. The recommendation
|
||||
is to use a global stylesheet (i.e. [func@Gtk.StyleContext.add_provider_for_display])
|
||||
and rely on style classes to make your CSS apply only where desired.
|
||||
|
||||
## Non-standard CSS extensions are going away
|
||||
|
||||
GTK's CSS machinery has a some non-standard extensions around colors:
|
||||
named colors with \@define-color and color functions: lighter(), darker(),
|
||||
shade(), alpha(), mix().
|
||||
GTK’s CSS machinery has a some non-standard extensions around colors:
|
||||
named colors with `@define-color` and color functions: `lighter()`, `darker()`,
|
||||
`shade()`, `alpha()`, `mix()`.
|
||||
|
||||
GTK now implements equivalent functionality from the CSS specs.
|
||||
|
||||
### \@define-color is going away
|
||||
### `@define-color` is going away
|
||||
|
||||
\@define-color should be replaced by custom properties in the :root scope.
|
||||
`@define-color` should be replaced by custom properties in the `:root` scope.
|
||||
|
||||
Instead of
|
||||
|
||||
@@ -117,9 +117,9 @@ spec.
|
||||
|
||||
### Color expressions are going away
|
||||
|
||||
The color functions can all be replaced by combinations of calc() and color-mix().
|
||||
The color functions can all be replaced by combinations of `calc()` and `color-mix()`.
|
||||
|
||||
ligher(c) and darker(c) are just shade(c, 1.3) or shade(c, 0.7), respectively, and
|
||||
`lighter(c)` and `darker(c)` are just `shade(c, 1.3)` or `shade(c, 0.7)`, respectively, and
|
||||
thus can be handled the same way as shade in the examples below.
|
||||
|
||||
Replace
|
||||
@@ -164,7 +164,7 @@ d {
|
||||
|
||||
Variations of these replacements are possible.
|
||||
|
||||
Note that GTK has historically computed mix() and shade() values in the SRGB and HSL
|
||||
Note that GTK has historically computed `mix()` and `shade()` values in the SRGB and HSL
|
||||
colorspaces, but using OKLAB instead might yield slightly better results.
|
||||
|
||||
For more information about color-mix(), see the
|
||||
@@ -172,32 +172,32 @@ For more information about color-mix(), see the
|
||||
|
||||
## Chooser interfaces are going away
|
||||
|
||||
The GtkColorChooser, GtkFontChooser, GtkFileChooser and GtkAppChooser
|
||||
The `GtkColorChooser`, `GtkFontChooser`, `GtkFileChooser` and `GtkAppChooser`
|
||||
interfaces and their implementations as dialogs, buttons and widgets
|
||||
are phased out. The are being replaced by a new family of async APIs
|
||||
that will be more convenient to use from language bindings, in particular
|
||||
for languages that have concepts like promises. The new APIs are
|
||||
[class@Gtk.ColorDialog], [class@Gtk.FontDialog] and [class@Gtk.FileDialog],
|
||||
There are also equivalents for some of the 'button' widgets:
|
||||
There are also equivalents for some of the “button” widgets:
|
||||
[class@Gtk.ColorDialogButton], [class@Gtk.FontDialogButton].
|
||||
|
||||
## GtkMessageDialog is going away
|
||||
|
||||
Like the Chooser interfaces, GtkMessageDialog has been replaced by
|
||||
Like the Chooser interfaces, `GtkMessageDialog` has been replaced by
|
||||
a new async API that will be more convenient, in particular for
|
||||
language binding. The new API is [class@Gtk.AlertDialog].
|
||||
|
||||
## GtkDialog is going away
|
||||
|
||||
After gtk_dialog_run() was removed, the usefulness of GtkDialog
|
||||
is much reduced, and it has awkward, archaice APIs. Therefore,
|
||||
After `gtk_dialog_run()` was removed, the usefulness of `GtkDialog`
|
||||
is much reduced, and it has awkward, archaic APIs. Therefore,
|
||||
it is dropped. The recommended replacement is to just create
|
||||
your own window and add buttons as required, either in the header
|
||||
or elsewhere.
|
||||
|
||||
## GtkInfoBar is going away
|
||||
|
||||
GtkInfoBar had a dialog API, and with dialogs going away, it was time to
|
||||
`GtkInfoBar` had a dialog API, and with dialogs going away, it was time to
|
||||
retire it. If you need such a widget, it is relatively trivial to create one
|
||||
using a [class@Gtk.Revealer] with labels and buttons.
|
||||
|
||||
@@ -205,11 +205,11 @@ Other libraries, such as libadwaita, may provide replacements as well.
|
||||
|
||||
## gtk_show_uri is being replaced
|
||||
|
||||
Instead of gtk_show_uri(), you should use GtkUriLauncher or GtkFileLauncher.
|
||||
Instead of `gtk_show_uri()`, you should use [class@Gtk.UriLauncher]or [class@Gtk.FileLauncher].
|
||||
|
||||
## GtkStatusbar is going away
|
||||
|
||||
This is an oldfashioned widget that does not do all that much anymore, since
|
||||
This is an old fashioned widget that does not do all that much any more, since
|
||||
it no longer has a resize handle for the window.
|
||||
|
||||
## GtkLockButton and GtkVolumeButton are going away
|
||||
@@ -217,22 +217,22 @@ it no longer has a resize handle for the window.
|
||||
These are very specialized widgets that should better live with the application
|
||||
where they are used.
|
||||
|
||||
## Widget size api changes
|
||||
## Widget size API changes
|
||||
|
||||
The functions gtk_widget_get_allocated_width() and gtk_widget_get_allocated_height()
|
||||
The functions `gtk_widget_get_allocated_width()` and `gtk_widget_get_allocated_height()`
|
||||
are going away. In most cases, [method@Gtk.Widget.get_width] and [method@Gtk.Widget.get_height]
|
||||
are suitable replacements. Note that the semantics are slightly different though:
|
||||
the old functions return the size of the CSS border area, while the new functions return
|
||||
the size of the widgets content area. In places where this difference matters, you can
|
||||
use `gtk_widget_compute_bounds (widget, widget, &bounds)` instead.
|
||||
|
||||
The function gtk_widget_get_allocation() is also going away. It does not have a direct
|
||||
The function `gtk_widget_get_allocation()` is also going away. It does not have a direct
|
||||
replacement, but the previously mentioned alternatives can be used for it too.
|
||||
|
||||
The function gtk_widget_get_allocated_baseline() has been renamed to [method@Gtk.Widget.get_baseline].
|
||||
The function `gtk_widget_get_allocated_baseline()` has been renamed to [method@Gtk.Widget.get_baseline].
|
||||
|
||||
## Stop using GdkPixbuf
|
||||
|
||||
GTK is moving away from GdkPixbuf as the primary API for transporting image data, in favor
|
||||
of GdkTexture. APIs that are accepting or returning GdkPixbufs are being replaced by equivalent
|
||||
APIs using GdkTexture or GdkPaintable objects.
|
||||
GTK is moving away from `GdkPixbuf` as the primary API for transporting image data, in favor
|
||||
of [class@Gdk.Texture]. APIs that are accepting or returning `GdkPixbuf`s are being replaced by equivalent
|
||||
APIs using `GdkTexture` or [iface@Gdk.Paintable] objects.
|
||||
|
@@ -6,7 +6,7 @@ The format is a text format that follows the [CSS syntax rules](https://drafts.c
|
||||
|
||||
The grammar of a node text representation using [the CSS value definition syntax](https://drafts.csswg.org/css-values-3/#value-defs) looks like this:
|
||||
|
||||
document: <@-rule>*<node>*
|
||||
document: <@-rule>*<node>
|
||||
@-rule: @cicp "name" { <property>* }
|
||||
node: container [ "name" ] { <document> } | <node-type> [ "name" ] { <property>* } | "name"
|
||||
property: <property-name>: <node> | <value> ;
|
||||
@@ -49,12 +49,16 @@ The following properties can be set for custom color states:
|
||||
| primaries | `<integer>` | 2 | always |
|
||||
| transfer | `<integer>` | 2 | always |
|
||||
| matrix | `<integer>` | 2 | always |
|
||||
| range | `narrow | full` | full | non-default |
|
||||
| range | `<range>` | full | non-default |
|
||||
|
||||
Note that the primaries, transfer and matrix properties always need
|
||||
to be specified, since GTK does not allow creating color state objects
|
||||
with these being set to 2 (== unspecified).
|
||||
|
||||
Range can have the following values:
|
||||
|
||||
range: narrow | full
|
||||
|
||||
# Colors
|
||||
|
||||
Colors can be specified with a variation of the modern CSS color syntax:
|
||||
@@ -66,6 +70,16 @@ The traditional syntax for sRGB colors still works as well:
|
||||
rgba(<number>, <number>, <number>, <number)
|
||||
rgb(<number, <number>, <number>)
|
||||
|
||||
# Rectangles
|
||||
|
||||
Rectangles can be specified just as four integers for x, y, width and height:
|
||||
|
||||
rect: <number> <number> <number> <number>
|
||||
|
||||
Rounded rectangles use a CSS-like syntax:
|
||||
|
||||
rounded-rect: <rect> [ "/" <number>{1,4} [ "/" <number>{1,4} ] ]
|
||||
|
||||
# Nodes
|
||||
|
||||
### container
|
||||
@@ -82,6 +96,13 @@ The **container** node is a special node that allows specifying a list of child
|
||||
|
||||
Creates a node like `gsk_blend_node_new()` with the given properties.
|
||||
|
||||
Possible values for the mode property are:
|
||||
|
||||
blend-mode: normal | multiply | screen | overlay | darken |
|
||||
lighten | color-dodge | color-burn | hard-light |
|
||||
soft-light | difference | exclusion | color |
|
||||
hue | saturation | luminosity
|
||||
|
||||
### blur
|
||||
|
||||
| property | syntax | default | printed |
|
||||
@@ -201,6 +222,10 @@ Creates a node like `gsk_fill_node_new()` with the given properties.
|
||||
The default child node is the default color node, but created with the
|
||||
bounds of the path.
|
||||
|
||||
Possible values for the fill-rule property are:
|
||||
|
||||
fill-rule: winding | even-odd
|
||||
|
||||
### glshader
|
||||
|
||||
| property | syntax | default | printed |
|
||||
@@ -252,6 +277,10 @@ Creates a node like `gsk_linear_gradient_node_new()` with the given properties.
|
||||
|
||||
Creates a node like `gsk_mask_node_new()` with the given properties.
|
||||
|
||||
Possible values for the mode property are:
|
||||
|
||||
mask-mode: alpha | inverted-alpha | luminance | inverted-luminance
|
||||
|
||||
### opacity
|
||||
|
||||
| property | syntax | default | printed |
|
||||
@@ -290,11 +319,11 @@ Creates a node like `gsk_radial_gradient_node_new()` with the given properties.
|
||||
|
||||
### repeat
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| ----------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | *bounds of child node* | non-default |
|
||||
| child | `<node>` | color { } | always |
|
||||
| child-bounds| `<rect>` | *bounds of child node* | non-default |
|
||||
| property | syntax | default | printed |
|
||||
| ------------ | ---------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | *bounds of child node* | non-default |
|
||||
| child | `<node>` | color { } | always |
|
||||
| child-bounds | `<rect>` | *bounds of child node* | non-default |
|
||||
|
||||
Creates a node like `gsk_repeat_node_new()` with the given properties.
|
||||
|
||||
@@ -361,6 +390,14 @@ Creates a node like `gsk_stroke_node_new()` with the given properties.
|
||||
The default child node is the default color node, but created with the
|
||||
stroke bounds of the path.
|
||||
|
||||
Possible values for the line-cap property are:
|
||||
|
||||
line-cap: butt | round | square
|
||||
|
||||
Possible values for the line-join property are:
|
||||
|
||||
line-join: miter | round | bevel
|
||||
|
||||
### text
|
||||
|
||||
| property | syntax | default | printed |
|
||||
@@ -369,9 +406,9 @@ stroke bounds of the path.
|
||||
| font | `<string>` `<url>`? | "Cantarell 15px" | always |
|
||||
| glyphs | `<glyphs>` | "Hello" | always |
|
||||
| offset | `<point>` | 0 0 | non-default |
|
||||
| hint-style | `<hint style>` | slight | non-default |
|
||||
| hint-style | `<hint-style>` | slight | non-default |
|
||||
| antialias | `<antialias>` | gray | non-default |
|
||||
| hint-metrics | `<hint metrics>` | off | non-default |
|
||||
| hint-metrics | `<hint-metrics>` | off | non-default |
|
||||
|
||||
Creates a node like `gsk_text_node_new()` with the given properties.
|
||||
|
||||
@@ -386,9 +423,17 @@ be specified as well, like this: 40 10 0 0 color.
|
||||
If the given font does not exist or the given glyphs are invalid for the given
|
||||
font, an error node will be returned.
|
||||
|
||||
Possible values for hint-style are none, slight or full.
|
||||
Possible value for antialias are none or gray.
|
||||
Possible value for hint-metrics are on or off.
|
||||
Possible values for the hint-style property are:
|
||||
|
||||
hint-style: none | slight | full
|
||||
|
||||
Possible value for the antialias property are:
|
||||
|
||||
antialias: none | gray
|
||||
|
||||
Possible value for hint-metrics are:
|
||||
|
||||
hint-metrics: on | off
|
||||
|
||||
### texture
|
||||
|
||||
@@ -414,14 +459,15 @@ representation for this texture is `url("data:image/png;base64,iVBORw0KGgoAAAANS
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| texture | `<url>` | *see below* | always |
|
||||
| filter | `filter` | *see below* | non-default |
|
||||
| filter | `filter` | linear | non-default |
|
||||
|
||||
Creates a node like `gsk_texture_scale_node_new()` with the given properties.
|
||||
|
||||
The default texture is a 10x10 checkerboard, just like for texture.
|
||||
|
||||
The possible filter values are `linear`, `nearest` and `trilinear`, with
|
||||
`linear` being the default.
|
||||
Possible values for the filter property are:
|
||||
|
||||
filter: linear | nearest | trilinear
|
||||
|
||||
### transform
|
||||
|
||||
|
@@ -19,8 +19,7 @@ be used for end-user configuration and customization.
|
||||
### `GTK_DEBUG`
|
||||
|
||||
This variable can be set to a list of debug options, which cause GTK to
|
||||
print out different types of debugging information. Some of these options
|
||||
are only available when GTK has been configured with `-Ddebug=true`.
|
||||
print out different types of debugging information.
|
||||
|
||||
`actions`
|
||||
: Actions and menu models
|
||||
@@ -65,7 +64,7 @@ are only available when GTK has been configured with `-Ddebug=true`.
|
||||
: Layout managers
|
||||
|
||||
`accessibility`
|
||||
: Accessibility state changs
|
||||
: Accessibility state changes
|
||||
|
||||
A number of keys are influencing behavior instead of just logging:
|
||||
|
||||
@@ -169,8 +168,7 @@ The `loaders.cache` file is generated by the
|
||||
### `GDK_DEBUG`
|
||||
|
||||
This variable can be set to a list of debug options, which cause GDK to
|
||||
print out different types of debugging information. Some of these options
|
||||
are only available when GTK has been configured with `-Ddebug=true`.
|
||||
print out different types of debugging information.
|
||||
|
||||
`misc`
|
||||
: Miscellaneous information
|
||||
@@ -223,36 +221,15 @@ A number of options affect behavior instead of logging:
|
||||
: Force graphics offload for all textures, even when slower. This allows
|
||||
to debug offloading in the absence of dmabufs.
|
||||
|
||||
`gl-disable`
|
||||
: Disable OpenGL support
|
||||
|
||||
`gl-no-fractional`
|
||||
: Disable fractional scaling for OpenGL.
|
||||
|
||||
`gl-debug`
|
||||
: Insert debugging information in OpenGL
|
||||
|
||||
`gl-disable-gl`
|
||||
: Don't allow the use of OpenGL GL API. This forces GLES to be used
|
||||
|
||||
`gl-disable-gles`
|
||||
: Don't allow the use of OpenGL GLES API. This forces GL to be used
|
||||
|
||||
`gl-prefer-gl`
|
||||
: Prefer OpenGL over OpenGL ES. This was the default behavior before GTK 4.14.
|
||||
|
||||
`gl-egl`
|
||||
: Use an EGL context on X11 or Windows
|
||||
|
||||
`gl-glx`
|
||||
: Use GLX on X11
|
||||
|
||||
`gl-wgl`
|
||||
: Use WGL on Windows
|
||||
|
||||
`vulkan-disable`
|
||||
: Disable Vulkan support
|
||||
|
||||
`vulkan-validate`
|
||||
: Load the Vulkan validation layer, if available
|
||||
|
||||
@@ -262,27 +239,26 @@ A number of options affect behavior instead of logging:
|
||||
`high-depth`
|
||||
: Use high bit depth rendering if possible
|
||||
|
||||
`linear`
|
||||
: Enable linear rendering
|
||||
|
||||
`hdr`
|
||||
: Force HDR rendering
|
||||
|
||||
`no-vsync`
|
||||
: Repaint instantly (uses 100% CPU with animations)
|
||||
|
||||
`dmabuf-disable`
|
||||
: Disable dmabuf support
|
||||
|
||||
The special value `all` can be used to turn on all debug options. The special
|
||||
value `help` can be used to obtain a list of all supported debug options.
|
||||
|
||||
### `GSK_DEBUG`
|
||||
|
||||
This variable can be set to a list of debug options, which cause GSK to
|
||||
print out different types of debugging information. Some of these options
|
||||
are only available when GTK has been configured with `-Ddebug=true`.
|
||||
print out different types of debugging information.
|
||||
|
||||
`renderer`
|
||||
: General renderer information
|
||||
|
||||
`opengl`
|
||||
: OpenGL renderer information
|
||||
|
||||
`vulkan`
|
||||
: Check Vulkan errors
|
||||
|
||||
@@ -309,12 +285,12 @@ A number of options affect behavior instead of logging:
|
||||
`staging`
|
||||
: Use a staging image for texture upload (Vulkan only)
|
||||
|
||||
`offload-disable`
|
||||
: Disable graphics offload to subsurfaces
|
||||
|
||||
`cairo`
|
||||
: Overlay error pattern over cairo drawing (finds fallbacks)
|
||||
|
||||
`occlusion`
|
||||
: Overlay highlight over areas optimized via occlusion culling
|
||||
|
||||
The special value `all` can be used to turn on all debug options. The special
|
||||
value `help` can be used to obtain a list of all supported debug options.
|
||||
|
||||
@@ -347,6 +323,41 @@ a `*`, which means: try all remaining backends. The special value
|
||||
backends. For more information about selecting backends,
|
||||
see the [func@Gdk.DisplayManager.get] function.
|
||||
|
||||
### `GDK_DISABLE`
|
||||
|
||||
This variable can be set to a list of values, which cause GDK to
|
||||
disable certain features.
|
||||
|
||||
`gl`
|
||||
: Disable OpenGL support
|
||||
|
||||
`gl-api`
|
||||
: Don't allow the use of OpenGL GL API. This forces GLES to be used
|
||||
|
||||
`gles-api`
|
||||
: Don't allow the use of OpenGL GLES API. This forces GL to be used
|
||||
|
||||
`egl`
|
||||
: Don't allow the use of an EGL context
|
||||
|
||||
`glx`
|
||||
: Don't allow the use of GLX
|
||||
|
||||
`wgl`
|
||||
: Don't allow the use of WGL
|
||||
|
||||
`vulkan`
|
||||
: Disable Vulkan support
|
||||
|
||||
`dmabuf`
|
||||
: Disable dmabuf support
|
||||
|
||||
`offload`
|
||||
: Disable graphics offload to subsurfaces
|
||||
|
||||
`color-mgmt`
|
||||
: Disable color management
|
||||
|
||||
### `GDK_GL_DISABLE`
|
||||
|
||||
This variable can be set to a list of values, which cause GDK to
|
||||
@@ -389,15 +400,6 @@ does not support them.
|
||||
`ycbr`
|
||||
: Do not support Ycbcr textures
|
||||
|
||||
`descriptor-indexing`
|
||||
: Force slow descriptor set layout codepath
|
||||
|
||||
`dynamic-indexing`
|
||||
: Hardcode small number of buffer and texture arrays
|
||||
|
||||
`nonuniform-indexing`
|
||||
: Split draw calls to ensure uniform texture accesses
|
||||
|
||||
`semaphore-export`
|
||||
: Disable sync of exported dmabufs
|
||||
|
||||
@@ -407,6 +409,9 @@ does not support them.
|
||||
`incremental-present`
|
||||
: Do not send damage regions
|
||||
|
||||
`swapchain-maintenance`
|
||||
: Do not use advanced swapchain features
|
||||
|
||||
The special value `all` can be used to turn on all values. The special
|
||||
value `help` can be used to obtain a list of all supported values.
|
||||
|
||||
@@ -461,12 +466,12 @@ using and the GDK backend supports them:
|
||||
This variable can be set to a list of values, which cause GSK to
|
||||
disable certain optimizations of the "ngl" and "vulkan" renderer.
|
||||
|
||||
`uber`
|
||||
: Don't use the uber shader
|
||||
|
||||
`clear`
|
||||
: Use shaders instead of vkCmdClearAttachment()/glClear()
|
||||
|
||||
`merge`
|
||||
: USe one vkCmdDraw()/glDrawArrays() per operation
|
||||
|
||||
`blit`
|
||||
: Use shaders instead of vkCmdBlit()/glBlitFramebuffer()
|
||||
|
||||
@@ -476,6 +481,13 @@ disable certain optimizations of the "ngl" and "vulkan" renderer.
|
||||
`mipmap`
|
||||
: Avoid creating mipmaps
|
||||
|
||||
`to-image`
|
||||
: Don't fast-path creation of images for nodes
|
||||
|
||||
`occlusion`
|
||||
: Disable occlusion culling via opacity tracking
|
||||
|
||||
|
||||
The special value `all` can be used to turn on all values. The special
|
||||
value `help` can be used to obtain a list of all supported values.
|
||||
|
||||
@@ -563,6 +575,12 @@ To enable the GTK inspector, you can use the <kbd>Control</kbd>+<kbd>Shift</kbd>
|
||||
<kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd> keyboard shortcuts, or
|
||||
set the `GTK_DEBUG=interactive` environment variable.
|
||||
|
||||
After opening the inspector, it listens for a few keyboard shortcuts that
|
||||
let you use its frame and event recording functionality without moving the
|
||||
focus away from the application window: <kbd>Super</kbd>+<kbd>R</kbd> turns
|
||||
the recording on and off, and <kbd>Super</kbd>+<kbd>C</kbd> records a single
|
||||
frame.
|
||||
|
||||
There are a few more environment variables that can be set to influence
|
||||
how the inspector renders its UI. `GTK_INSPECTOR_DISPLAY` and
|
||||
`GTK_INSPECTOR_RENDERER` determine the GDK display and the GSK
|
||||
@@ -573,6 +591,7 @@ the GTK inspector. The keyboard shortcuts can be disabled with the
|
||||
`enable-inspector-keybinding` key in the `org.gtk.Settings.Debug`
|
||||
GSettings schema.
|
||||
|
||||
|
||||
## Profiling
|
||||
|
||||
GTK supports profiling with sysprof. It exports timing information
|
||||
|
@@ -171,7 +171,7 @@ Each relation name is part of the `GtkAccessibleRelation` enumeration.
|
||||
| %GTK_ACCESSIBLE_RELATION_CONTROLS | “aria-controls” | a list of `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_DESCRIBED_BY | “aria-describedby” | a list of `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_DETAILS | “aria-details” | a list of `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE | “aria-errormessage” | `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE | “aria-errormessage” | a list of `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_FLOW_TO | “aria-flowto” | a list of `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_LABELLED_BY | “aria-labelledby” | a list of `GtkAccessible` |
|
||||
| %GTK_ACCESSIBLE_RELATION_OWNS | “aria-owns” | a list of `GtkAccessible` |
|
||||
@@ -300,7 +300,7 @@ The attributes can also enhance the UI:
|
||||
|
||||
```c
|
||||
gtk_button_set_label (GTK_BUTTON (button), "Download");
|
||||
gtk_box_append (GTK_BOX (button), button);
|
||||
gtk_box_append (GTK_BOX (box), button);
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (label), "Final report.pdf");
|
||||
gtk_box_append (GTK_BOX (box), label);
|
||||
|
@@ -9,6 +9,7 @@ documentation in the form of man pages.
|
||||
- [gtk4-demo-application](gtk4-demo-application.html)
|
||||
- [gtk4-encode-symbolic-svg](gtk4-encode-symbolic-svg.html)
|
||||
- [gtk4-icon-browser](gtk4-icon-browser.html)
|
||||
- [gtk4-image-tool](gtk4-image-tool.html)
|
||||
- [gtk4-launch](gtk4-launch.html)
|
||||
- [gtk4-node-editor](gtk4-node-editor.html)
|
||||
- [gtk4-path-tool](gtk4-path-tool.html)
|
||||
|
@@ -49,6 +49,135 @@
|
||||
|
||||
G_DEFINE_TYPE (GdkBroadwaySurface, gdk_broadway_surface, GDK_TYPE_SURFACE)
|
||||
|
||||
static void
|
||||
gdk_broadway_surface_toplevel_resize (GdkSurface *surface,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
static void
|
||||
gdk_broadway_surface_set_geometry_hints (GdkSurface *surface,
|
||||
const GdkGeometry *geometry,
|
||||
GdkSurfaceHints geom_mask);
|
||||
|
||||
static void
|
||||
gdk_broadway_surface_move_resize_internal (GdkSurface *surface,
|
||||
gboolean with_move,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
static void
|
||||
compute_toplevel_size (GdkSurface *surface,
|
||||
gboolean resizible,
|
||||
int *width,
|
||||
int *height)
|
||||
{
|
||||
GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
|
||||
GdkDisplay *display = gdk_surface_get_display (surface);
|
||||
GdkMonitor *monitor;
|
||||
GdkToplevelSize size;
|
||||
int bounds_width, bounds_height;
|
||||
GdkGeometry geometry;
|
||||
GdkSurfaceHints mask;
|
||||
|
||||
monitor = gdk_display_get_monitor_at_surface (display, surface);
|
||||
if (monitor)
|
||||
{
|
||||
GdkRectangle monitor_geometry;
|
||||
|
||||
gdk_monitor_get_geometry (monitor, &monitor_geometry);
|
||||
bounds_width = monitor_geometry.width;
|
||||
bounds_height = monitor_geometry.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
bounds_width = G_MAXINT;
|
||||
bounds_height = G_MAXINT;
|
||||
}
|
||||
|
||||
gdk_toplevel_size_init (&size, bounds_width, bounds_height);
|
||||
gdk_toplevel_notify_compute_size (GDK_TOPLEVEL (surface), &size);
|
||||
g_warn_if_fail (size.width > 0);
|
||||
g_warn_if_fail (size.height > 0);
|
||||
*width = size.width;
|
||||
*height = size.height;
|
||||
impl->resizible = (impl->resizible && resizible);
|
||||
|
||||
if (impl->resizible)
|
||||
{
|
||||
geometry.min_width = size.min_width;
|
||||
geometry.min_height = size.min_height;
|
||||
mask = GDK_HINT_MIN_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
geometry.max_width = geometry.min_width = size.width;
|
||||
geometry.max_height = geometry.min_height = size.height;
|
||||
mask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE;
|
||||
}
|
||||
gdk_broadway_surface_set_geometry_hints (surface, &geometry, mask);
|
||||
|
||||
if (!(surface->state & (GDK_TOPLEVEL_STATE_FULLSCREEN |
|
||||
GDK_TOPLEVEL_STATE_MAXIMIZED |
|
||||
GDK_TOPLEVEL_STATE_TILED |
|
||||
GDK_TOPLEVEL_STATE_TOP_TILED |
|
||||
GDK_TOPLEVEL_STATE_RIGHT_TILED |
|
||||
GDK_TOPLEVEL_STATE_BOTTOM_TILED |
|
||||
GDK_TOPLEVEL_STATE_LEFT_TILED |
|
||||
GDK_TOPLEVEL_STATE_MINIMIZED)))
|
||||
{
|
||||
gdk_surface_constrain_size (&geometry, mask,
|
||||
size.width, size.height,
|
||||
&size.width, &size.height);
|
||||
|
||||
if (impl->last_computed_width != size.width ||
|
||||
impl->last_computed_height != size.height)
|
||||
{
|
||||
*width = size.width;
|
||||
*height = size.height;
|
||||
impl->last_computed_width = size.width;
|
||||
impl->last_computed_height = size.height;
|
||||
|
||||
gdk_broadway_surface_toplevel_resize (surface, *width, *height);
|
||||
}
|
||||
}
|
||||
|
||||
if (size.shadow.is_valid)
|
||||
{
|
||||
impl->shadow_left = size.shadow.left;
|
||||
impl->shadow_right = size.shadow.right;
|
||||
impl->shadow_top = size.shadow.top;
|
||||
impl->shadow_bottom = size.shadow.bottom;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
compute_size_idle (gpointer user_data)
|
||||
{
|
||||
GdkSurface *surface = user_data;
|
||||
GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
|
||||
int width, height;
|
||||
|
||||
impl->compute_size_source_id = 0;
|
||||
compute_toplevel_size (surface, TRUE, &width, &height);
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_frame_clock_after_update (GdkFrameClock *clock,
|
||||
GdkSurface *surface)
|
||||
{
|
||||
GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
|
||||
|
||||
if (impl->compute_size_source_id)
|
||||
{
|
||||
g_clear_handle_id (&impl->compute_size_source_id, g_source_remove);
|
||||
compute_size_idle (surface);
|
||||
}
|
||||
}
|
||||
|
||||
/* We need to flush in an idle rather than AFTER_PAINT, as the clock
|
||||
is frozen during e.g. surface resizes so the paint will not happen
|
||||
and the surface resize request is never flushed. */
|
||||
@@ -112,6 +241,8 @@ connect_frame_clock (GdkSurface *surface)
|
||||
|
||||
g_signal_connect (frame_clock, "before-paint",
|
||||
G_CALLBACK (on_frame_clock_before_paint), surface);
|
||||
g_signal_connect_after (frame_clock, "update",
|
||||
G_CALLBACK (on_frame_clock_after_update), surface);
|
||||
g_signal_connect (frame_clock, "after-paint",
|
||||
G_CALLBACK (on_frame_clock_after_paint), surface);
|
||||
}
|
||||
@@ -123,6 +254,8 @@ disconnect_frame_clock (GdkSurface *surface)
|
||||
|
||||
g_signal_handlers_disconnect_by_func (frame_clock,
|
||||
on_frame_clock_before_paint, surface);
|
||||
g_signal_handlers_disconnect_by_func (frame_clock,
|
||||
on_frame_clock_after_update, surface);
|
||||
g_signal_handlers_disconnect_by_func (frame_clock,
|
||||
on_frame_clock_after_paint, surface);
|
||||
}
|
||||
@@ -137,6 +270,7 @@ gdk_broadway_surface_constructed (GObject *object)
|
||||
if (!surface->parent)
|
||||
broadway_display->toplevels = g_list_prepend (broadway_display->toplevels, self);
|
||||
|
||||
self->resizible = TRUE;
|
||||
self->id = _gdk_broadway_server_new_surface (broadway_display->server,
|
||||
self->root_x,
|
||||
self->root_y,
|
||||
@@ -316,6 +450,7 @@ gdk_broadway_surface_hide (GdkSurface *surface)
|
||||
|
||||
_gdk_broadway_surface_grab_check_unmap (surface,
|
||||
_gdk_broadway_server_get_next_serial (broadway_display->server));
|
||||
g_clear_handle_id (&impl->compute_size_source_id, g_source_remove);
|
||||
|
||||
if (_gdk_broadway_server_surface_hide (broadway_display->server, impl->id))
|
||||
queue_flush (surface);
|
||||
@@ -1009,6 +1144,8 @@ _gdk_broadway_moveresize_configure_done (GdkDisplay *display,
|
||||
BroadwayInputMsg *tmp_event;
|
||||
MoveResizeData *mv_resize = get_move_resize_data (display, FALSE);
|
||||
|
||||
gdk_surface_request_layout (surface);
|
||||
|
||||
if (!mv_resize || surface != mv_resize->moveresize_surface)
|
||||
return FALSE;
|
||||
|
||||
@@ -1168,6 +1305,43 @@ gdk_broadway_surface_beep (GdkSurface *surface)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_surface_request_layout (GdkSurface *surface)
|
||||
{
|
||||
GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
|
||||
|
||||
if (!impl->compute_size_source_id &&
|
||||
GDK_IS_TOPLEVEL (surface))
|
||||
{
|
||||
impl->compute_size_source_id = g_idle_add_full (G_PRIORITY_HIGH - 10,
|
||||
compute_size_idle,
|
||||
surface,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_broadway_surface_compute_size (GdkSurface *surface)
|
||||
{
|
||||
int width, height;
|
||||
|
||||
if (GDK_IS_TOPLEVEL (surface))
|
||||
{
|
||||
compute_toplevel_size (surface, TRUE, &width, &height);
|
||||
}
|
||||
else
|
||||
{
|
||||
width = gdk_surface_get_width(surface);
|
||||
height = gdk_surface_get_height(surface);
|
||||
|
||||
gdk_broadway_surface_move_resize_internal (surface, FALSE,
|
||||
0, 0,
|
||||
width,
|
||||
height);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_surface_class_init (GdkBroadwaySurfaceClass *klass)
|
||||
{
|
||||
@@ -1187,6 +1361,8 @@ gdk_broadway_surface_class_init (GdkBroadwaySurfaceClass *klass)
|
||||
impl_class->destroy_notify = gdk_broadway_surface_destroy_notify;
|
||||
impl_class->drag_begin = _gdk_broadway_surface_drag_begin;
|
||||
impl_class->get_scale = gdk_broadway_surface_get_scale;
|
||||
impl_class->request_layout = gdk_broadway_surface_request_layout;
|
||||
impl_class->compute_size = gdk_broadway_surface_compute_size;
|
||||
}
|
||||
|
||||
#define LAST_PROP 1
|
||||
@@ -1504,55 +1680,12 @@ gdk_broadway_toplevel_present (GdkToplevel *toplevel,
|
||||
GdkToplevelLayout *layout)
|
||||
{
|
||||
GdkSurface *surface = GDK_SURFACE (toplevel);
|
||||
GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
|
||||
GdkDisplay *display = gdk_surface_get_display (surface);
|
||||
GdkMonitor *monitor;
|
||||
GdkToplevelSize size;
|
||||
int bounds_width, bounds_height;
|
||||
int width, height;
|
||||
GdkGeometry geometry;
|
||||
GdkSurfaceHints mask;
|
||||
gboolean maximize;
|
||||
|
||||
gdk_broadway_surface_unminimize (surface);
|
||||
|
||||
monitor = gdk_display_get_monitor_at_surface (display, surface);
|
||||
if (monitor)
|
||||
{
|
||||
GdkRectangle monitor_geometry;
|
||||
|
||||
gdk_monitor_get_geometry (monitor, &monitor_geometry);
|
||||
bounds_width = monitor_geometry.width;
|
||||
bounds_height = monitor_geometry.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
bounds_width = G_MAXINT;
|
||||
bounds_height = G_MAXINT;
|
||||
}
|
||||
|
||||
gdk_toplevel_size_init (&size, bounds_width, bounds_height);
|
||||
gdk_toplevel_notify_compute_size (toplevel, &size);
|
||||
g_warn_if_fail (size.width > 0);
|
||||
g_warn_if_fail (size.height > 0);
|
||||
width = size.width;
|
||||
height = size.height;
|
||||
|
||||
if (gdk_toplevel_layout_get_resizable (layout))
|
||||
{
|
||||
geometry.min_width = size.min_width;
|
||||
geometry.min_height = size.min_height;
|
||||
mask = GDK_HINT_MIN_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
geometry.max_width = geometry.min_width = width;
|
||||
geometry.max_height = geometry.min_height = height;
|
||||
mask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE;
|
||||
}
|
||||
gdk_broadway_surface_set_geometry_hints (surface, &geometry, mask);
|
||||
gdk_surface_constrain_size (&geometry, mask, width, height, &width, &height);
|
||||
gdk_broadway_surface_toplevel_resize (surface, width, height);
|
||||
compute_toplevel_size (surface, gdk_toplevel_layout_get_resizable (layout), &width, &height);
|
||||
|
||||
if (gdk_toplevel_layout_get_maximized (layout, &maximize))
|
||||
{
|
||||
@@ -1562,14 +1695,7 @@ gdk_broadway_toplevel_present (GdkToplevel *toplevel,
|
||||
gdk_broadway_surface_unmaximize (surface);
|
||||
}
|
||||
|
||||
if (size.shadow.is_valid)
|
||||
{
|
||||
impl->shadow_left = size.shadow.left;
|
||||
impl->shadow_right = size.shadow.right;
|
||||
impl->shadow_top = size.shadow.top;
|
||||
impl->shadow_bottom = size.shadow.bottom;
|
||||
}
|
||||
|
||||
gdk_surface_request_layout (surface);
|
||||
show_surface (surface);
|
||||
}
|
||||
|
||||
|
@@ -76,6 +76,13 @@ struct _GdkBroadwaySurface
|
||||
int shadow_right;
|
||||
int shadow_top;
|
||||
int shadow_bottom;
|
||||
|
||||
int last_computed_width;
|
||||
int last_computed_height;
|
||||
|
||||
guint compute_size_source_id;
|
||||
|
||||
gboolean resizible;
|
||||
};
|
||||
|
||||
struct _GdkBroadwaySurfaceClass
|
||||
|
54
gdk/gdk.c
54
gdk/gdk.c
@@ -133,22 +133,35 @@ static const GdkDebugKey gdk_debug_keys[] = {
|
||||
{ "portals", GDK_DEBUG_PORTALS, "Force use of portals" },
|
||||
{ "no-portals", GDK_DEBUG_NO_PORTALS, "Disable use of portals" },
|
||||
{ "force-offload", GDK_DEBUG_FORCE_OFFLOAD, "Force graphics offload for all textures" },
|
||||
{ "gl-disable", GDK_DEBUG_GL_DISABLE, "Disable OpenGL support" },
|
||||
{ "gl-no-fractional", GDK_DEBUG_GL_NO_FRACTIONAL, "Disable fractional scaling for OpenGL" },
|
||||
{ "gl-debug", GDK_DEBUG_GL_DEBUG, "Insert debugging information in OpenGL" },
|
||||
{ "gl-disable-gl", GDK_DEBUG_GL_DISABLE_GL, "Only allow OpenGL GLES API" },
|
||||
{ "gl-disable-gles", GDK_DEBUG_GL_DISABLE_GLES, "Don't allow OpenGL GLES API" },
|
||||
{ "gl-prefer-gl", GDK_DEBUG_GL_PREFER_GL, "Prefer GL over GLES API" },
|
||||
{ "gl-egl", GDK_DEBUG_GL_EGL, "Use EGL on X11 or Windows" },
|
||||
{ "gl-glx", GDK_DEBUG_GL_GLX, "Use GLX on X11" },
|
||||
{ "gl-wgl", GDK_DEBUG_GL_WGL, "Use WGL on Windows" },
|
||||
{ "vulkan-disable", GDK_DEBUG_VULKAN_DISABLE, "Disable Vulkan support" },
|
||||
{ "default-settings",GDK_DEBUG_DEFAULT_SETTINGS, "Force default values for xsettings" },
|
||||
{ "high-depth", GDK_DEBUG_HIGH_DEPTH, "Use high bit depth rendering if possible" },
|
||||
{ "no-vsync", GDK_DEBUG_NO_VSYNC, "Repaint instantly (uses 100% CPU with animations)" },
|
||||
{ "dmabuf-disable", GDK_DEBUG_DMABUF_DISABLE, "Disable dmabuf support" },
|
||||
};
|
||||
|
||||
static const GdkDebugKey gdk_feature_keys[] = {
|
||||
{ "gl", GDK_FEATURE_OPENGL, "Disable OpenGL support" },
|
||||
{ "gl-api", GDK_FEATURE_GL_API, "Disable non-GLES GL API" },
|
||||
{ "gles-api", GDK_FEATURE_GLES_API, "Disable GLES GL API" },
|
||||
{ "egl", GDK_FEATURE_EGL, "Disable EGL" },
|
||||
{ "glx", GDK_FEATURE_GLX, "Disable GLX" },
|
||||
{ "wgl", GDK_FEATURE_WGL, "Disable WGL" },
|
||||
{ "vulkan", GDK_FEATURE_VULKAN, "Disable Vulkan support" },
|
||||
{ "dmabuf", GDK_FEATURE_DMABUF, "Disable dmabuf support" },
|
||||
{ "offload", GDK_FEATURE_OFFLOAD, "Disable graphics offload" },
|
||||
{ "color-mgmt", GDK_FEATURE_COLOR_MANAGEMENT, "Disable color management" },
|
||||
};
|
||||
|
||||
|
||||
static GdkFeatures gdk_features;
|
||||
|
||||
gboolean
|
||||
gdk_has_feature (GdkFeatures features)
|
||||
{
|
||||
return (features & gdk_features) == features;
|
||||
}
|
||||
|
||||
#ifdef G_HAS_CONSTRUCTORS
|
||||
#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
|
||||
@@ -216,6 +229,7 @@ gdk_ensure_resources (void)
|
||||
|
||||
guint
|
||||
gdk_parse_debug_var (const char *variable,
|
||||
const char *docs,
|
||||
const GdkDebugKey *keys,
|
||||
guint nkeys)
|
||||
{
|
||||
@@ -276,6 +290,7 @@ gdk_parse_debug_var (const char *variable,
|
||||
max_width = MAX (max_width, strlen (keys[i].key));
|
||||
max_width += 4;
|
||||
|
||||
fprintf (stderr, "%s\n", docs);
|
||||
fprintf (stderr, "Supported %s values:\n", variable);
|
||||
for (i = 0; i < nkeys; i++) {
|
||||
fprintf (stderr, " %s%*s%s\n", keys[i].key, (int)(max_width - strlen (keys[i].key)), " ", keys[i].help);
|
||||
@@ -303,21 +318,26 @@ gdk_parse_debug_var (const char *variable,
|
||||
void
|
||||
gdk_pre_parse (void)
|
||||
{
|
||||
GdkFeatures disabled_features;
|
||||
|
||||
gdk_initialized = TRUE;
|
||||
|
||||
gdk_ensure_resources ();
|
||||
|
||||
_gdk_debug_flags = gdk_parse_debug_var ("GDK_DEBUG",
|
||||
gdk_debug_keys,
|
||||
G_N_ELEMENTS (gdk_debug_keys));
|
||||
"GDK_DEBUG can be set to values that make GDK print out different\n"
|
||||
"types of debugging information or change the behavior of GDK for\n"
|
||||
"debugging purposes.\n",
|
||||
gdk_debug_keys,
|
||||
G_N_ELEMENTS (gdk_debug_keys));
|
||||
|
||||
/* These are global */
|
||||
if (_gdk_debug_flags & GDK_DEBUG_GL_EGL)
|
||||
gdk_gl_backend_use (GDK_GL_EGL);
|
||||
else if (_gdk_debug_flags & GDK_DEBUG_GL_GLX)
|
||||
gdk_gl_backend_use (GDK_GL_GLX);
|
||||
else if (_gdk_debug_flags & GDK_DEBUG_GL_WGL)
|
||||
gdk_gl_backend_use (GDK_GL_WGL);
|
||||
disabled_features = gdk_parse_debug_var ("GDK_DISABLE",
|
||||
"GDK_DISABLE can be set to values which cause GDK to disable\n"
|
||||
"certain features.\n",
|
||||
gdk_feature_keys,
|
||||
G_N_ELEMENTS (gdk_feature_keys));
|
||||
|
||||
gdk_features = GDK_ALL_FEATURES & ~disabled_features;
|
||||
|
||||
#ifndef G_HAS_CONSTRUCTORS
|
||||
stash_and_unset_environment ();
|
||||
|
@@ -120,7 +120,7 @@ gdk_app_launch_context_class_init (GdkAppLaunchContextClass *klass)
|
||||
context_class->launch_failed = gdk_app_launch_context_launch_failed;
|
||||
|
||||
/**
|
||||
* GdkAppLaunchContext:display: (attributes org.gtk.Property.get=gdk_app_launch_context_get_display)
|
||||
* GdkAppLaunchContext:display:
|
||||
*
|
||||
* The display that the `GdkAppLaunchContext` is on.
|
||||
*/
|
||||
@@ -169,7 +169,7 @@ gdk_app_launch_context_get_display_name (GAppLaunchContext *context,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_app_launch_context_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_app_launch_context_get_display:
|
||||
* @context: a `GdkAppLaunchContext`
|
||||
*
|
||||
* Gets the `GdkDisplay` that @context is for.
|
||||
|
@@ -82,8 +82,10 @@ gdk_cairo_context_cairo_create (GdkCairoContext *self)
|
||||
|
||||
draw_context = GDK_DRAW_CONTEXT (self);
|
||||
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
if (!gdk_draw_context_is_in_frame (draw_context))
|
||||
return NULL;
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
|
||||
cr = GDK_CAIRO_CONTEXT_GET_CLASS (self)->cairo_create (self);
|
||||
|
||||
|
@@ -168,7 +168,6 @@ gdk_cicp_params_class_init (GdkCicpParamsClass *klass)
|
||||
* - 5: PAL
|
||||
* - 6,7: BT.601 / NTSC
|
||||
* - 9: BT.2020
|
||||
* - 10: CIE XYZ
|
||||
* - 12: Display P3
|
||||
*
|
||||
* Since: 4.16
|
||||
|
@@ -58,7 +58,7 @@ void gdk_cicp_params_set_matrix_coefficients (GdkCicpParams *self,
|
||||
/**
|
||||
* GdkCicpRange:
|
||||
* @GDK_CICP_RANGE_NARROW: The values use the range of 16-235 (for Y) and 16-240 for u and v.
|
||||
* @GDK_CICO_RANGE_FULL: The values use the full range.
|
||||
* @GDK_CICP_RANGE_FULL: The values use the full range.
|
||||
*
|
||||
* The values of this enumeration describe whether image data uses
|
||||
* the full range of 8-bit values.
|
||||
|
@@ -353,7 +353,7 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
class->read_finish = gdk_clipboard_read_local_finish;
|
||||
|
||||
/**
|
||||
* GdkClipboard:display: (attributes org.gtk.Property.get=gdk_clipboard_get_display)
|
||||
* GdkClipboard:display:
|
||||
*
|
||||
* The `GdkDisplay` that the clipboard belongs to.
|
||||
*/
|
||||
@@ -366,7 +366,7 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkClipboard:formats: (attributes org.gtk.Property.get=gdk_clipboard_get_formats)
|
||||
* GdkClipboard:formats:
|
||||
*
|
||||
* The possible formats that the clipboard can provide its data in.
|
||||
*/
|
||||
@@ -378,7 +378,7 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkClipboard:local: (attributes org.gtk.Property.get=gdk_clipboard_is_local)
|
||||
* GdkClipboard:local: (getter is_local)
|
||||
*
|
||||
* %TRUE if the contents of the clipboard are owned by this process.
|
||||
*/
|
||||
@@ -390,7 +390,7 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkClipboard:content: (attributes org.gtk.Property.get=gdk_clipboard_get_content)
|
||||
* GdkClipboard:content:
|
||||
*
|
||||
* The `GdkContentProvider` or %NULL if the clipboard is empty or contents are
|
||||
* provided otherwise.
|
||||
@@ -429,7 +429,7 @@ gdk_clipboard_init (GdkClipboard *clipboard)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_clipboard_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_clipboard_get_display:
|
||||
* @clipboard: a `GdkClipboard`
|
||||
*
|
||||
* Gets the `GdkDisplay` that the clipboard was created for.
|
||||
@@ -447,7 +447,7 @@ gdk_clipboard_get_display (GdkClipboard *clipboard)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_clipboard_get_formats: (attributes org.gtk.Method.get_property=formats)
|
||||
* gdk_clipboard_get_formats:
|
||||
* @clipboard: a `GdkClipboard`
|
||||
*
|
||||
* Gets the formats that the clipboard can provide its current contents in.
|
||||
@@ -465,7 +465,7 @@ gdk_clipboard_get_formats (GdkClipboard *clipboard)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_clipboard_is_local: (attributes org.gtk.Method.get_property=local)
|
||||
* gdk_clipboard_is_local: (get-property local)
|
||||
* @clipboard: a `GdkClipboard`
|
||||
*
|
||||
* Returns if the clipboard is local.
|
||||
@@ -489,7 +489,7 @@ gdk_clipboard_is_local (GdkClipboard *clipboard)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_clipboard_get_content: (attributes org.gtk.Method.get_property=content)
|
||||
* gdk_clipboard_get_content:
|
||||
* @clipboard: a `GdkClipboard`
|
||||
*
|
||||
* Returns the `GdkContentProvider` currently set on @clipboard.
|
||||
|
@@ -229,20 +229,6 @@ gdk_color_from_rgba (GdkColor *self,
|
||||
gdk_color_finish (&tmp);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
* gdk_color_get_depth:
|
||||
* @self: a `GdkColor`
|
||||
*
|
||||
* Returns the preferred depth for the color state of @self.
|
||||
*
|
||||
* Returns: the preferred depth
|
||||
*/
|
||||
GdkMemoryDepth
|
||||
(gdk_color_get_depth) (const GdkColor *self)
|
||||
{
|
||||
return gdk_color_state_get_depth (self->color_state);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
* gdk_color_print:
|
||||
* @self: the `GdkColor` to print
|
||||
|
@@ -20,11 +20,17 @@
|
||||
* and tests, and must not include other headers.
|
||||
*/
|
||||
|
||||
static inline int
|
||||
sign (float v)
|
||||
{
|
||||
return v < 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
static inline float
|
||||
srgb_oetf (float v)
|
||||
{
|
||||
if (v > 0.0031308f)
|
||||
return 1.055f * powf (v, 1.f / 2.4f) - 0.055f;
|
||||
if (fabsf (v) > 0.0031308f)
|
||||
return sign (v) * (1.055f * powf (fabsf (v), 1.f / 2.4f) - 0.055f);
|
||||
else
|
||||
return 12.92f * v;
|
||||
}
|
||||
@@ -32,8 +38,8 @@ srgb_oetf (float v)
|
||||
static inline float
|
||||
srgb_eotf (float v)
|
||||
{
|
||||
if (v >= 0.04045f)
|
||||
return powf (((v + 0.055f) / (1.f + 0.055f)), 2.4f);
|
||||
if (fabsf (v) >= 0.04045f)
|
||||
return sign (v) * powf (((fabsf (v) + 0.055f) / (1.f + 0.055f)), 2.4f);
|
||||
else
|
||||
return v / 12.92f;
|
||||
}
|
||||
@@ -41,25 +47,25 @@ srgb_eotf (float v)
|
||||
static inline float
|
||||
gamma22_oetf (float v)
|
||||
{
|
||||
return powf (v, 1.f / 2.2f);
|
||||
return sign (v) * powf (fabsf (v), 1.f / 2.2f);
|
||||
}
|
||||
|
||||
static inline float
|
||||
gamma22_eotf (float v)
|
||||
{
|
||||
return powf (v, 2.2f);
|
||||
return sign (v) * powf (fabsf (v), 2.2f);
|
||||
}
|
||||
|
||||
static inline float
|
||||
gamma28_oetf (float v)
|
||||
{
|
||||
return powf (v, 1.f / 2.8f);
|
||||
return sign (v) * powf (fabsf (v), 1.f / 2.8f);
|
||||
}
|
||||
|
||||
static inline float
|
||||
gamma28_eotf (float v)
|
||||
{
|
||||
return powf (v, 2.8f);
|
||||
return sign (v) * powf (fabsf (v), 2.8f);
|
||||
}
|
||||
|
||||
static inline float
|
||||
@@ -71,9 +77,10 @@ pq_eotf (float v)
|
||||
float c2 = 2413.0 / (1 << 7);
|
||||
float c3 = 2392.0 / (1 << 7);
|
||||
|
||||
float x = powf (MAX ((powf (v, minv) - c1), 0) / (c2 - (c3 * (powf (v, minv)))), ninv);
|
||||
float x = powf (fabsf (v), minv);
|
||||
x = powf (MAX ((x - c1), 0) / (c2 - (c3 * x)), ninv);
|
||||
|
||||
return x * 10000 / 203.0;
|
||||
return sign (v) * x * 10000 / 203.0;
|
||||
}
|
||||
|
||||
static inline float
|
||||
@@ -86,7 +93,8 @@ pq_oetf (float v)
|
||||
float c2 = 2413.0 / (1 << 7);
|
||||
float c3 = 2392.0 / (1 << 7);
|
||||
|
||||
return powf (((c1 + (c2 * powf (x, n))) / (1 + (c3 * powf (x, n)))), m);
|
||||
x = powf (fabsf (x), n);
|
||||
return sign (v) * powf (((c1 + (c2 * x)) / (1 + (c3 * x))), m);
|
||||
}
|
||||
|
||||
static inline float
|
||||
@@ -95,10 +103,10 @@ bt709_eotf (float v)
|
||||
const float a = 1.099;
|
||||
const float d = 0.0812;
|
||||
|
||||
if (v < d)
|
||||
if (fabsf (v) < d)
|
||||
return v / 4.5f;
|
||||
else
|
||||
return powf ((v + (a - 1)) / a, 1 / 0.45f);
|
||||
return sign (v) * powf ((fabsf (v) + (a - 1)) / a, 1 / 0.45f);
|
||||
}
|
||||
|
||||
static inline float
|
||||
@@ -107,10 +115,10 @@ bt709_oetf (float v)
|
||||
const float a = 1.099;
|
||||
const float b = 0.018;
|
||||
|
||||
if (v < b)
|
||||
if (fabsf (v) < b)
|
||||
return v * 4.5f;
|
||||
else
|
||||
return a * powf (v, 0.45f) - (a - 1);
|
||||
return sign (v) * (a * powf (fabsf (v), 0.45f) - (a - 1));
|
||||
}
|
||||
|
||||
static inline float
|
||||
@@ -120,10 +128,10 @@ hlg_eotf (float v)
|
||||
const float b = 0.28466892;
|
||||
const float c = 0.55991073;
|
||||
|
||||
if (v <= 0.5)
|
||||
return (v * v) / 3;
|
||||
if (fabsf (v) <= 0.5)
|
||||
return sign (v) * (v * v) / 3;
|
||||
else
|
||||
return (expf ((v - c) / a) + b) / 12.0;
|
||||
return sign (v) * (expf ((fabsf (v) - c) / a) + b) / 12.0;
|
||||
}
|
||||
|
||||
static inline float
|
||||
@@ -133,10 +141,10 @@ hlg_oetf (float v)
|
||||
const float b = 0.28466892;
|
||||
const float c = 0.55991073;
|
||||
|
||||
if (v <= 1/12.0)
|
||||
return sqrtf (3 * v);
|
||||
if (fabsf (v) <= 1/12.0)
|
||||
return sign (v) * sqrtf (3 * fabsf (v));
|
||||
else
|
||||
return a * logf (12 * v - b) + c;
|
||||
return sign (v) * (a * logf (12 * fabsf (v) - b) + c);
|
||||
}
|
||||
|
||||
/* See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
|
||||
|
@@ -116,7 +116,10 @@ _gdk_color_to_float (const GdkColor *self,
|
||||
{
|
||||
if (gdk_color_state_equal (self->color_state, color_state))
|
||||
{
|
||||
memcpy (values, self->values, sizeof (float) * 4);
|
||||
values[0] = self->values[0];
|
||||
values[1] = self->values[1];
|
||||
values[2] = self->values[2];
|
||||
values[3] = self->values[3];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -126,10 +129,3 @@ _gdk_color_to_float (const GdkColor *self,
|
||||
values);
|
||||
}
|
||||
|
||||
#define gdk_color_get_depth(self) _gdk_color_get_depth ((self))
|
||||
static inline GdkMemoryDepth
|
||||
_gdk_color_get_depth (const GdkColor *self)
|
||||
{
|
||||
return gdk_color_state_get_depth (self->color_state);
|
||||
}
|
||||
|
||||
|
@@ -83,7 +83,6 @@ gboolean gdk_color_equal (const GdkColor *color1,
|
||||
const GdkColor *color2);
|
||||
gboolean gdk_color_is_clear (const GdkColor *self);
|
||||
gboolean gdk_color_is_opaque (const GdkColor *self);
|
||||
GdkMemoryDepth gdk_color_get_depth (const GdkColor *self);
|
||||
|
||||
void gdk_color_convert (GdkColor *self,
|
||||
GdkColorState *color_state,
|
||||
|
@@ -38,9 +38,9 @@
|
||||
* Crucially, GTK knows how to convert colors from one color
|
||||
* state to another.
|
||||
*
|
||||
* `GdkColorState objects are immutable and therefore threadsafe.
|
||||
* `GdkColorState` objects are immutable and therefore threadsafe.
|
||||
*
|
||||
* Since 4.16
|
||||
* Since: 4.16
|
||||
*/
|
||||
|
||||
G_DEFINE_BOXED_TYPE (GdkColorState, gdk_color_state,
|
||||
@@ -331,6 +331,68 @@ gdk_default_color_state_get_cicp (GdkColorState *color_state)
|
||||
return &self->cicp;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_color_state_check_inf_nan (const float src[4],
|
||||
float dest[4])
|
||||
{
|
||||
if (isnan (src[0]) ||
|
||||
isnan (src[1]) ||
|
||||
isnan (src[2]) ||
|
||||
isnan (src[3]))
|
||||
{
|
||||
dest = (float[4]) { 1.0, 0.0, 0.8, 1.0 };
|
||||
return TRUE;
|
||||
}
|
||||
if (isinf (src[0]) ||
|
||||
isinf (src[1]) ||
|
||||
isinf (src[2]) ||
|
||||
isinf (src[3]))
|
||||
{
|
||||
dest = (float[4]) { 0.0, 0.8, 1.0, 1.0 };
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_color_state_clamp_0_1 (GdkColorState *self,
|
||||
const float src[4],
|
||||
float dest[4])
|
||||
{
|
||||
if (gdk_color_state_check_inf_nan (src, dest))
|
||||
return;
|
||||
|
||||
dest[0] = CLAMP (src[0], 0.0f, 1.0f);
|
||||
dest[1] = CLAMP (src[1], 0.0f, 1.0f);
|
||||
dest[2] = CLAMP (src[2], 0.0f, 1.0f);
|
||||
dest[3] = CLAMP (src[3], 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_color_state_clamp_unbounded (GdkColorState *self,
|
||||
const float src[4],
|
||||
float dest[4])
|
||||
{
|
||||
if (gdk_color_state_check_inf_nan (src, dest))
|
||||
return;
|
||||
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[2] = src[2];
|
||||
dest[3] = CLAMP (src[3], 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_default_color_state_clamp (GdkColorState *color_state,
|
||||
const float in[4],
|
||||
float out[4])
|
||||
{
|
||||
GdkDefaultColorState *self = (GdkDefaultColorState *) color_state;
|
||||
|
||||
self->clamp (color_state, in, out);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
static const
|
||||
@@ -342,6 +404,7 @@ GdkColorStateClass GDK_DEFAULT_COLOR_STATE_CLASS = {
|
||||
.get_convert_to = gdk_default_color_state_get_convert_to,
|
||||
.get_convert_from = gdk_default_color_state_get_convert_from,
|
||||
.get_cicp = gdk_default_color_state_get_cicp,
|
||||
.clamp = gdk_default_color_state_clamp,
|
||||
};
|
||||
|
||||
GdkDefaultColorState gdk_default_color_states[] = {
|
||||
@@ -350,7 +413,8 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
.klass = &GDK_DEFAULT_COLOR_STATE_CLASS,
|
||||
.ref_count = 0,
|
||||
.depth = GDK_MEMORY_U8_SRGB,
|
||||
.rendering_color_state = GDK_COLOR_STATE_SRGB_LINEAR,
|
||||
.rendering_color_state = GDK_COLOR_STATE_SRGB,
|
||||
.rendering_color_state_linear = GDK_COLOR_STATE_SRGB_LINEAR,
|
||||
},
|
||||
.name = "srgb",
|
||||
.no_srgb = GDK_COLOR_STATE_SRGB_LINEAR,
|
||||
@@ -359,6 +423,7 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
[GDK_COLOR_STATE_ID_REC2100_PQ] = gdk_default_srgb_to_rec2100_pq,
|
||||
[GDK_COLOR_STATE_ID_REC2100_LINEAR] = gdk_default_srgb_to_rec2100_linear,
|
||||
},
|
||||
.clamp = gdk_color_state_clamp_0_1,
|
||||
.cicp = { 1, 13, 0, 1 },
|
||||
},
|
||||
[GDK_COLOR_STATE_ID_SRGB_LINEAR] = {
|
||||
@@ -367,6 +432,7 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
.ref_count = 0,
|
||||
.depth = GDK_MEMORY_U8,
|
||||
.rendering_color_state = GDK_COLOR_STATE_SRGB_LINEAR,
|
||||
.rendering_color_state_linear = GDK_COLOR_STATE_SRGB_LINEAR,
|
||||
},
|
||||
.name = "srgb-linear",
|
||||
.no_srgb = NULL,
|
||||
@@ -375,6 +441,7 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
[GDK_COLOR_STATE_ID_REC2100_PQ] = gdk_default_srgb_linear_to_rec2100_pq,
|
||||
[GDK_COLOR_STATE_ID_REC2100_LINEAR] = gdk_default_srgb_linear_to_rec2100_linear,
|
||||
},
|
||||
.clamp = gdk_color_state_clamp_0_1,
|
||||
.cicp = { 1, 8, 0, 1 },
|
||||
},
|
||||
[GDK_COLOR_STATE_ID_REC2100_PQ] = {
|
||||
@@ -382,7 +449,8 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
.klass = &GDK_DEFAULT_COLOR_STATE_CLASS,
|
||||
.ref_count = 0,
|
||||
.depth = GDK_MEMORY_FLOAT16,
|
||||
.rendering_color_state = GDK_COLOR_STATE_REC2100_LINEAR,
|
||||
.rendering_color_state = GDK_COLOR_STATE_REC2100_PQ,
|
||||
.rendering_color_state_linear = GDK_COLOR_STATE_REC2100_LINEAR,
|
||||
},
|
||||
.name = "rec2100-pq",
|
||||
.no_srgb = NULL,
|
||||
@@ -391,6 +459,7 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
[GDK_COLOR_STATE_ID_SRGB_LINEAR] = gdk_default_rec2100_pq_to_srgb_linear,
|
||||
[GDK_COLOR_STATE_ID_REC2100_LINEAR] = gdk_default_rec2100_pq_to_rec2100_linear,
|
||||
},
|
||||
.clamp = gdk_color_state_clamp_0_1,
|
||||
.cicp = { 9, 16, 0, 1 },
|
||||
},
|
||||
[GDK_COLOR_STATE_ID_REC2100_LINEAR] = {
|
||||
@@ -399,6 +468,7 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
.ref_count = 0,
|
||||
.depth = GDK_MEMORY_FLOAT16,
|
||||
.rendering_color_state = GDK_COLOR_STATE_REC2100_LINEAR,
|
||||
.rendering_color_state_linear = GDK_COLOR_STATE_REC2100_LINEAR,
|
||||
},
|
||||
.name = "rec2100-linear",
|
||||
.no_srgb = NULL,
|
||||
@@ -407,6 +477,7 @@ GdkDefaultColorState gdk_default_color_states[] = {
|
||||
[GDK_COLOR_STATE_ID_SRGB_LINEAR] = gdk_default_rec2100_linear_to_srgb_linear,
|
||||
[GDK_COLOR_STATE_ID_REC2100_PQ] = gdk_default_rec2100_linear_to_rec2100_pq,
|
||||
},
|
||||
.clamp = gdk_color_state_clamp_unbounded,
|
||||
.cicp = { 9, 8, 0, 1 },
|
||||
},
|
||||
};
|
||||
@@ -421,15 +492,15 @@ struct _GdkCicpColorState
|
||||
|
||||
GdkColorState *no_srgb;
|
||||
|
||||
const char *name;
|
||||
char *name;
|
||||
|
||||
GdkTransferFunc eotf;
|
||||
GdkTransferFunc oetf;
|
||||
|
||||
float *to_srgb;
|
||||
float *to_rec2020;
|
||||
float *from_srgb;
|
||||
float *from_rec2020;
|
||||
float to_srgb[9];
|
||||
float to_rec2020[9];
|
||||
float from_srgb[9];
|
||||
float from_rec2020[9];
|
||||
|
||||
GdkCicp cicp;
|
||||
};
|
||||
@@ -449,7 +520,6 @@ TRANSFORM(gdk_cicp_from_rec2100_linear, NONE, cicp->from_rec2020, cicp->o
|
||||
|
||||
#undef cicp
|
||||
|
||||
/* }}} */
|
||||
/* }}} */
|
||||
/* {{{ Vfuncs */
|
||||
|
||||
@@ -458,14 +528,11 @@ gdk_cicp_color_state_free (GdkColorState *cs)
|
||||
{
|
||||
GdkCicpColorState *self = (GdkCicpColorState *) cs;
|
||||
|
||||
g_free (self->name);
|
||||
|
||||
if (self->no_srgb)
|
||||
gdk_color_state_unref (self->no_srgb);
|
||||
|
||||
g_free (self->to_srgb);
|
||||
g_free (self->to_rec2020);
|
||||
g_free (self->from_srgb);
|
||||
g_free (self->from_rec2020);
|
||||
|
||||
g_free (self);
|
||||
}
|
||||
|
||||
@@ -555,7 +622,7 @@ gdk_cicp_color_state_get_cicp (GdkColorState *color_state)
|
||||
return &self->cicp;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* }}} */
|
||||
|
||||
static const
|
||||
GdkColorStateClass GDK_CICP_COLOR_STATE_CLASS = {
|
||||
@@ -566,6 +633,7 @@ GdkColorStateClass GDK_CICP_COLOR_STATE_CLASS = {
|
||||
.get_convert_to = gdk_cicp_color_state_get_convert_to,
|
||||
.get_convert_from = gdk_cicp_color_state_get_convert_from,
|
||||
.get_cicp = gdk_cicp_color_state_get_cicp,
|
||||
.clamp = gdk_color_state_clamp_0_1,
|
||||
};
|
||||
|
||||
static inline float *
|
||||
@@ -676,10 +744,6 @@ gdk_color_state_new_for_cicp (const GdkCicp *cicp,
|
||||
to_xyz = rec2020_to_xyz;
|
||||
from_xyz = xyz_to_rec2020;
|
||||
break;
|
||||
case 10:
|
||||
to_xyz = identity;
|
||||
from_xyz = identity;
|
||||
break;
|
||||
case 12:
|
||||
to_xyz = p3_to_xyz;
|
||||
from_xyz = xyz_to_p3;
|
||||
@@ -698,7 +762,8 @@ gdk_color_state_new_for_cicp (const GdkCicp *cicp,
|
||||
self->parent.ref_count = 1;
|
||||
|
||||
/* sRGB is special-cased by being a default colorstate */
|
||||
self->parent.rendering_color_state = GDK_COLOR_STATE_REC2100_LINEAR;
|
||||
self->parent.rendering_color_state = GDK_COLOR_STATE_REC2100_PQ;
|
||||
self->parent.rendering_color_state_linear = GDK_COLOR_STATE_REC2100_LINEAR;
|
||||
|
||||
self->parent.depth = GDK_MEMORY_FLOAT16;
|
||||
|
||||
@@ -707,10 +772,10 @@ gdk_color_state_new_for_cicp (const GdkCicp *cicp,
|
||||
self->eotf = eotf;
|
||||
self->oetf = oetf;
|
||||
|
||||
self->to_srgb = multiply (g_new (float, 9), xyz_to_srgb, to_xyz);
|
||||
self->to_rec2020 = multiply (g_new (float, 9), xyz_to_rec2020, to_xyz);
|
||||
self->from_srgb = multiply (g_new (float, 9), from_xyz, srgb_to_xyz);
|
||||
self->from_rec2020 = multiply (g_new (float, 9), from_xyz, rec2020_to_xyz);
|
||||
multiply (self->to_srgb, xyz_to_srgb, to_xyz);
|
||||
multiply (self->to_rec2020, xyz_to_rec2020, to_xyz);
|
||||
multiply (self->from_srgb, from_xyz, srgb_to_xyz);
|
||||
multiply (self->from_rec2020, from_xyz, rec2020_to_xyz);
|
||||
|
||||
self->name = g_strdup_printf ("cicp-%u/%u/%u/%u",
|
||||
cicp->color_primaries,
|
||||
@@ -720,12 +785,12 @@ gdk_color_state_new_for_cicp (const GdkCicp *cicp,
|
||||
|
||||
if (cicp->transfer_function == 13)
|
||||
{
|
||||
GdkCicp no_srgb;
|
||||
|
||||
memcpy (&no_srgb, cicp, sizeof (GdkCicp));
|
||||
no_srgb.transfer_function = 8;
|
||||
|
||||
self->no_srgb = gdk_color_state_new_for_cicp (&no_srgb, NULL);
|
||||
self->no_srgb = gdk_color_state_new_for_cicp (&(GdkCicp) {
|
||||
cicp->color_primaries,
|
||||
8,
|
||||
cicp->matrix_coefficients,
|
||||
cicp->range },
|
||||
NULL);
|
||||
}
|
||||
|
||||
return (GdkColorState *) self;
|
||||
@@ -773,6 +838,24 @@ gdk_color_state_get_no_srgb_tf (GdkColorState *self)
|
||||
return self->klass->get_no_srgb_tf (self);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
* gdk_color_state_clamp:
|
||||
* @self: a `GdkColorState`
|
||||
* @src: the values to clamp
|
||||
* @dest: (out): location to store the result, may be identical to
|
||||
* the src argument
|
||||
*
|
||||
* Clamps the values to be within the allowed ranges for the given
|
||||
* color state.
|
||||
*/
|
||||
void
|
||||
gdk_color_state_clamp (GdkColorState *self,
|
||||
const float src[4],
|
||||
float dest[4])
|
||||
{
|
||||
self->klass->clamp (self, src, dest);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* vim:set foldmethod=marker expandtab: */
|
||||
|
@@ -26,6 +26,7 @@ struct _GdkColorState
|
||||
|
||||
GdkMemoryDepth depth;
|
||||
GdkColorState *rendering_color_state;
|
||||
GdkColorState *rendering_color_state_linear;
|
||||
};
|
||||
|
||||
/* Note: self may be the source or the target colorstate */
|
||||
@@ -45,6 +46,9 @@ struct _GdkColorStateClass
|
||||
GdkFloatColorConvert (* get_convert_from) (GdkColorState *self,
|
||||
GdkColorState *source);
|
||||
const GdkCicp * (* get_cicp) (GdkColorState *self);
|
||||
void (* clamp) (GdkColorState *self,
|
||||
const float src[4],
|
||||
float dest[4]);
|
||||
};
|
||||
|
||||
typedef struct _GdkDefaultColorState GdkDefaultColorState;
|
||||
@@ -56,6 +60,9 @@ struct _GdkDefaultColorState
|
||||
const char *name;
|
||||
GdkColorState *no_srgb;
|
||||
GdkFloatColorConvert convert_to[GDK_COLOR_STATE_N_IDS];
|
||||
void (* clamp) (GdkColorState *self,
|
||||
const float src[4],
|
||||
float dest[4]);
|
||||
|
||||
GdkCicp cicp;
|
||||
};
|
||||
@@ -77,6 +84,10 @@ GdkColorState * gdk_color_state_get_no_srgb_tf (GdkColorState
|
||||
GdkColorState * gdk_color_state_new_for_cicp (const GdkCicp *cicp,
|
||||
GError **error);
|
||||
|
||||
void gdk_color_state_clamp (GdkColorState *self,
|
||||
const float src[4],
|
||||
float dest[4]);
|
||||
|
||||
static inline GdkColorState *
|
||||
gdk_color_state_get_rendering_color_state (GdkColorState *self)
|
||||
{
|
||||
@@ -84,9 +95,9 @@ gdk_color_state_get_rendering_color_state (GdkColorState *self)
|
||||
self = GDK_COLOR_STATE_REC2100_PQ;
|
||||
|
||||
if (!GDK_DEBUG_CHECK (LINEAR))
|
||||
return self;
|
||||
return self->rendering_color_state;
|
||||
|
||||
return self->rendering_color_state;
|
||||
return self->rendering_color_state_linear;
|
||||
}
|
||||
|
||||
static inline GdkMemoryDepth
|
||||
@@ -176,7 +187,10 @@ gdk_color_state_convert_color (GdkColorState *src_cs,
|
||||
GdkFloatColorConvert convert = NULL;
|
||||
GdkFloatColorConvert convert2 = NULL;
|
||||
|
||||
memcpy (dest, src, sizeof (float) * 4);
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[2] = src[2];
|
||||
dest[3] = src[3];
|
||||
|
||||
if (gdk_color_state_equal (src_cs, dest_cs))
|
||||
return;
|
||||
@@ -210,4 +224,3 @@ gdk_color_state_from_rgba (GdkColorState *self,
|
||||
self,
|
||||
out_color);
|
||||
}
|
||||
|
||||
|
@@ -169,7 +169,7 @@ gdk_content_provider_class_init (GdkContentProviderClass *class)
|
||||
class->get_value = gdk_content_provider_real_get_value;
|
||||
|
||||
/**
|
||||
* GdkContentProvider:formats: (attributes org.gtk.Property.get=gdk_content_provider_ref_formats)
|
||||
* GdkContentProvider:formats: (getter ref_formats)
|
||||
*
|
||||
* The possible formats that the provider can provide its data in.
|
||||
*/
|
||||
@@ -181,7 +181,7 @@ gdk_content_provider_class_init (GdkContentProviderClass *class)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkContentProvider:storable-formats: (attributes org.gtk.Property.get=gdk_content_provider_ref_storable_formats)
|
||||
* GdkContentProvider:storable-formats: (getter ref_storable_formats)
|
||||
*
|
||||
* The subset of formats that clipboard managers should store this provider's data in.
|
||||
*/
|
||||
@@ -214,7 +214,7 @@ gdk_content_provider_init (GdkContentProvider *provider)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_content_provider_ref_formats: (attributes org.gtk.Method.get_property=formats)
|
||||
* gdk_content_provider_ref_formats: (get-property formats)
|
||||
* @provider: a `GdkContentProvider`
|
||||
*
|
||||
* Gets the formats that the provider can provide its current contents in.
|
||||
@@ -230,7 +230,7 @@ gdk_content_provider_ref_formats (GdkContentProvider *provider)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_content_provider_ref_storable_formats: (attributes org.gtk.Method.get_property=storable-formats)
|
||||
* gdk_content_provider_ref_storable_formats: (get-property storable-formats)
|
||||
* @provider: a `GdkContentProvider`
|
||||
*
|
||||
* Gets the formats that the provider suggests other applications to store
|
||||
|
@@ -172,7 +172,7 @@ gdk_cursor_class_init (GdkCursorClass *cursor_class)
|
||||
object_class->finalize = gdk_cursor_finalize;
|
||||
|
||||
/**
|
||||
* GdkCursor:fallback: (attributes org.gtk.Property.get=gdk_cursor_get_fallback)
|
||||
* GdkCursor:fallback:
|
||||
*
|
||||
* Cursor to fall back to if this cursor cannot be displayed.
|
||||
*/
|
||||
@@ -184,7 +184,7 @@ gdk_cursor_class_init (GdkCursorClass *cursor_class)
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GdkCursor:hotspot-x: (attributes org.gtk.Property.get=gdk_cursor_get_hotspot_x)
|
||||
* GdkCursor:hotspot-x:
|
||||
*
|
||||
* X position of the cursor hotspot in the cursor image.
|
||||
*/
|
||||
@@ -196,7 +196,7 @@ gdk_cursor_class_init (GdkCursorClass *cursor_class)
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GdkCursor:hotspot-y: (attributes org.gtk.Property.get=gdk_cursor_get_hotspot_y)
|
||||
* GdkCursor:hotspot-y:
|
||||
*
|
||||
* Y position of the cursor hotspot in the cursor image.
|
||||
*/
|
||||
@@ -208,7 +208,7 @@ gdk_cursor_class_init (GdkCursorClass *cursor_class)
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GdkCursor:name: (attributes org.gtk.Property.get=gdk_cursor_get_name)
|
||||
* GdkCursor:name:
|
||||
*
|
||||
* Name of this this cursor.
|
||||
*
|
||||
@@ -407,7 +407,7 @@ gdk_cursor_new_from_callback (GdkCursorGetTextureCallback callback,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_cursor_get_fallback: (attributes org.gtk.Method.get_property=fallback)
|
||||
* gdk_cursor_get_fallback:
|
||||
* @cursor: a `GdkCursor`
|
||||
*
|
||||
* Returns the fallback for this @cursor.
|
||||
@@ -430,7 +430,7 @@ gdk_cursor_get_fallback (GdkCursor *cursor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_cursor_get_name: (attributes org.gtk.Method.get_property=name)
|
||||
* gdk_cursor_get_name:
|
||||
* @cursor: a `GdkCursor`
|
||||
*
|
||||
* Returns the name of the cursor.
|
||||
@@ -468,7 +468,7 @@ gdk_cursor_get_texture (GdkCursor *cursor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_cursor_get_hotspot_x: (attributes org.gtk.Method.get_property=hotspot-x)
|
||||
* gdk_cursor_get_hotspot_x:
|
||||
* @cursor: a `GdkCursor`
|
||||
*
|
||||
* Returns the horizontal offset of the hotspot.
|
||||
@@ -490,7 +490,7 @@ gdk_cursor_get_hotspot_x (GdkCursor *cursor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_cursor_get_hotspot_y: (attributes org.gtk.Method.get_property=hotspot-y)
|
||||
* gdk_cursor_get_hotspot_y:
|
||||
* @cursor: a `GdkCursor`
|
||||
*
|
||||
* Returns the vertical offset of the hotspot.
|
||||
|
@@ -44,29 +44,38 @@ typedef enum {
|
||||
GDK_DEBUG_HDR = 1 << 14,
|
||||
GDK_DEBUG_PORTALS = 1 << 15,
|
||||
GDK_DEBUG_NO_PORTALS = 1 << 16,
|
||||
GDK_DEBUG_GL_DISABLE = 1 << 17,
|
||||
GDK_DEBUG_GL_NO_FRACTIONAL= 1 << 18,
|
||||
GDK_DEBUG_FORCE_OFFLOAD = 1 << 19,
|
||||
GDK_DEBUG_GL_DISABLE_GL = 1 << 20,
|
||||
GDK_DEBUG_GL_DISABLE_GLES = 1 << 21,
|
||||
GDK_DEBUG_GL_PREFER_GL = 1 << 22,
|
||||
GDK_DEBUG_GL_DEBUG = 1 << 23,
|
||||
GDK_DEBUG_GL_EGL = 1 << 24,
|
||||
GDK_DEBUG_GL_GLX = 1 << 25,
|
||||
GDK_DEBUG_GL_WGL = 1 << 26,
|
||||
GDK_DEBUG_VULKAN_DISABLE = 1 << 27,
|
||||
GDK_DEBUG_DEFAULT_SETTINGS= 1 << 28,
|
||||
GDK_DEBUG_HIGH_DEPTH = 1 << 29,
|
||||
GDK_DEBUG_NO_VSYNC = 1 << 30,
|
||||
GDK_DEBUG_DMABUF_DISABLE = 1 << 31,
|
||||
GDK_DEBUG_GL_NO_FRACTIONAL= 1 << 17,
|
||||
GDK_DEBUG_FORCE_OFFLOAD = 1 << 18,
|
||||
GDK_DEBUG_GL_PREFER_GL = 1 << 19,
|
||||
GDK_DEBUG_GL_DEBUG = 1 << 20,
|
||||
GDK_DEBUG_DEFAULT_SETTINGS= 1 << 21,
|
||||
GDK_DEBUG_HIGH_DEPTH = 1 << 22,
|
||||
GDK_DEBUG_NO_VSYNC = 1 << 23,
|
||||
} GdkDebugFlags;
|
||||
|
||||
typedef enum {
|
||||
GDK_FEATURE_OPENGL = 1 << 0,
|
||||
GDK_FEATURE_GL_API = 1 << 1,
|
||||
GDK_FEATURE_GLES_API = 1 << 2,
|
||||
GDK_FEATURE_EGL = 1 << 3,
|
||||
GDK_FEATURE_GLX = 1 << 4,
|
||||
GDK_FEATURE_WGL = 1 << 5,
|
||||
GDK_FEATURE_VULKAN = 1 << 6,
|
||||
GDK_FEATURE_DMABUF = 1 << 7,
|
||||
GDK_FEATURE_OFFLOAD = 1 << 8,
|
||||
GDK_FEATURE_COLOR_MANAGEMENT = 1 << 9,
|
||||
} GdkFeatures;
|
||||
|
||||
#define GDK_ALL_FEATURES ((1 << 10) - 1)
|
||||
|
||||
extern guint _gdk_debug_flags;
|
||||
|
||||
GdkDebugFlags gdk_display_get_debug_flags (GdkDisplay *display);
|
||||
void gdk_display_set_debug_flags (GdkDisplay *display,
|
||||
GdkDebugFlags flags);
|
||||
|
||||
gboolean gdk_has_feature (GdkFeatures feature);
|
||||
|
||||
static inline void
|
||||
gdk_debug_message (const char *format, ...) G_GNUC_PRINTF(1, 2);
|
||||
static inline void
|
||||
@@ -106,6 +115,7 @@ typedef struct
|
||||
} GdkDebugKey;
|
||||
|
||||
guint gdk_parse_debug_var (const char *variable,
|
||||
const char *docs,
|
||||
const GdkDebugKey *keys,
|
||||
guint nkeys);
|
||||
|
||||
|
@@ -104,7 +104,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
object_class->get_property = gdk_device_get_property;
|
||||
|
||||
/**
|
||||
* GdkDevice:display: (attributes org.gtk.Property.get=gdk_device_get_display)
|
||||
* GdkDevice:display:
|
||||
*
|
||||
* The `GdkDisplay` the `GdkDevice` pertains to.
|
||||
*/
|
||||
@@ -114,7 +114,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:name: (attributes org.gtk.Property.get=gdk_device_get_name)
|
||||
* GdkDevice:name:
|
||||
*
|
||||
* The device name.
|
||||
*/
|
||||
@@ -125,7 +125,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:source: (attributes org.gtk.Property.get=gdk_device_get_source)
|
||||
* GdkDevice:source:
|
||||
*
|
||||
* Source type for the device.
|
||||
*/
|
||||
@@ -137,7 +137,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDevice:has-cursor: (attributes org.gtk.Property.get=gdk_device_get_has_cursor)
|
||||
* GdkDevice:has-cursor:
|
||||
*
|
||||
* Whether the device is represented by a cursor on the screen.
|
||||
*/
|
||||
@@ -159,7 +159,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:vendor-id: (attributes org.gtk.Property.get=gdk_device_get_vendor_id)
|
||||
* GdkDevice:vendor-id:
|
||||
*
|
||||
* Vendor ID of this device.
|
||||
*
|
||||
@@ -172,7 +172,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:product-id: (attributes org.gtk.Property.get=gdk_device_get_product_id)
|
||||
* GdkDevice:product-id:
|
||||
*
|
||||
* Product ID of this device.
|
||||
*
|
||||
@@ -185,7 +185,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:seat: (attributes org.gtk.Property.get=gdk_device_get_seat)
|
||||
* GdkDevice:seat:
|
||||
*
|
||||
* `GdkSeat` of this device.
|
||||
*/
|
||||
@@ -196,7 +196,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:num-touches: (attributes org.gtk.Property.get=gdk_device_get_num_touches)
|
||||
* GdkDevice:num-touches:
|
||||
*
|
||||
* The maximal number of concurrent touches on a touch device.
|
||||
*
|
||||
@@ -211,7 +211,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:tool: (attributes org.gtk.Property.get=gdk_device_get_device_tool)
|
||||
* GdkDevice:tool: (getter get_device_tool)
|
||||
*
|
||||
* The `GdkDeviceTool` that is currently used with this device.
|
||||
*/
|
||||
@@ -221,7 +221,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:direction: (attributes org.gtk.Property.get=gdk_device_get_direction)
|
||||
* GdkDevice:direction:
|
||||
*
|
||||
* The direction of the current layout.
|
||||
*
|
||||
@@ -233,7 +233,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:has-bidi-layouts: (attributes org.gtk.Property.get=gdk_device_has_bidi_layouts)
|
||||
* GdkDevice:has-bidi-layouts:
|
||||
*
|
||||
* Whether the device has both right-to-left and left-to-right layouts.
|
||||
*
|
||||
@@ -245,7 +245,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:caps-lock-state: (attributes org.gtk.Property.get=gdk_device_get_caps_lock_state)
|
||||
* GdkDevice:caps-lock-state:
|
||||
*
|
||||
* Whether Caps Lock is on.
|
||||
*
|
||||
@@ -257,7 +257,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:num-lock-state: (attributes org.gtk.Property.get=gdk_device_get_num_lock_state)
|
||||
* GdkDevice:num-lock-state:
|
||||
*
|
||||
* Whether Num Lock is on.
|
||||
*
|
||||
@@ -269,7 +269,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:scroll-lock-state: (attributes org.gtk.Property.get=gdk_device_get_scroll_lock_state)
|
||||
* GdkDevice:scroll-lock-state:
|
||||
*
|
||||
* Whether Scroll Lock is on.
|
||||
*
|
||||
@@ -281,7 +281,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDevice:modifier-state: (attributes org.gtk.Property.get=gdk_device_get_modifier_state)
|
||||
* GdkDevice:modifier-state:
|
||||
*
|
||||
* The current modifier state of the device.
|
||||
*
|
||||
@@ -540,7 +540,7 @@ gdk_device_get_name (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_has_cursor: (attributes org.gtk.Method.get_property=has-cursor)
|
||||
* gdk_device_get_has_cursor:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Determines whether the pointer follows device motion.
|
||||
@@ -559,7 +559,7 @@ gdk_device_get_has_cursor (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_source: (attributes org.gtk.Method.get_property=source)
|
||||
* gdk_device_get_source:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Determines the type of the device.
|
||||
@@ -599,7 +599,7 @@ gdk_device_get_axis_use (GdkDevice *device,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_device_get_display:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Returns the `GdkDisplay` to which @device pertains.
|
||||
@@ -1082,7 +1082,7 @@ _gdk_device_surface_at_position (GdkDevice *device,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_vendor_id: (attributes org.gtk.Method.get_property=vendor-id)
|
||||
* gdk_device_get_vendor_id:
|
||||
* @device: a physical `GdkDevice`
|
||||
*
|
||||
* Returns the vendor ID of this device.
|
||||
@@ -1124,7 +1124,7 @@ gdk_device_get_vendor_id (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_product_id: (attributes org.gtk.Method.get_property=product-id)
|
||||
* gdk_device_get_product_id:
|
||||
* @device: a physical `GdkDevice`
|
||||
*
|
||||
* Returns the product ID of this device.
|
||||
@@ -1157,7 +1157,7 @@ gdk_device_set_seat (GdkDevice *device,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_seat: (attributes org.gtk.Method.get_property=seat)
|
||||
* gdk_device_get_seat:
|
||||
* @device: A `GdkDevice`
|
||||
*
|
||||
* Returns the `GdkSeat` the device belongs to.
|
||||
@@ -1202,7 +1202,7 @@ gdk_device_get_num_touches (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_device_tool: (attributes org.gtk.Method.get_property=tool)
|
||||
* gdk_device_get_device_tool: (get-property tool)
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Retrieves the current tool for @device.
|
||||
@@ -1218,7 +1218,7 @@ gdk_device_get_device_tool (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_caps_lock_state: (attributes org.gtk.Method.get_property=caps-lock-state)
|
||||
* gdk_device_get_caps_lock_state:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Retrieves whether the Caps Lock modifier of the keyboard is locked.
|
||||
@@ -1239,7 +1239,7 @@ gdk_device_get_caps_lock_state (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_num_lock_state: (attributes org.gtk.Method.get_property=num-lock-state)
|
||||
* gdk_device_get_num_lock_state:
|
||||
* @device: a ``GdkDevice`
|
||||
*
|
||||
* Retrieves whether the Num Lock modifier of the keyboard is locked.
|
||||
@@ -1260,7 +1260,7 @@ gdk_device_get_num_lock_state (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_scroll_lock_state: (attributes org.gtk.Method.get_property=scroll-lock-state)
|
||||
* gdk_device_get_scroll_lock_state:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Retrieves whether the Scroll Lock modifier of the keyboard is locked.
|
||||
@@ -1281,7 +1281,7 @@ gdk_device_get_scroll_lock_state (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_modifier_state: (attributes org.gtk.Method.get_property=modifier-state)
|
||||
* gdk_device_get_modifier_state:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Retrieves the current modifier state of the keyboard.
|
||||
@@ -1302,7 +1302,7 @@ gdk_device_get_modifier_state (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_direction: (attributes org.gtk.Method.get_property=direction)
|
||||
* gdk_device_get_direction:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Returns the direction of effective layout of the keyboard.
|
||||
@@ -1328,7 +1328,7 @@ gdk_device_get_direction (GdkDevice *device)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_has_bidi_layouts: (attributes org.gtk.Method.get_property=has-bidi-layouts)
|
||||
* gdk_device_has_bidi_layouts:
|
||||
* @device: a `GdkDevice`
|
||||
*
|
||||
* Determines if layouts for both right-to-left and
|
||||
|
@@ -107,7 +107,7 @@ gdk_device_tool_class_init (GdkDeviceToolClass *klass)
|
||||
object_class->get_property = gdk_device_tool_get_property;
|
||||
|
||||
/**
|
||||
* GdkDeviceTool:serial: (attributes org.gtk.Property.get=gdk_device_tool_get_serial)
|
||||
* GdkDeviceTool:serial:
|
||||
*
|
||||
* The serial number of the tool.
|
||||
*/
|
||||
@@ -118,7 +118,7 @@ gdk_device_tool_class_init (GdkDeviceToolClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDeviceTool:tool-type: (attributes org.gtk.Property.get=gdk_device_tool_get_tool_type)
|
||||
* GdkDeviceTool:tool-type:
|
||||
*
|
||||
* The type of the tool.
|
||||
*/
|
||||
@@ -130,7 +130,7 @@ gdk_device_tool_class_init (GdkDeviceToolClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDeviceTool:axes: (attributes org.gtk.Property.get=gdk_device_tool_get_axes)
|
||||
* GdkDeviceTool:axes:
|
||||
*
|
||||
* The axes of the tool.
|
||||
*/
|
||||
@@ -140,7 +140,7 @@ gdk_device_tool_class_init (GdkDeviceToolClass *klass)
|
||||
G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
/**
|
||||
* GdkDeviceTool:hardware-id: (attributes org.gtk.Property.get=gdk_device_tool_get_hardware_id)
|
||||
* GdkDeviceTool:hardware-id:
|
||||
*
|
||||
* The hardware ID of the tool.
|
||||
*/
|
||||
@@ -173,7 +173,7 @@ gdk_device_tool_new (guint64 serial,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_tool_get_serial: (attributes org.gtk.Method.get_property=serial)
|
||||
* gdk_device_tool_get_serial:
|
||||
* @tool: a `GdkDeviceTool`
|
||||
*
|
||||
* Gets the serial number of this tool.
|
||||
@@ -192,7 +192,7 @@ gdk_device_tool_get_serial (GdkDeviceTool *tool)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_tool_get_hardware_id: (attributes org.gtk.Method.get_property=hardware-id)
|
||||
* gdk_device_tool_get_hardware_id:
|
||||
* @tool: a `GdkDeviceTool`
|
||||
*
|
||||
* Gets the hardware ID of this tool, or 0 if it's not known.
|
||||
@@ -218,7 +218,7 @@ gdk_device_tool_get_hardware_id (GdkDeviceTool *tool)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_tool_get_tool_type: (attributes org.gtk.Method.get_property=tool-type)
|
||||
* gdk_device_tool_get_tool_type:
|
||||
* @tool: a `GdkDeviceTool`
|
||||
*
|
||||
* Gets the `GdkDeviceToolType` of the tool.
|
||||
@@ -236,7 +236,7 @@ gdk_device_tool_get_tool_type (GdkDeviceTool *tool)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_tool_get_axes: (attributes org.gtk.Method.get_property=axes)
|
||||
* gdk_device_tool_get_axes:
|
||||
* @tool: a `GdkDeviceTool`
|
||||
*
|
||||
* Gets the axes of the tool.
|
||||
|
@@ -230,7 +230,7 @@ gdk_display_class_init (GdkDisplayClass *class)
|
||||
class->opened = gdk_display_real_opened;
|
||||
|
||||
/**
|
||||
* GdkDisplay:composited: (attributes org.gtk.Property.get=gdk_display_is_composited)
|
||||
* GdkDisplay:composited: (getter is_composited)
|
||||
*
|
||||
* %TRUE if the display properly composites the alpha channel.
|
||||
*/
|
||||
@@ -240,7 +240,7 @@ gdk_display_class_init (GdkDisplayClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDisplay:rgba: (attributes org.gtk.Property.get=gdk_display_is_rgba)
|
||||
* GdkDisplay:rgba: (getter is_rgba)
|
||||
*
|
||||
* %TRUE if the display supports an alpha channel.
|
||||
*/
|
||||
@@ -250,7 +250,7 @@ gdk_display_class_init (GdkDisplayClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDisplay:shadow-width: (attributes org.gtk.Property.get=gdk_display_supports_shadow_width)
|
||||
* GdkDisplay:shadow-width: (getter supports_shadow_width)
|
||||
*
|
||||
* %TRUE if the display supports extensible frames.
|
||||
*
|
||||
@@ -262,7 +262,7 @@ gdk_display_class_init (GdkDisplayClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDisplay:input-shapes: (attributes org.gtk.Property.get=gdk_display_supports_input_shapes)
|
||||
* GdkDisplay:input-shapes: (getter supports_input_shapes)
|
||||
*
|
||||
* %TRUE if the display supports input shapes.
|
||||
*/
|
||||
@@ -272,7 +272,7 @@ gdk_display_class_init (GdkDisplayClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDisplay:dmabuf-formats: (attributes org.gtk.Property.get=gdk_display_get_dmabuf_formats)
|
||||
* GdkDisplay:dmabuf-formats:
|
||||
*
|
||||
* The dma-buf formats that are supported on this display
|
||||
*
|
||||
@@ -418,15 +418,17 @@ gdk_display_dispose (GObject *object)
|
||||
{
|
||||
GdkDisplay *display = GDK_DISPLAY (object);
|
||||
GdkDisplayPrivate *priv = gdk_display_get_instance_private (display);
|
||||
gsize i;
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (display->dmabuf_downloaders); i++)
|
||||
if (display->vk_downloader)
|
||||
{
|
||||
if (display->dmabuf_downloaders[i] == NULL)
|
||||
continue;
|
||||
gdk_dmabuf_downloader_close (display->vk_downloader);
|
||||
g_clear_object (&display->vk_downloader);
|
||||
}
|
||||
|
||||
gdk_dmabuf_downloader_close (display->dmabuf_downloaders[i]);
|
||||
g_clear_object (&display->dmabuf_downloaders[i]);
|
||||
if (display->egl_downloader)
|
||||
{
|
||||
gdk_dmabuf_downloader_close (display->egl_downloader);
|
||||
g_clear_object (&display->egl_downloader);
|
||||
}
|
||||
|
||||
_gdk_display_manager_remove_display (gdk_display_manager_get (), display);
|
||||
@@ -1116,7 +1118,7 @@ gdk_display_get_primary_clipboard (GdkDisplay *display)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_supports_input_shapes: (attributes org.gtk.Method.get_property=input-shapes)
|
||||
* gdk_display_supports_input_shapes: (get-property input-shapes)
|
||||
* @display: a `GdkDisplay`
|
||||
*
|
||||
* Returns %TRUE if the display supports input shapes.
|
||||
@@ -1309,10 +1311,10 @@ gdk_display_create_vulkan_context (GdkDisplay *self,
|
||||
g_return_val_if_fail (surface == NULL || GDK_IS_SURFACE (surface), NULL);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
||||
|
||||
if (gdk_display_get_debug_flags (self) & GDK_DEBUG_VULKAN_DISABLE)
|
||||
if (!gdk_has_feature (GDK_FEATURE_VULKAN))
|
||||
{
|
||||
g_set_error_literal (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_NOT_AVAILABLE,
|
||||
_("Vulkan support disabled via GDK_DEBUG"));
|
||||
_("Vulkan support disabled via GDK_DISABLE"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1362,11 +1364,11 @@ gdk_display_init_gl (GdkDisplay *self)
|
||||
|
||||
before = GDK_PROFILER_CURRENT_TIME;
|
||||
|
||||
if (gdk_display_get_debug_flags (self) & GDK_DEBUG_GL_DISABLE)
|
||||
if (!gdk_has_feature (GDK_FEATURE_OPENGL))
|
||||
{
|
||||
g_set_error_literal (&priv->gl_error, GDK_GL_ERROR,
|
||||
GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
_("GL support disabled via GDK_DEBUG"));
|
||||
_("OpenGL support disabled via GDK_DISABLE"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1477,7 +1479,7 @@ gdk_display_create_gl_context (GdkDisplay *self,
|
||||
if (!gdk_display_prepare_gl (self, error))
|
||||
return NULL;
|
||||
|
||||
return gdk_gl_context_new (self, NULL);
|
||||
return gdk_gl_context_new (self, NULL, FALSE);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
@@ -1965,33 +1967,6 @@ gdk_display_get_egl_display (GdkDisplay *self)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAVE_DMABUF
|
||||
static void
|
||||
gdk_display_add_dmabuf_downloader (GdkDisplay *display,
|
||||
GdkDmabufDownloader *downloader)
|
||||
{
|
||||
gsize i;
|
||||
|
||||
if (downloader == NULL)
|
||||
return;
|
||||
|
||||
/* dmabuf_downloaders is NULL-terminated */
|
||||
for (i = 0; i < G_N_ELEMENTS (display->dmabuf_downloaders) - 1; i++)
|
||||
{
|
||||
if (display->dmabuf_downloaders[i] == NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
g_assert (i < G_N_ELEMENTS (display->dmabuf_downloaders) - 1);
|
||||
|
||||
display->dmabuf_downloaders[i] = downloader;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* To support a drm format, we must be able to import it into GL
|
||||
* using the relevant EGL extensions, and download it into a memory
|
||||
* texture, possibly doing format conversion with shaders (in GSK).
|
||||
*/
|
||||
void
|
||||
gdk_display_init_dmabuf (GdkDisplay *self)
|
||||
{
|
||||
@@ -2006,18 +1981,21 @@ gdk_display_init_dmabuf (GdkDisplay *self)
|
||||
builder = gdk_dmabuf_formats_builder_new ();
|
||||
|
||||
#ifdef HAVE_DMABUF
|
||||
if (!GDK_DISPLAY_DEBUG_CHECK (self, DMABUF_DISABLE))
|
||||
if (gdk_has_feature (GDK_FEATURE_DMABUF))
|
||||
{
|
||||
#ifdef GDK_RENDERING_VULKAN
|
||||
gdk_display_add_dmabuf_downloader (self, gdk_vulkan_get_dmabuf_downloader (self, builder));
|
||||
gdk_vulkan_init_dmabuf (self);
|
||||
if (self->vk_dmabuf_formats)
|
||||
gdk_dmabuf_formats_builder_add_formats (builder, self->vk_dmabuf_formats);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_EGL
|
||||
gdk_display_add_dmabuf_downloader (self, gdk_dmabuf_get_egl_downloader (self, builder));
|
||||
gdk_dmabuf_egl_init (self);
|
||||
if (self->egl_dmabuf_formats)
|
||||
gdk_dmabuf_formats_builder_add_formats (builder, self->egl_dmabuf_formats);
|
||||
#endif
|
||||
|
||||
gdk_dmabuf_formats_builder_add_formats (builder,
|
||||
gdk_dmabuf_get_mmap_formats ());
|
||||
gdk_dmabuf_formats_builder_add_formats (builder, gdk_dmabuf_get_mmap_formats ());
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2075,7 +2053,7 @@ gdk_display_set_debug_flags (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_is_composited: (attributes org.gtk.Method.get_property=composited)
|
||||
* gdk_display_is_composited: (get-property composited)
|
||||
* @display: a `GdkDisplay`
|
||||
*
|
||||
* Returns whether surfaces can reasonably be expected to have
|
||||
@@ -2120,7 +2098,7 @@ gdk_display_set_composited (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_is_rgba: (attributes org.gtk.Method.get_property=rgba)
|
||||
* gdk_display_is_rgba: (get-property rgba)
|
||||
* @display: a `GdkDisplay`
|
||||
*
|
||||
* Returns whether surfaces on this @display are created with an
|
||||
@@ -2165,7 +2143,7 @@ gdk_display_set_rgba (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_supports_shadow_width: (attributes org.gtk.Method.get_property=shadow-width)
|
||||
* gdk_display_supports_shadow_width: (get-property shadow-width)
|
||||
* @display: a `GdkDisplay`
|
||||
*
|
||||
* Returns whether it's possible for a surface to draw outside of the window area.
|
||||
|
@@ -149,7 +149,7 @@ gdk_display_manager_class_init (GdkDisplayManagerClass *klass)
|
||||
GDK_TYPE_DISPLAY);
|
||||
|
||||
/**
|
||||
* GdkDisplayManager:default-display: (attributes org.gtk.Property.get=gdk_display_manager_get_default_display)
|
||||
* GdkDisplayManager:default-display:
|
||||
*
|
||||
* The default display.
|
||||
*/
|
||||
@@ -301,7 +301,7 @@ gdk_display_manager_get (void)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_manager_get_default_display: (attributes org.gtk.Method.get_property=default-display)
|
||||
* gdk_display_manager_get_default_display:
|
||||
* @manager: a `GdkDisplayManager`
|
||||
*
|
||||
* Gets the default `GdkDisplay`.
|
||||
|
@@ -48,6 +48,7 @@ typedef enum {
|
||||
GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT = 1 << 2,
|
||||
GDK_VULKAN_FEATURE_SEMAPHORE_IMPORT = 1 << 3,
|
||||
GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT = 1 << 4,
|
||||
GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE = 1 << 5,
|
||||
} GdkVulkanFeatures;
|
||||
|
||||
/* Tracks information about the device grab on this display */
|
||||
@@ -131,7 +132,8 @@ struct _GdkDisplay
|
||||
guint have_egl_gl_colorspace : 1;
|
||||
|
||||
GdkDmabufFormats *dmabuf_formats;
|
||||
GdkDmabufDownloader *dmabuf_downloaders[4];
|
||||
GdkDmabufDownloader *egl_downloader;
|
||||
GdkDmabufDownloader *vk_downloader;
|
||||
|
||||
/* Cached data the EGL dmabuf downloader */
|
||||
GdkDmabufFormats *egl_dmabuf_formats;
|
||||
|
@@ -71,7 +71,7 @@ download_memcpy (guchar *dst_data,
|
||||
bpp = gdk_memory_format_bytes_per_pixel (dst_format);
|
||||
src_stride = dmabuf->planes[0].stride;
|
||||
src_data = src_datas[0] + dmabuf->planes[0].offset;
|
||||
g_return_if_fail (sizes[0] >= dmabuf->planes[0].offset + gdk_memory_format_min_buffer_size (dst_format, dst_stride, width, height));
|
||||
g_return_if_fail (sizes[0] >= dmabuf->planes[0].offset + gdk_memory_format_min_buffer_size (dst_format, src_stride, width, height));
|
||||
|
||||
if (dst_stride == src_stride)
|
||||
memcpy (dst_data, src_data, (height - 1) * dst_stride + width * bpp);
|
||||
|
@@ -18,7 +18,6 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(HAVE_DMABUF) && defined (HAVE_EGL)
|
||||
#include "gdkdmabufeglprivate.h"
|
||||
|
||||
#include "gdkdmabufformatsbuilderprivate.h"
|
||||
@@ -32,6 +31,8 @@
|
||||
|
||||
#include <graphene.h>
|
||||
|
||||
#if defined(HAVE_DMABUF) && defined (HAVE_EGL)
|
||||
|
||||
/* A dmabuf downloader implementation that downloads buffers via
|
||||
* gsk_renderer_render_texture + GL texture download.
|
||||
*/
|
||||
@@ -133,77 +134,6 @@ gdk_dmabuf_egl_downloader_collect_formats (GdkDisplay *display,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Hack. We don't include gsk/gsk.h here to avoid a build order problem
|
||||
* with the generated header gskenumtypes.h, so we need to hack around
|
||||
* a bit to access the gsk api we need.
|
||||
*/
|
||||
|
||||
typedef struct _GskRenderer GskRenderer;
|
||||
|
||||
extern GskRenderer * gsk_gl_renderer_new (void);
|
||||
extern gboolean gsk_renderer_realize_for_display (GskRenderer *renderer,
|
||||
GdkDisplay *display,
|
||||
GError **error);
|
||||
|
||||
GdkDmabufDownloader *
|
||||
gdk_dmabuf_get_egl_downloader (GdkDisplay *display,
|
||||
GdkDmabufFormatsBuilder *builder)
|
||||
{
|
||||
GdkDmabufFormatsBuilder *formats;
|
||||
GdkDmabufFormatsBuilder *external;
|
||||
gboolean retval = FALSE;
|
||||
GError *error = NULL;
|
||||
GskRenderer *renderer;
|
||||
GdkGLContext *previous;
|
||||
|
||||
g_assert (display->egl_dmabuf_formats == NULL);
|
||||
g_assert (display->egl_external_formats == NULL);
|
||||
|
||||
if (!gdk_display_prepare_gl (display, NULL))
|
||||
return NULL;
|
||||
|
||||
previous = gdk_gl_context_get_current ();
|
||||
if (previous)
|
||||
g_object_ref (previous);
|
||||
formats = gdk_dmabuf_formats_builder_new ();
|
||||
external = gdk_dmabuf_formats_builder_new ();
|
||||
|
||||
retval = gdk_dmabuf_egl_downloader_collect_formats (display, formats, external);
|
||||
|
||||
display->egl_dmabuf_formats = gdk_dmabuf_formats_builder_free_to_formats (formats);
|
||||
display->egl_external_formats = gdk_dmabuf_formats_builder_free_to_formats (external);
|
||||
|
||||
gdk_dmabuf_formats_builder_add_formats (builder, display->egl_dmabuf_formats);
|
||||
|
||||
if (!retval)
|
||||
{
|
||||
if (previous)
|
||||
gdk_gl_context_make_current (previous);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
renderer = gsk_gl_renderer_new ();
|
||||
|
||||
if (!gsk_renderer_realize_for_display (renderer, display, &error))
|
||||
{
|
||||
g_warning ("Failed to realize GL renderer: %s", error->message);
|
||||
g_error_free (error);
|
||||
g_object_unref (renderer);
|
||||
if (previous)
|
||||
gdk_gl_context_make_current (previous);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (previous)
|
||||
{
|
||||
gdk_gl_context_make_current (previous);
|
||||
g_object_unref (previous);
|
||||
}
|
||||
|
||||
return GDK_DMABUF_DOWNLOADER (renderer);
|
||||
}
|
||||
|
||||
EGLImage
|
||||
gdk_dmabuf_egl_create_image (GdkDisplay *display,
|
||||
int width,
|
||||
@@ -290,3 +220,79 @@ gdk_dmabuf_egl_create_image (GdkDisplay *display,
|
||||
}
|
||||
|
||||
#endif /* HAVE_DMABUF && HAVE_EGL */
|
||||
|
||||
/* Hack. We don't include gsk/gsk.h here to avoid a build order problem
|
||||
* with the generated header gskenumtypes.h, so we need to hack around
|
||||
* a bit to access the gsk api we need.
|
||||
*/
|
||||
|
||||
typedef struct _GskRenderer GskRenderer;
|
||||
|
||||
extern GskRenderer * gsk_gl_renderer_new (void);
|
||||
extern gboolean gsk_renderer_realize_for_display (GskRenderer *renderer,
|
||||
GdkDisplay *display,
|
||||
GError **error);
|
||||
|
||||
void
|
||||
gdk_dmabuf_egl_init (GdkDisplay *display)
|
||||
{
|
||||
#if defined (HAVE_DMABUF) && defined (HAVE_EGL)
|
||||
GdkDmabufFormatsBuilder *formats;
|
||||
GdkDmabufFormatsBuilder *external;
|
||||
gboolean retval = FALSE;
|
||||
GError *error = NULL;
|
||||
GskRenderer *renderer;
|
||||
GdkGLContext *previous;
|
||||
|
||||
if (display->egl_dmabuf_formats != NULL)
|
||||
return;
|
||||
|
||||
if (!gdk_has_feature (GDK_FEATURE_DMABUF) ||
|
||||
!gdk_display_prepare_gl (display, NULL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
formats = gdk_dmabuf_formats_builder_new ();
|
||||
external = gdk_dmabuf_formats_builder_new ();
|
||||
|
||||
previous = gdk_gl_context_get_current ();
|
||||
if (previous)
|
||||
g_object_ref (previous);
|
||||
|
||||
retval = gdk_dmabuf_egl_downloader_collect_formats (display, formats, external);
|
||||
|
||||
display->egl_dmabuf_formats = gdk_dmabuf_formats_builder_free_to_formats (formats);
|
||||
display->egl_external_formats = gdk_dmabuf_formats_builder_free_to_formats (external);
|
||||
|
||||
if (!retval)
|
||||
{
|
||||
if (previous)
|
||||
gdk_gl_context_make_current (previous);
|
||||
return;
|
||||
}
|
||||
|
||||
renderer = gsk_gl_renderer_new ();
|
||||
|
||||
if (!gsk_renderer_realize_for_display (renderer, display, &error))
|
||||
{
|
||||
g_warning ("Failed to realize GL renderer: %s", error->message);
|
||||
g_error_free (error);
|
||||
g_object_unref (renderer);
|
||||
if (previous)
|
||||
gdk_gl_context_make_current (previous);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (previous)
|
||||
{
|
||||
gdk_gl_context_make_current (previous);
|
||||
g_object_unref (previous);
|
||||
}
|
||||
|
||||
display->egl_downloader = GDK_DMABUF_DOWNLOADER (renderer);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -1,14 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "gdkdisplayprivate.h"
|
||||
#if defined(HAVE_DMABUF) && defined (HAVE_EGL)
|
||||
|
||||
#include "gdkdmabufprivate.h"
|
||||
#include "gdkdmabufdownloaderprivate.h"
|
||||
|
||||
#include <epoxy/egl.h>
|
||||
|
||||
GdkDmabufDownloader * gdk_dmabuf_get_egl_downloader (GdkDisplay *display,
|
||||
GdkDmabufFormatsBuilder *builder);
|
||||
EGLImage gdk_dmabuf_egl_create_image (GdkDisplay *display,
|
||||
int width,
|
||||
int height,
|
||||
@@ -16,3 +14,5 @@ EGLImage gdk_dmabuf_egl_create_image (GdkDisplay
|
||||
int target);
|
||||
|
||||
#endif /* HAVE_DMABUF && HAVE_EGL */
|
||||
|
||||
void gdk_dmabuf_egl_init (GdkDisplay *display);
|
||||
|
@@ -5,6 +5,10 @@
|
||||
#include <drm_fourcc.h>
|
||||
#endif
|
||||
|
||||
#ifndef DRM_FORMAT_MOD_INVALID
|
||||
#define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
|
||||
#endif
|
||||
|
||||
#ifndef fourcc_code
|
||||
#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \
|
||||
((__u32)(c) << 16) | ((__u32)(d) << 24))
|
||||
|
@@ -183,10 +183,8 @@ gdk_dmabuf_texture_new_from_builder (GdkDmabufTextureBuilder *builder,
|
||||
GdkDisplay *display;
|
||||
GdkDmabuf dmabuf;
|
||||
GdkColorState *color_state;
|
||||
GError *local_error = NULL;
|
||||
int width, height;
|
||||
gboolean premultiplied;
|
||||
gsize i;
|
||||
|
||||
display = gdk_dmabuf_texture_builder_get_display (builder);
|
||||
width = gdk_dmabuf_texture_builder_get_width (builder);
|
||||
@@ -234,28 +232,28 @@ gdk_dmabuf_texture_new_from_builder (GdkDmabufTextureBuilder *builder,
|
||||
: GDK_MEMORY_R8G8B8A8;
|
||||
}
|
||||
|
||||
if (!gdk_dmabuf_formats_contains (gdk_dmabuf_get_mmap_formats (), dmabuf.fourcc, dmabuf.modifier))
|
||||
if (display->egl_downloader)
|
||||
{
|
||||
for (i = 0; display->dmabuf_downloaders[i] != NULL; i++)
|
||||
{
|
||||
if (local_error && g_error_matches (local_error, GDK_DMABUF_ERROR, GDK_DMABUF_ERROR_UNSUPPORTED_FORMAT))
|
||||
g_clear_error (&local_error);
|
||||
if (gdk_dmabuf_downloader_supports (display->egl_downloader, self, error))
|
||||
self->downloader = g_object_ref (display->egl_downloader);
|
||||
}
|
||||
|
||||
if (gdk_dmabuf_downloader_supports (display->dmabuf_downloaders[i],
|
||||
self,
|
||||
local_error ? NULL : &local_error))
|
||||
{
|
||||
self->downloader = g_object_ref (display->dmabuf_downloaders[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!self->downloader && display->vk_downloader)
|
||||
{
|
||||
g_clear_error (error);
|
||||
if (gdk_dmabuf_downloader_supports (display->vk_downloader, self, error))
|
||||
self->downloader = g_object_ref (display->vk_downloader);
|
||||
}
|
||||
|
||||
if (self->downloader == NULL)
|
||||
if (!self->downloader)
|
||||
{
|
||||
if (!gdk_dmabuf_formats_contains (gdk_dmabuf_get_mmap_formats (), dmabuf.fourcc, dmabuf.modifier))
|
||||
{
|
||||
g_propagate_error (error, local_error);
|
||||
g_object_unref (self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
g_clear_error (error);
|
||||
}
|
||||
|
||||
GDK_DISPLAY_DEBUG (display, DMABUF,
|
||||
|
@@ -272,7 +272,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
gobject_class->set_property = gdk_dmabuf_texture_builder_set_property;
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:display: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_display org.gtk.Property.set=gdk_dmabuf_texture_builder_set_display)
|
||||
* GdkDmabufTextureBuilder:display:
|
||||
*
|
||||
* The display that this texture will be used on.
|
||||
*
|
||||
@@ -284,7 +284,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:width: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_width org.gtk.Property.set=gdk_dmabuf_texture_builder_set_width)
|
||||
* GdkDmabufTextureBuilder:width:
|
||||
*
|
||||
* The width of the texture.
|
||||
*
|
||||
@@ -296,7 +296,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:height: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_height org.gtk.Property.set=gdk_dmabuf_texture_builder_set_height)
|
||||
* GdkDmabufTextureBuilder:height:
|
||||
*
|
||||
* The height of the texture.
|
||||
*
|
||||
@@ -308,7 +308,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:fourcc: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_fourcc org.gtk.Property.set=gdk_dmabuf_texture_builder_set_fourcc)
|
||||
* GdkDmabufTextureBuilder:fourcc:
|
||||
*
|
||||
* The format of the texture, as a fourcc value.
|
||||
*
|
||||
@@ -346,7 +346,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:n-planes: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_n_planes org.gtk.Property.set=gdk_dmabuf_texture_builder_set_n_planes)
|
||||
* GdkDmabufTextureBuilder:n-planes:
|
||||
*
|
||||
* The number of planes of the texture.
|
||||
*
|
||||
@@ -373,7 +373,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:update-region: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_update_region org.gtk.Property.set=gdk_dmabuf_texture_builder_set_update_region)
|
||||
* GdkDmabufTextureBuilder:update-region:
|
||||
*
|
||||
* The update region for [property@Gdk.GLTextureBuilder:update-texture].
|
||||
*
|
||||
@@ -385,7 +385,7 @@ gdk_dmabuf_texture_builder_class_init (GdkDmabufTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDmabufTextureBuilder:update-texture: (attributes org.gtk.Property.get=gdk_dmabuf_texture_builder_get_update_texture org.gtk.Property.set=gdk_dmabuf_texture_builder_set_update_texture)
|
||||
* GdkDmabufTextureBuilder:update-texture:
|
||||
*
|
||||
* The texture [property@Gdk.DmabufTextureBuilder:update-region] is an update for.
|
||||
*
|
||||
@@ -471,7 +471,7 @@ gdk_dmabuf_texture_builder_set_display (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_width: (attributes org.gtk.Method.get_property=width)
|
||||
* gdk_dmabuf_texture_builder_get_width:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the width previously set via gdk_dmabuf_texture_builder_set_width() or
|
||||
@@ -490,7 +490,7 @@ gdk_dmabuf_texture_builder_get_width (GdkDmabufTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_width: (attributes org.gtk.Method.set_property=width)
|
||||
* gdk_dmabuf_texture_builder_set_width:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @width: The texture's width or 0 to unset
|
||||
*
|
||||
@@ -515,7 +515,7 @@ gdk_dmabuf_texture_builder_set_width (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_height: (attributes org.gtk.Method.get_property=height)
|
||||
* gdk_dmabuf_texture_builder_get_height:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the height previously set via gdk_dmabuf_texture_builder_set_height() or
|
||||
@@ -534,7 +534,7 @@ gdk_dmabuf_texture_builder_get_height (GdkDmabufTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_height: (attributes org.gtk.Method.set_property=height)
|
||||
* gdk_dmabuf_texture_builder_set_height:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @height: the texture's height or 0 to unset
|
||||
*
|
||||
@@ -559,7 +559,7 @@ gdk_dmabuf_texture_builder_set_height (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_fourcc: (attributes org.gtk.Method.get_property=fourcc)
|
||||
* gdk_dmabuf_texture_builder_get_fourcc:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the format previously set via gdk_dmabuf_texture_builder_set_fourcc()
|
||||
@@ -580,7 +580,7 @@ gdk_dmabuf_texture_builder_get_fourcc (GdkDmabufTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_fourcc: (attributes org.gtk.Method.set_property=fourcc)
|
||||
* gdk_dmabuf_texture_builder_set_fourcc:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @fourcc: the texture's format or 0 to unset
|
||||
*
|
||||
@@ -648,7 +648,7 @@ gdk_dmabuf_texture_builder_set_modifier (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_n_planes: (attributes org.gtk.Method.get_property=n-planes)
|
||||
* gdk_dmabuf_texture_builder_get_n_planes:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the number of planes.
|
||||
@@ -710,7 +710,7 @@ gdk_dmabuf_texture_builder_set_premultiplied (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_n_planes: (attributes org.gtk.Method.set_property=n-planes)
|
||||
* gdk_dmabuf_texture_builder_set_n_planes:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @n_planes: the number of planes
|
||||
*
|
||||
@@ -871,7 +871,7 @@ gdk_dmabuf_texture_builder_set_offset (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_color_state: (attributes org.gtk.Method.get_property=color-state)
|
||||
* gdk_dmabuf_texture_builder_get_color_state:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the color state previously set via gdk_dmabuf_texture_builder_set_color_state().
|
||||
@@ -889,7 +889,7 @@ gdk_dmabuf_texture_builder_get_color_state (GdkDmabufTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_color_state: (attributes org.gtk.Method.set_property=color-state)
|
||||
* gdk_dmabuf_texture_builder_set_color_state:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @color_state: (nullable): a `GdkColorState` or `NULL` to unset the colorstate.
|
||||
*
|
||||
@@ -920,7 +920,7 @@ gdk_dmabuf_texture_builder_set_color_state (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_update_texture: (attributes org.gtk.Method.get_property=update-texture)
|
||||
* gdk_dmabuf_texture_builder_get_update_texture:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the texture previously set via gdk_dmabuf_texture_builder_set_update_texture() or
|
||||
@@ -939,7 +939,7 @@ gdk_dmabuf_texture_builder_get_update_texture (GdkDmabufTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_update_texture: (attributes org.gtk.Method.set_property=update-texture)
|
||||
* gdk_dmabuf_texture_builder_set_update_texture:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @texture: (nullable): the texture to update
|
||||
*
|
||||
@@ -962,7 +962,7 @@ gdk_dmabuf_texture_builder_set_update_texture (GdkDmabufTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_get_update_region: (attributes org.gtk.Method.get_property=update-region)
|
||||
* gdk_dmabuf_texture_builder_get_update_region:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
*
|
||||
* Gets the region previously set via gdk_dmabuf_texture_builder_set_update_region() or
|
||||
@@ -981,7 +981,7 @@ gdk_dmabuf_texture_builder_get_update_region (GdkDmabufTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_dmabuf_texture_builder_set_update_region: (attributes org.gtk.Method.set_property=update-region)
|
||||
* gdk_dmabuf_texture_builder_set_update_region:
|
||||
* @self: a `GdkDmabufTextureBuilder`
|
||||
* @region: (nullable): the region to update
|
||||
*
|
||||
@@ -1063,11 +1063,11 @@ gdk_dmabuf_texture_builder_build (GdkDmabufTextureBuilder *self,
|
||||
for (i = 0; i < self->dmabuf.n_planes; i++)
|
||||
g_return_val_if_fail (self->dmabuf.planes[i].fd != -1, NULL);
|
||||
|
||||
if (GDK_DISPLAY_DEBUG_CHECK (self->display, DMABUF_DISABLE))
|
||||
if (!gdk_has_feature (GDK_FEATURE_DMABUF))
|
||||
{
|
||||
g_set_error_literal (error,
|
||||
GDK_DMABUF_ERROR, GDK_DMABUF_ERROR_NOT_AVAILABLE,
|
||||
"dmabuf support disabled via GDK_DEBUG environment variable");
|
||||
"dmabuf support disabled via GDK_DISABLE environment variable");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@@ -92,7 +92,7 @@ static GList *drags = NULL;
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdkDrag, gdk_drag, G_TYPE_OBJECT)
|
||||
|
||||
/**
|
||||
* gdk_drag_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_drag_get_display:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Gets the `GdkDisplay` that the drag object was created for.
|
||||
@@ -110,7 +110,7 @@ gdk_drag_get_display (GdkDrag *drag)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_get_formats: (attributes org.gtk.Method.get_property=formats)
|
||||
* gdk_drag_get_formats:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Retrieves the formats supported by this `GdkDrag` object.
|
||||
@@ -128,7 +128,7 @@ gdk_drag_get_formats (GdkDrag *drag)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_get_actions: (attributes org.gtk.Method.get_property=actions)
|
||||
* gdk_drag_get_actions:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Determines the bitmask of possible actions proposed by the source.
|
||||
@@ -146,7 +146,7 @@ gdk_drag_get_actions (GdkDrag *drag)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_get_selected_action: (attributes org.gtk.Method.get_property=selected-action)
|
||||
* gdk_drag_get_selected_action:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Determines the action chosen by the drag destination.
|
||||
@@ -164,7 +164,7 @@ gdk_drag_get_selected_action (GdkDrag *drag)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_get_device: (attributes org.gtk.Method.get_property=device)
|
||||
* gdk_drag_get_device:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Returns the `GdkDevice` associated to the `GdkDrag` object.
|
||||
@@ -182,7 +182,7 @@ gdk_drag_get_device (GdkDrag *drag)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_get_content: (attributes org.gtk.Method.get_property=content)
|
||||
* gdk_drag_get_content:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Returns the `GdkContentProvider` associated to the `GdkDrag` object.
|
||||
@@ -200,7 +200,7 @@ gdk_drag_get_content (GdkDrag *drag)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drag_get_surface: (attributes org.gtk.Method.get_property=surface)
|
||||
* gdk_drag_get_surface:
|
||||
* @drag: a `GdkDrag`
|
||||
*
|
||||
* Returns the `GdkSurface` where the drag originates.
|
||||
@@ -362,7 +362,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
object_class->finalize = gdk_drag_finalize;
|
||||
|
||||
/**
|
||||
* GdkDrag:content: (attributes org.gtk.Property.get=gdk_drag_get_content)
|
||||
* GdkDrag:content:
|
||||
*
|
||||
* The `GdkContentProvider`.
|
||||
*/
|
||||
@@ -375,7 +375,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrag:device: (attributes org.gtk.Property.get=gdk_drag_get_device)
|
||||
* GdkDrag:device:
|
||||
*
|
||||
* The `GdkDevice` that is performing the drag.
|
||||
*/
|
||||
@@ -388,7 +388,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrag:display: (attributes org.gtk.Property.get=gdk_drag_get_display)
|
||||
* GdkDrag:display:
|
||||
*
|
||||
* The `GdkDisplay` that the drag belongs to.
|
||||
*/
|
||||
@@ -400,7 +400,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrag:formats: (attributes org.gtk.Property.get=gdk_drag_get_formats)
|
||||
* GdkDrag:formats:
|
||||
*
|
||||
* The possible formats that the drag can provide its data in.
|
||||
*/
|
||||
@@ -413,7 +413,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrag:selected-action: (attributes org.gtk.Property.get=gdk_drag_get_selected_action)
|
||||
* GdkDrag:selected-action:
|
||||
*
|
||||
* The currently selected action of the drag.
|
||||
*/
|
||||
@@ -426,7 +426,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrag:actions: (attributes org.gtk.Property.get=gdk_drag_get_actions)
|
||||
* GdkDrag:actions:
|
||||
*
|
||||
* The possible actions of this drag.
|
||||
*/
|
||||
@@ -439,7 +439,7 @@ gdk_drag_class_init (GdkDragClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrag:surface: (attributes org.gtk.Property.get=gdk_drag_get_surface)
|
||||
* GdkDrag:surface:
|
||||
*
|
||||
* The surface where the drag originates.
|
||||
*/
|
||||
|
@@ -172,7 +172,7 @@ gdk_draw_context_class_init (GdkDrawContextClass *klass)
|
||||
klass->empty_frame = gdk_draw_context_default_empty_frame;
|
||||
|
||||
/**
|
||||
* GdkDrawContext:display: (attributes org.gtk.Property.get=gdk_draw_context_get_display)
|
||||
* GdkDrawContext:display:
|
||||
*
|
||||
* The `GdkDisplay` used to create the `GdkDrawContext`.
|
||||
*/
|
||||
@@ -184,7 +184,7 @@ gdk_draw_context_class_init (GdkDrawContextClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkDrawContext:surface: (attributes org.gtk.Property.get=gdk_draw_context_get_surface)
|
||||
* GdkDrawContext:surface:
|
||||
*
|
||||
* The `GdkSurface` the context is bound to.
|
||||
*/
|
||||
@@ -223,6 +223,9 @@ gdk_draw_context_init (GdkDrawContext *self)
|
||||
*
|
||||
* Returns: %TRUE if the context is between [method@Gdk.DrawContext.begin_frame]
|
||||
* and [method@Gdk.DrawContext.end_frame] calls.
|
||||
*
|
||||
* Deprecated: 4.16: Drawing directly to the surface is no longer recommended.
|
||||
* Use `GskRenderNode` and `GskRenderer`.
|
||||
*/
|
||||
gboolean
|
||||
gdk_draw_context_is_in_frame (GdkDrawContext *context)
|
||||
@@ -248,7 +251,7 @@ gdk_draw_context_surface_resized (GdkDrawContext *context)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_draw_context_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_draw_context_get_display:
|
||||
* @context: a `GdkDrawContext`
|
||||
*
|
||||
* Retrieves the `GdkDisplay` the @context is created for
|
||||
@@ -266,7 +269,7 @@ gdk_draw_context_get_display (GdkDrawContext *context)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_draw_context_get_surface: (attributes org.gtk.Method.get_property=surface)
|
||||
* gdk_draw_context_get_surface:
|
||||
* @context: a `GdkDrawContext`
|
||||
*
|
||||
* Retrieves the surface that @context is bound to.
|
||||
@@ -313,6 +316,9 @@ gdk_draw_context_get_surface (GdkDrawContext *context)
|
||||
* gdk_draw_context_begin_frame() and gdk_draw_context_end_frame() via the
|
||||
* use of [GskRenderer](../gsk4/class.Renderer.html)s, so application code
|
||||
* does not need to call these functions explicitly.
|
||||
*
|
||||
* Deprecated: 4.16: Drawing directly to the surface is no longer recommended.
|
||||
* Use `GskRenderNode` and `GskRenderer`.
|
||||
*/
|
||||
void
|
||||
gdk_draw_context_begin_frame (GdkDrawContext *context,
|
||||
@@ -324,11 +330,12 @@ gdk_draw_context_begin_frame (GdkDrawContext *context,
|
||||
g_return_if_fail (priv->surface != NULL);
|
||||
g_return_if_fail (region != NULL);
|
||||
|
||||
gdk_draw_context_begin_frame_full (context, GDK_MEMORY_U8, region);
|
||||
gdk_draw_context_begin_frame_full (context, GDK_MEMORY_U8, region, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* @depth: best depth to render in
|
||||
* @opaque: (nullable): opaque region of the rendering
|
||||
*
|
||||
* If the given depth is not `GDK_MEMORY_U8`, GDK will see about providing a
|
||||
* rendering target that supports a higher bit depth than 8 bits per channel.
|
||||
@@ -351,9 +358,10 @@ gdk_draw_context_begin_frame (GdkDrawContext *context,
|
||||
* to choose.
|
||||
*/
|
||||
void
|
||||
gdk_draw_context_begin_frame_full (GdkDrawContext *context,
|
||||
GdkMemoryDepth depth,
|
||||
const cairo_region_t *region)
|
||||
gdk_draw_context_begin_frame_full (GdkDrawContext *context,
|
||||
GdkMemoryDepth depth,
|
||||
const cairo_region_t *region,
|
||||
const graphene_rect_t *opaque)
|
||||
{
|
||||
GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context);
|
||||
|
||||
@@ -378,19 +386,23 @@ gdk_draw_context_begin_frame_full (GdkDrawContext *context,
|
||||
return;
|
||||
}
|
||||
|
||||
gdk_surface_set_opaque_rect (priv->surface, opaque);
|
||||
|
||||
if (gdk_display_get_debug_flags (priv->display) & GDK_DEBUG_HIGH_DEPTH)
|
||||
depth = GDK_MEMORY_FLOAT32;
|
||||
|
||||
priv->frame_region = cairo_region_copy (region);
|
||||
priv->surface->paint_context = g_object_ref (context);
|
||||
|
||||
g_assert (priv->color_state == NULL);
|
||||
|
||||
GDK_DRAW_CONTEXT_GET_CLASS (context)->begin_frame (context,
|
||||
depth,
|
||||
priv->frame_region,
|
||||
&priv->color_state,
|
||||
&priv->depth);
|
||||
|
||||
/* the callback is meant to set them */
|
||||
/* The callback is meant to set them. Note that it does not return a ref */
|
||||
g_assert (priv->color_state != NULL);
|
||||
g_assert (priv->depth < GDK_N_DEPTHS);
|
||||
|
||||
@@ -420,6 +432,21 @@ region_get_pixels (cairo_region_t *region)
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
gdk_draw_context_end_frame_full (GdkDrawContext *context)
|
||||
{
|
||||
GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context);
|
||||
|
||||
GDK_DRAW_CONTEXT_GET_CLASS (context)->end_frame (context, priv->frame_region);
|
||||
|
||||
gdk_profiler_set_int_counter (pixels_counter, region_get_pixels (priv->frame_region));
|
||||
|
||||
priv->color_state = NULL;
|
||||
g_clear_pointer (&priv->frame_region, cairo_region_destroy);
|
||||
g_clear_object (&priv->surface->paint_context);
|
||||
priv->depth = GDK_N_DEPTHS;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_draw_context_end_frame:
|
||||
* @context: a `GdkDrawContext`
|
||||
@@ -432,6 +459,9 @@ region_get_pixels (cairo_region_t *region)
|
||||
* When using a [class@Gdk.GLContext], this function may call `glFlush()`
|
||||
* implicitly before returning; it is not recommended to call `glFlush()`
|
||||
* explicitly before calling this function.
|
||||
*
|
||||
* Deprecated: 4.16: Drawing directly to the surface is no longer recommended.
|
||||
* Use `GskRenderNode` and `GskRenderer`.
|
||||
*/
|
||||
void
|
||||
gdk_draw_context_end_frame (GdkDrawContext *context)
|
||||
@@ -459,14 +489,7 @@ gdk_draw_context_end_frame (GdkDrawContext *context)
|
||||
return;
|
||||
}
|
||||
|
||||
GDK_DRAW_CONTEXT_GET_CLASS (context)->end_frame (context, priv->frame_region);
|
||||
|
||||
gdk_profiler_set_int_counter (pixels_counter, region_get_pixels (priv->frame_region));
|
||||
|
||||
g_clear_pointer (&priv->color_state, gdk_color_state_unref);
|
||||
g_clear_pointer (&priv->frame_region, cairo_region_destroy);
|
||||
g_clear_object (&priv->surface->paint_context);
|
||||
priv->depth = GDK_N_DEPTHS;
|
||||
gdk_draw_context_end_frame_full (context);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -483,15 +506,24 @@ gdk_draw_context_end_frame (GdkDrawContext *context)
|
||||
* and [method@Gdk.DrawContext.end_frame], %NULL will be returned.
|
||||
*
|
||||
* Returns: (transfer none) (nullable): a Cairo region
|
||||
*
|
||||
* Deprecated: 4.16: Drawing directly to the surface is no longer recommended.
|
||||
* Use `GskRenderNode` and `GskRenderer`.
|
||||
*/
|
||||
const cairo_region_t *
|
||||
gdk_draw_context_get_frame_region (GdkDrawContext *context)
|
||||
_gdk_draw_context_get_frame_region (GdkDrawContext *context)
|
||||
{
|
||||
GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context);
|
||||
|
||||
return priv->frame_region;
|
||||
}
|
||||
|
||||
const cairo_region_t *
|
||||
(gdk_draw_context_get_frame_region) (GdkDrawContext *context)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DRAW_CONTEXT (context), NULL);
|
||||
|
||||
return priv->frame_region;
|
||||
return _gdk_draw_context_get_frame_region (context);
|
||||
}
|
||||
|
||||
/*<private>
|
||||
|
@@ -40,15 +40,15 @@ GdkDisplay * gdk_draw_context_get_display (GdkDrawContext
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkSurface * gdk_draw_context_get_surface (GdkDrawContext *context);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_4_16
|
||||
void gdk_draw_context_begin_frame (GdkDrawContext *context,
|
||||
const cairo_region_t *region);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_4_16
|
||||
void gdk_draw_context_end_frame (GdkDrawContext *context);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_4_16
|
||||
gboolean gdk_draw_context_is_in_frame (GdkDrawContext *context);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_4_16
|
||||
const cairo_region_t * gdk_draw_context_get_frame_region (GdkDrawContext *context);
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDrawContext, g_object_unref)
|
||||
|
@@ -25,6 +25,8 @@
|
||||
#include "gdkcolorstateprivate.h"
|
||||
#include "gdkmemoryformatprivate.h"
|
||||
|
||||
#include <graphene.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GDK_DRAW_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DRAW_CONTEXT, GdkDrawContextClass))
|
||||
@@ -57,10 +59,14 @@ void gdk_draw_context_surface_resized (GdkDrawContext
|
||||
|
||||
void gdk_draw_context_begin_frame_full (GdkDrawContext *context,
|
||||
GdkMemoryDepth depth,
|
||||
const cairo_region_t *region);
|
||||
const cairo_region_t *region,
|
||||
const graphene_rect_t *opaque);
|
||||
void gdk_draw_context_end_frame_full (GdkDrawContext *context);
|
||||
|
||||
void gdk_draw_context_empty_frame (GdkDrawContext *context);
|
||||
|
||||
#define gdk_draw_context_get_frame_region(...) _gdk_draw_context_get_frame_region(__VA_ARGS__)
|
||||
const cairo_region_t * _gdk_draw_context_get_frame_region (GdkDrawContext *self);
|
||||
GdkColorState * gdk_draw_context_get_color_state (GdkDrawContext *self);
|
||||
GdkMemoryDepth gdk_draw_context_get_depth (GdkDrawContext *self);
|
||||
|
||||
|
@@ -320,7 +320,7 @@ gdk_drop_class_init (GdkDropClass *klass)
|
||||
object_class->finalize = gdk_drop_finalize;
|
||||
|
||||
/**
|
||||
* GdkDrop:actions: (attributes org.gtk.Property.get=gdk_drop_get_actions)
|
||||
* GdkDrop:actions:
|
||||
*
|
||||
* The possible actions for this drop
|
||||
*/
|
||||
@@ -334,7 +334,7 @@ gdk_drop_class_init (GdkDropClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrop:device: (attributes org.gtk.Property.get=gdk_drop_get_device)
|
||||
* GdkDrop:device:
|
||||
*
|
||||
* The `GdkDevice` performing the drop
|
||||
*/
|
||||
@@ -347,7 +347,7 @@ gdk_drop_class_init (GdkDropClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrop:display: (attributes org.gtk.Property.get=gdk_drop_get_display)
|
||||
* GdkDrop:display:
|
||||
*
|
||||
* The `GdkDisplay` that the drop belongs to.
|
||||
*/
|
||||
@@ -359,7 +359,7 @@ gdk_drop_class_init (GdkDropClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrop:drag: (attributes org.gtk.Property.get=gdk_drop_get_drag)
|
||||
* GdkDrop:drag:
|
||||
*
|
||||
* The `GdkDrag` that initiated this drop
|
||||
*/
|
||||
@@ -372,7 +372,7 @@ gdk_drop_class_init (GdkDropClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrop:formats: (attributes org.gtk.Property.get=gdk_drop_get_formats)
|
||||
* GdkDrop:formats:
|
||||
*
|
||||
* The possible formats that the drop can provide its data in.
|
||||
*/
|
||||
@@ -385,7 +385,7 @@ gdk_drop_class_init (GdkDropClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkDrop:surface: (attributes org.gtk.Property.get=gdk_drop_get_surface)
|
||||
* GdkDrop:surface:
|
||||
*
|
||||
* The `GdkSurface` the drop happens on
|
||||
*/
|
||||
@@ -406,7 +406,7 @@ gdk_drop_init (GdkDrop *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drop_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_drop_get_display:
|
||||
* @self: a `GdkDrop`
|
||||
*
|
||||
* Gets the `GdkDisplay` that @self was created for.
|
||||
@@ -424,7 +424,7 @@ gdk_drop_get_display (GdkDrop *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drop_get_device: (attributes org.gtk.Method.get_property=device)
|
||||
* gdk_drop_get_device:
|
||||
* @self: a `GdkDrop`
|
||||
*
|
||||
* Returns the `GdkDevice` performing the drop.
|
||||
@@ -442,7 +442,7 @@ gdk_drop_get_device (GdkDrop *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drop_get_formats: (attributes org.gtk.Method.get_property=formats)
|
||||
* gdk_drop_get_formats:
|
||||
* @self: a `GdkDrop`
|
||||
*
|
||||
* Returns the `GdkContentFormats` that the drop offers the data
|
||||
@@ -461,7 +461,7 @@ gdk_drop_get_formats (GdkDrop *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drop_get_surface: (attributes org.gtk.Method.get_property=surface)
|
||||
* gdk_drop_get_surface:
|
||||
* @self: a `GdkDrop`
|
||||
*
|
||||
* Returns the `GdkSurface` performing the drop.
|
||||
@@ -479,7 +479,7 @@ gdk_drop_get_surface (GdkDrop *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drop_get_actions: (attributes org.gtk.Method.get_property=actions)
|
||||
* gdk_drop_get_actions:
|
||||
* @self: a `GdkDrop`
|
||||
*
|
||||
* Returns the possible actions for this `GdkDrop`.
|
||||
@@ -528,7 +528,7 @@ gdk_drop_set_actions (GdkDrop *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_drop_get_drag: (attributes org.gtk.Method.get_property=drag)
|
||||
* gdk_drop_get_drag:
|
||||
* @self: a `GdkDrop`
|
||||
*
|
||||
* If this is an in-app drag-and-drop operation, returns the `GdkDrag`
|
||||
|
@@ -978,9 +978,13 @@ gdk_event_get_axis (GdkEvent *event,
|
||||
* according to platform conventions.
|
||||
*
|
||||
* The right mouse button typically triggers context menus.
|
||||
* On macOS, Control+left mouse button also triggers.
|
||||
*
|
||||
* This function should always be used instead of simply checking for
|
||||
* event->button == %GDK_BUTTON_SECONDARY.
|
||||
*
|
||||
* ```c
|
||||
* event->button == GDK_BUTTON_SECONDARY
|
||||
* ```
|
||||
*
|
||||
* Returns: %TRUE if the event should trigger a context menu.
|
||||
*/
|
||||
@@ -998,6 +1002,13 @@ gdk_event_triggers_context_menu (GdkEvent *event)
|
||||
if (bevent->button == GDK_BUTTON_SECONDARY &&
|
||||
! (bevent->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK)))
|
||||
return TRUE;
|
||||
|
||||
#ifdef __APPLE__
|
||||
if (bevent->button == GDK_BUTTON_PRIMARY &&
|
||||
(bevent->state & GDK_CONTROL_MASK) &&
|
||||
! (bevent->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK)))
|
||||
return TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
@@ -122,6 +122,7 @@ struct _GdkGLContextPrivate
|
||||
GdkGLMemoryFlags memory_flags[GDK_MEMORY_N_FORMATS];
|
||||
|
||||
GdkGLFeatures features;
|
||||
guint surface_attached : 1;
|
||||
guint use_khr_debug : 1;
|
||||
guint has_debug_output : 1;
|
||||
guint extensions_checked : 1;
|
||||
@@ -717,8 +718,8 @@ gdk_gl_context_real_end_frame (GdkDrawContext *draw_context,
|
||||
cairo_region_get_rectangle (painted, i, &rect);
|
||||
rects[j++] = (int) floor (rect.x * scale);
|
||||
rects[j++] = (int) floor ((surface_height - rect.height - rect.y) * scale);
|
||||
rects[j++] = (int) ceil (rect.width * scale);
|
||||
rects[j++] = (int) ceil (rect.height * scale);
|
||||
rects[j++] = (int) ceil ((rect.x + rect.width) * scale) - floor (rect.x * scale);
|
||||
rects[j++] = (int) ceil ((surface_height - rect.y) * scale) - floor ((surface_height - rect.height - rect.y) * scale);
|
||||
}
|
||||
priv->eglSwapBuffersWithDamage (gdk_display_get_egl_display (display), egl_surface, rects, n_rects);
|
||||
g_free (heap_rects);
|
||||
@@ -763,7 +764,7 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
|
||||
draw_context_class->surface_resized = gdk_gl_context_surface_resized;
|
||||
|
||||
/**
|
||||
* GdkGLContext:shared-context: (attributes org.gtk.Property.get=gdk_gl_context_get_shared_context)
|
||||
* GdkGLContext:shared-context:
|
||||
*
|
||||
* Always %NULL
|
||||
*
|
||||
@@ -782,7 +783,7 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
|
||||
G_PARAM_DEPRECATED);
|
||||
|
||||
/**
|
||||
* GdkGLContext:allowed-apis: (attributes org.gtk.Property.get=gdk_gl_context_get_allowed_apis org.gtk.Property.gdk_gl_context_set_allowed_apis)
|
||||
* GdkGLContext:allowed-apis:
|
||||
*
|
||||
* The allowed APIs.
|
||||
*
|
||||
@@ -797,7 +798,7 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkGLContext:api: (attributes org.gtk.Property.get=gdk_gl_context_get_api)
|
||||
* GdkGLContext:api:
|
||||
*
|
||||
* The API currently in use.
|
||||
*
|
||||
@@ -829,20 +830,28 @@ gdk_gl_context_init (GdkGLContext *self)
|
||||
/* Must have called gdk_display_prepare_gl() before */
|
||||
GdkGLContext *
|
||||
gdk_gl_context_new (GdkDisplay *display,
|
||||
GdkSurface *surface)
|
||||
GdkSurface *surface,
|
||||
gboolean surface_attached)
|
||||
{
|
||||
GdkGLContext *shared;
|
||||
GdkGLContextPrivate *priv;
|
||||
GdkGLContext *shared, *result;
|
||||
|
||||
g_assert (surface == NULL || display == gdk_surface_get_display (surface));
|
||||
g_assert (!surface_attached || surface != NULL);
|
||||
|
||||
/* assert gdk_display_prepare_gl() had been called */
|
||||
shared = gdk_display_get_gl_context (display);
|
||||
g_assert (shared);
|
||||
|
||||
return g_object_new (G_OBJECT_TYPE (shared),
|
||||
"display", display,
|
||||
"surface", surface,
|
||||
NULL);
|
||||
result = g_object_new (G_OBJECT_TYPE (shared),
|
||||
"display", display,
|
||||
"surface", surface,
|
||||
NULL);
|
||||
|
||||
priv = gdk_gl_context_get_instance_private (result);
|
||||
priv->surface_attached = surface_attached;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1241,7 +1250,7 @@ gdk_gl_context_is_shared (GdkGLContext *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_context_set_allowed_apis: (attributes org.gtk.Method.set_property=allowed-apis)
|
||||
* gdk_gl_context_set_allowed_apis:
|
||||
* @self: a GL context
|
||||
* @apis: the allowed APIs
|
||||
*
|
||||
@@ -1272,7 +1281,7 @@ gdk_gl_context_set_allowed_apis (GdkGLContext *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_context_get_allowed_apis: (attributes org.gtk.Method.get_property=allowed-apis)
|
||||
* gdk_gl_context_get_allowed_apis:
|
||||
* @self: a GL context
|
||||
*
|
||||
* Gets the allowed APIs set via gdk_gl_context_set_allowed_apis().
|
||||
@@ -1292,7 +1301,7 @@ gdk_gl_context_get_allowed_apis (GdkGLContext *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_context_get_api: (attributes org.gtk.Method.get_property=api)
|
||||
* gdk_gl_context_get_api:
|
||||
* @self: a GL context
|
||||
*
|
||||
* Gets the API currently in use.
|
||||
@@ -1319,31 +1328,28 @@ gdk_gl_context_is_api_allowed (GdkGLContext *self,
|
||||
GError **error)
|
||||
{
|
||||
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (self);
|
||||
GdkDebugFlags flags;
|
||||
GdkGLAPI allowed_apis;
|
||||
|
||||
allowed_apis = priv->allowed_apis;
|
||||
|
||||
flags = gdk_display_get_debug_flags (gdk_gl_context_get_display (self));
|
||||
|
||||
if (flags & GDK_DEBUG_GL_DISABLE_GLES)
|
||||
if (!gdk_has_feature (GDK_FEATURE_GLES_API))
|
||||
{
|
||||
if (api == GDK_GL_API_GLES)
|
||||
{
|
||||
g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
_("OpenGL ES disabled via GDK_DEBUG"));
|
||||
_("OpenGL ES API disabled via GDK_DISABLE"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
allowed_apis &= ~GDK_GL_API_GLES;
|
||||
}
|
||||
|
||||
if (flags & GDK_DEBUG_GL_DISABLE_GL)
|
||||
if (!gdk_has_feature (GDK_FEATURE_GL_API))
|
||||
{
|
||||
if (api == GDK_GL_API_GL)
|
||||
{
|
||||
g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
_("OpenGL disabled via GDK_DEBUG"));
|
||||
_("OpenGL API disabled via GDK_DISABLE"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -1770,8 +1776,10 @@ gdk_gl_context_check_extensions (GdkGLContext *context)
|
||||
|
||||
supported_features = gdk_gl_context_check_features (context);
|
||||
disabled_features = gdk_parse_debug_var ("GDK_GL_DISABLE",
|
||||
gdk_gl_feature_keys,
|
||||
G_N_ELEMENTS (gdk_gl_feature_keys));
|
||||
"GDK_GL_DISABLE can be set to values which cause GDK to disable\n"
|
||||
"certain OpenGL extensions.\n",
|
||||
gdk_gl_feature_keys,
|
||||
G_N_ELEMENTS (gdk_gl_feature_keys));
|
||||
|
||||
priv->features = supported_features & ~disabled_features;
|
||||
|
||||
@@ -1825,12 +1833,22 @@ gdk_gl_context_check_is_current (GdkGLContext *context)
|
||||
void
|
||||
gdk_gl_context_make_current (GdkGLContext *context)
|
||||
{
|
||||
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
|
||||
MaskedContext *current, *masked_context;
|
||||
gboolean surfaceless;
|
||||
|
||||
g_return_if_fail (GDK_IS_GL_CONTEXT (context));
|
||||
|
||||
surfaceless = !gdk_draw_context_is_in_frame (GDK_DRAW_CONTEXT (context));
|
||||
if (priv->surface_attached)
|
||||
{
|
||||
surfaceless = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
surfaceless = !gdk_draw_context_is_in_frame (GDK_DRAW_CONTEXT (context));
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
}
|
||||
masked_context = mask_context (context, surfaceless);
|
||||
|
||||
current = g_private_get (&thread_current_context);
|
||||
@@ -1895,7 +1913,7 @@ gdk_gl_context_get_surface (GdkGLContext *context)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_context_get_shared_context: (attributes org.gtk.Method.get_property=shared-context)
|
||||
* gdk_gl_context_get_shared_context:
|
||||
* @context: a `GdkGLContext`
|
||||
*
|
||||
* Used to retrieves the `GdkGLContext` that this @context share data with.
|
||||
@@ -2019,8 +2037,11 @@ gdk_gl_context_clear_current (void)
|
||||
*
|
||||
* Does a gdk_gl_context_clear_current() if the current context is attached
|
||||
* to @surface, leaves the current context alone otherwise.
|
||||
*
|
||||
* Returns: (nullable) (transfer full): The context that was cleared, so that it can be
|
||||
* re-made current later
|
||||
**/
|
||||
void
|
||||
GdkGLContext *
|
||||
gdk_gl_context_clear_current_if_surface (GdkSurface *surface)
|
||||
{
|
||||
MaskedContext *current;
|
||||
@@ -2031,11 +2052,20 @@ gdk_gl_context_clear_current_if_surface (GdkSurface *surface)
|
||||
GdkGLContext *context = unmask_context (current);
|
||||
|
||||
if (gdk_gl_context_get_surface (context) != surface)
|
||||
return;
|
||||
return NULL;
|
||||
|
||||
g_object_ref (context);
|
||||
|
||||
if (GDK_GL_CONTEXT_GET_CLASS (context)->clear_current (context))
|
||||
g_private_replace (&thread_current_context, NULL);
|
||||
{
|
||||
g_private_replace (&thread_current_context, NULL);
|
||||
return context;
|
||||
}
|
||||
|
||||
g_object_unref (context);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2135,17 +2165,30 @@ gboolean
|
||||
gdk_gl_backend_can_be_used (GdkGLBackend backend_type,
|
||||
GError **error)
|
||||
{
|
||||
if (the_gl_backend_type == GDK_GL_NONE ||
|
||||
the_gl_backend_type == backend_type)
|
||||
return TRUE;
|
||||
if (the_gl_backend_type != GDK_GL_NONE &&
|
||||
the_gl_backend_type != backend_type)
|
||||
{
|
||||
g_set_error (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
/* translators: This is about OpenGL backend names, like
|
||||
* "Trying to use X11 GLX, but EGL is already in use"
|
||||
*/
|
||||
_("Trying to use %s, but %s is already in use"),
|
||||
gl_backend_names[backend_type],
|
||||
gl_backend_names[the_gl_backend_type]);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_set_error (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
/* translators: This is about OpenGL backend names, like
|
||||
* "Trying to use X11 GLX, but EGL is already in use" */
|
||||
_("Trying to use %s, but %s is already in use"),
|
||||
gl_backend_names[backend_type],
|
||||
gl_backend_names[the_gl_backend_type]);
|
||||
return FALSE;
|
||||
if ((backend_type == GDK_GL_EGL && !gdk_has_feature (GDK_FEATURE_EGL)) ||
|
||||
(backend_type == GDK_GL_GLX && !gdk_has_feature (GDK_FEATURE_GLX)) ||
|
||||
(backend_type == GDK_GL_WGL && !gdk_has_feature (GDK_FEATURE_WGL)))
|
||||
{
|
||||
g_set_error (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
_("Trying to use %s, but it is disabled via GDK_DISABLE"),
|
||||
gl_backend_names[backend_type]);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*<private>
|
||||
@@ -2174,6 +2217,7 @@ gdk_gl_backend_use (GdkGLBackend backend_type)
|
||||
g_assert (the_gl_backend_type == backend_type);
|
||||
}
|
||||
|
||||
#if defined(HAVE_EGL) && defined(HAVE_DMABUF)
|
||||
static guint
|
||||
gdk_gl_context_import_dmabuf_for_target (GdkGLContext *self,
|
||||
int width,
|
||||
@@ -2181,7 +2225,6 @@ gdk_gl_context_import_dmabuf_for_target (GdkGLContext *self,
|
||||
const GdkDmabuf *dmabuf,
|
||||
int target)
|
||||
{
|
||||
#if defined(HAVE_EGL) && defined(HAVE_DMABUF)
|
||||
GdkDisplay *display = gdk_gl_context_get_display (self);
|
||||
EGLImage image;
|
||||
guint texture_id;
|
||||
@@ -2203,10 +2246,8 @@ gdk_gl_context_import_dmabuf_for_target (GdkGLContext *self,
|
||||
eglDestroyImageKHR (gdk_display_get_egl_display (display), image);
|
||||
|
||||
return texture_id;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
guint
|
||||
gdk_gl_context_import_dmabuf (GdkGLContext *self,
|
||||
@@ -2215,10 +2256,11 @@ gdk_gl_context_import_dmabuf (GdkGLContext *self,
|
||||
const GdkDmabuf *dmabuf,
|
||||
gboolean *external)
|
||||
{
|
||||
#if defined(HAVE_EGL) && defined(HAVE_DMABUF)
|
||||
GdkDisplay *display = gdk_gl_context_get_display (self);
|
||||
guint texture_id;
|
||||
|
||||
gdk_display_init_dmabuf (display);
|
||||
gdk_dmabuf_egl_init (display);
|
||||
|
||||
if (gdk_dmabuf_formats_contains (display->egl_dmabuf_formats, dmabuf->fourcc, dmabuf->modifier))
|
||||
{
|
||||
@@ -2309,6 +2351,9 @@ gdk_gl_context_import_dmabuf (GdkGLContext *self,
|
||||
*external = target == GL_TEXTURE_EXTERNAL_OES;
|
||||
return texture_id;
|
||||
}
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@@ -120,10 +120,11 @@ gboolean gdk_gl_backend_can_be_used (GdkGLBackend
|
||||
GError **error);
|
||||
void gdk_gl_backend_use (GdkGLBackend backend_type);
|
||||
|
||||
void gdk_gl_context_clear_current_if_surface (GdkSurface *surface);
|
||||
GdkGLContext * gdk_gl_context_clear_current_if_surface (GdkSurface *surface) G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
||||
GdkGLContext * gdk_gl_context_new (GdkDisplay *display,
|
||||
GdkSurface *surface);
|
||||
GdkGLContext * gdk_gl_context_new (GdkDisplay *display,
|
||||
GdkSurface *surface,
|
||||
gboolean surface_attached);
|
||||
|
||||
gboolean gdk_gl_context_is_api_allowed (GdkGLContext *self,
|
||||
GdkGLAPI api,
|
||||
|
@@ -101,6 +101,10 @@ gdk_gl_texture_invoke_callback (gpointer data)
|
||||
context = gdk_display_get_gl_context (gdk_gl_context_get_display (invoke->self->context));
|
||||
|
||||
previous = gdk_gl_context_get_current ();
|
||||
|
||||
if (previous)
|
||||
g_object_ref (previous);
|
||||
|
||||
gdk_gl_context_make_current (context);
|
||||
|
||||
if (invoke->self->sync && context != invoke->self->context)
|
||||
@@ -113,9 +117,14 @@ gdk_gl_texture_invoke_callback (gpointer data)
|
||||
g_atomic_int_set (&invoke->spinlock, 1);
|
||||
|
||||
if (previous)
|
||||
gdk_gl_context_make_current (previous);
|
||||
{
|
||||
gdk_gl_context_make_current (previous);
|
||||
g_object_unref (previous);
|
||||
}
|
||||
else
|
||||
gdk_gl_context_clear_current ();
|
||||
{
|
||||
gdk_gl_context_clear_current ();
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@@ -225,7 +225,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
gobject_class->set_property = gdk_gl_texture_builder_set_property;
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:context: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_context org.gtk.Property.set=gdk_gl_texture_builder_set_context)
|
||||
* GdkGLTextureBuilder:context:
|
||||
*
|
||||
* The context owning the texture.
|
||||
*
|
||||
@@ -237,7 +237,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:format: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_format org.gtk.Property.set=gdk_gl_texture_builder_set_format)
|
||||
* GdkGLTextureBuilder:format:
|
||||
*
|
||||
* The format when downloading the texture.
|
||||
*
|
||||
@@ -250,7 +250,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:has-mipmap: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_has_mipmap org.gtk.Property.set=gdk_gl_texture_builder_set_has_mipmap)
|
||||
* GdkGLTextureBuilder:has-mipmap:
|
||||
*
|
||||
* If the texture has a mipmap.
|
||||
*
|
||||
@@ -262,7 +262,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:height: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_height org.gtk.Property.set=gdk_gl_texture_builder_set_height)
|
||||
* GdkGLTextureBuilder:height:
|
||||
*
|
||||
* The height of the texture.
|
||||
*
|
||||
@@ -274,7 +274,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:id: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_id org.gtk.Property.set=gdk_gl_texture_builder_set_id)
|
||||
* GdkGLTextureBuilder:id:
|
||||
*
|
||||
* The texture ID to use.
|
||||
*
|
||||
@@ -286,7 +286,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:sync: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_sync org.gtk.Property.set=gdk_gl_texture_builder_set_sync)
|
||||
* GdkGLTextureBuilder:sync:
|
||||
*
|
||||
* An optional `GLSync` object.
|
||||
*
|
||||
@@ -311,7 +311,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:update-region: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_update_region org.gtk.Property.set=gdk_gl_texture_builder_set_update_region)
|
||||
* GdkGLTextureBuilder:update-region:
|
||||
*
|
||||
* The update region for [property@Gdk.GLTextureBuilder:update-texture].
|
||||
*
|
||||
@@ -323,7 +323,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:update-texture: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_update_texture org.gtk.Property.set=gdk_gl_texture_builder_set_update_texture)
|
||||
* GdkGLTextureBuilder:update-texture:
|
||||
*
|
||||
* The texture [property@Gdk.GLTextureBuilder:update-region] is an update for.
|
||||
*
|
||||
@@ -335,7 +335,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkGLTextureBuilder:width: (attributes org.gtk.Property.get=gdk_gl_texture_builder_get_width org.gtk.Property.set=gdk_gl_texture_builder_set_width)
|
||||
* GdkGLTextureBuilder:width:
|
||||
*
|
||||
* The width of the texture.
|
||||
*
|
||||
@@ -372,7 +372,7 @@ gdk_gl_texture_builder_new (void)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_context: (attributes org.gtk.Method.get_property=context)
|
||||
* gdk_gl_texture_builder_get_context:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the context previously set via gdk_gl_texture_builder_set_context() or
|
||||
@@ -391,7 +391,7 @@ gdk_gl_texture_builder_get_context (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_context: (attributes org.gtk.Method.set_property=context)
|
||||
* gdk_gl_texture_builder_set_context:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @context: (nullable): The context the texture belongs to or %NULL to unset
|
||||
*
|
||||
@@ -416,7 +416,7 @@ gdk_gl_texture_builder_set_context (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_height: (attributes org.gtk.Method.get_property=height)
|
||||
* gdk_gl_texture_builder_get_height:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the height previously set via gdk_gl_texture_builder_set_height() or
|
||||
@@ -435,7 +435,7 @@ gdk_gl_texture_builder_get_height (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_height: (attributes org.gtk.Method.set_property=height)
|
||||
* gdk_gl_texture_builder_set_height:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @height: The texture's height or 0 to unset
|
||||
*
|
||||
@@ -460,7 +460,7 @@ gdk_gl_texture_builder_set_height (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_id: (attributes org.gtk.Method.get_property=id)
|
||||
* gdk_gl_texture_builder_get_id:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the texture id previously set via gdk_gl_texture_builder_set_id() or
|
||||
@@ -479,7 +479,7 @@ gdk_gl_texture_builder_get_id (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_id: (attributes org.gtk.Method.set_property=id)
|
||||
* gdk_gl_texture_builder_set_id:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @id: The texture id to be used for creating the texture
|
||||
*
|
||||
@@ -506,7 +506,7 @@ gdk_gl_texture_builder_set_id (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_width: (attributes org.gtk.Method.get_property=width)
|
||||
* gdk_gl_texture_builder_get_width:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the width previously set via gdk_gl_texture_builder_set_width() or
|
||||
@@ -525,7 +525,7 @@ gdk_gl_texture_builder_get_width (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_width: (attributes org.gtk.Method.set_property=width)
|
||||
* gdk_gl_texture_builder_set_width:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @width: The texture's width or 0 to unset
|
||||
*
|
||||
@@ -550,7 +550,7 @@ gdk_gl_texture_builder_set_width (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_has_mipmap: (attributes org.gtk.Method.get_property=has-mipmap)
|
||||
* gdk_gl_texture_builder_get_has_mipmap:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets whether the texture has a mipmap.
|
||||
@@ -568,7 +568,7 @@ gdk_gl_texture_builder_get_has_mipmap (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_has_mipmap: (attributes org.gtk.Method.set_property=has-mipmap)
|
||||
* gdk_gl_texture_builder_set_has_mipmap:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @has_mipmap: Whether the texture has a mipmap
|
||||
*
|
||||
@@ -594,7 +594,7 @@ gdk_gl_texture_builder_set_has_mipmap (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_sync: (attributes org.gtk.Method.get_property=sync)
|
||||
* gdk_gl_texture_builder_get_sync:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the `GLsync` previously set via gdk_gl_texture_builder_set_sync().
|
||||
@@ -612,7 +612,7 @@ gdk_gl_texture_builder_get_sync (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_sync: (attributes org.gtk.Method.set_property=sync)
|
||||
* gdk_gl_texture_builder_set_sync:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @sync: (nullable): the GLSync object
|
||||
*
|
||||
@@ -642,7 +642,7 @@ gdk_gl_texture_builder_set_sync (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_color_state: (attributes org.gtk.Method.get_property=color-state)
|
||||
* gdk_gl_texture_builder_get_color_state:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the color state previously set via gdk_gl_texture_builder_set_color_state().
|
||||
@@ -660,7 +660,7 @@ gdk_gl_texture_builder_get_color_state (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_color_state: (attributes org.gtk.Method.set_property=color-state)
|
||||
* gdk_gl_texture_builder_set_color_state:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @color_state: a `GdkColorState`
|
||||
*
|
||||
@@ -687,7 +687,7 @@ gdk_gl_texture_builder_set_color_state (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_format: (attributes org.gtk.Method.get_property=format)
|
||||
* gdk_gl_texture_builder_get_format:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the format previously set via gdk_gl_texture_builder_set_format().
|
||||
@@ -705,7 +705,7 @@ gdk_gl_texture_builder_get_format (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_format: (attributes org.gtk.Method.set_property=format)
|
||||
* gdk_gl_texture_builder_set_format:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @format: The texture's format
|
||||
*
|
||||
@@ -743,7 +743,7 @@ gdk_gl_texture_builder_set_format (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_update_texture: (attributes org.gtk.Method.get_property=update-texture)
|
||||
* gdk_gl_texture_builder_get_update_texture:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the texture previously set via gdk_gl_texture_builder_set_update_texture() or
|
||||
@@ -762,7 +762,7 @@ gdk_gl_texture_builder_get_update_texture (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_update_texture: (attributes org.gtk.Method.set_property=update-texture)
|
||||
* gdk_gl_texture_builder_set_update_texture:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @texture: (nullable): the texture to update
|
||||
*
|
||||
@@ -785,7 +785,7 @@ gdk_gl_texture_builder_set_update_texture (GdkGLTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_get_update_region: (attributes org.gtk.Method.get_property=update-region)
|
||||
* gdk_gl_texture_builder_get_update_region:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
*
|
||||
* Gets the region previously set via gdk_gl_texture_builder_set_update_region() or
|
||||
@@ -804,7 +804,7 @@ gdk_gl_texture_builder_get_update_region (GdkGLTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_texture_builder_set_update_region: (attributes org.gtk.Method.set_property=update-region)
|
||||
* gdk_gl_texture_builder_set_update_region:
|
||||
* @self: a `GdkGLTextureBuilder`
|
||||
* @region: (nullable): the region to update
|
||||
*
|
||||
|
@@ -96,8 +96,7 @@ print OUT_GDKKEYSYMS<<EOF;
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_KEYSYMS_H__
|
||||
#define __GDK_KEYSYMS_H__
|
||||
#pragma once
|
||||
|
||||
|
||||
EOF
|
||||
@@ -165,8 +164,6 @@ close IN_XF86KEYSYM;
|
||||
|
||||
|
||||
print OUT_GDKKEYSYMS<<EOF;
|
||||
|
||||
#endif /* __GDK_KEYSYMS_H__ */
|
||||
EOF
|
||||
|
||||
printf "We just finished converting keysymdef.h to gdkkeysyms.h\nThank you\n";
|
||||
|
@@ -297,8 +297,11 @@
|
||||
#define GDK_KEY_dead_u 0xfe88
|
||||
#define GDK_KEY_dead_U 0xfe89
|
||||
#define GDK_KEY_dead_small_schwa 0xfe8a
|
||||
#define GDK_KEY_dead_schwa 0xfe8a
|
||||
#define GDK_KEY_dead_capital_schwa 0xfe8b
|
||||
#define GDK_KEY_dead_SCHWA 0xfe8b
|
||||
#define GDK_KEY_dead_greek 0xfe8c
|
||||
#define GDK_KEY_dead_hamza 0xfe8d
|
||||
#define GDK_KEY_First_Virtual_Screen 0xfed0
|
||||
#define GDK_KEY_Prev_Virtual_Screen 0xfed1
|
||||
#define GDK_KEY_Next_Virtual_Screen 0xfed2
|
||||
@@ -490,6 +493,7 @@
|
||||
#define GDK_KEY_copyright 0x0a9
|
||||
#define GDK_KEY_ordfeminine 0x0aa
|
||||
#define GDK_KEY_guillemotleft 0x0ab
|
||||
#define GDK_KEY_guillemetleft 0x0ab
|
||||
#define GDK_KEY_notsign 0x0ac
|
||||
#define GDK_KEY_hyphen 0x0ad
|
||||
#define GDK_KEY_registered 0x0ae
|
||||
@@ -505,7 +509,9 @@
|
||||
#define GDK_KEY_cedilla 0x0b8
|
||||
#define GDK_KEY_onesuperior 0x0b9
|
||||
#define GDK_KEY_masculine 0x0ba
|
||||
#define GDK_KEY_ordmasculine 0x0ba
|
||||
#define GDK_KEY_guillemotright 0x0bb
|
||||
#define GDK_KEY_guillemetright 0x0bb
|
||||
#define GDK_KEY_onequarter 0x0bc
|
||||
#define GDK_KEY_onehalf 0x0bd
|
||||
#define GDK_KEY_threequarters 0x0be
|
||||
@@ -1743,6 +1749,11 @@
|
||||
#define GDK_KEY_ohorn 0x10001a1
|
||||
#define GDK_KEY_Uhorn 0x10001af
|
||||
#define GDK_KEY_uhorn 0x10001b0
|
||||
#define GDK_KEY_combining_tilde 0x1000303
|
||||
#define GDK_KEY_combining_grave 0x1000300
|
||||
#define GDK_KEY_combining_acute 0x1000301
|
||||
#define GDK_KEY_combining_hook 0x1000309
|
||||
#define GDK_KEY_combining_belowdot 0x1000323
|
||||
#define GDK_KEY_EcuSign 0x10020a0
|
||||
#define GDK_KEY_ColonSign 0x10020a1
|
||||
#define GDK_KEY_CruzeiroSign 0x10020a2
|
||||
@@ -2313,4 +2324,3 @@
|
||||
#define GDK_KEY_Prev_VMode 0x1008fe23
|
||||
#define GDK_KEY_LogWindowTree 0x1008fe24
|
||||
#define GDK_KEY_LogGrabInfo 0x1008fe25
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -66,6 +66,7 @@ GdkMemoryDepth gdk_memory_depth_merge (GdkMemoryDepth
|
||||
GdkMemoryDepth depth2) G_GNUC_CONST;
|
||||
GdkMemoryFormat gdk_memory_depth_get_format (GdkMemoryDepth depth) G_GNUC_CONST;
|
||||
GdkMemoryFormat gdk_memory_depth_get_alpha_format (GdkMemoryDepth depth) G_GNUC_CONST;
|
||||
const char * gdk_memory_depth_get_name (GdkMemoryDepth depth);
|
||||
void gdk_memory_format_gl_format (GdkMemoryFormat format,
|
||||
gboolean gles,
|
||||
GLint *out_internal_format,
|
||||
@@ -109,6 +110,16 @@ void gdk_memory_convert_color_state (guchar
|
||||
GdkColorState *dest_color_state,
|
||||
gsize width,
|
||||
gsize height);
|
||||
void gdk_memory_mipmap (guchar *dest,
|
||||
gsize dest_stride,
|
||||
GdkMemoryFormat dest_format,
|
||||
const guchar *src,
|
||||
gsize src_stride,
|
||||
GdkMemoryFormat src_format,
|
||||
gsize src_width,
|
||||
gsize src_height,
|
||||
guint lod_level,
|
||||
gboolean linear);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -111,7 +111,7 @@ gdk_memory_sanitize (GBytes *bytes,
|
||||
stride % align == 0)
|
||||
{
|
||||
*out_stride = stride;
|
||||
return g_bytes_ref (bytes);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
bpp = gdk_memory_format_bytes_per_pixel (format);
|
||||
@@ -122,6 +122,8 @@ gdk_memory_sanitize (GBytes *bytes,
|
||||
for (y = 0; y < height; y++)
|
||||
memcpy (copy + y * copy_stride, data + y * stride, bpp * width);
|
||||
|
||||
g_bytes_unref (bytes);
|
||||
|
||||
*out_stride = copy_stride;
|
||||
return g_bytes_new_take (copy, copy_stride * height);
|
||||
}
|
||||
@@ -197,7 +199,7 @@ gdk_memory_texture_new (int width,
|
||||
/* needs to be this complex to support subtexture of the bottom right part */
|
||||
g_return_val_if_fail (g_bytes_get_size (bytes) >= gdk_memory_format_min_buffer_size (format, stride, width, height), NULL);
|
||||
|
||||
bytes = gdk_memory_sanitize (bytes, width, height, format, stride, &stride);
|
||||
bytes = gdk_memory_sanitize (g_bytes_ref (bytes), width, height, format, stride, &stride);
|
||||
|
||||
self = g_object_new (GDK_TYPE_MEMORY_TEXTURE,
|
||||
"width", width,
|
||||
|
@@ -348,7 +348,7 @@ gdk_memory_texture_builder_get_bytes (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_bytes: (attributes org.gtk.Method.set_property=bytes)
|
||||
* gdk_memory_texture_builder_set_bytes:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @bytes: (nullable): The bytes the texture shows or %NULL to unset
|
||||
*
|
||||
@@ -377,7 +377,7 @@ gdk_memory_texture_builder_set_bytes (GdkMemoryTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_color_state: (attributes org.gtk.Method.get_property=color-state)
|
||||
* gdk_memory_texture_builder_get_color_state:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
*
|
||||
* Gets the colorstate previously set via gdk_memory_texture_builder_set_color_state().
|
||||
@@ -395,7 +395,7 @@ gdk_memory_texture_builder_get_color_state (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_color_state: (attributes org.gtk.Method.set_property=color-state)
|
||||
* gdk_memory_texture_builder_set_color_state:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @color_state: (nullable): The colorstate describing the data
|
||||
*
|
||||
@@ -425,7 +425,7 @@ gdk_memory_texture_builder_set_color_state (GdkMemoryTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_height: (attributes org.gtk.Method.get_property=height)
|
||||
* gdk_memory_texture_builder_get_height:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
*
|
||||
* Gets the height previously set via gdk_memory_texture_builder_set_height()
|
||||
@@ -444,7 +444,7 @@ gdk_memory_texture_builder_get_height (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_height: (attributes org.gtk.Method.set_property=height)
|
||||
* gdk_memory_texture_builder_set_height:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @height: The texture's height or 0 to unset
|
||||
*
|
||||
@@ -469,7 +469,7 @@ gdk_memory_texture_builder_set_height (GdkMemoryTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_width: (attributes org.gtk.Method.get_property=width)
|
||||
* gdk_memory_texture_builder_get_width:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
*
|
||||
* Gets the width previously set via gdk_memory_texture_builder_set_width()
|
||||
@@ -488,7 +488,7 @@ gdk_memory_texture_builder_get_width (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_width: (attributes org.gtk.Method.set_property=width)
|
||||
* gdk_memory_texture_builder_set_width:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @width: The texture's width or 0 to unset
|
||||
*
|
||||
@@ -512,7 +512,6 @@ gdk_memory_texture_builder_set_width (GdkMemoryTextureBuilder *self,
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_WIDTH]);
|
||||
}
|
||||
|
||||
/* gdk_memory_texture_builder_get_stride: (attributes org.gtk.Method.get_property=stride) */
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_stride:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
@@ -531,7 +530,6 @@ gdk_memory_texture_builder_get_stride (GdkMemoryTextureBuilder *self)
|
||||
return self->stride;
|
||||
}
|
||||
|
||||
/* gdk_memory_texture_builder_set_stride: (attributes org.gtk.Method.set_property=stride) */
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_stride:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
@@ -558,7 +556,7 @@ gdk_memory_texture_builder_set_stride (GdkMemoryTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_format: (attributes org.gtk.Method.get_property=format)
|
||||
* gdk_memory_texture_builder_get_format:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
*
|
||||
* Gets the format previously set via gdk_memory_texture_builder_set_format().
|
||||
@@ -576,7 +574,7 @@ gdk_memory_texture_builder_get_format (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_format: (attributes org.gtk.Method.set_property=format)
|
||||
* gdk_memory_texture_builder_set_format:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @format: The texture's format
|
||||
*
|
||||
@@ -601,7 +599,7 @@ gdk_memory_texture_builder_set_format (GdkMemoryTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_update_texture: (attributes org.gtk.Method.get_property=update-texture)
|
||||
* gdk_memory_texture_builder_get_update_texture:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
*
|
||||
* Gets the texture previously set via gdk_memory_texture_builder_set_update_texture()
|
||||
@@ -620,7 +618,7 @@ gdk_memory_texture_builder_get_update_texture (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_update_texture: (attributes org.gtk.Method.set_property=update-texture)
|
||||
* gdk_memory_texture_builder_set_update_texture:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @texture: (nullable): the texture to update
|
||||
*
|
||||
@@ -644,7 +642,7 @@ gdk_memory_texture_builder_set_update_texture (GdkMemoryTextureBuilder *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_get_update_region: (attributes org.gtk.Method.get_property=update-region)
|
||||
* gdk_memory_texture_builder_get_update_region:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
*
|
||||
* Gets the region previously set via gdk_memory_texture_builder_set_update_region()
|
||||
@@ -663,7 +661,7 @@ gdk_memory_texture_builder_get_update_region (GdkMemoryTextureBuilder *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_memory_texture_builder_set_update_region: (attributes org.gtk.Method.set_property=update-region)
|
||||
* gdk_memory_texture_builder_set_update_region:
|
||||
* @self: a `GdkMemoryTextureBuilder`
|
||||
* @region: (nullable): the region to update
|
||||
*
|
||||
|
@@ -187,7 +187,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
object_class->set_property = gdk_monitor_set_property;
|
||||
|
||||
/**
|
||||
* GdkMonitor:description: (attributes org.gtk.Property.get=gdk_monitor_get_description)
|
||||
* GdkMonitor:description:
|
||||
*
|
||||
* A short description of the monitor, meant for display to the user.
|
||||
*
|
||||
@@ -199,7 +199,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:display: (attributes org.gtk.Property.get=gdk_monitor_get_display)
|
||||
* GdkMonitor:display:
|
||||
*
|
||||
* The `GdkDisplay` of the monitor.
|
||||
*/
|
||||
@@ -209,7 +209,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:manufacturer: (attributes org.gtk.Property.get=gdk_monitor_get_manufacturer)
|
||||
* GdkMonitor:manufacturer:
|
||||
*
|
||||
* The manufacturer name.
|
||||
*/
|
||||
@@ -219,7 +219,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:model: (attributes org.gtk.Property.get=gdk_monitor_get_model)
|
||||
* GdkMonitor:model:
|
||||
*
|
||||
* The model name.
|
||||
*/
|
||||
@@ -229,7 +229,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:connector: (attributes org.gtk.Property.get=gdk_monitor_get_connector)
|
||||
* GdkMonitor:connector:
|
||||
*
|
||||
* The connector name.
|
||||
*/
|
||||
@@ -239,7 +239,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:scale-factor: (attributes org.gtk.Property.get=gdk_monitor_get_scale_factor)
|
||||
* GdkMonitor:scale-factor:
|
||||
*
|
||||
* The scale factor.
|
||||
*
|
||||
@@ -253,7 +253,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:scale: (attributes org.gtk.Property.get=gdk_monitor_get_scale)
|
||||
* GdkMonitor:scale:
|
||||
*
|
||||
* The scale of the monitor.
|
||||
*
|
||||
@@ -265,7 +265,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:geometry: (attributes org.gtk.Property.get=gdk_monitor_get_geometry)
|
||||
* GdkMonitor:geometry:
|
||||
*
|
||||
* The geometry of the monitor.
|
||||
*/
|
||||
@@ -275,7 +275,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:width-mm: (attributes org.gtk.Property.get=gdk_monitor_get_width_mm)
|
||||
* GdkMonitor:width-mm:
|
||||
*
|
||||
* The width of the monitor, in millimeters.
|
||||
*/
|
||||
@@ -286,7 +286,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:height-mm: (attributes org.gtk.Property.get=gdk_monitor_get_height_mm)
|
||||
* GdkMonitor:height-mm:
|
||||
*
|
||||
* The height of the monitor, in millimeters.
|
||||
*/
|
||||
@@ -297,7 +297,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:refresh-rate: (attributes org.gtk.Property.get=gdk_monitor_get_refresh_rate)
|
||||
* GdkMonitor:refresh-rate:
|
||||
*
|
||||
* The refresh rate, in milli-Hertz.
|
||||
*/
|
||||
@@ -308,7 +308,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:subpixel-layout: (attributes org.gtk.Property.get=gdk_monitor_get_subpixel_layout)
|
||||
* GdkMonitor:subpixel-layout:
|
||||
*
|
||||
* The subpixel layout.
|
||||
*/
|
||||
@@ -319,7 +319,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkMonitor:valid: (attributes org.gtk.Property.get=gdk_monitor_is_valid)
|
||||
* GdkMonitor:valid: (getter is_valid)
|
||||
*
|
||||
* Whether the object is still valid.
|
||||
*/
|
||||
@@ -346,7 +346,7 @@ gdk_monitor_class_init (GdkMonitorClass *class)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_monitor_get_display:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the display that this monitor belongs to.
|
||||
@@ -362,7 +362,7 @@ gdk_monitor_get_display (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_geometry: (attributes org.gtk.Method.get_property=geometry)
|
||||
* gdk_monitor_get_geometry:
|
||||
* @monitor: a `GdkMonitor`
|
||||
* @geometry: (out): a `GdkRectangle` to be filled with the monitor geometry
|
||||
*
|
||||
@@ -383,7 +383,7 @@ gdk_monitor_get_geometry (GdkMonitor *monitor,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_width_mm: (attributes org.gtk.Method.get_property=width-mm)
|
||||
* gdk_monitor_get_width_mm:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the width in millimeters of the monitor.
|
||||
@@ -399,7 +399,7 @@ gdk_monitor_get_width_mm (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_height_mm: (attributes org.gtk.Method.get_property=height-mm)
|
||||
* gdk_monitor_get_height_mm:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the height in millimeters of the monitor.
|
||||
@@ -415,7 +415,7 @@ gdk_monitor_get_height_mm (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_connector: (attributes org.gtk.Method.get_property=connector)
|
||||
* gdk_monitor_get_connector:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the name of the monitor's connector, if available.
|
||||
@@ -435,7 +435,7 @@ gdk_monitor_get_connector (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_manufacturer: (attributes org.gtk.Method.get_property=manufacturer)
|
||||
* gdk_monitor_get_manufacturer:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the name or PNP ID of the monitor's manufacturer.
|
||||
@@ -457,7 +457,7 @@ gdk_monitor_get_manufacturer (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_model: (attributes org.gtk.Method.get_property=model)
|
||||
* gdk_monitor_get_model:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the string identifying the monitor model, if available.
|
||||
@@ -473,7 +473,7 @@ gdk_monitor_get_model (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_scale_factor: (attributes org.gtk.Method.get_property=scale-factor)
|
||||
* gdk_monitor_get_scale_factor:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the internal scale factor that maps from monitor coordinates
|
||||
@@ -497,7 +497,7 @@ gdk_monitor_get_scale_factor (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_scale: (attributes org.gtk.Method.get_property=scale)
|
||||
* gdk_monitor_get_scale:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the internal scale factor that maps from monitor coordinates
|
||||
@@ -520,7 +520,7 @@ gdk_monitor_get_scale (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_refresh_rate: (attributes org.gtk.Method.get_property=refresh-rate)
|
||||
* gdk_monitor_get_refresh_rate:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets the refresh rate of the monitor, if available.
|
||||
@@ -539,7 +539,7 @@ gdk_monitor_get_refresh_rate (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_subpixel_layout: (attributes org.gtk.Method.get_property=subpixel-layout)
|
||||
* gdk_monitor_get_subpixel_layout:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets information about the layout of red, green and blue
|
||||
@@ -649,7 +649,7 @@ void
|
||||
gdk_monitor_set_scale (GdkMonitor *monitor,
|
||||
double scale)
|
||||
{
|
||||
g_return_if_fail (scale >= 1.);
|
||||
g_return_if_fail (scale > 0.);
|
||||
|
||||
monitor->scale_set = TRUE;
|
||||
|
||||
@@ -696,7 +696,7 @@ gdk_monitor_invalidate (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_is_valid: (attributes org.gtk.Method.get_property=valid)
|
||||
* gdk_monitor_is_valid: (get-property valid)
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Returns %TRUE if the @monitor object corresponds to a
|
||||
@@ -716,7 +716,7 @@ gdk_monitor_is_valid (GdkMonitor *monitor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_monitor_get_description: (attributes org.gtk.Method.get_property=description)
|
||||
* gdk_monitor_get_description:
|
||||
* @monitor: a `GdkMonitor`
|
||||
*
|
||||
* Gets a string describing the monitor, if available.
|
||||
|
86
gdk/gdkparalleltask.c
Normal file
86
gdk/gdkparalleltask.c
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright © 2024 Benjamin Otte
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Authors: Benjamin Otte <otte@gnome.org>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkparalleltaskprivate.h"
|
||||
|
||||
typedef struct _TaskData TaskData;
|
||||
|
||||
struct _TaskData
|
||||
{
|
||||
GdkTaskFunc task_func;
|
||||
gpointer task_data;
|
||||
int n_running_tasks;
|
||||
};
|
||||
|
||||
static void
|
||||
gdk_parallel_task_thread_func (gpointer data,
|
||||
gpointer unused)
|
||||
{
|
||||
TaskData *task = data;
|
||||
|
||||
task->task_func (task->task_data);
|
||||
|
||||
g_atomic_int_add (&task->n_running_tasks, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_parallel_task_run:
|
||||
* @task_func: the function to spawn
|
||||
* @task_data: data to pass to the function
|
||||
*
|
||||
* Spawns the given function in many threads.
|
||||
* Once all functions have exited, this function returns.
|
||||
**/
|
||||
void
|
||||
gdk_parallel_task_run (GdkTaskFunc task_func,
|
||||
gpointer task_data)
|
||||
{
|
||||
static GThreadPool *pool;
|
||||
TaskData task = {
|
||||
.task_func = task_func,
|
||||
.task_data = task_data,
|
||||
};
|
||||
int i, n_tasks;
|
||||
|
||||
if (g_once_init_enter (&pool))
|
||||
{
|
||||
GThreadPool *the_pool = g_thread_pool_new (gdk_parallel_task_thread_func,
|
||||
NULL,
|
||||
MAX (2, g_get_num_processors ()) - 1,
|
||||
FALSE,
|
||||
NULL);
|
||||
g_once_init_leave (&pool, the_pool);
|
||||
}
|
||||
|
||||
n_tasks = g_get_num_processors ();
|
||||
task.n_running_tasks = n_tasks;
|
||||
/* Start with 1 because we run 1 task ourselves */
|
||||
for (i = 1; i < n_tasks; i++)
|
||||
{
|
||||
g_thread_pool_push (pool, &task, NULL);
|
||||
}
|
||||
|
||||
gdk_parallel_task_thread_func (&task, NULL);
|
||||
|
||||
while (g_atomic_int_get (&task.n_running_tasks) > 0)
|
||||
g_thread_yield ();
|
||||
}
|
||||
|
32
gdk/gdkparalleltaskprivate.h
Normal file
32
gdk/gdkparalleltaskprivate.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright © 2024 Benjamin Otte
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Authors: Benjamin Otte <otte@gnome.org>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef void (* GdkTaskFunc) (gpointer user_data);
|
||||
|
||||
void gdk_parallel_task_run (GdkTaskFunc task_func,
|
||||
gpointer task_data);
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -80,7 +80,7 @@ gdk_popup_default_init (GdkPopupInterface *iface)
|
||||
iface->get_position_y = gdk_popup_default_get_position_y;
|
||||
|
||||
/**
|
||||
* GdkPopup:parent: (attributes org.gtk.Property.get=gdk_popup_get_parent)
|
||||
* GdkPopup:parent:
|
||||
*
|
||||
* The parent surface.
|
||||
*/
|
||||
@@ -90,7 +90,7 @@ gdk_popup_default_init (GdkPopupInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GdkPopup:autohide: (attributes org.gtk.Property.get=gdk_popup_get_autohide)
|
||||
* GdkPopup:autohide:
|
||||
*
|
||||
* Whether to hide on outside clicks.
|
||||
*/
|
||||
@@ -178,7 +178,7 @@ gdk_popup_get_rect_anchor (GdkPopup *popup)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_popup_get_parent: (attributes org.gtk.Method.get_property=parent)
|
||||
* gdk_popup_get_parent:
|
||||
* @popup: a `GdkPopup`
|
||||
*
|
||||
* Returns the parent surface of a popup.
|
||||
@@ -233,7 +233,7 @@ gdk_popup_get_position_y (GdkPopup *popup)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_popup_get_autohide: (attributes org.gtk.Method.get_property=autohide)
|
||||
* gdk_popup_get_autohide:
|
||||
* @popup: a `GdkPopup`
|
||||
*
|
||||
* Returns whether this popup is set to hide on outside clicks.
|
||||
|
@@ -52,6 +52,16 @@ gdk_rectangle_transform_affine (const GdkRectangle *src,
|
||||
dest->height = ceilf (MAX (y1, y2)) - dest->y;
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
gdk_rectangle_contains (const GdkRectangle *rect,
|
||||
const GdkRectangle *contained)
|
||||
{
|
||||
return contained->x >= rect->x
|
||||
&& contained->y >= rect->y
|
||||
&& contained->x + contained->width <= rect->x + rect->width
|
||||
&& contained->y + contained->height <= rect->y + rect->height;
|
||||
}
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@@ -179,7 +179,7 @@ gdk_seat_class_init (GdkSeatClass *klass)
|
||||
GDK_TYPE_DEVICE_TOOL);
|
||||
|
||||
/**
|
||||
* GdkSeat:display: (attributes org.gtk.Property.get=gdk_seat_get_display)
|
||||
* GdkSeat:display:
|
||||
*
|
||||
* `GdkDisplay` of this seat.
|
||||
*/
|
||||
@@ -390,7 +390,7 @@ gdk_seat_device_removed (GdkSeat *seat,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_seat_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_seat_get_display:
|
||||
* @seat: a `GdkSeat`
|
||||
*
|
||||
* Returns the `GdkDisplay` this seat belongs to.
|
||||
|
@@ -167,6 +167,12 @@ gdk_subsurface_attach (GdkSubsurface *subsurface,
|
||||
g_return_val_if_fail (sibling == NULL || GDK_IS_SUBSURFACE (sibling), FALSE);
|
||||
g_return_val_if_fail (sibling == NULL || sibling->parent == subsurface->parent, FALSE);
|
||||
|
||||
/* if the texture fully covers the background, ignore it */
|
||||
if (background &&
|
||||
gsk_rect_contains_rect (dest, background) &&
|
||||
gdk_memory_format_alpha (gdk_texture_get_format (texture)) == GDK_MEMORY_ALPHA_OPAQUE)
|
||||
background = NULL;
|
||||
|
||||
result = GDK_SUBSURFACE_GET_CLASS (subsurface)->attach (subsurface,
|
||||
texture,
|
||||
source,
|
||||
|
185
gdk/gdksurface.c
185
gdk/gdksurface.c
@@ -40,11 +40,13 @@
|
||||
#include <glib/gi18n-lib.h>
|
||||
#include "gdkmarshalers.h"
|
||||
#include "gdkpopupprivate.h"
|
||||
#include "gdkrectangle.h"
|
||||
#include "gdkrectangleprivate.h"
|
||||
#include "gdktoplevelprivate.h"
|
||||
#include "gdkvulkancontext.h"
|
||||
#include "gdksubsurfaceprivate.h"
|
||||
|
||||
#include "gsk/gskrectprivate.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#ifdef HAVE_EGL
|
||||
@@ -75,6 +77,9 @@ struct _GdkSurfacePrivate
|
||||
GdkMemoryDepth egl_surface_depth;
|
||||
#endif
|
||||
|
||||
cairo_region_t *opaque_region;
|
||||
cairo_rectangle_int_t opaque_rect; /* This is different from the region */
|
||||
|
||||
gpointer widget;
|
||||
|
||||
GdkColorState *color_state;
|
||||
@@ -510,6 +515,12 @@ gdk_surface_real_create_subsurface (GdkSurface *surface)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_surface_default_set_opaque_region (GdkSurface *surface,
|
||||
cairo_region_t *region)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_surface_constructed (GObject *object)
|
||||
{
|
||||
@@ -533,9 +544,10 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
klass->beep = gdk_surface_real_beep;
|
||||
klass->get_scale = gdk_surface_real_get_scale;
|
||||
klass->create_subsurface = gdk_surface_real_create_subsurface;
|
||||
klass->set_opaque_region = gdk_surface_default_set_opaque_region;
|
||||
|
||||
/**
|
||||
* GdkSurface:cursor: (attributes org.gtk.Property.get=gdk_surface_get_cursor org.gtk.Property.set=gdk_surface_set_cursor)
|
||||
* GdkSurface:cursor:
|
||||
*
|
||||
* The mouse pointer for the `GdkSurface`.
|
||||
*/
|
||||
@@ -545,7 +557,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:display: (attributes org.gtk.Property.get=gdk_surface_get_display)
|
||||
* GdkSurface:display:
|
||||
*
|
||||
* The `GdkDisplay` connection of the surface.
|
||||
*/
|
||||
@@ -555,7 +567,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:frame-clock: (attributes org.gtk.Property.get=gdk_surface_get_frame_clock)
|
||||
* GdkSurface:frame-clock:
|
||||
*
|
||||
* The `GdkFrameClock` of the surface.
|
||||
*/
|
||||
@@ -565,7 +577,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:mapped: (attributes org.gtk.Property.get=gdk_surface_get_mapped)
|
||||
* GdkSurface:mapped:
|
||||
*
|
||||
* Whether the surface is mapped.
|
||||
*/
|
||||
@@ -575,7 +587,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:width: (attributes org.gtk.Property.get=gdk_surface_get_width)
|
||||
* GdkSurface:width:
|
||||
*
|
||||
* The width of the surface in pixels.
|
||||
*/
|
||||
@@ -585,7 +597,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:height: (attributes org.gtk.Property.get=gdk_surface_get_height)
|
||||
* GdkSurface:height:
|
||||
*
|
||||
* The height of the surface, in pixels.
|
||||
*/
|
||||
@@ -595,7 +607,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:scale-factor: (attributes org.gtk.Property.get=gdk_surface_get_scale_factor)
|
||||
* GdkSurface:scale-factor:
|
||||
*
|
||||
* The scale factor of the surface.
|
||||
*
|
||||
@@ -608,7 +620,7 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* GdkSurface:scale: (attributes org.gtk.Property.get=gdk_surface_get_scale)
|
||||
* GdkSurface:scale:
|
||||
*
|
||||
* The scale of the surface.
|
||||
*
|
||||
@@ -771,7 +783,7 @@ gdk_surface_finalize (GObject *object)
|
||||
|
||||
g_clear_object (&surface->display);
|
||||
|
||||
g_clear_pointer (&surface->opaque_region, cairo_region_destroy);
|
||||
g_clear_pointer (&priv->opaque_region, cairo_region_destroy);
|
||||
|
||||
if (surface->parent)
|
||||
surface->parent->children = g_list_remove (surface->parent->children, surface);
|
||||
@@ -1071,7 +1083,7 @@ gdk_surface_get_widget (GdkSurface *self)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_display: (attributes org.gtk.Method.get_property=display)
|
||||
* gdk_surface_get_display:
|
||||
* @surface: a `GdkSurface`
|
||||
*
|
||||
* Gets the `GdkDisplay` associated with a `GdkSurface`.
|
||||
@@ -1100,7 +1112,7 @@ gdk_surface_is_destroyed (GdkSurface *surface)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_mapped: (attributes org.gtk.Method.get_property=mapped)
|
||||
* gdk_surface_get_mapped:
|
||||
* @surface: a `GdkSurface`
|
||||
*
|
||||
* Checks whether the surface has been mapped.
|
||||
@@ -1124,6 +1136,7 @@ gdk_surface_set_egl_native_window (GdkSurface *self,
|
||||
{
|
||||
#ifdef HAVE_EGL
|
||||
GdkSurfacePrivate *priv = gdk_surface_get_instance_private (self);
|
||||
GdkGLContext *current = NULL;
|
||||
|
||||
/* This checks that all EGL platforms we support conform to the same struct sizes.
|
||||
* When this ever fails, there will be some fun times happening for whoever tries
|
||||
@@ -1132,12 +1145,21 @@ gdk_surface_set_egl_native_window (GdkSurface *self,
|
||||
|
||||
if (priv->egl_surface != NULL)
|
||||
{
|
||||
gdk_gl_context_clear_current_if_surface (self);
|
||||
eglDestroySurface (gdk_surface_get_display (self), priv->egl_surface);
|
||||
GdkDisplay *display = gdk_surface_get_display (self);
|
||||
|
||||
current = gdk_gl_context_clear_current_if_surface (self);
|
||||
|
||||
eglDestroySurface (gdk_display_get_egl_display (display), priv->egl_surface);
|
||||
priv->egl_surface = NULL;
|
||||
}
|
||||
|
||||
priv->egl_native_window = native_window;
|
||||
|
||||
if (current)
|
||||
{
|
||||
gdk_gl_context_make_current (current);
|
||||
g_object_unref (current);
|
||||
}
|
||||
}
|
||||
|
||||
gpointer /* EGLSurface */
|
||||
@@ -1157,20 +1179,26 @@ gdk_surface_ensure_egl_surface (GdkSurface *self,
|
||||
|
||||
g_return_val_if_fail (priv->egl_native_window != NULL, depth);
|
||||
|
||||
if (priv->egl_surface_depth != depth &&
|
||||
priv->egl_surface != NULL &&
|
||||
gdk_display_get_egl_config (display, priv->egl_surface_depth) != gdk_display_get_egl_config (display, depth))
|
||||
if (depth == GDK_MEMORY_NONE)
|
||||
{
|
||||
gdk_gl_context_clear_current_if_surface (self);
|
||||
eglDestroySurface (gdk_display_get_egl_display (display), priv->egl_surface);
|
||||
priv->egl_surface = NULL;
|
||||
if (priv->egl_surface_depth == GDK_MEMORY_NONE)
|
||||
depth = GDK_MEMORY_U8;
|
||||
else
|
||||
depth = priv->egl_surface_depth;
|
||||
}
|
||||
|
||||
if (priv->egl_surface == NULL)
|
||||
if (priv->egl_surface == NULL ||
|
||||
(priv->egl_surface != NULL &&
|
||||
gdk_display_get_egl_config (display, priv->egl_surface_depth) != gdk_display_get_egl_config (display, depth)))
|
||||
{
|
||||
GdkGLContext *cleared;
|
||||
EGLint attribs[4];
|
||||
int i;
|
||||
|
||||
cleared = gdk_gl_context_clear_current_if_surface (self);
|
||||
if (priv->egl_surface != NULL)
|
||||
eglDestroySurface (gdk_display_get_egl_display (display), priv->egl_surface);
|
||||
|
||||
i = 0;
|
||||
if (depth == GDK_MEMORY_U8_SRGB && display->have_egl_gl_colorspace)
|
||||
{
|
||||
@@ -1195,6 +1223,12 @@ gdk_surface_ensure_egl_surface (GdkSurface *self,
|
||||
NULL);
|
||||
}
|
||||
priv->egl_surface_depth = depth;
|
||||
|
||||
if (cleared)
|
||||
{
|
||||
gdk_gl_context_make_current (cleared);
|
||||
g_object_unref (cleared);
|
||||
}
|
||||
}
|
||||
|
||||
return priv->egl_surface_depth;
|
||||
@@ -1254,7 +1288,7 @@ gdk_surface_create_gl_context (GdkSurface *surface,
|
||||
if (!gdk_display_prepare_gl (surface->display, error))
|
||||
return NULL;
|
||||
|
||||
return gdk_gl_context_new (surface->display, surface);
|
||||
return gdk_gl_context_new (surface->display, surface, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1811,7 +1845,7 @@ gdk_surface_set_cursor_internal (GdkSurface *surface,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_cursor: (attributes org.gtk.Method.get_property=cursor)
|
||||
* gdk_surface_get_cursor:
|
||||
* @surface: a `GdkSurface`
|
||||
*
|
||||
* Retrieves a `GdkCursor` pointer for the cursor currently set on the
|
||||
@@ -1833,7 +1867,7 @@ gdk_surface_get_cursor (GdkSurface *surface)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_set_cursor: (attributes org.gtk.Method.set_property=cursor)
|
||||
* gdk_surface_set_cursor:
|
||||
* @surface: a `GdkSurface`
|
||||
* @cursor: (nullable): a `GdkCursor`
|
||||
*
|
||||
@@ -1993,7 +2027,7 @@ gdk_surface_get_geometry (GdkSurface *surface,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_width: (attributes org.gtk.Method.get_property=width)
|
||||
* gdk_surface_get_width:
|
||||
* @surface: a `GdkSurface`
|
||||
*
|
||||
* Returns the width of the given @surface.
|
||||
@@ -2012,7 +2046,7 @@ gdk_surface_get_width (GdkSurface *surface)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_height: (attributes org.gtk.Method.get_property=height)
|
||||
* gdk_surface_get_height:
|
||||
* @surface: a `GdkSurface`
|
||||
*
|
||||
* Returns the height of the given @surface.
|
||||
@@ -2556,7 +2590,7 @@ gdk_surface_set_frame_clock (GdkSurface *surface,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_frame_clock: (attributes org.gtk.Method.get_property=frame-clock)
|
||||
* gdk_surface_get_frame_clock:
|
||||
* @surface: surface to get frame clock for
|
||||
*
|
||||
* Gets the frame clock for the surface.
|
||||
@@ -2575,7 +2609,7 @@ gdk_surface_get_frame_clock (GdkSurface *surface)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_scale_factor: (attributes org.gtk.Method.get_property=scale-factor)
|
||||
* gdk_surface_get_scale_factor:
|
||||
* @surface: surface to get scale factor for
|
||||
*
|
||||
* Returns the internal scale factor that maps from surface coordinates
|
||||
@@ -2601,7 +2635,7 @@ gdk_surface_get_scale_factor (GdkSurface *surface)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_get_scale: (attributes org.gtk.Method.get_property=scale)
|
||||
* gdk_surface_get_scale:
|
||||
* @surface: surface to get scale for
|
||||
*
|
||||
* Returns the internal scale that maps from surface coordinates
|
||||
@@ -2631,6 +2665,35 @@ gdk_surface_get_scale (GdkSurface *surface)
|
||||
return GDK_SURFACE_GET_CLASS (surface)->get_scale (surface);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_surface_update_opaque_region (GdkSurface *self)
|
||||
{
|
||||
GdkSurfacePrivate *priv = gdk_surface_get_instance_private (self);
|
||||
cairo_region_t *region;
|
||||
|
||||
if (priv->opaque_region == NULL)
|
||||
{
|
||||
if (priv->opaque_rect.width <= 0)
|
||||
region = NULL;
|
||||
else
|
||||
region = cairo_region_create_rectangle (&priv->opaque_rect);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (priv->opaque_rect.width <= 0)
|
||||
region = cairo_region_reference (priv->opaque_region);
|
||||
else
|
||||
{
|
||||
region = cairo_region_copy (priv->opaque_region);
|
||||
cairo_region_union_rectangle (region, &priv->opaque_rect);
|
||||
}
|
||||
}
|
||||
|
||||
GDK_SURFACE_GET_CLASS (self)->set_opaque_region (self, region);
|
||||
|
||||
g_clear_pointer (®ion, cairo_region_destroy);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_set_opaque_region:
|
||||
* @surface: a top-level `GdkSurface`
|
||||
@@ -2652,27 +2715,77 @@ gdk_surface_get_scale (GdkSurface *surface)
|
||||
* is opaque, as we know where the opaque regions are. If your surface
|
||||
* background is not opaque, please update this property in your
|
||||
* [GtkWidgetClass.css_changed](../gtk4/vfunc.Widget.css_changed.html) handler.
|
||||
*
|
||||
* Deprecated: 4.16: GDK can figure out the opaque parts of a window itself
|
||||
* by inspecting the contents that are drawn.
|
||||
*/
|
||||
void
|
||||
gdk_surface_set_opaque_region (GdkSurface *surface,
|
||||
cairo_region_t *region)
|
||||
{
|
||||
GdkSurfaceClass *class;
|
||||
GdkSurfacePrivate *priv = gdk_surface_get_instance_private (surface);
|
||||
|
||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||
g_return_if_fail (!GDK_SURFACE_DESTROYED (surface));
|
||||
|
||||
if (cairo_region_equal (surface->opaque_region, region))
|
||||
if (cairo_region_equal (priv->opaque_region, region))
|
||||
return;
|
||||
|
||||
g_clear_pointer (&surface->opaque_region, cairo_region_destroy);
|
||||
g_clear_pointer (&priv->opaque_region, cairo_region_destroy);
|
||||
|
||||
if (region != NULL)
|
||||
surface->opaque_region = cairo_region_reference (region);
|
||||
priv->opaque_region = cairo_region_reference (region);
|
||||
|
||||
class = GDK_SURFACE_GET_CLASS (surface);
|
||||
if (class->set_opaque_region)
|
||||
class->set_opaque_region (surface, region);
|
||||
gdk_surface_update_opaque_region (surface);
|
||||
}
|
||||
|
||||
/* Sets the opaque rect from the rendernode via end_frame() */
|
||||
void
|
||||
gdk_surface_set_opaque_rect (GdkSurface *self,
|
||||
const graphene_rect_t *rect)
|
||||
{
|
||||
GdkSurfacePrivate *priv = gdk_surface_get_instance_private (self);
|
||||
cairo_rectangle_int_t opaque;
|
||||
|
||||
if (rect)
|
||||
gsk_rect_to_cairo_shrink (rect, &opaque);
|
||||
else
|
||||
opaque = (cairo_rectangle_int_t) { 0, 0, 0, 0 };
|
||||
|
||||
if (gdk_rectangle_equal (&priv->opaque_rect, &opaque))
|
||||
return;
|
||||
|
||||
priv->opaque_rect = opaque;
|
||||
|
||||
gdk_surface_update_opaque_region (self);
|
||||
}
|
||||
|
||||
/*
|
||||
* gdk_surface_is_opaque:
|
||||
* @self: a surface
|
||||
*
|
||||
* Checks if the whole surface is known to be opaque.
|
||||
* This allows using an RGBx buffer instead of RGBA.
|
||||
*
|
||||
* This function works for the currently rendered frame inside
|
||||
* begin_frame() implementations.
|
||||
*
|
||||
* Returns: %TRUE if the whole surface is provably opaque
|
||||
**/
|
||||
gboolean
|
||||
gdk_surface_is_opaque (GdkSurface *self)
|
||||
{
|
||||
GdkSurfacePrivate *priv = gdk_surface_get_instance_private (self);
|
||||
cairo_rectangle_int_t whole = { 0, 0, self->width, self->height };
|
||||
|
||||
if (gdk_rectangle_contains (&priv->opaque_rect, &whole))
|
||||
return TRUE;
|
||||
|
||||
if (priv->opaque_region &&
|
||||
cairo_region_contains_rectangle (priv->opaque_region, &whole) == CAIRO_REGION_OVERLAP_IN)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -125,7 +125,7 @@ void gdk_surface_request_layout (GdkSurface *surface);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkFrameClock* gdk_surface_get_frame_clock (GdkSurface *surface);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_4_16
|
||||
void gdk_surface_set_opaque_region (GdkSurface *surface,
|
||||
cairo_region_t *region);
|
||||
|
||||
|
@@ -96,8 +96,6 @@ struct _GdkSurface
|
||||
GSList *draw_contexts;
|
||||
GdkDrawContext *paint_context;
|
||||
|
||||
cairo_region_t *opaque_region;
|
||||
|
||||
GdkSeat *current_shortcuts_inhibited_seat;
|
||||
|
||||
GPtrArray *subsurfaces;
|
||||
@@ -253,14 +251,17 @@ gdk_gravity_flip_vertically (GdkGravity anchor)
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
void _gdk_surface_destroy (GdkSurface *surface,
|
||||
gboolean foreign_destroy);
|
||||
void gdk_surface_invalidate_rect (GdkSurface *surface,
|
||||
const GdkRectangle *rect);
|
||||
void gdk_surface_invalidate_region (GdkSurface *surface,
|
||||
const cairo_region_t *region);
|
||||
void _gdk_surface_clear_update_area (GdkSurface *surface);
|
||||
void _gdk_surface_update_size (GdkSurface *surface);
|
||||
void _gdk_surface_destroy (GdkSurface *surface,
|
||||
gboolean foreign_destroy);
|
||||
void gdk_surface_invalidate_rect (GdkSurface *surface,
|
||||
const GdkRectangle *rect);
|
||||
void gdk_surface_invalidate_region (GdkSurface *surface,
|
||||
const cairo_region_t *region);
|
||||
void _gdk_surface_clear_update_area (GdkSurface *surface);
|
||||
void _gdk_surface_update_size (GdkSurface *surface);
|
||||
void gdk_surface_set_opaque_rect (GdkSurface *self,
|
||||
const graphene_rect_t *rect);
|
||||
gboolean gdk_surface_is_opaque (GdkSurface *self);
|
||||
|
||||
GdkGLContext * gdk_surface_get_paint_gl_context (GdkSurface *surface,
|
||||
GError **error);
|
||||
|
@@ -33,7 +33,18 @@
|
||||
*
|
||||
* `GdkTexture` is an immutable object: That means you cannot change
|
||||
* anything about it other than increasing the reference count via
|
||||
* [method@GObject.Object.ref], and consequently, it is a thread-safe object.
|
||||
* [method@GObject.Object.ref], and consequently, it is a threadsafe object.
|
||||
*
|
||||
* GDK provides a number of threadsafe texture loading functions:
|
||||
* [ctor@Gdk.Texture.new_from_resource],
|
||||
* [ctor@Gdk.Texture.new_from_bytes],
|
||||
* [ctor@Gdk.Texture.new_from_file],
|
||||
* [ctor@Gdk.Texture.new_from_filename],
|
||||
* [ctor@Gdk.Texture.new_for_pixbuf]. Note that these are meant for loading
|
||||
* icons and resources that are shipped with the toolkit or application. It
|
||||
* is recommended that you use a dedicated image loading framework such as
|
||||
* [glycin](https://lib.rs/crates/glycin), if you need to load untrusted image
|
||||
* data.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
@@ -384,7 +395,7 @@ gdk_texture_class_init (GdkTextureClass *klass)
|
||||
gobject_class->finalize = gdk_texture_finalize;
|
||||
|
||||
/**
|
||||
* GdkTexture:width: (attributes org.gtk.Property.get=gdk_texture_get_width)
|
||||
* GdkTexture:width:
|
||||
*
|
||||
* The width of the texture, in pixels.
|
||||
*/
|
||||
@@ -399,7 +410,7 @@ gdk_texture_class_init (GdkTextureClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkTexture:height: (attributes org.gtk.Property.get=gdk_texture_get_height)
|
||||
* GdkTexture:height:
|
||||
*
|
||||
* The height of the texture, in pixels.
|
||||
*/
|
||||
@@ -414,7 +425,7 @@ gdk_texture_class_init (GdkTextureClass *klass)
|
||||
G_PARAM_EXPLICIT_NOTIFY);
|
||||
|
||||
/**
|
||||
* GdkTexture:color-state: (attributes org.gtk.Property.get=gdk_texture_get_color_state)
|
||||
* GdkTexture:color-state:
|
||||
*
|
||||
* The color state of the texture.
|
||||
*
|
||||
@@ -770,7 +781,7 @@ gdk_texture_new_from_filename (const char *path,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_texture_get_width: (attributes org.gtk.Method.get_property=width)
|
||||
* gdk_texture_get_width:
|
||||
* @texture: a `GdkTexture`
|
||||
*
|
||||
* Returns the width of @texture, in pixels.
|
||||
@@ -786,7 +797,7 @@ gdk_texture_get_width (GdkTexture *texture)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_texture_get_height: (attributes org.gtk.Method.get_property=height)
|
||||
* gdk_texture_get_height:
|
||||
* @texture: a `GdkTexture`
|
||||
*
|
||||
* Returns the height of the @texture, in pixels.
|
||||
@@ -802,7 +813,7 @@ gdk_texture_get_height (GdkTexture *texture)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_texture_get_color_state: (attributes org.gtk.Method.get_property=color-state)
|
||||
* gdk_texture_get_color_state:
|
||||
* @self: a `GdkTexture`
|
||||
*
|
||||
* Returns the color state associated with the texture.
|
||||
|
@@ -157,7 +157,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
iface->unexport_handle = gdk_toplevel_default_unexport_handle;
|
||||
|
||||
/**
|
||||
* GdkToplevel:state: (attributes org.gtk.Property.get=gdk_toplevel_get_state)
|
||||
* GdkToplevel:state:
|
||||
*
|
||||
* The state of the toplevel.
|
||||
*/
|
||||
@@ -167,7 +167,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GdkToplevel:title: (attributes org.gtk.Property.set=gdk_toplevel_set_title)
|
||||
* GdkToplevel:title:
|
||||
*
|
||||
* The title of the surface.
|
||||
*/
|
||||
@@ -177,7 +177,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY));
|
||||
|
||||
/**
|
||||
* GdkToplevel:startup-id: (attributes org.gtk.Property.set=gdk_toplevel_set_startup_id)
|
||||
* GdkToplevel:startup-id:
|
||||
*
|
||||
* The startup ID of the surface.
|
||||
*
|
||||
@@ -190,7 +190,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY));
|
||||
|
||||
/**
|
||||
* GdkToplevel:transient-for: (attributes org.gtk.Property.set=gdk_toplevel_set_transient_for)
|
||||
* GdkToplevel:transient-for:
|
||||
*
|
||||
* The transient parent of the surface.
|
||||
*/
|
||||
@@ -200,7 +200,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY));
|
||||
|
||||
/**
|
||||
* GdkToplevel:modal: (attributes org.gtk.Property.set=gdk_toplevel_set_modal)
|
||||
* GdkToplevel:modal:
|
||||
*
|
||||
* Whether the surface is modal.
|
||||
*/
|
||||
@@ -210,7 +210,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY));
|
||||
|
||||
/**
|
||||
* GdkToplevel:icon-list: (attributes org.gtk.Property.set=gdk_toplevel_set_icon_list)
|
||||
* GdkToplevel:icon-list:
|
||||
*
|
||||
* A list of textures to use as icon.
|
||||
*/
|
||||
@@ -219,7 +219,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY));
|
||||
|
||||
/**
|
||||
* GdkToplevel:decorated: (attributes org.gtk.Property.set=gdk_toplevel_set_decorated)
|
||||
* GdkToplevel:decorated:
|
||||
*
|
||||
* Whether the window manager should add decorations.
|
||||
*/
|
||||
@@ -229,7 +229,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY));
|
||||
|
||||
/**
|
||||
* GdkToplevel:deletable: (attributes org.gtk.Property.set=gdk_toplevel_set_deletable)
|
||||
* GdkToplevel:deletable:
|
||||
*
|
||||
* Whether the window manager should allow to close the surface.
|
||||
*/
|
||||
@@ -391,7 +391,7 @@ gdk_toplevel_focus (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_get_state: (attributes org.gtk.Method.get_property=state)
|
||||
* gdk_toplevel_get_state:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
*
|
||||
* Gets the bitwise or of the currently active surface state flags,
|
||||
@@ -412,7 +412,7 @@ gdk_toplevel_get_state (GdkToplevel *toplevel)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_title: (attributes org.gtk.Method.set_property=title)
|
||||
* gdk_toplevel_set_title:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @title: title of @surface
|
||||
*
|
||||
@@ -431,7 +431,7 @@ gdk_toplevel_set_title (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_startup_id: (attributes org.gtk.Method.set_property=startup-id)
|
||||
* gdk_toplevel_set_startup_id:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @startup_id: a string with startup-notification identifier
|
||||
*
|
||||
@@ -451,7 +451,7 @@ gdk_toplevel_set_startup_id (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_transient_for: (attributes org.gtk.Method.set_property=transient-for)
|
||||
* gdk_toplevel_set_transient_for:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @parent: another toplevel `GdkSurface`
|
||||
*
|
||||
@@ -475,7 +475,7 @@ gdk_toplevel_set_transient_for (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_modal: (attributes org.gtk.Method.set_property=modal)
|
||||
* gdk_toplevel_set_modal:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @modal: %TRUE if the surface is modal, %FALSE otherwise.
|
||||
*
|
||||
@@ -499,7 +499,7 @@ gdk_toplevel_set_modal (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_icon_list: (attributes org.gtk.Method.set_property=icon-list)
|
||||
* gdk_toplevel_set_icon_list:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @surfaces: (transfer none) (element-type GdkTexture):
|
||||
* A list of textures to use as icon, of different sizes
|
||||
@@ -547,7 +547,7 @@ gdk_toplevel_show_window_menu (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_decorated: (attributes org.gtk.Method.set_property=decorated)
|
||||
* gdk_toplevel_set_decorated:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @decorated: %TRUE to request decorations
|
||||
*
|
||||
@@ -567,7 +567,7 @@ gdk_toplevel_set_decorated (GdkToplevel *toplevel,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_set_deletable: (attributes org.gtk.Method.set_property=deletable)
|
||||
* gdk_toplevel_set_deletable:
|
||||
* @toplevel: a `GdkToplevel`
|
||||
* @deletable: %TRUE to request a delete button
|
||||
*
|
||||
|
@@ -85,7 +85,6 @@ typedef enum
|
||||
* @GDK_TOPLEVEL_STATE_BOTTOM_RESIZABLE: whether the bottom edge is resizable
|
||||
* @GDK_TOPLEVEL_STATE_LEFT_TILED: whether the left edge is tiled
|
||||
* @GDK_TOPLEVEL_STATE_LEFT_RESIZABLE: whether the left edge is resizable
|
||||
* @GDK_TOPLEVEL_STATE_SUSPENDED: the surface is not visible to the user
|
||||
*
|
||||
* Specifies the state of a toplevel surface.
|
||||
*
|
||||
@@ -95,6 +94,14 @@ typedef enum
|
||||
* will give an indication of tiledness without any of the per-edge states
|
||||
* being set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* GDK_TOPLEVEL_STATE_SUSPENDED:
|
||||
*
|
||||
* The surface is not visible to the user.
|
||||
*
|
||||
* Since: 4.12
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
GDK_TOPLEVEL_STATE_MINIMIZED = 1 << 0,
|
||||
|
@@ -41,6 +41,7 @@ static const GdkDebugKey gsk_vulkan_feature_keys[] = {
|
||||
{ "semaphore-export", GDK_VULKAN_FEATURE_SEMAPHORE_EXPORT, "Disable sync of exported dmabufs" },
|
||||
{ "semaphore-import", GDK_VULKAN_FEATURE_SEMAPHORE_IMPORT, "Disable sync of imported dmabufs" },
|
||||
{ "incremental-present", GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT, "Do not send damage regions" },
|
||||
{ "swapchain-maintenance", GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE, "Do not use advanced swapchain features" },
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -271,7 +272,13 @@ gdk_vulkan_strerror (VkResult result)
|
||||
#endif
|
||||
#if VK_HEADER_VERSION >= 274
|
||||
case VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR:
|
||||
return "The specified Video Std parameters do not adhere to the syntactic or semantic requirements of the used video compression standard or implementation";
|
||||
return "The specified Video Std parameters do not adhere to the syntactic or semantic requirements of the used video compression standard or implementation. (VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR)";
|
||||
#endif
|
||||
#if VK_HEADER_VERSION >= 294
|
||||
case VK_PIPELINE_BINARY_MISSING_KHR:
|
||||
return "The application attempted to create a pipeline binary by querying an internal cache, but the internal cache entry did not exist. (VK_PIPELINE_BINARY_MISSING_KHR)";
|
||||
case VK_ERROR_NOT_ENOUGH_SPACE_KHR:
|
||||
return "The application did not provide enough space to return all the required data. (VK_ERROR_NOT_ENOUGH_SPACE_KHR)";
|
||||
#endif
|
||||
|
||||
case VK_RESULT_MAX_ENUM:
|
||||
@@ -303,6 +310,15 @@ surface_present_mode_to_string (VkPresentModeKHR present_mode)
|
||||
return "(unknown)";
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_vulkan_context_has_feature (GdkVulkanContext *self,
|
||||
GdkVulkanFeatures feature)
|
||||
{
|
||||
GdkDisplay *display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (self));
|
||||
|
||||
return (display->vulkan_features & feature) ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
static const VkPresentModeKHR preferred_present_modes[] = {
|
||||
VK_PRESENT_MODE_MAILBOX_KHR,
|
||||
VK_PRESENT_MODE_IMMEDIATE_KHR,
|
||||
@@ -556,8 +572,12 @@ physical_device_supports_extension (VkPhysicalDevice device,
|
||||
static GdkVulkanFeatures
|
||||
physical_device_check_features (VkPhysicalDevice device)
|
||||
{
|
||||
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT swapchain_maintenance1_features = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT,
|
||||
};
|
||||
VkPhysicalDeviceVulkan12Features v12_features = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
|
||||
.pNext = &swapchain_maintenance1_features
|
||||
};
|
||||
VkPhysicalDeviceSamplerYcbcrConversionFeatures ycbcr_features = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
|
||||
@@ -603,6 +623,10 @@ physical_device_check_features (VkPhysicalDevice device)
|
||||
if (physical_device_supports_extension (device, VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME))
|
||||
features |= GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT;
|
||||
|
||||
if (swapchain_maintenance1_features.swapchainMaintenance1 ||
|
||||
physical_device_supports_extension (device, VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME))
|
||||
features |= GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE;
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
@@ -692,11 +716,10 @@ gdk_vulkan_context_end_frame (GdkDrawContext *draw_context,
|
||||
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (draw_context);
|
||||
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
|
||||
GdkSurface *surface = gdk_draw_context_get_surface (draw_context);
|
||||
GdkDisplay *display = gdk_draw_context_get_display (draw_context);
|
||||
VkRectLayerKHR *rectangles;
|
||||
int n_regions;
|
||||
|
||||
if (display->vulkan_features & GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT)
|
||||
if (gdk_vulkan_context_has_feature (context, GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT))
|
||||
{
|
||||
double scale;
|
||||
|
||||
@@ -714,8 +737,8 @@ gdk_vulkan_context_end_frame (GdkDrawContext *draw_context,
|
||||
.layer = 0,
|
||||
.offset.x = (int) floor (r.x * scale),
|
||||
.offset.y = (int) floor (r.y * scale),
|
||||
.extent.width = (int) ceil (r.width * scale),
|
||||
.extent.height = (int) ceil (r.height * scale),
|
||||
.extent.width = (int) ceil ((r.x + r.width) * scale) - floor (r.x * scale),
|
||||
.extent.height = (int) ceil ((r.y + r.height) * scale) - floor (r.y * scale),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1348,7 +1371,6 @@ gdk_vulkan_context_get_draw_index (GdkVulkanContext *context)
|
||||
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
|
||||
|
||||
g_return_val_if_fail (GDK_IS_VULKAN_CONTEXT (context), 0);
|
||||
g_return_val_if_fail (gdk_draw_context_is_in_frame (GDK_DRAW_CONTEXT (context)), 0);
|
||||
|
||||
return priv->draw_index;
|
||||
}
|
||||
@@ -1372,7 +1394,6 @@ gdk_vulkan_context_set_draw_semaphore (GdkVulkanContext *context,
|
||||
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
|
||||
|
||||
g_return_if_fail (GDK_IS_VULKAN_CONTEXT (context));
|
||||
g_return_if_fail (!gdk_draw_context_is_in_frame (GDK_DRAW_CONTEXT (context)));
|
||||
g_return_if_fail (priv->draw_semaphore == VK_NULL_HANDLE);
|
||||
|
||||
priv->draw_semaphore = semaphore;
|
||||
@@ -1408,8 +1429,9 @@ gdk_display_create_vulkan_device (GdkDisplay *display,
|
||||
last = n_devices;
|
||||
|
||||
skip_features = gdk_parse_debug_var ("GDK_VULKAN_DISABLE",
|
||||
gsk_vulkan_feature_keys,
|
||||
G_N_ELEMENTS (gsk_vulkan_feature_keys));
|
||||
"GDK_VULKAN_DISABLE can be set to a list of Vulkan features to disable.\n",
|
||||
gsk_vulkan_feature_keys,
|
||||
G_N_ELEMENTS (gsk_vulkan_feature_keys));
|
||||
if (skip_features & GDK_VULKAN_FEATURE_YCBCR)
|
||||
skip_features |= GDK_VULKAN_FEATURE_DMABUF;
|
||||
|
||||
@@ -1508,6 +1530,11 @@ gdk_display_create_vulkan_device (GdkDisplay *display,
|
||||
{
|
||||
if (queue_props[j].queueFlags & VK_QUEUE_GRAPHICS_BIT)
|
||||
{
|
||||
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT swapchain_maintenance1_features = {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT,
|
||||
.swapchainMaintenance1 = VK_TRUE,
|
||||
};
|
||||
gpointer create_device_pNext = NULL;
|
||||
GPtrArray *device_extensions;
|
||||
|
||||
device_extensions = g_ptr_array_new ();
|
||||
@@ -1536,6 +1563,12 @@ gdk_display_create_vulkan_device (GdkDisplay *display,
|
||||
}
|
||||
if (features & GDK_VULKAN_FEATURE_INCREMENTAL_PRESENT)
|
||||
g_ptr_array_add (device_extensions, (gpointer) VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME);
|
||||
if (features & GDK_VULKAN_FEATURE_SWAPCHAIN_MAINTENANCE)
|
||||
{
|
||||
g_ptr_array_add (device_extensions, (gpointer) VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME);
|
||||
swapchain_maintenance1_features.pNext = create_device_pNext;
|
||||
create_device_pNext = &swapchain_maintenance1_features;
|
||||
}
|
||||
|
||||
#define ENABLE_IF(flag) ((features & (flag)) ? VK_TRUE : VK_FALSE)
|
||||
GDK_DISPLAY_DEBUG (display, VULKAN, "Using Vulkan device %u, queue %u", i, j);
|
||||
@@ -1554,6 +1587,7 @@ gdk_display_create_vulkan_device (GdkDisplay *display,
|
||||
.pNext = &(VkPhysicalDeviceVulkan11Features) {
|
||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
|
||||
.samplerYcbcrConversion = ENABLE_IF (GDK_VULKAN_FEATURE_YCBCR),
|
||||
.pNext = create_device_pNext,
|
||||
}
|
||||
},
|
||||
NULL,
|
||||
@@ -1605,9 +1639,9 @@ gdk_vulkan_debug_report (VkDebugReportFlagsEXT flags,
|
||||
void* pUserData)
|
||||
{
|
||||
if (flags & VK_DEBUG_REPORT_ERROR_BIT_EXT)
|
||||
g_critical ("Vulkan: %s: %s", pLayerPrefix, pMessage);
|
||||
g_warning ("Vulkan: %s: %s", pLayerPrefix, pMessage);
|
||||
else if (flags & VK_DEBUG_REPORT_WARNING_BIT_EXT)
|
||||
g_critical ("Vulkan: %s: %s", pLayerPrefix, pMessage);
|
||||
g_warning ("Vulkan: %s: %s", pLayerPrefix, pMessage);
|
||||
else if (flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)
|
||||
g_warning ("Vulkan: %s: %s", pLayerPrefix, pMessage);
|
||||
else if (flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT)
|
||||
@@ -1628,10 +1662,10 @@ gdk_display_create_vulkan_instance (GdkDisplay *display,
|
||||
gboolean have_debug_report = FALSE;
|
||||
VkResult res;
|
||||
|
||||
if (gdk_display_get_debug_flags (display) & GDK_DEBUG_VULKAN_DISABLE)
|
||||
if (!gdk_has_feature (GDK_FEATURE_VULKAN))
|
||||
{
|
||||
g_set_error_literal (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_NOT_AVAILABLE,
|
||||
_("Vulkan support disabled via GDK_DEBUG"));
|
||||
_("Vulkan support disabled via GDK_DISABLE"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -1672,28 +1706,32 @@ gdk_display_create_vulkan_instance (GdkDisplay *display,
|
||||
g_ptr_array_add (used_extensions, (gpointer) VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME);
|
||||
if (g_str_equal (extensions[i].extensionName, VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME))
|
||||
g_ptr_array_add (used_extensions, (gpointer) VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME);
|
||||
if (g_str_equal (extensions[i].extensionName, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME))
|
||||
g_ptr_array_add (used_extensions, (gpointer) VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME);
|
||||
if (g_str_equal (extensions[i].extensionName, VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME))
|
||||
g_ptr_array_add (used_extensions, (gpointer) VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
res = GDK_VK_CHECK (vkCreateInstance, &(VkInstanceCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
||||
.pNext = NULL,
|
||||
.flags = 0,
|
||||
.pApplicationInfo = &(VkApplicationInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
||||
.pNext = NULL,
|
||||
.pApplicationName = g_get_application_name (),
|
||||
.applicationVersion = 0,
|
||||
.pEngineName = "GTK",
|
||||
.engineVersion = VK_MAKE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION, GDK_MICRO_VERSION),
|
||||
.apiVersion = VK_API_VERSION_1_3
|
||||
},
|
||||
.enabledLayerCount = 0,
|
||||
.ppEnabledLayerNames = NULL,
|
||||
.enabledExtensionCount = used_extensions->len,
|
||||
.ppEnabledExtensionNames = (const char * const *) used_extensions->pdata,
|
||||
},
|
||||
NULL,
|
||||
&display->vk_instance);
|
||||
res = vkCreateInstance (&(VkInstanceCreateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
||||
.pNext = NULL,
|
||||
.flags = 0,
|
||||
.pApplicationInfo = &(VkApplicationInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
||||
.pNext = NULL,
|
||||
.pApplicationName = g_get_application_name (),
|
||||
.applicationVersion = 0,
|
||||
.pEngineName = "GTK",
|
||||
.engineVersion = VK_MAKE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION, GDK_MICRO_VERSION),
|
||||
.apiVersion = VK_API_VERSION_1_3
|
||||
},
|
||||
.enabledLayerCount = 0,
|
||||
.ppEnabledLayerNames = NULL,
|
||||
.enabledExtensionCount = used_extensions->len,
|
||||
.ppEnabledExtensionNames = (const char * const *) used_extensions->pdata,
|
||||
},
|
||||
NULL,
|
||||
&display->vk_instance);
|
||||
g_ptr_array_free (used_extensions, TRUE);
|
||||
|
||||
if (res != VK_SUCCESS)
|
||||
@@ -1850,8 +1888,6 @@ gdk_display_unref_vulkan (GdkDisplay *display)
|
||||
display->vk_instance = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DMABUF
|
||||
|
||||
/* Hack. We don't include gsk/gsk.h here to avoid a build order problem
|
||||
* with the generated header gskenumtypes.h, so we need to hack around
|
||||
* a bit to access the gsk api we need.
|
||||
@@ -1864,10 +1900,10 @@ extern gboolean gsk_renderer_realize_for_display (GskRenderer *r
|
||||
GdkDisplay *display,
|
||||
GError **error);
|
||||
|
||||
GdkDmabufDownloader *
|
||||
gdk_vulkan_get_dmabuf_downloader (GdkDisplay *display,
|
||||
GdkDmabufFormatsBuilder *builder)
|
||||
void
|
||||
gdk_vulkan_init_dmabuf (GdkDisplay *display)
|
||||
{
|
||||
#ifdef HAVE_DMABUF
|
||||
GdkDmabufFormatsBuilder *vulkan_builder;
|
||||
GskRenderer *renderer;
|
||||
VkDrmFormatModifierPropertiesEXT modifier_list[100];
|
||||
@@ -1885,13 +1921,15 @@ gdk_vulkan_get_dmabuf_downloader (GdkDisplay *display,
|
||||
GError *error = NULL;
|
||||
gsize i, j;
|
||||
|
||||
g_assert (display->vk_dmabuf_formats == NULL);
|
||||
if (display->vk_dmabuf_formats != NULL)
|
||||
return;
|
||||
|
||||
if (!gdk_display_init_vulkan (display, NULL))
|
||||
return NULL;
|
||||
|
||||
if ((display->vulkan_features & GDK_VULKAN_FEATURE_DMABUF) == 0)
|
||||
return NULL;
|
||||
if (!gdk_has_feature (GDK_FEATURE_DMABUF) ||
|
||||
!gdk_display_init_vulkan (display, NULL) ||
|
||||
((display->vulkan_features & GDK_VULKAN_FEATURE_DMABUF) == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
vulkan_builder = gdk_dmabuf_formats_builder_new ();
|
||||
|
||||
@@ -1925,23 +1963,20 @@ gdk_vulkan_get_dmabuf_downloader (GdkDisplay *display,
|
||||
|
||||
display->vk_dmabuf_formats = gdk_dmabuf_formats_builder_free_to_formats (vulkan_builder);
|
||||
|
||||
gdk_dmabuf_formats_builder_add_formats (builder, display->vk_dmabuf_formats);
|
||||
|
||||
renderer = gsk_vulkan_renderer_new ();
|
||||
|
||||
if (!gsk_renderer_realize_for_display (renderer, display, &error))
|
||||
{
|
||||
g_warning ("Failed to realize GL renderer: %s", error->message);
|
||||
g_warning ("Failed to realize Vulkan renderer: %s", error->message);
|
||||
g_error_free (error);
|
||||
g_object_unref (renderer);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return GDK_DMABUF_DOWNLOADER (renderer);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
display->vk_downloader = GDK_DMABUF_DOWNLOADER (renderer);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
VkShaderModule
|
||||
gdk_display_get_vk_shader_module (GdkDisplay *self,
|
||||
|
@@ -65,7 +65,7 @@ gdk_vulkan_handle_result (VkResult res,
|
||||
{
|
||||
if (res != VK_SUCCESS)
|
||||
{
|
||||
GDK_DEBUG (VULKAN, "%s(): %s (%d)", called_function, gdk_vulkan_strerror (res), res);
|
||||
g_warning ("%s(): %s (%d)", called_function, gdk_vulkan_strerror (res), res);
|
||||
}
|
||||
|
||||
return res;
|
||||
@@ -78,10 +78,7 @@ gboolean gdk_display_init_vulkan (GdkDisp
|
||||
void gdk_display_ref_vulkan (GdkDisplay *display);
|
||||
void gdk_display_unref_vulkan (GdkDisplay *display);
|
||||
|
||||
#ifdef HAVE_DMABUF
|
||||
GdkDmabufDownloader * gdk_vulkan_get_dmabuf_downloader (GdkDisplay *display,
|
||||
GdkDmabufFormatsBuilder *builder);
|
||||
#endif
|
||||
void gdk_vulkan_init_dmabuf (GdkDisplay *display);
|
||||
|
||||
VkShaderModule gdk_display_get_vk_shader_module (GdkDisplay *display,
|
||||
const char *resource_name);
|
||||
|
@@ -1133,6 +1133,7 @@
|
||||
0x00fe8a dead_small_schwa
|
||||
0x00fe8b dead_capital_schwa
|
||||
0x00fe8c dead_greek
|
||||
0x00fe8d dead_hamza
|
||||
0x00fea0 ch
|
||||
0x00fea1 Ch
|
||||
0x00fea2 CH
|
||||
@@ -1398,6 +1399,11 @@
|
||||
0x1000259 schwa
|
||||
0x1000275 obarred
|
||||
0x1000292 ezh
|
||||
0x1000300 combining_grave
|
||||
0x1000301 combining_acute
|
||||
0x1000303 combining_tilde
|
||||
0x1000309 combining_hook
|
||||
0x1000323 combining_belowdot
|
||||
0x1000492 Cyrillic_GHE_bar
|
||||
0x1000493 Cyrillic_ghe_bar
|
||||
0x1000496 Cyrillic_ZHE_descender
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -228,7 +228,7 @@ struct _FormatData {
|
||||
guint16 bits_per_sample;
|
||||
guint16 samples_per_pixel;
|
||||
guint16 sample_format;
|
||||
guint16 alpha_samples;
|
||||
gint16 alpha_samples;
|
||||
guint16 photometric;
|
||||
};
|
||||
|
||||
@@ -241,27 +241,27 @@ static const FormatData format_data[] = {
|
||||
[GDK_MEMORY_A8R8G8B8] = { GDK_MEMORY_R8G8B8A8, 8, 4, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R8G8B8A8] = { GDK_MEMORY_R8G8B8A8, 8, 4, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_A8B8G8R8] = { GDK_MEMORY_R8G8B8A8, 8, 4, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R8G8B8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_B8G8R8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R8G8B8X8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_X8R8G8B8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_B8G8R8X8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_X8B8G8R8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16] = { GDK_MEMORY_R16G16B16, 16, 3, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R8G8B8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, -1, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_B8G8R8] = { GDK_MEMORY_R8G8B8, 8, 3, SAMPLEFORMAT_UINT, -1, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R8G8B8X8] = { GDK_MEMORY_R8G8B8X8, 8, 4, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_X8R8G8B8] = { GDK_MEMORY_R8G8B8X8, 8, 4, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_B8G8R8X8] = { GDK_MEMORY_R8G8B8X8, 8, 4, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_X8B8G8R8] = { GDK_MEMORY_R8G8B8X8, 8, 4, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16] = { GDK_MEMORY_R16G16B16, 16, 3, SAMPLEFORMAT_UINT, -1, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16A16_PREMULTIPLIED] = { GDK_MEMORY_R16G16B16A16_PREMULTIPLIED, 16, 4, SAMPLEFORMAT_UINT, EXTRASAMPLE_ASSOCALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16A16] = { GDK_MEMORY_R16G16B16A16, 16, 4, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16_FLOAT] = { GDK_MEMORY_R16G16B16_FLOAT, 16, 3, SAMPLEFORMAT_IEEEFP, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16_FLOAT] = { GDK_MEMORY_R16G16B16_FLOAT, 16, 3, SAMPLEFORMAT_IEEEFP, -1, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED] = { GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED, 16, 4, SAMPLEFORMAT_IEEEFP, EXTRASAMPLE_ASSOCALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R16G16B16A16_FLOAT] = { GDK_MEMORY_R16G16B16A16_FLOAT, 16, 4, SAMPLEFORMAT_IEEEFP, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R32G32B32_FLOAT] = { GDK_MEMORY_R32G32B32_FLOAT, 32, 3, SAMPLEFORMAT_IEEEFP, 0, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R32G32B32_FLOAT] = { GDK_MEMORY_R32G32B32_FLOAT, 32, 3, SAMPLEFORMAT_IEEEFP, -1, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED] = { GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED, 32, 4, SAMPLEFORMAT_IEEEFP, EXTRASAMPLE_ASSOCALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_R32G32B32A32_FLOAT] = { GDK_MEMORY_R32G32B32A32_FLOAT, 32, 4, SAMPLEFORMAT_IEEEFP, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_RGB },
|
||||
[GDK_MEMORY_G8A8_PREMULTIPLIED] = { GDK_MEMORY_G8A8_PREMULTIPLIED, 8, 2, SAMPLEFORMAT_UINT, EXTRASAMPLE_ASSOCALPHA, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G8A8] = { GDK_MEMORY_G8A8, 8, 2, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G8] = { GDK_MEMORY_G8, 8, 1, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G8] = { GDK_MEMORY_G8, 8, 1, SAMPLEFORMAT_UINT, -1, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G16A16_PREMULTIPLIED] = { GDK_MEMORY_G16A16_PREMULTIPLIED, 16, 2, SAMPLEFORMAT_UINT, EXTRASAMPLE_ASSOCALPHA, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G16A16] = { GDK_MEMORY_G16A16, 16, 2, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G16] = { GDK_MEMORY_G16, 16, 1, SAMPLEFORMAT_UINT, 0, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_G16] = { GDK_MEMORY_G16, 16, 1, SAMPLEFORMAT_UINT, -1, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_A8] = { GDK_MEMORY_G8A8, 8, 2, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_A16] = { GDK_MEMORY_G16A16, 16, 2, SAMPLEFORMAT_UINT, EXTRASAMPLE_UNASSALPHA, PHOTOMETRIC_MINISBLACK },
|
||||
[GDK_MEMORY_A16_FLOAT] = { GDK_MEMORY_R16G16B16A16_FLOAT, 16, 4, SAMPLEFORMAT_IEEEFP, EXTRASAMPLE_ASSOCALPHA, PHOTOMETRIC_RGB },
|
||||
@@ -302,7 +302,7 @@ gdk_save_tiff (GdkTexture *texture)
|
||||
TIFFSetField (tif, TIFFTAG_SAMPLEFORMAT, fdata->sample_format);
|
||||
TIFFSetField (tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
|
||||
TIFFSetField (tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
|
||||
if (fdata->alpha_samples)
|
||||
if (fdata->alpha_samples >= 0)
|
||||
TIFFSetField (tif, TIFFTAG_EXTRASAMPLES, 1, &fdata->alpha_samples);
|
||||
|
||||
TIFFSetField (tif, TIFFTAG_PHOTOMETRIC, fdata->photometric);
|
||||
@@ -384,7 +384,7 @@ gdk_load_tiff (GBytes *input_bytes,
|
||||
guint16 sample_format;
|
||||
guint16 orientation;
|
||||
guint32 width, height;
|
||||
guint16 alpha_samples;
|
||||
gint16 alpha_samples;
|
||||
GdkMemoryFormat format;
|
||||
guchar *data, *line;
|
||||
gsize stride;
|
||||
@@ -421,9 +421,9 @@ gdk_load_tiff (GBytes *input_bytes,
|
||||
if (TIFFGetField (tif, TIFFTAG_EXTRASAMPLES, &extra, &extra_types))
|
||||
alpha_samples = extra_types[0];
|
||||
else
|
||||
alpha_samples = 0;
|
||||
alpha_samples = -1;
|
||||
|
||||
if (alpha_samples != 0 && alpha_samples != EXTRASAMPLE_ASSOCALPHA && alpha_samples != EXTRASAMPLE_UNASSALPHA)
|
||||
if (alpha_samples >= 0 && alpha_samples != EXTRASAMPLE_ASSOCALPHA && alpha_samples != EXTRASAMPLE_UNASSALPHA && alpha_samples != 0)
|
||||
{
|
||||
texture = load_fallback (tif, error);
|
||||
TIFFClose (tif);
|
||||
@@ -431,7 +431,7 @@ gdk_load_tiff (GBytes *input_bytes,
|
||||
}
|
||||
}
|
||||
else
|
||||
alpha_samples = 0;
|
||||
alpha_samples = -1;
|
||||
|
||||
for (format = 0; format < G_N_ELEMENTS (format_data); format++)
|
||||
{
|
||||
|
@@ -250,8 +250,7 @@ typedef NSString *CALayerContentsGravity;
|
||||
|
||||
-(BOOL)canBecomeKeyWindow
|
||||
{
|
||||
return GDK_IS_TOPLEVEL (gdk_surface) ||
|
||||
(GDK_IS_POPUP (gdk_surface) && GDK_SURFACE (gdk_surface)->input_region != NULL);
|
||||
return GDK_IS_TOPLEVEL (gdk_surface);
|
||||
}
|
||||
|
||||
-(void)showAndMakeKey:(BOOL)makeKey
|
||||
@@ -692,24 +691,9 @@ typedef NSString *CALayerContentsGravity;
|
||||
|
||||
-(void)setStyleMask:(NSWindowStyleMask)styleMask
|
||||
{
|
||||
gboolean was_opaque;
|
||||
gboolean is_opaque;
|
||||
|
||||
was_opaque = (([self styleMask] & NSWindowStyleMaskTitled) != 0);
|
||||
|
||||
[super setStyleMask:styleMask];
|
||||
|
||||
is_opaque = (([self styleMask] & NSWindowStyleMaskTitled) != 0);
|
||||
|
||||
_gdk_macos_surface_update_fullscreen_state (gdk_surface);
|
||||
|
||||
if (was_opaque != is_opaque)
|
||||
{
|
||||
[self setOpaque:is_opaque];
|
||||
|
||||
if (!is_opaque)
|
||||
[self setBackgroundColor:[NSColor clearColor]];
|
||||
}
|
||||
}
|
||||
|
||||
-(NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
|
||||
@@ -785,13 +769,20 @@ typedef NSString *CALayerContentsGravity;
|
||||
|
||||
if (decorated)
|
||||
{
|
||||
style_mask |= NSWindowStyleMaskTitled;
|
||||
style_mask &= ~NSWindowStyleMaskFullSizeContentView;
|
||||
[self setTitleVisibility:NSWindowTitleVisible];
|
||||
}
|
||||
else
|
||||
{
|
||||
style_mask &= ~NSWindowStyleMaskTitled;
|
||||
style_mask |= NSWindowStyleMaskFullSizeContentView;
|
||||
[self setTitleVisibility:NSWindowTitleHidden];
|
||||
}
|
||||
|
||||
[self setTitlebarAppearsTransparent:!decorated];
|
||||
[[self standardWindowButton:NSWindowCloseButton] setHidden:!decorated];
|
||||
[[self standardWindowButton:NSWindowMiniaturizeButton] setHidden:!decorated];
|
||||
[[self standardWindowButton:NSWindowZoomButton] setHidden:!decorated];
|
||||
|
||||
[self setStyleMask:style_mask];
|
||||
}
|
||||
|
||||
|
@@ -107,32 +107,13 @@ _gdk_macos_cairo_context_cairo_create (GdkCairoContext *cairo_context)
|
||||
cairo_clip (cr);
|
||||
}
|
||||
|
||||
/* If we have some exposed transparent area in the damage region,
|
||||
* we need to clear the existing content first to leave an transparent
|
||||
* area for cairo. We use (surface_bounds or damage)-(opaque) to get
|
||||
* the smallest set of rectangles we need to clear as it's expensive.
|
||||
*/
|
||||
if (!opaque)
|
||||
{
|
||||
cairo_region_t *transparent;
|
||||
cairo_rectangle_int_t r = { 0, 0, width/scale, height/scale };
|
||||
|
||||
cairo_save (cr);
|
||||
|
||||
if (damage != NULL)
|
||||
cairo_region_get_extents (damage, &r);
|
||||
transparent = cairo_region_create_rectangle (&r);
|
||||
if (surface->opaque_region)
|
||||
cairo_region_subtract (transparent, surface->opaque_region);
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
|
||||
cairo_paint (cr);
|
||||
|
||||
if (!cairo_region_is_empty (transparent))
|
||||
{
|
||||
gdk_cairo_region (cr, transparent);
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
cairo_region_destroy (transparent);
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
|
@@ -101,6 +101,8 @@ _gdk_macos_drag_surface_constructed (GObject *object)
|
||||
[window setOpaque:NO];
|
||||
[window setBackgroundColor:[NSColor clearColor]];
|
||||
[window setDecorated:NO];
|
||||
[window setLevel:NSStatusWindowLevel];
|
||||
[window setIgnoresMouseEvents:YES];
|
||||
|
||||
frame_clock = _gdk_frame_clock_idle_new ();
|
||||
gdk_surface_set_frame_clock (surface, frame_clock);
|
||||
|
@@ -242,7 +242,7 @@ gdk_macos_gl_context_allocate (GdkMacosGLContext *self)
|
||||
return;
|
||||
|
||||
/* Alter to an opaque surface if necessary */
|
||||
opaque = _gdk_macos_surface_is_opaque (GDK_MACOS_SURFACE (surface));
|
||||
opaque = gdk_surface_is_opaque (surface);
|
||||
if (opaque != self->last_opaque)
|
||||
{
|
||||
self->last_opaque = !!opaque;
|
||||
|
@@ -86,7 +86,6 @@ CGDirectDisplayID _gdk_macos_surface_get_screen_id (GdkMacosSurface
|
||||
const char *_gdk_macos_surface_get_title (GdkMacosSurface *self);
|
||||
void _gdk_macos_surface_set_title (GdkMacosSurface *self,
|
||||
const char *title);
|
||||
gboolean _gdk_macos_surface_is_opaque (GdkMacosSurface *self);
|
||||
NSView *_gdk_macos_surface_get_view (GdkMacosSurface *self);
|
||||
gboolean _gdk_macos_surface_get_modal_hint (GdkMacosSurface *self);
|
||||
void _gdk_macos_surface_set_modal_hint (GdkMacosSurface *self,
|
||||
|
@@ -533,7 +533,7 @@ gdk_macos_surface_class_init (GdkMacosSurfaceClass *klass)
|
||||
surface_class->set_opaque_region = gdk_macos_surface_set_opaque_region;
|
||||
|
||||
/**
|
||||
* GdkMacosSurface:native: (attributes org.gtk.Property.get=gdk_macos_surface_get_native_window)
|
||||
* GdkMacosSurface:native:
|
||||
*
|
||||
* The "native" property contains the underlying NSWindow.
|
||||
*/
|
||||
@@ -553,29 +553,6 @@ gdk_macos_surface_init (GdkMacosSurface *self)
|
||||
self->monitors = g_ptr_array_new_with_free_func (g_object_unref);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_gdk_macos_surface_is_opaque (GdkMacosSurface *self)
|
||||
{
|
||||
GdkSurface *surface = (GdkSurface *)self;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_MACOS_SURFACE (self), FALSE);
|
||||
|
||||
if (surface->opaque_region != NULL &&
|
||||
cairo_region_num_rectangles (surface->opaque_region) == 1)
|
||||
{
|
||||
cairo_rectangle_int_t extents;
|
||||
|
||||
cairo_region_get_extents (surface->opaque_region, &extents);
|
||||
|
||||
return (extents.x == 0 &&
|
||||
extents.y == 0 &&
|
||||
extents.width == GDK_SURFACE (self)->width &&
|
||||
extents.height == GDK_SURFACE (self)->height);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const char *
|
||||
_gdk_macos_surface_get_title (GdkMacosSurface *self)
|
||||
{
|
||||
@@ -636,7 +613,7 @@ _gdk_macos_surface_set_native (GdkMacosSurface *self,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_macos_surface_get_native_window: (attributes org.gtk.Method.get_property=native)
|
||||
* gdk_macos_surface_get_native_window:
|
||||
* @self: a #GdkMacosSurface
|
||||
*
|
||||
* Gets the underlying NSWindow used by the surface.
|
||||
|
@@ -617,6 +617,14 @@ _gdk_macos_toplevel_surface_constructed (GObject *object)
|
||||
|
||||
_gdk_macos_surface_set_native (GDK_MACOS_SURFACE (self), window);
|
||||
|
||||
[window setOpaque:NO];
|
||||
|
||||
/* Workaround: if we use full transparency, window rendering becomes slow,
|
||||
* because macOS tries to dynamically calculate the shadow.
|
||||
* Instead provide a tiny bit of alpha, so shadows are drawn around the window.
|
||||
*/
|
||||
[window setBackgroundColor:[[NSColor blackColor] colorWithAlphaComponent:0.00001]];
|
||||
|
||||
/* Allow NSWindow to go fullscreen */
|
||||
[window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
|
||||
|
||||
|
@@ -52,23 +52,24 @@ gdk_public_sources = files([
|
||||
'gdkmonitor.c',
|
||||
'gdkpaintable.c',
|
||||
'gdkpango.c',
|
||||
'gdkparalleltask.c',
|
||||
'gdkpipeiostream.c',
|
||||
'gdkpopup.c',
|
||||
'gdkpopuplayout.c',
|
||||
'gdkprofiler.c',
|
||||
'gdkrectangle.c',
|
||||
'gdkrgba.c',
|
||||
'gdkseat.c',
|
||||
'gdkseatdefault.c',
|
||||
'gdksnapshot.c',
|
||||
'gdktexture.c',
|
||||
'gdktexturedownloader.c',
|
||||
'gdkvulkancontext.c',
|
||||
'gdksubsurface.c',
|
||||
'gdksurface.c',
|
||||
'gdkpopuplayout.c',
|
||||
'gdkprofiler.c',
|
||||
'gdkpopup.c',
|
||||
'gdktexture.c',
|
||||
'gdktexturedownloader.c',
|
||||
'gdktoplevellayout.c',
|
||||
'gdktoplevelsize.c',
|
||||
'gdktoplevel.c',
|
||||
'gdkvulkancontext.c',
|
||||
'loaders/gdkpng.c',
|
||||
'loaders/gdktiff.c',
|
||||
'loaders/gdkjpeg.c',
|
||||
|
@@ -110,6 +110,12 @@ gdk_wayland_clipboard_data_source_send (void *data,
|
||||
source, mime_type, fd);
|
||||
|
||||
mime_type = gdk_intern_mime_type (mime_type);
|
||||
if (!mime_type)
|
||||
{
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
stream = g_unix_output_stream_new (fd, TRUE);
|
||||
|
||||
gdk_clipboard_write_async (GDK_CLIPBOARD (cb),
|
||||
@@ -236,6 +242,7 @@ gdk_wayland_clipboard_read_async (GdkClipboard *clipboard,
|
||||
{
|
||||
g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
_("No compatible transfer format found"));
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
/* offer formats should be empty if we have no offer */
|
||||
@@ -246,6 +253,7 @@ gdk_wayland_clipboard_read_async (GdkClipboard *clipboard,
|
||||
if (!g_unix_open_pipe (pipe_fd, O_CLOEXEC, &error))
|
||||
{
|
||||
g_task_return_error (task, error);
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -253,6 +261,7 @@ gdk_wayland_clipboard_read_async (GdkClipboard *clipboard,
|
||||
stream = g_unix_input_stream_new (pipe_fd[0], TRUE);
|
||||
close (pipe_fd[1]);
|
||||
g_task_return_pointer (task, stream, g_object_unref);
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
static GInputStream *
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user