Compare commits
642 Commits
ebassi/gli
...
path-tests
Author | SHA1 | Date | |
---|---|---|---|
|
e16c836f60 | ||
|
55bfc167e3 | ||
|
5516ec2bf0 | ||
|
7e7d1987a3 | ||
|
304c3055ad | ||
|
226f556cf8 | ||
|
be7fead1fb | ||
|
b871c2a3cb | ||
|
7c67a9c76a | ||
|
427e185bcf | ||
|
30552e9988 | ||
|
08d8d6c029 | ||
|
61a84956d4 | ||
|
e44780923a | ||
|
dd1a2e0396 | ||
|
0100c33b71 | ||
|
8b8197a662 | ||
|
e293f10fa1 | ||
|
3a4c3c3d8c | ||
|
944735071e | ||
|
91356de96a | ||
|
3f29c50800 | ||
|
59b1f9e7b1 | ||
|
dd3cf83a35 | ||
|
7f8a9e5543 | ||
|
8523c6cb2d | ||
|
49b25424c5 | ||
|
db2046cb67 | ||
|
61264165ff | ||
|
7b3d283fc0 | ||
|
44ffed0283 | ||
|
e91ec1f26f | ||
|
eace55daa6 | ||
|
097e58558b | ||
|
f0acb0f073 | ||
|
b779ba19ca | ||
|
aa0f1ce956 | ||
|
e9d01c1a63 | ||
|
e235392894 | ||
|
73904f3034 | ||
|
c2ed71af7a | ||
|
aa2f6345c8 | ||
|
cef1bc9098 | ||
|
828ccc51d9 | ||
|
8397d10c20 | ||
|
78d06e58d0 | ||
|
a5e13cc96b | ||
|
776dc54c8a | ||
|
ee6879fba8 | ||
|
14f9395476 | ||
|
1349cf2454 | ||
|
d47ebd388c | ||
|
61214221b3 | ||
|
7eb4ed8f86 | ||
|
92b472fec1 | ||
|
7a6b008479 | ||
|
d8c26172a5 | ||
|
da835321a5 | ||
|
30635d1cac | ||
|
a60b72ba58 | ||
|
36347892d8 | ||
|
924f0bc2c5 | ||
|
23c5318de1 | ||
|
678405bd22 | ||
|
946b76881b | ||
|
061683344f | ||
|
af9a85616d | ||
|
0f332de3d3 | ||
|
15e8f2bacc | ||
|
25f9eadb0d | ||
|
ced2959cdd | ||
|
3c363f00d5 | ||
|
a9ad37ed89 | ||
|
acdf04287d | ||
|
34725c1207 | ||
|
cb10cf07e6 | ||
|
a7ba2bde86 | ||
|
87b3cb1df8 | ||
|
2478963cbb | ||
|
abbbaef7e8 | ||
|
69177416a0 | ||
|
ff47bfdbcf | ||
|
120e449bdd | ||
|
237c37f6c2 | ||
|
683729c388 | ||
|
9fe71e7dae | ||
|
c74970e6c1 | ||
|
5225d01504 | ||
|
916d950069 | ||
|
76d6fed248 | ||
|
7ff6235ae6 | ||
|
9b957c26cb | ||
|
445b2382e6 | ||
|
790a4201c3 | ||
|
00b9af65b5 | ||
|
f7c367338c | ||
|
5d69887618 | ||
|
b658c26a3e | ||
|
e4c147cf2f | ||
|
fc2c6f1566 | ||
|
b0d6130905 | ||
|
a0b9238a15 | ||
|
801c63494c | ||
|
d2cfe74140 | ||
|
a3ac003546 | ||
|
483a4773cd | ||
|
c82ad0214e | ||
|
207feeb7a9 | ||
|
9a2e4ac9a9 | ||
|
2bd3aa3cbe | ||
|
118e41f432 | ||
|
2d7897a769 | ||
|
c279e1aa1e | ||
|
3c91d0be91 | ||
|
e7bbed54b5 | ||
|
4eb7d68970 | ||
|
98337f7115 | ||
|
08ee6c7acf | ||
|
c815496fe3 | ||
|
9c84fa127a | ||
|
84c6708366 | ||
|
f7e3016949 | ||
|
dd1110ca5c | ||
|
28c4adac24 | ||
|
7e579bb59a | ||
|
96e1b85c2c | ||
|
71e616d17e | ||
|
f85d939e5e | ||
|
8d014d6cb0 | ||
|
f7f8990f7a | ||
|
d6f288427a | ||
|
2a8f371643 | ||
|
dee863dbb2 | ||
|
7d6877ec80 | ||
|
f426d23690 | ||
|
e128a77eed | ||
|
5cd2ee927a | ||
|
e854b90293 | ||
|
6d042d9e61 | ||
|
4310f24a4e | ||
|
aebf8e3c29 | ||
|
fcd449f0d4 | ||
|
ab1b117d91 | ||
|
1253296387 | ||
|
466484176f | ||
|
20289ad8e1 | ||
|
0abb8c6862 | ||
|
147386189f | ||
|
9cec9e4ce2 | ||
|
26119af7a6 | ||
|
478d1f71e3 | ||
|
b1d952b8a2 | ||
|
b9bcdbbfdc | ||
|
6c31ed53f4 | ||
|
aa95ae774f | ||
|
65adfd9243 | ||
|
c4a8c0893b | ||
|
e90f5e8a20 | ||
|
526c76181e | ||
|
cf352374ae | ||
|
98b99201b0 | ||
|
bce4d669ee | ||
|
e7a326e230 | ||
|
9eaeaa8452 | ||
|
2031c5bf90 | ||
|
9fefa7b44c | ||
|
a2a70c3b65 | ||
|
0b4ed8d791 | ||
|
c34f98931e | ||
|
2feac2772f | ||
|
fdda4e4e99 | ||
|
e1cf0cff26 | ||
|
634fa772c9 | ||
|
4b3bbe0ecd | ||
|
cde43541d0 | ||
|
186287ecfb | ||
|
bd5d1615ac | ||
|
21299cc7e4 | ||
|
e747ea7dfd | ||
|
810cd7881e | ||
|
a8213d7f45 | ||
|
e6f6d1e478 | ||
|
933d241bba | ||
|
7249c3a09b | ||
|
d13f8ac3a9 | ||
|
fa35e3b874 | ||
|
853883c6e5 | ||
|
b467279c7d | ||
|
c6a5ac1d16 | ||
|
e41288de4f | ||
|
b886988a54 | ||
|
bb8a459fe2 | ||
|
d5143a1bf0 | ||
|
12611fa142 | ||
|
3e319b409b | ||
|
f2b16836c2 | ||
|
14bf45a0d5 | ||
|
0c6a6b3370 | ||
|
9521f609d8 | ||
|
7533369695 | ||
|
f31765d5dd | ||
|
d33062795c | ||
|
2da8d9b0ac | ||
|
3f56e8191f | ||
|
bf4c3dc2c5 | ||
|
a5365ec8cb | ||
|
ec94ec0286 | ||
|
af0973c847 | ||
|
e71f6b0bc0 | ||
|
1738724e4a | ||
|
e9e09be37e | ||
|
8a923e02a1 | ||
|
4f12e2f711 | ||
|
addcf57b4d | ||
|
db08bccb11 | ||
|
02f0681344 | ||
|
62dbadd536 | ||
|
0588db8a69 | ||
|
58b1a13453 | ||
|
df70dbbae4 | ||
|
81c55b06d2 | ||
|
591c2f0595 | ||
|
9c5a42be0d | ||
|
45b7fa15e5 | ||
|
e3de92f1ea | ||
|
2ffa2be64e | ||
|
387078b40c | ||
|
5203bf0b83 | ||
|
fb93baeae4 | ||
|
9fa4c2f5b8 | ||
|
cc9528eaec | ||
|
73dda96711 | ||
|
d711acc954 | ||
|
ab59c47880 | ||
|
e4b7847904 | ||
|
308115ebae | ||
|
1cb72536ea | ||
|
f24429e84a | ||
|
fc4402b456 | ||
|
077aec5d32 | ||
|
548949214c | ||
|
2aec47f56f | ||
|
344eb21bee | ||
|
4fb55b3270 | ||
|
75764c284d | ||
|
c95a32def8 | ||
|
142f7862ed | ||
|
b6412adc32 | ||
|
7eece7e769 | ||
|
7f6608cbed | ||
|
f816a8fb82 | ||
|
3c2484142d | ||
|
2192bb3dde | ||
|
e1df9a043f | ||
|
338d3ffa13 | ||
|
6039a36183 | ||
|
c551f693c2 | ||
|
5d2278a5ca | ||
|
ea5e186bb8 | ||
|
69b181f263 | ||
|
3132b10bc0 | ||
|
7335e166b7 | ||
|
91bba794a6 | ||
|
a6bd0c7eed | ||
|
ff351721b2 | ||
|
538aa6c200 | ||
|
f546e03d31 | ||
|
bdbea0d037 | ||
|
474b4ac1af | ||
|
99e0929d6c | ||
|
e75e44bdcc | ||
|
7975bbfcaa | ||
|
11bca98a29 | ||
|
618186723a | ||
|
a5986f0dcd | ||
|
c162d7148f | ||
|
7e1a210ae0 | ||
|
bf5e3efd54 | ||
|
08d52bee14 | ||
|
a6e9a9b644 | ||
|
dc96542742 | ||
|
e2afb59a0b | ||
|
daa5d5aead | ||
|
fd0a03cf78 | ||
|
34d99ea1d0 | ||
|
90355c0b27 | ||
|
538cf9e294 | ||
|
8e3f2b879e | ||
|
8fa6a25aa5 | ||
|
96a300b2de | ||
|
aeca9cb7ba | ||
|
c2727e6e04 | ||
|
8be0918d7e | ||
|
612d3bca7d | ||
|
e9fe270e94 | ||
|
8402665c55 | ||
|
79090f1755 | ||
|
3d84a38867 | ||
|
5155fac94f | ||
|
7a4d15dc67 | ||
|
e4d8d50a8b | ||
|
3c9a13e6cf | ||
|
2c97d44281 | ||
|
2d3a398678 | ||
|
d380ed2b3a | ||
|
644a45714a | ||
|
324683993e | ||
|
f6f6241627 | ||
|
6a33bed353 | ||
|
f83ee0be23 | ||
|
7442bdc383 | ||
|
82950528ed | ||
|
97eaef8308 | ||
|
92189cf96a | ||
|
b8a651df47 | ||
|
c0ed89be9a | ||
|
ade4bcb125 | ||
|
c5dd34344f | ||
|
c90cc976a5 | ||
|
bd9bcd5905 | ||
|
0ddcbb52e6 | ||
|
2457f3d54c | ||
|
1cc207af32 | ||
|
f4a0d57c07 | ||
|
a76ee61e97 | ||
|
fac367495b | ||
|
76177b6065 | ||
|
433f305fa9 | ||
|
fce824e78f | ||
|
c4b768a4ec | ||
|
6d1be832d9 | ||
|
a828d4318e | ||
|
a36ccd7f42 | ||
|
b4a7fe8d8f | ||
|
43e4848872 | ||
|
80d4a08e30 | ||
|
47d0b5ad0c | ||
|
c59b433395 | ||
|
18d06a1cd5 | ||
|
f13041360a | ||
|
0236fe80c1 | ||
|
2caf283323 | ||
|
6fb66e299a | ||
|
398a74d871 | ||
|
08ca8a361e | ||
|
1f141c1953 | ||
|
1e14a91cb9 | ||
|
074b933ae4 | ||
|
7b7f3342d8 | ||
|
adc4bcbd24 | ||
|
130ff5f841 | ||
|
fea1b151e6 | ||
|
6e0fffa0f8 | ||
|
d2c95a1b13 | ||
|
8f8c5040db | ||
|
3b69facf0b | ||
|
a6bc4c95b1 | ||
|
59fd171515 | ||
|
3db0d06901 | ||
|
d7d738d745 | ||
|
ac17217c69 | ||
|
2e5eeb6b92 | ||
|
eb0eac0f03 | ||
|
27077d5be8 | ||
|
fd01723470 | ||
|
994aa41ccc | ||
|
c791185c20 | ||
|
e7ddaf5ed1 | ||
|
2217cf8ea2 | ||
|
3bbeb891c4 | ||
|
ff23a2a582 | ||
|
8396bdb759 | ||
|
351d88f7ae | ||
|
dfb7ab3352 | ||
|
8e3ee58e3f | ||
|
40a9baa2db | ||
|
4b2aae9950 | ||
|
9d3f497a21 | ||
|
517bc0db84 | ||
|
369b03a3d8 | ||
|
2cddec7798 | ||
|
f7fceab40b | ||
|
3b66f63523 | ||
|
96450ed9cc | ||
|
5eee1dfcd1 | ||
|
19d2a4ab94 | ||
|
6ee7535af0 | ||
|
b738054344 | ||
|
b8fa892b70 | ||
|
ca65ee8d50 | ||
|
5eca548acc | ||
|
42679f2903 | ||
|
b431e39d4e | ||
|
606cb51293 | ||
|
62e0c0de59 | ||
|
30f789650f | ||
|
3f96d4b6da | ||
|
0dcd4a5bdb | ||
|
8a599b2582 | ||
|
a798edc360 | ||
|
e51c32b9c1 | ||
|
048a0172a0 | ||
|
64f6118af4 | ||
|
14b5a5a4c7 | ||
|
4083f7e47f | ||
|
2854d0339c | ||
|
98fffe6f23 | ||
|
f083849ebb | ||
|
deb58339b9 | ||
|
65ad9d6d96 | ||
|
e0f13ecae7 | ||
|
880ceebae4 | ||
|
8c014e63af | ||
|
ecd40fa265 | ||
|
3b140a05a4 | ||
|
d38f81999e | ||
|
efcfd23652 | ||
|
70b83c9a70 | ||
|
4779e4e488 | ||
|
13931463bd | ||
|
ecc861bf06 | ||
|
475c07e935 | ||
|
0c8d97e3f7 | ||
|
8d4f8f0cfc | ||
|
289b50785b | ||
|
68c14242b2 | ||
|
4af54fb410 | ||
|
13b4a4b24c | ||
|
e07fde5c81 | ||
|
8f27b3fcf6 | ||
|
251bd15597 | ||
|
dd738d2787 | ||
|
18d92c3f16 | ||
|
f4c36fe1ce | ||
|
23d7392eb9 | ||
|
996eeec16c | ||
|
641915974b | ||
|
528ec4dded | ||
|
366b946f5b | ||
|
9e6a55a086 | ||
|
285781724f | ||
|
2d103cf80c | ||
|
c8d991e4de | ||
|
a165bb9f46 | ||
|
33ed42d985 | ||
|
1ee4f6138b | ||
|
7b61ef9e0f | ||
|
b46d077b3a | ||
|
e32331d002 | ||
|
05928608ec | ||
|
d8c9a67d20 | ||
|
c352fe9ab0 | ||
|
e396874f3c | ||
|
f6c53ced0d | ||
|
ee26e282cc | ||
|
894f893223 | ||
|
67d7e2007f | ||
|
3a9cca74fc | ||
|
fe9c0db603 | ||
|
fde32c5219 | ||
|
213024a560 | ||
|
e5e18ddffb | ||
|
b3e03fa6f0 | ||
|
c0586ca6e2 | ||
|
4430314514 | ||
|
4087055b18 | ||
|
a47c0065fb | ||
|
6883c2214b | ||
|
7f6fdd6e7b | ||
|
24124452d5 | ||
|
0dff89d9fb | ||
|
f0f64f42ee | ||
|
d278afc85b | ||
|
423b8209a1 | ||
|
559f74e0c1 | ||
|
66c3a43e96 | ||
|
d83554121f | ||
|
2688b94133 | ||
|
e035baee8a | ||
|
f1ff8f9aad | ||
|
115ea624d9 | ||
|
6ecae6c5f8 | ||
|
6d76b587cf | ||
|
8e62ff50fe | ||
|
0daa905a27 | ||
|
d1a4ad3db6 | ||
|
2c1bd399d2 | ||
|
fac5fba0dc | ||
|
c907ad83b0 | ||
|
585ba777c2 | ||
|
f8ee4cfea5 | ||
|
35d2cbefe6 | ||
|
004f0a6596 | ||
|
b68e0bb3fb | ||
|
92f0216605 | ||
|
e317b9be00 | ||
|
2e52386be5 | ||
|
9431c70a6a | ||
|
6e67d44aa3 | ||
|
e622013f7e | ||
|
3886f0c530 | ||
|
eb9c204535 | ||
|
ab9e99218f | ||
|
714c610d6b | ||
|
8706d69e60 | ||
|
55a242bd81 | ||
|
61b40c47f9 | ||
|
710d0620a4 | ||
|
71cb7c2063 | ||
|
a482d870dd | ||
|
bc4992fef9 | ||
|
b38d0d7d9e | ||
|
853a9c7a8c | ||
|
26b9254ac7 | ||
|
a51f11999a | ||
|
f11c23f407 | ||
|
0c8de4e561 | ||
|
13f9993007 | ||
|
b2b451d762 | ||
|
2e146a56f7 | ||
|
34197d4f8a | ||
|
39dbd91bb0 | ||
|
901d99d7c5 | ||
|
8f6e3848f6 | ||
|
3548350dfa | ||
|
caae240bc7 | ||
|
f5f6ceece5 | ||
|
4caceb5dd4 | ||
|
3da41b6021 | ||
|
9b9fb4d7a3 | ||
|
ca8b00e871 | ||
|
4434889e41 | ||
|
475352fbc0 | ||
|
ad30ac3932 | ||
|
9d52ca1887 | ||
|
ec537d75e4 | ||
|
b47ea9421f | ||
|
845d2e5433 | ||
|
50310f7b14 | ||
|
af944aa74c | ||
|
b5077d02ed | ||
|
6a3bd1c4d1 | ||
|
2fcd0e21bd | ||
|
5127726bbc | ||
|
db456a70ee | ||
|
770e848953 | ||
|
9e1dd15e31 | ||
|
27b9a9e7ef | ||
|
a020c901ba | ||
|
cdad68e858 | ||
|
ef36028526 | ||
|
69b1b19315 | ||
|
516f71bbdc | ||
|
d820fea7a4 | ||
|
3e8d157118 | ||
|
67f45940ce | ||
|
95400e6451 | ||
|
d46fe31f54 | ||
|
4f67be1c8e | ||
|
c13e164f25 | ||
|
eba8f36d4f | ||
|
37f11ab77d | ||
|
8b898818c2 | ||
|
0f62ab6c42 | ||
|
c524b72d13 | ||
|
b5313dbd4d | ||
|
b9a1827da7 | ||
|
1057189ea2 | ||
|
879b2845ad | ||
|
ecce3756d4 | ||
|
6e4dd5811d | ||
|
598e1304f6 | ||
|
e3fbc0ee9c | ||
|
4021734047 | ||
|
5a307fa7f3 | ||
|
617d12fd77 | ||
|
837f398a9b | ||
|
e18211deca | ||
|
32a547cc3e | ||
|
365afa381a | ||
|
b7d3c073f8 | ||
|
56b0095622 | ||
|
39f0c48eb2 | ||
|
7d24e1405e | ||
|
3680ae220a | ||
|
f309fa21c9 | ||
|
61e7326f22 | ||
|
dc13ff97e2 | ||
|
af28237569 | ||
|
ff8de0a93f | ||
|
aefabcc056 | ||
|
1d6c6fc3b8 | ||
|
8645773fc6 | ||
|
d663909159 | ||
|
e3ff92bc87 | ||
|
2d43ecf8ca | ||
|
5f4beb711f | ||
|
da514187f5 | ||
|
6bd9ce7b55 | ||
|
ec21d354b9 | ||
|
8cf4ce5d9e | ||
|
09b6c37e1d | ||
|
3161dbfff2 | ||
|
8412928a14 | ||
|
60a7830ba5 | ||
|
ac473282a2 | ||
|
20f9e0f144 | ||
|
71a9e5d8c2 | ||
|
a605fcc2bd | ||
|
3eaebf1e0b | ||
|
e540ccbd34 | ||
|
55ce61d1a8 | ||
|
8e14f43398 | ||
|
bbbcc72460 | ||
|
c2b1b00e52 | ||
|
05c2e35c5d | ||
|
8efde9c48c | ||
|
247fc2e471 | ||
|
9d2ca90b4c | ||
|
3a5f8b6192 | ||
|
16b5a88097 | ||
|
fdf2e046c3 | ||
|
531d57f30c | ||
|
841bf67bb9 | ||
|
399b457f54 | ||
|
fed734edfc | ||
|
c84c014536 | ||
|
1e994419ee | ||
|
7b22c44b39 | ||
|
2e744260e0 | ||
|
7190a31b5f | ||
|
729f007379 | ||
|
b75b359f19 | ||
|
d7de720275 | ||
|
ef86e46238 | ||
|
0a46baeb56 | ||
|
fd3a6299ce | ||
|
803b147483 | ||
|
1f44319588 | ||
|
505478bc59 | ||
|
de7833b6a0 | ||
|
3a1b2083d6 |
@@ -56,6 +56,12 @@ If the issue includes a crash, you should also include:
|
||||
0. the eventual warnings printed on the terminal
|
||||
0. a backtrace, obtained with tools such as GDB or LLDB
|
||||
|
||||
It is fine to include screenshots of screen recordings to demonstrate
|
||||
an issue that is best to understand visually, but please don't just
|
||||
dump screen recordings without further details into issues. It is
|
||||
essential that the problem is described in enough detail to reproduce
|
||||
it without watching a video.
|
||||
|
||||
For small issues, such as:
|
||||
|
||||
- spelling/grammar fixes in the documentation
|
||||
|
138
NEWS
138
NEWS
@@ -1,3 +1,141 @@
|
||||
Overview of Changes in GTK 4.0
|
||||
==============================
|
||||
|
||||
* Fix problems with synthetic motion events affecting frame rates
|
||||
|
||||
* Fix problems with implicit grabs affecting widget states
|
||||
|
||||
* Fix problems with zoom mode on scales getting stuck
|
||||
|
||||
* Fix submenu closing by outside clicks
|
||||
|
||||
* Rename GtkWindow:fullscreen to :fullscreened to help
|
||||
language bindings
|
||||
|
||||
* Bump the soname. Stable GTK 4 releases use libgtk-4.0.so.1.xxxx.y
|
||||
|
||||
* Adwaita:
|
||||
- Reduce hover transition effects in lists
|
||||
- Special-case header buttons
|
||||
|
||||
* Demos:
|
||||
- Remove NoDisplay from desktop files
|
||||
- Autoplay the video in widget-factory
|
||||
|
||||
* Translation updates:
|
||||
Catalan
|
||||
Norwegian Bokmål
|
||||
Polish
|
||||
Spanish
|
||||
Swedish
|
||||
Romanian
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in 3.99.5
|
||||
=============================
|
||||
|
||||
* Accessibility:
|
||||
- Map presentation role according to Core-AAM
|
||||
- Use presentation role for spacers in list views
|
||||
- Set proper roles, relations and descriptions on more widgets
|
||||
- Expand the documentation
|
||||
- Use a single GTK_A11Y environment variable and document it
|
||||
- Serveral memory leak and crash fixes
|
||||
- Initialize AT contexts lazily
|
||||
- Improve the API for storing lists in relations
|
||||
- Implement more of the Component interface
|
||||
- Implement the Cache interface
|
||||
- Implement ScrollSubstringTo for GtkTextView
|
||||
|
||||
* Introspection:
|
||||
- Add many missing annotations to APIs
|
||||
- In particular, nullability annotation fixes for rust
|
||||
|
||||
* Touch support:
|
||||
- Fix issues with text handles
|
||||
- Fix interaction between touch scrolling and focus
|
||||
- Fix active state updates for touch events
|
||||
- Allow pressing buttons with multiple fingers
|
||||
|
||||
* GtkScrolledWindow:
|
||||
- Accumulate velocity with kinetic scrolling
|
||||
|
||||
* GtkSearchEntry:
|
||||
- Use a better clear icon
|
||||
|
||||
* GtkTreeView:
|
||||
- Remove the deprecated GtkCellRendererClass.get_size vfunc
|
||||
|
||||
* GtkBuilder:
|
||||
- Be stricter about <requires>
|
||||
- Make gtk-builder-tool simplify update <requires>
|
||||
|
||||
* GtkFileChooser:
|
||||
- Remove GtkFileChooserButton
|
||||
|
||||
* GtkWindow:
|
||||
- Replace gtk_window_get_size with gtk_window_get_default_size
|
||||
- Add maximized and fullscreen properties
|
||||
|
||||
* Make the inspector available in non-debug builds
|
||||
|
||||
* CSS:
|
||||
- Support conic gradients
|
||||
|
||||
* Adwaita:
|
||||
- Round all window corners
|
||||
- Round submenus
|
||||
- Remove the 'chin' on menus
|
||||
- Industrial style menuitems
|
||||
- Improved tooltip styling
|
||||
- Unified sidebar styles
|
||||
- Dark prelight
|
||||
- Don't backdrop labels
|
||||
|
||||
* GSK:
|
||||
- Rename render node apis from peek to get
|
||||
|
||||
* Make GLES work in the absence of GL_ARB_timer_query
|
||||
|
||||
* Rework the way size allocation is integrated in the
|
||||
frame cycle
|
||||
|
||||
* Wayland:
|
||||
- Support gtk_shell1 version 3 (startup notification
|
||||
and activation)
|
||||
- Implmement minimization
|
||||
|
||||
* OS X:
|
||||
- Mostly working GL renderer
|
||||
- Search engine updates
|
||||
- Fix rendering artifacts with hover transitions
|
||||
- Fix kinetic scrolling deceleration
|
||||
|
||||
* Windows:
|
||||
- Fix key event generation, making text input work
|
||||
|
||||
* Documentation:
|
||||
- Add missing enumerations, symbols and types
|
||||
- Lots of smaller fixes
|
||||
|
||||
* Demos:
|
||||
- Make the constraints demo more useful
|
||||
- Make search more obvious
|
||||
- Add a suggestion entry demo
|
||||
- Consistency improvements
|
||||
- Use native file choosers
|
||||
- Drop 'devel' styling
|
||||
|
||||
* Translation updates:
|
||||
Belarusian
|
||||
Catalan
|
||||
Polish
|
||||
Spanish
|
||||
Swedish
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in 3.99.4
|
||||
=============================
|
||||
|
||||
|
12
README.md
12
README.md
@@ -17,7 +17,7 @@ license fees or royalties.
|
||||
|
||||
The official download location
|
||||
|
||||
- https://download.gnome.org/sources/gtk+
|
||||
- https://download.gnome.org/sources/gtk/
|
||||
|
||||
The official web site
|
||||
|
||||
@@ -49,11 +49,11 @@ In order to build GTK you will need:
|
||||
You will also need various dependencies, based on the platform you are
|
||||
building for:
|
||||
|
||||
- [GLib](https://download.gnome.org/sources/glib)
|
||||
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf)
|
||||
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection)
|
||||
- [Cairo](https://www.cairographics.org)
|
||||
- [Pango](https://download.gnome.org/sources/pango)
|
||||
- [GLib](https://download.gnome.org/sources/glib/)
|
||||
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf/)
|
||||
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection/)
|
||||
- [Cairo](https://www.cairographics.org/)
|
||||
- [Pango](https://download.gnome.org/sources/pango/)
|
||||
- [Epoxy](https://github.com/anholt/libepoxy)
|
||||
- [Graphene](https://github.com/ebassi/graphene)
|
||||
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
||||
|
@@ -1,20 +1,21 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
if 'DESTDIR' not in os.environ:
|
||||
gtk_api_version = sys.argv[1]
|
||||
gtk_abi_version = sys.argv[2]
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
if 'DESTDIR' not in os.environ:
|
||||
gtk_api_version = sys.argv[1]
|
||||
gtk_abi_version = sys.argv[2]
|
||||
gtk_libdir = sys.argv[3]
|
||||
gtk_datadir = sys.argv[4]
|
||||
|
||||
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
||||
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
||||
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
||||
|
||||
print('Compiling GSettings schemas...')
|
||||
gtk_bindir = sys.argv[5]
|
||||
|
||||
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
||||
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
||||
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
||||
|
||||
print('Compiling GSettings schemas...')
|
||||
glib_compile_schemas = subprocess.check_output(['pkg-config',
|
||||
'--variable=glib_compile_schemas',
|
||||
'gio-2.0']).strip()
|
||||
@@ -22,13 +23,14 @@ if 'DESTDIR' not in os.environ:
|
||||
# pkg-config variables only available since GLib 2.62.0.
|
||||
glib_compile_schemas = 'glib-compile-schemas'
|
||||
subprocess.call([glib_compile_schemas,
|
||||
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
||||
|
||||
print('Updating icon cache...')
|
||||
subprocess.call(['gtk4-update-icon-cache', '-q', '-t' ,'-f',
|
||||
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
||||
|
||||
print('Updating module cache for print backends...')
|
||||
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
||||
|
||||
print('Updating icon cache...')
|
||||
update_icon_cache = os.path.join(gtk_bindir, 'gtk4-update-icon-cache')
|
||||
subprocess.call([update_icon_cache, '-q', '-t' ,'-f',
|
||||
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
||||
|
||||
print('Updating module cache for print backends...')
|
||||
os.makedirs(gtk_printmodule_dir, exist_ok=True)
|
||||
gio_querymodules = subprocess.check_output(['pkg-config',
|
||||
'--variable=gio_querymodules',
|
||||
@@ -37,7 +39,7 @@ if 'DESTDIR' not in os.environ:
|
||||
# pkg-config variables only available since GLib 2.62.0.
|
||||
gio_querymodules = 'gio-querymodules'
|
||||
subprocess.call([gio_querymodules, gtk_printmodule_dir])
|
||||
|
||||
print('Updating module cache for input methods...')
|
||||
|
||||
print('Updating module cache for input methods...')
|
||||
os.makedirs(gtk_immodule_dir, exist_ok=True)
|
||||
subprocess.call([gio_querymodules, gtk_immodule_dir])
|
||||
|
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ConstraintEditorWindow" parent="GtkApplicationWindow">
|
||||
<style>
|
||||
<class name="devel"/>
|
||||
</style>
|
||||
<property name="title" translatable="yes">GTK Constraint Editor</property>
|
||||
<property name="default-width">1024</property>
|
||||
<property name="default-height">768</property>
|
||||
|
@@ -8,14 +8,16 @@ constraint_editor_sources = [
|
||||
]
|
||||
|
||||
constraint_editor_resources = gnome.compile_resources('constraint_editor_resources',
|
||||
'constraint-editor.gresource.xml',
|
||||
source_dir: '.')
|
||||
'constraint-editor.gresource.xml',
|
||||
source_dir: '.',
|
||||
)
|
||||
|
||||
executable('gtk4-constraint-editor',
|
||||
constraint_editor_sources, constraint_editor_resources,
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: false)
|
||||
sources: [ constraint_editor_sources, constraint_editor_resources, ],
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: false,
|
||||
)
|
||||
|
@@ -67,7 +67,7 @@ vec2 raySphere(vec3 ro, vec3 rd, vec4 sphere) {
|
||||
return vec2(t0, t1);
|
||||
}
|
||||
|
||||
float noise1(vec2 p) {
|
||||
float noize1(vec2 p) {
|
||||
vec2 n = mod2(p, vec2(cellWidth));
|
||||
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
||||
hh.x *= hh.y;
|
||||
@@ -81,7 +81,7 @@ float noise1(vec2 p) {
|
||||
return h*0.25;
|
||||
}
|
||||
|
||||
float noise2(vec2 p) {
|
||||
float noize2(vec2 p) {
|
||||
vec2 n = mod2(p, vec2(cellWidth));
|
||||
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
||||
hh.x *= hh.y;
|
||||
@@ -114,7 +114,7 @@ float height(vec2 p, float dd, int mx) {
|
||||
int i = 0;
|
||||
|
||||
for (; i < 4;++i) {
|
||||
float nn = a*noise2(p);
|
||||
float nn = a*noize2(p);
|
||||
s += nn;
|
||||
d += abs(a);
|
||||
p += o;
|
||||
@@ -130,7 +130,7 @@ float height(vec2 p, float dd, int mx) {
|
||||
mx = int(mix(float(4), float(mx), step(rdd, far)));
|
||||
|
||||
for (; i < mx; ++i) {
|
||||
float nn = a*noise1(p);
|
||||
float nn = a*noize1(p);
|
||||
s += nn;
|
||||
d += abs(a);
|
||||
p += o;
|
||||
|
@@ -465,7 +465,7 @@ demo_application_window_size_allocate (GtkWidget *widget,
|
||||
baseline);
|
||||
|
||||
if (!window->maximized && !window->fullscreen)
|
||||
gtk_window_get_size (GTK_WINDOW (window), &window->width, &window->height);
|
||||
gtk_window_get_default_size (GTK_WINDOW (window), &window->width, &window->height);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -20,7 +20,7 @@ mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
|
||||
float b = 1.0/distance (pos, p2);
|
||||
float sum = r + g + b;
|
||||
|
||||
float alpha = 1.0 - pow (1.0/(sum), 40)*pow (10.0, 40*0.7);
|
||||
float alpha = 1.0 - pow (1.0/(sum), 40.0)*pow (10.0, 40.0*0.7);
|
||||
|
||||
fragColor = vec4 (r*0.5, g*0.5, b*0.5, 1.0) * alpha;
|
||||
}
|
||||
|
@@ -177,7 +177,7 @@ float ccell2(vec2 p, float r) {
|
||||
float df(vec2 p, float scale, inout vec2 nn) {
|
||||
p /= scale;
|
||||
nn = hextile(p);
|
||||
nn = round(nn);
|
||||
nn = floor(nn + 0.5);
|
||||
float r = hash(nn);
|
||||
|
||||
float d;;
|
||||
|
@@ -179,7 +179,7 @@ float ccell2(vec2 p, float r) {
|
||||
float df(vec2 p, float scale, inout vec2 nn) {
|
||||
p /= scale;
|
||||
nn = hextile(p);
|
||||
nn = round(nn);
|
||||
nn = floor(nn + 0.5);
|
||||
float r = hash(nn);
|
||||
|
||||
float d;;
|
||||
|
@@ -319,6 +319,9 @@
|
||||
<file>paintable_svg.c</file>
|
||||
<file>panes.c</file>
|
||||
<file>password_entry.c</file>
|
||||
<file>path_fill.c</file>
|
||||
<file>path_maze.c</file>
|
||||
<file>path_text.c</file>
|
||||
<file>peg_solitaire.c</file>
|
||||
<file>pickers.c</file>
|
||||
<file>printing.c</file>
|
||||
@@ -403,6 +406,9 @@
|
||||
<gresource prefix="/fontrendering">
|
||||
<file>fontrendering.ui</file>
|
||||
</gresource>
|
||||
<gresource prefix="/path_text">
|
||||
<file>path_text.ui</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/Demo4">
|
||||
<file>icons/16x16/actions/application-exit.png</file>
|
||||
<file>icons/16x16/actions/document-new.png</file>
|
||||
|
@@ -97,9 +97,9 @@ demo3_widget_size_allocate (GtkWidget *widget,
|
||||
|
||||
/* Since we are not using a layout manager (who would do this
|
||||
* for us), we need to allocate a size for our menu by calling
|
||||
* gtk_native_check_resize().
|
||||
* gtk_popover_present().
|
||||
*/
|
||||
gtk_native_check_resize (GTK_NATIVE (self->menu));
|
||||
gtk_popover_present (GTK_POPOVER (self->menu));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -142,16 +142,39 @@ load_file (GtkStringList *list,
|
||||
}
|
||||
|
||||
static void
|
||||
file_selected_cb (GtkWidget *button,
|
||||
GtkStringList *stringlist)
|
||||
open_response_cb (GtkNativeDialog *dialog,
|
||||
int response,
|
||||
GtkStringList *stringlist)
|
||||
{
|
||||
GFile *file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (button));
|
||||
gtk_native_dialog_hide (dialog);
|
||||
|
||||
if (file)
|
||||
if (response == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
GFile *file;
|
||||
|
||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
||||
load_file (stringlist, file);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
gtk_native_dialog_destroy (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
file_open_cb (GtkWidget *button,
|
||||
GtkStringList *stringlist)
|
||||
{
|
||||
GtkFileChooserNative *dialog;
|
||||
|
||||
dialog = gtk_file_chooser_native_new ("Open file",
|
||||
GTK_WINDOW (gtk_widget_get_root (button)),
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
"_Load",
|
||||
"_Cancel");
|
||||
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
|
||||
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), stringlist);
|
||||
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
@@ -189,8 +212,8 @@ do_listview_words (GtkWidget *do_widget)
|
||||
|
||||
header = gtk_header_bar_new ();
|
||||
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE);
|
||||
open_button = gtk_file_chooser_button_new ("_Open", GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
g_signal_connect (open_button, "file-set", G_CALLBACK (file_selected_cb), stringlist);
|
||||
open_button = gtk_button_new_with_mnemonic ("_Open");
|
||||
g_signal_connect (open_button, "clicked", G_CALLBACK (file_open_cb), stringlist);
|
||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), open_button);
|
||||
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||
|
||||
|
@@ -17,9 +17,6 @@
|
||||
</section>
|
||||
</menu>
|
||||
<object class="GtkApplicationWindow" id="window">
|
||||
<style>
|
||||
<class name="devel"/>
|
||||
</style>
|
||||
<property name="default-width">800</property>
|
||||
<property name="default-height">600</property>
|
||||
<child type="titlebar">
|
||||
@@ -31,6 +28,16 @@
|
||||
<property name="label" translatable="yes">Run</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton">
|
||||
<property name="icon-name">edit-find-symbolic</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="active" bind-source="searchbar" bind-property="search-mode-enabled" bind-flags="bidirectional|sync-create"/>
|
||||
<accessibility>
|
||||
<property name="label" translatable="yes">Search</property>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkMenuButton" id="gear_menu_button">
|
||||
<property name="valign">center</property>
|
||||
@@ -46,31 +53,30 @@
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<style>
|
||||
<class name="sidebar"/>
|
||||
</style>
|
||||
<property name="width-request">120</property>
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="min-content-width">150</property>
|
||||
<object class="GtkBox">
|
||||
<property name="width-request">220</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="width-request">220</property>
|
||||
<property name="orientation">vertical</property>
|
||||
|
||||
<object class="GtkSearchBar" id="searchbar">
|
||||
<property name="key-capture-widget">window</property>
|
||||
<child>
|
||||
<object class="GtkSearchBar" id="searchbar">
|
||||
<property name="key-capture-widget">window</property>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="search-entry">
|
||||
<accessibility>
|
||||
<relation name="controls">listview</relation>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
<object class="GtkSearchEntry" id="search-entry">
|
||||
<accessibility>
|
||||
<relation name="controls">listview</relation>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<style>
|
||||
<class name="sidebar"/>
|
||||
</style>
|
||||
<property name="width-request">120</property>
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="min-content-width">150</property>
|
||||
<property name="vexpand">1</property>
|
||||
<child>
|
||||
<object class="GtkListView" id="listview">
|
||||
<style>
|
||||
@@ -87,7 +93,6 @@
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
@@ -68,6 +68,9 @@ demos = files([
|
||||
'paintable_mediastream.c',
|
||||
'panes.c',
|
||||
'password_entry.c',
|
||||
'path_fill.c',
|
||||
'path_maze.c',
|
||||
'path_text.c',
|
||||
'peg_solitaire.c',
|
||||
'pickers.c',
|
||||
'printing.c',
|
||||
@@ -100,31 +103,33 @@ demos = files([
|
||||
|
||||
gtkdemo_deps = [ libgtk_dep, ]
|
||||
|
||||
extra_demo_sources = files(['main.c',
|
||||
'fontify.c',
|
||||
'gtkfishbowl.c',
|
||||
'fontplane.c',
|
||||
'gtkgears.c',
|
||||
'gtkshaderbin.c',
|
||||
'gtkshadertoy.c',
|
||||
'gtkshaderstack.c',
|
||||
'gskshaderpaintable.c',
|
||||
'puzzlepiece.c',
|
||||
'bluroverlay.c',
|
||||
'demoimage.c',
|
||||
'demotaggedentry.c',
|
||||
'demochild.c',
|
||||
'demolayout.c',
|
||||
'demowidget.c',
|
||||
'demo2layout.c',
|
||||
'singular_value_decomposition.c',
|
||||
'four_point_transform.c',
|
||||
'demo2widget.c',
|
||||
'demo3widget.c',
|
||||
'pixbufpaintable.c',
|
||||
'script-names.c',
|
||||
'unicode-names.c',
|
||||
'suggestionentry.c'])
|
||||
extra_demo_sources = files([
|
||||
'main.c',
|
||||
'fontify.c',
|
||||
'gtkfishbowl.c',
|
||||
'fontplane.c',
|
||||
'gtkgears.c',
|
||||
'gtkshaderbin.c',
|
||||
'gtkshadertoy.c',
|
||||
'gtkshaderstack.c',
|
||||
'gskshaderpaintable.c',
|
||||
'puzzlepiece.c',
|
||||
'bluroverlay.c',
|
||||
'demoimage.c',
|
||||
'demotaggedentry.c',
|
||||
'demochild.c',
|
||||
'demolayout.c',
|
||||
'demowidget.c',
|
||||
'demo2layout.c',
|
||||
'singular_value_decomposition.c',
|
||||
'four_point_transform.c',
|
||||
'demo2widget.c',
|
||||
'demo3widget.c',
|
||||
'pixbufpaintable.c',
|
||||
'script-names.c',
|
||||
'unicode-names.c',
|
||||
'suggestionentry.c',
|
||||
])
|
||||
|
||||
if harfbuzz_dep.found() and pangoft_dep.found()
|
||||
demos += files(['font_features.c'])
|
||||
@@ -147,14 +152,17 @@ endif
|
||||
gtkdemo_args = [ '-DGDK_DISABLE_DEPRECATED', '-DGTK_DISABLE_DEPRECATED', ]
|
||||
|
||||
demos_h = custom_target('gtk4 demo header',
|
||||
output: 'demos.h',
|
||||
input: demos,
|
||||
command: [ find_program('geninclude.py'), '@OUTPUT@', '@INPUT@' ])
|
||||
output: 'demos.h',
|
||||
input: demos,
|
||||
command: [ find_program('geninclude.py'), '@OUTPUT@', '@INPUT@' ],
|
||||
)
|
||||
|
||||
gtkdemo_resources = gnome.compile_resources('gtkdemo_resources',
|
||||
'demo.gresource.xml',
|
||||
source_dir: '.')
|
||||
'demo.gresource.xml',
|
||||
source_dir: '.',
|
||||
)
|
||||
|
||||
# Use a subset of compiler flags
|
||||
demo_cflags = []
|
||||
foreach flag: common_cflags
|
||||
if flag not in ['-Werror=missing-prototypes', '-Werror=missing-declarations', '-fvisibility=hidden']
|
||||
@@ -163,30 +171,30 @@ foreach flag: common_cflags
|
||||
endforeach
|
||||
|
||||
executable('gtk4-demo',
|
||||
demos, demos_h, extra_demo_sources, gtkdemo_resources,
|
||||
c_args: gtkdemo_args + demo_cflags,
|
||||
dependencies: gtkdemo_deps,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true)
|
||||
sources: [demos, demos_h, extra_demo_sources, gtkdemo_resources],
|
||||
c_args: gtkdemo_args + demo_cflags,
|
||||
dependencies: gtkdemo_deps,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true,
|
||||
)
|
||||
|
||||
executable('gtk4-demo-application',
|
||||
'application.c', gtkdemo_resources,
|
||||
c_args: gtkdemo_args + common_cflags,
|
||||
dependencies: gtkdemo_deps,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true)
|
||||
sources: ['application.c', gtkdemo_resources],
|
||||
c_args: gtkdemo_args + common_cflags,
|
||||
dependencies: gtkdemo_deps,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true,
|
||||
)
|
||||
|
||||
# icons
|
||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
|
||||
foreach size: ['scalable', 'symbolic']
|
||||
install_subdir('data/' + size,
|
||||
install_dir: icontheme_dir
|
||||
)
|
||||
install_subdir('data/' + size, install_dir: icontheme_dir)
|
||||
endforeach
|
||||
|
||||
# desktop file
|
||||
|
@@ -7,4 +7,3 @@ Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=Development;GTK;
|
||||
NoDisplay=true
|
||||
|
@@ -13,19 +13,46 @@
|
||||
|
||||
|
||||
static void
|
||||
file_set (GtkFileChooserButton *button,
|
||||
GtkWidget *picture)
|
||||
open_response_cb (GtkNativeDialog *dialog,
|
||||
int response,
|
||||
GtkPicture *picture)
|
||||
{
|
||||
GFile *file;
|
||||
GdkPaintable *paintable;
|
||||
gtk_native_dialog_hide (dialog);
|
||||
|
||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (button));
|
||||
if (response == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
GFile *file;
|
||||
GdkPaintable *paintable;
|
||||
|
||||
paintable = svg_paintable_new (file);
|
||||
gtk_picture_set_paintable (GTK_PICTURE (picture), paintable);
|
||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
||||
paintable = svg_paintable_new (file);
|
||||
gtk_picture_set_paintable (GTK_PICTURE (picture), paintable);
|
||||
g_object_unref (paintable);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
g_object_unref (paintable);
|
||||
g_object_unref (file);
|
||||
gtk_native_dialog_destroy (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
show_file_open (GtkWidget *button,
|
||||
GtkPicture *picture)
|
||||
{
|
||||
GtkFileFilter *filter;
|
||||
GtkFileChooserNative *dialog;
|
||||
|
||||
dialog = gtk_file_chooser_native_new ("Open node file",
|
||||
GTK_WINDOW (gtk_widget_get_root (button)),
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
"_Load",
|
||||
"_Cancel");
|
||||
|
||||
filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_mime_type (filter, "image/svg+xml");
|
||||
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
|
||||
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), picture);
|
||||
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
|
||||
}
|
||||
|
||||
static GtkWidget *window;
|
||||
@@ -35,7 +62,6 @@ do_paintable_svg (GtkWidget *do_widget)
|
||||
{
|
||||
GtkWidget *header;
|
||||
GtkWidget *picture;
|
||||
GtkFileFilter *filter;
|
||||
GtkWidget *button;
|
||||
GFile *file;
|
||||
GdkPaintable *paintable;
|
||||
@@ -49,17 +75,14 @@ do_paintable_svg (GtkWidget *do_widget)
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Paintable — SVG");
|
||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||
|
||||
button = gtk_file_chooser_button_new ("Select an SVG file", GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_mime_type (filter, "image/svg+xml");
|
||||
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (button), filter);
|
||||
button = gtk_button_new_with_mnemonic ("_Open");
|
||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);
|
||||
|
||||
picture = gtk_picture_new ();
|
||||
gtk_picture_set_can_shrink (GTK_PICTURE (picture), TRUE);
|
||||
gtk_widget_set_size_request (picture, 16, 16);
|
||||
|
||||
g_signal_connect (button, "file-set", G_CALLBACK (file_set), picture);
|
||||
g_signal_connect (button, "clicked", G_CALLBACK (show_file_open), picture);
|
||||
|
||||
gtk_window_set_child (GTK_WINDOW (window), picture);
|
||||
|
||||
|
359
demos/gtk-demo/path_fill.c
Normal file
359
demos/gtk-demo/path_fill.c
Normal file
@@ -0,0 +1,359 @@
|
||||
/* Path/Fill
|
||||
*
|
||||
* This demo shows how to use PangoCairo to draw text with more than
|
||||
* just a single color.
|
||||
*/
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "paintable.h"
|
||||
#include "gsk/gskpathdashprivate.h"
|
||||
|
||||
#define GTK_TYPE_PATH_PAINTABLE (gtk_path_paintable_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (GtkPathPaintable, gtk_path_paintable, GTK, PATH_PAINTABLE, GObject)
|
||||
|
||||
struct _GtkPathPaintable
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
GskPath *path;
|
||||
GdkPaintable *background;
|
||||
};
|
||||
|
||||
struct _GtkPathPaintableClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
static int
|
||||
gtk_path_paintable_get_intrinsic_width (GdkPaintable *paintable)
|
||||
{
|
||||
GtkPathPaintable *self = GTK_PATH_PAINTABLE (paintable);
|
||||
|
||||
if (self->background)
|
||||
return MAX (gdk_paintable_get_intrinsic_width (self->background), self->width);
|
||||
else
|
||||
return self->width;
|
||||
}
|
||||
|
||||
static int
|
||||
gtk_path_paintable_get_intrinsic_height (GdkPaintable *paintable)
|
||||
{
|
||||
GtkPathPaintable *self = GTK_PATH_PAINTABLE (paintable);
|
||||
|
||||
if (self->background)
|
||||
return MAX (gdk_paintable_get_intrinsic_height (self->background), self->height);
|
||||
else
|
||||
return self->height;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_paintable_snapshot (GdkPaintable *paintable,
|
||||
GdkSnapshot *snapshot,
|
||||
double width,
|
||||
double height)
|
||||
{
|
||||
GtkPathPaintable *self = GTK_PATH_PAINTABLE (paintable);
|
||||
|
||||
#if 0
|
||||
gtk_snapshot_push_fill (snapshot, self->path, GSK_FILL_RULE_WINDING);
|
||||
#else
|
||||
GskStroke *stroke = gsk_stroke_new (2.0);
|
||||
gtk_snapshot_push_stroke (snapshot, self->path, stroke);
|
||||
gsk_stroke_free (stroke);
|
||||
#endif
|
||||
|
||||
if (self->background)
|
||||
{
|
||||
gdk_paintable_snapshot (self->background, snapshot, width, height);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_snapshot_append_linear_gradient (snapshot,
|
||||
&GRAPHENE_RECT_INIT (0, 0, width, height),
|
||||
&GRAPHENE_POINT_INIT (0, 0),
|
||||
&GRAPHENE_POINT_INIT (width, height),
|
||||
(GskColorStop[8]) {
|
||||
{ 0.0, { 1.0, 0.0, 0.0, 1.0 } },
|
||||
{ 0.2, { 1.0, 0.0, 0.0, 1.0 } },
|
||||
{ 0.3, { 1.0, 1.0, 0.0, 1.0 } },
|
||||
{ 0.4, { 0.0, 1.0, 0.0, 1.0 } },
|
||||
{ 0.6, { 0.0, 1.0, 1.0, 1.0 } },
|
||||
{ 0.7, { 0.0, 0.0, 1.0, 1.0 } },
|
||||
{ 0.8, { 1.0, 0.0, 1.0, 1.0 } },
|
||||
{ 1.0, { 1.0, 0.0, 1.0, 1.0 } }
|
||||
},
|
||||
8);
|
||||
}
|
||||
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
}
|
||||
|
||||
static GdkPaintableFlags
|
||||
gtk_path_paintable_get_flags (GdkPaintable *paintable)
|
||||
{
|
||||
GtkPathPaintable *self = GTK_PATH_PAINTABLE (paintable);
|
||||
|
||||
if (self->background)
|
||||
return gdk_paintable_get_flags (self->background);
|
||||
else
|
||||
return GDK_PAINTABLE_STATIC_CONTENTS | GDK_PAINTABLE_STATIC_SIZE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_paintable_paintable_init (GdkPaintableInterface *iface)
|
||||
{
|
||||
iface->get_intrinsic_width = gtk_path_paintable_get_intrinsic_width;
|
||||
iface->get_intrinsic_height = gtk_path_paintable_get_intrinsic_height;
|
||||
iface->snapshot = gtk_path_paintable_snapshot;
|
||||
iface->get_flags = gtk_path_paintable_get_flags;
|
||||
}
|
||||
|
||||
/* When defining the GType, we need to implement the GdkPaintable interface */
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkPathPaintable, gtk_path_paintable, G_TYPE_OBJECT,
|
||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
|
||||
gtk_path_paintable_paintable_init))
|
||||
|
||||
/* Here's the boilerplate for the GObject declaration.
|
||||
* We don't need to do anything special here, because we keep no
|
||||
* data of our own.
|
||||
*/
|
||||
static void
|
||||
gtk_path_paintable_class_init (GtkPathPaintableClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_paintable_init (GtkPathPaintable *self)
|
||||
{
|
||||
}
|
||||
|
||||
/* And finally, we add a simple constructor.
|
||||
* It is declared in the header so that the other examples
|
||||
* can use it.
|
||||
*/
|
||||
GdkPaintable *
|
||||
gtk_path_paintable_new (GskPath *path,
|
||||
GdkPaintable *background,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
GtkPathPaintable *self;
|
||||
|
||||
self = g_object_new (GTK_TYPE_PATH_PAINTABLE, NULL);
|
||||
self->path = path;
|
||||
self->background = background;
|
||||
if (self->background)
|
||||
{
|
||||
g_signal_connect_swapped (self->background, "invalidate-contents", G_CALLBACK (gdk_paintable_invalidate_contents), self);
|
||||
g_signal_connect_swapped (self->background, "invalidate-size", G_CALLBACK (gdk_paintable_invalidate_size), self);
|
||||
}
|
||||
self->width = width;
|
||||
self->height = height;
|
||||
|
||||
return GDK_PAINTABLE (self);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_path_paintable_set_path (GtkPathPaintable *self,
|
||||
GskPath *path)
|
||||
{
|
||||
g_clear_pointer (&self->path, gsk_path_unref);
|
||||
self->path = gsk_path_ref (path);
|
||||
|
||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
||||
}
|
||||
|
||||
static GskPath *
|
||||
create_hexagon (GtkWidget *widget)
|
||||
{
|
||||
GskPathBuilder *builder;
|
||||
|
||||
builder = gsk_path_builder_new ();
|
||||
|
||||
gsk_path_builder_move_to (builder, 120, 0);
|
||||
gsk_path_builder_line_to (builder, 360, 0);
|
||||
gsk_path_builder_line_to (builder, 480, 208);
|
||||
gsk_path_builder_line_to (builder, 360, 416);
|
||||
gsk_path_builder_line_to (builder, 120, 416);
|
||||
gsk_path_builder_line_to (builder, 0, 208);
|
||||
gsk_path_builder_close (builder);
|
||||
|
||||
return gsk_path_builder_free_to_path (builder);
|
||||
}
|
||||
|
||||
static GskPath *
|
||||
create_path_from_text (GtkWidget *widget)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
cairo_t *cr;
|
||||
cairo_path_t *path;
|
||||
PangoLayout *layout;
|
||||
PangoFontDescription *desc;
|
||||
GskPath *result;
|
||||
|
||||
surface = cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA, NULL);
|
||||
cr = cairo_create (surface);
|
||||
|
||||
layout = gtk_widget_create_pango_layout (widget, "Pango power!\nPango power!\nPango power!");
|
||||
desc = pango_font_description_from_string ("sans bold 36");
|
||||
pango_layout_set_font_description (layout, desc);
|
||||
pango_font_description_free (desc);
|
||||
|
||||
pango_cairo_layout_path (cr, layout);
|
||||
path = cairo_copy_path_flat (cr);
|
||||
result = gsk_path_new_from_cairo (path);
|
||||
|
||||
cairo_path_destroy (path);
|
||||
g_object_unref (layout);
|
||||
cairo_destroy (cr);
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
build_path (GskPathOperation op,
|
||||
const graphene_point_t *pts,
|
||||
gsize n_pts,
|
||||
float weight,
|
||||
gpointer user_data)
|
||||
{
|
||||
GskPathBuilder *builder = user_data;
|
||||
|
||||
switch (op)
|
||||
{
|
||||
case GSK_PATH_MOVE:
|
||||
gsk_path_builder_move_to (builder, pts[0].x, pts[0].y);
|
||||
break;
|
||||
|
||||
case GSK_PATH_CLOSE:
|
||||
gsk_path_builder_close (builder);
|
||||
break;
|
||||
|
||||
case GSK_PATH_LINE:
|
||||
gsk_path_builder_line_to (builder, pts[1].x, pts[1].y);
|
||||
break;
|
||||
|
||||
case GSK_PATH_CURVE:
|
||||
gsk_path_builder_curve_to (builder, pts[1].x, pts[1].y, pts[2].x, pts[2].y, pts[3].x, pts[3].y);
|
||||
break;
|
||||
|
||||
case GSK_PATH_CONIC:
|
||||
gsk_path_builder_conic_to (builder, pts[1].x, pts[1].y, pts[2].x, pts[2].y, weight);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
update_path (GtkWidget *widget,
|
||||
GdkFrameClock *frame_clock,
|
||||
gpointer measure)
|
||||
{
|
||||
float progress = gdk_frame_clock_get_frame_time (frame_clock) % (60 * G_USEC_PER_SEC) / (float) (30 * G_USEC_PER_SEC);
|
||||
GskPathBuilder *builder;
|
||||
GskPath *path;
|
||||
graphene_point_t pos;
|
||||
graphene_vec2_t tangent;
|
||||
GskStroke *stroke;
|
||||
|
||||
builder = gsk_path_builder_new ();
|
||||
gsk_path_builder_add_segment (builder,
|
||||
measure,
|
||||
#if 1
|
||||
0.0, gsk_path_measure_get_length (measure));
|
||||
#else
|
||||
progress > 1 ? (progress - 1) * gsk_path_measure_get_length (measure) : 0.0,
|
||||
(progress < 1 ? progress : 1.0) * gsk_path_measure_get_length (measure));
|
||||
#endif
|
||||
|
||||
path = gsk_path_builder_free_to_path (builder);
|
||||
|
||||
stroke = gsk_stroke_new (1);
|
||||
gsk_stroke_set_dash (stroke, (float[2]) { 10, 5 }, 2);
|
||||
gsk_stroke_set_dash_offset (stroke, - (gdk_frame_clock_get_frame_time (frame_clock) % G_USEC_PER_SEC) * 15. / G_USEC_PER_SEC);
|
||||
builder = gsk_path_builder_new ();
|
||||
gsk_path_dash (path, stroke, 0.2, build_path, builder);
|
||||
gsk_path_unref (path);
|
||||
|
||||
gsk_path_measure_get_point (measure,
|
||||
(progress > 1 ? (progress - 1) : progress) * gsk_path_measure_get_length (measure),
|
||||
&pos,
|
||||
&tangent);
|
||||
gsk_path_builder_move_to (builder, pos.x + 5 * graphene_vec2_get_x (&tangent), pos.y + 5 * graphene_vec2_get_y (&tangent));
|
||||
gsk_path_builder_line_to (builder, pos.x + 3 * graphene_vec2_get_y (&tangent), pos.y + 3 * graphene_vec2_get_x (&tangent));
|
||||
gsk_path_builder_line_to (builder, pos.x - 3 * graphene_vec2_get_y (&tangent), pos.y - 3 * graphene_vec2_get_x (&tangent));
|
||||
gsk_path_builder_close (builder);
|
||||
|
||||
path = gsk_path_builder_free_to_path (builder);
|
||||
|
||||
gtk_path_paintable_set_path (GTK_PATH_PAINTABLE (gtk_picture_get_paintable (GTK_PICTURE (widget))),
|
||||
path);
|
||||
gsk_path_unref (path);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_path_fill (GtkWidget *do_widget)
|
||||
{
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
GtkWidget *picture;
|
||||
GdkPaintable *paintable;
|
||||
GtkMediaStream *stream;
|
||||
GskPath *path;
|
||||
graphene_rect_t bounds;
|
||||
GskPathMeasure *measure;
|
||||
|
||||
window = gtk_window_new ();
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Path Fill");
|
||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||
|
||||
#if 0
|
||||
stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm");
|
||||
#else
|
||||
stream = gtk_nuclear_media_stream_new ();
|
||||
#endif
|
||||
gtk_media_stream_play (stream);
|
||||
gtk_media_stream_set_loop (stream, TRUE);
|
||||
|
||||
path = create_hexagon (window);
|
||||
path = create_path_from_text (window);
|
||||
gsk_path_get_bounds (path, &bounds);
|
||||
|
||||
paintable = gtk_path_paintable_new (path,
|
||||
GDK_PAINTABLE (stream),
|
||||
bounds.origin.x + bounds.size.width,
|
||||
bounds.origin.y + bounds.size.height);
|
||||
picture = gtk_picture_new_for_paintable (paintable);
|
||||
measure = gsk_path_measure_new (path);
|
||||
gtk_widget_add_tick_callback (picture, update_path, measure, (GDestroyNotify) gsk_path_measure_unref);
|
||||
gtk_picture_set_keep_aspect_ratio (GTK_PICTURE (picture), FALSE);
|
||||
gtk_picture_set_can_shrink (GTK_PICTURE (picture), FALSE);
|
||||
g_object_unref (paintable);
|
||||
|
||||
gtk_window_set_child (GTK_WINDOW (window), picture);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_window_destroy (GTK_WINDOW (window));
|
||||
|
||||
return window;
|
||||
}
|
338
demos/gtk-demo/path_maze.c
Normal file
338
demos/gtk-demo/path_maze.c
Normal file
@@ -0,0 +1,338 @@
|
||||
/* Path/Maze
|
||||
*
|
||||
* This demo shows how to use a GskPath to create a maze and use
|
||||
* gsk_path_measure_get_closest_point() to check the mouse stays
|
||||
* on the path.
|
||||
*
|
||||
* It also shows off the performance of GskPath (or not) as this
|
||||
* is a rather complex path.
|
||||
*/
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "paintable.h"
|
||||
|
||||
#define MAZE_GRID_SIZE 20
|
||||
#define MAZE_STROKE_SIZE_ACTIVE (MAZE_GRID_SIZE - 4)
|
||||
#define MAZE_STROKE_SIZE_INACTIVE (MAZE_GRID_SIZE - 12)
|
||||
#define MAZE_WIDTH 31
|
||||
#define MAZE_HEIGHT 21
|
||||
|
||||
#define GTK_TYPE_MAZE (gtk_maze_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (GtkMaze, gtk_maze, GTK, MAZE, GtkWidget)
|
||||
|
||||
struct _GtkMaze
|
||||
{
|
||||
GtkWidget parent_instance;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
GskPath *path;
|
||||
GskPathMeasure *measure;
|
||||
GdkPaintable *background;
|
||||
|
||||
gboolean active;
|
||||
};
|
||||
|
||||
struct _GtkMazeClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GtkMaze, gtk_maze, GTK_TYPE_WIDGET)
|
||||
|
||||
static void
|
||||
gtk_maze_measure (GtkWidget *widget,
|
||||
GtkOrientation orientation,
|
||||
int for_size,
|
||||
int *minimum,
|
||||
int *natural,
|
||||
int *minimum_baseline,
|
||||
int *natural_baseline)
|
||||
{
|
||||
GtkMaze *self = GTK_MAZE (widget);
|
||||
|
||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
||||
*minimum = *natural = self->width;
|
||||
else
|
||||
*minimum = *natural = self->height;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_maze_snapshot (GtkWidget *widget,
|
||||
GdkSnapshot *snapshot)
|
||||
{
|
||||
GtkMaze *self = GTK_MAZE (widget);
|
||||
double width = gtk_widget_get_width (widget);
|
||||
double height = gtk_widget_get_height (widget);
|
||||
GskStroke *stroke;
|
||||
|
||||
stroke = gsk_stroke_new (MAZE_STROKE_SIZE_INACTIVE);
|
||||
if (self->active)
|
||||
gsk_stroke_set_line_width (stroke, MAZE_STROKE_SIZE_ACTIVE);
|
||||
gsk_stroke_set_line_join (stroke, GSK_LINE_JOIN_ROUND);
|
||||
gsk_stroke_set_line_cap (stroke, GSK_LINE_CAP_ROUND);
|
||||
gtk_snapshot_push_stroke (snapshot, self->path, stroke);
|
||||
gsk_stroke_free (stroke);
|
||||
|
||||
if (self->background)
|
||||
{
|
||||
gdk_paintable_snapshot (self->background, snapshot, width, height);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_snapshot_append_linear_gradient (snapshot,
|
||||
&GRAPHENE_RECT_INIT (0, 0, width, height),
|
||||
&GRAPHENE_POINT_INIT (0, 0),
|
||||
&GRAPHENE_POINT_INIT (width, height),
|
||||
(GskColorStop[8]) {
|
||||
{ 0.0, { 1.0, 0.0, 0.0, 1.0 } },
|
||||
{ 0.2, { 1.0, 0.0, 0.0, 1.0 } },
|
||||
{ 0.3, { 1.0, 1.0, 0.0, 1.0 } },
|
||||
{ 0.4, { 0.0, 1.0, 0.0, 1.0 } },
|
||||
{ 0.6, { 0.0, 1.0, 1.0, 1.0 } },
|
||||
{ 0.7, { 0.0, 0.0, 1.0, 1.0 } },
|
||||
{ 0.8, { 1.0, 0.0, 1.0, 1.0 } },
|
||||
{ 1.0, { 1.0, 0.0, 1.0, 1.0 } }
|
||||
},
|
||||
8);
|
||||
}
|
||||
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_maze_dispose (GObject *object)
|
||||
{
|
||||
GtkMaze *self = GTK_MAZE (object);
|
||||
|
||||
g_clear_pointer (&self->path, gsk_path_unref);
|
||||
g_clear_pointer (&self->measure, gsk_path_measure_unref);
|
||||
if (self->background)
|
||||
{
|
||||
g_signal_handlers_disconnect_matched (self->background, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
|
||||
g_clear_object (&self->background);
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (gtk_maze_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_maze_class_init (GtkMazeClass *klass)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = gtk_maze_dispose;
|
||||
|
||||
widget_class->measure = gtk_maze_measure;
|
||||
widget_class->snapshot = gtk_maze_snapshot;
|
||||
}
|
||||
|
||||
static void
|
||||
pointer_motion (GtkEventControllerMotion *controller,
|
||||
double x,
|
||||
double y,
|
||||
GtkMaze *self)
|
||||
{
|
||||
if (!self->active)
|
||||
return;
|
||||
|
||||
if (gsk_path_measure_get_closest_point (self->measure, &GRAPHENE_POINT_INIT (x, y), NULL) <= MAZE_STROKE_SIZE_ACTIVE / 2.0f)
|
||||
return;
|
||||
|
||||
self->active = FALSE;
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
pointer_leave (GtkEventControllerMotion *controller,
|
||||
GtkMaze *self)
|
||||
{
|
||||
if (!self->active)
|
||||
{
|
||||
self->active = TRUE;
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_maze_init (GtkMaze *self)
|
||||
{
|
||||
GtkEventController *controller;
|
||||
|
||||
controller = GTK_EVENT_CONTROLLER (gtk_event_controller_motion_new ());
|
||||
g_signal_connect (controller, "motion", G_CALLBACK (pointer_motion), self);
|
||||
g_signal_connect (controller, "leave", G_CALLBACK (pointer_leave), self);
|
||||
gtk_widget_add_controller (GTK_WIDGET (self), controller);
|
||||
|
||||
self->active = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_maze_set_path (GtkMaze *self,
|
||||
GskPath *path)
|
||||
{
|
||||
g_clear_pointer (&self->path, gsk_path_unref);
|
||||
g_clear_pointer (&self->measure, gsk_path_measure_unref);
|
||||
self->path = gsk_path_ref (path);
|
||||
self->measure = gsk_path_measure_new (path);
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gtk_maze_new (GskPath *path,
|
||||
GdkPaintable *background,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
GtkMaze *self;
|
||||
|
||||
self = g_object_new (GTK_TYPE_MAZE, NULL);
|
||||
|
||||
gtk_maze_set_path (self, path);
|
||||
gsk_path_unref (path);
|
||||
self->background = background;
|
||||
if (self->background)
|
||||
{
|
||||
g_signal_connect_swapped (self->background, "invalidate-contents", G_CALLBACK (gtk_widget_queue_draw), self);
|
||||
g_signal_connect_swapped (self->background, "invalidate-size", G_CALLBACK (gtk_widget_queue_resize), self);
|
||||
}
|
||||
self->width = width;
|
||||
self->height = height;
|
||||
|
||||
return GTK_WIDGET (self);
|
||||
}
|
||||
|
||||
static void
|
||||
add_point_to_maze (GtkBitset *maze,
|
||||
GskPathBuilder *builder,
|
||||
guint x,
|
||||
guint y)
|
||||
{
|
||||
gboolean set[4] = { };
|
||||
guint dir;
|
||||
|
||||
gtk_bitset_add (maze, y * MAZE_WIDTH + x);
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
set[0] = set[0] || x == 0 || gtk_bitset_contains (maze, y * MAZE_WIDTH + x - 1);
|
||||
set[1] = set[1] || y == 0 || gtk_bitset_contains (maze, (y - 1) * MAZE_WIDTH + x);
|
||||
set[2] = set[2] || x + 1 == MAZE_WIDTH || gtk_bitset_contains (maze, y * MAZE_WIDTH + x + 1);
|
||||
set[3] = set[3] || y + 1 == MAZE_HEIGHT || gtk_bitset_contains (maze, (y + 1) * MAZE_WIDTH + x);
|
||||
|
||||
if (set[0] && set[1] && set[2] && set[3])
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
dir = g_random_int_range (0, 4);
|
||||
}
|
||||
while (set[dir]);
|
||||
|
||||
switch (dir)
|
||||
{
|
||||
case 0:
|
||||
gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_line_to (builder, (x - 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE);
|
||||
add_point_to_maze (maze, builder, x - 1, y);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_line_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y - 0.5) * MAZE_GRID_SIZE);
|
||||
add_point_to_maze (maze, builder, x, y - 1);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_line_to (builder, (x + 1.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE);
|
||||
add_point_to_maze (maze, builder, x + 1, y);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_line_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 1.5) * MAZE_GRID_SIZE);
|
||||
add_point_to_maze (maze, builder, x, y + 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static GskPath *
|
||||
create_path_for_maze (GtkWidget *widget)
|
||||
{
|
||||
GskPathBuilder *builder;
|
||||
GtkBitset *maze;
|
||||
|
||||
builder = gsk_path_builder_new ();
|
||||
maze = gtk_bitset_new_empty ();
|
||||
/* make sure the outer lines are unreachable:
|
||||
* Set the full range, then remove the center again. */
|
||||
gtk_bitset_add_range (maze, 0, MAZE_WIDTH * MAZE_HEIGHT);
|
||||
gtk_bitset_remove_rectangle (maze, MAZE_WIDTH + 1, MAZE_WIDTH - 2, MAZE_HEIGHT - 2, MAZE_WIDTH);
|
||||
|
||||
/* Fill the maze */
|
||||
add_point_to_maze (maze, builder, MAZE_WIDTH / 2, MAZE_HEIGHT / 2);
|
||||
|
||||
/* Add start and stop lines */
|
||||
gsk_path_builder_move_to (builder, 1.5 * MAZE_GRID_SIZE, -0.5 * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_line_to (builder, 1.5 * MAZE_GRID_SIZE, 1.5 * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_move_to (builder, (MAZE_WIDTH - 1.5) * MAZE_GRID_SIZE, (MAZE_HEIGHT - 1.5) * MAZE_GRID_SIZE);
|
||||
gsk_path_builder_line_to (builder, (MAZE_WIDTH - 1.5) * MAZE_GRID_SIZE, (MAZE_HEIGHT + 0.5) * MAZE_GRID_SIZE);
|
||||
|
||||
|
||||
gtk_bitset_unref (maze);
|
||||
|
||||
return gsk_path_builder_free_to_path (builder);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_path_maze (GtkWidget *do_widget)
|
||||
{
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
GtkWidget *maze;
|
||||
GtkMediaStream *stream;
|
||||
GskPath *path;
|
||||
|
||||
window = gtk_window_new ();
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Follow the maze with the mouse");
|
||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||
|
||||
#if 0
|
||||
stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm");
|
||||
#else
|
||||
stream = gtk_nuclear_media_stream_new ();
|
||||
#endif
|
||||
gtk_media_stream_play (stream);
|
||||
gtk_media_stream_set_loop (stream, TRUE);
|
||||
|
||||
path = create_path_for_maze (window);
|
||||
|
||||
maze = gtk_maze_new (path,
|
||||
GDK_PAINTABLE (stream),
|
||||
MAZE_WIDTH * MAZE_GRID_SIZE,
|
||||
MAZE_HEIGHT * MAZE_GRID_SIZE);
|
||||
|
||||
gtk_window_set_child (GTK_WINDOW (window), maze);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_window_destroy (GTK_WINDOW (window));
|
||||
|
||||
return window;
|
||||
}
|
590
demos/gtk-demo/path_text.c
Normal file
590
demos/gtk-demo/path_text.c
Normal file
@@ -0,0 +1,590 @@
|
||||
/* Path/Text
|
||||
*
|
||||
* This demo shows how to use GskPath to animate a path along another path.
|
||||
*/
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#define GTK_TYPE_PATH_WIDGET (gtk_path_widget_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (GtkPathWidget, gtk_path_widget, GTK, PATH_WIDGET, GtkWidget)
|
||||
|
||||
#define POINT_SIZE 8
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_TEXT,
|
||||
PROP_EDITABLE,
|
||||
N_PROPS
|
||||
};
|
||||
|
||||
struct _GtkPathWidget
|
||||
{
|
||||
GtkWidget parent_instance;
|
||||
|
||||
char *text;
|
||||
gboolean editable;
|
||||
|
||||
graphene_point_t points[4];
|
||||
|
||||
guint active_point;
|
||||
float line_closest;
|
||||
|
||||
GskPath *line_path;
|
||||
GskPathMeasure *line_measure;
|
||||
GskPath *text_path;
|
||||
|
||||
GdkPaintable *background;
|
||||
};
|
||||
|
||||
struct _GtkPathWidgetClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
static GParamSpec *properties[N_PROPS] = { NULL, };
|
||||
|
||||
G_DEFINE_TYPE (GtkPathWidget, gtk_path_widget, GTK_TYPE_WIDGET)
|
||||
|
||||
static GskPath *
|
||||
create_path_from_text (GtkWidget *widget,
|
||||
const char *text)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
cairo_t *cr;
|
||||
cairo_path_t *path;
|
||||
PangoLayout *layout;
|
||||
PangoFontDescription *desc;
|
||||
GskPath *result;
|
||||
|
||||
surface = cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA, NULL);
|
||||
cr = cairo_create (surface);
|
||||
|
||||
layout = gtk_widget_create_pango_layout (widget, text);
|
||||
desc = pango_font_description_from_string ("sans bold 36");
|
||||
pango_layout_set_font_description (layout, desc);
|
||||
pango_font_description_free (desc);
|
||||
|
||||
cairo_move_to (cr, 0, - pango_layout_get_baseline (layout) / (double) PANGO_SCALE);
|
||||
pango_cairo_layout_path (cr, layout);
|
||||
path = cairo_copy_path_flat (cr);
|
||||
result = gsk_path_new_from_cairo (path);
|
||||
|
||||
cairo_path_destroy (path);
|
||||
g_object_unref (layout);
|
||||
cairo_destroy (cr);
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GskPathMeasure *measure;
|
||||
GskPathBuilder *builder;
|
||||
double scale;
|
||||
} GtkPathTransform;
|
||||
|
||||
static void
|
||||
gtk_path_transform_point (GskPathMeasure *measure,
|
||||
const graphene_point_t *pt,
|
||||
float scale,
|
||||
graphene_point_t *res)
|
||||
{
|
||||
graphene_vec2_t tangent;
|
||||
|
||||
gsk_path_measure_get_point (measure, pt->x * scale, res, &tangent);
|
||||
|
||||
res->x -= pt->y * scale * graphene_vec2_get_y (&tangent);
|
||||
res->y += pt->y * scale * graphene_vec2_get_x (&tangent);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_path_transform_op (GskPathOperation op,
|
||||
const graphene_point_t *pts,
|
||||
gsize n_pts,
|
||||
float weight,
|
||||
gpointer data)
|
||||
{
|
||||
GtkPathTransform *transform = data;
|
||||
|
||||
switch (op)
|
||||
{
|
||||
case GSK_PATH_MOVE:
|
||||
{
|
||||
graphene_point_t res;
|
||||
gtk_path_transform_point (transform->measure, &pts[0], transform->scale, &res);
|
||||
gsk_path_builder_move_to (transform->builder, res.x, res.y);
|
||||
}
|
||||
break;
|
||||
|
||||
case GSK_PATH_LINE:
|
||||
{
|
||||
graphene_point_t res;
|
||||
gtk_path_transform_point (transform->measure, &pts[1], transform->scale, &res);
|
||||
gsk_path_builder_line_to (transform->builder, res.x, res.y);
|
||||
}
|
||||
break;
|
||||
|
||||
case GSK_PATH_CURVE:
|
||||
{
|
||||
graphene_point_t res[3];
|
||||
gtk_path_transform_point (transform->measure, &pts[1], transform->scale, &res[0]);
|
||||
gtk_path_transform_point (transform->measure, &pts[2], transform->scale, &res[1]);
|
||||
gtk_path_transform_point (transform->measure, &pts[3], transform->scale, &res[2]);
|
||||
gsk_path_builder_curve_to (transform->builder, res[0].x, res[0].y, res[1].x, res[1].y, res[2].x, res[2].y);
|
||||
}
|
||||
break;
|
||||
|
||||
case GSK_PATH_CONIC:
|
||||
{
|
||||
graphene_point_t res[2];
|
||||
gtk_path_transform_point (transform->measure, &pts[1], transform->scale, &res[0]);
|
||||
gtk_path_transform_point (transform->measure, &pts[2], transform->scale, &res[1]);
|
||||
gsk_path_builder_conic_to (transform->builder, res[0].x, res[0].y, res[1].x, res[1].y, weight);
|
||||
}
|
||||
break;
|
||||
|
||||
case GSK_PATH_CLOSE:
|
||||
gsk_path_builder_close (transform->builder);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GskPath *
|
||||
gtk_path_transform (GskPathMeasure *measure,
|
||||
GskPath *path)
|
||||
{
|
||||
GtkPathTransform transform = { measure, gsk_path_builder_new () };
|
||||
graphene_rect_t bounds;
|
||||
|
||||
gsk_path_get_bounds (path, &bounds);
|
||||
if (bounds.origin.x + bounds.size.width > 0)
|
||||
transform.scale = gsk_path_measure_get_length (measure) / (bounds.origin.x + bounds.size.width);
|
||||
else
|
||||
transform.scale = 1.0f;
|
||||
|
||||
gsk_path_foreach (path, GSK_PATH_FOREACH_ALLOW_CURVE, gtk_path_transform_op, &transform);
|
||||
|
||||
return gsk_path_builder_free_to_path (transform.builder);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_clear_text_path (GtkPathWidget *self)
|
||||
{
|
||||
g_clear_pointer (&self->text_path, gsk_path_unref);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_clear_paths (GtkPathWidget *self)
|
||||
{
|
||||
gtk_path_widget_clear_text_path (self);
|
||||
|
||||
g_clear_pointer (&self->line_path, gsk_path_unref);
|
||||
g_clear_pointer (&self->line_measure, gsk_path_measure_unref);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_create_text_path (GtkPathWidget *self)
|
||||
{
|
||||
GskPath *path;
|
||||
|
||||
gtk_path_widget_clear_text_path (self);
|
||||
|
||||
if (self->line_measure == NULL)
|
||||
return;
|
||||
|
||||
path = create_path_from_text (GTK_WIDGET (self), self->text);
|
||||
self->text_path = gtk_path_transform (self->line_measure, path);
|
||||
|
||||
gsk_path_unref (path);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_create_paths (GtkPathWidget *self)
|
||||
{
|
||||
double width = gtk_widget_get_width (GTK_WIDGET (self));
|
||||
double height = gtk_widget_get_height (GTK_WIDGET (self));
|
||||
GskPathBuilder *builder;
|
||||
|
||||
gtk_path_widget_clear_paths (self);
|
||||
|
||||
if (width <= 0 || height <= 0)
|
||||
return;
|
||||
|
||||
builder = gsk_path_builder_new ();
|
||||
gsk_path_builder_move_to (builder,
|
||||
self->points[0].x * width, self->points[0].y * height);
|
||||
gsk_path_builder_curve_to (builder,
|
||||
self->points[1].x * width, self->points[1].y * height,
|
||||
self->points[2].x * width, self->points[2].y * height,
|
||||
self->points[3].x * width, self->points[3].y * height);
|
||||
self->line_path = gsk_path_builder_free_to_path (builder);
|
||||
|
||||
self->line_measure = gsk_path_measure_new (self->line_path);
|
||||
|
||||
gtk_path_widget_create_text_path (self);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_allocate (GtkWidget *widget,
|
||||
int width,
|
||||
int height,
|
||||
int baseline)
|
||||
{
|
||||
GtkPathWidget *self = GTK_PATH_WIDGET (widget);
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_path_widget_parent_class)->size_allocate (widget, width, height, baseline);
|
||||
|
||||
gtk_path_widget_create_paths (self);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_snapshot (GtkWidget *widget,
|
||||
GtkSnapshot *snapshot)
|
||||
{
|
||||
GtkPathWidget *self = GTK_PATH_WIDGET (widget);
|
||||
double width = gtk_widget_get_width (widget);
|
||||
double height = gtk_widget_get_height (widget);
|
||||
GskPath *path;
|
||||
GskStroke *stroke;
|
||||
gsize i;
|
||||
|
||||
/* frosted glass the background */
|
||||
gtk_snapshot_push_blur (snapshot, 100);
|
||||
gdk_paintable_snapshot (self->background, snapshot, width, height);
|
||||
gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 1, 1, 1, 0.6 }, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
/* draw the text */
|
||||
if (self->text_path)
|
||||
{
|
||||
gtk_snapshot_push_fill (snapshot, self->text_path, GSK_FILL_RULE_WINDING);
|
||||
gdk_paintable_snapshot (self->background, snapshot, width, height);
|
||||
|
||||
/* ... with an emboss effect */
|
||||
stroke = gsk_stroke_new (2.0);
|
||||
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT(1, 1));
|
||||
gtk_snapshot_push_stroke (snapshot, self->text_path, stroke);
|
||||
gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 0.2 }, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||
gsk_stroke_free (stroke);
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
gtk_snapshot_pop (snapshot);
|
||||
}
|
||||
|
||||
if (self->editable && self->line_path)
|
||||
{
|
||||
GskPathBuilder *builder;
|
||||
|
||||
/* draw the control line */
|
||||
stroke = gsk_stroke_new (1.0);
|
||||
gtk_snapshot_push_stroke (snapshot, self->line_path, stroke);
|
||||
gsk_stroke_free (stroke);
|
||||
gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
/* draw the points */
|
||||
builder = gsk_path_builder_new ();
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
gsk_path_builder_add_circle (builder, &GRAPHENE_POINT_INIT (self->points[i].x * width, self->points[i].y * height), POINT_SIZE);
|
||||
}
|
||||
path = gsk_path_builder_free_to_path (builder);
|
||||
|
||||
gtk_snapshot_push_fill (snapshot, path, GSK_FILL_RULE_WINDING);
|
||||
gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 1, 1, 1, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
stroke = gsk_stroke_new (1.0);
|
||||
gtk_snapshot_push_stroke (snapshot, path, stroke);
|
||||
gsk_stroke_free (stroke);
|
||||
gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
gsk_path_unref (path);
|
||||
}
|
||||
|
||||
if (self->line_closest >= 0)
|
||||
{
|
||||
GskPathBuilder *builder;
|
||||
graphene_point_t closest;
|
||||
|
||||
builder = gsk_path_builder_new ();
|
||||
gsk_path_measure_get_point (self->line_measure, self->line_closest, &closest, NULL);
|
||||
gsk_path_builder_add_circle (builder, &closest, POINT_SIZE);
|
||||
path = gsk_path_builder_free_to_path (builder);
|
||||
|
||||
gtk_snapshot_push_fill (snapshot, path, GSK_FILL_RULE_WINDING);
|
||||
gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 1, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||
gtk_snapshot_pop (snapshot);
|
||||
|
||||
gsk_path_unref (path);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_set_text (GtkPathWidget *self,
|
||||
const char *text)
|
||||
{
|
||||
if (g_strcmp0 (self->text, text) == 0)
|
||||
return;
|
||||
|
||||
g_free (self->text);
|
||||
self->text = g_strdup (text);
|
||||
|
||||
gtk_path_widget_create_paths (self);
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TEXT]);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_set_editable (GtkPathWidget *self,
|
||||
gboolean editable)
|
||||
{
|
||||
if (self->editable == editable)
|
||||
return;
|
||||
|
||||
self->editable = editable;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EDITABLE]);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
|
||||
{
|
||||
GtkPathWidget *self = GTK_PATH_WIDGET (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_TEXT:
|
||||
gtk_path_widget_set_text (self, g_value_get_string (value));
|
||||
break;
|
||||
|
||||
case PROP_EDITABLE:
|
||||
gtk_path_widget_set_editable (self, g_value_get_boolean (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GtkPathWidget *self = GTK_PATH_WIDGET (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_TEXT:
|
||||
g_value_set_string (value, self->text);
|
||||
break;
|
||||
|
||||
case PROP_EDITABLE:
|
||||
g_value_set_boolean (value, self->editable);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_dispose (GObject *object)
|
||||
{
|
||||
GtkPathWidget *self = GTK_PATH_WIDGET (object);
|
||||
|
||||
gtk_path_widget_clear_paths (self);
|
||||
|
||||
G_OBJECT_CLASS (gtk_path_widget_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_class_init (GtkPathWidgetClass *klass)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = gtk_path_widget_dispose;
|
||||
object_class->set_property = gtk_path_widget_set_property;
|
||||
object_class->get_property = gtk_path_widget_get_property;
|
||||
|
||||
widget_class->size_allocate = gtk_path_widget_allocate;
|
||||
widget_class->snapshot = gtk_path_widget_snapshot;
|
||||
|
||||
properties[PROP_TEXT] =
|
||||
g_param_spec_string ("text",
|
||||
"text",
|
||||
"Text transformed along a path",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
properties[PROP_EDITABLE] =
|
||||
g_param_spec_boolean ("editable",
|
||||
"editable",
|
||||
"If the path can be edited by the user",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||
}
|
||||
|
||||
static void
|
||||
drag_begin (GtkGestureDrag *gesture,
|
||||
double x,
|
||||
double y,
|
||||
GtkPathWidget *self)
|
||||
{
|
||||
graphene_point_t mouse = GRAPHENE_POINT_INIT (x, y);
|
||||
double width = gtk_widget_get_width (GTK_WIDGET (self));
|
||||
double height = gtk_widget_get_height (GTK_WIDGET (self));
|
||||
gsize i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (graphene_point_distance (&GRAPHENE_POINT_INIT (self->points[i].x * width, self->points[i].y * height), &mouse, NULL, NULL) <= POINT_SIZE)
|
||||
{
|
||||
self->active_point = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == 4)
|
||||
{
|
||||
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
drag_update (GtkGestureDrag *drag,
|
||||
double offset_x,
|
||||
double offset_y,
|
||||
GtkPathWidget *self)
|
||||
{
|
||||
double width = gtk_widget_get_width (GTK_WIDGET (self));
|
||||
double height = gtk_widget_get_height (GTK_WIDGET (self));
|
||||
double start_x, start_y;
|
||||
|
||||
gtk_gesture_drag_get_start_point (drag, &start_x, &start_y);
|
||||
|
||||
self->points[self->active_point] = GRAPHENE_POINT_INIT ((start_x + offset_x) / width,
|
||||
(start_y + offset_y) / height);
|
||||
self->points[self->active_point].x = CLAMP (self->points[self->active_point].x, 0, 1);
|
||||
self->points[self->active_point].y = CLAMP (self->points[self->active_point].y, 0, 1);
|
||||
|
||||
gtk_path_widget_create_paths (self);
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
pointer_motion (GtkEventControllerMotion *controller,
|
||||
double x,
|
||||
double y,
|
||||
GtkPathWidget *self)
|
||||
{
|
||||
gsk_path_measure_get_closest_point_full (self->line_measure,
|
||||
&GRAPHENE_POINT_INIT (x, y),
|
||||
INFINITY,
|
||||
&self->line_closest,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
pointer_leave (GtkEventControllerMotion *controller,
|
||||
GtkPathWidget *self)
|
||||
{
|
||||
self->line_closest = -1;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_path_widget_init (GtkPathWidget *self)
|
||||
{
|
||||
GtkEventController *controller;
|
||||
|
||||
controller = GTK_EVENT_CONTROLLER (gtk_gesture_drag_new ());
|
||||
g_signal_connect (controller, "drag-begin", G_CALLBACK (drag_begin), self);
|
||||
g_signal_connect (controller, "drag-update", G_CALLBACK (drag_update), self);
|
||||
g_signal_connect (controller, "drag-end", G_CALLBACK (drag_update), self);
|
||||
gtk_widget_add_controller (GTK_WIDGET (self), controller);
|
||||
|
||||
controller = GTK_EVENT_CONTROLLER (gtk_event_controller_motion_new ());
|
||||
g_signal_connect (controller, "enter", G_CALLBACK (pointer_motion), self);
|
||||
g_signal_connect (controller, "motion", G_CALLBACK (pointer_motion), self);
|
||||
g_signal_connect (controller, "leave", G_CALLBACK (pointer_leave), self);
|
||||
gtk_widget_add_controller (GTK_WIDGET (self), controller);
|
||||
|
||||
self->line_closest = -1;
|
||||
|
||||
self->points[0] = GRAPHENE_POINT_INIT (0.1, 0.9);
|
||||
self->points[1] = GRAPHENE_POINT_INIT (0.3, 0.1);
|
||||
self->points[2] = GRAPHENE_POINT_INIT (0.7, 0.1);
|
||||
self->points[3] = GRAPHENE_POINT_INIT (0.9, 0.9);
|
||||
|
||||
self->background = GDK_PAINTABLE (gdk_texture_new_from_resource ("/sliding_puzzle/portland-rose.jpg"));
|
||||
|
||||
gtk_path_widget_set_text (self, "It's almost working");
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gtk_path_widget_new (void)
|
||||
{
|
||||
GtkPathWidget *self;
|
||||
|
||||
self = g_object_new (GTK_TYPE_PATH_WIDGET, NULL);
|
||||
|
||||
return GTK_WIDGET (self);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_path_text (GtkWidget *do_widget)
|
||||
{
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
GtkBuilder *builder;
|
||||
|
||||
g_type_ensure (GTK_TYPE_PATH_WIDGET);
|
||||
|
||||
builder = gtk_builder_new_from_resource ("/path_text/path_text.ui");
|
||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window);
|
||||
g_object_unref (builder);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_window_destroy (GTK_WINDOW (window));
|
||||
|
||||
return window;
|
||||
}
|
38
demos/gtk-demo/path_text.ui
Normal file
38
demos/gtk-demo/path_text.ui
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window">
|
||||
<property name="title" translatable="yes">Text along a Path</property>
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar">
|
||||
<child type="end">
|
||||
<object class="GtkToggleButton" id="edit-toggle">
|
||||
<property name="icon-name">document-edit-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkRevealer">
|
||||
<property name="reveal-child" bind-source="edit-toggle" bind-property="active" bind-flags="sync-create"></property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="text">
|
||||
<property name="text">Through the looking glass</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkPathWidget" id="view">
|
||||
<property name="editable" bind-source="edit-toggle" bind-property="active" bind-flags="sync-create"></property>
|
||||
<property name="text" bind-source="text" bind-property="text" bind-flags="sync-create"></property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="vexpand">true</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
@@ -1,9 +1,8 @@
|
||||
/* Pickers
|
||||
* #Keywords: GtkColorChooser, GtkFontChooser, GtkFileChooser,
|
||||
* #Keywords: GtkApplicationChooser
|
||||
* #Keywords: GtkColorChooser, GtkFontChooser, GtkApplicationChooser
|
||||
*
|
||||
* These widgets are mainly intended for use in preference dialogs.
|
||||
* They allow to select colors, fonts, files, directories and applications.
|
||||
* They allow to select colors, fonts, directories and applications.
|
||||
*
|
||||
* This demo shows both the default appearance for these dialogs,
|
||||
* as well as some of the customizations that are possible.
|
||||
@@ -63,9 +62,6 @@ do_pickers (GtkWidget *do_widget)
|
||||
|
||||
if (!window)
|
||||
{
|
||||
char *dir;
|
||||
GFile *file;
|
||||
|
||||
window = gtk_window_new ();
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
@@ -123,55 +119,14 @@ do_pickers (GtkWidget *do_widget)
|
||||
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 2, 1, 1, 1);
|
||||
|
||||
label = gtk_label_new ("File:");
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1);
|
||||
|
||||
picker = gtk_file_chooser_button_new ("Pick a File",
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1);
|
||||
|
||||
picker = gtk_file_chooser_button_new ("Pick a File",
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
|
||||
dir = g_get_current_dir ();
|
||||
file = g_file_new_for_path (dir);
|
||||
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (picker), file, NULL);
|
||||
g_object_unref (file);
|
||||
g_free (dir);
|
||||
|
||||
gtk_file_chooser_add_choice (GTK_FILE_CHOOSER (picker),
|
||||
"choice",
|
||||
"Encoding",
|
||||
(const char *[]) { "option1", "option2", NULL },
|
||||
(const char *[]) { "UTF-8", "Other Encoding", NULL });
|
||||
gtk_file_chooser_set_choice (GTK_FILE_CHOOSER (picker), "choice", "option1");
|
||||
gtk_file_chooser_add_choice (GTK_FILE_CHOOSER (picker),
|
||||
"check",
|
||||
"Read backwards",
|
||||
NULL, NULL);
|
||||
gtk_file_chooser_set_choice (GTK_FILE_CHOOSER (picker), "check", "false");
|
||||
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 2, 2, 1, 1);
|
||||
|
||||
label = gtk_label_new ("Folder:");
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
picker = gtk_file_chooser_button_new ("Pick a Folder",
|
||||
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
|
||||
|
||||
label = gtk_label_new ("Mail:");
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
picker = gtk_app_chooser_button_new ("x-scheme-handler/mailto");
|
||||
gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (picker), TRUE);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 4, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 4, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
|
@@ -31,7 +31,7 @@ void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec
|
||||
float propagation_length = time * wave_speed;
|
||||
|
||||
float t = (propagation_length - distance_from_center) / wave_length;
|
||||
float offset_magnitude = 0;
|
||||
float offset_magnitude = 0.0;
|
||||
if (t > 0.0)
|
||||
offset_magnitude = decay(wave_height * sin(t * 2.0 * PI), t);
|
||||
|
||||
|
@@ -474,7 +474,7 @@ suggestion_entry_size_allocate (GtkWidget *widget,
|
||||
gtk_widget_set_size_request (self->popup, gtk_widget_get_allocated_width (GTK_WIDGET (self)), -1);
|
||||
gtk_widget_queue_resize (self->popup);
|
||||
|
||||
gtk_native_check_resize (GTK_NATIVE (self->popup));
|
||||
gtk_popover_present (GTK_POPOVER (self->popup));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/* Benchmark/Themes
|
||||
*
|
||||
* This demo switches themes like a maniac, like some of you.
|
||||
* This demo continuously switches themes, like some of you.
|
||||
*
|
||||
* Warning: This demo involves rapidly flashing changes and may
|
||||
* be hazardous to photosensitive viewers.
|
||||
|
@@ -10,11 +10,11 @@
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
static void
|
||||
open_dialog_response_cb (GtkWidget *dialog,
|
||||
int response,
|
||||
GtkWidget *video)
|
||||
open_dialog_response_cb (GtkNativeDialog *dialog,
|
||||
int response,
|
||||
GtkWidget *video)
|
||||
{
|
||||
gtk_widget_hide (dialog);
|
||||
gtk_native_dialog_hide (dialog);
|
||||
|
||||
if (response == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
@@ -25,32 +25,30 @@ open_dialog_response_cb (GtkWidget *dialog,
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
gtk_window_destroy (GTK_WINDOW (dialog));
|
||||
gtk_native_dialog_destroy (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
open_clicked_cb (GtkWidget *button,
|
||||
GtkWidget *video)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
GtkFileChooserNative *dialog;
|
||||
GtkFileFilter *filter;
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Select a video",
|
||||
dialog = gtk_file_chooser_native_new ("Select a video",
|
||||
GTK_WINDOW (gtk_widget_get_root (button)),
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
"_Cancel", GTK_RESPONSE_CANCEL,
|
||||
"_Open", GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
"_Open",
|
||||
"_Cancel");
|
||||
|
||||
filter = gtk_file_filter_new ();
|
||||
gtk_file_filter_add_mime_type (filter, "video/*");
|
||||
gtk_file_filter_set_name (filter, "Video");
|
||||
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
|
||||
g_object_unref (filter);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
|
||||
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
|
||||
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (open_dialog_response_cb), video);
|
||||
gtk_widget_show (dialog);
|
||||
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -7,25 +7,25 @@ iconbrowser_sources = [
|
||||
]
|
||||
|
||||
iconbrowser_resources = gnome.compile_resources('iconbrowser_resources',
|
||||
'iconbrowser.gresource.xml',
|
||||
source_dir: '.')
|
||||
'iconbrowser.gresource.xml',
|
||||
source_dir: '.',
|
||||
)
|
||||
|
||||
executable('gtk4-icon-browser',
|
||||
iconbrowser_sources, iconbrowser_resources,
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true)
|
||||
sources: [iconbrowser_sources, iconbrowser_resources],
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true,
|
||||
)
|
||||
|
||||
# icons
|
||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
|
||||
foreach size: ['scalable', 'symbolic']
|
||||
install_subdir('data/' + size,
|
||||
install_dir: icontheme_dir
|
||||
)
|
||||
install_subdir('data/' + size, install_dir: icontheme_dir)
|
||||
endforeach
|
||||
|
||||
# desktop file
|
||||
|
@@ -7,4 +7,3 @@ Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=Development;GTK;
|
||||
NoDisplay=true
|
||||
|
@@ -13,9 +13,6 @@
|
||||
</section>
|
||||
</menu>
|
||||
<template class="IconBrowserWindow" parent="GtkApplicationWindow">
|
||||
<style>
|
||||
<class name="devel"/>
|
||||
</style>
|
||||
<property name="title" translatable="yes">Icon Browser</property>
|
||||
<property name="default-width">1024</property>
|
||||
<property name="default-height">768</property>
|
||||
|
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window">
|
||||
<style>
|
||||
<class name="devel"/>
|
||||
</style>
|
||||
<property name="title" translatable="yes">Help</property>
|
||||
<property name="default-width">720</property>
|
||||
<property name="default-height">520</property>
|
||||
|
@@ -6,25 +6,25 @@ node_editor_sources = [
|
||||
]
|
||||
|
||||
node_editor_resources = gnome.compile_resources('node_editor_resources',
|
||||
'node-editor.gresource.xml',
|
||||
source_dir: '.')
|
||||
'node-editor.gresource.xml',
|
||||
source_dir: '.',
|
||||
)
|
||||
|
||||
executable('gtk4-node-editor',
|
||||
node_editor_sources, node_editor_resources,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
c_args: [
|
||||
'-DNODE_EDITOR_SOURCE_DIR="@0@/../../testsuite/gsk/compare/"'.format(meson.current_source_dir())
|
||||
] + common_cflags,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: false)
|
||||
sources: [node_editor_sources, node_editor_resources],
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
c_args: [
|
||||
'-DNODE_EDITOR_SOURCE_DIR="@0@/../../testsuite/gsk/compare/"'.format(meson.current_source_dir())
|
||||
] + common_cflags,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: false,
|
||||
)
|
||||
|
||||
# icons, don't install them until we decide to install gtk4-node-editor
|
||||
#icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
|
||||
#foreach size: ['scalable', 'symbolic']
|
||||
# install_subdir('data/' + size,
|
||||
# install_dir: icontheme_dir
|
||||
# )
|
||||
# install_subdir('data/' + size, install_dir: icontheme_dir)
|
||||
#endforeach
|
||||
|
@@ -94,9 +94,6 @@
|
||||
</object>
|
||||
|
||||
<template class="NodeEditorWindow" parent="GtkApplicationWindow">
|
||||
<style>
|
||||
<class name="devel"/>
|
||||
</style>
|
||||
<property name="title" translatable="yes">GTK Node Editor</property>
|
||||
<property name="default-width">1024</property>
|
||||
<property name="default-height">768</property>
|
||||
|
@@ -23,7 +23,7 @@ The **container** node is a special node that allows specifying a list of child
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bottom | `<node>` | color { color: #AF0; } | always |
|
||||
| bottom | `<node>` | color { } | always |
|
||||
| mode | `<blend-mode>` | normal | non-default |
|
||||
| top | `<node>` | color { } | always |
|
||||
|
||||
@@ -48,7 +48,22 @@ Creates a node like `gsk_blur_node_new()` with the given properties.
|
||||
|
||||
Creates a node like `gsk_border_node_new()` with the given properties.
|
||||
|
||||
For the color and width properties, the values follow the typical CSS order of top, right, bottom, left. If the last/left value isn't given, the 2nd/right value is used. If the 3rd/bottom value isn't given, the 1st/top value is used. And if the 2nd/right value also isn't given, the 1st/top value is used for every 4 values.
|
||||
For the color and width properties, the values follow the typical CSS order
|
||||
of top, right, bottom, left. If the last/left value isn't given, the 2nd/right
|
||||
value is used. If the 3rd/bottom value isn't given, the 1st/top value is used.
|
||||
And if the 2nd/right value also isn't given, the 1st/top value is used for
|
||||
every 4 values.
|
||||
|
||||
### cairo
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | none | always |
|
||||
| pixels | `<url>` | none | non-default |
|
||||
| script | `<url>` | none | non-default |
|
||||
|
||||
The pixels are a base64-encoded data url of png data. The script is
|
||||
a base64-encoded data url of a cairo script.
|
||||
|
||||
### clip
|
||||
|
||||
@@ -59,7 +74,9 @@ For the color and width properties, the values follow the typical CSS order of t
|
||||
|
||||
Creates a node like `gsk_clip_node_new()` with the given properties.
|
||||
|
||||
As an extension, this node allows specifying a rounded rectangle for the clip property. If that rectangle is indeed rounded, a node like `gsk_rounded_clip_node_new()` will be created instead.
|
||||
As an extension, this node allows specifying a rounded rectangle for the
|
||||
clip property. If that rectangle is indeed rounded, a node like
|
||||
`gsk_rounded_clip_node_new()` will be created instead.
|
||||
|
||||
### color
|
||||
|
||||
@@ -70,7 +87,8 @@ As an extension, this node allows specifying a rounded rectangle for the clip pr
|
||||
|
||||
Creates a node like `gsk_color_node_new()` with the given properties.
|
||||
|
||||
The color is chosen as an error pink so it is visible while also reminding people to change it.
|
||||
The color is chosen as an error pink so it is visible while also reminding
|
||||
people to change it.
|
||||
|
||||
### color-matrix
|
||||
|
||||
@@ -82,7 +100,21 @@ The color is chosen as an error pink so it is visible while also reminding peopl
|
||||
|
||||
Creates a node like `gsk_color_matrix_node_new()` with the given properties.
|
||||
|
||||
The matrix property accepts a <transform> for compatibility purposes, but you should be aware that the allowed values are meant to be used on 3D transformations, so their naming might appear awkward. However, it is always possible to use the matrix3d() production to specify all 16 values individually.
|
||||
The matrix property accepts a <transform> for compatibility purposes, but you
|
||||
should be aware that the allowed values are meant to be used on 3D transformations,
|
||||
so their naming might appear awkward. However, it is always possible to use the
|
||||
matrix3d() production to specify all 16 values individually.
|
||||
|
||||
### conic-gradient
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| center | `<point>` | 25, 25 | always |
|
||||
| rotation | `<number>` | 0 | always |
|
||||
| stops | `<color-stop>` | 0 #AF0, 1 #F0C | always |
|
||||
|
||||
Creates a node like `gsk_conic_gradient_node_new()` with the given properties.
|
||||
|
||||
### cross-fade
|
||||
|
||||
@@ -90,7 +122,7 @@ The matrix property accepts a <transform> for compatibility purposes, but you sh
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| end | `<node>` | color { } | always |
|
||||
| mode | `<number>` | 0.5 | non-default |
|
||||
| start | `<node>` | color { color: #AF0; } | always |
|
||||
| start | `<node>` | color { } | always |
|
||||
|
||||
Creates a node like `gsk_cross_fade_node_new()` with the given properties.
|
||||
|
||||
@@ -121,8 +153,8 @@ Creates a node like `gsk_inset_shadow_node_new()` with the given properties.
|
||||
| property | syntax | default | printed |
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| end | `<point>` | 0 50 | always |
|
||||
| start | `<point>` | 0 0 | always |
|
||||
| end | `<point>` | 0 50 | always |
|
||||
| stops | `<color-stop>` | 0 #AF0, 1 #F0C | always |
|
||||
|
||||
Creates a node like `gsk_linear_gradient_node_new()` with the given properties.
|
||||
@@ -149,16 +181,57 @@ Creates a node like `gsk_transform_node_new()` with the given properties.
|
||||
|
||||
Creates a node like `gsk_outset_shadow_node_new()` with the given properties.
|
||||
|
||||
### repeat
|
||||
### radial-gradient
|
||||
|
||||
| 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 |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| center | `<point>` | 25 25 | always |
|
||||
| hradius | `<number>` | 25 | always |
|
||||
| vradius | `<number>` | 25 | always |
|
||||
| start | `<number>` | 0 | always |
|
||||
| end | `<number>` | 1 | always |
|
||||
| stops | `<color-stop>` | 0 #AF0, 1 #F0C | always |
|
||||
|
||||
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 |
|
||||
|
||||
Creates a node like `gsk_repeat_node_new()` with the given properties.
|
||||
|
||||
### repeating-linear-gradient
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| start | `<point>` | 0 0 | always |
|
||||
| end | `<point>` | 0 50 | always |
|
||||
| stops | `<color-stop>` | 0 #AF0, 1 #F0C | always |
|
||||
|
||||
Creates a node like `gsk_repeating_linear_gradient_node_new()` with the given
|
||||
properties.
|
||||
|
||||
### repeating radial-gradient
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| -------- | ---------------- | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| center | `<point>` | 25 25 | always |
|
||||
| hradius | `<number>` | 25 | always |
|
||||
| vradius | `<number>` | 25 | always |
|
||||
| start | `<number>` | 0 | always |
|
||||
| end | `<number>` | 1 | always |
|
||||
| stops | `<color-stop>` | 0 #AF0, 1 #F0C | always |
|
||||
|
||||
Creates a node like `gsk_repeating_radial_gradient_node_new()` with the given
|
||||
properties.
|
||||
|
||||
### rounded-clip
|
||||
|
||||
| property | syntax | default | printed |
|
||||
@@ -188,7 +261,8 @@ Creates a node like `gsk_shadow_node_new()` with the given properties.
|
||||
|
||||
Creates a node like `gsk_text_node_new()` with the given properties.
|
||||
|
||||
If the given font does not exist or the given glyphs are invalid for the given font, an error node will be returned.
|
||||
If the given font does not exist or the given glyphs are invalid for the given
|
||||
font, an error node will be returned.
|
||||
|
||||
### texture
|
||||
|
||||
@@ -199,7 +273,9 @@ If the given font does not exist or the given glyphs are invalid for the given f
|
||||
|
||||
Creates a node like `gsk_texture_node_new()` with the given properties.
|
||||
|
||||
The default texture is a 10x10 checkerboard with the top left and bottom right 5x5 being in the color #FF00CC and the other part being transparent. A possible representation for this texture is `url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQXY0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=")
|
||||
The default texture is a 10x10 checkerboard with the top left and bottom right
|
||||
5x5 being in the color #FF00CC and the other part being transparent. A possible
|
||||
representation for this texture is `url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQXY0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=")
|
||||
`.
|
||||
|
||||
### transform
|
||||
@@ -211,3 +287,19 @@ The default texture is a 10x10 checkerboard with the top left and bottom right 5
|
||||
|
||||
Creates a node like `gsk_transform_node_new()` with the given properties.
|
||||
|
||||
### glshader
|
||||
|
||||
| property | syntax | default | printed |
|
||||
| ---------- | ------------------ | ---------------------- | ----------- |
|
||||
| bounds | `<rect>` | 50 | always |
|
||||
| sourcecode | `<string>` | "" | always |
|
||||
| args | `<uniform values>` | none | non-default |
|
||||
| child1 | `<node>` | none | non-default |
|
||||
| child2 | `<node>` | none | non-default |
|
||||
| child3 | `<node>` | none | non-default |
|
||||
| child4 | `<node>` | none | non-default |
|
||||
|
||||
Creates a GLShader node. The `sourcecode` must be a GLSL fragment shader.
|
||||
The `args` must match the uniforms of simple types declared in that shader,
|
||||
in order and comma-separated. The `child` properties must match the sampler
|
||||
uniforms in the shader.
|
||||
|
@@ -1,11 +1,12 @@
|
||||
executable('gtk4-print-editor',
|
||||
['print-editor.c'],
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true)
|
||||
sources: ['print-editor.c'],
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true,
|
||||
)
|
||||
|
||||
# desktop file
|
||||
install_data('org.gtk.PrintEditor4.desktop', install_dir: gtk_applicationsdir)
|
||||
@@ -17,7 +18,5 @@ install_data('org.gtk.PrintEditor4.appdata.xml', install_dir: gtk_appdatadir)
|
||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
|
||||
foreach size: ['scalable', 'symbolic']
|
||||
install_subdir('data/' + size,
|
||||
install_dir: icontheme_dir
|
||||
)
|
||||
install_subdir('data/' + size, install_dir: icontheme_dir)
|
||||
endforeach
|
||||
|
@@ -7,4 +7,3 @@ Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=Development;GTK;
|
||||
NoDisplay=true
|
||||
|
@@ -812,8 +812,6 @@ activate (GApplication *app)
|
||||
gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW (main_window), TRUE);
|
||||
update_title (GTK_WINDOW (main_window));
|
||||
|
||||
gtk_widget_add_css_class (main_window, "devel");
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_window_set_child (GTK_WINDOW (main_window), box);
|
||||
|
||||
|
@@ -1,17 +1,19 @@
|
||||
# demos/widget-factory
|
||||
|
||||
widgetfactory_resources = gnome.compile_resources('widgetfactory_resources',
|
||||
'widget-factory.gresource.xml',
|
||||
source_dir: '.')
|
||||
'widget-factory.gresource.xml',
|
||||
source_dir: '.',
|
||||
)
|
||||
|
||||
executable('gtk4-widget-factory',
|
||||
'widget-factory.c', widgetfactory_resources,
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true)
|
||||
sources: ['widget-factory.c', widgetfactory_resources],
|
||||
c_args: common_cflags,
|
||||
dependencies: libgtk_dep,
|
||||
include_directories: confinc,
|
||||
gui_app: true,
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true,
|
||||
)
|
||||
|
||||
# desktop file
|
||||
install_data('org.gtk.WidgetFactory4.desktop', install_dir: gtk_applicationsdir)
|
||||
@@ -20,9 +22,7 @@ install_data('org.gtk.WidgetFactory4.desktop', install_dir: gtk_applicationsdir)
|
||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
|
||||
foreach size: ['scalable', 'symbolic']
|
||||
install_subdir('data/' + size,
|
||||
install_dir: icontheme_dir
|
||||
)
|
||||
install_subdir('data/' + size, install_dir: icontheme_dir)
|
||||
endforeach
|
||||
|
||||
# appdata
|
||||
|
@@ -7,4 +7,3 @@ Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=Development;GTK;
|
||||
NoDisplay=true
|
||||
|
@@ -433,9 +433,6 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkApplicationWindow" id="window">
|
||||
<style>
|
||||
<class name="devel"/>
|
||||
</style>
|
||||
<property name="title">GTK Widget Factory</property>
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar" id="headerbar1">
|
||||
@@ -881,9 +878,6 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="use-alpha">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="filechooserbutton1"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLinkButton" id="linkbutton1">
|
||||
<property name="label" translatable="yes">link button</property>
|
||||
@@ -1078,7 +1072,7 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="margin-end">6</property>
|
||||
<property name="margin-top">6</property>
|
||||
<property name="margin-bottom">6</property>
|
||||
<property name="autoplay">0</property>
|
||||
<property name="autoplay">1</property>
|
||||
<property name="loop">1</property>
|
||||
<property name="file">resource:///org/gtk/WidgetFactory4/gtk-logo.webm</property>
|
||||
</object>
|
||||
|
@@ -70,3 +70,8 @@ gtk/inspector @otte @matthiasc
|
||||
# Layout managers
|
||||
gtk/gtklayout* @ebassi
|
||||
gtk/gtkconstraint* @ebassi
|
||||
|
||||
# Accessibility
|
||||
gtk/gtkaccessible*.[ch] @ebassi
|
||||
gtk/gtkatcontext*.[ch] @ebassi
|
||||
gtk/a11y @ebassi
|
||||
|
@@ -1,4 +1,3 @@
|
||||
|
||||
<INCLUDE>gdk/gdk.h</INCLUDE>
|
||||
|
||||
<SECTION>
|
||||
@@ -11,6 +10,11 @@ GDK_WINDOWING_WIN32
|
||||
GDK_WINDOWING_MACOS
|
||||
GDK_WINDOWING_WAYLAND
|
||||
|
||||
<SUBSECTION>
|
||||
GDK_MAJOR_VERSION
|
||||
GDK_MICRO_VERSION
|
||||
GDK_MINOR_VERSION
|
||||
|
||||
<SUBSECTION>
|
||||
GDK_VERSION_4_0
|
||||
GDK_VERSION_MIN_REQUIRED
|
||||
@@ -24,6 +28,9 @@ GDK_TYPE_GRAB_STATUS
|
||||
GDK_TYPE_STATUS
|
||||
GdkStatus
|
||||
GDKVAR
|
||||
GDK_EXTERN_VAR
|
||||
_GDK_EXTERN
|
||||
GDK_DECLARE_INTERNAL_TYPE
|
||||
gdk_axis_use_get_type
|
||||
gdk_byte_order_get_type
|
||||
gdk_crossing_mode_get_type
|
||||
@@ -189,6 +196,7 @@ gdk_surface_create_cairo_context
|
||||
<SUBSECTION>
|
||||
gdk_surface_queue_render
|
||||
gdk_surface_get_frame_clock
|
||||
gdk_surface_request_layout
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_surface_set_cursor
|
||||
@@ -196,7 +204,6 @@ gdk_surface_get_cursor
|
||||
gdk_surface_set_input_region
|
||||
gdk_surface_get_width
|
||||
gdk_surface_get_height
|
||||
gdk_surface_set_shadow_width
|
||||
gdk_surface_get_device_position
|
||||
GdkModifierType
|
||||
GDK_MODIFIER_MASK
|
||||
@@ -368,6 +375,7 @@ gdk_device_tool_get_hardware_id
|
||||
gdk_device_tool_get_axes
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_TYPE_AXIS_FLAGS
|
||||
GDK_TYPE_AXIS_USE
|
||||
GDK_TYPE_EXTENSION_MODE
|
||||
GDK_TYPE_INPUT_MODE
|
||||
@@ -440,6 +448,7 @@ gdk_seat_capabilities_get_type
|
||||
<FILE>events</FILE>
|
||||
GdkEvent
|
||||
GdkEventType
|
||||
GdkKeymapKey
|
||||
GdkKeyMatch
|
||||
GdkTouchpadGesturePhase
|
||||
GdkScrollDirection
|
||||
@@ -475,10 +484,14 @@ gdk_event_get_axis
|
||||
gdk_event_get_history
|
||||
gdk_event_get_pointer_emulated
|
||||
gdk_event_triggers_context_menu
|
||||
GdkButtonEvent
|
||||
gdk_button_event_get_button
|
||||
GdkScrollEvent
|
||||
gdk_scroll_event_get_direction
|
||||
gdk_scroll_event_get_deltas
|
||||
gdk_scroll_event_is_stop
|
||||
GdkMotionEvent
|
||||
GdkKeyEvent
|
||||
gdk_key_event_get_keyval
|
||||
gdk_key_event_get_keycode
|
||||
gdk_key_event_get_consumed_modifiers
|
||||
@@ -487,23 +500,31 @@ gdk_key_event_get_level
|
||||
gdk_key_event_is_modifier
|
||||
gdk_key_event_matches
|
||||
gdk_key_event_get_match
|
||||
GdkFocusEvent
|
||||
gdk_focus_event_get_in
|
||||
gdk_touch_event_get_emulating_pointer
|
||||
GdkCrossingEvent
|
||||
gdk_crossing_event_get_mode
|
||||
gdk_crossing_event_get_detail
|
||||
gdk_crossing_event_get_focus
|
||||
GdkGrabBrokenEvent
|
||||
gdk_grab_broken_event_get_grab_surface
|
||||
gdk_grab_broken_event_get_implicit
|
||||
GdkDeleteEvent
|
||||
GdkDNDEvent
|
||||
gdk_dnd_event_get_drop
|
||||
gdk_configure_event_get_size
|
||||
GdkTouchEvent
|
||||
GdkTouchpadEvent
|
||||
gdk_touchpad_event_get_gesture_phase
|
||||
gdk_touchpad_event_get_n_fingers
|
||||
gdk_touchpad_event_get_deltas
|
||||
gdk_touchpad_event_get_pinch_angle_delta
|
||||
gdk_touchpad_event_get_pinch_scale
|
||||
GdkPadEvent
|
||||
gdk_pad_event_get_axis_value
|
||||
gdk_pad_event_get_button
|
||||
gdk_pad_event_get_group_mode
|
||||
GdkProximityEvent
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_events_get_angle
|
||||
@@ -511,6 +532,7 @@ gdk_events_get_center
|
||||
gdk_events_get_distance
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_EVENT
|
||||
GDK_TYPE_EVENT
|
||||
GDK_TYPE_EVENT_MASK
|
||||
GDK_TYPE_EVENT_TYPE
|
||||
@@ -518,11 +540,24 @@ GDK_TYPE_CROSSING_MODE
|
||||
GDK_TYPE_SCROLL_DIRECTION
|
||||
GDK_TYPE_NOTIFY_TYPE
|
||||
GDK_IS_EVENT
|
||||
GDK_IS_EVENT_TYPE
|
||||
GDK_TYPE_BUTTON_EVENT
|
||||
GDK_TYPE_CROSSING_EVENT
|
||||
GDK_TYPE_DELETE_EVENT
|
||||
GDK_TYPE_DND_EVENT
|
||||
GDK_TYPE_FOCUS_EVENT
|
||||
GDK_TYPE_GRAB_BROKEN_EVENT
|
||||
GDK_TYPE_KEY_EVENT
|
||||
GDK_TYPE_MOTION_EVENT
|
||||
GDK_TYPE_PAD_EVENT
|
||||
GDK_TYPE_PROXIMITY_EVENT
|
||||
GDK_TYPE_SCROLL_EVENT
|
||||
GDK_TYPE_TOUCH_EVENT
|
||||
GDK_TYPE_TOUCHPAD_EVENT
|
||||
|
||||
gdk_event_get_type
|
||||
gdk_event_sequence_get_type
|
||||
gdk_button_event_get_type
|
||||
gdk_configure_event_get_type
|
||||
gdk_crossing_event_get_type
|
||||
gdk_delete_event_get_type
|
||||
gdk_dnd_event_get_type
|
||||
@@ -640,6 +675,7 @@ GdkToplevelSize
|
||||
gdk_toplevel_size_get_bounds
|
||||
gdk_toplevel_size_set_size
|
||||
gdk_toplevel_size_set_min_size
|
||||
gdk_toplevel_size_set_shadow_width
|
||||
<SUBSECTION Standard>
|
||||
GDK_TYPE_TOPLEVEL_SIZE
|
||||
gdk_toplevel_size_get_type
|
||||
@@ -827,11 +863,14 @@ gdk_x11_display_error_trap_pop_ignored
|
||||
gdk_x11_display_set_cursor_theme
|
||||
gdk_x11_display_set_surface_scale
|
||||
gdk_x11_display_get_glx_version
|
||||
gdk_x11_display_get_primary_monitor
|
||||
gdk_x11_display_get_screen
|
||||
gdk_x11_monitor_get_output
|
||||
gdk_x11_monitor_get_workarea
|
||||
gdk_x11_screen_get_screen_number
|
||||
gdk_x11_screen_get_xscreen
|
||||
gdk_x11_screen_get_window_manager_name
|
||||
gdk_x11_screen_get_monitor_output
|
||||
gdk_x11_screen_lookup_visual
|
||||
gdk_x11_screen_supports_net_wm_hint
|
||||
gdk_x11_screen_get_number_of_desktops
|
||||
gdk_x11_screen_get_current_desktop
|
||||
@@ -846,9 +885,9 @@ gdk_x11_surface_set_utf8_property
|
||||
gdk_x11_surface_set_frame_sync_enabled
|
||||
gdk_x11_surface_set_group
|
||||
gdk_x11_surface_get_group
|
||||
gdk_x11_keymap_get_group_for_state
|
||||
gdk_x11_keymap_key_is_modifier
|
||||
gdk_x11_visual_get_xvisual
|
||||
gdk_x11_surface_set_skip_pager_hint
|
||||
gdk_x11_surface_set_skip_taskbar_hint
|
||||
gdk_x11_surface_set_urgency_hint
|
||||
gdk_x11_get_xatom_by_name_for_display
|
||||
gdk_x11_get_xatom_name_for_display
|
||||
gdk_x11_set_sm_client_id
|
||||
@@ -901,29 +940,18 @@ GDK_X11_DRAG_CONTEXT_CLASS
|
||||
GDK_IS_X11_DRAG_CONTEXT
|
||||
GDK_IS_X11_DRAG_CONTEXT_CLASS
|
||||
GDK_X11_DRAG_CONTEXT_GET_CLASS
|
||||
GDK_TYPE_X11_KEYMAP
|
||||
GDK_X11_KEYMAP
|
||||
GDK_X11_KEYMAP_CLASS
|
||||
GDK_IS_X11_KEYMAP
|
||||
GDK_IS_X11_KEYMAP_CLASS
|
||||
GDK_X11_KEYMAP_GET_CLASS
|
||||
GDK_TYPE_X11_GL_CONTEXT
|
||||
GDK_X11_GL_CONTEXT
|
||||
GDK_X11_GL_CONTEXT_CLASS
|
||||
GDK_IS_X11_GL_CONTEXT
|
||||
GDK_IS_X11_GL_CONTEXT_CLASS
|
||||
GDK_TYPE_X11_SCREEN
|
||||
GDK_X11_SCREEN
|
||||
GDK_X11_SCREEN_CLASS
|
||||
GDK_IS_X11_SCREEN
|
||||
GDK_IS_X11_SCREEN_CLASS
|
||||
GDK_X11_SCREEN_GET_CLASS
|
||||
GDK_TYPE_X11_VISUAL
|
||||
GDK_X11_VISUAL
|
||||
GDK_X11_VISUAL_CLASS
|
||||
GDK_IS_X11_VISUAL
|
||||
GDK_IS_X11_VISUAL_CLASS
|
||||
GDK_X11_VISUAL_GET_CLASS
|
||||
GDK_TYPE_X11_DRAG
|
||||
GDK_X11_DRAG
|
||||
GDK_IS_X11_DRAG
|
||||
GDK_IS_X11_DRAG_CLASS
|
||||
GDK_TYPE_X11_MONITOR
|
||||
GDK_X11_MONITOR
|
||||
GDK_IS_X11_MONITOR
|
||||
GDK_TYPE_X11_SURFACE
|
||||
GDK_X11_SURFACE
|
||||
GDK_X11_SURFACE_CLASS
|
||||
@@ -941,9 +969,10 @@ gdk_x11_device_xi_get_type
|
||||
gdk_x11_display_get_type
|
||||
gdk_x11_display_manager_get_type
|
||||
gdk_x11_drag_context_get_type
|
||||
gdk_x11_keymap_get_type
|
||||
gdk_x11_drag_get_type
|
||||
gdk_x11_gl_context_get_type
|
||||
gdk_x11_monitor_get_type
|
||||
gdk_x11_screen_get_type
|
||||
gdk_x11_visual_get_type
|
||||
gdk_x11_surface_get_type
|
||||
gdk_surface_impl_x11_get_type
|
||||
</SECTION>
|
||||
@@ -958,7 +987,6 @@ gdk_wayland_display_query_registry
|
||||
gdk_wayland_display_set_cursor_theme
|
||||
gdk_wayland_display_get_startup_notification_id
|
||||
gdk_wayland_display_set_startup_notification_id
|
||||
gdk_wayland_display_query_registry
|
||||
|
||||
<SUBSECTION Device>
|
||||
gdk_wayland_seat_get_wl_seat
|
||||
@@ -1008,8 +1036,12 @@ GDK_IS_WAYLAND_SURFACE_CLASS
|
||||
gdk_wayland_device_get_type
|
||||
gdk_wayland_display_get_type
|
||||
gdk_wayland_display_manager_get_type
|
||||
gdk_wayland_gl_context_get_type
|
||||
gdk_wayland_monitor_get_type
|
||||
gdk_wayland_popup_get_type
|
||||
gdk_wayland_seat_get_type
|
||||
gdk_wayland_surface_get_type
|
||||
|
||||
gdk_wayland_toplevel_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -1171,6 +1203,10 @@ GdkCairoContext
|
||||
gdk_cairo_context_cairo_create
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_CAIRO_CONTEXT
|
||||
GDK_IS_CAIRO_CONTEXT
|
||||
GDK_TYPE_CAIRO_CONTEXT
|
||||
GDK_CAIRO_ERROR
|
||||
gdk_cairo_context_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -1190,6 +1226,11 @@ gdk_vulkan_context_get_queue
|
||||
gdk_vulkan_context_get_queue_family_index
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_VULKAN_CONTEXT
|
||||
GDK_IS_VULKAN_CONTEXT
|
||||
GDK_TYPE_VULKAN_CONTEXT
|
||||
GDK_RENDERING_VULKAN
|
||||
GDK_VULKAN_ERROR
|
||||
gdk_vulkan_context_get_type
|
||||
gdk_vulkan_error_quark
|
||||
gdk_vulkan_strerror
|
||||
|
@@ -1,21 +1,22 @@
|
||||
private_headers = [
|
||||
'gdkintl.h',
|
||||
'gdkmarshalers.h',
|
||||
'gdkkeysyms.h',
|
||||
'gdkinternals.h',
|
||||
'gdk-autocleanup.h',
|
||||
'gdk-private.h',
|
||||
'gdkapplaunchcontextprivate.h',
|
||||
'gdkcairocontextprivate.h',
|
||||
'gdkcairoprivate.h',
|
||||
'gdkclipboardprivate.h',
|
||||
'gdkcontentformatsprivate.h',
|
||||
'gdkcontentproviderprivate.h',
|
||||
'gdkcursorprivate.h',
|
||||
'gdkdeviceprivate.h',
|
||||
'gdkdebug.h',
|
||||
'gdkdevicepadprivate.h',
|
||||
'gdkdeviceprivate.h',
|
||||
'gdkdevicetoolprivate.h',
|
||||
'gdkdisplaymanagerprivate.h',
|
||||
'gdkdisplayprivate.h',
|
||||
'gdkdndprivate.h',
|
||||
'gdkdragprivate.h',
|
||||
'gdkdragsurfaceprivate.h',
|
||||
'gdkdrawcontextprivate.h',
|
||||
'gdkdropprivate.h',
|
||||
'gdkeventsprivate.h',
|
||||
@@ -23,12 +24,17 @@ private_headers = [
|
||||
'gdkframeclockprivate.h',
|
||||
'gdkglcontextprivate.h',
|
||||
'gdkgltextureprivate.h',
|
||||
'gdkinternals.h',
|
||||
'gdkintl.h',
|
||||
'gdkkeysprivate.h',
|
||||
'gdkmonitorprivate.h',
|
||||
'gdkkeysyms.h',
|
||||
'gdkmarshalers.h',
|
||||
'gdkmemorytextureprivate.h',
|
||||
'gdkmonitorprivate.h',
|
||||
'gdkpipeiostreamprivate.h',
|
||||
'gdkpopupprivate.h',
|
||||
'gdkprofilerprivate.h',
|
||||
'gdkrgbaprivate.h',
|
||||
'gdkscreenprivate.h',
|
||||
'gdkseatdefaultprivate.h',
|
||||
'gdkseatprivate.h',
|
||||
@@ -37,22 +43,71 @@ private_headers = [
|
||||
'gdksurfaceprivate.h',
|
||||
'gdktextureprivate.h',
|
||||
'gdktoplevelprivate.h',
|
||||
'gdktoplevelsizeprivate.h',
|
||||
'gdkvulkancontextprivate.h',
|
||||
|
||||
'filetransferportalprivate.h',
|
||||
'gdkconstructor.h',
|
||||
'keyname-table.h',
|
||||
'x11/gdkprivate-x11.h',
|
||||
'x11/gdkeventsource.h',
|
||||
|
||||
# gdk/x11
|
||||
'gdkasync.h',
|
||||
'gdkcairocontext-x11.h',
|
||||
'gdkclipboard-x11.h',
|
||||
'gdkdevice-xi2-private.h',
|
||||
'gdkdevicemanagerprivate-core.h',
|
||||
'gdkdisplay-x11.h',
|
||||
'gdkeventsource.h',
|
||||
'gdkeventtranslator.h',
|
||||
'gdkglcontext-x11.h',
|
||||
'gdkkeys-x11.h',
|
||||
'gdkmonitor-x11.h',
|
||||
'gdkprivate-x11.h',
|
||||
'gdkscreen-x11.h',
|
||||
'gdkselectioninputstream-x11.h',
|
||||
'gdkselectionoutputstream-x11.h',
|
||||
'gdksurface-x11.h',
|
||||
'gdktextlistconverter-x11.h',
|
||||
'gdkvisual-x11.h',
|
||||
'gdkvulkancontext-x11.h',
|
||||
'gdkx-autocleanups.h',
|
||||
'MwmUtil.h',
|
||||
'xsettings-client.h',
|
||||
|
||||
# gdk/wayland
|
||||
'gdkcairocontext-wayland.h',
|
||||
'gdkclipboard-wayland.h',
|
||||
'gdkdevice-wayland-private.h',
|
||||
'gdkdisplay-wayland.h',
|
||||
'gdkglcontext-wayland.h',
|
||||
'gdkmonitor-wayland.h',
|
||||
'gdkprimary-wayland.h',
|
||||
'gdkprivate-wayland.h',
|
||||
'gdkseat-wayland.h',
|
||||
'gdksurface-wayland.h',
|
||||
'gdkvulkancontext-wayland.h',
|
||||
'wm-button-layout-translation.h',
|
||||
'gtk-primary-selection-client-protocol.h',
|
||||
'gtk-shell-client-protocol.h',
|
||||
'idle-inhibit-unstable-v1-client-protocol.h',
|
||||
'keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h',
|
||||
'pointer-gestures-unstable-v1-client-protocol.h',
|
||||
'primary-selection-unstable-v1-client-protocol.h',
|
||||
'server-decoration-client-protocol.h',
|
||||
'tablet-unstable-v2-client-protocol.h',
|
||||
'xdg-foreign-unstable-v1-client-protocol.h',
|
||||
'xdg-shell-unstable-v6-client-protocol.h',
|
||||
'win32',
|
||||
'quartz',
|
||||
'xdg-output-unstable-v1-client-protocol.h',
|
||||
'xdg-shell-client-protocol.h',
|
||||
'xdg-shell-unstable-v6-client-protocol.h',
|
||||
'wayland-cursor.h',
|
||||
'os-compatibility.h',
|
||||
'xcursor.h',
|
||||
|
||||
'broadway',
|
||||
'mir'
|
||||
'wayland/cursor',
|
||||
'macos',
|
||||
'win32',
|
||||
]
|
||||
|
||||
images = [
|
||||
@@ -107,22 +162,26 @@ if get_option('gtk_doc')
|
||||
configure_file(input: 'version.xml.in', output: 'version.xml', configuration: version_conf)
|
||||
|
||||
gnome.gtkdoc('gdk4',
|
||||
mode: 'none',
|
||||
main_xml: 'gdk4-docs.xml',
|
||||
src_dir: src_dir,
|
||||
dependencies: libgtk_dep,
|
||||
gobject_typesfile: join_paths(meson.current_source_dir(), 'gdk4.types'),
|
||||
scan_args: [
|
||||
'--ignore-decorators=_GDK_EXTERN|G_GNUC_WARN_UNUSED_RESULT',
|
||||
'--ignore-headers=' + ' '.join(private_headers),
|
||||
],
|
||||
fixxref_args: [
|
||||
'--html-dir=@0@'.format(docpath),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
|
||||
'--extra-dir=@0@'.format(cairo_docpath),
|
||||
],
|
||||
html_assets: images,
|
||||
install: true)
|
||||
mode: 'none',
|
||||
main_xml: 'gdk4-docs.xml',
|
||||
src_dir: src_dir,
|
||||
dependencies: libgtk_dep,
|
||||
gobject_typesfile: join_paths(meson.current_source_dir(), 'gdk4.types'),
|
||||
scan_args: [
|
||||
'--ignore-decorators=_GDK_EXTERN|G_GNUC_WARN_UNUSED_RESULT',
|
||||
'--ignore-headers=' + ' '.join(private_headers),
|
||||
],
|
||||
mkdb_args: [
|
||||
'--ignore-files=' + ' '.join(private_headers),
|
||||
],
|
||||
fixxref_args: [
|
||||
'--html-dir=@0@'.format(docpath),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
|
||||
'--extra-dir=@0@'.format(cairo_docpath),
|
||||
],
|
||||
html_assets: images,
|
||||
install: true,
|
||||
)
|
||||
endif
|
||||
|
@@ -23,6 +23,14 @@
|
||||
<xi:include href="xml/GskGLShader.xml" />
|
||||
</reference>
|
||||
|
||||
<part id="paths">
|
||||
<title>Paths</title>
|
||||
<xi:include href="xml/GskPath.xml" />
|
||||
<xi:include href="xml/GskPathBuilder.xml" />
|
||||
<xi:include href="xml/GskPathMeasure.xml" />
|
||||
<xi:include href="xml/GskStroke.xml" />
|
||||
</part>
|
||||
|
||||
<index id="api-index-full">
|
||||
<title>Index of all symbols</title>
|
||||
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
|
||||
|
@@ -20,6 +20,40 @@ GSK_TYPE_RENDERER
|
||||
GskRendererClass
|
||||
gsk_renderer_get_type
|
||||
GSK_TYPE_SCALING_FILTER
|
||||
GSK_BROADWAY_RENDERER
|
||||
GSK_BROADWAY_RENDERER_CLASS
|
||||
GSK_BROADWAY_RENDERER_GET_CLASS
|
||||
GSK_IS_BROADWAY_RENDERER
|
||||
GSK_IS_BROADWAY_RENDERER_CLASS
|
||||
GSK_TYPE_BROADWAY_RENDERER
|
||||
GskBroadwayRenderer
|
||||
GskBroadwayRendererClass
|
||||
GSK_CAIRO_RENDERER
|
||||
GSK_CAIRO_RENDERER_CLASS
|
||||
GSK_CAIRO_RENDERER_GET_CLASS
|
||||
GSK_IS_CAIRO_RENDERER
|
||||
GSK_IS_CAIRO_RENDERER_CLASS
|
||||
GSK_TYPE_CAIRO_RENDERER
|
||||
GskCairoRenderer
|
||||
GskCairoRendererClass
|
||||
GSK_GL_RENDERER
|
||||
GSK_GL_RENDERER_CLASS
|
||||
GSK_GL_RENDERER_GET_CLASS
|
||||
GSK_IS_GL_RENDERER
|
||||
GSK_IS_GL_RENDERER_CLASS
|
||||
GSK_TYPE_GL_RENDERER
|
||||
GskGLRenderer
|
||||
GskGLRendererClass
|
||||
gsk_gl_renderer_get_type
|
||||
GSK_VULKAN_RENDERER
|
||||
GSK_VULKAN_RENDERER_CLASS
|
||||
GSK_VULKAN_RENDERER_GET_CLASS
|
||||
GSK_IS_VULKAN_RENDERER
|
||||
GSK_IS_VULKAN_RENDERER_CLASS
|
||||
GSK_TYPE_VULKAN_RENDERER
|
||||
GskVulkanRenderer
|
||||
GskVulkanRendererClass
|
||||
gsk_vulkan_renderer_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -32,6 +66,7 @@ GskCairoNode
|
||||
GskClipNode
|
||||
GskColorMatrixNode
|
||||
GskColorNode
|
||||
GskConicGradientNode
|
||||
GskContainerNode
|
||||
GskCrossFadeNode
|
||||
GskDebugNode
|
||||
@@ -56,25 +91,29 @@ gsk_render_node_get_node_type
|
||||
gsk_render_node_draw
|
||||
GskSerializationError
|
||||
GskParseErrorFunc
|
||||
GskParseLocation
|
||||
gsk_render_node_serialize
|
||||
gsk_render_node_deserialize
|
||||
gsk_render_node_write_to_file
|
||||
GskScalingFilter
|
||||
gsk_render_node_get_bounds
|
||||
|
||||
<SUBSECTION Nodes>
|
||||
<SUBSECTION>
|
||||
gsk_color_node_new
|
||||
gsk_color_node_get_color
|
||||
gsk_texture_node_new
|
||||
gsk_texture_node_get_texture
|
||||
<SUBSECTION>
|
||||
GskColorStop
|
||||
gsk_linear_gradient_node_new
|
||||
gsk_repeating_linear_gradient_node_new
|
||||
gsk_linear_gradient_node_get_start
|
||||
gsk_linear_gradient_node_get_end
|
||||
gsk_linear_gradient_node_get_n_color_stops
|
||||
gsk_linear_gradient_node_get_color_stops
|
||||
gsk_repeating_linear_gradient_node_new
|
||||
<SUBSECTION>
|
||||
gsk_radial_gradient_node_new
|
||||
gsk_repeating_radial_gradient_node_new
|
||||
gsk_radial_gradient_node_get_n_color_stops
|
||||
gsk_radial_gradient_node_get_color_stops
|
||||
gsk_radial_gradient_node_get_start
|
||||
@@ -82,11 +121,18 @@ gsk_radial_gradient_node_get_end
|
||||
gsk_radial_gradient_node_get_hradius
|
||||
gsk_radial_gradient_node_get_vradius
|
||||
gsk_radial_gradient_node_get_center
|
||||
gsk_repeating_radial_gradient_node_new
|
||||
<SUBSECTION>
|
||||
gsk_conic_gradient_node_new
|
||||
gsk_conic_gradient_node_get_n_color_stops
|
||||
gsk_conic_gradient_node_get_color_stops
|
||||
gsk_conic_gradient_node_get_center
|
||||
gsk_conic_gradient_node_get_rotation
|
||||
<SUBSECTION>
|
||||
gsk_border_node_new
|
||||
gsk_border_node_get_outline
|
||||
gsk_border_node_get_widths
|
||||
gsk_border_node_get_colors
|
||||
<SUBSECTION>
|
||||
gsk_inset_shadow_node_new
|
||||
gsk_inset_shadow_node_get_outline
|
||||
gsk_inset_shadow_node_get_color
|
||||
@@ -94,6 +140,7 @@ gsk_inset_shadow_node_get_dx
|
||||
gsk_inset_shadow_node_get_dy
|
||||
gsk_inset_shadow_node_get_spread
|
||||
gsk_inset_shadow_node_get_blur_radius
|
||||
<SUBSECTION>
|
||||
gsk_outset_shadow_node_new
|
||||
gsk_outset_shadow_node_get_outline
|
||||
gsk_outset_shadow_node_get_color
|
||||
@@ -101,45 +148,63 @@ gsk_outset_shadow_node_get_dx
|
||||
gsk_outset_shadow_node_get_dy
|
||||
gsk_outset_shadow_node_get_spread
|
||||
gsk_outset_shadow_node_get_blur_radius
|
||||
<SUBSECTION>
|
||||
gsk_cairo_node_new
|
||||
gsk_cairo_node_get_draw_context
|
||||
gsk_cairo_node_get_surface
|
||||
<SUBSECTION>
|
||||
gsk_container_node_new
|
||||
gsk_container_node_get_n_children
|
||||
gsk_container_node_get_child
|
||||
<SUBSECTION>
|
||||
gsk_transform_node_new
|
||||
gsk_transform_node_get_child
|
||||
gsk_transform_node_get_transform
|
||||
<SUBSECTION>
|
||||
gsk_opacity_node_new
|
||||
gsk_opacity_node_get_child
|
||||
gsk_opacity_node_get_opacity
|
||||
<SUBSECTION>
|
||||
gsk_color_matrix_node_new
|
||||
gsk_color_matrix_node_get_child
|
||||
gsk_color_matrix_node_get_color_matrix
|
||||
gsk_color_matrix_node_get_color_offset
|
||||
<SUBSECTION>
|
||||
gsk_repeat_node_new
|
||||
gsk_repeat_node_get_child
|
||||
gsk_repeat_node_get_child_bounds
|
||||
<SUBSECTION>
|
||||
gsk_clip_node_new
|
||||
gsk_clip_node_get_child
|
||||
gsk_clip_node_get_clip
|
||||
<SUBSECTION>
|
||||
gsk_rounded_clip_node_new
|
||||
gsk_rounded_clip_node_get_child
|
||||
gsk_rounded_clip_node_get_clip
|
||||
<SUBSECTION>
|
||||
GskFillRule
|
||||
gsk_fill_node_new
|
||||
gsk_fill_node_get_child
|
||||
gsk_fill_node_get_path
|
||||
gsk_fill_node_get_fill_rule
|
||||
<SUBSECTION>
|
||||
GskShadow
|
||||
gsk_shadow_node_new
|
||||
gsk_shadow_node_get_shadow
|
||||
gsk_shadow_node_get_n_shadows
|
||||
gsk_shadow_node_get_child
|
||||
<SUBSECTION>
|
||||
GskBlendMode
|
||||
gsk_blend_node_new
|
||||
gsk_blend_node_get_bottom_child
|
||||
gsk_blend_node_get_top_child
|
||||
gsk_blend_node_get_blend_mode
|
||||
<SUBSECTION>
|
||||
gsk_cross_fade_node_new
|
||||
gsk_cross_fade_node_get_start_child
|
||||
gsk_cross_fade_node_get_end_child
|
||||
gsk_cross_fade_node_get_progress
|
||||
<SUBSECTION>
|
||||
gsk_text_node_new
|
||||
gsk_text_node_get_font
|
||||
gsk_text_node_get_glyphs
|
||||
@@ -147,12 +212,15 @@ gsk_text_node_get_color
|
||||
gsk_text_node_has_color_glyphs
|
||||
gsk_text_node_get_num_glyphs
|
||||
gsk_text_node_get_offset
|
||||
<SUBSECTION>
|
||||
gsk_blur_node_new
|
||||
gsk_blur_node_get_child
|
||||
gsk_blur_node_get_radius
|
||||
<SUBSECTION>
|
||||
gsk_debug_node_new
|
||||
gsk_debug_node_get_child
|
||||
gsk_debug_node_get_message
|
||||
<SUBSECTION>
|
||||
gsk_gl_shader_node_new
|
||||
gsk_gl_shader_node_get_n_children
|
||||
gsk_gl_shader_node_get_child
|
||||
@@ -170,13 +238,18 @@ GSK_TYPE_CLIP_NODE
|
||||
GSK_TYPE_COLOR_MATRIX_NODE
|
||||
GSK_TYPE_COLOR_NODE
|
||||
GSK_TYPE_CONTAINER_NODE
|
||||
GSK_TYPE_CONIC_GRADIENT_NODE
|
||||
GSK_TYPE_CROSS_FADE_NODE
|
||||
GSK_TYPE_DEBUG_NODE
|
||||
GSK_TYPE_FILL_NODE
|
||||
GSK_TYPE_GL_SHADER_NODE
|
||||
GSK_TYPE_INSET_SHADOW_NODE
|
||||
GSK_TYPE_LINEAR_GRADIENT_NODE
|
||||
GSK_TYPE_OPACITY_NODE
|
||||
GSK_TYPE_OUTSET_SHADOW_NODE
|
||||
GSK_TYPE_RADIAL_GRADIENT_NODE
|
||||
GSK_TYPE_REPEATING_LINEAR_GRADIENT_NODE
|
||||
GSK_TYPE_REPEATING_RADIAL_GRADIENT_NODE
|
||||
GSK_TYPE_REPEAT_NODE
|
||||
GSK_TYPE_ROUNDED_CLIP_NODE
|
||||
GSK_TYPE_SHADOW_NODE
|
||||
@@ -184,6 +257,7 @@ GSK_TYPE_TEXT_NODE
|
||||
GSK_TYPE_TEXTURE_NODE
|
||||
GSK_TYPE_TRANSFORM_NODE
|
||||
GSK_TYPE_GLSHADER_NODE
|
||||
GSK_TYPE_RENDER_NODE_TYPE
|
||||
GskRenderNodeClass
|
||||
gsk_blend_node_get_type
|
||||
gsk_blur_node_get_type
|
||||
@@ -194,22 +268,26 @@ gsk_cairo_renderer_get_type
|
||||
gsk_clip_node_get_type
|
||||
gsk_color_matrix_node_get_type
|
||||
gsk_color_node_get_type
|
||||
gsk_conic_gradient_node_get_type
|
||||
gsk_container_node_get_type
|
||||
gsk_cross_fade_node_get_type
|
||||
gsk_debug_node_get_type
|
||||
gsk_fill_node_get_type
|
||||
gsk_gl_shader_node_get_type
|
||||
gsk_inset_shadow_node_get_type
|
||||
gsk_linear_gradient_node_get_type
|
||||
gsk_opacity_node_get_type
|
||||
gsk_outset_shadow_node_get_type
|
||||
gsk_radial_gradient_node_get_type
|
||||
gsk_render_node_get_type
|
||||
gsk_repeating_linear_gradient_node_get_type
|
||||
gsk_repeating_radial_gradient_node_get_type
|
||||
gsk_repeat_node_get_type
|
||||
gsk_rounded_clip_node_get_type
|
||||
gsk_shadow_node_get_type
|
||||
gsk_text_node_get_type
|
||||
gsk_texture_node_get_type
|
||||
gsk_transform_node_get_type
|
||||
gsk_gl_shader_node_get_type
|
||||
GSK_TYPE_BLEND_MODE
|
||||
<SUBSECTION Standard>
|
||||
gsk_serialization_error_quark
|
||||
@@ -232,6 +310,116 @@ gsk_rounded_rect_is_rectilinear
|
||||
gsk_rounded_rect_contains_point
|
||||
gsk_rounded_rect_contains_rect
|
||||
gsk_rounded_rect_intersects_rect
|
||||
<SUBSECTION Standard>
|
||||
GSK_TYPE_CORNER
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>GskPath</FILE>
|
||||
<SUBSECTION>
|
||||
GskPath
|
||||
gsk_path_ref
|
||||
gsk_path_unref
|
||||
gsk_path_new_rect
|
||||
gsk_path_new_from_cairo
|
||||
gsk_path_parse
|
||||
<SUBSECTION>
|
||||
gsk_path_print
|
||||
gsk_path_to_string
|
||||
gsk_path_to_cairo
|
||||
<SUBSECTION>
|
||||
gsk_path_is_empty
|
||||
gsk_path_get_bounds
|
||||
gsk_path_get_stroke_bounds
|
||||
<SUBSECTION>
|
||||
GskPathOperation
|
||||
GskPathForeachFlags
|
||||
GskPathForeachFunc
|
||||
gsk_path_foreach
|
||||
<SUBSECTION Private>
|
||||
GSK_TYPE_PATH
|
||||
gsk_path_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>GskPathBuilder</FILE>
|
||||
GskPathBuilder
|
||||
gsk_path_builder_new
|
||||
gsk_path_builder_ref
|
||||
gsk_path_builder_unref
|
||||
gsk_path_builder_to_path
|
||||
gsk_path_builder_free_to_path
|
||||
<SUBSECTION>
|
||||
gsk_path_builder_get_current_point
|
||||
<SUBSECTION>
|
||||
gsk_path_builder_add_rect
|
||||
gsk_path_builder_add_rounded_rect
|
||||
gsk_path_builder_add_circle
|
||||
gsk_path_builder_add_ellipse
|
||||
gsk_path_builder_add_path
|
||||
gtk_path_builder_add_segment
|
||||
<SUBSECTION>
|
||||
gsk_path_builder_move_to
|
||||
gsk_path_builder_rel_move_to
|
||||
gsk_path_builder_line_to
|
||||
gsk_path_builder_rel_line_to
|
||||
gsk_path_builder_curve_to
|
||||
gsk_path_builder_rel_curve_to
|
||||
gsk_path_builder_conic_to
|
||||
gsk_path_builder_rel_conic_to
|
||||
gsk_path_builder_close
|
||||
<SUBSECTION Private>
|
||||
GSK_TYPE_PATH_BUILDER
|
||||
gsk_path_builder_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>GskPathMeasure</FILE>
|
||||
GskPathMeasure
|
||||
gsk_path_measure_new
|
||||
gsk_path_measure_new_with_tolerance
|
||||
gsk_path_measure_ref
|
||||
gsk_path_measure_unref
|
||||
<SUBSECTION>
|
||||
gsk_path_measure_get_path
|
||||
gsk_path_measure_get_tolerance
|
||||
gsk_path_measure_get_n_contours
|
||||
gsk_path_measure_restrict_to_contour
|
||||
<SUBSECTION>
|
||||
gsk_path_measure_get_length
|
||||
gsk_path_measure_is_closed
|
||||
gsk_path_measure_get_point
|
||||
gsk_path_measure_get_closest_point
|
||||
gsk_path_measure_get_closest_point_full
|
||||
gsk_path_measure_in_fill
|
||||
<SUBSECTION Private>
|
||||
GSK_TYPE_PATH_MEASURE
|
||||
gsk_path_measure_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>GskStroke</FILE>
|
||||
GskLineCap
|
||||
GskLineJoin
|
||||
gsk_stroke_new
|
||||
gsk_stroke_copy
|
||||
gsk_stroke_free
|
||||
gsk_stroke_equal
|
||||
gsk_stroke_set_line_width
|
||||
gsk_stroke_get_line_width
|
||||
gsk_stroke_set_line_join
|
||||
gsk_stroke_get_line_join
|
||||
gsk_stroke_set_line_cap
|
||||
gsk_stroke_get_line_cap
|
||||
gsk_stroke_set_miter_limit
|
||||
gsk_stroke_get_miter_limit
|
||||
gsk_stroke_set_dash
|
||||
gsk_stroke_get_dash
|
||||
gsk_stroke_set_dash_offset
|
||||
gsk_stroke_get_dash_offset
|
||||
<SUBSECTION Private>
|
||||
GSK_TYPE_STROKE
|
||||
gsk_stroke_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -281,10 +469,12 @@ gsk_gl_shader_new_from_bytes
|
||||
gsk_gl_shader_new_from_resource
|
||||
gsk_gl_shader_compile
|
||||
gsk_gl_shader_get_source
|
||||
gsk_gl_shader_get_resource
|
||||
gsk_gl_shader_get_n_textures
|
||||
gsk_gl_shader_get_n_uniforms
|
||||
gsk_gl_shader_get_uniform_name
|
||||
gsk_gl_shader_find_uniform_by_name
|
||||
GskGLUniformType
|
||||
gsk_gl_shader_get_uniform_type
|
||||
gsk_gl_shader_get_uniform_offset
|
||||
gsk_gl_shader_get_args_size
|
||||
@@ -316,4 +506,10 @@ gsk_shader_args_builder_set_bool
|
||||
gsk_shader_args_builder_set_vec2
|
||||
gsk_shader_args_builder_set_vec3
|
||||
gsk_shader_args_builder_set_vec4
|
||||
|
||||
<SUBSECTION Private>
|
||||
GSK_TYPE_GL_SHADER
|
||||
GSK_TYPE_GL_UNIFORM_TYPE
|
||||
GSK_TYPE_SHADER_ARGS_BUILDER
|
||||
gsk_shader_args_builder_get_type
|
||||
</SECTION>
|
||||
|
@@ -1,27 +1,48 @@
|
||||
private_headers = [
|
||||
'gsk-autocleanup.h',
|
||||
|
||||
'gskcairoblurprivate.h',
|
||||
'gskcairorendererprivate.h',
|
||||
'gskdebugprivate.h',
|
||||
'gskgldriverprivate.h',
|
||||
'gskglprofilerprivate.h',
|
||||
'gskglrendererprivate.h',
|
||||
'gskdiffprivate.h',
|
||||
'gskglshaderprivate.h',
|
||||
'gskprivate.h',
|
||||
'gskprofilerprivate.h',
|
||||
'gskrendererprivate.h',
|
||||
'gskrendernodeprivate.h',
|
||||
'gskrendernodeparserprivate.h',
|
||||
'gskroundedrectprivate.h',
|
||||
'gskshaderbuilderprivate.h',
|
||||
'gsktextureprivate.h',
|
||||
'gsktransformprivate.h',
|
||||
'gskvulkanblendpipelineprivate.h',
|
||||
|
||||
# gsk/gl
|
||||
'glutilsprivate.h',
|
||||
'gskgldriverprivate.h',
|
||||
'gskglglyphcacheprivate.h',
|
||||
'gskgliconcacheprivate.h',
|
||||
'gskglimageprivate.h',
|
||||
'gskglnodesampleprivate.h',
|
||||
'gskglprofilerprivate.h',
|
||||
'gskglrendererprivate.h',
|
||||
'gskglrenderopsprivate.h',
|
||||
'gskglshaderbuilderprivate.h',
|
||||
'gskglshadowcacheprivate.h',
|
||||
'gskgltextureatlasprivate.h',
|
||||
'opbuffer.h',
|
||||
'stb_rect_pack.h',
|
||||
|
||||
# gsk/vulkan
|
||||
'gskvulkanblendmodepipelineprivate.h',
|
||||
'gskvulkanblurpipelineprivate.h',
|
||||
'gskvulkanborderpipelineprivate.h',
|
||||
'gskvulkanboxshadowpipelineprivate.h',
|
||||
'gskvulkanbufferprivate.h',
|
||||
'gskvulkanclipprivate.h',
|
||||
'gskvulkancolorpipelineprivate.h',
|
||||
'gskvulkancolortextpipelineprivate.h',
|
||||
'gskvulkancommandpoolprivate.h',
|
||||
'gskvulkancrossfadepipelineprivate.h',
|
||||
'gskvulkaneffectpipelineprivate.h',
|
||||
'gskvulkanglyphcacheprivate.h',
|
||||
'gskvulkanimageprivate.h',
|
||||
'gskvulkanlineargradientpipelineprivate.h',
|
||||
'gskvulkanmemoryprivate.h',
|
||||
@@ -31,6 +52,8 @@ private_headers = [
|
||||
'gskvulkanrenderpassprivate.h',
|
||||
'gskvulkanrenderprivate.h',
|
||||
'gskvulkanshaderprivate.h',
|
||||
'gskvulkantextpipelineprivate.h',
|
||||
'gskvulkantexturepipelineprivate.h',
|
||||
]
|
||||
|
||||
images = [
|
||||
@@ -40,25 +63,29 @@ if get_option('gtk_doc')
|
||||
configure_file(input: 'version.xml.in', output: 'version.xml', configuration: version_conf)
|
||||
|
||||
gnome.gtkdoc('gsk4',
|
||||
mode: 'none',
|
||||
main_xml: 'gsk4-docs.xml',
|
||||
src_dir: [
|
||||
gskinc,
|
||||
],
|
||||
dependencies: libgtk_dep,
|
||||
gobject_typesfile: join_paths(meson.current_source_dir(), 'gsk4.types'),
|
||||
scan_args: [
|
||||
'--ignore-decorators=_GDK_EXTERN',
|
||||
'--ignore-headers=' + ' '.join(private_headers),
|
||||
],
|
||||
fixxref_args: [
|
||||
'--html-dir=@0@'.format(docpath),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
|
||||
'--extra-dir=@0@'.format(cairo_docpath),
|
||||
'--extra-dir=../gdk',
|
||||
],
|
||||
html_assets: images,
|
||||
install: true)
|
||||
mode: 'none',
|
||||
main_xml: 'gsk4-docs.xml',
|
||||
src_dir: [
|
||||
gskinc,
|
||||
],
|
||||
dependencies: libgtk_dep,
|
||||
gobject_typesfile: join_paths(meson.current_source_dir(), 'gsk4.types'),
|
||||
scan_args: [
|
||||
'--ignore-decorators=_GDK_EXTERN',
|
||||
'--ignore-headers=' + ' '.join(private_headers),
|
||||
],
|
||||
mkdb_args: [
|
||||
'--ignore-files=' + ' '.join(private_headers),
|
||||
],
|
||||
fixxref_args: [
|
||||
'--html-dir=@0@'.format(docpath),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
|
||||
'--extra-dir=@0@'.format(cairo_docpath),
|
||||
'--extra-dir=../gdk',
|
||||
],
|
||||
html_assets: images,
|
||||
install: true,
|
||||
)
|
||||
endif
|
||||
|
@@ -283,7 +283,6 @@
|
||||
<xi:include href="xml/gtkcolorchooserwidget.xml" />
|
||||
<xi:include href="xml/gtkcolorchooserdialog.xml" />
|
||||
<xi:include href="xml/gtkfilechooser.xml" />
|
||||
<xi:include href="xml/gtkfilechooserbutton.xml" />
|
||||
<xi:include href="xml/gtkfilechoosernative.xml" />
|
||||
<xi:include href="xml/gtkfilechooserdialog.xml" />
|
||||
<xi:include href="xml/gtkfilechooserwidget.xml" />
|
||||
|
@@ -618,6 +618,14 @@ GtkBuildable
|
||||
GtkBuildableIface
|
||||
GtkBuildableParser
|
||||
gtk_buildable_get_buildable_id
|
||||
|
||||
<SUBSECTION Parser>
|
||||
gtk_buildable_parse_context_get_element
|
||||
gtk_buildable_parse_context_get_element_stack
|
||||
gtk_buildable_parse_context_get_position
|
||||
gtk_buildable_parse_context_pop
|
||||
gtk_buildable_parse_context_push
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_BUILDABLE
|
||||
GTK_IS_BUILDABLE
|
||||
@@ -835,6 +843,8 @@ gtk_combo_box_get_active_id
|
||||
gtk_combo_box_set_active_id
|
||||
gtk_combo_box_get_model
|
||||
gtk_combo_box_set_model
|
||||
gtk_combo_box_popup
|
||||
gtk_combo_box_popup_for_device
|
||||
gtk_combo_box_popdown
|
||||
gtk_combo_box_get_row_separator_func
|
||||
gtk_combo_box_set_row_separator_func
|
||||
@@ -1001,7 +1011,6 @@ gtk_editable_label_get_type
|
||||
<FILE>gtktext</FILE>
|
||||
<TITLE>GtkText</TITLE>
|
||||
GtkText
|
||||
GtkTextClass
|
||||
gtk_text_new
|
||||
gtk_text_new_with_buffer
|
||||
gtk_text_set_buffer
|
||||
@@ -1339,31 +1348,6 @@ gtk_file_chooser_widget_get_type
|
||||
GtkFileChooserWidgetPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkfilechooserbutton</FILE>
|
||||
<TITLE>GtkFileChooserButton</TITLE>
|
||||
GtkFileChooserButton
|
||||
gtk_file_chooser_button_new
|
||||
gtk_file_chooser_button_new_with_dialog
|
||||
gtk_file_chooser_button_get_title
|
||||
gtk_file_chooser_button_set_title
|
||||
gtk_file_chooser_button_get_width_chars
|
||||
gtk_file_chooser_button_set_width_chars
|
||||
gtk_file_chooser_button_get_modal
|
||||
gtk_file_chooser_button_set_modal
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_FILE_CHOOSER_BUTTON
|
||||
GTK_IS_FILE_CHOOSER_BUTTON
|
||||
GTK_TYPE_FILE_CHOOSER_BUTTON
|
||||
GTK_FILE_CHOOSER_BUTTON_CLASS
|
||||
GTK_IS_FILE_CHOOSER_BUTTON_CLASS
|
||||
GTK_FILE_CHOOSER_BUTTON_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
gtk_file_chooser_button_get_type
|
||||
GtkFileChooserButtonPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkfilefilter</FILE>
|
||||
GtkFileFilter
|
||||
@@ -2782,7 +2766,6 @@ gtk_sort_list_model_get_type
|
||||
GtkSpinButton
|
||||
GtkSpinButtonUpdatePolicy
|
||||
GtkSpinType
|
||||
gtk_spin_button_configure
|
||||
gtk_spin_button_new
|
||||
gtk_spin_button_new_with_range
|
||||
gtk_spin_button_set_adjustment
|
||||
@@ -2806,6 +2789,7 @@ gtk_spin_button_set_snap_to_ticks
|
||||
gtk_spin_button_get_snap_to_ticks
|
||||
gtk_spin_button_set_climb_rate
|
||||
gtk_spin_button_get_climb_rate
|
||||
gtk_spin_button_configure
|
||||
gtk_spin_button_spin
|
||||
gtk_spin_button_update
|
||||
GTK_INPUT_ERROR
|
||||
@@ -2854,6 +2838,7 @@ gtk_statusbar_push
|
||||
gtk_statusbar_pop
|
||||
gtk_statusbar_remove
|
||||
gtk_statusbar_remove_all
|
||||
gtk_statusbar_get_message
|
||||
<SUBSECTION Standard>
|
||||
GTK_STATUSBAR
|
||||
GTK_IS_STATUSBAR
|
||||
@@ -2988,6 +2973,8 @@ GTK_TEXT_BUFFER_GET_CLASS
|
||||
gtk_text_buffer_get_type
|
||||
<SUBSECTION Private>
|
||||
GtkTextBufferPrivate
|
||||
gtk_text_byte_begins_utf8_char
|
||||
gtk_text_unknown_char_utf8_gtk_tests_only
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -4027,6 +4014,10 @@ gtk_cell_renderer_get_padding
|
||||
gtk_cell_renderer_set_padding
|
||||
gtk_cell_renderer_get_state
|
||||
gtk_cell_renderer_is_activatable
|
||||
gtk_cell_renderer_get_is_expanded
|
||||
gtk_cell_renderer_get_is_expander
|
||||
gtk_cell_renderer_set_is_expanded
|
||||
gtk_cell_renderer_set_is_expander
|
||||
|
||||
<SUBSECTION Width-for-height>
|
||||
gtk_cell_renderer_get_preferred_height
|
||||
@@ -4304,6 +4295,8 @@ gtk_snapshot_push_color_matrix
|
||||
gtk_snapshot_push_repeat
|
||||
gtk_snapshot_push_clip
|
||||
gtk_snapshot_push_rounded_clip
|
||||
gtk_snapshot_push_fill
|
||||
gtk_snapshot_push_stroke
|
||||
gtk_snapshot_push_cross_fade
|
||||
gtk_snapshot_push_blend
|
||||
gtk_snapshot_push_blur
|
||||
@@ -4311,6 +4304,7 @@ gtk_snapshot_push_shadow
|
||||
gtk_snapshot_push_debug
|
||||
gtk_snapshot_push_gl_shader
|
||||
gtk_snapshot_pop
|
||||
gtk_snapshot_gl_shader_pop_texture
|
||||
gtk_snapshot_save
|
||||
gtk_snapshot_restore
|
||||
gtk_snapshot_transform
|
||||
@@ -4329,9 +4323,13 @@ gtk_snapshot_append_color
|
||||
gtk_snapshot_append_layout
|
||||
gtk_snapshot_append_linear_gradient
|
||||
gtk_snapshot_append_repeating_linear_gradient
|
||||
gtk_snapshot_append_conic_gradient
|
||||
gtk_snapshot_append_border
|
||||
gtk_snapshot_append_inset_shadow
|
||||
gtk_snapshot_append_outset_shadow
|
||||
gtk_snapshot_append_radial_gradient
|
||||
gtk_snapshot_append_repeating_radial_gradient
|
||||
gtk_snapshot_render_insertion_cursor
|
||||
gtk_snapshot_render_background
|
||||
gtk_snapshot_render_frame
|
||||
gtk_snapshot_render_focus
|
||||
@@ -4390,6 +4388,9 @@ gtk_widget_class_add_binding_signal
|
||||
gtk_widget_class_add_binding_action
|
||||
gtk_widget_class_set_layout_manager_type
|
||||
gtk_widget_class_get_layout_manager_type
|
||||
gtk_widget_class_set_activate_signal
|
||||
gtk_widget_class_set_activate_signal_from_name
|
||||
gtk_widget_class_get_activate_signal
|
||||
gtk_widget_activate
|
||||
gtk_widget_is_focus
|
||||
gtk_widget_grab_focus
|
||||
@@ -4463,6 +4464,7 @@ gtk_widget_get_focusable
|
||||
gtk_widget_set_focusable
|
||||
gtk_widget_get_focus_on_click
|
||||
gtk_widget_set_focus_on_click
|
||||
gtk_widget_get_focus_child
|
||||
gtk_widget_set_focus_child
|
||||
gtk_widget_get_can_target
|
||||
gtk_widget_set_can_target
|
||||
@@ -4613,6 +4615,7 @@ gtk_window_set_destroy_with_parent
|
||||
gtk_window_set_display
|
||||
gtk_window_is_active
|
||||
gtk_window_is_maximized
|
||||
gtk_window_is_fullscreen
|
||||
gtk_window_get_toplevels
|
||||
gtk_window_list_toplevels
|
||||
gtk_window_get_focus
|
||||
@@ -4639,12 +4642,10 @@ gtk_window_get_default_size
|
||||
gtk_window_get_destroy_with_parent
|
||||
gtk_window_get_icon_name
|
||||
gtk_window_get_modal
|
||||
gtk_window_get_size
|
||||
gtk_window_get_title
|
||||
gtk_window_get_transient_for
|
||||
gtk_window_get_group
|
||||
gtk_window_has_group
|
||||
gtk_window_resize
|
||||
gtk_window_set_default_icon_name
|
||||
gtk_window_set_icon_name
|
||||
gtk_window_set_auto_startup_notification
|
||||
@@ -5127,6 +5128,34 @@ GTK_PRINTER_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkPrinterPrivate
|
||||
gtk_printer_get_type
|
||||
GtkPrinterOption
|
||||
gtk_printer_option_allocate_choices
|
||||
gtk_printer_option_choices_from_array
|
||||
gtk_printer_option_clear_has_conflict
|
||||
gtk_printer_option_get_activates_default
|
||||
gtk_printer_option_get_type
|
||||
gtk_printer_option_has_choice
|
||||
gtk_printer_option_new
|
||||
gtk_printer_option_set
|
||||
gtk_printer_option_set_activates_default
|
||||
gtk_printer_option_set_add
|
||||
gtk_printer_option_set_boolean
|
||||
gtk_printer_option_set_clear_conflicts
|
||||
gtk_printer_option_set_foreach
|
||||
gtk_printer_option_set_foreach_in_group
|
||||
gtk_printer_option_set_get_groups
|
||||
gtk_printer_option_set_get_type
|
||||
gtk_printer_option_set_has_conflict
|
||||
gtk_printer_option_set_lookup
|
||||
gtk_printer_option_set_new
|
||||
gtk_printer_option_set_remove
|
||||
GtkPrinterOptionWidget
|
||||
gtk_printer_option_widget_get_external_label
|
||||
gtk_printer_option_widget_get_type
|
||||
gtk_printer_option_widget_get_value
|
||||
gtk_printer_option_widget_has_external_label
|
||||
gtk_printer_option_widget_new
|
||||
gtk_printer_option_widget_set_source
|
||||
</SECTION>
|
||||
|
||||
|
||||
@@ -5319,6 +5348,7 @@ GtkCustomPaperUnixDialogClass
|
||||
<SUBSECTION Private>
|
||||
gtk_paper_size_get_type
|
||||
gtk_custom_paper_unix_dialog_get_type
|
||||
gtk_print_load_custom_papers
|
||||
GtkCustomPaperUnixDialogPrivate
|
||||
</SECTION>
|
||||
|
||||
@@ -5474,6 +5504,20 @@ gtk_test_init
|
||||
gtk_test_list_all_types
|
||||
gtk_test_register_all_types
|
||||
gtk_test_widget_wait_for_draw
|
||||
<SUBSECTION Accessibility>
|
||||
gtk_test_accessible_assert_property
|
||||
gtk_test_accessible_assert_relation
|
||||
gtk_test_accessible_assert_role
|
||||
gtk_test_accessible_assert_state
|
||||
gtk_test_accessible_check_property
|
||||
gtk_test_accessible_check_relation
|
||||
gtk_test_accessible_check_state
|
||||
gtk_test_accessible_has_property
|
||||
gtk_test_accessible_has_relation
|
||||
gtk_test_accessible_has_role
|
||||
gtk_test_accessible_has_state
|
||||
<SECTION Private>
|
||||
gtk_test_accessible_assertion_message_role
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -6137,6 +6181,7 @@ GtkPopover
|
||||
gtk_popover_new
|
||||
gtk_popover_popup
|
||||
gtk_popover_popdown
|
||||
gtk_popover_present
|
||||
gtk_popover_set_child
|
||||
gtk_popover_get_child
|
||||
gtk_popover_set_pointing_to
|
||||
@@ -6152,6 +6197,8 @@ gtk_popover_get_offset
|
||||
gtk_popover_set_default_widget
|
||||
gtk_popover_set_cascade_popdown
|
||||
gtk_popover_get_cascade_popdown
|
||||
gtk_popover_get_mnemonics_visible
|
||||
gtk_popover_set_mnemonics_visible
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_POPOVER
|
||||
GTK_IS_POPOVER
|
||||
@@ -6994,8 +7041,9 @@ GtkNative
|
||||
gtk_native_get_for_surface
|
||||
gtk_native_get_surface
|
||||
gtk_native_get_renderer
|
||||
gtk_native_check_resize
|
||||
gtk_native_get_surface_transform
|
||||
gtk_native_realize
|
||||
gtk_native_unrealize
|
||||
|
||||
<SUBSECTION Private>
|
||||
gtk_native_get_type
|
||||
@@ -7536,6 +7584,9 @@ gtk_accessible_reset_property
|
||||
gtk_accessible_update_relation
|
||||
gtk_accessible_update_relation_value
|
||||
gtk_accessible_reset_relation
|
||||
gtk_accessible_property_init_value
|
||||
gtk_accessible_relation_init_value
|
||||
gtk_accessible_state_init_value
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_ACCESSIBLE
|
||||
|
@@ -19,8 +19,8 @@ gtk_assistant_page_get_type
|
||||
gtk_at_context_get_type
|
||||
gtk_bin_layout_get_type
|
||||
gtk_bitset_get_type
|
||||
gtk_expression_get_type
|
||||
gtk_bookmark_list_get_type
|
||||
gtk_bool_filter_get_type
|
||||
gtk_box_get_type
|
||||
gtk_box_layout_get_type
|
||||
gtk_buildable_get_type
|
||||
@@ -46,6 +46,7 @@ gtk_cell_renderer_spinner_get_type
|
||||
gtk_cell_renderer_text_get_type
|
||||
gtk_cell_renderer_toggle_get_type
|
||||
gtk_cell_view_get_type
|
||||
gtk_center_box_get_type
|
||||
gtk_center_layout_get_type
|
||||
gtk_check_button_get_type
|
||||
gtk_closure_expression_get_type
|
||||
@@ -65,14 +66,16 @@ gtk_constraint_target_get_type
|
||||
gtk_css_provider_get_type
|
||||
gtk_custom_filter_get_type
|
||||
gtk_custom_sorter_get_type
|
||||
gtk_custom_layout_get_type
|
||||
gtk_dialog_get_type
|
||||
gtk_directory_list_get_type
|
||||
gtk_drag_icon_get_type
|
||||
gtk_drag_source_get_type
|
||||
gtk_drawing_area_get_type
|
||||
gtk_drop_target_get_type
|
||||
gtk_drop_target_async_get_type
|
||||
gtk_drop_controller_motion_get_type
|
||||
gtk_drop_down_get_type
|
||||
gtk_drop_target_async_get_type
|
||||
gtk_drop_target_get_type
|
||||
gtk_editable_get_type
|
||||
gtk_editable_label_get_type
|
||||
gtk_emoji_chooser_get_type
|
||||
@@ -87,7 +90,7 @@ gtk_event_controller_motion_get_type
|
||||
gtk_event_controller_scroll_get_type
|
||||
gtk_every_filter_get_type
|
||||
gtk_expander_get_type
|
||||
gtk_file_chooser_button_get_type
|
||||
gtk_expression_get_type
|
||||
gtk_file_chooser_dialog_get_type
|
||||
gtk_file_chooser_get_type
|
||||
gtk_file_chooser_native_get_type
|
||||
@@ -251,6 +254,7 @@ gtk_video_get_type
|
||||
gtk_viewport_get_type
|
||||
gtk_volume_button_get_type
|
||||
gtk_widget_get_type
|
||||
gtk_widget_paintable_get_type
|
||||
gtk_window_get_type
|
||||
gtk_window_controls_get_type
|
||||
gtk_window_group_get_type
|
||||
|
@@ -119,21 +119,18 @@ around or to activate a widget that does not currently have the focus.
|
||||
|
||||
GTK has traditionally supported different kinds of shortcuts:
|
||||
|
||||
Accelerators
|
||||
: Accelerators are any other shortcuts that can be activated regardless
|
||||
of where the focus is, and typically trigger global actions, such as
|
||||
Ctrl-Q to quit an application.
|
||||
Mnmemonics
|
||||
: Mnemonics are usually triggered using Alt as a modifier for a letter.
|
||||
They are used in places where a label is associated with a control,
|
||||
and are indicated by underlining the letter in the label. As a special
|
||||
case, inside menus (i.e. inside #GtkPopoverMenu), mnemonics can be
|
||||
triggered without the modifier.
|
||||
Key bindings
|
||||
: Key bindings are specific to individual widgets, such as Ctrl-C or
|
||||
Ctrl-V in an entry copy to or paste from the clipboard. They are only
|
||||
triggered when the widget has focus.
|
||||
|
||||
- Accelerators are any other shortcuts that can be activated regardless
|
||||
of where the focus is, and typically trigger global actions, such as
|
||||
Ctrl-Q to quit an application.
|
||||
- Mnemonics are usually triggered using Alt as a modifier for a letter.
|
||||
They are used in places where a label is associated with a control,
|
||||
and are indicated by underlining the letter in the label. As a special
|
||||
case, inside menus (i.e. inside #GtkPopoverMenu), mnemonics can be
|
||||
triggered without the modifier.
|
||||
- Key bindings are specific to individual widgets, such as Ctrl-C or
|
||||
Ctrl-V in an entry copy to or paste from the clipboard. They are only
|
||||
triggered when the widget has focus.
|
||||
|
||||
GTK handles accelerators and mnemonics in a global scope, during the
|
||||
capture phase, and key bindings locally, during the target phase.
|
||||
|
||||
|
@@ -1,9 +1,6 @@
|
||||
fs = import('fs')
|
||||
|
||||
private_headers = [
|
||||
'imm-extra.h',
|
||||
'gtkbitmaskprivateimpl.h',
|
||||
'gdkpixbufutilsprivate.h',
|
||||
'gtkaccelgroupprivate.h',
|
||||
'gtkaccelmapprivate.h',
|
||||
'gtkaccessibleattributesetprivate.h',
|
||||
@@ -21,14 +18,21 @@ private_headers = [
|
||||
'gtkapplicationprivate.h',
|
||||
'gtkatcontextprivate.h',
|
||||
'gtkbindingsprivate.h',
|
||||
'gtkbitmaskprivateimpl.h',
|
||||
'gtkbitmaskprivate.h',
|
||||
'gtkbuildableprivate.h',
|
||||
'gtkbuilderprivate.h',
|
||||
'gtkbuilderscopeprivate.h',
|
||||
'gtkbuiltiniconprivate.h',
|
||||
'gtkbuttonprivate.h',
|
||||
'gtkcellareaboxcontextprivate.h',
|
||||
'gtkcheckbuttonprivate.h',
|
||||
'gtkcolorchooserprivate.h',
|
||||
'gtkcoloreditorprivate.h',
|
||||
'gtkcolorpickerkwinprivate.h',
|
||||
'gtkcolorpickerportalprivate.h',
|
||||
'gtkcolorpickerprivate.h',
|
||||
'gtkcolorpickershellprivate.h',
|
||||
'gtkcolorplaneprivate.h',
|
||||
'gtkcolorscaleprivate.h',
|
||||
'gtkcolorswatchprivate.h',
|
||||
@@ -40,6 +44,7 @@ private_headers = [
|
||||
'gtkcolumnviewsorterprivate.h',
|
||||
'gtkcolumnviewtitleprivate.h',
|
||||
'gtkcomboboxprivate.h',
|
||||
'gtkcomposetable.h',
|
||||
'gtkconstraintexpressionprivate.h',
|
||||
'gtkconstraintguideprivate.h',
|
||||
'gtkconstraintlayoutprivate.h',
|
||||
@@ -47,6 +52,7 @@ private_headers = [
|
||||
'gtkconstraintsolverprivate.h',
|
||||
'gtkconstrainttypesprivate.h',
|
||||
'gtkconstraintvflparserprivate.h',
|
||||
'gtkcountingbloomfilterprivate.h',
|
||||
'gtkcssanimatedstyleprivate.h',
|
||||
'gtkcssanimationprivate.h',
|
||||
'gtkcssarrayvalueprivate.h',
|
||||
@@ -57,6 +63,7 @@ private_headers = [
|
||||
'gtkcsscalcvalueprivate.h',
|
||||
'gtkcsscolorvalueprivate.h',
|
||||
'gtkcsscornervalueprivate.h',
|
||||
'gtkcssdataurlprivate.h',
|
||||
'gtkcssdimensionvalueprivate.h',
|
||||
'gtkcssdynamicprivate.h',
|
||||
'gtkcsseasevalueprivate.h',
|
||||
@@ -65,6 +72,7 @@ private_headers = [
|
||||
'gtkcssfontfeaturesvalueprivate.h',
|
||||
'gtkcssfontvariationsvalueprivate.h',
|
||||
'gtkcssiconthemevalueprivate.h',
|
||||
'gtkcssimageconicprivate.h',
|
||||
'gtkcssimagecrossfadeprivate.h',
|
||||
'gtkcssimagefallbackprivate.h',
|
||||
'gtkcssimageiconthemeprivate.h',
|
||||
@@ -81,6 +89,7 @@ private_headers = [
|
||||
'gtkcssinheritvalueprivate.h',
|
||||
'gtkcssinitialvalueprivate.h',
|
||||
'gtkcsskeyframesprivate.h',
|
||||
'gtkcsslocationprivate.h',
|
||||
'gtkcsslookupprivate.h',
|
||||
'gtkcssmatcherprivate.h',
|
||||
'gtkcssnodedeclarationprivate.h',
|
||||
@@ -96,6 +105,7 @@ private_headers = [
|
||||
'gtkcssrgbavalueprivate.h',
|
||||
'gtkcsssectionprivate.h',
|
||||
'gtkcssselectorprivate.h',
|
||||
'gtkcssserializerprivate.h',
|
||||
'gtkcssshadowsvalueprivate.h',
|
||||
'gtkcssshadowvalueprivate.h',
|
||||
'gtkcssshorthandpropertyprivate.h',
|
||||
@@ -104,6 +114,7 @@ private_headers = [
|
||||
'gtkcssstylechangeprivate.h',
|
||||
'gtkcssstyleprivate.h',
|
||||
'gtkcssstylepropertyprivate.h',
|
||||
'gtkcsstokenizerprivate.h',
|
||||
'gtkcsstransformvalueprivate.h',
|
||||
'gtkcsstransientnodeprivate.h',
|
||||
'gtkcsstransitionprivate.h',
|
||||
@@ -113,6 +124,9 @@ private_headers = [
|
||||
'gtkcsswidgetnodeprivate.h',
|
||||
'gtkcsswin32sizevalueprivate.h',
|
||||
'gtkdialogprivate.h',
|
||||
'gtkdragdestprivate.h',
|
||||
'gtkdropprivate.h',
|
||||
'gtkemojicompletion.h',
|
||||
'gtkentryprivate.h',
|
||||
'gtkeventcontrollerlegacyprivate.h',
|
||||
'gtkeventcontrollerprivate.h',
|
||||
@@ -121,6 +135,7 @@ private_headers = [
|
||||
'gtkfilechooserprivate.h',
|
||||
'gtkfilechooserwidgetprivate.h',
|
||||
'gtkfilefilterprivate.h',
|
||||
'gtkflowboxprivate.h',
|
||||
'gtkfontchooserprivate.h',
|
||||
'gtkfontchooserwidgetprivate.h',
|
||||
'gtkgesturedragprivate.h',
|
||||
@@ -144,15 +159,25 @@ private_headers = [
|
||||
'gtkiconviewprivate.h',
|
||||
'gtkimagedefinitionprivate.h',
|
||||
'gtkimageprivate.h',
|
||||
'gtkimcontextbroadway.h',
|
||||
'gtkimcontextime.h',
|
||||
'gtkimcontextquartz.h',
|
||||
'gtkimcontextsimpleprivate.h',
|
||||
'gtkimcontextsimpleseqs.h',
|
||||
'gtkimcontextwayland.h',
|
||||
'gtkimmoduleprivate.h',
|
||||
'gtkimmodule.h',
|
||||
'gtkintl.h',
|
||||
'gtkistringprivate.h',
|
||||
'gtkkineticscrollingprivate.h',
|
||||
'gtklabelprivate.h',
|
||||
'gtklayoutmanagerprivate.h',
|
||||
'gtklistbaseprivate.h',
|
||||
'gtklistitemprivate.h',
|
||||
'gtklistitemfactoryprivate.h',
|
||||
'gtklistitemmanagerprivate.h',
|
||||
'gtklistitemwidgetprivate.h',
|
||||
'gtklistlistmodelprivate.h',
|
||||
'gtklockbuttonprivate.h',
|
||||
'gtkmagnifierprivate.h',
|
||||
'gtkmediafileprivate.h',
|
||||
@@ -160,20 +185,33 @@ private_headers = [
|
||||
'gtkmenusectionboxprivate.h',
|
||||
'gtkmenutrackeritemprivate.h',
|
||||
'gtkmenutrackerprivate.h',
|
||||
'gtkmodelbuttonprivate.h',
|
||||
'gtkmodulesprivate.h',
|
||||
'gtkmountoperationprivate.h',
|
||||
'gtknativedialogprivate.h',
|
||||
'gtknativeprivate.h',
|
||||
'gtknomediafileprivate.h',
|
||||
'gtkpango.h',
|
||||
'gtkpasswordentrybufferprivate.h',
|
||||
'gtkpasswordentryprivate.h',
|
||||
'gtkpathbar.h',
|
||||
'gdkpixbufutilsprivate.h',
|
||||
'gtkplacessidebarprivate.h',
|
||||
'gtkplacesviewprivate.h',
|
||||
'gtkplacesviewrowprivate.h',
|
||||
'gtkpointerfocusprivate.h',
|
||||
'gtkpopcountprivate.h',
|
||||
'gtkpopovermenubarprivate.h',
|
||||
'gtkpopovermenuprivate.h',
|
||||
'gtkpopoverprivate.h',
|
||||
'gtkprintbackendprivate.h',
|
||||
'gtkprinterprivate.h',
|
||||
'gtkprintoperation-portal.h',
|
||||
'gtkprintoperation-private.h',
|
||||
'gtkprintutils.h',
|
||||
'gtkprivate.h',
|
||||
'gtkprogresstrackerprivate.h',
|
||||
'gtkpropertylookuplistmodelprivate.h',
|
||||
'gtkquery.h',
|
||||
'gtkrangeprivate.h',
|
||||
'gtkrbtreeprivate.h',
|
||||
@@ -181,22 +219,35 @@ private_headers = [
|
||||
'gtkrenderborderprivate.h',
|
||||
'gtkrendericonprivate.h',
|
||||
'gtkrendernodepaintableprivate.h',
|
||||
'gtkrootprivate.h',
|
||||
'gtkroundedboxprivate.h',
|
||||
'gtkscalerprivate.h',
|
||||
'gtksearchengine.h',
|
||||
'gtksearchenginemodel.h',
|
||||
'gtksearchenginequartz.h',
|
||||
'gtksearchenginetracker3.h',
|
||||
'gtksearchentryprivate.h',
|
||||
'gtksecurememoryprivate.h',
|
||||
'gtksettingsprivate.h',
|
||||
'gtkshortcutactionprivate.h',
|
||||
'gtkshortcutcontrollerprivate.h',
|
||||
'gtkshortcutmanagerprivate.h',
|
||||
'gtkshortcutsshortcutprivate.h',
|
||||
'gtkshortcutswindowprivate.h',
|
||||
'gtksidebarrowprivate.h',
|
||||
'gtksizegroup-private.h',
|
||||
'gtksizerequestcacheprivate.h',
|
||||
'gtksnapshotprivate.h',
|
||||
'gtksorterprivate.h',
|
||||
'gtksortkeysprivate.h',
|
||||
'gtkspinbuttonprivate.h',
|
||||
'gtkstyleanimationprivate.h',
|
||||
'gtkstylecascadeprivate.h',
|
||||
'gtkstylecontextprivate.h',
|
||||
'gtkstylepropertyprivate.h',
|
||||
'gtkstyleproviderprivate.h',
|
||||
'gtktestatcontextprivate.h',
|
||||
'gtktextattributes.h',
|
||||
'gtktextbufferprivate.h',
|
||||
'gtktextchildprivate.h',
|
||||
'gtktextdisplayprivate.h',
|
||||
@@ -206,12 +257,17 @@ private_headers = [
|
||||
'gtktextlayoutprivate.h',
|
||||
'gtktextlinedisplaycacheprivate.h',
|
||||
'gtktextmarkprivate.h',
|
||||
'gtktextprivate.h',
|
||||
'gtktextsegment.h',
|
||||
'gtktexttagprivate.h',
|
||||
'gtktextutil.h',
|
||||
'gtktextviewchildprivate.h',
|
||||
'gtktextviewprivate.h',
|
||||
'gtktogglebuttonprivate.h',
|
||||
'gtktoolbarprivate.h',
|
||||
'gtktooltipprivate.h',
|
||||
'gtktooltipwindowprivate.h',
|
||||
'gtktreedatalist.h',
|
||||
'gtktreepopoverprivate.h',
|
||||
'gtktreeprivate.h',
|
||||
'gtktreerbtreeprivate.h',
|
||||
@@ -222,8 +278,21 @@ private_headers = [
|
||||
'gtkwin32drawprivate.h',
|
||||
'gtkwin32themeprivate.h',
|
||||
'gtkwindowprivate.h',
|
||||
'gtk-text-input-client-protocol.h',
|
||||
'roaring.h',
|
||||
|
||||
'gsettings-mapping.h',
|
||||
'gskpango.h',
|
||||
'gtkdbusgenerated.h',
|
||||
'imm-extra.h',
|
||||
'language-names.h',
|
||||
'open-type-layout.h',
|
||||
'script-names.h',
|
||||
'text-input-unstable-v3-client-protocol.h',
|
||||
|
||||
'a11y',
|
||||
'inspector',
|
||||
'roaring',
|
||||
'timsort',
|
||||
'tools',
|
||||
]
|
||||
|
||||
images = [
|
||||
@@ -448,43 +517,46 @@ if get_option('gtk_doc')
|
||||
expand_md_targets = []
|
||||
foreach t : expand_content_md_files
|
||||
expand_md_targets += custom_target(t,
|
||||
input: [ t ],
|
||||
output: [ fs.replace_suffix(t, '.xml') ],
|
||||
command: [ expand_md, '@INPUT@', '@OUTPUT@'])
|
||||
input: [ t ],
|
||||
output: [ fs.replace_suffix(t, '.xml') ],
|
||||
command: [ expand_md, '@INPUT@', '@OUTPUT@'],
|
||||
)
|
||||
endforeach
|
||||
|
||||
gnome.gtkdoc('gtk4',
|
||||
mode: 'none',
|
||||
main_xml: 'gtk4-docs.xml',
|
||||
src_dir: [
|
||||
gtkinc,
|
||||
],
|
||||
dependencies: libgtk_dep,
|
||||
gobject_typesfile: configure_file(
|
||||
input: 'gtk4.types.in',
|
||||
output: 'gtk4.types',
|
||||
configuration: types_conf,
|
||||
),
|
||||
scan_args: [
|
||||
'--ignore-decorators=_GDK_EXTERN|G_GNUC_WARN_UNUSED_RESULT',
|
||||
'--ignore-headers=' + ' '.join(private_headers),
|
||||
],
|
||||
mkdb_args: [
|
||||
'--default-includes=gtk/gtk.h',
|
||||
],
|
||||
fixxref_args: [
|
||||
'--html-dir=@0@'.format(docpath),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
|
||||
'--extra-dir=@0@'.format(cairo_docpath),
|
||||
'--extra-dir=@0@'.format(gdkpixbuf_docpath),
|
||||
'--extra-dir=../gdk',
|
||||
'--extra-dir=../gsk',
|
||||
],
|
||||
content_files: content_files + expand_md_targets,
|
||||
html_assets: images,
|
||||
install: true)
|
||||
mode: 'none',
|
||||
main_xml: 'gtk4-docs.xml',
|
||||
src_dir: [
|
||||
gtkinc,
|
||||
],
|
||||
dependencies: libgtk_dep,
|
||||
gobject_typesfile: configure_file(
|
||||
input: 'gtk4.types.in',
|
||||
output: 'gtk4.types',
|
||||
configuration: types_conf,
|
||||
),
|
||||
scan_args: [
|
||||
'--ignore-decorators=_GDK_EXTERN|G_GNUC_WARN_UNUSED_RESULT',
|
||||
'--ignore-headers=' + ' '.join(private_headers),
|
||||
],
|
||||
mkdb_args: [
|
||||
'--default-includes=gtk/gtk.h',
|
||||
'--ignore-files=' + ' '.join(private_headers),
|
||||
],
|
||||
fixxref_args: [
|
||||
'--html-dir=@0@'.format(docpath),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')),
|
||||
'--extra-dir=@0@'.format(join_paths(glib_docpath, 'gio')),
|
||||
'--extra-dir=@0@'.format(cairo_docpath),
|
||||
'--extra-dir=@0@'.format(gdkpixbuf_docpath),
|
||||
'--extra-dir=../gdk',
|
||||
'--extra-dir=../gsk',
|
||||
],
|
||||
content_files: content_files + expand_md_targets,
|
||||
html_assets: images,
|
||||
install: true,
|
||||
)
|
||||
endif
|
||||
|
||||
xsltproc = find_program('xsltproc', required: false)
|
||||
@@ -519,16 +591,17 @@ if get_option('man-pages') and xsltproc.found()
|
||||
man_name = man.get(0)
|
||||
man_section = man.get(1, '1')
|
||||
custom_target('@0@.@1@'.format(man_name, man_section),
|
||||
input: '@0@.xml'.format(man_name),
|
||||
output: '@0@.@1@'.format(man_name, man_section),
|
||||
command: [
|
||||
xsltproc,
|
||||
xlstproc_flags,
|
||||
'-o', '@OUTPUT@',
|
||||
'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
|
||||
'@INPUT@',
|
||||
],
|
||||
install: true,
|
||||
install_dir: join_paths(get_option('mandir'), 'man@0@'.format(man_section)))
|
||||
input: '@0@.xml'.format(man_name),
|
||||
output: '@0@.@1@'.format(man_name, man_section),
|
||||
command: [
|
||||
xsltproc,
|
||||
xlstproc_flags,
|
||||
'-o', '@OUTPUT@',
|
||||
'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
|
||||
'@INPUT@',
|
||||
],
|
||||
install: true,
|
||||
install_dir: join_paths(get_option('mandir'), 'man@0@'.format(man_section)),
|
||||
)
|
||||
endforeach
|
||||
endif
|
||||
|
@@ -165,7 +165,7 @@ for this change.
|
||||
| ::key-release-event | #GtkEventControllerKey |
|
||||
| ::enter-notify-event | #GtkEventControllerMotion |
|
||||
| ::leave-notify-event | #GtkEventControllerMotion |
|
||||
| ::configure-event | replaced by #GdkSurface::size-changed |
|
||||
| ::configure-event | replaced by #GdkSurface::layout |
|
||||
| ::focus-in-event | #GtkEventControllerFocus |
|
||||
| ::focus-out-event | #GtkEventControllerFocus |
|
||||
| ::map-event | replaced by #GdkSurface:mapped |
|
||||
@@ -510,9 +510,14 @@ gtk_window_set_gravity(), gtk_window_move(), gtk_window_parse_geometry(),
|
||||
gtk_window_set_keep_above(), gtk_window_set_keep_below(),
|
||||
gtk_window_begin_resize_drag(), gtk_window_begin_move_drag().
|
||||
Most likely, you should just stop using them. In some cases, you can
|
||||
fall back to using the underlying #GdkToplevel APIS (for example,
|
||||
fall back to using the underlying #GdkToplevel APIs (for example,
|
||||
gdk_toplevel_begin_resize()).
|
||||
|
||||
The APIs for controlling GtkWindow size have changed to be better aligned
|
||||
with the way size changes are integrated in the frame cycle. gtk_window_resize()
|
||||
and gtk_window_get_size() have been removed. Instead, use
|
||||
gtk_window_set_default_size() and gtk_window_get_default_size().
|
||||
|
||||
### Adapt to GtkHeaderBar and GtkActionBar API changes
|
||||
|
||||
The gtk_header_bar_set_show_close_button() function has been renamed to
|
||||
@@ -1057,7 +1062,7 @@ to start a drag manually, call gdk_drag_begin().
|
||||
The ::drag-data-get signal has been replaced by the #GtkDragSource::prepare
|
||||
signal, which returns a #GdkContentProvider for the drag operation.
|
||||
|
||||
The destination-side Drag-and-Drop apis in GTK 4 have also been changed
|
||||
The destination-side Drag-and-Drop API in GTK 4 have also been changed
|
||||
to use an event controller, #GtkDropTarget. Instead of calling
|
||||
gtk_drag_dest_set() and connecting to #GtkWidget signals, you create
|
||||
a #GtkDropTarget object, attach it to the widget with
|
||||
@@ -1144,6 +1149,19 @@ pointer coordinates as inout arguments any more, but as normal in ones.
|
||||
|
||||
See: gtk_tree_view_get_tooltip_context(), gtk_icon_view_get_tooltip_context()
|
||||
|
||||
### Stop using GtkFileChooserButton
|
||||
|
||||
The `GtkFileChooserButton` widget was removed, due to its shortcomings in
|
||||
the user interaction. You can replace it with a simple #GtkButton that
|
||||
shows a #GtkFileChooserNative dialog when clicked; once the file selection
|
||||
has completed, you can update the label of the #GtkButton with the selected
|
||||
file.
|
||||
|
||||
### Adapt to changed GtkSettings properties
|
||||
|
||||
In GTK 3 the #GtkSettings:gtk-cursor-aspect-ratio property of #GtkSettings was
|
||||
a float. In GTK 4 this has been changed to a double.
|
||||
|
||||
## Changes to consider after the switch
|
||||
|
||||
GTK 4 has a number of new features that you may want to take
|
||||
|
@@ -97,11 +97,11 @@ the question you have, this list is a good place to start.
|
||||
#define N_(x) x
|
||||
#define C_(ctx,x) pgettext (ctx, x)
|
||||
|
||||
You use N_() (N stands for no-op) to mark a string for translation in
|
||||
You use `N_()` (N stands for no-op) to mark a string for translation in
|
||||
a location where a function call to gettext() is not allowed, such as
|
||||
in an array initializer. You eventually have to call gettext() on the
|
||||
string to actually fetch the translation. _() both marks the string for
|
||||
translation and actually translates it. The C_() macro (C stands for
|
||||
string to actually fetch the translation. `_()` both marks the string for
|
||||
translation and actually translates it. The `C_()` macro (C stands for
|
||||
context) adds an additional context to the string that is marked for
|
||||
translation, which can help to disambiguate short strings that might
|
||||
need different translations in different parts of your program.
|
||||
@@ -190,7 +190,7 @@ the question you have, this list is a good place to start.
|
||||
encode string literals in UTF-8 by using octal or hexadecimal escapes
|
||||
like `\212` or `\xa8` to encode each byte. This is portable, but
|
||||
modifying the escaped strings is not very convenient. Be careful when
|
||||
mixing hexadecimal escapes with ordinary text; `"\xa8abcd" is a string
|
||||
mixing hexadecimal escapes with ordinary text; `"\xa8abcd"` is a string
|
||||
of length 1 !
|
||||
|
||||
- Runtime conversion
|
||||
|
@@ -12,13 +12,6 @@ gtk_widget_set_size_request():
|
||||
we use 1x1 for implementation convenience)
|
||||
- causes notifies on width_request, height_request properties
|
||||
|
||||
gtk_window_resize():
|
||||
- causes a configure request in all cases if the window is mapped,
|
||||
unless the new size is the same as the old size
|
||||
- overrides the default size on map if the window is unmapped
|
||||
- allows size of 0, equivalent to 1
|
||||
- clamped to geometry hints
|
||||
|
||||
gtk_window_set_default_size():
|
||||
- has no effect after the window has been mapped the first time,
|
||||
unless the window has been unrealized in which case it should
|
||||
@@ -26,7 +19,6 @@ gtk_window_set_default_size():
|
||||
- allows size of 0, equivalent to 1
|
||||
- allows size of -1 to unset the default size
|
||||
- clamped to geometry hints
|
||||
- gtk_window_resize() overrides it
|
||||
- causes notifies on default_width, default_height properties
|
||||
|
||||
gtk_window_get_default_size():
|
||||
|
@@ -615,51 +615,6 @@ create_font_button (void)
|
||||
return new_widget_info ("font-button", vbox, SMALL);
|
||||
}
|
||||
|
||||
static WidgetInfo *
|
||||
create_file_button (void)
|
||||
{
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *vbox2;
|
||||
GtkWidget *picker;
|
||||
char *path;
|
||||
GFile *file;
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||
vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
|
||||
picker = gtk_file_chooser_button_new ("File Chooser Button",
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
gtk_widget_set_size_request (picker, 150, -1);
|
||||
gtk_widget_set_halign (picker, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (picker, GTK_ALIGN_CENTER);
|
||||
gtk_box_append (GTK_BOX (vbox2), picker);
|
||||
gtk_box_append (GTK_BOX (vbox2),
|
||||
gtk_label_new ("File Button (Files)"));
|
||||
|
||||
gtk_box_append (GTK_BOX (vbox),
|
||||
vbox2);
|
||||
gtk_box_append (GTK_BOX (vbox),
|
||||
gtk_separator_new (GTK_ORIENTATION_HORIZONTAL));
|
||||
|
||||
vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
|
||||
picker = gtk_file_chooser_button_new ("File Chooser Button",
|
||||
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_widget_set_size_request (picker, 150, -1);
|
||||
path = g_build_filename (g_get_home_dir (), "Documents", NULL);
|
||||
file = g_file_new_for_path (path);
|
||||
gtk_file_chooser_set_file (GTK_FILE_CHOOSER (picker), file, NULL);
|
||||
g_free (path);
|
||||
g_object_unref (file);
|
||||
gtk_widget_set_halign (picker, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (picker, GTK_ALIGN_CENTER);
|
||||
gtk_box_append (GTK_BOX (vbox2), picker);
|
||||
gtk_box_append (GTK_BOX (vbox2), gtk_label_new ("File Button (Select Folder)"));
|
||||
gtk_box_append (GTK_BOX (vbox), vbox2);
|
||||
|
||||
add_margin (vbox);
|
||||
|
||||
return new_widget_info ("file-button", vbox, MEDIUM);
|
||||
}
|
||||
|
||||
static WidgetInfo *
|
||||
create_editable_label (void)
|
||||
{
|
||||
@@ -2144,7 +2099,6 @@ get_all_widgets (void)
|
||||
retval = g_list_prepend (retval, create_combo_box_entry ());
|
||||
retval = g_list_prepend (retval, create_combo_box_text ());
|
||||
retval = g_list_prepend (retval, create_entry ());
|
||||
retval = g_list_prepend (retval, create_file_button ());
|
||||
retval = g_list_prepend (retval, create_font_button ());
|
||||
retval = g_list_prepend (retval, create_frame ());
|
||||
retval = g_list_prepend (retval, create_icon_view ());
|
||||
|
@@ -1022,7 +1022,7 @@ parse_line (const char *line, const char *key)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
if (!g_str_has_prefix (line, key))
|
||||
if (g_ascii_strncasecmp (line, key, strlen (key)) != 0)
|
||||
return NULL;
|
||||
p = line + strlen (key);
|
||||
if (*p != ':')
|
||||
|
@@ -280,12 +280,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->configure_notify.id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_configure_event_new (surface,
|
||||
message->configure_notify.width,
|
||||
message->configure_notify.height);
|
||||
|
||||
node = _gdk_event_queue_append (display, event);
|
||||
_gdk_windowing_got_event (display, node, event, message->base.serial);
|
||||
gdk_surface_request_layout (surface);
|
||||
|
||||
if (surface->resize_count >= 1)
|
||||
{
|
||||
|
@@ -558,6 +558,7 @@ gdk_broadway_surface_layout_popup (GdkSurface *surface,
|
||||
int height,
|
||||
GdkPopupLayout *layout)
|
||||
{
|
||||
GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
|
||||
GdkMonitor *monitor;
|
||||
GdkRectangle bounds;
|
||||
GdkRectangle final_rect;
|
||||
@@ -570,6 +571,10 @@ gdk_broadway_surface_layout_popup (GdkSurface *surface,
|
||||
gdk_surface_layout_popup_helper (surface,
|
||||
width,
|
||||
height,
|
||||
impl->shadow_left,
|
||||
impl->shadow_right,
|
||||
impl->shadow_top,
|
||||
impl->shadow_bottom,
|
||||
monitor,
|
||||
&bounds,
|
||||
layout,
|
||||
@@ -596,7 +601,7 @@ gdk_broadway_surface_layout_popup (GdkSurface *surface,
|
||||
static void
|
||||
show_popup (GdkSurface *surface)
|
||||
{
|
||||
gdk_synthesize_surface_state (surface, GDK_TOPLEVEL_STATE_WITHDRAWN, 0);
|
||||
gdk_surface_set_is_mapped (surface, TRUE);
|
||||
gdk_broadway_surface_show (surface, FALSE);
|
||||
gdk_surface_invalidate_rect (surface, NULL);
|
||||
}
|
||||
@@ -1516,7 +1521,7 @@ show_surface (GdkSurface *surface)
|
||||
was_mapped = GDK_SURFACE_IS_MAPPED (surface);
|
||||
|
||||
if (!was_mapped)
|
||||
gdk_synthesize_surface_state (surface, GDK_TOPLEVEL_STATE_WITHDRAWN, 0);
|
||||
gdk_surface_set_is_mapped (surface, TRUE);
|
||||
|
||||
gdk_broadway_surface_show (surface, FALSE);
|
||||
|
||||
@@ -1524,11 +1529,12 @@ show_surface (GdkSurface *surface)
|
||||
gdk_surface_invalidate_rect (surface, NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
static void
|
||||
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;
|
||||
@@ -1536,6 +1542,7 @@ gdk_broadway_toplevel_present (GdkToplevel *toplevel,
|
||||
int width, height;
|
||||
GdkGeometry geometry;
|
||||
GdkSurfaceHints mask;
|
||||
gboolean maximize;
|
||||
|
||||
gdk_broadway_surface_unminimize (surface);
|
||||
|
||||
@@ -1577,14 +1584,23 @@ gdk_broadway_toplevel_present (GdkToplevel *toplevel,
|
||||
gdk_surface_constrain_size (&geometry, mask, width, height, &width, &height);
|
||||
gdk_broadway_surface_toplevel_resize (surface, width, height);
|
||||
|
||||
if (gdk_toplevel_layout_get_maximized (layout))
|
||||
gdk_broadway_surface_maximize (surface);
|
||||
else
|
||||
gdk_broadway_surface_unmaximize (surface);
|
||||
if (gdk_toplevel_layout_get_maximized (layout, &maximize))
|
||||
{
|
||||
if (maximize)
|
||||
gdk_broadway_surface_maximize (surface);
|
||||
else
|
||||
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;
|
||||
}
|
||||
|
||||
show_surface (surface);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@@ -64,6 +64,11 @@ struct _GdkBroadwaySurface
|
||||
|
||||
int root_x;
|
||||
int root_y;
|
||||
|
||||
int shadow_left;
|
||||
int shadow_right;
|
||||
int shadow_top;
|
||||
int shadow_bottom;
|
||||
};
|
||||
|
||||
struct _GdkBroadwaySurfaceClass
|
||||
|
@@ -59,17 +59,25 @@ libgdk_broadway = static_library('gdk-broadway',
|
||||
'-DGTK_COMPILATION',
|
||||
'-DG_LOG_DOMAIN="Gdk"',
|
||||
] + common_cflags,
|
||||
link_args: common_ldflags,
|
||||
dependencies: [gdk_deps, gdk_broadway_deps])
|
||||
dependencies: [gdk_deps, gdk_broadway_deps],
|
||||
)
|
||||
|
||||
# gtk4-broadwayd
|
||||
|
||||
broadwayd_syslib = os_win32 ? find_library('ws2_32') : shmlib
|
||||
|
||||
executable('gtk4-broadwayd',
|
||||
clienthtml_h, broadwayjs_h, gdkconfig, gdkenum_h,
|
||||
'broadwayd.c', 'broadway-server.c', 'broadway-output.c',
|
||||
sources: [
|
||||
clienthtml_h,
|
||||
broadwayjs_h,
|
||||
gdkconfig,
|
||||
gdkenum_h,
|
||||
'broadwayd.c',
|
||||
'broadway-server.c',
|
||||
'broadway-output.c',
|
||||
],
|
||||
include_directories: [confinc, gdkinc, include_directories('.')],
|
||||
c_args: ['-DGTK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"', ],
|
||||
dependencies : [broadwayd_syslib, gdk_deps],
|
||||
install : true)
|
||||
dependencies: [ broadwayd_syslib, gdk_deps ],
|
||||
install: true,
|
||||
)
|
||||
|
@@ -15,9 +15,6 @@ gboolean gdk_device_grab_info (GdkDisplay *display,
|
||||
|
||||
void gdk_pre_parse (void);
|
||||
|
||||
void gdk_surface_freeze_toplevel_updates (GdkSurface *surface);
|
||||
void gdk_surface_thaw_toplevel_updates (GdkSurface *surface);
|
||||
|
||||
gboolean gdk_surface_supports_edge_constraints (GdkSurface *surface);
|
||||
|
||||
void gdk_display_set_double_click_time (GdkDisplay *display,
|
||||
|
@@ -182,6 +182,7 @@ G_GNUC_UNUSED static inline void
|
||||
gdk_array(splice) (GdkArray *self,
|
||||
gsize pos,
|
||||
gsize removed,
|
||||
gboolean stolen,
|
||||
_T_ *additions,
|
||||
gsize added)
|
||||
{
|
||||
@@ -192,8 +193,9 @@ gdk_array(splice) (GdkArray *self,
|
||||
g_assert (pos + removed <= size);
|
||||
remaining = size - pos - removed;
|
||||
|
||||
gdk_array(free_elements) (gdk_array(index) (self, pos),
|
||||
gdk_array(index) (self, pos + removed));
|
||||
if (!stolen)
|
||||
gdk_array(free_elements) (gdk_array(index) (self, pos),
|
||||
gdk_array(index) (self, pos + removed));
|
||||
|
||||
gdk_array(reserve) (self, size - removed + added);
|
||||
|
||||
@@ -225,9 +227,9 @@ gdk_array(set_size) (GdkArray *self,
|
||||
{
|
||||
gsize old_size = gdk_array(get_size) (self);
|
||||
if (new_size > old_size)
|
||||
gdk_array(splice) (self, old_size, 0, NULL, new_size - old_size);
|
||||
gdk_array(splice) (self, old_size, 0, FALSE, NULL, new_size - old_size);
|
||||
else
|
||||
gdk_array(splice) (self, new_size, old_size - new_size, NULL, 0);
|
||||
gdk_array(splice) (self, new_size, old_size - new_size, FALSE, NULL, 0);
|
||||
}
|
||||
|
||||
G_GNUC_UNUSED static void
|
||||
@@ -241,6 +243,7 @@ gdk_array(append) (GdkArray *self,
|
||||
gdk_array(splice) (self,
|
||||
gdk_array(get_size) (self),
|
||||
0,
|
||||
FALSE,
|
||||
#ifdef GDK_ARRAY_BY_VALUE
|
||||
value,
|
||||
#else
|
||||
|
@@ -49,6 +49,12 @@ struct _GdkContentProvider
|
||||
GObject parent;
|
||||
};
|
||||
|
||||
/**
|
||||
* GdkContentProviderClass:
|
||||
* @content_changed: Signal class closure for #GdkContentProvider::content-changed
|
||||
*
|
||||
* Class structure for #GdkContentProvider.
|
||||
*/
|
||||
struct _GdkContentProviderClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
@@ -56,6 +62,7 @@ struct _GdkContentProviderClass
|
||||
/* signals */
|
||||
void (* content_changed) (GdkContentProvider *provider);
|
||||
|
||||
/*< private >*/
|
||||
/* vfuncs */
|
||||
void (* attach_clipboard) (GdkContentProvider *provider,
|
||||
GdkClipboard *clipboard);
|
||||
|
@@ -54,12 +54,11 @@ typedef enum
|
||||
GDK_PROPERTY_CHANGE_MASK = 1 << 16,
|
||||
GDK_PROXIMITY_IN_MASK = 1 << 18,
|
||||
GDK_PROXIMITY_OUT_MASK = 1 << 19,
|
||||
GDK_SUBSTRUCTURE_MASK = 1 << 20,
|
||||
GDK_SCROLL_MASK = 1 << 21,
|
||||
GDK_TOUCH_MASK = 1 << 22,
|
||||
GDK_SMOOTH_SCROLL_MASK = 1 << 23,
|
||||
GDK_TOUCHPAD_GESTURE_MASK = 1 << 24,
|
||||
GDK_TABLET_PAD_MASK = 1 << 25,
|
||||
GDK_SCROLL_MASK = 1 << 20,
|
||||
GDK_TOUCH_MASK = 1 << 21,
|
||||
GDK_SMOOTH_SCROLL_MASK = 1 << 22,
|
||||
GDK_TOUCHPAD_GESTURE_MASK = 1 << 23,
|
||||
GDK_TABLET_PAD_MASK = 1 << 24,
|
||||
GDK_ALL_EVENTS_MASK = 0x3FFFFFE
|
||||
} GdkEventMask;
|
||||
|
||||
|
@@ -32,6 +32,11 @@ G_BEGIN_DECLS
|
||||
#define GDK_DEVICE_TOOL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_DEVICE_TOOL, GdkDeviceTool))
|
||||
#define GDK_IS_DEVICE_TOOL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_DEVICE_TOOL))
|
||||
|
||||
/**
|
||||
* GdkDeviceTool:
|
||||
*
|
||||
* A physical tool associated to a #GdkDevice.
|
||||
*/
|
||||
typedef struct _GdkDeviceTool GdkDeviceTool;
|
||||
|
||||
/**
|
||||
|
@@ -30,6 +30,12 @@
|
||||
* during a DND operation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* GdkDragSurfaceInterface:
|
||||
*
|
||||
* The #GdkDragSurfaceInterface implementation is private to GDK.
|
||||
*/
|
||||
|
||||
G_DEFINE_INTERFACE (GdkDragSurface, gdk_drag_surface, GDK_TYPE_SURFACE)
|
||||
|
||||
static gboolean
|
||||
|
159
gdk/gdkevents.c
159
gdk/gdkevents.c
@@ -430,7 +430,6 @@ static void
|
||||
gdk_event_init_types_once (void)
|
||||
{
|
||||
g_type_ensure (GDK_TYPE_BUTTON_EVENT);
|
||||
g_type_ensure (GDK_TYPE_CONFIGURE_EVENT);
|
||||
g_type_ensure (GDK_TYPE_CROSSING_EVENT);
|
||||
g_type_ensure (GDK_TYPE_DELETE_EVENT);
|
||||
g_type_ensure (GDK_TYPE_DND_EVENT);
|
||||
@@ -1139,6 +1138,22 @@ gdk_event_get_axes (GdkEvent *event,
|
||||
return GDK_EVENT_GET_CLASS (event)->get_axes (event, axes, n_axes);
|
||||
}
|
||||
|
||||
double *
|
||||
gdk_event_dup_axes (GdkEvent *event)
|
||||
{
|
||||
double *axes;
|
||||
guint n_axes;
|
||||
|
||||
if (gdk_event_get_axes (event, &axes, &n_axes))
|
||||
{
|
||||
double *axes_copy = g_memdup (axes, n_axes * sizeof (double));
|
||||
|
||||
return axes_copy;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_event_type:
|
||||
* @event: a #GdkEvent
|
||||
@@ -1315,6 +1330,12 @@ gdk_event_get_position (GdkEvent *event,
|
||||
|
||||
/* {{{ GdkButtonEvent */
|
||||
|
||||
/**
|
||||
* GdkButtonEvent:
|
||||
*
|
||||
* An event related to a button on a pointer device/
|
||||
*/
|
||||
|
||||
static void
|
||||
gdk_button_event_finalize (GdkEvent *event)
|
||||
{
|
||||
@@ -1439,6 +1460,12 @@ gdk_button_event_get_button (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkKeyEvent */
|
||||
|
||||
/**
|
||||
* GdkKeyEvent:
|
||||
*
|
||||
* An event related to a key-based device.
|
||||
*/
|
||||
|
||||
static GdkModifierType
|
||||
gdk_key_event_get_state (GdkEvent *event)
|
||||
{
|
||||
@@ -1818,77 +1845,13 @@ gdk_key_event_get_match (GdkEvent *event,
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ GdkConfigureEvent */
|
||||
|
||||
static gboolean
|
||||
gdk_configure_event_get_position (GdkEvent *event,
|
||||
double *x,
|
||||
double *y)
|
||||
{
|
||||
GdkConfigureEvent *self = (GdkConfigureEvent *) event;
|
||||
|
||||
*x = self->x;
|
||||
*y = self->y;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static const GdkEventTypeInfo gdk_configure_event_info = {
|
||||
sizeof (GdkConfigureEvent),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
gdk_configure_event_get_position,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
GDK_DEFINE_EVENT_TYPE (GdkConfigureEvent, gdk_configure_event,
|
||||
&gdk_configure_event_info,
|
||||
GDK_EVENT_TYPE_SLOT (GDK_CONFIGURE))
|
||||
|
||||
GdkEvent *
|
||||
gdk_configure_event_new (GdkSurface *surface,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
GdkConfigureEvent *self;
|
||||
|
||||
g_return_val_if_fail (width >= 0 && height >= 0, NULL);
|
||||
|
||||
self = gdk_event_alloc (GDK_CONFIGURE, surface, NULL, GDK_CURRENT_TIME);
|
||||
self->width = width;
|
||||
self->height = height;
|
||||
|
||||
return (GdkEvent *) self;
|
||||
}
|
||||
/* {{{ GdkTouchEvent */
|
||||
|
||||
/**
|
||||
* gdk_configure_event_get_size:
|
||||
* @event: (type GdkConfigureEvent): a configure event
|
||||
* @width: (out): return location for surface width
|
||||
* @height: (out): return location for surface height
|
||||
* GdkTouchEvent:
|
||||
*
|
||||
* Extracts the surface size from a configure event.
|
||||
* An event related to a touch-based device.
|
||||
*/
|
||||
void
|
||||
gdk_configure_event_get_size (GdkEvent *event,
|
||||
int *width,
|
||||
int *height)
|
||||
{
|
||||
GdkConfigureEvent *self = (GdkConfigureEvent *) event;
|
||||
|
||||
g_return_if_fail (GDK_IS_EVENT (event));
|
||||
g_return_if_fail (GDK_IS_EVENT_TYPE (event, GDK_CONFIGURE));
|
||||
|
||||
*width = self->width;
|
||||
*height = self->height;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ GdkTouchEvent */
|
||||
|
||||
static void
|
||||
gdk_touch_event_finalize (GdkEvent *event)
|
||||
@@ -2021,6 +1984,12 @@ gdk_touch_event_get_emulating_pointer (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkCrossingEvent */
|
||||
|
||||
/**
|
||||
* GdkCrossingEvent:
|
||||
*
|
||||
* An event caused by a pointing device moving between surfaces.
|
||||
*/
|
||||
|
||||
static void
|
||||
gdk_crossing_event_finalize (GdkEvent *event)
|
||||
{
|
||||
@@ -2159,6 +2128,12 @@ gdk_crossing_event_get_detail (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkDeleteEvent */
|
||||
|
||||
/**
|
||||
* GdkDeleteEvent:
|
||||
*
|
||||
* An event related to closing a top-level surface.
|
||||
*/
|
||||
|
||||
static const GdkEventTypeInfo gdk_delete_event_info = {
|
||||
sizeof (GdkDeleteEvent),
|
||||
NULL,
|
||||
@@ -2184,6 +2159,12 @@ gdk_delete_event_new (GdkSurface *surface)
|
||||
|
||||
/* {{{ GdkFocusEvent */
|
||||
|
||||
/**
|
||||
* GdkFocusEvent:
|
||||
*
|
||||
* An event related to a focus change.
|
||||
*/
|
||||
|
||||
static const GdkEventTypeInfo gdk_focus_event_info = {
|
||||
sizeof (GdkFocusEvent),
|
||||
NULL,
|
||||
@@ -2235,6 +2216,12 @@ gdk_focus_event_get_in (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkScrollEvent */
|
||||
|
||||
/**
|
||||
* GdkScrollEvent:
|
||||
*
|
||||
* An event related to a scrolling motion.
|
||||
*/
|
||||
|
||||
static void
|
||||
gdk_scroll_event_finalize (GdkEvent *event)
|
||||
{
|
||||
@@ -2392,6 +2379,12 @@ gdk_scroll_event_is_stop (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkTouchpadEvent */
|
||||
|
||||
/**
|
||||
* GdkTouchpadEvent:
|
||||
*
|
||||
* An event related to a touchpad device.
|
||||
*/
|
||||
|
||||
static GdkModifierType
|
||||
gdk_touchpad_event_get_state (GdkEvent *event)
|
||||
{
|
||||
@@ -2588,6 +2581,12 @@ gdk_touchpad_event_get_pinch_scale (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkPadEvent */
|
||||
|
||||
/**
|
||||
* GdkPadEvent:
|
||||
*
|
||||
* An event related to a pad-based device.
|
||||
*/
|
||||
|
||||
static const GdkEventTypeInfo gdk_pad_event_info = {
|
||||
sizeof (GdkPadEvent),
|
||||
NULL,
|
||||
@@ -2756,6 +2755,12 @@ gdk_pad_event_get_group_mode (GdkEvent *event,
|
||||
|
||||
/* {{{ GdkMotionEvent */
|
||||
|
||||
/**
|
||||
* GdkMotionEvent:
|
||||
*
|
||||
* An event related to a pointer or touch device motion.
|
||||
*/
|
||||
|
||||
static void
|
||||
gdk_motion_event_finalize (GdkEvent *event)
|
||||
{
|
||||
@@ -2910,6 +2915,12 @@ gdk_event_get_history (GdkEvent *event,
|
||||
|
||||
/* {{{ GdkProximityEvent */
|
||||
|
||||
/**
|
||||
* GdkProximityEvent:
|
||||
*
|
||||
* An event related to the proximity of a tool to a device.
|
||||
*/
|
||||
|
||||
static void
|
||||
gdk_proximity_event_finalize (GdkEvent *event)
|
||||
{
|
||||
@@ -2967,6 +2978,12 @@ gdk_proximity_event_new (GdkEventType type,
|
||||
|
||||
/* {{{ GdkDNDEvent */
|
||||
|
||||
/**
|
||||
* GdkDNDEvent:
|
||||
*
|
||||
* An event related to drag and drop operations.
|
||||
*/
|
||||
|
||||
static void
|
||||
gdk_dnd_event_finalize (GdkEvent *event)
|
||||
{
|
||||
@@ -3067,6 +3084,12 @@ gdk_dnd_event_get_drop (GdkEvent *event)
|
||||
|
||||
/* {{{ GdkGrabBrokenEvent */
|
||||
|
||||
/**
|
||||
* GdkGrabBrokenEvent:
|
||||
*
|
||||
* An event related to a broken windowing system grab.
|
||||
*/
|
||||
|
||||
static const GdkEventTypeInfo gdk_grab_broken_event_info = {
|
||||
sizeof (GdkGrabBrokenEvent),
|
||||
NULL,
|
||||
|
@@ -106,7 +106,6 @@ typedef struct _GdkEventSequence GdkEventSequence;
|
||||
typedef struct _GdkEvent GdkEvent;
|
||||
|
||||
#define GDK_TYPE_BUTTON_EVENT (gdk_button_event_get_type())
|
||||
#define GDK_TYPE_CONFIGURE_EVENT (gdk_configure_event_get_type())
|
||||
#define GDK_TYPE_CROSSING_EVENT (gdk_crossing_event_get_type())
|
||||
#define GDK_TYPE_DELETE_EVENT (gdk_delete_event_get_type())
|
||||
#define GDK_TYPE_DND_EVENT (gdk_dnd_event_get_type())
|
||||
@@ -121,7 +120,6 @@ typedef struct _GdkEvent GdkEvent;
|
||||
#define GDK_TYPE_TOUCHPAD_EVENT (gdk_touchpad_event_get_type())
|
||||
|
||||
typedef struct _GdkButtonEvent GdkButtonEvent;
|
||||
typedef struct _GdkConfigureEvent GdkConfigureEvent;
|
||||
typedef struct _GdkCrossingEvent GdkCrossingEvent;
|
||||
typedef struct _GdkDeleteEvent GdkDeleteEvent;
|
||||
typedef struct _GdkDNDEvent GdkDNDEvent;
|
||||
@@ -148,7 +146,6 @@ typedef struct _GdkTouchpadEvent GdkTouchpadEvent;
|
||||
* @GDK_ENTER_NOTIFY: the pointer has entered the surface.
|
||||
* @GDK_LEAVE_NOTIFY: the pointer has left the surface.
|
||||
* @GDK_FOCUS_CHANGE: the keyboard focus has entered or left the surface.
|
||||
* @GDK_CONFIGURE: the size of the surface has changed.
|
||||
* @GDK_PROXIMITY_IN: an input device has moved into contact with a sensing
|
||||
* surface (e.g. a touchscreen or graphics tablet).
|
||||
* @GDK_PROXIMITY_OUT: an input device has moved out of contact with a sensing
|
||||
@@ -188,7 +185,6 @@ typedef enum
|
||||
GDK_ENTER_NOTIFY,
|
||||
GDK_LEAVE_NOTIFY,
|
||||
GDK_FOCUS_CHANGE,
|
||||
GDK_CONFIGURE,
|
||||
GDK_PROXIMITY_IN,
|
||||
GDK_PROXIMITY_OUT,
|
||||
GDK_DRAG_ENTER,
|
||||
@@ -429,12 +425,6 @@ GdkNotifyType gdk_crossing_event_get_detail (GdkEvent *event);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_crossing_event_get_focus (GdkEvent *event);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_configure_event_get_type (void) G_GNUC_CONST;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_configure_event_get_size (GdkEvent *event,
|
||||
int *width,
|
||||
int *height);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_touchpad_event_get_type (void) G_GNUC_CONST;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkTouchpadGesturePhase
|
||||
|
@@ -322,25 +322,6 @@ struct _GdkFocusEvent
|
||||
gboolean focus_in;
|
||||
};
|
||||
|
||||
/*
|
||||
* GdkConfigureEvent:
|
||||
* @x: the new x coordinate of the surface, relative to its parent.
|
||||
* @y: the new y coordinate of the surface, relative to its parent.
|
||||
* @width: the new width of the surface.
|
||||
* @height: the new height of the surface.
|
||||
*
|
||||
* Generated when a surface size or position has changed.
|
||||
*/
|
||||
struct _GdkConfigureEvent
|
||||
{
|
||||
GdkEvent parent_instance;
|
||||
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
/*
|
||||
* GdkProximityEvent:
|
||||
* @tool: the #GdkDeviceTool associated to the event
|
||||
@@ -495,10 +476,6 @@ GdkEvent * gdk_focus_event_new (GdkSurface *surface,
|
||||
GdkDevice *device,
|
||||
gboolean focus_in);
|
||||
|
||||
GdkEvent * gdk_configure_event_new (GdkSurface *surface,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
GdkEvent * gdk_delete_event_new (GdkSurface *surface);
|
||||
|
||||
GdkEvent * gdk_scroll_event_new (GdkSurface *surface,
|
||||
@@ -626,6 +603,8 @@ void _gdk_event_queue_handle_motion_compression (GdkDisplay *display);
|
||||
void gdk_event_queue_handle_scroll_compression (GdkDisplay *display);
|
||||
void _gdk_event_queue_flush (GdkDisplay *display);
|
||||
|
||||
double * gdk_event_dup_axes (GdkEvent *event);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@@ -50,7 +50,7 @@ typedef struct _GdkFrameClockClass GdkFrameClockClass;
|
||||
* @GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS: corresponds to GdkFrameClock::flush-events. Should not be handled by applications.
|
||||
* @GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT: corresponds to GdkFrameClock::before-paint. Should not be handled by applications.
|
||||
* @GDK_FRAME_CLOCK_PHASE_UPDATE: corresponds to GdkFrameClock::update.
|
||||
* @GDK_FRAME_CLOCK_PHASE_LAYOUT: corresponds to GdkFrameClock::layout.
|
||||
* @GDK_FRAME_CLOCK_PHASE_LAYOUT: corresponds to GdkFrameClock::layout. Should not be handled by applicatiosn.
|
||||
* @GDK_FRAME_CLOCK_PHASE_PAINT: corresponds to GdkFrameClock::paint.
|
||||
* @GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS: corresponds to GdkFrameClock::resume-events. Should not be handled by applications.
|
||||
* @GDK_FRAME_CLOCK_PHASE_AFTER_PAINT: corresponds to GdkFrameClock::after-paint. Should not be handled by applications.
|
||||
|
@@ -33,6 +33,11 @@ G_BEGIN_DECLS
|
||||
#define GDK_GL_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_GL_TEXTURE, GdkGLTexture))
|
||||
#define GDK_IS_GL_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_GL_TEXTURE))
|
||||
|
||||
/**
|
||||
* GdkGLTexture:
|
||||
*
|
||||
* A #GdkTexture representing a GL texture object.
|
||||
*/
|
||||
typedef struct _GdkGLTexture GdkGLTexture;
|
||||
typedef struct _GdkGLTextureClass GdkGLTextureClass;
|
||||
|
||||
|
@@ -94,6 +94,11 @@ typedef enum {
|
||||
#define GDK_MEMORY_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_MEMORY_TEXTURE, GdkMemoryTexture))
|
||||
#define GDK_IS_MEMORY_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_MEMORY_TEXTURE))
|
||||
|
||||
/**
|
||||
* GdkMemoryTexture:
|
||||
*
|
||||
* A #GdkTexture representing image data in memory.
|
||||
*/
|
||||
typedef struct _GdkMemoryTexture GdkMemoryTexture;
|
||||
typedef struct _GdkMemoryTextureClass GdkMemoryTextureClass;
|
||||
|
||||
|
@@ -31,6 +31,11 @@ G_BEGIN_DECLS
|
||||
|
||||
#define GDK_TYPE_PAINTABLE (gdk_paintable_get_type ())
|
||||
|
||||
/**
|
||||
* GdkPaintable:
|
||||
*
|
||||
* Interface for paintable objects.
|
||||
*/
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
G_DECLARE_INTERFACE (GdkPaintable, gdk_paintable, GDK, PAINTABLE, GObject)
|
||||
|
||||
@@ -74,11 +79,13 @@ typedef enum {
|
||||
* this function should return the aspect ratio computed from those.
|
||||
*
|
||||
* The list of functions that can be implemented for the #GdkPaintable interface.
|
||||
* Note that apart from the first function, no function is mandatory to implement,
|
||||
* though it is a good idea to implement #GdkPaintableInterface.get_current_image()
|
||||
* for non-static paintables and #GdkPaintableInterface.get_flags() if the image
|
||||
* is not dynamic as the default implementation returns no flags and that will
|
||||
* make the implementation likely quite slow.
|
||||
*
|
||||
* Note that apart from the #GdkPaintableInterface.snapshot() function, no virtual
|
||||
* function of this interface is mandatory to implement, though it is a good idea
|
||||
* to implement #GdkPaintableInterface.get_current_image() for non-static paintables
|
||||
* and #GdkPaintableInterface.get_flags() if the image is not dynamic as the default
|
||||
* implementation returns no flags and that will make the implementation likely
|
||||
* quite slow.
|
||||
*/
|
||||
struct _GdkPaintableInterface
|
||||
{
|
||||
|
@@ -202,6 +202,7 @@ gdk_pixbuf_get_from_surface (cairo_surface_t *surface,
|
||||
if (cairo_surface_status (surface) || dest == NULL)
|
||||
{
|
||||
cairo_surface_destroy (surface);
|
||||
g_clear_object (&dest);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@@ -38,15 +38,6 @@
|
||||
|
||||
G_DEFINE_INTERFACE (GdkPopup, gdk_popup, GDK_TYPE_SURFACE)
|
||||
|
||||
enum
|
||||
{
|
||||
POPUP_LAYOUT_CHANGED,
|
||||
|
||||
N_SIGNALS
|
||||
};
|
||||
|
||||
static guint signals[N_SIGNALS] = { 0 };
|
||||
|
||||
static gboolean
|
||||
gdk_popup_default_present (GdkPopup *popup,
|
||||
int width,
|
||||
@@ -101,25 +92,6 @@ gdk_popup_default_init (GdkPopupInterface *iface)
|
||||
P_("Whether to hide on outside clicks"),
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GdkPopup::popup-layout-changed
|
||||
* @popup: the #GdkSurface that was laid out
|
||||
*
|
||||
* Emitted when the layout of a popup surface has changed, e.g. if the popup
|
||||
* layout was reactive and after the parent moved causing the popover to end
|
||||
* up partially off-screen.
|
||||
*/
|
||||
signals[POPUP_LAYOUT_CHANGED] =
|
||||
g_signal_new (g_intern_static_string ("popup-layout-changed"),
|
||||
GDK_TYPE_POPUP,
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE,
|
||||
0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -133,13 +105,16 @@ gdk_popup_default_init (GdkPopupInterface *iface)
|
||||
* If the popup was previously now showing, it will be showed,
|
||||
* otherwise it will change position according to @layout.
|
||||
*
|
||||
* After calling this function, the result of the layout can be queried
|
||||
* using gdk_popup_get_position_x(), gdk_popup_get_position_y(),
|
||||
* gdk_surface_get_width(), gdk_surface_get_height(),
|
||||
* gdk_popup_get_rect_anchor() and gdk_popup_get_surface_anchor().
|
||||
* After calling this function, the result should be handled in response
|
||||
* to the #GdkSurface::layout signal being emitted. The resulting popup
|
||||
* position can be queried using gdk_popup_get_position_x(),
|
||||
* gdk_popup_get_position_y(), and the resulting size will be sent as
|
||||
* parameters in the layout signal. Use gdk_popup_get_rect_anchor() and
|
||||
* gdk_popup_get_surface_anchor() to get the resulting anchors.
|
||||
*
|
||||
* Presenting may have fail, for example if it was immediately
|
||||
* hidden if the @popup was set to autohide.
|
||||
* Presenting may fail, for example if the @popup is set to autohide
|
||||
* and is immediately hidden upon being presented. If presenting failed,
|
||||
* the #GdkSurface::layout signal will not me emitted.
|
||||
*
|
||||
* Returns: %FALSE if it failed to be presented, otherwise %TRUE.
|
||||
*/
|
||||
@@ -164,7 +139,7 @@ gdk_popup_present (GdkPopup *popup,
|
||||
* Gets the current popup surface anchor.
|
||||
*
|
||||
* The value returned may change after calling gdk_popup_present(),
|
||||
* or after the "popup-layout-changed" is emitted.
|
||||
* or after the #GdkSurface::layout signal is emitted.
|
||||
*
|
||||
* Returns: the current surface anchor value of @popup
|
||||
*/
|
||||
@@ -183,7 +158,7 @@ gdk_popup_get_surface_anchor (GdkPopup *popup)
|
||||
* Gets the current popup rectangle anchor.
|
||||
*
|
||||
* The value returned may change after calling gdk_popup_present(),
|
||||
* or after the "popup-layout-changed" is emitted.
|
||||
* or after the #GdkSurface::layout signal is emitted.
|
||||
*
|
||||
* Returns: the current rectangle anchor value of @popup
|
||||
*/
|
||||
|
@@ -31,6 +31,11 @@ G_BEGIN_DECLS
|
||||
|
||||
#define GDK_TYPE_POPUP (gdk_popup_get_type ())
|
||||
|
||||
/**
|
||||
* GdkPopup:
|
||||
*
|
||||
* Interface for popup surfaces.
|
||||
*/
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
G_DECLARE_INTERFACE (GdkPopup, gdk_popup, GDK, POPUP, GObject)
|
||||
|
||||
|
@@ -29,7 +29,13 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _GdkSnapshotClass GdkSnapshotClass;
|
||||
/**
|
||||
* GdkSnapshot:
|
||||
*
|
||||
* Base type for snapshot operations.
|
||||
*/
|
||||
|
||||
typedef struct _GdkSnapshotClass GdkSnapshotClass;
|
||||
|
||||
#define GDK_TYPE_SNAPSHOT (gdk_snapshot_get_type ())
|
||||
|
||||
|
332
gdk/gdksurface.c
332
gdk/gdksurface.c
@@ -76,8 +76,7 @@
|
||||
*/
|
||||
|
||||
enum {
|
||||
POPUP_LAYOUT_CHANGED,
|
||||
SIZE_CHANGED,
|
||||
LAYOUT,
|
||||
RENDER,
|
||||
EVENT,
|
||||
ENTER_MONITOR,
|
||||
@@ -115,6 +114,9 @@ static void update_cursor (GdkDisplay *display,
|
||||
static void gdk_surface_set_frame_clock (GdkSurface *surface,
|
||||
GdkFrameClock *clock);
|
||||
|
||||
static void gdk_surface_queue_set_is_mapped (GdkSurface *surface,
|
||||
gboolean is_mapped);
|
||||
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
static GParamSpec *properties[LAST_PROP] = { NULL, };
|
||||
@@ -285,6 +287,10 @@ void
|
||||
gdk_surface_layout_popup_helper (GdkSurface *surface,
|
||||
int width,
|
||||
int height,
|
||||
int shadow_left,
|
||||
int shadow_right,
|
||||
int shadow_top,
|
||||
int shadow_bottom,
|
||||
GdkMonitor *monitor,
|
||||
GdkRectangle *bounds,
|
||||
GdkPopupLayout *layout,
|
||||
@@ -315,8 +321,8 @@ gdk_surface_layout_popup_helper (GdkSurface *surface,
|
||||
gdk_popup_layout_get_offset (layout, &rect_anchor_dx, &rect_anchor_dy);
|
||||
anchor_hints = gdk_popup_layout_get_anchor_hints (layout);
|
||||
|
||||
final_rect.width = width - surface->shadow_left - surface->shadow_right;
|
||||
final_rect.height = height - surface->shadow_top - surface->shadow_bottom;
|
||||
final_rect.width = width - shadow_left - shadow_right;
|
||||
final_rect.height = height - shadow_top - shadow_bottom;
|
||||
final_rect.x = maybe_flip_position (bounds->x,
|
||||
bounds->width,
|
||||
root_rect.x,
|
||||
@@ -380,10 +386,10 @@ gdk_surface_layout_popup_helper (GdkSurface *surface,
|
||||
final_rect.height = bounds->y + bounds->height - final_rect.y;
|
||||
}
|
||||
|
||||
final_rect.x -= surface->shadow_left;
|
||||
final_rect.y -= surface->shadow_top;
|
||||
final_rect.width += surface->shadow_left + surface->shadow_right;
|
||||
final_rect.height += surface->shadow_top + surface->shadow_bottom;
|
||||
final_rect.x -= shadow_left;
|
||||
final_rect.y -= shadow_top;
|
||||
final_rect.width += shadow_left + shadow_right;
|
||||
final_rect.height += shadow_top + shadow_bottom;
|
||||
|
||||
gdk_surface_get_origin (surface->parent, &x, &y);
|
||||
final_rect.x -= x;
|
||||
@@ -469,7 +475,7 @@ gdk_surface_init (GdkSurface *surface)
|
||||
{
|
||||
/* 0-initialization is good for all other fields. */
|
||||
|
||||
surface->state = GDK_TOPLEVEL_STATE_WITHDRAWN;
|
||||
surface->state = 0;
|
||||
surface->fullscreen_mode = GDK_FULLSCREEN_ON_CURRENT_MONITOR;
|
||||
surface->width = 1;
|
||||
surface->height = 1;
|
||||
@@ -548,18 +554,19 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
|
||||
g_object_class_install_properties (object_class, LAST_PROP, properties);
|
||||
|
||||
/**
|
||||
* GdkSurface::size-changed:
|
||||
* GdkSurface::layout:
|
||||
* @surface: the #GdkSurface
|
||||
* @width: the new width
|
||||
* @height: the new height
|
||||
* @width: the current width
|
||||
* @height: the current height
|
||||
*
|
||||
* Emitted when the size of @surface is changed.
|
||||
* Emitted when the size of @surface is changed, or when relayout should
|
||||
* be performed.
|
||||
*
|
||||
* Surface size is reported in ”application pixels”, not
|
||||
* ”device pixels” (see gdk_surface_get_scale_factor()).
|
||||
*/
|
||||
signals[SIZE_CHANGED] =
|
||||
g_signal_new (g_intern_static_string ("size-changed"),
|
||||
signals[LAYOUT] =
|
||||
g_signal_new (g_intern_static_string ("layout"),
|
||||
G_OBJECT_CLASS_TYPE (object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
@@ -674,6 +681,8 @@ gdk_surface_finalize (GObject *object)
|
||||
{
|
||||
GdkSurface *surface = GDK_SURFACE (object);
|
||||
|
||||
g_clear_handle_id (&surface->request_motion_id, g_source_remove);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (surface->display,
|
||||
seat_removed_cb, surface);
|
||||
|
||||
@@ -919,7 +928,10 @@ _gdk_surface_destroy_hierarchy (GdkSurface *surface,
|
||||
|
||||
_gdk_surface_clear_update_area (surface);
|
||||
|
||||
surface->state |= GDK_TOPLEVEL_STATE_WITHDRAWN;
|
||||
g_clear_handle_id (&surface->set_is_mapped_source_id, g_source_remove);
|
||||
surface->is_mapped = FALSE;
|
||||
surface->pending_is_mapped = FALSE;
|
||||
|
||||
surface->destroyed = TRUE;
|
||||
|
||||
surface_remove_from_pointer_info (surface, surface->display);
|
||||
@@ -1264,7 +1276,7 @@ gdk_surface_schedule_update (GdkSurface *surface)
|
||||
if (surface->update_freeze_count ||
|
||||
gdk_surface_is_toplevel_frozen (surface))
|
||||
{
|
||||
surface->pending_schedule_update = TRUE;
|
||||
surface->pending_phases |= GDK_FRAME_CLOCK_PHASE_PAINT;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1317,6 +1329,57 @@ gdk_surface_process_updates_internal (GdkSurface *surface)
|
||||
g_object_unref (surface);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_surface_layout_on_clock (GdkFrameClock *clock,
|
||||
void *data)
|
||||
{
|
||||
GdkSurface *surface = GDK_SURFACE (data);
|
||||
GdkSurfaceClass *class;
|
||||
|
||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||
|
||||
if (GDK_SURFACE_DESTROYED (surface))
|
||||
return;
|
||||
|
||||
if (!GDK_SURFACE_IS_MAPPED (surface))
|
||||
return;
|
||||
|
||||
surface->pending_phases &= ~GDK_FRAME_CLOCK_PHASE_LAYOUT;
|
||||
|
||||
class = GDK_SURFACE_GET_CLASS (surface);
|
||||
if (class->compute_size)
|
||||
{
|
||||
if (class->compute_size (surface))
|
||||
return;
|
||||
}
|
||||
|
||||
g_signal_emit (surface, signals[LAYOUT], 0, surface->width, surface->height);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_request_layout:
|
||||
* @surface: a #GdkSurface
|
||||
*
|
||||
* Request a %GDK_FRAME_CLOCK_PHASE_LAYOUT from the surface's
|
||||
* frame clock. See gdk_frame_clock_request_phase().
|
||||
*/
|
||||
void
|
||||
gdk_surface_request_layout (GdkSurface *surface)
|
||||
{
|
||||
GdkSurfaceClass *class;
|
||||
GdkFrameClock *frame_clock;
|
||||
|
||||
class = GDK_SURFACE_GET_CLASS (surface);
|
||||
if (class->request_layout)
|
||||
class->request_layout (surface);
|
||||
|
||||
frame_clock = gdk_surface_get_frame_clock (surface);
|
||||
g_return_if_fail (frame_clock);
|
||||
|
||||
gdk_frame_clock_request_phase (frame_clock,
|
||||
GDK_FRAME_CLOCK_PHASE_LAYOUT);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_surface_paint_on_clock (GdkFrameClock *clock,
|
||||
void *data)
|
||||
@@ -1338,6 +1401,7 @@ gdk_surface_paint_on_clock (GdkFrameClock *clock,
|
||||
* do the update later when idle instead. */
|
||||
!surface->in_update)
|
||||
{
|
||||
surface->pending_phases &= ~GDK_FRAME_CLOCK_PHASE_PAINT;
|
||||
gdk_surface_process_updates_internal (surface);
|
||||
gdk_surface_remove_update_surface (surface);
|
||||
}
|
||||
@@ -1498,6 +1562,20 @@ gdk_surface_freeze_updates (GdkSurface *surface)
|
||||
_gdk_frame_clock_uninhibit_freeze (surface->frame_clock);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
request_motion_cb (void *data)
|
||||
{
|
||||
GdkSurface *surface = GDK_SURFACE (data);
|
||||
GdkFrameClock *clock = gdk_surface_get_frame_clock (surface);
|
||||
|
||||
if (clock)
|
||||
gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS);
|
||||
surface->request_motion_id = 0;
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* gdk_surface_thaw_updates:
|
||||
* @surface: a #GdkSurface
|
||||
@@ -1515,37 +1593,22 @@ gdk_surface_thaw_updates (GdkSurface *surface)
|
||||
|
||||
if (--surface->update_freeze_count == 0)
|
||||
{
|
||||
_gdk_frame_clock_inhibit_freeze (surface->frame_clock);
|
||||
GdkFrameClock *frame_clock = surface->frame_clock;
|
||||
|
||||
if (surface->pending_schedule_update)
|
||||
_gdk_frame_clock_inhibit_freeze (frame_clock);
|
||||
|
||||
if (surface->pending_phases)
|
||||
gdk_frame_clock_request_phase (frame_clock, surface->pending_phases);
|
||||
|
||||
if (surface->request_motion && surface->request_motion_id == 0)
|
||||
{
|
||||
surface->pending_schedule_update = FALSE;
|
||||
gdk_surface_schedule_update (surface);
|
||||
surface->request_motion_id =
|
||||
g_idle_add_full (GDK_PRIORITY_REDRAW + 20,
|
||||
request_motion_cb, surface, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gdk_surface_freeze_toplevel_updates (GdkSurface *surface)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||
|
||||
surface->update_and_descendants_freeze_count++;
|
||||
gdk_surface_freeze_updates (surface);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_surface_thaw_toplevel_updates (GdkSurface *surface)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||
g_return_if_fail (surface->update_and_descendants_freeze_count > 0);
|
||||
|
||||
surface->update_and_descendants_freeze_count--;
|
||||
gdk_surface_schedule_update (surface);
|
||||
gdk_surface_thaw_updates (surface);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* gdk_surface_constrain_size:
|
||||
* @geometry: a #GdkGeometry structure
|
||||
@@ -1669,8 +1732,7 @@ gdk_surface_hide (GdkSurface *surface)
|
||||
|
||||
was_mapped = GDK_SURFACE_IS_MAPPED (surface);
|
||||
|
||||
if (GDK_SURFACE_IS_MAPPED (surface))
|
||||
gdk_synthesize_surface_state (surface, 0, GDK_TOPLEVEL_STATE_WITHDRAWN);
|
||||
gdk_surface_queue_set_is_mapped (surface, FALSE);
|
||||
|
||||
if (was_mapped)
|
||||
{
|
||||
@@ -2411,6 +2473,10 @@ gdk_surface_set_frame_clock (GdkSurface *surface,
|
||||
"resume-events",
|
||||
G_CALLBACK (gdk_surface_resume_events),
|
||||
surface);
|
||||
g_signal_connect (G_OBJECT (clock),
|
||||
"layout",
|
||||
G_CALLBACK (gdk_surface_layout_on_clock),
|
||||
surface);
|
||||
g_signal_connect (G_OBJECT (clock),
|
||||
"paint",
|
||||
G_CALLBACK (gdk_surface_paint_on_clock),
|
||||
@@ -2431,6 +2497,9 @@ gdk_surface_set_frame_clock (GdkSurface *surface,
|
||||
g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
|
||||
G_CALLBACK (gdk_surface_resume_events),
|
||||
surface);
|
||||
g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
|
||||
G_CALLBACK (gdk_surface_layout_on_clock),
|
||||
surface);
|
||||
g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
|
||||
G_CALLBACK (gdk_surface_paint_on_clock),
|
||||
surface);
|
||||
@@ -2570,58 +2639,10 @@ gdk_surface_set_opaque_region (GdkSurface *surface,
|
||||
class->set_opaque_region (surface, region);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_surface_set_shadow_width:
|
||||
* @surface: a #GdkSurface
|
||||
* @left: The left extent
|
||||
* @right: The right extent
|
||||
* @top: The top extent
|
||||
* @bottom: The bottom extent
|
||||
*
|
||||
* Newer GTK windows using client-side decorations use extra geometry
|
||||
* around their frames for effects like shadows and invisible borders.
|
||||
* Window managers that want to maximize windows or snap to edges need
|
||||
* to know where the extents of the actual frame lie, so that users
|
||||
* don’t feel like windows are snapping against random invisible edges.
|
||||
*
|
||||
* Note that this property is automatically updated by GTK, so this
|
||||
* function should only be used by applications which do not use GTK
|
||||
* to create toplevel surfaces.
|
||||
*/
|
||||
void
|
||||
gdk_surface_set_shadow_width (GdkSurface *surface,
|
||||
int left,
|
||||
int right,
|
||||
int top,
|
||||
int bottom)
|
||||
{
|
||||
GdkSurfaceClass *class;
|
||||
|
||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||
g_return_if_fail (!GDK_SURFACE_DESTROYED (surface));
|
||||
g_return_if_fail (left >= 0 && right >= 0 && top >= 0 && bottom >= 0);
|
||||
|
||||
if (surface->shadow_left == left &&
|
||||
surface->shadow_right == right &&
|
||||
surface->shadow_top == top &&
|
||||
surface->shadow_bottom == bottom)
|
||||
return;
|
||||
|
||||
surface->shadow_top = top;
|
||||
surface->shadow_left = left;
|
||||
surface->shadow_right = right;
|
||||
surface->shadow_bottom = bottom;
|
||||
|
||||
class = GDK_SURFACE_GET_CLASS (surface);
|
||||
if (class->set_shadow_width)
|
||||
class->set_shadow_width (surface, left, right, top, bottom);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_surface_set_state (GdkSurface *surface,
|
||||
GdkToplevelState new_state)
|
||||
{
|
||||
gboolean was_mapped, mapped;
|
||||
gboolean was_sticky, sticky;
|
||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||
|
||||
@@ -2633,20 +2654,15 @@ gdk_surface_set_state (GdkSurface *surface,
|
||||
* inconsistent state to the user.
|
||||
*/
|
||||
|
||||
was_mapped = GDK_SURFACE_IS_MAPPED (surface);
|
||||
was_sticky = GDK_SURFACE_IS_STICKY (surface);
|
||||
|
||||
surface->state = new_state;
|
||||
|
||||
mapped = GDK_SURFACE_IS_MAPPED (surface);
|
||||
sticky = GDK_SURFACE_IS_STICKY (surface);
|
||||
|
||||
if (GDK_IS_TOPLEVEL (surface))
|
||||
g_object_notify (G_OBJECT (surface), "state");
|
||||
|
||||
if (was_mapped != mapped)
|
||||
g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]);
|
||||
|
||||
if (was_sticky != sticky)
|
||||
g_object_notify (G_OBJECT (surface), "sticky");
|
||||
}
|
||||
@@ -2659,6 +2675,94 @@ gdk_synthesize_surface_state (GdkSurface *surface,
|
||||
gdk_surface_set_state (surface, (surface->state | set_flags) & ~unset_flags);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_surface_queue_state_change (GdkSurface *surface,
|
||||
GdkToplevelState unset_flags,
|
||||
GdkToplevelState set_flags)
|
||||
{
|
||||
surface->pending_unset_flags |= unset_flags;
|
||||
surface->pending_set_flags &= ~unset_flags;
|
||||
|
||||
surface->pending_set_flags |= set_flags;
|
||||
surface->pending_unset_flags &= ~set_flags;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_surface_apply_state_change (GdkSurface *surface)
|
||||
{
|
||||
if (!surface->pending_unset_flags && !surface->pending_set_flags)
|
||||
return;
|
||||
|
||||
gdk_synthesize_surface_state (surface,
|
||||
surface->pending_unset_flags,
|
||||
surface->pending_set_flags);
|
||||
surface->pending_unset_flags = 0;
|
||||
surface->pending_set_flags = 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
set_is_mapped_idle (gpointer user_data)
|
||||
{
|
||||
GdkSurface *surface = GDK_SURFACE (user_data);
|
||||
|
||||
surface->set_is_mapped_source_id = 0;
|
||||
|
||||
g_return_val_if_fail (surface->pending_is_mapped != surface->is_mapped,
|
||||
G_SOURCE_REMOVE);
|
||||
|
||||
surface->is_mapped = surface->pending_is_mapped;
|
||||
if (surface->is_mapped)
|
||||
gdk_surface_invalidate_rect (surface, NULL);
|
||||
|
||||
g_object_notify (G_OBJECT (surface), "mapped");
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_surface_set_is_mapped (GdkSurface *surface,
|
||||
gboolean is_mapped)
|
||||
{
|
||||
gboolean was_mapped;
|
||||
|
||||
if (surface->pending_is_mapped != surface->is_mapped)
|
||||
g_clear_handle_id (&surface->set_is_mapped_source_id, g_source_remove);
|
||||
|
||||
surface->pending_is_mapped = is_mapped;
|
||||
|
||||
was_mapped = surface->is_mapped;
|
||||
surface->is_mapped = is_mapped;
|
||||
if (surface->is_mapped)
|
||||
gdk_surface_invalidate_rect (surface, NULL);
|
||||
|
||||
if (was_mapped != is_mapped)
|
||||
g_object_notify (G_OBJECT (surface), "mapped");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_surface_queue_set_is_mapped (GdkSurface *surface,
|
||||
gboolean is_mapped)
|
||||
{
|
||||
if (surface->pending_is_mapped == is_mapped)
|
||||
return;
|
||||
|
||||
surface->pending_is_mapped = is_mapped;
|
||||
|
||||
if (surface->is_mapped == surface->pending_is_mapped)
|
||||
{
|
||||
g_clear_handle_id (&surface->set_is_mapped_source_id, g_source_remove);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_return_if_fail (!surface->set_is_mapped_source_id);
|
||||
|
||||
surface->set_is_mapped_source_id =
|
||||
g_idle_add_full (G_PRIORITY_HIGH - 10,
|
||||
set_is_mapped_idle,
|
||||
surface, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_autohide (GdkEvent *event)
|
||||
{
|
||||
@@ -2770,14 +2874,6 @@ add_event_mark (GdkEvent *event,
|
||||
break;
|
||||
}
|
||||
|
||||
case GDK_CONFIGURE:
|
||||
{
|
||||
int width, height;
|
||||
gdk_configure_event_get_size (event, &width, &height);
|
||||
message = g_strdup_printf ("%s {width=%d, height=%d}", kind, width, height);
|
||||
break;
|
||||
}
|
||||
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
case GDK_TOUCHPAD_SWIPE:
|
||||
@@ -2815,30 +2911,18 @@ add_event_mark (GdkEvent *event,
|
||||
gboolean
|
||||
gdk_surface_handle_event (GdkEvent *event)
|
||||
{
|
||||
GdkSurface *surface = gdk_event_get_surface (event);
|
||||
gint64 begin_time = GDK_PROFILER_CURRENT_TIME;
|
||||
gboolean handled = FALSE;
|
||||
|
||||
if (check_autohide (event))
|
||||
return TRUE;
|
||||
|
||||
if (gdk_event_get_event_type (event) == GDK_CONFIGURE)
|
||||
{
|
||||
int width, height;
|
||||
|
||||
gdk_configure_event_get_size (event, &width, &height);
|
||||
g_signal_emit (gdk_event_get_surface (event), signals[SIZE_CHANGED], 0,
|
||||
width, height);
|
||||
handled = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
GdkSurface *surface = gdk_event_get_surface (event);
|
||||
if (gdk_event_get_event_type (event) == GDK_MOTION_NOTIFY)
|
||||
surface->request_motion = FALSE;
|
||||
|
||||
if (gdk_event_get_event_type (event) == GDK_MOTION_NOTIFY)
|
||||
surface->request_motion = FALSE;
|
||||
|
||||
g_signal_emit (surface, signals[EVENT], 0, event, &handled);
|
||||
}
|
||||
g_signal_emit (surface, signals[EVENT], 0, event, &handled);
|
||||
|
||||
if (GDK_PROFILER_IS_RUNNING)
|
||||
add_event_mark (event, begin_time, GDK_PROFILER_CURRENT_TIME);
|
||||
@@ -2858,13 +2942,7 @@ gdk_surface_handle_event (GdkEvent *event)
|
||||
void
|
||||
gdk_surface_request_motion (GdkSurface *surface)
|
||||
{
|
||||
GdkFrameClock *frame_clock;
|
||||
|
||||
surface->request_motion = TRUE;
|
||||
|
||||
frame_clock = gdk_surface_get_frame_clock (surface);
|
||||
if (frame_clock)
|
||||
gdk_frame_clock_request_phase (frame_clock, GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -118,6 +118,9 @@ void gdk_surface_beep (GdkSurface *surface);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_surface_queue_render (GdkSurface *surface);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_surface_request_layout (GdkSurface *surface);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkFrameClock* gdk_surface_get_frame_clock (GdkSurface *surface);
|
||||
|
||||
@@ -125,13 +128,6 @@ GDK_AVAILABLE_IN_ALL
|
||||
void gdk_surface_set_opaque_region (GdkSurface *surface,
|
||||
cairo_region_t *region);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_surface_set_shadow_width (GdkSurface *surface,
|
||||
int left,
|
||||
int right,
|
||||
int top,
|
||||
int bottom);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkCairoContext *gdk_surface_create_cairo_context(GdkSurface *surface);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
|
@@ -44,6 +44,10 @@ struct _GdkSurface
|
||||
GdkSurface *parent; /* for popups */
|
||||
GList *children; /* popups */
|
||||
|
||||
guint set_is_mapped_source_id;
|
||||
gboolean pending_is_mapped;
|
||||
gboolean is_mapped;
|
||||
|
||||
gpointer widget;
|
||||
|
||||
int x;
|
||||
@@ -53,13 +57,14 @@ struct _GdkSurface
|
||||
|
||||
cairo_region_t *update_area;
|
||||
guint update_freeze_count;
|
||||
gboolean pending_schedule_update;
|
||||
GdkFrameClockPhase pending_phases;
|
||||
/* This is the update_area that was in effect when the current expose
|
||||
started. It may be smaller than the expose area if we'e painting
|
||||
more than we have to, but it represents the "true" damage. */
|
||||
cairo_region_t *active_update_area;
|
||||
|
||||
GdkToplevelState old_state;
|
||||
GdkToplevelState pending_set_flags;
|
||||
GdkToplevelState pending_unset_flags;
|
||||
GdkToplevelState state;
|
||||
|
||||
guint8 resize_count;
|
||||
@@ -75,6 +80,8 @@ struct _GdkSurface
|
||||
guint shortcuts_inhibited : 1;
|
||||
guint request_motion : 1;
|
||||
|
||||
guint request_motion_id;
|
||||
|
||||
struct {
|
||||
GdkGravity surface_anchor;
|
||||
GdkGravity rect_anchor;
|
||||
@@ -83,10 +90,6 @@ struct _GdkSurface
|
||||
guint update_and_descendants_freeze_count;
|
||||
|
||||
int width, height;
|
||||
int shadow_top;
|
||||
int shadow_left;
|
||||
int shadow_right;
|
||||
int shadow_bottom;
|
||||
|
||||
GdkCursor *cursor;
|
||||
GHashTable *device_cursor;
|
||||
@@ -160,25 +163,24 @@ struct _GdkSurfaceClass
|
||||
|
||||
void (* set_opaque_region) (GdkSurface *surface,
|
||||
cairo_region_t *region);
|
||||
void (* set_shadow_width) (GdkSurface *surface,
|
||||
int left,
|
||||
int right,
|
||||
int top,
|
||||
int bottom);
|
||||
GdkGLContext *(*create_gl_context) (GdkSurface *surface,
|
||||
gboolean attached,
|
||||
GdkGLContext *share,
|
||||
GError **error);
|
||||
void (* request_layout) (GdkSurface *surface);
|
||||
gboolean (* compute_size) (GdkSurface *surface);
|
||||
};
|
||||
|
||||
#define GDK_SURFACE_DESTROYED(d) (((GdkSurface *)(d))->destroyed)
|
||||
|
||||
#define GDK_SURFACE_IS_MAPPED(surface) (((surface)->state & GDK_TOPLEVEL_STATE_WITHDRAWN) == 0)
|
||||
|
||||
#define GDK_SURFACE_IS_MAPPED(surface) ((surface)->pending_is_mapped)
|
||||
|
||||
void gdk_surface_set_state (GdkSurface *surface,
|
||||
GdkToplevelState new_state);
|
||||
|
||||
void gdk_surface_set_is_mapped (GdkSurface *surface,
|
||||
gboolean is_mapped);
|
||||
|
||||
GdkMonitor * gdk_surface_get_layout_monitor (GdkSurface *surface,
|
||||
GdkPopupLayout *layout,
|
||||
void (*get_bounds) (GdkMonitor *monitor,
|
||||
@@ -187,6 +189,10 @@ GdkMonitor * gdk_surface_get_layout_monitor (GdkSurface *surface,
|
||||
void gdk_surface_layout_popup_helper (GdkSurface *surface,
|
||||
int width,
|
||||
int height,
|
||||
int shadow_left,
|
||||
int shadow_right,
|
||||
int shadow_top,
|
||||
int shadow_bottom,
|
||||
GdkMonitor *monitor,
|
||||
GdkRectangle *bounds,
|
||||
GdkPopupLayout *layout,
|
||||
@@ -326,9 +332,22 @@ void gdk_surface_constrain_size (GdkGeometry *geometry,
|
||||
int *new_width,
|
||||
int *new_height);
|
||||
|
||||
void gdk_surface_queue_state_change (GdkSurface *surface,
|
||||
GdkToplevelState unset_flags,
|
||||
GdkToplevelState set_flags);
|
||||
|
||||
void gdk_surface_apply_state_change (GdkSurface *surface);
|
||||
|
||||
void gdk_surface_emit_size_changed (GdkSurface *surface,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
void gdk_surface_request_compute_size (GdkSurface *surface);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_surface_request_motion (GdkSurface *surface);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_SURFACE_PRIVATE_H__ */
|
||||
|
@@ -51,11 +51,10 @@ enum
|
||||
|
||||
static guint signals[N_SIGNALS] = { 0 };
|
||||
|
||||
static gboolean
|
||||
static void
|
||||
gdk_toplevel_default_present (GdkToplevel *toplevel,
|
||||
GdkToplevelLayout *layout)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -124,7 +123,7 @@ gdk_toplevel_default_init (GdkToplevelInterface *iface)
|
||||
g_param_spec_flags ("state",
|
||||
P_("State"),
|
||||
P_("State"),
|
||||
GDK_TYPE_TOPLEVEL_STATE, GDK_TOPLEVEL_STATE_WITHDRAWN,
|
||||
GDK_TYPE_TOPLEVEL_STATE, 0,
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
g_object_interface_install_property (iface,
|
||||
g_param_spec_string ("title",
|
||||
@@ -239,18 +238,17 @@ gdk_toplevel_install_properties (GObjectClass *object_class,
|
||||
* compute the preferred size of the toplevel surface. See
|
||||
* #GdkToplevel::compute-size for details.
|
||||
*
|
||||
* Presenting may fail.
|
||||
*
|
||||
* Returns: %FALSE if @toplevel failed to be presented, otherwise %TRUE.
|
||||
* Presenting is asynchronous and the specified layout parameters are not
|
||||
* guaranteed to be respected.
|
||||
*/
|
||||
gboolean
|
||||
void
|
||||
gdk_toplevel_present (GdkToplevel *toplevel,
|
||||
GdkToplevelLayout *layout)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_TOPLEVEL (toplevel), FALSE);
|
||||
g_return_val_if_fail (layout != NULL, FALSE);
|
||||
g_return_if_fail (GDK_IS_TOPLEVEL (toplevel));
|
||||
g_return_if_fail (layout != NULL);
|
||||
|
||||
return GDK_TOPLEVEL_GET_IFACE (toplevel)->present (toplevel, layout);
|
||||
GDK_TOPLEVEL_GET_IFACE (toplevel)->present (toplevel, layout);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -71,7 +71,6 @@ typedef enum
|
||||
|
||||
/**
|
||||
* GdkToplevelState:
|
||||
* @GDK_TOPLEVEL_STATE_WITHDRAWN: the surface is not shown
|
||||
* @GDK_TOPLEVEL_STATE_MINIMIZED: the surface is minimized
|
||||
* @GDK_TOPLEVEL_STATE_MAXIMIZED: the surface is maximized
|
||||
* @GDK_TOPLEVEL_STATE_STICKY: the surface is sticky
|
||||
@@ -98,33 +97,37 @@ typedef enum
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
GDK_TOPLEVEL_STATE_WITHDRAWN = 1 << 0,
|
||||
GDK_TOPLEVEL_STATE_MINIMIZED = 1 << 1,
|
||||
GDK_TOPLEVEL_STATE_MAXIMIZED = 1 << 2,
|
||||
GDK_TOPLEVEL_STATE_STICKY = 1 << 3,
|
||||
GDK_TOPLEVEL_STATE_FULLSCREEN = 1 << 4,
|
||||
GDK_TOPLEVEL_STATE_ABOVE = 1 << 5,
|
||||
GDK_TOPLEVEL_STATE_BELOW = 1 << 6,
|
||||
GDK_TOPLEVEL_STATE_FOCUSED = 1 << 7,
|
||||
GDK_TOPLEVEL_STATE_TILED = 1 << 8,
|
||||
GDK_TOPLEVEL_STATE_TOP_TILED = 1 << 9,
|
||||
GDK_TOPLEVEL_STATE_TOP_RESIZABLE = 1 << 10,
|
||||
GDK_TOPLEVEL_STATE_RIGHT_TILED = 1 << 11,
|
||||
GDK_TOPLEVEL_STATE_RIGHT_RESIZABLE = 1 << 12,
|
||||
GDK_TOPLEVEL_STATE_BOTTOM_TILED = 1 << 13,
|
||||
GDK_TOPLEVEL_STATE_BOTTOM_RESIZABLE = 1 << 14,
|
||||
GDK_TOPLEVEL_STATE_LEFT_TILED = 1 << 15,
|
||||
GDK_TOPLEVEL_STATE_LEFT_RESIZABLE = 1 << 16
|
||||
GDK_TOPLEVEL_STATE_MINIMIZED = 1 << 0,
|
||||
GDK_TOPLEVEL_STATE_MAXIMIZED = 1 << 1,
|
||||
GDK_TOPLEVEL_STATE_STICKY = 1 << 2,
|
||||
GDK_TOPLEVEL_STATE_FULLSCREEN = 1 << 3,
|
||||
GDK_TOPLEVEL_STATE_ABOVE = 1 << 4,
|
||||
GDK_TOPLEVEL_STATE_BELOW = 1 << 5,
|
||||
GDK_TOPLEVEL_STATE_FOCUSED = 1 << 6,
|
||||
GDK_TOPLEVEL_STATE_TILED = 1 << 7,
|
||||
GDK_TOPLEVEL_STATE_TOP_TILED = 1 << 8,
|
||||
GDK_TOPLEVEL_STATE_TOP_RESIZABLE = 1 << 9,
|
||||
GDK_TOPLEVEL_STATE_RIGHT_TILED = 1 << 10,
|
||||
GDK_TOPLEVEL_STATE_RIGHT_RESIZABLE = 1 << 11,
|
||||
GDK_TOPLEVEL_STATE_BOTTOM_TILED = 1 << 12,
|
||||
GDK_TOPLEVEL_STATE_BOTTOM_RESIZABLE = 1 << 13,
|
||||
GDK_TOPLEVEL_STATE_LEFT_TILED = 1 << 14,
|
||||
GDK_TOPLEVEL_STATE_LEFT_RESIZABLE = 1 << 15
|
||||
} GdkToplevelState;
|
||||
|
||||
|
||||
#define GDK_TYPE_TOPLEVEL (gdk_toplevel_get_type ())
|
||||
|
||||
/**
|
||||
* GdkToplevel:
|
||||
*
|
||||
* An interface for top level surfaces.
|
||||
*/
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
G_DECLARE_INTERFACE (GdkToplevel, gdk_toplevel, GDK, TOPLEVEL, GObject)
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_toplevel_present (GdkToplevel *toplevel,
|
||||
void gdk_toplevel_present (GdkToplevel *toplevel,
|
||||
GdkToplevelLayout *layout);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
@@ -198,7 +201,6 @@ void gdk_toplevel_begin_move (GdkToplevel *toplevel,
|
||||
double y,
|
||||
guint32 timestamp);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_TOPLEVEL_H__ */
|
||||
|
@@ -40,7 +40,10 @@ struct _GdkToplevelLayout
|
||||
grefcount ref_count;
|
||||
|
||||
guint resizable : 1;
|
||||
|
||||
guint maximized_valid : 1;
|
||||
guint maximized : 1;
|
||||
guint fullscreen_valid : 1;
|
||||
guint fullscreen : 1;
|
||||
GdkMonitor *fullscreen_monitor;
|
||||
};
|
||||
@@ -70,7 +73,9 @@ gdk_toplevel_layout_new (void)
|
||||
layout = g_new0 (GdkToplevelLayout, 1);
|
||||
g_ref_count_init (&layout->ref_count);
|
||||
layout->resizable = TRUE;
|
||||
layout->maximized_valid = FALSE;
|
||||
layout->maximized = FALSE;
|
||||
layout->fullscreen_valid = FALSE;
|
||||
layout->fullscreen = FALSE;
|
||||
layout->fullscreen_monitor = NULL;
|
||||
|
||||
@@ -125,7 +130,9 @@ gdk_toplevel_layout_copy (GdkToplevelLayout *layout)
|
||||
g_ref_count_init (&new_layout->ref_count);
|
||||
|
||||
new_layout->resizable = layout->resizable;
|
||||
new_layout->maximized_valid = layout->maximized_valid;
|
||||
new_layout->maximized = layout->maximized;
|
||||
new_layout->fullscreen_valid = layout->fullscreen_valid;
|
||||
new_layout->fullscreen = layout->fullscreen;
|
||||
if (layout->fullscreen_monitor)
|
||||
new_layout->fullscreen_monitor = g_object_ref (layout->fullscreen_monitor);
|
||||
@@ -151,7 +158,9 @@ gdk_toplevel_layout_equal (GdkToplevelLayout *layout,
|
||||
g_return_val_if_fail (other, FALSE);
|
||||
|
||||
return layout->resizable == other->resizable &&
|
||||
layout->maximized_valid == other->maximized_valid &&
|
||||
layout->maximized == other->maximized &&
|
||||
layout->fullscreen_valid == other->fullscreen_valid &&
|
||||
layout->fullscreen == other->fullscreen &&
|
||||
layout->fullscreen_monitor == other->fullscreen_monitor;
|
||||
}
|
||||
@@ -198,22 +207,32 @@ void
|
||||
gdk_toplevel_layout_set_maximized (GdkToplevelLayout *layout,
|
||||
gboolean maximized)
|
||||
{
|
||||
layout->maximized_valid = TRUE;
|
||||
layout->maximized = maximized;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_layout_get_maximized:
|
||||
* @layout: a #GdkToplevelLayout
|
||||
* @maximized: (out): set to %TRUE if the toplevel should be maximized
|
||||
*
|
||||
* Returns whether the layout should present the
|
||||
* surface as maximized.
|
||||
* If the layout specifies whether to the toplevel should go maximized,
|
||||
* the value pointed to by @maximized is set to %TRUE if it should go
|
||||
* fullscreen, or %FALSE, if it should go unmaximized.
|
||||
*
|
||||
* Returns: %TRUE if the layout is maximized
|
||||
* Returns: whether the @layout specifies the maximized state for the toplevel
|
||||
*/
|
||||
gboolean
|
||||
gdk_toplevel_layout_get_maximized (GdkToplevelLayout *layout)
|
||||
gdk_toplevel_layout_get_maximized (GdkToplevelLayout *layout,
|
||||
gboolean *maximized)
|
||||
{
|
||||
return layout->maximized;
|
||||
if (layout->maximized_valid)
|
||||
{
|
||||
*maximized = layout->maximized;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -230,6 +249,7 @@ gdk_toplevel_layout_set_fullscreen (GdkToplevelLayout *layout,
|
||||
gboolean fullscreen,
|
||||
GdkMonitor *monitor)
|
||||
{
|
||||
layout->fullscreen_valid = TRUE;
|
||||
layout->fullscreen = fullscreen;
|
||||
if (monitor)
|
||||
layout->fullscreen_monitor = g_object_ref (monitor);
|
||||
@@ -238,16 +258,25 @@ gdk_toplevel_layout_set_fullscreen (GdkToplevelLayout *layout,
|
||||
/**
|
||||
* gdk_toplevel_layout_get_fullscreen:
|
||||
* @layout: a #GdkToplevelLayout
|
||||
* @fullscreen: (out): location to store whether the toplevel should be fullscreen
|
||||
*
|
||||
* Returns whether the layout should cause the surface
|
||||
* to be fullscreen when presented.
|
||||
* If the layout specifies whether to the toplevel should go fullscreen,
|
||||
* the value pointed to by @fullscreen is set to %TRUE if it should go
|
||||
* fullscreen, or %FALSE, if it should go unfullscreen.
|
||||
*
|
||||
* Returns: %TRUE if @layout is fullscreen
|
||||
* Returns: whether the @layout specifies the fullscreen state for the toplevel
|
||||
*/
|
||||
gboolean
|
||||
gdk_toplevel_layout_get_fullscreen (GdkToplevelLayout *layout)
|
||||
gdk_toplevel_layout_get_fullscreen (GdkToplevelLayout *layout,
|
||||
gboolean *fullscreen)
|
||||
{
|
||||
return layout->fullscreen;
|
||||
if (layout->fullscreen_valid)
|
||||
{
|
||||
*fullscreen = layout->fullscreen;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -30,7 +30,7 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* GdkTopLevelLayout:
|
||||
* GdkToplevelLayout:
|
||||
*
|
||||
* Struct containing information for gdk_toplevel_present()
|
||||
*/
|
||||
@@ -66,10 +66,12 @@ void gdk_toplevel_layout_set_fullscreen (GdkToplevelLayout *l
|
||||
GdkMonitor *monitor);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_toplevel_layout_get_maximized (GdkToplevelLayout *layout);
|
||||
gboolean gdk_toplevel_layout_get_maximized (GdkToplevelLayout *layout,
|
||||
gboolean *maximized);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_toplevel_layout_get_fullscreen (GdkToplevelLayout *layout);
|
||||
gboolean gdk_toplevel_layout_get_fullscreen (GdkToplevelLayout *layout,
|
||||
gboolean *fullscreen);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkMonitor * gdk_toplevel_layout_get_fullscreen_monitor (GdkToplevelLayout *layout);
|
||||
|
@@ -13,7 +13,7 @@ struct _GdkToplevelInterface
|
||||
{
|
||||
GTypeInterface g_iface;
|
||||
|
||||
gboolean (* present) (GdkToplevel *toplevel,
|
||||
void (* present) (GdkToplevel *toplevel,
|
||||
GdkToplevelLayout *layout);
|
||||
gboolean (* minimize) (GdkToplevel *toplevel);
|
||||
gboolean (* lower) (GdkToplevel *toplevel);
|
||||
|
@@ -118,18 +118,53 @@ gdk_toplevel_size_set_min_size (GdkToplevelSize *size,
|
||||
size->min_height = min_height;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_toplevel_size_set_shadow_width:
|
||||
* @size: a #GdkToplevelSize
|
||||
* @left: width of the left part of the shadow
|
||||
* @right: width of the right part of the shadow
|
||||
* @top: height of the top part of the shadow
|
||||
* @bottom: height of the bottom part of the shadow
|
||||
*
|
||||
* The shadow width corresponds to the part of the computed surface size
|
||||
* that would consist of the shadow margin surrounding the window, would
|
||||
* there be any.
|
||||
*/
|
||||
void
|
||||
gdk_toplevel_size_set_shadow_width (GdkToplevelSize *size,
|
||||
int left,
|
||||
int right,
|
||||
int top,
|
||||
int bottom)
|
||||
{
|
||||
size->shadow.is_valid = TRUE;
|
||||
size->shadow.left = left;
|
||||
size->shadow.right = right;
|
||||
size->shadow.top = top;
|
||||
size->shadow.bottom = bottom;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_toplevel_size_validate (GdkToplevelSize *size)
|
||||
{
|
||||
int geometry_width, geometry_height;
|
||||
|
||||
if (size->min_width > size->bounds_width ||
|
||||
size->min_height > size->bounds_height)
|
||||
g_warning ("GdkToplevelSize: min_size (%d, %d) exceeds bounds (%d, %d)",
|
||||
size->min_width, size->min_height,
|
||||
size->bounds_width, size->bounds_height);
|
||||
|
||||
if (size->width > size->bounds_width ||
|
||||
size->height > size->bounds_height)
|
||||
g_warning ("GdkToplevelSize: size (%d, %d) exceeds bounds (%d, %d)",
|
||||
geometry_width = size->width;
|
||||
geometry_height = size->height;
|
||||
if (size->shadow.is_valid)
|
||||
{
|
||||
geometry_width -= size->shadow.left + size->shadow.right;
|
||||
geometry_height -= size->shadow.top + size->shadow.bottom;
|
||||
}
|
||||
if (geometry_width > size->bounds_width ||
|
||||
geometry_height > size->bounds_height)
|
||||
g_warning ("GdkToplevelSize: geometry size (%d, %d) exceeds bounds (%d, %d)",
|
||||
size->width, size->height,
|
||||
size->bounds_width, size->bounds_height);
|
||||
|
||||
|
@@ -54,6 +54,13 @@ void gdk_toplevel_size_set_min_size (GdkToplevelSize *
|
||||
int min_width,
|
||||
int min_height);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_toplevel_size_set_shadow_width (GdkToplevelSize *size,
|
||||
int left,
|
||||
int right,
|
||||
int top,
|
||||
int bottom);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_TOPLEVEL_SIZE_H__ */
|
||||
|
@@ -30,6 +30,14 @@ struct _GdkToplevelSize
|
||||
int height;
|
||||
int min_width;
|
||||
int min_height;
|
||||
|
||||
struct {
|
||||
gboolean is_valid;
|
||||
int left;
|
||||
int right;
|
||||
int top;
|
||||
int bottom;
|
||||
} shadow;
|
||||
};
|
||||
|
||||
void gdk_toplevel_size_init (GdkToplevelSize *size,
|
||||
|
@@ -24,8 +24,25 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
/**
|
||||
* GDK_MAJOR_VERSION:
|
||||
*
|
||||
* The major version component of the library's version, e.g. "1" for "1.2.3".
|
||||
*/
|
||||
#define GDK_MAJOR_VERSION (@GTK_MAJOR_VERSION@)
|
||||
|
||||
/**
|
||||
* GDK_MINOR_VERSION:
|
||||
*
|
||||
* The minor version component of the library's version, e.g. "2" for "1.2.3".
|
||||
*/
|
||||
#define GDK_MINOR_VERSION (@GTK_MINOR_VERSION@)
|
||||
|
||||
/**
|
||||
* GDK_MICRO_VERSION:
|
||||
*
|
||||
* The micro version component of the library's version, e.g. "3" for "1.2.3".
|
||||
*/
|
||||
#define GDK_MICRO_VERSION (@GTK_MICRO_VERSION@)
|
||||
|
||||
#ifndef _GDK_EXTERN
|
||||
@@ -35,9 +52,10 @@
|
||||
/**
|
||||
* GDK_DISABLE_DEPRECATION_WARNINGS:
|
||||
*
|
||||
* A macro that should be defined before including the gdk.h header.
|
||||
* If it is defined, no compiler warnings will be produced for uses
|
||||
* of deprecated GDK and GTK APIs.
|
||||
* A macro that should be defined before including the `gdk.h` header.
|
||||
*
|
||||
* If this symbol is defined, no compiler warnings will be produced for
|
||||
* uses of deprecated GDK and GTK APIs.
|
||||
*/
|
||||
|
||||
#ifdef GDK_DISABLE_DEPRECATION_WARNINGS
|
||||
@@ -52,9 +70,6 @@
|
||||
|
||||
/* XXX: Every new stable minor release bump should add a macro here */
|
||||
|
||||
#define GDK_VERSION_3_92 (G_ENCODE_VERSION (3, 92))
|
||||
#define GDK_VERSION_3_94 (G_ENCODE_VERSION (3, 94))
|
||||
|
||||
/**
|
||||
* GDK_VERSION_4_0:
|
||||
*
|
||||
@@ -65,26 +80,34 @@
|
||||
|
||||
|
||||
/* evaluates to the current stable version; for development cycles,
|
||||
* this means the next stable target
|
||||
* this means the next stable target, with a hard backstop to the
|
||||
* beginning of the stable series
|
||||
*/
|
||||
#if (GDK_MINOR_VERSION % 2)
|
||||
#define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION + 1))
|
||||
#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2)
|
||||
# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION + 1))
|
||||
#elif G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION) > GDK_VERSION_4_0
|
||||
# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION))
|
||||
#else
|
||||
#define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION))
|
||||
# define GDK_VERSION_CUR_STABLE GDK_VERSION_4_0
|
||||
#endif
|
||||
|
||||
/* evaluates to the previous stable version */
|
||||
#if (GDK_MINOR_VERSION % 2)
|
||||
#define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 1))
|
||||
/* evaluates to the previous stable version, with a hard backstop
|
||||
* to the beginning of the stable series
|
||||
*/
|
||||
#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2)
|
||||
# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 1))
|
||||
#elif GDK_MAJOR_VERSION >= 4 && GDK_MINOR_VERSION > 2
|
||||
# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 2))
|
||||
#else
|
||||
#define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 2))
|
||||
# define GDK_VERSION_PREV_STABLE GDK_VERSION_4_0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* GDK_VERSION_MIN_REQUIRED:
|
||||
*
|
||||
* A macro that should be defined by the user prior to including
|
||||
* the gdk.h header.
|
||||
* the `gdk.h` header.
|
||||
*
|
||||
* The definition should be one of the predefined GDK version
|
||||
* macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,...
|
||||
*
|
||||
@@ -102,7 +125,8 @@
|
||||
* GDK_VERSION_MAX_ALLOWED:
|
||||
*
|
||||
* A macro that should be defined by the user prior to including
|
||||
* the gdk.h header.
|
||||
* the `gdk.h` header.
|
||||
*
|
||||
* The definition should be one of the predefined GDK version
|
||||
* macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,...
|
||||
*
|
||||
@@ -122,29 +146,33 @@
|
||||
|
||||
/* sanity checks */
|
||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_MIN_REQUIRED
|
||||
#error "GDK_VERSION_MAX_ALLOWED must be >= GDK_VERSION_MIN_REQUIRED"
|
||||
# error "GDK_VERSION_MAX_ALLOWED must be >= GDK_VERSION_MIN_REQUIRED"
|
||||
#endif
|
||||
#if GDK_VERSION_MIN_REQUIRED < GDK_VERSION_3_92
|
||||
#error "GDK_VERSION_MIN_REQUIRED must be >= GDK_VERSION_3_92"
|
||||
#if GDK_VERSION_MIN_REQUIRED < GDK_VERSION_4_0
|
||||
# error "GDK_VERSION_MIN_REQUIRED must be >= GDK_VERSION_4_0"
|
||||
#endif
|
||||
|
||||
#define GDK_AVAILABLE_IN_ALL _GDK_EXTERN
|
||||
|
||||
/* XXX: Every new stable minor release should add a set of macros here */
|
||||
|
||||
/* This is not really necessary for 4.0, since there can't be an
|
||||
* earlier version, and there are no deprecated symbols. We just
|
||||
* include it for completeness, and because it's easier to copy
|
||||
* this stanza every time a new development cycle starts.
|
||||
*/
|
||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_0
|
||||
# define GDK_AVAILABLE_IN_4_0 GDK_UNAVAILABLE(4, 0)
|
||||
# define GDK_AVAILABLE_IN_4_0 GDK_UNAVAILABLE(4, 0)
|
||||
#else
|
||||
# define GDK_AVAILABLE_IN_4_0 _GDK_EXTERN
|
||||
# define GDK_AVAILABLE_IN_4_0 _GDK_EXTERN
|
||||
#endif
|
||||
|
||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_3_92
|
||||
# define GDK_DEPRECATED_IN_4_0 GDK_DEPRECATED
|
||||
# define GDK_DEPRECATED_IN_4_0_FOR(f) GDK_DEPRECATED_FOR(f)
|
||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_0
|
||||
# define GDK_DEPRECATED_IN_4_0 GDK_DEPRECATED
|
||||
# define GDK_DEPRECATED_IN_4_0_FOR(f) GDK_DEPRECATED_FOR(f)
|
||||
#else
|
||||
# define GDK_DEPRECATED_IN_4_0 _GDK_EXTERN
|
||||
# define GDK_DEPRECATED_IN_4_0_FOR(f) _GDK_EXTERN
|
||||
# define GDK_DEPRECATED_IN_4_0 _GDK_EXTERN
|
||||
# define GDK_DEPRECATED_IN_4_0_FOR(f) _GDK_EXTERN
|
||||
#endif
|
||||
|
||||
#endif /* __GDK_VERSION_MACROS_H__ */
|
||||
|
||||
|
@@ -210,8 +210,10 @@ gdk_vulkan_strerror (VkResult result)
|
||||
return "An unknown error has occurred; either the application has provided invalid input, or an implementation failure has occurred.";
|
||||
#endif
|
||||
#if VK_HEADER_VERSION >= 135
|
||||
#if VK_HEADER_VERSION < 162
|
||||
case VK_ERROR_INCOMPATIBLE_VERSION_KHR:
|
||||
return "Acceleration structure serialized with version as the version information is not compatible with device.";
|
||||
return "This error was removed by the Vulkan gods.";
|
||||
#endif
|
||||
case VK_THREAD_IDLE_KHR:
|
||||
return "A deferred operation is not complete but there is currently no work for this thread to do at the time of this call.";
|
||||
case VK_THREAD_DONE_KHR:
|
||||
@@ -223,7 +225,7 @@ gdk_vulkan_strerror (VkResult result)
|
||||
case VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT:
|
||||
return "A requested pipeline creation would have required compilation, but the application requested compilation to not be performed.";
|
||||
#endif
|
||||
#if VK_HEADER_VERSION < 140
|
||||
#if VK_HEADER_VERSION < 142
|
||||
case VK_RESULT_RANGE_SIZE:
|
||||
#endif
|
||||
case VK_RESULT_MAX_ENUM:
|
||||
|
@@ -82,7 +82,9 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
|
||||
-(BOOL)isOpaque
|
||||
{
|
||||
return NO;
|
||||
if ([self window])
|
||||
return [[self window] isOpaque];
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)isFlipped
|
||||
|
@@ -230,9 +230,7 @@
|
||||
NSRect content_rect;
|
||||
GdkSurface *surface;
|
||||
GdkDisplay *display;
|
||||
GdkEvent *event;
|
||||
gboolean maximized;
|
||||
GList *node;
|
||||
|
||||
surface = GDK_SURFACE (gdk_surface);
|
||||
display = gdk_surface_get_display (surface);
|
||||
@@ -256,13 +254,7 @@
|
||||
|
||||
_gdk_surface_update_size (surface);
|
||||
|
||||
/* Synthesize a configure event */
|
||||
event = gdk_configure_event_new (surface,
|
||||
content_rect.size.width,
|
||||
content_rect.size.height);
|
||||
node = _gdk_event_queue_append (display, event);
|
||||
_gdk_windowing_got_event (display, node, event,
|
||||
_gdk_display_get_next_serial (display));
|
||||
gdk_surface_request_layout (surface);
|
||||
|
||||
_gdk_macos_surface_reposition_children (gdk_surface);
|
||||
|
||||
@@ -320,11 +312,20 @@
|
||||
|
||||
-(void)hide
|
||||
{
|
||||
BOOL wasKey = [self isKeyWindow];
|
||||
BOOL wasMain = [self isMainWindow];
|
||||
|
||||
inShowOrHide = YES;
|
||||
[self orderOut:nil];
|
||||
inShowOrHide = NO;
|
||||
|
||||
initialPositionKnown = NO;
|
||||
|
||||
if (wasMain)
|
||||
[self windowDidResignMain:nil];
|
||||
|
||||
if (wasKey)
|
||||
[self windowDidResignKey:nil];
|
||||
}
|
||||
|
||||
-(BOOL)trackManualMove
|
||||
|
@@ -122,7 +122,7 @@ gdk_macos_device_ungrab (GdkDevice *device,
|
||||
grab = _gdk_display_get_last_device_grab (display, device);
|
||||
|
||||
if (grab != NULL)
|
||||
grab->serial_end = 0;
|
||||
grab->serial_end = grab->serial_start;
|
||||
|
||||
_gdk_display_device_grab_update (display, device, 0);
|
||||
}
|
||||
|
@@ -610,7 +610,7 @@ fill_scroll_event (GdkMacosDisplay *self,
|
||||
sx = [nsevent scrollingDeltaX];
|
||||
sy = [nsevent scrollingDeltaY];
|
||||
|
||||
if (sx != 0.0 || dx != 0.0)
|
||||
if (sx != 0.0 || sy != 0.0)
|
||||
ret = gdk_scroll_event_new (GDK_SURFACE (surface),
|
||||
pointer,
|
||||
NULL,
|
||||
|
@@ -477,7 +477,8 @@ _gdk_macos_display_surface_removed (GdkMacosDisplay *self,
|
||||
if (self->keyboard_surface == surface)
|
||||
_gdk_macos_display_surface_resigned_key (self, surface);
|
||||
|
||||
g_queue_unlink (&self->sorted_surfaces, &surface->sorted);
|
||||
if (queue_contains (&self->sorted_surfaces, &surface->sorted))
|
||||
g_queue_unlink (&self->sorted_surfaces, &surface->sorted);
|
||||
|
||||
if (queue_contains (&self->main_surfaces, &surface->main))
|
||||
_gdk_macos_display_surface_resigned_main (self, surface);
|
||||
@@ -519,23 +520,30 @@ void
|
||||
_gdk_macos_display_surface_resigned_key (GdkMacosDisplay *self,
|
||||
GdkMacosSurface *surface)
|
||||
{
|
||||
gboolean was_keyboard_surface;
|
||||
|
||||
g_return_if_fail (GDK_IS_MACOS_DISPLAY (self));
|
||||
g_return_if_fail (GDK_IS_MACOS_SURFACE (surface));
|
||||
|
||||
if (self->keyboard_surface == surface)
|
||||
was_keyboard_surface = self->keyboard_surface == surface;
|
||||
|
||||
self->keyboard_surface = NULL;
|
||||
|
||||
if (was_keyboard_surface)
|
||||
{
|
||||
GdkDevice *keyboard;
|
||||
GdkEvent *event;
|
||||
GdkSeat *seat;
|
||||
GList *node;
|
||||
|
||||
seat = gdk_display_get_default_seat (GDK_DISPLAY (self));
|
||||
keyboard = gdk_seat_get_keyboard (seat);
|
||||
event = gdk_focus_event_new (GDK_SURFACE (surface), keyboard, FALSE);
|
||||
_gdk_event_queue_append (GDK_DISPLAY (self), event);
|
||||
node = _gdk_event_queue_append (GDK_DISPLAY (self), event);
|
||||
_gdk_windowing_got_event (GDK_DISPLAY (self), node, event,
|
||||
_gdk_display_get_next_serial (GDK_DISPLAY (self)));
|
||||
}
|
||||
|
||||
self->keyboard_surface = NULL;
|
||||
|
||||
_gdk_macos_display_clear_sorting (self);
|
||||
}
|
||||
|
||||
@@ -1049,9 +1057,8 @@ _gdk_macos_display_clear_sorting (GdkMacosDisplay *self)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_MACOS_DISPLAY (self));
|
||||
|
||||
self->sorted_surfaces.head = NULL;
|
||||
self->sorted_surfaces.tail = NULL;
|
||||
self->sorted_surfaces.length = 0;
|
||||
while (self->sorted_surfaces.head != NULL)
|
||||
g_queue_unlink (&self->sorted_surfaces, self->sorted_surfaces.head);
|
||||
}
|
||||
|
||||
const GList *
|
||||
|
@@ -101,7 +101,7 @@ create_pixel_format (int major,
|
||||
NSOpenGLPFAAccelerated,
|
||||
NSOpenGLPFADoubleBuffer,
|
||||
NSOpenGLPFABackingStore,
|
||||
NSOpenGLPFAColorSize, 32,
|
||||
NSOpenGLPFAColorSize, 24,
|
||||
NSOpenGLPFAAlphaSize, 8,
|
||||
|
||||
(NSOpenGLPixelFormatAttribute)nil
|
||||
@@ -173,11 +173,13 @@ gdk_macos_gl_context_real_realize (GdkGLContext *context,
|
||||
NSOpenGLContext *shared_gl_context = nil;
|
||||
NSOpenGLContext *gl_context;
|
||||
NSOpenGLPixelFormat *pixelFormat;
|
||||
CGLContextObj cgl_context;
|
||||
GdkGLContext *shared;
|
||||
GdkGLContext *shared_data;
|
||||
NSOpenGLContext *existing;
|
||||
GLint sync_to_framerate = 1;
|
||||
GLint validate = 0;
|
||||
GLint swapRect[4];
|
||||
int major, minor;
|
||||
|
||||
g_assert (GDK_IS_MACOS_GL_CONTEXT (self));
|
||||
@@ -226,8 +228,19 @@ gdk_macos_gl_context_real_realize (GdkGLContext *context,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
[gl_context setValues:&sync_to_framerate forParameter:NSOpenGLCPSwapInterval];
|
||||
[gl_context setValues:&validate forParameter:NSOpenGLContextParameterStateValidation];
|
||||
cgl_context = [gl_context CGLContextObj];
|
||||
|
||||
swapRect[0] = 0;
|
||||
swapRect[1] = 0;
|
||||
swapRect[2] = surface->width;
|
||||
swapRect[3] = surface->height;
|
||||
|
||||
CGLSetParameter (cgl_context, kCGLCPSwapRectangle, swapRect);
|
||||
CGLSetParameter (cgl_context, kCGLCPSwapInterval, &sync_to_framerate);
|
||||
|
||||
CGLEnable (cgl_context, kCGLCESwapRectangle);
|
||||
if (validate)
|
||||
CGLEnable (cgl_context, kCGLCEStateValidation);
|
||||
|
||||
self->dummy_window = [[NSWindow alloc] initWithContentRect:NSZeroRect
|
||||
styleMask:0
|
||||
@@ -259,9 +272,12 @@ gdk_macos_gl_context_begin_frame (GdkDrawContext *context,
|
||||
cairo_region_t *painted)
|
||||
{
|
||||
GdkMacosGLContext *self = (GdkMacosGLContext *)context;
|
||||
GdkSurface *surface;
|
||||
|
||||
g_assert (GDK_IS_MACOS_GL_CONTEXT (self));
|
||||
|
||||
surface = gdk_draw_context_get_surface (context);
|
||||
|
||||
/* If begin frame is called, that means we are trying to draw to
|
||||
* the NSWindow using our view. That might be a GdkMacosCairoView
|
||||
* but we need it to be a GL view. Also, only in this case do we
|
||||
@@ -271,17 +287,31 @@ gdk_macos_gl_context_begin_frame (GdkDrawContext *context,
|
||||
if (!self->is_attached &&
|
||||
gdk_gl_context_get_shared_context (GDK_GL_CONTEXT (context)))
|
||||
{
|
||||
CGLContextObj glctx = [self->gl_context CGLContextObj];
|
||||
GLint swapRect[4];
|
||||
|
||||
ensure_gl_view (self);
|
||||
|
||||
g_clear_pointer (&self->damage, cairo_region_destroy);
|
||||
self->damage = cairo_region_copy (painted);
|
||||
|
||||
cairo_region_get_extents (painted, &self->flush_rect);
|
||||
|
||||
/* Coordinates are in display coordinates, where as flush_rect is
|
||||
* in GDK coordinates. Must flip Y to match display coordinates where
|
||||
* 0,0 is the bottom-left corner.
|
||||
*/
|
||||
swapRect[0] = self->flush_rect.x; /* left */
|
||||
swapRect[1] = surface->height - self->flush_rect.y; /* bottom */
|
||||
swapRect[2] = self->flush_rect.width; /* width */
|
||||
swapRect[3] = self->flush_rect.height; /* height */
|
||||
|
||||
CGLSetParameter (glctx, kCGLCPSwapRectangle, swapRect);
|
||||
}
|
||||
|
||||
if (self->needs_resize)
|
||||
{
|
||||
GdkSurface *surface = gdk_draw_context_get_surface (context);
|
||||
CGLContextObj cgl_context = [self->gl_context CGLContextObj];
|
||||
GLint opaque;
|
||||
|
||||
self->needs_resize = FALSE;
|
||||
@@ -302,7 +332,8 @@ gdk_macos_gl_context_begin_frame (GdkDrawContext *context,
|
||||
opaque = GDK_MACOS_TOPLEVEL_SURFACE (surface)->decorated;
|
||||
else
|
||||
opaque = FALSE;
|
||||
[self->gl_context setValues:&opaque forParameter:NSOpenGLCPSurfaceOpacity];
|
||||
|
||||
CGLSetParameter (cgl_context, kCGLCPSurfaceOpacity, &opaque);
|
||||
|
||||
[self->gl_context update];
|
||||
}
|
||||
@@ -311,8 +342,7 @@ gdk_macos_gl_context_begin_frame (GdkDrawContext *context,
|
||||
|
||||
if (!self->is_attached)
|
||||
{
|
||||
GdkMacosSurface *surface = GDK_MACOS_SURFACE (gdk_draw_context_get_surface (context));
|
||||
NSView *nsview = _gdk_macos_surface_get_view (surface);
|
||||
NSView *nsview = _gdk_macos_surface_get_view (GDK_MACOS_SURFACE (surface));
|
||||
|
||||
g_assert (self->gl_context != NULL);
|
||||
g_assert (GDK_IS_MACOS_GL_VIEW (nsview));
|
||||
@@ -332,14 +362,6 @@ gdk_macos_gl_context_end_frame (GdkDrawContext *context,
|
||||
|
||||
GDK_DRAW_CONTEXT_CLASS (gdk_macos_gl_context_parent_class)->end_frame (context, painted);
|
||||
|
||||
/* We want to limit how much gets moved to the front buffer so here
|
||||
* we adjust the clip rectangle before flushBuffer is called.
|
||||
*/
|
||||
G_STATIC_ASSERT (sizeof (GLint) == sizeof (int));
|
||||
[self->gl_context
|
||||
setValues:(GLint *)&self->flush_rect
|
||||
forParameter:NSOpenGLCPSwapRectangle];
|
||||
|
||||
[self->gl_context flushBuffer];
|
||||
}
|
||||
|
||||
@@ -447,15 +469,28 @@ _gdk_macos_gl_context_new (GdkMacosSurface *surface,
|
||||
gboolean
|
||||
_gdk_macos_gl_context_make_current (GdkMacosGLContext *self)
|
||||
{
|
||||
NSOpenGLContext *current;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_MACOS_GL_CONTEXT (self), FALSE);
|
||||
|
||||
if (self->gl_context != nil)
|
||||
if (self->gl_context == NULL)
|
||||
return FALSE;
|
||||
|
||||
current = [NSOpenGLContext currentContext];
|
||||
|
||||
if (self->gl_context != current)
|
||||
{
|
||||
/* The OpenGL mac programming guide suggests that glFlush() is called
|
||||
* before switching current contexts to ensure that the drawing commands
|
||||
* are submitted.
|
||||
*/
|
||||
if (current != NULL)
|
||||
glFlush ();
|
||||
|
||||
[self->gl_context makeCurrentContext];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
|
@@ -69,6 +69,10 @@ gdk_macos_popup_surface_layout (GdkMacosPopupSurface *self,
|
||||
gdk_surface_layout_popup_helper (GDK_SURFACE (self),
|
||||
width,
|
||||
height,
|
||||
self->parent_instance.shadow_left,
|
||||
self->parent_instance.shadow_right,
|
||||
self->parent_instance.shadow_top,
|
||||
self->parent_instance.shadow_bottom,
|
||||
monitor,
|
||||
&bounds,
|
||||
self->layout,
|
||||
|
@@ -85,6 +85,11 @@ void _gdk_macos_surface_get_shadow (GdkMacosSurface
|
||||
int *right,
|
||||
int *bottom,
|
||||
int *left);
|
||||
void _gdk_macos_surface_set_shadow (GdkMacosSurface *self,
|
||||
int top,
|
||||
int right,
|
||||
int bottom,
|
||||
int left);
|
||||
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,
|
||||
|
@@ -85,7 +85,7 @@ _gdk_macos_surface_reposition_children (GdkMacosSurface *self)
|
||||
}
|
||||
|
||||
if (GDK_IS_POPUP (self) && self->did_initial_present)
|
||||
g_signal_emit_by_name (self, "popup-layout-changed");
|
||||
gdk_surface_request_layout (GDK_SURFACE (self));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -112,15 +112,21 @@ gdk_macos_surface_hide (GdkSurface *surface)
|
||||
{
|
||||
GdkMacosSurface *self = (GdkMacosSurface *)surface;
|
||||
GdkSeat *seat;
|
||||
gboolean was_mapped;
|
||||
|
||||
g_assert (GDK_IS_MACOS_SURFACE (self));
|
||||
|
||||
was_mapped = GDK_SURFACE_IS_MAPPED (GDK_SURFACE (self));
|
||||
|
||||
seat = gdk_display_get_default_seat (surface->display);
|
||||
gdk_seat_ungrab (seat);
|
||||
|
||||
[self->window hide];
|
||||
|
||||
_gdk_surface_clear_update_area (surface);
|
||||
|
||||
if (was_mapped)
|
||||
gdk_surface_freeze_updates (GDK_SURFACE (self));
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -133,12 +139,12 @@ gdk_macos_surface_get_scale_factor (GdkSurface *surface)
|
||||
return [self->window backingScaleFactor];
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_macos_surface_set_shadow_width (GdkSurface *surface,
|
||||
int left,
|
||||
int right,
|
||||
int top,
|
||||
int bottom)
|
||||
void
|
||||
_gdk_macos_surface_set_shadow (GdkMacosSurface *surface,
|
||||
int top,
|
||||
int right,
|
||||
int bottom,
|
||||
int left)
|
||||
{
|
||||
GdkMacosSurface *self = (GdkMacosSurface *)surface;
|
||||
|
||||
@@ -361,6 +367,17 @@ gdk_macos_surface_destroy (GdkSurface *surface,
|
||||
|
||||
GdkMacosSurface *self = (GdkMacosSurface *)surface;
|
||||
GdkMacosWindow *window = g_steal_pointer (&self->window);
|
||||
GdkFrameClock *frame_clock;
|
||||
|
||||
if ((frame_clock = gdk_surface_get_frame_clock (GDK_SURFACE (self))))
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (frame_clock,
|
||||
G_CALLBACK (gdk_macos_surface_before_paint),
|
||||
self);
|
||||
g_signal_handlers_disconnect_by_func (frame_clock,
|
||||
G_CALLBACK (gdk_macos_surface_before_paint),
|
||||
self);
|
||||
}
|
||||
|
||||
g_clear_pointer (&self->title, g_free);
|
||||
|
||||
@@ -474,7 +491,6 @@ gdk_macos_surface_class_init (GdkMacosSurfaceClass *klass)
|
||||
surface_class->hide = gdk_macos_surface_hide;
|
||||
surface_class->set_input_region = gdk_macos_surface_set_input_region;
|
||||
surface_class->set_opaque_region = gdk_macos_surface_set_opaque_region;
|
||||
surface_class->set_shadow_width = gdk_macos_surface_set_shadow_width;
|
||||
|
||||
properties [PROP_NATIVE] =
|
||||
g_param_spec_pointer ("native",
|
||||
@@ -533,7 +549,10 @@ _gdk_macos_surface_new (GdkMacosDisplay *display,
|
||||
}
|
||||
|
||||
if (ret != NULL)
|
||||
_gdk_macos_surface_monitor_changed (ret);
|
||||
{
|
||||
gdk_surface_freeze_updates (GDK_SURFACE (ret));
|
||||
_gdk_macos_surface_monitor_changed (ret);
|
||||
}
|
||||
|
||||
g_object_unref (frame_clock);
|
||||
|
||||
@@ -743,7 +762,7 @@ _gdk_macos_surface_show (GdkMacosSurface *self)
|
||||
was_mapped = GDK_SURFACE_IS_MAPPED (GDK_SURFACE (self));
|
||||
|
||||
if (!was_mapped)
|
||||
gdk_synthesize_surface_state (GDK_SURFACE (self), GDK_TOPLEVEL_STATE_WITHDRAWN, 0);
|
||||
gdk_surface_set_is_mapped (GDK_SURFACE (self), TRUE);
|
||||
|
||||
_gdk_macos_display_clear_sorting (GDK_MACOS_DISPLAY (GDK_SURFACE (self)->display));
|
||||
|
||||
@@ -755,6 +774,7 @@ _gdk_macos_surface_show (GdkMacosSurface *self)
|
||||
{
|
||||
_gdk_macos_surface_update_position (self);
|
||||
gdk_surface_invalidate_rect (GDK_SURFACE (self), NULL);
|
||||
gdk_surface_thaw_updates (GDK_SURFACE (self));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -96,10 +96,14 @@ _gdk_macos_toplevel_surface_present (GdkToplevel *toplevel,
|
||||
GdkGeometry geometry;
|
||||
GdkSurfaceHints mask;
|
||||
NSWindowStyleMask style_mask;
|
||||
gboolean maximize;
|
||||
gboolean fullscreen;
|
||||
|
||||
g_assert (GDK_IS_MACOS_TOPLEVEL_SURFACE (self));
|
||||
g_assert (GDK_IS_MACOS_WINDOW (nswindow));
|
||||
|
||||
_gdk_macos_toplevel_surface_attach_to_parent (self);
|
||||
|
||||
style_mask = [nswindow styleMask];
|
||||
|
||||
monitor = gdk_display_get_monitor_at_surface (display, surface);
|
||||
@@ -153,27 +157,44 @@ _gdk_macos_toplevel_surface_present (GdkToplevel *toplevel,
|
||||
if (style_mask != [nswindow styleMask])
|
||||
[nswindow setStyleMask:style_mask];
|
||||
|
||||
if (size.shadow.is_valid)
|
||||
{
|
||||
_gdk_macos_surface_set_shadow (GDK_MACOS_SURFACE (surface),
|
||||
size.shadow.top,
|
||||
size.shadow.right,
|
||||
size.shadow.bottom,
|
||||
size.shadow.left);
|
||||
}
|
||||
|
||||
_gdk_macos_surface_set_geometry_hints (GDK_MACOS_SURFACE (self), &geometry, mask);
|
||||
gdk_surface_constrain_size (&geometry, mask, width, height, &width, &height);
|
||||
_gdk_macos_surface_resize (GDK_MACOS_SURFACE (self), width, height);
|
||||
|
||||
/* Maximized state */
|
||||
if (gdk_toplevel_layout_get_maximized (layout))
|
||||
_gdk_macos_toplevel_surface_maximize (self);
|
||||
else
|
||||
_gdk_macos_toplevel_surface_unmaximize (self);
|
||||
if (gdk_toplevel_layout_get_maximized (layout, &maximize))
|
||||
{
|
||||
if (maximize)
|
||||
_gdk_macos_toplevel_surface_maximize (self);
|
||||
else
|
||||
_gdk_macos_toplevel_surface_unmaximize (self);
|
||||
}
|
||||
|
||||
/* Fullscreen state */
|
||||
if (gdk_toplevel_layout_get_fullscreen (layout))
|
||||
_gdk_macos_toplevel_surface_fullscreen (self);
|
||||
else
|
||||
_gdk_macos_toplevel_surface_unfullscreen (self);
|
||||
if (gdk_toplevel_layout_get_fullscreen (layout, &fullscreen))
|
||||
{
|
||||
if (fullscreen)
|
||||
_gdk_macos_toplevel_surface_fullscreen (self);
|
||||
else
|
||||
_gdk_macos_toplevel_surface_unfullscreen (self);
|
||||
}
|
||||
|
||||
if (GDK_SURFACE (self)->transient_for != NULL)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
[nswindow setAnimationBehavior:NSWindowAnimationBehaviorDocumentWindow];
|
||||
|
||||
if (!self->decorated &&
|
||||
!GDK_MACOS_SURFACE (self)->did_initial_present &&
|
||||
GDK_SURFACE (self)->x == 0 &&
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user