Compare commits
294 Commits
test-conte
...
rounded-re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f2e45bbc87 | ||
|
|
9965cfbc3b | ||
|
|
951b448e90 | ||
|
|
51ad2a55a8 | ||
|
|
e50209a535 | ||
|
|
d6430995ad | ||
|
|
cea15fc63e | ||
|
|
f99fbab24f | ||
|
|
6acd4361ab | ||
|
|
05f488011a | ||
|
|
ef7679235a | ||
|
|
d65f9b298c | ||
|
|
5c9de08159 | ||
|
|
f2a297f56d | ||
|
|
a1d9cb8ad6 | ||
|
|
8da911db81 | ||
|
|
78f68d7992 | ||
|
|
8a190b200b | ||
|
|
e72b4ae6e2 | ||
|
|
9f1f4850fe | ||
|
|
0b9e5e6db4 | ||
|
|
2cd5b4df1b | ||
|
|
57a070fc8d | ||
|
|
ccc6b7165e | ||
|
|
ff330668cf | ||
|
|
63f9e5453d | ||
|
|
f849823a07 | ||
|
|
9a2d6d6d88 | ||
|
|
72c37d566c | ||
|
|
01c0d5e04b | ||
|
|
57dd88ee53 | ||
|
|
8c92c619de | ||
|
|
78d2002965 | ||
|
|
25c4acb6d2 | ||
|
|
0a3dac10c6 | ||
|
|
c9afcd31c2 | ||
|
|
3565facdaf | ||
|
|
494cff94d6 | ||
|
|
17644b12a5 | ||
|
|
54ff5d8edd | ||
|
|
b18320fe05 | ||
|
|
0ce60ad214 | ||
|
|
76642f2bf9 | ||
|
|
fcac150641 | ||
|
|
4d13c61aaf | ||
|
|
09bab2b2df | ||
|
|
b44f43e996 | ||
|
|
52fa641dff | ||
|
|
a3ebc0329d | ||
|
|
8dc04d3fc8 | ||
|
|
ba64e5588d | ||
|
|
fcdcdb7e78 | ||
|
|
3d5789a66e | ||
|
|
59343e4efb | ||
|
|
41219ae489 | ||
|
|
7055250692 | ||
|
|
98f63d09c0 | ||
|
|
85b9a6f1b0 | ||
|
|
3353eac289 | ||
|
|
cdc135f11d | ||
|
|
069ce48ac5 | ||
|
|
625c7c3d26 | ||
|
|
4ea2aac561 | ||
|
|
e88e31dde2 | ||
|
|
fb2e67638d | ||
|
|
f11dd83ab5 | ||
|
|
92804b5b55 | ||
|
|
87e7ea6080 | ||
|
|
b1945b38e8 | ||
|
|
13ca3187f2 | ||
|
|
18fd506360 | ||
|
|
9faf1a0377 | ||
|
|
1a9c03449e | ||
|
|
aee214b09d | ||
|
|
dc3003bc4d | ||
|
|
845f4b1536 | ||
|
|
abbb3a2da6 | ||
|
|
1a93efecf3 | ||
|
|
440d56a44f | ||
|
|
f10603e97d | ||
|
|
9a9257d7be | ||
|
|
5c10f2b4cd | ||
|
|
ba6a618d44 | ||
|
|
5fbeea3870 | ||
|
|
27368a418a | ||
|
|
676cd1e673 | ||
|
|
d6a4c65bfa | ||
|
|
4695f583c1 | ||
|
|
fa88d738dc | ||
|
|
7841248c1d | ||
|
|
ef5f34c985 | ||
|
|
1dfa54c117 | ||
|
|
ff920d98ec | ||
|
|
91ca6d0851 | ||
|
|
cdeeb3275a | ||
|
|
9d68bebdd1 | ||
|
|
526ddfa866 | ||
|
|
d7b9d35c02 | ||
|
|
383c404792 | ||
|
|
33d0cfd4f8 | ||
|
|
43311f3a80 | ||
|
|
265bc90524 | ||
|
|
197d921347 | ||
|
|
3d5529760a | ||
|
|
3a2c4be44b | ||
|
|
e216f469a1 | ||
|
|
5ae25519a7 | ||
|
|
4d1f7a476d | ||
|
|
a959fba18a | ||
|
|
c88ac79437 | ||
|
|
ddefbfa8b5 | ||
|
|
435a405c55 | ||
|
|
e1ed9f10c6 | ||
|
|
46adfbef4f | ||
|
|
53bfcf7f0a | ||
|
|
76d601631d | ||
|
|
38844fef4d | ||
|
|
03ac6611c1 | ||
|
|
0ff88346cd | ||
|
|
a73256e5c9 | ||
|
|
5d2605a151 | ||
|
|
40a7ec73a9 | ||
|
|
ccbe762103 | ||
|
|
88d5c9a5e1 | ||
|
|
6df8eafc3a | ||
|
|
8e69c5c89c | ||
|
|
8bf6498265 | ||
|
|
e680abc723 | ||
|
|
cecaede610 | ||
|
|
81e7e67cef | ||
|
|
35543f60d9 | ||
|
|
7856c52882 | ||
|
|
568023e6e6 | ||
|
|
cabb2625f5 | ||
|
|
5f64f1c8df | ||
|
|
41faddea40 | ||
|
|
a09146df5a | ||
|
|
bd7ee3f3e1 | ||
|
|
ff6c5ad710 | ||
|
|
bd999c72c9 | ||
|
|
45c9e7aff4 | ||
|
|
d24291db98 | ||
|
|
661022f2eb | ||
|
|
168eb941a1 | ||
|
|
961a6c12ec | ||
|
|
c227493c65 | ||
|
|
30acf00bf8 | ||
|
|
02e2a6f311 | ||
|
|
fa42e02a76 | ||
|
|
c85b3a8d35 | ||
|
|
285685044f | ||
|
|
97bc4f77c6 | ||
|
|
0073ee29da | ||
|
|
e9ed5e21ef | ||
|
|
c37786af36 | ||
|
|
a7b09e19f1 | ||
|
|
50ef36d387 | ||
|
|
347561fa68 | ||
|
|
d02ae09124 | ||
|
|
f3996a1a66 | ||
|
|
1181ecbf0e | ||
|
|
d948ac62e4 | ||
|
|
507e346ff1 | ||
|
|
98e6ed474f | ||
|
|
ade316eaee | ||
|
|
1e48843616 | ||
|
|
58a5de6f5d | ||
|
|
a9ca72695f | ||
|
|
082ba6d7c8 | ||
|
|
61ff647f71 | ||
|
|
823f56d263 | ||
|
|
87332920d5 | ||
|
|
d2a358206c | ||
|
|
51ea08aa9c | ||
|
|
380b63fede | ||
|
|
df93875c0c | ||
|
|
5a156e6b5f | ||
|
|
0e488b3dfe | ||
|
|
8495e0e412 | ||
|
|
c9b0ca0de7 | ||
|
|
2a950dec71 | ||
|
|
d6c80d4f35 | ||
|
|
e41cc99474 | ||
|
|
61fe5ac684 | ||
|
|
1cf3f492b8 | ||
|
|
54fed96f8c | ||
|
|
e2d659d5c2 | ||
|
|
8ad1189b0b | ||
|
|
b5b7e1f2b4 | ||
|
|
e56a539363 | ||
|
|
5f91bb81ed | ||
|
|
1fba59f1d1 | ||
|
|
68a2ca7e85 | ||
|
|
93ccf08c81 | ||
|
|
e9f5a3e9e2 | ||
|
|
2b85c49fb1 | ||
|
|
d7c3235cd0 | ||
|
|
ea94bac79e | ||
|
|
63713c3b68 | ||
|
|
81fd9741ff | ||
|
|
c7523cecf1 | ||
|
|
ce6569d1a6 | ||
|
|
852f46df19 | ||
|
|
d82f603fcb | ||
|
|
5e8e4130a5 | ||
|
|
f81aa14d93 | ||
|
|
81db6e9e61 | ||
|
|
ac0311b621 | ||
|
|
f41e58d179 | ||
|
|
d288931b45 | ||
|
|
03adeecfa3 | ||
|
|
5439f4596c | ||
|
|
f98d1a6474 | ||
|
|
57e6aae80a | ||
|
|
f23eaafc85 | ||
|
|
926b26e9fc | ||
|
|
88f27c423c | ||
|
|
30342896d0 | ||
|
|
be8e203edc | ||
|
|
623c93ccc8 | ||
|
|
34d8beaf4f | ||
|
|
983b6ce341 | ||
|
|
771df47820 | ||
|
|
3c218687e3 | ||
|
|
37fb370a5d | ||
|
|
1cc9413383 | ||
|
|
bfea39ab2f | ||
|
|
84d6f023b5 | ||
|
|
7fe04a7122 | ||
|
|
19cea99007 | ||
|
|
1c4ad78d52 | ||
|
|
955a7e643e | ||
|
|
b85a137a68 | ||
|
|
d17ca6b451 | ||
|
|
da7040874e | ||
|
|
6f9c4c894d | ||
|
|
cc7a35cd30 | ||
|
|
f841621348 | ||
|
|
f99ecd3739 | ||
|
|
5eb7e550d1 | ||
|
|
8d33f2a511 | ||
|
|
27b0321dec | ||
|
|
538605eccb | ||
|
|
81f5967587 | ||
|
|
771437acf9 | ||
|
|
a3da58133e | ||
|
|
9b558b50b8 | ||
|
|
7ce2eeac47 | ||
|
|
182dccb8f0 | ||
|
|
17d2ba94d6 | ||
|
|
5bac4f13a0 | ||
|
|
97aff588d5 | ||
|
|
e4040adbe7 | ||
|
|
6506a3bc9c | ||
|
|
64f9d82506 | ||
|
|
b83f3d871f | ||
|
|
a235b59089 | ||
|
|
1883035d34 | ||
|
|
0ca6471df4 | ||
|
|
98dde97f20 | ||
|
|
9bd9847b3f | ||
|
|
b79d4a3a22 | ||
|
|
33ab588d4e | ||
|
|
7200a93a88 | ||
|
|
319762b908 | ||
|
|
e453a989df | ||
|
|
f56328a6cc | ||
|
|
f29b24517e | ||
|
|
552df197c4 | ||
|
|
f6e47b7eb0 | ||
|
|
4214067d52 | ||
|
|
d9a2b74b4a | ||
|
|
21df62f428 | ||
|
|
4e501d2d44 | ||
|
|
5afd5cfec7 | ||
|
|
ad65db901a | ||
|
|
406b1e2e03 | ||
|
|
f1729affa8 | ||
|
|
3b2ba8ed99 | ||
|
|
386c3ac34f | ||
|
|
d92c6406d1 | ||
|
|
d666f4ab7f | ||
|
|
5df360f436 | ||
|
|
0197149ba3 | ||
|
|
b310ab7304 | ||
|
|
062e3da57d | ||
|
|
cdbd931dba | ||
|
|
2f96a08b3f | ||
|
|
c1fc6c35cf | ||
|
|
060992aeba | ||
|
|
2c15d563e2 | ||
|
|
2dd7ab2a50 | ||
|
|
0736fef585 | ||
|
|
0442fc2b55 |
@@ -24,9 +24,9 @@ stages:
|
|||||||
variables:
|
variables:
|
||||||
COMMON_MESON_FLAGS: "-Dwerror=true -Dcairo:werror=false -Dgi-docgen:werror=false -Dgraphene:werror=false -Dlibepoxy:werror=false -Dlibsass:werror=false -Dpango:werror=false -Dsassc:werror=false -Dgdk-pixbuf:werror=false -Dglib:werror=false -Dlibcloudproviders:werror=false -Dlibpng:werror=false -Dlibtiff:werror=false -Dsysprof:werror=false -Dwayland-protocols:werror=false -Dharfbuzz:werror=false -Dfreetype2:werror=false -Dfontconfig:werror=false -Dfribidi:werror=false -Dlibffi:werror=false -Dlibjpeg-turbo:werror=false -Dmutest:werror=false -Dpixman:werror=false -Dproxy-libintl:werror=false"
|
COMMON_MESON_FLAGS: "-Dwerror=true -Dcairo:werror=false -Dgi-docgen:werror=false -Dgraphene:werror=false -Dlibepoxy:werror=false -Dlibsass:werror=false -Dpango:werror=false -Dsassc:werror=false -Dgdk-pixbuf:werror=false -Dglib:werror=false -Dlibcloudproviders:werror=false -Dlibpng:werror=false -Dlibtiff:werror=false -Dsysprof:werror=false -Dwayland-protocols:werror=false -Dharfbuzz:werror=false -Dfreetype2:werror=false -Dfontconfig:werror=false -Dfribidi:werror=false -Dlibffi:werror=false -Dlibjpeg-turbo:werror=false -Dmutest:werror=false -Dpixman:werror=false -Dproxy-libintl:werror=false"
|
||||||
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
||||||
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Ddemos=false -Dbuild-examples=false -Dbuild-tests=false -Dbuild-testsuite=true"
|
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-demos=false -Dbuild-examples=false -Dbuild-tests=false -Dbuild-testsuite=true"
|
||||||
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
||||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v42"
|
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v46"
|
||||||
|
|
||||||
workflow:
|
workflow:
|
||||||
rules:
|
rules:
|
||||||
@@ -57,15 +57,9 @@ style-check-diff:
|
|||||||
reports:
|
reports:
|
||||||
junit:
|
junit:
|
||||||
- "${CI_PROJECT_DIR}/_build/report-x11.xml"
|
- "${CI_PROJECT_DIR}/_build/report-x11.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-x11_unstable.xml"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_unstable.xml"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_gles.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland_gles.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_gles_unstable.xml"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_smalltexture.xml"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_smalltexture_unstable.xml"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-broadway.xml"
|
- "${CI_PROJECT_DIR}/_build/report-broadway.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-broadway_unstable.xml"
|
|
||||||
name: "gtk-${CI_COMMIT_REF_NAME}"
|
name: "gtk-${CI_COMMIT_REF_NAME}"
|
||||||
paths:
|
paths:
|
||||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
||||||
@@ -76,6 +70,7 @@ style-check-diff:
|
|||||||
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
||||||
|
- "${CI_PROJECT_DIR}/_build/testsuite/headless/*/*.log"
|
||||||
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
||||||
cache:
|
cache:
|
||||||
key: "$CI_JOB_NAME"
|
key: "$CI_JOB_NAME"
|
||||||
@@ -91,7 +86,27 @@ fedora-x86_64:
|
|||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- pip3 install --user meson~=0.64
|
- meson subprojects download
|
||||||
|
- meson subprojects update --reset
|
||||||
|
- meson setup
|
||||||
|
${COMMON_MESON_FLAGS}
|
||||||
|
${EXTRA_MESON_FLAGS}
|
||||||
|
${BACKEND_FLAGS}
|
||||||
|
${FEATURE_FLAGS}
|
||||||
|
_build
|
||||||
|
- meson compile -C _build
|
||||||
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
|
- .gitlab-ci/run-tests.sh _build wayland_gles
|
||||||
|
|
||||||
|
release-build:
|
||||||
|
extends: .build-fedora-default
|
||||||
|
stage: build
|
||||||
|
needs: []
|
||||||
|
variables:
|
||||||
|
EXTRA_MESON_FLAGS: "--buildtype=release"
|
||||||
|
script:
|
||||||
|
- .gitlab-ci/show-info-linux.sh
|
||||||
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- meson subprojects download
|
- meson subprojects download
|
||||||
- meson subprojects update --reset
|
- meson subprojects update --reset
|
||||||
- mkdir _install
|
- mkdir _install
|
||||||
@@ -107,31 +122,6 @@ fedora-x86_64:
|
|||||||
- PKG_CONFIG_PATH=${CI_PROJECT_DIR}/_install/lib64/pkgconfig:${CI_PROJECT_DIR}/_install/share/pkgconfig meson setup _build_hello examples/hello
|
- PKG_CONFIG_PATH=${CI_PROJECT_DIR}/_install/lib64/pkgconfig:${CI_PROJECT_DIR}/_install/share/pkgconfig meson setup _build_hello examples/hello
|
||||||
- LD_LIBRARY_PATH=${CI_PROJECT_DIR}/_install/lib64 meson compile -C _build_hello
|
- LD_LIBRARY_PATH=${CI_PROJECT_DIR}/_install/lib64 meson compile -C _build_hello
|
||||||
- .gitlab-ci/run-tests.sh _build x11
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
- .gitlab-ci/run-tests.sh _build wayland
|
|
||||||
- .gitlab-ci/run-tests.sh _build wayland_gles
|
|
||||||
- .gitlab-ci/run-tests.sh _build wayland_smalltexture
|
|
||||||
- .gitlab-ci/run-tests.sh _build broadway
|
|
||||||
|
|
||||||
release-build:
|
|
||||||
extends: .build-fedora-default
|
|
||||||
stage: build
|
|
||||||
needs: []
|
|
||||||
variables:
|
|
||||||
EXTRA_MESON_FLAGS: "--buildtype=release"
|
|
||||||
script:
|
|
||||||
- .gitlab-ci/show-info-linux.sh
|
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
- pip3 install --user meson~=0.64
|
|
||||||
- meson subprojects download
|
|
||||||
- meson subprojects update --reset
|
|
||||||
- meson setup
|
|
||||||
${COMMON_MESON_FLAGS}
|
|
||||||
${EXTRA_MESON_FLAGS}
|
|
||||||
${BACKEND_FLAGS}
|
|
||||||
${FEATURE_FLAGS}
|
|
||||||
_build
|
|
||||||
- meson compile -C _build
|
|
||||||
- .gitlab-ci/run-tests.sh _build x11
|
|
||||||
|
|
||||||
fedora-mingw64:
|
fedora-mingw64:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
@@ -152,23 +142,11 @@ fedora-mingw64:
|
|||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- pip3 install --user meson~=0.64
|
- pip3 install --user meson~=1.0
|
||||||
- meson subprojects download
|
- meson subprojects download
|
||||||
- meson subprojects update --reset
|
- meson subprojects update --reset
|
||||||
# Test that mingw64-meson still fails. If it has stopped failing, the CI
|
- meson -Dintrospection=disabled -Dgraphene:introspection=disabled _build
|
||||||
# will fail and now you should remove the hack that follows this.
|
- meson compile -C _build
|
||||||
- FAILED=false
|
|
||||||
- mingw64-meson --version || FAILED=true
|
|
||||||
- test $FAILED = false && echo "mingw64-meson works now, remove the hack" && exit 1
|
|
||||||
# HACK: Running mingw64-meson directly fails on the CI with:
|
|
||||||
# /usr/bin/mingw64-meson: line 92: fg: no job control
|
|
||||||
# Because rpm is not evaluating %__meson and it gets interpreted as a job
|
|
||||||
# specifier. So we fix that and run it ourselves.
|
|
||||||
- rpm --eval "%{mingw64_meson}" > mingw64-meson.sh
|
|
||||||
- sed -i -e 's/%__meson/meson/' mingw64-meson.sh
|
|
||||||
- chmod +x mingw64-meson.sh
|
|
||||||
- ./mingw64-meson.sh -Dintrospection=disabled -Dgraphene:introspection=disabled _build
|
|
||||||
- ninja -C _build
|
|
||||||
|
|
||||||
.mingw-defaults:
|
.mingw-defaults:
|
||||||
stage: build
|
stage: build
|
||||||
@@ -210,7 +188,7 @@ macos:
|
|||||||
needs: []
|
needs: []
|
||||||
before_script:
|
before_script:
|
||||||
- bash .gitlab-ci/show-info-osx.sh
|
- bash .gitlab-ci/show-info-osx.sh
|
||||||
- pip3 install --user meson~=0.64
|
- pip3 install --user meson~=1.0
|
||||||
- pip3 install --user ninja
|
- pip3 install --user ninja
|
||||||
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
|
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
|
||||||
- export MESON_FORCE_BACKTRACE=1
|
- export MESON_FORCE_BACKTRACE=1
|
||||||
@@ -368,10 +346,11 @@ static-scan:
|
|||||||
EXTRA_MESON_FLAGS: "--buildtype=debug"
|
EXTRA_MESON_FLAGS: "--buildtype=debug"
|
||||||
script:
|
script:
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- pip3 install --user meson~=0.64
|
|
||||||
- meson setup
|
- meson setup
|
||||||
${COMMON_MESON_FLAGS}
|
${COMMON_MESON_FLAGS}
|
||||||
${EXTRA_MESON_FLAGS}
|
${EXTRA_MESON_FLAGS}
|
||||||
|
${BACKEND_FLAGS}
|
||||||
|
${FEATURE_FLAGS}
|
||||||
_scan_build
|
_scan_build
|
||||||
- ninja -C _scan_build scan-build
|
- ninja -C _scan_build scan-build
|
||||||
artifacts:
|
artifacts:
|
||||||
@@ -390,7 +369,6 @@ asan-build:
|
|||||||
variables:
|
variables:
|
||||||
script:
|
script:
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- pip3 install --user meson~=0.64
|
|
||||||
- CC=clang meson setup --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=disabled -Df16c=disabled _build
|
- CC=clang meson setup --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=disabled -Df16c=disabled _build
|
||||||
- ninja -C _build
|
- ninja -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build wayland
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
@@ -405,7 +383,6 @@ reference:
|
|||||||
needs: []
|
needs: []
|
||||||
script:
|
script:
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- pip3 install --user meson~=0.64
|
|
||||||
- meson setup
|
- meson setup
|
||||||
${COMMON_MESON_FLAGS}
|
${COMMON_MESON_FLAGS}
|
||||||
--buildtype=release
|
--buildtype=release
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ RUN dnf -y install \
|
|||||||
glib2-static \
|
glib2-static \
|
||||||
glibc-devel \
|
glibc-devel \
|
||||||
glibc-headers \
|
glibc-headers \
|
||||||
gnome-desktop-testing \
|
|
||||||
gnupg2 \
|
gnupg2 \
|
||||||
gobject-introspection-devel \
|
gobject-introspection-devel \
|
||||||
graphene-devel \
|
graphene-devel \
|
||||||
@@ -73,10 +72,14 @@ RUN dnf -y install \
|
|||||||
mesa-dri-drivers \
|
mesa-dri-drivers \
|
||||||
mesa-libEGL-devel \
|
mesa-libEGL-devel \
|
||||||
mesa-libGLES-devel \
|
mesa-libGLES-devel \
|
||||||
|
meson \
|
||||||
|
mutter \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
pango-devel \
|
pango-devel \
|
||||||
pcre-devel \
|
pcre-devel \
|
||||||
pcre-static \
|
pcre-static \
|
||||||
|
pipewire \
|
||||||
|
pipewire-gstreamer \
|
||||||
python3 \
|
python3 \
|
||||||
python3-docutils \
|
python3-docutils \
|
||||||
python3-gobject \
|
python3-gobject \
|
||||||
@@ -84,6 +87,7 @@ RUN dnf -y install \
|
|||||||
python3-markdown \
|
python3-markdown \
|
||||||
python3-packaging \
|
python3-packaging \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
python3-pydbus \
|
||||||
python3-pygments \
|
python3-pygments \
|
||||||
python3-typogrify \
|
python3-typogrify \
|
||||||
python3-wheel \
|
python3-wheel \
|
||||||
@@ -95,6 +99,7 @@ RUN dnf -y install \
|
|||||||
weston \
|
weston \
|
||||||
weston-libs \
|
weston-libs \
|
||||||
which \
|
which \
|
||||||
|
wireplumber \
|
||||||
xorg-x11-server-Xvfb \
|
xorg-x11-server-Xvfb \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,8 @@ if [ $run == 1 ]; then
|
|||||||
echo -e "\e[1;32mRUNNING\e[0m: ${base} as ${TAG}"
|
echo -e "\e[1;32mRUNNING\e[0m: ${base} as ${TAG}"
|
||||||
${CMD} run \
|
${CMD} run \
|
||||||
--rm \
|
--rm \
|
||||||
--volume "$(pwd)/..:/home/user/app" \
|
--userns=keep-id \
|
||||||
|
--volume "$(pwd)/..:/home/user/app:rw,z" \
|
||||||
--workdir "/home/user/app" \
|
--workdir "/home/user/app" \
|
||||||
--tty \
|
--tty \
|
||||||
--interactive "${TAG}" \
|
--interactive "${TAG}" \
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ set +e
|
|||||||
srcdir=$( pwd )
|
srcdir=$( pwd )
|
||||||
builddir=$1
|
builddir=$1
|
||||||
backend=$2
|
backend=$2
|
||||||
|
multiplier=${MESON_TEST_TIMEOUT_MULTIPLIER:-1}
|
||||||
|
|
||||||
# Ignore memory leaks lower in dependencies
|
# Ignore memory leaks lower in dependencies
|
||||||
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:verbosity=1:log_threads=1
|
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:verbosity=1:log_threads=1
|
||||||
@@ -15,7 +16,8 @@ case "${backend}" in
|
|||||||
x11)
|
x11)
|
||||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
--quiet \
|
||||||
|
--timeout-multiplier "${multiplier}" \
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${backend} \
|
--setup=${backend} \
|
||||||
--suite=gtk \
|
--suite=gtk \
|
||||||
@@ -26,14 +28,6 @@ case "${backend}" in
|
|||||||
# Store the exit code for the CI run, but always
|
# Store the exit code for the CI run, but always
|
||||||
# generate the reports
|
# generate the reports
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|
||||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
|
||||||
meson test -C ${builddir} \
|
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
|
||||||
--setup=${backend}_unstable \
|
|
||||||
--suite=flaky \
|
|
||||||
--suite=failing || true
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
wayland*)
|
wayland*)
|
||||||
@@ -44,22 +38,17 @@ case "${backend}" in
|
|||||||
export WAYLAND_DISPLAY=wayland-5
|
export WAYLAND_DISPLAY=wayland-5
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
--quiet \
|
||||||
|
--timeout-multiplier "${multiplier}" \
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${backend} \
|
--setup=${backend} \
|
||||||
--suite=gtk \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
|
--no-suite=${backend}_failing \
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
|
||||||
--setup=${backend}_unstable \
|
|
||||||
--suite=flaky \
|
|
||||||
--suite=failing || true
|
|
||||||
|
|
||||||
kill ${compositor}
|
kill ${compositor}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -71,7 +60,8 @@ case "${backend}" in
|
|||||||
export BROADWAY_DISPLAY=:5
|
export BROADWAY_DISPLAY=:5
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
--quiet \
|
||||||
|
--timeout-multiplier "${multiplier}" \
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${backend} \
|
--setup=${backend} \
|
||||||
--suite=gtk \
|
--suite=gtk \
|
||||||
@@ -79,16 +69,6 @@ case "${backend}" in
|
|||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=gsk-compare-opengl
|
--no-suite=gsk-compare-opengl
|
||||||
|
|
||||||
# don't let Broadway failures fail the run, for now
|
|
||||||
exit_code=0
|
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
|
||||||
--setup=${backend}_unstable \
|
|
||||||
--suite=flaky \
|
|
||||||
--suite=failing || true
|
|
||||||
|
|
||||||
kill ${server}
|
kill ${server}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -101,20 +81,19 @@ esac
|
|||||||
|
|
||||||
cd ${builddir}
|
cd ${builddir}
|
||||||
|
|
||||||
for suffix in "" "_unstable"; do
|
$srcdir/.gitlab-ci/meson-junit-report.py \
|
||||||
$srcdir/.gitlab-ci/meson-junit-report.py \
|
|
||||||
--project-name=gtk \
|
--project-name=gtk \
|
||||||
--backend="${backend}${suffix}" \
|
--backend="${backend}" \
|
||||||
--job-id="${CI_JOB_NAME}" \
|
--job-id="${CI_JOB_NAME}" \
|
||||||
--output="report-${backend}${suffix}.xml" \
|
--output="report-${backend}.xml" \
|
||||||
"meson-logs/testlog-${backend}${suffix}.json"
|
"meson-logs/testlog-${backend}.json"
|
||||||
$srcdir/.gitlab-ci/meson-html-report.py \
|
|
||||||
|
$srcdir/.gitlab-ci/meson-html-report.py \
|
||||||
--project-name=gtk \
|
--project-name=gtk \
|
||||||
--backend="${backend}${suffix}" \
|
--backend="${backend}" \
|
||||||
--job-id="${CI_JOB_NAME}" \
|
--job-id="${CI_JOB_NAME}" \
|
||||||
--reftest-output-dir="testsuite/reftests/output/${backend}${suffix}" \
|
--reftest-output-dir="testsuite/reftests/output/${backend}" \
|
||||||
--output="report-${backend}${suffix}.html" \
|
--output="report-${backend}.html" \
|
||||||
"meson-logs/testlog-${backend}${suffix}.json"
|
"meson-logs/testlog-${backend}.json"
|
||||||
done
|
|
||||||
|
|
||||||
exit $exit_code
|
exit $exit_code
|
||||||
|
|||||||
40
NEWS
40
NEWS
@@ -1,4 +1,7 @@
|
|||||||
Overview of Changes in 4.11.2, xx-xx-xxxx
|
Overview of Changes in 4.11.3, xx-xx-xxxx
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Overview of Changes in 4.11.2, 09-05-2023
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
* GtkGLArea:
|
* GtkGLArea:
|
||||||
@@ -7,6 +10,12 @@ Overview of Changes in 4.11.2, xx-xx-xxxx
|
|||||||
* GtkListBox:
|
* GtkListBox:
|
||||||
- Fix a problem with gtk_list_box_remove_all
|
- Fix a problem with gtk_list_box_remove_all
|
||||||
|
|
||||||
|
* Add the GtkSectionModel interface, and implement it in most
|
||||||
|
of our list models
|
||||||
|
|
||||||
|
* GtkListView:
|
||||||
|
- Support displaying sections
|
||||||
|
|
||||||
* GtkCenterBox:
|
* GtkCenterBox:
|
||||||
- Add a shrink-center-last property
|
- Add a shrink-center-last property
|
||||||
|
|
||||||
@@ -23,6 +32,9 @@ Overview of Changes in 4.11.2, xx-xx-xxxx
|
|||||||
- A few memory leak fixes
|
- A few memory leak fixes
|
||||||
- Handle webdav in the pathbar
|
- Handle webdav in the pathbar
|
||||||
|
|
||||||
|
* GtkBox:
|
||||||
|
- Support baselines in vertical orientation with GtkBox:baseline-child
|
||||||
|
|
||||||
* Dialogs:
|
* Dialogs:
|
||||||
- Destroy windows promptly when the async callback finishes
|
- Destroy windows promptly when the async callback finishes
|
||||||
- Detect absence of the OpenURI portal and fall back
|
- Detect absence of the OpenURI portal and fall back
|
||||||
@@ -33,12 +45,22 @@ Overview of Changes in 4.11.2, xx-xx-xxxx
|
|||||||
|
|
||||||
* Accessibility:
|
* Accessibility:
|
||||||
- Fix alert dialogs in the a11y tree
|
- Fix alert dialogs in the a11y tree
|
||||||
|
- Improve accessibility of GtkShortcutsWindow
|
||||||
|
|
||||||
* Layout:
|
* Layout:
|
||||||
- Some fixes to baseline alignment
|
- Some fixes to baseline alignment
|
||||||
|
- Separate GTK_ALIGN_BASELINE_CENTER and _FILL
|
||||||
|
|
||||||
|
* CSS:
|
||||||
|
- Fix a crash with color transitions
|
||||||
|
|
||||||
|
* GSK:
|
||||||
|
- Fix problems with negative scales
|
||||||
|
- Improve scaling of offscreens for (cross-fades, masks, blends)
|
||||||
|
|
||||||
* GL:
|
* GL:
|
||||||
- Add GdkGLTextureBuilder, a more flexible api for creating textures
|
- Add GdkGLTextureBuilder, a more flexible api for creating textures
|
||||||
|
- Support setting update regions for GL textures
|
||||||
- Ensure that we work with GLES 2
|
- Ensure that we work with GLES 2
|
||||||
|
|
||||||
* Vulkan:
|
* Vulkan:
|
||||||
@@ -49,23 +71,37 @@ Overview of Changes in 4.11.2, xx-xx-xxxx
|
|||||||
- Don't destroy wl_surfaces on hide
|
- Don't destroy wl_surfaces on hide
|
||||||
- Plug leaks of compositor-side resources
|
- Plug leaks of compositor-side resources
|
||||||
|
|
||||||
|
* X11:
|
||||||
|
- Fix artifacts in gnome-shell frame decorations
|
||||||
|
|
||||||
|
* Windows:
|
||||||
|
- Fix GL context initialization
|
||||||
|
|
||||||
* Inspector:
|
* Inspector:
|
||||||
- Improve the action list
|
- Improve the action list
|
||||||
|
- Improve the accessibility pane
|
||||||
- Fix a crash
|
- Fix a crash
|
||||||
|
|
||||||
* Tools:
|
* Tools:
|
||||||
- gtk4-node-editor: Improve scaling
|
- gtk4-node-editor: Improve scaling
|
||||||
- gtk4-node-editor: Preserve aspect ratio of textures
|
- gtk4-node-editor: Preserve aspect ratio of textures
|
||||||
|
- gtk4-node-editor: Add some smarter editing
|
||||||
- gtk4-demo: Make the stylus demo work with mice
|
- gtk4-demo: Make the stylus demo work with mice
|
||||||
|
|
||||||
|
* Deprecations:
|
||||||
|
- gtk_widget_get_allocated_width/height/baseline
|
||||||
|
- GTK_ALIGN_BASELINE
|
||||||
|
|
||||||
* Translation updates
|
* Translation updates
|
||||||
Bulgarian
|
Bulgarian
|
||||||
Chinese (China)
|
Chinese (China)
|
||||||
|
Friulian
|
||||||
Galician
|
Galician
|
||||||
Hebrew
|
Hebrew
|
||||||
|
Persian
|
||||||
Polish
|
Polish
|
||||||
Portuguese
|
Portuguese
|
||||||
Russian
|
`Russian
|
||||||
Turkish
|
Turkish
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -187,7 +187,7 @@
|
|||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dvulkan=disabled",
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dvulkan=disabled",
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dvulkan=disabled",
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dvulkan=disabled",
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
|||||||
201
build-aux/meson/gen-visibility-macros.py
Executable file
201
build-aux/meson/gen-visibility-macros.py
Executable file
@@ -0,0 +1,201 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
#
|
||||||
|
# SPDX-FileCopyrightText: 2022 Collabora Inc.
|
||||||
|
# 2023 Emmanuele Bassi
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
#
|
||||||
|
# Original author: Xavier Claessens <xclaesse@gmail.com>
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import textwrap
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
# Disable line length warnings as wrapping the C code templates would be hard
|
||||||
|
# flake8: noqa: E501
|
||||||
|
|
||||||
|
|
||||||
|
def gen_versions_macros(args, current_major_version, current_minor_version, current_micro_version):
|
||||||
|
with args.out_path.open("w", encoding="utf-8") as ofile, args.in_path.open(
|
||||||
|
"r", encoding="utf-8"
|
||||||
|
) as ifile:
|
||||||
|
for line in ifile.readlines():
|
||||||
|
if "@GDK_VERSIONS@" in line:
|
||||||
|
ofile.write(
|
||||||
|
textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
/**
|
||||||
|
* GDK_MAJOR_VERSION:
|
||||||
|
*
|
||||||
|
* The major version component of the library's version, e.g. "1" for "1.2.3".
|
||||||
|
*/
|
||||||
|
#define GDK_MAJOR_VERSION ({current_major_version})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GDK_MINOR_VERSION:
|
||||||
|
*
|
||||||
|
* The minor version component of the library's version, e.g. "2" for "1.2.3".
|
||||||
|
*/
|
||||||
|
#define GDK_MINOR_VERSION ({current_minor_version})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GDK_MICRO_VERSION:
|
||||||
|
*
|
||||||
|
* The micro version component of the library's version, e.g. "3" for "1.2.3".
|
||||||
|
*/
|
||||||
|
#define GDK_MICRO_VERSION ({current_micro_version})
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for minor in range(0, current_minor_version + 2, 2):
|
||||||
|
ofile.write(
|
||||||
|
textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
/**
|
||||||
|
* GDK_VERSION_{current_major_version}_{minor}:
|
||||||
|
*
|
||||||
|
* A macro that evaluates to the {current_major_version}.{minor} version of GTK, in a format
|
||||||
|
* that can be used by the C pre-processor.
|
||||||
|
*
|
||||||
|
* Since: {current_major_version}.{minor}
|
||||||
|
*/
|
||||||
|
#define GDK_VERSION_{current_major_version}_{minor} (G_ENCODE_VERSION ({current_major_version}, {minor}))
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
ofile.write(line)
|
||||||
|
|
||||||
|
|
||||||
|
def gen_visibility_macros(args, current_major_version, current_minor_version, current_micro_version):
|
||||||
|
"""
|
||||||
|
Generates a set of macros for each minor stable version of GTK
|
||||||
|
|
||||||
|
- GDK_DEPRECATED
|
||||||
|
- GDK_DEPRECATED_IN_…
|
||||||
|
- GDK_DEPRECATED_MACRO_IN_…
|
||||||
|
- GDK_DEPRECATED_ENUMERATOR_IN_…
|
||||||
|
- GDK_DEPRECATED_TYPE_IN_…
|
||||||
|
|
||||||
|
- GDK_AVAILABLE_IN_ALL
|
||||||
|
- GDK_AVAILABLE_IN_…
|
||||||
|
- GDK_AVAILABLE_STATIC_INLINE_IN_…
|
||||||
|
- GDK_AVAILABLE_MACRO_IN_…
|
||||||
|
- GDK_AVAILABLE_ENUMERATOR_IN_…
|
||||||
|
- GDK_AVAILABLE_TYPE_IN_…
|
||||||
|
|
||||||
|
- GDK_UNAVAILABLE(maj,min)
|
||||||
|
- GDK_UNAVAILABLE_STATIC_INLINE(maj,min)
|
||||||
|
"""
|
||||||
|
|
||||||
|
ns = args.namespace
|
||||||
|
with args.out_path.open("w", encoding="utf-8") as f:
|
||||||
|
f.write(
|
||||||
|
textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined({ns}_STATIC_COMPILATION)
|
||||||
|
# define _{ns}_EXPORT __declspec(dllexport)
|
||||||
|
# define _{ns}_IMPORT __declspec(dllimport)
|
||||||
|
#elif __GNUC__ >= 4
|
||||||
|
# define _{ns}_EXPORT __attribute__((visibility("default")))
|
||||||
|
# define _{ns}_IMPORT
|
||||||
|
#else
|
||||||
|
# define _{ns}_EXPORT
|
||||||
|
# define _{ns}_IMPORT
|
||||||
|
#endif
|
||||||
|
#ifdef GTK_COMPILATION
|
||||||
|
# define _{ns}_API _{ns}_EXPORT
|
||||||
|
#else
|
||||||
|
# define _{ns}_API _{ns}_IMPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _{ns}_EXTERN _{ns}_API extern
|
||||||
|
|
||||||
|
#define {ns}_VAR _{ns}_EXTERN
|
||||||
|
#define {ns}_AVAILABLE_IN_ALL _{ns}_EXTERN
|
||||||
|
|
||||||
|
#ifdef GDK_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
#define {ns}_DEPRECATED _{ns}_EXTERN
|
||||||
|
#define {ns}_DEPRECATED_FOR(f) _{ns}_EXTERN
|
||||||
|
#define {ns}_UNAVAILABLE(maj,min) _{ns}_EXTERN
|
||||||
|
#define {ns}_UNAVAILABLE_STATIC_INLINE(maj,min)
|
||||||
|
#else
|
||||||
|
#define {ns}_DEPRECATED G_DEPRECATED _{ns}_EXTERN
|
||||||
|
#define {ns}_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _{ns}_EXTERN
|
||||||
|
#define {ns}_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _{ns}_EXTERN
|
||||||
|
#define {ns}_UNAVAILABLE_STATIC_INLINE(maj,min) G_UNAVAILABLE(maj,min)
|
||||||
|
#endif
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for minor in range(0, current_minor_version + 2, 2):
|
||||||
|
f.write(
|
||||||
|
textwrap.dedent(
|
||||||
|
f"""
|
||||||
|
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_{minor}
|
||||||
|
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor} {ns}_DEPRECATED
|
||||||
|
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor}_FOR(f) {ns}_DEPRECATED_FOR (f)
|
||||||
|
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor} GDK_DEPRECATED_MACRO
|
||||||
|
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor}_FOR(f) GDK_DEPRECATED_MACRO_FOR (f)
|
||||||
|
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor} GDK_DEPRECATED_ENUMERATOR
|
||||||
|
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor}_FOR(f) GDK_DEPRECATED_ENUMERATOR_FOR (f)
|
||||||
|
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor} GDK_DEPRECATED_TYPE
|
||||||
|
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor}_FOR(f) GDK_DEPRECATED_TYPE_FOR (f)
|
||||||
|
#else
|
||||||
|
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor} _{ns}_EXTERN
|
||||||
|
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor}_FOR(f) _{ns}_EXTERN
|
||||||
|
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor}
|
||||||
|
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor}_FOR(f)
|
||||||
|
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor}
|
||||||
|
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor}_FOR(f)
|
||||||
|
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor}
|
||||||
|
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor}_FOR(f)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_{current_major_version}_{minor}
|
||||||
|
#define {ns}_AVAILABLE_IN_{current_major_version}_{minor} {ns}_UNAVAILABLE ({current_major_version}, {minor})
|
||||||
|
#define {ns}_AVAILABLE_STATIC_INLINE_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_STATIC_INLINE ({current_major_version}, {minor})
|
||||||
|
#define {ns}_AVAILABLE_MACRO_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_MACRO ({current_major_version}, {minor})
|
||||||
|
#define {ns}_AVAILABLE_ENUMERATOR_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_ENUMERATOR ({current_major_version}, {minor})
|
||||||
|
#define {ns}_AVAILABLE_TYPE_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_TYPE ({current_major_version}, {minor})
|
||||||
|
#else
|
||||||
|
#define {ns}_AVAILABLE_IN_{current_major_version}_{minor} _{ns}_EXTERN
|
||||||
|
#define {ns}_AVAILABLE_STATIC_INLINE_IN_{current_major_version}_{minor}
|
||||||
|
#define {ns}_AVAILABLE_MACRO_IN_{current_major_version}_{minor}
|
||||||
|
#define {ns}_AVAILABLE_ENUMERATOR_IN_{current_major_version}_{minor}
|
||||||
|
#define {ns}_AVAILABLE_TYPE_IN_{current_major_version}_{minor}
|
||||||
|
#endif
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("gtk_version", help="Current GLib version")
|
||||||
|
subparsers = parser.add_subparsers()
|
||||||
|
|
||||||
|
versions_parser = subparsers.add_parser(
|
||||||
|
"versions-macros", help="Generate versions macros"
|
||||||
|
)
|
||||||
|
versions_parser.add_argument("in_path", help="input file", type=Path)
|
||||||
|
versions_parser.add_argument("out_path", help="output file", type=Path)
|
||||||
|
versions_parser.set_defaults(func=gen_versions_macros)
|
||||||
|
|
||||||
|
visibility_parser = subparsers.add_parser(
|
||||||
|
"visibility-macros", help="Generate visibility macros"
|
||||||
|
)
|
||||||
|
visibility_parser.add_argument("namespace", help="Macro namespace")
|
||||||
|
visibility_parser.add_argument("out_path", help="output file", type=Path)
|
||||||
|
visibility_parser.set_defaults(func=gen_visibility_macros)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
version = [int(i) for i in args.gtk_version.split(".")]
|
||||||
|
args.func(args, version[0], version[1], version[2])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -116,7 +116,8 @@ effective_align (GtkAlign align,
|
|||||||
return direction == GTK_TEXT_DIR_RTL ? GTK_ALIGN_START : GTK_ALIGN_END;
|
return direction == GTK_TEXT_DIR_RTL ? GTK_ALIGN_START : GTK_ALIGN_END;
|
||||||
case GTK_ALIGN_FILL:
|
case GTK_ALIGN_FILL:
|
||||||
case GTK_ALIGN_CENTER:
|
case GTK_ALIGN_CENTER:
|
||||||
case GTK_ALIGN_BASELINE:
|
case GTK_ALIGN_BASELINE_FILL:
|
||||||
|
case GTK_ALIGN_BASELINE_CENTER:
|
||||||
default:
|
default:
|
||||||
return align;
|
return align;
|
||||||
}
|
}
|
||||||
@@ -258,7 +259,8 @@ blur_overlay_get_child_position (BlurOverlay *overlay,
|
|||||||
case GTK_ALIGN_END:
|
case GTK_ALIGN_END:
|
||||||
alloc->x += width - alloc->width;
|
alloc->x += width - alloc->width;
|
||||||
break;
|
break;
|
||||||
case GTK_ALIGN_BASELINE:
|
case GTK_ALIGN_BASELINE_FILL:
|
||||||
|
case GTK_ALIGN_BASELINE_CENTER:
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
@@ -281,7 +283,8 @@ blur_overlay_get_child_position (BlurOverlay *overlay,
|
|||||||
case GTK_ALIGN_END:
|
case GTK_ALIGN_END:
|
||||||
alloc->y += height - alloc->height;
|
alloc->y += height - alloc->height;
|
||||||
break;
|
break;
|
||||||
case GTK_ALIGN_BASELINE:
|
case GTK_ALIGN_BASELINE_FILL:
|
||||||
|
case GTK_ALIGN_BASELINE_CENTER:
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -51,15 +51,11 @@ struct _BlurOverlayClass
|
|||||||
GtkAllocation *allocation);
|
GtkAllocation *allocation);
|
||||||
};
|
};
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GType blur_overlay_get_type (void) G_GNUC_CONST;
|
GType blur_overlay_get_type (void) G_GNUC_CONST;
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GtkWidget *blur_overlay_new (void);
|
GtkWidget *blur_overlay_new (void);
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
void blur_overlay_add_overlay (BlurOverlay *overlay,
|
void blur_overlay_add_overlay (BlurOverlay *overlay,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
double blur);
|
double blur);
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
void blur_overlay_set_child (BlurOverlay *overlay,
|
void blur_overlay_set_child (BlurOverlay *overlay,
|
||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ update_css_for_blend_mode (GtkCssProvider *provider,
|
|||||||
blend_mode,
|
blend_mode,
|
||||||
blend_mode);
|
blend_mode);
|
||||||
|
|
||||||
gtk_css_provider_load_from_data (provider, css, -1);
|
gtk_css_provider_load_from_string (provider, css);
|
||||||
|
|
||||||
g_bytes_unref (bytes);
|
g_bytes_unref (bytes);
|
||||||
g_free (css);
|
g_free (css);
|
||||||
|
|||||||
@@ -195,6 +195,9 @@
|
|||||||
<gresource prefix="/listview_settings">
|
<gresource prefix="/listview_settings">
|
||||||
<file>listview_settings.ui</file>
|
<file>listview_settings.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
|
<gresource prefix="/listview_settings2">
|
||||||
|
<file>listview_settings2.ui</file>
|
||||||
|
</gresource>
|
||||||
<gresource prefix="/listview_ucd_data/">
|
<gresource prefix="/listview_ucd_data/">
|
||||||
<file>ucdnames.data</file>
|
<file>ucdnames.data</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
@@ -312,6 +315,7 @@
|
|||||||
<file>listview_minesweeper.c</file>
|
<file>listview_minesweeper.c</file>
|
||||||
<file>listview_selections.c</file>
|
<file>listview_selections.c</file>
|
||||||
<file>listview_settings.c</file>
|
<file>listview_settings.c</file>
|
||||||
|
<file>listview_settings2.c</file>
|
||||||
<file>listview_ucd.c</file>
|
<file>listview_ucd.c</file>
|
||||||
<file>listview_weather.c</file>
|
<file>listview_weather.c</file>
|
||||||
<file>listview_words.c</file>
|
<file>listview_words.c</file>
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ set_color (CanvasItem *item,
|
|||||||
css = g_strdup_printf ("#%s { background: %s; }", name, str);
|
css = g_strdup_printf ("#%s { background: %s; }", name, str);
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, css, -1);
|
gtk_css_provider_load_from_string (provider, css);
|
||||||
gtk_style_context_add_provider_for_display (gtk_widget_get_display (item->label), GTK_STYLE_PROVIDER (provider), 700);
|
gtk_style_context_add_provider_for_display (gtk_widget_get_display (item->label), GTK_STYLE_PROVIDER (provider), 700);
|
||||||
item->provider = GTK_STYLE_PROVIDER (provider);
|
item->provider = GTK_STYLE_PROVIDER (provider);
|
||||||
|
|
||||||
@@ -765,7 +765,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
|||||||
g_string_append_printf (css, ".canvasitem.%s { background: %s; }\n", colors[i], colors[i]);
|
g_string_append_printf (css, ".canvasitem.%s { background: %s; }\n", colors[i], colors[i]);
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, css->str, css->len);
|
gtk_css_provider_load_from_string (provider, css->str);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
800);
|
800);
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ do_fishbowl (GtkWidget *do_widget)
|
|||||||
if (provider == NULL)
|
if (provider == NULL)
|
||||||
{
|
{
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, css, -1);
|
gtk_css_provider_load_from_string (provider, css);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
|||||||
@@ -1294,18 +1294,18 @@ add_axis (hb_face_t *hb_face,
|
|||||||
|
|
||||||
axis_label = gtk_label_new (name);
|
axis_label = gtk_label_new (name);
|
||||||
gtk_widget_set_halign (axis_label, GTK_ALIGN_START);
|
gtk_widget_set_halign (axis_label, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (axis_label, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (axis_label, GTK_ALIGN_BASELINE_FILL);
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_label, 0, i, 1, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_label, 0, i, 1, 1);
|
||||||
adjustment = gtk_adjustment_new (value, ax->min_value, ax->max_value,
|
adjustment = gtk_adjustment_new (value, ax->min_value, ax->max_value,
|
||||||
1.0, 10.0, 0.0);
|
1.0, 10.0, 0.0);
|
||||||
axis_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
|
axis_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
|
||||||
gtk_scale_add_mark (GTK_SCALE (axis_scale), ax->default_value, GTK_POS_TOP, NULL);
|
gtk_scale_add_mark (GTK_SCALE (axis_scale), ax->default_value, GTK_POS_TOP, NULL);
|
||||||
gtk_widget_set_valign (axis_scale, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (axis_scale, GTK_ALIGN_BASELINE_FILL);
|
||||||
gtk_widget_set_hexpand (axis_scale, TRUE);
|
gtk_widget_set_hexpand (axis_scale, TRUE);
|
||||||
gtk_widget_set_size_request (axis_scale, 100, -1);
|
gtk_widget_set_size_request (axis_scale, 100, -1);
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_scale, 1, i, 1, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_scale, 1, i, 1, 1);
|
||||||
axis_entry = gtk_entry_new ();
|
axis_entry = gtk_entry_new ();
|
||||||
gtk_widget_set_valign (axis_entry, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (axis_entry, GTK_ALIGN_BASELINE_FILL);
|
||||||
gtk_editable_set_width_chars (GTK_EDITABLE (axis_entry), 4);
|
gtk_editable_set_width_chars (GTK_EDITABLE (axis_entry), 4);
|
||||||
gtk_editable_set_max_width_chars (GTK_EDITABLE (axis_entry), 4);
|
gtk_editable_set_max_width_chars (GTK_EDITABLE (axis_entry), 4);
|
||||||
gtk_widget_set_hexpand (axis_entry, FALSE);
|
gtk_widget_set_hexpand (axis_entry, FALSE);
|
||||||
@@ -1562,14 +1562,14 @@ update_font_variations (void)
|
|||||||
label = gtk_label_new ("Instance");
|
label = gtk_label_new ("Instance");
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
||||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE_FILL);
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), label, 0, -1, 1, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), label, 0, -1, 1, 1);
|
||||||
|
|
||||||
strings = gtk_string_list_new (NULL);
|
strings = gtk_string_list_new (NULL);
|
||||||
combo = gtk_drop_down_new (G_LIST_MODEL (strings), NULL);
|
combo = gtk_drop_down_new (G_LIST_MODEL (strings), NULL);
|
||||||
|
|
||||||
gtk_widget_set_halign (combo, GTK_ALIGN_START);
|
gtk_widget_set_halign (combo, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (combo, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (combo, GTK_ALIGN_BASELINE_FILL);
|
||||||
|
|
||||||
gtk_string_list_append (strings, "");
|
gtk_string_list_append (strings, "");
|
||||||
|
|
||||||
|
|||||||
@@ -337,7 +337,7 @@ create_gltransition_window (GtkWidget *do_widget)
|
|||||||
1, 1, 1, 1);
|
1, 1, 1, 1);
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, "button.small { padding: 0; }", -1);
|
gtk_css_provider_load_from_string (provider, "button.small { padding: 0; }");
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
|||||||
@@ -27,24 +27,17 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
#define GSK_TYPE_SHADER_PAINTABLE (gsk_shader_paintable_get_type ())
|
#define GSK_TYPE_SHADER_PAINTABLE (gsk_shader_paintable_get_type ())
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
G_DECLARE_FINAL_TYPE (GskShaderPaintable, gsk_shader_paintable, GSK, SHADER_PAINTABLE, GObject)
|
G_DECLARE_FINAL_TYPE (GskShaderPaintable, gsk_shader_paintable, GSK, SHADER_PAINTABLE, GObject)
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GdkPaintable * gsk_shader_paintable_new (GskGLShader *shader,
|
GdkPaintable * gsk_shader_paintable_new (GskGLShader *shader,
|
||||||
GBytes *data);
|
GBytes *data);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GskGLShader * gsk_shader_paintable_get_shader (GskShaderPaintable *self);
|
GskGLShader * gsk_shader_paintable_get_shader (GskShaderPaintable *self);
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
void gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
void gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
||||||
GskGLShader *shader);
|
GskGLShader *shader);
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GBytes * gsk_shader_paintable_get_args (GskShaderPaintable *self);
|
GBytes * gsk_shader_paintable_get_args (GskShaderPaintable *self);
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
void gsk_shader_paintable_set_args (GskShaderPaintable *self,
|
void gsk_shader_paintable_set_args (GskShaderPaintable *self,
|
||||||
GBytes *data);
|
GBytes *data);
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
void gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
void gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
||||||
int time_idx,
|
int time_idx,
|
||||||
gint64 frame_time);
|
gint64 frame_time);
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ do_iconscroll (GtkWidget *do_widget)
|
|||||||
set_widget_type (0);
|
set_widget_type (0);
|
||||||
|
|
||||||
label = GTK_WIDGET (gtk_builder_get_object (builder, "fps_label"));
|
label = GTK_WIDGET (gtk_builder_get_object (builder, "fps_label"));
|
||||||
id = g_timeout_add (500, update_fps, label);
|
id = g_timeout_add_full (G_PRIORITY_HIGH, 500, update_fps, label, NULL);
|
||||||
g_object_set_data_full (G_OBJECT (label), "timeout",
|
g_object_set_data_full (G_OBJECT (label), "timeout",
|
||||||
GUINT_TO_POINTER (id), remove_timeout);
|
GUINT_TO_POINTER (id), remove_timeout);
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,8 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="short_time_label">
|
<object class="GtkLabel" id="short_time_label">
|
||||||
|
<property name="hexpand">1</property>
|
||||||
|
<property name="xalign">1</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="label" translatable="yes">38m</property>
|
<property name="label" translatable="yes">38m</property>
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -14,138 +14,7 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include "settings-key.h"
|
||||||
|
|
||||||
/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
|
|
||||||
typedef struct _SettingsKey SettingsKey;
|
|
||||||
struct _SettingsKey
|
|
||||||
{
|
|
||||||
GObject parent_instance;
|
|
||||||
|
|
||||||
GSettings *settings;
|
|
||||||
GSettingsSchemaKey *key;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
PROP_0,
|
|
||||||
PROP_NAME,
|
|
||||||
PROP_SUMMARY,
|
|
||||||
PROP_DESCRIPTION,
|
|
||||||
PROP_VALUE,
|
|
||||||
PROP_TYPE,
|
|
||||||
PROP_DEFAULT_VALUE,
|
|
||||||
|
|
||||||
N_PROPS
|
|
||||||
};
|
|
||||||
|
|
||||||
#define SETTINGS_TYPE_KEY (settings_key_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (SettingsKey, settings_key, SETTINGS, KEY, GObject);
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (SettingsKey, settings_key, G_TYPE_OBJECT);
|
|
||||||
static GParamSpec *properties[N_PROPS] = { NULL, };
|
|
||||||
|
|
||||||
static void
|
|
||||||
settings_key_get_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
SettingsKey *self = SETTINGS_KEY (object);
|
|
||||||
|
|
||||||
switch (property_id)
|
|
||||||
{
|
|
||||||
case PROP_DESCRIPTION:
|
|
||||||
g_value_set_string (value, g_settings_schema_key_get_description (self->key));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_NAME:
|
|
||||||
g_value_set_string (value, g_settings_schema_key_get_name (self->key));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SUMMARY:
|
|
||||||
g_value_set_string (value, g_settings_schema_key_get_summary (self->key));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_VALUE:
|
|
||||||
{
|
|
||||||
GVariant *variant = g_settings_get_value (self->settings, g_settings_schema_key_get_name (self->key));
|
|
||||||
g_value_take_string (value, g_variant_print (variant, FALSE));
|
|
||||||
g_variant_unref (variant);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_TYPE:
|
|
||||||
{
|
|
||||||
const GVariantType *type = g_settings_schema_key_get_value_type (self->key);
|
|
||||||
g_value_set_string (value, g_variant_type_peek_string (type));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_DEFAULT_VALUE:
|
|
||||||
{
|
|
||||||
GVariant *variant = g_settings_schema_key_get_default_value (self->key);
|
|
||||||
g_value_take_string (value, g_variant_print (variant, FALSE));
|
|
||||||
g_variant_unref (variant);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
settings_key_finalize (GObject *object)
|
|
||||||
{
|
|
||||||
SettingsKey *self = SETTINGS_KEY (object);
|
|
||||||
|
|
||||||
g_object_unref (self->settings);
|
|
||||||
g_settings_schema_key_unref (self->key);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (settings_key_parent_class)->finalize (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
settings_key_class_init (SettingsKeyClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
||||||
|
|
||||||
gobject_class->finalize = settings_key_finalize;
|
|
||||||
gobject_class->get_property = settings_key_get_property;
|
|
||||||
|
|
||||||
properties[PROP_DESCRIPTION] =
|
|
||||||
g_param_spec_string ("description", NULL, NULL, NULL, G_PARAM_READABLE);
|
|
||||||
properties[PROP_NAME] =
|
|
||||||
g_param_spec_string ("name", NULL, NULL, NULL, G_PARAM_READABLE);
|
|
||||||
properties[PROP_SUMMARY] =
|
|
||||||
g_param_spec_string ("summary", NULL, NULL, NULL, G_PARAM_READABLE);
|
|
||||||
properties[PROP_VALUE] =
|
|
||||||
g_param_spec_string ("value", NULL, NULL, NULL, G_PARAM_READABLE);
|
|
||||||
properties[PROP_TYPE] =
|
|
||||||
g_param_spec_string ("type", NULL, NULL, NULL, G_PARAM_READABLE);
|
|
||||||
properties[PROP_DEFAULT_VALUE] =
|
|
||||||
g_param_spec_string ("default-value", NULL, NULL, NULL, G_PARAM_READABLE);
|
|
||||||
|
|
||||||
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
settings_key_init (SettingsKey *self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static SettingsKey *
|
|
||||||
settings_key_new (GSettings *settings,
|
|
||||||
GSettingsSchemaKey *key)
|
|
||||||
{
|
|
||||||
SettingsKey *result = g_object_new (SETTINGS_TYPE_KEY, NULL);
|
|
||||||
|
|
||||||
result->settings = g_object_ref (settings);
|
|
||||||
result->key = g_settings_schema_key_ref (key);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
item_value_changed (GtkEditableLabel *label,
|
item_value_changed (GtkEditableLabel *label,
|
||||||
@@ -153,6 +22,7 @@ item_value_changed (GtkEditableLabel *label,
|
|||||||
GtkColumnViewCell *cell)
|
GtkColumnViewCell *cell)
|
||||||
{
|
{
|
||||||
SettingsKey *self;
|
SettingsKey *self;
|
||||||
|
GSettingsSchemaKey *key;
|
||||||
const char *text;
|
const char *text;
|
||||||
const GVariantType *type;
|
const GVariantType *type;
|
||||||
GVariant *variant;
|
GVariant *variant;
|
||||||
@@ -163,9 +33,10 @@ item_value_changed (GtkEditableLabel *label,
|
|||||||
text = gtk_editable_get_text (GTK_EDITABLE (label));
|
text = gtk_editable_get_text (GTK_EDITABLE (label));
|
||||||
|
|
||||||
self = gtk_column_view_cell_get_item (cell);
|
self = gtk_column_view_cell_get_item (cell);
|
||||||
|
key = settings_key_get_key (self);
|
||||||
|
|
||||||
type = g_settings_schema_key_get_value_type (self->key);
|
type = g_settings_schema_key_get_value_type (key);
|
||||||
name = g_settings_schema_key_get_name (self->key);
|
name = g_settings_schema_key_get_name (key);
|
||||||
|
|
||||||
variant = g_variant_parse (type, text, NULL, NULL, &error);
|
variant = g_variant_parse (type, text, NULL, NULL, &error);
|
||||||
if (!variant)
|
if (!variant)
|
||||||
@@ -175,13 +46,13 @@ item_value_changed (GtkEditableLabel *label,
|
|||||||
goto revert;
|
goto revert;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_settings_schema_key_range_check (self->key, variant))
|
if (!g_settings_schema_key_range_check (key, variant))
|
||||||
{
|
{
|
||||||
g_warning ("Not a valid value for %s", name);
|
g_warning ("Not a valid value for %s", name);
|
||||||
goto revert;
|
goto revert;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_settings_set_value (self->settings, name, variant);
|
g_settings_set_value (settings_key_get_settings (self), name, variant);
|
||||||
g_variant_unref (variant);
|
g_variant_unref (variant);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
230
demos/gtk-demo/listview_settings2.c
Normal file
230
demos/gtk-demo/listview_settings2.c
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
/* Lists/Alternative Settings
|
||||||
|
* #Keywords: GtkListHeaderFactory, GtkSectionModel
|
||||||
|
*
|
||||||
|
* This demo shows an alternative settings viewer for GSettings.
|
||||||
|
*
|
||||||
|
* It demonstrates how to implement support for sections with GtkListView.
|
||||||
|
*
|
||||||
|
* It also shows how to quickly flatten a large tree of items into a list
|
||||||
|
* that can be filtered to find the items one is looking for.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "settings-key.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
item_value_changed (GtkEditableLabel *label,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
GtkColumnViewCell *cell)
|
||||||
|
{
|
||||||
|
SettingsKey *self;
|
||||||
|
GSettingsSchemaKey *key;
|
||||||
|
const char *text;
|
||||||
|
const GVariantType *type;
|
||||||
|
GVariant *variant;
|
||||||
|
GError *error = NULL;
|
||||||
|
const char *name;
|
||||||
|
char *value;
|
||||||
|
|
||||||
|
text = gtk_editable_get_text (GTK_EDITABLE (label));
|
||||||
|
|
||||||
|
self = gtk_column_view_cell_get_item (cell);
|
||||||
|
key = settings_key_get_key (self);
|
||||||
|
|
||||||
|
type = g_settings_schema_key_get_value_type (key);
|
||||||
|
name = g_settings_schema_key_get_name (key);
|
||||||
|
|
||||||
|
variant = g_variant_parse (type, text, NULL, NULL, &error);
|
||||||
|
if (!variant)
|
||||||
|
{
|
||||||
|
g_warning ("%s", error->message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
goto revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_settings_schema_key_range_check (key, variant))
|
||||||
|
{
|
||||||
|
g_warning ("Not a valid value for %s", name);
|
||||||
|
goto revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_settings_set_value (settings_key_get_settings (self), name, variant);
|
||||||
|
g_variant_unref (variant);
|
||||||
|
return;
|
||||||
|
|
||||||
|
revert:
|
||||||
|
gtk_widget_error_bell (GTK_WIDGET (label));
|
||||||
|
|
||||||
|
g_object_get (self, "value", &value, NULL);
|
||||||
|
gtk_editable_set_text (GTK_EDITABLE (label), value);
|
||||||
|
g_free (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
strvcmp (gconstpointer p1,
|
||||||
|
gconstpointer p2)
|
||||||
|
{
|
||||||
|
const char * const *s1 = p1;
|
||||||
|
const char * const *s2 = p2;
|
||||||
|
|
||||||
|
return strcmp (*s1, *s2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gpointer
|
||||||
|
map_settings_to_keys (gpointer item,
|
||||||
|
gpointer unused)
|
||||||
|
{
|
||||||
|
GSettings *settings = item;
|
||||||
|
GSettingsSchema *schema;
|
||||||
|
GListStore *store;
|
||||||
|
char **keys;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
g_object_get (settings, "settings-schema", &schema, NULL);
|
||||||
|
|
||||||
|
store = g_list_store_new (SETTINGS_TYPE_KEY);
|
||||||
|
|
||||||
|
keys = g_settings_schema_list_keys (schema);
|
||||||
|
|
||||||
|
for (i = 0; keys[i] != NULL; i++)
|
||||||
|
{
|
||||||
|
GSettingsSchemaKey *almost_there = g_settings_schema_get_key (schema, keys[i]);
|
||||||
|
SettingsKey *finally = settings_key_new (settings, almost_there);
|
||||||
|
g_list_store_append (store, finally);
|
||||||
|
g_object_unref (finally);
|
||||||
|
g_settings_schema_key_unref (almost_there);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev (keys);
|
||||||
|
g_settings_schema_unref (schema);
|
||||||
|
g_object_unref (settings);
|
||||||
|
|
||||||
|
return store;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GListModel *
|
||||||
|
create_settings_model (gpointer item,
|
||||||
|
gpointer unused)
|
||||||
|
{
|
||||||
|
GSettings *settings = item;
|
||||||
|
char **schemas;
|
||||||
|
GListStore *result;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
if (settings == NULL)
|
||||||
|
{
|
||||||
|
g_settings_schema_source_list_schemas (g_settings_schema_source_get_default (),
|
||||||
|
TRUE,
|
||||||
|
&schemas,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
schemas = g_settings_list_children (settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (schemas == NULL || schemas[0] == NULL)
|
||||||
|
{
|
||||||
|
g_free (schemas);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
qsort (schemas, g_strv_length (schemas), sizeof (char *), strvcmp);
|
||||||
|
|
||||||
|
result = g_list_store_new (G_TYPE_SETTINGS);
|
||||||
|
for (i = 0; schemas[i] != NULL; i++)
|
||||||
|
{
|
||||||
|
GSettings *child;
|
||||||
|
|
||||||
|
if (settings == NULL)
|
||||||
|
child = g_settings_new (schemas[i]);
|
||||||
|
else
|
||||||
|
child = g_settings_get_child (settings, schemas[i]);
|
||||||
|
|
||||||
|
g_list_store_append (result, child);
|
||||||
|
g_object_unref (child);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev (schemas);
|
||||||
|
|
||||||
|
return G_LIST_MODEL (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
search_enabled (GtkSearchEntry *entry)
|
||||||
|
{
|
||||||
|
gtk_editable_set_text (GTK_EDITABLE (entry), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stop_search (GtkSearchEntry *entry,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
gtk_editable_set_text (GTK_EDITABLE (entry), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
|
GtkWidget *
|
||||||
|
do_listview_settings2 (GtkWidget *do_widget)
|
||||||
|
{
|
||||||
|
if (window == NULL)
|
||||||
|
{
|
||||||
|
GtkListView *listview;
|
||||||
|
GListModel *model;
|
||||||
|
GtkTreeListModel *treemodel;
|
||||||
|
GtkNoSelection *selection;
|
||||||
|
GtkBuilderScope *scope;
|
||||||
|
GtkBuilder *builder;
|
||||||
|
GError *error = NULL;
|
||||||
|
GtkFilter *filter;
|
||||||
|
|
||||||
|
g_type_ensure (SETTINGS_TYPE_KEY);
|
||||||
|
|
||||||
|
scope = gtk_builder_cscope_new ();
|
||||||
|
gtk_builder_cscope_add_callback (scope, search_enabled);
|
||||||
|
gtk_builder_cscope_add_callback (scope, stop_search);
|
||||||
|
gtk_builder_cscope_add_callback (scope, settings_key_get_search_string);
|
||||||
|
gtk_builder_cscope_add_callback (scope, item_value_changed);
|
||||||
|
|
||||||
|
builder = gtk_builder_new ();
|
||||||
|
gtk_builder_set_scope (builder, scope);
|
||||||
|
g_object_unref (scope);
|
||||||
|
|
||||||
|
gtk_builder_add_from_resource (builder, "/listview_settings2/listview_settings2.ui", &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||||
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
|
gtk_widget_get_display (do_widget));
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window);
|
||||||
|
|
||||||
|
listview = GTK_LIST_VIEW (gtk_builder_get_object (builder, "listview"));
|
||||||
|
filter = GTK_FILTER (gtk_builder_get_object (builder, "filter"));
|
||||||
|
|
||||||
|
model = create_settings_model (NULL, NULL);
|
||||||
|
treemodel = gtk_tree_list_model_new (model,
|
||||||
|
TRUE,
|
||||||
|
TRUE,
|
||||||
|
create_settings_model,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
model = G_LIST_MODEL (gtk_map_list_model_new (G_LIST_MODEL (treemodel), map_settings_to_keys, NULL, NULL));
|
||||||
|
model = G_LIST_MODEL (gtk_flatten_list_model_new (model));
|
||||||
|
model = G_LIST_MODEL (gtk_filter_list_model_new (model, g_object_ref (filter)));
|
||||||
|
selection = gtk_no_selection_new (model);
|
||||||
|
|
||||||
|
gtk_list_view_set_model (GTK_LIST_VIEW (listview), GTK_SELECTION_MODEL (selection));
|
||||||
|
g_object_unref (selection);
|
||||||
|
|
||||||
|
g_object_unref (builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gtk_widget_get_visible (window))
|
||||||
|
gtk_widget_set_visible (window, TRUE);
|
||||||
|
else
|
||||||
|
gtk_window_destroy (GTK_WINDOW (window));
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
||||||
130
demos/gtk-demo/listview_settings2.ui
Normal file
130
demos/gtk-demo/listview_settings2.ui
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkStringFilter" id="filter">
|
||||||
|
<property name="expression">
|
||||||
|
<closure type="gchararray" function="settings_key_get_search_string" />
|
||||||
|
</property>
|
||||||
|
<property name="search" bind-source="entry" bind-property="text" />
|
||||||
|
</object>
|
||||||
|
<object class="GtkWindow" id="window">
|
||||||
|
<property name="title" translatable="yes">Settings</property>
|
||||||
|
<property name="default-width">640</property>
|
||||||
|
<property name="default-height">480</property>
|
||||||
|
<child type="titlebar">
|
||||||
|
<object class="GtkHeaderBar">
|
||||||
|
<child type="end">
|
||||||
|
<object class="GtkToggleButton" id="search_button">
|
||||||
|
<property name="icon-name">system-search-symbolic</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSearchBar">
|
||||||
|
<property name="search-mode-enabled" bind-source="search_button" bind-property="active" bind-flags="bidirectional"/>
|
||||||
|
<signal name="notify::search-mode-enabled" handler="search_enabled" object="entry"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSearchEntry" id="entry">
|
||||||
|
<signal name="stop-search" handler="stop_search"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<child>
|
||||||
|
<object class="GtkListView" id="listview">
|
||||||
|
<property name="vexpand">1</property>
|
||||||
|
<style>
|
||||||
|
<class name="rich-list"/>
|
||||||
|
</style>
|
||||||
|
<property name="factory">
|
||||||
|
<object class="GtkBuilderListItemFactory">
|
||||||
|
<property name="bytes"><![CDATA[
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<template class="GtkListItem">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkBox">
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<binding name="label">
|
||||||
|
<lookup name="name" type="SettingsKey">
|
||||||
|
<lookup name="item">GtkListItem</lookup>
|
||||||
|
</lookup>
|
||||||
|
</binding>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<style>
|
||||||
|
<class name="dim-label"/>
|
||||||
|
</style>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="ellipsize">end</property>
|
||||||
|
<binding name="label">
|
||||||
|
<lookup name="summary" type="SettingsKey">
|
||||||
|
<lookup name="item">GtkListItem</lookup>
|
||||||
|
</lookup>
|
||||||
|
</binding>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkEntry">
|
||||||
|
<property name="hexpand">1</property>
|
||||||
|
<property name="halign">end</property>
|
||||||
|
<binding name="text">
|
||||||
|
<lookup name="value" type="SettingsKey">
|
||||||
|
<lookup name="item">GtkListItem</lookup>
|
||||||
|
</lookup>
|
||||||
|
</binding>
|
||||||
|
<signal name="notify::label" handler="item_value_changed"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</template>
|
||||||
|
</interface>
|
||||||
|
]]></property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
<property name="header-factory">
|
||||||
|
<object class="GtkBuilderListItemFactory">
|
||||||
|
<property name="bytes"><![CDATA[
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<template class="GtkListHeader">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<binding name="label">
|
||||||
|
<lookup name="schema" type="GSettings">
|
||||||
|
<lookup name="settings" type="SettingsKey">
|
||||||
|
<lookup name="item">GtkListHeader</lookup>
|
||||||
|
</lookup>
|
||||||
|
</lookup>
|
||||||
|
</binding>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</template>
|
||||||
|
</interface>
|
||||||
|
]]></property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
@@ -367,7 +367,7 @@ do_listview_ucd (GtkWidget *do_widget)
|
|||||||
gtk_label_set_width_chars (GTK_LABEL (label), 2);
|
gtk_label_set_width_chars (GTK_LABEL (label), 2);
|
||||||
gtk_widget_add_css_class (label, "enormous");
|
gtk_widget_add_css_class (label, "enormous");
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, "label.enormous { font-size: 80px; }", -1);
|
gtk_css_provider_load_from_string (provider, "label.enormous { font-size: 80px; }");
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER (provider), 800);
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER (provider), 800);
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
gtk_widget_set_hexpand (label, TRUE);
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
gtk_box_append (GTK_BOX (box), label);
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ demos = files([
|
|||||||
'listview_minesweeper.c',
|
'listview_minesweeper.c',
|
||||||
'listview_selections.c',
|
'listview_selections.c',
|
||||||
'listview_settings.c',
|
'listview_settings.c',
|
||||||
|
'listview_settings2.c',
|
||||||
'listview_ucd.c',
|
'listview_ucd.c',
|
||||||
'listview_weather.c',
|
'listview_weather.c',
|
||||||
'listview_words.c',
|
'listview_words.c',
|
||||||
@@ -131,6 +132,7 @@ extra_demo_sources = files([
|
|||||||
'demo4widget.c',
|
'demo4widget.c',
|
||||||
'pixbufpaintable.c',
|
'pixbufpaintable.c',
|
||||||
'script-names.c',
|
'script-names.c',
|
||||||
|
'settings-key.c',
|
||||||
'unicode-names.c',
|
'unicode-names.c',
|
||||||
'suggestionentry.c',
|
'suggestionentry.c',
|
||||||
'language-names.c',
|
'language-names.c',
|
||||||
@@ -233,8 +235,7 @@ endif
|
|||||||
demo_cflags = []
|
demo_cflags = []
|
||||||
foreach flag: common_cflags
|
foreach flag: common_cflags
|
||||||
if flag not in ['-Werror=missing-prototypes', '-Wmissing-prototypes',
|
if flag not in ['-Werror=missing-prototypes', '-Wmissing-prototypes',
|
||||||
'-Werror=missing-declarations', '-Wmissing-declarations',
|
'-Werror=missing-declarations', '-Wmissing-declarations']
|
||||||
'-fvisibility=hidden']
|
|
||||||
demo_cflags += flag
|
demo_cflags += flag
|
||||||
endif
|
endif
|
||||||
endforeach
|
endforeach
|
||||||
|
|||||||
@@ -384,7 +384,7 @@ create_board (GtkWidget *window)
|
|||||||
"}";
|
"}";
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, css, -1);
|
gtk_css_provider_load_from_string (provider, css);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
800);
|
800);
|
||||||
|
|||||||
165
demos/gtk-demo/settings-key.c
Normal file
165
demos/gtk-demo/settings-key.c
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
#include "settings-key.h"
|
||||||
|
|
||||||
|
/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
|
||||||
|
struct _SettingsKey
|
||||||
|
{
|
||||||
|
GObject parent_instance;
|
||||||
|
|
||||||
|
GSettings *settings;
|
||||||
|
GSettingsSchemaKey *key;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
PROP_NAME,
|
||||||
|
PROP_SETTINGS,
|
||||||
|
PROP_SUMMARY,
|
||||||
|
PROP_DESCRIPTION,
|
||||||
|
PROP_VALUE,
|
||||||
|
PROP_TYPE,
|
||||||
|
PROP_DEFAULT_VALUE,
|
||||||
|
|
||||||
|
N_PROPS
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (SettingsKey, settings_key, G_TYPE_OBJECT);
|
||||||
|
static GParamSpec *properties[N_PROPS] = { NULL, };
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_get_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
SettingsKey *self = SETTINGS_KEY (object);
|
||||||
|
|
||||||
|
switch (property_id)
|
||||||
|
{
|
||||||
|
case PROP_DESCRIPTION:
|
||||||
|
g_value_set_string (value, g_settings_schema_key_get_description (self->key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_NAME:
|
||||||
|
g_value_set_string (value, g_settings_schema_key_get_name (self->key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_SUMMARY:
|
||||||
|
g_value_set_string (value, g_settings_schema_key_get_summary (self->key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_VALUE:
|
||||||
|
{
|
||||||
|
GVariant *variant = g_settings_get_value (self->settings, g_settings_schema_key_get_name (self->key));
|
||||||
|
g_value_take_string (value, g_variant_print (variant, FALSE));
|
||||||
|
g_variant_unref (variant);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_TYPE:
|
||||||
|
{
|
||||||
|
const GVariantType *type = g_settings_schema_key_get_value_type (self->key);
|
||||||
|
g_value_set_string (value, g_variant_type_peek_string (type));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_DEFAULT_VALUE:
|
||||||
|
{
|
||||||
|
GVariant *variant = g_settings_schema_key_get_default_value (self->key);
|
||||||
|
g_value_take_string (value, g_variant_print (variant, FALSE));
|
||||||
|
g_variant_unref (variant);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_SETTINGS:
|
||||||
|
g_value_set_object (value, self->settings);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
SettingsKey *self = SETTINGS_KEY (object);
|
||||||
|
|
||||||
|
g_object_unref (self->settings);
|
||||||
|
g_settings_schema_key_unref (self->key);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (settings_key_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_class_init (SettingsKeyClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
gobject_class->finalize = settings_key_finalize;
|
||||||
|
gobject_class->get_property = settings_key_get_property;
|
||||||
|
|
||||||
|
properties[PROP_DESCRIPTION] =
|
||||||
|
g_param_spec_string ("description", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_NAME] =
|
||||||
|
g_param_spec_string ("name", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_SETTINGS] =
|
||||||
|
g_param_spec_object ("settings", NULL, NULL, G_TYPE_SETTINGS, G_PARAM_READABLE);
|
||||||
|
properties[PROP_SUMMARY] =
|
||||||
|
g_param_spec_string ("summary", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_VALUE] =
|
||||||
|
g_param_spec_string ("value", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_TYPE] =
|
||||||
|
g_param_spec_string ("type", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_DEFAULT_VALUE] =
|
||||||
|
g_param_spec_string ("default-value", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
|
||||||
|
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_init (SettingsKey *self)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsKey *
|
||||||
|
settings_key_new (GSettings *settings,
|
||||||
|
GSettingsSchemaKey *key)
|
||||||
|
{
|
||||||
|
SettingsKey *result = g_object_new (SETTINGS_TYPE_KEY, NULL);
|
||||||
|
|
||||||
|
result->settings = g_object_ref (settings);
|
||||||
|
result->key = g_settings_schema_key_ref (key);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
GSettingsSchemaKey *
|
||||||
|
settings_key_get_key (SettingsKey *self)
|
||||||
|
{
|
||||||
|
return self->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
GSettings *
|
||||||
|
settings_key_get_settings (SettingsKey *self)
|
||||||
|
{
|
||||||
|
return self->settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
settings_key_get_search_string (SettingsKey *self)
|
||||||
|
{
|
||||||
|
char *schema, *result;
|
||||||
|
|
||||||
|
g_object_get (self->settings, "schema-id", &schema, NULL);
|
||||||
|
|
||||||
|
result = g_strconcat (g_settings_schema_key_get_name (self->key), " ",
|
||||||
|
g_settings_schema_key_get_summary (self->key), " ",
|
||||||
|
schema,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_free (schema);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
17
demos/gtk-demo/settings-key.h
Normal file
17
demos/gtk-demo/settings-key.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
|
||||||
|
typedef struct _SettingsKey SettingsKey;
|
||||||
|
#define SETTINGS_TYPE_KEY (settings_key_get_type ())
|
||||||
|
G_DECLARE_FINAL_TYPE (SettingsKey, settings_key, SETTINGS, KEY, GObject);
|
||||||
|
|
||||||
|
SettingsKey * settings_key_new (GSettings *settings,
|
||||||
|
GSettingsSchemaKey *key);
|
||||||
|
|
||||||
|
GSettingsSchemaKey * settings_key_get_key (SettingsKey *self);
|
||||||
|
GSettings * settings_key_get_settings (SettingsKey *self);
|
||||||
|
char * settings_key_get_search_string (SettingsKey *self);
|
||||||
@@ -28,14 +28,14 @@ add_row (GtkGrid *table,
|
|||||||
|
|
||||||
label = gtk_label_new_with_mnemonic (label_text);
|
label = gtk_label_new_with_mnemonic (label_text);
|
||||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE_FILL);
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
gtk_widget_set_hexpand (label, TRUE);
|
||||||
gtk_grid_attach (table, label, 0, row, 1, 1);
|
gtk_grid_attach (table, label, 0, row, 1, 1);
|
||||||
|
|
||||||
dropdown = gtk_drop_down_new_from_strings (options);
|
dropdown = gtk_drop_down_new_from_strings (options);
|
||||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), dropdown);
|
gtk_label_set_mnemonic_widget (GTK_LABEL (label), dropdown);
|
||||||
gtk_widget_set_halign (dropdown, GTK_ALIGN_END);
|
gtk_widget_set_halign (dropdown, GTK_ALIGN_END);
|
||||||
gtk_widget_set_valign (dropdown, GTK_ALIGN_BASELINE);
|
gtk_widget_set_valign (dropdown, GTK_ALIGN_BASELINE_FILL);
|
||||||
gtk_size_group_add_widget (size_group, dropdown);
|
gtk_size_group_add_widget (size_group, dropdown);
|
||||||
gtk_grid_attach (table, dropdown, 1, row, 1, 1);
|
gtk_grid_attach (table, dropdown, 1, row, 1, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
gen_demo_header = find_program('../build-aux/meson/gen-demo-header.py')
|
gen_demo_header = find_program('../build-aux/meson/gen-demo-header.py')
|
||||||
demo_profile = get_option('profile')
|
demo_profile = get_option('demo-profile')
|
||||||
|
|
||||||
demo_conf_h = declare_dependency(
|
demo_conf_h = declare_dependency(
|
||||||
sources: custom_target('demo-header',
|
sources: custom_target('demo-header',
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ node_editor_application_startup (GApplication *app)
|
|||||||
|
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_data (provider, css, -1);
|
gtk_css_provider_load_from_string (provider, css);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ struct _NodeEditorWindow
|
|||||||
GListStore *renderers;
|
GListStore *renderers;
|
||||||
GskRenderNode *node;
|
GskRenderNode *node;
|
||||||
|
|
||||||
|
GFile *file;
|
||||||
GFileMonitor *file_monitor;
|
GFileMonitor *file_monitor;
|
||||||
|
|
||||||
GArray *errors;
|
GArray *errors;
|
||||||
@@ -544,12 +545,14 @@ node_editor_window_load (NodeEditorWindow *self,
|
|||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_clear_object (&self->file);
|
||||||
g_clear_object (&self->file_monitor);
|
g_clear_object (&self->file_monitor);
|
||||||
|
|
||||||
if (!load_file_contents (self, file))
|
if (!load_file_contents (self, file))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
self->file_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);
|
self->file = g_object_ref (file);
|
||||||
|
self->file_monitor = g_file_monitor_file (self->file, G_FILE_MONITOR_NONE, NULL, &error);
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
@@ -586,13 +589,21 @@ static void
|
|||||||
show_open_filechooser (NodeEditorWindow *self)
|
show_open_filechooser (NodeEditorWindow *self)
|
||||||
{
|
{
|
||||||
GtkFileDialog *dialog;
|
GtkFileDialog *dialog;
|
||||||
GFile *cwd;
|
|
||||||
|
|
||||||
dialog = gtk_file_dialog_new ();
|
dialog = gtk_file_dialog_new ();
|
||||||
gtk_file_dialog_set_title (dialog, "Open node file");
|
gtk_file_dialog_set_title (dialog, "Open node file");
|
||||||
cwd = g_file_new_for_path (".");
|
if (self->file)
|
||||||
gtk_file_dialog_set_initial_folder (dialog, cwd);
|
{
|
||||||
g_object_unref (cwd);
|
gtk_file_dialog_set_initial_file (dialog, self->file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GFile *cwd;
|
||||||
|
cwd = g_file_new_for_path (".");
|
||||||
|
gtk_file_dialog_set_initial_folder (dialog, cwd);
|
||||||
|
g_object_unref (cwd);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_file_dialog_open (dialog, GTK_WINDOW (self),
|
gtk_file_dialog_open (dialog, GTK_WINDOW (self),
|
||||||
NULL, open_response_cb, self);
|
NULL, open_response_cb, self);
|
||||||
g_object_unref (dialog);
|
g_object_unref (dialog);
|
||||||
@@ -650,14 +661,21 @@ save_cb (GtkWidget *button,
|
|||||||
NodeEditorWindow *self)
|
NodeEditorWindow *self)
|
||||||
{
|
{
|
||||||
GtkFileDialog *dialog;
|
GtkFileDialog *dialog;
|
||||||
GFile *cwd;
|
|
||||||
|
|
||||||
dialog = gtk_file_dialog_new ();
|
dialog = gtk_file_dialog_new ();
|
||||||
gtk_file_dialog_set_title (dialog, "Save node");
|
gtk_file_dialog_set_title (dialog, "Save node");
|
||||||
cwd = g_file_new_for_path (".");
|
if (self->file)
|
||||||
gtk_file_dialog_set_initial_folder (dialog, cwd);
|
{
|
||||||
gtk_file_dialog_set_initial_name (dialog, "demo.node");
|
gtk_file_dialog_set_initial_file (dialog, self->file);
|
||||||
g_object_unref (cwd);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GFile *cwd = g_file_new_for_path (".");
|
||||||
|
gtk_file_dialog_set_initial_folder (dialog, cwd);
|
||||||
|
gtk_file_dialog_set_initial_name (dialog, "demo.node");
|
||||||
|
g_object_unref (cwd);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_file_dialog_save (dialog,
|
gtk_file_dialog_save (dialog,
|
||||||
GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (button))),
|
GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (button))),
|
||||||
NULL,
|
NULL,
|
||||||
@@ -1091,6 +1109,8 @@ node_editor_window_finalize (GObject *object)
|
|||||||
|
|
||||||
g_clear_pointer (&self->node, gsk_render_node_unref);
|
g_clear_pointer (&self->node, gsk_render_node_unref);
|
||||||
g_clear_object (&self->renderers);
|
g_clear_object (&self->renderers);
|
||||||
|
g_clear_object (&self->file_monitor);
|
||||||
|
g_clear_object (&self->file);
|
||||||
|
|
||||||
G_OBJECT_CLASS (node_editor_window_parent_class)->finalize (object);
|
G_OBJECT_CLASS (node_editor_window_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
@@ -1170,11 +1190,362 @@ node_editor_window_unrealize (GtkWidget *widget)
|
|||||||
GTK_WIDGET_CLASS (node_editor_window_parent_class)->unrealize (widget);
|
GTK_WIDGET_CLASS (node_editor_window_parent_class)->unrealize (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
NodeEditorWindow *self;
|
||||||
|
GtkTextIter start, end;
|
||||||
|
} Selection;
|
||||||
|
|
||||||
|
static void
|
||||||
|
color_cb (GObject *source,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GtkColorDialog *dialog = GTK_COLOR_DIALOG (source);
|
||||||
|
Selection *selection = data;
|
||||||
|
NodeEditorWindow *self = selection->self;
|
||||||
|
GdkRGBA *color;
|
||||||
|
char *text;
|
||||||
|
GError *error = NULL;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
|
||||||
|
color = gtk_color_dialog_choose_rgba_finish (dialog, result, &error);
|
||||||
|
if (!color)
|
||||||
|
{
|
||||||
|
g_print ("%s\n", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
g_free (selection);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||||
|
|
||||||
|
text = gdk_rgba_to_string (color);
|
||||||
|
gtk_text_buffer_delete (buffer, &selection->start, &selection->end);
|
||||||
|
gtk_text_buffer_insert (buffer, &selection->start, text, -1);
|
||||||
|
|
||||||
|
g_free (text);
|
||||||
|
gdk_rgba_free (color);
|
||||||
|
g_free (selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
font_cb (GObject *source,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GtkFontDialog *dialog = GTK_FONT_DIALOG (source);
|
||||||
|
Selection *selection = data;
|
||||||
|
NodeEditorWindow *self = selection->self;
|
||||||
|
GError *error = NULL;
|
||||||
|
PangoFontDescription *desc;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
char *text;
|
||||||
|
|
||||||
|
desc = gtk_font_dialog_choose_font_finish (dialog, result, &error);
|
||||||
|
if (!desc)
|
||||||
|
{
|
||||||
|
g_print ("%s\n", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
g_free (selection);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||||
|
|
||||||
|
text = pango_font_description_to_string (desc);
|
||||||
|
gtk_text_buffer_delete (buffer, &selection->start, &selection->end);
|
||||||
|
gtk_text_buffer_insert (buffer, &selection->start, text, -1);
|
||||||
|
|
||||||
|
g_free (text);
|
||||||
|
pango_font_description_free (desc);
|
||||||
|
g_free (selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
file_cb (GObject *source,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GtkFileDialog *dialog = GTK_FILE_DIALOG (source);
|
||||||
|
Selection *selection = data;
|
||||||
|
NodeEditorWindow *self = selection->self;
|
||||||
|
GError *error = NULL;
|
||||||
|
GFile *file;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
char *text;
|
||||||
|
|
||||||
|
file = gtk_file_dialog_open_finish (dialog, result, &error);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
g_print ("%s\n", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
g_free (selection);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||||
|
|
||||||
|
text = g_file_get_uri (file);
|
||||||
|
gtk_text_buffer_delete (buffer, &selection->start, &selection->end);
|
||||||
|
gtk_text_buffer_insert (buffer, &selection->start, text, -1);
|
||||||
|
|
||||||
|
g_free (text);
|
||||||
|
g_object_unref (file);
|
||||||
|
g_free (selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
key_pressed (GtkEventControllerKey *controller,
|
||||||
|
unsigned int keyval,
|
||||||
|
unsigned int keycode,
|
||||||
|
GdkModifierType state,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GtkWidget *dd = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (controller));
|
||||||
|
Selection *selection = data;
|
||||||
|
NodeEditorWindow *self = selection->self;
|
||||||
|
unsigned int selected;
|
||||||
|
GtkStringList *strings;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
const char *text;
|
||||||
|
|
||||||
|
if (keyval != GDK_KEY_Escape)
|
||||||
|
return;
|
||||||
|
|
||||||
|
strings = GTK_STRING_LIST (gtk_drop_down_get_model (GTK_DROP_DOWN (dd)));
|
||||||
|
selected = gtk_drop_down_get_selected (GTK_DROP_DOWN (dd));
|
||||||
|
text = gtk_string_list_get_string (strings, selected);
|
||||||
|
|
||||||
|
gtk_text_view_remove (GTK_TEXT_VIEW (self->text_view), dd);
|
||||||
|
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||||
|
gtk_text_iter_backward_search (&selection->start, "mode:", 0, NULL, &selection->start, NULL);
|
||||||
|
gtk_text_iter_forward_search (&selection->start, ";", 0, &selection->end, NULL, NULL);
|
||||||
|
gtk_text_buffer_delete (buffer, &selection->start, &selection->end);
|
||||||
|
gtk_text_buffer_insert (buffer, &selection->start, " ", -1);
|
||||||
|
gtk_text_buffer_insert (buffer, &selection->start, text, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
node_editor_window_edit (NodeEditorWindow *self,
|
||||||
|
GtkTextIter *iter)
|
||||||
|
{
|
||||||
|
GtkTextIter start, end;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
Selection *selection;
|
||||||
|
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||||
|
|
||||||
|
gtk_text_iter_set_line_offset (iter, 0);
|
||||||
|
|
||||||
|
if (gtk_text_iter_forward_search (iter, ";", 0, &end, NULL, NULL) &&
|
||||||
|
gtk_text_iter_forward_search (iter, "color:", 0, NULL, &start, &end))
|
||||||
|
{
|
||||||
|
GtkColorDialog *dialog;
|
||||||
|
GdkRGBA color;
|
||||||
|
char *text;
|
||||||
|
|
||||||
|
while (g_unichar_isspace (gtk_text_iter_get_char (&start)))
|
||||||
|
gtk_text_iter_forward_char (&start);
|
||||||
|
|
||||||
|
gtk_text_buffer_select_range (buffer, &start, &end);
|
||||||
|
text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
|
||||||
|
gdk_rgba_parse (&color, text);
|
||||||
|
g_free (text);
|
||||||
|
|
||||||
|
selection = g_new0 (Selection, 1);
|
||||||
|
selection->self = self;
|
||||||
|
selection->start = start;
|
||||||
|
selection->end = end;
|
||||||
|
|
||||||
|
dialog = gtk_color_dialog_new ();
|
||||||
|
gtk_color_dialog_choose_rgba (dialog, GTK_WINDOW (self), &color, NULL, color_cb, selection);
|
||||||
|
}
|
||||||
|
else if (gtk_text_iter_forward_search (iter, ";", 0, &end, NULL, NULL) &&
|
||||||
|
gtk_text_iter_forward_search (iter, "font:", 0, NULL, &start, &end))
|
||||||
|
{
|
||||||
|
GtkFontDialog *dialog;
|
||||||
|
PangoFontDescription *desc;
|
||||||
|
char *text;
|
||||||
|
|
||||||
|
while (g_unichar_isspace (gtk_text_iter_get_char (&start)))
|
||||||
|
gtk_text_iter_forward_char (&start);
|
||||||
|
|
||||||
|
/* Skip the quotes */
|
||||||
|
gtk_text_iter_forward_char (&start);
|
||||||
|
gtk_text_iter_backward_char (&end);
|
||||||
|
|
||||||
|
gtk_text_buffer_select_range (buffer, &start, &end);
|
||||||
|
|
||||||
|
text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
|
||||||
|
desc = pango_font_description_from_string (text);
|
||||||
|
g_free (text);
|
||||||
|
|
||||||
|
selection = g_new0 (Selection, 1);
|
||||||
|
selection->self = self;
|
||||||
|
selection->start = start;
|
||||||
|
selection->end = end;
|
||||||
|
|
||||||
|
dialog = gtk_font_dialog_new ();
|
||||||
|
gtk_font_dialog_choose_font (dialog, GTK_WINDOW (self), desc, NULL, font_cb, selection);
|
||||||
|
pango_font_description_free (desc);
|
||||||
|
}
|
||||||
|
else if (gtk_text_iter_forward_search (iter, ";", 0, &end, NULL, NULL) &&
|
||||||
|
gtk_text_iter_forward_search (iter, "mode:", 0, NULL, &start, &end))
|
||||||
|
{
|
||||||
|
/* Assume we have a blend node, for now */
|
||||||
|
GEnumClass *class;
|
||||||
|
GtkStringList *strings;
|
||||||
|
GtkWidget *dd;
|
||||||
|
GtkTextChildAnchor *anchor;
|
||||||
|
unsigned int selected = 0;
|
||||||
|
GtkEventController *key_controller;
|
||||||
|
gboolean is_blend_mode = FALSE;
|
||||||
|
char *text;
|
||||||
|
|
||||||
|
while (g_unichar_isspace (gtk_text_iter_get_char (&start)))
|
||||||
|
gtk_text_iter_forward_char (&start);
|
||||||
|
|
||||||
|
text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
|
||||||
|
|
||||||
|
strings = gtk_string_list_new (NULL);
|
||||||
|
class = g_type_class_ref (GSK_TYPE_BLEND_MODE);
|
||||||
|
for (unsigned int i = 0; i < class->n_values; i++)
|
||||||
|
{
|
||||||
|
if (strcmp (class->values[i].value_nick, text) == 0)
|
||||||
|
is_blend_mode = TRUE;
|
||||||
|
}
|
||||||
|
g_type_class_unref (class);
|
||||||
|
|
||||||
|
if (is_blend_mode)
|
||||||
|
class = g_type_class_ref (GSK_TYPE_BLEND_MODE);
|
||||||
|
else
|
||||||
|
class = g_type_class_ref (GSK_TYPE_MASK_MODE);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < class->n_values; i++)
|
||||||
|
{
|
||||||
|
if (i == 0 && is_blend_mode)
|
||||||
|
gtk_string_list_append (strings, "normal");
|
||||||
|
else
|
||||||
|
gtk_string_list_append (strings, class->values[i].value_nick);
|
||||||
|
|
||||||
|
if (strcmp (class->values[i].value_nick, text) == 0)
|
||||||
|
selected = i;
|
||||||
|
}
|
||||||
|
g_type_class_unref (class);
|
||||||
|
|
||||||
|
gtk_text_buffer_delete (buffer, &start, &end);
|
||||||
|
|
||||||
|
anchor = gtk_text_buffer_create_child_anchor (buffer, &start);
|
||||||
|
dd = gtk_drop_down_new (G_LIST_MODEL (strings), NULL);
|
||||||
|
gtk_drop_down_set_selected (GTK_DROP_DOWN (dd), selected);
|
||||||
|
gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (self->text_view), dd, anchor);
|
||||||
|
|
||||||
|
selection = g_new0 (Selection, 1);
|
||||||
|
selection->self = self;
|
||||||
|
selection->start = start;
|
||||||
|
selection->end = end;
|
||||||
|
|
||||||
|
key_controller = gtk_event_controller_key_new ();
|
||||||
|
g_signal_connect (key_controller, "key-pressed", G_CALLBACK (key_pressed), selection);
|
||||||
|
gtk_widget_add_controller (dd, key_controller);
|
||||||
|
}
|
||||||
|
else if (gtk_text_iter_forward_search (iter, ";", 0, &end, NULL, NULL) &&
|
||||||
|
gtk_text_iter_forward_search (iter, "texture:", 0, NULL, &start, &end))
|
||||||
|
{
|
||||||
|
GtkFileDialog *dialog;
|
||||||
|
GtkTextIter skip;
|
||||||
|
char *text;
|
||||||
|
GFile *file;
|
||||||
|
|
||||||
|
while (g_unichar_isspace (gtk_text_iter_get_char (&start)))
|
||||||
|
gtk_text_iter_forward_char (&start);
|
||||||
|
|
||||||
|
skip = start;
|
||||||
|
gtk_text_iter_forward_chars (&skip, strlen ("url(\""));
|
||||||
|
text = gtk_text_iter_get_text (&start, &skip);
|
||||||
|
if (strcmp (text, "url(\"") != 0)
|
||||||
|
{
|
||||||
|
g_free (text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_free (text);
|
||||||
|
start = skip;
|
||||||
|
|
||||||
|
skip = end;
|
||||||
|
gtk_text_iter_backward_chars (&skip, strlen ("\")"));
|
||||||
|
text = gtk_text_iter_get_text (&skip, &end);
|
||||||
|
if (strcmp (text, "\")") != 0)
|
||||||
|
{
|
||||||
|
g_free (text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_free (text);
|
||||||
|
end = skip;
|
||||||
|
|
||||||
|
gtk_text_buffer_select_range (buffer, &start, &end);
|
||||||
|
|
||||||
|
text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
|
||||||
|
file = g_file_new_for_uri (text);
|
||||||
|
g_free (text);
|
||||||
|
|
||||||
|
selection = g_new0 (Selection, 1);
|
||||||
|
selection->self = self;
|
||||||
|
selection->start = start;
|
||||||
|
selection->end = end;
|
||||||
|
|
||||||
|
dialog = gtk_file_dialog_new ();
|
||||||
|
gtk_file_dialog_set_initial_file (dialog, file);
|
||||||
|
gtk_file_dialog_open (dialog, GTK_WINDOW (self), NULL, file_cb, selection);
|
||||||
|
g_object_unref (file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
click_gesture_pressed (GtkGestureClick *gesture,
|
||||||
|
int n_press,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
NodeEditorWindow *self)
|
||||||
|
{
|
||||||
|
GtkTextIter iter;
|
||||||
|
int bx, by, trailing;
|
||||||
|
GdkModifierType state;
|
||||||
|
|
||||||
|
state = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (gesture));
|
||||||
|
if ((state & GDK_CONTROL_MASK) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (self->text_view), GTK_TEXT_WINDOW_TEXT, x, y, &bx, &by);
|
||||||
|
gtk_text_view_get_iter_at_position (GTK_TEXT_VIEW (self->text_view), &iter, &trailing, bx, by);
|
||||||
|
|
||||||
|
node_editor_window_edit (self, &iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
edit_action_cb (GtkWidget *widget,
|
||||||
|
const char *action_name,
|
||||||
|
GVariant *parameter)
|
||||||
|
{
|
||||||
|
NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget);
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
GtkTextIter start, end;
|
||||||
|
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->text_view));
|
||||||
|
gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
|
||||||
|
|
||||||
|
node_editor_window_edit (self, &start);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
node_editor_window_class_init (NodeEditorWindowClass *class)
|
node_editor_window_class_init (NodeEditorWindowClass *class)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
||||||
|
GtkShortcutTrigger *trigger;
|
||||||
|
GtkShortcutAction *action;
|
||||||
|
GtkShortcut *shortcut;
|
||||||
|
|
||||||
object_class->dispose = node_editor_window_dispose;
|
object_class->dispose = node_editor_window_dispose;
|
||||||
object_class->finalize = node_editor_window_finalize;
|
object_class->finalize = node_editor_window_finalize;
|
||||||
@@ -1205,6 +1576,14 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
|||||||
gtk_widget_class_bind_template_callback (widget_class, dark_mode_cb);
|
gtk_widget_class_bind_template_callback (widget_class, dark_mode_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, on_picture_drag_prepare_cb);
|
gtk_widget_class_bind_template_callback (widget_class, on_picture_drag_prepare_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, on_picture_drop_cb);
|
gtk_widget_class_bind_template_callback (widget_class, on_picture_drop_cb);
|
||||||
|
gtk_widget_class_bind_template_callback (widget_class, click_gesture_pressed);
|
||||||
|
|
||||||
|
gtk_widget_class_install_action (widget_class, "smart-edit", NULL, edit_action_cb);
|
||||||
|
|
||||||
|
trigger = gtk_keyval_trigger_new (GDK_KEY_e, GDK_CONTROL_MASK);
|
||||||
|
action = gtk_named_action_new ("smart-edit");
|
||||||
|
shortcut = gtk_shortcut_new (trigger, action);
|
||||||
|
gtk_widget_class_add_shortcut (widget_class, shortcut);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
|
|||||||
@@ -16,6 +16,14 @@
|
|||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
</menu>
|
</menu>
|
||||||
|
<menu id="extra_menu">
|
||||||
|
<section>
|
||||||
|
<item>
|
||||||
|
<attribute name="label" translatable="yes">Assisted _Edit</attribute>
|
||||||
|
<attribute name="action">smart-edit</attribute>
|
||||||
|
</item>
|
||||||
|
</section>
|
||||||
|
</menu>
|
||||||
|
|
||||||
<object class="GtkPopover" id="testcase_popover">
|
<object class="GtkPopover" id="testcase_popover">
|
||||||
<child>
|
<child>
|
||||||
@@ -195,10 +203,17 @@
|
|||||||
<property name="right-margin">6</property>
|
<property name="right-margin">6</property>
|
||||||
<property name="bottom-margin">6</property>
|
<property name="bottom-margin">6</property>
|
||||||
<property name="has-tooltip">1</property>
|
<property name="has-tooltip">1</property>
|
||||||
|
<property name="extra-menu">extra_menu</property>
|
||||||
<signal name="query-tooltip" handler="text_view_query_tooltip_cb"/>
|
<signal name="query-tooltip" handler="text_view_query_tooltip_cb"/>
|
||||||
<style>
|
<style>
|
||||||
<class name="editor" />
|
<class name="editor" />
|
||||||
</style>
|
</style>
|
||||||
|
<child>
|
||||||
|
<object class="GtkGestureClick">
|
||||||
|
<property name="button">1</property>
|
||||||
|
<signal name="pressed" handler="click_gesture_pressed"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ Creates a node like `gsk_linear_gradient_node_new()` with the given properties.
|
|||||||
| property | syntax | default | printed |
|
| property | syntax | default | printed |
|
||||||
| -------- | ---------------- | ---------------------- | ----------- |
|
| -------- | ---------------- | ---------------------- | ----------- |
|
||||||
| source | `<node>` | color { } | always |
|
| source | `<node>` | color { } | always |
|
||||||
| mode | `<blend-mode>` | alpha | non-default |
|
| mode | `<mask-mode>` | alpha | non-default |
|
||||||
| mask | `<node>` | color { } | always |
|
| mask | `<node>` | color { } | always |
|
||||||
|
|
||||||
Creates a node like `gsk_mask_node_new()` with the given properties.
|
Creates a node like `gsk_mask_node_new()` with the given properties.
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ support.
|
|||||||
If you want to run the testsuite to ensure that your GTK build
|
If you want to run the testsuite to ensure that your GTK build
|
||||||
works, you should enable it with this option.
|
works, you should enable it with this option.
|
||||||
|
|
||||||
### `build-tests`, `build-examples`, `demos`
|
### `build-tests`, `build-examples`, `build-demos`
|
||||||
|
|
||||||
By default, GTK will build quite a few tests, examples and demos.
|
By default, GTK will build quite a few tests, examples and demos.
|
||||||
While these are useful on a developer system, they are not
|
While these are useful on a developer system, they are not
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ ui_files = [
|
|||||||
'stackswitcher.ui',
|
'stackswitcher.ui',
|
||||||
'statusbar.ui',
|
'statusbar.ui',
|
||||||
'switch.ui',
|
'switch.ui',
|
||||||
|
'switch-state.ui',
|
||||||
'toggle-button.ui',
|
'toggle-button.ui',
|
||||||
'video.ui',
|
'video.ui',
|
||||||
'volumebutton.ui',
|
'volumebutton.ui',
|
||||||
|
|||||||
BIN
docs/reference/gtk/images/switch-state.png
Normal file
BIN
docs/reference/gtk/images/switch-state.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
43
docs/reference/gtk/images/switch-state.ui
Normal file
43
docs/reference/gtk/images/switch-state.ui
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkWindow">
|
||||||
|
<property name="decorated">0</property>
|
||||||
|
<property name="resizable">0</property>
|
||||||
|
<property name="default-width">280</property>
|
||||||
|
<property name="default-height">120</property>
|
||||||
|
<style>
|
||||||
|
<class name="nobackground"/>
|
||||||
|
</style>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<style>
|
||||||
|
<class name="shadow"/>
|
||||||
|
<class name="background"/>
|
||||||
|
<class name="frame"/>
|
||||||
|
</style>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="spacing">3</property>
|
||||||
|
<property name="hexpand">1</property>
|
||||||
|
<property name="vexpand">1</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSwitch">
|
||||||
|
<property name="active">1</property>
|
||||||
|
<property name="state">0</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSwitch">
|
||||||
|
<property name="active">0</property>
|
||||||
|
<property name="state">1</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
@@ -875,10 +875,10 @@ reference.
|
|||||||
### Adapt to coordinate API changes
|
### Adapt to coordinate API changes
|
||||||
|
|
||||||
A number of APIs that are accepting or returning coordinates have
|
A number of APIs that are accepting or returning coordinates have
|
||||||
been changed from ints to doubles: `gtk_widget_translate_coordinates()`,
|
been changed from `int`s to `double`s: `gtk_widget_translate_coordinates()`,
|
||||||
`gtk_fixed_put()`, `gtk_fixed_move()`. This change is mostly transparent,
|
`gtk_fixed_put()`, `gtk_fixed_move()`. This change is mostly transparent,
|
||||||
except for cases where out parameters are involved: you need to
|
except for cases where out parameters are involved: you need to
|
||||||
pass double* now, instead of int*.
|
pass `double*` now, instead of `int*`.
|
||||||
|
|
||||||
### Adapt to GtkStyleContext API changes
|
### Adapt to GtkStyleContext API changes
|
||||||
|
|
||||||
|
|||||||
@@ -119,3 +119,17 @@ it no longer has a resize handle for the window.
|
|||||||
|
|
||||||
These are very specialized widgets that should better live with the application
|
These are very specialized widgets that should better live with the application
|
||||||
where they are used.
|
where they are used.
|
||||||
|
|
||||||
|
## Widget size api changes
|
||||||
|
|
||||||
|
The functions gtk_widget_get_allocated_width() and gtk_widget_get_allocated_height()
|
||||||
|
are going away. In most cases, [method@Gtk.Widget.get_width] and [method@Gtk.Widget.get_height]
|
||||||
|
are suitable replacements. Note that the semantics are slightly different though:
|
||||||
|
the old functions return the size of the CSS border area, while the new functions return
|
||||||
|
the size of the widgets content area. In places where this difference matters, you can
|
||||||
|
use `gtk_widget_compute_bounds (widget, widget, &bounds)` instead.
|
||||||
|
|
||||||
|
The function gtk_widget_get_allocation() is also going away. It does not have a direct
|
||||||
|
replacement, but the previously mentioned alternatives can be used for it too.
|
||||||
|
|
||||||
|
The function gtk_widget_get_allocated_baseline() has been renamed to [method@Gtk.Widget.get_baseline].
|
||||||
|
|||||||
7
examples/hello/README.md
Normal file
7
examples/hello/README.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
A trivial example
|
||||||
|
=================
|
||||||
|
|
||||||
|
This is a very minimal example of an app that can be built against GTK.
|
||||||
|
We use this in CI to test that building against the installed GTK works.
|
||||||
|
|
||||||
|
That is why there is a standalone meson.build in this subdirectory.
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "gdkversionmacros.h"
|
#include "version/gdkversionmacros.h"
|
||||||
|
|
||||||
#include "gdkresources.h"
|
#include "gdkresources.h"
|
||||||
|
|
||||||
@@ -132,6 +132,7 @@ static const GdkDebugKey gdk_debug_keys[] = {
|
|||||||
{ "vulkan-validate", GDK_DEBUG_VULKAN_VALIDATE, "Load the Vulkan validation layer", TRUE },
|
{ "vulkan-validate", GDK_DEBUG_VULKAN_VALIDATE, "Load the Vulkan validation layer", TRUE },
|
||||||
{ "default-settings",GDK_DEBUG_DEFAULT_SETTINGS, "Force default values for xsettings", TRUE },
|
{ "default-settings",GDK_DEBUG_DEFAULT_SETTINGS, "Force default values for xsettings", TRUE },
|
||||||
{ "high-depth", GDK_DEBUG_HIGH_DEPTH, "Use high bit depth rendering if possible", TRUE },
|
{ "high-depth", GDK_DEBUG_HIGH_DEPTH, "Use high bit depth rendering if possible", TRUE },
|
||||||
|
{ "no-vsync", GDK_DEBUG_NO_VSYNC, "Repaint instantly (uses 100% CPU with animations)", TRUE },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
#include <gdk/gdktoplevellayout.h>
|
#include <gdk/gdktoplevellayout.h>
|
||||||
#include <gdk/gdktoplevelsize.h>
|
#include <gdk/gdktoplevelsize.h>
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
#include <gdk/version/gdkversionmacros.h>
|
||||||
#include <gdk/gdkvulkancontext.h>
|
#include <gdk/gdkvulkancontext.h>
|
||||||
|
|
||||||
#undef __GDK_H_INSIDE__
|
#undef __GDK_H_INSIDE__
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* GDK - The GIMP Drawing Kit
|
/* GDK - The GIMP Drawing Kit
|
||||||
* Copyright (C) 2005 Red Hat, Inc.
|
* Copyright (C) 2005 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -19,6 +19,9 @@
|
|||||||
|
|
||||||
#include "gdkcairoprivate.h"
|
#include "gdkcairoprivate.h"
|
||||||
|
|
||||||
|
#include "gdkrgba.h"
|
||||||
|
#include "gdktexture.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* GDK - The GIMP Drawing Kit
|
/* GDK - The GIMP Drawing Kit
|
||||||
* Copyright (C) 2005 Red Hat, Inc.
|
* Copyright (C) 2005 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -21,8 +21,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkrgba.h>
|
|
||||||
#include <gdk/gdkpixbuf.h>
|
#include <gdk/gdkpixbuf.h>
|
||||||
#include <pango/pangocairo.h>
|
#include <pango/pangocairo.h>
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,8 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
#include <cairo.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GDK_TYPE_CAIRO_CONTEXT (gdk_cairo_context_get_type ())
|
#define GDK_TYPE_CAIRO_CONTEXT (gdk_cairo_context_get_type ())
|
||||||
|
|||||||
@@ -22,10 +22,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gio/gio.h>
|
|
||||||
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -21,8 +21,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -22,10 +22,8 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GDK_TYPE_CONTENT_PROVIDER (gdk_content_provider_get_type ())
|
#define GDK_TYPE_CONTENT_PROVIDER (gdk_content_provider_get_type ())
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -21,8 +21,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ typedef enum {
|
|||||||
GDK_DEBUG_VULKAN_VALIDATE = 1 << 23,
|
GDK_DEBUG_VULKAN_VALIDATE = 1 << 23,
|
||||||
GDK_DEBUG_DEFAULT_SETTINGS= 1 << 24,
|
GDK_DEBUG_DEFAULT_SETTINGS= 1 << 24,
|
||||||
GDK_DEBUG_HIGH_DEPTH = 1 << 25,
|
GDK_DEBUG_HIGH_DEPTH = 1 << 25,
|
||||||
|
GDK_DEBUG_NO_VSYNC = 1 << 26,
|
||||||
} GdkDebugFlags;
|
} GdkDebugFlags;
|
||||||
|
|
||||||
extern guint _gdk_debug_flags;
|
extern guint _gdk_debug_flags;
|
||||||
|
|||||||
@@ -21,12 +21,10 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkdevicetool.h>
|
#include <gdk/gdkdevicetool.h>
|
||||||
#include <gdk/gdkenums.h>
|
#include <gdk/gdkenums.h>
|
||||||
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GDK_TYPE_DEVICE (gdk_device_get_type ())
|
#define GDK_TYPE_DEVICE (gdk_device_get_type ())
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -21,10 +21,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* GDK - The GIMP Drawing Kit
|
/* GDK - The GIMP Drawing Kit
|
||||||
* gdkdisplay.c
|
* gdkdisplay.c
|
||||||
*
|
*
|
||||||
* Copyright 2001 Sun Microsystems Inc.
|
* Copyright 2001 Sun Microsystems Inc.
|
||||||
*
|
*
|
||||||
* Erwann Chenede <erwann.chenede@sun.com>
|
* Erwann Chenede <erwann.chenede@sun.com>
|
||||||
*
|
*
|
||||||
@@ -31,10 +31,11 @@
|
|||||||
#include "gdkclipboardprivate.h"
|
#include "gdkclipboardprivate.h"
|
||||||
#include "gdkdeviceprivate.h"
|
#include "gdkdeviceprivate.h"
|
||||||
#include "gdkdisplaymanagerprivate.h"
|
#include "gdkdisplaymanagerprivate.h"
|
||||||
#include "gdkframeclockidleprivate.h"
|
|
||||||
#include "gdkeventsprivate.h"
|
#include "gdkeventsprivate.h"
|
||||||
|
#include "gdkframeclockidleprivate.h"
|
||||||
#include "gdkglcontextprivate.h"
|
#include "gdkglcontextprivate.h"
|
||||||
#include "gdkmonitorprivate.h"
|
#include "gdkmonitorprivate.h"
|
||||||
|
#include "gdkrectangle.h"
|
||||||
|
|
||||||
#ifdef HAVE_EGL
|
#ifdef HAVE_EGL
|
||||||
#include <epoxy/egl.h>
|
#include <epoxy/egl.h>
|
||||||
@@ -175,7 +176,7 @@ gdk_display_default_rate_egl_config (GdkDisplay *display,
|
|||||||
|
|
||||||
return distance;
|
return distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkSeat *
|
static GdkSeat *
|
||||||
gdk_display_real_get_default_seat (GdkDisplay *display)
|
gdk_display_real_get_default_seat (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
@@ -418,10 +419,10 @@ gdk_display_close (GdkDisplay *display)
|
|||||||
if (!display->closed)
|
if (!display->closed)
|
||||||
{
|
{
|
||||||
display->closed = TRUE;
|
display->closed = TRUE;
|
||||||
|
|
||||||
g_signal_emit (display, signals[CLOSED], 0, FALSE);
|
g_signal_emit (display, signals[CLOSED], 0, FALSE);
|
||||||
g_object_run_dispose (G_OBJECT (display));
|
g_object_run_dispose (G_OBJECT (display));
|
||||||
|
|
||||||
g_object_unref (display);
|
g_object_unref (display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -808,7 +809,7 @@ _gdk_display_end_device_grab (GdkDisplay *display,
|
|||||||
grab->implicit_ungrab = implicit;
|
grab->implicit_ungrab = implicit;
|
||||||
return l->next == NULL;
|
return l->next == NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1268,7 +1269,7 @@ gdk_display_init_gl (GdkDisplay *self)
|
|||||||
* Note that even if this function succeeds, creating a `GdkGLContext`
|
* Note that even if this function succeeds, creating a `GdkGLContext`
|
||||||
* may still fail.
|
* may still fail.
|
||||||
*
|
*
|
||||||
* This function is idempotent. Calling it multiple times will just
|
* This function is idempotent. Calling it multiple times will just
|
||||||
* return the same value or error.
|
* return the same value or error.
|
||||||
*
|
*
|
||||||
* You never need to call this function, GDK will call it automatically
|
* You never need to call this function, GDK will call it automatically
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkevents.h>
|
#include <gdk/gdkevents.h>
|
||||||
#include <gdk/gdkseat.h>
|
#include <gdk/gdkseat.h>
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ gdk_display_manager_open_display (GdkDisplayManager *manager,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found && !display)
|
if (!found && !any && !display)
|
||||||
g_warning ("No such backend: %s", backend);
|
g_warning ("No such backend: %s", backend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,10 +28,9 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkdevice.h>
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdkevents.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
#include <gdk/gdkdevice.h>
|
||||||
|
#include <gdk/gdkevents.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -24,9 +24,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -345,4 +345,3 @@ typedef enum {
|
|||||||
} GdkMemoryFormat;
|
} GdkMemoryFormat;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -28,12 +28,10 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkdevice.h>
|
#include <gdk/gdkdevice.h>
|
||||||
#include <gdk/gdkdevicetool.h>
|
#include <gdk/gdkdevicetool.h>
|
||||||
#include <gdk/gdkdrag.h>
|
#include <gdk/gdkdrag.h>
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ static guint signals[LAST_SIGNAL];
|
|||||||
|
|
||||||
static guint fps_counter;
|
static guint fps_counter;
|
||||||
|
|
||||||
#define FRAME_HISTORY_MAX_LENGTH 16
|
#define FRAME_HISTORY_MAX_LENGTH 128
|
||||||
|
|
||||||
struct _GdkFrameClockPrivate
|
struct _GdkFrameClockPrivate
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -275,58 +275,80 @@ gdk_frame_clock_idle_get_frame_time (GdkFrameClock *clock)
|
|||||||
return new_smoothed_time;
|
return new_smoothed_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RUN_FLUSH_IDLE(priv) \
|
static inline gboolean
|
||||||
((priv)->freeze_count == 0 && \
|
gdk_frame_clock_idle_is_frozen (GdkFrameClockIdle *self)
|
||||||
((priv)->requested & GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0)
|
{
|
||||||
|
GdkFrameClockIdlePrivate *priv = self->priv;
|
||||||
|
|
||||||
|
if (GDK_DEBUG_CHECK (NO_VSYNC))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return priv->freeze_count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline gboolean
|
||||||
|
should_run_flush_idle (GdkFrameClockIdle *self)
|
||||||
|
{
|
||||||
|
GdkFrameClockIdlePrivate *priv = self->priv;
|
||||||
|
|
||||||
|
return !gdk_frame_clock_idle_is_frozen (self) &&
|
||||||
|
(priv->requested & GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* The reason why we track updating_count separately here and don't
|
/* The reason why we track updating_count separately here and don't
|
||||||
* just add GDK_FRAME_CLOCK_PHASE_UPDATE into ->request on every frame
|
* just add GDK_FRAME_CLOCK_PHASE_UPDATE into ->request on every frame
|
||||||
* is so that we can avoid doing one more frame when an animation
|
* is so that we can avoid doing one more frame when an animation
|
||||||
* is cancelled.
|
* is cancelled.
|
||||||
*/
|
*/
|
||||||
#define RUN_PAINT_IDLE(priv) \
|
static inline gboolean
|
||||||
((priv)->freeze_count == 0 && \
|
should_run_paint_idle (GdkFrameClockIdle *self)
|
||||||
(((priv)->requested & ~GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0 || \
|
{
|
||||||
(priv)->updating_count > 0))
|
GdkFrameClockIdlePrivate *priv = self->priv;
|
||||||
|
|
||||||
|
return !gdk_frame_clock_idle_is_frozen (self) &&
|
||||||
|
((priv->requested & ~GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0 ||
|
||||||
|
priv->updating_count > 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_start_idle (GdkFrameClockIdle *clock_idle,
|
maybe_start_idle (GdkFrameClockIdle *self,
|
||||||
gboolean caused_by_thaw)
|
gboolean caused_by_thaw)
|
||||||
{
|
{
|
||||||
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
|
GdkFrameClockIdlePrivate *priv = self->priv;
|
||||||
|
|
||||||
if (RUN_FLUSH_IDLE (priv) || RUN_PAINT_IDLE (priv))
|
if (should_run_flush_idle (self) || should_run_paint_idle (self))
|
||||||
{
|
{
|
||||||
guint min_interval = 0;
|
guint min_interval = 0;
|
||||||
|
|
||||||
if (priv->min_next_frame_time != 0)
|
if (priv->min_next_frame_time != 0 &&
|
||||||
|
!GDK_DEBUG_CHECK (NO_VSYNC))
|
||||||
{
|
{
|
||||||
gint64 now = g_get_monotonic_time ();
|
gint64 now = g_get_monotonic_time ();
|
||||||
gint64 min_interval_us = MAX (priv->min_next_frame_time, now) - now;
|
gint64 min_interval_us = MAX (priv->min_next_frame_time, now) - now;
|
||||||
min_interval = (min_interval_us + 500) / 1000;
|
min_interval = (min_interval_us + 500) / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->flush_idle_id == 0 && RUN_FLUSH_IDLE (priv))
|
if (priv->flush_idle_id == 0 && should_run_flush_idle (self))
|
||||||
{
|
{
|
||||||
GSource *source;
|
GSource *source;
|
||||||
|
|
||||||
priv->flush_idle_id = g_timeout_add_full (GDK_PRIORITY_EVENTS + 1,
|
priv->flush_idle_id = g_timeout_add_full (GDK_PRIORITY_EVENTS + 1,
|
||||||
min_interval,
|
min_interval,
|
||||||
gdk_frame_clock_flush_idle,
|
gdk_frame_clock_flush_idle,
|
||||||
g_object_ref (clock_idle),
|
g_object_ref (self),
|
||||||
(GDestroyNotify) g_object_unref);
|
(GDestroyNotify) g_object_unref);
|
||||||
source = g_main_context_find_source_by_id (NULL, priv->flush_idle_id);
|
source = g_main_context_find_source_by_id (NULL, priv->flush_idle_id);
|
||||||
g_source_set_static_name (source, "[gtk] gdk_frame_clock_flush_idle");
|
g_source_set_static_name (source, "[gtk] gdk_frame_clock_flush_idle");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!priv->in_paint_idle &&
|
if (!priv->in_paint_idle &&
|
||||||
priv->paint_idle_id == 0 && RUN_PAINT_IDLE (priv))
|
priv->paint_idle_id == 0 && should_run_paint_idle (self))
|
||||||
{
|
{
|
||||||
priv->paint_is_thaw = caused_by_thaw;
|
priv->paint_is_thaw = caused_by_thaw;
|
||||||
priv->paint_idle_id = g_timeout_add_full (GDK_PRIORITY_REDRAW,
|
priv->paint_idle_id = g_timeout_add_full (GDK_PRIORITY_REDRAW,
|
||||||
min_interval,
|
min_interval,
|
||||||
gdk_frame_clock_paint_idle,
|
gdk_frame_clock_paint_idle,
|
||||||
g_object_ref (clock_idle),
|
g_object_ref (self),
|
||||||
(GDestroyNotify) g_object_unref);
|
(GDestroyNotify) g_object_unref);
|
||||||
gdk_source_set_static_name_by_id (priv->paint_idle_id, "[gtk] gdk_frame_clock_paint_idle");
|
gdk_source_set_static_name_by_id (priv->paint_idle_id, "[gtk] gdk_frame_clock_paint_idle");
|
||||||
}
|
}
|
||||||
@@ -334,17 +356,17 @@ maybe_start_idle (GdkFrameClockIdle *clock_idle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_stop_idle (GdkFrameClockIdle *clock_idle)
|
maybe_stop_idle (GdkFrameClockIdle *self)
|
||||||
{
|
{
|
||||||
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
|
GdkFrameClockIdlePrivate *priv = self->priv;
|
||||||
|
|
||||||
if (priv->flush_idle_id != 0 && !RUN_FLUSH_IDLE (priv))
|
if (priv->flush_idle_id != 0 && !should_run_flush_idle (self))
|
||||||
{
|
{
|
||||||
g_source_remove (priv->flush_idle_id);
|
g_source_remove (priv->flush_idle_id);
|
||||||
priv->flush_idle_id = 0;
|
priv->flush_idle_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->paint_idle_id != 0 && !RUN_PAINT_IDLE (priv))
|
if (priv->paint_idle_id != 0 && !should_run_paint_idle (self))
|
||||||
{
|
{
|
||||||
g_source_remove (priv->paint_idle_id);
|
g_source_remove (priv->paint_idle_id);
|
||||||
priv->paint_idle_id = 0;
|
priv->paint_idle_id = 0;
|
||||||
@@ -432,7 +454,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
break;
|
break;
|
||||||
case GDK_FRAME_CLOCK_PHASE_NONE:
|
case GDK_FRAME_CLOCK_PHASE_NONE:
|
||||||
case GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT:
|
case GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT:
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
gint64 frame_interval = FRAME_INTERVAL;
|
gint64 frame_interval = FRAME_INTERVAL;
|
||||||
GdkFrameTimings *prev_timings = gdk_frame_clock_get_current_timings (clock);
|
GdkFrameTimings *prev_timings = gdk_frame_clock_get_current_timings (clock);
|
||||||
@@ -548,7 +570,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
G_GNUC_FALLTHROUGH;
|
G_GNUC_FALLTHROUGH;
|
||||||
|
|
||||||
case GDK_FRAME_CLOCK_PHASE_UPDATE:
|
case GDK_FRAME_CLOCK_PHASE_UPDATE:
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
if ((priv->requested & GDK_FRAME_CLOCK_PHASE_UPDATE) != 0 ||
|
if ((priv->requested & GDK_FRAME_CLOCK_PHASE_UPDATE) != 0 ||
|
||||||
priv->updating_count > 0)
|
priv->updating_count > 0)
|
||||||
@@ -560,7 +582,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
G_GNUC_FALLTHROUGH;
|
G_GNUC_FALLTHROUGH;
|
||||||
|
|
||||||
case GDK_FRAME_CLOCK_PHASE_LAYOUT:
|
case GDK_FRAME_CLOCK_PHASE_LAYOUT:
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
int iter;
|
int iter;
|
||||||
#ifdef G_ENABLE_DEBUG
|
#ifdef G_ENABLE_DEBUG
|
||||||
@@ -580,7 +602,8 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
*/
|
*/
|
||||||
iter = 0;
|
iter = 0;
|
||||||
while ((priv->requested & GDK_FRAME_CLOCK_PHASE_LAYOUT) &&
|
while ((priv->requested & GDK_FRAME_CLOCK_PHASE_LAYOUT) &&
|
||||||
priv->freeze_count == 0 && iter++ < 4)
|
!gdk_frame_clock_idle_is_frozen (clock_idle) &&
|
||||||
|
iter++ < 4)
|
||||||
{
|
{
|
||||||
priv->requested &= ~GDK_FRAME_CLOCK_PHASE_LAYOUT;
|
priv->requested &= ~GDK_FRAME_CLOCK_PHASE_LAYOUT;
|
||||||
_gdk_frame_clock_emit_layout (clock);
|
_gdk_frame_clock_emit_layout (clock);
|
||||||
@@ -591,7 +614,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
G_GNUC_FALLTHROUGH;
|
G_GNUC_FALLTHROUGH;
|
||||||
|
|
||||||
case GDK_FRAME_CLOCK_PHASE_PAINT:
|
case GDK_FRAME_CLOCK_PHASE_PAINT:
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
#ifdef G_ENABLE_DEBUG
|
#ifdef G_ENABLE_DEBUG
|
||||||
if (GDK_DEBUG_CHECK (FRAMES))
|
if (GDK_DEBUG_CHECK (FRAMES))
|
||||||
@@ -612,7 +635,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
G_GNUC_FALLTHROUGH;
|
G_GNUC_FALLTHROUGH;
|
||||||
|
|
||||||
case GDK_FRAME_CLOCK_PHASE_AFTER_PAINT:
|
case GDK_FRAME_CLOCK_PHASE_AFTER_PAINT:
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
priv->requested &= ~GDK_FRAME_CLOCK_PHASE_AFTER_PAINT;
|
priv->requested &= ~GDK_FRAME_CLOCK_PHASE_AFTER_PAINT;
|
||||||
_gdk_frame_clock_emit_after_paint (clock);
|
_gdk_frame_clock_emit_after_paint (clock);
|
||||||
@@ -641,7 +664,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
_gdk_frame_clock_emit_resume_events (clock);
|
_gdk_frame_clock_emit_resume_events (clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
|
priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
|
||||||
|
|
||||||
priv->in_paint_idle = FALSE;
|
priv->in_paint_idle = FALSE;
|
||||||
@@ -650,7 +673,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
* update as soon as the backend unthrottles (if there is work to do),
|
* update as soon as the backend unthrottles (if there is work to do),
|
||||||
* otherwise we need to figure when the next frame should be.
|
* otherwise we need to figure when the next frame should be.
|
||||||
*/
|
*/
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* If we don't receive "frame drawn" events, smooth_cycle_start will simply be advanced in constant increments of
|
* If we don't receive "frame drawn" events, smooth_cycle_start will simply be advanced in constant increments of
|
||||||
@@ -668,7 +691,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
maybe_start_idle (clock_idle, FALSE);
|
maybe_start_idle (clock_idle, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
priv->sleep_serial = get_sleep_serial ();
|
priv->sleep_serial = get_sleep_serial ();
|
||||||
|
|
||||||
gdk_profiler_end_mark (before, "frameclock cycle", NULL);
|
gdk_profiler_end_mark (before, "frameclock cycle", NULL);
|
||||||
@@ -742,7 +765,7 @@ gdk_frame_clock_idle_freeze (GdkFrameClock *clock)
|
|||||||
GdkFrameClockIdle *clock_idle = GDK_FRAME_CLOCK_IDLE (clock);
|
GdkFrameClockIdle *clock_idle = GDK_FRAME_CLOCK_IDLE (clock);
|
||||||
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
|
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
|
||||||
|
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
if (GDK_PROFILER_IS_RUNNING)
|
if (GDK_PROFILER_IS_RUNNING)
|
||||||
priv->freeze_time = g_get_monotonic_time ();
|
priv->freeze_time = g_get_monotonic_time ();
|
||||||
@@ -761,7 +784,7 @@ gdk_frame_clock_idle_thaw (GdkFrameClock *clock)
|
|||||||
g_return_if_fail (priv->freeze_count > 0);
|
g_return_if_fail (priv->freeze_count > 0);
|
||||||
|
|
||||||
priv->freeze_count--;
|
priv->freeze_count--;
|
||||||
if (priv->freeze_count == 0)
|
if (!gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
maybe_start_idle (clock_idle, TRUE);
|
maybe_start_idle (clock_idle, TRUE);
|
||||||
/* If nothing is requested so we didn't start an idle, we need
|
/* If nothing is requested so we didn't start an idle, we need
|
||||||
@@ -775,7 +798,7 @@ gdk_frame_clock_idle_thaw (GdkFrameClock *clock)
|
|||||||
|
|
||||||
if (GDK_PROFILER_IS_RUNNING)
|
if (GDK_PROFILER_IS_RUNNING)
|
||||||
{
|
{
|
||||||
if (priv->freeze_time != 0)
|
if (gdk_frame_clock_idle_is_frozen (clock_idle))
|
||||||
{
|
{
|
||||||
gdk_profiler_end_mark (priv->freeze_time * 1000, "frameclock frozen", NULL);
|
gdk_profiler_end_mark (priv->freeze_time * 1000, "frameclock frozen", NULL);
|
||||||
priv->freeze_time = 0;
|
priv->freeze_time = 0;
|
||||||
|
|||||||
@@ -21,8 +21,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <glib-object.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* GDK - The GIMP Drawing Kit
|
/* GDK - The GIMP Drawing Kit
|
||||||
*
|
*
|
||||||
* gdkglcontext.h: GL context abstraction
|
* gdkglcontext.h: GL context abstraction
|
||||||
*
|
*
|
||||||
* Copyright © 2014 Emmanuele Bassi
|
* Copyright © 2014 Emmanuele Bassi
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
@@ -24,9 +24,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -338,6 +338,7 @@ gdk_gl_texture_new_from_builder (GdkGLTextureBuilder *builder,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GdkGLTexture *self;
|
GdkGLTexture *self;
|
||||||
|
GdkTexture *update_texture;
|
||||||
|
|
||||||
self = g_object_new (GDK_TYPE_GL_TEXTURE,
|
self = g_object_new (GDK_TYPE_GL_TEXTURE,
|
||||||
"width", gdk_gl_texture_builder_get_width (builder),
|
"width", gdk_gl_texture_builder_get_width (builder),
|
||||||
@@ -353,6 +354,22 @@ gdk_gl_texture_new_from_builder (GdkGLTextureBuilder *builder,
|
|||||||
self->destroy = destroy;
|
self->destroy = destroy;
|
||||||
self->data = data;
|
self->data = data;
|
||||||
|
|
||||||
|
update_texture = gdk_gl_texture_builder_get_update_texture (builder);
|
||||||
|
if (update_texture)
|
||||||
|
{
|
||||||
|
cairo_region_t *update_region = gdk_gl_texture_builder_get_update_region (builder);
|
||||||
|
if (update_region)
|
||||||
|
{
|
||||||
|
update_region = cairo_region_copy (update_region);
|
||||||
|
cairo_region_intersect_rectangle (update_region,
|
||||||
|
&(cairo_rectangle_int_t) {
|
||||||
|
0, 0,
|
||||||
|
update_texture->width, update_texture->height
|
||||||
|
});
|
||||||
|
gdk_texture_set_diff (GDK_TEXTURE (self), update_texture, update_region);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GDK_TEXTURE (self);
|
return GDK_TEXTURE (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkglcontext.h>
|
#include <gdk/gdkglcontext.h>
|
||||||
#include <gdk/gdktexture.h>
|
#include <gdk/gdktexture.h>
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
#include "gdkglcontext.h"
|
#include "gdkglcontext.h"
|
||||||
#include "gdkgltextureprivate.h"
|
#include "gdkgltextureprivate.h"
|
||||||
|
|
||||||
|
#include <cairo-gobject.h>
|
||||||
|
|
||||||
struct _GdkGLTextureBuilder
|
struct _GdkGLTextureBuilder
|
||||||
{
|
{
|
||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
@@ -36,6 +38,9 @@ struct _GdkGLTextureBuilder
|
|||||||
GdkMemoryFormat format;
|
GdkMemoryFormat format;
|
||||||
gboolean has_mipmap;
|
gboolean has_mipmap;
|
||||||
gpointer sync;
|
gpointer sync;
|
||||||
|
|
||||||
|
GdkTexture *update_texture;
|
||||||
|
cairo_region_t *update_region;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkGLTextureBuilderClass
|
struct _GdkGLTextureBuilderClass
|
||||||
@@ -70,6 +75,8 @@ enum
|
|||||||
PROP_HEIGHT,
|
PROP_HEIGHT,
|
||||||
PROP_ID,
|
PROP_ID,
|
||||||
PROP_SYNC,
|
PROP_SYNC,
|
||||||
|
PROP_UPDATE_REGION,
|
||||||
|
PROP_UPDATE_TEXTURE,
|
||||||
PROP_WIDTH,
|
PROP_WIDTH,
|
||||||
|
|
||||||
N_PROPS
|
N_PROPS
|
||||||
@@ -86,6 +93,9 @@ gdk_gl_texture_builder_dispose (GObject *object)
|
|||||||
|
|
||||||
g_clear_object (&self->context);
|
g_clear_object (&self->context);
|
||||||
|
|
||||||
|
g_clear_object (&self->update_texture);
|
||||||
|
g_clear_pointer (&self->update_region, cairo_region_destroy);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gdk_gl_texture_builder_parent_class)->dispose (object);
|
G_OBJECT_CLASS (gdk_gl_texture_builder_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,6 +133,14 @@ gdk_gl_texture_builder_get_property (GObject *object,
|
|||||||
g_value_set_pointer (value, self->sync);
|
g_value_set_pointer (value, self->sync);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_UPDATE_REGION:
|
||||||
|
g_value_set_boxed (value, self->update_region);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_UPDATE_TEXTURE:
|
||||||
|
g_value_set_object (value, self->update_texture);
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_WIDTH:
|
case PROP_WIDTH:
|
||||||
g_value_set_int (value, self->width);
|
g_value_set_int (value, self->width);
|
||||||
break;
|
break;
|
||||||
@@ -167,6 +185,14 @@ gdk_gl_texture_builder_set_property (GObject *object,
|
|||||||
gdk_gl_texture_builder_set_sync (self, g_value_get_pointer (value));
|
gdk_gl_texture_builder_set_sync (self, g_value_get_pointer (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_UPDATE_REGION:
|
||||||
|
gdk_gl_texture_builder_set_update_region (self, g_value_get_boxed (value));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_UPDATE_TEXTURE:
|
||||||
|
gdk_gl_texture_builder_set_update_texture (self, g_value_get_object (value));
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_WIDTH:
|
case PROP_WIDTH:
|
||||||
gdk_gl_texture_builder_set_width (self, g_value_get_int (value));
|
gdk_gl_texture_builder_set_width (self, g_value_get_int (value));
|
||||||
break;
|
break;
|
||||||
@@ -260,6 +286,30 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
|||||||
g_param_spec_pointer ("sync", NULL, NULL,
|
g_param_spec_pointer ("sync", NULL, NULL,
|
||||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GdkGLTextureBuilder:update-region: (attributes org.gdk.Property.get=gdk_gl_texture_builder_get_update_region org.gdk.Property.set=gdk_gl_texture_builder_set_update_region)
|
||||||
|
*
|
||||||
|
* The update region for [property@Gdk.GLTextureBuilder:update-texture].
|
||||||
|
*
|
||||||
|
* Since: 4.12
|
||||||
|
*/
|
||||||
|
properties[PROP_UPDATE_REGION] =
|
||||||
|
g_param_spec_boxed ("update-region", NULL, NULL,
|
||||||
|
CAIRO_GOBJECT_TYPE_REGION,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GdkGLTextureBuilder:update-texture: (attributes org.gdk.Property.get=gdk_gl_texture_builder_get_update_texture org.gdk.Property.set=gdk_gl_texture_builder_set_update_texture)
|
||||||
|
*
|
||||||
|
* The texture [property@Gdk.GLTextureBuilder:update-region] is an update for.
|
||||||
|
*
|
||||||
|
* Since: 4.12
|
||||||
|
*/
|
||||||
|
properties[PROP_UPDATE_TEXTURE] =
|
||||||
|
g_param_spec_object ("update-texture", NULL, NULL,
|
||||||
|
GDK_TYPE_TEXTURE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GdkGLTextureBuilder:width: (attributes org.gdk.Property.get=gdk_gl_texture_builder_get_width org.gdk.Property.set=gdk_gl_texture_builder_set_width)
|
* GdkGLTextureBuilder:width: (attributes org.gdk.Property.get=gdk_gl_texture_builder_get_width org.gdk.Property.set=gdk_gl_texture_builder_set_width)
|
||||||
*
|
*
|
||||||
@@ -271,6 +321,7 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass)
|
|||||||
g_param_spec_int ("width", NULL, NULL,
|
g_param_spec_int ("width", NULL, NULL,
|
||||||
G_MININT, G_MAXINT, 0,
|
G_MININT, G_MAXINT, 0,
|
||||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -613,6 +664,102 @@ gdk_gl_texture_builder_set_format (GdkGLTextureBuilder *self,
|
|||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FORMAT]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FORMAT]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_gl_texture_builder_get_update_texture: (attributes org.gdk.Method.get_property=update_texture)
|
||||||
|
* @self: a `GdkGLTextureBuilder`
|
||||||
|
*
|
||||||
|
* Gets the texture previously set via gdk_gl_texture_builder_set_update_texture() or
|
||||||
|
* %NULL if none was set.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): The texture
|
||||||
|
*
|
||||||
|
* Since: 4.12
|
||||||
|
*/
|
||||||
|
GdkTexture *
|
||||||
|
gdk_gl_texture_builder_get_update_texture (GdkGLTextureBuilder *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self), NULL);
|
||||||
|
|
||||||
|
return self->update_texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_gl_texture_builder_set_update_texture: (attributes org.gdk.Method.set_property=update_texture)
|
||||||
|
* @self: a `GdkGLTextureBuilder`
|
||||||
|
* @texture: (nullable): the texture to update
|
||||||
|
*
|
||||||
|
* Sets the texture to be updated by this texture. See
|
||||||
|
* [method@Gdk.GLTextureBuilder.set_update_region] for an explanation.
|
||||||
|
*
|
||||||
|
* Since: 4.12
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gdk_gl_texture_builder_set_update_texture (GdkGLTextureBuilder *self,
|
||||||
|
GdkTexture *texture)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self));
|
||||||
|
g_return_if_fail (texture == NULL || GDK_IS_TEXTURE (texture));
|
||||||
|
|
||||||
|
if (!g_set_object (&self->update_texture, texture))
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UPDATE_TEXTURE]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_gl_texture_builder_get_update_region: (attributes org.gdk.Method.get_property=update_region)
|
||||||
|
* @self: a `GdkGLTextureBuilder`
|
||||||
|
*
|
||||||
|
* Gets the region previously set via gdk_gl_texture_builder_set_update_region() or
|
||||||
|
* %NULL if none was set.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): The region
|
||||||
|
*
|
||||||
|
* Since: 4.12
|
||||||
|
*/
|
||||||
|
cairo_region_t *
|
||||||
|
gdk_gl_texture_builder_get_update_region (GdkGLTextureBuilder *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self), NULL);
|
||||||
|
|
||||||
|
return self->update_region;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_gl_texture_builder_set_update_region: (attributes org.gdk.Method.set_property=update_region)
|
||||||
|
* @self: a `GdkGLTextureBuilder`
|
||||||
|
* @region: (nullable): the region to update
|
||||||
|
*
|
||||||
|
* Sets the region to be updated by this texture. Together with
|
||||||
|
* [property@Gdk.GLTextureBuilder:update-texture] this describes an
|
||||||
|
* update of a previous texture.
|
||||||
|
*
|
||||||
|
* When rendering animations of large textures, it is possible that
|
||||||
|
* consecutive textures are only updating contents in parts of the texture.
|
||||||
|
* It is then possible to describe this update via these two properties,
|
||||||
|
* so that GTK can avoid rerendering parts that did not change.
|
||||||
|
*
|
||||||
|
* An example would be a screen recording where only the mouse pointer moves.
|
||||||
|
*
|
||||||
|
* Since: 4.12
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gdk_gl_texture_builder_set_update_region (GdkGLTextureBuilder *self,
|
||||||
|
cairo_region_t *region)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self));
|
||||||
|
|
||||||
|
if (self->update_region == region)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_clear_pointer (&self->update_region, cairo_region_destroy);
|
||||||
|
|
||||||
|
if (region)
|
||||||
|
self->update_region = cairo_region_reference (region);
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UPDATE_REGION]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gdk_gl_texture_builder_build:
|
* gdk_gl_texture_builder_build:
|
||||||
* @self: a `GdkGLTextureBuilder`
|
* @self: a `GdkGLTextureBuilder`
|
||||||
|
|||||||
@@ -23,9 +23,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@@ -78,6 +76,18 @@ GDK_AVAILABLE_IN_4_12
|
|||||||
void gdk_gl_texture_builder_set_sync (GdkGLTextureBuilder *self,
|
void gdk_gl_texture_builder_set_sync (GdkGLTextureBuilder *self,
|
||||||
gpointer sync);
|
gpointer sync);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_4_12
|
||||||
|
GdkTexture * gdk_gl_texture_builder_get_update_texture (GdkGLTextureBuilder *self) G_GNUC_PURE;
|
||||||
|
GDK_AVAILABLE_IN_4_12
|
||||||
|
void gdk_gl_texture_builder_set_update_texture (GdkGLTextureBuilder *self,
|
||||||
|
GdkTexture *texture);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_4_12
|
||||||
|
cairo_region_t * gdk_gl_texture_builder_get_update_region (GdkGLTextureBuilder *self) G_GNUC_PURE;
|
||||||
|
GDK_AVAILABLE_IN_4_12
|
||||||
|
void gdk_gl_texture_builder_set_update_region (GdkGLTextureBuilder *self,
|
||||||
|
cairo_region_t *region);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_4_12
|
GDK_AVAILABLE_IN_4_12
|
||||||
GdkTexture * gdk_gl_texture_builder_build (GdkGLTextureBuilder *self,
|
GdkTexture * gdk_gl_texture_builder_build (GdkGLTextureBuilder *self,
|
||||||
GDestroyNotify destroy,
|
GDestroyNotify destroy,
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkenums.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdktexture.h>
|
#include <gdk/gdktexture.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include "gdkmonitorprivate.h"
|
#include "gdkmonitorprivate.h"
|
||||||
#include "gdkdisplay.h"
|
#include "gdkdisplay.h"
|
||||||
#include "gdkenumtypes.h"
|
#include "gdkenumtypes.h"
|
||||||
|
#include "gdkrectangle.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GdkMonitor:
|
* GdkMonitor:
|
||||||
|
|||||||
@@ -25,8 +25,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdkrectangle.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* GDK - The GIMP Drawing Kit
|
/* GDK - The GIMP Drawing Kit
|
||||||
* Copyright (C) 2000 Red Hat, Inc.
|
* Copyright (C) 2000 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -18,14 +18,11 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gio/gio.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
GIOStream * gdk_pipe_io_stream_new (void);
|
GIOStream * gdk_pipe_io_stream_new (void);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -28,12 +28,8 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <cairo.h>
|
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
#include <gdk/gdktexture.h>
|
|
||||||
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "gdkpopuplayout.h"
|
#include "gdkpopuplayout.h"
|
||||||
|
|
||||||
|
#include "gdkrectangle.h"
|
||||||
#include "gdksurface.h"
|
#include "gdksurface.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -22,9 +22,7 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gdkversionmacros.h"
|
#include "version/gdkversionmacros.h"
|
||||||
#include "gdkframeclockprivate.h"
|
#include "gdkframeclockprivate.h"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -1530,6 +1530,9 @@ gdk_surface_freeze_updates (GdkSurface *surface)
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||||
|
|
||||||
|
if (GDK_DEBUG_CHECK (NO_VSYNC))
|
||||||
|
return;
|
||||||
|
|
||||||
surface->update_freeze_count++;
|
surface->update_freeze_count++;
|
||||||
if (surface->update_freeze_count == 1)
|
if (surface->update_freeze_count == 1)
|
||||||
_gdk_frame_clock_uninhibit_freeze (surface->frame_clock);
|
_gdk_frame_clock_uninhibit_freeze (surface->frame_clock);
|
||||||
@@ -1562,6 +1565,9 @@ gdk_surface_thaw_updates (GdkSurface *surface)
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GDK_IS_SURFACE (surface));
|
g_return_if_fail (GDK_IS_SURFACE (surface));
|
||||||
|
|
||||||
|
if (GDK_DEBUG_CHECK (NO_VSYNC))
|
||||||
|
return;
|
||||||
|
|
||||||
g_return_if_fail (surface->update_freeze_count > 0);
|
g_return_if_fail (surface->update_freeze_count > 0);
|
||||||
|
|
||||||
if (--surface->update_freeze_count == 0)
|
if (--surface->update_freeze_count == 0)
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkevents.h>
|
#include <gdk/gdkevents.h>
|
||||||
#include <gdk/gdkframeclock.h>
|
#include <gdk/gdkframeclock.h>
|
||||||
|
|||||||
@@ -282,6 +282,8 @@ gdk_texture_dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
GdkTexture *self = GDK_TEXTURE (object);
|
GdkTexture *self = GDK_TEXTURE (object);
|
||||||
|
|
||||||
|
g_clear_pointer (&self->diff_to_previous, cairo_region_destroy);
|
||||||
|
|
||||||
gdk_texture_clear_render_data (self);
|
gdk_texture_clear_render_data (self);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gdk_texture_parent_class)->dispose (object);
|
G_OBJECT_CLASS (gdk_texture_parent_class)->dispose (object);
|
||||||
@@ -671,7 +673,49 @@ gdk_texture_do_download (GdkTexture *texture,
|
|||||||
guchar *data,
|
guchar *data,
|
||||||
gsize stride)
|
gsize stride)
|
||||||
{
|
{
|
||||||
GDK_TEXTURE_GET_CLASS (texture)->download (texture, format, data,stride);
|
GDK_TEXTURE_GET_CLASS (texture)->download (texture, format, data, stride);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gdk_texture_diff (GdkTexture *self,
|
||||||
|
GdkTexture *other,
|
||||||
|
cairo_region_t *region)
|
||||||
|
{
|
||||||
|
if (self == other)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (self->previous_texture == other &&
|
||||||
|
g_atomic_pointer_get (&other->next_texture) == self)
|
||||||
|
{
|
||||||
|
cairo_region_union (region, self->diff_to_previous);
|
||||||
|
}
|
||||||
|
else if (other->previous_texture == self &&
|
||||||
|
g_atomic_pointer_get (&self->next_texture) == other)
|
||||||
|
{
|
||||||
|
cairo_region_union (region, other->diff_to_previous);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cairo_region_union_rectangle (region,
|
||||||
|
&(cairo_rectangle_int_t) {
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
MAX (self->width, other->width),
|
||||||
|
MAX (self->height, other->height)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gdk_texture_set_diff (GdkTexture *self,
|
||||||
|
GdkTexture *previous,
|
||||||
|
cairo_region_t *diff)
|
||||||
|
{
|
||||||
|
g_assert (self->diff_to_previous == NULL);
|
||||||
|
|
||||||
|
self->previous_texture = previous;
|
||||||
|
self->diff_to_previous = diff;
|
||||||
|
g_atomic_pointer_set (&previous->next_texture, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_surface_t *
|
cairo_surface_t *
|
||||||
|
|||||||
@@ -22,8 +22,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,6 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
#include <gdk/gdkenums.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|||||||
@@ -21,6 +21,12 @@ struct _GdkTexture
|
|||||||
gpointer render_key;
|
gpointer render_key;
|
||||||
gpointer render_data;
|
gpointer render_data;
|
||||||
GDestroyNotify render_notify;
|
GDestroyNotify render_notify;
|
||||||
|
|
||||||
|
/* for diffing swapchain-like textures.
|
||||||
|
* Links are only valid if both textures agree on them */
|
||||||
|
gpointer next_texture; /* atomic, no reference, may be invalid pointer */
|
||||||
|
gpointer previous_texture; /* no reference, may be invalid pointer */
|
||||||
|
cairo_region_t *diff_to_previous;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkTextureClass {
|
struct _GdkTextureClass {
|
||||||
@@ -42,6 +48,14 @@ void gdk_texture_do_download (GdkTexture
|
|||||||
GdkMemoryFormat format,
|
GdkMemoryFormat format,
|
||||||
guchar *data,
|
guchar *data,
|
||||||
gsize stride);
|
gsize stride);
|
||||||
|
void gdk_texture_diff (GdkTexture *self,
|
||||||
|
GdkTexture *other,
|
||||||
|
cairo_region_t *region);
|
||||||
|
|
||||||
|
void gdk_texture_set_diff (GdkTexture *self,
|
||||||
|
GdkTexture *previous,
|
||||||
|
cairo_region_t *diff);
|
||||||
|
|
||||||
gboolean gdk_texture_set_render_data (GdkTexture *self,
|
gboolean gdk_texture_set_render_data (GdkTexture *self,
|
||||||
gpointer key,
|
gpointer key,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
|
|||||||
@@ -22,9 +22,8 @@
|
|||||||
#error "Only <gdk/gdk.h> can be included directly."
|
#error "Only <gdk/gdk.h> can be included directly."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdkmonitor.h>
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
#include <gdk/gdkmonitor.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdk/gdktypes.h>
|
#include <gdk/gdktypes.h>
|
||||||
#include <gdk/gdkversionmacros.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,8 @@
|
|||||||
* (or GTK). One such setting is what windowing API backend is in use.
|
* (or GTK). One such setting is what windowing API backend is in use.
|
||||||
*/
|
*/
|
||||||
#include <gdk/gdkconfig.h>
|
#include <gdk/gdkconfig.h>
|
||||||
|
#include <gdk/gdkenums.h>
|
||||||
|
#include <gdk/version/gdkversionmacros.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -1,324 +0,0 @@
|
|||||||
/* gdkversionmacros.h - version boundaries checks
|
|
||||||
* Copyright (C) 2012 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined (__GDK_H_INSIDE__) && !defined (__GTK_CSS_H_INSIDE__) && !defined (GTK_COMPILATION) && !defined (GTK_CSS_COMPILATION)
|
|
||||||
#error "Only <gdk/gdk.h> can be included directly."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __GDK_VERSION_MACROS_H__
|
|
||||||
#define __GDK_VERSION_MACROS_H__
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_MAJOR_VERSION:
|
|
||||||
*
|
|
||||||
* The major version component of the library's version, e.g. "1" for "1.2.3".
|
|
||||||
*/
|
|
||||||
#define GDK_MAJOR_VERSION (@GTK_MAJOR_VERSION@)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_MINOR_VERSION:
|
|
||||||
*
|
|
||||||
* The minor version component of the library's version, e.g. "2" for "1.2.3".
|
|
||||||
*/
|
|
||||||
#define GDK_MINOR_VERSION (@GTK_MINOR_VERSION@)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_MICRO_VERSION:
|
|
||||||
*
|
|
||||||
* The micro version component of the library's version, e.g. "3" for "1.2.3".
|
|
||||||
*/
|
|
||||||
#define GDK_MICRO_VERSION (@GTK_MICRO_VERSION@)
|
|
||||||
|
|
||||||
#ifndef _GDK_EXTERN
|
|
||||||
#define _GDK_EXTERN extern
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_DISABLE_DEPRECATION_WARNINGS:
|
|
||||||
*
|
|
||||||
* A macro that should be defined before including the `gdk.h` header.
|
|
||||||
*
|
|
||||||
* If this symbol is defined, no compiler warnings will be produced for
|
|
||||||
* uses of deprecated GDK and GTK APIs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef GDK_DISABLE_DEPRECATION_WARNINGS
|
|
||||||
#define GDK_DEPRECATED _GDK_EXTERN
|
|
||||||
#define GDK_DEPRECATED_FOR(f) _GDK_EXTERN
|
|
||||||
#define GDK_UNAVAILABLE(maj,min) _GDK_EXTERN
|
|
||||||
#else
|
|
||||||
#define GDK_DEPRECATED G_DEPRECATED _GDK_EXTERN
|
|
||||||
#define GDK_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _GDK_EXTERN
|
|
||||||
#define GDK_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* XXX: Every new stable minor release bump should add a macro here */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_0:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.0 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_0 (G_ENCODE_VERSION (4, 0))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_2:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.2 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: 4.2
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_2 (G_ENCODE_VERSION (4, 2))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_4:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.4 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: 4.4
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_4 (G_ENCODE_VERSION (4, 4))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_6:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.6 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: 4.6
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_6 (G_ENCODE_VERSION (4, 6))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_8:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.8 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: 4.8
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_8 (G_ENCODE_VERSION (4, 8))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_10:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.10 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: 4.10
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_10 (G_ENCODE_VERSION (4, 10))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_4_12:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the 4.12 version of GDK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: 4.12
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_4_12 (G_ENCODE_VERSION (4, 12))
|
|
||||||
|
|
||||||
|
|
||||||
/* evaluates to the current stable version; for development cycles,
|
|
||||||
* this means the next stable target, with a hard backstop to the
|
|
||||||
* beginning of the stable series
|
|
||||||
*/
|
|
||||||
#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2)
|
|
||||||
# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION + 1))
|
|
||||||
#elif G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION) > GDK_VERSION_4_0
|
|
||||||
# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION))
|
|
||||||
#else
|
|
||||||
# define GDK_VERSION_CUR_STABLE GDK_VERSION_4_0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* evaluates to the previous stable version, with a hard backstop
|
|
||||||
* to the beginning of the stable series
|
|
||||||
*/
|
|
||||||
#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2)
|
|
||||||
# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 1))
|
|
||||||
#elif GDK_MAJOR_VERSION >= 4 && GDK_MINOR_VERSION > 2
|
|
||||||
# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 2))
|
|
||||||
#else
|
|
||||||
# define GDK_VERSION_PREV_STABLE GDK_VERSION_4_0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_MIN_REQUIRED:
|
|
||||||
*
|
|
||||||
* A macro that should be defined by the user prior to including
|
|
||||||
* the `gdk.h` header.
|
|
||||||
*
|
|
||||||
* The definition should be one of the predefined GDK version
|
|
||||||
* macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,...
|
|
||||||
*
|
|
||||||
* This macro defines the lower bound for the GDK API to use.
|
|
||||||
*
|
|
||||||
* If a function has been deprecated in a newer version of GDK,
|
|
||||||
* it is possible to use this symbol to avoid the compiler warnings
|
|
||||||
* without disabling warning for every deprecated function.
|
|
||||||
*/
|
|
||||||
#ifndef GDK_VERSION_MIN_REQUIRED
|
|
||||||
# define GDK_VERSION_MIN_REQUIRED (GDK_VERSION_CUR_STABLE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_MAX_ALLOWED:
|
|
||||||
*
|
|
||||||
* A macro that should be defined by the user prior to including
|
|
||||||
* the `gdk.h` header.
|
|
||||||
*
|
|
||||||
* The definition should be one of the predefined GDK version
|
|
||||||
* macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,...
|
|
||||||
*
|
|
||||||
* This macro defines the upper bound for the GDK API to use.
|
|
||||||
*
|
|
||||||
* If a function has been introduced in a newer version of GDK,
|
|
||||||
* it is possible to use this symbol to get compiler warnings when
|
|
||||||
* trying to use that function.
|
|
||||||
*/
|
|
||||||
#ifndef GDK_VERSION_MAX_ALLOWED
|
|
||||||
# if GDK_VERSION_MIN_REQUIRED > GDK_VERSION_PREV_STABLE
|
|
||||||
# define GDK_VERSION_MAX_ALLOWED GDK_VERSION_MIN_REQUIRED
|
|
||||||
# else
|
|
||||||
# define GDK_VERSION_MAX_ALLOWED GDK_VERSION_CUR_STABLE
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* sanity checks */
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_MIN_REQUIRED
|
|
||||||
# error "GDK_VERSION_MAX_ALLOWED must be >= GDK_VERSION_MIN_REQUIRED"
|
|
||||||
#endif
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED < GDK_VERSION_4_0
|
|
||||||
# error "GDK_VERSION_MIN_REQUIRED must be >= GDK_VERSION_4_0"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define GDK_AVAILABLE_IN_ALL _GDK_EXTERN
|
|
||||||
|
|
||||||
/* XXX: Every new stable minor release should add a set of macros here */
|
|
||||||
|
|
||||||
/* This is not really necessary for 4.0, since there can't be an
|
|
||||||
* earlier version, and there are no deprecated symbols. We just
|
|
||||||
* include it for completeness, and because it's easier to copy
|
|
||||||
* this stanza every time a new development cycle starts.
|
|
||||||
*/
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_0
|
|
||||||
# define GDK_AVAILABLE_IN_4_0 GDK_UNAVAILABLE(4, 0)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_0 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_0
|
|
||||||
# define GDK_DEPRECATED_IN_4_0 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_0_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_0 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_0_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_2
|
|
||||||
# define GDK_AVAILABLE_IN_4_2 GDK_UNAVAILABLE(4, 2)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_2 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_2
|
|
||||||
# define GDK_DEPRECATED_IN_4_2 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_2_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_2 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_2_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_4
|
|
||||||
# define GDK_AVAILABLE_IN_4_4 GDK_UNAVAILABLE(4, 4)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_4 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_4
|
|
||||||
# define GDK_DEPRECATED_IN_4_4 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_4_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_4 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_4_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_6
|
|
||||||
# define GDK_AVAILABLE_IN_4_6 GDK_UNAVAILABLE(4, 6)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_6 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_6
|
|
||||||
# define GDK_DEPRECATED_IN_4_6 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_6_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_6 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_6_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_8
|
|
||||||
# define GDK_AVAILABLE_IN_4_8 GDK_UNAVAILABLE(4, 8)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_8 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_8
|
|
||||||
# define GDK_DEPRECATED_IN_4_8 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_8_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_8 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_8_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_10
|
|
||||||
# define GDK_AVAILABLE_IN_4_10 GDK_UNAVAILABLE(4, 10)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_10 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_10
|
|
||||||
# define GDK_DEPRECATED_IN_4_10 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_10_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_10 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_10_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_4_12
|
|
||||||
# define GDK_AVAILABLE_IN_4_12 GDK_UNAVAILABLE(4, 12)
|
|
||||||
#else
|
|
||||||
# define GDK_AVAILABLE_IN_4_12 _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_12
|
|
||||||
# define GDK_DEPRECATED_IN_4_12 GDK_DEPRECATED
|
|
||||||
# define GDK_DEPRECATED_IN_4_12_FOR(f) GDK_DEPRECATED_FOR(f)
|
|
||||||
#else
|
|
||||||
# define GDK_DEPRECATED_IN_4_12 _GDK_EXTERN
|
|
||||||
# define GDK_DEPRECATED_IN_4_12_FOR(f) _GDK_EXTERN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __GDK_VERSION_MACROS_H__ */
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user