Compare commits
1952 Commits
wip/tablet
...
gbsneto/pa
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5a4ade857a | ||
![]() |
cc75fc88ee | ||
![]() |
68ec9ac017 | ||
![]() |
8dcac664fa | ||
![]() |
2fb3db7659 | ||
![]() |
7d82cdeea3 | ||
![]() |
e2e7296612 | ||
![]() |
8685de9607 | ||
![]() |
a8a3c1017f | ||
![]() |
5d19aee23a | ||
![]() |
4270eef16e | ||
![]() |
b443bd42ac | ||
![]() |
267503b5f3 | ||
![]() |
a3d9f987c8 | ||
![]() |
9cfd185316 | ||
![]() |
176117c5f7 | ||
![]() |
8083065579 | ||
![]() |
34f5be726d | ||
![]() |
b53707f8c4 | ||
![]() |
d9294e4eb0 | ||
![]() |
94f8acc8fe | ||
![]() |
4841c1b13e | ||
![]() |
1e00cd290d | ||
![]() |
3daa2d2751 | ||
![]() |
444af437a0 | ||
![]() |
eebcf98284 | ||
![]() |
7d973ac538 | ||
![]() |
0ada04089c | ||
![]() |
85284acb00 | ||
![]() |
388d065699 | ||
![]() |
e191c21e04 | ||
![]() |
5376c31a33 | ||
![]() |
ca5b27baf5 | ||
![]() |
64df627688 | ||
![]() |
a740f50cd7 | ||
![]() |
5fd0f62a62 | ||
![]() |
80d420ff43 | ||
![]() |
407d62943c | ||
![]() |
0ace58d05f | ||
![]() |
d791710197 | ||
![]() |
b30c907ef9 | ||
![]() |
784a774d9c | ||
![]() |
8d3e053059 | ||
![]() |
f4d07caa38 | ||
![]() |
8a6d502e68 | ||
![]() |
b6c2eec487 | ||
![]() |
093aa086af | ||
![]() |
ebafc256a0 | ||
![]() |
aaed7c9a4f | ||
![]() |
fa8930817e | ||
![]() |
e741adb82e | ||
![]() |
deb541ef5a | ||
![]() |
29cc526e2e | ||
![]() |
6a92c6f83f | ||
![]() |
b8340f1355 | ||
![]() |
c7db234c11 | ||
![]() |
db22c13c4f | ||
![]() |
ad864083f9 | ||
![]() |
5f99eeb926 | ||
![]() |
e1513b6b00 | ||
![]() |
0cc3cd62ba | ||
![]() |
0f40541bb2 | ||
![]() |
db604dda89 | ||
![]() |
21ce6f96f1 | ||
![]() |
323a806d35 | ||
![]() |
84ac28cbee | ||
![]() |
2860adcf65 | ||
![]() |
2dbacfa8d6 | ||
![]() |
85e5b160ee | ||
![]() |
9510fbcbac | ||
![]() |
7c06e21e5a | ||
![]() |
1bfa20929b | ||
![]() |
bafc43ca26 | ||
![]() |
d37528f693 | ||
![]() |
37eeda0320 | ||
![]() |
acf70a3561 | ||
![]() |
24aef44baf | ||
![]() |
f7af32a3ea | ||
![]() |
252dd52439 | ||
![]() |
c216397974 | ||
![]() |
841dc09d21 | ||
![]() |
192b7887c3 | ||
![]() |
1fd8fe65c5 | ||
![]() |
a87c447b72 | ||
![]() |
c624fcbb8b | ||
![]() |
b393f3d540 | ||
![]() |
3e3bc3e67f | ||
![]() |
11d5e00003 | ||
![]() |
f0c9c25cf8 | ||
![]() |
7fdaf7721c | ||
![]() |
c403785d36 | ||
![]() |
4fe594bf9c | ||
![]() |
ec451b4674 | ||
![]() |
43eb724b94 | ||
![]() |
3d75b48d50 | ||
![]() |
4d465eac08 | ||
![]() |
db5abbb225 | ||
![]() |
eb0865fe11 | ||
![]() |
e283cd7b91 | ||
![]() |
d99442d6e6 | ||
![]() |
148da24f95 | ||
![]() |
649c26e05a | ||
![]() |
48eaa36d41 | ||
![]() |
6e953e2725 | ||
![]() |
3e357bd36f | ||
![]() |
a3da4b8d5b | ||
![]() |
0f43f86341 | ||
![]() |
d30a78767d | ||
![]() |
5f37369adb | ||
![]() |
c6691afa38 | ||
![]() |
ff5d561ca6 | ||
![]() |
5ac7109aaa | ||
![]() |
7749f4d983 | ||
![]() |
22aea3dc67 | ||
![]() |
3d5784342d | ||
![]() |
fa9e330f2c | ||
![]() |
951219650f | ||
![]() |
49b23c7490 | ||
![]() |
644a618fb1 | ||
![]() |
1e3ac3cf2c | ||
![]() |
658c373580 | ||
![]() |
6d12d2eac2 | ||
![]() |
356cad094b | ||
![]() |
161d2540e6 | ||
![]() |
94f4009882 | ||
![]() |
ec8138773a | ||
![]() |
041be7c565 | ||
![]() |
0407a8b33d | ||
![]() |
912a6f5e3f | ||
![]() |
89162a90aa | ||
![]() |
90a68f3118 | ||
![]() |
951fb03a7c | ||
![]() |
4837ea3434 | ||
![]() |
3fbeeb9072 | ||
![]() |
0ca3526627 | ||
![]() |
5b8c8a4114 | ||
![]() |
f635876eac | ||
![]() |
1caaf0cd1e | ||
![]() |
e2464660bc | ||
![]() |
81c1c70c0a | ||
![]() |
e05cd6009a | ||
![]() |
390314adfb | ||
![]() |
2ac7afe8a9 | ||
![]() |
d5c5669f2a | ||
![]() |
e8171ccdc1 | ||
![]() |
43f9cd537e | ||
![]() |
d4c4d6e64d | ||
![]() |
89727aa747 | ||
![]() |
de5e7a7175 | ||
![]() |
e6b885210c | ||
![]() |
9f1ab1c3af | ||
![]() |
9333a6da75 | ||
![]() |
8adab02757 | ||
![]() |
14d8aec4b8 | ||
![]() |
8e7e1eeef5 | ||
![]() |
0a8ae8417c | ||
![]() |
1d5e37050d | ||
![]() |
b7c3dada81 | ||
![]() |
d79ffd3976 | ||
![]() |
6458139c04 | ||
![]() |
82307dd694 | ||
![]() |
e1c67a1824 | ||
![]() |
68f261e8e2 | ||
![]() |
1530f27513 | ||
![]() |
05899596d1 | ||
![]() |
98d912ba5f | ||
![]() |
9e5ea8def4 | ||
![]() |
722c975aca | ||
![]() |
937a9853cd | ||
![]() |
cd8f4259be | ||
![]() |
c64d5ad8af | ||
![]() |
dacc041d0c | ||
![]() |
18779109de | ||
![]() |
522f9b4c38 | ||
![]() |
3d2b9a3a69 | ||
![]() |
15fa7816bd | ||
![]() |
6621a9b5a0 | ||
![]() |
04e411c2c0 | ||
![]() |
859bea629b | ||
![]() |
cbc783108e | ||
![]() |
2383801f7b | ||
![]() |
8626c69c2f | ||
![]() |
768ec15ea0 | ||
![]() |
1200182d70 | ||
![]() |
d9c18fd5bb | ||
![]() |
54709c16b5 | ||
![]() |
8da95b17f5 | ||
![]() |
d535c1eb6d | ||
![]() |
435b3c4bdb | ||
![]() |
22723ca371 | ||
![]() |
edd3634bb5 | ||
![]() |
1bf2eb95b5 | ||
![]() |
516fb524cb | ||
![]() |
596b30096d | ||
![]() |
7412794c66 | ||
![]() |
ad22b3f098 | ||
![]() |
206634e0ed | ||
![]() |
ea05d2af49 | ||
![]() |
6c7c566c6c | ||
![]() |
b596cf97ee | ||
![]() |
9dcf9782b6 | ||
![]() |
0f519ffb05 | ||
![]() |
42c78bd41f | ||
![]() |
b702c0fa5c | ||
![]() |
c80fd487f1 | ||
![]() |
817c8e568c | ||
![]() |
b7e9388906 | ||
![]() |
b8336633a7 | ||
![]() |
3c538d4a92 | ||
![]() |
2fc978ca9d | ||
![]() |
10dfc67dad | ||
![]() |
9ebcb719a1 | ||
![]() |
2a20df0c50 | ||
![]() |
d3441f7577 | ||
![]() |
65c02e26db | ||
![]() |
50ff9d4c71 | ||
![]() |
a3269dde95 | ||
![]() |
f2dea5d139 | ||
![]() |
3649795108 | ||
![]() |
36b9551f92 | ||
![]() |
6abe4703c7 | ||
![]() |
69ca584168 | ||
![]() |
8ee14a7cb7 | ||
![]() |
909dbafd67 | ||
![]() |
d5203f170e | ||
![]() |
2a45b7de7c | ||
![]() |
62c67be4c8 | ||
![]() |
0332b7394e | ||
![]() |
15f41c9f68 | ||
![]() |
2a38601b42 | ||
![]() |
d7bdc1591f | ||
![]() |
bd36764b4d | ||
![]() |
473bf38753 | ||
![]() |
f7747e4d4f | ||
![]() |
e8dc2acfca | ||
![]() |
cf734999fb | ||
![]() |
c9c3283540 | ||
![]() |
d2a8cdfd7c | ||
![]() |
3e85ac8131 | ||
![]() |
5f83d9a5c8 | ||
![]() |
ac20bf2000 | ||
![]() |
3561082aba | ||
![]() |
e34c330f66 | ||
![]() |
7655e09d00 | ||
![]() |
be069fb8ae | ||
![]() |
a30166a547 | ||
![]() |
0f9c6aef99 | ||
![]() |
332d55f7f6 | ||
![]() |
98d7024288 | ||
![]() |
82564772dc | ||
![]() |
33c2a38ff7 | ||
![]() |
52fdd24467 | ||
![]() |
2319cd9c40 | ||
![]() |
3b4319a87c | ||
![]() |
20176d0395 | ||
![]() |
762a3f89a9 | ||
![]() |
822c2666f5 | ||
![]() |
b412e6c493 | ||
![]() |
ae26cd0774 | ||
![]() |
3104d697c0 | ||
![]() |
0b3a1c9c31 | ||
![]() |
423c5f8e77 | ||
![]() |
3bbff94878 | ||
![]() |
4ef886f51e | ||
![]() |
22485ba36f | ||
![]() |
8df2a1452c | ||
![]() |
b12c92e206 | ||
![]() |
70036429bd | ||
![]() |
44502be560 | ||
![]() |
8cf42cd06c | ||
![]() |
b5328c977e | ||
![]() |
4339b23dd0 | ||
![]() |
a95cbd0aca | ||
![]() |
6df2b7af55 | ||
![]() |
c01b099dbd | ||
![]() |
2d80fd02e7 | ||
![]() |
bb65854065 | ||
![]() |
bc05e49eba | ||
![]() |
773b8384fa | ||
![]() |
7fdac6d310 | ||
![]() |
f6cd87734d | ||
![]() |
01a0fa9437 | ||
![]() |
657417a578 | ||
![]() |
4af00ae296 | ||
![]() |
84e575be77 | ||
![]() |
7945ee5beb | ||
![]() |
b6f5bab212 | ||
![]() |
5ad34e0efb | ||
![]() |
a1c34aad09 | ||
![]() |
98dfd5b887 | ||
![]() |
17a745bf81 | ||
![]() |
85bbd82ae8 | ||
![]() |
deda7a5235 | ||
![]() |
96141e28f9 | ||
![]() |
e6109cfc22 | ||
![]() |
3684f6b0ac | ||
![]() |
31b5059068 | ||
![]() |
ebff7fd7f4 | ||
![]() |
6e415353e3 | ||
![]() |
67917db45f | ||
![]() |
8286557a05 | ||
![]() |
63e2c0329f | ||
![]() |
06c357d781 | ||
![]() |
2f260edf19 | ||
![]() |
a5fd9a6e2f | ||
![]() |
4e6114b14d | ||
![]() |
65630d6310 | ||
![]() |
b8a81128e0 | ||
![]() |
19e55b9a8c | ||
![]() |
9ea9352c93 | ||
![]() |
817a76a7f5 | ||
![]() |
cb40049ec1 | ||
![]() |
481e87032c | ||
![]() |
bf5ac39d46 | ||
![]() |
47856d9701 | ||
![]() |
06429b12e2 | ||
![]() |
419fb81d40 | ||
![]() |
f1bbe5c251 | ||
![]() |
27fef44d48 | ||
![]() |
00b8ca7aeb | ||
![]() |
675d429ba0 | ||
![]() |
f4d754c934 | ||
![]() |
8ae79182c1 | ||
![]() |
712ec30cd9 | ||
![]() |
7a41483ea0 | ||
![]() |
b4d642be52 | ||
![]() |
0bf0e5780c | ||
![]() |
d7c5e57134 | ||
![]() |
67bf936ef8 | ||
![]() |
15b7b40ea8 | ||
![]() |
81bff3eba6 | ||
![]() |
da3fd8f7fb | ||
![]() |
6e125d9d04 | ||
![]() |
80705018f9 | ||
![]() |
f39dacd451 | ||
![]() |
33c070cdd5 | ||
![]() |
8d2f794bd3 | ||
![]() |
1458dc394a | ||
![]() |
c93877abb5 | ||
![]() |
ef0efc9589 | ||
![]() |
09cdf39b68 | ||
![]() |
a6ccbbfe68 | ||
![]() |
e502adfa04 | ||
![]() |
8dd377da38 | ||
![]() |
03a12f9458 | ||
![]() |
061f69f2a2 | ||
![]() |
4d5e1f690d | ||
![]() |
f3203f0330 | ||
![]() |
d27e6921d6 | ||
![]() |
c459ad7932 | ||
![]() |
5ee825c081 | ||
![]() |
1ead513b66 | ||
![]() |
9ed236bd67 | ||
![]() |
a1517cae1c | ||
![]() |
542502be53 | ||
![]() |
203a0b37ed | ||
![]() |
b6477a826d | ||
![]() |
95adc45b71 | ||
![]() |
f20daf567d | ||
![]() |
4345906663 | ||
![]() |
d714a94d97 | ||
![]() |
514c7028f4 | ||
![]() |
44624736c5 | ||
![]() |
0162cdf8ef | ||
![]() |
7e17dd0098 | ||
![]() |
704b73b041 | ||
![]() |
bd5e36cf0e | ||
![]() |
dbf56e24cb | ||
![]() |
0371897e22 | ||
![]() |
cc5fe05c4d | ||
![]() |
d8f13f6b4c | ||
![]() |
a2959510e5 | ||
![]() |
c8fbd4bee8 | ||
![]() |
d5631f793e | ||
![]() |
d4d160a186 | ||
![]() |
4719c3f31e | ||
![]() |
1f5a2d6029 | ||
![]() |
19bf4cf4f8 | ||
![]() |
6f59e4858e | ||
![]() |
aec85281ba | ||
![]() |
b22875aae9 | ||
![]() |
962712ddc2 | ||
![]() |
de29627855 | ||
![]() |
54dcff3aa2 | ||
![]() |
bcd5882081 | ||
![]() |
69f56578a3 | ||
![]() |
c00e092456 | ||
![]() |
a8cee14417 | ||
![]() |
8a89b0007c | ||
![]() |
6934b83f44 | ||
![]() |
37aab9280a | ||
![]() |
49e8bc8a52 | ||
![]() |
abd6b7affd | ||
![]() |
748223b896 | ||
![]() |
c75eac27a8 | ||
![]() |
ac502c921d | ||
![]() |
134765c634 | ||
![]() |
5149d6eb40 | ||
![]() |
006cdac531 | ||
![]() |
61bc1a7d6f | ||
![]() |
86ab3878e7 | ||
![]() |
f2d0e5021a | ||
![]() |
6d8286614f | ||
![]() |
70fcf745b8 | ||
![]() |
589e999049 | ||
![]() |
d8f2f583e6 | ||
![]() |
db866eb052 | ||
![]() |
d092e913d6 | ||
![]() |
6147be3dff | ||
![]() |
57f55d486d | ||
![]() |
6be56de140 | ||
![]() |
206ca43c91 | ||
![]() |
f8f1bcfa9e | ||
![]() |
91df801ffb | ||
![]() |
97f142d1cc | ||
![]() |
5ea3a4ecbb | ||
![]() |
fbd5a74a0b | ||
![]() |
58bb61e161 | ||
![]() |
dbd053020a | ||
![]() |
c063d43be8 | ||
![]() |
35b77a61c8 | ||
![]() |
32547d2eff | ||
![]() |
dc37ee2782 | ||
![]() |
371e5df568 | ||
![]() |
cc4e007148 | ||
![]() |
c0d9b08ef9 | ||
![]() |
d99cd279d2 | ||
![]() |
d670a1aa78 | ||
![]() |
76b396846d | ||
![]() |
bd0105ba8d | ||
![]() |
6dcce19932 | ||
![]() |
cc40a885ef | ||
![]() |
513c278077 | ||
![]() |
ac8ee9a08c | ||
![]() |
952c1fefa2 | ||
![]() |
18b8f9bfed | ||
![]() |
f08417b618 | ||
![]() |
62c9713361 | ||
![]() |
efd7a4af5e | ||
![]() |
3a914a915e | ||
![]() |
aa6561a3b1 | ||
![]() |
9eb9623288 | ||
![]() |
8c988aa632 | ||
![]() |
13cf19e0b6 | ||
![]() |
eac0e253e1 | ||
![]() |
7346419295 | ||
![]() |
3e77f6704b | ||
![]() |
01e27a4366 | ||
![]() |
4e3b26d2ed | ||
![]() |
5f05112b9a | ||
![]() |
6cf7d2d47f | ||
![]() |
1139ace244 | ||
![]() |
bd9a300801 | ||
![]() |
2d090f9232 | ||
![]() |
1c8aebd811 | ||
![]() |
31eafba93a | ||
![]() |
5eacdf7af7 | ||
![]() |
ca638d1354 | ||
![]() |
f12e6ad4f1 | ||
![]() |
0bbda3ad87 | ||
![]() |
dd43d04d42 | ||
![]() |
383ac76d00 | ||
![]() |
e59ca14f6c | ||
![]() |
7917b083cb | ||
![]() |
2b3040d04f | ||
![]() |
6cc48d8cbb | ||
![]() |
798026498d | ||
![]() |
49f029571c | ||
![]() |
290b257288 | ||
![]() |
2b60fb0144 | ||
![]() |
7f5f5eb847 | ||
![]() |
44269e6a1d | ||
![]() |
70dfe8c97d | ||
![]() |
072afa5fa3 | ||
![]() |
519a0fd93d | ||
![]() |
5f132f3975 | ||
![]() |
1546989845 | ||
![]() |
1923db97c1 | ||
![]() |
db32047a5d | ||
![]() |
b505eb261e | ||
![]() |
1a1db9ef8d | ||
![]() |
b1587f0716 | ||
![]() |
93e450f37c | ||
![]() |
fc713ecb70 | ||
![]() |
500c13ab6f | ||
![]() |
050267fe74 | ||
![]() |
ce25a0171c | ||
![]() |
b7518c8651 | ||
![]() |
62dedfbef3 | ||
![]() |
4508978ea5 | ||
![]() |
c533a06e93 | ||
![]() |
5d3b4f0134 | ||
![]() |
4cf340ae9b | ||
![]() |
053ac03f01 | ||
![]() |
28a9439209 | ||
![]() |
cf4b5efdd1 | ||
![]() |
3067dab84c | ||
![]() |
1790320ba3 | ||
![]() |
f45df4265d | ||
![]() |
bcbcd6a68c | ||
![]() |
b1a0bf8916 | ||
![]() |
6c18bae83c | ||
![]() |
d0531966eb | ||
![]() |
989a47ee8c | ||
![]() |
03be6b687b | ||
![]() |
32c22d375a | ||
![]() |
bdf3f49a82 | ||
![]() |
356b4b0dc5 | ||
![]() |
3fc2ea8297 | ||
![]() |
06d976e853 | ||
![]() |
96ebd1c214 | ||
![]() |
fa28481736 | ||
![]() |
76b064cffc | ||
![]() |
333b5d12a0 | ||
![]() |
aa73504d95 | ||
![]() |
32305b453d | ||
![]() |
7d5e08c843 | ||
![]() |
dc0fc65229 | ||
![]() |
428af6d213 | ||
![]() |
2ffe597617 | ||
![]() |
0461eed0cb | ||
![]() |
ca1bacc212 | ||
![]() |
2229365ca8 | ||
![]() |
8c367364b6 | ||
![]() |
58909da425 | ||
![]() |
ff32bf467c | ||
![]() |
c5572d3095 | ||
![]() |
e706bcdf73 | ||
![]() |
d9ebcbd55c | ||
![]() |
240b13aa74 | ||
![]() |
97635d6f84 | ||
![]() |
6c21a22e4d | ||
![]() |
0add6f62b6 | ||
![]() |
049418cd03 | ||
![]() |
3ee1999c70 | ||
![]() |
e4b8920688 | ||
![]() |
eb236649fc | ||
![]() |
0a36a4545f | ||
![]() |
180985018b | ||
![]() |
c86c5d6905 | ||
![]() |
c2fad2dc7c | ||
![]() |
1196b7bde4 | ||
![]() |
19eddfd756 | ||
![]() |
ed280ef4ac | ||
![]() |
b6200ac3ff | ||
![]() |
626621a53a | ||
![]() |
fb3a64491e | ||
![]() |
294f9419f7 | ||
![]() |
a37956c95f | ||
![]() |
89f5ca3301 | ||
![]() |
07745b3082 | ||
![]() |
054c25f693 | ||
![]() |
01de04d8c9 | ||
![]() |
08e4cb54a8 | ||
![]() |
c71faffb71 | ||
![]() |
91e3a0b3a9 | ||
![]() |
5fa8f78434 | ||
![]() |
ab5ac21104 | ||
![]() |
0ebea2be9c | ||
![]() |
6f54bab0a8 | ||
![]() |
5d7deab6da | ||
![]() |
35fcf4a4ae | ||
![]() |
74565380aa | ||
![]() |
fa37496ffb | ||
![]() |
cc772ddd61 | ||
![]() |
4d2647cdbc | ||
![]() |
3caefd8fda | ||
![]() |
12381d57d1 | ||
![]() |
4ad8c4b86b | ||
![]() |
dbd2827ca1 | ||
![]() |
1a78557e0b | ||
![]() |
2e99963087 | ||
![]() |
4d763e1828 | ||
![]() |
a17b343c21 | ||
![]() |
556136dacc | ||
![]() |
a8c80ccece | ||
![]() |
f044511037 | ||
![]() |
b31e545c9d | ||
![]() |
fad5657eda | ||
![]() |
eaf9ccde39 | ||
![]() |
f9c625924e | ||
![]() |
64cb735abf | ||
![]() |
c85f322b20 | ||
![]() |
76096a725b | ||
![]() |
6eb7d13894 | ||
![]() |
7928b25ebf | ||
![]() |
78e6258b44 | ||
![]() |
c9259c2b15 | ||
![]() |
492d2eb573 | ||
![]() |
376dcd3b92 | ||
![]() |
60781bc6c2 | ||
![]() |
2d8827cb0c | ||
![]() |
802f7dcd30 | ||
![]() |
e62cfd9043 | ||
![]() |
cbcf6a4f23 | ||
![]() |
b0e42d3f6e | ||
![]() |
18eb66de06 | ||
![]() |
b32cccddf9 | ||
![]() |
362e26b3e2 | ||
![]() |
5c53284bde | ||
![]() |
e45d7f70e8 | ||
![]() |
70edc7dda4 | ||
![]() |
3244ed37a9 | ||
![]() |
406359bba1 | ||
![]() |
8b23dd915f | ||
![]() |
7e1f65405f | ||
![]() |
c1683073f1 | ||
![]() |
18ec86bd90 | ||
![]() |
315a6f43d7 | ||
![]() |
7603bb5fd5 | ||
![]() |
d53b79f8c3 | ||
![]() |
f534452c6a | ||
![]() |
0f6b83e7df | ||
![]() |
16a6aef5a7 | ||
![]() |
518fb9fb5e | ||
![]() |
547ace3cf8 | ||
![]() |
a4ba38ee78 | ||
![]() |
e32d52b9b8 | ||
![]() |
de40ced8b4 | ||
![]() |
cfee58798e | ||
![]() |
7ea01693a7 | ||
![]() |
e0d839aea2 | ||
![]() |
d3efd73429 | ||
![]() |
2db5505216 | ||
![]() |
f44b6c772a | ||
![]() |
f64fab1d2d | ||
![]() |
39bc2e0333 | ||
![]() |
5bb6f0ad8b | ||
![]() |
903537a2a0 | ||
![]() |
1db937826c | ||
![]() |
c1fe1c5d6b | ||
![]() |
a62e9f99a2 | ||
![]() |
9817a6aa47 | ||
![]() |
8185373bd4 | ||
![]() |
18c41aefc9 | ||
![]() |
32917f1922 | ||
![]() |
7a843e1fd1 | ||
![]() |
0e154ccf76 | ||
![]() |
120db06c60 | ||
![]() |
e76ab05d45 | ||
![]() |
43eeb009ce | ||
![]() |
9000eef49d | ||
![]() |
e198c8452b | ||
![]() |
aea66ddff6 | ||
![]() |
a5f4ffa58c | ||
![]() |
a1c39e142d | ||
![]() |
e76a0f564c | ||
![]() |
8307d9c4de | ||
![]() |
1dbf6b096b | ||
![]() |
6fe71ecc01 | ||
![]() |
57e58eaf2a | ||
![]() |
00a5db71cf | ||
![]() |
c7fa57cd28 | ||
![]() |
8f2c86d79e | ||
![]() |
56f1da5c66 | ||
![]() |
30a205c0e3 | ||
![]() |
98d77d37d0 | ||
![]() |
0853fb940a | ||
![]() |
6dd819a61e | ||
![]() |
39aae19ed7 | ||
![]() |
20749e5dbd | ||
![]() |
99e1cd549d | ||
![]() |
efdbeb7c1b | ||
![]() |
ea4dbd14bc | ||
![]() |
838df4b00b | ||
![]() |
b6110ba8dc | ||
![]() |
fd763ad857 | ||
![]() |
e3d59832c5 | ||
![]() |
2c85bb4178 | ||
![]() |
8493777961 | ||
![]() |
4e7405aca9 | ||
![]() |
34207ba509 | ||
![]() |
6dc499f305 | ||
![]() |
92e2242cf0 | ||
![]() |
ea214fbe0f | ||
![]() |
487b8a0430 | ||
![]() |
8b060342bd | ||
![]() |
27d6c063ad | ||
![]() |
0e62b71959 | ||
![]() |
2c3f79829e | ||
![]() |
5d2b0bc0cc | ||
![]() |
7e3a780dcd | ||
![]() |
1035200f26 | ||
![]() |
8532b10290 | ||
![]() |
f0c6c4eb1f | ||
![]() |
ba194bd19e | ||
![]() |
a35274ddb7 | ||
![]() |
ab541e3e0f | ||
![]() |
67ce04993e | ||
![]() |
22cdc8f414 | ||
![]() |
8b022a5595 | ||
![]() |
7a1393ba26 | ||
![]() |
5ed954e6de | ||
![]() |
96572fbe6a | ||
![]() |
4ab47e72e5 | ||
![]() |
70e0fd0b45 | ||
![]() |
26cd031be8 | ||
![]() |
743e8cc249 | ||
![]() |
2bf7974076 | ||
![]() |
9c16e4e2f3 | ||
![]() |
07f6c85cc7 | ||
![]() |
d4968e10e5 | ||
![]() |
bd3817198e | ||
![]() |
5b5737f65e | ||
![]() |
5af8753171 | ||
![]() |
8bef74f441 | ||
![]() |
f1a42b0f97 | ||
![]() |
95682a9494 | ||
![]() |
ef41867303 | ||
![]() |
8d4b03ce87 | ||
![]() |
06263354a5 | ||
![]() |
aa30e11c8b | ||
![]() |
65bca8e008 | ||
![]() |
068791f6c1 | ||
![]() |
cbc4563b30 | ||
![]() |
f381d7c3bf | ||
![]() |
0a8d8128b3 | ||
![]() |
46135d4f0f | ||
![]() |
7ba44e7945 | ||
![]() |
dd4ad4efc4 | ||
![]() |
807658e972 | ||
![]() |
8499a29d0a | ||
![]() |
283eedef90 | ||
![]() |
ce515c5389 | ||
![]() |
83440614bc | ||
![]() |
a93661f9e1 | ||
![]() |
216f7631de | ||
![]() |
361bf847af | ||
![]() |
46f54eb3d9 | ||
![]() |
bc47c6cc4f | ||
![]() |
8bfdfa1f46 | ||
![]() |
999542c915 | ||
![]() |
cb38e9c4a2 | ||
![]() |
42c56c2460 | ||
![]() |
e2d904c32b | ||
![]() |
fa9c09feee | ||
![]() |
3f6a2d02fd | ||
![]() |
5b37901b57 | ||
![]() |
2df4ccd1cd | ||
![]() |
dcd15e6145 | ||
![]() |
2a318eb3f2 | ||
![]() |
522eec00cd | ||
![]() |
be11c32815 | ||
![]() |
24c91d95de | ||
![]() |
7562eb6006 | ||
![]() |
0aa7405a2a | ||
![]() |
a119e58773 | ||
![]() |
8a32b42172 | ||
![]() |
94a15404da | ||
![]() |
fefede5b51 | ||
![]() |
5be00f23be | ||
![]() |
bdbd2e96de | ||
![]() |
7785a57f8a | ||
![]() |
cf01e26b2f | ||
![]() |
6e46ad9f3a | ||
![]() |
921b18f713 | ||
![]() |
53175e8788 | ||
![]() |
920541fa26 | ||
![]() |
9d8922764c | ||
![]() |
97f2c7c161 | ||
![]() |
38235bc145 | ||
![]() |
3ce3a5a952 | ||
![]() |
3005a400ca | ||
![]() |
34e7134db2 | ||
![]() |
12710dc644 | ||
![]() |
a10ad577a7 | ||
![]() |
d3c559a917 | ||
![]() |
1e7628a3ef | ||
![]() |
d5a85997f2 | ||
![]() |
5a37e0e1ef | ||
![]() |
00f6a74397 | ||
![]() |
c9439107c1 | ||
![]() |
ba65664cbd | ||
![]() |
3da0730a31 | ||
![]() |
98fcd616a3 | ||
![]() |
06d0989014 | ||
![]() |
c248feb3c1 | ||
![]() |
3f2c5ca9bd | ||
![]() |
520c56fe53 | ||
![]() |
d3a670b043 | ||
![]() |
6eca267eee | ||
![]() |
fdefe776d3 | ||
![]() |
bba8776184 | ||
![]() |
e075242801 | ||
![]() |
0f9686fb5a | ||
![]() |
168479862d | ||
![]() |
483ed98777 | ||
![]() |
14fe6e9c95 | ||
![]() |
6584d06bb5 | ||
![]() |
92a53f08f4 | ||
![]() |
a81d4aed7a | ||
![]() |
517488ef67 | ||
![]() |
33f1706634 | ||
![]() |
5685449e15 | ||
![]() |
a6d67b164a | ||
![]() |
f950380202 | ||
![]() |
a4270fa7ac | ||
![]() |
35c9280fb6 | ||
![]() |
8b92ad1d4b | ||
![]() |
0d6e3fd675 | ||
![]() |
b140e7fbeb | ||
![]() |
6c0f107db0 | ||
![]() |
61950755ec | ||
![]() |
bc3162460f | ||
![]() |
27a4f9f862 | ||
![]() |
88f2441330 | ||
![]() |
ab04286c6b | ||
![]() |
e8a62861c9 | ||
![]() |
9ac87b36c1 | ||
![]() |
ce7819949f | ||
![]() |
12792f99a0 | ||
![]() |
66996dee4b | ||
![]() |
2f45e88f06 | ||
![]() |
c1439e141e | ||
![]() |
dceb0f1f1f | ||
![]() |
a7915ff8ae | ||
![]() |
420a712ad5 | ||
![]() |
9a47e5c832 | ||
![]() |
dbc63430d8 | ||
![]() |
0f861cecac | ||
![]() |
586f9666d7 | ||
![]() |
05a2331052 | ||
![]() |
9f8bee7781 | ||
![]() |
d9505315da | ||
![]() |
c9937faf1e | ||
![]() |
98606bc046 | ||
![]() |
49096f0530 | ||
![]() |
ff6eb86bb4 | ||
![]() |
c735eab216 | ||
![]() |
299aa9759c | ||
![]() |
35e9020f4c | ||
![]() |
6d4234e300 | ||
![]() |
0457870ff1 | ||
![]() |
a52c4c2795 | ||
![]() |
bb8c388a37 | ||
![]() |
46cb506f8f | ||
![]() |
ce20c964a6 | ||
![]() |
e3f76e9482 | ||
![]() |
b894fbd9ff | ||
![]() |
2ca0871724 | ||
![]() |
dd12f569d9 | ||
![]() |
c54377e3ba | ||
![]() |
346acaf7f6 | ||
![]() |
3343a199c2 | ||
![]() |
1fb3c9f8bf | ||
![]() |
b7b5fb293d | ||
![]() |
1455c402b9 | ||
![]() |
4c1fe4c30d | ||
![]() |
9b97a44760 | ||
![]() |
26fa7b8f6a | ||
![]() |
7486783692 | ||
![]() |
9929efb65e | ||
![]() |
5db48faca4 | ||
![]() |
b0c54b6675 | ||
![]() |
d8354cb153 | ||
![]() |
9a348aa859 | ||
![]() |
fe6e24ddbd | ||
![]() |
7e330bd65f | ||
![]() |
3f9c5823cb | ||
![]() |
2bdd97e067 | ||
![]() |
32fd1e8c08 | ||
![]() |
e126b6ed16 | ||
![]() |
4d8cb5408b | ||
![]() |
f852d2b0eb | ||
![]() |
5c3b27d02f | ||
![]() |
ead6556b50 | ||
![]() |
4afa66fe41 | ||
![]() |
408292959e | ||
![]() |
2d8d9dea97 | ||
![]() |
f38c90961a | ||
![]() |
aa47374d0e | ||
![]() |
5aee5048ba | ||
![]() |
0e3f80d238 | ||
![]() |
ef13ee4488 | ||
![]() |
8b5d34b24a | ||
![]() |
c614a2db28 | ||
![]() |
7360f51ee8 | ||
![]() |
6ae42f3845 | ||
![]() |
26b66826dc | ||
![]() |
6d082bf442 | ||
![]() |
aad2280309 | ||
![]() |
e3d5bc077d | ||
![]() |
777963eeb6 | ||
![]() |
4cc5b25493 | ||
![]() |
49c5228655 | ||
![]() |
85638c1b19 | ||
![]() |
2507e53d04 | ||
![]() |
a9c1c6d9fb | ||
![]() |
0a8e108f10 | ||
![]() |
859b01fc39 | ||
![]() |
e42206cc43 | ||
![]() |
41eea5a942 | ||
![]() |
197401fbf8 | ||
![]() |
9ab338d7b6 | ||
![]() |
aa5d8ac68c | ||
![]() |
0adc56779f | ||
![]() |
67eb289a6a | ||
![]() |
dfc4d0d523 | ||
![]() |
5f2bb43061 | ||
![]() |
fef81cd628 | ||
![]() |
3e8d0204bd | ||
![]() |
b2a530b326 | ||
![]() |
5ab116a87f | ||
![]() |
10b0351a59 | ||
![]() |
b64c69e4bc | ||
![]() |
c2e49f1bb5 | ||
![]() |
a3d63d0ac0 | ||
![]() |
88cae8bd3d | ||
![]() |
a6ec2b1d42 | ||
![]() |
ca600973ba | ||
![]() |
4b8dd51c4d | ||
![]() |
56c468a2ef | ||
![]() |
10b30eaba5 | ||
![]() |
328e3f8f4f | ||
![]() |
7bd69f0b32 | ||
![]() |
538e402d71 | ||
![]() |
9af6ec78ab | ||
![]() |
41e22ab592 | ||
![]() |
1303c626b1 | ||
![]() |
7eea82d3d7 | ||
![]() |
80e5955918 | ||
![]() |
ce989976fa | ||
![]() |
529e5adb2e | ||
![]() |
a70ae50ca9 | ||
![]() |
74882b2502 | ||
![]() |
5f49bda591 | ||
![]() |
edab8c3a4c | ||
![]() |
8153c5b544 | ||
![]() |
a4cef8586c | ||
![]() |
9b9bb9cf86 | ||
![]() |
dc5b2e396c | ||
![]() |
d23275bc76 | ||
![]() |
48e820235e | ||
![]() |
2d3c56b089 | ||
![]() |
85b2e59e7e | ||
![]() |
e1950ed76f | ||
![]() |
7938f41c11 | ||
![]() |
9f41bdb086 | ||
![]() |
8457e2bad6 | ||
![]() |
4d7329a7e2 | ||
![]() |
b4120a75e0 | ||
![]() |
b19e4592df | ||
![]() |
e9c9ee844c | ||
![]() |
f5f0ff0a2f | ||
![]() |
68dacb531b | ||
![]() |
dd82f4afcd | ||
![]() |
fc010e0edc | ||
![]() |
5132ea64be | ||
![]() |
82325cbcfd | ||
![]() |
fb5ebffb8d | ||
![]() |
94d843b80e | ||
![]() |
c32e2d17d9 | ||
![]() |
2b05748d5c | ||
![]() |
cd775929bf | ||
![]() |
7303a78b06 | ||
![]() |
07b8cc0773 | ||
![]() |
1bb0e18042 | ||
![]() |
05bc2e2331 | ||
![]() |
3b097c7e77 | ||
![]() |
0bc312a54b | ||
![]() |
2718699ccc | ||
![]() |
be175558c3 | ||
![]() |
df39a7d0fd | ||
![]() |
43cdf81f6b | ||
![]() |
183f4b0c13 | ||
![]() |
38a772bce7 | ||
![]() |
dd451547a5 | ||
![]() |
270da95cbc | ||
![]() |
76198e0b3b | ||
![]() |
efc190789f | ||
![]() |
81e99c2680 | ||
![]() |
755755a2f3 | ||
![]() |
4b23eb064c | ||
![]() |
498200776c | ||
![]() |
27b949d6ba | ||
![]() |
27ea62a79d | ||
![]() |
cf1edff9ed | ||
![]() |
5cb5baa7d4 | ||
![]() |
d620189ae3 | ||
![]() |
bc041e02b3 | ||
![]() |
4b4c2b1afa | ||
![]() |
05d15f8885 | ||
![]() |
561d71b8ae | ||
![]() |
177e47952a | ||
![]() |
374bb630f0 | ||
![]() |
fe5138dfc4 | ||
![]() |
68a9675d42 | ||
![]() |
020e0bb2ac | ||
![]() |
b47de58edd | ||
![]() |
24195d8d15 | ||
![]() |
3a7c37c60a | ||
![]() |
c69d5d978c | ||
![]() |
2f30098ab5 | ||
![]() |
e146428038 | ||
![]() |
5758401443 | ||
![]() |
f241bdba93 | ||
![]() |
410d66ca37 | ||
![]() |
f2309cdb55 | ||
![]() |
3887d25dbc | ||
![]() |
d6d01c85a6 | ||
![]() |
d0bfb94ff0 | ||
![]() |
2b1537cdf5 | ||
![]() |
d3362a6f05 | ||
![]() |
9cf8aa4584 | ||
![]() |
c76eedd794 | ||
![]() |
9131f26cae | ||
![]() |
8ed0dda40d | ||
![]() |
0fd9e38175 | ||
![]() |
891cab3bb3 | ||
![]() |
454bd88d27 | ||
![]() |
3ced749c89 | ||
![]() |
69b6479502 | ||
![]() |
a641b59f22 | ||
![]() |
704bd4c331 | ||
![]() |
229ac9c9dc | ||
![]() |
e435cf301f | ||
![]() |
0608ae2d4e | ||
![]() |
3f107da479 | ||
![]() |
813de50eba | ||
![]() |
a4cb1f0f7a | ||
![]() |
612432ac3e | ||
![]() |
47a01013b1 | ||
![]() |
69e7ad4402 | ||
![]() |
c214eb15bf | ||
![]() |
e6eac46629 | ||
![]() |
de61da16ae | ||
![]() |
bdcb395b33 | ||
![]() |
1caa7f7627 | ||
![]() |
5b4a96e3a3 | ||
![]() |
15dd23a323 | ||
![]() |
04d7fcf60d | ||
![]() |
9755cd469c | ||
![]() |
1bdadfa3e1 | ||
![]() |
20fcb88632 | ||
![]() |
6791d1b8e2 | ||
![]() |
6c8b103a7b | ||
![]() |
95d0117784 | ||
![]() |
740436ab4d | ||
![]() |
89fbf1e1d2 | ||
![]() |
c391cefd71 | ||
![]() |
52af529950 | ||
![]() |
c30cb069f5 | ||
![]() |
99a0b43f28 | ||
![]() |
af4017de49 | ||
![]() |
d804ecbd95 | ||
![]() |
1ad3382bff | ||
![]() |
9787b1cfd5 | ||
![]() |
0ac2eba4d3 | ||
![]() |
17c54c6e03 | ||
![]() |
dd14e1cebc | ||
![]() |
1e2266aa47 | ||
![]() |
472a434212 | ||
![]() |
7c226462e0 | ||
![]() |
93c6a869ec | ||
![]() |
9d914091f5 | ||
![]() |
afcc1bf512 | ||
![]() |
8a29c51b73 | ||
![]() |
d38c4c1f2d | ||
![]() |
2091df3856 | ||
![]() |
744b4dcb7c | ||
![]() |
0c64c35a8a | ||
![]() |
57acbc53fb | ||
![]() |
ac68631f4c | ||
![]() |
8163ca6821 | ||
![]() |
094e0356e8 | ||
![]() |
63450d69d3 | ||
![]() |
0952409de4 | ||
![]() |
1c54c7a1bb | ||
![]() |
f25f14351c | ||
![]() |
691e7951ea | ||
![]() |
7eaeba520a | ||
![]() |
9a5b94a340 | ||
![]() |
079b125430 | ||
![]() |
770a5a5bff | ||
![]() |
0548c9e7d5 | ||
![]() |
68a6cc5976 | ||
![]() |
2035f2f2e2 | ||
![]() |
1892a6b0c4 | ||
![]() |
b464004bb3 | ||
![]() |
ea4438284f | ||
![]() |
d050fdb17f | ||
![]() |
9003a42df3 | ||
![]() |
9e8ee491e6 | ||
![]() |
3b46345db4 | ||
![]() |
6b2a111428 | ||
![]() |
bc56971e18 | ||
![]() |
fcc0288f0c | ||
![]() |
4e03e89869 | ||
![]() |
4e17017501 | ||
![]() |
63bc86cd43 | ||
![]() |
ee32ca3efe | ||
![]() |
a393a614a1 | ||
![]() |
753e9c65a1 | ||
![]() |
409c92a68f | ||
![]() |
53a93deafc | ||
![]() |
3a374a6db5 | ||
![]() |
aec4b4af97 | ||
![]() |
2392432780 | ||
![]() |
0d5274b3b7 | ||
![]() |
42c0809216 | ||
![]() |
420311b463 | ||
![]() |
efae039ad9 | ||
![]() |
e60dfd5b23 | ||
![]() |
df45c50d0b | ||
![]() |
8f691c28f3 | ||
![]() |
a77da353f3 | ||
![]() |
70a4f59960 | ||
![]() |
ac813d5285 | ||
![]() |
5d3e7d6ffd | ||
![]() |
5b378ea648 | ||
![]() |
ea04ff5d46 | ||
![]() |
982ad7361b | ||
![]() |
10dfe2059b | ||
![]() |
61e9594f63 | ||
![]() |
2d8eaa082f | ||
![]() |
29b240e883 | ||
![]() |
e081bb3921 | ||
![]() |
ad24967d78 | ||
![]() |
90d83b4bb9 | ||
![]() |
eb3ff3f44a | ||
![]() |
db14e6099e | ||
![]() |
5aa02c0378 | ||
![]() |
73b2b30a1d | ||
![]() |
cf6b7bcb79 | ||
![]() |
4b86af839f | ||
![]() |
f434f88c0c | ||
![]() |
cdedd017d6 | ||
![]() |
a48c9d6cd9 | ||
![]() |
1039386e10 | ||
![]() |
944339f6a5 | ||
![]() |
4cfcd4bce0 | ||
![]() |
4f386e5131 | ||
![]() |
3ace913aed | ||
![]() |
8f2daed9e0 | ||
![]() |
c5dc0f4a2e | ||
![]() |
615587cd06 | ||
![]() |
df068a3649 | ||
![]() |
7967ceee98 | ||
![]() |
979bc4390a | ||
![]() |
e20e60783a | ||
![]() |
38c5a1610e | ||
![]() |
572610d01e | ||
![]() |
21b2eff334 | ||
![]() |
35388fb33c | ||
![]() |
aa5738c777 | ||
![]() |
f7ffb1790f | ||
![]() |
65e9c89ed9 | ||
![]() |
5fafaf92df | ||
![]() |
4e4b24e7a8 | ||
![]() |
542ed1d024 | ||
![]() |
eda0f45ab5 | ||
![]() |
4fdc551209 | ||
![]() |
58043cbc8b | ||
![]() |
09fa27cd09 | ||
![]() |
d8ee96c6cb | ||
![]() |
3821ed162b | ||
![]() |
1f20e82a96 | ||
![]() |
1079850621 | ||
![]() |
aab5f7c42b | ||
![]() |
f8a6c27791 | ||
![]() |
95e9fa10ef | ||
![]() |
89871e04aa | ||
![]() |
1705a26fc7 | ||
![]() |
95c924460a | ||
![]() |
97b1a8dfc8 | ||
![]() |
fbcc8fae77 | ||
![]() |
3d2cb7f1ef | ||
![]() |
fc9a24824a | ||
![]() |
383ba566bd | ||
![]() |
d200868459 | ||
![]() |
690b232258 | ||
![]() |
e078838774 | ||
![]() |
1b03dd6704 | ||
![]() |
1171c4f16d | ||
![]() |
a9f139cab6 | ||
![]() |
5ba38a4ab6 | ||
![]() |
8f5a0ec83d | ||
![]() |
bb2e8ff09a | ||
![]() |
1fe10f09d7 | ||
![]() |
328b4d24c6 | ||
![]() |
4b2d4a0169 | ||
![]() |
3564b5845e | ||
![]() |
2907b234c9 | ||
![]() |
e1ffe15d94 | ||
![]() |
1b0a3f11f9 | ||
![]() |
b202f5d094 | ||
![]() |
cd5c52b550 | ||
![]() |
46d516cb04 | ||
![]() |
4d0a886c45 | ||
![]() |
5db3eebfbb | ||
![]() |
36ee6f656a | ||
![]() |
966725fcb4 | ||
![]() |
90923903ae | ||
![]() |
191525cdb4 | ||
![]() |
2d18b18fe5 | ||
![]() |
ead62f1901 | ||
![]() |
f97b2d49f5 | ||
![]() |
827db6f7c7 | ||
![]() |
91c6a144da | ||
![]() |
cb86745245 | ||
![]() |
6b384dc8d1 | ||
![]() |
a25915f4f9 | ||
![]() |
92a7690e19 | ||
![]() |
1372690c7f | ||
![]() |
bd2ca79a48 | ||
![]() |
6d64123849 | ||
![]() |
042a95ef98 | ||
![]() |
2d3af657e7 | ||
![]() |
4ebc55f2b3 | ||
![]() |
7c80e80a92 | ||
![]() |
4c5ec5dfa8 | ||
![]() |
c995c0ad1f | ||
![]() |
d870ed4317 | ||
![]() |
9950b4de75 | ||
![]() |
7e3fbfbdd2 | ||
![]() |
ff453c1143 | ||
![]() |
efd9d467f2 | ||
![]() |
07ce981cb0 | ||
![]() |
5af848d991 | ||
![]() |
fff7da2a96 | ||
![]() |
d6fc41b73e | ||
![]() |
9d38ffa6e3 | ||
![]() |
8bcdf9ba61 | ||
![]() |
938891a2e2 | ||
![]() |
45c9786434 | ||
![]() |
cfbc4fe4d0 | ||
![]() |
dae5f06069 | ||
![]() |
1ff9bbd59c | ||
![]() |
cc838ead8b | ||
![]() |
9a123847e0 | ||
![]() |
1f0659d516 | ||
![]() |
4f31b53521 | ||
![]() |
962e1d5a69 | ||
![]() |
57f80f091f | ||
![]() |
9c79a1631d | ||
![]() |
c7853730ed | ||
![]() |
2cd78bffd9 | ||
![]() |
1597b357a1 | ||
![]() |
73524cadd4 | ||
![]() |
6fa8238ebf | ||
![]() |
1c6eef48f1 | ||
![]() |
1fdf2ac746 | ||
![]() |
3ae9feef0c | ||
![]() |
e9a8208607 | ||
![]() |
e357b4a46a | ||
![]() |
097ca01411 | ||
![]() |
e8197e8e05 | ||
![]() |
7fc6b8a746 | ||
![]() |
0fd9c00580 | ||
![]() |
4a51a1dfe5 | ||
![]() |
9fb8abf840 | ||
![]() |
449320cd23 | ||
![]() |
12b69dbabb | ||
![]() |
4652bde3d7 | ||
![]() |
9b4e1903e1 | ||
![]() |
702facbc91 | ||
![]() |
339340df34 | ||
![]() |
1ad386bc28 | ||
![]() |
28a8c714ea | ||
![]() |
c9f18bfef3 | ||
![]() |
20cd885443 | ||
![]() |
3f994646f2 | ||
![]() |
f45e7703ba | ||
![]() |
1ee0412177 | ||
![]() |
4b33f05eda | ||
![]() |
81923410f6 | ||
![]() |
f19cb6a610 | ||
![]() |
cde1a730e8 | ||
![]() |
d6efdfab4b | ||
![]() |
f7b6271d86 | ||
![]() |
8d1be7ffc0 | ||
![]() |
a0af7e94a6 | ||
![]() |
f607b03456 | ||
![]() |
644ee666f6 | ||
![]() |
ee0677a021 | ||
![]() |
0b4d80d74f | ||
![]() |
1a2b493d17 | ||
![]() |
9ceeddd952 | ||
![]() |
e1849ccbfa | ||
![]() |
6262b46928 | ||
![]() |
8752f40792 | ||
![]() |
8c5600e81b | ||
![]() |
4c1b48d0cc | ||
![]() |
536ae8430b | ||
![]() |
aaddf44d45 | ||
![]() |
0c42faf34d | ||
![]() |
be13d0f8ee | ||
![]() |
81438eebef | ||
![]() |
b70187c2d9 | ||
![]() |
c041851fa5 | ||
![]() |
b59a8b1de3 | ||
![]() |
e3b9fe7e58 | ||
![]() |
0177ab45af | ||
![]() |
bc951557e8 | ||
![]() |
2c32d94e1d | ||
![]() |
5d9e2d8d2e | ||
![]() |
0637537355 | ||
![]() |
63ed134165 | ||
![]() |
a6f464a600 | ||
![]() |
0a0c49af71 | ||
![]() |
3c6d688c87 | ||
![]() |
5d66a13397 | ||
![]() |
ff633f295e | ||
![]() |
310064601c | ||
![]() |
78799e58d2 | ||
![]() |
4fa8b74dc7 | ||
![]() |
bf8b4e9927 | ||
![]() |
f48acd8448 | ||
![]() |
d0c9d2dc7b | ||
![]() |
d9a0f2a88d | ||
![]() |
4e812410cc | ||
![]() |
0873e3812b | ||
![]() |
7eac28189b | ||
![]() |
1650c35e38 | ||
![]() |
156c478ccb | ||
![]() |
10e6eae0dd | ||
![]() |
f519093f89 | ||
![]() |
8a8ab6c673 | ||
![]() |
9e28303588 | ||
![]() |
6776329cf5 | ||
![]() |
2e4c516d43 | ||
![]() |
d920eaba4a | ||
![]() |
376a76a082 | ||
![]() |
c6d940d3b2 | ||
![]() |
95c101a0ba | ||
![]() |
239671f882 | ||
![]() |
12150c1ca7 | ||
![]() |
a251675cc0 | ||
![]() |
d188949101 | ||
![]() |
d3920ddb67 | ||
![]() |
bc5077f623 | ||
![]() |
68f3b5849a | ||
![]() |
6de3e4a07e | ||
![]() |
1fb0e8e9bb | ||
![]() |
20b8743f21 | ||
![]() |
016359ede2 | ||
![]() |
410bad88a8 | ||
![]() |
c98bab8327 | ||
![]() |
a422d6fe08 | ||
![]() |
98ee85ce82 | ||
![]() |
5a8509f895 | ||
![]() |
06770b0dd4 | ||
![]() |
af616c96d4 | ||
![]() |
f5b2d79f3b | ||
![]() |
d644993a74 | ||
![]() |
2df4ebff47 | ||
![]() |
9337d18468 | ||
![]() |
317b734dcc | ||
![]() |
e35ac9be8d | ||
![]() |
6dbb524b9f | ||
![]() |
a3f0bf3ff8 | ||
![]() |
ecf796f82b | ||
![]() |
0a4fb008f3 | ||
![]() |
79fd91ec35 | ||
![]() |
e659b07c39 | ||
![]() |
441b854d41 | ||
![]() |
c936056663 | ||
![]() |
e22bbd4b14 | ||
![]() |
103df63023 | ||
![]() |
36f2d5b0f1 | ||
![]() |
920cc15ea9 | ||
![]() |
842ff5d6aa | ||
![]() |
e1b10769e5 | ||
![]() |
4177d4f9f4 | ||
![]() |
9b64e09a24 | ||
![]() |
f5a70aa1e2 | ||
![]() |
2df35d636e | ||
![]() |
f7fd018cf8 | ||
![]() |
405aa8fb9e | ||
![]() |
0a826da330 | ||
![]() |
139bed73f8 | ||
![]() |
778f92e170 | ||
![]() |
5a43cc5cf9 | ||
![]() |
81b11929f7 | ||
![]() |
46b8624833 | ||
![]() |
76012506ff | ||
![]() |
1ab6ac2996 | ||
![]() |
c98d5448ec | ||
![]() |
cfafb0bfca | ||
![]() |
71077d582b | ||
![]() |
5eb5f72434 | ||
![]() |
7f49b5144b | ||
![]() |
e8380d11c4 | ||
![]() |
ff5a7ba9b9 | ||
![]() |
c50ae726a9 | ||
![]() |
2b59b4c793 | ||
![]() |
0249993377 | ||
![]() |
d9a9844005 | ||
![]() |
227187f1f1 | ||
![]() |
77384ffa9a | ||
![]() |
1956a6ae76 | ||
![]() |
5df5b00927 | ||
![]() |
1d280d8fa1 | ||
![]() |
9c03e78505 | ||
![]() |
4af62438f2 | ||
![]() |
0aa6d9782c | ||
![]() |
c2e72823fc | ||
![]() |
d829fa19d2 | ||
![]() |
76b6cc02d6 | ||
![]() |
8acfa0a79c | ||
![]() |
2ed7ca5b6a | ||
![]() |
5774fcdd80 | ||
![]() |
eed4dab0fc | ||
![]() |
f5bdf75f70 | ||
![]() |
1f0ce80fb4 | ||
![]() |
7c31fb2450 | ||
![]() |
11783ffdd0 | ||
![]() |
41c96921d6 | ||
![]() |
23455985cd | ||
![]() |
659c987335 | ||
![]() |
ecc1f56009 | ||
![]() |
18b9cf8a85 | ||
![]() |
934184e236 | ||
![]() |
b735bdcf2f | ||
![]() |
f692eb3677 | ||
![]() |
b1597b4291 | ||
![]() |
faa96444b5 | ||
![]() |
78c121eb10 | ||
![]() |
cb6adc45d1 | ||
![]() |
59b4b5e9e8 | ||
![]() |
ad784501a6 | ||
![]() |
68d690225a | ||
![]() |
8f716772c2 | ||
![]() |
da21f02eb9 | ||
![]() |
4ce7d3a772 | ||
![]() |
77b7ecfd04 | ||
![]() |
da1c1d9c22 | ||
![]() |
f7cd6af9c6 | ||
![]() |
678ebbb7f6 | ||
![]() |
87d6e45da5 | ||
![]() |
80c61c4b3b | ||
![]() |
4547c6e9f3 | ||
![]() |
cde622b8e1 | ||
![]() |
8b810193dd | ||
![]() |
22f019826c | ||
![]() |
7fa3f41df2 | ||
![]() |
f99a086444 | ||
![]() |
925b1aec64 | ||
![]() |
be5c2ebcb5 | ||
![]() |
ae73e9d84d | ||
![]() |
af920851ca | ||
![]() |
ea4dbdd66f | ||
![]() |
ff9753688f | ||
![]() |
b35b531f00 | ||
![]() |
6257f1195b | ||
![]() |
b252771a8f | ||
![]() |
75c3f0ffba | ||
![]() |
bd83873a7f | ||
![]() |
cea7d629d9 | ||
![]() |
1831a1dd9b | ||
![]() |
9abf6892c4 | ||
![]() |
674a48335d | ||
![]() |
db9d8fcc90 | ||
![]() |
15db18901c | ||
![]() |
4cfc21d49d | ||
![]() |
cf0a453d32 | ||
![]() |
4186833df7 | ||
![]() |
30fa764c90 | ||
![]() |
236417be38 | ||
![]() |
2641b364e8 | ||
![]() |
fb5e591bc9 | ||
![]() |
bfb46ff850 | ||
![]() |
2012eab842 | ||
![]() |
9ecb488437 | ||
![]() |
4295fdb892 | ||
![]() |
998d921d41 | ||
![]() |
d491063110 | ||
![]() |
e2bfaf0751 | ||
![]() |
f1e1a5ff06 | ||
![]() |
ef2000053a | ||
![]() |
8a7876ded5 | ||
![]() |
b50da46f43 | ||
![]() |
8b0e9706ca | ||
![]() |
1d4a5a7520 | ||
![]() |
8290e1f09a | ||
![]() |
89672fad04 | ||
![]() |
1cb9cfe11d | ||
![]() |
280e297afe | ||
![]() |
fc8de3d0c8 | ||
![]() |
3e2555667f | ||
![]() |
1ecadb6e57 | ||
![]() |
2abee91dbc | ||
![]() |
68645df3a3 | ||
![]() |
d2f79afc1a | ||
![]() |
8a6fa726d3 | ||
![]() |
a3d7ae6214 | ||
![]() |
c0c132a320 | ||
![]() |
0dfb5d3ef7 | ||
![]() |
6480a7ee4a | ||
![]() |
6cc8450f8e | ||
![]() |
7ae4b28bda | ||
![]() |
bb8e6afae6 | ||
![]() |
d7f61e48ac | ||
![]() |
9de6de5802 | ||
![]() |
6e7057426e | ||
![]() |
5306d36522 | ||
![]() |
7990182f56 | ||
![]() |
93a6be08a5 | ||
![]() |
d5d5084151 | ||
![]() |
d3cff9a962 | ||
![]() |
133bbdfefa | ||
![]() |
a8c3470cf2 | ||
![]() |
578e527869 | ||
![]() |
312f215fc3 | ||
![]() |
d639c28e3b | ||
![]() |
c3f7259cbb | ||
![]() |
56e8f98c13 | ||
![]() |
c2217373df | ||
![]() |
4a3781d7db | ||
![]() |
911a838c3a | ||
![]() |
c6106f90d4 | ||
![]() |
ed52e17886 | ||
![]() |
f63bb024fa | ||
![]() |
bccff5bdd8 | ||
![]() |
e9944350d3 | ||
![]() |
1fab6e69b7 | ||
![]() |
f89162ee73 | ||
![]() |
5261638bfd | ||
![]() |
04b75c45f8 | ||
![]() |
a50950cf8f | ||
![]() |
f1850e0d61 | ||
![]() |
e3dab70754 | ||
![]() |
b3eac93c4c | ||
![]() |
a9e386e1af | ||
![]() |
028157081c | ||
![]() |
a65c344743 | ||
![]() |
8797e5951c | ||
![]() |
a4e69f338d | ||
![]() |
d045462860 | ||
![]() |
3137ddb1a1 | ||
![]() |
5fbb479301 | ||
![]() |
a4c10b6683 | ||
![]() |
9e5491439e | ||
![]() |
417757eab8 | ||
![]() |
32b87e7bea | ||
![]() |
ed6fda84e1 | ||
![]() |
b1d95438d6 | ||
![]() |
60bc6798f4 | ||
![]() |
342532a98d | ||
![]() |
219d2304e0 | ||
![]() |
fb6b0de48b | ||
![]() |
22173fde15 | ||
![]() |
4c8dd08c77 | ||
![]() |
b78b8c9578 | ||
![]() |
e1516e4f31 | ||
![]() |
32276cf418 | ||
![]() |
98f0578f9d | ||
![]() |
87f82d9fc0 | ||
![]() |
a6646b32d0 | ||
![]() |
d2cdbd433d | ||
![]() |
5d3cacf8d2 | ||
![]() |
a9b78cea6b | ||
![]() |
bb25aa5e6b | ||
![]() |
b52f304f9d | ||
![]() |
9a076076c0 | ||
![]() |
5cae628f37 | ||
![]() |
0f0b25767d | ||
![]() |
878fb6720a | ||
![]() |
f4c2da7499 | ||
![]() |
0559308812 | ||
![]() |
30d2a94cb3 | ||
![]() |
2681647089 | ||
![]() |
4c106a9c9b | ||
![]() |
a884e4540c | ||
![]() |
f9fff98909 | ||
![]() |
abee020f71 | ||
![]() |
33ba06504b | ||
![]() |
10c7035a71 | ||
![]() |
e6a20a025d | ||
![]() |
262b52da50 | ||
![]() |
fccdd00f74 | ||
![]() |
3a41b0f221 | ||
![]() |
e5a359a032 | ||
![]() |
d893adb290 | ||
![]() |
0c53677992 | ||
![]() |
640178a94f | ||
![]() |
2e7f11305c | ||
![]() |
c1b5b76bf4 | ||
![]() |
d164ce15f2 | ||
![]() |
c9941f2d30 | ||
![]() |
330c5ffef9 | ||
![]() |
f83f5019cf | ||
![]() |
7b55592cce | ||
![]() |
99aaec6ce4 | ||
![]() |
880c9e379f | ||
![]() |
99d89299fd | ||
![]() |
f36fa53b0e | ||
![]() |
4f58a46217 | ||
![]() |
3acd562a41 | ||
![]() |
0515f73ff0 | ||
![]() |
d696fd3021 | ||
![]() |
ce7573e2b7 | ||
![]() |
6c8f6afdc4 | ||
![]() |
7a096b8686 | ||
![]() |
c7976e0dbc | ||
![]() |
f692c527e7 | ||
![]() |
2c1d3e5b70 | ||
![]() |
262e184fe7 | ||
![]() |
01edf10e82 | ||
![]() |
335764e815 | ||
![]() |
89f6fdce5d | ||
![]() |
7d9af9585d | ||
![]() |
c8f24721c5 | ||
![]() |
7ba803934c | ||
![]() |
5a1ce1b5a2 | ||
![]() |
1f570d542e | ||
![]() |
658d97d00e | ||
![]() |
8942e98e1d | ||
![]() |
b6e13c459a | ||
![]() |
43151edece | ||
![]() |
b3f27de710 | ||
![]() |
4cf14c41ef | ||
![]() |
dc03b3aa47 | ||
![]() |
ef3e036b45 | ||
![]() |
24c3844246 | ||
![]() |
f21df37190 | ||
![]() |
a5efa30f6c | ||
![]() |
817911d9d3 | ||
![]() |
a8d86b4876 | ||
![]() |
cfb3d10e1b | ||
![]() |
3a75e55cd8 | ||
![]() |
335cd8e74c | ||
![]() |
c73d3d9d83 | ||
![]() |
8833991201 | ||
![]() |
9fb891d216 | ||
![]() |
3b3f40a1aa | ||
![]() |
2114f2eb9f | ||
![]() |
3ee16a2abb | ||
![]() |
9fb4783957 | ||
![]() |
9e641f623f | ||
![]() |
8065ff5a37 | ||
![]() |
6ce918661c | ||
![]() |
a72bd1bd29 | ||
![]() |
89854f9244 | ||
![]() |
a6e15e841b | ||
![]() |
61e9c5c357 | ||
![]() |
54dc10f890 | ||
![]() |
7baa1d8a8d | ||
![]() |
4b4eb3a039 | ||
![]() |
92c03e8625 | ||
![]() |
a53ca0d8cf | ||
![]() |
913c32ee34 | ||
![]() |
f31d8bab44 | ||
![]() |
6f8e6864b2 | ||
![]() |
aea706230d | ||
![]() |
f49458ccd9 | ||
![]() |
9064b4f1f9 | ||
![]() |
c977ba197e | ||
![]() |
f271c1b4ce | ||
![]() |
ea08ed7dc4 | ||
![]() |
3248c6852c | ||
![]() |
5649734100 | ||
![]() |
c55943d753 | ||
![]() |
19e02b3bbe | ||
![]() |
eb7f33265a | ||
![]() |
9f6f778589 | ||
![]() |
1f657d2c81 | ||
![]() |
6940169f46 | ||
![]() |
4678c24d83 | ||
![]() |
1ca57e0923 | ||
![]() |
b53b94e6f2 | ||
![]() |
4abd31d863 | ||
![]() |
3c8b1462bc | ||
![]() |
27a77fa115 | ||
![]() |
0992b5c53e | ||
![]() |
e928370bf0 | ||
![]() |
d2b05f0305 | ||
![]() |
bd326d38ac | ||
![]() |
8e335ce183 | ||
![]() |
364b184f41 | ||
![]() |
94016f7257 | ||
![]() |
e38a8363e4 | ||
![]() |
76eb27e786 | ||
![]() |
5db2be414b | ||
![]() |
61bfe04b7b | ||
![]() |
1931d0ef51 | ||
![]() |
46f1dcaecc | ||
![]() |
5c9a2c54c4 | ||
![]() |
dd549604e2 | ||
![]() |
8913cbb06d | ||
![]() |
96790276c5 | ||
![]() |
84eeebe32f | ||
![]() |
01f1de704d | ||
![]() |
6894563667 | ||
![]() |
9b4e8695f3 | ||
![]() |
adcd0fe9b4 | ||
![]() |
cc4a65fe94 | ||
![]() |
53061c7005 | ||
![]() |
53e3d0df64 | ||
![]() |
97d180ee59 | ||
![]() |
740748af3e | ||
![]() |
38d61f30dc | ||
![]() |
23c4ac6c7f | ||
![]() |
cfe5d7429a | ||
![]() |
36cd7177fd | ||
![]() |
2e4eb86340 | ||
![]() |
337b833e23 | ||
![]() |
d25af2a02a | ||
![]() |
820a6ab406 | ||
![]() |
cd225c4e19 | ||
![]() |
98cd8136ca | ||
![]() |
e6972924d0 | ||
![]() |
ead09bf6cc | ||
![]() |
fe09a3c4e2 | ||
![]() |
ee6867611f | ||
![]() |
207c11d1f7 | ||
![]() |
c6beb1cfc5 | ||
![]() |
b34fe72bb7 | ||
![]() |
18f301cec9 | ||
![]() |
406677e2a0 | ||
![]() |
4f25057413 | ||
![]() |
2f492c133c | ||
![]() |
138a47b8f9 | ||
![]() |
62e4954c96 | ||
![]() |
062b696df2 | ||
![]() |
5effde59f6 | ||
![]() |
76595af8af | ||
![]() |
21c8911254 | ||
![]() |
35554555e0 | ||
![]() |
e2ad8700a9 | ||
![]() |
323c608b0c | ||
![]() |
0efe076a0a | ||
![]() |
6f7f98540f | ||
![]() |
56632d2ef7 | ||
![]() |
6296d30e1a | ||
![]() |
ed16b40c98 | ||
![]() |
7bba20e536 | ||
![]() |
8e6244238d | ||
![]() |
ba9ec00694 | ||
![]() |
08cda496f8 | ||
![]() |
f9552bb9c0 | ||
![]() |
7e267e9b01 | ||
![]() |
fbb4c0b831 | ||
![]() |
d7faab76e0 | ||
![]() |
b7892ba1c5 | ||
![]() |
ab2d2af176 | ||
![]() |
80674fc9e4 | ||
![]() |
9587a60da4 | ||
![]() |
73958aeb59 | ||
![]() |
77b33a86b8 | ||
![]() |
f3b94d9a78 | ||
![]() |
af8b938f92 | ||
![]() |
1496a7ead3 | ||
![]() |
e7e62ee4a4 | ||
![]() |
f6e471fca4 | ||
![]() |
1dd121002f | ||
![]() |
526fdca3fb | ||
![]() |
220ac7c8f2 | ||
![]() |
5ea39e0e77 | ||
![]() |
1c23d4bc51 | ||
![]() |
2e6bfa8bae | ||
![]() |
a59170c09f | ||
![]() |
aa9b2c5494 | ||
![]() |
c1d157e136 | ||
![]() |
2cd21f1b20 | ||
![]() |
5ccde659c1 | ||
![]() |
fd62a1f6ce | ||
![]() |
b8808ca24d | ||
![]() |
41ff0aaf60 | ||
![]() |
c5d0791710 | ||
![]() |
828277f5e0 | ||
![]() |
e56d6b06cf | ||
![]() |
96aed5fd2e | ||
![]() |
88c510c38a | ||
![]() |
6bcff556b5 | ||
![]() |
81736b1dea | ||
![]() |
cc09ca8892 | ||
![]() |
d76aa89be9 | ||
![]() |
8cd4b0e11f | ||
![]() |
6b08990dcc | ||
![]() |
8b769a3412 | ||
![]() |
8d3ac8c3e9 | ||
![]() |
074b0d6b2a | ||
![]() |
8e8cdf1873 | ||
![]() |
72ee6b8b65 | ||
![]() |
3d9bb1cc09 | ||
![]() |
4ed59a020d | ||
![]() |
b5e797f453 | ||
![]() |
125cba7100 | ||
![]() |
720cbc5e5f | ||
![]() |
ad7ec6b979 | ||
![]() |
991f2d696a | ||
![]() |
76175a48d5 | ||
![]() |
c8392e025f | ||
![]() |
820ffa2781 | ||
![]() |
51f7892600 | ||
![]() |
de1464f88f | ||
![]() |
aebd5ba6e0 | ||
![]() |
a310ba7649 | ||
![]() |
daf5a112fb | ||
![]() |
0745734ba5 | ||
![]() |
a75e2ace82 | ||
![]() |
f18e2a8c31 | ||
![]() |
ff6186f1ec | ||
![]() |
cd0f8e5cd1 | ||
![]() |
75c3cf0589 | ||
![]() |
a40e4634a6 | ||
![]() |
d62d780a95 | ||
![]() |
eed71654ba | ||
![]() |
835ded3f02 | ||
![]() |
3450b51da1 | ||
![]() |
1ca9d8ac02 | ||
![]() |
aafdb6baaa | ||
![]() |
2547a7cd9c | ||
![]() |
b4b13ac996 | ||
![]() |
21f2f52269 | ||
![]() |
ea64e0abfa | ||
![]() |
e891a8b628 | ||
![]() |
aecd98b847 | ||
![]() |
d7b87799c8 | ||
![]() |
28a898a22f | ||
![]() |
92341e7c30 | ||
![]() |
2eb843268a | ||
![]() |
44b163e39b | ||
![]() |
566c28bdaf | ||
![]() |
749237a28e | ||
![]() |
c498bce9e4 | ||
![]() |
7f0e6b9b4b | ||
![]() |
a465e4c5b8 | ||
![]() |
767e12125b | ||
![]() |
df0805fb0a | ||
![]() |
14dbdfe483 | ||
![]() |
c3d2352a9e | ||
![]() |
55726e787b | ||
![]() |
085df1170e | ||
![]() |
f31d71ce63 | ||
![]() |
2c439dec75 | ||
![]() |
942feadffd | ||
![]() |
8bebb8126c | ||
![]() |
12ef1a5e4b | ||
![]() |
ec1da588cf | ||
![]() |
44628bf224 | ||
![]() |
27ac0b7f27 | ||
![]() |
e420f386d2 | ||
![]() |
2ceff4ee9b | ||
![]() |
b2a62e6d5a | ||
![]() |
a54042e938 | ||
![]() |
2facf26568 | ||
![]() |
9c0fa583f5 | ||
![]() |
feb4c36659 | ||
![]() |
dd1eaeb262 | ||
![]() |
f096cc327d | ||
![]() |
e05f48fc53 | ||
![]() |
95a68854ad | ||
![]() |
d63e9452d9 | ||
![]() |
f1b7b41b8d | ||
![]() |
bdc68efe45 | ||
![]() |
bf71cb2e3c | ||
![]() |
4d13f6e2d0 | ||
![]() |
d6cde4b043 | ||
![]() |
e2f5579391 | ||
![]() |
90de521799 | ||
![]() |
a1bedd4b1c | ||
![]() |
b281f9566d | ||
![]() |
5ee0f24ab9 | ||
![]() |
fcc7501eb8 | ||
![]() |
492854e14d | ||
![]() |
c325a0bebf | ||
![]() |
d6b290ef77 | ||
![]() |
b112d98278 | ||
![]() |
cc6efeb14f | ||
![]() |
53993ba4d2 | ||
![]() |
7f6bcea331 | ||
![]() |
7ed14e0ee8 | ||
![]() |
3691eb6d70 | ||
![]() |
d4d2bf0f6c | ||
![]() |
0f2be43af4 | ||
![]() |
87f9927375 | ||
![]() |
21fd87c4af | ||
![]() |
1d2bead358 | ||
![]() |
a174c18fb5 | ||
![]() |
c61dfa71ed | ||
![]() |
65cc1c711a | ||
![]() |
2f74ecd469 | ||
![]() |
53a9411255 | ||
![]() |
989ec7fc60 | ||
![]() |
c72efc90cb | ||
![]() |
e7430a4535 | ||
![]() |
2292458f5e | ||
![]() |
d62491f46e | ||
![]() |
8f7a36c53f | ||
![]() |
8d7ae52565 | ||
![]() |
cffd2a658b | ||
![]() |
d7c48a854e | ||
![]() |
8742b16266 | ||
![]() |
15300ae72e | ||
![]() |
1141929bc5 | ||
![]() |
bbb83d4cd0 | ||
![]() |
c5637c52bd | ||
![]() |
6cc688d575 | ||
![]() |
e160babe3f | ||
![]() |
434f22e820 | ||
![]() |
f8eb05ca6d | ||
![]() |
ccf6dcd865 | ||
![]() |
2c13ae2b59 | ||
![]() |
f820d4c886 | ||
![]() |
d4bbdde503 | ||
![]() |
0b4ad937d9 | ||
![]() |
362ab781dd | ||
![]() |
2cec7ac596 | ||
![]() |
806f930a16 | ||
![]() |
0f93ad8b53 | ||
![]() |
a631010a7a | ||
![]() |
c17d85e16b | ||
![]() |
ec53b5562d | ||
![]() |
521e934cb9 | ||
![]() |
edfb8fe19b | ||
![]() |
745cb67988 | ||
![]() |
d990f873c1 | ||
![]() |
0deb069f87 | ||
![]() |
ee394a6cd3 | ||
![]() |
5478accbf2 | ||
![]() |
bae6903476 | ||
![]() |
b3eb56bb78 | ||
![]() |
5849275b76 | ||
![]() |
1acfcbda6c | ||
![]() |
4c6dae0bae | ||
![]() |
2b07a493c5 | ||
![]() |
eafa04230b | ||
![]() |
7004818508 | ||
![]() |
bc8b3d9f39 | ||
![]() |
b63e73e422 | ||
![]() |
3602b49a30 | ||
![]() |
8b2c888368 | ||
![]() |
ec708fc1a9 | ||
![]() |
6e773389fd | ||
![]() |
fe59da43ef | ||
![]() |
40a5eff5d4 | ||
![]() |
9d32146edb | ||
![]() |
5f5d8f4091 | ||
![]() |
aeda556af1 | ||
![]() |
a4ba72b0bf | ||
![]() |
f318ec9df5 | ||
![]() |
a89aa1d8cc | ||
![]() |
61c717abb3 | ||
![]() |
229a143eac | ||
![]() |
d9b98bced9 | ||
![]() |
e68b5f6655 | ||
![]() |
19f7e310d9 | ||
![]() |
26815d68f6 | ||
![]() |
bca041b68e | ||
![]() |
ca44770f1a | ||
![]() |
9028e30b39 | ||
![]() |
e66f176c29 | ||
![]() |
5e54f322ab | ||
![]() |
23b1b5f57e | ||
![]() |
87555359f5 | ||
![]() |
1088bf476d | ||
![]() |
f8878ac907 | ||
![]() |
c2643ba5ac | ||
![]() |
b3ba8e897e | ||
![]() |
7fd585fe98 |
30
.gitignore
vendored
30
.gitignore
vendored
@@ -36,17 +36,26 @@ mutter-wayland.desktop
|
|||||||
stamp-h1
|
stamp-h1
|
||||||
*.gmo
|
*.gmo
|
||||||
*.make
|
*.make
|
||||||
|
*.log
|
||||||
|
*.trs
|
||||||
*~
|
*~
|
||||||
stamp-it
|
stamp-it
|
||||||
.intltool-merge-cache
|
.intltool-merge-cache
|
||||||
|
ABOUT-NLS
|
||||||
POTFILES
|
POTFILES
|
||||||
|
Makevars.template
|
||||||
|
po/*.header
|
||||||
po/*.pot
|
po/*.pot
|
||||||
|
po/*.sed
|
||||||
|
po/*.sin
|
||||||
|
Rules-quot
|
||||||
libmutter.pc
|
libmutter.pc
|
||||||
mutter
|
mutter
|
||||||
mutter-restart-helper
|
mutter-restart-helper
|
||||||
mutter-test-client
|
mutter-test-client
|
||||||
mutter-test-runner
|
mutter-test-runner
|
||||||
mutter-test-unit-tests
|
mutter-test-unit-tests
|
||||||
|
mutter-test-headless-start-test
|
||||||
mutter-all.test
|
mutter-all.test
|
||||||
org.gnome.mutter.gschema.valid
|
org.gnome.mutter.gschema.valid
|
||||||
org.gnome.mutter.gschema.xml
|
org.gnome.mutter.gschema.xml
|
||||||
@@ -63,6 +72,8 @@ src/stamp-meta-enum-types.h
|
|||||||
src/meta-dbus-display-config.[ch]
|
src/meta-dbus-display-config.[ch]
|
||||||
src/meta-dbus-idle-monitor.[ch]
|
src/meta-dbus-idle-monitor.[ch]
|
||||||
src/meta-dbus-login1.[ch]
|
src/meta-dbus-login1.[ch]
|
||||||
|
src/meta-dbus-remote-desktop.[ch]
|
||||||
|
src/meta-dbus-screen-cast.[ch]
|
||||||
src/gtk-primary-selection-protocol.c
|
src/gtk-primary-selection-protocol.c
|
||||||
src/gtk-primary-selection-server-protocol.h
|
src/gtk-primary-selection-server-protocol.h
|
||||||
src/gtk-shell-protocol.c
|
src/gtk-shell-protocol.c
|
||||||
@@ -75,7 +86,25 @@ src/relative-pointer-unstable-v*-protocol.c
|
|||||||
src/relative-pointer-unstable-v*-server-protocol.h
|
src/relative-pointer-unstable-v*-server-protocol.h
|
||||||
src/pointer-constraints-unstable-v*-protocol.c
|
src/pointer-constraints-unstable-v*-protocol.c
|
||||||
src/pointer-constraints-unstable-v*-server-protocol.h
|
src/pointer-constraints-unstable-v*-server-protocol.h
|
||||||
|
src/xdg-foreign-unstable-v*-protocol.c
|
||||||
|
src/xdg-foreign-unstable-v*-server-protocol.h
|
||||||
|
src/xdg-output-unstable-v1-protocol.c
|
||||||
|
src/xdg-output-unstable-v1-server-protocol.h
|
||||||
|
src/xwayland-keyboard-grab-unstable-v1-protocol.c
|
||||||
|
src/xwayland-keyboard-grab-unstable-v1-server-protocol.h
|
||||||
|
src/tablet-unstable-v*-protocol.c
|
||||||
|
src/tablet-unstable-v*-server-protocol.h
|
||||||
|
src/text-input-unstable-v*-protocol.c
|
||||||
|
src/text-input-unstable-v*-server-protocol.h
|
||||||
|
src/keyboard-shortcuts-inhibit-unstable-v*-protocol.c
|
||||||
|
src/keyboard-shortcuts-inhibit-unstable-v*-server-protocol.h
|
||||||
|
src/linux-dmabuf-unstable-v*-protocol.c
|
||||||
|
src/linux-dmabuf-unstable-v*-server-protocol.h
|
||||||
|
src/xdg-shell-protocol.c
|
||||||
|
src/xdg-shell-server-protocol.h
|
||||||
|
src/wayland-eglstream-controller-server-protocol.h
|
||||||
src/meta/meta-version.h
|
src/meta/meta-version.h
|
||||||
|
src/libmutter-*.pc
|
||||||
doc/reference/*.args
|
doc/reference/*.args
|
||||||
doc/reference/*.bak
|
doc/reference/*.bak
|
||||||
doc/reference/*.hierarchy
|
doc/reference/*.hierarchy
|
||||||
@@ -101,3 +130,4 @@ ltsugar.m4
|
|||||||
ltversion.m4
|
ltversion.m4
|
||||||
lt~obsolete.m4
|
lt~obsolete.m4
|
||||||
.dirstamp
|
.dirstamp
|
||||||
|
**/tags.*
|
||||||
|
664
NEWS
664
NEWS
@@ -1,3 +1,667 @@
|
|||||||
|
3.30.0
|
||||||
|
======
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Fran Dieguez [gl], Balázs Meskó [hu], Rūdolfs Mazurs [lv],
|
||||||
|
Trần Ngọc Quân [vi], Ask Hjorth Larsen [da], gogo [hr]
|
||||||
|
|
||||||
|
3.29.92
|
||||||
|
=======
|
||||||
|
* Avoid crash when a cursor is not found [Sebastian; #254]
|
||||||
|
* Fix screen rotation regression [Jonas; #216]
|
||||||
|
* Handle requests to unmanaged windows gracefully [Jonas; #240]
|
||||||
|
* Move popups together with their parent [Jonas; #274]
|
||||||
|
* Fix non-lowercase letters on virtual key devices [Carlos; gnome-shell#135]
|
||||||
|
* Misc. bug fixes [Iain, Jonas; #223, #192, #279]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Carlos Garnacho, Sebastian Keller, Iain Lane, Robert Mader,
|
||||||
|
Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Gwan-gyeong Mun [ko], Kukuh Syafaat [id], Milo Casagrande [it],
|
||||||
|
Anders Jonsson [sv], Rafael Fontenelle [pt_BR], Marek Cernocky [cs]
|
||||||
|
|
||||||
|
3.29.91
|
||||||
|
=======
|
||||||
|
* Various crash fixes [Olivier, Iain; #255, #223]
|
||||||
|
* Fix lock up with some DRI drivers [Alex; #127]
|
||||||
|
* Send correct button codes from virtual evdev devices [Jonas; !190]
|
||||||
|
* Improve grab-device clock updates on X11 [Jeff; !174]
|
||||||
|
* Fix popups closing immediately on key down [Jonas; !180]
|
||||||
|
* Prevent clients from modifying the shared keymap [Jonas; #784206]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Andrea Azzarone, Piotr Drąg, Olivier Fourdan, Carlos Garnacho,
|
||||||
|
Jan Grulich, Iain Lane, Alex Villacís Lasso, Jeff Smith, Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Matej Urbančič [sl], Mario Blättermann [de], Piotr Drąg [pl],
|
||||||
|
Aurimas Černius [lt], Yi-Jyun Pan [zh_TW], Emin Tufan Çetin [tr],
|
||||||
|
Fabio Tomat [fur], Bruce Cowan [en_GB]
|
||||||
|
|
||||||
|
3.29.90
|
||||||
|
=======
|
||||||
|
* Various crash fixes [Olivier, Jonas, Florian; #189, #70, #194, #15, #130]
|
||||||
|
* Don't expose resolutions that are below the minimum [Andrea; #793223]
|
||||||
|
* Remove support for preference overrides [Florian; #786496]
|
||||||
|
* Misc. bug fixes and cleanups [Daniel, Jonas, Florian; #131, #245, !176]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Florian Müllner, Kevin Tamool,
|
||||||
|
Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Mustieles [es], Claude Paroz [fr]
|
||||||
|
|
||||||
|
3.29.4
|
||||||
|
======
|
||||||
|
* Fix crash with parent-less modal dialogs [Olivier; #174]
|
||||||
|
* Preserve paint volumes where possible to optimize CPU usage [Carlos; #782344]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Iain Lane, Bastien Nocera
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Șerbănescu [ro]
|
||||||
|
|
||||||
|
3.29.3
|
||||||
|
======
|
||||||
|
* Fix Korean Hangul support on wayland [Changwoo; #152]
|
||||||
|
* Improve support for proprietary Nvidia driver [Jonas; #790316]
|
||||||
|
* Only upload HW cursor sprite to the GPU that will display them [Jonas; #77]
|
||||||
|
* Improve EGLstream support [Miguel; #2, #782575]
|
||||||
|
* Remove MetaScreen to prepare for non-mandatary X11 dependency
|
||||||
|
[Armin, Jonas; #759538]
|
||||||
|
* Misc. bug fixes [Olivier, Jonas, Sam; #160, !130, #786929, #788834]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Armin Krezović, Corentin Noël,
|
||||||
|
Changwoo Ryu, Sam Spilsbury, Daniel Stone, Marco Trevisan (Treviño),
|
||||||
|
Miguel A. Vico, Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Yi-Jyun Pan [zh_TW], Jordi Mas [ca], Daniel Șerbănescu [ro], Fabio Tomat [fur]
|
||||||
|
|
||||||
|
3.29.2
|
||||||
|
======
|
||||||
|
* Fix size change animations on wayland [Georges; #780292]
|
||||||
|
* Handle touch events on server-side titlebars [Carlos; #770185]
|
||||||
|
* Misc. bug fixes [Florian, Olivier, Jonas, Georges; #134, #124, !96, #138,
|
||||||
|
!102, #781471, #150]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Florian Müllner,
|
||||||
|
Georges Basile Stavracas Neto, Marco Trevisan (Treviño), Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Șerbănescu [ro], Marcos Lans [gl], Dz Chen [zh_CN]
|
||||||
|
|
||||||
|
3.29.1
|
||||||
|
======
|
||||||
|
* Fix various input-method regressions [Carlos, Olivier; #65, #74, #66, #112]
|
||||||
|
* Fix wayland build on FreeBSD [Ting-Wei; #792280, #792717]
|
||||||
|
* Fix swapped colors in screenshots (again) [Carlos; #72]
|
||||||
|
* Allow building with elogind [Rasmus; !46]
|
||||||
|
* Consider display rotation for cursor [Olivier; #85]
|
||||||
|
* Fall back to non-modifier GBM surfaces [Daniel; #84]
|
||||||
|
* Take inhibitors into account for monitoring idle [Bastien; #705942]
|
||||||
|
* Misc. bug fixes [handsome-feng, Olivier, Mario, Jonas; !45, #83, #104,
|
||||||
|
gnome-shell#157, #130, #21]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, handsome-feng, Yussuf Khalil,
|
||||||
|
Ting-Wei Lan, Aleksandr Mezin, Alberts Muktupāvels,
|
||||||
|
Georges Basile Stavracas Neto, Bastien Nocera, Benjamin Otte,
|
||||||
|
Mario Sanchez Prada, Daniel Stone, Ray Strode, Rasmus Thomsen,
|
||||||
|
Marco Trevisan (Treviño), Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Emin Tufan Çetin [tr], Dušan Kazik [sk], Matej Urbančič [sl]
|
||||||
|
|
||||||
|
3.28.0
|
||||||
|
======
|
||||||
|
* Fix xdg-foreign regression [Carlos; #63]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Carlos Garnacho, Georges Basile Stavracas Neto
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Marek Cernocky [cs], Ask Hjorth Larsen [da], Chao-Hsiung Liao [zh_TW],
|
||||||
|
Anders Jonsson [sv], Mart Raudsepp [et]
|
||||||
|
|
||||||
|
3.27.92
|
||||||
|
=======
|
||||||
|
* Fix use of modifiers with multi-GPU systems [Louis-Francis; #18]
|
||||||
|
* Add xdg-shell stable support [Jonas; #791938]
|
||||||
|
* Fix scaling of icons in titlebar buttons [Egmont; #23]
|
||||||
|
* Implement missing wacom functionality on X11 [Carlos; #48]
|
||||||
|
* Force 8-bit RGB config [Jonas; #2]
|
||||||
|
* Misc. bug fixes [Jonas, Olivier, Robert; #6, #27, #792203]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Egmont Koblinger, Robert Mader,
|
||||||
|
Bastien Nocera, Louis-Francis Ratté-Boulianne
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Mustieles [es], Марко Костић [sr], Милош Поповић [sr@latin],
|
||||||
|
Fran Dieguez [gl], Balázs Úr [hu], Gwan-gyeong Mun [ko], Rūdolfs Mazurs [lv],
|
||||||
|
Milo Casagrande [it], Mario Blättermann [de], GNOME Translation Robot [gd,
|
||||||
|
nl], Claude Paroz [fr], Aurimas Černius [lt]
|
||||||
|
|
||||||
|
3.27.91
|
||||||
|
=======
|
||||||
|
* Fix handling of trackball settings on wayland [Carlos; #787804]
|
||||||
|
* Apply font settings on wayland [Daniel; #645433]
|
||||||
|
* Fix keybindings getting mixed up with some layouts [Jonas; #789300]
|
||||||
|
* Fix bluetooth mouse cursor disappearing after idle [Benoit; #761067]
|
||||||
|
* Support platforms that export EGL_KHR_platform_gbm [memeka; #780668]
|
||||||
|
* Add keyboard accessibility support on wayland [Olivier; #788564]
|
||||||
|
* Fix missing cursor when using screen magnifier [Carlos; #754806]
|
||||||
|
* Fix external monitor shutting off on wayland when lid closes [Jonas; #788915]
|
||||||
|
* Add xdg-output support [Olivier; #787363]
|
||||||
|
* Add Xwayland grab keyboard support [Olivier; #783342]
|
||||||
|
* Allow shortcut inhibition of the super key [Olivier; #790627]
|
||||||
|
* Take "panel orientation" drm_connector property into account [Hans; #782294]
|
||||||
|
* Fix focus window ending up below other windows on wayland [Olivier; #780820]
|
||||||
|
* Fix maximized windows restoring to a tiny size on wayland [Olivier; #783901]
|
||||||
|
* Fix tap-and-drag setting on X11 [Jonas; #775755]
|
||||||
|
* Fix handling of single-touch devices on wayland [Carlos; #792005]
|
||||||
|
* Support tiled/compressed buffers [Daniel; #785779]
|
||||||
|
* Port screencast support to pipewire 0.1.8 [Jonas; #792854]
|
||||||
|
* Add support for third stylus button on newer tablets [Jason; #790033]
|
||||||
|
* Fix background corruption regression on nvidia [Jonas; #739178]
|
||||||
|
* Misc. bug fixes [Jonas, Rui, Michael, Marco, Carlos, Olivier, Philip, Piotr,
|
||||||
|
Ting-Wei, Daniel, Jeremy, Hans, Florian, Ray, Jeff, George, Gwan-gyeong;
|
||||||
|
#789153, #788493, #784314, #789227, #789223, #789277, #782344, #789552,
|
||||||
|
#789553, #788695, #789984, #788764, #789386, #784545, #790336, #790358,
|
||||||
|
#791022, #791006, #789070, #772218, #791383, #791809, #776220, #791916,
|
||||||
|
#792281, #790309, #791371, #792527, #792599, #788834, #792765, #792062,
|
||||||
|
#645460, #792853, !2, #792818, #8, #12, #789501, #10, #789961, #13, !15, #1,
|
||||||
|
#26, #28, #35, #36, #38]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Jeremy Bicha, Michael Catanzaro, Piotr Drąg, Olivier Fourdan,
|
||||||
|
Carlos Garnacho, Jason Gerecke, Hans de Goede, Benoit Gschwind,
|
||||||
|
Peter Hutterer, George Kiagiadakis, Ting-Wei Lan, Rui Matos, memeka,
|
||||||
|
Florian Müllner, Gwan-gyeong Mun, Jeremy Nickurak, Marc-Antoine Perennou,
|
||||||
|
Jeff Smith, Daniel Stone, Ray Strode, Marco Trevisan (Treviño),
|
||||||
|
Daniel van Vugt, Philip Withnall
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Khaled Hosny [ar], Kjartan Maraas [nb], Piotr Drąg [pl],
|
||||||
|
Rafael Fontenelle [pt_BR], Christian Kirbach [de], Anders Jonsson [sv],
|
||||||
|
Charles Monzat [fr], Marek Cernocky [cs], Muhammet Kara [tr],
|
||||||
|
Milo Casagrande [it], Pawan Chitrakar [ne], Yosef Or Boczko [he],
|
||||||
|
Kukuh Syafaat [id], Daniel Mustieles [es], Fabio Tomat [fur],
|
||||||
|
Kristjan SCHMIDT [eo], Balázs Úr [hu], Andika Triwidada [id],
|
||||||
|
Fran Dieguez [gl], gogo [hr]
|
||||||
|
|
||||||
|
3.27.1
|
||||||
|
======
|
||||||
|
* Work with clients that require older linux_dmabuf protocol [Daniel; #788558]
|
||||||
|
* Support hybrid GPU systems [Jonas; #785381]
|
||||||
|
* Prevent crash when closing maximized windows [Jonni; #788666]
|
||||||
|
* Use the correct monitor for HiDPI scaling of shell chrome [Jonas; #788820]
|
||||||
|
* Fix unredirection of fullscreen windows [Rui, Jonas; #788493]
|
||||||
|
* Fix list of supported monitor scales on X11 [Jonas; #788901]
|
||||||
|
* Misc. bug fixes [Florian, Jonas, Marco; #788572, #788569, #788607, #788860,
|
||||||
|
#788921]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Daniel Stone,
|
||||||
|
Marco Trevisan, Jonni Westphalen
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Xavi Ivars [ca@valencia]
|
||||||
|
|
||||||
|
3.26.1
|
||||||
|
======
|
||||||
|
* Fix crash when respawning shortcut inhibitor dialog [Olivier; #787568]
|
||||||
|
* Fix crash during monitor configuration migration [Carlos, Jonas; #787668]
|
||||||
|
* Fix multihead regressions in X11 session [Jonas; #787477]
|
||||||
|
* Fix screen rotation regressions [Hans; #787836]
|
||||||
|
* Fix keybindings not being resolved with non-latin layouts [Jonas; #787016]
|
||||||
|
* Support snap packages for sandboxed app IDs [Marco; #788217]
|
||||||
|
* Fix crash when reconnecting tablet device [Jason; #787649]
|
||||||
|
* Support running headless [Jonas; #730551, #787637]
|
||||||
|
* Support _NET_RESTACK_WINDOW and ConfigureRequest siblings [Vasilis; #786365]
|
||||||
|
* Fix monitor layout not being remembered across sessions [Jonas; #787629]
|
||||||
|
* Make sure to export _NET_NUMBER_OF_DESKTOPS [Florian; #760651]
|
||||||
|
* Allow resizing of tiled windows [Georges, Florian; #645153]
|
||||||
|
* Export tiling information to clients [Georges; #751857]
|
||||||
|
* Misc. bug fixes [Jonas, Florian, Jeremy, Rico; #787570, #787715, #787953,
|
||||||
|
#788049, #788199, #788292, #788197]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Andrea Azzarone, Georges Basile Stavracas Neto, Hans de Goede,
|
||||||
|
Olivier Fourdan, Carlos Garnacho, Jason Gerecke, Vasilis Liaskovitis,
|
||||||
|
Rui Matos, Florian Müllner, Jeremy Soller, Marco Trevisan, Rico Tzschichholz
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Matej Urbančič [sl], gogo [hr], Cheng-Chia Tseng [zh_TW]
|
||||||
|
|
||||||
|
3.26.0
|
||||||
|
======
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Trần Ngọc Quân [vi], Inaki Larranaga Murgoitio [eu], Jordi Mas [ca],
|
||||||
|
Anders Jonsson [sv], Alexander Shopov [bg], Ask Hjorth Larsen [da],
|
||||||
|
Jean-Baptiste Holcroft [fr], A S Alam [pa]
|
||||||
|
|
||||||
|
3.25.92
|
||||||
|
=======
|
||||||
|
* Add screencast and remote desktop support [Jonas; #784199]
|
||||||
|
* Support running with no attached monitors [Jonas; #730551]
|
||||||
|
* Add a vertical gradient effect to background actor [Alessandro; #786618]
|
||||||
|
* Misc. bug fixes [Mario, Daniel, Piotr, Jonas, Bastien; #786619, #786677,
|
||||||
|
#772218, #786918, #760670]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Alessandro Bono, Piotr Drąg, Bastien Nocera,
|
||||||
|
Mario Sanchez Prada, Daniel Stone
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Marek Cernocky [cs], Aurimas Černius [lt], Piotr Drąg [pl],
|
||||||
|
Fran Dieguez [gl], gogo [hr], Dušan Kazik [sk], Milo Casagrande [it],
|
||||||
|
Jordi Mas [ca], Cheng-Chia Tseng [zh_TW], Марко Костић [sr],
|
||||||
|
Милош Поповић [sr@latin], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
|
||||||
|
Ask Hjorth Larsen [da], Piotr Drąg [it, lt], Jiri Grönroos [fi],
|
||||||
|
Emin Tufan Çetin [tr], Wolfgang Stöggl [de], Kukuh Syafaat [id],
|
||||||
|
Yuras Shumovich [be], Changwoo Ryu [ko], Alexander Shopov [bg],
|
||||||
|
Rafael Fontenelle [pt_BR], Balázs Úr [hu]
|
||||||
|
|
||||||
|
3.25.91
|
||||||
|
=======
|
||||||
|
* Reduce memory use of suspended instances [Jonas; #786299]
|
||||||
|
* Make supported scales determination saner [Rui; #786474]
|
||||||
|
* Fix crash on inhibit-shortcuts dialog reponse [Jonas; #786385]
|
||||||
|
* Support libinput's tag-and-drag setting [freeroot; #775755]
|
||||||
|
* Avoid overlapping keybindings with multiple layouts [Jonas; #786408]
|
||||||
|
* Fix non-transformed cursor on rotated monitors [Jonas; #786023]
|
||||||
|
* Avoid unnecessary work during background painting [Alessandro; #783512]
|
||||||
|
* Misc. bug fixes [Alberts, Jonas, Mario; #691611, #786300, #777732, #786568]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
freeroot, Jonas Ådahl, Alessandro Bono, Carlos Garnacho, Rui Matos,
|
||||||
|
Alberts Muktupāvels, Mario Sanchez Prada
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Muhammet Kara [tr], Claude Paroz [fr], Мирослав Николић [sr, sr@latin],
|
||||||
|
Pawan Chitrakar [ne], Kukuh Syafaat [id]
|
||||||
|
|
||||||
|
3.25.90
|
||||||
|
=======
|
||||||
|
* Add zwp_linux_dmabuf_v1 support [Daniel; #785262]
|
||||||
|
* Add (x)wayland shortcut inhibitor support [Olivier; #783342]
|
||||||
|
* Misc. bug fixes [Daniel, Carlos, Cosimo; #785263, #785347, #767805]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Cosimo Cecchi, Olivier Fourdan, Carlos Garnacho, Daniel Stone
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Fabio Tomat [fur], Kukuh Syafaat [id], Aurimas Černius [lt],
|
||||||
|
Daniel Mustieles [es], Baurzhan Muftakhidinov [kk], Jordi Mas [ca],
|
||||||
|
Matej Urbančič [sl], Marek Cernocky [cs], gogo [hr], Fran Dieguez [gl],
|
||||||
|
Balázs Meskó [hu]
|
||||||
|
|
||||||
|
3.25.4
|
||||||
|
======
|
||||||
|
* Do not throttle motion events on tablet tools [Carlos; #783535]
|
||||||
|
* Handle left-handed mode on pen/eraser devices [Carlos; #782027]
|
||||||
|
* Add wl_surface.damage_buffer() support [Jonas; #784080]
|
||||||
|
* Fix crash when moving across on-adjacent monitors [Jonas; #783630]
|
||||||
|
* Fix window moving/resizing via tablet tools [Jason; #777333]
|
||||||
|
* Support fractional monitor scaling [Jonas, Marco; #765011]
|
||||||
|
* Keep override-redirect windows stacked on top [Rui; #780485]
|
||||||
|
* Implement tablet rings/strips configuration [Carlos; #782033]
|
||||||
|
* Support tablet wheel events on wayland [Jason; #783716]
|
||||||
|
* Move g-s-d xrandr functionality into mutter [Rui; #781906]
|
||||||
|
* Misc. bug fixes [Florian, Jason, Miguel, Carlos, Jonas; #783502, #784009,
|
||||||
|
#784223, #784272, #784402, #784881, #762083, #784867, #781723]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Miguel A. Vico, Emmanuele Bassi, Carlos Garnacho, Jason Gerecke,
|
||||||
|
Rui Matos, Florian Müllner, Marco Trevisan (Treviño)
|
||||||
|
|
||||||
|
3.25.3
|
||||||
|
======
|
||||||
|
* Ignore hotplug-mode-update value on startup [Marco; #783073]
|
||||||
|
* Implement configurable monitor scales on X11 [Jonas; #777732]
|
||||||
|
* Fix handling of tiled monitors [Jonas; #781723]
|
||||||
|
* Handle multiple keycodes for keysym [Christian; #781223]
|
||||||
|
* Consider subsurfaces when grabbing [mindtree; #781811]
|
||||||
|
* Fix logic for HiPDPI scaling of TV outputs [Christian; #777347]
|
||||||
|
* Fix handling of left-handed mode on pen/eraser devices [Carlos; #782027]
|
||||||
|
* Fix output cycling in non-display-attached tablets [Carlos; #782032]
|
||||||
|
* Fix wacom cursor offset on wayland [Jason; #784009]
|
||||||
|
* Handle EXIF orientation of backgrounds [Silvère; #783125]
|
||||||
|
* Misc. bug fixes [Piotr, Tim, Bastien, Jonas, Florian, Benoit, Carlos; #772218,
|
||||||
|
#783161, #780407, #783113, #783293, #783505, #781703]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
mitchmindtree, Jonas Ådahl, Ikey Doherty, Piotr Drąg, Carlos Garnacho,
|
||||||
|
Jason Gerecke, Benoit Gschwind, Christian Kellner, Silvère Latchurié,
|
||||||
|
Tim Lunn, Florian Müllner, Bastien Nocera, Marco Trevisan (Treviño)
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Fabio Tomat [fur], Kukuh Syafaat [id], Khaled Hosny [ar],
|
||||||
|
Daniel Mustieles [es]
|
||||||
|
|
||||||
|
3.25.2
|
||||||
|
======
|
||||||
|
* Fix frame updates on hide-titlebar-when-maximized changes [Florian; #781862]
|
||||||
|
* Fix accessible screen coordinates on X11 [Florian; #781902]
|
||||||
|
* Use less CPU when rendering fast-updating windows [Carlos, Emmanuele; #782344]
|
||||||
|
* Compute geometry of clients that don't set one explicitly [Olivier; #782213]
|
||||||
|
* Fix copy+paste of UTF8 strings between X11 and wayland [Carlos; #782472]
|
||||||
|
* Fix non-wayland builds [Chris; #780533]
|
||||||
|
* Add plugin vfunc to implement a custom force-quit dialog [Carlos; #711619]
|
||||||
|
* Fix swapped red and blue channels in CoglTexture data [Carlos; #779234
|
||||||
|
* Fix build where libtool's link_all_deplibs defaults to 'no' [Marco; #782821]
|
||||||
|
* Fix glitches when opening a window maximized [Olivier; #781353, #782183]
|
||||||
|
* Fix wrong cursor after window underneath the pointer changed [Carlos; #755164]
|
||||||
|
* Implement support for disable-while-typing option [Evan; #764852]
|
||||||
|
* Emit size-change signal when tiling [Alessandro; #782968]
|
||||||
|
* Misc. bug fixes [Nigel, Matthias, Jonas; #759085, #780215, #782156, #782152]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Emmanuele Bassi, Alessandro Bono, Olivier Fourdan,
|
||||||
|
Carlos Garnacho, Matthias Liertzer, Florian Müllner, Nigel Taylor,
|
||||||
|
Marco Trevisan (Treviño), Chris Vine, Evan Welsh
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Fabio Tomat [fur], Jordi Mas [ca], Mario Blättermann [de],
|
||||||
|
Emin Tufan Çetin [tr], Balázs Úr [hu]
|
||||||
|
|
||||||
|
3.25.1
|
||||||
|
======
|
||||||
|
* Always sync window geometry on state changes [Jonas; #780292]
|
||||||
|
* Use EGL instead of GLX when drawing using GLES [Jonas; #771636]
|
||||||
|
* Fix HiDPI detection on vertical monitor layouts [Carlos; #777687]
|
||||||
|
* Get double-click timing from desktop mouse settings [Armin; #771576]
|
||||||
|
* Scale relative motion deltas with monitor scale [Jonas, Carlos; #778119]
|
||||||
|
* Use texture fallback when setting hardware cursor fails [Jente; #770020]
|
||||||
|
* Fix lock-up when using additional theme variants [Shantanu; #780254]
|
||||||
|
* Rework low-level monitor configuration [Jonas; #777732]
|
||||||
|
* Fix building with GLES2 instead of GL [Mario; #781398]
|
||||||
|
* Misc. bug fixes [Jonas, Piotr, Philip; #780304, #772218, #781242, #781391]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Philip Chimento, Piotr Drąg, Carlos Garnacho, Shantanu Goel,
|
||||||
|
Jente Hidskes, Armin Krezović, Rui Matos, Florian Müllner, Mario Sanchez Prada
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Yuras Shumovich [be], Yosef Or Boczko [he], Tom Tryfonidis [el],
|
||||||
|
Fabio Tomat [fur], Kukuh Syafaat [id]
|
||||||
|
|
||||||
|
3.24.0
|
||||||
|
======
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Yuri Myasoedov [ru], Rūdolfs Mazurs [lv], Jordi Mas [ca]
|
||||||
|
|
||||||
|
3.23.92
|
||||||
|
=======
|
||||||
|
* Properly handle EGLOutput acquire errors [Jonas, Miguel; #779112]
|
||||||
|
* Fix crash when a window closes during Alt+Tab [Rui; #779483]
|
||||||
|
* Implement DnD handling code in wayland [Hyungwon; #765003]
|
||||||
|
* Fix fallout from pixel conversion optimization in 3.23.91 [Carlos; #779234]
|
||||||
|
* Fix mouse input stopping to work in applications [Carlos; #763246]
|
||||||
|
* Fix DnD between QT5 and GTK3 applications on wayland [Carlos; #779757]
|
||||||
|
* Make EDID reading less fragile [Jonas; #779837]
|
||||||
|
* Add support for tablet grouping [Carlos; #779986]
|
||||||
|
* Misc. bug fixes and cleanups [Rui, Jonas; #779436, #779001, #779745]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Miguel A. Vico, Olivier Fourdan, Carlos Garnacho,
|
||||||
|
Hyungwon Hwang, Rui Matos
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Chao-Hsiung Liao [zh_TW], Sveinn í Felli [is], Ask Hjorth Larsen [da],
|
||||||
|
Changwoo Ryu [ko], Aurimas Černius [lt], GNOME Translation Robot [gd],
|
||||||
|
Marek Černocký [cs], Fran Dieguez [gl], Dušan Kazik [sk]
|
||||||
|
|
||||||
|
3.23.91
|
||||||
|
=======
|
||||||
|
* Give libinput read-only access to /sys [Carlos; #778472]
|
||||||
|
* Allow edge-scrolling without 2-finger-scroll capable devices [Rui; #778554]
|
||||||
|
* Fullscreen windows on the requested monitor on wayland [Rui; #772525]
|
||||||
|
* Implement threaded swap_event fallback for NVIDIA driver [Owen; #779039]
|
||||||
|
* Avoid pixel conversions when storing textures from cairo [Carlos; #779234]
|
||||||
|
* Misc. bug fixes [Piotr, Rui, Florian; #772218, #776919, #778831, #642652]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Piotr Drąg, Carlos Garnacho, Rui Matos, Florian Müllner, Owen W. Taylor
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Inaki Larranaga Murgoitio [eu], Daniel Mustieles [es], Claude Paroz [fr],
|
||||||
|
Mario Blättermann [de], Kjartan Maraas [nb], Piotr Drąg [pl],
|
||||||
|
Andika Triwidada [id], Anders Jonsson [sv], Milo Casagrande [it],
|
||||||
|
Fabio Tomat [fur], Rafael Fontenelle [pt_BR],
|
||||||
|
Мирослав Николић [sr, sr@latin], Balázs Meskó [hu], Chao-Hsiung Liao [zh_TW]
|
||||||
|
|
||||||
|
3.23.90
|
||||||
|
=======
|
||||||
|
* Fix window menu placement with HiDPI [Jonas; #776055]
|
||||||
|
* Improve EGLStream support [Jonas; #773629]
|
||||||
|
* Start moving low-level monitor configuration into mutter [Jonas; #777732]
|
||||||
|
* Fix erroneous key event repeats [Rui; #774989]
|
||||||
|
* Don't hardcode seat ID in ClutterDeviceManager [Carlos; #778092]
|
||||||
|
* Fix "ghost" cursors in multi-monitor setups [Jonas; #771056]
|
||||||
|
* Use eglGetPlatformDisplay [Adam; #772422]
|
||||||
|
* Fix erratic raise_or_lower behavior [Jose; #705200]
|
||||||
|
* Fix coordinate mapping of absolute devices [Carlos; #774115]
|
||||||
|
* Show OSD on tablet mode switches [Carlos; #771098]
|
||||||
|
* Make mutter libs parallel installable [Jonas; #777317]
|
||||||
|
* Only apply keymap when not running nested [Jonas; #777800]
|
||||||
|
* Set right scale for tablet tool cursors on HiDPI [Carlos; #778474]
|
||||||
|
* Adjust server-side shadows to match Adwaita [Juraj; #744667]
|
||||||
|
* Misc. bug fixes [Jonas, Bastien, Carlos, Peter, Lionel, Jeremy, Florian;
|
||||||
|
#774891, #777389, #777691, #778262, #776543, #778684, #778699, #744667]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Jeremy Bicha, Piotr Drąg, Juraj Fiala, Carlos Garnacho,
|
||||||
|
Peter Hutterer, Adam Jackson, Lionel Landwerlin, Jose Marino, Rui Matos,
|
||||||
|
Florian Müllner, Bastien Nocera
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Kjartan Maraas [nb], Mandy Wang [zh_CN], Marek Černocký [cs],
|
||||||
|
Anders Jonsson [sv], Dušan Kazik [sk], Piotr Drąg [pl], Matej Urbančič [sl]
|
||||||
|
|
||||||
|
3.23.3
|
||||||
|
======
|
||||||
|
* Fix frequent freezes in multihead setups on wayland [Rui; #774557]
|
||||||
|
* Preserve root window mask on XSelectionRequest [Olivier; #776128]
|
||||||
|
* Misc. bug fixes [Carlos, Florian, Rui, Olivier; #775478, #774891, #775986,
|
||||||
|
#776036]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
|
||||||
|
|
||||||
|
3.23.2
|
||||||
|
======
|
||||||
|
* Stack docks below other windows on fullscreen monitors [Rui; #772937]
|
||||||
|
* Fix popup grabs blocking screen lock on wayland [Rui; #771235]
|
||||||
|
* Handle touchpad pinch gestures with more than two fingers [Carlos; #765937]
|
||||||
|
* Implement drawing tablet support on X11 [Carlos; #773779]
|
||||||
|
* Fix some Wine games starting minimized [Carlos; #774333]
|
||||||
|
* Fix switching between two finger- and edge scrolling on wayland [Rui; #771744]
|
||||||
|
* Implement support for EGLStream/EGLDevice [Jonas; #773629]
|
||||||
|
* Add size_changed vfunc to handle async client size changes [Rui; #770345]
|
||||||
|
* Change focus window on clicks with any modifiers [Rui; #746642]
|
||||||
|
* Misc. bug fixes and cleanups [Carlos, Daniel, Jonas, Rui; #771067, #774330, #774613,
|
||||||
|
#771297, #774135, #774827, #774923]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Daniel Stone
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Kjartan Maraas [nb]
|
||||||
|
|
||||||
|
3.23.1
|
||||||
|
======
|
||||||
|
* Fix handling of Escape shortcut in force-quit dialog [Landry; #737109]
|
||||||
|
* Improve pointer constraints support [Jonas; #771859]
|
||||||
|
* Really fix framebuffer capture origin offset [Rui; #771502]
|
||||||
|
* Fix session going into idle mode immediately on startup [Rui; #772839]
|
||||||
|
* Fix mirror mode with stage views [Rui; #773115]
|
||||||
|
* Fall back to X with connectors spread across multiple GPUs [Ray; #771442]
|
||||||
|
* Fix various crashes on wayland [Jonas, Carlos; #771646, #771858, #772929]
|
||||||
|
* Fix various placement issues on wayland [Olivier, Jonas, Sjoerd; #772729,
|
||||||
|
#768039, #771841, #771841, #773141]
|
||||||
|
* Misc. bug fixes [Rui, Jonas, Olivier; #771019, #773116, #772914, #773210]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Landry MINOZA,
|
||||||
|
Sjoerd Simons, Ray Strode
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Theppitak Karoonboonyanan [th], Kjartan Maraas [nb], Hannie Dumoleyn [nl],
|
||||||
|
liushuyu [zh_CN]
|
||||||
|
|
||||||
|
3.22.1
|
||||||
|
======
|
||||||
|
* Fix feedback loop between StClipboard and X11 bridge [Carlos; #760745]
|
||||||
|
* Fall back gracefully if DRM plane rotation fails [Carlos; #772512]
|
||||||
|
* Approximate native monitor backend behavior to X [Rui; #772176]
|
||||||
|
* Fix crash on VT switch on wayland [Jonas; #771646]
|
||||||
|
* Expose Flatpak ID for application matching [Florian; #772613, #772614]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Olav Vitters
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Inaki Larranaga Murgoitio [eu], Milo Casagrande [it]
|
||||||
|
|
||||||
|
3.22.0
|
||||||
|
======
|
||||||
|
* Fix wayland crashes [Jonas; #771305, #771345, #770940, #771495]
|
||||||
|
* Fix display rotation on wayland [Jonas; #770672]
|
||||||
|
* Fix framebuffer capture origin offset [Rui; #771502]
|
||||||
|
* Misc. bug fixes [Jonas, Florian, Carlos; #770937, #771536, #771628, #771549]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Ask Hjorth Larsen [da], Charles Monzat [fr], Stas Solovey [ru],
|
||||||
|
Tom Tryfonidis [el], David King [en_GB]
|
||||||
|
|
||||||
|
3.21.92
|
||||||
|
=======
|
||||||
|
* Fix absolute pointer motion events on wayland [Jonas; #770557]
|
||||||
|
* Default to using stage views [Jonas; #770366]
|
||||||
|
* Fix animated cursors on wayland [Rui; #749913]
|
||||||
|
* Fix various crashes on wayland [Jonas; #757568, #770727, #770992]
|
||||||
|
* Fix screen capture for stage views not at (0, 0) [Jonas; #770127]
|
||||||
|
* Compress motion events instead of discarding them [Jonas; #771049]
|
||||||
|
* Fix XWayland pointer warp emulation [Jonas; #771050]
|
||||||
|
* Add common monitor modes in KMS backend [Rui; #744544]
|
||||||
|
* Temporarily use g-s-d schemas for tablet configuration [Carlos; #771315]
|
||||||
|
* Misc. bug fixes [Jonas, Carlos; #770402, #770647, #770991, #770994, #770929]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Changwoo Ryu [ko], Baurzhan Muftakhidinov [kk], Anders Jonsson [sv],
|
||||||
|
Tiago Santos [pt], Rafael Fontenelle [pt_BR], Mario Blättermann [de],
|
||||||
|
Alexander Shopov [bg], Rūdolfs Mazurs [lv], Fran Dieguez [gl],
|
||||||
|
Trần Ngọc Quân [vi], Piotr Drąg [pl], Мирослав Николић [sr, sr@latin]
|
||||||
|
|
||||||
|
3.21.91
|
||||||
|
=======
|
||||||
|
* Add support for xdg-foreign protocol [Jonas; #769786]
|
||||||
|
* Support monitor rotation on wayland [Carlos; #745079]
|
||||||
|
* Port xdg-shell implementation to unstable v6 [Jonas; #769936]
|
||||||
|
* Handle unsupported buffer sizes more gracefully [Olivier; #770387]
|
||||||
|
* Use the same output naming logic as the X server on wayland [Rui; #770338]
|
||||||
|
* Fix replies in gnome-shell's chat notifications on wayland [Florian; #758167]
|
||||||
|
* Misc. bug fixes and cleanups [Bastien, Sjoerd, Jonas; #769276, #769636,
|
||||||
|
#770131, #770324, #769731]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner,
|
||||||
|
Bastien Nocera, Sjoerd Simons
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Piotr Drąg [pl], Mario Blättermann [de], Andika Triwidada [id],
|
||||||
|
Enrico Nicoletto [pt_BR], Мирослав Николић [sr, sr@latin]
|
||||||
|
|
||||||
|
3.21.90
|
||||||
|
=======
|
||||||
|
* Consider XDG_SESSION_TYPE when determining session type [Jouke; #759388]
|
||||||
|
* Re-add support for edge scrolling on some touchpads [Bastien; #768245]
|
||||||
|
* Support mouse and trackball acceleration profile [Jonas; #769179]
|
||||||
|
* Draw monitor contentn to individual framebuffer [Jonas; #768976]
|
||||||
|
* Support virtual input devices [Jonas, Carlos; #765009]
|
||||||
|
* Set correct output scale on hotplug [Jonas; #769505]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Jonas, Thomas, Bastien, Carlos;
|
||||||
|
#769014, #769024, #769054, #769070, #769036, #769305, #769578, #769800,
|
||||||
|
#769073]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Carlos Garnacho, Thomas Hindoe Paaboel Andersen, Simon McVittie,
|
||||||
|
Alberts Muktupāvels, Florian Müllner, Bastien Nocera, Jouke Witteveen
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Daniel Mustieles [es], Aurimas Černius [lt], Dušan Kazik [sk],
|
||||||
|
Fabio Tomat [fur], Balázs Úr [hu], Yosef Or Boczko [he], Marek Černocký [cs],
|
||||||
|
Matej Urbančič [sl]
|
||||||
|
|
||||||
|
3.21.4
|
||||||
|
======
|
||||||
|
* Fix missing frame border around GTK+ dialogs [Florian; #745060]
|
||||||
|
* Improve X11 <-> wayland copy and paste interaction [Carlos; #768007]
|
||||||
|
* Add support for NV_robustness_video_memory_purge extension [Rui; #739178]
|
||||||
|
* Fix restoring the old focused window on restart [Owen; #766243]
|
||||||
|
* Fix fullscreen windows on other monitors stealing focus after closing
|
||||||
|
a window [Rui; #768221]
|
||||||
|
* Draw monitor content to individual framebuffer [Jonas; #768976]
|
||||||
|
* Provide screen capture API [Jonas; #768978]
|
||||||
|
* Misc. bug fixes and cleanups [Rui, Owen, Luca, Olivier, Jonas, Carlos;
|
||||||
|
#767969, #768243, #762407, #767997, #768039, #768977, #768977]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Luca Bruno, Olivier Fourdan, Carlos Garnacho, Rui Matos,
|
||||||
|
Florian Müllner, Owen W. Taylor
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Andika Triwidada [id]
|
||||||
|
|
||||||
|
3.21.3
|
||||||
|
======
|
||||||
|
* Don't create invalid UTF-8 window description strings [Rui; #765535]
|
||||||
|
* Convert window titles and wm_class to UTF-8 [Rui; #752788]
|
||||||
|
* Communicate tiled state to GTK+ on wayland [Olivier; #766860]
|
||||||
|
* Use kill() to force-quit unresponsive wayland clients [Olivier; #767464]
|
||||||
|
* Fix window position when unmaximizing via DND on wayland [Olivier; #764180]
|
||||||
|
* Avoid full window redraws when using extended frame sync [Florian; #767798]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Olivier Fourdan, Rui Matos, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Cédric Valmary [oc]
|
||||||
|
|
||||||
|
3.21.2
|
||||||
|
======
|
||||||
|
* Clean up surface <-> shell interaction [Jonas; #763431]
|
||||||
|
* Fix grabbing random keys for disabled shortcuts [Rui; #766270]
|
||||||
|
* Fix stacking of hidden windows on wayland [Rui; #764844]
|
||||||
|
* Misc. bug fixes [Victor, Florian, Marek, Rui; #766306, #766326, #751847,
|
||||||
|
#763832, #766528]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Emmanuele Bassi, Marek Chalupa, Matthias Clasen,
|
||||||
|
Carlos Garnacho, Rui Matos, Florian Müllner, Victor Toso
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Tiago Santos [pt], Cédric Valmary [oc], Muhammet Kara [tr]
|
||||||
|
|
||||||
3.21.1
|
3.21.1
|
||||||
======
|
======
|
||||||
* Notify clients of pending modifier state changes [Rui; #748526]
|
* Notify clients of pending modifier state changes [Rui; #748526]
|
||||||
|
30
README.md
Normal file
30
README.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Mutter
|
||||||
|
|
||||||
|
Mutter is a Wayland display server and X11 window manager and compositor library.
|
||||||
|
|
||||||
|
When used as a Wayland display server, it runs on top of KMS and libinput. It
|
||||||
|
implements the compositor side of the Wayland core protocol as well as various
|
||||||
|
protocol extensions. It also has functionality related to running X11
|
||||||
|
applications using Xwayland.
|
||||||
|
|
||||||
|
When used on top of Xorg it acts as a X11 window manager and compositing manager.
|
||||||
|
|
||||||
|
It contains functionality related to, among other things, window management,
|
||||||
|
window compositing, focus tracking, workspace management, keybindings and
|
||||||
|
monitor configuration.
|
||||||
|
|
||||||
|
Internally it uses a fork of Cogl, a hardware acceleration abstraction library
|
||||||
|
used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a
|
||||||
|
scene graph and user interface toolkit.
|
||||||
|
|
||||||
|
Mutter is used by GNOME Shell, the GNOME core user interface. It can also be run
|
||||||
|
standalone, using the command "mutter", but just running plain mutter is only
|
||||||
|
intended for debugging purposes.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Mutter is distributed under the terms of the GNU General Public License,
|
||||||
|
version 2 or later. See the [COPYING][license] file for detalis.
|
||||||
|
|
||||||
|
[bug-tracker]: https://gitlab.gnome.org/GNOME/mutter/issues
|
||||||
|
[license]: COPYING
|
25
autogen.sh
25
autogen.sh
@@ -6,16 +6,23 @@ test -z "$srcdir" && srcdir=.
|
|||||||
|
|
||||||
REQUIRED_AUTOMAKE_VERSION=1.11
|
REQUIRED_AUTOMAKE_VERSION=1.11
|
||||||
|
|
||||||
(test -f $srcdir/configure.ac \
|
olddir="$(pwd)"
|
||||||
&& test -d $srcdir/src) || {
|
|
||||||
|
cd "${srcdir}"
|
||||||
|
|
||||||
|
(test -f configure.ac \
|
||||||
|
&& test -d src) || {
|
||||||
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
||||||
echo " top-level metacity directory"
|
echo " top-level mutter directory"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
which gnome-autogen.sh || {
|
aclocal --install || exit 1
|
||||||
echo "You need to install gnome-common from GNOME Subversion (or from"
|
intltoolize --force --copy --automake || exit 1
|
||||||
echo "your distribution's package manager)."
|
autoreconf --verbose --force --install || exit 1
|
||||||
exit 1
|
|
||||||
}
|
cd "${olddir}"
|
||||||
. gnome-autogen.sh
|
|
||||||
|
if [ "$NOCONFIGURE" = "" ]; then
|
||||||
|
"${srcdir}/configure" "$@" || exit 1
|
||||||
|
fi
|
||||||
|
20
clutter/.gitignore
vendored
20
clutter/.gitignore
vendored
@@ -18,16 +18,16 @@ stamp-enum-types
|
|||||||
stamp-marshal
|
stamp-marshal
|
||||||
tags
|
tags
|
||||||
/ChangeLog*
|
/ChangeLog*
|
||||||
/clutter/clutter-config.h
|
clutter-build-config.h
|
||||||
/clutter/clutter-enum-types.[ch]
|
clutter-build-config.h.in
|
||||||
/clutter/clutter-marshal.[ch]
|
clutter-config.h
|
||||||
/clutter/clutter-version.h
|
clutter-enum-types.[ch]
|
||||||
/clutter/gcov-report.txt
|
clutter-marshal.[ch]
|
||||||
/clutter/clutter-json.h
|
clutter-version.h
|
||||||
/clutter/*.log
|
gcov-report.txt
|
||||||
/clutter/*.trs
|
clutter-json.h
|
||||||
/clutter-lcov.info
|
clutter-lcov.info
|
||||||
/clutter-lcov
|
clutter-lcov
|
||||||
!/build/autotools/introspection.m4
|
!/build/autotools/introspection.m4
|
||||||
!/build/autotools/as-linguas.m4
|
!/build/autotools/as-linguas.m4
|
||||||
!/build/autotools/as-compiler-flag.m4
|
!/build/autotools/as-compiler-flag.m4
|
||||||
|
@@ -16,7 +16,6 @@ AM_CPPFLAGS = \
|
|||||||
-DCLUTTER_LOCALEDIR=\""$(localedir)"\" \
|
-DCLUTTER_LOCALEDIR=\""$(localedir)"\" \
|
||||||
-DCLUTTER_SYSCONFDIR=\""$(sysconfdir)"\" \
|
-DCLUTTER_SYSCONFDIR=\""$(sysconfdir)"\" \
|
||||||
-DCLUTTER_COMPILATION=1 \
|
-DCLUTTER_COMPILATION=1 \
|
||||||
-DCOGL_ENABLE_EXPERIMENTAL_API \
|
|
||||||
-DCOGL_DISABLE_DEPRECATION_WARNINGS \
|
-DCOGL_DISABLE_DEPRECATION_WARNINGS \
|
||||||
-DG_LOG_DOMAIN=\"Clutter\" \
|
-DG_LOG_DOMAIN=\"Clutter\" \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
@@ -26,6 +25,7 @@ AM_CPPFLAGS = \
|
|||||||
-I$(top_builddir)/clutter \
|
-I$(top_builddir)/clutter \
|
||||||
-I$(top_srcdir)/../cogl \
|
-I$(top_srcdir)/../cogl \
|
||||||
-I$(top_builddir)/../cogl \
|
-I$(top_builddir)/../cogl \
|
||||||
|
-I$(top_builddir)/../cogl/cogl \
|
||||||
$(CLUTTER_DEPRECATED_CFLAGS) \
|
$(CLUTTER_DEPRECATED_CFLAGS) \
|
||||||
$(CLUTTER_DEBUG_CFLAGS) \
|
$(CLUTTER_DEBUG_CFLAGS) \
|
||||||
$(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) \
|
$(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) \
|
||||||
@@ -37,7 +37,7 @@ AM_CFLAGS = $(CLUTTER_CFLAGS) $(MAINTAINER_CFLAGS)
|
|||||||
INTROSPECTION_GIRS =
|
INTROSPECTION_GIRS =
|
||||||
|
|
||||||
# the base include path for headers
|
# the base include path for headers
|
||||||
clutter_base_includedir = $(includedir)/mutter/clutter-$(CLUTTER_API_VERSION)
|
clutter_base_includedir = $(includedir)/mutter/clutter-$(LIBMUTTER_API_VERSION)
|
||||||
clutter_includedir = $(clutter_base_includedir)/clutter
|
clutter_includedir = $(clutter_base_includedir)/clutter
|
||||||
clutter_deprecateddir = $(clutter_base_includedir)/clutter/deprecated
|
clutter_deprecateddir = $(clutter_base_includedir)/clutter/deprecated
|
||||||
|
|
||||||
@@ -62,7 +62,6 @@ source_h = \
|
|||||||
clutter-canvas.h \
|
clutter-canvas.h \
|
||||||
clutter-child-meta.h \
|
clutter-child-meta.h \
|
||||||
clutter-click-action.h \
|
clutter-click-action.h \
|
||||||
clutter-cogl-compat.h \
|
|
||||||
clutter-clone.h \
|
clutter-clone.h \
|
||||||
clutter-color-static.h \
|
clutter-color-static.h \
|
||||||
clutter-color.h \
|
clutter-color.h \
|
||||||
@@ -87,6 +86,9 @@ source_h = \
|
|||||||
clutter-group.h \
|
clutter-group.h \
|
||||||
clutter-image.h \
|
clutter-image.h \
|
||||||
clutter-input-device.h \
|
clutter-input-device.h \
|
||||||
|
clutter-input-device-tool.h \
|
||||||
|
clutter-input-focus.h \
|
||||||
|
clutter-input-method.h \
|
||||||
clutter-interval.h \
|
clutter-interval.h \
|
||||||
clutter-keyframe-transition.h \
|
clutter-keyframe-transition.h \
|
||||||
clutter-keysyms.h \
|
clutter-keysyms.h \
|
||||||
@@ -123,6 +125,7 @@ source_h = \
|
|||||||
clutter-transition.h \
|
clutter-transition.h \
|
||||||
clutter-types.h \
|
clutter-types.h \
|
||||||
clutter-units.h \
|
clutter-units.h \
|
||||||
|
clutter-virtual-input-device.h \
|
||||||
clutter-zoom-action.h \
|
clutter-zoom-action.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
@@ -167,6 +170,10 @@ source_c = \
|
|||||||
clutter-grid-layout.c \
|
clutter-grid-layout.c \
|
||||||
clutter-image.c \
|
clutter-image.c \
|
||||||
clutter-input-device.c \
|
clutter-input-device.c \
|
||||||
|
clutter-input-device-tool.c \
|
||||||
|
clutter-input-focus.c \
|
||||||
|
clutter-input-method.c \
|
||||||
|
clutter-virtual-input-device.c \
|
||||||
clutter-interval.c \
|
clutter-interval.c \
|
||||||
clutter-keyframe-transition.c \
|
clutter-keyframe-transition.c \
|
||||||
clutter-keysyms-table.c \
|
clutter-keysyms-table.c \
|
||||||
@@ -226,6 +233,8 @@ source_h_priv = \
|
|||||||
clutter-flatten-effect.h \
|
clutter-flatten-effect.h \
|
||||||
clutter-gesture-action-private.h \
|
clutter-gesture-action-private.h \
|
||||||
clutter-id-pool.h \
|
clutter-id-pool.h \
|
||||||
|
clutter-input-focus-private.h \
|
||||||
|
clutter-input-method-private.h \
|
||||||
clutter-master-clock.h \
|
clutter-master-clock.h \
|
||||||
clutter-master-clock-default.h \
|
clutter-master-clock-default.h \
|
||||||
clutter-offscreen-effect-private.h \
|
clutter-offscreen-effect-private.h \
|
||||||
@@ -236,6 +245,7 @@ source_h_priv = \
|
|||||||
clutter-settings-private.h \
|
clutter-settings-private.h \
|
||||||
clutter-stage-manager-private.h \
|
clutter-stage-manager-private.h \
|
||||||
clutter-stage-private.h \
|
clutter-stage-private.h \
|
||||||
|
clutter-stage-view.h \
|
||||||
clutter-stage-window.h \
|
clutter-stage-window.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
@@ -244,6 +254,7 @@ source_c_priv = \
|
|||||||
clutter-easing.c \
|
clutter-easing.c \
|
||||||
clutter-event-translator.c \
|
clutter-event-translator.c \
|
||||||
clutter-id-pool.c \
|
clutter-id-pool.c \
|
||||||
|
clutter-stage-view.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
# deprecated installed headers
|
# deprecated installed headers
|
||||||
@@ -265,7 +276,6 @@ deprecated_h = \
|
|||||||
deprecated/clutter-box.h \
|
deprecated/clutter-box.h \
|
||||||
deprecated/clutter-cairo-texture.h \
|
deprecated/clutter-cairo-texture.h \
|
||||||
deprecated/clutter-container.h \
|
deprecated/clutter-container.h \
|
||||||
deprecated/clutter-fixed.h \
|
|
||||||
deprecated/clutter-frame-source.h \
|
deprecated/clutter-frame-source.h \
|
||||||
deprecated/clutter-group.h \
|
deprecated/clutter-group.h \
|
||||||
deprecated/clutter-input-device.h \
|
deprecated/clutter-input-device.h \
|
||||||
@@ -302,7 +312,6 @@ deprecated_c = \
|
|||||||
deprecated/clutter-behaviour-scale.c \
|
deprecated/clutter-behaviour-scale.c \
|
||||||
deprecated/clutter-box.c \
|
deprecated/clutter-box.c \
|
||||||
deprecated/clutter-cairo-texture.c \
|
deprecated/clutter-cairo-texture.c \
|
||||||
deprecated/clutter-fixed.c \
|
|
||||||
deprecated/clutter-frame-source.c \
|
deprecated/clutter-frame-source.c \
|
||||||
deprecated/clutter-group.c \
|
deprecated/clutter-group.c \
|
||||||
deprecated/clutter-input-device-deprecated.c \
|
deprecated/clutter-input-device-deprecated.c \
|
||||||
@@ -353,7 +362,7 @@ EXTRA_DIST += clutter-version.h.in clutter-version.h
|
|||||||
# key symbol update script
|
# key symbol update script
|
||||||
EXTRA_DIST += clutter-keysyms-update.pl
|
EXTRA_DIST += clutter-keysyms-update.pl
|
||||||
|
|
||||||
pc_files += mutter-clutter-$(CLUTTER_API_VERSION).pc
|
pc_files += mutter-clutter-$(LIBMUTTER_API_VERSION).pc
|
||||||
|
|
||||||
# in order to be compatible with Clutter < 1.10, when we shipped a single
|
# in order to be compatible with Clutter < 1.10, when we shipped a single
|
||||||
# shared library whose name was determined by the single backend it
|
# shared library whose name was determined by the single backend it
|
||||||
@@ -385,6 +394,7 @@ x11_source_c = \
|
|||||||
x11/clutter-keymap-x11.c \
|
x11/clutter-keymap-x11.c \
|
||||||
x11/clutter-stage-x11.c \
|
x11/clutter-stage-x11.c \
|
||||||
x11/clutter-x11-texture-pixmap.c \
|
x11/clutter-x11-texture-pixmap.c \
|
||||||
|
x11/clutter-xkb-a11y-x11.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
x11_source_h = \
|
x11_source_h = \
|
||||||
@@ -399,6 +409,7 @@ x11_source_h_priv = \
|
|||||||
x11/clutter-keymap-x11.h \
|
x11/clutter-keymap-x11.h \
|
||||||
x11/clutter-settings-x11.h \
|
x11/clutter-settings-x11.h \
|
||||||
x11/clutter-stage-x11.h \
|
x11/clutter-stage-x11.h \
|
||||||
|
x11/clutter-xkb-a11y-x11.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
x11_source_c_priv = \
|
x11_source_c_priv = \
|
||||||
@@ -411,11 +422,21 @@ x11_source_c_priv = \
|
|||||||
x11_source_c += \
|
x11_source_c += \
|
||||||
x11/clutter-device-manager-xi2.c \
|
x11/clutter-device-manager-xi2.c \
|
||||||
x11/clutter-input-device-xi2.c \
|
x11/clutter-input-device-xi2.c \
|
||||||
|
x11/clutter-input-device-tool-xi2.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
x11_source_h_priv += \
|
x11_source_h_priv += \
|
||||||
x11/clutter-device-manager-xi2.h \
|
x11/clutter-device-manager-xi2.h \
|
||||||
x11/clutter-input-device-xi2.h \
|
x11/clutter-input-device-xi2.h \
|
||||||
|
x11/clutter-input-device-tool-xi2.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
x11_source_c += \
|
||||||
|
x11/clutter-virtual-input-device-x11.c \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
x11_source_h_priv += \
|
||||||
|
x11/clutter-virtual-input-device-x11.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
backend_source_h += $(x11_source_h)
|
backend_source_h += $(x11_source_h)
|
||||||
@@ -429,10 +450,10 @@ x11_introspection = $(x11_source_c) $(x11_source_h)
|
|||||||
clutterx11_includedir = $(clutter_includedir)/x11
|
clutterx11_includedir = $(clutter_includedir)/x11
|
||||||
clutterx11_include_HEADERS = $(x11_source_h)
|
clutterx11_include_HEADERS = $(x11_source_h)
|
||||||
|
|
||||||
mutter-clutter-x11-$(CLUTTER_API_VERSION).pc: mutter-clutter-$(CLUTTER_API_VERSION).pc
|
mutter-clutter-x11-@LIBMUTTER_API_VERSION@.pc: mutter-clutter-$(LIBMUTTER_API_VERSION).pc
|
||||||
$(QUIET_GEN)cp -f $< $(@F)
|
$(QUIET_GEN)cp -f $< $(@F)
|
||||||
|
|
||||||
pc_files += mutter-clutter-x11-$(CLUTTER_API_VERSION).pc
|
pc_files += mutter-clutter-x11-$(LIBMUTTER_API_VERSION).pc
|
||||||
|
|
||||||
# Shared cogl backend files
|
# Shared cogl backend files
|
||||||
cogl_source_h =
|
cogl_source_h =
|
||||||
@@ -458,11 +479,17 @@ backend_source_c += $(glx_source_c)
|
|||||||
evdev_c_priv = \
|
evdev_c_priv = \
|
||||||
evdev/clutter-device-manager-evdev.c \
|
evdev/clutter-device-manager-evdev.c \
|
||||||
evdev/clutter-input-device-evdev.c \
|
evdev/clutter-input-device-evdev.c \
|
||||||
|
evdev/clutter-seat-evdev.c \
|
||||||
|
evdev/clutter-virtual-input-device-evdev.c \
|
||||||
evdev/clutter-event-evdev.c \
|
evdev/clutter-event-evdev.c \
|
||||||
|
evdev/clutter-input-device-tool-evdev.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
evdev_h_priv = \
|
evdev_h_priv = \
|
||||||
evdev/clutter-device-manager-evdev.h \
|
evdev/clutter-device-manager-evdev.h \
|
||||||
evdev/clutter-input-device-evdev.h \
|
evdev/clutter-input-device-evdev.h \
|
||||||
|
evdev/clutter-seat-evdev.h \
|
||||||
|
evdev/clutter-input-device-tool-evdev.h \
|
||||||
|
evdev/clutter-virtual-input-device-evdev.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
evdev_h = evdev/clutter-evdev.h
|
evdev_h = evdev/clutter-evdev.h
|
||||||
|
|
||||||
@@ -483,8 +510,8 @@ egl_source_h = \
|
|||||||
egl/clutter-egl.h \
|
egl/clutter-egl.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
egl_source_h_priv = egl/clutter-backend-eglnative.h egl/clutter-stage-eglnative.h
|
egl_source_h_priv = egl/clutter-backend-eglnative.h
|
||||||
egl_source_c = egl/clutter-backend-eglnative.c egl/clutter-stage-eglnative.c
|
egl_source_c = egl/clutter-backend-eglnative.c
|
||||||
|
|
||||||
wayland_compositor_source_h = \
|
wayland_compositor_source_h = \
|
||||||
wayland/clutter-wayland-compositor.h \
|
wayland/clutter-wayland-compositor.h \
|
||||||
@@ -558,23 +585,23 @@ pkgconfigdir = $(libdir)/pkgconfig
|
|||||||
pkgconfig_DATA = $(pc_files)
|
pkgconfig_DATA = $(pc_files)
|
||||||
DISTCLEANFILES += $(pc_files)
|
DISTCLEANFILES += $(pc_files)
|
||||||
|
|
||||||
clutter_include_HEADERS = $(source_h) clutter.h clutter-version.h clutter-autocleanups.h
|
clutter_include_HEADERS = $(source_h) clutter.h clutter-version.h clutter-autocleanups.h clutter-mutter.h
|
||||||
nodist_clutter_include_HEADERS = clutter-config.h $(built_source_h)
|
nodist_clutter_include_HEADERS = clutter-config.h $(built_source_h)
|
||||||
|
|
||||||
clutter_deprecated_HEADERS = $(deprecated_h)
|
clutter_deprecated_HEADERS = $(deprecated_h)
|
||||||
|
|
||||||
mutterlibdir = $(libdir)/mutter
|
mutterlibdir = $(libdir)/mutter
|
||||||
mutterlib_LTLIBRARIES = libmutter-clutter-@CLUTTER_API_VERSION@.la
|
mutterlib_LTLIBRARIES = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
|
||||||
|
|
||||||
libmutter_clutter_@CLUTTER_API_VERSION@_la_LIBADD = \
|
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_LIBADD = \
|
||||||
$(LIBM) \
|
$(LIBM) \
|
||||||
$(CLUTTER_LIBS) \
|
$(CLUTTER_LIBS) \
|
||||||
$(top_builddir)/../cogl/cogl/libmutter-cogl.la \
|
$(top_builddir)/../cogl/cogl/libmutter-cogl-$(LIBMUTTER_API_VERSION).la \
|
||||||
$(top_builddir)/../cogl/cogl-pango/libmutter-cogl-pango.la \
|
$(top_builddir)/../cogl/cogl-pango/libmutter-cogl-pango-$(LIBMUTTER_API_VERSION).la \
|
||||||
$(top_builddir)/../cogl/cogl-path/libmutter-cogl-path.la \
|
$(top_builddir)/../cogl/cogl-path/libmutter-cogl-path-$(LIBMUTTER_API_VERSION).la \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
libmutter_clutter_@CLUTTER_API_VERSION@_la_SOURCES = \
|
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||||
$(backend_source_c) \
|
$(backend_source_c) \
|
||||||
$(backend_source_h) \
|
$(backend_source_h) \
|
||||||
$(backend_source_c_priv) \
|
$(backend_source_c_priv) \
|
||||||
@@ -592,12 +619,12 @@ libmutter_clutter_@CLUTTER_API_VERSION@_la_SOURCES = \
|
|||||||
$(cally_sources_private) \
|
$(cally_sources_private) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
nodist_libmutter_clutter_@CLUTTER_API_VERSION@_la_SOURCES = \
|
nodist_libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||||
$(backend_source_built) \
|
$(backend_source_built) \
|
||||||
$(built_source_c) \
|
$(built_source_c) \
|
||||||
$(built_source_h)
|
$(built_source_h)
|
||||||
|
|
||||||
libmutter_clutter_@CLUTTER_API_VERSION@_la_LDFLAGS = \
|
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_LDFLAGS = \
|
||||||
$(CLUTTER_LINK_FLAGS) \
|
$(CLUTTER_LINK_FLAGS) \
|
||||||
$(CLUTTER_LT_LDFLAGS) \
|
$(CLUTTER_LT_LDFLAGS) \
|
||||||
-export-dynamic \
|
-export-dynamic \
|
||||||
@@ -611,13 +638,13 @@ install-exec-local:
|
|||||||
rm -f $$lib.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION); \
|
rm -f $$lib.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION); \
|
||||||
) ; \
|
) ; \
|
||||||
(cd $(DESTDIR)$(mutterlibdir) && \
|
(cd $(DESTDIR)$(mutterlibdir) && \
|
||||||
{ ln -s -f libmutter-clutter-$(CLUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0 || \
|
{ ln -s -f libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0 || \
|
||||||
{ rm -f $$lib.0 && ln -s libmutter-clutter-1.0.so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0; }; \
|
{ rm -f $$lib.0 && ln -s libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0; }; \
|
||||||
} \
|
} \
|
||||||
) ; \
|
) ; \
|
||||||
(cd $(DESTDIR)$(mutterlibdir) && \
|
(cd $(DESTDIR)$(mutterlibdir) && \
|
||||||
{ ln -s -f libmutter-clutter-$(CLUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib || \
|
{ ln -s -f libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib || \
|
||||||
{ rm -f $$lib && ln -s libmutter-clutter-1.0.so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib; }; \
|
{ rm -f $$lib && ln -s libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib; }; \
|
||||||
} \
|
} \
|
||||||
) ; \
|
) ; \
|
||||||
done
|
done
|
||||||
@@ -625,59 +652,65 @@ install-exec-local:
|
|||||||
# gobject-introspection rules
|
# gobject-introspection rules
|
||||||
-include $(INTROSPECTION_MAKEFILE)
|
-include $(INTROSPECTION_MAKEFILE)
|
||||||
|
|
||||||
INTROSPECTION_SCANNER_ARGS = --add-include-path=$(top_builddir)/../cogl/cogl --add-include-path=$(top_builddir)/../cogl/cogl-pango
|
INTROSPECTION_SCANNER_ARGS = \
|
||||||
INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/../cogl/cogl --includedir=$(top_builddir)/../cogl/cogl-pango
|
--add-include-path=$(top_builddir)/../cogl/cogl \
|
||||||
|
--add-include-path=$(top_builddir)/../cogl/cogl-pango
|
||||||
|
INTROSPECTION_COMPILER_ARGS = \
|
||||||
|
--includedir=$(top_builddir)/../cogl/cogl \
|
||||||
|
--includedir=$(top_builddir)/../cogl/cogl-pango
|
||||||
|
INTROSPECTION_SCANNER_ENV = \
|
||||||
|
PKG_CONFIG_PATH=$(top_builddir)/../cogl/cogl/:$(top_builddir)/../cogl/cogl-pango/:$${PKG_CONFIG_PATH}
|
||||||
|
|
||||||
Clutter-@CLUTTER_API_VERSION@.gir: libmutter-clutter-@CLUTTER_API_VERSION@.la Makefile
|
Clutter-@LIBMUTTER_API_VERSION@.gir: libmutter-clutter-@LIBMUTTER_API_VERSION@.la Makefile
|
||||||
|
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = Clutter
|
Clutter_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = Clutter
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
|
Clutter_@LIBMUTTER_API_VERSION@_gir_VERSION = @LIBMUTTER_API_VERSION@
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_LIBS = libmutter-clutter-@CLUTTER_API_VERSION@.la
|
Clutter_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_FILES = \
|
Clutter_@LIBMUTTER_API_VERSION@_gir_FILES = \
|
||||||
$(clutter_include_HEADERS) \
|
$(clutter_include_HEADERS) \
|
||||||
$(clutter_deprecated_HEADERS) \
|
$(clutter_deprecated_HEADERS) \
|
||||||
$(nodist_clutter_include_HEADERS) \
|
$(nodist_clutter_include_HEADERS) \
|
||||||
$(source_c) \
|
$(source_c) \
|
||||||
$(deprecated_c) \
|
$(deprecated_c) \
|
||||||
$(built_source_c)
|
$(built_source_c)
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
Clutter_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-1.0 CoglPango-1.0 Atk-1.0 Json-1.0
|
Clutter_@LIBMUTTER_API_VERSION@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-@LIBMUTTER_API_VERSION@ CoglPango-@LIBMUTTER_API_VERSION@ Atk-1.0 Json-1.0
|
||||||
Clutter_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
|
Clutter_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
|
||||||
--warn-all \
|
--warn-all \
|
||||||
--c-include='clutter/clutter.h' \
|
--c-include='clutter/clutter.h' \
|
||||||
--pkg-export=mutter-clutter-@CLUTTER_API_VERSION@
|
--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@
|
||||||
|
|
||||||
INTROSPECTION_GIRS += Clutter-@CLUTTER_API_VERSION@.gir
|
INTROSPECTION_GIRS += Clutter-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
Cally-@CLUTTER_API_VERSION@.gir: Makefile Clutter-@CLUTTER_API_VERSION@.gir
|
Cally-@LIBMUTTER_API_VERSION@.gir: Makefile Clutter-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
Cally_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = Cally
|
Cally_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = Cally
|
||||||
Cally_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
|
Cally_@LIBMUTTER_API_VERSION@_gir_VERSION = @LIBMUTTER_API_VERSION@
|
||||||
Cally_@CLUTTER_API_VERSION_AM@_gir_LIBS = libmutter-clutter-@CLUTTER_API_VERSION@.la
|
Cally_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
|
||||||
Cally_@CLUTTER_API_VERSION_AM@_gir_FILES = $(cally_sources_h) $(cally_sources_c)
|
Cally_@LIBMUTTER_API_VERSION@_gir_FILES = $(cally_sources_h) $(cally_sources_c)
|
||||||
Cally_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
Cally_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
||||||
Cally_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
|
Cally_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
|
||||||
--warn-all \
|
--warn-all \
|
||||||
--c-include='cally/cally.h' \
|
--c-include='cally/cally.h' \
|
||||||
--pkg-export=mutter-cally-@CLUTTER_API_VERSION@ \
|
--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@ \
|
||||||
--include-uninstalled=$(top_builddir)/clutter/Clutter-@CLUTTER_API_VERSION@.gir
|
--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
INTROSPECTION_GIRS += Cally-@CLUTTER_API_VERSION@.gir
|
INTROSPECTION_GIRS += Cally-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
ClutterX11-@CLUTTER_API_VERSION@.gir: Makefile Clutter-@CLUTTER_API_VERSION@.gir
|
ClutterX11-@LIBMUTTER_API_VERSION@.gir: Makefile Clutter-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = ClutterX11
|
ClutterX11_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = ClutterX11
|
||||||
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = xlib-2.0
|
ClutterX11_@LIBMUTTER_API_VERSION@_gir_INCLUDES = xlib-2.0
|
||||||
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_LIBS = libmutter-clutter-@CLUTTER_API_VERSION@.la
|
ClutterX11_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
|
||||||
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_FILES = $(x11_introspection)
|
ClutterX11_@LIBMUTTER_API_VERSION@_gir_FILES = $(x11_introspection)
|
||||||
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
ClutterX11_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
||||||
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
|
ClutterX11_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
|
||||||
--warn-all \
|
--warn-all \
|
||||||
--c-include='clutter/x11/clutter-x11.h' \
|
--c-include='clutter/x11/clutter-x11.h' \
|
||||||
--pkg-export=mutter-clutter-x11-@CLUTTER_API_VERSION@ \
|
--pkg-export=mutter-clutter-x11-@LIBMUTTER_API_VERSION@ \
|
||||||
--include-uninstalled=$(top_builddir)/clutter/Clutter-@CLUTTER_API_VERSION@.gir
|
--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
INTROSPECTION_GIRS += ClutterX11-@CLUTTER_API_VERSION@.gir
|
INTROSPECTION_GIRS += ClutterX11-@LIBMUTTER_API_VERSION@.gir
|
||||||
|
|
||||||
# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
|
# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
|
||||||
# install anything - we need to install inside our prefix.
|
# install anything - we need to install inside our prefix.
|
||||||
|
@@ -34,6 +34,7 @@ stamp-marshal: $(marshal_list)
|
|||||||
$(AM_V_GEN)$(GLIB_GENMARSHAL) \
|
$(AM_V_GEN)$(GLIB_GENMARSHAL) \
|
||||||
--prefix=$(glib_marshal_prefix) \
|
--prefix=$(glib_marshal_prefix) \
|
||||||
--header \
|
--header \
|
||||||
|
--valist-marshallers \
|
||||||
$(marshal_list) > xgen-mh \
|
$(marshal_list) > xgen-mh \
|
||||||
&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
|
&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
|
||||||
&& rm -f xgen-mh \
|
&& rm -f xgen-mh \
|
||||||
@@ -43,10 +44,11 @@ $(marshal_h): stamp-marshal
|
|||||||
@true
|
@true
|
||||||
|
|
||||||
$(marshal_c): $(marshal_h)
|
$(marshal_c): $(marshal_h)
|
||||||
$(AM_V_GEN)(echo "#include \"$(marshal_h)\"" ; \
|
$(AM_V_GEN)$(GLIB_GENMARSHAL) \
|
||||||
$(GLIB_GENMARSHAL) \
|
|
||||||
--prefix=$(glib_marshal_prefix) \
|
--prefix=$(glib_marshal_prefix) \
|
||||||
--body \
|
--body \
|
||||||
$(marshal_list)) > xgen-mc \
|
--valist-marshallers \
|
||||||
&& cp xgen-mc $(marshal_c) \
|
--prototypes \
|
||||||
|
$(marshal_list) > xgen-mc \
|
||||||
|
&& (cmp -s xgen-mc $(marshal_c) || cp -f xgen-mc $(marshal_c)) \
|
||||||
&& rm -f xgen-mc
|
&& rm -f xgen-mc
|
||||||
|
@@ -68,7 +68,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
@@ -781,7 +781,7 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
|
|||||||
"position of the stage");
|
"position of the stage");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#else
|
#endif
|
||||||
{
|
{
|
||||||
static gboolean yet_warned = FALSE;
|
static gboolean yet_warned = FALSE;
|
||||||
|
|
||||||
@@ -793,7 +793,6 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
|
|||||||
"atk_component_get_extents() with ATK_XY_SCREEN.");
|
"atk_component_get_extents() with ATK_XY_SCREEN.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (xp)
|
if (xp)
|
||||||
*xp = x;
|
*xp = x;
|
||||||
|
@@ -69,7 +69,7 @@
|
|||||||
* a11y POV should still be managed as a image (with the proper properties,
|
* a11y POV should still be managed as a image (with the proper properties,
|
||||||
* position, size, etc.).
|
* position, size, etc.).
|
||||||
*/
|
*/
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include "cally-clone.h"
|
#include "cally-clone.h"
|
||||||
#include "cally-actor-private.h"
|
#include "cally-actor-private.h"
|
||||||
|
@@ -34,7 +34,7 @@
|
|||||||
* group.
|
* group.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include "cally-group.h"
|
#include "cally-group.h"
|
||||||
#include "cally-actor-private.h"
|
#include "cally-actor-private.h"
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
* In particular it sets a proper role for the rectangle.
|
* In particular it sets a proper role for the rectangle.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
* #ClutterStageManager).
|
* #ClutterStageManager).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include "cally-root.h"
|
#include "cally-root.h"
|
||||||
|
|
||||||
|
@@ -34,7 +34,7 @@
|
|||||||
* being a canvas. Anyway, this is required for applications using
|
* being a canvas. Anyway, this is required for applications using
|
||||||
* just clutter, or directly #ClutterStage
|
* just clutter, or directly #ClutterStage
|
||||||
*/
|
*/
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include "cally-stage.h"
|
#include "cally-stage.h"
|
||||||
#include "cally-actor-private.h"
|
#include "cally-actor-private.h"
|
||||||
|
@@ -40,7 +40,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cally-text.h"
|
#include "cally-text.h"
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
*
|
*
|
||||||
* In particular it sets a proper role for the texture.
|
* In particular it sets a proper role for the texture.
|
||||||
*/
|
*/
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -214,6 +214,8 @@ cally_util_simulate_snooper_install (void)
|
|||||||
G_CALLBACK (cally_util_stage_added_cb), cally_key_snooper);
|
G_CALLBACK (cally_util_stage_added_cb), cally_key_snooper);
|
||||||
g_signal_connect (G_OBJECT (stage_manager), "stage-removed",
|
g_signal_connect (G_OBJECT (stage_manager), "stage-removed",
|
||||||
G_CALLBACK (cally_util_stage_removed_cb), cally_key_snooper);
|
G_CALLBACK (cally_util_stage_removed_cb), cally_key_snooper);
|
||||||
|
|
||||||
|
g_slist_free (stage_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-action.h"
|
#include "clutter-action.h"
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-actor-meta-private.h"
|
#include "clutter-actor-meta-private.h"
|
||||||
|
@@ -605,7 +605,7 @@
|
|||||||
* #ClutterActor:reactive property instead of this macro.
|
* #ClutterActor:reactive property instead of this macro.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
@@ -840,6 +840,8 @@ struct _ClutterActorPrivate
|
|||||||
guint needs_compute_expand : 1;
|
guint needs_compute_expand : 1;
|
||||||
guint needs_x_expand : 1;
|
guint needs_x_expand : 1;
|
||||||
guint needs_y_expand : 1;
|
guint needs_y_expand : 1;
|
||||||
|
guint needs_paint_volume_update : 1;
|
||||||
|
guint had_effects_on_last_paint_volume_update : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -1092,6 +1094,11 @@ static void clutter_actor_set_child_transform_internal (ClutterActor *sel
|
|||||||
static void clutter_actor_realize_internal (ClutterActor *self);
|
static void clutter_actor_realize_internal (ClutterActor *self);
|
||||||
static void clutter_actor_unrealize_internal (ClutterActor *self);
|
static void clutter_actor_unrealize_internal (ClutterActor *self);
|
||||||
|
|
||||||
|
static void clutter_actor_push_in_cloned_branch (ClutterActor *self,
|
||||||
|
gulong count);
|
||||||
|
static void clutter_actor_pop_in_cloned_branch (ClutterActor *self,
|
||||||
|
gulong count);
|
||||||
|
|
||||||
/* Helper macro which translates by the anchor coord, applies the
|
/* Helper macro which translates by the anchor coord, applies the
|
||||||
given transformation and then translates back */
|
given transformation and then translates back */
|
||||||
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
|
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
|
||||||
@@ -1504,6 +1511,8 @@ clutter_actor_real_map (ClutterActor *self)
|
|||||||
|
|
||||||
CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED);
|
CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED);
|
||||||
|
|
||||||
|
self->priv->needs_paint_volume_update = TRUE;
|
||||||
|
|
||||||
stage = _clutter_actor_get_stage_internal (self);
|
stage = _clutter_actor_get_stage_internal (self);
|
||||||
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
|
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
|
||||||
|
|
||||||
@@ -2656,7 +2665,15 @@ _clutter_actor_signal_queue_redraw (ClutterActor *self,
|
|||||||
_clutter_actor_queue_redraw_on_clones (self);
|
_clutter_actor_queue_redraw_on_clones (self);
|
||||||
|
|
||||||
/* calls klass->queue_redraw in default handler */
|
/* calls klass->queue_redraw in default handler */
|
||||||
g_signal_emit (self, actor_signals[QUEUE_REDRAW], 0, origin);
|
if (g_signal_has_handler_pending (self, actor_signals[QUEUE_REDRAW],
|
||||||
|
0, TRUE))
|
||||||
|
{
|
||||||
|
g_signal_emit (self, actor_signals[QUEUE_REDRAW], 0, origin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLUTTER_ACTOR_GET_CLASS (self)->queue_redraw (self, origin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2729,6 +2746,7 @@ clutter_actor_real_queue_relayout (ClutterActor *self)
|
|||||||
priv->needs_width_request = TRUE;
|
priv->needs_width_request = TRUE;
|
||||||
priv->needs_height_request = TRUE;
|
priv->needs_height_request = TRUE;
|
||||||
priv->needs_allocation = TRUE;
|
priv->needs_allocation = TRUE;
|
||||||
|
priv->needs_paint_volume_update = TRUE;
|
||||||
|
|
||||||
/* reset the cached size requests */
|
/* reset the cached size requests */
|
||||||
memset (priv->width_requests, 0,
|
memset (priv->width_requests, 0,
|
||||||
@@ -2813,7 +2831,7 @@ _clutter_actor_fully_transform_vertices (ClutterActor *self,
|
|||||||
/* Note: we pass NULL as the ancestor because we don't just want the modelview
|
/* Note: we pass NULL as the ancestor because we don't just want the modelview
|
||||||
* that gets us to stage coordinates, we want to go all the way to eye
|
* that gets us to stage coordinates, we want to go all the way to eye
|
||||||
* coordinates */
|
* coordinates */
|
||||||
_clutter_actor_apply_relative_transformation_matrix (self, NULL, &modelview);
|
_clutter_actor_get_relative_transformation_matrix (self, NULL, &modelview);
|
||||||
|
|
||||||
/* Fetch the projection and viewport */
|
/* Fetch the projection and viewport */
|
||||||
_clutter_stage_get_projection_matrix (CLUTTER_STAGE (stage), &projection);
|
_clutter_stage_get_projection_matrix (CLUTTER_STAGE (stage), &projection);
|
||||||
@@ -4015,7 +4033,11 @@ clutter_actor_continue_paint (ClutterActor *self)
|
|||||||
clutter_paint_node_unref (dummy);
|
clutter_paint_node_unref (dummy);
|
||||||
|
|
||||||
/* XXX:2.0 - Call the paint() virtual directly */
|
/* XXX:2.0 - Call the paint() virtual directly */
|
||||||
g_signal_emit (self, actor_signals[PAINT], 0);
|
if (g_signal_has_handler_pending (self, actor_signals[PAINT],
|
||||||
|
0, TRUE))
|
||||||
|
g_signal_emit (self, actor_signals[PAINT], 0);
|
||||||
|
else
|
||||||
|
CLUTTER_ACTOR_GET_CLASS (self)->paint (self);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -4029,7 +4051,11 @@ clutter_actor_continue_paint (ClutterActor *self)
|
|||||||
*
|
*
|
||||||
* XXX:2.0 - Call the pick() virtual directly
|
* XXX:2.0 - Call the pick() virtual directly
|
||||||
*/
|
*/
|
||||||
g_signal_emit (self, actor_signals[PICK], 0, &col);
|
if (g_signal_has_handler_pending (self, actor_signals[PICK],
|
||||||
|
0, TRUE))
|
||||||
|
g_signal_emit (self, actor_signals[PICK], 0, &col);
|
||||||
|
else
|
||||||
|
CLUTTER_ACTOR_GET_CLASS (self)->pick (self, &col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -4269,6 +4295,9 @@ clutter_actor_remove_child_internal (ClutterActor *self,
|
|||||||
|
|
||||||
self->priv->age += 1;
|
self->priv->age += 1;
|
||||||
|
|
||||||
|
if (self->priv->in_cloned_branch)
|
||||||
|
clutter_actor_pop_in_cloned_branch (child, self->priv->in_cloned_branch);
|
||||||
|
|
||||||
/* if the child that got removed was visible and set to
|
/* if the child that got removed was visible and set to
|
||||||
* expand then we want to reset the parent's state in
|
* expand then we want to reset the parent's state in
|
||||||
* case the child was the only thing that was making it
|
* case the child was the only thing that was making it
|
||||||
@@ -8502,6 +8531,7 @@ clutter_actor_init (ClutterActor *self)
|
|||||||
priv->needs_width_request = TRUE;
|
priv->needs_width_request = TRUE;
|
||||||
priv->needs_height_request = TRUE;
|
priv->needs_height_request = TRUE;
|
||||||
priv->needs_allocation = TRUE;
|
priv->needs_allocation = TRUE;
|
||||||
|
priv->needs_paint_volume_update = TRUE;
|
||||||
|
|
||||||
priv->cached_width_age = 1;
|
priv->cached_width_age = 1;
|
||||||
priv->cached_height_age = 1;
|
priv->cached_height_age = 1;
|
||||||
@@ -10068,6 +10098,9 @@ clutter_actor_allocate (ClutterActor *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_IS_MAPPED (self))
|
||||||
|
self->priv->needs_paint_volume_update = TRUE;
|
||||||
|
|
||||||
if (!stage_allocation_changed)
|
if (!stage_allocation_changed)
|
||||||
{
|
{
|
||||||
/* If the actor didn't move but needs_allocation is set, we just
|
/* If the actor didn't move but needs_allocation is set, we just
|
||||||
@@ -12886,6 +12919,9 @@ clutter_actor_add_child_internal (ClutterActor *self,
|
|||||||
|
|
||||||
self->priv->age += 1;
|
self->priv->age += 1;
|
||||||
|
|
||||||
|
if (self->priv->in_cloned_branch)
|
||||||
|
clutter_actor_push_in_cloned_branch (child, self->priv->in_cloned_branch);
|
||||||
|
|
||||||
/* if push_internal() has been called then we automatically set
|
/* if push_internal() has been called then we automatically set
|
||||||
* the flag on the actor
|
* the flag on the actor
|
||||||
*/
|
*/
|
||||||
@@ -12956,6 +12992,9 @@ clutter_actor_add_child_internal (ClutterActor *self,
|
|||||||
child->priv->needs_height_request = TRUE;
|
child->priv->needs_height_request = TRUE;
|
||||||
child->priv->needs_allocation = TRUE;
|
child->priv->needs_allocation = TRUE;
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_IS_MAPPED (child))
|
||||||
|
child->priv->needs_paint_volume_update = TRUE;
|
||||||
|
|
||||||
/* we only queue a relayout here, because any possible
|
/* we only queue a relayout here, because any possible
|
||||||
* redraw has already been queued either by show() or
|
* redraw has already been queued either by show() or
|
||||||
* by our call to queue_redraw() above
|
* by our call to queue_redraw() above
|
||||||
@@ -17447,7 +17486,7 @@ _clutter_actor_get_paint_volume_real (ClutterActor *self,
|
|||||||
*/
|
*/
|
||||||
effects = _clutter_meta_group_peek_metas (priv->effects);
|
effects = _clutter_meta_group_peek_metas (priv->effects);
|
||||||
for (l = effects;
|
for (l = effects;
|
||||||
l != NULL || (l != NULL && l->data != priv->current_effect);
|
l != NULL && l->data != priv->current_effect;
|
||||||
l = l->next)
|
l = l->next)
|
||||||
{
|
{
|
||||||
if (!_clutter_effect_get_paint_volume (l->data, pv))
|
if (!_clutter_effect_get_paint_volume (l->data, pv))
|
||||||
@@ -17483,6 +17522,32 @@ _clutter_actor_get_paint_volume_real (ClutterActor *self,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_clutter_actor_has_active_paint_volume_override_effects (ClutterActor *self)
|
||||||
|
{
|
||||||
|
const GList *l;
|
||||||
|
|
||||||
|
if (self->priv->effects == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* We just need to all effects current effect to see
|
||||||
|
* if anyone wants to override the paint volume. If so, then
|
||||||
|
* we need to recompute, since the paint volume returned can
|
||||||
|
* change from call to call. */
|
||||||
|
for (l = _clutter_meta_group_peek_metas (self->priv->effects);
|
||||||
|
l != NULL;
|
||||||
|
l = l->next)
|
||||||
|
{
|
||||||
|
ClutterEffect *effect = l->data;
|
||||||
|
|
||||||
|
if (clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)) &&
|
||||||
|
_clutter_effect_has_custom_paint_volume (effect))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* The public clutter_actor_get_paint_volume API returns a const
|
/* The public clutter_actor_get_paint_volume API returns a const
|
||||||
* pointer since we return a pointer directly to the cached
|
* pointer since we return a pointer directly to the cached
|
||||||
* PaintVolume associated with the actor and don't want the user to
|
* PaintVolume associated with the actor and don't want the user to
|
||||||
@@ -17493,16 +17558,37 @@ _clutter_actor_get_paint_volume_real (ClutterActor *self,
|
|||||||
static ClutterPaintVolume *
|
static ClutterPaintVolume *
|
||||||
_clutter_actor_get_paint_volume_mutable (ClutterActor *self)
|
_clutter_actor_get_paint_volume_mutable (ClutterActor *self)
|
||||||
{
|
{
|
||||||
|
gboolean has_paint_volume_override_effects;
|
||||||
ClutterActorPrivate *priv;
|
ClutterActorPrivate *priv;
|
||||||
|
|
||||||
priv = self->priv;
|
priv = self->priv;
|
||||||
|
|
||||||
|
has_paint_volume_override_effects = _clutter_actor_has_active_paint_volume_override_effects (self);
|
||||||
|
|
||||||
if (priv->paint_volume_valid)
|
if (priv->paint_volume_valid)
|
||||||
clutter_paint_volume_free (&priv->paint_volume);
|
{
|
||||||
|
/* If effects are applied, the actor paint volume
|
||||||
|
* needs to be recomputed on each paint, since those
|
||||||
|
* paint volumes could change over the duration of the
|
||||||
|
* effect.
|
||||||
|
*
|
||||||
|
* We also need to update the paint volume if we went
|
||||||
|
* from having effects to not having effects on the last
|
||||||
|
* paint volume update. */
|
||||||
|
if (!priv->needs_paint_volume_update &&
|
||||||
|
priv->current_effect == NULL &&
|
||||||
|
!has_paint_volume_override_effects &&
|
||||||
|
!priv->had_effects_on_last_paint_volume_update)
|
||||||
|
return &priv->paint_volume;
|
||||||
|
clutter_paint_volume_free (&priv->paint_volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
priv->had_effects_on_last_paint_volume_update = has_paint_volume_override_effects;
|
||||||
|
|
||||||
if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume))
|
if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume))
|
||||||
{
|
{
|
||||||
priv->paint_volume_valid = TRUE;
|
priv->paint_volume_valid = TRUE;
|
||||||
|
priv->needs_paint_volume_update = FALSE;
|
||||||
return &priv->paint_volume;
|
return &priv->paint_volume;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -20672,29 +20758,31 @@ clutter_actor_get_child_transform (ClutterActor *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_actor_push_in_cloned_branch (ClutterActor *self)
|
clutter_actor_push_in_cloned_branch (ClutterActor *self,
|
||||||
|
gulong count)
|
||||||
{
|
{
|
||||||
ClutterActor *iter;
|
ClutterActor *iter;
|
||||||
|
|
||||||
for (iter = self->priv->first_child;
|
for (iter = self->priv->first_child;
|
||||||
iter != NULL;
|
iter != NULL;
|
||||||
iter = iter->priv->next_sibling)
|
iter = iter->priv->next_sibling)
|
||||||
clutter_actor_push_in_cloned_branch (iter);
|
clutter_actor_push_in_cloned_branch (iter, count);
|
||||||
|
|
||||||
self->priv->in_cloned_branch += 1;
|
self->priv->in_cloned_branch += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_actor_pop_in_cloned_branch (ClutterActor *self)
|
clutter_actor_pop_in_cloned_branch (ClutterActor *self,
|
||||||
|
gulong count)
|
||||||
{
|
{
|
||||||
ClutterActor *iter;
|
ClutterActor *iter;
|
||||||
|
|
||||||
self->priv->in_cloned_branch -= 1;
|
self->priv->in_cloned_branch -= count;
|
||||||
|
|
||||||
for (iter = self->priv->first_child;
|
for (iter = self->priv->first_child;
|
||||||
iter != NULL;
|
iter != NULL;
|
||||||
iter = iter->priv->next_sibling)
|
iter = iter->priv->next_sibling)
|
||||||
clutter_actor_pop_in_cloned_branch (iter);
|
clutter_actor_pop_in_cloned_branch (iter, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -20710,7 +20798,7 @@ _clutter_actor_attach_clone (ClutterActor *actor,
|
|||||||
|
|
||||||
g_hash_table_add (priv->clones, clone);
|
g_hash_table_add (priv->clones, clone);
|
||||||
|
|
||||||
clutter_actor_push_in_cloned_branch (actor);
|
clutter_actor_push_in_cloned_branch (actor, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -20725,7 +20813,7 @@ _clutter_actor_detach_clone (ClutterActor *actor,
|
|||||||
g_hash_table_lookup (priv->clones, clone) == NULL)
|
g_hash_table_lookup (priv->clones, clone) == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
clutter_actor_pop_in_cloned_branch (actor);
|
clutter_actor_pop_in_cloned_branch (actor, 1);
|
||||||
|
|
||||||
g_hash_table_remove (priv->clones, clone);
|
g_hash_table_remove (priv->clones, clone);
|
||||||
|
|
||||||
|
@@ -856,8 +856,6 @@ CLUTTER_AVAILABLE_IN_1_10
|
|||||||
void clutter_actor_remove_all_transitions (ClutterActor *self);
|
void clutter_actor_remove_all_transitions (ClutterActor *self);
|
||||||
|
|
||||||
|
|
||||||
/* Experimental API */
|
|
||||||
#ifdef CLUTTER_ENABLE_EXPERIMENTAL_API
|
|
||||||
CLUTTER_AVAILABLE_IN_1_16
|
CLUTTER_AVAILABLE_IN_1_16
|
||||||
gboolean clutter_actor_has_mapped_clones (ClutterActor *self);
|
gboolean clutter_actor_has_mapped_clones (ClutterActor *self);
|
||||||
CLUTTER_AVAILABLE_IN_1_22
|
CLUTTER_AVAILABLE_IN_1_22
|
||||||
@@ -865,7 +863,6 @@ void clutter_actor_set_opacity_override
|
|||||||
gint opacity);
|
gint opacity);
|
||||||
CLUTTER_AVAILABLE_IN_1_22
|
CLUTTER_AVAILABLE_IN_1_22
|
||||||
gint clutter_actor_get_opacity_override (ClutterActor *self);
|
gint clutter_actor_get_opacity_override (ClutterActor *self);
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterActorCreateChildFunc:
|
* ClutterActorCreateChildFunc:
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-align-constraint.h"
|
#include "clutter-align-constraint.h"
|
||||||
|
@@ -46,7 +46,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
@@ -58,6 +58,8 @@ struct _ClutterBackend
|
|||||||
gint32 units_serial;
|
gint32 units_serial;
|
||||||
|
|
||||||
GList *event_translators;
|
GList *event_translators;
|
||||||
|
|
||||||
|
ClutterInputMethod *input_method;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _ClutterBackendClass
|
struct _ClutterBackendClass
|
||||||
@@ -65,8 +67,6 @@ struct _ClutterBackendClass
|
|||||||
/*< private >*/
|
/*< private >*/
|
||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
|
|
||||||
GType stage_window_type;
|
|
||||||
|
|
||||||
/* vfuncs */
|
/* vfuncs */
|
||||||
gboolean (* pre_parse) (ClutterBackend *backend,
|
gboolean (* pre_parse) (ClutterBackend *backend,
|
||||||
GError **error);
|
GError **error);
|
||||||
@@ -88,8 +88,6 @@ struct _ClutterBackendClass
|
|||||||
GError **error);
|
GError **error);
|
||||||
gboolean (* create_context) (ClutterBackend *backend,
|
gboolean (* create_context) (ClutterBackend *backend,
|
||||||
GError **error);
|
GError **error);
|
||||||
void (* ensure_context) (ClutterBackend *backend,
|
|
||||||
ClutterStage *stage);
|
|
||||||
ClutterDeviceManager *(* get_device_manager) (ClutterBackend *backend);
|
ClutterDeviceManager *(* get_device_manager) (ClutterBackend *backend);
|
||||||
|
|
||||||
void (* copy_event_data) (ClutterBackend *backend,
|
void (* copy_event_data) (ClutterBackend *backend,
|
||||||
@@ -104,6 +102,8 @@ struct _ClutterBackendClass
|
|||||||
|
|
||||||
PangoDirection (* get_keymap_direction) (ClutterBackend *backend);
|
PangoDirection (* get_keymap_direction) (ClutterBackend *backend);
|
||||||
|
|
||||||
|
void (* bell_notify) (ClutterBackend *backend);
|
||||||
|
|
||||||
/* signals */
|
/* signals */
|
||||||
void (* resolution_changed) (ClutterBackend *backend);
|
void (* resolution_changed) (ClutterBackend *backend);
|
||||||
void (* font_changed) (ClutterBackend *backend);
|
void (* font_changed) (ClutterBackend *backend);
|
||||||
@@ -115,10 +115,6 @@ ClutterBackend * _clutter_create_backend (void);
|
|||||||
ClutterStageWindow * _clutter_backend_create_stage (ClutterBackend *backend,
|
ClutterStageWindow * _clutter_backend_create_stage (ClutterBackend *backend,
|
||||||
ClutterStage *wrapper,
|
ClutterStage *wrapper,
|
||||||
GError **error);
|
GError **error);
|
||||||
void _clutter_backend_ensure_context (ClutterBackend *backend,
|
|
||||||
ClutterStage *stage);
|
|
||||||
void _clutter_backend_ensure_context_internal (ClutterBackend *backend,
|
|
||||||
ClutterStage *stage);
|
|
||||||
gboolean _clutter_backend_create_context (ClutterBackend *backend,
|
gboolean _clutter_backend_create_context (ClutterBackend *backend,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
@@ -138,8 +134,11 @@ void _clutter_backend_free_event_data (Clutter
|
|||||||
gboolean _clutter_backend_translate_event (ClutterBackend *backend,
|
gboolean _clutter_backend_translate_event (ClutterBackend *backend,
|
||||||
gpointer native,
|
gpointer native,
|
||||||
ClutterEvent *event);
|
ClutterEvent *event);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
void _clutter_backend_add_event_translator (ClutterBackend *backend,
|
void _clutter_backend_add_event_translator (ClutterBackend *backend,
|
||||||
ClutterEventTranslator *translator);
|
ClutterEventTranslator *translator);
|
||||||
|
|
||||||
void _clutter_backend_remove_event_translator (ClutterBackend *backend,
|
void _clutter_backend_remove_event_translator (ClutterBackend *backend,
|
||||||
ClutterEventTranslator *translator);
|
ClutterEventTranslator *translator);
|
||||||
|
|
||||||
@@ -151,6 +150,7 @@ gint32 _clutter_backend_get_units_serial (Clutter
|
|||||||
|
|
||||||
PangoDirection _clutter_backend_get_keymap_direction (ClutterBackend *backend);
|
PangoDirection _clutter_backend_get_keymap_direction (ClutterBackend *backend);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
void _clutter_backend_reset_cogl_framebuffer (ClutterBackend *backend);
|
void _clutter_backend_reset_cogl_framebuffer (ClutterBackend *backend);
|
||||||
|
|
||||||
void clutter_set_allowed_drivers (const char *drivers);
|
void clutter_set_allowed_drivers (const char *drivers);
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
#include "clutter-debug.h"
|
#include "clutter-debug.h"
|
||||||
#include "clutter-event-private.h"
|
#include "clutter-event-private.h"
|
||||||
#include "clutter-marshal.h"
|
#include "clutter-marshal.h"
|
||||||
|
#include "clutter-mutter.h"
|
||||||
#include "clutter-private.h"
|
#include "clutter-private.h"
|
||||||
#include "clutter-stage-manager-private.h"
|
#include "clutter-stage-manager-private.h"
|
||||||
#include "clutter-stage-private.h"
|
#include "clutter-stage-private.h"
|
||||||
@@ -126,6 +127,7 @@ clutter_backend_finalize (GObject *gobject)
|
|||||||
|
|
||||||
g_free (backend->font_name);
|
g_free (backend->font_name);
|
||||||
clutter_backend_set_font_options (backend, NULL);
|
clutter_backend_set_font_options (backend, NULL);
|
||||||
|
g_clear_object (&backend->input_method);
|
||||||
|
|
||||||
G_OBJECT_CLASS (clutter_backend_parent_class)->finalize (gobject);
|
G_OBJECT_CLASS (clutter_backend_parent_class)->finalize (gobject);
|
||||||
}
|
}
|
||||||
@@ -230,31 +232,17 @@ clutter_backend_do_real_create_context (ClutterBackend *backend,
|
|||||||
CoglSwapChain *swap_chain;
|
CoglSwapChain *swap_chain;
|
||||||
GError *internal_error;
|
GError *internal_error;
|
||||||
|
|
||||||
if (backend->cogl_context != NULL)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
klass = CLUTTER_BACKEND_GET_CLASS (backend);
|
klass = CLUTTER_BACKEND_GET_CLASS (backend);
|
||||||
|
|
||||||
swap_chain = NULL;
|
swap_chain = NULL;
|
||||||
internal_error = NULL;
|
internal_error = NULL;
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND, "Creating Cogl renderer");
|
CLUTTER_NOTE (BACKEND, "Creating Cogl renderer");
|
||||||
if (klass->get_renderer != NULL)
|
backend->cogl_renderer = klass->get_renderer (backend, &internal_error);
|
||||||
backend->cogl_renderer = klass->get_renderer (backend, &internal_error);
|
|
||||||
else
|
|
||||||
backend->cogl_renderer = cogl_renderer_new ();
|
|
||||||
|
|
||||||
if (backend->cogl_renderer == NULL)
|
if (backend->cogl_renderer == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
#ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT
|
|
||||||
/* If the application is trying to act as a Wayland compositor then
|
|
||||||
it needs to have an EGL-based renderer backend */
|
|
||||||
if (_wayland_compositor_display)
|
|
||||||
cogl_renderer_add_constraint (backend->cogl_renderer,
|
|
||||||
COGL_RENDERER_CONSTRAINT_USES_EGL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND, "Connecting the renderer");
|
CLUTTER_NOTE (BACKEND, "Connecting the renderer");
|
||||||
cogl_renderer_set_driver (backend->cogl_renderer, driver_id);
|
cogl_renderer_set_driver (backend->cogl_renderer, driver_id);
|
||||||
if (!cogl_renderer_connect (backend->cogl_renderer, &internal_error))
|
if (!cogl_renderer_connect (backend->cogl_renderer, &internal_error))
|
||||||
@@ -361,6 +349,9 @@ clutter_backend_real_create_context (ClutterBackend *backend,
|
|||||||
gboolean allow_any;
|
gboolean allow_any;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (backend->cogl_context != NULL)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
if (allowed_drivers == NULL)
|
if (allowed_drivers == NULL)
|
||||||
allowed_drivers = CLUTTER_DRIVERS;
|
allowed_drivers = CLUTTER_DRIVERS;
|
||||||
|
|
||||||
@@ -423,27 +414,6 @@ clutter_backend_real_create_context (ClutterBackend *backend,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
clutter_backend_real_ensure_context (ClutterBackend *backend,
|
|
||||||
ClutterStage *stage)
|
|
||||||
{
|
|
||||||
ClutterStageWindow *stage_impl;
|
|
||||||
CoglFramebuffer *framebuffer;
|
|
||||||
|
|
||||||
if (stage == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
stage_impl = _clutter_stage_get_window (stage);
|
|
||||||
if (stage_impl == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
framebuffer = _clutter_stage_window_get_active_framebuffer (stage_impl);
|
|
||||||
if (framebuffer == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cogl_set_framebuffer (framebuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ClutterFeatureFlags
|
static ClutterFeatureFlags
|
||||||
clutter_backend_real_get_features (ClutterBackend *backend)
|
clutter_backend_real_get_features (ClutterBackend *backend)
|
||||||
{
|
{
|
||||||
@@ -477,39 +447,10 @@ clutter_backend_real_get_features (ClutterBackend *backend)
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ClutterStageWindow *
|
|
||||||
clutter_backend_real_create_stage (ClutterBackend *backend,
|
|
||||||
ClutterStage *wrapper,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
ClutterBackendClass *klass;
|
|
||||||
|
|
||||||
if (!clutter_feature_available (CLUTTER_FEATURE_STAGE_MULTIPLE))
|
|
||||||
{
|
|
||||||
ClutterStageManager *manager = clutter_stage_manager_get_default ();
|
|
||||||
|
|
||||||
if (clutter_stage_manager_get_default_stage (manager) != NULL)
|
|
||||||
{
|
|
||||||
g_set_error (error, CLUTTER_INIT_ERROR,
|
|
||||||
CLUTTER_INIT_ERROR_BACKEND,
|
|
||||||
_("The backend of type '%s' does not support "
|
|
||||||
"creating multiple stages"),
|
|
||||||
G_OBJECT_TYPE_NAME (backend));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
klass = CLUTTER_BACKEND_GET_CLASS (backend);
|
|
||||||
g_assert (klass->stage_window_type != G_TYPE_INVALID);
|
|
||||||
|
|
||||||
return g_object_new (klass->stage_window_type,
|
|
||||||
"backend", backend,
|
|
||||||
"wrapper", wrapper,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *allowed_backends;
|
static const char *allowed_backends;
|
||||||
|
|
||||||
|
static ClutterBackend * (* custom_backend_func) (void);
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
ClutterBackend * (* create_backend) (void);
|
ClutterBackend * (* create_backend) (void);
|
||||||
@@ -517,15 +458,18 @@ static const struct {
|
|||||||
#ifdef CLUTTER_WINDOWING_X11
|
#ifdef CLUTTER_WINDOWING_X11
|
||||||
{ CLUTTER_WINDOWING_X11, clutter_backend_x11_new },
|
{ CLUTTER_WINDOWING_X11, clutter_backend_x11_new },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CLUTTER_WINDOWING_WAYLAND
|
|
||||||
{ CLUTTER_WINDOWING_WAYLAND, clutter_backend_wayland_new },
|
|
||||||
#endif
|
|
||||||
#ifdef CLUTTER_WINDOWING_EGL
|
#ifdef CLUTTER_WINDOWING_EGL
|
||||||
{ CLUTTER_WINDOWING_EGL, clutter_backend_egl_native_new },
|
{ CLUTTER_WINDOWING_EGL, clutter_backend_egl_native_new },
|
||||||
#endif
|
#endif
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_set_custom_backend_func (ClutterBackend *(* func) (void))
|
||||||
|
{
|
||||||
|
custom_backend_func = func;
|
||||||
|
}
|
||||||
|
|
||||||
ClutterBackend *
|
ClutterBackend *
|
||||||
_clutter_create_backend (void)
|
_clutter_create_backend (void)
|
||||||
{
|
{
|
||||||
@@ -535,6 +479,16 @@ _clutter_create_backend (void)
|
|||||||
char **backends;
|
char **backends;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (custom_backend_func)
|
||||||
|
{
|
||||||
|
retval = custom_backend_func ();
|
||||||
|
|
||||||
|
if (!retval)
|
||||||
|
g_error ("Failed to create custom backend.");
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
if (allowed_backends == NULL)
|
if (allowed_backends == NULL)
|
||||||
allowed_backends = "*";
|
allowed_backends = "*";
|
||||||
|
|
||||||
@@ -662,8 +616,6 @@ clutter_backend_class_init (ClutterBackendClass *klass)
|
|||||||
gobject_class->dispose = clutter_backend_dispose;
|
gobject_class->dispose = clutter_backend_dispose;
|
||||||
gobject_class->finalize = clutter_backend_finalize;
|
gobject_class->finalize = clutter_backend_finalize;
|
||||||
|
|
||||||
klass->stage_window_type = G_TYPE_INVALID;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterBackend::resolution-changed:
|
* ClutterBackend::resolution-changed:
|
||||||
* @backend: the #ClutterBackend that emitted the signal
|
* @backend: the #ClutterBackend that emitted the signal
|
||||||
@@ -725,9 +677,7 @@ clutter_backend_class_init (ClutterBackendClass *klass)
|
|||||||
klass->get_device_manager = clutter_backend_real_get_device_manager;
|
klass->get_device_manager = clutter_backend_real_get_device_manager;
|
||||||
klass->translate_event = clutter_backend_real_translate_event;
|
klass->translate_event = clutter_backend_real_translate_event;
|
||||||
klass->create_context = clutter_backend_real_create_context;
|
klass->create_context = clutter_backend_real_create_context;
|
||||||
klass->ensure_context = clutter_backend_real_ensure_context;
|
|
||||||
klass->get_features = clutter_backend_real_get_features;
|
klass->get_features = clutter_backend_real_get_features;
|
||||||
klass->create_stage = clutter_backend_real_create_stage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -818,87 +768,6 @@ _clutter_backend_create_context (ClutterBackend *backend,
|
|||||||
return klass->create_context (backend, error);
|
return klass->create_context (backend, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_clutter_backend_ensure_context_internal (ClutterBackend *backend,
|
|
||||||
ClutterStage *stage)
|
|
||||||
{
|
|
||||||
ClutterBackendClass *klass = CLUTTER_BACKEND_GET_CLASS (backend);
|
|
||||||
if (G_LIKELY (klass->ensure_context))
|
|
||||||
klass->ensure_context (backend, stage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_clutter_backend_ensure_context (ClutterBackend *backend,
|
|
||||||
ClutterStage *stage)
|
|
||||||
{
|
|
||||||
static ClutterStage *current_context_stage = NULL;
|
|
||||||
|
|
||||||
g_assert (CLUTTER_IS_BACKEND (backend));
|
|
||||||
g_assert (CLUTTER_IS_STAGE (stage));
|
|
||||||
|
|
||||||
if (current_context_stage != stage ||
|
|
||||||
!clutter_actor_is_realized (CLUTTER_ACTOR (stage)))
|
|
||||||
{
|
|
||||||
ClutterStage *new_stage = NULL;
|
|
||||||
|
|
||||||
if (!clutter_actor_is_realized (CLUTTER_ACTOR (stage)))
|
|
||||||
{
|
|
||||||
new_stage = NULL;
|
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND,
|
|
||||||
"Stage [%p] is not realized, unsetting the stage",
|
|
||||||
stage);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
new_stage = stage;
|
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND,
|
|
||||||
"Setting the new stage [%p]",
|
|
||||||
new_stage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX: Until Cogl becomes fully responsible for backend windows
|
|
||||||
* Clutter need to manually keep it informed of the current window size
|
|
||||||
*
|
|
||||||
* NB: This must be done after we ensure_context above because Cogl
|
|
||||||
* always assumes there is a current GL context.
|
|
||||||
*/
|
|
||||||
if (new_stage != NULL)
|
|
||||||
{
|
|
||||||
float width, height;
|
|
||||||
|
|
||||||
_clutter_backend_ensure_context_internal (backend, new_stage);
|
|
||||||
|
|
||||||
clutter_actor_get_size (CLUTTER_ACTOR (stage), &width, &height);
|
|
||||||
|
|
||||||
cogl_onscreen_clutter_backend_set_size (width, height);
|
|
||||||
|
|
||||||
/* Eventually we will have a separate CoglFramebuffer for
|
|
||||||
* each stage and each one will track private projection
|
|
||||||
* matrix and viewport state, but until then we need to make
|
|
||||||
* sure we update the projection and viewport whenever we
|
|
||||||
* switch between stages.
|
|
||||||
*
|
|
||||||
* This dirty mechanism will ensure they are asserted before
|
|
||||||
* the next paint...
|
|
||||||
*/
|
|
||||||
_clutter_stage_dirty_viewport (stage);
|
|
||||||
_clutter_stage_dirty_projection (stage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: With a NULL stage and thus no active context it may make more
|
|
||||||
* sense to clean the context but then re call with the default stage
|
|
||||||
* so at least there is some kind of context in place (as to avoid
|
|
||||||
* potential issue of GL calls with no context).
|
|
||||||
*/
|
|
||||||
current_context_stage = new_stage;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
CLUTTER_NOTE (BACKEND, "Stage is the same");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ClutterFeatureFlags
|
ClutterFeatureFlags
|
||||||
_clutter_backend_get_features (ClutterBackend *backend)
|
_clutter_backend_get_features (ClutterBackend *backend)
|
||||||
{
|
{
|
||||||
@@ -1346,7 +1215,7 @@ _clutter_backend_remove_event_translator (ClutterBackend *backend,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_backend_get_cogl_context:
|
* clutter_backend_get_cogl_context: (skip)
|
||||||
* @backend: a #ClutterBackend
|
* @backend: a #ClutterBackend
|
||||||
*
|
*
|
||||||
* Retrieves the #CoglContext associated with the given clutter
|
* Retrieves the #CoglContext associated with the given clutter
|
||||||
@@ -1495,3 +1364,41 @@ clutter_set_allowed_drivers (const char *drivers)
|
|||||||
|
|
||||||
allowed_drivers = g_strdup (drivers);
|
allowed_drivers = g_strdup (drivers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_backend_bell_notify (ClutterBackend *backend)
|
||||||
|
{
|
||||||
|
ClutterBackendClass *klass;
|
||||||
|
|
||||||
|
klass = CLUTTER_BACKEND_GET_CLASS (backend);
|
||||||
|
if (klass->bell_notify)
|
||||||
|
klass->bell_notify (backend);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_backend_get_input_method:
|
||||||
|
* @backend: the #CLutterBackend
|
||||||
|
*
|
||||||
|
* Returns the input method used by Clutter
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the input method
|
||||||
|
**/
|
||||||
|
ClutterInputMethod *
|
||||||
|
clutter_backend_get_input_method (ClutterBackend *backend)
|
||||||
|
{
|
||||||
|
return backend->input_method;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_backend_set_input_method:
|
||||||
|
* @backend: the #ClutterBackend
|
||||||
|
* @method: the input method
|
||||||
|
*
|
||||||
|
* Sets the input method to be used by Clutter
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
clutter_backend_set_input_method (ClutterBackend *backend,
|
||||||
|
ClutterInputMethod *method)
|
||||||
|
{
|
||||||
|
g_set_object (&backend->input_method, method);
|
||||||
|
}
|
||||||
|
@@ -31,9 +31,7 @@
|
|||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
#include <pango/pango.h>
|
#include <pango/pango.h>
|
||||||
|
|
||||||
#ifdef COGL_ENABLE_EXPERIMENTAL_API
|
|
||||||
#include <cogl/cogl.h>
|
#include <cogl/cogl.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <clutter/clutter-config.h>
|
#include <clutter/clutter-config.h>
|
||||||
#include <clutter/clutter-types.h>
|
#include <clutter/clutter-types.h>
|
||||||
@@ -73,11 +71,18 @@ void clutter_backend_set_font_options (Clutter
|
|||||||
CLUTTER_AVAILABLE_IN_ALL
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
const cairo_font_options_t * clutter_backend_get_font_options (ClutterBackend *backend);
|
const cairo_font_options_t * clutter_backend_get_font_options (ClutterBackend *backend);
|
||||||
|
|
||||||
#if defined (COGL_ENABLE_EXPERIMENTAL_API) && defined (CLUTTER_ENABLE_EXPERIMENTAL_API)
|
|
||||||
CLUTTER_AVAILABLE_IN_1_8
|
CLUTTER_AVAILABLE_IN_1_8
|
||||||
CoglContext * clutter_backend_get_cogl_context (ClutterBackend *backend);
|
CoglContext * clutter_backend_get_cogl_context (ClutterBackend *backend);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
void clutter_backend_bell_notify (ClutterBackend *backend);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
ClutterInputMethod * clutter_backend_get_input_method (ClutterBackend *backend);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_backend_set_input_method (ClutterBackend *backend,
|
||||||
|
ClutterInputMethod *method);
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_BACKEND_H__ */
|
#endif /* __CLUTTER_BACKEND_H__ */
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-types.h"
|
#include "clutter-types.h"
|
||||||
|
@@ -21,6 +21,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "clutter-bezier.h"
|
#include "clutter-bezier.h"
|
||||||
@@ -57,6 +59,10 @@
|
|||||||
#define CBZ_T_STEP (CBZ_T_ONE / CBZ_T_SAMPLES)
|
#define CBZ_T_STEP (CBZ_T_ONE / CBZ_T_SAMPLES)
|
||||||
#define CBZ_L_STEP (CBZ_T_ONE / CBZ_T_SAMPLES)
|
#define CBZ_L_STEP (CBZ_T_ONE / CBZ_T_SAMPLES)
|
||||||
|
|
||||||
|
#define FIXED_BITS (32)
|
||||||
|
#define FIXED_Q (FIXED_BITS - 16)
|
||||||
|
#define FIXED_FROM_INT(x) ((x) << FIXED_Q)
|
||||||
|
|
||||||
typedef gint32 _FixedT;
|
typedef gint32 _FixedT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -186,6 +192,90 @@ _clutter_bezier_advance (const ClutterBezier *b, gint L, ClutterKnot * knot)
|
|||||||
knot->x, knot->y);
|
knot->x, knot->y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
sqrti (int number)
|
||||||
|
{
|
||||||
|
#if defined __SSE2__
|
||||||
|
/* The GCC built-in with SSE2 (sqrtsd) is up to twice as fast as
|
||||||
|
* the pure integer code below. It is also more accurate.
|
||||||
|
*/
|
||||||
|
return __builtin_sqrt (number);
|
||||||
|
#else
|
||||||
|
/* This is a fixed point implementation of the Quake III sqrt algorithm,
|
||||||
|
* described, for example, at
|
||||||
|
* http://www.codemaestro.com/reviews/review00000105.html
|
||||||
|
*
|
||||||
|
* While the original QIII is extremely fast, the use of floating division
|
||||||
|
* and multiplication makes it perform very on arm processors without FPU.
|
||||||
|
*
|
||||||
|
* The key to successfully replacing the floating point operations with
|
||||||
|
* fixed point is in the choice of the fixed point format. The QIII
|
||||||
|
* algorithm does not calculate the square root, but its reciprocal ('y'
|
||||||
|
* below), which is only at the end turned to the inverse value. In order
|
||||||
|
* for the algorithm to produce satisfactory results, the reciprocal value
|
||||||
|
* must be represented with sufficient precission; the 16.16 we use
|
||||||
|
* elsewhere in clutter is not good enough, and 10.22 is used instead.
|
||||||
|
*/
|
||||||
|
_FixedT x;
|
||||||
|
uint32_t y_1; /* 10.22 fixed point */
|
||||||
|
uint32_t f = 0x600000; /* '1.5' as 10.22 fixed */
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
float f;
|
||||||
|
uint32_t i;
|
||||||
|
} flt, flt2;
|
||||||
|
|
||||||
|
flt.f = number;
|
||||||
|
|
||||||
|
x = FIXED_FROM_INT (number) / 2;
|
||||||
|
|
||||||
|
/* The QIII initial estimate */
|
||||||
|
flt.i = 0x5f3759df - ( flt.i >> 1 );
|
||||||
|
|
||||||
|
/* Now, we convert the float to 10.22 fixed. We exploit the mechanism
|
||||||
|
* described at http://www.d6.com/users/checker/pdfs/gdmfp.pdf.
|
||||||
|
*
|
||||||
|
* We want 22 bit fraction; a single precission float uses 23 bit
|
||||||
|
* mantisa, so we only need to add 2^(23-22) (no need for the 1.5
|
||||||
|
* multiplier as we are only dealing with positive numbers).
|
||||||
|
*
|
||||||
|
* Note: we have to use two separate variables here -- for some reason,
|
||||||
|
* if we try to use just the flt variable, gcc on ARM optimises the whole
|
||||||
|
* addition out, and it all goes pear shape, since without it, the bits
|
||||||
|
* in the float will not be correctly aligned.
|
||||||
|
*/
|
||||||
|
flt2.f = flt.f + 2.0;
|
||||||
|
flt2.i &= 0x7FFFFF;
|
||||||
|
|
||||||
|
/* Now we correct the estimate */
|
||||||
|
y_1 = (flt2.i >> 11) * (flt2.i >> 11);
|
||||||
|
y_1 = (y_1 >> 8) * (x >> 8);
|
||||||
|
|
||||||
|
y_1 = f - y_1;
|
||||||
|
flt2.i = (flt2.i >> 11) * (y_1 >> 11);
|
||||||
|
|
||||||
|
/* If the original argument is less than 342, we do another
|
||||||
|
* iteration to improve precission (for arguments >= 342, the single
|
||||||
|
* iteration produces generally better results).
|
||||||
|
*/
|
||||||
|
if (x < 171)
|
||||||
|
{
|
||||||
|
y_1 = (flt2.i >> 11) * (flt2.i >> 11);
|
||||||
|
y_1 = (y_1 >> 8) * (x >> 8);
|
||||||
|
|
||||||
|
y_1 = f - y_1;
|
||||||
|
flt2.i = (flt2.i >> 11) * (y_1 >> 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Invert, round and convert from 10.22 to an integer
|
||||||
|
* 0x1e3c68 is a magical rounding constant that produces slightly
|
||||||
|
* better results than 0x200000.
|
||||||
|
*/
|
||||||
|
return (number * flt2.i + 0x1e3c68) >> 22;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_clutter_bezier_init (ClutterBezier *b,
|
_clutter_bezier_init (ClutterBezier *b,
|
||||||
gint x_0, gint y_0,
|
gint x_0, gint y_0,
|
||||||
@@ -234,7 +324,7 @@ _clutter_bezier_init (ClutterBezier *b,
|
|||||||
* triggers, we need to change those two functions a bit.
|
* triggers, we need to change those two functions a bit.
|
||||||
*/
|
*/
|
||||||
if (b->ax > 0x1fff || b->bx > 0x1fff || b->cx > 0x1fff)
|
if (b->ax > 0x1fff || b->bx > 0x1fff || b->cx > 0x1fff)
|
||||||
g_warning ("Calculated coefficents will result in multiplication "
|
g_warning ("Calculated coefficients will result in multiplication "
|
||||||
"overflow in clutter_bezier_t2x and clutter_bezier_t2y.");
|
"overflow in clutter_bezier_t2x and clutter_bezier_t2y.");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -250,7 +340,7 @@ _clutter_bezier_init (ClutterBezier *b,
|
|||||||
int x = _clutter_bezier_t2x (b, t);
|
int x = _clutter_bezier_t2x (b, t);
|
||||||
int y = _clutter_bezier_t2y (b, t);
|
int y = _clutter_bezier_t2y (b, t);
|
||||||
|
|
||||||
guint l = cogl_sqrti ((y - yp)*(y - yp) + (x - xp)*(x - xp));
|
guint l = sqrti ((y - yp)*(y - yp) + (x - xp)*(x - xp));
|
||||||
|
|
||||||
l += length[i-1];
|
l += length[i-1];
|
||||||
|
|
||||||
|
@@ -44,7 +44,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -81,7 +81,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -95,7 +95,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-binding-pool.h"
|
#include "clutter-binding-pool.h"
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
#define CLUTTER_BLUR_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BLUR_EFFECT, ClutterBlurEffectClass))
|
#define CLUTTER_BLUR_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BLUR_EFFECT, ClutterBlurEffectClass))
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
|
@@ -49,7 +49,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass))
|
#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass))
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-cairo.h"
|
#include "clutter-cairo.h"
|
||||||
|
@@ -43,7 +43,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <cogl/cogl.h>
|
#include <cogl/cogl.h>
|
||||||
@@ -76,9 +76,6 @@ struct _ClutterCanvasPrivate
|
|||||||
gboolean dirty;
|
gboolean dirty;
|
||||||
|
|
||||||
CoglBitmap *buffer;
|
CoglBitmap *buffer;
|
||||||
|
|
||||||
int scale_factor;
|
|
||||||
guint scale_factor_set : 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -87,8 +84,6 @@ enum
|
|||||||
|
|
||||||
PROP_WIDTH,
|
PROP_WIDTH,
|
||||||
PROP_HEIGHT,
|
PROP_HEIGHT,
|
||||||
PROP_SCALE_FACTOR,
|
|
||||||
PROP_SCALE_FACTOR_SET,
|
|
||||||
|
|
||||||
LAST_PROP
|
LAST_PROP
|
||||||
};
|
};
|
||||||
@@ -185,11 +180,6 @@ clutter_canvas_set_property (GObject *gobject,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_SCALE_FACTOR:
|
|
||||||
clutter_canvas_set_scale_factor (CLUTTER_CANVAS (gobject),
|
|
||||||
g_value_get_int (value));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -214,17 +204,6 @@ clutter_canvas_get_property (GObject *gobject,
|
|||||||
g_value_set_int (value, priv->height);
|
g_value_set_int (value, priv->height);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_SCALE_FACTOR:
|
|
||||||
if (priv->scale_factor_set)
|
|
||||||
g_value_set_int (value, priv->scale_factor);
|
|
||||||
else
|
|
||||||
g_value_set_int (value, -1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SCALE_FACTOR_SET:
|
|
||||||
g_value_set_boolean (value, priv->scale_factor_set);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -268,46 +247,6 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
|
|||||||
G_PARAM_READWRITE |
|
G_PARAM_READWRITE |
|
||||||
G_PARAM_STATIC_STRINGS);
|
G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
/**
|
|
||||||
* ClutterCanvas:scale-factor-set:
|
|
||||||
*
|
|
||||||
* Whether the #ClutterCanvas:scale-factor property is set.
|
|
||||||
*
|
|
||||||
* If the #ClutterCanvas:scale-factor-set property is %FALSE
|
|
||||||
* then #ClutterCanvas will use the #ClutterSettings:window-scaling-factor
|
|
||||||
* property.
|
|
||||||
*
|
|
||||||
* Since: 1.18
|
|
||||||
*/
|
|
||||||
obj_props[PROP_SCALE_FACTOR_SET] =
|
|
||||||
g_param_spec_boolean ("scale-factor-set",
|
|
||||||
P_("Scale Factor Set"),
|
|
||||||
P_("Whether the scale-factor property is set"),
|
|
||||||
FALSE,
|
|
||||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ClutterCanvas:scale-factor:
|
|
||||||
*
|
|
||||||
* The scaling factor to be applied to the Cairo surface used for
|
|
||||||
* drawing.
|
|
||||||
*
|
|
||||||
* If #ClutterCanvas:scale-factor is set to a negative value, the
|
|
||||||
* value of the #ClutterSettings:window-scaling-factor property is
|
|
||||||
* used instead.
|
|
||||||
*
|
|
||||||
* Use #ClutterCanvas:scale-factor-set to check if the scale factor
|
|
||||||
* is set.
|
|
||||||
*
|
|
||||||
* Since: 1.18
|
|
||||||
*/
|
|
||||||
obj_props[PROP_SCALE_FACTOR] =
|
|
||||||
g_param_spec_int ("scale-factor",
|
|
||||||
P_("Scale Factor"),
|
|
||||||
P_("The scaling factor for the surface"),
|
|
||||||
-1, 1000,
|
|
||||||
-1,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterCanvas::draw:
|
* ClutterCanvas::draw:
|
||||||
@@ -354,7 +293,6 @@ clutter_canvas_init (ClutterCanvas *self)
|
|||||||
|
|
||||||
self->priv->width = -1;
|
self->priv->width = -1;
|
||||||
self->priv->height = -1;
|
self->priv->height = -1;
|
||||||
self->priv->scale_factor = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -397,28 +335,18 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
|
|||||||
gboolean mapped_buffer;
|
gboolean mapped_buffer;
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
CoglBuffer *buffer;
|
CoglBuffer *buffer;
|
||||||
int window_scale = 1;
|
|
||||||
gboolean res;
|
gboolean res;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
g_assert (priv->width > 0 && priv->width > 0);
|
g_assert (priv->height > 0 && priv->width > 0);
|
||||||
|
|
||||||
priv->dirty = TRUE;
|
priv->dirty = TRUE;
|
||||||
|
|
||||||
if (priv->scale_factor_set)
|
real_width = priv->width;
|
||||||
window_scale = priv->scale_factor;
|
real_height = priv->height;
|
||||||
else
|
|
||||||
g_object_get (clutter_settings_get_default (),
|
|
||||||
"window-scaling-factor", &window_scale,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
real_width = priv->width * window_scale;
|
CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d",
|
||||||
real_height = priv->height * window_scale;
|
priv->width, priv->height);
|
||||||
|
|
||||||
CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d (real: %d x %d, scale: %d)",
|
|
||||||
priv->width, priv->height,
|
|
||||||
real_width, real_height,
|
|
||||||
window_scale);
|
|
||||||
|
|
||||||
if (priv->buffer == NULL)
|
if (priv->buffer == NULL)
|
||||||
{
|
{
|
||||||
@@ -461,8 +389,6 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
|
|||||||
mapped_buffer = FALSE;
|
mapped_buffer = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_surface_set_device_scale (surface, window_scale, window_scale);
|
|
||||||
|
|
||||||
self->priv->cr = cr = cairo_create (surface);
|
self->priv->cr = cr = cairo_create (surface);
|
||||||
|
|
||||||
g_signal_emit (self, canvas_signals[DRAW], 0,
|
g_signal_emit (self, canvas_signals[DRAW], 0,
|
||||||
@@ -636,81 +562,3 @@ clutter_canvas_set_size (ClutterCanvas *canvas,
|
|||||||
|
|
||||||
return clutter_canvas_invalidate_internal (canvas, width, height);
|
return clutter_canvas_invalidate_internal (canvas, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* clutter_canvas_set_scale_factor:
|
|
||||||
* @canvas: a #ClutterCanvas
|
|
||||||
* @scale: the scale factor, or -1 for the default
|
|
||||||
*
|
|
||||||
* Sets the scaling factor for the Cairo surface used by @canvas.
|
|
||||||
*
|
|
||||||
* This function should rarely be used.
|
|
||||||
*
|
|
||||||
* The default scaling factor of a #ClutterCanvas content uses the
|
|
||||||
* #ClutterSettings:window-scaling-factor property, which is set by
|
|
||||||
* the windowing system. By using this function it is possible to
|
|
||||||
* override that setting.
|
|
||||||
*
|
|
||||||
* Changing the scale factor will invalidate the @canvas.
|
|
||||||
*
|
|
||||||
* Since: 1.18
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
|
|
||||||
int scale)
|
|
||||||
{
|
|
||||||
ClutterCanvasPrivate *priv;
|
|
||||||
GObject *obj;
|
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_CANVAS (canvas));
|
|
||||||
g_return_if_fail (scale != 0);
|
|
||||||
|
|
||||||
priv = canvas->priv;
|
|
||||||
|
|
||||||
if (scale < 0)
|
|
||||||
{
|
|
||||||
if (!priv->scale_factor_set)
|
|
||||||
return;
|
|
||||||
|
|
||||||
priv->scale_factor_set = FALSE;
|
|
||||||
priv->scale_factor = -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (priv->scale_factor_set && priv->scale_factor == scale)
|
|
||||||
return;
|
|
||||||
|
|
||||||
priv->scale_factor_set = TRUE;
|
|
||||||
priv->scale_factor = scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_content_invalidate (CLUTTER_CONTENT (canvas));
|
|
||||||
|
|
||||||
obj = G_OBJECT (canvas);
|
|
||||||
|
|
||||||
g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR]);
|
|
||||||
g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR_SET]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clutter_canvas_get_scale_factor:
|
|
||||||
* @canvas: a #ClutterCanvas
|
|
||||||
*
|
|
||||||
* Retrieves the scaling factor of @canvas, as set using
|
|
||||||
* clutter_canvas_set_scale_factor().
|
|
||||||
*
|
|
||||||
* Return value: the scaling factor, or -1 if the @canvas
|
|
||||||
* uses the default from #ClutterSettings
|
|
||||||
*
|
|
||||||
* Since: 1.18
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
clutter_canvas_get_scale_factor (ClutterCanvas *canvas)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_CANVAS (canvas), -1);
|
|
||||||
|
|
||||||
if (!canvas->priv->scale_factor_set)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return canvas->priv->scale_factor;
|
|
||||||
}
|
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
* #ClutterChildMeta is available since Clutter 0.8
|
* #ClutterChildMeta is available since Clutter 0.8
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-child-meta.h"
|
#include "clutter-child-meta.h"
|
||||||
|
@@ -93,7 +93,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-click-action.h"
|
#include "clutter-click-action.h"
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
@@ -54,6 +54,7 @@
|
|||||||
struct _ClutterClonePrivate
|
struct _ClutterClonePrivate
|
||||||
{
|
{
|
||||||
ClutterActor *clone_source;
|
ClutterActor *clone_source;
|
||||||
|
gulong source_destroy_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR)
|
G_DEFINE_TYPE_WITH_PRIVATE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR)
|
||||||
@@ -376,6 +377,13 @@ clutter_clone_new (ClutterActor *source)
|
|||||||
return g_object_new (CLUTTER_TYPE_CLONE, "source", source, NULL);
|
return g_object_new (CLUTTER_TYPE_CLONE, "source", source, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_source_destroyed (ClutterActor *source,
|
||||||
|
ClutterClone *self)
|
||||||
|
{
|
||||||
|
clutter_clone_set_source_internal (self, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_clone_set_source_internal (ClutterClone *self,
|
clutter_clone_set_source_internal (ClutterClone *self,
|
||||||
ClutterActor *source)
|
ClutterActor *source)
|
||||||
@@ -387,6 +395,8 @@ clutter_clone_set_source_internal (ClutterClone *self,
|
|||||||
|
|
||||||
if (priv->clone_source != NULL)
|
if (priv->clone_source != NULL)
|
||||||
{
|
{
|
||||||
|
g_signal_handler_disconnect (priv->clone_source, priv->source_destroy_id);
|
||||||
|
priv->source_destroy_id = 0;
|
||||||
_clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self));
|
_clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self));
|
||||||
g_object_unref (priv->clone_source);
|
g_object_unref (priv->clone_source);
|
||||||
priv->clone_source = NULL;
|
priv->clone_source = NULL;
|
||||||
@@ -396,6 +406,8 @@ clutter_clone_set_source_internal (ClutterClone *self,
|
|||||||
{
|
{
|
||||||
priv->clone_source = g_object_ref (source);
|
priv->clone_source = g_object_ref (source);
|
||||||
_clutter_actor_attach_clone (priv->clone_source, CLUTTER_ACTOR (self));
|
_clutter_actor_attach_clone (priv->clone_source, CLUTTER_ACTOR (self));
|
||||||
|
priv->source_destroy_id = g_signal_connect (priv->clone_source, "destroy",
|
||||||
|
G_CALLBACK (on_source_destroyed), self);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_SOURCE]);
|
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_SOURCE]);
|
||||||
|
@@ -1,52 +0,0 @@
|
|||||||
/*
|
|
||||||
* Clutter.
|
|
||||||
*
|
|
||||||
* An OpenGL based 'interactive canvas' library.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 Intel Corporation.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CLUTTER_COGL_COMPAT_H__
|
|
||||||
#define __CLUTTER_COGL_COMPAT_H__
|
|
||||||
|
|
||||||
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
|
|
||||||
#error "Only <clutter/clutter.h> can be included directly."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
/* XXX: Some public Clutter apis depend on Cogl types that have been
|
|
||||||
* removed from the Cogl 2.0 experimental api.
|
|
||||||
*
|
|
||||||
* If somone has opted to use the Cogl 2.0 experimental api by
|
|
||||||
* defining COGL_ENABLE_EXPERIMENTAL_2_0_API then we need to define
|
|
||||||
* some place holder typdefs for compatability.
|
|
||||||
*
|
|
||||||
* NB: we build all clutter internals with COGL_ENABLE_EXPERIMENTAL_2_0_API
|
|
||||||
* defined.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef COGL_ENABLE_EXPERIMENTAL_2_0_API
|
|
||||||
|
|
||||||
/* CoglMaterial has been replaced with CoglPipeline in Cogl 2.0 */
|
|
||||||
typedef struct _CoglMaterial CoglMaterial;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __CLUTTER_COGL_COMPAT_H__ */
|
|
@@ -34,7 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
#include "clutter-debug.h"
|
#include "clutter-debug.h"
|
||||||
|
|
||||||
/* XXX - keep in sync with the ClutterStaticColor enumeration order */
|
/* XXX - keep in sync with the ClutterStaticColor enumeration order */
|
||||||
static const ClutterColor const static_colors[] = {
|
static const ClutterColor static_colors[] = {
|
||||||
/* CGA/EGA color palette */
|
/* CGA/EGA color palette */
|
||||||
{ 0xff, 0xff, 0xff, 0xff }, /* white */
|
{ 0xff, 0xff, 0xff, 0xff }, /* white */
|
||||||
{ 0x00, 0x00, 0x00, 0xff }, /* black */
|
{ 0x00, 0x00, 0x00, 0xff }, /* black */
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
#define CLUTTER_COLORIZE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_COLORIZE_EFFECT, ClutterColorizeEffectClass))
|
#define CLUTTER_COLORIZE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_COLORIZE_EFFECT, ClutterColorizeEffectClass))
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
|
@@ -129,7 +129,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-content-private.h"
|
#include "clutter-content-private.h"
|
||||||
|
@@ -52,7 +52,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
|
@@ -20,7 +20,6 @@
|
|||||||
#include "deprecated/clutter-box.h"
|
#include "deprecated/clutter-box.h"
|
||||||
#include "deprecated/clutter-cairo-texture.h"
|
#include "deprecated/clutter-cairo-texture.h"
|
||||||
#include "deprecated/clutter-container.h"
|
#include "deprecated/clutter-container.h"
|
||||||
#include "deprecated/clutter-fixed.h"
|
|
||||||
#include "deprecated/clutter-frame-source.h"
|
#include "deprecated/clutter-frame-source.h"
|
||||||
#include "deprecated/clutter-group.h"
|
#include "deprecated/clutter-group.h"
|
||||||
#include "deprecated/clutter-input-device.h"
|
#include "deprecated/clutter-input-device.h"
|
||||||
|
@@ -40,7 +40,7 @@
|
|||||||
#define CLUTTER_DESATURATE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DESATURATE_EFFECT, ClutterDesaturateEffectClass))
|
#define CLUTTER_DESATURATE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DESATURATE_EFFECT, ClutterDesaturateEffectClass))
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
|
@@ -131,11 +131,23 @@ struct _ClutterInputDevice
|
|||||||
|
|
||||||
gchar *vendor_id;
|
gchar *vendor_id;
|
||||||
gchar *product_id;
|
gchar *product_id;
|
||||||
|
gchar *node_path;
|
||||||
|
|
||||||
|
GPtrArray *tools;
|
||||||
|
|
||||||
|
gint n_rings;
|
||||||
|
gint n_strips;
|
||||||
|
gint n_mode_groups;
|
||||||
|
|
||||||
|
ClutterInputDeviceMapping mapping_mode;
|
||||||
|
|
||||||
guint has_cursor : 1;
|
guint has_cursor : 1;
|
||||||
guint is_enabled : 1;
|
guint is_enabled : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef void (*ClutterEmitInputDeviceEvent) (ClutterEvent *event,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
|
||||||
struct _ClutterInputDeviceClass
|
struct _ClutterInputDeviceClass
|
||||||
{
|
{
|
||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
@@ -143,6 +155,22 @@ struct _ClutterInputDeviceClass
|
|||||||
gboolean (* keycode_to_evdev) (ClutterInputDevice *device,
|
gboolean (* keycode_to_evdev) (ClutterInputDevice *device,
|
||||||
guint hardware_keycode,
|
guint hardware_keycode,
|
||||||
guint *evdev_keycode);
|
guint *evdev_keycode);
|
||||||
|
void (* update_from_tool) (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceTool *tool);
|
||||||
|
|
||||||
|
gboolean (* is_mode_switch_button) (ClutterInputDevice *device,
|
||||||
|
guint group,
|
||||||
|
guint button);
|
||||||
|
gint (* get_group_n_modes) (ClutterInputDevice *device,
|
||||||
|
gint group);
|
||||||
|
|
||||||
|
gboolean (* is_grouped) (ClutterInputDevice *device,
|
||||||
|
ClutterInputDevice *other_device);
|
||||||
|
|
||||||
|
/* Keyboard accessbility */
|
||||||
|
void (* process_kbd_a11y_event) (ClutterEvent *event,
|
||||||
|
ClutterInputDevice *device,
|
||||||
|
ClutterEmitInputDeviceEvent emit_event_func);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Platform-dependent interface */
|
/* Platform-dependent interface */
|
||||||
@@ -177,6 +205,10 @@ void _clutter_device_manager_select_stage_events (ClutterDeviceMa
|
|||||||
ClutterStage *stage);
|
ClutterStage *stage);
|
||||||
ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager);
|
ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager);
|
||||||
|
|
||||||
|
void _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manger,
|
||||||
|
ClutterEvent *event,
|
||||||
|
const ClutterEvent *to_discard);
|
||||||
|
|
||||||
/* input device */
|
/* input device */
|
||||||
gboolean _clutter_input_device_has_sequence (ClutterInputDevice *device,
|
gboolean _clutter_input_device_has_sequence (ClutterInputDevice *device,
|
||||||
ClutterEventSequence *sequence);
|
ClutterEventSequence *sequence);
|
||||||
@@ -235,6 +267,15 @@ gboolean _clutter_input_device_get_scroll_delta (ClutterInputDev
|
|||||||
ClutterScrollDirection *direction_p,
|
ClutterScrollDirection *direction_p,
|
||||||
gdouble *delta_p);
|
gdouble *delta_p);
|
||||||
|
|
||||||
|
ClutterInputDeviceTool * clutter_input_device_lookup_tool (ClutterInputDevice *device,
|
||||||
|
guint64 serial,
|
||||||
|
ClutterInputDeviceToolType type);
|
||||||
|
void clutter_input_device_add_tool (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceTool *tool);
|
||||||
|
|
||||||
|
void clutter_input_device_update_from_tool (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceTool *tool);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_DEVICE_MANAGER_PRIVATE_H__ */
|
#endif /* __CLUTTER_DEVICE_MANAGER_PRIVATE_H__ */
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-backend-private.h"
|
#include "clutter-backend-private.h"
|
||||||
@@ -47,11 +47,16 @@
|
|||||||
#include "clutter-marshal.h"
|
#include "clutter-marshal.h"
|
||||||
#include "clutter-private.h"
|
#include "clutter-private.h"
|
||||||
#include "clutter-stage-private.h"
|
#include "clutter-stage-private.h"
|
||||||
|
#include "clutter-virtual-input-device.h"
|
||||||
|
#include "clutter-input-device-tool.h"
|
||||||
|
|
||||||
struct _ClutterDeviceManagerPrivate
|
struct _ClutterDeviceManagerPrivate
|
||||||
{
|
{
|
||||||
/* back-pointer to the backend */
|
/* back-pointer to the backend */
|
||||||
ClutterBackend *backend;
|
ClutterBackend *backend;
|
||||||
|
|
||||||
|
/* Keyboard a11y */
|
||||||
|
ClutterKbdA11ySettings kbd_a11y_settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -69,6 +74,9 @@ enum
|
|||||||
{
|
{
|
||||||
DEVICE_ADDED,
|
DEVICE_ADDED,
|
||||||
DEVICE_REMOVED,
|
DEVICE_REMOVED,
|
||||||
|
TOOL_CHANGED,
|
||||||
|
KBD_A11Y_MASK_CHANGED,
|
||||||
|
KBD_A11Y_FLAGS_CHANGED,
|
||||||
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
@@ -183,6 +191,56 @@ clutter_device_manager_class_init (ClutterDeviceManagerClass *klass)
|
|||||||
_clutter_marshal_VOID__OBJECT,
|
_clutter_marshal_VOID__OBJECT,
|
||||||
G_TYPE_NONE, 1,
|
G_TYPE_NONE, 1,
|
||||||
CLUTTER_TYPE_INPUT_DEVICE);
|
CLUTTER_TYPE_INPUT_DEVICE);
|
||||||
|
|
||||||
|
manager_signals[TOOL_CHANGED] =
|
||||||
|
g_signal_new (I_("tool-changed"),
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL,
|
||||||
|
_clutter_marshal_VOID__OBJECT_OBJECT,
|
||||||
|
G_TYPE_NONE, 2,
|
||||||
|
CLUTTER_TYPE_INPUT_DEVICE,
|
||||||
|
CLUTTER_TYPE_INPUT_DEVICE_TOOL);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterDeviceManager::kbd-a11y-mods-state-changed:
|
||||||
|
* @manager: the #ClutterDeviceManager that emitted the signal
|
||||||
|
* @latched_mask: the latched modifier mask from stickykeys
|
||||||
|
* @locked_mask: the locked modifier mask from stickykeys
|
||||||
|
*
|
||||||
|
* The ::kbd-a11y-mods-state-changed signal is emitted each time either the
|
||||||
|
* latched modifiers mask or locked modifiers mask are changed as the
|
||||||
|
* result of keyboard accessibilty's sticky keys operations.
|
||||||
|
*/
|
||||||
|
manager_signals[KBD_A11Y_MASK_CHANGED] =
|
||||||
|
g_signal_new (I_("kbd-a11y-mods-state-changed"),
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL,
|
||||||
|
_clutter_marshal_VOID__UINT_UINT,
|
||||||
|
G_TYPE_NONE, 2,
|
||||||
|
G_TYPE_UINT,
|
||||||
|
G_TYPE_UINT);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterDeviceManager::kbd-a11y-flags-changed:
|
||||||
|
* @manager: the #ClutterDeviceManager that emitted the signal
|
||||||
|
* @settings_flags: the new ClutterKeyboardA11yFlags configuration
|
||||||
|
* @changed_mask: the ClutterKeyboardA11yFlags changed
|
||||||
|
*
|
||||||
|
* The ::kbd-a11y-flags-changed signal is emitted each time the
|
||||||
|
* ClutterKeyboardA11yFlags configuration is changed as the result of
|
||||||
|
* keyboard accessibilty operations.
|
||||||
|
*/
|
||||||
|
manager_signals[KBD_A11Y_FLAGS_CHANGED] =
|
||||||
|
g_signal_new (I_("kbd-a11y-flags-changed"),
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL,
|
||||||
|
_clutter_marshal_VOID__UINT_UINT,
|
||||||
|
G_TYPE_NONE, 2,
|
||||||
|
G_TYPE_UINT,
|
||||||
|
G_TYPE_UINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -435,3 +493,97 @@ _clutter_device_manager_get_backend (ClutterDeviceManager *manager)
|
|||||||
|
|
||||||
return manager->priv->backend;
|
return manager->priv->backend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_device_manager_create_virtual_device:
|
||||||
|
* @device_manager: a #ClutterDeviceManager
|
||||||
|
* @device_type: the type of the virtual device
|
||||||
|
*
|
||||||
|
* Creates a virtual input device.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a newly created virtual device
|
||||||
|
**/
|
||||||
|
ClutterVirtualInputDevice *
|
||||||
|
clutter_device_manager_create_virtual_device (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterInputDeviceType device_type)
|
||||||
|
{
|
||||||
|
ClutterDeviceManagerClass *manager_class;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL);
|
||||||
|
|
||||||
|
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
|
||||||
|
return manager_class->create_virtual_device (device_manager,
|
||||||
|
device_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_device_manager_supported_virtua_device_types: (skip)
|
||||||
|
*/
|
||||||
|
ClutterVirtualDeviceType
|
||||||
|
clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager)
|
||||||
|
{
|
||||||
|
ClutterDeviceManagerClass *manager_class;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager),
|
||||||
|
CLUTTER_VIRTUAL_DEVICE_TYPE_NONE);
|
||||||
|
|
||||||
|
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
|
||||||
|
return manager_class->get_supported_virtual_device_types (device_manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterEvent *event,
|
||||||
|
const ClutterEvent *to_discard)
|
||||||
|
{
|
||||||
|
ClutterDeviceManagerClass *manager_class;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
|
||||||
|
|
||||||
|
|
||||||
|
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
|
||||||
|
if (!manager_class->compress_motion)
|
||||||
|
return;
|
||||||
|
|
||||||
|
manager_class->compress_motion (device_manager, event, to_discard);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a,
|
||||||
|
ClutterKbdA11ySettings *b)
|
||||||
|
{
|
||||||
|
return (a->controls == b->controls &&
|
||||||
|
a->slowkeys_delay == b->slowkeys_delay &&
|
||||||
|
a->debounce_delay == b->debounce_delay &&
|
||||||
|
a->timeout_delay == b->timeout_delay &&
|
||||||
|
a->mousekeys_init_delay == b->mousekeys_init_delay &&
|
||||||
|
a->mousekeys_max_speed == b->mousekeys_max_speed &&
|
||||||
|
a->mousekeys_accel_time == b->mousekeys_accel_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterKbdA11ySettings *settings)
|
||||||
|
{
|
||||||
|
ClutterDeviceManagerClass *manager_class;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
|
||||||
|
|
||||||
|
if (are_kbd_a11y_settings_equal (&device_manager->priv->kbd_a11y_settings, settings))
|
||||||
|
return;
|
||||||
|
|
||||||
|
device_manager->priv->kbd_a11y_settings = *settings;
|
||||||
|
|
||||||
|
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
|
||||||
|
if (manager_class->apply_kbd_a11y_settings)
|
||||||
|
manager_class->apply_kbd_a11y_settings (device_manager, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterKbdA11ySettings *settings)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
|
||||||
|
|
||||||
|
*settings = device_manager->priv->kbd_a11y_settings;
|
||||||
|
}
|
||||||
|
@@ -44,6 +44,35 @@ typedef struct _ClutterDeviceManager ClutterDeviceManager;
|
|||||||
typedef struct _ClutterDeviceManagerPrivate ClutterDeviceManagerPrivate;
|
typedef struct _ClutterDeviceManagerPrivate ClutterDeviceManagerPrivate;
|
||||||
typedef struct _ClutterDeviceManagerClass ClutterDeviceManagerClass;
|
typedef struct _ClutterDeviceManagerClass ClutterDeviceManagerClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterVirtualDeviceType:
|
||||||
|
*/
|
||||||
|
typedef enum _ClutterVirtualDeviceType
|
||||||
|
{
|
||||||
|
CLUTTER_VIRTUAL_DEVICE_TYPE_NONE = 0,
|
||||||
|
CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD = 1 << 0,
|
||||||
|
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER = 1 << 1,
|
||||||
|
CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN = 1 << 2,
|
||||||
|
} ClutterVirtualDeviceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterKbdA11ySettings:
|
||||||
|
*
|
||||||
|
* The #ClutterKbdA11ySettings structure contains keyboard accessibility
|
||||||
|
* settings
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef struct _ClutterKbdA11ySettings
|
||||||
|
{
|
||||||
|
ClutterKeyboardA11yFlags controls;
|
||||||
|
gint slowkeys_delay;
|
||||||
|
gint debounce_delay;
|
||||||
|
gint timeout_delay;
|
||||||
|
gint mousekeys_init_delay;
|
||||||
|
gint mousekeys_max_speed;
|
||||||
|
gint mousekeys_accel_time;
|
||||||
|
} ClutterKbdA11ySettings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterDeviceManager:
|
* ClutterDeviceManager:
|
||||||
*
|
*
|
||||||
@@ -83,9 +112,17 @@ struct _ClutterDeviceManagerClass
|
|||||||
ClutterInputDevice *device);
|
ClutterInputDevice *device);
|
||||||
void (* select_stage_events) (ClutterDeviceManager *manager,
|
void (* select_stage_events) (ClutterDeviceManager *manager,
|
||||||
ClutterStage *stage);
|
ClutterStage *stage);
|
||||||
|
ClutterVirtualInputDevice *(* create_virtual_device) (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterInputDeviceType device_type);
|
||||||
|
ClutterVirtualDeviceType (* get_supported_virtual_device_types) (ClutterDeviceManager *device_manager);
|
||||||
|
void (* compress_motion) (ClutterDeviceManager *device_manger,
|
||||||
|
ClutterEvent *event,
|
||||||
|
const ClutterEvent *to_discard);
|
||||||
|
/* Keyboard accessbility */
|
||||||
|
void (* apply_kbd_a11y_settings) (ClutterDeviceManager *device_manger,
|
||||||
|
ClutterKbdA11ySettings *settings);
|
||||||
/* padding */
|
/* padding */
|
||||||
gpointer _padding[7];
|
gpointer _padding[6];
|
||||||
};
|
};
|
||||||
|
|
||||||
CLUTTER_AVAILABLE_IN_1_2
|
CLUTTER_AVAILABLE_IN_1_2
|
||||||
@@ -105,6 +142,20 @@ CLUTTER_AVAILABLE_IN_1_2
|
|||||||
ClutterInputDevice * clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager,
|
ClutterInputDevice * clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager,
|
||||||
ClutterInputDeviceType device_type);
|
ClutterInputDeviceType device_type);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
ClutterVirtualInputDevice *clutter_device_manager_create_virtual_device (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterInputDeviceType device_type);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
ClutterVirtualDeviceType clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
void clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterKbdA11ySettings *settings);
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
void clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager *device_manager,
|
||||||
|
ClutterKbdA11ySettings *settings);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_DEVICE_MANAGER_H__ */
|
#endif /* __CLUTTER_DEVICE_MANAGER_H__ */
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-drag-action.h"
|
#include "clutter-drag-action.h"
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-drop-action.h"
|
#include "clutter-drop-action.h"
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include "clutter-easing.h"
|
#include "clutter-easing.h"
|
||||||
|
|
||||||
|
@@ -9,6 +9,7 @@ gboolean _clutter_effect_pre_paint (ClutterEffect
|
|||||||
void _clutter_effect_post_paint (ClutterEffect *effect);
|
void _clutter_effect_post_paint (ClutterEffect *effect);
|
||||||
gboolean _clutter_effect_get_paint_volume (ClutterEffect *effect,
|
gboolean _clutter_effect_get_paint_volume (ClutterEffect *effect,
|
||||||
ClutterPaintVolume *volume);
|
ClutterPaintVolume *volume);
|
||||||
|
gboolean _clutter_effect_has_custom_paint_volume (ClutterEffect *effect);
|
||||||
void _clutter_effect_paint (ClutterEffect *effect,
|
void _clutter_effect_paint (ClutterEffect *effect,
|
||||||
ClutterEffectPaintFlags flags);
|
ClutterEffectPaintFlags flags);
|
||||||
void _clutter_effect_pick (ClutterEffect *effect,
|
void _clutter_effect_pick (ClutterEffect *effect,
|
||||||
|
@@ -161,7 +161,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-effect.h"
|
#include "clutter-effect.h"
|
||||||
@@ -308,6 +308,14 @@ _clutter_effect_get_paint_volume (ClutterEffect *effect,
|
|||||||
return CLUTTER_EFFECT_GET_CLASS (effect)->get_paint_volume (effect, volume);
|
return CLUTTER_EFFECT_GET_CLASS (effect)->get_paint_volume (effect, volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_clutter_effect_has_custom_paint_volume (ClutterEffect *effect)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_EFFECT (effect), FALSE);
|
||||||
|
|
||||||
|
return CLUTTER_EFFECT_GET_CLASS (effect)->get_paint_volume != clutter_effect_real_get_paint_volume;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_effect_queue_repaint:
|
* clutter_effect_queue_repaint:
|
||||||
* @effect: A #ClutterEffect which needs redrawing
|
* @effect: A #ClutterEffect which needs redrawing
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*** BEGIN file-header ***/
|
/*** BEGIN file-header ***/
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#include "clutter-enum-types.h"
|
#include "clutter-enum-types.h"
|
||||||
/*** END file-header ***/
|
/*** END file-header ***/
|
||||||
|
|
||||||
|
@@ -396,6 +396,43 @@ typedef enum {
|
|||||||
CLUTTER_MODIFIER_MASK = 0x5c001fff
|
CLUTTER_MODIFIER_MASK = 0x5c001fff
|
||||||
} ClutterModifierType;
|
} ClutterModifierType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterKeyboardA11yFlags:
|
||||||
|
* @CLUTTER_A11Y_KEYBOARD_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_TIMEOUT_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_MOUSE_KEYS_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_SLOW_KEYS_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS:
|
||||||
|
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT:
|
||||||
|
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT:
|
||||||
|
* @CLUTTER_A11Y_BOUNCE_KEYS_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT:
|
||||||
|
* @CLUTTER_A11Y_TOGGLE_KEYS_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_STICKY_KEYS_ENABLED:
|
||||||
|
* @CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF:
|
||||||
|
* @CLUTTER_A11Y_STICKY_KEYS_BEEP:
|
||||||
|
* @CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP:
|
||||||
|
*
|
||||||
|
* Keyboard accessibility features applied to a ClutterInputDevice keyboard.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_A11Y_KEYBOARD_ENABLED = 1 << 0,
|
||||||
|
CLUTTER_A11Y_TIMEOUT_ENABLED = 1 << 1,
|
||||||
|
CLUTTER_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
|
||||||
|
CLUTTER_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
|
||||||
|
CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
|
||||||
|
CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
|
||||||
|
CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
|
||||||
|
CLUTTER_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
|
||||||
|
CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
|
||||||
|
CLUTTER_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
|
||||||
|
CLUTTER_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
|
||||||
|
CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
|
||||||
|
CLUTTER_A11Y_STICKY_KEYS_BEEP = 1 << 12,
|
||||||
|
CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
|
||||||
|
} ClutterKeyboardA11yFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterActorFlags:
|
* ClutterActorFlags:
|
||||||
* @CLUTTER_ACTOR_MAPPED: the actor will be painted (is visible, and inside
|
* @CLUTTER_ACTOR_MAPPED: the actor will be painted (is visible, and inside
|
||||||
@@ -724,14 +761,17 @@ typedef enum { /*< prefix=CLUTTER_DRAG >*/
|
|||||||
* ClutterEventFlags:
|
* ClutterEventFlags:
|
||||||
* @CLUTTER_EVENT_NONE: No flag set
|
* @CLUTTER_EVENT_NONE: No flag set
|
||||||
* @CLUTTER_EVENT_FLAG_SYNTHETIC: Synthetic event
|
* @CLUTTER_EVENT_FLAG_SYNTHETIC: Synthetic event
|
||||||
|
* @CLUTTER_EVENT_FLAG_REPEATED: Auto-repeated event
|
||||||
*
|
*
|
||||||
* Flags for the #ClutterEvent
|
* Flags for the #ClutterEvent
|
||||||
*
|
*
|
||||||
* Since: 0.6
|
* Since: 0.6
|
||||||
*/
|
*/
|
||||||
typedef enum { /*< flags prefix=CLUTTER_EVENT >*/
|
typedef enum { /*< flags prefix=CLUTTER_EVENT >*/
|
||||||
CLUTTER_EVENT_NONE = 0,
|
CLUTTER_EVENT_NONE = 0,
|
||||||
CLUTTER_EVENT_FLAG_SYNTHETIC = 1 << 0
|
CLUTTER_EVENT_FLAG_SYNTHETIC = 1 << 0,
|
||||||
|
CLUTTER_EVENT_FLAG_INPUT_METHOD = 1 << 1,
|
||||||
|
CLUTTER_EVENT_FLAG_REPEATED = 1 << 2
|
||||||
} ClutterEventFlags;
|
} ClutterEventFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -761,6 +801,10 @@ typedef enum { /*< flags prefix=CLUTTER_EVENT >*/
|
|||||||
* determined by its phase field; event added in 1.24
|
* determined by its phase field; event added in 1.24
|
||||||
* @CLUTTER_TOUCHPAD_SWIPE: A swipe gesture event, the current state is
|
* @CLUTTER_TOUCHPAD_SWIPE: A swipe gesture event, the current state is
|
||||||
* determined by its phase field; event added in 1.24
|
* determined by its phase field; event added in 1.24
|
||||||
|
* @CLUTTER_PROXIMITY_IN: A tool entered in proximity to a tablet;
|
||||||
|
* event added in 1.28
|
||||||
|
* @CLUTTER_PROXIMITY_OUT: A tool left from the proximity area of a tablet;
|
||||||
|
* event added in 1.28
|
||||||
* @CLUTTER_EVENT_LAST: Marks the end of the #ClutterEventType enumeration;
|
* @CLUTTER_EVENT_LAST: Marks the end of the #ClutterEventType enumeration;
|
||||||
* added in 1.10
|
* added in 1.10
|
||||||
*
|
*
|
||||||
@@ -788,6 +832,12 @@ typedef enum { /*< prefix=CLUTTER >*/
|
|||||||
CLUTTER_TOUCH_CANCEL,
|
CLUTTER_TOUCH_CANCEL,
|
||||||
CLUTTER_TOUCHPAD_PINCH,
|
CLUTTER_TOUCHPAD_PINCH,
|
||||||
CLUTTER_TOUCHPAD_SWIPE,
|
CLUTTER_TOUCHPAD_SWIPE,
|
||||||
|
CLUTTER_PROXIMITY_IN,
|
||||||
|
CLUTTER_PROXIMITY_OUT,
|
||||||
|
CLUTTER_PAD_BUTTON_PRESS,
|
||||||
|
CLUTTER_PAD_BUTTON_RELEASE,
|
||||||
|
CLUTTER_PAD_STRIP,
|
||||||
|
CLUTTER_PAD_RING,
|
||||||
|
|
||||||
CLUTTER_EVENT_LAST /* helper */
|
CLUTTER_EVENT_LAST /* helper */
|
||||||
} ClutterEventType;
|
} ClutterEventType;
|
||||||
@@ -894,6 +944,7 @@ typedef enum { /*< prefix=CLUTTER_FLOW >*/
|
|||||||
* @CLUTTER_PEN_DEVICE: A pen device
|
* @CLUTTER_PEN_DEVICE: A pen device
|
||||||
* @CLUTTER_ERASER_DEVICE: An eraser device
|
* @CLUTTER_ERASER_DEVICE: An eraser device
|
||||||
* @CLUTTER_CURSOR_DEVICE: A cursor device
|
* @CLUTTER_CURSOR_DEVICE: A cursor device
|
||||||
|
* @CLUTTER_PAD_DEVICE: A tablet pad
|
||||||
* @CLUTTER_N_DEVICE_TYPES: The number of device types
|
* @CLUTTER_N_DEVICE_TYPES: The number of device types
|
||||||
*
|
*
|
||||||
* The types of input devices available.
|
* The types of input devices available.
|
||||||
@@ -914,6 +965,7 @@ typedef enum {
|
|||||||
CLUTTER_PEN_DEVICE,
|
CLUTTER_PEN_DEVICE,
|
||||||
CLUTTER_ERASER_DEVICE,
|
CLUTTER_ERASER_DEVICE,
|
||||||
CLUTTER_CURSOR_DEVICE,
|
CLUTTER_CURSOR_DEVICE,
|
||||||
|
CLUTTER_PAD_DEVICE,
|
||||||
|
|
||||||
CLUTTER_N_DEVICE_TYPES
|
CLUTTER_N_DEVICE_TYPES
|
||||||
} ClutterInputDeviceType;
|
} ClutterInputDeviceType;
|
||||||
@@ -946,6 +998,8 @@ typedef enum {
|
|||||||
* @CLUTTER_INPUT_AXIS_YTILT: The tile on the Y axis
|
* @CLUTTER_INPUT_AXIS_YTILT: The tile on the Y axis
|
||||||
* @CLUTTER_INPUT_AXIS_WHEEL: A wheel
|
* @CLUTTER_INPUT_AXIS_WHEEL: A wheel
|
||||||
* @CLUTTER_INPUT_AXIS_DISTANCE: Distance (Since 1.12)
|
* @CLUTTER_INPUT_AXIS_DISTANCE: Distance (Since 1.12)
|
||||||
|
* @CLUTTER_INPUT_AXIS_ROTATION: Rotation along the z-axis (Since 1.28)
|
||||||
|
* @CLUTTER_INPUT_AXIS_SLIDER: A slider (Since 1.28)
|
||||||
* @CLUTTER_INPUT_AXIS_LAST: Last value of the enumeration; this value is
|
* @CLUTTER_INPUT_AXIS_LAST: Last value of the enumeration; this value is
|
||||||
* useful when iterating over the enumeration values (Since 1.12)
|
* useful when iterating over the enumeration values (Since 1.12)
|
||||||
*
|
*
|
||||||
@@ -963,6 +1017,8 @@ typedef enum {
|
|||||||
CLUTTER_INPUT_AXIS_YTILT,
|
CLUTTER_INPUT_AXIS_YTILT,
|
||||||
CLUTTER_INPUT_AXIS_WHEEL,
|
CLUTTER_INPUT_AXIS_WHEEL,
|
||||||
CLUTTER_INPUT_AXIS_DISTANCE,
|
CLUTTER_INPUT_AXIS_DISTANCE,
|
||||||
|
CLUTTER_INPUT_AXIS_ROTATION,
|
||||||
|
CLUTTER_INPUT_AXIS_SLIDER,
|
||||||
|
|
||||||
CLUTTER_INPUT_AXIS_LAST
|
CLUTTER_INPUT_AXIS_LAST
|
||||||
} ClutterInputAxis;
|
} ClutterInputAxis;
|
||||||
@@ -1484,6 +1540,77 @@ typedef enum {
|
|||||||
CLUTTER_SCROLL_FINISHED_VERTICAL = 1 << 1
|
CLUTTER_SCROLL_FINISHED_VERTICAL = 1 << 1
|
||||||
} ClutterScrollFinishFlags;
|
} ClutterScrollFinishFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterInputDeviceToolType:
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_NONE: No tool
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_PEN: The tool is a pen
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_ERASER: The tool is an eraser
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_BRUSH: The tool is a brush
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_PENCIL: The tool is a pencil
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_AIRBRUSH: The tool is an airbrush
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_MOUSE: The tool is a mouse
|
||||||
|
* @CLUTTER_INPUT_DEVICE_TOOL_LENS: The tool is a lens
|
||||||
|
*
|
||||||
|
* Defines the type of tool that a #ClutterInputDeviceTool represents.
|
||||||
|
*
|
||||||
|
* Since: 1.28
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_NONE,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_PEN,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_ERASER,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_BRUSH,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_PENCIL,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_AIRBRUSH,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_MOUSE,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_LENS
|
||||||
|
} ClutterInputDeviceToolType;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_INPUT_DEVICE_PAD_SOURCE_UNKNOWN,
|
||||||
|
CLUTTER_INPUT_DEVICE_PAD_SOURCE_FINGER,
|
||||||
|
} ClutterInputDevicePadSource;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE,
|
||||||
|
CLUTTER_INPUT_DEVICE_MAPPING_RELATIVE,
|
||||||
|
} ClutterInputDeviceMapping;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_COMPLETION = 1 << 0,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_SPELLCHECK = 1 << 1,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION = 1 << 2,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_LOWERCASE = 1 << 3,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_UPPERCASE = 1 << 4,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_TITLECASE = 1 << 5,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT = 1 << 6,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_SENSITIVE_DATA = 1 << 7,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_LATIN = 1 << 8,
|
||||||
|
CLUTTER_INPUT_CONTENT_HINT_MULTILINE = 1 << 9,
|
||||||
|
} ClutterInputContentHintFlags;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_ALPHA,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_DIGITS,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_NUMBER,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_PHONE,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_URL,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_EMAIL,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_NAME,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_PASSWORD,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_DATE,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_TIME,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_DATETIME,
|
||||||
|
CLUTTER_INPUT_CONTENT_PURPOSE_TERMINAL,
|
||||||
|
} ClutterInputContentPurpose;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_INPUT_PANEL_STATE_OFF,
|
||||||
|
CLUTTER_INPUT_PANEL_STATE_ON,
|
||||||
|
CLUTTER_INPUT_PANEL_STATE_TOGGLE,
|
||||||
|
} ClutterInputPanelState;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_ENUMS_H__ */
|
#endif /* __CLUTTER_ENUMS_H__ */
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include "clutter-event-translator.h"
|
#include "clutter-event-translator.h"
|
||||||
|
|
||||||
|
@@ -29,6 +29,7 @@ struct _ClutterEventTranslatorIface
|
|||||||
ClutterEvent *translated);
|
ClutterEvent *translated);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
GType _clutter_event_translator_get_type (void) G_GNUC_CONST;
|
GType _clutter_event_translator_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
ClutterTranslateReturn _clutter_event_translator_translate_event (ClutterEventTranslator *translator,
|
ClutterTranslateReturn _clutter_event_translator_translate_event (ClutterEventTranslator *translator,
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-backend-private.h"
|
#include "clutter-backend-private.h"
|
||||||
@@ -54,6 +54,8 @@ typedef struct _ClutterEventPrivate {
|
|||||||
gdouble delta_x;
|
gdouble delta_x;
|
||||||
gdouble delta_y;
|
gdouble delta_y;
|
||||||
|
|
||||||
|
ClutterInputDeviceTool *tool;
|
||||||
|
|
||||||
gpointer platform_data;
|
gpointer platform_data;
|
||||||
|
|
||||||
ClutterModifierType button_state;
|
ClutterModifierType button_state;
|
||||||
@@ -409,6 +411,12 @@ clutter_event_get_position (const ClutterEvent *event,
|
|||||||
case CLUTTER_CLIENT_MESSAGE:
|
case CLUTTER_CLIENT_MESSAGE:
|
||||||
case CLUTTER_DELETE:
|
case CLUTTER_DELETE:
|
||||||
case CLUTTER_EVENT_LAST:
|
case CLUTTER_EVENT_LAST:
|
||||||
|
case CLUTTER_PROXIMITY_IN:
|
||||||
|
case CLUTTER_PROXIMITY_OUT:
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
clutter_point_init (position, 0.f, 0.f);
|
clutter_point_init (position, 0.f, 0.f);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -477,6 +485,12 @@ clutter_event_set_coords (ClutterEvent *event,
|
|||||||
case CLUTTER_CLIENT_MESSAGE:
|
case CLUTTER_CLIENT_MESSAGE:
|
||||||
case CLUTTER_DELETE:
|
case CLUTTER_DELETE:
|
||||||
case CLUTTER_EVENT_LAST:
|
case CLUTTER_EVENT_LAST:
|
||||||
|
case CLUTTER_PROXIMITY_IN:
|
||||||
|
case CLUTTER_PROXIMITY_OUT:
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_ENTER:
|
case CLUTTER_ENTER:
|
||||||
@@ -805,9 +819,15 @@ clutter_event_get_button (const ClutterEvent *event)
|
|||||||
{
|
{
|
||||||
g_return_val_if_fail (event != NULL, 0);
|
g_return_val_if_fail (event != NULL, 0);
|
||||||
g_return_val_if_fail (event->type == CLUTTER_BUTTON_PRESS ||
|
g_return_val_if_fail (event->type == CLUTTER_BUTTON_PRESS ||
|
||||||
event->type == CLUTTER_BUTTON_RELEASE, 0);
|
event->type == CLUTTER_BUTTON_RELEASE ||
|
||||||
|
event->type == CLUTTER_PAD_BUTTON_PRESS ||
|
||||||
|
event->type == CLUTTER_PAD_BUTTON_RELEASE, 0);
|
||||||
|
|
||||||
return event->button.button;
|
if (event->type == CLUTTER_BUTTON_PRESS ||
|
||||||
|
event->type == CLUTTER_BUTTON_RELEASE)
|
||||||
|
return event->button.button;
|
||||||
|
else
|
||||||
|
return event->pad_button.button;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1122,6 +1142,24 @@ clutter_event_set_device (ClutterEvent *event,
|
|||||||
case CLUTTER_TOUCHPAD_SWIPE:
|
case CLUTTER_TOUCHPAD_SWIPE:
|
||||||
/* Rely on priv data for these */
|
/* Rely on priv data for these */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PROXIMITY_IN:
|
||||||
|
case CLUTTER_PROXIMITY_OUT:
|
||||||
|
event->proximity.device = device;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
event->pad_button.device = device;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
event->pad_strip.device = device;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
|
event->pad_ring.device = device;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1201,11 +1239,77 @@ clutter_event_get_device (const ClutterEvent *event)
|
|||||||
case CLUTTER_TOUCHPAD_SWIPE:
|
case CLUTTER_TOUCHPAD_SWIPE:
|
||||||
/* Rely on priv data for these */
|
/* Rely on priv data for these */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PROXIMITY_IN:
|
||||||
|
case CLUTTER_PROXIMITY_OUT:
|
||||||
|
device = event->proximity.device;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
device = event->pad_button.device;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
device = event->pad_strip.device;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
|
device = event->pad_ring.device;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_event_set_device_tool:
|
||||||
|
* @event: a #ClutterEvent
|
||||||
|
* @tool: (nullable): a #ClutterInputDeviceTool
|
||||||
|
*
|
||||||
|
* Sets the tool in use for this event
|
||||||
|
*
|
||||||
|
* Since: 1.28
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
clutter_event_set_device_tool (ClutterEvent *event,
|
||||||
|
ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
g_return_if_fail (event != NULL);
|
||||||
|
|
||||||
|
if (is_event_allocated (event))
|
||||||
|
{
|
||||||
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
|
real_event->tool = tool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_event_get_device_tool:
|
||||||
|
* @event: a #ClutterEvent
|
||||||
|
*
|
||||||
|
* Returns the device tool that originated this event
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): The tool of this event
|
||||||
|
*
|
||||||
|
* Since: 1.28
|
||||||
|
**/
|
||||||
|
ClutterInputDeviceTool *
|
||||||
|
clutter_event_get_device_tool (const ClutterEvent *event)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (event != NULL, NULL);
|
||||||
|
|
||||||
|
if (is_event_allocated (event))
|
||||||
|
{
|
||||||
|
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
|
||||||
|
|
||||||
|
return real_event->tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_event_new:
|
* clutter_event_new:
|
||||||
* @type: The type of event.
|
* @type: The type of event.
|
||||||
@@ -1269,6 +1373,7 @@ clutter_event_copy (const ClutterEvent *event)
|
|||||||
new_real_event->button_state = real_event->button_state;
|
new_real_event->button_state = real_event->button_state;
|
||||||
new_real_event->latched_state = real_event->latched_state;
|
new_real_event->latched_state = real_event->latched_state;
|
||||||
new_real_event->locked_state = real_event->locked_state;
|
new_real_event->locked_state = real_event->locked_state;
|
||||||
|
new_real_event->tool = real_event->tool;
|
||||||
}
|
}
|
||||||
|
|
||||||
device = clutter_event_get_device (event);
|
device = clutter_event_get_device (event);
|
||||||
@@ -1617,6 +1722,8 @@ clutter_event_get_axes (const ClutterEvent *event,
|
|||||||
case CLUTTER_KEY_PRESS:
|
case CLUTTER_KEY_PRESS:
|
||||||
case CLUTTER_KEY_RELEASE:
|
case CLUTTER_KEY_RELEASE:
|
||||||
case CLUTTER_EVENT_LAST:
|
case CLUTTER_EVENT_LAST:
|
||||||
|
case CLUTTER_PROXIMITY_IN:
|
||||||
|
case CLUTTER_PROXIMITY_OUT:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_SCROLL:
|
case CLUTTER_SCROLL:
|
||||||
@@ -1641,6 +1748,10 @@ clutter_event_get_axes (const ClutterEvent *event,
|
|||||||
|
|
||||||
case CLUTTER_TOUCHPAD_PINCH:
|
case CLUTTER_TOUCHPAD_PINCH:
|
||||||
case CLUTTER_TOUCHPAD_SWIPE:
|
case CLUTTER_TOUCHPAD_SWIPE:
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1879,22 +1990,28 @@ clutter_event_remove_filter (guint id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_event_get_gesture_swipe_finger_count:
|
* clutter_event_get_touchpad_gesture_finger_count:
|
||||||
* @event: a touchpad swipe event
|
* @event: a touchpad swipe/pinch event
|
||||||
*
|
*
|
||||||
* Returns the number of fingers that is triggering the touchpad gesture.
|
* Returns the number of fingers that is triggering the touchpad gesture.
|
||||||
*
|
*
|
||||||
* Returns: the number of fingers swiping.
|
* Returns: the number of fingers in the gesture.
|
||||||
*
|
*
|
||||||
* Since: 1.24
|
* Since: 1.24
|
||||||
**/
|
**/
|
||||||
guint
|
guint
|
||||||
clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event)
|
clutter_event_get_touchpad_gesture_finger_count (const ClutterEvent *event)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (event != NULL, 0);
|
g_return_val_if_fail (event != NULL, 0);
|
||||||
g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_SWIPE, 0);
|
g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_SWIPE ||
|
||||||
|
event->type == CLUTTER_TOUCHPAD_PINCH, 0);
|
||||||
|
|
||||||
return event->touchpad_swipe.n_fingers;
|
if (event->type == CLUTTER_TOUCHPAD_SWIPE)
|
||||||
|
return event->touchpad_swipe.n_fingers;
|
||||||
|
else if (event->type == CLUTTER_TOUCHPAD_PINCH)
|
||||||
|
return event->touchpad_pinch.n_fingers;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2041,3 +2158,82 @@ clutter_event_get_scroll_finish_flags (const ClutterEvent *event)
|
|||||||
|
|
||||||
return event->scroll.finish_flags;
|
return event->scroll.finish_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guint
|
||||||
|
clutter_event_get_mode_group (const ClutterEvent *event)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (event->type == CLUTTER_PAD_BUTTON_PRESS ||
|
||||||
|
event->type == CLUTTER_PAD_BUTTON_RELEASE ||
|
||||||
|
event->type == CLUTTER_PAD_RING ||
|
||||||
|
event->type == CLUTTER_PAD_STRIP, 0);
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
return event->pad_button.group;
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
|
return event->pad_ring.group;
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
return event->pad_strip.group;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_event_get_pad_event_details:
|
||||||
|
* @event: a pad event
|
||||||
|
* @number: (out) (optional): ring/strip/button number
|
||||||
|
* @mode: (out) (optional): pad mode as per the event
|
||||||
|
* @value: (out) (optional): event axis value
|
||||||
|
*
|
||||||
|
* Returns the details of a pad event.
|
||||||
|
*
|
||||||
|
* Returns: #TRUE if event details could be obtained
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
clutter_event_get_pad_event_details (const ClutterEvent *event,
|
||||||
|
guint *number,
|
||||||
|
guint *mode,
|
||||||
|
gdouble *value)
|
||||||
|
{
|
||||||
|
guint n, m;
|
||||||
|
gdouble v;
|
||||||
|
|
||||||
|
g_return_val_if_fail (event != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (event->type == CLUTTER_PAD_BUTTON_PRESS ||
|
||||||
|
event->type == CLUTTER_PAD_BUTTON_RELEASE ||
|
||||||
|
event->type == CLUTTER_PAD_RING ||
|
||||||
|
event->type == CLUTTER_PAD_STRIP, FALSE);
|
||||||
|
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
n = event->pad_button.button;
|
||||||
|
m = event->pad_button.mode;
|
||||||
|
v = 0.0;
|
||||||
|
break;
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
|
n = event->pad_ring.ring_number;
|
||||||
|
m = event->pad_ring.mode;
|
||||||
|
v = event->pad_ring.angle;
|
||||||
|
break;
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
n = event->pad_strip.strip_number;
|
||||||
|
m = event->pad_strip.mode;
|
||||||
|
v = event->pad_strip.value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (number)
|
||||||
|
*number = n;
|
||||||
|
if (mode)
|
||||||
|
*mode = m;
|
||||||
|
if (value)
|
||||||
|
*value = v;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
@@ -117,6 +117,10 @@ typedef struct _ClutterCrossingEvent ClutterCrossingEvent;
|
|||||||
typedef struct _ClutterTouchEvent ClutterTouchEvent;
|
typedef struct _ClutterTouchEvent ClutterTouchEvent;
|
||||||
typedef struct _ClutterTouchpadPinchEvent ClutterTouchpadPinchEvent;
|
typedef struct _ClutterTouchpadPinchEvent ClutterTouchpadPinchEvent;
|
||||||
typedef struct _ClutterTouchpadSwipeEvent ClutterTouchpadSwipeEvent;
|
typedef struct _ClutterTouchpadSwipeEvent ClutterTouchpadSwipeEvent;
|
||||||
|
typedef struct _ClutterProximityEvent ClutterProximityEvent;
|
||||||
|
typedef struct _ClutterPadButtonEvent ClutterPadButtonEvent;
|
||||||
|
typedef struct _ClutterPadStripEvent ClutterPadStripEvent;
|
||||||
|
typedef struct _ClutterPadRingEvent ClutterPadRingEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterAnyEvent:
|
* ClutterAnyEvent:
|
||||||
@@ -213,6 +217,30 @@ struct _ClutterButtonEvent
|
|||||||
ClutterInputDevice *device;
|
ClutterInputDevice *device;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterProximityEvent:
|
||||||
|
* @type: event type
|
||||||
|
* @time: event time
|
||||||
|
* @flags: event flags
|
||||||
|
* @stage: event source stage
|
||||||
|
* @source: event source actor
|
||||||
|
* @device: the device that originated the event. If you want the physical
|
||||||
|
* device the event originated from, use clutter_event_get_source_device()
|
||||||
|
*
|
||||||
|
* Event for tool proximity in tablet devices
|
||||||
|
*
|
||||||
|
* Since: 1.28
|
||||||
|
*/
|
||||||
|
struct _ClutterProximityEvent
|
||||||
|
{
|
||||||
|
ClutterEventType type;
|
||||||
|
guint32 time;
|
||||||
|
ClutterEventFlags flags;
|
||||||
|
ClutterStage *stage;
|
||||||
|
ClutterActor *source;
|
||||||
|
ClutterInputDevice *device;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterCrossingEvent:
|
* ClutterCrossingEvent:
|
||||||
* @type: event type
|
* @type: event type
|
||||||
@@ -431,6 +459,7 @@ struct _ClutterTouchpadPinchEvent
|
|||||||
gfloat dy;
|
gfloat dy;
|
||||||
gfloat angle_delta;
|
gfloat angle_delta;
|
||||||
gfloat scale;
|
gfloat scale;
|
||||||
|
guint n_fingers;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -468,6 +497,52 @@ struct _ClutterTouchpadSwipeEvent
|
|||||||
gfloat dy;
|
gfloat dy;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _ClutterPadButtonEvent
|
||||||
|
{
|
||||||
|
ClutterEventType type;
|
||||||
|
guint32 time;
|
||||||
|
ClutterEventFlags flags;
|
||||||
|
ClutterStage *stage;
|
||||||
|
ClutterActor *source;
|
||||||
|
|
||||||
|
guint32 button;
|
||||||
|
guint32 group;
|
||||||
|
ClutterInputDevice *device;
|
||||||
|
guint32 mode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _ClutterPadStripEvent
|
||||||
|
{
|
||||||
|
ClutterEventType type;
|
||||||
|
guint32 time;
|
||||||
|
ClutterEventFlags flags;
|
||||||
|
ClutterStage *stage;
|
||||||
|
ClutterActor *source;
|
||||||
|
|
||||||
|
ClutterInputDevice *device;
|
||||||
|
ClutterInputDevicePadSource strip_source;
|
||||||
|
guint32 strip_number;
|
||||||
|
guint32 group;
|
||||||
|
gdouble value;
|
||||||
|
guint32 mode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _ClutterPadRingEvent
|
||||||
|
{
|
||||||
|
ClutterEventType type;
|
||||||
|
guint32 time;
|
||||||
|
ClutterEventFlags flags;
|
||||||
|
ClutterStage *stage;
|
||||||
|
ClutterActor *source;
|
||||||
|
|
||||||
|
ClutterInputDevice *device;
|
||||||
|
ClutterInputDevicePadSource ring_source;
|
||||||
|
guint32 ring_number;
|
||||||
|
guint32 group;
|
||||||
|
gdouble angle;
|
||||||
|
guint32 mode;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterEvent:
|
* ClutterEvent:
|
||||||
*
|
*
|
||||||
@@ -490,6 +565,10 @@ union _ClutterEvent
|
|||||||
ClutterTouchEvent touch;
|
ClutterTouchEvent touch;
|
||||||
ClutterTouchpadPinchEvent touchpad_pinch;
|
ClutterTouchpadPinchEvent touchpad_pinch;
|
||||||
ClutterTouchpadSwipeEvent touchpad_swipe;
|
ClutterTouchpadSwipeEvent touchpad_swipe;
|
||||||
|
ClutterProximityEvent proximity;
|
||||||
|
ClutterPadButtonEvent pad_button;
|
||||||
|
ClutterPadStripEvent pad_strip;
|
||||||
|
ClutterPadRingEvent pad_ring;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -575,6 +654,13 @@ void clutter_event_set_source_device (ClutterEvent
|
|||||||
|
|
||||||
CLUTTER_AVAILABLE_IN_1_6
|
CLUTTER_AVAILABLE_IN_1_6
|
||||||
ClutterInputDevice * clutter_event_get_source_device (const ClutterEvent *event);
|
ClutterInputDevice * clutter_event_get_source_device (const ClutterEvent *event);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
void clutter_event_set_device_tool (ClutterEvent *event,
|
||||||
|
ClutterInputDeviceTool *tool);
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
ClutterInputDeviceTool *clutter_event_get_device_tool (const ClutterEvent *event);
|
||||||
|
|
||||||
CLUTTER_AVAILABLE_IN_1_8
|
CLUTTER_AVAILABLE_IN_1_8
|
||||||
void clutter_event_set_source (ClutterEvent *event,
|
void clutter_event_set_source (ClutterEvent *event,
|
||||||
ClutterActor *actor);
|
ClutterActor *actor);
|
||||||
@@ -670,7 +756,7 @@ CLUTTER_AVAILABLE_IN_1_2
|
|||||||
const ClutterEvent * clutter_get_current_event (void);
|
const ClutterEvent * clutter_get_current_event (void);
|
||||||
|
|
||||||
CLUTTER_AVAILABLE_IN_1_24
|
CLUTTER_AVAILABLE_IN_1_24
|
||||||
guint clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event);
|
guint clutter_event_get_touchpad_gesture_finger_count (const ClutterEvent *event);
|
||||||
|
|
||||||
CLUTTER_AVAILABLE_IN_1_24
|
CLUTTER_AVAILABLE_IN_1_24
|
||||||
gdouble clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event);
|
gdouble clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event);
|
||||||
@@ -689,6 +775,16 @@ void clutter_event_get_gesture_motion_delta (const Clut
|
|||||||
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
|
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
|
||||||
ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags (const ClutterEvent *event);
|
ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags (const ClutterEvent *event);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
guint clutter_event_get_mode_group (const ClutterEvent *event);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
gboolean clutter_event_get_pad_event_details (const ClutterEvent *event,
|
||||||
|
guint *number,
|
||||||
|
guint *mode,
|
||||||
|
gdouble *value);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_EVENT_H__ */
|
#endif /* __CLUTTER_EVENT_H__ */
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-debug.h"
|
#include "clutter-debug.h"
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
it only exists because that class is abstract */
|
it only exists because that class is abstract */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-flatten-effect.h"
|
#include "clutter-flatten-effect.h"
|
||||||
|
@@ -53,7 +53,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -84,7 +84,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-gesture-action-private.h"
|
#include "clutter-gesture-action-private.h"
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-debug.h"
|
#include "clutter-debug.h"
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
|
@@ -131,10 +131,8 @@ gboolean clutter_image_set_bytes (ClutterImage
|
|||||||
guint row_stride,
|
guint row_stride,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
#if defined(COGL_ENABLE_EXPERIMENTAL_API) && defined(CLUTTER_ENABLE_EXPERIMENTAL_API)
|
|
||||||
CLUTTER_AVAILABLE_IN_1_10
|
CLUTTER_AVAILABLE_IN_1_10
|
||||||
CoglTexture * clutter_image_get_texture (ClutterImage *image);
|
CoglTexture * clutter_image_get_texture (ClutterImage *image);
|
||||||
#endif
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
207
clutter/clutter/clutter-input-device-tool.c
Normal file
207
clutter/clutter/clutter-input-device-tool.c
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
* Clutter.
|
||||||
|
*
|
||||||
|
* An OpenGL based 'interactive canvas' library.
|
||||||
|
*
|
||||||
|
* Copyright © 2009, 2010, 2011 Intel Corp.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "clutter-build-config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "clutter-input-device-tool.h"
|
||||||
|
#include "clutter-private.h"
|
||||||
|
|
||||||
|
typedef struct _ClutterInputDeviceToolPrivate ClutterInputDeviceToolPrivate;
|
||||||
|
|
||||||
|
struct _ClutterInputDeviceToolPrivate
|
||||||
|
{
|
||||||
|
ClutterInputDeviceToolType type;
|
||||||
|
guint64 serial;
|
||||||
|
guint64 id;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
PROP_TYPE,
|
||||||
|
PROP_SERIAL,
|
||||||
|
PROP_ID,
|
||||||
|
PROP_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *props[PROP_LAST] = { NULL, };
|
||||||
|
|
||||||
|
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputDeviceTool, clutter_input_device_tool, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_device_tool_set_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceTool *tool = CLUTTER_INPUT_DEVICE_TOOL (object);
|
||||||
|
ClutterInputDeviceToolPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_device_tool_get_instance_private (tool);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_TYPE:
|
||||||
|
priv->type = g_value_get_enum (value);
|
||||||
|
break;
|
||||||
|
case PROP_SERIAL:
|
||||||
|
priv->serial = g_value_get_uint64 (value);
|
||||||
|
break;
|
||||||
|
case PROP_ID:
|
||||||
|
priv->id = g_value_get_uint64 (value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_device_tool_get_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceTool *tool = CLUTTER_INPUT_DEVICE_TOOL (object);
|
||||||
|
ClutterInputDeviceToolPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_device_tool_get_instance_private (tool);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_TYPE:
|
||||||
|
g_value_set_enum (value, priv->type);
|
||||||
|
break;
|
||||||
|
case PROP_SERIAL:
|
||||||
|
g_value_set_uint64 (value, priv->serial);
|
||||||
|
break;
|
||||||
|
case PROP_ID:
|
||||||
|
g_value_set_uint64 (value, priv->id);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_device_tool_class_init (ClutterInputDeviceToolClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
gobject_class->set_property = clutter_input_device_tool_set_property;
|
||||||
|
gobject_class->get_property = clutter_input_device_tool_get_property;
|
||||||
|
|
||||||
|
props[PROP_TYPE] =
|
||||||
|
g_param_spec_enum ("type",
|
||||||
|
P_("Tool type"),
|
||||||
|
P_("Tool type"),
|
||||||
|
CLUTTER_TYPE_INPUT_DEVICE_TOOL_TYPE,
|
||||||
|
CLUTTER_INPUT_DEVICE_TOOL_NONE,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
props[PROP_SERIAL] =
|
||||||
|
g_param_spec_uint64 ("serial",
|
||||||
|
P_("Tool serial"),
|
||||||
|
P_("Tool serial"),
|
||||||
|
0, G_MAXUINT64, 0,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
props[PROP_ID] =
|
||||||
|
g_param_spec_uint64 ("id",
|
||||||
|
P_("Tool ID"),
|
||||||
|
P_("Tool ID"),
|
||||||
|
0, G_MAXUINT64, 0,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
g_object_class_install_properties (gobject_class, PROP_LAST, props);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_device_tool_init (ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_input_device_tool_get_serial:
|
||||||
|
* @tool: a #ClutterInputDeviceTool
|
||||||
|
*
|
||||||
|
* Gets the serial of this tool, this value can be used to identify a
|
||||||
|
* physical tool (eg. a tablet pen) across program executions.
|
||||||
|
*
|
||||||
|
* Returns: The serial ID for this tool
|
||||||
|
*
|
||||||
|
* Since: 1.28
|
||||||
|
**/
|
||||||
|
guint64
|
||||||
|
clutter_input_device_tool_get_serial (ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceToolPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_TOOL (tool), 0);
|
||||||
|
|
||||||
|
priv = clutter_input_device_tool_get_instance_private (tool);
|
||||||
|
|
||||||
|
return priv->serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_input_device_tool_get_tool_type:
|
||||||
|
* @tool: a #ClutterInputDeviceTool
|
||||||
|
*
|
||||||
|
* Gets the tool type of this tool.
|
||||||
|
*
|
||||||
|
* Returns: The tool type of this tool
|
||||||
|
*
|
||||||
|
* Since: 1.28
|
||||||
|
**/
|
||||||
|
ClutterInputDeviceToolType
|
||||||
|
clutter_input_device_tool_get_tool_type (ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceToolPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_TOOL (tool), 0);
|
||||||
|
|
||||||
|
priv = clutter_input_device_tool_get_instance_private (tool);
|
||||||
|
|
||||||
|
return priv->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_input_device_tool_get_id:
|
||||||
|
* @tool: a #ClutterInputDeviceTool
|
||||||
|
*
|
||||||
|
* Gets the ID of this tool, this value can be used to identify a
|
||||||
|
* physical tool (eg. a tablet pen) across program executions.
|
||||||
|
*
|
||||||
|
* Returns: The tool ID for this tool
|
||||||
|
**/
|
||||||
|
guint64
|
||||||
|
clutter_input_device_tool_get_id (ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceToolPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_TOOL (tool), 0);
|
||||||
|
|
||||||
|
priv = clutter_input_device_tool_get_instance_private (tool);
|
||||||
|
|
||||||
|
return priv->id;
|
||||||
|
}
|
69
clutter/clutter/clutter-input-device-tool.h
Normal file
69
clutter/clutter/clutter-input-device-tool.h
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Clutter.
|
||||||
|
*
|
||||||
|
* An OpenGL based 'interactive canvas' library.
|
||||||
|
*
|
||||||
|
* Copyright © 2009, 2010, 2011 Intel Corp.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_INPUT_DEVICE_TOOL_H__
|
||||||
|
#define __CLUTTER_INPUT_DEVICE_TOOL_H__
|
||||||
|
|
||||||
|
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
|
||||||
|
#error "Only <clutter/clutter.h> can be included directly."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <clutter/clutter-types.h>
|
||||||
|
#include "clutter-enum-types.h"
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define CLUTTER_TYPE_INPUT_DEVICE_TOOL (clutter_input_device_tool_get_type ())
|
||||||
|
#define CLUTTER_INPUT_DEVICE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_INPUT_DEVICE_TOOL, ClutterInputDeviceTool))
|
||||||
|
#define CLUTTER_IS_INPUT_DEVICE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_INPUT_DEVICE_TOOL))
|
||||||
|
#define CLUTTER_INPUT_DEVICE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_INPUT_DEVICE_TOOL, ClutterInputDeviceToolClass))
|
||||||
|
#define CLUTTER_IS_INPUT_DEVICE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_INPUT_DEVICE_TOOL))
|
||||||
|
#define CLUTTER_INPUT_DEVICE_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_INPUT_DEVICE_TOOL, ClutterInputDeviceToolClass))
|
||||||
|
|
||||||
|
typedef struct _ClutterInputDeviceToolClass ClutterInputDeviceToolClass;
|
||||||
|
|
||||||
|
struct _ClutterInputDeviceTool
|
||||||
|
{
|
||||||
|
GObject parent_instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _ClutterInputDeviceToolClass
|
||||||
|
{
|
||||||
|
GObjectClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
GType clutter_input_device_tool_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
guint64 clutter_input_device_tool_get_serial (ClutterInputDeviceTool *tool);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
ClutterInputDeviceToolType clutter_input_device_tool_get_tool_type (ClutterInputDeviceTool *tool);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
guint64 clutter_input_device_tool_get_id (ClutterInputDeviceTool *tool);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_INPUT_DEVICE_TOOL_H__ */
|
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-input-device.h"
|
#include "clutter-input-device.h"
|
||||||
@@ -45,6 +45,7 @@
|
|||||||
#include "clutter-marshal.h"
|
#include "clutter-marshal.h"
|
||||||
#include "clutter-private.h"
|
#include "clutter-private.h"
|
||||||
#include "clutter-stage-private.h"
|
#include "clutter-stage-private.h"
|
||||||
|
#include "clutter-input-device-tool.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
@@ -69,11 +70,21 @@ enum
|
|||||||
PROP_VENDOR_ID,
|
PROP_VENDOR_ID,
|
||||||
PROP_PRODUCT_ID,
|
PROP_PRODUCT_ID,
|
||||||
|
|
||||||
|
PROP_N_STRIPS,
|
||||||
|
PROP_N_RINGS,
|
||||||
|
PROP_N_MODE_GROUPS,
|
||||||
|
PROP_DEVICE_NODE,
|
||||||
|
PROP_MAPPING_MODE,
|
||||||
|
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
static void _clutter_input_device_free_touch_info (gpointer data);
|
static void _clutter_input_device_free_touch_info (gpointer data);
|
||||||
|
static void on_cursor_actor_destroy (ClutterActor *actor,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
static void on_cursor_actor_reactive_changed (ClutterActor *actor,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
|
||||||
static GParamSpec *obj_props[PROP_LAST] = { NULL, };
|
static GParamSpec *obj_props[PROP_LAST] = { NULL, };
|
||||||
|
|
||||||
@@ -103,6 +114,18 @@ clutter_input_device_dispose (GObject *gobject)
|
|||||||
g_clear_pointer (&device->scroll_info, g_array_unref);
|
g_clear_pointer (&device->scroll_info, g_array_unref);
|
||||||
g_clear_pointer (&device->touch_sequences_info, g_hash_table_unref);
|
g_clear_pointer (&device->touch_sequences_info, g_hash_table_unref);
|
||||||
|
|
||||||
|
if (device->cursor_actor)
|
||||||
|
{
|
||||||
|
g_signal_handlers_disconnect_by_func (device->cursor_actor,
|
||||||
|
G_CALLBACK (on_cursor_actor_destroy),
|
||||||
|
device);
|
||||||
|
g_signal_handlers_disconnect_by_func (device->cursor_actor,
|
||||||
|
G_CALLBACK (on_cursor_actor_reactive_changed),
|
||||||
|
device);
|
||||||
|
_clutter_actor_set_has_pointer (device->cursor_actor, FALSE);
|
||||||
|
device->cursor_actor = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (device->inv_touch_sequence_actors)
|
if (device->inv_touch_sequence_actors)
|
||||||
{
|
{
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
@@ -110,7 +133,16 @@ clutter_input_device_dispose (GObject *gobject)
|
|||||||
|
|
||||||
g_hash_table_iter_init (&iter, device->inv_touch_sequence_actors);
|
g_hash_table_iter_init (&iter, device->inv_touch_sequence_actors);
|
||||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||||
g_list_free (value);
|
{
|
||||||
|
g_signal_handlers_disconnect_by_func (key,
|
||||||
|
G_CALLBACK (on_cursor_actor_destroy),
|
||||||
|
device);
|
||||||
|
g_signal_handlers_disconnect_by_func (device->cursor_actor,
|
||||||
|
G_CALLBACK (on_cursor_actor_reactive_changed),
|
||||||
|
device);
|
||||||
|
_clutter_actor_set_has_pointer (key, FALSE);
|
||||||
|
g_list_free (value);
|
||||||
|
}
|
||||||
|
|
||||||
g_hash_table_unref (device->inv_touch_sequence_actors);
|
g_hash_table_unref (device->inv_touch_sequence_actors);
|
||||||
device->inv_touch_sequence_actors = NULL;
|
device->inv_touch_sequence_actors = NULL;
|
||||||
@@ -169,6 +201,26 @@ clutter_input_device_set_property (GObject *gobject,
|
|||||||
self->product_id = g_value_dup_string (value);
|
self->product_id = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_N_RINGS:
|
||||||
|
self->n_rings = g_value_get_int (value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_N_STRIPS:
|
||||||
|
self->n_strips = g_value_get_int (value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_N_MODE_GROUPS:
|
||||||
|
self->n_mode_groups = g_value_get_int (value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_DEVICE_NODE:
|
||||||
|
self->node_path = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_MAPPING_MODE:
|
||||||
|
self->mapping_mode = g_value_get_enum (value);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -229,6 +281,26 @@ clutter_input_device_get_property (GObject *gobject,
|
|||||||
g_value_set_string (value, self->product_id);
|
g_value_set_string (value, self->product_id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_N_RINGS:
|
||||||
|
g_value_set_int (value, self->n_rings);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_N_STRIPS:
|
||||||
|
g_value_set_int (value, self->n_strips);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_N_MODE_GROUPS:
|
||||||
|
g_value_set_int (value, self->n_mode_groups);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_DEVICE_NODE:
|
||||||
|
g_value_set_string (value, self->node_path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_MAPPING_MODE:
|
||||||
|
g_value_set_enum (value, self->mapping_mode);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -406,6 +478,42 @@ clutter_input_device_class_init (ClutterInputDeviceClass *klass)
|
|||||||
NULL,
|
NULL,
|
||||||
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
obj_props[PROP_N_RINGS] =
|
||||||
|
g_param_spec_int ("n-rings",
|
||||||
|
P_("Number of rings"),
|
||||||
|
P_("Number of rings (circular sliders) in this device"),
|
||||||
|
0, G_MAXINT, 0,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
obj_props[PROP_N_STRIPS] =
|
||||||
|
g_param_spec_int ("n-strips",
|
||||||
|
P_("Number of strips"),
|
||||||
|
P_("Number of strips (linear sliders) in this device"),
|
||||||
|
0, G_MAXINT, 0,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
obj_props[PROP_N_MODE_GROUPS] =
|
||||||
|
g_param_spec_int ("n-mode-groups",
|
||||||
|
P_("Number of mode groups"),
|
||||||
|
P_("Number of mode groups"),
|
||||||
|
0, G_MAXINT, 0,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
obj_props[PROP_DEVICE_NODE] =
|
||||||
|
g_param_spec_string ("device-node",
|
||||||
|
P_("Device node path"),
|
||||||
|
P_("Device node path"),
|
||||||
|
NULL,
|
||||||
|
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
|
|
||||||
|
obj_props[PROP_MAPPING_MODE] =
|
||||||
|
g_param_spec_enum ("mapping-mode",
|
||||||
|
P_("Device mapping mode"),
|
||||||
|
P_("Device mapping mode"),
|
||||||
|
CLUTTER_TYPE_INPUT_DEVICE_MAPPING,
|
||||||
|
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE,
|
||||||
|
CLUTTER_PARAM_READWRITE);
|
||||||
|
|
||||||
gobject_class->dispose = clutter_input_device_dispose;
|
gobject_class->dispose = clutter_input_device_dispose;
|
||||||
gobject_class->set_property = clutter_input_device_set_property;
|
gobject_class->set_property = clutter_input_device_set_property;
|
||||||
gobject_class->get_property = clutter_input_device_get_property;
|
gobject_class->get_property = clutter_input_device_get_property;
|
||||||
@@ -598,12 +706,6 @@ _clutter_input_device_get_actor (ClutterInputDevice *device,
|
|||||||
return info->actor;
|
return info->actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_cursor_actor_destroy (ClutterActor *actor,
|
|
||||||
ClutterInputDevice *device);
|
|
||||||
static void on_cursor_actor_reactive_changed (ClutterActor *actor,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
ClutterInputDevice *device);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_clutter_input_device_associate_actor (ClutterInputDevice *device,
|
_clutter_input_device_associate_actor (ClutterInputDevice *device,
|
||||||
ClutterEventSequence *sequence,
|
ClutterEventSequence *sequence,
|
||||||
@@ -1992,3 +2094,195 @@ clutter_input_device_get_product_id (ClutterInputDevice *device)
|
|||||||
|
|
||||||
return device->product_id;
|
return device->product_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_device_add_tool (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
|
g_return_if_fail (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_MASTER);
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE_TOOL (tool));
|
||||||
|
|
||||||
|
if (!device->tools)
|
||||||
|
device->tools = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
|
||||||
|
|
||||||
|
g_ptr_array_add (device->tools, tool);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClutterInputDeviceTool *
|
||||||
|
clutter_input_device_lookup_tool (ClutterInputDevice *device,
|
||||||
|
guint64 serial,
|
||||||
|
ClutterInputDeviceToolType type)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceTool *tool;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
|
||||||
|
g_return_val_if_fail (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_MASTER, NULL);
|
||||||
|
|
||||||
|
if (!device->tools)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < device->tools->len; i++)
|
||||||
|
{
|
||||||
|
tool = g_ptr_array_index (device->tools, i);
|
||||||
|
|
||||||
|
if (serial == clutter_input_device_tool_get_serial (tool) &&
|
||||||
|
type == clutter_input_device_tool_get_tool_type (tool))
|
||||||
|
return tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_device_update_from_tool (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceTool *tool)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceClass *device_class;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
|
|
||||||
|
device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
|
||||||
|
|
||||||
|
if (device_class->update_from_tool)
|
||||||
|
device_class->update_from_tool (device, tool);
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
clutter_input_device_get_n_rings (ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
|
||||||
|
|
||||||
|
return device->n_rings;
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
clutter_input_device_get_n_strips (ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
|
||||||
|
|
||||||
|
return device->n_strips;
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
clutter_input_device_get_n_mode_groups (ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
|
||||||
|
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
|
||||||
|
CLUTTER_PAD_DEVICE, 0);
|
||||||
|
|
||||||
|
return device->n_mode_groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
clutter_input_device_get_group_n_modes (ClutterInputDevice *device,
|
||||||
|
gint group)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceClass *device_class;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
|
||||||
|
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
|
||||||
|
CLUTTER_PAD_DEVICE, 0);
|
||||||
|
g_return_val_if_fail (group >= 0, 0);
|
||||||
|
|
||||||
|
device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
|
||||||
|
|
||||||
|
if (device_class->get_group_n_modes)
|
||||||
|
return device_class->get_group_n_modes (device, group);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
clutter_input_device_is_mode_switch_button (ClutterInputDevice *device,
|
||||||
|
guint group,
|
||||||
|
guint button)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceClass *device_class;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
|
||||||
|
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
|
||||||
|
CLUTTER_PAD_DEVICE, FALSE);
|
||||||
|
|
||||||
|
device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
|
||||||
|
|
||||||
|
if (device_class->is_mode_switch_button)
|
||||||
|
return device_class->is_mode_switch_button (device, group, button);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
clutter_input_device_get_mode_switch_button_group (ClutterInputDevice *device,
|
||||||
|
guint button)
|
||||||
|
{
|
||||||
|
gint group;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), -1);
|
||||||
|
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
|
||||||
|
CLUTTER_PAD_DEVICE, -1);
|
||||||
|
|
||||||
|
for (group = 0; group < device->n_mode_groups; group++)
|
||||||
|
{
|
||||||
|
if (clutter_input_device_is_mode_switch_button (device, group, button))
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const gchar *
|
||||||
|
clutter_input_device_get_device_node (ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
|
||||||
|
|
||||||
|
return device->node_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
ClutterInputDeviceMapping
|
||||||
|
clutter_input_device_get_mapping_mode (ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceType device_type;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device),
|
||||||
|
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE);
|
||||||
|
|
||||||
|
device_type = clutter_input_device_get_device_type (device);
|
||||||
|
g_return_val_if_fail (device_type == CLUTTER_TABLET_DEVICE ||
|
||||||
|
device_type == CLUTTER_PEN_DEVICE ||
|
||||||
|
device_type == CLUTTER_ERASER_DEVICE,
|
||||||
|
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE);
|
||||||
|
|
||||||
|
return device->mapping_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_device_set_mapping_mode (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceMapping mapping)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceType device_type;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
|
||||||
|
|
||||||
|
device_type = clutter_input_device_get_device_type (device);
|
||||||
|
g_return_if_fail (device_type == CLUTTER_TABLET_DEVICE ||
|
||||||
|
device_type == CLUTTER_PEN_DEVICE ||
|
||||||
|
device_type == CLUTTER_ERASER_DEVICE);
|
||||||
|
|
||||||
|
if (device->mapping_mode == mapping)
|
||||||
|
return;
|
||||||
|
|
||||||
|
device->mapping_mode = mapping;
|
||||||
|
g_object_notify (G_OBJECT (device), "mapping-mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
clutter_input_device_is_grouped (ClutterInputDevice *device,
|
||||||
|
ClutterInputDevice *other_device)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (other_device), FALSE);
|
||||||
|
|
||||||
|
return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->is_grouped (device, other_device);
|
||||||
|
}
|
||||||
|
@@ -140,6 +140,38 @@ const gchar * clutter_input_device_get_vendor_id (ClutterInputDev
|
|||||||
CLUTTER_AVAILABLE_IN_1_22
|
CLUTTER_AVAILABLE_IN_1_22
|
||||||
const gchar * clutter_input_device_get_product_id (ClutterInputDevice *device);
|
const gchar * clutter_input_device_get_product_id (ClutterInputDevice *device);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gint clutter_input_device_get_n_rings (ClutterInputDevice *device);
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gint clutter_input_device_get_n_strips (ClutterInputDevice *device);
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gint clutter_input_device_get_n_mode_groups (ClutterInputDevice *device);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gint clutter_input_device_get_group_n_modes (ClutterInputDevice *device,
|
||||||
|
gint group);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gboolean clutter_input_device_is_mode_switch_button (ClutterInputDevice *device,
|
||||||
|
guint group,
|
||||||
|
guint button);
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gint clutter_input_device_get_mode_switch_button_group (ClutterInputDevice *device,
|
||||||
|
guint button);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
const gchar * clutter_input_device_get_device_node (ClutterInputDevice *device);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
ClutterInputDeviceMapping clutter_input_device_get_mapping_mode (ClutterInputDevice *device);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
void clutter_input_device_set_mapping_mode (ClutterInputDevice *device,
|
||||||
|
ClutterInputDeviceMapping mapping);
|
||||||
|
CLUTTER_AVAILABLE_IN_ALL
|
||||||
|
gboolean clutter_input_device_is_grouped (ClutterInputDevice *device,
|
||||||
|
ClutterInputDevice *other_device);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_INPUT_DEVICE_H__ */
|
#endif /* __CLUTTER_INPUT_DEVICE_H__ */
|
||||||
|
40
clutter/clutter/clutter-input-focus-private.h
Normal file
40
clutter/clutter/clutter-input-focus-private.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017,2018 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_INPUT_FOCUS_PRIVATE_H__
|
||||||
|
#define __CLUTTER_INPUT_FOCUS_PRIVATE_H__
|
||||||
|
|
||||||
|
void clutter_input_focus_focus_in (ClutterInputFocus *focus,
|
||||||
|
ClutterInputMethod *method);
|
||||||
|
void clutter_input_focus_focus_out (ClutterInputFocus *focus);
|
||||||
|
|
||||||
|
void clutter_input_focus_commit (ClutterInputFocus *focus,
|
||||||
|
const gchar *text);
|
||||||
|
void clutter_input_focus_delete_surrounding (ClutterInputFocus *focus,
|
||||||
|
guint offset,
|
||||||
|
guint len);
|
||||||
|
void clutter_input_focus_request_surrounding (ClutterInputFocus *focus);
|
||||||
|
|
||||||
|
void clutter_input_focus_set_preedit_text (ClutterInputFocus *focus,
|
||||||
|
const gchar *preedit,
|
||||||
|
guint cursor);
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_INPUT_FOCUS_PRIVATE_H__ */
|
243
clutter/clutter/clutter-input-focus.c
Normal file
243
clutter/clutter/clutter-input-focus.c
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017,2018 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
|
#include "clutter/clutter-input-focus.h"
|
||||||
|
#include "clutter/clutter-input-focus-private.h"
|
||||||
|
#include "clutter/clutter-input-method-private.h"
|
||||||
|
|
||||||
|
typedef struct _ClutterInputFocusPrivate ClutterInputFocusPrivate;
|
||||||
|
|
||||||
|
struct _ClutterInputFocusPrivate
|
||||||
|
{
|
||||||
|
ClutterInputMethod *im;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputFocus, clutter_input_focus, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_focus_real_focus_in (ClutterInputFocus *focus,
|
||||||
|
ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
priv->im = im;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_focus_real_focus_out (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
priv->im = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_focus_class_init (ClutterInputFocusClass *klass)
|
||||||
|
{
|
||||||
|
klass->focus_in = clutter_input_focus_real_focus_in;
|
||||||
|
klass->focus_out = clutter_input_focus_real_focus_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_focus_init (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
clutter_input_focus_is_focused (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
return !!priv->im;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_reset (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_reset (priv->im);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_set_cursor_location (ClutterInputFocus *focus,
|
||||||
|
const ClutterRect *rect)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_set_cursor_location (priv->im, rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_set_surrounding (ClutterInputFocus *focus,
|
||||||
|
const gchar *text,
|
||||||
|
guint cursor,
|
||||||
|
guint anchor)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_set_surrounding (priv->im, text, cursor, anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_set_content_hints (ClutterInputFocus *focus,
|
||||||
|
ClutterInputContentHintFlags hints)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_set_content_hints (priv->im, hints);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_set_content_purpose (ClutterInputFocus *focus,
|
||||||
|
ClutterInputContentPurpose purpose)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_set_content_purpose (priv->im, purpose);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
clutter_input_focus_filter_key_event (ClutterInputFocus *focus,
|
||||||
|
const ClutterKeyEvent *key)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE);
|
||||||
|
g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE);
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
return clutter_input_method_filter_key_event (priv->im, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_set_can_show_preedit (ClutterInputFocus *focus,
|
||||||
|
gboolean can_show_preedit)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_set_can_show_preedit (priv->im, can_show_preedit);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_request_toggle_input_panel (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
ClutterInputFocusPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (clutter_input_focus_is_focused (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_focus_get_instance_private (focus);
|
||||||
|
|
||||||
|
clutter_input_method_toggle_input_panel (priv->im);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_focus_in (ClutterInputFocus *focus,
|
||||||
|
ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->focus_in (focus, im);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_focus_out (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->focus_out (focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_commit (ClutterInputFocus *focus,
|
||||||
|
const gchar *text)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->commit_text (focus, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_delete_surrounding (ClutterInputFocus *focus,
|
||||||
|
guint offset,
|
||||||
|
guint len)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->delete_surrounding (focus, offset, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_request_surrounding (ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->request_surrounding (focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_focus_set_preedit_text (ClutterInputFocus *focus,
|
||||||
|
const gchar *preedit,
|
||||||
|
guint cursor)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->set_preedit_text (focus, preedit, cursor);
|
||||||
|
}
|
83
clutter/clutter/clutter-input-focus.h
Normal file
83
clutter/clutter/clutter-input-focus.h
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017,2018 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_INPUT_FOCUS_H__
|
||||||
|
#define __CLUTTER_INPUT_FOCUS_H__
|
||||||
|
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
|
#define CLUTTER_TYPE_INPUT_FOCUS (clutter_input_focus_get_type ())
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
G_DECLARE_DERIVABLE_TYPE (ClutterInputFocus, clutter_input_focus,
|
||||||
|
CLUTTER, INPUT_FOCUS, GObject)
|
||||||
|
|
||||||
|
struct _ClutterInputFocusClass
|
||||||
|
{
|
||||||
|
GObjectClass parent_class;
|
||||||
|
GTypeInterface iface;
|
||||||
|
|
||||||
|
void (* focus_in) (ClutterInputFocus *focus,
|
||||||
|
ClutterInputMethod *input_method);
|
||||||
|
void (* focus_out) (ClutterInputFocus *focus);
|
||||||
|
|
||||||
|
void (* request_surrounding) (ClutterInputFocus *focus);
|
||||||
|
void (* delete_surrounding) (ClutterInputFocus *focus,
|
||||||
|
guint offset,
|
||||||
|
guint len);
|
||||||
|
void (* commit_text) (ClutterInputFocus *focus,
|
||||||
|
const gchar *text);
|
||||||
|
|
||||||
|
void (* set_preedit_text) (ClutterInputFocus *focus,
|
||||||
|
const gchar *preedit,
|
||||||
|
guint cursor);
|
||||||
|
};
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
gboolean clutter_input_focus_is_focused (ClutterInputFocus *focus);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_reset (ClutterInputFocus *focus);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_set_cursor_location (ClutterInputFocus *focus,
|
||||||
|
const ClutterRect *rect);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_set_surrounding (ClutterInputFocus *focus,
|
||||||
|
const gchar *text,
|
||||||
|
guint cursor,
|
||||||
|
guint anchor);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_set_content_hints (ClutterInputFocus *focus,
|
||||||
|
ClutterInputContentHintFlags hint);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_set_content_purpose (ClutterInputFocus *focus,
|
||||||
|
ClutterInputContentPurpose purpose);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
gboolean clutter_input_focus_filter_key_event (ClutterInputFocus *focus,
|
||||||
|
const ClutterKeyEvent *key);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_set_can_show_preedit (ClutterInputFocus *focus,
|
||||||
|
gboolean can_show_preedit);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_focus_request_toggle_input_panel (ClutterInputFocus *focus);
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_INPUT_FOCUS_H__ */
|
46
clutter/clutter/clutter-input-method-private.h
Normal file
46
clutter/clutter/clutter-input-method-private.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017,2018 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_INPUT_METHOD_PRIVATE_H__
|
||||||
|
#define __CLUTTER_INPUT_METHOD_PRIVATE_H__
|
||||||
|
|
||||||
|
ClutterInputFocus * clutter_input_method_get_focus (ClutterInputMethod *method);
|
||||||
|
|
||||||
|
void clutter_input_method_reset (ClutterInputMethod *method);
|
||||||
|
|
||||||
|
void clutter_input_method_set_cursor_location (ClutterInputMethod *method,
|
||||||
|
const ClutterRect *rect);
|
||||||
|
void clutter_input_method_set_surrounding (ClutterInputMethod *method,
|
||||||
|
const gchar *text,
|
||||||
|
guint cursor,
|
||||||
|
guint anchor);
|
||||||
|
void clutter_input_method_set_content_hints (ClutterInputMethod *method,
|
||||||
|
ClutterInputContentHintFlags hints);
|
||||||
|
void clutter_input_method_set_content_purpose (ClutterInputMethod *method,
|
||||||
|
ClutterInputContentPurpose purpose);
|
||||||
|
void clutter_input_method_set_can_show_preedit (ClutterInputMethod *method,
|
||||||
|
gboolean can_show_preedit);
|
||||||
|
gboolean clutter_input_method_filter_key_event (ClutterInputMethod *method,
|
||||||
|
const ClutterKeyEvent *key);
|
||||||
|
|
||||||
|
void clutter_input_method_toggle_input_panel (ClutterInputMethod *method);
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_INPUT_METHOD_PRIVATE_H__ */
|
444
clutter/clutter/clutter-input-method.c
Normal file
444
clutter/clutter/clutter-input-method.c
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017,2018 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
|
#include "clutter-private.h"
|
||||||
|
#include "clutter/clutter-input-method.h"
|
||||||
|
#include "clutter/clutter-input-method-private.h"
|
||||||
|
#include "clutter/clutter-input-focus-private.h"
|
||||||
|
|
||||||
|
typedef struct _ClutterInputMethodPrivate ClutterInputMethodPrivate;
|
||||||
|
|
||||||
|
struct _ClutterInputMethodPrivate
|
||||||
|
{
|
||||||
|
ClutterInputFocus *focus;
|
||||||
|
ClutterInputContentHintFlags content_hints;
|
||||||
|
ClutterInputContentPurpose content_purpose;
|
||||||
|
gboolean can_show_preedit;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
COMMIT,
|
||||||
|
DELETE_SURROUNDING,
|
||||||
|
REQUEST_SURROUNDING,
|
||||||
|
INPUT_PANEL_STATE,
|
||||||
|
CURSOR_LOCATION_CHANGED,
|
||||||
|
N_SIGNALS,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
PROP_CONTENT_HINTS,
|
||||||
|
PROP_CONTENT_PURPOSE,
|
||||||
|
PROP_CAN_SHOW_PREEDIT,
|
||||||
|
N_PROPS
|
||||||
|
};
|
||||||
|
|
||||||
|
static guint signals[N_SIGNALS] = { 0 };
|
||||||
|
static GParamSpec *pspecs[N_PROPS] = { 0 };
|
||||||
|
|
||||||
|
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputMethod, clutter_input_method, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_content_hints (ClutterInputMethod *im,
|
||||||
|
ClutterInputContentHintFlags content_hints)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
priv->content_hints = content_hints;
|
||||||
|
CLUTTER_INPUT_METHOD_GET_CLASS (im)->update_content_hints (im, content_hints);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_content_purpose (ClutterInputMethod *im,
|
||||||
|
ClutterInputContentPurpose content_purpose)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
priv->content_purpose = content_purpose;
|
||||||
|
CLUTTER_INPUT_METHOD_GET_CLASS (im)->update_content_purpose (im,
|
||||||
|
content_purpose);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_can_show_preedit (ClutterInputMethod *im,
|
||||||
|
gboolean can_show_preedit)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
priv->can_show_preedit = can_show_preedit;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_method_set_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_CONTENT_HINTS:
|
||||||
|
set_content_hints (CLUTTER_INPUT_METHOD (object),
|
||||||
|
g_value_get_flags (value));
|
||||||
|
break;
|
||||||
|
case PROP_CONTENT_PURPOSE:
|
||||||
|
set_content_purpose (CLUTTER_INPUT_METHOD (object),
|
||||||
|
g_value_get_enum (value));
|
||||||
|
break;
|
||||||
|
case PROP_CAN_SHOW_PREEDIT:
|
||||||
|
set_can_show_preedit (CLUTTER_INPUT_METHOD (object),
|
||||||
|
g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_method_get_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
ClutterInputMethod *im;
|
||||||
|
|
||||||
|
im = CLUTTER_INPUT_METHOD (object);
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_CONTENT_HINTS:
|
||||||
|
g_value_set_flags (value, priv->content_hints);
|
||||||
|
break;
|
||||||
|
case PROP_CONTENT_PURPOSE:
|
||||||
|
g_value_set_enum (value, priv->content_purpose);
|
||||||
|
break;
|
||||||
|
case PROP_CAN_SHOW_PREEDIT:
|
||||||
|
g_value_set_boolean (value, priv->can_show_preedit);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_method_class_init (ClutterInputMethodClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
object_class->set_property = clutter_input_method_set_property;
|
||||||
|
object_class->get_property = clutter_input_method_get_property;
|
||||||
|
|
||||||
|
signals[COMMIT] =
|
||||||
|
g_signal_new ("commit",
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 1, G_TYPE_STRING);
|
||||||
|
signals[DELETE_SURROUNDING] =
|
||||||
|
g_signal_new ("delete-surrounding",
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
|
||||||
|
signals[REQUEST_SURROUNDING] =
|
||||||
|
g_signal_new ("request-surrounding",
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 0);
|
||||||
|
signals[INPUT_PANEL_STATE] =
|
||||||
|
g_signal_new ("input-panel-state",
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 1,
|
||||||
|
CLUTTER_TYPE_INPUT_PANEL_STATE);
|
||||||
|
signals[CURSOR_LOCATION_CHANGED] =
|
||||||
|
g_signal_new ("cursor-location-changed",
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 1, CLUTTER_TYPE_RECT);
|
||||||
|
|
||||||
|
pspecs[PROP_CONTENT_HINTS] =
|
||||||
|
g_param_spec_flags ("content-hints",
|
||||||
|
P_("Content hints"),
|
||||||
|
P_("Content hints"),
|
||||||
|
CLUTTER_TYPE_INPUT_CONTENT_HINT_FLAGS, 0,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_STATIC_STRINGS);
|
||||||
|
pspecs[PROP_CONTENT_PURPOSE] =
|
||||||
|
g_param_spec_enum ("content-purpose",
|
||||||
|
P_("Content purpose"),
|
||||||
|
P_("Content purpose"),
|
||||||
|
CLUTTER_TYPE_INPUT_CONTENT_PURPOSE, 0,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_STATIC_STRINGS);
|
||||||
|
pspecs[PROP_CAN_SHOW_PREEDIT] =
|
||||||
|
g_param_spec_boolean ("can-show-preedit",
|
||||||
|
P_("Can show preedit"),
|
||||||
|
P_("Can show preedit"),
|
||||||
|
FALSE,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
g_object_class_install_properties (object_class, N_PROPS, pspecs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_input_method_init (ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_focus_in (ClutterInputMethod *im,
|
||||||
|
ClutterInputFocus *focus)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
ClutterInputMethodClass *klass;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
|
||||||
|
if (priv->focus == focus)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (priv->focus)
|
||||||
|
clutter_input_method_focus_out (im);
|
||||||
|
|
||||||
|
g_set_object (&priv->focus, focus);
|
||||||
|
|
||||||
|
if (focus)
|
||||||
|
{
|
||||||
|
klass = CLUTTER_INPUT_METHOD_GET_CLASS (im);
|
||||||
|
klass->focus_in (im, focus);
|
||||||
|
|
||||||
|
clutter_input_focus_focus_in (priv->focus, im);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_focus_out (ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
ClutterInputMethodClass *klass;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
|
||||||
|
if (!priv->focus)
|
||||||
|
return;
|
||||||
|
|
||||||
|
clutter_input_focus_focus_out (priv->focus);
|
||||||
|
g_clear_object (&priv->focus);
|
||||||
|
|
||||||
|
klass = CLUTTER_INPUT_METHOD_GET_CLASS (im);
|
||||||
|
klass->focus_out (im);
|
||||||
|
|
||||||
|
g_signal_emit (im, signals[INPUT_PANEL_STATE],
|
||||||
|
0, CLUTTER_INPUT_PANEL_STATE_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClutterInputFocus *
|
||||||
|
clutter_input_method_get_focus (ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
return priv->focus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_commit (ClutterInputMethod *im,
|
||||||
|
const gchar *text)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
if (priv->focus)
|
||||||
|
clutter_input_focus_commit (priv->focus, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_delete_surrounding (ClutterInputMethod *im,
|
||||||
|
guint offset,
|
||||||
|
guint len)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
if (priv->focus)
|
||||||
|
clutter_input_focus_delete_surrounding (priv->focus, offset, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_request_surrounding (ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
if (priv->focus)
|
||||||
|
clutter_input_focus_request_surrounding (priv->focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_input_method_set_preedit_text:
|
||||||
|
* @im: a #ClutterInputMethod
|
||||||
|
* @preedit: (nullable): the preedit text, or %NULL
|
||||||
|
* @cursor: the cursor
|
||||||
|
*
|
||||||
|
* Sets the preedit text on the current input focus.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
clutter_input_method_set_preedit_text (ClutterInputMethod *im,
|
||||||
|
const gchar *preedit,
|
||||||
|
guint cursor)
|
||||||
|
{
|
||||||
|
ClutterInputMethodPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
priv = clutter_input_method_get_instance_private (im);
|
||||||
|
if (priv->focus)
|
||||||
|
clutter_input_focus_set_preedit_text (priv->focus, preedit, cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_notify_key_event (ClutterInputMethod *im,
|
||||||
|
const ClutterEvent *event,
|
||||||
|
gboolean filtered)
|
||||||
|
{
|
||||||
|
if (!filtered)
|
||||||
|
{
|
||||||
|
ClutterEvent *copy;
|
||||||
|
|
||||||
|
/* XXX: we rely on the IM implementation to notify back of
|
||||||
|
* key events in the exact same order they were given.
|
||||||
|
*/
|
||||||
|
copy = clutter_event_copy (event);
|
||||||
|
clutter_event_set_flags (copy, clutter_event_get_flags (event) |
|
||||||
|
CLUTTER_EVENT_FLAG_INPUT_METHOD);
|
||||||
|
clutter_event_set_source_device (copy, clutter_event_get_device (copy));
|
||||||
|
clutter_event_put (copy);
|
||||||
|
clutter_event_free (copy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_toggle_input_panel (ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
g_signal_emit (im, signals[INPUT_PANEL_STATE], 0,
|
||||||
|
CLUTTER_INPUT_PANEL_STATE_TOGGLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_reset (ClutterInputMethod *im)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_METHOD_GET_CLASS (im)->reset (im);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_set_cursor_location (ClutterInputMethod *im,
|
||||||
|
const ClutterRect *rect)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_METHOD_GET_CLASS (im)->set_cursor_location (im, rect);
|
||||||
|
|
||||||
|
g_signal_emit (im, signals[CURSOR_LOCATION_CHANGED], 0, rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_set_surrounding (ClutterInputMethod *im,
|
||||||
|
const gchar *text,
|
||||||
|
guint cursor,
|
||||||
|
guint anchor)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
CLUTTER_INPUT_METHOD_GET_CLASS (im)->set_surrounding (im, text,
|
||||||
|
cursor, anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_set_content_hints (ClutterInputMethod *im,
|
||||||
|
ClutterInputContentHintFlags hints)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
g_object_set (G_OBJECT (im), "content-hints", hints, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_set_content_purpose (ClutterInputMethod *im,
|
||||||
|
ClutterInputContentPurpose purpose)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
g_object_set (G_OBJECT (im), "content-purpose", purpose, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_input_method_set_can_show_preedit (ClutterInputMethod *im,
|
||||||
|
gboolean can_show_preedit)
|
||||||
|
{
|
||||||
|
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
|
||||||
|
|
||||||
|
g_object_set (G_OBJECT (im), "can-show-preedit", can_show_preedit, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
clutter_input_method_filter_key_event (ClutterInputMethod *im,
|
||||||
|
const ClutterKeyEvent *key)
|
||||||
|
{
|
||||||
|
ClutterInputMethodClass *im_class = CLUTTER_INPUT_METHOD_GET_CLASS (im);
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INPUT_METHOD (im), FALSE);
|
||||||
|
g_return_val_if_fail (key != NULL, FALSE);
|
||||||
|
|
||||||
|
if (clutter_event_get_flags ((ClutterEvent *) key) & CLUTTER_EVENT_FLAG_INPUT_METHOD)
|
||||||
|
return FALSE;
|
||||||
|
if (!im_class->filter_key_event)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return im_class->filter_key_event (im, (const ClutterEvent *) key);
|
||||||
|
}
|
88
clutter/clutter/clutter-input-method.h
Normal file
88
clutter/clutter/clutter-input-method.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017,2018 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_INPUT_METHOD_H__
|
||||||
|
#define __CLUTTER_INPUT_METHOD_H__
|
||||||
|
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
|
#define CLUTTER_TYPE_INPUT_METHOD (clutter_input_method_get_type ())
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
G_DECLARE_DERIVABLE_TYPE (ClutterInputMethod, clutter_input_method,
|
||||||
|
CLUTTER, INPUT_METHOD, GObject)
|
||||||
|
|
||||||
|
typedef struct _ClutterInputMethodClass ClutterInputMethodClass;
|
||||||
|
|
||||||
|
struct _ClutterInputMethodClass
|
||||||
|
{
|
||||||
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
void (* focus_in) (ClutterInputMethod *im,
|
||||||
|
ClutterInputFocus *actor);
|
||||||
|
void (* focus_out) (ClutterInputMethod *im);
|
||||||
|
|
||||||
|
void (* reset) (ClutterInputMethod *im);
|
||||||
|
|
||||||
|
void (* set_cursor_location) (ClutterInputMethod *im,
|
||||||
|
const ClutterRect *rect);
|
||||||
|
void (* set_surrounding) (ClutterInputMethod *im,
|
||||||
|
const gchar *text,
|
||||||
|
guint cursor,
|
||||||
|
guint anchor);
|
||||||
|
void (* update_content_hints) (ClutterInputMethod *im,
|
||||||
|
ClutterInputContentHintFlags hint);
|
||||||
|
void (* update_content_purpose) (ClutterInputMethod *im,
|
||||||
|
ClutterInputContentPurpose purpose);
|
||||||
|
|
||||||
|
gboolean (* filter_key_event) (ClutterInputMethod *im,
|
||||||
|
const ClutterEvent *key);
|
||||||
|
};
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_focus_in (ClutterInputMethod *im,
|
||||||
|
ClutterInputFocus *focus);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_focus_out (ClutterInputMethod *im);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_commit (ClutterInputMethod *im,
|
||||||
|
const gchar *text);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_delete_surrounding (ClutterInputMethod *im,
|
||||||
|
guint offset,
|
||||||
|
guint len);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_request_surrounding (ClutterInputMethod *im);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_set_preedit_text (ClutterInputMethod *im,
|
||||||
|
const gchar *preedit,
|
||||||
|
guint cursor);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_notify_key_event (ClutterInputMethod *im,
|
||||||
|
const ClutterEvent *event,
|
||||||
|
gboolean filtered);
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_input_method_request_toggle_input_panel (ClutterInputMethod *im);
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_INPUT_METHOD_H__ */
|
@@ -46,7 +46,7 @@
|
|||||||
* #ClutterInterval is available since Clutter 1.0
|
* #ClutterInterval is available since Clutter 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -62,9 +62,6 @@
|
|||||||
#include "clutter-scriptable.h"
|
#include "clutter-scriptable.h"
|
||||||
#include "clutter-script-private.h"
|
#include "clutter-script-private.h"
|
||||||
|
|
||||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
|
|
||||||
#include "deprecated/clutter-fixed.h"
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
@@ -110,25 +107,6 @@ clutter_interval_real_validate (ClutterInterval *interval,
|
|||||||
{
|
{
|
||||||
GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec);
|
GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec);
|
||||||
|
|
||||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
|
||||||
|
|
||||||
/* check the GTypes we provide first */
|
|
||||||
if (pspec_gtype == COGL_TYPE_FIXED)
|
|
||||||
{
|
|
||||||
ClutterParamSpecFixed *pspec_fixed = CLUTTER_PARAM_SPEC_FIXED (pspec);
|
|
||||||
CoglFixed a, b;
|
|
||||||
|
|
||||||
a = b = 0;
|
|
||||||
clutter_interval_get_interval (interval, &a, &b);
|
|
||||||
if ((a >= pspec_fixed->minimum && a <= pspec_fixed->maximum) &&
|
|
||||||
(b >= pspec_fixed->minimum && b <= pspec_fixed->maximum))
|
|
||||||
return TRUE;
|
|
||||||
else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_GNUC_END_IGNORE_DEPRECATIONS;
|
|
||||||
|
|
||||||
/* then check the fundamental types */
|
/* then check the fundamental types */
|
||||||
switch (G_TYPE_FUNDAMENTAL (pspec_gtype))
|
switch (G_TYPE_FUNDAMENTAL (pspec_gtype))
|
||||||
{
|
{
|
||||||
|
@@ -63,7 +63,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-keyframe-transition.h"
|
#include "clutter-keyframe-transition.h"
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
@@ -130,7 +130,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
* #ClutterLayoutMeta is available since Clutter 1.2
|
* #ClutterLayoutMeta is available since Clutter 1.2
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-layout-meta.h"
|
#include "clutter-layout-meta.h"
|
||||||
|
@@ -128,6 +128,8 @@
|
|||||||
|
|
||||||
#define CLUTTER_AVAILABLE_IN_ALL _CLUTTER_EXTERN
|
#define CLUTTER_AVAILABLE_IN_ALL _CLUTTER_EXTERN
|
||||||
|
|
||||||
|
#define CLUTTER_AVAILABLE_IN_MUTTER _CLUTTER_EXTERN
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CLUTTER_VERSION_MIN_REQUIRED:
|
* CLUTTER_VERSION_MIN_REQUIRED:
|
||||||
*
|
*
|
||||||
@@ -276,6 +278,8 @@
|
|||||||
# define CLUTTER_DEPRECATED_IN_1_12_FOR(f) _CLUTTER_EXTERN
|
# define CLUTTER_DEPRECATED_IN_1_12_FOR(f) _CLUTTER_EXTERN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define CLUTTER_DEPRECATED_IN_MUTTER CLUTTER_DEPRECATED
|
||||||
|
|
||||||
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_12
|
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_12
|
||||||
# define CLUTTER_AVAILABLE_IN_1_12 CLUTTER_UNAVAILABLE(1, 12)
|
# define CLUTTER_AVAILABLE_IN_1_12 CLUTTER_UNAVAILABLE(1, 12)
|
||||||
#else
|
#else
|
||||||
|
@@ -48,7 +48,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -62,6 +62,7 @@
|
|||||||
#include "clutter-feature.h"
|
#include "clutter-feature.h"
|
||||||
#include "clutter-main.h"
|
#include "clutter-main.h"
|
||||||
#include "clutter-master-clock.h"
|
#include "clutter-master-clock.h"
|
||||||
|
#include "clutter-mutter.h"
|
||||||
#include "clutter-private.h"
|
#include "clutter-private.h"
|
||||||
#include "clutter-settings-private.h"
|
#include "clutter-settings-private.h"
|
||||||
#include "clutter-stage-manager.h"
|
#include "clutter-stage-manager.h"
|
||||||
@@ -718,14 +719,8 @@ clutter_get_text_direction (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Translators: Leave this UNTRANSLATED if your language is
|
/* Re-use GTK+'s LTR/RTL handling */
|
||||||
* left-to-right. If your language is right-to-left
|
const char *e = g_dgettext ("gtk30", "default:LTR");
|
||||||
* (e.g. Hebrew, Arabic), translate it to "default:RTL".
|
|
||||||
*
|
|
||||||
* Do NOT translate it to non-English e.g. "predefinito:LTR"! If
|
|
||||||
* it isn't default:LTR or default:RTL it will not work.
|
|
||||||
*/
|
|
||||||
char *e = _("default:LTR");
|
|
||||||
|
|
||||||
if (strcmp (e, "default:RTL") == 0)
|
if (strcmp (e, "default:RTL") == 0)
|
||||||
dir = CLUTTER_TEXT_DIRECTION_RTL;
|
dir = CLUTTER_TEXT_DIRECTION_RTL;
|
||||||
@@ -2094,6 +2089,21 @@ emit_keyboard_event (ClutterEvent *event,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
process_key_event (ClutterEvent *event,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
ClutterInputDeviceClass *device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
|
||||||
|
|
||||||
|
if (device_class->process_kbd_a11y_event)
|
||||||
|
{
|
||||||
|
device_class->process_kbd_a11y_event (event, device, emit_keyboard_event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit_keyboard_event (event, device);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
is_off_stage (ClutterActor *stage,
|
is_off_stage (ClutterActor *stage,
|
||||||
gfloat x,
|
gfloat x,
|
||||||
@@ -2162,6 +2172,10 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
|
|
||||||
case CLUTTER_KEY_PRESS:
|
case CLUTTER_KEY_PRESS:
|
||||||
case CLUTTER_KEY_RELEASE:
|
case CLUTTER_KEY_RELEASE:
|
||||||
|
case CLUTTER_PAD_BUTTON_PRESS:
|
||||||
|
case CLUTTER_PAD_BUTTON_RELEASE:
|
||||||
|
case CLUTTER_PAD_STRIP:
|
||||||
|
case CLUTTER_PAD_RING:
|
||||||
{
|
{
|
||||||
ClutterActor *actor = NULL;
|
ClutterActor *actor = NULL;
|
||||||
|
|
||||||
@@ -2177,7 +2191,7 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emit_keyboard_event (event, device);
|
process_key_event (event, device);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2487,6 +2501,22 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case CLUTTER_PROXIMITY_IN:
|
||||||
|
case CLUTTER_PROXIMITY_OUT:
|
||||||
|
clutter_input_device_update_from_tool (clutter_event_get_source_device (event),
|
||||||
|
clutter_event_get_device_tool (event));
|
||||||
|
|
||||||
|
if (_clutter_event_process_filters (event))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!clutter_actor_event (stage, event, TRUE))
|
||||||
|
{
|
||||||
|
/* and bubbling phase */
|
||||||
|
clutter_actor_event (stage, event, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case CLUTTER_STAGE_STATE:
|
case CLUTTER_STAGE_STATE:
|
||||||
/* fullscreen / focus - forward to stage */
|
/* fullscreen / focus - forward to stage */
|
||||||
event->any.source = stage;
|
event->any.source = stage;
|
||||||
@@ -2727,6 +2757,7 @@ clutter_input_device_grab (ClutterInputDevice *device,
|
|||||||
switch (device->device_type)
|
switch (device->device_type)
|
||||||
{
|
{
|
||||||
case CLUTTER_POINTER_DEVICE:
|
case CLUTTER_POINTER_DEVICE:
|
||||||
|
case CLUTTER_TABLET_DEVICE:
|
||||||
grab_actor = &(device->pointer_grab_actor);
|
grab_actor = &(device->pointer_grab_actor);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2772,6 +2803,7 @@ clutter_input_device_ungrab (ClutterInputDevice *device)
|
|||||||
switch (device->device_type)
|
switch (device->device_type)
|
||||||
{
|
{
|
||||||
case CLUTTER_POINTER_DEVICE:
|
case CLUTTER_POINTER_DEVICE:
|
||||||
|
case CLUTTER_TABLET_DEVICE:
|
||||||
grab_actor = &(device->pointer_grab_actor);
|
grab_actor = &(device->pointer_grab_actor);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -17,12 +17,14 @@ VOID:BOXED,FLAGS
|
|||||||
VOID:INT
|
VOID:INT
|
||||||
VOID:INT64,INT64,FLOAT,BOOLEAN
|
VOID:INT64,INT64,FLOAT,BOOLEAN
|
||||||
VOID:INT,INT
|
VOID:INT,INT
|
||||||
|
VOID:INT,POINTER
|
||||||
VOID:FLOAT,FLOAT
|
VOID:FLOAT,FLOAT
|
||||||
VOID:INT,INT,INT,INT
|
VOID:INT,INT,INT,INT
|
||||||
VOID:OBJECT
|
VOID:OBJECT
|
||||||
VOID:OBJECT,FLAGS
|
VOID:OBJECT,FLAGS
|
||||||
VOID:OBJECT,FLOAT,FLOAT
|
VOID:OBJECT,FLOAT,FLOAT
|
||||||
VOID:OBJECT,FLOAT,FLOAT,FLAGS
|
VOID:OBJECT,FLOAT,FLOAT,FLAGS
|
||||||
|
VOID:OBJECT,OBJECT
|
||||||
VOID:OBJECT,PARAM
|
VOID:OBJECT,PARAM
|
||||||
VOID:OBJECT,POINTER
|
VOID:OBJECT,POINTER
|
||||||
VOID:OBJECT,UINT
|
VOID:OBJECT,UINT
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-master-clock.h"
|
#include "clutter-master-clock.h"
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "clutter-master-clock.h"
|
#include "clutter-master-clock.h"
|
||||||
|
51
clutter/clutter/clutter-mutter.h
Normal file
51
clutter/clutter/clutter-mutter.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Clutter.
|
||||||
|
*
|
||||||
|
* An OpenGL based 'interactive canvas' library.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLUTTER_MUTTER_H__
|
||||||
|
#define __CLUTTER_MUTTER_H__
|
||||||
|
|
||||||
|
#define __CLUTTER_H_INSIDE__
|
||||||
|
|
||||||
|
#include "clutter-backend.h"
|
||||||
|
#include "clutter-macros.h"
|
||||||
|
#include "clutter-stage-view.h"
|
||||||
|
#include "cogl/clutter-stage-cogl.h"
|
||||||
|
#include "x11/clutter-stage-x11.h"
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_set_custom_backend_func (ClutterBackend *(* func) (void));
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
gboolean _clutter_get_sync_to_vblank (void);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
int64_t clutter_stage_get_frame_counter (ClutterStage *stage);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_MUTTER
|
||||||
|
void clutter_stage_capture_into (ClutterStage *stage,
|
||||||
|
gboolean paint,
|
||||||
|
cairo_rectangle_int_t *rect,
|
||||||
|
uint8_t *data);
|
||||||
|
|
||||||
|
#undef __CLUTTER_H_INSIDE__
|
||||||
|
|
||||||
|
#endif /* __CLUTTER_MUTTER_H__ */
|
@@ -63,11 +63,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
|
||||||
|
|
||||||
#include "clutter-offscreen-effect.h"
|
#include "clutter-offscreen-effect.h"
|
||||||
|
|
||||||
#include "cogl/cogl.h"
|
#include "cogl/cogl.h"
|
||||||
@@ -520,7 +518,7 @@ clutter_offscreen_effect_get_texture (ClutterOffscreenEffect *effect)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_offscreen_effect_get_target:
|
* clutter_offscreen_effect_get_target: (skip)
|
||||||
* @effect: a #ClutterOffscreenEffect
|
* @effect: a #ClutterOffscreenEffect
|
||||||
*
|
*
|
||||||
* Retrieves the material used as a render target for the offscreen
|
* Retrieves the material used as a render target for the offscreen
|
||||||
|
@@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
#include <cogl/cogl.h>
|
#include <cogl/cogl.h>
|
||||||
#include <clutter/clutter-effect.h>
|
#include <clutter/clutter-effect.h>
|
||||||
#include <clutter/clutter-cogl-compat.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
@@ -36,7 +36,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
@@ -884,7 +884,7 @@ clutter_paint_node_add_texture_rectangle (ClutterPaintNode *node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_paint_node_add_path:
|
* clutter_paint_node_add_path: (skip)
|
||||||
* @node: a #ClutterPaintNode
|
* @node: a #ClutterPaintNode
|
||||||
* @path: a Cogl path
|
* @path: a Cogl path
|
||||||
*
|
*
|
||||||
@@ -912,7 +912,7 @@ clutter_paint_node_add_path (ClutterPaintNode *node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_paint_node_add_primitive:
|
* clutter_paint_node_add_primitive: (skip)
|
||||||
* @node: a #ClutterPaintNode
|
* @node: a #ClutterPaintNode
|
||||||
* @primitive: a Cogl primitive
|
* @primitive: a Cogl primitive
|
||||||
*
|
*
|
||||||
|
@@ -66,14 +66,13 @@ void clutter_paint_node_add_texture_rectangle (Clutter
|
|||||||
float y_1,
|
float y_1,
|
||||||
float x_2,
|
float x_2,
|
||||||
float y_2);
|
float y_2);
|
||||||
#if defined(COGL_ENABLE_EXPERIMENTAL_API) && defined(CLUTTER_ENABLE_EXPERIMENTAL_API)
|
|
||||||
CLUTTER_AVAILABLE_IN_1_10
|
CLUTTER_AVAILABLE_IN_1_10
|
||||||
void clutter_paint_node_add_path (ClutterPaintNode *node,
|
void clutter_paint_node_add_path (ClutterPaintNode *node,
|
||||||
CoglPath *path);
|
CoglPath *path);
|
||||||
CLUTTER_AVAILABLE_IN_1_10
|
CLUTTER_AVAILABLE_IN_1_10
|
||||||
void clutter_paint_node_add_primitive (ClutterPaintNode *node,
|
void clutter_paint_node_add_primitive (ClutterPaintNode *node,
|
||||||
CoglPrimitive *primitive);
|
CoglPrimitive *primitive);
|
||||||
#endif /* COGL_ENABLE_EXPERIMENTAL_API && CLUTTER_ENABLE_EXPERIMENTAL_API */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CLUTTER_VALUE_HOLDS_PAINT_NODE:
|
* CLUTTER_VALUE_HOLDS_PAINT_NODE:
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "clutter-build-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||||
@@ -511,7 +511,7 @@ clutter_pipeline_node_init (ClutterPipelineNode *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_pipeline_node_new:
|
* clutter_pipeline_node_new: (skip)
|
||||||
* @pipeline: (allow-none): a Cogl pipeline state object, or %NULL
|
* @pipeline: (allow-none): a Cogl pipeline state object, or %NULL
|
||||||
*
|
*
|
||||||
* Creates a new #ClutterPaintNode that will use the @pipeline to
|
* Creates a new #ClutterPaintNode that will use the @pipeline to
|
||||||
@@ -820,8 +820,8 @@ clutter_text_node_draw (ClutterPaintNode *node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cogl_pango_render_layout (tnode->layout,
|
cogl_pango_render_layout (tnode->layout,
|
||||||
op->op.texrect[0],
|
op->op.texrect[4],
|
||||||
op->op.texrect[1],
|
op->op.texrect[5],
|
||||||
&tnode->color,
|
&tnode->color,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@@ -118,10 +118,8 @@ typedef struct _ClutterPipelineNodeClass ClutterPipelineNodeClass;
|
|||||||
CLUTTER_AVAILABLE_IN_1_10
|
CLUTTER_AVAILABLE_IN_1_10
|
||||||
GType clutter_pipeline_node_get_type (void) G_GNUC_CONST;
|
GType clutter_pipeline_node_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
#if defined(COGL_ENABLE_EXPERIMENTAL_API) && defined(CLUTTER_ENABLE_EXPERIMENTAL_API)
|
|
||||||
CLUTTER_AVAILABLE_IN_1_10
|
CLUTTER_AVAILABLE_IN_1_10
|
||||||
ClutterPaintNode * clutter_pipeline_node_new (CoglPipeline *pipeline);
|
ClutterPaintNode * clutter_pipeline_node_new (CoglPipeline *pipeline);
|
||||||
#endif /* COGL_ENABLE_EXPERIMENTAL_API && CLUTTER_ENABLE_EXPERIMENTAL_API */
|
|
||||||
|
|
||||||
#define CLUTTER_TYPE_TEXT_NODE (clutter_text_node_get_type ())
|
#define CLUTTER_TYPE_TEXT_NODE (clutter_text_node_get_type ())
|
||||||
#define CLUTTER_TEXT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TEXT_NODE, ClutterTextNode))
|
#define CLUTTER_TEXT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TEXT_NODE, ClutterTextNode))
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user