Compare commits
46 Commits
vulkan-err
...
matthiasc/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe4f4d3719 | ||
|
|
e8d1537606 | ||
|
|
2f33ec418b | ||
|
|
6fc9294036 | ||
|
|
3297510040 | ||
|
|
a2849d3f7a | ||
|
|
f8dc75089e | ||
|
|
003cf4f6ce | ||
|
|
30f2e7e153 | ||
|
|
1ed2b1b8e3 | ||
|
|
4906779f72 | ||
|
|
cda8bb4384 | ||
|
|
a801be3c97 | ||
|
|
59c8c75ede | ||
|
|
796b205958 | ||
|
|
947a933819 | ||
|
|
48cb5ca3db | ||
|
|
f19001d4c3 | ||
|
|
6ecf612677 | ||
|
|
e0b3746655 | ||
|
|
1bc81fac2a | ||
|
|
bdcc29ebef | ||
|
|
810e9c238e | ||
|
|
e4dfa5597a | ||
|
|
32aa470f68 | ||
|
|
a234ab1e55 | ||
|
|
e93a51b1cc | ||
|
|
66cd15d858 | ||
|
|
a0bc9d65da | ||
|
|
a580c711e5 | ||
|
|
e91d5b82ce | ||
|
|
0516c59ff5 | ||
|
|
a3ea3f94dc | ||
|
|
5e9fe2f6e8 | ||
|
|
6613c523c2 | ||
|
|
efa0fa0bf4 | ||
|
|
1b6f7917ed | ||
|
|
8cc18d2c82 | ||
|
|
d97267b897 | ||
|
|
21e0ad0561 | ||
|
|
94cccc5e71 | ||
|
|
111dfdf3f5 | ||
|
|
0693deb02f | ||
|
|
ffd39c257a | ||
|
|
ec0ad5738c | ||
|
|
c958fd8e86 |
@@ -1,7 +1,3 @@
|
|||||||
include:
|
|
||||||
- project: 'gnome/citemplates'
|
|
||||||
file: 'flatpak/flatpak_ci_initiative.yml'
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- build
|
- build
|
||||||
- analysis
|
- analysis
|
||||||
@@ -20,13 +16,13 @@ stages:
|
|||||||
|
|
||||||
# Common variables
|
# Common variables
|
||||||
variables:
|
variables:
|
||||||
COMMON_MESON_FLAGS: "-Dwerror=true -Dglib:werror=false -Dpango:werror=false -Dgtk-doc:werror=false -Dwayland-protocols:werror=false -Dsysprof:werror=false"
|
COMMON_MESON_FLAGS: "--fatal-meson-warnings -Dgtk:werror=true"
|
||||||
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:v25"
|
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v22"
|
||||||
FLATPAK_IMAGE: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master"
|
FLATPAK_IMAGE: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master"
|
||||||
DOCS_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora-docs:v25"
|
DOCS_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora-docs:v19"
|
||||||
|
|
||||||
.only-default:
|
.only-default:
|
||||||
only:
|
only:
|
||||||
@@ -78,6 +74,7 @@ fedora-x86_64:
|
|||||||
script:
|
script:
|
||||||
- meson subprojects update
|
- meson subprojects update
|
||||||
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
||||||
|
-Dsysprof=enabled
|
||||||
_build
|
_build
|
||||||
- ninja -C _build
|
- ninja -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build x11
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
@@ -103,7 +100,6 @@ installed-tests:
|
|||||||
needs: []
|
needs: []
|
||||||
variables:
|
variables:
|
||||||
EXTRA_MESON_FLAGS: "--prefix=/usr --libdir=/usr/lib64 -Dinstall-tests=true"
|
EXTRA_MESON_FLAGS: "--prefix=/usr --libdir=/usr/lib64 -Dinstall-tests=true"
|
||||||
G_TEST_ACCESSIBLE: 1
|
|
||||||
script:
|
script:
|
||||||
- meson subprojects update
|
- meson subprojects update
|
||||||
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
|
||||||
@@ -153,7 +149,6 @@ msys2-mingw64:
|
|||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- "${APPID}-dev.flatpak"
|
- "${APPID}-dev.flatpak"
|
||||||
- 'repo.tar'
|
|
||||||
expire_in: 1 day
|
expire_in: 1 day
|
||||||
script:
|
script:
|
||||||
- bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
|
- bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
|
||||||
@@ -205,24 +200,6 @@ flatpak-master:icon-browser:
|
|||||||
variables:
|
variables:
|
||||||
APPID: org.gtk.IconBrowser4
|
APPID: org.gtk.IconBrowser4
|
||||||
|
|
||||||
# Publish the demo apps to the GNOME Nightly repo
|
|
||||||
# https://wiki.gnome.org/Apps/Nightly
|
|
||||||
# https://gitlab.gnome.org/GNOME/Initiatives/-/wikis/DevOps-with-Flatpak
|
|
||||||
nightly demo:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
dependencies: ['flatpak-master:demo']
|
|
||||||
needs: ['flatpak-master:demo']
|
|
||||||
|
|
||||||
nightly factory:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
dependencies: ['flatpak-master:widget-factory']
|
|
||||||
needs: ['flatpak-master:widget-factory']
|
|
||||||
|
|
||||||
nightly icon-browser:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
dependencies: ['flatpak-master:icon-browser']
|
|
||||||
needs: ['flatpak-master:icon-browser']
|
|
||||||
|
|
||||||
static-scan:
|
static-scan:
|
||||||
image: $FEDORA_IMAGE
|
image: $FEDORA_IMAGE
|
||||||
stage: analysis
|
stage: analysis
|
||||||
@@ -246,7 +223,7 @@ asan-build:
|
|||||||
needs: []
|
needs: []
|
||||||
variables:
|
variables:
|
||||||
script:
|
script:
|
||||||
- CC=clang meson --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=disabled _build
|
- CC=clang meson --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=false _build
|
||||||
- ninja -C _build
|
- ninja -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build wayland
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ RUN dnf -y install \
|
|||||||
lcov \
|
lcov \
|
||||||
libasan \
|
libasan \
|
||||||
libattr-devel \
|
libattr-devel \
|
||||||
libcloudproviders-devel \
|
|
||||||
libepoxy-devel \
|
libepoxy-devel \
|
||||||
libffi-devel \
|
libffi-devel \
|
||||||
libmount-devel \
|
libmount-devel \
|
||||||
@@ -87,5 +86,5 @@ RUN dnf -y install \
|
|||||||
xorg-x11-server-Xvfb \
|
xorg-x11-server-Xvfb \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
RUN pip3 install meson==0.55.3
|
RUN pip3 install meson==0.53.1
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v25
|
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v19
|
||||||
|
|
||||||
RUN dnf -y install pandoc
|
RUN dnf -y install pandoc
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v25
|
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v21
|
||||||
|
|
||||||
# Enable sudo for wheel users
|
# Enable sudo for wheel users
|
||||||
RUN sed -i -e 's/# %wheel/%wheel/' -e '0,/%wheel/{s/%wheel/# %wheel/}' /etc/sudoers
|
RUN sed -i -e 's/# %wheel/%wheel/' -e '0,/%wheel/{s/%wheel/# %wheel/}' /etc/sudoers
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ flatpak build ${builddir} meson \
|
|||||||
-Dprint-backends=file \
|
-Dprint-backends=file \
|
||||||
-Dbuild-tests=false \
|
-Dbuild-tests=false \
|
||||||
-Dbuild-examples=false \
|
-Dbuild-examples=false \
|
||||||
-Dintrospection=disabled \
|
-Dintrospection=false \
|
||||||
-Ddemos=true \
|
-Ddemos=true \
|
||||||
_flatpak_build
|
_flatpak_build
|
||||||
|
|
||||||
@@ -40,8 +40,3 @@ flatpak build-bundle \
|
|||||||
${appid}-dev.flatpak \
|
${appid}-dev.flatpak \
|
||||||
--runtime-repo=https://nightly.gnome.org/gnome-nightly.flatpakrepo \
|
--runtime-repo=https://nightly.gnome.org/gnome-nightly.flatpakrepo \
|
||||||
${appid}
|
${appid}
|
||||||
|
|
||||||
# to be consumed by the nightly publish jobs
|
|
||||||
if [[ $CI_COMMIT_BRANCH == master ]]; then
|
|
||||||
tar cf repo.tar ${repodir}
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -60,12 +60,14 @@ pkg-config --modversion pango
|
|||||||
ccache --zero-stats
|
ccache --zero-stats
|
||||||
ccache --show-stats
|
ccache --show-stats
|
||||||
export CCACHE_DISABLE=true
|
export CCACHE_DISABLE=true
|
||||||
|
# FIXME: introspection disabled for now because of
|
||||||
|
# https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/340
|
||||||
meson \
|
meson \
|
||||||
-Dx11-backend=false \
|
-Dx11-backend=false \
|
||||||
-Dwayland-backend=false \
|
-Dwayland-backend=false \
|
||||||
-Dwin32-backend=true \
|
-Dwin32-backend=true \
|
||||||
-Dvulkan=disabled \
|
-Dvulkan=disabled \
|
||||||
-Dintrospection=enabled \
|
-Dintrospection=false \
|
||||||
-Dgtk:werror=true \
|
-Dgtk:werror=true \
|
||||||
_build
|
_build
|
||||||
unset CCACHE_DISABLE
|
unset CCACHE_DISABLE
|
||||||
|
|||||||
@@ -56,12 +56,6 @@ If the issue includes a crash, you should also include:
|
|||||||
0. the eventual warnings printed on the terminal
|
0. the eventual warnings printed on the terminal
|
||||||
0. a backtrace, obtained with tools such as GDB or LLDB
|
0. a backtrace, obtained with tools such as GDB or LLDB
|
||||||
|
|
||||||
It is fine to include screenshots of screen recordings to demonstrate
|
|
||||||
an issue that is best to understand visually, but please don't just
|
|
||||||
dump screen recordings without further details into issues. It is
|
|
||||||
essential that the problem is described in enough detail to reproduce
|
|
||||||
it without watching a video.
|
|
||||||
|
|
||||||
For small issues, such as:
|
For small issues, such as:
|
||||||
|
|
||||||
- spelling/grammar fixes in the documentation
|
- spelling/grammar fixes in the documentation
|
||||||
|
|||||||
344
NEWS
344
NEWS
@@ -1,327 +1,19 @@
|
|||||||
Overview of Changes in GTK 4.0
|
|
||||||
==============================
|
|
||||||
|
|
||||||
* Fix problems with synthetic motion events affecting frame rates
|
|
||||||
|
|
||||||
* Fix problems with implicit grabs affecting widget states
|
|
||||||
|
|
||||||
* Fix problems with zoom mode on scales getting stuck
|
|
||||||
|
|
||||||
* Fix submenu closing by outside clicks
|
|
||||||
|
|
||||||
* Rename GtkWindow:fullscreen to :fullscreened to help
|
|
||||||
language bindings
|
|
||||||
|
|
||||||
* Bump the soname. Stable GTK 4 releases use libgtk-4.0.so.1.xxxx.y
|
|
||||||
|
|
||||||
* Adwaita:
|
|
||||||
- Reduce hover transition effects in lists
|
|
||||||
- Special-case header buttons
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Remove NoDisplay from desktop files
|
|
||||||
- Autoplay the video in widget-factory
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Catalan
|
|
||||||
Norwegian Bokmål
|
|
||||||
Polish
|
|
||||||
Spanish
|
|
||||||
Swedish
|
|
||||||
Romanian
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 3.99.5
|
|
||||||
=============================
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Map presentation role according to Core-AAM
|
|
||||||
- Use presentation role for spacers in list views
|
|
||||||
- Set proper roles, relations and descriptions on more widgets
|
|
||||||
- Expand the documentation
|
|
||||||
- Use a single GTK_A11Y environment variable and document it
|
|
||||||
- Serveral memory leak and crash fixes
|
|
||||||
- Initialize AT contexts lazily
|
|
||||||
- Improve the API for storing lists in relations
|
|
||||||
- Implement more of the Component interface
|
|
||||||
- Implement the Cache interface
|
|
||||||
- Implement ScrollSubstringTo for GtkTextView
|
|
||||||
|
|
||||||
* Introspection:
|
|
||||||
- Add many missing annotations to APIs
|
|
||||||
- In particular, nullability annotation fixes for rust
|
|
||||||
|
|
||||||
* Touch support:
|
|
||||||
- Fix issues with text handles
|
|
||||||
- Fix interaction between touch scrolling and focus
|
|
||||||
- Fix active state updates for touch events
|
|
||||||
- Allow pressing buttons with multiple fingers
|
|
||||||
|
|
||||||
* GtkScrolledWindow:
|
|
||||||
- Accumulate velocity with kinetic scrolling
|
|
||||||
|
|
||||||
* GtkSearchEntry:
|
|
||||||
- Use a better clear icon
|
|
||||||
|
|
||||||
* GtkTreeView:
|
|
||||||
- Remove the deprecated GtkCellRendererClass.get_size vfunc
|
|
||||||
|
|
||||||
* GtkBuilder:
|
|
||||||
- Be stricter about <requires>
|
|
||||||
- Make gtk-builder-tool simplify update <requires>
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Remove GtkFileChooserButton
|
|
||||||
|
|
||||||
* GtkWindow:
|
|
||||||
- Replace gtk_window_get_size with gtk_window_get_default_size
|
|
||||||
- Add maximized and fullscreen properties
|
|
||||||
|
|
||||||
* Make the inspector available in non-debug builds
|
|
||||||
|
|
||||||
* CSS:
|
|
||||||
- Support conic gradients
|
|
||||||
|
|
||||||
* Adwaita:
|
|
||||||
- Round all window corners
|
|
||||||
- Round submenus
|
|
||||||
- Remove the 'chin' on menus
|
|
||||||
- Industrial style menuitems
|
|
||||||
- Improved tooltip styling
|
|
||||||
- Unified sidebar styles
|
|
||||||
- Dark prelight
|
|
||||||
- Don't backdrop labels
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Rename render node apis from peek to get
|
|
||||||
|
|
||||||
* Make GLES work in the absence of GL_ARB_timer_query
|
|
||||||
|
|
||||||
* Rework the way size allocation is integrated in the
|
|
||||||
frame cycle
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Support gtk_shell1 version 3 (startup notification
|
|
||||||
and activation)
|
|
||||||
- Implmement minimization
|
|
||||||
|
|
||||||
* OS X:
|
|
||||||
- Mostly working GL renderer
|
|
||||||
- Search engine updates
|
|
||||||
- Fix rendering artifacts with hover transitions
|
|
||||||
- Fix kinetic scrolling deceleration
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Fix key event generation, making text input work
|
|
||||||
|
|
||||||
* Documentation:
|
|
||||||
- Add missing enumerations, symbols and types
|
|
||||||
- Lots of smaller fixes
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Make the constraints demo more useful
|
|
||||||
- Make search more obvious
|
|
||||||
- Add a suggestion entry demo
|
|
||||||
- Consistency improvements
|
|
||||||
- Use native file choosers
|
|
||||||
- Drop 'devel' styling
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Belarusian
|
|
||||||
Catalan
|
|
||||||
Polish
|
|
||||||
Spanish
|
|
||||||
Swedish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 3.99.4
|
|
||||||
=============================
|
|
||||||
|
|
||||||
* GtkColumnView:
|
|
||||||
- Improve column resizing
|
|
||||||
- Make double-click reset column widths
|
|
||||||
- Move header outside of scrollbars
|
|
||||||
|
|
||||||
* GtkSearchEntry:
|
|
||||||
- Add an icon
|
|
||||||
|
|
||||||
* GtkDropDown:
|
|
||||||
- Polish the appearance
|
|
||||||
|
|
||||||
* GtkColorChooser:
|
|
||||||
- Accessibility improvements
|
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
|
||||||
- Add accessibility support
|
|
||||||
- Allow custom items. This adds new API:
|
|
||||||
gtk_popover_menu_add/remove_child
|
|
||||||
gtk_popover_menu_bar_add/remove_child
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Fix rendering and positioning of anchored children
|
|
||||||
- Fix positioning of touch handles
|
|
||||||
|
|
||||||
* Constraints:
|
|
||||||
- Fix loading constraints from ui files
|
|
||||||
|
|
||||||
* Media support:
|
|
||||||
- Use cubic instead of linear volume
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Implement Component for all widgets
|
|
||||||
- Implement Text and EditableText for all editables
|
|
||||||
- Rework accessible name/description computation
|
|
||||||
- Add documentation for app and widget developers
|
|
||||||
- Handle HIDDEN state changes by adding/removing elements
|
|
||||||
- Support setting accessibility attributes in ui files
|
|
||||||
- Make window controls accessible
|
|
||||||
|
|
||||||
* Introspection:
|
|
||||||
- Add some missing annotations
|
|
||||||
|
|
||||||
* gdk:
|
|
||||||
- Deliver events on flush
|
|
||||||
- Drop the unused GdkPoint struct from the API
|
|
||||||
- Improve popup autohide behavior
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Add another constraints demo
|
|
||||||
- Tweak various demos to improve consistency
|
|
||||||
- Small accessibility improvements
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- Improve gtk4-builder-tool handling of various
|
|
||||||
widgets when converting ui files from GTK 3
|
|
||||||
|
|
||||||
* Documentation:
|
|
||||||
- Use GtkApplication in all examples
|
|
||||||
- Improve and expand the widget gallery
|
|
||||||
|
|
||||||
* Testsuite:
|
|
||||||
- Improve coverage of GDK
|
|
||||||
- Improve coverage of gtk4-builder-tool
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Fix the build with cups 2.2.12
|
|
||||||
- Make cloudprint support build without warnings
|
|
||||||
|
|
||||||
* Broadway:
|
|
||||||
- Support modifiers for scroll events
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Improve IME support
|
|
||||||
|
|
||||||
* OS X:
|
|
||||||
- Fix various input issues
|
|
||||||
- Make GtkGLArea work (with the cairo backend)
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
German
|
|
||||||
Polish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 3.99.3
|
|
||||||
=============================
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Add an initial AT-SPI backend
|
|
||||||
|
|
||||||
* GtkEmojiChooser:
|
|
||||||
- Allow inserting multiple Emoji by pressing Control
|
|
||||||
- Update Emoji data to Unicode 13 / CLDR 37
|
|
||||||
- Use translations
|
|
||||||
- The recent-emoji setting type changed. Call
|
|
||||||
gsettings reset org.gtk.gtk4.Settings.EmojiChooser recent-emoji
|
|
||||||
|
|
||||||
* GtkTextBuffer:
|
|
||||||
- Add boolean returns to some get_iter functions
|
|
||||||
|
|
||||||
* GtkScale:
|
|
||||||
- Change the default value of the :draw-value property
|
|
||||||
|
|
||||||
* GtkPopover:
|
|
||||||
- Avoid losing focus when popovers are close
|
|
||||||
|
|
||||||
* GtkColorChooser:
|
|
||||||
- Add color names back for accessibility
|
|
||||||
|
|
||||||
* Input methods:
|
|
||||||
- Add a 'private' input hint
|
|
||||||
|
|
||||||
* GL Renderer:
|
|
||||||
- Fix issues with texture caching
|
|
||||||
- Fix texture flipping problems
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Use meson yield feature for some options
|
|
||||||
- Require gtk-doc 1.33
|
|
||||||
- Require sysprof 3.38
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Clean up Wayland backend api, add annotations
|
|
||||||
- Generate introspection for Wayland backend api
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Fix modal window handling and window stacking
|
|
||||||
|
|
||||||
* MacOS:
|
|
||||||
- Fix the build
|
|
||||||
- Define GDK_WINDOWING_MACOS
|
|
||||||
- Fix various event handling issues
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Add another column view demo
|
|
||||||
- Add an svg paintable demo
|
|
||||||
|
|
||||||
* Translation updates
|
|
||||||
Czech
|
|
||||||
Lithuanian
|
|
||||||
Polish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in GTK 3.99.2
|
Overview of Changes in GTK 3.99.2
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
* GtkButton:
|
|
||||||
- Check coordinates for button releases
|
|
||||||
|
|
||||||
* GtkColorChooser:
|
|
||||||
- Update the default palette
|
|
||||||
|
|
||||||
* GtkEntry:
|
* GtkEntry:
|
||||||
- Fix issues with Emoji insertion
|
- Fix issues with Emoji insertion
|
||||||
- Fix issues with dnd
|
- Fix issues with dnd
|
||||||
- Set correct hotspot for dnd icon
|
- Set correct hotspot for dnd icon
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Fix a crash
|
|
||||||
- Fix setting unlisted filters
|
|
||||||
|
|
||||||
* GtkFontChooser:
|
|
||||||
- Determine sample text based on font coverage (requires fontconfig)
|
|
||||||
- Allow filtering by language (requires fontconfig)
|
|
||||||
- Don't center the list
|
|
||||||
|
|
||||||
* GtkMenuButton:
|
|
||||||
- Always use the direction property for the arrow
|
|
||||||
|
|
||||||
* GtkPasswordEntry:
|
* GtkPasswordEntry:
|
||||||
- Use non-pageable memory
|
- Use non-pageable memory
|
||||||
- Add an ::activate signal
|
|
||||||
|
|
||||||
* GtkRevealer:
|
|
||||||
- Fix clipping issues in the swing transitions
|
|
||||||
|
|
||||||
* GtkScrolledWindow:
|
|
||||||
- Fix kinetic scrolling in X11
|
|
||||||
|
|
||||||
* GtkSearchEntry:
|
* GtkSearchEntry:
|
||||||
- Don't handle forwarded events twice
|
- Don't handle forwarded events twice
|
||||||
|
|
||||||
* GtkStack:
|
* GtkPasswordEntry:
|
||||||
- Add gtk_stack_add_child
|
- Add an ::activate signal
|
||||||
|
|
||||||
* GtkTextView:
|
* GtkTextView:
|
||||||
- Fix dnd
|
- Fix dnd
|
||||||
@@ -330,12 +22,28 @@ Overview of Changes in GTK 3.99.2
|
|||||||
- Make clickable links work again
|
- Make clickable links work again
|
||||||
- Fix handling of anchored children
|
- Fix handling of anchored children
|
||||||
|
|
||||||
|
* GtkRevealer:
|
||||||
|
- Fix clipping issues in the swing transitions
|
||||||
|
|
||||||
|
* GtkColorChooser:
|
||||||
|
- Update the default palette
|
||||||
|
|
||||||
|
* GtkFileChooser:
|
||||||
|
- Fix a crash
|
||||||
|
- Fix setting unlisted filters
|
||||||
|
|
||||||
|
* GtkFontChooser:
|
||||||
|
- Determine sample text based on font coverage
|
||||||
|
- Allow filtering by language
|
||||||
|
|
||||||
|
* GtkStack:
|
||||||
|
- Add gtk_stack_add_child
|
||||||
|
|
||||||
* GtkVideo:
|
* GtkVideo:
|
||||||
- Make autoplay work
|
- Make autoplay work
|
||||||
|
|
||||||
* CSS:
|
* CSS:
|
||||||
- Allow more than 64 selectors per rule
|
- Allow more than 64 selectors per rule
|
||||||
- Avoid some allocation overhead
|
|
||||||
|
|
||||||
* Adwaita:
|
* Adwaita:
|
||||||
- Improve gesture graphics
|
- Improve gesture graphics
|
||||||
@@ -344,20 +52,15 @@ Overview of Changes in GTK 3.99.2
|
|||||||
|
|
||||||
* GDK:
|
* GDK:
|
||||||
- Add gdk_frame_clock_get_fps
|
- Add gdk_frame_clock_get_fps
|
||||||
- GLES: Fix color channel mixup in textures
|
|
||||||
- GL: Reduce image copying for texture uploads
|
|
||||||
|
|
||||||
* GSK:
|
* GSK:
|
||||||
- Add radial gradient nodes
|
- Add radial gradient nodes
|
||||||
- Add GskGLShader and shader nodes
|
|
||||||
|
|
||||||
* GL renderer:
|
* GL renderer:
|
||||||
- Fix clipping with projective transforms
|
- Fix clipping with projective transforms
|
||||||
- Use linear interpolation for offscreen rendering
|
- Use linear interpolation for offscreen rendering
|
||||||
with non-axis-aligned transforms
|
with non-axis-aligned transforms
|
||||||
- Fix texture caching to avoid size mismatches
|
- Fix texture caching to avoid size mismatches
|
||||||
- Avoid downloading GL textures when possible,
|
|
||||||
improving GtkGLArea performance
|
|
||||||
|
|
||||||
* Vulkan renderer:
|
* Vulkan renderer:
|
||||||
- Fix swapchain creation
|
- Fix swapchain creation
|
||||||
@@ -367,26 +70,18 @@ Overview of Changes in GTK 3.99.2
|
|||||||
|
|
||||||
* Wayland
|
* Wayland
|
||||||
- Always ack configure to avoid jumping windows
|
- Always ack configure to avoid jumping windows
|
||||||
- Use the primary-selection-unstable-v1 protocol
|
|
||||||
|
|
||||||
* API cleanups:
|
* API cleanups:
|
||||||
- Make filter and sorter constructors return exact types
|
- Make filter and sorter constructors return exact types
|
||||||
- Rename GdkSurfaceState to GdkToplevelState
|
- Rename GdkSurfaceState to GdkToplevelState
|
||||||
- Remove GdkWaylandSurface::committed
|
- Remove GdkWaylandSurface::committed
|
||||||
- Make Wayland backend api take GdkToplevel
|
- Make Wayland backend api take GdkToplevel
|
||||||
- Drop gtk_widget_new
|
|
||||||
- Drop cairo_surface_upload_to_gl
|
|
||||||
- Drop gtk_scrolled_window_set_capture_button_press
|
|
||||||
- Drop gtk_column_view_column_new_with_factory
|
|
||||||
- Rename gtk_buildable_set_name to gtk_buildable_set_buildable_id
|
|
||||||
- Drop other GtkBuildable api
|
|
||||||
|
|
||||||
* Demos:
|
* Demos:
|
||||||
- Bug and crash fixes
|
- Bug and crash fixes
|
||||||
- Cosmetic improvements for several demos
|
- Cosmetic improvements for several demos
|
||||||
- Improve search in the sidebar
|
- Improve search in the sidebar
|
||||||
- Add a Shadertoy demo
|
- Add a Shadertoy demo
|
||||||
- Add a OpenGL transitions demo
|
|
||||||
- Add an Emblem demo
|
- Add an Emblem demo
|
||||||
- Add a demo for input validation and error states
|
- Add a demo for input validation and error states
|
||||||
- Add a demo for context menus
|
- Add a demo for context menus
|
||||||
@@ -406,7 +101,6 @@ Overview of Changes in GTK 3.99.2
|
|||||||
French
|
French
|
||||||
Galician
|
Galician
|
||||||
German
|
German
|
||||||
Hebrew
|
|
||||||
Hungarian
|
Hungarian
|
||||||
Indonesian
|
Indonesian
|
||||||
Italian
|
Italian
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -17,7 +17,7 @@ license fees or royalties.
|
|||||||
|
|
||||||
The official download location
|
The official download location
|
||||||
|
|
||||||
- https://download.gnome.org/sources/gtk/
|
- https://download.gnome.org/sources/gtk+
|
||||||
|
|
||||||
The official web site
|
The official web site
|
||||||
|
|
||||||
@@ -49,11 +49,11 @@ In order to build GTK you will need:
|
|||||||
You will also need various dependencies, based on the platform you are
|
You will also need various dependencies, based on the platform you are
|
||||||
building for:
|
building for:
|
||||||
|
|
||||||
- [GLib](https://download.gnome.org/sources/glib/)
|
- [GLib](https://download.gnome.org/sources/glib)
|
||||||
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf/)
|
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf)
|
||||||
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection/)
|
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection)
|
||||||
- [Cairo](https://www.cairographics.org/)
|
- [Cairo](https://www.cairographics.org)
|
||||||
- [Pango](https://download.gnome.org/sources/pango/)
|
- [Pango](https://download.gnome.org/sources/pango)
|
||||||
- [Epoxy](https://github.com/anholt/libepoxy)
|
- [Epoxy](https://github.com/anholt/libepoxy)
|
||||||
- [Graphene](https://github.com/ebassi/graphene)
|
- [Graphene](https://github.com/ebassi/graphene)
|
||||||
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
||||||
|
|||||||
@@ -1,21 +1,20 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
if 'DESTDIR' not in os.environ:
|
if 'DESTDIR' not in os.environ:
|
||||||
gtk_api_version = sys.argv[1]
|
gtk_api_version = sys.argv[1]
|
||||||
gtk_abi_version = sys.argv[2]
|
gtk_abi_version = sys.argv[2]
|
||||||
gtk_libdir = sys.argv[3]
|
gtk_libdir = sys.argv[3]
|
||||||
gtk_datadir = sys.argv[4]
|
gtk_datadir = sys.argv[4]
|
||||||
gtk_bindir = sys.argv[5]
|
|
||||||
|
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
||||||
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
||||||
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
||||||
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
|
||||||
|
print('Compiling GSettings schemas...')
|
||||||
print('Compiling GSettings schemas...')
|
|
||||||
glib_compile_schemas = subprocess.check_output(['pkg-config',
|
glib_compile_schemas = subprocess.check_output(['pkg-config',
|
||||||
'--variable=glib_compile_schemas',
|
'--variable=glib_compile_schemas',
|
||||||
'gio-2.0']).strip()
|
'gio-2.0']).strip()
|
||||||
@@ -23,14 +22,13 @@ if 'DESTDIR' not in os.environ:
|
|||||||
# pkg-config variables only available since GLib 2.62.0.
|
# pkg-config variables only available since GLib 2.62.0.
|
||||||
glib_compile_schemas = 'glib-compile-schemas'
|
glib_compile_schemas = 'glib-compile-schemas'
|
||||||
subprocess.call([glib_compile_schemas,
|
subprocess.call([glib_compile_schemas,
|
||||||
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
||||||
|
|
||||||
print('Updating icon cache...')
|
print('Updating icon cache...')
|
||||||
update_icon_cache = os.path.join(gtk_bindir, 'gtk4-update-icon-cache')
|
subprocess.call(['gtk4-update-icon-cache', '-q', '-t' ,'-f',
|
||||||
subprocess.call([update_icon_cache, '-q', '-t' ,'-f',
|
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
||||||
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
|
||||||
|
print('Updating module cache for print backends...')
|
||||||
print('Updating module cache for print backends...')
|
|
||||||
os.makedirs(gtk_printmodule_dir, exist_ok=True)
|
os.makedirs(gtk_printmodule_dir, exist_ok=True)
|
||||||
gio_querymodules = subprocess.check_output(['pkg-config',
|
gio_querymodules = subprocess.check_output(['pkg-config',
|
||||||
'--variable=gio_querymodules',
|
'--variable=gio_querymodules',
|
||||||
@@ -39,7 +37,7 @@ if 'DESTDIR' not in os.environ:
|
|||||||
# pkg-config variables only available since GLib 2.62.0.
|
# pkg-config variables only available since GLib 2.62.0.
|
||||||
gio_querymodules = 'gio-querymodules'
|
gio_querymodules = 'gio-querymodules'
|
||||||
subprocess.call([gio_querymodules, gtk_printmodule_dir])
|
subprocess.call([gio_querymodules, gtk_printmodule_dir])
|
||||||
|
|
||||||
print('Updating module cache for input methods...')
|
print('Updating module cache for input methods...')
|
||||||
os.makedirs(gtk_immodule_dir, exist_ok=True)
|
os.makedirs(gtk_immodule_dir, exist_ok=True)
|
||||||
subprocess.call([gio_querymodules, gtk_immodule_dir])
|
subprocess.call([gio_querymodules, gtk_immodule_dir])
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
/* always defined to indicate that i18n is enabled */
|
/* always defined to indicate that i18n is enabled */
|
||||||
#define ENABLE_NLS 1
|
#define ENABLE_NLS 1
|
||||||
|
|
||||||
/* Use structured logging */
|
|
||||||
#define G_LOG_STRUCTURED 1
|
|
||||||
|
|
||||||
/* The prefix for our gettext translation domains. */
|
/* The prefix for our gettext translation domains. */
|
||||||
#mesondefine GETTEXT_PACKAGE
|
#mesondefine GETTEXT_PACKAGE
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ struct _ConstraintEditorWindow
|
|||||||
G_DEFINE_TYPE(ConstraintEditorWindow, constraint_editor_window, GTK_TYPE_APPLICATION_WINDOW);
|
G_DEFINE_TYPE(ConstraintEditorWindow, constraint_editor_window, GTK_TYPE_APPLICATION_WINDOW);
|
||||||
|
|
||||||
static GtkConstraintTarget *
|
static GtkConstraintTarget *
|
||||||
find_target (GListModel *model,
|
find_target (GListModel *model,
|
||||||
GtkConstraintTarget *orig)
|
GtkConstraintTarget *orig)
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -163,30 +163,20 @@ constraint_editor_window_load (ConstraintEditorWindow *self,
|
|||||||
GtkConstraint *clone;
|
GtkConstraint *clone;
|
||||||
GtkConstraintTarget *target;
|
GtkConstraintTarget *target;
|
||||||
GtkConstraintTarget *source;
|
GtkConstraintTarget *source;
|
||||||
GtkConstraintAttribute source_attr;
|
|
||||||
|
|
||||||
item = g_list_model_get_item (list, i);
|
item = g_list_model_get_item (list, i);
|
||||||
constraint = GTK_CONSTRAINT (item);
|
constraint = GTK_CONSTRAINT (item);
|
||||||
|
|
||||||
target = gtk_constraint_get_target (constraint);
|
target = gtk_constraint_get_target (constraint);
|
||||||
source = gtk_constraint_get_source (constraint);
|
source = gtk_constraint_get_source (constraint);
|
||||||
source_attr = gtk_constraint_get_source_attribute (constraint);
|
clone = gtk_constraint_new (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
|
||||||
|
|
||||||
if (source == NULL && source_attr == GTK_CONSTRAINT_ATTRIBUTE_NONE)
|
|
||||||
clone = gtk_constraint_new_constant (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
|
|
||||||
gtk_constraint_get_target_attribute (constraint),
|
gtk_constraint_get_target_attribute (constraint),
|
||||||
gtk_constraint_get_relation (constraint),
|
gtk_constraint_get_relation (constraint),
|
||||||
|
find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), source),
|
||||||
|
gtk_constraint_get_target_attribute (constraint),
|
||||||
|
gtk_constraint_get_multiplier (constraint),
|
||||||
gtk_constraint_get_constant (constraint),
|
gtk_constraint_get_constant (constraint),
|
||||||
gtk_constraint_get_strength (constraint));
|
gtk_constraint_get_strength (constraint));
|
||||||
else
|
|
||||||
clone = gtk_constraint_new (find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), target),
|
|
||||||
gtk_constraint_get_target_attribute (constraint),
|
|
||||||
gtk_constraint_get_relation (constraint),
|
|
||||||
find_target (constraint_view_get_model (CONSTRAINT_VIEW (self->view)), source),
|
|
||||||
source_attr,
|
|
||||||
gtk_constraint_get_multiplier (constraint),
|
|
||||||
gtk_constraint_get_constant (constraint),
|
|
||||||
gtk_constraint_get_strength (constraint));
|
|
||||||
|
|
||||||
constraint_view_add_constraint (CONSTRAINT_VIEW (self->view), clone);
|
constraint_view_add_constraint (CONSTRAINT_VIEW (self->view), clone);
|
||||||
|
|
||||||
@@ -310,7 +300,7 @@ save_response_cb (GtkNativeDialog *dialog,
|
|||||||
model = constraint_view_get_model (CONSTRAINT_VIEW (self->view));
|
model = constraint_view_get_model (CONSTRAINT_VIEW (self->view));
|
||||||
text = serialize_model (model);
|
text = serialize_model (model);
|
||||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
||||||
g_file_replace_contents (file, text, strlen (text),
|
g_file_replace_contents (file, text, -1,
|
||||||
NULL, FALSE,
|
NULL, FALSE,
|
||||||
G_FILE_CREATE_NONE,
|
G_FILE_CREATE_NONE,
|
||||||
NULL,
|
NULL,
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<template class="ConstraintEditorWindow" parent="GtkApplicationWindow">
|
<template class="ConstraintEditorWindow" parent="GtkApplicationWindow">
|
||||||
|
<style>
|
||||||
|
<class name="devel"/>
|
||||||
|
</style>
|
||||||
<property name="title" translatable="yes">GTK Constraint Editor</property>
|
<property name="title" translatable="yes">GTK Constraint Editor</property>
|
||||||
<property name="default-width">1024</property>
|
<property name="default-width">1024</property>
|
||||||
<property name="default-height">768</property>
|
<property name="default-height">768</property>
|
||||||
|
|||||||
@@ -142,9 +142,6 @@ get_target (GListModel *model,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (id == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (strcmp ("super", id) == 0)
|
if (strcmp ("super", id) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -215,22 +212,6 @@ get_relation_nick (GtkConstraintRelation relation)
|
|||||||
return nick;
|
return nick;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
get_relation_display_name (GtkConstraintRelation relation)
|
|
||||||
{
|
|
||||||
switch (relation)
|
|
||||||
{
|
|
||||||
case GTK_CONSTRAINT_RELATION_LE:
|
|
||||||
return "≤";
|
|
||||||
case GTK_CONSTRAINT_RELATION_EQ:
|
|
||||||
return "=";
|
|
||||||
case GTK_CONSTRAINT_RELATION_GE:
|
|
||||||
return "≥";
|
|
||||||
default:
|
|
||||||
return "?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkConstraintStrength
|
static GtkConstraintStrength
|
||||||
get_strength (const char *id)
|
get_strength (const char *id)
|
||||||
{
|
{
|
||||||
@@ -350,7 +331,6 @@ source_attr_changed (ConstraintEditor *editor)
|
|||||||
{
|
{
|
||||||
gtk_widget_set_sensitive (editor->source, TRUE);
|
gtk_widget_set_sensitive (editor->source, TRUE);
|
||||||
gtk_widget_set_sensitive (editor->multiplier, TRUE);
|
gtk_widget_set_sensitive (editor->multiplier, TRUE);
|
||||||
gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "1");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,7 +347,7 @@ constraint_editor_constraint_to_string (GtkConstraint *constraint)
|
|||||||
|
|
||||||
name = get_target_name (gtk_constraint_get_target (constraint));
|
name = get_target_name (gtk_constraint_get_target (constraint));
|
||||||
attr = get_attr_nick (gtk_constraint_get_target_attribute (constraint));
|
attr = get_attr_nick (gtk_constraint_get_target_attribute (constraint));
|
||||||
relation = get_relation_display_name (gtk_constraint_get_relation (constraint));
|
relation = get_relation_nick (gtk_constraint_get_relation (constraint));
|
||||||
|
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
name = "[ ]";
|
name = "[ ]";
|
||||||
@@ -461,12 +441,8 @@ update_preview (ConstraintEditor *editor)
|
|||||||
static void
|
static void
|
||||||
update_button (ConstraintEditor *editor)
|
update_button (ConstraintEditor *editor)
|
||||||
{
|
{
|
||||||
const char *target = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target));
|
if (gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target)) != NULL &&
|
||||||
const char *source = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source));
|
gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source)) != NULL)
|
||||||
const char *source_attr = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
|
|
||||||
|
|
||||||
if (target &&
|
|
||||||
(source || (source_attr && get_target_attr (source_attr) == GTK_CONSTRAINT_ATTRIBUTE_NONE)))
|
|
||||||
gtk_widget_set_sensitive (editor->button, TRUE);
|
gtk_widget_set_sensitive (editor->button, TRUE);
|
||||||
else
|
else
|
||||||
gtk_widget_set_sensitive (editor->button, FALSE);
|
gtk_widget_set_sensitive (editor->button, FALSE);
|
||||||
|
|||||||
@@ -78,7 +78,6 @@
|
|||||||
<object class="GtkComboBoxText" id="source_attr">
|
<object class="GtkComboBoxText" id="source_attr">
|
||||||
<signal name="changed" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="changed" handler="source_attr_changed" swapped="yes"/>
|
<signal name="changed" handler="source_attr_changed" swapped="yes"/>
|
||||||
<signal name="changed" handler="update_button" swapped="yes"/>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="column">2</property>
|
||||||
<property name="row">3</property>
|
<property name="row">3</property>
|
||||||
|
|||||||
@@ -8,16 +8,14 @@ constraint_editor_sources = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
constraint_editor_resources = gnome.compile_resources('constraint_editor_resources',
|
constraint_editor_resources = gnome.compile_resources('constraint_editor_resources',
|
||||||
'constraint-editor.gresource.xml',
|
'constraint-editor.gresource.xml',
|
||||||
source_dir: '.',
|
source_dir: '.')
|
||||||
)
|
|
||||||
|
|
||||||
executable('gtk4-constraint-editor',
|
executable('gtk4-constraint-editor',
|
||||||
sources: [ constraint_editor_sources, constraint_editor_resources, ],
|
constraint_editor_sources, constraint_editor_resources,
|
||||||
c_args: common_cflags,
|
c_args: common_cflags,
|
||||||
dependencies: libgtk_dep,
|
dependencies: libgtk_dep,
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
gui_app: true,
|
gui_app: true,
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
install: false,
|
install: false)
|
||||||
)
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ vec2 raySphere(vec3 ro, vec3 rd, vec4 sphere) {
|
|||||||
return vec2(t0, t1);
|
return vec2(t0, t1);
|
||||||
}
|
}
|
||||||
|
|
||||||
float noize1(vec2 p) {
|
float noise1(vec2 p) {
|
||||||
vec2 n = mod2(p, vec2(cellWidth));
|
vec2 n = mod2(p, vec2(cellWidth));
|
||||||
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
||||||
hh.x *= hh.y;
|
hh.x *= hh.y;
|
||||||
@@ -81,7 +81,7 @@ float noize1(vec2 p) {
|
|||||||
return h*0.25;
|
return h*0.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
float noize2(vec2 p) {
|
float noise2(vec2 p) {
|
||||||
vec2 n = mod2(p, vec2(cellWidth));
|
vec2 n = mod2(p, vec2(cellWidth));
|
||||||
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
vec2 hh = hash(sqrt(2.0)*(n+1000.0));
|
||||||
hh.x *= hh.y;
|
hh.x *= hh.y;
|
||||||
@@ -114,7 +114,7 @@ float height(vec2 p, float dd, int mx) {
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
for (; i < 4;++i) {
|
for (; i < 4;++i) {
|
||||||
float nn = a*noize2(p);
|
float nn = a*noise2(p);
|
||||||
s += nn;
|
s += nn;
|
||||||
d += abs(a);
|
d += abs(a);
|
||||||
p += o;
|
p += o;
|
||||||
@@ -130,7 +130,7 @@ float height(vec2 p, float dd, int mx) {
|
|||||||
mx = int(mix(float(4), float(mx), step(rdd, far)));
|
mx = int(mix(float(4), float(mx), step(rdd, far)));
|
||||||
|
|
||||||
for (; i < mx; ++i) {
|
for (; i < mx; ++i) {
|
||||||
float nn = a*noize1(p);
|
float nn = a*noise1(p);
|
||||||
s += nn;
|
s += nn;
|
||||||
d += abs(a);
|
d += abs(a);
|
||||||
p += o;
|
p += o;
|
||||||
|
|||||||
@@ -465,7 +465,7 @@ demo_application_window_size_allocate (GtkWidget *widget,
|
|||||||
baseline);
|
baseline);
|
||||||
|
|
||||||
if (!window->maximized && !window->fullscreen)
|
if (!window->maximized && !window->fullscreen)
|
||||||
gtk_window_get_default_size (GTK_WINDOW (window), &window->width, &window->height);
|
gtk_window_get_size (GTK_WINDOW (window), &window->width, &window->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
uniform float u_time;
|
|
||||||
|
|
||||||
void
|
|
||||||
mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
|
|
||||||
{
|
|
||||||
vec2 pos = (fragCoord.xy * 2.0 - resolution.xy)/ min (resolution.x, resolution.y) ;
|
|
||||||
|
|
||||||
float t0 = sin ((u_time + 0.00)*1.0);
|
|
||||||
float t1 = sin ((u_time + 0.30)*0.4);
|
|
||||||
float t2 = cos ((u_time + 0.23)*0.9);
|
|
||||||
float t3 = cos ((u_time + 0.41)*0.6);
|
|
||||||
float t4 = cos ((u_time + 0.11)*0.3);
|
|
||||||
|
|
||||||
vec2 p0 = vec2 (t1, t0) ;
|
|
||||||
vec2 p1 = vec2 (t2, t3) ;
|
|
||||||
vec2 p2 = vec2 (t4, t3) ;
|
|
||||||
|
|
||||||
float r = 1.0/distance (pos, p0);
|
|
||||||
float g = 1.0/distance (pos, p1);
|
|
||||||
float b = 1.0/distance (pos, p2);
|
|
||||||
float sum = r + g + b;
|
|
||||||
|
|
||||||
float alpha = 1.0 - pow (1.0/(sum), 40.0)*pow (10.0, 40.0*0.7);
|
|
||||||
|
|
||||||
fragColor = vec4 (r*0.5, g*0.5, b*0.5, 1.0) * alpha;
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.20"/>
|
||||||
<object class="GtkWindow" id="window">
|
<object class="GtkWindow" id="window">
|
||||||
<property name="resizable">0</property>
|
<property name="resizable">0</property>
|
||||||
<property name="title">CSS Blend Modes</property>
|
<property name="title">CSS Blend Modes</property>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Builder
|
/* Builder
|
||||||
* #Keywords: GMenu, GtkPopoverMenuBar, GtkBuilder, GtkStatusBar, GtkShortcutController, toolbar
|
* #Keywords: GMenu, GtkPopoverMenuBar, GtkBuilder, GtkStatusBar, toolbar
|
||||||
*
|
*
|
||||||
* Demonstrates a traditional interface, loaded from a XML description,
|
* Demonstrates a traditional interface, loaded from a XML description,
|
||||||
* and shows how to connect actions to the menu items and toolbar buttons.
|
* and shows how to connect actions to the menu items and toolbar buttons.
|
||||||
@@ -158,6 +158,7 @@ do_builder (GtkWidget *do_widget)
|
|||||||
about = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
|
about = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (window));
|
gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (window));
|
||||||
gtk_window_set_hide_on_close (GTK_WINDOW (about), TRUE);
|
gtk_window_set_hide_on_close (GTK_WINDOW (about), TRUE);
|
||||||
|
g_signal_connect (about, "response", G_CALLBACK (gtk_widget_hide), NULL);
|
||||||
g_object_set_data_full (G_OBJECT (window), "about",
|
g_object_set_data_full (G_OBJECT (window), "about",
|
||||||
about, (GDestroyNotify)gtk_window_destroy);
|
about, (GDestroyNotify)gtk_window_destroy);
|
||||||
|
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ float ccell2(vec2 p, float r) {
|
|||||||
float df(vec2 p, float scale, inout vec2 nn) {
|
float df(vec2 p, float scale, inout vec2 nn) {
|
||||||
p /= scale;
|
p /= scale;
|
||||||
nn = hextile(p);
|
nn = hextile(p);
|
||||||
nn = floor(nn + 0.5);
|
nn = round(nn);
|
||||||
float r = hash(nn);
|
float r = hash(nn);
|
||||||
|
|
||||||
float d;;
|
float d;;
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ float ccell2(vec2 p, float r) {
|
|||||||
float df(vec2 p, float scale, inout vec2 nn) {
|
float df(vec2 p, float scale, inout vec2 nn) {
|
||||||
p /= scale;
|
p /= scale;
|
||||||
nn = hextile(p);
|
nn = hextile(p);
|
||||||
nn = floor(nn + 0.5);
|
nn = round(nn);
|
||||||
float r = hash(nn);
|
float r = hash(nn);
|
||||||
|
|
||||||
float d;;
|
float d;;
|
||||||
|
|||||||
@@ -1,16 +1,9 @@
|
|||||||
/* Constraints/Simple Constraints
|
/* Constraints/Simple
|
||||||
* #Keywords: GtkLayoutManager
|
* #Keywords: GtkLayoutManager
|
||||||
*
|
*
|
||||||
* GtkConstraintLayout provides a layout manager that uses relations
|
* GtkConstraintLayout provides a layout manager that uses relations
|
||||||
* between widgets (also known as “constraints”) to compute the position
|
* between widgets (also known as "constraints") to compute the position
|
||||||
* and size of each child.
|
* and size of each child.
|
||||||
*
|
|
||||||
* In addition to child widgets, the constraints can involve spacer
|
|
||||||
* objects (also known as “guides”). This example has a guide between
|
|
||||||
* the two buttons in the top row.
|
|
||||||
*
|
|
||||||
* Try resizing the window to see how the constraints react to update
|
|
||||||
* the layout.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
@@ -241,12 +234,15 @@ simple_grid_init (SimpleGrid *self)
|
|||||||
|
|
||||||
self->button1 = gtk_button_new_with_label ("Child 1");
|
self->button1 = gtk_button_new_with_label ("Child 1");
|
||||||
gtk_widget_set_parent (self->button1, widget);
|
gtk_widget_set_parent (self->button1, widget);
|
||||||
|
gtk_widget_set_name (self->button1, "button1");
|
||||||
|
|
||||||
self->button2 = gtk_button_new_with_label ("Child 2");
|
self->button2 = gtk_button_new_with_label ("Child 2");
|
||||||
gtk_widget_set_parent (self->button2, widget);
|
gtk_widget_set_parent (self->button2, widget);
|
||||||
|
gtk_widget_set_name (self->button2, "button2");
|
||||||
|
|
||||||
self->button3 = gtk_button_new_with_label ("Child 3");
|
self->button3 = gtk_button_new_with_label ("Child 3");
|
||||||
gtk_widget_set_parent (self->button3, widget);
|
gtk_widget_set_parent (self->button3, widget);
|
||||||
|
gtk_widget_set_name (self->button3, "button3");
|
||||||
|
|
||||||
GtkLayoutManager *manager = gtk_widget_get_layout_manager (GTK_WIDGET (self));
|
GtkLayoutManager *manager = gtk_widget_get_layout_manager (GTK_WIDGET (self));
|
||||||
build_constraints (self, GTK_CONSTRAINT_LAYOUT (manager));
|
build_constraints (self, GTK_CONSTRAINT_LAYOUT (manager));
|
||||||
@@ -263,8 +259,7 @@ do_constraints (GtkWidget *do_widget)
|
|||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Simple Constraints");
|
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Constraints/Interactive Constraints
|
/* Constraints/Interactive
|
||||||
* #Keywords: GtkConstraintLayout
|
* #Keywords: GtkConstraintLayout
|
||||||
*
|
*
|
||||||
* This example shows how constraints can be updated during user interaction.
|
* Demonstrate how constraints can be updates during user interaction.
|
||||||
* The vertical edge between the buttons can be dragged with the mouse.
|
* The vertical edge between the buttons can be dragged with the mouse.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ interactive_grid_init (InteractiveGrid *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_constraints_interactive (GtkWidget *do_widget)
|
do_constraints2 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window;
|
static GtkWidget *window;
|
||||||
|
|
||||||
@@ -215,8 +215,7 @@ do_constraints_interactive (GtkWidget *do_widget)
|
|||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Interactive Constraints");
|
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
@@ -2,10 +2,6 @@
|
|||||||
*
|
*
|
||||||
* GtkConstraintLayout allows defining constraints using a
|
* GtkConstraintLayout allows defining constraints using a
|
||||||
* compact syntax called Visual Format Language, or VFL.
|
* compact syntax called Visual Format Language, or VFL.
|
||||||
*
|
|
||||||
* A typical example of a VFL specification looks like this:
|
|
||||||
*
|
|
||||||
* H:|-[button1(==button2)]-12-[button2]-|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
@@ -128,7 +124,7 @@ vfl_grid_init (VflGrid *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_constraints_vfl (GtkWidget *do_widget)
|
do_constraints3 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window;
|
static GtkWidget *window;
|
||||||
|
|
||||||
@@ -138,8 +134,7 @@ do_constraints_vfl (GtkWidget *do_widget)
|
|||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Constraints — VFL");
|
gtk_window_set_title (GTK_WINDOW (window), "Constraints");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/* Constraints/Builder
|
|
||||||
*
|
|
||||||
* GtkConstraintLayouts can be created in .ui files, and constraints can
|
|
||||||
* be set up at that time as well, as this example demonstrates. It shows
|
|
||||||
* various ways to do spacing and sizing with constraints.
|
|
||||||
*
|
|
||||||
* Make the window wider to see the rows react differently
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (ConstraintsGrid, constraints_grid, CONSTRAINTS, GRID, GtkWidget)
|
|
||||||
|
|
||||||
struct _ConstraintsGrid
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (ConstraintsGrid, constraints_grid, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static void
|
|
||||||
constraints_grid_init (ConstraintsGrid *grid)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
constraints_grid_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
GtkWidget *widget = GTK_WIDGET (object);
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
while ((child = gtk_widget_get_first_child (widget)))
|
|
||||||
gtk_widget_unparent (child);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (constraints_grid_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
constraints_grid_class_init (ConstraintsGridClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->dispose = constraints_grid_dispose;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_constraints_builder (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
static GtkWidget *window;
|
|
||||||
|
|
||||||
if (!window)
|
|
||||||
{
|
|
||||||
GtkBuilder *builder;
|
|
||||||
|
|
||||||
g_type_ensure (constraints_grid_get_type ());
|
|
||||||
|
|
||||||
builder = gtk_builder_new_from_resource ("/constraints_builder/constraints_builder.ui");
|
|
||||||
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
|
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
|
||||||
gtk_widget_get_display (do_widget));
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_widget_show (window);
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
||||||
@@ -1,460 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<object class="GtkWindow" id="window1">
|
|
||||||
<property name="title" translatable="yes">Constraints — Builder</property>
|
|
||||||
<property name="default-width">260</property>
|
|
||||||
<child>
|
|
||||||
<object class="ConstraintsGrid">
|
|
||||||
<property name="halign">fill</property>
|
|
||||||
<property name="valign">fill</property>
|
|
||||||
<property name="margin-top">10</property>
|
|
||||||
<property name="margin-bottom">10</property>
|
|
||||||
<property name="margin-start">10</property>
|
|
||||||
<property name="margin-end">10</property>
|
|
||||||
<property name="layout-manager">
|
|
||||||
<object class="GtkConstraintLayout">
|
|
||||||
<constraints>
|
|
||||||
<guide name="guide1" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide2" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide3" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide4" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide5" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide6" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide7" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide8" min-width="10" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide9" min-width="0" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="guide10" min-width="0" nat-width="200" strength="weak"/>
|
|
||||||
<guide name="barrier1" min-height="10"/>
|
|
||||||
<guide name="barrier2" min-height="10"/>
|
|
||||||
<guide name="barrier3" min-height="10"/>
|
|
||||||
<guide name="barrier4" min-height="10"/>
|
|
||||||
|
|
||||||
<!-- Spread Chain -->
|
|
||||||
<constraint target="super" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="button1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="button2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="button3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide1" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button1" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide1" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide2" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button1" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button2" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide2" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide3" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button2" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button3" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide3" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide4" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button3" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="guide4" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide1" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide2" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide2" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide3" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide3" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide4" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button1" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button2" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button2" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button3" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button1" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button2" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button3" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Spread Inside Chain -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button4" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide5" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button4" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide5" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide6" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button5" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button6" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide6" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="button6" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide5" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide6" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button4" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button5" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button6" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button4" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button6" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier1" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button4" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button5" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button6" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Weighted Chain -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button8" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button8" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="button9" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button8" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="width"
|
|
||||||
multiplier="2"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button7" source-attribute="width"
|
|
||||||
multiplier="3"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button7" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button8" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier2" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button7" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button8" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button9" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Packed Chain -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide7" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button10" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide7" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button10" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button12" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button11" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide8" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button12" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="guide8" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide7" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide8" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button10" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button11" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button12" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button10" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button12" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier3" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button10" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button11" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button12" target-attribute="bottom"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="top"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<!-- Packed Chain with Bias -->
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide9" source-attribute="left"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button13" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="guide9" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button14" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button13" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button15" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button14" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="guide10" target-attribute="left"
|
|
||||||
relation="eq"
|
|
||||||
source="button15" source-attribute="right"
|
|
||||||
constant="10"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="right"
|
|
||||||
relation="eq"
|
|
||||||
source="guide10" source-attribute="right"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="guide9" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="guide10" source-attribute="width"
|
|
||||||
multiplier="4"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button13" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button14" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button14" target-attribute="width"
|
|
||||||
relation="eq"
|
|
||||||
source="button15" source-attribute="width"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="button13" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button14" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="button15" target-attribute="top"
|
|
||||||
relation="eq"
|
|
||||||
source="barrier4" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
|
|
||||||
<constraint target="super" target-attribute="bottom"
|
|
||||||
relation="ge"
|
|
||||||
source="button13" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="bottom"
|
|
||||||
relation="ge"
|
|
||||||
source="button14" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
<constraint target="super" target-attribute="bottom"
|
|
||||||
relation="ge"
|
|
||||||
source="button15" source-attribute="bottom"
|
|
||||||
strength="required"/>
|
|
||||||
</constraints>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button1">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button2">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button3">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button4">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button5">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button6">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button7">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button8">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button9">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button10">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button11">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button12">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button13">
|
|
||||||
<property name="label">A</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button14">
|
|
||||||
<property name="label">B</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="button15">
|
|
||||||
<property name="label">C</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
||||||
@@ -18,9 +18,6 @@
|
|||||||
<file>demoimage.c</file>
|
<file>demoimage.c</file>
|
||||||
<file>demoimage.h</file>
|
<file>demoimage.h</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/constraints_builder">
|
|
||||||
<file>constraints_builder.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/css_accordion">
|
<gresource prefix="/css_accordion">
|
||||||
<file>css_accordion.css</file>
|
<file>css_accordion.css</file>
|
||||||
<file>reset.css</file>
|
<file>reset.css</file>
|
||||||
@@ -43,11 +40,6 @@
|
|||||||
<file>cssview.css</file>
|
<file>cssview.css</file>
|
||||||
<file>reset.css</file>
|
<file>reset.css</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/dropdown">
|
|
||||||
<file>suggestionentry.h</file>
|
|
||||||
<file>suggestionentry.c</file>
|
|
||||||
<file>suggestionentry.css</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/theming_style_classes">
|
<gresource prefix="/theming_style_classes">
|
||||||
<file>theming.ui</file>
|
<file>theming.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
@@ -146,15 +138,12 @@
|
|||||||
<file>gtkshaderstack.h</file>
|
<file>gtkshaderstack.h</file>
|
||||||
<file>gtkshaderbin.h</file>
|
<file>gtkshaderbin.h</file>
|
||||||
<file>gtkshaderbin.c</file>
|
<file>gtkshaderbin.c</file>
|
||||||
<file>gskshaderpaintable.h</file>
|
<file>fire.glsl</file>
|
||||||
<file>gskshaderpaintable.c</file>
|
<file>transition1.glsl</file>
|
||||||
<file>wind.glsl</file>
|
<file>transition2.glsl</file>
|
||||||
<file>radial.glsl</file>
|
<file>transition3.glsl</file>
|
||||||
<file>crosswarp.glsl</file>
|
<file>transition4.glsl</file>
|
||||||
<file>kaleidoscope.glsl</file>
|
|
||||||
<file>cogs2.glsl</file>
|
<file>cogs2.glsl</file>
|
||||||
<file>ripple.glsl</file>
|
|
||||||
<file>background.glsl</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/iconscroll">
|
<gresource prefix="/iconscroll">
|
||||||
<file>iconscroll.ui</file>
|
<file>iconscroll.ui</file>
|
||||||
@@ -192,9 +181,6 @@
|
|||||||
<gresource prefix="/listview_settings">
|
<gresource prefix="/listview_settings">
|
||||||
<file>listview_settings.ui</file>
|
<file>listview_settings.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/listview_ucd_data/">
|
|
||||||
<file>ucdnames.data</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/listview_weather">
|
<gresource prefix="/listview_weather">
|
||||||
<file compressed="true">listview_weather.txt</file>
|
<file compressed="true">listview_weather.txt</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
@@ -212,11 +198,6 @@
|
|||||||
<file>demo3widget.h</file>
|
<file>demo3widget.h</file>
|
||||||
<file>demo3widget.ui</file>
|
<file>demo3widget.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/paintable_svg">
|
|
||||||
<file>svgpaintable.h</file>
|
|
||||||
<file>svgpaintable.c</file>
|
|
||||||
<file>org.gtk.gtk4.NodeEditor.Devel.svg</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/shortcuts">
|
<gresource prefix="/shortcuts">
|
||||||
<file>shortcuts.ui</file>
|
<file>shortcuts.ui</file>
|
||||||
<file>shortcuts-builder.ui</file>
|
<file>shortcuts-builder.ui</file>
|
||||||
@@ -236,12 +217,9 @@
|
|||||||
<file>revealer.ui</file>
|
<file>revealer.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/images">
|
<gresource prefix="/images">
|
||||||
<file>pixbufpaintable.h</file>
|
|
||||||
<file>pixbufpaintable.c</file>
|
|
||||||
<file>alphatest.png</file>
|
<file>alphatest.png</file>
|
||||||
<file>floppybuddy.gif</file>
|
<file>floppybuddy.gif</file>
|
||||||
<file>gtk-logo.webm</file>
|
<file>gtk-logo.webm</file>
|
||||||
<file alias="org.gtk.Demo4.svg">data/scalable/apps/org.gtk.Demo4.svg</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/video-player">
|
<gresource prefix="/video-player">
|
||||||
<file>bbb.png</file>
|
<file>bbb.png</file>
|
||||||
@@ -253,9 +231,8 @@
|
|||||||
<file>clipboard.c</file>
|
<file>clipboard.c</file>
|
||||||
<file>combobox.c</file>
|
<file>combobox.c</file>
|
||||||
<file>constraints.c</file>
|
<file>constraints.c</file>
|
||||||
<file>constraints_interactive.c</file>
|
<file>constraints2.c</file>
|
||||||
<file>constraints_vfl.c</file>
|
<file>constraints3.c</file>
|
||||||
<file>constraints_builder.c</file>
|
|
||||||
<file>css_accordion.c</file>
|
<file>css_accordion.c</file>
|
||||||
<file>css_basics.c</file>
|
<file>css_basics.c</file>
|
||||||
<file>css_blendmodes.c</file>
|
<file>css_blendmodes.c</file>
|
||||||
@@ -294,14 +271,13 @@
|
|||||||
<file>layoutmanager2.c</file>
|
<file>layoutmanager2.c</file>
|
||||||
<file>links.c</file>
|
<file>links.c</file>
|
||||||
<file>listbox.c</file>
|
<file>listbox.c</file>
|
||||||
<file>listbox_controls.c</file>
|
<file>listbox2.c</file>
|
||||||
<file>listview_applauncher.c</file>
|
<file>listview_applauncher.c</file>
|
||||||
<file>listview_colors.c</file>
|
<file>listview_colors.c</file>
|
||||||
<file>listview_clocks.c</file>
|
<file>listview_clocks.c</file>
|
||||||
<file>listview_filebrowser.c</file>
|
<file>listview_filebrowser.c</file>
|
||||||
<file>listview_minesweeper.c</file>
|
<file>listview_minesweeper.c</file>
|
||||||
<file>listview_settings.c</file>
|
<file>listview_settings.c</file>
|
||||||
<file>listview_ucd.c</file>
|
|
||||||
<file>listview_weather.c</file>
|
<file>listview_weather.c</file>
|
||||||
<file>listview_words.c</file>
|
<file>listview_words.c</file>
|
||||||
<file>list_store.c</file>
|
<file>list_store.c</file>
|
||||||
@@ -309,14 +285,13 @@
|
|||||||
<file>markup.c</file>
|
<file>markup.c</file>
|
||||||
<file>menu.c</file>
|
<file>menu.c</file>
|
||||||
<file>overlay.c</file>
|
<file>overlay.c</file>
|
||||||
<file>overlay_decorative.c</file>
|
<file>overlay2.c</file>
|
||||||
<file>paint.c</file>
|
<file>paint.c</file>
|
||||||
<file>pagesetup.c</file>
|
<file>pagesetup.c</file>
|
||||||
<file>paintable.c</file>
|
<file>paintable.c</file>
|
||||||
<file>paintable_animated.c</file>
|
<file>paintable_animated.c</file>
|
||||||
<file>paintable_emblem.c</file>
|
<file>paintable_emblem.c</file>
|
||||||
<file>paintable_mediastream.c</file>
|
<file>paintable_mediastream.c</file>
|
||||||
<file>paintable_svg.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>
|
||||||
@@ -359,8 +334,8 @@
|
|||||||
<file>messages.txt</file>
|
<file>messages.txt</file>
|
||||||
<file>apple-red.png</file>
|
<file>apple-red.png</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/listbox_controls">
|
<gresource prefix="/listbox2">
|
||||||
<file>listbox_controls.ui</file>
|
<file>listbox2.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/glarea">
|
<gresource prefix="/glarea">
|
||||||
<file>glarea-gl.fs.glsl</file>
|
<file>glarea-gl.fs.glsl</file>
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
<object class="GtkAboutDialog" id="aboutdialog1">
|
<object class="GtkAboutDialog" id="aboutdialog1">
|
||||||
<property name="program-name" translatable="yes">Builder demo</property>
|
<property name="program-name" translatable="yes">Builder demo</property>
|
||||||
<property name="logo-icon-name" translatable="yes">org.gtk.Demo4</property>
|
<property name="logo-icon-name" translatable="yes">gtk3-demo</property>
|
||||||
<property name="modal">True</property>
|
<property name="modal">True</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkWindow" id="window1">
|
<object class="GtkWindow" id="window1">
|
||||||
@@ -96,18 +96,13 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkPopoverMenuBar" id="menubar1">
|
<object class="GtkPopoverMenuBar" id="menubar1">
|
||||||
<property name="menu-model">menubar</property>
|
<property name="menu-model">menubar</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Main Menu</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="toolbar1">
|
<object class="GtkBox" id="toolbar1">
|
||||||
<property name="accessible-role">toolbar</property>
|
<style>
|
||||||
<property name="css-classes">toolbar</property>
|
<class name="toolbar"/>
|
||||||
<accessibility>
|
</style>
|
||||||
<property name="label">Toolbar</property>
|
|
||||||
</accessibility>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
<property name="label" translatable="yes">New</property>
|
<property name="label" translatable="yes">New</property>
|
||||||
|
|||||||
@@ -97,9 +97,9 @@ demo3_widget_size_allocate (GtkWidget *widget,
|
|||||||
|
|
||||||
/* Since we are not using a layout manager (who would do this
|
/* Since we are not using a layout manager (who would do this
|
||||||
* for us), we need to allocate a size for our menu by calling
|
* for us), we need to allocate a size for our menu by calling
|
||||||
* gtk_popover_present().
|
* gtk_native_check_resize().
|
||||||
*/
|
*/
|
||||||
gtk_popover_present (GTK_POPOVER (self->menu));
|
gtk_native_check_resize (GTK_NATIVE (self->menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -47,38 +47,6 @@ get_image_paintable (GtkImage *image)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
update_drag_icon (DemoImage *demo,
|
|
||||||
GtkDragIcon *icon)
|
|
||||||
{
|
|
||||||
const char *icon_name;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
GtkWidget *image;
|
|
||||||
|
|
||||||
switch (gtk_image_get_storage_type (GTK_IMAGE (demo->image)))
|
|
||||||
{
|
|
||||||
case GTK_IMAGE_PAINTABLE:
|
|
||||||
paintable = gtk_image_get_paintable (GTK_IMAGE (demo->image));
|
|
||||||
image = gtk_image_new_from_paintable (paintable);
|
|
||||||
break;
|
|
||||||
case GTK_IMAGE_ICON_NAME:
|
|
||||||
icon_name = gtk_image_get_icon_name (GTK_IMAGE (demo->image));
|
|
||||||
image = gtk_image_new_from_icon_name (icon_name);
|
|
||||||
break;
|
|
||||||
case GTK_IMAGE_EMPTY:
|
|
||||||
case GTK_IMAGE_GICON:
|
|
||||||
default:
|
|
||||||
g_warning ("Image storage type %d not handled",
|
|
||||||
gtk_image_get_storage_type (GTK_IMAGE (demo->image)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_image_set_pixel_size (GTK_IMAGE (image),
|
|
||||||
gtk_image_get_pixel_size (GTK_IMAGE (demo->image)));
|
|
||||||
|
|
||||||
gtk_drag_icon_set_child (icon, image);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drag_begin (GtkDragSource *source,
|
drag_begin (GtkDragSource *source,
|
||||||
GdkDrag *drag,
|
GdkDrag *drag,
|
||||||
@@ -86,8 +54,14 @@ drag_begin (GtkDragSource *source,
|
|||||||
{
|
{
|
||||||
GtkWidget *widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (source));
|
GtkWidget *widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (source));
|
||||||
DemoImage *demo = DEMO_IMAGE (widget);
|
DemoImage *demo = DEMO_IMAGE (widget);
|
||||||
|
GdkPaintable *paintable;
|
||||||
|
|
||||||
update_drag_icon (demo, GTK_DRAG_ICON (gtk_drag_icon_get_for_drag (drag)));
|
paintable = get_image_paintable (GTK_IMAGE (demo->image));
|
||||||
|
if (paintable)
|
||||||
|
{
|
||||||
|
gtk_drag_icon_set_from_paintable (drag, paintable, -2, -2);
|
||||||
|
g_object_unref (paintable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkContentProvider *
|
static GdkContentProvider *
|
||||||
|
|||||||
@@ -44,23 +44,11 @@ G_DEFINE_TYPE_WITH_CODE (DemoTaggedEntry, demo_tagged_entry, GTK_TYPE_WIDGET,
|
|||||||
static void
|
static void
|
||||||
demo_tagged_entry_init (DemoTaggedEntry *entry)
|
demo_tagged_entry_init (DemoTaggedEntry *entry)
|
||||||
{
|
{
|
||||||
GtkCssProvider *provider;
|
|
||||||
|
|
||||||
entry->text = gtk_text_new ();
|
entry->text = gtk_text_new ();
|
||||||
gtk_widget_set_hexpand (entry->text, TRUE);
|
gtk_widget_set_hexpand (entry->text, TRUE);
|
||||||
gtk_widget_set_vexpand (entry->text, TRUE);
|
gtk_widget_set_vexpand (entry->text, TRUE);
|
||||||
gtk_widget_set_parent (entry->text, GTK_WIDGET (entry));
|
gtk_widget_set_parent (entry->text, GTK_WIDGET (entry));
|
||||||
gtk_editable_init_delegate (GTK_EDITABLE (entry));
|
gtk_editable_init_delegate (GTK_EDITABLE (entry));
|
||||||
gtk_editable_set_width_chars (GTK_EDITABLE (entry->text), 6);
|
|
||||||
gtk_editable_set_max_width_chars (GTK_EDITABLE (entry->text), 6);
|
|
||||||
gtk_widget_add_css_class (GTK_WIDGET (entry), "tagged");
|
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
|
||||||
gtk_css_provider_load_from_resource (provider, "/tagged_entry/tagstyle.css");
|
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
|
||||||
GTK_STYLE_PROVIDER (provider),
|
|
||||||
800);
|
|
||||||
g_object_unref (provider);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -128,7 +116,6 @@ demo_tagged_entry_class_init (DemoTaggedEntryClass *klass)
|
|||||||
|
|
||||||
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
|
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
|
||||||
gtk_widget_class_set_css_name (widget_class, "entry");
|
gtk_widget_class_set_css_name (widget_class, "entry");
|
||||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_TEXT_BOX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkEditable *
|
static GtkEditable *
|
||||||
@@ -224,6 +211,7 @@ static void
|
|||||||
demo_tagged_entry_tag_init (DemoTaggedEntryTag *tag)
|
demo_tagged_entry_tag_init (DemoTaggedEntryTag *tag)
|
||||||
{
|
{
|
||||||
GtkGesture *gesture;
|
GtkGesture *gesture;
|
||||||
|
GtkCssProvider *provider;
|
||||||
|
|
||||||
tag->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
tag->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_set_parent (tag->box, GTK_WIDGET (tag));
|
gtk_widget_set_parent (tag->box, GTK_WIDGET (tag));
|
||||||
@@ -233,6 +221,13 @@ demo_tagged_entry_tag_init (DemoTaggedEntryTag *tag)
|
|||||||
gesture = gtk_gesture_click_new ();
|
gesture = gtk_gesture_click_new ();
|
||||||
g_signal_connect (gesture, "released", G_CALLBACK (on_released), tag);
|
g_signal_connect (gesture, "released", G_CALLBACK (on_released), tag);
|
||||||
gtk_widget_add_controller (GTK_WIDGET (tag), GTK_EVENT_CONTROLLER (gesture));
|
gtk_widget_add_controller (GTK_WIDGET (tag), GTK_EVENT_CONTROLLER (gesture));
|
||||||
|
|
||||||
|
provider = gtk_css_provider_new ();
|
||||||
|
gtk_css_provider_load_from_resource (provider, "/tagged_entry/tagstyle.css");
|
||||||
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
|
GTK_STYLE_PROVIDER (provider),
|
||||||
|
800);
|
||||||
|
g_object_unref (provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -113,9 +113,12 @@ apply_transform (CanvasItem *item)
|
|||||||
y = gtk_widget_get_allocated_height (item->label) / 2.0;
|
y = gtk_widget_get_allocated_height (item->label) / 2.0;
|
||||||
item->r = sqrt (x*x + y*y);
|
item->r = sqrt (x*x + y*y);
|
||||||
|
|
||||||
transform = gsk_transform_translate (NULL, &(graphene_point_t) { item->r, item->r });
|
transform = gsk_transform_translate (
|
||||||
transform = gsk_transform_rotate (transform, item->angle + item->delta);
|
gsk_transform_rotate (
|
||||||
transform = gsk_transform_translate (transform, &(graphene_point_t) { -x, -y });
|
gsk_transform_translate (NULL,
|
||||||
|
&(graphene_point_t) { item->r, item->r }),
|
||||||
|
item->angle + item->delta),
|
||||||
|
&(graphene_point_t) { - x, - y });
|
||||||
|
|
||||||
gtk_fixed_set_child_transform (GTK_FIXED (item->fixed), item->label, transform);
|
gtk_fixed_set_child_transform (GTK_FIXED (item->fixed), item->label, transform);
|
||||||
gsk_transform_unref (transform);
|
gsk_transform_unref (transform);
|
||||||
|
|||||||
@@ -311,7 +311,6 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Drawing Area");
|
gtk_window_set_title (GTK_WINDOW (window), "Drawing Area");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 250, -1);
|
|
||||||
|
|
||||||
g_signal_connect (window, "destroy",
|
g_signal_connect (window, "destroy",
|
||||||
G_CALLBACK (close_window), NULL);
|
G_CALLBACK (close_window), NULL);
|
||||||
@@ -326,8 +325,9 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
/*
|
/*
|
||||||
* Create the groups area
|
* Create the groups area
|
||||||
*/
|
*/
|
||||||
label = gtk_label_new ("Knockout groups");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Knockout groups</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -344,8 +344,9 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
* Create the scribble area
|
* Create the scribble area
|
||||||
*/
|
*/
|
||||||
|
|
||||||
label = gtk_label_new ("Scribble area");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Scribble area</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
/* Lists/Selections
|
/* Drop Downs
|
||||||
*
|
*
|
||||||
* The GtkDropDown widget is a modern alternative to GtkComboBox.
|
* The GtkDropDown widget is a modern alternative to GtkComboBox.
|
||||||
* It uses list models instead of tree models, and the content is
|
* It uses list models instead of tree models, and the content is
|
||||||
* displayed using widgets instead of cell renderers.
|
* displayed using widgets instead of cell renderers.
|
||||||
*
|
*
|
||||||
* This example also shows a custom widget that can replace
|
* The examples here demonstrate how to use different kinds of
|
||||||
* GtkEntryCompletion or GtkComboBoxText. It is not currently
|
* list models with GtkDropDown, how to use search and how to
|
||||||
* part of GTK.
|
* display the selected item differently from the presentation
|
||||||
|
* in the popup.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include "suggestionentry.h"
|
|
||||||
|
|
||||||
#define STRING_TYPE_HOLDER (string_holder_get_type ())
|
#define STRING_TYPE_HOLDER (string_holder_get_type ())
|
||||||
G_DECLARE_FINAL_TYPE (StringHolder, string_holder, STRING, HOLDER, GObject)
|
G_DECLARE_FINAL_TYPE (StringHolder, string_holder, STRING, HOLDER, GObject)
|
||||||
@@ -64,22 +65,18 @@ strings_setup_item_single_line (GtkSignalListItemFactory *factory,
|
|||||||
GtkListItem *item)
|
GtkListItem *item)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *image, *title;
|
GtkWidget *box, *image, *title;
|
||||||
GtkWidget *checkmark;
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
|
|
||||||
image = gtk_image_new ();
|
image = gtk_image_new ();
|
||||||
title = gtk_label_new ("");
|
title = gtk_label_new ("");
|
||||||
gtk_label_set_xalign (GTK_LABEL (title), 0.0);
|
gtk_label_set_xalign (GTK_LABEL (title), 0.0);
|
||||||
checkmark = gtk_image_new_from_icon_name ("object-select-symbolic");
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), image);
|
gtk_box_append (GTK_BOX (box), image);
|
||||||
gtk_box_append (GTK_BOX (box), title);
|
gtk_box_append (GTK_BOX (box), title);
|
||||||
gtk_box_append (GTK_BOX (box), checkmark);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (item), "title", title);
|
g_object_set_data (G_OBJECT (item), "title", title);
|
||||||
g_object_set_data (G_OBJECT (item), "image", image);
|
g_object_set_data (G_OBJECT (item), "image", image);
|
||||||
g_object_set_data (G_OBJECT (item), "checkmark", checkmark);
|
|
||||||
|
|
||||||
gtk_list_item_set_child (item, box);
|
gtk_list_item_set_child (item, box);
|
||||||
}
|
}
|
||||||
@@ -89,7 +86,6 @@ strings_setup_item_full (GtkSignalListItemFactory *factory,
|
|||||||
GtkListItem *item)
|
GtkListItem *item)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *box2, *image, *title, *description;
|
GtkWidget *box, *box2, *image, *title, *description;
|
||||||
GtkWidget *checkmark;
|
|
||||||
|
|
||||||
image = gtk_image_new ();
|
image = gtk_image_new ();
|
||||||
title = gtk_label_new ("");
|
title = gtk_label_new ("");
|
||||||
@@ -97,7 +93,6 @@ strings_setup_item_full (GtkSignalListItemFactory *factory,
|
|||||||
description = gtk_label_new ("");
|
description = gtk_label_new ("");
|
||||||
gtk_label_set_xalign (GTK_LABEL (description), 0.0);
|
gtk_label_set_xalign (GTK_LABEL (description), 0.0);
|
||||||
gtk_widget_add_css_class (description, "dim-label");
|
gtk_widget_add_css_class (description, "dim-label");
|
||||||
checkmark = gtk_image_new_from_icon_name ("object-select-symbolic");
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
|
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
|
||||||
@@ -106,48 +101,26 @@ strings_setup_item_full (GtkSignalListItemFactory *factory,
|
|||||||
gtk_box_append (GTK_BOX (box), box2);
|
gtk_box_append (GTK_BOX (box), box2);
|
||||||
gtk_box_append (GTK_BOX (box2), title);
|
gtk_box_append (GTK_BOX (box2), title);
|
||||||
gtk_box_append (GTK_BOX (box2), description);
|
gtk_box_append (GTK_BOX (box2), description);
|
||||||
gtk_box_append (GTK_BOX (box), checkmark);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (item), "title", title);
|
g_object_set_data (G_OBJECT (item), "title", title);
|
||||||
g_object_set_data (G_OBJECT (item), "image", image);
|
g_object_set_data (G_OBJECT (item), "image", image);
|
||||||
g_object_set_data (G_OBJECT (item), "description", description);
|
g_object_set_data (G_OBJECT (item), "description", description);
|
||||||
g_object_set_data (G_OBJECT (item), "checkmark", checkmark);
|
|
||||||
|
|
||||||
gtk_list_item_set_child (item, box);
|
gtk_list_item_set_child (item, box);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
selected_item_changed (GtkDropDown *dropdown,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
GtkWidget *checkmark;
|
|
||||||
|
|
||||||
checkmark = g_object_get_data (G_OBJECT (item), "checkmark");
|
|
||||||
|
|
||||||
if (gtk_drop_down_get_selected_item (dropdown) == gtk_list_item_get_item (item))
|
|
||||||
gtk_widget_set_opacity (checkmark, 1.0);
|
|
||||||
else
|
|
||||||
gtk_widget_set_opacity (checkmark, 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
strings_bind_item (GtkSignalListItemFactory *factory,
|
strings_bind_item (GtkSignalListItemFactory *factory,
|
||||||
GtkListItem *item,
|
GtkListItem *item)
|
||||||
gpointer data)
|
|
||||||
{
|
{
|
||||||
GtkDropDown *dropdown = data;
|
|
||||||
GtkWidget *image, *title, *description;
|
GtkWidget *image, *title, *description;
|
||||||
GtkWidget *checkmark;
|
|
||||||
StringHolder *holder;
|
StringHolder *holder;
|
||||||
GtkWidget *popup;
|
|
||||||
|
|
||||||
holder = gtk_list_item_get_item (item);
|
holder = gtk_list_item_get_item (item);
|
||||||
|
|
||||||
title = g_object_get_data (G_OBJECT (item), "title");
|
title = g_object_get_data (G_OBJECT (item), "title");
|
||||||
image = g_object_get_data (G_OBJECT (item), "image");
|
image = g_object_get_data (G_OBJECT (item), "image");
|
||||||
description = g_object_get_data (G_OBJECT (item), "description");
|
description = g_object_get_data (G_OBJECT (item), "description");
|
||||||
checkmark = g_object_get_data (G_OBJECT (item), "checkmark");
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (title), holder->title);
|
gtk_label_set_label (GTK_LABEL (title), holder->title);
|
||||||
if (image)
|
if (image)
|
||||||
@@ -160,43 +133,19 @@ strings_bind_item (GtkSignalListItemFactory *factory,
|
|||||||
gtk_label_set_label (GTK_LABEL (description), holder->description);
|
gtk_label_set_label (GTK_LABEL (description), holder->description);
|
||||||
gtk_widget_set_visible (description , holder->description != NULL);
|
gtk_widget_set_visible (description , holder->description != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
popup = gtk_widget_get_ancestor (title, GTK_TYPE_POPOVER);
|
|
||||||
if (popup && gtk_widget_is_ancestor (popup, GTK_WIDGET (dropdown)))
|
|
||||||
{
|
|
||||||
gtk_widget_show (checkmark);
|
|
||||||
g_signal_connect (dropdown, "notify::selected-item",
|
|
||||||
G_CALLBACK (selected_item_changed), item);
|
|
||||||
selected_item_changed (dropdown, NULL, item);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gtk_widget_hide (checkmark);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
strings_unbind_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *list_item,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
GtkDropDown *dropdown = data;
|
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (dropdown, selected_item_changed, list_item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkListItemFactory *
|
static GtkListItemFactory *
|
||||||
strings_factory_new (gpointer data, gboolean full)
|
strings_factory_new (gboolean full)
|
||||||
{
|
{
|
||||||
GtkListItemFactory *factory;
|
GtkListItemFactory *factory;
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
factory = gtk_signal_list_item_factory_new ();
|
||||||
if (full)
|
if (full)
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_full), data);
|
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_full), NULL);
|
||||||
else
|
else
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_single_line), data);
|
g_signal_connect (factory, "setup", G_CALLBACK (strings_setup_item_single_line), NULL);
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (strings_bind_item), data);
|
g_signal_connect (factory, "bind", G_CALLBACK (strings_bind_item), NULL);
|
||||||
g_signal_connect (factory, "unbind", G_CALLBACK (strings_unbind_item), data);
|
|
||||||
|
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
@@ -237,22 +186,19 @@ drop_down_new_from_strings (const char *const *titles,
|
|||||||
g_return_val_if_fail (descriptions == NULL || g_strv_length ((char **)icons) == g_strv_length ((char **)descriptions), NULL);
|
g_return_val_if_fail (descriptions == NULL || g_strv_length ((char **)icons) == g_strv_length ((char **)descriptions), NULL);
|
||||||
|
|
||||||
model = strings_model_new (titles, icons, descriptions);
|
model = strings_model_new (titles, icons, descriptions);
|
||||||
widget = g_object_new (GTK_TYPE_DROP_DOWN,
|
factory = strings_factory_new (FALSE);
|
||||||
"model", model,
|
|
||||||
NULL);
|
|
||||||
g_object_unref (model);
|
|
||||||
|
|
||||||
factory = strings_factory_new (widget, FALSE);
|
|
||||||
if (icons != NULL || descriptions != NULL)
|
if (icons != NULL || descriptions != NULL)
|
||||||
list_factory = strings_factory_new (widget, TRUE);
|
list_factory = strings_factory_new (TRUE);
|
||||||
else
|
else
|
||||||
list_factory = NULL;
|
list_factory = NULL;
|
||||||
|
|
||||||
g_object_set (widget,
|
widget = g_object_new (GTK_TYPE_DROP_DOWN,
|
||||||
"factory", factory,
|
"model", model,
|
||||||
"list-factory", list_factory,
|
"factory", factory,
|
||||||
NULL);
|
"list-factory", list_factory,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_unref (model);
|
||||||
g_object_unref (factory);
|
g_object_unref (factory);
|
||||||
if (list_factory)
|
if (list_factory)
|
||||||
g_object_unref (list_factory);
|
g_object_unref (list_factory);
|
||||||
@@ -272,110 +218,13 @@ get_title (gpointer item)
|
|||||||
return g_strdup (STRING_HOLDER (item)->title);
|
return g_strdup (STRING_HOLDER (item)->title);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
|
||||||
get_file_name (gpointer item)
|
|
||||||
{
|
|
||||||
return g_strdup (g_file_info_get_display_name (G_FILE_INFO (item)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
GtkWidget *box;
|
|
||||||
GtkWidget *icon;
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
|
||||||
icon = gtk_image_new ();
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
|
||||||
gtk_box_append (GTK_BOX (box), icon);
|
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
|
||||||
gtk_list_item_set_child (item, box);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
MatchObject *match = MATCH_OBJECT (gtk_list_item_get_item (item));
|
|
||||||
GFileInfo *info = G_FILE_INFO (match_object_get_item (match));
|
|
||||||
GtkWidget *box = gtk_list_item_get_child (item);
|
|
||||||
GtkWidget *icon = gtk_widget_get_first_child (box);
|
|
||||||
GtkWidget *label = gtk_widget_get_last_child (box);
|
|
||||||
|
|
||||||
gtk_image_set_from_gicon (GTK_IMAGE (icon), g_file_info_get_icon (info));
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), g_file_info_get_display_name (info));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_highlight_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
|
||||||
gtk_list_item_set_child (item, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_highlight_item (GtkSignalListItemFactory *factory,
|
|
||||||
GtkListItem *item)
|
|
||||||
{
|
|
||||||
MatchObject *obj;
|
|
||||||
GtkWidget *label;
|
|
||||||
PangoAttrList *attrs;
|
|
||||||
PangoAttribute *attr;
|
|
||||||
const char *str;
|
|
||||||
|
|
||||||
obj = MATCH_OBJECT (gtk_list_item_get_item (item));
|
|
||||||
label = gtk_list_item_get_child (item);
|
|
||||||
|
|
||||||
str = match_object_get_string (obj);
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), str);
|
|
||||||
attrs = pango_attr_list_new ();
|
|
||||||
attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
|
|
||||||
attr->start_index = match_object_get_match_start (obj);
|
|
||||||
attr->end_index = match_object_get_match_end (obj);
|
|
||||||
pango_attr_list_insert (attrs, attr);
|
|
||||||
gtk_label_set_attributes (GTK_LABEL (label), attrs);
|
|
||||||
pango_attr_list_unref (attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
match_func (MatchObject *obj,
|
|
||||||
const char *search,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
char *tmp1, *tmp2;
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
tmp1 = g_utf8_normalize (match_object_get_string (obj), -1, G_NORMALIZE_ALL);
|
|
||||||
tmp2 = g_utf8_normalize (search, -1, G_NORMALIZE_ALL);
|
|
||||||
|
|
||||||
if ((p = strstr (tmp1, tmp2)) != NULL)
|
|
||||||
match_object_set_match (obj,
|
|
||||||
p - tmp1,
|
|
||||||
(p - tmp1) + g_utf8_strlen (search, -1),
|
|
||||||
1);
|
|
||||||
else
|
|
||||||
match_object_set_match (obj, 0, 0, 0);
|
|
||||||
|
|
||||||
g_free (tmp1);
|
|
||||||
g_free (tmp2);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_dropdown (GtkWidget *do_widget)
|
do_dropdown (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
GtkWidget *button, *box, *spin, *check, *hbox, *label, *entry;
|
GtkWidget *button, *box, *spin, *check;
|
||||||
GListModel *model;
|
GListModel *model;
|
||||||
GtkExpression *expression;
|
GtkExpression *expression;
|
||||||
GtkListItemFactory *factory;
|
|
||||||
const char * const times[] = { "1 minute", "2 minutes", "5 minutes", "20 minutes", NULL };
|
const char * const times[] = { "1 minute", "2 minutes", "5 minutes", "20 minutes", NULL };
|
||||||
const char * const many_times[] = {
|
const char * const many_times[] = {
|
||||||
"1 minute", "2 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes",
|
"1 minute", "2 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes",
|
||||||
@@ -388,49 +237,22 @@ do_dropdown (GtkWidget *do_widget)
|
|||||||
const char * const device_descriptions[] = {
|
const char * const device_descriptions[] = {
|
||||||
"Built-in Audio", "Built-in audio", "Thinkpad Tunderbolt 3 Dock USB Audio", "Thinkpad Tunderbolt 3 Dock USB Audio", NULL
|
"Built-in Audio", "Built-in audio", "Thinkpad Tunderbolt 3 Dock USB Audio", "Thinkpad Tunderbolt 3 Dock USB Audio", NULL
|
||||||
};
|
};
|
||||||
char *cwd;
|
|
||||||
GFile *file;
|
|
||||||
GListModel *dir;
|
|
||||||
GtkStringList *strings;
|
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Selections");
|
gtk_window_set_title (GTK_WINDOW (window), "Drop Downs");
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
|
|
||||||
|
|
||||||
gtk_widget_set_margin_start (hbox, 20);
|
|
||||||
gtk_widget_set_margin_end (hbox, 20);
|
|
||||||
gtk_widget_set_margin_top (hbox, 20);
|
|
||||||
gtk_widget_set_margin_bottom (hbox, 20);
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), hbox);
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
||||||
gtk_box_append (GTK_BOX (hbox), box);
|
gtk_widget_set_margin_start (box, 10);
|
||||||
|
gtk_widget_set_margin_end (box, 10);
|
||||||
label = gtk_label_new ("Dropdowns");
|
gtk_widget_set_margin_top (box, 10);
|
||||||
gtk_widget_add_css_class (label, "title-4");
|
gtk_widget_set_margin_bottom (box, 10);
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
gtk_window_set_child (GTK_WINDOW (window), box);
|
||||||
|
|
||||||
/* A basic dropdown */
|
|
||||||
button = drop_down_new_from_strings (times, NULL, NULL);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
|
||||||
|
|
||||||
/* A dropdown using an expression to obtain strings */
|
|
||||||
button = drop_down_new_from_strings (many_times, NULL, NULL);
|
|
||||||
gtk_drop_down_set_enable_search (GTK_DROP_DOWN (button), TRUE);
|
|
||||||
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
|
||||||
0, NULL,
|
|
||||||
(GCallback)get_title,
|
|
||||||
NULL, NULL);
|
|
||||||
gtk_drop_down_set_expression (GTK_DROP_DOWN (button), expression);
|
|
||||||
gtk_expression_unref (expression);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
|
||||||
|
|
||||||
button = gtk_drop_down_new (NULL, NULL);
|
button = gtk_drop_down_new (NULL, NULL);
|
||||||
|
|
||||||
@@ -448,118 +270,30 @@ do_dropdown (GtkWidget *do_widget)
|
|||||||
|
|
||||||
spin = gtk_spin_button_new_with_range (-1, g_list_model_get_n_items (G_LIST_MODEL (model)), 1);
|
spin = gtk_spin_button_new_with_range (-1, g_list_model_get_n_items (G_LIST_MODEL (model)), 1);
|
||||||
gtk_widget_set_halign (spin, GTK_ALIGN_START);
|
gtk_widget_set_halign (spin, GTK_ALIGN_START);
|
||||||
gtk_widget_set_margin_start (spin, 20);
|
|
||||||
g_object_bind_property (button, "selected", spin, "value", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
g_object_bind_property (button, "selected", spin, "value", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
||||||
gtk_box_append (GTK_BOX (box), spin);
|
gtk_box_append (GTK_BOX (box), spin);
|
||||||
|
|
||||||
check = gtk_check_button_new_with_label ("Enable search");
|
check = gtk_check_button_new_with_label ("Enable search");
|
||||||
gtk_widget_set_margin_start (check, 20);
|
|
||||||
g_object_bind_property (button, "enable-search", check, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
g_object_bind_property (button, "enable-search", check, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
|
||||||
gtk_box_append (GTK_BOX (box), check);
|
gtk_box_append (GTK_BOX (box), check);
|
||||||
|
|
||||||
g_object_unref (model);
|
g_object_unref (model);
|
||||||
|
|
||||||
/* A dropdown with a separate list factory */
|
button = drop_down_new_from_strings (times, NULL, NULL);
|
||||||
button = drop_down_new_from_strings (device_titles, device_icons, device_descriptions);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (hbox), gtk_separator_new (GTK_ORIENTATION_VERTICAL));
|
button = drop_down_new_from_strings (many_times, NULL, NULL);
|
||||||
|
gtk_drop_down_set_enable_search (GTK_DROP_DOWN (button), TRUE);
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
|
||||||
gtk_box_append (GTK_BOX (hbox), box);
|
|
||||||
|
|
||||||
label = gtk_label_new ("Suggestions");
|
|
||||||
gtk_widget_add_css_class (label, "title-4");
|
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
|
||||||
|
|
||||||
/* A basic suggestion entry */
|
|
||||||
entry = suggestion_entry_new ();
|
|
||||||
g_object_set (entry, "placeholder-text", "Words with T or G…", NULL);
|
|
||||||
strings = gtk_string_list_new ((const char *[]){
|
|
||||||
"GNOME",
|
|
||||||
"gnominious",
|
|
||||||
"Gnomonic projection",
|
|
||||||
"total",
|
|
||||||
"totally",
|
|
||||||
"toto",
|
|
||||||
"tottery",
|
|
||||||
"totterer",
|
|
||||||
"Totten trust",
|
|
||||||
"totipotent",
|
|
||||||
"totipotency",
|
|
||||||
"totemism",
|
|
||||||
"totem pole",
|
|
||||||
"Totara",
|
|
||||||
"totalizer",
|
|
||||||
"totalizator",
|
|
||||||
"totalitarianism",
|
|
||||||
"total parenteral nutrition",
|
|
||||||
"total hysterectomy",
|
|
||||||
"total eclipse",
|
|
||||||
"Totipresence",
|
|
||||||
"Totipalmi",
|
|
||||||
"Tomboy",
|
|
||||||
"zombie",
|
|
||||||
NULL});
|
|
||||||
suggestion_entry_set_model (SUGGESTION_ENTRY (entry), G_LIST_MODEL (strings));
|
|
||||||
g_object_unref (strings);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
|
||||||
|
|
||||||
/* A suggestion entry using a custom model, and no filtering */
|
|
||||||
entry = suggestion_entry_new ();
|
|
||||||
|
|
||||||
cwd = g_get_current_dir ();
|
|
||||||
file = g_file_new_for_path (cwd);
|
|
||||||
dir = G_LIST_MODEL (gtk_directory_list_new ("standard::display-name,standard::content-type,standard::icon,standard::size", file));
|
|
||||||
suggestion_entry_set_model (SUGGESTION_ENTRY (entry), dir);
|
|
||||||
g_object_unref (dir);
|
|
||||||
g_object_unref (file);
|
|
||||||
g_free (cwd);
|
|
||||||
|
|
||||||
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
||||||
0, NULL,
|
0, NULL,
|
||||||
(GCallback)get_file_name,
|
(GCallback)get_title,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
suggestion_entry_set_expression (SUGGESTION_ENTRY (entry), expression);
|
gtk_drop_down_set_expression (GTK_DROP_DOWN (button), expression);
|
||||||
gtk_expression_unref (expression);
|
gtk_expression_unref (expression);
|
||||||
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
button = drop_down_new_from_strings (device_titles, device_icons, device_descriptions);
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_item), NULL);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_item), NULL);
|
|
||||||
|
|
||||||
suggestion_entry_set_factory (SUGGESTION_ENTRY (entry), factory);
|
|
||||||
g_object_unref (factory);
|
|
||||||
|
|
||||||
suggestion_entry_set_use_filter (SUGGESTION_ENTRY (entry), FALSE);
|
|
||||||
suggestion_entry_set_show_arrow (SUGGESTION_ENTRY (entry), TRUE);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
|
||||||
|
|
||||||
/* A suggestion entry with match highlighting */
|
|
||||||
entry = suggestion_entry_new ();
|
|
||||||
g_object_set (entry, "placeholder-text", "Destination", NULL);
|
|
||||||
|
|
||||||
strings = gtk_string_list_new ((const char *[]){
|
|
||||||
"app-mockups",
|
|
||||||
"settings-mockups",
|
|
||||||
"os-mockups",
|
|
||||||
"software-mockups",
|
|
||||||
"mocktails",
|
|
||||||
NULL});
|
|
||||||
suggestion_entry_set_model (SUGGESTION_ENTRY (entry), G_LIST_MODEL (strings));
|
|
||||||
g_object_unref (strings);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (box), entry);
|
|
||||||
|
|
||||||
suggestion_entry_set_match_func (SUGGESTION_ENTRY (entry), match_func, NULL, NULL);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_highlight_item), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_highlight_item), NULL);
|
|
||||||
suggestion_entry_set_factory (SUGGESTION_ENTRY (entry), factory);
|
|
||||||
g_object_unref (factory);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
|||||||
@@ -78,11 +78,11 @@ do_entry_completion (GtkWidget *do_widget)
|
|||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||||
gtk_widget_set_margin_start (vbox, 18);
|
gtk_widget_set_margin_start (vbox, 5);
|
||||||
gtk_widget_set_margin_end (vbox, 18);
|
gtk_widget_set_margin_end (vbox, 5);
|
||||||
gtk_widget_set_margin_top (vbox, 18);
|
gtk_widget_set_margin_top (vbox, 5);
|
||||||
gtk_widget_set_margin_bottom (vbox, 18);
|
gtk_widget_set_margin_bottom (vbox, 5);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
||||||
|
|
||||||
label = gtk_label_new (NULL);
|
label = gtk_label_new (NULL);
|
||||||
|
|||||||
@@ -27,16 +27,16 @@ do_entry_undo (GtkWidget *do_widget)
|
|||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||||
gtk_widget_set_margin_start (vbox, 18);
|
gtk_widget_set_margin_start (vbox, 5);
|
||||||
gtk_widget_set_margin_end (vbox, 18);
|
gtk_widget_set_margin_end (vbox, 5);
|
||||||
gtk_widget_set_margin_top (vbox, 18);
|
gtk_widget_set_margin_top (vbox, 5);
|
||||||
gtk_widget_set_margin_bottom (vbox, 18);
|
gtk_widget_set_margin_bottom (vbox, 5);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
||||||
|
|
||||||
label = gtk_label_new (NULL);
|
label = gtk_label_new (NULL);
|
||||||
gtk_label_set_markup (GTK_LABEL (label),
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
"Use Control+z or Control+Shift+z to undo or redo changes");
|
"Use Primary+z or Primary+Shift+z to undo or redo changes");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
/* Create our entry */
|
/* Create our entry */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Error States
|
/* Error states
|
||||||
*
|
*
|
||||||
* GtkLabel and GtkEntry can indicate errors if you set the .error
|
* GtkLabel and GtkEntry can indicate errors if you set the .error
|
||||||
* style class on them.
|
* style class on them.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<property name="modal">1</property>
|
<property name="modal">1</property>
|
||||||
<property name="resizable">0</property>
|
<property name="resizable">0</property>
|
||||||
<property name="use-header-bar">1</property>
|
<property name="use-header-bar">1</property>
|
||||||
<property name="title" translatable="yes">Error States</property>
|
<property name="title" translatable="yes">Settings</property>
|
||||||
<property name="hide-on-close">1</property>
|
<property name="hide-on-close">1</property>
|
||||||
<child internal-child="content_area">
|
<child internal-child="content_area">
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.16"/>
|
||||||
<object class="GtkListStore" id="liststore1">
|
<object class="GtkListStore" id="liststore1">
|
||||||
<columns>
|
<columns>
|
||||||
<column type="gint"/>
|
<column type="gint"/>
|
||||||
|
|||||||
72
demos/gtk-demo/fire.glsl
Normal file
72
demos/gtk-demo/fire.glsl
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
uniform float u_time;
|
||||||
|
uniform sampler2D u_texture1;
|
||||||
|
|
||||||
|
/* 2D -> [0..1] random number generator */
|
||||||
|
float random(vec2 st) {
|
||||||
|
return fract(sin(dot(st.xy,
|
||||||
|
vec2(12.9898,78.233))) *
|
||||||
|
43758.5453123);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generate a smoothed 2d noise based on random() */
|
||||||
|
float noise(vec2 v) {
|
||||||
|
/* Round point v to integer grid grid */
|
||||||
|
vec2 grid_point = floor(v);
|
||||||
|
/* Randomize in grid corners */
|
||||||
|
float corner1 = random(grid_point);
|
||||||
|
float corner2 = random(grid_point + vec2(1, 0));
|
||||||
|
float corner3 = random(grid_point + vec2(0, 1));
|
||||||
|
float corner4 = random(grid_point + vec2(1, 1));
|
||||||
|
/* Interpolate smoothly between grid points */
|
||||||
|
vec2 fraction = smoothstep(vec2(0.0), vec2(1.0), fract(v));
|
||||||
|
return mix(mix(corner1, corner2, fraction.x),
|
||||||
|
mix(corner3, corner4, fraction.x),
|
||||||
|
fraction.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fractal brownian motion noice, see https://www.iquilezles.org/www/articles/fbm/fbm.htm */
|
||||||
|
float fbm(in vec2 x)
|
||||||
|
{
|
||||||
|
const float octaveScale = 1.9;
|
||||||
|
const float G = 0.5;
|
||||||
|
float f = 1.0;
|
||||||
|
float a = 1.0;
|
||||||
|
float t = 0.0;
|
||||||
|
int numOctaves = 5;
|
||||||
|
for (int i = 0; i < numOctaves; i++) {
|
||||||
|
t += a*noise(f*x);
|
||||||
|
f *= octaveScale;
|
||||||
|
a *= G;
|
||||||
|
}
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
|
||||||
|
{
|
||||||
|
vec2 xy = fragCoord / resolution;
|
||||||
|
|
||||||
|
float zoom = 3.0 - sin(u_time*0.5)*0.3;
|
||||||
|
|
||||||
|
// Normalize coord to height of widget
|
||||||
|
vec2 p = (vec2 (-resolution.x/2.0 + fragCoord.x, resolution.y - fragCoord.y) / resolution.yy)* zoom;
|
||||||
|
|
||||||
|
// Use recursive incantations of fbm
|
||||||
|
float q1 = fbm(p - vec2(0.8, 0.3) * u_time);
|
||||||
|
float q2 = fbm(p - vec2(0.5, 1.3) * u_time);
|
||||||
|
float r = fbm(2.0*p + vec2(q1,q2) - vec2(0.0, 1.0)*u_time*10.0 *0.4);
|
||||||
|
|
||||||
|
// Compute intensity, mostly on the bottom
|
||||||
|
float w = 2.0 * r * p.y;
|
||||||
|
|
||||||
|
// Smooth out left/right side and fade in at start
|
||||||
|
w /= smoothstep(0.0,0.1, xy.x)* smoothstep(0.0,0.1, 1.0-xy.x) * smoothstep(0.0,0.4, u_time);
|
||||||
|
|
||||||
|
// Compute colors
|
||||||
|
vec3 c = vec3(1.0,.2,.05);
|
||||||
|
vec3 color = 1.0 / (w*w/c + 1.0);
|
||||||
|
|
||||||
|
// Mix in widget
|
||||||
|
vec4 widget = GskTexture(u_texture1,uv);
|
||||||
|
fragColor = mix(vec4(color,1), widget, 1.0-color.x);
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.12"/>
|
||||||
<object class="GtkWindow" id="window">
|
<object class="GtkWindow" id="window">
|
||||||
<property name="default-width">600</property>
|
<property name="default-width">600</property>
|
||||||
<property name="default-height">500</property>
|
<property name="default-height">500</property>
|
||||||
|
|||||||
@@ -1068,6 +1068,7 @@ update_font_variations (void)
|
|||||||
unsigned int length;
|
unsigned int length;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
child = gtk_widget_get_first_child (variations_grid);
|
||||||
while ((child = gtk_widget_get_first_child (variations_grid)))
|
while ((child = gtk_widget_get_first_child (variations_grid)))
|
||||||
gtk_grid_remove (GTK_GRID (variations_grid), child);
|
gtk_grid_remove (GTK_GRID (variations_grid), child);
|
||||||
|
|
||||||
|
|||||||
@@ -501,7 +501,7 @@ fontify (const char *format,
|
|||||||
char *theme;
|
char *theme;
|
||||||
gboolean prefer_dark;
|
gboolean prefer_dark;
|
||||||
const char *style_arg;
|
const char *style_arg;
|
||||||
char *text;
|
const char *text;
|
||||||
GtkTextIter start, end;
|
GtkTextIter start, end;
|
||||||
GBytes *bytes;
|
GBytes *bytes;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
@@ -553,7 +553,7 @@ fontify (const char *format,
|
|||||||
|
|
||||||
gtk_text_buffer_get_bounds (source_buffer, &start, &end);
|
gtk_text_buffer_get_bounds (source_buffer, &start, &end);
|
||||||
text = gtk_text_buffer_get_text (source_buffer, &start, &end, TRUE);
|
text = gtk_text_buffer_get_text (source_buffer, &start, &end, TRUE);
|
||||||
bytes = g_bytes_new_take (text, strlen (text));
|
bytes = g_bytes_new_static (text, strlen (text));
|
||||||
|
|
||||||
#ifdef HAVE_GIO_UNIX
|
#ifdef HAVE_GIO_UNIX
|
||||||
/* Work around https://gitlab.gnome.org/GNOME/glib/-/issues/2182 */
|
/* Work around https://gitlab.gnome.org/GNOME/glib/-/issues/2182 */
|
||||||
@@ -570,5 +570,4 @@ fontify (const char *format,
|
|||||||
NULL,
|
NULL,
|
||||||
fontify_finish,
|
fontify_finish,
|
||||||
g_object_ref (source_buffer));
|
g_object_ref (source_buffer));
|
||||||
g_bytes_unref (bytes);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Pango/Font Rendering
|
/* Pango/Font rendering
|
||||||
*
|
*
|
||||||
* Demonstrates various aspects of font rendering.
|
* Demonstrates various aspects of font rendering.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -406,7 +406,6 @@ create_glarea_window (GtkWidget *do_widget)
|
|||||||
gl_area = gtk_gl_area_new ();
|
gl_area = gtk_gl_area_new ();
|
||||||
gtk_widget_set_hexpand (gl_area, TRUE);
|
gtk_widget_set_hexpand (gl_area, TRUE);
|
||||||
gtk_widget_set_vexpand (gl_area, TRUE);
|
gtk_widget_set_vexpand (gl_area, TRUE);
|
||||||
gtk_widget_set_size_request (gl_area, 100, 200);
|
|
||||||
gtk_box_append (GTK_BOX (box), gl_area);
|
gtk_box_append (GTK_BOX (box), gl_area);
|
||||||
|
|
||||||
/* We need to initialize and free GL resources, so we use
|
/* We need to initialize and free GL resources, so we use
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* OpenGL/Transitions and Effects
|
/* OpenGL/Transitions
|
||||||
* #Keywords: OpenGL, shader, effect
|
* #Keywords: OpenGL, shader
|
||||||
*
|
*
|
||||||
* Create transitions between pages using a custom fragment shader.
|
* Create transitions between pages using a custom fragment shader.
|
||||||
*
|
*
|
||||||
@@ -9,8 +9,7 @@
|
|||||||
* The transitions work with arbitrary content. We use images, shaders
|
* The transitions work with arbitrary content. We use images, shaders
|
||||||
* GL areas and plain old widgets to demonstrate this.
|
* GL areas and plain old widgets to demonstrate this.
|
||||||
*
|
*
|
||||||
* The demo also shows some over-the-top effects like wobbly widgets,
|
* The demo also shows some sample fire effects on the buttons.
|
||||||
* and animated backgrounds.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@@ -86,15 +85,15 @@ clicked_cb (GtkGestureClick *gesture,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
ripple_bin_new (void)
|
fire_bin_new (void)
|
||||||
{
|
{
|
||||||
GtkWidget *bin = gtk_shader_bin_new ();
|
GtkWidget *bin = gtk_shader_bin_new ();
|
||||||
static GskGLShader *shader = NULL;
|
static GskGLShader *shader = NULL;
|
||||||
|
|
||||||
if (shader == NULL)
|
if (shader == NULL)
|
||||||
shader = gsk_gl_shader_new_from_resource ("/gltransition/ripple.glsl");
|
shader = gsk_gl_shader_new_from_resource ("/gltransition/fire.glsl");
|
||||||
|
|
||||||
gtk_shader_bin_add_shader (GTK_SHADER_BIN (bin), shader, GTK_STATE_FLAG_PRELIGHT, GTK_STATE_FLAG_PRELIGHT, 20);
|
gtk_shader_bin_add_shader (GTK_SHADER_BIN (bin), shader, GTK_STATE_FLAG_PRELIGHT, GTK_STATE_FLAG_PRELIGHT);
|
||||||
|
|
||||||
return bin;
|
return bin;
|
||||||
}
|
}
|
||||||
@@ -132,7 +131,6 @@ update_paintable (GtkWidget *widget,
|
|||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
make_shader_stack (const char *name,
|
make_shader_stack (const char *name,
|
||||||
const char *resource_path,
|
const char *resource_path,
|
||||||
int active_child,
|
|
||||||
GtkWidget *scale)
|
GtkWidget *scale)
|
||||||
{
|
{
|
||||||
GtkWidget *stack, *child, *widget, *vbox, *hbox, *bin;
|
GtkWidget *stack, *child, *widget, *vbox, *hbox, *bin;
|
||||||
@@ -152,7 +150,7 @@ make_shader_stack (const char *name,
|
|||||||
gtk_shader_stack_set_shader (GTK_SHADER_STACK (stack), shader);
|
gtk_shader_stack_set_shader (GTK_SHADER_STACK (stack), shader);
|
||||||
g_object_unref (shader);
|
g_object_unref (shader);
|
||||||
|
|
||||||
child = gtk_picture_new_for_resource ("/css_blendmodes/ducky.png");
|
child = gtk_picture_new_for_resource ("/css_pixbufs/background.jpg");
|
||||||
gtk_picture_set_can_shrink (GTK_PICTURE (child), TRUE);
|
gtk_picture_set_can_shrink (GTK_PICTURE (child), TRUE);
|
||||||
gtk_shader_stack_add_child (GTK_SHADER_STACK (stack), child);
|
gtk_shader_stack_add_child (GTK_SHADER_STACK (stack), child);
|
||||||
|
|
||||||
@@ -221,8 +219,6 @@ make_shader_stack (const char *name,
|
|||||||
|
|
||||||
gtk_shader_stack_add_child (GTK_SHADER_STACK (stack), child);
|
gtk_shader_stack_add_child (GTK_SHADER_STACK (stack), child);
|
||||||
|
|
||||||
gtk_shader_stack_set_active (GTK_SHADER_STACK (stack), active_child);
|
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
||||||
|
|
||||||
widget = gtk_center_box_new ();
|
widget = gtk_center_box_new ();
|
||||||
@@ -249,25 +245,22 @@ make_shader_stack (const char *name,
|
|||||||
|
|
||||||
gtk_box_append (GTK_BOX (vbox), widget);
|
gtk_box_append (GTK_BOX (vbox), widget);
|
||||||
|
|
||||||
GtkWidget *bin2 = ripple_bin_new ();
|
gtk_box_append (GTK_BOX (vbox), stack);
|
||||||
gtk_shader_bin_set_child (GTK_SHADER_BIN (bin2), stack);
|
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (vbox), bin2);
|
|
||||||
|
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||||
gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER);
|
gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER);
|
||||||
|
|
||||||
gtk_box_append (GTK_BOX (vbox), hbox);
|
gtk_box_append (GTK_BOX (vbox), hbox);
|
||||||
|
|
||||||
button = gtk_button_new_from_icon_name ("go-previous-symbolic");
|
button = gtk_button_new_from_icon_name ("go-previous");
|
||||||
g_signal_connect (button, "clicked", G_CALLBACK (go_back), stack);
|
g_signal_connect (button, "clicked", G_CALLBACK (go_back), stack);
|
||||||
bin = ripple_bin_new ();
|
bin = fire_bin_new ();
|
||||||
gtk_shader_bin_set_child (GTK_SHADER_BIN (bin), button);
|
gtk_shader_bin_set_child (GTK_SHADER_BIN (bin), button);
|
||||||
gtk_box_append (GTK_BOX (hbox), bin);
|
gtk_box_append (GTK_BOX (hbox), bin);
|
||||||
|
|
||||||
button = gtk_button_new_from_icon_name ("go-next-symbolic");
|
button = gtk_button_new_from_icon_name ("go-next");
|
||||||
g_signal_connect (button, "clicked", G_CALLBACK (go_forward), stack);
|
g_signal_connect (button, "clicked", G_CALLBACK (go_forward), stack);
|
||||||
bin = ripple_bin_new ();
|
bin = fire_bin_new ();
|
||||||
gtk_shader_bin_set_child (GTK_SHADER_BIN (bin), button);
|
gtk_shader_bin_set_child (GTK_SHADER_BIN (bin), button);
|
||||||
gtk_box_append (GTK_BOX (hbox), bin);
|
gtk_box_append (GTK_BOX (hbox), bin);
|
||||||
|
|
||||||
@@ -277,37 +270,22 @@ make_shader_stack (const char *name,
|
|||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_gltransition_window (GtkWidget *do_widget)
|
create_gltransition_window (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
GtkWidget *window, *headerbar, *scale, *outer_grid, *grid, *background;
|
GtkWidget *window, *headerbar, *scale, *grid;
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Transitions and Effects");
|
gtk_window_set_title (GTK_WINDOW (window), "Transitions");
|
||||||
headerbar = gtk_header_bar_new ();
|
headerbar = gtk_header_bar_new ();
|
||||||
scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, NULL);
|
scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, NULL);
|
||||||
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
|
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
|
||||||
gtk_widget_set_size_request (scale, 100, -1);
|
gtk_widget_set_size_request (scale, 100, -1);
|
||||||
gtk_widget_set_tooltip_text (scale, "Transition duration");
|
|
||||||
gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), scale);
|
gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), scale);
|
||||||
gtk_window_set_titlebar (GTK_WINDOW (window), headerbar);
|
gtk_window_set_titlebar (GTK_WINDOW (window), headerbar);
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
|
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
|
||||||
g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL);
|
g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL);
|
||||||
|
|
||||||
outer_grid = gtk_grid_new ();
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), outer_grid);
|
|
||||||
|
|
||||||
paintable = gsk_shader_paintable_new (gsk_gl_shader_new_from_resource ("/gltransition/background.glsl"), NULL);
|
|
||||||
background = gtk_picture_new_for_paintable (paintable);
|
|
||||||
gtk_widget_add_tick_callback (background, update_paintable, NULL, NULL);
|
|
||||||
|
|
||||||
gtk_grid_attach (GTK_GRID (outer_grid),
|
|
||||||
background,
|
|
||||||
0, 0, 1, 1);
|
|
||||||
|
|
||||||
grid = gtk_grid_new ();
|
grid = gtk_grid_new ();
|
||||||
gtk_grid_attach (GTK_GRID (outer_grid),
|
gtk_window_set_child (GTK_WINDOW (window), grid);
|
||||||
grid,
|
|
||||||
0, 0, 1, 1);
|
|
||||||
|
|
||||||
gtk_widget_set_halign (grid, GTK_ALIGN_CENTER);
|
gtk_widget_set_halign (grid, GTK_ALIGN_CENTER);
|
||||||
gtk_widget_set_valign (grid, GTK_ALIGN_CENTER);
|
gtk_widget_set_valign (grid, GTK_ALIGN_CENTER);
|
||||||
@@ -321,16 +299,16 @@ create_gltransition_window (GtkWidget *do_widget)
|
|||||||
gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);
|
gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);
|
||||||
|
|
||||||
gtk_grid_attach (GTK_GRID (grid),
|
gtk_grid_attach (GTK_GRID (grid),
|
||||||
make_shader_stack ("Wind", "/gltransition/wind.glsl", 0, scale),
|
make_shader_stack ("Wind", "/gltransition/transition1.glsl", scale),
|
||||||
0, 0, 1, 1);
|
0, 0, 1, 1);
|
||||||
gtk_grid_attach (GTK_GRID (grid),
|
gtk_grid_attach (GTK_GRID (grid),
|
||||||
make_shader_stack ("Radial", "/gltransition/radial.glsl", 1, scale),
|
make_shader_stack ("Radial", "/gltransition/transition2.glsl", scale),
|
||||||
1, 0, 1, 1);
|
1, 0, 1, 1);
|
||||||
gtk_grid_attach (GTK_GRID (grid),
|
gtk_grid_attach (GTK_GRID (grid),
|
||||||
make_shader_stack ("Crosswarp", "/gltransition/crosswarp.glsl", 2, scale),
|
make_shader_stack ("Crosswarp", "/gltransition/transition3.glsl", scale),
|
||||||
0, 1, 1, 1);
|
0, 1, 1, 1);
|
||||||
gtk_grid_attach (GTK_GRID (grid),
|
gtk_grid_attach (GTK_GRID (grid),
|
||||||
make_shader_stack ("Kaleidoscope", "/gltransition/kaleidoscope.glsl", 3, scale),
|
make_shader_stack ("Kaleidoscope", "/gltransition/transition4.glsl", scale),
|
||||||
1, 1, 1, 1);
|
1, 1, 1, 1);
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
* that uses a #GskGLShader to create pixels.
|
* that uses a #GskGLShader to create pixels.
|
||||||
*
|
*
|
||||||
* You can set the uniform data that the shader needs for rendering
|
* You can set the uniform data that the shader needs for rendering
|
||||||
* using gsk_shader_paintable_set_args(). This function can
|
* using gsk_shader_paintable_set_uniform_data(). This function can
|
||||||
* be called repeatedly to change the uniform data for the next
|
* be called repeatedly to change the uniform data for the next
|
||||||
* snapshot.
|
* snapshot.
|
||||||
*
|
*
|
||||||
@@ -48,7 +48,7 @@ struct _GskShaderPaintable
|
|||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
|
|
||||||
GskGLShader *shader;
|
GskGLShader *shader;
|
||||||
GBytes *args;
|
GBytes *uniform_data;
|
||||||
|
|
||||||
gint64 start_time;
|
gint64 start_time;
|
||||||
};
|
};
|
||||||
@@ -61,7 +61,7 @@ struct _GskShaderPaintableClass
|
|||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_SHADER,
|
PROP_SHADER,
|
||||||
PROP_ARGS,
|
PROP_UNIFORM_DATA,
|
||||||
|
|
||||||
N_PROPS,
|
N_PROPS,
|
||||||
};
|
};
|
||||||
@@ -76,7 +76,7 @@ gsk_shader_paintable_paintable_snapshot (GdkPaintable *paintable,
|
|||||||
{
|
{
|
||||||
GskShaderPaintable *self = GSK_SHADER_PAINTABLE (paintable);
|
GskShaderPaintable *self = GSK_SHADER_PAINTABLE (paintable);
|
||||||
|
|
||||||
gtk_snapshot_push_gl_shader (snapshot, self->shader, &GRAPHENE_RECT_INIT(0, 0, width, height), g_bytes_ref (self->args));
|
gtk_snapshot_push_gl_shader (snapshot, self->shader, &GRAPHENE_RECT_INIT(0, 0, width, height), g_bytes_ref (self->uniform_data));
|
||||||
gtk_snapshot_pop (snapshot);
|
gtk_snapshot_pop (snapshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,8 +105,8 @@ gsk_shader_paintable_set_property (GObject *object,
|
|||||||
gsk_shader_paintable_set_shader (self, g_value_get_object (value));
|
gsk_shader_paintable_set_shader (self, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_ARGS:
|
case PROP_UNIFORM_DATA:
|
||||||
gsk_shader_paintable_set_args (self, g_value_get_boxed (value));
|
gsk_shader_paintable_set_uniform_data (self, g_value_get_boxed (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -129,8 +129,8 @@ gsk_shader_paintable_get_property (GObject *object,
|
|||||||
g_value_set_object (value, self->shader);
|
g_value_set_object (value, self->shader);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_ARGS:
|
case PROP_UNIFORM_DATA:
|
||||||
g_value_set_boxed (value, self->args);
|
g_value_set_boxed (value, self->uniform_data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -144,7 +144,7 @@ gsk_shader_paintable_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
GskShaderPaintable *self = GSK_SHADER_PAINTABLE (object);
|
GskShaderPaintable *self = GSK_SHADER_PAINTABLE (object);
|
||||||
|
|
||||||
g_clear_pointer (&self->args, g_bytes_unref);
|
g_clear_pointer (&self->uniform_data, g_bytes_unref);
|
||||||
g_clear_object (&self->shader);
|
g_clear_object (&self->shader);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gsk_shader_paintable_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gsk_shader_paintable_parent_class)->finalize (object);
|
||||||
@@ -164,8 +164,8 @@ gsk_shader_paintable_class_init (GskShaderPaintableClass *klass)
|
|||||||
GSK_TYPE_GL_SHADER,
|
GSK_TYPE_GL_SHADER,
|
||||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
properties[PROP_ARGS] =
|
properties[PROP_UNIFORM_DATA] =
|
||||||
g_param_spec_boxed ("args", "Arguments", "The uniform arguments",
|
g_param_spec_boxed ("uniform-data", "Uniform data", "The uniform data",
|
||||||
G_TYPE_BYTES,
|
G_TYPE_BYTES,
|
||||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ gsk_shader_paintable_new (GskGLShader *shader,
|
|||||||
|
|
||||||
ret = g_object_new (GSK_TYPE_SHADER_PAINTABLE,
|
ret = g_object_new (GSK_TYPE_SHADER_PAINTABLE,
|
||||||
"shader", shader,
|
"shader", shader,
|
||||||
"args", data,
|
"uniform-data", data,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_clear_object (&shader);
|
g_clear_object (&shader);
|
||||||
@@ -228,7 +228,7 @@ gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GSK_IS_SHADER_PAINTABLE (self));
|
g_return_if_fail (GSK_IS_SHADER_PAINTABLE (self));
|
||||||
g_return_if_fail (shader == NULL || GSK_IS_GL_SHADER (shader));
|
g_return_if_fail (shader == NULL || GSK_IS_GL_SHADER (shader));
|
||||||
g_return_if_fail (shader == NULL || gsk_gl_shader_get_n_textures (shader) == 0);
|
g_return_if_fail (shader == NULL || gsk_gl_shader_get_n_required_textures (shader) == 0);
|
||||||
|
|
||||||
if (!g_set_object (&self->shader, shader))
|
if (!g_set_object (&self->shader, shader))
|
||||||
return;
|
return;
|
||||||
@@ -236,7 +236,7 @@ gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
|||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHADER]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHADER]);
|
||||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
||||||
|
|
||||||
g_clear_pointer (&self->args, g_bytes_unref);
|
g_clear_pointer (&self->uniform_data, g_bytes_unref);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -256,7 +256,7 @@ gsk_shader_paintable_get_shader (GskShaderPaintable *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gsk_shader_paintable_set_args:
|
* gsk_shader_paintable_set_uniform_data:
|
||||||
* @self: a #GskShaderPaintable
|
* @self: a #GskShaderPaintable
|
||||||
* @data: Data block with uniform data for the shader
|
* @data: Data block with uniform data for the shader
|
||||||
*
|
*
|
||||||
@@ -268,35 +268,35 @@ gsk_shader_paintable_get_shader (GskShaderPaintable *self)
|
|||||||
* after it has been passed to this function.
|
* after it has been passed to this function.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gsk_shader_paintable_set_args (GskShaderPaintable *self,
|
gsk_shader_paintable_set_uniform_data (GskShaderPaintable *self,
|
||||||
GBytes *data)
|
GBytes *data)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GSK_IS_SHADER_PAINTABLE (self));
|
g_return_if_fail (GSK_IS_SHADER_PAINTABLE (self));
|
||||||
g_return_if_fail (data == NULL || g_bytes_get_size (data) == gsk_gl_shader_get_args_size (self->shader));
|
g_return_if_fail (data == NULL || g_bytes_get_size (data) == gsk_gl_shader_get_args_size (self->shader));
|
||||||
|
|
||||||
g_clear_pointer (&self->args, g_bytes_unref);
|
g_clear_pointer (&self->uniform_data, g_bytes_unref);
|
||||||
if (data)
|
if (data)
|
||||||
self->args = g_bytes_ref (data);
|
self->uniform_data = g_bytes_ref (data);
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ARGS]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UNIFORM_DATA]);
|
||||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gsk_shader_paintable_get_args:
|
* gsk_shader_paintable_get_uniform_data:
|
||||||
* @self: a #GskShaderPaintable
|
* @self: a #GskShaderPaintable
|
||||||
*
|
*
|
||||||
* Returns the uniform data set with
|
* Returns the uniform data set with
|
||||||
* gsk_shader_paintable_get_args().
|
* gsk_shader_paintable_get_uniform_data().
|
||||||
*
|
*
|
||||||
* Returns: (transfer none): the uniform data
|
* Returns: (transfer none): the uniform data
|
||||||
*/
|
*/
|
||||||
GBytes *
|
GBytes *
|
||||||
gsk_shader_paintable_get_args (GskShaderPaintable *self)
|
gsk_shader_paintable_get_uniform_data (GskShaderPaintable *self)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GSK_IS_SHADER_PAINTABLE (self), NULL);
|
g_return_val_if_fail (GSK_IS_SHADER_PAINTABLE (self), NULL);
|
||||||
|
|
||||||
return self->args;
|
return self->uniform_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -306,7 +306,7 @@ gsk_shader_paintable_get_args (GskShaderPaintable *self)
|
|||||||
* @frame_time: the current frame time, as returned by #GdkFrameClock
|
* @frame_time: the current frame time, as returned by #GdkFrameClock
|
||||||
*
|
*
|
||||||
* This function is a convenience wrapper for
|
* This function is a convenience wrapper for
|
||||||
* gsk_shader_paintable_set_args() that leaves all
|
* gsk_shader_paintable_set_uniform_data() that leaves all
|
||||||
* uniform values unchanged, except for the uniform with
|
* uniform values unchanged, except for the uniform with
|
||||||
* index @time_idx, which will be set to the elapsed time
|
* index @time_idx, which will be set to the elapsed time
|
||||||
* in seconds, since the first call to this function.
|
* in seconds, since the first call to this function.
|
||||||
@@ -318,20 +318,27 @@ gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
|||||||
int time_idx,
|
int time_idx,
|
||||||
gint64 frame_time)
|
gint64 frame_time)
|
||||||
{
|
{
|
||||||
GskShaderArgsBuilder *builder;
|
int size;
|
||||||
GBytes *args;
|
int offset;
|
||||||
|
guchar *data;
|
||||||
float time;
|
float time;
|
||||||
|
GBytes *uniform_data;
|
||||||
|
|
||||||
|
size = gsk_gl_shader_get_args_size (self->shader);
|
||||||
|
offset = gsk_gl_shader_get_uniform_offset (self->shader, time_idx);
|
||||||
|
|
||||||
|
data = g_new0 (guchar, size);
|
||||||
|
memcpy (data, g_bytes_get_data (self->uniform_data, NULL), size);
|
||||||
|
|
||||||
if (self->start_time == 0)
|
if (self->start_time == 0)
|
||||||
self->start_time = frame_time;
|
self->start_time = frame_time;
|
||||||
|
|
||||||
time = (frame_time - self->start_time) / (float)G_TIME_SPAN_SECOND;
|
time = (frame_time - self->start_time) / (float)G_TIME_SPAN_SECOND;
|
||||||
|
*(float*)(data + offset) = time;
|
||||||
|
|
||||||
builder = gsk_shader_args_builder_new (self->shader, self->args);
|
uniform_data = g_bytes_new_take (data, size);
|
||||||
gsk_shader_args_builder_set_float (builder, time_idx, time);
|
|
||||||
args = gsk_shader_args_builder_free_to_args (builder);
|
|
||||||
|
|
||||||
gsk_shader_paintable_set_args (self, args);
|
gsk_shader_paintable_set_uniform_data (self, uniform_data);
|
||||||
|
|
||||||
g_bytes_unref (args);
|
g_bytes_unref (uniform_data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ GDK_AVAILABLE_IN_ALL
|
|||||||
void gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
void gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
||||||
GskGLShader *shader);
|
GskGLShader *shader);
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
GBytes * gsk_shader_paintable_get_args (GskShaderPaintable *self);
|
GBytes * gsk_shader_paintable_get_uniform_data (GskShaderPaintable *self);
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gsk_shader_paintable_set_args (GskShaderPaintable *self,
|
void gsk_shader_paintable_set_uniform_data (GskShaderPaintable *self,
|
||||||
GBytes *data);
|
GBytes *data);
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
void gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
||||||
|
|||||||
@@ -179,9 +179,6 @@ gtk_fishbowl_add (GtkFishbowl *fishbowl,
|
|||||||
child_info->dy = new_speed ();
|
child_info->dy = new_speed ();
|
||||||
|
|
||||||
gtk_widget_set_parent (widget, GTK_WIDGET (fishbowl));
|
gtk_widget_set_parent (widget, GTK_WIDGET (fishbowl));
|
||||||
gtk_accessible_update_state (GTK_ACCESSIBLE (widget),
|
|
||||||
GTK_ACCESSIBLE_STATE_HIDDEN, TRUE,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_hash_table_insert (priv->children, widget, child_info);
|
g_hash_table_insert (priv->children, widget, child_info);
|
||||||
priv->count++;
|
priv->count++;
|
||||||
@@ -345,8 +342,6 @@ gtk_fishbowl_class_init (GtkFishbowlClass *klass)
|
|||||||
G_PARAM_READWRITE);
|
G_PARAM_READWRITE);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, NUM_PROPERTIES, props);
|
g_object_class_install_properties (object_class, NUM_PROPERTIES, props);
|
||||||
|
|
||||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_PRESENTATION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
guint
|
guint
|
||||||
|
|||||||
@@ -764,7 +764,7 @@ gtk_gears_realize (GtkWidget *widget)
|
|||||||
glShaderSource(v, 1, &p, NULL);
|
glShaderSource(v, 1, &p, NULL);
|
||||||
glCompileShader(v);
|
glCompileShader(v);
|
||||||
glGetShaderInfoLog(v, sizeof msg, NULL, msg);
|
glGetShaderInfoLog(v, sizeof msg, NULL, msg);
|
||||||
g_debug ("vertex shader info: %s\n", msg);
|
g_print ("vertex shader info: %s\n", msg);
|
||||||
|
|
||||||
/* Compile the fragment shader */
|
/* Compile the fragment shader */
|
||||||
if (gdk_gl_context_get_use_es (context))
|
if (gdk_gl_context_get_use_es (context))
|
||||||
@@ -775,7 +775,7 @@ gtk_gears_realize (GtkWidget *widget)
|
|||||||
glShaderSource(f, 1, &p, NULL);
|
glShaderSource(f, 1, &p, NULL);
|
||||||
glCompileShader(f);
|
glCompileShader(f);
|
||||||
glGetShaderInfoLog(f, sizeof msg, NULL, msg);
|
glGetShaderInfoLog(f, sizeof msg, NULL, msg);
|
||||||
g_debug ("fragment shader info: %s\n", msg);
|
g_print ("fragment shader info: %s\n", msg);
|
||||||
|
|
||||||
/* Create and link the shader program */
|
/* Create and link the shader program */
|
||||||
program = glCreateProgram();
|
program = glCreateProgram();
|
||||||
@@ -786,7 +786,7 @@ gtk_gears_realize (GtkWidget *widget)
|
|||||||
|
|
||||||
glLinkProgram(program);
|
glLinkProgram(program);
|
||||||
glGetProgramInfoLog(program, sizeof msg, NULL, msg);
|
glGetProgramInfoLog(program, sizeof msg, NULL, msg);
|
||||||
g_debug ("program info: %s\n", msg);
|
g_print ("program info: %s\n", msg);
|
||||||
glDeleteShader (v);
|
glDeleteShader (v);
|
||||||
glDeleteShader (f);
|
glDeleteShader (f);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ typedef struct {
|
|||||||
GskGLShader *shader;
|
GskGLShader *shader;
|
||||||
GtkStateFlags state;
|
GtkStateFlags state;
|
||||||
GtkStateFlags state_mask;
|
GtkStateFlags state_mask;
|
||||||
float extra_border;
|
|
||||||
gboolean compiled;
|
gboolean compiled;
|
||||||
gboolean compiled_ok;
|
gboolean compiled_ok;
|
||||||
} ShaderInfo;
|
} ShaderInfo;
|
||||||
@@ -17,7 +16,6 @@ struct _GtkShaderBin
|
|||||||
GPtrArray *shaders;
|
GPtrArray *shaders;
|
||||||
guint tick_id;
|
guint tick_id;
|
||||||
float time;
|
float time;
|
||||||
float mouse_x, mouse_y;
|
|
||||||
gint64 first_frame_time;
|
gint64 first_frame_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -73,25 +71,10 @@ gtk_shader_bin_tick (GtkWidget *widget,
|
|||||||
return G_SOURCE_CONTINUE;
|
return G_SOURCE_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
motion_cb (GtkEventControllerMotion *controller,
|
|
||||||
double x,
|
|
||||||
double y,
|
|
||||||
GtkShaderBin *self)
|
|
||||||
{
|
|
||||||
self->mouse_x = x;
|
|
||||||
self->mouse_y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_shader_bin_init (GtkShaderBin *self)
|
gtk_shader_bin_init (GtkShaderBin *self)
|
||||||
{
|
{
|
||||||
GtkEventController *controller;
|
|
||||||
self->shaders = g_ptr_array_new_with_free_func ((GDestroyNotify)shader_info_free);
|
self->shaders = g_ptr_array_new_with_free_func ((GDestroyNotify)shader_info_free);
|
||||||
|
|
||||||
controller = gtk_event_controller_motion_new ();
|
|
||||||
g_signal_connect (controller, "motion", G_CALLBACK (motion_cb), self);
|
|
||||||
gtk_widget_add_controller (GTK_WIDGET (self), controller);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -149,14 +132,12 @@ void
|
|||||||
gtk_shader_bin_add_shader (GtkShaderBin *self,
|
gtk_shader_bin_add_shader (GtkShaderBin *self,
|
||||||
GskGLShader *shader,
|
GskGLShader *shader,
|
||||||
GtkStateFlags state,
|
GtkStateFlags state,
|
||||||
GtkStateFlags state_mask,
|
GtkStateFlags state_mask)
|
||||||
float extra_border)
|
|
||||||
{
|
{
|
||||||
ShaderInfo *info = g_new0 (ShaderInfo, 1);
|
ShaderInfo *info = g_new0 (ShaderInfo, 1);
|
||||||
info->shader = g_object_ref (shader);
|
info->shader = g_object_ref (shader);
|
||||||
info->state = state;
|
info->state = state;
|
||||||
info->state_mask = state_mask;
|
info->state_mask = state_mask;
|
||||||
info->extra_border = extra_border;
|
|
||||||
|
|
||||||
g_ptr_array_add (self->shaders, info);
|
g_ptr_array_add (self->shaders, info);
|
||||||
|
|
||||||
@@ -206,8 +187,8 @@ gtk_shader_bin_snapshot (GtkWidget *widget,
|
|||||||
|
|
||||||
self->active_shader->compiled = TRUE;
|
self->active_shader->compiled = TRUE;
|
||||||
self->active_shader->compiled_ok =
|
self->active_shader->compiled_ok =
|
||||||
gsk_gl_shader_compile (self->active_shader->shader,
|
gsk_gl_shader_try_compile_for (self->active_shader->shader,
|
||||||
renderer, &error);
|
renderer, &error);
|
||||||
if (!self->active_shader->compiled_ok)
|
if (!self->active_shader->compiled_ok)
|
||||||
{
|
{
|
||||||
g_warning ("GtkShaderBin failed to compile shader: %s", error->message);
|
g_warning ("GtkShaderBin failed to compile shader: %s", error->message);
|
||||||
@@ -217,14 +198,10 @@ gtk_shader_bin_snapshot (GtkWidget *widget,
|
|||||||
|
|
||||||
if (self->active_shader->compiled_ok)
|
if (self->active_shader->compiled_ok)
|
||||||
{
|
{
|
||||||
float border = self->active_shader->extra_border;
|
|
||||||
graphene_vec2_t mouse;
|
|
||||||
graphene_vec2_init (&mouse, self->mouse_x + border, self->mouse_y + border);
|
|
||||||
gtk_snapshot_push_gl_shader (snapshot, self->active_shader->shader,
|
gtk_snapshot_push_gl_shader (snapshot, self->active_shader->shader,
|
||||||
&GRAPHENE_RECT_INIT(-border, -border, width+2*border, height+2*border),
|
&GRAPHENE_RECT_INIT(0, 0, width, height),
|
||||||
gsk_gl_shader_format_args (self->active_shader->shader,
|
gsk_gl_shader_format_args (self->active_shader->shader,
|
||||||
"u_time", self->time,
|
"u_time", self->time,
|
||||||
"u_mouse", &mouse,
|
|
||||||
NULL));
|
NULL));
|
||||||
gtk_widget_snapshot_child (widget, self->child, snapshot);
|
gtk_widget_snapshot_child (widget, self->child, snapshot);
|
||||||
gtk_snapshot_gl_shader_pop_texture (snapshot);
|
gtk_snapshot_gl_shader_pop_texture (snapshot);
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ GtkWidget *gtk_shader_bin_new (void);
|
|||||||
void gtk_shader_bin_add_shader (GtkShaderBin *self,
|
void gtk_shader_bin_add_shader (GtkShaderBin *self,
|
||||||
GskGLShader *shader,
|
GskGLShader *shader,
|
||||||
GtkStateFlags state,
|
GtkStateFlags state,
|
||||||
GtkStateFlags state_mask,
|
GtkStateFlags state_mask);
|
||||||
float extra_border);
|
|
||||||
void gtk_shader_bin_set_child (GtkShaderBin *self,
|
void gtk_shader_bin_set_child (GtkShaderBin *self,
|
||||||
GtkWidget *child);
|
GtkWidget *child);
|
||||||
GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self);
|
GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self);
|
||||||
|
|||||||
@@ -238,7 +238,8 @@ gtk_shader_stack_snapshot (GtkWidget *widget,
|
|||||||
progress = 1. - progress;
|
progress = 1. - progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gsk_gl_shader_compile (self->shader, renderer, NULL))
|
if (gsk_gl_shader_try_compile_for (self->shader,
|
||||||
|
renderer, NULL))
|
||||||
{
|
{
|
||||||
gtk_snapshot_push_gl_shader (snapshot,
|
gtk_snapshot_push_gl_shader (snapshot,
|
||||||
self->shader,
|
self->shader,
|
||||||
@@ -350,12 +351,3 @@ gtk_shader_stack_add_child (GtkShaderStack *self,
|
|||||||
else
|
else
|
||||||
gtk_widget_set_child_visible (child, FALSE);
|
gtk_widget_set_child_visible (child, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gtk_shader_stack_set_active (GtkShaderStack *self,
|
|
||||||
int index)
|
|
||||||
{
|
|
||||||
stop_transition (self);
|
|
||||||
self->current = MIN (index, self->children->len);
|
|
||||||
update_child_visible (self);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -14,9 +14,7 @@ void gtk_shader_stack_set_shader (GtkShaderStack *self,
|
|||||||
void gtk_shader_stack_add_child (GtkShaderStack *self,
|
void gtk_shader_stack_add_child (GtkShaderStack *self,
|
||||||
GtkWidget *child);
|
GtkWidget *child);
|
||||||
void gtk_shader_stack_transition (GtkShaderStack *self,
|
void gtk_shader_stack_transition (GtkShaderStack *self,
|
||||||
gboolean forward);
|
gboolean forward);
|
||||||
void gtk_shader_stack_set_active (GtkShaderStack *self,
|
|
||||||
int index);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ static GtkWidget *window = NULL;
|
|||||||
static GtkWidget *scrolledwindow;
|
static GtkWidget *scrolledwindow;
|
||||||
static int selected;
|
static int selected;
|
||||||
|
|
||||||
#define N_WIDGET_TYPES 7
|
#define N_WIDGET_TYPES 6
|
||||||
|
|
||||||
|
|
||||||
static int hincrement = 5;
|
static int hincrement = 5;
|
||||||
@@ -177,24 +177,6 @@ populate_grid (void)
|
|||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern GtkWidget *create_ucd_view (GtkWidget *label);
|
|
||||||
|
|
||||||
static void
|
|
||||||
populate_list2 (void)
|
|
||||||
{
|
|
||||||
GtkWidget *list;
|
|
||||||
|
|
||||||
list = create_ucd_view (NULL);
|
|
||||||
|
|
||||||
hincrement = 0;
|
|
||||||
vincrement = 5;
|
|
||||||
|
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
|
|
||||||
GTK_POLICY_AUTOMATIC,
|
|
||||||
GTK_POLICY_AUTOMATIC);
|
|
||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_widget_type (int type)
|
set_widget_type (int type)
|
||||||
{
|
{
|
||||||
@@ -234,11 +216,6 @@ set_widget_type (int type)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Scrolling a columned list");
|
|
||||||
populate_list2 ();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Scrolling a grid");
|
gtk_window_set_title (GTK_WINDOW (window), "Scrolling a grid");
|
||||||
populate_grid ();
|
populate_grid ();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#include <glib/gstdio.h>
|
#include <glib/gstdio.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "pixbufpaintable.h"
|
|
||||||
|
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
static GdkPixbufLoader *pixbuf_loader = NULL;
|
static GdkPixbufLoader *pixbuf_loader = NULL;
|
||||||
@@ -57,7 +56,6 @@ progressive_updated_callback (GdkPixbufLoader *loader,
|
|||||||
picture = GTK_WIDGET (data);
|
picture = GTK_WIDGET (data);
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||||
gtk_picture_set_pixbuf (GTK_PICTURE (picture), NULL);
|
|
||||||
gtk_picture_set_pixbuf (GTK_PICTURE (picture), pixbuf);
|
gtk_picture_set_pixbuf (GTK_PICTURE (picture), pixbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +262,7 @@ start_progressive_loading (GtkWidget *picture)
|
|||||||
* The timeout simply simulates a slow data source by inserting
|
* The timeout simply simulates a slow data source by inserting
|
||||||
* pauses in the reading process.
|
* pauses in the reading process.
|
||||||
*/
|
*/
|
||||||
load_timeout = g_timeout_add (300, progressive_timeout, picture);
|
load_timeout = g_timeout_add (1500, progressive_timeout, picture);
|
||||||
g_source_set_name_by_id (load_timeout, "[gtk] progressive_timeout");
|
g_source_set_name_by_id (load_timeout, "[gtk] progressive_timeout");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,8 +345,9 @@ do_images (GtkWidget *do_widget)
|
|||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||||
gtk_box_append (GTK_BOX (hbox), vbox);
|
gtk_box_append (GTK_BOX (hbox), vbox);
|
||||||
|
|
||||||
label = gtk_label_new ("Image from a resource");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Image loaded from a file</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -356,7 +355,7 @@ do_images (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||||
gtk_box_append (GTK_BOX (vbox), frame);
|
gtk_box_append (GTK_BOX (vbox), frame);
|
||||||
|
|
||||||
image = gtk_image_new_from_resource ("/images/org.gtk.Demo4.svg");
|
image = gtk_image_new_from_icon_name ("gtk3-demo");
|
||||||
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
|
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
|
||||||
|
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), image);
|
gtk_frame_set_child (GTK_FRAME (frame), image);
|
||||||
@@ -364,8 +363,9 @@ do_images (GtkWidget *do_widget)
|
|||||||
|
|
||||||
/* Animation */
|
/* Animation */
|
||||||
|
|
||||||
label = gtk_label_new ("Animation from a resource");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Animation loaded from a file</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -373,16 +373,15 @@ do_images (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||||
gtk_box_append (GTK_BOX (vbox), frame);
|
gtk_box_append (GTK_BOX (vbox), frame);
|
||||||
|
|
||||||
paintable = pixbuf_paintable_new_from_resource ("/images/floppybuddy.gif");
|
picture = gtk_picture_new_for_resource ("/images/floppybuddy.gif");
|
||||||
picture = gtk_picture_new_for_paintable (paintable);
|
|
||||||
g_object_unref (paintable);
|
|
||||||
|
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), picture);
|
gtk_frame_set_child (GTK_FRAME (frame), picture);
|
||||||
|
|
||||||
/* Symbolic icon */
|
/* Symbolic icon */
|
||||||
|
|
||||||
label = gtk_label_new ("Symbolic themed icon");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Symbolic themed icon</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -401,8 +400,9 @@ do_images (GtkWidget *do_widget)
|
|||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||||
gtk_box_append (GTK_BOX (hbox), vbox);
|
gtk_box_append (GTK_BOX (hbox), vbox);
|
||||||
|
|
||||||
label = gtk_label_new ("Progressive image loading");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Progressive image loading</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -414,7 +414,6 @@ do_images (GtkWidget *do_widget)
|
|||||||
* will create the pixbuf and fill it in.
|
* will create the pixbuf and fill it in.
|
||||||
*/
|
*/
|
||||||
picture = gtk_picture_new ();
|
picture = gtk_picture_new ();
|
||||||
gtk_picture_set_alternative_text (GTK_PICTURE (picture), "A slowly loading image");
|
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), picture);
|
gtk_frame_set_child (GTK_FRAME (frame), picture);
|
||||||
|
|
||||||
start_progressive_loading (picture);
|
start_progressive_loading (picture);
|
||||||
@@ -423,8 +422,9 @@ do_images (GtkWidget *do_widget)
|
|||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||||
gtk_box_append (GTK_BOX (hbox), vbox);
|
gtk_box_append (GTK_BOX (hbox), vbox);
|
||||||
|
|
||||||
label = gtk_label_new ("Displaying video");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>Displaying video</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -440,8 +440,9 @@ do_images (GtkWidget *do_widget)
|
|||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||||
gtk_box_append (GTK_BOX (hbox), vbox);
|
gtk_box_append (GTK_BOX (hbox), vbox);
|
||||||
|
|
||||||
label = gtk_label_new ("GtkWidgetPaintable");
|
label = gtk_label_new (NULL);
|
||||||
gtk_widget_add_css_class (label, "heading");
|
gtk_label_set_markup (GTK_LABEL (label),
|
||||||
|
"<u>GtkWidgetPaintable</u>");
|
||||||
gtk_box_append (GTK_BOX (vbox), label);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
paintable = gtk_widget_paintable_new (do_widget);
|
paintable = gtk_widget_paintable_new (do_widget);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ do_layoutmanager (GtkWidget *parent)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Layout Manager — Transition");
|
gtk_window_set_title (GTK_WINDOW (window), "Layout Manager—Transition");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 600);
|
gtk_window_set_default_size (GTK_WINDOW (window), 600, 600);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ do_layoutmanager2 (GtkWidget *parent)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Layout Manager — Transformation");
|
gtk_window_set_title (GTK_WINDOW (window), "Layout Manager—Transformation");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 620);
|
gtk_window_set_default_size (GTK_WINDOW (window), 600, 620);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* List Box/Complex
|
/* List Box/Complex list
|
||||||
*
|
*
|
||||||
* GtkListBox allows lists with complicated layouts, using
|
* GtkListBox allows lists with complicated layouts, using
|
||||||
* regular widgets supporting sorting and filtering.
|
* regular widgets supporting sorting and filtering.
|
||||||
@@ -197,7 +197,7 @@ gtk_message_row_update (GtkMessageRow *row)
|
|||||||
|
|
||||||
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, "gtk3-demo");
|
||||||
gtk_image_set_icon_size (priv->avatar_image, GTK_ICON_SIZE_LARGE);
|
gtk_image_set_icon_size (priv->avatar_image, GTK_ICON_SIZE_LARGE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -349,7 +349,7 @@ do_listbox (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_title (GTK_WINDOW (window), "List Box — Complex");
|
gtk_window_set_title (GTK_WINDOW (window), "List Box");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 400, 600);
|
gtk_window_set_default_size (GTK_WINDOW (window), 400, 600);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ row_activated (GtkListBox *list,
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_listbox_controls (GtkWidget *do_widget)
|
do_listbox2 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
@@ -47,7 +47,7 @@ do_listbox_controls (GtkWidget *do_widget)
|
|||||||
builder = gtk_builder_new ();
|
builder = gtk_builder_new ();
|
||||||
gtk_builder_set_scope (builder, scope);
|
gtk_builder_set_scope (builder, scope);
|
||||||
|
|
||||||
gtk_builder_add_from_resource (builder, "/listbox_controls/listbox_controls.ui", NULL);
|
gtk_builder_add_from_resource (builder, "/listbox2/listbox2.ui", NULL);
|
||||||
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
@@ -1,382 +0,0 @@
|
|||||||
/* Lists/Characters
|
|
||||||
*
|
|
||||||
* This demo shows a multi-column representation of some parts
|
|
||||||
* of the Unicode Character Database, or UCD.
|
|
||||||
*
|
|
||||||
* The dataset used here has 33 796 items.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include "script-names.h"
|
|
||||||
#include "unicode-names.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define UCD_TYPE_ITEM (ucd_item_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (UcdItem, ucd_item, UCD, ITEM, GObject)
|
|
||||||
|
|
||||||
struct _UcdItem
|
|
||||||
{
|
|
||||||
GObject parent_instance;
|
|
||||||
gunichar codepoint;
|
|
||||||
const char *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _UcdItemClass
|
|
||||||
{
|
|
||||||
GObjectClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (UcdItem, ucd_item, G_TYPE_OBJECT)
|
|
||||||
|
|
||||||
static void
|
|
||||||
ucd_item_init (UcdItem *item)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ucd_item_class_init (UcdItemClass *class)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static UcdItem *
|
|
||||||
ucd_item_new (gunichar codepoint,
|
|
||||||
const char *name)
|
|
||||||
{
|
|
||||||
UcdItem *item;
|
|
||||||
|
|
||||||
item = g_object_new (UCD_TYPE_ITEM, NULL);
|
|
||||||
|
|
||||||
item->codepoint = codepoint;
|
|
||||||
item->name = name;
|
|
||||||
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gunichar
|
|
||||||
ucd_item_get_codepoint (UcdItem *item)
|
|
||||||
{
|
|
||||||
return item->codepoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *
|
|
||||||
ucd_item_get_name (UcdItem *item)
|
|
||||||
{
|
|
||||||
return item->name;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GListModel *
|
|
||||||
ucd_model_new (void)
|
|
||||||
{
|
|
||||||
GBytes *bytes;
|
|
||||||
GVariant *v;
|
|
||||||
GVariantIter *iter;
|
|
||||||
GListStore *store;
|
|
||||||
guint u;
|
|
||||||
char *name;
|
|
||||||
|
|
||||||
bytes = g_resources_lookup_data ("/listview_ucd_data/ucdnames.data", 0, NULL);
|
|
||||||
v = g_variant_ref_sink (g_variant_new_from_bytes (G_VARIANT_TYPE ("a(us)"), bytes, TRUE));
|
|
||||||
|
|
||||||
iter = g_variant_iter_new (v);
|
|
||||||
|
|
||||||
store = g_list_store_new (G_TYPE_OBJECT);
|
|
||||||
while (g_variant_iter_next (iter, "(u&s)", &u, &name))
|
|
||||||
{
|
|
||||||
if (u == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
UcdItem *item = ucd_item_new (u, name);
|
|
||||||
g_list_store_append (store, item);
|
|
||||||
g_object_unref (item);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_variant_iter_free (iter);
|
|
||||||
g_variant_unref (v);
|
|
||||||
g_bytes_unref (bytes);
|
|
||||||
|
|
||||||
return G_LIST_MODEL (store);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_centered_label (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_list_item_set_child (GTK_LIST_ITEM (listitem), label);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_label (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
|
||||||
gtk_list_item_set_child (GTK_LIST_ITEM (listitem), label);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setup_ellipsizing_label (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
|
||||||
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
|
|
||||||
gtk_label_set_width_chars (GTK_LABEL (label), 20);
|
|
||||||
gtk_list_item_set_child (GTK_LIST_ITEM (listitem), label);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_codepoint (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
gunichar codepoint;
|
|
||||||
char buffer[16] = { 0, };
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
codepoint = ucd_item_get_codepoint (UCD_ITEM (item));
|
|
||||||
|
|
||||||
g_snprintf (buffer, 10, "%#06x", codepoint);
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_char (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
gunichar codepoint;
|
|
||||||
char buffer[16] = { 0, };
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
codepoint = ucd_item_get_codepoint (UCD_ITEM (item));
|
|
||||||
|
|
||||||
if (g_unichar_isprint (codepoint))
|
|
||||||
g_unichar_to_utf8 (codepoint, buffer);
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_name (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
const char *name;
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
name = ucd_item_get_name (UCD_ITEM (item));
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), name);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_type (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
gunichar codepoint;
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
codepoint = ucd_item_get_codepoint (UCD_ITEM (item));
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), get_unicode_type_name (g_unichar_type (codepoint)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_break_type (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
gunichar codepoint;
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
codepoint = ucd_item_get_codepoint (UCD_ITEM (item));
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), get_break_type_name (g_unichar_break_type (codepoint)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_combining_class (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
gunichar codepoint;
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
codepoint = ucd_item_get_codepoint (UCD_ITEM (item));
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), get_combining_class_name (g_unichar_combining_class (codepoint)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_script (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *listitem)
|
|
||||||
{
|
|
||||||
GtkWidget *label;
|
|
||||||
GObject *item;
|
|
||||||
gunichar codepoint;
|
|
||||||
GUnicodeScript script;
|
|
||||||
|
|
||||||
label = gtk_list_item_get_child (GTK_LIST_ITEM (listitem));
|
|
||||||
item = gtk_list_item_get_item (GTK_LIST_ITEM (listitem));
|
|
||||||
codepoint = ucd_item_get_codepoint (UCD_ITEM (item));
|
|
||||||
script = g_unichar_get_script (codepoint);
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), get_script_name (script));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
selection_changed (GObject *object,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
GtkWidget *label)
|
|
||||||
{
|
|
||||||
UcdItem *item;
|
|
||||||
guint codepoint;
|
|
||||||
char buffer[16] = { 0, };
|
|
||||||
|
|
||||||
item = gtk_single_selection_get_selected_item (GTK_SINGLE_SELECTION (object));
|
|
||||||
codepoint = ucd_item_get_codepoint (item);
|
|
||||||
|
|
||||||
if (g_unichar_isprint (codepoint))
|
|
||||||
g_unichar_to_utf8 (codepoint, buffer);
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (label), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
create_ucd_view (GtkWidget *label)
|
|
||||||
{
|
|
||||||
GtkWidget *cv;
|
|
||||||
GListModel *ucd_model;
|
|
||||||
GtkSingleSelection *selection;
|
|
||||||
GtkListItemFactory *factory;
|
|
||||||
GtkColumnViewColumn *column;
|
|
||||||
|
|
||||||
ucd_model = ucd_model_new ();
|
|
||||||
|
|
||||||
selection = gtk_single_selection_new (ucd_model);
|
|
||||||
gtk_single_selection_set_autoselect (selection, TRUE);
|
|
||||||
gtk_single_selection_set_can_unselect (selection, FALSE);
|
|
||||||
if (label)
|
|
||||||
g_signal_connect (selection, "notify::selected", G_CALLBACK (selection_changed), label);
|
|
||||||
|
|
||||||
cv = gtk_column_view_new (GTK_SELECTION_MODEL (selection));
|
|
||||||
gtk_column_view_set_show_column_separators (GTK_COLUMN_VIEW (cv), TRUE);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_centered_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_codepoint), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Codepoint", factory);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_centered_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_char), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Char", factory);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_ellipsizing_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_name), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Name", factory);
|
|
||||||
gtk_column_view_column_set_resizable (column, TRUE);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_ellipsizing_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_type), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Type", factory);
|
|
||||||
gtk_column_view_column_set_resizable (column, TRUE);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_ellipsizing_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_break_type), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Break Type", factory);
|
|
||||||
gtk_column_view_column_set_resizable (column, TRUE);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_combining_class), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Combining Class", factory);
|
|
||||||
gtk_column_view_column_set_resizable (column, TRUE);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_label), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_script), NULL);
|
|
||||||
column = gtk_column_view_column_new ("Script", factory);
|
|
||||||
gtk_column_view_column_set_resizable (column, TRUE);
|
|
||||||
gtk_column_view_append_column (GTK_COLUMN_VIEW (cv), column);
|
|
||||||
g_object_unref (column);
|
|
||||||
|
|
||||||
return cv;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *window;
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_listview_ucd (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
if (window == NULL)
|
|
||||||
{
|
|
||||||
GtkWidget *listview, *sw;
|
|
||||||
GtkWidget *box, *label;
|
|
||||||
GtkCssProvider *provider;
|
|
||||||
|
|
||||||
window = gtk_window_new ();
|
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 800, 400);
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Characters");
|
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
|
||||||
gtk_widget_get_display (do_widget));
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window);
|
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
|
||||||
label = gtk_label_new ("");
|
|
||||||
gtk_label_set_width_chars (GTK_LABEL (label), 2);
|
|
||||||
gtk_widget_add_css_class (label, "enormous");
|
|
||||||
provider = gtk_css_provider_new ();
|
|
||||||
gtk_css_provider_load_from_data (provider, "label.enormous { font-size: 80px; }", -1);
|
|
||||||
gtk_style_context_add_provider (gtk_widget_get_style_context (label), GTK_STYLE_PROVIDER (provider), 800);
|
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
|
||||||
gtk_box_append (GTK_BOX (box), label);
|
|
||||||
|
|
||||||
sw = gtk_scrolled_window_new ();
|
|
||||||
gtk_scrolled_window_set_propagate_natural_width (GTK_SCROLLED_WINDOW (sw), TRUE);
|
|
||||||
listview = create_ucd_view (label);
|
|
||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), listview);
|
|
||||||
gtk_box_prepend (GTK_BOX (box), sw);
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), box);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_widget_show (window);
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -142,39 +142,16 @@ load_file (GtkStringList *list,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
open_response_cb (GtkNativeDialog *dialog,
|
file_selected_cb (GtkWidget *button,
|
||||||
int response,
|
GtkStringList *stringlist)
|
||||||
GtkStringList *stringlist)
|
|
||||||
{
|
{
|
||||||
gtk_native_dialog_hide (dialog);
|
GFile *file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (button));
|
||||||
|
|
||||||
if (response == GTK_RESPONSE_ACCEPT)
|
if (file)
|
||||||
{
|
{
|
||||||
GFile *file;
|
|
||||||
|
|
||||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
|
||||||
load_file (stringlist, file);
|
load_file (stringlist, file);
|
||||||
g_object_unref (file);
|
g_object_unref (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_native_dialog_destroy (dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
file_open_cb (GtkWidget *button,
|
|
||||||
GtkStringList *stringlist)
|
|
||||||
{
|
|
||||||
GtkFileChooserNative *dialog;
|
|
||||||
|
|
||||||
dialog = gtk_file_chooser_native_new ("Open file",
|
|
||||||
GTK_WINDOW (gtk_widget_get_root (button)),
|
|
||||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
||||||
"_Load",
|
|
||||||
"_Cancel");
|
|
||||||
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
|
|
||||||
|
|
||||||
g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), stringlist);
|
|
||||||
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@@ -212,8 +189,8 @@ do_listview_words (GtkWidget *do_widget)
|
|||||||
|
|
||||||
header = gtk_header_bar_new ();
|
header = gtk_header_bar_new ();
|
||||||
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE);
|
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE);
|
||||||
open_button = gtk_button_new_with_mnemonic ("_Open");
|
open_button = gtk_file_chooser_button_new ("_Open", GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||||
g_signal_connect (open_button, "clicked", G_CALLBACK (file_open_cb), stringlist);
|
g_signal_connect (open_button, "file-set", G_CALLBACK (file_selected_cb), stringlist);
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), open_button);
|
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), open_button);
|
||||||
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||||
|
|
||||||
|
|||||||
@@ -337,8 +337,8 @@ display_text (const char *format,
|
|||||||
|
|
||||||
bytes = g_resources_lookup_data (resource, 0, NULL);
|
bytes = g_resources_lookup_data (resource, 0, NULL);
|
||||||
g_assert (bytes);
|
g_assert (bytes);
|
||||||
text = g_bytes_get_data (bytes, &len);
|
|
||||||
g_assert (g_utf8_validate (text, len, NULL));
|
g_assert (g_utf8_validate (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), NULL));
|
||||||
|
|
||||||
textview = gtk_text_view_new ();
|
textview = gtk_text_view_new ();
|
||||||
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (textview), 20);
|
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (textview), 20);
|
||||||
@@ -354,8 +354,9 @@ display_text (const char *format,
|
|||||||
gtk_text_view_set_monospace (GTK_TEXT_VIEW (textview), TRUE);
|
gtk_text_view_set_monospace (GTK_TEXT_VIEW (textview), TRUE);
|
||||||
|
|
||||||
buffer = gtk_text_buffer_new (NULL);
|
buffer = gtk_text_buffer_new (NULL);
|
||||||
|
|
||||||
|
text = g_bytes_unref_to_data (bytes, &len);
|
||||||
gtk_text_buffer_set_text (buffer, text, len);
|
gtk_text_buffer_set_text (buffer, text, len);
|
||||||
g_bytes_unref (bytes);
|
|
||||||
|
|
||||||
if (format)
|
if (format)
|
||||||
fontify (format, buffer);
|
fontify (format, buffer);
|
||||||
@@ -390,7 +391,7 @@ display_nothing (const char *resource)
|
|||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
str = g_strdup_printf ("The contents of the resource at '%s' cannot be displayed", resource);
|
str = g_strdup_printf ("The lazy GTK developers forgot to add a way to display the resource '%s'", resource);
|
||||||
widget = gtk_label_new (str);
|
widget = gtk_label_new (str);
|
||||||
gtk_label_set_wrap (GTK_LABEL (widget), TRUE);
|
gtk_label_set_wrap (GTK_LABEL (widget), TRUE);
|
||||||
|
|
||||||
@@ -409,7 +410,6 @@ static struct {
|
|||||||
{ ".gif", NULL, display_image },
|
{ ".gif", NULL, display_image },
|
||||||
{ ".jpg", NULL, display_image },
|
{ ".jpg", NULL, display_image },
|
||||||
{ ".png", NULL, display_image },
|
{ ".png", NULL, display_image },
|
||||||
{ ".svg", NULL, display_image },
|
|
||||||
{ ".c", "c", display_text },
|
{ ".c", "c", display_text },
|
||||||
{ ".css", "css", display_text },
|
{ ".css", "css", display_text },
|
||||||
{ ".glsl", NULL, display_text },
|
{ ".glsl", NULL, display_text },
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
</section>
|
</section>
|
||||||
</menu>
|
</menu>
|
||||||
<object class="GtkApplicationWindow" id="window">
|
<object class="GtkApplicationWindow" id="window">
|
||||||
|
<style>
|
||||||
|
<class name="devel"/>
|
||||||
|
</style>
|
||||||
<property name="default-width">800</property>
|
<property name="default-width">800</property>
|
||||||
<property name="default-height">600</property>
|
<property name="default-height">600</property>
|
||||||
<child type="titlebar">
|
<child type="titlebar">
|
||||||
@@ -25,17 +28,14 @@
|
|||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="action-name">win.run</property>
|
<property name="action-name">win.run</property>
|
||||||
<property name="label" translatable="yes">Run</property>
|
<style>
|
||||||
</object>
|
<class name="text-button"/>
|
||||||
</child>
|
</style>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkToggleButton">
|
<object class="GtkLabel">
|
||||||
<property name="icon-name">edit-find-symbolic</property>
|
<property name="label" translatable="yes">Run</property>
|
||||||
<property name="valign">center</property>
|
</object>
|
||||||
<property name="active" bind-source="searchbar" bind-property="search-mode-enabled" bind-flags="bidirectional|sync-create"/>
|
</child>
|
||||||
<accessibility>
|
|
||||||
<property name="label" translatable="yes">Search</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child type="end">
|
<child type="end">
|
||||||
@@ -43,9 +43,6 @@
|
|||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="menu-model">gear_menu</property>
|
<property name="menu-model">gear_menu</property>
|
||||||
<property name="icon-name">open-menu-symbolic</property>
|
<property name="icon-name">open-menu-symbolic</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label" translatable="yes">Primary menu</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -53,30 +50,24 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkScrolledWindow">
|
||||||
<property name="width-request">220</property>
|
<property name="width-request">120</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="hscrollbar-policy">never</property>
|
||||||
|
<property name="min-content-width">150</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSearchBar" id="searchbar">
|
<object class="GtkBox">
|
||||||
<property name="key-capture-widget">window</property>
|
<property name="width-request">220</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSearchEntry" id="search-entry">
|
<object class="GtkSearchBar" id="searchbar">
|
||||||
<accessibility>
|
<property name="key-capture-widget">window</property>
|
||||||
<relation name="controls">listview</relation>
|
<child>
|
||||||
</accessibility>
|
<object class="GtkSearchEntry" id="search-entry"/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow">
|
|
||||||
<style>
|
|
||||||
<class name="sidebar"/>
|
|
||||||
</style>
|
|
||||||
<property name="width-request">120</property>
|
|
||||||
<property name="hscrollbar-policy">never</property>
|
|
||||||
<property name="min-content-width">150</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkListView" id="listview">
|
<object class="GtkListView" id="listview">
|
||||||
<style>
|
<style>
|
||||||
@@ -87,16 +78,16 @@
|
|||||||
<property name="resource">/ui/main-listitem.ui</property>
|
<property name="resource">/ui/main-listitem.ui</property>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label" translatable="yes">Demo list</property>
|
|
||||||
<relation name="controls">notebook</relation>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator"/>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkNotebook" id="notebook">
|
<object class="GtkNotebook" id="notebook">
|
||||||
<property name="scrollable">1</property>
|
<property name="scrollable">1</property>
|
||||||
@@ -121,10 +112,6 @@
|
|||||||
<property name="editable">0</property>
|
<property name="editable">0</property>
|
||||||
<property name="wrap-mode">word</property>
|
<property name="wrap-mode">word</property>
|
||||||
<property name="cursor-visible">0</property>
|
<property name="cursor-visible">0</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label" translatable="yes">Info</property>
|
|
||||||
<property name="description" translatable="yes">A description of the demo</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -155,10 +142,6 @@
|
|||||||
<property name="wrap-mode">word</property>
|
<property name="wrap-mode">word</property>
|
||||||
<property name="pixels-above-lines">2</property>
|
<property name="pixels-above-lines">2</property>
|
||||||
<property name="pixels-below-lines">2</property>
|
<property name="pixels-below-lines">2</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label" translatable="yes">Source</property>
|
|
||||||
<property name="description" translatable="yes">The source code of the demo</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
@@ -7,9 +7,8 @@ demos = files([
|
|||||||
'clipboard.c',
|
'clipboard.c',
|
||||||
'combobox.c',
|
'combobox.c',
|
||||||
'constraints.c',
|
'constraints.c',
|
||||||
'constraints_interactive.c',
|
'constraints2.c',
|
||||||
'constraints_vfl.c',
|
'constraints3.c',
|
||||||
'constraints_builder.c',
|
|
||||||
'css_accordion.c',
|
'css_accordion.c',
|
||||||
'css_basics.c',
|
'css_basics.c',
|
||||||
'css_blendmodes.c',
|
'css_blendmodes.c',
|
||||||
@@ -19,6 +18,7 @@ demos = files([
|
|||||||
'cursors.c',
|
'cursors.c',
|
||||||
'dialog.c',
|
'dialog.c',
|
||||||
'drawingarea.c',
|
'drawingarea.c',
|
||||||
|
'dropdown.c',
|
||||||
'dnd.c',
|
'dnd.c',
|
||||||
'editable_cells.c',
|
'editable_cells.c',
|
||||||
'entry_completion.c',
|
'entry_completion.c',
|
||||||
@@ -44,7 +44,7 @@ demos = files([
|
|||||||
'layoutmanager2.c',
|
'layoutmanager2.c',
|
||||||
'links.c',
|
'links.c',
|
||||||
'listbox.c',
|
'listbox.c',
|
||||||
'listbox_controls.c',
|
'listbox2.c',
|
||||||
'menu.c',
|
'menu.c',
|
||||||
'flowbox.c',
|
'flowbox.c',
|
||||||
'list_store.c',
|
'list_store.c',
|
||||||
@@ -53,14 +53,12 @@ demos = files([
|
|||||||
'listview_colors.c',
|
'listview_colors.c',
|
||||||
'listview_filebrowser.c',
|
'listview_filebrowser.c',
|
||||||
'listview_minesweeper.c',
|
'listview_minesweeper.c',
|
||||||
'dropdown.c',
|
|
||||||
'listview_settings.c',
|
'listview_settings.c',
|
||||||
'listview_ucd.c',
|
|
||||||
'listview_weather.c',
|
'listview_weather.c',
|
||||||
'listview_words.c',
|
'listview_words.c',
|
||||||
'markup.c',
|
'markup.c',
|
||||||
'overlay.c',
|
'overlay.c',
|
||||||
'overlay_decorative.c',
|
'overlay2.c',
|
||||||
'paint.c',
|
'paint.c',
|
||||||
'paintable.c',
|
'paintable.c',
|
||||||
'paintable_animated.c',
|
'paintable_animated.c',
|
||||||
@@ -100,37 +98,31 @@ demos = files([
|
|||||||
|
|
||||||
gtkdemo_deps = [ libgtk_dep, ]
|
gtkdemo_deps = [ libgtk_dep, ]
|
||||||
|
|
||||||
extra_demo_sources = files([
|
extra_demo_sources = files(['main.c',
|
||||||
'main.c',
|
'fontify.c',
|
||||||
'fontify.c',
|
'gtkfishbowl.c',
|
||||||
'gtkfishbowl.c',
|
'fontplane.c',
|
||||||
'fontplane.c',
|
'gtkgears.c',
|
||||||
'gtkgears.c',
|
'gtkshaderbin.c',
|
||||||
'gtkshaderbin.c',
|
'gtkshadertoy.c',
|
||||||
'gtkshadertoy.c',
|
'gtkshaderstack.c',
|
||||||
'gtkshaderstack.c',
|
'gskshaderpaintable.c',
|
||||||
'gskshaderpaintable.c',
|
'puzzlepiece.c',
|
||||||
'puzzlepiece.c',
|
'bluroverlay.c',
|
||||||
'bluroverlay.c',
|
'demoimage.c',
|
||||||
'demoimage.c',
|
'demotaggedentry.c',
|
||||||
'demotaggedentry.c',
|
'demochild.c',
|
||||||
'demochild.c',
|
'demolayout.c',
|
||||||
'demolayout.c',
|
'demowidget.c',
|
||||||
'demowidget.c',
|
'demo2layout.c',
|
||||||
'demo2layout.c',
|
'singular_value_decomposition.c',
|
||||||
'singular_value_decomposition.c',
|
'four_point_transform.c',
|
||||||
'four_point_transform.c',
|
'demo2widget.c',
|
||||||
'demo2widget.c',
|
'demo3widget.c'])
|
||||||
'demo3widget.c',
|
|
||||||
'pixbufpaintable.c',
|
|
||||||
'script-names.c',
|
|
||||||
'unicode-names.c',
|
|
||||||
'suggestionentry.c',
|
|
||||||
])
|
|
||||||
|
|
||||||
if harfbuzz_dep.found() and pangoft_dep.found()
|
if harfbuzz_dep.found() and pangoft_dep.found()
|
||||||
demos += files(['font_features.c'])
|
demos += files('font_features.c')
|
||||||
extra_demo_sources += files(['language-names.c'])
|
extra_demo_sources += files(['script-names.c', 'language-names.c'])
|
||||||
gtkdemo_deps += [ harfbuzz_dep, epoxy_dep ]
|
gtkdemo_deps += [ harfbuzz_dep, epoxy_dep ]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -138,28 +130,17 @@ if os_unix
|
|||||||
demos += files('pagesetup.c')
|
demos += files('pagesetup.c')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
librsvg_dep = dependency('librsvg-2.0', version: '>= 2.46.0', required: false)
|
|
||||||
|
|
||||||
if librsvg_dep.found()
|
|
||||||
demos += files('paintable_svg.c')
|
|
||||||
extra_demo_sources += files(['svgpaintable.c'])
|
|
||||||
gtkdemo_deps += [ librsvg_dep ]
|
|
||||||
endif
|
|
||||||
|
|
||||||
gtkdemo_args = [ '-DGDK_DISABLE_DEPRECATED', '-DGTK_DISABLE_DEPRECATED', ]
|
gtkdemo_args = [ '-DGDK_DISABLE_DEPRECATED', '-DGTK_DISABLE_DEPRECATED', ]
|
||||||
|
|
||||||
demos_h = custom_target('gtk4 demo header',
|
demos_h = custom_target('gtk4 demo header',
|
||||||
output: 'demos.h',
|
output: 'demos.h',
|
||||||
input: demos,
|
input: demos,
|
||||||
command: [ find_program('geninclude.py'), '@OUTPUT@', '@INPUT@' ],
|
command: [ find_program('geninclude.py'), '@OUTPUT@', '@INPUT@' ])
|
||||||
)
|
|
||||||
|
|
||||||
gtkdemo_resources = gnome.compile_resources('gtkdemo_resources',
|
gtkdemo_resources = gnome.compile_resources('gtkdemo_resources',
|
||||||
'demo.gresource.xml',
|
'demo.gresource.xml',
|
||||||
source_dir: '.',
|
source_dir: '.')
|
||||||
)
|
|
||||||
|
|
||||||
# Use a subset of compiler flags
|
|
||||||
demo_cflags = []
|
demo_cflags = []
|
||||||
foreach flag: common_cflags
|
foreach flag: common_cflags
|
||||||
if flag not in ['-Werror=missing-prototypes', '-Werror=missing-declarations', '-fvisibility=hidden']
|
if flag not in ['-Werror=missing-prototypes', '-Werror=missing-declarations', '-fvisibility=hidden']
|
||||||
@@ -168,30 +149,30 @@ foreach flag: common_cflags
|
|||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
executable('gtk4-demo',
|
executable('gtk4-demo',
|
||||||
sources: [demos, demos_h, extra_demo_sources, gtkdemo_resources],
|
demos, demos_h, extra_demo_sources, gtkdemo_resources,
|
||||||
c_args: gtkdemo_args + demo_cflags,
|
c_args: gtkdemo_args + demo_cflags,
|
||||||
dependencies: gtkdemo_deps,
|
dependencies: gtkdemo_deps,
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
gui_app: true,
|
gui_app: true,
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
install: true,
|
install: true)
|
||||||
)
|
|
||||||
|
|
||||||
executable('gtk4-demo-application',
|
executable('gtk4-demo-application',
|
||||||
sources: ['application.c', gtkdemo_resources],
|
'application.c', gtkdemo_resources,
|
||||||
c_args: gtkdemo_args + common_cflags,
|
c_args: gtkdemo_args + common_cflags,
|
||||||
dependencies: gtkdemo_deps,
|
dependencies: gtkdemo_deps,
|
||||||
include_directories: confinc,
|
include_directories: confinc,
|
||||||
gui_app: true,
|
gui_app: true,
|
||||||
link_args: extra_demo_ldflags,
|
link_args: extra_demo_ldflags,
|
||||||
install: true,
|
install: true)
|
||||||
)
|
|
||||||
|
|
||||||
# icons
|
# icons
|
||||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||||
|
|
||||||
foreach size: ['scalable', 'symbolic']
|
foreach size: ['scalable', 'symbolic']
|
||||||
install_subdir('data/' + size, install_dir: icontheme_dir)
|
install_subdir('data/' + size,
|
||||||
|
install_dir: icontheme_dir
|
||||||
|
)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
# desktop file
|
# desktop file
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ Terminal=false
|
|||||||
Type=Application
|
Type=Application
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
Categories=Development;GTK;
|
Categories=Development;GTK;
|
||||||
|
NoDisplay=true
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg height="128px" viewBox="0 0 128 128" width="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<linearGradient id="a" gradientUnits="userSpaceOnUse" x1="43.000351" x2="85.000351" y1="39.000164" y2="39.000164">
|
|
||||||
<stop offset="0" stop-color="#26a269"/>
|
|
||||||
<stop offset="0.0934161" stop-color="#84e3b7"/>
|
|
||||||
<stop offset="0.330831" stop-color="#26a269"/>
|
|
||||||
<stop offset="0.686952" stop-color="#26a269"/>
|
|
||||||
<stop offset="0.89736" stop-color="#175e3c"/>
|
|
||||||
<stop offset="1" stop-color="#26a269"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="b" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop offset="0" stop-color="#c0bfbc"/>
|
|
||||||
<stop offset="0.154754" stop-color="#ffffff"/>
|
|
||||||
<stop offset="0.433722" stop-color="#bdbbb5"/>
|
|
||||||
<stop offset="0.650505" stop-color="#c1c0ba"/>
|
|
||||||
<stop offset="0.825253" stop-color="#ffffff"/>
|
|
||||||
<stop offset="1" stop-color="#c0bfbc"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="c" gradientTransform="matrix(0.0811899 -0.046875 0.069079 0.119648 307.03142 127.069456)" x1="-1710.210571" x2="-1774.45166" xlink:href="#b" y1="-1202.376709" y2="-1202.376709"/>
|
|
||||||
<linearGradient id="d" gradientTransform="matrix(-0.0811899 -0.046875 -0.069079 0.119648 -177.242852 127.069447)" x1="-1710.210571" x2="-1774.45166" xlink:href="#b" y1="-1202.376709" y2="-1202.376709"/>
|
|
||||||
<linearGradient id="e" gradientUnits="userSpaceOnUse" x1="14" x2="56" y1="94.999964" y2="94.999964">
|
|
||||||
<stop offset="0" stop-color="#813d9c"/>
|
|
||||||
<stop offset="0.109119" stop-color="#b378ca"/>
|
|
||||||
<stop offset="0.241583" stop-color="#813d9c"/>
|
|
||||||
<stop offset="0.731841" stop-color="#813d9c"/>
|
|
||||||
<stop offset="0.872163" stop-color="#4d255d"/>
|
|
||||||
<stop offset="1" stop-color="#813d9c"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="f" gradientUnits="userSpaceOnUse" x1="72" x2="114" y1="94.999964" y2="94.999964">
|
|
||||||
<stop offset="0" stop-color="#e66100"/>
|
|
||||||
<stop offset="0.0678478" stop-color="#ff903e"/>
|
|
||||||
<stop offset="0.168852" stop-color="#e66100"/>
|
|
||||||
<stop offset="0.886626" stop-color="#e66100"/>
|
|
||||||
<stop offset="1" stop-color="#9d4200"/>
|
|
||||||
</linearGradient>
|
|
||||||
<clipPath id="g">
|
|
||||||
<rect height="128" width="128"/>
|
|
||||||
</clipPath>
|
|
||||||
<clipPath id="h">
|
|
||||||
<rect height="128" width="128"/>
|
|
||||||
</clipPath>
|
|
||||||
<filter id="i" height="100%" width="100%" x="0%" y="0%">
|
|
||||||
<feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
|
||||||
</filter>
|
|
||||||
<mask id="j">
|
|
||||||
<g clip-path="url(#h)" filter="url(#i)">
|
|
||||||
<g clip-path="url(#g)">
|
|
||||||
<path d="m 51 18 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="url(#a)"/>
|
|
||||||
<path d="m 51 12 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="#57e389"/>
|
|
||||||
<path d="m 76.976562 55.453125 c 1.480469 -0.855469 3.371094 -0.347656 4.226563 1.132813 l 6.742187 11.679687 c 0.855469 1.480469 0.347657 3.371094 -1.132812 4.226563 c -1.480469 0.851562 -3.371094 0.347656 -4.226562 -1.132813 l -6.742188 -11.679687 c -0.855469 -1.480469 -0.347656 -3.371094 1.132812 -4.226563 z m 0 0" fill="url(#c)"/>
|
|
||||||
<path d="m 52.8125 55.453125 c -1.480469 -0.855469 -3.371094 -0.347656 -4.226562 1.132813 l -6.742188 11.679687 c -0.855469 1.480469 -0.347656 3.371094 1.132812 4.226563 c 1.480469 0.851562 3.371094 0.347656 4.226563 -1.132813 l 6.742187 -11.679687 c 0.855469 -1.480469 0.347657 -3.371094 -1.132812 -4.226563 z m 0 0" fill="url(#d)"/>
|
|
||||||
<path d="m 22 74 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="url(#e)"/>
|
|
||||||
<path d="m 22 68 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="#dc8add"/>
|
|
||||||
<path d="m 80 74 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="url(#f)"/>
|
|
||||||
<path d="m 80 68 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="#ffa348"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</mask>
|
|
||||||
<mask id="k">
|
|
||||||
<g filter="url(#i)">
|
|
||||||
<rect fill-opacity="0.8" height="128" width="128"/>
|
|
||||||
</g>
|
|
||||||
</mask>
|
|
||||||
<linearGradient id="l" gradientTransform="matrix(0 0.37 -0.98462 0 295.38501 -30.360001)" gradientUnits="userSpaceOnUse" x1="300" x2="428" y1="235" y2="235">
|
|
||||||
<stop offset="0" stop-color="#f9f06b"/>
|
|
||||||
<stop offset="1" stop-color="#f5c211"/>
|
|
||||||
</linearGradient>
|
|
||||||
<clipPath id="m">
|
|
||||||
<rect height="128" width="128"/>
|
|
||||||
</clipPath>
|
|
||||||
<clipPath id="n">
|
|
||||||
<rect height="128" width="128"/>
|
|
||||||
</clipPath>
|
|
||||||
<path d="m 51 18 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="url(#a)"/>
|
|
||||||
<path d="m 51 12 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="#57e389"/>
|
|
||||||
<path d="m 76.976562 55.453125 c 1.480469 -0.855469 3.371094 -0.347656 4.226563 1.132813 l 6.742187 11.679687 c 0.855469 1.480469 0.347657 3.371094 -1.132812 4.226563 c -1.480469 0.851562 -3.371094 0.347656 -4.226562 -1.132813 l -6.742188 -11.679687 c -0.855469 -1.480469 -0.347656 -3.371094 1.132812 -4.226563 z m 0 0" fill="url(#c)"/>
|
|
||||||
<path d="m 52.8125 55.453125 c -1.480469 -0.855469 -3.371094 -0.347656 -4.226562 1.132813 l -6.742188 11.679687 c -0.855469 1.480469 -0.347656 3.371094 1.132812 4.226563 c 1.480469 0.851562 3.371094 0.347656 4.226563 -1.132813 l 6.742187 -11.679687 c 0.855469 -1.480469 0.347657 -3.371094 -1.132812 -4.226563 z m 0 0" fill="url(#d)"/>
|
|
||||||
<path d="m 22 74 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="url(#e)"/>
|
|
||||||
<path d="m 22 68 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="#dc8add"/>
|
|
||||||
<path d="m 80 74 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="url(#f)"/>
|
|
||||||
<path d="m 80 68 h 26 c 4.417969 0 8 3.582031 8 8 v 26 c 0 4.417969 -3.582031 8 -8 8 h -26 c -4.417969 0 -8 -3.582031 -8 -8 v -26 c 0 -4.417969 3.582031 -8 8 -8 z m 0 0" fill="#ffa348"/>
|
|
||||||
<g clip-path="url(#n)" mask="url(#j)">
|
|
||||||
<g clip-path="url(#m)" mask="url(#k)">
|
|
||||||
<path d="m 128 80.640625 v 47.359375 h -128 v -47.359375 z m 0 0" fill="url(#l)"/>
|
|
||||||
<path d="m 13.308594 80.640625 l 47.355468 47.359375 h 21.214844 l -47.359375 -47.359375 z m 42.421875 0 l 47.363281 47.359375 h 21.214844 l -47.363282 -47.359375 z m 42.429687 0 l 29.839844 29.839844 v -21.210938 l -8.628906 -8.628906 z m -98.160156 7.90625 v 21.214844 l 18.238281 18.238281 h 21.214844 z m 0 0"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 7.4 KiB |
@@ -21,7 +21,7 @@ margin_changed (GtkAdjustment *adjustment,
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_overlay_decorative (GtkWidget *do_widget)
|
do_overlay2 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Paintable/Simple Paintable
|
/* Paintable/A simple paintable
|
||||||
*
|
*
|
||||||
* GdkPaintable is an interface used by GTK for drawings of any sort
|
* GdkPaintable is an interface used by GTK for drawings of any sort
|
||||||
* that do not require layouting or positioning.
|
* that do not require layouting or positioning.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Paintable/Animated Paintable
|
/* Paintable/An animated paintable
|
||||||
*
|
*
|
||||||
* GdkPaintable also allows paintables to change.
|
* GdkPaintable also allows paintables to change.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ do_paintable_emblem (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_title (GTK_WINDOW (window), "Paintable — Emblems");
|
gtk_window_set_title (GTK_WINDOW (window), "Emblems");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
|
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Paintable/Media Stream
|
/* Paintable/A media stream
|
||||||
*
|
*
|
||||||
* GdkPaintable is also used by the GtkMediaStream class.
|
* GdkPaintable is also used by the GtkMediaStream class.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
/* Paintable/SVG
|
|
||||||
*
|
|
||||||
* This demo shows wrapping a librsvg RsvgHandle in a GdkPaintable
|
|
||||||
* to display an SVG image that can be scaled by resizing the window.
|
|
||||||
*
|
|
||||||
* This demo relies on librsvg, which GTK itself does not link against.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <librsvg/rsvg.h>
|
|
||||||
|
|
||||||
#include "svgpaintable.h"
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
open_response_cb (GtkNativeDialog *dialog,
|
|
||||||
int response,
|
|
||||||
GtkPicture *picture)
|
|
||||||
{
|
|
||||||
gtk_native_dialog_hide (dialog);
|
|
||||||
|
|
||||||
if (response == GTK_RESPONSE_ACCEPT)
|
|
||||||
{
|
|
||||||
GFile *file;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
|
||||||
paintable = svg_paintable_new (file);
|
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (picture), paintable);
|
|
||||||
g_object_unref (paintable);
|
|
||||||
g_object_unref (file);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_native_dialog_destroy (dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
show_file_open (GtkWidget *button,
|
|
||||||
GtkPicture *picture)
|
|
||||||
{
|
|
||||||
GtkFileFilter *filter;
|
|
||||||
GtkFileChooserNative *dialog;
|
|
||||||
|
|
||||||
dialog = gtk_file_chooser_native_new ("Open node file",
|
|
||||||
GTK_WINDOW (gtk_widget_get_root (button)),
|
|
||||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
||||||
"_Load",
|
|
||||||
"_Cancel");
|
|
||||||
|
|
||||||
filter = gtk_file_filter_new ();
|
|
||||||
gtk_file_filter_add_mime_type (filter, "image/svg+xml");
|
|
||||||
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
|
|
||||||
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
|
|
||||||
g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), picture);
|
|
||||||
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *window;
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_paintable_svg (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
GtkWidget *header;
|
|
||||||
GtkWidget *picture;
|
|
||||||
GtkWidget *button;
|
|
||||||
GFile *file;
|
|
||||||
GdkPaintable *paintable;
|
|
||||||
|
|
||||||
if (!window)
|
|
||||||
{
|
|
||||||
window = gtk_window_new ();
|
|
||||||
header = gtk_header_bar_new ();
|
|
||||||
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 330, 330);
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Paintable — SVG");
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|
||||||
|
|
||||||
button = gtk_button_new_with_mnemonic ("_Open");
|
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);
|
|
||||||
|
|
||||||
picture = gtk_picture_new ();
|
|
||||||
gtk_picture_set_can_shrink (GTK_PICTURE (picture), TRUE);
|
|
||||||
gtk_widget_set_size_request (picture, 16, 16);
|
|
||||||
|
|
||||||
g_signal_connect (button, "clicked", G_CALLBACK (show_file_open), picture);
|
|
||||||
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), picture);
|
|
||||||
|
|
||||||
file = g_file_new_for_uri ("resource:///paintable_svg/org.gtk.gtk4.NodeEditor.Devel.svg");
|
|
||||||
paintable = svg_paintable_new (file);
|
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (picture), paintable);
|
|
||||||
g_object_unref (paintable);
|
|
||||||
g_object_unref (file);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
||||||
@@ -3,16 +3,100 @@
|
|||||||
* The GtkPaned Widget divides its content area into two panes
|
* The GtkPaned Widget divides its content area into two panes
|
||||||
* with a divider in between that the user can adjust. A separate
|
* with a divider in between that the user can adjust. A separate
|
||||||
* child is placed into each pane. GtkPaned widgets can be split
|
* child is placed into each pane. GtkPaned widgets can be split
|
||||||
* horizontally or vertically. This test contains both a horizontal
|
* horizontally or vertially.
|
||||||
* and a vertical GtkPaned widget.
|
|
||||||
*
|
*
|
||||||
* There are a number of options that can be set for each pane.
|
* There are a number of options that can be set for each pane.
|
||||||
* You can use the Inspector to adjust the options for each side
|
* This test contains both a horizontal and a vertical GtkPaned
|
||||||
* of each widget.
|
* widget, and allows you to adjust the options for each side of
|
||||||
|
* each widget.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
toggle_resize (GtkWidget *widget,
|
||||||
|
GtkWidget *child)
|
||||||
|
{
|
||||||
|
GtkWidget *parent;
|
||||||
|
GtkPaned *paned;
|
||||||
|
|
||||||
|
parent = gtk_widget_get_parent (child);
|
||||||
|
paned = GTK_PANED (parent);
|
||||||
|
|
||||||
|
if (child == gtk_paned_get_start_child (paned))
|
||||||
|
gtk_paned_set_resize_start_child (paned, !gtk_paned_get_resize_start_child (paned));
|
||||||
|
else
|
||||||
|
gtk_paned_set_resize_end_child (paned, !gtk_paned_get_resize_end_child (paned));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
toggle_shrink (GtkWidget *widget,
|
||||||
|
GtkWidget *child)
|
||||||
|
{
|
||||||
|
GtkWidget *parent;
|
||||||
|
GtkPaned *paned;
|
||||||
|
|
||||||
|
parent = gtk_widget_get_parent (child);
|
||||||
|
paned = GTK_PANED (parent);
|
||||||
|
|
||||||
|
if (child == gtk_paned_get_start_child (paned))
|
||||||
|
gtk_paned_set_shrink_start_child (paned, !gtk_paned_get_shrink_start_child (paned));
|
||||||
|
else
|
||||||
|
gtk_paned_set_shrink_end_child (paned, !gtk_paned_get_shrink_end_child (paned));
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
create_pane_options (GtkPaned *paned,
|
||||||
|
const char *frame_label,
|
||||||
|
const char *label1,
|
||||||
|
const char *label2)
|
||||||
|
{
|
||||||
|
GtkWidget *child1, *child2;
|
||||||
|
GtkWidget *frame;
|
||||||
|
GtkWidget *table;
|
||||||
|
GtkWidget *label;
|
||||||
|
GtkWidget *check_button;
|
||||||
|
|
||||||
|
child1 = gtk_paned_get_start_child (paned);
|
||||||
|
child2 = gtk_paned_get_end_child (paned);
|
||||||
|
|
||||||
|
frame = gtk_frame_new (frame_label);
|
||||||
|
|
||||||
|
table = gtk_grid_new ();
|
||||||
|
gtk_frame_set_child (GTK_FRAME (frame), table);
|
||||||
|
|
||||||
|
label = gtk_label_new (label1);
|
||||||
|
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
check_button = gtk_check_button_new_with_mnemonic ("_Resize");
|
||||||
|
gtk_grid_attach (GTK_GRID (table), check_button, 0, 1, 1, 1);
|
||||||
|
g_signal_connect (check_button, "toggled",
|
||||||
|
G_CALLBACK (toggle_resize), child1);
|
||||||
|
|
||||||
|
check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
|
||||||
|
gtk_grid_attach (GTK_GRID (table), check_button, 0, 2, 1, 1);
|
||||||
|
gtk_check_button_set_active (GTK_CHECK_BUTTON (check_button), TRUE);
|
||||||
|
g_signal_connect (check_button, "toggled",
|
||||||
|
G_CALLBACK (toggle_shrink), child1);
|
||||||
|
|
||||||
|
label = gtk_label_new (label2);
|
||||||
|
gtk_grid_attach (GTK_GRID (table), label, 1, 0, 1, 1);
|
||||||
|
|
||||||
|
check_button = gtk_check_button_new_with_mnemonic ("_Resize");
|
||||||
|
gtk_grid_attach (GTK_GRID (table), check_button, 1, 1, 1, 1);
|
||||||
|
gtk_check_button_set_active (GTK_CHECK_BUTTON (check_button), TRUE);
|
||||||
|
g_signal_connect (check_button, "toggled",
|
||||||
|
G_CALLBACK (toggle_resize), child2);
|
||||||
|
|
||||||
|
check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
|
||||||
|
gtk_grid_attach (GTK_GRID (table), check_button, 1, 2, 1, 1);
|
||||||
|
gtk_check_button_set_active (GTK_CHECK_BUTTON (check_button), TRUE);
|
||||||
|
g_signal_connect (check_button, "toggled",
|
||||||
|
G_CALLBACK (toggle_shrink), child2);
|
||||||
|
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_panes (GtkWidget *do_widget)
|
do_panes (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
@@ -20,19 +104,19 @@ do_panes (GtkWidget *do_widget)
|
|||||||
GtkWidget *frame;
|
GtkWidget *frame;
|
||||||
GtkWidget *hpaned;
|
GtkWidget *hpaned;
|
||||||
GtkWidget *vpaned;
|
GtkWidget *vpaned;
|
||||||
GtkWidget *label;
|
GtkWidget *button;
|
||||||
GtkWidget *vbox;
|
GtkWidget *vbox;
|
||||||
|
GtkWidget *box;
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Paned Widgets");
|
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 330, 250);
|
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
|
||||||
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));
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
|
gtk_window_set_title (GTK_WINDOW (window), "Paned Widgets");
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||||
gtk_widget_set_margin_start (vbox, 8);
|
gtk_widget_set_margin_start (vbox, 8);
|
||||||
gtk_widget_set_margin_end (vbox, 8);
|
gtk_widget_set_margin_end (vbox, 8);
|
||||||
@@ -48,37 +132,41 @@ do_panes (GtkWidget *do_widget)
|
|||||||
|
|
||||||
hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
|
hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
|
||||||
gtk_paned_set_start_child (GTK_PANED (vpaned), hpaned);
|
gtk_paned_set_start_child (GTK_PANED (vpaned), hpaned);
|
||||||
gtk_paned_set_shrink_start_child (GTK_PANED (vpaned), FALSE);
|
|
||||||
|
|
||||||
label = gtk_label_new ("Hi there");
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||||
gtk_widget_set_margin_start (label, 4);
|
gtk_widget_set_size_request (box, 60, 60);
|
||||||
gtk_widget_set_margin_end (label, 4);
|
gtk_paned_set_start_child (GTK_PANED (hpaned), box);
|
||||||
gtk_widget_set_margin_top (label, 4);
|
|
||||||
gtk_widget_set_margin_bottom (label, 4);
|
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
|
||||||
gtk_widget_set_vexpand (label, TRUE);
|
|
||||||
gtk_paned_set_start_child (GTK_PANED (hpaned), label);
|
|
||||||
gtk_paned_set_shrink_start_child (GTK_PANED (hpaned), FALSE);
|
|
||||||
|
|
||||||
label = gtk_label_new ("Hello");
|
button = gtk_button_new_with_mnemonic ("_Hi there");
|
||||||
gtk_widget_set_margin_start (label, 4);
|
gtk_widget_set_margin_start (button, 4);
|
||||||
gtk_widget_set_margin_end (label, 4);
|
gtk_widget_set_margin_end (button, 4);
|
||||||
gtk_widget_set_margin_top (label, 4);
|
gtk_widget_set_margin_top (button, 4);
|
||||||
gtk_widget_set_margin_bottom (label, 4);
|
gtk_widget_set_margin_bottom (button, 4);
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
gtk_widget_set_hexpand (button, TRUE);
|
||||||
gtk_widget_set_vexpand (label, TRUE);
|
gtk_widget_set_vexpand (button, TRUE);
|
||||||
gtk_paned_set_end_child (GTK_PANED (hpaned), label);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
gtk_paned_set_shrink_end_child (GTK_PANED (hpaned), FALSE);
|
|
||||||
|
|
||||||
label = gtk_label_new ("Goodbye");
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||||
gtk_widget_set_margin_start (label, 4);
|
gtk_widget_set_size_request (box, 80, 60);
|
||||||
gtk_widget_set_margin_end (label, 4);
|
gtk_paned_set_end_child (GTK_PANED (hpaned), box);
|
||||||
gtk_widget_set_margin_top (label, 4);
|
|
||||||
gtk_widget_set_margin_bottom (label, 4);
|
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
gtk_widget_set_size_request (box, 60, 80);
|
||||||
gtk_widget_set_vexpand (label, TRUE);
|
gtk_paned_set_end_child (GTK_PANED (vpaned), box);
|
||||||
gtk_paned_set_end_child (GTK_PANED (vpaned), label);
|
|
||||||
gtk_paned_set_shrink_end_child (GTK_PANED (vpaned), FALSE);
|
/* Now create toggle buttons to control sizing */
|
||||||
|
|
||||||
|
gtk_box_append (GTK_BOX (vbox),
|
||||||
|
create_pane_options (GTK_PANED (hpaned),
|
||||||
|
"Horizontal",
|
||||||
|
"Left",
|
||||||
|
"Right"));
|
||||||
|
|
||||||
|
gtk_box_append (GTK_BOX (vbox),
|
||||||
|
create_pane_options (GTK_PANED (vpaned),
|
||||||
|
"Vertical",
|
||||||
|
"Top",
|
||||||
|
"Bottom"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
/* Pickers
|
/* Pickers
|
||||||
* #Keywords: GtkColorChooser, GtkFontChooser, GtkApplicationChooser
|
* #Keywords: GtkColorChooser, GtkFontChooser, GtkFileChooser,
|
||||||
|
* #Keywords: GtkApplicationChooser
|
||||||
*
|
*
|
||||||
* These widgets are mainly intended for use in preference dialogs.
|
* These widgets are mainly intended for use in preference dialogs.
|
||||||
* They allow to select colors, fonts, directories and applications.
|
* They allow to select colors, fonts, files, directories and applications.
|
||||||
*
|
*
|
||||||
* This demo shows both the default appearance for these dialogs,
|
* This demo shows both the default appearance for these dialogs,
|
||||||
* as well as some of the customizations that are possible.
|
* as well as some of the customizations that are possible.
|
||||||
@@ -62,6 +63,9 @@ do_pickers (GtkWidget *do_widget)
|
|||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
|
char *dir;
|
||||||
|
GFile *file;
|
||||||
|
|
||||||
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));
|
||||||
@@ -119,14 +123,55 @@ do_pickers (GtkWidget *do_widget)
|
|||||||
|
|
||||||
gtk_grid_attach (GTK_GRID (table), picker, 2, 1, 1, 1);
|
gtk_grid_attach (GTK_GRID (table), picker, 2, 1, 1, 1);
|
||||||
|
|
||||||
|
label = gtk_label_new ("File:");
|
||||||
|
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||||
|
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||||
|
gtk_widget_set_hexpand (label, TRUE);
|
||||||
|
gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1);
|
||||||
|
|
||||||
|
picker = gtk_file_chooser_button_new ("Pick a File",
|
||||||
|
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||||
|
gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1);
|
||||||
|
|
||||||
|
picker = gtk_file_chooser_button_new ("Pick a File",
|
||||||
|
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||||
|
|
||||||
|
dir = g_get_current_dir ();
|
||||||
|
file = g_file_new_for_path (dir);
|
||||||
|
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (picker), file, NULL);
|
||||||
|
g_object_unref (file);
|
||||||
|
g_free (dir);
|
||||||
|
|
||||||
|
gtk_file_chooser_add_choice (GTK_FILE_CHOOSER (picker),
|
||||||
|
"choice",
|
||||||
|
"Encoding",
|
||||||
|
(const char *[]) { "option1", "option2", NULL },
|
||||||
|
(const char *[]) { "UTF-8", "Other Encoding", NULL });
|
||||||
|
gtk_file_chooser_set_choice (GTK_FILE_CHOOSER (picker), "choice", "option1");
|
||||||
|
gtk_file_chooser_add_choice (GTK_FILE_CHOOSER (picker),
|
||||||
|
"check",
|
||||||
|
"Read backwards",
|
||||||
|
NULL, NULL);
|
||||||
|
gtk_file_chooser_set_choice (GTK_FILE_CHOOSER (picker), "check", "false");
|
||||||
|
|
||||||
|
gtk_grid_attach (GTK_GRID (table), picker, 2, 2, 1, 1);
|
||||||
|
|
||||||
|
label = gtk_label_new ("Folder:");
|
||||||
|
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||||
|
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||||
|
picker = gtk_file_chooser_button_new ("Pick a Folder",
|
||||||
|
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||||
|
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
|
||||||
|
gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
|
||||||
|
|
||||||
label = gtk_label_new ("Mail:");
|
label = gtk_label_new ("Mail:");
|
||||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||||
gtk_widget_set_hexpand (label, TRUE);
|
gtk_widget_set_hexpand (label, TRUE);
|
||||||
picker = gtk_app_chooser_button_new ("x-scheme-handler/mailto");
|
picker = gtk_app_chooser_button_new ("x-scheme-handler/mailto");
|
||||||
gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (picker), TRUE);
|
gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (picker), TRUE);
|
||||||
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
|
gtk_grid_attach (GTK_GRID (table), label, 0, 4, 1, 1);
|
||||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
|
gtk_grid_attach (GTK_GRID (table), picker, 1, 4, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
|||||||
@@ -1,187 +0,0 @@
|
|||||||
#include <gtk/gtk.h>
|
|
||||||
#include "pixbufpaintable.h"
|
|
||||||
|
|
||||||
struct _PixbufPaintable {
|
|
||||||
GObject parent_instance;
|
|
||||||
|
|
||||||
char *resource_path;
|
|
||||||
GdkPixbufAnimation *anim;
|
|
||||||
GdkPixbufAnimationIter *iter;
|
|
||||||
|
|
||||||
guint timeout;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
PROP_RESOURCE_PATH = 1,
|
|
||||||
NUM_PROPERTIES
|
|
||||||
};
|
|
||||||
|
|
||||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_snapshot (GdkPaintable *paintable,
|
|
||||||
GdkSnapshot *snapshot,
|
|
||||||
double width,
|
|
||||||
double height)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = PIXBUF_PAINTABLE (paintable);
|
|
||||||
GTimeVal val;
|
|
||||||
GdkPixbuf *pixbuf;
|
|
||||||
GdkTexture *texture;
|
|
||||||
|
|
||||||
g_get_current_time (&val);
|
|
||||||
gdk_pixbuf_animation_iter_advance (self->iter, &val);
|
|
||||||
pixbuf = gdk_pixbuf_animation_iter_get_pixbuf (self->iter);
|
|
||||||
texture = gdk_texture_new_for_pixbuf (pixbuf);
|
|
||||||
|
|
||||||
gdk_paintable_snapshot (GDK_PAINTABLE (texture), snapshot, width, height);
|
|
||||||
|
|
||||||
g_object_unref (texture);
|
|
||||||
}
|
|
||||||
G_GNUC_END_IGNORE_DEPRECATIONS;
|
|
||||||
|
|
||||||
static int
|
|
||||||
pixbuf_paintable_get_intrinsic_width (GdkPaintable *paintable)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = PIXBUF_PAINTABLE (paintable);
|
|
||||||
|
|
||||||
return gdk_pixbuf_animation_get_width (self->anim);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
pixbuf_paintable_get_intrinsic_height (GdkPaintable *paintable)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = PIXBUF_PAINTABLE (paintable);
|
|
||||||
|
|
||||||
return gdk_pixbuf_animation_get_height (self->anim);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_init_interface (GdkPaintableInterface *iface)
|
|
||||||
{
|
|
||||||
iface->snapshot = pixbuf_paintable_snapshot;
|
|
||||||
iface->get_intrinsic_width = pixbuf_paintable_get_intrinsic_width;
|
|
||||||
iface->get_intrinsic_height = pixbuf_paintable_get_intrinsic_height;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE(PixbufPaintable, pixbuf_paintable, G_TYPE_OBJECT,
|
|
||||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
|
|
||||||
pixbuf_paintable_init_interface))
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_init (PixbufPaintable *paintable)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
delay_cb (gpointer data)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = data;
|
|
||||||
int delay;
|
|
||||||
|
|
||||||
delay = gdk_pixbuf_animation_iter_get_delay_time (self->iter);
|
|
||||||
self->timeout = g_timeout_add (delay, delay_cb, self);
|
|
||||||
|
|
||||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_set_resource_path (PixbufPaintable *self,
|
|
||||||
const char *resource_path)
|
|
||||||
{
|
|
||||||
int delay;
|
|
||||||
|
|
||||||
g_free (self->resource_path);
|
|
||||||
self->resource_path = g_strdup (resource_path);
|
|
||||||
|
|
||||||
g_clear_object (&self->anim);
|
|
||||||
self->anim = gdk_pixbuf_animation_new_from_resource (resource_path, NULL);
|
|
||||||
g_clear_object (&self->iter);
|
|
||||||
self->iter = gdk_pixbuf_animation_get_iter (self->anim, NULL);
|
|
||||||
|
|
||||||
delay = gdk_pixbuf_animation_iter_get_delay_time (self->iter);
|
|
||||||
self->timeout = g_timeout_add (delay, delay_cb, self);
|
|
||||||
|
|
||||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (self));
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (self), "resource-path");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_set_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = PIXBUF_PAINTABLE (object);
|
|
||||||
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
case PROP_RESOURCE_PATH:
|
|
||||||
pixbuf_paintable_set_resource_path (self, g_value_get_string (value));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_get_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = PIXBUF_PAINTABLE (object);
|
|
||||||
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
case PROP_RESOURCE_PATH:
|
|
||||||
g_value_set_string (value, self->resource_path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
PixbufPaintable *self = PIXBUF_PAINTABLE (object);
|
|
||||||
|
|
||||||
g_clear_pointer (&self->resource_path, g_free);
|
|
||||||
g_clear_object (&self->anim);
|
|
||||||
g_clear_object (&self->iter);
|
|
||||||
if (self->timeout)
|
|
||||||
{
|
|
||||||
g_source_remove (self->timeout);
|
|
||||||
self->timeout = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (pixbuf_paintable_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pixbuf_paintable_class_init (PixbufPaintableClass *class)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
|
|
||||||
object_class->dispose = pixbuf_paintable_dispose;
|
|
||||||
object_class->get_property = pixbuf_paintable_get_property;
|
|
||||||
object_class->set_property = pixbuf_paintable_set_property;
|
|
||||||
|
|
||||||
g_object_class_install_property (object_class, PROP_RESOURCE_PATH,
|
|
||||||
g_param_spec_string ("resource-path", "Resource path", "Resource path",
|
|
||||||
NULL, G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
GdkPaintable *
|
|
||||||
pixbuf_paintable_new_from_resource (const char *path)
|
|
||||||
{
|
|
||||||
return g_object_new (PIXBUF_TYPE_PAINTABLE,
|
|
||||||
"resource-path", path,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define PIXBUF_TYPE_PAINTABLE (pixbuf_paintable_get_type ())
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE(PixbufPaintable, pixbuf_paintable, PIXBUF, PAINTABLE, GObject)
|
|
||||||
|
|
||||||
GdkPaintable * pixbuf_paintable_new_from_resource (const char *path);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
uniform float u_time;
|
|
||||||
uniform vec2 u_mouse;
|
|
||||||
uniform sampler2D u_texture1;
|
|
||||||
|
|
||||||
#define PI 3.141592654
|
|
||||||
|
|
||||||
float decay(float v, float t)
|
|
||||||
{
|
|
||||||
return v * (1.0 / (1.0 + t*t));
|
|
||||||
}
|
|
||||||
|
|
||||||
void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
|
|
||||||
{
|
|
||||||
// Temporary to loop time every 1 sec
|
|
||||||
float time = u_time;
|
|
||||||
// we normalize all the effects according to the min height/width
|
|
||||||
float size = min(resolution.x, resolution.y);
|
|
||||||
|
|
||||||
// Animate one wave over size in 0.3 sec
|
|
||||||
float wave_speed = size / 0.3;
|
|
||||||
float wave_length = size / 1.0;
|
|
||||||
float wave_height = size * 0.1;
|
|
||||||
|
|
||||||
vec2 center = u_mouse;
|
|
||||||
vec2 direction_from_center = fragCoord - center;
|
|
||||||
float distance_from_center = length(direction_from_center);
|
|
||||||
|
|
||||||
/* Normalize direction */
|
|
||||||
direction_from_center = direction_from_center / distance_from_center;
|
|
||||||
|
|
||||||
float propagation_length = time * wave_speed;
|
|
||||||
|
|
||||||
float t = (propagation_length - distance_from_center) / wave_length;
|
|
||||||
float offset_magnitude = 0.0;
|
|
||||||
if (t > 0.0)
|
|
||||||
offset_magnitude = decay(wave_height * sin(t * 2.0 * PI), t);
|
|
||||||
|
|
||||||
vec2 offset = direction_from_center * min(offset_magnitude, distance_from_center);
|
|
||||||
vec2 source = fragCoord - offset;
|
|
||||||
|
|
||||||
vec2 uv2 = source / resolution;
|
|
||||||
fragColor = GskTexture(u_texture1, vec2(uv2.x, 1.0-uv2.y));
|
|
||||||
}
|
|
||||||
@@ -91,7 +91,7 @@ static struct {
|
|||||||
{ G_UNICODE_SCRIPT_LYDIAN, HB_SCRIPT_LYDIAN, NC_("Script", "Lydian") },
|
{ G_UNICODE_SCRIPT_LYDIAN, HB_SCRIPT_LYDIAN, NC_("Script", "Lydian") },
|
||||||
{ G_UNICODE_SCRIPT_AVESTAN, HB_SCRIPT_AVESTAN, NC_("Script", "Avestan") },
|
{ G_UNICODE_SCRIPT_AVESTAN, HB_SCRIPT_AVESTAN, NC_("Script", "Avestan") },
|
||||||
{ G_UNICODE_SCRIPT_BAMUM, HB_SCRIPT_BAMUM, NC_("Script", "Bamum") },
|
{ G_UNICODE_SCRIPT_BAMUM, HB_SCRIPT_BAMUM, NC_("Script", "Bamum") },
|
||||||
{ G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS, HB_SCRIPT_EGYPTIAN_HIEROGLYPHS, NC_("Script", "Egyptian Hieroglyphs") },
|
{ G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS, HB_SCRIPT_EGYPTIAN_HIEROGLYPHS, NC_("Script", "Egyptian Hieroglpyhs") },
|
||||||
{ G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC, HB_SCRIPT_IMPERIAL_ARAMAIC, NC_("Script", "Imperial Aramaic") },
|
{ G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC, HB_SCRIPT_IMPERIAL_ARAMAIC, NC_("Script", "Imperial Aramaic") },
|
||||||
{ G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI, HB_SCRIPT_INSCRIPTIONAL_PAHLAVI, NC_("Script", "Inscriptional Pahlavi") },
|
{ G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI, HB_SCRIPT_INSCRIPTIONAL_PAHLAVI, NC_("Script", "Inscriptional Pahlavi") },
|
||||||
{ G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN, HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, NC_("Script", "Inscriptional Parthian") },
|
{ G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN, HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, NC_("Script", "Inscriptional Parthian") },
|
||||||
@@ -119,7 +119,7 @@ static struct {
|
|||||||
{ G_UNICODE_SCRIPT_DUPLOYAN, HB_SCRIPT_DUPLOYAN, NC_("Script", "Duployan") },
|
{ G_UNICODE_SCRIPT_DUPLOYAN, HB_SCRIPT_DUPLOYAN, NC_("Script", "Duployan") },
|
||||||
{ G_UNICODE_SCRIPT_ELBASAN, HB_SCRIPT_ELBASAN, NC_("Script", "Elbasan") },
|
{ G_UNICODE_SCRIPT_ELBASAN, HB_SCRIPT_ELBASAN, NC_("Script", "Elbasan") },
|
||||||
{ G_UNICODE_SCRIPT_GRANTHA, HB_SCRIPT_GRANTHA, NC_("Script", "Grantha") },
|
{ G_UNICODE_SCRIPT_GRANTHA, HB_SCRIPT_GRANTHA, NC_("Script", "Grantha") },
|
||||||
{ G_UNICODE_SCRIPT_KHOJKI, HB_SCRIPT_KHOJKI, NC_("Script", "Khojki") },
|
{ G_UNICODE_SCRIPT_KHOJKI, HB_SCRIPT_KHOJKI, NC_("Script", "Kjohki") },
|
||||||
{ G_UNICODE_SCRIPT_KHUDAWADI, HB_SCRIPT_KHUDAWADI, NC_("Script", "Khudawadi, Sindhi") },
|
{ G_UNICODE_SCRIPT_KHUDAWADI, HB_SCRIPT_KHUDAWADI, NC_("Script", "Khudawadi, Sindhi") },
|
||||||
{ G_UNICODE_SCRIPT_LINEAR_A, HB_SCRIPT_LINEAR_A, NC_("Script", "Linear A") },
|
{ G_UNICODE_SCRIPT_LINEAR_A, HB_SCRIPT_LINEAR_A, NC_("Script", "Linear A") },
|
||||||
{ G_UNICODE_SCRIPT_MAHAJANI, HB_SCRIPT_MAHAJANI, NC_("Script", "Mahajani") },
|
{ G_UNICODE_SCRIPT_MAHAJANI, HB_SCRIPT_MAHAJANI, NC_("Script", "Mahajani") },
|
||||||
@@ -149,40 +149,10 @@ static struct {
|
|||||||
{ G_UNICODE_SCRIPT_NEWA, HB_SCRIPT_NEWA, NC_("Script", "Newa") },
|
{ G_UNICODE_SCRIPT_NEWA, HB_SCRIPT_NEWA, NC_("Script", "Newa") },
|
||||||
{ G_UNICODE_SCRIPT_OSAGE, HB_SCRIPT_OSAGE, NC_("Script", "Osage") },
|
{ G_UNICODE_SCRIPT_OSAGE, HB_SCRIPT_OSAGE, NC_("Script", "Osage") },
|
||||||
{ G_UNICODE_SCRIPT_TANGUT, HB_SCRIPT_TANGUT, NC_("Script", "Tangut") },
|
{ G_UNICODE_SCRIPT_TANGUT, HB_SCRIPT_TANGUT, NC_("Script", "Tangut") },
|
||||||
{ G_UNICODE_SCRIPT_MASARAM_GONDI, HB_SCRIPT_MASARAM_GONDI, NC_("Script", "Masaram Gondi") },
|
{ G_UNICODE_SCRIPT_MASARAM_GONDI, HB_SCRIPT_INVALID, NC_("Script", "Masaram Gondi") },
|
||||||
{ G_UNICODE_SCRIPT_NUSHU, HB_SCRIPT_NUSHU, NC_("Script", "Nushu") },
|
{ G_UNICODE_SCRIPT_NUSHU, HB_SCRIPT_INVALID, NC_("Script", "Nushu") },
|
||||||
{ G_UNICODE_SCRIPT_SOYOMBO, HB_SCRIPT_SOYOMBO, NC_("Script", "Soyombo") },
|
{ G_UNICODE_SCRIPT_SOYOMBO, HB_SCRIPT_INVALID, NC_("Script", "Soyombo") },
|
||||||
{ G_UNICODE_SCRIPT_ZANABAZAR_SQUARE, HB_SCRIPT_ZANABAZAR_SQUARE, NC_("Script", "Zanabazar Square") },
|
{ G_UNICODE_SCRIPT_ZANABAZAR_SQUARE, HB_SCRIPT_INVALID, NC_("Script", "Zanabazar Square") },
|
||||||
{ G_UNICODE_SCRIPT_DOGRA, HB_SCRIPT_DOGRA, NC_("Script", "Dogra") },
|
|
||||||
{ G_UNICODE_SCRIPT_GUNJALA_GONDI, HB_SCRIPT_GUNJALA_GONDI, NC_("Script", "Gunjala Gondi") },
|
|
||||||
{ G_UNICODE_SCRIPT_HANIFI_ROHINGYA, HB_SCRIPT_HANIFI_ROHINGYA, NC_("Script", "Hanifi Rohingya") },
|
|
||||||
{ G_UNICODE_SCRIPT_MAKASAR, HB_SCRIPT_MAKASAR, NC_("Script", "Makasar") },
|
|
||||||
{ G_UNICODE_SCRIPT_MEDEFAIDRIN, HB_SCRIPT_MEDEFAIDRIN, NC_("Script", "Medefaidrin") },
|
|
||||||
{ G_UNICODE_SCRIPT_OLD_SOGDIAN, HB_SCRIPT_OLD_SOGDIAN, NC_("Script", "Old Sogdian") },
|
|
||||||
{ G_UNICODE_SCRIPT_SOGDIAN, HB_SCRIPT_SOGDIAN, NC_("Script", "Sogdian") },
|
|
||||||
|
|
||||||
#if HB_VERSION_ATLEAST(2,4,0)
|
|
||||||
{ G_UNICODE_SCRIPT_ELYMAIC, HB_SCRIPT_ELYMAIC, NC_("Script", "Elym") },
|
|
||||||
{ G_UNICODE_SCRIPT_NANDINAGARI, HB_SCRIPT_NANDINAGARI, NC_("Script", "Nand") },
|
|
||||||
{ G_UNICODE_SCRIPT_NYIAKENG_PUACHUE_HMONG, HB_SCRIPT_NYIAKENG_PUACHUE_HMONG, NC_("Script", "Rohg") },
|
|
||||||
{ G_UNICODE_SCRIPT_WANCHO, HB_SCRIPT_WANCHO, NC_("Script", "Wcho") },
|
|
||||||
#else
|
|
||||||
{ G_UNICODE_SCRIPT_ELYMAIC, HB_SCRIPT_INVALID, NC_("Script", "Elym") },
|
|
||||||
{ G_UNICODE_SCRIPT_NANDINAGARI, HB_SCRIPT_INVALID, NC_("Script", "Nand") },
|
|
||||||
{ G_UNICODE_SCRIPT_NYIAKENG_PUACHUE_HMONG, HB_SCRIPT_INVALID, NC_("Script", "Rohg") },
|
|
||||||
{ G_UNICODE_SCRIPT_WANCHO, HB_SCRIPT_INVALID, NC_("Script", "Wcho") },
|
|
||||||
#endif
|
|
||||||
#if HB_VERSION_ATLEAST(2,6,7)
|
|
||||||
{ G_UNICODE_SCRIPT_CHORASMIAN, HB_SCRIPT_CHORASMIAN, NC_("Script", "Chorasmian") },
|
|
||||||
{ G_UNICODE_SCRIPT_DIVES_AKURU, HB_SCRIPT_DIVES_AKURU, NC_("Script", "Dives Akuru") },
|
|
||||||
{ G_UNICODE_SCRIPT_KHITAN_SMALL_SCRIPT, HB_SCRIPT_KHITAN_SMALL_SCRIPT, NC_("Script", "Khitan small script") },
|
|
||||||
{ G_UNICODE_SCRIPT_YEZIDI, HB_SCRIPT_YEZIDI, NC_("Script", "Yezidi") },
|
|
||||||
#else
|
|
||||||
{ G_UNICODE_SCRIPT_CHORASMIAN, HB_SCRIPT_INVALID, NC_("Script", "Chorasmian") },
|
|
||||||
{ G_UNICODE_SCRIPT_DIVES_AKURU, HB_SCRIPT_INVALID, NC_("Script", "Dives Akuru") },
|
|
||||||
{ G_UNICODE_SCRIPT_KHITAN_SMALL_SCRIPT, HB_SCRIPT_INVALID, NC_("Script", "Khitan small script") },
|
|
||||||
{ G_UNICODE_SCRIPT_YEZIDI, HB_SCRIPT_INVALID, NC_("Script", "Yezidi") },
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
@@ -193,12 +163,7 @@ get_script_name (GUnicodeScript script)
|
|||||||
for (i = 0; i < G_N_ELEMENTS (scripts); i++)
|
for (i = 0; i < G_N_ELEMENTS (scripts); i++)
|
||||||
{
|
{
|
||||||
if (scripts[i].script == script)
|
if (scripts[i].script == script)
|
||||||
{
|
return g_dpgettext2 (GETTEXT_PACKAGE, "Script", scripts[i].name);
|
||||||
if (scripts[i].name)
|
|
||||||
return g_dpgettext2 (GETTEXT_PACKAGE, "Script", scripts[i].name);
|
|
||||||
else
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -110,17 +110,17 @@ set_search_by (GSimpleAction *action,
|
|||||||
if (g_str_equal (term, "name"))
|
if (g_str_equal (term, "name"))
|
||||||
{
|
{
|
||||||
gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, "Search by name");
|
gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, "Search by name");
|
||||||
gtk_entry_set_placeholder_text (entry, "Name…");
|
gtk_entry_set_placeholder_text (entry, "name");
|
||||||
}
|
}
|
||||||
else if (g_str_equal (term, "description"))
|
else if (g_str_equal (term, "description"))
|
||||||
{
|
{
|
||||||
gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, "Search by description");
|
gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, "Search by description");
|
||||||
gtk_entry_set_placeholder_text (entry, "Description…");
|
gtk_entry_set_placeholder_text (entry, "description");
|
||||||
}
|
}
|
||||||
else if (g_str_equal (term, "filename"))
|
else if (g_str_equal (term, "filename"))
|
||||||
{
|
{
|
||||||
gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, "Search by file name");
|
gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, "Search by file name");
|
||||||
gtk_entry_set_placeholder_text (entry, "File name…");
|
gtk_entry_set_placeholder_text (entry, "file name");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,6 +254,7 @@ do_search_entry (GtkWidget *do_widget)
|
|||||||
{
|
{
|
||||||
GtkWidget *vbox;
|
GtkWidget *vbox;
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
|
GtkWidget *label;
|
||||||
GtkWidget *entry;
|
GtkWidget *entry;
|
||||||
GtkWidget *find_button;
|
GtkWidget *find_button;
|
||||||
GtkWidget *cancel_button;
|
GtkWidget *cancel_button;
|
||||||
@@ -267,14 +268,18 @@ do_search_entry (GtkWidget *do_widget)
|
|||||||
|
|
||||||
g_object_weak_ref (G_OBJECT (window), search_entry_destroyed, &window);
|
g_object_weak_ref (G_OBJECT (window), search_entry_destroyed, &window);
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||||
gtk_widget_set_margin_start (vbox, 18);
|
gtk_widget_set_margin_start (vbox, 5);
|
||||||
gtk_widget_set_margin_end (vbox, 18);
|
gtk_widget_set_margin_end (vbox, 5);
|
||||||
gtk_widget_set_margin_top (vbox, 18);
|
gtk_widget_set_margin_top (vbox, 5);
|
||||||
gtk_widget_set_margin_bottom (vbox, 18);
|
gtk_widget_set_margin_bottom (vbox, 5);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
||||||
|
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
|
label = gtk_label_new (NULL);
|
||||||
|
gtk_label_set_markup (GTK_LABEL (label), "Search entry demo");
|
||||||
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
|
|
||||||
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
gtk_box_append (GTK_BOX (vbox), hbox);
|
gtk_box_append (GTK_BOX (vbox), hbox);
|
||||||
|
|
||||||
/* Create our entry */
|
/* Create our entry */
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
/* Entry/Type to Search
|
/* Entry/Delayed Search Entry
|
||||||
*
|
*
|
||||||
* GtkSearchEntry provides an entry that is ready for search.
|
* GtkSearchEntry provides an entry that is ready for search.
|
||||||
*
|
*
|
||||||
* Search entries have their "search-changed" signal delayed and
|
* Search entries have their "changed" signal delayed and should
|
||||||
* should be used when the search operation is slow, such as big
|
* be used when the searched operation is slow such as loads of
|
||||||
* datasets to search, or online searches.
|
* entries to search, or online searches.
|
||||||
*
|
*
|
||||||
* GtkSearchBar allows have a hidden search entry that 'springs
|
* GtkSearchBar allows have a hidden search entry that 'springs
|
||||||
* into action' upon keyboard input.
|
* into action' upon keyboard input.
|
||||||
@@ -18,69 +18,101 @@ search_changed_cb (GtkSearchEntry *entry,
|
|||||||
{
|
{
|
||||||
const char *text;
|
const char *text;
|
||||||
text = gtk_editable_get_text (GTK_EDITABLE (entry));
|
text = gtk_editable_get_text (GTK_EDITABLE (entry));
|
||||||
|
g_message ("search changed: %s", text);
|
||||||
gtk_label_set_text (result_label, text ? text : "");
|
gtk_label_set_text (result_label, text ? text : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
changed_cb (GtkEditable *editable)
|
||||||
|
{
|
||||||
|
const char *text;
|
||||||
|
text = gtk_editable_get_text (GTK_EDITABLE (editable));
|
||||||
|
g_message ("changed: %s", text);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
search_changed (GtkSearchEntry *entry,
|
||||||
|
GtkLabel *label)
|
||||||
|
{
|
||||||
|
gtk_label_set_text (label, "search-changed");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
next_match (GtkSearchEntry *entry,
|
||||||
|
GtkLabel *label)
|
||||||
|
{
|
||||||
|
gtk_label_set_text (label, "next-match");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
previous_match (GtkSearchEntry *entry,
|
||||||
|
GtkLabel *label)
|
||||||
|
{
|
||||||
|
gtk_label_set_text (label, "previous-match");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stop_search (GtkSearchEntry *entry,
|
||||||
|
GtkLabel *label)
|
||||||
|
{
|
||||||
|
gtk_label_set_text (label, "stop-search");
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_search_entry2 (GtkWidget *do_widget)
|
do_search_entry2 (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
GtkWidget *vbox;
|
GtkWidget *vbox;
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
GtkWidget *box;
|
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
GtkWidget *entry;
|
GtkWidget *entry;
|
||||||
|
GtkWidget *container;
|
||||||
GtkWidget *searchbar;
|
GtkWidget *searchbar;
|
||||||
GtkWidget *button;
|
GtkWidget *button;
|
||||||
GtkWidget *header;
|
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Type to Search");
|
gtk_window_set_title (GTK_WINDOW (window), "Delayed Search Entry");
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
|
||||||
gtk_widget_set_size_request (window, 200, -1);
|
gtk_widget_set_size_request (window, 200, -1);
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
header = gtk_header_bar_new ();
|
|
||||||
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
|
||||||
|
|
||||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||||
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
gtk_window_set_child (GTK_WINDOW (window), vbox);
|
||||||
|
|
||||||
entry = gtk_search_entry_new ();
|
entry = gtk_search_entry_new ();
|
||||||
gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
|
container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
|
gtk_widget_set_halign (container, GTK_ALIGN_CENTER);
|
||||||
|
gtk_box_append (GTK_BOX (container), entry);
|
||||||
searchbar = gtk_search_bar_new ();
|
searchbar = gtk_search_bar_new ();
|
||||||
gtk_search_bar_connect_entry (GTK_SEARCH_BAR (searchbar), GTK_EDITABLE (entry));
|
gtk_search_bar_connect_entry (GTK_SEARCH_BAR (searchbar), GTK_EDITABLE (entry));
|
||||||
gtk_search_bar_set_show_close_button (GTK_SEARCH_BAR (searchbar), FALSE);
|
gtk_search_bar_set_show_close_button (GTK_SEARCH_BAR (searchbar), FALSE);
|
||||||
gtk_search_bar_set_child (GTK_SEARCH_BAR (searchbar), entry);
|
gtk_search_bar_set_child (GTK_SEARCH_BAR (searchbar), container);
|
||||||
gtk_box_append (GTK_BOX (vbox), searchbar);
|
gtk_box_append (GTK_BOX (vbox), searchbar);
|
||||||
|
|
||||||
/* Hook the search bar to key presses */
|
/* Hook the search bar to key presses */
|
||||||
gtk_search_bar_set_key_capture_widget (GTK_SEARCH_BAR (searchbar), window);
|
gtk_search_bar_set_key_capture_widget (GTK_SEARCH_BAR (searchbar), window);
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18);
|
/* Help */
|
||||||
gtk_widget_set_margin_start (box, 18);
|
label = gtk_label_new ("Start Typing to search");
|
||||||
gtk_widget_set_margin_end (box, 18);
|
gtk_box_append (GTK_BOX (vbox), label);
|
||||||
gtk_widget_set_margin_top (box, 18);
|
|
||||||
gtk_widget_set_margin_bottom (box, 18);
|
|
||||||
gtk_box_append (GTK_BOX (vbox), box);
|
|
||||||
|
|
||||||
/* Toggle button */
|
/* Toggle button */
|
||||||
button = gtk_toggle_button_new ();
|
button = gtk_toggle_button_new_with_label ("Search");
|
||||||
gtk_button_set_icon_name (GTK_BUTTON (button), "system-search-symbolic");
|
|
||||||
g_object_bind_property (button, "active",
|
g_object_bind_property (button, "active",
|
||||||
searchbar, "search-mode-enabled",
|
searchbar, "search-mode-enabled",
|
||||||
G_BINDING_BIDIRECTIONAL);
|
G_BINDING_BIDIRECTIONAL);
|
||||||
gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button);
|
gtk_box_append (GTK_BOX (vbox), button);
|
||||||
|
|
||||||
/* Result */
|
/* Result */
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
gtk_box_append (GTK_BOX (box), hbox);
|
gtk_box_append (GTK_BOX (vbox), hbox);
|
||||||
|
|
||||||
label = gtk_label_new ("Searching for:");
|
label = gtk_label_new ("Result:");
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
||||||
|
gtk_widget_set_margin_start (label, 6);
|
||||||
gtk_box_append (GTK_BOX (hbox), label);
|
gtk_box_append (GTK_BOX (hbox), label);
|
||||||
|
|
||||||
label = gtk_label_new ("");
|
label = gtk_label_new ("");
|
||||||
@@ -88,6 +120,28 @@ do_search_entry2 (GtkWidget *do_widget)
|
|||||||
|
|
||||||
g_signal_connect (entry, "search-changed",
|
g_signal_connect (entry, "search-changed",
|
||||||
G_CALLBACK (search_changed_cb), label);
|
G_CALLBACK (search_changed_cb), label);
|
||||||
|
g_signal_connect (entry, "changed",
|
||||||
|
G_CALLBACK (changed_cb), label);
|
||||||
|
|
||||||
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
|
gtk_box_append (GTK_BOX (vbox), hbox);
|
||||||
|
|
||||||
|
label = gtk_label_new ("Signal:");
|
||||||
|
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
||||||
|
gtk_widget_set_margin_start (label, 6);
|
||||||
|
gtk_box_append (GTK_BOX (hbox), label);
|
||||||
|
|
||||||
|
label = gtk_label_new ("");
|
||||||
|
gtk_box_append (GTK_BOX (hbox), label);
|
||||||
|
|
||||||
|
g_signal_connect (entry, "search-changed",
|
||||||
|
G_CALLBACK (search_changed), label);
|
||||||
|
g_signal_connect (entry, "next-match",
|
||||||
|
G_CALLBACK (next_match), label);
|
||||||
|
g_signal_connect (entry, "previous-match",
|
||||||
|
G_CALLBACK (previous_match), label);
|
||||||
|
g_signal_connect (entry, "stop-search",
|
||||||
|
G_CALLBACK (stop_search), label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
|||||||
@@ -57,8 +57,6 @@ do_shortcut_triggers (GtkWidget *do_widget)
|
|||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Shortcuts");
|
gtk_window_set_title (GTK_WINDOW (window), "Shortcuts");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 200, -1);
|
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
list = gtk_list_box_new ();
|
list = gtk_list_box_new ();
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<property name="margin-start">50</property>
|
<property name="margin-start">50</property>
|
||||||
<property name="margin-end">50</property>
|
<property name="margin-end">50</property>
|
||||||
<property name="margin-top">50</property>
|
<property name="margin-top">50</property>
|
||||||
<property name="margin-bottom">50</property>
|
<property name="margin-end">50</property>
|
||||||
<property name="spacing">10</property>
|
<property name="spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton">
|
<object class="GtkButton">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Sliding Puzzle
|
/* Sliding Puzzle
|
||||||
* #Keywords: GdkPaintable, GdkGesture, GtkShortcutController, game
|
* #Keywords: GdkPaintable, GdkGesture, game
|
||||||
*
|
*
|
||||||
* This demo demonstrates how to use gestures and paintables to create a
|
* This demo demonstrates how to use gestures and paintables to create a
|
||||||
* small sliding puzzle game.
|
* small sliding puzzle game.
|
||||||
@@ -281,8 +281,7 @@ start_puzzle (GdkPaintable *paintable)
|
|||||||
gtk_aspect_frame_set_obey_child (GTK_ASPECT_FRAME (frame), FALSE);
|
gtk_aspect_frame_set_obey_child (GTK_ASPECT_FRAME (frame), FALSE);
|
||||||
|
|
||||||
/* Add shortcuts so people can use the arrow
|
/* Add shortcuts so people can use the arrow
|
||||||
* keys to move the puzzle
|
* keys to move the puzzle */
|
||||||
*/
|
|
||||||
controller = gtk_shortcut_controller_new ();
|
controller = gtk_shortcut_controller_new ();
|
||||||
gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (controller),
|
gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (controller),
|
||||||
GTK_SHORTCUT_SCOPE_LOCAL);
|
GTK_SHORTCUT_SCOPE_LOCAL);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,28 +0,0 @@
|
|||||||
entry.suggestion > popover.menu.background > contents {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.suggestion arrow {
|
|
||||||
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
|
|
||||||
min-height: 16px;
|
|
||||||
min-width: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.suggestion > popover {
|
|
||||||
margin-top: 6px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.suggestion > popover listview {
|
|
||||||
margin: 8px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.suggestion > popover listview > row {
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.suggestion > popover listview > row:selected {
|
|
||||||
outline-color: rgba(1,1,1,0.2);
|
|
||||||
color: @theme_text_color;
|
|
||||||
background-color: shade(#f6f5f4, 0.97);
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
|
|
||||||
#define MATCH_TYPE_OBJECT (match_object_get_type ())
|
|
||||||
#define MATCH_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MATCH_TYPE_OBJECT, MatchObject))
|
|
||||||
#define MATCH_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MATCH_TYPE_OBJECT))
|
|
||||||
|
|
||||||
typedef struct _MatchObject MatchObject;
|
|
||||||
|
|
||||||
GType match_object_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
gpointer match_object_get_item (MatchObject *object);
|
|
||||||
const char * match_object_get_string (MatchObject *object);
|
|
||||||
guint match_object_get_match_start (MatchObject *object);
|
|
||||||
guint match_object_get_match_end (MatchObject *object);
|
|
||||||
guint match_object_get_score (MatchObject *object);
|
|
||||||
void match_object_set_match (MatchObject *object,
|
|
||||||
guint start,
|
|
||||||
guint end,
|
|
||||||
guint score);
|
|
||||||
|
|
||||||
#define SUGGESTION_TYPE_ENTRY (suggestion_entry_get_type ())
|
|
||||||
#define SUGGESTION_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SUGGESTION_TYPE_ENTRY, SuggestionEntry))
|
|
||||||
#define SUGGESTION_IS_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SUGGESTION_TYPE_ENTRY))
|
|
||||||
|
|
||||||
typedef struct _SuggestionEntry SuggestionEntry;
|
|
||||||
|
|
||||||
GType suggestion_entry_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
GtkWidget* suggestion_entry_new (void);
|
|
||||||
|
|
||||||
void suggestion_entry_set_model (SuggestionEntry *self,
|
|
||||||
GListModel *model);
|
|
||||||
GListModel * suggestion_entry_get_model (SuggestionEntry *self);
|
|
||||||
|
|
||||||
void suggestion_entry_set_factory (SuggestionEntry *self,
|
|
||||||
GtkListItemFactory *factory);
|
|
||||||
GtkListItemFactory *
|
|
||||||
suggestion_entry_get_factory (SuggestionEntry *self);
|
|
||||||
|
|
||||||
void suggestion_entry_set_use_filter (SuggestionEntry *self,
|
|
||||||
gboolean use_ilter);
|
|
||||||
gboolean suggestion_entry_get_use_filter (SuggestionEntry *self);
|
|
||||||
|
|
||||||
void suggestion_entry_set_expression (SuggestionEntry *self,
|
|
||||||
GtkExpression *expression);
|
|
||||||
GtkExpression * suggestion_entry_get_expression (SuggestionEntry *self);
|
|
||||||
|
|
||||||
void suggestion_entry_set_show_arrow (SuggestionEntry *self,
|
|
||||||
gboolean show_arrow);
|
|
||||||
gboolean suggestion_entry_get_show_arrow (SuggestionEntry *self);
|
|
||||||
|
|
||||||
typedef void (* SuggestionEntryMatchFunc) (MatchObject *object,
|
|
||||||
const char *search,
|
|
||||||
gpointer user_data);
|
|
||||||
|
|
||||||
void suggestion_entry_set_match_func (SuggestionEntry *self,
|
|
||||||
SuggestionEntryMatchFunc func,
|
|
||||||
gpointer user_data,
|
|
||||||
GDestroyNotify destroy);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define SVG_TYPE_PAINTABLE (svg_paintable_get_type ())
|
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (SvgPaintable, svg_paintable, SVG, PAINTABLE, GObject)
|
|
||||||
|
|
||||||
GdkPaintable * svg_paintable_new (GFile *file);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
@@ -66,7 +66,6 @@ do_tagged_entry (GtkWidget *do_widget)
|
|||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Tagged Entry");
|
gtk_window_set_title (GTK_WINDOW (window), "Tagged Entry");
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 260, -1);
|
|
||||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||||
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
tag {
|
tag {
|
||||||
margin: 4px 0px;
|
margin: 4px;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background: lightskyblue;
|
background: lightskyblue;
|
||||||
@@ -17,7 +17,3 @@ tag button {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
border: 1px solid white;
|
border: 1px solid white;
|
||||||
}
|
}
|
||||||
|
|
||||||
entry.tagged {
|
|
||||||
border-spacing: 4px;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -545,7 +545,6 @@ recursive_attach_view (int depth,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
child_view = gtk_text_view_new_with_buffer (gtk_text_view_get_buffer (view));
|
child_view = gtk_text_view_new_with_buffer (gtk_text_view_get_buffer (view));
|
||||||
gtk_widget_set_size_request (child_view, 260 - 20 * depth, -1);
|
|
||||||
|
|
||||||
/* Frame is to add a black border around each child view */
|
/* Frame is to add a black border around each child view */
|
||||||
frame = gtk_frame_new (NULL);
|
frame = gtk_frame_new (NULL);
|
||||||
@@ -591,8 +590,6 @@ easter_egg_callback (GtkWidget *button,
|
|||||||
g_object_unref (buffer);
|
g_object_unref (buffer);
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (gtk_widget_get_root (button)));
|
|
||||||
gtk_window_set_modal (GTK_WINDOW (window), TRUE);
|
|
||||||
sw = gtk_scrolled_window_new ();
|
sw = gtk_scrolled_window_new ();
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
GTK_POLICY_AUTOMATIC,
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* Benchmark/Themes
|
/* Benchmark/Themes
|
||||||
*
|
*
|
||||||
* This demo continuously switches themes, like some of you.
|
* This demo switches themes like a maniac, like some of you.
|
||||||
*
|
*
|
||||||
* Warning: This demo involves rapidly flashing changes and may
|
* Warning: This demo involves rapidly flashing changes and may
|
||||||
* be hazardous to photosensitive viewers.
|
* be hazardous to photosensitive viewers.
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
</object>
|
</object>
|
||||||
<object class="GtkWindow" id="window">
|
<object class="GtkWindow" id="window">
|
||||||
<property name="resizable">0</property>
|
<property name="resizable">0</property>
|
||||||
<property name="title">Themes</property>
|
|
||||||
<child type="titlebar">
|
<child type="titlebar">
|
||||||
<object class="GtkHeaderBar" id="header">
|
<object class="GtkHeaderBar" id="header">
|
||||||
<child type="start">
|
<child type="start">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user