Compare commits
1 Commits
drop-highl
...
ci-cache-f
Author | SHA1 | Date | |
---|---|---|---|
|
5383dcca3c |
@@ -1,32 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2021 The GTK Authors
|
|
||||||
# SPDX-License-Identifier: CC0-1.0
|
|
||||||
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
[*.[ch]]
|
|
||||||
indent_size = 2
|
|
||||||
indent_style = space
|
|
||||||
insert_final_newline = true
|
|
||||||
# For the legacy tabs which still exist in the code:
|
|
||||||
tab_width = 8
|
|
||||||
|
|
||||||
[*.ui]
|
|
||||||
indent_size = 2
|
|
||||||
indent_style = space
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[*.xml]
|
|
||||||
indent_size = 2
|
|
||||||
indent_style = space
|
|
||||||
|
|
||||||
[meson.build]
|
|
||||||
indent_size = 2
|
|
||||||
indent_style = space
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
max_line_length = 80
|
|
@@ -7,7 +7,6 @@ stages:
|
|||||||
- analysis
|
- analysis
|
||||||
- docs
|
- docs
|
||||||
- flatpak
|
- flatpak
|
||||||
- publish
|
|
||||||
- deploy
|
- deploy
|
||||||
|
|
||||||
.cache-paths: &cache-paths
|
.cache-paths: &cache-paths
|
||||||
@@ -25,8 +24,9 @@ variables:
|
|||||||
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
||||||
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled"
|
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled"
|
||||||
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
||||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v35"
|
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v31"
|
||||||
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:v31"
|
||||||
|
|
||||||
.only-default:
|
.only-default:
|
||||||
only:
|
only:
|
||||||
@@ -58,10 +58,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:
|
||||||
@@ -80,18 +78,13 @@ fedora-x86_64:
|
|||||||
EXTRA_MESON_FLAGS: "--buildtype=debug --default-library=both"
|
EXTRA_MESON_FLAGS: "--buildtype=debug --default-library=both"
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- meson subprojects update
|
- rm -rf subprojects/glib
|
||||||
- mkdir _install
|
- meson subprojects update --reset
|
||||||
- meson --prefix=${CI_PROJECT_DIR}/_install
|
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
||||||
${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 waylandgles
|
|
||||||
- .gitlab-ci/run-tests.sh _build broadway
|
- .gitlab-ci/run-tests.sh _build broadway
|
||||||
|
|
||||||
release-build:
|
release-build:
|
||||||
@@ -102,7 +95,7 @@ release-build:
|
|||||||
EXTRA_MESON_FLAGS: "--buildtype=release"
|
EXTRA_MESON_FLAGS: "--buildtype=release"
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- meson subprojects update
|
- meson subprojects update --reset
|
||||||
- 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
|
||||||
@@ -117,7 +110,7 @@ installed-tests:
|
|||||||
G_TEST_ACCESSIBLE: 1
|
G_TEST_ACCESSIBLE: 1
|
||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- meson subprojects update
|
- meson subprojects update --reset
|
||||||
- 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
|
||||||
@@ -172,10 +165,8 @@ macos:
|
|||||||
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
|
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
|
||||||
- export MESON_FORCE_BACKTRACE=1
|
- export MESON_FORCE_BACKTRACE=1
|
||||||
script:
|
script:
|
||||||
|
- meson subprojects update --reset
|
||||||
- meson -Dx11-backend=false
|
- meson -Dx11-backend=false
|
||||||
-Dbroadway-backend=true
|
|
||||||
-Dmacos-backend=true
|
|
||||||
-Dmedia-gstreamer=disabled
|
|
||||||
-Dintrospection=disabled
|
-Dintrospection=disabled
|
||||||
-Dcpp_std=c++11
|
-Dcpp_std=c++11
|
||||||
-Dpixman:tests=disabled
|
-Dpixman:tests=disabled
|
||||||
@@ -313,7 +304,7 @@ asan-build:
|
|||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
reference:
|
reference:
|
||||||
image: $FEDORA_IMAGE
|
image: $DOCS_IMAGE
|
||||||
stage: docs
|
stage: docs
|
||||||
needs: []
|
needs: []
|
||||||
variables:
|
variables:
|
||||||
@@ -339,11 +330,14 @@ reference:
|
|||||||
paths:
|
paths:
|
||||||
- _reference
|
- _reference
|
||||||
|
|
||||||
publish-docs:
|
pages:
|
||||||
stage: publish
|
stage: deploy
|
||||||
needs: ['reference']
|
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/
|
||||||
|
- cp .gitlab-ci/pages/* public/
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- public
|
||||||
only:
|
only:
|
||||||
refs:
|
- master
|
||||||
- master
|
|
||||||
|
@@ -38,6 +38,7 @@ RUN dnf -y install \
|
|||||||
gstreamer1-plugins-good \
|
gstreamer1-plugins-good \
|
||||||
gstreamer1-plugins-bad-free-devel \
|
gstreamer1-plugins-bad-free-devel \
|
||||||
gstreamer1-plugins-base-devel \
|
gstreamer1-plugins-base-devel \
|
||||||
|
gtk-doc \
|
||||||
hicolor-icon-theme \
|
hicolor-icon-theme \
|
||||||
iso-codes \
|
iso-codes \
|
||||||
itstool \
|
itstool \
|
||||||
@@ -48,12 +49,9 @@ RUN dnf -y install \
|
|||||||
libcloudproviders-devel \
|
libcloudproviders-devel \
|
||||||
libepoxy-devel \
|
libepoxy-devel \
|
||||||
libffi-devel \
|
libffi-devel \
|
||||||
libjpeg-turbo-devel \
|
|
||||||
libmount-devel \
|
libmount-devel \
|
||||||
libpng-devel \
|
|
||||||
librsvg2 \
|
librsvg2 \
|
||||||
libselinux-devel \
|
libselinux-devel \
|
||||||
libtiff-devel \
|
|
||||||
libubsan \
|
libubsan \
|
||||||
libXcomposite-devel \
|
libXcomposite-devel \
|
||||||
libXcursor-devel \
|
libXcursor-devel \
|
||||||
@@ -76,7 +74,6 @@ RUN dnf -y install \
|
|||||||
pcre-devel \
|
pcre-devel \
|
||||||
pcre-static \
|
pcre-static \
|
||||||
python3 \
|
python3 \
|
||||||
python3-docutils \
|
|
||||||
python3-gobject \
|
python3-gobject \
|
||||||
python3-jinja2 \
|
python3-jinja2 \
|
||||||
python3-markdown \
|
python3-markdown \
|
||||||
|
@@ -44,24 +44,6 @@ case "${backend}" in
|
|||||||
kill ${compositor}
|
kill ${compositor}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
waylandgles)
|
|
||||||
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
|
||||||
|
|
||||||
weston --backend=headless-backend.so --socket=wayland-6 --idle-time=0 &
|
|
||||||
compositor=$!
|
|
||||||
export WAYLAND_DISPLAY=wayland-6
|
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
|
||||||
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
|
||||||
--print-errorlogs \
|
|
||||||
--setup=${backend} \
|
|
||||||
--suite=gtk \
|
|
||||||
--no-suite=gsk-compare-broadway
|
|
||||||
|
|
||||||
exit_code=$?
|
|
||||||
kill ${compositor}
|
|
||||||
;;
|
|
||||||
|
|
||||||
broadway)
|
broadway)
|
||||||
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
||||||
|
|
||||||
@@ -80,12 +62,6 @@ case "${backend}" in
|
|||||||
exit_code=0
|
exit_code=0
|
||||||
kill ${server}
|
kill ${server}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
|
||||||
echo "Failed to add ${backend} to .gitlab-ci/run-tests.sh"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
cd ${builddir}
|
cd ${builddir}
|
||||||
|
@@ -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:-} \
|
||||||
|
@@ -6,7 +6,7 @@ call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliar
|
|||||||
|
|
||||||
:: FIXME: make warnings fatal
|
:: FIXME: make warnings fatal
|
||||||
pip3 install --upgrade --user meson==0.56.2 || goto :error
|
pip3 install --upgrade --user meson==0.56.2 || goto :error
|
||||||
meson -Dmedia-gstreamer=disabled _build || goto :error
|
meson _build || goto :error
|
||||||
ninja -C _build || goto :error
|
ninja -C _build || goto :error
|
||||||
|
|
||||||
goto :EOF
|
goto :EOF
|
||||||
|
@@ -40,7 +40,7 @@ export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
|||||||
# https://gitlab.gnome.org/GNOME/gtk/-/issues/2243
|
# https://gitlab.gnome.org/GNOME/gtk/-/issues/2243
|
||||||
# https://gitlab.gnome.org/GNOME/gtk/-/issues/3002
|
# https://gitlab.gnome.org/GNOME/gtk/-/issues/3002
|
||||||
|
|
||||||
if ! pkg-config --atleast-version=2.66.0 glib-2.0; then
|
if ! pkg-config --atleast-version=2.65.0 glib-2.0; then
|
||||||
git clone https://gitlab.gnome.org/GNOME/glib.git _glib
|
git clone https://gitlab.gnome.org/GNOME/glib.git _glib
|
||||||
meson setup _glib_build _glib
|
meson setup _glib_build _glib
|
||||||
meson compile -C _glib_build
|
meson compile -C _glib_build
|
||||||
@@ -48,7 +48,7 @@ if ! pkg-config --atleast-version=2.66.0 glib-2.0; then
|
|||||||
fi
|
fi
|
||||||
pkg-config --modversion glib-2.0
|
pkg-config --modversion glib-2.0
|
||||||
|
|
||||||
if ! pkg-config --atleast-version=1.49.1 pango; then
|
if ! pkg-config --atleast-version=1.47.0 pango; then
|
||||||
git clone https://gitlab.gnome.org/GNOME/pango.git _pango
|
git clone https://gitlab.gnome.org/GNOME/pango.git _pango
|
||||||
meson setup _pango_build _pango
|
meson setup _pango_build _pango
|
||||||
meson compile -C _pango_build
|
meson compile -C _pango_build
|
||||||
|
399
NEWS
@@ -1,402 +1,3 @@
|
|||||||
Overview of Changes in 4.5.0
|
|
||||||
============================
|
|
||||||
|
|
||||||
* gsk:
|
|
||||||
- Drop the GL renderer in favor of NGL
|
|
||||||
- Rename NGL to GL
|
|
||||||
- Fix some coordinate overflow issues
|
|
||||||
- Reimplement texture upload and download for better
|
|
||||||
support of image formats and color spaces
|
|
||||||
- New api:
|
|
||||||
gsk_transform_skew
|
|
||||||
gsk_transform_to_2d_components
|
|
||||||
|
|
||||||
* gdk:
|
|
||||||
- Support HSL in gdk_rgba_parse
|
|
||||||
- Use libpng, libjpeg and libtiff directly when loading
|
|
||||||
textures, and support more image formats (including 16bit
|
|
||||||
and float formats)
|
|
||||||
- New apis:
|
|
||||||
gdk_texture_new_from_bytes
|
|
||||||
gdk_texture_new_from_filename
|
|
||||||
gdk_texture_download_float
|
|
||||||
gdk_texture_save_to_png_bytes
|
|
||||||
gdk_texture_save_to_tiff
|
|
||||||
gdk_texture_save_to_tiff_bytes
|
|
||||||
gdk_display_create_gl_context
|
|
||||||
- Implement GIcon and GLoadableIcon in GdkTexture
|
|
||||||
- Move EGL initialization to the frontend
|
|
||||||
- Use configless EGL contexts, if supported
|
|
||||||
- Use >8bit pixel formats, if supported and requested
|
|
||||||
|
|
||||||
* css:
|
|
||||||
- Add support for line-height
|
|
||||||
- Add support for text-transform
|
|
||||||
|
|
||||||
* theme:
|
|
||||||
- Fixes for buttons in toolbars
|
|
||||||
|
|
||||||
* input:
|
|
||||||
- Update compose sequences from libX11 1.7.2
|
|
||||||
- Accept replacement string longer than 20 characters
|
|
||||||
|
|
||||||
* text:
|
|
||||||
- Implement sloped caret drawing
|
|
||||||
- Add a gtk-hint-font-metrics setting to switch
|
|
||||||
font rendering to be more similar to GTK3
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Add support for line height
|
|
||||||
- Add support for text transforms
|
|
||||||
- Misc fixes for css->pango attribute translations
|
|
||||||
- Invalidate pango contexts when font settings change
|
|
||||||
- Improve undo grouping when overwriting
|
|
||||||
|
|
||||||
* GtkListView:
|
|
||||||
- Make tree indentation more flexible with
|
|
||||||
GtkTreeExpander:indent-for-icon
|
|
||||||
|
|
||||||
* GtkMenuButton:
|
|
||||||
- Support custom children
|
|
||||||
|
|
||||||
* GtkFlowBox:
|
|
||||||
- Add prepend and append
|
|
||||||
|
|
||||||
* GtkCalendar:
|
|
||||||
- Fix handling of weeks starting on Monday
|
|
||||||
|
|
||||||
* GtkWindow:
|
|
||||||
- Add a titlebar property
|
|
||||||
|
|
||||||
* GtkDropDown:
|
|
||||||
- Add a show-arrow property
|
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
|
||||||
- Support a use-markup attribute in menu models
|
|
||||||
|
|
||||||
* Add GtkSymbolicPaintable
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- Support DND in gtk4-node-editor and the inspector's recorder
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Improve the font rendering demo
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Require Pango 1.49
|
|
||||||
- Require libpng, libtiff and libjpeg
|
|
||||||
- Speed up handling of resources during build
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Support touchpad gestures with XInput 2.4
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Fix DND coordinates
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Basque
|
|
||||||
Brazilian Portuguese
|
|
||||||
Catalan
|
|
||||||
Chinese (China)
|
|
||||||
Croatian
|
|
||||||
Czech
|
|
||||||
Dutch
|
|
||||||
Finnish
|
|
||||||
French
|
|
||||||
Galician
|
|
||||||
German
|
|
||||||
Hebrew
|
|
||||||
Hungarian
|
|
||||||
Icelandic
|
|
||||||
Indonesian
|
|
||||||
Kazakh
|
|
||||||
Korean
|
|
||||||
Latvian
|
|
||||||
Lithuanian
|
|
||||||
Persian
|
|
||||||
Portuguese
|
|
||||||
Romanian
|
|
||||||
Serbian
|
|
||||||
Slovak
|
|
||||||
Spanish
|
|
||||||
Swedish
|
|
||||||
Turkish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.4.0
|
|
||||||
============================
|
|
||||||
|
|
||||||
* Input:
|
|
||||||
- Match IBus for display of Compose sequences
|
|
||||||
- Match IBus for handling of mismatches
|
|
||||||
- Handle Escape in Compose sequences
|
|
||||||
- Allow multiple dead keys
|
|
||||||
- Support 32bit keysyms
|
|
||||||
|
|
||||||
* GtkCheckButton:
|
|
||||||
- Activate when moving focus
|
|
||||||
|
|
||||||
* GtkLabel:
|
|
||||||
- Propertly ignore double underscores for mnemonics
|
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
|
||||||
- Fix focus cycling
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Improve word selection
|
|
||||||
- Fix block cursors on empty lines
|
|
||||||
|
|
||||||
* GdkToplevel:
|
|
||||||
- Support the gnome-shell titlebar gesture protocol
|
|
||||||
|
|
||||||
* GdkDropTarget:
|
|
||||||
- Allow creating drop targets in ui files
|
|
||||||
|
|
||||||
* gsk:
|
|
||||||
- Handle partial color fonts correctly
|
|
||||||
- Use harfbuzz for color font information
|
|
||||||
- Avoid pango for glyph cache rendering
|
|
||||||
- Shrink shadow extents
|
|
||||||
|
|
||||||
* Settings:
|
|
||||||
- Change the default for gtk-split-cursor to FALSE
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Small improvements to widget-factory
|
|
||||||
- gtk-demo: Improve the hypertext demo
|
|
||||||
- gtk-dem: Improve the clipboard demo
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Set WM_CLASS on toplevels
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Support wl_seat v7
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Drop the local DND protocol
|
|
||||||
- Avoid WGL if shaders don't work
|
|
||||||
- Use WinPointer API
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Belarusian
|
|
||||||
Friulian
|
|
||||||
Hebrew
|
|
||||||
Khmer
|
|
||||||
Persian
|
|
||||||
Polish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.3.2
|
|
||||||
============================
|
|
||||||
|
|
||||||
* GtkToggleButton:
|
|
||||||
- Fix the actionable implementation
|
|
||||||
|
|
||||||
* GtkCheckButton:
|
|
||||||
- Fix the actionable implementation
|
|
||||||
- Cancel activation on when the pointer leaves
|
|
||||||
|
|
||||||
* GtkMenuButton:
|
|
||||||
- Make activatable again
|
|
||||||
- Add a way to have an icon + arrow
|
|
||||||
|
|
||||||
* GtkColorButton:
|
|
||||||
- Make activatable again
|
|
||||||
|
|
||||||
* GtkFontButton:
|
|
||||||
- Make activatable again
|
|
||||||
|
|
||||||
* GtkAppChooserButton:
|
|
||||||
- Make activatable again
|
|
||||||
|
|
||||||
* GtkColumnView:
|
|
||||||
- Fix double activation
|
|
||||||
|
|
||||||
* GtkLabel:
|
|
||||||
- Fix mnemonics without markup
|
|
||||||
|
|
||||||
* GtkTreeView:
|
|
||||||
- Clip header buttons
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Add api to get the RTL and LTR contexts
|
|
||||||
- Fix some errors in text history grouping
|
|
||||||
|
|
||||||
* GtkText:
|
|
||||||
- Don't show placeholder text on top of entry text
|
|
||||||
- Add api to compute the cursor extents
|
|
||||||
- Fix y coordinates for text selection
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Don't show Trash in the side bar
|
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
|
||||||
- Add scrollbars to long menus
|
|
||||||
|
|
||||||
* GtkActionMuxer:
|
|
||||||
- Fix propagation of accel changes
|
|
||||||
|
|
||||||
* Introspection:
|
|
||||||
- Annotate all filename arguments
|
|
||||||
- Rename GtkMediaStream apis to avoid name collisions
|
|
||||||
- Rename GtkDropTarget properties to avoid name collisions
|
|
||||||
- Make GtkPasswordEntryBuffer introspectable
|
|
||||||
|
|
||||||
* Printing:
|
|
||||||
- Remove the Google Cloud Print backend
|
|
||||||
|
|
||||||
* Theme:
|
|
||||||
- Sync included icons with the Adwaita icon theme
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Avoid overflowing the vertex counter
|
|
||||||
- Handle negative scales correctly in the ngl renderer
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- Cleanup and simplify OpenGL setup code
|
|
||||||
- Add a GdkDisplay::init_gl vfunc and gdk_display_prepare_gl() api
|
|
||||||
- Require EGL 1.4
|
|
||||||
- Fix EGL + NVidia
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Enable gstreamer by default
|
|
||||||
- Disable Vulkan by default
|
|
||||||
- Remove the sassc option
|
|
||||||
- Remove options and checks for X11 extensions
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Stop using XComposite
|
|
||||||
- Remove the Visual cache
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Fix some DND corner cases
|
|
||||||
- Work with version 2 of pointer-gestures-v1
|
|
||||||
- Look for cursor themes in $HOME/.icons
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Fix SIGILL on x64 due to popcnt
|
|
||||||
- Fix popup placement
|
|
||||||
- Fix drag icon placement
|
|
||||||
- Clean up HiDPI and WGL support
|
|
||||||
- Default to WGL
|
|
||||||
|
|
||||||
* MacOs:
|
|
||||||
- Fix input method support
|
|
||||||
- Register known clipboard types for drop targets
|
|
||||||
- Add initial DND support
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Brazilian Portuguese
|
|
||||||
Portuguese
|
|
||||||
Romanian
|
|
||||||
Turkish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.3.1
|
|
||||||
============================
|
|
||||||
|
|
||||||
* GtkEmojiChooser:
|
|
||||||
- Update data from CLDR 39
|
|
||||||
- Load Emoji data for both language and territory
|
|
||||||
|
|
||||||
* GtkCalendar:
|
|
||||||
- Fix an off-by-one error in day numbers
|
|
||||||
|
|
||||||
* GtkListView:
|
|
||||||
- Add .activatable style class to activatable items
|
|
||||||
|
|
||||||
* GtkCheckButton:
|
|
||||||
- Don't allow unchecking grouped radio buttons
|
|
||||||
|
|
||||||
*GtkToggleButton:
|
|
||||||
- Fix mnemonic activation propagation
|
|
||||||
|
|
||||||
* GtkLabel:
|
|
||||||
- Make mnemonics work even when invisible
|
|
||||||
- Fix mnemonic activation propagation
|
|
||||||
|
|
||||||
* GtkMenuButton:
|
|
||||||
- Add a property to mark primary menus and make F10 work
|
|
||||||
|
|
||||||
* GtkApplication:
|
|
||||||
- Fix initial screensaver state async
|
|
||||||
|
|
||||||
* GtkEntry:
|
|
||||||
- Apply xalign to placeholder text (as it was in GTK 3)
|
|
||||||
|
|
||||||
* GtkSpinButton:
|
|
||||||
- Fix swipe gestures
|
|
||||||
|
|
||||||
* GtkStackSwitcher:
|
|
||||||
- Implement GtkOrientable (as it was in GTK 3)
|
|
||||||
- Fix a use-after-free problem with drag timeouts
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Add support for (case-insensitive) suffix matches in GtkFileFilter
|
|
||||||
|
|
||||||
* GtkPasswordEntry:
|
|
||||||
- Make GtkPasswordEntryBuffer public, to make it easier
|
|
||||||
to write your own password entry widget
|
|
||||||
|
|
||||||
* Input:
|
|
||||||
- Fix interference between various obscure XKB features
|
|
||||||
(e.g. overlays) and Compose sequences
|
|
||||||
|
|
||||||
* Action support:
|
|
||||||
- Fix submenu-action handling
|
|
||||||
|
|
||||||
* Theme:
|
|
||||||
- Update icons from the Adwaita icon theme
|
|
||||||
- Fix icon names for GtkSwitch
|
|
||||||
- Fix switch-off icon
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Improve transformed offscreen rendering
|
|
||||||
- Add padding between cached glyphs
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Fix monitor sizes in the presence of transforms
|
|
||||||
- Add a getter for the EGLDisplay
|
|
||||||
- Fix click-drag-release sequences for popovers
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Support EGL for X11. Fall back to GLX if EGL isn't available
|
|
||||||
- Always fall back to GLX on NVidia
|
|
||||||
- Add a getter for the EGLDisplay
|
|
||||||
|
|
||||||
* Broadway:
|
|
||||||
- Add a setter for display scale
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Add a getter for the EGLDisplay
|
|
||||||
- Make GL work for media playback
|
|
||||||
|
|
||||||
* MacOS:
|
|
||||||
- Fix menubar appearance
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- gtk4-builder-tool: Replace can-focus with focusable in 3-to-4 conversion
|
|
||||||
|
|
||||||
* Introspection:
|
|
||||||
- Add missing annotations in a few places (e.g. gtk_free_view_row_activated)
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Only build one source file with -mf16c
|
|
||||||
- Fix devel styling for ci flatpak builds
|
|
||||||
- Generate appdata for demo flatpaks
|
|
||||||
|
|
||||||
* Docs:
|
|
||||||
- Numerous fixes and additions
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Friulian
|
|
||||||
Nepali
|
|
||||||
Norwegian Bokmål
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.3.0
|
Overview of Changes in 4.3.0
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
15
README.md
@@ -10,12 +10,10 @@ 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
|
||||||
|
|
||||||
@@ -114,7 +112,7 @@ can be found in the file:
|
|||||||
docs/reference/gtk/html/gtk-building.html
|
docs/reference/gtk/html/gtk-building.html
|
||||||
```
|
```
|
||||||
|
|
||||||
Or [online](https://docs.gtk.org/gtk4/building.html)
|
Or [online](https://developer.gnome.org/gtk4/stable/gtk-building.html)
|
||||||
|
|
||||||
How to report bugs
|
How to report bugs
|
||||||
------------------
|
------------------
|
||||||
@@ -153,9 +151,6 @@ 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
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
@@ -93,6 +93,77 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "boost",
|
||||||
|
"buildsystem": "simple",
|
||||||
|
"build-commands": [
|
||||||
|
"./bootstrap.sh --prefix=/app --with-libraries=date_time,filesystem,iostreams,locale,regex,system,thread,python,program_options,test,serialization",
|
||||||
|
"./b2 --build-type=minimal link=shared -j $FLATPAK_BUILDER_N_JOBS",
|
||||||
|
"./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": [
|
||||||
|
{
|
||||||
|
"type": "archive",
|
||||||
|
"url": "https://www.lua.org/ftp/lua-5.1.5.tar.gz",
|
||||||
|
"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",
|
"name" : "gtk",
|
||||||
"buildsystem" : "meson",
|
"buildsystem" : "meson",
|
||||||
|
289
config.h.meson
Normal file
@@ -0,0 +1,289 @@
|
|||||||
|
/* always defined to indicate that i18n is enabled */
|
||||||
|
#define ENABLE_NLS 1
|
||||||
|
|
||||||
|
/* Use structured logging */
|
||||||
|
#define G_LOG_STRUCTURED 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 the `mlock` function. */
|
||||||
|
#mesondefine HAVE_MLOCK
|
||||||
|
|
||||||
|
/* Define to 1 if you have a working `mmap' system call. */
|
||||||
|
#mesondefine HAVE_MMAP
|
||||||
|
|
||||||
|
/* Define to 1 if you have a working `madvise' system call. */
|
||||||
|
#mesondefine HAVE_MADVISE
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
#mesondefine HAVE_F16C
|
||||||
|
|
||||||
|
/* Does the OS support GDesktopAppInfo? */
|
||||||
|
#mesondefine HAVE_DESKTOPAPPINFO
|
@@ -321,7 +321,6 @@
|
|||||||
<file>paintable_emblem.c</file>
|
<file>paintable_emblem.c</file>
|
||||||
<file>paintable_mediastream.c</file>
|
<file>paintable_mediastream.c</file>
|
||||||
<file>paintable_svg.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>
|
||||||
|
@@ -100,11 +100,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 +129,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 +138,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
|
||||||
|
@@ -131,19 +131,6 @@ insert_tags_for_attributes (GtkTextBuffer *buffer,
|
|||||||
gtk_text_buffer_apply_tag (buffer, tag, start, end); \
|
gtk_text_buffer_apply_tag (buffer, tag, start, end); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define VOID_ATTR(attr_name) \
|
|
||||||
{ \
|
|
||||||
tag = gtk_text_tag_table_lookup (table, #attr_name); \
|
|
||||||
if (!tag) \
|
|
||||||
{ \
|
|
||||||
tag = gtk_text_tag_new (#attr_name); \
|
|
||||||
g_object_set (tag, #attr_name, TRUE, NULL); \
|
|
||||||
gtk_text_tag_table_add (table, tag); \
|
|
||||||
g_object_unref (tag); \
|
|
||||||
} \
|
|
||||||
gtk_text_buffer_apply_tag (buffer, tag, start, end); \
|
|
||||||
}
|
|
||||||
|
|
||||||
fg_alpha = bg_alpha = 1.;
|
fg_alpha = bg_alpha = 1.;
|
||||||
|
|
||||||
attrs = pango_attr_iterator_get_attrs (iter);
|
attrs = pango_attr_iterator_get_attrs (iter);
|
||||||
@@ -268,29 +255,6 @@ insert_tags_for_attributes (GtkTextBuffer *buffer,
|
|||||||
INT_ATTR (insert_hyphens);
|
INT_ATTR (insert_hyphens);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANGO_ATTR_LINE_HEIGHT:
|
|
||||||
FLOAT_ATTR (line_height);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_ABSOLUTE_LINE_HEIGHT:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_WORD:
|
|
||||||
VOID_ATTR (word);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_SENTENCE:
|
|
||||||
VOID_ATTR (sentence);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_BASELINE_SHIFT:
|
|
||||||
INT_ATTR (baseline_shift);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_FONT_SCALE:
|
|
||||||
INT_ATTR (font_scale);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_SHAPE:
|
case PANGO_ATTR_SHAPE:
|
||||||
case PANGO_ATTR_ABSOLUTE_SIZE:
|
case PANGO_ATTR_ABSOLUTE_SIZE:
|
||||||
case PANGO_ATTR_GRAVITY:
|
case PANGO_ATTR_GRAVITY:
|
||||||
@@ -299,10 +263,6 @@ insert_tags_for_attributes (GtkTextBuffer *buffer,
|
|||||||
case PANGO_ATTR_BACKGROUND_ALPHA:
|
case PANGO_ATTR_BACKGROUND_ALPHA:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANGO_ATTR_TEXT_TRANSFORM:
|
|
||||||
INT_ATTR (text_transform);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PANGO_ATTR_INVALID:
|
case PANGO_ATTR_INVALID:
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
@@ -1,11 +1,6 @@
|
|||||||
/* Pango/Font Rendering
|
/* Pango/Font Rendering
|
||||||
*
|
*
|
||||||
* Demonstrates various aspects of font rendering,
|
* Demonstrates various aspects of font rendering.
|
||||||
* such as hinting, antialiasing and grid alignment.
|
|
||||||
*
|
|
||||||
* The demo lets you explore font rendering options
|
|
||||||
* interactively to get a feeling for they affect the
|
|
||||||
* shape and positioning of the glyphs.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -15,21 +10,16 @@ static GtkWidget *font_button = NULL;
|
|||||||
static GtkWidget *entry = NULL;
|
static GtkWidget *entry = NULL;
|
||||||
static GtkWidget *image = NULL;
|
static GtkWidget *image = NULL;
|
||||||
static GtkWidget *hinting = NULL;
|
static GtkWidget *hinting = NULL;
|
||||||
static GtkWidget *anti_alias = NULL;
|
|
||||||
static GtkWidget *hint_metrics = NULL;
|
static GtkWidget *hint_metrics = NULL;
|
||||||
static GtkWidget *up_button = NULL;
|
static GtkWidget *up_button = NULL;
|
||||||
static GtkWidget *down_button = NULL;
|
static GtkWidget *down_button = NULL;
|
||||||
static GtkWidget *text_radio = NULL;
|
static GtkWidget *text_radio = NULL;
|
||||||
static GtkWidget *show_grid = NULL;
|
static GtkWidget *show_grid = NULL;
|
||||||
static GtkWidget *show_extents = NULL;
|
static GtkWidget *show_extents = NULL;
|
||||||
static GtkWidget *show_pixels = NULL;
|
|
||||||
static GtkWidget *show_outlines = NULL;
|
|
||||||
|
|
||||||
static PangoContext *context;
|
static PangoContext *context;
|
||||||
|
|
||||||
static int scale = 7;
|
static int scale = 9;
|
||||||
static double pixel_alpha = 1.0;
|
|
||||||
static double outline_alpha = 0.0;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_image (void)
|
update_image (void)
|
||||||
@@ -37,7 +27,7 @@ update_image (void)
|
|||||||
const char *text;
|
const char *text;
|
||||||
PangoFontDescription *desc;
|
PangoFontDescription *desc;
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
PangoRectangle ink, logical;
|
PangoRectangle ink, pink, logical;
|
||||||
int baseline;
|
int baseline;
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
@@ -47,8 +37,6 @@ update_image (void)
|
|||||||
cairo_font_options_t *fopt;
|
cairo_font_options_t *fopt;
|
||||||
cairo_hint_style_t hintstyle;
|
cairo_hint_style_t hintstyle;
|
||||||
cairo_hint_metrics_t hintmetrics;
|
cairo_hint_metrics_t hintmetrics;
|
||||||
cairo_antialias_t antialias;
|
|
||||||
cairo_path_t *path;
|
|
||||||
|
|
||||||
if (!context)
|
if (!context)
|
||||||
context = gtk_widget_create_pango_context (image);
|
context = gtk_widget_create_pango_context (image);
|
||||||
@@ -59,18 +47,16 @@ update_image (void)
|
|||||||
fopt = cairo_font_options_copy (pango_cairo_context_get_font_options (context));
|
fopt = cairo_font_options_copy (pango_cairo_context_get_font_options (context));
|
||||||
|
|
||||||
hint = gtk_combo_box_get_active_id (GTK_COMBO_BOX (hinting));
|
hint = gtk_combo_box_get_active_id (GTK_COMBO_BOX (hinting));
|
||||||
hintstyle = CAIRO_HINT_STYLE_DEFAULT;
|
if (strcmp (hint, "none") == 0)
|
||||||
if (hint)
|
hintstyle = CAIRO_HINT_STYLE_NONE;
|
||||||
{
|
else if (strcmp (hint, "slight") == 0)
|
||||||
if (strcmp (hint, "none") == 0)
|
hintstyle = CAIRO_HINT_STYLE_SLIGHT;
|
||||||
hintstyle = CAIRO_HINT_STYLE_NONE;
|
else if (strcmp (hint, "medium") == 0)
|
||||||
else if (strcmp (hint, "slight") == 0)
|
hintstyle = CAIRO_HINT_STYLE_MEDIUM;
|
||||||
hintstyle = CAIRO_HINT_STYLE_SLIGHT;
|
else if (strcmp (hint, "full") == 0)
|
||||||
else if (strcmp (hint, "medium") == 0)
|
hintstyle = CAIRO_HINT_STYLE_FULL;
|
||||||
hintstyle = CAIRO_HINT_STYLE_MEDIUM;
|
else
|
||||||
else if (strcmp (hint, "full") == 0)
|
hintstyle = CAIRO_HINT_STYLE_DEFAULT;
|
||||||
hintstyle = CAIRO_HINT_STYLE_FULL;
|
|
||||||
}
|
|
||||||
cairo_font_options_set_hint_style (fopt, hintstyle);
|
cairo_font_options_set_hint_style (fopt, hintstyle);
|
||||||
|
|
||||||
if (gtk_check_button_get_active (GTK_CHECK_BUTTON (hint_metrics)))
|
if (gtk_check_button_get_active (GTK_CHECK_BUTTON (hint_metrics)))
|
||||||
@@ -79,13 +65,6 @@ update_image (void)
|
|||||||
hintmetrics = CAIRO_HINT_METRICS_OFF;
|
hintmetrics = CAIRO_HINT_METRICS_OFF;
|
||||||
cairo_font_options_set_hint_metrics (fopt, hintmetrics);
|
cairo_font_options_set_hint_metrics (fopt, hintmetrics);
|
||||||
|
|
||||||
if (gtk_check_button_get_active (GTK_CHECK_BUTTON (anti_alias)))
|
|
||||||
antialias = CAIRO_ANTIALIAS_GRAY;
|
|
||||||
else
|
|
||||||
antialias = CAIRO_ANTIALIAS_NONE;
|
|
||||||
cairo_font_options_set_antialias (fopt, antialias);
|
|
||||||
|
|
||||||
pango_context_set_round_glyph_positions (context, hintmetrics == CAIRO_HINT_METRICS_ON);
|
|
||||||
pango_cairo_context_set_font_options (context, fopt);
|
pango_cairo_context_set_font_options (context, fopt);
|
||||||
cairo_font_options_destroy (fopt);
|
cairo_font_options_destroy (fopt);
|
||||||
pango_context_changed (context);
|
pango_context_changed (context);
|
||||||
@@ -96,6 +75,7 @@ update_image (void)
|
|||||||
pango_layout_set_font_description (layout, desc);
|
pango_layout_set_font_description (layout, desc);
|
||||||
pango_layout_set_text (layout, text, -1);
|
pango_layout_set_text (layout, text, -1);
|
||||||
pango_layout_get_extents (layout, &ink, &logical);
|
pango_layout_get_extents (layout, &ink, &logical);
|
||||||
|
pink = ink;
|
||||||
baseline = pango_layout_get_baseline (layout);
|
baseline = pango_layout_get_baseline (layout);
|
||||||
|
|
||||||
pango_extents_to_pixels (&ink, NULL);
|
pango_extents_to_pixels (&ink, NULL);
|
||||||
@@ -105,14 +85,10 @@ update_image (void)
|
|||||||
cairo_set_source_rgb (cr, 1, 1, 1);
|
cairo_set_source_rgb (cr, 1, 1, 1);
|
||||||
cairo_paint (cr);
|
cairo_paint (cr);
|
||||||
|
|
||||||
cairo_set_source_rgba (cr, 0, 0, 0, pixel_alpha);
|
cairo_set_source_rgb (cr, 0, 0, 0);
|
||||||
|
|
||||||
cairo_move_to (cr, 10, 10);
|
cairo_move_to (cr, 10, 10);
|
||||||
pango_cairo_show_layout (cr, layout);
|
pango_cairo_show_layout (cr, layout);
|
||||||
|
|
||||||
pango_cairo_layout_path (cr, layout);
|
|
||||||
path = cairo_copy_path (cr);
|
|
||||||
|
|
||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
g_object_unref (layout);
|
g_object_unref (layout);
|
||||||
|
|
||||||
@@ -151,7 +127,7 @@ update_image (void)
|
|||||||
|
|
||||||
if (gtk_check_button_get_active (GTK_CHECK_BUTTON (show_extents)))
|
if (gtk_check_button_get_active (GTK_CHECK_BUTTON (show_extents)))
|
||||||
{
|
{
|
||||||
cairo_set_source_rgb (cr, 0, 0, 1);
|
cairo_set_source_rgba (cr, 0, 0, 1, 1);
|
||||||
|
|
||||||
cairo_rectangle (cr,
|
cairo_rectangle (cr,
|
||||||
scale * (10 + pango_units_to_double (logical.x)) - 0.5,
|
scale * (10 + pango_units_to_double (logical.x)) - 0.5,
|
||||||
@@ -164,45 +140,17 @@ update_image (void)
|
|||||||
cairo_line_to (cr, scale * (10 + pango_units_to_double (logical.x + logical.width)) + 1,
|
cairo_line_to (cr, scale * (10 + pango_units_to_double (logical.x + logical.width)) + 1,
|
||||||
scale * (10 + pango_units_to_double (baseline)) - 0.5);
|
scale * (10 + pango_units_to_double (baseline)) - 0.5);
|
||||||
cairo_stroke (cr);
|
cairo_stroke (cr);
|
||||||
cairo_set_source_rgb (cr, 1, 0, 0);
|
cairo_set_source_rgba (cr, 1, 0, 0, 1);
|
||||||
cairo_rectangle (cr,
|
cairo_rectangle (cr,
|
||||||
scale * (10 + ink.x) - 0.5,
|
scale * (10 + pango_units_to_double (pink.x)) + 0.5,
|
||||||
scale * (10 + ink.y) - 0.5,
|
scale * (10 + pango_units_to_double (pink.y)) + 0.5,
|
||||||
scale * ink.width + 1,
|
scale * pango_units_to_double (pink.width) - 1,
|
||||||
scale * ink.height + 1);
|
scale * pango_units_to_double (pink.height) - 1);
|
||||||
cairo_stroke (cr);
|
cairo_stroke (cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < path->num_data; i += path->data[i].header.length)
|
|
||||||
{
|
|
||||||
cairo_path_data_t *data = &path->data[i];
|
|
||||||
switch (data->header.type)
|
|
||||||
{
|
|
||||||
case CAIRO_PATH_CURVE_TO:
|
|
||||||
data[3].point.x *= scale; data[3].point.y *= scale;
|
|
||||||
data[2].point.x *= scale; data[2].point.y *= scale;
|
|
||||||
data[1].point.x *= scale; data[1].point.y *= scale;
|
|
||||||
break;
|
|
||||||
case CAIRO_PATH_LINE_TO:
|
|
||||||
case CAIRO_PATH_MOVE_TO:
|
|
||||||
data[1].point.x *= scale; data[1].point.y *= scale;
|
|
||||||
break;
|
|
||||||
case CAIRO_PATH_CLOSE_PATH:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cairo_set_source_rgba (cr, 0, 0, 0, outline_alpha);
|
|
||||||
cairo_move_to (cr, scale * 20 - 0.5, scale * 20 - 0.5);
|
|
||||||
cairo_append_path (cr, path);
|
|
||||||
cairo_stroke (cr);
|
|
||||||
|
|
||||||
cairo_surface_destroy (surface);
|
cairo_surface_destroy (surface);
|
||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
|
|
||||||
cairo_path_destroy (path);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -210,26 +158,10 @@ update_image (void)
|
|||||||
PangoLayoutRun *run;
|
PangoLayoutRun *run;
|
||||||
PangoGlyphInfo *g;
|
PangoGlyphInfo *g;
|
||||||
int i, j;
|
int i, j;
|
||||||
GString *str;
|
|
||||||
gunichar ch;
|
|
||||||
|
|
||||||
if (*text == '\0')
|
|
||||||
text = " ";
|
|
||||||
|
|
||||||
ch = g_utf8_get_char (text);
|
|
||||||
|
|
||||||
str = g_string_new ("");
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
g_string_append_unichar (str, ch);
|
|
||||||
g_string_append_unichar (str, 0x200c);
|
|
||||||
}
|
|
||||||
|
|
||||||
layout = pango_layout_new (context);
|
layout = pango_layout_new (context);
|
||||||
pango_layout_set_font_description (layout, desc);
|
pango_layout_set_font_description (layout, desc);
|
||||||
pango_layout_set_text (layout, str->str, -1);
|
pango_layout_set_text (layout, "aaaa", -1);
|
||||||
g_string_free (str, TRUE);
|
|
||||||
pango_layout_get_extents (layout, &ink, &logical);
|
pango_layout_get_extents (layout, &ink, &logical);
|
||||||
pango_extents_to_pixels (&logical, NULL);
|
pango_extents_to_pixels (&logical, NULL);
|
||||||
|
|
||||||
@@ -244,7 +176,7 @@ update_image (void)
|
|||||||
cairo_set_source_rgb (cr, 0, 0, 0);
|
cairo_set_source_rgb (cr, 0, 0, 0);
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
g = &(run->glyphs->glyphs[2*i]);
|
g = &(run->glyphs->glyphs[i]);
|
||||||
g->geometry.width = PANGO_UNITS_ROUND (g->geometry.width * 3 / 2);
|
g->geometry.width = PANGO_UNITS_ROUND (g->geometry.width * 3 / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,7 +184,7 @@ update_image (void)
|
|||||||
{
|
{
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
g = &(run->glyphs->glyphs[2*i]);
|
g = &(run->glyphs->glyphs[i]);
|
||||||
g->geometry.x_offset = i * (PANGO_SCALE / 4);
|
g->geometry.x_offset = i * (PANGO_SCALE / 4);
|
||||||
g->geometry.y_offset = j * (PANGO_SCALE / 4);
|
g->geometry.y_offset = j * (PANGO_SCALE / 4);
|
||||||
}
|
}
|
||||||
@@ -271,6 +203,7 @@ update_image (void)
|
|||||||
cairo_surface_destroy (surface);
|
cairo_surface_destroy (surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gtk_picture_set_pixbuf (GTK_PICTURE (image), pixbuf2);
|
gtk_picture_set_pixbuf (GTK_PICTURE (image), pixbuf2);
|
||||||
|
|
||||||
g_object_unref (pixbuf2);
|
g_object_unref (pixbuf2);
|
||||||
@@ -278,78 +211,6 @@ update_image (void)
|
|||||||
pango_font_description_free (desc);
|
pango_font_description_free (desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean fading = FALSE;
|
|
||||||
static double start_pixel_alpha;
|
|
||||||
static double end_pixel_alpha;
|
|
||||||
static double start_outline_alpha;
|
|
||||||
static double end_outline_alpha;
|
|
||||||
static gint64 start_time;
|
|
||||||
static gint64 end_time;
|
|
||||||
|
|
||||||
static double
|
|
||||||
ease_out_cubic (double t)
|
|
||||||
{
|
|
||||||
double p = t - 1;
|
|
||||||
return p * p * p + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
change_alpha (GtkWidget *widget,
|
|
||||||
GdkFrameClock *clock,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
gint64 now = g_get_monotonic_time ();
|
|
||||||
double t;
|
|
||||||
|
|
||||||
t = ease_out_cubic ((now - start_time) / (double) (end_time - start_time));
|
|
||||||
|
|
||||||
pixel_alpha = start_pixel_alpha + (end_pixel_alpha - start_pixel_alpha) * t;
|
|
||||||
outline_alpha = start_outline_alpha + (end_outline_alpha - start_outline_alpha) * t;
|
|
||||||
|
|
||||||
update_image ();
|
|
||||||
|
|
||||||
if (now >= end_time)
|
|
||||||
{
|
|
||||||
fading = FALSE;
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
start_alpha_fade (void)
|
|
||||||
{
|
|
||||||
gboolean pixels;
|
|
||||||
gboolean outlines;
|
|
||||||
|
|
||||||
if (fading)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pixels = gtk_check_button_get_active (GTK_CHECK_BUTTON (show_pixels));
|
|
||||||
outlines = gtk_check_button_get_active (GTK_CHECK_BUTTON (show_outlines));
|
|
||||||
|
|
||||||
start_pixel_alpha = pixel_alpha;
|
|
||||||
if (pixels && outlines)
|
|
||||||
end_pixel_alpha = 0.5;
|
|
||||||
else if (pixels)
|
|
||||||
end_pixel_alpha = 1;
|
|
||||||
else
|
|
||||||
end_pixel_alpha = 0;
|
|
||||||
|
|
||||||
start_outline_alpha = outline_alpha;
|
|
||||||
if (outlines)
|
|
||||||
end_outline_alpha = 1.0;
|
|
||||||
else
|
|
||||||
end_outline_alpha = 0.0;
|
|
||||||
|
|
||||||
start_time = g_get_monotonic_time ();
|
|
||||||
end_time = start_time + G_TIME_SPAN_SECOND / 2;
|
|
||||||
|
|
||||||
fading = TRUE;
|
|
||||||
gtk_widget_add_tick_callback (window, change_alpha, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_buttons (void)
|
update_buttons (void)
|
||||||
{
|
{
|
||||||
@@ -357,26 +218,20 @@ update_buttons (void)
|
|||||||
gtk_widget_set_sensitive (down_button, scale > 1);
|
gtk_widget_set_sensitive (down_button, scale > 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
scale_up (GtkWidget *widget,
|
scale_up (void)
|
||||||
GVariant *args,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
{
|
||||||
scale += 1;
|
scale += 1;
|
||||||
update_buttons ();
|
update_buttons ();
|
||||||
update_image ();
|
update_image ();
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
scale_down (GtkWidget *widget,
|
scale_down (void)
|
||||||
GVariant *args,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
{
|
||||||
scale -= 1;
|
scale -= 1;
|
||||||
update_buttons ();
|
update_buttons ();
|
||||||
update_image ();
|
update_image ();
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@@ -397,26 +252,20 @@ do_fontrendering (GtkWidget *do_widget)
|
|||||||
entry = GTK_WIDGET (gtk_builder_get_object (builder, "entry"));
|
entry = GTK_WIDGET (gtk_builder_get_object (builder, "entry"));
|
||||||
image = GTK_WIDGET (gtk_builder_get_object (builder, "image"));
|
image = GTK_WIDGET (gtk_builder_get_object (builder, "image"));
|
||||||
hinting = GTK_WIDGET (gtk_builder_get_object (builder, "hinting"));
|
hinting = GTK_WIDGET (gtk_builder_get_object (builder, "hinting"));
|
||||||
anti_alias = GTK_WIDGET (gtk_builder_get_object (builder, "antialias"));
|
|
||||||
hint_metrics = GTK_WIDGET (gtk_builder_get_object (builder, "hint_metrics"));
|
hint_metrics = GTK_WIDGET (gtk_builder_get_object (builder, "hint_metrics"));
|
||||||
text_radio = GTK_WIDGET (gtk_builder_get_object (builder, "text_radio"));
|
text_radio = GTK_WIDGET (gtk_builder_get_object (builder, "text_radio"));
|
||||||
show_grid = GTK_WIDGET (gtk_builder_get_object (builder, "show_grid"));
|
show_grid = GTK_WIDGET (gtk_builder_get_object (builder, "show_grid"));
|
||||||
show_extents = GTK_WIDGET (gtk_builder_get_object (builder, "show_extents"));
|
show_extents = GTK_WIDGET (gtk_builder_get_object (builder, "show_extents"));
|
||||||
show_pixels = GTK_WIDGET (gtk_builder_get_object (builder, "show_pixels"));
|
|
||||||
show_outlines = GTK_WIDGET (gtk_builder_get_object (builder, "show_outlines"));
|
|
||||||
|
|
||||||
g_signal_connect (up_button, "clicked", G_CALLBACK (scale_up), NULL);
|
g_signal_connect (up_button, "clicked", G_CALLBACK (scale_up), NULL);
|
||||||
g_signal_connect (down_button, "clicked", G_CALLBACK (scale_down), NULL);
|
g_signal_connect (down_button, "clicked", G_CALLBACK (scale_down), NULL);
|
||||||
g_signal_connect (entry, "notify::text", G_CALLBACK (update_image), NULL);
|
g_signal_connect (entry, "notify::text", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (font_button, "notify::font-desc", G_CALLBACK (update_image), NULL);
|
g_signal_connect (font_button, "notify::font-desc", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (hinting, "notify::active", G_CALLBACK (update_image), NULL);
|
g_signal_connect (hinting, "notify::active", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (anti_alias, "notify::active", G_CALLBACK (update_image), NULL);
|
|
||||||
g_signal_connect (hint_metrics, "notify::active", G_CALLBACK (update_image), NULL);
|
g_signal_connect (hint_metrics, "notify::active", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (text_radio, "notify::active", G_CALLBACK (update_image), NULL);
|
g_signal_connect (text_radio, "notify::active", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (show_grid, "notify::active", G_CALLBACK (update_image), NULL);
|
g_signal_connect (show_grid, "notify::active", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (show_extents, "notify::active", G_CALLBACK (update_image), NULL);
|
g_signal_connect (show_extents, "notify::active", G_CALLBACK (update_image), NULL);
|
||||||
g_signal_connect (show_pixels, "notify::active", G_CALLBACK (start_alpha_fade), NULL);
|
|
||||||
g_signal_connect (show_outlines, "notify::active", G_CALLBACK (start_alpha_fade), NULL);
|
|
||||||
|
|
||||||
update_image ();
|
update_image ();
|
||||||
|
|
||||||
|
@@ -1,8 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
|
<object class="GtkAdjustment" id="scale_adj">
|
||||||
|
<property name="upper">24</property>
|
||||||
|
<property name="step-increment">1</property>
|
||||||
|
<property name="page-increment">4</property>
|
||||||
|
</object>
|
||||||
<object class="GtkWindow" id="window">
|
<object class="GtkWindow" id="window">
|
||||||
<property name="default-width">1024</property>
|
<property name="default-width">1080</property>
|
||||||
<property name="default-height">768</property>
|
<property name="default-height">430</property>
|
||||||
<child type="titlebar">
|
<child type="titlebar">
|
||||||
<object class="GtkHeaderBar">
|
<object class="GtkHeaderBar">
|
||||||
<child type="title">
|
<child type="title">
|
||||||
@@ -82,119 +87,69 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="show_pixels">
|
<object class="GtkLabel">
|
||||||
<property name="label">Show _Pixels</property>
|
<property name="label">Hinting</property>
|
||||||
<property name="use-underline">1</property>
|
<property name="xalign">1</property>
|
||||||
<property name="active">1</property>
|
<style>
|
||||||
|
<class name="dim-label"/>
|
||||||
|
</style>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">3</property>
|
<property name="column">3</property>
|
||||||
<property name="row">0</property>
|
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="show_outlines">
|
<object class="GtkComboBoxText" id="hinting">
|
||||||
<property name="label">Show _Outline</property>
|
<property name="active">0</property>
|
||||||
<property name="use-underline">1</property>
|
<property name="valign">center</property>
|
||||||
<layout>
|
<items>
|
||||||
<property name="column">3</property>
|
<item translatable="yes" id="none">None</item>
|
||||||
<property name="row">1</property>
|
<item translatable="yes" id="slight">Slight</item>
|
||||||
</layout>
|
<item translatable="yes" id="medium">Medium</item>
|
||||||
</object>
|
<item translatable="yes" id="full">Full</item>
|
||||||
</child>
|
</items>
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="label">_Hinting</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="mnemonic-widget">hinting</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkComboBoxText" id="hinting">
|
|
||||||
<property name="active">0</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<items>
|
|
||||||
<item translatable="yes" id="none">None</item>
|
|
||||||
<item translatable="yes" id="slight">Slight</item>
|
|
||||||
<item translatable="yes" id="medium">Medium</item>
|
|
||||||
<item translatable="yes" id="full">Full</item>
|
|
||||||
</items>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">4</property>
|
<property name="column">4</property>
|
||||||
<property name="column-span">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkCheckButton" id="antialias">
|
|
||||||
<property name="label">_Antialias</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<property name="active">1</property>
|
|
||||||
<layout>
|
|
||||||
<property name="column">4</property>
|
|
||||||
<property name="row">1</property>
|
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="hint_metrics">
|
<object class="GtkCheckButton" id="hint_metrics">
|
||||||
<property name="label">Hint _Metrics</property>
|
<property name="label">Hint Metrics</property>
|
||||||
<property name="use-underline">1</property>
|
<layout>
|
||||||
|
<property name="column">4</property>
|
||||||
|
<property name="row">1</property>
|
||||||
|
</layout>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="show_extents">
|
||||||
|
<property name="label">Show Extents</property>
|
||||||
|
<property name="active">1</property>
|
||||||
|
<layout>
|
||||||
|
<property name="column">5</property>
|
||||||
|
<property name="row">0</property>
|
||||||
|
</layout>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="show_grid">
|
||||||
|
<property name="active">1</property>
|
||||||
|
<property name="label">Show Grid</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">5</property>
|
<property name="column">5</property>
|
||||||
<property name="row">1</property>
|
<property name="row">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkCheckButton" id="show_extents">
|
|
||||||
<property name="label">Show _Extents</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<layout>
|
|
||||||
<property name="column">6</property>
|
|
||||||
<property name="row">0</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkCheckButton" id="show_grid">
|
|
||||||
<property name="label">Show _Grid</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<layout>
|
|
||||||
<property name="column">6</property>
|
|
||||||
<property name="row">1</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="up_button">
|
<object class="GtkButton" id="up_button">
|
||||||
<property name="icon-name">list-add-symbolic</property>
|
<property name="icon-name">list-add-symbolic</property>
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="circular"/>
|
<class name="circular"/>
|
||||||
</style>
|
</style>
|
||||||
<child>
|
|
||||||
<object class="GtkShortcutController">
|
|
||||||
<property name="scope">managed</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkShortcut">
|
|
||||||
<property name="trigger"><Control>plus</property>
|
|
||||||
<property name="action">activate</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">7</property>
|
<property name="column">6</property>
|
||||||
<property name="row">0</property>
|
<property name="row">0</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -202,24 +157,11 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="down_button">
|
<object class="GtkButton" id="down_button">
|
||||||
<property name="icon-name">list-remove-symbolic</property>
|
<property name="icon-name">list-remove-symbolic</property>
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="circular"/>
|
<class name="circular"/>
|
||||||
</style>
|
</style>
|
||||||
<child>
|
|
||||||
<object class="GtkShortcutController">
|
|
||||||
<property name="scope">managed</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkShortcut">
|
|
||||||
<property name="trigger"><Control>minus</property>
|
|
||||||
<property name="action">activate</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">7</property>
|
<property name="column">6</property>
|
||||||
<property name="row">1</property>
|
<property name="row">1</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
@@ -228,7 +170,7 @@
|
|||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">8</property>
|
<property name="column">7</property>
|
||||||
</layout>
|
</layout>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
@@ -874,8 +874,8 @@ gtk_gears_tick (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
GtkGears *gears = GTK_GEARS (widget);
|
GtkGears *gears = GTK_GEARS (widget);
|
||||||
GtkGearsPrivate *priv = gtk_gears_get_instance_private (gears);
|
GtkGearsPrivate *priv = gtk_gears_get_instance_private (gears);
|
||||||
GdkFrameTimings *previous_timings;
|
GdkFrameTimings *timings, *previous_timings;
|
||||||
gint64 previous_frame_time;
|
gint64 previous_frame_time = 0;
|
||||||
gint64 frame_time;
|
gint64 frame_time;
|
||||||
gint64 history_start, history_len;
|
gint64 history_start, history_len;
|
||||||
gint64 frame;
|
gint64 frame;
|
||||||
@@ -915,6 +915,12 @@ gtk_gears_tick (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timings = gdk_frame_clock_get_current_timings (frame_clock);
|
||||||
|
previous_timings = gdk_frame_clock_get_timings (frame_clock,
|
||||||
|
gdk_frame_timings_get_frame_counter (timings) - 1);
|
||||||
|
if (previous_timings != NULL)
|
||||||
|
previous_frame_time = gdk_frame_timings_get_frame_time (previous_timings);
|
||||||
|
|
||||||
return G_SOURCE_CONTINUE;
|
return G_SOURCE_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -61,26 +61,12 @@ show_page (GtkTextView *text_view,
|
|||||||
int page)
|
int page)
|
||||||
{
|
{
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
GtkTextIter iter, start;
|
GtkTextIter iter;
|
||||||
GtkTextMark *mark;
|
|
||||||
GtkWidget *child;
|
GtkWidget *child;
|
||||||
GtkTextChildAnchor *anchor;
|
GtkTextChildAnchor *anchor;
|
||||||
GtkEventController *controller;
|
GtkEventController *controller;
|
||||||
GtkTextTag *bold, *mono, *nobreaks;
|
|
||||||
|
|
||||||
buffer = gtk_text_view_get_buffer (text_view);
|
buffer = gtk_text_view_get_buffer (text_view);
|
||||||
|
|
||||||
bold = gtk_text_buffer_create_tag (buffer, NULL,
|
|
||||||
"weight", PANGO_WEIGHT_BOLD,
|
|
||||||
"scale", PANGO_SCALE_X_LARGE,
|
|
||||||
NULL);
|
|
||||||
mono = gtk_text_buffer_create_tag (buffer, NULL,
|
|
||||||
"family", "monospace",
|
|
||||||
NULL);
|
|
||||||
nobreaks = gtk_text_buffer_create_tag (buffer, NULL,
|
|
||||||
"allow-breaks", FALSE,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gtk_text_buffer_set_text (buffer, "", 0);
|
gtk_text_buffer_set_text (buffer, "", 0);
|
||||||
gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
|
gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
|
||||||
gtk_text_buffer_begin_irreversible_action (buffer);
|
gtk_text_buffer_begin_irreversible_action (buffer);
|
||||||
@@ -118,22 +104,17 @@ show_page (GtkTextView *text_view,
|
|||||||
}
|
}
|
||||||
else if (page == 2)
|
else if (page == 2)
|
||||||
{
|
{
|
||||||
mark = gtk_text_buffer_create_mark (buffer, "mark", &iter, TRUE);
|
GtkTextTag *tag;
|
||||||
|
|
||||||
gtk_text_buffer_insert_with_tags (buffer, &iter, "tag", -1, bold, NULL);
|
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||||
gtk_text_buffer_insert (buffer, &iter, " /", -1);
|
"weight", PANGO_WEIGHT_BOLD,
|
||||||
|
"scale", PANGO_SCALE_X_LARGE,
|
||||||
gtk_text_buffer_get_iter_at_mark (buffer, &start, mark);
|
NULL);
|
||||||
gtk_text_buffer_apply_tag (buffer, nobreaks, &start, &iter);
|
gtk_text_buffer_insert_with_tags (buffer, &iter, "tag", -1, tag, NULL);
|
||||||
gtk_text_buffer_insert (buffer, &iter, " ", -1);
|
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||||
|
"family", "monospace",
|
||||||
gtk_text_buffer_move_mark (buffer, mark, &iter);
|
NULL);
|
||||||
gtk_text_buffer_insert_with_tags (buffer, &iter, "tag", -1, mono, NULL);
|
gtk_text_buffer_insert_with_tags (buffer, &iter, " / tag / ", -1, tag, NULL);
|
||||||
gtk_text_buffer_insert (buffer, &iter, " /", -1);
|
|
||||||
|
|
||||||
gtk_text_buffer_get_iter_at_mark (buffer, &start, mark);
|
|
||||||
gtk_text_buffer_apply_tag (buffer, nobreaks, &start, &iter);
|
|
||||||
gtk_text_buffer_insert (buffer, &iter, " ", -1);
|
|
||||||
|
|
||||||
anchor = gtk_text_buffer_create_child_anchor (buffer, &iter);
|
anchor = gtk_text_buffer_create_child_anchor (buffer, &iter);
|
||||||
child = gtk_image_new_from_icon_name ("audio-volume-high-symbolic");
|
child = gtk_image_new_from_icon_name ("audio-volume-high-symbolic");
|
||||||
@@ -151,26 +132,20 @@ show_page (GtkTextView *text_view,
|
|||||||
"behavior of mouse and key presses, “lock” a range of text so the "
|
"behavior of mouse and key presses, “lock” a range of text so the "
|
||||||
"user can't edit it, or countless other things.\n", -1);
|
"user can't edit it, or countless other things.\n", -1);
|
||||||
insert_link (buffer, &iter, "Go back", 1);
|
insert_link (buffer, &iter, "Go back", 1);
|
||||||
|
|
||||||
gtk_text_buffer_delete_mark (buffer, mark);
|
|
||||||
}
|
}
|
||||||
else if (page == 3)
|
else if (page == 3)
|
||||||
{
|
{
|
||||||
mark = gtk_text_buffer_create_mark (buffer, "mark", &iter, TRUE);
|
GtkTextTag *tag;
|
||||||
|
|
||||||
gtk_text_buffer_insert_with_tags (buffer, &iter, "hypertext", -1, bold, NULL);
|
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||||
gtk_text_buffer_insert (buffer, &iter, " /", -1);
|
"weight", PANGO_WEIGHT_BOLD,
|
||||||
|
"scale", PANGO_SCALE_X_LARGE,
|
||||||
gtk_text_buffer_get_iter_at_mark (buffer, &start, mark);
|
NULL);
|
||||||
gtk_text_buffer_apply_tag (buffer, nobreaks, &start, &iter);
|
gtk_text_buffer_insert_with_tags (buffer, &iter, "hypertext", -1, tag, NULL);
|
||||||
gtk_text_buffer_insert (buffer, &iter, " ", -1);
|
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||||
|
"family", "monospace",
|
||||||
gtk_text_buffer_move_mark (buffer, mark, &iter);
|
NULL);
|
||||||
gtk_text_buffer_insert_with_tags (buffer, &iter, "ˈhaɪ pərˌtɛkst", -1, mono, NULL);
|
gtk_text_buffer_insert_with_tags (buffer, &iter, " / ˈhaɪ pərˌtɛkst / ", -1, tag, NULL);
|
||||||
gtk_text_buffer_insert (buffer, &iter, " /", -1);
|
|
||||||
gtk_text_buffer_get_iter_at_mark (buffer, &start, mark);
|
|
||||||
gtk_text_buffer_apply_tag (buffer, nobreaks, &start, &iter);
|
|
||||||
gtk_text_buffer_insert (buffer, &iter, " ", -1);
|
|
||||||
|
|
||||||
anchor = gtk_text_buffer_create_child_anchor (buffer, &iter);
|
anchor = gtk_text_buffer_create_child_anchor (buffer, &iter);
|
||||||
child = gtk_image_new_from_icon_name ("audio-volume-high-symbolic");
|
child = gtk_image_new_from_icon_name ("audio-volume-high-symbolic");
|
||||||
@@ -184,8 +159,6 @@ show_page (GtkTextView *text_view,
|
|||||||
"Machine-readable text that is not sequential but is organized "
|
"Machine-readable text that is not sequential but is organized "
|
||||||
"so that related items of information are connected.\n", -1);
|
"so that related items of information are connected.\n", -1);
|
||||||
insert_link (buffer, &iter, "Go back", 1);
|
insert_link (buffer, &iter, "Go back", 1);
|
||||||
|
|
||||||
gtk_text_buffer_delete_mark (buffer, mark);
|
|
||||||
}
|
}
|
||||||
gtk_text_buffer_end_irreversible_action (buffer);
|
gtk_text_buffer_end_irreversible_action (buffer);
|
||||||
}
|
}
|
||||||
@@ -385,7 +358,7 @@ do_hypertext (GtkWidget *do_widget)
|
|||||||
|
|
||||||
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_NEVER,
|
GTK_POLICY_AUTOMATIC,
|
||||||
GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), sw);
|
gtk_window_set_child (GTK_WINDOW (window), sw);
|
||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), view);
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), view);
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
static GdkTexture *avatar_texture_other;
|
static GdkPixbuf *avatar_pixbuf_other;
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
#define GTK_TYPE_MESSAGE (gtk_message_get_type ())
|
#define GTK_TYPE_MESSAGE (gtk_message_get_type ())
|
||||||
@@ -196,9 +196,12 @@ gtk_message_row_update (GtkMessageRow *row)
|
|||||||
gtk_button_set_label (GTK_BUTTON (priv->resent_by_button), priv->message->resent_by);
|
gtk_button_set_label (GTK_BUTTON (priv->resent_by_button), priv->message->resent_by);
|
||||||
|
|
||||||
if (strcmp (priv->message->sender_nick, "@GTKtoolkit") == 0)
|
if (strcmp (priv->message->sender_nick, "@GTKtoolkit") == 0)
|
||||||
gtk_image_set_from_icon_name (priv->avatar_image, "org.gtk.Demo4");
|
{
|
||||||
|
gtk_image_set_from_icon_name (priv->avatar_image, "org.gtk.Demo4");
|
||||||
|
gtk_image_set_icon_size (priv->avatar_image, GTK_ICON_SIZE_LARGE);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
gtk_image_set_from_paintable (priv->avatar_image, GDK_PAINTABLE (avatar_texture_other));
|
gtk_image_set_from_pixbuf (priv->avatar_image, avatar_pixbuf_other);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,7 +344,7 @@ do_listbox (GtkWidget *do_widget)
|
|||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
avatar_texture_other = gdk_texture_new_from_resource ("/listbox/apple-red.png");
|
avatar_pixbuf_other = gdk_pixbuf_new_from_resource_at_scale ("/listbox/apple-red.png", 32, 32, FALSE, NULL);
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
|
@@ -25,7 +25,6 @@
|
|||||||
<property name="margin-start">8</property>
|
<property name="margin-start">8</property>
|
||||||
<property name="margin-end">8</property>
|
<property name="margin-end">8</property>
|
||||||
<property name="icon-name">image-missing</property>
|
<property name="icon-name">image-missing</property>
|
||||||
<property name="icon-size">large</property>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="column">0</property>
|
||||||
<property name="row">0</property>
|
<property name="row">0</property>
|
||||||
|
@@ -58,7 +58,7 @@ do_markup (GtkWidget *do_widget)
|
|||||||
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_default_size (GTK_WINDOW (window), 600, 680);
|
gtk_window_set_default_size (GTK_WINDOW (window), 450, 450);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
stack = gtk_stack_new ();
|
stack = gtk_stack_new ();
|
||||||
|
@@ -1,9 +1,5 @@
|
|||||||
|
|
||||||
Text sizes: <span size="xx-small">tiny </span><span size="x-small">very small </span><span size="small">small </span><span size="medium">normal </span><span size="large">large </span><span size="x-large">very large </span><span size="xx-large">huge</span>
|
Text sizes: <span size="xx-small">tiny</span> <span size="x-small">very small</span> <span size="small">small</span> <span size="medium">normal</span> <span size="large">large</span> <span size="x-large">very large</span> <span size="xx-large">huge</span>
|
||||||
|
|
||||||
Text styles: <span style="normal">Normal</span> <span style="italic">Italic</span> <span style="oblique">Olique</span>
|
|
||||||
|
|
||||||
Text weights: <span weight="thin">thin</span> <span weight="light">light</span> <span weight="normal">normal</span> <span weight="bold">bold</span> <span weight="ultraheavy">ultraheavy</span>
|
|
||||||
|
|
||||||
Text <span color="gray">c<span color="green">o</span>l<span color="tomato">o</span>rs</span> and <span background="pink">backgrounds</span>
|
Text <span color="gray">c<span color="green">o</span>l<span color="tomato">o</span>rs</span> and <span background="pink">backgrounds</span>
|
||||||
|
|
||||||
@@ -19,12 +15,6 @@ OpenType font features: <span font_desc="sans regular" font_features="dlig=0">fe
|
|||||||
|
|
||||||
Shortcuts: <tt>Monospace</tt> – <b>Bold</b> – <i>Italic</i> – <big>Big</big> – <small>Small</small> – <u>Underlined</u> – <s>Strikethrough</s> – Super<sup>script</sup> – Sub<sub>script</sub>
|
Shortcuts: <tt>Monospace</tt> – <b>Bold</b> – <i>Italic</i> – <big>Big</big> – <small>Small</small> – <u>Underlined</u> – <s>Strikethrough</s> – Super<sup>script</sup> – Sub<sub>script</sub>
|
||||||
|
|
||||||
hyphenation algorithm is a <span allow_breaks="false" style="italic">set of rules</span>, especially one codified for implementation in a computer program, that decides at which points a word can be broken over two lines with a hyphen. For example, a hyphenation algorithm might decide that impeachment can be broken as impeach‧ment or im‧peachment but not impe‧achment.
|
<span allow_breaks="false">A</span> hyphenation algorithm is a set of rules, especially one codified for implementation in a computer program, that decides at which points a word can be broken over two lines with a hyphen. For example, a hyphenation algorithm might decide that impeachment can be broken as <span allow_breaks="false">impeach‧ment</span> or <span allow_breaks="false">im‧peachment</span> but not <span allow_breaks="false">impe‧achment.</span>
|
||||||
|
|
||||||
<span insert_hyphens="false">one/two three/four five/six seven/eight nine/ten</span>
|
<span insert_hyphens="false">one/two three/four five/six seven/eight nine/ten</span>
|
||||||
|
|
||||||
<span line_height='1.33'>Line height: This is an example of widely spaced text. It was achieved by setting the line-height factor to 1.33. You can set the line-height factor to any value between 0 and 10.
|
|
||||||
Note that the line height affects the spacing between paragraphs as well as between the wrapped lines inside a paragraph.</span>
|
|
||||||
|
|
||||||
Transforms: <span text_transform='uppercase'>straße</span> <span text_transform='capitalize'>up, up and away</span>
|
|
||||||
|
|
||||||
|
@@ -21,10 +21,8 @@ do_menu (GtkWidget *do_widget)
|
|||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkWidget *box;
|
|
||||||
GtkWidget *sw;
|
GtkWidget *sw;
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
GtkWidget *scale;
|
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Menu");
|
gtk_window_set_title (GTK_WINDOW (window), "Menu");
|
||||||
@@ -33,23 +31,11 @@ do_menu (GtkWidget *do_widget)
|
|||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
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, 0);
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), box);
|
|
||||||
|
|
||||||
sw = gtk_scrolled_window_new ();
|
sw = gtk_scrolled_window_new ();
|
||||||
gtk_widget_set_vexpand (sw, TRUE);
|
gtk_window_set_child (GTK_WINDOW (window), sw);
|
||||||
gtk_box_append (GTK_BOX (box), sw);
|
|
||||||
|
|
||||||
widget = demo3_widget_new ("/transparent/portland-rose.jpg");
|
widget = demo3_widget_new ("/transparent/portland-rose.jpg");
|
||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), widget);
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), widget);
|
||||||
|
|
||||||
scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0.01, 10.0, 0.1);
|
|
||||||
gtk_range_set_value (GTK_RANGE (scale), 1.0);
|
|
||||||
gtk_box_append (GTK_BOX (box), scale);
|
|
||||||
|
|
||||||
g_object_bind_property (gtk_range_get_adjustment (GTK_RANGE (scale)), "value",
|
|
||||||
widget, "scale",
|
|
||||||
G_BINDING_BIDIRECTIONAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
@@ -67,7 +67,6 @@ demos = files([
|
|||||||
'paintable_animated.c',
|
'paintable_animated.c',
|
||||||
'paintable_emblem.c',
|
'paintable_emblem.c',
|
||||||
'paintable_mediastream.c',
|
'paintable_mediastream.c',
|
||||||
'paintable_symbolic.c',
|
|
||||||
'panes.c',
|
'panes.c',
|
||||||
'password_entry.c',
|
'password_entry.c',
|
||||||
'peg_solitaire.c',
|
'peg_solitaire.c',
|
||||||
@@ -156,74 +155,10 @@ demos_h = custom_target('gtk4 demo header',
|
|||||||
command: [ find_program('geninclude.py'), '@OUTPUT@', '@INPUT@' ],
|
command: [ find_program('geninclude.py'), '@OUTPUT@', '@INPUT@' ],
|
||||||
)
|
)
|
||||||
|
|
||||||
objcopy_supports_add_symbol = false
|
gtkdemo_resources = gnome.compile_resources('gtkdemo_resources',
|
||||||
objcopy = find_program('objcopy', required : false)
|
'demo.gresource.xml',
|
||||||
if objcopy.found()
|
source_dir: '.',
|
||||||
objcopy_supports_add_symbol = run_command(objcopy, '--help').stdout().contains('--add-symbol')
|
)
|
||||||
endif
|
|
||||||
|
|
||||||
ld = find_program('ld', required : false)
|
|
||||||
|
|
||||||
if build_machine.system() == 'linux' and objcopy.found() and objcopy_supports_add_symbol and ld.found()
|
|
||||||
glib_compile_resources = find_program('glib-compile-resources')
|
|
||||||
|
|
||||||
# Create the resource blob
|
|
||||||
gtkdemo_gresource = custom_target('gtkdemo.gresource',
|
|
||||||
input : 'demo.gresource.xml',
|
|
||||||
output : 'gtkdemo.gresource',
|
|
||||||
depfile : 'gtkdemo.gresource.d',
|
|
||||||
command : [glib_compile_resources,
|
|
||||||
'--generate',
|
|
||||||
'--target=@OUTPUT@',
|
|
||||||
'--dependency-file=@DEPFILE@',
|
|
||||||
'--sourcedir=' + meson.current_source_dir(),
|
|
||||||
'--sourcedir=' + meson.current_build_dir(),
|
|
||||||
'@INPUT@'])
|
|
||||||
|
|
||||||
# Create resource data file
|
|
||||||
gtkdemo_resources_c = custom_target('gtkdemo_resources.c',
|
|
||||||
input : 'demo.gresource.xml',
|
|
||||||
output : 'gtkdemo_resources.c',
|
|
||||||
depfile : 'gtkdemo_resources.c.d',
|
|
||||||
command : [glib_compile_resources,
|
|
||||||
'--generate-source',
|
|
||||||
'--target=@OUTPUT@',
|
|
||||||
'--dependency-file=@DEPFILE@',
|
|
||||||
'--sourcedir=' + meson.current_source_dir(),
|
|
||||||
'--sourcedir=' + meson.current_build_dir(),
|
|
||||||
'--external-data',
|
|
||||||
'--c-name', '_g_binary_gtkdemo',
|
|
||||||
'@INPUT@'])
|
|
||||||
|
|
||||||
# Create object file containing resource data
|
|
||||||
gtkdemo_resources_binary = custom_target('gtkdemo_resources.o',
|
|
||||||
input : gtkdemo_gresource,
|
|
||||||
output : 'gtkdemo_resources.o',
|
|
||||||
command : [ld,
|
|
||||||
'-r',
|
|
||||||
'-b','binary',
|
|
||||||
'@INPUT@',
|
|
||||||
'-o','@OUTPUT@'])
|
|
||||||
|
|
||||||
# Rename symbol to match the one in the C file
|
|
||||||
gtkdemo_resources_o = custom_target('gtkdemo_resources2.o',
|
|
||||||
input : gtkdemo_resources_binary,
|
|
||||||
output : 'gtkdemo_resources2.o',
|
|
||||||
command : [objcopy,
|
|
||||||
'--add-symbol','_g_binary_gtkdemo_resource_data=.data:0',
|
|
||||||
'@INPUT@',
|
|
||||||
'@OUTPUT@'])
|
|
||||||
|
|
||||||
gtkdemo_resources = [
|
|
||||||
gtkdemo_resources_c,
|
|
||||||
gtkdemo_resources_o,
|
|
||||||
]
|
|
||||||
else
|
|
||||||
gtkdemo_resources = gnome.compile_resources('gtkdemo_resources',
|
|
||||||
'demo.gresource.xml',
|
|
||||||
source_dir: '.',
|
|
||||||
)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Use a subset of compiler flags
|
# Use a subset of compiler flags
|
||||||
demo_cflags = []
|
demo_cflags = []
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<component type="desktop">
|
<component type="desktop">
|
||||||
<id>org.gtk.Demo4</id>
|
<id>org.gtk.Demo4.desktop</id>
|
||||||
<launchable type="desktop-id">org.gtk.Demo4.desktop</launchable>
|
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<project_license>LGPL-2.1-or-later</project_license>
|
<project_license>LGPL-2.0+</project_license>
|
||||||
<name>GTK Demo</name>
|
<name>GTK Demo</name>
|
||||||
<summary>Program to demonstrate GTK functions</summary>
|
<summary>Program to demonstrate GTK functions</summary>
|
||||||
<description>
|
<description>
|
||||||
@@ -31,9 +30,8 @@
|
|||||||
<translation type="gettext">gtk-4.0</translation>
|
<translation type="gettext">gtk-4.0</translation>
|
||||||
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
||||||
<developer_name>Matthias Clasen and others</developer_name>
|
<developer_name>Matthias Clasen and others</developer_name>
|
||||||
<content_rating type="oars-1.1"/>
|
|
||||||
<releases>
|
<releases>
|
||||||
<release version="@BUILD_VERSION@">
|
<release version="@BUILD_VERSION@" date="@BUILD_DATE@">
|
||||||
<description>
|
<description>
|
||||||
<p>A new build of GTK.</p>
|
<p>A new build of GTK.</p>
|
||||||
</description>
|
</description>
|
||||||
|
@@ -45,27 +45,26 @@ struct _GtkNuclearIconClass
|
|||||||
* so that it can be called from all the other demos, too.
|
* so that it can be called from all the other demos, too.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
||||||
const GdkRGBA *foreground,
|
double width,
|
||||||
const GdkRGBA *background,
|
double height,
|
||||||
double width,
|
double rotation,
|
||||||
double height,
|
gboolean draw_background)
|
||||||
double rotation)
|
|
||||||
{
|
{
|
||||||
#define RADIUS 0.3
|
#define RADIUS 0.3
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
double size;
|
double size;
|
||||||
|
|
||||||
gtk_snapshot_append_color (snapshot,
|
if (draw_background)
|
||||||
background,
|
gtk_snapshot_append_color (snapshot,
|
||||||
&GRAPHENE_RECT_INIT (0, 0, width, height));
|
&(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 },
|
||||||
|
&GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||||
|
|
||||||
size = MIN (width, height);
|
size = MIN (width, height);
|
||||||
cr = gtk_snapshot_append_cairo (snapshot,
|
cr = gtk_snapshot_append_cairo (snapshot,
|
||||||
&GRAPHENE_RECT_INIT ((width - size) / 2.0,
|
&GRAPHENE_RECT_INIT ((width - size) / 2.0,
|
||||||
(height - size) / 2.0,
|
(height - size) / 2.0,
|
||||||
size, size));
|
size, size));
|
||||||
gdk_cairo_set_source_rgba (cr, foreground);
|
|
||||||
cairo_translate (cr, width / 2.0, height / 2.0);
|
cairo_translate (cr, width / 2.0, height / 2.0);
|
||||||
cairo_scale (cr, size, size);
|
cairo_scale (cr, size, size);
|
||||||
cairo_rotate (cr, rotation);
|
cairo_rotate (cr, rotation);
|
||||||
@@ -95,10 +94,9 @@ gtk_nuclear_icon_snapshot (GdkPaintable *paintable,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
gtk_nuclear_snapshot (snapshot,
|
gtk_nuclear_snapshot (snapshot,
|
||||||
&(GdkRGBA) { 0, 0, 0, 1 }, /* black */
|
|
||||||
&(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 }, /* yellow */
|
|
||||||
width, height,
|
width, height,
|
||||||
nuclear->rotation);
|
nuclear->rotation,
|
||||||
|
TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintableFlags
|
static GdkPaintableFlags
|
||||||
|
@@ -4,11 +4,10 @@
|
|||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
void gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
void gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
||||||
const GdkRGBA *foreground,
|
|
||||||
const GdkRGBA *background,
|
|
||||||
double width,
|
double width,
|
||||||
double height,
|
double height,
|
||||||
double rotation);
|
double rotation,
|
||||||
|
gboolean draw_background);
|
||||||
|
|
||||||
GdkPaintable * gtk_nuclear_icon_new (double rotation);
|
GdkPaintable * gtk_nuclear_icon_new (double rotation);
|
||||||
GdkPaintable * gtk_nuclear_animation_new (gboolean draw_background);
|
GdkPaintable * gtk_nuclear_animation_new (gboolean draw_background);
|
||||||
|
@@ -65,12 +65,9 @@ gtk_nuclear_animation_snapshot (GdkPaintable *paintable,
|
|||||||
|
|
||||||
/* We call the function from the previous example here. */
|
/* We call the function from the previous example here. */
|
||||||
gtk_nuclear_snapshot (snapshot,
|
gtk_nuclear_snapshot (snapshot,
|
||||||
&(GdkRGBA) { 0, 0, 0, 1 }, /* black */
|
|
||||||
nuclear->draw_background
|
|
||||||
? &(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 } /* yellow */
|
|
||||||
: &(GdkRGBA) { 0, 0, 0, 0 }, /* transparent */
|
|
||||||
width, height,
|
width, height,
|
||||||
2 * G_PI * nuclear->progress / MAX_PROGRESS);
|
2 * G_PI * nuclear->progress / MAX_PROGRESS,
|
||||||
|
nuclear->draw_background);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintable *
|
static GdkPaintable *
|
||||||
|
@@ -73,10 +73,9 @@ gtk_nuclear_media_stream_snapshot (GdkPaintable *paintable,
|
|||||||
|
|
||||||
/* We call the function from the previous example here. */
|
/* We call the function from the previous example here. */
|
||||||
gtk_nuclear_snapshot (snapshot,
|
gtk_nuclear_snapshot (snapshot,
|
||||||
&(GdkRGBA) { 0, 0, 0, 1 }, /* black */
|
|
||||||
&(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 }, /* yellow */
|
|
||||||
width, height,
|
width, height,
|
||||||
2 * G_PI * nuclear->progress / DURATION);
|
2 * G_PI * nuclear->progress / DURATION,
|
||||||
|
TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkPaintable *
|
static GdkPaintable *
|
||||||
@@ -151,7 +150,7 @@ gtk_nuclear_media_stream_step (gpointer data)
|
|||||||
* call our pause function to pause the stream.
|
* call our pause function to pause the stream.
|
||||||
*/
|
*/
|
||||||
if (nuclear->progress >= DURATION)
|
if (nuclear->progress >= DURATION)
|
||||||
gtk_media_stream_stream_ended (GTK_MEDIA_STREAM (nuclear));
|
gtk_media_stream_ended (GTK_MEDIA_STREAM (nuclear));
|
||||||
|
|
||||||
/* The timeout function is removed by the pause function,
|
/* The timeout function is removed by the pause function,
|
||||||
* so we can just always return this value.
|
* so we can just always return this value.
|
||||||
@@ -268,11 +267,11 @@ gtk_nuclear_media_stream_init (GtkNuclearMediaStream *nuclear)
|
|||||||
* However, media streams need to tell GTK once they are initialized,
|
* However, media streams need to tell GTK once they are initialized,
|
||||||
* so we do that here.
|
* so we do that here.
|
||||||
*/
|
*/
|
||||||
gtk_media_stream_stream_prepared (GTK_MEDIA_STREAM (nuclear),
|
gtk_media_stream_prepared (GTK_MEDIA_STREAM (nuclear),
|
||||||
FALSE,
|
FALSE,
|
||||||
TRUE,
|
TRUE,
|
||||||
TRUE,
|
TRUE,
|
||||||
DURATION);
|
DURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And finally, we add the simple constructor we declared in the header. */
|
/* And finally, we add the simple constructor we declared in the header. */
|
||||||
|
@@ -1,208 +0,0 @@
|
|||||||
/* Paintable/Symbolic Paintable
|
|
||||||
*
|
|
||||||
* GdkPaintables can be made to follow the theme's colors. GTK calls
|
|
||||||
* icons that do this symbolic icons, paintables that want to have
|
|
||||||
* the same effect can implement the GtkSymbolicPaintable interface.
|
|
||||||
*
|
|
||||||
* We will adapt the original paintable example by adding the ability
|
|
||||||
* to recolor the paintable based on the symbolic colors.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#include "paintable.h"
|
|
||||||
|
|
||||||
static GtkWidget *window = NULL;
|
|
||||||
|
|
||||||
/* First, add the boilerplate for the object itself.
|
|
||||||
* This part would normally go in the header.
|
|
||||||
*/
|
|
||||||
#define GTK_TYPE_NUCLEAR_SYMBOLIC (gtk_nuclear_symbolic_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (GtkNuclearSymbolic, gtk_nuclear_symbolic, GTK, NUCLEAR_SYMBOLIC, GObject)
|
|
||||||
|
|
||||||
/* Declare a few warning levels, so we can pick colors based on them */
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
WARNING_NONE,
|
|
||||||
WARNING_ALERT,
|
|
||||||
WARNING_EMERGENCY
|
|
||||||
} WarningLevel;
|
|
||||||
|
|
||||||
/* Declare the struct. */
|
|
||||||
struct _GtkNuclearSymbolic
|
|
||||||
{
|
|
||||||
GObject parent_instance;
|
|
||||||
|
|
||||||
WarningLevel warning_level;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GtkNuclearSymbolicClass
|
|
||||||
{
|
|
||||||
GObjectClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Add a function to draw the nuclear icon in the given colors */
|
|
||||||
static void
|
|
||||||
gtk_nuclear_symbolic_snapshot_symbolic (GtkSymbolicPaintable *paintable,
|
|
||||||
GdkSnapshot *snapshot,
|
|
||||||
double width,
|
|
||||||
double height,
|
|
||||||
const GdkRGBA *colors,
|
|
||||||
gsize n_colors)
|
|
||||||
{
|
|
||||||
GtkNuclearSymbolic *self = GTK_NUCLEAR_SYMBOLIC (paintable);
|
|
||||||
static const GdkRGBA transparent = { 0, };
|
|
||||||
const GdkRGBA *bg_color;
|
|
||||||
|
|
||||||
/* select the right background color from the warning level */
|
|
||||||
switch (self->warning_level)
|
|
||||||
{
|
|
||||||
case WARNING_NONE:
|
|
||||||
bg_color = &transparent;
|
|
||||||
break;
|
|
||||||
case WARNING_ALERT:
|
|
||||||
bg_color = &colors[GTK_SYMBOLIC_COLOR_WARNING];
|
|
||||||
break;
|
|
||||||
case WARNING_EMERGENCY:
|
|
||||||
bg_color = &colors[GTK_SYMBOLIC_COLOR_ERROR];
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* This should never happen, but we better do defensive coding
|
|
||||||
* with this critical icon */
|
|
||||||
g_assert_not_reached ();
|
|
||||||
bg_color = &transparent;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Draw the icon with the selected warning color */
|
|
||||||
gtk_nuclear_snapshot (snapshot,
|
|
||||||
&colors[GTK_SYMBOLIC_COLOR_FOREGROUND],
|
|
||||||
bg_color,
|
|
||||||
width, height,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_nuclear_symbolic_symbolic_paintable_init (GtkSymbolicPaintableInterface *iface)
|
|
||||||
{
|
|
||||||
iface->snapshot_symbolic = gtk_nuclear_symbolic_snapshot_symbolic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We need to implement the functionality required by the GdkPaintable interface */
|
|
||||||
static void
|
|
||||||
gtk_nuclear_symbolic_snapshot (GdkPaintable *paintable,
|
|
||||||
GdkSnapshot *snapshot,
|
|
||||||
double width,
|
|
||||||
double height)
|
|
||||||
{
|
|
||||||
/* Calling this function without passing a color is a neat trick
|
|
||||||
* to make GTK use default colors and otherwise forward the call
|
|
||||||
* to the snapshotting function above.
|
|
||||||
*/
|
|
||||||
gtk_symbolic_paintable_snapshot_symbolic (GTK_SYMBOLIC_PAINTABLE (paintable),
|
|
||||||
snapshot,
|
|
||||||
width, height,
|
|
||||||
NULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GdkPaintableFlags
|
|
||||||
gtk_nuclear_symbolic_get_flags (GdkPaintable *paintable)
|
|
||||||
{
|
|
||||||
/* This image has a static size, but the contents may change:
|
|
||||||
* We draw different things when the warning level changes.
|
|
||||||
*/
|
|
||||||
return GDK_PAINTABLE_STATIC_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_nuclear_symbolic_paintable_init (GdkPaintableInterface *iface)
|
|
||||||
{
|
|
||||||
iface->snapshot = gtk_nuclear_symbolic_snapshot;
|
|
||||||
iface->get_flags = gtk_nuclear_symbolic_get_flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* When defining the GType, we need to implement bot the GdkPaintable
|
|
||||||
* and the GtkSymbolicPaintable interface */
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (GtkNuclearSymbolic, gtk_nuclear_symbolic, G_TYPE_OBJECT,
|
|
||||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
|
|
||||||
gtk_nuclear_symbolic_paintable_init)
|
|
||||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_SYMBOLIC_PAINTABLE,
|
|
||||||
gtk_nuclear_symbolic_symbolic_paintable_init))
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_nuclear_symbolic_class_init (GtkNuclearSymbolicClass *klass)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_nuclear_symbolic_init (GtkNuclearSymbolic *nuclear)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* And finally, we add the simple constructor we declared in the header. */
|
|
||||||
GdkPaintable *
|
|
||||||
gtk_nuclear_symbolic_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (GTK_TYPE_NUCLEAR_SYMBOLIC, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add some fun feature to the button */
|
|
||||||
static void
|
|
||||||
nuclear_button_clicked (GtkButton *button,
|
|
||||||
GtkNuclearSymbolic *nuclear)
|
|
||||||
{
|
|
||||||
if (nuclear->warning_level >= WARNING_EMERGENCY)
|
|
||||||
{
|
|
||||||
/* On maximum warning level, reset the warning */
|
|
||||||
nuclear->warning_level = WARNING_NONE;
|
|
||||||
/* And sometimes (but not always to confuse people)
|
|
||||||
* close the window.
|
|
||||||
*/
|
|
||||||
if (g_random_boolean ())
|
|
||||||
gtk_window_close (GTK_WINDOW (window));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Otherwise just increase the warning level */
|
|
||||||
nuclear->warning_level++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Don't forget to emit the signal causing the paintable to redraw.
|
|
||||||
* Changing the warning level changes the background color after all.
|
|
||||||
*/
|
|
||||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (nuclear));
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_paintable_symbolic (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
GdkPaintable *nuclear;
|
|
||||||
GtkWidget *image, *button;
|
|
||||||
|
|
||||||
if (!window)
|
|
||||||
{
|
|
||||||
window = gtk_window_new ();
|
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
|
||||||
gtk_widget_get_display (do_widget));
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Don't click!");
|
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|
||||||
|
|
||||||
button = gtk_button_new ();
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), button);
|
|
||||||
|
|
||||||
nuclear = gtk_nuclear_symbolic_new ();
|
|
||||||
image = gtk_image_new_from_paintable (nuclear);
|
|
||||||
|
|
||||||
gtk_button_set_child (GTK_BUTTON (button), image);
|
|
||||||
g_signal_connect (button, "clicked", G_CALLBACK (nuclear_button_clicked), nuclear);
|
|
||||||
g_object_unref (nuclear);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_widget_show (window);
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
@@ -1,7 +1,7 @@
|
|||||||
/* Peg Solitaire
|
/* Peg Solitaire
|
||||||
* #Keywords: GtkGridView, game
|
* #Keywords: GtkGridView, game
|
||||||
*
|
*
|
||||||
* This demo demonstrates how to use drag-and-drop to implement peg solitaire.
|
* This demo demonstrates how to use drag'n'drop to implement peg solitaire.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ solitaire_peg_init (SolitairePeg *peg)
|
|||||||
|
|
||||||
/* Add a little setter for the peg's position.
|
/* Add a little setter for the peg's position.
|
||||||
* We want to track those so that we can check for legal moves
|
* We want to track those so that we can check for legal moves
|
||||||
* during drag-and-drop operations.
|
* during drag'n'drop operations.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
solitaire_peg_set_position (SolitairePeg *peg,
|
solitaire_peg_set_position (SolitairePeg *peg,
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<component type="desktop">
|
<component type="desktop">
|
||||||
<id>org.gtk.IconBrowser4</id>
|
<id>org.gtk.IconBrowser4.desktop</id>
|
||||||
<launchable type="desktop-id">org.gtk.IconBrowser4.desktop</launchable>
|
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<project_license>LGPL-2.1-or-later</project_license>
|
<project_license>LGPL-2.0+</project_license>
|
||||||
<name>GTK Icon Browser</name>
|
<name>GTK Icon Browser</name>
|
||||||
<summary>Program to browse themed icons</summary>
|
<summary>Program to browse themed icons</summary>
|
||||||
<description>
|
<description>
|
||||||
@@ -30,9 +29,8 @@
|
|||||||
<translation type="gettext">gtk-4.0</translation>
|
<translation type="gettext">gtk-4.0</translation>
|
||||||
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
||||||
<developer_name>Matthias Clasen and others</developer_name>
|
<developer_name>Matthias Clasen and others</developer_name>
|
||||||
<content_rating type="oars-1.1"/>
|
|
||||||
<releases>
|
<releases>
|
||||||
<release version="@BUILD_VERSION@">
|
<release version="@BUILD_VERSION@" date="@BUILD_DATE@">
|
||||||
<description>
|
<description>
|
||||||
<p>A new build of GTK.</p>
|
<p>A new build of GTK.</p>
|
||||||
</description>
|
</description>
|
||||||
|
@@ -12,9 +12,19 @@ demo_conf_h = declare_dependency(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# appdata
|
# appdata
|
||||||
|
today = 'unknown'
|
||||||
|
date = find_program('date',
|
||||||
|
required: false)
|
||||||
|
if date.found()
|
||||||
|
r = run_command(date, '-I')
|
||||||
|
if r.returncode() == 0
|
||||||
|
today = r.stdout().strip()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
appdata_config = configuration_data()
|
appdata_config = configuration_data()
|
||||||
appdata_config.set('BUILD_VERSION', meson.project_version())
|
appdata_config.set('BUILD_VERSION', meson.project_version())
|
||||||
|
appdata_config.set('BUILD_DATE', today)
|
||||||
|
|
||||||
subdir('constraint-editor')
|
subdir('constraint-editor')
|
||||||
subdir('gtk-demo')
|
subdir('gtk-demo')
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "gsk/gskrendernodeparserprivate.h"
|
#include "gsk/gskrendernodeparserprivate.h"
|
||||||
#include "gsk/gl/gskglrenderer.h"
|
#include "gsk/gl/gskglrenderer.h"
|
||||||
|
#include "gsk/ngl/gsknglrenderer.h"
|
||||||
#ifdef GDK_WINDOWING_BROADWAY
|
#ifdef GDK_WINDOWING_BROADWAY
|
||||||
#include "gsk/broadway/gskbroadwayrenderer.h"
|
#include "gsk/broadway/gskbroadwayrenderer.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -60,7 +61,7 @@ struct _NodeEditorWindow
|
|||||||
|
|
||||||
GtkWidget *renderer_listbox;
|
GtkWidget *renderer_listbox;
|
||||||
GListStore *renderers;
|
GListStore *renderers;
|
||||||
GskRenderNode *node;
|
GdkPaintable *paintable;
|
||||||
|
|
||||||
GFileMonitor *file_monitor;
|
GFileMonitor *file_monitor;
|
||||||
|
|
||||||
@@ -167,6 +168,7 @@ static void
|
|||||||
text_changed (GtkTextBuffer *buffer,
|
text_changed (GtkTextBuffer *buffer,
|
||||||
NodeEditorWindow *self)
|
NodeEditorWindow *self)
|
||||||
{
|
{
|
||||||
|
GskRenderNode *node;
|
||||||
char *text;
|
char *text;
|
||||||
GBytes *bytes;
|
GBytes *bytes;
|
||||||
GtkTextIter iter;
|
GtkTextIter iter;
|
||||||
@@ -177,12 +179,10 @@ text_changed (GtkTextBuffer *buffer,
|
|||||||
text_buffer_remove_all_tags (self->text_buffer);
|
text_buffer_remove_all_tags (self->text_buffer);
|
||||||
bytes = g_bytes_new_take (text, strlen (text));
|
bytes = g_bytes_new_take (text, strlen (text));
|
||||||
|
|
||||||
g_clear_pointer (&self->node, gsk_render_node_unref);
|
|
||||||
|
|
||||||
/* If this is too slow, go fix the parser performance */
|
/* If this is too slow, go fix the parser performance */
|
||||||
self->node = gsk_render_node_deserialize (bytes, deserialize_error_func, self);
|
node = gsk_render_node_deserialize (bytes, deserialize_error_func, self);
|
||||||
g_bytes_unref (bytes);
|
g_bytes_unref (bytes);
|
||||||
if (self->node)
|
if (node)
|
||||||
{
|
{
|
||||||
/* XXX: Is this code necessary or can we have API to turn nodes into paintables? */
|
/* XXX: Is this code necessary or can we have API to turn nodes into paintables? */
|
||||||
GtkSnapshot *snapshot;
|
GtkSnapshot *snapshot;
|
||||||
@@ -191,9 +191,10 @@ text_changed (GtkTextBuffer *buffer,
|
|||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
snapshot = gtk_snapshot_new ();
|
snapshot = gtk_snapshot_new ();
|
||||||
gsk_render_node_get_bounds (self->node, &bounds);
|
gsk_render_node_get_bounds (node, &bounds);
|
||||||
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (- bounds.origin.x, - bounds.origin.y));
|
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (- bounds.origin.x, - bounds.origin.y));
|
||||||
gtk_snapshot_append_node (snapshot, self->node);
|
gtk_snapshot_append_node (snapshot, node);
|
||||||
|
gsk_render_node_unref (node);
|
||||||
paintable = gtk_snapshot_free_to_paintable (snapshot, &bounds.size);
|
paintable = gtk_snapshot_free_to_paintable (snapshot, &bounds.size);
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (self->picture), paintable);
|
gtk_picture_set_paintable (GTK_PICTURE (self->picture), paintable);
|
||||||
for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->renderers)); i++)
|
for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->renderers)); i++)
|
||||||
@@ -337,9 +338,15 @@ text_view_query_tooltip_cb (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
load_bytes (NodeEditorWindow *self,
|
load_file_contents (NodeEditorWindow *self,
|
||||||
GBytes *bytes)
|
GFile *file)
|
||||||
{
|
{
|
||||||
|
GBytes *bytes;
|
||||||
|
|
||||||
|
bytes = g_file_load_bytes (file, NULL, NULL, NULL);
|
||||||
|
if (bytes == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (!g_utf8_validate (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), NULL))
|
if (!g_utf8_validate (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), NULL))
|
||||||
{
|
{
|
||||||
g_bytes_unref (bytes);
|
g_bytes_unref (bytes);
|
||||||
@@ -355,105 +362,6 @@ load_bytes (NodeEditorWindow *self,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
load_file_contents (NodeEditorWindow *self,
|
|
||||||
GFile *file)
|
|
||||||
{
|
|
||||||
GBytes *bytes;
|
|
||||||
|
|
||||||
bytes = g_file_load_bytes (file, NULL, NULL, NULL);
|
|
||||||
if (bytes == NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return load_bytes (self, bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GdkContentProvider *
|
|
||||||
on_picture_drag_prepare_cb (GtkDragSource *source,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
NodeEditorWindow *self)
|
|
||||||
{
|
|
||||||
if (self->node == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return gdk_content_provider_new_typed (GSK_TYPE_RENDER_NODE, self->node);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_picture_drop_read_done_cb (GObject *source,
|
|
||||||
GAsyncResult *res,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
NodeEditorWindow *self = data;
|
|
||||||
GOutputStream *stream = G_OUTPUT_STREAM (source);
|
|
||||||
GdkDrop *drop = g_object_get_data (source, "drop");
|
|
||||||
GdkDragAction action = 0;
|
|
||||||
GBytes *bytes;
|
|
||||||
|
|
||||||
if (g_output_stream_splice_finish (stream, res, NULL) >= 0)
|
|
||||||
{
|
|
||||||
bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (stream));
|
|
||||||
if (load_bytes (self, bytes))
|
|
||||||
action = GDK_ACTION_COPY;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (self);
|
|
||||||
gdk_drop_finish (drop, action);
|
|
||||||
g_object_unref (drop);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_picture_drop_read_cb (GObject *source,
|
|
||||||
GAsyncResult *res,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
NodeEditorWindow *self = data;
|
|
||||||
GdkDrop *drop = GDK_DROP (source);
|
|
||||||
GInputStream *input;
|
|
||||||
GOutputStream *output;
|
|
||||||
|
|
||||||
input = gdk_drop_read_finish (drop, res, NULL, NULL);
|
|
||||||
if (input == NULL)
|
|
||||||
{
|
|
||||||
g_object_unref (self);
|
|
||||||
gdk_drop_finish (drop, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
output = g_memory_output_stream_new_resizable ();
|
|
||||||
g_object_set_data (G_OBJECT (output), "drop", drop);
|
|
||||||
g_object_ref (drop);
|
|
||||||
|
|
||||||
g_output_stream_splice_async (output,
|
|
||||||
input,
|
|
||||||
G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
|
|
||||||
G_PRIORITY_DEFAULT,
|
|
||||||
NULL,
|
|
||||||
on_picture_drop_read_done_cb,
|
|
||||||
self);
|
|
||||||
g_object_unref (output);
|
|
||||||
g_object_unref (input);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
on_picture_drop_cb (GtkDropTargetAsync *dest,
|
|
||||||
GdkDrop *drop,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
NodeEditorWindow *self)
|
|
||||||
{
|
|
||||||
gdk_drop_read_async (drop,
|
|
||||||
(const char *[2]) { "application/x-gtk-render-node", NULL },
|
|
||||||
G_PRIORITY_DEFAULT,
|
|
||||||
NULL,
|
|
||||||
on_picture_drop_read_cb,
|
|
||||||
g_object_ref (self));
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
file_changed_cb (GFileMonitor *monitor,
|
file_changed_cb (GFileMonitor *monitor,
|
||||||
GFile *file,
|
GFile *file,
|
||||||
@@ -646,6 +554,7 @@ create_cairo_texture (NodeEditorWindow *self)
|
|||||||
GskRenderer *renderer;
|
GskRenderer *renderer;
|
||||||
GskRenderNode *node;
|
GskRenderNode *node;
|
||||||
GdkTexture *texture;
|
GdkTexture *texture;
|
||||||
|
GdkSurface *surface;
|
||||||
|
|
||||||
paintable = gtk_picture_get_paintable (GTK_PICTURE (self->picture));
|
paintable = gtk_picture_get_paintable (GTK_PICTURE (self->picture));
|
||||||
if (paintable == NULL ||
|
if (paintable == NULL ||
|
||||||
@@ -658,8 +567,9 @@ create_cairo_texture (NodeEditorWindow *self)
|
|||||||
if (node == NULL)
|
if (node == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
surface = gtk_native_get_surface (gtk_widget_get_native (GTK_WIDGET (self)));
|
||||||
renderer = gsk_cairo_renderer_new ();
|
renderer = gsk_cairo_renderer_new ();
|
||||||
gsk_renderer_realize (renderer, NULL, NULL);
|
gsk_renderer_realize (renderer, surface, NULL);
|
||||||
|
|
||||||
texture = gsk_renderer_render_texture (renderer, node, NULL);
|
texture = gsk_renderer_render_texture (renderer, node, NULL);
|
||||||
gsk_render_node_unref (node);
|
gsk_render_node_unref (node);
|
||||||
@@ -826,7 +736,6 @@ node_editor_window_finalize (GObject *object)
|
|||||||
|
|
||||||
g_array_free (self->errors, TRUE);
|
g_array_free (self->errors, TRUE);
|
||||||
|
|
||||||
g_clear_pointer (&self->node, gsk_render_node_unref);
|
|
||||||
g_clear_object (&self->renderers);
|
g_clear_object (&self->renderers);
|
||||||
|
|
||||||
G_OBJECT_CLASS (node_editor_window_parent_class)->finalize (object);
|
G_OBJECT_CLASS (node_editor_window_parent_class)->finalize (object);
|
||||||
@@ -837,18 +746,16 @@ node_editor_window_add_renderer (NodeEditorWindow *self,
|
|||||||
GskRenderer *renderer,
|
GskRenderer *renderer,
|
||||||
const char *description)
|
const char *description)
|
||||||
{
|
{
|
||||||
|
GdkSurface *surface;
|
||||||
GdkPaintable *paintable;
|
GdkPaintable *paintable;
|
||||||
|
|
||||||
if (!gsk_renderer_realize (renderer, NULL, NULL))
|
surface = gtk_native_get_surface (GTK_NATIVE (self));
|
||||||
{
|
g_assert (surface != NULL);
|
||||||
GdkSurface *surface = gtk_native_get_surface (GTK_NATIVE (self));
|
|
||||||
g_assert (surface != NULL);
|
|
||||||
|
|
||||||
if (!gsk_renderer_realize (renderer, surface, NULL))
|
if (renderer != NULL && !gsk_renderer_realize (renderer, surface, NULL))
|
||||||
{
|
{
|
||||||
g_object_unref (renderer);
|
g_object_unref (renderer);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
paintable = gtk_renderer_paintable_new (renderer, gtk_picture_get_paintable (GTK_PICTURE (self->picture)));
|
paintable = gtk_renderer_paintable_new (renderer, gtk_picture_get_paintable (GTK_PICTURE (self->picture)));
|
||||||
@@ -874,6 +781,9 @@ node_editor_window_realize (GtkWidget *widget)
|
|||||||
node_editor_window_add_renderer (self,
|
node_editor_window_add_renderer (self,
|
||||||
gsk_gl_renderer_new (),
|
gsk_gl_renderer_new (),
|
||||||
"OpenGL");
|
"OpenGL");
|
||||||
|
node_editor_window_add_renderer (self,
|
||||||
|
gsk_ngl_renderer_new (),
|
||||||
|
"NGL");
|
||||||
#ifdef GDK_RENDERING_VULKAN
|
#ifdef GDK_RENDERING_VULKAN
|
||||||
node_editor_window_add_renderer (self,
|
node_editor_window_add_renderer (self,
|
||||||
gsk_vulkan_renderer_new (),
|
gsk_vulkan_renderer_new (),
|
||||||
@@ -938,8 +848,6 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
|
|||||||
gtk_widget_class_bind_template_callback (widget_class, testcase_save_clicked_cb);
|
gtk_widget_class_bind_template_callback (widget_class, testcase_save_clicked_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, testcase_name_entry_changed_cb);
|
gtk_widget_class_bind_template_callback (widget_class, testcase_name_entry_changed_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, dark_mode_cb);
|
gtk_widget_class_bind_template_callback (widget_class, dark_mode_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, on_picture_drag_prepare_cb);
|
|
||||||
gtk_widget_class_bind_template_callback (widget_class, on_picture_drop_cb);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
|
@@ -198,22 +198,8 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkPicture" id="picture">
|
<object class="GtkPicture" id="picture">
|
||||||
<property name="can-shrink">0</property>
|
<property name="can-shrink">0</property>
|
||||||
<property name="keep-aspect-ratio">1</property>
|
|
||||||
<property name="halign">center</property>
|
<property name="halign">center</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<child>
|
|
||||||
<object class="GtkDragSource">
|
|
||||||
<property name="actions">copy</property>
|
|
||||||
<signal name="prepare" handler="on_picture_drag_prepare_cb" swapped="no"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkDropTargetAsync">
|
|
||||||
<property name="actions">copy</property>
|
|
||||||
<property name="formats">application/x-gtk-render-node</property>
|
|
||||||
<signal name="drop" handler="on_picture_drop_cb" swapped="no"/>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<component type="desktop">
|
<component type="desktop">
|
||||||
<id>org.gtk.PrintEditor4</id>
|
<id>org.gtk.PrintEditor4.desktop</id>
|
||||||
<launchable type="desktop-id">org.gtk.PrintEditor4.desktop</launchable>
|
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<project_license>LGPL-2.1-or-later</project_license>
|
<project_license>LGPL-2.0+</project_license>
|
||||||
<name>GTK Print Editor</name>
|
<name>GTK Print Editor</name>
|
||||||
<summary>Program to demonstrate GTK printing</summary>
|
<summary>Program to demonstrate GTK printing</summary>
|
||||||
<description>
|
<description>
|
||||||
@@ -25,7 +24,6 @@
|
|||||||
<translation type="gettext">gtk-4.0</translation>
|
<translation type="gettext">gtk-4.0</translation>
|
||||||
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
||||||
<developer_name>Matthias Clasen and others</developer_name>
|
<developer_name>Matthias Clasen and others</developer_name>
|
||||||
<content_rating type="oars-1.1"/>
|
|
||||||
<releases>
|
<releases>
|
||||||
<release version="3.99.0" date="2020-07-30">
|
<release version="3.99.0" date="2020-07-30">
|
||||||
<description>
|
<description>
|
||||||
|
@@ -721,6 +721,7 @@ static const char ui_info[] =
|
|||||||
" <item>"
|
" <item>"
|
||||||
" <attribute name='label'>_New</attribute>"
|
" <attribute name='label'>_New</attribute>"
|
||||||
" <attribute name='action'>app.new</attribute>"
|
" <attribute name='action'>app.new</attribute>"
|
||||||
|
" <attribute name='accel'><Primary>n</attribute>"
|
||||||
" </item>"
|
" </item>"
|
||||||
" <item>"
|
" <item>"
|
||||||
" <attribute name='label'>_Open</attribute>"
|
" <attribute name='label'>_Open</attribute>"
|
||||||
@@ -729,10 +730,12 @@ static const char ui_info[] =
|
|||||||
" <item>"
|
" <item>"
|
||||||
" <attribute name='label'>_Save</attribute>"
|
" <attribute name='label'>_Save</attribute>"
|
||||||
" <attribute name='action'>app.save</attribute>"
|
" <attribute name='action'>app.save</attribute>"
|
||||||
|
" <attribute name='accel'><Primary>s</attribute>"
|
||||||
" </item>"
|
" </item>"
|
||||||
" <item>"
|
" <item>"
|
||||||
" <attribute name='label'>Save _As...</attribute>"
|
" <attribute name='label'>Save _As...</attribute>"
|
||||||
" <attribute name='action'>app.save-as</attribute>"
|
" <attribute name='action'>app.save-as</attribute>"
|
||||||
|
" <attribute name='accel'><Primary>s</attribute>"
|
||||||
" </item>"
|
" </item>"
|
||||||
" </section>"
|
" </section>"
|
||||||
" <section>"
|
" <section>"
|
||||||
@@ -753,6 +756,7 @@ static const char ui_info[] =
|
|||||||
" <item>"
|
" <item>"
|
||||||
" <attribute name='label'>_Quit</attribute>"
|
" <attribute name='label'>_Quit</attribute>"
|
||||||
" <attribute name='action'>app.quit</attribute>"
|
" <attribute name='action'>app.quit</attribute>"
|
||||||
|
" <attribute name='accel'><Primary>q</attribute>"
|
||||||
" </item>"
|
" </item>"
|
||||||
" </section>"
|
" </section>"
|
||||||
" </submenu>"
|
" </submenu>"
|
||||||
@@ -762,6 +766,7 @@ static const char ui_info[] =
|
|||||||
" <item>"
|
" <item>"
|
||||||
" <attribute name='label'>_About Print Editor</attribute>"
|
" <attribute name='label'>_About Print Editor</attribute>"
|
||||||
" <attribute name='action'>app.about</attribute>"
|
" <attribute name='action'>app.about</attribute>"
|
||||||
|
" <attribute name='accel'><Primary>a</attribute>"
|
||||||
" </item>"
|
" </item>"
|
||||||
" </section>"
|
" </section>"
|
||||||
" </submenu>"
|
" </submenu>"
|
||||||
@@ -789,15 +794,6 @@ startup (GApplication *app)
|
|||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
GMenuModel *menubar;
|
GMenuModel *menubar;
|
||||||
struct {
|
|
||||||
const char *action_and_target;
|
|
||||||
const char *accelerators[2];
|
|
||||||
} accels[] = {
|
|
||||||
{ "app.new", { "<Control>n", NULL } },
|
|
||||||
{ "app.quit", { "<Control>q", NULL } },
|
|
||||||
{ "app.save", { "<Control>s", NULL } },
|
|
||||||
{ "app.about", { "<Control>a", NULL } },
|
|
||||||
};
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
builder = gtk_builder_new ();
|
||||||
gtk_builder_add_from_string (builder, ui_info, -1, NULL);
|
gtk_builder_add_from_string (builder, ui_info, -1, NULL);
|
||||||
@@ -806,9 +802,6 @@ startup (GApplication *app)
|
|||||||
|
|
||||||
gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
|
gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
|
||||||
|
|
||||||
for (int i = 0; i < G_N_ELEMENTS (accels); i++)
|
|
||||||
gtk_application_set_accels_for_action (GTK_APPLICATION (app), accels[i].action_and_target, accels[i].accelerators);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
g_object_unref (builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 94 KiB |
@@ -1,73 +1,9 @@
|
|||||||
# demos/widget-factory
|
# demos/widget-factory
|
||||||
|
|
||||||
objcopy_supports_add_symbol = false
|
widgetfactory_resources = gnome.compile_resources('widgetfactory_resources',
|
||||||
objcopy = find_program('objcopy', required : false)
|
'widget-factory.gresource.xml',
|
||||||
if objcopy.found()
|
source_dir: '.',
|
||||||
objcopy_supports_add_symbol = run_command(objcopy, '--help').stdout().contains('--add-symbol')
|
)
|
||||||
endif
|
|
||||||
|
|
||||||
ld = find_program('ld', required : false)
|
|
||||||
|
|
||||||
if build_machine.system() == 'linux' and objcopy.found() and objcopy_supports_add_symbol and ld.found()
|
|
||||||
glib_compile_resources = find_program('glib-compile-resources')
|
|
||||||
|
|
||||||
# Create the resource blob
|
|
||||||
widgetfactory_gresource = custom_target('widgetfactory.gresource',
|
|
||||||
input : 'widget-factory.gresource.xml',
|
|
||||||
output : 'widgetfactory.gresource',
|
|
||||||
depfile: 'widgetfactory.gresource.d',
|
|
||||||
command : [glib_compile_resources,
|
|
||||||
'--generate',
|
|
||||||
'--target=@OUTPUT@',
|
|
||||||
'--dependency-file=@DEPFILE@',
|
|
||||||
'--sourcedir=' + meson.current_source_dir(),
|
|
||||||
'--sourcedir=' + meson.current_build_dir(),
|
|
||||||
'@INPUT@'])
|
|
||||||
|
|
||||||
# Create resource data file
|
|
||||||
widgetfactory_resources_c = custom_target('widgetfactory_resources.c',
|
|
||||||
input : 'widget-factory.gresource.xml',
|
|
||||||
output : 'widgetfactory_resources.c',
|
|
||||||
depfile: 'widgetfactory_resources.c.d',
|
|
||||||
command : [glib_compile_resources,
|
|
||||||
'--generate-source',
|
|
||||||
'--target=@OUTPUT@',
|
|
||||||
'--dependency-file=@DEPFILE@',
|
|
||||||
'--sourcedir=' + meson.current_source_dir(),
|
|
||||||
'--sourcedir=' + meson.current_build_dir(),
|
|
||||||
'--external-data',
|
|
||||||
'--c-name', '_g_binary_widgetfactory',
|
|
||||||
'@INPUT@'])
|
|
||||||
|
|
||||||
# Create object file containing resource data
|
|
||||||
widgetfactory_resources_binary = custom_target('widgetfactory_resources.o',
|
|
||||||
input : widgetfactory_gresource,
|
|
||||||
output : 'widgetfactory_resources.o',
|
|
||||||
command : [ld,
|
|
||||||
'-r',
|
|
||||||
'-b','binary',
|
|
||||||
'@INPUT@',
|
|
||||||
'-o','@OUTPUT@'])
|
|
||||||
|
|
||||||
# Rename symbol to match the one in the C file
|
|
||||||
widgetfactory_resources_o = custom_target('widgetfactory_resources2.o',
|
|
||||||
input : widgetfactory_resources_binary,
|
|
||||||
output : 'widgetfactory_resources2.o',
|
|
||||||
command : [objcopy,
|
|
||||||
'--add-symbol','_g_binary_widgetfactory_resource_data=.data:0',
|
|
||||||
'@INPUT@',
|
|
||||||
'@OUTPUT@'])
|
|
||||||
|
|
||||||
widgetfactory_resources = [
|
|
||||||
widgetfactory_resources_c,
|
|
||||||
widgetfactory_resources_o,
|
|
||||||
]
|
|
||||||
else
|
|
||||||
widgetfactory_resources = gnome.compile_resources('widgetfactory_resources',
|
|
||||||
'widget-factory.gresource.xml',
|
|
||||||
source_dir: '.',
|
|
||||||
)
|
|
||||||
endif
|
|
||||||
|
|
||||||
executable('gtk4-widget-factory',
|
executable('gtk4-widget-factory',
|
||||||
sources: ['widget-factory.c', widgetfactory_resources],
|
sources: ['widget-factory.c', widgetfactory_resources],
|
||||||
|
Before Width: | Height: | Size: 38 KiB |
@@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<component type="desktop">
|
<component type="desktop">
|
||||||
<id>org.gtk.WidgetFactory4</id>
|
<id>org.gtk.WidgetFactory4.desktop</id>
|
||||||
<launchable type="desktop-id">org.gtk.WidgetFactory4.desktop</launchable>
|
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<project_license>LGPL-2.1-or-later</project_license>
|
<project_license>LGPL-2.0+</project_license>
|
||||||
<name>GTK Widget Factory</name>
|
<name>GTK Widget Factory</name>
|
||||||
<summary>Program to demonstrate GTK functions</summary>
|
<summary>Program to demonstrate GTK functions</summary>
|
||||||
<description>
|
<description>
|
||||||
@@ -32,9 +31,8 @@
|
|||||||
<translation type="gettext">gtk-4.0</translation>
|
<translation type="gettext">gtk-4.0</translation>
|
||||||
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
||||||
<developer_name>Matthias Clasen and others</developer_name>
|
<developer_name>Matthias Clasen and others</developer_name>
|
||||||
<content_rating type="oars-1.1"/>
|
|
||||||
<releases>
|
<releases>
|
||||||
<release version="@BUILD_VERSION@">
|
<release version="@BUILD_VERSION@" date="@BUILD_DATE@">
|
||||||
<description>
|
<description>
|
||||||
<p>A new build of GTK.</p>
|
<p>A new build of GTK.</p>
|
||||||
</description>
|
</description>
|
||||||
|
BIN
demos/widget-factory/snowy.jpg
Normal file
After Width: | Height: | Size: 2.9 MiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 2.0 MiB |
@@ -696,37 +696,6 @@ on_range_to_changed (GtkSpinButton *to)
|
|||||||
gtk_spin_button_set_value (from, v2);
|
gtk_spin_button_set_value (from, v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkContentProvider *
|
|
||||||
on_picture_drag_prepare (GtkDragSource *source,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
gpointer unused)
|
|
||||||
{
|
|
||||||
GtkWidget *picture;
|
|
||||||
|
|
||||||
picture = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (source));
|
|
||||||
|
|
||||||
return gdk_content_provider_new_typed (GDK_TYPE_TEXTURE, gtk_picture_get_paintable (GTK_PICTURE (picture)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
on_picture_drop (GtkDropTarget *dest,
|
|
||||||
const GValue *value,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
gpointer unused)
|
|
||||||
{
|
|
||||||
GtkWidget *picture;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
picture = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (dest));
|
|
||||||
paintable = g_value_get_object (value);
|
|
||||||
|
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (picture), paintable);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
info_bar_response (GtkWidget *infobar, int response_id)
|
info_bar_response (GtkWidget *infobar, int response_id)
|
||||||
{
|
{
|
||||||
@@ -1213,7 +1182,7 @@ populate_flowbox (GtkWidget *flowbox)
|
|||||||
GtkWidget *child;
|
GtkWidget *child;
|
||||||
int i;
|
int i;
|
||||||
const char *resources[] = {
|
const char *resources[] = {
|
||||||
"sunset.jpg", "portland-rose.jpg", "beach.jpg", "nyc.jpg"
|
"sunset.jpg", "snowy.jpg", "portland-rose.jpg"
|
||||||
};
|
};
|
||||||
|
|
||||||
if (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (flowbox), "populated")))
|
if (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (flowbox), "populated")))
|
||||||
@@ -2028,7 +1997,6 @@ activate (GApplication *app)
|
|||||||
const char *accelerators[2];
|
const char *accelerators[2];
|
||||||
} accels[] = {
|
} accels[] = {
|
||||||
{ "app.about", { "F1", NULL } },
|
{ "app.about", { "F1", NULL } },
|
||||||
{ "app.shortcuts", { "<Control>question", NULL } },
|
|
||||||
{ "app.quit", { "<Control>q", NULL } },
|
{ "app.quit", { "<Control>q", NULL } },
|
||||||
{ "app.open-in", { "<Control>n", NULL } },
|
{ "app.open-in", { "<Control>n", NULL } },
|
||||||
{ "win.dark", { "<Control>d", NULL } },
|
{ "win.dark", { "<Control>d", NULL } },
|
||||||
@@ -2071,8 +2039,6 @@ activate (GApplication *app)
|
|||||||
"on_page_combo_changed", (GCallback)on_page_combo_changed,
|
"on_page_combo_changed", (GCallback)on_page_combo_changed,
|
||||||
"on_range_from_changed", (GCallback)on_range_from_changed,
|
"on_range_from_changed", (GCallback)on_range_from_changed,
|
||||||
"on_range_to_changed", (GCallback)on_range_to_changed,
|
"on_range_to_changed", (GCallback)on_range_to_changed,
|
||||||
"on_picture_drag_prepare", (GCallback)on_picture_drag_prepare,
|
|
||||||
"on_picture_drop", (GCallback)on_picture_drop,
|
|
||||||
"tab_close_cb", (GCallback)tab_close_cb,
|
"tab_close_cb", (GCallback)tab_close_cb,
|
||||||
"increase_icon_size", (GCallback)increase_icon_size,
|
"increase_icon_size", (GCallback)increase_icon_size,
|
||||||
"decrease_icon_size", (GCallback)decrease_icon_size,
|
"decrease_icon_size", (GCallback)decrease_icon_size,
|
||||||
|
@@ -115,8 +115,7 @@
|
|||||||
<gresource prefix="/org/gtk/WidgetFactory4">
|
<gresource prefix="/org/gtk/WidgetFactory4">
|
||||||
<file>gtk-logo.webm</file>
|
<file>gtk-logo.webm</file>
|
||||||
<file>sunset.jpg</file>
|
<file>sunset.jpg</file>
|
||||||
|
<file>snowy.jpg</file>
|
||||||
<file>portland-rose.jpg</file>
|
<file>portland-rose.jpg</file>
|
||||||
<file>nyc.jpg</file>
|
|
||||||
<file>beach.jpg</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
</gresources>
|
</gresources>
|
||||||
|
@@ -13,7 +13,7 @@ devhelp = true
|
|||||||
[dependencies."GObject-2.0"]
|
[dependencies."GObject-2.0"]
|
||||||
name = "GObject"
|
name = "GObject"
|
||||||
description = "The base type system library"
|
description = "The base type system library"
|
||||||
docs_url = "https://docs.gtk.org/gobject/"
|
docs_url = "https://developer.gnome.org/gobject/stable"
|
||||||
|
|
||||||
[theme]
|
[theme]
|
||||||
name = "basic"
|
name = "basic"
|
||||||
|
@@ -13,7 +13,7 @@ devhelp = true
|
|||||||
[dependencies."GObject-2.0"]
|
[dependencies."GObject-2.0"]
|
||||||
name = "GObject"
|
name = "GObject"
|
||||||
description = "The base type system library"
|
description = "The base type system library"
|
||||||
docs_url = "https://docs.gtk.org/gobject/"
|
docs_url = "https://developer.gnome.org/gobject/stable"
|
||||||
|
|
||||||
[theme]
|
[theme]
|
||||||
name = "basic"
|
name = "basic"
|
||||||
|
@@ -14,7 +14,7 @@ search_index = true
|
|||||||
[dependencies."GObject-2.0"]
|
[dependencies."GObject-2.0"]
|
||||||
name = "GObject"
|
name = "GObject"
|
||||||
description = "The base type system library"
|
description = "The base type system library"
|
||||||
docs_url = "https://docs.gtk.org/gobject/"
|
docs_url = "https://developer.gnome.org/gobject/stable"
|
||||||
|
|
||||||
[dependencies."cairo-1.0"]
|
[dependencies."cairo-1.0"]
|
||||||
name = "Cairo"
|
name = "Cairo"
|
||||||
|
@@ -1,25 +1,23 @@
|
|||||||
expand_content_md_files = [
|
expand_content_md_files = [
|
||||||
]
|
]
|
||||||
|
|
||||||
if get_option('gtk_doc')
|
gdk4_toml = configure_file(input: 'gdk4.toml.in', output: 'gdk4.toml', configuration: toml_conf)
|
||||||
gdk4_toml = configure_file(
|
gdk4x11_toml = configure_file(input: 'gdk4-x11.toml.in', output: 'gdk4-x11.toml', configuration: toml_conf)
|
||||||
input: 'gdk4.toml.in',
|
gdk4wayland_toml = configure_file(input: 'gdk4-wayland.toml.in', output: 'gdk4-wayland.toml', configuration: toml_conf)
|
||||||
output: 'gdk4.toml',
|
|
||||||
configuration: toml_conf,
|
|
||||||
install: true,
|
|
||||||
install_dir: docs_dir / 'gdk4',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if get_option('gtk_doc')
|
||||||
custom_target('gdk4-doc',
|
custom_target('gdk4-doc',
|
||||||
input: [ gdk4_toml, gdk_gir[0] ],
|
input: [ gdk4_toml, gdk_gir[0] ],
|
||||||
output: 'gdk4',
|
output: 'gdk4',
|
||||||
command: [
|
command: [
|
||||||
gidocgen,
|
gidocgen,
|
||||||
'generate',
|
'generate',
|
||||||
gidocgen_common_args,
|
'--quiet',
|
||||||
|
'--fatal-warnings',
|
||||||
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
||||||
'--config=@INPUT0@',
|
'--config=@INPUT0@',
|
||||||
'--output-dir=@OUTPUT@',
|
'--output-dir=@OUTPUT@',
|
||||||
|
'--no-namespace-dir',
|
||||||
'--content-dir=@0@'.format(meson.current_source_dir()),
|
'--content-dir=@0@'.format(meson.current_source_dir()),
|
||||||
'@INPUT1@',
|
'@INPUT1@',
|
||||||
],
|
],
|
||||||
@@ -30,24 +28,18 @@ if get_option('gtk_doc')
|
|||||||
)
|
)
|
||||||
|
|
||||||
if x11_enabled
|
if x11_enabled
|
||||||
gdk4x11_toml = configure_file(
|
|
||||||
input: 'gdk4-x11.toml.in',
|
|
||||||
output: 'gdk4-x11.toml',
|
|
||||||
configuration: toml_conf,
|
|
||||||
install: true,
|
|
||||||
install_dir: docs_dir / 'gdk4-x11',
|
|
||||||
)
|
|
||||||
|
|
||||||
custom_target('gdk4-x11-doc',
|
custom_target('gdk4-x11-doc',
|
||||||
input: [ gdk4x11_toml, gdk_x11_gir[0] ],
|
input: [ gdk4x11_toml, gdk_x11_gir[0] ],
|
||||||
output: 'gdk4-x11',
|
output: 'gdk4-x11',
|
||||||
command: [
|
command: [
|
||||||
gidocgen,
|
gidocgen,
|
||||||
'generate',
|
'generate',
|
||||||
gidocgen_common_args,
|
'--quiet',
|
||||||
|
'--fatal-warnings',
|
||||||
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
||||||
'--config=@INPUT0@',
|
'--config=@INPUT0@',
|
||||||
'--output-dir=@OUTPUT@',
|
'--output-dir=@OUTPUT@',
|
||||||
|
'--no-namespace-dir',
|
||||||
'--content-dir=@0@'.format(meson.current_source_dir()),
|
'--content-dir=@0@'.format(meson.current_source_dir()),
|
||||||
'@INPUT1@',
|
'@INPUT1@',
|
||||||
],
|
],
|
||||||
@@ -60,24 +52,18 @@ if get_option('gtk_doc')
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if wayland_enabled
|
if wayland_enabled
|
||||||
gdk4wayland_toml = configure_file(
|
|
||||||
input: 'gdk4-wayland.toml.in',
|
|
||||||
output: 'gdk4-wayland.toml',
|
|
||||||
configuration: toml_conf,
|
|
||||||
install: true,
|
|
||||||
install_dir: docs_dir / 'gdk4-wayland',
|
|
||||||
)
|
|
||||||
|
|
||||||
custom_target('gdk4-wayland-doc',
|
custom_target('gdk4-wayland-doc',
|
||||||
input: [ gdk4wayland_toml, gdk_wayland_gir[0] ],
|
input: [ gdk4wayland_toml, gdk_wayland_gir[0] ],
|
||||||
output: 'gdk4-wayland',
|
output: 'gdk4-wayland',
|
||||||
command: [
|
command: [
|
||||||
gidocgen,
|
gidocgen,
|
||||||
'generate',
|
'generate',
|
||||||
gidocgen_common_args,
|
'--quiet',
|
||||||
|
'--fatal-warnings',
|
||||||
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
||||||
'--config=@INPUT0@',
|
'--config=@INPUT0@',
|
||||||
'--output-dir=@OUTPUT@',
|
'--output-dir=@OUTPUT@',
|
||||||
|
'--no-namespace-dir',
|
||||||
'--content-dir=@0@'.format(meson.current_source_dir()),
|
'--content-dir=@0@'.format(meson.current_source_dir()),
|
||||||
'@INPUT1@',
|
'@INPUT1@',
|
||||||
],
|
],
|
||||||
|
@@ -3,15 +3,11 @@
|
|||||||
|
|
||||||
// A map between namespaces and base URLs for their online documentation
|
// A map between namespaces and base URLs for their online documentation
|
||||||
baseURLs = [
|
baseURLs = [
|
||||||
[ 'GLib', 'https://docs.gtk.org/glib/' ],
|
[ 'Gdk', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4/' ],
|
||||||
[ 'GObject', 'https://docs.gtk.org/gobject/' ],
|
[ 'GdkWayland', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4-wayland/' ],
|
||||||
[ 'Gio', 'https://docs.gtk.org/gio/' ],
|
[ 'GdkX11', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4-x11/' ],
|
||||||
[ 'Gdk', 'https://docs.gtk.org/gdk4/' ],
|
[ 'Gsk', 'https://gnome.pages.gitlab.gnome.org/gtk/gsk4/' ],
|
||||||
[ 'GdkWayland', 'https://docs.gtk.org/gdk4-wayland/' ],
|
[ 'Gtk', 'https://gnome.pages.gitlab.gnome.org/gtk/gtk4/' ],
|
||||||
[ 'GdkX11', 'https://docs.gtk.org/gdk4-x11/' ],
|
[ 'Pango', 'https://gnome.pages/gitlab.gnome.org/pango/pango/' ],
|
||||||
[ 'Gsk', 'https://docs.gtk.org/gsk4/' ],
|
[ 'PangoCairo', 'https://gnome.pages.gitlab.gnome.org/pango/pangocairo/' ],
|
||||||
[ 'Gtk', 'https://docs.gtk.org/gtk4/' ],
|
|
||||||
[ 'Pango', 'https://docs.gtk.org/Pango/' ],
|
|
||||||
[ 'PangoCairo', 'https://docs.gtk.org/PangoCairo/' ],
|
|
||||||
[ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ],
|
|
||||||
]
|
]
|
||||||
|
@@ -14,7 +14,7 @@ search_index = true
|
|||||||
[dependencies."GObject-2.0"]
|
[dependencies."GObject-2.0"]
|
||||||
name = "GObject"
|
name = "GObject"
|
||||||
description = "The base type system library"
|
description = "The base type system library"
|
||||||
docs_url = "https://docs.gtk.org/gobject/"
|
docs_url = "https://developer.gnome.org/gobject/stable/"
|
||||||
|
|
||||||
[dependencies."Graphene-1.0"]
|
[dependencies."Graphene-1.0"]
|
||||||
name = "Graphene"
|
name = "Graphene"
|
||||||
|
@@ -1,22 +1,18 @@
|
|||||||
if get_option('gtk_doc')
|
gsk4_toml = configure_file(input: 'gsk4.toml.in', output: 'gsk4.toml', configuration: toml_conf)
|
||||||
gsk4_toml = configure_file(
|
|
||||||
input: 'gsk4.toml.in',
|
|
||||||
output: 'gsk4.toml',
|
|
||||||
configuration: toml_conf,
|
|
||||||
install: true,
|
|
||||||
install_dir: docs_dir / 'gsk4',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if get_option('gtk_doc')
|
||||||
custom_target('gsk4-doc',
|
custom_target('gsk4-doc',
|
||||||
input: [ gsk4_toml, gsk_gir[0] ],
|
input: [ gsk4_toml, gsk_gir[0] ],
|
||||||
output: 'gsk4',
|
output: 'gsk4',
|
||||||
command: [
|
command: [
|
||||||
gidocgen,
|
gidocgen,
|
||||||
'generate',
|
'generate',
|
||||||
gidocgen_common_args,
|
'--quiet',
|
||||||
|
'--fatal-warnings',
|
||||||
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
||||||
'--config=@INPUT0@',
|
'--config=@INPUT0@',
|
||||||
'--output-dir=@OUTPUT@',
|
'--output-dir=@OUTPUT@',
|
||||||
|
'--no-namespace-dir',
|
||||||
'--content-dir=@0@'.format(meson.current_source_dir()),
|
'--content-dir=@0@'.format(meson.current_source_dir()),
|
||||||
'@INPUT1@',
|
'@INPUT1@',
|
||||||
],
|
],
|
||||||
|
@@ -3,15 +3,11 @@
|
|||||||
|
|
||||||
// A map between namespaces and base URLs for their online documentation
|
// A map between namespaces and base URLs for their online documentation
|
||||||
baseURLs = [
|
baseURLs = [
|
||||||
[ 'GLib', 'https://docs.gtk.org/glib/' ],
|
[ 'Gdk', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4/' ],
|
||||||
[ 'GObject', 'https://docs.gtk.org/gobject/' ],
|
[ 'GdkWayland', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4-wayland/' ],
|
||||||
[ 'Gio', 'https://docs.gtk.org/gio/' ],
|
[ 'GdkX11', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4-x11/' ],
|
||||||
[ 'Gdk', 'https://docs.gtk.org/gdk4/' ],
|
[ 'Gsk', 'https://gnome.pages.gitlab.gnome.org/gtk/gsk4/' ],
|
||||||
[ 'GdkWayland', 'https://docs.gtk.org/gdk4-wayland/' ],
|
[ 'Gtk', 'https://gnome.pages.gitlab.gnome.org/gtk/gtk4/' ],
|
||||||
[ 'GdkX11', 'https://docs.gtk.org/gdk4-x11/' ],
|
[ 'Pango', 'https://gnome.pages/gitlab.gnome.org/pango/pango/' ],
|
||||||
[ 'Gsk', 'https://docs.gtk.org/gsk4/' ],
|
[ 'PangoCairo', 'https://gnome.pages.gitlab.gnome.org/pango/pangocairo/' ],
|
||||||
[ 'Gtk', 'https://docs.gtk.org/gtk4/' ],
|
|
||||||
[ 'Pango', 'https://docs.gtk.org/Pango/' ],
|
|
||||||
[ 'PangoCairo', 'https://docs.gtk.org/PangoCairo/' ],
|
|
||||||
[ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ],
|
|
||||||
]
|
]
|
||||||
|
@@ -162,8 +162,6 @@ done with
|
|||||||
|caret-color|[CSS Basic User Interface Level 3](https://www.w3.org/TR/css3-ui/#caret-color) | CSS allows an auto value |
|
|caret-color|[CSS Basic User Interface Level 3](https://www.w3.org/TR/css3-ui/#caret-color) | CSS allows an auto value |
|
||||||
|-gtk-secondary-caret-color|[Color](https://www.w3.org/TR/css-color-3/#valuea-def-color) | used for the secondary caret in bidirectional text |
|
|-gtk-secondary-caret-color|[Color](https://www.w3.org/TR/css-color-3/#valuea-def-color) | used for the secondary caret in bidirectional text |
|
||||||
|letter-spacing| [CSS Text Level 3](https://www.w3.org/TR/css3-text/#letter-spacing) | |
|
|letter-spacing| [CSS Text Level 3](https://www.w3.org/TR/css3-text/#letter-spacing) | |
|
||||||
|text-transform| [CSS Text Level 3](https://www.w3.org/TR/css-text-3/#text-transform-property) | CSS allows full-width and full-size-kana. Since 4.6 |
|
|
||||||
|line-height| [CSS Inline Layout Level 3](https://www.w3.org/TR/css-inline-3/#line-height-property) | Since 4.6 |
|
|
||||||
|text-decoration-line| [CSS Text Decoration Level 3](https://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property) | |
|
|text-decoration-line| [CSS Text Decoration Level 3](https://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property) | |
|
||||||
|text-decoration-color| [CSS Text Decoration Level 3](https://www.w3.org/TR/css-text-decor-3/#text-decoration-color-property) | |
|
|text-decoration-color| [CSS Text Decoration Level 3](https://www.w3.org/TR/css-text-decor-3/#text-decoration-color-property) | |
|
||||||
|text-decoration-style| [CSS Text Decoration Level 3](https://www.w3.org/TR/css-text-decor-3/#text-decoration-style-property) | CSS allows dashed and dotted |
|
|text-decoration-style| [CSS Text Decoration Level 3](https://www.w3.org/TR/css-text-decor-3/#text-decoration-style-property) | CSS allows dashed and dotted |
|
||||||
|
@@ -1,54 +0,0 @@
|
|||||||
Title: Drag-and-Drop in GTK
|
|
||||||
|
|
||||||
Drag-and-Drop (DND) is a user interaction pattern where users drag a UI element
|
|
||||||
from one place to another, either inside a single application or between
|
|
||||||
different application windows.
|
|
||||||
|
|
||||||
When the element is 'dropped', data is transferred from the source to the
|
|
||||||
destination, according to the drag action that is negotiated between both
|
|
||||||
sides. Most commonly, that is a _copy_, but it can also be a _move_ or a
|
|
||||||
_link_, depending on the kind of data and how the drag operation has been
|
|
||||||
set up.
|
|
||||||
|
|
||||||
This chapter gives an overview over how Drag-and-Drop is handled with event
|
|
||||||
controllers in GTK.
|
|
||||||
|
|
||||||
## Drag sources
|
|
||||||
|
|
||||||
To make data available via DND, you create a [class@Gtk.DragSource]. Drag sources
|
|
||||||
are event controllers, which initiate a Drag-and-Drop operation when the user clicks
|
|
||||||
and drags the widget.
|
|
||||||
|
|
||||||
A drag source can be set up ahead of time, with the desired drag action(s) and the data
|
|
||||||
to be transferred. But it is also possible to provide the data when a drag operation
|
|
||||||
is about to begin, by connecting to the [signal@Gtk.DragSource::prepare] signal.
|
|
||||||
|
|
||||||
The GtkDragSource emits the [signal@Gtk.DragSource::drag-begin] signal when the DND
|
|
||||||
operation starts, and the [signal@Gtk.DragSource::drag-end] signal when it is done.
|
|
||||||
But it is not normally necessary to handle these signals. One case in which a ::drag-end
|
|
||||||
handler is necessary is to implement `GDK_ACTION_MOVE`.
|
|
||||||
|
|
||||||
## Drop targets
|
|
||||||
|
|
||||||
To receive data via DND, you create a [class@Gtk.DropTarget], and tell it what kind of
|
|
||||||
data to accept. You need to connect to the [signal@Gtk.DropTarget::drop] signal to receive
|
|
||||||
the data when a DND operation occurs.
|
|
||||||
|
|
||||||
While a DND operation is ongoing, GTK provides updates when the pointer moves over
|
|
||||||
the widget to which the drop target is associated. The [signal@Gtk.DropTarget::enter],
|
|
||||||
[signal@Gtk.DropTarget::leave] and [signal@Gtk.DropTarget::motion] signals get emitted
|
|
||||||
for this purpose.
|
|
||||||
|
|
||||||
GtkDropTarget provides a simple API, and only provides the data when it has been completely
|
|
||||||
transferred. If you need to handle the data transfer yourself (for example to provide progress
|
|
||||||
information during the transfer), you can use the more complicated [class@Gtk.DropTargetAsync].
|
|
||||||
|
|
||||||
## Other considerations
|
|
||||||
|
|
||||||
It is sometimes necessary to update the UI of the destination while a DND operation is ongoing,
|
|
||||||
say to scroll or expand a view, or to switch pages. Typically, such UI changes are triggered
|
|
||||||
by hovering over the widget in question.
|
|
||||||
|
|
||||||
[class@Gtk.DropControllerMotion] is an event controller that can help with implementing such
|
|
||||||
behaviors. It is very similar to [class@Gtk.EventControllerMotion], but provides events during
|
|
||||||
a DND operation.
|
|
@@ -3,13 +3,13 @@ Slug: gtk-getting-started
|
|||||||
|
|
||||||
GTK is a [widget toolkit](http://en.wikipedia.org/wiki/Widget_toolkit).
|
GTK is a [widget toolkit](http://en.wikipedia.org/wiki/Widget_toolkit).
|
||||||
Each user interface created by GTK consists of widgets. This is implemented
|
Each user interface created by GTK consists of widgets. This is implemented
|
||||||
in C using [class@GObject.Object], an object-oriented framework for C. Widgets
|
in C using [GObject](#gobject), an object-oriented framework for C. Widgets
|
||||||
are organized in a hierarchy. The window widget is the main container.
|
are organized in a hierarchy. The window widget is the main container.
|
||||||
The user interface is then built by adding buttons, drop-down menus, input
|
The user interface is then built by adding buttons, drop-down menus, input
|
||||||
fields, and other widgets to the window. If you are creating complex user
|
fields, and other widgets to the window. If you are creating complex user
|
||||||
interfaces it is recommended to use GtkBuilder and its GTK-specific markup
|
interfaces it is recommended to use GtkBuilder and its GTK-specific markup
|
||||||
description language, instead of assembling the interface manually. You can
|
description language, instead of assembling the interface manually. You can
|
||||||
also use a visual user interface editor, like [Glade](https://glade.gnome.org/).
|
also use a visual user interface editor, like [glade](https://glade.gnome.org/).
|
||||||
|
|
||||||
GTK is event-driven. The toolkit listens for events such as a click
|
GTK is event-driven. The toolkit listens for events such as a click
|
||||||
on a button, and passes the event to your application.
|
on a button, and passes the event to your application.
|
||||||
@@ -17,7 +17,7 @@ on a button, and passes the event to your application.
|
|||||||
This chapter contains some tutorial information to get you started with
|
This chapter contains some tutorial information to get you started with
|
||||||
GTK programming. It assumes that you have GTK, its dependencies and a C
|
GTK programming. It assumes that you have GTK, its dependencies and a C
|
||||||
compiler installed and ready to use. If you need to build GTK itself first,
|
compiler installed and ready to use. If you need to build GTK itself first,
|
||||||
refer to the [Compiling the GTK libraries](building.html) section in this
|
refer to the [Compiling the GTK libraries](#gtk-compiling) section in this
|
||||||
reference.
|
reference.
|
||||||
|
|
||||||
## Basics
|
## Basics
|
||||||
@@ -68,7 +68,7 @@ gcc $( pkg-config --cflags gtk4 ) -o example-0 example-0.c $( pkg-config --libs
|
|||||||
```
|
```
|
||||||
|
|
||||||
For more information on how to compile a GTK application, please
|
For more information on how to compile a GTK application, please
|
||||||
refer to the [Compiling GTK Applications](compiling.html)
|
refer to the [Compiling GTK Applications](#gtk-compiling)
|
||||||
section in this reference.
|
section in this reference.
|
||||||
|
|
||||||
All GTK applications will, of course, include `gtk/gtk.h`, which declares
|
All GTK applications will, of course, include `gtk/gtk.h`, which declares
|
||||||
@@ -106,16 +106,16 @@ The call to [ctor@Gtk.ApplicationWindow.new] will create a new
|
|||||||
window will have a frame, a title bar, and window controls depending on the
|
window will have a frame, a title bar, and window controls depending on the
|
||||||
platform.
|
platform.
|
||||||
|
|
||||||
A window title is set using [`method@Gtk.Window.set_title`]. This function
|
A window title is set using [method@Gtk.Window.set_title]. This function
|
||||||
takes a `GtkWindow` pointer and a string as input. As our `window` pointer
|
takes a `GtkWindow` pointer and a string as input. As our `window` pointer
|
||||||
is a `GtkWidget` pointer, we need to cast it to `GtkWindow`; instead of
|
is a `GtkWidget` pointer, we need to cast it to `GtkWindow`; instead of
|
||||||
casting `window` via a typical C cast like `(GtkWindow*)`, `window` can be
|
casting `window` via a typical C cast like `(GtkWindow*)`, `window` can be
|
||||||
cast using the macro `GTK_WINDOW()`. `GTK_WINDOW()` will check if the
|
cast using the macro `GTK_WINDOW()`. `GTK_WINDOW()` will check if the
|
||||||
pointer is an instance of the `GtkWindow` class, before casting, and emit a
|
pointer is an instance of the `GtkWindow` class, before casting, and emit a
|
||||||
warning if the check fails. More information about this convention can be
|
warning if the check fails. More information about this convention can be
|
||||||
found [in the GObject documentation](https://docs.gtk.org/gobject/concepts.html#conventions).
|
found [here](https://developer.gnome.org/gobject/stable/gtype-conventions.html).
|
||||||
|
|
||||||
Finally the window size is set using [`method@Gtk.Window.set_default_size`]
|
Finally the window size is set using [method@Gtk.Window.set_default_size]
|
||||||
and the window is then shown by GTK via [method@Gtk.Widget.show].
|
and the window is then shown by GTK via [method@Gtk.Widget.show].
|
||||||
|
|
||||||
When you close the window, by (for example) pressing the X button, the
|
When you close the window, by (for example) pressing the X button, the
|
||||||
@@ -167,17 +167,12 @@ activate (GtkApplication *app,
|
|||||||
gtk_window_set_title (GTK_WINDOW (window), "Window");
|
gtk_window_set_title (GTK_WINDOW (window), "Window");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_set_halign (box, GTK_ALIGN_CENTER);
|
|
||||||
gtk_widget_set_valign (box, GTK_ALIGN_CENTER);
|
|
||||||
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), box);
|
gtk_window_set_child (GTK_WINDOW (window), box);
|
||||||
|
|
||||||
button = gtk_button_new_with_label ("Hello World");
|
button = gtk_button_new_with_label ("Hello World");
|
||||||
|
|
||||||
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
|
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
|
||||||
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
|
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
gtk_widget_show (window);
|
gtk_widget_show (window);
|
||||||
@@ -217,10 +212,10 @@ The `GtkBox` widget is created with [ctor@Gtk.Box.new], which takes a
|
|||||||
this box will contain can either be laid out horizontally or vertically.
|
this box will contain can either be laid out horizontally or vertically.
|
||||||
This does not matter in this particular case, as we are dealing with only
|
This does not matter in this particular case, as we are dealing with only
|
||||||
one button. After initializing box with the newly created `GtkBox`, the code
|
one button. After initializing box with the newly created `GtkBox`, the code
|
||||||
adds the box widget to the window widget using [`method@Gtk.Window.set_child`].
|
adds the box widget to the window widget using [method@Gtk.Window.set_child].
|
||||||
|
|
||||||
Next the `button` variable is initialized in similar manner.
|
Next the `button` variable is initialized in similar manner.
|
||||||
[`ctor@Gtk.Button.new_with_label`] is called which returns a
|
[ctor@Gtk.Button.new_with_label] is called which returns a
|
||||||
[class@Gtk.Button] to be stored in `button`. Afterwards `button` is added to
|
[class@Gtk.Button] to be stored in `button`. Afterwards `button` is added to
|
||||||
our `box`.
|
our `box`.
|
||||||
|
|
||||||
@@ -246,8 +241,8 @@ More information about creating buttons can be found
|
|||||||
[here](https://wiki.gnome.org/HowDoI/Buttons).
|
[here](https://wiki.gnome.org/HowDoI/Buttons).
|
||||||
|
|
||||||
The rest of the code in `example-1.c` is identical to `example-0.c`. The next
|
The rest of the code in `example-1.c` is identical to `example-0.c`. The next
|
||||||
section will elaborate further on how to add several [class@Gtk.Widget]s to your
|
section will elaborate further on how to add several GtkWidgets to your GTK
|
||||||
GTK application.
|
application.
|
||||||
|
|
||||||
## Packing
|
## Packing
|
||||||
|
|
||||||
@@ -256,18 +251,10 @@ a window. When you do so, it becomes important to control how each widget is
|
|||||||
positioned and sized. This is where packing comes in.
|
positioned and sized. This is where packing comes in.
|
||||||
|
|
||||||
GTK comes with a large variety of _layout containers_ whose purpose it
|
GTK comes with a large variety of _layout containers_ whose purpose it
|
||||||
is to control the layout of the child widgets that are added to them, like:
|
is to control the layout of the child widgets that are added to them.
|
||||||
|
See [Layout containers](#LayoutContainers) for an overview.
|
||||||
|
|
||||||
- [class@Gtk.Box]
|
The following example shows how the GtkGrid container lets you
|
||||||
- [class@Gtk.Grid]
|
|
||||||
- [class@Gtk.Revealer]
|
|
||||||
- [class@Gtk.Stack]
|
|
||||||
- [class@Gtk.Overlay]
|
|
||||||
- [class@Gtk.Paned]
|
|
||||||
- [class@Gtk.Expander]
|
|
||||||
- [class@Gtk.Fixed]
|
|
||||||
|
|
||||||
The following example shows how the [class@Gtk.Grid] container lets you
|
|
||||||
arrange several buttons:
|
arrange several buttons:
|
||||||
|
|
||||||

|

|
||||||
@@ -366,11 +353,11 @@ draw function.
|
|||||||
The contents of a widget often need to be partially or fully redrawn, e.g.
|
The contents of a widget often need to be partially or fully redrawn, e.g.
|
||||||
when another window is moved and uncovers part of the widget, or when the
|
when another window is moved and uncovers part of the widget, or when the
|
||||||
window containing it is resized. It is also possible to explicitly cause a
|
window containing it is resized. It is also possible to explicitly cause a
|
||||||
widget to be redrawn, by calling [`method@Gtk.Widget.queue_draw`]. GTK takes
|
widget to be redrawn, by calling [method@Gtk.Widget.queue_draw]. GTK takes
|
||||||
care of most of the details by providing a ready-to-use cairo context to the
|
care of most of the details by providing a ready-to-use cairo context to the
|
||||||
draw function.
|
draw function.
|
||||||
|
|
||||||
The following example shows how to use a draw function with [class@Gtk.DrawingArea].
|
The following example shows how to use a draw function with GtkDrawingArea.
|
||||||
It is a bit more complicated than the previous examples, since it also
|
It is a bit more complicated than the previous examples, since it also
|
||||||
demonstrates input event handling with event controllers.
|
demonstrates input event handling with event controllers.
|
||||||
|
|
||||||
@@ -415,9 +402,9 @@ resize_cb (GtkWidget *widget,
|
|||||||
if (gtk_native_get_surface (gtk_widget_get_native (widget)))
|
if (gtk_native_get_surface (gtk_widget_get_native (widget)))
|
||||||
{
|
{
|
||||||
surface = gdk_surface_create_similar_surface (gtk_native_get_surface (gtk_widget_get_native (widget)),
|
surface = gdk_surface_create_similar_surface (gtk_native_get_surface (gtk_widget_get_native (widget)),
|
||||||
CAIRO_CONTENT_COLOR,
|
CAIRO_CONTENT_COLOR,
|
||||||
gtk_widget_get_width (widget),
|
gtk_widget_get_width (widget),
|
||||||
gtk_widget_get_height (widget));
|
gtk_widget_get_height (widget));
|
||||||
|
|
||||||
/* Initialize the surface to white */
|
/* Initialize the surface to white */
|
||||||
clear_surface ();
|
clear_surface ();
|
||||||
@@ -703,16 +690,16 @@ gcc $( pkg-config --cflags gtk4 ) -o example-3 example-3.c $( pkg-config --libs
|
|||||||
|
|
||||||
Note that `GtkBuilder` can also be used to construct objects that are
|
Note that `GtkBuilder` can also be used to construct objects that are
|
||||||
not widgets, such as tree models, adjustments, etc. That is the reason
|
not widgets, such as tree models, adjustments, etc. That is the reason
|
||||||
the method we use here is called [`method@Gtk.Builder.get_object`] and
|
the method we use here is called [method@Gtk.Builder.get_object] and returns
|
||||||
returns a `GObject` instead of a `GtkWidget`.
|
a `GObject` instead of a `GtkWidget`.
|
||||||
|
|
||||||
Normally, you would pass a full path to [`method@Gtk.Builder.add_from_file`] to
|
Normally, you would pass a full path to [method@Gtk.Builder.add_from_file] to
|
||||||
make the execution of your program independent of the current directory.
|
make the execution of your program independent of the current directory.
|
||||||
A common location to install UI descriptions and similar data is
|
A common location to install UI descriptions and similar data is
|
||||||
`/usr/share/appname`.
|
`/usr/share/appname`.
|
||||||
|
|
||||||
It is also possible to embed the UI description in the source code as a
|
It is also possible to embed the UI description in the source code as a
|
||||||
string and use [`method@Gtk.Builder.add_from_string`] to load it. But keeping the
|
string and use [method@Gtk.Builder.add_from_string] to load it. But keeping the
|
||||||
UI description in a separate file has several advantages: It is then possible
|
UI description in a separate file has several advantages: It is then possible
|
||||||
to make minor adjustments to the UI without recompiling your program, and,
|
to make minor adjustments to the UI without recompiling your program, and,
|
||||||
more importantly, graphical UI editors such as [Glade](http://glade.gnome.org)
|
more importantly, graphical UI editors such as [Glade](http://glade.gnome.org)
|
||||||
@@ -775,17 +762,17 @@ main (int argc, char *argv[])
|
|||||||
```
|
```
|
||||||
|
|
||||||
All the application logic is in the application class, which is a subclass of
|
All the application logic is in the application class, which is a subclass of
|
||||||
`GtkApplication`. Our example does not yet have any interesting functionality.
|
GtkApplication. Our example does not yet have any interesting functionality.
|
||||||
All it does is open a window when it is activated without arguments, and open
|
All it does is open a window when it is activated without arguments, and open
|
||||||
the files it is given, if it is started with arguments.
|
the files it is given, if it is started with arguments.
|
||||||
|
|
||||||
To handle these two cases, we override the `activate()` vfunc, which gets
|
To handle these two cases, we override the activate() vfunc, which gets
|
||||||
called when the application is launched without commandline arguments, and
|
called when the application is launched without commandline arguments, and
|
||||||
the `open()` virtual function, which gets called when the application is
|
the `open()` virtual function, which gets called when the application is
|
||||||
launched with commandline arguments.
|
launched with commandline arguments.
|
||||||
|
|
||||||
To learn more about `GApplication` entry points, consult the GIO
|
To learn more about `GApplication` entry points, consult the GIO
|
||||||
[documentation](https://docs.gtk.org/gio/class.Application.html).
|
[documentation](https://developer.gnome.org/gio/stable/GApplication.html#GApplication.description).
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -854,8 +841,8 @@ example_app_new (void)
|
|||||||
```
|
```
|
||||||
|
|
||||||
Another important class that is part of the application support in GTK is
|
Another important class that is part of the application support in GTK is
|
||||||
[class@Gtk.ApplicationWindow]. It is typically subclassed as well. Our
|
`GtkApplicationWindow`. It is typically subclassed as well. Our subclass does
|
||||||
subclass does not do anything yet, so we will just get an empty window.
|
not do anything yet, so we will just get an empty window.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
@@ -920,10 +907,10 @@ and it accepts files as commandline arguments.
|
|||||||
|
|
||||||
### Populating the window
|
### Populating the window
|
||||||
|
|
||||||
In this step, we use a `GtkBuilder` template to associate a
|
In this step, we use a GtkBuilder template to associate a
|
||||||
`GtkBuilder` ui file with our application window class.
|
GtkBuilder ui file with our application window class.
|
||||||
|
|
||||||
Our simple ui file gives the window a title, and puts a `GtkStack`
|
Our simple ui file gives the window a title, and puts a GtkStack
|
||||||
widget as the main content.
|
widget as the main content.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
@@ -947,9 +934,9 @@ widget as the main content.
|
|||||||
|
|
||||||
To make use of this file in our application, we revisit our
|
To make use of this file in our application, we revisit our
|
||||||
`GtkApplicationWindow` subclass, and call
|
`GtkApplicationWindow` subclass, and call
|
||||||
[`method@Gtk.WidgetClass.set_template_from_resource`] from the class init
|
`gtk_widget_class_set_template_from_resource()` from the class init
|
||||||
function to set the ui file as template for this class. We also
|
function to set the ui file as template for this class. We also
|
||||||
add a call to [`method@Gtk.Widget.init_template`] in the instance init
|
add a call to `gtk_widget_init_template()` in the instance init
|
||||||
function to instantiate the template for each instance of our
|
function to instantiate the template for each instance of our
|
||||||
class.
|
class.
|
||||||
|
|
||||||
@@ -976,7 +963,7 @@ example_app_window_class_init (ExampleAppWindowClass *class)
|
|||||||
|
|
||||||
You may have noticed that we used the `_from_resource()` variant of the function
|
You may have noticed that we used the `_from_resource()` variant of the function
|
||||||
that sets a template. Now we need to use
|
that sets a template. Now we need to use
|
||||||
[GLib's resource functionality](https://docs.gtk.org/gio/struct.Resource.html)
|
[GLib's resource functionality](https://developer.gnome.org/gio/stable/GResource.html)
|
||||||
to include the ui file in the binary. This is commonly done by listing all resources
|
to include the ui file in the binary. This is commonly done by listing all resources
|
||||||
in a `.gresource.xml` file, such as this:
|
in a `.gresource.xml` file, such as this:
|
||||||
|
|
||||||
@@ -998,7 +985,7 @@ glib-compile-resources exampleapp.gresource.xml --target=resources.c --generate-
|
|||||||
```
|
```
|
||||||
|
|
||||||
The gnome module of the [Meson build system](https://mesonbuild.com)
|
The gnome module of the [Meson build system](https://mesonbuild.com)
|
||||||
provides the [`gnome.compile_resources()`](https://mesonbuild.com/Gnome-module.html#gnomecompile_resources)
|
provides the [gnome.compile_resources()](https://mesonbuild.com/Gnome-module.html#gnomecompile_resources)
|
||||||
method for this task.
|
method for this task.
|
||||||
|
|
||||||
Our application now looks like this:
|
Our application now looks like this:
|
||||||
@@ -1014,7 +1001,7 @@ To this end, we add a member to the struct of our application window subclass
|
|||||||
and keep a reference to the `GtkStack` there. The first member of the struct
|
and keep a reference to the `GtkStack` there. The first member of the struct
|
||||||
should be the parent type from which the class is derived. Here,
|
should be the parent type from which the class is derived. Here,
|
||||||
`ExampleAppWindow` is derived from `GtkApplicationWindow`. The
|
`ExampleAppWindow` is derived from `GtkApplicationWindow`. The
|
||||||
[`func@Gtk.widget_class_bind_template_child`] function arranges things so that after
|
`gtk_widget_class_bind_template_child()` function arranges things so that after
|
||||||
instantiating the template, the `stack` member of the struct will point to the
|
instantiating the template, the `stack` member of the struct will point to the
|
||||||
widget of the same name from the template.
|
widget of the same name from the template.
|
||||||
|
|
||||||
@@ -1094,7 +1081,7 @@ tell it to display information about our stack.
|
|||||||
|
|
||||||
The stack switcher gets all its information it needs to display tabs from
|
The stack switcher gets all its information it needs to display tabs from
|
||||||
the stack that it belongs to. Here, we are passing the label to show for
|
the stack that it belongs to. Here, we are passing the label to show for
|
||||||
each file as the last argument to the [`method@Gtk.Stack.add_titled`]
|
each file as the last argument to the [method@Gtk.Stack.add_titled]
|
||||||
function.
|
function.
|
||||||
|
|
||||||
Our application is beginning to take shape:
|
Our application is beginning to take shape:
|
||||||
@@ -1134,7 +1121,7 @@ resulting menu model with the menu button that we've added to the headerbar.
|
|||||||
Since menus work by activating GActions, we also have to add a suitable set
|
Since menus work by activating GActions, we also have to add a suitable set
|
||||||
of actions to our application.
|
of actions to our application.
|
||||||
|
|
||||||
Adding the actions is best done in the `startup()` vfunc, which is guaranteed
|
Adding the actions is best done in the startup() vfunc, which is guaranteed
|
||||||
to be called once for each primary application instance:
|
to be called once for each primary application instance:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
@@ -1192,7 +1179,7 @@ example_app_class_init (ExampleAppClass *class)
|
|||||||
|
|
||||||
Our preferences menu item does not do anything yet, but the Quit menu item
|
Our preferences menu item does not do anything yet, but the Quit menu item
|
||||||
is fully functional. Note that it can also be activated by the usual Ctrl-Q
|
is fully functional. Note that it can also be activated by the usual Ctrl-Q
|
||||||
shortcut. The shortcut was added with [`method@Gtk.Application.set_accels_for_action`].
|
shortcut. The shortcut was added with `gtk_application_set_accels_for_action()`.
|
||||||
|
|
||||||
The application menu looks like this:
|
The application menu looks like this:
|
||||||
|
|
||||||
@@ -1204,7 +1191,7 @@ A typical application will have a some preferences that should be remembered
|
|||||||
from one run to the next. Even for our simple example application, we may
|
from one run to the next. Even for our simple example application, we may
|
||||||
want to change the font that is used for the content.
|
want to change the font that is used for the content.
|
||||||
|
|
||||||
We are going to use [class@Gio.Settings] to store our preferences. `GSettings` requires
|
We are going to use `GSettings` to store our preferences. `GSettings` requires
|
||||||
a schema that describes our settings:
|
a schema that describes our settings:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
@@ -1231,9 +1218,10 @@ a schema that describes our settings:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Before we can make use of this schema in our application, we need to compile
|
Before we can make use of this schema in our application, we need to compile
|
||||||
it into the binary form that GSettings expects. GIO provides macros to do
|
it into the binary form that GSettings expects. GIO provides
|
||||||
this in Autotools-based projects, and the gnome module of the Meson build
|
[macros](https://developer.gnome.org/gio/2.36/ch31s06.html) to do this in
|
||||||
system provides the [`gnome.compile_schemas()`](https://mesonbuild.com/Gnome-module.html#gnomecompile_schemas)
|
autotools-based projects, and the gnome module of the Meson build system
|
||||||
|
provides the [gnome.compile_schemas()](https://mesonbuild.com/Gnome-module.html#gnomecompile_schemas)
|
||||||
method for this task.
|
method for this task.
|
||||||
|
|
||||||
Next, we need to connect our settings to the widgets that they are supposed
|
Next, we need to connect our settings to the widgets that they are supposed
|
||||||
@@ -1693,8 +1681,7 @@ What our application looks like now:
|
|||||||
Widgets and other objects have many useful properties.
|
Widgets and other objects have many useful properties.
|
||||||
|
|
||||||
Here we show some ways to use them in new and flexible ways, by wrapping
|
Here we show some ways to use them in new and flexible ways, by wrapping
|
||||||
them in actions with [class@Gio.PropertyAction] or by binding them with
|
them in actions with `GPropertyAction` or by binding them with `GBinding`.
|
||||||
[class@GObject.Binding].
|
|
||||||
|
|
||||||
To set this up, we add two labels to the header bar in our window template,
|
To set this up, we add two labels to the header bar in our window template,
|
||||||
named `lines_label` and `lines`, and bind them to struct members in the
|
named `lines_label` and `lines`, and bind them to struct members in the
|
||||||
|
@@ -1,57 +0,0 @@
|
|||||||
.. _gtk4-broadwayd(1):
|
|
||||||
|
|
||||||
==============
|
|
||||||
gtk4-broadwayd
|
|
||||||
==============
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
The Broadway display server
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
| **gtk4-broadwayd** [OPTIONS...] <DISPLAY>
|
|
||||||
| **gtk4-broadwayd** --port=PORT --address=ADDRESS <DISPLAY>
|
|
||||||
| **gtk4-broadwayd** --unixaddress=ADDRESS <DISPLAY>
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-broadwayd`` is a display server for the Broadway GDK backend. It allows
|
|
||||||
multiple GTK applications to display their windows in the same web browser, by
|
|
||||||
connecting to gtk4-broadwayd.
|
|
||||||
|
|
||||||
When using gtk4-broadwayd, specify the display number to use, prefixed with a
|
|
||||||
colon, similar to X. The default display number is 0.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
gtk4-broadwayd :5
|
|
||||||
|
|
||||||
|
|
||||||
Then point your web browser at ``http://127.0.0.1:8085``.
|
|
||||||
|
|
||||||
Start your applications like this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
GDK_BACKEND=broadway BROADWAY_DISPLAY=:5 gtk4-demo
|
|
||||||
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``--port PORT``
|
|
||||||
|
|
||||||
Use the given ``PORT`` for the HTTP connection, instead of the default ``8080 + (DISPLAY - 1)``.
|
|
||||||
|
|
||||||
``--address ADDRESS``
|
|
||||||
|
|
||||||
Use the given ``address`` for the HTTP connection, instead of the default ``http://127.0.0.1``.
|
|
||||||
|
|
||||||
``--unixsocket ADDRESS``
|
|
||||||
|
|
||||||
Use the given ``address`` as the unix domain socket address. This option
|
|
||||||
overrides ``--address`` and ``--port``, and it is available only on Unix-like
|
|
||||||
systems.
|
|
84
docs/reference/gtk/gtk4-broadwayd.xml
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-broadwayd">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-broadwayd</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Alexander</firstname>
|
||||||
|
<surname>Larsson</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-broadwayd</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-broadwayd</refname>
|
||||||
|
<refpurpose>Broadway display server</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-broadwayd</command>
|
||||||
|
<arg choice="opt">--port <replaceable>PORT</replaceable></arg>
|
||||||
|
<arg choice="opt">--address <replaceable>ADDRESS</replaceable></arg>
|
||||||
|
<arg choice="opt">--unixsocket <replaceable>ADDRESS</replaceable></arg>
|
||||||
|
<arg choice="opt"><replaceable>:DISPLAY</replaceable></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-broadwayd</command> is a display server for the Broadway
|
||||||
|
GDK backend. It allows multiple GTK applications to display their
|
||||||
|
windows in the same web browser, by connecting to gtk4-broadwayd.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
When using gtk4-broadwayd, specify the display number to use, prefixed
|
||||||
|
with a colon, similar to X. The default display number is 0.
|
||||||
|
<programlisting>
|
||||||
|
gtk4-broadwayd :5
|
||||||
|
</programlisting>
|
||||||
|
Then point your web browser at <literal>http://127.0.0.1:8085</literal>.
|
||||||
|
Start your applications like this:
|
||||||
|
<programlisting>
|
||||||
|
GDK_BACKEND=broadway BROADWAY_DISPLAY=:5 gtk4-demo
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>--port</term>
|
||||||
|
<listitem><para>Use <replaceable>PORT</replaceable> as the HTTP
|
||||||
|
port, instead of the default 8080 + (<replaceable>DISPLAY</replaceable> - 1).
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>--address</term>
|
||||||
|
<listitem><para>Use <replaceable>ADDRESS</replaceable> as the HTTP
|
||||||
|
address, instead of the default <literal>http://127.0.0.1:<replaceable>PORT</replaceable></literal>.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>--unixsocket</term>
|
||||||
|
<listitem><para>Use <replaceable>ADDRESS</replaceable> as the unix domain socket
|
||||||
|
address. This option overrides <literal>--address</literal> and <literal>--port</literal>.
|
||||||
|
It is available only on Unix-like systems.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,85 +0,0 @@
|
|||||||
.. _gtk4-builder-tool(1):
|
|
||||||
|
|
||||||
=================
|
|
||||||
gtk4-builder-tool
|
|
||||||
=================
|
|
||||||
|
|
||||||
-----------------------
|
|
||||||
GtkBuilder File Utility
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
| **gtk4-builder-tool** <COMMAND> [OPTIONS...] <FILE>
|
|
||||||
|
|
|
||||||
| **gtk4-builder-tool** validate <FILE>
|
|
||||||
| **gtk4-builder-tool** enumerate <FILE>
|
|
||||||
| **gtk4-builder-tool** simplify [OPTIONS...] <FILE>
|
|
||||||
| **gtk4-builder-tool** preview [OPTIONS...] <FILE>
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-builder-tool`` can perform various operations on GtkBuilder UI definition
|
|
||||||
files.
|
|
||||||
|
|
||||||
COMMANDS
|
|
||||||
--------
|
|
||||||
|
|
||||||
Validation
|
|
||||||
^^^^^^^^^^
|
|
||||||
|
|
||||||
The ``validate`` command validates the given UI definition file and reports
|
|
||||||
errors to ``stderr``.
|
|
||||||
|
|
||||||
Enumeration
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
The ``enumerate`` command lists all the named objects that are present in the UI
|
|
||||||
definition file.
|
|
||||||
|
|
||||||
Preview
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
The ``preview`` command displays the UI dfinition file.
|
|
||||||
|
|
||||||
This command accepts options to specify the ID of the toplevel object and a CSS
|
|
||||||
file to use.
|
|
||||||
|
|
||||||
``--id=ID``
|
|
||||||
|
|
||||||
The ID of the object to preview. If not specified, gtk4-builder-tool will
|
|
||||||
choose a suitable object on its own.
|
|
||||||
|
|
||||||
``--css=FILE``
|
|
||||||
|
|
||||||
Load style information from the given CSS file.
|
|
||||||
|
|
||||||
Simplification
|
|
||||||
^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
The ``simplify`` command simplifies the UI definition file by removing
|
|
||||||
properties that are set to their default values and writes the resulting XML to
|
|
||||||
the standard output, or back to the input file.
|
|
||||||
|
|
||||||
When the ``--3to4`` option is specified, the ``simplify`` command interprets the
|
|
||||||
input as a GTK 3 UI definuition file and attempts to convert it to GTK 4
|
|
||||||
equivalents. It performs various conversions, such as renaming properties,
|
|
||||||
translating child properties to layout properties, rewriting the setup for
|
|
||||||
GtkNotebook, GtkStack, GtkAssistant or changing toolbars into boxes.
|
|
||||||
|
|
||||||
You should always test the modified UI definition files produced by
|
|
||||||
gtk4-builder-tool before using them in production.
|
|
||||||
|
|
||||||
Note in particular that the conversion done with ``--3to4`` is meant as a
|
|
||||||
starting point for a port from GTK 3 to GTK 4. It is expected that you will have
|
|
||||||
to do manual fixups after the initial conversion.
|
|
||||||
|
|
||||||
``--replace``
|
|
||||||
|
|
||||||
Write the content back to the UI definition file instead of using the standard
|
|
||||||
output.
|
|
||||||
|
|
||||||
``--3to4``
|
|
||||||
|
|
||||||
Transform a GTK 3 UI definition file to the equivalent GTK 4 definitions.
|
|
110
docs/reference/gtk/gtk4-builder-tool.xml
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-builder-tool">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-builder-tool</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Matthias</firstname>
|
||||||
|
<surname>Clasen</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-builder-tool</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-builder-tool</refname>
|
||||||
|
<refpurpose>GtkBuilder file utility</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-builder-tool</command>
|
||||||
|
<arg choice="opt"><replaceable>COMMAND</replaceable></arg>
|
||||||
|
<arg choice="opt" rep="repeat"><replaceable>OPTION</replaceable></arg>
|
||||||
|
<arg choice="plain"><replaceable>FILE</replaceable></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-builder-tool</command> can perform various operations
|
||||||
|
on GtkBuilder .ui files.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <option>validate</option> command validates the .ui file and reports
|
||||||
|
errors to stderr.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <option>enumerate</option> command lists all the named objects that
|
||||||
|
are created in the .ui file.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <option>preview</option> command displays the .ui file. This command
|
||||||
|
accepts options to specify the ID of the toplevel object and a .css file
|
||||||
|
to use.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The <option>simplify</option> command simplifies the .ui file by removing
|
||||||
|
properties that are set to their default values and writes the resulting XML
|
||||||
|
to stdout, or back to the input file.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
When the <option>--3to4</option> is specified, <option>simplify</option>
|
||||||
|
interprets the input as a GTK 3 ui file and attempts to convert it to GTK 4
|
||||||
|
equivalents. It performs various conversions, such as renaming properties,
|
||||||
|
translating child properties to layout properties, rewriting the setup for
|
||||||
|
GtkNotebook, GtkStack, GtkAssistant or changing toolbars into boxes.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
You should always test the modified .ui files produced by gtk4-builder-tool
|
||||||
|
before using them in production.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Note in particular that the conversion
|
||||||
|
done with <option>--3to4</option> is meant as a starting point for a port
|
||||||
|
from GTK 3 to GTK 4. It is expected that you will have to do manual fixups
|
||||||
|
after the initial conversion.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Simplify Options</title>
|
||||||
|
<para>The <option>simplify</option> command accepts the following options:</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--replace</option></term>
|
||||||
|
<listitem><para>Write the content back to the .ui file instead of stdout.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--3to4</option></term>
|
||||||
|
<listitem><para>Transform a GTK 3 ui file to GTK 4</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Preview Options</title>
|
||||||
|
<para>The <option>preview</option> command accepts the following options:</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--id=<arg choice="plain">ID</arg></option></term>
|
||||||
|
<listitem><para>The ID of the object to preview. If not specified,
|
||||||
|
gtk4-builder-tool will choose a suitable object on its own.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--css=<arg choice="plain">FILE</arg></option></term>
|
||||||
|
<listitem><para>Load style information from the given .css file.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,22 +0,0 @@
|
|||||||
.. _gtk4-demo-application(1):
|
|
||||||
|
|
||||||
=====================
|
|
||||||
gtk4-demo-application
|
|
||||||
=====================
|
|
||||||
|
|
||||||
--------------------------
|
|
||||||
Demonstrate GtkApplication
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
| **gtk4-demo-application**
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-demo-application`` is an example application used by ``gtk4-demo``.
|
|
||||||
|
|
||||||
There is no need to call it manually.
|
|
44
docs/reference/gtk/gtk4-demo-application.xml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-demo-application">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-demo-application</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Matthias</firstname>
|
||||||
|
<surname>Clasen</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-demo-application</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-demo-application</refname>
|
||||||
|
<refpurpose>Demonstrate GtkApplication</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-demo-application</command>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-demo-application</command> is an example application
|
||||||
|
used by <command>gtk4-demo</command>. There is no need to call it
|
||||||
|
manually.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,48 +0,0 @@
|
|||||||
.. _gtk4-demo(1):
|
|
||||||
|
|
||||||
=========
|
|
||||||
gtk4-demo
|
|
||||||
=========
|
|
||||||
|
|
||||||
-----------------------
|
|
||||||
Demonstrate GTK widgets
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-demo** [OPTIONS...]
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-demo`` is a collection of examples.
|
|
||||||
|
|
||||||
Its purpose is to demonstrate many GTK widgets in a form that is useful to
|
|
||||||
application developers.
|
|
||||||
|
|
||||||
The application shows the source code for each example, as well as other used
|
|
||||||
resources, such as UI description files and image assets.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``-h, --help``
|
|
||||||
|
|
||||||
Show help options.
|
|
||||||
|
|
||||||
``--version``
|
|
||||||
|
|
||||||
Show program version.
|
|
||||||
|
|
||||||
``--list``
|
|
||||||
|
|
||||||
List available examples.
|
|
||||||
|
|
||||||
``--run EXAMPLE``
|
|
||||||
|
|
||||||
Run the named example. Use ``--list`` to see the available examples.
|
|
||||||
|
|
||||||
``--autoquit``
|
|
||||||
|
|
||||||
Quit after a short timeout. This is intended for use with ``--run``, e.g. when profiling.
|
|
81
docs/reference/gtk/gtk4-demo.xml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-demo">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-demo</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Matthias</firstname>
|
||||||
|
<surname>Clasen</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-demo</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-demo</refname>
|
||||||
|
<refpurpose>Demonstrate GTK widgets</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-demo</command>
|
||||||
|
<arg choice="opt">--help</arg>
|
||||||
|
<arg choice="opt">--version</arg>
|
||||||
|
<arg choice="opt">--list</arg>
|
||||||
|
<arg choice="opt">--run <replaceable>EXAMPLE</replaceable></arg>
|
||||||
|
<arg choice="opt">--autoquit</arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-demo</command> is a collection of examples.
|
||||||
|
Its purpose is to demonstrate many GTK widgets in a form
|
||||||
|
that is useful to application developers.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The application shows the source code for each example, as well as
|
||||||
|
other used resources, such as ui files and icons.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<para>The following options are understood:</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-h</option>, <option>--help</option></term>
|
||||||
|
<listitem><para>Show help options</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--version</option></term>
|
||||||
|
<listitem><para>Show program version</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--list</option></term>
|
||||||
|
<listitem><para>List available examples.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-run <replaceable>EXAMPLE</replaceable></option></term>
|
||||||
|
<listitem><para>Run the named example. Use <option>--list</option> to
|
||||||
|
see the available examples.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--autoquit</option></term>
|
||||||
|
<listitem><para>Quit after a short timeout. This is intended for use
|
||||||
|
with <option>--run</option>, e.g. when profiling.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,40 +0,0 @@
|
|||||||
.. _gtk4-encode-symbolic-svg(1):
|
|
||||||
|
|
||||||
========================
|
|
||||||
gtk4-encode-symbolic-svg
|
|
||||||
========================
|
|
||||||
|
|
||||||
--------------------------------
|
|
||||||
Symbolic icon conversion utility
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-encode-symbolic-svg** [OPTIONS...] <PATH> <WIDTH>x<HEIGHT>
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-encode-symbolic-svg`` converts symbolic SVG icons into specially prepared
|
|
||||||
PNG files. GTK can load and recolor these PNGs, just like original SVGs, but
|
|
||||||
loading them is much faster.
|
|
||||||
|
|
||||||
``PATH`` is the name of a symbolic SVG file, ``WIDTH`` x ``HEIGHT`` are the
|
|
||||||
desired dimensions for the generated PNG file.
|
|
||||||
|
|
||||||
To distinguish them from ordinary PNGs, the generated files have the extension
|
|
||||||
``.symbolic.png``.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``-o, --output DIRECTORY``
|
|
||||||
|
|
||||||
Write png files to ``DIRECTORY`` instead of the current working directory.
|
|
||||||
|
|
||||||
``--debug``
|
|
||||||
|
|
||||||
Generate PNG files of the various channels during the conversion. If these
|
|
||||||
files are not monochrome green, they are often helpful in pinpointing the
|
|
||||||
problematic parts of the source SVG.
|
|
74
docs/reference/gtk/gtk4-encode-symbolic-svg.xml
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-encode-symbolic-svg">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-encode-symbolic-svg</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Alexander</firstname>
|
||||||
|
<surname>Larsson</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-encode-symbolic-svg</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-encode-symbolic-svg</refname>
|
||||||
|
<refpurpose>Symbolic icon conversion utility</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-encode-symbolic-svg</command>
|
||||||
|
<arg choice="opt">OPTION...</arg>
|
||||||
|
<arg choice="plain"><replaceable>PATH</replaceable></arg>
|
||||||
|
<arg choice="plain"><replaceable>WIDTH</replaceable>x<replaceable>HEIGHT</replaceable></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-encode-symbolic-svg</command> converts symbolic svg icons into
|
||||||
|
specially prepared png files. GTK can load and recolor these pngs, just like
|
||||||
|
original svgs, but loading them is much faster.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<replaceable>PATH</replaceable> is the name of a symbolic svg file,
|
||||||
|
<replaceable>WIDTH</replaceable>x<replaceable>HEIGHT</replaceable> are the
|
||||||
|
desired dimensions for the generated png file.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To distinguish them from ordinary pngs, the generated files have the extension
|
||||||
|
<filename>.symbolic.png</filename>.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>-o <replaceable>DIRECTORY</replaceable></term>
|
||||||
|
<term>--output <replaceable>DIRECTORY</replaceable></term>
|
||||||
|
<listitem><para>Write png files to <replaceable>DIRECTORY</replaceable>
|
||||||
|
instead of the current working directory.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>--debug</term>
|
||||||
|
<listitem><para>Generate png files of the various channels during
|
||||||
|
the conversion. If these files are not monochrome green, they
|
||||||
|
are often helpful in pinpointing the problematic parts of
|
||||||
|
the source svg.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,28 +0,0 @@
|
|||||||
.. _gtk4-icon-browser(1):
|
|
||||||
|
|
||||||
=================
|
|
||||||
gtk4-icon-browser
|
|
||||||
=================
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
List themed icons
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-icon-browser** [OPTIONS...]
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-icon-browser`` is a utility to explore the icons in the current icon
|
|
||||||
theme. It shows icons in various sizes, their symbolic variants where available,
|
|
||||||
as well as a description of the icon and its context.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``-h, --help``
|
|
||||||
|
|
||||||
Show the application help.
|
|
55
docs/reference/gtk/gtk4-icon-browser.xml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-icon-browser">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-icon-browser</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Matthias</firstname>
|
||||||
|
<surname>Clasen</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-icon-browser</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-icon-browser</refname>
|
||||||
|
<refpurpose>List themed icons</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-icon-browser</command>
|
||||||
|
<arg choice="opt">--help</arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-icon-browser</command> is a utility to explore the icons
|
||||||
|
in the current icon theme. It shows icons in various sizes, their symbolic
|
||||||
|
variants where available, as well as a description of the icon and its context.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<para>The following options are understood:</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-h</option>, <option>--help</option></term>
|
||||||
|
<listitem><para>Show help options</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,50 +0,0 @@
|
|||||||
.. _gtk4-launch(1):
|
|
||||||
|
|
||||||
===========
|
|
||||||
gtk4-launch
|
|
||||||
===========
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
Launch an application
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-launch** [OPTIONS...] <APPLICATION> [URI...]
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-launch`` launches an application using the given name. The application is
|
|
||||||
started with proper startup notification on a default display, unless specified
|
|
||||||
otherwise.
|
|
||||||
|
|
||||||
``gtk4-launch`` takes at least one argument, the name of the application to
|
|
||||||
launch. The name should match application desktop file name, as residing in the
|
|
||||||
applications subdirectories of the XDG data directories, with or without the
|
|
||||||
``.desktop`` suffix.
|
|
||||||
|
|
||||||
If called with more than one argument, the rest of them besides the application
|
|
||||||
name are considered URI locations and are passed as arguments to the launched
|
|
||||||
application.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``-?, -h, --help``
|
|
||||||
|
|
||||||
Print the command's help and exit.
|
|
||||||
|
|
||||||
``--version``
|
|
||||||
|
|
||||||
Print the command's version and exit.
|
|
||||||
|
|
||||||
ENVIRONMENT
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Some environment variables affect the behavior of ``gtk4-launch``:
|
|
||||||
|
|
||||||
``XDG_DATA_HOME, XDG_DATA_DIRS``
|
|
||||||
|
|
||||||
The environment variables specifying the XDG data directories.
|
|
74
docs/reference/gtk/gtk4-launch.xml
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-launch">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-launch</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Tomáš</firstname>
|
||||||
|
<surname>Bžatek</surname>
|
||||||
|
<email>tbzatek@redhat.com</email>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-launch</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-launch</refname>
|
||||||
|
<refpurpose>Launch an application</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-launch</command>
|
||||||
|
<arg choice="opt" rep="repeat">OPTION</arg>
|
||||||
|
<arg choice="plain">APPLICATION</arg>
|
||||||
|
<arg choice="opt" rep="repeat">URI</arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-launch</command> launches an application using the given name.
|
||||||
|
The application is started with proper startup notification on a default
|
||||||
|
display, unless specified otherwise.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-launch</command> takes at least one argument, the name of
|
||||||
|
the application to launch. The name should match application desktop file name,
|
||||||
|
as residing in /usr/share/application, with or without the '.desktop' suffix.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
If called with more than one argument, the rest of them besides the application
|
||||||
|
name are considered URI locations and are passed as arguments to the launched
|
||||||
|
application.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<para>The following options are understood:</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-?</option>, <option>--help</option></term>
|
||||||
|
<listitem><para>Prints a short help text and exits.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--version</option></term>
|
||||||
|
<listitem><para>Prints the program version and exits.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,21 +0,0 @@
|
|||||||
.. _gtk4-query-settings(1):
|
|
||||||
|
|
||||||
===================
|
|
||||||
gtk4-query-settings
|
|
||||||
===================
|
|
||||||
|
|
||||||
------------------------------------
|
|
||||||
Print name and value of GTK settings
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-query-settings** [PATTERN]
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-query-settings`` prints both name and value of all properties available
|
|
||||||
in the ``GtkSettings`` class. Optionally, you can filter which properties to
|
|
||||||
list by specifying a ``PATTERN``.
|
|
45
docs/reference/gtk/gtk4-query-settings.xml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-query-settings">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-query-settings</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Timm</firstname>
|
||||||
|
<surname>Bäder</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-query-settings</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-query-settings</refname>
|
||||||
|
<refpurpose>Utility to print name and value of all GtkSettings properties</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-query-settings</command>
|
||||||
|
<arg choice="opt"><replaceable>PATTERN</replaceable></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-query-settings</command> prints both name and value of all properties
|
||||||
|
available in the GtkSettings class. Optionally, you can filter which properties
|
||||||
|
to list by specifying a PATTERN.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,65 +0,0 @@
|
|||||||
.. _gtk4-update-icon-cache(1):
|
|
||||||
|
|
||||||
======================
|
|
||||||
gtk4-update-icon-cache
|
|
||||||
======================
|
|
||||||
|
|
||||||
--------------------------
|
|
||||||
Icon theme caching utility
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-update-icon-cache** [OPTIONS...] <PATH>
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-update-icon-cache`` creates ``mmap(2)``-able cache files for icon themes.
|
|
||||||
|
|
||||||
It expects to be given the ``PATH`` to an icon theme directory containing an
|
|
||||||
``index.theme``, e.g. ``/usr/share/icons/hicolor``, and writes a
|
|
||||||
``icon-theme.cache`` containing cached information about the icons in the
|
|
||||||
directory tree below the given directory.
|
|
||||||
|
|
||||||
GTK can use the cache files created by ``gtk4-update-icon-cache`` to avoid a lot
|
|
||||||
of system call and disk seek overhead when the application starts. Since the
|
|
||||||
format of the cache files allows them to be shared across multiple processes,
|
|
||||||
for instance using the POSIX ``mmap(2)`` system call, the overall memory
|
|
||||||
consumption is reduced as well.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``-f, --force``
|
|
||||||
|
|
||||||
Overwrite an existing cache file even if it appears to be up-to-date.
|
|
||||||
|
|
||||||
``-t, --ignore-theme-index``
|
|
||||||
|
|
||||||
Don't check for the existence of ``index.theme`` in the icon theme directory.
|
|
||||||
Without this option, ``gtk4-update-icon-cache`` refuses to create an icon
|
|
||||||
cache in a directory which does not appear to be the toplevel directory of an
|
|
||||||
icon theme.
|
|
||||||
|
|
||||||
``-i, --index-only``
|
|
||||||
|
|
||||||
Don't include image data in the cache.
|
|
||||||
|
|
||||||
``--include-image-data``
|
|
||||||
|
|
||||||
Include image data in the cache.
|
|
||||||
|
|
||||||
``-c, --source <NAME>``
|
|
||||||
|
|
||||||
Output a C header file declaring a constant ``NAME`` with the contents of the
|
|
||||||
icon cache.
|
|
||||||
|
|
||||||
``-q, --quiet``
|
|
||||||
|
|
||||||
Turn off verbose output.
|
|
||||||
|
|
||||||
``-v, --validate``
|
|
||||||
|
|
||||||
Validate existing icon cache.
|
|
123
docs/reference/gtk/gtk4-update-icon-cache.xml
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-update-icon-cache">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-update-icon-cache</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Matthias</firstname>
|
||||||
|
<surname>Clasen</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-update-icon-cache</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-update-icon-cache</refname>
|
||||||
|
<refpurpose>Icon theme caching utility</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-update-icon-cache</command>
|
||||||
|
<arg choice="opt">--force</arg>
|
||||||
|
<arg choice="opt">--ignore-theme-index</arg>
|
||||||
|
<group>
|
||||||
|
<arg choice="plain">--index-only</arg>
|
||||||
|
<arg choice="plain">--include-image-data</arg>
|
||||||
|
</group>
|
||||||
|
<arg choice="opt">--source <arg choice="plain"><replaceable>NAME</replaceable></arg></arg>
|
||||||
|
<arg choice="opt">--quiet</arg>
|
||||||
|
<arg choice="opt">--validate</arg>
|
||||||
|
<arg choice="plain"><replaceable>PATH</replaceable></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-update-icon-cache</command> creates mmapable cache
|
||||||
|
files for icon themes.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
It expects to be given the <replaceable>PATH</replaceable> to an icon theme
|
||||||
|
directory containing an <filename>index.theme</filename>, e.g.
|
||||||
|
<filename>/usr/share/icons/hicolor</filename>, and writes a
|
||||||
|
<filename>icon-theme.cache</filename> containing cached information about
|
||||||
|
the icons in the directory tree below the given directory.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
GTK can use the cache files created by <command>gtk4-update-icon-cache</command>
|
||||||
|
to avoid a lot of system call and disk seek overhead when the application
|
||||||
|
starts. Since the format of the cache files allows them to be shared across
|
||||||
|
multiple processes, for instance using the POSIX <command>mmap()</command> system
|
||||||
|
call, the overall memory consumption is reduced as well.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>--force</term>
|
||||||
|
<term>-f</term>
|
||||||
|
<listitem><para>Overwrite an existing cache file even if it appears to be
|
||||||
|
up-to-date.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>--ignore-theme-index</term>
|
||||||
|
<term>-t</term>
|
||||||
|
<listitem><para>Don't check for the existence of <filename>index.theme</filename>
|
||||||
|
in the icon theme directory. Without this option, <command>gtk4-update-icon-cache</command>
|
||||||
|
refuses to create an icon cache in a directory which does not appear to
|
||||||
|
be the toplevel directory of an icon theme.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>--index-only</term>
|
||||||
|
<term>-i</term>
|
||||||
|
<listitem><para>Don't include image data in the cache.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>--include-image-data</term>
|
||||||
|
<listitem><para>Include image data in the cache.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>--source</term>
|
||||||
|
<term>-c</term>
|
||||||
|
<listitem><para>Output a C header file declaring a constant
|
||||||
|
<replaceable>NAME</replaceable> with the contents of the icon
|
||||||
|
cache.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>--quiet</term>
|
||||||
|
<term>-q</term>
|
||||||
|
<listitem><para>Turn off verbose output.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>--validate</term>
|
||||||
|
<term>-v</term>
|
||||||
|
<listitem><para>Validate existing icon cache.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -1,34 +0,0 @@
|
|||||||
.. _gtk4-widget-factory(1):
|
|
||||||
|
|
||||||
===================
|
|
||||||
gtk4-widget-factory
|
|
||||||
===================
|
|
||||||
|
|
||||||
-------------------------------
|
|
||||||
Showcase GTK widgets and styles
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
--------
|
|
||||||
|
|
||||||
| **gtk4-widget-factory** [OPTIONS...]
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
``gtk4-widget-factory`` is a collection of examples.
|
|
||||||
|
|
||||||
Its purpose is to demonstrate many GTK widgets in a form that is useful to GTK theme developers.
|
|
||||||
|
|
||||||
The application shows widgets in different, typical combinations and states.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-------
|
|
||||||
|
|
||||||
``-h, --help``
|
|
||||||
|
|
||||||
Show the application help.
|
|
||||||
|
|
||||||
``--version``
|
|
||||||
|
|
||||||
Show the application version.
|
|
63
docs/reference/gtk/gtk4-widget-factory.xml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<refentry id="gtk4-widget-factory">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>gtk4-widget-factory</title>
|
||||||
|
<productname>GTK</productname>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Matthias</firstname>
|
||||||
|
<surname>Clasen</surname>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>gtk4-widget-factory</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>gtk4-widget-factory</refname>
|
||||||
|
<refpurpose>Demonstrate GTK widgets</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>gtk4-widget-factory</command>
|
||||||
|
<arg choice="opt">--help</arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1><title>Description</title>
|
||||||
|
<para>
|
||||||
|
<command>gtk4-widget-factory</command> is a collection of examples.
|
||||||
|
Its purpose is to demonstrate many GTK widgets in a form
|
||||||
|
that is useful to GTK theme developers.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The application shows widgets in different, typical combinations
|
||||||
|
and states.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1><title>Options</title>
|
||||||
|
<para>The following options are understood:</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-h</option>, <option>--help</option></term>
|
||||||
|
<listitem><para>Show help options</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--version</option></term>
|
||||||
|
<listitem><para>Show program version</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@@ -14,7 +14,7 @@ search_index = true
|
|||||||
[dependencies."GObject-2.0"]
|
[dependencies."GObject-2.0"]
|
||||||
name = "GObject"
|
name = "GObject"
|
||||||
description = "The base type system library"
|
description = "The base type system library"
|
||||||
docs_url = "https://docs.gtk.org/gobject/"
|
docs_url = "https://developer.gnome.org/gobject/stable"
|
||||||
|
|
||||||
[dependencies."Graphene-1.0"]
|
[dependencies."Graphene-1.0"]
|
||||||
name = "Graphene"
|
name = "Graphene"
|
||||||
@@ -57,7 +57,6 @@ content_files = [
|
|||||||
"initialization.md",
|
"initialization.md",
|
||||||
"actions.md",
|
"actions.md",
|
||||||
"input-handling.md",
|
"input-handling.md",
|
||||||
"drag-and-drop.md",
|
|
||||||
"drawing-model.md",
|
"drawing-model.md",
|
||||||
"css-overview.md",
|
"css-overview.md",
|
||||||
"css-properties.md",
|
"css-properties.md",
|
||||||
|
@@ -137,14 +137,6 @@ capture phase, and key bindings locally, during the target phase.
|
|||||||
Under the hood, all shortcuts are represented as instances of `GtkShortcut`,
|
Under the hood, all shortcuts are represented as instances of `GtkShortcut`,
|
||||||
and they are managed by `GtkShortcutController`.
|
and they are managed by `GtkShortcutController`.
|
||||||
|
|
||||||
## Text input
|
|
||||||
|
|
||||||
When actual text input is needed (i.e. not just keyboard shortcuts),
|
|
||||||
input method support can be added to a widget by connecting an input
|
|
||||||
method context and listening to its `::commit` signal. To create a new
|
|
||||||
input method context, use gtk_im_multicontext_new(), to provide it with
|
|
||||||
input, use gtk_event_controller_key_set_im_context().
|
|
||||||
|
|
||||||
## Event controllers and gestures
|
## Event controllers and gestures
|
||||||
|
|
||||||
Event controllers are standalone objects that can perform
|
Event controllers are standalone objects that can perform
|
||||||
|
@@ -27,25 +27,21 @@ expand_content_md_files = [
|
|||||||
'visual_index.md'
|
'visual_index.md'
|
||||||
]
|
]
|
||||||
|
|
||||||
if get_option('gtk_doc')
|
gtk4_toml = configure_file(input: 'gtk4.toml.in', output: 'gtk4.toml', configuration: toml_conf)
|
||||||
gtk4_toml = configure_file(
|
|
||||||
input: 'gtk4.toml.in',
|
|
||||||
output: 'gtk4.toml',
|
|
||||||
configuration: toml_conf,
|
|
||||||
install: true,
|
|
||||||
install_dir: docs_dir / 'gtk4',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if get_option('gtk_doc')
|
||||||
custom_target('gtk4-doc',
|
custom_target('gtk4-doc',
|
||||||
input: [ gtk4_toml, gtk_gir[0] ],
|
input: [ gtk4_toml, gtk_gir[0] ],
|
||||||
output: 'gtk4',
|
output: 'gtk4',
|
||||||
command: [
|
command: [
|
||||||
gidocgen,
|
gidocgen,
|
||||||
'generate',
|
'generate',
|
||||||
gidocgen_common_args,
|
'--quiet',
|
||||||
|
'--fatal-warnings',
|
||||||
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
|
||||||
'--config=@INPUT0@',
|
'--config=@INPUT0@',
|
||||||
'--output-dir=@OUTPUT@',
|
'--output-dir=@OUTPUT@',
|
||||||
|
'--no-namespace-dir',
|
||||||
'--content-dir=@0@'.format(meson.current_source_dir()),
|
'--content-dir=@0@'.format(meson.current_source_dir()),
|
||||||
'@INPUT1@',
|
'@INPUT1@',
|
||||||
],
|
],
|
||||||
@@ -57,15 +53,24 @@ if get_option('gtk_doc')
|
|||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
rst2man = find_program('rst2man', required: false)
|
xsltproc = find_program('xsltproc', required: false)
|
||||||
if get_option('man-pages') and not rst2man.found()
|
if get_option('man-pages') and not xsltproc.found()
|
||||||
error('No rst2man found, but man pages were explicitly enabled')
|
error('No xsltproc found, but man pages were explicitly enabled')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get_option('man-pages') and rst2man.found()
|
if get_option('man-pages') and xsltproc.found()
|
||||||
rst_files = [
|
xlstproc_flags = [
|
||||||
[ 'gtk4-broadwayd', '1' ],
|
'--nonet',
|
||||||
[ 'gtk4-builder-tool', '1' ],
|
'--stringparam', 'man.output.quietly', '1',
|
||||||
|
'--stringparam', 'funcsynopsis.style', 'ansi',
|
||||||
|
'--stringparam', 'man.th.extra1.suppress', '1',
|
||||||
|
'--stringparam', 'man.authors.section.enabled', '0',
|
||||||
|
'--stringparam', 'man.copyright.section.enabled', '0',
|
||||||
|
]
|
||||||
|
|
||||||
|
man_files = [
|
||||||
|
[ 'gtk4-broadwayd', '1', ],
|
||||||
|
[ 'gtk4-builder-tool', '1', ],
|
||||||
[ 'gtk4-encode-symbolic-svg', '1', ],
|
[ 'gtk4-encode-symbolic-svg', '1', ],
|
||||||
[ 'gtk4-launch', '1', ],
|
[ 'gtk4-launch', '1', ],
|
||||||
[ 'gtk4-query-settings', '1', ],
|
[ 'gtk4-query-settings', '1', ],
|
||||||
@@ -73,7 +78,7 @@ if get_option('man-pages') and rst2man.found()
|
|||||||
]
|
]
|
||||||
|
|
||||||
if get_option('demos')
|
if get_option('demos')
|
||||||
rst_files += [
|
man_files += [
|
||||||
[ 'gtk4-demo', '1', ],
|
[ 'gtk4-demo', '1', ],
|
||||||
[ 'gtk4-demo-application', '1', ],
|
[ 'gtk4-demo-application', '1', ],
|
||||||
[ 'gtk4-widget-factory', '1', ],
|
[ 'gtk4-widget-factory', '1', ],
|
||||||
@@ -81,25 +86,21 @@ if get_option('man-pages') and rst2man.found()
|
|||||||
]
|
]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
rst2man_flags = [
|
foreach man: man_files
|
||||||
'--syntax-highlight=none',
|
man_name = man.get(0)
|
||||||
]
|
man_section = man.get(1, '1')
|
||||||
|
custom_target('@0@.@1@'.format(man_name, man_section),
|
||||||
foreach rst: rst_files
|
input: '@0@.xml'.format(man_name),
|
||||||
man_name = rst[0]
|
|
||||||
man_section = rst.get(1, '1')
|
|
||||||
|
|
||||||
custom_target('man-@0@'.format(man_name),
|
|
||||||
input: '@0@.rst'.format(man_name),
|
|
||||||
output: '@0@.@1@'.format(man_name, man_section),
|
output: '@0@.@1@'.format(man_name, man_section),
|
||||||
command: [
|
command: [
|
||||||
rst2man,
|
xsltproc,
|
||||||
rst2man_flags,
|
xlstproc_flags,
|
||||||
|
'-o', '@OUTPUT@',
|
||||||
|
'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
|
||||||
'@INPUT@',
|
'@INPUT@',
|
||||||
],
|
],
|
||||||
capture: true,
|
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: get_option('mandir') / 'man@0@'.format(man_section),
|
install_dir: join_paths(get_option('mandir'), 'man@0@'.format(man_section)),
|
||||||
)
|
)
|
||||||
endforeach
|
endforeach
|
||||||
endif
|
endif
|
||||||
|
@@ -99,12 +99,6 @@ you should stop using `GdkVisual` APIs, since this object not longer
|
|||||||
exists in GTK 4. Most of its APIs are deprecated already and not
|
exists in GTK 4. Most of its APIs are deprecated already and not
|
||||||
useful when dealing with RGBA visuals.
|
useful when dealing with RGBA visuals.
|
||||||
|
|
||||||
### Stop using `gtk_widget_set_app_paintable`
|
|
||||||
|
|
||||||
This is gone in GTK4 with no direct replacement. But for some usecases there
|
|
||||||
are alternatives. If you want to make the background transparent, you can set
|
|
||||||
the background color to, for example, `rgba(255, 255, 255, 0)` using CSS instead.
|
|
||||||
|
|
||||||
### Stop using `GtkBox` padding, fill and expand child properties
|
### Stop using `GtkBox` padding, fill and expand child properties
|
||||||
|
|
||||||
GTK 4 removes these [class@Gtk.Box] child properties, so you should stop using
|
GTK 4 removes these [class@Gtk.Box] child properties, so you should stop using
|
||||||
@@ -139,7 +133,7 @@ or `gtk_style_context_get_color()` only accept the context's current
|
|||||||
state for their state argument. You should update all callers to pass
|
state for their state argument. You should update all callers to pass
|
||||||
the current state.
|
the current state.
|
||||||
|
|
||||||
### Stop using `gdk_pixbuf_get_from_window()` and `gdk_cairo_set_source_window()`
|
### Stop using `gdk_pixbuf_get_from_window()` and `gdk_cairo_set_source_surface()`
|
||||||
|
|
||||||
These functions are not supported in GTK 4. Instead, either use
|
These functions are not supported in GTK 4. Instead, either use
|
||||||
backend-specific APIs, or render your widgets using
|
backend-specific APIs, or render your widgets using
|
||||||
@@ -193,22 +187,11 @@ for this change.
|
|||||||
| ::grab-broken-event | - |
|
| ::grab-broken-event | - |
|
||||||
|
|
||||||
Event signals which are not directly related to input have to be dealt with
|
Event signals which are not directly related to input have to be dealt with
|
||||||
on a one-by-one basis:
|
on a one-by-one basis. If you were using `::configure-event` and
|
||||||
|
`::window-state-event` to save window state, you should use property
|
||||||
- If you were using `::configure-event` and `::window-state-event` to save
|
notification for corresponding [class@Gtk.Window] properties, such as
|
||||||
window state, you should use property notification for corresponding
|
[property@Gtk.Window:default-width], [property@Gtk.Window:default-height],
|
||||||
[class@Gtk.Window] properties, such as [property@Gtk.Window:default-width],
|
[property@Gtk.Window:maximized] or [property@Gtk.Window:fullscreened].
|
||||||
[property@Gtk.Window:default-height], [property@Gtk.Window:maximized] or
|
|
||||||
[property@Gtk.Window:fullscreened].
|
|
||||||
- If you were using `::delete-event` to present a confirmation when using
|
|
||||||
the close button of a window, you should use the
|
|
||||||
[signal@Gtk.Window::close-request] signal.
|
|
||||||
- If you were using `::map-event` and `::unmap-event` to track a window
|
|
||||||
being mapped, you should use property notification for the
|
|
||||||
[property@Gdk.Surface:mapped] property instead.
|
|
||||||
- The `::damage-event` signal has no replacement, as the only consumer
|
|
||||||
of damage events were the offscreen GDK surfaces, which have no
|
|
||||||
replacement in GTK 4.x.
|
|
||||||
|
|
||||||
### Set a proper application ID
|
### Set a proper application ID
|
||||||
|
|
||||||
@@ -249,10 +232,6 @@ in GTK 3, you can prepare for the switch by using `gtk_widget_destroy()`
|
|||||||
only on toplevel windows, and replace all other uses with
|
only on toplevel windows, and replace all other uses with
|
||||||
`gtk_container_remove()` or `g_object_unref()`.
|
`gtk_container_remove()` or `g_object_unref()`.
|
||||||
|
|
||||||
### Stop using the GtkWidget.destroy vfunc
|
|
||||||
|
|
||||||
Instead of implementing GtkWidget.destroy, you can implement GObject.dispose.
|
|
||||||
|
|
||||||
### Reduce the use of generic container APIs
|
### Reduce the use of generic container APIs
|
||||||
|
|
||||||
GTK 4 removes `gtk_container_add()` and `gtk_container_remove()`. While there
|
GTK 4 removes `gtk_container_add()` and `gtk_container_remove()`. While there
|
||||||
@@ -668,21 +647,18 @@ box children as necessary.
|
|||||||
### Adapt to `GtkWindow` API changes
|
### Adapt to `GtkWindow` API changes
|
||||||
|
|
||||||
Following the `GdkSurface` changes, a number of `GtkWindow` APIs that were
|
Following the `GdkSurface` changes, a number of `GtkWindow` APIs that were
|
||||||
X11-specific have been removed. This includes `gtk_window_set_position()`,
|
X11-specific have been removed. This includes `gtk_window_set_geometry_hints()`,
|
||||||
`gtk_window_set_geometry_hints()`, `gtk_window_set_gravity()`,
|
`gtk_window_set_gravity()`, `gtk_window_move()`, `gtk_window_parse_geometry()`,
|
||||||
`gtk_window_move()`, `gtk_window_parse_geometry()`,
|
|
||||||
`gtk_window_set_keep_above()`, `gtk_window_set_keep_below()`,
|
`gtk_window_set_keep_above()`, `gtk_window_set_keep_below()`,
|
||||||
`gtk_window_begin_resize_drag()`, `gtk_window_begin_move_drag()`.
|
`gtk_window_begin_resize_drag()`, `gtk_window_begin_move_drag()`.
|
||||||
Most likely, you should just stop using them. In some cases, you can
|
Most likely, you should just stop using them. In some cases, you can
|
||||||
fall back to using the underlying `GdkToplevel` APIs (for example,
|
fall back to using the underlying `GdkToplevel` APIs (for example,
|
||||||
[`method@Gdk.Toplevel.begin_resize`]); alternatively, you will need to get
|
[method@Gdk.Toplevel.begin_resize]).
|
||||||
the native windowing system surface from the `GtkWindow` and call platform
|
|
||||||
specific API.
|
|
||||||
|
|
||||||
The APIs for controlling `GtkWindow` size have changed to be better aligned
|
The APIs for controlling `GtkWindow` size have changed to be better aligned
|
||||||
with the way size changes are integrated in the frame cycle. `gtk_window_resize()`
|
with the way size changes are integrated in the frame cycle. `gtk_window_resize()`
|
||||||
and `gtk_window_get_size()` have been removed. Instead, use
|
and `gtk_window_get_size()` have been removed. Instead, use
|
||||||
[`method@Gtk.Window.set_default_size`] and [`method@Gtk.Window.get_default_size`].
|
[method@Gtk.Window.set_default_size] and [method@Gtk.Window.get_default_size].
|
||||||
|
|
||||||
### Adapt to `GtkHeaderBar` and `GtkActionBar` API changes
|
### Adapt to `GtkHeaderBar` and `GtkActionBar` API changes
|
||||||
|
|
||||||
@@ -1335,18 +1311,6 @@ pointer coordinates as inout arguments any more, but as normal in ones.
|
|||||||
|
|
||||||
See: [method@Gtk.TreeView.get_tooltip_context], [method@Gtk.IconView.get_tooltip_context]
|
See: [method@Gtk.TreeView.get_tooltip_context], [method@Gtk.IconView.get_tooltip_context]
|
||||||
|
|
||||||
### Adapt to GtkPopover changes
|
|
||||||
|
|
||||||
In GTK 3, a `GtkPopover` could be attached to any widget, using the `relative-to`
|
|
||||||
property. This is no longer possible in GTK 4. The parent widget has to be aware
|
|
||||||
of its popover children, and manage their size allocation. Therefore, only widgets
|
|
||||||
with dedicated popover support can have them, such as [class@Gtk.MenuButton] or
|
|
||||||
[class@Gtk.PopoverMenuBar].
|
|
||||||
|
|
||||||
If you want to make a custom widget that has an attached popover, you need to call
|
|
||||||
[method@Gtk.Popover.present] in your [vfunc@Gtk.Widget.size_allocate] vfunc, in order
|
|
||||||
to update the positioning of the popover.
|
|
||||||
|
|
||||||
### Stop using GtkFileChooserButton
|
### Stop using GtkFileChooserButton
|
||||||
|
|
||||||
The `GtkFileChooserButton` widget was removed, due to its shortcomings in
|
The `GtkFileChooserButton` widget was removed, due to its shortcomings in
|
||||||
@@ -1374,4 +1338,3 @@ of tree models, and widgets instead of cell renderers.
|
|||||||
|
|
||||||
To learn more about the new list widgets, you can read the [List Widget
|
To learn more about the new list widgets, you can read the [List Widget
|
||||||
Overview](#ListWidget).
|
Overview](#ListWidget).
|
||||||
|
|
||||||
|
101
docs/reference/gtk/overview.xml
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE partintro PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||||
|
]>
|
||||||
|
<partintro>
|
||||||
|
<para>
|
||||||
|
GTK is a library for creating graphical user interfaces. It
|
||||||
|
works on many UNIX-like platforms, Windows, and OS X.
|
||||||
|
GTK is released under the GNU Library General Public License
|
||||||
|
(GNU LGPL), which allows for flexible licensing of client
|
||||||
|
applications. GTK has a C-based object-oriented architecture that
|
||||||
|
allows for maximum flexibility. Bindings for many other languages have
|
||||||
|
been written, including C++, Objective-C, Guile/Scheme, Perl, Python,
|
||||||
|
TOM, Ada95, Free Pascal, and Eiffel. The GTK library itself contains
|
||||||
|
<firstterm>widgets</firstterm>, that is, GUI components such as GtkButton
|
||||||
|
or GtkTextView.
|
||||||
|
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
GTK depends on the following libraries:
|
||||||
|
<variablelist>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>GLib</term>
|
||||||
|
<listitem><para>
|
||||||
|
A general-purpose utility library, not specific to graphical user interfaces.
|
||||||
|
GLib provides many useful data types, macros, type conversions,
|
||||||
|
string utilities, file utilities, a main loop abstraction, and so on.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>GObject</term>
|
||||||
|
<listitem><para>A library that provides a type system, a collection of
|
||||||
|
fundamental types including an object type, a signal system.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>GIO</term>
|
||||||
|
<listitem><para>A modern, easy-to-use VFS API including abstractions for
|
||||||
|
files, drives, volumes, stream IO, as well as network programming and
|
||||||
|
DBus communication.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>cairo</term>
|
||||||
|
<listitem><para>Cairo is a 2D graphics library with support for multiple
|
||||||
|
output devices.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>Pango</term>
|
||||||
|
<listitem><para>
|
||||||
|
Pango is a library for internationalized text handling. It centers
|
||||||
|
around the PangoLayout object, representing a paragraph of text.
|
||||||
|
Pango provides the engine for GtkTextView, GtkLabel, GtkEntry, and
|
||||||
|
other widgets that display text.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>GdkPixbuf</term>
|
||||||
|
<listitem><para>
|
||||||
|
This is a small library which allows you to create GdkPixbuf
|
||||||
|
("pixel buffer") objects from image data or image files.
|
||||||
|
Use a GdkPixbuf in combination with GtkImage to display images.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>graphene</term>
|
||||||
|
<listitem><para>
|
||||||
|
This is a small library which provides vector and matrix datatypes
|
||||||
|
and operations. graphene provides optimized implementations using
|
||||||
|
various SIMD instruction sets such as SSE.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>GDK</term>
|
||||||
|
<listitem><para>
|
||||||
|
GDK is the abstraction layer that allows GTK to support multiple
|
||||||
|
windowing systems. GDK provides window system facilities on Wayland,
|
||||||
|
X11, Windows, and OS X.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>GSK</term>
|
||||||
|
<listitem><para>
|
||||||
|
GSK is a library for creating a scene graph from render nodes,
|
||||||
|
and rendering it using different rendering APIs. GSK provides renderers
|
||||||
|
for OpenGL, Vulkan and cairo.
|
||||||
|
</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</para>
|
||||||
|
</partintro>
|
@@ -3,15 +3,11 @@
|
|||||||
|
|
||||||
// A map between namespaces and base URLs for their online documentation
|
// A map between namespaces and base URLs for their online documentation
|
||||||
baseURLs = [
|
baseURLs = [
|
||||||
[ 'GLib', 'https://docs.gtk.org/glib/' ],
|
[ 'Gdk', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4/' ],
|
||||||
[ 'GObject', 'https://docs.gtk.org/gobject/' ],
|
[ 'GdkWayland', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4-wayland/' ],
|
||||||
[ 'Gio', 'https://docs.gtk.org/gio/' ],
|
[ 'GdkX11', 'https://gnome.pages.gitlab.gnome.org/gtk/gdk4-x11/' ],
|
||||||
[ 'Gdk', 'https://docs.gtk.org/gdk4/' ],
|
[ 'Gsk', 'https://gnome.pages.gitlab.gnome.org/gtk/gsk4/' ],
|
||||||
[ 'GdkWayland', 'https://docs.gtk.org/gdk4-wayland/' ],
|
[ 'Gtk', 'https://gnome.pages.gitlab.gnome.org/gtk/gtk4/' ],
|
||||||
[ 'GdkX11', 'https://docs.gtk.org/gdk4-x11/' ],
|
[ 'Pango', 'https://gnome.pages/gitlab.gnome.org/pango/pango/' ],
|
||||||
[ 'Gsk', 'https://docs.gtk.org/gsk4/' ],
|
[ 'PangoCairo', 'https://gnome.pages.gitlab.gnome.org/pango/pangocairo/' ],
|
||||||
[ 'Gtk', 'https://docs.gtk.org/gtk4/' ],
|
|
||||||
[ 'Pango', 'https://docs.gtk.org/Pango/' ],
|
|
||||||
[ 'PangoCairo', 'https://docs.gtk.org/PangoCairo/' ],
|
|
||||||
[ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ],
|
|
||||||
]
|
]
|
||||||
|
@@ -14,19 +14,14 @@ instructions, binary downloads, etc, can be found
|
|||||||
The Win32 GDK backend can be influenced with some additional environment
|
The Win32 GDK backend can be influenced with some additional environment
|
||||||
variables.
|
variables.
|
||||||
|
|
||||||
### GDK_WIN32_TABLET_INPUT_API
|
### GDK_IGNORE_WINTAB
|
||||||
|
|
||||||
If this variable is set, it determines the API that GTK uses for tablet support.
|
If this variable is set, GTK doesn't use the Wintab API for tablet support.
|
||||||
The possible values are:
|
|
||||||
|
|
||||||
`none`
|
### GDK_USE_WINTAB
|
||||||
: Disables tablet support
|
|
||||||
|
|
||||||
`wintab`
|
If this variable is set, GTK uses the Wintab API for tablet support.
|
||||||
: Use the Wintab API
|
This is the default.
|
||||||
|
|
||||||
`winpointer`
|
|
||||||
: Use the Windows Pointer Input Stack API. This is the default.
|
|
||||||
|
|
||||||
## Windows-specific handling of cursors
|
## Windows-specific handling of cursors
|
||||||
|
|
||||||
|
@@ -3,21 +3,8 @@ toml_conf.set('version', meson.project_version())
|
|||||||
|
|
||||||
gidocgen = find_program('gi-docgen', required: get_option('gtk_doc'))
|
gidocgen = find_program('gi-docgen', required: get_option('gtk_doc'))
|
||||||
|
|
||||||
gidocgen_common_args = [
|
|
||||||
'--quiet',
|
|
||||||
'--no-namespace-dir',
|
|
||||||
]
|
|
||||||
|
|
||||||
if get_option('werror')
|
|
||||||
gidocgen_common_args += ['--fatal-warnings']
|
|
||||||
endif
|
|
||||||
|
|
||||||
docs_dir = gtk_datadir / 'doc'
|
docs_dir = gtk_datadir / 'doc'
|
||||||
|
|
||||||
if get_option('gtk_doc') and not build_gir
|
|
||||||
error('API reference requires introspection.')
|
|
||||||
endif
|
|
||||||
|
|
||||||
subdir('gdk')
|
subdir('gdk')
|
||||||
subdir('gsk')
|
subdir('gsk')
|
||||||
subdir('gtk')
|
subdir('gtk')
|
||||||
|
@@ -197,17 +197,6 @@ text_buffer_changed_cb (GtkTextBuffer *buffer,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
fullscreen_changed (GObject *object,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
if (gtk_window_is_fullscreen (GTK_WINDOW (object)))
|
|
||||||
gtk_button_set_icon_name (GTK_BUTTON (user_data), "view-restore-symbolic");
|
|
||||||
else
|
|
||||||
gtk_button_set_icon_name (GTK_BUTTON (user_data), "view-fullscreen-symbolic");
|
|
||||||
}
|
|
||||||
|
|
||||||
static GActionEntry win_entries[] = {
|
static GActionEntry win_entries[] = {
|
||||||
{ "copy", window_copy, NULL, NULL, NULL },
|
{ "copy", window_copy, NULL, NULL, NULL },
|
||||||
{ "paste", window_paste, NULL, NULL, NULL },
|
{ "paste", window_paste, NULL, NULL, NULL },
|
||||||
@@ -225,6 +214,7 @@ new_window (GApplication *app,
|
|||||||
GtkWidget *window, *grid, *scrolled, *view;
|
GtkWidget *window, *grid, *scrolled, *view;
|
||||||
GtkWidget *toolbar;
|
GtkWidget *toolbar;
|
||||||
GtkWidget *button;
|
GtkWidget *button;
|
||||||
|
GtkWidget *sw, *box, *label;
|
||||||
|
|
||||||
window = gtk_application_window_new (GTK_APPLICATION (app));
|
window = gtk_application_window_new (GTK_APPLICATION (app));
|
||||||
gtk_window_set_default_size ((GtkWindow*)window, 640, 480);
|
gtk_window_set_default_size ((GtkWindow*)window, 640, 480);
|
||||||
@@ -236,7 +226,6 @@ new_window (GApplication *app,
|
|||||||
gtk_window_set_child (GTK_WINDOW (window), grid);
|
gtk_window_set_child (GTK_WINDOW (window), grid);
|
||||||
|
|
||||||
toolbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
toolbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_add_css_class (toolbar, "toolbar");
|
|
||||||
button = gtk_toggle_button_new ();
|
button = gtk_toggle_button_new ();
|
||||||
gtk_button_set_icon_name (GTK_BUTTON (button), "format-justify-left");
|
gtk_button_set_icon_name (GTK_BUTTON (button), "format-justify-left");
|
||||||
gtk_actionable_set_detailed_action_name (GTK_ACTIONABLE (button), "win.justify::left");
|
gtk_actionable_set_detailed_action_name (GTK_ACTIONABLE (button), "win.justify::left");
|
||||||
@@ -252,18 +241,21 @@ new_window (GApplication *app,
|
|||||||
gtk_actionable_set_detailed_action_name (GTK_ACTIONABLE (button), "win.justify::right");
|
gtk_actionable_set_detailed_action_name (GTK_ACTIONABLE (button), "win.justify::right");
|
||||||
gtk_box_append (GTK_BOX (toolbar), button);
|
gtk_box_append (GTK_BOX (toolbar), button);
|
||||||
|
|
||||||
button = gtk_toggle_button_new ();
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||||
gtk_button_set_icon_name (GTK_BUTTON (button), "view-fullscreen-symbolic");
|
gtk_widget_set_halign (box, GTK_ALIGN_END);
|
||||||
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "win.fullscreen");
|
label = gtk_label_new ("Fullscreen:");
|
||||||
gtk_box_append (GTK_BOX (toolbar), button);
|
gtk_box_append (GTK_BOX (box), label);
|
||||||
g_signal_connect (window, "notify::fullscreened", G_CALLBACK (fullscreen_changed), button);
|
sw = gtk_switch_new ();
|
||||||
|
gtk_widget_set_valign (sw, GTK_ALIGN_CENTER);
|
||||||
|
gtk_actionable_set_action_name (GTK_ACTIONABLE (sw), "win.fullscreen");
|
||||||
|
gtk_box_append (GTK_BOX (box), sw);
|
||||||
|
gtk_box_append (GTK_BOX (toolbar), box);
|
||||||
|
|
||||||
gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 1, 1);
|
gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 1, 1);
|
||||||
|
|
||||||
scrolled = gtk_scrolled_window_new ();
|
scrolled = gtk_scrolled_window_new ();
|
||||||
gtk_widget_set_hexpand (scrolled, TRUE);
|
gtk_widget_set_hexpand (scrolled, TRUE);
|
||||||
gtk_widget_set_vexpand (scrolled, TRUE);
|
gtk_widget_set_vexpand (scrolled, TRUE);
|
||||||
gtk_scrolled_window_set_has_frame (GTK_SCROLLED_WINDOW (scrolled), TRUE);
|
|
||||||
view = gtk_text_view_new ();
|
view = gtk_text_view_new ();
|
||||||
|
|
||||||
g_object_set_data ((GObject*)window, "bloatpad-text", view);
|
g_object_set_data ((GObject*)window, "bloatpad-text", view);
|
||||||
@@ -353,7 +345,6 @@ static void
|
|||||||
combo_changed (GtkComboBox *combo,
|
combo_changed (GtkComboBox *combo,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkDialog *dialog = user_data;
|
|
||||||
GtkEntry *entry = g_object_get_data (user_data, "entry");
|
GtkEntry *entry = g_object_get_data (user_data, "entry");
|
||||||
const char *action;
|
const char *action;
|
||||||
char **accels;
|
char **accels;
|
||||||
@@ -369,17 +360,6 @@ combo_changed (GtkComboBox *combo,
|
|||||||
g_strfreev (accels);
|
g_strfreev (accels);
|
||||||
|
|
||||||
gtk_editable_set_text (GTK_EDITABLE (entry), str);
|
gtk_editable_set_text (GTK_EDITABLE (entry), str);
|
||||||
gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
entry_changed (GtkEntry *entry,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkDialog *dialog = user_data;
|
|
||||||
|
|
||||||
gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -393,7 +373,7 @@ response (GtkDialog *dialog,
|
|||||||
const char *str;
|
const char *str;
|
||||||
char **accels;
|
char **accels;
|
||||||
|
|
||||||
if (response_id == GTK_RESPONSE_CANCEL)
|
if (response_id == GTK_RESPONSE_CLOSE)
|
||||||
{
|
{
|
||||||
gtk_window_destroy (GTK_WINDOW (dialog));
|
gtk_window_destroy (GTK_WINDOW (dialog));
|
||||||
return;
|
return;
|
||||||
@@ -409,8 +389,6 @@ response (GtkDialog *dialog,
|
|||||||
|
|
||||||
gtk_application_set_accels_for_action (gtk_window_get_application (user_data), action, (const char **) accels);
|
gtk_application_set_accels_for_action (gtk_window_get_application (user_data), action, (const char **) accels);
|
||||||
g_strfreev (accels);
|
g_strfreev (accels);
|
||||||
|
|
||||||
gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -425,41 +403,22 @@ edit_accels (GSimpleAction *action,
|
|||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dialog = gtk_dialog_new_with_buttons ("Accelerators",
|
dialog = gtk_dialog_new ();
|
||||||
NULL,
|
|
||||||
GTK_DIALOG_USE_HEADER_BAR,
|
|
||||||
"Close", GTK_RESPONSE_CANCEL,
|
|
||||||
"Set", GTK_RESPONSE_APPLY,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gtk_window_set_application (GTK_WINDOW (dialog), app);
|
gtk_window_set_application (GTK_WINDOW (dialog), app);
|
||||||
actions = gtk_application_list_action_descriptions (app);
|
actions = gtk_application_list_action_descriptions (app);
|
||||||
|
|
||||||
combo = gtk_combo_box_text_new ();
|
combo = gtk_combo_box_text_new ();
|
||||||
g_object_set (gtk_dialog_get_content_area (GTK_DIALOG (dialog)),
|
|
||||||
"margin-top", 10,
|
|
||||||
"margin-bottom", 10,
|
|
||||||
"margin-start", 10,
|
|
||||||
"margin-end", 10,
|
|
||||||
"spacing", 10,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), combo);
|
gtk_box_append (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), combo);
|
||||||
for (i = 0; actions[i]; i++)
|
for (i = 0; actions[i]; i++)
|
||||||
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), actions[i], actions[i]);
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), actions[i], actions[i]);
|
||||||
g_signal_connect (combo, "changed", G_CALLBACK (combo_changed), dialog);
|
g_signal_connect (combo, "changed", G_CALLBACK (combo_changed), dialog);
|
||||||
|
|
||||||
entry = gtk_entry_new ();
|
entry = gtk_entry_new ();
|
||||||
gtk_widget_set_hexpand (entry, TRUE);
|
|
||||||
g_signal_connect (entry, "notify::text", G_CALLBACK (entry_changed), dialog);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), entry);
|
gtk_box_append (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), entry);
|
||||||
|
gtk_dialog_add_button (GTK_DIALOG (dialog), "Close", GTK_RESPONSE_CLOSE);
|
||||||
|
gtk_dialog_add_button (GTK_DIALOG (dialog), "Set", GTK_RESPONSE_APPLY);
|
||||||
g_signal_connect (dialog, "response", G_CALLBACK (response), dialog);
|
g_signal_connect (dialog, "response", G_CALLBACK (response), dialog);
|
||||||
g_object_set_data (G_OBJECT (dialog), "combo", combo);
|
g_object_set_data (G_OBJECT (dialog), "combo", combo);
|
||||||
g_object_set_data (G_OBJECT (dialog), "entry", entry);
|
g_object_set_data (G_OBJECT (dialog), "entry", entry);
|
||||||
|
|
||||||
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
|
|
||||||
|
|
||||||
gtk_widget_show (dialog);
|
gtk_widget_show (dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -603,8 +562,8 @@ bloat_pad_startup (GApplication *application)
|
|||||||
g_object_unref (icon);
|
g_object_unref (icon);
|
||||||
g_bytes_unref (bytes);
|
g_bytes_unref (bytes);
|
||||||
|
|
||||||
icon = G_ICON (gdk_texture_new_from_resource ("/org/gtk/libgtk/icons/16x16/actions/folder-new.png"));
|
icon = G_ICON (gdk_pixbuf_new_from_resource ("/org/gtk/libgtk/icons/16x16/actions/folder-new.png", NULL));
|
||||||
item = g_menu_item_new ("Texture", NULL);
|
item = g_menu_item_new ("Pixbuf", NULL);
|
||||||
g_menu_item_set_icon (item, icon);
|
g_menu_item_set_icon (item, icon);
|
||||||
g_menu_append_item (menu, item);
|
g_menu_append_item (menu, item);
|
||||||
g_object_unref (item);
|
g_object_unref (item);
|
||||||
|
@@ -4,10 +4,5 @@
|
|||||||
<gresource prefix="/org/gtk/bloatpad">
|
<gresource prefix="/org/gtk/bloatpad">
|
||||||
<file preprocess="xml-stripblanks">gtk/menus.ui</file>
|
<file preprocess="xml-stripblanks">gtk/menus.ui</file>
|
||||||
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||||
<file>icons/16x16/actions/format-justify-center-symbolic.symbolic.png</file>
|
|
||||||
<file>icons/16x16/actions/format-justify-left-symbolic.symbolic.png</file>
|
|
||||||
<file>icons/16x16/actions/format-justify-right-symbolic.symbolic.png</file>
|
|
||||||
<file>icons/16x16/actions/view-fullscreen-symbolic.symbolic.png</file>
|
|
||||||
<file>icons/16x16/actions/view-restore-symbolic.symbolic.png</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
</gresources>
|
</gresources>
|
||||||
|
Before Width: | Height: | Size: 119 B |
Before Width: | Height: | Size: 115 B |
Before Width: | Height: | Size: 117 B |
Before Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 204 B |
@@ -132,6 +132,7 @@ activate (GtkApplication *app,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
|
GtkWidget *frame;
|
||||||
GtkWidget *drawing_area;
|
GtkWidget *drawing_area;
|
||||||
GtkGesture *drag;
|
GtkGesture *drag;
|
||||||
GtkGesture *press;
|
GtkGesture *press;
|
||||||
@@ -141,11 +142,14 @@ activate (GtkApplication *app,
|
|||||||
|
|
||||||
g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL);
|
g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL);
|
||||||
|
|
||||||
|
frame = gtk_frame_new (NULL);
|
||||||
|
gtk_window_set_child (GTK_WINDOW (window), frame);
|
||||||
|
|
||||||
drawing_area = gtk_drawing_area_new ();
|
drawing_area = gtk_drawing_area_new ();
|
||||||
/* set a minimum size */
|
/* set a minimum size */
|
||||||
gtk_widget_set_size_request (drawing_area, 100, 100);
|
gtk_widget_set_size_request (drawing_area, 100, 100);
|
||||||
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), drawing_area);
|
gtk_frame_set_child (GTK_FRAME (frame), drawing_area);
|
||||||
|
|
||||||
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (drawing_area), draw_cb, NULL, NULL);
|
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (drawing_area), draw_cb, NULL, NULL);
|
||||||
|
|
||||||
|
@@ -13,19 +13,19 @@ activate (GtkApplication *app,
|
|||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *button;
|
GtkWidget *button;
|
||||||
|
GtkWidget *box;
|
||||||
|
|
||||||
window = gtk_application_window_new (app);
|
window = gtk_application_window_new (app);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Window");
|
gtk_window_set_title (GTK_WINDOW (window), "Window");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
||||||
|
|
||||||
button = gtk_button_new_with_label ("Hello World");
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
|
gtk_window_set_child (GTK_WINDOW (window), box);
|
||||||
gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
|
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label ("Hello World");
|
||||||
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
|
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
|
||||||
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
|
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
|
||||||
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), button);
|
|
||||||
|
|
||||||
gtk_widget_show (window);
|
gtk_widget_show (window);
|
||||||
}
|
}
|
@@ -1,10 +0,0 @@
|
|||||||
project('hello', 'c',
|
|
||||||
version: '4.3.0',
|
|
||||||
meson_version: '>= 0.50.0',
|
|
||||||
)
|
|
||||||
|
|
||||||
executable('hello',
|
|
||||||
[ 'hello-world.c' ],
|
|
||||||
dependencies: [ dependency('gtk4') ],
|
|
||||||
install: false
|
|
||||||
)
|
|
@@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/env -S GI_TYPELIB_PATH=${PWD}/build/gtk:${GI_TYPELIB_PATH} LD_PRELOAD=${LD_PRELOAD}:${PWD}/build/gtk/libgtk-4.so gjs
|
|
||||||
|
|
||||||
imports.gi.versions['Gtk'] = '4.0';
|
|
||||||
|
|
||||||
const GObject = imports.gi.GObject;
|
|
||||||
const Gtk = imports.gi.Gtk;
|
|
||||||
|
|
||||||
const DemoWidget = GObject.registerClass({
|
|
||||||
GTypeName: 'DemoWidget',
|
|
||||||
}, class DemoWidget extends Gtk.Widget {
|
|
||||||
|
|
||||||
_init(params = {}) {
|
|
||||||
super._init(params);
|
|
||||||
|
|
||||||
let layout_manager = new Gtk.GridLayout ();
|
|
||||||
this.set_layout_manager (layout_manager);
|
|
||||||
this.label1 = new Gtk.Label({ label: "Red",
|
|
||||||
hexpand: true,
|
|
||||||
vexpand: true });
|
|
||||||
this.label1.set_parent (this);
|
|
||||||
let child1 = layout_manager.get_layout_child (this.label1);
|
|
||||||
child1.set_row (0);
|
|
||||||
child1.set_column (0);
|
|
||||||
|
|
||||||
this.label2 = new Gtk.Label({ label: "Green",
|
|
||||||
hexpand: true,
|
|
||||||
vexpand: true });
|
|
||||||
this.label2.set_parent (this);
|
|
||||||
let child2 = layout_manager.get_layout_child (this.label2);
|
|
||||||
child2.set_row (0);
|
|
||||||
child2.set_column (1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a new application
|
|
||||||
let app = new Gtk.Application({ application_id: 'org.gtk.exampleapp' });
|
|
||||||
|
|
||||||
// When the application is launched…
|
|
||||||
app.connect('activate', () => {
|
|
||||||
// … create a new window …
|
|
||||||
let win = new Gtk.ApplicationWindow({ application: app });
|
|
||||||
// … with a button in it …
|
|
||||||
let widget = new DemoWidget();
|
|
||||||
win.set_child(widget);
|
|
||||||
win.present();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Run the application
|
|
||||||
app.run([]);
|
|
||||||
|
|
@@ -2,6 +2,7 @@ examples = [
|
|||||||
'builder',
|
'builder',
|
||||||
'drawing',
|
'drawing',
|
||||||
'grid-packing',
|
'grid-packing',
|
||||||
|
'hello-world',
|
||||||
'plugman',
|
'plugman',
|
||||||
'search-bar',
|
'search-bar',
|
||||||
'sunny',
|
'sunny',
|
||||||
|
@@ -1,61 +0,0 @@
|
|||||||
#!/usr/bin/env -S GI_TYPELIB_PATH=${PWD}/build/gtk:${GI_TYPELIB_PATH} LD_PRELOAD=${LD_PRELOAD}:${PWD}/build/gtk/libgtk-4.so python3
|
|
||||||
|
|
||||||
import gi
|
|
||||||
|
|
||||||
gi.require_version('Gdk', '4.0')
|
|
||||||
gi.require_version('Gtk', '4.0')
|
|
||||||
|
|
||||||
from gi.repository import Gdk
|
|
||||||
from gi.repository import Gtk
|
|
||||||
from gi.repository import Graphene
|
|
||||||
|
|
||||||
|
|
||||||
class DemoWidget(Gtk.Widget):
|
|
||||||
|
|
||||||
__gtype_name__ = "DemoWidget"
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
def do_measure(self, orientation, for_size: int):
|
|
||||||
# We need some space to draw
|
|
||||||
return 100, 200, -1, -1
|
|
||||||
|
|
||||||
def do_snapshot(self, snapshot):
|
|
||||||
# Draw four color squares
|
|
||||||
color = Gdk.RGBA()
|
|
||||||
rect = Graphene.Rect.alloc()
|
|
||||||
|
|
||||||
width = self.get_width() / 2
|
|
||||||
height = self.get_height() / 2
|
|
||||||
|
|
||||||
Gdk.RGBA.parse(color, "red")
|
|
||||||
rect.init(0, 0, width, height)
|
|
||||||
snapshot.append_color(color, rect)
|
|
||||||
|
|
||||||
Gdk.RGBA.parse(color, "green")
|
|
||||||
rect.init(width, 0, width, height)
|
|
||||||
snapshot.append_color(color, rect)
|
|
||||||
|
|
||||||
Gdk.RGBA.parse(color, "yellow")
|
|
||||||
rect.init(0, height, width, height)
|
|
||||||
snapshot.append_color(color, rect)
|
|
||||||
|
|
||||||
Gdk.RGBA.parse(color, "blue")
|
|
||||||
rect.init(width, height, width, height)
|
|
||||||
snapshot.append_color(color, rect)
|
|
||||||
|
|
||||||
def on_activate(app):
|
|
||||||
# Create a new window
|
|
||||||
win = Gtk.ApplicationWindow(application=app)
|
|
||||||
win.set_title("Squares")
|
|
||||||
icon = DemoWidget()
|
|
||||||
win.set_child(icon)
|
|
||||||
win.present()
|
|
||||||
|
|
||||||
# Create a new application
|
|
||||||
app = Gtk.Application(application_id='org.gtk.exampleapp')
|
|
||||||
app.connect('activate', on_activate)
|
|
||||||
|
|
||||||
# Run the application
|
|
||||||
app.run(None)
|
|
@@ -12,7 +12,7 @@ new_window (GApplication *app,
|
|||||||
gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW (window), TRUE);
|
gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW (window), TRUE);
|
||||||
gtk_window_set_default_size ((GtkWindow*)window, 640, 480);
|
gtk_window_set_default_size ((GtkWindow*)window, 640, 480);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Sunny");
|
gtk_window_set_title (GTK_WINDOW (window), "Sunny");
|
||||||
gtk_window_set_icon_name (GTK_WINDOW (window), "weather-clear-symbolic");
|
gtk_window_set_icon_name (GTK_WINDOW (window), "sunny");
|
||||||
|
|
||||||
header = gtk_header_bar_new ();
|
header = gtk_header_bar_new ();
|
||||||
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||||
@@ -78,7 +78,7 @@ show_about (GSimpleAction *action,
|
|||||||
gtk_show_about_dialog (NULL,
|
gtk_show_about_dialog (NULL,
|
||||||
"program-name", "Sunny",
|
"program-name", "Sunny",
|
||||||
"title", "About Sunny",
|
"title", "About Sunny",
|
||||||
"logo-icon-name", "weather-clear-symbolic",
|
"logo-icon-name", "sunny",
|
||||||
"comments", "A cheap Bloatpad clone.",
|
"comments", "A cheap Bloatpad clone.",
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|