Compare commits
25 Commits
compile-ui
...
wip/matthi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
825b2a4139 | ||
|
|
8a23649d40 | ||
|
|
bf367b219b | ||
|
|
77435d31fa | ||
|
|
6edb8f096f | ||
|
|
c4dfee8860 | ||
|
|
8ac1e77c9a | ||
|
|
65ceb6c15a | ||
|
|
f70d10f6ac | ||
|
|
0bbd083d79 | ||
|
|
102d2986c6 | ||
|
|
c74201ca87 | ||
|
|
b09019a5b4 | ||
|
|
1dd08ad8db | ||
|
|
eb0704855f | ||
|
|
c4c1d4a1b3 | ||
|
|
e6756f605e | ||
|
|
1f4b8e089e | ||
|
|
c0e08db739 | ||
|
|
1c337d350d | ||
|
|
81e675dfbf | ||
|
|
8556221429 | ||
|
|
1b4109a7fd | ||
|
|
df0786be7a | ||
|
|
3f545da08d |
187
.gitlab-ci.yml
187
.gitlab-ci.yml
@@ -1,13 +1,8 @@
|
|||||||
include:
|
|
||||||
- project: 'gnome/citemplates'
|
|
||||||
file: 'flatpak/flatpak_ci_initiative.yml'
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- build
|
- build
|
||||||
- analysis
|
- analysis
|
||||||
- docs
|
- docs
|
||||||
- flatpak
|
- flatpak
|
||||||
- publish
|
|
||||||
- deploy
|
- deploy
|
||||||
|
|
||||||
.cache-paths: &cache-paths
|
.cache-paths: &cache-paths
|
||||||
@@ -21,12 +16,13 @@ stages:
|
|||||||
|
|
||||||
# Common variables
|
# Common variables
|
||||||
variables:
|
variables:
|
||||||
COMMON_MESON_FLAGS: "-Dwerror=true -Dglib:werror=false -Dpango:werror=false -Dgtk-doc:werror=false -Dwayland-protocols:werror=false -Dsysprof:werror=false"
|
COMMON_MESON_FLAGS: "--fatal-meson-warnings --werror"
|
||||||
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true -Dvulkan=yes"
|
||||||
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled"
|
FEATURE_FLAGS: "-Dcloudproviders=true"
|
||||||
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
MESON_TEST_TIMEOUT_MULTIPLIER: 2
|
||||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v34"
|
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v17"
|
||||||
FLATPAK_IMAGE: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master"
|
FLATPAK_IMAGE: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master"
|
||||||
|
DOCS_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora-docs:v19"
|
||||||
|
|
||||||
.only-default:
|
.only-default:
|
||||||
only:
|
only:
|
||||||
@@ -43,7 +39,6 @@ style-check-diff:
|
|||||||
- .gitlab-ci/run-style-check-diff.sh
|
- .gitlab-ci/run-style-check-diff.sh
|
||||||
|
|
||||||
.build-fedora-default:
|
.build-fedora-default:
|
||||||
extends: .only-default
|
|
||||||
image: $FEDORA_IMAGE
|
image: $FEDORA_IMAGE
|
||||||
artifacts:
|
artifacts:
|
||||||
when: always
|
when: always
|
||||||
@@ -58,10 +53,8 @@ style-check-diff:
|
|||||||
- "${CI_PROJECT_DIR}/_build/report*.xml"
|
- "${CI_PROJECT_DIR}/_build/report*.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report*.html"
|
- "${CI_PROJECT_DIR}/_build/report*.html"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*/*.png"
|
- "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*/*.png"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
||||||
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
|
||||||
cache:
|
cache:
|
||||||
key: "$CI_JOB_NAME"
|
key: "$CI_JOB_NAME"
|
||||||
paths:
|
paths:
|
||||||
@@ -75,20 +68,13 @@ style-check-diff:
|
|||||||
fedora-x86_64:
|
fedora-x86_64:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
stage: build
|
stage: build
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
EXTRA_MESON_FLAGS: "--buildtype=debug --default-library=both"
|
EXTRA_MESON_FLAGS: "--buildtype=debug --default-library=both"
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
||||||
- meson subprojects update
|
-Dprofiler=true
|
||||||
- mkdir _install
|
|
||||||
- meson --prefix=${CI_PROJECT_DIR}/_install
|
|
||||||
${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
|
||||||
_build
|
_build
|
||||||
- meson compile -C _build
|
- ninja -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
|
|
||||||
- meson compile -C _build_hello
|
|
||||||
- .gitlab-ci/run-tests.sh _build x11
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
- .gitlab-ci/run-tests.sh _build wayland
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
- .gitlab-ci/run-tests.sh _build broadway
|
- .gitlab-ci/run-tests.sh _build broadway
|
||||||
@@ -96,43 +82,15 @@ fedora-x86_64:
|
|||||||
release-build:
|
release-build:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
stage: build
|
stage: build
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
EXTRA_MESON_FLAGS: "--buildtype=release"
|
EXTRA_MESON_FLAGS: "--buildtype=release"
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
|
||||||
- meson subprojects update
|
|
||||||
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
||||||
_build
|
_build
|
||||||
- ninja -C _build
|
- ninja -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build x11
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
|
|
||||||
installed-tests:
|
|
||||||
extends: .build-fedora-default
|
|
||||||
stage: build
|
|
||||||
needs: []
|
|
||||||
variables:
|
|
||||||
EXTRA_MESON_FLAGS: "--prefix=/usr --libdir=/usr/lib64 -Dinstall-tests=true"
|
|
||||||
G_TEST_ACCESSIBLE: 1
|
|
||||||
script:
|
|
||||||
- .gitlab-ci/show-info-linux.sh
|
|
||||||
- meson subprojects update
|
|
||||||
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
|
||||||
_build
|
|
||||||
- ninja -C _build
|
|
||||||
- sudo ninja -C _build install
|
|
||||||
- dbus-run-session xvfb-run -a -s "-screen 0 1024x768x24"
|
|
||||||
gnome-desktop-testing-runner
|
|
||||||
--report-directory=_build/installed-tests-report/failed/
|
|
||||||
--parallel=0
|
|
||||||
gtk-4.0
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "_build/installed-tests-report/"
|
|
||||||
|
|
||||||
|
|
||||||
.mingw-defaults:
|
.mingw-defaults:
|
||||||
extends: .only-default
|
|
||||||
stage: build
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- win32-ps
|
- win32-ps
|
||||||
@@ -151,56 +109,10 @@ installed-tests:
|
|||||||
|
|
||||||
msys2-mingw64:
|
msys2-mingw64:
|
||||||
extends: .mingw-defaults
|
extends: .mingw-defaults
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
MSYSTEM: "MINGW64"
|
MSYSTEM: "MINGW64"
|
||||||
CHERE_INVOKING: "yes"
|
CHERE_INVOKING: "yes"
|
||||||
|
|
||||||
macos:
|
|
||||||
extends: .only-default
|
|
||||||
only:
|
|
||||||
- branches@GNOME/gtk
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- macos
|
|
||||||
needs: []
|
|
||||||
before_script:
|
|
||||||
- bash .gitlab-ci/show-info-osx.sh
|
|
||||||
- pip3 install --user meson==0.56
|
|
||||||
- pip3 install --user ninja
|
|
||||||
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
|
|
||||||
- export MESON_FORCE_BACKTRACE=1
|
|
||||||
script:
|
|
||||||
- meson -Dx11-backend=false
|
|
||||||
-Dbroadway-backend=true
|
|
||||||
-Dmacos-backend=true
|
|
||||||
-Dmedia-gstreamer=disabled
|
|
||||||
-Dintrospection=disabled
|
|
||||||
-Dcpp_std=c++11
|
|
||||||
-Dpixman:tests=disabled
|
|
||||||
_build
|
|
||||||
- ninja -C _build
|
|
||||||
artifacts:
|
|
||||||
when: always
|
|
||||||
paths:
|
|
||||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
|
||||||
|
|
||||||
vs2017-x64:
|
|
||||||
extends: .only-default
|
|
||||||
# TODO: Uncomment this when ready to merge.
|
|
||||||
#only:
|
|
||||||
# - branches@GNOME/gtk
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- win32-ps
|
|
||||||
needs: []
|
|
||||||
script:
|
|
||||||
- .gitlab-ci/test-msvc.bat
|
|
||||||
artifacts:
|
|
||||||
when: always
|
|
||||||
paths:
|
|
||||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
|
||||||
|
|
||||||
.flatpak-defaults:
|
.flatpak-defaults:
|
||||||
image: $FLATPAK_IMAGE
|
image: $FLATPAK_IMAGE
|
||||||
stage: flatpak
|
stage: flatpak
|
||||||
@@ -210,7 +122,6 @@ vs2017-x64:
|
|||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- "${APPID}-dev.flatpak"
|
- "${APPID}-dev.flatpak"
|
||||||
- 'repo.tar'
|
|
||||||
expire_in: 1 day
|
expire_in: 1 day
|
||||||
script:
|
script:
|
||||||
- bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
|
- bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
|
||||||
@@ -228,62 +139,37 @@ vs2017-x64:
|
|||||||
|
|
||||||
flatpak-manual:demo:
|
flatpak-manual:demo:
|
||||||
extends: .flatpak-manual
|
extends: .flatpak-manual
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.Demo4
|
APPID: org.gtk.Demo4
|
||||||
|
|
||||||
flatpak-master:demo:
|
flatpak-master:demo:
|
||||||
extends: .flatpak-master
|
extends: .flatpak-master
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.Demo4
|
APPID: org.gtk.Demo4
|
||||||
|
|
||||||
flatpak-manual:widget-factory:
|
flatpak-manual:widget-factory:
|
||||||
extends: .flatpak-manual
|
extends: .flatpak-manual
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.WidgetFactory4
|
APPID: org.gtk.WidgetFactory4
|
||||||
|
|
||||||
flatpak-master:widget-factory:
|
flatpak-master:widget-factory:
|
||||||
extends: .flatpak-master
|
extends: .flatpak-master
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.WidgetFactory4
|
APPID: org.gtk.WidgetFactory4
|
||||||
|
|
||||||
flatpak-manual:icon-browser:
|
flatpak-manual:icon-browser:
|
||||||
extends: .flatpak-manual
|
extends: .flatpak-manual
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.IconBrowser4
|
APPID: org.gtk.IconBrowser4
|
||||||
|
|
||||||
flatpak-master:icon-browser:
|
flatpak-master:icon-browser:
|
||||||
extends: .flatpak-master
|
extends: .flatpak-master
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.IconBrowser4
|
APPID: org.gtk.IconBrowser4
|
||||||
|
|
||||||
# Publish the demo apps to the GNOME Nightly repo
|
|
||||||
# https://wiki.gnome.org/Apps/Nightly
|
|
||||||
# https://gitlab.gnome.org/GNOME/Initiatives/-/wikis/DevOps-with-Flatpak
|
|
||||||
nightly demo:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
dependencies: ['flatpak-master:demo']
|
|
||||||
needs: ['flatpak-master:demo']
|
|
||||||
|
|
||||||
nightly factory:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
dependencies: ['flatpak-master:widget-factory']
|
|
||||||
needs: ['flatpak-master:widget-factory']
|
|
||||||
|
|
||||||
nightly icon-browser:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
dependencies: ['flatpak-master:icon-browser']
|
|
||||||
needs: ['flatpak-master:icon-browser']
|
|
||||||
|
|
||||||
static-scan:
|
static-scan:
|
||||||
image: $FEDORA_IMAGE
|
image: $FEDORA_IMAGE
|
||||||
stage: analysis
|
stage: analysis
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
EXTRA_MESON_FLAGS: "--buildtype=debug"
|
EXTRA_MESON_FLAGS: "--buildtype=debug"
|
||||||
script:
|
script:
|
||||||
@@ -294,55 +180,28 @@ static-scan:
|
|||||||
- _scan_build/meson-logs
|
- _scan_build/meson-logs
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
# Run tests with the address sanitizer. We need to turn off introspection,
|
|
||||||
# since it is incompatible with asan
|
|
||||||
asan-build:
|
|
||||||
image: $FEDORA_IMAGE
|
|
||||||
tags: [ asan ]
|
|
||||||
stage: analysis
|
|
||||||
needs: []
|
|
||||||
variables:
|
|
||||||
script:
|
|
||||||
- CC=clang meson --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=disabled _build
|
|
||||||
- ninja -C _build
|
|
||||||
- .gitlab-ci/run-tests.sh _build wayland
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- _build/meson-logs
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
reference:
|
reference:
|
||||||
image: $FEDORA_IMAGE
|
image: $DOCS_IMAGE
|
||||||
stage: docs
|
stage: docs
|
||||||
needs: []
|
|
||||||
variables:
|
variables:
|
||||||
EXTRA_MESON_FLAGS: "--buildtype=release --force-fallback-for=gdk-pixbuf,pango"
|
EXTRA_MESON_FLAGS: "--buildtype=release"
|
||||||
script:
|
script:
|
||||||
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} -Dgtk_doc=true -Dgdk-pixbuf:gtk_doc=true -Dpango:gtk_doc=true _build
|
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} -Dgtk_doc=true _build
|
||||||
- meson compile -C _build
|
- ninja -C _build gdk4-doc gsk4-doc gtk4-doc
|
||||||
- mkdir -p _reference/
|
- mkdir -p _reference/
|
||||||
- mv _build/docs/reference/gdk/gdk4/ _reference/gdk4/
|
- mv _build/docs/reference/gdk/html/ _reference/gdk/
|
||||||
- mv _build/docs/reference/gdk/gdk4-x11/ _reference/gdk4-x11/
|
- mv _build/docs/reference/gsk/html/ _reference/gsk/
|
||||||
- mv _build/docs/reference/gdk/gdk4-wayland/ _reference/gdk4-wayland/
|
- mv _build/docs/reference/gtk/html/ _reference/gtk/
|
||||||
- mv _build/docs/reference/gsk/gsk4/ _reference/gsk4/
|
|
||||||
- mv _build/docs/reference/gtk/gtk4/ _reference/gtk4/
|
|
||||||
- mv _build/subprojects/pango/docs/Pango/ _reference/Pango/
|
|
||||||
- mv _build/subprojects/pango/docs/PangoCairo/ _reference/PangoCairo/
|
|
||||||
- mv _build/subprojects/pango/docs/PangoFc/ _reference/PangoFc/
|
|
||||||
- mv _build/subprojects/pango/docs/PangoFT2/ _reference/PangoFT2/
|
|
||||||
- mv _build/subprojects/pango/docs/PangoOT/ _reference/PangoOT/
|
|
||||||
- mv _build/subprojects/pango/docs/PangoXft/ _reference/PangoXft/
|
|
||||||
- mv _build/subprojects/gdk-pixbuf/docs/gdk-pixbuf/ _reference/gdk-pixbuf/
|
|
||||||
- mv _build/subprojects/gdk-pixbuf/docs/gdk-pixdata/ _reference/gdk-pixdata/
|
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- _reference
|
- _reference
|
||||||
|
|
||||||
publish-docs:
|
pages:
|
||||||
stage: publish
|
stage: deploy
|
||||||
needs: ['reference']
|
|
||||||
script:
|
script:
|
||||||
- "curl -X POST -F token=${PAGES_TRIGGER_TOKEN} -F ref=docs-gtk-org https://gitlab.gnome.org/api/v4/projects/665/trigger/pipeline"
|
- mv _reference/ public/
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- public
|
||||||
only:
|
only:
|
||||||
refs:
|
- master
|
||||||
- master
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ branch, as well as their available versions.
|
|||||||
### Checklist for Updating a CI image
|
### Checklist for Updating a CI image
|
||||||
|
|
||||||
- [ ] Update the `${image}.Dockerfile` file with the dependencies
|
- [ ] Update the `${image}.Dockerfile` file with the dependencies
|
||||||
- [ ] Run `./run-docker.sh build --base ${image} --version ${number}`
|
- [ ] Run `./run-docker.sh build --base ${image} --base-version ${number}`
|
||||||
- [ ] Run `./run-docker.sh push --base ${image} --version ${number}`
|
- [ ] Run `./run-docker.sh push --base ${image} --base-version ${number}`
|
||||||
once the Docker image is built; you may need to log in by using
|
once the Docker image is built; you may need to log in by using
|
||||||
`docker login` or `podman login`
|
`docker login` or `podman login`
|
||||||
- [ ] Update the `image` keys in the `.gitlab-ci.yml` file with the new
|
- [ ] Update the `image` keys in the `.gitlab-ci.yml` file with the new
|
||||||
@@ -30,18 +30,9 @@ branch, as well as their available versions.
|
|||||||
- [ ] Write a new `${image}.Dockerfile` with the instructions to set up
|
- [ ] Write a new `${image}.Dockerfile` with the instructions to set up
|
||||||
a build environment
|
a build environment
|
||||||
- [ ] Add the `pip3 install meson` incantation
|
- [ ] Add the `pip3 install meson` incantation
|
||||||
- [ ] Run `./run-docker.sh build --base ${image} --version ${number}`
|
- [ ] Run `./run-docker.sh build --base ${image} --base-version ${number}`
|
||||||
- [ ] Run `./run-docker.sh push --base ${image} --version ${number}`
|
- [ ] Run `./run-docker.sh push --base ${image} --base-version ${number}`
|
||||||
- [ ] Add the new job to `.gitlab-ci.yml` referencing the image
|
- [ ] Add the new job to `.gitlab-ci.yml` referencing the image
|
||||||
- [ ] Open a merge request with your changes and let it run
|
- [ ] Open a merge request with your changes and let it run
|
||||||
|
|
||||||
### Checklist for Adding a new dependency to a CI image
|
|
||||||
|
|
||||||
Our images are layered, and the base (called fedora-base) contains
|
|
||||||
all the rpm payload. Therefore, adding a new dependency is a 2-step
|
|
||||||
process:
|
|
||||||
|
|
||||||
1. [ ] Build and upload fedora-base:$version+1
|
|
||||||
1. [ ] Build and upload fedora:$version+1 based on fedora-base:version+1
|
|
||||||
|
|
||||||
[registry]: https://gitlab.gnome.org/GNOME/gtk/container_registry
|
[registry]: https://gitlab.gnome.org/GNOME/gtk/container_registry
|
||||||
|
|||||||
88
.gitlab-ci/fedora-base.Dockerfile
Normal file
88
.gitlab-ci/fedora-base.Dockerfile
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
FROM fedora:31
|
||||||
|
|
||||||
|
RUN dnf -y install \
|
||||||
|
adwaita-icon-theme \
|
||||||
|
atk-devel \
|
||||||
|
at-spi2-atk-devel \
|
||||||
|
avahi-gobject-devel \
|
||||||
|
cairo-devel \
|
||||||
|
cairo-gobject-devel \
|
||||||
|
ccache \
|
||||||
|
clang \
|
||||||
|
clang-analyzer \
|
||||||
|
colord-devel \
|
||||||
|
cups-devel \
|
||||||
|
dbus-daemon \
|
||||||
|
dbus-x11 \
|
||||||
|
dejavu-sans-mono-fonts \
|
||||||
|
desktop-file-utils \
|
||||||
|
diffutils \
|
||||||
|
elfutils-libelf-devel \
|
||||||
|
fribidi-devel \
|
||||||
|
gcc \
|
||||||
|
gcc-c++ \
|
||||||
|
gdk-pixbuf2-devel \
|
||||||
|
gdk-pixbuf2-modules \
|
||||||
|
gettext \
|
||||||
|
git \
|
||||||
|
glib2-devel \
|
||||||
|
glib2-static \
|
||||||
|
glibc-devel \
|
||||||
|
glibc-headers \
|
||||||
|
gobject-introspection-devel \
|
||||||
|
graphene-devel \
|
||||||
|
gstreamer1-devel \
|
||||||
|
gstreamer1-plugins-good \
|
||||||
|
gstreamer1-plugins-bad-free-devel \
|
||||||
|
gstreamer1-plugins-base-devel \
|
||||||
|
gtk-doc \
|
||||||
|
hicolor-icon-theme \
|
||||||
|
iso-codes \
|
||||||
|
itstool \
|
||||||
|
json-glib-devel \
|
||||||
|
lcov \
|
||||||
|
libattr-devel \
|
||||||
|
libepoxy-devel \
|
||||||
|
libffi-devel \
|
||||||
|
libmount-devel \
|
||||||
|
librsvg2 \
|
||||||
|
libselinux-devel \
|
||||||
|
libXcomposite-devel \
|
||||||
|
libXcursor-devel \
|
||||||
|
libXcursor-devel \
|
||||||
|
libXdamage-devel \
|
||||||
|
libXfixes-devel \
|
||||||
|
libXi-devel \
|
||||||
|
libXinerama-devel \
|
||||||
|
libxkbcommon-devel \
|
||||||
|
libXrandr-devel \
|
||||||
|
libXrender-devel \
|
||||||
|
libXtst-devel \
|
||||||
|
libxslt \
|
||||||
|
mesa-dri-drivers \
|
||||||
|
mesa-libEGL-devel \
|
||||||
|
mesa-libwayland-egl-devel \
|
||||||
|
ninja-build \
|
||||||
|
pango-devel \
|
||||||
|
pcre-devel \
|
||||||
|
pcre-static \
|
||||||
|
python3 \
|
||||||
|
python3-jinja2 \
|
||||||
|
python3-pip \
|
||||||
|
python3-pygments \
|
||||||
|
python3-wheel \
|
||||||
|
redhat-rpm-config \
|
||||||
|
sassc \
|
||||||
|
sysprof-devel \
|
||||||
|
systemtap-sdt-devel \
|
||||||
|
vulkan-devel \
|
||||||
|
wayland-devel \
|
||||||
|
wayland-protocols-devel \
|
||||||
|
weston \
|
||||||
|
weston-libs \
|
||||||
|
which \
|
||||||
|
xorg-x11-server-Xvfb \
|
||||||
|
&& dnf clean all
|
||||||
|
|
||||||
|
RUN pip3 install meson==0.53.1
|
||||||
|
|
||||||
12
.gitlab-ci/fedora-docs.Dockerfile
Normal file
12
.gitlab-ci/fedora-docs.Dockerfile
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v19
|
||||||
|
|
||||||
|
RUN dnf -y install pandoc
|
||||||
|
|
||||||
|
ARG HOST_USER_ID=5555
|
||||||
|
ENV HOST_USER_ID ${HOST_USER_ID}
|
||||||
|
RUN useradd -u $HOST_USER_ID -ms /bin/bash user
|
||||||
|
|
||||||
|
USER user
|
||||||
|
WORKDIR /home/user
|
||||||
|
|
||||||
|
ENV LANG C.UTF-8
|
||||||
@@ -1,107 +1,8 @@
|
|||||||
FROM fedora:34
|
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v19
|
||||||
|
|
||||||
RUN dnf -y install \
|
|
||||||
adwaita-icon-theme \
|
|
||||||
atk-devel \
|
|
||||||
at-spi2-atk-devel \
|
|
||||||
avahi-gobject-devel \
|
|
||||||
cairo-devel \
|
|
||||||
cairo-gobject-devel \
|
|
||||||
ccache \
|
|
||||||
clang \
|
|
||||||
clang-analyzer \
|
|
||||||
clang-tools-extra \
|
|
||||||
colord-devel \
|
|
||||||
cups-devel \
|
|
||||||
dbus-daemon \
|
|
||||||
dbus-x11 \
|
|
||||||
dejavu-sans-mono-fonts \
|
|
||||||
desktop-file-utils \
|
|
||||||
diffutils \
|
|
||||||
elfutils-libelf-devel \
|
|
||||||
fribidi-devel \
|
|
||||||
gcc \
|
|
||||||
gcc-c++ \
|
|
||||||
gdk-pixbuf2-devel \
|
|
||||||
gdk-pixbuf2-modules \
|
|
||||||
gettext \
|
|
||||||
git \
|
|
||||||
glib2-devel \
|
|
||||||
glib2-static \
|
|
||||||
glibc-devel \
|
|
||||||
glibc-headers \
|
|
||||||
gnome-desktop-testing \
|
|
||||||
gobject-introspection-devel \
|
|
||||||
graphene-devel \
|
|
||||||
graphviz \
|
|
||||||
gstreamer1-devel \
|
|
||||||
gstreamer1-plugins-good \
|
|
||||||
gstreamer1-plugins-bad-free-devel \
|
|
||||||
gstreamer1-plugins-base-devel \
|
|
||||||
hicolor-icon-theme \
|
|
||||||
iso-codes \
|
|
||||||
itstool \
|
|
||||||
json-glib-devel \
|
|
||||||
lcov \
|
|
||||||
libasan \
|
|
||||||
libattr-devel \
|
|
||||||
libcloudproviders-devel \
|
|
||||||
libepoxy-devel \
|
|
||||||
libffi-devel \
|
|
||||||
libjpeg-turbo-devel \
|
|
||||||
libmount-devel \
|
|
||||||
libpng-devel \
|
|
||||||
librsvg2 \
|
|
||||||
libselinux-devel \
|
|
||||||
libtiff-devel \
|
|
||||||
libubsan \
|
|
||||||
libXcomposite-devel \
|
|
||||||
libXcursor-devel \
|
|
||||||
libXcursor-devel \
|
|
||||||
libXdamage-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
libXi-devel \
|
|
||||||
libXinerama-devel \
|
|
||||||
libxkbcommon-devel \
|
|
||||||
libXrandr-devel \
|
|
||||||
libXrender-devel \
|
|
||||||
libXtst-devel \
|
|
||||||
libxslt \
|
|
||||||
mesa-dri-drivers \
|
|
||||||
mesa-libEGL-devel \
|
|
||||||
mesa-libGLES-devel \
|
|
||||||
meson \
|
|
||||||
ninja-build \
|
|
||||||
pango-devel \
|
|
||||||
pcre-devel \
|
|
||||||
pcre-static \
|
|
||||||
python3 \
|
|
||||||
python3-gobject \
|
|
||||||
python3-jinja2 \
|
|
||||||
python3-markdown \
|
|
||||||
python3-pip \
|
|
||||||
python3-pygments \
|
|
||||||
python3-toml \
|
|
||||||
python3-typogrify \
|
|
||||||
python3-wheel \
|
|
||||||
redhat-rpm-config \
|
|
||||||
sassc \
|
|
||||||
systemtap-sdt-devel \
|
|
||||||
vulkan-devel \
|
|
||||||
wayland-devel \
|
|
||||||
wayland-protocols-devel \
|
|
||||||
weston \
|
|
||||||
weston-libs \
|
|
||||||
which \
|
|
||||||
xorg-x11-server-Xvfb \
|
|
||||||
&& dnf clean all
|
|
||||||
|
|
||||||
# Enable sudo for wheel users
|
|
||||||
RUN sed -i -e 's/# %wheel/%wheel/' -e '0,/%wheel/{s/%wheel/# %wheel/}' /etc/sudoers
|
|
||||||
|
|
||||||
ARG HOST_USER_ID=5555
|
ARG HOST_USER_ID=5555
|
||||||
ENV HOST_USER_ID ${HOST_USER_ID}
|
ENV HOST_USER_ID ${HOST_USER_ID}
|
||||||
RUN useradd -u $HOST_USER_ID -G wheel -ms /bin/bash user
|
RUN useradd -u $HOST_USER_ID -ms /bin/bash user
|
||||||
|
|
||||||
USER user
|
USER user
|
||||||
WORKDIR /home/user
|
WORKDIR /home/user
|
||||||
|
|||||||
@@ -22,9 +22,8 @@ flatpak build ${builddir} meson \
|
|||||||
-Dprint-backends=file \
|
-Dprint-backends=file \
|
||||||
-Dbuild-tests=false \
|
-Dbuild-tests=false \
|
||||||
-Dbuild-examples=false \
|
-Dbuild-examples=false \
|
||||||
-Dintrospection=disabled \
|
-Dintrospection=false \
|
||||||
-Ddemos=true \
|
-Ddemos=true \
|
||||||
-Dprofile=devel \
|
|
||||||
_flatpak_build
|
_flatpak_build
|
||||||
|
|
||||||
flatpak build ${builddir} ninja -C _flatpak_build install
|
flatpak build ${builddir} ninja -C _flatpak_build install
|
||||||
@@ -41,8 +40,3 @@ flatpak build-bundle \
|
|||||||
${appid}-dev.flatpak \
|
${appid}-dev.flatpak \
|
||||||
--runtime-repo=https://nightly.gnome.org/gnome-nightly.flatpakrepo \
|
--runtime-repo=https://nightly.gnome.org/gnome-nightly.flatpakrepo \
|
||||||
${appid}
|
${appid}
|
||||||
|
|
||||||
# to be consumed by the nightly publish jobs
|
|
||||||
if [[ $CI_COMMIT_BRANCH == master ]]; then
|
|
||||||
tar cf repo.tar ${repodir}
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -1,154 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2021 GNOME Foundation
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* RedHat Fonts taken from https://github.com/RedHatOfficial/RedHatFont
|
|
||||||
* License: SIL Open Font License 1.1 http://scripts.sil.org/OFL
|
|
||||||
*/
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Serif:ital,wght@0,400;0,700;1,400;1,700&family=Red+Hat+Display:ital,wght@0,400;0,500;0,700;0,900;1,400;1,500;1,700;1,900&display=swap');
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Serif:ital,wght@0,400;0,700;1,400;1,700&display=swap');
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600&display=swap');
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-Regular.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-Regular.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-RegularItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-RegularItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 400;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-Medium.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-Medium.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 500;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-MediumItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-MediumItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 500;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-Bold.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-Bold.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-BoldItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-BoldItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-Black.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-Black.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 900;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatDisplayWeb";
|
|
||||||
src: local('RedHatDisplayWeb'),
|
|
||||||
url("RedHatDisplay-BlackItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatDisplay-BlackItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 900;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatTextWeb";
|
|
||||||
src: local('RedHatTextWeb'),
|
|
||||||
url("RedHatText-Regular.woff2") format("woff2"),
|
|
||||||
url("RedHatText-Regular.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatTextWeb";
|
|
||||||
src: local('RedHatTextWeb'),
|
|
||||||
url("RedHatText-RegularItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatText-RegularItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 400;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatTextWeb";
|
|
||||||
src: local('RedHatTextWeb'),
|
|
||||||
url("RedHatText-Medium.woff2") format("woff2"),
|
|
||||||
url("RedHatText-Medium.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatTextWeb";
|
|
||||||
src: local('RedHatTextWeb'),
|
|
||||||
url("RedHatText-MediumItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatText-MediumItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 700;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatTextWeb";
|
|
||||||
src: local('RedHatTextWeb'),
|
|
||||||
url("RedHatText-Bold.woff2") format("woff2"),
|
|
||||||
url("RedHatText-Bold.woff") format("woff");
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 900;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: "RedHatTextWeb";
|
|
||||||
src: local('RedHatTextWeb'),
|
|
||||||
url("RedHatText-BoldItalic.woff2") format("woff2"),
|
|
||||||
url("RedHatText-BoldItalic.woff") format("woff");
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 900;
|
|
||||||
font-display: fallback;
|
|
||||||
}
|
|
||||||
@@ -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 |
@@ -1,149 +0,0 @@
|
|||||||
<!--
|
|
||||||
SPDX-FileCopyrightText: 2021 GNOME Foundation
|
|
||||||
|
|
||||||
SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>GTK Documentation</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
|
|
||||||
<meta property="og:site_name" content="https://docs.gtk.org"/>
|
|
||||||
<meta property="og:title" content="GTK Documentation"/>
|
|
||||||
<meta property="og:url" content="https://docs.gtk.org"/>
|
|
||||||
<meta property="og:type" content="website"/>
|
|
||||||
<meta property="og:description" content="API reference for GTK"/>
|
|
||||||
|
|
||||||
<meta name="twitter:title" content="GTK Documentation"/>
|
|
||||||
<meta name="twitter:url" content="https://docs.gtk.org"/>
|
|
||||||
<meta name="twitter:card" content="summary"/>
|
|
||||||
|
|
||||||
<link rel="canonical" href="https://docs.gtk.org"/>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="style.css" type="text/css" />
|
|
||||||
|
|
||||||
<script src="main.js"></script>
|
|
||||||
|
|
||||||
<!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="body-wrapper" tabindex="-1">
|
|
||||||
|
|
||||||
<nav class="sidebar">
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<img src="gtk-logo.svg" class="logo"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<h5>Sections</h5>
|
|
||||||
<div class="links">
|
|
||||||
<a href="#user-interface">User interface</a>
|
|
||||||
<a href="#core-libraries">Core libraries</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<button id="btn-to-top" class="hidden"><span class="up-arrow"></span></button>
|
|
||||||
|
|
||||||
<section id="main" class="content">
|
|
||||||
<header>
|
|
||||||
<h1>GTK Documentation</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toggle-wrapper">
|
|
||||||
<h4 id="user-interface">
|
|
||||||
User interface
|
|
||||||
<a href="#user-interface" class="anchor"></a>
|
|
||||||
</h4>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="gdk">GTK</h5>
|
|
||||||
<p>GTK is the primary library used to construct user interfaces. It
|
|
||||||
provides user interface controls and signal callbacks to respond to
|
|
||||||
user actions.</p>
|
|
||||||
<p><a href="https://docs.gtk.org/gtk4/">GTK API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="gdk">GSK</h5>
|
|
||||||
<p>An intermediate layer which provides a rendering API implemented using Cairo, OpenGL or Vulkan.</p>
|
|
||||||
<p><a href="https://docs.gtk.org/gsk4/">GSK API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="gdk">GDK</h5>
|
|
||||||
<p>An intermediate layer which isolates GTK from the details of the windowing system.</p>
|
|
||||||
<p><a href="https://docs.gtk.org/gdk4/">GDK API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="pango">Pango</h5>
|
|
||||||
<p>Pango is the core text and font handling library used in GTK
|
|
||||||
applications. It has extensive support for the different writing
|
|
||||||
systems used throughout the world.</p>
|
|
||||||
<p><a href="https://docs.gtk.org/Pango/">Pango API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="gdk-pixbuf">GdkPixbuf</h5>
|
|
||||||
<p>GdkPixbuf is a library for image loading and manipulation.</p>
|
|
||||||
<p><a href="https://docs.gtk.org/gdk-pixbuf/">GdkPixbuf API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="cairo">Cairo</h5>
|
|
||||||
<p>Cairo is a 2D graphics library with support for multiple output
|
|
||||||
devices. It is designed to produce consistent, high quality output
|
|
||||||
on all media.</p>
|
|
||||||
<p><a href="https://www.cairographics.org/manual/" class="external">Cairo API reference</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toggle-wrapper">
|
|
||||||
<h4 id="core-libraries" style="display:flex;">
|
|
||||||
Core libraries
|
|
||||||
<a href="#core-libraries" class="anchor"></a>
|
|
||||||
</h4>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="glib">GLib</h5>
|
|
||||||
<p>GLib provides the core application building blocks for libraries
|
|
||||||
and applications written in C. It provides common data types
|
|
||||||
used in GTK, the main loop implementation, and a large set of
|
|
||||||
utility functions for strings and general portability across
|
|
||||||
different platforms.</p>
|
|
||||||
<p><a href="https://developer.gnome.org/glib/" class="external">GLib API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="gobject">GObject</h5>
|
|
||||||
<p>GObject provides the object system used by GTK.</p>
|
|
||||||
<p><a href="https://developer.gnome.org/gobject/" class="external">GObject API reference</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="docblock">
|
|
||||||
<h5 id="gio">GIO</h5>
|
|
||||||
<p>GIO provides a portable, modern and easy-to-use file system
|
|
||||||
abstraction API for accessing local and remote files; a set of
|
|
||||||
low and high level abstractions over the <a href="https://www.freedesktop.org/wiki/Software/dbus/" class="external">DBus</a>
|
|
||||||
IPC specification; an application settings API; portable networking
|
|
||||||
abstractions; and additional utilities for writing asynchronous
|
|
||||||
operations without blocking the user interface of your application.</p>
|
|
||||||
<p><a href="https://developer.gnome.org/gio/" class="external">GIO API reference</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2021 GNOME Foundation
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
|
||||||
function hasClass(elem, className) {
|
|
||||||
return elem && elem.classList && elem.classList.contains(className);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
|
||||||
function addClass(elem, className) {
|
|
||||||
if (!elem || !elem.classList) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
elem.classList.add(className);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
|
||||||
function removeClass(elem, className) {
|
|
||||||
if (!elem || !elem.classList) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
elem.classList.remove(className);
|
|
||||||
}
|
|
||||||
|
|
||||||
function insertAfter(newNode, referenceNode) {
|
|
||||||
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onEach(arr, func, reversed) {
|
|
||||||
if (arr && arr.length > 0 && func) {
|
|
||||||
var length = arr.length;
|
|
||||||
var i;
|
|
||||||
if (reversed !== true) {
|
|
||||||
for (i = 0; i < length; ++i) {
|
|
||||||
if (func(arr[i]) === true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (i = length - 1; i >= 0; --i) {
|
|
||||||
if (func(arr[i]) === true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onEachLazy(lazyArray, func, reversed) {
|
|
||||||
return onEach(
|
|
||||||
Array.prototype.slice.call(lazyArray),
|
|
||||||
func,
|
|
||||||
reversed);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
|
||||||
function hasOwnProperty(obj, property) {
|
|
||||||
return Object.prototype.hasOwnProperty.call(obj, property);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener("load", function() {
|
|
||||||
"use strict;"
|
|
||||||
|
|
||||||
var main = document.getElementById("main");
|
|
||||||
var btnToTop = document.getElementById("btn-to-top");
|
|
||||||
|
|
||||||
function labelForToggleButton(isCollapsed) {
|
|
||||||
if (isCollapsed) {
|
|
||||||
return "+";
|
|
||||||
}
|
|
||||||
return "\u2212";
|
|
||||||
}
|
|
||||||
|
|
||||||
function createToggle(isCollapsed) {
|
|
||||||
var toggle = document.createElement("a");
|
|
||||||
toggle.href = "javascript:void(0)";
|
|
||||||
toggle.className = "collapse-toggle";
|
|
||||||
toggle.innerHTML = "[<span class=\"inner\">"
|
|
||||||
+ labelForToggleButton(isCollapsed)
|
|
||||||
+ "</span>]";
|
|
||||||
|
|
||||||
return toggle;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleClicked() {
|
|
||||||
if (hasClass(this, "collapsed")) {
|
|
||||||
removeClass(this, "collapsed");
|
|
||||||
this.innerHTML = "[<span class=\"inner\">"
|
|
||||||
+ labelForToggleButton(false)
|
|
||||||
+ "</span>]";
|
|
||||||
onEachLazy(this.parentNode.getElementsByClassName("docblock"), function(e) {
|
|
||||||
removeClass(e, "hidden");
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
addClass(this, "collapsed");
|
|
||||||
this.innerHTML = "[<span class=\"inner\">"
|
|
||||||
+ labelForToggleButton(true)
|
|
||||||
+ "</span>]";
|
|
||||||
onEachLazy(this.parentNode.getElementsByClassName("docblock"), function(e) {
|
|
||||||
addClass(e, "hidden");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onEachLazy(document.getElementsByClassName("toggle-wrapper"), function(e) {
|
|
||||||
let sectionHeader = e.querySelector(".section-header");
|
|
||||||
let fragmentMatches = sectionHeader !== null && location.hash === "#" + sectionHeader.getAttribute('id');
|
|
||||||
collapsedByDefault = hasClass(e, "default-hide") && !fragmentMatches;
|
|
||||||
var toggle = createToggle(collapsedByDefault);
|
|
||||||
toggle.onclick = toggleClicked;
|
|
||||||
e.insertBefore(toggle, e.firstChild);
|
|
||||||
if (collapsedByDefault) {
|
|
||||||
addClass(toggle, "collapsed");
|
|
||||||
onEachLazy(e.getElementsByClassName("docblock"), function(d) {
|
|
||||||
addClass(d, "hidden");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function scrollBackTop(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
window.scroll({
|
|
||||||
top: 0,
|
|
||||||
behavior: 'smooth',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleScrollButton() {
|
|
||||||
if (window.scrollY < 400) {
|
|
||||||
addClass(btnToTop, "hidden");
|
|
||||||
} else {
|
|
||||||
removeClass(btnToTop, "hidden");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onscroll = toggleScrollButton;
|
|
||||||
btnToTop.onclick = scrollBackTop;
|
|
||||||
}, false);
|
|
||||||
@@ -1,747 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2021 GNOME Foundation
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import url("fonts.css");
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* LIGHT THEME
|
|
||||||
*********************************/
|
|
||||||
:root {
|
|
||||||
|
|
||||||
/* colors */
|
|
||||||
--text-color: #333;
|
|
||||||
--text-color-muted: #999;
|
|
||||||
--primary: rgb(28, 118, 228);
|
|
||||||
--body-bg: #fff;
|
|
||||||
--sidebar-primary: rgb(144, 194, 255);
|
|
||||||
--sidebar-bg: #151515;
|
|
||||||
--sidebar-selected-bg: var(--primary);
|
|
||||||
--sidebar-text-color: #fafafa;
|
|
||||||
--sidebar-padding: 1.5em;
|
|
||||||
|
|
||||||
/* boxes, e.g. code blocks */
|
|
||||||
--box-bg: rgba(135, 135, 135, 0.085);
|
|
||||||
--box-radius: 0.35rem;
|
|
||||||
--box-padding: 0.75rem;
|
|
||||||
--box-margin: 0.75rem 0;
|
|
||||||
--box-text-color: #111;
|
|
||||||
|
|
||||||
/* typography */
|
|
||||||
--body-font-family: "Noto Serif",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
|
|
||||||
--body-font-scale: 0.95;
|
|
||||||
--body-font-size: calc(var(--body-font-scale) * clamp(16px, 1vw, 20px));
|
|
||||||
--body-font-weight: normal;
|
|
||||||
|
|
||||||
--monospace-font-family: "Source Code Pro", monospace;
|
|
||||||
--monospace-font-size: calc(0.86 * var(--body-font-size)); /* Monospace fonts are very different in terms of font-sizes. Adjust this value to scale it */
|
|
||||||
|
|
||||||
--heading-font-family: "Red Hat Display", var(--body-font-family);
|
|
||||||
--heading-weight: 900;
|
|
||||||
--heading-font-scale: 1.05;
|
|
||||||
|
|
||||||
--heading-small-font-family: var(--heading-font-family);
|
|
||||||
--heading-small-weight: 600;
|
|
||||||
--heading-small-font-scale: 1;
|
|
||||||
|
|
||||||
--heading-table-font-family: var(--heading-font-family);
|
|
||||||
--heading-table-weight: 600;
|
|
||||||
|
|
||||||
--heading-docblock-color: #6d6d6d; /* docblocks have headings from source comments. we want them to differ.*/
|
|
||||||
--heading-docblock-scale: 0.9; /* docblocks have headings from source comments. we want them to differ.*/
|
|
||||||
|
|
||||||
--symbol-font-family: var(--heading-font-family);
|
|
||||||
--symbol-font-weight: 500;
|
|
||||||
--symbol-font-scale: 1;
|
|
||||||
|
|
||||||
--table-font-size: 0.92em; /* Tables often contain lots information. It's better to scale them down a big to get more sutff fitted inside */
|
|
||||||
|
|
||||||
/* misc */
|
|
||||||
--prefered-content-width: 90ch; /* The preferred width for the readable content */
|
|
||||||
--anchor-sign: "#";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* DARK THEME (overrides)
|
|
||||||
*********************************/
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
--primary: rgb(144, 194, 255);
|
|
||||||
--text-color: #f6f6f6;
|
|
||||||
--text-color-muted: #686868;
|
|
||||||
--body-bg: #121212;
|
|
||||||
--sidebar-primary: rgb(144, 194, 255);
|
|
||||||
--sidebar-bg: #1e1e1e;
|
|
||||||
--sidebar-selected-bg: rgb(17, 112, 228);
|
|
||||||
--sidebar-text-color: #fafafa;
|
|
||||||
--box-bg: rgba(135, 135, 135, 0.1);
|
|
||||||
--box-text-color: #fff;
|
|
||||||
--heading-docblock-color: #b7b7b7;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fix dark theme syntax highlighting with a filter (for now) */
|
|
||||||
.highlight pre span {
|
|
||||||
filter: brightness(6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* GENERAL STYLING
|
|
||||||
*********************************/
|
|
||||||
*,
|
|
||||||
*:before,
|
|
||||||
*:after {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-moz-selection {
|
|
||||||
color: white;
|
|
||||||
background: var(--primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
::selection {
|
|
||||||
color: white;
|
|
||||||
background: var(--primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width: 8px;
|
|
||||||
height: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
border-radius: 10px;
|
|
||||||
background: rgba(128, 128, 128, 0.6);
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb:hover {
|
|
||||||
background: rgba(128, 128, 128, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-track {
|
|
||||||
background: rgba(128, 128, 128, 0.15);
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
scrollbar-width: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font: 16px/1.5 var(--body-font-family);
|
|
||||||
font-weight: var(--body-font-weight);
|
|
||||||
font-size: var(--body-font-size);
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
-webkit-font-feature-settings: "kern", "liga";
|
|
||||||
-moz-font-feature-settings: "kern", "liga";
|
|
||||||
font-feature-settings: "kern", "liga";
|
|
||||||
color: var(--text-color);
|
|
||||||
background: var(--body-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
font-family: var(--heading-font-family);
|
|
||||||
font-weight: var(--heading-weight);
|
|
||||||
margin: 1.75em 0 0.75em 0;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: calc(1.75em * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
header h1 {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: calc(1.4em * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: calc(1.2em * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
header h3 {
|
|
||||||
color: var(--text-color-muted);
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4, h5 {
|
|
||||||
font-size: calc(1em * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
h6 {
|
|
||||||
font-size: calc(1em * var(--heading-small-font-scale));
|
|
||||||
font-family: var(--heading-small-font-family);
|
|
||||||
font-weight: var(--heading-small-weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
ol, ul {
|
|
||||||
padding-left: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul ul, ol ul, ul ol, ol ol {
|
|
||||||
margin-bottom: .6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: 0 0 .6em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: var(--primary);
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
summary {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
border-left: 3px solid var(--primary);
|
|
||||||
background: var(--box-bg);
|
|
||||||
padding: var(--box-padding);
|
|
||||||
border-radius: var(--box-radius);
|
|
||||||
margin: var(--box--margin);
|
|
||||||
}
|
|
||||||
|
|
||||||
code,
|
|
||||||
pre {
|
|
||||||
font-family: var(--monospace-font-family);
|
|
||||||
font-size: var(--monospace-font-size);
|
|
||||||
color: var(--box-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
background: var(--box-bg);
|
|
||||||
padding: var(--box-padding);
|
|
||||||
border-radius: var(--box-radius);
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
background: var(--box-bg);
|
|
||||||
padding: 0 0.35em;
|
|
||||||
border-radius: 0.35rem;
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
a > code {
|
|
||||||
color: var(--primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
pre pre,
|
|
||||||
pre code {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
font-size: 1em;
|
|
||||||
background: none;
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
|
||||||
font-family: inherit;
|
|
||||||
font-weight: inherit;
|
|
||||||
font-size: 0.85em;
|
|
||||||
}
|
|
||||||
|
|
||||||
strong, b {
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fix unwanted margins in tables, code, lists and blockquotes */
|
|
||||||
li > *:first-child,
|
|
||||||
li > *:first-child > *:first-child,
|
|
||||||
li > *:first-child > *:first-child > *:first-child,
|
|
||||||
td > *:first-child,
|
|
||||||
td > *:first-child > *:first-child,
|
|
||||||
td > *:first-child > *:first-child > *:first-child,
|
|
||||||
pre > *:first-child,
|
|
||||||
pre > *:first-child > *:first-child,
|
|
||||||
pre > *:first-child > *:first-child > *:first-child,
|
|
||||||
blockquote > *:first-child,
|
|
||||||
blockquote > *:first-child > *:first-child,
|
|
||||||
blockquote > *:first-child > *:first-child > *:first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
li > *:last-child,
|
|
||||||
li > *:last-child > *:last-child,
|
|
||||||
li > *:last-child > *:last-child > *:last-child,
|
|
||||||
td > *:last-child,
|
|
||||||
td > *:last-child > *:last-child,
|
|
||||||
td > *:last-child > *:last-child > *:last-child,
|
|
||||||
pre > *:last-child,
|
|
||||||
pre > *:last-child > *:last-child,
|
|
||||||
pre > *:last-child > *:last-child > *:last-child,
|
|
||||||
blockquote > *:last-child,
|
|
||||||
blockquote > *:last-child > *:last-child,
|
|
||||||
blockquote > *:last-child > *:last-child > *:last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* PAGE STRUCTURE
|
|
||||||
*********************************/
|
|
||||||
#body-wrapper {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
flex-direction: row;
|
|
||||||
}
|
|
||||||
|
|
||||||
#body-wrapper:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#main {
|
|
||||||
position: relative;
|
|
||||||
flex-grow: 1;
|
|
||||||
min-width: 0;
|
|
||||||
box-shadow: 0 0 134px rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
width: 100%;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* Button
|
|
||||||
*********************************/
|
|
||||||
|
|
||||||
#btn-to-top {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 12px;
|
|
||||||
right: 32px;
|
|
||||||
z-index: 1000;
|
|
||||||
border-radius: 50%;
|
|
||||||
width: 42px;
|
|
||||||
height: 42px;
|
|
||||||
border: 1px solid var(--primary);
|
|
||||||
background: var(--box-bg);
|
|
||||||
color: var(--text-color);
|
|
||||||
cursor: pointer;
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#btn-to-top > .up-arrow:after {
|
|
||||||
content: "🡅"
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* SIDEBAR
|
|
||||||
*********************************/
|
|
||||||
.sidebar {
|
|
||||||
scrollbar-width: thin;
|
|
||||||
background: var(--sidebar-bg);
|
|
||||||
border-right: 1px solid var(--sidebar-bg);
|
|
||||||
min-width: 40ch;
|
|
||||||
padding: var(--sidebar-padding);
|
|
||||||
color: var(--sidebar-text-color);
|
|
||||||
position: sticky;
|
|
||||||
top: 0;
|
|
||||||
z-index: 2;
|
|
||||||
height: 100vh;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar a,
|
|
||||||
.sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .logo {
|
|
||||||
display: block;
|
|
||||||
margin: 2rem auto 0 auto;
|
|
||||||
width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section > ul > li {
|
|
||||||
margin-right: -10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section h3, .sidebar .section h5 {
|
|
||||||
text-align: left;
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
font-weight: var(--heading-weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section h5 {
|
|
||||||
font-size: 1em;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .namespace > h3 {
|
|
||||||
margin-bottom: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 1.5em;
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-weight: 900;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .namespace > p {
|
|
||||||
font-size: 0.9em;
|
|
||||||
opacity: 0.8;
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section {
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .links {
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section a {
|
|
||||||
display: block;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: background-color 150ms ease;
|
|
||||||
color: var(--sidebar-primary);
|
|
||||||
border-radius: var(--box-radius);
|
|
||||||
padding: 0.2rem 0.5rem;
|
|
||||||
margin-bottom: 0.15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section a:hover {
|
|
||||||
background-color: rgba(127, 127, 127, 0.2);
|
|
||||||
color: var(--sidebar-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section a.current {
|
|
||||||
background-color: var(--sidebar-selected-bg);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .search {
|
|
||||||
box-sizing: border-box;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .search input[type="text"] {
|
|
||||||
border-color: transparent;
|
|
||||||
width: 100%;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 50px;
|
|
||||||
padding: 6px 12px;
|
|
||||||
display: inline-block;
|
|
||||||
font-size: 80%;
|
|
||||||
box-shadow: inset 0 1px 3px #ddd;
|
|
||||||
transition: border .3s linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* ANCHORS & TOGGLERS
|
|
||||||
*********************************/
|
|
||||||
.anchor,
|
|
||||||
.md-anchor {
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
text-decoration: none;
|
|
||||||
padding: 0 0.5em;
|
|
||||||
color: var(--text-color-muted);
|
|
||||||
}
|
|
||||||
|
|
||||||
.anchor:hover,
|
|
||||||
.md-anchor:hover {
|
|
||||||
color: var(--primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.anchor:not([href]),
|
|
||||||
.md-anchor:not([href]) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.anchor:before,
|
|
||||||
.md-anchor:before {
|
|
||||||
content: var(--anchor-sign); /*'§'*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle-wrapper {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.collapse-toggle {
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
left: -2em;
|
|
||||||
white-space: nowrap;
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: 0.8em;
|
|
||||||
color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.collapse-toggle > .inner {
|
|
||||||
width: 1rem;
|
|
||||||
height: 1rem;
|
|
||||||
border-radius: calc(0.75 * var(--box-radius));
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
color: var(--box-text-color);
|
|
||||||
position: relative;
|
|
||||||
left: -0.25rem;
|
|
||||||
font-family: monospace;
|
|
||||||
font-size: 0.7rem;
|
|
||||||
font-weight: bold;
|
|
||||||
background: var(--box-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* UTILITY
|
|
||||||
*********************************/
|
|
||||||
.deprecated > h6 > a {
|
|
||||||
opacity: 0.65;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* CONTENT STYLING
|
|
||||||
*********************************/
|
|
||||||
.content {
|
|
||||||
padding: 2em 4em;
|
|
||||||
overflow: visible;
|
|
||||||
max-width: calc(var(--prefered-content-width) + 8em);
|
|
||||||
}
|
|
||||||
|
|
||||||
.content table:not(.table-display) {
|
|
||||||
border-spacing: 0 0.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td:first-child {
|
|
||||||
padding-right: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td p:first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td h1, .content td h2 {
|
|
||||||
margin-left: 0;
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content tr:first-child td {
|
|
||||||
border-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbd {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 3px 5px;
|
|
||||||
font: 15px monospace;
|
|
||||||
line-height: 10px;
|
|
||||||
vertical-align: middle;
|
|
||||||
border: solid 1px;
|
|
||||||
border-radius: 3px;
|
|
||||||
box-shadow: inset 0 -1px 0;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content tr:first-child {
|
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.35);
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td:first-child {
|
|
||||||
padding-right: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td p:first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content td h4, .content td h5 {
|
|
||||||
margin-left: 0;
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content tr:first-child td {
|
|
||||||
border-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.srclink {
|
|
||||||
color: var(--text-color-muted);
|
|
||||||
font-size: 1rem;
|
|
||||||
font-weight: var(--body-font-weight);
|
|
||||||
flex-grow: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
margin-left: auto;
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.meta tr > td:not(:first-child) {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.meta tr > td:first-child {
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
* DOCBLOCK STYLING
|
|
||||||
*********************************/
|
|
||||||
.docblock {
|
|
||||||
position: relative;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock h1 {
|
|
||||||
font-size: calc(1.3em * var(--heading-docblock-scale) * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock h2 {
|
|
||||||
font-size: calc(1.2em * var(--heading-docblock-scale) * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock h3 {
|
|
||||||
font-size: calc(1.1em * var(--heading-docblock-scale) * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock h4 {
|
|
||||||
font-size: calc(1.05em * var(--heading-docblock-scale) * var(--heading-font-scale));
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock h1,
|
|
||||||
.docblock h2,
|
|
||||||
.docblock h3,
|
|
||||||
.docblock h4,
|
|
||||||
.docblock h5,
|
|
||||||
.docblock h6 {
|
|
||||||
color: var(--heading-docblock-color)
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock table {
|
|
||||||
margin: .25em 0;
|
|
||||||
max-width: 100%;
|
|
||||||
font-size: var(--table-font-size);
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock table td {
|
|
||||||
padding: .25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock table th {
|
|
||||||
padding: .25em;
|
|
||||||
text-align: left;
|
|
||||||
font-family: var(--heading-table-font-family);
|
|
||||||
font-weight: var(--heading-table-weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock table tr th:first-child,
|
|
||||||
.docblock table tr td:first-child {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock table tr th:last-child,
|
|
||||||
.docblock table tr td:last-child {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.enum-members,
|
|
||||||
table.results {
|
|
||||||
border-radius: var(--box-radius);
|
|
||||||
border: 1px solid var(--text-color-muted);
|
|
||||||
border-spacing: 0 0 !important;
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.enum-members tr th,
|
|
||||||
table.results tr th {
|
|
||||||
border-top-color: var(--body-bg);
|
|
||||||
background-color: var(--box-bg);
|
|
||||||
border-bottom: 1px solid var(--text-color-muted);
|
|
||||||
}
|
|
||||||
|
|
||||||
table.enum-members tr th:first-child,
|
|
||||||
table.enum-members tr td:first-child {
|
|
||||||
min-width: 25em;
|
|
||||||
padding-left: .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.results tr th:first-child,
|
|
||||||
table.results tr td:first-child {
|
|
||||||
padding-left: .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.enum-members tr th:last-child,
|
|
||||||
table.enum-members tr td:last-child,
|
|
||||||
table.results tr th:last-child,
|
|
||||||
table.results tr td:last-child {
|
|
||||||
max-width: 35em;
|
|
||||||
padding-right: .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.results tr td code {
|
|
||||||
font-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock ul li,
|
|
||||||
.docblock ol li {
|
|
||||||
padding-top: 0.15rem;
|
|
||||||
padding-bottom: 0.15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock ul.type {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docblock ul.type li::before {
|
|
||||||
content: "»";
|
|
||||||
color: var(--text-color);
|
|
||||||
display: inline-block;
|
|
||||||
width: 1em;
|
|
||||||
margin-left: -1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************
|
|
||||||
RESPONSIVENESS
|
|
||||||
**************************/
|
|
||||||
@media (max-width: 700px) {
|
|
||||||
body {
|
|
||||||
padding-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#body-wrapper {
|
|
||||||
flex-direction: column;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
#main {
|
|
||||||
width: 100%;
|
|
||||||
padding: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar {
|
|
||||||
position: static;
|
|
||||||
height: initial;
|
|
||||||
order: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -32,7 +32,7 @@ while (($# > 0)); do
|
|||||||
list) list=1;;
|
list) list=1;;
|
||||||
help) print_help=1;;
|
help) print_help=1;;
|
||||||
--base|-b) read_arg base "$@" || shift;;
|
--base|-b) read_arg base "$@" || shift;;
|
||||||
--version|-v) read_arg base_version "$@" || shift;;
|
--base-version) read_arg base_version "$@" || shift;;
|
||||||
--no-login) no_login=1;;
|
--no-login) no_login=1;;
|
||||||
*) echo -e "\e[1;31mERROR\e[0m: Unknown option '$1'"; exit 1;;
|
*) echo -e "\e[1;31mERROR\e[0m: Unknown option '$1'"; exit 1;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -7,18 +7,14 @@ srcdir=$( pwd )
|
|||||||
builddir=$1
|
builddir=$1
|
||||||
backend=$2
|
backend=$2
|
||||||
|
|
||||||
# Ignore memory leaks lower in dependencies
|
|
||||||
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0
|
|
||||||
export G_SLICE=always-malloc
|
|
||||||
|
|
||||||
case "${backend}" in
|
case "${backend}" in
|
||||||
x11)
|
x11)
|
||||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${backend} \
|
--setup=${backend} \
|
||||||
--suite=gtk \
|
--suite=gtk \
|
||||||
|
--no-suite=gtk:a11y \
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
|
|
||||||
# Store the exit code for the CI run, but always
|
# Store the exit code for the CI run, but always
|
||||||
@@ -34,10 +30,10 @@ case "${backend}" in
|
|||||||
export WAYLAND_DISPLAY=wayland-5
|
export WAYLAND_DISPLAY=wayland-5
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${backend} \
|
--setup=${backend} \
|
||||||
--suite=gtk \
|
--suite=gtk \
|
||||||
|
--no-suite=gtk:a11y \
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
|
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
@@ -52,10 +48,10 @@ case "${backend}" in
|
|||||||
export BROADWAY_DISPLAY=:5
|
export BROADWAY_DISPLAY=:5
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${backend} \
|
--setup=${backend} \
|
||||||
--suite=gtk \
|
--suite=gtk \
|
||||||
|
--no-suite=gtk:a11y \
|
||||||
--no-suite=gsk-compare-opengl
|
--no-suite=gsk-compare-opengl
|
||||||
|
|
||||||
# don't let Broadway failures fail the run, for now
|
# don't let Broadway failures fail the run, for now
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
. /etc/os-release
|
|
||||||
|
|
||||||
echo $PRETTY_NAME
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -eux -o pipefail
|
|
||||||
|
|
||||||
xcodebuild -version || :
|
|
||||||
xcodebuild -showsdks || :
|
|
||||||
|
|
||||||
system_profiler SPSoftwareDataType || :
|
|
||||||
@@ -15,7 +15,7 @@ meson \
|
|||||||
-Dx11-backend=true \
|
-Dx11-backend=true \
|
||||||
-Dwayland-backend=true \
|
-Dwayland-backend=true \
|
||||||
-Dbroadway-backend=true \
|
-Dbroadway-backend=true \
|
||||||
-Dvulkan=enabled \
|
-Dvulkan=yes \
|
||||||
-Dprofiler=true \
|
-Dprofiler=true \
|
||||||
--werror \
|
--werror \
|
||||||
${EXTRA_MESON_FLAGS:-} \
|
${EXTRA_MESON_FLAGS:-} \
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
@echo on
|
|
||||||
:: vcvarsall.bat sets various env vars like PATH, INCLUDE, LIB, LIBPATH for the
|
|
||||||
:: specified build architecture
|
|
||||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
|
|
||||||
@echo on
|
|
||||||
|
|
||||||
:: FIXME: make warnings fatal
|
|
||||||
pip3 install --upgrade --user meson==0.56.2 || goto :error
|
|
||||||
meson -Dmedia-gstreamer=disabled _build || goto :error
|
|
||||||
ninja -C _build || goto :error
|
|
||||||
|
|
||||||
goto :EOF
|
|
||||||
:error
|
|
||||||
exit /b 1
|
|
||||||
@@ -33,40 +33,30 @@ pacman --noconfirm -S --needed \
|
|||||||
mingw-w64-$MSYS2_ARCH-gst-plugins-bad \
|
mingw-w64-$MSYS2_ARCH-gst-plugins-bad \
|
||||||
mingw-w64-$MSYS2_ARCH-shared-mime-info
|
mingw-w64-$MSYS2_ARCH-shared-mime-info
|
||||||
|
|
||||||
|
# https://gitlab.gnome.org/GNOME/gtk/issues/2243
|
||||||
|
wget "https://gitlab.gnome.org/creiter/gitlab-ci-win32-runner-v2/raw/master/pango/mingw-w64-$MSYS2_ARCH-pango-git-1.44.7.90.ge48ae523-1-any.pkg.tar.zst"
|
||||||
|
pacman --noconfirm -U "mingw-w64-$MSYS2_ARCH-pango-git-1.44.7.90.ge48ae523-1-any.pkg.tar.zst"
|
||||||
|
|
||||||
|
# https://github.com/msys2/MINGW-packages/pull/6465
|
||||||
|
pacman --noconfirm -S --needed mingw-w64-$MSYS2_ARCH-brotli
|
||||||
|
|
||||||
mkdir -p _ccache
|
mkdir -p _ccache
|
||||||
export CCACHE_BASEDIR="$(pwd)"
|
export CCACHE_BASEDIR="$(pwd)"
|
||||||
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
||||||
|
|
||||||
# https://gitlab.gnome.org/GNOME/gtk/-/issues/2243
|
|
||||||
# https://gitlab.gnome.org/GNOME/gtk/-/issues/3002
|
|
||||||
|
|
||||||
if ! pkg-config --atleast-version=2.66.0 glib-2.0; then
|
|
||||||
git clone https://gitlab.gnome.org/GNOME/glib.git _glib
|
|
||||||
meson setup _glib_build _glib
|
|
||||||
meson compile -C _glib_build
|
|
||||||
meson install -C _glib_build
|
|
||||||
fi
|
|
||||||
pkg-config --modversion glib-2.0
|
|
||||||
|
|
||||||
if ! pkg-config --atleast-version=1.49.1 pango; then
|
|
||||||
git clone https://gitlab.gnome.org/GNOME/pango.git _pango
|
|
||||||
meson setup _pango_build _pango
|
|
||||||
meson compile -C _pango_build
|
|
||||||
meson install -C _pango_build
|
|
||||||
fi
|
|
||||||
pkg-config --modversion pango
|
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
ccache --zero-stats
|
ccache --zero-stats
|
||||||
ccache --show-stats
|
ccache --show-stats
|
||||||
export CCACHE_DISABLE=true
|
export CCACHE_DISABLE=true
|
||||||
|
# FIXME: introspection disabled for now because of
|
||||||
|
# https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/340
|
||||||
meson \
|
meson \
|
||||||
-Dx11-backend=false \
|
-Dx11-backend=false \
|
||||||
-Dwayland-backend=false \
|
-Dwayland-backend=false \
|
||||||
-Dwin32-backend=true \
|
-Dwin32-backend=true \
|
||||||
-Dvulkan=disabled \
|
-Dvulkan=no \
|
||||||
-Dintrospection=enabled \
|
-Dintrospection=false \
|
||||||
-Dgtk:werror=true \
|
--werror \
|
||||||
_build
|
_build
|
||||||
unset CCACHE_DISABLE
|
unset CCACHE_DISABLE
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
<!--
|
|
||||||
Please, read the CONTRIBUTING.md guide on how to file a new issue.
|
|
||||||
|
|
||||||
https://gitlab.gnome.org/GNOME/gtk/-/blob/master/CONTRIBUTING.md
|
|
||||||
-->
|
|
||||||
## Steps to reproduce
|
## Steps to reproduce
|
||||||
<!--
|
|
||||||
Please, explain the sequence of actions necessary to reproduce the
|
|
||||||
bug
|
|
||||||
-->
|
|
||||||
|
|
||||||
1. ...
|
1. ...
|
||||||
2. ...
|
2. ...
|
||||||
@@ -41,8 +32,5 @@
|
|||||||
## Additional information
|
## Additional information
|
||||||
<!--
|
<!--
|
||||||
- Screenshots or screen recordings are useful for visual errors
|
- Screenshots or screen recordings are useful for visual errors
|
||||||
- Attaching a screenshot or a video without explaining the current
|
|
||||||
behavior and the actions necessary to reproduce the bug will lead
|
|
||||||
to the bug being closed
|
|
||||||
- Please report any warning or message printed on the terminal
|
- Please report any warning or message printed on the terminal
|
||||||
-->
|
-->
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
<!--
|
|
||||||
Please, read the CONTRIBUTING.md guide on how to file a new issue.
|
|
||||||
|
|
||||||
https://gitlab.gnome.org/GNOME/gtk/-/blob/master/CONTRIBUTING.md
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Steps to reproduce
|
## Steps to reproduce
|
||||||
<!--
|
|
||||||
Please, explain the sequence of actions necessary to reproduce the
|
|
||||||
crash
|
|
||||||
-->
|
|
||||||
|
|
||||||
1. ...
|
1. ...
|
||||||
2. ...
|
2. ...
|
||||||
|
|||||||
30
AUTHORS
30
AUTHORS
@@ -1,5 +1,5 @@
|
|||||||
Please do not mail any of the authors listed here
|
Please do not mail any of the authors listed here
|
||||||
asking questions about this version of GTK.
|
asking questions about this version of GTK+.
|
||||||
|
|
||||||
Original Authors
|
Original Authors
|
||||||
----------------
|
----------------
|
||||||
@@ -7,8 +7,8 @@ Peter Mattis <petm@xcf.berkeley.edu>
|
|||||||
Spencer Kimball <spencer@xcf.berkeley.edu>
|
Spencer Kimball <spencer@xcf.berkeley.edu>
|
||||||
Josh MacDonald <jmacd@xcf.berkeley.edu>
|
Josh MacDonald <jmacd@xcf.berkeley.edu>
|
||||||
|
|
||||||
The Team that build GTK 2 (in alphabetical order)
|
The GTK+ Team (in alphabetical order)
|
||||||
-------------------------------------------------
|
-------------------------------------
|
||||||
Shawn T. Amundson <amundson@gtk.org>
|
Shawn T. Amundson <amundson@gtk.org>
|
||||||
Jerome Bolliet <bolliet@gtk.org>
|
Jerome Bolliet <bolliet@gtk.org>
|
||||||
Damon Chaplin <damon@gtk.org>
|
Damon Chaplin <damon@gtk.org>
|
||||||
@@ -28,24 +28,11 @@ Jay Painter <jpaint@gtk.org>
|
|||||||
Manish Singh <manish@gtk.org>
|
Manish Singh <manish@gtk.org>
|
||||||
Owen Taylor <otaylor@gtk.org>
|
Owen Taylor <otaylor@gtk.org>
|
||||||
|
|
||||||
The current team (GTK 3 and 4)
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
Jonas Ådahl <jadahl@gmail.com>
|
|
||||||
Tim Bäder <mail@baedert.org>
|
|
||||||
Emmanuele Bassi <ebassi@gnome.org>
|
|
||||||
Chun-wei Fan <fanchunwei@src.gnome.org>
|
|
||||||
Matthias Clasen <mclasen@redhat.com>
|
|
||||||
Carlos Garnacho <mrgarnacho@gmail.com>
|
|
||||||
Alexander Larsson <alexl@redhat.com>
|
|
||||||
Benjamin Otte <otte@gnome.org>
|
|
||||||
|
|
||||||
|
|
||||||
There are many others who have contributed patches; we thank them,
|
There are many others who have contributed patches; we thank them,
|
||||||
GTK is much better because of them.
|
GTK+ is much better because of them.
|
||||||
|
|
||||||
|
|
||||||
Over time, GTK has incorporated some pieces of software which
|
Over time, GTK+ has incorporated some pieces of software which
|
||||||
started as independent projects. We list the original authors here:
|
started as independent projects. We list the original authors here:
|
||||||
|
|
||||||
|
|
||||||
@@ -76,8 +63,3 @@ DirectFB backend
|
|||||||
Denis Oliver Kropp
|
Denis Oliver Kropp
|
||||||
Sven Neumann
|
Sven Neumann
|
||||||
Mike Emmel
|
Mike Emmel
|
||||||
|
|
||||||
|
|
||||||
gtkparasite
|
|
||||||
-----------
|
|
||||||
Christian Hammond
|
|
||||||
|
|||||||
@@ -56,12 +56,6 @@ If the issue includes a crash, you should also include:
|
|||||||
0. the eventual warnings printed on the terminal
|
0. the eventual warnings printed on the terminal
|
||||||
0. a backtrace, obtained with tools such as GDB or LLDB
|
0. a backtrace, obtained with tools such as GDB or LLDB
|
||||||
|
|
||||||
It is fine to include screenshots of screen recordings to demonstrate
|
|
||||||
an issue that is best to understand visually, but please don't just
|
|
||||||
dump screen recordings without further details into issues. It is
|
|
||||||
essential that the problem is described in enough detail to reproduce
|
|
||||||
it without watching a video.
|
|
||||||
|
|
||||||
For small issues, such as:
|
For small issues, such as:
|
||||||
|
|
||||||
- spelling/grammar fixes in the documentation
|
- spelling/grammar fixes in the documentation
|
||||||
|
|||||||
9178
NEWS.pre-4.0
9178
NEWS.pre-4.0
File diff suppressed because it is too large
Load Diff
52
README.md
52
README.md
@@ -1,7 +1,7 @@
|
|||||||
GTK — The GTK toolkit
|
GTK — The GTK toolkit
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
[](https://gitlab.gnome.org/GNOME/gtk/-/commits/master)
|
[](https://gitlab.gnome.org/GNOME/gtk/pipelines)
|
||||||
|
|
||||||
General information
|
General information
|
||||||
-------------------
|
-------------------
|
||||||
@@ -10,16 +10,14 @@ GTK is a multi-platform toolkit for creating graphical user interfaces.
|
|||||||
Offering a complete set of widgets, GTK is suitable for projects ranging
|
Offering a complete set of widgets, GTK is suitable for projects ranging
|
||||||
from small one-off projects to complete application suites.
|
from small one-off projects to complete application suites.
|
||||||
|
|
||||||
GTK is a free and open-source software project. The licensing terms
|
GTK is free software and part of the GNU Project. However, the
|
||||||
for GTK, the GNU LGPL, allow it to be used by all developers, including those
|
licensing terms for GTK, the GNU LGPL, allow it to be used by all
|
||||||
developing proprietary software, without any license fees or royalties.
|
developers, including those developing proprietary software, without any
|
||||||
|
license fees or royalties.
|
||||||
GTK is hosted by the GNOME project (thanks!) and used by a wide variety
|
|
||||||
of applications and projects.
|
|
||||||
|
|
||||||
The official download location
|
The official download location
|
||||||
|
|
||||||
- https://download.gnome.org/sources/gtk/
|
- https://download.gnome.org/sources/gtk+
|
||||||
|
|
||||||
The official web site
|
The official web site
|
||||||
|
|
||||||
@@ -34,16 +32,9 @@ Discussion forum
|
|||||||
- https://discourse.gnome.org/c/platform/core/
|
- https://discourse.gnome.org/c/platform/core/
|
||||||
|
|
||||||
Nightly documentation can be found at
|
Nightly documentation can be found at
|
||||||
- Gtk: https://gnome.pages.gitlab.gnome.org/gtk/gtk4/
|
- Gtk: https://gnome.pages.gitlab.gnome.org/gtk/gtk/
|
||||||
- Gdk: https://gnome.pages.gitlab.gnome.org/gtk/gdk4/
|
- Gdk: https://gnome.pages.gitlab.gnome.org/gtk/gdk/
|
||||||
- Gsk: https://gnome.pages.gitlab.gnome.org/gtk/gsk4/
|
- Gsk: https://gnome.pages.gitlab.gnome.org/gtk/gsk/
|
||||||
|
|
||||||
Nightly flatpaks of our demos can be installed from the
|
|
||||||
[GNOME Nightly](https://wiki.gnome.org/Apps/Nightly) repository:
|
|
||||||
- `flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo`
|
|
||||||
- `flatpak install gnome-nightly org.gtk.Demo4`
|
|
||||||
- `flatpak install gnome-nightly org.gtk.WidgetFactory4`
|
|
||||||
- `flatpak install gnome-nightly org.gtk.IconBrowser4`
|
|
||||||
|
|
||||||
Building and installing
|
Building and installing
|
||||||
-----------------------
|
-----------------------
|
||||||
@@ -58,13 +49,14 @@ In order to build GTK you will need:
|
|||||||
You will also need various dependencies, based on the platform you are
|
You will also need various dependencies, based on the platform you are
|
||||||
building for:
|
building for:
|
||||||
|
|
||||||
- [GLib](https://download.gnome.org/sources/glib/)
|
- [GLib](https://download.gnome.org/sources/glib)
|
||||||
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf/)
|
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf)
|
||||||
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection/)
|
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection)
|
||||||
- [Cairo](https://www.cairographics.org/)
|
- [Cairo](https://www.cairographics.org)
|
||||||
- [Pango](https://download.gnome.org/sources/pango/)
|
- [Pango](https://download.gnome.org/sources/pango)
|
||||||
- [Epoxy](https://github.com/anholt/libepoxy)
|
- [Epoxy](https://github.com/anholt/libepoxy)
|
||||||
- [Graphene](https://github.com/ebassi/graphene)
|
- [Graphene](https://github.com/ebassi/graphene)
|
||||||
|
- [ATK](https://download.gnome.org/sources/atk)
|
||||||
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
||||||
|
|
||||||
If you are building the X11 backend, you will also need:
|
If you are building the X11 backend, you will also need:
|
||||||
@@ -78,6 +70,7 @@ If you are building the X11 backend, you will also need:
|
|||||||
- xcursor
|
- xcursor
|
||||||
- xdamage
|
- xdamage
|
||||||
- xcomposite
|
- xcomposite
|
||||||
|
- [atk-bridge-2.0](https://download.gnome.org/sources/at-spi2-atk)
|
||||||
|
|
||||||
If you are building the Wayland backend, you will also need:
|
If you are building the Wayland backend, you will also need:
|
||||||
|
|
||||||
@@ -107,7 +100,7 @@ And, finally, you can install GTK using:
|
|||||||
$ sudo ninja install
|
$ sudo ninja install
|
||||||
```
|
```
|
||||||
|
|
||||||
Complete information about installing GTK and related libraries
|
Complete information about installing GTK+ and related libraries
|
||||||
can be found in the file:
|
can be found in the file:
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -153,17 +146,14 @@ Contributing to GTK
|
|||||||
Please, follow the [contribution guide](./CONTRIBUTING.md) to know how to
|
Please, follow the [contribution guide](./CONTRIBUTING.md) to know how to
|
||||||
start contributing to GTK.
|
start contributing to GTK.
|
||||||
|
|
||||||
If you want to support GTK financially, please consider donating to
|
|
||||||
the GNOME project, which runs the infrastructure hosting GTK.
|
|
||||||
|
|
||||||
Release notes
|
Release notes
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
The release notes for GTK are part of the migration guide in the API
|
The release notes for GTK are part of the migration guide in the API
|
||||||
reference. See:
|
reference. See:
|
||||||
|
|
||||||
- [3.x release notes](https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html)
|
- [3.x release notes](https://developer.gnome.org/gtk3/unstable/gtk-migrating-2-to-3.html)
|
||||||
- [4.x release notes](https://docs.gtk.org/gtk4/migrating-3to4.html)
|
- [4.x release notes](https://developer.gnome.org/gtk4/unstable/gtk-migrating-3-to-4.html)
|
||||||
|
|
||||||
Licensing terms
|
Licensing terms
|
||||||
---------------
|
---------------
|
||||||
@@ -173,7 +163,3 @@ version 2.1 or, at your option, any later version, as published by the Free
|
|||||||
Software Foundation.
|
Software Foundation.
|
||||||
|
|
||||||
Please, see the [`COPYING`](./COPYING) file for further information.
|
Please, see the [`COPYING`](./COPYING) file for further information.
|
||||||
|
|
||||||
GTK includes a small number of source files under the Apache license:
|
|
||||||
- A fork of the roaring bitmaps implementation in [gtk/roaring](./gtk/roaring)
|
|
||||||
- An adaptation of timsort from python in [gtk/timsort](./gtk/timsort)
|
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
diff -ur lua-5.1.4/src/Makefile lua-5.1.4-new/src/Makefile
|
|
||||||
--- lua-5.1.4/src/Makefile 2008-01-19 20:37:58.000000000 +0100
|
|
||||||
+++ lua-5.1.4-new/src/Makefile 2012-02-23 18:26:43.000000000 +0100
|
|
||||||
@@ -23,6 +23,7 @@
|
|
||||||
PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
|
|
||||||
|
|
||||||
LUA_A= liblua.a
|
|
||||||
+LUA_SO= liblua.so
|
|
||||||
CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \
|
|
||||||
lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \
|
|
||||||
lundump.o lvm.o lzio.o
|
|
||||||
@@ -36,7 +37,7 @@
|
|
||||||
LUAC_O= luac.o print.o
|
|
||||||
|
|
||||||
ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O)
|
|
||||||
-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
|
|
||||||
+ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T)
|
|
||||||
ALL_A= $(LUA_A)
|
|
||||||
|
|
||||||
default: $(PLAT)
|
|
||||||
@@ -51,6 +52,11 @@
|
|
||||||
$(AR) $@ $?
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
+$(LUA_SO): $(CORE_O) $(LIB_O)
|
|
||||||
+ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
|
|
||||||
+ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
|
|
||||||
+ ln -sf $(LUA_SO).$(R) $(LUA_SO)
|
|
||||||
+
|
|
||||||
$(LUA_T): $(LUA_O) $(LUA_A)
|
|
||||||
$(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
|
|
||||||
|
|
||||||
--- lua-5.1.4/Makefile 2008-08-12 02:40:48.000000000 +0200
|
|
||||||
+++ lua-5.1.4-new/Makefile 2012-02-23 19:06:32.000000000 +0100
|
|
||||||
@@ -53,7 +53,7 @@
|
|
||||||
all: $(PLAT)
|
|
||||||
|
|
||||||
$(PLATS) clean:
|
|
||||||
- cd src && $(MAKE) $@
|
|
||||||
+ cd src && $(MAKE) $@ V=$(V) R=$(R)
|
|
||||||
|
|
||||||
test: dummy
|
|
||||||
src/lua test/hello.lua
|
|
||||||
@@ -1,65 +1,56 @@
|
|||||||
{
|
{
|
||||||
"app-id" : "org.gtk.Demo4",
|
"app-id": "org.gtk.Demo4",
|
||||||
"runtime" : "org.gnome.Platform",
|
"runtime": "org.gnome.Platform",
|
||||||
"runtime-version" : "master",
|
"runtime-version": "master",
|
||||||
"sdk" : "org.gnome.Sdk",
|
"sdk": "org.gnome.Sdk",
|
||||||
"command" : "gtk4-demo",
|
"command": "gtk4-demo",
|
||||||
"tags" : [
|
"tags": ["devel", "development", "nightly"],
|
||||||
"devel",
|
"desktop-file-name-prefix": "(Development) ",
|
||||||
"development",
|
"finish-args": [
|
||||||
"nightly"
|
|
||||||
],
|
|
||||||
"desktop-file-name-prefix" : "(Development) ",
|
|
||||||
"finish-args" : [
|
|
||||||
"--device=dri",
|
"--device=dri",
|
||||||
"--share=ipc",
|
"--share=ipc",
|
||||||
"--socket=fallback-x11",
|
"--socket=fallback-x11",
|
||||||
"--socket=wayland",
|
"--socket=wayland",
|
||||||
"--talk-name=org.gtk.vfs",
|
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*"
|
||||||
"--talk-name=org.gtk.vfs.*"
|
|
||||||
],
|
],
|
||||||
"cleanup" : [
|
"cleanup": [
|
||||||
"/include",
|
"/include",
|
||||||
"/lib/pkgconfig",
|
"/lib/pkgconfig", "/share/pkgconfig",
|
||||||
"/share/pkgconfig",
|
|
||||||
"/share/aclocal",
|
"/share/aclocal",
|
||||||
"/man",
|
"/man", "/share/man", "/share/gtk-doc",
|
||||||
"/share/man",
|
"*.la", ".a",
|
||||||
"/share/gtk-doc",
|
|
||||||
"*.la",
|
|
||||||
".a",
|
|
||||||
"/lib/girepository-1.0",
|
"/lib/girepository-1.0",
|
||||||
"/share/gir-1.0",
|
"/share/gir-1.0",
|
||||||
"/share/doc"
|
"/share/doc"
|
||||||
],
|
],
|
||||||
"modules" : [
|
"modules": [
|
||||||
{
|
{
|
||||||
"name" : "wayland",
|
"name" : "wayland",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "autotools",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"-Ddocumentation=false"
|
"--disable-documentation"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type" : "git",
|
||||||
"url" : "https://gitlab.freedesktop.org/wayland/wayland.git"
|
"url" : "https://github.com/wayland-project/wayland.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "graphene",
|
"name": "graphene",
|
||||||
"buildsystem" : "meson",
|
"buildsystem": "meson",
|
||||||
"builddir" : true,
|
"builddir": true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dtests=false",
|
"-Dtests=false",
|
||||||
"-Dbenchmarks=false"
|
"-Dbenchmarks=false"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type": "git",
|
||||||
"url" : "https://github.com/ebassi/graphene.git"
|
"url": "https://github.com/ebassi/graphene.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -67,7 +58,7 @@
|
|||||||
"name" : "libsass",
|
"name" : "libsass",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib"
|
"--libdir=/app/lib"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
@@ -82,7 +73,7 @@
|
|||||||
"name" : "sassc",
|
"name" : "sassc",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib"
|
"--libdir=/app/lib"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
@@ -94,97 +85,18 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "boost",
|
"name": "gtk",
|
||||||
"buildsystem": "simple",
|
"buildsystem": "meson",
|
||||||
"build-commands": [
|
"builddir": true,
|
||||||
"./bootstrap.sh --prefix=/app --with-libraries=date_time,filesystem,iostreams,locale,regex,system,thread,python,program_options,test,serialization",
|
"config-opts": [
|
||||||
"./b2 --build-type=minimal link=shared -j $FLATPAK_BUILDER_N_JOBS",
|
"--libdir=/app/lib"
|
||||||
"./b2 --build-type=minimal link=shared install"
|
|
||||||
],
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.tar.bz2",
|
|
||||||
"sha256": "8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "lua-5.1",
|
|
||||||
"buildsystem": "simple",
|
|
||||||
"build-commands": [
|
|
||||||
"make -j $FLATPAK_BUILDER_N_JOBS CFLAGS=\"$CFLAGS -fPIC -DLUA_USE_LINUX\" linux",
|
|
||||||
"make INSTALL_TOP=$FLATPAK_DEST TO_LIB='liblua.a liblua.so.5.1.5' install",
|
|
||||||
"ln -sf liblua.so.5.1.5 $FLATPAK_DEST/lib/liblua.so",
|
|
||||||
"ln -sf liblua.so.5.1.5 $FLATPAK_DEST/lib/liblua.so.5.1",
|
|
||||||
"install -Dm0644 etc/lua.pc $FLATPAK_DEST/lib/pkgconfig/lua.pc",
|
|
||||||
"ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua51.pc",
|
|
||||||
"ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua5.1.pc",
|
|
||||||
"ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua-5.1.pc"
|
|
||||||
],
|
],
|
||||||
"sources": [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type": "archive",
|
"type": "git",
|
||||||
"url": "https://www.lua.org/ftp/lua-5.1.5.tar.gz",
|
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||||
"sha256": "2640fc56a795f29d28ef15e13c34a47e223960b0240e8cb0a82d9b0738695333"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "patch",
|
|
||||||
"path": "lua-5.1.5-so.patch"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"commands": [
|
|
||||||
"sed -i \"s|/usr/local|$FLATPAK_DEST|\" etc/lua.pc src/luaconf.h"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"cleanup": [
|
|
||||||
"*.a",
|
|
||||||
"/bin",
|
|
||||||
"/include",
|
|
||||||
"/lib/pkgconfig",
|
|
||||||
"/man"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "highlight",
|
|
||||||
"buildsystem" : "simple",
|
|
||||||
"builddir" : true,
|
|
||||||
"build-commands" : [
|
|
||||||
"sed -i -e 's#^PREFIX = /usr#PREFIX = /app#' makefile",
|
|
||||||
"make",
|
|
||||||
"make install"
|
|
||||||
],
|
|
||||||
"sources" : [
|
|
||||||
{
|
|
||||||
"type" : "archive",
|
|
||||||
"url" : "http://www.andre-simon.de/zip/highlight-4.0.tar.bz2",
|
|
||||||
"sha256" : "f40dcba26e011a2c67df874f4d9b0238c2c6b065163ce8de3d8371b9dfce864d"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "gtk",
|
|
||||||
"buildsystem" : "meson",
|
|
||||||
"builddir" : true,
|
|
||||||
"config-opts" : [
|
|
||||||
"--libdir=/app/lib",
|
|
||||||
"-Denable_vulkan=no",
|
|
||||||
"-Dbuildtype=debugoptimized",
|
|
||||||
"-Dprofile=devel"
|
|
||||||
],
|
|
||||||
"sources" : [
|
|
||||||
{
|
|
||||||
"type" : "git",
|
|
||||||
"url" : "https://gitlab.gnome.org/GNOME/gtk.git"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"build-options" : {
|
|
||||||
"env" : {
|
|
||||||
"GSK_RENDERER" : "opengl"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,65 +1,56 @@
|
|||||||
{
|
{
|
||||||
"app-id" : "org.gtk.IconBrowser4",
|
"app-id": "org.gtk.IconBrowser4",
|
||||||
"runtime" : "org.gnome.Platform",
|
"runtime": "org.gnome.Platform",
|
||||||
"runtime-version" : "master",
|
"runtime-version": "master",
|
||||||
"sdk" : "org.gnome.Sdk",
|
"sdk": "org.gnome.Sdk",
|
||||||
"command" : "gtk4-icon-browser",
|
"command": "gtk4-icon-browser",
|
||||||
"tags" : [
|
"tags": ["devel", "development", "nightly"],
|
||||||
"devel",
|
"desktop-file-name-prefix": "(Development) ",
|
||||||
"development",
|
"finish-args": [
|
||||||
"nightly"
|
|
||||||
],
|
|
||||||
"desktop-file-name-prefix" : "(Development) ",
|
|
||||||
"finish-args" : [
|
|
||||||
"--device=dri",
|
"--device=dri",
|
||||||
"--share=ipc",
|
"--share=ipc",
|
||||||
"--socket=fallback-x11",
|
"--socket=fallback-x11",
|
||||||
"--socket=wayland",
|
"--socket=wayland",
|
||||||
"--talk-name=org.gtk.vfs",
|
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*"
|
||||||
"--talk-name=org.gtk.vfs.*"
|
|
||||||
],
|
],
|
||||||
"cleanup" : [
|
"cleanup": [
|
||||||
"/include",
|
"/include",
|
||||||
"/lib/pkgconfig",
|
"/lib/pkgconfig", "/share/pkgconfig",
|
||||||
"/share/pkgconfig",
|
|
||||||
"/share/aclocal",
|
"/share/aclocal",
|
||||||
"/man",
|
"/man", "/share/man", "/share/gtk-doc",
|
||||||
"/share/man",
|
"*.la", ".a",
|
||||||
"/share/gtk-doc",
|
|
||||||
"*.la",
|
|
||||||
".a",
|
|
||||||
"/lib/girepository-1.0",
|
"/lib/girepository-1.0",
|
||||||
"/share/gir-1.0",
|
"/share/gir-1.0",
|
||||||
"/share/doc"
|
"/share/doc"
|
||||||
],
|
],
|
||||||
"modules" : [
|
"modules": [
|
||||||
{
|
{
|
||||||
"name" : "wayland",
|
"name" : "wayland",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "autotools",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"-Ddocumentation=false"
|
"--disable-documentation"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type" : "git",
|
||||||
"url" : "https://gitlab.freedesktop.org/wayland/wayland.git"
|
"url" : "https://github.com/wayland-project/wayland.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "graphene",
|
"name": "graphene",
|
||||||
"buildsystem" : "meson",
|
"buildsystem": "meson",
|
||||||
"builddir" : true,
|
"builddir": true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dtests=false",
|
"-Dtests=false",
|
||||||
"-Dbenchmarks=false"
|
"-Dbenchmarks=false"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type": "git",
|
||||||
"url" : "https://github.com/ebassi/graphene.git"
|
"url": "https://github.com/ebassi/graphene.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -67,7 +58,7 @@
|
|||||||
"name" : "libsass",
|
"name" : "libsass",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib"
|
"--libdir=/app/lib"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
@@ -82,7 +73,7 @@
|
|||||||
"name" : "sassc",
|
"name" : "sassc",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib"
|
"--libdir=/app/lib"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
@@ -94,25 +85,18 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "gtk",
|
"name": "gtk",
|
||||||
"buildsystem" : "meson",
|
"buildsystem": "meson",
|
||||||
"builddir" : true,
|
"builddir": true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib"
|
||||||
"-Denable_vulkan=no",
|
|
||||||
"-Dbuildtype=debugoptimized",
|
|
||||||
"-Dprofile=devel"
|
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type": "git",
|
||||||
"url" : "https://gitlab.gnome.org/GNOME/gtk.git"
|
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"build-options" : {
|
|
||||||
"env" : {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,65 +1,56 @@
|
|||||||
{
|
{
|
||||||
"app-id" : "org.gtk.WidgetFactory4",
|
"app-id": "org.gtk.WidgetFactory4",
|
||||||
"runtime" : "org.gnome.Platform",
|
"runtime": "org.gnome.Platform",
|
||||||
"runtime-version" : "master",
|
"runtime-version": "master",
|
||||||
"sdk" : "org.gnome.Sdk",
|
"sdk": "org.gnome.Sdk",
|
||||||
"command" : "gtk4-widget-factory",
|
"command": "gtk4-widget-factory",
|
||||||
"tags" : [
|
"tags": ["devel", "development", "nightly"],
|
||||||
"devel",
|
"desktop-file-name-prefix": "(Development) ",
|
||||||
"development",
|
"finish-args": [
|
||||||
"nightly"
|
|
||||||
],
|
|
||||||
"desktop-file-name-prefix" : "(Development) ",
|
|
||||||
"finish-args" : [
|
|
||||||
"--device=dri",
|
"--device=dri",
|
||||||
"--share=ipc",
|
"--share=ipc",
|
||||||
"--socket=fallback-x11",
|
"--socket=fallback-x11",
|
||||||
"--socket=wayland",
|
"--socket=wayland",
|
||||||
"--talk-name=org.gtk.vfs",
|
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*"
|
||||||
"--talk-name=org.gtk.vfs.*"
|
|
||||||
],
|
],
|
||||||
"cleanup" : [
|
"cleanup": [
|
||||||
"/include",
|
"/include",
|
||||||
"/lib/pkgconfig",
|
"/lib/pkgconfig", "/share/pkgconfig",
|
||||||
"/share/pkgconfig",
|
|
||||||
"/share/aclocal",
|
"/share/aclocal",
|
||||||
"/man",
|
"/man", "/share/man", "/share/gtk-doc",
|
||||||
"/share/man",
|
"*.la", ".a",
|
||||||
"/share/gtk-doc",
|
|
||||||
"*.la",
|
|
||||||
".a",
|
|
||||||
"/lib/girepository-1.0",
|
"/lib/girepository-1.0",
|
||||||
"/share/gir-1.0",
|
"/share/gir-1.0",
|
||||||
"/share/doc"
|
"/share/doc"
|
||||||
],
|
],
|
||||||
"modules" : [
|
"modules": [
|
||||||
{
|
{
|
||||||
"name" : "wayland",
|
"name" : "wayland",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "autotools",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"-Ddocumentation=false"
|
"--disable-documentation"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type" : "git",
|
||||||
"url" : "https://gitlab.freedesktop.org/wayland/wayland.git"
|
"url" : "https://github.com/wayland-project/wayland.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "graphene",
|
"name": "graphene",
|
||||||
"buildsystem" : "meson",
|
"buildsystem": "meson",
|
||||||
"builddir" : true,
|
"builddir": true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
"-Dtests=false",
|
"-Dtests=false",
|
||||||
"-Dbenchmarks=false"
|
"-Dbenchmarks=false"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type": "git",
|
||||||
"url" : "https://github.com/ebassi/graphene.git"
|
"url": "https://github.com/ebassi/graphene.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -67,7 +58,7 @@
|
|||||||
"name" : "libsass",
|
"name" : "libsass",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib"
|
"--libdir=/app/lib"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
@@ -82,7 +73,7 @@
|
|||||||
"name" : "sassc",
|
"name" : "sassc",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib"
|
"--libdir=/app/lib"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
@@ -94,29 +85,18 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name" : "gtk",
|
"name": "gtk",
|
||||||
"buildsystem" : "meson",
|
"buildsystem": "meson",
|
||||||
"builddir" : true,
|
"builddir": true,
|
||||||
"config-opts" : [
|
"config-opts": [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib"
|
||||||
"-Denable_vulkan=no",
|
|
||||||
"-Dbuildtype=debugoptimized",
|
|
||||||
"-Dprofile=devel"
|
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources": [
|
||||||
{
|
{
|
||||||
"type" : "git",
|
"type": "git",
|
||||||
"url" : "https://gitlab.gnome.org/GNOME/gtk.git"
|
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"build-options" : {
|
|
||||||
"env" : {
|
|
||||||
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
|
||||||
"GSK_RENDERER" : "opengl",
|
|
||||||
"GDK_DEBUG" : "vulkan-disable",
|
|
||||||
"G_ENABLE_DEBUG" : "true"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
from pathlib import PurePath
|
|
||||||
|
|
||||||
|
|
||||||
stylesheets = [
|
|
||||||
'gtk/theme/Default/Default-light.css',
|
|
||||||
'gtk/theme/Default/Default-dark.css',
|
|
||||||
'gtk/theme/Default/Default-hc.css',
|
|
||||||
'gtk/theme/Default/Default-hc-dark.css',
|
|
||||||
]
|
|
||||||
|
|
||||||
references = [
|
|
||||||
'docs/reference/gtk/gtk4',
|
|
||||||
'docs/reference/gsk/gsk4',
|
|
||||||
'docs/reference/gdk/gdk4',
|
|
||||||
'docs/reference/gdk/gdk4-wayland',
|
|
||||||
'docs/reference/gdk/gdk4-x11',
|
|
||||||
]
|
|
||||||
|
|
||||||
sourceroot = os.environ.get('MESON_SOURCE_ROOT')
|
|
||||||
buildroot = os.environ.get('MESON_BUILD_ROOT')
|
|
||||||
distroot = os.environ.get('MESON_DIST_ROOT')
|
|
||||||
|
|
||||||
for stylesheet in stylesheets:
|
|
||||||
stylesheet_path = PurePath(stylesheet)
|
|
||||||
src = PurePath(sourceroot, stylesheet_path.with_suffix('.scss'))
|
|
||||||
dst = PurePath(distroot, stylesheet_path)
|
|
||||||
subprocess.call(['sassc', '-a', '-M', '-t', 'compact', src, dst])
|
|
||||||
|
|
||||||
for reference in references:
|
|
||||||
src_path = os.path.join(buildroot, reference)
|
|
||||||
if os.path.isdir(src_path):
|
|
||||||
dst_path = os.path.join(distroot, reference)
|
|
||||||
shutil.copytree(src_path, dst_path)
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
repodir = sys.argv[1]
|
|
||||||
profile = sys.argv[2]
|
|
||||||
|
|
||||||
sys.stdout.write("/* This file is auto-generated. Do not edit. */\n")
|
|
||||||
sys.stdout.write("#pragma once\n")
|
|
||||||
sys.stdout.write("\n")
|
|
||||||
sys.stdout.write(f"#define PROFILE \"{profile}\"\n")
|
|
||||||
|
|
||||||
short_sha = os.environ.get('CI_COMMIT_SHORT_SHA')
|
|
||||||
if short_sha is None:
|
|
||||||
cmd = ["git", "-C", repodir, "rev-parse", "--short", "HEAD"]
|
|
||||||
try:
|
|
||||||
with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p:
|
|
||||||
short_sha = p.stdout.read().decode('utf-8').rstrip("\n")
|
|
||||||
except FileNotFoundError:
|
|
||||||
short_sha = ''
|
|
||||||
if profile != 'default':
|
|
||||||
short_sha = 'devel'
|
|
||||||
|
|
||||||
sys.stdout.write(f"#define VCS_TAG \"{short_sha}\"\n")
|
|
||||||
@@ -1,45 +1,31 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
if 'DESTDIR' not in os.environ:
|
if 'DESTDIR' not in os.environ:
|
||||||
gtk_api_version = sys.argv[1]
|
gtk_api_version = sys.argv[1]
|
||||||
gtk_abi_version = sys.argv[2]
|
gtk_abi_version = sys.argv[2]
|
||||||
gtk_libdir = sys.argv[3]
|
gtk_libdir = sys.argv[3]
|
||||||
gtk_datadir = sys.argv[4]
|
gtk_datadir = sys.argv[4]
|
||||||
gtk_bindir = sys.argv[5]
|
|
||||||
|
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
||||||
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
||||||
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
||||||
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
|
||||||
|
print('Compiling GSettings schemas...')
|
||||||
print('Compiling GSettings schemas...')
|
subprocess.call(['glib-compile-schemas',
|
||||||
glib_compile_schemas = subprocess.check_output(['pkg-config',
|
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
||||||
'--variable=glib_compile_schemas',
|
|
||||||
'gio-2.0']).strip()
|
print('Updating icon cache...')
|
||||||
if not os.path.exists(glib_compile_schemas):
|
subprocess.call(['gtk4-update-icon-cache', '-q', '-t' ,'-f',
|
||||||
# pkg-config variables only available since GLib 2.62.0.
|
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
||||||
glib_compile_schemas = 'glib-compile-schemas'
|
|
||||||
subprocess.call([glib_compile_schemas,
|
print('Updating module cache for print backends...')
|
||||||
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
|
||||||
|
|
||||||
print('Updating icon cache...')
|
|
||||||
update_icon_cache = os.path.join(gtk_bindir, 'gtk4-update-icon-cache')
|
|
||||||
subprocess.call([update_icon_cache, '-q', '-t' ,'-f',
|
|
||||||
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
|
||||||
|
|
||||||
print('Updating module cache for print backends...')
|
|
||||||
os.makedirs(gtk_printmodule_dir, exist_ok=True)
|
os.makedirs(gtk_printmodule_dir, exist_ok=True)
|
||||||
gio_querymodules = subprocess.check_output(['pkg-config',
|
subprocess.call(['gio-querymodules', gtk_printmodule_dir])
|
||||||
'--variable=gio_querymodules',
|
|
||||||
'gio-2.0']).strip()
|
print('Updating module cache for input methods...')
|
||||||
if not os.path.exists(gio_querymodules):
|
|
||||||
# pkg-config variables only available since GLib 2.62.0.
|
|
||||||
gio_querymodules = 'gio-querymodules'
|
|
||||||
subprocess.call([gio_querymodules, gtk_printmodule_dir])
|
|
||||||
|
|
||||||
print('Updating module cache for input methods...')
|
|
||||||
os.makedirs(gtk_immodule_dir, exist_ok=True)
|
os.makedirs(gtk_immodule_dir, exist_ok=True)
|
||||||
subprocess.call([gio_querymodules, gtk_immodule_dir])
|
subprocess.call(['gio-querymodules', gtk_immodule_dir])
|
||||||
|
|||||||
277
config.h.meson
Normal file
277
config.h.meson
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
/* always defined to indicate that i18n is enabled */
|
||||||
|
#define ENABLE_NLS 1
|
||||||
|
|
||||||
|
/* The prefix for our gettext translation domains. */
|
||||||
|
#mesondefine GETTEXT_PACKAGE
|
||||||
|
|
||||||
|
/* Disable deprecation warnings from glib */
|
||||||
|
#mesondefine GLIB_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
|
||||||
|
/* Define the location where the catalogs will be installed */
|
||||||
|
#mesondefine GTK_LOCALEDIR
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
|
||||||
|
#mesondefine HAVE_BIND_TEXTDOMAIN_CODESET
|
||||||
|
|
||||||
|
/* Have the cloudproviders library */
|
||||||
|
#mesondefine HAVE_CLOUDPROVIDERS
|
||||||
|
|
||||||
|
/* define if we have colord */
|
||||||
|
#mesondefine HAVE_COLORD
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <crt_externs.h> header file. */
|
||||||
|
#mesondefine HAVE_CRT_EXTERNS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `dcgettext' function. */
|
||||||
|
#mesondefine HAVE_DCGETTEXT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
#mesondefine HAVE_DLFCN_H
|
||||||
|
|
||||||
|
/* Have the ffmpeg library */
|
||||||
|
#mesondefine HAVE_FFMPEG
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ftw.h> header file. */
|
||||||
|
#mesondefine HAVE_FTW_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getpagesize' function. */
|
||||||
|
#mesondefine HAVE_GETPAGESIZE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getresuid' function. */
|
||||||
|
#mesondefine HAVE_GETRESUID
|
||||||
|
|
||||||
|
/* Define if gio-unix is available */
|
||||||
|
#mesondefine HAVE_GIO_UNIX
|
||||||
|
|
||||||
|
/* Define if GStreamer support is available */
|
||||||
|
#mesondefine HAVE_GSTREAMER
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#mesondefine HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `IPrintDialogCallback'. */
|
||||||
|
#mesondefine HAVE_IPRINTDIALOGCALLBACK
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <locale.h> header file. */
|
||||||
|
#mesondefine HAVE_LOCALE_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `lstat' function. */
|
||||||
|
#mesondefine HAVE_LSTAT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mallinfo' function. */
|
||||||
|
#mesondefine HAVE_MALLINFO
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#mesondefine HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mkstemp' function. */
|
||||||
|
#mesondefine HAVE_MKSTEMP
|
||||||
|
|
||||||
|
/* Define to 1 if you have a working `mmap' system call. */
|
||||||
|
#mesondefine HAVE_MMAP
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `posix_fallocate' function. */
|
||||||
|
#mesondefine HAVE_POSIX_FALLOCATE
|
||||||
|
|
||||||
|
/* Have the Xrandr extension library */
|
||||||
|
#mesondefine HAVE_RANDR
|
||||||
|
|
||||||
|
/* Have the Xrandr 1.5 extension library */
|
||||||
|
#mesondefine HAVE_RANDR15
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sincos' function. */
|
||||||
|
#mesondefine HAVE_SINCOS
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#mesondefine HAVE_STDINT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#mesondefine HAVE_STDLIB_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#mesondefine HAVE_STRINGS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#mesondefine HAVE_STRING_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||||
|
#mesondefine HAVE_SYS_MMAN_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||||
|
#mesondefine HAVE_SYS_PARAM_H
|
||||||
|
|
||||||
|
/* Have the sysprof-capture library */
|
||||||
|
#mesondefine HAVE_SYSPROF_CAPTURE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#mesondefine HAVE_SYS_STAT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
#mesondefine HAVE_SYS_TIME_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#mesondefine HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#mesondefine HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Have the XCOMPOSITE X extension */
|
||||||
|
#mesondefine HAVE_XCOMPOSITE
|
||||||
|
|
||||||
|
/* Have the Xcursor library */
|
||||||
|
#mesondefine HAVE_XCURSOR
|
||||||
|
|
||||||
|
/* Have the XDAMAGE X extension */
|
||||||
|
#mesondefine HAVE_XDAMAGE
|
||||||
|
|
||||||
|
/* Have the XFIXES X extension */
|
||||||
|
#mesondefine HAVE_XFIXES
|
||||||
|
|
||||||
|
/* Define to 1 if XFree Xinerama is available */
|
||||||
|
#mesondefine HAVE_XFREE_XINERAMA
|
||||||
|
|
||||||
|
/* Have XGenericEvent */
|
||||||
|
#mesondefine HAVE_XGENERICEVENTS
|
||||||
|
|
||||||
|
/* Define to use XKB extension */
|
||||||
|
#mesondefine HAVE_XKB
|
||||||
|
|
||||||
|
/* Have the SYNC extension library */
|
||||||
|
#mesondefine HAVE_XSYNC
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_lock_file' function */
|
||||||
|
#mesondefine HAVE__LOCK_FILE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `flockfile' function */
|
||||||
|
#mesondefine HAVE_FLOCKFILE
|
||||||
|
|
||||||
|
/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
|
||||||
|
#mesondefine HAVE__NL_MEASUREMENT_MEASUREMENT
|
||||||
|
|
||||||
|
/* Define if _NL_PAPER_HEIGHT is available */
|
||||||
|
#mesondefine HAVE__NL_PAPER_HEIGHT
|
||||||
|
|
||||||
|
/* Define if _NL_PAPER_WIDTH is available */
|
||||||
|
#mesondefine HAVE__NL_PAPER_WIDTH
|
||||||
|
|
||||||
|
/* Define if _NL_TIME_FIRST_WEEKDAY is available */
|
||||||
|
#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
|
||||||
|
|
||||||
|
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||||
|
#mesondefine LT_OBJDIR
|
||||||
|
|
||||||
|
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
||||||
|
#mesondefine NO_MINUS_C_MINUS_O
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#mesondefine PACKAGE_BUGREPORT
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#mesondefine PACKAGE_NAME
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#mesondefine PACKAGE_STRING
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#mesondefine PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#mesondefine PACKAGE_URL
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#mesondefine PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* Use NSBundle functions to determine load paths for libraries, translations,
|
||||||
|
etc. */
|
||||||
|
#mesondefine QUARTZ_RELOCATION
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#mesondefine STDC_HEADERS
|
||||||
|
|
||||||
|
/* Enable extensions on AIX 3, Interix. */
|
||||||
|
#ifndef _ALL_SOURCE
|
||||||
|
# undef _ALL_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable GNU extensions on systems that have them. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# undef _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable threading extensions on Solaris. */
|
||||||
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
# undef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
#endif
|
||||||
|
/* Enable extensions on HP NonStop. */
|
||||||
|
#ifndef _TANDEM_SOURCE
|
||||||
|
# undef _TANDEM_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable general extensions on Solaris. */
|
||||||
|
#ifndef __EXTENSIONS__
|
||||||
|
# undef __EXTENSIONS__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Define to 1 if XInput 2.2 is available */
|
||||||
|
#mesondefine XINPUT_2_2
|
||||||
|
|
||||||
|
/* Define to 1 if the X Window System is missing or not being used. */
|
||||||
|
#mesondefine X_DISPLAY_MISSING
|
||||||
|
|
||||||
|
/* Enable large inode numbers on Mac OS X 10.5. */
|
||||||
|
#ifndef _DARWIN_USE_64_BIT_INODE
|
||||||
|
# define _DARWIN_USE_64_BIT_INODE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
#mesondefine _FILE_OFFSET_BITS
|
||||||
|
|
||||||
|
/* defines how to decorate public symbols while building */
|
||||||
|
#mesondefine _GDK_EXTERN
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
#mesondefine _LARGE_FILES
|
||||||
|
|
||||||
|
/* Define to 1 if on MINIX. */
|
||||||
|
#mesondefine _MINIX
|
||||||
|
|
||||||
|
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||||
|
this defined. */
|
||||||
|
#mesondefine _POSIX_1_SOURCE
|
||||||
|
|
||||||
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||||
|
#mesondefine _POSIX_SOURCE
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#mesondefine gid_t
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#mesondefine uid_t
|
||||||
|
|
||||||
|
/* Define to 1 if linux/memfd.h exists */
|
||||||
|
#mesondefine HAVE_LINUX_MEMFD_H
|
||||||
|
|
||||||
|
#mesondefine HAVE_LINUX_INPUT_H
|
||||||
|
|
||||||
|
#mesondefine HAVE_DEV_EVDEV_INPUT_H
|
||||||
|
|
||||||
|
#mesondefine GTK_SYSCONFDIR
|
||||||
|
|
||||||
|
#mesondefine GTK_LOCALEDIR
|
||||||
|
|
||||||
|
#mesondefine GTK_DATADIR
|
||||||
|
|
||||||
|
#mesondefine GTK_LIBDIR
|
||||||
|
|
||||||
|
#mesondefine GTK_PRINT_BACKENDS
|
||||||
|
|
||||||
|
#mesondefine HAVE_CAIRO_SCRIPT_INTERPRETER
|
||||||
|
|
||||||
|
#mesondefine HAVE_HARFBUZZ
|
||||||
|
|
||||||
|
#mesondefine HAVE_PANGOFT
|
||||||
|
|
||||||
|
#mesondefine ISO_CODES_PREFIX
|
||||||
|
|
||||||
|
/* Define if tracker3 is available */
|
||||||
|
#mesondefine HAVE_TRACKER3
|
||||||
@@ -81,11 +81,11 @@ constraint_editor_application_activate (GApplication *app)
|
|||||||
static void
|
static void
|
||||||
constraint_editor_application_open (GApplication *app,
|
constraint_editor_application_open (GApplication *app,
|
||||||
GFile **files,
|
GFile **files,
|
||||||
int n_files,
|
gint n_files,
|
||||||
const char *hint)
|
const gchar *hint)
|
||||||
{
|
{
|
||||||
ConstraintEditorWindow *win;
|
ConstraintEditorWindow *win;
|
||||||
int i;
|
gint i;
|
||||||
|
|
||||||
for (i = 0; i < n_files; i++)
|
for (i = 0; i < n_files; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ struct _ConstraintEditorWindow
|
|||||||
G_DEFINE_TYPE(ConstraintEditorWindow, constraint_editor_window, GTK_TYPE_APPLICATION_WINDOW);
|
G_DEFINE_TYPE(ConstraintEditorWindow, constraint_editor_window, GTK_TYPE_APPLICATION_WINDOW);
|
||||||
|
|
||||||
static GtkConstraintTarget *
|
static GtkConstraintTarget *
|
||||||
find_target (GListModel *model,
|
find_target (GListModel *model,
|
||||||
GtkConstraintTarget *orig)
|
GtkConstraintTarget *orig)
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -163,30 +163,20 @@ constraint_editor_window_load (ConstraintEditorWindow *self,
|
|||||||
GtkConstraint *clone;
|
GtkConstraint *clone;
|
||||||
GtkConstraintTarget *target;
|
GtkConstraintTarget *target;
|
||||||
GtkConstraintTarget *source;
|
GtkConstraintTarget *source;
|
||||||
GtkConstraintAttribute source_attr;
|
|
||||||
|
|
||||||
item = g_list_model_get_item (list, i);
|
item = g_list_model_get_item (list, i);
|
||||||
constraint = GTK_CONSTRAINT (item);
|
constraint = GTK_CONSTRAINT (item);
|
||||||
|
|
||||||
target = gtk_constraint_get_target (constraint);
|
target = gtk_constraint_get_target (constraint);
|
||||||
source = gtk_constraint_get_source (constraint);
|
source = gtk_constraint_get_source (constraint);
|
||||||
source_attr = gtk_constraint_get_source_attribute (constraint);
|
clone = gtk_constraint_new (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
|
||||||
|
|
||||||
if (source == NULL && source_attr == GTK_CONSTRAINT_ATTRIBUTE_NONE)
|
|
||||||
clone = gtk_constraint_new_constant (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
|
|
||||||
gtk_constraint_get_target_attribute (constraint),
|
gtk_constraint_get_target_attribute (constraint),
|
||||||
gtk_constraint_get_relation (constraint),
|
gtk_constraint_get_relation (constraint),
|
||||||
|
find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), source),
|
||||||
|
gtk_constraint_get_target_attribute (constraint),
|
||||||
|
gtk_constraint_get_multiplier (constraint),
|
||||||
gtk_constraint_get_constant (constraint),
|
gtk_constraint_get_constant (constraint),
|
||||||
gtk_constraint_get_strength (constraint));
|
gtk_constraint_get_strength (constraint));
|
||||||
else
|
|
||||||
clone = gtk_constraint_new (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
|
|
||||||
gtk_constraint_get_target_attribute (constraint),
|
|
||||||
gtk_constraint_get_relation (constraint),
|
|
||||||
find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), source),
|
|
||||||
source_attr,
|
|
||||||
gtk_constraint_get_multiplier (constraint),
|
|
||||||
gtk_constraint_get_constant (constraint),
|
|
||||||
gtk_constraint_get_strength (constraint));
|
|
||||||
|
|
||||||
constraint_view_add_constraint (CONSTRAINT_VIEW (self->view), clone);
|
constraint_view_add_constraint (CONSTRAINT_VIEW (self->view), clone);
|
||||||
|
|
||||||
@@ -203,7 +193,7 @@ constraint_editor_window_load (ConstraintEditorWindow *self,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
open_response_cb (GtkNativeDialog *dialog,
|
open_response_cb (GtkNativeDialog *dialog,
|
||||||
int response,
|
gint response,
|
||||||
ConstraintEditorWindow *self)
|
ConstraintEditorWindow *self)
|
||||||
{
|
{
|
||||||
gtk_native_dialog_hide (dialog);
|
gtk_native_dialog_hide (dialog);
|
||||||
@@ -295,7 +285,7 @@ serialize_model (GListModel *list)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
save_response_cb (GtkNativeDialog *dialog,
|
save_response_cb (GtkNativeDialog *dialog,
|
||||||
int response,
|
gint response,
|
||||||
ConstraintEditorWindow *self)
|
ConstraintEditorWindow *self)
|
||||||
{
|
{
|
||||||
gtk_native_dialog_hide (dialog);
|
gtk_native_dialog_hide (dialog);
|
||||||
@@ -310,7 +300,7 @@ save_response_cb (GtkNativeDialog *dialog,
|
|||||||
model = constraint_view_get_model (CONSTRAINT_VIEW (self->view));
|
model = constraint_view_get_model (CONSTRAINT_VIEW (self->view));
|
||||||
text = serialize_model (model);
|
text = serialize_model (model);
|
||||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
||||||
g_file_replace_contents (file, text, strlen (text),
|
g_file_replace_contents (file, text, -1,
|
||||||
NULL, FALSE,
|
NULL, FALSE,
|
||||||
G_FILE_CREATE_NONE,
|
G_FILE_CREATE_NONE,
|
||||||
NULL,
|
NULL,
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<template class="ConstraintEditorWindow" parent="GtkApplicationWindow">
|
<template class="ConstraintEditorWindow" parent="GtkApplicationWindow">
|
||||||
|
<style>
|
||||||
|
<class name="devel"/>
|
||||||
|
</style>
|
||||||
<property name="title" translatable="yes">GTK Constraint Editor</property>
|
<property name="title" translatable="yes">GTK Constraint Editor</property>
|
||||||
<property name="default-width">1024</property>
|
<property name="default-width">1024</property>
|
||||||
<property name="default-height">768</property>
|
<property name="default-height">768</property>
|
||||||
<child type="titlebar">
|
<child type="titlebar">
|
||||||
<object class="GtkHeaderBar" id="header">
|
<object class="GtkHeaderBar" id="header">
|
||||||
|
<property name="show-title-buttons">1</property>
|
||||||
<child type="start">
|
<child type="start">
|
||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
<property name="icon-name">document-open-symbolic</property>
|
<property name="icon-name">document-open-symbolic</property>
|
||||||
|
|||||||
@@ -142,9 +142,6 @@ get_target (GListModel *model,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (id == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (strcmp ("super", id) == 0)
|
if (strcmp ("super", id) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -215,22 +212,6 @@ get_relation_nick (GtkConstraintRelation relation)
|
|||||||
return nick;
|
return nick;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
get_relation_display_name (GtkConstraintRelation relation)
|
|
||||||
{
|
|
||||||
switch (relation)
|
|
||||||
{
|
|
||||||
case GTK_CONSTRAINT_RELATION_LE:
|
|
||||||
return "≤";
|
|
||||||
case GTK_CONSTRAINT_RELATION_EQ:
|
|
||||||
return "=";
|
|
||||||
case GTK_CONSTRAINT_RELATION_GE:
|
|
||||||
return "≥";
|
|
||||||
default:
|
|
||||||
return "?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkConstraintStrength
|
static GtkConstraintStrength
|
||||||
get_strength (const char *id)
|
get_strength (const char *id)
|
||||||
{
|
{
|
||||||
@@ -350,7 +331,6 @@ source_attr_changed (ConstraintEditor *editor)
|
|||||||
{
|
{
|
||||||
gtk_widget_set_sensitive (editor->source, TRUE);
|
gtk_widget_set_sensitive (editor->source, TRUE);
|
||||||
gtk_widget_set_sensitive (editor->multiplier, TRUE);
|
gtk_widget_set_sensitive (editor->multiplier, TRUE);
|
||||||
gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "1");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,7 +347,7 @@ constraint_editor_constraint_to_string (GtkConstraint *constraint)
|
|||||||
|
|
||||||
name = get_target_name (gtk_constraint_get_target (constraint));
|
name = get_target_name (gtk_constraint_get_target (constraint));
|
||||||
attr = get_attr_nick (gtk_constraint_get_target_attribute (constraint));
|
attr = get_attr_nick (gtk_constraint_get_target_attribute (constraint));
|
||||||
relation = get_relation_display_name (gtk_constraint_get_relation (constraint));
|
relation = get_relation_nick (gtk_constraint_get_relation (constraint));
|
||||||
|
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
name = "[ ]";
|
name = "[ ]";
|
||||||
@@ -461,12 +441,8 @@ update_preview (ConstraintEditor *editor)
|
|||||||
static void
|
static void
|
||||||
update_button (ConstraintEditor *editor)
|
update_button (ConstraintEditor *editor)
|
||||||
{
|
{
|
||||||
const char *target = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target));
|
if (gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target)) != NULL &&
|
||||||
const char *source = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source));
|
gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source)) != NULL)
|
||||||
const char *source_attr = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
|
|
||||||
|
|
||||||
if (target &&
|
|
||||||
(source || (source_attr && get_target_attr (source_attr) == GTK_CONSTRAINT_ATTRIBUTE_NONE)))
|
|
||||||
gtk_widget_set_sensitive (editor->button, TRUE);
|
gtk_widget_set_sensitive (editor->button, TRUE);
|
||||||
else
|
else
|
||||||
gtk_widget_set_sensitive (editor->button, FALSE);
|
gtk_widget_set_sensitive (editor->button, FALSE);
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Target</property>
|
<property name="label">Target</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -23,8 +23,8 @@
|
|||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="changed" handler="update_button" swapped="yes"/>
|
<signal name="changed" handler="update_button" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -32,8 +32,8 @@
|
|||||||
<object class="GtkComboBoxText" id="target_attr">
|
<object class="GtkComboBoxText" id="target_attr">
|
||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Relation</property>
|
<property name="label">Relation</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -50,8 +50,8 @@
|
|||||||
<object class="GtkComboBoxText" id="relation">
|
<object class="GtkComboBoxText" id="relation">
|
||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -59,8 +59,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Source</property>
|
<property name="label">Source</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -69,8 +69,8 @@
|
|||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="changed" handler="update_button" swapped="yes"/>
|
<signal name="changed" handler="update_button" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -78,10 +78,9 @@
|
|||||||
<object class="GtkComboBoxText" id="source_attr">
|
<object class="GtkComboBoxText" id="source_attr">
|
||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="changed" handler="source_attr_changed" swapped="yes"/>
|
<signal name="changed" handler="source_attr_changed" swapped="yes"/>
|
||||||
<signal name="changed" handler="update_button" swapped="yes"/>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -89,8 +88,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Multiplier</property>
|
<property name="label">Multiplier</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">4</property>
|
<property name="top-attach">4</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -98,8 +97,8 @@
|
|||||||
<object class="GtkEntry" id="multiplier">
|
<object class="GtkEntry" id="multiplier">
|
||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">4</property>
|
<property name="top-attach">4</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -107,8 +106,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Constant</property>
|
<property name="label">Constant</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">5</property>
|
<property name="top-attach">5</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -116,8 +115,8 @@
|
|||||||
<object class="GtkEntry" id="constant">
|
<object class="GtkEntry" id="constant">
|
||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">5</property>
|
<property name="top-attach">5</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -125,16 +124,16 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Strength</property>
|
<property name="label">Strength</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">6</property>
|
<property name="top-attach">6</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxText" id="strength">
|
<object class="GtkComboBoxText" id="strength">
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">6</property>
|
<property name="top-attach">6</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -142,8 +141,8 @@
|
|||||||
<object class="GtkLabel" id="preview">
|
<object class="GtkLabel" id="preview">
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">7</property>
|
<property name="top-attach">7</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
<attributes>
|
<attributes>
|
||||||
@@ -156,8 +155,8 @@
|
|||||||
<property name="label">Create</property>
|
<property name="label">Create</property>
|
||||||
<signal name="clicked" handler="create_constraint"/>
|
<signal name="clicked" handler="create_constraint"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">8</property>
|
<property name="top-attach">8</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|||||||
@@ -174,25 +174,28 @@ constraint_view_init (ConstraintView *self)
|
|||||||
manager = gtk_constraint_layout_new ();
|
manager = gtk_constraint_layout_new ();
|
||||||
gtk_widget_set_layout_manager (GTK_WIDGET (self), manager);
|
gtk_widget_set_layout_manager (GTK_WIDGET (self), manager);
|
||||||
|
|
||||||
guides = gtk_constraint_layout_observe_guides (GTK_CONSTRAINT_LAYOUT (manager));
|
|
||||||
|
|
||||||
all_constraints = gtk_constraint_layout_observe_constraints (GTK_CONSTRAINT_LAYOUT (manager));
|
|
||||||
filter = GTK_FILTER (gtk_custom_filter_new (omit_internal, NULL, NULL));
|
|
||||||
constraints = (GListModel *)gtk_filter_list_model_new (all_constraints, filter);
|
|
||||||
|
|
||||||
all_children = gtk_widget_observe_children (GTK_WIDGET (self));
|
all_children = gtk_widget_observe_children (GTK_WIDGET (self));
|
||||||
filter = GTK_FILTER (gtk_custom_filter_new (omit_internal, NULL, NULL));
|
all_constraints = gtk_constraint_layout_observe_constraints (GTK_CONSTRAINT_LAYOUT (manager));
|
||||||
|
guides = gtk_constraint_layout_observe_guides (GTK_CONSTRAINT_LAYOUT (manager));
|
||||||
|
filter = gtk_custom_filter_new (omit_internal, NULL, NULL);
|
||||||
|
constraints = (GListModel *)gtk_filter_list_model_new (all_constraints, filter);
|
||||||
|
g_object_unref (filter);
|
||||||
|
filter = gtk_custom_filter_new (omit_internal, NULL, NULL);
|
||||||
children = (GListModel *)gtk_filter_list_model_new (all_children, filter);
|
children = (GListModel *)gtk_filter_list_model_new (all_children, filter);
|
||||||
|
g_object_unref (filter);
|
||||||
|
|
||||||
list = g_list_store_new (G_TYPE_LIST_MODEL);
|
list = g_list_store_new (G_TYPE_LIST_MODEL);
|
||||||
g_list_store_append (list, children);
|
g_list_store_append (list, children);
|
||||||
g_list_store_append (list, guides);
|
g_list_store_append (list, guides);
|
||||||
g_list_store_append (list, constraints);
|
g_list_store_append (list, constraints);
|
||||||
|
self->model = G_LIST_MODEL (gtk_flatten_list_model_new (G_TYPE_OBJECT, G_LIST_MODEL (list)));
|
||||||
g_object_unref (children);
|
g_object_unref (children);
|
||||||
g_object_unref (guides);
|
g_object_unref (guides);
|
||||||
g_object_unref (constraints);
|
g_object_unref (constraints);
|
||||||
|
g_object_unref (all_children);
|
||||||
|
g_object_unref (all_constraints);
|
||||||
|
g_object_unref (list);
|
||||||
|
|
||||||
self->model = G_LIST_MODEL (gtk_flatten_list_model_new (G_LIST_MODEL (list)));
|
|
||||||
|
|
||||||
controller = (GtkEventController *)gtk_gesture_drag_new ();
|
controller = (GtkEventController *)gtk_gesture_drag_new ();
|
||||||
g_signal_connect (controller, "drag-begin", G_CALLBACK (drag_begin), self);
|
g_signal_connect (controller, "drag-begin", G_CALLBACK (drag_begin), self);
|
||||||
|
|||||||
@@ -55,8 +55,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Name</property>
|
<property name="label">Name</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -64,8 +64,8 @@
|
|||||||
<object class="GtkEntry" id="name">
|
<object class="GtkEntry" id="name">
|
||||||
<property name="max-width-chars">20</property>
|
<property name="max-width-chars">20</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -74,8 +74,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Min Size</property>
|
<property name="label">Min Size</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -84,8 +84,8 @@
|
|||||||
<property name="adjustment">min_width_adj</property>
|
<property name="adjustment">min_width_adj</property>
|
||||||
<property name="max-width-chars">5</property>
|
<property name="max-width-chars">5</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -94,8 +94,8 @@
|
|||||||
<property name="adjustment">min_height_adj</property>
|
<property name="adjustment">min_height_adj</property>
|
||||||
<property name="max-width-chars">5</property>
|
<property name="max-width-chars">5</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -103,8 +103,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Nat Size</property>
|
<property name="label">Nat Size</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -113,8 +113,8 @@
|
|||||||
<property name="adjustment">nat_width_adj</property>
|
<property name="adjustment">nat_width_adj</property>
|
||||||
<property name="max-width-chars">5</property>
|
<property name="max-width-chars">5</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -123,8 +123,8 @@
|
|||||||
<property name="adjustment">nat_height_adj</property>
|
<property name="adjustment">nat_height_adj</property>
|
||||||
<property name="max-width-chars">5</property>
|
<property name="max-width-chars">5</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -132,8 +132,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Max Size</property>
|
<property name="label">Max Size</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -142,8 +142,8 @@
|
|||||||
<property name="adjustment">max_width_adj</property>
|
<property name="adjustment">max_width_adj</property>
|
||||||
<property name="max-width-chars">5</property>
|
<property name="max-width-chars">5</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -152,8 +152,8 @@
|
|||||||
<property name="adjustment">max_height_adj</property>
|
<property name="adjustment">max_height_adj</property>
|
||||||
<property name="max-width-chars">5</property>
|
<property name="max-width-chars">5</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -161,16 +161,16 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Strength</property>
|
<property name="label">Strength</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">4</property>
|
<property name="top-attach">4</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxText" id="strength">
|
<object class="GtkComboBoxText" id="strength">
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">4</property>
|
<property name="top-attach">4</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -180,8 +180,8 @@
|
|||||||
<property name="label">Create</property>
|
<property name="label">Create</property>
|
||||||
<signal name="clicked" handler="create_guide"/>
|
<signal name="clicked" handler="create_guide"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="left-attach">2</property>
|
||||||
<property name="row">5</property>
|
<property name="top-attach">5</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|||||||
@@ -8,16 +8,14 @@ constraint_editor_sources = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
constraint_editor_resources = gnome.compile_resources('constraint_editor_resources',
|
constraint_editor_resources = gnome.compile_resources('constraint_editor_resources',
|
||||||
'constraint-editor.gresource.xml',
|
'constraint-editor.gresource.xml',
|
||||||
source_dir: '.',
|
source_dir: '.')
|
||||||
)
|
|
||||||
|
|
||||||
executable('gtk4-constraint-editor',
|
executable('gtk4-constraint-editor',
|
||||||
sources: [ constraint_editor_sources, constraint_editor_resources, ],
|
constraint_editor_sources, constraint_editor_resources,
|
||||||
c_args: common_cflags,
|
c_args: common_cflags,
|
||||||
dependencies: libgtk_dep,
|
dependencies: libgtk_dep,
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
gui_app: true,
|
gui_app: true,
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
install: false,
|
install: false)
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,345 +0,0 @@
|
|||||||
// Originally from: https://www.shadertoy.com/view/wsjBD3
|
|
||||||
// License CC0: A battered alien planet
|
|
||||||
// Been experimenting with space inspired shaders
|
|
||||||
|
|
||||||
#define PI 3.141592654
|
|
||||||
#define TAU (2.0*PI)
|
|
||||||
|
|
||||||
#define TOLERANCE 0.00001
|
|
||||||
#define MAX_ITER 65
|
|
||||||
#define MIN_DISTANCE 0.01
|
|
||||||
#define MAX_DISTANCE 9.0
|
|
||||||
|
|
||||||
const vec3 skyCol1 = vec3(0.35, 0.45, 0.6);
|
|
||||||
const vec3 skyCol2 = vec3(0.4, 0.7, 1.0);
|
|
||||||
const vec3 skyCol3 = pow(skyCol1, vec3(0.25));
|
|
||||||
const vec3 sunCol1 = vec3(1.0,0.6,0.4);
|
|
||||||
const vec3 sunCol2 = vec3(1.0,0.9,0.7);
|
|
||||||
const vec3 smallSunCol1 = vec3(1.0,0.5,0.25)*0.5;
|
|
||||||
const vec3 smallSunCol2 = vec3(1.0,0.5,0.25)*0.5;
|
|
||||||
const vec3 mountainColor = 1.0*sqrt(vec3(0.95, 0.65, 0.45));
|
|
||||||
const float cellWidth = 1.0;
|
|
||||||
const vec4 planet = vec4(80.0, -20.0, 100.0, 50.0)*1000.0;
|
|
||||||
|
|
||||||
void rot(inout vec2 p, float a) {
|
|
||||||
float c = cos(a);
|
|
||||||
float s = sin(a);
|
|
||||||
p = vec2(p.x*c + p.y*s, -p.x*s + p.y*c);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec2 mod2(inout vec2 p, vec2 size) {
|
|
||||||
vec2 c = floor((p + size*0.5)/size);
|
|
||||||
p = mod(p + size*0.5,size) - size*0.5;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
float circle(vec2 p, float r) {
|
|
||||||
return length(p) - r;
|
|
||||||
}
|
|
||||||
|
|
||||||
float egg(vec2 p, float ra, float rb) {
|
|
||||||
const float k = sqrt(3.0);
|
|
||||||
p.x = abs(p.x);
|
|
||||||
float r = ra - rb;
|
|
||||||
return ((p.y<0.0) ? length(vec2(p.x, p.y )) - r :
|
|
||||||
(k*(p.x+r)<p.y) ? length(vec2(p.x, p.y-k*r)) :
|
|
||||||
length(vec2(p.x+r,p.y )) - 2.0*r) - rb;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec2 hash(vec2 p) {
|
|
||||||
p = vec2(dot (p, vec2 (127.1, 311.7)), dot (p, vec2 (269.5, 183.3)));
|
|
||||||
return -1. + 2.*fract (sin (p)*43758.5453123);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec2 raySphere(vec3 ro, vec3 rd, vec4 sphere) {
|
|
||||||
vec3 center = sphere.xyz;
|
|
||||||
float radius = sphere.w;
|
|
||||||
vec3 m = ro - center.xyz;
|
|
||||||
float b = dot(m, rd);
|
|
||||||
float c = dot(m, m) - radius*radius;
|
|
||||||
if(c > 0.0 && b > 0.0) return vec2(-1.0, -1.0);
|
|
||||||
float discr = b * b - c;
|
|
||||||
if(discr < 0.0) return vec2(-1.0);
|
|
||||||
float normalMultiplier = 1.0;
|
|
||||||
float s = sqrt(discr);
|
|
||||||
float t0 = -b - s;
|
|
||||||
float t1 = -b + s;;
|
|
||||||
return vec2(t0, t1);
|
|
||||||
}
|
|
||||||
|
|
||||||
float noize1(vec2 p) {
|
|
||||||
vec2 n = mod2(p, vec2(cellWidth));
|
|
||||||
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
|
||||||
hh.x *= hh.y;
|
|
||||||
|
|
||||||
float r = 0.225*cellWidth;
|
|
||||||
|
|
||||||
float d = circle(p, 2.0*r);
|
|
||||||
|
|
||||||
float h = hh.x*smoothstep(0.0, r, -d);
|
|
||||||
|
|
||||||
return h*0.25;
|
|
||||||
}
|
|
||||||
|
|
||||||
float noize2(vec2 p) {
|
|
||||||
vec2 n = mod2(p, vec2(cellWidth));
|
|
||||||
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
|
||||||
hh.x *= hh.y;
|
|
||||||
|
|
||||||
rot(p, TAU*hh.y);
|
|
||||||
float r = 0.45*cellWidth;
|
|
||||||
|
|
||||||
// float d = circle(p, 1.0*r);
|
|
||||||
float d = egg(p, 0.75*r, 0.5*r*abs(hh.y));
|
|
||||||
|
|
||||||
float h = (hh.x)*smoothstep(0.0, r, -2.0*d);
|
|
||||||
|
|
||||||
return h*0.275;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float height(vec2 p, float dd, int mx) {
|
|
||||||
const float aa = 0.45;
|
|
||||||
const float ff = 2.03;
|
|
||||||
const float tt = 1.2;
|
|
||||||
const float oo = 3.93;
|
|
||||||
const float near = 0.25;
|
|
||||||
const float far = 0.65;
|
|
||||||
|
|
||||||
float a = 1.0;
|
|
||||||
float o = 0.2;
|
|
||||||
float s = 0.0;
|
|
||||||
float d = 0.0;
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (; i < 4;++i) {
|
|
||||||
float nn = a*noize2(p);
|
|
||||||
s += nn;
|
|
||||||
d += abs(a);
|
|
||||||
p += o;
|
|
||||||
a *= aa;
|
|
||||||
p *= ff;
|
|
||||||
o *= oo;
|
|
||||||
rot(p, tt);
|
|
||||||
}
|
|
||||||
|
|
||||||
float lod = s/d;
|
|
||||||
|
|
||||||
float rdd = dd/MAX_DISTANCE;
|
|
||||||
mx = int(mix(float(4), float(mx), step(rdd, far)));
|
|
||||||
|
|
||||||
for (; i < mx; ++i) {
|
|
||||||
float nn = a*noize1(p);
|
|
||||||
s += nn;
|
|
||||||
d += abs(a);
|
|
||||||
p += o;
|
|
||||||
a *= aa;
|
|
||||||
p *= ff;
|
|
||||||
o *= oo;
|
|
||||||
rot(p, tt);
|
|
||||||
}
|
|
||||||
|
|
||||||
float hid = (s/d);
|
|
||||||
|
|
||||||
return mix(hid, lod, smoothstep(near, far, rdd));
|
|
||||||
}
|
|
||||||
|
|
||||||
float loheight(vec2 p, float d) {
|
|
||||||
return height(p, d, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
float height(vec2 p, float d) {
|
|
||||||
return height(p, d, 6);
|
|
||||||
}
|
|
||||||
|
|
||||||
float hiheight(vec2 p, float d) {
|
|
||||||
return height(p, d, 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 normal(vec2 p, float d) {
|
|
||||||
vec2 eps = vec2(0.00125, 0.0);
|
|
||||||
|
|
||||||
vec3 n;
|
|
||||||
|
|
||||||
n.x = (hiheight(p - eps.xy, d) - hiheight(p + eps.xy, d));
|
|
||||||
n.y = 2.0*eps.x;
|
|
||||||
n.z = (hiheight(p - eps.yx, d) - hiheight(p + eps.yx, d));
|
|
||||||
|
|
||||||
return normalize(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
const float stepLength[] = float[](0.9, 0.25);
|
|
||||||
|
|
||||||
|
|
||||||
float march(vec3 ro, vec3 rd, out int max_iter) {
|
|
||||||
float dt = 0.1;
|
|
||||||
float d = MIN_DISTANCE;
|
|
||||||
int currentStep = 0;
|
|
||||||
float lastd = d;
|
|
||||||
for (int i = 0; i < MAX_ITER; ++i)
|
|
||||||
{
|
|
||||||
vec3 p = ro + d*rd;
|
|
||||||
float h = height(p.xz, d);
|
|
||||||
|
|
||||||
if (d > MAX_DISTANCE) {
|
|
||||||
max_iter = i;
|
|
||||||
return MAX_DISTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
float hd = p.y - h;
|
|
||||||
|
|
||||||
if (hd < TOLERANCE) {
|
|
||||||
++currentStep;
|
|
||||||
if (currentStep >= stepLength.length()) {
|
|
||||||
max_iter = i;
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
d = lastd;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float sl = stepLength[currentStep];
|
|
||||||
|
|
||||||
dt = max(hd, TOLERANCE)*sl + 0.0025*d;
|
|
||||||
lastd = d;
|
|
||||||
d += dt;
|
|
||||||
}
|
|
||||||
|
|
||||||
max_iter = MAX_ITER;
|
|
||||||
return MAX_DISTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 sunDirection() {
|
|
||||||
return normalize(vec3(-0.5, 0.085, 1.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 smallSunDirection() {
|
|
||||||
return normalize(vec3(-0.2, -0.05, 1.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
float psin(float f) {
|
|
||||||
return 0.5 + 0.5*sin(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 skyColor(vec3 ro, vec3 rd) {
|
|
||||||
vec3 sunDir = sunDirection();
|
|
||||||
vec3 smallSunDir = smallSunDirection();
|
|
||||||
|
|
||||||
float sunDot = max(dot(rd, sunDir), 0.0);
|
|
||||||
float smallSunDot = max(dot(rd, smallSunDir), 0.0);
|
|
||||||
|
|
||||||
float angle = atan(rd.y, length(rd.xz))*2.0/PI;
|
|
||||||
|
|
||||||
vec3 skyCol = mix(mix(skyCol1, skyCol2, max(0.0, angle)), skyCol3, clamp(-angle*2.0, 0.0, 1.0));
|
|
||||||
|
|
||||||
vec3 sunCol = 0.5*sunCol1*pow(sunDot, 20.0) + 8.0*sunCol2*pow(sunDot, 2000.0);
|
|
||||||
vec3 smallSunCol = 0.5*smallSunCol1*pow(smallSunDot, 200.0) + 8.0*smallSunCol2*pow(smallSunDot, 20000.0);
|
|
||||||
|
|
||||||
vec3 dust = pow(sunCol2*mountainColor, vec3(1.75))*smoothstep(0.05, -0.1, rd.y)*0.5;
|
|
||||||
|
|
||||||
vec2 si = raySphere(ro, rd, planet);
|
|
||||||
|
|
||||||
vec3 planetSurface = ro + si.x*rd;
|
|
||||||
vec3 planetNormal = normalize(planetSurface - planet.xyz);
|
|
||||||
float planetDiff = max(dot(planetNormal, sunDir), 0.0);
|
|
||||||
float planetBorder = max(dot(planetNormal, -rd), 0.0);
|
|
||||||
float planetLat = (planetSurface.x+planetSurface.y)*0.0005;
|
|
||||||
vec3 planetCol = mix(1.3*vec3(0.9, 0.8, 0.7), 0.3*vec3(0.9, 0.8, 0.7), pow(psin(planetLat+1.0)*psin(sqrt(2.0)*planetLat+2.0)*psin(sqrt(3.5)*planetLat+3.0), 0.5));
|
|
||||||
|
|
||||||
vec3 final = vec3(0.0);
|
|
||||||
|
|
||||||
final += step(0.0, si.x)*pow(planetDiff, 0.75)*planetCol*smoothstep(-0.075, 0.0, rd.y)*smoothstep(0.0, 0.1, planetBorder);
|
|
||||||
|
|
||||||
final += skyCol + sunCol + smallSunCol + dust;
|
|
||||||
|
|
||||||
return final;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 getColor(vec3 ro, vec3 rd) {
|
|
||||||
int max_iter = 0;
|
|
||||||
vec3 skyCol = skyColor(ro, rd);
|
|
||||||
vec3 col = vec3(0);
|
|
||||||
|
|
||||||
float d = march(ro, rd, max_iter);
|
|
||||||
|
|
||||||
if (d < MAX_DISTANCE) {
|
|
||||||
vec3 sunDir = sunDirection();
|
|
||||||
vec3 osunDir = sunDir*vec3(-1.0, .0, -1.0);
|
|
||||||
vec3 p = ro + d*rd;
|
|
||||||
|
|
||||||
vec3 normal = normal(p.xz, d);
|
|
||||||
|
|
||||||
float amb = 0.2;
|
|
||||||
|
|
||||||
float dif1 = max(0.0, dot(sunDir, normal));
|
|
||||||
vec3 shd1 = sunCol2*mix(amb, 1.0, pow(dif1, 0.75));
|
|
||||||
|
|
||||||
float dif2 = max(0.0, dot(osunDir, normal));
|
|
||||||
vec3 shd2 = sunCol1*mix(amb, 1.0, pow(dif2, 0.75));
|
|
||||||
|
|
||||||
vec3 ref = reflect(rd, normal);
|
|
||||||
vec3 rcol = skyColor(p, ref);
|
|
||||||
|
|
||||||
col = mountainColor*amb*skyCol3;
|
|
||||||
col += mix(shd1, shd2, -0.5)*mountainColor;
|
|
||||||
float fre = max(dot(normal, -rd), 0.0);
|
|
||||||
fre = pow(1.0 - fre, 5.0);
|
|
||||||
col += rcol*fre*0.5;
|
|
||||||
col += (1.0*p.y);
|
|
||||||
col = tanh(col);
|
|
||||||
col = mix(col, skyCol, smoothstep(0.5*MAX_DISTANCE, 1.0*MAX_DISTANCE, d));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
col = skyCol;
|
|
||||||
}
|
|
||||||
|
|
||||||
// col += vec3(1.1, 0.0, 0.0)* smoothstep(0.25, 1.0,(float(max_iter)/float(MAX_ITER)));
|
|
||||||
return col;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 getSample1(vec2 p, float time) {
|
|
||||||
float off = 0.5*iTime;
|
|
||||||
|
|
||||||
vec3 ro = vec3(0.5, 1.0-0.25, -2.0 + off);
|
|
||||||
vec3 la = ro + vec3(0.0, -0.30, 2.0);
|
|
||||||
|
|
||||||
vec3 ww = normalize(la - ro);
|
|
||||||
vec3 uu = normalize(cross(vec3(0.0,1.0,0.0), ww));
|
|
||||||
vec3 vv = normalize(cross(ww, uu));
|
|
||||||
vec3 rd = normalize(p.x*uu + p.y*vv + 2.0*ww);
|
|
||||||
|
|
||||||
vec3 col = getColor(ro, rd) ;
|
|
||||||
|
|
||||||
return col;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 getSample2(vec2 p, float time) {
|
|
||||||
p.y-=time*0.25;
|
|
||||||
float h = height(p, 0.0);
|
|
||||||
vec3 n = normal(p, 0.0);
|
|
||||||
|
|
||||||
vec3 lp = vec3(10.0, -1.2, 0.0);
|
|
||||||
|
|
||||||
vec3 ld = normalize(vec3(p.x, h, p.y)- lp);
|
|
||||||
|
|
||||||
float d = max(dot(ld, n), 0.0);
|
|
||||||
|
|
||||||
vec3 col = vec3(0.0);
|
|
||||||
|
|
||||||
col = vec3(1.0)*(h+0.1);
|
|
||||||
col += vec3(1.5)*pow(d, 0.75);
|
|
||||||
|
|
||||||
return col;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mainImage(out vec4 fragColor, vec2 fragCoord) {
|
|
||||||
vec2 q = fragCoord.xy/iResolution.xy;
|
|
||||||
vec2 p = -1.0 + 2.0*q;
|
|
||||||
p.x *= iResolution.x/iResolution.y;
|
|
||||||
|
|
||||||
vec3 col = getSample1(p, iTime);
|
|
||||||
|
|
||||||
fragColor = vec4(col, 1.0);
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -33,7 +34,7 @@ static void create_window (GApplication *app, const char *contents);
|
|||||||
static void
|
static void
|
||||||
show_action_dialog (GSimpleAction *action)
|
show_action_dialog (GSimpleAction *action)
|
||||||
{
|
{
|
||||||
const char *name;
|
const gchar *name;
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
|
|
||||||
name = g_action_get_name (G_ACTION (action));
|
name = g_action_get_name (G_ACTION (action));
|
||||||
@@ -57,9 +58,9 @@ show_action_infobar (GSimpleAction *action,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
DemoApplicationWindow *window = data;
|
DemoApplicationWindow *window = data;
|
||||||
char *text;
|
gchar *text;
|
||||||
const char *name;
|
const gchar *name;
|
||||||
const char *value;
|
const gchar *value;
|
||||||
|
|
||||||
name = g_action_get_name (G_ACTION (action));
|
name = g_action_get_name (G_ACTION (action));
|
||||||
value = g_variant_get_string (parameter, NULL);
|
value = g_variant_get_string (parameter, NULL);
|
||||||
@@ -91,7 +92,7 @@ activate_new (GSimpleAction *action,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
open_response_cb (GtkNativeDialog *dialog,
|
open_response_cb (GtkNativeDialog *dialog,
|
||||||
int response_id,
|
gint response_id,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkFileChooserNative *native = user_data;
|
GtkFileChooserNative *native = user_data;
|
||||||
@@ -184,7 +185,7 @@ activate_about (GSimpleAction *action,
|
|||||||
{
|
{
|
||||||
GtkWidget *window = user_data;
|
GtkWidget *window = user_data;
|
||||||
|
|
||||||
const char *authors[] = {
|
const gchar *authors[] = {
|
||||||
"Peter Mattis",
|
"Peter Mattis",
|
||||||
"Spencer Kimball",
|
"Spencer Kimball",
|
||||||
"Josh MacDonald",
|
"Josh MacDonald",
|
||||||
@@ -192,7 +193,7 @@ activate_about (GSimpleAction *action,
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *documentors[] = {
|
const gchar *documentors[] = {
|
||||||
"Owen Taylor",
|
"Owen Taylor",
|
||||||
"Tony Gale",
|
"Tony Gale",
|
||||||
"Matthias Clasen <mclasen@redhat.com>",
|
"Matthias Clasen <mclasen@redhat.com>",
|
||||||
@@ -243,9 +244,9 @@ static void
|
|||||||
update_statusbar (GtkTextBuffer *buffer,
|
update_statusbar (GtkTextBuffer *buffer,
|
||||||
DemoApplicationWindow *window)
|
DemoApplicationWindow *window)
|
||||||
{
|
{
|
||||||
char *msg;
|
gchar *msg;
|
||||||
int row, col;
|
gint row, col;
|
||||||
int count;
|
gint count;
|
||||||
GtkTextIter iter;
|
GtkTextIter iter;
|
||||||
|
|
||||||
/* clear any previous message, underflow is allowed */
|
/* clear any previous message, underflow is allowed */
|
||||||
@@ -465,18 +466,18 @@ demo_application_window_size_allocate (GtkWidget *widget,
|
|||||||
baseline);
|
baseline);
|
||||||
|
|
||||||
if (!window->maximized && !window->fullscreen)
|
if (!window->maximized && !window->fullscreen)
|
||||||
gtk_window_get_default_size (GTK_WINDOW (window), &window->width, &window->height);
|
gtk_window_get_size (GTK_WINDOW (window), &window->width, &window->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
surface_state_changed (GtkWidget *widget)
|
surface_state_changed (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
DemoApplicationWindow *window = (DemoApplicationWindow *)widget;
|
DemoApplicationWindow *window = (DemoApplicationWindow *)widget;
|
||||||
GdkToplevelState new_state;
|
GdkSurfaceState new_state;
|
||||||
|
|
||||||
new_state = gdk_toplevel_get_state (GDK_TOPLEVEL (gtk_native_get_surface (GTK_NATIVE (widget))));
|
new_state = gdk_toplevel_get_state (GDK_TOPLEVEL (gtk_native_get_surface (GTK_NATIVE (widget))));
|
||||||
window->maximized = (new_state & GDK_TOPLEVEL_STATE_MAXIMIZED) != 0;
|
window->maximized = (new_state & GDK_SURFACE_STATE_MAXIMIZED) != 0;
|
||||||
window->fullscreen = (new_state & GDK_TOPLEVEL_STATE_FULLSCREEN) != 0;
|
window->fullscreen = (new_state & GDK_SURFACE_STATE_FULLSCREEN) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -54,8 +54,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -70,8 +70,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -79,8 +79,8 @@
|
|||||||
<object class="GtkStatusbar" id="status">
|
<object class="GtkStatusbar" id="status">
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ static GtkWidget *placeholder;
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
on_name_appeared (GDBusConnection *connection,
|
on_name_appeared (GDBusConnection *connection,
|
||||||
const char *name,
|
const gchar *name,
|
||||||
const char *name_owner,
|
const gchar *name_owner,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
name_seen = TRUE;
|
name_seen = TRUE;
|
||||||
@@ -25,7 +25,7 @@ on_name_appeared (GDBusConnection *connection,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
on_name_vanished (GDBusConnection *connection,
|
on_name_vanished (GDBusConnection *connection,
|
||||||
const char *name,
|
const gchar *name,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
if (!name_seen)
|
if (!name_seen)
|
||||||
@@ -55,7 +55,7 @@ do_application_demo (GtkWidget *toplevel)
|
|||||||
|
|
||||||
if (placeholder == NULL)
|
if (placeholder == NULL)
|
||||||
{
|
{
|
||||||
const char *command;
|
const gchar *command;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
if (g_file_test ("./gtk4-demo-application" APP_EXTENSION, G_FILE_TEST_IS_EXECUTABLE))
|
if (g_file_test ("./gtk4-demo-application" APP_EXTENSION, G_FILE_TEST_IS_EXECUTABLE))
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Assistant
|
/* Assistant
|
||||||
*
|
*
|
||||||
* Demonstrates a sample multi-step assistant with GtkAssistant. Assistants
|
* Demonstrates a sample multi-step assistant. Assistants are used to divide
|
||||||
* are used to divide an operation into several simpler sequential steps,
|
* an operation into several simpler sequential steps, and to guide the user
|
||||||
* and to guide the user through these steps.
|
* through these steps.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -12,7 +12,7 @@ static GtkWidget *progress_bar = NULL;
|
|||||||
static gboolean
|
static gboolean
|
||||||
apply_changes_gradually (gpointer data)
|
apply_changes_gradually (gpointer data)
|
||||||
{
|
{
|
||||||
double fraction;
|
gdouble fraction;
|
||||||
|
|
||||||
/* Work, work, work... */
|
/* Work, work, work... */
|
||||||
fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));
|
fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));
|
||||||
@@ -47,8 +47,8 @@ on_assistant_close_cancel (GtkWidget *widget, gpointer data)
|
|||||||
static void
|
static void
|
||||||
on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer data)
|
on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer data)
|
||||||
{
|
{
|
||||||
int current_page, n_pages;
|
gint current_page, n_pages;
|
||||||
char *title;
|
gchar *title;
|
||||||
|
|
||||||
current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (widget));
|
current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (widget));
|
||||||
n_pages = gtk_assistant_get_n_pages (GTK_ASSISTANT (widget));
|
n_pages = gtk_assistant_get_n_pages (GTK_ASSISTANT (widget));
|
||||||
@@ -70,8 +70,8 @@ on_entry_changed (GtkWidget *widget, gpointer data)
|
|||||||
{
|
{
|
||||||
GtkAssistant *assistant = GTK_ASSISTANT (data);
|
GtkAssistant *assistant = GTK_ASSISTANT (data);
|
||||||
GtkWidget *current_page;
|
GtkWidget *current_page;
|
||||||
int page_number;
|
gint page_number;
|
||||||
const char *text;
|
const gchar *text;
|
||||||
|
|
||||||
page_number = gtk_assistant_get_current_page (assistant);
|
page_number = gtk_assistant_get_current_page (assistant);
|
||||||
current_page = gtk_assistant_get_nth_page (assistant, page_number);
|
current_page = gtk_assistant_get_nth_page (assistant, page_number);
|
||||||
@@ -98,9 +98,6 @@ create_page1 (GtkWidget *assistant)
|
|||||||
gtk_box_append (GTK_BOX (box), label);
|
gtk_box_append (GTK_BOX (box), label);
|
||||||
|
|
||||||
entry = gtk_entry_new ();
|
entry = gtk_entry_new ();
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (entry),
|
|
||||||
GTK_ACCESSIBLE_RELATION_LABELLED_BY, label, NULL,
|
|
||||||
-1);
|
|
||||||
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
|
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
|
||||||
gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
|
gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
gtk_box_append (GTK_BOX (box), entry);
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
uniform float u_time;
|
|
||||||
|
|
||||||
void
|
|
||||||
mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
|
|
||||||
{
|
|
||||||
vec2 pos = (fragCoord.xy * 2.0 - resolution.xy)/ min (resolution.x, resolution.y) ;
|
|
||||||
|
|
||||||
float t0 = sin ((u_time + 0.00)*1.0);
|
|
||||||
float t1 = sin ((u_time + 0.30)*0.4);
|
|
||||||
float t2 = cos ((u_time + 0.23)*0.9);
|
|
||||||
float t3 = cos ((u_time + 0.41)*0.6);
|
|
||||||
float t4 = cos ((u_time + 0.11)*0.3);
|
|
||||||
|
|
||||||
vec2 p0 = vec2 (t1, t0) ;
|
|
||||||
vec2 p1 = vec2 (t2, t3) ;
|
|
||||||
vec2 p2 = vec2 (t4, t3) ;
|
|
||||||
|
|
||||||
float r = 1.0/distance (pos, p0);
|
|
||||||
float g = 1.0/distance (pos, p1);
|
|
||||||
float b = 1.0/distance (pos, p2);
|
|
||||||
float sum = r + g + b;
|
|
||||||
|
|
||||||
float alpha = 1.0 - pow (1.0/(sum), 40.0)*pow (10.0, 40.0*0.7);
|
|
||||||
|
|
||||||
fragColor = vec4 (r*0.5, g*0.5, b*0.5, 1.0) * alpha;
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB |
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.20"/>
|
||||||
<object class="GtkWindow" id="window">
|
<object class="GtkWindow" id="window">
|
||||||
<property name="resizable">0</property>
|
<property name="resizable">0</property>
|
||||||
<property name="title">CSS Blend Modes</property>
|
<property name="title">CSS Blend Modes</property>
|
||||||
@@ -7,10 +8,6 @@
|
|||||||
<property name="default-height">300</property>
|
<property name="default-height">300</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkGrid">
|
<object class="GtkGrid">
|
||||||
<property name="margin-start">12</property>
|
|
||||||
<property name="margin-end">12</property>
|
|
||||||
<property name="margin-top">12</property>
|
|
||||||
<property name="margin-bottom">12</property>
|
|
||||||
<property name="row-spacing">12</property>
|
<property name="row-spacing">12</property>
|
||||||
<property name="column-spacing">12</property>
|
<property name="column-spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
@@ -21,8 +18,8 @@
|
|||||||
<class name="dim-label"/>
|
<class name="dim-label"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -32,8 +29,8 @@
|
|||||||
<property name="has-frame">1</property>
|
<property name="has-frame">1</property>
|
||||||
<property name="min-content-width">150</property>
|
<property name="min-content-width">150</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -43,8 +40,8 @@
|
|||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="stack">stack</property>
|
<property name="stack">stack</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -70,8 +67,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label" translatable="yes">Duck</property>
|
<property name="label" translatable="yes">Duck</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -79,8 +76,8 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label" translatable="yes">Background</property>
|
<property name="label" translatable="yes">Background</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -90,8 +87,8 @@
|
|||||||
<class name="duck"/>
|
<class name="duck"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -101,8 +98,8 @@
|
|||||||
<class name="gradient"/>
|
<class name="gradient"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -111,8 +108,8 @@
|
|||||||
<property name="label" translatable="yes">
|
<property name="label" translatable="yes">
|
||||||
Blended picture</property>
|
Blended picture</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -124,8 +121,8 @@ Blended picture</property>
|
|||||||
<class name="blend0"/>
|
<class name="blend0"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -149,8 +146,8 @@ Blended picture</property>
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label" translatable="yes">Red</property>
|
<property name="label" translatable="yes">Red</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -158,8 +155,8 @@ Blended picture</property>
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label" translatable="yes">Blue</property>
|
<property name="label" translatable="yes">Blue</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -169,8 +166,8 @@ Blended picture</property>
|
|||||||
<class name="red"/>
|
<class name="red"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -180,8 +177,8 @@ Blended picture</property>
|
|||||||
<class name="blue"/>
|
<class name="blue"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -190,8 +187,8 @@ Blended picture</property>
|
|||||||
<property name="label" translatable="yes">
|
<property name="label" translatable="yes">
|
||||||
Blended picture</property>
|
Blended picture</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -203,8 +200,8 @@ Blended picture</property>
|
|||||||
<class name="blend1"/>
|
<class name="blend1"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
<property name="column-span">2</property>
|
<property name="column-span">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -231,8 +228,8 @@ Blended picture</property>
|
|||||||
<class name="cyan"/>
|
<class name="cyan"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -242,8 +239,8 @@ Blended picture</property>
|
|||||||
<class name="magenta"/>
|
<class name="magenta"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -253,8 +250,8 @@ Blended picture</property>
|
|||||||
<class name="yellow"/>
|
<class name="yellow"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -265,8 +262,8 @@ Blended picture</property>
|
|||||||
<class name="blend2"/>
|
<class name="blend2"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -278,8 +275,8 @@ Blended picture</property>
|
|||||||
<class name="dim-label"/>
|
<class name="dim-label"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -291,8 +288,8 @@ Blended picture</property>
|
|||||||
<class name="dim-label"/>
|
<class name="dim-label"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -304,8 +301,8 @@ Blended picture</property>
|
|||||||
<class name="dim-label"/>
|
<class name="dim-label"/>
|
||||||
</style>
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -317,8 +314,8 @@ Blended picture</property>
|
|||||||
<attribute name="weight" value="bold"></attribute>
|
<attribute name="weight" value="bold"></attribute>
|
||||||
</attributes>
|
</attributes>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -327,8 +324,8 @@ Blended picture</property>
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|||||||
@@ -132,10 +132,10 @@ blur_overlay_child_update_style_classes (BlurOverlay *overlay,
|
|||||||
gboolean is_left, is_right, is_top, is_bottom;
|
gboolean is_left, is_right, is_top, is_bottom;
|
||||||
gboolean has_left, has_right, has_top, has_bottom;
|
gboolean has_left, has_right, has_top, has_bottom;
|
||||||
|
|
||||||
has_left = gtk_widget_has_css_class (child, "left");
|
has_left = gtk_widget_has_css_class (child, GTK_STYLE_CLASS_LEFT);
|
||||||
has_right = gtk_widget_has_css_class (child, "right");
|
has_right = gtk_widget_has_css_class (child, GTK_STYLE_CLASS_RIGHT);
|
||||||
has_top = gtk_widget_has_css_class (child, "top");
|
has_top = gtk_widget_has_css_class (child, GTK_STYLE_CLASS_TOP);
|
||||||
has_bottom = gtk_widget_has_css_class (child, "bottom");
|
has_bottom = gtk_widget_has_css_class (child, GTK_STYLE_CLASS_BOTTOM);
|
||||||
|
|
||||||
is_left = is_right = is_top = is_bottom = FALSE;
|
is_left = is_right = is_top = is_bottom = FALSE;
|
||||||
|
|
||||||
@@ -158,24 +158,24 @@ blur_overlay_child_update_style_classes (BlurOverlay *overlay,
|
|||||||
is_bottom = (child_allocation->y + child_allocation->height == height);
|
is_bottom = (child_allocation->y + child_allocation->height == height);
|
||||||
|
|
||||||
if (has_left && !is_left)
|
if (has_left && !is_left)
|
||||||
gtk_widget_remove_css_class (child, "left");
|
gtk_widget_remove_css_class (child, GTK_STYLE_CLASS_LEFT);
|
||||||
else if (!has_left && is_left)
|
else if (!has_left && is_left)
|
||||||
gtk_widget_add_css_class (child, "left");
|
gtk_widget_add_css_class (child, GTK_STYLE_CLASS_LEFT);
|
||||||
|
|
||||||
if (has_right && !is_right)
|
if (has_right && !is_right)
|
||||||
gtk_widget_remove_css_class (child, "right");
|
gtk_widget_remove_css_class (child, GTK_STYLE_CLASS_RIGHT);
|
||||||
else if (!has_right && is_right)
|
else if (!has_right && is_right)
|
||||||
gtk_widget_add_css_class (child, "right");
|
gtk_widget_add_css_class (child, GTK_STYLE_CLASS_RIGHT);
|
||||||
|
|
||||||
if (has_top && !is_top)
|
if (has_top && !is_top)
|
||||||
gtk_widget_remove_css_class (child, "top");
|
gtk_widget_remove_css_class (child, GTK_STYLE_CLASS_TOP);
|
||||||
else if (!has_top && is_top)
|
else if (!has_top && is_top)
|
||||||
gtk_widget_add_css_class (child, "top");
|
gtk_widget_add_css_class (child, GTK_STYLE_CLASS_TOP);
|
||||||
|
|
||||||
if (has_bottom && !is_bottom)
|
if (has_bottom && !is_bottom)
|
||||||
gtk_widget_remove_css_class (child, "bottom");
|
gtk_widget_remove_css_class (child, GTK_STYLE_CLASS_BOTTOM);
|
||||||
else if (!has_bottom && is_bottom)
|
else if (!has_bottom && is_bottom)
|
||||||
gtk_widget_add_css_class (child, "bottom");
|
gtk_widget_add_css_class (child, GTK_STYLE_CLASS_BOTTOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
/* Builder
|
/* Builder
|
||||||
* #Keywords: GMenu, GtkPopoverMenuBar, GtkBuilder, GtkStatusBar, GtkShortcutController, toolbar
|
|
||||||
*
|
*
|
||||||
* Demonstrates a traditional interface, loaded from a XML description,
|
* Demonstrates an interface loaded from a XML description.
|
||||||
* and shows how to connect actions to the menu items and toolbar buttons.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -23,38 +21,15 @@ about_activate (GSimpleAction *action,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *window = user_data;
|
GtkWidget *window = user_data;
|
||||||
|
GtkBuilder *builder;
|
||||||
GtkWidget *about_dlg;
|
GtkWidget *about_dlg;
|
||||||
|
|
||||||
about_dlg = GTK_WIDGET (g_object_get_data (G_OBJECT (window), "about"));
|
builder = g_object_get_data (G_OBJECT (window), "builder");
|
||||||
gtk_window_present (GTK_WINDOW (about_dlg));
|
about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
|
||||||
}
|
gtk_window_set_transient_for (GTK_WINDOW (about_dlg), GTK_WINDOW (window));
|
||||||
|
gtk_window_set_hide_on_close (GTK_WINDOW (about_dlg), TRUE);
|
||||||
static void
|
g_signal_connect (about_dlg, "response", G_CALLBACK (gtk_widget_hide), NULL);
|
||||||
remove_timeout (gpointer data)
|
gtk_widget_show (about_dlg);
|
||||||
{
|
|
||||||
guint id = GPOINTER_TO_UINT (data);
|
|
||||||
|
|
||||||
g_source_remove (id);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
pop_status (gpointer data)
|
|
||||||
{
|
|
||||||
gtk_statusbar_pop (GTK_STATUSBAR (data), 0);
|
|
||||||
g_object_set_data (G_OBJECT (data), "timeout", NULL);
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
status_message (GtkStatusbar *status,
|
|
||||||
const char *text)
|
|
||||||
{
|
|
||||||
guint id;
|
|
||||||
|
|
||||||
gtk_statusbar_push (GTK_STATUSBAR (status), 0, text);
|
|
||||||
id = g_timeout_add (5000, pop_status, status);
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (status), "timeout", GUINT_TO_POINTER (id), remove_timeout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -62,10 +37,7 @@ help_activate (GSimpleAction *action,
|
|||||||
GVariant *parameter,
|
GVariant *parameter,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *status;
|
g_print ("Help not available\n");
|
||||||
|
|
||||||
status = GTK_WIDGET (g_object_get_data (G_OBJECT (user_data), "status"));
|
|
||||||
status_message (GTK_STATUSBAR (status), "Help not available");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -73,13 +45,7 @@ not_implemented (GSimpleAction *action,
|
|||||||
GVariant *parameter,
|
GVariant *parameter,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *status;
|
g_print ("Action “%s” not implemented\n", g_action_get_name (G_ACTION (action)));
|
||||||
char *text;
|
|
||||||
|
|
||||||
text = g_strdup_printf ("Action “%s” not implemented", g_action_get_name (G_ACTION (action)));
|
|
||||||
status = GTK_WIDGET (g_object_get_data (G_OBJECT (user_data), "status"));
|
|
||||||
status_message (GTK_STATUSBAR (status), text);
|
|
||||||
g_free (text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GActionEntry win_entries[] = {
|
static GActionEntry win_entries[] = {
|
||||||
@@ -104,9 +70,6 @@ do_builder (GtkWidget *do_widget)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
GtkWidget *about;
|
|
||||||
GtkWidget *status;
|
|
||||||
GtkEventController *controller;
|
|
||||||
|
|
||||||
builder = gtk_builder_new_from_resource ("/builder/demo.ui");
|
builder = gtk_builder_new_from_resource ("/builder/demo.ui");
|
||||||
|
|
||||||
@@ -120,50 +83,6 @@ do_builder (GtkWidget *do_widget)
|
|||||||
window);
|
window);
|
||||||
gtk_widget_insert_action_group (window, "win", actions);
|
gtk_widget_insert_action_group (window, "win", actions);
|
||||||
|
|
||||||
controller = gtk_shortcut_controller_new ();
|
|
||||||
gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
GTK_SHORTCUT_SCOPE_GLOBAL);
|
|
||||||
gtk_widget_add_controller (window, controller);
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_n, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.new")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_o, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.open")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_s, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.save")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_s, GDK_CONTROL_MASK|GDK_SHIFT_MASK),
|
|
||||||
gtk_named_action_new ("win.save-as")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_q, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.quit")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_c, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.copy")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_x, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.cut")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_v, GDK_CONTROL_MASK),
|
|
||||||
gtk_named_action_new ("win.paste")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_F1, 0),
|
|
||||||
gtk_named_action_new ("win.help")));
|
|
||||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller),
|
|
||||||
gtk_shortcut_new (gtk_keyval_trigger_new (GDK_KEY_F7, 0),
|
|
||||||
gtk_named_action_new ("win.about")));
|
|
||||||
|
|
||||||
about = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
|
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (window));
|
|
||||||
gtk_window_set_hide_on_close (GTK_WINDOW (about), TRUE);
|
|
||||||
g_object_set_data_full (G_OBJECT (window), "about",
|
|
||||||
about, (GDestroyNotify)gtk_window_destroy);
|
|
||||||
|
|
||||||
status = GTK_WIDGET (gtk_builder_get_object (builder, "statusbar1"));
|
|
||||||
g_object_set_data (G_OBJECT (window), "status", status);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
g_object_unref (builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,224 +0,0 @@
|
|||||||
// Originally from: https://www.shadertoy.com/view/3ljyDD
|
|
||||||
// License CC0: Hexagonal tiling + cog wheels
|
|
||||||
// Nothing fancy, just hexagonal tiling + cog wheels
|
|
||||||
|
|
||||||
#define PI 3.141592654
|
|
||||||
#define TAU (2.0*PI)
|
|
||||||
#define MROT(a) mat2(cos(a), sin(a), -sin(a), cos(a))
|
|
||||||
|
|
||||||
float hash(in vec2 co) {
|
|
||||||
return fract(sin(dot(co.xy ,vec2(12.9898,58.233))) * 13758.5453);
|
|
||||||
}
|
|
||||||
|
|
||||||
float pcos(float a) {
|
|
||||||
return 0.5 + 0.5*cos(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rot(inout vec2 p, float a) {
|
|
||||||
float c = cos(a);
|
|
||||||
float s = sin(a);
|
|
||||||
p = vec2(c*p.x + s*p.y, -s*p.x + c*p.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
float modPolar(inout vec2 p, float repetitions) {
|
|
||||||
float angle = 2.0*PI/repetitions;
|
|
||||||
float a = atan(p.y, p.x) + angle/2.;
|
|
||||||
float r = length(p);
|
|
||||||
float c = floor(a/angle);
|
|
||||||
a = mod(a,angle) - angle/2.;
|
|
||||||
p = vec2(cos(a), sin(a))*r;
|
|
||||||
// For an odd number of repetitions, fix cell index of the cell in -x direction
|
|
||||||
// (cell index would be e.g. -5 and 5 in the two halves of the cell):
|
|
||||||
if (abs(c) >= (repetitions/2.0)) c = abs(c);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
float pmin(float a, float b, float k) {
|
|
||||||
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
|
|
||||||
return mix( b, a, h ) - k*h*(1.0-h);
|
|
||||||
}
|
|
||||||
|
|
||||||
const vec2 sz = vec2(1.0, sqrt(3.0));
|
|
||||||
const vec2 hsz = 0.5*sz;
|
|
||||||
const float smallCount = 16.0;
|
|
||||||
|
|
||||||
vec2 hextile(inout vec2 p) {
|
|
||||||
// See Art of Code: Hexagonal Tiling Explained!
|
|
||||||
// https://www.youtube.com/watch?v=VmrIDyYiJBA
|
|
||||||
|
|
||||||
vec2 p1 = mod(p, sz)-hsz;
|
|
||||||
vec2 p2 = mod(p - hsz*1.0, sz)-hsz;
|
|
||||||
vec2 p3 = mix(p2, p1, vec2(length(p1) < length(p2)));
|
|
||||||
vec2 n = p3 - p;
|
|
||||||
p = p3;
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
float circle(vec2 p, float r) {
|
|
||||||
return length(p) - r;
|
|
||||||
}
|
|
||||||
|
|
||||||
float box(vec2 p, vec2 b) {
|
|
||||||
vec2 d = abs(p)-b;
|
|
||||||
return length(max(d,0.0)) + min(max(d.x,d.y),0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
float unevenCapsule(vec2 p, float r1, float r2, float h) {
|
|
||||||
p.x = abs(p.x);
|
|
||||||
float b = (r1-r2)/h;
|
|
||||||
float a = sqrt(1.0-b*b);
|
|
||||||
float k = dot(p,vec2(-b,a));
|
|
||||||
if( k < 0.0 ) return length(p) - r1;
|
|
||||||
if( k > a*h ) return length(p-vec2(0.0,h)) - r2;
|
|
||||||
return dot(p, vec2(a,b) ) - r1;
|
|
||||||
}
|
|
||||||
|
|
||||||
float cogwheel(vec2 p, float innerRadius, float outerRadius, float cogs, float holes) {
|
|
||||||
float cogWidth = 0.25*innerRadius*TAU/cogs;
|
|
||||||
|
|
||||||
float d0 = circle(p, innerRadius);
|
|
||||||
|
|
||||||
vec2 icp = p;
|
|
||||||
modPolar(icp, holes);
|
|
||||||
icp -= vec2(innerRadius*0.55, 0.0);
|
|
||||||
float d1 = circle(icp, innerRadius*0.25);
|
|
||||||
|
|
||||||
vec2 cp = p;
|
|
||||||
modPolar(cp, cogs);
|
|
||||||
cp -= vec2(innerRadius, 0.0);
|
|
||||||
float d2 = unevenCapsule(cp.yx, cogWidth, cogWidth*0.75, (outerRadius-innerRadius));
|
|
||||||
|
|
||||||
float d3 = circle(p, innerRadius*0.20);
|
|
||||||
|
|
||||||
float d = 1E6;
|
|
||||||
d = min(d, d0);
|
|
||||||
d = pmin(d, d2, 0.5*cogWidth);
|
|
||||||
d = min(d, d2);
|
|
||||||
d = max(d, -d1);
|
|
||||||
d = max(d, -d3);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
float ccell1(vec2 p, float r) {
|
|
||||||
float d = 1E6;
|
|
||||||
const float bigCount = 60.0;
|
|
||||||
|
|
||||||
vec2 cp0 = p;
|
|
||||||
rot(cp0, -iTime*TAU/bigCount);
|
|
||||||
float d0 = cogwheel(cp0, 0.36, 0.38, bigCount, 5.0);
|
|
||||||
|
|
||||||
vec2 cp1 = p;
|
|
||||||
float nm = modPolar(cp1, 6.0);
|
|
||||||
|
|
||||||
cp1 -= vec2(0.5, 0.0);
|
|
||||||
rot(cp1, 0.2+TAU*nm/2.0 + iTime*TAU/smallCount);
|
|
||||||
float d1 = cogwheel(cp1, 0.11, 0.125, smallCount, 5.0);
|
|
||||||
|
|
||||||
d = min(d, d0);
|
|
||||||
d = min(d, d1);
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
float ccell2(vec2 p, float r) {
|
|
||||||
float d = 1E6;
|
|
||||||
vec2 cp0 = p;
|
|
||||||
float nm = modPolar(cp0, 6.0);
|
|
||||||
vec2 cp1 = cp0;
|
|
||||||
const float off = 0.275;
|
|
||||||
const float count = smallCount + 2.0;
|
|
||||||
cp0 -= vec2(off, 0.0);
|
|
||||||
rot(cp0, 0.+TAU*nm/2.0 - iTime*TAU/count);
|
|
||||||
float d0 = cogwheel(cp0, 0.09, 0.105, count, 5.0);
|
|
||||||
|
|
||||||
|
|
||||||
cp1 -= vec2(0.5, 0.0);
|
|
||||||
rot(cp1, 0.2+TAU*nm/2.0 + iTime*TAU/smallCount);
|
|
||||||
float d1 = cogwheel(cp1, 0.11, 0.125, smallCount, 5.0);
|
|
||||||
|
|
||||||
float l = length(p);
|
|
||||||
float d2 = l - (off+0.055);
|
|
||||||
float d3 = d2 + 0.020;;
|
|
||||||
|
|
||||||
vec2 tp0 = p;
|
|
||||||
modPolar(tp0, 60.0);
|
|
||||||
tp0.x -= off;
|
|
||||||
float d4 = box(tp0, vec2(0.0125, 0.005));
|
|
||||||
|
|
||||||
float ctime = -(iTime*0.05 + r)*TAU;
|
|
||||||
|
|
||||||
vec2 tp1 = p;
|
|
||||||
rot(tp1, ctime*12.0);
|
|
||||||
tp1.x -= 0.13;
|
|
||||||
float d5 = box(tp1, vec2(0.125, 0.005));
|
|
||||||
|
|
||||||
vec2 tp2 = p;
|
|
||||||
rot(tp2, ctime);
|
|
||||||
tp2.x -= 0.13*0.5;
|
|
||||||
float d6 = box(tp2, vec2(0.125*0.5, 0.0075));
|
|
||||||
|
|
||||||
float d7 = l - 0.025;
|
|
||||||
float d8 = l - 0.0125;
|
|
||||||
|
|
||||||
d = min(d, d0);
|
|
||||||
d = min(d, d1);
|
|
||||||
d = min(d, d2);
|
|
||||||
d = max(d, -d3);
|
|
||||||
d = min(d, d4);
|
|
||||||
d = min(d, d5);
|
|
||||||
d = min(d, d6);
|
|
||||||
d = min(d, d7);
|
|
||||||
d = max(d, -d8);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
float df(vec2 p, float scale, inout vec2 nn) {
|
|
||||||
p /= scale;
|
|
||||||
nn = hextile(p);
|
|
||||||
nn = floor(nn + 0.5);
|
|
||||||
float r = hash(nn);
|
|
||||||
|
|
||||||
float d;;
|
|
||||||
|
|
||||||
if (r < 0.5) {
|
|
||||||
d = ccell1(p, r);
|
|
||||||
} else {
|
|
||||||
d = ccell2(p, r);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d*scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 postProcess(vec3 col, vec2 q) {
|
|
||||||
//col = saturate(col);
|
|
||||||
col=pow(clamp(col,0.0,1.0),vec3(0.75));
|
|
||||||
col=col*0.6+0.4*col*col*(3.0-2.0*col); // contrast
|
|
||||||
col=mix(col, vec3(dot(col, vec3(0.33))), -0.4); // satuation
|
|
||||||
col*=0.5+0.5*pow(19.0*q.x*q.y*(1.0-q.x)*(1.0-q.y),0.7); // vigneting
|
|
||||||
return col;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mainImage(out vec4 fragColor, vec2 fragCoord) {
|
|
||||||
vec2 q = fragCoord/iResolution.xy;
|
|
||||||
vec2 p = -1.0 + 2.0*q;
|
|
||||||
p.x *= iResolution.x/iResolution.y;
|
|
||||||
float tm = iTime*0.1;
|
|
||||||
p += vec2(cos(tm), sin(tm*sqrt(0.5)));
|
|
||||||
float z = mix(0.5, 1.0, pcos(tm*sqrt(0.3)));
|
|
||||||
float aa = 4.0 / iResolution.y;
|
|
||||||
|
|
||||||
vec2 nn = vec2(0.0);
|
|
||||||
float d = df(p, z, nn);
|
|
||||||
|
|
||||||
vec3 col = vec3(160.0)/vec3(255.0);
|
|
||||||
vec3 baseCol = vec3(0.3);
|
|
||||||
vec4 logoCol = vec4(baseCol, 1.0)*smoothstep(-aa, 0.0, -d);
|
|
||||||
col = mix(col, logoCol.xyz, pow(logoCol.w, 8.0));
|
|
||||||
col += 0.4*pow(abs(sin(20.0*d)), 0.6);
|
|
||||||
|
|
||||||
col = postProcess(col, q);
|
|
||||||
|
|
||||||
fragColor = vec4(col, 1.0);
|
|
||||||
}
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
uniform float iTime;
|
|
||||||
|
|
||||||
// Originally from: https://www.shadertoy.com/view/3ljyDD
|
|
||||||
// License CC0: Hexagonal tiling + cog wheels
|
|
||||||
// Nothing fancy, just hexagonal tiling + cog wheels
|
|
||||||
|
|
||||||
#define PI 3.141592654
|
|
||||||
#define TAU (2.0*PI)
|
|
||||||
#define MROT(a) mat2(cos(a), sin(a), -sin(a), cos(a))
|
|
||||||
|
|
||||||
float hash(in vec2 co) {
|
|
||||||
return fract(sin(dot(co.xy ,vec2(12.9898,58.233))) * 13758.5453);
|
|
||||||
}
|
|
||||||
|
|
||||||
float pcos(float a) {
|
|
||||||
return 0.5 + 0.5*cos(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rot(inout vec2 p, float a) {
|
|
||||||
float c = cos(a);
|
|
||||||
float s = sin(a);
|
|
||||||
p = vec2(c*p.x + s*p.y, -s*p.x + c*p.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
float modPolar(inout vec2 p, float repetitions) {
|
|
||||||
float angle = 2.0*PI/repetitions;
|
|
||||||
float a = atan(p.y, p.x) + angle/2.;
|
|
||||||
float r = length(p);
|
|
||||||
float c = floor(a/angle);
|
|
||||||
a = mod(a,angle) - angle/2.;
|
|
||||||
p = vec2(cos(a), sin(a))*r;
|
|
||||||
// For an odd number of repetitions, fix cell index of the cell in -x direction
|
|
||||||
// (cell index would be e.g. -5 and 5 in the two halves of the cell):
|
|
||||||
if (abs(c) >= (repetitions/2.0)) c = abs(c);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
float pmin(float a, float b, float k) {
|
|
||||||
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
|
|
||||||
return mix( b, a, h ) - k*h*(1.0-h);
|
|
||||||
}
|
|
||||||
|
|
||||||
const vec2 sz = vec2(1.0, sqrt(3.0));
|
|
||||||
const vec2 hsz = 0.5*sz;
|
|
||||||
const float smallCount = 16.0;
|
|
||||||
|
|
||||||
vec2 hextile(inout vec2 p) {
|
|
||||||
// See Art of Code: Hexagonal Tiling Explained!
|
|
||||||
// https://www.youtube.com/watch?v=VmrIDyYiJBA
|
|
||||||
|
|
||||||
vec2 p1 = mod(p, sz)-hsz;
|
|
||||||
vec2 p2 = mod(p - hsz*1.0, sz)-hsz;
|
|
||||||
vec2 p3 = mix(p2, p1, vec2(length(p1) < length(p2)));
|
|
||||||
vec2 n = p3 - p;
|
|
||||||
p = p3;
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
float circle(vec2 p, float r) {
|
|
||||||
return length(p) - r;
|
|
||||||
}
|
|
||||||
|
|
||||||
float box(vec2 p, vec2 b) {
|
|
||||||
vec2 d = abs(p)-b;
|
|
||||||
return length(max(d,0.0)) + min(max(d.x,d.y),0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
float unevenCapsule(vec2 p, float r1, float r2, float h) {
|
|
||||||
p.x = abs(p.x);
|
|
||||||
float b = (r1-r2)/h;
|
|
||||||
float a = sqrt(1.0-b*b);
|
|
||||||
float k = dot(p,vec2(-b,a));
|
|
||||||
if( k < 0.0 ) return length(p) - r1;
|
|
||||||
if( k > a*h ) return length(p-vec2(0.0,h)) - r2;
|
|
||||||
return dot(p, vec2(a,b) ) - r1;
|
|
||||||
}
|
|
||||||
|
|
||||||
float cogwheel(vec2 p, float innerRadius, float outerRadius, float cogs, float holes) {
|
|
||||||
float cogWidth = 0.25*innerRadius*TAU/cogs;
|
|
||||||
|
|
||||||
float d0 = circle(p, innerRadius);
|
|
||||||
|
|
||||||
vec2 icp = p;
|
|
||||||
modPolar(icp, holes);
|
|
||||||
icp -= vec2(innerRadius*0.55, 0.0);
|
|
||||||
float d1 = circle(icp, innerRadius*0.25);
|
|
||||||
|
|
||||||
vec2 cp = p;
|
|
||||||
modPolar(cp, cogs);
|
|
||||||
cp -= vec2(innerRadius, 0.0);
|
|
||||||
float d2 = unevenCapsule(cp.yx, cogWidth, cogWidth*0.75, (outerRadius-innerRadius));
|
|
||||||
|
|
||||||
float d3 = circle(p, innerRadius*0.20);
|
|
||||||
|
|
||||||
float d = 1E6;
|
|
||||||
d = min(d, d0);
|
|
||||||
d = pmin(d, d2, 0.5*cogWidth);
|
|
||||||
d = min(d, d2);
|
|
||||||
d = max(d, -d1);
|
|
||||||
d = max(d, -d3);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
float ccell1(vec2 p, float r) {
|
|
||||||
float d = 1E6;
|
|
||||||
const float bigCount = 60.0;
|
|
||||||
|
|
||||||
vec2 cp0 = p;
|
|
||||||
rot(cp0, -iTime*TAU/bigCount);
|
|
||||||
float d0 = cogwheel(cp0, 0.36, 0.38, bigCount, 5.0);
|
|
||||||
|
|
||||||
vec2 cp1 = p;
|
|
||||||
float nm = modPolar(cp1, 6.0);
|
|
||||||
|
|
||||||
cp1 -= vec2(0.5, 0.0);
|
|
||||||
rot(cp1, 0.2+TAU*nm/2.0 + iTime*TAU/smallCount);
|
|
||||||
float d1 = cogwheel(cp1, 0.11, 0.125, smallCount, 5.0);
|
|
||||||
|
|
||||||
d = min(d, d0);
|
|
||||||
d = min(d, d1);
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
float ccell2(vec2 p, float r) {
|
|
||||||
float d = 1E6;
|
|
||||||
vec2 cp0 = p;
|
|
||||||
float nm = modPolar(cp0, 6.0);
|
|
||||||
vec2 cp1 = cp0;
|
|
||||||
const float off = 0.275;
|
|
||||||
const float count = smallCount + 2.0;
|
|
||||||
cp0 -= vec2(off, 0.0);
|
|
||||||
rot(cp0, 0.+TAU*nm/2.0 - iTime*TAU/count);
|
|
||||||
float d0 = cogwheel(cp0, 0.09, 0.105, count, 5.0);
|
|
||||||
|
|
||||||
|
|
||||||
cp1 -= vec2(0.5, 0.0);
|
|
||||||
rot(cp1, 0.2+TAU*nm/2.0 + iTime*TAU/smallCount);
|
|
||||||
float d1 = cogwheel(cp1, 0.11, 0.125, smallCount, 5.0);
|
|
||||||
|
|
||||||
float l = length(p);
|
|
||||||
float d2 = l - (off+0.055);
|
|
||||||
float d3 = d2 + 0.020;;
|
|
||||||
|
|
||||||
vec2 tp0 = p;
|
|
||||||
modPolar(tp0, 60.0);
|
|
||||||
tp0.x -= off;
|
|
||||||
float d4 = box(tp0, vec2(0.0125, 0.005));
|
|
||||||
|
|
||||||
float ctime = -(iTime*0.05 + r)*TAU;
|
|
||||||
|
|
||||||
vec2 tp1 = p;
|
|
||||||
rot(tp1, ctime*12.0);
|
|
||||||
tp1.x -= 0.13;
|
|
||||||
float d5 = box(tp1, vec2(0.125, 0.005));
|
|
||||||
|
|
||||||
vec2 tp2 = p;
|
|
||||||
rot(tp2, ctime);
|
|
||||||
tp2.x -= 0.13*0.5;
|
|
||||||
float d6 = box(tp2, vec2(0.125*0.5, 0.0075));
|
|
||||||
|
|
||||||
float d7 = l - 0.025;
|
|
||||||
float d8 = l - 0.0125;
|
|
||||||
|
|
||||||
d = min(d, d0);
|
|
||||||
d = min(d, d1);
|
|
||||||
d = min(d, d2);
|
|
||||||
d = max(d, -d3);
|
|
||||||
d = min(d, d4);
|
|
||||||
d = min(d, d5);
|
|
||||||
d = min(d, d6);
|
|
||||||
d = min(d, d7);
|
|
||||||
d = max(d, -d8);
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
float df(vec2 p, float scale, inout vec2 nn) {
|
|
||||||
p /= scale;
|
|
||||||
nn = hextile(p);
|
|
||||||
nn = floor(nn + 0.5);
|
|
||||||
float r = hash(nn);
|
|
||||||
|
|
||||||
float d;;
|
|
||||||
|
|
||||||
if (r < 0.5) {
|
|
||||||
d = ccell1(p, r);
|
|
||||||
} else {
|
|
||||||
d = ccell2(p, r);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d*scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 postProcess(vec3 col, vec2 q) {
|
|
||||||
//col = saturate(col);
|
|
||||||
col=pow(clamp(col,0.0,1.0),vec3(0.75));
|
|
||||||
col=col*0.6+0.4*col*col*(3.0-2.0*col); // contrast
|
|
||||||
col=mix(col, vec3(dot(col, vec3(0.33))), -0.4); // satuation
|
|
||||||
col*=0.5+0.5*pow(19.0*q.x*q.y*(1.0-q.x)*(1.0-q.y),0.7); // vigneting
|
|
||||||
return col;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv) {
|
|
||||||
vec2 q = fragCoord/resolution.xy;
|
|
||||||
vec2 p = -1.0 + 2.0*q;
|
|
||||||
p.x *= resolution.x/resolution.y;
|
|
||||||
float tm = iTime*0.1;
|
|
||||||
p += vec2(cos(tm), sin(tm*sqrt(0.5)));
|
|
||||||
float z = mix(0.5, 1.0, pcos(tm*sqrt(0.3)));
|
|
||||||
float aa = 4.0 / resolution.y;
|
|
||||||
|
|
||||||
vec2 nn = vec2(0.0);
|
|
||||||
float d = df(p, z, nn);
|
|
||||||
|
|
||||||
vec3 col = vec3(160.0)/vec3(255.0);
|
|
||||||
vec3 baseCol = vec3(0.3);
|
|
||||||
vec4 logoCol = vec4(baseCol, 1.0)*smoothstep(-aa, 0.0, -d);
|
|
||||||
col = mix(col, logoCol.xyz, pow(logoCol.w, 8.0));
|
|
||||||
col += 0.4*pow(abs(sin(20.0*d)), 0.6);
|
|
||||||
|
|
||||||
col = postProcess(col, q);
|
|
||||||
|
|
||||||
fragColor = vec4(col, 1.0);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
/* Combo Boxes
|
/* Combo Boxes
|
||||||
* #Keywords: GtkCellRenderer
|
|
||||||
*
|
*
|
||||||
* The GtkComboBox widget allows to select one option out of a list.
|
* The GtkComboBox widget allows to select one option out of a list.
|
||||||
* The GtkComboBoxEntry additionally allows the user to enter a value
|
* The GtkComboBoxEntry additionally allows the user to enter a value
|
||||||
@@ -39,7 +38,7 @@ create_icon_store (void)
|
|||||||
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkListStore *store;
|
GtkListStore *store;
|
||||||
int i;
|
gint i;
|
||||||
|
|
||||||
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
|
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ set_sensitive (GtkCellLayout *cell_layout,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkTreePath *path;
|
GtkTreePath *path;
|
||||||
int *indices;
|
gint *indices;
|
||||||
gboolean sensitive;
|
gboolean sensitive;
|
||||||
|
|
||||||
path = gtk_tree_model_get_path (tree_model, iter);
|
path = gtk_tree_model_get_path (tree_model, iter);
|
||||||
@@ -176,7 +175,7 @@ create_capital_store (void)
|
|||||||
|
|
||||||
GtkTreeIter iter, iter2;
|
GtkTreeIter iter, iter2;
|
||||||
GtkTreeStore *store;
|
GtkTreeStore *store;
|
||||||
int i;
|
gint i;
|
||||||
|
|
||||||
store = gtk_tree_store_new (1, G_TYPE_STRING);
|
store = gtk_tree_store_new (1, G_TYPE_STRING);
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,8 @@
|
|||||||
/* Constraints/Simple Constraints
|
/* Constraints/Simple
|
||||||
* #Keywords: GtkLayoutManager
|
|
||||||
*
|
*
|
||||||
* GtkConstraintLayout provides a layout manager that uses relations
|
* GtkConstraintLayout provides a layout manager that uses relations
|
||||||
* between widgets (also known as “constraints”) to compute the position
|
* between widgets (also known as "constraints") to compute the position
|
||||||
* and size of each child.
|
* and size of each child.
|
||||||
*
|
|
||||||
* In addition to child widgets, the constraints can involve spacer
|
|
||||||
* objects (also known as “guides”). This example has a guide between
|
|
||||||
* the two buttons in the top row.
|
|
||||||
*
|
|
||||||
* Try resizing the window to see how the constraints react to update
|
|
||||||
* the layout.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
@@ -241,12 +233,15 @@ simple_grid_init (SimpleGrid *self)
|
|||||||
|
|
||||||
self->button1 = gtk_button_new_with_label ("Child 1");
|
self->button1 = gtk_button_new_with_label ("Child 1");
|
||||||
gtk_widget_set_parent (self->button1, widget);
|
gtk_widget_set_parent (self->button1, widget);
|
||||||
|
gtk_widget_set_name (self->button1, "button1");
|
||||||
|
|
||||||
self->button2 = gtk_button_new_with_label ("Child 2");
|
self->button2 = gtk_button_new_with_label ("Child 2");
|
||||||
gtk_widget_set_parent (self->button2, widget);
|
gtk_widget_set_parent (self->button2, widget);
|
||||||
|
gtk_widget_set_name (self->button2, "button2");
|
||||||
|
|
||||||
self->button3 = gtk_button_new_with_label ("Child 3");
|
self->button3 = gtk_button_new_with_label ("Child 3");
|
||||||
gtk_widget_set_parent (self->button3, widget);
|
gtk_widget_set_parent (self->button3, widget);
|
||||||
|
gtk_widget_set_name (self->button3, "button3");
|
||||||
|
|
||||||
GtkLayoutManager *manager = gtk_widget_get_layout_manager (GTK_WIDGET (self));
|
GtkLayoutManager *manager = gtk_widget_get_layout_manager (GTK_WIDGET (self));
|
||||||
build_constraints (self, GTK_CONSTRAINT_LAYOUT (manager));
|
build_constraints (self, GTK_CONSTRAINT_LAYOUT (manager));
|
||||||
@@ -259,12 +254,15 @@ do_constraints (GtkWidget *do_widget)
|
|||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *grid;
|
GtkWidget *header, *box, *grid, *button;
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Simple Constraints");
|
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
|
header = gtk_header_bar_new ();
|
||||||
|
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE);
|
||||||
|
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
@@ -274,6 +272,12 @@ do_constraints (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_hexpand (grid, TRUE);
|
gtk_widget_set_hexpand (grid, TRUE);
|
||||||
gtk_widget_set_vexpand (grid, TRUE);
|
gtk_widget_set_vexpand (grid, TRUE);
|
||||||
gtk_box_append (GTK_BOX (box), grid);
|
gtk_box_append (GTK_BOX (box), grid);
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label ("Close");
|
||||||
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
gtk_widget_set_hexpand (grid, TRUE);
|
||||||
|
g_signal_connect_swapped (button, "clicked",
|
||||||
|
G_CALLBACK (gtk_window_destroy), window);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
/* Constraints/Interactive Constraints
|
/* Constraints/Interactive
|
||||||
* #Keywords: GtkConstraintLayout
|
|
||||||
*
|
*
|
||||||
* This example shows how constraints can be updated during user interaction.
|
* Demonstrate how constraints can be updates during user interaction.
|
||||||
* The vertical edge between the buttons can be dragged with the mouse.
|
* The vertical edge between the buttons can be dragged with the mouse.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -205,18 +204,21 @@ interactive_grid_init (InteractiveGrid *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_constraints_interactive (GtkWidget *do_widget)
|
do_constraints2 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window;
|
static GtkWidget *window;
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *grid;
|
GtkWidget *header, *box, *grid, *button;
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Interactive Constraints");
|
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
|
header = gtk_header_bar_new ();
|
||||||
|
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE);
|
||||||
|
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
@@ -226,6 +228,12 @@ do_constraints_interactive (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_hexpand (grid, TRUE);
|
gtk_widget_set_hexpand (grid, TRUE);
|
||||||
gtk_widget_set_vexpand (grid, TRUE);
|
gtk_widget_set_vexpand (grid, TRUE);
|
||||||
gtk_box_append (GTK_BOX (box), grid);
|
gtk_box_append (GTK_BOX (box), grid);
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label ("Close");
|
||||||
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
gtk_widget_set_hexpand (grid, TRUE);
|
||||||
|
g_signal_connect_swapped (button, "clicked",
|
||||||
|
G_CALLBACK (gtk_window_destroy), window);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
@@ -2,10 +2,6 @@
|
|||||||
*
|
*
|
||||||
* GtkConstraintLayout allows defining constraints using a
|
* GtkConstraintLayout allows defining constraints using a
|
||||||
* compact syntax called Visual Format Language, or VFL.
|
* compact syntax called Visual Format Language, or VFL.
|
||||||
*
|
|
||||||
* A typical example of a VFL specification looks like this:
|
|
||||||
*
|
|
||||||
* H:|-[button1(==button2)]-12-[button2]-|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
@@ -128,18 +124,21 @@ vfl_grid_init (VflGrid *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_constraints_vfl (GtkWidget *do_widget)
|
do_constraints3 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window;
|
static GtkWidget *window;
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *grid;
|
GtkWidget *header, *box, *grid, *button;
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Constraints — VFL");
|
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
|
header = gtk_header_bar_new ();
|
||||||
|
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE);
|
||||||
|
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
@@ -149,6 +148,12 @@ do_constraints_vfl (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_hexpand (grid, TRUE);
|
gtk_widget_set_hexpand (grid, TRUE);
|
||||||
gtk_widget_set_vexpand (grid, TRUE);
|
gtk_widget_set_vexpand (grid, TRUE);
|
||||||
gtk_box_append (GTK_BOX (box), grid);
|
gtk_box_append (GTK_BOX (box), grid);
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label ("Close");
|
||||||
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
gtk_widget_set_hexpand (grid, TRUE);
|
||||||
|
g_signal_connect_swapped (button, "clicked",
|
||||||
|
G_CALLBACK (gtk_window_destroy), window);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/* Constraints/Builder
|
|
||||||
*
|
|
||||||
* GtkConstraintLayouts can be created in .ui files, and constraints can
|
|
||||||
* be set up at that time as well, as this example demonstrates. It shows
|
|
||||||
* various ways to do spacing and sizing with constraints.
|
|
||||||
*
|
|
||||||
* Make the window wider to see the rows react differently
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (ConstraintsGrid, constraints_grid, CONSTRAINTS, GRID, GtkWidget)
|
|
||||||
|
|
||||||
struct _ConstraintsGrid
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (ConstraintsGrid, constraints_grid, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static void
|
|
||||||
constraints_grid_init (ConstraintsGrid *grid)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
constraints_grid_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
GtkWidget *widget = GTK_WIDGET (object);
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
while ((child = gtk_widget_get_first_child (widget)))
|
|
||||||
gtk_widget_unparent (child);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (constraints_grid_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
constraints_grid_class_init (ConstraintsGridClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->dispose = constraints_grid_dispose;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_constraints_builder (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
static GtkWidget *window;
|
|
||||||
|
|
||||||
if (!window)
|
|
||||||
{
|
|
||||||
GtkBuilder *builder;
|
|
||||||
|
|
||||||
g_type_ensure (constraints_grid_get_type ());
|
|
||||||
|
|
||||||
builder = gtk_builder_new_from_resource ("/constraints_builder/constraints_builder.ui");
|
|
||||||
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
|
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
|
||||||
gtk_widget_get_display (do_widget));
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_widget_show (window);
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
||||||
@@ -1,460 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<object class="GtkWindow" id="window1">
|
|
||||||
<property name="title" translatable="yes">Constraints — Builder</property>
|
|
||||||
<property name="default-width">260</property>
|
|
||||||
<child>
|
|
||||||
<object class="ConstraintsGrid">
|
|
||||||
<property name="halign">fill</property>
|
|
||||||
<property name="valign">fill</property>
|
|
||||||
<property name="margin-top">10</property>
|
|
||||||
<property name="margin-bottom">10</property>
|
|
||||||
<property name="margin-start">10</property>
|
|
||||||
<property name="margin-end">10</property>
|
|
||||||
<property name="layout-manager">
|
|
||||||
<object class="GtkConstraintLayout">
|
|
||||||
<constraints>
|
|
||||||
<guide name="guide1" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide2" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide3" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide4" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide5" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide6" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide7" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide8" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide9" min-width="0" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide10" min-width="0" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="barrier1" min-height="10"/>
|
|
||||||
<guide name="barrier2" min-height="10"/>
|
|
||||||
<guide name="barrier3" min-height="10"/>
|
|
||||||
<guide name="barrier4" min-height="10"/>
|
|
||||||
|
|
||||||
<!-- Spread Chain -->
|
|
||||||
<constraint target="super" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="button1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="button2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="button3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide1" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button1" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide1" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide2" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button1" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button2" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide2" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide3" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button2" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button3" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide3" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide4" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button3" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="guide4" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide1" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide2" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide2" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide3" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide3" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide4" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button1" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button2" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button2" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button3" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button1" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button2" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button3" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Spread Inside Chain -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button4" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide5" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button4" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide5" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide6" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button5" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button6" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide6" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="button6" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide5" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide6" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button4" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button5" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button6" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button4" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button6" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button4" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button6" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Weighted Chain -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button8" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button8" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="button9" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button8" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="width"
|
|
||||||
multiplier="2"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="width"
|
|
||||||
multiplier="3"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button7" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button8" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button7" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button8" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Packed Chain -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide7" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button10" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide7" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button10" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button12" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button11" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide8" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button12" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="guide8" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide7" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide8" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button10" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button11" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button12" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button10" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button12" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button10" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button12" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Packed Chain with Bias -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide9" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button13" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide9" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button14" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button13" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button15" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button14" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide10" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button15" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="guide10" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide9" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide10" source-attribute="width"
|
|
||||||
multiplier="4"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button13" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button14" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button14" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button15" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button13" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button14" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button15" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="bottom"
|
|
||||||
relation="ge"
|
|
||||||
source="button13" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="bottom"
|
|
||||||
relation="ge"
|
|
||||||
source="button14" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="bottom"
|
|
||||||
relation="ge"
|
|
||||||
source="button15" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
</constraints>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button1">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button2">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button3">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button4">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button5">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button6">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button7">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button8">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button9">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button10">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button11">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button12">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button13">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button14">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button15">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
uniform float progress;
|
|
||||||
uniform sampler2D u_texture1;
|
|
||||||
uniform sampler2D u_texture2;
|
|
||||||
|
|
||||||
vec4 getFromColor (vec2 uv) {
|
|
||||||
return GskTexture(u_texture1, uv);
|
|
||||||
}
|
|
||||||
|
|
||||||
vec4 getToColor (vec2 uv) {
|
|
||||||
return GskTexture(u_texture2, uv);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Source: https://gl-transitions.com/editor/crosswarp
|
|
||||||
// Author: Eke Péter <peterekepeter@gmail.com>
|
|
||||||
// License: MIT
|
|
||||||
|
|
||||||
vec4 transition(vec2 p) {
|
|
||||||
float x = progress;
|
|
||||||
x=smoothstep(.0,1.0,(x*2.0+p.x-1.0));
|
|
||||||
return mix(getFromColor((p-.5)*(1.-x)+.5), getToColor((p-.5)*x+.5), x);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
|
|
||||||
{
|
|
||||||
fragColor = transition(uv);
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
/* Theming/CSS Accordion
|
/* Theming/CSS Accordion
|
||||||
*
|
*
|
||||||
* A simple accordion demo written using CSS transitions and multiple backgrounds
|
* A simple accordion demo written using CSS transitions and multiple backgrounds
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
/* Theming/CSS Basics
|
/* Theming/CSS Basics
|
||||||
*
|
*
|
||||||
* GTK themes are written using CSS. Every widget is build of multiple items
|
* Gtk themes are written using CSS. Every widget is build of multiple items
|
||||||
* that you can style very similarly to a regular website.
|
* that you can style very similarly to a regular website.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|||||||
@@ -15,10 +15,6 @@
|
|||||||
border: 1px solid;
|
border: 1px solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
window {
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure selections are visible */
|
/* Make sure selections are visible */
|
||||||
selection {
|
selection {
|
||||||
background-color: darkGreen;
|
background-color: darkGreen;
|
||||||
|
|||||||
@@ -38,14 +38,14 @@ struct {
|
|||||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||||
static void
|
static void
|
||||||
update_css_for_blend_mode (GtkCssProvider *provider,
|
update_css_for_blend_mode (GtkCssProvider *provider,
|
||||||
const char *blend_mode)
|
const gchar *blend_mode)
|
||||||
{
|
{
|
||||||
GBytes *bytes;
|
GBytes *bytes;
|
||||||
char *css;
|
gchar *css;
|
||||||
|
|
||||||
bytes = g_resources_lookup_data ("/css_blendmodes/css_blendmodes.css", 0, NULL);
|
bytes = g_resources_lookup_data ("/css_blendmodes/css_blendmodes.css", 0, NULL);
|
||||||
|
|
||||||
css = g_strdup_printf ((char *) g_bytes_get_data (bytes, NULL),
|
css = g_strdup_printf ((gchar*) g_bytes_get_data (bytes, NULL),
|
||||||
blend_mode,
|
blend_mode,
|
||||||
blend_mode,
|
blend_mode,
|
||||||
blend_mode);
|
blend_mode);
|
||||||
@@ -62,7 +62,7 @@ row_activated (GtkListBox *listbox,
|
|||||||
GtkListBoxRow *row,
|
GtkListBoxRow *row,
|
||||||
GtkCssProvider *provider)
|
GtkCssProvider *provider)
|
||||||
{
|
{
|
||||||
const char *blend_mode;
|
const gchar *blend_mode;
|
||||||
|
|
||||||
blend_mode = blend_modes[gtk_list_box_row_get_index (row)].id;
|
blend_mode = blend_modes[gtk_list_box_row_get_index (row)].id;
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ setup_listbox (GtkBuilder *builder,
|
|||||||
{
|
{
|
||||||
GtkWidget *normal_row;
|
GtkWidget *normal_row;
|
||||||
GtkWidget *listbox;
|
GtkWidget *listbox;
|
||||||
int i;
|
gint i;
|
||||||
|
|
||||||
normal_row = NULL;
|
normal_row = NULL;
|
||||||
listbox = gtk_list_box_new ();
|
listbox = gtk_list_box_new ();
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
/* Theming/Multiple Backgrounds
|
/* Theming/Multiple Backgrounds
|
||||||
*
|
*
|
||||||
* GTK themes are written using CSS. Every widget is build of multiple items
|
* Gtk themes are written using CSS. Every widget is build of multiple items
|
||||||
* that you can style very similarly to a regular website.
|
* that you can style very similarly to a regular website.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
/* Theming/Animated Backgrounds
|
/* Theming/Animated Backgrounds
|
||||||
*
|
*
|
||||||
* This demo is in honour of a classic Pixbufs demo.
|
* This demo is done in honour of the Pixbufs demo further down.
|
||||||
*
|
|
||||||
* It is done exclusively with CSS as the background of the window.
|
* It is done exclusively with CSS as the background of the window.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -46,19 +46,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@keyframes size-the-image {
|
@keyframes size-the-image {
|
||||||
0% { background-size: 96px, 12px, 96px, 12px, 96px, 12px, 96px, 12px, auto; }
|
0% { background-size: 96px, 12px, 96px, 12px, 96px, 12px, 96px, 12px, auto }
|
||||||
100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, auto; }
|
100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, auto }
|
||||||
}
|
}
|
||||||
|
|
||||||
window {
|
window {
|
||||||
background-image: url("resource://css_pixbufs/images/apple-red.png"),
|
background-image: url("resource://css_pixbufs/apple-red.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-applets.png"),
|
url("resource://css_pixbufs/gnome-applets.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-calendar.png"),
|
url("resource://css_pixbufs/gnome-calendar.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-foot.png"),
|
url("resource://css_pixbufs/gnome-foot.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-gmush.png"),
|
url("resource://css_pixbufs/gnome-gmush.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-gimp.png"),
|
url("resource://css_pixbufs/gnome-gimp.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-gsame.png"),
|
url("resource://css_pixbufs/gnome-gsame.png"),
|
||||||
url("resource://css_pixbufs/images/gnu-keys.png"),
|
url("resource://css_pixbufs/gnu-keys.png"),
|
||||||
url("resource://css_pixbufs/background.jpg");
|
url("resource://css_pixbufs/background.jpg");
|
||||||
background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%;
|
background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%;
|
||||||
background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, repeat;
|
background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, repeat;
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ do_css_shadows (GtkWidget *do_widget)
|
|||||||
|
|
||||||
child = create_toolbar ();
|
child = create_toolbar ();
|
||||||
gtk_paned_set_start_child (GTK_PANED (paned), child);
|
gtk_paned_set_start_child (GTK_PANED (paned), child);
|
||||||
gtk_paned_set_resize_start_child (GTK_PANED (paned), FALSE);
|
|
||||||
|
|
||||||
text = gtk_text_buffer_new (NULL);
|
text = gtk_text_buffer_new (NULL);
|
||||||
gtk_text_buffer_create_tag (text,
|
gtk_text_buffer_create_tag (text,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<property name="name">default</property>
|
<property name="name">default</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="default_cursor_image">
|
<object class="GdkCursor" id="default_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/default_cursor.png</property>
|
<property name="texture">resource:///cursors/default_cursor.png</property>
|
||||||
<property name="hotspot-x">5</property>
|
<property name="hotspot-x">5</property>
|
||||||
<property name="hotspot-y">5</property>
|
<property name="hotspot-y">5</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<property name="fallback">default_cursor_image</property>
|
<property name="fallback">default_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="default_cursor_image_fallback">
|
<object class="GdkCursor" id="default_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/default_cursor.png</property>
|
<property name="texture">resource:///cursors/default_cursor.png</property>
|
||||||
<property name="hotspot-x">5</property>
|
<property name="hotspot-x">5</property>
|
||||||
<property name="hotspot-y">5</property>
|
<property name="hotspot-y">5</property>
|
||||||
<property name="fallback">default_cursor</property>
|
<property name="fallback">default_cursor</property>
|
||||||
@@ -22,21 +22,21 @@
|
|||||||
<property name="name">none</property>
|
<property name="name">none</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="none_cursor_image">
|
<object class="GdkCursor" id="none_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/none_cursor.png</property>
|
<property name="texture">resource:///cursors/none_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="none_cursor_fallback">
|
<object class="GdkCursor" id="none_cursor_fallback">
|
||||||
<property name="name">none</property>
|
<property name="name">none</property>
|
||||||
<property name="fallback">none_cursor_image</property>
|
<property name="fallback">none_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="none_cursor_image_fallback">
|
<object class="GdkCursor" id="none_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/none_cursor.png</property>
|
<property name="texture">resource:///cursors/none_cursor.png</property>
|
||||||
<property name="fallback">none_cursor</property>
|
<property name="fallback">none_cursor</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="gtk-logo_cursor">
|
<object class="GdkCursor" id="gtk-logo_cursor">
|
||||||
<property name="name">gtk-logo</property>
|
<property name="name">gtk-logo</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="gtk-logo_cursor_image">
|
<object class="GdkCursor" id="gtk-logo_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/gtk_logo_cursor.png</property>
|
<property name="texture">resource:///cursors/gtk_logo_cursor.png</property>
|
||||||
<property name="hotspot-x">18</property>
|
<property name="hotspot-x">18</property>
|
||||||
<property name="hotspot-y">2</property>
|
<property name="hotspot-y">2</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
<property name="fallback">gtk-logo_cursor_image</property>
|
<property name="fallback">gtk-logo_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="gtk-logo_cursor_image_fallback">
|
<object class="GdkCursor" id="gtk-logo_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/gtk_logo_cursor.png</property>
|
<property name="texture">resource:///cursors/gtk_logo_cursor.png</property>
|
||||||
<property name="hotspot-x">18</property>
|
<property name="hotspot-x">18</property>
|
||||||
<property name="hotspot-y">2</property>
|
<property name="hotspot-y">2</property>
|
||||||
<property name="fallback">gtk-logo_cursor</property>
|
<property name="fallback">gtk-logo_cursor</property>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
<property name="name">context-menu</property>
|
<property name="name">context-menu</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="context-menu_cursor_image">
|
<object class="GdkCursor" id="context-menu_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/context_menu_cursor.png</property>
|
<property name="texture">resource:///cursors/context_menu_cursor.png</property>
|
||||||
<property name="hotspot-x">5</property>
|
<property name="hotspot-x">5</property>
|
||||||
<property name="hotspot-y">5</property>
|
<property name="hotspot-y">5</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<property name="fallback">context-menu_cursor_image</property>
|
<property name="fallback">context-menu_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="context-menu_cursor_image_fallback">
|
<object class="GdkCursor" id="context-menu_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/context_menu_cursor.png</property>
|
<property name="texture">resource:///cursors/context_menu_cursor.png</property>
|
||||||
<property name="hotspot-x">5</property>
|
<property name="hotspot-x">5</property>
|
||||||
<property name="hotspot-y">5</property>
|
<property name="hotspot-y">5</property>
|
||||||
<property name="fallback">context-menu_cursor</property>
|
<property name="fallback">context-menu_cursor</property>
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
<property name="name">help</property>
|
<property name="name">help</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="help_cursor_image">
|
<object class="GdkCursor" id="help_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/help_cursor.png</property>
|
<property name="texture">resource:///cursors/help_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">27</property>
|
<property name="hotspot-y">27</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<property name="fallback">help_cursor_image</property>
|
<property name="fallback">help_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="help_cursor_image_fallback">
|
<object class="GdkCursor" id="help_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/help_cursor.png</property>
|
<property name="texture">resource:///cursors/help_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">27</property>
|
<property name="hotspot-y">27</property>
|
||||||
<property name="fallback">help_cursor</property>
|
<property name="fallback">help_cursor</property>
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
<property name="name">pointer</property>
|
<property name="name">pointer</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="pointer_cursor_image">
|
<object class="GdkCursor" id="pointer_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/pointer_cursor.png</property>
|
<property name="texture">resource:///cursors/pointer_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">9</property>
|
<property name="hotspot-y">9</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
<property name="fallback">pointer_cursor_image</property>
|
<property name="fallback">pointer_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="pointer_cursor_image_fallback">
|
<object class="GdkCursor" id="pointer_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/pointer_cursor.png</property>
|
<property name="texture">resource:///cursors/pointer_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">9</property>
|
<property name="hotspot-y">9</property>
|
||||||
<property name="fallback">pointer_cursor</property>
|
<property name="fallback">pointer_cursor</property>
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
<property name="name">progress</property>
|
<property name="name">progress</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="progress_cursor_image">
|
<object class="GdkCursor" id="progress_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/progress_cursor.png</property>
|
<property name="texture">resource:///cursors/progress_cursor.png</property>
|
||||||
<property name="hotspot-x">5</property>
|
<property name="hotspot-x">5</property>
|
||||||
<property name="hotspot-y">4</property>
|
<property name="hotspot-y">4</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
<property name="fallback">progress_cursor_image</property>
|
<property name="fallback">progress_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="progress_cursor_image_fallback">
|
<object class="GdkCursor" id="progress_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/progress_cursor.png</property>
|
<property name="texture">resource:///cursors/progress_cursor.png</property>
|
||||||
<property name="hotspot-x">5</property>
|
<property name="hotspot-x">5</property>
|
||||||
<property name="hotspot-y">4</property>
|
<property name="hotspot-y">4</property>
|
||||||
<property name="fallback">progress_cursor</property>
|
<property name="fallback">progress_cursor</property>
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
<property name="name">wait</property>
|
<property name="name">wait</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="wait_cursor_image">
|
<object class="GdkCursor" id="wait_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/wait_cursor.png</property>
|
<property name="texture">resource:///cursors/wait_cursor.png</property>
|
||||||
<property name="hotspot-x">11</property>
|
<property name="hotspot-x">11</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
<property name="fallback">wait_cursor_image</property>
|
<property name="fallback">wait_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="wait_cursor_image_fallback">
|
<object class="GdkCursor" id="wait_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/wait_cursor.png</property>
|
<property name="texture">resource:///cursors/wait_cursor.png</property>
|
||||||
<property name="hotspot-x">11</property>
|
<property name="hotspot-x">11</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
<property name="fallback">wait_cursor</property>
|
<property name="fallback">wait_cursor</property>
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
<property name="name">cell</property>
|
<property name="name">cell</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="cell_cursor_image">
|
<object class="GdkCursor" id="cell_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/cell_cursor.png</property>
|
<property name="texture">resource:///cursors/cell_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
<property name="fallback">cell_cursor_image</property>
|
<property name="fallback">cell_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="cell_cursor_image_fallback">
|
<object class="GdkCursor" id="cell_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/cell_cursor.png</property>
|
<property name="texture">resource:///cursors/cell_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">cell_cursor</property>
|
<property name="fallback">cell_cursor</property>
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
<property name="name">crosshair</property>
|
<property name="name">crosshair</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="crosshair_cursor_image">
|
<object class="GdkCursor" id="crosshair_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/crosshair_cursor.png</property>
|
<property name="texture">resource:///cursors/crosshair_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
<property name="fallback">crosshair_cursor_image</property>
|
<property name="fallback">crosshair_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="crosshair_cursor_image_fallback">
|
<object class="GdkCursor" id="crosshair_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/crosshair_cursor.png</property>
|
<property name="texture">resource:///cursors/crosshair_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">crosshair_cursor</property>
|
<property name="fallback">crosshair_cursor</property>
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
<property name="name">text</property>
|
<property name="name">text</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="text_cursor_image">
|
<object class="GdkCursor" id="text_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/text_cursor.png</property>
|
<property name="texture">resource:///cursors/text_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
<property name="fallback">text_cursor_image</property>
|
<property name="fallback">text_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="text_cursor_image_fallback">
|
<object class="GdkCursor" id="text_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/text_cursor.png</property>
|
<property name="texture">resource:///cursors/text_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">text_cursor</property>
|
<property name="fallback">text_cursor</property>
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
<property name="name">vertical-text</property>
|
<property name="name">vertical-text</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="vertical-text_cursor_image">
|
<object class="GdkCursor" id="vertical-text_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/vertical_text_cursor.png</property>
|
<property name="texture">resource:///cursors/vertical_text_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -207,7 +207,7 @@
|
|||||||
<property name="fallback">vertical-text_cursor_image</property>
|
<property name="fallback">vertical-text_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="vertical-text_cursor_image_fallback">
|
<object class="GdkCursor" id="vertical-text_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/vertical_text_cursor.png</property>
|
<property name="texture">resource:///cursors/vertical_text_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">vertical-text_cursor</property>
|
<property name="fallback">vertical-text_cursor</property>
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
<property name="name">alias</property>
|
<property name="name">alias</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="alias_cursor_image">
|
<object class="GdkCursor" id="alias_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/alias_cursor.png</property>
|
<property name="texture">resource:///cursors/alias_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
<property name="fallback">alias_cursor_image</property>
|
<property name="fallback">alias_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="alias_cursor_image_fallback">
|
<object class="GdkCursor" id="alias_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/alias_cursor.png</property>
|
<property name="texture">resource:///cursors/alias_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
<property name="fallback">alias_cursor</property>
|
<property name="fallback">alias_cursor</property>
|
||||||
@@ -234,7 +234,7 @@
|
|||||||
<property name="name">copy</property>
|
<property name="name">copy</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="copy_cursor_image">
|
<object class="GdkCursor" id="copy_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/copy_cursor.png</property>
|
<property name="texture">resource:///cursors/copy_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -243,7 +243,7 @@
|
|||||||
<property name="fallback">copy_cursor_image</property>
|
<property name="fallback">copy_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="copy_cursor_image_fallback">
|
<object class="GdkCursor" id="copy_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/copy_cursor.png</property>
|
<property name="texture">resource:///cursors/copy_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
<property name="fallback">copy_cursor</property>
|
<property name="fallback">copy_cursor</property>
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
<property name="name">move</property>
|
<property name="name">move</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="move_cursor_image">
|
<object class="GdkCursor" id="move_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/move_cursor.png</property>
|
<property name="texture">resource:///cursors/move_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
<property name="fallback">move_cursor_image</property>
|
<property name="fallback">move_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="move_cursor_image_fallback">
|
<object class="GdkCursor" id="move_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/move_cursor.png</property>
|
<property name="texture">resource:///cursors/move_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
<property name="fallback">move_cursor</property>
|
<property name="fallback">move_cursor</property>
|
||||||
@@ -270,7 +270,7 @@
|
|||||||
<property name="name">no-drop</property>
|
<property name="name">no-drop</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="no-drop_cursor_image">
|
<object class="GdkCursor" id="no-drop_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/no_drop_cursor.png</property>
|
<property name="texture">resource:///cursors/no_drop_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -279,7 +279,7 @@
|
|||||||
<property name="fallback">no-drop_cursor_image</property>
|
<property name="fallback">no-drop_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="no-drop_cursor_image_fallback">
|
<object class="GdkCursor" id="no-drop_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/no_drop_cursor.png</property>
|
<property name="texture">resource:///cursors/no_drop_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
<property name="fallback">no-drop_cursor</property>
|
<property name="fallback">no-drop_cursor</property>
|
||||||
@@ -288,7 +288,7 @@
|
|||||||
<property name="name">not-allowed</property>
|
<property name="name">not-allowed</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="not-allowed_cursor_image">
|
<object class="GdkCursor" id="not-allowed_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/not_allowed_cursor.png</property>
|
<property name="texture">resource:///cursors/not_allowed_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -297,7 +297,7 @@
|
|||||||
<property name="fallback">not-allowed_cursor_image</property>
|
<property name="fallback">not-allowed_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="not-allowed_cursor_image_fallback">
|
<object class="GdkCursor" id="not-allowed_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/not_allowed_cursor.png</property>
|
<property name="texture">resource:///cursors/not_allowed_cursor.png</property>
|
||||||
<property name="hotspot-x">12</property>
|
<property name="hotspot-x">12</property>
|
||||||
<property name="hotspot-y">11</property>
|
<property name="hotspot-y">11</property>
|
||||||
<property name="fallback">not-allowed_cursor</property>
|
<property name="fallback">not-allowed_cursor</property>
|
||||||
@@ -306,7 +306,7 @@
|
|||||||
<property name="name">grab</property>
|
<property name="name">grab</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="grab_cursor_image">
|
<object class="GdkCursor" id="grab_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/grab_cursor.png</property>
|
<property name="texture">resource:///cursors/grab_cursor.png</property>
|
||||||
<property name="hotspot-x">10</property>
|
<property name="hotspot-x">10</property>
|
||||||
<property name="hotspot-y">6</property>
|
<property name="hotspot-y">6</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -315,7 +315,7 @@
|
|||||||
<property name="fallback">grab_cursor_image</property>
|
<property name="fallback">grab_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="grab_cursor_image_fallback">
|
<object class="GdkCursor" id="grab_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/grab_cursor.png</property>
|
<property name="texture">resource:///cursors/grab_cursor.png</property>
|
||||||
<property name="hotspot-x">10</property>
|
<property name="hotspot-x">10</property>
|
||||||
<property name="hotspot-y">6</property>
|
<property name="hotspot-y">6</property>
|
||||||
<property name="fallback">grab_cursor</property>
|
<property name="fallback">grab_cursor</property>
|
||||||
@@ -324,7 +324,7 @@
|
|||||||
<property name="name">grabbing</property>
|
<property name="name">grabbing</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="grabbing_cursor_image">
|
<object class="GdkCursor" id="grabbing_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/grabbing_cursor.png</property>
|
<property name="texture">resource:///cursors/grabbing_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">14</property>
|
<property name="hotspot-y">14</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -333,7 +333,7 @@
|
|||||||
<property name="fallback">grabbing_cursor_image</property>
|
<property name="fallback">grabbing_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="grabbing_cursor_image_fallback">
|
<object class="GdkCursor" id="grabbing_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/grabbing_cursor.png</property>
|
<property name="texture">resource:///cursors/grabbing_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">14</property>
|
<property name="hotspot-y">14</property>
|
||||||
<property name="fallback">grabbing_cursor</property>
|
<property name="fallback">grabbing_cursor</property>
|
||||||
@@ -342,7 +342,7 @@
|
|||||||
<property name="name">all-scroll</property>
|
<property name="name">all-scroll</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="all-scroll_cursor_image">
|
<object class="GdkCursor" id="all-scroll_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/all_scroll_cursor.png</property>
|
<property name="texture">resource:///cursors/all_scroll_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -351,7 +351,7 @@
|
|||||||
<property name="fallback">all-scroll_cursor_image</property>
|
<property name="fallback">all-scroll_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="all-scroll_cursor_image_fallback">
|
<object class="GdkCursor" id="all-scroll_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/all_scroll_cursor.png</property>
|
<property name="texture">resource:///cursors/all_scroll_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">all-scroll_cursor</property>
|
<property name="fallback">all-scroll_cursor</property>
|
||||||
@@ -360,7 +360,7 @@
|
|||||||
<property name="name">col-resize</property>
|
<property name="name">col-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="col-resize_cursor_image">
|
<object class="GdkCursor" id="col-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/col_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/col_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -369,7 +369,7 @@
|
|||||||
<property name="fallback">col-resize_cursor_image</property>
|
<property name="fallback">col-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="col-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="col-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/col_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/col_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">col-resize_cursor</property>
|
<property name="fallback">col-resize_cursor</property>
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
<property name="name">row-resize</property>
|
<property name="name">row-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="row-resize_cursor_image">
|
<object class="GdkCursor" id="row-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/row_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/row_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -387,7 +387,7 @@
|
|||||||
<property name="fallback">row-resize_cursor_image</property>
|
<property name="fallback">row-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="row-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="row-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/row_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/row_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
<property name="fallback">row-resize_cursor</property>
|
<property name="fallback">row-resize_cursor</property>
|
||||||
@@ -396,7 +396,7 @@
|
|||||||
<property name="name">n-resize</property>
|
<property name="name">n-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="n-resize_cursor_image">
|
<object class="GdkCursor" id="n-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/n_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/n_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">17</property>
|
<property name="hotspot-x">17</property>
|
||||||
<property name="hotspot-y">7</property>
|
<property name="hotspot-y">7</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -405,7 +405,7 @@
|
|||||||
<property name="fallback">n-resize_cursor_image</property>
|
<property name="fallback">n-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="n-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="n-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/n_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/n_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">17</property>
|
<property name="hotspot-x">17</property>
|
||||||
<property name="hotspot-y">7</property>
|
<property name="hotspot-y">7</property>
|
||||||
<property name="fallback">n-resize_cursor</property>
|
<property name="fallback">n-resize_cursor</property>
|
||||||
@@ -414,7 +414,7 @@
|
|||||||
<property name="name">e-resize</property>
|
<property name="name">e-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="e-resize_cursor_image">
|
<object class="GdkCursor" id="e-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/e_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/e_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">25</property>
|
<property name="hotspot-x">25</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -423,7 +423,7 @@
|
|||||||
<property name="fallback">e-resize_cursor_image</property>
|
<property name="fallback">e-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="e-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="e-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/e_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/e_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">25</property>
|
<property name="hotspot-x">25</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
<property name="fallback">e-resize_cursor</property>
|
<property name="fallback">e-resize_cursor</property>
|
||||||
@@ -432,7 +432,7 @@
|
|||||||
<property name="name">s-resize</property>
|
<property name="name">s-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="s-resize_cursor_image">
|
<object class="GdkCursor" id="s-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/s_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/s_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">17</property>
|
<property name="hotspot-x">17</property>
|
||||||
<property name="hotspot-y">23</property>
|
<property name="hotspot-y">23</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -441,7 +441,7 @@
|
|||||||
<property name="fallback">s-resize_cursor_image</property>
|
<property name="fallback">s-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="s-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="s-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/s_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/s_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">17</property>
|
<property name="hotspot-x">17</property>
|
||||||
<property name="hotspot-y">23</property>
|
<property name="hotspot-y">23</property>
|
||||||
<property name="fallback">s-resize_cursor</property>
|
<property name="fallback">s-resize_cursor</property>
|
||||||
@@ -450,7 +450,7 @@
|
|||||||
<property name="name">w-resize</property>
|
<property name="name">w-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="w-resize_cursor_image">
|
<object class="GdkCursor" id="w-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/w_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/w_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">8</property>
|
<property name="hotspot-x">8</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -459,7 +459,7 @@
|
|||||||
<property name="fallback">w-resize_cursor_image</property>
|
<property name="fallback">w-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="w-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="w-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/w_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/w_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">8</property>
|
<property name="hotspot-x">8</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
<property name="fallback">w-resize_cursor</property>
|
<property name="fallback">w-resize_cursor</property>
|
||||||
@@ -468,7 +468,7 @@
|
|||||||
<property name="name">ne-resize</property>
|
<property name="name">ne-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="ne-resize_cursor_image">
|
<object class="GdkCursor" id="ne-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/ne_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/ne_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">20</property>
|
<property name="hotspot-x">20</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -477,7 +477,7 @@
|
|||||||
<property name="fallback">ne-resize_cursor_image</property>
|
<property name="fallback">ne-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="ne-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="ne-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/ne_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/ne_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">20</property>
|
<property name="hotspot-x">20</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
<property name="fallback">ne-resize_cursor</property>
|
<property name="fallback">ne-resize_cursor</property>
|
||||||
@@ -486,7 +486,7 @@
|
|||||||
<property name="name">nw-resize</property>
|
<property name="name">nw-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="nw-resize_cursor_image">
|
<object class="GdkCursor" id="nw-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/nw_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/nw_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">13</property>
|
<property name="hotspot-x">13</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -495,7 +495,7 @@
|
|||||||
<property name="fallback">nw-resize_cursor_image</property>
|
<property name="fallback">nw-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="nw-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="nw-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/nw_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/nw_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">13</property>
|
<property name="hotspot-x">13</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
<property name="fallback">nw-resize_cursor</property>
|
<property name="fallback">nw-resize_cursor</property>
|
||||||
@@ -504,7 +504,7 @@
|
|||||||
<property name="name">se-resize</property>
|
<property name="name">se-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="se-resize_cursor_image">
|
<object class="GdkCursor" id="se-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/se_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/se_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">19</property>
|
<property name="hotspot-x">19</property>
|
||||||
<property name="hotspot-y">19</property>
|
<property name="hotspot-y">19</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -513,7 +513,7 @@
|
|||||||
<property name="fallback">se-resize_cursor_image</property>
|
<property name="fallback">se-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="se-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="se-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/se_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/se_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">19</property>
|
<property name="hotspot-x">19</property>
|
||||||
<property name="hotspot-y">19</property>
|
<property name="hotspot-y">19</property>
|
||||||
<property name="fallback">se-resize_cursor</property>
|
<property name="fallback">se-resize_cursor</property>
|
||||||
@@ -522,7 +522,7 @@
|
|||||||
<property name="name">sw-resize</property>
|
<property name="name">sw-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="sw-resize_cursor_image">
|
<object class="GdkCursor" id="sw-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/sw_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/sw_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">13</property>
|
<property name="hotspot-x">13</property>
|
||||||
<property name="hotspot-y">19</property>
|
<property name="hotspot-y">19</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -531,7 +531,7 @@
|
|||||||
<property name="fallback">sw-resize_cursor_image</property>
|
<property name="fallback">sw-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="sw-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="sw-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/sw_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/sw_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">13</property>
|
<property name="hotspot-x">13</property>
|
||||||
<property name="hotspot-y">19</property>
|
<property name="hotspot-y">19</property>
|
||||||
<property name="fallback">sw-resize_cursor</property>
|
<property name="fallback">sw-resize_cursor</property>
|
||||||
@@ -540,7 +540,7 @@
|
|||||||
<property name="name">ew-resize</property>
|
<property name="name">ew-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="ew-resize_cursor_image">
|
<object class="GdkCursor" id="ew-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/ew_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/ew_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -549,7 +549,7 @@
|
|||||||
<property name="fallback">ew-resize_cursor_image</property>
|
<property name="fallback">ew-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="ew-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="ew-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/ew_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/ew_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">16</property>
|
<property name="hotspot-x">16</property>
|
||||||
<property name="hotspot-y">15</property>
|
<property name="hotspot-y">15</property>
|
||||||
<property name="fallback">ew-resize_cursor</property>
|
<property name="fallback">ew-resize_cursor</property>
|
||||||
@@ -558,7 +558,7 @@
|
|||||||
<property name="name">ns-resize</property>
|
<property name="name">ns-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="ns-resize_cursor_image">
|
<object class="GdkCursor" id="ns-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/ns_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/ns_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -567,7 +567,7 @@
|
|||||||
<property name="fallback">ns-resize_cursor_image</property>
|
<property name="fallback">ns-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="ns-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="ns-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/ns_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/ns_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">15</property>
|
<property name="hotspot-x">15</property>
|
||||||
<property name="hotspot-y">17</property>
|
<property name="hotspot-y">17</property>
|
||||||
<property name="fallback">ns-resize_cursor</property>
|
<property name="fallback">ns-resize_cursor</property>
|
||||||
@@ -576,7 +576,7 @@
|
|||||||
<property name="name">nesw-resize</property>
|
<property name="name">nesw-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="nesw-resize_cursor_image">
|
<object class="GdkCursor" id="nesw-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/nesw_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/nesw_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">14</property>
|
<property name="hotspot-y">14</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -585,7 +585,7 @@
|
|||||||
<property name="fallback">nesw-resize_cursor_image</property>
|
<property name="fallback">nesw-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="nesw-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="nesw-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/nesw_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/nesw_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">14</property>
|
<property name="hotspot-y">14</property>
|
||||||
<property name="fallback">nesw-resize_cursor</property>
|
<property name="fallback">nesw-resize_cursor</property>
|
||||||
@@ -594,7 +594,7 @@
|
|||||||
<property name="name">nwse-resize</property>
|
<property name="name">nwse-resize</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="nwse-resize_cursor_image">
|
<object class="GdkCursor" id="nwse-resize_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/nwse_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/nwse_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">14</property>
|
<property name="hotspot-y">14</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -603,7 +603,7 @@
|
|||||||
<property name="fallback">nwse-resize_cursor_image</property>
|
<property name="fallback">nwse-resize_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="nwse-resize_cursor_image_fallback">
|
<object class="GdkCursor" id="nwse-resize_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/nwse_resize_cursor.png</property>
|
<property name="texture">resource:///cursors/nwse_resize_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">14</property>
|
<property name="hotspot-y">14</property>
|
||||||
<property name="fallback">nwse-resize_cursor</property>
|
<property name="fallback">nwse-resize_cursor</property>
|
||||||
@@ -612,7 +612,7 @@
|
|||||||
<property name="name">zoom-in</property>
|
<property name="name">zoom-in</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="zoom-in_cursor_image">
|
<object class="GdkCursor" id="zoom-in_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/zoom_in_cursor.png</property>
|
<property name="texture">resource:///cursors/zoom_in_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -621,7 +621,7 @@
|
|||||||
<property name="fallback">zoom-in_cursor_image</property>
|
<property name="fallback">zoom-in_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="zoom-in_cursor_image_fallback">
|
<object class="GdkCursor" id="zoom-in_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/zoom_in_cursor.png</property>
|
<property name="texture">resource:///cursors/zoom_in_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
<property name="fallback">zoom-in_cursor</property>
|
<property name="fallback">zoom-in_cursor</property>
|
||||||
@@ -630,7 +630,7 @@
|
|||||||
<property name="name">zoom-out</property>
|
<property name="name">zoom-out</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="zoom-out_cursor_image">
|
<object class="GdkCursor" id="zoom-out_cursor_image">
|
||||||
<property name="texture">resource:///cursors/images/zoom_out_cursor.png</property>
|
<property name="texture">resource:///cursors/zoom_out_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -639,7 +639,7 @@
|
|||||||
<property name="fallback">zoom-out_cursor_image</property>
|
<property name="fallback">zoom-out_cursor_image</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GdkCursor" id="zoom-out_cursor_image_fallback">
|
<object class="GdkCursor" id="zoom-out_cursor_image_fallback">
|
||||||
<property name="texture">resource:///cursors/images/zoom_out_cursor.png</property>
|
<property name="texture">resource:///cursors/zoom_out_cursor.png</property>
|
||||||
<property name="hotspot-x">14</property>
|
<property name="hotspot-x">14</property>
|
||||||
<property name="hotspot-y">13</property>
|
<property name="hotspot-y">13</property>
|
||||||
<property name="fallback">zoom-out_cursor</property>
|
<property name="fallback">zoom-out_cursor</property>
|
||||||
@@ -682,7 +682,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/default_cursor.png</property>
|
<property name="paintable">resource:///cursors/default_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -742,7 +742,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/none_cursor.png</property>
|
<property name="paintable">resource:///cursors/none_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -802,7 +802,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/gtk_logo_cursor.png</property>
|
<property name="paintable">resource:///cursors/gtk_logo_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -875,7 +875,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/context_menu_cursor.png</property>
|
<property name="paintable">resource:///cursors/context_menu_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -935,7 +935,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/help_cursor.png</property>
|
<property name="paintable">resource:///cursors/help_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -995,7 +995,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/pointer_cursor.png</property>
|
<property name="paintable">resource:///cursors/pointer_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1055,7 +1055,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/progress_cursor.png</property>
|
<property name="paintable">resource:///cursors/progress_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1115,7 +1115,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/wait_cursor.png</property>
|
<property name="paintable">resource:///cursors/wait_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1188,7 +1188,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/cell_cursor.png</property>
|
<property name="paintable">resource:///cursors/cell_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1248,7 +1248,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/crosshair_cursor.png</property>
|
<property name="paintable">resource:///cursors/crosshair_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1308,7 +1308,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/text_cursor.png</property>
|
<property name="paintable">resource:///cursors/text_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1368,7 +1368,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/vertical_text_cursor.png</property>
|
<property name="paintable">resource:///cursors/vertical_text_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1441,7 +1441,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/alias_cursor.png</property>
|
<property name="paintable">resource:///cursors/alias_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1501,7 +1501,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/copy_cursor.png</property>
|
<property name="paintable">resource:///cursors/copy_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1561,7 +1561,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/move_cursor.png</property>
|
<property name="paintable">resource:///cursors/move_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1621,7 +1621,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/no_drop_cursor.png</property>
|
<property name="paintable">resource:///cursors/no_drop_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1681,7 +1681,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/not_allowed_cursor.png</property>
|
<property name="paintable">resource:///cursors/not_allowed_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1741,7 +1741,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/grab_cursor.png</property>
|
<property name="paintable">resource:///cursors/grab_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1801,7 +1801,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/grabbing_cursor.png</property>
|
<property name="paintable">resource:///cursors/grabbing_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1874,7 +1874,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/all_scroll_cursor.png</property>
|
<property name="paintable">resource:///cursors/all_scroll_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1934,7 +1934,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/col_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/col_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1994,7 +1994,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/row_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/row_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2054,7 +2054,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/n_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/n_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2114,7 +2114,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/e_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/e_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2174,7 +2174,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/s_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/s_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2234,7 +2234,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/w_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/w_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2294,7 +2294,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/ne_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/ne_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2354,7 +2354,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/nw_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/nw_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2414,7 +2414,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/sw_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/sw_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2474,7 +2474,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/se_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/se_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2534,7 +2534,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/ew_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/ew_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2594,7 +2594,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/ns_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/ns_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2654,7 +2654,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/nesw_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/nesw_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2714,7 +2714,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/nwse_resize_cursor.png</property>
|
<property name="paintable">resource:///cursors/nwse_resize_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2787,7 +2787,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/zoom_in_cursor.png</property>
|
<property name="paintable">resource:///cursors/zoom_in_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -2847,7 +2847,7 @@
|
|||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="paintable">resource:///cursors/images/zoom_out_cursor.png</property>
|
<property name="paintable">resource:///cursors/zoom_out_cursor.png</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
|||||||
@@ -18,9 +18,6 @@
|
|||||||
<file>demoimage.c</file>
|
<file>demoimage.c</file>
|
||||||
<file>demoimage.h</file>
|
<file>demoimage.h</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/constraints_builder">
|
|
||||||
<file>constraints_builder.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/css_accordion">
|
<gresource prefix="/css_accordion">
|
||||||
<file>css_accordion.css</file>
|
<file>css_accordion.css</file>
|
||||||
<file>reset.css</file>
|
<file>reset.css</file>
|
||||||
@@ -43,11 +40,6 @@
|
|||||||
<file>cssview.css</file>
|
<file>cssview.css</file>
|
||||||
<file>reset.css</file>
|
<file>reset.css</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/dropdown">
|
|
||||||
<file>suggestionentry.h</file>
|
|
||||||
<file>suggestionentry.c</file>
|
|
||||||
<file>suggestionentry.css</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/theming_style_classes">
|
<gresource prefix="/theming_style_classes">
|
||||||
<file>theming.ui</file>
|
<file>theming.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
@@ -59,8 +51,6 @@
|
|||||||
<file>cssview.css</file>
|
<file>cssview.css</file>
|
||||||
<file>reset.css</file>
|
<file>reset.css</file>
|
||||||
<file>background.jpg</file>
|
<file>background.jpg</file>
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/css_pixbufs/images">
|
|
||||||
<file>apple-red.png</file>
|
<file>apple-red.png</file>
|
||||||
<file>gnome-applets.png</file>
|
<file>gnome-applets.png</file>
|
||||||
<file>gnome-calendar.png</file>
|
<file>gnome-calendar.png</file>
|
||||||
@@ -77,8 +67,6 @@
|
|||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/cursors">
|
<gresource prefix="/cursors">
|
||||||
<file>cursors.ui</file>
|
<file>cursors.ui</file>
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/cursors/images">
|
|
||||||
<file>alias_cursor.png</file>
|
<file>alias_cursor.png</file>
|
||||||
<file>all_scroll_cursor.png</file>
|
<file>all_scroll_cursor.png</file>
|
||||||
<file>cell_cursor.png</file>
|
<file>cell_cursor.png</file>
|
||||||
@@ -120,45 +108,15 @@
|
|||||||
<gresource prefix="/dnd">
|
<gresource prefix="/dnd">
|
||||||
<file>dnd.css</file>
|
<file>dnd.css</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/errorstates">
|
|
||||||
<file>errorstates.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/fishbowl">
|
<gresource prefix="/fishbowl">
|
||||||
<file>fishbowl.ui</file>
|
<file>fishbowl.ui</file>
|
||||||
<file>gtkfishbowl.c</file>
|
<file>gtkfishbowl.c</file>
|
||||||
<file>gtkfishbowl.h</file>
|
<file>gtkfishbowl.h</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/frames">
|
|
||||||
<file>frames.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/gears">
|
<gresource prefix="/gears">
|
||||||
<file>gtkgears.c</file>
|
<file>gtkgears.c</file>
|
||||||
<file>gtkgears.h</file>
|
<file>gtkgears.h</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/shadertoy">
|
|
||||||
<file>gtkshadertoy.c</file>
|
|
||||||
<file>gtkshadertoy.h</file>
|
|
||||||
<file>alienplanet.glsl</file>
|
|
||||||
<file>mandelbrot.glsl</file>
|
|
||||||
<file>neon.glsl</file>
|
|
||||||
<file>cogs.glsl</file>
|
|
||||||
<file>glowingstars.glsl</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/gltransition">
|
|
||||||
<file>gtkshaderstack.c</file>
|
|
||||||
<file>gtkshaderstack.h</file>
|
|
||||||
<file>gtkshaderbin.h</file>
|
|
||||||
<file>gtkshaderbin.c</file>
|
|
||||||
<file>gskshaderpaintable.h</file>
|
|
||||||
<file>gskshaderpaintable.c</file>
|
|
||||||
<file>wind.glsl</file>
|
|
||||||
<file>radial.glsl</file>
|
|
||||||
<file>crosswarp.glsl</file>
|
|
||||||
<file>kaleidoscope.glsl</file>
|
|
||||||
<file>cogs2.glsl</file>
|
|
||||||
<file>ripple.glsl</file>
|
|
||||||
<file>background.glsl</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/iconscroll">
|
<gresource prefix="/iconscroll">
|
||||||
<file>iconscroll.ui</file>
|
<file>iconscroll.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
@@ -166,24 +124,6 @@
|
|||||||
<file>gnome-fs-directory.png</file>
|
<file>gnome-fs-directory.png</file>
|
||||||
<file>gnome-fs-regular.png</file>
|
<file>gnome-fs-regular.png</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/layoutmanager">
|
|
||||||
<file>demolayout.h</file>
|
|
||||||
<file>demolayout.c</file>
|
|
||||||
<file>demowidget.h</file>
|
|
||||||
<file>demowidget.c</file>
|
|
||||||
<file>demochild.h</file>
|
|
||||||
<file>demochild.c</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/layoutmanager2">
|
|
||||||
<file>demo2layout.h</file>
|
|
||||||
<file>demo2layout.c</file>
|
|
||||||
<file>demo2widget.h</file>
|
|
||||||
<file>demo2widget.c</file>
|
|
||||||
<file>four_point_transform.h</file>
|
|
||||||
<file>four_point_transform.c</file>
|
|
||||||
<file>singular_value_decomposition.h</file>
|
|
||||||
<file>singular_value_decomposition.c</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/listview_filebrowser">
|
<gresource prefix="/listview_filebrowser">
|
||||||
<file>listview_filebrowser.ui</file>
|
<file>listview_filebrowser.ui</file>
|
||||||
<file>listview_filebrowser.css</file>
|
<file>listview_filebrowser.css</file>
|
||||||
@@ -195,30 +135,11 @@
|
|||||||
<gresource prefix="/listview_settings">
|
<gresource prefix="/listview_settings">
|
||||||
<file>listview_settings.ui</file>
|
<file>listview_settings.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/listview_ucd_data/">
|
|
||||||
<file>ucdnames.data</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/listview_weather">
|
<gresource prefix="/listview_weather">
|
||||||
<file compressed="true">listview_weather.txt</file>
|
<file compressed="true">listview_weather.txt</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/listview_colors">
|
<gresource prefix="/listview_colors">
|
||||||
<file compressed="true">color.names.txt</file>
|
<file compressed="true">color.names.txt</file>
|
||||||
<file>listview_colors.css</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/main">
|
|
||||||
<file>fontify.c</file>
|
|
||||||
<file>fontify.h</file>
|
|
||||||
<file>main.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/menu">
|
|
||||||
<file>demo3widget.c</file>
|
|
||||||
<file>demo3widget.h</file>
|
|
||||||
<file>demo3widget.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/paintable_svg">
|
|
||||||
<file>svgpaintable.h</file>
|
|
||||||
<file>svgpaintable.c</file>
|
|
||||||
<file>org.gtk.gtk4.NodeEditor.Devel.svg</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/shortcuts">
|
<gresource prefix="/shortcuts">
|
||||||
<file>shortcuts.ui</file>
|
<file>shortcuts.ui</file>
|
||||||
@@ -239,15 +160,20 @@
|
|||||||
<file>revealer.ui</file>
|
<file>revealer.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/images">
|
<gresource prefix="/images">
|
||||||
<file>pixbufpaintable.h</file>
|
|
||||||
<file>pixbufpaintable.c</file>
|
|
||||||
<file>alphatest.png</file>
|
<file>alphatest.png</file>
|
||||||
<file>floppybuddy.gif</file>
|
<file>floppybuddy.gif</file>
|
||||||
<file>gtk-logo.webm</file>
|
<file>gtk-logo.webm</file>
|
||||||
<file alias="org.gtk.Demo4.svg">data/scalable/apps/org.gtk.Demo4.svg</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/video-player">
|
<gresource prefix="/pixbufs">
|
||||||
<file>bbb.png</file>
|
<file>apple-red.png</file>
|
||||||
|
<file>background.jpg</file>
|
||||||
|
<file>gnome-applets.png</file>
|
||||||
|
<file>gnome-calendar.png</file>
|
||||||
|
<file>gnome-foot.png</file>
|
||||||
|
<file>gnome-gmush.png</file>
|
||||||
|
<file>gnome-gimp.png</file>
|
||||||
|
<file>gnome-gsame.png</file>
|
||||||
|
<file>gnu-keys.png</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/sources">
|
<gresource prefix="/sources">
|
||||||
<file>application_demo.c</file>
|
<file>application_demo.c</file>
|
||||||
@@ -256,9 +182,8 @@
|
|||||||
<file>clipboard.c</file>
|
<file>clipboard.c</file>
|
||||||
<file>combobox.c</file>
|
<file>combobox.c</file>
|
||||||
<file>constraints.c</file>
|
<file>constraints.c</file>
|
||||||
<file>constraints_interactive.c</file>
|
<file>constraints2.c</file>
|
||||||
<file>constraints_vfl.c</file>
|
<file>constraints3.c</file>
|
||||||
<file>constraints_builder.c</file>
|
|
||||||
<file>css_accordion.c</file>
|
<file>css_accordion.c</file>
|
||||||
<file>css_basics.c</file>
|
<file>css_basics.c</file>
|
||||||
<file>css_blendmodes.c</file>
|
<file>css_blendmodes.c</file>
|
||||||
@@ -273,20 +198,17 @@
|
|||||||
<file>editable_cells.c</file>
|
<file>editable_cells.c</file>
|
||||||
<file>entry_completion.c</file>
|
<file>entry_completion.c</file>
|
||||||
<file>entry_undo.c</file>
|
<file>entry_undo.c</file>
|
||||||
<file>errorstates.c</file>
|
|
||||||
<file>expander.c</file>
|
<file>expander.c</file>
|
||||||
<file>filtermodel.c</file>
|
<file>filtermodel.c</file>
|
||||||
<file>fishbowl.c</file>
|
<file>fishbowl.c</file>
|
||||||
<file>fixed.c</file>
|
<file>fixed.c</file>
|
||||||
<file>flowbox.c</file>
|
<file>flowbox.c</file>
|
||||||
<file>frames.c</file>
|
|
||||||
<file>font_features.c</file>
|
<file>font_features.c</file>
|
||||||
<file>fontplane.c</file>
|
<file>fontplane.c</file>
|
||||||
<file>fontrendering.c</file>
|
<file>fontrendering.c</file>
|
||||||
<file>gears.c</file>
|
<file>gears.c</file>
|
||||||
<file>gestures.c</file>
|
<file>gestures.c</file>
|
||||||
<file>glarea.c</file>
|
<file>glarea.c</file>
|
||||||
<file>gltransition.c</file>
|
|
||||||
<file>headerbar.c</file>
|
<file>headerbar.c</file>
|
||||||
<file>hypertext.c</file>
|
<file>hypertext.c</file>
|
||||||
<file>iconscroll.c</file>
|
<file>iconscroll.c</file>
|
||||||
@@ -294,45 +216,37 @@
|
|||||||
<file>iconview_edit.c</file>
|
<file>iconview_edit.c</file>
|
||||||
<file>images.c</file>
|
<file>images.c</file>
|
||||||
<file>infobar.c</file>
|
<file>infobar.c</file>
|
||||||
<file>layoutmanager.c</file>
|
|
||||||
<file>layoutmanager2.c</file>
|
|
||||||
<file>links.c</file>
|
<file>links.c</file>
|
||||||
<file>listbox.c</file>
|
<file>listbox.c</file>
|
||||||
<file>listbox_controls.c</file>
|
|
||||||
<file>listview_applauncher.c</file>
|
<file>listview_applauncher.c</file>
|
||||||
<file>listview_colors.c</file>
|
<file>listview_colors.c</file>
|
||||||
<file>listview_clocks.c</file>
|
<file>listview_clocks.c</file>
|
||||||
<file>listview_filebrowser.c</file>
|
<file>listview_filebrowser.c</file>
|
||||||
<file>listview_minesweeper.c</file>
|
<file>listview_minesweeper.c</file>
|
||||||
<file>listview_settings.c</file>
|
<file>listview_settings.c</file>
|
||||||
<file>listview_ucd.c</file>
|
|
||||||
<file>listview_weather.c</file>
|
<file>listview_weather.c</file>
|
||||||
<file>listview_words.c</file>
|
<file>listview_words.c</file>
|
||||||
<file>list_store.c</file>
|
<file>list_store.c</file>
|
||||||
<file>main.c</file>
|
|
||||||
<file>markup.c</file>
|
<file>markup.c</file>
|
||||||
<file>menu.c</file>
|
<file>modelbutton.c</file>
|
||||||
<file>overlay.c</file>
|
<file>overlay.c</file>
|
||||||
<file>overlay_decorative.c</file>
|
<file>overlay2.c</file>
|
||||||
<file>paint.c</file>
|
<file>paint.c</file>
|
||||||
<file>pagesetup.c</file>
|
<file>pagesetup.c</file>
|
||||||
<file>paintable.c</file>
|
<file>paintable.c</file>
|
||||||
<file>paintable_animated.c</file>
|
<file>paintable_animated.c</file>
|
||||||
<file>paintable_emblem.c</file>
|
|
||||||
<file>paintable_mediastream.c</file>
|
<file>paintable_mediastream.c</file>
|
||||||
<file>paintable_svg.c</file>
|
|
||||||
<file>paintable_symbolic.c</file>
|
|
||||||
<file>panes.c</file>
|
<file>panes.c</file>
|
||||||
<file>password_entry.c</file>
|
<file>password_entry.c</file>
|
||||||
<file>peg_solitaire.c</file>
|
<file>peg_solitaire.c</file>
|
||||||
<file>pickers.c</file>
|
<file>pickers.c</file>
|
||||||
|
<file>pixbufs.c</file>
|
||||||
<file>printing.c</file>
|
<file>printing.c</file>
|
||||||
<file>revealer.c</file>
|
<file>revealer.c</file>
|
||||||
<file>rotated_text.c</file>
|
<file>rotated_text.c</file>
|
||||||
<file>scale.c</file>
|
<file>scale.c</file>
|
||||||
<file>search_entry.c</file>
|
<file>search_entry.c</file>
|
||||||
<file>search_entry2.c</file>
|
<file>search_entry2.c</file>
|
||||||
<file>shadertoy.c</file>
|
|
||||||
<file>shortcuts.c</file>
|
<file>shortcuts.c</file>
|
||||||
<file>shortcut_triggers.c</file>
|
<file>shortcut_triggers.c</file>
|
||||||
<file>sizegroup.c</file>
|
<file>sizegroup.c</file>
|
||||||
@@ -364,9 +278,6 @@
|
|||||||
<file>messages.txt</file>
|
<file>messages.txt</file>
|
||||||
<file>apple-red.png</file>
|
<file>apple-red.png</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/listbox_controls">
|
|
||||||
<file>listbox_controls.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/glarea">
|
<gresource prefix="/glarea">
|
||||||
<file>glarea-gl.fs.glsl</file>
|
<file>glarea-gl.fs.glsl</file>
|
||||||
<file>glarea-gl.vs.glsl</file>
|
<file>glarea-gl.vs.glsl</file>
|
||||||
@@ -398,6 +309,9 @@
|
|||||||
<gresource prefix="/scale">
|
<gresource prefix="/scale">
|
||||||
<file>scale.ui</file>
|
<file>scale.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
|
<gresource prefix="/modelbutton">
|
||||||
|
<file>modelbutton.ui</file>
|
||||||
|
</gresource>
|
||||||
<gresource prefix="/tagged_entry">
|
<gresource prefix="/tagged_entry">
|
||||||
<file>demotaggedentry.c</file>
|
<file>demotaggedentry.c</file>
|
||||||
<file>demotaggedentry.h</file>
|
<file>demotaggedentry.h</file>
|
||||||
|
|||||||
@@ -29,24 +29,29 @@
|
|||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_New</attribute>
|
<attribute name="label" translatable="yes">_New</attribute>
|
||||||
<attribute name="action">win.new</attribute>
|
<attribute name="action">win.new</attribute>
|
||||||
|
<attribute name="accel"><Control>n</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Open</attribute>
|
<attribute name="label" translatable="yes">_Open</attribute>
|
||||||
<attribute name="action">win.open</attribute>
|
<attribute name="action">win.open</attribute>
|
||||||
|
<attribute name="accel"><Control>o</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Save</attribute>
|
<attribute name="label" translatable="yes">_Save</attribute>
|
||||||
<attribute name="action">win.save</attribute>
|
<attribute name="action">win.save</attribute>
|
||||||
|
<attribute name="accel"><Control>s</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">Save _As</attribute>
|
<attribute name="label" translatable="yes">Save _As</attribute>
|
||||||
<attribute name="action">win.save-as</attribute>
|
<attribute name="action">win.save-as</attribute>
|
||||||
|
<attribute name="accel"><Control>q</attribute>
|
||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Quit</attribute>
|
<attribute name="label" translatable="yes">_Quit</attribute>
|
||||||
<attribute name="action">win.quit</attribute>
|
<attribute name="action">win.quit</attribute>
|
||||||
|
<attribute name="accel"><Control><Shift>s</attribute>
|
||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
</submenu>
|
</submenu>
|
||||||
@@ -56,14 +61,17 @@
|
|||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Copy</attribute>
|
<attribute name="label" translatable="yes">_Copy</attribute>
|
||||||
<attribute name="action">win.copy</attribute>
|
<attribute name="action">win.copy</attribute>
|
||||||
|
<attribute name="accel"><Control>c</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Cut</attribute>
|
<attribute name="label" translatable="yes">_Cut</attribute>
|
||||||
<attribute name="action">win.cut</attribute>
|
<attribute name="action">win.cut</attribute>
|
||||||
|
<attribute name="accel"><Control>x</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Paste</attribute>
|
<attribute name="label" translatable="yes">_Paste</attribute>
|
||||||
<attribute name="action">win.paste</attribute>
|
<attribute name="action">win.paste</attribute>
|
||||||
|
<attribute name="accel"><Control>v</attribute>
|
||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
</submenu>
|
</submenu>
|
||||||
@@ -73,18 +81,23 @@
|
|||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_Help</attribute>
|
<attribute name="label" translatable="yes">_Help</attribute>
|
||||||
<attribute name="action">win.help</attribute>
|
<attribute name="action">win.help</attribute>
|
||||||
|
<attribute name="accel">F1</attribute>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<attribute name="label" translatable="yes">_About</attribute>
|
<attribute name="label" translatable="yes">_About</attribute>
|
||||||
<attribute name="action">win.about</attribute>
|
<attribute name="action">win.about</attribute>
|
||||||
|
<attribute name="accel">F7</attribute>
|
||||||
</item>
|
</item>
|
||||||
</section>
|
</section>
|
||||||
</submenu>
|
</submenu>
|
||||||
</menu>
|
</menu>
|
||||||
<object class="GtkAboutDialog" id="aboutdialog1">
|
<object class="GtkAboutDialog" id="aboutdialog1">
|
||||||
<property name="program-name" translatable="yes">Builder demo</property>
|
<property name="program-name" translatable="yes">Builder demo</property>
|
||||||
<property name="logo-icon-name" translatable="yes">org.gtk.Demo4</property>
|
<property name="logo-icon-name" translatable="yes">gtk3-demo</property>
|
||||||
<property name="modal">True</property>
|
<property name="modal">True</property>
|
||||||
|
<accessibility>
|
||||||
|
<relation target="window1" type="subwindow-of"/>
|
||||||
|
</accessibility>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkWindow" id="window1">
|
<object class="GtkWindow" id="window1">
|
||||||
<property name="default-height">250</property>
|
<property name="default-height">250</property>
|
||||||
@@ -96,24 +109,20 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkPopoverMenuBar" id="menubar1">
|
<object class="GtkPopoverMenuBar" id="menubar1">
|
||||||
<property name="menu-model">menubar</property>
|
<property name="menu-model">menubar</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Main Menu</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="toolbar1">
|
<object class="GtkBox" id="toolbar1">
|
||||||
<property name="accessible-role">toolbar</property>
|
<child internal-child="accessible">
|
||||||
<property name="css-classes">toolbar</property>
|
<object class="AtkObject" id="a11y-toolbar">
|
||||||
<accessibility>
|
<property name="AtkObject::accessible-name">The toolbar</property>
|
||||||
<property name="label">Toolbar</property>
|
</object>
|
||||||
</accessibility>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
<property name="label" translatable="yes">New</property>
|
<property name="label" translatable="yes">New</property>
|
||||||
<property name="tooltip-text" translatable="yes">Create a new file</property>
|
<property name="tooltip-text" translatable="yes">Create a new file</property>
|
||||||
<property name="icon-name">document-new</property>
|
<property name="icon-name">document-new</property>
|
||||||
<property name="action-name">win.new</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -121,7 +130,6 @@
|
|||||||
<property name="label" translatable="yes">Open</property>
|
<property name="label" translatable="yes">Open</property>
|
||||||
<property name="tooltip-text" translatable="yes">Open a file</property>
|
<property name="tooltip-text" translatable="yes">Open a file</property>
|
||||||
<property name="icon-name">document-open</property>
|
<property name="icon-name">document-open</property>
|
||||||
<property name="action-name">win.open</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -129,7 +137,6 @@
|
|||||||
<property name="label" translatable="yes">Save</property>
|
<property name="label" translatable="yes">Save</property>
|
||||||
<property name="tooltip-text" translatable="yes">Save a file</property>
|
<property name="tooltip-text" translatable="yes">Save a file</property>
|
||||||
<property name="icon-name">document-save</property>
|
<property name="icon-name">document-save</property>
|
||||||
<property name="action-name">win.save</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -140,7 +147,6 @@
|
|||||||
<property name="label" translatable="yes">Copy</property>
|
<property name="label" translatable="yes">Copy</property>
|
||||||
<property name="tooltip-text" translatable="yes">Copy selected object into the clipboard</property>
|
<property name="tooltip-text" translatable="yes">Copy selected object into the clipboard</property>
|
||||||
<property name="icon-name">edit-copy</property>
|
<property name="icon-name">edit-copy</property>
|
||||||
<property name="action-name">win.copy</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -148,7 +154,6 @@
|
|||||||
<property name="label" translatable="yes">Cut</property>
|
<property name="label" translatable="yes">Cut</property>
|
||||||
<property name="tooltip-text" translatable="yes">Cut selected object into the clipboard</property>
|
<property name="tooltip-text" translatable="yes">Cut selected object into the clipboard</property>
|
||||||
<property name="icon-name">edit-cut</property>
|
<property name="icon-name">edit-cut</property>
|
||||||
<property name="action-name">win.cut</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -156,7 +161,6 @@
|
|||||||
<property name="label" translatable="yes">Paste</property>
|
<property name="label" translatable="yes">Paste</property>
|
||||||
<property name="tooltip-text" translatable="yes">Paste object from the clipboard</property>
|
<property name="tooltip-text" translatable="yes">Paste object from the clipboard</property>
|
||||||
<property name="icon-name">edit-paste</property>
|
<property name="icon-name">edit-paste</property>
|
||||||
<property name="action-name">win.paste</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -170,6 +174,14 @@
|
|||||||
<object class="GtkTreeView" id="treeview1">
|
<object class="GtkTreeView" id="treeview1">
|
||||||
<property name="model">liststore1</property>
|
<property name="model">liststore1</property>
|
||||||
<property name="tooltip-column">3</property>
|
<property name="tooltip-column">3</property>
|
||||||
|
<child internal-child="accessible">
|
||||||
|
<object class="AtkObject" id="a11y-treeview">
|
||||||
|
<property name="AtkObject::accessible-name">Name list</property>
|
||||||
|
<property name="AtkObject::accessible-description">
|
||||||
|
A list of person with name, surname and age columns
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTreeViewColumn" id="column1">
|
<object class="GtkTreeViewColumn" id="column1">
|
||||||
<property name="title">Name</property>
|
<property name="title">Name</property>
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
#include "demo2layout.h"
|
|
||||||
#include "four_point_transform.h"
|
|
||||||
|
|
||||||
struct _Demo2Layout
|
|
||||||
{
|
|
||||||
GtkLayoutManager parent_instance;
|
|
||||||
|
|
||||||
float position;
|
|
||||||
float offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Demo2LayoutClass
|
|
||||||
{
|
|
||||||
GtkLayoutManagerClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (Demo2Layout, demo2_layout, GTK_TYPE_LAYOUT_MANAGER)
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_layout_measure (GtkLayoutManager *layout_manager,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum,
|
|
||||||
int *natural,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
int minimum_size = 0;
|
|
||||||
int natural_size = 0;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
int child_min = 0, child_nat = 0;
|
|
||||||
|
|
||||||
if (!gtk_widget_should_layout (child))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gtk_widget_measure (child, orientation, -1,
|
|
||||||
&child_min, &child_nat,
|
|
||||||
NULL, NULL);
|
|
||||||
minimum_size = MAX (minimum_size, child_min);
|
|
||||||
natural_size = MAX (natural_size, child_nat);
|
|
||||||
}
|
|
||||||
|
|
||||||
*minimum = minimum_size;
|
|
||||||
*natural = 3 * natural_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define RADIANS(angle) ((angle)*M_PI/180.0);
|
|
||||||
|
|
||||||
/* Spherical coordinates */
|
|
||||||
#define SX(r,t,p) ((r) * sin (t) * cos (p))
|
|
||||||
#define SZ(r,t,p) ((r) * sin (t) * sin (p))
|
|
||||||
#define SY(r,t,p) ((r) * cos (t))
|
|
||||||
|
|
||||||
static double
|
|
||||||
map_offset (double x)
|
|
||||||
{
|
|
||||||
x = fmod (x, 180.0);
|
|
||||||
if (x < 0.0)
|
|
||||||
x += 180.0;
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_layout_allocate (GtkLayoutManager *layout_manager,
|
|
||||||
GtkWidget *widget,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
int baseline)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
GtkRequisition child_req;
|
|
||||||
int i, j, k;
|
|
||||||
float x0, y0;
|
|
||||||
float w, h;
|
|
||||||
graphene_point3d_t p1, p2, p3, p4;
|
|
||||||
graphene_point3d_t q1, q2, q3, q4;
|
|
||||||
double t_1, t_2, p_1, p_2;
|
|
||||||
double r;
|
|
||||||
graphene_matrix_t m;
|
|
||||||
GskTransform *transform;
|
|
||||||
double position = DEMO2_LAYOUT (layout_manager)->position;
|
|
||||||
double offset = DEMO2_LAYOUT (layout_manager)->offset;
|
|
||||||
|
|
||||||
/* for simplicity, assume all children are the same size */
|
|
||||||
gtk_widget_get_preferred_size (gtk_widget_get_first_child (widget), &child_req, NULL);
|
|
||||||
w = child_req.width;
|
|
||||||
h = child_req.height;
|
|
||||||
|
|
||||||
r = 300;
|
|
||||||
x0 = y0 = 300;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget), i = 0;
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child), i++)
|
|
||||||
{
|
|
||||||
j = i / 36;
|
|
||||||
k = i % 36;
|
|
||||||
|
|
||||||
gtk_widget_set_child_visible (child, FALSE);
|
|
||||||
|
|
||||||
graphene_point3d_init (&p1, w, h, 1.);
|
|
||||||
graphene_point3d_init (&p2, w, 0., 1.);
|
|
||||||
graphene_point3d_init (&p3, 0., 0., 1.);
|
|
||||||
graphene_point3d_init (&p4, 0., h, 1.);
|
|
||||||
|
|
||||||
t_1 = RADIANS (map_offset (offset + 10 * j));
|
|
||||||
t_2 = RADIANS (map_offset (offset + 10 * (j + 1)));
|
|
||||||
p_1 = RADIANS (position + 10 * k);
|
|
||||||
p_2 = RADIANS (position + 10 * (k + 1));
|
|
||||||
|
|
||||||
if (t_2 < t_1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (SZ (r, t_1, p_1) > 0 ||
|
|
||||||
SZ (r, t_2, p_1) > 0 ||
|
|
||||||
SZ (r, t_1, p_2) > 0 ||
|
|
||||||
SZ (r, t_2, p_2) > 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gtk_widget_set_child_visible (child, TRUE);
|
|
||||||
|
|
||||||
graphene_point3d_init (&q1, x0 + SX (r, t_1, p_1), y0 + SY (r, t_1, p_1), SZ (r, t_1, p_1));
|
|
||||||
graphene_point3d_init (&q2, x0 + SX (r, t_2, p_1), y0 + SY (r, t_2, p_1), SZ (r, t_2, p_1));
|
|
||||||
graphene_point3d_init (&q3, x0 + SX (r, t_2, p_2), y0 + SY (r, t_2, p_2), SZ (r, t_2, p_2));
|
|
||||||
graphene_point3d_init (&q4, x0 + SX (r, t_1, p_2), y0 + SY (r, t_1, p_2), SZ (r, t_1, p_2));
|
|
||||||
|
|
||||||
/* Get a matrix that moves p1 -> q1, p2 -> q2, ... */
|
|
||||||
perspective_3d (&p1, &p2, &p3, &p4,
|
|
||||||
&q1, &q2, &q3, &q4,
|
|
||||||
&m);
|
|
||||||
|
|
||||||
transform = gsk_transform_matrix (NULL, &m);
|
|
||||||
|
|
||||||
/* Since our matrix was built for transforming points with z = 1,
|
|
||||||
* prepend a translation to the z = 1 plane.
|
|
||||||
*/
|
|
||||||
transform = gsk_transform_translate_3d (transform,
|
|
||||||
&GRAPHENE_POINT3D_INIT (0, 0, 1));
|
|
||||||
|
|
||||||
gtk_widget_allocate (child, w, h, -1, transform);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkSizeRequestMode
|
|
||||||
demo2_layout_get_request_mode (GtkLayoutManager *layout_manager,
|
|
||||||
GtkWidget *widget)
|
|
||||||
{
|
|
||||||
return GTK_SIZE_REQUEST_CONSTANT_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_layout_class_init (Demo2LayoutClass *klass)
|
|
||||||
{
|
|
||||||
GtkLayoutManagerClass *layout_class = GTK_LAYOUT_MANAGER_CLASS (klass);
|
|
||||||
|
|
||||||
layout_class->get_request_mode = demo2_layout_get_request_mode;
|
|
||||||
layout_class->measure = demo2_layout_measure;
|
|
||||||
layout_class->allocate = demo2_layout_allocate;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_layout_init (Demo2Layout *self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkLayoutManager *
|
|
||||||
demo2_layout_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (DEMO2_TYPE_LAYOUT, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
demo2_layout_set_position (Demo2Layout *layout,
|
|
||||||
float position)
|
|
||||||
{
|
|
||||||
layout->position = position;
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
|
||||||
demo2_layout_get_position (Demo2Layout *layout)
|
|
||||||
{
|
|
||||||
return layout->position;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
demo2_layout_set_offset (Demo2Layout *layout,
|
|
||||||
float offset)
|
|
||||||
{
|
|
||||||
layout->offset = offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
|
||||||
demo2_layout_get_offset (Demo2Layout *layout)
|
|
||||||
{
|
|
||||||
return layout->offset;
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define DEMO2_TYPE_LAYOUT (demo2_layout_get_type ())
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (Demo2Layout, demo2_layout, DEMO2, LAYOUT, GtkLayoutManager)
|
|
||||||
|
|
||||||
GtkLayoutManager * demo2_layout_new (void);
|
|
||||||
|
|
||||||
void demo2_layout_set_position (Demo2Layout *layout,
|
|
||||||
float position);
|
|
||||||
float demo2_layout_get_position (Demo2Layout *layout);
|
|
||||||
void demo2_layout_set_offset (Demo2Layout *layout,
|
|
||||||
float offset);
|
|
||||||
float demo2_layout_get_offset (Demo2Layout *layout);
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
#include "demo2widget.h"
|
|
||||||
#include "demo2layout.h"
|
|
||||||
|
|
||||||
struct _Demo2Widget
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
|
|
||||||
gint64 start_time;
|
|
||||||
gint64 end_time;
|
|
||||||
float start_position;
|
|
||||||
float end_position;
|
|
||||||
float start_offset;
|
|
||||||
float end_offset;
|
|
||||||
gboolean animating;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Demo2WidgetClass
|
|
||||||
{
|
|
||||||
GtkWidgetClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (Demo2Widget, demo2_widget, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_widget_init (Demo2Widget *self)
|
|
||||||
{
|
|
||||||
gtk_widget_set_focusable (GTK_WIDGET (self), TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_widget_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
while ((child = gtk_widget_get_first_child (GTK_WIDGET (object))))
|
|
||||||
gtk_widget_unparent (child);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (demo2_widget_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* From clutter-easing.c, based on Robert Penner's
|
|
||||||
* infamous easing equations, MIT license.
|
|
||||||
*/
|
|
||||||
static double
|
|
||||||
ease_out_cubic (double t)
|
|
||||||
{
|
|
||||||
double p = t - 1;
|
|
||||||
|
|
||||||
return p * p * p + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
update_position (GtkWidget *widget,
|
|
||||||
GdkFrameClock *clock,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
Demo2Widget *self = DEMO2_WIDGET (widget);
|
|
||||||
Demo2Layout *layout = DEMO2_LAYOUT (gtk_widget_get_layout_manager (widget));
|
|
||||||
gint64 now;
|
|
||||||
double t;
|
|
||||||
|
|
||||||
now = gdk_frame_clock_get_frame_time (clock);
|
|
||||||
|
|
||||||
if (now >= self->end_time)
|
|
||||||
{
|
|
||||||
self->animating = FALSE;
|
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
t = (now - self->start_time) / (double) (self->end_time - self->start_time);
|
|
||||||
|
|
||||||
t = ease_out_cubic (t);
|
|
||||||
|
|
||||||
demo2_layout_set_position (layout, self->start_position + t * (self->end_position - self->start_position));
|
|
||||||
demo2_layout_set_offset (layout, self->start_offset + t * (self->end_offset - self->start_offset));
|
|
||||||
gtk_widget_queue_allocate (widget);
|
|
||||||
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
rotate_sphere (GtkWidget *widget,
|
|
||||||
const char *action,
|
|
||||||
GVariant *parameters)
|
|
||||||
{
|
|
||||||
Demo2Widget *self = DEMO2_WIDGET (widget);
|
|
||||||
Demo2Layout *layout = DEMO2_LAYOUT (gtk_widget_get_layout_manager (widget));
|
|
||||||
GtkOrientation orientation;
|
|
||||||
int direction;
|
|
||||||
|
|
||||||
g_variant_get (parameters, "(ii)", &orientation, &direction);
|
|
||||||
|
|
||||||
self->end_position = self->start_position = demo2_layout_get_position (layout);
|
|
||||||
self->end_offset = self->start_offset = demo2_layout_get_offset (layout);
|
|
||||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
|
||||||
self->end_position += 10 * direction;
|
|
||||||
else
|
|
||||||
self->end_offset += 10 * direction;
|
|
||||||
self->start_time = g_get_monotonic_time ();
|
|
||||||
self->end_time = self->start_time + 0.5 * G_TIME_SPAN_SECOND;
|
|
||||||
|
|
||||||
if (!self->animating)
|
|
||||||
{
|
|
||||||
gtk_widget_add_tick_callback (widget, update_position, NULL, NULL);
|
|
||||||
self->animating = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_widget_snapshot (GtkWidget *widget,
|
|
||||||
GtkSnapshot *snapshot)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
/* our layout manager sets this for children that are out of view */
|
|
||||||
if (!gtk_widget_get_child_visible (child))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gtk_widget_snapshot_child (widget, child, snapshot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo2_widget_class_init (Demo2WidgetClass *class)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
object_class->dispose = demo2_widget_dispose;
|
|
||||||
|
|
||||||
widget_class->snapshot = demo2_widget_snapshot;
|
|
||||||
|
|
||||||
gtk_widget_class_install_action (widget_class, "rotate", "(ii)", rotate_sphere);
|
|
||||||
|
|
||||||
gtk_widget_class_add_binding_action (widget_class,
|
|
||||||
GDK_KEY_Left, 0,
|
|
||||||
"rotate",
|
|
||||||
"(ii)", GTK_ORIENTATION_HORIZONTAL, -1);
|
|
||||||
gtk_widget_class_add_binding_action (widget_class,
|
|
||||||
GDK_KEY_Right, 0,
|
|
||||||
"rotate",
|
|
||||||
"(ii)", GTK_ORIENTATION_HORIZONTAL, 1);
|
|
||||||
gtk_widget_class_add_binding_action (widget_class,
|
|
||||||
GDK_KEY_Up, 0,
|
|
||||||
"rotate",
|
|
||||||
"(ii)", GTK_ORIENTATION_VERTICAL, 1);
|
|
||||||
gtk_widget_class_add_binding_action (widget_class,
|
|
||||||
GDK_KEY_Down, 0,
|
|
||||||
"rotate",
|
|
||||||
"(ii)", GTK_ORIENTATION_VERTICAL, -1);
|
|
||||||
|
|
||||||
/* here is where we use our custom layout manager */
|
|
||||||
gtk_widget_class_set_layout_manager_type (widget_class, DEMO2_TYPE_LAYOUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
demo2_widget_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (DEMO2_TYPE_WIDGET, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
demo2_widget_add_child (Demo2Widget *self,
|
|
||||||
GtkWidget *child)
|
|
||||||
{
|
|
||||||
gtk_widget_set_parent (child, GTK_WIDGET (self));
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define DEMO2_TYPE_WIDGET (demo2_widget_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (Demo2Widget, demo2_widget, DEMO2, WIDGET, GtkWidget)
|
|
||||||
|
|
||||||
GtkWidget * demo2_widget_new (void);
|
|
||||||
|
|
||||||
void demo2_widget_add_child (Demo2Widget *self,
|
|
||||||
GtkWidget *child);
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
#include <math.h>
|
|
||||||
#include "demo3widget.h"
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
PROP_PAINTABLE = 1,
|
|
||||||
PROP_SCALE
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Demo3Widget
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
float scale;
|
|
||||||
|
|
||||||
GtkWidget *menu;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Demo3WidgetClass
|
|
||||||
{
|
|
||||||
GtkWidgetClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (Demo3Widget, demo3_widget, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_init (Demo3Widget *self)
|
|
||||||
{
|
|
||||||
self->scale = 1.f;
|
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (object);
|
|
||||||
|
|
||||||
g_clear_object (&self->paintable);
|
|
||||||
g_clear_pointer (&self->menu, gtk_widget_unparent);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (demo3_widget_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_snapshot (GtkWidget *widget,
|
|
||||||
GtkSnapshot *snapshot)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (widget);
|
|
||||||
int x, y, width, height;
|
|
||||||
double w, h;
|
|
||||||
|
|
||||||
width = gtk_widget_get_width (widget);
|
|
||||||
height = gtk_widget_get_height (widget);
|
|
||||||
|
|
||||||
w = self->scale * gdk_paintable_get_intrinsic_width (self->paintable);
|
|
||||||
h = self->scale * gdk_paintable_get_intrinsic_height (self->paintable);
|
|
||||||
|
|
||||||
x = MAX (0, (width - ceil (w)) / 2);
|
|
||||||
y = MAX (0, (height - ceil (h)) / 2);
|
|
||||||
|
|
||||||
gtk_snapshot_push_clip (snapshot, &GRAPHENE_RECT_INIT (0, 0, width, height));
|
|
||||||
gtk_snapshot_save (snapshot);
|
|
||||||
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y));
|
|
||||||
gdk_paintable_snapshot (self->paintable, snapshot, w, h);
|
|
||||||
gtk_snapshot_restore (snapshot);
|
|
||||||
gtk_snapshot_pop (snapshot);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_measure (GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum,
|
|
||||||
int *natural,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (widget);
|
|
||||||
int size;
|
|
||||||
|
|
||||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
|
||||||
size = gdk_paintable_get_intrinsic_width (self->paintable);
|
|
||||||
else
|
|
||||||
size = gdk_paintable_get_intrinsic_height (self->paintable);
|
|
||||||
|
|
||||||
*minimum = *natural = self->scale * size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_size_allocate (GtkWidget *widget,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
int baseline)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (widget);
|
|
||||||
|
|
||||||
/* Since we are not using a layout manager (who would do this
|
|
||||||
* for us), we need to allocate a size for our menu by calling
|
|
||||||
* gtk_popover_present().
|
|
||||||
*/
|
|
||||||
gtk_popover_present (GTK_POPOVER (self->menu));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_set_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (object);
|
|
||||||
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
case PROP_PAINTABLE:
|
|
||||||
g_clear_object (&self->paintable);
|
|
||||||
self->paintable = g_value_dup_object (value);
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (object));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SCALE:
|
|
||||||
self->scale = g_value_get_float (value);
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (object));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_get_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (object);
|
|
||||||
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
case PROP_PAINTABLE:
|
|
||||||
g_value_set_object (value, self->paintable);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SCALE:
|
|
||||||
g_value_set_float (value, self->scale);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pressed_cb (GtkGestureClick *gesture,
|
|
||||||
guint n_press,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
Demo3Widget *self)
|
|
||||||
{
|
|
||||||
/* We are placing our menu at the point where
|
|
||||||
* the click happened, before popping it up.
|
|
||||||
*/
|
|
||||||
gtk_popover_set_pointing_to (GTK_POPOVER (self->menu),
|
|
||||||
&(const GdkRectangle){ x, y, 1, 1 });
|
|
||||||
gtk_popover_popup (GTK_POPOVER (self->menu));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
zoom_cb (GtkWidget *widget,
|
|
||||||
const char *action_name,
|
|
||||||
GVariant *parameter)
|
|
||||||
{
|
|
||||||
Demo3Widget *self = DEMO3_WIDGET (widget);
|
|
||||||
float scale;
|
|
||||||
|
|
||||||
if (g_str_equal (action_name, "zoom.in"))
|
|
||||||
scale = MIN (10, self->scale * M_SQRT2);
|
|
||||||
else if (g_str_equal (action_name, "zoom.out"))
|
|
||||||
scale = MAX (0.01, self->scale / M_SQRT2);
|
|
||||||
else
|
|
||||||
scale = 1.0;
|
|
||||||
|
|
||||||
gtk_widget_action_set_enabled (widget, "zoom.in", scale < 10);
|
|
||||||
gtk_widget_action_set_enabled (widget, "zoom.out", scale > 0.01);
|
|
||||||
gtk_widget_action_set_enabled (widget, "zoom.reset", scale != 1);
|
|
||||||
|
|
||||||
g_object_set (widget, "scale", scale, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo3_widget_class_init (Demo3WidgetClass *class)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
object_class->dispose = demo3_widget_dispose;
|
|
||||||
object_class->set_property = demo3_widget_set_property;
|
|
||||||
object_class->get_property = demo3_widget_get_property;
|
|
||||||
|
|
||||||
widget_class->snapshot = demo3_widget_snapshot;
|
|
||||||
widget_class->measure = demo3_widget_measure;
|
|
||||||
widget_class->size_allocate = demo3_widget_size_allocate;
|
|
||||||
|
|
||||||
g_object_class_install_property (object_class, PROP_PAINTABLE,
|
|
||||||
g_param_spec_object ("paintable", "Paintable", "Paintable",
|
|
||||||
GDK_TYPE_PAINTABLE,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
g_object_class_install_property (object_class, PROP_SCALE,
|
|
||||||
g_param_spec_float ("scale", "Scale", "Scale",
|
|
||||||
0.0, 10.0, 1.0,
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
/* These are the actions that we are using in the menu */
|
|
||||||
gtk_widget_class_install_action (widget_class, "zoom.in", NULL, zoom_cb);
|
|
||||||
gtk_widget_class_install_action (widget_class, "zoom.out", NULL, zoom_cb);
|
|
||||||
gtk_widget_class_install_action (widget_class, "zoom.reset", NULL, zoom_cb);
|
|
||||||
|
|
||||||
gtk_widget_class_set_template_from_resource (widget_class, "/menu/demo3widget.ui");
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, Demo3Widget, menu);
|
|
||||||
gtk_widget_class_bind_template_callback (widget_class, pressed_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
demo3_widget_new (const char *resource)
|
|
||||||
{
|
|
||||||
Demo3Widget *self;
|
|
||||||
GdkPixbuf *pixbuf;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_new_from_resource (resource, NULL);
|
|
||||||
paintable = GDK_PAINTABLE (gdk_texture_new_for_pixbuf (pixbuf));
|
|
||||||
|
|
||||||
self = g_object_new (DEMO3_TYPE_WIDGET, "paintable", paintable, NULL);
|
|
||||||
|
|
||||||
g_object_unref (pixbuf);
|
|
||||||
g_object_unref (paintable);
|
|
||||||
|
|
||||||
return GTK_WIDGET (self);
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define DEMO3_TYPE_WIDGET (demo3_widget_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (Demo3Widget, demo3_widget, DEMO3, WIDGET, GtkWidget)
|
|
||||||
|
|
||||||
GtkWidget * demo3_widget_new (const char *resource);
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<interface>
|
|
||||||
<menu id="model">
|
|
||||||
<item>
|
|
||||||
<attribute name="label">Zoom Out</attribute>
|
|
||||||
<attribute name="action">zoom.out</attribute>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<attribute name="label">Zoom In</attribute>
|
|
||||||
<attribute name="action">zoom.in</attribute>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<attribute name="label">1∶1</attribute>
|
|
||||||
<attribute name="action">zoom.reset</attribute>
|
|
||||||
</item>
|
|
||||||
</menu>
|
|
||||||
<template class="Demo3Widget">
|
|
||||||
<child>
|
|
||||||
<object class="GtkPopoverMenu" id="menu">
|
|
||||||
<property name="has-arrow">0</property>
|
|
||||||
<property name="menu-model">model</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkGestureClick">
|
|
||||||
<property name="button">3</property>
|
|
||||||
<signal name="pressed" handler="pressed_cb"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</template>
|
|
||||||
</interface>
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
#include "demochild.h"
|
|
||||||
|
|
||||||
/* This is a trivial child widget just for demo purposes.
|
|
||||||
* It draws a 32x32 square in fixed color.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct _DemoChild
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
GdkRGBA color;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _DemoChildClass
|
|
||||||
{
|
|
||||||
GtkWidgetClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (DemoChild, demo_child, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_child_init (DemoChild *self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_child_snapshot (GtkWidget *widget,
|
|
||||||
GtkSnapshot *snapshot)
|
|
||||||
{
|
|
||||||
DemoChild *self = DEMO_CHILD (widget);
|
|
||||||
int width, height;
|
|
||||||
|
|
||||||
width = gtk_widget_get_width (widget);
|
|
||||||
height = gtk_widget_get_height (widget);
|
|
||||||
|
|
||||||
gtk_snapshot_append_color (snapshot, &self->color,
|
|
||||||
&GRAPHENE_RECT_INIT(0, 0, width, height));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_child_measure (GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum,
|
|
||||||
int *natural,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
*minimum = *natural = 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_child_class_init (DemoChildClass *class)
|
|
||||||
{
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
widget_class->snapshot = demo_child_snapshot;
|
|
||||||
widget_class->measure = demo_child_measure;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
demo_child_new (const char *color)
|
|
||||||
{
|
|
||||||
DemoChild *self;
|
|
||||||
|
|
||||||
self = g_object_new (DEMO_TYPE_CHILD,
|
|
||||||
"tooltip-text", color,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gdk_rgba_parse (&self->color, color);
|
|
||||||
|
|
||||||
return GTK_WIDGET (self);
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define DEMO_TYPE_CHILD (demo_child_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (DemoChild, demo_child, DEMO, CHILD, GtkWidget)
|
|
||||||
|
|
||||||
GtkWidget * demo_child_new (const char *color);
|
|
||||||
@@ -17,7 +17,7 @@ G_DEFINE_TYPE(DemoImage, demo_image, GTK_TYPE_WIDGET)
|
|||||||
static GdkPaintable *
|
static GdkPaintable *
|
||||||
get_image_paintable (GtkImage *image)
|
get_image_paintable (GtkImage *image)
|
||||||
{
|
{
|
||||||
const char *icon_name;
|
const gchar *icon_name;
|
||||||
GtkIconTheme *icon_theme;
|
GtkIconTheme *icon_theme;
|
||||||
GtkIconPaintable *icon;
|
GtkIconPaintable *icon;
|
||||||
|
|
||||||
@@ -47,38 +47,6 @@ get_image_paintable (GtkImage *image)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
update_drag_icon (DemoImage *demo,
|
|
||||||
GtkDragIcon *icon)
|
|
||||||
{
|
|
||||||
const char *icon_name;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
GtkWidget *image;
|
|
||||||
|
|
||||||
switch (gtk_image_get_storage_type (GTK_IMAGE (demo->image)))
|
|
||||||
{
|
|
||||||
case GTK_IMAGE_PAINTABLE:
|
|
||||||
paintable = gtk_image_get_paintable (GTK_IMAGE (demo->image));
|
|
||||||
image = gtk_image_new_from_paintable (paintable);
|
|
||||||
break;
|
|
||||||
case GTK_IMAGE_ICON_NAME:
|
|
||||||
icon_name = gtk_image_get_icon_name (GTK_IMAGE (demo->image));
|
|
||||||
image = gtk_image_new_from_icon_name (icon_name);
|
|
||||||
break;
|
|
||||||
case GTK_IMAGE_EMPTY:
|
|
||||||
case GTK_IMAGE_GICON:
|
|
||||||
default:
|
|
||||||
g_warning ("Image storage type %d not handled",
|
|
||||||
gtk_image_get_storage_type (GTK_IMAGE (demo->image)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_image_set_pixel_size (GTK_IMAGE (image),
|
|
||||||
gtk_image_get_pixel_size (GTK_IMAGE (demo->image)));
|
|
||||||
|
|
||||||
gtk_drag_icon_set_child (icon, image);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drag_begin (GtkDragSource *source,
|
drag_begin (GtkDragSource *source,
|
||||||
GdkDrag *drag,
|
GdkDrag *drag,
|
||||||
@@ -86,8 +54,14 @@ drag_begin (GtkDragSource *source,
|
|||||||
{
|
{
|
||||||
GtkWidget *widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (source));
|
GtkWidget *widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (source));
|
||||||
DemoImage *demo = DEMO_IMAGE (widget);
|
DemoImage *demo = DEMO_IMAGE (widget);
|
||||||
|
GdkPaintable *paintable;
|
||||||
|
|
||||||
update_drag_icon (demo, GTK_DRAG_ICON (gtk_drag_icon_get_for_drag (drag)));
|
paintable = get_image_paintable (GTK_IMAGE (demo->image));
|
||||||
|
if (paintable)
|
||||||
|
{
|
||||||
|
gtk_drag_icon_set_from_paintable (drag, paintable, -2, -2);
|
||||||
|
g_object_unref (paintable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkContentProvider *
|
static GdkContentProvider *
|
||||||
@@ -100,11 +74,7 @@ prepare_drag (GtkDragSource *source,
|
|||||||
DemoImage *demo = DEMO_IMAGE (widget);
|
DemoImage *demo = DEMO_IMAGE (widget);
|
||||||
GdkPaintable *paintable = get_image_paintable (GTK_IMAGE (demo->image));
|
GdkPaintable *paintable = get_image_paintable (GTK_IMAGE (demo->image));
|
||||||
|
|
||||||
/* Textures can be serialized, paintables can't, so special case the textures */
|
return gdk_content_provider_new_typed (GDK_TYPE_PAINTABLE, paintable);
|
||||||
if (GDK_IS_TEXTURE (paintable))
|
|
||||||
return gdk_content_provider_new_typed (GDK_TYPE_TEXTURE, paintable);
|
|
||||||
else
|
|
||||||
return gdk_content_provider_new_typed (GDK_TYPE_PAINTABLE, paintable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -133,11 +103,7 @@ copy_image (GtkWidget *widget,
|
|||||||
GdkPaintable *paintable = get_image_paintable (GTK_IMAGE (demo->image));
|
GdkPaintable *paintable = get_image_paintable (GTK_IMAGE (demo->image));
|
||||||
GValue value = G_VALUE_INIT;
|
GValue value = G_VALUE_INIT;
|
||||||
|
|
||||||
/* Textures can be serialized, paintables can't, so special case the textures */
|
g_value_init (&value, GDK_TYPE_PAINTABLE);
|
||||||
if (GDK_IS_TEXTURE (paintable))
|
|
||||||
g_value_init (&value, GDK_TYPE_TEXTURE);
|
|
||||||
else
|
|
||||||
g_value_init (&value, GDK_TYPE_PAINTABLE);
|
|
||||||
g_value_set_object (&value, paintable);
|
g_value_set_object (&value, paintable);
|
||||||
gdk_clipboard_set_value (clipboard, &value);
|
gdk_clipboard_set_value (clipboard, &value);
|
||||||
g_value_unset (&value);
|
g_value_unset (&value);
|
||||||
@@ -146,46 +112,24 @@ copy_image (GtkWidget *widget,
|
|||||||
g_object_unref (paintable);
|
g_object_unref (paintable);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
paste_image_cb (GObject *source,
|
|
||||||
GAsyncResult *result,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
GdkClipboard *clipboard = GDK_CLIPBOARD (source);
|
|
||||||
DemoImage *demo = DEMO_IMAGE (data);
|
|
||||||
const GValue *value;
|
|
||||||
|
|
||||||
value = gdk_clipboard_read_value_finish (clipboard, result, NULL);
|
|
||||||
if (value == NULL)
|
|
||||||
{
|
|
||||||
gtk_widget_error_bell (GTK_WIDGET (demo));
|
|
||||||
g_object_unref (demo);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_image_set_from_paintable (GTK_IMAGE (demo->image), g_value_get_object (value));
|
|
||||||
g_object_unref (demo);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
paste_image (GtkWidget *widget,
|
paste_image (GtkWidget *widget,
|
||||||
const char *action_name,
|
const char *action_name,
|
||||||
GVariant *parameter)
|
GVariant *parameter)
|
||||||
{
|
{
|
||||||
GdkClipboard *clipboard = gtk_widget_get_clipboard (widget);
|
GdkClipboard *clipboard = gtk_widget_get_clipboard (widget);
|
||||||
GType type;
|
DemoImage *demo = DEMO_IMAGE (widget);
|
||||||
|
GdkContentProvider *content = gdk_clipboard_get_content (clipboard);
|
||||||
|
GValue value = G_VALUE_INIT;
|
||||||
|
GdkPaintable *paintable;
|
||||||
|
|
||||||
if (gdk_content_formats_contain_gtype (gdk_clipboard_get_formats (clipboard), GDK_TYPE_TEXTURE))
|
g_value_init (&value, GDK_TYPE_PAINTABLE);
|
||||||
type = GDK_TYPE_TEXTURE;
|
if (!gdk_content_provider_get_value (content, &value, NULL))
|
||||||
else
|
return;
|
||||||
type = GDK_TYPE_PAINTABLE;
|
|
||||||
|
|
||||||
gdk_clipboard_read_value_async (clipboard,
|
paintable = GDK_PAINTABLE (g_value_get_object (&value));
|
||||||
type,
|
gtk_image_set_from_paintable (GTK_IMAGE (demo->image), paintable);
|
||||||
G_PRIORITY_DEFAULT,
|
g_value_unset (&value);
|
||||||
NULL,
|
|
||||||
paste_image_cb,
|
|
||||||
g_object_ref (widget));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -1,189 +0,0 @@
|
|||||||
#include "demolayout.h"
|
|
||||||
|
|
||||||
struct _DemoLayout
|
|
||||||
{
|
|
||||||
GtkLayoutManager parent_instance;
|
|
||||||
|
|
||||||
float position;
|
|
||||||
int pos[16];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _DemoLayoutClass
|
|
||||||
{
|
|
||||||
GtkLayoutManagerClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (DemoLayout, demo_layout, GTK_TYPE_LAYOUT_MANAGER)
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_layout_measure (GtkLayoutManager *layout_manager,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum,
|
|
||||||
int *natural,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
int minimum_size = 0;
|
|
||||||
int natural_size = 0;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
int child_min = 0, child_nat = 0;
|
|
||||||
|
|
||||||
if (!gtk_widget_should_layout (child))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gtk_widget_measure (child, orientation, -1,
|
|
||||||
&child_min, &child_nat,
|
|
||||||
NULL, NULL);
|
|
||||||
minimum_size = MAX (minimum_size, child_min);
|
|
||||||
natural_size = MAX (natural_size, child_nat);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A back-of-a-napkin calculation to reserve enough
|
|
||||||
* space for arranging 16 children in a circle.
|
|
||||||
*/
|
|
||||||
*minimum = 16 * minimum_size / G_PI + minimum_size;
|
|
||||||
*natural = 16 * natural_size / G_PI + natural_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_layout_allocate (GtkLayoutManager *layout_manager,
|
|
||||||
GtkWidget *widget,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
int baseline)
|
|
||||||
{
|
|
||||||
DemoLayout *self = DEMO_LAYOUT (layout_manager);
|
|
||||||
GtkWidget *child;
|
|
||||||
int i;
|
|
||||||
int child_width = 0;
|
|
||||||
int child_height = 0;
|
|
||||||
int x0, y0;
|
|
||||||
float r;
|
|
||||||
float t;
|
|
||||||
|
|
||||||
t = self->position;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
GtkRequisition child_req;
|
|
||||||
|
|
||||||
if (!gtk_widget_should_layout (child))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (child, &child_req, NULL);
|
|
||||||
|
|
||||||
child_width = MAX (child_width, child_req.width);
|
|
||||||
child_height = MAX (child_height, child_req.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the center of our layout */
|
|
||||||
x0 = (width / 2);
|
|
||||||
y0 = (height / 2);
|
|
||||||
|
|
||||||
/* the radius for our circle of children */
|
|
||||||
r = 8 * child_width / G_PI;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget), i = 0;
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child), i++)
|
|
||||||
{
|
|
||||||
GtkRequisition child_req;
|
|
||||||
float a = self->pos[i] * G_PI / 8;
|
|
||||||
int gx, gy;
|
|
||||||
int cx, cy;
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
if (!gtk_widget_should_layout (child))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (child, &child_req, NULL);
|
|
||||||
|
|
||||||
/* The grid position of child. */
|
|
||||||
gx = x0 + (i % 4 - 2) * child_width;
|
|
||||||
gy = y0 + (i / 4 - 2) * child_height;
|
|
||||||
|
|
||||||
/* The circle position of child. Note that we
|
|
||||||
* are adjusting the position by half the child size
|
|
||||||
* to place the center of child on a centered circle.
|
|
||||||
* This assumes that the children don't use align flags
|
|
||||||
* or uneven margins that would shift the center.
|
|
||||||
*/
|
|
||||||
cx = x0 + sin (a) * r - child_req.width / 2;
|
|
||||||
cy = y0 + cos (a) * r - child_req.height / 2;
|
|
||||||
|
|
||||||
/* we interpolate between the two layouts according to
|
|
||||||
* the position value that has been set on the layout.
|
|
||||||
*/
|
|
||||||
x = t * cx + (1 - t) * gx;
|
|
||||||
y = t * cy + (1 - t) * gy;
|
|
||||||
|
|
||||||
gtk_widget_size_allocate (child,
|
|
||||||
&(const GtkAllocation){ x, y, child_width, child_height},
|
|
||||||
-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkSizeRequestMode
|
|
||||||
demo_layout_get_request_mode (GtkLayoutManager *layout_manager,
|
|
||||||
GtkWidget *widget)
|
|
||||||
{
|
|
||||||
return GTK_SIZE_REQUEST_CONSTANT_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_layout_class_init (DemoLayoutClass *klass)
|
|
||||||
{
|
|
||||||
GtkLayoutManagerClass *layout_class = GTK_LAYOUT_MANAGER_CLASS (klass);
|
|
||||||
|
|
||||||
layout_class->get_request_mode = demo_layout_get_request_mode;
|
|
||||||
layout_class->measure = demo_layout_measure;
|
|
||||||
layout_class->allocate = demo_layout_allocate;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_layout_init (DemoLayout *self)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
self->pos[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkLayoutManager *
|
|
||||||
demo_layout_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (DEMO_TYPE_LAYOUT, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
demo_layout_set_position (DemoLayout *layout,
|
|
||||||
float position)
|
|
||||||
{
|
|
||||||
layout->position = position;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Shuffle the circle positions of the children.
|
|
||||||
* Should be called when we are in the grid layout.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
demo_layout_shuffle (DemoLayout *layout)
|
|
||||||
{
|
|
||||||
int i, j, tmp;
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
j = g_random_int_range (0, i + 1);
|
|
||||||
tmp = layout->pos[i];
|
|
||||||
layout->pos[i] = layout->pos[j];
|
|
||||||
layout->pos[j] = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define DEMO_TYPE_LAYOUT (demo_layout_get_type ())
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (DemoLayout, demo_layout, DEMO, LAYOUT, GtkLayoutManager)
|
|
||||||
|
|
||||||
GtkLayoutManager * demo_layout_new (void);
|
|
||||||
|
|
||||||
void demo_layout_set_position (DemoLayout *layout,
|
|
||||||
float position);
|
|
||||||
void demo_layout_shuffle (DemoLayout *layout);
|
|
||||||
@@ -23,12 +23,14 @@
|
|||||||
#include "demotaggedentry.h"
|
#include "demotaggedentry.h"
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include <gtk/gtk-a11y.h>
|
||||||
|
|
||||||
struct _DemoTaggedEntry
|
struct _DemoTaggedEntry
|
||||||
{
|
{
|
||||||
GtkWidget parent_instance;
|
GtkWidget parent_instance;
|
||||||
|
|
||||||
GtkWidget *text;
|
GtkWidget *box;
|
||||||
|
GtkWidget *entry;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _DemoTaggedEntryClass
|
struct _DemoTaggedEntryClass
|
||||||
@@ -44,38 +46,28 @@ G_DEFINE_TYPE_WITH_CODE (DemoTaggedEntry, demo_tagged_entry, GTK_TYPE_WIDGET,
|
|||||||
static void
|
static void
|
||||||
demo_tagged_entry_init (DemoTaggedEntry *entry)
|
demo_tagged_entry_init (DemoTaggedEntry *entry)
|
||||||
{
|
{
|
||||||
GtkCssProvider *provider;
|
entry->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
|
gtk_widget_set_parent (entry->box, GTK_WIDGET (entry));
|
||||||
|
|
||||||
entry->text = gtk_text_new ();
|
entry->entry = gtk_text_new ();
|
||||||
gtk_widget_set_hexpand (entry->text, TRUE);
|
gtk_widget_set_hexpand (entry->entry, TRUE);
|
||||||
gtk_widget_set_vexpand (entry->text, TRUE);
|
gtk_widget_set_vexpand (entry->entry, TRUE);
|
||||||
gtk_widget_set_parent (entry->text, GTK_WIDGET (entry));
|
gtk_widget_set_hexpand (entry->box, FALSE);
|
||||||
|
gtk_widget_set_vexpand (entry->box, FALSE);
|
||||||
|
gtk_box_append (GTK_BOX (entry->box), entry->entry);
|
||||||
gtk_editable_init_delegate (GTK_EDITABLE (entry));
|
gtk_editable_init_delegate (GTK_EDITABLE (entry));
|
||||||
gtk_editable_set_width_chars (GTK_EDITABLE (entry->text), 6);
|
|
||||||
gtk_editable_set_max_width_chars (GTK_EDITABLE (entry->text), 6);
|
|
||||||
gtk_widget_add_css_class (GTK_WIDGET (entry), "tagged");
|
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
|
||||||
gtk_css_provider_load_from_resource (provider, "/tagged_entry/tagstyle.css");
|
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
|
||||||
GTK_STYLE_PROVIDER (provider),
|
|
||||||
800);
|
|
||||||
g_object_unref (provider);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
demo_tagged_entry_dispose (GObject *object)
|
demo_tagged_entry_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
DemoTaggedEntry *entry = DEMO_TAGGED_ENTRY (object);
|
DemoTaggedEntry *entry = DEMO_TAGGED_ENTRY (object);
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
if (entry->text)
|
if (entry->entry)
|
||||||
gtk_editable_finish_delegate (GTK_EDITABLE (entry));
|
gtk_editable_finish_delegate (GTK_EDITABLE (entry));
|
||||||
|
|
||||||
while ((child = gtk_widget_get_first_child (GTK_WIDGET (entry))))
|
g_clear_pointer (&entry->entry, gtk_widget_unparent);
|
||||||
gtk_widget_unparent (child);
|
g_clear_pointer (&entry->box, gtk_widget_unparent);
|
||||||
|
|
||||||
entry->text = NULL;
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (demo_tagged_entry_parent_class)->dispose (object);
|
G_OBJECT_CLASS (demo_tagged_entry_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
@@ -109,7 +101,7 @@ demo_tagged_entry_grab_focus (GtkWidget *widget)
|
|||||||
{
|
{
|
||||||
DemoTaggedEntry *entry = DEMO_TAGGED_ENTRY (widget);
|
DemoTaggedEntry *entry = DEMO_TAGGED_ENTRY (widget);
|
||||||
|
|
||||||
return gtk_widget_grab_focus (entry->text);
|
return gtk_widget_grab_focus (entry->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -126,15 +118,15 @@ demo_tagged_entry_class_init (DemoTaggedEntryClass *klass)
|
|||||||
|
|
||||||
gtk_editable_install_properties (object_class, 1);
|
gtk_editable_install_properties (object_class, 1);
|
||||||
|
|
||||||
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
|
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
|
||||||
|
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE);
|
||||||
gtk_widget_class_set_css_name (widget_class, "entry");
|
gtk_widget_class_set_css_name (widget_class, "entry");
|
||||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_TEXT_BOX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkEditable *
|
static GtkEditable *
|
||||||
demo_tagged_entry_get_delegate (GtkEditable *editable)
|
demo_tagged_entry_get_delegate (GtkEditable *editable)
|
||||||
{
|
{
|
||||||
return GTK_EDITABLE (DEMO_TAGGED_ENTRY (editable)->text);
|
return GTK_EDITABLE (DEMO_TAGGED_ENTRY (editable)->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -155,7 +147,7 @@ demo_tagged_entry_add_tag (DemoTaggedEntry *entry,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (DEMO_IS_TAGGED_ENTRY (entry));
|
g_return_if_fail (DEMO_IS_TAGGED_ENTRY (entry));
|
||||||
|
|
||||||
gtk_widget_set_parent (tag, GTK_WIDGET (entry));
|
gtk_box_append (GTK_BOX (entry->box), tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -165,7 +157,10 @@ demo_tagged_entry_insert_tag_after (DemoTaggedEntry *entry,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (DEMO_IS_TAGGED_ENTRY (entry));
|
g_return_if_fail (DEMO_IS_TAGGED_ENTRY (entry));
|
||||||
|
|
||||||
gtk_widget_insert_after (tag, GTK_WIDGET (entry), sibling);
|
if (sibling == NULL)
|
||||||
|
gtk_box_append (GTK_BOX (entry->box), tag);
|
||||||
|
else
|
||||||
|
gtk_box_insert_child_after (GTK_BOX (entry->box), tag, sibling);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -174,7 +169,7 @@ demo_tagged_entry_remove_tag (DemoTaggedEntry *entry,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (DEMO_IS_TAGGED_ENTRY (entry));
|
g_return_if_fail (DEMO_IS_TAGGED_ENTRY (entry));
|
||||||
|
|
||||||
gtk_widget_unparent (tag);
|
gtk_box_remove (GTK_BOX (entry->box), tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _DemoTaggedEntryTag
|
struct _DemoTaggedEntryTag
|
||||||
@@ -224,6 +219,7 @@ static void
|
|||||||
demo_tagged_entry_tag_init (DemoTaggedEntryTag *tag)
|
demo_tagged_entry_tag_init (DemoTaggedEntryTag *tag)
|
||||||
{
|
{
|
||||||
GtkGesture *gesture;
|
GtkGesture *gesture;
|
||||||
|
GtkCssProvider *provider;
|
||||||
|
|
||||||
tag->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
tag->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_set_parent (tag->box, GTK_WIDGET (tag));
|
gtk_widget_set_parent (tag->box, GTK_WIDGET (tag));
|
||||||
@@ -233,6 +229,13 @@ demo_tagged_entry_tag_init (DemoTaggedEntryTag *tag)
|
|||||||
gesture = gtk_gesture_click_new ();
|
gesture = gtk_gesture_click_new ();
|
||||||
g_signal_connect (gesture, "released", G_CALLBACK (on_released), tag);
|
g_signal_connect (gesture, "released", G_CALLBACK (on_released), tag);
|
||||||
gtk_widget_add_controller (GTK_WIDGET (tag), GTK_EVENT_CONTROLLER (gesture));
|
gtk_widget_add_controller (GTK_WIDGET (tag), GTK_EVENT_CONTROLLER (gesture));
|
||||||
|
|
||||||
|
provider = gtk_css_provider_new ();
|
||||||
|
gtk_css_provider_load_from_resource (provider, "/tagged_entry/tagstyle.css");
|
||||||
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
|
GTK_STYLE_PROVIDER (provider),
|
||||||
|
800);
|
||||||
|
g_object_unref (provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -1,121 +0,0 @@
|
|||||||
#include "demowidget.h"
|
|
||||||
#include "demolayout.h"
|
|
||||||
|
|
||||||
/* parent widget */
|
|
||||||
|
|
||||||
struct _DemoWidget
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
|
|
||||||
gboolean backward; /* whether we go 0 -> 1 or 1 -> 0 */
|
|
||||||
gint64 start_time; /* time the transition started */
|
|
||||||
guint tick_id; /* our tick cb */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _DemoWidgetClass
|
|
||||||
{
|
|
||||||
GtkWidgetClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (DemoWidget, demo_widget, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
/* The widget is controlling the transition by calling
|
|
||||||
* demo_layout_set_position() in a tick callback.
|
|
||||||
*
|
|
||||||
* We take half a second to go from one layout to the other.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define DURATION (0.5 * G_TIME_SPAN_SECOND)
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
transition (GtkWidget *widget,
|
|
||||||
GdkFrameClock *frame_clock,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
DemoWidget *self = DEMO_WIDGET (widget);
|
|
||||||
DemoLayout *demo_layout = DEMO_LAYOUT (gtk_widget_get_layout_manager (widget));
|
|
||||||
gint64 now = g_get_monotonic_time ();
|
|
||||||
|
|
||||||
gtk_widget_queue_allocate (widget);
|
|
||||||
|
|
||||||
if (self->backward)
|
|
||||||
demo_layout_set_position (demo_layout, 1.0 - (now - self->start_time) / DURATION);
|
|
||||||
else
|
|
||||||
demo_layout_set_position (demo_layout, (now - self->start_time) / DURATION);
|
|
||||||
|
|
||||||
if (now - self->start_time >= DURATION)
|
|
||||||
{
|
|
||||||
self->backward = !self->backward;
|
|
||||||
demo_layout_set_position (demo_layout, self->backward ? 1.0 : 0.0);
|
|
||||||
/* keep things interesting by shuffling the positions */
|
|
||||||
if (!self->backward)
|
|
||||||
demo_layout_shuffle (demo_layout);
|
|
||||||
self->tick_id = 0;
|
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
clicked (GtkGestureClick *gesture,
|
|
||||||
guint n_press,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
DemoWidget *self = data;
|
|
||||||
|
|
||||||
if (self->tick_id != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
self->start_time = g_get_monotonic_time ();
|
|
||||||
self->tick_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), transition, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_widget_init (DemoWidget *self)
|
|
||||||
{
|
|
||||||
GtkGesture *gesture;
|
|
||||||
|
|
||||||
gesture = gtk_gesture_click_new ();
|
|
||||||
g_signal_connect (gesture, "pressed", G_CALLBACK (clicked), self);
|
|
||||||
gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_widget_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
while ((child = gtk_widget_get_first_child (GTK_WIDGET (object))))
|
|
||||||
gtk_widget_unparent (child);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (demo_widget_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_widget_class_init (DemoWidgetClass *class)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
object_class->dispose = demo_widget_dispose;
|
|
||||||
|
|
||||||
/* here is where we use our custom layout manager */
|
|
||||||
gtk_widget_class_set_layout_manager_type (widget_class, DEMO_TYPE_LAYOUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
demo_widget_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (DEMO_TYPE_WIDGET, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
demo_widget_add_child (DemoWidget *self,
|
|
||||||
GtkWidget *child)
|
|
||||||
{
|
|
||||||
gtk_widget_set_parent (child, GTK_WIDGET (self));
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define DEMO_TYPE_WIDGET (demo_widget_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (DemoWidget, demo_widget, DEMO, WIDGET, GtkWidget)
|
|
||||||
|
|
||||||
GtkWidget * demo_widget_new (void);
|
|
||||||
|
|
||||||
void demo_widget_add_child (DemoWidget *self,
|
|
||||||
GtkWidget *child);
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
/* Dialogs
|
/* Dialogs
|
||||||
* #Keywords: GtkMessageDialog
|
|
||||||
*
|
*
|
||||||
* Dialogs are used to pop up transient windows for information
|
* Dialogs are used to pop up transient windows for information
|
||||||
* and user feedback.
|
* and user feedback.
|
||||||
@@ -17,7 +16,7 @@ message_dialog_clicked (GtkButton *button,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
static int i = 1;
|
static gint i = 1;
|
||||||
|
|
||||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
/* Drag-and-Drop
|
/* Drag-and-Drop
|
||||||
* #Keywords: dnd, menu, popover, gesture
|
|
||||||
*
|
*
|
||||||
* This demo shows dragging colors and widgets.
|
* This demo shows dragging colors and widgets.
|
||||||
* The items in this demo can be moved, recolored
|
* The items in this demo can be moved, recolored
|
||||||
* and rotated.
|
* and rotated.
|
||||||
*
|
|
||||||
* The demo also has an example for creating a
|
|
||||||
* menu-like popover without using a menu model.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -113,9 +109,12 @@ apply_transform (CanvasItem *item)
|
|||||||
y = gtk_widget_get_allocated_height (item->label) / 2.0;
|
y = gtk_widget_get_allocated_height (item->label) / 2.0;
|
||||||
item->r = sqrt (x*x + y*y);
|
item->r = sqrt (x*x + y*y);
|
||||||
|
|
||||||
transform = gsk_transform_translate (NULL, &(graphene_point_t) { item->r, item->r });
|
transform = gsk_transform_translate (
|
||||||
transform = gsk_transform_rotate (transform, item->angle + item->delta);
|
gsk_transform_rotate (
|
||||||
transform = gsk_transform_translate (transform, &(graphene_point_t) { -x, -y });
|
gsk_transform_translate (NULL,
|
||||||
|
&(graphene_point_t) { item->r, item->r }),
|
||||||
|
item->angle + item->delta),
|
||||||
|
&(graphene_point_t) { - x, - y });
|
||||||
|
|
||||||
gtk_fixed_set_child_transform (GTK_FIXED (item->fixed), item->label, transform);
|
gtk_fixed_set_child_transform (GTK_FIXED (item->fixed), item->label, transform);
|
||||||
gsk_transform_unref (transform);
|
gsk_transform_unref (transform);
|
||||||
@@ -154,30 +153,6 @@ click_done (GtkGesture *gesture)
|
|||||||
gtk_widget_insert_after (item, canvas, last_child);
|
gtk_widget_insert_after (item, canvas, last_child);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
theme_is_dark (void)
|
|
||||||
{
|
|
||||||
GtkSettings *settings;
|
|
||||||
char *theme;
|
|
||||||
gboolean prefer_dark;
|
|
||||||
gboolean dark;
|
|
||||||
|
|
||||||
settings = gtk_settings_get_default ();
|
|
||||||
g_object_get (settings,
|
|
||||||
"gtk-theme-name", &theme,
|
|
||||||
"gtk-application-prefer-dark-theme", &prefer_dark,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if ((strcmp (theme, "Adwaita") == 0 && prefer_dark) || strcmp (theme, "HighContrastInverse") == 0)
|
|
||||||
dark = TRUE;
|
|
||||||
else
|
|
||||||
dark = FALSE;
|
|
||||||
|
|
||||||
g_free (theme);
|
|
||||||
|
|
||||||
return dark;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
canvas_item_init (CanvasItem *item)
|
canvas_item_init (CanvasItem *item)
|
||||||
{
|
{
|
||||||
@@ -205,11 +180,7 @@ canvas_item_init (CanvasItem *item)
|
|||||||
gtk_widget_set_name (item->label, id);
|
gtk_widget_set_name (item->label, id);
|
||||||
g_free (id);
|
g_free (id);
|
||||||
|
|
||||||
if (theme_is_dark ())
|
gdk_rgba_parse (&rgba, "yellow");
|
||||||
gdk_rgba_parse (&rgba, "blue");
|
|
||||||
else
|
|
||||||
gdk_rgba_parse (&rgba, "yellow");
|
|
||||||
|
|
||||||
set_color (item, &rgba);
|
set_color (item, &rgba);
|
||||||
|
|
||||||
item->angle = 0;
|
item->angle = 0;
|
||||||
@@ -567,6 +538,7 @@ canvas_new (void)
|
|||||||
canvas = gtk_fixed_new ();
|
canvas = gtk_fixed_new ();
|
||||||
gtk_widget_set_hexpand (canvas, TRUE);
|
gtk_widget_set_hexpand (canvas, TRUE);
|
||||||
gtk_widget_set_vexpand (canvas, TRUE);
|
gtk_widget_set_vexpand (canvas, TRUE);
|
||||||
|
gtk_widget_add_css_class (canvas, "frame");
|
||||||
|
|
||||||
source = gtk_drag_source_new ();
|
source = gtk_drag_source_new ();
|
||||||
gtk_drag_source_set_actions (source, GDK_ACTION_MOVE);
|
gtk_drag_source_set_actions (source, GDK_ACTION_MOVE);
|
||||||
@@ -625,83 +597,6 @@ css_button_new (const char *class)
|
|||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
GdkRGBA color;
|
|
||||||
} ColorSwatch;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
GtkWidgetClass parent_class;
|
|
||||||
} ColorSwatchClass;
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (ColorSwatch, color_swatch, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static GdkContentProvider *
|
|
||||||
color_swatch_drag_prepare (GtkDragSource *source,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
ColorSwatch *swatch)
|
|
||||||
{
|
|
||||||
return gdk_content_provider_new_typed (GDK_TYPE_RGBA, &swatch->color);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
color_swatch_init (ColorSwatch *swatch)
|
|
||||||
{
|
|
||||||
GtkDragSource *source = gtk_drag_source_new ();
|
|
||||||
g_signal_connect (source, "prepare", G_CALLBACK (color_swatch_drag_prepare), swatch);
|
|
||||||
gtk_widget_add_controller (GTK_WIDGET (swatch), GTK_EVENT_CONTROLLER (source));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
color_swatch_snapshot (GtkWidget *widget,
|
|
||||||
GtkSnapshot *snapshot)
|
|
||||||
{
|
|
||||||
ColorSwatch *swatch = (ColorSwatch *)widget;
|
|
||||||
float w = gtk_widget_get_width (widget);
|
|
||||||
float h = gtk_widget_get_height (widget);
|
|
||||||
|
|
||||||
gtk_snapshot_append_color (snapshot, &swatch->color,
|
|
||||||
&GRAPHENE_RECT_INIT(0, 0, w, h));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
color_swatch_measure (GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum_size,
|
|
||||||
int *natural_size,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
|
||||||
*minimum_size = *natural_size = 48;
|
|
||||||
else
|
|
||||||
*minimum_size = *natural_size = 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
color_swatch_class_init (ColorSwatchClass *class)
|
|
||||||
{
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
widget_class->snapshot = color_swatch_snapshot;
|
|
||||||
widget_class->measure = color_swatch_measure;
|
|
||||||
gtk_widget_class_set_css_name (widget_class, "colorswatch");
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
color_swatch_new (const char *color)
|
|
||||||
{
|
|
||||||
ColorSwatch *swatch = g_object_new (color_swatch_get_type (), NULL);
|
|
||||||
|
|
||||||
gdk_rgba_parse (&swatch->color, color);
|
|
||||||
|
|
||||||
return GTK_WIDGET (swatch);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@@ -764,8 +659,6 @@ do_dnd (GtkWidget *do_widget)
|
|||||||
y += 100;
|
y += 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), gtk_separator_new (GTK_ORIENTATION_HORIZONTAL));
|
|
||||||
|
|
||||||
sw = gtk_scrolled_window_new ();
|
sw = gtk_scrolled_window_new ();
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
GTK_POLICY_AUTOMATIC,
|
GTK_POLICY_AUTOMATIC,
|
||||||
@@ -777,7 +670,18 @@ do_dnd (GtkWidget *do_widget)
|
|||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), box3);
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), box3);
|
||||||
|
|
||||||
for (i = 0; colors[i]; i++)
|
for (i = 0; colors[i]; i++)
|
||||||
gtk_box_append (GTK_BOX (box3), color_swatch_new (colors[i]));
|
{
|
||||||
|
GdkRGBA rgba;
|
||||||
|
GtkWidget *swatch;
|
||||||
|
|
||||||
|
gdk_rgba_parse (&rgba, colors[i]);
|
||||||
|
|
||||||
|
swatch = g_object_new (g_type_from_name ("GtkColorSwatch"),
|
||||||
|
"rgba", &rgba,
|
||||||
|
"selectable", FALSE,
|
||||||
|
NULL);
|
||||||
|
gtk_box_append (GTK_BOX (box3), swatch);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow1"));
|
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow1"));
|
||||||
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow2"));
|
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow2"));
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/* Drawing Area
|
/* Drawing Area
|
||||||
* #Keywords: GtkDrawingArea
|
|
||||||
*
|
*
|
||||||
* GtkDrawingArea is a blank area where you can draw custom displays
|
* GtkDrawingArea is a blank area where you can draw custom displays
|
||||||
* of various kinds.
|
* of various kinds.
|
||||||
@@ -65,8 +64,8 @@ scribble_draw (GtkDrawingArea *da,
|
|||||||
/* Draw a rectangle on the screen */
|
/* Draw a rectangle on the screen */
|
||||||
static void
|
static void
|
||||||
draw_brush (GtkWidget *widget,
|
draw_brush (GtkWidget *widget,
|
||||||
double x,
|
gdouble x,
|
||||||
double y)
|
gdouble y)
|
||||||
{
|
{
|
||||||
GdkRectangle update_rect;
|
GdkRectangle update_rect;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
@@ -311,7 +310,6 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Drawing Area");
|
gtk_window_set_title (GTK_WINDOW (window), "Drawing Area");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 250, -1);
|
|
||||||
|
|
||||||
g_signal_connect (window, "destroy",
|
g_signal_connect (window, "destroy",
|
||||||
G_CALLBACK (close_window), NULL);
|
G_CALLBACK (close_window), NULL);
|
||||||
@@ -326,8 +324,9 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
/*
|
/*
|
||||||
* Create the groups area
|
* Create the groups area
|
||||||
*/
|
*/
|
||||||
label = gtk_label_new ("Knockout groups");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Knockout groups</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -344,8 +343,9 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
* Create the scribble area
|
* Create the scribble area
|
||||||
*/
|
*/
|
||||||
|
|
||||||
label = gtk_label_new ("Scribble area");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Scribble area</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
/* Lists/Selections
|
/* Drop Downs
|
||||||
*
|
*
|
||||||
* 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
|
||||||
* displayed using widgets instead of cell renderers.
|
* displayed using widgets instead of cell renderers.
|
||||||
*
|
*
|
||||||
* This example also shows a custom widget that can replace
|
* The examples here demonstrate how to use different kinds of
|
||||||
* GtkEntryCompletion or GtkComboBoxText. It is not currently
|
* list models with GtkDropDown, how to use search and how to
|
||||||
* part of GTK.
|
* display the selected item differently from the presentation
|
||||||
|
* in the popup.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include "suggestionentry.h"
|
|
||||||
|
|
||||||
#define STRING_TYPE_HOLDER (string_holder_get_type ())
|
#define STRING_TYPE_HOLDER (string_holder_get_type ())
|
||||||
G_DECLARE_FINAL_TYPE (StringHolder, string_holder, STRING, HOLDER, GObject)
|
G_DECLARE_FINAL_TYPE (StringHolder, string_holder, STRING, HOLDER, GObject)
|
||||||
@@ -64,22 +65,18 @@ strings_setup_item_single_line (GtkSignalListItemFactory *factory,
|
|||||||
GtkListItem *item)
|
GtkListItem *item)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *image, *title;
|
GtkWidget *box, *image, *title;
|
||||||
GtkWidget *checkmark;
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
|
|
||||||
image = gtk_image_new ();
|
image = gtk_image_new ();
|
||||||
title = gtk_label_new ("");
|
title = gtk_label_new ("");
|
||||||
gtk_label_set_xalign (GTK_LABEL (title), 0.0);
|
gtk_label_set_xalign (GTK_LABEL (title), 0.0);
|
||||||
checkmark = gtk_image_new_from_icon_name ("object-select-symbolic");
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), image);
|
gtk_box_append (GTK_BOX (box), image);
|
||||||
gtk_box_append (GTK_BOX (box), title);
|
gtk_box_append (GTK_BOX (box), title);
|
||||||
gtk_box_append (GTK_BOX (box), checkmark);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (item), "title", title);
|
g_object_set_data (G_OBJECT (item), "title", title);
|
||||||
g_object_set_data (G_OBJECT (item), "image", image);
|
g_object_set_data (G_OBJECT (item), "image", image);
|
||||||
g_object_set_data (G_OBJECT (item), "checkmark", checkmark);
|
|
||||||
|
|
||||||
gtk_list_item_set_child (item, box);
|
gtk_list_item_set_child (item, box);
|
||||||
}
|
}
|
||||||
@@ -89,15 +86,13 @@ strings_setup_item_full (GtkSignalListItemFactory *factory,
|
|||||||
GtkListItem *item)
|
GtkListItem *item)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *box2, *image, *title, *description;
|
GtkWidget *box, *box2, *image, *title, *description;
|
||||||
GtkWidget *checkmark;
|
|
||||||
|
|
||||||
image = gtk_image_new ();
|
image = gtk_image_new ();
|
||||||
title = gtk_label_new ("");
|
title = gtk_label_new ("");
|
||||||
gtk_label_set_xalign (GTK_LABEL (title), 0.0);
|
gtk_label_set_xalign (GTK_LABEL (title), 0.0);
|
||||||
description = gtk_label_new ("");
|
description = gtk_label_new ("");
|
||||||
gtk_label_set_xalign (GTK_LABEL (description), 0.0);
|
gtk_label_set_xalign (GTK_LABEL (description), 0.0);
|
||||||
gtk_widget_add_css_class (description, "dim-label");
|
gtk_style_context_add_class (gtk_widget_get_style_context (description), "dim-label");
|
||||||
checkmark = gtk_image_new_from_icon_name ("object-select-symbolic");
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
|
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
|
||||||
@@ -106,48 +101,26 @@ strings_setup_item_full (GtkSignalListItemFactory *factory,
|
|||||||
gtk_box_append (GTK_BOX (box), box2);
|
gtk_box_append (GTK_BOX (box), box2);
|
||||||
gtk_box_append (GTK_BOX (box2), title);
|
gtk_box_append (GTK_BOX (box2), title);
|
||||||
gtk_box_append (GTK_BOX (box2), description);
|
gtk_box_append (GTK_BOX (box2), description);
|
||||||
gtk_box_append (GTK_BOX (box), checkmark);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (item), "title", title);
|
g_object_set_data (G_OBJECT (item), "title", title);
|
||||||
g_object_set_data (G_OBJECT (item), "image", image);
|
g_object_set_data (G_OBJECT (item), "image", image);
|
||||||
g_object_set_data (G_OBJECT (item), "description", description);
|
g_object_set_data (G_OBJECT (item), "description", description);
|
||||||
g_object_set_data (G_OBJECT (item), "checkmark", checkmark);
|
|
||||||
|
|
||||||
gtk_list_item_set_child (item, box);
|
gtk_list_item_set_child (item, box);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
selected_item_changed (GtkDropDown *dropdown,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
GtkWidget *checkmark;
|
|
||||||
|
|
||||||
checkmark = g_object_get_data (G_OBJECT (item), "checkmark");
|
|
||||||
|
|
||||||
if (gtk_drop_down_get_selected_item (dropdown) == gtk_list_item_get_item (item))
|
|
||||||
gtk_widget_set_opacity (checkmark, 1.0);
|
|
||||||
else
|
|
||||||
gtk_widget_set_opacity (checkmark, 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
strings_bind_item (GtkSignalListItemFactory *factory,
|
strings_bind_item (GtkSignalListItemFactory *factory,
|
||||||
GtkListItem *item,
|
GtkListItem *item)
|
||||||
gpointer data)
|
|
||||||
{
|
{
|
||||||
GtkDropDown *dropdown = data;
|
|
||||||
GtkWidget *image, *title, *description;
|
GtkWidget *image, *title, *description;
|
||||||
GtkWidget *checkmark;
|
|
||||||
StringHolder *holder;
|
StringHolder *holder;
|
||||||
GtkWidget *popup;
|
|
||||||
|
|
||||||
holder = gtk_list_item_get_item (item);
|
holder = gtk_list_item_get_item (item);
|
||||||
|
|
||||||
title = g_object_get_data (G_OBJECT (item), "title");
|
title = g_object_get_data (G_OBJECT (item), "title");
|
||||||
image = g_object_get_data (G_OBJECT (item), "image");
|
image = g_object_get_data (G_OBJECT (item), "image");
|
||||||
description = g_object_get_data (G_OBJECT (item), "description");
|
description = g_object_get_data (G_OBJECT (item), "description");
|
||||||
checkmark = g_object_get_data (G_OBJECT (item), "checkmark");
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (title), holder->title);
|
gtk_label_set_label (GTK_LABEL (title), holder->title);
|
||||||
if (image)
|
if (image)
|
||||||
@@ -160,43 +133,19 @@ strings_bind_item (GtkSignalListItemFactory *factory,
|
|||||||
gtk_label_set_label (GTK_LABEL (description), holder->description);
|
gtk_label_set_label (GTK_LABEL (description), holder->description);
|
||||||
gtk_widget_set_visible (description , holder->description != NULL);
|
gtk_widget_set_visible (description , holder->description != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
popup = gtk_widget_get_ancestor (title, GTK_TYPE_POPOVER);
|
|
||||||
if (popup && gtk_widget_is_ancestor (popup, GTK_WIDGET (dropdown)))
|
|
||||||
{
|
|
||||||
gtk_widget_show (checkmark);
|
|
||||||
g_signal_connect (dropdown, "notify::selected-item",
|
|
||||||
G_CALLBACK (selected_item_changed), item);
|
|
||||||
selected_item_changed (dropdown, NULL, item);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_widget_hide (checkmark);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
strings_unbind_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *list_item,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
GtkDropDown *dropdown = data;
|
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (dropdown, selected_item_changed, list_item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkListItemFactory *
|
static GtkListItemFactory *
|
||||||
strings_factory_new (gpointer data, gboolean full)
|
strings_factory_new (gboolean full)
|
||||||
{
|
{
|
||||||
GtkListItemFactory *factory;
|
GtkListItemFactory *factory;
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
factory = gtk_signal_list_item_factory_new ();
|
||||||
if (full)
|
if (full)
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_full), data);
|
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_full), NULL);
|
||||||
else
|
else
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_single_line), data);
|
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_single_line), NULL);
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (strings_bind_item), data);
|
g_signal_connect (factory, "bind", G_CALLBACK (strings_bind_item), NULL);
|
||||||
g_signal_connect (factory, "unbind", G_CALLBACK (strings_unbind_item), data);
|
|
||||||
|
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
@@ -237,22 +186,19 @@ drop_down_new_from_strings (const char *const *titles,
|
|||||||
g_return_val_if_fail (descriptions == NULL || g_strv_length ((char **)icons) == g_strv_length ((char **)descriptions), NULL);
|
g_return_val_if_fail (descriptions == NULL || g_strv_length ((char **)icons) == g_strv_length ((char **)descriptions), NULL);
|
||||||
|
|
||||||
model = strings_model_new (titles, icons, descriptions);
|
model = strings_model_new (titles, icons, descriptions);
|
||||||
widget = g_object_new (GTK_TYPE_DROP_DOWN,
|
factory = strings_factory_new (FALSE);
|
||||||
"model", model,
|
|
||||||
NULL);
|
|
||||||
g_object_unref (model);
|
|
||||||
|
|
||||||
factory = strings_factory_new (widget, FALSE);
|
|
||||||
if (icons != NULL || descriptions != NULL)
|
if (icons != NULL || descriptions != NULL)
|
||||||
list_factory = strings_factory_new (widget, TRUE);
|
list_factory = strings_factory_new (TRUE);
|
||||||
else
|
else
|
||||||
list_factory = NULL;
|
list_factory = NULL;
|
||||||
|
|
||||||
g_object_set (widget,
|
widget = g_object_new (GTK_TYPE_DROP_DOWN,
|
||||||
"factory", factory,
|
"model", model,
|
||||||
"list-factory", list_factory,
|
"factory", factory,
|
||||||
NULL);
|
"list-factory", list_factory,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_unref (model);
|
||||||
g_object_unref (factory);
|
g_object_unref (factory);
|
||||||
if (list_factory)
|
if (list_factory)
|
||||||
g_object_unref (list_factory);
|
g_object_unref (list_factory);
|
||||||
@@ -272,110 +218,13 @@ get_title (gpointer item)
|
|||||||
return g_strdup (STRING_HOLDER (item)->title);
|
return g_strdup (STRING_HOLDER (item)->title);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
|
||||||
get_file_name (gpointer item)
|
|
||||||
{
|
|
||||||
return g_strdup (g_file_info_get_display_name (G_FILE_INFO (item)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
GtkWidget *box;
|
|
||||||
GtkWidget *icon;
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
|
||||||
icon = gtk_image_new ();
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
|
||||||
gtk_box_append (GTK_BOX (box), icon);
|
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
|
||||||
gtk_list_item_set_child (item, box);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
MatchObject *match = MATCH_OBJECT (gtk_list_item_get_item (item));
|
|
||||||
GFileInfo *info = G_FILE_INFO (match_object_get_item (match));
|
|
||||||
GtkWidget *box = gtk_list_item_get_child (item);
|
|
||||||
GtkWidget *icon = gtk_widget_get_first_child (box);
|
|
||||||
GtkWidget *label = gtk_widget_get_last_child (box);
|
|
||||||
|
|
||||||
gtk_image_set_from_gicon (GTK_IMAGE (icon), g_file_info_get_icon (info));
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), g_file_info_get_display_name (info));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_highlight_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
|
||||||
gtk_list_item_set_child (item, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_highlight_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
MatchObject *obj;
|
|
||||||
GtkWidget *label;
|
|
||||||
PangoAttrList *attrs;
|
|
||||||
PangoAttribute *attr;
|
|
||||||
const char *str;
|
|
||||||
|
|
||||||
obj = MATCH_OBJECT (gtk_list_item_get_item (item));
|
|
||||||
label = gtk_list_item_get_child (item);
|
|
||||||
|
|
||||||
str = match_object_get_string (obj);
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), str);
|
|
||||||
attrs = pango_attr_list_new ();
|
|
||||||
attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
|
|
||||||
attr->start_index = match_object_get_match_start (obj);
|
|
||||||
attr->end_index = match_object_get_match_end (obj);
|
|
||||||
pango_attr_list_insert (attrs, attr);
|
|
||||||
gtk_label_set_attributes (GTK_LABEL (label), attrs);
|
|
||||||
pango_attr_list_unref (attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
match_func (MatchObject *obj,
|
|
||||||
const char *search,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
char *tmp1, *tmp2;
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
tmp1 = g_utf8_normalize (match_object_get_string (obj), -1, G_NORMALIZE_ALL);
|
|
||||||
tmp2 = g_utf8_normalize (search, -1, G_NORMALIZE_ALL);
|
|
||||||
|
|
||||||
if ((p = strstr (tmp1, tmp2)) != NULL)
|
|
||||||
match_object_set_match (obj,
|
|
||||||
p - tmp1,
|
|
||||||
(p - tmp1) + g_utf8_strlen (search, -1),
|
|
||||||
1);
|
|
||||||
else
|
|
||||||
match_object_set_match (obj, 0, 0, 0);
|
|
||||||
|
|
||||||
g_free (tmp1);
|
|
||||||
g_free (tmp2);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_dropdown (GtkWidget *do_widget)
|
do_dropdown (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
GtkWidget *button, *box, *spin, *check, *hbox, *label, *entry;
|
GtkWidget *button, *box, *spin, *check;
|
||||||
GListModel *model;
|
GListModel *model;
|
||||||
GtkExpression *expression;
|
GtkExpression *expression;
|
||||||
GtkListItemFactory *factory;
|
|
||||||
const char * const times[] = { "1 minute", "2 minutes", "5 minutes", "20 minutes", NULL };
|
const char * const times[] = { "1 minute", "2 minutes", "5 minutes", "20 minutes", NULL };
|
||||||
const char * const many_times[] = {
|
const char * const many_times[] = {
|
||||||
"1 minute", "2 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes",
|
"1 minute", "2 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes",
|
||||||
@@ -388,51 +237,24 @@ do_dropdown (GtkWidget *do_widget)
|
|||||||
const char * const device_descriptions[] = {
|
const char * const device_descriptions[] = {
|
||||||
"Built-in Audio", "Built-in audio", "Thinkpad Tunderbolt 3 Dock USB Audio", "Thinkpad Tunderbolt 3 Dock USB Audio", NULL
|
"Built-in Audio", "Built-in audio", "Thinkpad Tunderbolt 3 Dock USB Audio", "Thinkpad Tunderbolt 3 Dock USB Audio", NULL
|
||||||
};
|
};
|
||||||
char *cwd;
|
|
||||||
GFile *file;
|
|
||||||
GListModel *dir;
|
|
||||||
GtkStringList *strings;
|
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Selections");
|
gtk_window_set_title (GTK_WINDOW (window), "Drop Downs");
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
|
|
||||||
|
|
||||||
gtk_widget_set_margin_start (hbox, 20);
|
|
||||||
gtk_widget_set_margin_end (hbox, 20);
|
|
||||||
gtk_widget_set_margin_top (hbox, 20);
|
|
||||||
gtk_widget_set_margin_bottom (hbox, 20);
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), hbox);
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
||||||
gtk_box_append (GTK_BOX (hbox), box);
|
gtk_widget_set_margin_start (box, 10);
|
||||||
|
gtk_widget_set_margin_end (box, 10);
|
||||||
|
gtk_widget_set_margin_top (box, 10);
|
||||||
|
gtk_widget_set_margin_bottom (box, 10);
|
||||||
|
gtk_window_set_child (GTK_WINDOW (window), box);
|
||||||
|
|
||||||
label = gtk_label_new ("Dropdowns");
|
button = gtk_drop_down_new ();
|
||||||
gtk_widget_add_css_class (label, "title-4");
|
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
|
||||||
|
|
||||||
/* A basic dropdown */
|
|
||||||
button = drop_down_new_from_strings (times, NULL, NULL);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
|
||||||
|
|
||||||
/* A dropdown using an expression to obtain strings */
|
|
||||||
button = drop_down_new_from_strings (many_times, NULL, NULL);
|
|
||||||
gtk_drop_down_set_enable_search (GTK_DROP_DOWN (button), TRUE);
|
|
||||||
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
|
||||||
0, NULL,
|
|
||||||
(GCallback)get_title,
|
|
||||||
NULL, NULL);
|
|
||||||
gtk_drop_down_set_expression (GTK_DROP_DOWN (button), expression);
|
|
||||||
gtk_expression_unref (expression);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
|
||||||
|
|
||||||
button = gtk_drop_down_new (NULL, NULL);
|
|
||||||
|
|
||||||
model = G_LIST_MODEL (pango_cairo_font_map_get_default ());
|
model = G_LIST_MODEL (pango_cairo_font_map_get_default ());
|
||||||
gtk_drop_down_set_model (GTK_DROP_DOWN (button), model);
|
gtk_drop_down_set_model (GTK_DROP_DOWN (button), model);
|
||||||
@@ -448,118 +270,30 @@ do_dropdown (GtkWidget *do_widget)
|
|||||||
|
|
||||||
spin = gtk_spin_button_new_with_range (-1, g_list_model_get_n_items (G_LIST_MODEL (model)), 1);
|
spin = gtk_spin_button_new_with_range (-1, g_list_model_get_n_items (G_LIST_MODEL (model)), 1);
|
||||||
gtk_widget_set_halign (spin, GTK_ALIGN_START);
|
gtk_widget_set_halign (spin, GTK_ALIGN_START);
|
||||||
gtk_widget_set_margin_start (spin, 20);
|
|
||||||
g_object_bind_property (button, "selected", spin, "value", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
g_object_bind_property (button, "selected", spin, "value", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
||||||
gtk_box_append (GTK_BOX (box), spin);
|
gtk_box_append (GTK_BOX (box), spin);
|
||||||
|
|
||||||
check = gtk_check_button_new_with_label ("Enable search");
|
check = gtk_check_button_new_with_label ("Enable search");
|
||||||
gtk_widget_set_margin_start (check, 20);
|
|
||||||
g_object_bind_property (button, "enable-search", check, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
g_object_bind_property (button, "enable-search", check, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
||||||
gtk_box_append (GTK_BOX (box), check);
|
gtk_box_append (GTK_BOX (box), check);
|
||||||
|
|
||||||
g_object_unref (model);
|
g_object_unref (model);
|
||||||
|
|
||||||
/* A dropdown with a separate list factory */
|
button = drop_down_new_from_strings (times, NULL, NULL);
|
||||||
button = drop_down_new_from_strings (device_titles, device_icons, device_descriptions);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (hbox), gtk_separator_new (GTK_ORIENTATION_VERTICAL));
|
button = drop_down_new_from_strings (many_times, NULL, NULL);
|
||||||
|
gtk_drop_down_set_enable_search (GTK_DROP_DOWN (button), TRUE);
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
|
||||||
gtk_box_append (GTK_BOX (hbox), box);
|
|
||||||
|
|
||||||
label = gtk_label_new ("Suggestions");
|
|
||||||
gtk_widget_add_css_class (label, "title-4");
|
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
|
||||||
|
|
||||||
/* A basic suggestion entry */
|
|
||||||
entry = suggestion_entry_new ();
|
|
||||||
g_object_set (entry, "placeholder-text", "Words with T or G…", NULL);
|
|
||||||
strings = gtk_string_list_new ((const char *[]){
|
|
||||||
"GNOME",
|
|
||||||
"gnominious",
|
|
||||||
"Gnomonic projection",
|
|
||||||
"total",
|
|
||||||
"totally",
|
|
||||||
"toto",
|
|
||||||
"tottery",
|
|
||||||
"totterer",
|
|
||||||
"Totten trust",
|
|
||||||
"totipotent",
|
|
||||||
"totipotency",
|
|
||||||
"totemism",
|
|
||||||
"totem pole",
|
|
||||||
"Totara",
|
|
||||||
"totalizer",
|
|
||||||
"totalizator",
|
|
||||||
"totalitarianism",
|
|
||||||
"total parenteral nutrition",
|
|
||||||
"total hysterectomy",
|
|
||||||
"total eclipse",
|
|
||||||
"Totipresence",
|
|
||||||
"Totipalmi",
|
|
||||||
"Tomboy",
|
|
||||||
"zombie",
|
|
||||||
NULL});
|
|
||||||
suggestion_entry_set_model (SUGGESTION_ENTRY (entry), G_LIST_MODEL (strings));
|
|
||||||
g_object_unref (strings);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
|
||||||
|
|
||||||
/* A suggestion entry using a custom model, and no filtering */
|
|
||||||
entry = suggestion_entry_new ();
|
|
||||||
|
|
||||||
cwd = g_get_current_dir ();
|
|
||||||
file = g_file_new_for_path (cwd);
|
|
||||||
dir = G_LIST_MODEL (gtk_directory_list_new ("standard::display-name,standard::content-type,standard::icon,standard::size", file));
|
|
||||||
suggestion_entry_set_model (SUGGESTION_ENTRY (entry), dir);
|
|
||||||
g_object_unref (dir);
|
|
||||||
g_object_unref (file);
|
|
||||||
g_free (cwd);
|
|
||||||
|
|
||||||
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
||||||
0, NULL,
|
0, NULL,
|
||||||
(GCallback)get_file_name,
|
(GCallback)get_title,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
suggestion_entry_set_expression (SUGGESTION_ENTRY (entry), expression);
|
gtk_drop_down_set_expression (GTK_DROP_DOWN (button), expression);
|
||||||
gtk_expression_unref (expression);
|
gtk_expression_unref (expression);
|
||||||
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
button = drop_down_new_from_strings (device_titles, device_icons, device_descriptions);
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_item), NULL);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_item), NULL);
|
|
||||||
|
|
||||||
suggestion_entry_set_factory (SUGGESTION_ENTRY (entry), factory);
|
|
||||||
g_object_unref (factory);
|
|
||||||
|
|
||||||
suggestion_entry_set_use_filter (SUGGESTION_ENTRY (entry), FALSE);
|
|
||||||
suggestion_entry_set_show_arrow (SUGGESTION_ENTRY (entry), TRUE);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
|
||||||
|
|
||||||
/* A suggestion entry with match highlighting */
|
|
||||||
entry = suggestion_entry_new ();
|
|
||||||
g_object_set (entry, "placeholder-text", "Destination", NULL);
|
|
||||||
|
|
||||||
strings = gtk_string_list_new ((const char *[]){
|
|
||||||
"app-mockups",
|
|
||||||
"settings-mockups",
|
|
||||||
"os-mockups",
|
|
||||||
"software-mockups",
|
|
||||||
"mocktails",
|
|
||||||
NULL});
|
|
||||||
suggestion_entry_set_model (SUGGESTION_ENTRY (entry), G_LIST_MODEL (strings));
|
|
||||||
g_object_unref (strings);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
|
||||||
|
|
||||||
suggestion_entry_set_match_func (SUGGESTION_ENTRY (entry), match_func, NULL, NULL);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_highlight_item), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_highlight_item), NULL);
|
|
||||||
suggestion_entry_set_factory (SUGGESTION_ENTRY (entry), factory);
|
|
||||||
g_object_unref (factory);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int number;
|
gint number;
|
||||||
char *product;
|
gchar *product;
|
||||||
int yummy;
|
gint yummy;
|
||||||
}
|
}
|
||||||
Item;
|
Item;
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ add_items (void)
|
|||||||
static GtkTreeModel *
|
static GtkTreeModel *
|
||||||
create_items_model (void)
|
create_items_model (void)
|
||||||
{
|
{
|
||||||
int i = 0;
|
gint i = 0;
|
||||||
GtkListStore *model;
|
GtkListStore *model;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ static GtkTreeModel *
|
|||||||
create_numbers_model (void)
|
create_numbers_model (void)
|
||||||
{
|
{
|
||||||
#define N_NUMBERS 10
|
#define N_NUMBERS 10
|
||||||
int i = 0;
|
gint i = 0;
|
||||||
GtkListStore *model;
|
GtkListStore *model;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ remove_item (GtkWidget *widget, gpointer data)
|
|||||||
|
|
||||||
if (gtk_tree_selection_get_selected (selection, NULL, &iter))
|
if (gtk_tree_selection_get_selected (selection, NULL, &iter))
|
||||||
{
|
{
|
||||||
int i;
|
gint i;
|
||||||
GtkTreePath *path;
|
GtkTreePath *path;
|
||||||
|
|
||||||
path = gtk_tree_model_get_path (model, &iter);
|
path = gtk_tree_model_get_path (model, &iter);
|
||||||
@@ -211,7 +211,7 @@ separator_row (GtkTreeModel *model,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkTreePath *path;
|
GtkTreePath *path;
|
||||||
int idx;
|
gint idx;
|
||||||
|
|
||||||
path = gtk_tree_model_get_path (model, iter);
|
path = gtk_tree_model_get_path (model, iter);
|
||||||
idx = gtk_tree_path_get_indices (path)[0];
|
idx = gtk_tree_path_get_indices (path)[0];
|
||||||
@@ -224,7 +224,7 @@ separator_row (GtkTreeModel *model,
|
|||||||
static void
|
static void
|
||||||
editing_started (GtkCellRenderer *cell,
|
editing_started (GtkCellRenderer *cell,
|
||||||
GtkCellEditable *editable,
|
GtkCellEditable *editable,
|
||||||
const char *path,
|
const gchar *path,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (editable),
|
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (editable),
|
||||||
@@ -233,15 +233,15 @@ editing_started (GtkCellRenderer *cell,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
cell_edited (GtkCellRendererText *cell,
|
cell_edited (GtkCellRendererText *cell,
|
||||||
const char *path_string,
|
const gchar *path_string,
|
||||||
const char *new_text,
|
const gchar *new_text,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkTreeModel *model = (GtkTreeModel *)data;
|
GtkTreeModel *model = (GtkTreeModel *)data;
|
||||||
GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
|
GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
int column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "column"));
|
gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "column"));
|
||||||
|
|
||||||
gtk_tree_model_get_iter (model, &iter, path);
|
gtk_tree_model_get_iter (model, &iter, path);
|
||||||
|
|
||||||
@@ -249,7 +249,7 @@ cell_edited (GtkCellRendererText *cell,
|
|||||||
{
|
{
|
||||||
case COLUMN_ITEM_NUMBER:
|
case COLUMN_ITEM_NUMBER:
|
||||||
{
|
{
|
||||||
int i;
|
gint i;
|
||||||
|
|
||||||
i = gtk_tree_path_get_indices (path)[0];
|
i = gtk_tree_path_get_indices (path)[0];
|
||||||
g_array_index (articles, Item, i).number = atoi (new_text);
|
g_array_index (articles, Item, i).number = atoi (new_text);
|
||||||
@@ -261,8 +261,8 @@ cell_edited (GtkCellRendererText *cell,
|
|||||||
|
|
||||||
case COLUMN_ITEM_PRODUCT:
|
case COLUMN_ITEM_PRODUCT:
|
||||||
{
|
{
|
||||||
int i;
|
gint i;
|
||||||
char *old_text;
|
gchar *old_text;
|
||||||
|
|
||||||
gtk_tree_model_get (model, &iter, column, &old_text, -1);
|
gtk_tree_model_get (model, &iter, column, &old_text, -1);
|
||||||
g_free (old_text);
|
g_free (old_text);
|
||||||
|
|||||||
@@ -78,11 +78,11 @@ do_entry_completion (GtkWidget *do_widget)
|
|||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||||
gtk_widget_set_margin_start (vbox, 18);
|
gtk_widget_set_margin_start (vbox, 5);
|
||||||
gtk_widget_set_margin_end (vbox, 18);
|
gtk_widget_set_margin_end (vbox, 5);
|
||||||
gtk_widget_set_margin_top (vbox, 18);
|
gtk_widget_set_margin_top (vbox, 5);
|
||||||
gtk_widget_set_margin_bottom (vbox, 18);
|
gtk_widget_set_margin_bottom (vbox, 5);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
||||||
|
|
||||||
label = gtk_label_new (NULL);
|
label = gtk_label_new (NULL);
|
||||||
|
|||||||
@@ -27,16 +27,16 @@ do_entry_undo (GtkWidget *do_widget)
|
|||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||||
gtk_widget_set_margin_start (vbox, 18);
|
gtk_widget_set_margin_start (vbox, 5);
|
||||||
gtk_widget_set_margin_end (vbox, 18);
|
gtk_widget_set_margin_end (vbox, 5);
|
||||||
gtk_widget_set_margin_top (vbox, 18);
|
gtk_widget_set_margin_top (vbox, 5);
|
||||||
gtk_widget_set_margin_bottom (vbox, 18);
|
gtk_widget_set_margin_bottom (vbox, 5);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
||||||
|
|
||||||
label = gtk_label_new (NULL);
|
label = gtk_label_new (NULL);
|
||||||
gtk_label_set_markup (GTK_LABEL (label),
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
"Use Control+z or Control+Shift+z to undo or redo changes");
|
"Use Primary+z or Primary+Shift+z to undo or redo changes");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
/* Create our entry */
|
/* Create our entry */
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
/* Error States
|
|
||||||
*
|
|
||||||
* GtkLabel and GtkEntry can indicate errors if you set the .error
|
|
||||||
* style class on them.
|
|
||||||
*
|
|
||||||
* This examples shows how this can be used in a dialog for input validation.
|
|
||||||
*
|
|
||||||
* It also shows how pass callbacks and objects to GtkBuilder with
|
|
||||||
* GtkBuilderScope and gtk_builder_expose_object().
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
static void
|
|
||||||
validate_more_details (GtkEntry *entry,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
GtkEntry *details)
|
|
||||||
{
|
|
||||||
if (strlen (gtk_editable_get_text (GTK_EDITABLE (entry))) > 0 &&
|
|
||||||
strlen (gtk_editable_get_text (GTK_EDITABLE (details))) == 0)
|
|
||||||
{
|
|
||||||
gtk_widget_set_tooltip_text (GTK_WIDGET (entry), "Must have details first");
|
|
||||||
gtk_widget_add_css_class (GTK_WIDGET (entry), "error");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_widget_set_tooltip_text (GTK_WIDGET (entry), "");
|
|
||||||
gtk_widget_remove_css_class (GTK_WIDGET (entry), "error");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
mode_switch_state_set (GtkSwitch *sw,
|
|
||||||
gboolean state,
|
|
||||||
GtkWidget *scale)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
label = GTK_WIDGET (g_object_get_data (G_OBJECT (sw), "error_label"));
|
|
||||||
|
|
||||||
if (!state ||
|
|
||||||
(gtk_range_get_value (GTK_RANGE (scale)) > 50))
|
|
||||||
{
|
|
||||||
gtk_widget_hide (label);
|
|
||||||
gtk_switch_set_state (sw, state);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_widget_show (label);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
level_scale_value_changed (GtkRange *range,
|
|
||||||
GtkWidget *sw)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
label = GTK_WIDGET (g_object_get_data (G_OBJECT (sw), "error_label"));
|
|
||||||
|
|
||||||
if (gtk_switch_get_active (GTK_SWITCH (sw)) &&
|
|
||||||
!gtk_switch_get_state (GTK_SWITCH (sw)) &&
|
|
||||||
(gtk_range_get_value (range) > 50))
|
|
||||||
{
|
|
||||||
gtk_widget_hide (label);
|
|
||||||
gtk_switch_set_state (GTK_SWITCH (sw), TRUE);
|
|
||||||
}
|
|
||||||
else if (gtk_switch_get_state (GTK_SWITCH (sw)) &&
|
|
||||||
(gtk_range_get_value (range) <= 50))
|
|
||||||
{
|
|
||||||
gtk_switch_set_state (GTK_SWITCH (sw), FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_errorstates (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
static GtkWidget *window = NULL;
|
|
||||||
|
|
||||||
if (!window)
|
|
||||||
{
|
|
||||||
GtkWidget *toplevel;
|
|
||||||
GtkBuilder *builder;
|
|
||||||
GtkBuilderScope *scope;
|
|
||||||
GtkWidget *sw, *label;
|
|
||||||
|
|
||||||
toplevel = GTK_WIDGET (gtk_widget_get_root (do_widget));
|
|
||||||
|
|
||||||
scope = gtk_builder_cscope_new ();
|
|
||||||
gtk_builder_cscope_add_callback_symbols (GTK_BUILDER_CSCOPE (scope),
|
|
||||||
"validate_more_details", G_CALLBACK (validate_more_details),
|
|
||||||
"mode_switch_state_set", G_CALLBACK (mode_switch_state_set),
|
|
||||||
"level_scale_value_changed", G_CALLBACK (level_scale_value_changed),
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
|
||||||
gtk_builder_set_scope (builder, scope);
|
|
||||||
gtk_builder_expose_object (builder, "toplevel", G_OBJECT (toplevel));
|
|
||||||
gtk_builder_add_from_resource (builder, "/errorstates/errorstates.ui", NULL);
|
|
||||||
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog"));
|
|
||||||
|
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
|
||||||
gtk_widget_get_display (do_widget));
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|
||||||
|
|
||||||
sw = GTK_WIDGET (gtk_builder_get_object (builder, "mode_switch"));
|
|
||||||
label = GTK_WIDGET (gtk_builder_get_object (builder, "error_label"));
|
|
||||||
g_object_set_data (G_OBJECT (sw), "error_label", label);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
|
||||||
g_object_unref (scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_widget_show (window);
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<object class="GtkDialog" id="dialog">
|
|
||||||
<property name="transient-for">toplevel</property>
|
|
||||||
<property name="modal">1</property>
|
|
||||||
<property name="resizable">0</property>
|
|
||||||
<property name="use-header-bar">1</property>
|
|
||||||
<property name="title" translatable="yes">Error States</property>
|
|
||||||
<property name="hide-on-close">1</property>
|
|
||||||
<child internal-child="content_area">
|
|
||||||
<object class="GtkBox">
|
|
||||||
<child>
|
|
||||||
<object class="GtkGrid">
|
|
||||||
<property name="row-spacing">10</property>
|
|
||||||
<property name="column-spacing">10</property>
|
|
||||||
<property name="margin-start">20</property>
|
|
||||||
<property name="margin-end">20</property>
|
|
||||||
<property name="margin-top">20</property>
|
|
||||||
<property name="margin-bottom">20</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="halign">end</property>
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<property name="label">_Details</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="mnemonic-widget">details_entry</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="column">0</property>
|
|
||||||
<property name="row">0</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkEntry" id="details_entry">
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<signal name="notify::text" handler="validate_more_details" object="more_details_entry" swapped="yes"/>
|
|
||||||
<layout>
|
|
||||||
<property name="column">1</property>
|
|
||||||
<property name="row">0</property>
|
|
||||||
<property name="column-span">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="halign">end</property>
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<property name="label">More D_etails</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="mnemonic-widget">more_details_entry</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="column">0</property>
|
|
||||||
<property name="row">1</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkEntry" id="more_details_entry">
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<signal name="notify::text" handler="validate_more_details" object="details_entry" swapped="no"/>
|
|
||||||
<layout>
|
|
||||||
<property name="column">1</property>
|
|
||||||
<property name="row">1</property>
|
|
||||||
<property name="column-span">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="halign">end</property>
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<property name="label">_Level</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="mnemonic-widget">level_scale</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="column">0</property>
|
|
||||||
<property name="row">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScale" id="level_scale">
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<property name="draw-value">0</property>
|
|
||||||
<property name="adjustment">
|
|
||||||
<object class="GtkAdjustment">
|
|
||||||
<property name="upper">100</property>
|
|
||||||
<property name="lower">0</property>
|
|
||||||
<property name="value">50</property>
|
|
||||||
<property name="step-increment">1</property>
|
|
||||||
<property name="page-increment">10</property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<signal name="value-changed" handler="level_scale_value_changed" object="mode_switch" swapped="no"/>
|
|
||||||
<layout>
|
|
||||||
<property name="column">1</property>
|
|
||||||
<property name="row">2</property>
|
|
||||||
<property name="column-span">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="halign">end</property>
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<property name="label">_Mode</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="mnemonic-widget">mode_switch</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="column">0</property>
|
|
||||||
<property name="row">3</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkSwitch" id="mode_switch">
|
|
||||||
<property name="halign">start</property>
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<signal name="state-set" handler="mode_switch_state_set" object="level_scale" swapped="no"/>
|
|
||||||
<layout>
|
|
||||||
<property name="column">1</property>
|
|
||||||
<property name="row">3</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="error_label">
|
|
||||||
<property name="visible">0</property>
|
|
||||||
<property name="halign">start</property>
|
|
||||||
<property name="valign">baseline</property>
|
|
||||||
<property name="label">Level too low</property>
|
|
||||||
<style>
|
|
||||||
<class name="error"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="column">2</property>
|
|
||||||
<property name="row">3</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
response_cb (GtkDialog *dialog, int response_id)
|
response_cb (GtkDialog *dialog, gint response_id)
|
||||||
{
|
{
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
gtk_window_destroy (GTK_WINDOW (window));
|
||||||
window = NULL;
|
window = NULL;
|
||||||
@@ -35,10 +35,6 @@ do_expander (GtkWidget *do_widget)
|
|||||||
GtkWidget *sw;
|
GtkWidget *sw;
|
||||||
GtkWidget *tv;
|
GtkWidget *tv;
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
GtkTextIter start;
|
|
||||||
GtkTextIter end;
|
|
||||||
GtkTextTag *tag;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
@@ -68,25 +64,12 @@ do_expander (GtkWidget *do_widget)
|
|||||||
GTK_POLICY_NEVER,
|
GTK_POLICY_NEVER,
|
||||||
GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC);
|
||||||
gtk_scrolled_window_set_propagate_natural_height (GTK_SCROLLED_WINDOW (sw), TRUE);
|
gtk_scrolled_window_set_propagate_natural_height (GTK_SCROLLED_WINDOW (sw), TRUE);
|
||||||
gtk_widget_set_vexpand (sw, TRUE);
|
|
||||||
|
|
||||||
tv = gtk_text_view_new ();
|
tv = gtk_text_view_new ();
|
||||||
|
|
||||||
g_object_set (tv,
|
|
||||||
"left-margin", 10,
|
|
||||||
"right-margin", 10,
|
|
||||||
"top-margin", 10,
|
|
||||||
"bottom-margin", 10,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
|
||||||
gtk_text_view_set_editable (GTK_TEXT_VIEW (tv), FALSE);
|
gtk_text_view_set_editable (GTK_TEXT_VIEW (tv), FALSE);
|
||||||
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (tv), FALSE);
|
|
||||||
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (tv), GTK_WRAP_WORD);
|
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (tv), GTK_WRAP_WORD);
|
||||||
gtk_text_view_set_pixels_above_lines (GTK_TEXT_VIEW (tv), 2);
|
gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer),
|
||||||
gtk_text_view_set_pixels_below_lines (GTK_TEXT_VIEW (tv), 2);
|
|
||||||
|
|
||||||
gtk_text_buffer_set_text (buffer,
|
|
||||||
"Finally, the full story with all details. "
|
"Finally, the full story with all details. "
|
||||||
"And all the inside information, including "
|
"And all the inside information, including "
|
||||||
"error codes, etc etc. Pages of information, "
|
"error codes, etc etc. Pages of information, "
|
||||||
@@ -94,22 +77,7 @@ do_expander (GtkWidget *do_widget)
|
|||||||
"or even resize the window - it works !\n"
|
"or even resize the window - it works !\n"
|
||||||
"A second paragraph will contain even more "
|
"A second paragraph will contain even more "
|
||||||
"innuendo, just to make you scroll down or "
|
"innuendo, just to make you scroll down or "
|
||||||
"resize the window.\n"
|
"resize the window. Do it already !", -1);
|
||||||
"Do it already!\n", -1);
|
|
||||||
|
|
||||||
gtk_text_buffer_get_end_iter (buffer, &start);
|
|
||||||
paintable = GDK_PAINTABLE (gdk_texture_new_from_resource ("/cursors/images/gtk_logo_cursor.png"));
|
|
||||||
gtk_text_buffer_insert_paintable (buffer, &start, paintable);
|
|
||||||
g_object_unref (paintable);
|
|
||||||
gtk_text_iter_backward_char (&start);
|
|
||||||
|
|
||||||
gtk_text_buffer_get_end_iter (buffer, &end);
|
|
||||||
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
|
||||||
"pixels-above-lines", 200,
|
|
||||||
"justification", GTK_JUSTIFY_RIGHT,
|
|
||||||
NULL);
|
|
||||||
gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
|
|
||||||
|
|
||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), tv);
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), tv);
|
||||||
gtk_expander_set_child (GTK_EXPANDER (expander), sw);
|
gtk_expander_set_child (GTK_EXPANDER (expander), sw);
|
||||||
gtk_box_append (GTK_BOX (area), expander);
|
gtk_box_append (GTK_BOX (area), expander);
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/* Tree View/Filter Model
|
/* Tree View/Filter Model
|
||||||
* #Keywords: GtkTreeView
|
|
||||||
*
|
*
|
||||||
* This example demonstrates how GtkTreeModelFilter can be used not
|
* This example demonstrates how GtkTreeModelFilter can be used not
|
||||||
* just to show a subset of the rows, but also to compute columns
|
* just to show a subset of the rows, but also to compute columns
|
||||||
@@ -23,8 +22,8 @@ format_number (GtkTreeViewColumn *col,
|
|||||||
GtkTreeIter *iter,
|
GtkTreeIter *iter,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
int num;
|
gint num;
|
||||||
char *text;
|
gchar *text;
|
||||||
|
|
||||||
gtk_tree_model_get (model, iter, GPOINTER_TO_INT (data), &num, -1);
|
gtk_tree_model_get (model, iter, GPOINTER_TO_INT (data), &num, -1);
|
||||||
text = g_strdup_printf ("%d", num);
|
text = g_strdup_printf ("%d", num);
|
||||||
@@ -36,11 +35,11 @@ static void
|
|||||||
filter_modify_func (GtkTreeModel *model,
|
filter_modify_func (GtkTreeModel *model,
|
||||||
GtkTreeIter *iter,
|
GtkTreeIter *iter,
|
||||||
GValue *value,
|
GValue *value,
|
||||||
int column,
|
gint column,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkTreeModelFilter *filter_model = GTK_TREE_MODEL_FILTER (model);
|
GtkTreeModelFilter *filter_model = GTK_TREE_MODEL_FILTER (model);
|
||||||
int width, height;
|
gint width, height;
|
||||||
GtkTreeModel *child_model;
|
GtkTreeModel *child_model;
|
||||||
GtkTreeIter child_iter;
|
GtkTreeIter child_iter;
|
||||||
|
|
||||||
@@ -76,7 +75,7 @@ visible_func (GtkTreeModel *model,
|
|||||||
GtkTreeIter *iter,
|
GtkTreeIter *iter,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
int width;
|
gint width;
|
||||||
|
|
||||||
gtk_tree_model_get (model, iter,
|
gtk_tree_model_get (model, iter,
|
||||||
WIDTH_COLUMN, &width,
|
WIDTH_COLUMN, &width,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.16"/>
|
||||||
<object class="GtkListStore" id="liststore1">
|
<object class="GtkListStore" id="liststore1">
|
||||||
<columns>
|
<columns>
|
||||||
<column type="gint"/>
|
<column type="gint"/>
|
||||||
@@ -44,9 +45,12 @@
|
|||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="weight" value="bold"></attribute>
|
<attribute name="weight" value="bold"></attribute>
|
||||||
</attributes>
|
</attributes>
|
||||||
|
<accessibility>
|
||||||
|
<relation type="label-for" target="treeview1"/>
|
||||||
|
</accessibility>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -79,9 +83,12 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<accessibility>
|
||||||
|
<relation type="labelled-by" target="label1"/>
|
||||||
|
</accessibility>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -126,9 +133,12 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<accessibility>
|
||||||
|
<relation type="labelled-by" target="label2"/>
|
||||||
|
</accessibility>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">1</property>
|
<property name="top-attach">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -139,9 +149,12 @@
|
|||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="weight" value="bold"></attribute>
|
<attribute name="weight" value="bold"></attribute>
|
||||||
</attributes>
|
</attributes>
|
||||||
|
<accessibility>
|
||||||
|
<relation type="label-for" target="treeview2"/>
|
||||||
|
</accessibility>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="left-attach">1</property>
|
||||||
<property name="row">0</property>
|
<property name="top-attach">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -152,9 +165,12 @@
|
|||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="weight" value="bold"></attribute>
|
<attribute name="weight" value="bold"></attribute>
|
||||||
</attributes>
|
</attributes>
|
||||||
|
<accessibility>
|
||||||
|
<relation type="label-for" target="treeview3"/>
|
||||||
|
</accessibility>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">2</property>
|
<property name="top-attach">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -181,9 +197,12 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<accessibility>
|
||||||
|
<relation type="labelled-by" target="label3"/>
|
||||||
|
</accessibility>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="left-attach">0</property>
|
||||||
<property name="row">3</property>
|
<property name="top-attach">3</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
#include "gtkfishbowl.h"
|
#include "gtkfishbowl.h"
|
||||||
#include "gtkgears.h"
|
#include "gtkgears.h"
|
||||||
#include "gskshaderpaintable.h"
|
|
||||||
|
|
||||||
const char *const css =
|
const char *const css =
|
||||||
".blurred-button {"
|
".blurred-button {"
|
||||||
@@ -119,12 +118,13 @@ create_label (void)
|
|||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_video (void)
|
create_video (void)
|
||||||
{
|
{
|
||||||
GtkWidget *w = gtk_video_new ();
|
GtkMediaStream *stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm");
|
||||||
|
GtkWidget *w = gtk_picture_new_for_paintable (GDK_PAINTABLE (stream));
|
||||||
|
|
||||||
gtk_widget_set_size_request (w, 64, 64);
|
gtk_widget_set_size_request (w, 64, 64);
|
||||||
gtk_video_set_loop (GTK_VIDEO (w), TRUE);
|
gtk_media_stream_set_loop (stream, TRUE);
|
||||||
gtk_video_set_autoplay (GTK_VIDEO (w), TRUE);
|
gtk_media_stream_play (stream);
|
||||||
gtk_video_set_resource (GTK_VIDEO (w), "/images/gtk-logo.webm");
|
g_object_unref (stream);
|
||||||
|
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
@@ -149,38 +149,6 @@ create_switch (void)
|
|||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
update_paintable (GtkWidget *widget,
|
|
||||||
GdkFrameClock *frame_clock,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GskShaderPaintable *paintable;
|
|
||||||
gint64 frame_time;
|
|
||||||
|
|
||||||
paintable = GSK_SHADER_PAINTABLE (gtk_picture_get_paintable (GTK_PICTURE (widget)));
|
|
||||||
frame_time = gdk_frame_clock_get_frame_time (frame_clock);
|
|
||||||
gsk_shader_paintable_update_time (paintable, 0, frame_time);
|
|
||||||
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
create_cogs (void)
|
|
||||||
{
|
|
||||||
GtkWidget *picture;
|
|
||||||
static GskGLShader *cog_shader = NULL;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
if (cog_shader == NULL)
|
|
||||||
cog_shader = gsk_gl_shader_new_from_resource ("/gltransition/cogs2.glsl");
|
|
||||||
paintable = gsk_shader_paintable_new (g_object_ref (cog_shader), NULL);
|
|
||||||
picture = gtk_picture_new_for_paintable (paintable);
|
|
||||||
gtk_widget_set_size_request (picture, 150, 75);
|
|
||||||
gtk_widget_add_tick_callback (picture, update_paintable, NULL, NULL);
|
|
||||||
|
|
||||||
return picture;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mapped (GtkWidget *w)
|
mapped (GtkWidget *w)
|
||||||
{
|
{
|
||||||
@@ -217,7 +185,6 @@ static const struct {
|
|||||||
{ "Gears", create_gears },
|
{ "Gears", create_gears },
|
||||||
{ "Switch", create_switch },
|
{ "Switch", create_switch },
|
||||||
{ "Menubutton", create_menu_button },
|
{ "Menubutton", create_menu_button },
|
||||||
{ "Shader", create_cogs },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int selected_widget_type = -1;
|
static int selected_widget_type = -1;
|
||||||
@@ -242,7 +209,7 @@ set_widget_type (GtkFishbowl *fishbowl,
|
|||||||
widget_types[selected_widget_type].name);
|
widget_types[selected_widget_type].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
void
|
||||||
fishbowl_next_button_clicked_cb (GtkButton *source,
|
fishbowl_next_button_clicked_cb (GtkButton *source,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
@@ -257,7 +224,7 @@ fishbowl_next_button_clicked_cb (GtkButton *source,
|
|||||||
set_widget_type (fishbowl, new_index);
|
set_widget_type (fishbowl, new_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
void
|
||||||
fishbowl_prev_button_clicked_cb (GtkButton *source,
|
fishbowl_prev_button_clicked_cb (GtkButton *source,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
@@ -272,7 +239,7 @@ fishbowl_prev_button_clicked_cb (GtkButton *source,
|
|||||||
set_widget_type (fishbowl, new_index);
|
set_widget_type (fishbowl, new_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
void
|
||||||
fishbowl_changes_toggled_cb (GtkToggleButton *button,
|
fishbowl_changes_toggled_cb (GtkToggleButton *button,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
@@ -282,7 +249,7 @@ fishbowl_changes_toggled_cb (GtkToggleButton *button,
|
|||||||
gtk_button_set_icon_name (GTK_BUTTON (button), "changes-allow");
|
gtk_button_set_icon_name (GTK_BUTTON (button), "changes-allow");
|
||||||
}
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT char *
|
char *
|
||||||
format_header_cb (GObject *object,
|
format_header_cb (GObject *object,
|
||||||
guint count,
|
guint count,
|
||||||
double fps)
|
double fps)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
<property name="default-height">400</property>
|
<property name="default-height">400</property>
|
||||||
<child type="titlebar">
|
<child type="titlebar">
|
||||||
<object class="GtkHeaderBar" id="">
|
<object class="GtkHeaderBar" id="">
|
||||||
|
<property name="show-title-buttons">1</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<style>
|
<style>
|
||||||
@@ -13,13 +14,13 @@
|
|||||||
</style>
|
</style>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
<property name="icon-name">go-previous-symbolic</property>
|
<property name="icon-name">pan-start-symbolic</property>
|
||||||
<signal name="clicked" handler="fishbowl_prev_button_clicked_cb" object="bowl" swapped="no"/>
|
<signal name="clicked" handler="fishbowl_prev_button_clicked_cb" object="bowl" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
<property name="icon-name">go-next-symbolic</property>
|
<property name="icon-name">pan-end-symbolic</property>
|
||||||
<signal name="clicked" handler="fishbowl_next_button_clicked_cb" object="bowl" swapped="no"/>
|
<signal name="clicked" handler="fishbowl_next_button_clicked_cb" object="bowl" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -33,9 +34,6 @@
|
|||||||
<lookup name="framerate">bowl</lookup>
|
<lookup name="framerate">bowl</lookup>
|
||||||
</closure>
|
</closure>
|
||||||
</binding>
|
</binding>
|
||||||
<attributes>
|
|
||||||
<attribute name="font-features" value="tnum=1"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child type="end">
|
<child type="end">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user