diff -Nru gtk4-4.12.5+ds/.clang-format gtk4-4.14.1+ds/.clang-format --- gtk4-4.12.5+ds/.clang-format 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.clang-format 2024-03-17 00:52:15.000000000 +0000 @@ -1,4 +1,4 @@ -# See https://wiki.apertis.org/Guidelines/Coding_conventions#Code_formatting +# See https://www.apertis.org/policies/coding_conventions/#code-formatting BasedOnStyle: GNU AlwaysBreakAfterDefinitionReturnType: All BreakBeforeBinaryOperators: None Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/.gitlab-ci/.fedora.Dockerfile.swp and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/.gitlab-ci/.fedora.Dockerfile.swp differ diff -Nru gtk4-4.12.5+ds/.gitlab-ci/fedora.Dockerfile gtk4-4.14.1+ds/.gitlab-ci/fedora.Dockerfile --- gtk4-4.12.5+ds/.gitlab-ci/fedora.Dockerfile 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/fedora.Dockerfile 2024-03-17 00:52:15.000000000 +0000 @@ -1,9 +1,7 @@ -FROM fedora:38 +FROM fedora:39 RUN dnf -y install \ adwaita-icon-theme \ - atk-devel \ - at-spi2-atk-devel \ avahi-gobject-devel \ cairo-devel \ cairo-gobject-devel \ @@ -18,7 +16,6 @@ dejavu-sans-mono-fonts \ desktop-file-utils \ diffutils \ - docbook-style-xsl \ elfutils-libelf-devel \ expat-devel \ fribidi-devel \ diff -Nru gtk4-4.12.5+ds/.gitlab-ci/flatpak-build.sh gtk4-4.14.1+ds/.gitlab-ci/flatpak-build.sh --- gtk4-4.12.5+ds/.gitlab-ci/flatpak-build.sh 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/flatpak-build.sh 2024-03-17 00:52:15.000000000 +0000 @@ -19,6 +19,7 @@ --buildtype=debugoptimized \ -Dx11-backend=true \ -Dwayland-backend=true \ + -Dvulkan=disabled \ -Dbuild-tests=false \ -Dbuild-testsuite=false \ -Dbuild-examples=false \ @@ -27,7 +28,7 @@ -Ddemo-profile=devel \ _flatpak_build -flatpak build ${builddir} ninja -C _flatpak_build install +flatpak build --env=CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA ${builddir} ninja -C _flatpak_build install flatpak-builder \ --user --disable-rofiles-fuse \ diff -Nru gtk4-4.12.5+ds/.gitlab-ci/meson-html-report.py gtk4-4.14.1+ds/.gitlab-ci/meson-html-report.py --- gtk4-4.12.5+ds/.gitlab-ci/meson-html-report.py 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/meson-html-report.py 2024-03-17 00:52:15.000000000 +0000 @@ -324,7 +324,7 @@ units.append(unit) report = {} -report['date'] = datetime.datetime.utcnow() +report['date'] = datetime.datetime.now(datetime.UTC) report['locale_date'] = report['date'].strftime("%c") report['project_name'] = args.project_name report['backend'] = args.backend diff -Nru gtk4-4.12.5+ds/.gitlab-ci/meson-junit-report.py gtk4-4.14.1+ds/.gitlab-ci/meson-junit-report.py --- gtk4-4.12.5+ds/.gitlab-ci/meson-junit-report.py 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/meson-junit-report.py 2024-03-17 00:52:15.000000000 +0000 @@ -44,7 +44,7 @@ testsuites = ET.Element('testsuites') testsuites.set('id', '{}/{}'.format(args.job_id, args.branch)) testsuites.set('package', args.project_name) -testsuites.set('timestamp', datetime.datetime.utcnow().isoformat(timespec='minutes')) +testsuites.set('timestamp', datetime.datetime.now(datetime.UTC).isoformat(timespec='minutes')) suites = {} for line in args.infile: diff -Nru gtk4-4.12.5+ds/.gitlab-ci/run-tests.sh gtk4-4.14.1+ds/.gitlab-ci/run-tests.sh --- gtk4-4.12.5+ds/.gitlab-ci/run-tests.sh 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/run-tests.sh 2024-03-17 00:52:15.000000000 +0000 @@ -1,28 +1,31 @@ #!/bin/bash -set +x +set -x set +e srcdir=$( pwd ) builddir=$1 -backend=$2 +setup=$2 +suite=$3 multiplier=${MESON_TEST_TIMEOUT_MULTIPLIER:-1} # Ignore memory leaks lower in dependencies export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:detect_leaks=0:allocator_may_return_null=1 export G_SLICE=always-malloc -case "${backend}" in - x11) +case "${setup}" in + x11*) xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \ meson test -C ${builddir} \ --quiet \ --timeout-multiplier "${multiplier}" \ --print-errorlogs \ - --setup=${backend} \ - --suite=gtk \ + --setup=${setup} \ + --suite=${suite//,/ --suite=} \ --no-suite=failing \ + --no-suite=${setup}_failing \ --no-suite=flaky \ + --no-suite=headless \ --no-suite=gsk-compare-broadway # Store the exit code for the CI run, but always @@ -41,18 +44,19 @@ --quiet \ --timeout-multiplier "${multiplier}" \ --print-errorlogs \ - --setup=${backend} \ - --suite=gtk \ + --setup=${setup} \ + --suite=${suite//,/ --suite=} \ --no-suite=failing \ + --no-suite=${setup}_failing \ --no-suite=flaky \ - --no-suite=${backend}_failing \ + --no-suite=headless \ --no-suite=gsk-compare-broadway exit_code=$? kill ${compositor} ;; - broadway) + broadway*) export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" ${builddir}/gdk/broadway/gtk4-broadwayd :5 & @@ -63,17 +67,19 @@ --quiet \ --timeout-multiplier "${multiplier}" \ --print-errorlogs \ - --setup=${backend} \ - --suite=gtk \ + --setup=${setup} \ + --suite=${suite//,/ --suite=} \ --no-suite=failing \ + --no-suite=${setup}_failing \ --no-suite=flaky \ + --no-suite=headless \ --no-suite=gsk-compare-opengl kill ${server} ;; *) - echo "Failed to add ${backend} to .gitlab-ci/run-tests.sh" + echo "Failed to add ${setup} to .gitlab-ci/run-tests.sh" exit 1 ;; @@ -83,17 +89,17 @@ $srcdir/.gitlab-ci/meson-junit-report.py \ --project-name=gtk \ - --backend="${backend}" \ + --backend="${setup}" \ --job-id="${CI_JOB_NAME}" \ - --output="report-${backend}.xml" \ - "meson-logs/testlog-${backend}.json" + --output="report-${setup}.xml" \ + "meson-logs/testlog-${setup}.json" $srcdir/.gitlab-ci/meson-html-report.py \ --project-name=gtk \ - --backend="${backend}" \ + --backend="${setup}" \ --job-id="${CI_JOB_NAME}" \ - --reftest-output-dir="testsuite/reftests/output/${backend}" \ - --output="report-${backend}.html" \ - "meson-logs/testlog-${backend}.json" + --reftest-output-dir="testsuite/reftests/output/${setup}" \ + --output="report-${setup}.html" \ + "meson-logs/testlog-${setup}.json" exit $exit_code diff -Nru gtk4-4.12.5+ds/.gitlab-ci/show-info-macos.sh gtk4-4.14.1+ds/.gitlab-ci/show-info-macos.sh --- gtk4-4.12.5+ds/.gitlab-ci/show-info-macos.sh 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/show-info-macos.sh 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,13 @@ +#!/bin/bash + +set -eux -o pipefail + +xcodebuild -version || : + +if [ -z "$SDKROOT" ]; then + xcodebuild -showsdks || : +else + echo "SDKROOT = $SDKROOT" +fi + +system_profiler SPSoftwareDataType || : diff -Nru gtk4-4.12.5+ds/.gitlab-ci/show-info-osx.sh gtk4-4.14.1+ds/.gitlab-ci/show-info-osx.sh --- gtk4-4.12.5+ds/.gitlab-ci/show-info-osx.sh 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/show-info-osx.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -#!/bin/bash - -set -eux -o pipefail - -xcodebuild -version || : -xcodebuild -showsdks || : - -system_profiler SPSoftwareDataType || : diff -Nru gtk4-4.12.5+ds/.gitlab-ci/test-msvc.bat gtk4-4.14.1+ds/.gitlab-ci/test-msvc.bat --- gtk4-4.12.5+ds/.gitlab-ci/test-msvc.bat 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/test-msvc.bat 2024-03-17 00:52:15.000000000 +0000 @@ -6,7 +6,7 @@ :: FIXME: make warnings fatal pip3 install --upgrade --user meson~=0.64 || goto :error -meson setup -Dbackend_max_links=1 -Ddebug=false -Dmedia-gstreamer=disabled _build || goto :error +meson setup -Dbackend_max_links=1 -Ddebug=false -Dmedia-gstreamer=disabled -Dvulkan=disabled _build || goto :error ninja -C _build || goto :error goto :EOF diff -Nru gtk4-4.12.5+ds/.gitlab-ci/test-msys2.sh gtk4-4.14.1+ds/.gitlab-ci/test-msys2.sh --- gtk4-4.12.5+ds/.gitlab-ci/test-msys2.sh 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci/test-msys2.sh 2024-03-17 00:52:15.000000000 +0000 @@ -33,7 +33,8 @@ mingw-w64-$MSYS2_ARCH-gst-plugins-bad-libs \ mingw-w64-$MSYS2_ARCH-shared-mime-info \ mingw-w64-$MSYS2_ARCH-python-gobject \ - mingw-w64-$MSYS2_ARCH-shaderc + mingw-w64-$MSYS2_ARCH-shaderc \ + mingw-w64-$MSYS2_ARCH-vulkan mkdir -p _ccache export CCACHE_BASEDIR="$(pwd)" @@ -47,7 +48,6 @@ -Dx11-backend=false \ -Dwayland-backend=false \ -Dwin32-backend=true \ - -Dvulkan=disabled \ -Dintrospection=enabled \ -Dgtk:werror=true \ _build diff -Nru gtk4-4.12.5+ds/.gitlab-ci.yml gtk4-4.14.1+ds/.gitlab-ci.yml --- gtk4-4.12.5+ds/.gitlab-ci.yml 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/.gitlab-ci.yml 2024-03-17 00:52:15.000000000 +0000 @@ -26,7 +26,7 @@ BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true" FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-testsuite=true -Dintrospection=enabled" MESON_TEST_TIMEOUT_MULTIPLIER: 3 - FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v48" + FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v49" workflow: rules: @@ -66,7 +66,8 @@ junit: - "${CI_PROJECT_DIR}/_build/report-x11.xml" - "${CI_PROJECT_DIR}/_build/report-wayland.xml" - - "${CI_PROJECT_DIR}/_build/report-wayland_gles.xml" + - "${CI_PROJECT_DIR}/_build/report-wayland_gl.xml" + - "${CI_PROJECT_DIR}/_build/report-wayland_gles2.xml" - "${CI_PROJECT_DIR}/_build/report-broadway.xml" name: "gtk-${CI_COMMIT_REF_NAME}" paths: @@ -77,6 +78,7 @@ - "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*/*.node" - "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*" - "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png" + - "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.node" - "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap" - "${CI_PROJECT_DIR}/_build/testsuite/headless/*/*.log" - "${CI_PROJECT_DIR}/_build_hello/meson-logs" @@ -103,8 +105,9 @@ ${FEATURE_FLAGS} _build - meson compile -C _build - - .gitlab-ci/run-tests.sh _build wayland - - .gitlab-ci/run-tests.sh _build wayland_gles + - .gitlab-ci/run-tests.sh _build x11 gtk + # only repeat test runs that are likely affected by test setups + - .gitlab-ci/run-tests.sh _build wayland_gl gtk:gdk,gtk:gsk-gl release-build: extends: .build-fedora-default @@ -129,7 +132,9 @@ - meson install -C _build - 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 - - .gitlab-ci/run-tests.sh _build x11 + - .gitlab-ci/run-tests.sh _build wayland gtk + # only repeat test runs that are likely affected by test setups + - .gitlab-ci/run-tests.sh _build wayland_gles2 gtk:gdk,gtk:gsk-gl fedora-clang: extends: .build-fedora-default @@ -205,51 +210,54 @@ paths: - "${CI_PROJECT_DIR}/_build/gtkdll.tar.gz" -macos-x86_64: +macos: rules: # Do not run in forks as the runner is not available there. - - if: $CI_PROJECT_NAMESPACE == "GNOME" + # (except for dehesselle who maintains the runner) + - if: $CI_PROJECT_NAMESPACE != "GNOME" && $CI_PROJECT_NAMESPACE != "dehesselle" + when: never + - if: $RUNNER == "macosintel" + variables: + SDKROOT: /opt/sdks/MacOSX10.13.4.sdk + NINJA_PKG: $CI_API_V4_URL/projects/30745/packages/generic/ninja_macos/v1.11.1.1+9/ninja-1.11.1.1-cp38-cp38-macosx_11_0_x86_64.whl + when: manual + allow_failure: true + - if: $RUNNER == "macosarm" + variables: + SDKROOT: /opt/sdks/MacOSX11.3.sdk + NINJA_PKG: ninja==1.11.1.1 stage: build + parallel: + matrix: + - RUNNER: [ "macosintel", "macosarm" ] tags: - - macosintel + - ${RUNNER} needs: [] variables: - MESON_FORCE_BACKTRACKE: 1 + EXTRA_MESON_FLAGS: "" + BACKEND_FLAGS: "-Dx11-backend=false -Dbroadway-backend=true" + FEATURE_FLAGS: "-Dmedia-gstreamer=disabled -Dintrospection=enabled -Dgobject-introspection:werror=false" TMPDIR: /Users/Shared/work/tmp - SDKROOT: /opt/sdks/MacOSX10.13.4.sdk PIP_CACHE_DIR: /Users/Shared/build/cache PIPENV_CACHE_DIR: $PIP_CACHE_DIR PYTHONPYCACHEPREFIX: $PIP_CACHE_DIR - EXTRA_MESON_FLAGS: "-Dgobject-introspection:werror=false" before_script: - # Not using ccache on purpose as it accelerates the build so much that it - # can trigger race conditions in the gobject-introspection subproject. - - bash .gitlab-ci/show-info-osx.sh - - /opt/macports/bin/python3.10 -m venv .venv - - ln -s /opt/cmake/CMake.app/Contents/bin/cmake .venv/bin - - ln -s /opt/pkg-config/bin/pkg-config .venv/bin - - ln -s /opt/bison/bin/bison .venv/bin + - .gitlab-ci/show-info-macos.sh + - python3 -m venv .venv + # Building the introspection feature requires pkg-config and bison. + - curl -L $CI_API_V4_URL/projects/30437/packages/generic/pkgconfig/v0.29.2+10/pkg-config-0.29.2+10_$(uname -m).tar.xz | tar -C .venv -xJ + - curl -L $CI_API_V4_URL/projects/30438/packages/generic/bison/v3.8.2+3/bison-3.8.2+3_$(uname -m).tar.xz | tar -C .venv -xJ - source .venv/bin/activate - - pip3 install meson==1.2.0 - - pip3 install ninja==1.11.1 - - pip3 install /Users/Shared/build/pkgs/PyGObject-3.44.0-cp310-cp310-macosx_10_13_x86_64.whl - /Users/Shared/build/pkgs/pycairo-1.23.0-cp310-cp310-macosx_10_13_x86_64.whl + - pip3 install meson==1.3.2 $NINJA_PKG + # We're not setting up ccache here on purpose as it accelerates the build + # so much that it triggers race conditions in the gobject-introspection + # subproject. script: - meson setup ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} - -Dx11-backend=false - -Dbroadway-backend=true - -Dmacos-backend=true - -Dmedia-gstreamer=disabled - -Dintrospection=enabled - -Dcpp_std=c++11 - -Dpixman:tests=disabled - -Dlibjpeg-turbo:simd=disabled - -Dbuild-demos=false - -Dbuild-tests=false - -Dbuild-examples=false - -Dbuild-testsuite=false + ${BACKEND_FLAGS} + ${FEATURE_FLAGS} _build - meson compile -C _build artifacts: @@ -423,13 +431,7 @@ -Df16c=disabled _build - ninja -C _build - - .gitlab-ci/run-tests.sh _build wayland - - .gitlab-ci/run-tests.sh _build wayland_gles - - .gitlab-ci/run-tests.sh _build x11 - artifacts: - when: always - paths: - - "${CI_PROJECT_DIR}/_build/meson-logs" + - .gitlab-ci/run-tests.sh _build wayland gtk reference: image: $FEDORA_IMAGE @@ -479,3 +481,4 @@ - "curl -X POST -F token=${PAGES_TRIGGER_TOKEN} -F ref=docs-gtk-org https://gitlab.gnome.org/api/v4/projects/665/trigger/pipeline" rules: - if: $CI_COMMIT_REF_NAME == "main" + diff -Nru gtk4-4.12.5+ds/CONTRIBUTING.md gtk4-4.14.1+ds/CONTRIBUTING.md --- gtk4-4.12.5+ds/CONTRIBUTING.md 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/CONTRIBUTING.md 2024-03-17 00:52:15.000000000 +0000 @@ -35,8 +35,7 @@ You should not open a new issue for security related questions. -When in doubt, send an email to the [security](mailto:security@gnome.org) -mailing list. +When in doubt, follow [security](https://security.gnome.org/). ### Bug reports @@ -244,13 +243,11 @@ code, you should always ask. If your change is minor and you've been working on GTK for a while it probably isn't necessary to ask. But when in doubt, ask. Even if your change is correct, somebody may know a - better way to do things. If you are making changes to GTK, you should - be subscribed to the [gtk-devel](https://mail.gnome.org/mailman/listinfo/gtk-devel-list) - mailing list; this is a good place to ask about intended changes. - The `#gtk` IRC channel on irc.gnome.org is also a good place to find GTK - developers to discuss changes, but if you live outside of the EU/US time - zones, an email to the gtk-devel mailing list is the most certain and - preferred method. + better way to do things. + The `gtk` [room on matrix](https://matrix.to/#/#gtk:gnome.org) is also a + good place to find GTK developers to discuss changes, but if you live + outside of the EU/US time zones, the [gtk tag on the GNOME Discourse instance](https://discourse.gnome.org/tag/gtk) + is the most certain and preferred method. 0. Ask _first_. diff -Nru gtk4-4.12.5+ds/NEWS gtk4-4.14.1+ds/NEWS --- gtk4-4.12.5+ds/NEWS 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/NEWS 2024-03-17 00:52:15.000000000 +0000 @@ -1,125 +1,493 @@ -Overview of Changes in 4.12.5, 17-01-2024 +Overview of Changes in 4.14.1, xx-xx-xxxx ========================================= -* GtkColumnView: - - Fix a crash on dispose +* GtkTextView: + - Fix a mixup of cursor and anchor when retrieving surrounding text + in input methods + +* Printing: + - Avoid accessing freed printers + +* Accessibility: + - Fix memory leaks + +* GDK: + - Rename the GDK_VULKAN_SKIP environment variable to GDK_VULKAN_DISABLE + - Add a GDK_GL_DISABLE environment variable + +* GSK: + - Rename the GSK_GPU_SKIP environment variable to GSK_GPU_DISABLE + - Speed up handling of repeated ops, which should help for text + - Speed up the inner loop of text node conversion + - Drop the glyph-align optimization flag + - ngl: Avoid reusing frames while they are in use + - Fix flickering thumbnails in nautilus + - Speed up buffer handling in both ngl and Vulkan + +* Demos: + - Skip demos using gl shaders when we're not using the gl renderer + +* Build: + - Fix some ubsan warnings + - Avoid zink in ci since it spams stderr + +* Translation updates: + Czech + German + Korean + Russian + + +Overview of Changes in 4.14.0, 12-03-2024 +========================================= + +Note: The new renderers and dmabuf support are using graphics drivers +in different ways than the old gl renderer, and trigger new driver bugs, +(see for example https://gitlab.gnome.org/GNOME/gtk/-/issues/6418 and +https://gitlab.gnome.org/GNOME/gtk/-/issues/6388). Therefore, it is +recommended to use the latest mesa release (24.x) with the new renderers. + +* GtkTextView: + - Don't snapshot children twice + - Don't blink the cursor when hidden * GtkEmojiChooser: - - Update to CLDR v44 - - Add more translations + - Fix presentation selector handling -* GtkFileDialog: - - Return an error if no file is selected - - Make closing the portal file chooser work +* GtkSnapshot: + - Fix wrong nodes with transformed shadows -* GtkDropDown: - - Fix display of the initial checkmark +* GtkIMContext: + - Make gtk_im_context_activate_osk public -* GtkShortcutsWindow: - - Reduce the minimum width +* Accessibility: + - Implement get_contents_at for all our text widgets + - Add GtkAccessibleText.get_default_attributes -* GDK: - - Make the png loader safer against overflow +* GSK: + - Don't fall back to cairo for software rendering. gl+llvmpipe is better + - Round vertical glyph position to a device pixel position if the font is hinted + - Fix problems with clip handling + - Make vulkan and ngl match their font handling + - Fix some corner-cases with offloading and clips + - Fix problem with rendering of missing glyphs in hinted fonts -* Windows: - - Use new clipboard api +* MacOs: + - Implement cursor-from-texture + +* Translation updates: + Basque + British English + French + Indonesian + Kazakh + Latvian + Lithuanian + Norwegian Bokmål + Slovenian + Spanish + Turkish + + +Overview of Changes in 4.13.9, 02-03-2024 +========================================= + +* GtkEditable: + - Fix preconditions to be not too strict + +* GtkEmojiChooser: + - Support search in the locale as well as in English + +* GtkIconTheme: + - Make gtk_icon_paintable_new_for_file support symbolics + +* GtkVideo: + - Fix a problem with cursor handling that could lead to crashes + +* Accessibility: + - Fix GetCharacterAtOffset implementation + - Add a Terminal role + - Make TextCaretMoved match gtk3 + - Support multiple levels of GtkEditable delegates + +* GSK: + - Make the node parser more flexible for text nodes + - Change the way font scaling is handled to avoid clipping + - Fix handling of missing glyphs in the new renderers + +* X11: + - Don't claim to support shadows without a compositor * Wayland: - - Fix cursor handling with graphics tablets + - Fix handling of output scales -* macOS: - - Silence secure-restore message - - Fix build on macOS < 10.13 +* Tools: + - Add a compare command to gtk4-rendernode-tool -* Translation updates +* Build: + - Fix some ubsan complaints + +* Translation updates: Basque British English Catalan - Chinese (China) - Czech + Finnish + Galician Georgian - German Hebrew Indonesian + Kazakh + Latvian Lithuanian Persian Polish - Romanian Russian Slovenian - Swedish + Spanish Turkish Ukrainian - Vietnamese -Overview of Changes in 4.12.4, 17-11-2023 +Overview of Changes in 4.13.8, 20-02-2024 ========================================= -* a11y: - - Tweak name computation for some corner cases - -* gdk: - - gl: Improve our use of GLES a bit (use vertex arrays and - GL_BGRA if available) - - Fix some errors in our memory format tables +* Accessibility: + - Add a GtkAccessibleText interface for allowing 3rd party + text widgets (notably vte) to be accessible + - Avoid duplicate accessible descriptions + - Fix GetAccessibleAtPoint -* gsk: - - gl: handle texture-scale nodes more faithfully - - gl: Fix icon padding in the atlas +* GSK: + - Avoid offscreens for disjoint containers + - Don't use the gpu renderers with llvmpipe + - Fix various rendering issues found by tests + - Allow unnormalized node bounds again + - Fix a broken case of rounded-rect intersection + - Fix handling of external textures in gpu renderers + - Make gpu renderers work with WGL on Windows -* Windows: - - Stop relying on glib for build configuration +* build: + - Allow building without dmabuf support on (old) Linux -* Tools: - - Add a --undecorated option to gtk4-rendernode-tool +* X11: + - Fix monitor enter/leave signals -* Translation updates +* Translation updates: + Basque + Brazilian Portuguese Catalan - French - Romanian + Czech + Galician + Georgian + Hebrew + Lithuanian + Persian Russian - Spanish Turkish + Ukrainian -Overview of Changes in 4.12.3, 28-09-2023 +Overview of Changes in 4.13.7, 11-02-2024 ========================================= -* GtkWindow: - - Don't assume titlebars are GtkHeaderBar +* GtkFileChooser: + - Speed up opening -* GtkTreeView: - - Fix a crash in gtk_tree_view_is_blank_at_pos +* GtkCalendar: + - Add some missing setters and getters -* printing: - - Fix some issues with the portal implementation +* Accessibility: + - Add socket support for webkit accessibility + - Implement AT-SPI text for GtkText + - Implement AT-SPI component generically + - Add an announce API * GSK: - - Some optimizations in the GL renderer - - Fix memory leaks in the Broadway renderer + - Make the ngl renderer work on macOS + - Fix a crash in the vulkan renderer + - Make nodeparser allow aliases for fonts again + - Implement cache eviction for glyph and texture caches + - Fix ngl shaders to work on GL < 4.0 + - Require GL 3.3 for the ngl renderer + - Fix problems with scaled shadows + - Fix problems with holes for underlaid subsurfaces + - Improve handling of scales and glyph cache efficiency + +* Media: + - Support dmabufs in the gstreamer backend. This allows + zero-copy video playback on Wayland when paired with + hardware video decoding + - Drop the experimental ffmpeg backend. It hasn't been + building for a year + +* Wayland: + - Commit empty frames if and double-buffered state is pending + - Fix monitor size information when using mutter without + the scale-monitor-framebuffer setting + - Clear the current tablet on tab leave, fixing a crash -* demos: - - Fix a crash in gtk4-demo +* macOS: + - Propagate unhandled input events back to the OS + +* Tools: + - Make the crash handling in gtk4-node-editor more robust * Translation updates - Basque - Brazilian Portuguese - Czech Galician Georgian - German - Hungarian - Kazakh - Lithuanian + Occitan + Turkish + + +Overview of Changes in 4.13.6, 25-01-2024 +========================================= + +This release changes the ngl renderer to be the default renderer. + +The intent of this change is to get wider testing and verify that +the new renderers are production-ready. If significant problems +show up, we will revert this change for 4.14. + +You can still override the renderer choice using the GSK_RENDERER +environment variable. + +Since ngl can handle fractional scaling much better than the old gl +renderer, we allow fractional scaling by default with gl now. If you +are using the old gl renderer (e.g. because your system is limited to +GLES2), you can disable fractional scaling by setting the GDK_DEBUG +environment variable to include the gl-no-fractional key. + +* GtkColumnView: + - Fix infinite loops in dispose + - Fix problems with weak ref cycles in GtkExpression + +* GtkListView: + - Fix some corner cases with sections during insertions and deletions + - Don't double-recycle widgets + +* GtkStack: + - Add automatic cleanup for GtkStackPage + +* GDK: + - Use standard cursor names for drag cursors + - Enable fractional scaling with gl by default + +* GSK: + - Many fixes and improvements to the unified renderers: + - Fix text rendering with the uber shader + - Fix rounding issues with fractional scales + - Fix some memory leaks + - Many text rendering fixes + - Implement subpixel positioning for glyphs + - Support custom fonts in node files + - Add tests for font rendering + - Fix drawing of repeat nodes + - Implement subpixels positioning + - Evict stale textures, glyphs and atlases from the cache + - Some fixes and improvements to the GL renderer: + - Fix problems with GLES on Nvidia + - Avoid a crash in the mask demo + - Respect opacity of the first child node in containers + - Some fixes and improvements to the fallback renderer: + - Fix drawing of repeat nodes + - Make ngl the default renderer + +* Wayland: + - Fix problems with tablet cursors + - Fix problems without seats + +* Accessibility: + - Respect a separate "show-status-shapes setting + - Fix change notification for accessible names on some widgets + +* Inspector: + - Show the git commit in devel builds + +* Tools: + - Make gtk4-node-editor autosave its contents + - Add a benchmark command to gtk4-rendernode-tool + +* Translation updates: + French + Galician + Georgian + Occitan Persian + Russian + Vietnamese + + +Overview of Changes in 4.13.5, 07-01-2024 +========================================= + +This release adds two new GSK renderers called vulkan and ngl, +that are built from the same sources. The new renderers can +handle many corner cases correctly that the current gl renderer +does not handle, and they offer advantages such as antialiasing +and supersampled gradients. + +The new renderers are still considered experimental, and GTK +will only use them if they are explicitly selected using the +GSK_RENDERER environment variable. + +As part of this work, the GSK include files have been rearranged. +It is no longer necessary to include renderer-specific headers for +ngl and vulkan (and doing so will trigger deprecation warnings), +and their constructors are always available. + +The previously available experimental GdkVulkanContext APIs and +the old Vulkan renderer have been removed. + +Vulkan is now enabled by default, and Linux distributions should +build GTK with Vulkan support. This requires the glslc shader +compiler as a new dependency. + +Vulkan is now also used for dmabuf support. + +* GtkDropdown: + - Fix display of initial selection + +* GtkShortcutsWindow: + - Make the window adapt to smaller screen widths + +* GtkTextView: + - Fix a possible NULL dereference in history + +* GDK: + - Make the png loader safer against overflows + +* GL: + - Fix some errors in handling of texture formats and mipmaps + + +Overview of Changes in 4.13.4, 30-12-2023 +========================================= + +* GtkFileDialog: + - Return an error if no file is selected + +* GtkFileLauncher: + - Add a writable property + +* GtkFileChooserNative: + - Make closing portal file dialogs work + +* GtkEmojiChooser: + - Update Emoji data to CLDR v43 + +* GtkStringList: + - Add item-type and n-itmes properties + +* Input: + - Respect GTK grabs on DND events + - Fix crossing event generation for enter/leave + +* Wayland: + - Avoid recreating wl_buffers needlessly + - Be more careful when loading cursors + +* Dmabuf: + - Add support for all Dmabuf formats + - Tweak the offload code a bit, allow offloading translucent + textures, as long as they are raised. Decline to offload + with fractional scales. + +* Accessibility: + - Add a few more accessible roles + +* GL: + - Use GLES by default + - Tweak GDK_DEBUG values. The new values are + gl-disable-gl, gl-disable-gles and gl-prefer-gl. + The gl-legacy and nograbs values have been dropped. + +* Css: + - Reduce memory consumption during theme loading + - Fix opacity handling + +* Theme: + - Refresh some of the included symbolic icons + +* MacOs: + - Silence secure-restore message + +* Build: + - Require Vulkan 1.3 + +* Translation updates: + Chinese (China) + Czech + Hebrew + Icelandic Polish - Spanish - Swedish + Russian + + +Overview of Changes in 4.13.3, 15-11-2023 +========================================= + +* GtkGraphicsOffload: A new widget to support passthrough + of dmabuf textures with subsurfaces on Wayland + +* GtkListView: + - reduce tree indentation + +* GtkInspector: + - Show more GL information + - Add a subsurface overlay + - Improve the fps overlay + +* GDK + - Allow implicit modifiers for dmabufs + - Support more dmabuf formats: NV16, NV61, NV24, NV42 + and 3-plane YUV formats + +* GSK + - Fix padding of icons in the GL atlas + - Fix handling of texture-scale nodes in cairo + - Treat texture-scale nodes more faithfully in GL + +* Accessibility: + - Tweak the accessible name computation for corner cases + +* The GTK/GDK/GSK_DEBUG environment variables now + work in productions as well as in debug builds + +* Translation updates + Catalan + French + Russian + + +Overview of Changes in 4.13.2, 22-10-2023 +========================================= + +* GtkPrintdialog: + - New async-style api to replace GtkPrintOperation + +* GtkEmojiChooser: + - Add more languages: Bengali, Hindi, Japanese, Finnish, + Thai and Norwegian bokmål + +* Accessibility: + - Fix some utf8 handling issues + +* GDK: + - Add support for dmabuf textures, with GdkDmabufTextureBuilder + - Add a few more supported memory formats for textures + +* GSK: + - Add a fast-path for masking color + - Add support for importing dmabuf textures + - Handle GLES better by using some extensions + +* Translation updates: + Catalan + Russian Turkish -Overview of Changes in 4.12.2, 20-09-2023 +Overview of Changes in 4.13.1, 28-09-2023 ========================================= * GtkTooltip: @@ -128,49 +496,95 @@ * GtkCenterLayout, GtkEntry, GtkSearchEntry: - Fix some issues with baseline handling +* GtkColorButton, GtkFontButton: + - Propagate focus-on-click + +* GtkFileChooser: + - Make "Visit file" scroll to the file + * GtkSwitch: - Respect text direction -* Theme: - - Use relative font sizes +* GtkWindow: + - Don't assume titlebars are GtkHeaderBars + +* Printing: + - Fix some problems with the portal implementation + - Add a new simple print API: GtkPrintDialog + +* Paths: + - GskPathMeasure performance has been improved + - Add custom contours for circles, rounded rectangles and rectangles + - Simplify GskPathPoint handling + - gsk_path_point_get_closest_point now returns the distance as well + - Make GskPathBuilder simplify curves + +* Input: + - Handle (some) single-key compose sequences + - Fix active state tracking with sensitivity changes and grabs * GSK: - - Make repeated gradients match between GL and cairo + - Make the repeated gradients match between GL and cairo - Make rounded rect shrinking match between Vulkan, GL and cairo - Fix parsing of text nodes with color glyphs - - Restrict an optimization to the cases where it is correct + - Restrict an optimization to the cases where it is crrect - Fix rendering of shadows with opacity + - The Vulkan renderer now requires Vulkan 1.2 + - GL: Transition gradients unpremultiplied + - GL: Fix clipping of shadows + - GL: Some optimizations + - Broadway: Fix memory leaks in the renderer + +* Wayland: + - Make activation more reliable * macOS: - Clamp damage regions to the surface size -* Windows: - - Fix missing minimize and maximize buttons +* Tools: + - gtk4-path-tool gained restrict and reverse commands + - gtk4-path-tool show and render can show control points + +* Demos: + - Add a demo for hit testing with paths + +* Build: + - Fix build problems with C++ compilers + +* Deprecations: + - gtk_window_present_with_time * Translation updates - Basque Brazilian Portuguese + British English Catalan Chinese (China) Czech Danish Dutch - Finnish + Esperanto Galician - German - Hungarian + Georgian Italian - Kazakh + Korean Latvian Lithuanian + Persian + Polish + Punjabi Slovenian - Spanish Turkish -Overview of Changes in 4.12.1, 25-08-2023 +Overview of Changes in 4.13.0, 25-08-2023 ========================================= +* GskPath, GskPathBuilder, GskPathMeasure: + Data types and APIs for path rendering. These APIs are still + considered experimental, and may change until 4.14. Please try + them out and give us feedback. Documentation can be found + here: https://docs.gtk.org/gsk4/paths.html + * GtkGridView: - Fix a crash when scrolling @@ -192,6 +606,10 @@ * GtkMenuButton: - Fix problems with focus handling - Fix problems with DND + - Make flags a settable property + +* GtkShortcutsWindow: + - Add API to build shortcuts windows programmatically * Printing - Fix the cpdb backend build @@ -205,9 +623,32 @@ * Wayland: - Fix a crash with compositors other than gnome-shell +* Deprecations: + - Remaining GtkTreeModel-related types + +* Demos: + - Add a few path demos to gtk4-demo + +* Tools: + - gtk4-path-tool provides a commandline interface for paths + * Translation updates: + Basque + Catalan + Finnish + Galician + Georgian + German + Greek + Indonesian + Kazakh + Persian Polish + Romanian + Spanish Swedish + Turkish + Ukrainian Overview of Changes in 4.12.0, 05-08-2023 @@ -397,7 +838,7 @@ - Center newly created transient windows * Vulkan: - - Add antialising for gradients + - Add antialiasing for gradients - Do less work on clipped away nodes - Redo image uploading - Support different image depths and formats @@ -1381,7 +1822,7 @@ - Event handling fixes - Fix keyboard input on popovers - Support OpenGL-based video playback - - Suport fullscreen + - Support fullscreen - Improve native filechoooser size allocation - Use CALayer and IOSurface for rendering - Use a per-monitor CVDisplayLink @@ -1778,7 +2219,7 @@ - Activate when moving focus * GtkLabel: - - Propertly ignore double underscores for mnemonics + - Properly ignore double underscores for mnemonics * GtkPopoverMenu: - Fix focus cycling @@ -2325,7 +2766,7 @@ - Set sort arrows in CSS - Set menu button arrows in CSS - Make scrollbars larger - - Supprt circular menubuttons + - Support circular menubuttons * CSS: - Implement transform-origin diff -Nru gtk4-4.12.5+ds/build-aux/meson/gen-demo-header.py gtk4-4.14.1+ds/build-aux/meson/gen-demo-header.py --- gtk4-4.12.5+ds/build-aux/meson/gen-demo-header.py 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/build-aux/meson/gen-demo-header.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 - -import os -import subprocess -import sys - -repodir = sys.argv[1] -profile = sys.argv[2] - -sys.stdout.write("/* This file is auto-generated. Do not edit. */\n") -sys.stdout.write("#pragma once\n") -sys.stdout.write("\n") -sys.stdout.write(f"#define PROFILE \"{profile}\"\n") - -short_sha = os.environ.get('CI_COMMIT_SHORT_SHA') -if short_sha is None: - cmd = ["git", "-C", repodir, "rev-parse", "--short", "HEAD"] - try: - with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: - short_sha = p.stdout.read().decode('utf-8').rstrip("\n") - except FileNotFoundError: - short_sha = '' - if profile != 'default': - short_sha = 'devel' - -sys.stdout.write(f"#define VCS_TAG \"{short_sha}\"\n") diff -Nru gtk4-4.12.5+ds/build-aux/meson/gen-profile-conf.py gtk4-4.14.1+ds/build-aux/meson/gen-profile-conf.py --- gtk4-4.12.5+ds/build-aux/meson/gen-profile-conf.py 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/build-aux/meson/gen-profile-conf.py 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +import os +import subprocess +import sys + +repodir = sys.argv[1] +profile = sys.argv[2] + +sys.stdout.write("/* This file is auto-generated. Do not edit. */\n") +sys.stdout.write("#pragma once\n") +sys.stdout.write("\n") +sys.stdout.write(f"#define PROFILE \"{profile}\"\n") + +short_sha = os.environ.get('CI_COMMIT_SHORT_SHA') +if short_sha is None: + cmd = ["git", "-C", repodir, "rev-parse", "--short", "HEAD"] + try: + with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: + short_sha = p.stdout.read().decode('utf-8').rstrip("\n") + except FileNotFoundError: + short_sha = '' + if profile != 'default': + short_sha = 'devel' + +sys.stdout.write(f"#define VCS_TAG \"{short_sha}\"\n") diff -Nru gtk4-4.12.5+ds/debian/changelog gtk4-4.14.1+ds/debian/changelog --- gtk4-4.12.5+ds/debian/changelog 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/changelog 2024-03-20 16:30:39.000000000 +0000 @@ -1,12 +1,45 @@ -gtk4 (4.12.5+ds-2ubuntu1) noble; urgency=medium +gtk4 (4.14.1+ds-0ubuntu1) noble; urgency=medium - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control, debian/rules: - + Switch from the CUPS print backend to CPDB + * New upstream release + * Update the packaging to no refer to the ffmpeg experimental backend + which has been removed upstream now + * d/p/d/debian/big-endian-memorytexture.patch: + - ignore also the memorytexture test on s390x + * d/p/d/ignore_a11ytext_i386.patch: + - ignore a11ytext tests on i386 + * debian/rules: + - update for the new convert-emoji syntax + + -- Sebastien Bacher Wed, 20 Mar 2024 17:30:39 +0100 + +gtk4 (4.13.8+ds-0ubuntu4) noble; urgency=medium + + * No-change rebuild against libcups2t64 + + -- Michael Hudson-Doyle Wed, 20 Mar 2024 15:42:14 +1300 + +gtk4 (4.13.8+ds-0ubuntu2) noble; urgency=medium + + * debian/patches/git_savedialog_segfault.patch: + - cherry pick an upstream fix for a segfault in the filepicker savemode + * Restore s390x workaround + * debian/patches/ignore_a11ytext_i386.patch: workaround i386 issues - -- Jeremy Bícha Fri, 26 Jan 2024 15:26:45 -0500 + -- Sebastien Bacher Wed, 06 Mar 2024 16:51:39 +0100 + +gtk4 (4.13.8+ds-0ubuntu1) noble; urgency=medium + + * Update to the current version and upload to noble for now, we still + need to sort some test problems on non desktop target architectures + and clean the packaging before merging in Debian though. + * Update the packaging to no refer to the ffmpeg experimental backend + which has been removed upstream now + * Workaround buggy or flaky tests for now + + [ Jeremy Bícha ] + * New upstream release + + -- Sebastien Bacher Thu, 29 Feb 2024 16:09:37 +0100 gtk4 (4.12.5+ds-2) unstable; urgency=medium @@ -15,16 +48,6 @@ -- Jeremy Bícha Fri, 26 Jan 2024 15:19:36 -0500 -gtk4 (4.12.5+ds-1ubuntu1) noble; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control, debian/rules: - + Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Fri, 19 Jan 2024 15:23:17 -0500 - gtk4 (4.12.5+ds-1) unstable; urgency=medium * New upstream release @@ -61,16 +84,6 @@ -- Simon McVittie Wed, 17 Jan 2024 11:43:08 +0000 -gtk4 (4.12.4+ds-3ubuntu1) noble; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control, debian/rules: - + Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Fri, 08 Dec 2023 20:56:34 -0500 - gtk4 (4.12.4+ds-3) unstable; urgency=medium * d/control: Remove pandoc build-dependency. @@ -92,34 +105,12 @@ -- Simon McVittie Fri, 08 Dec 2023 17:36:22 +0000 -gtk4 (4.12.4+ds-1ubuntu1) noble; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Mon, 27 Nov 2023 11:00:23 -0500 - gtk4 (4.12.4+ds-1) unstable; urgency=medium * New upstream release -- Jeremy Bícha Mon, 27 Nov 2023 10:58:51 -0500 -gtk4 (4.12.3+ds-3ubuntu1) noble; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Thu, 23 Nov 2023 09:04:37 -0500 - gtk4 (4.12.3+ds-3) unstable; urgency=medium * d/control: Build-depend on relevant gir1.2-*-dev virtual packages. @@ -145,17 +136,6 @@ -- Simon McVittie Thu, 02 Nov 2023 14:47:44 +0000 -gtk4 (4.12.3+ds-1ubuntu1) mantic; urgency=medium - - * Merge with Debian (LP: #2038557). Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - -- Amin Bandali Thu, 05 Oct 2023 11:27:16 -0400 - gtk4 (4.12.3+ds-1) unstable; urgency=medium * New upstream release @@ -181,17 +161,6 @@ -- Amin Bandali Wed, 04 Oct 2023 16:11:12 -0400 -gtk4 (4.12.2+ds-1ubuntu1) mantic; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Fri, 22 Sep 2023 10:33:42 -0400 - gtk4 (4.12.2+ds-1) unstable; urgency=medium * New upstream release @@ -221,17 +190,6 @@ -- Simon McVittie Mon, 04 Sep 2023 15:28:30 +0100 -gtk4 (4.12.1+ds-2ubuntu1) mantic; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Wed, 30 Aug 2023 14:22:20 -0400 - gtk4 (4.12.1+ds-2) unstable; urgency=medium * Release to unstable @@ -277,18 +235,6 @@ -- Simon McVittie Wed, 23 Aug 2023 16:43:03 +0100 -gtk4 (4.12.0+ds-2ubuntu1) mantic; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - Add patch to fix building CPDB support - - -- Jeremy Bícha Tue, 22 Aug 2023 12:27:01 -0400 - gtk4 (4.12.0+ds-2) experimental; urgency=medium * d/rules: Skip build-time tests that are known to fail or be unreliable. @@ -312,33 +258,6 @@ -- Simon McVittie Tue, 22 Aug 2023 15:19:11 +0100 -gtk4 (4.12.0+ds-1ubuntu3) mantic; urgency=medium - - * d/rules: - - Disable build-time failing tests on i386 and s390x without lingering, as - we don't really care about desktop in those architectures. - - -- Nathan Pratta Teodosio Tue, 22 Aug 2023 15:38:10 +0200 - -gtk4 (4.12.0+ds-1ubuntu2) mantic; urgency=medium - - * d/p/disable-checkerboard-reftests.patch: - - Disable flaky build-time checkerboard tests (LP: #2032638). - - -- Nathan Pratta Teodosio Tue, 22 Aug 2023 12:28:08 +0200 - -gtk4 (4.12.0+ds-1ubuntu1) mantic; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - * Add patch to fix building cpdb support - - -- Jeremy Bícha Tue, 08 Aug 2023 18:16:27 -0400 - gtk4 (4.12.0+ds-1) experimental; urgency=medium * New upstream release @@ -425,17 +344,6 @@ -- Jeremy Bícha Wed, 19 Jul 2023 07:53:26 -0400 -gtk4 (4.10.4+ds-1ubuntu1) mantic; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - Switch from the CUPS print backend to CPDB - - -- Jeremy Bícha Mon, 05 Jun 2023 15:39:43 -0400 - gtk4 (4.10.4+ds-1) experimental; urgency=medium * New upstream release @@ -444,49 +352,12 @@ -- Jeremy Bícha Mon, 05 Jun 2023 15:04:11 -0400 -gtk4 (4.10.3+ds-1ubuntu3) mantic; urgency=medium - - [ Till Kamppeter ] - * Switch from the CUPS print backend to CPDB - - [ Jeremy Bicha ] - * Recommend cpdb-backend-cups (LP: #1747760) - - -- Jeremy Bícha Fri, 26 May 2023 14:29:12 -0400 - -gtk4 (4.10.3+ds-1ubuntu2) mantic; urgency=medium - - * Cherry-pick patch to fix black rectangles seen with mutter 44.1 - (LP: #2020674) - - -- Jeremy Bícha Wed, 24 May 2023 16:32:14 -0400 - -gtk4 (4.10.3+ds-1ubuntu1) mantic; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bícha Thu, 11 May 2023 10:48:14 -0400 - gtk4 (4.10.3+ds-1) experimental; urgency=medium * New upstream release -- Jeremy Bícha Thu, 11 May 2023 10:45:31 -0400 -gtk4 (4.10.1+ds-2ubuntu1) lunar; urgency=medium - - * Merge with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Marco Trevisan (Treviño) Thu, 23 Mar 2023 19:40:46 +0100 - gtk4 (4.10.1+ds-2) experimental; urgency=medium * debian/patches: Add gstreamer-player as subproject. @@ -505,16 +376,6 @@ -- Marco Trevisan (Treviño) Thu, 23 Mar 2023 18:23:32 +0100 -gtk4 (4.10.1+ds-1ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bicha Tue, 14 Mar 2023 08:43:28 -0400 - gtk4 (4.10.1+ds-1) experimental; urgency=medium * New upstream release @@ -523,32 +384,12 @@ -- Jeremy Bicha Tue, 14 Mar 2023 08:43:02 -0400 -gtk4 (4.10.0+ds-2ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bicha Wed, 08 Mar 2023 13:07:01 -0500 - gtk4 (4.10.0+ds-2) experimental; urgency=medium * Cherry-pick patch to fix combo boxes -- Jeremy Bicha Wed, 08 Mar 2023 12:43:20 -0500 -gtk4 (4.10.0+ds-1ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bicha Mon, 06 Mar 2023 09:45:47 -0500 - gtk4 (4.10.0+ds-1) experimental; urgency=medium * New upstream release @@ -556,16 +397,6 @@ -- Jeremy Bicha Mon, 06 Mar 2023 09:18:40 -0500 -gtk4 (4.9.4+ds-1ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bicha Mon, 13 Feb 2023 16:15:21 -0500 - gtk4 (4.9.4+ds-1) experimental; urgency=medium * New upstream release @@ -573,16 +404,6 @@ -- Jeremy Bicha Mon, 13 Feb 2023 16:14:23 -0500 -gtk4 (4.9.3+ds-1ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bicha Thu, 09 Feb 2023 14:00:55 -0500 - gtk4 (4.9.3+ds-1) experimental; urgency=medium [ Jeremy Bicha, via Ubuntu ] @@ -607,30 +428,6 @@ -- Jeremy Bicha Thu, 09 Feb 2023 11:43:59 -0500 -gtk4 (4.9.2+ds-0ubuntu2) lunar; urgency=medium - - * Rebuild against latest tiff - - -- Jeremy Bicha Sat, 04 Feb 2023 11:31:27 -0500 - -gtk4 (4.9.2+ds-0ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - * New upstream release - * Update debian/gbp.conf and debian/watch to track the 4.9 series - * debian/control.in:Bump minimum glib to 2.72.0 - * debian/libgtk-4-1.symbols.in: Update - * debian/tests/python3-gi: stop using deprecated method - * Drop patches applied in new series - * Revert commit dropping installed tests - * Add patch to mark the gtk template test as flaky - - -- Jeremy Bicha Thu, 12 Jan 2023 13:58:01 -0500 - gtk4 (4.8.3+ds-2) unstable; urgency=medium [ Jeremy Bicha ] @@ -698,16 +495,6 @@ -- Simon McVittie Tue, 06 Dec 2022 11:52:29 +0000 -gtk4 (4.8.2+ds-3ubuntu1) lunar; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Amin Bandali Wed, 23 Nov 2022 12:53:46 -0500 - gtk4 (4.8.2+ds-3) unstable; urgency=medium * Skip border-image-excess-size reftest on big-endian machines. @@ -747,16 +534,6 @@ -- Simon McVittie Sat, 29 Oct 2022 11:54:46 +0100 -gtk4 (4.8.1+ds-1ubuntu1) kinetic; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - -- Jeremy Bicha Mon, 19 Sep 2022 16:39:04 -0400 - gtk4 (4.8.1+ds-1) unstable; urgency=medium * New upstream release @@ -785,36 +562,12 @@ -- Jeremy Bicha Sun, 21 Aug 2022 17:40:46 -0400 -gtk4 (4.7.2+ds-2ubuntu1) kinetic; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - * Drop the debian/rules translation override since there is only one - translation template now - - -- Jeremy Bicha Thu, 18 Aug 2022 22:34:45 -0400 - gtk4 (4.7.2+ds-2) experimental; urgency=medium * Merge packaging changes from unstable -- Simon McVittie Tue, 16 Aug 2022 11:24:01 +0100 -gtk4 (4.6.6+ds-3ubuntu1) kinetic; urgency=medium - - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - debian/rules: Handle the 2nd translation template file. - This override can be dropped with 4.7.1 - - -- Jesús Soto Tue, 16 Aug 2022 09:49:05 -0500 - gtk4 (4.6.6+ds-3) unstable; urgency=medium * Branch 4.6.x for unstable @@ -868,17 +621,7 @@ * d/copyright: Drop unused GPL license stanzas * d/gtk-4-tests.lintian-overrides: Update syntax for current Lintian - * Sync with Debian. Remaining changes: - - debian/tests: - + include the memorytexture test in the flaky set, it has been unreliable - - debian/control: - + Build-Depend on dh-sequence-translations - - debian/rules: Handle the 2nd translation template file. - This override can be dropped with 4.7.1 - - - -- Jeremy Bicha Tue, 05 Jul 2022 14:09:40 -0400 - + -- Simon McVittie Mon, 08 Aug 2022 19:22:54 +0100 gtk4 (4.6.6+ds-1) unstable; urgency=medium @@ -894,41 +637,6 @@ -- Jeremy Bicha Tue, 05 Jul 2022 11:24:34 -0400 -gtk4 (4.6.5+ds-1ubuntu6) kinetic; urgency=medium - - * debian/rules: - - use the make-pot script instead of the --enable-features=Vulkan - rule which seems to not work as intended - - -- Sebastien Bacher Mon, 04 Jul 2022 13:47:15 +0200 - -gtk4 (4.6.5+ds-1ubuntu5) kinetic; urgency=medium - - * Rebuild to get the translations import on launchpad, the template - sharing option was enabled on the server which makes the (outdated) - project vcs loaded instead of the package files - - -- Sebastien Bacher Fri, 01 Jul 2022 11:39:09 +0200 - -gtk4 (4.6.5+ds-1ubuntu4) kinetic; urgency=medium - - * Fix the build directory for the previous upload - - -- Jeremy Bicha Thu, 30 Jun 2022 14:21:26 -0400 - -gtk4 (4.6.5+ds-1ubuntu3) kinetic; urgency=medium - - * debian/rules: gtk4 builds 2 translation templates so handle them both - - -- Jeremy Bicha Thu, 30 Jun 2022 10:27:29 -0400 - -gtk4 (4.6.5+ds-1ubuntu2) kinetic; urgency=medium - - * Build-Depend on dh-sequence-translations - - Fixes missing translations and RTL support (LP: #1947698) - - -- Jeremy Bicha Thu, 30 Jun 2022 09:56:48 -0400 - gtk4 (4.6.5+ds-1) unstable; urgency=medium [ Jeremy Bicha ] @@ -942,13 +650,6 @@ -- Jeremy Bicha Wed, 01 Jun 2022 09:05:45 -0400 -gtk4 (4.6.4+ds-3ubuntu1) kinetic; urgency=medium - - [ Sebastien Bacher ] - * debian/tests: - - include the memorytexture test in the flaky set, it has been unreliable - - -- Jeremy Bicha Thu, 19 May 2022 10:16:34 -0400 gtk4 (4.6.4+ds-3) unstable; urgency=medium * d/rules: Stop skipping ngl tests on big-endian machines. diff -Nru gtk4-4.12.5+ds/debian/control gtk4-4.14.1+ds/debian/control --- gtk4-4.12.5+ds/debian/control 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/control 2024-03-20 16:30:39.000000000 +0000 @@ -20,20 +20,15 @@ gir1.2-pango-1.0-dev, gir1.2-pangocairo-1.0-dev, gir1.2-xlib-2.0-dev, + glslc, gobject-introspection (>= 1.76.0), gobject-introspection (>= 1.78.1-9~) , gsettings-desktop-schemas , iso-codes , - libavcodec-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], - libavdevice-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], - libavfilter-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], - libavformat-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], - libavutil-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], libcairo2-dev, - libcpdb-dev (>= 2.0~b4-0ubuntu3~), - libcpdb-frontend-dev (>= 2.0~b4-0ubuntu3~), libcolord-dev, libcloudproviders-dev (>= 0.3.1), + libcups2-dev, libegl1-mesa-dev [linux-any], libepoxy-dev, libfontconfig-dev, @@ -51,8 +46,6 @@ libpolkit-gobject-1-dev [linux-any], librsvg2-common [amd64 arm64 armel armhf i386 loong64 mips64el ppc64el s390x powerpc ppc64 riscv64 sparc64 x32] , librsvg2-dev (>= 2.52.0) [amd64 arm64 armel armhf i386 loong64 mips64el ppc64el s390x powerpc ppc64 riscv64 sparc64 x32], - libswresample-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], - libswscale-dev [amd64 arm64 armel armhf i386 mips64el ppc64el s390x], libsysprof-capture-4-dev (>= 3.40.1) [linux-any], libtiff-dev, libvulkan-dev [linux-any], @@ -100,7 +93,6 @@ libgtk-4-common (>= ${source:Version}) Provides: ${gtk:Provides} Recommends: libgtk-4-bin, - cpdb-backend-cups (>= 2.0~b4-0ubuntu2~), iso-codes, librsvg2-common (>= 2.52.0), libgtk-4-media-gstreamer, @@ -245,23 +237,6 @@ . This package contains the media module that uses GStreamer as backend. -Package: libgtk-4-media-ffmpeg -Build-Profiles: -Section: x11 -Architecture: amd64 arm64 armel armhf i386 mips64el ppc64el s390x -Multi-Arch: foreign -Depends: ${misc:Depends}, - ${shlibs:Depends}, -Description: FFmpeg media backend for the GTK graphical user interface library - GTK is a multi-platform toolkit for creating graphical user - interfaces. Offering a complete set of widgets, GTK is suitable - for projects ranging from small one-off tools to complete application - suites. - . - This package contains the media module that uses FFmpeg as backend. - This module is considered incomplete and experimental, and using the - libgtk-4-media-gstreamer module instead is recommended. - Package: gtk-4-examples Build-Profiles: Section: x11 diff -Nru gtk4-4.12.5+ds/debian/gbp.conf gtk4-4.14.1+ds/debian/gbp.conf --- gtk4-4.12.5+ds/debian/gbp.conf 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/gbp.conf 2024-03-20 16:30:39.000000000 +0000 @@ -1,7 +1,6 @@ [DEFAULT] pristine-tar = True -debian-branch = ubuntu/latest -debian-tag = ubuntu/%(version)s +debian-branch = debian/latest upstream-branch = upstream/latest [buildpackage] diff -Nru gtk4-4.12.5+ds/debian/ignore.keyfile gtk4-4.14.1+ds/debian/ignore.keyfile --- gtk4-4.12.5+ds/debian/ignore.keyfile 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/ignore.keyfile 2024-03-20 16:30:39.000000000 +0000 @@ -1,3 +1,3 @@ [reftest] tolerated-diff-level=255 -tolerated-diff-pixels=4000 +tolerated-diff-pixels=30000 diff -Nru gtk4-4.12.5+ds/debian/libgtk-4-1.symbols.in gtk4-4.14.1+ds/debian/libgtk-4-1.symbols.in --- gtk4-4.12.5+ds/debian/libgtk-4-1.symbols.in 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/libgtk-4-1.symbols.in 2024-03-20 16:30:39.000000000 +0000 @@ -173,6 +173,7 @@ gdk_display_get_clipboard@Base 4.0.0 gdk_display_get_default@Base 4.0.0 gdk_display_get_default_seat@Base 4.0.0 + gdk_display_get_dmabuf_formats@Base 4.13.5 gdk_display_get_monitor_at_surface@Base 4.0.0 gdk_display_get_monitors@Base 4.0.0 gdk_display_get_name@Base 4.0.0 @@ -197,8 +198,47 @@ gdk_display_prepare_gl@Base 4.3.2 gdk_display_put_event@Base 4.0.0 gdk_display_supports_input_shapes@Base 4.0.0 + gdk_display_supports_shadow_width@Base 4.13.8 gdk_display_sync@Base 4.0.0 gdk_display_translate_key@Base 4.0.0 + gdk_dmabuf_downloader_get_type@Base 4.13.5 + gdk_dmabuf_error_get_type@Base 4.13.5 + gdk_dmabuf_error_quark@Base 4.13.5 + gdk_dmabuf_formats_contains@Base 4.13.5 + gdk_dmabuf_formats_equal@Base 4.13.8 + gdk_dmabuf_formats_get_format@Base 4.13.5 + gdk_dmabuf_formats_get_n_formats@Base 4.13.5 + gdk_dmabuf_formats_get_type@Base 4.13.5 + gdk_dmabuf_formats_ref@Base 4.13.5 + gdk_dmabuf_formats_unref@Base 4.13.5 + gdk_dmabuf_texture_builder_build@Base 4.13.5 + gdk_dmabuf_texture_builder_get_display@Base 4.13.5 + gdk_dmabuf_texture_builder_get_fd@Base 4.13.5 + gdk_dmabuf_texture_builder_get_fourcc@Base 4.13.5 + gdk_dmabuf_texture_builder_get_height@Base 4.13.5 + gdk_dmabuf_texture_builder_get_modifier@Base 4.13.5 + gdk_dmabuf_texture_builder_get_n_planes@Base 4.13.5 + gdk_dmabuf_texture_builder_get_offset@Base 4.13.5 + gdk_dmabuf_texture_builder_get_premultiplied@Base 4.13.5 + gdk_dmabuf_texture_builder_get_stride@Base 4.13.5 + gdk_dmabuf_texture_builder_get_type@Base 4.13.5 + gdk_dmabuf_texture_builder_get_update_region@Base 4.13.5 + gdk_dmabuf_texture_builder_get_update_texture@Base 4.13.5 + gdk_dmabuf_texture_builder_get_width@Base 4.13.5 + gdk_dmabuf_texture_builder_new@Base 4.13.5 + gdk_dmabuf_texture_builder_set_display@Base 4.13.5 + gdk_dmabuf_texture_builder_set_fd@Base 4.13.5 + gdk_dmabuf_texture_builder_set_fourcc@Base 4.13.5 + gdk_dmabuf_texture_builder_set_height@Base 4.13.5 + gdk_dmabuf_texture_builder_set_modifier@Base 4.13.5 + gdk_dmabuf_texture_builder_set_n_planes@Base 4.13.5 + gdk_dmabuf_texture_builder_set_offset@Base 4.13.5 + gdk_dmabuf_texture_builder_set_premultiplied@Base 4.13.5 + gdk_dmabuf_texture_builder_set_stride@Base 4.13.5 + gdk_dmabuf_texture_builder_set_update_region@Base 4.13.5 + gdk_dmabuf_texture_builder_set_update_texture@Base 4.13.5 + gdk_dmabuf_texture_builder_set_width@Base 4.13.5 + gdk_dmabuf_texture_get_type@Base 4.13.5 gdk_dnd_event_get_drop@Base 4.0.0 gdk_dnd_event_get_type@Base 4.0.0 gdk_drag_action_get_type@Base 4.0.0 @@ -376,6 +416,7 @@ gdk_monitor_get_manufacturer@Base 4.0.0 gdk_monitor_get_model@Base 4.0.0 gdk_monitor_get_refresh_rate@Base 4.0.0 + gdk_monitor_get_scale@Base 4.13.8 gdk_monitor_get_scale_factor@Base 4.0.0 gdk_monitor_get_subpixel_layout@Base 4.0.0 gdk_monitor_get_type@Base 4.0.0 @@ -600,6 +641,7 @@ (arch=linux-any)gdk_wayland_toplevel_set_application_id@Base 4.0.0 (arch=linux-any)gdk_wayland_toplevel_set_transient_for_exported@Base 4.0.0 (arch=linux-any)gdk_wayland_toplevel_unexport_handle@Base 4.0.0 + gdk_wayland_vulkan_context_get_type@Base 4.13.5 gdk_x11_app_launch_context_get_type@Base 4.0.0 gdk_x11_cairo_context_get_type@Base 4.0.0 gdk_x11_device_get_id@Base 4.0.0 @@ -668,6 +710,7 @@ gdk_x11_surface_set_urgency_hint@Base 4.0.0 gdk_x11_surface_set_user_time@Base 4.0.0 gdk_x11_surface_set_utf8_property@Base 4.0.0 + gdk_x11_vulkan_context_get_type@Base 4.13.5 gsk_blend_mode_get_type@Base 4.0.0 gsk_blend_node_get_blend_mode@Base 4.0.0 gsk_blend_node_get_bottom_child@Base 4.0.0 @@ -724,6 +767,12 @@ gsk_debug_node_get_message@Base 4.0.0 gsk_debug_node_get_type@Base 4.0.0 gsk_debug_node_new@Base 4.0.0 + gsk_fill_node_get_child@Base 4.13.5 + gsk_fill_node_get_fill_rule@Base 4.13.5 + gsk_fill_node_get_path@Base 4.13.5 + gsk_fill_node_get_type@Base 4.13.5 + gsk_fill_node_new@Base 4.13.5 + gsk_fill_rule_get_type@Base 4.13.5 gsk_gl_renderer_get_type@Base 4.0.0 gsk_gl_renderer_new@Base 4.0.0 gsk_gl_shader_compile@Base 4.0.0 @@ -755,6 +804,7 @@ gsk_gl_shader_node_get_type@Base 4.0.0 gsk_gl_shader_node_new@Base 4.0.0 gsk_gl_uniform_type_get_type@Base 4.0.0 + gsk_gpu_renderer_get_type@Base 4.13.5 gsk_inset_shadow_node_get_blur_radius@Base 4.0.0 gsk_inset_shadow_node_get_color@Base 4.0.0 gsk_inset_shadow_node_get_dx@Base 4.0.0 @@ -763,6 +813,8 @@ gsk_inset_shadow_node_get_spread@Base 4.0.0 gsk_inset_shadow_node_get_type@Base 4.0.0 gsk_inset_shadow_node_new@Base 4.0.0 + gsk_line_cap_get_type@Base 4.13.5 + gsk_line_join_get_type@Base 4.13.5 gsk_linear_gradient_node_get_color_stops@Base 4.0.0 gsk_linear_gradient_node_get_end@Base 4.0.0 gsk_linear_gradient_node_get_n_color_stops@Base 4.0.0 @@ -789,6 +841,76 @@ gsk_outset_shadow_node_get_spread@Base 4.0.0 gsk_outset_shadow_node_get_type@Base 4.0.0 gsk_outset_shadow_node_new@Base 4.0.0 + gsk_path_builder_add_cairo_path@Base 4.13.5 + gsk_path_builder_add_circle@Base 4.13.5 + gsk_path_builder_add_layout@Base 4.13.5 + gsk_path_builder_add_path@Base 4.13.5 + gsk_path_builder_add_rect@Base 4.13.5 + gsk_path_builder_add_reverse_path@Base 4.13.5 + gsk_path_builder_add_rounded_rect@Base 4.13.5 + gsk_path_builder_add_segment@Base 4.13.5 + gsk_path_builder_arc_to@Base 4.13.5 + gsk_path_builder_close@Base 4.13.5 + gsk_path_builder_conic_to@Base 4.13.5 + gsk_path_builder_cubic_to@Base 4.13.5 + gsk_path_builder_free_to_path@Base 4.13.5 + gsk_path_builder_get_current_point@Base 4.13.5 + gsk_path_builder_get_type@Base 4.13.5 + gsk_path_builder_html_arc_to@Base 4.13.5 + gsk_path_builder_line_to@Base 4.13.5 + gsk_path_builder_move_to@Base 4.13.5 + gsk_path_builder_new@Base 4.13.5 + gsk_path_builder_quad_to@Base 4.13.5 + gsk_path_builder_ref@Base 4.13.5 + gsk_path_builder_rel_arc_to@Base 4.13.5 + gsk_path_builder_rel_conic_to@Base 4.13.5 + gsk_path_builder_rel_cubic_to@Base 4.13.5 + gsk_path_builder_rel_html_arc_to@Base 4.13.5 + gsk_path_builder_rel_line_to@Base 4.13.5 + gsk_path_builder_rel_move_to@Base 4.13.5 + gsk_path_builder_rel_quad_to@Base 4.13.5 + gsk_path_builder_rel_svg_arc_to@Base 4.13.5 + gsk_path_builder_svg_arc_to@Base 4.13.5 + gsk_path_builder_to_path@Base 4.13.5 + gsk_path_builder_unref@Base 4.13.5 + gsk_path_direction_get_type@Base 4.13.5 + gsk_path_foreach@Base 4.13.5 + gsk_path_foreach_flags_get_type@Base 4.13.5 + gsk_path_get_bounds@Base 4.13.5 + gsk_path_get_closest_point@Base 4.13.5 + gsk_path_get_end_point@Base 4.13.5 + gsk_path_get_start_point@Base 4.13.5 + gsk_path_get_stroke_bounds@Base 4.13.5 + gsk_path_get_type@Base 4.13.5 + gsk_path_in_fill@Base 4.13.5 + gsk_path_is_closed@Base 4.13.5 + gsk_path_is_empty@Base 4.13.5 + gsk_path_measure_get_length@Base 4.13.5 + gsk_path_measure_get_path@Base 4.13.5 + gsk_path_measure_get_point@Base 4.13.5 + gsk_path_measure_get_tolerance@Base 4.13.5 + gsk_path_measure_get_type@Base 4.13.5 + gsk_path_measure_new@Base 4.13.5 + gsk_path_measure_new_with_tolerance@Base 4.13.5 + gsk_path_measure_ref@Base 4.13.5 + gsk_path_measure_unref@Base 4.13.5 + gsk_path_operation_get_type@Base 4.13.5 + gsk_path_parse@Base 4.13.5 + gsk_path_point_compare@Base 4.13.5 + gsk_path_point_copy@Base 4.13.5 + gsk_path_point_equal@Base 4.13.5 + gsk_path_point_free@Base 4.13.5 + gsk_path_point_get_curvature@Base 4.13.5 + gsk_path_point_get_distance@Base 4.13.5 + gsk_path_point_get_position@Base 4.13.5 + gsk_path_point_get_rotation@Base 4.13.5 + gsk_path_point_get_tangent@Base 4.13.5 + gsk_path_point_get_type@Base 4.13.5 + gsk_path_print@Base 4.13.5 + gsk_path_ref@Base 4.13.5 + gsk_path_to_cairo@Base 4.13.5 + gsk_path_to_string@Base 4.13.5 + gsk_path_unref@Base 4.13.5 gsk_radial_gradient_node_get_center@Base 4.0.0 gsk_radial_gradient_node_get_color_stops@Base 4.0.0 gsk_radial_gradient_node_get_end@Base 4.0.0 @@ -813,6 +935,7 @@ gsk_renderer_is_realized@Base 4.0.0 gsk_renderer_new_for_surface@Base 4.0.0 gsk_renderer_realize@Base 4.0.0 + gsk_renderer_realize_for_display@Base 4.13.5 gsk_renderer_render@Base 4.0.0 gsk_renderer_render_texture@Base 4.0.0 gsk_renderer_unrealize@Base 4.0.0 @@ -859,6 +982,33 @@ gsk_shadow_node_get_shadow@Base 4.0.0 gsk_shadow_node_get_type@Base 4.0.0 gsk_shadow_node_new@Base 4.0.0 + gsk_stroke_copy@Base 4.13.5 + gsk_stroke_equal@Base 4.13.5 + gsk_stroke_free@Base 4.13.5 + gsk_stroke_get_dash@Base 4.13.5 + gsk_stroke_get_dash_offset@Base 4.13.5 + gsk_stroke_get_line_cap@Base 4.13.5 + gsk_stroke_get_line_join@Base 4.13.5 + gsk_stroke_get_line_width@Base 4.13.5 + gsk_stroke_get_miter_limit@Base 4.13.5 + gsk_stroke_get_type@Base 4.13.5 + gsk_stroke_new@Base 4.13.5 + gsk_stroke_node_get_child@Base 4.13.5 + gsk_stroke_node_get_path@Base 4.13.5 + gsk_stroke_node_get_stroke@Base 4.13.5 + gsk_stroke_node_get_type@Base 4.13.5 + gsk_stroke_node_new@Base 4.13.5 + gsk_stroke_set_dash@Base 4.13.5 + gsk_stroke_set_dash_offset@Base 4.13.5 + gsk_stroke_set_line_cap@Base 4.13.5 + gsk_stroke_set_line_join@Base 4.13.5 + gsk_stroke_set_line_width@Base 4.13.5 + gsk_stroke_set_miter_limit@Base 4.13.5 + gsk_stroke_to_cairo@Base 4.13.5 + gsk_subsurface_node_get_child@Base 4.13.5 + gsk_subsurface_node_get_subsurface@Base 4.13.5 + gsk_subsurface_node_get_type@Base 4.13.5 + gsk_subsurface_node_new@Base 4.13.5 gsk_text_node_get_color@Base 4.0.0 gsk_text_node_get_font@Base 4.0.0 gsk_text_node_get_glyphs@Base 4.0.0 @@ -910,6 +1060,8 @@ gsk_value_get_render_node@Base 4.6.0 gsk_value_set_render_node@Base 4.6.0 gsk_value_take_render_node@Base 4.6.0 + gsk_vulkan_renderer_get_type@Base 4.13.5 + gsk_vulkan_renderer_new@Base 4.13.5 gtk_about_dialog_add_credit_section@Base 4.0.0 gtk_about_dialog_get_artists@Base 4.0.0 gtk_about_dialog_get_authors@Base 4.0.0 @@ -953,6 +1105,8 @@ gtk_accelerator_parse@Base 4.0.0 gtk_accelerator_parse_with_keycode@Base 4.0.0 gtk_accelerator_valid@Base 4.0.0 + gtk_accessible_announce@Base 4.13.8 + gtk_accessible_announcement_priority_get_type@Base 4.13.8 gtk_accessible_autocomplete_get_type@Base 4.0.0 gtk_accessible_get_accessible_parent@Base 4.9.3 gtk_accessible_get_accessible_role@Base 4.0.0 @@ -963,6 +1117,10 @@ gtk_accessible_get_platform_state@Base 4.9.3 gtk_accessible_get_type@Base 4.0.0 gtk_accessible_invalid_state_get_type@Base 4.0.0 + gtk_accessible_list_get_objects@Base 4.13.8 + gtk_accessible_list_get_type@Base 4.13.8 + gtk_accessible_list_new_from_array@Base 4.13.8 + gtk_accessible_list_new_from_list@Base 4.13.8 gtk_accessible_platform_state_get_type@Base 4.9.3 gtk_accessible_property_get_type@Base 4.0.0 gtk_accessible_property_init_value@Base 4.0.0 @@ -977,6 +1135,12 @@ gtk_accessible_sort_get_type@Base 4.0.0 gtk_accessible_state_get_type@Base 4.0.0 gtk_accessible_state_init_value@Base 4.0.0 + gtk_accessible_text_content_change_get_type@Base 4.13.8 + gtk_accessible_text_get_type@Base 4.13.8 + gtk_accessible_text_granularity_get_type@Base 4.13.8 + gtk_accessible_text_update_caret_position@Base 4.13.8 + gtk_accessible_text_update_contents@Base 4.13.8 + gtk_accessible_text_update_selection_bound@Base 4.13.8 gtk_accessible_tristate_get_type@Base 4.0.0 gtk_accessible_update_next_accessible_sibling@Base 4.10.0 gtk_accessible_update_property@Base 4.0.0 @@ -1150,6 +1314,10 @@ gtk_at_context_get_accessible@Base 4.0.0 gtk_at_context_get_accessible_role@Base 4.0.0 gtk_at_context_get_type@Base 4.0.0 + gtk_at_spi_socket_get_bus_name@Base 4.13.8 + gtk_at_spi_socket_get_object_path@Base 4.13.8 + gtk_at_spi_socket_get_type@Base 4.13.8 + gtk_at_spi_socket_new@Base 4.13.8 gtk_baseline_position_get_type@Base 4.0.0 gtk_bin_layout_get_type@Base 4.0.0 gtk_bin_layout_new@Base 4.0.0 @@ -1302,17 +1470,23 @@ gtk_buttons_type_get_type@Base 4.0.0 gtk_calendar_clear_marks@Base 4.0.0 gtk_calendar_get_date@Base 4.0.0 + gtk_calendar_get_day@Base 4.13.8 gtk_calendar_get_day_is_marked@Base 4.0.0 + gtk_calendar_get_month@Base 4.13.8 gtk_calendar_get_show_day_names@Base 4.0.0 gtk_calendar_get_show_heading@Base 4.0.0 gtk_calendar_get_show_week_numbers@Base 4.0.0 gtk_calendar_get_type@Base 4.0.0 + gtk_calendar_get_year@Base 4.13.8 gtk_calendar_mark_day@Base 4.0.0 gtk_calendar_new@Base 4.0.0 gtk_calendar_select_day@Base 4.0.0 + gtk_calendar_set_day@Base 4.13.8 + gtk_calendar_set_month@Base 4.13.8 gtk_calendar_set_show_day_names@Base 4.0.0 gtk_calendar_set_show_heading@Base 4.0.0 gtk_calendar_set_show_week_numbers@Base 4.0.0 + gtk_calendar_set_year@Base 4.13.8 gtk_calendar_unmark_day@Base 4.0.0 gtk_callback_action_get_type@Base 4.0.0 gtk_callback_action_new@Base 4.0.0 @@ -2136,6 +2310,7 @@ gtk_file_launcher_get_always_ask@Base 4.12.0 gtk_file_launcher_get_file@Base 4.9.2 gtk_file_launcher_get_type@Base 4.9.2 + gtk_file_launcher_get_writable@Base 4.13.5 gtk_file_launcher_launch@Base 4.9.2 gtk_file_launcher_launch_finish@Base 4.9.2 gtk_file_launcher_new@Base 4.9.2 @@ -2143,6 +2318,7 @@ gtk_file_launcher_open_containing_folder_finish@Base 4.9.2 gtk_file_launcher_set_always_ask@Base 4.12.0 gtk_file_launcher_set_file@Base 4.9.2 + gtk_file_launcher_set_writable@Base 4.13.5 gtk_filter_change_get_type@Base 4.0.0 gtk_filter_changed@Base 4.0.0 gtk_filter_get_strictness@Base 4.0.0 @@ -2389,6 +2565,13 @@ gtk_gl_area_set_has_stencil_buffer@Base 4.0.0 gtk_gl_area_set_required_version@Base 4.0.0 gtk_gl_area_set_use_es@Base 4.0.0 + gtk_graphics_offload_enabled_get_type@Base 4.13.5 + gtk_graphics_offload_get_child@Base 4.13.5 + gtk_graphics_offload_get_enabled@Base 4.13.5 + gtk_graphics_offload_get_type@Base 4.13.5 + gtk_graphics_offload_new@Base 4.13.5 + gtk_graphics_offload_set_child@Base 4.13.5 + gtk_graphics_offload_set_enabled@Base 4.13.5 gtk_grid_attach@Base 4.0.0 gtk_grid_attach_next_to@Base 4.0.0 gtk_grid_get_baseline_row@Base 4.0.0 @@ -2557,6 +2740,7 @@ gtk_icon_view_unselect_path@Base 4.0.0 gtk_icon_view_unset_model_drag_dest@Base 4.0.0 gtk_icon_view_unset_model_drag_source@Base 4.0.0 + gtk_im_context_activate_osk@Base 4.14.1 gtk_im_context_delete_surrounding@Base 4.0.0 gtk_im_context_filter_key@Base 4.0.0 gtk_im_context_filter_keypress@Base 4.0.0 @@ -3230,11 +3414,13 @@ gtk_popover_menu_bar_remove_child@Base 4.0.0 gtk_popover_menu_bar_set_menu_model@Base 4.0.0 gtk_popover_menu_flags_get_type@Base 4.0.0 + gtk_popover_menu_get_flags@Base 4.13.5 gtk_popover_menu_get_menu_model@Base 4.0.0 gtk_popover_menu_get_type@Base 4.0.0 gtk_popover_menu_new_from_model@Base 4.0.0 gtk_popover_menu_new_from_model_full@Base 4.0.0 gtk_popover_menu_remove_child@Base 4.0.0 + gtk_popover_menu_set_flags@Base 4.13.5 gtk_popover_menu_set_menu_model@Base 4.0.0 gtk_popover_new@Base 4.0.0 gtk_popover_popdown@Base 4.0.0 @@ -3276,6 +3462,24 @@ gtk_print_context_get_type@Base 4.0.0 gtk_print_context_get_width@Base 4.0.0 gtk_print_context_set_cairo_context@Base 4.0.0 + gtk_print_dialog_get_accept_label@Base 4.13.5 + gtk_print_dialog_get_modal@Base 4.13.5 + gtk_print_dialog_get_page_setup@Base 4.13.5 + gtk_print_dialog_get_print_settings@Base 4.13.5 + gtk_print_dialog_get_title@Base 4.13.5 + gtk_print_dialog_get_type@Base 4.13.5 + gtk_print_dialog_new@Base 4.13.5 + gtk_print_dialog_print@Base 4.13.5 + gtk_print_dialog_print_file@Base 4.13.5 + gtk_print_dialog_print_file_finish@Base 4.13.5 + gtk_print_dialog_print_finish@Base 4.13.5 + gtk_print_dialog_set_accept_label@Base 4.13.5 + gtk_print_dialog_set_modal@Base 4.13.5 + gtk_print_dialog_set_page_setup@Base 4.13.5 + gtk_print_dialog_set_print_settings@Base 4.13.5 + gtk_print_dialog_set_title@Base 4.13.5 + gtk_print_dialog_setup@Base 4.13.5 + gtk_print_dialog_setup_finish@Base 4.13.5 gtk_print_duplex_get_type@Base 4.0.0 gtk_print_error_get_type@Base 4.0.0 gtk_print_error_quark@Base 4.0.0 @@ -3430,6 +3634,11 @@ gtk_print_settings_to_gvariant@Base 4.0.0 gtk_print_settings_to_key_file@Base 4.0.0 gtk_print_settings_unset@Base 4.0.0 + gtk_print_setup_get_page_setup@Base 4.13.5 + gtk_print_setup_get_print_settings@Base 4.13.5 + gtk_print_setup_get_type@Base 4.13.5 + gtk_print_setup_ref@Base 4.13.5 + gtk_print_setup_unref@Base 4.13.5 gtk_print_status_get_type@Base 4.0.0 gtk_print_unix_dialog_add_custom_tab@Base 4.0.0 gtk_print_unix_dialog_get_current_page@Base 4.0.0 @@ -3634,6 +3843,7 @@ gtk_scale_add_mark@Base 4.0.0 gtk_scale_button_get_active@Base 4.9.4 gtk_scale_button_get_adjustment@Base 4.0.0 + gtk_scale_button_get_has_frame@Base 4.13.8 gtk_scale_button_get_minus_button@Base 4.0.0 gtk_scale_button_get_plus_button@Base 4.0.0 gtk_scale_button_get_popup@Base 4.0.0 @@ -3641,6 +3851,7 @@ gtk_scale_button_get_value@Base 4.0.0 gtk_scale_button_new@Base 4.0.0 gtk_scale_button_set_adjustment@Base 4.0.0 + gtk_scale_button_set_has_frame@Base 4.13.8 gtk_scale_button_set_icons@Base 4.0.0 gtk_scale_button_set_value@Base 4.0.0 gtk_scale_clear_marks@Base 4.0.0 @@ -3727,11 +3938,15 @@ gtk_search_bar_set_key_capture_widget@Base 4.0.0 gtk_search_bar_set_search_mode@Base 4.0.0 gtk_search_bar_set_show_close_button@Base 4.0.0 + gtk_search_entry_get_input_hints@Base 4.13.8 + gtk_search_entry_get_input_purpose@Base 4.13.8 gtk_search_entry_get_key_capture_widget@Base 4.0.0 gtk_search_entry_get_placeholder_text@Base 4.9.4 gtk_search_entry_get_search_delay@Base 4.7.2 gtk_search_entry_get_type@Base 4.0.0 gtk_search_entry_new@Base 4.0.0 + gtk_search_entry_set_input_hints@Base 4.13.8 + gtk_search_entry_set_input_purpose@Base 4.13.8 gtk_search_entry_set_key_capture_widget@Base 4.0.0 gtk_search_entry_set_placeholder_text@Base 4.9.4 gtk_search_entry_set_search_delay@Base 4.7.2 @@ -3806,9 +4021,12 @@ gtk_shortcut_trigger_to_string@Base 4.0.0 gtk_shortcut_trigger_trigger@Base 4.0.0 gtk_shortcut_type_get_type@Base 4.0.0 + gtk_shortcuts_group_add_shortcut@Base 4.13.5 gtk_shortcuts_group_get_type@Base 4.0.0 + gtk_shortcuts_section_add_group@Base 4.13.5 gtk_shortcuts_section_get_type@Base 4.0.0 gtk_shortcuts_shortcut_get_type@Base 4.0.0 + gtk_shortcuts_window_add_section@Base 4.13.5 gtk_shortcuts_window_get_type@Base 4.0.0 gtk_show_about_dialog@Base 4.0.0 gtk_show_uri@Base 4.0.0 @@ -3851,6 +4069,7 @@ gtk_snapshot_append_cairo@Base 4.0.0 gtk_snapshot_append_color@Base 4.0.0 gtk_snapshot_append_conic_gradient@Base 4.0.0 + gtk_snapshot_append_fill@Base 4.13.5 gtk_snapshot_append_inset_shadow@Base 4.0.0 gtk_snapshot_append_layout@Base 4.0.0 gtk_snapshot_append_linear_gradient@Base 4.0.0 @@ -3860,6 +4079,7 @@ gtk_snapshot_append_repeating_linear_gradient@Base 4.0.0 gtk_snapshot_append_repeating_radial_gradient@Base 4.0.0 gtk_snapshot_append_scaled_texture@Base 4.9.4 + gtk_snapshot_append_stroke@Base 4.13.5 gtk_snapshot_append_texture@Base 4.0.0 gtk_snapshot_free_to_node@Base 4.0.0 gtk_snapshot_free_to_paintable@Base 4.0.0 @@ -3874,12 +4094,14 @@ gtk_snapshot_push_color_matrix@Base 4.0.0 gtk_snapshot_push_cross_fade@Base 4.0.0 gtk_snapshot_push_debug@Base 4.0.0 + gtk_snapshot_push_fill@Base 4.13.5 gtk_snapshot_push_gl_shader@Base 4.0.0 gtk_snapshot_push_mask@Base 4.9.4 gtk_snapshot_push_opacity@Base 4.0.0 gtk_snapshot_push_repeat@Base 4.0.0 gtk_snapshot_push_rounded_clip@Base 4.0.0 gtk_snapshot_push_shadow@Base 4.0.0 + gtk_snapshot_push_stroke@Base 4.13.5 gtk_snapshot_render_background@Base 4.0.0 gtk_snapshot_render_focus@Base 4.0.0 gtk_snapshot_render_frame@Base 4.0.0 @@ -3916,6 +4138,7 @@ gtk_sorter_get_type@Base 4.0.0 gtk_sorter_order_get_type@Base 4.0.0 gtk_spin_button_configure@Base 4.0.0 + gtk_spin_button_get_activates_default@Base 4.13.5 gtk_spin_button_get_adjustment@Base 4.0.0 gtk_spin_button_get_climb_rate@Base 4.0.0 gtk_spin_button_get_digits@Base 4.0.0 @@ -3930,6 +4153,7 @@ gtk_spin_button_get_wrap@Base 4.0.0 gtk_spin_button_new@Base 4.0.0 gtk_spin_button_new_with_range@Base 4.0.0 + gtk_spin_button_set_activates_default@Base 4.13.5 gtk_spin_button_set_adjustment@Base 4.0.0 gtk_spin_button_set_climb_rate@Base 4.0.0 gtk_spin_button_set_digits@Base 4.0.0 @@ -4748,6 +4972,7 @@ gtk_value_take_expression@Base 4.0.0 gtk_video_get_autoplay@Base 4.0.0 gtk_video_get_file@Base 4.0.0 + gtk_video_get_graphics_offload@Base 4.13.5 gtk_video_get_loop@Base 4.0.0 gtk_video_get_media_stream@Base 4.0.0 gtk_video_get_type@Base 4.0.0 @@ -4759,6 +4984,7 @@ gtk_video_set_autoplay@Base 4.0.0 gtk_video_set_file@Base 4.0.0 gtk_video_set_filename@Base 4.0.0 + gtk_video_set_graphics_offload@Base 4.13.5 gtk_video_set_loop@Base 4.0.0 gtk_video_set_media_stream@Base 4.0.0 gtk_video_set_resource@Base 4.0.0 diff -Nru gtk4-4.12.5+ds/debian/libgtk-4-bin.install gtk4-4.14.1+ds/debian/libgtk-4-bin.install --- gtk4-4.12.5+ds/debian/libgtk-4-bin.install 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/libgtk-4-bin.install 2024-03-20 16:30:39.000000000 +0000 @@ -2,6 +2,7 @@ usr/bin/gtk4-builder-tool usr/bin/gtk4-encode-symbolic-svg usr/bin/gtk4-launch +usr/bin/gtk4-path-tool usr/bin/gtk4-query-settings usr/bin/gtk4-rendernode-tool usr/bin/gtk4-update-icon-cache diff -Nru gtk4-4.12.5+ds/debian/libgtk-4-bin.manpages gtk4-4.14.1+ds/debian/libgtk-4-bin.manpages --- gtk4-4.12.5+ds/debian/libgtk-4-bin.manpages 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/libgtk-4-bin.manpages 2024-03-20 16:30:39.000000000 +0000 @@ -2,6 +2,7 @@ usr/share/man/man1/gtk4-broadwayd.1 usr/share/man/man1/gtk4-builder-tool.1 usr/share/man/man1/gtk4-launch.1 +usr/share/man/man1/gtk4-path-tool.1 usr/share/man/man1/gtk4-query-settings.1 usr/share/man/man1/gtk4-rendernode-tool.1 usr/share/man/man1/gtk4-update-icon-cache.1 diff -Nru gtk4-4.12.5+ds/debian/libgtk-4-media-ffmpeg.install gtk4-4.14.1+ds/debian/libgtk-4-media-ffmpeg.install --- gtk4-4.12.5+ds/debian/libgtk-4-media-ffmpeg.install 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/libgtk-4-media-ffmpeg.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -${env:MODULES_BASE_PATH}/media/libmedia-ffmpeg.so diff -Nru gtk4-4.12.5+ds/debian/patches/Revert-build-Drop-the-install-tests-option.patch gtk4-4.14.1+ds/debian/patches/Revert-build-Drop-the-install-tests-option.patch --- gtk4-4.12.5+ds/debian/patches/Revert-build-Drop-the-install-tests-option.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/Revert-build-Drop-the-install-tests-option.patch 2024-03-20 16:30:39.000000000 +0000 @@ -21,11 +21,11 @@ testsuite/tools/meson.build | 36 ++++++++++++++++--- 12 files changed, 353 insertions(+), 43 deletions(-) -diff --git a/meson.build b/meson.build -index 0c42d4c..05c71bf 100644 ---- a/meson.build -+++ b/meson.build -@@ -921,6 +921,7 @@ summary('Documentation', get_option('documentation'), section: 'Build') +Index: gtk4-4.14.1+ds/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/meson.build 2024-03-20 16:43:55.077355722 +0100 +@@ -953,6 +953,7 @@ summary('Man pages', get_option('man-pages'), section: 'Build') summary('Testsuite', get_option('build-testsuite'), section: 'Build') summary('Tests', get_option('build-tests'), section: 'Build') @@ -33,11 +33,11 @@ summary('Demos', get_option('build-demos'), section: 'Build') summary('Examples', get_option('build-examples'), section: 'Build') -diff --git a/meson_options.txt b/meson_options.txt -index 4b794e7..a3e0f5e 100644 ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -158,3 +158,8 @@ option('build-tests', +Index: gtk4-4.14.1+ds/meson_options.txt +=================================================================== +--- gtk4-4.14.1+ds.orig/meson_options.txt 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/meson_options.txt 2024-03-20 16:43:55.077355722 +0100 +@@ -153,3 +153,8 @@ type: 'boolean', value: true, description : 'Build tests') @@ -46,10 +46,10 @@ + type: 'boolean', + value: false, + description : 'Install tests') -diff --git a/testsuite/a11y/meson.build b/testsuite/a11y/meson.build -index 2686d6c..e70522d 100644 ---- a/testsuite/a11y/meson.build -+++ b/testsuite/a11y/meson.build +Index: gtk4-4.14.1+ds/testsuite/a11y/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/a11y/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/a11y/meson.build 2024-03-20 16:43:55.077355722 +0100 @@ -1,3 +1,6 @@ +testexecdir = join_paths(installed_test_bindir, 'gtk') +testdatadir = join_paths(installed_test_datadir, 'gtk') @@ -57,7 +57,7 @@ # Available keys for each test: # # - 'name': the test name; used for the test and to determine the base -@@ -67,11 +70,12 @@ foreach t : tests +@@ -69,11 +72,12 @@ test_extra_suites = t.get('suites', []) test_timeout = 60 @@ -72,11 +72,11 @@ ) if test_extra_suites.contains('slow') -diff --git a/testsuite/css/change/meson.build b/testsuite/css/change/meson.build -index f78d27e..e0ef9d4 100644 ---- a/testsuite/css/change/meson.build -+++ b/testsuite/css/change/meson.build -@@ -6,10 +6,17 @@ changetest_env.set('G_TEST_BUILDDIR', meson.current_build_dir()) +Index: gtk4-4.14.1+ds/testsuite/css/change/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/css/change/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/css/change/meson.build 2024-03-20 16:43:55.077355722 +0100 +@@ -6,10 +6,17 @@ changetest_env.set('GSETTINGS_BACKEND', 'memory') changetest_env.set('G_ENABLE_DIAGNOSTIC', '0') @@ -96,7 +96,7 @@ ) test('change', test_change, -@@ -18,3 +25,22 @@ test('change', test_change, +@@ -18,3 +25,22 @@ env: changetest_env, suite: 'css', ) @@ -119,11 +119,11 @@ + install_data(test_data, install_dir: testexecdir) + +endif -diff --git a/testsuite/css/meson.build b/testsuite/css/meson.build -index 746b042..c3ed717 100644 ---- a/testsuite/css/meson.build -+++ b/testsuite/css/meson.build -@@ -12,10 +12,14 @@ subdir('nodes') +Index: gtk4-4.14.1+ds/testsuite/css/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/css/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/css/meson.build 2024-03-20 16:43:55.077355722 +0100 +@@ -12,10 +12,14 @@ subdir('style') subdir('change') @@ -140,7 +140,7 @@ ) test('api', test_api, -@@ -25,11 +29,12 @@ test('api', test_api, +@@ -25,11 +29,12 @@ suite: 'css', ) @@ -155,7 +155,7 @@ ) test('data', test_data, -@@ -39,10 +44,11 @@ test('data', test_data, +@@ -39,10 +44,11 @@ suite: 'css', ) @@ -169,7 +169,7 @@ ) test('transition', transition, -@@ -52,6 +58,24 @@ test('transition', transition, +@@ -52,6 +58,24 @@ suite: 'css' ) @@ -194,11 +194,11 @@ if false and get_option ('profiler') adwaita_env = csstest_env -diff --git a/testsuite/css/nodes/meson.build b/testsuite/css/nodes/meson.build -index f682cdb..a7cb3e2 100644 ---- a/testsuite/css/nodes/meson.build -+++ b/testsuite/css/nodes/meson.build -@@ -6,15 +6,81 @@ nodetest_env.set('G_TEST_BUILDDIR', meson.current_build_dir()) +Index: gtk4-4.14.1+ds/testsuite/css/nodes/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/css/nodes/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/css/nodes/meson.build 2024-03-20 16:43:55.077355722 +0100 +@@ -6,15 +6,81 @@ nodetest_env.set('GSETTINGS_BACKEND', 'memory') nodetest_env.set('G_ENABLE_DIAGNOSTIC', '0') @@ -285,10 +285,10 @@ + + install_data(test_data, install_dir: testexecdir) +endif -diff --git a/testsuite/css/parser/meson.build b/testsuite/css/parser/meson.build -index b05efb7..bfb9936 100644 ---- a/testsuite/css/parser/meson.build -+++ b/testsuite/css/parser/meson.build +Index: gtk4-4.14.1+ds/testsuite/css/parser/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/css/parser/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/css/parser/meson.build 2024-03-20 16:43:55.077355722 +0100 @@ -1,8 +1,11 @@ -test_parser = executable('test-css-parser', - sources: ['test-css-parser.c', '../../testutils.c'], @@ -306,7 +306,7 @@ test_data = [ 'animation-crash-3.12.css', -@@ -623,3 +626,15 @@ foreach testname : test_data +@@ -623,3 +626,15 @@ suite: 'css') endif endforeach @@ -322,11 +322,11 @@ + install_data(test_data, install_dir: testexecdir) + +endif -diff --git a/testsuite/css/style/meson.build b/testsuite/css/style/meson.build -index 7fc4036..52c962c 100644 ---- a/testsuite/css/style/meson.build -+++ b/testsuite/css/style/meson.build -@@ -6,21 +6,73 @@ styletest_env.set('G_TEST_BUILDDIR', meson.current_build_dir()) +Index: gtk4-4.14.1+ds/testsuite/css/style/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/css/style/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/css/style/meson.build 2024-03-20 16:43:55.077355722 +0100 +@@ -6,21 +6,73 @@ styletest_env.set('GSETTINGS_BACKEND', 'memory') styletest_env.set('G_ENABLE_DIAGNOSTIC', '0') @@ -403,10 +403,10 @@ + + install_data(test_data, install_dir: testexecdir) +endif -diff --git a/testsuite/gdk/meson.build b/testsuite/gdk/meson.build -index 2cc27d5..92dc6ab 100644 ---- a/testsuite/gdk/meson.build -+++ b/testsuite/gdk/meson.build +Index: gtk4-4.14.1+ds/testsuite/gdk/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gdk/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/gdk/meson.build 2024-03-20 16:43:55.077355722 +0100 @@ -1,10 +1,13 @@ +testexecdir = join_paths(installed_test_bindir, 'gdk') +testdatadir = join_paths(installed_test_datadir, 'gdk') @@ -427,7 +427,7 @@ tests = [ { 'name': 'array' }, -@@ -33,7 +36,8 @@ foreach t : tests +@@ -38,7 +41,8 @@ sources: '@0@.c'.format(test_name), c_args: common_cflags, dependencies: libgtk_dep, @@ -437,8 +437,8 @@ ) suites = ['gdk'] + t.get('suites', []) -@@ -61,7 +65,8 @@ foreach t : internal_tests - test_exe = executable(t, '@0@.c'.format(t), +@@ -75,7 +79,8 @@ + sources: '@0@.c'.format(test_name), c_args: common_cflags + ['-DGTK_COMPILATION'], dependencies: libgtk_static_dep, - install: false, @@ -446,9 +446,9 @@ + install_dir: testexecdir, ) - test(t, test_exe, -@@ -75,3 +80,28 @@ foreach t : internal_tests - suite: 'gdk', + suites = ['gdk'] + t.get('suites', []) +@@ -91,3 +96,28 @@ + suite: suites, ) endforeach + @@ -476,10 +476,10 @@ + install_subdir('clipboard-data', install_dir: testexecdir) + install_subdir('image-data', install_dir: testexecdir) +endif -diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build -index 7c7e3e9..77cbe47 100644 ---- a/testsuite/gsk/meson.build -+++ b/testsuite/gsk/meson.build +Index: gtk4-4.14.1+ds/testsuite/gsk/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gsk/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/gsk/meson.build 2024-03-20 16:43:55.077355722 +0100 @@ -1,12 +1,22 @@ -compare_render = executable('compare-render', +testexecdir = join_paths(installed_test_bindir, 'gsk') @@ -487,7 +487,7 @@ + +compare_render = executable( + 'compare-render', - ['compare-render.c', '../reftests/reftest-compare.c'], + ['compare-render.c', '../reftests/reftest-compare.c', 'replay-node.c'], dependencies: libgtk_dep, c_args: common_cflags, + install: get_option('install-tests'), @@ -505,39 +505,37 @@ ) compare_render_tests = [ -@@ -380,9 +390,11 @@ foreach t : tests - test_extra_ldflags = t.get(3, []) +@@ -512,8 +522,10 @@ + test_extra_suites = t.get(2, []) test_exe = executable(test_name, test_srcs, - dependencies : libgtk_dep, - c_args : test_cargs + test_extra_cargs + common_cflags, - link_args : test_extra_ldflags, + c_args : test_cargs + common_cflags, + dependencies : libgtk_dep, + install: get_option('install-tests'), + install_dir: testexecdir, ) test(test_name, test_exe, -@@ -411,11 +423,12 @@ foreach t : internal_tests - test_extra_cargs = t.get(2, []) - test_extra_ldflags = t.get(3, []) +@@ -545,10 +557,11 @@ + test_srcs = ['@0@.c'.format(test_name)] + t.get(1, []) + test_extra_suites = t.get(2, []) - test_exe = executable(test_name, - sources: test_srcs, - dependencies : libgtk_static_dep, + test_exe = executable(test_name, test_srcs, - c_args : test_cargs + test_extra_cargs + common_cflags + ['-DGTK_COMPILATION'], - link_args : test_extra_ldflags, + c_args : test_cargs + common_cflags + ['-DGTK_COMPILATION'], + dependencies : libgtk_static_dep, + install: get_option('install-tests'), + install_dir: testexecdir, ) test(test_name, test_exe, -diff --git a/testsuite/gtk/meson.build b/testsuite/gtk/meson.build -index 12b025f..f7700bb 100644 ---- a/testsuite/gtk/meson.build -+++ b/testsuite/gtk/meson.build +Index: gtk4-4.14.1+ds/testsuite/gtk/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gtk/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/gtk/meson.build 2024-03-20 16:43:55.077355722 +0100 @@ -1,3 +1,6 @@ +testexecdir = join_paths(installed_test_bindir, 'gtk') +testdatadir = join_paths(installed_test_datadir, 'gtk') @@ -545,7 +543,7 @@ gtk_tests_export_dynamic_ldflag = [] if cc.get_id() != 'msvc' -@@ -167,6 +170,8 @@ foreach t : tests +@@ -172,6 +175,8 @@ c_args: test_cargs + test_extra_cargs, link_args: test_extra_ldflags, dependencies: libgtk_dep, @@ -554,7 +552,7 @@ ) if test_extra_suites.contains('slow') -@@ -195,6 +200,8 @@ foreach t : internal_tests +@@ -200,6 +205,8 @@ c_args: test_cargs + test_extra_cargs + ['-DGTK_COMPILATION'], link_args: test_extra_ldflags, dependencies: libgtk_static_dep, @@ -563,7 +561,7 @@ ) if test_extra_suites.contains('slow') -@@ -213,8 +220,10 @@ endforeach +@@ -218,8 +225,10 @@ # FIXME: if objc autotestkeywords_CPPFLAGS += -DHAVE_OBJC=1 -x objective-c++ if add_languages('cpp', required: false, native: false) test_exe = executable('autotestkeywords', @@ -575,7 +573,7 @@ ) test('c++ keywords', test_exe, args: [ '--tap', '-k' ], -@@ -222,6 +231,16 @@ if add_languages('cpp', required: false, native: false) +@@ -227,6 +236,16 @@ env: test_env, suite: 'gtk', ) @@ -592,7 +590,7 @@ endif -@@ -247,10 +266,13 @@ focus_chain_tests = [ +@@ -252,10 +271,13 @@ #[ 'widget-factory3', 'tab-backward' ], ] @@ -607,7 +605,7 @@ ) foreach test : focus_chain_tests -@@ -273,6 +295,30 @@ test('potfiles', make_pot, +@@ -278,6 +300,30 @@ workdir: meson.project_source_root(), suite: ['gtk', 'translations' ]) @@ -638,10 +636,10 @@ if false and get_option ('profiler') performance_env = test_env -diff --git a/testsuite/tools/meson.build b/testsuite/tools/meson.build -index e19a819..54ede78 100644 ---- a/testsuite/tools/meson.build -+++ b/testsuite/tools/meson.build +Index: gtk4-4.14.1+ds/testsuite/tools/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/meson.build 2024-03-20 16:43:55.081355618 +0100 ++++ gtk4-4.14.1+ds/testsuite/tools/meson.build 2024-03-20 16:43:55.077355722 +0100 @@ -1,12 +1,23 @@ +testexecdir = join_paths(installed_test_bindir, 'tools') +testdatadir = join_paths(installed_test_datadir, 'tools') @@ -670,7 +668,7 @@ test(t, bash, args: t, workdir: meson.current_build_dir(), -@@ -23,3 +34,20 @@ if bash.found() +@@ -23,3 +34,20 @@ ) endforeach endif diff -Nru gtk4-4.12.5+ds/debian/patches/Revert-tests-Stop-copying-the-tool-tests.patch gtk4-4.14.1+ds/debian/patches/Revert-tests-Stop-copying-the-tool-tests.patch --- gtk4-4.12.5+ds/debian/patches/Revert-tests-Stop-copying-the-tool-tests.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/Revert-tests-Stop-copying-the-tool-tests.patch 2024-03-20 16:30:39.000000000 +0000 @@ -30,11 +30,10 @@ delete mode 100755 testsuite/tools/validate create mode 100755 testsuite/tools/validate.in -diff --git a/testsuite/tools/enumerate b/testsuite/tools/enumerate -deleted file mode 100755 -index 8abd9d6..0000000 ---- a/testsuite/tools/enumerate -+++ /dev/null +Index: gtk4-4.14.1+ds/testsuite/tools/enumerate +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/enumerate 2024-03-20 16:43:24.270166749 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -#! /bin/bash - @@ -73,11 +72,10 @@ - - I=$((I+1)) -done -diff --git a/testsuite/tools/enumerate.in b/testsuite/tools/enumerate.in -new file mode 100755 -index 0000000..8abd9d6 ---- /dev/null -+++ b/testsuite/tools/enumerate.in +Index: gtk4-4.14.1+ds/testsuite/tools/enumerate.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gtk4-4.14.1+ds/testsuite/tools/enumerate.in 2024-03-20 16:43:24.258167070 +0100 @@ -0,0 +1,37 @@ +#! /bin/bash + @@ -116,11 +114,11 @@ + + I=$((I+1)) +done -diff --git a/testsuite/tools/meson.build b/testsuite/tools/meson.build -index 239e1b0..e19a819 100644 ---- a/testsuite/tools/meson.build -+++ b/testsuite/tools/meson.build -@@ -3,8 +3,12 @@ if bash.found() +Index: gtk4-4.14.1+ds/testsuite/tools/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/meson.build 2024-03-20 16:43:24.270166749 +0100 ++++ gtk4-4.14.1+ds/testsuite/tools/meson.build 2024-03-20 16:43:24.258167070 +0100 +@@ -3,8 +3,12 @@ test_env = environment() foreach t : ['simplify', 'simplify-3to4', 'validate', 'enumerate', 'settings'] @@ -135,11 +133,10 @@ workdir: meson.current_build_dir(), protocol: 'tap', env: [ -diff --git a/testsuite/tools/settings b/testsuite/tools/settings -deleted file mode 100755 -index 3c5ce69..0000000 ---- a/testsuite/tools/settings -+++ /dev/null +Index: gtk4-4.14.1+ds/testsuite/tools/settings +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/settings 2024-03-20 16:43:24.270166749 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -#! /bin/bash - @@ -153,7 +150,7 @@ -name=gtk-query-settings -result=$TEST_RESULT_DIR/$name.out -$GTK_QUERY_SETTINGS 2>/dev/null >$result --EXPECTED=50 +-EXPECTED=51 -SEEN=$(wc -l $result | cut -f1 -d' ') - -if [ $SEEN -eq $EXPECTED ]; then @@ -161,11 +158,10 @@ -else - echo "not ok 1 $name. Expected: $EXPECTED. Seen: $SEEN" -fi -diff --git a/testsuite/tools/settings.in b/testsuite/tools/settings.in -new file mode 100755 -index 0000000..3c5ce69 ---- /dev/null -+++ b/testsuite/tools/settings.in +Index: gtk4-4.14.1+ds/testsuite/tools/settings.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gtk4-4.14.1+ds/testsuite/tools/settings.in 2024-03-20 16:43:24.258167070 +0100 @@ -0,0 +1,20 @@ +#! /bin/bash + @@ -179,7 +175,7 @@ +name=gtk-query-settings +result=$TEST_RESULT_DIR/$name.out +$GTK_QUERY_SETTINGS 2>/dev/null >$result -+EXPECTED=50 ++EXPECTED=51 +SEEN=$(wc -l $result | cut -f1 -d' ') + +if [ $SEEN -eq $EXPECTED ]; then @@ -187,11 +183,10 @@ +else + echo "not ok 1 $name. Expected: $EXPECTED. Seen: $SEEN" +fi -diff --git a/testsuite/tools/simplify b/testsuite/tools/simplify -deleted file mode 100755 -index 12b4cea..0000000 ---- a/testsuite/tools/simplify -+++ /dev/null +Index: gtk4-4.14.1+ds/testsuite/tools/simplify +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/simplify 2024-03-20 16:43:24.270166749 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -#! /bin/bash - @@ -240,11 +235,10 @@ - - I=$((I+1)) -done -diff --git a/testsuite/tools/simplify-3to4 b/testsuite/tools/simplify-3to4 -deleted file mode 100755 -index 0a97f1a..0000000 ---- a/testsuite/tools/simplify-3to4 -+++ /dev/null +Index: gtk4-4.14.1+ds/testsuite/tools/simplify-3to4 +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/simplify-3to4 2024-03-20 16:43:24.270166749 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -#! /bin/bash - @@ -293,11 +287,10 @@ - - I=$((I+1)) -done -diff --git a/testsuite/tools/simplify-3to4.in b/testsuite/tools/simplify-3to4.in -new file mode 100755 -index 0000000..0a97f1a ---- /dev/null -+++ b/testsuite/tools/simplify-3to4.in +Index: gtk4-4.14.1+ds/testsuite/tools/simplify-3to4.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gtk4-4.14.1+ds/testsuite/tools/simplify-3to4.in 2024-03-20 16:43:24.258167070 +0100 @@ -0,0 +1,47 @@ +#! /bin/bash + @@ -346,11 +339,10 @@ + + I=$((I+1)) +done -diff --git a/testsuite/tools/simplify.in b/testsuite/tools/simplify.in -new file mode 100755 -index 0000000..12b4cea ---- /dev/null -+++ b/testsuite/tools/simplify.in +Index: gtk4-4.14.1+ds/testsuite/tools/simplify.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gtk4-4.14.1+ds/testsuite/tools/simplify.in 2024-03-20 16:43:24.258167070 +0100 @@ -0,0 +1,47 @@ +#! /bin/bash + @@ -399,18 +391,20 @@ + + I=$((I+1)) +done -diff --git a/testsuite/tools/validate b/testsuite/tools/validate -deleted file mode 100755 -index 414a505..0000000 ---- a/testsuite/tools/validate -+++ /dev/null -@@ -1,37 +0,0 @@ +Index: gtk4-4.14.1+ds/testsuite/tools/validate +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/tools/validate 2024-03-20 16:43:24.270166749 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,40 +0,0 @@ -#! /bin/bash - -GTK_BUILDER_TOOL=${GTK_BUILDER_TOOL:-gtk4-builder-tool} -TEST_DATA_DIR=${G_TEST_SRCDIR:-.}/validate-data -TEST_RESULT_DIR=${TEST_RESULT_DIR:-/tmp}/validate - +-# https://gitlab.freedesktop.org/mesa/mesa/-/issues/10293 +-export LIBGL_ALWAYS_SOFTWARE=true +- -mkdir -p "$TEST_RESULT_DIR" - -shopt -s nullglob @@ -442,12 +436,11 @@ - - I=$((I+1)) -done -diff --git a/testsuite/tools/validate.in b/testsuite/tools/validate.in -new file mode 100755 -index 0000000..414a505 ---- /dev/null -+++ b/testsuite/tools/validate.in -@@ -0,0 +1,37 @@ +Index: gtk4-4.14.1+ds/testsuite/tools/validate.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gtk4-4.14.1+ds/testsuite/tools/validate.in 2024-03-20 16:43:46.361582680 +0100 +@@ -0,0 +1,40 @@ +#! /bin/bash + +GTK_BUILDER_TOOL=${GTK_BUILDER_TOOL:-gtk4-builder-tool} @@ -456,6 +449,9 @@ + +mkdir -p "$TEST_RESULT_DIR" + ++# https://gitlab.freedesktop.org/mesa/mesa/-/issues/10293 ++export LIBGL_ALWAYS_SOFTWARE=true ++ +shopt -s nullglob +TESTS=( "$TEST_DATA_DIR"/*.ui ) + diff -Nru gtk4-4.12.5+ds/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch gtk4-4.14.1+ds/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch --- gtk4-4.12.5+ds/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/Disable-inscription-markup.ui-reftest.patch 2024-03-20 16:30:39.000000000 +0000 @@ -12,10 +12,10 @@ 1 file changed, 2 insertions(+) diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build -index 7aa0498..f83c14a 100644 +index 9a3288d..e73e6cd 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build -@@ -615,6 +615,8 @@ flaky = [ +@@ -619,6 +619,8 @@ flaky = [ 'shorthand-entry-border.ui', # blinking cursors and timing issues make this unreliable 'fixed-widget-stacking.ui', diff -Nru gtk4-4.12.5+ds/debian/patches/debian/big-endian-memorytexture.patch gtk4-4.14.1+ds/debian/patches/debian/big-endian-memorytexture.patch --- gtk4-4.12.5+ds/debian/patches/debian/big-endian-memorytexture.patch 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/big-endian-memorytexture.patch 2024-03-20 16:30:39.000000000 +0000 @@ -0,0 +1,22 @@ +Subject: tests: Mark memorytexture as expected to fail on big-endian machines + +Forwarded: not-needed, workaround +--- + testsuite/gdk/meson.build | 4 ++++ + 1 file changed, 4 insertions(+) + +Index: gtk4-4.14.1+ds/testsuite/gdk/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gdk/meson.build 2024-03-20 21:38:40.000000000 +0100 ++++ gtk4-4.14.1+ds/testsuite/gdk/meson.build 2024-03-20 21:38:40.000000000 +0100 +@@ -47,6 +47,10 @@ + + suites = ['gdk'] + t.get('suites', []) + ++ if host_machine.endian() == 'big' and t.get('name') == 'memorytexture' ++ suites += 'failing' ++ endif ++ + test(test_name, test_exe, + args: [ '--tap', '-k' ], + protocol: 'tap', diff -Nru gtk4-4.12.5+ds/debian/patches/debian/ignore_a11ytext_i386.patch gtk4-4.14.1+ds/debian/patches/debian/ignore_a11ytext_i386.patch --- gtk4-4.12.5+ds/debian/patches/debian/ignore_a11ytext_i386.patch 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/ignore_a11ytext_i386.patch 2024-03-20 16:30:39.000000000 +0000 @@ -0,0 +1,19 @@ +Index: gtk4-4.13.8+ds/testsuite/a11y/meson.build +=================================================================== +--- gtk4-4.13.8+ds.orig/testsuite/a11y/meson.build 2024-03-07 09:46:16.424680512 +0100 ++++ gtk4-4.13.8+ds/testsuite/a11y/meson.build 2024-03-07 10:13:14.419699019 +0100 +@@ -112,6 +112,14 @@ + test_timeout = 90 + endif + ++ if host_machine.cpu_family() == 'x86' and test_name == 'text' ++ test_extra_suites += 'failing' ++ endif ++ ++ if host_machine.cpu_family() == 'x86' and test_name == 'textview' ++ test_extra_suites += 'failing' ++ endif ++ + test(test_name, test_exe, + args: [ '--tap', '-k' ], + protocol: 'tap', diff -Nru gtk4-4.12.5+ds/debian/patches/debian/media-Use-gstplayer-from-meson-subproject.patch gtk4-4.14.1+ds/debian/patches/debian/media-Use-gstplayer-from-meson-subproject.patch --- gtk4-4.12.5+ds/debian/patches/debian/media-Use-gstplayer-from-meson-subproject.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/media-Use-gstplayer-from-meson-subproject.patch 2024-03-20 16:30:39.000000000 +0000 @@ -8,13 +8,13 @@ modules/media/meson.build | 3 +++ 1 file changed, 3 insertions(+) -diff --git a/modules/media/meson.build b/modules/media/meson.build -index 74364e6..556098f 100644 ---- a/modules/media/meson.build -+++ b/modules/media/meson.build -@@ -39,6 +39,9 @@ if ffmpeg_found - ) - endif +Index: gtk4/modules/media/meson.build +=================================================================== +--- gtk4.orig/modules/media/meson.build 2024-02-27 12:22:04.429024981 +0100 ++++ gtk4/modules/media/meson.build 2024-02-27 12:22:04.425025042 +0100 +@@ -5,6 +5,9 @@ + extra_c_args = ['-DGTK_COMPILATION'] + extra_c_args += common_cflags +subproject('gstreamer-player-1.0', + required: get_option('media-gstreamer'), diff -Nru gtk4-4.12.5+ds/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch gtk4-4.14.1+ds/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch --- gtk4-4.12.5+ds/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/reftest_compare_surfaces-Report-how-much-the-images-diffe.patch 2024-03-20 16:30:39.000000000 +0000 @@ -10,41 +10,41 @@ Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3195 Applied-upstream: no, upstream want reftests to be a strict pass/fail with identical results required --- - testsuite/gsk/compare-render.c | 28 +++++++++++++++++++++++----- + testsuite/gsk/compare-render.c | 33 +++++++++++++++++++++++++++------ testsuite/reftests/gtk-reftest.c | 9 ++++++++- testsuite/reftests/reftest-compare.c | 28 +++++++++++++++++++++++++--- - testsuite/reftests/reftest-compare.h | 5 ++++- - 4 files changed, 60 insertions(+), 10 deletions(-) + testsuite/reftests/reftest-compare.h | 6 +++++- + 4 files changed, 65 insertions(+), 11 deletions(-) -diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c -index 7ba25ad..e26b16c 100644 ---- a/testsuite/gsk/compare-render.c -+++ b/testsuite/gsk/compare-render.c -@@ -229,6 +229,9 @@ main (int argc, char **argv) +Index: gtk4-4.14.1+ds/testsuite/gsk/compare-render.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gsk/compare-render.c 2024-03-20 21:24:00.036733677 +0100 ++++ gtk4-4.14.1+ds/testsuite/gsk/compare-render.c 2024-03-20 21:24:00.036733677 +0100 +@@ -318,6 +318,9 @@ GError *error = NULL; GOptionContext *context; - GdkTexture *diff_texture; + GdkTexture *diff_texture = NULL; + guint max_diff = 0; + guint pixels_changed = 0; + guint pixels = 0; (g_test_init) (&argc, &argv, NULL); -@@ -283,9 +286,12 @@ main (int argc, char **argv) - } +@@ -377,9 +380,12 @@ + } - /* Now compare the two */ -- diff_texture = reftest_compare_textures (rendered_texture, reference_texture); -+ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, -+ &max_diff, &pixels_changed, &pixels); - if (diff_texture) - { -+ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", -+ pixels_changed, pixels, max_diff); - save_image (diff_texture, node_file, ".diff.png"); - g_object_unref (diff_texture); - success = FALSE; -@@ -317,10 +323,13 @@ main (int argc, char **argv) + /* Now compare the two */ +- diff_texture = reftest_compare_textures (rendered_texture, reference_texture); ++ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, ++ &max_diff, &pixels_changed, &pixels); + if (diff_texture) + { ++ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", ++ pixels_changed, pixels, max_diff); + save_image (diff_texture, node_file, ".diff.png"); + success = FALSE; + } +@@ -412,10 +418,13 @@ save_image (reference_texture, node_file, "-flipped.ref.png"); @@ -57,9 +57,9 @@ + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-flipped.diff.png"); - g_object_unref (diff_texture); success = FALSE; -@@ -390,10 +399,13 @@ main (int argc, char **argv) + } +@@ -478,10 +487,13 @@ save_image (reference_texture, node_file, "-repeated.ref.png"); @@ -72,9 +72,9 @@ + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-repeated.diff.png"); - g_object_unref (diff_texture); success = FALSE; -@@ -427,10 +439,13 @@ main (int argc, char **argv) + } +@@ -515,10 +527,13 @@ save_image (reference_texture, node_file, "-rotated.ref.png"); @@ -87,9 +87,9 @@ + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-rotated.diff.png"); - g_object_unref (diff_texture); success = FALSE; -@@ -473,10 +488,13 @@ main (int argc, char **argv) + } +@@ -572,10 +587,13 @@ save_image (reference_texture, node_file, "-masked.ref.png"); @@ -102,13 +102,38 @@ + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-masked.diff.png"); - g_object_unref (diff_texture); success = FALSE; -diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c -index 2ba47a4..046751d 100644 ---- a/testsuite/reftests/gtk-reftest.c -+++ b/testsuite/reftests/gtk-reftest.c -@@ -341,6 +341,9 @@ test_ui_file (GFile *file) + } +@@ -613,10 +631,13 @@ + g_assert_nonnull (rendered_texture); + g_assert_nonnull (rendered_texture2); + +- diff_texture = reftest_compare_textures (rendered_texture, rendered_texture2); ++ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, ++ &max_diff, &pixels_changed, &pixels); + + if (diff_texture) + { ++ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", ++ pixels_changed, pixels, max_diff); + save_image (diff_texture, node_file, "-replayed.diff.png"); + success = FALSE; + } +@@ -668,7 +689,8 @@ + + save_image (reference_texture, node_file, "-clipped.ref.png"); + +- diff_texture = reftest_compare_textures (rendered_texture, reference_texture); ++ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, ++ &max_diff, &pixels_changed, &pixels); + + if (diff_texture) + { +Index: gtk4-4.14.1+ds/testsuite/reftests/gtk-reftest.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/reftests/gtk-reftest.c 2024-03-20 21:24:00.036733677 +0100 ++++ gtk4-4.14.1+ds/testsuite/reftests/gtk-reftest.c 2024-03-20 21:24:00.036733677 +0100 +@@ -341,6 +341,9 @@ char *ui_file, *reference_file; GdkTexture *ui_image, *reference_image, *diff_image; GtkStyleProvider *provider; @@ -118,7 +143,7 @@ ui_file = g_file_get_path (file); -@@ -372,12 +375,16 @@ test_ui_file (GFile *file) +@@ -372,12 +375,16 @@ if (reference_image == NULL) reference_image = gdk_memory_texture_new (1, 1, GDK_MEMORY_DEFAULT, g_bytes_new ((guchar[4]) {0, 0, 0, 0}, 4), 4); @@ -136,16 +161,16 @@ save_node (g_object_get_data (G_OBJECT (ui_image), "source-render-node"), ui_file, ".out.node"); save_node (g_object_get_data (G_OBJECT (reference_image), "source-render-node"), ui_file, ".ref.node"); save_image (diff_image, ui_file, ".diff.png"); -diff --git a/testsuite/reftests/reftest-compare.c b/testsuite/reftests/reftest-compare.c -index bb6c6eb..202fcf5 100644 ---- a/testsuite/reftests/reftest-compare.c -+++ b/testsuite/reftests/reftest-compare.c -@@ -35,12 +35,16 @@ buffer_diff_core (const guchar *buf_a, +Index: gtk4-4.14.1+ds/testsuite/reftests/reftest-compare.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/reftests/reftest-compare.c 2024-03-20 21:24:00.036733677 +0100 ++++ gtk4-4.14.1+ds/testsuite/reftests/reftest-compare.c 2024-03-20 21:24:00.036733677 +0100 +@@ -35,12 +35,16 @@ const guchar *buf_b, int stride_b, int width, - int height) -+ int height, ++ int height, + guint *max_diff_out, + guint *pixels_changed_out) { @@ -158,7 +183,7 @@ for (y = 0; y < height; y++) { -@@ -84,6 +88,10 @@ buffer_diff_core (const guchar *buf_a, +@@ -84,6 +88,10 @@ guint channel_diff; channel_diff = ABS (value_a - value_b); @@ -169,7 +194,7 @@ channel_diff *= 4; /* emphasize */ if (channel_diff) channel_diff += 128; /* make sure it's visible */ -@@ -92,6 +100,8 @@ buffer_diff_core (const guchar *buf_a, +@@ -92,6 +100,8 @@ diff_pixel |= channel_diff << (channel * 8); } @@ -178,7 +203,7 @@ if ((diff_pixel & 0x00ffffff) == 0) { /* alpha only difference, convert to luminance */ -@@ -105,12 +115,21 @@ buffer_diff_core (const guchar *buf_a, +@@ -105,12 +115,21 @@ } } @@ -201,7 +226,7 @@ { int w, h; guchar *data1, *data2; -@@ -126,10 +145,13 @@ reftest_compare_textures (GdkTexture *texture1, +@@ -126,10 +145,13 @@ diff = buffer_diff_core (data1, w * 4, data2, w * 4, @@ -216,11 +241,11 @@ + return diff; } -diff --git a/testsuite/reftests/reftest-compare.h b/testsuite/reftests/reftest-compare.h -index d5e02a1..b71636e 100644 ---- a/testsuite/reftests/reftest-compare.h -+++ b/testsuite/reftests/reftest-compare.h -@@ -24,7 +24,10 @@ G_BEGIN_DECLS +Index: gtk4-4.14.1+ds/testsuite/reftests/reftest-compare.h +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/reftests/reftest-compare.h 2024-03-20 21:24:00.036733677 +0100 ++++ gtk4-4.14.1+ds/testsuite/reftests/reftest-compare.h 2024-03-20 21:24:00.036733677 +0100 +@@ -23,6 +23,10 @@ G_MODULE_EXPORT GdkTexture * reftest_compare_textures (GdkTexture *texture1, @@ -231,4 +256,53 @@ + guint *pixels_out); G_END_DECLS ++ +Index: gtk4-4.14.1+ds/testsuite/gsk/normalize.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gsk/normalize.c 2024-03-20 21:24:00.036733677 +0100 ++++ gtk4-4.14.1+ds/testsuite/gsk/normalize.c 2024-03-20 21:24:00.036733677 +0100 +@@ -9,6 +9,9 @@ + GskRenderer *renderer = gsk_ngl_renderer_new (); + graphene_rect_t bounds1, bounds2; + GdkTexture *texture1, *texture2, *diff; ++ guint max_diff = 0; ++ guint pixels_changed = 0; ++ guint pixels = 0; + GError *error = NULL; + gsk_renderer_realize_for_display (renderer, gdk_display_get_default (), &error); +@@ -20,7 +23,8 @@ + texture1 = gsk_renderer_render_texture (renderer, node1, &bounds1); + texture2 = gsk_renderer_render_texture (renderer, node2, &bounds2); + +- diff = reftest_compare_textures (texture1, texture2); ++ diff = reftest_compare_textures (texture1, texture2, ++ &max_diff, &pixels_changed, &pixels); + g_assert_null (diff); + + g_object_unref (texture1); +Index: gtk4-4.14.1+ds/tools/gtk-rendernode-tool-compare.c +=================================================================== +--- gtk4-4.14.1+ds.orig/tools/gtk-rendernode-tool-compare.c 2024-03-20 17:33:55.000000000 +0100 ++++ gtk4-4.14.1+ds/tools/gtk-rendernode-tool-compare.c 2024-03-20 21:26:45.899590456 +0100 +@@ -74,6 +74,9 @@ + GdkTexture *texture[2]; + GdkTexture *diff; + GError *error = NULL; ++ guint max_diff = 0; ++ guint pixels_changed = 0; ++ guint pixels = 0; + + g_set_prgname ("gtk4-rendernode-tool compare"); + context = g_option_context_new (NULL); +@@ -113,8 +116,8 @@ + } + } + +- diff = reftest_compare_textures (texture[0], texture[1]); +- ++ diff = reftest_compare_textures (texture[0], texture[1], ++ &max_diff, &pixels_changed, &pixels); + if (opt_filename && diff) + { + if (!gdk_texture_save_to_png (diff, opt_filename)) diff -Nru gtk4-4.12.5+ds/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch gtk4-4.14.1+ds/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch --- gtk4-4.12.5+ds/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/reftests-Allow-minor-differences-to-be-tolerated.patch 2024-03-20 16:30:39.000000000 +0000 @@ -27,11 +27,11 @@ testsuite/reftests/image-compare.c | 2 +- 3 files changed, 113 insertions(+), 7 deletions(-) -diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c -index e26b16c..873e5ce 100644 ---- a/testsuite/gsk/compare-render.c -+++ b/testsuite/gsk/compare-render.c -@@ -102,6 +102,37 @@ get_output_file (const char *file, +Index: gtk4-4.14.1+ds/testsuite/gsk/compare-render.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gsk/compare-render.c 2024-03-21 14:24:08.961300477 +0100 ++++ gtk4-4.14.1+ds/testsuite/gsk/compare-render.c 2024-03-21 14:24:16.929203666 +0100 +@@ -111,6 +111,37 @@ return result; } @@ -69,39 +69,35 @@ static void save_image (GdkTexture *texture, const char *test_name, -@@ -290,11 +321,20 @@ main (int argc, char **argv) - &max_diff, &pixels_changed, &pixels); - if (diff_texture) - { -+ guint64 tolerated_diff = 0; -+ guint64 tolerated_pixels = 0; -+ - g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", - pixels_changed, pixels, max_diff); - save_image (diff_texture, node_file, ".diff.png"); - g_object_unref (diff_texture); -- success = FALSE; +@@ -384,10 +415,18 @@ + &max_diff, &pixels_changed, &pixels); + if (diff_texture) + { ++ guint64 tolerated_diff = 0; ++ guint64 tolerated_pixels = 0; + -+ load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); + save_image (diff_texture, node_file, ".diff.png"); +- success = FALSE; ++ load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); + -+ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) -+ g_print ("not right, but close enough?\n"); -+ else -+ success = FALSE; - } ++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) ++ g_print ("not right, but close enough?\n"); ++ else ++ success = FALSE; + } - g_clear_object (&reference_texture); -@@ -328,11 +368,20 @@ main (int argc, char **argv) + g_clear_object (&diff_texture); +@@ -423,10 +462,19 @@ if (diff_texture) { + guint64 tolerated_diff = 0; + guint64 tolerated_pixels = 0; -+ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-flipped.diff.png"); - g_object_unref (diff_texture); - success = FALSE; + + load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); @@ -110,10 +106,11 @@ + g_print ("not right, but close enough?\n"); + else + success = FALSE; ++ } - g_clear_object (&rendered_texture); -@@ -404,11 +453,20 @@ main (int argc, char **argv) + g_clear_object (&diff_texture); +@@ -492,10 +540,19 @@ if (diff_texture) { @@ -123,7 +120,6 @@ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-repeated.diff.png"); - g_object_unref (diff_texture); - success = FALSE; + + load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); @@ -134,8 +130,8 @@ + success = FALSE; } - g_clear_object (&rendered_texture); -@@ -444,11 +502,20 @@ main (int argc, char **argv) + g_clear_object (&diff_texture); +@@ -532,10 +589,19 @@ if (diff_texture) { @@ -145,7 +141,6 @@ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-rotated.diff.png"); - g_object_unref (diff_texture); - success = FALSE; + + load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); @@ -156,8 +151,8 @@ + success = FALSE; } - g_clear_object (&rendered_texture); -@@ -493,11 +560,20 @@ main (int argc, char **argv) + g_clear_object (&diff_texture); +@@ -592,10 +658,19 @@ if (diff_texture) { @@ -167,7 +162,6 @@ g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", pixels_changed, pixels, max_diff); save_image (diff_texture, node_file, "-masked.diff.png"); - g_object_unref (diff_texture); - success = FALSE; + + load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); @@ -178,12 +172,77 @@ + success = FALSE; } - g_clear_object (&rendered_texture); -diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c -index 046751d..5945aa8 100644 ---- a/testsuite/reftests/gtk-reftest.c -+++ b/testsuite/reftests/gtk-reftest.c -@@ -302,6 +302,12 @@ save_image (GdkTexture *texture, + g_clear_object (&diff_texture); +@@ -636,10 +711,19 @@ + + if (diff_texture) + { ++ guint64 tolerated_diff = 0; ++ guint64 tolerated_pixels = 0; ++ + g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n", + pixels_changed, pixels, max_diff); + save_image (diff_texture, node_file, "-replayed.diff.png"); +- success = FALSE; ++ ++ load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); ++ ++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) ++ g_print ("not right, but close enough?\n"); ++ else ++ success = FALSE; + } + + g_clear_object (&diff_texture); +@@ -694,8 +778,17 @@ + + if (diff_texture) + { ++ guint64 tolerated_diff = 0; ++ guint64 tolerated_pixels = 0; ++ + save_image (diff_texture, node_file, "-clipped.diff.png"); +- success = FALSE; ++ ++ load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); ++ ++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) ++ g_print ("not right, but close enough?\n"); ++ else ++ success = FALSE; + } + + g_clear_object (&diff_texture); +@@ -733,12 +826,22 @@ + + save_image (reference_texture, node_file, "-colorflipped.ref.png"); + +- diff_texture = reftest_compare_textures (rendered_texture, reference_texture); ++ diff_texture = reftest_compare_textures (rendered_texture, reference_texture, ++ &max_diff, &pixels_changed, &pixels); + + if (diff_texture) + { ++ guint64 tolerated_diff = 0; ++ guint64 tolerated_pixels = 0; ++ + save_image (diff_texture, node_file, "-colorflipped.diff.png"); +- success = FALSE; ++ ++ load_test_settings (node_file, &tolerated_diff, &tolerated_pixels); ++ ++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels) ++ g_print ("not right, but close enough?\n"); ++ else ++ success = FALSE; + } + + g_clear_object (&diff_texture); +Index: gtk4-4.14.1+ds/testsuite/reftests/gtk-reftest.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/reftests/gtk-reftest.c 2024-03-21 14:24:08.961300477 +0100 ++++ gtk4-4.14.1+ds/testsuite/reftests/gtk-reftest.c 2024-03-21 14:24:08.957300525 +0100 +@@ -302,6 +302,12 @@ g_free (filename); } @@ -196,7 +255,7 @@ static void save_node (GskRenderNode *node, const char *test_name, -@@ -383,13 +389,37 @@ test_ui_file (GFile *file) +@@ -383,13 +389,37 @@ if (diff_image) { @@ -235,11 +294,11 @@ } remove_extra_css (provider); -diff --git a/testsuite/reftests/image-compare.c b/testsuite/reftests/image-compare.c -index dd9c26c..e68a161 100644 ---- a/testsuite/reftests/image-compare.c -+++ b/testsuite/reftests/image-compare.c -@@ -51,7 +51,7 @@ main (int argc, char **argv) +Index: gtk4-4.14.1+ds/testsuite/reftests/image-compare.c +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/reftests/image-compare.c 2024-03-21 14:24:08.961300477 +0100 ++++ gtk4-4.14.1+ds/testsuite/reftests/image-compare.c 2024-03-21 14:24:08.957300525 +0100 +@@ -51,7 +51,7 @@ exit (1); } diff -Nru gtk4-4.12.5+ds/debian/patches/debian/tests-Mark-gltexture-as-expected-to-fail-on-big-endian-ma.patch gtk4-4.14.1+ds/debian/patches/debian/tests-Mark-gltexture-as-expected-to-fail-on-big-endian-ma.patch --- gtk4-4.12.5+ds/debian/patches/debian/tests-Mark-gltexture-as-expected-to-fail-on-big-endian-ma.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/debian/tests-Mark-gltexture-as-expected-to-fail-on-big-endian-ma.patch 2024-03-20 16:30:39.000000000 +0000 @@ -4,32 +4,21 @@ Forwarded: not-needed, workaround --- - testsuite/gdk/meson.build | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) + testsuite/gdk/meson.build | 4 ++++ + 1 file changed, 4 insertions(+) -diff --git a/testsuite/gdk/meson.build b/testsuite/gdk/meson.build -index 92dc6ab..842e1ab 100644 ---- a/testsuite/gdk/meson.build -+++ b/testsuite/gdk/meson.build -@@ -69,6 +69,12 @@ foreach t : internal_tests - install_dir: testexecdir, - ) +Index: gtk4-4.14.1+ds/testsuite/gdk/meson.build +=================================================================== +--- gtk4-4.14.1+ds.orig/testsuite/gdk/meson.build 2024-03-20 17:00:36.058661277 +0100 ++++ gtk4-4.14.1+ds/testsuite/gdk/meson.build 2024-03-20 17:00:36.054661336 +0100 +@@ -85,6 +85,10 @@ -+ suites = ['gdk'] -+ -+ if host_machine.endian() == 'big' and t == 'gltexture' + suites = ['gdk'] + t.get('suites', []) + ++ if host_machine.endian() == 'big' and t.get('name') == 'gltexture' + suites += 'failing' + endif + - test(t, test_exe, + test(test_name, test_exe, args: [ '--tap', '-k' ], protocol: 'tap', -@@ -77,7 +83,7 @@ foreach t : internal_tests - 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), - 'DBUS_SESSION_BUS_ADDRESS=', - ], -- suite: 'gdk', -+ suite: suites, - ) - endforeach - diff -Nru gtk4-4.12.5+ds/debian/patches/gsk-Always-use-RGBA-on-big-endian-architectures.patch gtk4-4.14.1+ds/debian/patches/gsk-Always-use-RGBA-on-big-endian-architectures.patch --- gtk4-4.12.5+ds/debian/patches/gsk-Always-use-RGBA-on-big-endian-architectures.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/gsk-Always-use-RGBA-on-big-endian-architectures.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -From: Simon McVittie -Date: Fri, 8 Dec 2023 16:42:56 +0000 -Subject: gsk: Always use RGBA on big-endian architectures - -The memorytexture test started failing on big-endian CPUs while using -"desktop" GL (not GLES) in commit b0e26873 "gsk: Use has_bgra in more -places". The subsequent commit f5812808 "gsk: Restore bigendian support" -was meant to fix this, but it seems it did not. - -Always taking the RGBA code-path on big-endian might not be optimal, -but it seems to result in the test passing again. - -Signed-off-by: Simon McVittie -Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/6260 -Bug-Debian: https://bugs.debian.org/1057782 -Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6653 ---- - gsk/gl/gskglglyphlibrary.c | 16 +++++++++++----- - gsk/gl/gskgliconlibrary.c | 16 +++++++++++----- - 2 files changed, 22 insertions(+), 10 deletions(-) - -diff --git a/gsk/gl/gskglglyphlibrary.c b/gsk/gl/gskglglyphlibrary.c -index 2e6d4da..981a5f8 100644 ---- a/gsk/gl/gskglglyphlibrary.c -+++ b/gsk/gl/gskglglyphlibrary.c -@@ -95,6 +95,16 @@ gsk_gl_glyph_library_clear_cache (GskGLTextureLibrary *library) - memset (self->front, 0, sizeof self->front); - } - -+static gboolean -+can_use_bgra (void) -+{ -+#if G_BYTE_ORDER == G_BIG_ENDIAN -+ return FALSE; -+#else -+ return gdk_gl_context_has_bgra (gdk_gl_context_get_current ()); -+#endif -+} -+ - static void - gsk_gl_glyph_library_init_atlas (GskGLTextureLibrary *self, - GskGLTextureAtlas *atlas) -@@ -119,11 +129,7 @@ gsk_gl_glyph_library_init_atlas (GskGLTextureLibrary *self, - - memset (pixel_data, 255, sizeof pixel_data); - -- if (!gdk_gl_context_has_bgra (gdk_gl_context_get_current ()) --#if G_BYTE_ORDER == G_BIG_ENDIAN -- || gdk_gl_context_get_use_es (gdk_gl_context_get_current ()) --#endif -- ) -+ if (!can_use_bgra ()) - { - gl_format = GL_RGBA; - gl_type = GL_UNSIGNED_BYTE; -diff --git a/gsk/gl/gskgliconlibrary.c b/gsk/gl/gskgliconlibrary.c -index 9040d8e..9ea87da 100644 ---- a/gsk/gl/gskgliconlibrary.c -+++ b/gsk/gl/gskgliconlibrary.c -@@ -71,6 +71,16 @@ gsk_gl_icon_library_init (GskGLIconLibrary *self) - gsk_gl_icon_data_free); - } - -+static gboolean -+can_use_bgra (void) -+{ -+#if G_BYTE_ORDER == G_BIG_ENDIAN -+ return FALSE; -+#else -+ return gdk_gl_context_has_bgra (gdk_gl_context_get_current ()); -+#endif -+} -+ - void - gsk_gl_icon_library_add (GskGLIconLibrary *self, - GdkTexture *key, -@@ -111,11 +121,7 @@ gsk_gl_icon_library_add (GskGLIconLibrary *self, - gdk_gl_context_push_debug_group_printf (gdk_gl_context_get_current (), - "Uploading texture"); - -- if (!gdk_gl_context_has_bgra (gdk_gl_context_get_current ()) --#if G_BYTE_ORDER == G_BIG_ENDIAN -- || gdk_gl_context_get_use_es (gdk_gl_context_get_current ()) --#endif -- ) -+ if (!can_use_bgra ()) - { - pixel_data = free_data = g_malloc (width * height * 4); - gdk_memory_convert (pixel_data, width * 4, diff -Nru gtk4-4.12.5+ds/debian/patches/series gtk4-4.14.1+ds/debian/patches/series --- gtk4-4.12.5+ds/debian/patches/series 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/series 2024-03-20 16:30:39.000000000 +0000 @@ -1,4 +1,3 @@ -gsk-Always-use-RGBA-on-big-endian-architectures.patch Revert-tests-Stop-copying-the-tool-tests.patch Revert-build-Drop-the-install-tests-option.patch tests-mark-headless-tests-as-flaky.patch @@ -11,3 +10,5 @@ debian/gstreamer-player-Use-GtkName-Prefix-to-avoid-issues-if-ac.patch debian/tests-Mark-gltexture-as-expected-to-fail-on-big-endian-ma.patch debian/tests-Allow-longer-for-a-dialog-to-open.patch +debian/big-endian-memorytexture.patch +debian/ignore_a11ytext_i386.patch diff -Nru gtk4-4.12.5+ds/debian/patches/tests-mark-headless-tests-as-flaky.patch gtk4-4.14.1+ds/debian/patches/tests-mark-headless-tests-as-flaky.patch --- gtk4-4.12.5+ds/debian/patches/tests-mark-headless-tests-as-flaky.patch 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/patches/tests-mark-headless-tests-as-flaky.patch 2024-03-20 16:30:39.000000000 +0000 @@ -7,11 +7,11 @@ testsuite/headless/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/testsuite/headless/meson.build b/testsuite/headless/meson.build -index 1c9b5f5..bec3de1 100644 ---- a/testsuite/headless/meson.build -+++ b/testsuite/headless/meson.build -@@ -11,13 +11,13 @@ env.prepend('MESON_CURRENT_BUILD_DIR', meson.current_build_dir()) +Index: gtk4/testsuite/headless/meson.build +=================================================================== +--- gtk4.orig/testsuite/headless/meson.build 2024-02-27 12:21:53.377195371 +0100 ++++ gtk4/testsuite/headless/meson.build 2024-02-27 12:21:53.377195371 +0100 +@@ -10,13 +10,13 @@ if get_option('b_sanitize') != 'address' test('monitor', find_program('run-headless-monitor-tests.sh', dirs: meson.current_source_dir()), diff -Nru gtk4-4.12.5+ds/debian/rules gtk4-4.14.1+ds/debian/rules --- gtk4-4.12.5+ds/debian/rules 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/rules 2024-03-20 16:30:39.000000000 +0000 @@ -35,7 +35,6 @@ export DOC_PKG := libgtk-$(APIVER)-doc export BIN_PKG := libgtk-$(APIVER)-bin export MEDIA_GSTREAMER_PKG := libgtk-$(APIVER)-media-gstreamer -export MEDIA_FFMPEG_PKG := libgtk-$(APIVER)-media-ffmpeg export EXAMPLES_PKG := gtk-$(APIVER)-examples export TESTS_PKG := gtk-$(APIVER)-tests @@ -59,7 +58,6 @@ -e "s#@DOC_PKG@#$(DOC_PKG)#g" \ -e "s#@BIN_PKG@#$(BIN_PKG)#g" \ -e "s#@MEDIA_GSTREAMER_PKG@#$(MEDIA_GSTREAMER_PKG)#g" \ - -e "s#@MEDIA_FFMPEG_PKG@#$(MEDIA_FFMPEG_PKG)#g" \ -e "s#@EXAMPLES_PKG@#$(EXAMPLES_PKG)#g" \ -e "s#@TESTS_PKG@#$(TESTS_PKG)#g" \ -e "s#@LIBDIR@#$(LIBDIR)#g" \ @@ -70,8 +68,6 @@ configure_flags_deb = \ -Dauto_features=enabled \ -Dbroadway-backend=true \ - -Dprint-cpdb=enabled \ - -Dprint-cups=disabled \ -Dx11-backend=true \ ${NULL} @@ -108,10 +104,10 @@ ifeq ($(filter %-examples,$(built_binaries)),) configure_flags_deb += -Dbuild-examples=false -configure_flags_deb += -Ddemos=false +configure_flags_deb += -Dbuild-demos=false else configure_flags_deb += -Dbuild-examples=true -configure_flags_deb += -Ddemos=true +configure_flags_deb += -Dbuild-demos=true endif ifeq ($(filter %-tests,$(built_binaries)),) @@ -120,14 +116,6 @@ configure_flags_deb += -Dinstall-tests=true endif -# Upstream consider the ffmpeg backend to be experimental, let's not -# build that by default. -ifeq ($(filter $(MEDIA_FFMPEG_PKG),$(built_binaries)),) -configure_flags_deb += -Dmedia-ffmpeg=disabled -else -configure_flags_deb += -Dmedia-ffmpeg=enabled -endif - ifeq ($(shell dpkg-vendor --is Ubuntu && echo yes), yes) # Not in main repository configure_flags_deb += -Dcloudproviders=disabled @@ -139,10 +127,11 @@ -Dauto_features=disabled \ -Dbroadway-backend=false \ -Dbuild-examples=false \ - -Ddemos=false \ + -Dbuild-demos=false \ -Dbuild-tests=false \ -Dinstall-tests=false \ -Dintrospection=disabled \ + -Dvulkan=disabled \ -Dwayland-backend=false \ -Dx11-backend=true \ $(NULL) @@ -167,8 +156,9 @@ set -eu; for input in debian/missing-sources/emojibase/packages/data/??/data.raw.json; do \ lang="$$(echo "$$input" | sed -ne 's,^.*/\([a-z][a-z]\)/data.raw.json$$,\1,p')"; \ output="gtk/emoji/$$lang.data"; \ + inputen="debian/missing-sources/emojibase/packages/data/en/data.raw.json"; \ test -f "$$output" || continue; \ - debian/convert-emoji "$$input" "$$output"; \ + debian/convert-emoji "$$inputen" "$$input" "$$output"; \ done override_dh_auto_configure: debian/control @@ -192,7 +182,7 @@ endif test_backends = x11 -test_timeout_multiplier = 1 +test_timeout_multiplier = 3 ifeq (linux,$(DEB_HOST_ARCH_OS)) test_backends += wayland @@ -208,10 +198,11 @@ test_timeout_multiplier = 20 endif +export LIBGL_ALWAYS_SOFTWARE=true + ifneq ($(filter mips%,$(DEB_HOST_ARCH_CPU)),) $(info Disabling use of llvmpipe due to mips family CPU, see https://bugs.debian.org/993550) export GALLIUM_DRIVER=softpipe -export LIBGL_ALWAYS_SOFTWARE=true endif fuzzy_gsk_compare = \ @@ -233,6 +224,8 @@ $(NULL) ignore_reftests = \ + label-shadows \ + label-sizing \ $(NULL) xfail_reftests = \ @@ -245,7 +238,18 @@ flaky \ wayland_failing \ wayland_gles_failing \ + gsk-compare-broadway \ + gsk-compare-gl \ + gsk-compare-cairo \ + gsk-compare-ngl \ + gsk-compare-vulkan \ + $(NULL) + +ifneq ($(filter arm i386,$(DEB_HOST_ARCH_CPU)),) +skipped_suites += \ + gtk:gsk \ $(NULL) +endif # https://bugs.debian.org/1050312 ifeq (i386,$(DEB_HOST_ARCH_CPU)) @@ -255,6 +259,8 @@ $(NULL) endif + + # These succeed with llvmpipe, but fail with softpipe # https://gitlab.gnome.org/GNOME/gtk/-/issues/6085 # https://bugs.debian.org/1050077 @@ -268,6 +274,40 @@ ignore_reftests += border-image-excess-size endif +# workaround 4.14 tests failing on s390x +ifeq (big,$(DEB_HOST_ARCH_ENDIAN)) + ignore_reftests += \ + background-blend-mode-clip-interaction \ + gradient-hard-stop \ + linear-gradient \ + background-origin \ + background-position-repeat \ + background-position \ + center-center-100x100-picture-in-100x200 \ + center-center-100x100-picture-in-100x200-overlay \ + center-center-100x100-picture-in-200x100 \ + center-center-100x100-picture-in-200x100-overlay \ + center-center-20x20-picture-in-100x200 \ + center-center-20x20-picture-in-100x200-overlay \ + center-center-20x20-picture-in-200x100 \ + center-center-20x20-picture-in-200x100-overlay \ + center-center-150x150-picture-in-100x200 \ + center-center-150x150-picture-in-100x200-overlay \ + center-center-150x150-picture-in-200x100 \ + center-center-150x150-picture-in-200x100-overlay \ + center-center-300x300-picture-in-100x200 \ + center-center-300x300-picture-in-100x200-overlay \ + center-center-300x300-picture-in-200x100 \ + center-center-300x300-picture-in-200x100-overlay \ + css-match-class \ + css-match-name \ + css-match-type \ + icon-vfuncs \ + image-load-from-file \ + linear-gradient-transition-to-other \ + $(NULL) +endif + # TODO: Known failures: https://gitlab.gnome.org/GNOME/gtk/-/issues/4110 # s390x: many (endianness?) ifeq (big,$(DEB_HOST_ARCH_ENDIAN)) diff -Nru gtk4-4.12.5+ds/debian/tests/installed-tests gtk4-4.14.1+ds/debian/tests/installed-tests --- gtk4-4.12.5+ds/debian/tests/installed-tests 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/tests/installed-tests 2024-03-20 16:30:39.000000000 +0000 @@ -16,8 +16,7 @@ tests=$(gnome-desktop-testing-runner -l "$namespace" | cut -f1 -d' ' | - grep -v '^gtk-4.0/gtk/templates.test$' | - grep -v 'memorytexture') + grep -v '^gtk-4.0/gtk/templates.test$') if [ -z "$tests" ]; then echo "Error: no installed-tests found matching $namespace" >&2 diff -Nru gtk4-4.12.5+ds/debian/tests/installed-tests-flaky gtk4-4.14.1+ds/debian/tests/installed-tests-flaky --- gtk4-4.12.5+ds/debian/tests/installed-tests-flaky 2024-01-26 20:26:45.000000000 +0000 +++ gtk4-4.14.1+ds/debian/tests/installed-tests-flaky 2024-03-20 16:30:39.000000000 +0000 @@ -22,4 +22,4 @@ gnome-desktop-testing-runner \ --report-directory="$AUTOPKGTEST_ARTIFACTS" \ --tap \ -gtk-4.0/gtk/templates.test "gtk-4.0/gdk/{'name': 'memorytexture'}.test" +gtk-4.0/gtk/templates.test Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/alias_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/alias_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/all_scroll_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/all_scroll_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/bluroverlay.h gtk4-4.14.1+ds/demos/gtk-demo/bluroverlay.h --- gtk4-4.12.5+ds/demos/gtk-demo/bluroverlay.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/bluroverlay.h 2024-03-17 00:52:15.000000000 +0000 @@ -18,8 +18,7 @@ * License along with this library. If not, see . */ -#ifndef __BLUR_OVERLAY_H__ -#define __BLUR_OVERLAY_H__ +#pragma once #include @@ -60,5 +59,3 @@ GtkWidget *widget); G_END_DECLS - -#endif /* __BLUR_OVERLAY_H__ */ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/cell_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/cell_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/col_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/col_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/context_menu_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/context_menu_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/copy_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/copy_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/crosshair_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/crosshair_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/default_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/default_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/demo.gresource.xml gtk4-4.14.1+ds/demos/gtk-demo/demo.gresource.xml --- gtk4-4.12.5+ds/demos/gtk-demo/demo.gresource.xml 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/demo.gresource.xml 2024-03-17 00:52:15.000000000 +0000 @@ -127,6 +127,7 @@ fishbowl.ui gtkfishbowl.c gtkfishbowl.h + tiger.node frames.ui @@ -335,6 +336,11 @@ paintable_symbolic.c panes.c password_entry.c + path_fill.c + path_maze.c + path_spinner.c + path_walk.c + path_text.c peg_solitaire.c pickers.c printing.c @@ -420,6 +426,13 @@ fontrendering.ui + + path_walk.ui + path_world.txt + + + path_text.ui + icons/16x16/actions/application-exit.png icons/16x16/actions/document-new.png diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/demo3widget.c gtk4-4.14.1+ds/demos/gtk-demo/demo3widget.c --- gtk4-4.12.5+ds/demos/gtk-demo/demo3widget.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/demo3widget.c 2024-03-17 00:52:15.000000000 +0000 @@ -75,7 +75,9 @@ gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); precision = 1; + s = NULL; do { + g_free (s); s = g_strdup_printf ("%.*f", precision, self->scale); l = strlen (s) - 1; while (s[l] == '0') diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/demotaggedentry.h gtk4-4.14.1+ds/demos/gtk-demo/demotaggedentry.h --- gtk4-4.12.5+ds/demos/gtk-demo/demotaggedentry.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/demotaggedentry.h 2024-03-17 00:52:15.000000000 +0000 @@ -18,8 +18,7 @@ * License along with this library. If not, see . */ -#ifndef __DEMO_TAGGED_ENTRY_H__ -#define __DEMO_TAGGED_ENTRY_H__ +#pragma once #include @@ -57,5 +56,3 @@ gboolean has_close_button); G_END_DECLS - -#endif /* __DEMO_TAGGED_ENTRY_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/demowidget.c gtk4-4.14.1+ds/demos/gtk-demo/demowidget.c --- gtk4-4.12.5+ds/demos/gtk-demo/demowidget.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/demowidget.c 2024-03-17 00:52:15.000000000 +0000 @@ -34,7 +34,7 @@ { DemoWidget *self = DEMO_WIDGET (widget); DemoLayout *demo_layout = DEMO_LAYOUT (gtk_widget_get_layout_manager (widget)); - gint64 now = g_get_monotonic_time (); + gint64 now = gdk_frame_clock_get_frame_time (frame_clock); gtk_widget_queue_allocate (widget); @@ -66,11 +66,13 @@ gpointer data) { DemoWidget *self = data; + GdkFrameClock *frame_clock; if (self->tick_id != 0) return; - self->start_time = g_get_monotonic_time (); + frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (self)); + self->start_time = gdk_frame_clock_get_frame_time (frame_clock); self->tick_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), transition, NULL, NULL); } Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/e_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/e_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/ew_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/ew_resize_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/fishbowl.c gtk4-4.14.1+ds/demos/gtk-demo/fishbowl.c --- gtk4-4.12.5+ds/demos/gtk-demo/fishbowl.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/fishbowl.c 2024-03-17 00:52:15.000000000 +0000 @@ -11,6 +11,9 @@ #include "gtkgears.h" #include "gskshaderpaintable.h" +#include "nodewidget.h" +#include "graphwidget.h" + const char *const css = ".blurred-button {" " box-shadow: 0px 0px 5px 10px rgba(0, 0, 0, 0.5);" @@ -181,6 +184,12 @@ return picture; } +static gboolean +check_cogs (GtkFishbowl *fb) +{ + return GSK_IS_GL_RENDERER (gtk_native_get_renderer (gtk_widget_get_native (GTK_WIDGET (fb)))); +} + static void mapped (GtkWidget *w) { @@ -201,36 +210,55 @@ return w; } +static GtkWidget * +create_tiger (void) +{ + return node_widget_new ("/fishbowl/tiger.node"); +} + +static GtkWidget * +create_graph (void) +{ + return graph_widget_new (); +} + static const struct { const char *name; - GtkWidget * (*create_func) (void); + GtkWidget * (* create_func) (void); + gboolean (* check) (GtkFishbowl *fb); } widget_types[] = { - { "Icon", create_icon }, - { "Button", create_button }, - { "Blurbutton", create_blurred_button }, - { "Fontbutton", create_font_button }, - { "Levelbar", create_level_bar }, - { "Label", create_label }, - { "Spinner", create_spinner }, - { "Spinbutton", create_spinbutton }, - { "Video", create_video }, - { "Gears", create_gears }, - { "Switch", create_switch }, - { "Menubutton", create_menu_button }, - { "Shader", create_cogs }, + { "Icon", create_icon, NULL }, + { "Button", create_button, NULL }, + { "Blurbutton", create_blurred_button, NULL }, + { "Fontbutton", create_font_button, NULL }, + { "Levelbar", create_level_bar, NULL }, + { "Label", create_label, NULL }, + { "Spinner", create_spinner, NULL }, + { "Spinbutton", create_spinbutton, NULL }, + { "Video", create_video, NULL }, + { "Gears", create_gears, NULL }, + { "Switch", create_switch, NULL }, + { "Menubutton", create_menu_button, NULL }, + { "Shader", create_cogs, check_cogs }, + { "Tiger", create_tiger, NULL }, + { "Graph", create_graph, NULL }, }; static int selected_widget_type = -1; static const int N_WIDGET_TYPES = G_N_ELEMENTS (widget_types); -static void +static gboolean set_widget_type (GtkFishbowl *fishbowl, int widget_type_index) { GtkWidget *window; if (widget_type_index == selected_widget_type) - return; + return TRUE; + + if (widget_types[widget_type_index].check != NULL && + !widget_types[widget_type_index].check (fishbowl)) + return FALSE; selected_widget_type = widget_type_index; @@ -240,6 +268,8 @@ window = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (fishbowl))); gtk_window_set_title (GTK_WINDOW (window), widget_types[selected_widget_type].name); + + return TRUE; } G_MODULE_EXPORT void @@ -247,14 +277,17 @@ gpointer user_data) { GtkFishbowl *fishbowl = user_data; - int new_index; + int new_index = selected_widget_type; - if (selected_widget_type + 1 >= N_WIDGET_TYPES) - new_index = 0; - else - new_index = selected_widget_type + 1; + do + { + if (new_index + 1 >= N_WIDGET_TYPES) + new_index = 0; + else + new_index = new_index + 1; - set_widget_type (fishbowl, new_index); + } + while (!set_widget_type (fishbowl, new_index)); } G_MODULE_EXPORT void @@ -262,14 +295,18 @@ gpointer user_data) { GtkFishbowl *fishbowl = user_data; - int new_index; + int new_index = selected_widget_type; + + do + { + if (new_index - 1 < 0) + new_index = N_WIDGET_TYPES - 1; + else + new_index = new_index - 1; - if (selected_widget_type - 1 < 0) - new_index = N_WIDGET_TYPES - 1; - else - new_index = selected_widget_type - 1; + } - set_widget_type (fishbowl, new_index); + while (!set_widget_type (fishbowl, new_index)); } G_MODULE_EXPORT void diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/font_features.c gtk4-4.14.1+ds/demos/gtk-demo/font_features.c --- gtk4-4.12.5+ds/demos/gtk-demo/font_features.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/font_features.c 2024-03-17 00:52:15.000000000 +0000 @@ -600,8 +600,8 @@ if (s->len > 0) { pango_font_description_set_variations (desc, s->str); - g_string_free (s, TRUE); } + g_string_free (s, TRUE); font_desc = pango_font_description_to_string (desc); @@ -1586,7 +1586,7 @@ } gtk_grid_attach (GTK_GRID (demo->variations_grid), combo, 1, -1, 3, 1); - g_signal_connect (combo, "notify::selecte", G_CALLBACK (instance_changed), NULL); + g_signal_connect (combo, "notify::selected", G_CALLBACK (instance_changed), NULL); demo->instance_combo = combo; } diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/fontplane.h gtk4-4.14.1+ds/demos/gtk-demo/fontplane.h --- gtk4-4.12.5+ds/demos/gtk-demo/fontplane.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/fontplane.h 2024-03-17 00:52:15.000000000 +0000 @@ -15,8 +15,7 @@ * License along with this library. If not, see . */ -#ifndef __GTK_FONT_PLANE_H__ -#define __GTK_FONT_PLANE_H__ +#pragma once #include @@ -60,5 +59,3 @@ GtkAdjustment *weight_adj); G_END_DECLS - -#endif /* __GTK_FONT_PLANE_H__ */ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/grab_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/grab_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/grabbing_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/grabbing_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/graphwidget.c gtk4-4.14.1+ds/demos/gtk-demo/graphwidget.c --- gtk4-4.12.5+ds/demos/gtk-demo/graphwidget.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/graphwidget.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,153 @@ +#include "graphwidget.h" + +struct _GraphWidget +{ + GtkWidget parent_instance; + + GskPath *path; + GskStroke *stroke; + GdkRGBA color; + + guint tick_cb; + guint64 start_time; + + double period; + double amplitude; +}; + +struct _GraphWidgetClass +{ + GtkWidgetClass parent_class; +}; + +G_DEFINE_TYPE (GraphWidget, graph_widget, GTK_TYPE_WIDGET) + +static void +update_path (GraphWidget *self, + float amplitude) +{ + graphene_point_t p[20]; + GskPathBuilder *builder; + + g_clear_pointer (&self->path, gsk_path_unref); + + for (int i = 0; i < 20; i++) + { + p[i].x = 10 * i; + p[i].y = 50; + + if (i % 4 == 1 || i % 4 == 2) + { + if (i % 8 < 4) + p[i].y += amplitude; + else + p[i].y -= amplitude; + } + } + + builder = gsk_path_builder_new (); + gsk_path_builder_move_to (builder, p[0].x, p[0].y); + + for (int i = 0; i < 20; i += 4) + gsk_path_builder_cubic_to (builder, + p[i+1].x, p[i+1].y, + p[i+2].x, p[i+2].y, + p[i+3].x, p[i+3].y); + + self->path = gsk_path_builder_free_to_path (builder); +} + +static gboolean +tick_cb (GtkWidget *widget, + GdkFrameClock *frame_clock, + gpointer user_data) +{ + GraphWidget *self = GRAPH_WIDGET (widget); + guint64 now; + double angle; + + now = gdk_frame_clock_get_frame_time (frame_clock); + + if (self->start_time == 0) + self->start_time = now; + + angle = 360 * (now - self->start_time) / (double)(self->period * G_TIME_SPAN_MINUTE); + update_path (self, sin (angle) * self->amplitude); + + gtk_widget_queue_draw (widget); + + return G_SOURCE_CONTINUE; +} + +static void +graph_widget_init (GraphWidget *self) +{ + self->color.red = g_random_double_range (0, 1); + self->color.green = g_random_double_range (0, 1); + self->color.blue = g_random_double_range (0, 1); + self->color.alpha = 1; + + self->period = g_random_double_range (0.5, 1); + self->amplitude = g_random_double_range (10, 25); + + self->stroke = gsk_stroke_new (2); + + update_path (self, 0); + + self->start_time = 0; + self->tick_cb = gtk_widget_add_tick_callback (GTK_WIDGET (self), tick_cb, NULL, NULL); +} + +static void +graph_widget_dispose (GObject *object) +{ + GraphWidget *self = GRAPH_WIDGET (object); + + g_clear_pointer (&self->path, gsk_path_unref); + gsk_stroke_free (self->stroke); + + G_OBJECT_CLASS (graph_widget_parent_class)->dispose (object); +} + +static void +graph_widget_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) +{ + GraphWidget *self = GRAPH_WIDGET (widget); + + gtk_snapshot_append_stroke (snapshot, self->path, self->stroke, &self->color); +} + +static void +graph_widget_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) +{ + if (orientation == GTK_ORIENTATION_HORIZONTAL) + *minimum = *natural = 200; + else + *minimum = *natural = 100; +} + + +static void +graph_widget_class_init (GraphWidgetClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + + object_class->dispose = graph_widget_dispose; + + widget_class->snapshot = graph_widget_snapshot; + widget_class->measure = graph_widget_measure; +} + +GtkWidget * +graph_widget_new (void) +{ + return g_object_new (GRAPH_TYPE_WIDGET, NULL); +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/graphwidget.h gtk4-4.14.1+ds/demos/gtk-demo/graphwidget.h --- gtk4-4.12.5+ds/demos/gtk-demo/graphwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/graphwidget.h 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,8 @@ +#pragma once + +#include + +#define GRAPH_TYPE_WIDGET (graph_widget_get_type ()) +G_DECLARE_FINAL_TYPE (GraphWidget, graph_widget, GRAPH, WIDGET, GtkWidget) + +GtkWidget * graph_widget_new (void); diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gskshaderpaintable.h gtk4-4.14.1+ds/demos/gtk-demo/gskshaderpaintable.h --- gtk4-4.12.5+ds/demos/gtk-demo/gskshaderpaintable.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gskshaderpaintable.h 2024-03-17 00:52:15.000000000 +0000 @@ -17,8 +17,7 @@ * Authors: Matthias Clasen */ -#ifndef __GSK_SHADER_PAINTABLE_H__ -#define __GSK_SHADER_PAINTABLE_H__ +#pragma once #include #include @@ -42,5 +41,3 @@ int time_idx, gint64 frame_time); G_END_DECLS - -#endif /* __GSK_SHADER_PAINTABLE_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gtkfishbowl.h gtk4-4.14.1+ds/demos/gtk-demo/gtkfishbowl.h --- gtk4-4.12.5+ds/demos/gtk-demo/gtkfishbowl.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gtkfishbowl.h 2024-03-17 00:52:15.000000000 +0000 @@ -15,8 +15,7 @@ * License along with this library. If not, see . */ -#ifndef __GTK_FISHBOWL_H__ -#define __GTK_FISHBOWL_H__ +#pragma once #include @@ -65,5 +64,3 @@ GtkFishCreationFunc creation_func); G_END_DECLS - -#endif /* __GTK_FISHBOWL_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gtkgears.h gtk4-4.14.1+ds/demos/gtk-demo/gtkgears.h --- gtk4-4.12.5+ds/demos/gtk-demo/gtkgears.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gtkgears.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __GTK_GEARS_H__ -#define __GTK_GEARS_H__ +#pragma once #include @@ -44,5 +43,3 @@ G_END_DECLS - -#endif /* __GTK_GEARS_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gtkshaderbin.h gtk4-4.14.1+ds/demos/gtk-demo/gtkshaderbin.h --- gtk4-4.12.5+ds/demos/gtk-demo/gtkshaderbin.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gtkshaderbin.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __GTK_SHADER_BIN_H__ -#define __GTK_SHADER_BIN_H__ +#pragma once #include @@ -19,5 +18,3 @@ GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self); G_END_DECLS - -#endif /* __GTK_SHADER_BIN_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gtkshaderstack.h gtk4-4.14.1+ds/demos/gtk-demo/gtkshaderstack.h --- gtk4-4.12.5+ds/demos/gtk-demo/gtkshaderstack.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gtkshaderstack.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __GTK_SHADER_STACK_H__ -#define __GTK_SHADER_STACK_H__ +#pragma once #include @@ -19,5 +18,3 @@ int index); G_END_DECLS - -#endif /* __GTK_SHADER_STACK_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gtkshadertoy.c gtk4-4.14.1+ds/demos/gtk-demo/gtkshadertoy.c --- gtk4-4.12.5+ds/demos/gtk-demo/gtkshadertoy.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gtkshadertoy.c 2024-03-17 00:52:15.000000000 +0000 @@ -116,7 +116,9 @@ GtkWidget * gtk_shadertoy_new (void) { - return g_object_new (gtk_shadertoy_get_type (), NULL); + return g_object_new (gtk_shadertoy_get_type (), + "allowed-apis", GDK_GL_API_GL, + NULL); } static void diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/gtkshadertoy.h gtk4-4.14.1+ds/demos/gtk-demo/gtkshadertoy.h --- gtk4-4.12.5+ds/demos/gtk-demo/gtkshadertoy.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/gtkshadertoy.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __GTK_SHADERTOY_H__ -#define __GTK_SHADERTOY_H__ +#pragma once #include @@ -30,5 +29,3 @@ const char *shader); G_END_DECLS - -#endif /* __GTK_SHADERTOY_H__ */ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/hand_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/hand_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/help_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/help_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/images.c gtk4-4.14.1+ds/demos/gtk-demo/images.c --- gtk4-4.12.5+ds/demos/gtk-demo/images.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/images.c 2024-03-17 00:52:15.000000000 +0000 @@ -354,6 +354,7 @@ gicon = g_themed_icon_new_with_default_fallbacks ("battery-caution-charging-symbolic"); image = gtk_image_new_from_gicon (gicon); gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE); + g_object_unref (gicon); gtk_frame_set_child (GTK_FRAME (frame), image); diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/language-names.h gtk4-4.14.1+ds/demos/gtk-demo/language-names.h --- gtk4-4.12.5+ds/demos/gtk-demo/language-names.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/language-names.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef LANGUAGE_NAMES_H -#define LANGUAGE_NAMES_H +#pragma once #include @@ -9,5 +8,3 @@ const char * get_language_name_for_tag (guint32 tag); G_END_DECLS - -#endif diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/listview_selections.c gtk4-4.14.1+ds/demos/gtk-demo/listview_selections.c --- gtk4-4.12.5+ds/demos/gtk-demo/listview_selections.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/listview_selections.c 2024-03-17 00:52:15.000000000 +0000 @@ -1,4 +1,5 @@ /* Lists/Selections + * #Keywords: suggestion, completion * * The GtkDropDown widget is a modern alternative to GtkComboBox. * It uses list models instead of tree models, and the content is diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/main.c gtk4-4.14.1+ds/demos/gtk-demo/main.c --- gtk4-4.12.5+ds/demos/gtk-demo/main.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/main.c 2024-03-17 00:52:15.000000000 +0000 @@ -24,7 +24,7 @@ #include "demos.h" #include "fontify.h" -#include "demo_conf.h" +#include "profile_conf.h" static GtkWidget *info_view; static GtkWidget *source_view; @@ -827,13 +827,25 @@ gtk_filter_changed (filter, GTK_FILTER_CHANGE_DIFFERENT); } +static gboolean +demo_can_run (GtkWidget *window, + const char *name) +{ + if (name != NULL && strcmp (name, "gltransition") == 0) + return GSK_IS_GL_RENDERER (gtk_native_get_renderer (GTK_NATIVE (window))); + + return TRUE; +} + static GListModel * -create_demo_model (void) +create_demo_model (GtkWidget *window) { GListStore *store = g_list_store_new (GTK_TYPE_DEMO); DemoData *demo = gtk_demos; GtkDemo *d; + gtk_widget_realize (window); + d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL)); d->name = "main"; d->title = "GTK Demo"; @@ -845,16 +857,20 @@ while (demo->title) { - d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL)); - DemoData *children = demo->children; + DemoData *children = demo->children; - d->name = demo->name; - d->title = demo->title; - d->keywords = demo->keywords; - d->filename = demo->filename; - d->func = demo->func; + if (demo_can_run (window, demo->name)) + { + d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL)); + + d->name = demo->name; + d->title = demo->title; + d->keywords = demo->keywords; + d->filename = demo->filename; + d->func = demo->func; - g_list_store_append (store, d); + g_list_store_append (store, d); + } if (children) { @@ -862,15 +878,19 @@ while (children->title) { - GtkDemo *child = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL)); + if (demo_can_run (window, children->name)) + { + GtkDemo *child = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL)); + + child->name = children->name; + child->title = children->title; + child->keywords = children->keywords; + child->filename = children->filename; + child->func = children->func; - child->name = children->name; - child->title = children->title; - child->keywords = children->keywords; - child->filename = children->filename; - child->func = children->func; + g_list_store_append (G_LIST_STORE (d->children_model), child); + } - g_list_store_append (G_LIST_STORE (d->children_model), child); children++; } } @@ -936,7 +956,7 @@ search_bar = GTK_WIDGET (gtk_builder_get_object (builder, "searchbar")); g_signal_connect (search_bar, "notify::search-mode-enabled", G_CALLBACK (clear_search), NULL); - listmodel = create_demo_model (); + listmodel = create_demo_model (window); treemodel = gtk_tree_list_model_new (G_LIST_MODEL (listmodel), FALSE, TRUE, diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/meson.build gtk4-4.14.1+ds/demos/gtk-demo/meson.build --- gtk4-4.12.5+ds/demos/gtk-demo/meson.build 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/meson.build 2024-03-17 00:52:15.000000000 +0000 @@ -72,6 +72,11 @@ 'paintable_symbolic.c', 'panes.c', 'password_entry.c', + 'path_fill.c', + 'path_maze.c', + 'path_spinner.c', + 'path_walk.c', + 'path_text.c', 'peg_solitaire.c', 'pickers.c', 'printing.c', @@ -136,6 +141,8 @@ 'unicode-names.c', 'suggestionentry.c', 'language-names.c', + 'nodewidget.c', + 'graphwidget.c', ]) if os_unix @@ -229,7 +236,7 @@ endif endforeach -gtkdemo_deps += [ demo_conf_h ] +gtkdemo_deps += [ profile_conf_h ] executable('gtk4-demo', sources: [demos, demos_h, extra_demo_sources, gtkdemo_resources], Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/move_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/move_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/n_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/n_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/ne_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/ne_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/nesw_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/nesw_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/no_drop_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/no_drop_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/nodewidget.c gtk4-4.14.1+ds/demos/gtk-demo/nodewidget.c --- gtk4-4.12.5+ds/demos/gtk-demo/nodewidget.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/nodewidget.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,76 @@ +#include "nodewidget.h" + +struct _NodeWidget +{ + GtkWidget parent_instance; + + GskRenderNode *node; +}; + +struct _NodeWidgetClass +{ + GtkWidgetClass parent_class; +}; + +G_DEFINE_TYPE (NodeWidget, node_widget, GTK_TYPE_WIDGET) + +static void +node_widget_init (NodeWidget *self) +{ +} + +static void +node_widget_dispose (GObject *object) +{ + NodeWidget *self = NODE_WIDGET (object); + + gsk_render_node_unref (self->node); + + G_OBJECT_CLASS (node_widget_parent_class)->dispose (object); +} + +static void +node_widget_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) +{ + NodeWidget *self = NODE_WIDGET (widget); + + gtk_snapshot_append_node (snapshot, self->node); +} + +static void +node_widget_class_init (NodeWidgetClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + + object_class->dispose = node_widget_dispose; + + widget_class->snapshot = node_widget_snapshot; +} + +GtkWidget * +node_widget_new (const char *resource) +{ + NodeWidget *self; + GBytes *bytes; + GskRenderNode *node; + graphene_rect_t bounds; + float scale; + GskTransform *transform; + + self = g_object_new (NODE_TYPE_WIDGET, NULL); + + bytes = g_resources_lookup_data (resource, 0, NULL); + node = gsk_render_node_deserialize (bytes, NULL, NULL); + g_bytes_unref (bytes); + + gsk_render_node_get_bounds (node, &bounds); + scale = MIN (100.0/bounds.size.width, 100.0/bounds.size.height); + transform = gsk_transform_scale (NULL, scale, scale); + self->node = gsk_transform_node_new (node, transform); + gsk_transform_unref (transform); + gsk_render_node_unref (node); + + return GTK_WIDGET (self); +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/nodewidget.h gtk4-4.14.1+ds/demos/gtk-demo/nodewidget.h --- gtk4-4.12.5+ds/demos/gtk-demo/nodewidget.h 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/nodewidget.h 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,8 @@ +#pragma once + +#include + +#define NODE_TYPE_WIDGET (node_widget_get_type ()) +G_DECLARE_FINAL_TYPE (NodeWidget, node_widget, NODE, WIDGET, GtkWidget) + +GtkWidget * node_widget_new (const char *file); Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/not_allowed_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/not_allowed_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/ns_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/ns_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/nw_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/nw_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/nwse_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/nwse_resize_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/paintable.c gtk4-4.14.1+ds/demos/gtk-demo/paintable.c --- gtk4-4.12.5+ds/demos/gtk-demo/paintable.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/paintable.c 2024-03-17 00:52:15.000000000 +0000 @@ -53,7 +53,9 @@ double rotation) { #define RADIUS 0.3 - cairo_t *cr; + GskPathBuilder *builder; + GskPath *path; + GskStroke *stroke; double size; gtk_snapshot_append_color (snapshot, @@ -61,24 +63,29 @@ &GRAPHENE_RECT_INIT (0, 0, width, height)); size = MIN (width, height); - cr = gtk_snapshot_append_cairo (snapshot, - &GRAPHENE_RECT_INIT ((width - size) / 2.0, - (height - size) / 2.0, - size, size)); - gdk_cairo_set_source_rgba (cr, foreground); - cairo_translate (cr, width / 2.0, height / 2.0); - cairo_scale (cr, size, size); - cairo_rotate (cr, rotation); - - cairo_arc (cr, 0, 0, 0.1, - G_PI, G_PI); - cairo_fill (cr); - - cairo_set_line_width (cr, RADIUS); - cairo_set_dash (cr, (double[1]) { RADIUS * G_PI / 3 }, 1, 0.0); - cairo_arc (cr, 0, 0, RADIUS, - G_PI, G_PI); - cairo_stroke (cr); - cairo_destroy (cr); + gtk_snapshot_save (snapshot); + + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (width / 2.0, height / 2.0)); + gtk_snapshot_scale (snapshot, size, size); + gtk_snapshot_rotate (snapshot, rotation); + + builder = gsk_path_builder_new (); + gsk_path_builder_add_circle (builder, graphene_point_zero (), 0.1); + path = gsk_path_builder_free_to_path (builder); + gtk_snapshot_append_fill (snapshot, path, GSK_FILL_RULE_WINDING, foreground); + gsk_path_unref (path); + + stroke = gsk_stroke_new (RADIUS); + gsk_stroke_set_dash (stroke, (float[1]) { RADIUS * G_PI / 3 }, 1); + builder = gsk_path_builder_new (); + gsk_path_builder_add_circle (builder, graphene_point_zero(), RADIUS); + path = gsk_path_builder_free_to_path (builder); + gtk_snapshot_append_stroke (snapshot, path, stroke, foreground); + gsk_path_unref (path); + gsk_stroke_free (stroke); + + gtk_snapshot_restore (snapshot); } /* Here, we implement the functionality required by the GdkPaintable interface */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/paintable.h gtk4-4.14.1+ds/demos/gtk-demo/paintable.h --- gtk4-4.12.5+ds/demos/gtk-demo/paintable.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/paintable.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __PAINTABLE_H__ -#define __PAINTABLE_H__ +#pragma once #include @@ -13,5 +12,3 @@ GdkPaintable * gtk_nuclear_icon_new (double rotation); GdkPaintable * gtk_nuclear_animation_new (gboolean draw_background); GtkMediaStream *gtk_nuclear_media_stream_new (void); - -#endif /* __PAINTABLE_H__ */ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/paintable_animated.c gtk4-4.14.1+ds/demos/gtk-demo/paintable_animated.c --- gtk4-4.12.5+ds/demos/gtk-demo/paintable_animated.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/paintable_animated.c 2024-03-17 00:52:15.000000000 +0000 @@ -70,7 +70,7 @@ ? &(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 } /* yellow */ : &(GdkRGBA) { 0, 0, 0, 0 }, /* transparent */ width, height, - 2 * G_PI * nuclear->progress / MAX_PROGRESS); + 360 * nuclear->progress / MAX_PROGRESS); } static GdkPaintable * @@ -85,7 +85,7 @@ * Luckily we added the rotation property to the nuclear icon * object previously, so we can just return an instance of that one. */ - return gtk_nuclear_icon_new (2 * G_PI * nuclear->progress / MAX_PROGRESS); + return gtk_nuclear_icon_new (360 * nuclear->progress / MAX_PROGRESS); } static GdkPaintableFlags diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/paintable_mediastream.c gtk4-4.14.1+ds/demos/gtk-demo/paintable_mediastream.c --- gtk4-4.12.5+ds/demos/gtk-demo/paintable_mediastream.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/paintable_mediastream.c 2024-03-17 00:52:15.000000000 +0000 @@ -76,7 +76,7 @@ &(GdkRGBA) { 0, 0, 0, 1 }, /* black */ &(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 }, /* yellow */ width, height, - 2 * G_PI * nuclear->progress / DURATION); + 360 * nuclear->progress / DURATION); } static GdkPaintable * @@ -85,7 +85,7 @@ GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (paintable); /* Same thing as with the animation */ - return gtk_nuclear_icon_new (2 * G_PI * nuclear->progress / DURATION); + return gtk_nuclear_icon_new (360 * nuclear->progress / DURATION); } static GdkPaintableFlags diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_fill.c gtk4-4.14.1+ds/demos/gtk-demo/path_fill.c --- gtk4-4.12.5+ds/demos/gtk-demo/path_fill.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_fill.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,295 @@ +/* Path/Fill and Stroke + * + * This demo shows how to use GskPath to draw shapes that are (a bit) + * more complex than a rounded rectangle. + * + * It also demonstrates printing to a stream with GtkPrintDialog. + */ + +#include +#include +#include + +#include "paintable.h" + +#define GTK_TYPE_LOGO_PAINTABLE (gtk_logo_paintable_get_type ()) +G_DECLARE_FINAL_TYPE (GtkLogoPaintable, gtk_logo_paintable, GTK, LOGO_PAINTABLE, GObject) + +struct _GtkLogoPaintable +{ + GObject parent_instance; + + int width; + int height; + GskPath *path[3]; + GdkRGBA color[3]; + + GskPath *stroke_path; + GskStroke *stroke1; + GskStroke *stroke2; + GdkRGBA stroke_color; +}; + +struct _GtkLogoPaintableClass +{ + GObjectClass parent_class; +}; + +static int +gtk_logo_paintable_get_intrinsic_width (GdkPaintable *paintable) +{ + GtkLogoPaintable *self = GTK_LOGO_PAINTABLE (paintable); + + return self->width; +} + +static int +gtk_logo_paintable_get_intrinsic_height (GdkPaintable *paintable) +{ + GtkLogoPaintable *self = GTK_LOGO_PAINTABLE (paintable); + + return self->height; +} + +static void +gtk_logo_paintable_snapshot (GdkPaintable *paintable, + GdkSnapshot *snapshot, + double width, + double height) +{ + GtkLogoPaintable *self = GTK_LOGO_PAINTABLE (paintable); + + for (unsigned int i = 0; i < 3; i++) + { + gtk_snapshot_push_fill (snapshot, self->path[i], GSK_FILL_RULE_WINDING); + gtk_snapshot_append_color (snapshot, + &self->color[i], + &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + } + for (unsigned int i = 0; i < 3; i++) + { + gtk_snapshot_push_stroke (snapshot, self->stroke_path, self->stroke1); + gtk_snapshot_append_color (snapshot, + &self->stroke_color, + &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + } + + gtk_snapshot_push_stroke (snapshot, self->stroke_path, self->stroke2); + gtk_snapshot_append_color (snapshot, + &self->stroke_color, + &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); +} + +static GdkPaintableFlags +gtk_logo_paintable_get_flags (GdkPaintable *paintable) +{ + return GDK_PAINTABLE_STATIC_CONTENTS | GDK_PAINTABLE_STATIC_SIZE; +} + +static void +gtk_logo_paintable_paintable_init (GdkPaintableInterface *iface) +{ + iface->get_intrinsic_width = gtk_logo_paintable_get_intrinsic_width; + iface->get_intrinsic_height = gtk_logo_paintable_get_intrinsic_height; + iface->snapshot = gtk_logo_paintable_snapshot; + iface->get_flags = gtk_logo_paintable_get_flags; +} + +/* When defining the GType, we need to implement the GdkPaintable interface */ +G_DEFINE_TYPE_WITH_CODE (GtkLogoPaintable, gtk_logo_paintable, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE, + gtk_logo_paintable_paintable_init)) + +static void +gtk_logo_paintable_dispose (GObject *object) +{ + GtkLogoPaintable *self = GTK_LOGO_PAINTABLE (object); + + for (unsigned int i = 0; i < 3; i++) + gsk_path_unref (self->path[i]); + + gsk_path_unref (self->stroke_path); + + gsk_stroke_free (self->stroke1); + gsk_stroke_free (self->stroke2); + + G_OBJECT_CLASS (gtk_logo_paintable_parent_class)->dispose (object); +} + +static void +gtk_logo_paintable_class_init (GtkLogoPaintableClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = gtk_logo_paintable_dispose; +} + +static void +gtk_logo_paintable_init (GtkLogoPaintable *self) +{ +} + +static GdkPaintable * +gtk_logo_paintable_new (void) +{ + GtkLogoPaintable *self; + graphene_rect_t bounds, bounds2; + + self = g_object_new (GTK_TYPE_LOGO_PAINTABLE, NULL); + + /* Paths and colors extracted from gtk-logo.svg */ + self->path[0] = gsk_path_parse ("m3.12,66.17 -2.06,-51.46 32.93,24.7 v55.58 l-30.87,-28.82 z"); + self->path[1] = gsk_path_parse ("m34,95 49.4,-20.58 4.12,-51.46 -53.52,16.47 v55.58 z"); + self->path[2] = gsk_path_parse ("m1.06,14.71 32.93,24.7 53.52,-16.47 -36.75,-21.88 -49.7,13.65 z"); + + gdk_rgba_parse (&self->color[0], "#e40000"); + gdk_rgba_parse (&self->color[1], "#7fe719"); + gdk_rgba_parse (&self->color[2], "#729fcf"); + + self->stroke_path = gsk_path_parse ("m50.6,51.3 -47.3,14 z l33,23 z v-50"); + self->stroke1 = gsk_stroke_new (2.12); + self->stroke2 = gsk_stroke_new (1.25); + gdk_rgba_parse (&self->stroke_color, "#ffffff"); + + gsk_path_get_stroke_bounds (self->path[0], self->stroke1, &bounds); + gsk_path_get_stroke_bounds (self->path[1], self->stroke1, &bounds2); + graphene_rect_union (&bounds, &bounds2, &bounds); + gsk_path_get_stroke_bounds (self->path[2], self->stroke1, &bounds2); + graphene_rect_union (&bounds, &bounds2, &bounds); + gsk_path_get_stroke_bounds (self->stroke_path, self->stroke2, &bounds2); + graphene_rect_union (&bounds, &bounds2, &bounds); + + self->width = bounds.origin.x + bounds.size.width; + self->height = bounds.origin.y + bounds.size.height; + + return GDK_PAINTABLE (self); +} + +static cairo_status_t +write_cairo (void *closure, + const unsigned char *data, + unsigned int length) +{ + GOutputStream *stream = closure; + gsize written; + GError *error = NULL; + + if (!g_output_stream_write_all (stream, data, length, &written, NULL, &error)) + { + g_print ("Error writing pdf stream: %s\n", error->message); + g_error_free (error); + return CAIRO_STATUS_WRITE_ERROR; + } + + return CAIRO_STATUS_SUCCESS; +} + +static void +print_ready (GObject *source, + GAsyncResult *result, + gpointer data) +{ + GtkPrintDialog *dialog = GTK_PRINT_DIALOG (source); + GError *error = NULL; + GOutputStream *stream; + GtkSnapshot *snapshot; + GdkPaintable *paintable; + GskRenderNode *node; + cairo_surface_t *surface; + cairo_t *cr; + + stream = gtk_print_dialog_print_finish (dialog, result, &error); + if (stream == NULL) + { + g_print ("Failed to get output stream: %s\n", error->message); + g_error_free (error); + return; + } + + snapshot = gtk_snapshot_new (); + paintable = gtk_picture_get_paintable (GTK_PICTURE (data)); + gdk_paintable_snapshot (paintable, snapshot, 100, 100); + node = gtk_snapshot_free_to_node (snapshot); + + surface = cairo_pdf_surface_create_for_stream (write_cairo, stream, 100, 100); + cr = cairo_create (surface); + + gsk_render_node_draw (node, cr); + + cairo_destroy (cr); + cairo_surface_destroy (surface); + gsk_render_node_unref (node); + + if (!g_output_stream_close (stream, NULL, &error)) + { + g_print ("Error from close: %s\n", error->message); + g_error_free (error); + } + + g_object_unref (stream); +} + +static void +print (GtkButton *button, + gpointer data) +{ + GtkWidget *picture = data; + GtkPrintDialog *dialog; + + dialog = gtk_print_dialog_new (); + + gtk_print_dialog_print (dialog, + GTK_WINDOW (gtk_widget_get_root (picture)), + NULL, + NULL, + print_ready, + picture); + + g_object_unref (dialog); +} + +GtkWidget * +do_path_fill (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + + if (!window) + { + GtkWidget *header, *button, *label; + GtkWidget *picture; + GdkPaintable *paintable; + + window = gtk_window_new (); + gtk_window_set_resizable (GTK_WINDOW (window), FALSE); + gtk_window_set_default_size (GTK_WINDOW (window), 100, 100); + gtk_window_set_title (GTK_WINDOW (window), "Fill and Stroke"); + header = gtk_header_bar_new (); + button = gtk_button_new_from_icon_name ("printer-symbolic"); + gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button); + label = gtk_label_new ("Fill and Stroke"); + gtk_widget_add_css_class (label, "title"); + gtk_header_bar_set_title_widget (GTK_HEADER_BAR (header), label); + gtk_window_set_titlebar (GTK_WINDOW (window), header); + g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window); + + paintable = gtk_logo_paintable_new (); + picture = gtk_picture_new_for_paintable (paintable); + gtk_picture_set_content_fit (GTK_PICTURE (picture), GTK_CONTENT_FIT_CONTAIN); + gtk_picture_set_can_shrink (GTK_PICTURE (picture), FALSE); + g_object_unref (paintable); + + g_signal_connect (button, "clicked", G_CALLBACK (print), picture); + + gtk_window_set_child (GTK_WINDOW (window), picture); + } + + if (!gtk_widget_get_visible (window)) + gtk_window_present (GTK_WINDOW (window)); + else + gtk_window_destroy (GTK_WINDOW (window)); + + return window; +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_maze.c gtk4-4.14.1+ds/demos/gtk-demo/path_maze.c --- gtk4-4.12.5+ds/demos/gtk-demo/path_maze.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_maze.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,369 @@ +/* Path/Maze + * + * This demo shows how to use a GskPath to create a maze and use + * gsk_path_get_closest_point() to check the mouse stays + * on the path. + * + * It also shows off the performance of GskPath (or not) as this + * is a rather complex path. + */ + +#include "config.h" +#include +#include + +#include "paintable.h" + +#define MAZE_GRID_SIZE 20 +#define MAZE_STROKE_SIZE_ACTIVE (MAZE_GRID_SIZE - 4) +#define MAZE_STROKE_SIZE_INACTIVE (MAZE_GRID_SIZE - 12) +#define MAZE_WIDTH 31 +#define MAZE_HEIGHT 21 + +#define GTK_TYPE_MAZE (gtk_maze_get_type ()) +G_DECLARE_FINAL_TYPE (GtkMaze, gtk_maze, GTK, MAZE, GtkWidget) + +struct _GtkMaze +{ + GtkWidget parent_instance; + + int width; + int height; + GskPath *path; + GskPathMeasure *measure; + GdkPaintable *background; + + gboolean active; +}; + +struct _GtkMazeClass +{ + GtkWidgetClass parent_class; +}; + +G_DEFINE_TYPE (GtkMaze, gtk_maze, GTK_TYPE_WIDGET) + +static void +gtk_maze_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) +{ + GtkMaze *self = GTK_MAZE (widget); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + *minimum = *natural = self->width; + else + *minimum = *natural = self->height; +} + +static void +gtk_maze_snapshot (GtkWidget *widget, + GdkSnapshot *snapshot) +{ + GtkMaze *self = GTK_MAZE (widget); + double width = gtk_widget_get_width (widget); + double height = gtk_widget_get_height (widget); + GskStroke *stroke; + + stroke = gsk_stroke_new (MAZE_STROKE_SIZE_INACTIVE); + if (self->active) + gsk_stroke_set_line_width (stroke, MAZE_STROKE_SIZE_ACTIVE); + gsk_stroke_set_line_join (stroke, GSK_LINE_JOIN_ROUND); + gsk_stroke_set_line_cap (stroke, GSK_LINE_CAP_ROUND); + gtk_snapshot_push_stroke (snapshot, self->path, stroke); + gsk_stroke_free (stroke); + + if (self->background) + { + gdk_paintable_snapshot (self->background, snapshot, width, height); + } + else + { + gtk_snapshot_append_linear_gradient (snapshot, + &GRAPHENE_RECT_INIT (0, 0, width, height), + &GRAPHENE_POINT_INIT (0, 0), + &GRAPHENE_POINT_INIT (width, height), + (GskColorStop[8]) { + { 0.0, { 1.0, 0.0, 0.0, 1.0 } }, + { 0.2, { 1.0, 0.0, 0.0, 1.0 } }, + { 0.3, { 1.0, 1.0, 0.0, 1.0 } }, + { 0.4, { 0.0, 1.0, 0.0, 1.0 } }, + { 0.6, { 0.0, 1.0, 1.0, 1.0 } }, + { 0.7, { 0.0, 0.0, 1.0, 1.0 } }, + { 0.8, { 1.0, 0.0, 1.0, 1.0 } }, + { 1.0, { 1.0, 0.0, 1.0, 1.0 } } + }, + 8); + } + + gtk_snapshot_pop (snapshot); + +} + +static void +gtk_maze_dispose (GObject *object) +{ + GtkMaze *self = GTK_MAZE (object); + + g_clear_pointer (&self->path, gsk_path_unref); + g_clear_pointer (&self->measure, gsk_path_measure_unref); + if (self->background) + { + g_signal_handlers_disconnect_matched (self->background, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self); + g_clear_object (&self->background); + } + + G_OBJECT_CLASS (gtk_maze_parent_class)->dispose (object); +} + +static void +gtk_maze_class_init (GtkMazeClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = gtk_maze_dispose; + + widget_class->measure = gtk_maze_measure; + widget_class->snapshot = gtk_maze_snapshot; +} + +static void +celebrate (gboolean win) +{ + char *path; + GtkMediaStream *stream; + + if (win) + path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "complete.oga", NULL); + else + path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "suspend-error.oga", NULL); + stream = gtk_media_file_new_for_filename (path); + gtk_media_stream_set_volume (stream, 1.0); + gtk_media_stream_play (stream); + + g_signal_connect (stream, "notify::ended", G_CALLBACK (g_object_unref), NULL); + g_free (path); +} + +static void +pointer_motion (GtkEventControllerMotion *controller, + double x, + double y, + GtkMaze *self) +{ + GskPathPoint point; + float distance; + + if (!self->active) + return; + + if (gsk_path_get_closest_point (self->path, + &GRAPHENE_POINT_INIT (x, y), + INFINITY, + &point, + &distance)) + { + if (distance < MAZE_STROKE_SIZE_ACTIVE / 2.f) + return; + } + + celebrate (FALSE); + + self->active = FALSE; + gtk_widget_queue_draw (GTK_WIDGET (self)); +} + +static void +pointer_leave (GtkEventControllerMotion *controller, + GtkMaze *self) +{ + if (!self->active) + { + self->active = TRUE; + gtk_widget_queue_draw (GTK_WIDGET (self)); + } +} + +static void +gtk_maze_init (GtkMaze *self) +{ + GtkEventController *controller; + + controller = GTK_EVENT_CONTROLLER (gtk_event_controller_motion_new ()); + g_signal_connect (controller, "motion", G_CALLBACK (pointer_motion), self); + g_signal_connect (controller, "leave", G_CALLBACK (pointer_leave), self); + gtk_widget_add_controller (GTK_WIDGET (self), controller); + + self->active = TRUE; +} + +static void +gtk_maze_set_path (GtkMaze *self, + GskPath *path) +{ + g_clear_pointer (&self->path, gsk_path_unref); + g_clear_pointer (&self->measure, gsk_path_measure_unref); + self->path = gsk_path_ref (path); + self->measure = gsk_path_measure_new (path); + + gtk_widget_queue_draw (GTK_WIDGET (self)); +} + +GtkWidget * +gtk_maze_new (GskPath *path, + GdkPaintable *background, + int width, + int height) +{ + GtkMaze *self; + + self = g_object_new (GTK_TYPE_MAZE, NULL); + + gtk_maze_set_path (self, path); + gsk_path_unref (path); + self->background = background; + if (self->background) + { + g_signal_connect_swapped (self->background, "invalidate-contents", G_CALLBACK (gtk_widget_queue_draw), self); + g_signal_connect_swapped (self->background, "invalidate-size", G_CALLBACK (gtk_widget_queue_resize), self); + } + self->width = width; + self->height = height; + + return GTK_WIDGET (self); +} + +static void +add_point_to_maze (GtkBitset *maze, + GskPathBuilder *builder, + guint x, + guint y) +{ + gboolean set[4] = { FALSE, FALSE, FALSE, FALSE }; + guint dir; + + gtk_bitset_add (maze, y * MAZE_WIDTH + x); + + while (TRUE) + { + set[0] = set[0] || x == 0 || gtk_bitset_contains (maze, y * MAZE_WIDTH + x - 1); + set[1] = set[1] || y == 0 || gtk_bitset_contains (maze, (y - 1) * MAZE_WIDTH + x); + set[2] = set[2] || x + 1 == MAZE_WIDTH || gtk_bitset_contains (maze, y * MAZE_WIDTH + x + 1); + set[3] = set[3] || y + 1 == MAZE_HEIGHT || gtk_bitset_contains (maze, (y + 1) * MAZE_WIDTH + x); + + if (set[0] && set[1] && set[2] && set[3]) + return; + + do + { + dir = g_random_int_range (0, 4); + } + while (set[dir]); + + switch (dir) + { + case 0: + gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE); + gsk_path_builder_line_to (builder, (x - 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE); + add_point_to_maze (maze, builder, x - 1, y); + break; + + case 1: + gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE); + gsk_path_builder_line_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y - 0.5) * MAZE_GRID_SIZE); + add_point_to_maze (maze, builder, x, y - 1); + break; + + case 2: + gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE); + gsk_path_builder_line_to (builder, (x + 1.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE); + add_point_to_maze (maze, builder, x + 1, y); + break; + + case 3: + gsk_path_builder_move_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 0.5) * MAZE_GRID_SIZE); + gsk_path_builder_line_to (builder, (x + 0.5) * MAZE_GRID_SIZE, (y + 1.5) * MAZE_GRID_SIZE); + add_point_to_maze (maze, builder, x, y + 1); + break; + + default: + g_assert_not_reached (); + break; + } + } +} + +static GskPath * +create_path_for_maze (GtkWidget *widget) +{ + GskPathBuilder *builder; + GtkBitset *maze; + + builder = gsk_path_builder_new (); + maze = gtk_bitset_new_empty (); + /* make sure the outer lines are unreachable: + * Set the full range, then remove the center again. */ + gtk_bitset_add_range (maze, 0, MAZE_WIDTH * MAZE_HEIGHT); + gtk_bitset_remove_rectangle (maze, MAZE_WIDTH + 1, MAZE_WIDTH - 2, MAZE_HEIGHT - 2, MAZE_WIDTH); + + /* Fill the maze */ + add_point_to_maze (maze, builder, MAZE_WIDTH / 2, MAZE_HEIGHT / 2); + + /* Add start and stop lines */ + gsk_path_builder_move_to (builder, 1.5 * MAZE_GRID_SIZE, -0.5 * MAZE_GRID_SIZE); + gsk_path_builder_line_to (builder, 1.5 * MAZE_GRID_SIZE, 1.5 * MAZE_GRID_SIZE); + gsk_path_builder_move_to (builder, (MAZE_WIDTH - 1.5) * MAZE_GRID_SIZE, (MAZE_HEIGHT - 1.5) * MAZE_GRID_SIZE); + gsk_path_builder_line_to (builder, (MAZE_WIDTH - 1.5) * MAZE_GRID_SIZE, (MAZE_HEIGHT + 0.5) * MAZE_GRID_SIZE); + + + gtk_bitset_unref (maze); + + return gsk_path_builder_free_to_path (builder); +} + +GtkWidget * +do_path_maze (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + + if (!window) + { + GtkWidget *maze; + GtkMediaStream *stream; + GskPath *path; + + window = gtk_window_new (); + gtk_window_set_resizable (GTK_WINDOW (window), FALSE); + gtk_window_set_title (GTK_WINDOW (window), "Follow the maze with the mouse"); + g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window); + +#if 0 + stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm"); +#else + stream = gtk_nuclear_media_stream_new (); +#endif + gtk_media_stream_play (stream); + gtk_media_stream_set_loop (stream, TRUE); + + path = create_path_for_maze (window); + + maze = gtk_maze_new (path, + GDK_PAINTABLE (stream), + MAZE_WIDTH * MAZE_GRID_SIZE, + MAZE_HEIGHT * MAZE_GRID_SIZE); + + gtk_window_set_child (GTK_WINDOW (window), maze); + } + + if (!gtk_widget_get_visible (window)) + gtk_window_present (GTK_WINDOW (window)); + else + gtk_window_destroy (GTK_WINDOW (window)); + + return window; +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_spinner.c gtk4-4.14.1+ds/demos/gtk-demo/path_spinner.c --- gtk4-4.12.5+ds/demos/gtk-demo/path_spinner.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_spinner.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,323 @@ +/* Path/Spinner + * + * This demo shows how to use GskPath to draw a simple animation + * that could be used as a spinner. + */ + +#include +#include + +#include "paintable.h" + +#undef SHOW_CONTROLS + +#define GTK_TYPE_SPINNER_PAINTABLE (gtk_spinner_paintable_get_type ()) +G_DECLARE_FINAL_TYPE (GtkSpinnerPaintable, gtk_spinner_paintable, GTK, SPINNER_PAINTABLE, GObject) + +struct _GtkSpinnerPaintable +{ + GObject parent_instance; + + gint64 start_time; + + int width; + double angle; + double completion; + + GskPath *circle; + GskPath *path; + GskStroke *stroke; + GdkRGBA color; + GdkRGBA circle_color; +#ifdef SHOW_CONTROLS + GskPath *controls; + GdkRGBA control_color; +#endif +}; + +struct _GtkSpinnerPaintableClass +{ + GObjectClass parent_class; +}; + +static int +gtk_spinner_paintable_get_intrinsic_width (GdkPaintable *paintable) +{ + GtkSpinnerPaintable *self = GTK_SPINNER_PAINTABLE (paintable); + + return self->width; +} + +static int +gtk_spinner_paintable_get_intrinsic_height (GdkPaintable *paintable) +{ + GtkSpinnerPaintable *self = GTK_SPINNER_PAINTABLE (paintable); + + return self->width; +} + +static void +gtk_spinner_paintable_snapshot (GdkPaintable *paintable, + GdkSnapshot *snapshot, + double width, + double height) +{ + GtkSpinnerPaintable *self = GTK_SPINNER_PAINTABLE (paintable); + + gtk_snapshot_append_stroke (snapshot, self->circle, self->stroke, &self->circle_color); + gtk_snapshot_append_stroke (snapshot, self->path, self->stroke, &self->color); +#ifdef SHOW_CONTROLS + GskStroke *stroke = gsk_stroke_new (1); + gtk_snapshot_append_stroke (snapshot, self->controls, stroke, &self->control_color); + gsk_stroke_free (stroke); +#endif +} + +static GdkPaintableFlags +gtk_spinner_paintable_get_flags (GdkPaintable *paintable) +{ + return GDK_PAINTABLE_STATIC_SIZE; +} + +static void +gtk_spinner_paintable_paintable_init (GdkPaintableInterface *iface) +{ + iface->get_intrinsic_width = gtk_spinner_paintable_get_intrinsic_width; + iface->get_intrinsic_height = gtk_spinner_paintable_get_intrinsic_height; + iface->snapshot = gtk_spinner_paintable_snapshot; + iface->get_flags = gtk_spinner_paintable_get_flags; +} + +/* When defining the GType, we need to implement the GdkPaintable interface */ +G_DEFINE_TYPE_WITH_CODE (GtkSpinnerPaintable, gtk_spinner_paintable, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE, + gtk_spinner_paintable_paintable_init)) + +static void +gtk_spinner_paintable_dispose (GObject *object) +{ + GtkSpinnerPaintable *self = GTK_SPINNER_PAINTABLE (object); + + gsk_path_unref (self->circle); + gsk_path_unref (self->path); +#ifdef SHOW_CONTROLS + gsk_path_unref (self->controls); +#endif + + gsk_stroke_free (self->stroke); + + G_OBJECT_CLASS (gtk_spinner_paintable_parent_class)->dispose (object); +} + +static void +gtk_spinner_paintable_class_init (GtkSpinnerPaintableClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = gtk_spinner_paintable_dispose; +} + +static void +gtk_spinner_paintable_init (GtkSpinnerPaintable *self) +{ +} + +static GdkPaintable * +gtk_spinner_paintable_new (void) +{ + GtkSpinnerPaintable *self; + GskPathBuilder *builder; + + self = g_object_new (GTK_TYPE_SPINNER_PAINTABLE, NULL); + + builder = gsk_path_builder_new (); + gsk_path_builder_add_circle (builder, &GRAPHENE_POINT_INIT (50, 50), 40); + self->circle = gsk_path_builder_free_to_path (builder); + + self->width = 100; + self->angle = 0; + self->completion = 1; + gdk_rgba_parse (&self->color, "green"); + gdk_rgba_parse (&self->circle_color, "lightgray"); +#ifdef SHOW_CONTROLS + gdk_rgba_parse (&self->control_color, "black"); +#endif + self->stroke = gsk_stroke_new (5); + + return GDK_PAINTABLE (self); +} + +#ifdef SHOW_CONTROLS +static gboolean +add_controls (GskPathOperation op, + const graphene_point_t *pts, + gsize n_pts, + float weight, + gpointer data) +{ + GskPathBuilder *builder = data; + + switch (op) + { + case GSK_PATH_MOVE: + gsk_path_builder_move_to (builder, pts[0].x, pts[0].y); + break; + + case GSK_PATH_CLOSE: + case GSK_PATH_LINE: + gsk_path_builder_line_to (builder, pts[1].x, pts[1].y); + break; + + case GSK_PATH_QUAD: + case GSK_PATH_CONIC: + gsk_path_builder_line_to (builder, pts[1].x, pts[1].y); + gsk_path_builder_line_to (builder, pts[2].x, pts[2].y); + break; + + case GSK_PATH_CUBIC: + gsk_path_builder_line_to (builder, pts[1].x, pts[1].y); + gsk_path_builder_line_to (builder, pts[2].x, pts[2].y); + gsk_path_builder_line_to (builder, pts[3].x, pts[3].y); + break; + + default: + g_assert_not_reached (); + } + + return TRUE; +} +#endif + +static void +update_path (GtkSpinnerPaintable *self) +{ + GskPathBuilder *builder; + GskPathPoint start, end; + graphene_point_t p0, p1; + float start_angle, end_angle; + + start_angle = self->angle; + end_angle = fmod (self->angle + 360 * self->completion / 100, 360); + + p0 = GRAPHENE_POINT_INIT (50 + 40 * cos (M_PI * start_angle / 180), + 50 + 40 * sin (M_PI * start_angle / 180)); + p1 = GRAPHENE_POINT_INIT (50 + 40 * cos (M_PI * end_angle / 180), + 50 + 40 * sin (M_PI * end_angle / 180)); + + g_clear_pointer (&self->path, gsk_path_unref); + + gsk_path_get_closest_point (self->circle, &p0, INFINITY, &start, NULL); + gsk_path_get_closest_point (self->circle, &p1, INFINITY, &end, NULL); + + builder = gsk_path_builder_new (); + gsk_path_builder_add_segment (builder, self->circle, &start, &end); + self->path = gsk_path_builder_free_to_path (builder); + +#ifdef SHOW_CONTROLS + g_clear_pointer (&self->controls, gsk_path_unref); + builder = gsk_path_builder_new (); + gsk_path_foreach (self->path, -1, add_controls, builder); + self->controls = gsk_path_builder_free_to_path (builder); +#endif + + gdk_paintable_invalidate_contents (GDK_PAINTABLE (self)); +} + +static void +gtk_spinner_paintable_set_completion (GtkSpinnerPaintable *self, + float completion) +{ + self->completion = CLAMP (completion, 0, 100); + update_path (self); +} + +static float +gtk_spinner_paintable_get_completion (GtkSpinnerPaintable *self) +{ + return self->completion; +} + +static void +gtk_spinner_paintable_set_frame_time (GtkSpinnerPaintable *self, + gint64 time) +{ + double delta; + + if (self->start_time == 0) + self->start_time = time; + + delta = (time - self->start_time) / (double) G_TIME_SPAN_SECOND; + self->angle = fmod (60 * delta, 360); + update_path (self); +} + +static gboolean +tick_cb (GtkWidget *widget, + GdkFrameClock *clock, + gpointer data) +{ + GtkSpinnerPaintable *self = data; + + gtk_spinner_paintable_set_frame_time (self, gdk_frame_clock_get_frame_time (clock)); + return G_SOURCE_CONTINUE; +} + +static gboolean +progress_timeout (gpointer data) +{ + GtkSpinnerPaintable *self = data; + static float progress_delta = 0.5; + float progress; + + progress = gtk_spinner_paintable_get_completion (self); + if (progress >= 100 || progress <= 0) + progress_delta = -progress_delta; + + gtk_spinner_paintable_set_completion (self, progress + progress_delta); + + return G_SOURCE_CONTINUE; +} + +static void +unset_timeout (gpointer data) +{ + g_source_remove (GPOINTER_TO_UINT (data)); +} + +GtkWidget * +do_path_spinner (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + + if (!window) + { + GtkWidget *picture; + GdkPaintable *paintable; + guint timeout_id; + + window = gtk_window_new (); + gtk_window_set_resizable (GTK_WINDOW (window), TRUE); + gtk_window_set_title (GTK_WINDOW (window), "Spinner"); + g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window); + + paintable = gtk_spinner_paintable_new (); + picture = gtk_picture_new_for_paintable (paintable); + gtk_picture_set_content_fit (GTK_PICTURE (picture), GTK_CONTENT_FIT_CONTAIN); + gtk_picture_set_can_shrink (GTK_PICTURE (picture), FALSE); + g_object_unref (paintable); + + gtk_widget_add_tick_callback (picture, tick_cb, paintable, NULL); + timeout_id = g_timeout_add (100, progress_timeout, paintable); + + g_object_set_data_full (G_OBJECT (picture), "timeout", GUINT_TO_POINTER (timeout_id), unset_timeout); + + gtk_window_set_child (GTK_WINDOW (window), picture); + } + + if (!gtk_widget_get_visible (window)) + gtk_window_present (GTK_WINDOW (window)); + else + gtk_window_destroy (GTK_WINDOW (window)); + + return window; +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_text.c gtk4-4.14.1+ds/demos/gtk-demo/path_text.c --- gtk4-4.12.5+ds/demos/gtk-demo/path_text.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_text.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,584 @@ +/* Path/Text + * + * This demo shows how to use GskPath to transform a path along another path. + * + * It also demonstrates that paths can be filled with more interesting + * content than just plain colors. + */ + +#include +#include + +#define GTK_TYPE_PATH_WIDGET (gtk_path_widget_get_type ()) +G_DECLARE_FINAL_TYPE (GtkPathWidget, gtk_path_widget, GTK, PATH_WIDGET, GtkWidget) + +#define POINT_SIZE 8 + +enum { + PROP_0, + PROP_TEXT, + PROP_EDITABLE, + N_PROPS +}; + +struct _GtkPathWidget +{ + GtkWidget parent_instance; + + char *text; + gboolean editable; + + graphene_point_t points[4]; + + guint active_point; + + GskPath *line_path; + GskPath *text_path; + + GdkPaintable *background; +}; + +struct _GtkPathWidgetClass +{ + GtkWidgetClass parent_class; +}; + +static GParamSpec *properties[N_PROPS] = { NULL, }; + +G_DEFINE_TYPE (GtkPathWidget, gtk_path_widget, GTK_TYPE_WIDGET) + +static GskPath * +create_path_from_text (GtkWidget *widget, + const char *text, + graphene_point_t *out_offset) +{ + PangoLayout *layout; + PangoFontDescription *desc; + GskPathBuilder *builder; + GskPath *result; + + layout = gtk_widget_create_pango_layout (widget, text); + desc = pango_font_description_from_string ("sans bold 36"); + pango_layout_set_font_description (layout, desc); + pango_font_description_free (desc); + + builder = gsk_path_builder_new (); + gsk_path_builder_add_layout (builder, layout); + result = gsk_path_builder_free_to_path (builder); + + if (out_offset) + graphene_point_init (out_offset, 0, - pango_layout_get_baseline (layout) / (double) PANGO_SCALE); + g_object_unref (layout); + + return result; +} + +typedef struct +{ + GskPathMeasure *measure; + GskPathBuilder *builder; + graphene_point_t offset; + double scale; +} GtkPathTransform; + +static void +gtk_path_transform_point (GskPathMeasure *measure, + const graphene_point_t *pt, + const graphene_point_t *offset, + float scale, + graphene_point_t *res) +{ + graphene_vec2_t tangent; + GskPathPoint point; + + if (gsk_path_measure_get_point (measure, (pt->x + offset->x) * scale, &point)) + { + GskPath *path = gsk_path_measure_get_path (measure); + + gsk_path_point_get_position (&point, path, res); + gsk_path_point_get_tangent (&point, path, GSK_PATH_TO_END, &tangent); + + res->x -= (pt->y + offset->y) * scale * graphene_vec2_get_y (&tangent); + res->y += (pt->y + offset->y) * scale * graphene_vec2_get_x (&tangent); + } +} + +static gboolean +gtk_path_transform_op (GskPathOperation op, + const graphene_point_t *pts, + gsize n_pts, + float weight, + gpointer data) +{ + GtkPathTransform *transform = data; + + switch (op) + { + case GSK_PATH_MOVE: + { + graphene_point_t res; + gtk_path_transform_point (transform->measure, &pts[0], &transform->offset, transform->scale, &res); + gsk_path_builder_move_to (transform->builder, res.x, res.y); + } + break; + + case GSK_PATH_LINE: + { + graphene_point_t res; + gtk_path_transform_point (transform->measure, &pts[1], &transform->offset, transform->scale, &res); + gsk_path_builder_line_to (transform->builder, res.x, res.y); + } + break; + + case GSK_PATH_QUAD: + { + graphene_point_t res[2]; + gtk_path_transform_point (transform->measure, &pts[1], &transform->offset, transform->scale, &res[0]); + gtk_path_transform_point (transform->measure, &pts[2], &transform->offset, transform->scale, &res[1]); + gsk_path_builder_quad_to (transform->builder, res[0].x, res[0].y, res[1].x, res[1].y); + } + break; + + case GSK_PATH_CUBIC: + { + graphene_point_t res[3]; + gtk_path_transform_point (transform->measure, &pts[1], &transform->offset, transform->scale, &res[0]); + gtk_path_transform_point (transform->measure, &pts[2], &transform->offset, transform->scale, &res[1]); + gtk_path_transform_point (transform->measure, &pts[3], &transform->offset, transform->scale, &res[2]); + gsk_path_builder_cubic_to (transform->builder, res[0].x, res[0].y, res[1].x, res[1].y, res[2].x, res[2].y); + } + break; + + case GSK_PATH_CONIC: + { + graphene_point_t res[2]; + gtk_path_transform_point (transform->measure, &pts[1], &transform->offset, transform->scale, &res[0]); + gtk_path_transform_point (transform->measure, &pts[3], &transform->offset, transform->scale, &res[1]); + gsk_path_builder_conic_to (transform->builder, res[0].x, res[0].y, res[1].x, res[1].y, weight); + } + break; + + case GSK_PATH_CLOSE: + gsk_path_builder_close (transform->builder); + break; + + default: + g_assert_not_reached(); + return FALSE; + } + + return TRUE; +} + +static GskPath * +gtk_path_transform (GskPath *line_path, + GskPath *path, + const graphene_point_t *offset) +{ + GskPathMeasure *measure = gsk_path_measure_new (line_path); + GtkPathTransform transform = { measure, gsk_path_builder_new (), *offset }; + graphene_rect_t bounds; + + gsk_path_get_bounds (path, &bounds); + if (bounds.origin.x + bounds.size.width > 0) + transform.scale = gsk_path_measure_get_length (measure) / (bounds.origin.x + bounds.size.width); + else + transform.scale = 1.0f; + + gsk_path_foreach (path, -1, gtk_path_transform_op, &transform); + + gsk_path_measure_unref (measure); + + return gsk_path_builder_free_to_path (transform.builder); +} + +static void +gtk_path_widget_clear_text_path (GtkPathWidget *self) +{ + g_clear_pointer (&self->text_path, gsk_path_unref); +} + +static void +gtk_path_widget_clear_paths (GtkPathWidget *self) +{ + gtk_path_widget_clear_text_path (self); + + g_clear_pointer (&self->line_path, gsk_path_unref); +} + +static void +gtk_path_widget_create_text_path (GtkPathWidget *self) +{ + GskPath *path; + graphene_point_t offset; + + gtk_path_widget_clear_text_path (self); + + path = create_path_from_text (GTK_WIDGET (self), self->text, &offset); + self->text_path = gtk_path_transform (self->line_path, path, &offset); + + gsk_path_unref (path); +} + +static void +gtk_path_widget_create_paths (GtkPathWidget *self) +{ + double width = gtk_widget_get_width (GTK_WIDGET (self)); + double height = gtk_widget_get_height (GTK_WIDGET (self)); + GskPathBuilder *builder; + + gtk_path_widget_clear_paths (self); + + if (width <= 0 || height <= 0) + return; + + builder = gsk_path_builder_new (); + gsk_path_builder_move_to (builder, + self->points[0].x * width, self->points[0].y * height); + gsk_path_builder_cubic_to (builder, + self->points[1].x * width, self->points[1].y * height, + self->points[2].x * width, self->points[2].y * height, + self->points[3].x * width, self->points[3].y * height); + self->line_path = gsk_path_builder_free_to_path (builder); + + gtk_path_widget_create_text_path (self); +} + +static void +gtk_path_widget_allocate (GtkWidget *widget, + int width, + int height, + int baseline) +{ + GtkPathWidget *self = GTK_PATH_WIDGET (widget); + + GTK_WIDGET_CLASS (gtk_path_widget_parent_class)->size_allocate (widget, width, height, baseline); + + gtk_path_widget_create_paths (self); +} + +static void +gtk_path_widget_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) +{ + GtkPathWidget *self = GTK_PATH_WIDGET (widget); + double width = gtk_widget_get_width (widget); + double height = gtk_widget_get_height (widget); + GskPath *path; + GskStroke *stroke; + gsize i; + + /* frosted glass the background */ + gtk_snapshot_push_blur (snapshot, 100); + gdk_paintable_snapshot (self->background, snapshot, width, height); + gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 1, 1, 1, 0.6 }, &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + + /* draw the text */ + if (self->text_path) + { + gtk_snapshot_push_fill (snapshot, self->text_path, GSK_FILL_RULE_WINDING); + gdk_paintable_snapshot (self->background, snapshot, width, height); + + /* ... with an emboss effect */ + stroke = gsk_stroke_new (2.0); + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT(1, 1)); + gtk_snapshot_push_stroke (snapshot, self->text_path, stroke); + gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 0.2 }, &GRAPHENE_RECT_INIT (0, 0, width, height)); + gsk_stroke_free (stroke); + gtk_snapshot_pop (snapshot); + + gtk_snapshot_pop (snapshot); + } + + if (self->editable && self->line_path) + { + GskPathBuilder *builder; + + /* draw the control line */ + stroke = gsk_stroke_new (1.0); + gtk_snapshot_push_stroke (snapshot, self->line_path, stroke); + gsk_stroke_free (stroke); + gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + + /* draw the points */ + builder = gsk_path_builder_new (); + for (i = 0; i < 4; i++) + { + gsk_path_builder_add_circle (builder, &GRAPHENE_POINT_INIT (self->points[i].x * width, self->points[i].y * height), POINT_SIZE); + } + path = gsk_path_builder_free_to_path (builder); + + gtk_snapshot_push_fill (snapshot, path, GSK_FILL_RULE_WINDING); + gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 1, 1, 1, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + + stroke = gsk_stroke_new (1.0); + gtk_snapshot_push_stroke (snapshot, path, stroke); + gsk_stroke_free (stroke); + gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + + gsk_path_unref (path); + } +} + +static void +gtk_path_widget_set_text (GtkPathWidget *self, + const char *text) +{ + if (g_strcmp0 (self->text, text) == 0) + return; + + g_free (self->text); + self->text = g_strdup (text); + + gtk_path_widget_create_paths (self); + + gtk_widget_queue_draw (GTK_WIDGET (self)); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TEXT]); +} + +static void +gtk_path_widget_set_editable (GtkPathWidget *self, + gboolean editable) +{ + if (self->editable == editable) + return; + + self->editable = editable; + + gtk_widget_queue_draw (GTK_WIDGET (self)); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EDITABLE]); +} + +static void +gtk_path_widget_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) + +{ + GtkPathWidget *self = GTK_PATH_WIDGET (object); + + switch (prop_id) + { + case PROP_TEXT: + gtk_path_widget_set_text (self, g_value_get_string (value)); + break; + + case PROP_EDITABLE: + gtk_path_widget_set_editable (self, g_value_get_boolean (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_path_widget_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkPathWidget *self = GTK_PATH_WIDGET (object); + + switch (prop_id) + { + case PROP_TEXT: + g_value_set_string (value, self->text); + break; + + case PROP_EDITABLE: + g_value_set_boolean (value, self->editable); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_path_widget_dispose (GObject *object) +{ + GtkPathWidget *self = GTK_PATH_WIDGET (object); + + gtk_path_widget_clear_paths (self); + + G_OBJECT_CLASS (gtk_path_widget_parent_class)->dispose (object); +} + +static void +gtk_path_widget_class_init (GtkPathWidgetClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = gtk_path_widget_dispose; + object_class->set_property = gtk_path_widget_set_property; + object_class->get_property = gtk_path_widget_get_property; + + widget_class->size_allocate = gtk_path_widget_allocate; + widget_class->snapshot = gtk_path_widget_snapshot; + + properties[PROP_TEXT] = + g_param_spec_string ("text", + "text", + "Text transformed along a path", + NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + properties[PROP_EDITABLE] = + g_param_spec_boolean ("editable", + "editable", + "If the path can be edited by the user", + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, N_PROPS, properties); +} + +static void +drag_begin (GtkGestureDrag *gesture, + double x, + double y, + GtkPathWidget *self) +{ + graphene_point_t mouse = GRAPHENE_POINT_INIT (x, y); + double width = gtk_widget_get_width (GTK_WIDGET (self)); + double height = gtk_widget_get_height (GTK_WIDGET (self)); + gsize i; + + for (i = 0; i < 4; i++) + { + if (graphene_point_distance (&GRAPHENE_POINT_INIT (self->points[i].x * width, self->points[i].y * height), &mouse, NULL, NULL) <= POINT_SIZE) + { + self->active_point = i; + break; + } + } + if (i == 4) + { + gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); + return; + } + + gtk_widget_queue_draw (GTK_WIDGET (self)); +} + +static void +drag_update (GtkGestureDrag *drag, + double offset_x, + double offset_y, + GtkPathWidget *self) +{ + double width = gtk_widget_get_width (GTK_WIDGET (self)); + double height = gtk_widget_get_height (GTK_WIDGET (self)); + double start_x, start_y; + + gtk_gesture_drag_get_start_point (drag, &start_x, &start_y); + + self->points[self->active_point] = GRAPHENE_POINT_INIT ((start_x + offset_x) / width, + (start_y + offset_y) / height); + self->points[self->active_point].x = CLAMP (self->points[self->active_point].x, 0, 1); + self->points[self->active_point].y = CLAMP (self->points[self->active_point].y, 0, 1); + + gtk_path_widget_create_paths (self); + + gtk_widget_queue_draw (GTK_WIDGET (self)); +} + +static void +pointer_motion (GtkEventControllerMotion *controller, + double x, + double y, + GtkPathWidget *self) +{ + GskPathPoint point; + + if (gsk_path_get_closest_point (self->line_path, + &GRAPHENE_POINT_INIT (x, y), + INFINITY, + &point, + NULL)) + { + gtk_widget_queue_draw (GTK_WIDGET (self)); + } +} + +static void +pointer_leave (GtkEventControllerMotion *controller, + GtkPathWidget *self) +{ + gtk_widget_queue_draw (GTK_WIDGET (self)); +} + +static void +gtk_path_widget_init (GtkPathWidget *self) +{ + GtkEventController *controller; + + controller = GTK_EVENT_CONTROLLER (gtk_gesture_drag_new ()); + g_signal_connect (controller, "drag-begin", G_CALLBACK (drag_begin), self); + g_signal_connect (controller, "drag-update", G_CALLBACK (drag_update), self); + g_signal_connect (controller, "drag-end", G_CALLBACK (drag_update), self); + gtk_widget_add_controller (GTK_WIDGET (self), controller); + + controller = GTK_EVENT_CONTROLLER (gtk_event_controller_motion_new ()); + g_signal_connect (controller, "enter", G_CALLBACK (pointer_motion), self); + g_signal_connect (controller, "motion", G_CALLBACK (pointer_motion), self); + g_signal_connect (controller, "leave", G_CALLBACK (pointer_leave), self); + gtk_widget_add_controller (GTK_WIDGET (self), controller); + + self->points[0] = GRAPHENE_POINT_INIT (0.1, 0.9); + self->points[1] = GRAPHENE_POINT_INIT (0.3, 0.1); + self->points[2] = GRAPHENE_POINT_INIT (0.7, 0.1); + self->points[3] = GRAPHENE_POINT_INIT (0.9, 0.9); + + self->background = GDK_PAINTABLE (gdk_texture_new_from_resource ("/sliding_puzzle/portland-rose.jpg")); + + gtk_path_widget_set_text (self, "It's almost working"); +} + +GtkWidget * +gtk_path_widget_new (void) +{ + GtkPathWidget *self; + + self = g_object_new (GTK_TYPE_PATH_WIDGET, NULL); + + return GTK_WIDGET (self); +} + +GtkWidget * +do_path_text (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + + if (!window) + { + GtkBuilder *builder; + + g_type_ensure (GTK_TYPE_PATH_WIDGET); + + builder = gtk_builder_new_from_resource ("/path_text/path_text.ui"); + window = GTK_WIDGET (gtk_builder_get_object (builder, "window")); + gtk_window_set_display (GTK_WINDOW (window), + gtk_widget_get_display (do_widget)); + g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window); + g_object_unref (builder); + } + + if (!gtk_widget_get_visible (window)) + gtk_window_present (GTK_WINDOW (window)); + else + gtk_window_destroy (GTK_WINDOW (window)); + + return window; +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_text.ui gtk4-4.14.1+ds/demos/gtk-demo/path_text.ui --- gtk4-4.12.5+ds/demos/gtk-demo/path_text.ui 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_text.ui 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,38 @@ + + + + Text along a Path + + + + + document-edit-symbolic + + + + + + + vertical + + + + + + Through the looking glass + + + + + + + + + true + true + + + + + + diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_walk.c gtk4-4.14.1+ds/demos/gtk-demo/path_walk.c --- gtk4-4.12.5+ds/demos/gtk-demo/path_walk.c 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_walk.c 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,373 @@ +/* Path/Walk + * + * This demo draws a world map and shows how to animate objects along a GskPath. + * + * The world map that is used here is a path with 211 lines and 1569 cubic + * Bėzier segments in 121 contours. + */ + +#include +#include + +#define GTK_TYPE_PATH_WALK (gtk_path_walk_get_type ()) +G_DECLARE_FINAL_TYPE (GtkPathWalk, gtk_path_walk, GTK, PATH_WALK, GtkWidget) + +#define POINT_SIZE 8 + +enum { + PROP_0, + PROP_N_POINTS, + PROP_PATH, + N_PROPS +}; + +struct _GtkPathWalk +{ + GtkWidget parent_instance; + + GskPath *path; + GskPathMeasure *measure; + graphene_rect_t bounds; + GskPath *arrow_path; + guint n_points; +}; + +struct _GtkPathWalkClass +{ + GtkWidgetClass parent_class; +}; + +static GParamSpec *properties[N_PROPS] = { NULL, }; + +G_DEFINE_TYPE (GtkPathWalk, gtk_path_walk, GTK_TYPE_WIDGET) + +static void +rgba_init_from_hsla (GdkRGBA *rgba, + float hue, + float saturation, + float lightness, + float alpha) +{ + float m1, m2; + + if (lightness <= 0.5) + m2 = lightness * (1 + saturation); + else + m2 = lightness + saturation - lightness * saturation; + m1 = 2 * lightness - m2; + + rgba->alpha = alpha; + + if (saturation == 0) + { + rgba->red = lightness; + rgba->green = lightness; + rgba->blue = lightness; + } + else + { + hue = hue + 120; + while (hue > 360) + hue -= 360; + while (hue < 0) + hue += 360; + + if (hue < 60) + rgba->red = m1 + (m2 - m1) * hue / 60; + else if (hue < 180) + rgba->red = m2; + else if (hue < 240) + rgba->red = m1 + (m2 - m1) * (240 - hue) / 60; + else + rgba->red = m1; + + hue -= 120; + if (hue < 0) + hue += 360; + + if (hue < 60) + rgba->green = m1 + (m2 - m1) * hue / 60; + else if (hue < 180) + rgba->green = m2; + else if (hue < 240) + rgba->green = m1 + (m2 - m1) * (240 - hue) / 60; + else + rgba->green = m1; + + hue -= 120; + if (hue < 0) + hue += 360; + + if (hue < 60) + rgba->blue = m1 + (m2 - m1) * hue / 60; + else if (hue < 180) + rgba->blue = m2; + else if (hue < 240) + rgba->blue = m1 + (m2 - m1) * (240 - hue) / 60; + else + rgba->blue = m1; + } +} + +static void +gtk_path_walk_snapshot (GtkWidget *widget, + GtkSnapshot *snapshot) +{ + GtkPathWalk *self = GTK_PATH_WALK (widget); + double width = gtk_widget_get_width (widget); + double height = gtk_widget_get_height (widget); + float length, progress; + GskStroke *stroke; + guint i; + + if (self->path == NULL) + return; + + gtk_snapshot_save (snapshot); + + stroke = gsk_stroke_new (2.0); + gtk_snapshot_push_stroke (snapshot, self->path, stroke); + gtk_snapshot_append_color (snapshot, &(GdkRGBA) { 0, 0, 0, 1 }, &GRAPHENE_RECT_INIT (0, 0, width, height)); + gtk_snapshot_pop (snapshot); + gsk_stroke_free (stroke); + + length = gsk_path_measure_get_length (self->measure); + progress = 25.f * gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget)) / G_USEC_PER_SEC; + + stroke = gsk_stroke_new (1.0); + for (i = 0; i < self->n_points; i++) + { + GskPathPoint point; + graphene_point_t position; + float angle; + GdkRGBA color; + float distance; + + distance = i * length / self->n_points; + distance = fmod (distance + progress, length); + + gsk_path_measure_get_point (self->measure, distance, &point); + gsk_path_point_get_position (&point, self->path, &position); + angle = gsk_path_point_get_rotation (&point, self->path, GSK_PATH_FROM_START); + rgba_init_from_hsla (&color, 360.f * i / self->n_points, 1, 0.5, 1); + + gtk_snapshot_save (snapshot); + gtk_snapshot_translate (snapshot, &position); + gtk_snapshot_rotate (snapshot, angle); + gtk_snapshot_append_fill (snapshot, self->arrow_path, GSK_FILL_RULE_EVEN_ODD, &color); + gtk_snapshot_append_stroke (snapshot, self->arrow_path, stroke, &(GdkRGBA) { 0, 0, 0, 1 }); + gtk_snapshot_restore (snapshot); + } + + gsk_stroke_free (stroke); + gtk_snapshot_restore (snapshot); +} + +static void +gtk_path_walk_measure (GtkWidget *widget, + GtkOrientation orientation, + int for_size, + int *minimum, + int *natural, + int *minimum_baseline, + int *natural_baseline) +{ + GtkPathWalk *self = GTK_PATH_WALK (widget); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + *minimum = *natural = (int) ceilf (self->bounds.size.width); + else + *minimum = *natural = (int) ceilf (self->bounds.size.height); +} + +static void +gtk_path_walk_set_n_points (GtkPathWalk *self, + gsize n_points) +{ + if (self->n_points == n_points) + return; + + self->n_points = n_points; + + gtk_widget_queue_draw (GTK_WIDGET (self)); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_N_POINTS]); +} + +static void +gtk_path_walk_set_path (GtkPathWalk *self, + GskPath *path) +{ + if (self->path == path) + return; + + g_clear_pointer (&self->path, gsk_path_unref); + graphene_rect_init (&self->bounds, 0, 0, 0, 0); + if (path) + { + GskStroke *stroke; + + self->path = gsk_path_ref (path); + stroke = gsk_stroke_new (2.0); + gsk_path_get_stroke_bounds (path, stroke, &self->bounds); + gsk_stroke_free (stroke); + self->measure = gsk_path_measure_new (self->path); + } + + gtk_widget_queue_resize (GTK_WIDGET (self)); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_PATH]); +} + +static void +gtk_path_walk_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) + +{ + GtkPathWalk *self = GTK_PATH_WALK (object); + + switch (prop_id) + { + case PROP_N_POINTS: + gtk_path_walk_set_n_points (self, g_value_get_uint (value)); + break; + + case PROP_PATH: + gtk_path_walk_set_path (self, g_value_get_boxed (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_path_walk_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkPathWalk *self = GTK_PATH_WALK (object); + + switch (prop_id) + { + case PROP_N_POINTS: + g_value_set_uint (value, self->n_points); + break; + + case PROP_PATH: + g_value_set_boxed (value, self->path); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_path_walk_dispose (GObject *object) +{ + GtkPathWalk *self = GTK_PATH_WALK (object); + + g_clear_pointer (&self->path, gsk_path_unref); + g_clear_pointer (&self->measure, gsk_path_measure_unref); + g_clear_pointer (&self->arrow_path, gsk_path_unref); + + G_OBJECT_CLASS (gtk_path_walk_parent_class)->dispose (object); +} + +static void +gtk_path_walk_class_init (GtkPathWalkClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = gtk_path_walk_dispose; + object_class->set_property = gtk_path_walk_set_property; + object_class->get_property = gtk_path_walk_get_property; + + widget_class->snapshot = gtk_path_walk_snapshot; + widget_class->measure = gtk_path_walk_measure; + + properties[PROP_N_POINTS] = + g_param_spec_uint ("n-points", + NULL, NULL, + 1, G_MAXUINT, + 500, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + properties[PROP_PATH] = + g_param_spec_boxed ("path", + NULL, NULL, + GSK_TYPE_PATH, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, N_PROPS, properties); +} + +static gboolean +tick_tick_tick (GtkWidget *self, + GdkFrameClock *frame_clock, + gpointer unused) +{ + gtk_widget_queue_draw (GTK_WIDGET (self)); + + return G_SOURCE_CONTINUE; +} + +static void +gtk_path_walk_init (GtkPathWalk *self) +{ + /* Data taken from + * https://commons.wikimedia.org/wiki/Maps_of_the_world#/media/File:Simplified_blank_world_map_without_Antartica_(no_borders).svg + */ + GBytes *data = g_resources_lookup_data ("/path_walk/path_world.txt", 0, NULL); + GskPath *path = gsk_path_parse (g_bytes_get_data (data, NULL)); + g_bytes_unref (data); + gtk_path_walk_set_path (self, path); + gsk_path_unref (path); + self->arrow_path = gsk_path_parse ("M 5 0 L 0 -5. 0 -2, -5 -2, -5 2, 0 2, 0 5 Z"); + self->n_points = 500; + gtk_widget_add_tick_callback (GTK_WIDGET (self), tick_tick_tick, NULL, NULL); +} + +GtkWidget * +gtk_path_walk_new (void) +{ + GtkPathWalk *self; + + self = g_object_new (GTK_TYPE_PATH_WALK, NULL); + + return GTK_WIDGET (self); +} + +GtkWidget * +do_path_walk (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + + if (!window) + { + GtkBuilder *builder; + + g_type_ensure (GTK_TYPE_PATH_WALK); + + builder = gtk_builder_new_from_resource ("/path_walk/path_walk.ui"); + window = GTK_WIDGET (gtk_builder_get_object (builder, "window")); + gtk_window_set_display (GTK_WINDOW (window), + gtk_widget_get_display (do_widget)); + g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window); + g_object_unref (builder); + } + + if (!gtk_widget_get_visible (window)) + gtk_window_present (GTK_WINDOW (window)); + else + gtk_window_destroy (GTK_WINDOW (window)); + + return window; +} diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_walk.ui gtk4-4.14.1+ds/demos/gtk-demo/path_walk.ui --- gtk4-4.12.5+ds/demos/gtk-demo/path_walk.ui 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_walk.ui 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,35 @@ + + + + World Map + + + + + + + 0 + 5000 + 500 + 1 + 10 + + + + + + + + + vertical + + + + true + true + + + + + + diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/path_world.txt gtk4-4.14.1+ds/demos/gtk-demo/path_world.txt --- gtk4-4.12.5+ds/demos/gtk-demo/path_world.txt 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/path_world.txt 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1 @@ +m376.1 717.51c-5.9996-2.2452-7.6777-4.4437-6.2526-8.192.66021-1.7365 1.9284-3.1572 2.8181-3.1572.88976 0 4.7846 2.0468 8.6551 4.5484 3.8706 2.5017 8.6034 5.1172 10.517 5.8122l3.4801 1.2636-4.2814.093c-2.3548.051-5.8094.3148-7.677.5856s-5.1345-.1584-7.2599-.9538zm-13.617-11.525c-1.1297-.6322-3.013-.845-4.1853-.473-1.4762.4685-2.6161-.2294-3.7085-2.2705-.86745-1.6209-2.4222-3.2377-3.455-3.5929-2.3696-.815-7.3366-8.8624-10.101-16.366-1.3963-3.7895-3.2741-6.409-5.5033-7.677-3.9557-2.25-4.2389-3.2705-1.1772-4.2422 3.5028-1.1117 4.1544-7.2866 1.206-11.427-1.4072-1.9762-2.1477-4.2967-1.7237-5.4016.50031-1.3038-.88054-3.5915-4.2241-6.9984-4.2204-4.3002-5.0008-5.8634-5.1896-10.394-.12219-2.9332-.83638-6.0732-1.5871-6.9777-.94566-1.1394-1.1385-5.2292-.62799-13.315.55333-8.763.23103-14.171-1.2937-21.709-2.2644-11.195-3.421-32.052-2.8326-51.081.12554-4.0599-.40067-9.6339-1.1693-12.387-1.8718-6.7032-10.484-15.165-21.128-20.758-7.6131-4.0006-8.6836-5.0262-11.66-11.171-1.8023-3.7213-5.2467-9.2829-7.6543-12.359-2.4076-3.0763-5.0252-7.5939-5.8169-10.039-2.5128-7.7611-6.9425-15.559-9.9622-17.538-1.6069-1.0529-3.4397-3.7907-4.0729-6.0842-1.0246-3.7107-.75449-4.7468 2.4527-9.4083 3.4776-5.0546 3.5186-5.2607 1.1685-5.8753-5.7747-1.5101-3.3461-9.2287 7.0194-22.309 6.8892-8.6934 8.9075-15.316 6.9991-22.967-.72727-2.9157-1.3785-5.9657-1.4472-6.7777-.0687-.81199-.58647-1.4763-1.1506-1.4763-.56417 0-.45567-1.0653.24115-2.3673 1.0737-2.0062.80247-2.5789-1.7776-3.7545-3.7604-1.7134-9.4384-.0195-9.4603 2.8223-.0263 3.4077-1.5249 3.6587-6.4662 1.0832-2.6464-1.3794-5.3952-2.508-6.1085-2.508-.71326 0-3.4872-1.8869-6.1643-4.193-2.6771-2.3062-5.5318-4.7188-6.3438-5.3614-.81199-.6426-1.4763-2.3937-1.4763-3.8914s-1.043-3.6669-2.3177-4.8205-2.9265-3.9423-3.6707-6.1971c-.97806-2.9635-1.7105-3.7422-2.6428-2.8099-1.9458 1.9458-4.8266 1.5762-11.819-1.5161-3.6554-1.6166-7.4637-4.3775-8.9848-6.5137-1.4521-2.0393-4.2265-4.5281-6.1652-5.5307-3.1994-1.6545-3.9993-1.6417-8.6599.13816l-5.1349 1.961-15.754-7.6341c-9.6908-4.6959-17.212-9.1754-19.541-11.639-3.6119-3.8197-3.7288-4.2345-2.5269-8.9694 1.101-4.3376.91403-5.6795-1.4806-10.626-1.5074-3.1141-4.801-7.8972-7.319-10.629-2.518-2.7319-4.2923-5.4299-3.9427-5.9956.34957-.56562-1.4242-4.3778-3.9417-8.4714-2.8599-4.6505-4.8783-9.6321-5.3797-13.278-.64275-4.6734-1.3917-6.1032-3.7626-7.1835-2.5132-1.1451-3.216-.99916-4.655.96669-2.0267 2.7687-1.4506 5.6917 3.0308 15.376 1.8211 3.9353 3.703 9.7692 4.1821 12.964.47911 3.1949 1.8942 7.8145 3.1448 10.266 2.962 5.806 1.0495 5.7035-3.6214-.19397-2.7549-3.4783-3.4989-5.3859-2.9514-7.5673.58456-2.3291.009-3.4507-2.8543-5.5681-4.3426-3.2106-5.2616-5.2817-3.6665-8.2623.93021-1.7381.50367-3.6443-1.8587-8.3062-2.399-4.7343-2.9008-7.0276-2.3068-10.543.97096-5.7471-1.6075-10.949-6.4142-12.94-2.7752-1.1496-3.732-2.4355-4.2974-5.7764-.40007-2.3637-1.1663-6.0208-1.7027-8.1269-.55799-2.1907-.5174-4.1122.0949-4.4906.5886-.36377.20347-1.9842-.85584-3.6009-1.5602-2.3811-1.667-3.508-.5624-5.9323.74999-1.646 1.0331-3.5276.62905-4.1814-.40401-.65369.60277-2.6069 2.2373-4.3405 1.6345-1.7336 3.8106-5.191 4.8357-7.6832 1.0252-2.4922 4.1843-7.1121 7.0204-10.266 2.836-3.1544 6.4315-8.6799 7.9898-12.279 2.163-4.9956 3.4309-6.5484 5.3595-6.5638 1.3894-.0106 2.4524.6442 2.3622 1.4562-.37598 3.3837 2.2996 2.3412 5.3047-2.0669 1.7714-2.5984 2.7272-4.9014 2.1239-5.118-.60324-.21653-1.0968-1.194-1.0968-2.1722 0-.97819-2.445-4.1548-5.4334-7.0592-4.9565-4.8172-5.2748-5.4559-3.6267-7.2771 1.3353-1.4755 1.4923-2.5582.60183-4.1494-1.5649-2.7964.90447-9.0586 3.582-9.0838 1.1059-.0106 1.4215-.38694.74251-.8858-1.5233-1.1192-2.2135-3.6609-1.9995-7.3636.34182-5.9139-.95236-8.3877-5.3492-10.225-2.3716-.99091-5.9903-3.0818-8.0417-4.6465s-4.654-2.8448-5.7836-2.8448-6.2644-1.0751-11.411-2.389c-8.2737-2.1125-9.732-2.1959-12.598-.72083-5.9396 3.0569-12.232 4.3028-14.798 2.9299-1.9243-1.0298-4.0243-.39385-11.347 3.4365-4.9421 2.5851-10.846 5.1014-13.119 5.5916-2.2736.49031-6.6246 2.1466-9.669 3.6806-8.6354 4.3513-21.006 8.7375-24.427 8.6615-2.2083-.0491-.71532-1.0176 5.1602-3.3476 9.9854-3.9598 20.246-9.1165 21.195-10.652 1.1689-1.8913-1.3685-2.57-4.4164-1.1812-2.2441 1.0225-3.6271.92681-6.2166-.43l-3.3305-1.745 3.6229-1.8735c4.0954-2.1178 5.3837-4.5139 4.4428-8.2629-.91131-3.6309 4.1133-6.2988 14.938-7.9313 5.8161-.87715 10.238-2.3372 13.214-4.3636 5.2492-3.5734 4.3474-6.2741-1.3122-3.9298-2.6793 1.1098-4.6308 1.1219-8.5987.0535-4.822-1.2984-4.9938-1.4838-2.8369-3.0609 3.6089-2.6389 11.073-4.2262 15.977-3.3977 3.1032.52428 5.6451.15725 8.2539-1.1918l3.7697-1.9494-2.4815-2.6415c-1.3648-1.4528-2.4815-2.9538-2.4815-3.3356 0-1.0958 7.1101-3.2874 10.665-3.2874 1.7745 0 6.6391-1.2846 10.81-2.8546 4.1711-1.57 13.794-3.7134 21.385-4.7632 12.312-1.7026 14.919-1.7234 24.15-.19261 5.692.94379 13.538 2.0694 17.435 2.5014s10.796 1.8032 15.33 3.0472c10.53 2.8891 17.389 2.8538 29.154-.14984 5.1948-1.3264 10.445-2.0941 11.668-1.7062 1.2224.38796 3.3007.12833 4.6186-.57697 1.8158-.9718 3.2239-.85424 5.8147.48549 2.3407 1.2104 5.2301 1.5559 9.164 1.0957 4.1503-.48551 7.7844.0173 13.09 1.8112 4.0394 1.3658 8.5258 2.4833 9.9696 2.4833 2.5576 0 2.5662.0434.33253 1.6872-2.1903 1.612-2.1966 1.7245-.13994 2.5214 1.184.4588 5.294.50584 9.1334.10454 6.9338-.72473 6.9938-.70434 8.9273 3.0346l1.9466 3.7642 2.5268-3.1689c1.452-1.821 4.9026-3.8839 8.1124-4.8499 4.8512-1.46 6.3234-1.4551 11.196.037 3.4394 1.0533 7.5559 1.437 10.639.99171 3.9258-.567 5.7486-.21383 8.31 1.61 3.2336 2.3026 3.3233 2.3037 6.1913.081 1.6006-1.2405 4.8942-2.8082 7.3191-3.4838 5.8053-1.6174 7.7742-5.064 4.2879-7.5059-2.4654-1.7268-2.3576-1.8586 4.123-5.037 4.8332-2.3704 7.0097-2.9087 7.9517-1.9667.94206.94206.93249 1.9783-.035 3.786-1.649 3.0811.40351 7.7383 2.9754 6.7514.92457-.35479 2.4583-.34682 3.4082.0177 1.4921.57257 1.4682 1.058-.17557 3.5668-4.5411 6.9306 5.6396 4.9669 12.532-2.4172 2.8021-3.0021 7.1437-3.9122 11.213-2.3507 2.628 1.0085 2.3818 1.8341-1.9703 6.606-5.1864 5.6868-7.8404 6.8499-15.63 6.8499-3.7649 0-8.2094.81563-10.28 1.8866-2.8668 1.4825-4.2647 1.6058-6.5258.57553-4.2154-1.9207-5.683-.32203-2.6591 2.8967l2.5811 2.7475-5.1497 1.4616c-2.8324.80386-7.5414 1.5393-10.465 1.6342-4.2391.13774-5.3165.59793-5.3229 2.2736-.006 1.4339-2.068 2.9429-6.4959 4.7529-14.348 5.8648-26.519 16.439-22.112 19.212.82565.51946 2.1363 2.3914 2.9125 4.1598.89385 2.0365 2.6169 3.4567 4.6994 3.8736 1.8085.36204 6.477 2.2286 10.375 4.1479 3.8975 1.9193 8.6809 3.8372 10.63 4.2619 5.3651 1.1693 5.4121 1.2924 2.9134 7.6317-2.1378 5.4235-2.1809 6.1974-.52425 9.4011.9929 1.9201 2.456 3.4722 3.2513 3.4492 3.87-.11196 7.4987-3.6836 9.7534-9.5998 2.149-5.6389 3.1283-6.6908 9.2965-9.9853 9.1032-4.8622 12.889-9.6509 11.88-15.028-.65709-3.5026-.31578-4.3246 2.6822-6.4593 1.8893-1.3453 4.3906-4.5651 5.5586-7.1551 2.6106-5.7893 6.8058-7.7962 13.88-6.6397 6.2734 1.0256 13.692 5.0085 14.588 7.8319.36785 1.159.0624 3.2405-.67887 4.6255-1.1227 2.0977-.91061 2.9834 1.2701 5.3047l2.6178 2.7865 4.2746-2.2158c2.351-1.2187 6.1192-3.5961 8.3738-5.2831l4.0992-3.0673.96303 2.6033c.52968 1.4318.68002 3.3409.33409 4.2423-.34591.90145-.0769 2.6705.59783 3.9312.75906 1.4183.81809 3.0225.15482 4.2077-.74781 1.3363-.24803 3.3659 1.6529 6.7125 2.7232 4.7942 2.7234 4.7981.33194 6.4731-3.1467 2.2041-1.1278 4.5416 2.326 2.6931 3.4301-1.8358 7.3567-1.597 9.7783.59451 3.5796 3.2395.60281 7.1151-8.8987 11.585-10.335 4.8622-14.941 5.8254-28.43 5.9447-9.9608.0881-11.28.40575-20.964 5.0481-5.6839 2.7247-10.334 5.4216-10.334 5.9931 0 2.437 1.791 2.225 8.6624-1.0257 4.0486-1.9153 9.2672-3.4454 11.753-3.446 4.2454-.00089 4.4003.13043 3.0745 2.6076-.76781 1.4347-2.4241 3.441-3.6806 4.4584-1.9753 1.5995-2.091 2.2748-.85446 4.9886 1.8544 4.07 6.6972 6.0284 12.49 5.051l4.5782-.77249-3.5201 2.4285c-1.9361 1.3357-5.125 2.7751-7.0864 3.1986s-5.9926 1.9925-8.9582 3.4866c-3.0103 1.5166-6.0346 2.3192-6.8471 1.8171-1.8691-1.1552.10382-2.8883 6.1765-5.4256 5.401-2.2567 4.5376-4.654-1.2829-3.5621-2.2672.42533-9.6189 3.1945-16.337 6.1537-10.486 4.6189-12.316 5.8386-12.926 8.6182-.75039 3.4165-3.3106 5.0325-12.312 7.771-2.8713.87358-6.5917 2.9847-8.2675 4.6914s-4.8845 4.262-7.1305 5.6784c-2.246 1.4165-4.3964 3.8981-4.7787 5.5148-.62997 2.6643-.77647 2.7274-1.5652.67503-1.4779-3.8458-3.7047-.086-3.8328 6.4715-.13134 6.7187-3.537 11.302-11.006 14.811-7.658 3.5981-18.555 12.1-20.763 16.2-1.9492 3.6195-2.0309 5.0296-.82994 14.333 1.1204 8.6791 1.0535 10.857-.42092 13.708-1.101 2.1291-2.3857 3.1469-3.4545 2.7368-2.5342-.97247-5.6339-11.401-4.7652-16.032.60341-3.2165.20366-4.4353-2.1932-6.687-1.9319-1.8149-3.7151-2.5048-5.2308-2.0238-1.2654.40162-4.8425-.36009-7.9535-1.6936-4.7664-2.0431-6.2874-2.2144-9.6904-1.0913-2.3071.76141-4.5994 2.5672-5.35 4.2147-1.1167 2.451-1.8564 2.7657-4.9406 2.1023-1.995-.42913-5.0625-1.5134-6.8166-2.4096-4.3204-2.2072-6.7398-2.0534-11.593.73698-2.2634 1.3015-6.8822 3.7924-10.264 5.5354-3.8864 2.0031-6.5562 4.2829-7.2562 6.1964-.60914 1.665-2.7869 8.1556-4.8395 14.424l-3.7319 11.396 1.9061 7.3561c3.5022 13.515 8.3749 17.561 18.527 15.384 7.6536-1.6414 12.25-4.9674 13.94-10.087 1.073-3.2513 2.2305-4.3261 5.6951-5.2884 5.2144-1.4483 7.3922-1.5017 9.395-.23063 1.6526 1.0489 1.0716 2.7747-6.3283 18.796-5.0774 10.993-4.7118 11.976 3.9871 10.722 7.9253-1.1432 15.17-.26593 16.016 1.9394.32988.85967-.20672 6.6608-1.1925 12.891-1.7634 11.146-1.7508 11.395.78783 15.503 1.419 2.2961 4.0796 4.9501 5.9124 5.8978 2.9258 1.513 3.8437 1.5095 7.525-.0286 5.8497-2.4442 9.0265-2.1857 13.089 1.065 3.2486 2.5993 3.708 2.6726 6.261.99981 1.5153-.99288 3.5826-3.4536 4.5939-5.4683 2.2804-4.5428 6.1226-7.736 9.3501-7.7706 1.3483-.0144 3.6998-1.355 5.2254-2.979 3.0983-3.298 8.554-4.3725 5.8874-1.1595-2.2378 2.6963-3.5173 11.369-2.0749 14.064 1.2009 2.2439 1.2974 2.231 3.4827-.4678 1.5559-1.9215 1.8696-3.1536 1.0194-4.0039-2.0287-2.0287-1.4179-3.7146 2.3569-6.5054 3.919-2.8974 6.9507-2.6 10.332 1.0135 2.4796 2.6495 15.719 6.231 19.513 5.2787 5.7782-1.4502 21.391 8.0427 27.257 16.573 2.7932 4.0618 11.717 8.1493 15.64 7.1645 8.0712-2.0258 19.137 6.0611 21.725 15.876.77069 2.9232 1.9326 5.6458 2.582 6.0504 1.7232 1.0735-.85798 5.3153-6.5005 10.683-3.605 3.4294-4.4658 4.9058-3.4516 5.92s2.6812.12523 6.6843-3.5646c5.822-5.3666 7.7649-5.9113 10.682-2.9946 1.7743 1.7743 1.7198 2.1357-.71205 4.7243-1.4483 1.5417-3.4708 2.8367-4.4943 2.8779-1.0787.0434-.64274.56131 1.037 1.232 2.3073.92129 3.511.66189 5.9054-1.2727 6.2358-5.0384 7.7021-5.2804 13.241-2.1858 3.601 2.0118 5.0433 3.5436 4.8617 5.1634-.5049 4.5038.55724 5.5011 3.6797 3.4552 2.4818-1.6261 4.1844-1.7034 12.488-.56646 8.8324 1.2093 9.9892 1.6914 14.227 5.9289 3.146 3.146 6.6848 5.2149 11.13 6.5072 5.9687 1.7352 6.617 2.2643 7.6995 6.2844 1.5695 5.8287-.2694 12.297-5.2428 18.441-2.1245 2.6245-4.7286 6.4774-5.7868 8.562s-3.3086 5.1747-5.0008 6.867c-2.8645 2.8645-3.0239 3.581-2.3098 10.383 1.395 13.288-5.1048 38.078-11.374 43.38-2.0411 1.7261-3.7877 2.1315-7.0244 1.6302-2.6604-.41202-4.6298-.14623-5.1497.695-.46301.74919-3.0421 2.3296-5.7313 3.512s-6.6928 3.6902-8.897 5.5728c-3.815 3.2585-3.9428 3.6194-2.6589 7.5094 1.4802 4.4851.48339 9.7956-2.6889 14.325-1.0256 1.4643-1.8648 3.9555-1.8648 5.536s-1.2323 4.5183-2.7384 6.5284-4.4114 6.6114-6.4562 10.225c-5.0308 8.8906-8.0557 10.431-15.35 7.8164-6.3305-2.269-9.7062-2.54-9.7062-.77919 0 .66351 1.2619 1.7814 2.8042 2.4841 1.5423.70274 3.9458 3.5635 5.3411 6.3573 2.0777 4.1602 2.2976 5.6049 1.2146 7.9816-1.6776 3.6818-8.0922 6.7731-14.055 6.7731-5.2809 0-6.591 1.2916-4.767 4.6999 1.1259 2.1038.36855 5.4886-1.8088 8.0837-.17644.21029-2.0257-.49929-4.1095-1.5768-4.9743-2.5723-6.7353-.93378-4.2213 3.9278 1.0225 1.9774 2.9668 3.9468 4.3205 4.3764 2.3267.73845 2.3519.90217.46025 2.9924-1.1018 1.2174-1.6734 3.0652-1.2719 4.1116.43147 1.1244-.53084 3.5524-2.3567 5.9463-2.9681 3.8914-3.0104 4.1612-1.1077 7.0652 1.0881 1.6606 2.7852 3.3289 3.7715 3.7074 3.5569 1.3649 4.1465 6.0283 1.4343 11.345-2.7171 5.3259-3.1341 10.666-1.0308 13.2 1.9118 2.3036-4.5216 6.7916-7.4146 5.1726zm-87.043-511.53c3.1557-6.5944 9.0279-11.506 13.757-11.506 3.4039 0 3.444.5524.32738 4.5145l-2.4506 3.1155 2.5144 2.036c2.0259 1.6405 3.0712 1.7823 5.3806.73004 1.5764-.71827 3.1923-2.3333 3.5908-3.5889.54223-1.7084 1.424-2.1075 3.5034-1.5856 1.925.48315 3.1301.0697 3.9222-1.3458 2.3998-4.2882-3.7073-9.7725-8.2031-7.3664-3.2168 1.7216-7.4196-1.7036-6.5226-5.3157.33247-1.3388-.35155-3.669-1.5359-5.2322-2.4412-3.222-6.1551-3.5613-14.284-1.3049-2.9232.81145-6.2564 1.439-7.4072 1.3944-1.1508-.0445-1.7838.4184-1.4066 1.0287.37718.61027.2558 1.1214-.26973 1.1359-.52553.0144-2.278 1.0424-3.8945 2.2843l-2.939 2.2581 3.3006 1.2549c2.58.9809 4.1011.84093 6.967-.64107 3.3681-1.7417 3.9919-1.7408 7.6678.0122 2.2142 1.0559 5.237 1.598 6.768 1.2137 1.5217-.38192 3.0926-.16695 3.4911.47772.40721.65886-1.2566 1.5068-3.7996 1.9364-6.9122 1.1678-10.503 4.0461-15.517 12.437-4.1876 7.0084-4.4278 7.8537-2.7587 9.7064 1.6377 1.8178 2.09 1.8464 4.3367.27513 1.3796-.96485 3.837-4.5308 5.461-7.9244zm21.458 7.2901c4.2043-2.1449 4.6088-2.6836 3.1271-4.1653s-2.4179-1.385-7.2381.74719c-5.6597 2.5036-7.4558 5.8817-3.1271 5.8817 1.3251 0 4.5822-1.1086 7.2381-2.4635zm20.942-8.9244c2.4602-1.7232 2.5512-2.0612.81634-3.0321-2.5541-1.4294-10.146 1.0335-10.146 3.2914 0 2.3265 5.8709 2.1632 9.3297-.25936zm88.699 510.04c0-.5197.63778-1.5827 1.4173-2.3622s.97097-1.4173.42547-1.4173c-.54549 0-1.6291.8716-2.408 1.9368-1.1184 1.5295-1.891 1.6612-3.6734.6265-1.2741-.7396-1.5838-1.326-.71114-1.3463.85032-.02 1.2176-.5674.81609-1.217-.77101-1.2475 1.2557-1.5876 7.0864-1.1892 5.204.3555 5.7273 1.1154 2.5107 3.6455-2.9964 2.357-5.4634 2.9545-5.4634 1.3232zm986.35-29.642c-3.3792-2.1408 3.6576-6.8681 21.103-14.177 4.8719-2.0412 12.296-6.3099 16.497-9.4861 7.1447-5.401 7.7372-5.6349 9.153-3.6136 2.1494 3.0687.8827 5.2899-4.3668 7.6571-2.5085 1.1312-5.6625 3.3237-7.009 4.8723s-3.5131 2.8156-4.8147 2.8156-4.3611 1.79-6.7989 3.9777c-8.3448 7.4886-18.915 11.027-23.764 7.9544zm-82.658-15.343c-1.2273-.77762-1.2958-1.5781-.2953-3.4475.7166-1.3391 1.303-4.0999 1.303-6.1352 0-3.3271.2681-3.6061 2.6574-2.7657 1.4616.51411 4.5176 1.0043 6.7912 1.0893 2.2735.085 4.5446.23165 5.0468.32591 1.9576.36748-3.2745 6.3229-7.9755 9.0778-5.5989 3.2812-5.3675 3.2241-7.5276 1.8553zm136.48-10.328c-.411-.41104.562-1.7772 2.1622-3.036 2.4102-1.8958 2.6912-2.6967 1.6374-4.6657-1.5246-2.849.7403-5.9062 5.9852-8.0787 4.0634-1.6831 5.0867-5.0987 3.9971-13.342-.7496-5.6708-.6579-6.0247 1.1695-4.5133 1.4348 1.1866 1.7875 2.6815 1.2759 5.4083-.5606 2.9883-.057 4.5415 2.4359 7.5033 2.6928 3.2003 3.4927 3.5476 5.5874 2.4266 2.0877-1.1172 2.3324-1.0154 1.6751.69722-.4233 1.1031-.7696 2.2142-.7696 2.4692 0 .25498-1.7273 1.348-3.8385 2.429-2.1111 1.081-6.2301 3.94-9.1533 6.3535-4.7534 3.9246-9.6451 7.0957-10.946 7.0957-.2592 0-.8076-.3363-1.2186-.74732zm-124.89-15.254c-2.4868-2.6472-2.9466-2.7492-5.3362-1.1835-3.0449 1.9951-8.7664.82923-13.352-2.7208-2.4465-1.8938-2.6166-2.5042-1.355-4.8617 1.0766-2.0115 1.1123-3.4217.1404-5.5548-.7165-1.5724-1.3027-3.8968-1.3027-5.1654 0-2.8616-1.8577-2.9981-3.3959-.24954-.6332 1.1314-1.4896 1.7187-1.903 1.3051-.4137-.41356.9541-2.6952 3.0396-5.0703 5.1321-5.8451 3.1292-7.432-3.6498-2.8919-2.9211 1.9563-5.5002 4.0935-5.7315 4.7493-.2312.65581-1.6351-1.3683-3.1196-4.498-1.6096-3.3936-4.3896-6.804-6.8877-8.4496-3.7531-2.4724-5.0251-2.676-12.234-1.9585-10.572 1.0523-20.773 3.6592-27.449 7.0153-3.0349 1.5256-8.9569 3.0874-13.524 3.5666-4.4687.46886-11.576 2.1514-15.793 3.7389-6.45 2.4278-8.2858 2.6826-11.554 1.6042-4.3838-1.4468-6.2045-4.4288-3.3686-5.517 1.0267-.39398 2.8903-3.1042 4.1413-6.0228 2.0026-4.6718 2.1133-6.1265.9257-12.163-.9825-4.9941-1.0098-9.7229-.1004-17.411.6865-5.8054.9491-11.698.5838-13.095s.2054-4.817 1.2682-7.6c1.874-4.9069 2.328-5.2276 14.999-10.594 7.1865-3.0438 14.542-5.5342 16.346-5.5342 4.8817 0 10.927-4.6447 14.259-10.956 2.0597-3.9009 3.4884-5.385 4.7243-4.9074 3.4498 1.3333 4.1308 1.0714 3.8651-1.486-.171-1.6451.5358-2.8416 1.9419-3.2879 1.2159-.38592 3.4628-2.5365 4.9931-4.7791 1.5666-2.2958 4.7877-4.8826 7.3721-5.9202 4.3116-1.7311 4.741-1.7052 7.0864.42657 4.3271 3.9333 7.3936 5.0815 8.8582 3.3168.7121-.85811.957-1.898.5442-2.3109-1.3521-1.352 4.8339-9.1137 7.8575-9.8593 1.624-.40043 4.9582-1.7328 7.4094-2.9607 3.8224-1.9149 5.1669-2.0419 9.4486-.89233 9.2335 2.4791 9.5401 2.8846 6.1055 8.0744-4.4169 6.6744-3.2457 9.2843 7.5881 16.91 5.0019 3.5206 9.7238 6.1913 10.493 5.9349.7693-.25646 3.202-2.9522 5.4058-5.9904 3.0035-4.1405 4.168-7.1513 4.6495-12.02.6838-6.9162 3.9919-16.535 5.6866-16.535.561 0 1.8468 2.8444 2.8575 6.321 1.0106 3.4765 3.1284 7.5338 4.7063 9.0161 3.6873 3.4641 5.8293 13.151 4.1735 18.874-1.0971 3.7922-.8854 4.4008 2.8747 8.2675 2.2323 2.2957 5.7628 7.8944 7.8455 12.442 2.0827 4.5471 5.8379 10.981 8.3449 14.297l4.5583 6.0298-1.2958 9.316c-.94 6.7585-2.3954 11.264-5.3013 16.411-4.4515 7.884-11.107 15.407-14.615 16.521-1.2617.4004-4.1844 3.3595-6.495 6.5758-2.3108 3.2163-4.7213 5.8478-5.3569 5.8478-.6355 0-3.3373 2.7601-6.0038 6.1336-4.4475 5.6263-5.2662 6.1415-9.9 6.2286-3.5563.0669-6.2791 1.0313-9.1991 3.2585l-4.1476 3.1635-2.7214-2.8968zm-575.91-24.832c-2.5012-2.5012-2.9192-3.7806-2.3602-7.2252.52607-3.2418.025-5.1485-2.2217-8.4549-1.5955-2.348-2.901-4.847-2.901-5.5532s-2.0885-4.0834-4.6412-7.5048c-3.9453-5.2879-4.756-7.4007-5.4066-14.091-1.148-11.805-4.9172-24.582-9.9837-33.844-2.4906-4.5528-4.8832-10.464-5.3169-13.136-.92275-5.686 1.3862-14.149 6.6578-24.403l3.5067-6.8208-1.9704-5.9325c-1.1023-3.3187-1.6408-7.2458-1.2223-8.9133.48985-1.9518-.0366-4.2767-1.5249-6.7344-1.2502-2.0644-3.1067-6.6767-4.1256-10.249-1.361-4.7721-3.2582-7.875-7.1496-11.693-7.4854-7.344-8.4586-10.235-6.1355-18.227 4.7292-16.268-.37987-25.756-12.861-23.884-4.8594.72871-5.0454.63801-5.732-2.7953-.52682-2.634-1.9543-4.1834-5.5394-6.0124-4.6583-2.3765-6.6521-2.3855-12.372-.0557-1.2992.52912-6.614 2.3629-11.811 4.075-7.814 2.5744-10.16 2.9066-13.562 1.9201-3.2222-.9345-5.9362-.69271-12.53 1.1163-6.8136 1.8693-9.2834 2.07-12.965 1.0535-7.682-2.1211-20.88-14.017-22.757-20.512-1.4527-5.0261-10.488-16.74-13.563-17.584-1.9541-.5363-2.1944-.9515-.99792-1.7237 1.2034-.77666.99393-1.1695-.88581-1.661-2.9848-.78055-3.2818-3.22-.3951-3.2452 1.7664-.0155 1.8093-.18455.29527-1.163-1.1158-.72109-1.2399-1.1516-.33511-1.163.93797-.0118.58096-1.4681-1.0287-4.1962-2.2654-3.8396-2.3126-4.3468-.58179-6.2593 5.284-5.8388 6.4418-18.41 2.425-26.331-1.9176-3.7812-.68451-9.0043 3.4076-14.434 1.5407-2.0444 4.5488-7.0191 6.6846-11.055 3.7362-7.0596 12.064-16.874 14.318-16.874 2.4944 0 10.542-8.652 10.542-11.334 0-6.0542 3.6198-12.091 9.5213-15.878 3.1711-2.0349 6.887-5.5142 8.2576-7.7319 2.8035-4.5361 3.2005-4.684 6.4656-2.4086 1.2813.89296 4.4652 1.9818 7.0752 2.4196 3.9808.6678 5.8841.18718 11.811-2.9825 10.198-5.454 16.5-6.8161 28.169-6.0881 7.696.48013 11.16.17315 14.891-1.3195 5.4936-2.1981 10.243-.89724 8.9573 2.4534-.38639 1.0069-.15044 2.4959.52431 3.309.84914 1.0231.84252 2.4891-.0215 4.7616-1.0854 2.8548-.84466 3.7046 1.8446 6.5116 1.7011 1.7756 4.747 3.5591 6.7687 3.9634 9.492 1.8984 12.191 3.1278 14.151 6.446 1.4359 2.4307 3.3185 3.6786 6.4306 4.2624 2.4202.45404 5.9346 1.6189 7.8097 2.5885 3.1843 1.6467 3.5969 1.5867 6.2524-.90798 1.7852-1.6771 2.595-3.4529 2.1762-4.7723-.36682-1.1557-.0873-3.1844.62112-4.5081 1.8273-3.4144 7.0154-3.0793 15.116.97626 8.8256 4.4184 25.562 7.5709 31.496 5.9326 2.854-.78803 5.5978-.79839 8.0961-.0306 8.161 2.5082 12.34.54497 13.454-6.3203.37002-2.2802 1.0018-4.1458 1.404-4.1458.76335 0 1.163-3.4285 1.2735-10.925.0359-2.436.61165-4.429 1.2794-4.429.79542 0 .75625-.85554-.1135-2.4808-1.4525-2.7141-4.398-2.6521-11.448.24084-3.3432 1.372-4.2737 1.3137-7.2686-.45548-3.8834-2.294-7.869-2.6381-9.0182-.77865-.85455 1.3827-6.8935.4135-10.169-1.632-2.3532-1.4695-4.5519-5.8436-4.5519-9.0554 0-1.2318-1.1958-3.082-2.6574-4.1115-2.262-1.5934-2.3938-2.0444-.8858-3.0314.97438-.63775 2.9787-.87557 4.454-.52849 1.8817.44269 3.6118-.29839 5.7962-2.4828 2.0557-2.0557 4.5557-3.1904 7.3568-3.3391 2.3336-.12386 5.7138-1.1945 7.5116-2.3791 3.9028-2.5718 12.764-1.8571 19.638 1.5839 9.2706 4.6403 17.504 4.3674 20.818-.69004 1.724-2.6312 1.7335-3.1839.0974-5.6808-.99681-1.5213-5.7851-5.0264-10.641-7.789l-8.8284-5.023 1.654-3.1986c.90973-1.7592 1.3563-3.4963.99235-3.8603-.36394-.36393-.22481-1.3614.30915-2.2166.53398-.8552 1.0749-2.2412 1.202-3.0799.27112-1.789-1.6335-1.2952-11.026 2.8587-5.4526 2.4114-6.2628 3.1502-5.0533 4.6076.79229.95463 2.5713 1.7592 3.9533 1.7879 1.9385.0403 1.4794.59743-2.0083 2.4376-4.2347 2.2343-4.7074 2.2634-7.4607.45932-2.3543-1.5426-2.6622-2.2603-1.5465-3.6047 1.1076-1.3345.94219-1.848-.80677-2.5052-1.2099-.45462-2.7699-1.5863-3.4666-2.5149-3.383-4.509-14.116 7.3527-17.237 19.05-1.4652 5.4906-1.4164 5.7763 1.3419 7.8569l2.8624 2.1591-5.2514 1.083c-2.8882.59564-6.7808.66517-8.6502.15452-3.4497-.94235-7.8214.47785-7.8214 2.5409 0 .60635-.80399.79393-1.7866.41684-.98267-.37708-2.5427-.0581-3.4668.70881-1.4332 1.1895-1.271 2.164 1.1041 6.631 2.5729 4.8389 2.6524 5.5009 1.0476 8.7179-2.0109 4.0309-3.8809 3.731-6.7215-1.0777-1.9803-3.3524-1.9671-3.4295.65304-3.8014 3.3067-.46939 3.5196-2.5743.3122-3.0871-7.3176-1.17-11.22-5.026-11.22-11.086 0-4.7291-4.3838-9.9423-9.7-11.535-2.7626-.82768-5.7658-2.5656-6.6738-3.862-.90803-1.2964-3.5659-3.1572-5.9063-4.1351s-4.9598-2.7838-5.8209-4.0131c-1.2359-1.7644-2.0483-1.9768-3.8578-1.0084-1.2607.67472-2.2922 1.9869-2.2922 2.916 0 3.0665 15.054 16.939 22.412 20.654 7.8021 3.9385 9.0208 5.3448 3.6001 4.1542-4.8328-1.0615-6.1492.001-4.4962 3.6291 1.1611 2.5484.97111 3.3236-1.3647 5.5679l-2.7136 2.6073.6175-3.5183c.9802-5.5848-6.3834-13.607-12.49-13.607-2.2384 0-10.838-8.3421-13.091-12.699-2.4073-4.6552-5.086-5.5545-8.8807-2.9815-5.7164 3.876-10.003 5.1864-14.486 4.4289-5.9565-1.0064-9.704 1.0707-8.7548 4.8525.49553 1.9743.21972 2.8556-.89369 2.8556-.88572 0-3.1546 1.328-5.0421 2.9512-1.8874 1.6232-3.8381 2.9519-4.3348 2.9527-1.4611.002-5.5835 7.4639-5.5883 10.115-.005 2.5354-4.6234 7.5308-9.0801 9.8205-1.4189.72897-4.7219 1.3254-7.3401 1.3254-3.6022 0-5.0781.59361-6.0662 2.44-1.2941 2.418-1.3334 2.4124-4.3603-.61446-2.8397-2.8397-4.4746-3.5505-10.205-4.437-3.011-.46575-3.5194-7.2817-1.2674-16.992.96271-4.1511 1.4353-8.8028 1.0502-10.337-1.1191-4.459 2.3842-7.0885 8.245-6.1882 13.533 2.0788 21.449 2.1936 23.305.33808 2.5495-2.5495 3.6995-10.958 2.1435-15.672-1.0148-3.075-2.4105-4.3321-6.575-5.9226-6.125-2.3391-6.254-4.6019-.26597-4.662 2.2814-.0229 5.5726-.9751 7.3138-2.116 1.7412-1.1408 3.6666-1.7647 4.2788-1.3864 1.6696 1.0319 7.9918-2.6122 10.091-5.8167 1.0147-1.5486 3.0127-3.1134 4.4401-3.4773 1.4274-.36388 5.2527-3.137 8.5006-6.1624 4.6046-4.2892 7.0207-5.634 10.969-6.1053 4.8916-.58393 9.8106-4.6065 7.5012-6.1342-1.4353-.94954-2.6344-6.6685-1.835-8.7518.37875-.98703 2.0508-2.6871 3.7156-3.778l3.027-1.9834-.77711 4.8598c-.67448 4.218-.50242 4.8139 1.3029 4.5122 1.144-.19118 3.2837-1.0089 4.7549-1.8171 2.2402-1.2307 2.7895-1.1709 3.3801.36806 1.0122 2.6376-1.8019 5.739-3.7444 4.1268-1.073-.8905-1.7537-.85824-2.3531.11149-.61827 1.0004-1.102.94601-1.8125-.20371-.53307-.86252-1.2403-1.2971-1.5717-.96574-.33138.33138.61281 2.1266 2.0982 3.9894 2.5039 3.1401 2.9812 3.2892 6.5496 2.0452 3.0562-1.0654 4.5239-.99275 7.1259.35281 2.9375 1.519 3.9293 1.4467 9.5752-.6986 4.9467-1.8796 6.8965-2.1206 9.0858-1.1231 2.0141.91767 3.5062.89876 5.3774-.0681 5.3124-2.745 6.784-4.8149 6.1245-8.6143-.97759-5.6316.81278-7.4763 5.5285-5.6963 3.2088 1.2112 4.1464 1.1631 5.5967-.2872 1.5355-1.5355 1.4034-2.1027-1.1131-4.7814-2.4211-2.5771-2.5906-3.2178-1.1146-4.2136.95737-.64593 4.5451-.87736 7.9728-.5143 6.273.66444 14.09-1.7861 12.728-3.99-1.1928-1.93-8.3929-2.4877-14.493-1.1226-5.4098 1.2107-6.8297 1.1128-10.976-.75698-6.4398-2.9039-7.1984-6.3015-2.7814-12.458 5.6853-7.9238 6.725-10.449 5.1054-12.4-2.3981-2.8895-4.754-1.9474-10.232 4.0916-2.8948 3.1911-6.8395 6.4548-8.766 7.2528-1.9264.79796-4.3094 3.0109-5.2954 4.9177-1.6058 3.1053-1.6033 3.756.0242 6.24.99935 1.5252 2.8941 3.115 4.2106 3.5328 3.623 1.1499 2.9063 3.3082-2.276 6.854-1.5939 1.0906-3.7198 4.1758-4.7243 6.8562-1.2587 3.3587-3.1725 5.6505-6.1573 7.3738-4.2079 2.4294-4.399 2.4389-6.7242.33457-1.3163-1.1912-2.7128-3.6208-3.1034-5.399-.39056-1.7782-2.1643-4.9751-3.9417-7.1041l-3.2316-3.871-4.0974 2.4978c-2.2536 1.3738-5.1604 2.488-6.4596 2.476-3.7479-.0346-8.0868-4.0832-8.3772-7.8165-.14433-1.8552-.62641-4.2829-1.0713-5.3951-1.0583-2.6454 4.2306-7.6066 9.7267-9.1242 5.516-1.523 16.704-9.3639 18.611-13.043.84812-1.6365 3.7215-4.9296 6.3853-7.3181 2.6638-2.3884 4.8433-4.869 4.8433-5.5124 0-.64339 2.5245-2.0694 5.6101-3.169s8.2675-3.0945 11.515-4.4333c3.9876-1.6437 8.9738-2.5127 15.354-2.6759 11.148-.28516 18.438 1.1925 24.454 4.9563 3.0183 1.8886 5.4006 2.5328 7.6798 2.077 4.0778-.81556 25.815 5.922 26.721 8.2822.91032 2.3723-5.324 4.6116-10.688 3.839-2.4567-.35383-7.5375-1.3-11.291-2.1027-5.0525-1.0805-7.1687-1.1146-8.1519-.1314-.98321.98323-.49182 1.7089 1.893 2.7955 1.7715.80715 3.9892 2.9533 4.9283 4.7692 2.391 4.6237 10.049 8.393 14 6.8908 3.7962-1.4433 3.7699-1.8985-.23547-4.0715-3.7046-2.0098-1.9947-2.4443 2.6579-.67538 3.7148 1.4124 7.9234-.34472 6.9433-2.8988-.45905-1.1963.83172-2.06 4.473-2.993 7.7922-1.9967 8.3625-2.2821 7.7162-3.8622-2.4446-5.9769-2.4789-5.8051 1.078-5.399 1.8981.21672 3.2847 1.0284 3.1269 1.8305-.15592.7926.83316 2.0387 2.198 2.7691 2.0502 1.0972 3.6675.70636 9.3047-2.2486 8.2662-4.333 14.702-5.7457 17.102-3.754 1.3382 1.1106 3.5568 1.1184 9.9791.0351 4.5421-.76613 8.7744-1.0741 9.4049-.68438.63058.38972 1.4947.14514 1.9203-.5435.93072-1.5059-1.6432-4.923-3.0522-4.0521-1.701 1.0513-7.287-.83201-6.0719-2.0471 1.2236-1.2236 34.092 6.4354 36.059 8.4025 1.326 1.326 5.5243-.44289 5.5243-2.3277 0-.63517-2.3441-2.2937-5.2091-3.6856-8.8831-4.3158-9.4535-11.228-1.0995-13.324 4.8485-1.2169 6.9452.18688 13.651 9.1397 8.7063 11.623 8.4844 11.032 5.6399 15.027-2.1063 2.9581-2.2332 3.6504-.77182 4.2112 2.769 1.0626 8.6952-2.6556 9.5293-5.9787.97727-3.8938-.84749-7.2122-5.205-9.4656-3.4258-1.7715-5.9054-5.0176-5.9054-7.7308 0-.92483 1.2849-1.1555 3.8385-.68905 3.8287.69933 6.9956-.68918 15.666-6.8685 1.9828-1.4132 5.335-2.3444 8.7149-2.4211 6.8558-.15549 9.0748-1.3064 7.1019-3.6836-.7737-.93225-1.1608-1.9409-.86027-2.2415 1.5084-1.5084 20.952-4.2264 25.431-3.5548 4.3087.64614 5.6427.29662 9.1877-2.4073 2.281-1.7398 4.1472-3.6316 4.1472-4.2041 0-1.4437-10.321-1.3147-11.22.14019-1.2372 2.0019-2.841 1.3053-2.3897-1.038.38103-1.9785-.61845-2.3005-9.2211-2.9703-23.491-1.829-25.401-2.2582-22.582-5.0764 2.4777-2.4777 8.5548-2.4297 13.641.10782 2.0841 1.0397 5.5364 1.8904 7.6719 1.8904 2.1354 0 4.2111.53148 4.6125 1.1811s2.4701 1.1811 4.597 1.1811c5.8906 0 17.28 2.5444 16.565 3.7007-.3479.56297.7539 1.0236 2.4484 1.0236s4.782.91527 6.8609 2.0339c2.7958 1.5044 6.701 2.0456 15 2.0789 8.9208.0357 11.886.49389 14.468 2.2356 1.7864 1.2049 3.2403 2.5282 3.2309 2.9407-.01.41248-2.7351 2.2495-6.0572 4.0823-8.0231 4.4264-6.3267 6.3554 3.3775 3.8408 6.2856-1.6288 7.7299-1.6392 12.934-.0937 4.2697 1.268 6.9358 1.4308 9.8314.60029 2.8908-.82906 5.858-.65103 10.893.65355 5.253 1.3612 7.9757 1.4997 11.305.57498 7.5981-2.1102 16.946-1.5142 22.369 1.4262 2.6956 1.4616 7.6664 4.1659 11.046 6.0096 5.9914 3.2682 6.2522 3.3043 10.408 1.4413 3.4784-1.5594 5.419-1.6898 10.549-.70905 5.0994.97488 6.9555.85607 9.8274-.62904 2.8096-1.4529 3.2616-2.1671 2.1893-3.4592-2.0737-2.4987 5.2842-3.4276 14.325-1.8084 4.1406.74162 9.3886 1.4819 11.662 1.6451 2.2736.16318 6.7156 1.4588 9.8712 2.8792 4.8123 2.1661 8.4437 2.6568 22.524 3.0435 13.361.36697 17.614.90163 20.837 2.6194 3.2716 1.7435 7.0002 2.187 19.404 2.308 11.411.11125 16.524.65239 19.908 2.1072 5.464 2.3484 7.6499 1.4871 4.6757-1.8423-2.1392-2.395-2.1265-2.3982 6.1238-1.5786 13.825 1.3734 30.408 4.3986 36.023 6.5714 2.9232 1.1313 8.4946 2.4459 12.381 2.9213 3.8861.47543 9.5568 2.1267 12.601 3.6695 4.6211 2.3417 6.1228 2.6004 9.0901 1.566 4.0578-1.4146 6.6904-.39593 12.887 4.9866l3.8505 3.3445-2.902.72836c-2.912.73088-10.645-1.1836-13.31-3.2951-.7835-.62085-1.8821-.84602-2.4415-.50036-.5592.34565-3.3216-.1656-6.1385-1.1361-6.5976-2.273-9.5271-1.4192-6.5223 1.9009 2.0521 2.2676 2.0077 2.3152-1.9062 2.0422-7.324-.51084-5.3108 1.6519 5.4413 5.8457 5.8464 2.2803 10.88 4.3884 11.186 4.6847 1.1082 1.073-2.5461 2.4032-5.2054 1.8948-2.9196-.55812-10.114 2.5754-10.114 4.4052 0 .6076-1.1368 2.1638-2.5263 3.4583-2.3211 2.1624-2.8008 2.2117-5.9054.60622-2.9053-1.5024-3.8343-1.518-6.627-.1112-1.7863.8999-4.8394 2.0192-6.7845 2.4874s-4.1984 1.4004-5.0071 2.0716c-2.3769 1.9727 1.8143 7.7146 7.7171 10.572 3.2147 1.5563 5.5425 3.6415 6.2345 5.585.6073 1.7058 1.8949 4.5073 2.8612 6.2255 1.5751 2.8003 1.5615 3.1991-.1306 3.8484-1.2402.47594-1.6057 1.4298-1.0654 2.7813.4522 1.1313.9634 3.3856 1.1358 5.0096s.6932 3.8348 1.1572 4.9129c.6043 1.4035.1051 2.1945-1.7565 2.7855-2.0723.65771-3.4687-.13467-6.8765-3.902-2.352-2.6-6.2749-6.1796-8.7176-7.9546-2.4428-1.775-6.8195-6.3909-9.726-10.257-5.1271-6.8204-5.2323-7.1312-3.531-10.421.9646-1.8652 1.7726-4.6136 1.7956-6.1074.024-1.4938.7726-4.036 1.6656-5.6493 1.7057-3.0814 1.0484-5.5416-2.5984-9.7252-2.3944-2.7469-6.6545-.68778-5.5802 2.6972.9897 3.1184-2.047 4.129-5.5394 1.8433-1.514-.99092-4.9997-2.1603-7.7458-2.5986-4.7148-.75253-5.0651-.60779-6.2866 2.5977-.7115 1.8671-1.0099 4.8186-.6633 6.5589.54 2.7117.1646 3.2665-2.625 3.8792-1.8983.41696-5.1489-.0763-7.7984-1.1833-2.91-1.2159-5.6506-1.5835-7.6235-1.0225-1.6941.48168-7.4221.91896-12.729.97174-8.4064.0836-10.026.45055-12.581 2.8505-1.6128 1.515-3.5504 5.2354-4.3061 8.2675-.7555 3.0321-2.1402 6.696-3.077 8.142-1.6191 2.4992-1.4626 2.7517 3.1659 5.113 5.0238 2.563 10.501 3.2382 14.654 1.8063 3.2028-1.1044 12.974 6.5132 16.024 12.493 1.2497 2.4495 3.3153 5.0119 4.5902 5.6943 4.8242 2.5818 5.8041 19.522 1.77 30.596-2.7931 7.6679-5.9188 10.175-10.509 8.4298-1.754-.66684-3.3665-1.2124-3.5834-1.2124-.217 0-1.5309 2.1804-2.92 4.8454-1.824 3.4994-2.1796 5.2622-1.2799 6.3462 1.7212 2.0739.4473 4.7714-2.9939 6.3392-1.5883.72365-2.8877 1.8303-2.8877 2.4593 0 .62896 3.6952 3.6866 8.2115 6.7948 5.7457 3.9542 8.8158 6.9913 10.224 10.114 1.1069 2.4545 1.7964 4.6578 1.5324 4.8961-.2641.23832-2.6782 1.5414-5.3648 2.8958l-4.8846 2.4625-2.939-6.7463c-3.2894-7.5506-6.1111-10.587-11.082-11.925-2.5029-.67365-3.3748-1.6287-3.3748-3.6968 0-1.8957-1.2256-3.5066-3.8282-5.0315-3.7916-2.2216-3.8671-2.219-7.9022.27488-4.0387 2.496-4.085 2.4976-5.3252.18035-.688-1.2857-1.251-3.151-1.251-4.1453s-.9927-2.339-2.2061-2.9884c-1.8046-.96579-2.9438-.38229-6.2604 3.2064-2.23 2.4129-5.0869 4.9741-6.3486 5.6917-1.9578 1.1133-2.0622 1.5841-.7125 3.2104.8699 1.0482 3.8732 3.1865 6.674 4.7519 4.4548 2.4898 5.3075 2.6312 6.8095 1.1291 1.428-1.4279 2.59-1.4802 6.9002-.31027l5.1831 1.4068-2.8886 1.9307c-5.3574 3.5808-7.0466 5.4606-7.8114 8.6922-.6275 2.6521-.2531 3.4499 2.1278 4.5348 1.5891.72405 4.0049 3.6127 5.3684 6.4192 1.3634 2.8065 4.087 6.0525 6.0523 7.2134 4.3226 2.5534 5.5764 5.2664 3.0798 6.6636-2.3274 1.3025-1.2159 3.2491 1.8554 3.2491 3.6783 0 3.6996 2.1941.1443 14.858-4.3056 15.337-8.1925 20.455-18.362 24.175-4.0051 1.4651-8.8765 2.7522-10.825 2.86-4.5299.25075-8.0427 2.1689-11.108 6.065l-2.4325 3.0926-1.1345-2.984c-1.4801-3.893-4.8743-4.8719-9.746-2.8107-4.4645 1.8889-7.4078 4.9009-8.595 8.7958-1.0624 3.4853 2.6994 9.6156 8.9273 14.548 5.1133 4.0498 10.85 14.211 12.197 21.606 1.1717 6.4313-.9042 10.653-6.4737 13.164-2.5372 1.1441-4.9114 3.0202-5.2761 4.1692-.8758 2.7592-6.12 6.1945-7.0815 4.6388-.4006-.64819-.4163-2.1619-.035-3.3637.3814-1.2019.3626-3.0476-.042-4.1016-.582-1.5166-1.2271-1.6532-3.0922-.65505-1.9423 1.0395-2.6915.77606-4.2598-1.498-3.8545-5.5888-15.026-14.57-18.124-14.57-1.0907 0-1.5113 1.3121-1.3251 4.1338.15 2.2736-.3131 6.7062-1.0292 9.8504-1.1667 5.1228-1.047 6.0613 1.1514 9.0348 1.3493 1.825 2.7886 4.6541 3.1984 6.287.4162 1.6582 3.8322 5.4448 7.7384 8.5779 6.5104 5.2218 7.1966 6.2527 9.9368 14.927 1.6189 5.1247 2.9434 9.8217 2.9434 10.438 0 2.0033-2.4673 1.1914-7.6162-2.5063-5.3229-3.8227-8.7226-9.8703-11.558-20.56-1.231-4.6414-2.5809-6.631-6.4109-9.4486-4.697-3.4555-4.8391-3.7573-4.4606-9.4745.215-3.248.7474-7.8517 1.183-10.231.6132-3.3488.106-5.7483-2.2465-10.63-1.6712-3.4675-3.6473-8.7929-4.3914-11.834-1.6624-6.7945-4.0101-7.9324-8.161-3.9555-1.7162 1.6442-3.4518 2.9894-3.8571 2.9894-1.8797 0-4.4625-4.0014-3.8429-5.9537 1.1252-3.5452-5.7941-15.903-9.8434-17.58-2.2154-.91767-4.241-3.1433-5.5965-6.1494-2.3552-5.2228-4.9972-7.2213-7.6368-5.7766-.9576.52411-4.7911 1.5784-8.5189 2.343-6.8338 1.4015-9.2856 3.471-8.3501 7.0483.3444 1.3172-.8513 2.5895-3.7189 3.957-2.3246 1.1085-4.8292 3.3381-5.5657 4.9545s-2.3581 3.2624-3.6035 3.6576c-1.2454.39528-3.167 2.2028-4.2701 4.0167s-4.3882 5.129-7.3002 7.3669c-3.9856 3.0629-5.2295 4.7764-5.0314 6.9309 1.1578 12.595-.6189 23.132-4.9556 29.39-4.23 6.1038-4.5271 6.274-8.106 4.6434-1.97-.89762-3.1826-2.6505-3.6846-5.3267-.4116-2.1938-2.7904-8.375-5.2864-13.736-15.102-32.436-17.335-38.625-16.048-44.482.8693-3.9581-1.2164-9.9303-3.2318-9.254-.808.27111-1.4831 1.2444-1.5003 2.1629-.1008 5.391-6.1571 6.2186-10.888 1.4879l-3.1347-3.1347 2.6968-.99759c3.0343-1.1225 2.7558-4.1496-.3307-3.5948-1.0967.19715-3.6069-.99869-5.5782-2.6574-1.9713-1.6587-4.039-3.0159-4.595-3.0159-.55597 0-1.3501-1.0688-1.7647-2.3751-1.0886-3.4298-7.3539-6.4138-10.494-4.998-2.8257 1.2741-28.462 1.008-32.753-.33997-1.5456-.48555-4.4047-2.7077-6.3535-4.938-3.5215-4.0303-3.5758-4.0464-8.8581-2.6225-5.005 1.3492-5.7323 1.222-12.474-2.1813-5.8256-2.9408-7.571-4.527-9.3693-8.5149-2.2946-5.0884-7.3903-8.7728-10.489-7.5837-.97584.37446-2.1156 2.2348-2.5327 4.1341-.59915 2.7279.0118 4.5003 2.9075 8.4382 2.0163 2.7417 4.2132 7.017 4.882 9.5007 1.4365 5.3346 4.2731 6.9215 6.6244 3.7059 1.4191-1.9407 1.8021-2.0082 2.7627-.48717.61338.97122.94425 2.2973.73526 2.9469-.65687 2.0417 6.1588 5.4012 9.3386 4.6031 1.6072-.40337 5.0409-3.1405 7.6306-6.0825 4.0804-4.6355 5.505-4.9484 4.8076-1.0557-.46943 2.6199 1.592 5.6908 5.0042 7.4548 5.2704 2.7246 12.613 8.794 12.613 10.426 0 .75244-1.3804 2.6565-3.0676 4.2314-1.6872 1.5748-4.1155 4.907-5.3962 7.4048-3.1117 6.0689-12.131 14.946-15.185 14.946-3.5296 0-8.7808 2.9808-10.871 6.1708-.99042 1.5116-3.5939 3.6435-5.7855 4.7376-11.226 5.6042-24.742 11.286-28.545 11.999-4.0667.76292-4.3961.57838-6.5506-3.6704-1.2477-2.4606-2.6633-7.3969-3.1456-10.97-.62736-4.6467-1.844-7.6003-4.2741-10.375-1.8684-2.1338-3.3971-4.392-3.3971-5.0182s-2.1313-3.3348-4.7363-6.019c-3.2443-3.343-5.3407-6.971-6.6549-11.517-1.0552-3.65-3.2025-8.2308-4.7718-10.18-10.839-13.461-14.049-18.207-15.665-23.163-2.1415-6.5691-3.9525-7.6299-4.7883-2.8047l-.59327 3.425-3.9955-5.0448c-6.1566-7.7733-6.9324-4.2398-1.1526 5.2499 2.735 4.4906 7.0949 12.417 9.6886 17.613 2.5937 5.1967 5.9562 11.093 7.4721 13.103 1.5609 2.0697 2.7563 5.3048 2.7563 7.4594 0 4.4506 1.3278 7.2281 6.5436 13.688 2.0978 2.5984 4.1702 6.3919 4.6054 8.4302.55813 2.6142 2.838 5.3476 7.7391 9.2786 7.4483 5.9741 12.275 12.21 13.472 17.407.45 1.9523 2.1545 3.956 4.3161 5.0738 3.2938 1.7033 4.4531 1.6566 14.862-.5986 6.2093-1.3453 12.787-3.2202 14.617-4.1666l3.3272-1.7206.78983 4.675c.71776 4.2484-.0546 6.2944-8.4626 22.421-9.0404 17.339-9.4633 17.912-18.452 25.008-5.0598 3.9946-10.355 8.885-11.767 10.868-1.4118 1.9826-5.9285 7.3372-10.037 11.899-11.991 13.313-13.621 25.022-5.668 40.716 2.02 3.9862 2.809 7.0039 2.3302 8.9116-.39818 1.5864-.14293 5.5936.56722 8.9049 1.1181 5.2134.99155 6.6075-.94363 10.399-2.7927 5.4717-5.0142 7.4385-12.821 11.35-3.4104 1.709-6.2006 3.612-6.2006 4.229 0 .61695-2.3917 3.8146-5.3148 7.106s-5.3148 6.5191-5.3148 7.1729 1.0957 3.3365 2.435 5.9616c4.015 7.8701 1.3171 13.573-8.307 17.56-4.0573 1.6806-5.3894 5.1117-4.3857 11.296.52587 3.2406.19137 4.3188-1.6447 5.3015-1.2677.67844-3.5594 3.2037-5.0927 5.6118-4.8415 7.6034-18.759 21.057-25.081 24.246-5.2757 2.6611-6.6252 2.8957-10.501 1.8254-3.4174-.94358-6.1754-.79413-11.905.64515-9.2809 2.3313-8.2963 2.4278-11.89-1.1662zm155.56-376.71c3.0489-1.5766 3.4846-2.4446 3.4846-6.9418 0-3.2241-.68934-5.712-1.8495-6.6748-1.0172-.84422-2.6654-3.1127-3.6626-5.0411-1.6496-3.19-1.6426-3.4407.0778-2.7805 2.2718.87175 5.4342-.17675 5.4342-1.8017 0-.64221-1.0988-2.7108-2.4418-4.5968-2.0228-2.8408-2.8334-3.2196-4.7243-2.2076-1.5289.81823-2.2825.8258-2.2825.0229 0-.65926-2.1082-2.2741-4.6848-3.5886-5.7017-2.9088-7.7308-6.1317-5.9523-9.4548 1.3459-2.5149 6.1544-4.2772 8.2078-3.0081 2.7685 1.711 3.5845-.81126 1.3002-4.0192-5.5394-7.7794-13.252-7.2673-22.818 1.5148-6.1728 5.6673-6.7088 7.1734-3.2177 9.0417 1.2992.6953 2.3622 2.0546 2.3622 3.0206 0 .96603 2.1008 4.0355 4.6684 6.8211 5.9137 6.4156 6.9982 9.3471 6.2665 16.94l-.589 6.1128 8.1141 4.1634c4.4627 2.2899 8.2733 4.1896 8.468 4.2215.19465.032 1.922-.75279 3.8385-1.7438zm-32.538 329.91c-3.3348-1.8911-3.8087-2.8895-4.6797-9.8608-.69605-5.5709-.40551-6.7817 2.927-12.198 3.387-5.5046 3.6308-6.565 2.8837-12.544-1.0786-8.6331.75728-13.17 5.775-14.271 4.7275-1.0371 14.956-10.067 17.407-15.368l1.8729-4.0502 1.3018 2.8571c3.2754 7.1886 2.9421 10.346-2.7563 26.114-3.0489 8.4363-6.32 18.528-7.269 22.425-3.0372 12.474-4.7628 15.481-9.7374 16.972-5.2963 1.5868-4.7836 1.5919-7.7253-.0762zm581.8-20.534c-3.7683-4.1232-6.0238-7.661-6.0238-9.4486 0-3.963.6363-3.617 4.0446 2.1986 1.6297 2.7809 4.5752 6.6007 6.5457 8.4885 1.9704 1.8878 3.5825 3.8644 3.5825 4.3924 0 2.2717-2.5141.53447-8.149-5.631zm-526.88-1.6764c0-.64959.53148-1.1811 1.1811-1.1811s1.1811.53148 1.1811 1.1811-.53148 1.1811-1.1811 1.1811-1.1811-.53149-1.1811-1.1811zm621.96-2.1544c-.4166-.67405-.1819-1.5812.5214-2.016 1.7552-1.0848 2.3766-.22204 1.2052 1.6733-.6275 1.0154-1.2362 1.1362-1.7266.34267zm-613.7-1.9096c0-.28646.53148-.84931 1.1811-1.2508s1.1811-.1671 1.1811.52083-.53148 1.2508-1.1811 1.2508-1.1811-.23437-1.1811-.52083zm582.98-11.987c-1.1503-2.9979.3099-4.0486 3.5653-2.5653 2.8099 1.2802 2.8714 1.4762.9132 2.9081-2.7388 2.0026-3.6038 1.9364-4.4785-.34281zm7.4831-5.2524c-2.3079-1.4263-.7094-2.5656 2.9627-2.1116 2.8772.3557 2.943.48541.8881 1.7521-1.3131.8094-2.8854.95618-3.8508.35948zm-55.144-4.3343c-2.4254-5.2227-1.5754-7.229.9328-2.2018 2.6104 5.2316 2.6558 5.4028 1.4294 5.39-.4872-.005-1.5502-1.4397-2.3622-3.1882zm4.5222-.83797c-.051-1.245.228-1.9426.6204-1.5502.3925.39246.4344 1.4111.093 2.2637-.377.94217-.6569.66232-.7136-.71357zm96.151-11.34c-1.0807-1.7485-.056-2.6422 2.4667-2.1501 1.8451.36008 1.8647.55158.1976 1.9334-1.3282 1.1009-2.0801 1.162-2.6643.21669zm-698-5.8841c-.40147-.64959-.1671-1.1811.52083-1.1811.68792 0 1.2508.53148 1.2508 1.1811s-.23438 1.1811-.52083 1.1811c-.28646 0-.84931-.53148-1.2508-1.1811zm518.49-11.096c-7.4742-2.3569-10.863-4.5462-13.805-8.918-3.3604-4.9945-9.51-8.7753-12.651-7.7783-1.2698.40302-3.4069 2.5941-4.7492 4.869-2.2849 3.8726-2.7233 4.086-6.8769 3.3478-2.4401-.43368-5.8482-2.1045-7.5735-3.7129-2.1933-2.0445-3.8741-2.6905-5.5864-2.1471-1.347.42752-3.2987.30186-4.3371-.27927-1.6231-.90825-1.464-1.3345 1.1327-3.0359 3.0081-1.971 3.0124-1.9972.9943-6.2292-1.6209-3.3991-3.8571-5.1702-11.17-8.8468-5.0287-2.5283-10.713-4.597-12.633-4.597-4.3922 0-6.2058-4.0485-2.8974-6.4676 1.968-1.439 1.6801-1.7967-3.454-4.2911-5.452-2.6487-5.5298-2.7608-2.9257-4.2069 1.4714-.81711 3.8411-1.5045 5.2658-1.5275 2.7671-.0448 6.2676 3.9476 6.2676 7.1481 0 1.067 1.1485 3.4002 2.5523 5.1847 2.5154 3.1977 2.5794 3.2108 4.429.90185 1.0322-1.2886 4.3269-3.7468 7.3215-5.4628l5.4448-3.12 7.547 3.4047c4.1509 1.8726 10.043 4.3043 13.094 5.4037 3.0509 1.0995 9.1533 4.3677 13.561 7.2627 8.4174 5.5286 12.074 10.19 9.9768 12.717-1.7095 2.0598 5.006 11.443 11.957 16.707 7.6406 5.7864 7.5115 6.3217-.8858 3.6738zm51.4-.0953c-.9316-1.1225-1.0212-1.8002-.2381-1.8002 1.4275 0 3.0916 2.2407 2.2725 3.0598-.2972.29727-1.2127-.26957-2.0344-1.2596zm-198.45-4.8076c-1.7108-.9468-2.2064-1.6431-1.1793-1.6569 2.1096-.0284 5.4829 1.9373 4.6883 2.7319-.307.30696-1.8859-.1768-3.509-1.075zm19.969-1.5608c3.3492-4.7036 8.5912-6.7167 13.437-5.1604 3.531 1.134 3.5862 1.2286.7824 1.3406-1.6591.0664-5.5309 1.715-8.6037 3.6638-7.0121 4.4469-8.7051 4.494-5.6161.15598zm171.37 1.6156c-1.596-1.923-1.2143-2.1634 1.675-1.0547 1.0275.39428 1.8682 1.1915 1.8682 1.7716 0 1.6337-1.9137 1.2465-3.5432-.7169zm5.5315-1.0421c-.4439-1.1571-.7736-2.9904-.7324-4.074.05-1.3049.4598-1.0074 1.2148.88121.627 1.5683.9566 3.4016.7325 4.074-.2242.67239-.7708.27586-1.2149-.88121zm91.316 1.1118c0-.28646.5315-.84931 1.1811-1.2508s1.1811-.1671 1.1811.52083-.5315 1.2508-1.1811 1.2508-1.1811-.23437-1.1811-.52083zm-302.07-4.9605c-.8161-.34418-1.1833-1.1119-.8161-1.706.9022-1.4598 8.472-1.3785 9.3862.10086.4014.64959.034 1.1883-.8162 1.1972-.8502.009-2.609.24509-3.9082.52491-1.2992.27983-3.0298.22717-3.8458-.11705zm17.534-.88658c-2.1461-2.586.327-3.3731 5.8912-1.8748 5.6054 1.5094 5.5865 1.7451-.2237 2.7941-3.0173.54471-4.6758.27571-5.6675-.91924zm177.33-.71852c-.8172-1.3085-.9625-2.3621-.3258-2.3621.6324 0 1.7185 1.063 2.4138 2.3621s.8418 2.3621.3256 2.3621c-.5161 0-1.6024-1.063-2.4136-2.3621zm7.3963-1.1883c-3.1576-3.489-1.4673-4.0378 1.7825-.57864 1.5232 1.6214 2.2277 2.948 1.5656 2.948s-2.1688-1.0662-3.3481-2.3694zm-221.44-.20485c-4.2223-.58537-10.176-1.8841-13.229-2.8862-3.0538-1.002-6.6519-1.4728-7.9959-1.0463-2.7041.85825-14.207-2.5232-14.207-4.1763 0-3.7754 10.588-4.0621 16.214-.43914 2.1004 1.3525 3.7563 1.443 8.1976.44766 4.9199-1.1026 5.9448-.96681 8.8355 1.1704 1.7985 1.3297 3.8051 2.4176 4.4589 2.4176 2.335 0 9.4239 3.951 8.8257 4.9189-.3353.54255-1.2427.91245-2.0163.82202-.7737-.0905-4.8613-.64336-9.0836-1.2287zm212-5.6933c-1.1757-1.2992-1.6062-2.3621-.9567-2.3621.6496 0 2.1431 1.063 3.3189 2.3621 1.1757 1.2992 1.6062 2.3621.9566 2.3621s-2.143-1.063-3.3188-2.3621zm-7.4482-1.4959c-.6709-.80848-1.5619-3.0614-1.9799-5.0066-.6734-3.1332-.598-3.2672.6609-1.1745.7815 1.2992 2.1784 3.2395 3.1041 4.3118.9812 1.1365 1.2144 2.2394.559 2.6444-.6183.38214-1.6731.0333-2.3441-.77514zm-25.013-3.7553-2.9344-1.6243 4.5488-.85337c2.5018-.46936 6.3469-2.4321 8.5444-4.3616 2.399-2.1063 3.9885-2.8694 3.9776-1.9095-.027 2.4017-1.4798 4.2523-5.8945 7.5093-4.6112 3.4021-4.3939 3.3694-8.2419 1.2394zm-221.55-4.5987c-4.3393-2.472-12.166-12.036-14.713-17.981-1.3744-3.2065-4.5241-8.4874-6.9995-11.735-2.4753-3.248-5.3167-7.4998-6.3141-9.4486-.9975-1.9488-4.0271-5.6692-6.7325-8.2675-5.7042-5.4784-9.2124-11.235-6.8215-11.194 3.0988.0534 11.077 4.4891 14.498 8.0611 9.4394 9.8542 11.374 11.608 15.829 14.353 4.3004 2.6496 6.3366 5.407 6.541 8.858.038.64959 1.2615 2.5098 2.7178 4.1338s4.204 4.6783 6.106 6.7873c1.9019 2.109 3.8018 5.3996 4.2219 7.3124 1.3751 6.2608-3.6668 11.779-8.3335 9.1203zm-237.9-.77972c0-.64959.53149-1.1811 1.1811-1.1811.64959 0 1.1811.53149 1.1811 1.1811 0 .64958-.53149 1.1811-1.1811 1.1811-.64958 0-1.1811-.53149-1.1811-1.1811zm312.39-.0106c-.4051-.6554-.4083-2.2256-.012-3.4894.4016-1.2654-.086-3.5426-1.0861-5.0683-1.6448-2.5103-1.6292-3.0363.1666-5.6001 1.09-1.5563 2.3762-5.7353 2.8582-9.2867.5946-4.3818 1.7688-7.3497 3.6533-9.2342 2.5776-2.5776 3.2255-2.692 9.02-1.5931 4.9752.94353 6.9329.82709 9.6412-.57345 4.5353-2.3453 4.8662-2.2404 3.3602 1.0651-1.9145 4.2018-5.7396 5.5447-9.7734 3.4312-7.2024-3.7737-16.759 1.8347-11.717 6.8765 1.8531 1.8532 2.8786 2.0217 6.3114 1.0372 5.8836-1.6874 8.2034-1.3776 4.5496.60774-4.1358 2.2471-4.9206 4.7409-2.7891 8.8626.9698 1.8754 1.7632 4.7835 1.7632 6.4626 0 2.6877-.2827 2.9016-2.364 1.7877-1.3004-.69588-3.1761-3.2087-4.1686-5.584-1.7908-4.286-1.8222-4.3012-4.114-2.0093-2.0101 2.0101-2.1457 2.903-1.0456 6.8869.9941 3.6003.9273 4.7908-.3131 5.577-2.0865 1.3226-3.0556 1.2843-3.9456-.15585zm162.04-6.2995c-1.1134-1.6992-3.6631-3.9369-5.6661-4.9727-2.0031-1.0358-3.3762-2.149-3.0514-2.4738 1.8365-1.8365 12.085 6.5048 11.212 9.1252-.2683.805-1.3393.0842-2.4944-1.6787zm-185.47-3.9309c-1.7818-.93354-4.1823-1.3981-5.3347-1.0324-2.938.93249-14.61-1.4429-15.766-3.2086-.9201-1.405-3.6255-10.058-5.0729-16.226-.398-1.6958 0-3.8961.9295-5.1691 1.352-1.8469 2.0508-1.9872 4.1915-.8415 2.2595 1.2092 2.7388 1.0023 3.9777-1.7168.7748-1.7004 3.3538-4.084 5.7312-5.2969 2.5178-1.2845 4.9371-3.689 5.7947-5.7593.9885-2.3868 2.7941-3.9904 5.4969-4.8824 2.2136-.73057 5.4106-3.1453 7.1045-5.3662 1.6939-2.2208 3.7098-4.0378 4.4796-4.0378.7699 0 3.1003 1.7545 5.1786 3.8988l3.779 3.8989-3.0292 4.0734c-3.4412 4.6275-3.2608 8.6075.6382 14.083l2.3607 3.3153-2.9416 1.9274c-1.6178 1.0601-2.9393 2.5795-2.9367 3.3765.012 2.7053-7.5579 18.298-9.4548 19.482-1.3207.82482-2.8582.6691-5.1261-.51915zm68.61-.0217c-2.4441-.63868-2.7833-2.729-.4429-2.729.8933 0 3.3929.35378 5.5548.78617 3.3286.66572 3.5775.92441 1.624 1.6886-2.5646 1.0033-3.7051 1.0463-6.7359.2543zm188.09-15.061c0-.28646.5315-.84931 1.181-1.2508.6496-.40147 1.1811-.1671 1.1811.52083s-.5315 1.2508-1.1811 1.2508c-.6495 0-1.181-.23437-1.181-.52083zm-192.22-3.2033c-.9442-.94418-.9999-2.0386-.1817-3.5676.6493-1.2131.8656-2.7151.4807-3.3379-1.0651-1.7234 1.6031-5.9054 3.7679-5.9054 1.7364 0 1.7296.2028-.076 2.197-1.5607 1.7244-1.7342 2.8653-.8068 5.3046 1.8747 4.9308-.1644 8.3299-3.185 5.3093zm-593.19-3.8831c0-.28646.53148-.84931 1.1811-1.2508s1.1811-.1671 1.1811.52083-.53149 1.2508-1.1811 1.2508-1.1811-.23437-1.1811-.52083zm819.07-3.0224c-.4014-.64959-.1671-1.1811.5209-1.1811.6878 0 1.2507.53149 1.2507 1.1811 0 .64958-.2343 1.1811-.5208 1.1811-.2864 0-.8493-.53149-1.2508-1.1811zm-811.99-11.151c0-.28646.53148-.84931 1.1811-1.2508s1.1811-.1671 1.1811.52083-.53149 1.2508-1.1811 1.2508-1.1811-.23437-1.1811-.52083zm568.11-17.758c-2.2525-5.255-2.5532-5.4913-6.0198-4.7299-3.4558.75903-3.5765.6663-2.2816-1.7532 1.0722-2.0035 2.0662-2.4011 4.607-1.843 2.4493.53796 4.0142-.006 6.4137-2.2299 1.7457-1.6178 3.1857-3.897 3.2-5.0648.037-2.981 4.4228 7.0162 5.4236 12.361.7599 4.0583.665 4.2792-1.1806 2.7503-2.7398-2.2695-5.3773.0849-3.1295 2.7935.897 1.0808 1.0119 1.8217.2827 1.8217-.6759 0-2.065.32079-3.0867.71288-1.3711.52611-2.479-.73627-4.2288-4.8185zm-215.34 2.0868c-1.3204-2.1447-2.0712-11.769-1.1173-14.323 1.0115-2.7084 1.0875-2.6755 4.0966 1.7716 3.6062 5.3297 4.7605 8.7476 3.5706 10.573-1.1391 1.7469-5.8216 3.1616-6.5498 1.9788zm263.76-6.1093c0-.64959.5314-1.5095 1.181-1.911s1.1811-.19845 1.1811.45113c0 .64959-.5315 1.5095-1.1811 1.911s-1.181.19846-1.181-.45113zm185.43-.1394c0-.64959.2343-1.1811.5209-1.1811.2864 0 .8493.53148 1.2507 1.1811.4015.64959.1671 1.1811-.5208 1.1811s-1.2508-.53148-1.2508-1.1811zm-268.1-6.8235c0-.50498 2.3678-3.561 5.2619-6.7912 4.2406-4.7331 5.2722-5.402 5.3148-3.4464.03 1.3346-1.7461 4.3907-3.9449 6.7912-3.7284 4.0705-6.6318 5.5794-6.6318 3.4464zm25.581-3.1514c-.4303-1.1214-.343-2.824.194-3.7836.8322-1.487 1.1785-1.5013 2.3441-.0969 1.0438 1.2578.9979 2.1534-.194 3.7835-1.4639 2.0021-1.6106 2.0082-2.3441.0969zm-904.45-4.6019c.72349-.87175.96573-1.9347.53831-2.3621-.42743-.42742.32465-.77714 1.6713-.77714 1.8669 0 2.3017.56099 1.8307 2.3622-.35872 1.3717-1.611 2.3621-2.9867 2.3621-1.8479 0-2.0797-.34864-1.0536-1.585zm912.38-.31282c-.4402-1.2298-1.0156-2.6345-1.2785-3.1217-.263-.4872.022-.88581.6349-.88581 1.178 0 2.8376 4.8498 1.96 5.7276-.2838.28374-.8761-.49027-1.3164-1.72zm-11.968-3.0814c-1.6589-1.9989-.043-4.844 2.4382-4.2903 1.5557.34729 1.6126.83845.3647 3.1488-1.2041 2.2293-1.7242 2.4411-2.8029 1.1415zm13.964-4.0591c-1.3554-1.7232-2.2673-3.3301-2.0264-3.571.9597-.95976 4.2812 1.1551 6.0473 3.8505 2.716 4.1453-.7289 3.9058-4.021-.27948zm-19.416-4.5721c-1.0516-1.0517-1.9122-2.5238-1.9122-3.2714 0-.74754 1.1663-.19285 2.5917 1.2326 1.4256 1.4255 2.2861 2.8976 1.9123 3.2714-.3738.37377-1.5401-.1809-2.5919-1.2326zm-927.08-.16872c-.43306-.43306-.78738-1.3366-.78738-2.0078 0-.74005.55011-.67032 1.3976.17717.76869.76868 1.123 1.6722.78738 2.0078s-.96455.2559-1.3976-.17716zm-6.6927-1.5748c0-.64959.23437-1.1811.52083-1.1811s.84931.53148 1.2508 1.1811.1671 1.1811-.52083 1.1811-1.2508-.53148-1.2508-1.1811zm55.51-2.3622c0-.64958.23437-1.1811.52083-1.1811s.84931.53149 1.2508 1.1811c.40147.64959.1671 1.1811-.52083 1.1811s-1.2508-.53149-1.2508-1.1811zm890.15-.17999c-1.1839-.66781-3.4285-.89394-4.9881-.5025-2.2866.57388-3.8636-.34599-8.1446-4.7506-6.0476-6.2224-7.2232-8.8459-5.4491-12.161.6856-1.281 1.2465-3.9271 1.2465-5.8803 0-6.411 4.2941-6.1518 7.4419.4491 1.7438 3.657 1.7548 4.4422.1157 8.3647-1.7645 4.223-1.7298 4.4112 1.4176 7.6964 2.2734 2.373 3.9793 3.1786 5.7758 2.7277 1.5186-.38114 3.1563.0912 4.0499 1.1679 2.1269 2.5627 1.1988 4.3915-1.4658 2.8883zm-897.23-7.4273c0-.28646.53148-.84931 1.1811-1.2508.64959-.40147 1.1811-.1671 1.1811.52083 0 .68792-.53148 1.2508-1.1811 1.2508-.64959 0-1.1811-.23437-1.1811-.52082zm185.43-4.2035c0-.64959.53148-1.1811 1.1811-1.1811s1.1811.53148 1.1811 1.1811-.53148 1.1811-1.1811 1.1811-1.1811-.53148-1.1811-1.1811zm-188.97-4.5849c0-.64959.53148-1.5095 1.1811-1.911.64959-.40147 1.1811-.19845 1.1811.45114s-.53148 1.5095-1.1811 1.911c-.64959.40147-1.1811.19845-1.1811-.45114zm-10.031-4.8502c-.41378-.6695.0604-.8675 1.1114-.46417 2.0461.78516 2.4205 1.6317.72159 1.6317-.61125 0-1.4361-.5254-1.833-1.1676zm187.78-.0135c-.40147-.64958-.1671-1.1811.52082-1.1811.68793 0 1.2508.53149 1.2508 1.1811 0 .64959-.23437 1.1811-.52083 1.1811-.28645 0-.8493-.53149-1.2508-1.1811zm-183.07-2.3621c-.40147-.64959-.1671-1.1811.52083-1.1811s1.2508.53148 1.2508 1.1811-.23437 1.1811-.52083 1.1811-.84931-.53148-1.2508-1.1811zm5.3148 0c0-.64959.23437-1.1811.52083-1.1811s.84931.53148 1.2508 1.1811c.40147.64959.1671 1.1811-.52083 1.1811s-1.2508-.53148-1.2508-1.1811zm-81.199-3.1443c-.81199-.32764-1.4763-1.0829-1.4763-1.6784 0-1.7029 5.2135-1.2645 7.7465.65139 2.178 1.6474 2.1155 1.7313-1.2506 1.6784-1.9488-.0306-4.2076-.32375-5.0196-.65139zm29.886-.67004c-1.0592-.59278-3.3993-.75415-5.2003-.3586-1.8009.39555-4.5709.20055-6.1555-.4333-2.5479-1.0192-2.3223-1.1394 1.9499-1.0396 6.2793.14679 7.9556-.87583 6.3508-3.8744-1.139-2.1283-.79659-2.2905 4.8379-2.2905 5.4503 0 13.313 2.4998 14.646 4.6562.886 1.4336-14.314 4.5238-16.429 3.3401zm22.655.74678c-1.3997-1.3996.3399-2.8378 3.4326-2.8378 1.857 0 2.798.55676 2.4952 1.4763-.54453 1.6534-4.6848 2.6044-5.9278 1.3614zm854.48-1.8781c-3.1274-3.1274-.032-6.865 5.6854-6.865 2.5345 0 2.5365.0206.3621 3.7437-2.5347 4.3399-4.0479 5.121-6.0476 3.1213zm-844.72-.24272c0-.2553.79722-.77009 1.7716-1.144.97438-.3739 1.7716-.16502 1.7716.46418s-.79722 1.144-1.7716 1.144-1.7716-.20888-1.7716-.46417zm-51.055-8.4662c-.36456-.36457-2.8577-.69315-5.5404-.73016-3.701-.0511-4.5889-.4151-3.6811-1.509.87744-1.0572-.38242-2.4648-4.7246-5.2784-8.5133-5.5164-13.267-6.5945-18.986-4.306-5.3632 2.1459-5.7739 2.2068-5.7739.85512 0-2.4721 9.3998-5.1907 16.168-4.6762 6.4733.49209 10.098 1.8697 22.807 8.6692 10.447 5.589 10.458 5.5996 7.0864 6.561-3.829 1.0918-6.5263 1.2437-7.3556.4145zm8.5367-9.9668c2.2898-1.4798 3.5432-1.4798 3.5432 0 0 .64959-1.1958 1.1729-2.6574 1.163-2.1489-.0146-2.3184-.23719-.8858-1.163zm940.61-2.0946c-.7148-.47194-1.9437-2.0809-2.7311-3.5755-1.1869-2.253-1.0638-3.347.7198-6.4011 2.7547-4.7168 4.615-5.3054 5.5092-1.7429.9407 3.7475-1.7779 12.855-3.498 11.72zm-932.85-1.574c.78853-1.2759 5.2377-1.4202 5.2365-.16983-.00044.48719-1.3256.96223-2.9449 1.0556-1.6192.0934-2.6504-.3052-2.2916-.88581zm-23.355-11.383c-1.8888-2.1678-1.6141-5.0268.48299-5.0268.67123 0 .9491 1.0375.6175 2.3055s.005 2.524.74806 2.791c.74302.26701 1.0377.82724.65476 1.245-.38292.4177-1.5094-.17389-2.5033-1.3147zm6.8608-9.2786c-.42033-1.0954-.49851-2.2573-.17371-2.5821.3248-.32479.93445.30569 1.3548 1.4011s.49851 2.2573.17371 2.5821c-.3248.32479-.93445-.30569-1.3548-1.4011zm-7.4014-1.063c0-.97439 1.0124-1.7716 2.2497-1.7716 1.9997 0 2.0528.19685.47805 1.7716-.97438.97438-1.9867 1.7716-2.2497 1.7716-.26293 0-.47806-.79722-.47806-1.7716zm990.53-25.893c0-.92455-1.2902-3.2143-2.867-5.0883-3.7433-4.4487-2.4174-7.4178 2.0155-4.5133 3.1866 2.0879 4.8522 6.354 3.6768 9.4171-.8915 2.3231-2.8252 2.4494-2.8252.18447zm-916.51-7.1073c0-.28646.53148-.84931 1.1811-1.2508.64959-.40147 1.1811-.1671 1.1811.52083 0 .68792-.53148 1.2508-1.1811 1.2508-.64959 0-1.1811-.23438-1.1811-.52083zm923.09-1.4516c-.7657-1.9955 1.0421-3.8816 3.7522-3.9148 1.8768-.023 1.9118 2.6173.059 4.47-1.9257 1.9258-2.9144 1.7818-3.8112-.55516zm10.791-4.3112c-2.2931-3.4996-5.5323-3.9801-12.948-1.9207-3.0152.83739-5.0925.84677-6.4959.0293-1.1347-.66095-1.4395-1.2179-.6774-1.2376.7622-.0197 2.9869-1.3833 4.944-3.03 2.5248-2.1245 4.375-2.7892 6.3698-2.2885 2.1139.53055 4.3957-.4846 9.1951-4.0908 9.3436-7.0207 10.189-9.2346 6.387-16.736-3.6485-7.2002-2.6316-9.5183 2.7747-6.3247 3.9349 2.3243 7.6426 8.9824 6.5654 11.789-.3877 1.0104.1904 4.1811 1.2845 7.0461 1.5483 4.0542 1.6951 5.7589.6621 7.689-1.5171 2.8347-5.7383 4.729-10.538 4.729-2.6899 0-3.4935.69018-4.3726 3.7554l-1.077 3.7554-2.0737-3.1649zm-478.46-4.0313c-1.4096-1.4096-.65974-2.6768 1.5841-2.6768 1.2608 0 2.6209-.53148 3.0224-1.1811 1.0979-1.7764 2.9701-1.4197 2.2601.43056-.72864 1.8988-5.8426 4.4513-6.8666 3.4273zm-40.274-2.0436-3.5432-1.6224 4.7243-.0798c5.884-.0993 10.219 1.0042 9.3656 2.3844-.95017 1.5374-6.4805 1.1797-10.547-.68216zm-47.711-11.782c-4.7269-2.4199-4.9495-2.7219-2.4818-3.3672 2.9553-.77282 9.4965.18871 9.363 1.3763-.0456.40599-.44426 1.6182-.8858 2.6937-.72584 1.7681-1.3005 1.7007-5.9954-.70281zm-23.673-12.778c-1.0222-2.9322-.94155-4.0545.3867-5.3828 2.4012-2.4012 4.267-.71364 4.267 3.8595 0 5.4015-2.9635 6.3715-4.6536 1.5232zm-27.695.98136c.83784-2.1834 4.4316-2.5527 3.7085-.38107-.27036.81199-1.3758 1.6478-2.4564 1.8574-1.3702.26575-1.7491-.18108-1.2521-1.4763zm617.11-13.481c-2.162-3.0363-2.2216-3.5959-.625-5.8753 1.5682-2.2391 1.5624-2.9102-.053-6.034-2.6571-5.1381-2.2838-5.4489 2.3238-1.9346 2.2777 1.7373 6.7725 3.9402 9.9884 4.8952 6.6451 1.9734 8.2489 3.5227 4.7845 4.6222-1.3086.41534-2.3793 1.5267-2.3793 2.4697 0 1.2845-.8147 1.5061-3.2479.88342-6.2315-1.5945-8.0027-1.205-7.6027 1.6719.4901 3.5251-.3056 3.3508-3.1889-.69855zm-587.52 1.3875c-1.3699-1.3699-.85365-3.6587.98422-4.364 1.2799-.49115 1.7716.12936 1.7716 2.2358 0 2.8351-1.1562 3.7279-2.7558 2.1282zm580.02-24.901c-1.0021-1.1368-3.4173-5.2568-5.367-9.1556s-7.1045-11.058-11.455-15.91c-4.8607-5.4207-7.3306-9.0149-6.4066-9.3229.827-.27566 2.6004.95934 3.9408 2.7444 3.2494 4.3271 7.2507 8.0844 13.565 12.737 5.2335 3.8567 7.8216 7.4266 4.4446 6.1307-3.894-1.4943-2.9221 2.0526 2.1173 7.7266 2.9378 3.3079 5.3415 6.2623 5.3415 6.5654 0 1.4364-4.5647.31685-6.1802-1.5158zm-864.27-2.0669c0-.97438.51481-1.7716 1.144-1.7716s.83808.79722.46418 1.7716c-.37392.97439-.88871 1.7716-1.144 1.7716s-.46418-.79722-.46418-1.7716zm-6.1716-3.8113-4.4-.46157 8.2797-8.1979c4.5538-4.5089 8.875-8.1979 9.6026-8.1979.76772 0 .53762.86773-.54826 2.0676-2.4588 2.717-.7822 5.7692 3.7111 6.7561 1.9615.43082 3.9167 1.9341 4.6723 3.5924 1.2127 2.6616 1.0071 2.9327-3.0848 4.0692-4.2928 1.1922-9.4174 1.2968-18.233.37212zm-287.79-8.4733c-4.0912-3.8218-4.5476-5.4318-1.8346-6.4729 2.4295-.93229 6.9143 2.1071 8.6141 5.8378 1.7836 3.9147 1.752 4.0616-.87412 4.0616-1.2305 0-3.8879-1.5419-5.9054-3.4265zm520.14-6.0007c1.2992-.64079 3.8557-1.704 5.6812-2.3626 4.0222-1.4512 3.3554-2.9969-1.7318-4.0144-3.4896-.69793-3.6125-.87547-1.6157-2.3355 1.1886-.8691 1.8147-2.1405 1.3914-2.8254-.43239-.69964.78224-1.7862 2.7722-2.4799 1.948-.67907 3.5418-1.7592 3.5418-2.4003 0-2.728-2.4619-7.317-3.8297-7.1386-3.1529.41128-4.6136-.14468-4.1053-1.5625.29114-.81199.051-2.4064-.53367-3.5432-1.5203-2.9559 1.9732-9.0689 5.2207-9.1352.4872-.009.75294.63366.59054 1.4302s.95213 1.6375 2.4767 1.8688l2.772.42048-5.2973 5.6388 2.9858 1.1352c3.2048 1.2184 6.2936 5.188 9.439 12.13 1.507 3.3261 2.4978 4.1956 4.2569 3.7356 3.6093-.94386 4.0375 1.502.6513 3.7207-2.2941 1.5031-2.7294 2.3501-1.7246 3.3549s-.97595 1.679-7.846 2.6704c-5.0546.72947-11.05 1.6708-13.324 2.0918-3.1622.58559-3.5786.49168-1.7716-.39958zm-19.917-6.5242c-.40402-1.0529.0569-3.4449 1.0243-5.3157 1.11-2.1465 1.3248-3.6697.58218-4.1286-2.0468-1.265-1.2794-2.8792 1.7275-3.6339 1.5973-.40091 3.5226-1.474 4.2784-2.3846 1.5734-1.8959 8.849-2.2448 9.9417-.47672.40076.64844-.0993 2.3612-1.1114 3.806-1.012 1.4449-1.84 4.0402-1.84 5.7674 0 2.6339-.80958 3.4214-5.0196 4.8828-2.7608.95829-5.8811 2.1148-6.934 2.57-1.2347.53379-2.1753.14796-2.649-1.0866zm21.689-11.734c0-.28646.53148-.84931 1.1811-1.2508s1.1811-.1671 1.1811.52083-.53148 1.2508-1.1811 1.2508-1.1811-.23437-1.1811-.52083zm-524.16-5.6907c-1.157-1.3941-1.0833-2.0438.3685-3.2486 2.4002-1.992 3.5908-.6407 2.1937 2.4901-.96338 2.159-1.3138 2.2628-2.5622.75854zm-1.847-8.8825c-.39884-.64534.0662-1.8301 1.0334-2.6329 1.9203-1.5937 2.3213-.34385.70709 2.2038-.61677.97338-1.3 1.1418-1.7405.4291zm-76.34-.75336c0-.83076 3.5813-2.284 8.6617-3.5148 1.9259-.46657 3.0646-.35404 2.682.26506-.36571.59171-2.1376 1.373-3.9374 1.7362-1.7999.36321-4.2026 1.0202-5.3394 1.46-1.1368.43979-2.0669.46385-2.0669.0535zm701.85-13.281c-2.1789-.87923-1.7934-2.2345.68896-2.4214 1.1909-.0897 2.1653.59441 2.1653 1.5203 0 1.7585-.40928 1.8877-2.8543.90118zm-259.54-6.0366c-7.474-4.0758-11.047-10.338-8.881-15.566 1.0249-2.4744 1.0562-4.0303.11645-5.7863-1.9558-3.6544.59596-7.937 7.1216-11.952 3.0995-1.9071 6.1941-4.5114 6.8769-5.7874 1.8919-3.535.20692-9.5929-3.0855-11.093-1.6663-.75922-2.5731-1.9598-2.205-2.9191.83844-2.185-3.0938-9.6474-7.0102-13.304-2.8825-2.691-4.1225-2.959-13.993-3.0236-13.44-.088-15.944-.83518-15.722-4.6917.0924-1.602.44758-2.9131.7894-2.9135.34184-.00045 5.1252-.5548 10.63-1.2319 7.0283-.86452 13.33-2.6474 21.163-5.9881 12.129-5.1723 13.053-5.2733 41.993-4.5931 9.1385.2148 17.546-.46153 28.346-2.2803 10.058-1.6938 17.458-2.3323 21.454-1.851 3.3955.4089 8.3118.13923 11.087-.60816 6.441-1.7344 23.176.3519 29.758 3.7098 3.8913 1.9852 5.9501 2.2473 12.516 1.5936 7.0925-.70611 7.6285-.61323 5.4967.95248-1.2992.95418-5.2853 2.1198-8.858 2.5902-7.7527 1.0208-14.876 6.5464-12.988 10.074.81451 1.5219.2304 2.8209-2.4028 5.3437-1.9134 1.8332-3.759 4.2154-4.1013 5.2938-.82231 2.5909-11.264 7.4128-16.441 7.5925-5.7502.19968-6.3515 1.4221-1.9046 3.8714 2.1007 1.1571 5.1673 3.1286 6.8145 4.3811l2.995 2.2774-2.7077 1.0016c-2.0757.76783-3.7594.27281-7.2133-2.1207-4.687-3.2481-9.7298-3.2644-7.0395-.0228 1.0492 1.2642.7966 1.7552-1.1669 2.2687-4.3891 1.1478-1.2845 3.4174 3.556 2.5996 3.0808-.5205 4.8134-.24618 5.7768.91461 1.1463 1.3812-.34881 2.0207-8.9509 3.8287-5.6798 1.1938-13.25 2.2143-16.823 2.2677-6.6371.0992-11.42 2.0045-18.456 7.3522-2.2944 1.7438-7.1702 3.472-12.876 4.5636-11.925 2.2816-15.955 4.9202-23.14 15.152-5.7712 8.2178-9.2511 11.281-12.85 11.31-.97438.008-4.429-1.4349-7.677-3.2061zm-83.743-7.8992c-2.5364-1.5584-5.6446-4.465-6.9071-6.459-2.4648-3.8929-4.7373-4.3874-11.391-2.4791-2.2526.64603-4.7804.70829-5.7912.14263-3.4974-1.9572 2.8198-3.8822 9.8555-3.0032 5.3509.66855 6.5398.47802 7.1638-1.148 1.2537-3.2671 6.9916-5.6084 10.182-4.1548 1.964.89487 3.7495.86991 6.2578-.0875 3.3747-1.2881 3.4215-1.4044 1.2171-3.023-1.2609-.92586-2.7001-1.6834-3.1982-1.6834-.49805 0-2.296-2.3726-3.9955-5.2725s-4.8846-6.3817-7.0781-7.7374c-3.7278-2.3039-4.221-2.3444-7.5553-.62015-2.915 1.5074-4.599 1.613-9.2114.5773-3.1043-.69705-7.4387-.93181-9.6319-.5217-3.8047.71147-10.776-1.1504-10.776-2.8781 0-3.1738 10.003-10.297 15.944-11.354l4.7243-.84063-3.377 3.5979c-4.6584 4.9631-2.9065 7.2472 2.152 2.8057 2.1458-1.884 5.8544-3.7919 8.2413-4.2397 3.6472-.68422 5.2096-.23805 9.7892 2.7953 6.0932 4.036 6.5627 4.1442 9.9989 2.3052 2.0692-1.1074 2.8366-.80327 5.0837 2.0148 1.5543 1.9492 5.0254 4.0718 8.4101 5.1428 5.3945 1.7069 5.7635 2.0782 5.7635 5.7988 0 2.79.80466 4.5506 2.699 5.9054 7.9262 5.6685 7.7533 5.4343 6.0383 8.1806-2.3516 3.7654-4.2085 4.0383-9.4129 1.3832-3.6206-1.8471-5.2024-2.1004-7.025-1.125-2.2304 1.1937-2.2541 1.4487-.45875 4.9206 1.4735 2.8494 1.6081 4.2882.60676 6.4858-1.2338 2.708-1.4304 2.7498-4.7806 1.0174-6.5862-3.4058-11.021-1.1647-4.8773 2.4646 1.9249 1.1371 3.2316 2.5014 2.9038 3.0318-1.1439 1.8509-6.9875.86912-11.564-1.9429zm242.6 1.5293c0-.54132.79722-.98422 1.7716-.98422s1.7716.4429 1.7716.98422c0 .54133-.79722.98423-1.7716.98423-.97439 0-1.7716-.4429-1.7716-.98423zm-287.13-6.3518c-2.3284-1.2242-4.1369-1.3289-7.3976-.4286-5.544 1.5308-7.4827.41057-4.6694-2.698 3.6015-3.9796 6.044-4.7623 10.388-3.3287 4.8891 1.6136 7.0589 4.0118 5.74 6.3441-.84082 1.4869-1.4143 1.5026-4.0609.11117zm234.57-.53783c-1.9488-1.2814-4.4293-2.0494-5.5122-1.7069-1.4915.4718-1.8224.0623-1.3646-1.6884.70267-2.687 11.08-6.5653 14.588-5.4519 1.223.38818 4.349.069 6.9466-.70924 4.0779-1.2218 5.1589-1.1293 7.9157.67697l3.1928 2.092-2.844 2.2164c-2.4004 1.8707-6.8526 3.4938-17.607 6.419-.97438.26503-3.366-.56651-5.3148-1.8479zm-320.66-22.048c-1.624-.25666-5.58-1.6458-8.7912-3.0871l-5.8385-2.6204 8.2006-.59054c4.5103-.32479 8.2006-1.122 8.2006-1.7716s-3.1889-1.4659-7.0864-1.8141c-5.146-.4597-6.1162-.7831-3.5432-1.1811 4.3081-.66634 4.6185-2.5321.59054-3.5494-2.9006-.73254-2.8794-.77728 1.2007-2.5352 7.071-3.0466 14.603-3.6303 21.276-1.6486 5.4787 1.627 6.3346 1.62 8.9176-.0724 1.8267-1.1969 2.9105-1.3972 3.0049-.55523.0811.7243.21407 1.937.29527 2.6948.27414 2.5587 2.63 2.2276 5.4411-.76469 2.6024-2.7701 7.1133-4.0971 7.1033-2.0896-.002.48719-1.0531 2.6058-2.3349 4.708l-2.3305 3.8222 7.6225 3.9767-6.2578 2.8562c-5.6469 2.5774-6.8054 2.7249-11.867 1.5106-4.9078-1.1774-6.3158-1.0427-11.261 1.077-5.5853 2.3942-6.7632 2.5476-12.542 1.6343zm47.368-.83206c-1.0668-1.2854-.62635-1.918 2.1305-3.0599 1.9189-.79485 4.6716-1.0598 6.1466-.59166 2.558.81188 2.4991.93956-1.3893 3.0104-4.9609 2.642-5.2081 2.6651-6.8878.64117zm325.85-5.466c2.2898-1.4798 3.5432-1.4798 3.5432 0 0 .64959-1.1958 1.1729-2.6574 1.163-2.1489-.0146-2.3184-.23718-.8858-1.163zm216.73-3.2767c-6.0384-2.3851-5.9144-2.2547-4.1574-4.3717.82169-.99009 1.0303-1.8171.46357-1.8377-.56673-.0207.0326-.84077 1.3317-1.8224 1.2992-.98169 2.371-2.1606 2.3819-2.6198.0413-1.7469 4.8499-6.3537 8.2477-7.9018 1.9488-.88786 6.9978-1.8886 11.22-2.2238 4.2223-.33522 9.8779-.94937 12.568-1.3648 2.863-.44213 5.1963-.26135 5.6272.436.8374 1.3549-.76071 1.9309-9.9277 3.5778-9.0964 1.6342-14.564 4.1808-18.165 8.4606-3.7937 4.5086-3.9207 7.3553-.43662 9.7857l2.6574 1.8537-3.5432-.0528c-1.9488-.029-5.6691-.89255-8.2675-1.9189zm-618.58-3.4244c-1.9048-1.9048-1.4705-2.3194 7.668-7.3222 10.707-5.8616 16.088-6.6397 25.692-3.7157l5.3148 1.6182-7.0864 1.4051c-5.7955 1.1492-18.077 5.2562-27.776 9.2884-.98938.41132-2.6974-.15948-3.8118-1.2738zm85.327-1.5286c0-.62884-1.4616-1.9822-3.2479-3.0076l-3.2479-1.8642 4.3488.68389c3.09.48594 4.6284.19647 5.3148-.99999.81633-1.423 8.3335-4.2703 11.331-4.2918.50387-.004.0926 1.586-.91404 3.5326-2.3708 4.5847-13.584 9.4939-13.584 5.9471zm18.388-3.4485c-1.6921-2.7379 9.8647-6.976 14.774-5.4179 3.5779 1.1356 1.1866 3.0869-5.0542 4.1243-2.7925.46419-5.9536 1.2173-7.0247 1.6736-1.0711.45632-2.2838.2853-2.695-.38004zm37.712-8.6971c-7.7951-.62005-14.318-1.2622-14.496-1.4271-1.0561-.9799 1.5778-4.1696 4.4126-5.3438 2.7871-1.1545 4.0716-1.0013 7.8874.94078 3.7192 1.8929 6.1165 2.2075 13.026 1.7096 4.6572-.33565 9.9721-.2295 11.811.2359l3.343.84617-4.1338 2.2089c-2.2736 1.2149-4.931 2.1522-5.9054 2.083-.97438-.0693-8.1494-.63325-15.944-1.2533zm339.89-4.8269c-5.8019-2.9702-6.3616-4.3172-1.8045-4.3426 1.7864-.01 4.0452-.59156 5.0196-1.2925 1.5315-1.1017 1.511-1.1918-.15134-.66475-1.0576.33531-2.5413-.009-3.2971-.76452-1.0448-1.0448-1.5891-1.0263-2.2712.0772-.63146 1.0217-1.928 1.1426-4.3798.40841-6.2281-1.8651-7.6166-2.6932-7.6166-4.5424 0-1.5664 1.5613-1.7098 11.22-1.0309 7.3561.51708 11.22.37374 11.22-.41621 0-2.325 3.277-1.1769 4.1459 1.4525l.87822 2.6574.52274-2.6574c.28751-1.4616 1.283-2.6574 2.2122-2.6574s1.6895-.63778 1.6895-1.4173c0-1.1023.31496-1.1023 1.4173 0 .82443.82443 4.7768 1.4173 9.4486 1.4173 8.444 0 10.427 1.5097 4.7956 3.6508-2.9266 1.1127-8.0164.79794-13.595-.84069-1.1368-.33393-2.0635-.17272-2.0594.35824.008 1.09 6.6445 5.0992 8.4401 5.0992.64334 0 1.9153.7456 2.8266 1.6569 1.4218 1.4218 1.4098 1.7517-.0843 2.3251-.95768.3675-1.7412.0942-1.7412-.60727 0-.82463-1.5022-.99363-4.25-.47814-2.9757.55825-4.0076.40508-3.4416-.51083.44466-.71947.16616-2.0821-.61888-3.028-1.5145-1.8248-5.8625-2.3836-5.8625-.75334 0 .53159-1.7273 2.8762-3.8385 5.2103l-3.8385 4.2438-4.9867-2.5529zm-313.31-2.5983c-2.0475-1.2019-4.9441-1.5501-9.4486-1.1357-4.2103.38734-7.4475.0534-9.2006-.94911-2.4168-1.3821-1.8261-1.5396 5.5503-1.4799 9.2238.0747 13.275-1.8998 8.2795-4.0356-2.3731-1.0146-2.027-1.1067 2.0407-.54321 5.3104.73566 7.3748-.68714 4.4813-3.0885-3.0853-2.5606.30716-3.3555 11.285-2.6442 6.7932.44011 11.062.19325 12.807-.74062 3.3428-1.789 2.0312-4.0664-1.7897-3.1074-2.6407.66278-20.967-.4248-20.194-1.1984.55285-.55284 26.517-2.9575 43.566-4.0348 8.8431-.5588 18.676-1.3383 21.85-1.7322l5.7714-.71625-9.5274 4.5764c-8.9326 4.2907-23.459 8.4737-29.427 8.4737-1.4528 0-5.6295 1.5944-9.2814 3.5432s-7.3722 3.5432-8.2673 3.5432c-.89512 0-4.7584 1.5877-8.5851 3.5283-3.8267 1.9405-6.9576 3.5162-6.9576 3.5014s-1.3287-.80687-2.9527-1.7602zm-23.031-10.79c-5.724-1.2666-5.9339-1.743-1.7275-3.9231 6.1313-3.1778 11.933-3.9922 14.571-2.0455 2.0884 1.5413 1.9674 1.7796-2.1344 4.1996-4.2749 2.5223-6.0098 2.8088-10.709 1.7689z \ No newline at end of file diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/pickers.c gtk4-4.14.1+ds/demos/gtk-demo/pickers.c --- gtk4-4.12.5+ds/demos/gtk-demo/pickers.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/pickers.c 2024-03-17 00:52:15.000000000 +0000 @@ -1,8 +1,9 @@ /* Pickers and Launchers - * #Keywords: GtkColorDialog, GtkFontDialog, GtkFileDialog, GtkFileLauncher, GtkUriLauncher + * #Keywords: GtkColorDialog, GtkFontDialog, GtkFileDialog, GtkPrintDialog, GtkFileLauncher, GtkUriLauncher * * The dialogs are mainly intended for use in preference dialogs. - * They allow to select colors, fonts and applications. + * They allow to select colors, fonts and files. There is also a + * print dialog. * * The launchers let you open files or URIs in applications that * can handle them. @@ -11,11 +12,13 @@ #include static GtkWidget *app_picker; +static GtkWidget *print_button; static void set_file (GFile *file, gpointer data) { + GFileInfo *info; char *name; if (!file) @@ -31,6 +34,13 @@ gtk_widget_set_sensitive (app_picker, TRUE); g_object_set_data_full (G_OBJECT (app_picker), "file", g_object_ref (file), g_object_unref); + + info = g_file_query_info (file, "standard::content-type", 0, NULL, NULL); + if (strcmp (g_file_info_get_content_type (info), "application/pdf") == 0) + { + gtk_widget_set_sensitive (print_button, TRUE); + g_object_set_data_full (G_OBJECT (print_button), "file", g_object_ref (file), g_object_unref); + } } static void @@ -47,6 +57,10 @@ { g_print ("%s\n", error->message); g_error_free (error); + gtk_widget_set_sensitive (app_picker, FALSE); + g_object_set_data (G_OBJECT (app_picker), "file", NULL); + gtk_widget_set_sensitive (print_button, FALSE); + g_object_set_data (G_OBJECT (print_button), "file", NULL); } set_file (file, data); @@ -115,6 +129,53 @@ } static void +print_file_done (GObject *source, + GAsyncResult *result, + gpointer data) +{ + GtkPrintDialog *dialog = GTK_PRINT_DIALOG (source); + GError *error = NULL; + GCancellable *cancellable; + unsigned int id; + + cancellable = g_task_get_cancellable (G_TASK (result)); + id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (cancellable), "timeout")); + if (id) + g_source_remove (id); + + if (!gtk_print_dialog_print_file_finish (dialog, result, &error)) + { + g_print ("%s\n", error->message); + g_error_free (error); + } +} + +static void +print_file (GtkButton *picker) +{ + GtkWindow *parent = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (picker))); + GtkPrintDialog *dialog; + GCancellable *cancellable; + GFile *file; + unsigned int id; + + file = G_FILE (g_object_get_data (G_OBJECT (picker), "file")); + dialog = gtk_print_dialog_new (); + + cancellable = g_cancellable_new (); + + id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, + 20, + abort_mission, g_object_ref (cancellable), g_object_unref); + g_object_set_data (G_OBJECT (cancellable), "timeout", GUINT_TO_POINTER (id)); + + gtk_print_dialog_print_file (dialog, parent, NULL, file, cancellable, print_file_done, NULL); + + g_object_unref (cancellable); + g_object_unref (dialog); +} + +static void open_uri_done (GObject *source, GAsyncResult *result, gpointer data) @@ -234,8 +295,14 @@ gtk_widget_set_sensitive (app_picker, FALSE); g_signal_connect (app_picker, "clicked", G_CALLBACK (open_app), NULL); gtk_box_append (GTK_BOX (picker), app_picker); - gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1); + print_button = gtk_button_new_from_icon_name ("printer-symbolic"); + gtk_widget_set_tooltip_text (print_button, "Print file"); + gtk_widget_set_sensitive (print_button, FALSE); + g_signal_connect (print_button, "clicked", G_CALLBACK (print_file), NULL); + gtk_box_append (GTK_BOX (picker), print_button); + + gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1); label = gtk_label_new ("URI:"); gtk_widget_set_halign (label, GTK_ALIGN_START); Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/pointer_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/pointer_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/progress_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/progress_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/puzzlepiece.h gtk4-4.14.1+ds/demos/gtk-demo/puzzlepiece.h --- gtk4-4.12.5+ds/demos/gtk-demo/puzzlepiece.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/puzzlepiece.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __PUZZLE_PIECE_H__ -#define __PUZZLE_PIECE_H__ +#pragma once #include @@ -19,5 +18,3 @@ GdkPaintable * gtk_puzzle_piece_get_puzzle (GtkPuzzlePiece *self); guint gtk_puzzle_piece_get_x (GtkPuzzlePiece *self); guint gtk_puzzle_piece_get_y (GtkPuzzlePiece *self); - -#endif /* __PUZZLE_PIECE_H__ */ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/row_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/row_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/s_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/s_resize_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/script-names.h gtk4-4.14.1+ds/demos/gtk-demo/script-names.h --- gtk4-4.12.5+ds/demos/gtk-demo/script-names.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/script-names.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef SCRIPT_NAMES_H -#define SCRIPT_NAMES_H +#pragma once #include @@ -9,5 +8,3 @@ const char * get_script_name_for_tag (guint32 tag); G_END_DECLS - -#endif Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/se_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/se_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/sw_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/sw_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/text_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/text_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/tiger.node gtk4-4.14.1+ds/demos/gtk-demo/tiger.node --- gtk4-4.12.5+ds/demos/gtk-demo/tiger.node 1970-01-01 00:00:00.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/tiger.node 2024-03-17 00:52:15.000000000 +0000 @@ -0,0 +1,2218 @@ +transform { + transform: matrix(1.7656463,0,0,1.7656463,324.90716,255.00942); + child: container { + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-122.3,84.285s0.1,1.894-0.73,1.875c-0.82-0.019-17.27-48.094-37.8-45.851,0,0,17.78-7.353,38.53,43.976z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-122.3,84.285s0.1,1.894-0.73,1.875c-0.82-0.019-17.27-48.094-37.8-45.851,0,0,17.78-7.353,38.53,43.976z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-118.77,81.262s-0.55,1.816-1.32,1.517c-0.77-0.298,0.11-51.104-19.95-55.978,0,0,19.22-0.864,21.27,54.461z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-118.77,81.262s-0.55,1.816-1.32,1.517c-0.77-0.298,0.11-51.104-19.95-55.978,0,0,19.22-0.864,21.27,54.461z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-91.284,123.59s1.636,0.96,1.166,1.64c-0.471,0.67-49.642-12.13-59.102,6.23,0,0,3.68-18.89,57.936-7.87z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-91.284,123.59s1.636,0.96,1.166,1.64c-0.471,0.67-49.642-12.13-59.102,6.23,0,0,3.68-18.89,57.936-7.87z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-94.093,133.8s1.856,0.4,1.622,1.19c-0.233,0.79-50.939,4.13-54.129,24.53,0,0-2.46-19.08,52.507-25.72z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-94.093,133.8s1.856,0.4,1.622,1.19c-0.233,0.79-50.939,4.13-54.129,24.53,0,0-2.46-19.08,52.507-25.72z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-98.304,128.28s1.778,0.66,1.432,1.41-50.998-3.34-57.128,16.37c0,0,0.35-19.24,55.696-17.78z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-98.304,128.28s1.778,0.66,1.432,1.41-50.998-3.34-57.128,16.37c0,0,0.35-19.24,55.696-17.78z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-109.01,110.07s1.31,1.38,0.67,1.9-44.38-25.336-58.53-10.29c0,0,8.74-17.147,57.86,8.39z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-109.01,110.07s1.31,1.38,0.67,1.9-44.38-25.336-58.53-10.29c0,0,8.74-17.147,57.86,8.39z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-116.55,114.26s1.45,1.22,0.88,1.81c-0.58,0.59-46.97-20.148-59.32-3.6,0,0,6.74-18.023,58.44,1.79z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-116.55,114.26s1.45,1.22,0.88,1.81c-0.58,0.59-46.97-20.148-59.32-3.6,0,0,6.74-18.023,58.44,1.79z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-119.15,118.34s1.6,1,1.11,1.67c-0.49,0.66-49.27-13.56-59.25,4.51,0,0,4.22-18.77,58.14-6.18z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-119.15,118.34s1.6,1,1.11,1.67c-0.49,0.66-49.27-13.56-59.25,4.51,0,0,4.22-18.77,58.14-6.18z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-108.42,118.95s1.12,1.53,0.42,1.97c-0.7,0.43-40.77-30.818-56.73-17.71,0,0,10.87-15.884,56.31,15.74z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-108.42,118.95s1.12,1.53,0.42,1.97c-0.7,0.43-40.77-30.818-56.73-17.71,0,0,10.87-15.884,56.31,15.74z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-128.2,90s0.6,1.8-0.2,2-29.4-41.8-48.6-34.2c0,0,15.2-11.8,48.8,32.2z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-128.2,90s0.6,1.8-0.2,2-29.4-41.8-48.6-34.2c0,0,15.2-11.8,48.8,32.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-127.5,96.979s0.97,1.629,0.23,1.996c-0.74,0.368-37.72-34.476-54.83-22.914,0,0,12.3-14.8,54.6,20.918z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-127.5,96.979s0.97,1.629,0.23,1.996c-0.74,0.368-37.72-34.476-54.83-22.914,0,0,12.3-14.8,54.6,20.918z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-127.62,101.35s1.12,1.53,0.42,1.97c-0.7,0.43-40.77-30.818-56.73-17.713,0,0,10.87-15.881,56.31,15.743z"; + } + stroke { + line-width: 0.17200001; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-127.62,101.35s1.12,1.53,0.42,1.97c-0.7,0.43-40.77-30.818-56.73-17.713,0,0,10.87-15.881,56.31,15.743z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-129.83,103.06c0.5,6.05,1.49,12.62,3.23,15.74,0,0-3.6,12.4,5.2,25.6,0,0-0.4,7.2,1.2,10.4,0,0,4,8.4,8.8,9.2,3.88,0.65,12.607,3.72,22.468,5.12,0,0,17.132,14.08,13.932,26.88,0,0-0.4,16.4-4,18,0,0,11.6-11.2,2,5.6l-4.4,18.8s25.6-21.6,10-3.2l-10,26s19.6-18.4,12.4-10l-3.2,8.8s43.2-27.2,12.4,2.4c0,0,8-3.6,12.4-0.8,0,0,6.8-1.2,6,0.4,0,0-20.8,10.4-24.4,28.8,0,0,8.4-10,5.2,0.8l0.4,11.6s4-21.6,3.6,16c0,0,19.2-18,7.6,2.8v16.8s15.2-16.4,8.8-3.6c0,0,10-8.8,6,6.4,0,0-0.8,10.4,3.6-0.8,0,0,16-30.6,10-4.4,0,0-0.8,19.2,4,4.4,0,0,0.4,10.4,9.6,17.6,0,0-1.2-50.8,11.6-14.8l4,16.4s2.8-9.2,2.4-14.4l8,8s15.2-22.8,12-9.6c0,0-7.6,16-6,20.8,0,0,16.8-34.8,18-36.4,0,0-2,42.4,8.8,6.4,0,0,5.6,12,2.8,16.4,0,0,8-8,7.2-11.2,0,0,4.6-8.2,7.4,5.4,0,0,1.8,9.4,3.4,6.2,0,0,4,24,5.2,1.2,0,0,1.6-13.6-5.6-25.2,0,0,0.8-3.2-2-7.2,0,0,13.6,21.6,6.4-7.2,0,0,11.201,8,12.401,8,0,0-13.601-23.2-4.801-18.4,0,0-5.2-10.4,12.801,1.6,0,0-16.001-16,1.6-6.4,0,0,7.999,6.4,0.4-3.6,0,0-14.401-16,7.599,2,0,0,11.6,16.4,12.4,19.2,0,0-10-29.2-14.4-32,0,0,8.4-36.4,49.6-20.8,0,0,6.8,17.2,11.2-1.2,0,0,12.8-6.4,24,21.2,0,0,4-13.6,3.2-16.4,0,0,6.8,1.2,6,0,0,0,13.2,4.4,14.4,3.6,0,0,6.8,6.8,7.2,3.2,0,0,9.2,2.8,7.2-0.8,0,0,8.8,15.6,9.2,19.2l2.4-14,2,2.8s1.6-7.6,0.8-8.8,20,6.8,24.8,27.6l2,8.4s6-14.8,4.4-18.8c0,0,5.2,0.8,5.6,5.2,0,0,4-23.2-0.8-29.2,0,0,4.4-0.8,5.6,2.8v-7.2s7.2,0.8,7.2-1.6c0,0,4.4-4,6.4,0.8,0,0-12.4-35.2,6-16,0,0,7.2,10.8,3.6-8s-7.6-20.4-2.8-20.8c0,0,0.8-3.6-1.2-5.2s1.2,0,1.2,0,4.8,4-0.4-18c0,0,6.4,1.6-5.6-27.6,0,0,2.8-2.4-1.2-10.8,0,0,8,4.4,10.8,2.8,0,0-0.4-1.6-3.6-5.6,0,0-21.6-54.8-1.2-32.8,0,0,11.85,13.55,5.45-9.25,0,0-9.11-24.009-8.33-28.305l-429.55,23.015z"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-129.83,103.06c0.5,6.05,1.49,12.62,3.23,15.74,0,0-3.6,12.4,5.2,25.6,0,0-0.4,7.2,1.2,10.4,0,0,4,8.4,8.8,9.2,3.88,0.65,12.607,3.72,22.468,5.12,0,0,17.132,14.08,13.932,26.88,0,0-0.4,16.4-4,18,0,0,11.6-11.2,2,5.6l-4.4,18.8s25.6-21.6,10-3.2l-10,26s19.6-18.4,12.4-10l-3.2,8.8s43.2-27.2,12.4,2.4c0,0,8-3.6,12.4-0.8,0,0,6.8-1.2,6,0.4,0,0-20.8,10.4-24.4,28.8,0,0,8.4-10,5.2,0.8l0.4,11.6s4-21.6,3.6,16c0,0,19.2-18,7.6,2.8v16.8s15.2-16.4,8.8-3.6c0,0,10-8.8,6,6.4,0,0-0.8,10.4,3.6-0.8,0,0,16-30.6,10-4.4,0,0-0.8,19.2,4,4.4,0,0,0.4,10.4,9.6,17.6,0,0-1.2-50.8,11.6-14.8l4,16.4s2.8-9.2,2.4-14.4l8,8s15.2-22.8,12-9.6c0,0-7.6,16-6,20.8,0,0,16.8-34.8,18-36.4,0,0-2,42.4,8.8,6.4,0,0,5.6,12,2.8,16.4,0,0,8-8,7.2-11.2,0,0,4.6-8.2,7.4,5.4,0,0,1.8,9.4,3.4,6.2,0,0,4,24,5.2,1.2,0,0,1.6-13.6-5.6-25.2,0,0,0.8-3.2-2-7.2,0,0,13.6,21.6,6.4-7.2,0,0,11.201,8,12.401,8,0,0-13.601-23.2-4.801-18.4,0,0-5.2-10.4,12.801,1.6,0,0-16.001-16,1.6-6.4,0,0,7.999,6.4,0.4-3.6,0,0-14.401-16,7.599,2,0,0,11.6,16.4,12.4,19.2,0,0-10-29.2-14.4-32,0,0,8.4-36.4,49.6-20.8,0,0,6.8,17.2,11.2-1.2,0,0,12.8-6.4,24,21.2,0,0,4-13.6,3.2-16.4,0,0,6.8,1.2,6,0,0,0,13.2,4.4,14.4,3.6,0,0,6.8,6.8,7.2,3.2,0,0,9.2,2.8,7.2-0.8,0,0,8.8,15.6,9.2,19.2l2.4-14,2,2.8s1.6-7.6,0.8-8.8,20,6.8,24.8,27.6l2,8.4s6-14.8,4.4-18.8c0,0,5.2,0.8,5.6,5.2,0,0,4-23.2-0.8-29.2,0,0,4.4-0.8,5.6,2.8v-7.2s7.2,0.8,7.2-1.6c0,0,4.4-4,6.4,0.8,0,0-12.4-35.2,6-16,0,0,7.2,10.8,3.6-8s-7.6-20.4-2.8-20.8c0,0,0.8-3.6-1.2-5.2s1.2,0,1.2,0,4.8,4-0.4-18c0,0,6.4,1.6-5.6-27.6,0,0,2.8-2.4-1.2-10.8,0,0,8,4.4,10.8,2.8,0,0-0.4-1.6-3.6-5.6,0,0-21.6-54.8-1.2-32.8,0,0,11.85,13.55,5.45-9.25,0,0-9.11-24.009-8.33-28.305l-429.55,23.015z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m299.72,80.245c0.62,0.181,2.83,1.305,4.08,2.955,0,0,6.8,10.8,1.6-7.6,0,0-9.2-28.8-0.4-17.6,0,0,6,7.2,2.8-6.4-3.86-16.427-6.4-22.8-6.4-22.8s11.6,4.8-15.2-34.8l8.8,3.6s-19.6-39.6-41.2-44.8l-8-6s38.4-38,25.6-74.8c0,0-6.8-5.2-16.4,4,0,0-6.4,4.8-12.4,3.2,0,0-30.8,1.2-32.8,1.2s-36.8-37.2-102.4-19.6c0,0-5.2,2-9.599,0.8,0,0-18.401-16-67.201,6.8,0,0-10,2-11.6,2s-4.4,0-12.4,6.4-8.4,7.2-10.4,8.8c0,0-16.4,11.2-21.2,12,0,0-11.6,6.4-16,16.4l-3.6,1.2s-1.6,7.2-2,8.4c0,0-4.8,3.6-5.6,9.2,0,0-8.8,6-8.4,10.4,0,0-1.6,5.2-2.4,10,0,0-7.2,4.8-6.4,7.6,0,0-7.6,14-6.4,20.8,0,0-6.4-0.4-9.2,2,0,0-0.8,4.8-2.4,5.2,0,0-2.8,1.2-0.4,5.2,0,0-1.6,2.8-2,4.4,0,0,0.8,2.8-3.6,8.4,0,0-6.4,18.8-4.4,24,0,0,0.4,4.8-2.4,6.4,0,0-3.6-0.4,4.8,11.6,0,0,0.8,1.2-2.4,3.6,0,0-17.2,3.6-19.6,20,0,0-13.6,14.8-13.6,20,0,2.305,0.27,5.452,0.97,10.06,0,0-0.57,8.34,27.03,9.14s402.72-31.355,402.72-31.355z"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m299.72,80.245c0.62,0.181,2.83,1.305,4.08,2.955,0,0,6.8,10.8,1.6-7.6,0,0-9.2-28.8-0.4-17.6,0,0,6,7.2,2.8-6.4-3.86-16.427-6.4-22.8-6.4-22.8s11.6,4.8-15.2-34.8l8.8,3.6s-19.6-39.6-41.2-44.8l-8-6s38.4-38,25.6-74.8c0,0-6.8-5.2-16.4,4,0,0-6.4,4.8-12.4,3.2,0,0-30.8,1.2-32.8,1.2s-36.8-37.2-102.4-19.6c0,0-5.2,2-9.599,0.8,0,0-18.401-16-67.201,6.8,0,0-10,2-11.6,2s-4.4,0-12.4,6.4-8.4,7.2-10.4,8.8c0,0-16.4,11.2-21.2,12,0,0-11.6,6.4-16,16.4l-3.6,1.2s-1.6,7.2-2,8.4c0,0-4.8,3.6-5.6,9.2,0,0-8.8,6-8.4,10.4,0,0-1.6,5.2-2.4,10,0,0-7.2,4.8-6.4,7.6,0,0-7.6,14-6.4,20.8,0,0-6.4-0.4-9.2,2,0,0-0.8,4.8-2.4,5.2,0,0-2.8,1.2-0.4,5.2,0,0-1.6,2.8-2,4.4,0,0,0.8,2.8-3.6,8.4,0,0-6.4,18.8-4.4,24,0,0,0.4,4.8-2.4,6.4,0,0-3.6-0.4,4.8,11.6,0,0,0.8,1.2-2.4,3.6,0,0-17.2,3.6-19.6,20,0,0-13.6,14.8-13.6,20,0,2.305,0.27,5.452,0.97,10.06,0,0-0.57,8.34,27.03,9.14s402.72-31.355,402.72-31.355z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m-115.6,102.6c-25-39.4-10.6,17-10.6,17,8.8,34.4,138.4-3.2,138.4-3.2s168.8-30.4,180-34.4,106.4,2.4,106.4,2.4l-5.6-16.8c-64.8-46.4-84-23.2-97.6-27.2s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2-31.74-22.951-16.8,8.8c16,34-58.4,39.2-75.2,28s7.2,18.4,7.2,18.4c18.4,20-16,3.2-16,3.2-34.4-12.8-58.4,12.8-61.6,13.6s-8,4-8.8-2.4-8.31-23.101-40,3.2c-20,16.6-33.8-5.4-33.8-5.4l-2.8,11.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #e87f3a; + } + path: "m133.51,25.346c-6.4,0.8-31.77-22.939-16.8,8.8,16.6,35.2-58.4,39.2-75.2,28-16.801-11.2,7.2,18.4,7.2,18.4,18.4,20.004-16.001,3.2-16.001,3.2-34.4-12.8-58.4,12.8-61.6,13.6s-8,4.004-8.8-2.4c-0.8-6.4-8.179-22.934-40,3.2-21.236,17.344-34.729-4.109-34.729-4.109l-3.2,10.113c-25-39.804-9.93,18.51-9.93,18.51,8.81,34.4,139.06-4.51,139.06-4.51s168.8-30.404,180-34.404,105.53,2.327,105.53,2.327l-5.53-17.309c-64.8-46.4-83.2-22.618-96.8-26.618s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #ea8c4d; + } + path: "m134.82,27.091c-6.4,0.8-31.14-23.229-16.8,8.8,16.2,36.201-58.401,39.201-75.201,28.001s7.2,18.4,7.2,18.4c18.4,19.998-16,3.2-16,3.2-34.4-12.8-58.401,12.8-61.601,13.6s-8,3.998-8.8-2.4c-0.8-6.4-8.048-22.767-40,3.2-22.473,18.088-35.658-2.818-35.658-2.818l-3.6,8.616c-23.8-38.998-9.25,20.02-9.25,20.02,8.8,34.4,139.71-5.82,139.71-5.82s168.8-30.398,180-34.398,104.65,2.254,104.65,2.254l-5.45-17.818c-64.8-46.4-82.4-22.037-96-26.037s-11.2,5.6-14.4,6.401c-3.2,0.8-42.4-24.001-48.8-23.201z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #ec9961; + } + path: "m136.13,28.837c-6.4,0.8-31.13-23.232-16.8,8.8,16.8,37.556-58.936,38.845-75.202,28-16.8-11.2,7.2,18.4,7.2,18.4,18.4,20.003-16,3.2-16,3.2-34.4-12.8-58.4,12.803-61.6,13.603s-8,4-8.8-2.403c-0.8-6.4-7.917-22.598-40.001,3.203-23.709,18.83-36.587-1.53-36.587-1.53l-4,7.13c-21.8-36.803-8.58,21.52-8.58,21.52,8.8,34.4,140.37-7.12,140.37-7.12s168.8-30.403,180-34.403,103.78,2.182,103.78,2.182l-5.38-18.327c-64.8-46.401-81.6-21.455-95.2-25.455s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #eea575; + } + path: "m137.44,30.583c-6.4,0.8-30.63-23.454-16.8,8.8,16.8,39.2-58.403,39.2-75.203,28s7.2,18.4,7.2,18.4c18.4,19.997-16,3.2-16,3.2-34.4-12.8-58.4,12.797-61.6,13.597s-8,4-8.8-2.4c-0.8-6.397-7.785-22.428-40,3.2-24.946,19.58-37.507-0.23-37.507-0.23l-4.4,5.63c-19.8-34.798-7.91,23.04-7.91,23.04,8.8,34.4,141.02-8.44,141.02-8.44s168.8-30.397,180-34.397,102.91,2.109,102.91,2.109l-5.31-18.837c-64.8-46.4-80.8-20.872-94.4-24.872s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f1b288; + } + path: "m138.75,32.328c-6.4,0.8-32.37-22.651-16.8,8.8,19.2,38.8-58.404,39.2-75.204,28s7.2,18.4,7.2,18.4c18.4,20.002-16,3.2-16,3.2-34.4-12.8-58.4,12.802-61.6,13.602s-8,4-8.8-2.4c-0.8-6.402-7.654-22.265-40,3.2-26.182,20.33-38.436,1.05-38.436,1.05l-4.8,4.15c-18-33.202-7.24,24.54-7.24,24.54,8.8,34.4,141.68-9.74,141.68-9.74s168.8-30.402,180-34.402,102.03,2.036,102.03,2.036l-5.23-19.345c-64.8-46.4-80-20.291-93.6-24.291s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f3bf9c; + } + path: "m140.06,34.073c-6.4,0.8-32.75-22.46-16.8,8.8,20.4,40.001-58.405,39.201-75.205,28.001s7.2,18.4,7.2,18.4c18.4,19.996-16,3.2-16,3.2-34.4-12.8-58.4,12.796-61.6,13.596s-8,4-8.8-2.4c-0.8-6.396-7.523-22.092-40,3.2-27.419,21.08-39.365,2.35-39.365,2.35l-5.2,2.65c-16-30.196-6.56,26.06-6.56,26.06,8.8,34.4,142.32-11.06,142.32-11.06s168.8-30.396,180-34.396,101.16,1.963,101.16,1.963l-5.16-19.854c-64.8-46.4-79.2-19.709-92.8-23.709-13.6-4.001-11.2,5.6-14.4,6.4s-42.4-24.001-48.8-23.201z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f5ccb0; + } + path: "m141.36,35.819c-6.4,0.8-33.84-21.875-16.8,8.8,22,39.6-58.396,39.2-75.196,28s7.2,18.4,7.2,18.4c18.4,20.001-16,3.2-16,3.2-34.4-12.8-58.4,12.801-61.6,13.601s-8,4-8.8-2.4c-0.8-6.401-7.391-21.928-40,3.2-28.655,21.82-40.294,3.64-40.294,3.64l-5.6,1.16c-14.4-28.401-5.89,27.56-5.89,27.56,8.8,34.4,142.98-12.36,142.98-12.36s168.8-30.401,180-34.401,100.3,1.891,100.3,1.891l-5.1-20.364c-64.8-46.4-78.4-19.127-92-23.127s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f8d8c4; + } + path: "m142.67,37.565c-6.4,0.8-33.84-21.876-16.8,8.8,22,39.6-58.396,39.2-75.196,28s7.2,18.4,7.2,18.4c18.4,19.995-16,3.2-16,3.2-34.401-12.8-58.401,12.795-61.601,13.595s-8,4-8.8-2.4-7.259-21.755-40,3.2c-29.891,22.57-41.213,4.93-41.213,4.93l-6-0.33c-13.61-26.396-5.22,29.08-5.22,29.08,8.8,34.4,143.63-13.68,143.63-13.68s168.8-30.395,180-34.395,99.42,1.818,99.42,1.818l-5.01-20.873c-64.81-46.4-77.61-18.545-91.21-22.545s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #fae5d7; + } + path: "m143.98,39.31c-6.4,0.8-33.45-22.087-16.8,8.8,22,40.8-58.397,39.2-75.197,28s7.2,18.4,7.2,18.4c18.4,20-16,3.2-16,3.2-34.4-12.8-58.4,12.8-61.6,13.6-3.201,0.8-8.001,4-8.801-2.4s-7.128-21.592-40,3.2c-31.127,23.31-42.142,6.22-42.142,6.22l-6.4-1.82c-13-24-4.55,30.58-4.55,30.58,8.8,34.4,144.29-14.98,144.29-14.98s168.8-30.4,180-34.4,98.55,1.746,98.55,1.746l-4.95-21.382c-64.8-46.401-76.8-17.964-90.4-21.964s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #fcf2eb; + } + path: "m145.29,41.055c-6.4,0.8-32.37-22.644-16.8,8.8,21.2,42.801-58.398,39.201-75.198,28.001s7.2,18.4,7.2,18.4c18.4,20.004-16,3.2-16,3.2-34.4-12.8-58.4,12.804-61.6,13.604s-8,4-8.8-2.4-6.997-21.428-40,3.2c-32.365,24.05-43.072,7.5-43.072,7.5l-6.8-3.3c-12.8-23.204-3.87,32.09-3.87,32.09,8.8,34.4,144.94-16.29,144.94-16.29s168.8-30.4,180-34.404c11.2-4,97.67,1.674,97.67,1.674l-4.87-21.893c-64.8-46.4-76-17.381-89.6-21.381-13.6-4.001-11.2,5.6-14.4,6.4s-42.4-24.001-48.8-23.201z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-115.8,119.6c-12.8-22-3.2,33.6-3.2,33.6,8.8,34.4,145.6-17.6,145.6-17.6s168.8-30.4,180-34.4,96.8,1.6,96.8,1.6l-4.8-22.4c-64.8-46.4-75.2-16.8-88.8-20.8s-11.2,5.6-14.4,6.4-42.4-24-48.8-23.2-31.62-23.007-16.8,8.8c22.23,47.707-60.759,37.627-75.2,28-16.8-11.2,7.2,18.4,7.2,18.4,18.4,20-16,3.2-16,3.2-34.4-12.8-58.4,12.8-61.6,13.6s-8,4-8.8-2.4-6.865-21.256-40,3.2c-33.6,24.8-44,8.8-44,8.8l-7.2-4.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-74.2,149.6s-7.2,11.6,13.6,24.8c0,0,1.4,1.4-16.6-2.8,0,0-6.2-2-7.8-12.4,0,0-4.8-4.4-9.6-10s20.4,0.4,20.4,0.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m65.8,102s17.698,26.82,17.1,31.6c-1.3,10.4-1.5,20,1.7,24,3.201,4,12.001,37.2,12.001,37.2s-0.4,1.2,11.999-36.8c0,0,11.6-16-8.4-34.4,0,0-35.2-28.8-34.4-21.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-54.2,176.4s11.2,7.2-3.2,38.4l6.4-2.4s-0.8,11.2-4,13.6l7.2-3.2s4.8,8,0.8,12.8c0,0,16.8,8,16,14.4,0,0,6.4-8,2.4-14.4s-11.2-2.4-10.4-20.8l-8.8,3.2s5.6-8.8,5.6-15.2l-8,2.4s15.469-26.58,4.8-28c-6-0.8-8.8-0.8-8.8-0.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-21.8,193.2s2.8-4.4,0-3.6-34,15.6-40,25.2c0,0,34.4-24.4,40-21.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-11.4,201.2s2.8-4.4,0-3.6-34,15.6-40,25.2c0,0,34.4-24.4,40-21.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m1.8,186s2.8-4.4,0-3.6-34,15.6-40,25.2c0,0,34.4-24.4,40-21.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-21.4,229.6s0-6-2.8-5.2-38.8,18.4-44.8,28c0,0,42-25.6,47.6-22.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-20.2,218.8s1.2-4.8-1.6-4c-2,0-28.4,11.6-34.4,21.2,0,0,29.6-21.6,36-17.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-34.6,266.4-10,7.6s10.4-7.6,14-6.4c0,0-6.8,11.2-7.6,16.4,0,0,10.4-12.8,16-12.4,0,0,7.6,0.4,7.6,11.2,0,0,5.6-10.4,8.8-10,0,0,1.2,6.4,0,13.2,0,0,4-7.6,8-6,0,0,6.4-2,5.6,9.6,0,0,0,10.4-0.8,13.2,0,0,5.6-26.4,8-26.8,0,0,8-1.2,12.8,7.6,0,0-4-7.6,0.8-5.6,0,0,10.8,1.6,14,8.4,0,0-6.8-12-1.2-8.8l8,6.4s8.4,21.2,10.4,22.8c0,0-7.6-21.6-6-21.6,0,0-2-12,3.2,2.8,0,0-3.2-14,2.4-13.2s10,10.8,18.4,8.4c0,0,9.601,5.6,11.601-63.6l-124,46.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-29.8,173.6s14.8-6,54.8,0c0,0,7.2,0.4,14-8.4s33.6-16,40-14l9.601,6.4,0.8,1.2s12.399,10.4,12.799,18-14.399,55.6-24,71.6c-9.6,16-19.2,28.4-38.4,26,0,0-20.8-4-46.4,0,0,0-29.2-1.6-32-9.6s11.2-23.2,11.2-23.2,4.4-8.4,3.2-22.8-0.8-42.4-5.6-45.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #e5668c; + } + path: "M-7.8,175.6c8.4,18.4-21.2,83.6-21.2,83.6-2,1.6,12.66,7.65,22.8,5.2,10.946-2.64,51.2,1.6,51.2,1.6,23.6-15.6,36.4-60,36.4-60s10.401-24-7.2-27.2c-17.6-3.2-82-3.2-82-3.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #b23259; + } + path: "m-9.831,206.5c3.326-12.79,4.91-24.59,2.031-30.9,0,0,62.4,6.4,73.6-14.4,4.241-7.87,19.001,22.8,18.6,32.4,0,0-63,14.4-77.8,3.2l-16.431,9.7z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #a5264c; + } + path: "m-5.4,222.8s2,7.2-0.4,11.2c0,0-1.6,0.8-2.8,1.2,0,0,1.2,3.6,7.2,5.2,0,0,2,4.4,4.4,4.8s7.2,6,11.2,4.8,15.2-5.2,15.2-5.2,5.6-3.2,14.4,0.4c0,0,2.375-0.8,2.8-4.8,0.5-4.7,3.6-8.4,5.6-10.4s11.6-14.8,10.4-15.2-68,8-68,8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #ff727f; + } + path: "m-9.8,174.4s-2.8,22.4,0.4,30.8,2.4,10.4,1.6,14.4,3.6,14,9.2,20l12,1.6s15.2-3.6,24.4-0.8c0,0,8.994,1.34,12.4-13.6,0,0,4.8-6.4,12-9.2s14.4-44.4,10.4-52.4-18.4-12.4-34.4,3.2-18-1.2-48,6z"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-9.8,174.4s-2.8,22.4,0.4,30.8,2.4,10.4,1.6,14.4,3.6,14,9.2,20l12,1.6s15.2-3.6,24.4-0.8c0,0,8.994,1.34,12.4-13.6,0,0,4.8-6.4,12-9.2s14.4-44.4,10.4-52.4-18.4-12.4-34.4,3.2-18-1.2-48,6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-8.2,249.2s-0.8-2-5.2-2.4c0,0-22.4-3.6-30.8-16,0,0-6.8-5.6-2.4,6,0,0,10.4,20.4,17.2,23.2,0,0,16.4,4,21.2-10.8z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-8.2,249.2s-0.8-2-5.2-2.4c0,0-22.4-3.6-30.8-16,0,0-6.8-5.6-2.4,6,0,0,10.4,20.4,17.2,23.2,0,0,16.4,4,21.2-10.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc3f4c; + } + path: "m71.742,185.23c0.659-7.91,2.612-16.52,0.858-20.03-6.446-12.89-23.419-7.5-34.4,3.2-16,15.6-18-1.2-48,6,0,0-1.745,13.96-0.905,23.98,0,0,37.305-11.58,38.105-5.98,0,0,1.6-3.2,10.8-3.2s31.942-1.17,33.542-3.97z"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #a51926; + } + path: "m28.6,175.2s4.8,4.8,1.2,14.4c0,0-14.4,16-12.4,30"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-19.4,260s-4.4-12.8,4.4-6l3.6,3.6c-1.2,1.6-6.8,5.6-8,2.4z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-19.4,260s-4.4-12.8,4.4-6l3.6,3.6c-1.2,1.6-6.8,5.6-8,2.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-14.36,261.2s-3.52-10.24,3.52-4.8l2.88,2.88c-4.56,1.28,0,3.84-6.4,1.92z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-14.36,261.2s-3.52-10.24,3.52-4.8l2.88,2.88c-4.56,1.28,0,3.84-6.4,1.92z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-9.56,261.2s-3.52-10.24,3.52-4.8l2.88,2.88c-3.36,1.28,0,3.84-6.4,1.92z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-9.56,261.2s-3.52-10.24,3.52-4.8l2.88,2.88c-3.36,1.28,0,3.84-6.4,1.92z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-2.96,261.4s-3.52-10.24,3.52-4.8c0,0,4.383,2.33,2.881,2.88-2.961,1.08,0,3.84-6.401,1.92z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-2.96,261.4s-3.52-10.24,3.52-4.8c0,0,4.383,2.33,2.881,2.88-2.961,1.08,0,3.84-6.401,1.92z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m3.52,261.32s-3.52-10.24,3.521-4.8l2.88,2.88c-0.96,1.28,0,3.84-6.401,1.92z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m3.52,261.32s-3.52-10.24,3.521-4.8l2.88,2.88c-0.96,1.28,0,3.84-6.401,1.92z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m10.2,262s-4.8-12.4,4.4-6l3.6,3.6c-1.2,1.6,0,4.8-8,2.4z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m10.2,262s-4.8-12.4,4.4-6l3.6,3.6c-1.2,1.6,0,4.8-8,2.4z"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #a5264c; + } + path: "m-18.2,244.8s13.2-2.8,19.2,0.4c0,0,6,1.2,7.2,0.8s4.4-0.8,4.4-0.8"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #a5264c; + } + path: "m15.8,253.6s12-13.6,24-9.2c7.016,2.57,6-0.8,6.8-3.6s1-7,6-10"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m33,237.6s-4-10.8-6.8,2-6,16.4-7.6,19.2c0,0,0,5.2,8.4,4.8,0,0,10.8-0.4,11.2-3.2s-1.2-14.4-5.2-22.8z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m33,237.6s-4-10.8-6.8,2-6,16.4-7.6,19.2c0,0,0,5.2,8.4,4.8,0,0,10.8-0.4,11.2-3.2s-1.2-14.4-5.2-22.8z"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #a5264c; + } + path: "m47,244.8s3.6-2.4,6-1.2"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #a5264c; + } + path: "m53.5,228.4s2.9-4.9,7.7-5.7"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #b2b2b2; + } + path: "m-25.8,265.2s18,3.2,22.4,1.6l0.4,2-20.8-1.2s-11.6-5.6-2-2.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-11.8,172,19.6,0.8s7.2,30.8,3.6,38.4c0,0-1.2,2.8-4-2.8,0,0-18.4-32.8-21.6-34.8s1.2-1.6,2.4-1.6z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-11.8,172,19.6,0.8s7.2,30.8,3.6,38.4c0,0-1.2,2.8-4-2.8,0,0-18.4-32.8-21.6-34.8s1.2-1.6,2.4-1.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-88.9,169.3s8.9,1.7,21.5,4.3c0,0,4.8,22.4,8,27.2s-0.4,4.8-4,2-18.4-16.8-20.4-21.2-5.1-12.3-5.1-12.3z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-88.9,169.3s8.9,1.7,21.5,4.3c0,0,4.8,22.4,8,27.2s-0.4,4.8-4,2-18.4-16.8-20.4-21.2-5.1-12.3-5.1-12.3z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-67.039,173.82s5.8,1.55,6.809,3.76c1.008,2.22-1.202,5.51-1.202,5.51s-1,3.31-2.202,1.15c-1.202-2.17-4.074-9.83-3.405-10.42z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-67.039,173.82s5.8,1.55,6.809,3.76c1.008,2.22-1.202,5.51-1.202,5.51s-1,3.31-2.202,1.15c-1.202-2.17-4.074-9.83-3.405-10.42z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-67,173.6s3.6,5.2,7.2,5.2,3.982-0.41,6.8,0.2c4.6,1,4.2-1,10.8,0.2,2.64,0.48,5.2-0.4,8,0.8s6,0.4,7.2-1.6,6-6.2,6-6.2-12.8,1.8-15.6,2.6c0,0-22.4,1.2-30.4-1.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-22.4,173.8s-6.45,3.5-6.85,5.9,5.25,6.1,5.25,6.1,2.75,4.6,3.35,2.2-0.95-13.8-1.75-14.2z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-22.4,173.8s-6.45,3.5-6.85,5.9,5.25,6.1,5.25,6.1,2.75,4.6,3.35,2.2-0.95-13.8-1.75-14.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-59.885,179.26s7.007,11.19,7.224-0.02c0,0,0.557-1.26-1.203-1.28-6.075-0.07-4.554-4.18-6.021,1.3z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-59.885,179.26s7.007,11.19,7.224-0.02c0,0,0.557-1.26-1.203-1.28-6.075-0.07-4.554-4.18-6.021,1.3z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-52.707,179.51s7.921,11.19,7.285-0.09c0,0,0.007-0.33-1.746-0.48-4.747-0.42-4.402-4.94-5.539,0.57z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-52.707,179.51s7.921,11.19,7.285-0.09c0,0,0.007-0.33-1.746-0.48-4.747-0.42-4.402-4.94-5.539,0.57z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-45.494,179.52s7.96,10.63,7.291,0.96c0,0,0.119-1.23-1.535-1.53-3.892-0.71-4.103-3.95-5.756,0.57z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-45.494,179.52s7.96,10.63,7.291,0.96c0,0,0.119-1.23-1.535-1.53-3.892-0.71-4.103-3.95-5.756,0.57z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFC; + } + path: "m-38.618,179.6s7.9,11.56,8.248,1.78c0,0,1.644-1.38-0.102-1.6-5.818-0.74-5.02-5.19-8.146-0.18z"; + } + stroke { + line-width: 0.5; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-38.618,179.6s7.9,11.56,8.248,1.78c0,0,1.644-1.38-0.102-1.6-5.818-0.74-5.02-5.19-8.146-0.18z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #e5e5b2; + } + path: "m-74.792,183.13-7.658-1.53c-2.6-5-4.7-11.15-4.7-11.15s6.35,1,18.85,3.8c0,0,0.876,3.32,2.348,9.11l-8.84-0.23z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #e5e5b2; + } + path: "m-9.724,178.47c-1.666-2.51-2.983-4.26-3.633-4.67-3.013-1.88,1.13-1.51,2.259-1.51l18.454,0.76s0.524,2.24,1.208,5.63c0,0-10.088-2.01-18.288-0.21z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m43.88,40.321c27.721,3.96,53.241-31.68,55.001-41.361,1.759-9.68-8.36-21.56-8.36-21.56,1.32-3.08-3.52-17.16-8.8-26.4s-21.181-8.266-38.721-9.24c-15.84-0.88-34.32,22.44-35.64,24.2s4.84,40.041,6.16,45.761-1.32,32.12-1.32,32.12c34.24-9.1,3.96-7.48,31.68-3.52z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #ea8e51; + } + path: "m8.088-33.392c-1.296,1.728,4.752,39.313,6.048,44.929s-1.296,31.536-1.296,31.536c32.672-8.88,3.888-7.344,31.104-3.456,27.217,3.888,52.273-31.104,54.001-40.609,1.728-9.504-8.208-21.168-8.208-21.168,1.296-3.024-3.456-16.848-8.64-25.92s-20.795-8.115-38.017-9.072c-15.552-0.864-33.696,22.032-34.992,23.76z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #efaa7c; + } + path: "m8.816-32.744c-1.272,1.696,4.664,38.585,5.936,44.097s-1.272,30.952-1.272,30.952c31.404-9.16,3.816-7.208,30.528-3.392,26.713,3.816,51.305-30.528,53.001-39.857,1.696-9.328-8.056-20.776-8.056-20.776,1.272-2.968-3.392-16.536-8.48-25.44s-20.41-7.965-37.313-8.904c-15.264-0.848-33.072,21.624-34.344,23.32z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f4c6a8; + } + path: "m9.544-32.096c-1.248,1.664,4.576,37.857,5.824,43.265s-1.248,30.368-1.248,30.368c29.436-9.04,3.744-7.072,29.952-3.328,26.209,3.744,50.337-29.952,52.001-39.104,1.664-9.153-7.904-20.385-7.904-20.385,1.248-2.912-3.328-16.224-8.32-24.96s-20.025-7.815-36.609-8.736c-14.976-0.832-32.448,21.216-33.696,22.88z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f9e2d3; + } + path: "m10.272-31.448c-1.224,1.632,4.488,37.129,5.712,42.433s-1.224,29.784-1.224,29.784c27.868-8.92,3.672-6.936,29.376-3.264,25.705,3.672,49.369-29.376,51.001-38.353,1.632-8.976-7.752-19.992-7.752-19.992,1.224-2.856-3.264-15.912-8.16-24.48s-19.64-7.665-35.905-8.568c-14.688-0.816-31.824,20.808-33.048,22.44z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "M44.2,36.8c25.2,3.6,48.401-28.8,50.001-37.6s-7.6-19.6-7.6-19.6c1.2-2.8-3.201-15.6-8.001-24s-19.254-7.514-35.2-8.4c-14.4-0.8-31.2,20.4-32.4,22s4.4,36.4,5.6,41.6-1.2,29.2-1.2,29.2c25.5-8.6,3.6-6.8,28.8-3.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m90.601,2.8s-27.801,7.6-39.401,6c0,0-15.8-6.6-24.6,15.2,0,0-3.6,7.2-5.6,9.2s69.601-30.4,69.601-30.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m94.401,0.6s-29.001,12.2-39.001,11.8c0,0-16.4-4.6-24.8,10,0,0-8.4,9.2-11.6,10.8,0,0-0.4,1.6,6-2.4l10.4,5.2s14.8,9.6,24.4-6.4c0,0,4-11.2,4-13.2s21.2-7.6,22.801-8c1.6-0.4,8.2-4.6,7.8-7.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #99cc32; + } + path: "m47,36.514c-6.872,0-15.245-3.865-15.245-10.114,0-6.248,8.373-12.513,15.245-12.513,6.874,0,12.446,5.065,12.446,11.313,0,6.249-5.572,11.314-12.446,11.314z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #659900; + } + path: "m43.377,19.83c-4.846,0.722-9.935,2.225-9.863,2.009,1.54-4.619,7.901-7.952,13.486-7.952,4.296,0,8.084,1.978,10.32,4.988,0,0-5.316-0.33-13.943,0.955z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m55.4,19.6s-4.4-3.2-4.4-1c0,0,3.6,4.4,4.4,1z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m45.4,27.726c-2.499,0-4.525-2.026-4.525-4.526,0-2.499,2.026-4.525,4.525-4.525,2.5,0,4.526,2.026,4.526,4.525,0,2.5-2.026,4.526-4.526,4.526z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m-58.6,14.4s-3.2-21.2-0.8-25.6c0,0,10.8-10,10.4-13.6,0,0-0.4-18-1.6-18.8s-8.8-6.8-14.8-0.4c0,0-10.4,18-9.6,24.4v2s-7.6-0.4-9.2,1.6c0,0-1.2,5.2-2.4,5.6,0,0-2.8,2.4-0.8,5.2,0,0-2,2.4-1.6,6.4l7.6,4s2,14.4,12.8,19.6c4.836,2.329,8-4.4,10-10.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-59.6,12.56s-2.88-19.08-0.72-23.04c0,0,9.72-9,9.36-12.24,0,0-0.36-16.2-1.44-16.92s-7.92-6.12-13.32-0.36c0,0-9.36,16.2-8.64,21.96v1.8s-6.84-0.36-8.28,1.44c0,0-1.08,4.68-2.16,5.04,0,0-2.52,2.16-0.72,4.68,0,0-1.8,2.16-1.44,5.76l6.84,3.6s1.8,12.96,11.52,17.64c4.352,2.095,7.2-3.96,9-9.36z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #eb955c; + } + path: "m-51.05-42.61c-1.09-0.86-8.58-6.63-14.43-0.39,0,0-10.14,17.55-9.36,23.79v1.95s-7.41-0.39-8.97,1.56c0,0-1.17,5.07-2.34,5.46,0,0-2.73,2.34-0.78,5.07,0,0-1.95,2.34-1.56,6.24l7.41,3.9s1.95,14.04,12.48,19.11c4.714,2.27,7.8-4.29,9.75-10.14,0,0-3.12-20.67-0.78-24.96,0,0,10.53-9.75,10.14-13.26,0,0-0.39-17.55-1.56-18.33z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f2b892; + } + path: "m-51.5-41.62c-0.98-0.92-8.36-6.46-14.06-0.38,0,0-9.88,17.1-9.12,23.18v1.9s-7.22-0.38-8.74,1.52c0,0-1.14,4.94-2.28,5.32,0,0-2.66,2.28-0.76,4.94,0,0-1.9,2.28-1.52,6.08l7.22,3.8s1.9,13.68,12.16,18.62c4.594,2.212,7.6-4.18,9.5-9.88,0,0-3.04-20.14-0.76-24.32,0,0,10.26-9.5,9.88-12.92,0,0-0.38-17.1-1.52-17.86z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #f8dcc8; + } + path: "m-51.95-40.63c-0.87-0.98-8.14-6.29-13.69-0.37,0,0-9.62,16.65-8.88,22.57v1.85s-7.03-0.37-8.51,1.48c0,0-1.11,4.81-2.22,5.18,0,0-2.59,2.22-0.74,4.81,0,0-1.85,2.22-1.48,5.92l7.03,3.7s1.85,13.32,11.84,18.13c4.473,2.154,7.4-4.07,9.25-9.62,0,0-2.96-19.61-0.74-23.68,0,0,9.99-9.25,9.62-12.58,0,0-0.37-16.65-1.48-17.39z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-59.6,12.46s-2.88-18.98-0.72-22.94c0,0,9.72-9,9.36-12.24,0,0-0.36-16.2-1.44-16.92-0.76-1.04-7.92-6.12-13.32-0.36,0,0-9.36,16.2-8.64,21.96v1.8s-6.84-0.36-8.28,1.44c0,0-1.08,4.68-2.16,5.04,0,0-2.52,2.16-0.72,4.68,0,0-1.8,2.16-1.44,5.76l6.84,3.6s1.8,12.96,11.52,17.64c4.352,2.095,7.2-4.06,9-9.46z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-62.7,6.2s-21.6-10.2-22.5-11c0,0,9.1,8.2,9.9,8.2s12.6,2.8,12.6,2.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-79.8,0s18.4,3.6,18.4,8c0,2.912-0.243,16.331-5.6,14.8-8.4-2.4-4.8-16.8-12.8-22.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #99cc32; + } + path: "m-71.4,3.8s8.978,1.474,10,4.2c0.6,1.6,1.263,9.908-4.2,11-4.552,0.911-6.782-9.31-5.8-15.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m14.595,46.349c-0.497-1.742,0.814-1.611,2.605-2.149,2-0.6,14.2-4.4,15-7s14,1.8,14,1.8c1.8,0.8,6.2,3.4,6.2,3.4,4.8,1.2,11.4,1.6,11.4,1.6,2.4,1,5.8,3.8,5.8,3.8,14.6,10.2,27.001,3,27.001,3,19.999-6.6,13.999-23.8,13.999-23.8-3-9,0.2-12.4,0.2-12.4,0.2-3.8,7.4,2.6,7.4,2.6,2.6,4.2,3.4,9.2,3.4,9.2,8,11.2,4.6-6.6,4.6-6.6,0.2-1-2.6-4.6-2.6-5.8s-1.8-4.6-1.8-4.6c-3-3.4-0.6-10.4-0.6-10.4,1.8-13.8-0.4-12-0.4-12-1.2-1.8-10.4,8.2-10.4,8.2-2.2,3.4-8.2,5-8.2,5-2.799,1.8-6.199,0.4-6.199,0.4-2.6-0.4-8.2,6.6-8.2,6.6,2.8-0.2,5.2,4.2,7.6,4.4s4.2-2.4,5.799-3c1.6-0.6,4.4,5.2,4.4,5.2,0.4,2.6-5.2,7.4-5.2,7.4-0.4,4.6-1.999,3-1.999,3-3-0.6-4.2,3.2-5.2,7.8s-5.2,5-5.2,5c-1.6,7.4-2.801,4.4-2.801,4.4-0.2-5.6-6.2,0.2-6.2,0.2-1.2,2-5.8-0.2-5.8-0.2-6.8-2-4.4-4-4.4-4,1.8-2.2,13,0,13,0,2.2-1.6-5.8-5.6-5.8-5.6-0.6-1.8,0.4-6.2,0.4-6.2,1.2-3.2,8-8.8,8-8.8,9.401-1.2,6.601-2.8,6.601-2.8-6.2-5.2-12.001,2.4-12.001,2.4-2.2,6.2-19.6,21.2-19.6,21.2-4.8,3.4-2.2-3.4-6.2,0s-24.6-5.6-24.6-5.6c-11.562-1.193-14.294,14.549-17.823,11.429,0,0,5.418,8.52,3.818,2.92z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m209.4-120s-25.6,8-28.4,26.8c0,0-2.4,22.8,18,40.4,0,0,0.4,6.4,2.4,9.6,0,0-1.6,4.8,17.2-2.8l27.2-8.4s6.4-2.4,11.6-11.2,20.4-27.6,16.8-52.8c0,0,1.2-11.2-4.8-11.6,0,0-8.4-1.6-15.6,6,0,0-6.8,3.2-9.2,2.8l-35.2,1.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m264.02-120.99s2.1-8.93-2.74-4.09c0,0-7.04,5.72-14.52,5.72,0,0-14.52,2.2-18.92,15.4,0,0-3.96,26.84,3.96,32.56,0,0,4.84,7.48,11.88,0.88s22.54-36.83,20.34-50.47z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #323232; + } + path: "m263.65-120.63s2.09-8.75-2.66-3.99c0,0-6.92,5.61-14.26,5.61,0,0-14.26,2.16-18.58,15.12,0,0-3.89,26.354,3.89,31.97,0,0,4.75,7.344,11.66,0.864,6.92-6.48,22.11-36.184,19.95-49.574z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #666; + } + path: "m263.27-120.27s2.08-8.56-2.58-3.9c0,0-6.78,5.51-13.99,5.51,0,0-14,2.12-18.24,14.84,0,0-3.81,25.868,3.82,31.38,0,0,4.66,7.208,11.45,0.848,6.78-6.36,21.66-35.538,19.54-48.678z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #999; + } + path: "m262.9-119.92s2.07-8.37-2.51-3.79c0,0-6.65,5.41-13.73,5.41,0,0-13.72,2.08-17.88,14.56,0,0-3.75,25.372,3.74,30.78,0,0,4.58,7.072,11.23,0.832,6.66-6.24,21.23-34.892,19.15-47.792z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m262.53-119.56s2.06-8.18-2.43-3.7c0,0-6.53,5.31-13.47,5.31,0,0-13.46,2.04-17.54,14.28,0,0-3.67,24.886,3.67,30.19,0,0,4.49,6.936,11.02,0.816,6.52-6.12,20.79-34.246,18.75-46.896z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m262.15-119.2s2.05-8-2.35-3.6c0,0-6.4,5.2-13.2,5.2,0,0-13.2,2-17.2,14,0,0-3.6,24.4,3.6,29.6,0,0,4.4,6.8,10.8,0.8s20.35-33.6,18.35-46z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #992600; + } + path: "m50.6,84s-20.4-19.2-28.4-20c0,0-34.4-4-49.2,14,0,0,17.6-20.4,45.2-14.8,0,0-21.6-4.4-34-1.2l-26.4,14-2.8,4.8s4-14.8,22.4-20.8c0,0,22.8-4.8,33.6,0,0,0-21.6-6.8-31.6-4.8,0,0-30.4-2.4-43.2,24,0,0,4-14.4,18.8-21.6,0,0,13.6-8.8,34-6,0,0,14.4,3.2,19.6,5.6s4-0.4-4.4-5.2c0,0-5.6-10-19.6-9.6,0,0-42.8,3.6-53.2,15.6,0,0,13.6-11.2,24-14,0,0,22.4-8,30.8-7.2,0,0,24.8,1,32.4-3,0,0-11.2,5-8,8.2s10,10.8,10,12,24.2,23.3,27.8,27.7l2.2,2.3z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m189,278s-15.5-36.5-28-46c0,0,26,16,29.5,34,0,0,0,10-1.5,12z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m236,285.5s-26.5-55-45-79c0,0,43.5,37.5,48.5,64l0.5,5.5-3-2.5s-0.5,9-1,12z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m292.5,237s-62.5-59.5-64-62c0,0,60.5,66,63.5,73.5,0,0-2-9,0.5-11.5z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m104,280.5s19.5-52,38.5-29.5c0,0,15,10,14.5,13,0,0-4-6.5-22-6,0,0-19-3-31,22.5z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m294.5,153s-45-28.5-52.5-30c-11.81-2.36,49.5,29,54.5,39.5,0,0,2-2.5-2-9.5z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m143.8,259.6s20.4-2,27.2-8.8l4.4,3.6,17.6-38.4,3.6,5.2s14.4-14.8,13.6-22.8,12.8,6,12.8,6-0.8-11.6,6.4-4.8c0,0-2.4-15.6,6-7.6,0,0-10.54-30.16,12-4.4,5.6,6.4,1.2-0.4,1.2-0.4s-26-48-4.4-33.6c0,0,2-22.8,0.8-27.2s-3.2-26.8-8-32,0.4-6.8,6-1.6c0,0-11.2-24,2-12,0,0-3.6-15.2-8-18,0,0-5.6-17.2,9.6-6.4,0,0-4.4-12.4-7.6-15.6,0,0-11.6-27.6-4.4-22.8l4.4,3.6s-6.8-14-0.4-9.6,6.4,4,6.4,4-21.2-33.2-0.8-15.6c0,0-8.16-13.918-11.6-20.8,0,0-18.8-20.4-4.4-14l4.8,1.6s-8.8-10-16.8-11.6,2.4-8,8.8-6,22,9.6,22,9.6,12.8,18.8,16.8,19.2c0,0-20-7.6-14,0.4,0,0,14.4,14,7.2,13.6,0,0-6,7.2-1.2,16,0,0-18.46-18.391-3.6,7.2l6.8,16.4s-24.4-24.8-13.2-2.8c0,0,17.2,23.6,19.2,24s6.4,9.2,6.4,9.2l-4.4-2,5.2,8.8s-11.2-12-5.2,1.2l5.6,14.4s-20.4-22-6.8,7.6c0,0-16.4-5.2-7.6,12,0,0-1.6,16-1.2,21.2s1.6,33.6-2.8,41.6,6,27.2,8,31.2,5.6,14.8-3.2,5.6-4.4-3.6-2.4,5.2,8,24.4,7.2,30c0,0-1.2,1.2-4.4-2.4,0,0-14.8-22.8-13.2-8.4,0,0-1.2,8-4.4,16.8,0,0-3.2,10.8-3.2,2,0,0-3.2-16.8-6-9.2s-6.4,13.6-9.2,16-8-20.4-9.2-10c0,0-12-12.4-16.8,4l-11.6,16.4s-0.4-12.4-1.6-6.4c0,0-30,6-40.4,1.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m109.4-97.2s-11.599-8-15.599-7.6,27.599-8.8,68.799,18.8c0,0,4.8,2.8,8.4,2.4,0,0,3.2,2.4,0.4,6,0,0-8.8,9.6,2.4,20.8,0,0,18.4,6.8,12.8-2,0,0,10.8,4,13.2,8s1.2,0,1.2,0l-12.4-12.4s-5.2-2-8-10.4-5.2-18.4-0.8-21.6c0,0-4,4.4-3.2,0.4s4.4-7.6,6-8,18-16.2,24.8-16.6c0,0-9.2,1.4-12.2,0.4s-29.6-12.4-35.6-13.6c0,0-16.8-6.6-4.8-4.6,0,0,35.8,3.8,54,17,0,0-7.2-8.4-25.6-15.4,0,0-22.2-12.6-57.4-7.6,0,0-17.8,3.2-25.6,5,0,0-2.599-0.6-3.199-1s-12.401-9.4-40.001-2.4c0,0-17,4.6-25.6,9.4,0,0-15.2,1.2-18.8,4.4,0,0-18.6,14.6-20.6,15.4s-13.4,8.4-14.2,8.8c0,0,24.6-6.6,27-9s19.8-5,22.2-3.6,10.8,0.8,1.2,1.4c0,0,75.6,14.8,76.4,16.8s4.8,0.8,4.8,0.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m180.8-106.4s-10.2-7.4-12.2-7.4-14.4-10.2-18.6-9.8-16.4-9.6-43.8-1.4c0,0-0.6-2,3-2.8,0,0,6.4-2.2,6.8-2.8,0,0,20.2-4.2,27.4-0.6,0,0,9.2,2.6,15.4,8.8,0,0,11.2,3.2,14.4,2.2,0,0,8.8,2.2,9.2,4,0,0,5.8,3,4,5.6,0,0,0.4,1.6-5.6,4.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m168.33-108.51c0.81,0.63,1.83,0.73,2.43,1.54,0.24,0.31-0.05,0.64-0.37,0.74-1.04,0.31-2.1-0.26-3.24,0.33-0.4,0.21-1.04,0.03-1.6-0.12-1.63-0.44-3.46-0.47-5.15,0.22-1.98-1.13-4.34-0.54-6.42-1.55-0.06-0.02-0.28,0.32-0.36,0.3-3.04-1.15-6.79-0.87-9.22-3.15-2.43-0.41-4.78-0.87-7.21-1.55-1.82-0.51-3.23-1.5-4.85-2.33-1.38-0.71-2.83-1.23-4.37-1.61-1.86-0.45-3.69-0.34-5.58-0.86-0.1-0.02-0.29,0.32-0.37,0.3-0.32-0.11-0.62-0.69-0.79-0.64-1.68,0.52-3.17-0.45-4.83-0.11-1.18-1.22-2.9-0.98-4.45-1.42-2.97-0.85-6.12,0.42-9.15-0.58,4.11-1.84,8.8-0.61,12.86-2.68,2.33-1.18,4.99-0.08,7.56-0.84,0.49-0.15,1.18-0.35,1.58,0.32,0.14-0.14,0.32-0.37,0.38-0.35,2.44,1.16,4.76,2.43,7.24,3.5,0.34,0.15,0.88-0.09,1.13,0.12,1.52,1.21,3.46,1.11,4.85,2.33,1.7-0.5,3.49-0.12,5.22-0.75,0.08-0.02,0.31,0.32,0.34,0.3,1.14-0.75,2.29-0.48,3.18-0.18,0.34,0.12,1,0.37,1.31,0.44,1.12,0.27,1.98,0.75,3.16,0.94,0.11,0.02,0.3-0.32,0.37-0.3,1.12,0.44,2.16,0.39,2.82,1.55,0.14-0.14,0.3-0.37,0.38-0.35,1.03,0.34,1.68,1.1,2.78,1.34,0.48,0.1,1.1,0.73,1.67,0.91,2.39,0.73,4.24,2.26,6.43,3.15,0.76,0.31,1.64,0.55,2.27,1.04z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m91.696-122.74c-2.518-1.72-4.886-2.83-7.328-4.62-0.181-0.13-0.541,0.04-0.743-0.08-1.007-0.61-1.895-1.19-2.877-1.89-0.539-0.38-1.36-0.37-1.868-0.63-2.544-1.29-5.173-1.85-7.68-3.04,0.682-0.64,1.804-0.39,2.4-1.2,0.195,0.28,0.433,0.56,0.786,0.37,1.678-0.9,3.528-1.05,5.204-0.96,1.704,0.09,3.424,0.39,5.199,0.67,0.307,0.04,0.506,0.56,0.829,0.66,2.228,0.66,4.617,0.14,6.736,0.98,1.591,0.63,3.161,1.45,4.4,2.72,0.252,0.26-0.073,0.57-0.353,0.76,0.388-0.11,0.661,0.1,0.772,0.41,0.084,0.24,0.084,0.54,0,0.78-0.112,0.31-0.391,0.41-0.765,0.46-1.407,0.19,0.365-1.19-0.335-0.74-1.273,0.82-0.527,2.22-1.272,3.49-0.28-0.19-0.51-0.41-0.4-0.8,0.234,0.52-0.368,0.81-0.536,1.13-0.385,0.72-1.284,2.14-2.169,1.53z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m59.198-115.39c-3.154-0.79-6.204-0.68-9.22-1.96-0.067-0.02-0.29,0.32-0.354,0.3-1.366-0.6-2.284-1.56-3.36-2.61-0.913-0.89-2.571-0.5-3.845-0.99-0.324-0.12-0.527-0.63-0.828-0.67-1.219-0.16-2.146-1.11-3.191-1.68,2.336-0.8,4.747-0.76,7.209-1.15,0.113-0.02,0.258,0.31,0.391,0.31,0.136,0,0.266-0.23,0.4-0.36,0.195,0.28,0.497,0.61,0.754,0.35,0.548-0.54,1.104-0.35,1.644-0.31,0.144,0.01,0.269,0.32,0.402,0.32,0.136,0,0.267-0.32,0.4-0.32,0.136,0,0.267,0.32,0.4,0.32,0.136,0,0.266-0.23,0.4-0.36,0.692,0.78,1.577,0.23,2.399,0.41,1.038,0.22,1.305,1.37,2.379,1.67,4.715,1.3,8.852,3.45,13.215,5.54,0.307,0.14,0.517,0.39,0.407,0.78,0.267,0,0.58-0.09,0.77,0.04,1.058,0.74,2.099,1.28,2.796,2.38,0.216,0.34-0.113,0.75-0.346,0.7-4.429-1-8.435-1.61-12.822-2.71z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m45.338-71.179c-1.592-1.219-2.176-3.25-3.304-5.042-0.214-0.34,0.06-0.654,0.377-0.743,0.56-0.159,1.103,0.319,1.512,0.521,1.745,0.862,3.28,2.104,5.277,2.243,1.99,2.234,6.25,2.619,6.257,6,0.001,0.859-1.427-0.059-1.857,0.8-2.451-1.003-4.84-0.9-7.22-2.367-0.617-0.381-0.287-0.834-1.042-1.412z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #cc7226; + } + path: "m17.8-123.76c0.135,0,7.166,0.24,7.149,0.35-0.045,0.31-7.775,1.36-8.139,1.19-0.164-0.08-7.676,2.35-7.81,2.22,0.268-0.14,8.534-3.76,8.8-3.76z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m33.2-114s-14.8,1.8-19.2,3-23,8.8-26,10.8c0,0-13.4,5.4-30.4,25.4,0,0,7.6-3.4,9.8-6.2,0,0,13.6-12.6,13.4-10,0,0,12.2-8.6,11.6-6.4,0,0,24.4-11.2,22.4-8,0,0,21.6-4.6,20.6-2.6,0,0,18.8,4.4,16,4.6,0,0-5.8,1.2,0.6,4.8,0,0-3.4,4.4-8.8,0.4s-2.4-1.8-7.4-0.8c0,0-2.6,0.8-7.2-3.2,0,0-5.6-4.6-14.4-1,0,0-30.6,12.6-32.6,13.2,0,0-3.6,2.8-6,6.4,0,0-5.8,4.4-8.8,5.8,0,0-12.8,11.6-14,13,0,0-3.4,5.2-4.2,5.6,0,0,6.4-3.8,8.4-5.8,0,0,14-10,19.4-10.8,0,0,4.4-3,5.2-4.4,0,0,14.4-9.2,18.6-9.2,0,0,9.2,5.2,11.6-1.8,0,0,5.8-1.8,11.4-0.6,0,0,3.2-2.6,2.4-4.8,0,0,1.6-1.8,2.6,2,0,0,3.4,3.6,8.2,1.6,0,0,4-0.2,2,2.2,0,0-4.4,3.8-16.2,4,0,0-12.4,0.6-28.8,8.2,0,0-29.8,10.4-39,20.8,0,0-6.4,8.8-11.8,10,0,0-5.8,0.8-11.8,8.2,0,0,9.8-5.8,18.8-5.8,0,0,4-2.4,0.2,1.2,0,0-3.6,7.6-2,13,0,0-0.6,5.2-1.4,6.8,0,0-7.8,12.8-7.8,15.2s1.2,12.2,1.6,12.8-1-1.6,2.8,0.8,6.6,4,7.4,6.8-2-5.4-2.2-7.2-4.4-9-3.6-11.4c0,0,1,1,1.8,2.4,0,0-0.6-0.6,0-4.2,0,0,0.8-5.2,2.2-8.4s3.4-7,3.8-7.8,0.4-6.6,1.8-4l3.4,2.6s-2.8-2.6-0.6-4.8c0,0-1-5.6,0.8-8.2,0,0,7-8.4,8.6-9.4s0.2-0.6,0.2-0.6,6-4.2,0.2-2.6c0,0-4,1.6-7,1.6,0,0-7.6,2-3.6-2.2s14-9.6,17.8-9.4l0.8,1.6,11.2-2.4-1.2,0.8s-0.2-0.2,4-0.6,10,1,11.4-0.8,4.8-2.8,4.4-1.4-0.6,3.4-0.6,3.4,5-5.8,4.4-3.6-8.8,7.4-10.2,13.6l10.4-8.2,3.6-3s3.6,2.2,3.8,0.6,4.8-7.4,6-7.2,3.2-2.6,3,0,7.4,8,7.4,8,3.2-1.8,4.6-0.4,5.6-19.8,5.6-19.8l25-10.6,43.6-3.4-16.999-6.8-61.001-11.4z"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #4c0000; + } + path: "m51.4,85s-15-16.8-23.4-19.4c0,0-13.4-6.8-38,1"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #4c0000; + } + path: "m24.8,64.2s-25.2-8-40.6-3.8c0,0-18.4,2-26.8,15.8"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #4c0000; + } + path: "m21.2,63s-17-7.2-31.8-9.4c0,0-16.6-2.6-33.2,4.6,0,0-12.2,6-17.6,16.2"; + } + stroke { + line-width: 2; + child: color { + bounds: -250 -250 700 700; + color: #4c0000; + } + path: "m22.2,63.4s-15.4-11-16.4-12.4c0,0-7-11-20-11.4,0,0-21.4,0.8-38.6,8.8"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "M20.895,54.407c1.542,1.463,28.505,30.393,28.505,30.393,35.2,36.6,7.2,2.4,7.2,2.4-7.6-4.8-16.8-23.6-16.8-23.6-1.2-2.8,14,7.2,14,7.2,4,0.8,17.6,20,17.6,20-6.8-2.4-2,4.8-2,4.8,2.8,2,23.201,17.6,23.201,17.6,3.6,4,7.599,5.6,7.599,5.6,14-5.2,7.6,8,7.6,8,2.4,6.8,8-4.8,8-4.8,11.2-16.8-5.2-14.4-5.2-14.4-30,2.8-36.8-13.2-36.8-13.2-2.4-2.4,6.4,0,6.4,0,8.401,2-7.2-12.4-7.2-12.4,2.4,0,11.6,6.8,11.6,6.8,10.401,9.2,12.401,7.2,12.401,7.2,17.999-8.8,28.399-1.2,28.399-1.2,2,1.6-3.6,8.4-2,13.6s6.4,17.6,6.4,17.6c-2.4,1.6-2,12.4-2,12.4,16.8,23.2,7.2,21.2,7.2,21.2-15.6-0.4-0.8,7.2-0.8,7.2,3.2,2,12,9.2,12,9.2-2.8-1.2-4.4,4-4.4,4,4.8,4,2,8.8,2,8.8-6,1.2-7.2,5.2-7.2,5.2,6.8,8-3.2,8.4-3.2,8.4,3.6,4.4-1.2,16.4-1.2,16.4-4.8,0-11.2,5.6-11.2,5.6,2.4,4.8-8,10.4-8,10.4-8.4,1.6-5.6,8.4-5.6,8.4-7.999,6-10.399,22-10.399,22-0.8,10.4-3.2,13.6,2,11.6,5.199-2,4.399-14.4,4.399-14.4-4.799-15.6,38-31.6,38-31.6,4-1.6,4.8-6.8,4.8-6.8,2,0.4,10.8,8,10.8,8,7.6,11.2,8,2,8,2,1.2-3.6-0.4-9.6-0.4-9.6,6-21.6-8-28-8-28-10-33.6,4-25.2,4-25.2,2.8,5.6,13.6,10.8,13.6,10.8l3.6-2.4c-1.6-4.8,6.8-10.8,6.8-10.8,2.8,6.4,8.8-1.6,8.8-1.6,3.6-24.4,16-10,16-10,4,1.2,5.2-5.6,5.2-5.6,3.6-10.4,0-24,0-24,3.6-0.4,13.2,5.6,13.2,5.6,2.8-3.6-6.4-20.4-2.4-18s8.4,4,8.4,4c0.8-2-9.2-14.4-9.2-14.4-4.4-2.8-9.6-23.2-9.6-23.2,7.2,3.6-2.8-11.6-2.8-11.6,0-3.2,6-14.4,6-14.4-0.8-6.8,0-6.4,0-6.4,2.8,1.2,10.8,2.8,4-3.6s0.8-11.2,0.8-11.2c4.4-2.8-9.2-2.4-9.2-2.4-5.2-4.4-4.8-8.4-4.8-8.4,8,2-6.4-12.4-8.8-16s7.2-8.8,7.2-8.8c13.2-3.6,1.6-6.8,1.6-6.8-19.6,0.4-8.8-10.4-8.8-10.4,6,0.4,4.4-2,4.4-2-5.2-1.2-14.8-7.6-14.8-7.6-4-3.6-0.4-2.8-0.4-2.8,16.8,1.2-12-10-12-10,8,0-10-10.4-10-10.4-2-1.6-5.2-9.2-5.2-9.2-6-5.2-10.8-12-10.8-12-0.4-4.4-5.2-9.2-5.2-9.2-11.6-13.6-17.2-13.2-17.2-13.2-14.8-3.6-20-2.8-20-2.8l-52.8,4.4c-26.4,12.8-18.6,33.8-18.6,33.8,6.4,8.4,15.6,4.6,15.6,4.6,4.6-6.2,16.2-4,16.2-4,20.401,3.2,17.801-0.4,17.801-0.4-2.4-4.6-18.601-10.8-18.801-11.4s-9-4-9-4c-3-1.2-7.4-10.4-7.4-10.4-3.2-3.4,12.6,2.4,12.6,2.4-1.2,1,6.2,5,6.2,5,17.401-1,28.001,9.8,28.001,9.8,10.799,16.6,10.999,8.4,10.999,8.4,2.8-9.4-9-30.6-9-30.6,0.4-2,8.6,4.6,8.6,4.6,1.4-2,2.2,3.8,2.2,3.8,0.2,2.4,4,10.4,4,10.4,2.8,13,6.4,5.6,6.4,5.6l4.6,9.4c1.4,2.6-4.6,10.2-4.6,10.2-0.2,2.8,0.6,2.6-5,10.2s-2.2,12-2.2,12c-1.4,6.6,7.4,6.2,7.4,6.2,2.6,2.2,6,2.2,6,2.2,1.8,2,4.2,1.4,4.2,1.4,1.6-3.8,7.8-1.8,7.8-1.8,1.4-2.4,9.6-2.8,9.6-2.8,1-2.6,1.4-4.2,4.8-4.8s-21.2-43.6-21.2-43.6c6.4-0.8-1.8-13.2-1.8-13.2-2.2-6.6,9.2,8,11.4,9.4s3.2,3.6,1.6,3.4-3.4,2-2,2.2,14.4,15.2,17.8,25.4,9.4,14.2,15.6,20.2,5.4,30.2,5.4,30.2c-0.4,8.8,5.6,19.4,5.6,19.4,2,3.8-2.2,22-2.2,22-2,2.2-0.6,3-0.6,3,1,1.2,7.8,14.4,7.8,14.4-1.8-0.2,1.8,3.4,1.8,3.4,5.2,6-1.2,3-1.2,3-6-1.6,1,8.2,1,8.2,1.2,1.8-7.8-2.8-7.8-2.8-9.2-0.6,2.4,6.6,2.4,6.6,8.6,7.2-2.8,2.8-2.8,2.8-4.6-1.8-1.4,5-1.4,5,3.2,1.6,20.4,8.6,20.4,8.6,0.4,3.8-2.6,8.8-2.6,8.8,0.4,4-1.8,7.4-1.8,7.4-1.2,8.2-1.8,9-1.8,9-4.2,0.2-11.6,14-11.6,14-1.8,2.6-12,14.6-12,14.6-2,7-20-0.2-20-0.2-6.6,3.4-4.6,0-4.6,0-0.4-2.2,4.4-8.2,4.4-8.2,7-2.6,4.4-13.4,4.4-13.4,4-1.4-7.2-4.2-7-5.4s6-2.6,6-2.6c8-2,3.6-4.4,3.6-4.4-0.6-4,2.4-9.6,2.4-9.6,11.6-0.8,0-17,0-17-10.8-7.6-11.8-13.4-11.8-13.4,12.6-8.2,4.4-20.6,4.6-24.2s1.4-25.2,1.4-25.2c-2-6.2-5-19.8-5-19.8,2.2-5.2,9.6-17.8,9.6-17.8,2.8-4.2,11.6-9,9.4-12s-10-1.2-10-1.2c-7.8-1.4-7.2,3.8-7.2,3.8-1.6,1-2.4,6-2.4,6-0.72,7.933-9.6,14.2-9.6,14.2-11.2,6.2-2,10.2-2,10.2,6,6.6-3.8,6.8-3.8,6.8-11-1.8-2.8,8.4-2.8,8.4,10.8,12.8,7.8,15.6,7.8,15.6-10.2,1,2.4,10.2,2.4,10.2s-0.8-2-0.6-0.2,3.2,6,4,8-3.2,2.2-3.2,2.2c0.6,9.6-14.8,5.4-14.8,5.4l-1.6,0.2c-1.6,0.2-12.8-0.6-18.6-2.8s-12.599-2.2-12.599-2.2-4,1.8-11.601,1.6c-7.6-0.2-15.6,2.6-15.6,2.6-4.4-0.4,4.2-4.8,4.4-4.6s5.8-5.4-2.2-4.8c-21.797,1.635-32.6-8.6-32.6-8.6-2-1.4-4.6-4.2-4.6-4.2-10-2,1.4,12.4,1.4,12.4,1.2,1.4-0.2,2.4-0.2,2.4-0.8-1.6-8.6-7-8.6-7-2.811-0.973-4.174-2.307-6.505-4.793z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #4c0000; + } + path: "m-3,42.8s11.6,5.6,14.2,8.4,16.6,14.2,16.6,14.2-5.4-2-8-3.8-13.4-10-13.4-10-3.8-6-9.4-8.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #99cc32; + } + path: "M-61.009,11.603c0.337-0.148-0.187-2.86-0.391-3.403-1.022-2.726-10-4.2-10-4.2-0.227,1.365-0.282,2.961-0.176,4.599,0,0,4.868,5.519,10.567,3.004z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #659900; + } + path: "M-61.009,11.403c-0.449,0.158-0.015-2.734-0.191-3.203-1.022-2.726-10.2-4.3-10.2-4.3-0.227,1.365-0.282,2.961-0.176,4.599,0,0,4.268,5.119,10.567,2.904z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-65.4,11.546c-0.625,0-1.131-1.14-1.131-2.546,0-1.405,0.506-2.545,1.131-2.545s1.132,1.14,1.132,2.545c0,1.406-0.507,2.546-1.132,2.546z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "M-65.4,9z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-111,109.6s-5.6,10,19.2,4c0,0,14-1.2,16.4-3.6,1.2,0.8,9.566,3.73,12.4,4.4,6.8,1.6,15.2-8.4,15.2-8.4s4.6-10.5,7.4-10.5-0.4,1.6-0.4,1.6-6.6,10.1-6.2,11.7c0,0-5.2,20-21.2,20.8,0,0-16.15,0.95-14.8,6.8,0,0,8.8-2.4,11.2,0,0,0,10.8-0.4,2.8,6l-6.8,11.6s0.14,3.92-10,0.4c-9.8-3.4-20.1-16.3-20.1-16.3s-15.95-14.55-5.1-28.5z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #e59999; + } + path: "m-112.2,113.6s-2,9.6,34.8-0.8l6.8,0.8c2.4,0.8,14.4,3.6,16.4,2.4,0,0-7.2,13.6-18.8,12,0,0-13.2,1.6-12.8,6.4,0,0,4,7.2,8.8,9.6,0,0,2.8,2.4,2.4,5.6s-3.2,4.8-5.2,5.6-5.2-2.4-6.8-2.4-10-6.4-14.4-11.2-12.8-16.8-12.4-19.6,1.2-8.4,1.2-8.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #b26565; + } + path: "m-109,131.05c2.6,3.95,5.8,8.15,8,10.55,4.4,4.8,12.8,11.2,14.4,11.2s4.8,3.2,6.8,2.4,4.8-2.4,5.2-5.6-2.4-5.6-2.4-5.6c-3.066-1.53-5.806-5.02-7.385-7.35,0,0,0.185,2.55-5.015,1.75s-10.4-3.6-12-6.8-4-5.6-2.4-2,4,7.2,5.6,7.6,1.2,1.6-1.2,1.2-5.2-0.8-9.6-6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #992600; + } + path: "m-111.6,110s1.8-13.6,3-17.6c0,0-0.8-6.8,1.6-11s4.4-10.4,7.4-15.8,3.2-9.4,7.2-11,10-10.2,12.8-11.2,2.6-0.2,2.6-0.2,6.8-14.8,20.4-10.8c0,0-16.2-2.8-0.4-12.2,0,0-4.8,1.1-1.5-5.9,2.201-4.668,1.7,2.1-9.3,13.9,0,0-5,8.6-10.2,11.6s-17.2,10-18.4,13.8-4.4,9.6-6.4,11.2-4.8,5.8-5.2,9.2c0,0-1.2,4-2.6,5.2s-1.6,4.4-1.6,6.4-2,4.8-1.8,7.2c0,0,0.8,19,0.4,21l2-3.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-120.2,114.6s-2-1.4-6.4,4.6c0,0,7.3,33,7.3,34.4,0,0,1.1-2.1-0.2-9.3s-2.2-19.9-2.2-19.9l1.5-9.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #992600; + } + path: "m-98.6,54s-17.6,3.2-17.2,32.4l-0.8,24.8s-1.2-25.6-2.4-27.2,2.8-12.8-0.4-6.8c0,0-14,14-6,35.2,0,0,1.5,3.3-1.5-1.3,0,0-4.6-12.6-3.5-19,0,0,0.2-2.2,2.1-5,0,0,8.6-11.7,11.3-14,0,0,1.8-14.4,17.2-19.6,0,0,5.7-2.3,1.2,0.5z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m40.8-12.2c0.66-0.354,0.651-1.324,1.231-1.497,1.149-0.344,1.313-1.411,1.831-2.195,0.873-1.319,1.066-2.852,1.648-4.343,0.272-0.7,0.299-1.655-0.014-2.315-1.174-2.481-1.876-4.93-3.318-7.356-0.268-0.45-0.53-1.244-0.731-1.842-0.463-1.384-1.72-2.375-2.58-3.695-0.288-0.441,0.237-1.366-0.479-1.45-0.897-0.105-2.346-0.685-2.579,0.341-0.588,2.587,0.423,5.11,1.391,7.552-0.782,0.692-0.448,1.613-0.296,2.38,0.71,3.606-0.488,6.958-1.249,10.432-0.023,0.104,0.319,0.302,0.291,0.364-1.222,2.686-2.674,5.131-4.493,7.512-0.758,0.992-1.63,1.908-2.127,2.971-0.368,0.787-0.776,1.753-0.526,2.741-3.435,2.78-5.685,6.625-8.296,10.471-0.462,0.68-0.171,1.889,0.38,2.158,0.813,0.398,1.769-0.626,2.239-1.472,0.389-0.698,0.742-1.348,1.233-1.991,0.133-0.175-0.046-0.594,0.089-0.715,2.633-2.347,4.302-5.283,6.755-7.651,1.95-0.329,3.487-1.327,5.235-2.34,0.308-0.179,0.832,0.07,1.122-0.125,1.753-1.177,1.751-3.213,1.857-5.123,0.05-0.884,0.246-2.201,1.386-2.812z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m31.959-16.666c0.124-0.077-0.031-0.5,0.078-0.716,0.162-0.324,0.565-0.512,0.727-0.836,0.109-0.216-0.054-0.596,0.082-0.738,2.333-2.447,2.59-5.471,1.554-8.444,1.024-0.62,1.085-1.882,0.66-2.729-0.853-1.7-1.046-3.626-2.021-5.169-0.802-1.269-2.38-2.513-3.751-1.21-0.421,0.4-0.742,1.187-0.464,1.899,0.064,0.163,0.349,0.309,0.322,0.391-0.107,0.324-0.653,0.548-0.659,0.82-0.03,1.496-0.984,3.007-0.354,4.336,0.772,1.629,1.591,3.486,2.267,5.262-1.234,2.116-0.201,4.565-1.954,6.442-0.136,0.146-0.127,0.532-0.005,0.734,0.292,0.486,0.698,0.892,1.184,1.184,0.202,0.121,0.55,0.123,0.75-0.001,0.578-0.362,0.976-0.849,1.584-1.225z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m94.771-26.977c1.389,1.792,1.679,4.587-0.37,5.977,0.55,3.309,3.901,1.33,5.999,0.8-0.11-0.388,0.12-0.732,0.4-0.737,1.06-0.015,1.74-1.047,2.8-0.863,0.44-1.557,2.07-2.259,2.72-3.639,1.72-3.695,1.13-7.968-1.45-11.214-0.2-0.254,0.01-0.771-0.11-1.133-0.76-2.211-2.82-2.526-4.76-3.214-1.176-3.875-1.837-7.906-3.599-11.6-1.614-0.25-2.312-1.989-3.649-2.709-1.333-0.719-1.901,0.86-1.86,1.906,0.007,0.205,0.459,0.429,0.289,0.794-0.076,0.164-0.336,0.275-0.336,0.409,0.001,0.135,0.222,0.266,0.356,0.4-0.918,0.82-2.341,1.297-2.636,2.442-0.954,3.71,1.619,6.835,3.287,10.036,0.591,1.135-0.145,2.406-0.905,3.614-0.438,0.695-0.33,1.822-0.054,2.678,0.752,2.331,2.343,4.07,3.878,6.053z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m57.611-8.591c-1.487,1.851-4.899,4.42-1.982,6.348,0.194,0.129,0.564,0.133,0.737-0.001,2.021-1.565,4.024-2.468,6.46-3.05,0.124-0.029,0.398,0.438,0.767,0.277,1.613-0.703,3.623-0.645,4.807-1.983,3.767,0.224,7.332-0.892,10.723-2.2,1.161-0.448,2.431-1.007,3.632-1.509,1.376-0.576,2.58-1.504,3.692-2.645,0.133-0.136,0.487-0.046,0.754-0.046-0.04-0.863,0.922-0.99,1.169-1.612,0.092-0.232-0.058-0.628,0.075-0.73,2.138-1.63,3.058-3.648,1.889-6.025-0.285-0.578-0.534-1.196-1.1-1.672-1.085-0.911-2.187-0.057-3.234-0.361-0.159,0.628-0.888,0.456-1.274,0.654-0.859,0.439-2.192-0.146-3.051,0.292-1.362,0.695-2.603,0.864-4.025,1.241-0.312,0.082-1.09-0.014-1.25,0.613-0.134-0.134-0.282-0.368-0.388-0.346-1.908,0.396-3.168,0.61-4.469,2.302-0.103,0.133-0.545-0.046-0.704,0.089-0.957,0.808-1.362,2.042-2.463,2.714-0.201,0.123-0.553-0.045-0.747,0.084-0.646,0.431-1.013,1.072-1.655,1.519-0.329,0.229-0.729-0.096-0.697-0.352,0.245-1.947,0.898-3.734,0.323-5.61,2.077-2.52,4.594-4.469,6.4-7.2,0.015-2.166,0.707-4.312,0.594-6.389-0.01-0.193-0.298-0.926-0.424-1.273-0.312-0.854,0.594-1.92-0.25-2.644-1.404-1.203-2.696-0.327-3.52,1.106-1.838,0.39-3.904,1.083-5.482-0.151-1.007-0.787-1.585-1.693-2.384-2.749-0.985-1.302-0.65-2.738-0.58-4.302,0.006-0.128-0.309-0.264-0.309-0.398,0.001-0.135,0.221-0.266,0.355-0.4-0.706-0.626-0.981-1.684-2-2,0.305-1.092-0.371-1.976-1.242-2.278-1.995-0.691-3.672,1.221-5.564,1.294-0.514,0.019-0.981-1.019-1.63-1.344-0.432-0.216-1.136-0.249-1.498,0.017-0.688,0.504-1.277,0.618-2.035,0.823-1.617,0.436-2.895,1.53-4.375,2.385-1.485,0.857-2.44,2.294-3.52,3.614-0.941,1.152-1.077,3.566,0.343,4.066,1.843,0.65,3.147-2.053,5.113-1.727,0.312,0.051,0.518,0.362,0.408,0.75,0.389,0.109,0.607-0.12,0.8-0.4,0.858,1.019,2.022,1.356,2.96,2.229,0.97,0.904,2.716,0.486,3.731,1.483,1.529,1.502,0.97,4.183,2.909,5.488-0.586,1.313-1.193,2.59-1.528,4.017-0.282,1.206,0.712,2.403,1.923,2.312,1.258-0.094,1.52-0.853,2.005-1.929,0.267,0.267,0.736,0.564,0.695,0.78-0.457,2.387-1.484,4.38-1.942,6.811-0.059,0.317-0.364,0.519-0.753,0.409-0.468,4.149-4.52,6.543-7.065,9.708-0.403,0.502-0.407,1.751,0.002,2.154,1.403,1.387,3.363-0.159,5.063-0.662,0.213-1.206,1.072-2.148,2.404-2.092,0.256,0.01,0.491-0.532,0.815-0.662,0.348-0.138,0.85,0.086,1.136-0.112,1.729-1.195,3.137-2.301,4.875-3.49,0.192-0.131,0.536,0.028,0.752-0.08,0.325-0.162,0.512-0.549,0.835-0.734,0.348-0.2,0.59,0.09,0.783,0.37-0.646,0.349-0.65,1.306-1.232,1.508-0.775,0.268-1.336,0.781-2.01,1.228-0.292,0.193-0.951-0.055-1.055,0.124-0.598,1.028-1.782,1.466-2.492,2.349z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m2.2-58s-9.238-2.872-20.4,22.8c0,0-2.4,5.2-4.8,7.2s-13.6,5.6-15.6,9.6l-10.4,16s14.8-16,18-18.4c0,0,8-8.4,4.8-1.6,0,0-14,10.8-12.8,20,0,0-5.6,14.4-6.4,16.4,0,0,16-32,18.4-33.2s3.6-1.2,2.4,2.4-1.6,20-4.4,22c0,0,8-20.4,7.2-23.6,0,0,3.2-3.6,5.6,1.6l-1.2,16,4.4,12s-2.4-11.2-0.8-26.8c0,0-2-10.4,2-4.8s13.6,11.6,13.6,16.4c0,0-5.2-17.6-14.4-22.4l-4,6-1.2-2s-3.6-0.8,0.8-7.6,4-7.6,4-7.6,6.4,7.2,8,7.2c0,0,13.2-7.6,14.4,16.8,0,0,6.8-14.4-2.4-21.2,0,0-14.8-2-13.6-7.2l7.2-12.4c3.6-5.2,2-2.4,2-2.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-17.8-41.6-16,5.2-7.2,9.6s17.2-10,21.2-11.2,2-3.6,2-3.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-57.8-35.2s-2,1.2-2.4,4-2.8,3.2-2,6,2.8,5.2,2.8,1.2,1.6-6,2.4-7.2,2.4-5.6-0.8-4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-66.6,26s-8.4-4-11.6-7.6-2.748,1.566-7.6,1.2c-5.847-0.441-4.8-16.4-4.8-16.4l-4,7.6s-1.2,14.4,6.8,12c3.907-1.172,5.2,0.4,3.6,1.2s5.6,1.2,2.8,2.8,11.6-3.6,9.2,6.8l5.6-7.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-79.2,40.4s-15.4,4.4-19-5.2c0,0-4.8,2.4-2.6,5.4s3.4,3.4,3.4,3.4,5.4,1.2,4.8,2-3,4.2-3,4.2,10.2-6,16.4-9.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m149.2,118.6c-0.43,2.14-2.1,2.94-4,3.6-1.92-0.96-4.51-4.06-6.4-2-0.47-0.48-1.25-0.54-1.6-1.2-0.46-0.9-0.19-1.94-0.53-2.74-0.55-1.28-1.25-2.64-1.07-4.06,1.81-0.71,2.4-2.62,1.93-4.38-0.07-0.26-0.5-0.45-0.3-0.8,0.19-0.33,0.5-0.55,0.77-0.82-0.13,0.14-0.28,0.37-0.39,0.35-0.61-0.11-0.49-0.75-0.36-1.13,0.59-1.75,2.6-2.01,3.95-0.82,0.26-0.56,0.77-0.37,1.2-0.4-0.05-0.58,0.36-1.11,0.56-1.53,0.52-1.09,2.14,0.01,2.94-0.6,1.08-0.83,2.14-1.52,3.22-0.92,1.81,1.01,3.52,2.22,4.72,3.97,0.57,0.83,0.81,2.11,0.75,3.07-0.04,0.65-1.42,0.29-1.76,1.22-0.65,1.75,1.19,2.27,1.94,3.61,0.2,0.35-0.06,0.65-0.38,0.75-0.41,0.13-1.19-0.06-1.06,0.39,0.98,3.19-1.78,3.87-4.13,4.44z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m139.6,138.2c-0.01-1.74-1.61-3.49-0.4-5.2,0.14,0.14,0.27,0.36,0.4,0.36,0.14,0,0.27-0.22,0.4-0.36,1.5,2.22,5.15,3.14,5.01,5.99-0.03,0.45-1.11,1.37-0.21,2.01-1.81,1.35-1.87,3.72-2.8,5.6-1.24-0.28-2.45-0.65-3.6-1.2,0.35-1.48,0.24-3.17,1.06-4.49,0.43-0.7,0.14-1.78,0.14-2.71z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-26.6,129.2s-16.858,10.14-2.8-5.2c8.8-9.6,18.8-15.2,18.8-15.2s10.4-4.4,14-5.6,18.8-6.4,22-6.8,12.8-4.4,19.6-0.4,14.8,8.4,14.8,8.4-16.4-8.4-20-6-10.8,2-16.8,5.2c0,0-14.8,4.4-18,6.4s-13.6,13.6-15.2,12.8,0.4-1.2,1.6-4-0.8-4.4-8.8,2-9.2,8.4-9.2,8.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-19.195,123.23s1.41-13.04,9.888-11.37c0,0,8.226-4.17,10.948-6.14,0,0,8.139-1.7,9.449-2.32,18.479-8.698,33.198-4.179,33.745-5.299,0.546-1.119,20.171,5.999,23.78,10.079,0.391,0.45-10.231-5.59-19.929-7.48-8.273-1.617-29.875,0.24-40.781,5.78-2.973,1.51-11.918,7.29-14.449,7.18s-12.651,9.57-12.651,9.57z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-23,148.8s-15.2-2.4,1.6-4c0,0,18-2,22-7.2,0,0,13.6-9.2,16.4-9.6s32.8-7.6,33.2-10,6-2.4,7.6-1.6,0.8,2-2,2.8-34,17.2-40.4,18.4-18,8.8-22.8,10-15.6,1.2-15.6,1.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-3.48,141.4s-8.582-0.83,0.019-1.64c0,0,8.816-3.43,10.864-6.09,0,0,6.964-4.71,8.397-4.92,1.434-0.2,15.394-3.89,15.599-5.12s34.271-13.81,38.691-10.62c2.911,2.1-6.99,0.43-16.624,4.84-1.355,0.62-35.208,15.2-38.485,15.82-3.277,0.61-9.216,4.5-11.674,5.12-2.457,0.61-6.787,2.61-6.787,2.61z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-11.4,143.6s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-18.6,145.2s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-29,146.8s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-36.6,147.6s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m1.8,108,3.2,1.6c-1.2,1.6-4.4,1.2-4.4,1.2l1.2-2.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-8.2,113.6s6.506-2.14,4,1.2c-1.2,1.6-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-19.4,118.4s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-27,124.4s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-33.8,129.2s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m5.282,135.6s6.921-0.53,5.324,1.6c-1.597,2.12-4.792,1.06-4.792,1.06l-0.532-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m15.682,130.8s6.921-0.53,5.324,1.6c-1.597,2.12-4.792,1.06-4.792,1.06l-0.532-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m26.482,126.4s6.921-0.53,5.324,1.6c-1.597,2.12-4.792,1.06-4.792,1.06l-0.532-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m36.882,121.6s6.921-0.53,5.324,1.6c-1.597,2.12-4.792,1.06-4.792,1.06l-0.532-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m9.282,103.6s6.921-0.53,5.324,1.6c-1.597,2.12-5.592,1.86-5.592,1.86l0.268-3.46z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m19.282,100.4s6.921-0.534,5.324,1.6c-1.597,2.12-5.992,1.86-5.992,1.86l0.668-3.46z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-3.4,140.4s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #992600; + } + path: "m-76.6,41.2s-4.4,8.8-4.8,12c0,0,0.8-8.8,2-10.8s2.8-1.2,2.8-1.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #992600; + } + path: "m-95,55.2s-3.2,14.4-2.8,17.2c0,0-1.2-11.6-0.8-12.8s3.6-4.4,3.6-4.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-74.2-19.4-0.2,3.2-2.2,0.2s14.2,12.6,14.8,20.2c0,0,0.8-8.2-12.4-23.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-70.216-18.135c-0.431-0.416-0.212-1.161-0.62-1.421-0.809-0.516,1.298-0.573,1.07-1.289-0.383-1.206-0.196-1.227-0.318-2.503-0.057-0.598,0.531-2.138,0.916-2.578,1.446-1.652,0.122-4.584,1.762-6.135,0.304-0.289,0.68-0.841,0.965-1.259,0.659-0.963,1.843-1.451,2.793-2.279,0.318-0.276,0.117-1.103,0.686-1.011,0.714,0.115,1.955-0.015,1.91,0.826-0.113,2.12-1.442,3.84-2.722,5.508,0.451,0.704-0.007,1.339-0.291,1.896-1.335,2.62-1.146,5.461-1.32,8.301-0.005,0.085-0.312,0.163-0.304,0.216,0.353,2.335,0.937,4.534,1.816,6.763,0.366,0.93,0.837,1.825,0.987,2.752,0.111,0.686,0.214,1.519-0.194,2.224,2.035,2.89,0.726,5.541,1.895,9.072,0.207,0.625,1.899,2.539,1.436,2.378-2.513-0.871-2.625-1.269-2.802-2.022-0.146-0.623-0.476-2-0.713-2.602-0.064-0.164-0.235-2.048-0.313-2.17-1.513-2.382-0.155-2.206-1.525-4.564-1.428-0.68-2.394-1.784-3.517-2.946-0.198-0.204,0.945-0.928,0.764-1.141-1.092-1.289-2.245-2.056-1.909-3.549,0.155-0.69,0.292-1.747-0.452-2.467z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-73.8-16.4s0.4,6.8,2.8,8.4,1.2,0.8-2-0.4-2-2-2-2-2.8,0.4-0.4,2.4,6,4.4,4.4,4.4-9.2-4-9.2-6.8-1-6.9-1-6.9,1.1-0.8,5.9-0.7c0,0,1.4,0.7,1.5,1.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-74.6,2.2s-8.52-2.791-27,0.6c0,0,9.031-2.078,27.8,0.2,10.3,1.25-0.8-0.8-0.8-0.8z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-74.6,2.2s-8.52-2.791-27,0.6c0,0,9.031-2.078,27.8,0.2,10.3,1.25-0.8-0.8-0.8-0.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-72.502,2.129s-8.246-3.518-26.951-1.737c0,0,9.178-1.289,27.679,2.603,10.154,2.136-0.728-0.866-0.728-0.866z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-72.502,2.129s-8.246-3.518-26.951-1.737c0,0,9.178-1.289,27.679,2.603,10.154,2.136-0.728-0.866-0.728-0.866z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-70.714,2.222s-7.962-4.121-26.747-3.736c0,0,9.248-0.604,27.409,4.654,9.966,2.885-0.662-0.918-0.662-0.918z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-70.714,2.222s-7.962-4.121-26.747-3.736c0,0,9.248-0.604,27.409,4.654,9.966,2.885-0.662-0.918-0.662-0.918z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-69.444,2.445s-6.824-4.307-23.698-5.405c0,0,8.339,0.17,24.22,6.279,8.716,3.353-0.522-0.874-0.522-0.874z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-69.444,2.445s-6.824-4.307-23.698-5.405c0,0,8.339,0.17,24.22,6.279,8.716,3.353-0.522-0.874-0.522-0.874z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m45.84,12.961s-0.93,0.644-0.716-0.537c0.215-1.181,28.423-14.351,32.037-14.101,0,0-30.248,13.206-31.321,14.638z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m45.84,12.961s-0.93,0.644-0.716-0.537c0.215-1.181,28.423-14.351,32.037-14.101,0,0-30.248,13.206-31.321,14.638z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m42.446,13.6s-0.876,0.715-0.755-0.479,27.208-16.539,30.83-16.573c0,0-29.117,15.541-30.075,17.052z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m42.446,13.6s-0.876,0.715-0.755-0.479,27.208-16.539,30.83-16.573c0,0-29.117,15.541-30.075,17.052z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m39.16,14.975s-0.828,0.772-0.786-0.428c0.042-1.199,19.859-16.696,29.671-18.57,0,0-18.03,8.127-28.885,18.998z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m39.16,14.975s-0.828,0.772-0.786-0.428c0.042-1.199,19.859-16.696,29.671-18.57,0,0-18.03,8.127-28.885,18.998z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m36.284,16.838s-0.745,0.694-0.707-0.385c0.038-1.08,17.872-15.027,26.703-16.713,0,0-16.226,7.314-25.996,17.098z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m36.284,16.838s-0.745,0.694-0.707-0.385c0.038-1.08,17.872-15.027,26.703-16.713,0,0-16.226,7.314-25.996,17.098z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m4.6,164.8s-15.2-2.4,1.6-4c0,0,18-2,22-7.2,0,0,13.6-9.2,16.4-9.6s19.2-4,19.6-6.4,6.4-4.8,8-4,1.6,10-1.2,10.8-21.6,8-28,9.2-18,8.8-22.8,10-15.6,1.2-15.6,1.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m77.6,127.4s-3,1.6-4.2,4.2c0,0-6.4,10.6-20.6,13.8,0,0-23,9-30.8,11,0,0-13.4,5-20.8,4.2,0,0-7,0.2-0.8,1.8,0,0,20.2-2,23.6-3.8,0,0,15.6-5.2,18.6-7.8s21.2-7.6,23.4-9.6,12-10.4,11.6-13.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m18.882,158.91s5.229-0.23,4.076,1.32-3.601,0.68-3.601,0.68l-0.475-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m11.68,160.26s5.228-0.22,4.076,1.33c-1.153,1.55-3.601,0.67-3.601,0.67l-0.475-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m1.251,161.51s5.229-0.23,4.076,1.32-3.601,0.68-3.601,0.68l-0.475-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-6.383,162.06s5.229-0.23,4.076,1.32-3.601,0.67-3.601,0.67l-0.475-1.99z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m35.415,151.51s6.96-0.3,5.425,1.76c-1.534,2.07-4.793,0.9-4.793,0.9l-0.632-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m45.73,147.09s5.959-3.3,5.425,1.76c-0.27,2.55-4.793,0.9-4.793,0.9l-0.632-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m54.862,144.27s7.159-3.7,5.425,1.77c-0.778,2.44-4.794,0.9-4.794,0.9l-0.631-2.67z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m64.376,139.45s4.359-4.9,5.425,1.76c0.406,2.54-4.793,0.9-4.793,0.9l-0.632-2.66z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m26.834,156s5.228-0.23,4.076,1.32c-1.153,1.55-3.602,0.68-3.602,0.68l-0.474-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m62.434,34.603s-0.726,0.665-0.727-0.406c0-1.07,17.484-14.334,26.327-15.718,0,0-16.099,6.729-25.6,16.124z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m62.434,34.603s-0.726,0.665-0.727-0.406c0-1.07,17.484-14.334,26.327-15.718,0,0-16.099,6.729-25.6,16.124z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m65.4,98.4s22.001,22.4,31.201,26c0,0,9.199,11.2,5.199,37.2,0,0-3.199,7.6-6.399-13.2,0,0,3.2-25.2-8-9.2,0,0-8.401-9.9-2.001-9.6,0,0,3.201,2,3.601,0.4s-7.601-15.2-24.801-29.6,1.2-2,1.2-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m7,137.2s-0.2-1.8,1.6-1,96,7,127.6,31c0,0-45.199-23.2-129.2-30z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m7,137.2s-0.2-1.8,1.6-1,96,7,127.6,31c0,0-45.199-23.2-129.2-30z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m17.4,132.8s-0.2-1.8,1.6-1,138.4-0.2,162,32.2c0,0-22-25.2-163.6-31.2z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m17.4,132.8s-0.2-1.8,1.6-1,138.4-0.2,162,32.2c0,0-22-25.2-163.6-31.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m29,128.8s-0.2-1.8,1.6-1,175.2-12.2,198.8,20.2c0,0-9.6-25.6-200.4-19.2z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m29,128.8s-0.2-1.8,1.6-1,175.2-12.2,198.8,20.2c0,0-9.6-25.6-200.4-19.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m39,124s-0.2-1.8,1.6-1,124-37.8,147.6-5.4c0,0-13.4-24.6-149.2,6.4z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m39,124s-0.2-1.8,1.6-1,124-37.8,147.6-5.4c0,0-13.4-24.6-149.2,6.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-19,146.8s-0.2-1.8,1.6-1,19.6,3,21.6,41.8c0,0-7.2-42-23.2-40.8z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-19,146.8s-0.2-1.8,1.6-1,19.6,3,21.6,41.8c0,0-7.2-42-23.2-40.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-27.8,148.4s-0.2-1.8,1.6-1,16-3.8,13.2,35c0,0,1.2-35.2-14.8-34z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-27.8,148.4s-0.2-1.8,1.6-1,16-3.8,13.2,35c0,0,1.2-35.2-14.8-34z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-35.8,148.8s-0.2-1.8,1.6-1,17.2,1.4,4.8,23.8c0,0,9.6-24-6.4-22.8z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-35.8,148.8s-0.2-1.8,1.6-1,17.2,1.4,4.8,23.8c0,0,9.6-24-6.4-22.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m11.526,104.46s-0.444,2,1.105,0.79c16.068-12.628,48.51-71.53,104.2-77.164,0,0-38.312-12.11-105.3,76.374z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m11.526,104.46s-0.444,2,1.105,0.79c16.068-12.628,48.51-71.53,104.2-77.164,0,0-38.312-12.11-105.3,76.374z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m22.726,102.66s-1.363-1.19,0.505-1.81c1.868-0.63,114.31-73.13,153.6-65.164,0,0-27.11-7.51-154.1,66.974z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m22.726,102.66s-1.363-1.19,0.505-1.81c1.868-0.63,114.31-73.13,153.6-65.164,0,0-27.11-7.51-154.1,66.974z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m1.885,108.77s-0.509,1.6,1.202,0.62c8.975-5.12,12.59-62.331,56.167-63.586,0,0-32.411-14.714-57.369,62.966z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m1.885,108.77s-0.509,1.6,1.202,0.62c8.975-5.12,12.59-62.331,56.167-63.586,0,0-32.411-14.714-57.369,62.966z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-18.038,119.79s-1.077,1.29,0.876,1.03c10.246-1.33,31.651-42.598,76.09-37.519,0,0-31.966-14.346-76.966,36.489z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-18.038,119.79s-1.077,1.29,0.876,1.03c10.246-1.33,31.651-42.598,76.09-37.519,0,0-31.966-14.346-76.966,36.489z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-6.8,113.67s-0.811,1.47,1.058,0.84c9.799-3.27,22.883-47.885,67.471-51.432,0,0-34.126-7.943-68.529,50.592z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-6.8,113.67s-0.811,1.47,1.058,0.84c9.799-3.27,22.883-47.885,67.471-51.432,0,0-34.126-7.943-68.529,50.592z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-25.078,124.91s-0.873,1.04,0.709,0.84c8.299-1.08,25.637-34.51,61.633-30.396,0,0-25.893-11.62-62.342,29.556z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-25.078,124.91s-0.873,1.04,0.709,0.84c8.299-1.08,25.637-34.51,61.633-30.396,0,0-25.893-11.62-62.342,29.556z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-32.677,130.82s-1.005,1.05,0.586,0.93c4.168-0.31,34.806-33.39,53.274-17.89,0,0-12.015-18.721-53.86,16.96z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-32.677,130.82s-1.005,1.05,0.586,0.93c4.168-0.31,34.806-33.39,53.274-17.89,0,0-12.015-18.721-53.86,16.96z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m36.855,98.898s-1.201-1.355,0.731-1.74c1.932-0.384,122.63-58.097,160.59-45.231,0,0-25.94-10.874-161.32,46.971z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m36.855,98.898s-1.201-1.355,0.731-1.74c1.932-0.384,122.63-58.097,160.59-45.231,0,0-25.94-10.874-161.32,46.971z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m3.4,163.2s-0.2-1.8,1.6-1,17.2,1.4,4.8,23.8c0,0,9.6-24-6.4-22.8z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m3.4,163.2s-0.2-1.8,1.6-1,17.2,1.4,4.8,23.8c0,0,9.6-24-6.4-22.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m13.8,161.6s-0.2-1.8,1.6-1,19.6,3,21.6,41.8c0,0-7.2-42-23.2-40.8z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m13.8,161.6s-0.2-1.8,1.6-1,19.6,3,21.6,41.8c0,0-7.2-42-23.2-40.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m20.6,160s-0.2-1.8,1.6-1,26.4,4.2,50,36.6c0,0-35.6-36.8-51.6-35.6z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m20.6,160s-0.2-1.8,1.6-1,26.4,4.2,50,36.6c0,0-35.6-36.8-51.6-35.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m28.225,157.97s-0.437-1.76,1.453-1.2c1.89,0.55,22.324-1.35,60.421,32.83,0,0-46.175-34.94-61.874-31.63z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m28.225,157.97s-0.437-1.76,1.453-1.2c1.89,0.55,22.324-1.35,60.421,32.83,0,0-46.175-34.94-61.874-31.63z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m38.625,153.57s-0.437-1.76,1.453-1.2c1.89,0.55,36.724,5.05,88.422,40.03,0,0-74.176-42.14-89.875-38.83z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m38.625,153.57s-0.437-1.76,1.453-1.2c1.89,0.55,36.724,5.05,88.422,40.03,0,0-74.176-42.14-89.875-38.83z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-1.8,142s-0.2-1.8,1.6-1,55.2,3.4,85.6,30.2c0,0-34.901-24.77-87.2-29.2z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-1.8,142s-0.2-1.8,1.6-1,55.2,3.4,85.6,30.2c0,0-34.901-24.77-87.2-29.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m-11.8,146s-0.2-1.8,1.6-1,26.4,4.2,50,36.6c0,0-35.6-36.8-51.6-35.6z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-11.8,146s-0.2-1.8,1.6-1,26.4,4.2,50,36.6c0,0-35.6-36.8-51.6-35.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m49.503,148.96s-0.565-1.72,1.361-1.3c1.926,0.41,36.996,2.34,91.116,33.44,0,0-77.663-34.4-92.477-32.14z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m49.503,148.96s-0.565-1.72,1.361-1.3c1.926,0.41,36.996,2.34,91.116,33.44,0,0-77.663-34.4-92.477-32.14z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m57.903,146.56s-0.565-1.72,1.361-1.3c1.926,0.41,36.996,2.34,91.116,33.44,0,0-77.063-34.8-92.477-32.14z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m57.903,146.56s-0.565-1.72,1.361-1.3c1.926,0.41,36.996,2.34,91.116,33.44,0,0-77.063-34.8-92.477-32.14z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #FFF; + } + path: "m67.503,141.56s-0.565-1.72,1.361-1.3c1.926,0.41,44.996,4.74,134.72,39.04,0,0-120.66-40.4-136.08-37.74z"; + } + stroke { + line-width: 0.1; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m67.503,141.56s-0.565-1.72,1.361-1.3c1.926,0.41,44.996,4.74,134.72,39.04,0,0-120.66-40.4-136.08-37.74z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-43.8,148.4s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-13,162.4s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-21.8,162s5.2-0.4,4,1.2-3.6,0.8-3.6,0.8l-0.4-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-117.17,150.18s5.05,1.32,3.39,2.44-3.67-0.42-3.67-0.42l0.28-2.02z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-115.17,140.58s5.05,1.32,3.39,2.44-3.67-0.42-3.67-0.42l0.28-2.02z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-122.37,136.18s5.05,1.32,3.39,2.44-3.67-0.42-3.67-0.42l0.28-2.02z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-42.6,211.2-5.6,2c-2,0-13.2,3.6-18.8,13.6,0,0,12.4-9.6,24.4-15.6z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m45.116,303.85c0.141,0.25,0.196,0.67,0.488,0.69,0.658,0.04,1.891,0.34,1.766-0.29-0.848-4.31-1.722-9.25-5.855-11.05-0.639-0.28-2.081,0.13-2.155,1.02-0.127,1.52-0.244,2.87,0.065,4.33,0.3,1.43,2.458,1.43,3.375,0.05,0.936,1.67,1.368,3.52,2.316,5.25z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m34.038,308.58c0.748,1.41,0.621,3.27,2.036,3.84,0.74,0.29,2.59-0.68,2.172-1.76-0.802-2.06-1.19-4.3-2.579-6.11-0.2-0.26,0.04-0.79-0.12-1.12-0.594-1.22-1.739-1.96-3.147-1.63-1.115,2.2,0.033,4.33,1.555,6.04,0.136,0.15-0.03,0.53,0.083,0.74z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-5.564,303.39c-0.108-0.38-0.146-0.84,0.019-1.16,0.531-1.03,1.324-2.15,0.987-3.18-0.348-1.05-1.464-0.87-2.114-0.3-1.135,0.99-1.184,2.82-1.875,4.18-0.196,0.38-0.145,0.96-0.586,1.35-0.474,0.42-0.914,1.94-0.818,2.51,0.053,0.32-0.13,10.22,0.092,9.96,0.619-0.73,3.669-10.47,3.738-11.36,0.057-0.73,0.789-1.19,0.557-2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-31.202,296.6c2.634-2.5,5.424-5.46,4.982-9.17-0.116-0.98-1.891-0.45-2.078,0.39-0.802,3.63-2.841,6.29-5.409,8.68-2.196,2.05-4.058,8.39-4.293,8.9,3.697-5.26,5.954-8,6.798-8.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-44.776,290.64c0.523-0.38,0.221-0.87,0.438-1.2,0.953-1.46,2.254-2.7,2.272-4.44,0.003-0.28-0.375-0.59-0.71-0.36-0.277,0.18-0.619,0.31-0.727,0.44-2.03,2.45-3.43,5.12-4.873,7.93-0.183,0.36-1.327,4.85-1.014,4.96,0.239,0.09,1.959-4.09,2.169-4.21,1.263-0.68,1.275-2.3,2.445-3.12z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-28.043,310.18c0.444-0.87,2.02-2.07,1.907-2.96-0.118-0.93,0.35-2.37-0.562-1.68-1.257,0.94-4.706,2.29-4.976,8.1-0.026,0.57,2.948-2.12,3.631-3.46z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-13.6,293c0.4-0.67,1.108-0.19,1.567-0.46,0.648-0.37,1.259-0.93,1.551-1.58,0.97-2.14,2.739-3.96,2.882-6.36-1.491-1.4-2.17,0.64-2.8,1.6-1.323-1.65-2.322,0.23-3.622,0.75-0.07,0.03-0.283-0.32-0.358-0.29-1.177,0.44-1.857,1.52-2.855,2.3-0.171,0.13-0.576-0.05-0.723,0.09-0.652,0.6-1.625,0.93-1.905,1.61-1.11,2.7-4.25,4.8-6.137,12.34,0.381,0.91,4.512-6.64,4.999-7.34,0.836-1.2,0.954,1.66,2.23,1,0.051-0.03,0.237,0.21,0.371,0.34,0.194-0.28,0.412-0.51,0.8-0.4,0-0.4-0.134-0.96,0.067-1.11,1.237-0.98,1.153-2.05,1.933-3.29,0.458,0.79,1.519,0.07,2,0.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m46.2,347.4s7.4-20.4,3-31.6c0,0,11.4,21.6,6.8,32.8,0,0-0.4-10.4-4.4-15.4,0,0-4,12.8-5.4,14.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m31.4,344.8s5.4-8.8-2.6-27.2c0,0-0.8,20.4-7.6,31.4,0,0,14.2-20.2,10.2-4.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m21.4,342.8s-0.2-20,0.2-23c0,0-3.8,16.6-14,26.2,0,0,14.4-12,13.8-3.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m11.8,310.8s6,13.6-4,32c0,0,6.4-12.2,1.6-19.2,0,0,2.6-3.4,2.4-12.8z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-7.4,342.4s-1-15.6,0.8-17.8c0,0,0.2-6.4-0.2-7.4,0,0,4-6.2,4.2,1.2,0,0,1.4,7.8,4.2,12.4,0,0,3.6,5.4,3.4,11.8,0,0-10-30.2-12.4-0.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-11,314.8s-6.6,10.8-8.4,29.8c0,0-1.4-6.2,2.4-20.6,0,0,4.2-15.4,6-9.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-32.8,334.6s5-5.4,6.4-10.4c0,0,3.6-15.8-2.8-7.2,0,0,0.2,8-8,15.4,0,0,4.8-2.4,4.4,2.2z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-38.6,329.6s3.4-17.4,4.2-18.2c0,0,1.8-3.4-1-0.2,0,0-8.8,19.2-12.8,25.8,0,0,8-9.2,9.6-7.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-44.4,313s11.6-22.4-10.2,3.4c0,0,11-9.8,10.2-3.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m-59.8,298.4s4.8-18.8,7.4-18.6l1.6,1.6s-6,9.6-5.4,19.4c0,0-0.6-9.6-3.6-2.4z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m270.5,287s-12-10-14.5-13.5c0,0,13.5,18.5,13.5,25.5,0,0,2.5-7.5,1-12z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m276,265s-21-15-24.5-22.5c0,0,26.5,29.5,26.5,34,0,0,0.5-9-2-11.5z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m293,111s-12-8-13.5-6c0,0,10.5,6.5,13,15,0,0-1.5-9,0.5-9z"; + } + fill { + child: color { + bounds: -250 -250 700 700; + color: #CCC; + } + path: "m301.5,191.5-17.5-12s19,17,19.5,21l-2-9z"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-89.25,169,22,4.75"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-39,331s-0.5-3.5-9.5,7"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m-33.5,336s2-6.5-4.5-2"; + } + stroke { + line-width: 1.0; + child: color { + bounds: -250 -250 700 700; + color: #000; + } + path: "m20.5,344.5s1.5-11-10,2"; + } + } +} \ No newline at end of file Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/vertical_text_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/vertical_text_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/gtk-demo/video_player.c gtk4-4.14.1+ds/demos/gtk-demo/video_player.c --- gtk4-4.12.5+ds/demos/gtk-demo/video_player.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/gtk-demo/video_player.c 2024-03-17 00:52:15.000000000 +0000 @@ -139,6 +139,7 @@ video = gtk_video_new (); gtk_video_set_autoplay (GTK_VIDEO (video), TRUE); + gtk_video_set_graphics_offload (GTK_VIDEO (video), GTK_GRAPHICS_OFFLOAD_ENABLED); gtk_window_set_child (GTK_WINDOW (window), video); title = gtk_header_bar_new (); Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/w_resize_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/w_resize_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/wait_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/wait_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/zoom_in_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/zoom_in_cursor.png differ Binary files /tmp/tmpljj37ek0/8GcPBCSa9e/gtk4-4.12.5+ds/demos/gtk-demo/zoom_out_cursor.png and /tmp/tmpljj37ek0/MU0HEBfRa3/gtk4-4.14.1+ds/demos/gtk-demo/zoom_out_cursor.png differ diff -Nru gtk4-4.12.5+ds/demos/icon-browser/iconbrowserapp.c gtk4-4.14.1+ds/demos/icon-browser/iconbrowserapp.c --- gtk4-4.12.5+ds/demos/icon-browser/iconbrowserapp.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/icon-browser/iconbrowserapp.c 2024-03-17 00:52:15.000000000 +0000 @@ -4,7 +4,7 @@ #include "iconbrowserapp.h" #include "iconbrowserwin.h" -#include "demo_conf.h" +#include "profile_conf.h" struct _IconBrowserApp { diff -Nru gtk4-4.12.5+ds/demos/icon-browser/iconbrowserapp.h gtk4-4.14.1+ds/demos/icon-browser/iconbrowserapp.h --- gtk4-4.12.5+ds/demos/icon-browser/iconbrowserapp.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/icon-browser/iconbrowserapp.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __ICON_BROWSER_APP_H -#define __ICON_BROWSER_APP_H +#pragma once #include @@ -14,6 +13,3 @@ GType icon_browser_app_get_type (void); IconBrowserApp *icon_browser_app_new (void); - - -#endif /* __ICON_BROWSER_APP_H */ diff -Nru gtk4-4.12.5+ds/demos/icon-browser/iconbrowserwin.h gtk4-4.14.1+ds/demos/icon-browser/iconbrowserwin.h --- gtk4-4.12.5+ds/demos/icon-browser/iconbrowserwin.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/icon-browser/iconbrowserwin.h 2024-03-17 00:52:15.000000000 +0000 @@ -1,5 +1,4 @@ -#ifndef __ICON_BROWSER_WIN_H -#define __ICON_BROWSER_WIN_H +#pragma once #include #include "iconbrowserapp.h" @@ -15,6 +14,3 @@ GType icon_browser_window_get_type (void); IconBrowserWindow *icon_browser_window_new (IconBrowserApp *app); - - -#endif /* __ICON_BROWSER_WIN_H */ diff -Nru gtk4-4.12.5+ds/demos/icon-browser/meson.build gtk4-4.14.1+ds/demos/icon-browser/meson.build --- gtk4-4.12.5+ds/demos/icon-browser/meson.build 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/icon-browser/meson.build 2024-03-17 00:52:15.000000000 +0000 @@ -14,7 +14,7 @@ executable('gtk4-icon-browser', sources: [iconbrowser_sources, iconbrowser_resources], c_args: common_cflags, - dependencies: [ libgtk_dep, demo_conf_h ], + dependencies: [ libgtk_dep, profile_conf_h ], include_directories: confinc, win_subsystem: 'windows', link_args: extra_demo_ldflags, diff -Nru gtk4-4.12.5+ds/demos/meson.build gtk4-4.14.1+ds/demos/meson.build --- gtk4-4.12.5+ds/demos/meson.build 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/meson.build 2024-03-17 00:52:15.000000000 +0000 @@ -1,16 +1,3 @@ -gen_demo_header = find_program('../build-aux/meson/gen-demo-header.py') -demo_profile = get_option('demo-profile') - -demo_conf_h = declare_dependency( - sources: custom_target('demo-header', - command: [gen_demo_header, meson.project_source_root(), demo_profile], - capture: true, - output: 'demo_conf.h', - build_by_default: true, - build_always_stale: true, - ) -) - # appdata appdata_config = configuration_data() diff -Nru gtk4-4.12.5+ds/demos/node-editor/gtkrendererpaintableprivate.h gtk4-4.14.1+ds/demos/node-editor/gtkrendererpaintableprivate.h --- gtk4-4.12.5+ds/demos/node-editor/gtkrendererpaintableprivate.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/gtkrendererpaintableprivate.h 2024-03-17 00:52:15.000000000 +0000 @@ -17,8 +17,7 @@ * Authors: Benjamin Otte */ -#ifndef __GTK_RENDERER_PAINTABLE_H__ -#define __GTK_RENDERER_PAINTABLE_H__ +#pragma once #include @@ -39,5 +38,3 @@ GdkPaintable * gtk_renderer_paintable_get_paintable (GtkRendererPaintable *self) G_GNUC_PURE; G_END_DECLS - -#endif /* __GTK_RENDERER_PAINTABLE_H__ */ diff -Nru gtk4-4.12.5+ds/demos/node-editor/meson.build gtk4-4.14.1+ds/demos/node-editor/meson.build --- gtk4-4.12.5+ds/demos/node-editor/meson.build 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/meson.build 2024-03-17 00:52:15.000000000 +0000 @@ -12,7 +12,7 @@ executable('gtk4-node-editor', sources: [node_editor_sources, node_editor_resources], - dependencies: [ libgtk_dep, demo_conf_h ], + dependencies: [ libgtk_dep, profile_conf_h ], include_directories: confinc, c_args: common_cflags, win_subsystem: 'windows', diff -Nru gtk4-4.12.5+ds/demos/node-editor/node-editor-application.c gtk4-4.14.1+ds/demos/node-editor/node-editor-application.c --- gtk4-4.12.5+ds/demos/node-editor/node-editor-application.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/node-editor-application.c 2024-03-17 00:52:15.000000000 +0000 @@ -19,11 +19,13 @@ #include "config.h" +#include + #include "node-editor-application.h" #include "node-editor-window.h" -#include "demo_conf.h" +#include "profile_conf.h" static const char *css = "textview.editor {" @@ -247,11 +249,63 @@ application_class->open = node_editor_application_open; } +static void +print_version (void) +{ + g_print ("gtk4-node-editor %s%s%s\n", + PACKAGE_VERSION, + g_strcmp0 (PROFILE, "devel") == 0 ? "-" : "", + g_strcmp0 (PROFILE, "devel") == 0 ? VCS_TAG : ""); +} + +static int +local_options (GApplication *app, + GVariantDict *options, + gpointer data) +{ + gboolean version = FALSE; + gboolean reset = FALSE; + + g_variant_dict_lookup (options, "version", "b", &version); + + if (version) + { + print_version (); + return 0; + } + + g_variant_dict_lookup (options, "reset", "b", &reset); + + if (reset) + { + char *path; + + path = get_autosave_path ("-unsafe"); + g_remove (path); + g_free (path); + path = get_autosave_path (NULL); + g_remove (path); + g_free (path); + } + + return -1; +} + + NodeEditorApplication * node_editor_application_new (void) { - return g_object_new (NODE_EDITOR_APPLICATION_TYPE, - "application-id", "org.gtk.gtk4.NodeEditor", - "flags", G_APPLICATION_HANDLES_OPEN, - NULL); + NodeEditorApplication *app; + + app = g_object_new (NODE_EDITOR_APPLICATION_TYPE, + "application-id", "org.gtk.gtk4.NodeEditor", + "flags", G_APPLICATION_HANDLES_OPEN, + NULL); + + g_application_add_main_option (G_APPLICATION (app), "version", 0, 0,G_OPTION_ARG_NONE, "Show program version", NULL); + g_application_add_main_option (G_APPLICATION (app), "reset", 0, 0,G_OPTION_ARG_NONE, "Remove autosave content", NULL); + + g_signal_connect (app, "handle-local-options", G_CALLBACK (local_options), NULL); + + return app; } diff -Nru gtk4-4.12.5+ds/demos/node-editor/node-editor-application.h gtk4-4.14.1+ds/demos/node-editor/node-editor-application.h --- gtk4-4.12.5+ds/demos/node-editor/node-editor-application.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/node-editor-application.h 2024-03-17 00:52:15.000000000 +0000 @@ -17,8 +17,7 @@ * Authors: Benjamin Otte */ -#ifndef __NODE_EDITOR_APPLICATION_H__ -#define __NODE_EDITOR_APPLICATION_H__ +#pragma once #include @@ -33,6 +32,3 @@ GType node_editor_application_get_type (void); NodeEditorApplication *node_editor_application_new (void); - - -#endif /* __NODE_EDITOR_APPLICATION_H__ */ diff -Nru gtk4-4.12.5+ds/demos/node-editor/node-editor-window.c gtk4-4.14.1+ds/demos/node-editor/node-editor-window.c --- gtk4-4.12.5+ds/demos/node-editor/node-editor-window.c 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/node-editor-window.c 2024-03-17 00:52:15.000000000 +0000 @@ -24,13 +24,11 @@ #include "gtkrendererpaintableprivate.h" #include "gsk/gskrendernodeparserprivate.h" -#include "gsk/gl/gskglrenderer.h" #ifdef GDK_WINDOWING_BROADWAY #include "gsk/broadway/gskbroadwayrenderer.h" #endif -#ifdef GDK_RENDERING_VULKAN -#include "gsk/vulkan/gskvulkanrenderer.h" -#endif + +#include #include #ifdef CAIRO_HAS_SVG_SURFACE @@ -59,6 +57,7 @@ GtkWidget *testcase_name_entry; GtkWidget *testcase_save_button; GtkWidget *scale_scale; + GtkWidget *crash_warning; GtkWidget *renderer_listbox; GListStore *renderers; @@ -68,6 +67,10 @@ GFileMonitor *file_monitor; GArray *errors; + + gboolean auto_reload; + gboolean mark_as_safe_pending; + gulong after_paint_handler; }; struct _NodeEditorWindowClass @@ -75,6 +78,13 @@ GtkApplicationWindowClass parent_class; }; +enum { + PROP_AUTO_RELOAD = 1, + NUM_PROPERTIES +}; + +static GParamSpec *properties[NUM_PROPERTIES] = { NULL, }; + G_DEFINE_TYPE(NodeEditorWindow, node_editor_window, GTK_TYPE_APPLICATION_WINDOW); static void @@ -167,19 +177,121 @@ } static void -text_changed (GtkTextBuffer *buffer, - NodeEditorWindow *self) +highlight_text (NodeEditorWindow *self) { - char *text; - GBytes *bytes; GtkTextIter iter; GtkTextIter start, end; + + gtk_text_buffer_get_start_iter (self->text_buffer, &iter); + + while (!gtk_text_iter_is_end (&iter)) + { + gunichar c = gtk_text_iter_get_char (&iter); + + if (c == '{') + { + GtkTextIter word_end = iter; + GtkTextIter word_start; + + gtk_text_iter_backward_char (&word_end); + text_iter_skip_whitespace_backward (&word_end); + + word_start = word_end; + gtk_text_iter_backward_word_start (&word_start); + text_iter_skip_alpha_backward (&word_start); + + gtk_text_buffer_apply_tag_by_name (self->text_buffer, "nodename", &word_start, &word_end); + } + else if (c == ':') + { + GtkTextIter word_end = iter; + GtkTextIter word_start; + + gtk_text_iter_backward_char (&word_end); + text_iter_skip_whitespace_backward (&word_end); + + word_start = word_end; + gtk_text_iter_backward_word_start (&word_start); + text_iter_skip_alpha_backward (&word_start); + + gtk_text_buffer_apply_tag_by_name (self->text_buffer, "propname", &word_start, &word_end); + } + else if (c == '"') + { + GtkTextIter string_start = iter; + GtkTextIter string_end = iter; + + gtk_text_iter_forward_char (&iter); + while (!gtk_text_iter_is_end (&iter)) + { + c = gtk_text_iter_get_char (&iter); + + if (c == '"') + { + gtk_text_iter_forward_char (&iter); + string_end = iter; + break; + } + + gtk_text_iter_forward_char (&iter); + } + + gtk_text_buffer_apply_tag_by_name (self->text_buffer, "string", &string_start, &string_end); + } + + gtk_text_iter_forward_char (&iter); + } + + gtk_text_buffer_get_bounds (self->text_buffer, &start, &end); + gtk_text_buffer_apply_tag_by_name (self->text_buffer, "no-hyphens", &start, &end); +} + +static void +mark_autosave_as_unsafe (void) +{ + char *path1 = NULL; + char *path2 = NULL; + + path1 = get_autosave_path ("-unsafe"); + path2 = get_autosave_path (NULL); + + g_rename (path2, path1); +} + +static void +mark_autosave_as_safe (void) +{ + char *path1 = NULL; + char *path2 = NULL; + + path1 = get_autosave_path ("-unsafe"); + path2 = get_autosave_path (NULL); + + g_rename (path1, path2); +} + +static void +after_paint (GdkFrameClock *clock, + NodeEditorWindow *self) +{ + if (self->mark_as_safe_pending) + { + self->mark_as_safe_pending = FALSE; + mark_autosave_as_safe (); + } +} + +static void +reload (NodeEditorWindow *self) +{ + char *text; + GBytes *bytes; float scale; GskRenderNode *big_node; - g_array_remove_range (self->errors, 0, self->errors->len); + mark_autosave_as_unsafe (); + text = get_current_text (self->text_buffer); - text_buffer_remove_all_tags (self->text_buffer); bytes = g_bytes_new_take (text, strlen (text)); g_clear_pointer (&self->node, gsk_render_node_unref); @@ -241,72 +353,20 @@ g_clear_pointer (&big_node, gsk_render_node_unref); - gtk_text_buffer_get_start_iter (self->text_buffer, &iter); - - while (!gtk_text_iter_is_end (&iter)) - { - gunichar c = gtk_text_iter_get_char (&iter); - - if (c == '{') - { - GtkTextIter word_end = iter; - GtkTextIter word_start; - - gtk_text_iter_backward_char (&word_end); - text_iter_skip_whitespace_backward (&word_end); - - word_start = word_end; - gtk_text_iter_backward_word_start (&word_start); - text_iter_skip_alpha_backward (&word_start); - - gtk_text_buffer_apply_tag_by_name (self->text_buffer, "nodename", - &word_start, &word_end); - } - else if (c == ':') - { - GtkTextIter word_end = iter; - GtkTextIter word_start; - - gtk_text_iter_backward_char (&word_end); - text_iter_skip_whitespace_backward (&word_end); - - word_start = word_end; - gtk_text_iter_backward_word_start (&word_start); - text_iter_skip_alpha_backward (&word_start); - - gtk_text_buffer_apply_tag_by_name (self->text_buffer, "propname", - &word_start, &word_end); - } - else if (c == '"') - { - GtkTextIter string_start = iter; - GtkTextIter string_end = iter; - - gtk_text_iter_forward_char (&iter); - while (!gtk_text_iter_is_end (&iter)) - { - c = gtk_text_iter_get_char (&iter); - - if (c == '"') - { - gtk_text_iter_forward_char (&iter); - string_end = iter; - break; - } - - gtk_text_iter_forward_char (&iter); - } + self->mark_as_safe_pending = TRUE; +} - gtk_text_buffer_apply_tag_by_name (self->text_buffer, "string", - &string_start, &string_end); - } +static void +text_changed (GtkTextBuffer *buffer, + NodeEditorWindow *self) +{ + g_array_remove_range (self->errors, 0, self->errors->len); + text_buffer_remove_all_tags (self->text_buffer); - gtk_text_iter_forward_char (&iter); - } + if (self->auto_reload) + reload (self); - gtk_text_buffer_get_bounds (self->text_buffer, &start, &end); - gtk_text_buffer_apply_tag_by_name (self->text_buffer, "no-hyphens", - &start, &end); + highlight_text (self); } static void @@ -794,7 +854,7 @@ return NULL; renderer = gsk_cairo_renderer_new (); - gsk_renderer_realize (renderer, NULL, NULL); + gsk_renderer_realize_for_display (renderer, gtk_widget_get_display (GTK_WIDGET (self)), NULL); texture = gsk_renderer_render_texture (renderer, node, NULL); gsk_render_node_unref (node); @@ -866,11 +926,11 @@ GskRenderer *renderer; renderer = gsk_gl_renderer_new (); - if (!gsk_renderer_realize (renderer, NULL, NULL)) + if (!gsk_renderer_realize_for_display (renderer, gdk_display_get_default (), NULL)) { g_object_unref (renderer); renderer = gsk_cairo_renderer_new (); - if (!gsk_renderer_realize (renderer, NULL, NULL)) + if (!gsk_renderer_realize_for_display (renderer, gdk_display_get_default (), NULL)) { g_assert_not_reached (); } @@ -1121,8 +1181,11 @@ const char *description) { GdkPaintable *paintable; + GdkDisplay *display; + + display = gtk_widget_get_display (GTK_WIDGET (self)); - if (!gsk_renderer_realize (renderer, NULL, NULL)) + if (!gsk_renderer_realize_for_display (renderer, display, NULL)) { GdkSurface *surface = gtk_native_get_surface (GTK_NATIVE (self)); g_assert (surface != NULL); @@ -1146,6 +1209,7 @@ node_editor_window_realize (GtkWidget *widget) { NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget); + GdkFrameClock *frameclock; GTK_WIDGET_CLASS (node_editor_window_parent_class)->realize (widget); @@ -1157,6 +1221,9 @@ node_editor_window_add_renderer (self, gsk_gl_renderer_new (), "OpenGL"); + node_editor_window_add_renderer (self, + gsk_ngl_renderer_new (), + "NGL"); #ifdef GDK_RENDERING_VULKAN node_editor_window_add_renderer (self, gsk_vulkan_renderer_new (), @@ -1170,14 +1237,24 @@ node_editor_window_add_renderer (self, gsk_cairo_renderer_new (), "Cairo"); + + frameclock = gtk_widget_get_frame_clock (widget); + self->after_paint_handler = g_signal_connect (frameclock, "after-paint", + G_CALLBACK (after_paint), self); + } static void node_editor_window_unrealize (GtkWidget *widget) { NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget); + GdkFrameClock *frameclock; guint i; + frameclock = gtk_widget_get_frame_clock (widget); + g_signal_handler_disconnect (frameclock, self->after_paint_handler); + self->after_paint_handler = 0; + for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->renderers)); i ++) { gpointer item = g_list_model_get_item (G_LIST_MODEL (self->renderers), i); @@ -1539,6 +1616,62 @@ } static void +node_editor_window_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + NodeEditorWindow *self = NODE_EDITOR_WINDOW (object); + + switch (prop_id) + { + case PROP_AUTO_RELOAD: + { + gboolean auto_reload = g_value_get_boolean (value); + if (self->auto_reload != auto_reload) + { + self->auto_reload = auto_reload; + + if (self->auto_reload) + reload (self); + } + } + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +node_editor_window_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + NodeEditorWindow *self = NODE_EDITOR_WINDOW (object); + + switch (prop_id) + { + case PROP_AUTO_RELOAD: + g_value_set_boolean (value, self->auto_reload); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +close_crash_warning (GtkButton *button, + NodeEditorWindow *self) +{ + gtk_revealer_set_reveal_child (GTK_REVEALER (self->crash_warning), FALSE); +} + +static void node_editor_window_class_init (NodeEditorWindowClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); @@ -1549,6 +1682,8 @@ object_class->dispose = node_editor_window_dispose; object_class->finalize = node_editor_window_finalize; + object_class->set_property = node_editor_window_set_property; + object_class->get_property = node_editor_window_get_property; gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/gtk4/node-editor/node-editor-window.ui"); @@ -1556,6 +1691,12 @@ widget_class->realize = node_editor_window_realize; widget_class->unrealize = node_editor_window_unrealize; + properties[PROP_AUTO_RELOAD] = g_param_spec_boolean ("auto-reload", NULL, NULL, + TRUE, + G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME); + + g_object_class_install_properties (object_class, NUM_PROPERTIES, properties); + gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, text_view); gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, picture); gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, renderer_listbox); @@ -1565,6 +1706,7 @@ gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, testcase_name_entry); gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, testcase_save_button); gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, scale_scale); + gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, crash_warning); gtk_widget_class_bind_template_callback (widget_class, text_view_query_tooltip_cb); gtk_widget_class_bind_template_callback (widget_class, open_cb); @@ -1577,6 +1719,7 @@ 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, click_gesture_pressed); + gtk_widget_class_bind_template_callback (widget_class, close_crash_warning); gtk_widget_class_install_action (widget_class, "smart-edit", NULL, edit_action_cb); @@ -1628,11 +1771,98 @@ { "open", window_open, NULL, NULL, NULL }, }; +char * +get_autosave_path (const char *suffix) +{ + char *path; + char *name; + + name = g_strconcat ("autosave", suffix, NULL); + path = g_build_filename (g_get_user_cache_dir (), "gtk4-node-editor", name, NULL); + g_free (name); + + return path; +} + +static void +set_initial_text (NodeEditorWindow *self) +{ + char *path, *path1; + char *initial_text; + gsize len; + + path = get_autosave_path (NULL); + path1 = get_autosave_path ("-unsafe"); + + if (g_file_get_contents (path1, &initial_text, &len, NULL)) + { + self->auto_reload = FALSE; + gtk_revealer_set_reveal_child (GTK_REVEALER (self->crash_warning), TRUE); + + gtk_text_buffer_set_text (self->text_buffer, initial_text, len); + g_free (initial_text); + } + else if (g_file_get_contents (path, &initial_text, &len, NULL)) + { + gtk_text_buffer_set_text (self->text_buffer, initial_text, len); + g_free (initial_text); + } + else + { + /* Default */ + gtk_text_buffer_set_text (self->text_buffer, + "shadow {\n" + " child: texture {\n" + " bounds: 0 0 128 128;\n" + " texture: url(\"resource:///org/gtk/gtk4/node-editor/icons/apps/org.gtk.gtk4.NodeEditor.svg\");\n" + " }\n" + " shadows: rgba(0,0,0,0.5) 0 1 12;\n" + "}\n" + "\n" + "transform {\n" + " child: text {\n" + " color: rgb(46,52,54);\n" + " font: \"Cantarell Bold 11\";\n" + " glyphs: \"GTK Node Editor\";\n" + " offset: 8 14.418;\n" + " }\n" + " transform: translate(0, 140);\n" + "}", -1); + } + + g_free (path); + g_free (path1); +} + +static void +autosave_contents (NodeEditorWindow *self) +{ + char *path = NULL; + char *dir = NULL; + char *contents; + GtkTextIter start, end; + + gtk_text_buffer_get_bounds (self->text_buffer, &start, &end); + contents = gtk_text_buffer_get_text (self->text_buffer, &start, &end, TRUE); + path = get_autosave_path ("-unsafe"); + dir = g_path_get_dirname (path); + g_mkdir_with_parents (dir, 0755); + g_file_set_contents (path, contents, -1, NULL); + + g_free (dir); + g_free (path); + g_free (contents); +} + static void node_editor_window_init (NodeEditorWindow *self) { + GAction *action; + gtk_widget_init_template (GTK_WIDGET (self)); + self->auto_reload = TRUE; + self->renderers = g_list_store_new (GDK_TYPE_PAINTABLE); gtk_list_box_bind_model (GTK_LIST_BOX (self->renderer_listbox), G_LIST_MODEL (self->renderers), @@ -1645,6 +1875,10 @@ g_action_map_add_action_entries (G_ACTION_MAP (self), win_entries, G_N_ELEMENTS (win_entries), self); + action = G_ACTION (g_property_action_new ("auto-reload", self, "auto-reload")); + g_action_map_add_action (G_ACTION_MAP (self), action); + g_object_unref (action); + self->tag_table = gtk_text_tag_table_new (); gtk_text_tag_table_add (self->tag_table, g_object_new (GTK_TYPE_TEXT_TAG, @@ -1682,25 +1916,9 @@ g_signal_connect (self->scale_scale, "notify::value", G_CALLBACK (scale_changed), self); gtk_text_view_set_buffer (GTK_TEXT_VIEW (self->text_view), self->text_buffer); - /* Default */ - gtk_text_buffer_set_text (self->text_buffer, - "shadow {\n" - " child: texture {\n" - " bounds: 0 0 128 128;\n" - " texture: url(\"resource:///org/gtk/gtk4/node-editor/icons/apps/org.gtk.gtk4.NodeEditor.svg\");\n" - " }\n" - " shadows: rgba(0,0,0,0.5) 0 1 12;\n" - "}\n" - "\n" - "transform {\n" - " child: text {\n" - " color: rgb(46,52,54);\n" - " font: \"Cantarell Bold 11\";\n" - " glyphs: \"GTK Node Editor\";\n" - " offset: 8 14.418;\n" - " }\n" - " transform: translate(0, 140);\n" - "}", -1); + set_initial_text (self); + + g_signal_connect_swapped (self->text_buffer, "changed", G_CALLBACK (autosave_contents), self); if (g_getenv ("GSK_RENDERER")) { diff -Nru gtk4-4.12.5+ds/demos/node-editor/node-editor-window.h gtk4-4.14.1+ds/demos/node-editor/node-editor-window.h --- gtk4-4.12.5+ds/demos/node-editor/node-editor-window.h 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/node-editor-window.h 2024-03-17 00:52:15.000000000 +0000 @@ -17,8 +17,7 @@ * Authors: Benjamin Otte */ -#ifndef __NODE_EDITOR_WINDOW_H__ -#define __NODE_EDITOR_WINDOW_H__ +#pragma once #include @@ -39,4 +38,4 @@ gboolean node_editor_window_load (NodeEditorWindow *self, GFile *file); -#endif /* __NODE_EDITOR_WINDOW_H__ */ +char * get_autosave_path (const char *suffix); diff -Nru gtk4-4.12.5+ds/demos/node-editor/node-editor-window.ui gtk4-4.14.1+ds/demos/node-editor/node-editor-window.ui --- gtk4-4.12.5+ds/demos/node-editor/node-editor-window.ui 2024-01-18 03:50:47.000000000 +0000 +++ gtk4-4.14.1+ds/demos/node-editor/node-editor-window.ui 2024-03-17 00:52:15.000000000 +0000 @@ -3,6 +3,10 @@
+ _Reload automatically + win.auto-reload + + _Help app.help @@ -24,7 +28,6 @@
- @@ -39,7 +42,7 @@ 1 1 - + @@ -52,7 +55,6 @@ - 1 @@ -66,7 +68,6 @@ - 1 @@ -78,7 +79,6 @@ - Save @@ -86,9 +86,9 @@ end 1 0 - + 4 @@ -100,7 +100,6 @@ -