Compare commits
8 Commits
css-curren
...
dmabug-tex
Author | SHA1 | Date | |
---|---|---|---|
|
b27592c6d1 | ||
|
c362840b3f | ||
|
ea98ea1217 | ||
|
e6b11c8668 | ||
|
2a3fdf78d7 | ||
|
a8a0292f20 | ||
|
e83dcc4cab | ||
|
4957bed573 |
@@ -1,4 +1,4 @@
|
|||||||
# See https://www.apertis.org/policies/coding_conventions/#code-formatting
|
# See https://wiki.apertis.org/Guidelines/Coding_conventions#Code_formatting
|
||||||
BasedOnStyle: GNU
|
BasedOnStyle: GNU
|
||||||
AlwaysBreakAfterDefinitionReturnType: All
|
AlwaysBreakAfterDefinitionReturnType: All
|
||||||
BreakBeforeBinaryOperators: None
|
BreakBeforeBinaryOperators: None
|
||||||
|
@@ -26,7 +26,7 @@ variables:
|
|||||||
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
||||||
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-testsuite=true -Dintrospection=enabled"
|
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-testsuite=true -Dintrospection=enabled"
|
||||||
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
||||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v49"
|
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v48"
|
||||||
|
|
||||||
workflow:
|
workflow:
|
||||||
rules:
|
rules:
|
||||||
@@ -66,8 +66,7 @@ style-check-diff:
|
|||||||
junit:
|
junit:
|
||||||
- "${CI_PROJECT_DIR}/_build/report-x11.xml"
|
- "${CI_PROJECT_DIR}/_build/report-x11.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_gl.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland_gles.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_gles2.xml"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-broadway.xml"
|
- "${CI_PROJECT_DIR}/_build/report-broadway.xml"
|
||||||
name: "gtk-${CI_COMMIT_REF_NAME}"
|
name: "gtk-${CI_COMMIT_REF_NAME}"
|
||||||
paths:
|
paths:
|
||||||
@@ -78,7 +77,6 @@ style-check-diff:
|
|||||||
- "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*/*.node"
|
- "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*/*.node"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.node"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/headless/*/*.log"
|
- "${CI_PROJECT_DIR}/_build/testsuite/headless/*/*.log"
|
||||||
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
||||||
@@ -105,9 +103,8 @@ fedora-x86_64:
|
|||||||
${FEATURE_FLAGS}
|
${FEATURE_FLAGS}
|
||||||
_build
|
_build
|
||||||
- meson compile -C _build
|
- meson compile -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build x11 gtk
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
# only repeat test runs that are likely affected by test setups
|
- .gitlab-ci/run-tests.sh _build wayland_gles
|
||||||
- .gitlab-ci/run-tests.sh _build wayland_gl gtk:gdk,gtk:gsk-gl
|
|
||||||
|
|
||||||
release-build:
|
release-build:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
@@ -132,9 +129,7 @@ release-build:
|
|||||||
- meson install -C _build
|
- 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
|
- PKG_CONFIG_PATH=${CI_PROJECT_DIR}/_install/lib64/pkgconfig:${CI_PROJECT_DIR}/_install/share/pkgconfig meson setup _build_hello examples/hello
|
||||||
- LD_LIBRARY_PATH=${CI_PROJECT_DIR}/_install/lib64 meson compile -C _build_hello
|
- LD_LIBRARY_PATH=${CI_PROJECT_DIR}/_install/lib64 meson compile -C _build_hello
|
||||||
- .gitlab-ci/run-tests.sh _build wayland gtk
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
# 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:
|
fedora-clang:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
@@ -210,54 +205,51 @@ msys2-mingw64:
|
|||||||
paths:
|
paths:
|
||||||
- "${CI_PROJECT_DIR}/_build/gtkdll.tar.gz"
|
- "${CI_PROJECT_DIR}/_build/gtkdll.tar.gz"
|
||||||
|
|
||||||
macos:
|
macos-x86_64:
|
||||||
rules:
|
rules:
|
||||||
# Do not run in forks as the runner is not available there.
|
# Do not run in forks as the runner is not available there.
|
||||||
# (except for dehesselle who maintains the runner)
|
- if: $CI_PROJECT_NAMESPACE == "GNOME"
|
||||||
- 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
|
stage: build
|
||||||
parallel:
|
|
||||||
matrix:
|
|
||||||
- RUNNER: [ "macosintel", "macosarm" ]
|
|
||||||
tags:
|
tags:
|
||||||
- ${RUNNER}
|
- macosintel
|
||||||
needs: []
|
needs: []
|
||||||
variables:
|
variables:
|
||||||
EXTRA_MESON_FLAGS: ""
|
MESON_FORCE_BACKTRACKE: 1
|
||||||
BACKEND_FLAGS: "-Dx11-backend=false -Dbroadway-backend=true"
|
|
||||||
FEATURE_FLAGS: "-Dmedia-gstreamer=disabled -Dintrospection=enabled -Dgobject-introspection:werror=false"
|
|
||||||
TMPDIR: /Users/Shared/work/tmp
|
TMPDIR: /Users/Shared/work/tmp
|
||||||
|
SDKROOT: /opt/sdks/MacOSX10.13.4.sdk
|
||||||
PIP_CACHE_DIR: /Users/Shared/build/cache
|
PIP_CACHE_DIR: /Users/Shared/build/cache
|
||||||
PIPENV_CACHE_DIR: $PIP_CACHE_DIR
|
PIPENV_CACHE_DIR: $PIP_CACHE_DIR
|
||||||
PYTHONPYCACHEPREFIX: $PIP_CACHE_DIR
|
PYTHONPYCACHEPREFIX: $PIP_CACHE_DIR
|
||||||
|
EXTRA_MESON_FLAGS: "-Dgobject-introspection:werror=false"
|
||||||
before_script:
|
before_script:
|
||||||
- .gitlab-ci/show-info-macos.sh
|
# Not using ccache on purpose as it accelerates the build so much that it
|
||||||
- python3 -m venv .venv
|
# can trigger race conditions in the gobject-introspection subproject.
|
||||||
# Building the introspection feature requires pkg-config and bison.
|
- bash .gitlab-ci/show-info-osx.sh
|
||||||
- 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
|
- /opt/macports/bin/python3.10 -m venv .venv
|
||||||
- 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
|
- 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
|
||||||
- source .venv/bin/activate
|
- source .venv/bin/activate
|
||||||
- pip3 install meson==1.3.2 $NINJA_PKG
|
- pip3 install meson==1.2.0
|
||||||
# We're not setting up ccache here on purpose as it accelerates the build
|
- pip3 install ninja==1.11.1
|
||||||
# so much that it triggers race conditions in the gobject-introspection
|
- pip3 install /Users/Shared/build/pkgs/PyGObject-3.44.0-cp310-cp310-macosx_10_13_x86_64.whl
|
||||||
# subproject.
|
/Users/Shared/build/pkgs/pycairo-1.23.0-cp310-cp310-macosx_10_13_x86_64.whl
|
||||||
script:
|
script:
|
||||||
- meson setup
|
- meson setup
|
||||||
${COMMON_MESON_FLAGS}
|
${COMMON_MESON_FLAGS}
|
||||||
${EXTRA_MESON_FLAGS}
|
${EXTRA_MESON_FLAGS}
|
||||||
${BACKEND_FLAGS}
|
-Dx11-backend=false
|
||||||
${FEATURE_FLAGS}
|
-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
|
||||||
_build
|
_build
|
||||||
- meson compile -C _build
|
- meson compile -C _build
|
||||||
artifacts:
|
artifacts:
|
||||||
@@ -431,7 +423,13 @@ asan-build:
|
|||||||
-Df16c=disabled
|
-Df16c=disabled
|
||||||
_build
|
_build
|
||||||
- ninja -C _build
|
- ninja -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build wayland gtk
|
- .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"
|
||||||
|
|
||||||
reference:
|
reference:
|
||||||
image: $FEDORA_IMAGE
|
image: $FEDORA_IMAGE
|
||||||
@@ -445,8 +443,9 @@ reference:
|
|||||||
--force-fallback-for=gdk-pixbuf,pango
|
--force-fallback-for=gdk-pixbuf,pango
|
||||||
-Dintrospection=enabled
|
-Dintrospection=enabled
|
||||||
-Ddocumentation=true
|
-Ddocumentation=true
|
||||||
|
-Dgtk_doc=true
|
||||||
-Dgdk-pixbuf:gtk_doc=true
|
-Dgdk-pixbuf:gtk_doc=true
|
||||||
-Dpango:documentation=true
|
-Dpango:gtk_doc=true
|
||||||
-Dbuild-demos=false
|
-Dbuild-demos=false
|
||||||
-Dbuild-examples=false
|
-Dbuild-examples=false
|
||||||
-Dbuild-tests=false
|
-Dbuild-tests=false
|
||||||
@@ -480,4 +479,3 @@ publish-docs:
|
|||||||
- "curl -X POST -F token=${PAGES_TRIGGER_TOKEN} -F ref=docs-gtk-org https://gitlab.gnome.org/api/v4/projects/665/trigger/pipeline"
|
- "curl -X POST -F token=${PAGES_TRIGGER_TOKEN} -F ref=docs-gtk-org https://gitlab.gnome.org/api/v4/projects/665/trigger/pipeline"
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_REF_NAME == "main"
|
- if: $CI_COMMIT_REF_NAME == "main"
|
||||||
|
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
FROM fedora:39
|
FROM fedora:38
|
||||||
|
|
||||||
RUN dnf -y install \
|
RUN dnf -y install \
|
||||||
adwaita-icon-theme \
|
adwaita-icon-theme \
|
||||||
|
atk-devel \
|
||||||
|
at-spi2-atk-devel \
|
||||||
avahi-gobject-devel \
|
avahi-gobject-devel \
|
||||||
cairo-devel \
|
cairo-devel \
|
||||||
cairo-gobject-devel \
|
cairo-gobject-devel \
|
||||||
@@ -16,6 +18,7 @@ RUN dnf -y install \
|
|||||||
dejavu-sans-mono-fonts \
|
dejavu-sans-mono-fonts \
|
||||||
desktop-file-utils \
|
desktop-file-utils \
|
||||||
diffutils \
|
diffutils \
|
||||||
|
docbook-style-xsl \
|
||||||
elfutils-libelf-devel \
|
elfutils-libelf-devel \
|
||||||
expat-devel \
|
expat-devel \
|
||||||
fribidi-devel \
|
fribidi-devel \
|
||||||
|
@@ -24,10 +24,10 @@ flatpak build ${builddir} meson \
|
|||||||
-Dbuild-examples=false \
|
-Dbuild-examples=false \
|
||||||
-Dintrospection=disabled \
|
-Dintrospection=disabled \
|
||||||
-Dbuild-demos=true \
|
-Dbuild-demos=true \
|
||||||
-Dprofile=devel \
|
-Ddemo-profile=devel \
|
||||||
_flatpak_build
|
_flatpak_build
|
||||||
|
|
||||||
flatpak build --env=CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA ${builddir} ninja -C _flatpak_build install
|
flatpak build ${builddir} ninja -C _flatpak_build install
|
||||||
|
|
||||||
flatpak-builder \
|
flatpak-builder \
|
||||||
--user --disable-rofiles-fuse \
|
--user --disable-rofiles-fuse \
|
||||||
|
@@ -324,7 +324,7 @@ for line in args.infile:
|
|||||||
units.append(unit)
|
units.append(unit)
|
||||||
|
|
||||||
report = {}
|
report = {}
|
||||||
report['date'] = datetime.datetime.now(datetime.UTC)
|
report['date'] = datetime.datetime.utcnow()
|
||||||
report['locale_date'] = report['date'].strftime("%c")
|
report['locale_date'] = report['date'].strftime("%c")
|
||||||
report['project_name'] = args.project_name
|
report['project_name'] = args.project_name
|
||||||
report['backend'] = args.backend
|
report['backend'] = args.backend
|
||||||
|
@@ -44,7 +44,7 @@ outfile = args.output
|
|||||||
testsuites = ET.Element('testsuites')
|
testsuites = ET.Element('testsuites')
|
||||||
testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
|
testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
|
||||||
testsuites.set('package', args.project_name)
|
testsuites.set('package', args.project_name)
|
||||||
testsuites.set('timestamp', datetime.datetime.now(datetime.UTC).isoformat(timespec='minutes'))
|
testsuites.set('timestamp', datetime.datetime.utcnow().isoformat(timespec='minutes'))
|
||||||
|
|
||||||
suites = {}
|
suites = {}
|
||||||
for line in args.infile:
|
for line in args.infile:
|
||||||
|
@@ -1,29 +1,27 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -x
|
set +x
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
srcdir=$( pwd )
|
srcdir=$( pwd )
|
||||||
builddir=$1
|
builddir=$1
|
||||||
setup=$2
|
backend=$2
|
||||||
suite=$3
|
|
||||||
multiplier=${MESON_TEST_TIMEOUT_MULTIPLIER:-1}
|
multiplier=${MESON_TEST_TIMEOUT_MULTIPLIER:-1}
|
||||||
|
|
||||||
# Ignore memory leaks lower in dependencies
|
# Ignore memory leaks lower in dependencies
|
||||||
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:detect_leaks=0:allocator_may_return_null=1
|
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:detect_leaks=0:allocator_may_return_null=1
|
||||||
export G_SLICE=always-malloc
|
export G_SLICE=always-malloc
|
||||||
|
|
||||||
case "${setup}" in
|
case "${backend}" in
|
||||||
x11*)
|
x11)
|
||||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--quiet \
|
--quiet \
|
||||||
--timeout-multiplier "${multiplier}" \
|
--timeout-multiplier "${multiplier}" \
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${setup} \
|
--setup=${backend} \
|
||||||
--suite=${suite//,/ --suite=} \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=${setup}_failing \
|
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=headless \
|
--no-suite=headless \
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
@@ -44,19 +42,19 @@ case "${setup}" in
|
|||||||
--quiet \
|
--quiet \
|
||||||
--timeout-multiplier "${multiplier}" \
|
--timeout-multiplier "${multiplier}" \
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${setup} \
|
--setup=${backend} \
|
||||||
--suite=${suite//,/ --suite=} \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=${setup}_failing \
|
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=headless \
|
--no-suite=headless \
|
||||||
|
--no-suite=${backend}_failing \
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|
||||||
kill ${compositor}
|
kill ${compositor}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
broadway*)
|
broadway)
|
||||||
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
||||||
|
|
||||||
${builddir}/gdk/broadway/gtk4-broadwayd :5 &
|
${builddir}/gdk/broadway/gtk4-broadwayd :5 &
|
||||||
@@ -67,10 +65,9 @@ case "${setup}" in
|
|||||||
--quiet \
|
--quiet \
|
||||||
--timeout-multiplier "${multiplier}" \
|
--timeout-multiplier "${multiplier}" \
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${setup} \
|
--setup=${backend} \
|
||||||
--suite=${suite//,/ --suite=} \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=${setup}_failing \
|
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=headless \
|
--no-suite=headless \
|
||||||
--no-suite=gsk-compare-opengl
|
--no-suite=gsk-compare-opengl
|
||||||
@@ -79,7 +76,7 @@ case "${setup}" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "Failed to add ${setup} to .gitlab-ci/run-tests.sh"
|
echo "Failed to add ${backend} to .gitlab-ci/run-tests.sh"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -89,17 +86,17 @@ cd ${builddir}
|
|||||||
|
|
||||||
$srcdir/.gitlab-ci/meson-junit-report.py \
|
$srcdir/.gitlab-ci/meson-junit-report.py \
|
||||||
--project-name=gtk \
|
--project-name=gtk \
|
||||||
--backend="${setup}" \
|
--backend="${backend}" \
|
||||||
--job-id="${CI_JOB_NAME}" \
|
--job-id="${CI_JOB_NAME}" \
|
||||||
--output="report-${setup}.xml" \
|
--output="report-${backend}.xml" \
|
||||||
"meson-logs/testlog-${setup}.json"
|
"meson-logs/testlog-${backend}.json"
|
||||||
|
|
||||||
$srcdir/.gitlab-ci/meson-html-report.py \
|
$srcdir/.gitlab-ci/meson-html-report.py \
|
||||||
--project-name=gtk \
|
--project-name=gtk \
|
||||||
--backend="${setup}" \
|
--backend="${backend}" \
|
||||||
--job-id="${CI_JOB_NAME}" \
|
--job-id="${CI_JOB_NAME}" \
|
||||||
--reftest-output-dir="testsuite/reftests/output/${setup}" \
|
--reftest-output-dir="testsuite/reftests/output/${backend}" \
|
||||||
--output="report-${setup}.html" \
|
--output="report-${backend}.html" \
|
||||||
"meson-logs/testlog-${setup}.json"
|
"meson-logs/testlog-${backend}.json"
|
||||||
|
|
||||||
exit $exit_code
|
exit $exit_code
|
||||||
|
@@ -3,11 +3,6 @@
|
|||||||
set -eux -o pipefail
|
set -eux -o pipefail
|
||||||
|
|
||||||
xcodebuild -version || :
|
xcodebuild -version || :
|
||||||
|
xcodebuild -showsdks || :
|
||||||
if [ -z "$SDKROOT" ]; then
|
|
||||||
xcodebuild -showsdks || :
|
|
||||||
else
|
|
||||||
echo "SDKROOT = $SDKROOT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
system_profiler SPSoftwareDataType || :
|
system_profiler SPSoftwareDataType || :
|
@@ -6,7 +6,7 @@ call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliar
|
|||||||
|
|
||||||
:: FIXME: make warnings fatal
|
:: FIXME: make warnings fatal
|
||||||
pip3 install --upgrade --user meson~=0.64 || goto :error
|
pip3 install --upgrade --user meson~=0.64 || goto :error
|
||||||
meson setup -Dbackend_max_links=1 -Ddebug=false -Dmedia-gstreamer=disabled -Dvulkan=disabled _build || goto :error
|
meson setup -Dbackend_max_links=1 -Ddebug=false -Dmedia-gstreamer=disabled _build || goto :error
|
||||||
ninja -C _build || goto :error
|
ninja -C _build || goto :error
|
||||||
|
|
||||||
goto :EOF
|
goto :EOF
|
||||||
|
@@ -33,9 +33,7 @@ pacman --noconfirm -S --needed \
|
|||||||
mingw-w64-$MSYS2_ARCH-gst-plugins-bad-libs \
|
mingw-w64-$MSYS2_ARCH-gst-plugins-bad-libs \
|
||||||
mingw-w64-$MSYS2_ARCH-shared-mime-info \
|
mingw-w64-$MSYS2_ARCH-shared-mime-info \
|
||||||
mingw-w64-$MSYS2_ARCH-python-gobject \
|
mingw-w64-$MSYS2_ARCH-python-gobject \
|
||||||
mingw-w64-$MSYS2_ARCH-shaderc \
|
mingw-w64-$MSYS2_ARCH-shaderc
|
||||||
mingw-w64-$MSYS2_ARCH-vulkan \
|
|
||||||
mingw-w64-$MSYS2_ARCH-vulkan-headers
|
|
||||||
|
|
||||||
mkdir -p _ccache
|
mkdir -p _ccache
|
||||||
export CCACHE_BASEDIR="$(pwd)"
|
export CCACHE_BASEDIR="$(pwd)"
|
||||||
@@ -45,10 +43,11 @@ export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
|||||||
ccache --zero-stats
|
ccache --zero-stats
|
||||||
ccache --show-stats
|
ccache --show-stats
|
||||||
export CCACHE_DISABLE=true
|
export CCACHE_DISABLE=true
|
||||||
meson setup \
|
meson \
|
||||||
-Dx11-backend=false \
|
-Dx11-backend=false \
|
||||||
-Dwayland-backend=false \
|
-Dwayland-backend=false \
|
||||||
-Dwin32-backend=true \
|
-Dwin32-backend=true \
|
||||||
|
-Dvulkan=disabled \
|
||||||
-Dintrospection=enabled \
|
-Dintrospection=enabled \
|
||||||
-Dgtk:werror=true \
|
-Dgtk:werror=true \
|
||||||
_build
|
_build
|
||||||
|
@@ -35,7 +35,7 @@ The issue tracker is meant to be used for actionable issues only.
|
|||||||
|
|
||||||
You should not open a new issue for security related questions.
|
You should not open a new issue for security related questions.
|
||||||
|
|
||||||
When in doubt, follow the process for [GNOME security issues](https://security.gnome.org/).
|
When in doubt, follow [security](https://security.gnome.org/).
|
||||||
|
|
||||||
### Bug reports
|
### Bug reports
|
||||||
|
|
||||||
@@ -144,28 +144,33 @@ $ git clone https://gitlab.gnome.org/yourusername/gtk.git
|
|||||||
$ cd gtk
|
$ cd gtk
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Note**: if you plan to push changes to back to the main repository and
|
||||||
|
have a GNOME account, you can skip the fork, and use the following instead:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ git clone git@gitlab.gnome.org:GNOME/gtk.git
|
||||||
|
$ cd gtk
|
||||||
|
```
|
||||||
|
|
||||||
To compile the Git version of GTK on your system, you will need to
|
To compile the Git version of GTK on your system, you will need to
|
||||||
configure your build using Meson:
|
configure your build using Meson:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ meson setup _builddir .
|
$ meson _builddir .
|
||||||
$ meson compile -C _builddir
|
$ cd _builddir
|
||||||
|
$ ninja
|
||||||
```
|
```
|
||||||
|
|
||||||
Typically, you should work on your own branch:
|
Typically, you should work on your own branch:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ git switch -C your-branch
|
$ git checkout -b your-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
Once you've finished working on the bug fix or feature, push the branch
|
Once you've finished working on the bug fix or feature, push the branch
|
||||||
to the Git repository and open a new merge request, to let the GTK
|
to the Git repository and open a new merge request, to let the GTK
|
||||||
maintainers review your contribution.
|
maintainers review your contribution.
|
||||||
|
|
||||||
**Important**: Do **not** attach a diff or a patch file to a GitLab issue.
|
|
||||||
Patches cannot be reviewed, and do not not go through the CI pipeline. If
|
|
||||||
you wish to submit your changes to GTK, always use a merge request.
|
|
||||||
|
|
||||||
### Code reviews
|
### Code reviews
|
||||||
|
|
||||||
Each contribution is reviewed by the core developers of the GTK project.
|
Each contribution is reviewed by the core developers of the GTK project.
|
||||||
@@ -208,7 +213,7 @@ Closes #1234
|
|||||||
`git commit -a --author "Joe Coder <joe@coder.org>"` and `--signoff`.
|
`git commit -a --author "Joe Coder <joe@coder.org>"` and `--signoff`.
|
||||||
|
|
||||||
- If your commit is addressing an issue, use the
|
- If your commit is addressing an issue, use the
|
||||||
[GitLab syntax](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
[GitLab syntax](https://docs.gitlab.com/ce/user/project/issues/automatic_issue_closing.html)
|
||||||
to automatically close the issue when merging the commit with the upstream
|
to automatically close the issue when merging the commit with the upstream
|
||||||
repository:
|
repository:
|
||||||
|
|
||||||
@@ -257,4 +262,4 @@ people committing to GTK to follow a few rules:
|
|||||||
|
|
||||||
If you have been contributing to GTK for a while and you don't have commit
|
If you have been contributing to GTK for a while and you don't have commit
|
||||||
access to the repository, you may ask to obtain it following the [GNOME account
|
access to the repository, you may ask to obtain it following the [GNOME account
|
||||||
process](https://handbook.gnome.org/infrastructure/developer-access.html).
|
process](https://wiki.gnome.org/AccountsTeam/NewAccounts).
|
||||||
|
709
NEWS
@@ -1,705 +1,6 @@
|
|||||||
Overview of Changes in 4.15.1, xx-xx-xxxx
|
Overview of Changes in 4.13.2, xx-xx-xxxx
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
* GtkGraphicsOffload:
|
|
||||||
- Don't crash without a child
|
|
||||||
|
|
||||||
* CSS:
|
|
||||||
- Support the :root selector
|
|
||||||
- Support variables and custom properties
|
|
||||||
|
|
||||||
* Icontheme:
|
|
||||||
- Make symbolic svg loading more efficient
|
|
||||||
- Handle color-free symbolics more efficiently
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Make the gtk-demo sidebar search more accessible
|
|
||||||
- Stop emitting focus events
|
|
||||||
- Realize child contexts when necessary
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- Support XDG_ACTIVATION_TOKEN
|
|
||||||
- dmabuf: Be more defensive when importing unknown formats to GL
|
|
||||||
- dmabuf: Use narrow range for YUV
|
|
||||||
- vulkan: Recreate swapchains when necessary or beneficial
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Improve logging for GDK_DEBUG=offload
|
|
||||||
- Improve logging for GSK_DEBUG=renderer
|
|
||||||
- gpu: Warn about inefficient texture import
|
|
||||||
- gpu: Handle tiny offscreens correctly
|
|
||||||
- vulkan: Add profiler marks in various places
|
|
||||||
- vulkan: Fix a problem with imported dmabufs showing up black
|
|
||||||
- cairo: Speed up mask nodes, since we use them for symbolic icons
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Use wl_compositor version 6
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Implement a missing method
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Fix many ubsan warnings
|
|
||||||
|
|
||||||
* Debugging:
|
|
||||||
- Show more texture details in the recorder
|
|
||||||
|
|
||||||
* macOS:
|
|
||||||
- Fix problems with events handed back to the OS
|
|
||||||
- Respect GDK_DEBUG=default-settings
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Korean
|
|
||||||
Portuguese
|
|
||||||
Turkish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.15.0, 21-04-2024
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
This release changes the default GSK renderer to be Vulkan, on
|
|
||||||
Wayland. Other platforms still use ngl.
|
|
||||||
|
|
||||||
The intent of this change is to get wider testing and verify that
|
|
||||||
Vulkan drivers are good enough for us to rely on. If significant
|
|
||||||
problems show up, we will revert this change for 4.16.
|
|
||||||
|
|
||||||
You can still override the renderer choice using the GSK_RENDERER
|
|
||||||
environment variable.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This release also changes font rendering settings by introducing
|
|
||||||
a new high-level gtk-font-rendering settings which gives GTK more
|
|
||||||
freedom to decide on font rendering.
|
|
||||||
|
|
||||||
You can still use the low-level font-related settings by changing
|
|
||||||
the new property to 'manual'.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
* GtkColumnView:
|
|
||||||
- Fix infinite loops in dispose
|
|
||||||
- Fix problems with weak ref cycles in GtkExpression
|
|
||||||
|
|
||||||
* GtkListView:
|
|
||||||
* GtkShortcutManager:
|
|
||||||
- Track the propagation phase of added controllers
|
|
||||||
|
|
||||||
* GtkGLArea:
|
|
||||||
- Produce dmabuf textures, so graphics offload is possible
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Support text shadows
|
|
||||||
|
|
||||||
* GtkGraphicsOffload:
|
|
||||||
- Add a black-background property
|
|
||||||
|
|
||||||
* Settings:
|
|
||||||
- Add a new gtk-font-rendering setting
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Add support for GetRangeExtents to GtkAccessibleText
|
|
||||||
- Add support for GetOffsetAtPoint to GtkAccessibleText
|
|
||||||
- Implement GtkAccessibleRange for scrollbars
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- Add a callback-based cursor API
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Use the Vulkan renderer by default
|
|
||||||
- Avoid an infinite recursion with offscreens in some cases
|
|
||||||
- Optimize graphics offload to make it more likely that compositors
|
|
||||||
can use direct scanout
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Fix some confusing debug messages
|
|
||||||
- Drop a no-longer-relevant optimization that was interfering with
|
|
||||||
getting the current window manager capabilities
|
|
||||||
|
|
||||||
* macOS:
|
|
||||||
- Implement the color picker for macOS 10.15+
|
|
||||||
|
|
||||||
* Debugging:
|
|
||||||
- Snow monitor resolution in the inspector
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Use graphics offload in the shadertoy demo
|
|
||||||
- Show more reliable fps numbers in the fishbowl demo
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- Support generating pdf in gtk4-rendernode-tool
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Require pango 1.52
|
|
||||||
- Require cairo 1.18
|
|
||||||
- Add a missing dependency that was causing build failures
|
|
||||||
- Drop deprecated build options:
|
|
||||||
gtk_doc -> documentation
|
|
||||||
update_screenshots -> screenshots
|
|
||||||
demo-profile -> profile
|
|
||||||
demos -> build-demos
|
|
||||||
|
|
||||||
* Deprecations:
|
|
||||||
- gdk_widget_set/get_font_options
|
|
||||||
- gdk_wayland/x11_display_set_cursor_theme
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Basque
|
|
||||||
Brazilian Portuguese
|
|
||||||
British English
|
|
||||||
Chinese (China)
|
|
||||||
Hebrew
|
|
||||||
Kabyle
|
|
||||||
Persian
|
|
||||||
Polish
|
|
||||||
Russian
|
|
||||||
Slovenian
|
|
||||||
Swedish
|
|
||||||
Turkish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.14.2, 03-04-2024
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkScale:
|
|
||||||
- Improve positioning of values in some cases
|
|
||||||
|
|
||||||
* Theme:
|
|
||||||
- Make progress in entries visible
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Fix text insertion handling
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- dnd: Use the default cursor durion motion
|
|
||||||
- dnd: Use a better cursor for indicating the move action
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- gl: Handle offloads in offscreen context better
|
|
||||||
- Fix text rendering problems with some fonts
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Tighten up some protocol version checks
|
|
||||||
- Use the presentation time protocol
|
|
||||||
- Fix a crash with subsurfaces
|
|
||||||
- Improve settings portal handling
|
|
||||||
|
|
||||||
* macOS:
|
|
||||||
- Fix up the app menu support
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Fix problems with minimization
|
|
||||||
- Fix build without fontconfig
|
|
||||||
|
|
||||||
* Debugging:
|
|
||||||
- Add font settings in the inspector
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Clean up the application demo
|
|
||||||
- Update cursor images for the cursor demo
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Catalan
|
|
||||||
Czech
|
|
||||||
French
|
|
||||||
Georgian
|
|
||||||
Hebrew
|
|
||||||
Persian
|
|
||||||
Slovenian
|
|
||||||
Turkish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.14.1, 16-03-2024
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* 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:
|
|
||||||
- Fix presentation selector handling
|
|
||||||
|
|
||||||
* GtkSnapshot:
|
|
||||||
- Fix wrong nodes with transformed shadows
|
|
||||||
|
|
||||||
* GtkIMContext:
|
|
||||||
- Make gtk_im_context_activate_osk public
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Implement get_contents_at for all our text widgets
|
|
||||||
- Add GtkAccessibleText.get_default_attributes
|
|
||||||
|
|
||||||
* 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
|
|
||||||
|
|
||||||
* 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 handling of output scales
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- Add a compare command to gtk4-rendernode-tool
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Fix some ubsan complaints
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Basque
|
|
||||||
British English
|
|
||||||
Catalan
|
|
||||||
Finnish
|
|
||||||
Galician
|
|
||||||
Georgian
|
|
||||||
Hebrew
|
|
||||||
Indonesian
|
|
||||||
Kazakh
|
|
||||||
Latvian
|
|
||||||
Lithuanian
|
|
||||||
Persian
|
|
||||||
Polish
|
|
||||||
Russian
|
|
||||||
Slovenian
|
|
||||||
Spanish
|
|
||||||
Turkish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.8, 20-02-2024
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Add a GtkAccessibleText interface for allowing 3rd party
|
|
||||||
text widgets (notably vte) to be accessible
|
|
||||||
- Avoid duplicate accessible descriptions
|
|
||||||
- Fix GetAccessibleAtPoint
|
|
||||||
|
|
||||||
* 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
|
|
||||||
|
|
||||||
* build:
|
|
||||||
- Allow building without dmabuf support on (old) Linux
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Fix monitor enter/leave signals
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Basque
|
|
||||||
Brazilian Portuguese
|
|
||||||
Catalan
|
|
||||||
Czech
|
|
||||||
Galician
|
|
||||||
Georgian
|
|
||||||
Hebrew
|
|
||||||
Lithuanian
|
|
||||||
Persian
|
|
||||||
Russian
|
|
||||||
Turkish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.7, 11-02-2024
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Speed up opening
|
|
||||||
|
|
||||||
* GtkCalendar:
|
|
||||||
- Add some missing setters and getters
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Add socket support for webkit accessibility
|
|
||||||
- Implement AT-SPI text for GtkText
|
|
||||||
- Implement AT-SPI component generically
|
|
||||||
- Add an announce API
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- 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
|
|
||||||
|
|
||||||
* macOS:
|
|
||||||
- Propagate unhandled input events back to the OS
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- Make the crash handling in gtk4-node-editor more robust
|
|
||||||
|
|
||||||
* Translation updates
|
|
||||||
Galician
|
|
||||||
Georgian
|
|
||||||
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
|
|
||||||
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.13.1, 28-09-2023
|
Overview of Changes in 4.13.1, 28-09-2023
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
@@ -1051,7 +352,7 @@ Overview of Changes in 4.11.4, 03-07-2023
|
|||||||
- Center newly created transient windows
|
- Center newly created transient windows
|
||||||
|
|
||||||
* Vulkan:
|
* Vulkan:
|
||||||
- Add antialiasing for gradients
|
- Add antialising for gradients
|
||||||
- Do less work on clipped away nodes
|
- Do less work on clipped away nodes
|
||||||
- Redo image uploading
|
- Redo image uploading
|
||||||
- Support different image depths and formats
|
- Support different image depths and formats
|
||||||
@@ -2035,7 +1336,7 @@ Overview of Changes in 4.7.0, 07-05-2022
|
|||||||
- Event handling fixes
|
- Event handling fixes
|
||||||
- Fix keyboard input on popovers
|
- Fix keyboard input on popovers
|
||||||
- Support OpenGL-based video playback
|
- Support OpenGL-based video playback
|
||||||
- Support fullscreen
|
- Suport fullscreen
|
||||||
- Improve native filechoooser size allocation
|
- Improve native filechoooser size allocation
|
||||||
- Use CALayer and IOSurface for rendering
|
- Use CALayer and IOSurface for rendering
|
||||||
- Use a per-monitor CVDisplayLink
|
- Use a per-monitor CVDisplayLink
|
||||||
@@ -2432,7 +1733,7 @@ Overview of Changes in 4.4.0
|
|||||||
- Activate when moving focus
|
- Activate when moving focus
|
||||||
|
|
||||||
* GtkLabel:
|
* GtkLabel:
|
||||||
- Properly ignore double underscores for mnemonics
|
- Propertly ignore double underscores for mnemonics
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
* GtkPopoverMenu:
|
||||||
- Fix focus cycling
|
- Fix focus cycling
|
||||||
@@ -2979,7 +2280,7 @@ Overview of Changes in 4.1.0
|
|||||||
- Set sort arrows in CSS
|
- Set sort arrows in CSS
|
||||||
- Set menu button arrows in CSS
|
- Set menu button arrows in CSS
|
||||||
- Make scrollbars larger
|
- Make scrollbars larger
|
||||||
- Support circular menubuttons
|
- Supprt circular menubuttons
|
||||||
|
|
||||||
* CSS:
|
* CSS:
|
||||||
- Implement transform-origin
|
- Implement transform-origin
|
||||||
|
@@ -125,7 +125,7 @@ version, for example `gtk-4-10`.
|
|||||||
How to report bugs
|
How to report bugs
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
Bugs should be reported on the [issues page](https://gitlab.gnome.org/GNOME/gtk/issues/).
|
Bugs should be reported on the [issues page](https://gitlab.gnome.org/GNOME/gtk/issues/new).
|
||||||
|
|
||||||
In the bug report please include:
|
In the bug report please include:
|
||||||
|
|
||||||
|
@@ -185,8 +185,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
@@ -114,8 +114,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
@@ -114,8 +114,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
@@ -130,6 +131,7 @@
|
|||||||
"env" : {
|
"env" : {
|
||||||
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
||||||
"GSK_RENDERER" : "opengl",
|
"GSK_RENDERER" : "opengl",
|
||||||
|
"GDK_DEBUG" : "vulkan-disable",
|
||||||
"G_ENABLE_DEBUG" : "true"
|
"G_ENABLE_DEBUG" : "true"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -114,8 +114,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Dprofile=devel"
|
"-Ddemo-profile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
@@ -130,6 +131,7 @@
|
|||||||
"env" : {
|
"env" : {
|
||||||
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
||||||
"GSK_RENDERER" : "opengl",
|
"GSK_RENDERER" : "opengl",
|
||||||
|
"GDK_DEBUG" : "vulkan-disable",
|
||||||
"G_ENABLE_DEBUG" : "true"
|
"G_ENABLE_DEBUG" : "true"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,41 +0,0 @@
|
|||||||
#ifndef _MSC_VER
|
|
||||||
#pragma error "This header is for Microsoft VC or clang-cl only."
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
/* Make MSVC more pedantic, this is a recommended pragma list
|
|
||||||
* from _Win32_Programming_ by Rector and Newcomer.
|
|
||||||
*/
|
|
||||||
#ifndef __clang__
|
|
||||||
#pragma warning(error:4002) /* too many actual parameters for macro */
|
|
||||||
#pragma warning(error:4003) /* not enough actual parameters for macro */
|
|
||||||
#pragma warning(1:4010) /* single-line comment contains line-continuation character */
|
|
||||||
#pragma warning(error:4013) /* 'function' undefined; assuming extern returning int */
|
|
||||||
#pragma warning(1:4016) /* no function return type; using int as default */
|
|
||||||
#pragma warning(error:4020) /* too many actual parameters */
|
|
||||||
#pragma warning(error:4021) /* too few actual parameters */
|
|
||||||
#pragma warning(error:4027) /* function declared without formal parameter list */
|
|
||||||
#pragma warning(error:4029) /* declared formal parameter list different from definition */
|
|
||||||
#pragma warning(error:4033) /* 'function' must return a value */
|
|
||||||
#pragma warning(error:4035) /* 'function' : no return value */
|
|
||||||
#pragma warning(error:4045) /* array bounds overflow */
|
|
||||||
#pragma warning(error:4047) /* different levels of indirection */
|
|
||||||
#pragma warning(error:4049) /* terminating line number emission */
|
|
||||||
#pragma warning(error:4053) /* An expression of type void was used as an operand */
|
|
||||||
#pragma warning(error:4071) /* no function prototype given */
|
|
||||||
#pragma warning(disable:4101) /* unreferenced local variable */
|
|
||||||
#pragma warning(error:4150)
|
|
||||||
|
|
||||||
/* G_NORETURN */
|
|
||||||
#pragma warning(error:4646) /* function declared with __declspec(noreturn) has non-void return type */
|
|
||||||
#pragma warning(error:4715) /* 'function': not all control paths return a value */
|
|
||||||
#pragma warning(error:4098) /* 'void' function returning a value */
|
|
||||||
|
|
||||||
#pragma warning(disable:4244) /* No possible loss of data warnings */
|
|
||||||
#pragma warning(disable:4305) /* No truncation from int to char warnings */
|
|
||||||
|
|
||||||
#pragma warning(error:4819) /* The file contains a character that cannot be represented in the current code page */
|
|
||||||
#endif /* __clang__ */
|
|
||||||
|
|
||||||
/* work around Microsoft's premature attempt to deprecate the C-Library */
|
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
|
||||||
#define _CRT_NONSTDC_NO_WARNINGS
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -35,7 +35,7 @@ show_action_dialog (GSimpleAction *action)
|
|||||||
{
|
{
|
||||||
GtkAlertDialog *dialog;
|
GtkAlertDialog *dialog;
|
||||||
|
|
||||||
dialog = gtk_alert_dialog_new ("You activated action: \"%s\"",
|
dialog = gtk_alert_dialog_new ("You activated action: \"%s\n",
|
||||||
g_action_get_name (G_ACTION (action)));
|
g_action_get_name (G_ACTION (action)));
|
||||||
gtk_alert_dialog_show (dialog, NULL);
|
gtk_alert_dialog_show (dialog, NULL);
|
||||||
g_object_unref (dialog);
|
g_object_unref (dialog);
|
||||||
|
@@ -18,7 +18,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __BLUR_OVERLAY_H__
|
||||||
|
#define __BLUR_OVERLAY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -59,3 +60,5 @@ void blur_overlay_set_child (BlurOverlay *overlay,
|
|||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __BLUR_OVERLAY_H__ */
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -15,54 +15,12 @@ on_destroy (gpointer data)
|
|||||||
window = NULL;
|
window = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkTexture *
|
|
||||||
cursor_callback (GdkCursor *cursor,
|
|
||||||
int cursor_size,
|
|
||||||
double scale,
|
|
||||||
int *width,
|
|
||||||
int *height,
|
|
||||||
int *hotspot_x,
|
|
||||||
int *hotspot_y,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
GdkPixbuf *pixbuf;
|
|
||||||
GdkTexture *texture;
|
|
||||||
GError *error = NULL;
|
|
||||||
int scaled_size;
|
|
||||||
|
|
||||||
scaled_size = ceil (cursor_size * scale);
|
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_new_from_resource_at_scale ("/cursors/images/gtk-logo.svg",
|
|
||||||
scaled_size, scaled_size,
|
|
||||||
TRUE,
|
|
||||||
&error);
|
|
||||||
if (!pixbuf)
|
|
||||||
{
|
|
||||||
g_print ("%s\n", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
texture = gdk_texture_new_for_pixbuf (pixbuf);
|
|
||||||
|
|
||||||
g_object_unref (pixbuf);
|
|
||||||
|
|
||||||
*width = cursor_size;
|
|
||||||
*height = cursor_size;
|
|
||||||
*hotspot_x = 18 * cursor_size / 32.0;
|
|
||||||
*hotspot_y = 2 * cursor_size / 32.0;
|
|
||||||
|
|
||||||
return texture;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_cursors (GtkWidget *do_widget)
|
do_cursors (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
GtkWidget *logo_callback;
|
|
||||||
GdkCursor *cursor;
|
|
||||||
|
|
||||||
builder = gtk_builder_new_from_resource ("/cursors/cursors.ui");
|
builder = gtk_builder_new_from_resource ("/cursors/cursors.ui");
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||||
@@ -71,10 +29,6 @@ do_cursors (GtkWidget *do_widget)
|
|||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
g_signal_connect (window, "destroy",
|
g_signal_connect (window, "destroy",
|
||||||
G_CALLBACK (on_destroy), NULL);
|
G_CALLBACK (on_destroy), NULL);
|
||||||
logo_callback = GTK_WIDGET (gtk_builder_get_object (builder, "logo_callback"));
|
|
||||||
cursor = gdk_cursor_new_from_callback (cursor_callback, NULL, NULL, NULL);
|
|
||||||
gtk_widget_set_cursor (logo_callback, cursor);
|
|
||||||
g_object_unref (cursor);
|
|
||||||
g_object_unref (builder);
|
g_object_unref (builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -116,7 +116,6 @@
|
|||||||
<file>w_resize_cursor.png</file>
|
<file>w_resize_cursor.png</file>
|
||||||
<file>zoom_in_cursor.png</file>
|
<file>zoom_in_cursor.png</file>
|
||||||
<file>zoom_out_cursor.png</file>
|
<file>zoom_out_cursor.png</file>
|
||||||
<file>gtk-logo.svg</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/dnd">
|
<gresource prefix="/dnd">
|
||||||
<file>dnd.css</file>
|
<file>dnd.css</file>
|
||||||
|
@@ -75,9 +75,7 @@ query_tooltip (GtkWidget *widget,
|
|||||||
gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
|
gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
|
||||||
|
|
||||||
precision = 1;
|
precision = 1;
|
||||||
s = NULL;
|
|
||||||
do {
|
do {
|
||||||
g_free (s);
|
|
||||||
s = g_strdup_printf ("%.*f", precision, self->scale);
|
s = g_strdup_printf ("%.*f", precision, self->scale);
|
||||||
l = strlen (s) - 1;
|
l = strlen (s) - 1;
|
||||||
while (s[l] == '0')
|
while (s[l] == '0')
|
||||||
|
@@ -18,7 +18,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __DEMO_TAGGED_ENTRY_H__
|
||||||
|
#define __DEMO_TAGGED_ENTRY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -56,3 +57,5 @@ void demo_tagged_entry_tag_set_has_close_button (DemoTaggedEntryTag *
|
|||||||
gboolean has_close_button);
|
gboolean has_close_button);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __DEMO_TAGGED_ENTRY_H__ */
|
||||||
|
@@ -184,12 +184,6 @@ create_cogs (void)
|
|||||||
return picture;
|
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
|
static void
|
||||||
mapped (GtkWidget *w)
|
mapped (GtkWidget *w)
|
||||||
{
|
{
|
||||||
@@ -224,41 +218,36 @@ create_graph (void)
|
|||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
GtkWidget * (* create_func) (void);
|
GtkWidget * (*create_func) (void);
|
||||||
gboolean (* check) (GtkFishbowl *fb);
|
|
||||||
} widget_types[] = {
|
} widget_types[] = {
|
||||||
{ "Icon", create_icon, NULL },
|
{ "Icon", create_icon },
|
||||||
{ "Button", create_button, NULL },
|
{ "Button", create_button },
|
||||||
{ "Blurbutton", create_blurred_button, NULL },
|
{ "Blurbutton", create_blurred_button },
|
||||||
{ "Fontbutton", create_font_button, NULL },
|
{ "Fontbutton", create_font_button },
|
||||||
{ "Levelbar", create_level_bar, NULL },
|
{ "Levelbar", create_level_bar },
|
||||||
{ "Label", create_label, NULL },
|
{ "Label", create_label },
|
||||||
{ "Spinner", create_spinner, NULL },
|
{ "Spinner", create_spinner },
|
||||||
{ "Spinbutton", create_spinbutton, NULL },
|
{ "Spinbutton", create_spinbutton },
|
||||||
{ "Video", create_video, NULL },
|
{ "Video", create_video },
|
||||||
{ "Gears", create_gears, NULL },
|
{ "Gears", create_gears },
|
||||||
{ "Switch", create_switch, NULL },
|
{ "Switch", create_switch },
|
||||||
{ "Menubutton", create_menu_button, NULL },
|
{ "Menubutton", create_menu_button },
|
||||||
{ "Shader", create_cogs, check_cogs },
|
{ "Shader", create_cogs },
|
||||||
{ "Tiger", create_tiger, NULL },
|
{ "Tiger", create_tiger },
|
||||||
{ "Graph", create_graph, NULL },
|
{ "Graph", create_graph },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int selected_widget_type = -1;
|
static int selected_widget_type = -1;
|
||||||
static const int N_WIDGET_TYPES = G_N_ELEMENTS (widget_types);
|
static const int N_WIDGET_TYPES = G_N_ELEMENTS (widget_types);
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
set_widget_type (GtkFishbowl *fishbowl,
|
set_widget_type (GtkFishbowl *fishbowl,
|
||||||
int widget_type_index)
|
int widget_type_index)
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
|
|
||||||
if (widget_type_index == selected_widget_type)
|
if (widget_type_index == selected_widget_type)
|
||||||
return TRUE;
|
return;
|
||||||
|
|
||||||
if (widget_types[widget_type_index].check != NULL &&
|
|
||||||
!widget_types[widget_type_index].check (fishbowl))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
selected_widget_type = widget_type_index;
|
selected_widget_type = widget_type_index;
|
||||||
|
|
||||||
@@ -268,8 +257,6 @@ set_widget_type (GtkFishbowl *fishbowl,
|
|||||||
window = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (fishbowl)));
|
window = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (fishbowl)));
|
||||||
gtk_window_set_title (GTK_WINDOW (window),
|
gtk_window_set_title (GTK_WINDOW (window),
|
||||||
widget_types[selected_widget_type].name);
|
widget_types[selected_widget_type].name);
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
G_MODULE_EXPORT void
|
||||||
@@ -277,17 +264,14 @@ fishbowl_next_button_clicked_cb (GtkButton *source,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkFishbowl *fishbowl = user_data;
|
GtkFishbowl *fishbowl = user_data;
|
||||||
int new_index = selected_widget_type;
|
int new_index;
|
||||||
|
|
||||||
do
|
if (selected_widget_type + 1 >= N_WIDGET_TYPES)
|
||||||
{
|
new_index = 0;
|
||||||
if (new_index + 1 >= N_WIDGET_TYPES)
|
else
|
||||||
new_index = 0;
|
new_index = selected_widget_type + 1;
|
||||||
else
|
|
||||||
new_index = new_index + 1;
|
|
||||||
|
|
||||||
}
|
set_widget_type (fishbowl, new_index);
|
||||||
while (!set_widget_type (fishbowl, new_index));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
G_MODULE_EXPORT void
|
||||||
@@ -295,18 +279,14 @@ fishbowl_prev_button_clicked_cb (GtkButton *source,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkFishbowl *fishbowl = user_data;
|
GtkFishbowl *fishbowl = user_data;
|
||||||
int new_index = selected_widget_type;
|
int new_index;
|
||||||
|
|
||||||
do
|
if (selected_widget_type - 1 < 0)
|
||||||
{
|
new_index = N_WIDGET_TYPES - 1;
|
||||||
if (new_index - 1 < 0)
|
else
|
||||||
new_index = N_WIDGET_TYPES - 1;
|
new_index = selected_widget_type - 1;
|
||||||
else
|
|
||||||
new_index = new_index - 1;
|
|
||||||
|
|
||||||
}
|
set_widget_type (fishbowl, new_index);
|
||||||
|
|
||||||
while (!set_widget_type (fishbowl, new_index));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
G_MODULE_EXPORT void
|
||||||
|
@@ -600,8 +600,8 @@ update_display (void)
|
|||||||
if (s->len > 0)
|
if (s->len > 0)
|
||||||
{
|
{
|
||||||
pango_font_description_set_variations (desc, s->str);
|
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);
|
font_desc = pango_font_description_to_string (desc);
|
||||||
|
|
||||||
@@ -1586,7 +1586,7 @@ update_font_variations (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), combo, 1, -1, 3, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), combo, 1, -1, 3, 1);
|
||||||
g_signal_connect (combo, "notify::selected", G_CALLBACK (instance_changed), NULL);
|
g_signal_connect (combo, "notify::selecte", G_CALLBACK (instance_changed), NULL);
|
||||||
demo->instance_combo = combo;
|
demo->instance_combo = combo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -363,9 +363,7 @@ insert_markup_idle (gpointer data)
|
|||||||
|
|
||||||
if (g_get_monotonic_time () - begin > G_TIME_SPAN_MILLISECOND)
|
if (g_get_monotonic_time () - begin > G_TIME_SPAN_MILLISECOND)
|
||||||
{
|
{
|
||||||
guint id;
|
g_idle_add (insert_markup_idle, data);
|
||||||
id = g_idle_add (insert_markup_idle, data);
|
|
||||||
g_source_set_name_by_id (id, "[gtk-demo] insert_markup_idle");
|
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,9 +398,7 @@ parse_markup_idle (gpointer data)
|
|||||||
do {
|
do {
|
||||||
if (g_get_monotonic_time () - begin > G_TIME_SPAN_MILLISECOND)
|
if (g_get_monotonic_time () - begin > G_TIME_SPAN_MILLISECOND)
|
||||||
{
|
{
|
||||||
guint id;
|
g_idle_add (parse_markup_idle, data);
|
||||||
id = g_idle_add (parse_markup_idle, data);
|
|
||||||
g_source_set_name_by_id (id, "[gtk-demo] parse_markup_idle");
|
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GTK_FONT_PLANE_H__
|
||||||
|
#define __GTK_FONT_PLANE_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -59,3 +60,5 @@ GtkWidget * gtk_font_plane_new (GtkAdjustment *width_adj,
|
|||||||
GtkAdjustment *weight_adj);
|
GtkAdjustment *weight_adj);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_FONT_PLANE_H__ */
|
||||||
|
@@ -17,7 +17,8 @@
|
|||||||
* Authors: Matthias Clasen <mclasen@redhat.com>
|
* Authors: Matthias Clasen <mclasen@redhat.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GSK_SHADER_PAINTABLE_H__
|
||||||
|
#define __GSK_SHADER_PAINTABLE_H__
|
||||||
|
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
#include <gsk/gsk.h>
|
#include <gsk/gsk.h>
|
||||||
@@ -41,3 +42,5 @@ void gsk_shader_paintable_update_time (GskShaderPaintable *self
|
|||||||
int time_idx,
|
int time_idx,
|
||||||
gint64 frame_time);
|
gint64 frame_time);
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GSK_SHADER_PAINTABLE_H__ */
|
||||||
|
@@ -1,138 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="128"
|
|
||||||
height="128"
|
|
||||||
id="svg6843"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
|
||||||
version="1.0"
|
|
||||||
sodipodi:docname="gtk-logo.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
|
||||||
inkscape:export-filename="/home/ebassi/Pictures/gtk-logo-256.png"
|
|
||||||
inkscape:export-xdpi="192"
|
|
||||||
inkscape:export-ydpi="192">
|
|
||||||
<defs
|
|
||||||
id="defs6845">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="-50 : 600 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="700 : 600 : 1"
|
|
||||||
inkscape:persp3d-origin="300 : 400 : 1"
|
|
||||||
id="perspective13" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="2.8284271"
|
|
||||||
inkscape:cx="69.874353"
|
|
||||||
inkscape:cy="64.313526"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
width="128px"
|
|
||||||
height="128px"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1016"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid7947" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata6848">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
<dc:date />
|
|
||||||
<dc:creator>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title />
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:creator>
|
|
||||||
<dc:rights>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title />
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:rights>
|
|
||||||
<dc:publisher>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title />
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:publisher>
|
|
||||||
<dc:identifier />
|
|
||||||
<dc:source />
|
|
||||||
<dc:relation />
|
|
||||||
<dc:language />
|
|
||||||
<dc:subject>
|
|
||||||
<rdf:Bag />
|
|
||||||
</dc:subject>
|
|
||||||
<dc:coverage />
|
|
||||||
<dc:description />
|
|
||||||
<dc:contributor>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title />
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:contributor>
|
|
||||||
<cc:license
|
|
||||||
rdf:resource="" />
|
|
||||||
</cc:Work>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer">
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccc"
|
|
||||||
id="path6976"
|
|
||||||
d="M 20.88413,30.82696 L 53.816977,55.527708 L 107.33282,39.060543 L 70.587303,17.177763 L 20.88413,30.82696 z"
|
|
||||||
style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.12364459;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
|
|
||||||
<path
|
|
||||||
id="path6978"
|
|
||||||
d="M 22.94243,82.287118 L 20.88413,30.82696 L 53.816977,55.527708 L 53.816977,111.10486 L 22.94243,82.287118 z"
|
|
||||||
style="fill:#e40000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.12364459;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
|
|
||||||
<path
|
|
||||||
id="path6980"
|
|
||||||
d="M 53.816977,111.10486 L 103.21619,90.5207 L 107.33282,39.060543 L 53.816977,55.527708 L 53.816977,111.10486 z"
|
|
||||||
style="fill:#7fe719;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.12364459;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccc"
|
|
||||||
id="path6982"
|
|
||||||
d="M 23.216626,81.319479 L 70.48573,67.361442 L 103.38422,90.444516"
|
|
||||||
style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
id="path6984"
|
|
||||||
d="M 70.434539,17.875593 L 70.434539,66.984877"
|
|
||||||
style="opacity:1;fill:#babdb6;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@@ -456,33 +456,43 @@ gtk_fishbowl_do_update (GtkFishbowl *fishbowl)
|
|||||||
{
|
{
|
||||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||||
GdkFrameClock *frame_clock;
|
GdkFrameClock *frame_clock;
|
||||||
GdkFrameTimings *end;
|
GdkFrameTimings *start, *end;
|
||||||
gint64 end_counter;
|
gint64 start_counter, end_counter;
|
||||||
double fps, expected_fps;
|
gint64 n_frames, expected_frames;
|
||||||
|
gint64 start_timestamp, end_timestamp;
|
||||||
gint64 interval;
|
gint64 interval;
|
||||||
|
|
||||||
frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (fishbowl));
|
frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (fishbowl));
|
||||||
if (frame_clock == NULL)
|
if (frame_clock == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fps = gdk_frame_clock_get_fps (frame_clock);
|
start_counter = gdk_frame_clock_get_history_start (frame_clock);
|
||||||
if (fps <= 0.0)
|
end_counter = gdk_frame_clock_get_frame_counter (frame_clock);
|
||||||
|
start = gdk_frame_clock_get_timings (frame_clock, start_counter);
|
||||||
|
for (end = gdk_frame_clock_get_timings (frame_clock, end_counter);
|
||||||
|
end_counter > start_counter && end != NULL && !gdk_frame_timings_get_complete (end);
|
||||||
|
end = gdk_frame_clock_get_timings (frame_clock, end_counter))
|
||||||
|
end_counter--;
|
||||||
|
if (end_counter - start_counter < 4)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
priv->framerate = fps;
|
start_timestamp = gdk_frame_timings_get_presentation_time (start);
|
||||||
|
end_timestamp = gdk_frame_timings_get_presentation_time (end);
|
||||||
|
if (start_timestamp == 0 || end_timestamp == 0)
|
||||||
|
{
|
||||||
|
start_timestamp = gdk_frame_timings_get_frame_time (start);
|
||||||
|
end_timestamp = gdk_frame_timings_get_frame_time (end);
|
||||||
|
}
|
||||||
|
|
||||||
|
n_frames = end_counter - start_counter;
|
||||||
|
priv->framerate = ((double) n_frames) * G_USEC_PER_SEC / (end_timestamp - start_timestamp);
|
||||||
|
priv->framerate = ((int)(priv->framerate * 100))/100.0;
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_FRAMERATE]);
|
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_FRAMERATE]);
|
||||||
|
|
||||||
if (!priv->benchmark)
|
if (!priv->benchmark)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
end_counter = gdk_frame_clock_get_frame_counter (frame_clock);
|
|
||||||
for (end = gdk_frame_clock_get_timings (frame_clock, end_counter);
|
|
||||||
end != NULL && !gdk_frame_timings_get_complete (end);
|
|
||||||
end = gdk_frame_clock_get_timings (frame_clock, end_counter))
|
|
||||||
end_counter--;
|
|
||||||
if (end == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
interval = gdk_frame_timings_get_refresh_interval (end);
|
interval = gdk_frame_timings_get_refresh_interval (end);
|
||||||
if (interval == 0)
|
if (interval == 0)
|
||||||
{
|
{
|
||||||
@@ -490,16 +500,16 @@ gtk_fishbowl_do_update (GtkFishbowl *fishbowl)
|
|||||||
if (interval == 0)
|
if (interval == 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
expected_fps = (double) G_USEC_PER_SEC / interval;
|
expected_frames = round ((double) (end_timestamp - start_timestamp) / interval);
|
||||||
|
|
||||||
if (fps > (expected_fps - 1))
|
if (n_frames >= expected_frames)
|
||||||
{
|
{
|
||||||
if (priv->last_benchmark_change > 0)
|
if (priv->last_benchmark_change > 0)
|
||||||
priv->last_benchmark_change *= 2;
|
priv->last_benchmark_change *= 2;
|
||||||
else
|
else
|
||||||
priv->last_benchmark_change = 1;
|
priv->last_benchmark_change = 1;
|
||||||
}
|
}
|
||||||
else if (0.95 * fps < expected_fps)
|
else if (n_frames + 1 < expected_frames)
|
||||||
{
|
{
|
||||||
if (priv->last_benchmark_change < 0)
|
if (priv->last_benchmark_change < 0)
|
||||||
priv->last_benchmark_change--;
|
priv->last_benchmark_change--;
|
||||||
|
@@ -15,7 +15,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GTK_FISHBOWL_H__
|
||||||
|
#define __GTK_FISHBOWL_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -64,3 +65,5 @@ void gtk_fishbowl_set_creation_func (GtkFishbowl *fishbowl,
|
|||||||
GtkFishCreationFunc creation_func);
|
GtkFishCreationFunc creation_func);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_FISHBOWL_H__ */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_GEARS_H__
|
||||||
|
#define __GTK_GEARS_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -43,3 +44,5 @@ void gtk_gears_set_fps_label (GtkGears *gears,
|
|||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_GEARS_H__ */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_SHADER_BIN_H__
|
||||||
|
#define __GTK_SHADER_BIN_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -18,3 +19,5 @@ void gtk_shader_bin_set_child (GtkShaderBin *self,
|
|||||||
GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self);
|
GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_SHADER_BIN_H__ */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_SHADER_STACK_H__
|
||||||
|
#define __GTK_SHADER_STACK_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -18,3 +19,5 @@ void gtk_shader_stack_set_active (GtkShaderStack *self,
|
|||||||
int index);
|
int index);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_SHADER_STACK_H__ */
|
||||||
|
@@ -116,9 +116,7 @@ static gboolean gtk_shadertoy_tick (GtkWidget *widget,
|
|||||||
GtkWidget *
|
GtkWidget *
|
||||||
gtk_shadertoy_new (void)
|
gtk_shadertoy_new (void)
|
||||||
{
|
{
|
||||||
return g_object_new (gtk_shadertoy_get_type (),
|
return g_object_new (gtk_shadertoy_get_type (), NULL);
|
||||||
"allowed-apis", GDK_GL_API_GL,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_SHADERTOY_H__
|
||||||
|
#define __GTK_SHADERTOY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -29,3 +30,5 @@ void gtk_shadertoy_set_image_shader (GtkShadertoy *shadertoy,
|
|||||||
const char *shader);
|
const char *shader);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_SHADERTOY_H__ */
|
||||||
|
@@ -354,7 +354,6 @@ do_images (GtkWidget *do_widget)
|
|||||||
gicon = g_themed_icon_new_with_default_fallbacks ("battery-caution-charging-symbolic");
|
gicon = g_themed_icon_new_with_default_fallbacks ("battery-caution-charging-symbolic");
|
||||||
image = gtk_image_new_from_gicon (gicon);
|
image = gtk_image_new_from_gicon (gicon);
|
||||||
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
|
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
|
||||||
g_object_unref (gicon);
|
|
||||||
|
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), image);
|
gtk_frame_set_child (GTK_FRAME (frame), image);
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ get_win32_all_locales_scripts (LPWSTR locale_w, DWORD flags, LPARAM param)
|
|||||||
{
|
{
|
||||||
wchar_t *langname_w = NULL;
|
wchar_t *langname_w = NULL;
|
||||||
wchar_t locale_abbrev_w[9];
|
wchar_t locale_abbrev_w[9];
|
||||||
gchar *langname, *locale_abbrev, *locale;
|
gchar *langname, *locale_abbrev, *locale, *p;
|
||||||
gint i;
|
gint i;
|
||||||
const LCTYPE iso639_lctypes[] = { LOCALE_SISO639LANGNAME, LOCALE_SISO639LANGNAME2 };
|
const LCTYPE iso639_lctypes[] = { LOCALE_SISO639LANGNAME, LOCALE_SISO639LANGNAME2 };
|
||||||
GHashTable *ht_scripts_langs = (GHashTable *) param;
|
GHashTable *ht_scripts_langs = (GHashTable *) param;
|
||||||
@@ -59,6 +59,7 @@ get_win32_all_locales_scripts (LPWSTR locale_w, DWORD flags, LPARAM param)
|
|||||||
GetLocaleInfoEx (locale_w, LOCALE_SLOCALIZEDDISPLAYNAME, langname_w, langname_size);
|
GetLocaleInfoEx (locale_w, LOCALE_SLOCALIZEDDISPLAYNAME, langname_w, langname_size);
|
||||||
langname = g_utf16_to_utf8 (langname_w, -1, NULL, NULL, NULL);
|
langname = g_utf16_to_utf8 (langname_w, -1, NULL, NULL, NULL);
|
||||||
locale = g_utf16_to_utf8 (locale_w, -1, NULL, NULL, NULL);
|
locale = g_utf16_to_utf8 (locale_w, -1, NULL, NULL, NULL);
|
||||||
|
p = strchr (locale, '-');
|
||||||
lang = pango_language_from_string (locale);
|
lang = pango_language_from_string (locale);
|
||||||
if (g_hash_table_lookup (ht_scripts_langs, lang) == NULL)
|
if (g_hash_table_lookup (ht_scripts_langs, lang) == NULL)
|
||||||
g_hash_table_insert (ht_scripts_langs, lang, langname);
|
g_hash_table_insert (ht_scripts_langs, lang, langname);
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef LANGUAGE_NAMES_H
|
||||||
|
#define LANGUAGE_NAMES_H
|
||||||
|
|
||||||
#include <pango/pango.h>
|
#include <pango/pango.h>
|
||||||
|
|
||||||
@@ -8,3 +9,5 @@ const char * get_language_name (PangoLanguage *language);
|
|||||||
const char * get_language_name_for_tag (guint32 tag);
|
const char * get_language_name_for_tag (guint32 tag);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
/* Lists/Selections
|
/* Lists/Selections
|
||||||
* #Keywords: suggestion, completion
|
|
||||||
*
|
*
|
||||||
* The GtkDropDown widget is a modern alternative to GtkComboBox.
|
* The GtkDropDown widget is a modern alternative to GtkComboBox.
|
||||||
* It uses list models instead of tree models, and the content is
|
* It uses list models instead of tree models, and the content is
|
||||||
|
@@ -20,12 +20,11 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <glib/gstdio.h>
|
#include <glib/gstdio.h>
|
||||||
#include <glib/gi18n.h>
|
|
||||||
|
|
||||||
#include "demos.h"
|
#include "demos.h"
|
||||||
#include "fontify.h"
|
#include "fontify.h"
|
||||||
|
|
||||||
#include "profile_conf.h"
|
#include "demo_conf.h"
|
||||||
|
|
||||||
static GtkWidget *info_view;
|
static GtkWidget *info_view;
|
||||||
static GtkWidget *source_view;
|
static GtkWidget *source_view;
|
||||||
@@ -828,25 +827,13 @@ demo_search_changed_cb (GtkSearchEntry *entry,
|
|||||||
gtk_filter_changed (filter, GTK_FILTER_CHANGE_DIFFERENT);
|
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 *
|
static GListModel *
|
||||||
create_demo_model (GtkWidget *window)
|
create_demo_model (void)
|
||||||
{
|
{
|
||||||
GListStore *store = g_list_store_new (GTK_TYPE_DEMO);
|
GListStore *store = g_list_store_new (GTK_TYPE_DEMO);
|
||||||
DemoData *demo = gtk_demos;
|
DemoData *demo = gtk_demos;
|
||||||
GtkDemo *d;
|
GtkDemo *d;
|
||||||
|
|
||||||
gtk_widget_realize (window);
|
|
||||||
|
|
||||||
d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL));
|
d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL));
|
||||||
d->name = "main";
|
d->name = "main";
|
||||||
d->title = "GTK Demo";
|
d->title = "GTK Demo";
|
||||||
@@ -858,20 +845,16 @@ create_demo_model (GtkWidget *window)
|
|||||||
|
|
||||||
while (demo->title)
|
while (demo->title)
|
||||||
{
|
{
|
||||||
DemoData *children = demo->children;
|
d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL));
|
||||||
|
DemoData *children = demo->children;
|
||||||
|
|
||||||
if (demo_can_run (window, demo->name))
|
d->name = demo->name;
|
||||||
{
|
d->title = demo->title;
|
||||||
d = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL));
|
d->keywords = demo->keywords;
|
||||||
|
d->filename = demo->filename;
|
||||||
|
d->func = demo->func;
|
||||||
|
|
||||||
d->name = demo->name;
|
g_list_store_append (store, d);
|
||||||
d->title = demo->title;
|
|
||||||
d->keywords = demo->keywords;
|
|
||||||
d->filename = demo->filename;
|
|
||||||
d->func = demo->func;
|
|
||||||
|
|
||||||
g_list_store_append (store, d);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (children)
|
if (children)
|
||||||
{
|
{
|
||||||
@@ -879,19 +862,15 @@ create_demo_model (GtkWidget *window)
|
|||||||
|
|
||||||
while (children->title)
|
while (children->title)
|
||||||
{
|
{
|
||||||
if (demo_can_run (window, children->name))
|
GtkDemo *child = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL));
|
||||||
{
|
|
||||||
GtkDemo *child = GTK_DEMO (g_object_new (GTK_TYPE_DEMO, NULL));
|
|
||||||
|
|
||||||
child->name = children->name;
|
child->name = children->name;
|
||||||
child->title = children->title;
|
child->title = children->title;
|
||||||
child->keywords = children->keywords;
|
child->keywords = children->keywords;
|
||||||
child->filename = children->filename;
|
child->filename = children->filename;
|
||||||
child->func = children->func;
|
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++;
|
children++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -924,34 +903,6 @@ clear_search (GtkSearchBar *bar)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
search_results_update (GObject *filter_model,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
GtkEntry *entry)
|
|
||||||
{
|
|
||||||
gsize n_items = g_list_model_get_n_items (G_LIST_MODEL (filter_model));
|
|
||||||
|
|
||||||
if (strlen (gtk_editable_get_text (GTK_EDITABLE (entry))) > 0)
|
|
||||||
{
|
|
||||||
char *text;
|
|
||||||
|
|
||||||
if (n_items > 0)
|
|
||||||
text = g_strdup_printf (ngettext ("%ld search result", "%ld search results", n_items), n_items);
|
|
||||||
else
|
|
||||||
text = g_strdup (_("No search results"));
|
|
||||||
|
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (entry),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_DESCRIPTION, text,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_free (text);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_accessible_reset_property (GTK_ACCESSIBLE (entry), GTK_ACCESSIBLE_PROPERTY_DESCRIPTION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
activate (GApplication *app)
|
activate (GApplication *app)
|
||||||
{
|
{
|
||||||
@@ -985,7 +936,7 @@ activate (GApplication *app)
|
|||||||
search_bar = GTK_WIDGET (gtk_builder_get_object (builder, "searchbar"));
|
search_bar = GTK_WIDGET (gtk_builder_get_object (builder, "searchbar"));
|
||||||
g_signal_connect (search_bar, "notify::search-mode-enabled", G_CALLBACK (clear_search), NULL);
|
g_signal_connect (search_bar, "notify::search-mode-enabled", G_CALLBACK (clear_search), NULL);
|
||||||
|
|
||||||
listmodel = create_demo_model (window);
|
listmodel = create_demo_model ();
|
||||||
treemodel = gtk_tree_list_model_new (G_LIST_MODEL (listmodel),
|
treemodel = gtk_tree_list_model_new (G_LIST_MODEL (listmodel),
|
||||||
FALSE,
|
FALSE,
|
||||||
TRUE,
|
TRUE,
|
||||||
@@ -999,7 +950,6 @@ activate (GApplication *app)
|
|||||||
|
|
||||||
search_entry = GTK_WIDGET (gtk_builder_get_object (builder, "search-entry"));
|
search_entry = GTK_WIDGET (gtk_builder_get_object (builder, "search-entry"));
|
||||||
g_signal_connect (search_entry, "search-changed", G_CALLBACK (demo_search_changed_cb), filter);
|
g_signal_connect (search_entry, "search-changed", G_CALLBACK (demo_search_changed_cb), filter);
|
||||||
g_signal_connect (filter_model, "notify::n-items", G_CALLBACK (search_results_update), search_entry);
|
|
||||||
|
|
||||||
selection = gtk_single_selection_new (G_LIST_MODEL (filter_model));
|
selection = gtk_single_selection_new (G_LIST_MODEL (filter_model));
|
||||||
g_signal_connect (selection, "notify::selected-item", G_CALLBACK (selection_cb), NULL);
|
g_signal_connect (selection, "notify::selected-item", G_CALLBACK (selection_cb), NULL);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
<interface>
|
<interface>
|
||||||
<menu id="menubar">
|
<menu id="menubar">
|
||||||
<submenu>
|
<submenu>
|
||||||
<attribute name="label" translatable="yes">_File</attribute>
|
<attribute name="label" translatable="yes">_Application</attribute>
|
||||||
<section>
|
<section>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_New</attribute>
|
<attribute name="label" translatable="yes">_New</attribute>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
</section>
|
</section>
|
||||||
</submenu>
|
</submenu>
|
||||||
<submenu>
|
<submenu>
|
||||||
<attribute name="label" translatable="yes">_Preferences</attribute>
|
<attribute name="label" translatable="yes">_File</attribute>
|
||||||
<section>
|
<section>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Prefer Dark Theme</attribute>
|
<attribute name="label" translatable="yes">_Prefer Dark Theme</attribute>
|
||||||
|
@@ -236,7 +236,7 @@ foreach flag: common_cflags
|
|||||||
endif
|
endif
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
gtkdemo_deps += [ profile_conf_h ]
|
gtkdemo_deps += [ demo_conf_h ]
|
||||||
|
|
||||||
executable('gtk4-demo',
|
executable('gtk4-demo',
|
||||||
sources: [demos, demos_h, extra_demo_sources, gtkdemo_resources],
|
sources: [demos, demos_h, extra_demo_sources, gtkdemo_resources],
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -53,9 +53,7 @@ gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
|||||||
double rotation)
|
double rotation)
|
||||||
{
|
{
|
||||||
#define RADIUS 0.3
|
#define RADIUS 0.3
|
||||||
GskPathBuilder *builder;
|
cairo_t *cr;
|
||||||
GskPath *path;
|
|
||||||
GskStroke *stroke;
|
|
||||||
double size;
|
double size;
|
||||||
|
|
||||||
gtk_snapshot_append_color (snapshot,
|
gtk_snapshot_append_color (snapshot,
|
||||||
@@ -63,29 +61,24 @@ gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
|||||||
&GRAPHENE_RECT_INIT (0, 0, width, height));
|
&GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||||
|
|
||||||
size = MIN (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);
|
||||||
|
|
||||||
gtk_snapshot_save (snapshot);
|
cairo_arc (cr, 0, 0, 0.1, - G_PI, G_PI);
|
||||||
|
cairo_fill (cr);
|
||||||
|
|
||||||
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (width / 2.0, height / 2.0));
|
cairo_set_line_width (cr, RADIUS);
|
||||||
gtk_snapshot_scale (snapshot, size, size);
|
cairo_set_dash (cr, (double[1]) { RADIUS * G_PI / 3 }, 1, 0.0);
|
||||||
gtk_snapshot_rotate (snapshot, rotation);
|
cairo_arc (cr, 0, 0, RADIUS, - G_PI, G_PI);
|
||||||
|
cairo_stroke (cr);
|
||||||
|
|
||||||
builder = gsk_path_builder_new ();
|
cairo_destroy (cr);
|
||||||
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 */
|
/* Here, we implement the functionality required by the GdkPaintable interface */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __PAINTABLE_H__
|
||||||
|
#define __PAINTABLE_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -12,3 +13,5 @@ void gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
|||||||
GdkPaintable * gtk_nuclear_icon_new (double rotation);
|
GdkPaintable * gtk_nuclear_icon_new (double rotation);
|
||||||
GdkPaintable * gtk_nuclear_animation_new (gboolean draw_background);
|
GdkPaintable * gtk_nuclear_animation_new (gboolean draw_background);
|
||||||
GtkMediaStream *gtk_nuclear_media_stream_new (void);
|
GtkMediaStream *gtk_nuclear_media_stream_new (void);
|
||||||
|
|
||||||
|
#endif /* __PAINTABLE_H__ */
|
||||||
|
@@ -70,7 +70,7 @@ gtk_nuclear_animation_snapshot (GdkPaintable *paintable,
|
|||||||
? &(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 } /* yellow */
|
? &(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 } /* yellow */
|
||||||
: &(GdkRGBA) { 0, 0, 0, 0 }, /* transparent */
|
: &(GdkRGBA) { 0, 0, 0, 0 }, /* transparent */
|
||||||
width, height,
|
width, height,
|
||||||
360 * nuclear->progress / MAX_PROGRESS);
|
2 * G_PI * nuclear->progress / MAX_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintable *
|
static GdkPaintable *
|
||||||
@@ -85,7 +85,7 @@ gtk_nuclear_animation_get_current_image (GdkPaintable *paintable)
|
|||||||
* Luckily we added the rotation property to the nuclear icon
|
* Luckily we added the rotation property to the nuclear icon
|
||||||
* object previously, so we can just return an instance of that one.
|
* object previously, so we can just return an instance of that one.
|
||||||
*/
|
*/
|
||||||
return gtk_nuclear_icon_new (360 * nuclear->progress / MAX_PROGRESS);
|
return gtk_nuclear_icon_new (2 * G_PI * nuclear->progress / MAX_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintableFlags
|
static GdkPaintableFlags
|
||||||
|
@@ -76,7 +76,7 @@ gtk_nuclear_media_stream_snapshot (GdkPaintable *paintable,
|
|||||||
&(GdkRGBA) { 0, 0, 0, 1 }, /* black */
|
&(GdkRGBA) { 0, 0, 0, 1 }, /* black */
|
||||||
&(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 }, /* yellow */
|
&(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 }, /* yellow */
|
||||||
width, height,
|
width, height,
|
||||||
360 * nuclear->progress / DURATION);
|
2 * G_PI * nuclear->progress / DURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintable *
|
static GdkPaintable *
|
||||||
@@ -85,7 +85,7 @@ gtk_nuclear_media_stream_get_current_image (GdkPaintable *paintable)
|
|||||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (paintable);
|
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (paintable);
|
||||||
|
|
||||||
/* Same thing as with the animation */
|
/* Same thing as with the animation */
|
||||||
return gtk_nuclear_icon_new (360 * nuclear->progress / DURATION);
|
return gtk_nuclear_icon_new (2 * G_PI * nuclear->progress / DURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintableFlags
|
static GdkPaintableFlags
|
||||||
|
@@ -338,7 +338,7 @@ do_path_maze (GtkWidget *do_widget)
|
|||||||
GskPath *path;
|
GskPath *path;
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Follow the maze with the mouse");
|
gtk_window_set_title (GTK_WINDOW (window), "Follow the maze with the mouse");
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __PUZZLE_PIECE_H__
|
||||||
|
#define __PUZZLE_PIECE_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -18,3 +19,5 @@ GdkPaintable * gtk_puzzle_piece_new (GdkPaintable *puzzle,
|
|||||||
GdkPaintable * gtk_puzzle_piece_get_puzzle (GtkPuzzlePiece *self);
|
GdkPaintable * gtk_puzzle_piece_get_puzzle (GtkPuzzlePiece *self);
|
||||||
guint gtk_puzzle_piece_get_x (GtkPuzzlePiece *self);
|
guint gtk_puzzle_piece_get_x (GtkPuzzlePiece *self);
|
||||||
guint gtk_puzzle_piece_get_y (GtkPuzzlePiece *self);
|
guint gtk_puzzle_piece_get_y (GtkPuzzlePiece *self);
|
||||||
|
|
||||||
|
#endif /* __PUZZLE_PIECE_H__ */
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef SCRIPT_NAMES_H
|
||||||
|
#define SCRIPT_NAMES_H
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
@@ -8,3 +9,5 @@ const char * get_script_name (GUnicodeScript script);
|
|||||||
const char * get_script_name_for_tag (guint32 tag);
|
const char * get_script_name_for_tag (guint32 tag);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@ -120,7 +120,7 @@ create_shadertoy_window (GtkWidget *do_widget)
|
|||||||
gtk_box_append (GTK_BOX (box), aspect);
|
gtk_box_append (GTK_BOX (box), aspect);
|
||||||
|
|
||||||
shadertoy = new_shadertoy ("/shadertoy/alienplanet.glsl");
|
shadertoy = new_shadertoy ("/shadertoy/alienplanet.glsl");
|
||||||
gtk_aspect_frame_set_child (GTK_ASPECT_FRAME (aspect), gtk_graphics_offload_new (shadertoy));
|
gtk_aspect_frame_set_child (GTK_ASPECT_FRAME (aspect), shadertoy);
|
||||||
|
|
||||||
sw = gtk_scrolled_window_new ();
|
sw = gtk_scrolled_window_new ();
|
||||||
gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), 250);
|
gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), 250);
|
||||||
|
@@ -139,7 +139,6 @@ do_video_player (GtkWidget *do_widget)
|
|||||||
|
|
||||||
video = gtk_video_new ();
|
video = gtk_video_new ();
|
||||||
gtk_video_set_autoplay (GTK_VIDEO (video), TRUE);
|
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);
|
gtk_window_set_child (GTK_WINDOW (window), video);
|
||||||
|
|
||||||
title = gtk_header_bar_new ();
|
title = gtk_header_bar_new ();
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#include "iconbrowserapp.h"
|
#include "iconbrowserapp.h"
|
||||||
#include "iconbrowserwin.h"
|
#include "iconbrowserwin.h"
|
||||||
|
|
||||||
#include "profile_conf.h"
|
#include "demo_conf.h"
|
||||||
|
|
||||||
struct _IconBrowserApp
|
struct _IconBrowserApp
|
||||||
{
|
{
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __ICON_BROWSER_APP_H
|
||||||
|
#define __ICON_BROWSER_APP_H
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -13,3 +14,6 @@ typedef struct _IconBrowserAppClass IconBrowserAppClass;
|
|||||||
|
|
||||||
GType icon_browser_app_get_type (void);
|
GType icon_browser_app_get_type (void);
|
||||||
IconBrowserApp *icon_browser_app_new (void);
|
IconBrowserApp *icon_browser_app_new (void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __ICON_BROWSER_APP_H */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __ICON_BROWSER_WIN_H
|
||||||
|
#define __ICON_BROWSER_WIN_H
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include "iconbrowserapp.h"
|
#include "iconbrowserapp.h"
|
||||||
@@ -14,3 +15,6 @@ typedef struct _IconBrowserWindowClass IconBrowserWindowClass;
|
|||||||
|
|
||||||
GType icon_browser_window_get_type (void);
|
GType icon_browser_window_get_type (void);
|
||||||
IconBrowserWindow *icon_browser_window_new (IconBrowserApp *app);
|
IconBrowserWindow *icon_browser_window_new (IconBrowserApp *app);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __ICON_BROWSER_WIN_H */
|
||||||
|
@@ -14,7 +14,7 @@ iconbrowser_resources = gnome.compile_resources('iconbrowser_resources',
|
|||||||
executable('gtk4-icon-browser',
|
executable('gtk4-icon-browser',
|
||||||
sources: [iconbrowser_sources, iconbrowser_resources],
|
sources: [iconbrowser_sources, iconbrowser_resources],
|
||||||
c_args: common_cflags,
|
c_args: common_cflags,
|
||||||
dependencies: [ libgtk_dep, profile_conf_h ],
|
dependencies: [ libgtk_dep, demo_conf_h ],
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
win_subsystem: 'windows',
|
win_subsystem: 'windows',
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
|
@@ -1,3 +1,16 @@
|
|||||||
|
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
|
||||||
|
|
||||||
appdata_config = configuration_data()
|
appdata_config = configuration_data()
|
||||||
|
@@ -17,7 +17,8 @@
|
|||||||
* Authors: Benjamin Otte <otte@gnome.org>
|
* Authors: Benjamin Otte <otte@gnome.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GTK_RENDERER_PAINTABLE_H__
|
||||||
|
#define __GTK_RENDERER_PAINTABLE_H__
|
||||||
|
|
||||||
#include <gsk/gsk.h>
|
#include <gsk/gsk.h>
|
||||||
|
|
||||||
@@ -38,3 +39,5 @@ void gtk_renderer_paintable_set_paintable (GtkRendererPaintable
|
|||||||
GdkPaintable * gtk_renderer_paintable_get_paintable (GtkRendererPaintable *self) G_GNUC_PURE;
|
GdkPaintable * gtk_renderer_paintable_get_paintable (GtkRendererPaintable *self) G_GNUC_PURE;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_RENDERER_PAINTABLE_H__ */
|
||||||
|
@@ -12,7 +12,7 @@ node_editor_resources = gnome.compile_resources('node_editor_resources',
|
|||||||
|
|
||||||
executable('gtk4-node-editor',
|
executable('gtk4-node-editor',
|
||||||
sources: [node_editor_sources, node_editor_resources],
|
sources: [node_editor_sources, node_editor_resources],
|
||||||
dependencies: [ libgtk_dep, profile_conf_h ],
|
dependencies: [ libgtk_dep, demo_conf_h ],
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
c_args: common_cflags,
|
c_args: common_cflags,
|
||||||
win_subsystem: 'windows',
|
win_subsystem: 'windows',
|
||||||
|
@@ -19,13 +19,11 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <glib/gstdio.h>
|
|
||||||
|
|
||||||
#include "node-editor-application.h"
|
#include "node-editor-application.h"
|
||||||
|
|
||||||
#include "node-editor-window.h"
|
#include "node-editor-window.h"
|
||||||
|
|
||||||
#include "profile_conf.h"
|
#include "demo_conf.h"
|
||||||
|
|
||||||
static const char *css =
|
static const char *css =
|
||||||
"textview.editor {"
|
"textview.editor {"
|
||||||
@@ -249,63 +247,11 @@ node_editor_application_class_init (NodeEditorApplicationClass *class)
|
|||||||
application_class->open = node_editor_application_open;
|
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 *
|
NodeEditorApplication *
|
||||||
node_editor_application_new (void)
|
node_editor_application_new (void)
|
||||||
{
|
{
|
||||||
NodeEditorApplication *app;
|
return g_object_new (NODE_EDITOR_APPLICATION_TYPE,
|
||||||
|
"application-id", "org.gtk.gtk4.NodeEditor",
|
||||||
app = g_object_new (NODE_EDITOR_APPLICATION_TYPE,
|
"flags", G_APPLICATION_HANDLES_OPEN,
|
||||||
"application-id", "org.gtk.gtk4.NodeEditor",
|
NULL);
|
||||||
"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;
|
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,8 @@
|
|||||||
* Authors: Benjamin Otte <otte@gnome.org>
|
* Authors: Benjamin Otte <otte@gnome.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __NODE_EDITOR_APPLICATION_H__
|
||||||
|
#define __NODE_EDITOR_APPLICATION_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -32,3 +33,6 @@ typedef struct _NodeEditorApplicationClass NodeEditorApplicationClass;
|
|||||||
|
|
||||||
GType node_editor_application_get_type (void);
|
GType node_editor_application_get_type (void);
|
||||||
NodeEditorApplication *node_editor_application_new (void);
|
NodeEditorApplication *node_editor_application_new (void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __NODE_EDITOR_APPLICATION_H__ */
|
||||||
|
@@ -24,11 +24,13 @@
|
|||||||
#include "gtkrendererpaintableprivate.h"
|
#include "gtkrendererpaintableprivate.h"
|
||||||
|
|
||||||
#include "gsk/gskrendernodeparserprivate.h"
|
#include "gsk/gskrendernodeparserprivate.h"
|
||||||
|
#include "gsk/gl/gskglrenderer.h"
|
||||||
#ifdef GDK_WINDOWING_BROADWAY
|
#ifdef GDK_WINDOWING_BROADWAY
|
||||||
#include "gsk/broadway/gskbroadwayrenderer.h"
|
#include "gsk/broadway/gskbroadwayrenderer.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef GDK_RENDERING_VULKAN
|
||||||
#include <glib/gstdio.h>
|
#include "gsk/vulkan/gskvulkanrenderer.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
#ifdef CAIRO_HAS_SVG_SURFACE
|
#ifdef CAIRO_HAS_SVG_SURFACE
|
||||||
@@ -57,7 +59,6 @@ struct _NodeEditorWindow
|
|||||||
GtkWidget *testcase_name_entry;
|
GtkWidget *testcase_name_entry;
|
||||||
GtkWidget *testcase_save_button;
|
GtkWidget *testcase_save_button;
|
||||||
GtkWidget *scale_scale;
|
GtkWidget *scale_scale;
|
||||||
GtkWidget *crash_warning;
|
|
||||||
|
|
||||||
GtkWidget *renderer_listbox;
|
GtkWidget *renderer_listbox;
|
||||||
GListStore *renderers;
|
GListStore *renderers;
|
||||||
@@ -67,10 +68,6 @@ struct _NodeEditorWindow
|
|||||||
GFileMonitor *file_monitor;
|
GFileMonitor *file_monitor;
|
||||||
|
|
||||||
GArray *errors;
|
GArray *errors;
|
||||||
|
|
||||||
gboolean auto_reload;
|
|
||||||
gboolean mark_as_safe_pending;
|
|
||||||
gulong after_paint_handler;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _NodeEditorWindowClass
|
struct _NodeEditorWindowClass
|
||||||
@@ -78,13 +75,6 @@ struct _NodeEditorWindowClass
|
|||||||
GtkApplicationWindowClass parent_class;
|
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);
|
G_DEFINE_TYPE(NodeEditorWindow, node_editor_window, GTK_TYPE_APPLICATION_WINDOW);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -177,121 +167,19 @@ text_iter_skip_whitespace_backward (GtkTextIter *iter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
highlight_text (NodeEditorWindow *self)
|
text_changed (GtkTextBuffer *buffer,
|
||||||
{
|
NodeEditorWindow *self)
|
||||||
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;
|
char *text;
|
||||||
GBytes *bytes;
|
GBytes *bytes;
|
||||||
|
GtkTextIter iter;
|
||||||
|
GtkTextIter start, end;
|
||||||
float scale;
|
float scale;
|
||||||
GskRenderNode *big_node;
|
GskRenderNode *big_node;
|
||||||
|
|
||||||
mark_autosave_as_unsafe ();
|
g_array_remove_range (self->errors, 0, self->errors->len);
|
||||||
|
|
||||||
text = get_current_text (self->text_buffer);
|
text = get_current_text (self->text_buffer);
|
||||||
|
text_buffer_remove_all_tags (self->text_buffer);
|
||||||
bytes = g_bytes_new_take (text, strlen (text));
|
bytes = g_bytes_new_take (text, strlen (text));
|
||||||
|
|
||||||
g_clear_pointer (&self->node, gsk_render_node_unref);
|
g_clear_pointer (&self->node, gsk_render_node_unref);
|
||||||
@@ -353,20 +241,72 @@ reload (NodeEditorWindow *self)
|
|||||||
|
|
||||||
g_clear_pointer (&big_node, gsk_render_node_unref);
|
g_clear_pointer (&big_node, gsk_render_node_unref);
|
||||||
|
|
||||||
self->mark_as_safe_pending = TRUE;
|
gtk_text_buffer_get_start_iter (self->text_buffer, &iter);
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
while (!gtk_text_iter_is_end (&iter))
|
||||||
text_changed (GtkTextBuffer *buffer,
|
{
|
||||||
NodeEditorWindow *self)
|
gunichar c = gtk_text_iter_get_char (&iter);
|
||||||
{
|
|
||||||
g_array_remove_range (self->errors, 0, self->errors->len);
|
|
||||||
text_buffer_remove_all_tags (self->text_buffer);
|
|
||||||
|
|
||||||
if (self->auto_reload)
|
if (c == '{')
|
||||||
reload (self);
|
{
|
||||||
|
GtkTextIter word_end = iter;
|
||||||
|
GtkTextIter word_start;
|
||||||
|
|
||||||
highlight_text (self);
|
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
|
static void
|
||||||
@@ -854,7 +794,7 @@ create_cairo_texture (NodeEditorWindow *self)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
renderer = gsk_cairo_renderer_new ();
|
renderer = gsk_cairo_renderer_new ();
|
||||||
gsk_renderer_realize_for_display (renderer, gtk_widget_get_display (GTK_WIDGET (self)), NULL);
|
gsk_renderer_realize (renderer, NULL, NULL);
|
||||||
|
|
||||||
texture = gsk_renderer_render_texture (renderer, node, NULL);
|
texture = gsk_renderer_render_texture (renderer, node, NULL);
|
||||||
gsk_render_node_unref (node);
|
gsk_render_node_unref (node);
|
||||||
@@ -926,11 +866,11 @@ export_image_response_cb (GObject *source,
|
|||||||
GskRenderer *renderer;
|
GskRenderer *renderer;
|
||||||
|
|
||||||
renderer = gsk_gl_renderer_new ();
|
renderer = gsk_gl_renderer_new ();
|
||||||
if (!gsk_renderer_realize_for_display (renderer, gdk_display_get_default (), NULL))
|
if (!gsk_renderer_realize (renderer, NULL, NULL))
|
||||||
{
|
{
|
||||||
g_object_unref (renderer);
|
g_object_unref (renderer);
|
||||||
renderer = gsk_cairo_renderer_new ();
|
renderer = gsk_cairo_renderer_new ();
|
||||||
if (!gsk_renderer_realize_for_display (renderer, gdk_display_get_default (), NULL))
|
if (!gsk_renderer_realize (renderer, NULL, NULL))
|
||||||
{
|
{
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
@@ -1181,11 +1121,8 @@ node_editor_window_add_renderer (NodeEditorWindow *self,
|
|||||||
const char *description)
|
const char *description)
|
||||||
{
|
{
|
||||||
GdkPaintable *paintable;
|
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));
|
GdkSurface *surface = gtk_native_get_surface (GTK_NATIVE (self));
|
||||||
g_assert (surface != NULL);
|
g_assert (surface != NULL);
|
||||||
@@ -1209,7 +1146,6 @@ static void
|
|||||||
node_editor_window_realize (GtkWidget *widget)
|
node_editor_window_realize (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget);
|
NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget);
|
||||||
GdkFrameClock *frameclock;
|
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (node_editor_window_parent_class)->realize (widget);
|
GTK_WIDGET_CLASS (node_editor_window_parent_class)->realize (widget);
|
||||||
|
|
||||||
@@ -1221,9 +1157,6 @@ node_editor_window_realize (GtkWidget *widget)
|
|||||||
node_editor_window_add_renderer (self,
|
node_editor_window_add_renderer (self,
|
||||||
gsk_gl_renderer_new (),
|
gsk_gl_renderer_new (),
|
||||||
"OpenGL");
|
"OpenGL");
|
||||||
node_editor_window_add_renderer (self,
|
|
||||||
gsk_ngl_renderer_new (),
|
|
||||||
"NGL");
|
|
||||||
#ifdef GDK_RENDERING_VULKAN
|
#ifdef GDK_RENDERING_VULKAN
|
||||||
node_editor_window_add_renderer (self,
|
node_editor_window_add_renderer (self,
|
||||||
gsk_vulkan_renderer_new (),
|
gsk_vulkan_renderer_new (),
|
||||||
@@ -1237,24 +1170,14 @@ node_editor_window_realize (GtkWidget *widget)
|
|||||||
node_editor_window_add_renderer (self,
|
node_editor_window_add_renderer (self,
|
||||||
gsk_cairo_renderer_new (),
|
gsk_cairo_renderer_new (),
|
||||||
"Cairo");
|
"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
|
static void
|
||||||
node_editor_window_unrealize (GtkWidget *widget)
|
node_editor_window_unrealize (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget);
|
NodeEditorWindow *self = NODE_EDITOR_WINDOW (widget);
|
||||||
GdkFrameClock *frameclock;
|
|
||||||
guint i;
|
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 ++)
|
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);
|
gpointer item = g_list_model_get_item (G_LIST_MODEL (self->renderers), i);
|
||||||
@@ -1615,62 +1538,6 @@ edit_action_cb (GtkWidget *widget,
|
|||||||
node_editor_window_edit (self, &start);
|
node_editor_window_edit (self, &start);
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
static void
|
||||||
node_editor_window_class_init (NodeEditorWindowClass *class)
|
node_editor_window_class_init (NodeEditorWindowClass *class)
|
||||||
{
|
{
|
||||||
@@ -1682,8 +1549,6 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
|||||||
|
|
||||||
object_class->dispose = node_editor_window_dispose;
|
object_class->dispose = node_editor_window_dispose;
|
||||||
object_class->finalize = node_editor_window_finalize;
|
object_class->finalize = node_editor_window_finalize;
|
||||||
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,
|
gtk_widget_class_set_template_from_resource (widget_class,
|
||||||
"/org/gtk/gtk4/node-editor/node-editor-window.ui");
|
"/org/gtk/gtk4/node-editor/node-editor-window.ui");
|
||||||
@@ -1691,12 +1556,6 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
|||||||
widget_class->realize = node_editor_window_realize;
|
widget_class->realize = node_editor_window_realize;
|
||||||
widget_class->unrealize = node_editor_window_unrealize;
|
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, text_view);
|
||||||
gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, picture);
|
gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, picture);
|
||||||
gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, renderer_listbox);
|
gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, renderer_listbox);
|
||||||
@@ -1706,7 +1565,6 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
|||||||
gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, testcase_name_entry);
|
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, testcase_save_button);
|
||||||
gtk_widget_class_bind_template_child (widget_class, NodeEditorWindow, scale_scale);
|
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, text_view_query_tooltip_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, open_cb);
|
gtk_widget_class_bind_template_callback (widget_class, open_cb);
|
||||||
@@ -1719,7 +1577,6 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
|||||||
gtk_widget_class_bind_template_callback (widget_class, on_picture_drag_prepare_cb);
|
gtk_widget_class_bind_template_callback (widget_class, on_picture_drag_prepare_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, on_picture_drop_cb);
|
gtk_widget_class_bind_template_callback (widget_class, on_picture_drop_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, click_gesture_pressed);
|
gtk_widget_class_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);
|
gtk_widget_class_install_action (widget_class, "smart-edit", NULL, edit_action_cb);
|
||||||
|
|
||||||
@@ -1771,98 +1628,11 @@ static GActionEntry win_entries[] = {
|
|||||||
{ "open", window_open, NULL, NULL, NULL },
|
{ "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
|
static void
|
||||||
node_editor_window_init (NodeEditorWindow *self)
|
node_editor_window_init (NodeEditorWindow *self)
|
||||||
{
|
{
|
||||||
GAction *action;
|
|
||||||
|
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
|
|
||||||
self->auto_reload = TRUE;
|
|
||||||
|
|
||||||
self->renderers = g_list_store_new (GDK_TYPE_PAINTABLE);
|
self->renderers = g_list_store_new (GDK_TYPE_PAINTABLE);
|
||||||
gtk_list_box_bind_model (GTK_LIST_BOX (self->renderer_listbox),
|
gtk_list_box_bind_model (GTK_LIST_BOX (self->renderer_listbox),
|
||||||
G_LIST_MODEL (self->renderers),
|
G_LIST_MODEL (self->renderers),
|
||||||
@@ -1875,10 +1645,6 @@ node_editor_window_init (NodeEditorWindow *self)
|
|||||||
|
|
||||||
g_action_map_add_action_entries (G_ACTION_MAP (self), win_entries, G_N_ELEMENTS (win_entries), self);
|
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 ();
|
self->tag_table = gtk_text_tag_table_new ();
|
||||||
gtk_text_tag_table_add (self->tag_table,
|
gtk_text_tag_table_add (self->tag_table,
|
||||||
g_object_new (GTK_TYPE_TEXT_TAG,
|
g_object_new (GTK_TYPE_TEXT_TAG,
|
||||||
@@ -1916,9 +1682,25 @@ node_editor_window_init (NodeEditorWindow *self)
|
|||||||
g_signal_connect (self->scale_scale, "notify::value", G_CALLBACK (scale_changed), self);
|
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);
|
gtk_text_view_set_buffer (GTK_TEXT_VIEW (self->text_view), self->text_buffer);
|
||||||
|
|
||||||
set_initial_text (self);
|
/* Default */
|
||||||
|
gtk_text_buffer_set_text (self->text_buffer,
|
||||||
g_signal_connect_swapped (self->text_buffer, "changed", G_CALLBACK (autosave_contents), self);
|
"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);
|
||||||
|
|
||||||
if (g_getenv ("GSK_RENDERER"))
|
if (g_getenv ("GSK_RENDERER"))
|
||||||
{
|
{
|
||||||
|
@@ -17,7 +17,8 @@
|
|||||||
* Authors: Benjamin Otte <otte@gnome.org>
|
* Authors: Benjamin Otte <otte@gnome.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __NODE_EDITOR_WINDOW_H__
|
||||||
|
#define __NODE_EDITOR_WINDOW_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -38,4 +39,4 @@ NodeEditorWindow * node_editor_window_new (NodeEditorApplication
|
|||||||
gboolean node_editor_window_load (NodeEditorWindow *self,
|
gboolean node_editor_window_load (NodeEditorWindow *self,
|
||||||
GFile *file);
|
GFile *file);
|
||||||
|
|
||||||
char * get_autosave_path (const char *suffix);
|
#endif /* __NODE_EDITOR_WINDOW_H__ */
|
||||||
|
@@ -2,10 +2,6 @@
|
|||||||
<interface>
|
<interface>
|
||||||
<menu id="gear_menu">
|
<menu id="gear_menu">
|
||||||
<section>
|
<section>
|
||||||
<item>
|
|
||||||
<attribute name="label" translatable="yes">_Reload automatically</attribute>
|
|
||||||
<attribute name="action">win.auto-reload</attribute>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Help</attribute>
|
<attribute name="label" translatable="yes">_Help</attribute>
|
||||||
<attribute name="action">app.help</attribute>
|
<attribute name="action">app.help</attribute>
|
||||||
@@ -28,6 +24,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
||||||
<object class="GtkPopover" id="testcase_popover">
|
<object class="GtkPopover" id="testcase_popover">
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkGrid">
|
<object class="GtkGrid">
|
||||||
@@ -42,7 +39,7 @@
|
|||||||
<object class="GtkEntry" id="testcase_name_entry">
|
<object class="GtkEntry" id="testcase_name_entry">
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="activates-default">1</property>
|
<property name="activates-default">1</property>
|
||||||
<signal name="notify::text" handler="testcase_name_entry_changed_cb"/>
|
<signal name="notify::text" handler="testcase_name_entry_changed_cb" />
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -55,6 +52,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="wrap">1</property>
|
<property name="wrap">1</property>
|
||||||
@@ -68,6 +66,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="testcase_error_label">
|
<object class="GtkLabel" id="testcase_error_label">
|
||||||
<property name="wrap">1</property>
|
<property name="wrap">1</property>
|
||||||
@@ -79,6 +78,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="testcase_save_button">
|
<object class="GtkButton" id="testcase_save_button">
|
||||||
<property name="label">Save</property>
|
<property name="label">Save</property>
|
||||||
@@ -86,9 +86,9 @@
|
|||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="receives-default">1</property>
|
<property name="receives-default">1</property>
|
||||||
<property name="sensitive">0</property>
|
<property name="sensitive">0</property>
|
||||||
<signal name="clicked" handler="testcase_save_clicked_cb"/>
|
<signal name="clicked" handler="testcase_save_clicked_cb" />
|
||||||
<style>
|
<style>
|
||||||
<class name="suggested-action"/>
|
<class name="suggested-action" />
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="row">4</property>
|
<property name="row">4</property>
|
||||||
@@ -100,6 +100,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<template class="NodeEditorWindow" parent="GtkApplicationWindow">
|
<template class="NodeEditorWindow" parent="GtkApplicationWindow">
|
||||||
<property name="title" translatable="yes">GTK Node Editor</property>
|
<property name="title" translatable="yes">GTK Node Editor</property>
|
||||||
<property name="default-width">1024</property>
|
<property name="default-width">1024</property>
|
||||||
@@ -184,129 +185,83 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkOverlay">
|
<object class="GtkPaned">
|
||||||
<child type="overlay">
|
<property name="shrink-start-child">false</property>
|
||||||
<object class="GtkRevealer" id="crash_warning">
|
<property name="shrink-end-child">false</property>
|
||||||
<property name="transition-type">slide-down</property>
|
<property name="position">400</property>
|
||||||
<property name="halign">center</property>
|
<property name="start-child">
|
||||||
<property name="valign">start</property>
|
<object class="GtkScrolledWindow">
|
||||||
<property name="child">
|
<property name="hscrollbar-policy">never</property>
|
||||||
<object class="GtkFrame">
|
<property name="hexpand">1</property>
|
||||||
|
<property name="vexpand">1</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTextView" id="text_view">
|
||||||
|
<property name="wrap-mode">word</property>
|
||||||
|
<property name="monospace">1</property>
|
||||||
|
<property name="top-margin">6</property>
|
||||||
|
<property name="left-margin">6</property>
|
||||||
|
<property name="right-margin">6</property>
|
||||||
|
<property name="bottom-margin">6</property>
|
||||||
|
<property name="has-tooltip">1</property>
|
||||||
|
<property name="extra-menu">extra_menu</property>
|
||||||
|
<signal name="query-tooltip" handler="text_view_query_tooltip_cb"/>
|
||||||
<style>
|
<style>
|
||||||
<class name="app-notification"/>
|
<class name="editor" />
|
||||||
</style>
|
</style>
|
||||||
<property name="child">
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkGestureClick">
|
||||||
<property name="orientation">vertical</property>
|
<property name="button">1</property>
|
||||||
<property name="spacing">20</property>
|
<signal name="pressed" handler="click_gesture_pressed"/>
|
||||||
<property name="margin-start">10</property>
|
|
||||||
<property name="margin-end">10</property>
|
|
||||||
<property name="margin-top">10</property>
|
|
||||||
<property name="margin-bottom">10</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="halign">1</property>
|
|
||||||
<property name="label" translatable="1">The application may have crashed.
|
|
||||||
As a precaution, auto-loading has been turned off.
|
|
||||||
You can turn it back on in the menu.
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton">
|
|
||||||
<property name="valign">3</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="label" translatable="1">_Close</property>
|
|
||||||
<signal name="clicked" handler="close_crash_warning"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</property>
|
||||||
<property name="child">
|
<property name="end-child">
|
||||||
<object class="GtkPaned">
|
<object class="GtkBox">
|
||||||
<property name="shrink-start-child">false</property>
|
<child>
|
||||||
<property name="shrink-end-child">false</property>
|
|
||||||
<property name="position">400</property>
|
|
||||||
<property name="start-child">
|
|
||||||
<object class="GtkScrolledWindow">
|
<object class="GtkScrolledWindow">
|
||||||
<property name="hscrollbar-policy">never</property>
|
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="vexpand">1</property>
|
<property name="vexpand">1</property>
|
||||||
|
<property name="min-content-height">100</property>
|
||||||
|
<property name="min-content-width">100</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTextView" id="text_view">
|
<object class="GtkViewport">
|
||||||
<property name="wrap-mode">word</property>
|
|
||||||
<property name="monospace">1</property>
|
|
||||||
<property name="top-margin">6</property>
|
|
||||||
<property name="left-margin">6</property>
|
|
||||||
<property name="right-margin">6</property>
|
|
||||||
<property name="bottom-margin">6</property>
|
|
||||||
<property name="has-tooltip">1</property>
|
|
||||||
<property name="extra-menu">extra_menu</property>
|
|
||||||
<signal name="query-tooltip" handler="text_view_query_tooltip_cb"/>
|
|
||||||
<style>
|
|
||||||
<class name="editor"/>
|
|
||||||
</style>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkGestureClick">
|
<object class="GtkPicture" id="picture">
|
||||||
<property name="button">1</property>
|
<property name="can-shrink">0</property>
|
||||||
<signal name="pressed" handler="click_gesture_pressed"/>
|
<property name="halign">center</property>
|
||||||
</object>
|
<property name="valign">center</property>
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<property name="end-child">
|
|
||||||
<object class="GtkBox">
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<property name="min-content-height">100</property>
|
|
||||||
<property name="min-content-width">100</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkViewport">
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkPicture" id="picture">
|
<object class="GtkDragSource">
|
||||||
<property name="can-shrink">0</property>
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkDragSource">
|
|
||||||
<property name="actions">copy</property>
|
|
||||||
<signal name="prepare" handler="on_picture_drag_prepare_cb" swapped="no"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkDropTargetAsync">
|
|
||||||
<property name="actions">copy</property>
|
<property name="actions">copy</property>
|
||||||
<property name="formats">application/x-gtk-render-node</property>
|
<signal name="prepare" handler="on_picture_drag_prepare_cb" swapped="no"/>
|
||||||
<signal name="drop" handler="on_picture_drop_cb" swapped="no"/>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow">
|
|
||||||
<property name="hscrollbar-policy">never</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListBox" id="renderer_listbox">
|
<object class="GtkDropTargetAsync">
|
||||||
<property name="selection-mode">none</property>
|
<property name="actions">copy</property>
|
||||||
|
<property name="formats">application/x-gtk-render-node</property>
|
||||||
|
<signal name="drop" handler="on_picture_drop_cb" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="hscrollbar-policy">never</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkListBox" id="renderer_listbox">
|
||||||
|
<property name="selection-mode">none</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</property>
|
||||||
</object>
|
</object>
|
||||||
|
@@ -322,46 +322,27 @@ stroke bounds of the path.
|
|||||||
|
|
||||||
### text
|
### text
|
||||||
|
|
||||||
| property | syntax | default | printed |
|
| property | syntax | default | printed |
|
||||||
| ------------ | ------------------- | ------------------- | ----------- |
|
| -------- | ---------------- | ---------------------- | ----------- |
|
||||||
| color | `<color>` | black | non-default |
|
| color | `<color>` | black | non-default |
|
||||||
| font | `<string>` `<url>`? | "Cantarell 15px" | always |
|
| font | `<string>` | "Cantarell 11" | always |
|
||||||
| glyphs | `<glyphs>` | "Hello" | always |
|
| glyphs | `<glyphs>` | "Hello" | always |
|
||||||
| offset | `<point>` | 0 0 | non-default |
|
| offset | `<point>` | 0 0 | non-default |
|
||||||
| hint-style | `<hint style>` | slight | non-default |
|
|
||||||
| antialias | `<antialias>` | gray | non-default |
|
|
||||||
| hint-metrics | `<hint metrics>` | off | non-default |
|
|
||||||
|
|
||||||
Creates a node like `gsk_text_node_new()` with the given properties.
|
Creates a node like `gsk_text_node_new()` with the given properties.
|
||||||
|
|
||||||
If a url is specified for the font, it must point to a font file for the
|
|
||||||
font that is specified in the string. It can be either a data url containing
|
|
||||||
a base64-encoded font file, or a regular url that points to a font file.
|
|
||||||
|
|
||||||
Glyphs can be specified as an ASCII string, or as a comma-separated list of
|
|
||||||
their glyph IDs. Optionally, the advance width, x and y offsets and flags can
|
|
||||||
be specified as well, like this: 40 10 0 0 color.
|
|
||||||
|
|
||||||
If the given font does not exist or the given glyphs are invalid for the given
|
If the given font does not exist or the given glyphs are invalid for the given
|
||||||
font, an error node will be returned.
|
font, an error node will be returned.
|
||||||
|
|
||||||
Possible values for hint-style are none, slight or full.
|
|
||||||
Possible value for antialias are none or gray.
|
|
||||||
Possible value for hint-metrics are on or off.
|
|
||||||
|
|
||||||
### texture
|
### texture
|
||||||
|
|
||||||
| property | syntax | default | printed |
|
| property | syntax | default | printed |
|
||||||
| -------- | ------------------- | ---------------------- | ----------- |
|
| -------- | ---------------- | ---------------------- | ----------- |
|
||||||
| bounds | `<rect>` | 50 | always |
|
| bounds | `<rect>` | 50 | always |
|
||||||
| texture | `<string>`?`<url>`? | *see below* | always |
|
| texture | `<url>` | *see below* | always |
|
||||||
|
|
||||||
Creates a node like `gsk_texture_node_new()` with the given properties.
|
Creates a node like `gsk_texture_node_new()` with the given properties.
|
||||||
|
|
||||||
If a string is specified for the texture, it will be used as a name for the text.
|
|
||||||
Textures can be reused by specifying the name of a previously used texture. In
|
|
||||||
that case, the url can be omitted.
|
|
||||||
|
|
||||||
The default texture is a 10x10 checkerboard with the top left and bottom right
|
The default texture is a 10x10 checkerboard with the top left and bottom right
|
||||||
5x5 being in the color #FF00CC and the other part being transparent. A possible
|
5x5 being in the color #FF00CC and the other part being transparent. A possible
|
||||||
representation for this texture is `url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQXY0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=")
|
representation for this texture is `url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQXY0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=")
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
executable('gtk4-print-editor',
|
executable('gtk4-print-editor',
|
||||||
sources: ['print-editor.c'],
|
sources: ['print-editor.c'],
|
||||||
c_args: common_cflags,
|
c_args: common_cflags,
|
||||||
dependencies: [ libgtk_dep, profile_conf_h ],
|
dependencies: [ libgtk_dep, demo_conf_h ],
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
win_subsystem: 'windows',
|
win_subsystem: 'windows',
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include "profile_conf.h"
|
#include "demo_conf.h"
|
||||||
|
|
||||||
static GtkWidget *main_window;
|
static GtkWidget *main_window;
|
||||||
static GFile *filename = NULL;
|
static GFile *filename = NULL;
|
||||||
|
BIN
demos/widget-factory/icons/16x16/actions/insert-image.png
Normal file
After Width: | Height: | Size: 533 B |
After Width: | Height: | Size: 127 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M3.384 3h3.231c.213 0 .385.224.385.502v2.996C7 6.776 6.828 7 6.615 7h-3.23C3.17 7 3 6.776 3 6.498V3.502C3 3.224 3.17 3 3.384 3zm6 0h3.231c.213 0 .385.224.385.502v2.996c0 .278-.172.502-.385.502h-3.23C9.17 7 9 6.776 9 6.498V3.502C9 3.224 9.17 3 9.384 3zm-6 6h3.231c.213 0 .385.224.385.502v2.996c0 .278-.172.502-.385.502h-3.23C3.17 13 3 12.776 3 12.498V9.502C3 9.224 3.17 9 3.384 9zm6 0h3.231c.213 0 .385.224.385.502v2.996c0 .278-.172.502-.385.502h-3.23C9.17 13 9 12.776 9 12.498V9.502C9 9.224 9.17 9 9.384 9z" style="marker:none" overflow="visible" color="#000" fill="#474747"/></svg>
|
After Width: | Height: | Size: 654 B |
@@ -66,7 +66,7 @@ endif
|
|||||||
executable('gtk4-widget-factory',
|
executable('gtk4-widget-factory',
|
||||||
sources: ['widget-factory.c', widgetfactory_resources],
|
sources: ['widget-factory.c', widgetfactory_resources],
|
||||||
c_args: common_cflags,
|
c_args: common_cflags,
|
||||||
dependencies: [ libgtk_dep, profile_conf_h ],
|
dependencies: [ libgtk_dep, demo_conf_h ],
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
win_subsystem: 'windows',
|
win_subsystem: 'windows',
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include "profile_conf.h"
|
#include "demo_conf.h"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
change_dark_state (GSimpleAction *action,
|
change_dark_state (GSimpleAction *action,
|
||||||
|
@@ -25,12 +25,14 @@
|
|||||||
<file>icons/16x16/actions/format-justify-fill-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/format-justify-fill-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/format-justify-left-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/format-justify-left-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/format-justify-right-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/format-justify-right-symbolic.symbolic.png</file>
|
||||||
|
<file>icons/16x16/actions/insert-image.png</file>
|
||||||
<file>icons/16x16/actions/insert-link-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/insert-link-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/send-to-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/send-to-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/star-new-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/star-new-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/view-continuous-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/view-continuous-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/view-dual-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/view-dual-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/view-fullscreen-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/view-fullscreen-symbolic.symbolic.png</file>
|
||||||
|
<file>icons/16x16/actions/view-grid-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/view-paged-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/view-paged-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/zoom-in-symbolic.symbolic.png</file>
|
<file>icons/16x16/actions/zoom-in-symbolic.symbolic.png</file>
|
||||||
<file>icons/16x16/actions/zoom-in.png</file>
|
<file>icons/16x16/actions/zoom-in.png</file>
|
||||||
@@ -86,6 +88,7 @@
|
|||||||
<file>icons/scalable/actions/view-dual-symbolic.svg</file>
|
<file>icons/scalable/actions/view-dual-symbolic.svg</file>
|
||||||
<file>icons/scalable/actions/view-paged-symbolic.svg</file>
|
<file>icons/scalable/actions/view-paged-symbolic.svg</file>
|
||||||
<file>icons/scalable/actions/view-fullscreen-symbolic.svg</file>
|
<file>icons/scalable/actions/view-fullscreen-symbolic.svg</file>
|
||||||
|
<file>icons/scalable/actions/view-grid-symbolic.svg</file>
|
||||||
<file>icons/scalable/actions/zoom-in-symbolic.svg</file>
|
<file>icons/scalable/actions/zoom-in-symbolic.svg</file>
|
||||||
<file>icons/scalable/actions/zoom-original-symbolic.svg</file>
|
<file>icons/scalable/actions/zoom-original-symbolic.svg</file>
|
||||||
<file>icons/scalable/actions/zoom-out-symbolic.svg</file>
|
<file>icons/scalable/actions/zoom-out-symbolic.svg</file>
|
||||||
|
@@ -685,8 +685,6 @@ stack-allocated using `g_newa()` or `g_alloca()`. But limit the amount
|
|||||||
of stack memory that you consume this way, in particular in recursive
|
of stack memory that you consume this way, in particular in recursive
|
||||||
functions.
|
functions.
|
||||||
|
|
||||||
On Windows, the default stack size we have to work with is 1M.
|
|
||||||
|
|
||||||
### Macros
|
### Macros
|
||||||
|
|
||||||
Try to avoid private macros unless strictly necessary. Remember to #undef
|
Try to avoid private macros unless strictly necessary. Remember to #undef
|
||||||
|
@@ -69,9 +69,9 @@ Image:
|
|||||||
4 CARD32 IMAGE_DATA_OFFSET
|
4 CARD32 IMAGE_DATA_OFFSET
|
||||||
|
|
||||||
ICON_FLAGS
|
ICON_FLAGS
|
||||||
HAS_SUFFIX_XPM 1
|
HAS_SUFFIX_PNG 1
|
||||||
HAS_SUFFIX_SVG 2
|
HAS_SUFFIX_XPM 2
|
||||||
HAS_SUFFIX_PNG 4
|
HAS_SUFFIX_SVG 4
|
||||||
HAS_ICON_FILE 8
|
HAS_ICON_FILE 8
|
||||||
|
|
||||||
ImageData:
|
ImageData:
|
||||||
|
@@ -1,15 +1,14 @@
|
|||||||
|
----
|
||||||
Title: Cairo interaction
|
Title: Cairo interaction
|
||||||
|
----
|
||||||
|
|
||||||
## Functions to support using cairo
|
## Functions to support using cairo
|
||||||
|
|
||||||
[Cairo](http://cairographics.org) is a graphics library that supports vector
|
[Cairo](http://cairographics.org) is a graphics library that supports vector
|
||||||
graphics and image compositing that can be used with GTK.
|
graphics and image compositing that can be used with GTK.
|
||||||
|
|
||||||
GDK does not wrap the Cairo API and it is not possible to use cairo directly
|
GDK does not wrap the Cairo API; instead it allows to create Cairo
|
||||||
to draw on a [class@Gdk.Surface]. You can either use a
|
drawing contexts which can be used to draw on [class@Gdk.Surface]s.
|
||||||
[GtkDrawingArea](../gtk4/class.DrawingArea.html) widget or
|
|
||||||
[gtk_snapshot_append_cairo](../gtk4/func.Snapshot.append_cairo.html)
|
|
||||||
for drawing with cairo in a GTK4 application.
|
|
||||||
|
|
||||||
Additional functions allow use [struct@Gdk.Rectangle]s with Cairo
|
Additional functions allow use [struct@Gdk.Rectangle]s with Cairo
|
||||||
and to use [struct@Gdk.RGBA], `GdkPixbuf`, and [class@Gdk.Surface]
|
and to use [struct@Gdk.RGBA], `GdkPixbuf`, and [class@Gdk.Surface]
|
||||||
|
@@ -25,8 +25,6 @@ base_url = "https://gitlab.gnome.org/GNOME/gtk/-/blob/main/"
|
|||||||
|
|
||||||
[extra]
|
[extra]
|
||||||
content_images = [
|
content_images = [
|
||||||
"../images/favicon.svg",
|
|
||||||
"../images/favicon-192x192.png",
|
|
||||||
"images/gtk-logo.svg",
|
"images/gtk-logo.svg",
|
||||||
]
|
]
|
||||||
urlmap_file = "urlmap.js"
|
urlmap_file = "urlmap.js"
|
||||||
|
@@ -24,8 +24,6 @@ base_url = "https://gitlab.gnome.org/GNOME/gtk/-/blob/main/"
|
|||||||
|
|
||||||
[extra]
|
[extra]
|
||||||
content_images = [
|
content_images = [
|
||||||
"../images/favicon.svg",
|
|
||||||
"../images/favicon-192x192.png",
|
|
||||||
"images/gtk-logo.svg",
|
"images/gtk-logo.svg",
|
||||||
]
|
]
|
||||||
urlmap_file = "urlmap.js"
|
urlmap_file = "urlmap.js"
|
||||||
|
@@ -67,8 +67,6 @@ content_files = [
|
|||||||
"macos.md",
|
"macos.md",
|
||||||
]
|
]
|
||||||
content_images = [
|
content_images = [
|
||||||
"../images/favicon.svg",
|
|
||||||
"../images/favicon-192x192.png",
|
|
||||||
"images/gtk-logo.svg",
|
"images/gtk-logo.svg",
|
||||||
"images/rotated-text.png",
|
"images/rotated-text.png",
|
||||||
"images/default_cursor.png",
|
"images/default_cursor.png",
|
||||||
@@ -109,5 +107,4 @@ content_images = [
|
|||||||
"images/popup-flip.png",
|
"images/popup-flip.png",
|
||||||
"images/popup-slide.png",
|
"images/popup-slide.png",
|
||||||
]
|
]
|
||||||
content_base_url = "https://gitlab.gnome.org/GNOME/gtk/-/blob/main/docs/reference/gdk/"
|
|
||||||
urlmap_file = "urlmap.js"
|
urlmap_file = "urlmap.js"
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,4 +1,4 @@
|
|||||||
Title: Keyboard Codes, Groups, And Modifiers
|
Title: Key Values
|
||||||
|
|
||||||
## Functions for manipulating keyboard codes
|
## Functions for manipulating keyboard codes
|
||||||
|
|
||||||
@@ -8,19 +8,19 @@ The complete list of key values can be found in the [`gdk/gdkkeysyms.h`](https:/
|
|||||||
file.
|
file.
|
||||||
|
|
||||||
Key values are regularly updated from the upstream X.org X11 implementation,
|
Key values are regularly updated from the upstream X.org X11 implementation,
|
||||||
so new values are added regularly. They will be prefixed with `GDK_KEY_` rather
|
so new values are added regularly. They will be prefixed with GDK_KEY_ rather
|
||||||
than `XF86XK_` or `XK_` (for older symbols).
|
than XF86XK_ or XK_ (for older symbols).
|
||||||
|
|
||||||
Key values can be converted into a string representation using
|
Key values can be converted into a string representation using
|
||||||
[`func@Gdk.keyval_name`]. The reverse function, converting a string to a key
|
gdk_keyval_name(). The reverse function, converting a string to a key value,
|
||||||
value, is provided by [`func@Gdk.keyval_from_name`].
|
is provided by gdk_keyval_from_name().
|
||||||
|
|
||||||
The case of key values can be determined using [`func@Gdk.keyval_is_upper`]
|
The case of key values can be determined using gdk_keyval_is_upper() and
|
||||||
and [`func@Gdk.keyval_is_lower`]. Key values can be converted to upper or lower
|
gdk_keyval_is_lower(). Key values can be converted to upper or lower case
|
||||||
case using [`func@Gdk.keyval_to_upper`] and [`func@Gdk.keyval_to_lower`].
|
using gdk_keyval_to_upper() and gdk_keyval_to_lower().
|
||||||
|
|
||||||
When it makes sense, key values can be converted to and from Unicode characters
|
When it makes sense, key values can be converted to and from
|
||||||
with [`func@Gdk.keyval_to_unicode`] and [`func@Gdk.unicode_to_keyval`].
|
Unicode characters with gdk_keyval_to_unicode() and gdk_unicode_to_keyval().
|
||||||
|
|
||||||
## Key groups
|
## Key groups
|
||||||
|
|
||||||
@@ -36,23 +36,23 @@ You can think of a [struct@Gdk.KeymapKey] as a representation of a symbol
|
|||||||
printed on a physical keyboard key. That is, it contains three pieces of
|
printed on a physical keyboard key. That is, it contains three pieces of
|
||||||
information:
|
information:
|
||||||
|
|
||||||
1. first, it contains the hardware keycode; this is an identifying number
|
1. first, it contains the hardware keycode; this is an identifying number
|
||||||
for a physical key
|
for a physical key
|
||||||
1. second, it contains the “level” of the key. The level indicates which
|
1. second, it contains the “level” of the key. The level indicates which
|
||||||
symbol on the key will be used, in a vertical direction. So on a standard
|
symbol on the key will be used, in a vertical direction. So on a standard
|
||||||
US keyboard, the key with the number “1“ on it also has the exclamation
|
US keyboard, the key with the number “1“ on it also has the exclamation
|
||||||
point (”!”) character on it. The level indicates whether to use the “1”
|
point (”!”) character on it. The level indicates whether to use the “1”
|
||||||
or the “!” symbol. The letter keys are considered to have a lowercase
|
or the “!” symbol. The letter keys are considered to have a lowercase
|
||||||
letter at level 0, and an uppercase letter at level 1, though normally
|
letter at level 0, and an uppercase letter at level 1, though normally
|
||||||
only the uppercase letter is printed on the key
|
only the uppercase letter is printed on the key
|
||||||
1. third, the [struct@Gdk.KeymapKey] contains a group; groups are not used on
|
1. third, the [struct@Gdk.KeymapKey] contains a group; groups are not used on
|
||||||
standard US keyboards, but are used in many other countries. On a
|
standard US keyboards, but are used in many other countries. On a
|
||||||
keyboard with groups, there can be 3 or 4 symbols printed on a single
|
keyboard with groups, there can be 3 or 4 symbols printed on a single
|
||||||
key. The group indicates movement in a horizontal direction. Usually
|
key. The group indicates movement in a horizontal direction. Usually
|
||||||
groups are used for two different languages. In group 0, a key might
|
groups are used for two different languages. In group 0, a key might
|
||||||
have two English characters, and in group 1 it might have two Hebrew
|
have two English characters, and in group 1 it might have two Hebrew
|
||||||
characters. The Hebrew characters will be printed on the key next to
|
characters. The Hebrew characters will be printed on the key next to
|
||||||
the English characters.
|
the English characters.
|
||||||
|
|
||||||
When GDK creates a key event in order to deliver a key press or release,
|
When GDK creates a key event in order to deliver a key press or release,
|
||||||
it first converts the current keyboard state into an effective group and
|
it first converts the current keyboard state into an effective group and
|
||||||
@@ -72,7 +72,7 @@ in the key event and can be obtained via [class@Gdk.KeyEvent] getters.
|
|||||||
### Consumed modifiers
|
### Consumed modifiers
|
||||||
|
|
||||||
The `consumed_modifiers` in a key event are modifiers that should be masked
|
The `consumed_modifiers` in a key event are modifiers that should be masked
|
||||||
out from `@state` when comparing this key press to a hot key. For instance,
|
out from @state when comparing this key press to a hot key. For instance,
|
||||||
on a US keyboard, the `plus` symbol is shifted, so when comparing a key
|
on a US keyboard, the `plus` symbol is shifted, so when comparing a key
|
||||||
press to a `<Control>plus` accelerator `<Shift>` should be masked out.
|
press to a `<Control>plus` accelerator `<Shift>` should be masked out.
|
||||||
|
|
||||||
@@ -91,8 +91,9 @@ if (keyval == GDK_PLUS &&
|
|||||||
```
|
```
|
||||||
|
|
||||||
An older interpretation of `consumed_modifiers` was that it contained
|
An older interpretation of `consumed_modifiers` was that it contained
|
||||||
all modifiers that might affect the translation of the key; this allowed
|
all modifiers that might affect the translation of the key;
|
||||||
accelerators to be stored with irrelevant consumed modifiers, by doing:
|
this allowed accelerators to be stored with irrelevant consumed
|
||||||
|
modifiers, by doing:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// XXX Don’t do this XXX
|
// XXX Don’t do this XXX
|
||||||
@@ -101,11 +102,12 @@ if (keyval == accel_keyval &&
|
|||||||
// Accelerator was pressed
|
// Accelerator was pressed
|
||||||
```
|
```
|
||||||
|
|
||||||
However, this did not work if multi-modifier combinations were used in the
|
However, this did not work if multi-modifier combinations were
|
||||||
keymap, since, for instance, `<Control>` would be masked out even if only
|
used in the keymap, since, for instance, `<Control>` would be
|
||||||
`<Control><Alt>` was used in the keymap. To support this usage as well as
|
masked out even if only `<Control><Alt>` was used in
|
||||||
well as possible, all single modifier combinations that could affect the key
|
the keymap. To support this usage as well as well as possible, all single
|
||||||
for any combination of modifiers will be returned in `consumed_modifiers`;
|
modifier combinations that could affect the key for any combination
|
||||||
multi-modifier combinations are returned only when actually found in `state`.
|
of modifiers will be returned in `consumed_modifiers`; multi-modifier
|
||||||
When you store accelerators, you should always store them with consumed
|
combinations are returned only when actually found in `state`. When
|
||||||
|
you store accelerators, you should always store them with consumed
|
||||||
modifiers removed. Store `<Control>plus`, not `<Control><Shift>plus`.
|
modifiers removed. Store `<Control>plus`, not `<Control><Shift>plus`.
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
Title: Pango Interaction
|
Title: Pango Interaction
|
||||||
|
|
||||||
Pango is the text layout system used by GDK and GTK. The functions
|
Pango is the text layout system used by GDK and GTK. The functions
|
||||||
and types in this section are used to obtain clip regions for
|
and types in this section are used to obtain clip regions for
|
||||||
|
@@ -36,8 +36,6 @@ content_files = [
|
|||||||
"paths.md",
|
"paths.md",
|
||||||
]
|
]
|
||||||
content_images = [
|
content_images = [
|
||||||
"../images/favicon.svg",
|
|
||||||
"../images/favicon-192x192.png",
|
|
||||||
"gtk-logo.svg",
|
"gtk-logo.svg",
|
||||||
"images/arc-dark.png",
|
"images/arc-dark.png",
|
||||||
"images/arc-light.png",
|
"images/arc-light.png",
|
||||||
@@ -64,5 +62,4 @@ content_images = [
|
|||||||
"images/stroke-miter.png",
|
"images/stroke-miter.png",
|
||||||
"images/stroke-round.png",
|
"images/stroke-round.png",
|
||||||
]
|
]
|
||||||
content_base_url = "https://gitlab.gnome.org/GNOME/gtk/-/blob/main/docs/reference/gsk/"
|
|
||||||
urlmap_file = "urlmap.js"
|
urlmap_file = "urlmap.js"
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
Title: Building GTK
|
Title: Compiling the GTK Libraries
|
||||||
Slug: gtk-building
|
Slug: gtk-building
|
||||||
|
|
||||||
|
## Building GTK
|
||||||
|
|
||||||
Before we get into the details of how to compile GTK, we should
|
Before we get into the details of how to compile GTK, we should
|
||||||
mention that in many cases, binary packages of GTK prebuilt for
|
mention that in many cases, binary packages of GTK prebuilt for
|
||||||
your operating system will be available, either from your
|
your operating system will be available, either from your
|
||||||
@@ -38,13 +40,13 @@ can run the build, using Ninja:
|
|||||||
|
|
||||||
```
|
```
|
||||||
cd builddir
|
cd builddir
|
||||||
meson compile
|
ninja
|
||||||
meson install
|
ninja install
|
||||||
```
|
```
|
||||||
|
|
||||||
If you don't have permission to write to the directory you are
|
If you don't have permission to write to the directory you are
|
||||||
installing in, you may have to change to root temporarily before
|
installing in, you may have to change to root temporarily before
|
||||||
running `meson install`.
|
running `ninja install`.
|
||||||
|
|
||||||
Several environment variables are useful to pass to set before
|
Several environment variables are useful to pass to set before
|
||||||
running *meson*. `CPPFLAGS` contains options to pass to the C
|
running *meson*. `CPPFLAGS` contains options to pass to the C
|
||||||
@@ -112,10 +114,10 @@ responsible for controlling the debugging features of GTK with
|
|||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
Before you can compile GTK, you need to have various other tools and
|
Before you can compile the GTK widget toolkit, you need to have
|
||||||
libraries installed on your system. Dependencies of GTK have their own
|
various other tools and libraries installed on your
|
||||||
build systems, so you will need to refer to their own installation
|
system. Dependencies of GTK have their own build systems, so
|
||||||
instructions.
|
you will need to refer to their own installation instructions.
|
||||||
|
|
||||||
A particular important tool used by GTK to find its dependencies
|
A particular important tool used by GTK to find its dependencies
|
||||||
is `pkg-config`.
|
is `pkg-config`.
|
||||||
@@ -156,8 +158,8 @@ Other libraries are maintained separately.
|
|||||||
the development environment for these libraries that your
|
the development environment for these libraries that your
|
||||||
operating system vendor provides.
|
operating system vendor provides.
|
||||||
- The [fontconfig](https://www.freedesktop.org/wiki/Software/fontconfig/)
|
- The [fontconfig](https://www.freedesktop.org/wiki/Software/fontconfig/)
|
||||||
library provides Pango with a standard way of locating fonts and matching
|
library provides Pango with a standard way of locating
|
||||||
them against font names.
|
fonts and matching them against font names.
|
||||||
- [Cairo](https://www.cairographics.org) is a graphics library that
|
- [Cairo](https://www.cairographics.org) is a graphics library that
|
||||||
supports vector graphics and image compositing. Both Pango and GTK
|
supports vector graphics and image compositing. Both Pango and GTK
|
||||||
use Cairo for drawing. Note that we also need the auxiliary cairo-gobject
|
use Cairo for drawing. Note that we also need the auxiliary cairo-gobject
|
||||||
@@ -220,12 +222,13 @@ meson configure builddir
|
|||||||
|
|
||||||
### `x11-backend`, `win32-backend`, `broadway-backend`, `wayland-backend` and `macos-backend`
|
### `x11-backend`, `win32-backend`, `broadway-backend`, `wayland-backend` and `macos-backend`
|
||||||
|
|
||||||
Enable specific backends for GDK. If none of these options are given, the
|
Enable specific backends for GDK. If none of these options
|
||||||
Wayland backend will be enabled by default, if the platform is Linux; the
|
are given, the Wayland backend will be enabled by default,
|
||||||
X11 backend will also be enabled by default, unless the platform is Windows,
|
if the platform is Linux; the X11 backend will also be enabled
|
||||||
in which case the default is win32, or the platform is macOS, in which case
|
by default, unless the platform is Windows, in which case the
|
||||||
the default is macOS. If any backend is explicitly enabled or disabled, no
|
default is win32, or the platform is macOS, in which case the
|
||||||
other platform will be enabled automatically.
|
default is macOS. If any backend is explicitly enabled or disabled,
|
||||||
|
no other platform will be enabled automatically.
|
||||||
|
|
||||||
### `vulkan`
|
### `vulkan`
|
||||||
|
|
||||||
@@ -233,7 +236,7 @@ By default, GTK will try to build with support for the Vulkan graphics
|
|||||||
API in addition to cairo and OpenGL. This option can be used to explicitly
|
API in addition to cairo and OpenGL. This option can be used to explicitly
|
||||||
control whether Vulkan should be used.
|
control whether Vulkan should be used.
|
||||||
|
|
||||||
### `media-gstreamer`
|
### `media-gstreamer` and `media-ffmpeg`
|
||||||
|
|
||||||
By default, GTK will try to build the gstreamer backend for
|
By default, GTK will try to build the gstreamer backend for
|
||||||
media playback support. These options can be used to explicitly
|
media playback support. These options can be used to explicitly
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
Title: Coordinate systems in GTK
|
Title: Coordinate systems
|
||||||
Slug: gtk-coordinates
|
Slug: gtk-coordinates
|
||||||
|
|
||||||
|
## Coordinate systems in GTK
|
||||||
|
|
||||||
All coordinate systems in GTK have the origin at the top left, with the X axis
|
All coordinate systems in GTK have the origin at the top left, with the X axis
|
||||||
pointing right, and the Y axis pointing down. This matches the convention used
|
pointing right, and the Y axis pointing down. This matches the convention used
|
||||||
in X11, Wayland and cairo, but differs from OpenGL and PostScript, where the origin
|
in X11, Wayland and cairo, but differs from OpenGL and PostScript, where the origin
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
Title: CSS in GTK
|
Title: CSS in GTK
|
||||||
Slug: css
|
Slug: css
|
||||||
|
|
||||||
This chapter describes how GTK uses CSS for styling and layout.
|
This chapter describes how GTK uses CSS for styling and layout.
|
||||||
It is not meant to be an explanation of CSS from first principles,
|
It is not meant to be an explanation of CSS from first principles,
|
||||||
but focuses on listing supported CSS features and differences
|
but focuses on listing supported CSS features and differences
|
||||||
between Web CSS and GTK.
|
between Web CSS and GTK.
|
||||||
@@ -74,7 +74,6 @@ in a selector, widget names must be prefixed with a # character.
|
|||||||
| E:not(selector) | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#negation) | |
|
| E:not(selector) | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#negation) | |
|
||||||
| E:dir(ltr), E:dir(rtl) | [CSS Selector Level 4](https://drafts.csswg.org/selectors/#the-dir-pseudo) | |
|
| E:dir(ltr), E:dir(rtl) | [CSS Selector Level 4](https://drafts.csswg.org/selectors/#the-dir-pseudo) | |
|
||||||
| E:drop(active) | [CSS Selector Level 4](https://drafts.csswg.org/selectors/#drag-pseudos) | |
|
| E:drop(active) | [CSS Selector Level 4](https://drafts.csswg.org/selectors/#drag-pseudos) | |
|
||||||
| E:root | [CSS Selector Level 3](https://www.w3.org/TR/selectors-3/#root-pseudo) | |
|
|
||||||
| E F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#descendent-combinators) | |
|
| E F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#descendent-combinators) | |
|
||||||
| E > F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#child-combinators) | |
|
| E > F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#child-combinators) | |
|
||||||
| E ~ F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#general-sibling-combinators) | |
|
| E ~ F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#general-sibling-combinators) | |
|
||||||
|
@@ -21,7 +21,7 @@ Percentage
|
|||||||
: %, calc()
|
: %, calc()
|
||||||
|
|
||||||
Angle
|
Angle
|
||||||
: deg, rad, grad, turn, calc()
|
: deg, grad, turn, calc()
|
||||||
|
|
||||||
Time
|
Time
|
||||||
: s, ms, calc()
|
: s, ms, calc()
|
||||||
@@ -56,30 +56,6 @@ follows:
|
|||||||
1 value:
|
1 value:
|
||||||
: all
|
: all
|
||||||
|
|
||||||
## Custom Properties
|
|
||||||
|
|
||||||
GTK supports custom properties as defined in the
|
|
||||||
[CSS Custom Properties for Cascading Variables](https://www.w3.org/TR/css-variables-1)
|
|
||||||
spec.
|
|
||||||
|
|
||||||
Custom properties are defined as follows:
|
|
||||||
|
|
||||||
```css
|
|
||||||
--prop: red;
|
|
||||||
```
|
|
||||||
|
|
||||||
and used via the `var` keyword:
|
|
||||||
|
|
||||||
```css
|
|
||||||
color: var(--prop);
|
|
||||||
```
|
|
||||||
|
|
||||||
Custom properties can have a fallback for when the referred property is invalid:
|
|
||||||
|
|
||||||
```css
|
|
||||||
color: var(--prop, green);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Colors
|
## Colors
|
||||||
|
|
||||||
GTK extends the CSS syntax with several additional ways to specify colors.
|
GTK extends the CSS syntax with several additional ways to specify colors.
|
||||||
@@ -99,7 +75,7 @@ define colors. Color expressions resemble functions, taking 1 or more colors
|
|||||||
and in some cases a number as arguments.
|
and in some cases a number as arguments.
|
||||||
|
|
||||||
`lighter(Color)`
|
`lighter(Color)`
|
||||||
: produces a brighter variant of Color
|
: produces a brigher variant of Color
|
||||||
|
|
||||||
`darker(Color)`
|
`darker(Color)`
|
||||||
: produces a darker variant of Color
|
: produces a darker variant of Color
|
||||||
|
@@ -41,7 +41,7 @@ activate (GtkApplication* app,
|
|||||||
window = gtk_application_window_new (app);
|
window = gtk_application_window_new (app);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Window");
|
gtk_window_set_title (GTK_WINDOW (window), "Window");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_show (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -183,7 +183,7 @@ activate (GtkApplication *app,
|
|||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_show (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -331,7 +331,8 @@ activate (GtkApplication *app,
|
|||||||
*/
|
*/
|
||||||
gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 2, 1);
|
gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 2, 1);
|
||||||
|
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_show (window);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -553,7 +554,7 @@ activate (GtkApplication *app,
|
|||||||
|
|
||||||
g_signal_connect (press, "pressed", G_CALLBACK (pressed), drawing_area);
|
g_signal_connect (press, "pressed", G_CALLBACK (pressed), drawing_area);
|
||||||
|
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_show (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -630,7 +631,7 @@ activate (GtkApplication *app,
|
|||||||
button = gtk_builder_get_object (builder, "quit");
|
button = gtk_builder_get_object (builder, "quit");
|
||||||
g_signal_connect_swapped (button, "clicked", G_CALLBACK (quit_cb), window);
|
g_signal_connect_swapped (button, "clicked", G_CALLBACK (quit_cb), window);
|
||||||
|
|
||||||
gtk_widget_set_visible (GTK_WIDGET (window), TRUE);
|
gtk_widget_show (GTK_WIDGET (window));
|
||||||
|
|
||||||
/* We do not need the builder any more */
|
/* We do not need the builder any more */
|
||||||
g_object_unref (builder);
|
g_object_unref (builder);
|
||||||
|