Compare commits
	
		
			2 Commits
		
	
	
		
			3.37.91
			...
			wip/gbsnet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					66910ab422 | ||
| 
						 | 
					17b56e9604 | 
							
								
								
									
										42
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,9 +1,25 @@
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
Makefile.in.in
 | 
			
		||||
aclocal.m4
 | 
			
		||||
autom4te.cache
 | 
			
		||||
build-aux
 | 
			
		||||
compile
 | 
			
		||||
config.guess
 | 
			
		||||
config.h
 | 
			
		||||
config.h.in
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
config.sub
 | 
			
		||||
configure
 | 
			
		||||
depcomp
 | 
			
		||||
install-sh
 | 
			
		||||
intltool-extract.in
 | 
			
		||||
intltool-merge.in
 | 
			
		||||
libtool
 | 
			
		||||
ltmain.sh
 | 
			
		||||
missing
 | 
			
		||||
.deps
 | 
			
		||||
50-mutter-navigation.xml
 | 
			
		||||
50-mutter-system.xml
 | 
			
		||||
50-mutter-windows.xml
 | 
			
		||||
@@ -17,11 +33,15 @@ mutter-wayland.desktop
 | 
			
		||||
*.swp
 | 
			
		||||
*.gir
 | 
			
		||||
*.typelib
 | 
			
		||||
stamp-h1
 | 
			
		||||
*.gmo
 | 
			
		||||
*.make
 | 
			
		||||
*.log
 | 
			
		||||
*.trs
 | 
			
		||||
*~
 | 
			
		||||
stamp-it
 | 
			
		||||
.intltool-merge-cache
 | 
			
		||||
ABOUT-NLS
 | 
			
		||||
POTFILES
 | 
			
		||||
Makevars.template
 | 
			
		||||
po/*.header
 | 
			
		||||
@@ -44,7 +64,9 @@ org.gnome.mutter.wayland.gschema.xml
 | 
			
		||||
testasyncgetprop
 | 
			
		||||
testboxes
 | 
			
		||||
testgradient
 | 
			
		||||
m4/*
 | 
			
		||||
INSTALL
 | 
			
		||||
mkinstalldirs
 | 
			
		||||
meta-enum-types.[ch]
 | 
			
		||||
src/stamp-meta-enum-types.h
 | 
			
		||||
src/meta-dbus-display-config.[ch]
 | 
			
		||||
@@ -70,17 +92,6 @@ src/xdg-output-unstable-v1-protocol.c
 | 
			
		||||
src/xdg-output-unstable-v1-server-protocol.h
 | 
			
		||||
src/xwayland-keyboard-grab-unstable-v1-protocol.c
 | 
			
		||||
src/xwayland-keyboard-grab-unstable-v1-server-protocol.h
 | 
			
		||||
src/tablet-unstable-v*-protocol.c
 | 
			
		||||
src/tablet-unstable-v*-server-protocol.h
 | 
			
		||||
src/text-input-unstable-v*-protocol.c
 | 
			
		||||
src/text-input-unstable-v*-server-protocol.h
 | 
			
		||||
src/keyboard-shortcuts-inhibit-unstable-v*-protocol.c
 | 
			
		||||
src/keyboard-shortcuts-inhibit-unstable-v*-server-protocol.h
 | 
			
		||||
src/linux-dmabuf-unstable-v*-protocol.c
 | 
			
		||||
src/linux-dmabuf-unstable-v*-server-protocol.h
 | 
			
		||||
src/xdg-shell-protocol.c
 | 
			
		||||
src/xdg-shell-server-protocol.h
 | 
			
		||||
src/wayland-eglstream-controller-server-protocol.h
 | 
			
		||||
src/meta/meta-version.h
 | 
			
		||||
src/libmutter-*.pc
 | 
			
		||||
doc/reference/*.args
 | 
			
		||||
@@ -100,7 +111,12 @@ doc/reference/meta-undocumented.txt
 | 
			
		||||
doc/reference/meta-unused.txt
 | 
			
		||||
doc/reference/meta-docs.sgml
 | 
			
		||||
doc/reference/meta.types
 | 
			
		||||
gtk-doc.m4
 | 
			
		||||
intltool.m4
 | 
			
		||||
libtool.m4
 | 
			
		||||
ltoptions.m4
 | 
			
		||||
ltsugar.m4
 | 
			
		||||
ltversion.m4
 | 
			
		||||
lt~obsolete.m4
 | 
			
		||||
.dirstamp
 | 
			
		||||
**/tags.*
 | 
			
		||||
build/
 | 
			
		||||
subprojects/sysprof/
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										117
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							@@ -1,117 +0,0 @@
 | 
			
		||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v4
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
 - review
 | 
			
		||||
 - build
 | 
			
		||||
 - test
 | 
			
		||||
 - coverage
 | 
			
		||||
 | 
			
		||||
check-commit-log:
 | 
			
		||||
  stage: review
 | 
			
		||||
  variables:
 | 
			
		||||
    GIT_DEPTH: "100"
 | 
			
		||||
  script:
 | 
			
		||||
    - ./.gitlab-ci/check-commit-log.sh
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
 | 
			
		||||
build-mutter:
 | 
			
		||||
  stage: build
 | 
			
		||||
  needs: []
 | 
			
		||||
  script:
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Db_coverage=true -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - ninja -C build install
 | 
			
		||||
  artifacts:
 | 
			
		||||
    expire_in: 1 day
 | 
			
		||||
    paths:
 | 
			
		||||
      - build
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
    - /^.*$/
 | 
			
		||||
 | 
			
		||||
build-without-opengl-and-glx:
 | 
			
		||||
  stage: build
 | 
			
		||||
  needs: []
 | 
			
		||||
  script:
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Dopengl=false -Dglx=false -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - ninja -C build install
 | 
			
		||||
  artifacts:
 | 
			
		||||
    paths:
 | 
			
		||||
      - build/meson-logs
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
    - /^.*$/
 | 
			
		||||
 | 
			
		||||
build-without-native-backend-and-wayland:
 | 
			
		||||
  stage: build
 | 
			
		||||
  needs: []
 | 
			
		||||
  script:
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false -Dwayland=false -Dcore_tests=false --werror --prefix /usr
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - ninja -C build install
 | 
			
		||||
  artifacts:
 | 
			
		||||
    paths:
 | 
			
		||||
      - build/meson-logs
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
    - /^.*$/
 | 
			
		||||
 | 
			
		||||
test-mutter:
 | 
			
		||||
  stage: test
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - build-mutter
 | 
			
		||||
  needs: ["build-mutter"]
 | 
			
		||||
  variables:
 | 
			
		||||
    XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
 | 
			
		||||
    GSETTINGS_SCHEMA_DIR: "$CI_PROJECT_DIR/build/data"
 | 
			
		||||
    G_SLICE: "always-malloc"
 | 
			
		||||
    MALLOC_CHECK_: "3"
 | 
			
		||||
    NO_AT_BRIDGE: "1"
 | 
			
		||||
  script:
 | 
			
		||||
    - dconf update
 | 
			
		||||
    - mkdir -m 700 $XDG_RUNTIME_DIR
 | 
			
		||||
    - glib-compile-schemas $GSETTINGS_SCHEMA_DIR
 | 
			
		||||
    - >
 | 
			
		||||
      dbus-run-session -- xvfb-run -s '+iglx -noreset'
 | 
			
		||||
      meson test -C build --no-rebuild -t 10 --verbose --no-stdsplit --print-errorlogs --wrap catchsegv
 | 
			
		||||
  artifacts:
 | 
			
		||||
    expire_in: 1 day
 | 
			
		||||
    paths:
 | 
			
		||||
      - build
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
    - /^.*$/
 | 
			
		||||
 | 
			
		||||
test-mutter-coverage:
 | 
			
		||||
  stage: coverage
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - test-mutter
 | 
			
		||||
  needs: ["test-mutter"]
 | 
			
		||||
  script:
 | 
			
		||||
    - ninja -C build coverage
 | 
			
		||||
    - cat build/meson-logs/coverage.txt
 | 
			
		||||
  artifacts:
 | 
			
		||||
    paths:
 | 
			
		||||
      - build/meson-logs
 | 
			
		||||
  when: manual
 | 
			
		||||
  except:
 | 
			
		||||
    refs:
 | 
			
		||||
      - tags
 | 
			
		||||
      - master
 | 
			
		||||
 | 
			
		||||
can-build-gnome-shell:
 | 
			
		||||
  stage: test
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - build-mutter
 | 
			
		||||
  needs: ["build-mutter"]
 | 
			
		||||
  before_script:
 | 
			
		||||
    - meson install --no-rebuild -C build
 | 
			
		||||
  script:
 | 
			
		||||
    - .gitlab-ci/checkout-gnome-shell.sh
 | 
			
		||||
    - meson gnome-shell gnome-shell/build --prefix /usr -Dman=false
 | 
			
		||||
    - ninja -C gnome-shell/build install
 | 
			
		||||
  only:
 | 
			
		||||
    - merge_requests
 | 
			
		||||
    - /^.*$/
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
# Rebuild and push with
 | 
			
		||||
#
 | 
			
		||||
#     cd .gitlab-ci/
 | 
			
		||||
#     podman build --format docker --no-cache -t registry.gitlab.gnome.org/gnome/mutter/master:v4 .
 | 
			
		||||
#     podman push registry.gitlab.gnome.org/gnome/mutter/master:v4
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
FROM fedora:32
 | 
			
		||||
 | 
			
		||||
RUN dnf -y update && dnf -y upgrade && \
 | 
			
		||||
    dnf install -y 'dnf-command(builddep)' && \
 | 
			
		||||
    dnf install -y 'dnf-command(copr)' && \
 | 
			
		||||
    dnf copr enable -y jadahl/mutter-ci && \
 | 
			
		||||
 | 
			
		||||
    dnf builddep -y mutter --setopt=install_weak_deps=False && \
 | 
			
		||||
 | 
			
		||||
    # For running unit tests
 | 
			
		||||
    dnf install -y xorg-x11-server-Xvfb mesa-dri-drivers dbus dbus-x11 \
 | 
			
		||||
        '*/xvfb-run' gdm-lib accountsservice-libs gnome-control-center gcovr \
 | 
			
		||||
        libnma python3-gobject python3-dbusmock \
 | 
			
		||||
        --setopt=install_weak_deps=False && \
 | 
			
		||||
 | 
			
		||||
    # GNOME Shell
 | 
			
		||||
    dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \
 | 
			
		||||
    dnf remove -y gnome-bluetooth-libs-devel && \
 | 
			
		||||
    dnf remove -y --noautoremove mutter mutter-devel && \
 | 
			
		||||
 | 
			
		||||
    dnf clean all
 | 
			
		||||
@@ -1,60 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
 | 
			
		||||
  echo Cannot review non-merge request
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
git fetch $CI_MERGE_REQUEST_PROJECT_URL.git $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
 | 
			
		||||
 | 
			
		||||
branch_point=$(git merge-base HEAD FETCH_HEAD)
 | 
			
		||||
 | 
			
		||||
commits=$(git log --format='format:%H' $branch_point..$CI_COMMIT_SHA)
 | 
			
		||||
 | 
			
		||||
if [ -z "$commits" ]; then
 | 
			
		||||
  echo Commit range empty
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
function commit_message_has_url() {
 | 
			
		||||
  commit=$1
 | 
			
		||||
  commit_message=$(git show -s --format='format:%b' $commit)
 | 
			
		||||
  echo "$commit_message" | grep -qe "\($CI_MERGE_REQUEST_PROJECT_URL/\(-/\)\?\(issues\|merge_requests\)/[0-9]\+\|https://bugzilla.gnome.org/show_bug.cgi?id=[0-9]\+\)"
 | 
			
		||||
  return $?
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function commit_message_subject_is_compliant() {
 | 
			
		||||
  commit=$1
 | 
			
		||||
  commit_message_subject=$(git show -s --format='format:%s' $commit)
 | 
			
		||||
 | 
			
		||||
  if echo "$commit_message_subject" | grep -qe "\(^meta-\|^Meta\)"; then
 | 
			
		||||
    echo " - message subject should not be prefixed with 'meta-' or 'Meta'"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if echo "$commit_message_subject" | grep -qe "\.[ch]:"; then
 | 
			
		||||
    echo " - message subject prefix should not include .c, .h, etc."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RET=0
 | 
			
		||||
for commit in $commits; do
 | 
			
		||||
  commit_short=$(echo $commit | cut -c -8)
 | 
			
		||||
 | 
			
		||||
  if ! commit_message_has_url $commit; then
 | 
			
		||||
    echo "Commit $commit_short needs a merge request or issue URL"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  errors=$(commit_message_subject_is_compliant $commit)
 | 
			
		||||
  if [ $? != 0 ]; then
 | 
			
		||||
    echo "Commit message for $commit_short is not compliant:"
 | 
			
		||||
    echo "$errors"
 | 
			
		||||
    RET=1
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
exit $RET
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
#!/usr/bin/bash
 | 
			
		||||
 | 
			
		||||
gnome_shell_target=
 | 
			
		||||
 | 
			
		||||
git clone https://gitlab.gnome.org/GNOME/gnome-shell.git
 | 
			
		||||
 | 
			
		||||
if [ $? -ne 0 ]; then
 | 
			
		||||
  echo Checkout failed
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cd gnome-shell
 | 
			
		||||
 | 
			
		||||
if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
 | 
			
		||||
  merge_request_remote=${CI_MERGE_REQUEST_SOURCE_PROJECT_URL//mutter/gnome-shell}
 | 
			
		||||
  merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
 | 
			
		||||
 | 
			
		||||
  echo Looking for $merge_request_branch on remote ...
 | 
			
		||||
  if git fetch -q $merge_request_remote $merge_request_branch 2>/dev/null; then
 | 
			
		||||
    gnome_shell_target=FETCH_HEAD
 | 
			
		||||
  else
 | 
			
		||||
    gnome_shell_target=origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
 | 
			
		||||
    echo Using $gnome_shell_target instead
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$gnome_shell_target" ]; then
 | 
			
		||||
  gnome_shell_target=$(git branch -r -l origin/$CI_COMMIT_REF_NAME)
 | 
			
		||||
  gnome_shell_target=${gnome_shell_target:-origin/master}
 | 
			
		||||
  echo Using $gnome_shell_target instead
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
git checkout -q $gnome_shell_target
 | 
			
		||||
@@ -1,55 +0,0 @@
 | 
			
		||||
<!-- 
 | 
			
		||||
Please read https://wiki.gnome.org/Community/GettingInTouch/BugReportingGuidelines
 | 
			
		||||
first to ensure that you create a clear and specific issue.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### Affected version
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
Provide at least the following information:
 | 
			
		||||
* Your OS and version
 | 
			
		||||
* Affected Mutter version
 | 
			
		||||
* Does this issue appear in XOrg and/or Wayland
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### Bug summary
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
Provide a short summary of the bug you encountered.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### Steps to reproduce
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
1. Step one
 | 
			
		||||
2. Step two
 | 
			
		||||
3. ...
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### What happened
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
What did Mutter do that was unexpected?
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### What did you expect to happen
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
What did you expect Mutter to do?
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### Relevant logs, screenshots, screencasts etc.
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
If you have further information, such as technical documentation, logs,
 | 
			
		||||
screenshots or screencasts related, please provide them here.
 | 
			
		||||
 | 
			
		||||
If the bug is a crash, please obtain a stack trace with installed debug
 | 
			
		||||
symbols (at least for GNOME Shell and Mutter) and attach it to
 | 
			
		||||
this issue following the instructions on
 | 
			
		||||
https://wiki.gnome.org/Community/GettingInTouch/Bugzilla/GettingTraces.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Do not remove the following line. -->
 | 
			
		||||
/label ~"1. Bug"
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
<!-- 
 | 
			
		||||
Please read https://wiki.gnome.org/Community/GettingInTouch/BugReportingGuidelines
 | 
			
		||||
first to ensure that you create a clear and specific issue.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### Feature summary
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
Describe what you would like to be able to do with Mutter
 | 
			
		||||
that you currently cannot do.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### How would you like it to work
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
If you can think of a way Mutter might be able to do this,
 | 
			
		||||
let us know here.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
### Relevant links, screenshots, screencasts etc.
 | 
			
		||||
 | 
			
		||||
<!-- 
 | 
			
		||||
If you have further information, such as technical documentation,
 | 
			
		||||
code, mockups or a similar feature in another window managers,
 | 
			
		||||
please provide them here.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Do not remove the following line. -->
 | 
			
		||||
/label ~"1. Feature"
 | 
			
		||||
							
								
								
									
										11
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
 | 
			
		||||
SUBDIRS = cogl clutter data src po doc
 | 
			
		||||
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
 | 
			
		||||
 | 
			
		||||
DISTCLEANFILES = \
 | 
			
		||||
	intltool-extract \
 | 
			
		||||
	intltool-merge \
 | 
			
		||||
	intltool-update \
 | 
			
		||||
	po/stamp-it \
 | 
			
		||||
	po/.intltool-merge-cache
 | 
			
		||||
							
								
								
									
										906
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										906
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,909 +1,3 @@
 | 
			
		||||
3.37.91
 | 
			
		||||
=======
 | 
			
		||||
* Fix initial state of display mode OSD [Jian-Hong; #1362]
 | 
			
		||||
* Fixed crashes [Jonas Å., Robert; !1407, !1411]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas Å., Christian; !1404, !1364, #1331]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Robert Mader, Jian-Hong Pan, Christian Rauch
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fran Dieguez [gl], Daniel Mustieles [es], Florentina Mușat [ro],
 | 
			
		||||
  Kukuh Syafaat [id], Piotr Drąg [pl], Emin Tufan Çetin [tr], Марко Костић [sr],
 | 
			
		||||
  Akarshan Biswas [bn_IN], Matej Urbančič [sl], Boyuan Yang [zh_CN],
 | 
			
		||||
  Goran Vidović [hr], Rafael Fontenelle [pt_BR]
 | 
			
		||||
 | 
			
		||||
3.37.90
 | 
			
		||||
=======
 | 
			
		||||
* Fix using NEAREST filter for backgrounds on scaled monitors [Daniel V.; !1346]
 | 
			
		||||
* Screencast fixes and improvements [Jonas; !1361, !1377, !1391]
 | 
			
		||||
* Support tap-button-map and tap-drag-lock touchpad settings [Giusy; !1319]
 | 
			
		||||
* Fix wine copy & paste [Sebastian; !1369]
 | 
			
		||||
* Fix shadows of server-side decorated XWayland windows [Olivier; #1358]
 | 
			
		||||
* Replace some loaded terms with more descriptive ones [Olivier; !1396]
 | 
			
		||||
* Add API to launch trusted wayland clients [Sergio; #741]
 | 
			
		||||
* Skip displays with 'non-desktop' property set [Philipp; !1393]
 | 
			
		||||
* Invalidate offscreen effect cache on video memory purge [Daniel V.; !1374]
 | 
			
		||||
* Add wl_shm support for 10 bpc and 16 bpc half float formats [Jonas; !804]
 | 
			
		||||
* Fixed crashes [Jonas, Erik, Martin; !1365, !1375, #1343]
 | 
			
		||||
* Misc. bug fixes and cleanups [Daniel V., Carlos, Olivier, Christian,
 | 
			
		||||
  Daniel * G., Jonas, Florian; !1370, !1376, !1385, !1352, !1386, !1390,
 | 
			
		||||
  !1388, !1397, !1398, !1401]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Sergio Costas, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Christian Hergert, Sebastian Keller, Erik Kurzinger, Giusy Margarita,
 | 
			
		||||
  Daniel García Moreno, Florian Müllner, Daniel van Vugt, Martin Whitaker,
 | 
			
		||||
  Philipp Zabel
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fabio Tomat [fur], Rafael Fontenelle [pt_BR], Jordi Mas [ca],
 | 
			
		||||
  Yuri Chornoivan [uk], Alexandre Franke [fr]
 | 
			
		||||
 | 
			
		||||
3.37.3
 | 
			
		||||
======
 | 
			
		||||
* Support custom keyboard layouts in $XDG_CONFIG_HOME/xkb [Peter; !936]
 | 
			
		||||
* Optimize resource scale computation [Jonas D.; !1196, !1276, !1343]
 | 
			
		||||
* Allow animating ClutterActor's content property [Georges; !1301]
 | 
			
		||||
* Implement backgrounds as ClutterContent [Georges; !1302]
 | 
			
		||||
* Add ClutterAlignContraint:pivot-point property [Jonas D.; !737]
 | 
			
		||||
* Fix crash on area screenshots with fractional scaling [Sebastian; !1320]
 | 
			
		||||
* Do not paint textures of fully obscured windows [Robert; !1326]
 | 
			
		||||
* Use a more appropriate combine function on opaque areas [Daniel; !1331]
 | 
			
		||||
* Fix remote desktop being broken without screencast session [Olivier; #1307]
 | 
			
		||||
* Remove more long-deprecated Clutter APIs [Adam, Georges; !1194, !1332]
 | 
			
		||||
* Drive each monitor by its own frame clock [Jonas Å.; !1285]
 | 
			
		||||
* Fix copy/paste failures on X11 [Carlos; !1350]
 | 
			
		||||
* Mipmap background texture rendering [Daniel; !1347]
 | 
			
		||||
* Plugged memory leaks [Sebastian, Jonas D.; !1293, !1281, !1304]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas Å., Jonas D., Daniel, Corentin, Carlos,
 | 
			
		||||
  Sebastian, Michel, Robert, Florian; !1288, !1289, !1291, !1296, !1292, !1298,
 | 
			
		||||
  !1300, !1303, !1290, !1287, !1306, !1305, !1308, !1313, !1250, !1314, !1267,
 | 
			
		||||
  !1275, !1317, !1270, !1322, !1181, !1282, !1325, !1323, !1240, !1295, !1329,
 | 
			
		||||
  !1333, !1334, !1336, !1341, #1312, !1345, !1349, !1356, #873, !1310, !1357]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Dreßler, Michel Dänzer, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Peter Hutterer, Adam Jackson, Sebastian Keller, Robert Mader, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Corentin Noël, Daniel van Vugt, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
3.37.2
 | 
			
		||||
======
 | 
			
		||||
* Fix move-to-center keybinding with multiple monitors [Sergey; #1073]
 | 
			
		||||
* Fix stuck buttons when a virtual device is destroyed [Carlos; !1239]
 | 
			
		||||
* Use workarea when centering new windows [Akatsuki; #964]
 | 
			
		||||
* Limit mipmap levels when rendering background [Daniel; !1003]
 | 
			
		||||
* Broadcast clipboard/primary offers [Carlos; !1253]
 | 
			
		||||
* Support primary-selection protocol from wayland-protocols [Carlos; !1255]
 | 
			
		||||
* Fix monitor screen cast on X11 [Jonas Å.; !1251]
 | 
			
		||||
* Support a "blank" cursor type [Florian; !1244]
 | 
			
		||||
* Improve stage view damage tracking [Jonas Å.; !1237]
 | 
			
		||||
* Implement touch-mode detecation for the X11 backend [Carlos; !1278]
 | 
			
		||||
* Drop external keyboard detection from touch-mode heuristics [Carlos; !1277]
 | 
			
		||||
* Optimize actor allocations [Jonas D.; !1247]
 | 
			
		||||
* Fixed crashes [Daniel, Carlos, Jonas Å., Jonas D.; !1256, !1258, !1217, !1280]
 | 
			
		||||
* Misc. bug fixes and cleanups [Christian, Jonas D., Olivier, Ting-Wei,
 | 
			
		||||
  Jonas Å., Marco, Corentin, Daniel, Robert, Niels, Florian, Simon; !1231,
 | 
			
		||||
  !1228, !1238, !1229, !1192, !1236, !1171, !1134, #1126, !1234, !1230, !1210,
 | 
			
		||||
  !1242, !1243, !1252, !1113, !1232, !1259, !1245, !1265, !1180, !1261, !788,
 | 
			
		||||
  !1264, !1235, !1218, !1150, !1274, !1271, !1279, !1283, !1272]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Marco Trevisan (Treviño), Akatsuki, Jonas Dreßler, Olivier Fourdan,
 | 
			
		||||
  Carlos Garnacho, Niels De Graef, Ting-Wei Lan, Robert Mader, Simon McVittie,
 | 
			
		||||
  Florian Müllner, Corentin Noël, Christian Rauch, Daniel van Vugt,
 | 
			
		||||
  Sergey Zigachev, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
3.37.1
 | 
			
		||||
======
 | 
			
		||||
* Fix screencasting non-maximized windows [Jonas Å.; !1174]
 | 
			
		||||
* Make window-aliveness checks less aggressive [Jonas Å.; !1182]
 | 
			
		||||
* Fix stylus coordinates when using screen rotation [Jonas T.; #1118]
 | 
			
		||||
* Preserve keyboard state on VT switch [Olivier; !1185]
 | 
			
		||||
* Remove Clutter's drag and drop actions [Jonas D.; !789]
 | 
			
		||||
* Cancel clicks/gestures actions on disable [Georges; !1188]
 | 
			
		||||
* Fix various clipboard issues [Carlos; !1186, !1198, !1203, !1204, !1206]
 | 
			
		||||
* Fix trackball button scrolling [Phillip; #1120]
 | 
			
		||||
* Fix tiled monitor support [Jonas; !1199]
 | 
			
		||||
* Support unredirecting fullscreen wayland surfaces [Jonas Å.; !798]
 | 
			
		||||
* Support area screencasts [Jonas Å.; !1207]
 | 
			
		||||
* Synchronize shadows to server-side decorations [Olivier; !1214]
 | 
			
		||||
* Allow inhibiting remote access [Jonas Å.; !1212]
 | 
			
		||||
* Fix overview key on X11 when using multiple keyboard layouts [Olivier; !1219]
 | 
			
		||||
* Fixed crashes [Jonas, D., Carlos; !1173, !1183, !1012]
 | 
			
		||||
* Misc. bug fixes and cleanups [Andre, Georges, Christian, Jonas Å., Andre,
 | 
			
		||||
  Simon, Florian, Carlos, Adam, Marco, Thomas, Elias, Pekka, Jonas D.,
 | 
			
		||||
  Laurent; !1169, !1168, !1166, !1170, !1167, !1172, !1175, !1176, !1184,
 | 
			
		||||
  !1126, !1187, !1191, !1195, !1179, !1200, !1193, !1209, !1213, !1208,
 | 
			
		||||
  #1074, !1223]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Marco Trevisan (Treviño), Elias Aebi, Thomas Hindoe Paaboel Andersen,
 | 
			
		||||
  Laurent Bigonville, Jonas Dreßler, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Adam Jackson, Andre Moreira Magalhaes, Simon McVittie, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Pekka Paalanen, Christian Rauch, Jonas Troeger,
 | 
			
		||||
  Phillip Wood, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Dušan Kazik [sk], Christian Kirbach [de]
 | 
			
		||||
 | 
			
		||||
3.36.0
 | 
			
		||||
======
 | 
			
		||||
* Fix placement of popup windows in multi-monitor setups [Jonas; !1110]
 | 
			
		||||
* Fix invisible mouse cursor on some hardware [Jonas; !1079]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Aurimas Černius [lt], Goran Vidović [hr], Anders Jonsson [sv],
 | 
			
		||||
  Guillaume Bernard [fr], Milo Casagrande [it], Daniel Korostil [uk],
 | 
			
		||||
  Andre Klapper [cy], Aman Alam [pa], Nathan Follens [nl]
 | 
			
		||||
 | 
			
		||||
3.35.92
 | 
			
		||||
=======
 | 
			
		||||
* Fix visibility of initially hidden windows [Jonas Å.; !1066]
 | 
			
		||||
* Avoid flicker when (un)redirecting windows [Sebastian; #997]
 | 
			
		||||
* Let BindConstraints update the preferred size [Emmanuele; !1070]
 | 
			
		||||
* Learn about GLES3 [Adam; !882]
 | 
			
		||||
* Ping windows on every window focus [Jonas D.; !891]
 | 
			
		||||
* Remove overhead from hot code paths [Christian;
 | 
			
		||||
  #1056, !1081, !1083, !1071, !1087]
 | 
			
		||||
* Allow remote desktop services to inhibit animations [Jonas Å.; !838]
 | 
			
		||||
* Update screen-cast code to PipeWire 0.3 API [Wim; !1062]
 | 
			
		||||
* Make check-alive timeouts configurable [Jonas Å.; !1080]
 | 
			
		||||
* Make each stage view correspond to a single CRTC [Jonas Å.; !1042]
 | 
			
		||||
* Implement scaled/transformed hardware cursors [Robert; !526]
 | 
			
		||||
* Use DMA buffers for screencasting if possible [Georges; !1086]
 | 
			
		||||
* Make Xwayland startup asynchronous [Carlos; !944]
 | 
			
		||||
* Fix clipping glitches in long text entries [Jonas D.; !1096]
 | 
			
		||||
* Add side channel for starting required X11 services [Carlos; !945]
 | 
			
		||||
* Support synchronized wayland popup moving [Jonas Å.; !705]
 | 
			
		||||
* Fixed crashes [Olivier, Jonas Å.; !1073, !1093]
 | 
			
		||||
* Plugged memory leaks [Sebastian, Jonas Å.; !1089, !1095]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas Å, Olivier, Florian, Daniel, Jonas D.,
 | 
			
		||||
  Robert, Sebastian, Christian, Arun, Carlos, worldofpeace; !1061, #1043,
 | 
			
		||||
  !1067, !1068, !1065, !835, !1058, !1069, !1075, #1060, !1077, !423, !1090,
 | 
			
		||||
  !1088, !1094, #1067, !1064, !1099, !957, !1000, !1082]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Emmanuele Bassi, Jonas Dreßler, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Christian Hergert, Adam Jackson, Sebastian Keller, Robert Mader,
 | 
			
		||||
  Florian Müllner, Georges Basile Stavracas Neto, Arun Raghavan, Wim Taymans,
 | 
			
		||||
  Daniel van Vugt, worldofpeace, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Yi-Jyun Pan [zh_TW], Asier Sarasua Garmendia [eu], Rafael Fontenelle [pt_BR],
 | 
			
		||||
  Emin Tufan Çetin [tr], Daniel Mustieles [es], Balázs Úr [hu],
 | 
			
		||||
  Gwan-gyeong Mun [ko], Marek Černocký [cs], Fran Dieguez [gl],
 | 
			
		||||
  Kukuh Syafaat [id], Alan Mortensen [da], Piotr Drąg [pl], sicklylife [ja],
 | 
			
		||||
  Matej Urbančič [sl]
 | 
			
		||||
 | 
			
		||||
3.35.91
 | 
			
		||||
=======
 | 
			
		||||
* Honor accelerometer orientation on monitor config changes [Hans; !959]
 | 
			
		||||
* Enable culling for integer-scaled actors [Robert; !1036]
 | 
			
		||||
* Add ClutterSeat::touch-mode property [Carlos; !1044]
 | 
			
		||||
* Fix mis-scaling when streaming windows [Olivier; !1022]
 | 
			
		||||
* Make the cursor renderer use the transactional KMS API [Jonas; !930]
 | 
			
		||||
* Advertise MetaMonitor as wl_output [Olivier; !994]
 | 
			
		||||
* Fix culling of XWayland windows [Robert; !1049]
 | 
			
		||||
* Only consider enabled effects when disabling culling [Robert; !1052]
 | 
			
		||||
* Misc. bug fixes and cleanups [Olivier, Sergio, Adam, Carlos, Björn; !1040,
 | 
			
		||||
  #985, !1024, !1039, !1051]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Sergio Costas, Björn Daase, Olivier Fourdan, Carlos Garnacho, Hans de Goede,
 | 
			
		||||
  Adam Jackson, Robert Mader, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  sicklylife [ja]
 | 
			
		||||
 | 
			
		||||
3.35.90
 | 
			
		||||
=======
 | 
			
		||||
* Cull out clip region [Robert; !985]
 | 
			
		||||
* Always enable tap-to-click/drag on opaque Wacom tablets [Carlos; !968]
 | 
			
		||||
* Fix visual glitches with offscreen effects applied [Georges; !992]
 | 
			
		||||
* Fix "sticky corner" in multi-head setups [Jonas D.; #774]
 | 
			
		||||
* Fix black shadows around XWayland windows during resizes [Ray, Olivier; #858]
 | 
			
		||||
* Zero-copy path for GPU-less secondary GPUs [Pekka; !810]
 | 
			
		||||
* Cancel DND on Esc [Carlos; #1020]
 | 
			
		||||
* Sync XWayland window shadows to frame during resizes [Olivier; !1009]
 | 
			
		||||
* Add support for per-monitor workareas [Alberts; !370]
 | 
			
		||||
* Ensure newly mapped wayland windows receive ENTER event [Olivier; !1026]
 | 
			
		||||
* Add ClutterSeat object [Carlos; !852]
 | 
			
		||||
* Honour CLUTTER_ACTOR_NO_LAYOUT flag more efficiently [Daniel; !575]
 | 
			
		||||
* Fix interoperation with wl_data_device_manager v1 [Carlos; #965]
 | 
			
		||||
* Favor text over images in clipboard manager [Carlos; #919]
 | 
			
		||||
* Apply monitor scale after background texture creation [Daniel; !1004]
 | 
			
		||||
* Plugged memory leaks [Sebastian, Adam; !991, #1000, !1011, !1020, !1030,
 | 
			
		||||
  !1001, !1033]
 | 
			
		||||
* Fixed crashes [Jonas Å., Florian, Olivier; !961, #1029, !1037]
 | 
			
		||||
* Misc. bug fixes and cleanups [Björn, Jonas Å., Adam, Sebastian, Jonas D.,
 | 
			
		||||
  Daniel, Carlos, Corentin, Sebastian, Robert, Daniel; #385, !998, !1007, !995,
 | 
			
		||||
  !1016, !1018, !1017, !1005, !1019, !1025, !1028, !1029, !1031, !1015, !1032,
 | 
			
		||||
  !1034, #1025]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Björn Daase, Jonas Dreßler, Olivier Fourdan, Carlos Garnacho, Adam Jackson,
 | 
			
		||||
  Sebastian Keller, Robert Mader, Alberts Muktupāvels, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Corentin Noël, Pekka Paalanen, Ray Strode,
 | 
			
		||||
  Daniel van Vugt, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  sicklylife [ja], Umarzuki Bin Mochlis Moktar [ms]
 | 
			
		||||
 | 
			
		||||
3.35.3
 | 
			
		||||
======
 | 
			
		||||
* backends/native: Correct dy value in pinch gesture event [Yariv; !974]
 | 
			
		||||
* Upload clipping rectangles in parallel [Daniel; !969]
 | 
			
		||||
* More cogl API cleanups [Adam; !978, !977, !973]
 | 
			
		||||
* Fix window recording on HiDPI [Pascal; !976]
 | 
			
		||||
* Fix top-left pixel being insensitive to clicks [Sebastian; #893]
 | 
			
		||||
* Misc. bug fixes and cleanups [Daniel, Adam; !979, !980]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Yariv Barkan, Adam Jackson, Sebastian Keller, Pascal Nowack, Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fran Dieguez [gl], Dz Chen [zh_CN]
 | 
			
		||||
 | 
			
		||||
3.35.2
 | 
			
		||||
======
 | 
			
		||||
* Don't emit focus event after destruction [Marco; gnome-shell#1704, !860]
 | 
			
		||||
* Add a notion of pixel format planes [Niels; !858]
 | 
			
		||||
* Replace various Cogl/Clutter types with Graphene [Georges; !458]
 | 
			
		||||
* Improve CoglJournal [Georges, Jasper; !402]
 | 
			
		||||
* Split pick and paint [Georges; !865]
 | 
			
		||||
* Remove deprecated/unused cogl/clutter APIs [Adam; !866, !878, !879, !880,
 | 
			
		||||
  !885, !900, !902, !904, !896, !913, !922, !883, !903, !921, !933, !819]
 | 
			
		||||
* Fix hang when opening not-responding dialog on Xorg [Carlos; !876]
 | 
			
		||||
* Allow changing Clutter debug flags at runtime [Georges; !862]
 | 
			
		||||
* Fix frozen grabs on Xorg after weeks of inactivity [Jonas; !886]
 | 
			
		||||
* Fix triggering popups from stylus devices o wayland [Carlos; #886]
 | 
			
		||||
* Fix fallback to GLES2 [Adam; #635]
 | 
			
		||||
* Fix buffer age checks on multiple monitors [Carlos; !906]
 | 
			
		||||
* Adjust to Sysprof API change [Christian; !908]
 | 
			
		||||
* Improve support for (X11) fullscreen games under wayland [Hans; !739]
 | 
			
		||||
* Support shadow framebuffers for offscreen rendering [Olivier; !877]
 | 
			
		||||
* Fix hang after interacting with desktop icons on X11 [Marco; !909]
 | 
			
		||||
* Don't double scale when getting absolute surface coordinates [Xiang; !915]
 | 
			
		||||
* Respect NET_WM_TRANSIENT_FOR for override-redirect windows [Marco; !920]
 | 
			
		||||
* Kill window effects on destroy [Robert; !924]
 | 
			
		||||
* Remove deprecated ClutterTexture [Jonas; !932]
 | 
			
		||||
* Use regions instead of bounding box for clipping and culling [Carlos; !867]
 | 
			
		||||
* Use partial damage for dma-buf and EGLImage buffers on wayland [Robert; #947]
 | 
			
		||||
* Do not stack transients underneath their always-on-top parent [Florian; #587]
 | 
			
		||||
* Add explicit paint/pick contexts [Jonas; !935]
 | 
			
		||||
* Fix KMS freeze after pageflip fallback [Pekka; !953]
 | 
			
		||||
* Fixed crashes [Robert, Carlos, Jonas, Marco, Hans, Tim; !856, !869, !912,
 | 
			
		||||
  !895, !928, #591, !823, !960]
 | 
			
		||||
* Plugged memory leaks [Niels, Robert, Carlos, Marco; !847, !868, !873, #908]
 | 
			
		||||
* Misc. bug fixes and cleanups [Niels, Robert, Jonas, Marco, Carlos, Daniel,
 | 
			
		||||
  Jan, Adam, Cosimo, Florian, Thomas, Georges, Hans, Corentin, Christian,
 | 
			
		||||
  Benjamin; !853, !822, !451, !854, !816, !857, !859, !734, !844, !851, #876,
 | 
			
		||||
  !874, !673, !692, !888, !889, !894, !901, !905, !872, !898, !911, !918, !863,
 | 
			
		||||
  #878, !811, !893, !925, !926, !890, !931, !927, !934, !938, !940, !947, !941,
 | 
			
		||||
  !929, !949, !952, !871, !955, !956, !958, !907, !965, !964, !966]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Marco Trevisan (Treviño), Jan Alexander Steffens (heftig),
 | 
			
		||||
  Thomas Hindoe Paaboel Andersen, Benjamin Berg, Cosimo Cecchi, Tim Crawford,
 | 
			
		||||
  Piotr Drąg, Xiang Fan, Olivier Fourdan, Carlos Garnacho, Hans de Goede,
 | 
			
		||||
  Niels De Graef, Christian Hergert, Adam Jackson, Robert Mader,
 | 
			
		||||
  Florian Müllner, Georges Basile Stavracas Neto, Bastien Nocera, Corentin Noël,
 | 
			
		||||
  Pekka Paalanen, Jasper St. Pierre, Christian Rauch, Daniel van Vugt,
 | 
			
		||||
  Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Bruce Cowan [en_GB]
 | 
			
		||||
 | 
			
		||||
3.35.1
 | 
			
		||||
======
 | 
			
		||||
* Fix immediate screen blank after releaseing inhibitor [Tim; #573]
 | 
			
		||||
* Respond to frame callbacks regardless of damage [Jonas; !839]
 | 
			
		||||
* selection [Carlos; !842]
 | 
			
		||||
* Fix Night Light on wayland [Jonas; !840]
 | 
			
		||||
* Fix various copy+paste/DND regressions [Carlos; !848, #789, #842,
 | 
			
		||||
  #793, #845, #854]
 | 
			
		||||
* Misc. bug fixes and cleanups [Daniel, Marco, Jonas, Georges;
 | 
			
		||||
  !841, !764, !837, !846]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Marco Trevisan (Treviño), Carlos Garnacho, Tim Klocke,
 | 
			
		||||
  Georges Basile Stavracas Neto, Daniel van Vugt, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
3.34.1
 | 
			
		||||
======
 | 
			
		||||
* Fix startup of X11 session services on wayland [Carlos; #771]
 | 
			
		||||
* Fix _NET_ACTIVE_WINDOW emission [Carlos; #751]
 | 
			
		||||
* Fix initial view perspective [Marco; !803]
 | 
			
		||||
* Fix screenshots and window animations when scaled [Robert; !758]
 | 
			
		||||
* Re-enable coredumps when capabilities are set [Jonas; !811]
 | 
			
		||||
* Fix scaling of DND surface actors [Robert; !780]
 | 
			
		||||
* Optimize blitting of untransformed offscreen stage views [Olivier; !809, !820]
 | 
			
		||||
* Fix freeze of pointer event delivery on X11 [Olivier; !821]
 | 
			
		||||
* Fix scaling of stylus input coordinates with HiDPI [Dorian; !830]
 | 
			
		||||
* Fix memory leak when using implicit animations [Jonas; !828]
 | 
			
		||||
* Fix numlock state for native backend [Carlos; #769]
 | 
			
		||||
* Fixed crashes [Marco, Olivier, Jonas Å.; !805, #823, !808, !825,
 | 
			
		||||
  #844, !826, #779]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas Å., Georges, Jonas D., Michal, Daniel,
 | 
			
		||||
  Iain, Adam, Marco, Carlos, Ting-Wei, Hans, Robert; !787, !795, !791, !797,
 | 
			
		||||
  !772, !775, !799, !778, !785, !782, !796, #819, !814, !769, !817, !783, !786,
 | 
			
		||||
  !829, !774, #822]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Marco Trevisan (Treviño), Jonas Dreßler, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Hans de Goede, Adam Jackson, Ting-Wei Lan, Iain Lane, Michal Lazo,
 | 
			
		||||
  Robert Mader, Georges Basile Stavracas Neto, Dorian Stoll, Daniel van Vugt,
 | 
			
		||||
  Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Milo Casagrande [it], Nathan Follens [nl], Matej Urbančič [sl],
 | 
			
		||||
  Ask Hjorth Larsen [da], Alan Mortensen [da], Jordi Mas [ca]
 | 
			
		||||
 | 
			
		||||
3.34.0
 | 
			
		||||
======
 | 
			
		||||
* Fix xdg-output v3 support [Olivier; !771]
 | 
			
		||||
* Fix crash when changing decoration state [Jonas; !773]
 | 
			
		||||
* Add and remove connectors on hot-plug [Jonas; !743]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Olivier Fourdan, Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Rafael Fontenelle [pt_BR], Gwan-gyeong Mun [ko], Christian Kirbach [de],
 | 
			
		||||
  Claude Paroz [fr], Milo Casagrande [it], Emin Tufan Çetin [tr],
 | 
			
		||||
  Ryuta Fujii [ja]
 | 
			
		||||
 | 
			
		||||
3.33.92
 | 
			
		||||
=======
 | 
			
		||||
* Turn MetaShapedTexture into a ClutterContent implementation [Georges; !409]
 | 
			
		||||
* Restore inhibit shortcut for overlay key [Olivier; #734]
 | 
			
		||||
* Misc. pointer a11y improvements [Jonas D., Olivier; !746, !747, !745, !761]
 | 
			
		||||
* Fix position of drag surfaces [Robert; !684]
 | 
			
		||||
* Implement subsurface.place_below() for parents [Robert; !664]
 | 
			
		||||
* Add meta_window_actor_get_image() [Jonas Å.; !752]
 | 
			
		||||
* Revert faulty optimization from !719 [Jonas Å.; #735]
 | 
			
		||||
* Add additional sysprof trace points [Jonas Å.; !757, !765]
 | 
			
		||||
* Remove GLX "threaded swap wait" used on Nvidia [Daniel; !602]
 | 
			
		||||
* Implement geometric picking [Daniel; !189]
 | 
			
		||||
* Fix lost keyboard focus after DND [Olivier; #747]
 | 
			
		||||
* Misc. bug fixes and cleanups [Florian, Carlos, Piotr, Hans, Georges, Robert,
 | 
			
		||||
  Ray, Mart, Rémi; !740, !672, !749, !751, !753, !730, !755, !756, !750, !715,
 | 
			
		||||
  #738944, !657, !768]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Rémi Bernon, Piotr Drąg, Jonas Dreßler, Olivier Fourdan,
 | 
			
		||||
  Carlos Garnacho, Hans de Goede, Robert Mader, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Mart Raudsepp, Ray Strode, Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Piotr Drąg [pl], Марко Костић [sr], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
 | 
			
		||||
  Balázs Úr [hu], Fran Dieguez [gl], Jordi Mas [ca], Anders Jonsson [sv],
 | 
			
		||||
  Trần Ngọc Quân [vi], Tim Sabsch [de], Fabio Tomat [fur], Goran Vidović [hr],
 | 
			
		||||
  Marek Černocký [cs]
 | 
			
		||||
 | 
			
		||||
3.33.91
 | 
			
		||||
=======
 | 
			
		||||
* Fix primary selection copy and paste between X11 and wayland [Hans; #702]
 | 
			
		||||
* Improve monitor hotplug support [Hans; !713]
 | 
			
		||||
* Remove a source of frame skips [Daniel; !719]
 | 
			
		||||
* Fix windows being lowered after unmaximizing with double click [Olivier; #88]
 | 
			
		||||
* Remove Clutter API for global grabs [Jonas D.; !536]
 | 
			
		||||
* Improve processing of incompressible events [Daniel; !711]
 | 
			
		||||
* Add xdg-output v3 support [Olivier; !704]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas Å., Marco, Carlos, Adam, Albert, Niels,
 | 
			
		||||
  Olivier, Florian; !722, !385, !728, !726, !500, !731, !727, !700, !735, !738]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Albert Vaca Cintora, Jonas Dreßler, Olivier Fourdan,
 | 
			
		||||
  Carlos Garnacho, Hans de Goede, Niels De Graef, Adam Jackson, Florian Müllner,
 | 
			
		||||
  Marco Trevisan (Treviño), Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Asier Sarasua Garmendia [eu], Kukuh Syafaat [id], Florentina Mușat [ro],
 | 
			
		||||
  Aurimas Černius [lt], Daniel Mustieles [es]
 | 
			
		||||
 | 
			
		||||
3.33.90
 | 
			
		||||
=======
 | 
			
		||||
* Fix visibility of clones with hidden source [Florian; #683]
 | 
			
		||||
* Reduce freezes when opening some popup windows [Carlos; #556]
 | 
			
		||||
* Be more thorough when excluding obscured areas from painting [Carlos; !698]
 | 
			
		||||
* Make it possible to start Xwayland on demand [Carlos; !709]
 | 
			
		||||
* clutter: Expose layout_manager to transitions [Florian; !716]
 | 
			
		||||
* Misc. bug fixes and cleanups [Mark, Florian, Iain, Niels, Carlos, Ray; !671,
 | 
			
		||||
  !691, !694, !696, !703, !707, !697, !710, !708, !714, #719, !721]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Mark Blakeney, Carlos Garnacho, Niels De Graef, Iain Lane, Florian Müllner,
 | 
			
		||||
  Ray Strode
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Asier Sarasua Garmendia [eu], Rafael Fontenelle [pt_BR], Fabio Tomat [fur],
 | 
			
		||||
  Florentina Mușat [ro]
 | 
			
		||||
 | 
			
		||||
3.33.4
 | 
			
		||||
======
 | 
			
		||||
* Discard page flip retries on hotplug [Jonas; !630]
 | 
			
		||||
* Add xdg-output v2 support [Olivier; #645]
 | 
			
		||||
* Restore DRM format fallbacks [Jonas; !662]
 | 
			
		||||
* Don't emit ::size-changed when only position changed [Daniel; !568]
 | 
			
		||||
* Expose workspace layout properties [Florian; !618]
 | 
			
		||||
* Don't use grab modifiers when shortcuts are inhibited [Olivier; #642]
 | 
			
		||||
* Fix stuttering due to unchanged power save mode notifications [Georges; !674]
 | 
			
		||||
* Add API to reorder workspaces [Adam; !670]
 | 
			
		||||
* Make picking a new focus window more reliable [Marco; !669]
 | 
			
		||||
* Defer actor allocation till shown [Carlos; !677]
 | 
			
		||||
* Try to use primary GPU for copy instead of glReadPixels [Pekka; !615]
 | 
			
		||||
* Unset pointer focus when the cursor is hidden [Jonas D.; !448]
 | 
			
		||||
* Fix modifier-drag on wayland subsurfaces [Robert; !604]
 | 
			
		||||
* Fix background corruption on Nvidia after resuming from suspend [Daniel; !600]
 | 
			
		||||
* Only grab the locate-pointer key when necessary [Olivier; !685, #647]
 | 
			
		||||
* Misc. bug fixes and cleanups [Florian, Jonas, Daniel, Robert, Olivier,
 | 
			
		||||
  Georges, Marco, Carlos, Emmanuele; !648, !650, !647, !656, !658, !637,
 | 
			
		||||
  !663, !660, !659, !665, !666, !668, !667, #667, !676, !678, #672, !680,
 | 
			
		||||
  !683, !688, !689, !687]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Emmanuele Bassi, Adam Bieńkowski, Piotr Drąg, Jonas Dreßler,
 | 
			
		||||
  Olivier Fourdan, Carlos Garnacho, Robert Mader, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Pekka Paalanen, Marco Trevisan (Treviño),
 | 
			
		||||
  Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fabio Tomat [fur], Kukuh Syafaat [id]
 | 
			
		||||
 | 
			
		||||
3.33.3
 | 
			
		||||
======
 | 
			
		||||
* Prepare for running Xwayland on demand [Carlos; !420]
 | 
			
		||||
* Fix text selection color rendering [Florian; #494]
 | 
			
		||||
* Fix black shadows when using fractional scaling [Robert; #609]
 | 
			
		||||
* Honor startup sequence workspace on wayland [Carlos; gnome-shell#674]
 | 
			
		||||
* Only emit 'grab-op-end` signal after dropping grabs [Marco; !596]
 | 
			
		||||
* Add a Sysprof-based profiler [Jonas, Georges; !197, !603]
 | 
			
		||||
* Relax "xwayland-allow-grabs" setting [Olivier; #597]
 | 
			
		||||
* Implement locate-pointer accessibility feature [Olivier; !453]
 | 
			
		||||
* Implement mouse accessibility [Olivier; !512]
 | 
			
		||||
* Consolidate frame throttling [Daniel, Georges; !363]
 | 
			
		||||
* Fix setting blank cursor under wayland [Jonas; #630]
 | 
			
		||||
* Pixel-align OpenGL cursors [Jonas; !610]
 | 
			
		||||
* Handle returning from fullscreen/maximization better [Jonas; !621]
 | 
			
		||||
* Improve screencast support on multi-monitor systems [Georges; !623]
 | 
			
		||||
* Fix running X11 applications with sudo under wayland [Hans; #643]
 | 
			
		||||
* Implement toggle-keys notification [Olivier; #637]
 | 
			
		||||
* Add initial KMS transactional support [Jonas; !525]
 | 
			
		||||
* Improve finding new focus window when the old one is closed [Marco; #308]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas, Carlos, Marco, Florian, Pekka, Robert,
 | 
			
		||||
  Douglas, Georges, Daniel, Emil, Niels, Hans, Olivier, Ting-Wei, Corentin;
 | 
			
		||||
  !591, #398, !592, !581, !597, !598, !593, !497, #591, !545, gtk#1675, !601,
 | 
			
		||||
  #568, !564, !605, !609, !115, !214, !611, !617, !616, !619, !624, !622, !627,
 | 
			
		||||
  !628, !629, !632, !633, !631, !636, !639, !638, !634, !640, !529, !644, !590]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Piotr Drąg, Olivier Fourdan, Carlos Garnacho, Hans de Goede,
 | 
			
		||||
  Niels De Graef, Ting-Wei Lan, Robert Mader, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Corentin Noël, Pekka Paalanen, Douglas R. Reno,
 | 
			
		||||
  Marco Trevisan (Treviño), Emil Velikov, Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Balázs Úr [hu], Daniel Mustieles [es], Nathan Follens [nl], Goran Vidović [hr]
 | 
			
		||||
 | 
			
		||||
3.33.2
 | 
			
		||||
======
 | 
			
		||||
* Fix rendering lag on Xorg [Daniel; !520, !281]
 | 
			
		||||
* Misc. bug fixes and cleanups [Carlos, Marco, Jonas D., Florian, Niels,
 | 
			
		||||
  Daniel, Benjamin, Jonas Å., Ignacio, Vasilis; #598, !576, !547, !578,
 | 
			
		||||
  !583, !582, !469, !524, !119, !571, !584, !585, !586, #425]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Benjamin Berg, Jonas Dreßler, Carlos Garnacho, Niels De Graef,
 | 
			
		||||
  Vasilis Liaskovitis, Florian Müllner, Ignacio Casal Quinteiro,
 | 
			
		||||
  Marco Trevisan (Treviño), Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Daniel Mustieles [es]
 | 
			
		||||
 | 
			
		||||
3.33.1
 | 
			
		||||
======
 | 
			
		||||
* Remove unused APIs and outdated driver support
 | 
			
		||||
  [Adam; !481, !468, !489, !487, !546]
 | 
			
		||||
* Enable EGL_IMG_context_priority [Adam; !454]
 | 
			
		||||
* Disable mouse keys with Numlock on [Olivier; #530]
 | 
			
		||||
* Fix crash when restarting on X11 [Marco; #576]
 | 
			
		||||
* Implement clipboard manager [Carlos; !320]
 | 
			
		||||
* Fix spurious idle signals that prevent session unblank [Jonas Å.; !543]
 | 
			
		||||
* Fix mapping of touchscreens that don't report dimensions [Carlos; #581]
 | 
			
		||||
* Fix propagating fractional scaling factor [Robert; !537]
 | 
			
		||||
* Add experimental RT scheduling support [Carlos; !460]
 | 
			
		||||
* Misc. bug fixes and cleanups [Robert, Carlos, Olivier, Ray, Marco, Jonas D.,
 | 
			
		||||
  Georges, Daniel V., Daniel M; !467, !504, !551, !552, #575, #556, !557, !442,
 | 
			
		||||
  !562, !535, !548, #586, !567, !396, !422, !507]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Piotr Drąg, Jonas Dreßler, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Adam Jackson, Robert Mader, Daniel García Moreno, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Ray Strode, Marco Trevisan (Treviño),
 | 
			
		||||
  Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Daniel Mustieles [es], Fabio Tomat [fur], Kukuh Syafaat [id]
 | 
			
		||||
 | 
			
		||||
3.32.1
 | 
			
		||||
======
 | 
			
		||||
* Fix fallback app menu on wayland [Florian; #493]
 | 
			
		||||
* Fix elogind support [Tom; !491]
 | 
			
		||||
* Fix startup notifications not timing out [Carlos; #501]
 | 
			
		||||
* Fix keyboard accessibility toggle from keys
 | 
			
		||||
  [Olivier, Carlos; !501, #529, !531]
 | 
			
		||||
* Fix touchscreen input on rotated displays [Carlos; #514]
 | 
			
		||||
* Work around hangul text input bug [Carlos; #1365]
 | 
			
		||||
* Fix blurry wallpaper scaling [Daniel; !505]
 | 
			
		||||
* Fix placement of window menu when using fractional scaling [Jan; #527]
 | 
			
		||||
* Fix repaint issues of offscreen effects on secondary monitors [Daniel; !511]
 | 
			
		||||
* Fix windows not getting focus after launch [Daniel; #505]
 | 
			
		||||
* Properly advertise support for 'underscan' property [Jonas; !507]
 | 
			
		||||
* Improve power-saving handling [Jonas; !506]
 | 
			
		||||
* Fix moving windows by super+touch [Jonas D.; !495]
 | 
			
		||||
* Misc. bug fixes and cleanups [Benjamin, Florian, Adam, Marco, Pablo,
 | 
			
		||||
  Erik, Jonas, Heiher, Pekka, Daniel, Olivier, Carlos; !478, !475, !480,
 | 
			
		||||
  !482, #490, !488, #491, #480, !477, !496, !492, !485, !515, !519, !521,
 | 
			
		||||
  !216, !538, #541, #523]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Pablo Barciela, Benjamin Berg, Tom Briden, Jonas Dreßler,
 | 
			
		||||
  Olivier Fourdan, Carlos Garnacho, Jan Alexander Steffens (heftig), Heiher,
 | 
			
		||||
  Adam Jackson, Erik Kurzinger, Florian Müllner, Pekka Paalanen,
 | 
			
		||||
  Marco Trevisan (Treviño), Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Khaled Hosny [ar], Goran Vidović [hr], Daniel Mustieles [es]
 | 
			
		||||
 | 
			
		||||
3.32.0
 | 
			
		||||
======
 | 
			
		||||
* Fix deadlock when cancelling a theme sound [Andrea; !474]
 | 
			
		||||
* Stop swizzling BGRA buffers (bye-bye inverted colors in screenshots
 | 
			
		||||
  and animations) [Carlos; !486]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Andrea Azzarone, Carlos Garnacho, Robert Mader
 | 
			
		||||
 | 
			
		||||
3.31.92
 | 
			
		||||
=======
 | 
			
		||||
* Fix flicker of apps that use multiple SHM buffers [Jonas Å.; #199]
 | 
			
		||||
* Don't disable page flips after temporary failues [Jonas Å.; #460]
 | 
			
		||||
* Improve redraw performance [Carlos; !196]
 | 
			
		||||
* Add cursor-mode support to window screencasting [Jonas Å.; !413]
 | 
			
		||||
* Add back support for system-wide monitor configurations [Jonas Å.; !253]
 | 
			
		||||
* Add fractional scaling support [Marco, Jonas Å.; !3]
 | 
			
		||||
* Consider remapped keys when guessing keycode from keysym [Andrea; #443]
 | 
			
		||||
* Stop turning on-screen-keyboard off on focus changes [Carlos; !432]
 | 
			
		||||
* Fix crashes [Robert, Carlos, Jonas D., Florian; !447, #361, !426, #479]
 | 
			
		||||
* Misc. bug fixes and cleanups [Benjamin, Adam, Olivier, Niels, Piotr; !457,
 | 
			
		||||
  !452, !459, !380, !361, !461, !464, !471, !473, !463]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Andrea Azzarone, Benjamin Berg, Piotr Drąg, Jonas Dreßler,
 | 
			
		||||
  Olivier Fourdan, Carlos Garnacho, Niels De Graef, Adam Jackson, Robert Mader,
 | 
			
		||||
  Florian Müllner, Marco Trevisan (Treviño)
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Milo Casagrande [it], Tim Sabsch [de], Trần Ngọc Quân [vi],
 | 
			
		||||
  Gwan-gyeong Mun [ko], Марко Костић [sr], Daniel Mustieles [es],
 | 
			
		||||
  Rūdolfs Mazurs [lv], Nathan Follens [nl]
 | 
			
		||||
 | 
			
		||||
3.31.91
 | 
			
		||||
=======
 | 
			
		||||
* Fix infinite loop in EDID matching [Marco; #459]
 | 
			
		||||
* wayland: Don't resetin text-input state prematurely [Carlos; !410]
 | 
			
		||||
* wayland: Don't maximize windows if minimum size is too big [Olivier; #463]
 | 
			
		||||
* Fix crash when using "restore shortcuts" without focus window [Olivier; #464]
 | 
			
		||||
* Add flag parameter to grab accelerator API [Andrea; !169]
 | 
			
		||||
* Reuse old CRTC if possible to avoid flicker on hotplug [Pekka, Emilio; #373]
 | 
			
		||||
* Misc. bug fixes and cleanups [Marco, Jonas, Niels, Adam, Olivier; !436,
 | 
			
		||||
  !421, #462, !439, !440, !444, !321, !445, !456]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Niels De Graef, Adam Jackson, Emilio Pozuelo Monfort, Pekka Paalanen,
 | 
			
		||||
  Marco Trevisan (Treviño)
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Jiri Grönroos [fi], Charles Monzat [fr], Claude Paroz [fr], Fran Dieguez [gl],
 | 
			
		||||
  Emin Tufan Çetin [tr], Aurimas Černius [lt], Anders Jonsson [sv],
 | 
			
		||||
  Matej Urbančič [sl], Marek Cernocky [cs], Daniel Șerbănescu [ro],
 | 
			
		||||
  Alan Mortensen [da], Baurzhan Muftakhidinov [kk], Yi-Jyun Pan [zh_TW],
 | 
			
		||||
  Daniel Mustieles [es], Rafael Fontenelle [pt_BR]
 | 
			
		||||
 | 
			
		||||
3.31.90
 | 
			
		||||
=======
 | 
			
		||||
* Fix support of extended characters in on-screen keyboard [Andrea; #109]
 | 
			
		||||
* Improve selection of the primary GPU [Pekka, Emilio; !271]
 | 
			
		||||
* Screen-cast cursor updates as PipeWire stream metadata [Jonas; !357]
 | 
			
		||||
* Fix rendering glitches in magnifier [Daniel; gnome-shell#387]
 | 
			
		||||
* Fix monitor recording on HiDPI [Jonas; !415]
 | 
			
		||||
* Honour secondary GPU supported pixel formats [Pekka; !341]
 | 
			
		||||
* Fall back to CPU copy path when using a software renderer [Emilio; !325]
 | 
			
		||||
* Remove fallback app menu [Florian; gnome-shell#624]
 | 
			
		||||
* wayland: Add support for viewporter protocol [Robert; !323]
 | 
			
		||||
* Misc. bug fixes and cleanups [Florian, Carlos, Olivier, Marco, Robert,
 | 
			
		||||
  Daniel, Pekka, Jonas, Ole, Georges; !391, #335, #442, !406, !395, #447,
 | 
			
		||||
  !375, gnome-shell#349, #451, !416, #784199, !408, !181, !405]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Andrea Azzarone, Ole Jørgen Brønner, Piotr Drąg, Olivier Fourdan,
 | 
			
		||||
  Dariusz Gadomski, Carlos Garnacho, Antoine Jacoutot, Iain Lane, Robert Mader,
 | 
			
		||||
  Emilio Pozuelo Monfort, Florian Müllner, Georges Basile Stavracas Neto,
 | 
			
		||||
  Pekka Paalanen, Marco Trevisan (Treviño), Josh Triplett, Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fabio Tomat [fur], Balázs Úr [hu], Daniel Mustieles [es], Kukuh Syafaat [id],
 | 
			
		||||
  Jordi Mas [ca], Piotr Drąg [pl]
 | 
			
		||||
 | 
			
		||||
3.31.4
 | 
			
		||||
======
 | 
			
		||||
* keybindings: Limit corner move to current monitor [Jānis; #320]
 | 
			
		||||
* xdg-output: Report rotated physical dimensions [Olivier; #369]
 | 
			
		||||
* Add continuous integration pipeline [Jonas; #193]
 | 
			
		||||
* Improve performance on secondary GPUs [Pekka; #323, !313]
 | 
			
		||||
* Use the actual hardware refresh rate [Daniel; #781296]
 | 
			
		||||
* Remove hide-titlebar-when-maximized support [Florian; !221]
 | 
			
		||||
* wayland: Implement buffer transforms [Robert; !322]
 | 
			
		||||
* Remove ability to externally set sync-to-vblank [Georges; !191]
 | 
			
		||||
* Turn off touchscreens together with DPMS [Carlos; gnome-settings-daemon#29]
 | 
			
		||||
* Mipmap the wallpaper when shrinking [Daniel; gnome-shell#254]
 | 
			
		||||
* Implement RecordWindow method for screen-casts [Olivier; !306]
 | 
			
		||||
* Fix EGLStream texture downloading [Jonas; !362]
 | 
			
		||||
* Split out display-server-specific code from MetaWindowActor [Georges; !368]
 | 
			
		||||
* Improve render performance on some KMS devices with software GL [Jonas; #106]
 | 
			
		||||
* Fix damage area of transformed surfaces [Robert; !366]
 | 
			
		||||
* Remove autotools support [George]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas, Alan, Olivier, Carlos, Javier, Peter,
 | 
			
		||||
  Daniel, Robert, Florian; !309, #790207, #272, #393, #276, #404, #104, !343,
 | 
			
		||||
  #765011, #786663, #342, !356, #414, #782344, #781034, #423, !374, !382, !383]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Nikita Churaev, Alan Coopersmith, Jānis Džeriņš, Olivier Fourdan,
 | 
			
		||||
  Carlos Garnacho, Niels De Graef, Peter Hutterer, Javier Jardón,
 | 
			
		||||
  Abderrahim Kitouni, Andre Klapper, Ting-Wei Lan, Robert Mader,
 | 
			
		||||
  Emilio Pozuelo Monfort, Florian Müllner, Georges Basile Stavracas Neto,
 | 
			
		||||
  Pekka Paalanen, Daniel Stone, Marco Trevisan (Treviño), Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
3.31.2
 | 
			
		||||
======
 | 
			
		||||
* Fix handling of non-UTF8 encodings [Florian; !227]
 | 
			
		||||
* Fix memory leaks introduced in 3.30.1 [Jonas; #653]
 | 
			
		||||
* Fix regression when overriding workspace layout [Ron; #270]
 | 
			
		||||
* Fix crash when restarting window manager [Andrea; gnome-shell#595]
 | 
			
		||||
* Add meson build support [Jonas; !167]
 | 
			
		||||
* Freeze clock when headless [Jonas; !170]
 | 
			
		||||
* Fix crash on monitor hotplug [Olivier; #189]
 | 
			
		||||
* Misc. bug fixes [Jonas; #353, !132, #382]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Niels De Graef,
 | 
			
		||||
  Alexander Mikhaylenko, Florian Müllner, Akira Nakajima,
 | 
			
		||||
  Georges Basile Stavracas Neto, Pekka Paalanen, Peter Uithoven,
 | 
			
		||||
  Daniel van Vugt, Ron Yorston
 | 
			
		||||
 | 
			
		||||
3.30.1
 | 
			
		||||
======
 | 
			
		||||
* Improve trackball detection [Tony; #258]
 | 
			
		||||
* Fix clipping of scaled surfaces [Jonas; #300]
 | 
			
		||||
* Improve tracking of monitor switch configuration [Daniel; !213]
 | 
			
		||||
* Fix parent-relative positioning of constrained windows [Jonas; #332]
 | 
			
		||||
* Add clutter_input_method_forward_key() method [Carlos; gnome-shell#531]
 | 
			
		||||
* Various crash fixes [Olivier, Jonas; #194, #336]
 | 
			
		||||
* Misc. bug fixes [Carlos, Florian, Olivier, Jonas; gnome-shell#540, #294,
 | 
			
		||||
  #221, !229, #30, #331]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Daniel Drake, Olivier Fourdan, Carlos Garnacho, Peter Hutterer,
 | 
			
		||||
  Ting-Wei Lan, Florian Müllner, Tony Novak, Pekka Paalanen, Sam Spilsbury
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Yuras Shumovich [be], Марко Костић [sr], Marek Cernocky [cs]
 | 
			
		||||
 | 
			
		||||
3.30.0
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fran Dieguez [gl], Balázs Meskó [hu], Rūdolfs Mazurs [lv],
 | 
			
		||||
  Trần Ngọc Quân [vi], Ask Hjorth Larsen [da], gogo [hr]
 | 
			
		||||
 | 
			
		||||
3.29.92
 | 
			
		||||
=======
 | 
			
		||||
* Avoid crash when a cursor is not found [Sebastian; #254]
 | 
			
		||||
* Fix screen rotation regression [Jonas; #216]
 | 
			
		||||
* Handle requests to unmanaged windows gracefully [Jonas; #240]
 | 
			
		||||
* Move popups together with their parent [Jonas; #274]
 | 
			
		||||
* Fix non-lowercase letters on virtual key devices [Carlos; gnome-shell#135]
 | 
			
		||||
* Misc. bug fixes [Iain, Jonas; #223, #192, #279]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Carlos Garnacho, Sebastian Keller, Iain Lane, Robert Mader,
 | 
			
		||||
  Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Gwan-gyeong Mun [ko], Kukuh Syafaat [id], Milo Casagrande [it],
 | 
			
		||||
  Anders Jonsson [sv], Rafael Fontenelle [pt_BR], Marek Cernocky [cs]
 | 
			
		||||
 | 
			
		||||
3.29.91
 | 
			
		||||
=======
 | 
			
		||||
* Various crash fixes [Olivier, Iain; #255, #223]
 | 
			
		||||
* Fix lock up with some DRI drivers [Alex; #127]
 | 
			
		||||
* Send correct button codes from virtual evdev devices [Jonas; !190]
 | 
			
		||||
* Improve grab-device clock updates on X11 [Jeff; !174]
 | 
			
		||||
* Fix popups closing immediately on key down [Jonas; !180]
 | 
			
		||||
* Prevent clients from modifying the shared keymap [Jonas; #784206]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Andrea Azzarone, Piotr Drąg, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Jan Grulich, Iain Lane, Alex Villacís Lasso, Jeff Smith, Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Matej Urbančič [sl], Mario Blättermann [de], Piotr Drąg [pl],
 | 
			
		||||
  Aurimas Černius [lt], Yi-Jyun Pan [zh_TW], Emin Tufan Çetin [tr],
 | 
			
		||||
  Fabio Tomat [fur], Bruce Cowan [en_GB]
 | 
			
		||||
 | 
			
		||||
3.29.90
 | 
			
		||||
=======
 | 
			
		||||
* Various crash fixes [Olivier, Jonas, Florian; #189, #70, #194, #15, #130]
 | 
			
		||||
* Don't expose resolutions that are below the minimum [Andrea; #793223]
 | 
			
		||||
* Remove support for preference overrides [Florian; #786496]
 | 
			
		||||
* Misc. bug fixes and cleanups [Daniel, Jonas, Florian; #131, #245, !176]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Florian Müllner, Kevin Tamool,
 | 
			
		||||
  Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Daniel Mustieles [es], Claude Paroz [fr]
 | 
			
		||||
 | 
			
		||||
3.29.4
 | 
			
		||||
======
 | 
			
		||||
* Fix crash with parent-less modal dialogs [Olivier; #174]
 | 
			
		||||
* Preserve paint volumes where possible to optimize CPU usage [Carlos; #782344]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Iain Lane, Bastien Nocera
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Daniel Șerbănescu [ro]
 | 
			
		||||
 | 
			
		||||
3.29.3
 | 
			
		||||
======
 | 
			
		||||
* Fix Korean Hangul support on wayland [Changwoo; #152]
 | 
			
		||||
* Improve support for proprietary Nvidia driver [Jonas; #790316]
 | 
			
		||||
* Only upload HW cursor sprite to the GPU that will display them [Jonas; #77]
 | 
			
		||||
* Improve EGLstream support [Miguel; #2, #782575]
 | 
			
		||||
* Remove MetaScreen to prepare for non-mandatary X11 dependency
 | 
			
		||||
  [Armin, Jonas; #759538]
 | 
			
		||||
* Misc. bug fixes [Olivier, Jonas, Sam; #160, !130, #786929, #788834]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Armin Krezović, Corentin Noël,
 | 
			
		||||
  Changwoo Ryu, Sam Spilsbury, Daniel Stone, Marco Trevisan (Treviño),
 | 
			
		||||
  Miguel A. Vico, Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Yi-Jyun Pan [zh_TW], Jordi Mas [ca], Daniel Șerbănescu [ro], Fabio Tomat [fur]
 | 
			
		||||
 | 
			
		||||
3.29.2
 | 
			
		||||
======
 | 
			
		||||
* Fix size change animations on wayland [Georges; #780292]
 | 
			
		||||
* Handle touch events on server-side titlebars [Carlos; #770185]
 | 
			
		||||
* Misc. bug fixes [Florian, Olivier, Jonas, Georges; #134, #124, !96, #138,
 | 
			
		||||
  !102, #781471, #150]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Florian Müllner,
 | 
			
		||||
  Georges Basile Stavracas Neto, Marco Trevisan (Treviño), Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Daniel Șerbănescu [ro], Marcos Lans [gl], Dz Chen [zh_CN]
 | 
			
		||||
 | 
			
		||||
3.29.1
 | 
			
		||||
======
 | 
			
		||||
* Fix various input-method regressions [Carlos, Olivier; #65, #74, #66, #112]
 | 
			
		||||
* Fix wayland build on FreeBSD [Ting-Wei; #792280, #792717]
 | 
			
		||||
* Fix swapped colors in screenshots (again) [Carlos; #72]
 | 
			
		||||
* Allow building with elogind [Rasmus; !46]
 | 
			
		||||
* Consider display rotation for cursor [Olivier; #85]
 | 
			
		||||
* Fall back to non-modifier GBM surfaces [Daniel; #84]
 | 
			
		||||
* Take inhibitors into account for monitoring idle [Bastien; #705942]
 | 
			
		||||
* Misc. bug fixes [handsome-feng, Olivier, Mario, Jonas; !45, #83, #104,
 | 
			
		||||
  gnome-shell#157, #130, #21]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, handsome-feng, Yussuf Khalil,
 | 
			
		||||
  Ting-Wei Lan, Aleksandr Mezin, Alberts Muktupāvels,
 | 
			
		||||
  Georges Basile Stavracas Neto, Bastien Nocera, Benjamin Otte,
 | 
			
		||||
  Mario Sanchez Prada, Daniel Stone, Ray Strode, Rasmus Thomsen,
 | 
			
		||||
  Marco Trevisan (Treviño), Daniel van Vugt
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Emin Tufan Çetin [tr], Dušan Kazik [sk], Matej Urbančič [sl]
 | 
			
		||||
 | 
			
		||||
3.28.0
 | 
			
		||||
======
 | 
			
		||||
* Fix xdg-foreign regression [Carlos; #63]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Carlos Garnacho, Georges Basile Stavracas Neto
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Marek Cernocky [cs], Ask Hjorth Larsen [da], Chao-Hsiung Liao [zh_TW],
 | 
			
		||||
  Anders Jonsson [sv], Mart Raudsepp [et]
 | 
			
		||||
 | 
			
		||||
3.27.92
 | 
			
		||||
=======
 | 
			
		||||
* Fix use of modifiers with multi-GPU systems [Louis-Francis; #18]
 | 
			
		||||
* Add xdg-shell stable support [Jonas; #791938]
 | 
			
		||||
* Fix scaling of icons in titlebar buttons [Egmont; #23]
 | 
			
		||||
* Implement missing wacom functionality on X11 [Carlos; #48]
 | 
			
		||||
* Force 8-bit RGB config [Jonas; #2]
 | 
			
		||||
* Misc. bug fixes [Jonas, Olivier, Robert; #6, #27, #792203]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Egmont Koblinger, Robert Mader,
 | 
			
		||||
  Bastien Nocera, Louis-Francis Ratté-Boulianne
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Daniel Mustieles [es], Марко Костић [sr], Милош Поповић [sr@latin],
 | 
			
		||||
  Fran Dieguez [gl], Balázs Úr [hu], Gwan-gyeong Mun [ko], Rūdolfs Mazurs [lv],
 | 
			
		||||
  Milo Casagrande [it], Mario Blättermann [de], GNOME Translation Robot [gd,
 | 
			
		||||
  nl], Claude Paroz [fr], Aurimas Černius [lt]
 | 
			
		||||
 | 
			
		||||
3.27.91
 | 
			
		||||
=======
 | 
			
		||||
* Fix handling of trackball settings on wayland [Carlos; #787804]
 | 
			
		||||
* Apply font settings on wayland [Daniel; #645433]
 | 
			
		||||
* Fix keybindings getting mixed up with some layouts [Jonas; #789300]
 | 
			
		||||
* Fix bluetooth mouse cursor disappearing after idle [Benoit; #761067]
 | 
			
		||||
* Support platforms that export EGL_KHR_platform_gbm [memeka; #780668]
 | 
			
		||||
* Add keyboard accessibility support on wayland [Olivier; #788564]
 | 
			
		||||
* Fix missing cursor when using screen magnifier [Carlos; #754806]
 | 
			
		||||
* Fix external monitor shutting off on wayland when lid closes [Jonas; #788915]
 | 
			
		||||
* Add xdg-output support [Olivier; #787363]
 | 
			
		||||
* Add Xwayland grab keyboard support [Olivier; #783342]
 | 
			
		||||
* Allow shortcut inhibition of the super key [Olivier; #790627]
 | 
			
		||||
* Take "panel orientation" drm_connector property into account [Hans; #782294]
 | 
			
		||||
* Fix focus window ending up below other windows on wayland [Olivier; #780820]
 | 
			
		||||
* Fix maximized windows restoring to a tiny size on wayland [Olivier; #783901]
 | 
			
		||||
* Fix tap-and-drag setting on X11 [Jonas; #775755]
 | 
			
		||||
* Fix handling of single-touch devices on wayland [Carlos; #792005]
 | 
			
		||||
* Support tiled/compressed buffers [Daniel; #785779]
 | 
			
		||||
* Port screencast support to pipewire 0.1.8 [Jonas; #792854]
 | 
			
		||||
* Add support for third stylus button on newer tablets [Jason; #790033]
 | 
			
		||||
* Fix background corruption regression on nvidia [Jonas; #739178]
 | 
			
		||||
* Misc. bug fixes [Jonas, Rui, Michael, Marco, Carlos, Olivier, Philip, Piotr,
 | 
			
		||||
  Ting-Wei, Daniel, Jeremy, Hans, Florian, Ray, Jeff, George, Gwan-gyeong;
 | 
			
		||||
  #789153, #788493, #784314, #789227, #789223, #789277, #782344, #789552,
 | 
			
		||||
  #789553, #788695, #789984, #788764, #789386, #784545, #790336, #790358,
 | 
			
		||||
  #791022, #791006, #789070, #772218, #791383, #791809, #776220, #791916,
 | 
			
		||||
  #792281, #790309, #791371, #792527, #792599, #788834, #792765, #792062,
 | 
			
		||||
  #645460, #792853, !2, #792818, #8, #12, #789501, #10, #789961, #13, !15, #1,
 | 
			
		||||
  #26, #28, #35, #36, #38]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Jeremy Bicha, Michael Catanzaro, Piotr Drąg, Olivier Fourdan,
 | 
			
		||||
  Carlos Garnacho, Jason Gerecke, Hans de Goede, Benoit Gschwind,
 | 
			
		||||
  Peter Hutterer, George Kiagiadakis, Ting-Wei Lan, Rui Matos, memeka,
 | 
			
		||||
  Florian Müllner, Gwan-gyeong Mun, Jeremy Nickurak, Marc-Antoine Perennou,
 | 
			
		||||
  Jeff Smith, Daniel Stone, Ray Strode, Marco Trevisan (Treviño),
 | 
			
		||||
  Daniel van Vugt, Philip Withnall
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Khaled Hosny [ar], Kjartan Maraas [nb], Piotr Drąg [pl],
 | 
			
		||||
  Rafael Fontenelle [pt_BR], Christian Kirbach [de], Anders Jonsson [sv],
 | 
			
		||||
  Charles Monzat [fr], Marek Cernocky [cs], Muhammet Kara [tr],
 | 
			
		||||
  Milo Casagrande [it], Pawan Chitrakar [ne], Yosef Or Boczko [he],
 | 
			
		||||
  Kukuh Syafaat [id], Daniel Mustieles [es], Fabio Tomat [fur],
 | 
			
		||||
  Kristjan SCHMIDT [eo], Balázs Úr [hu], Andika Triwidada [id],
 | 
			
		||||
  Fran Dieguez [gl], gogo [hr]
 | 
			
		||||
 | 
			
		||||
3.27.1
 | 
			
		||||
======
 | 
			
		||||
* Work with clients that require older linux_dmabuf protocol [Daniel; #788558]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								README.md
									
									
									
									
									
								
							@@ -1,45 +0,0 @@
 | 
			
		||||
# Mutter
 | 
			
		||||
 | 
			
		||||
Mutter is a Wayland display server and X11 window manager and compositor library.
 | 
			
		||||
 | 
			
		||||
When used as a Wayland display server, it runs on top of KMS and libinput. It
 | 
			
		||||
implements the compositor side of the Wayland core protocol as well as various
 | 
			
		||||
protocol extensions. It also has functionality related to running X11
 | 
			
		||||
applications using Xwayland.
 | 
			
		||||
 | 
			
		||||
When used on top of Xorg it acts as a X11 window manager and compositing manager.
 | 
			
		||||
 | 
			
		||||
It contains functionality related to, among other things, window management,
 | 
			
		||||
window compositing, focus tracking, workspace management, keybindings and
 | 
			
		||||
monitor configuration.
 | 
			
		||||
 | 
			
		||||
Internally it uses a fork of Cogl, a hardware acceleration abstraction library
 | 
			
		||||
used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a
 | 
			
		||||
scene graph and user interface toolkit.
 | 
			
		||||
 | 
			
		||||
Mutter is used by, for example, GNOME Shell, the GNOME core user interface, and
 | 
			
		||||
by  Gala, elementary OS's window manager. It can also be run standalone, using
 | 
			
		||||
the  command "mutter", but just running plain mutter is only intended for
 | 
			
		||||
debugging purposes.
 | 
			
		||||
 | 
			
		||||
## Contributing
 | 
			
		||||
 | 
			
		||||
To contribute, open merge requests at https://gitlab.gnome.org/GNOME/mutter.
 | 
			
		||||
 | 
			
		||||
The coding style used is primarily the GNU flavor of the [GNOME coding
 | 
			
		||||
style](https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en)
 | 
			
		||||
with some minor additions such as preferring `stdint.h` types over GLib
 | 
			
		||||
fundamental types, and a soft 80 character line limit. However, in general,
 | 
			
		||||
look at the file you're editing for inspiration.
 | 
			
		||||
 | 
			
		||||
Commit messages should follow the [GNOME commit message
 | 
			
		||||
guidelines](https://wiki.gnome.org/Git/CommitMessages). We require an URL
 | 
			
		||||
to either an issue or a merge request in each commit.
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
Mutter is distributed under the terms of the GNU General Public License,
 | 
			
		||||
version 2 or later. See the [COPYING][license] file for detalis.
 | 
			
		||||
 | 
			
		||||
[bug-tracker]: https://gitlab.gnome.org/GNOME/mutter/issues
 | 
			
		||||
[license]: COPYING
 | 
			
		||||
							
								
								
									
										28
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Run this to generate all the initial makefiles, etc.
 | 
			
		||||
 | 
			
		||||
srcdir=`dirname $0`
 | 
			
		||||
test -z "$srcdir" && srcdir=.
 | 
			
		||||
 | 
			
		||||
REQUIRED_AUTOMAKE_VERSION=1.11
 | 
			
		||||
 | 
			
		||||
olddir="$(pwd)"
 | 
			
		||||
 | 
			
		||||
cd "${srcdir}"
 | 
			
		||||
 | 
			
		||||
(test -f configure.ac \
 | 
			
		||||
  && test -d src) || {
 | 
			
		||||
    echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
 | 
			
		||||
    echo " top-level mutter directory"
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
aclocal --install || exit 1
 | 
			
		||||
intltoolize --force --copy --automake || exit 1
 | 
			
		||||
autoreconf --verbose --force --install || exit 1
 | 
			
		||||
 | 
			
		||||
cd "${olddir}"
 | 
			
		||||
 | 
			
		||||
if [ "$NOCONFIGURE" = "" ]; then
 | 
			
		||||
    "${srcdir}/configure" "$@" || exit 1
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										1
									
								
								clutter/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								clutter/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -23,6 +23,7 @@ clutter-build-config.h.in
 | 
			
		||||
clutter-config.h
 | 
			
		||||
clutter-enum-types.[ch]
 | 
			
		||||
clutter-marshal.[ch]
 | 
			
		||||
clutter-version.h
 | 
			
		||||
gcov-report.txt
 | 
			
		||||
clutter-json.h
 | 
			
		||||
clutter-lcov.info
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								clutter/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								clutter/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
NULL =
 | 
			
		||||
 | 
			
		||||
SUBDIRS = build clutter tests
 | 
			
		||||
 | 
			
		||||
if BUILD_EXAMPLES
 | 
			
		||||
SUBDIRS += examples
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
DIST_SUBDIRS = clutter tests examples build
 | 
			
		||||
 | 
			
		||||
# XXX - this is a massive hack to make autoreconf honour the ACLOCAL_FLAGS
 | 
			
		||||
# that jhbuild sets while still retaining build/autotools as the authoritative
 | 
			
		||||
# source for m4 macros
 | 
			
		||||
ACLOCAL_AMFLAGS = -I build/autotools ${ACLOCAL_FLAGS}
 | 
			
		||||
 | 
			
		||||
CLEANFILES = $(pcfiles)
 | 
			
		||||
 | 
			
		||||
DISTCLEANFILES =
 | 
			
		||||
 | 
			
		||||
DISTCHECK_CONFIGURE_FLAGS = --enable-maintainer-flags
 | 
			
		||||
 | 
			
		||||
# proxy rules for tests
 | 
			
		||||
test-report full-report:
 | 
			
		||||
	$(MAKE) -C tests/conform $(@)
 | 
			
		||||
 | 
			
		||||
perf-report:
 | 
			
		||||
	$(MAKE) -C tests/performance $(@)
 | 
			
		||||
 | 
			
		||||
if ENABLE_GCOV
 | 
			
		||||
# use recursive makes in order to ignore errors during check/perf
 | 
			
		||||
lcov:
 | 
			
		||||
	-$(MAKE) $(AM_MAKEFLAGS) -C clutter check
 | 
			
		||||
	-$(MAKE) $(AM_MAKEFLAGS) -C tests/conform test
 | 
			
		||||
	$(MAKE) $(AM_MAKEFLAGS) genlcov
 | 
			
		||||
 | 
			
		||||
# we have to massage the lcov.info file slightly to hide the effect of libtool
 | 
			
		||||
# placing the objects files in the .libs/ directory separate from the *.c
 | 
			
		||||
genlcov:
 | 
			
		||||
	$(LTP) --directory $(top_builddir) --capture --output-file clutter-lcov.info --test-name CLUTTER_TEST --no-checksum
 | 
			
		||||
	$(SED) -e 's#.libs/##' < clutter-lcov.info > clutter-lcov.info.tmp
 | 
			
		||||
	LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory clutter-lcov --title "Clutter Code Coverage" --show-details clutter-lcov.info.tmp
 | 
			
		||||
	rm -f clutter-lcov.info.tmp
 | 
			
		||||
 | 
			
		||||
lcov-clean:
 | 
			
		||||
	-$(LTP) --directory $(top_builddir) -z
 | 
			
		||||
	-$(RM) -rf clutter-lcov.info clutter-lcov
 | 
			
		||||
else
 | 
			
		||||
lcov genlcov lcov-clean:
 | 
			
		||||
	@echo You need to configure Clutter with support for gcov enabled.
 | 
			
		||||
	@echo e.g., ./configure --enable-gcov
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PHONY: test-report full-report perf-report lcov genlcov lcov-clean
 | 
			
		||||
							
								
								
									
										1
									
								
								clutter/build/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								clutter/build/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
SUBDIRS = autotools
 | 
			
		||||
							
								
								
									
										8
									
								
								clutter/build/autotools/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								clutter/build/autotools/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
gtk-doc.m4
 | 
			
		||||
libtool.m4
 | 
			
		||||
ltoptions.m4
 | 
			
		||||
ltsugar.m4
 | 
			
		||||
ltversion.m4
 | 
			
		||||
lt~obsolete.m4
 | 
			
		||||
shave
 | 
			
		||||
shave-libtool
 | 
			
		||||
							
								
								
									
										10
									
								
								clutter/build/autotools/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								clutter/build/autotools/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
NULL =
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	introspection.m4	\
 | 
			
		||||
	as-compiler-flag.m4	\
 | 
			
		||||
	glibtests.m4		\
 | 
			
		||||
	glib-tap.mk		\
 | 
			
		||||
	tap-driver.sh		\
 | 
			
		||||
	tap-test		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
							
								
								
									
										62
									
								
								clutter/build/autotools/as-compiler-flag.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								clutter/build/autotools/as-compiler-flag.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
dnl as-compiler-flag.m4 0.1.0
 | 
			
		||||
 | 
			
		||||
dnl autostars m4 macro for detection of compiler flags
 | 
			
		||||
 | 
			
		||||
dnl David Schleef <ds@schleef.org>
 | 
			
		||||
 | 
			
		||||
dnl $Id: as-compiler-flag.m4,v 1.1 2005/12/15 23:35:19 ds Exp $
 | 
			
		||||
 | 
			
		||||
dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
 | 
			
		||||
dnl Tries to compile with the given CFLAGS.
 | 
			
		||||
dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
 | 
			
		||||
dnl and ACTION-IF-NOT-ACCEPTED otherwise.
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AS_COMPILER_FLAG],
 | 
			
		||||
[
 | 
			
		||||
  AC_MSG_CHECKING([to see if compiler understands $1])
 | 
			
		||||
 | 
			
		||||
  save_CFLAGS="$CFLAGS"
 | 
			
		||||
  CFLAGS="$CFLAGS $1"
 | 
			
		||||
 | 
			
		||||
  AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
 | 
			
		||||
  CFLAGS="$save_CFLAGS"
 | 
			
		||||
 | 
			
		||||
  if test "X$flag_ok" = Xyes ; then
 | 
			
		||||
    m4_ifvaln([$2],[$2])
 | 
			
		||||
    true
 | 
			
		||||
  else
 | 
			
		||||
    m4_ifvaln([$3],[$3])
 | 
			
		||||
    true
 | 
			
		||||
  fi
 | 
			
		||||
  AC_MSG_RESULT([$flag_ok])
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
dnl AS_COMPILER_FLAGS(VAR, FLAGS)
 | 
			
		||||
dnl Tries to compile with the given CFLAGS.
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AS_COMPILER_FLAGS],
 | 
			
		||||
[
 | 
			
		||||
  list=$2
 | 
			
		||||
  flags_supported=""
 | 
			
		||||
  flags_unsupported=""
 | 
			
		||||
  AC_MSG_CHECKING([for supported compiler flags])
 | 
			
		||||
  for each in $list
 | 
			
		||||
  do
 | 
			
		||||
    save_CFLAGS="$CFLAGS"
 | 
			
		||||
    CFLAGS="$CFLAGS $each"
 | 
			
		||||
    AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
 | 
			
		||||
    CFLAGS="$save_CFLAGS"
 | 
			
		||||
 | 
			
		||||
    if test "X$flag_ok" = Xyes ; then
 | 
			
		||||
      flags_supported="$flags_supported $each"
 | 
			
		||||
    else
 | 
			
		||||
      flags_unsupported="$flags_unsupported $each"
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  AC_MSG_RESULT([$flags_supported])
 | 
			
		||||
  if test "X$flags_unsupported" != X ; then
 | 
			
		||||
    AC_MSG_WARN([unsupported compiler flags: $flags_unsupported])
 | 
			
		||||
  fi
 | 
			
		||||
  $1="$$1 $flags_supported"
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										134
									
								
								clutter/build/autotools/glib-tap.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								clutter/build/autotools/glib-tap.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
			
		||||
# GLIB - Library of useful C routines
 | 
			
		||||
 | 
			
		||||
TESTS_ENVIRONMENT= \
 | 
			
		||||
	G_TEST_SRCDIR="$(abs_srcdir)" 		\
 | 
			
		||||
	G_TEST_BUILDDIR="$(abs_builddir)" 	\
 | 
			
		||||
	G_DEBUG=gc-friendly 			\
 | 
			
		||||
	MALLOC_CHECK_=2 			\
 | 
			
		||||
	MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256))
 | 
			
		||||
LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/build/autotools/tap-driver.sh
 | 
			
		||||
LOG_COMPILER = $(top_srcdir)/build/autotools/tap-test
 | 
			
		||||
 | 
			
		||||
NULL =
 | 
			
		||||
 | 
			
		||||
# initialize variables for unconditional += appending
 | 
			
		||||
BUILT_SOURCES =
 | 
			
		||||
BUILT_EXTRA_DIST =
 | 
			
		||||
CLEANFILES = *.log *.trs
 | 
			
		||||
DISTCLEANFILES =
 | 
			
		||||
MAINTAINERCLEANFILES =
 | 
			
		||||
EXTRA_DIST =
 | 
			
		||||
TESTS =
 | 
			
		||||
 | 
			
		||||
installed_test_LTLIBRARIES =
 | 
			
		||||
installed_test_PROGRAMS =
 | 
			
		||||
installed_test_SCRIPTS =
 | 
			
		||||
nobase_installed_test_DATA =
 | 
			
		||||
 | 
			
		||||
noinst_LTLIBRARIES =
 | 
			
		||||
noinst_PROGRAMS =
 | 
			
		||||
noinst_SCRIPTS =
 | 
			
		||||
noinst_DATA =
 | 
			
		||||
 | 
			
		||||
check_LTLIBRARIES =
 | 
			
		||||
check_PROGRAMS =
 | 
			
		||||
check_SCRIPTS =
 | 
			
		||||
check_DATA =
 | 
			
		||||
 | 
			
		||||
# We support a fairly large range of possible variables.  It is expected that all types of files in a test suite
 | 
			
		||||
# will belong in exactly one of the following variables.
 | 
			
		||||
#
 | 
			
		||||
# First, we support the usual automake suffixes, but in lowercase, with the customary meaning:
 | 
			
		||||
#
 | 
			
		||||
#   test_programs, test_scripts, test_data, test_ltlibraries
 | 
			
		||||
#
 | 
			
		||||
# The above are used to list files that are involved in both uninstalled and installed testing.  The
 | 
			
		||||
# test_programs and test_scripts are taken to be actual testcases and will be run as part of the test suite.
 | 
			
		||||
# Note that _data is always used with the nobase_ automake variable name to ensure that installed test data is
 | 
			
		||||
# installed in the same way as it appears in the package layout.
 | 
			
		||||
#
 | 
			
		||||
# In order to mark a particular file as being only for one type of testing, use 'installed' or 'uninstalled',
 | 
			
		||||
# like so:
 | 
			
		||||
#
 | 
			
		||||
#   installed_test_programs, uninstalled_test_programs
 | 
			
		||||
#   installed_test_scripts, uninstalled_test_scripts
 | 
			
		||||
#   installed_test_data, uninstalled_test_data
 | 
			
		||||
#   installed_test_ltlibraries, uninstalled_test_ltlibraries
 | 
			
		||||
#
 | 
			
		||||
# Additionally, we support 'extra' infixes for programs and scripts.  This is used for support programs/scripts
 | 
			
		||||
# that should not themselves be run as testcases (but exist to be used from other testcases):
 | 
			
		||||
#
 | 
			
		||||
#   test_extra_programs, installed_test_extra_programs, uninstalled_test_extra_programs
 | 
			
		||||
#   test_extra_scripts, installed_test_extra_scripts, uninstalled_test_extra_scripts
 | 
			
		||||
#
 | 
			
		||||
# Additionally, for _scripts and _data, we support the customary dist_ prefix so that the named script or data
 | 
			
		||||
# file automatically end up in the tarball.
 | 
			
		||||
#
 | 
			
		||||
#   dist_test_scripts, dist_test_data, dist_test_extra_scripts
 | 
			
		||||
#   dist_installed_test_scripts, dist_installed_test_data, dist_installed_test_extra_scripts
 | 
			
		||||
#   dist_uninstalled_test_scripts, dist_uninstalled_test_data, dist_uninstalled_test_extra_scripts
 | 
			
		||||
#
 | 
			
		||||
# Note that no file is automatically disted unless it appears in one of the dist_ variables.  This follows the
 | 
			
		||||
# standard automake convention of not disting programs scripts or data by default.
 | 
			
		||||
#
 | 
			
		||||
# test_programs, test_scripts, uninstalled_test_programs and uninstalled_test_scripts (as well as their disted
 | 
			
		||||
# variants) will be run as part of the in-tree 'make check'.  These are all assumed to be runnable under
 | 
			
		||||
# gtester.  That's a bit strange for scripts, but it's possible.
 | 
			
		||||
 | 
			
		||||
TESTS += $(test_programs) $(test_scripts) $(uninstalled_test_programs) $(uninstalled_test_scripts) \
 | 
			
		||||
         $(dist_test_scripts) $(dist_uninstalled_test_scripts)
 | 
			
		||||
 | 
			
		||||
# Note: build even the installed-only targets during 'make check' to ensure that they still work.
 | 
			
		||||
# We need to do a bit of trickery here and manage disting via EXTRA_DIST instead of using dist_ prefixes to
 | 
			
		||||
# prevent automake from mistreating gmake functions like $(wildcard ...) and $(addprefix ...) as if they were
 | 
			
		||||
# filenames, including removing duplicate instances of the opening part before the space, eg. '$(addprefix'.
 | 
			
		||||
all_test_programs     = $(test_programs) $(uninstalled_test_programs) $(installed_test_programs) \
 | 
			
		||||
                        $(test_extra_programs) $(uninstalled_test_extra_programs) $(installed_test_extra_programs)
 | 
			
		||||
all_test_scripts      = $(test_scripts) $(uninstalled_test_scripts) $(installed_test_scripts) \
 | 
			
		||||
                        $(test_extra_scripts) $(uninstalled_test_extra_scripts) $(installed_test_extra_scripts)
 | 
			
		||||
all_dist_test_scripts = $(dist_test_scripts) $(dist_uninstalled_test_scripts) $(dist_installed_test_scripts) \
 | 
			
		||||
                        $(dist_test_extra_scripts) $(dist_uninstalled_test_extra_scripts) $(dist_installed_test_extra_scripts)
 | 
			
		||||
all_test_scripts     += $(all_dist_test_scripts)
 | 
			
		||||
EXTRA_DIST           += $(all_dist_test_scripts)
 | 
			
		||||
all_test_data         = $(test_data) $(uninstalled_test_data) $(installed_test_data)
 | 
			
		||||
all_dist_test_data    = $(dist_test_data) $(dist_uninstalled_test_data) $(dist_installed_test_data)
 | 
			
		||||
all_test_data        += $(all_dist_test_data)
 | 
			
		||||
EXTRA_DIST           += $(all_dist_test_data)
 | 
			
		||||
all_test_ltlibs       = $(test_ltlibraries) $(uninstalled_test_ltlibraries) $(installed_test_ltlibraries)
 | 
			
		||||
 | 
			
		||||
if ENABLE_ALWAYS_BUILD_TESTS
 | 
			
		||||
noinst_LTLIBRARIES += $(all_test_ltlibs)
 | 
			
		||||
noinst_PROGRAMS += $(all_test_programs)
 | 
			
		||||
noinst_SCRIPTS += $(all_test_scripts)
 | 
			
		||||
noinst_DATA += $(all_test_data)
 | 
			
		||||
else
 | 
			
		||||
check_LTLIBRARIES += $(all_test_ltlibs)
 | 
			
		||||
check_PROGRAMS += $(all_test_programs)
 | 
			
		||||
check_SCRIPTS += $(all_test_scripts)
 | 
			
		||||
check_DATA += $(all_test_data)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if ENABLE_INSTALLED_TESTS
 | 
			
		||||
installed_test_PROGRAMS += $(test_programs) $(installed_test_programs) \
 | 
			
		||||
                          $(test_extra_programs) $(installed_test_extra_programs)
 | 
			
		||||
installed_test_SCRIPTS += $(test_scripts) $(installed_test_scripts) \
 | 
			
		||||
                          $(test_extra_scripts) $(test_installed_extra_scripts)
 | 
			
		||||
installed_test_SCRIPTS += $(dist_test_scripts) $(dist_test_extra_scripts) \
 | 
			
		||||
                          $(dist_installed_test_scripts) $(dist_installed_test_extra_scripts)
 | 
			
		||||
nobase_installed_test_DATA += $(test_data) $(installed_test_data)
 | 
			
		||||
nobase_installed_test_DATA += $(dist_test_data) $(dist_installed_test_data)
 | 
			
		||||
installed_test_LTLIBRARIES += $(test_ltlibraries) $(installed_test_ltlibraries)
 | 
			
		||||
installed_testcases = $(test_programs) $(installed_test_programs) \
 | 
			
		||||
                      $(test_scripts) $(installed_test_scripts) \
 | 
			
		||||
                      $(dist_test_scripts) $(dist_installed_test_scripts)
 | 
			
		||||
 | 
			
		||||
installed_test_meta_DATA = $(installed_testcases:=.test)
 | 
			
		||||
 | 
			
		||||
%.test: %$(EXEEXT) Makefile
 | 
			
		||||
	$(AM_V_GEN) (echo '[Test]' > $@.tmp; \
 | 
			
		||||
	echo 'Type=session' >> $@.tmp; \
 | 
			
		||||
	echo 'Exec=env G_ENABLE_DIAGNOSTIC=0 CLUTTER_ENABLE_DIAGNOSTIC=0 $(installed_testdir)/$<' >> $@.tmp; \
 | 
			
		||||
	mv $@.tmp $@)
 | 
			
		||||
 | 
			
		||||
CLEANFILES += $(installed_test_meta_DATA)
 | 
			
		||||
endif
 | 
			
		||||
							
								
								
									
										28
									
								
								clutter/build/autotools/glibtests.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								clutter/build/autotools/glibtests.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
dnl GLIB_TESTS
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([GLIB_TESTS],
 | 
			
		||||
[
 | 
			
		||||
  AC_ARG_ENABLE(installed-tests,
 | 
			
		||||
                AS_HELP_STRING([--enable-installed-tests],
 | 
			
		||||
                               [Enable installation of some test cases]),
 | 
			
		||||
                [case ${enableval} in
 | 
			
		||||
                  yes) ENABLE_INSTALLED_TESTS="1"  ;;
 | 
			
		||||
                  no)  ENABLE_INSTALLED_TESTS="" ;;
 | 
			
		||||
                  *) AC_MSG_ERROR([bad value ${enableval} for --enable-installed-tests]) ;;
 | 
			
		||||
                 esac])
 | 
			
		||||
  AM_CONDITIONAL([ENABLE_INSTALLED_TESTS], test "$ENABLE_INSTALLED_TESTS" = "1")
 | 
			
		||||
  AC_ARG_ENABLE(always-build-tests,
 | 
			
		||||
                AS_HELP_STRING([--enable-always-build-tests],
 | 
			
		||||
                               [Enable always building tests during 'make all']),
 | 
			
		||||
                [case ${enableval} in
 | 
			
		||||
                  yes) ENABLE_ALWAYS_BUILD_TESTS="1"  ;;
 | 
			
		||||
                  no)  ENABLE_ALWAYS_BUILD_TESTS="" ;;
 | 
			
		||||
                  *) AC_MSG_ERROR([bad value ${enableval} for --enable-always-build-tests]) ;;
 | 
			
		||||
                 esac])
 | 
			
		||||
  AM_CONDITIONAL([ENABLE_ALWAYS_BUILD_TESTS], test "$ENABLE_ALWAYS_BUILD_TESTS" = "1")
 | 
			
		||||
  if test "$ENABLE_INSTALLED_TESTS" = "1"; then
 | 
			
		||||
    AC_SUBST(installed_test_metadir, [${datadir}/installed-tests/]AC_PACKAGE_NAME)
 | 
			
		||||
    AC_SUBST(installed_testdir, [${libexecdir}/installed-tests/]AC_PACKAGE_NAME)
 | 
			
		||||
  fi
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										96
									
								
								clutter/build/autotools/introspection.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								clutter/build/autotools/introspection.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
dnl -*- mode: autoconf -*-
 | 
			
		||||
dnl Copyright 2009 Johan Dahlin
 | 
			
		||||
dnl
 | 
			
		||||
dnl This file is free software; the author(s) gives unlimited
 | 
			
		||||
dnl permission to copy and/or distribute it, with or without
 | 
			
		||||
dnl modifications, as long as this notice is preserved.
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
# serial 1
 | 
			
		||||
 | 
			
		||||
m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
 | 
			
		||||
[
 | 
			
		||||
    AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
 | 
			
		||||
    AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
 | 
			
		||||
    AC_BEFORE([LT_INIT],[$0])dnl setup libtool first
 | 
			
		||||
 | 
			
		||||
    dnl enable/disable introspection
 | 
			
		||||
    m4_if([$2], [require],
 | 
			
		||||
    [dnl
 | 
			
		||||
        enable_introspection=yes
 | 
			
		||||
    ],[dnl
 | 
			
		||||
        AC_ARG_ENABLE(introspection,
 | 
			
		||||
                  AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
 | 
			
		||||
                                 [Enable introspection for this build]),, 
 | 
			
		||||
                                 [enable_introspection=auto])
 | 
			
		||||
    ])dnl
 | 
			
		||||
 | 
			
		||||
    AC_MSG_CHECKING([for gobject-introspection])
 | 
			
		||||
 | 
			
		||||
    dnl presence/version checking
 | 
			
		||||
    AS_CASE([$enable_introspection],
 | 
			
		||||
    [no], [dnl
 | 
			
		||||
        found_introspection="no (disabled, use --enable-introspection to enable)"
 | 
			
		||||
    ],dnl
 | 
			
		||||
    [yes],[dnl
 | 
			
		||||
        PKG_CHECK_EXISTS([gobject-introspection-1.0],,
 | 
			
		||||
                         AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
 | 
			
		||||
        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1],
 | 
			
		||||
                         found_introspection=yes,
 | 
			
		||||
                         AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
 | 
			
		||||
    ],dnl
 | 
			
		||||
    [auto],[dnl
 | 
			
		||||
        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
 | 
			
		||||
	dnl Canonicalize enable_introspection
 | 
			
		||||
	enable_introspection=$found_introspection
 | 
			
		||||
    ],dnl
 | 
			
		||||
    [dnl	
 | 
			
		||||
        AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
 | 
			
		||||
    ])dnl
 | 
			
		||||
 | 
			
		||||
    AC_MSG_RESULT([$found_introspection])
 | 
			
		||||
 | 
			
		||||
    INTROSPECTION_SCANNER=
 | 
			
		||||
    INTROSPECTION_COMPILER=
 | 
			
		||||
    INTROSPECTION_GENERATE=
 | 
			
		||||
    INTROSPECTION_GIRDIR=
 | 
			
		||||
    INTROSPECTION_TYPELIBDIR=
 | 
			
		||||
    if test "x$found_introspection" = "xyes"; then
 | 
			
		||||
       INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
 | 
			
		||||
       INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
 | 
			
		||||
       INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
 | 
			
		||||
       INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
 | 
			
		||||
       INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
 | 
			
		||||
       INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
 | 
			
		||||
       INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
 | 
			
		||||
       INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
 | 
			
		||||
    fi
 | 
			
		||||
    AC_SUBST(INTROSPECTION_SCANNER)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_COMPILER)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_GENERATE)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_GIRDIR)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_TYPELIBDIR)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_CFLAGS)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_LIBS)
 | 
			
		||||
    AC_SUBST(INTROSPECTION_MAKEFILE)
 | 
			
		||||
 | 
			
		||||
    AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl Usage:
 | 
			
		||||
dnl   GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version])
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([GOBJECT_INTROSPECTION_CHECK],
 | 
			
		||||
[
 | 
			
		||||
  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1])
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
dnl Usage:
 | 
			
		||||
dnl   GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE],
 | 
			
		||||
[
 | 
			
		||||
  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require])
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										652
									
								
								clutter/build/autotools/tap-driver.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										652
									
								
								clutter/build/autotools/tap-driver.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,652 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
# Copyright (C) 2011-2013 Free Software Foundation, Inc.
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
# any later version.
 | 
			
		||||
#
 | 
			
		||||
# This program is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
# As a special exception to the GNU General Public License, if you
 | 
			
		||||
# distribute this file as part of a program that contains a
 | 
			
		||||
# configuration script generated by Autoconf, you may include it under
 | 
			
		||||
# the same distribution terms that you use for the rest of that program.
 | 
			
		||||
 | 
			
		||||
# This file is maintained in Automake, please report
 | 
			
		||||
# bugs to <bug-automake@gnu.org> or send patches to
 | 
			
		||||
# <automake-patches@gnu.org>.
 | 
			
		||||
 | 
			
		||||
scriptversion=2011-12-27.17; # UTC
 | 
			
		||||
 | 
			
		||||
# Make unconditional expansion of undefined variables an error.  This
 | 
			
		||||
# helps a lot in preventing typo-related bugs.
 | 
			
		||||
set -u
 | 
			
		||||
 | 
			
		||||
me=tap-driver.sh
 | 
			
		||||
 | 
			
		||||
fatal ()
 | 
			
		||||
{
 | 
			
		||||
  echo "$me: fatal: $*" >&2
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
usage_error ()
 | 
			
		||||
{
 | 
			
		||||
  echo "$me: $*" >&2
 | 
			
		||||
  print_usage >&2
 | 
			
		||||
  exit 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_usage ()
 | 
			
		||||
{
 | 
			
		||||
  cat <<END
 | 
			
		||||
Usage:
 | 
			
		||||
  tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH
 | 
			
		||||
                [--expect-failure={yes|no}] [--color-tests={yes|no}]
 | 
			
		||||
                [--enable-hard-errors={yes|no}] [--ignore-exit]
 | 
			
		||||
                [--diagnostic-string=STRING] [--merge|--no-merge]
 | 
			
		||||
                [--comments|--no-comments] [--] TEST-COMMAND
 | 
			
		||||
The \`--test-name', \`--log-file' and \`--trs-file' options are mandatory.
 | 
			
		||||
END
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# TODO: better error handling in option parsing (in particular, ensure
 | 
			
		||||
# TODO: $log_file, $trs_file and $test_name are defined).
 | 
			
		||||
test_name= # Used for reporting.
 | 
			
		||||
log_file=  # Where to save the result and output of the test script.
 | 
			
		||||
trs_file=  # Where to save the metadata of the test run.
 | 
			
		||||
expect_failure=0
 | 
			
		||||
color_tests=0
 | 
			
		||||
merge=0
 | 
			
		||||
ignore_exit=0
 | 
			
		||||
comments=0
 | 
			
		||||
diag_string='#'
 | 
			
		||||
while test $# -gt 0; do
 | 
			
		||||
  case $1 in
 | 
			
		||||
  --help) print_usage; exit $?;;
 | 
			
		||||
  --version) echo "$me $scriptversion"; exit $?;;
 | 
			
		||||
  --test-name) test_name=$2; shift;;
 | 
			
		||||
  --log-file) log_file=$2; shift;;
 | 
			
		||||
  --trs-file) trs_file=$2; shift;;
 | 
			
		||||
  --color-tests) color_tests=$2; shift;;
 | 
			
		||||
  --expect-failure) expect_failure=$2; shift;;
 | 
			
		||||
  --enable-hard-errors) shift;; # No-op.
 | 
			
		||||
  --merge) merge=1;;
 | 
			
		||||
  --no-merge) merge=0;;
 | 
			
		||||
  --ignore-exit) ignore_exit=1;;
 | 
			
		||||
  --comments) comments=1;;
 | 
			
		||||
  --no-comments) comments=0;;
 | 
			
		||||
  --diagnostic-string) diag_string=$2; shift;;
 | 
			
		||||
  --) shift; break;;
 | 
			
		||||
  -*) usage_error "invalid option: '$1'";;
 | 
			
		||||
  esac
 | 
			
		||||
  shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
test $# -gt 0 || usage_error "missing test command"
 | 
			
		||||
 | 
			
		||||
case $expect_failure in
 | 
			
		||||
  yes) expect_failure=1;;
 | 
			
		||||
    *) expect_failure=0;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if test $color_tests = yes; then
 | 
			
		||||
  init_colors='
 | 
			
		||||
    color_map["red"]="[0;31m" # Red.
 | 
			
		||||
    color_map["grn"]="[0;32m" # Green.
 | 
			
		||||
    color_map["lgn"]="[1;32m" # Light green.
 | 
			
		||||
    color_map["blu"]="[1;34m" # Blue.
 | 
			
		||||
    color_map["mgn"]="[0;35m" # Magenta.
 | 
			
		||||
    color_map["std"]="[m"     # No color.
 | 
			
		||||
    color_for_result["ERROR"] = "mgn"
 | 
			
		||||
    color_for_result["PASS"]  = "grn"
 | 
			
		||||
    color_for_result["XPASS"] = "red"
 | 
			
		||||
    color_for_result["FAIL"]  = "red"
 | 
			
		||||
    color_for_result["XFAIL"] = "lgn"
 | 
			
		||||
    color_for_result["SKIP"]  = "blu"'
 | 
			
		||||
else
 | 
			
		||||
  init_colors=''
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# :; is there to work around a bug in bash 3.2 (and earlier) which
 | 
			
		||||
# does not always set '$?' properly on redirection failure.
 | 
			
		||||
# See the Autoconf manual for more details.
 | 
			
		||||
:;{
 | 
			
		||||
  (
 | 
			
		||||
    # Ignore common signals (in this subshell only!), to avoid potential
 | 
			
		||||
    # problems with Korn shells.  Some Korn shells are known to propagate
 | 
			
		||||
    # to themselves signals that have killed a child process they were
 | 
			
		||||
    # waiting for; this is done at least for SIGINT (and usually only for
 | 
			
		||||
    # it, in truth).  Without the `trap' below, such a behaviour could
 | 
			
		||||
    # cause a premature exit in the current subshell, e.g., in case the
 | 
			
		||||
    # test command it runs gets terminated by a SIGINT.  Thus, the awk
 | 
			
		||||
    # script we are piping into would never seen the exit status it
 | 
			
		||||
    # expects on its last input line (which is displayed below by the
 | 
			
		||||
    # last `echo $?' statement), and would thus die reporting an internal
 | 
			
		||||
    # error.
 | 
			
		||||
    # For more information, see the Autoconf manual and the threads:
 | 
			
		||||
    # <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
 | 
			
		||||
    # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
 | 
			
		||||
    trap : 1 3 2 13 15
 | 
			
		||||
    if test $merge -gt 0; then
 | 
			
		||||
      exec 2>&1
 | 
			
		||||
    else
 | 
			
		||||
      exec 2>&3
 | 
			
		||||
    fi
 | 
			
		||||
    "$@"
 | 
			
		||||
    echo $?
 | 
			
		||||
  ) | LC_ALL=C ${AM_TAP_AWK-awk} \
 | 
			
		||||
        -v me="$me" \
 | 
			
		||||
        -v test_script_name="$test_name" \
 | 
			
		||||
        -v log_file="$log_file" \
 | 
			
		||||
        -v trs_file="$trs_file" \
 | 
			
		||||
        -v expect_failure="$expect_failure" \
 | 
			
		||||
        -v merge="$merge" \
 | 
			
		||||
        -v ignore_exit="$ignore_exit" \
 | 
			
		||||
        -v comments="$comments" \
 | 
			
		||||
        -v diag_string="$diag_string" \
 | 
			
		||||
'
 | 
			
		||||
# FIXME: the usages of "cat >&3" below could be optimized when using
 | 
			
		||||
# FIXME: GNU awk, and/on on systems that supports /dev/fd/.
 | 
			
		||||
 | 
			
		||||
# Implementation note: in what follows, `result_obj` will be an
 | 
			
		||||
# associative array that (partly) simulates a TAP result object
 | 
			
		||||
# from the `TAP::Parser` perl module.
 | 
			
		||||
 | 
			
		||||
## ----------- ##
 | 
			
		||||
##  FUNCTIONS  ##
 | 
			
		||||
## ----------- ##
 | 
			
		||||
 | 
			
		||||
function fatal(msg)
 | 
			
		||||
{
 | 
			
		||||
  print me ": " msg | "cat >&2"
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function abort(where)
 | 
			
		||||
{
 | 
			
		||||
  fatal("internal error " where)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Convert a boolean to a "yes"/"no" string.
 | 
			
		||||
function yn(bool)
 | 
			
		||||
{
 | 
			
		||||
  return bool ? "yes" : "no";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function add_test_result(result)
 | 
			
		||||
{
 | 
			
		||||
  if (!test_results_index)
 | 
			
		||||
    test_results_index = 0
 | 
			
		||||
  test_results_list[test_results_index] = result
 | 
			
		||||
  test_results_index += 1
 | 
			
		||||
  test_results_seen[result] = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Whether the test script should be re-run by "make recheck".
 | 
			
		||||
function must_recheck()
 | 
			
		||||
{
 | 
			
		||||
  for (k in test_results_seen)
 | 
			
		||||
    if (k != "XFAIL" && k != "PASS" && k != "SKIP")
 | 
			
		||||
      return 1
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Whether the content of the log file associated to this test should
 | 
			
		||||
# be copied into the "global" test-suite.log.
 | 
			
		||||
function copy_in_global_log()
 | 
			
		||||
{
 | 
			
		||||
  for (k in test_results_seen)
 | 
			
		||||
    if (k != "PASS")
 | 
			
		||||
      return 1
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# FIXME: this can certainly be improved ...
 | 
			
		||||
function get_global_test_result()
 | 
			
		||||
{
 | 
			
		||||
    if ("ERROR" in test_results_seen)
 | 
			
		||||
      return "ERROR"
 | 
			
		||||
    if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
 | 
			
		||||
      return "FAIL"
 | 
			
		||||
    all_skipped = 1
 | 
			
		||||
    for (k in test_results_seen)
 | 
			
		||||
      if (k != "SKIP")
 | 
			
		||||
        all_skipped = 0
 | 
			
		||||
    if (all_skipped)
 | 
			
		||||
      return "SKIP"
 | 
			
		||||
    return "PASS";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function stringify_result_obj(result_obj)
 | 
			
		||||
{
 | 
			
		||||
  if (result_obj["is_unplanned"] || result_obj["number"] != testno)
 | 
			
		||||
    return "ERROR"
 | 
			
		||||
 | 
			
		||||
  if (plan_seen == LATE_PLAN)
 | 
			
		||||
    return "ERROR"
 | 
			
		||||
 | 
			
		||||
  if (result_obj["directive"] == "TODO")
 | 
			
		||||
    return result_obj["is_ok"] ? "XPASS" : "XFAIL"
 | 
			
		||||
 | 
			
		||||
  if (result_obj["directive"] == "SKIP")
 | 
			
		||||
    return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
 | 
			
		||||
 | 
			
		||||
  if (length(result_obj["directive"]))
 | 
			
		||||
      abort("in function stringify_result_obj()")
 | 
			
		||||
 | 
			
		||||
  return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function decorate_result(result)
 | 
			
		||||
{
 | 
			
		||||
  color_name = color_for_result[result]
 | 
			
		||||
  if (color_name)
 | 
			
		||||
    return color_map[color_name] "" result "" color_map["std"]
 | 
			
		||||
  # If we are not using colorized output, or if we do not know how
 | 
			
		||||
  # to colorize the given result, we should return it unchanged.
 | 
			
		||||
  return result
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function report(result, details)
 | 
			
		||||
{
 | 
			
		||||
  if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
 | 
			
		||||
    {
 | 
			
		||||
      msg = ": " test_script_name
 | 
			
		||||
      add_test_result(result)
 | 
			
		||||
    }
 | 
			
		||||
  else if (result == "#")
 | 
			
		||||
    {
 | 
			
		||||
      msg = " " test_script_name ":"
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      abort("in function report()")
 | 
			
		||||
    }
 | 
			
		||||
  if (length(details))
 | 
			
		||||
    msg = msg " " details
 | 
			
		||||
  # Output on console might be colorized.
 | 
			
		||||
  print decorate_result(result) msg
 | 
			
		||||
  # Log the result in the log file too, to help debugging (this is
 | 
			
		||||
  # especially true when said result is a TAP error or "Bail out!").
 | 
			
		||||
  print result msg | "cat >&3";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function testsuite_error(error_message)
 | 
			
		||||
{
 | 
			
		||||
  report("ERROR", "- " error_message)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function handle_tap_result()
 | 
			
		||||
{
 | 
			
		||||
  details = result_obj["number"];
 | 
			
		||||
  if (length(result_obj["description"]))
 | 
			
		||||
    details = details " " result_obj["description"]
 | 
			
		||||
 | 
			
		||||
  if (plan_seen == LATE_PLAN)
 | 
			
		||||
    {
 | 
			
		||||
      details = details " # AFTER LATE PLAN";
 | 
			
		||||
    }
 | 
			
		||||
  else if (result_obj["is_unplanned"])
 | 
			
		||||
    {
 | 
			
		||||
       details = details " # UNPLANNED";
 | 
			
		||||
    }
 | 
			
		||||
  else if (result_obj["number"] != testno)
 | 
			
		||||
    {
 | 
			
		||||
       details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
 | 
			
		||||
                         details, testno);
 | 
			
		||||
    }
 | 
			
		||||
  else if (result_obj["directive"])
 | 
			
		||||
    {
 | 
			
		||||
      details = details " # " result_obj["directive"];
 | 
			
		||||
      if (length(result_obj["explanation"]))
 | 
			
		||||
        details = details " " result_obj["explanation"]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  report(stringify_result_obj(result_obj), details)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# `skip_reason` should be empty whenever planned > 0.
 | 
			
		||||
function handle_tap_plan(planned, skip_reason)
 | 
			
		||||
{
 | 
			
		||||
  planned += 0 # Avoid getting confused if, say, `planned` is "00"
 | 
			
		||||
  if (length(skip_reason) && planned > 0)
 | 
			
		||||
    abort("in function handle_tap_plan()")
 | 
			
		||||
  if (plan_seen)
 | 
			
		||||
    {
 | 
			
		||||
      # Error, only one plan per stream is acceptable.
 | 
			
		||||
      testsuite_error("multiple test plans")
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  planned_tests = planned
 | 
			
		||||
  # The TAP plan can come before or after *all* the TAP results; we speak
 | 
			
		||||
  # respectively of an "early" or a "late" plan.  If we see the plan line
 | 
			
		||||
  # after at least one TAP result has been seen, assume we have a late
 | 
			
		||||
  # plan; in this case, any further test result seen after the plan will
 | 
			
		||||
  # be flagged as an error.
 | 
			
		||||
  plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
 | 
			
		||||
  # If testno > 0, we have an error ("too many tests run") that will be
 | 
			
		||||
  # automatically dealt with later, so do not worry about it here.  If
 | 
			
		||||
  # $plan_seen is true, we have an error due to a repeated plan, and that
 | 
			
		||||
  # has already been dealt with above.  Otherwise, we have a valid "plan
 | 
			
		||||
  # with SKIP" specification, and should report it as a particular kind
 | 
			
		||||
  # of SKIP result.
 | 
			
		||||
  if (planned == 0 && testno == 0)
 | 
			
		||||
    {
 | 
			
		||||
      if (length(skip_reason))
 | 
			
		||||
        skip_reason = "- "  skip_reason;
 | 
			
		||||
      report("SKIP", skip_reason);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function extract_tap_comment(line)
 | 
			
		||||
{
 | 
			
		||||
  if (index(line, diag_string) == 1)
 | 
			
		||||
    {
 | 
			
		||||
      # Strip leading `diag_string` from `line`.
 | 
			
		||||
      line = substr(line, length(diag_string) + 1)
 | 
			
		||||
      # And strip any leading and trailing whitespace left.
 | 
			
		||||
      sub("^[ \t]*", "", line)
 | 
			
		||||
      sub("[ \t]*$", "", line)
 | 
			
		||||
      # Return what is left (if any).
 | 
			
		||||
      return line;
 | 
			
		||||
    }
 | 
			
		||||
  return "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# When this function is called, we know that line is a TAP result line,
 | 
			
		||||
# so that it matches the (perl) RE "^(not )?ok\b".
 | 
			
		||||
function setup_result_obj(line)
 | 
			
		||||
{
 | 
			
		||||
  # Get the result, and remove it from the line.
 | 
			
		||||
  result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
 | 
			
		||||
  sub("^(not )?ok[ \t]*", "", line)
 | 
			
		||||
 | 
			
		||||
  # If the result has an explicit number, get it and strip it; otherwise,
 | 
			
		||||
  # automatically assing the next progresive number to it.
 | 
			
		||||
  if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
 | 
			
		||||
    {
 | 
			
		||||
      match(line, "^[0-9]+")
 | 
			
		||||
      # The final `+ 0` is to normalize numbers with leading zeros.
 | 
			
		||||
      result_obj["number"] = substr(line, 1, RLENGTH) + 0
 | 
			
		||||
      line = substr(line, RLENGTH + 1)
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      result_obj["number"] = testno
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (plan_seen == LATE_PLAN)
 | 
			
		||||
    # No further test results are acceptable after a "late" TAP plan
 | 
			
		||||
    # has been seen.
 | 
			
		||||
    result_obj["is_unplanned"] = 1
 | 
			
		||||
  else if (plan_seen && testno > planned_tests)
 | 
			
		||||
    result_obj["is_unplanned"] = 1
 | 
			
		||||
  else
 | 
			
		||||
    result_obj["is_unplanned"] = 0
 | 
			
		||||
 | 
			
		||||
  # Strip trailing and leading whitespace.
 | 
			
		||||
  sub("^[ \t]*", "", line)
 | 
			
		||||
  sub("[ \t]*$", "", line)
 | 
			
		||||
 | 
			
		||||
  # This will have to be corrected if we have a "TODO"/"SKIP" directive.
 | 
			
		||||
  result_obj["description"] = line
 | 
			
		||||
  result_obj["directive"] = ""
 | 
			
		||||
  result_obj["explanation"] = ""
 | 
			
		||||
 | 
			
		||||
  if (index(line, "#") == 0)
 | 
			
		||||
    return # No possible directive, nothing more to do.
 | 
			
		||||
 | 
			
		||||
  # Directives are case-insensitive.
 | 
			
		||||
  rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
 | 
			
		||||
 | 
			
		||||
  # See whether we have the directive, and if yes, where.
 | 
			
		||||
  pos = match(line, rx "$")
 | 
			
		||||
  if (!pos)
 | 
			
		||||
    pos = match(line, rx "[^a-zA-Z0-9_]")
 | 
			
		||||
 | 
			
		||||
  # If there was no TAP directive, we have nothing more to do.
 | 
			
		||||
  if (!pos)
 | 
			
		||||
    return
 | 
			
		||||
 | 
			
		||||
  # Let`s now see if the TAP directive has been escaped.  For example:
 | 
			
		||||
  #  escaped:     ok \# SKIP
 | 
			
		||||
  #  not escaped: ok \\# SKIP
 | 
			
		||||
  #  escaped:     ok \\\\\# SKIP
 | 
			
		||||
  #  not escaped: ok \ # SKIP
 | 
			
		||||
  if (substr(line, pos, 1) == "#")
 | 
			
		||||
    {
 | 
			
		||||
      bslash_count = 0
 | 
			
		||||
      for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
 | 
			
		||||
        bslash_count += 1
 | 
			
		||||
      if (bslash_count % 2)
 | 
			
		||||
        return # Directive was escaped.
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  # Strip the directive and its explanation (if any) from the test
 | 
			
		||||
  # description.
 | 
			
		||||
  result_obj["description"] = substr(line, 1, pos - 1)
 | 
			
		||||
  # Now remove the test description from the line, that has been dealt
 | 
			
		||||
  # with already.
 | 
			
		||||
  line = substr(line, pos)
 | 
			
		||||
  # Strip the directive, and save its value (normalized to upper case).
 | 
			
		||||
  sub("^[ \t]*#[ \t]*", "", line)
 | 
			
		||||
  result_obj["directive"] = toupper(substr(line, 1, 4))
 | 
			
		||||
  line = substr(line, 5)
 | 
			
		||||
  # Now get the explanation for the directive (if any), with leading
 | 
			
		||||
  # and trailing whitespace removed.
 | 
			
		||||
  sub("^[ \t]*", "", line)
 | 
			
		||||
  sub("[ \t]*$", "", line)
 | 
			
		||||
  result_obj["explanation"] = line
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function get_test_exit_message(status)
 | 
			
		||||
{
 | 
			
		||||
  if (status == 0)
 | 
			
		||||
    return ""
 | 
			
		||||
  if (status !~ /^[1-9][0-9]*$/)
 | 
			
		||||
    abort("getting exit status")
 | 
			
		||||
  if (status < 127)
 | 
			
		||||
    exit_details = ""
 | 
			
		||||
  else if (status == 127)
 | 
			
		||||
    exit_details = " (command not found?)"
 | 
			
		||||
  else if (status >= 128 && status <= 255)
 | 
			
		||||
    exit_details = sprintf(" (terminated by signal %d?)", status - 128)
 | 
			
		||||
  else if (status > 256 && status <= 384)
 | 
			
		||||
    # We used to report an "abnormal termination" here, but some Korn
 | 
			
		||||
    # shells, when a child process die due to signal number n, can leave
 | 
			
		||||
    # in $? an exit status of 256+n instead of the more standard 128+n.
 | 
			
		||||
    # Apparently, both behaviours are allowed by POSIX (2008), so be
 | 
			
		||||
    # prepared to handle them both.  See also Austing Group report ID
 | 
			
		||||
    # 0000051 <http://www.austingroupbugs.net/view.php?id=51>
 | 
			
		||||
    exit_details = sprintf(" (terminated by signal %d?)", status - 256)
 | 
			
		||||
  else
 | 
			
		||||
    # Never seen in practice.
 | 
			
		||||
    exit_details = " (abnormal termination)"
 | 
			
		||||
  return sprintf("exited with status %d%s", status, exit_details)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function write_test_results()
 | 
			
		||||
{
 | 
			
		||||
  print ":global-test-result: " get_global_test_result() > trs_file
 | 
			
		||||
  print ":recheck: "  yn(must_recheck()) > trs_file
 | 
			
		||||
  print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
 | 
			
		||||
  for (i = 0; i < test_results_index; i += 1)
 | 
			
		||||
    print ":test-result: " test_results_list[i] > trs_file
 | 
			
		||||
  close(trs_file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BEGIN {
 | 
			
		||||
 | 
			
		||||
## ------- ##
 | 
			
		||||
##  SETUP  ##
 | 
			
		||||
## ------- ##
 | 
			
		||||
 | 
			
		||||
'"$init_colors"'
 | 
			
		||||
 | 
			
		||||
# Properly initialized once the TAP plan is seen.
 | 
			
		||||
planned_tests = 0
 | 
			
		||||
 | 
			
		||||
COOKED_PASS = expect_failure ? "XPASS": "PASS";
 | 
			
		||||
COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
 | 
			
		||||
 | 
			
		||||
# Enumeration-like constants to remember which kind of plan (if any)
 | 
			
		||||
# has been seen.  It is important that NO_PLAN evaluates "false" as
 | 
			
		||||
# a boolean.
 | 
			
		||||
NO_PLAN = 0
 | 
			
		||||
EARLY_PLAN = 1
 | 
			
		||||
LATE_PLAN = 2
 | 
			
		||||
 | 
			
		||||
testno = 0     # Number of test results seen so far.
 | 
			
		||||
bailed_out = 0 # Whether a "Bail out!" directive has been seen.
 | 
			
		||||
 | 
			
		||||
# Whether the TAP plan has been seen or not, and if yes, which kind
 | 
			
		||||
# it is ("early" is seen before any test result, "late" otherwise).
 | 
			
		||||
plan_seen = NO_PLAN
 | 
			
		||||
 | 
			
		||||
## --------- ##
 | 
			
		||||
##  PARSING  ##
 | 
			
		||||
## --------- ##
 | 
			
		||||
 | 
			
		||||
is_first_read = 1
 | 
			
		||||
 | 
			
		||||
while (1)
 | 
			
		||||
  {
 | 
			
		||||
    # Involutions required so that we are able to read the exit status
 | 
			
		||||
    # from the last input line.
 | 
			
		||||
    st = getline
 | 
			
		||||
    if (st < 0) # I/O error.
 | 
			
		||||
      fatal("I/O error while reading from input stream")
 | 
			
		||||
    else if (st == 0) # End-of-input
 | 
			
		||||
      {
 | 
			
		||||
        if (is_first_read)
 | 
			
		||||
          abort("in input loop: only one input line")
 | 
			
		||||
        break
 | 
			
		||||
      }
 | 
			
		||||
    if (is_first_read)
 | 
			
		||||
      {
 | 
			
		||||
        is_first_read = 0
 | 
			
		||||
        nextline = $0
 | 
			
		||||
        continue
 | 
			
		||||
      }
 | 
			
		||||
    else
 | 
			
		||||
      {
 | 
			
		||||
        curline = nextline
 | 
			
		||||
        nextline = $0
 | 
			
		||||
        $0 = curline
 | 
			
		||||
      }
 | 
			
		||||
    # Copy any input line verbatim into the log file.
 | 
			
		||||
    print | "cat >&3"
 | 
			
		||||
    # Parsing of TAP input should stop after a "Bail out!" directive.
 | 
			
		||||
    if (bailed_out)
 | 
			
		||||
      continue
 | 
			
		||||
 | 
			
		||||
    # TAP test result.
 | 
			
		||||
    if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
 | 
			
		||||
      {
 | 
			
		||||
        testno += 1
 | 
			
		||||
        setup_result_obj($0)
 | 
			
		||||
        handle_tap_result()
 | 
			
		||||
      }
 | 
			
		||||
    # TAP plan (normal or "SKIP" without explanation).
 | 
			
		||||
    else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
 | 
			
		||||
      {
 | 
			
		||||
        # The next two lines will put the number of planned tests in $0.
 | 
			
		||||
        sub("^1\\.\\.", "")
 | 
			
		||||
        sub("[^0-9]*$", "")
 | 
			
		||||
        handle_tap_plan($0, "")
 | 
			
		||||
        continue
 | 
			
		||||
      }
 | 
			
		||||
    # TAP "SKIP" plan, with an explanation.
 | 
			
		||||
    else if ($0 ~ /^1\.\.0+[ \t]*#/)
 | 
			
		||||
      {
 | 
			
		||||
        # The next lines will put the skip explanation in $0, stripping
 | 
			
		||||
        # any leading and trailing whitespace.  This is a little more
 | 
			
		||||
        # tricky in truth, since we want to also strip a potential leading
 | 
			
		||||
        # "SKIP" string from the message.
 | 
			
		||||
        sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
 | 
			
		||||
        sub("[ \t]*$", "");
 | 
			
		||||
        handle_tap_plan(0, $0)
 | 
			
		||||
      }
 | 
			
		||||
    # "Bail out!" magic.
 | 
			
		||||
    # Older versions of prove and TAP::Harness (e.g., 3.17) did not
 | 
			
		||||
    # recognize a "Bail out!" directive when preceded by leading
 | 
			
		||||
    # whitespace, but more modern versions (e.g., 3.23) do.  So we
 | 
			
		||||
    # emulate the latter, "more modern" behaviour.
 | 
			
		||||
    else if ($0 ~ /^[ \t]*Bail out!/)
 | 
			
		||||
      {
 | 
			
		||||
        bailed_out = 1
 | 
			
		||||
        # Get the bailout message (if any), with leading and trailing
 | 
			
		||||
        # whitespace stripped.  The message remains stored in `$0`.
 | 
			
		||||
        sub("^[ \t]*Bail out![ \t]*", "");
 | 
			
		||||
        sub("[ \t]*$", "");
 | 
			
		||||
        # Format the error message for the
 | 
			
		||||
        bailout_message = "Bail out!"
 | 
			
		||||
        if (length($0))
 | 
			
		||||
          bailout_message = bailout_message " " $0
 | 
			
		||||
        testsuite_error(bailout_message)
 | 
			
		||||
      }
 | 
			
		||||
    # Maybe we have too look for dianogtic comments too.
 | 
			
		||||
    else if (comments != 0)
 | 
			
		||||
      {
 | 
			
		||||
        comment = extract_tap_comment($0);
 | 
			
		||||
        if (length(comment))
 | 
			
		||||
          report("#", comment);
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
## -------- ##
 | 
			
		||||
##  FINISH  ##
 | 
			
		||||
## -------- ##
 | 
			
		||||
 | 
			
		||||
# A "Bail out!" directive should cause us to ignore any following TAP
 | 
			
		||||
# error, as well as a non-zero exit status from the TAP producer.
 | 
			
		||||
if (!bailed_out)
 | 
			
		||||
  {
 | 
			
		||||
    if (!plan_seen)
 | 
			
		||||
      {
 | 
			
		||||
        testsuite_error("missing test plan")
 | 
			
		||||
      }
 | 
			
		||||
    else if (planned_tests != testno)
 | 
			
		||||
      {
 | 
			
		||||
        bad_amount = testno > planned_tests ? "many" : "few"
 | 
			
		||||
        testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
 | 
			
		||||
                                bad_amount, planned_tests, testno))
 | 
			
		||||
      }
 | 
			
		||||
    if (!ignore_exit)
 | 
			
		||||
      {
 | 
			
		||||
        # Fetch exit status from the last line.
 | 
			
		||||
        exit_message = get_test_exit_message(nextline)
 | 
			
		||||
        if (exit_message)
 | 
			
		||||
          testsuite_error(exit_message)
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
write_test_results()
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
 | 
			
		||||
} # End of "BEGIN" block.
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
# TODO: document that we consume the file descriptor 3 :-(
 | 
			
		||||
} 3>"$log_file"
 | 
			
		||||
 | 
			
		||||
test $? -eq 0 || fatal "I/O or internal error"
 | 
			
		||||
 | 
			
		||||
# Local Variables:
 | 
			
		||||
# mode: shell-script
 | 
			
		||||
# sh-indentation: 2
 | 
			
		||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
 | 
			
		||||
# time-stamp-start: "scriptversion="
 | 
			
		||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
 | 
			
		||||
# time-stamp-time-zone: "UTC"
 | 
			
		||||
# time-stamp-end: "; # UTC"
 | 
			
		||||
# End:
 | 
			
		||||
							
								
								
									
										5
									
								
								clutter/build/autotools/tap-test
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								clutter/build/autotools/tap-test
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
 | 
			
		||||
# run a GTest in tap mode. The test binary is passed as $1
 | 
			
		||||
 | 
			
		||||
$1 -k --tap
 | 
			
		||||
							
								
								
									
										721
									
								
								clutter/clutter/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										721
									
								
								clutter/clutter/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,721 @@
 | 
			
		||||
AUTOMAKE_OPTIONS = subdir-objects
 | 
			
		||||
 | 
			
		||||
# preamble
 | 
			
		||||
NULL =
 | 
			
		||||
 | 
			
		||||
# common definitions
 | 
			
		||||
CLEANFILES =
 | 
			
		||||
DISTCLEANFILES =
 | 
			
		||||
EXTRA_DIST =
 | 
			
		||||
BUILT_SOURCES =
 | 
			
		||||
 | 
			
		||||
AM_CPPFLAGS = \
 | 
			
		||||
	-DCLUTTER_PREFIX=\""$(prefix)"\"	\
 | 
			
		||||
	-DCLUTTER_LIBDIR=\""$(libdir)"\"	\
 | 
			
		||||
	-DCLUTTER_DATADIR=\""$(datadir)"\"	\
 | 
			
		||||
	-DCLUTTER_LOCALEDIR=\""$(localedir)"\"	\
 | 
			
		||||
	-DCLUTTER_SYSCONFDIR=\""$(sysconfdir)"\" \
 | 
			
		||||
	-DCLUTTER_COMPILATION=1			\
 | 
			
		||||
	-DCOGL_DISABLE_DEPRECATION_WARNINGS	\
 | 
			
		||||
	-DG_LOG_DOMAIN=\"Clutter\" 		\
 | 
			
		||||
	-I$(top_srcdir) 			\
 | 
			
		||||
	-I$(top_srcdir)/clutter			\
 | 
			
		||||
	-I$(top_srcdir)/clutter/cally		\
 | 
			
		||||
	-I$(top_builddir)			\
 | 
			
		||||
	-I$(top_builddir)/clutter		\
 | 
			
		||||
	-I$(top_srcdir)/../cogl			\
 | 
			
		||||
	-I$(top_builddir)/../cogl		\
 | 
			
		||||
	-I$(top_builddir)/../cogl/cogl		\
 | 
			
		||||
	$(CLUTTER_DEPRECATED_CFLAGS)		\
 | 
			
		||||
	$(CLUTTER_DEBUG_CFLAGS)			\
 | 
			
		||||
	$(CLUTTER_HIDDEN_VISIBILITY_CFLAGS)	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
AM_CFLAGS = $(CLUTTER_CFLAGS) $(MAINTAINER_CFLAGS)
 | 
			
		||||
 | 
			
		||||
# these are the gir files we generate using g-ir-scanner
 | 
			
		||||
INTROSPECTION_GIRS =
 | 
			
		||||
 | 
			
		||||
# the base include path for headers
 | 
			
		||||
clutter_base_includedir = $(includedir)/mutter/clutter-$(LIBMUTTER_API_VERSION)
 | 
			
		||||
clutter_includedir = $(clutter_base_includedir)/clutter
 | 
			
		||||
clutter_deprecateddir = $(clutter_base_includedir)/clutter/deprecated
 | 
			
		||||
 | 
			
		||||
# pkg-config files
 | 
			
		||||
pc_files =
 | 
			
		||||
 | 
			
		||||
# common sources - please, keep these sorted alphabetically
 | 
			
		||||
source_h =					\
 | 
			
		||||
	clutter-action.h		\
 | 
			
		||||
	clutter-actor-meta.h		\
 | 
			
		||||
	clutter-actor.h		\
 | 
			
		||||
	clutter-align-constraint.h	\
 | 
			
		||||
	clutter-animatable.h          \
 | 
			
		||||
	clutter-backend.h		\
 | 
			
		||||
	clutter-bind-constraint.h	\
 | 
			
		||||
	clutter-binding-pool.h 	\
 | 
			
		||||
	clutter-bin-layout.h		\
 | 
			
		||||
	clutter-blur-effect.h		\
 | 
			
		||||
	clutter-box-layout.h		\
 | 
			
		||||
	clutter-brightness-contrast-effect.h	\
 | 
			
		||||
	clutter-cairo.h		\
 | 
			
		||||
	clutter-canvas.h		\
 | 
			
		||||
	clutter-child-meta.h		\
 | 
			
		||||
	clutter-click-action.h	\
 | 
			
		||||
	clutter-clone.h		\
 | 
			
		||||
	clutter-color-static.h	\
 | 
			
		||||
	clutter-color.h		\
 | 
			
		||||
	clutter-colorize-effect.h	\
 | 
			
		||||
	clutter-constraint.h		\
 | 
			
		||||
	clutter-container.h		\
 | 
			
		||||
	clutter-content.h		\
 | 
			
		||||
	clutter-deform-effect.h	\
 | 
			
		||||
	clutter-deprecated.h		\
 | 
			
		||||
	clutter-desaturate-effect.h	\
 | 
			
		||||
	clutter-device-manager.h	\
 | 
			
		||||
	clutter-drag-action.h		\
 | 
			
		||||
	clutter-drop-action.h		\
 | 
			
		||||
	clutter-effect.h		\
 | 
			
		||||
	clutter-enums.h		\
 | 
			
		||||
	clutter-event.h 		\
 | 
			
		||||
	clutter-feature.h 		\
 | 
			
		||||
	clutter-fixed-layout.h	\
 | 
			
		||||
	clutter-flow-layout.h		\
 | 
			
		||||
	clutter-gesture-action.h 	\
 | 
			
		||||
	clutter-grid-layout.h 	\
 | 
			
		||||
	clutter-group.h 		\
 | 
			
		||||
	clutter-image.h		\
 | 
			
		||||
	clutter-input-device.h	\
 | 
			
		||||
	clutter-input-device-tool.h	\
 | 
			
		||||
        clutter-interval.h            \
 | 
			
		||||
	clutter-keyframe-transition.h	\
 | 
			
		||||
	clutter-keysyms.h 		\
 | 
			
		||||
	clutter-layout-manager.h	\
 | 
			
		||||
	clutter-layout-meta.h		\
 | 
			
		||||
	clutter-macros.h		\
 | 
			
		||||
	clutter-main.h		\
 | 
			
		||||
	clutter-offscreen-effect.h	\
 | 
			
		||||
	clutter-page-turn-effect.h	\
 | 
			
		||||
	clutter-paint-nodes.h		\
 | 
			
		||||
	clutter-paint-node.h		\
 | 
			
		||||
	clutter-pan-action.h		\
 | 
			
		||||
	clutter-path-constraint.h	\
 | 
			
		||||
	clutter-path.h		\
 | 
			
		||||
	clutter-property-transition.h	\
 | 
			
		||||
	clutter-rotate-action.h	\
 | 
			
		||||
	clutter-script.h		\
 | 
			
		||||
	clutter-scriptable.h		\
 | 
			
		||||
	clutter-scroll-actor.h	\
 | 
			
		||||
	clutter-settings.h		\
 | 
			
		||||
	clutter-shader-effect.h	\
 | 
			
		||||
	clutter-shader-types.h	\
 | 
			
		||||
	clutter-swipe-action.h	\
 | 
			
		||||
	clutter-snap-constraint.h	\
 | 
			
		||||
	clutter-stage.h 		\
 | 
			
		||||
	clutter-stage-manager.h	\
 | 
			
		||||
	clutter-tap-action.h		\
 | 
			
		||||
	clutter-test-utils.h		\
 | 
			
		||||
	clutter-texture.h 		\
 | 
			
		||||
	clutter-text.h		\
 | 
			
		||||
	clutter-text-buffer.h		\
 | 
			
		||||
	clutter-timeline.h 		\
 | 
			
		||||
	clutter-transition-group.h	\
 | 
			
		||||
	clutter-transition.h		\
 | 
			
		||||
	clutter-types.h		\
 | 
			
		||||
	clutter-units.h 		\
 | 
			
		||||
	clutter-virtual-input-device.h	\
 | 
			
		||||
	clutter-zoom-action.h		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
source_c = \
 | 
			
		||||
	clutter-action.c		\
 | 
			
		||||
	clutter-actor-box.c		\
 | 
			
		||||
	clutter-actor-meta.c		\
 | 
			
		||||
	clutter-actor.c		\
 | 
			
		||||
	clutter-align-constraint.c	\
 | 
			
		||||
	clutter-animatable.c		\
 | 
			
		||||
	clutter-backend.c		\
 | 
			
		||||
	clutter-base-types.c		\
 | 
			
		||||
	clutter-bezier.c		\
 | 
			
		||||
	clutter-bind-constraint.c	\
 | 
			
		||||
	clutter-binding-pool.c	\
 | 
			
		||||
	clutter-bin-layout.c		\
 | 
			
		||||
	clutter-blur-effect.c		\
 | 
			
		||||
	clutter-box-layout.c		\
 | 
			
		||||
	clutter-brightness-contrast-effect.c	\
 | 
			
		||||
	clutter-cairo.c		\
 | 
			
		||||
	clutter-canvas.c		\
 | 
			
		||||
	clutter-child-meta.c		\
 | 
			
		||||
	clutter-click-action.c	\
 | 
			
		||||
	clutter-clone.c		\
 | 
			
		||||
	clutter-color.c 		\
 | 
			
		||||
	clutter-colorize-effect.c	\
 | 
			
		||||
	clutter-constraint.c		\
 | 
			
		||||
	clutter-container.c		\
 | 
			
		||||
	clutter-content.c		\
 | 
			
		||||
	clutter-deform-effect.c	\
 | 
			
		||||
	clutter-desaturate-effect.c	\
 | 
			
		||||
	clutter-device-manager.c	\
 | 
			
		||||
	clutter-drag-action.c		\
 | 
			
		||||
	clutter-drop-action.c		\
 | 
			
		||||
	clutter-effect.c		\
 | 
			
		||||
	clutter-event.c 		\
 | 
			
		||||
	clutter-feature.c 		\
 | 
			
		||||
	clutter-fixed-layout.c	\
 | 
			
		||||
	clutter-flatten-effect.c	\
 | 
			
		||||
	clutter-flow-layout.c		\
 | 
			
		||||
	clutter-gesture-action.c 	\
 | 
			
		||||
	clutter-grid-layout.c 	\
 | 
			
		||||
	clutter-image.c		\
 | 
			
		||||
	clutter-input-device.c	\
 | 
			
		||||
	clutter-input-device-tool.c	\
 | 
			
		||||
	clutter-virtual-input-device.c	\
 | 
			
		||||
	clutter-interval.c            \
 | 
			
		||||
	clutter-keyframe-transition.c	\
 | 
			
		||||
	clutter-keysyms-table.c	\
 | 
			
		||||
	clutter-layout-manager.c	\
 | 
			
		||||
	clutter-layout-meta.c		\
 | 
			
		||||
	clutter-main.c 		\
 | 
			
		||||
	clutter-master-clock.c	\
 | 
			
		||||
	clutter-master-clock-default.c	\
 | 
			
		||||
	clutter-offscreen-effect.c	\
 | 
			
		||||
	clutter-page-turn-effect.c	\
 | 
			
		||||
	clutter-paint-nodes.c		\
 | 
			
		||||
	clutter-paint-node.c		\
 | 
			
		||||
	clutter-pan-action.c		\
 | 
			
		||||
	clutter-path-constraint.c	\
 | 
			
		||||
	clutter-path.c		\
 | 
			
		||||
	clutter-property-transition.c	\
 | 
			
		||||
	clutter-rotate-action.c	\
 | 
			
		||||
	clutter-script.c		\
 | 
			
		||||
	clutter-script-parser.c	\
 | 
			
		||||
	clutter-scriptable.c		\
 | 
			
		||||
	clutter-scroll-actor.c	\
 | 
			
		||||
	clutter-settings.c		\
 | 
			
		||||
	clutter-shader-effect.c	\
 | 
			
		||||
	clutter-shader-types.c	\
 | 
			
		||||
	clutter-swipe-action.c	\
 | 
			
		||||
	clutter-snap-constraint.c	\
 | 
			
		||||
	clutter-stage.c		\
 | 
			
		||||
	clutter-stage-manager.c	\
 | 
			
		||||
	clutter-stage-window.c	\
 | 
			
		||||
	clutter-tap-action.c		\
 | 
			
		||||
	clutter-test-utils.c		\
 | 
			
		||||
	clutter-text.c		\
 | 
			
		||||
	clutter-text-buffer.c		\
 | 
			
		||||
	clutter-transition-group.c	\
 | 
			
		||||
	clutter-transition.c		\
 | 
			
		||||
	clutter-timeline.c 		\
 | 
			
		||||
	clutter-units.c		\
 | 
			
		||||
	clutter-util.c 		\
 | 
			
		||||
	clutter-paint-volume.c 	\
 | 
			
		||||
	clutter-zoom-action.c 	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# private headers; these should not be distributed or introspected
 | 
			
		||||
source_h_priv = \
 | 
			
		||||
	clutter-actor-meta-private.h		\
 | 
			
		||||
	clutter-actor-private.h			\
 | 
			
		||||
	clutter-backend-private.h		\
 | 
			
		||||
	clutter-bezier.h			\
 | 
			
		||||
	clutter-constraint-private.h		\
 | 
			
		||||
	clutter-content-private.h		\
 | 
			
		||||
	clutter-debug.h 			\
 | 
			
		||||
	clutter-device-manager-private.h	\
 | 
			
		||||
	clutter-easing.h			\
 | 
			
		||||
	clutter-effect-private.h		\
 | 
			
		||||
	clutter-event-translator.h		\
 | 
			
		||||
	clutter-event-private.h			\
 | 
			
		||||
	clutter-flatten-effect.h		\
 | 
			
		||||
	clutter-gesture-action-private.h	\
 | 
			
		||||
	clutter-id-pool.h 			\
 | 
			
		||||
	clutter-master-clock.h			\
 | 
			
		||||
	clutter-master-clock-default.h		\
 | 
			
		||||
	clutter-offscreen-effect-private.h	\
 | 
			
		||||
	clutter-paint-node-private.h		\
 | 
			
		||||
	clutter-paint-volume-private.h		\
 | 
			
		||||
	clutter-private.h 			\
 | 
			
		||||
	clutter-script-private.h		\
 | 
			
		||||
	clutter-settings-private.h		\
 | 
			
		||||
	clutter-stage-manager-private.h		\
 | 
			
		||||
	clutter-stage-private.h			\
 | 
			
		||||
	clutter-stage-view.h			\
 | 
			
		||||
	clutter-stage-window.h			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# private source code; these should not be introspected
 | 
			
		||||
source_c_priv = \
 | 
			
		||||
	clutter-easing.c		\
 | 
			
		||||
	clutter-event-translator.c	\
 | 
			
		||||
	clutter-id-pool.c 		\
 | 
			
		||||
	clutter-stage-view.c		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# deprecated installed headers
 | 
			
		||||
deprecated_h = \
 | 
			
		||||
	deprecated/clutter-actor.h			\
 | 
			
		||||
	deprecated/clutter-alpha.h 			\
 | 
			
		||||
	deprecated/clutter-animatable.h		\
 | 
			
		||||
	deprecated/clutter-animation.h		\
 | 
			
		||||
	deprecated/clutter-animator.h			\
 | 
			
		||||
	deprecated/clutter-backend.h			\
 | 
			
		||||
	deprecated/clutter-behaviour.h 		\
 | 
			
		||||
	deprecated/clutter-behaviour-depth.h 		\
 | 
			
		||||
	deprecated/clutter-behaviour-ellipse.h	\
 | 
			
		||||
	deprecated/clutter-behaviour-opacity.h 	\
 | 
			
		||||
	deprecated/clutter-behaviour-path.h 		\
 | 
			
		||||
	deprecated/clutter-behaviour-rotate.h 	\
 | 
			
		||||
	deprecated/clutter-behaviour-scale.h 		\
 | 
			
		||||
	deprecated/clutter-bin-layout.h		\
 | 
			
		||||
	deprecated/clutter-box.h			\
 | 
			
		||||
	deprecated/clutter-cairo-texture.h		\
 | 
			
		||||
	deprecated/clutter-container.h		\
 | 
			
		||||
	deprecated/clutter-frame-source.h		\
 | 
			
		||||
	deprecated/clutter-group.h			\
 | 
			
		||||
	deprecated/clutter-input-device.h		\
 | 
			
		||||
	deprecated/clutter-keysyms.h			\
 | 
			
		||||
	deprecated/clutter-list-model.h			\
 | 
			
		||||
	deprecated/clutter-main.h			\
 | 
			
		||||
	deprecated/clutter-media.h			\
 | 
			
		||||
	deprecated/clutter-model.h			\
 | 
			
		||||
	deprecated/clutter-rectangle.h		\
 | 
			
		||||
	deprecated/clutter-score.h 			\
 | 
			
		||||
	deprecated/clutter-shader.h 			\
 | 
			
		||||
	deprecated/clutter-stage-manager.h		\
 | 
			
		||||
	deprecated/clutter-stage.h			\
 | 
			
		||||
	deprecated/clutter-state.h			\
 | 
			
		||||
	deprecated/clutter-table-layout.h		\
 | 
			
		||||
	deprecated/clutter-texture.h			\
 | 
			
		||||
	deprecated/clutter-timeline.h 		\
 | 
			
		||||
	deprecated/clutter-timeout-pool.h 		\
 | 
			
		||||
	deprecated/clutter-util.h 			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# deprecated source code
 | 
			
		||||
deprecated_c = \
 | 
			
		||||
	deprecated/clutter-actor-deprecated.c		\
 | 
			
		||||
	deprecated/clutter-alpha.c 			\
 | 
			
		||||
	deprecated/clutter-animation.c		\
 | 
			
		||||
	deprecated/clutter-animator.c			\
 | 
			
		||||
	deprecated/clutter-behaviour.c 		\
 | 
			
		||||
	deprecated/clutter-behaviour-depth.c		\
 | 
			
		||||
	deprecated/clutter-behaviour-ellipse.c	\
 | 
			
		||||
	deprecated/clutter-behaviour-opacity.c	\
 | 
			
		||||
	deprecated/clutter-behaviour-path.c		\
 | 
			
		||||
	deprecated/clutter-behaviour-rotate.c		\
 | 
			
		||||
	deprecated/clutter-behaviour-scale.c		\
 | 
			
		||||
	deprecated/clutter-box.c			\
 | 
			
		||||
	deprecated/clutter-cairo-texture.c		\
 | 
			
		||||
	deprecated/clutter-frame-source.c		\
 | 
			
		||||
	deprecated/clutter-group.c 			\
 | 
			
		||||
	deprecated/clutter-input-device-deprecated.c	\
 | 
			
		||||
	deprecated/clutter-layout-manager-deprecated.c \
 | 
			
		||||
	deprecated/clutter-list-model.c			\
 | 
			
		||||
	deprecated/clutter-media.c			\
 | 
			
		||||
	deprecated/clutter-model.c			\
 | 
			
		||||
	deprecated/clutter-rectangle.c 		\
 | 
			
		||||
	deprecated/clutter-score.c 			\
 | 
			
		||||
	deprecated/clutter-shader.c 			\
 | 
			
		||||
	deprecated/clutter-state.c			\
 | 
			
		||||
	deprecated/clutter-table-layout.c		\
 | 
			
		||||
	deprecated/clutter-texture.c 			\
 | 
			
		||||
	deprecated/clutter-timeout-pool.c		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# deprecated private headers; these should not be installed
 | 
			
		||||
deprecated_h_priv = \
 | 
			
		||||
	deprecated/clutter-model-private.h	\
 | 
			
		||||
	deprecated/clutter-timeout-interval.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# deprecated private source code; these should not be introspected
 | 
			
		||||
deprecated_c_priv = \
 | 
			
		||||
	deprecated/clutter-timeout-interval.c	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# built sources
 | 
			
		||||
built_source_c = \
 | 
			
		||||
	clutter-enum-types.c			\
 | 
			
		||||
	clutter-marshal.c			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# built headers
 | 
			
		||||
built_source_h = \
 | 
			
		||||
	clutter-enum-types.h			\
 | 
			
		||||
	clutter-marshal.h			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# config header
 | 
			
		||||
DISTCLEANFILES += clutter-config.h
 | 
			
		||||
EXTRA_DIST += clutter-config.h.in
 | 
			
		||||
 | 
			
		||||
# version header
 | 
			
		||||
DISTCLEANFILES += clutter-version.h
 | 
			
		||||
EXTRA_DIST += clutter-version.h.in clutter-version.h
 | 
			
		||||
 | 
			
		||||
# key symbol update script
 | 
			
		||||
EXTRA_DIST += clutter-keysyms-update.pl
 | 
			
		||||
 | 
			
		||||
pc_files += mutter-clutter-$(LIBMUTTER_API_VERSION).pc
 | 
			
		||||
 | 
			
		||||
# in order to be compatible with Clutter < 1.10, when we shipped a single
 | 
			
		||||
# shared library whose name was determined by the single backend it
 | 
			
		||||
# supported, we need to install symbolic links so that existing applications
 | 
			
		||||
# using Clutter won't break in the Brave New World of multi-backend support
 | 
			
		||||
# in the same shared object.
 | 
			
		||||
compat_libs =
 | 
			
		||||
 | 
			
		||||
# backends source listings
 | 
			
		||||
#
 | 
			
		||||
#   backend_source_c := source code
 | 
			
		||||
#   backend_source_h := installed public headers
 | 
			
		||||
#   backend_source_c_priv := source that should not be scanned by g-i
 | 
			
		||||
#   backend_source_h_priv := private headers
 | 
			
		||||
#   backend_source_built := built sources
 | 
			
		||||
#
 | 
			
		||||
backend_source_c =
 | 
			
		||||
backend_source_h =
 | 
			
		||||
backend_source_c_priv =
 | 
			
		||||
backend_source_h_priv =
 | 
			
		||||
backend_source_built =
 | 
			
		||||
 | 
			
		||||
# X11 backend rules
 | 
			
		||||
x11_source_c = \
 | 
			
		||||
	x11/clutter-backend-x11.c		\
 | 
			
		||||
	x11/clutter-device-manager-core-x11.c	\
 | 
			
		||||
	x11/clutter-event-x11.c		\
 | 
			
		||||
	x11/clutter-input-device-core-x11.c	\
 | 
			
		||||
	x11/clutter-keymap-x11.c		\
 | 
			
		||||
	x11/clutter-stage-x11.c		\
 | 
			
		||||
	x11/clutter-x11-texture-pixmap.c	\
 | 
			
		||||
	x11/clutter-xkb-a11y-x11.c		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_h = \
 | 
			
		||||
	x11/clutter-x11.h			\
 | 
			
		||||
	x11/clutter-x11-texture-pixmap.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_h_priv = \
 | 
			
		||||
	x11/clutter-backend-x11.h		\
 | 
			
		||||
	x11/clutter-device-manager-core-x11.h	\
 | 
			
		||||
	x11/clutter-input-device-core-x11.h	\
 | 
			
		||||
	x11/clutter-keymap-x11.h		\
 | 
			
		||||
	x11/clutter-settings-x11.h		\
 | 
			
		||||
	x11/clutter-stage-x11.h		\
 | 
			
		||||
	x11/clutter-xkb-a11y-x11.h		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_c_priv = \
 | 
			
		||||
	x11/xsettings/xsettings-client.c	\
 | 
			
		||||
	x11/xsettings/xsettings-client.h	\
 | 
			
		||||
	x11/xsettings/xsettings-common.c	\
 | 
			
		||||
	x11/xsettings/xsettings-common.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_c += \
 | 
			
		||||
	x11/clutter-device-manager-xi2.c	\
 | 
			
		||||
	x11/clutter-input-device-xi2.c	\
 | 
			
		||||
	x11/clutter-input-device-tool-xi2.c \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_h_priv += \
 | 
			
		||||
	x11/clutter-device-manager-xi2.h	\
 | 
			
		||||
	x11/clutter-input-device-xi2.h	\
 | 
			
		||||
	x11/clutter-input-device-tool-xi2.h \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_c += \
 | 
			
		||||
	x11/clutter-virtual-input-device-x11.c	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
x11_source_h_priv += \
 | 
			
		||||
	x11/clutter-virtual-input-device-x11.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
backend_source_h += $(x11_source_h)
 | 
			
		||||
backend_source_c += $(x11_source_c)
 | 
			
		||||
backend_source_h_priv += $(x11_source_h_priv)
 | 
			
		||||
backend_source_c_priv += $(x11_source_c_priv)
 | 
			
		||||
 | 
			
		||||
# the list of files we want to introspect on X11
 | 
			
		||||
x11_introspection = $(x11_source_c) $(x11_source_h)
 | 
			
		||||
 | 
			
		||||
clutterx11_includedir = $(clutter_includedir)/x11
 | 
			
		||||
clutterx11_include_HEADERS = $(x11_source_h)
 | 
			
		||||
 | 
			
		||||
mutter-clutter-x11-@LIBMUTTER_API_VERSION@.pc: mutter-clutter-$(LIBMUTTER_API_VERSION).pc
 | 
			
		||||
	$(QUIET_GEN)cp -f $< $(@F)
 | 
			
		||||
 | 
			
		||||
pc_files += mutter-clutter-x11-$(LIBMUTTER_API_VERSION).pc
 | 
			
		||||
 | 
			
		||||
# Shared cogl backend files
 | 
			
		||||
cogl_source_h =
 | 
			
		||||
 | 
			
		||||
cogl_source_c = \
 | 
			
		||||
	cogl/clutter-stage-cogl.c	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
cogl_source_h_priv = \
 | 
			
		||||
	cogl/clutter-stage-cogl.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
cogl_source_c_priv =
 | 
			
		||||
 | 
			
		||||
backend_source_h += $(cogl_source_h)
 | 
			
		||||
backend_source_c += $(cogl_source_c)
 | 
			
		||||
backend_source_h_priv += $(cogl_source_h_priv)
 | 
			
		||||
backend_source_c_priv += $(cogl_source_c_priv)
 | 
			
		||||
 | 
			
		||||
backend_source_h += $(glx_source_h)
 | 
			
		||||
backend_source_c += $(glx_source_c)
 | 
			
		||||
 | 
			
		||||
evdev_c_priv = \
 | 
			
		||||
	evdev/clutter-device-manager-evdev.c	\
 | 
			
		||||
	evdev/clutter-input-device-evdev.c	\
 | 
			
		||||
	evdev/clutter-seat-evdev.c		\
 | 
			
		||||
	evdev/clutter-virtual-input-device-evdev.c	\
 | 
			
		||||
	evdev/clutter-event-evdev.c		\
 | 
			
		||||
	evdev/clutter-input-device-tool-evdev.c	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
evdev_h_priv = \
 | 
			
		||||
	evdev/clutter-device-manager-evdev.h	\
 | 
			
		||||
	evdev/clutter-input-device-evdev.h	\
 | 
			
		||||
	evdev/clutter-seat-evdev.h		\
 | 
			
		||||
	evdev/clutter-input-device-tool-evdev.h	\
 | 
			
		||||
	evdev/clutter-virtual-input-device-evdev.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
evdev_h = evdev/clutter-evdev.h
 | 
			
		||||
 | 
			
		||||
if SUPPORT_WAYLAND
 | 
			
		||||
backend_source_c_priv += $(evdev_c_priv)
 | 
			
		||||
backend_source_h_priv += $(evdev_h_priv)
 | 
			
		||||
backend_source_h += $(evdev_h)
 | 
			
		||||
 | 
			
		||||
clutterevdev_includedir = $(clutter_includedir)/evdev
 | 
			
		||||
clutterevdev_include_HEADERS = $(evdev_h)
 | 
			
		||||
 | 
			
		||||
backend_source_c += evdev/clutter-xkb-utils.c
 | 
			
		||||
backend_source_h_priv += evdev/clutter-xkb-utils.h
 | 
			
		||||
 | 
			
		||||
# EGL backend rules
 | 
			
		||||
egl_source_h = \
 | 
			
		||||
	egl/clutter-egl-headers.h	\
 | 
			
		||||
	egl/clutter-egl.h		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
egl_source_h_priv = egl/clutter-backend-eglnative.h
 | 
			
		||||
egl_source_c = egl/clutter-backend-eglnative.c
 | 
			
		||||
 | 
			
		||||
wayland_compositor_source_h = \
 | 
			
		||||
	wayland/clutter-wayland-compositor.h		\
 | 
			
		||||
	wayland/clutter-wayland-surface.h
 | 
			
		||||
backend_source_h += $(wayland_compositor_source_h)
 | 
			
		||||
backend_source_c += \
 | 
			
		||||
	wayland/clutter-wayland-surface.c
 | 
			
		||||
 | 
			
		||||
wayland_compositor_includedir = $(clutter_includedir)/wayland
 | 
			
		||||
wayland_compositor_include_HEADERS = $(wayland_compositor_source_h)
 | 
			
		||||
 | 
			
		||||
backend_source_h += $(egl_source_h)
 | 
			
		||||
backend_source_c += $(egl_source_c)
 | 
			
		||||
backend_source_h_priv += $(egl_source_h_priv)
 | 
			
		||||
 | 
			
		||||
clutteregl_includedir = $(clutter_includedir)/egl
 | 
			
		||||
clutteregl_include_HEADERS = $(egl_source_h)
 | 
			
		||||
endif # SUPPORT_WAYLAND
 | 
			
		||||
 | 
			
		||||
# cally
 | 
			
		||||
cally_sources_h = \
 | 
			
		||||
	cally/cally-actor.h		\
 | 
			
		||||
	cally/cally-clone.h		\
 | 
			
		||||
	cally/cally-factory.h		\
 | 
			
		||||
	cally/cally-group.h		\
 | 
			
		||||
	cally/cally.h			\
 | 
			
		||||
	cally/cally-main.h		\
 | 
			
		||||
	cally/cally-rectangle.h	\
 | 
			
		||||
	cally/cally-root.h		\
 | 
			
		||||
	cally/cally-stage.h		\
 | 
			
		||||
	cally/cally-text.h		\
 | 
			
		||||
	cally/cally-texture.h		\
 | 
			
		||||
	cally/cally-util.h		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
cally_sources_c = \
 | 
			
		||||
	cally/cally-actor.c		\
 | 
			
		||||
	cally/cally.c			\
 | 
			
		||||
	cally/cally-clone.c		\
 | 
			
		||||
	cally/cally-group.c		\
 | 
			
		||||
	cally/cally-rectangle.c	\
 | 
			
		||||
	cally/cally-root.c		\
 | 
			
		||||
	cally/cally-stage.c		\
 | 
			
		||||
	cally/cally-text.c		\
 | 
			
		||||
	cally/cally-texture.c		\
 | 
			
		||||
	cally/cally-util.c		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
cally_sources_private = \
 | 
			
		||||
	cally/cally-actor-private.h	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
cally_includedir = $(clutter_base_includedir)/cally
 | 
			
		||||
cally_include_HEADERS = $(cally_sources_h)
 | 
			
		||||
 | 
			
		||||
# general build rules:
 | 
			
		||||
# you should not need to modify anything below this point
 | 
			
		||||
 | 
			
		||||
# glib-genmarshal rules
 | 
			
		||||
glib_marshal_list = clutter-marshal.list
 | 
			
		||||
glib_marshal_prefix = _clutter_marshal
 | 
			
		||||
include $(srcdir)/Makefile.am.marshal
 | 
			
		||||
 | 
			
		||||
# glib-mkenums rules
 | 
			
		||||
glib_enum_h = clutter-enum-types.h
 | 
			
		||||
glib_enum_c = clutter-enum-types.c
 | 
			
		||||
glib_enum_headers = $(source_h) $(deprecated_h)
 | 
			
		||||
include $(srcdir)/Makefile.am.enums
 | 
			
		||||
 | 
			
		||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA = $(pc_files)
 | 
			
		||||
DISTCLEANFILES += $(pc_files)
 | 
			
		||||
 | 
			
		||||
clutter_include_HEADERS = $(source_h) clutter.h clutter-version.h clutter-autocleanups.h clutter-mutter.h
 | 
			
		||||
nodist_clutter_include_HEADERS = clutter-config.h $(built_source_h)
 | 
			
		||||
 | 
			
		||||
clutter_deprecated_HEADERS = $(deprecated_h)
 | 
			
		||||
 | 
			
		||||
mutterlibdir = $(libdir)/mutter
 | 
			
		||||
mutterlib_LTLIBRARIES = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
 | 
			
		||||
 | 
			
		||||
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_LIBADD = \
 | 
			
		||||
	$(LIBM) \
 | 
			
		||||
	$(CLUTTER_LIBS) \
 | 
			
		||||
	$(top_builddir)/../cogl/cogl/libmutter-cogl-$(LIBMUTTER_API_VERSION).la \
 | 
			
		||||
	$(top_builddir)/../cogl/cogl-pango/libmutter-cogl-pango-$(LIBMUTTER_API_VERSION).la \
 | 
			
		||||
	$(top_builddir)/../cogl/cogl-path/libmutter-cogl-path-$(LIBMUTTER_API_VERSION).la \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
 | 
			
		||||
	$(backend_source_c) \
 | 
			
		||||
	$(backend_source_h) \
 | 
			
		||||
	$(backend_source_c_priv) \
 | 
			
		||||
	$(backend_source_h_priv) \
 | 
			
		||||
	$(source_c) \
 | 
			
		||||
	$(source_h) \
 | 
			
		||||
	$(source_c_priv) \
 | 
			
		||||
	$(source_h_priv) \
 | 
			
		||||
	$(deprecated_c) \
 | 
			
		||||
	$(deprecated_h) \
 | 
			
		||||
	$(deprecated_c_priv) \
 | 
			
		||||
	$(deprecated_h_priv) \
 | 
			
		||||
	$(cally_sources_c) \
 | 
			
		||||
	$(cally_sources_h) \
 | 
			
		||||
	$(cally_sources_private) \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
nodist_libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
 | 
			
		||||
	$(backend_source_built) \
 | 
			
		||||
	$(built_source_c) \
 | 
			
		||||
	$(built_source_h)
 | 
			
		||||
 | 
			
		||||
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_LDFLAGS = \
 | 
			
		||||
	$(CLUTTER_LINK_FLAGS) \
 | 
			
		||||
	$(CLUTTER_LT_LDFLAGS) \
 | 
			
		||||
	-export-dynamic \
 | 
			
		||||
	-rpath $(mutterlibdir) \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
install-exec-local:
 | 
			
		||||
	test -z "$(mutterlibdir)" || $(MKDIR_P) "$(DESTDIR)$(mutterlibdir)"
 | 
			
		||||
	for lib in `echo $(compat_libs)`; do \
 | 
			
		||||
	  (cd $(DESTDIR)$(mutterlibdir) && \
 | 
			
		||||
	    rm -f $$lib.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION); \
 | 
			
		||||
	  ) ; \
 | 
			
		||||
	  (cd $(DESTDIR)$(mutterlibdir) && \
 | 
			
		||||
	    { ln -s -f libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0 || \
 | 
			
		||||
	      { rm -f $$lib.0 && ln -s libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0; }; \
 | 
			
		||||
	    } \
 | 
			
		||||
	  ) ; \
 | 
			
		||||
	  (cd $(DESTDIR)$(mutterlibdir) && \
 | 
			
		||||
	    { ln -s -f libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib || \
 | 
			
		||||
	      { rm -f $$lib && ln -s libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib; }; \
 | 
			
		||||
	    } \
 | 
			
		||||
	  ) ; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
# gobject-introspection rules
 | 
			
		||||
-include $(INTROSPECTION_MAKEFILE)
 | 
			
		||||
 | 
			
		||||
INTROSPECTION_SCANNER_ARGS = \
 | 
			
		||||
	--add-include-path=$(top_builddir)/../cogl/cogl \
 | 
			
		||||
	--add-include-path=$(top_builddir)/../cogl/cogl-pango
 | 
			
		||||
INTROSPECTION_COMPILER_ARGS = \
 | 
			
		||||
	--includedir=$(top_builddir)/../cogl/cogl \
 | 
			
		||||
	--includedir=$(top_builddir)/../cogl/cogl-pango
 | 
			
		||||
INTROSPECTION_SCANNER_ENV = \
 | 
			
		||||
	PKG_CONFIG_PATH=$(top_builddir)/../cogl/cogl/:$(top_builddir)/../cogl/cogl-pango/:$${PKG_CONFIG_PATH}
 | 
			
		||||
 | 
			
		||||
Clutter-@LIBMUTTER_API_VERSION@.gir: libmutter-clutter-@LIBMUTTER_API_VERSION@.la Makefile
 | 
			
		||||
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = Clutter
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_VERSION = @LIBMUTTER_API_VERSION@
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_FILES = \
 | 
			
		||||
	$(clutter_include_HEADERS) \
 | 
			
		||||
	$(clutter_deprecated_HEADERS) \
 | 
			
		||||
	$(nodist_clutter_include_HEADERS) \
 | 
			
		||||
	$(source_c) \
 | 
			
		||||
	$(deprecated_c) \
 | 
			
		||||
	$(built_source_c)
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-@LIBMUTTER_API_VERSION@ CoglPango-@LIBMUTTER_API_VERSION@ Atk-1.0 Json-1.0
 | 
			
		||||
Clutter_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
 | 
			
		||||
	--warn-all \
 | 
			
		||||
	--c-include='clutter/clutter.h' \
 | 
			
		||||
	--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@
 | 
			
		||||
 | 
			
		||||
INTROSPECTION_GIRS += Clutter-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
Cally-@LIBMUTTER_API_VERSION@.gir: Makefile Clutter-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
Cally_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = Cally
 | 
			
		||||
Cally_@LIBMUTTER_API_VERSION@_gir_VERSION = @LIBMUTTER_API_VERSION@
 | 
			
		||||
Cally_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
 | 
			
		||||
Cally_@LIBMUTTER_API_VERSION@_gir_FILES = $(cally_sources_h) $(cally_sources_c)
 | 
			
		||||
Cally_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
 | 
			
		||||
Cally_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
 | 
			
		||||
	--warn-all \
 | 
			
		||||
	--c-include='cally/cally.h' \
 | 
			
		||||
	--pkg-export=mutter-cally-@LIBMUTTER_API_VERSION@ \
 | 
			
		||||
	--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
INTROSPECTION_GIRS += Cally-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
ClutterX11-@LIBMUTTER_API_VERSION@.gir: Makefile Clutter-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
ClutterX11_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = ClutterX11
 | 
			
		||||
ClutterX11_@LIBMUTTER_API_VERSION@_gir_INCLUDES = xlib-2.0
 | 
			
		||||
ClutterX11_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la
 | 
			
		||||
ClutterX11_@LIBMUTTER_API_VERSION@_gir_FILES = $(x11_introspection)
 | 
			
		||||
ClutterX11_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
 | 
			
		||||
ClutterX11_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
 | 
			
		||||
	--warn-all \
 | 
			
		||||
	--c-include='clutter/x11/clutter-x11.h' \
 | 
			
		||||
	--pkg-export=mutter-clutter-x11-@LIBMUTTER_API_VERSION@ \
 | 
			
		||||
	--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
INTROSPECTION_GIRS += ClutterX11-@LIBMUTTER_API_VERSION@.gir
 | 
			
		||||
 | 
			
		||||
# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
 | 
			
		||||
# install anything - we need to install inside our prefix.
 | 
			
		||||
girdir = $(mutterlibdir)
 | 
			
		||||
gir_DATA = $(INTROSPECTION_GIRS)
 | 
			
		||||
 | 
			
		||||
typelibdir = $(mutterlibdir)
 | 
			
		||||
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
	Makefile.am.marshal	\
 | 
			
		||||
	Makefile.am.enums
 | 
			
		||||
 | 
			
		||||
CLEANFILES += $(gir_DATA) $(typelib_DATA)
 | 
			
		||||
							
								
								
									
										52
									
								
								clutter/clutter/Makefile.am.enums
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								clutter/clutter/Makefile.am.enums
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
# Rules for generating enumeration types using glib-mkenums
 | 
			
		||||
#
 | 
			
		||||
# Define:
 | 
			
		||||
# 	glib_enum_h = header template file
 | 
			
		||||
# 	glib_enum_c = source template file
 | 
			
		||||
# 	glib_enum_headers = list of headers to parse
 | 
			
		||||
#
 | 
			
		||||
# before including Makefile.am.enums. You will also need to have
 | 
			
		||||
# the following targets already defined:
 | 
			
		||||
#
 | 
			
		||||
# 	CLEANFILES
 | 
			
		||||
#	DISTCLEANFILES
 | 
			
		||||
#	BUILT_SOURCES
 | 
			
		||||
#	EXTRA_DIST
 | 
			
		||||
#
 | 
			
		||||
# Author: Emmanuele Bassi <ebassi@linux.intel.com>
 | 
			
		||||
 | 
			
		||||
# Basic sanity checks
 | 
			
		||||
$(if $(GLIB_MKENUMS),,$(error Need to define GLIB_MKENUMS))
 | 
			
		||||
 | 
			
		||||
$(if $(or $(glib_enum_h), \
 | 
			
		||||
          $(glib_enum_c)),, \
 | 
			
		||||
    $(error Need to define glib_enum_h and glib_enum_c))
 | 
			
		||||
 | 
			
		||||
$(if $(glib_enum_headers),,$(error Need to define glib_enum_headers))
 | 
			
		||||
 | 
			
		||||
enum_tmpl_h=$(addprefix $(srcdir)/, $(glib_enum_h:.h=.h.in))
 | 
			
		||||
enum_tmpl_c=$(addprefix $(srcdir)/, $(glib_enum_c:.c=.c.in))
 | 
			
		||||
enum_headers=$(addprefix $(srcdir)/, $(glib_enum_headers))
 | 
			
		||||
 | 
			
		||||
CLEANFILES += stamp-enum-types
 | 
			
		||||
DISTCLEANFILES += $(glib_enum_h) $(glib_enum_c)
 | 
			
		||||
BUILT_SOURCES += $(glib_enum_h) $(glib_enum_c)
 | 
			
		||||
EXTRA_DIST += $(enum_tmpl_h) $(enum_tmpl_c)
 | 
			
		||||
 | 
			
		||||
stamp-enum-types: $(enum_headers) $(enum_tmpl_h)
 | 
			
		||||
	$(AM_V_GEN)$(GLIB_MKENUMS) \
 | 
			
		||||
		--template $(enum_tmpl_h) \
 | 
			
		||||
	$(enum_headers) > xgen-eh \
 | 
			
		||||
	&& (cmp -s xgen-eh $(glib_enum_h) || cp -f xgen-eh $(glib_enum_h)) \
 | 
			
		||||
	&& rm -f xgen-eh \
 | 
			
		||||
	&& echo timestamp > $(@F)
 | 
			
		||||
 | 
			
		||||
$(glib_enum_h): stamp-enum-types
 | 
			
		||||
	@true
 | 
			
		||||
 | 
			
		||||
$(glib_enum_c): $(enum_headers) $(enum_tmpl_h) $(enum_tmpl_c)
 | 
			
		||||
	$(AM_V_GEN)$(GLIB_MKENUMS) \
 | 
			
		||||
		--template $(enum_tmpl_c) \
 | 
			
		||||
	$(enum_headers) > xgen-ec \
 | 
			
		||||
	&& cp -f xgen-ec $(glib_enum_c) \
 | 
			
		||||
	&& rm -f xgen-ec
 | 
			
		||||
							
								
								
									
										54
									
								
								clutter/clutter/Makefile.am.marshal
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								clutter/clutter/Makefile.am.marshal
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
# Rules for generating marshal files using glib-genmarshal
 | 
			
		||||
#
 | 
			
		||||
# Define:
 | 
			
		||||
# 	glib_marshal_list = marshal list file
 | 
			
		||||
# 	glib_marshal_prefix = prefix for marshal functions
 | 
			
		||||
#
 | 
			
		||||
# before including Makefile.am.marshal. You will also need to have
 | 
			
		||||
# the following targets already defined:
 | 
			
		||||
#
 | 
			
		||||
# 	CLEANFILES
 | 
			
		||||
#	DISTCLEANFILES
 | 
			
		||||
#	BUILT_SOURCES
 | 
			
		||||
#	EXTRA_DIST
 | 
			
		||||
#
 | 
			
		||||
# Author: Emmanuele Bassi <ebassi@linux.intel.com>
 | 
			
		||||
 | 
			
		||||
# Basic sanity checks
 | 
			
		||||
$(if $(GLIB_GENMARSHAL),,$(error Need to define GLIB_GENMARSHAL))
 | 
			
		||||
 | 
			
		||||
$(if $(or $(glib_marshal_list), \
 | 
			
		||||
          $(glib_marshal_prefix)),, \
 | 
			
		||||
    $(error Need to define glib_marshal_list and glib_marshal_prefix))
 | 
			
		||||
 | 
			
		||||
marshal_h = $(glib_marshal_list:.list=.h)
 | 
			
		||||
marshal_c = $(glib_marshal_list:.list=.c)
 | 
			
		||||
marshal_list = $(addprefix $(srcdir)/, $(glib_marshal_list))
 | 
			
		||||
 | 
			
		||||
CLEANFILES += stamp-marshal
 | 
			
		||||
DISTCLEANFILES += $(marshal_h) $(marshal_c)
 | 
			
		||||
BUILT_SOURCES += $(marshal_h) $(marshal_c)
 | 
			
		||||
EXTRA_DIST += $(marshal_list)
 | 
			
		||||
 | 
			
		||||
stamp-marshal: $(marshal_list)
 | 
			
		||||
	$(AM_V_GEN)$(GLIB_GENMARSHAL) \
 | 
			
		||||
		--prefix=$(glib_marshal_prefix) \
 | 
			
		||||
		--header \
 | 
			
		||||
		--valist-marshallers \
 | 
			
		||||
	$(marshal_list) > xgen-mh \
 | 
			
		||||
	&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
 | 
			
		||||
	&& rm -f xgen-mh \
 | 
			
		||||
	&& echo timestamp > $(@F)
 | 
			
		||||
 | 
			
		||||
$(marshal_h): stamp-marshal
 | 
			
		||||
	@true
 | 
			
		||||
 | 
			
		||||
$(marshal_c): $(marshal_h)
 | 
			
		||||
	$(AM_V_GEN)$(GLIB_GENMARSHAL) \
 | 
			
		||||
		--prefix=$(glib_marshal_prefix) \
 | 
			
		||||
		--body \
 | 
			
		||||
		--valist-marshallers \
 | 
			
		||||
		--prototypes \
 | 
			
		||||
	$(marshal_list) > xgen-mc \
 | 
			
		||||
	&& (cmp -s xgen-mc $(marshal_c) || cp -f xgen-mc $(marshal_c)) \
 | 
			
		||||
	&& rm -f xgen-mc
 | 
			
		||||
@@ -67,7 +67,9 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <glib.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
@@ -310,7 +312,11 @@ cally_actor_finalize (GObject *obj)
 | 
			
		||||
 | 
			
		||||
  _cally_actor_clean_action_list (cally_actor);
 | 
			
		||||
 | 
			
		||||
  g_clear_handle_id (&priv->action_idle_handler, g_source_remove);
 | 
			
		||||
  if (priv->action_idle_handler)
 | 
			
		||||
    {
 | 
			
		||||
      g_source_remove (priv->action_idle_handler);
 | 
			
		||||
      priv->action_idle_handler = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (priv->action_queue)
 | 
			
		||||
    {
 | 
			
		||||
@@ -600,11 +606,10 @@ cally_actor_real_remove_actor (ClutterActor *container,
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), 0);
 | 
			
		||||
 | 
			
		||||
  atk_parent = ATK_OBJECT (data);
 | 
			
		||||
  atk_child = clutter_actor_get_accessible (actor);
 | 
			
		||||
 | 
			
		||||
  if (clutter_actor_has_accessible (actor))
 | 
			
		||||
  if (atk_child)
 | 
			
		||||
    {
 | 
			
		||||
      atk_child = clutter_actor_get_accessible (actor);
 | 
			
		||||
 | 
			
		||||
      g_value_init (&values.old_value, G_TYPE_POINTER);
 | 
			
		||||
      g_value_set_pointer (&values.old_value, atk_parent);
 | 
			
		||||
 | 
			
		||||
@@ -654,7 +659,7 @@ cally_actor_get_extents (AtkComponent *component,
 | 
			
		||||
  ClutterActor *actor      = NULL;
 | 
			
		||||
  gint          top_level_x, top_level_y;
 | 
			
		||||
  gfloat        f_width, f_height;
 | 
			
		||||
  graphene_point3d_t verts[4];
 | 
			
		||||
  ClutterVertex verts[4];
 | 
			
		||||
  ClutterActor  *stage = NULL;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CALLY_IS_ACTOR (component));
 | 
			
		||||
@@ -734,7 +739,11 @@ cally_actor_grab_focus (AtkComponent    *component)
 | 
			
		||||
 *
 | 
			
		||||
 * This gets the top level origin, it is, the position of the stage in
 | 
			
		||||
 * the global screen. You can see it as the absolute display position
 | 
			
		||||
 * of the stage. This is 0,0 for a compositor.
 | 
			
		||||
 * of the stage.
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: only the case with x11 is implemented, other backends are
 | 
			
		||||
 * required
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_cally_actor_get_top_level_origin (ClutterActor *actor,
 | 
			
		||||
@@ -742,11 +751,54 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
 | 
			
		||||
                                   gint         *yp)
 | 
			
		||||
{
 | 
			
		||||
  /* default values */
 | 
			
		||||
  gint x = 0;
 | 
			
		||||
  gint y = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_WINDOWING_X11
 | 
			
		||||
  if (clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActor *stage      = NULL;
 | 
			
		||||
      Display *display    = NULL;
 | 
			
		||||
      Window root_window;
 | 
			
		||||
      Window stage_window;
 | 
			
		||||
      Window child;
 | 
			
		||||
      gint return_val = 0;
 | 
			
		||||
 | 
			
		||||
      stage = clutter_actor_get_stage (actor);
 | 
			
		||||
 | 
			
		||||
      /* FIXME: what happens if you use another display with
 | 
			
		||||
         clutter_backend_x11_set_display ?*/
 | 
			
		||||
      display = clutter_x11_get_default_display ();
 | 
			
		||||
      root_window = clutter_x11_get_root_window ();
 | 
			
		||||
      stage_window = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
 | 
			
		||||
 | 
			
		||||
      return_val = XTranslateCoordinates (display, stage_window, root_window,
 | 
			
		||||
                                          0, 0, &x, &y,
 | 
			
		||||
                                          &child);
 | 
			
		||||
 | 
			
		||||
      if (!return_val)
 | 
			
		||||
        g_warning ("[x11] We were not able to get proper absolute "
 | 
			
		||||
                   "position of the stage");
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
      static gboolean yet_warned = FALSE;
 | 
			
		||||
 | 
			
		||||
      if (!yet_warned)
 | 
			
		||||
        {
 | 
			
		||||
          yet_warned = TRUE;
 | 
			
		||||
 | 
			
		||||
          g_warning ("The current Clutter backend does not support using "
 | 
			
		||||
                     "atk_component_get_extents() with ATK_XY_SCREEN.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (xp)
 | 
			
		||||
    *xp = 0;
 | 
			
		||||
    *xp = x;
 | 
			
		||||
 | 
			
		||||
  if (yp)
 | 
			
		||||
    *yp = 0;
 | 
			
		||||
    *yp = y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* AtkAction implementation */
 | 
			
		||||
@@ -994,8 +1046,10 @@ _cally_actor_clean_action_list (CallyActor *cally_actor)
 | 
			
		||||
 | 
			
		||||
  if (priv->action_list)
 | 
			
		||||
    {
 | 
			
		||||
      g_list_free_full (priv->action_list,
 | 
			
		||||
                        (GDestroyNotify) _cally_actor_destroy_action_info);
 | 
			
		||||
      g_list_foreach (priv->action_list,
 | 
			
		||||
                      (GFunc) _cally_actor_destroy_action_info,
 | 
			
		||||
                      NULL);
 | 
			
		||||
      g_list_free (priv->action_list);
 | 
			
		||||
      priv->action_list = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -126,19 +126,19 @@ struct _CallyActorClass
 | 
			
		||||
  gpointer _padding_dummy[32];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_actor_get_type              (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject* cally_actor_new                   (ClutterActor        *actor);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
guint      cally_actor_add_action            (CallyActor          *cally_actor,
 | 
			
		||||
                                              const gchar         *action_name,
 | 
			
		||||
                                              const gchar         *action_description,
 | 
			
		||||
                                              const gchar         *action_keybinding,
 | 
			
		||||
                                              CallyActionFunc      action_func);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_6
 | 
			
		||||
guint      cally_actor_add_action_full       (CallyActor          *cally_actor,
 | 
			
		||||
                                              const gchar         *action_name,
 | 
			
		||||
                                              const gchar         *action_description,
 | 
			
		||||
@@ -147,11 +147,11 @@ guint      cally_actor_add_action_full       (CallyActor          *cally_actor,
 | 
			
		||||
                                              gpointer             user_data,
 | 
			
		||||
                                              GDestroyNotify       notify);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gboolean   cally_actor_remove_action         (CallyActor          *cally_actor,
 | 
			
		||||
                                              gint                 action_id);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gboolean   cally_actor_remove_action_by_name (CallyActor          *cally_actor,
 | 
			
		||||
                                              const gchar         *action_name);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -74,9 +74,9 @@ struct _CallyCloneClass
 | 
			
		||||
  gpointer _padding_dummy[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_clone_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject *cally_clone_new      (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										147
									
								
								clutter/clutter/cally/cally-group.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								clutter/clutter/cally/cally-group.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
/* CALLY - The Clutter Accessibility Implementation Library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2008 Igalia, S.L.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
 | 
			
		||||
 *
 | 
			
		||||
 * Based on GailContainer from GAIL
 | 
			
		||||
 * Copyright 2001, 2002, 2003 Sun Microsystems Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library; if not, write to the
 | 
			
		||||
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
			
		||||
 * Boston, MA 02111-1307, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SECTION:cally-group
 | 
			
		||||
 * @Title: CallyGroup
 | 
			
		||||
 * @short_description: Implementation of the ATK interfaces for a #ClutterGroup
 | 
			
		||||
 * @see_also: #ClutterGroup
 | 
			
		||||
 *
 | 
			
		||||
 * #CallyGroup implements the required ATK interfaces of #ClutterGroup
 | 
			
		||||
 * In particular it exposes each of the Clutter actors contained in the
 | 
			
		||||
 * group.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
 | 
			
		||||
#include "cally-group.h"
 | 
			
		||||
#include "cally-actor-private.h"
 | 
			
		||||
 | 
			
		||||
static gint       cally_group_get_n_children  (AtkObject *obj);
 | 
			
		||||
static AtkObject* cally_group_ref_child       (AtkObject *obj,
 | 
			
		||||
                                              gint       i);
 | 
			
		||||
static void       cally_group_real_initialize (AtkObject *obj,
 | 
			
		||||
                                              gpointer   data);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (CallyGroup, cally_group, CALLY_TYPE_ACTOR)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_group_class_init (CallyGroupClass *klass)
 | 
			
		||||
{
 | 
			
		||||
/*   GObjectClass   *gobject_class = G_OBJECT_CLASS (klass); */
 | 
			
		||||
  AtkObjectClass *class         = ATK_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  class->get_n_children = cally_group_get_n_children;
 | 
			
		||||
  class->ref_child      = cally_group_ref_child;
 | 
			
		||||
  class->initialize     = cally_group_real_initialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_group_init (CallyGroup      *group)
 | 
			
		||||
{
 | 
			
		||||
  /* nothing to do yet */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * cally_group_new:
 | 
			
		||||
 * @actor: a #ClutterGroup
 | 
			
		||||
 *
 | 
			
		||||
 * Creates a #CallyGroup for @actor
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: the newly created #CallyGroup
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
AtkObject *
 | 
			
		||||
cally_group_new (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  GObject   *object     = NULL;
 | 
			
		||||
  AtkObject *accessible = NULL;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_GROUP (actor), NULL);
 | 
			
		||||
 | 
			
		||||
  object = g_object_new (CALLY_TYPE_GROUP, NULL);
 | 
			
		||||
 | 
			
		||||
  accessible = ATK_OBJECT (object);
 | 
			
		||||
  atk_object_initialize (accessible, actor);
 | 
			
		||||
 | 
			
		||||
  return accessible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gint
 | 
			
		||||
cally_group_get_n_children (AtkObject *obj)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *actor = NULL;
 | 
			
		||||
  gint          count = 0;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CALLY_IS_GROUP (obj), count);
 | 
			
		||||
 | 
			
		||||
  actor = CALLY_GET_CLUTTER_ACTOR (obj);
 | 
			
		||||
 | 
			
		||||
  if (actor == NULL) /* defunct */
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_GROUP(actor), count);
 | 
			
		||||
 | 
			
		||||
  count = clutter_actor_get_n_children (actor);
 | 
			
		||||
 | 
			
		||||
  return count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static AtkObject*
 | 
			
		||||
cally_group_ref_child (AtkObject *obj,
 | 
			
		||||
                       gint       i)
 | 
			
		||||
{
 | 
			
		||||
  AtkObject    *accessible = NULL;
 | 
			
		||||
  ClutterActor *actor      = NULL;
 | 
			
		||||
  ClutterActor *child      = NULL;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CALLY_IS_GROUP (obj), NULL);
 | 
			
		||||
  g_return_val_if_fail ((i >= 0), NULL);
 | 
			
		||||
 | 
			
		||||
  actor = CALLY_GET_CLUTTER_ACTOR (obj);
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_GROUP(actor), NULL);
 | 
			
		||||
  child = clutter_actor_get_child_at_index (actor, i);
 | 
			
		||||
 | 
			
		||||
  if (!child)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  accessible = clutter_actor_get_accessible (child);
 | 
			
		||||
 | 
			
		||||
  if (accessible != NULL)
 | 
			
		||||
    g_object_ref (accessible);
 | 
			
		||||
 | 
			
		||||
  return accessible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_group_real_initialize (AtkObject *obj,
 | 
			
		||||
                            gpointer   data)
 | 
			
		||||
{
 | 
			
		||||
  ATK_OBJECT_CLASS (cally_group_parent_class)->initialize (obj, data);
 | 
			
		||||
 | 
			
		||||
  obj->role = ATK_ROLE_PANEL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										87
									
								
								clutter/clutter/cally/cally-group.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								clutter/clutter/cally/cally-group.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
/* CALLY - The Clutter Accessibility Implementation Library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2008 Igalia, S.L.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
 | 
			
		||||
 *
 | 
			
		||||
 * Based on GailContainer from GAIL
 | 
			
		||||
 * Copyright 2001, 2002, 2003 Sun Microsystems Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CALLY_GROUP_H__
 | 
			
		||||
#define __CALLY_GROUP_H__
 | 
			
		||||
 | 
			
		||||
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
 | 
			
		||||
#error "Only <cally/cally.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <cally/cally-actor.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CALLY_TYPE_GROUP                         (cally_group_get_type ())
 | 
			
		||||
#define CALLY_GROUP(obj)                         (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALLY_TYPE_GROUP, CallyGroup))
 | 
			
		||||
#define CALLY_GROUP_CLASS(klass)                 (G_TYPE_CHECK_CLASS_CAST ((klass), CALLY_TYPE_GROUP, CallyGroupClass))
 | 
			
		||||
#define CALLY_IS_GROUP(obj)                      (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALLY_TYPE_GROUP))
 | 
			
		||||
#define CALLY_IS_GROUP_CLASS(klass)              (G_TYPE_CHECK_CLASS_TYPE ((klass), CALLY_TYPE_GROUP))
 | 
			
		||||
#define CALLY_GROUP_GET_CLASS(obj)               (G_TYPE_INSTANCE_GET_CLASS ((obj), CALLY_TYPE_GROUP, CallyGroupClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _CallyGroup        CallyGroup;
 | 
			
		||||
typedef struct _CallyGroupClass   CallyGroupClass;
 | 
			
		||||
typedef struct _CallyGroupPrivate CallyGroupPrivate;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * CallyGroup:
 | 
			
		||||
 *
 | 
			
		||||
 * The <structname>CallyGroup</structname> structure contains only
 | 
			
		||||
 * private data and should be accessed using the provided API
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _CallyGroup
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActor parent;
 | 
			
		||||
 | 
			
		||||
  CallyGroupPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * CallyGroupClass:
 | 
			
		||||
 *
 | 
			
		||||
 * The <structname>CallyGroupClass</structname> structure contains only
 | 
			
		||||
 * private data
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _CallyGroupClass
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActorClass parent_class;
 | 
			
		||||
 | 
			
		||||
  /* padding for future expansion */
 | 
			
		||||
  gpointer _padding_dummy[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_group_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject* cally_group_new      (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CALLY_GROUP_H__ */
 | 
			
		||||
@@ -34,9 +34,9 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gboolean cally_get_cally_initialized (void);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gboolean cally_accessibility_init    (void);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								clutter/clutter/cally/cally-rectangle.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								clutter/clutter/cally/cally-rectangle.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
/* CALLY - The Clutter Accessibility Implementation Library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2009 Igalia, S.L.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library; if not, write to the
 | 
			
		||||
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
			
		||||
 * Boston, MA 02111-1307, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SECTION:cally-rectangle
 | 
			
		||||
 * @short_description: Implementation of the ATK interfaces for a #ClutterRectangle
 | 
			
		||||
 * @see_also: #ClutterRectangle
 | 
			
		||||
 *
 | 
			
		||||
 * #CallyRectangle implements the required ATK interfaces of #ClutterRectangle
 | 
			
		||||
 *
 | 
			
		||||
 * In particular it sets a proper role for the rectangle.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
 | 
			
		||||
#include "cally-rectangle.h"
 | 
			
		||||
#include "cally-actor-private.h"
 | 
			
		||||
 | 
			
		||||
#include "clutter-color.h"
 | 
			
		||||
#include "deprecated/clutter-rectangle.h"
 | 
			
		||||
 | 
			
		||||
/* AtkObject */
 | 
			
		||||
static void                  cally_rectangle_real_initialize (AtkObject *obj,
 | 
			
		||||
                                                              gpointer   data);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (CallyRectangle, cally_rectangle, CALLY_TYPE_ACTOR)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_rectangle_class_init (CallyRectangleClass *klass)
 | 
			
		||||
{
 | 
			
		||||
/*   GObjectClass   *gobject_class = G_OBJECT_CLASS (klass); */
 | 
			
		||||
  AtkObjectClass *class         = ATK_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  class->initialize      = cally_rectangle_real_initialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_rectangle_init (CallyRectangle *rectangle)
 | 
			
		||||
{
 | 
			
		||||
  /* nothing to do yet */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * cally_rectangle_new:
 | 
			
		||||
 * @actor: a #ClutterActor
 | 
			
		||||
 *
 | 
			
		||||
 * Creates a new #CallyRectangle for the given @actor. @actor must be
 | 
			
		||||
 * a #ClutterRectangle.
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: the newly created #AtkObject
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
AtkObject*
 | 
			
		||||
cally_rectangle_new (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  GObject   *object     = NULL;
 | 
			
		||||
  AtkObject *accessible = NULL;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_RECTANGLE (actor), NULL);
 | 
			
		||||
 | 
			
		||||
  object = g_object_new (CALLY_TYPE_RECTANGLE, NULL);
 | 
			
		||||
 | 
			
		||||
  accessible = ATK_OBJECT (object);
 | 
			
		||||
  atk_object_initialize (accessible, actor);
 | 
			
		||||
 | 
			
		||||
  return accessible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_rectangle_real_initialize (AtkObject *obj,
 | 
			
		||||
                                 gpointer   data)
 | 
			
		||||
{
 | 
			
		||||
  ATK_OBJECT_CLASS (cally_rectangle_parent_class)->initialize (obj, data);
 | 
			
		||||
 | 
			
		||||
  obj->role = ATK_ROLE_IMAGE;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								clutter/clutter/cally/cally-rectangle.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								clutter/clutter/cally/cally-rectangle.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
/* CALLY - The Clutter Accessibility Implementation Library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2009 Igalia, S.L.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CALLY_RECTANGLE_H__
 | 
			
		||||
#define __CALLY_RECTANGLE_H__
 | 
			
		||||
 | 
			
		||||
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
 | 
			
		||||
#error "Only <cally/cally.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <cally/cally-actor.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CALLY_TYPE_RECTANGLE            (cally_rectangle_get_type ())
 | 
			
		||||
#define CALLY_RECTANGLE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALLY_TYPE_RECTANGLE, CallyRectangle))
 | 
			
		||||
#define CALLY_RECTANGLE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CALLY_TYPE_RECTANGLE, CallyRectangleClass))
 | 
			
		||||
#define CALLY_IS_RECTANGLE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALLY_TYPE_RECTANGLE))
 | 
			
		||||
#define CALLY_IS_RECTANGLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALLY_TYPE_RECTANGLE))
 | 
			
		||||
#define CALLY_RECTANGLE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CALLY_TYPE_RECTANGLE, CallyRectangleClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _CallyRectangle         CallyRectangle;
 | 
			
		||||
typedef struct _CallyRectangleClass    CallyRectangleClass;
 | 
			
		||||
typedef struct _CallyRectanglePrivate  CallyRectanglePrivate;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * CallyRectangle:
 | 
			
		||||
 *
 | 
			
		||||
 * The <structname>CallyRectangle</structname> structure contains only private
 | 
			
		||||
 * data and should be accessed using the provided API
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _CallyRectangle
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActor parent;
 | 
			
		||||
 | 
			
		||||
  CallyRectanglePrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * CallyRectangleClass:
 | 
			
		||||
 *
 | 
			
		||||
 * The <structname>CallyRectangleClass</structname> structure contains
 | 
			
		||||
 * only private data
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _CallyRectangleClass
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActorClass parent_class;
 | 
			
		||||
 | 
			
		||||
  /* padding for future expansion */
 | 
			
		||||
  gpointer _padding_dummy[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_rectangle_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject* cally_rectangle_new      (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CALLY_RECTANGLE_H__ */
 | 
			
		||||
@@ -75,8 +75,8 @@ struct _CallyRootPrivate
 | 
			
		||||
  GSList *stage_list;
 | 
			
		||||
 | 
			
		||||
  /* signals id */
 | 
			
		||||
  gulong stage_added_id;
 | 
			
		||||
  gulong stage_removed_id;
 | 
			
		||||
  guint stage_added_id;
 | 
			
		||||
  guint stage_removed_id;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (CallyRoot, cally_root,  ATK_TYPE_GOBJECT_ACCESSIBLE)
 | 
			
		||||
@@ -149,9 +149,11 @@ cally_root_finalize (GObject *object)
 | 
			
		||||
 | 
			
		||||
  stage_manager = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (root));
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&root->priv->stage_added_id, stage_manager);
 | 
			
		||||
  g_signal_handler_disconnect (stage_manager,
 | 
			
		||||
                               root->priv->stage_added_id);
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&root->priv->stage_removed_id, stage_manager);
 | 
			
		||||
  g_signal_handler_disconnect (stage_manager,
 | 
			
		||||
                               root->priv->stage_added_id);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (cally_root_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -74,9 +74,9 @@ struct _CallyRootClass
 | 
			
		||||
  gpointer _padding_dummy[16];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_root_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject *cally_root_new      (void);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ struct _CallyStagePrivate
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE (CallyStage,
 | 
			
		||||
                         cally_stage,
 | 
			
		||||
                         CALLY_TYPE_ACTOR,
 | 
			
		||||
                         CALLY_TYPE_GROUP,
 | 
			
		||||
                         G_ADD_PRIVATE (CallyStage)
 | 
			
		||||
                         G_IMPLEMENT_INTERFACE (ATK_TYPE_WINDOW,
 | 
			
		||||
                                                cally_stage_window_interface_init));
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
#error "Only <cally/cally.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <cally/cally-actor.h>
 | 
			
		||||
#include <cally/cally-group.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
@@ -52,7 +52,7 @@ typedef struct _CallyStagePrivate CallyStagePrivate;
 | 
			
		||||
struct _CallyStage
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActor parent;
 | 
			
		||||
  CallyGroup parent;
 | 
			
		||||
 | 
			
		||||
  CallyStagePrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
@@ -68,15 +68,15 @@ struct _CallyStage
 | 
			
		||||
struct _CallyStageClass
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActorClass parent_class;
 | 
			
		||||
  CallyGroupClass parent_class;
 | 
			
		||||
 | 
			
		||||
  /* padding for future expansion */
 | 
			
		||||
  gpointer _padding_dummy[16];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_stage_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject *cally_stage_new      (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,9 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "cally-text.h"
 | 
			
		||||
#include "cally-actor-private.h"
 | 
			
		||||
@@ -247,7 +249,11 @@ cally_text_finalize   (GObject *obj)
 | 
			
		||||
/*   g_object_unref (cally_text->priv->textutil); */
 | 
			
		||||
/*   cally_text->priv->textutil = NULL; */
 | 
			
		||||
 | 
			
		||||
  g_clear_handle_id (&cally_text->priv->insert_idle_handler, g_source_remove);
 | 
			
		||||
  if (cally_text->priv->insert_idle_handler)
 | 
			
		||||
    {
 | 
			
		||||
      g_source_remove (cally_text->priv->insert_idle_handler);
 | 
			
		||||
      cally_text->priv->insert_idle_handler = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (cally_text_parent_class)->finalize (obj);
 | 
			
		||||
}
 | 
			
		||||
@@ -1434,7 +1440,7 @@ static void cally_text_get_character_extents (AtkText *text,
 | 
			
		||||
  PangoLayout *layout;
 | 
			
		||||
  PangoRectangle extents;
 | 
			
		||||
  const gchar *text_value;
 | 
			
		||||
  graphene_point3d_t verts[4];
 | 
			
		||||
  ClutterVertex verts[4];
 | 
			
		||||
 | 
			
		||||
  actor = CALLY_GET_CLUTTER_ACTOR (text);
 | 
			
		||||
  if (actor == NULL) /* State is defunct */
 | 
			
		||||
@@ -2290,7 +2296,7 @@ _cally_misc_get_index_at_point (ClutterText *clutter_text,
 | 
			
		||||
  gint index, x_window, y_window, x_toplevel, y_toplevel;
 | 
			
		||||
  gint x_temp, y_temp;
 | 
			
		||||
  gboolean ret;
 | 
			
		||||
  graphene_point3d_t verts[4];
 | 
			
		||||
  ClutterVertex verts[4];
 | 
			
		||||
  PangoLayout *layout;
 | 
			
		||||
  gint x_layout, y_layout;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -74,9 +74,9 @@ struct _CallyTextClass
 | 
			
		||||
  gpointer _padding_dummy[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_text_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject* cally_text_new      (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								clutter/clutter/cally/cally-texture.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								clutter/clutter/cally/cally-texture.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
/* CALLY - The Clutter Accessibility Implementation Library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2009 Igalia, S.L.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library; if not, write to the
 | 
			
		||||
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
			
		||||
 * Boston, MA 02111-1307, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SECTION:cally-texture
 | 
			
		||||
 * @Title: CallyTexture
 | 
			
		||||
 * @short_description: Implementation of the ATK interfaces for a #ClutterTexture
 | 
			
		||||
 * @see_also: #ClutterTexture
 | 
			
		||||
 *
 | 
			
		||||
 * #CallyTexture implements the required ATK interfaces of #ClutterTexture
 | 
			
		||||
 *
 | 
			
		||||
 * In particular it sets a proper role for the texture.
 | 
			
		||||
 */
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
 | 
			
		||||
#include "cally-texture.h"
 | 
			
		||||
#include "cally-actor-private.h"
 | 
			
		||||
 | 
			
		||||
#include "deprecated/clutter-texture.h"
 | 
			
		||||
 | 
			
		||||
/* AtkObject */
 | 
			
		||||
static void                  cally_texture_real_initialize (AtkObject *obj,
 | 
			
		||||
                                                           gpointer   data);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (CallyTexture, cally_texture, CALLY_TYPE_ACTOR)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_texture_class_init (CallyTextureClass *klass)
 | 
			
		||||
{
 | 
			
		||||
/*   GObjectClass   *gobject_class = G_OBJECT_CLASS (klass); */
 | 
			
		||||
  AtkObjectClass *class         = ATK_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  class->initialize      = cally_texture_real_initialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_texture_init (CallyTexture *texture)
 | 
			
		||||
{
 | 
			
		||||
  /* nothing to do yet */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * cally_texture_new:
 | 
			
		||||
 * @actor: a #ClutterActor
 | 
			
		||||
 *
 | 
			
		||||
 * Creates a new #CallyTexture for the given @actor. @actor must be
 | 
			
		||||
 * a #ClutterTexture.
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: the newly created #AtkObject
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
AtkObject*
 | 
			
		||||
cally_texture_new (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  GObject   *object     = NULL;
 | 
			
		||||
  AtkObject *accessible = NULL;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_TEXTURE (actor), NULL);
 | 
			
		||||
 | 
			
		||||
  object = g_object_new (CALLY_TYPE_TEXTURE, NULL);
 | 
			
		||||
 | 
			
		||||
  accessible = ATK_OBJECT (object);
 | 
			
		||||
  atk_object_initialize (accessible, actor);
 | 
			
		||||
 | 
			
		||||
  return accessible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cally_texture_real_initialize (AtkObject *obj,
 | 
			
		||||
                              gpointer   data)
 | 
			
		||||
{
 | 
			
		||||
  ATK_OBJECT_CLASS (cally_texture_parent_class)->initialize (obj, data);
 | 
			
		||||
 | 
			
		||||
  /* default role */
 | 
			
		||||
  obj->role = ATK_ROLE_IMAGE;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								clutter/clutter/cally/cally-texture.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								clutter/clutter/cally/cally-texture.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
/* CALLY - The Clutter Accessibility Implementation Library
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2009 Igalia, S.L.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Alejandro Piñeiro Iglesias <apinheiro@igalia.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CALLY_TEXTURE_H__
 | 
			
		||||
#define __CALLY_TEXTURE_H__
 | 
			
		||||
 | 
			
		||||
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
 | 
			
		||||
#error "Only <cally/cally.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
#include <cally/cally-actor.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CALLY_TYPE_TEXTURE            (cally_texture_get_type ())
 | 
			
		||||
#define CALLY_TEXTURE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALLY_TYPE_TEXTURE, CallyTexture))
 | 
			
		||||
#define CALLY_TEXTURE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CALLY_TYPE_TEXTURE, CallyTextureClass))
 | 
			
		||||
#define CALLY_IS_TEXTURE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALLY_TYPE_TEXTURE))
 | 
			
		||||
#define CALLY_IS_TEXTURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALLY_TYPE_TEXTURE))
 | 
			
		||||
#define CALLY_TEXTURE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CALLY_TYPE_TEXTURE, CallyTextureClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _CallyTexture        CallyTexture;
 | 
			
		||||
typedef struct _CallyTextureClass   CallyTextureClass;
 | 
			
		||||
typedef struct _CallyTexturePrivate CallyTexturePrivate;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * CallyTexture:
 | 
			
		||||
 *
 | 
			
		||||
 * The <structname>CallyTexture</structname> structure contains only
 | 
			
		||||
 * private data and should be accessed using the provided API
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _CallyTexture
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActor parent;
 | 
			
		||||
 | 
			
		||||
  CallyTexturePrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * CallyTextureClass:
 | 
			
		||||
 *
 | 
			
		||||
 * The <structname>CallyTextureClass</structname> structure contains
 | 
			
		||||
 * only private data
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _CallyTextureClass
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  CallyActorClass parent_class;
 | 
			
		||||
 | 
			
		||||
  /* padding for future expansion */
 | 
			
		||||
  gpointer _padding_dummy[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType      cally_texture_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
AtkObject *cally_texture_new      (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CALLY_TEXTURE_H__ */
 | 
			
		||||
@@ -38,7 +38,9 @@
 | 
			
		||||
 * available any accessible object.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@@ -142,7 +144,7 @@ cally_util_get_toolkit_name (void)
 | 
			
		||||
static const gchar *
 | 
			
		||||
cally_util_get_toolkit_version (void)
 | 
			
		||||
{
 | 
			
		||||
  return MUTTER_VERSION;
 | 
			
		||||
  return CLUTTER_VERSION_S;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static guint
 | 
			
		||||
@@ -212,8 +214,6 @@ cally_util_simulate_snooper_install (void)
 | 
			
		||||
                    G_CALLBACK (cally_util_stage_added_cb), cally_key_snooper);
 | 
			
		||||
  g_signal_connect (G_OBJECT (stage_manager), "stage-removed",
 | 
			
		||||
                    G_CALLBACK (cally_util_stage_removed_cb), cally_key_snooper);
 | 
			
		||||
 | 
			
		||||
  g_slist_free (stage_list);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ struct _CallyUtilClass
 | 
			
		||||
  gpointer _padding_dummy[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType cally_util_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
void _cally_util_override_atk_util (void);
 | 
			
		||||
 
 | 
			
		||||
@@ -29,15 +29,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
 | 
			
		||||
#include "cally.h"
 | 
			
		||||
 | 
			
		||||
#include "cally-actor.h"
 | 
			
		||||
#include "cally-group.h"
 | 
			
		||||
#include "cally-stage.h"
 | 
			
		||||
#include "cally-text.h"
 | 
			
		||||
#include "cally-texture.h"
 | 
			
		||||
#include "cally-rectangle.h"
 | 
			
		||||
#include "cally-clone.h"
 | 
			
		||||
 | 
			
		||||
#include "cally-factory.h"
 | 
			
		||||
@@ -50,8 +55,11 @@
 | 
			
		||||
 | 
			
		||||
/* factories initialization*/
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_ACTOR, cally_actor, cally_actor_new)
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_GROUP, cally_group, cally_group_new)
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_STAGE, cally_stage, cally_stage_new)
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_TEXT, cally_text, cally_text_new)
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_TEXTURE, cally_texture, cally_texture_new)
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_RECTANGLE, cally_rectangle, cally_rectangle_new)
 | 
			
		||||
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_CLONE, cally_clone, cally_clone_new)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -69,8 +77,11 @@ cally_accessibility_init (void)
 | 
			
		||||
{
 | 
			
		||||
  /* setting the factories */
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_ACTOR, cally_actor);
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_GROUP, cally_group);
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_STAGE, cally_stage);
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_TEXT, cally_text);
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_TEXTURE, cally_texture);
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_RECTANGLE, cally_rectangle);
 | 
			
		||||
  CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_CLONE, cally_clone);
 | 
			
		||||
 | 
			
		||||
  /* Initialize the CallyUtility class */
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,13 @@
 | 
			
		||||
#include "cally-actor.h"
 | 
			
		||||
#include "cally-clone.h"
 | 
			
		||||
#include "cally-factory.h"
 | 
			
		||||
#include "cally-group.h"
 | 
			
		||||
#include "cally-main.h"
 | 
			
		||||
#include "cally-rectangle.h"
 | 
			
		||||
#include "cally-root.h"
 | 
			
		||||
#include "cally-stage.h"
 | 
			
		||||
#include "cally-text.h"
 | 
			
		||||
#include "cally-texture.h"
 | 
			
		||||
#include "cally-util.h"
 | 
			
		||||
 | 
			
		||||
#undef __CALLY_H_INSIDE__
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,9 @@
 | 
			
		||||
 * #ClutterAction is available since Clutter 1.4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-action.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,11 +33,28 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_TYPE_ACTION (clutter_action_get_type ())
 | 
			
		||||
#define CLUTTER_TYPE_ACTION             (clutter_action_get_type ())
 | 
			
		||||
#define CLUTTER_ACTION(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ACTION, ClutterAction))
 | 
			
		||||
#define CLUTTER_IS_ACTION(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ACTION))
 | 
			
		||||
#define CLUTTER_ACTION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_ACTION, ClutterActionClass))
 | 
			
		||||
#define CLUTTER_IS_ACTION_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_ACTION))
 | 
			
		||||
#define CLUTTER_ACTION_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_ACTION, ClutterActionClass))
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ClutterAction, clutter_action,
 | 
			
		||||
                          CLUTTER, ACTION, ClutterActorMeta);
 | 
			
		||||
typedef struct _ClutterActionClass      ClutterActionClass;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterAction:
 | 
			
		||||
 *
 | 
			
		||||
 * The #ClutterAction structure contains only private data and
 | 
			
		||||
 * should be accessed using the provided API.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _ClutterAction
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  ClutterActorMeta parent_instance;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterActionClass:
 | 
			
		||||
@@ -61,29 +78,32 @@ struct _ClutterActionClass
 | 
			
		||||
  void (* _clutter_action8) (void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_action_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
/* ClutterActor API */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_actor_add_action            (ClutterActor  *self,
 | 
			
		||||
                                                    ClutterAction *action);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_actor_add_action_with_name  (ClutterActor  *self,
 | 
			
		||||
                                                    const gchar   *name,
 | 
			
		||||
                                                    ClutterAction *action);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_actor_remove_action         (ClutterActor  *self,
 | 
			
		||||
                                                    ClutterAction *action);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_actor_remove_action_by_name (ClutterActor  *self,
 | 
			
		||||
                                                    const gchar   *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterAction *clutter_actor_get_action            (ClutterActor  *self,
 | 
			
		||||
                                                    const gchar   *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GList *        clutter_actor_get_actions           (ClutterActor  *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_actor_clear_actions         (ClutterActor  *self);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gboolean       clutter_actor_has_actions           (ClutterActor  *self);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
#ifndef __CLUTTER_ACTOR_BOX_PRIVATE_H__
 | 
			
		||||
#define __CLUTTER_ACTOR_BOX_PRIVATE_H__
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter-types.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
void _clutter_actor_box_enlarge_for_effects (ClutterActorBox *box);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CLUTTER_ACTOR_BOX_PRIVATE_H__ */
 | 
			
		||||
@@ -1,11 +1,12 @@
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
#include "clutter-types.h"
 | 
			
		||||
#include "clutter-interval.h"
 | 
			
		||||
#include "clutter-private.h"
 | 
			
		||||
#include "clutter-actor-box-private.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_actor_box_new:
 | 
			
		||||
@@ -340,7 +341,7 @@ clutter_actor_box_contains (const ClutterActorBox *box,
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_actor_box_from_vertices:
 | 
			
		||||
 * @box: a #ClutterActorBox
 | 
			
		||||
 * @verts: (array fixed-size=4): array of four #graphene_point3d_t
 | 
			
		||||
 * @verts: (array fixed-size=4): array of four #ClutterVertex
 | 
			
		||||
 *
 | 
			
		||||
 * Calculates the bounding box represented by the four vertices; for details
 | 
			
		||||
 * of the vertex array see clutter_actor_get_abs_allocation_vertices().
 | 
			
		||||
@@ -348,8 +349,8 @@ clutter_actor_box_contains (const ClutterActorBox *box,
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_actor_box_from_vertices (ClutterActorBox          *box,
 | 
			
		||||
                                 const graphene_point3d_t  verts[])
 | 
			
		||||
clutter_actor_box_from_vertices (ClutterActorBox     *box,
 | 
			
		||||
                                 const ClutterVertex  verts[])
 | 
			
		||||
{
 | 
			
		||||
  gfloat x_1, x_2, y_1, y_2;
 | 
			
		||||
 | 
			
		||||
@@ -543,104 +544,6 @@ clutter_actor_box_set_size (ClutterActorBox *box,
 | 
			
		||||
  box->y2 = box->y1 + height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_actor_box_enlarge_for_effects (ClutterActorBox *box)
 | 
			
		||||
{
 | 
			
		||||
  float width, height;
 | 
			
		||||
 | 
			
		||||
  /* The aim here is that for a given rectangle defined with floating point
 | 
			
		||||
   * coordinates we want to determine a stable quantized size in pixels
 | 
			
		||||
   * that doesn't vary due to the original box's sub-pixel position.
 | 
			
		||||
   *
 | 
			
		||||
   * The reason this is important is because effects will use this
 | 
			
		||||
   * API to determine the size of offscreen framebuffers and so for
 | 
			
		||||
   * a fixed-size object that may be animated accross the screen we
 | 
			
		||||
   * want to make sure that the stage paint-box has an equally stable
 | 
			
		||||
   * size so that effects aren't made to continuously re-allocate
 | 
			
		||||
   * a corresponding fbo.
 | 
			
		||||
   *
 | 
			
		||||
   * The other thing we consider is that the calculation of this box is
 | 
			
		||||
   * subject to floating point precision issues that might be slightly
 | 
			
		||||
   * different to the precision issues involved with actually painting the
 | 
			
		||||
   * actor, which might result in painting slightly leaking outside the
 | 
			
		||||
   * user's calculated paint-volume. For this we simply aim to pad out the
 | 
			
		||||
   * paint-volume by at least half a pixel all the way around.
 | 
			
		||||
   */
 | 
			
		||||
  width = box->x2 - box->x1;
 | 
			
		||||
  height = box->y2 - box->y1;
 | 
			
		||||
  width = CLUTTER_NEARBYINT (width);
 | 
			
		||||
  height = CLUTTER_NEARBYINT (height);
 | 
			
		||||
  /* XXX: NB the width/height may now be up to 0.5px too small so we
 | 
			
		||||
   * must also pad by 0.25px all around to account for this. In total we
 | 
			
		||||
   * must padd by at least 0.75px around all sides. */
 | 
			
		||||
 | 
			
		||||
  /* XXX: The furthest that we can overshoot the bottom right corner by
 | 
			
		||||
   * here is 1.75px in total if you consider that the 0.75 padding could
 | 
			
		||||
   * just cross an integer boundary and so ceil will effectively add 1.
 | 
			
		||||
   */
 | 
			
		||||
  box->x2 = ceilf (box->x2 + 0.75);
 | 
			
		||||
  box->y2 = ceilf (box->y2 + 0.75);
 | 
			
		||||
 | 
			
		||||
  /* Now we redefine the top-left relative to the bottom right based on the
 | 
			
		||||
   * rounded width/height determined above + a constant so that the overall
 | 
			
		||||
   * size of the box will be stable and not dependant on the box's
 | 
			
		||||
   * position.
 | 
			
		||||
   *
 | 
			
		||||
   * Adding 3px to the width/height will ensure we cover the maximum of
 | 
			
		||||
   * 1.75px padding on the bottom/right and still ensure we have > 0.75px
 | 
			
		||||
   * padding on the top/left.
 | 
			
		||||
   */
 | 
			
		||||
  box->x1 = box->x2 - width - 3;
 | 
			
		||||
  box->y1 = box->y2 - height - 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_actor_box_scale:
 | 
			
		||||
 * @box: a #ClutterActorBox
 | 
			
		||||
 * @scale: scale factor for resizing this box
 | 
			
		||||
 *
 | 
			
		||||
 * Rescale the @box by provided @scale factor.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.6
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_actor_box_scale (ClutterActorBox *box,
 | 
			
		||||
                         gfloat           scale)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (box != NULL);
 | 
			
		||||
 | 
			
		||||
  box->x1 *= scale;
 | 
			
		||||
  box->x2 *= scale;
 | 
			
		||||
  box->y1 *= scale;
 | 
			
		||||
  box->y2 *= scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_actor_box_is_initialized:
 | 
			
		||||
 * @box: a #ClutterActorBox
 | 
			
		||||
 *
 | 
			
		||||
 * Checks if @box has been initialized, a #ClutterActorBox is uninitialized
 | 
			
		||||
 * if it has a size of -1 at an origin of 0, 0.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: %TRUE if the box is uninitialized, %FALSE if it isn't
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_actor_box_is_initialized (ClutterActorBox *box)
 | 
			
		||||
{
 | 
			
		||||
  gboolean x1_uninitialized, x2_uninitialized;
 | 
			
		||||
  gboolean y1_uninitialized, y2_uninitialized;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (box != NULL, TRUE);
 | 
			
		||||
 | 
			
		||||
  x1_uninitialized = isinf (box->x1);
 | 
			
		||||
  x2_uninitialized = isinf (box->x2) && signbit (box->x2);
 | 
			
		||||
  y1_uninitialized = isinf (box->y1);
 | 
			
		||||
  y2_uninitialized = isinf (box->y2) && signbit (box->y2);
 | 
			
		||||
 | 
			
		||||
  return !x1_uninitialized || !x2_uninitialized ||
 | 
			
		||||
         !y1_uninitialized || !y2_uninitialized;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
G_DEFINE_BOXED_TYPE_WITH_CODE (ClutterActorBox, clutter_actor_box,
 | 
			
		||||
                               clutter_actor_box_copy,
 | 
			
		||||
                               clutter_actor_box_free,
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,9 @@
 | 
			
		||||
 * #ClutterActorMeta is available since Clutter 1.4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-actor-meta-private.h"
 | 
			
		||||
 | 
			
		||||
@@ -51,7 +53,7 @@
 | 
			
		||||
struct _ClutterActorMetaPrivate
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  gulong destroy_id;
 | 
			
		||||
  guint destroy_id;
 | 
			
		||||
 | 
			
		||||
  gchar *name;
 | 
			
		||||
 | 
			
		||||
@@ -81,49 +83,28 @@ static void
 | 
			
		||||
on_actor_destroy (ClutterActor     *actor,
 | 
			
		||||
                  ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  priv->actor = NULL;
 | 
			
		||||
  meta->priv->actor = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_actor_meta_real_set_actor (ClutterActorMeta *meta,
 | 
			
		||||
                                   ClutterActor     *actor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  g_warn_if_fail (!priv->actor ||
 | 
			
		||||
                  !CLUTTER_ACTOR_IN_PAINT (priv->actor));
 | 
			
		||||
  g_warn_if_fail (!actor || !CLUTTER_ACTOR_IN_PAINT (actor));
 | 
			
		||||
 | 
			
		||||
  if (priv->actor == actor)
 | 
			
		||||
  if (meta->priv->actor == actor)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&priv->destroy_id, priv->actor);
 | 
			
		||||
  if (meta->priv->destroy_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_handler_disconnect (meta->priv->actor, meta->priv->destroy_id);
 | 
			
		||||
      meta->priv->destroy_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  priv->actor = actor;
 | 
			
		||||
  meta->priv->actor = actor;
 | 
			
		||||
 | 
			
		||||
  if (priv->actor != NULL)
 | 
			
		||||
    priv->destroy_id = g_signal_connect (priv->actor, "destroy",
 | 
			
		||||
                                         G_CALLBACK (on_actor_destroy),
 | 
			
		||||
                                         meta);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_actor_meta_real_set_enabled (ClutterActorMeta *meta,
 | 
			
		||||
                                     gboolean          is_enabled)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  g_warn_if_fail (!priv->actor ||
 | 
			
		||||
                  !CLUTTER_ACTOR_IN_PAINT (priv->actor));
 | 
			
		||||
 | 
			
		||||
  priv->is_enabled = is_enabled;
 | 
			
		||||
 | 
			
		||||
  g_object_notify_by_pspec (G_OBJECT (meta), obj_props[PROP_ENABLED]);
 | 
			
		||||
  if (meta->priv->actor != NULL)
 | 
			
		||||
    meta->priv->destroy_id = g_signal_connect (meta->priv->actor, "destroy",
 | 
			
		||||
                                               G_CALLBACK (on_actor_destroy),
 | 
			
		||||
                                               meta);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -156,21 +137,20 @@ clutter_actor_meta_get_property (GObject    *gobject,
 | 
			
		||||
                                 GValue     *value,
 | 
			
		||||
                                 GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (CLUTTER_ACTOR_META (gobject));
 | 
			
		||||
  ClutterActorMeta *meta = CLUTTER_ACTOR_META (gobject);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_ACTOR:
 | 
			
		||||
      g_value_set_object (value, priv->actor);
 | 
			
		||||
      g_value_set_object (value, meta->priv->actor);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_NAME:
 | 
			
		||||
      g_value_set_string (value, priv->name);
 | 
			
		||||
      g_value_set_string (value, meta->priv->name);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_ENABLED:
 | 
			
		||||
      g_value_set_boolean (value, priv->is_enabled);
 | 
			
		||||
      g_value_set_boolean (value, meta->priv->is_enabled);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
@@ -182,11 +162,10 @@ clutter_actor_meta_get_property (GObject    *gobject,
 | 
			
		||||
static void
 | 
			
		||||
clutter_actor_meta_finalize (GObject *gobject)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (CLUTTER_ACTOR_META (gobject));
 | 
			
		||||
  ClutterActorMetaPrivate *priv = CLUTTER_ACTOR_META (gobject)->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->actor != NULL)
 | 
			
		||||
    g_clear_signal_handler (&priv->destroy_id, priv->actor);
 | 
			
		||||
  if (priv->destroy_id != 0 && priv->actor != NULL)
 | 
			
		||||
    g_signal_handler_disconnect (priv->actor, priv->destroy_id);
 | 
			
		||||
 | 
			
		||||
  g_free (priv->name);
 | 
			
		||||
 | 
			
		||||
@@ -199,7 +178,6 @@ clutter_actor_meta_class_init (ClutterActorMetaClass *klass)
 | 
			
		||||
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  klass->set_actor = clutter_actor_meta_real_set_actor;
 | 
			
		||||
  klass->set_enabled = clutter_actor_meta_real_set_enabled;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterActorMeta:actor:
 | 
			
		||||
@@ -254,11 +232,9 @@ clutter_actor_meta_class_init (ClutterActorMetaClass *klass)
 | 
			
		||||
void
 | 
			
		||||
clutter_actor_meta_init (ClutterActorMeta *self)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  priv->is_enabled = TRUE;
 | 
			
		||||
  priv->priority = CLUTTER_ACTOR_META_PRIORITY_DEFAULT;
 | 
			
		||||
  self->priv = clutter_actor_meta_get_instance_private (self);
 | 
			
		||||
  self->priv->is_enabled = TRUE;
 | 
			
		||||
  self->priv->priority = CLUTTER_ACTOR_META_PRIORITY_DEFAULT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -276,17 +252,13 @@ void
 | 
			
		||||
clutter_actor_meta_set_name (ClutterActorMeta *meta,
 | 
			
		||||
                             const gchar      *name)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR_META (meta));
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  if (g_strcmp0 (priv->name, name) == 0)
 | 
			
		||||
  if (g_strcmp0 (meta->priv->name, name) == 0)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_free (priv->name);
 | 
			
		||||
  priv->name = g_strdup (name);
 | 
			
		||||
  g_free (meta->priv->name);
 | 
			
		||||
  meta->priv->name = g_strdup (name);
 | 
			
		||||
 | 
			
		||||
  g_object_notify_by_pspec (G_OBJECT (meta), obj_props[PROP_NAME]);
 | 
			
		||||
}
 | 
			
		||||
@@ -307,13 +279,9 @@ clutter_actor_meta_set_name (ClutterActorMeta *meta,
 | 
			
		||||
const gchar *
 | 
			
		||||
clutter_actor_meta_get_name (ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ACTOR_META (meta), NULL);
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  return priv->name;
 | 
			
		||||
  return meta->priv->name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -329,17 +297,16 @@ void
 | 
			
		||||
clutter_actor_meta_set_enabled (ClutterActorMeta *meta,
 | 
			
		||||
                                gboolean          is_enabled)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR_META (meta));
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
  is_enabled = !!is_enabled;
 | 
			
		||||
 | 
			
		||||
  if (priv->is_enabled == is_enabled)
 | 
			
		||||
  if (meta->priv->is_enabled == is_enabled)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_META_GET_CLASS (meta)->set_enabled (meta, is_enabled);
 | 
			
		||||
  meta->priv->is_enabled = is_enabled;
 | 
			
		||||
 | 
			
		||||
  g_object_notify_by_pspec (G_OBJECT (meta), obj_props[PROP_ENABLED]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -355,13 +322,9 @@ clutter_actor_meta_set_enabled (ClutterActorMeta *meta,
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_actor_meta_get_enabled (ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ACTOR_META (meta), FALSE);
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  return priv->is_enabled;
 | 
			
		||||
  return meta->priv->is_enabled;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -397,54 +360,40 @@ _clutter_actor_meta_set_actor (ClutterActorMeta *meta,
 | 
			
		||||
ClutterActor *
 | 
			
		||||
clutter_actor_meta_get_actor (ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ACTOR_META (meta), NULL);
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  return priv->actor;
 | 
			
		||||
  return meta->priv->actor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_actor_meta_set_priority (ClutterActorMeta *meta,
 | 
			
		||||
                                  gint priority)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR_META (meta));
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  /* This property shouldn't be modified after the actor meta is in
 | 
			
		||||
     use because ClutterMetaGroup doesn't resort the list when it
 | 
			
		||||
     changes. If we made the priority public then we could either make
 | 
			
		||||
     the priority a construct-only property or listen for
 | 
			
		||||
     notifications on the property from the ClutterMetaGroup and
 | 
			
		||||
     resort. */
 | 
			
		||||
  g_return_if_fail (priv->actor == NULL);
 | 
			
		||||
  g_return_if_fail (meta->priv->actor == NULL);
 | 
			
		||||
 | 
			
		||||
  priv->priority = priority;
 | 
			
		||||
  meta->priv->priority = priority;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gint
 | 
			
		||||
_clutter_actor_meta_get_priority (ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ACTOR_META (meta), 0);
 | 
			
		||||
 | 
			
		||||
  priv = clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  return priv->priority;
 | 
			
		||||
  return meta->priv->priority;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
_clutter_actor_meta_is_internal (ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
  gint priority = priv->priority;
 | 
			
		||||
  gint priority = meta->priv->priority;
 | 
			
		||||
 | 
			
		||||
  return (priority <= CLUTTER_ACTOR_META_PRIORITY_INTERNAL_LOW ||
 | 
			
		||||
          priority >= CLUTTER_ACTOR_META_PRIORITY_INTERNAL_HIGH);
 | 
			
		||||
@@ -491,21 +440,19 @@ void
 | 
			
		||||
_clutter_meta_group_add_meta (ClutterMetaGroup *group,
 | 
			
		||||
                              ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
  GList *prev = NULL, *l;
 | 
			
		||||
 | 
			
		||||
  if (priv->actor != NULL)
 | 
			
		||||
  if (meta->priv->actor != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("The meta of type '%s' with name '%s' is "
 | 
			
		||||
                 "already attached to actor '%s'",
 | 
			
		||||
                 G_OBJECT_TYPE_NAME (meta),
 | 
			
		||||
                 priv->name != NULL
 | 
			
		||||
                   ? priv->name
 | 
			
		||||
                 meta->priv->name != NULL
 | 
			
		||||
                   ? meta->priv->name
 | 
			
		||||
                   : "<unknown>",
 | 
			
		||||
                 clutter_actor_get_name (priv->actor) != NULL
 | 
			
		||||
                   ? clutter_actor_get_name (priv->actor)
 | 
			
		||||
                   : G_OBJECT_TYPE_NAME (priv->actor));
 | 
			
		||||
                 clutter_actor_get_name (meta->priv->actor) != NULL
 | 
			
		||||
                   ? clutter_actor_get_name (meta->priv->actor)
 | 
			
		||||
                   : G_OBJECT_TYPE_NAME (meta->priv->actor));
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -541,16 +488,13 @@ void
 | 
			
		||||
_clutter_meta_group_remove_meta (ClutterMetaGroup *group,
 | 
			
		||||
                                 ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  if (priv->actor != group->actor)
 | 
			
		||||
  if (meta->priv->actor != group->actor)
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("The meta of type '%s' with name '%s' is not "
 | 
			
		||||
                 "attached to the actor '%s'",
 | 
			
		||||
                 G_OBJECT_TYPE_NAME (meta),
 | 
			
		||||
                 priv->name != NULL
 | 
			
		||||
                   ? priv->name
 | 
			
		||||
                 meta->priv->name != NULL
 | 
			
		||||
                   ? meta->priv->name
 | 
			
		||||
                   : "<unknown>",
 | 
			
		||||
                 clutter_actor_get_name (group->actor) != NULL
 | 
			
		||||
                   ? clutter_actor_get_name (group->actor)
 | 
			
		||||
@@ -635,7 +579,8 @@ _clutter_meta_group_clear_metas (ClutterMetaGroup *group)
 | 
			
		||||
{
 | 
			
		||||
  g_list_foreach (group->meta, (GFunc) _clutter_actor_meta_set_actor, NULL);
 | 
			
		||||
 | 
			
		||||
  g_list_free_full (group->meta, g_object_unref);
 | 
			
		||||
  g_list_foreach (group->meta, (GFunc) g_object_unref, NULL);
 | 
			
		||||
  g_list_free (group->meta);
 | 
			
		||||
  group->meta = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -693,10 +638,8 @@ _clutter_meta_group_get_meta (ClutterMetaGroup *group,
 | 
			
		||||
  for (l = group->meta; l != NULL; l = l->next)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActorMeta *meta = l->data;
 | 
			
		||||
      ClutterActorMetaPrivate *priv =
 | 
			
		||||
        clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
      if (g_strcmp0 (priv->name, name) == 0)
 | 
			
		||||
      if (g_strcmp0 (meta->priv->name, name) == 0)
 | 
			
		||||
        return meta;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -716,8 +659,6 @@ _clutter_meta_group_get_meta (ClutterMetaGroup *group,
 | 
			
		||||
const gchar *
 | 
			
		||||
_clutter_actor_meta_get_debug_name (ClutterActorMeta *meta)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaPrivate *priv =
 | 
			
		||||
    clutter_actor_meta_get_instance_private (meta);
 | 
			
		||||
 | 
			
		||||
  return priv->name != NULL ? priv->name : G_OBJECT_TYPE_NAME (meta);
 | 
			
		||||
  return meta->priv->name != NULL ? meta->priv->name
 | 
			
		||||
                                  : G_OBJECT_TYPE_NAME (meta);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,13 +33,31 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_TYPE_ACTOR_META (clutter_actor_meta_get_type ())
 | 
			
		||||
#define CLUTTER_TYPE_ACTOR_META                 (clutter_actor_meta_get_type ())
 | 
			
		||||
#define CLUTTER_ACTOR_META(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ACTOR_META, ClutterActorMeta))
 | 
			
		||||
#define CLUTTER_IS_ACTOR_META(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ACTOR_META))
 | 
			
		||||
#define CLUTTER_ACTOR_META_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_ACTOR_META, ClutterActorMetaClass))
 | 
			
		||||
#define CLUTTER_IS_ACTOR_META_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_ACTOR_META))
 | 
			
		||||
#define CLUTTER_ACTOR_META_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_ACTOR_META, ClutterActorMetaClass))
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ClutterActorMeta, clutter_actor_meta,
 | 
			
		||||
                          CLUTTER, ACTOR_META, GInitiallyUnowned);
 | 
			
		||||
typedef struct _ClutterActorMetaPrivate         ClutterActorMetaPrivate;
 | 
			
		||||
typedef struct _ClutterActorMetaClass           ClutterActorMetaClass;
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterActorMetaPrivate ClutterActorMetaPrivate;
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterActorMeta:
 | 
			
		||||
 *
 | 
			
		||||
 * The #ClutterActorMeta structure contains only
 | 
			
		||||
 * private data and should be accessed using the provided API
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _ClutterActorMeta
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  GInitiallyUnowned parent_instance;
 | 
			
		||||
 | 
			
		||||
  ClutterActorMetaPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterActorMetaClass:
 | 
			
		||||
@@ -69,9 +87,6 @@ struct _ClutterActorMetaClass
 | 
			
		||||
  void (* set_actor) (ClutterActorMeta *meta,
 | 
			
		||||
                      ClutterActor     *actor);
 | 
			
		||||
 | 
			
		||||
  void (* set_enabled) (ClutterActorMeta *meta,
 | 
			
		||||
                        gboolean          is_enabled);
 | 
			
		||||
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  void (* _clutter_meta1) (void);
 | 
			
		||||
  void (* _clutter_meta2) (void);
 | 
			
		||||
@@ -79,20 +94,24 @@ struct _ClutterActorMetaClass
 | 
			
		||||
  void (* _clutter_meta4) (void);
 | 
			
		||||
  void (* _clutter_meta5) (void);
 | 
			
		||||
  void (* _clutter_meta6) (void);
 | 
			
		||||
  void (* _clutter_meta7) (void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_actor_meta_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void            clutter_actor_meta_set_name     (ClutterActorMeta *meta,
 | 
			
		||||
                                                 const gchar      *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
const gchar *   clutter_actor_meta_get_name     (ClutterActorMeta *meta);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void            clutter_actor_meta_set_enabled  (ClutterActorMeta *meta,
 | 
			
		||||
                                                 gboolean          is_enabled);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gboolean        clutter_actor_meta_get_enabled  (ClutterActorMeta *meta);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterActor *  clutter_actor_meta_get_actor    (ClutterActorMeta *meta);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -53,8 +53,7 @@ typedef enum
 | 
			
		||||
 * Controls some options for how clutter_actor_traverse() iterates
 | 
			
		||||
 * through the graph.
 | 
			
		||||
 */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
typedef enum {
 | 
			
		||||
  CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST   = 1L<<0,
 | 
			
		||||
  CLUTTER_ACTOR_TRAVERSE_BREADTH_FIRST = 1L<<1
 | 
			
		||||
} ClutterActorTraverseFlags;
 | 
			
		||||
@@ -75,8 +74,7 @@ typedef enum
 | 
			
		||||
 * the continuing traversal. It may stop traversal completely, just
 | 
			
		||||
 * skip over children for the current actor or continue as normal.
 | 
			
		||||
 */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
typedef enum {
 | 
			
		||||
  CLUTTER_ACTOR_TRAVERSE_VISIT_CONTINUE       = 1L<<0,
 | 
			
		||||
  CLUTTER_ACTOR_TRAVERSE_VISIT_SKIP_CHILDREN  = 1L<<1,
 | 
			
		||||
  CLUTTER_ACTOR_TRAVERSE_VISIT_BREAK          = 1L<<2
 | 
			
		||||
@@ -110,12 +108,35 @@ typedef ClutterActorTraverseVisitFlags (*ClutterTraverseCallback) (ClutterActor
 | 
			
		||||
typedef gboolean (*ClutterForeachCallback) (ClutterActor *actor,
 | 
			
		||||
                                            gpointer      user_data);
 | 
			
		||||
 | 
			
		||||
typedef struct _AnchorCoord             AnchorCoord;
 | 
			
		||||
typedef struct _SizeRequest             SizeRequest;
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterLayoutInfo       ClutterLayoutInfo;
 | 
			
		||||
typedef struct _ClutterTransformInfo    ClutterTransformInfo;
 | 
			
		||||
typedef struct _ClutterAnimationInfo    ClutterAnimationInfo;
 | 
			
		||||
 | 
			
		||||
/* Internal helper struct to represent a point that can be stored in
 | 
			
		||||
   either direct pixel coordinates or as a fraction of the actor's
 | 
			
		||||
   size. It is used for the anchor point, scale center and rotation
 | 
			
		||||
   centers. */
 | 
			
		||||
struct _AnchorCoord
 | 
			
		||||
{
 | 
			
		||||
  gboolean is_fractional;
 | 
			
		||||
 | 
			
		||||
  union
 | 
			
		||||
  {
 | 
			
		||||
    /* Used when is_fractional == TRUE */
 | 
			
		||||
    struct
 | 
			
		||||
    {
 | 
			
		||||
      gdouble x;
 | 
			
		||||
      gdouble y;
 | 
			
		||||
    } fraction;
 | 
			
		||||
 | 
			
		||||
    /* Use when is_fractional == FALSE */
 | 
			
		||||
    ClutterVertex units;
 | 
			
		||||
  } v;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _SizeRequest
 | 
			
		||||
{
 | 
			
		||||
  guint  age;
 | 
			
		||||
@@ -140,7 +161,7 @@ struct _SizeRequest
 | 
			
		||||
struct _ClutterLayoutInfo
 | 
			
		||||
{
 | 
			
		||||
  /* fixed position coordinates */
 | 
			
		||||
  graphene_point_t fixed_pos;
 | 
			
		||||
  ClutterPoint fixed_pos;
 | 
			
		||||
 | 
			
		||||
  ClutterMargin margin;
 | 
			
		||||
 | 
			
		||||
@@ -150,8 +171,8 @@ struct _ClutterLayoutInfo
 | 
			
		||||
  guint x_expand : 1;
 | 
			
		||||
  guint y_expand : 1;
 | 
			
		||||
 | 
			
		||||
  graphene_size_t minimum;
 | 
			
		||||
  graphene_size_t natural;
 | 
			
		||||
  ClutterSize minimum;
 | 
			
		||||
  ClutterSize natural;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const ClutterLayoutInfo *       _clutter_actor_get_layout_info_or_defaults      (ClutterActor *self);
 | 
			
		||||
@@ -160,24 +181,33 @@ ClutterLayoutInfo *             _clutter_actor_peek_layout_info
 | 
			
		||||
 | 
			
		||||
struct _ClutterTransformInfo
 | 
			
		||||
{
 | 
			
		||||
  /* rotation */
 | 
			
		||||
  /* rotation (angle and center) */
 | 
			
		||||
  gdouble rx_angle;
 | 
			
		||||
  AnchorCoord rx_center;
 | 
			
		||||
 | 
			
		||||
  gdouble ry_angle;
 | 
			
		||||
  AnchorCoord ry_center;
 | 
			
		||||
 | 
			
		||||
  gdouble rz_angle;
 | 
			
		||||
  AnchorCoord rz_center;
 | 
			
		||||
 | 
			
		||||
  /* scaling */
 | 
			
		||||
  gdouble scale_x;
 | 
			
		||||
  gdouble scale_y;
 | 
			
		||||
  gdouble scale_z;
 | 
			
		||||
  AnchorCoord scale_center;
 | 
			
		||||
 | 
			
		||||
  /* anchor point */
 | 
			
		||||
  AnchorCoord anchor;
 | 
			
		||||
 | 
			
		||||
  /* translation */
 | 
			
		||||
  graphene_point3d_t translation;
 | 
			
		||||
  ClutterVertex translation;
 | 
			
		||||
 | 
			
		||||
  /* z_position */
 | 
			
		||||
  gfloat z_position;
 | 
			
		||||
 | 
			
		||||
  /* transformation center */
 | 
			
		||||
  graphene_point_t pivot;
 | 
			
		||||
  ClutterPoint pivot;
 | 
			
		||||
  gfloat pivot_z;
 | 
			
		||||
 | 
			
		||||
  CoglMatrix transform;
 | 
			
		||||
@@ -210,6 +240,9 @@ ClutterAnimationInfo *          _clutter_actor_get_animation_info
 | 
			
		||||
ClutterTransition *             _clutter_actor_create_transition                        (ClutterActor *self,
 | 
			
		||||
                                                                                         GParamSpec   *pspec,
 | 
			
		||||
                                                                                         ...);
 | 
			
		||||
ClutterTransition *             _clutter_actor_get_transition                           (ClutterActor *self,
 | 
			
		||||
                                                                                         GParamSpec   *pspec);
 | 
			
		||||
 | 
			
		||||
gboolean                        _clutter_actor_foreach_child                            (ClutterActor *self,
 | 
			
		||||
                                                                                         ClutterForeachCallback callback,
 | 
			
		||||
                                                                                         gpointer user_data);
 | 
			
		||||
@@ -242,17 +275,17 @@ void                            _clutter_actor_set_enable_paint_unmapped
 | 
			
		||||
void                            _clutter_actor_set_has_pointer                          (ClutterActor *self,
 | 
			
		||||
                                                                                         gboolean      has_pointer);
 | 
			
		||||
 | 
			
		||||
void                            _clutter_actor_set_has_key_focus                        (ClutterActor *self,
 | 
			
		||||
                                                                                         gboolean      has_key_focus);
 | 
			
		||||
 | 
			
		||||
void                            _clutter_actor_queue_redraw_with_clip                   (ClutterActor             *self,
 | 
			
		||||
                                                                                         ClutterRedrawFlags        flags,
 | 
			
		||||
                                                                                         const ClutterPaintVolume *clip_volume);
 | 
			
		||||
void                            _clutter_actor_queue_redraw_full                        (ClutterActor             *self,
 | 
			
		||||
                                                                                         ClutterRedrawFlags        flags,
 | 
			
		||||
                                                                                         const ClutterPaintVolume *volume,
 | 
			
		||||
                                                                                         ClutterEffect            *effect);
 | 
			
		||||
void                            _clutter_actor_queue_redraw_with_clip                   (ClutterActor       *self,
 | 
			
		||||
                                                                                         ClutterRedrawFlags  flags,
 | 
			
		||||
                                                                                         ClutterPaintVolume *clip_volume);
 | 
			
		||||
void                            _clutter_actor_queue_redraw_full                        (ClutterActor       *self,
 | 
			
		||||
                                                                                         ClutterRedrawFlags  flags,
 | 
			
		||||
                                                                                         ClutterPaintVolume *volume,
 | 
			
		||||
                                                                                         ClutterEffect      *effect);
 | 
			
		||||
 | 
			
		||||
ClutterPaintVolume *            _clutter_actor_get_queue_redraw_clip                    (ClutterActor       *self);
 | 
			
		||||
void                            _clutter_actor_set_queue_redraw_clip                    (ClutterActor       *self,
 | 
			
		||||
                                                                                         ClutterPaintVolume *clip_volume);
 | 
			
		||||
void                            _clutter_actor_finish_queue_redraw                      (ClutterActor       *self,
 | 
			
		||||
                                                                                         ClutterPaintVolume *clip);
 | 
			
		||||
 | 
			
		||||
@@ -265,6 +298,8 @@ const gchar *                   _clutter_actor_get_debug_name
 | 
			
		||||
void                            _clutter_actor_push_clone_paint                         (void);
 | 
			
		||||
void                            _clutter_actor_pop_clone_paint                          (void);
 | 
			
		||||
 | 
			
		||||
guint32                         _clutter_actor_get_pick_id                              (ClutterActor *self);
 | 
			
		||||
 | 
			
		||||
void                            _clutter_actor_shader_pre_paint                         (ClutterActor *actor,
 | 
			
		||||
                                                                                         gboolean      repeat);
 | 
			
		||||
void                            _clutter_actor_shader_post_paint                        (ClutterActor *actor);
 | 
			
		||||
@@ -281,18 +316,12 @@ void                            _clutter_actor_detach_clone
 | 
			
		||||
void                            _clutter_actor_queue_redraw_on_clones                   (ClutterActor *actor);
 | 
			
		||||
void                            _clutter_actor_queue_relayout_on_clones                 (ClutterActor *actor);
 | 
			
		||||
void                            _clutter_actor_queue_only_relayout                      (ClutterActor *actor);
 | 
			
		||||
void                            clutter_actor_clear_stage_views_recursive               (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
float                           clutter_actor_get_real_resource_scale                   (ClutterActor *actor);
 | 
			
		||||
CoglFramebuffer *               _clutter_actor_get_active_framebuffer                   (ClutterActor *actor);
 | 
			
		||||
 | 
			
		||||
ClutterPaintNode *              clutter_actor_create_texture_paint_node                 (ClutterActor *self,
 | 
			
		||||
                                                                                         CoglTexture  *texture);
 | 
			
		||||
 | 
			
		||||
void clutter_actor_update_stage_views (ClutterActor *self,
 | 
			
		||||
                                       int           phase);
 | 
			
		||||
 | 
			
		||||
void clutter_actor_queue_immediate_relayout (ClutterActor *self);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CLUTTER_ACTOR_PRIVATE_H__ */
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -39,8 +39,6 @@
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter-types.h>
 | 
			
		||||
#include <clutter/clutter-event.h>
 | 
			
		||||
#include <clutter/clutter-paint-context.h>
 | 
			
		||||
#include <clutter/clutter-pick-context.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
@@ -63,7 +61,7 @@ G_BEGIN_DECLS
 | 
			
		||||
 *   internal state.
 | 
			
		||||
 */
 | 
			
		||||
#define CLUTTER_ACTOR_SET_FLAGS(a,f) \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_IN_1_24 \
 | 
			
		||||
  (((ClutterActor*)(a))->flags |= (f))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -78,23 +76,23 @@ G_BEGIN_DECLS
 | 
			
		||||
 *   internal state.
 | 
			
		||||
 */
 | 
			
		||||
#define CLUTTER_ACTOR_UNSET_FLAGS(a,f) \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_IN_1_24 \
 | 
			
		||||
  (((ClutterActor*)(a))->flags &= ~(f))
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ACTOR_IS_MAPPED(a) \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_FOR ("Deprecated macro. Use clutter_actor_is_mapped instead") \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_IN_1_24_FOR ("Deprecated macro. Use clutter_actor_is_mapped instead") \
 | 
			
		||||
  ((((ClutterActor*)(a))->flags & CLUTTER_ACTOR_MAPPED) != FALSE)
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ACTOR_IS_REALIZED(a) \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_FOR ("Deprecated macro. Use clutter_actor_is_realized instead") \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_IN_1_24_FOR ("Deprecated macro. Use clutter_actor_is_realized instead") \
 | 
			
		||||
  ((((ClutterActor*)(a))->flags & CLUTTER_ACTOR_REALIZED) != FALSE)
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ACTOR_IS_VISIBLE(a) \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_FOR ("Deprecated macro. Use clutter_actor_is_visible instead") \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_IN_1_24_FOR ("Deprecated macro. Use clutter_actor_is_visible instead") \
 | 
			
		||||
  ((((ClutterActor*)(a))->flags & CLUTTER_ACTOR_VISIBLE) != FALSE)
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ACTOR_IS_REACTIVE(a) \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_FOR ("Deprecated macro. Use clutter_actor_get_reactive instead") \
 | 
			
		||||
  CLUTTER_MACRO_DEPRECATED_IN_1_24_FOR ("Deprecated macro. Use clutter_actor_get_reactive instead") \
 | 
			
		||||
  ((((ClutterActor*)(a))->flags & CLUTTER_ACTOR_REACTIVE) != FALSE)
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterActorClass    ClutterActorClass;
 | 
			
		||||
@@ -142,6 +140,11 @@ struct _ClutterActor
 | 
			
		||||
 * ClutterActorClass:
 | 
			
		||||
 * @show: signal class handler for #ClutterActor::show; it must chain
 | 
			
		||||
 *   up to the parent's implementation
 | 
			
		||||
 * @show_all: virtual function for containers and composite actors, to
 | 
			
		||||
 *   determine which children should be shown when calling
 | 
			
		||||
 *   clutter_actor_show_all() on the actor. Defaults to calling
 | 
			
		||||
 *   clutter_actor_show(). This virtual function is deprecated and it
 | 
			
		||||
 *   should not be overridden.
 | 
			
		||||
 * @hide: signal class handler for #ClutterActor::hide; it must chain
 | 
			
		||||
 *   up to the parent's implementation
 | 
			
		||||
 * @hide_all: virtual function for containers and composite actors, to
 | 
			
		||||
@@ -170,18 +173,12 @@ struct _ClutterActor
 | 
			
		||||
 * @get_preferred_height: virtual function, used when querying the minimum
 | 
			
		||||
 *   and natural heights of an actor for a given width; it is used by
 | 
			
		||||
 *   clutter_actor_get_preferred_height()
 | 
			
		||||
 * @allocate: virtual function, used when setting the coordinates of an
 | 
			
		||||
 *   actor; it is used by clutter_actor_allocate(); when overriding this
 | 
			
		||||
 *   function without chaining up, clutter_actor_set_allocation() must be
 | 
			
		||||
 *   called and children must be allocated by the implementation, when
 | 
			
		||||
 *   chaining up though, those things will be done by the parent's
 | 
			
		||||
 *   implementation.
 | 
			
		||||
 * @allocate: virtual function, used when settings the coordinates of an
 | 
			
		||||
 *   actor; it is used by clutter_actor_allocate(); it must chain up to
 | 
			
		||||
 *   the parent's implementation, or call clutter_actor_set_allocation()
 | 
			
		||||
 * @apply_transform: virtual function, used when applying the transformations
 | 
			
		||||
 *   to an actor before painting it or when transforming coordinates or
 | 
			
		||||
 *   the allocation; if the transformation calculated by this function may
 | 
			
		||||
 *   have changed, the cached transformation must be invalidated by calling
 | 
			
		||||
 *   clutter_actor_invalidate_transform(); it must chain up to the parent's
 | 
			
		||||
 *   implementation
 | 
			
		||||
 *   the allocation; it must chain up to the parent's implementation
 | 
			
		||||
 * @parent_set: signal class handler for the #ClutterActor::parent-set
 | 
			
		||||
 * @destroy: signal class handler for #ClutterActor::destroy. It must
 | 
			
		||||
 *   chain up to the parent's implementation
 | 
			
		||||
@@ -224,24 +221,23 @@ struct _ClutterActorClass
 | 
			
		||||
 | 
			
		||||
  /*< public >*/
 | 
			
		||||
  void (* show)                 (ClutterActor          *self);
 | 
			
		||||
  void (* show_all)             (ClutterActor          *self);
 | 
			
		||||
  void (* hide)                 (ClutterActor          *self);
 | 
			
		||||
  void (* hide_all)             (ClutterActor          *self);
 | 
			
		||||
  void (* realize)              (ClutterActor          *self);
 | 
			
		||||
  void (* unrealize)            (ClutterActor          *self);
 | 
			
		||||
  void (* map)                  (ClutterActor          *self);
 | 
			
		||||
  void (* unmap)                (ClutterActor          *self);
 | 
			
		||||
  void (* paint)                (ClutterActor          *self,
 | 
			
		||||
                                 ClutterPaintContext   *paint_context);
 | 
			
		||||
  void (* paint)                (ClutterActor          *self);
 | 
			
		||||
  void (* parent_set)           (ClutterActor          *actor,
 | 
			
		||||
                                 ClutterActor          *old_parent);
 | 
			
		||||
 | 
			
		||||
  void (* destroy)              (ClutterActor          *self);
 | 
			
		||||
  void (* pick)                 (ClutterActor          *actor,
 | 
			
		||||
                                 ClutterPickContext    *pick_context);
 | 
			
		||||
                                 const ClutterColor    *color);
 | 
			
		||||
 | 
			
		||||
  gboolean (* queue_redraw)     (ClutterActor          *actor,
 | 
			
		||||
                                 ClutterActor          *leaf_that_queued,
 | 
			
		||||
                                 ClutterPaintVolume    *paint_volume);
 | 
			
		||||
  void (* queue_redraw)         (ClutterActor          *actor,
 | 
			
		||||
                                 ClutterActor          *leaf_that_queued);
 | 
			
		||||
 | 
			
		||||
  /* size negotiation */
 | 
			
		||||
  void (* get_preferred_width)  (ClutterActor           *self,
 | 
			
		||||
@@ -253,7 +249,8 @@ struct _ClutterActorClass
 | 
			
		||||
                                 gfloat                 *min_height_p,
 | 
			
		||||
                                 gfloat                 *natural_height_p);
 | 
			
		||||
  void (* allocate)             (ClutterActor           *self,
 | 
			
		||||
                                 const ClutterActorBox  *box);
 | 
			
		||||
                                 const ClutterActorBox  *box,
 | 
			
		||||
                                 ClutterAllocationFlags  flags);
 | 
			
		||||
 | 
			
		||||
  /* transformations */
 | 
			
		||||
  void (* apply_transform)      (ClutterActor           *actor,
 | 
			
		||||
@@ -298,14 +295,10 @@ struct _ClutterActorClass
 | 
			
		||||
 | 
			
		||||
  gboolean (* touch_event)          (ClutterActor         *self,
 | 
			
		||||
                                     ClutterTouchEvent    *event);
 | 
			
		||||
  gboolean (* has_accessible)       (ClutterActor         *self);
 | 
			
		||||
  void     (* resource_scale_changed) (ClutterActor *self);
 | 
			
		||||
  float    (* calculate_resource_scale) (ClutterActor *self,
 | 
			
		||||
                                         int           phase);
 | 
			
		||||
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  /* padding for future expansion */
 | 
			
		||||
  gpointer _padding_dummy[25];
 | 
			
		||||
  gpointer _padding_dummy[26];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -329,569 +322,548 @@ struct _ClutterActorIter
 | 
			
		||||
  gpointer CLUTTER_PRIVATE_FIELD (dummy5);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GType clutter_actor_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActor *                  clutter_actor_new                               (void);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_flags                         (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterActorFlags            flags);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_unset_flags                       (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterActorFlags            flags);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterActorFlags               clutter_actor_get_flags                         (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_show                              (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_hide                              (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_realize                           (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_unrealize                         (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_map                               (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_unmap                             (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_paint                             (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterPaintContext         *paint_context);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_continue_paint                    (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterPaintContext         *paint_context);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_pick                              (ClutterActor                *actor,
 | 
			
		||||
                                                                                 ClutterPickContext          *pick_context);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_continue_pick                     (ClutterActor                *actor,
 | 
			
		||||
                                                                                 ClutterPickContext          *pick_context);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_paint                             (ClutterActor                *self);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_continue_paint                    (ClutterActor                *self);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_queue_redraw                      (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_queue_redraw_with_clip            (ClutterActor                *self,
 | 
			
		||||
                                                                                 const cairo_rectangle_int_t *clip);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_queue_relayout                    (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_destroy                           (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_name                          (ClutterActor                *self,
 | 
			
		||||
                                                                                 const gchar                 *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
const gchar *                   clutter_actor_get_name                          (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
AtkObject *                     clutter_actor_get_accessible                    (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
gboolean                        clutter_actor_has_accessible                    (ClutterActor                *self);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_24
 | 
			
		||||
gboolean                        clutter_actor_is_visible                        (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_24
 | 
			
		||||
gboolean                        clutter_actor_is_mapped                         (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_24
 | 
			
		||||
gboolean                        clutter_actor_is_realized                       (ClutterActor                *self);
 | 
			
		||||
 | 
			
		||||
/* Size negotiation */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_request_mode                  (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterRequestMode           mode);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterRequestMode              clutter_actor_get_request_mode                  (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_preferred_width               (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       for_height,
 | 
			
		||||
                                                                                 gfloat                      *min_width_p,
 | 
			
		||||
                                                                                 gfloat                      *natural_width_p);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_preferred_height              (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       for_width,
 | 
			
		||||
                                                                                 gfloat                      *min_height_p,
 | 
			
		||||
                                                                                 gfloat                      *natural_height_p);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_preferred_size                (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                      *min_width_p,
 | 
			
		||||
                                                                                 gfloat                      *min_height_p,
 | 
			
		||||
                                                                                 gfloat                      *natural_width_p,
 | 
			
		||||
                                                                                 gfloat                      *natural_height_p);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_allocate                          (ClutterActor                *self,
 | 
			
		||||
                                                                                 const ClutterActorBox       *box);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 const ClutterActorBox       *box,
 | 
			
		||||
                                                                                 ClutterAllocationFlags       flags);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_allocate_preferred_size           (ClutterActor                *self,
 | 
			
		||||
                                                                                 float                        x,
 | 
			
		||||
                                                                                 float                        y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 ClutterAllocationFlags       flags);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_allocate_available_size           (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       x,
 | 
			
		||||
                                                                                 gfloat                       y,
 | 
			
		||||
                                                                                 gfloat                       available_width,
 | 
			
		||||
                                                                                 gfloat                       available_height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 gfloat                       available_height,
 | 
			
		||||
                                                                                 ClutterAllocationFlags       flags);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_allocate_align_fill               (ClutterActor                *self,
 | 
			
		||||
                                                                                 const ClutterActorBox       *box,
 | 
			
		||||
                                                                                 gdouble                      x_align,
 | 
			
		||||
                                                                                 gdouble                      y_align,
 | 
			
		||||
                                                                                 gboolean                     x_fill,
 | 
			
		||||
                                                                                 gboolean                     y_fill);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 gboolean                     y_fill,
 | 
			
		||||
                                                                                 ClutterAllocationFlags       flags);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_allocation                    (ClutterActor                *self,
 | 
			
		||||
                                                                                 const ClutterActorBox       *box);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 const ClutterActorBox       *box,
 | 
			
		||||
                                                                                 ClutterAllocationFlags       flags);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_allocation_box                (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterActorBox             *box);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_allocation_vertices           (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterActor                *ancestor,
 | 
			
		||||
                                                                                 ClutterVertex                verts[]);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_has_allocation                    (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_size                          (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       width,
 | 
			
		||||
                                                                                 gfloat                       height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_size                          (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                      *width,
 | 
			
		||||
                                                                                 gfloat                      *height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_position                      (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       x,
 | 
			
		||||
                                                                                 gfloat                       y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
gboolean clutter_actor_get_fixed_position (ClutterActor *self,
 | 
			
		||||
                                           float        *x,
 | 
			
		||||
                                           float        *y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_position                      (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                      *x,
 | 
			
		||||
                                                                                 gfloat                      *y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_get_fixed_position_set            (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_fixed_position_set            (ClutterActor                *self,
 | 
			
		||||
                                                                                 gboolean                     is_set);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_move_by                           (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       dx,
 | 
			
		||||
                                                                                 gfloat                       dy);
 | 
			
		||||
 | 
			
		||||
/* Actor geometry */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gfloat                          clutter_actor_get_width                         (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gfloat                          clutter_actor_get_height                        (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_width                         (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       width);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_height                        (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gfloat                          clutter_actor_get_x                             (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gfloat                          clutter_actor_get_y                             (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_x                             (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       x);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_y                             (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_z_position                    (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       z_position);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gfloat                          clutter_actor_get_z_position                    (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_layout_manager                (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterLayoutManager        *manager);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterLayoutManager *          clutter_actor_get_layout_manager                (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_x_align                       (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterActorAlign            x_align);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActorAlign               clutter_actor_get_x_align                       (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_y_align                       (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterActorAlign            y_align);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActorAlign               clutter_actor_get_y_align                       (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_margin_top                    (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       margin);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gfloat                          clutter_actor_get_margin_top                    (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_margin_bottom                 (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       margin);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gfloat                          clutter_actor_get_margin_bottom                 (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_margin_left                   (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       margin);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gfloat                          clutter_actor_get_margin_left                   (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_margin_right                  (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       margin);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gfloat                          clutter_actor_get_margin_right                  (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_margin                        (ClutterActor                *self,
 | 
			
		||||
                                                                                 const ClutterMargin         *margin);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_get_margin                        (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterMargin               *margin);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_x_expand                      (ClutterActor                *self,
 | 
			
		||||
                                                                                 gboolean                     expand);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gboolean                        clutter_actor_get_x_expand                      (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_y_expand                      (ClutterActor                *self,
 | 
			
		||||
                                                                                 gboolean                     expand);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gboolean                        clutter_actor_get_y_expand                      (ClutterActor                *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gboolean                        clutter_actor_needs_expand                      (ClutterActor                *self,
 | 
			
		||||
                                                                                 ClutterOrientation           orientation);
 | 
			
		||||
 | 
			
		||||
/* Paint */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_clip                          (ClutterActor                *self,
 | 
			
		||||
                                                                                 gfloat                       xoff,
 | 
			
		||||
                                                                                 gfloat                       yoff,
 | 
			
		||||
                                                                                 gfloat                       width,
 | 
			
		||||
                                                                                 gfloat                       height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_remove_clip                       (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_has_clip                          (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_clip                          (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                     *xoff,
 | 
			
		||||
                                                                                 gfloat                     *yoff,
 | 
			
		||||
                                                                                 gfloat                     *width,
 | 
			
		||||
                                                                                 gfloat                     *height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_clip_to_allocation            (ClutterActor               *self,
 | 
			
		||||
                                                                                 gboolean                    clip_set);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_get_clip_to_allocation            (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_opacity                       (ClutterActor               *self,
 | 
			
		||||
                                                                                 guint8                      opacity);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
guint8                          clutter_actor_get_opacity                       (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
guint8                          clutter_actor_get_paint_opacity                 (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_get_paint_visibility              (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_8
 | 
			
		||||
void                            clutter_actor_set_offscreen_redirect            (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterOffscreenRedirect    redirect);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_8
 | 
			
		||||
ClutterOffscreenRedirect        clutter_actor_get_offscreen_redirect            (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_should_pick_paint                 (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_is_in_clone_paint                 (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_get_paint_box                     (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActorBox            *box);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
float                           clutter_actor_get_resource_scale                (ClutterActor *self);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_8
 | 
			
		||||
gboolean                        clutter_actor_has_overlaps                      (ClutterActor               *self);
 | 
			
		||||
 | 
			
		||||
/* Content */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_content                       (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterContent             *content);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterContent *                clutter_actor_get_content                       (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_content_gravity               (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterContentGravity       gravity);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterContentGravity           clutter_actor_get_content_gravity               (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_content_scaling_filters       (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterScalingFilter        min_filter,
 | 
			
		||||
                                                                                 ClutterScalingFilter        mag_filter);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_get_content_scaling_filters       (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterScalingFilter       *min_filter,
 | 
			
		||||
                                                                                 ClutterScalingFilter       *mag_filter);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_content_repeat                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterContentRepeat        repeat);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
ClutterContentRepeat            clutter_actor_get_content_repeat                (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_get_content_box                   (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActorBox            *box);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_background_color              (ClutterActor               *self,
 | 
			
		||||
                                                                                 const ClutterColor         *color);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_get_background_color              (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterColor               *color);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_6
 | 
			
		||||
const ClutterPaintVolume *      clutter_actor_get_paint_volume                  (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_6
 | 
			
		||||
const ClutterPaintVolume *      clutter_actor_get_transformed_paint_volume      (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *relative_to_ancestor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
const ClutterPaintVolume *      clutter_actor_get_default_paint_volume          (ClutterActor               *self);
 | 
			
		||||
 | 
			
		||||
/* Events */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_reactive                      (ClutterActor               *actor,
 | 
			
		||||
                                                                                 gboolean                    reactive);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_get_reactive                      (ClutterActor               *actor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_has_key_focus                     (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_grab_key_focus                    (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_event                             (ClutterActor               *actor,
 | 
			
		||||
                                                                                 const ClutterEvent         *event,
 | 
			
		||||
                                                                                 gboolean                    capture);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_has_pointer                       (ClutterActor               *self);
 | 
			
		||||
 | 
			
		||||
/* Text */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
PangoContext *                  clutter_actor_get_pango_context                 (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
PangoContext *                  clutter_actor_create_pango_context              (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
PangoLayout *                   clutter_actor_create_pango_layout               (ClutterActor               *self,
 | 
			
		||||
                                                                                 const gchar                *text);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_text_direction                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterTextDirection        text_dir);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterTextDirection            clutter_actor_get_text_direction                (ClutterActor               *self);
 | 
			
		||||
 | 
			
		||||
/* Actor hierarchy */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_add_child                         (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_insert_child_at_index             (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child,
 | 
			
		||||
                                                                                 gint                        index_);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_insert_child_above                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child,
 | 
			
		||||
                                                                                 ClutterActor               *sibling);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_insert_child_below                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child,
 | 
			
		||||
                                                                                 ClutterActor               *sibling);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_replace_child                     (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *old_child,
 | 
			
		||||
                                                                                 ClutterActor               *new_child);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_remove_child                      (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_remove_all_children               (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_destroy_all_children              (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
GList *                         clutter_actor_get_children                      (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gint                            clutter_actor_get_n_children                    (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActor *                  clutter_actor_get_child_at_index                (ClutterActor               *self,
 | 
			
		||||
                                                                                 gint                        index_);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActor *                  clutter_actor_get_previous_sibling              (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActor *                  clutter_actor_get_next_sibling                  (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActor *                  clutter_actor_get_first_child                   (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterActor *                  clutter_actor_get_last_child                    (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterActor *                  clutter_actor_get_parent                        (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gboolean                        clutter_actor_contains                          (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *descendant);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterActor*                   clutter_actor_get_stage                         (ClutterActor               *actor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_child_below_sibling           (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child,
 | 
			
		||||
                                                                                 ClutterActor               *sibling);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_child_above_sibling           (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child,
 | 
			
		||||
                                                                                 ClutterActor               *sibling);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_child_at_index                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *child,
 | 
			
		||||
                                                                                 gint                        index_);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_iter_init                         (ClutterActorIter           *iter,
 | 
			
		||||
                                                                                 ClutterActor               *root);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gboolean                        clutter_actor_iter_next                         (ClutterActorIter           *iter,
 | 
			
		||||
                                                                                 ClutterActor              **child);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gboolean                        clutter_actor_iter_prev                         (ClutterActorIter           *iter,
 | 
			
		||||
                                                                                 ClutterActor              **child);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_iter_remove                       (ClutterActorIter           *iter);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_iter_destroy                      (ClutterActorIter           *iter);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gboolean                        clutter_actor_iter_is_valid                     (const ClutterActorIter     *iter);
 | 
			
		||||
 | 
			
		||||
/* Transformations */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_is_rotated                        (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_is_scaled                         (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_pivot_point                   (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                      pivot_x,
 | 
			
		||||
                                                                                 gfloat                      pivot_y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_get_pivot_point                   (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                     *pivot_x,
 | 
			
		||||
                                                                                 gfloat                     *pivot_y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_pivot_point_z                 (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                      pivot_z);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gfloat                          clutter_actor_get_pivot_point_z                 (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_rotation_angle                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterRotateAxis           axis,
 | 
			
		||||
                                                                                 gdouble                     angle);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gdouble                         clutter_actor_get_rotation_angle                (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterRotateAxis           axis);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_set_scale                         (ClutterActor               *self,
 | 
			
		||||
                                                                                 gdouble                     scale_x,
 | 
			
		||||
                                                                                 gdouble                     scale_y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_scale                         (ClutterActor               *self,
 | 
			
		||||
                                                                                 gdouble                    *scale_x,
 | 
			
		||||
                                                                                 gdouble                    *scale_y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_scale_z                       (ClutterActor               *self,
 | 
			
		||||
                                                                                 gdouble                     scale_z);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
gdouble                         clutter_actor_get_scale_z                       (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_translation                   (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                      translate_x,
 | 
			
		||||
                                                                                 gfloat                      translate_y,
 | 
			
		||||
                                                                                 gfloat                      translate_z);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_get_translation                   (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                     *translate_x,
 | 
			
		||||
                                                                                 gfloat                     *translate_y,
 | 
			
		||||
                                                                                 gfloat                     *translate_z);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_transform                     (ClutterActor               *self,
 | 
			
		||||
                                                                                 const ClutterMatrix        *transform);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_get_transform                     (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterMatrix              *transform);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_set_child_transform               (ClutterActor               *self,
 | 
			
		||||
                                                                                 const ClutterMatrix        *transform);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                            clutter_actor_get_child_transform               (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterMatrix              *transform);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_get_transformed_extents          (ClutterActor               *self,
 | 
			
		||||
                                                                                graphene_rect_t            *rect);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_transformed_position          (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                     *x,
 | 
			
		||||
                                                                                 gfloat                     *y);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_transformed_size              (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                     *width,
 | 
			
		||||
                                                                                 gfloat                     *height);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean                        clutter_actor_transform_stage_point             (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                      x,
 | 
			
		||||
                                                                                 gfloat                      y,
 | 
			
		||||
                                                                                 gfloat                     *x_out,
 | 
			
		||||
                                                                                 gfloat                     *y_out);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_get_abs_allocation_vertices       (ClutterActor               *self,
 | 
			
		||||
                                                                                 graphene_point3d_t         *verts);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 ClutterVertex               verts[]);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_apply_transform_to_point          (ClutterActor               *self,
 | 
			
		||||
                                                                                 const graphene_point3d_t   *point,
 | 
			
		||||
                                                                                 graphene_point3d_t         *vertex);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
                                                                                 const ClutterVertex        *point,
 | 
			
		||||
                                                                                 ClutterVertex              *vertex);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_actor_apply_relative_transform_to_point (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterActor               *ancestor,
 | 
			
		||||
                                                                                 const graphene_point3d_t   *point,
 | 
			
		||||
                                                                                 graphene_point3d_t         *vertex);
 | 
			
		||||
                                                                                 const ClutterVertex        *point,
 | 
			
		||||
                                                                                 ClutterVertex              *vertex);
 | 
			
		||||
 | 
			
		||||
/* Implicit animations */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_save_easing_state                 (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_restore_easing_state              (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_easing_mode                   (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterAnimationMode        mode);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterAnimationMode            clutter_actor_get_easing_mode                   (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_easing_duration               (ClutterActor               *self,
 | 
			
		||||
                                                                                 guint                       msecs);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
guint                           clutter_actor_get_easing_duration               (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_set_easing_delay                  (ClutterActor               *self,
 | 
			
		||||
                                                                                 guint                       msecs);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
guint                           clutter_actor_get_easing_delay                  (ClutterActor               *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterTransition *             clutter_actor_get_transition                    (ClutterActor               *self,
 | 
			
		||||
                                                                                 const char                 *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_add_transition                    (ClutterActor               *self,
 | 
			
		||||
                                                                                 const char                 *name,
 | 
			
		||||
                                                                                 ClutterTransition          *transition);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_remove_transition                 (ClutterActor               *self,
 | 
			
		||||
                                                                                 const char                 *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void                            clutter_actor_remove_all_transitions            (ClutterActor               *self);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_16
 | 
			
		||||
gboolean                        clutter_actor_has_mapped_clones                 (ClutterActor *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_22
 | 
			
		||||
void                            clutter_actor_set_opacity_override              (ClutterActor               *self,
 | 
			
		||||
                                                                                 gint                        opacity);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_22
 | 
			
		||||
gint                            clutter_actor_get_opacity_override              (ClutterActor               *self);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_inhibit_culling                   (ClutterActor               *actor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_uninhibit_culling                 (ClutterActor               *actor);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterActorCreateChildFunc:
 | 
			
		||||
 * @item: (type GObject): the item in the model
 | 
			
		||||
@@ -911,30 +883,19 @@ void                            clutter_actor_uninhibit_culling
 | 
			
		||||
typedef ClutterActor * (* ClutterActorCreateChildFunc) (gpointer item,
 | 
			
		||||
                                                        gpointer user_data);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_24
 | 
			
		||||
void                            clutter_actor_bind_model                        (ClutterActor               *self,
 | 
			
		||||
                                                                                 GListModel                 *model,
 | 
			
		||||
                                                                                 ClutterActorCreateChildFunc create_child_func,
 | 
			
		||||
                                                                                 gpointer                    user_data,
 | 
			
		||||
                                                                                 GDestroyNotify              notify);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_24
 | 
			
		||||
void                            clutter_actor_bind_model_with_properties        (ClutterActor               *self,
 | 
			
		||||
                                                                                 GListModel                 *model,
 | 
			
		||||
                                                                                 GType                       child_type,
 | 
			
		||||
                                                                                 const char                 *first_model_property,
 | 
			
		||||
                                                                                 ...);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_actor_pick_box (ClutterActor          *self,
 | 
			
		||||
                             ClutterPickContext    *pick_context,
 | 
			
		||||
                             const ClutterActorBox *box);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
GList * clutter_actor_peek_stage_views (ClutterActor *self);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_actor_invalidate_transform (ClutterActor *self);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CLUTTER_ACTOR_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,9 @@
 | 
			
		||||
 * #ClutterAlignConstraint is available since Clutter 1.4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-align-constraint.h"
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +60,6 @@ struct _ClutterAlignConstraint
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  ClutterActor *source;
 | 
			
		||||
  ClutterAlignAxis align_axis;
 | 
			
		||||
  graphene_point_t pivot;
 | 
			
		||||
  gfloat factor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -73,7 +74,6 @@ enum
 | 
			
		||||
 | 
			
		||||
  PROP_SOURCE,
 | 
			
		||||
  PROP_ALIGN_AXIS,
 | 
			
		||||
  PROP_PIVOT_POINT,
 | 
			
		||||
  PROP_FACTOR,
 | 
			
		||||
 | 
			
		||||
  PROP_LAST
 | 
			
		||||
@@ -86,11 +86,13 @@ G_DEFINE_TYPE (ClutterAlignConstraint,
 | 
			
		||||
               CLUTTER_TYPE_CONSTRAINT);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
source_queue_relayout (ClutterActor           *actor,
 | 
			
		||||
                       ClutterAlignConstraint *align)
 | 
			
		||||
source_position_changed (ClutterActor           *actor,
 | 
			
		||||
                         const ClutterActorBox  *allocation,
 | 
			
		||||
                         ClutterAllocationFlags  flags,
 | 
			
		||||
                         ClutterAlignConstraint *align)
 | 
			
		||||
{
 | 
			
		||||
  if (align->actor != NULL)
 | 
			
		||||
    _clutter_actor_queue_only_relayout (align->actor);
 | 
			
		||||
    clutter_actor_queue_relayout (align->actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -135,41 +137,35 @@ clutter_align_constraint_update_allocation (ClutterConstraint *constraint,
 | 
			
		||||
  ClutterAlignConstraint *align = CLUTTER_ALIGN_CONSTRAINT (constraint);
 | 
			
		||||
  gfloat source_width, source_height;
 | 
			
		||||
  gfloat actor_width, actor_height;
 | 
			
		||||
  gfloat offset_x_start, offset_y_start;
 | 
			
		||||
  gfloat pivot_x, pivot_y;
 | 
			
		||||
  gfloat source_x, source_y;
 | 
			
		||||
 | 
			
		||||
  if (align->source == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  clutter_actor_box_get_size (allocation, &actor_width, &actor_height);
 | 
			
		||||
 | 
			
		||||
  clutter_actor_get_position (align->source, &source_x, &source_y);
 | 
			
		||||
  clutter_actor_get_size (align->source, &source_width, &source_height);
 | 
			
		||||
 | 
			
		||||
  pivot_x = align->pivot.x == -1.f
 | 
			
		||||
    ? align->factor
 | 
			
		||||
    : align->pivot.x;
 | 
			
		||||
  pivot_y = align->pivot.y == -1.f
 | 
			
		||||
    ? align->factor
 | 
			
		||||
    : align->pivot.y;
 | 
			
		||||
 | 
			
		||||
  offset_x_start = pivot_x * -actor_width;
 | 
			
		||||
  offset_y_start = pivot_y * -actor_height;
 | 
			
		||||
 | 
			
		||||
  switch (align->align_axis)
 | 
			
		||||
    {
 | 
			
		||||
    case CLUTTER_ALIGN_X_AXIS:
 | 
			
		||||
      allocation->x1 += offset_x_start + (source_width * align->factor);
 | 
			
		||||
      allocation->x1 = ((source_width - actor_width) * align->factor)
 | 
			
		||||
                     + source_x;
 | 
			
		||||
      allocation->x2 = allocation->x1 + actor_width;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case CLUTTER_ALIGN_Y_AXIS:
 | 
			
		||||
      allocation->y1 += offset_y_start + (source_height * align->factor);
 | 
			
		||||
      allocation->y1 = ((source_height - actor_height) * align->factor)
 | 
			
		||||
                     + source_y;
 | 
			
		||||
      allocation->y2 = allocation->y1 + actor_height;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case CLUTTER_ALIGN_BOTH:
 | 
			
		||||
      allocation->x1 += offset_x_start + (source_width * align->factor);
 | 
			
		||||
      allocation->y1 += offset_y_start + (source_height * align->factor);
 | 
			
		||||
      allocation->x1 = ((source_width - actor_width) * align->factor)
 | 
			
		||||
                     + source_x;
 | 
			
		||||
      allocation->y1 = ((source_height - actor_height) * align->factor)
 | 
			
		||||
                     + source_y;
 | 
			
		||||
      allocation->x2 = allocation->x1 + actor_width;
 | 
			
		||||
      allocation->y2 = allocation->y1 + actor_height;
 | 
			
		||||
      break;
 | 
			
		||||
@@ -193,7 +189,7 @@ clutter_align_constraint_dispose (GObject *gobject)
 | 
			
		||||
                                            G_CALLBACK (source_destroyed),
 | 
			
		||||
                                            align);
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (align->source,
 | 
			
		||||
                                            G_CALLBACK (source_queue_relayout),
 | 
			
		||||
                                            G_CALLBACK (source_position_changed),
 | 
			
		||||
                                            align);
 | 
			
		||||
      align->source = NULL;
 | 
			
		||||
    }
 | 
			
		||||
@@ -219,10 +215,6 @@ clutter_align_constraint_set_property (GObject      *gobject,
 | 
			
		||||
      clutter_align_constraint_set_align_axis (align, g_value_get_enum (value));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_PIVOT_POINT:
 | 
			
		||||
      clutter_align_constraint_set_pivot_point (align, g_value_get_boxed (value));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_FACTOR:
 | 
			
		||||
      clutter_align_constraint_set_factor (align, g_value_get_float (value));
 | 
			
		||||
      break;
 | 
			
		||||
@@ -251,16 +243,6 @@ clutter_align_constraint_get_property (GObject    *gobject,
 | 
			
		||||
      g_value_set_enum (value, align->align_axis);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_PIVOT_POINT:
 | 
			
		||||
      {
 | 
			
		||||
        graphene_point_t point;
 | 
			
		||||
 | 
			
		||||
        clutter_align_constraint_get_pivot_point (align, &point);
 | 
			
		||||
 | 
			
		||||
        g_value_set_boxed (value, &point);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_FACTOR:
 | 
			
		||||
      g_value_set_float (value, align->factor);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -314,30 +296,6 @@ clutter_align_constraint_class_init (ClutterAlignConstraintClass *klass)
 | 
			
		||||
                       CLUTTER_ALIGN_X_AXIS,
 | 
			
		||||
                       CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterAlignConstraint:pivot-point:
 | 
			
		||||
   *
 | 
			
		||||
   * The pivot point used by the constraint. The pivot point is the
 | 
			
		||||
   * point in the constraint actor around which the aligning is applied,
 | 
			
		||||
   * with (0, 0) being the top left corner of the actor and (1, 1) the
 | 
			
		||||
   * bottom right corner of the actor.
 | 
			
		||||
   *
 | 
			
		||||
   * For example, setting the pivot point to (0.5, 0.5) and using a factor
 | 
			
		||||
   * of 1 for both axes will align the actors horizontal and vertical
 | 
			
		||||
   * center point with the bottom right corner of the source actor.
 | 
			
		||||
   *
 | 
			
		||||
   * By default, the pivot point is set to (-1, -1), which means it's not
 | 
			
		||||
   * used and the constrained actor will be aligned to always stay inside
 | 
			
		||||
   * the source actor.
 | 
			
		||||
   */
 | 
			
		||||
  obj_props[PROP_PIVOT_POINT] =
 | 
			
		||||
    g_param_spec_boxed ("pivot-point",
 | 
			
		||||
                       P_("Pivot point"),
 | 
			
		||||
                       P_("The pivot point"),
 | 
			
		||||
                       GRAPHENE_TYPE_POINT,
 | 
			
		||||
                       G_PARAM_READWRITE |
 | 
			
		||||
                       G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterAlignConstraint:factor:
 | 
			
		||||
   *
 | 
			
		||||
@@ -370,8 +328,6 @@ clutter_align_constraint_init (ClutterAlignConstraint *self)
 | 
			
		||||
  self->actor = NULL;
 | 
			
		||||
  self->source = NULL;
 | 
			
		||||
  self->align_axis = CLUTTER_ALIGN_X_AXIS;
 | 
			
		||||
  self->pivot.x = -1.f;
 | 
			
		||||
  self->pivot.y = -1.f;
 | 
			
		||||
  self->factor = 0.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -449,15 +405,15 @@ clutter_align_constraint_set_source (ClutterAlignConstraint *align,
 | 
			
		||||
                                            G_CALLBACK (source_destroyed),
 | 
			
		||||
                                            align);
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (old_source,
 | 
			
		||||
                                            G_CALLBACK (source_queue_relayout),
 | 
			
		||||
                                            G_CALLBACK (source_position_changed),
 | 
			
		||||
                                            align);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  align->source = source;
 | 
			
		||||
  if (align->source != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_connect (align->source, "queue-relayout",
 | 
			
		||||
                        G_CALLBACK (source_queue_relayout),
 | 
			
		||||
      g_signal_connect (align->source, "allocation-changed",
 | 
			
		||||
                        G_CALLBACK (source_position_changed),
 | 
			
		||||
                        align);
 | 
			
		||||
      g_signal_connect (align->source, "destroy",
 | 
			
		||||
                        G_CALLBACK (source_destroyed),
 | 
			
		||||
@@ -534,60 +490,6 @@ clutter_align_constraint_get_align_axis (ClutterAlignConstraint *align)
 | 
			
		||||
  return align->align_axis;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_align_constraint_set_pivot_point:
 | 
			
		||||
 * @align: a #ClutterAlignConstraint
 | 
			
		||||
 * @pivot_point: A #GraphenePoint
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the pivot point used by the constraint, the pivot point is the
 | 
			
		||||
 * point in the constraint actor around which the aligning is applied,
 | 
			
		||||
 * with (0, 0) being the top left corner of the actor and (1, 1) the
 | 
			
		||||
 * bottom right corner of the actor.
 | 
			
		||||
 *
 | 
			
		||||
 * If -1 is used, the pivot point is unset and the constrained actor
 | 
			
		||||
 * will be aligned to always stay inside the source actor.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_align_constraint_set_pivot_point (ClutterAlignConstraint *align,
 | 
			
		||||
                                          const graphene_point_t *pivot_point)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ALIGN_CONSTRAINT (align));
 | 
			
		||||
  g_return_if_fail (pivot_point != NULL);
 | 
			
		||||
  g_return_if_fail (pivot_point->x == -1.f ||
 | 
			
		||||
                    (pivot_point->x >= 0.f && pivot_point->x <= 1.f));
 | 
			
		||||
  g_return_if_fail (pivot_point->y == -1.f ||
 | 
			
		||||
                    (pivot_point->y >= 0.f && pivot_point->y <= 1.f));
 | 
			
		||||
 | 
			
		||||
  if (graphene_point_equal (&align->pivot, pivot_point))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  align->pivot = *pivot_point;
 | 
			
		||||
 | 
			
		||||
  if (align->actor != NULL)
 | 
			
		||||
    clutter_actor_queue_relayout (align->actor);
 | 
			
		||||
 | 
			
		||||
  g_object_notify_by_pspec (G_OBJECT (align), obj_props[PROP_PIVOT_POINT]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_align_constraint_get_pivot_point
 | 
			
		||||
 * @align: a #ClutterAlignConstraint
 | 
			
		||||
 * @pivot_point: (out caller-allocates): return location for a #GraphenePoint
 | 
			
		||||
 *
 | 
			
		||||
 * Gets the pivot point used by the constraint set with
 | 
			
		||||
 * clutter_align_constraint_set_pivot_point(). If no custom pivot
 | 
			
		||||
 * point is set, -1 is set.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_align_constraint_get_pivot_point (ClutterAlignConstraint *align,
 | 
			
		||||
                                          graphene_point_t       *pivot_point)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ALIGN_CONSTRAINT (align));
 | 
			
		||||
  g_return_if_fail (pivot_point != NULL);
 | 
			
		||||
 | 
			
		||||
  *pivot_point = align->pivot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_align_constraint_set_factor:
 | 
			
		||||
 * @align: a #ClutterAlignConstraint
 | 
			
		||||
 
 | 
			
		||||
@@ -48,34 +48,28 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _ClutterAlignConstraint          ClutterAlignConstraint;
 | 
			
		||||
typedef struct _ClutterAlignConstraintClass     ClutterAlignConstraintClass;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_align_constraint_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterConstraint *clutter_align_constraint_new            (ClutterActor           *source,
 | 
			
		||||
                                                            ClutterAlignAxis        axis,
 | 
			
		||||
                                                            gfloat                  factor);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_align_constraint_set_source     (ClutterAlignConstraint *align,
 | 
			
		||||
                                                            ClutterActor           *source);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterActor *     clutter_align_constraint_get_source     (ClutterAlignConstraint *align);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_align_constraint_set_align_axis (ClutterAlignConstraint *align,
 | 
			
		||||
                                                            ClutterAlignAxis        axis);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterAlignAxis   clutter_align_constraint_get_align_axis (ClutterAlignConstraint *align);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void               clutter_align_constraint_set_pivot_point (ClutterAlignConstraint *align,
 | 
			
		||||
                                                             const graphene_point_t *pivot_point);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void               clutter_align_constraint_get_pivot_point (ClutterAlignConstraint *align,
 | 
			
		||||
                                                             graphene_point_t       *pivot_point);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_align_constraint_set_factor     (ClutterAlignConstraint *align,
 | 
			
		||||
                                                            gfloat                  factor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gfloat             clutter_align_constraint_get_factor     (ClutterAlignConstraint *align);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -27,23 +27,39 @@
 | 
			
		||||
 * @short_description: Interface for animatable classes
 | 
			
		||||
 *
 | 
			
		||||
 * #ClutterAnimatable is an interface that allows a #GObject class
 | 
			
		||||
 * to control how an actor will animate a property.
 | 
			
		||||
 * to control how a #ClutterAnimation will animate a property.
 | 
			
		||||
 *
 | 
			
		||||
 * Each #ClutterAnimatable should implement the
 | 
			
		||||
 * #ClutterAnimatableInterface.interpolate_property() virtual function of the
 | 
			
		||||
 * #ClutterAnimatableIface.interpolate_property() virtual function of the
 | 
			
		||||
 * interface to compute the animation state between two values of an interval
 | 
			
		||||
 * depending on a progress factor, expressed as a floating point value.
 | 
			
		||||
 *
 | 
			
		||||
 * If a #ClutterAnimatable is animated by a #ClutterAnimation
 | 
			
		||||
 * instance, the #ClutterAnimation will call
 | 
			
		||||
 * clutter_animatable_interpolate_property() passing the name of the
 | 
			
		||||
 * currently animated property; the values interval; and the progress factor.
 | 
			
		||||
 * The #ClutterAnimatable implementation should return the computed value for
 | 
			
		||||
 * the animated
 | 
			
		||||
 * property.
 | 
			
		||||
 *
 | 
			
		||||
 * #ClutterAnimatable is available since Clutter 1.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
 | 
			
		||||
#include "clutter-animatable.h"
 | 
			
		||||
#include "clutter-interval.h"
 | 
			
		||||
#include "clutter-debug.h"
 | 
			
		||||
#include "clutter-private.h"
 | 
			
		||||
 | 
			
		||||
#include "deprecated/clutter-animatable.h"
 | 
			
		||||
#include "deprecated/clutter-animation.h"
 | 
			
		||||
 | 
			
		||||
typedef ClutterAnimatableIface  ClutterAnimatableInterface;
 | 
			
		||||
G_DEFINE_INTERFACE (ClutterAnimatable, clutter_animatable, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -51,6 +67,80 @@ clutter_animatable_default_init (ClutterAnimatableInterface *iface)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_animatable_animate_property:
 | 
			
		||||
 * @animatable: a #ClutterAnimatable
 | 
			
		||||
 * @animation: a #ClutterAnimation
 | 
			
		||||
 * @property_name: the name of the animated property
 | 
			
		||||
 * @initial_value: the initial value of the animation interval
 | 
			
		||||
 * @final_value: the final value of the animation interval
 | 
			
		||||
 * @progress: the progress factor
 | 
			
		||||
 * @value: return location for the animation value
 | 
			
		||||
 *
 | 
			
		||||
 * Calls the animate_property() virtual function for @animatable.
 | 
			
		||||
 *
 | 
			
		||||
 * The @initial_value and @final_value #GValue<!-- -->s must contain
 | 
			
		||||
 * the same type; @value must have been initialized to the same
 | 
			
		||||
 * type of @initial_value and @final_value.
 | 
			
		||||
 *
 | 
			
		||||
 * All implementation of the #ClutterAnimatable interface must
 | 
			
		||||
 * implement this function.
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: %TRUE if the value has been validated and can
 | 
			
		||||
 *   be applied to the #ClutterAnimatable, and %FALSE otherwise
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.8: Use clutter_animatable_interpolate_value()
 | 
			
		||||
 *   instead
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_animatable_animate_property (ClutterAnimatable *animatable,
 | 
			
		||||
                                     ClutterAnimation  *animation,
 | 
			
		||||
                                     const gchar       *property_name,
 | 
			
		||||
                                     const GValue      *initial_value,
 | 
			
		||||
                                     const GValue      *final_value,
 | 
			
		||||
                                     gdouble            progress,
 | 
			
		||||
                                     GValue            *value)
 | 
			
		||||
{
 | 
			
		||||
  ClutterAnimatableIface *iface;
 | 
			
		||||
  gboolean res;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), FALSE);
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ANIMATION (animation), FALSE);
 | 
			
		||||
  g_return_val_if_fail (property_name != NULL, FALSE);
 | 
			
		||||
  g_return_val_if_fail (initial_value != NULL && final_value != NULL, FALSE);
 | 
			
		||||
  g_return_val_if_fail (G_VALUE_TYPE (initial_value) != G_TYPE_INVALID, FALSE);
 | 
			
		||||
  g_return_val_if_fail (G_VALUE_TYPE (final_value) != G_TYPE_INVALID, FALSE);
 | 
			
		||||
  g_return_val_if_fail (value != NULL, FALSE);
 | 
			
		||||
  g_return_val_if_fail (G_VALUE_TYPE (value) == G_VALUE_TYPE (initial_value) &&
 | 
			
		||||
                        G_VALUE_TYPE (value) == G_VALUE_TYPE (final_value),
 | 
			
		||||
                        FALSE);
 | 
			
		||||
 | 
			
		||||
  iface = CLUTTER_ANIMATABLE_GET_IFACE (animatable);
 | 
			
		||||
  if (iface->animate_property == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterInterval *interval;
 | 
			
		||||
 | 
			
		||||
      interval = clutter_animation_get_interval (animation, property_name);
 | 
			
		||||
      if (interval == NULL)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
 | 
			
		||||
      res = clutter_animatable_interpolate_value (animatable, property_name,
 | 
			
		||||
                                                  interval,
 | 
			
		||||
                                                  progress,
 | 
			
		||||
                                                  value);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    res = iface->animate_property (animatable, animation,
 | 
			
		||||
                                   property_name,
 | 
			
		||||
                                   initial_value, final_value,
 | 
			
		||||
                                   progress,
 | 
			
		||||
                                   value);
 | 
			
		||||
 | 
			
		||||
  return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_animatable_find_property:
 | 
			
		||||
 * @animatable: a #ClutterAnimatable
 | 
			
		||||
@@ -67,7 +157,7 @@ GParamSpec *
 | 
			
		||||
clutter_animatable_find_property (ClutterAnimatable *animatable,
 | 
			
		||||
                                  const gchar       *property_name)
 | 
			
		||||
{
 | 
			
		||||
  ClutterAnimatableInterface *iface;
 | 
			
		||||
  ClutterAnimatableIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), NULL);
 | 
			
		||||
  g_return_val_if_fail (property_name != NULL, NULL);
 | 
			
		||||
@@ -97,7 +187,7 @@ clutter_animatable_get_initial_state (ClutterAnimatable *animatable,
 | 
			
		||||
                                      const gchar       *property_name,
 | 
			
		||||
                                      GValue            *value)
 | 
			
		||||
{
 | 
			
		||||
  ClutterAnimatableInterface *iface;
 | 
			
		||||
  ClutterAnimatableIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ANIMATABLE (animatable));
 | 
			
		||||
  g_return_if_fail (property_name != NULL);
 | 
			
		||||
@@ -126,7 +216,7 @@ clutter_animatable_set_final_state (ClutterAnimatable *animatable,
 | 
			
		||||
                                    const gchar       *property_name,
 | 
			
		||||
                                    const GValue      *value)
 | 
			
		||||
{
 | 
			
		||||
  ClutterAnimatableInterface *iface;
 | 
			
		||||
  ClutterAnimatableIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ANIMATABLE (animatable));
 | 
			
		||||
  g_return_if_fail (property_name != NULL);
 | 
			
		||||
@@ -172,7 +262,7 @@ clutter_animatable_interpolate_value (ClutterAnimatable *animatable,
 | 
			
		||||
                                      gdouble            progress,
 | 
			
		||||
                                      GValue            *value)
 | 
			
		||||
{
 | 
			
		||||
  ClutterAnimatableInterface *iface;
 | 
			
		||||
  ClutterAnimatableIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), FALSE);
 | 
			
		||||
  g_return_val_if_fail (property_name != NULL, FALSE);
 | 
			
		||||
@@ -194,25 +284,3 @@ clutter_animatable_interpolate_value (ClutterAnimatable *animatable,
 | 
			
		||||
  else
 | 
			
		||||
    return clutter_interval_compute_value (interval, progress, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_animatable_get_actor:
 | 
			
		||||
 * @animatable: a #ClutterAnimatable
 | 
			
		||||
 *
 | 
			
		||||
 * Get animated actor.
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: (transfer none): a #ClutterActor
 | 
			
		||||
 */
 | 
			
		||||
ClutterActor *
 | 
			
		||||
clutter_animatable_get_actor (ClutterAnimatable *animatable)
 | 
			
		||||
{
 | 
			
		||||
  ClutterAnimatableInterface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), NULL);
 | 
			
		||||
 | 
			
		||||
  iface = CLUTTER_ANIMATABLE_GET_IFACE (animatable);
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (iface->get_actor, NULL);
 | 
			
		||||
 | 
			
		||||
  return iface->get_actor (animatable);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,15 +33,26 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_TYPE_ANIMATABLE (clutter_animatable_get_type ())
 | 
			
		||||
#define CLUTTER_TYPE_ANIMATABLE                 (clutter_animatable_get_type ())
 | 
			
		||||
#define CLUTTER_ANIMATABLE(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ANIMATABLE, ClutterAnimatable))
 | 
			
		||||
#define CLUTTER_IS_ANIMATABLE(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ANIMATABLE))
 | 
			
		||||
#define CLUTTER_ANIMATABLE_GET_IFACE(obj)       (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CLUTTER_TYPE_ANIMATABLE, ClutterAnimatableIface))
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
G_DECLARE_INTERFACE (ClutterAnimatable, clutter_animatable,
 | 
			
		||||
                     CLUTTER, ANIMATABLE,
 | 
			
		||||
                     GObject)
 | 
			
		||||
typedef struct _ClutterAnimatableIface          ClutterAnimatableIface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterAnimatableInterface:
 | 
			
		||||
 * ClutterAnimatable:
 | 
			
		||||
 *
 | 
			
		||||
 * #ClutterAnimatable is an opaque structure whose members cannot be directly
 | 
			
		||||
 * accessed
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterAnimatableIface:
 | 
			
		||||
 * @animate_property: virtual function for custom interpolation of a
 | 
			
		||||
 *   property. This virtual function is deprecated
 | 
			
		||||
 * @find_property: virtual function for retrieving the #GParamSpec of
 | 
			
		||||
 *   an animatable property
 | 
			
		||||
 * @get_initial_state: virtual function for retrieving the initial
 | 
			
		||||
@@ -50,16 +61,25 @@ G_DECLARE_INTERFACE (ClutterAnimatable, clutter_animatable,
 | 
			
		||||
 *   animatable property
 | 
			
		||||
 * @interpolate_value: virtual function for interpolating the progress
 | 
			
		||||
 *   of a property
 | 
			
		||||
 * @get_actor: virtual function for getting associated actor
 | 
			
		||||
 *
 | 
			
		||||
 * Base interface for #GObject<!-- -->s that can be animated by a
 | 
			
		||||
 * a #ClutterAnimation.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 */
 | 
			
		||||
struct _ClutterAnimatableInterface
 | 
			
		||||
struct _ClutterAnimatableIface
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  GTypeInterface parent_iface;
 | 
			
		||||
 | 
			
		||||
  /*< public >*/
 | 
			
		||||
  gboolean    (* animate_property)  (ClutterAnimatable *animatable,
 | 
			
		||||
                                     ClutterAnimation  *animation,
 | 
			
		||||
                                     const gchar       *property_name,
 | 
			
		||||
                                     const GValue      *initial_value,
 | 
			
		||||
                                     const GValue      *final_value,
 | 
			
		||||
                                     gdouble            progress,
 | 
			
		||||
                                     GValue            *value);
 | 
			
		||||
  GParamSpec *(* find_property)     (ClutterAnimatable *animatable,
 | 
			
		||||
                                     const gchar       *property_name);
 | 
			
		||||
  void        (* get_initial_state) (ClutterAnimatable *animatable,
 | 
			
		||||
@@ -73,30 +93,29 @@ struct _ClutterAnimatableInterface
 | 
			
		||||
                                     ClutterInterval   *interval,
 | 
			
		||||
                                     gdouble            progress,
 | 
			
		||||
                                     GValue            *value);
 | 
			
		||||
  ClutterActor * (* get_actor)      (ClutterAnimatable *animatable);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
GType clutter_animatable_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
GParamSpec *clutter_animatable_find_property     (ClutterAnimatable *animatable,
 | 
			
		||||
                                                  const gchar       *property_name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void        clutter_animatable_get_initial_state (ClutterAnimatable *animatable,
 | 
			
		||||
                                                  const gchar       *property_name,
 | 
			
		||||
                                                  GValue            *value);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void        clutter_animatable_set_final_state   (ClutterAnimatable *animatable,
 | 
			
		||||
                                                  const gchar       *property_name,
 | 
			
		||||
                                                  const GValue      *value);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_8
 | 
			
		||||
gboolean    clutter_animatable_interpolate_value (ClutterAnimatable *animatable,
 | 
			
		||||
                                                  const gchar       *property_name,
 | 
			
		||||
                                                  ClutterInterval   *interval,
 | 
			
		||||
                                                  gdouble            progress,
 | 
			
		||||
                                                  GValue            *value);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
ClutterActor * clutter_animatable_get_actor      (ClutterAnimatable *animatable);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CLUTTER_ANIMATABLE_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -30,8 +30,11 @@
 | 
			
		||||
 | 
			
		||||
#ifndef __GI_SCANNER__
 | 
			
		||||
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterAction, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterActor, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterActorMeta, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterAlignConstraint, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterAnimatable, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBackend, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBindConstraint, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBindingPool, g_object_unref)
 | 
			
		||||
@@ -41,15 +44,21 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBoxLayout, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBrightnessContrastEffect, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterCanvas, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterChildMeta, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterClickAction, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterClone, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterColorizeEffect, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterConstraint, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterContainer, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterContent, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDeformEffect, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDesaturateEffect, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDeviceManager, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDragAction, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDropAction, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterEffect, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFixedLayout, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFlowLayout, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterGestureAction, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterGridLayout, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterImage, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterInputDevice, g_object_unref)
 | 
			
		||||
@@ -84,10 +93,13 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterActorBox, clutter_actor_box_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterColor, clutter_color_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterMargin, clutter_margin_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterMatrix, clutter_matrix_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPaintContext, clutter_paint_context_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPaintNode, clutter_paint_node_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPaintVolume, clutter_paint_volume_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPathNode, clutter_path_node_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPoint, clutter_point_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterRect, clutter_rect_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterSize, clutter_size_free)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterVertex, clutter_vertex_free)
 | 
			
		||||
 | 
			
		||||
#endif /* __GI_SCANNER__ */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,9 +23,11 @@
 | 
			
		||||
#define __CLUTTER_BACKEND_PRIVATE_H__
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter-backend.h>
 | 
			
		||||
#include <clutter/clutter-seat.h>
 | 
			
		||||
#include <clutter/clutter-device-manager.h>
 | 
			
		||||
#include <clutter/clutter-stage-window.h>
 | 
			
		||||
 | 
			
		||||
#include "clutter-event-translator.h"
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_BACKEND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BACKEND, ClutterBackendClass))
 | 
			
		||||
#define CLUTTER_IS_BACKEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BACKEND))
 | 
			
		||||
#define CLUTTER_BACKEND_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BACKEND, ClutterBackendClass))
 | 
			
		||||
@@ -46,6 +48,8 @@ struct _ClutterBackend
 | 
			
		||||
 | 
			
		||||
  CoglOnscreen *dummy_onscreen;
 | 
			
		||||
 | 
			
		||||
  ClutterDeviceManager *device_manager;
 | 
			
		||||
 | 
			
		||||
  cairo_font_options_t *font_options;
 | 
			
		||||
 | 
			
		||||
  gchar *font_name;
 | 
			
		||||
@@ -53,11 +57,7 @@ struct _ClutterBackend
 | 
			
		||||
  gfloat units_per_em;
 | 
			
		||||
  gint32 units_serial;
 | 
			
		||||
 | 
			
		||||
  float fallback_resource_scale;
 | 
			
		||||
 | 
			
		||||
  ClutterStageWindow *stage_window;
 | 
			
		||||
 | 
			
		||||
  ClutterInputMethod *input_method;
 | 
			
		||||
  GList *event_translators;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ClutterBackendClass
 | 
			
		||||
@@ -86,14 +86,21 @@ struct _ClutterBackendClass
 | 
			
		||||
                                                GError         **error);
 | 
			
		||||
  gboolean              (* create_context)     (ClutterBackend  *backend,
 | 
			
		||||
                                                GError         **error);
 | 
			
		||||
  ClutterDeviceManager *(* get_device_manager) (ClutterBackend  *backend);
 | 
			
		||||
 | 
			
		||||
  void                  (* copy_event_data)    (ClutterBackend     *backend,
 | 
			
		||||
                                                const ClutterEvent *src,
 | 
			
		||||
                                                ClutterEvent       *dest);
 | 
			
		||||
  void                  (* free_event_data)    (ClutterBackend     *backend,
 | 
			
		||||
                                                ClutterEvent       *event);
 | 
			
		||||
 | 
			
		||||
  gboolean              (* translate_event)    (ClutterBackend     *backend,
 | 
			
		||||
                                                gpointer            native,
 | 
			
		||||
                                                ClutterEvent       *event);
 | 
			
		||||
 | 
			
		||||
  ClutterSeat *         (* get_default_seat)   (ClutterBackend *backend);
 | 
			
		||||
  PangoDirection        (* get_keymap_direction) (ClutterBackend   *backend);
 | 
			
		||||
 | 
			
		||||
  gboolean              (* is_display_server)  (ClutterBackend *backend);
 | 
			
		||||
  void                  (* bell_notify)          (ClutterBackend   *backend);
 | 
			
		||||
 | 
			
		||||
  /* signals */
 | 
			
		||||
  void (* resolution_changed) (ClutterBackend *backend);
 | 
			
		||||
@@ -122,29 +129,31 @@ void                    _clutter_backend_copy_event_data                (Clutter
 | 
			
		||||
                                                                         ClutterEvent           *dest);
 | 
			
		||||
void                    _clutter_backend_free_event_data                (ClutterBackend         *backend,
 | 
			
		||||
                                                                         ClutterEvent           *event);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
gboolean                _clutter_backend_translate_event                (ClutterBackend         *backend,
 | 
			
		||||
                                                                         gpointer                native,
 | 
			
		||||
                                                                         ClutterEvent           *event);
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_MUTTER
 | 
			
		||||
void                    _clutter_backend_add_event_translator           (ClutterBackend         *backend,
 | 
			
		||||
                                                                         ClutterEventTranslator *translator);
 | 
			
		||||
 | 
			
		||||
void                    _clutter_backend_remove_event_translator        (ClutterBackend         *backend,
 | 
			
		||||
                                                                         ClutterEventTranslator *translator);
 | 
			
		||||
 | 
			
		||||
ClutterFeatureFlags     _clutter_backend_get_features                   (ClutterBackend         *backend);
 | 
			
		||||
 | 
			
		||||
gfloat                  _clutter_backend_get_units_per_em               (ClutterBackend         *backend,
 | 
			
		||||
                                                                         PangoFontDescription   *font_desc);
 | 
			
		||||
gint32                  _clutter_backend_get_units_serial               (ClutterBackend         *backend);
 | 
			
		||||
 | 
			
		||||
PangoDirection          _clutter_backend_get_keymap_direction           (ClutterBackend         *backend);
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_MUTTER
 | 
			
		||||
void                    _clutter_backend_reset_cogl_framebuffer         (ClutterBackend         *backend);
 | 
			
		||||
 | 
			
		||||
void                    clutter_set_allowed_drivers                     (const char             *drivers);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
ClutterStageWindow *    clutter_backend_get_stage_window                (ClutterBackend         *backend);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_backend_set_fallback_resource_scale (ClutterBackend *backend,
 | 
			
		||||
                                                  float           fallback_resource_scale);
 | 
			
		||||
 | 
			
		||||
float clutter_backend_get_fallback_resource_scale (ClutterBackend *backend);
 | 
			
		||||
 | 
			
		||||
gboolean clutter_backend_is_display_server (ClutterBackend *backend);
 | 
			
		||||
void                    clutter_try_set_windowing_backend               (const char             *drivers);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,9 @@
 | 
			
		||||
 * #ClutterBackend is available since Clutter 0.4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
 | 
			
		||||
 | 
			
		||||
@@ -51,6 +53,11 @@
 | 
			
		||||
#include "clutter-stage-manager-private.h"
 | 
			
		||||
#include "clutter-stage-private.h"
 | 
			
		||||
#include "clutter-stage-window.h"
 | 
			
		||||
#include "clutter-version.h"
 | 
			
		||||
#include "clutter-device-manager-private.h"
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
#include "deprecated/clutter-backend.h"
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT
 | 
			
		||||
#include "wayland/clutter-wayland-compositor.h"
 | 
			
		||||
@@ -58,6 +65,16 @@
 | 
			
		||||
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_INPUT_X11
 | 
			
		||||
#include "x11/clutter-backend-x11.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CLUTTER_INPUT_EVDEV
 | 
			
		||||
#include "evdev/clutter-device-manager-evdev.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CLUTTER_WINDOWING_EGL
 | 
			
		||||
#include "egl/clutter-backend-eglnative.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT
 | 
			
		||||
#include <cogl/cogl-wayland-server.h>
 | 
			
		||||
#include <wayland-server.h>
 | 
			
		||||
@@ -93,12 +110,10 @@ clutter_backend_dispose (GObject *gobject)
 | 
			
		||||
  /* clear the events still in the queue of the main context */
 | 
			
		||||
  _clutter_clear_events_queue ();
 | 
			
		||||
 | 
			
		||||
  /* remove all event translators */
 | 
			
		||||
  g_clear_pointer (&backend->event_translators, g_list_free);
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&backend->dummy_onscreen, cogl_object_unref);
 | 
			
		||||
  if (backend->stage_window)
 | 
			
		||||
    {
 | 
			
		||||
      g_object_remove_weak_pointer (G_OBJECT (backend->stage_window),
 | 
			
		||||
                                    (gpointer *) &backend->stage_window);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (clutter_backend_parent_class)->dispose (gobject);
 | 
			
		||||
}
 | 
			
		||||
@@ -112,7 +127,6 @@ clutter_backend_finalize (GObject *gobject)
 | 
			
		||||
 | 
			
		||||
  g_free (backend->font_name);
 | 
			
		||||
  clutter_backend_set_font_options (backend, NULL);
 | 
			
		||||
  g_clear_object (&backend->input_method);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (clutter_backend_parent_class)->finalize (gobject);
 | 
			
		||||
}
 | 
			
		||||
@@ -388,7 +402,7 @@ clutter_backend_real_create_context (ClutterBackend  *backend,
 | 
			
		||||
      else
 | 
			
		||||
        g_set_error_literal (error, CLUTTER_INIT_ERROR,
 | 
			
		||||
                             CLUTTER_INIT_ERROR_BACKEND,
 | 
			
		||||
                             "Unable to initialize the Clutter backend: no available drivers found.");
 | 
			
		||||
                            _("Unable to initialize the Clutter backend: no available drivers found."));
 | 
			
		||||
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
@@ -415,6 +429,14 @@ clutter_backend_real_get_features (ClutterBackend *backend)
 | 
			
		||||
      flags |= CLUTTER_FEATURE_STAGE_STATIC;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_SWAP_THROTTLE))
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_NOTE (BACKEND, "Cogl supports swap buffers throttling");
 | 
			
		||||
      flags |= CLUTTER_FEATURE_SYNC_TO_VBLANK;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    CLUTTER_NOTE (BACKEND, "Cogl doesn't support swap buffers throttling");
 | 
			
		||||
 | 
			
		||||
  if (cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_SWAP_BUFFERS_EVENT))
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_NOTE (BACKEND, "Cogl supports swap buffers complete events");
 | 
			
		||||
@@ -424,8 +446,23 @@ clutter_backend_real_get_features (ClutterBackend *backend)
 | 
			
		||||
  return flags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *allowed_backends;
 | 
			
		||||
 | 
			
		||||
static ClutterBackend * (* custom_backend_func) (void);
 | 
			
		||||
 | 
			
		||||
static const struct {
 | 
			
		||||
  const char *name;
 | 
			
		||||
  ClutterBackend * (* create_backend) (void);
 | 
			
		||||
} available_backends[] = {
 | 
			
		||||
#ifdef CLUTTER_WINDOWING_X11
 | 
			
		||||
  { CLUTTER_WINDOWING_X11, clutter_backend_x11_new },
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CLUTTER_WINDOWING_EGL
 | 
			
		||||
  { CLUTTER_WINDOWING_EGL, clutter_backend_egl_native_new },
 | 
			
		||||
#endif
 | 
			
		||||
  { NULL, NULL },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
clutter_set_custom_backend_func (ClutterBackend *(* func) (void))
 | 
			
		||||
{
 | 
			
		||||
@@ -435,13 +472,58 @@ clutter_set_custom_backend_func (ClutterBackend *(* func) (void))
 | 
			
		||||
ClutterBackend *
 | 
			
		||||
_clutter_create_backend (void)
 | 
			
		||||
{
 | 
			
		||||
  const char *backends_list;
 | 
			
		||||
  ClutterBackend *retval;
 | 
			
		||||
  gboolean allow_any;
 | 
			
		||||
  char **backends;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (custom_backend_func, NULL);
 | 
			
		||||
  if (custom_backend_func)
 | 
			
		||||
    {
 | 
			
		||||
      retval = custom_backend_func ();
 | 
			
		||||
 | 
			
		||||
  retval = custom_backend_func ();
 | 
			
		||||
  if (!retval)
 | 
			
		||||
    g_error ("Failed to create custom backend.");
 | 
			
		||||
      if (!retval)
 | 
			
		||||
        g_error ("Failed to create custom backend.");
 | 
			
		||||
 | 
			
		||||
      return retval;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (allowed_backends == NULL)
 | 
			
		||||
    allowed_backends = "*";
 | 
			
		||||
 | 
			
		||||
  allow_any = strstr (allowed_backends, "*") != NULL;
 | 
			
		||||
 | 
			
		||||
  backends_list = g_getenv ("CLUTTER_BACKEND");
 | 
			
		||||
  if (backends_list == NULL)
 | 
			
		||||
    backends_list = allowed_backends;
 | 
			
		||||
 | 
			
		||||
  backends = g_strsplit (backends_list, ",", 0);
 | 
			
		||||
 | 
			
		||||
  retval = NULL;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; retval == NULL && backends[i] != NULL; i++)
 | 
			
		||||
    {
 | 
			
		||||
      const char *backend = backends[i];
 | 
			
		||||
      gboolean is_any = g_str_equal (backend, "*");
 | 
			
		||||
      int j;
 | 
			
		||||
 | 
			
		||||
      for (j = 0; available_backends[j].name != NULL; j++)
 | 
			
		||||
        {
 | 
			
		||||
          if ((is_any && allow_any) ||
 | 
			
		||||
              (is_any && strstr (allowed_backends, available_backends[j].name)) ||
 | 
			
		||||
              g_str_equal (backend, available_backends[j].name))
 | 
			
		||||
            {
 | 
			
		||||
              retval = available_backends[j].create_backend ();
 | 
			
		||||
              if (retval != NULL)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_strfreev (backends);
 | 
			
		||||
 | 
			
		||||
  if (retval == NULL)
 | 
			
		||||
    g_error ("No default Clutter backend found.");
 | 
			
		||||
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
@@ -449,7 +531,80 @@ _clutter_create_backend (void)
 | 
			
		||||
static void
 | 
			
		||||
clutter_backend_real_init_events (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  g_error ("Unknown input backend");
 | 
			
		||||
  const char *input_backend = NULL;
 | 
			
		||||
 | 
			
		||||
  input_backend = g_getenv ("CLUTTER_INPUT_BACKEND");
 | 
			
		||||
  if (input_backend != NULL)
 | 
			
		||||
    input_backend = g_intern_string (input_backend);
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_INPUT_X11
 | 
			
		||||
  if (clutter_check_windowing_backend (CLUTTER_WINDOWING_X11) &&
 | 
			
		||||
      (input_backend == NULL || input_backend == I_(CLUTTER_INPUT_X11)))
 | 
			
		||||
    {
 | 
			
		||||
      _clutter_backend_x11_events_init (backend);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CLUTTER_INPUT_EVDEV
 | 
			
		||||
  /* Evdev can be used regardless of the windowing system */
 | 
			
		||||
  if ((input_backend != NULL && strcmp (input_backend, CLUTTER_INPUT_EVDEV) == 0)
 | 
			
		||||
#ifdef CLUTTER_WINDOWING_EGL
 | 
			
		||||
      /* but we do want to always use it for EGL native */
 | 
			
		||||
      || clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL)
 | 
			
		||||
#endif
 | 
			
		||||
      )
 | 
			
		||||
    {
 | 
			
		||||
      _clutter_events_evdev_init (backend);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
#endif
 | 
			
		||||
  if (input_backend != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      if (input_backend != I_(CLUTTER_INPUT_NULL))
 | 
			
		||||
        g_error ("Unrecognized input backend '%s'", input_backend);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    g_error ("Unknown input backend");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ClutterDeviceManager *
 | 
			
		||||
clutter_backend_real_get_device_manager (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  if (G_UNLIKELY (backend->device_manager == NULL))
 | 
			
		||||
    {
 | 
			
		||||
      g_critical ("No device manager available, expect broken input");
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return backend->device_manager;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
clutter_backend_real_translate_event (ClutterBackend *backend,
 | 
			
		||||
                                      gpointer        native,
 | 
			
		||||
                                      ClutterEvent   *event)
 | 
			
		||||
{
 | 
			
		||||
  GList *l;
 | 
			
		||||
 | 
			
		||||
  for (l = backend->event_translators;
 | 
			
		||||
       l != NULL;
 | 
			
		||||
       l = l->next)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterEventTranslator *translator = l->data;
 | 
			
		||||
      ClutterTranslateReturn retval;
 | 
			
		||||
 | 
			
		||||
      retval = _clutter_event_translator_translate_event (translator,
 | 
			
		||||
                                                          native,
 | 
			
		||||
                                                          event);
 | 
			
		||||
 | 
			
		||||
      if (retval == CLUTTER_TRANSLATE_QUEUE)
 | 
			
		||||
        return TRUE;
 | 
			
		||||
 | 
			
		||||
      if (retval == CLUTTER_TRANSLATE_REMOVE)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -474,7 +629,8 @@ clutter_backend_class_init (ClutterBackendClass *klass)
 | 
			
		||||
                  G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterBackendClass, resolution_changed),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__VOID,
 | 
			
		||||
                  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@@ -491,7 +647,8 @@ clutter_backend_class_init (ClutterBackendClass *klass)
 | 
			
		||||
                  G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterBackendClass, font_changed),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__VOID,
 | 
			
		||||
                  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@@ -508,13 +665,16 @@ clutter_backend_class_init (ClutterBackendClass *klass)
 | 
			
		||||
                  G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterBackendClass, settings_changed),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__VOID,
 | 
			
		||||
                  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  klass->resolution_changed = clutter_backend_real_resolution_changed;
 | 
			
		||||
  klass->font_changed = clutter_backend_real_font_changed;
 | 
			
		||||
 | 
			
		||||
  klass->init_events = clutter_backend_real_init_events;
 | 
			
		||||
  klass->get_device_manager = clutter_backend_real_get_device_manager;
 | 
			
		||||
  klass->translate_event = clutter_backend_real_translate_event;
 | 
			
		||||
  klass->create_context = clutter_backend_real_create_context;
 | 
			
		||||
  klass->get_features = clutter_backend_real_get_features;
 | 
			
		||||
}
 | 
			
		||||
@@ -525,9 +685,7 @@ clutter_backend_init (ClutterBackend *self)
 | 
			
		||||
  self->units_per_em = -1.0;
 | 
			
		||||
  self->units_serial = 1;
 | 
			
		||||
 | 
			
		||||
  self->dummy_onscreen = NULL;
 | 
			
		||||
 | 
			
		||||
  self->fallback_resource_scale = 1.f;
 | 
			
		||||
  self->dummy_onscreen = COGL_INVALID_HANDLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -595,10 +753,6 @@ _clutter_backend_create_stage (ClutterBackend  *backend,
 | 
			
		||||
 | 
			
		||||
  g_assert (CLUTTER_IS_STAGE_WINDOW (stage_window));
 | 
			
		||||
 | 
			
		||||
  backend->stage_window = stage_window;
 | 
			
		||||
  g_object_add_weak_pointer (G_OBJECT (backend->stage_window),
 | 
			
		||||
                             (gpointer *) &backend->stage_window);
 | 
			
		||||
 | 
			
		||||
  return stage_window;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -683,24 +837,37 @@ _clutter_backend_copy_event_data (ClutterBackend     *backend,
 | 
			
		||||
                                  const ClutterEvent *src,
 | 
			
		||||
                                  ClutterEvent       *dest)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSeatClass *seat_class;
 | 
			
		||||
  ClutterSeat *seat;
 | 
			
		||||
  ClutterEventExtenderInterface *iface;
 | 
			
		||||
  ClutterBackendClass *klass;
 | 
			
		||||
 | 
			
		||||
  seat = clutter_backend_get_default_seat (backend);
 | 
			
		||||
  seat_class = CLUTTER_SEAT_GET_CLASS (seat);
 | 
			
		||||
  seat_class->copy_event_data (seat, src, dest);
 | 
			
		||||
  klass = CLUTTER_BACKEND_GET_CLASS (backend);
 | 
			
		||||
  if (CLUTTER_IS_EVENT_EXTENDER (backend->device_manager))
 | 
			
		||||
    {
 | 
			
		||||
      iface = CLUTTER_EVENT_EXTENDER_GET_IFACE (backend->device_manager);
 | 
			
		||||
      iface->copy_event_data (CLUTTER_EVENT_EXTENDER (backend->device_manager),
 | 
			
		||||
                              src, dest);
 | 
			
		||||
    }
 | 
			
		||||
  else if (klass->copy_event_data != NULL)
 | 
			
		||||
    klass->copy_event_data (backend, src, dest);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_backend_free_event_data (ClutterBackend *backend,
 | 
			
		||||
                                  ClutterEvent   *event)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSeatClass *seat_class;
 | 
			
		||||
  ClutterSeat *seat;
 | 
			
		||||
  ClutterEventExtenderInterface *iface;
 | 
			
		||||
  ClutterBackendClass *klass;
 | 
			
		||||
 | 
			
		||||
  seat = clutter_backend_get_default_seat (backend);
 | 
			
		||||
  seat_class = CLUTTER_SEAT_GET_CLASS (seat);
 | 
			
		||||
  seat_class->free_event_data (seat, event);
 | 
			
		||||
  klass = CLUTTER_BACKEND_GET_CLASS (backend);
 | 
			
		||||
 | 
			
		||||
  if (CLUTTER_IS_EVENT_EXTENDER (backend->device_manager))
 | 
			
		||||
    {
 | 
			
		||||
      iface = CLUTTER_EVENT_EXTENDER_GET_IFACE (backend->device_manager);
 | 
			
		||||
      iface->free_event_data (CLUTTER_EVENT_EXTENDER (backend->device_manager),
 | 
			
		||||
                              event);
 | 
			
		||||
    }
 | 
			
		||||
  else if (klass->free_event_data != NULL)
 | 
			
		||||
    klass->free_event_data (backend, event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -725,6 +892,129 @@ clutter_get_default_backend (void)
 | 
			
		||||
  return clutter_context->backend;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_set_double_click_time:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 * @msec: milliseconds between two button press events
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the maximum time between two button press events, used to
 | 
			
		||||
 * verify whether it's a double click event or not.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:double-click-time instead
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_backend_set_double_click_time (ClutterBackend *backend,
 | 
			
		||||
                                       guint           msec)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings = clutter_settings_get_default ();
 | 
			
		||||
 | 
			
		||||
  g_object_set (settings, "double-click-time", msec, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_double_click_time:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 *
 | 
			
		||||
 * Gets the maximum time between two button press events, as set
 | 
			
		||||
 * by clutter_backend_set_double_click_time().
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: a time in milliseconds
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:double-click-time instead
 | 
			
		||||
 */
 | 
			
		||||
guint
 | 
			
		||||
clutter_backend_get_double_click_time (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings = clutter_settings_get_default ();
 | 
			
		||||
  gint retval;
 | 
			
		||||
 | 
			
		||||
  g_object_get (settings, "double-click-time", &retval, NULL);
 | 
			
		||||
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_set_double_click_distance:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 * @distance: a distance, in pixels
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the maximum distance used to verify a double click event.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:double-click-distance instead
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_backend_set_double_click_distance (ClutterBackend *backend,
 | 
			
		||||
                                           guint           distance)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings = clutter_settings_get_default ();
 | 
			
		||||
 | 
			
		||||
  g_object_set (settings, "double-click-distance", distance, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_double_click_distance:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 *
 | 
			
		||||
 * Retrieves the distance used to verify a double click event
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: a distance, in pixels.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:double-click-distance instead
 | 
			
		||||
 */
 | 
			
		||||
guint
 | 
			
		||||
clutter_backend_get_double_click_distance (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings = clutter_settings_get_default ();
 | 
			
		||||
  gint retval;
 | 
			
		||||
 | 
			
		||||
  g_object_get (settings, "double-click-distance", &retval, NULL);
 | 
			
		||||
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_set_resolution:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 * @dpi: the resolution in "dots per inch" (Physical inches aren't
 | 
			
		||||
 *   actually involved; the terminology is conventional).
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the resolution for font handling on the screen. This is a
 | 
			
		||||
 * scale factor between points specified in a #PangoFontDescription
 | 
			
		||||
 * and cairo units. The default value is 96, meaning that a 10 point
 | 
			
		||||
 * font will be 13 units high. (10 * 96. / 72. = 13.3).
 | 
			
		||||
 *
 | 
			
		||||
 * Applications should never need to call this function.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:font-dpi instead
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_backend_set_resolution (ClutterBackend *backend,
 | 
			
		||||
                                gdouble         dpi)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings;
 | 
			
		||||
  gint resolution;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_BACKEND (backend));
 | 
			
		||||
 | 
			
		||||
  if (dpi < 0)
 | 
			
		||||
    resolution = -1;
 | 
			
		||||
  else
 | 
			
		||||
    resolution = dpi * 1024;
 | 
			
		||||
 | 
			
		||||
  settings = clutter_settings_get_default ();
 | 
			
		||||
  g_object_set (settings, "font-dpi", resolution, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_resolution:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
@@ -830,6 +1120,61 @@ clutter_backend_get_font_options (ClutterBackend *backend)
 | 
			
		||||
  return backend->font_options;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_set_font_name:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 * @font_name: the name of the font
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the default font to be used by Clutter. The @font_name string
 | 
			
		||||
 * must either be %NULL, which means that the font name from the
 | 
			
		||||
 * default #ClutterBackend will be used; or be something that can
 | 
			
		||||
 * be parsed by the pango_font_description_from_string() function.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:font-name instead
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_backend_set_font_name (ClutterBackend *backend,
 | 
			
		||||
                               const gchar    *font_name)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings = clutter_settings_get_default ();
 | 
			
		||||
 | 
			
		||||
  g_object_set (settings, "font-name", font_name, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_font_name:
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
 *
 | 
			
		||||
 * Retrieves the default font name as set by
 | 
			
		||||
 * clutter_backend_set_font_name().
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: the font name for the backend. The returned string is
 | 
			
		||||
 *   owned by the #ClutterBackend and should never be modified or freed
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.4: Use #ClutterSettings:font-name instead
 | 
			
		||||
 */
 | 
			
		||||
const gchar *
 | 
			
		||||
clutter_backend_get_font_name (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), NULL);
 | 
			
		||||
 | 
			
		||||
  settings = clutter_settings_get_default ();
 | 
			
		||||
 | 
			
		||||
  /* XXX yuck. but we return a const pointer, so we need to
 | 
			
		||||
   * store it in the backend
 | 
			
		||||
   */
 | 
			
		||||
  g_free (backend->font_name);
 | 
			
		||||
  g_object_get (settings, "font-name", &backend->font_name, NULL);
 | 
			
		||||
 | 
			
		||||
  return backend->font_name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gint32
 | 
			
		||||
_clutter_backend_get_units_serial (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
@@ -846,6 +1191,28 @@ _clutter_backend_translate_event (ClutterBackend *backend,
 | 
			
		||||
                                                               event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_backend_add_event_translator (ClutterBackend         *backend,
 | 
			
		||||
                                       ClutterEventTranslator *translator)
 | 
			
		||||
{
 | 
			
		||||
  if (g_list_find (backend->event_translators, translator) != NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  backend->event_translators =
 | 
			
		||||
    g_list_prepend (backend->event_translators, translator);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_backend_remove_event_translator (ClutterBackend         *backend,
 | 
			
		||||
                                          ClutterEventTranslator *translator)
 | 
			
		||||
{
 | 
			
		||||
  if (g_list_find (backend->event_translators, translator) == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  backend->event_translators =
 | 
			
		||||
    g_list_remove (backend->event_translators, translator);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_cogl_context: (skip)
 | 
			
		||||
 * @backend: a #ClutterBackend
 | 
			
		||||
@@ -897,6 +1264,94 @@ clutter_wayland_set_compositor_display (void *display)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_set_windowing_backend:
 | 
			
		||||
 * @backend_type: a comma separated list of windowing backends
 | 
			
		||||
 *
 | 
			
		||||
 * Restricts Clutter to only use the specified backend or list of backends.
 | 
			
		||||
 *
 | 
			
		||||
 * You can use one of the `CLUTTER_WINDOWING_*` symbols, e.g.
 | 
			
		||||
 *
 | 
			
		||||
 * |[<!-- language="C" -->
 | 
			
		||||
 *   clutter_set_windowing_backend (CLUTTER_WINDOWING_X11);
 | 
			
		||||
 * ]|
 | 
			
		||||
 *
 | 
			
		||||
 * Will force Clutter to use the X11 windowing and input backend, and terminate
 | 
			
		||||
 * if the X11 backend could not be initialized successfully.
 | 
			
		||||
 *
 | 
			
		||||
 * Since Clutter 1.26, you can also use a comma-separated list of windowing
 | 
			
		||||
 * system backends to provide a fallback in case backends are not available or
 | 
			
		||||
 * enabled, e.g.:
 | 
			
		||||
 *
 | 
			
		||||
 * |[<!-- language="C" -->
 | 
			
		||||
 *   clutter_set_windowing_backend ("gdk,wayland,x11");
 | 
			
		||||
 * ]|
 | 
			
		||||
 *
 | 
			
		||||
 * Will make Clutter test for the GDK, Wayland, and X11 backends in that order.
 | 
			
		||||
 *
 | 
			
		||||
 * You can use the `*` special value to ask Clutter to use the internally
 | 
			
		||||
 * defined list of backends. For instance:
 | 
			
		||||
 *
 | 
			
		||||
 * |[<!-- language="C" -->
 | 
			
		||||
 *   clutter_set_windowing_backend ("x11,wayland,*");
 | 
			
		||||
 * ]|
 | 
			
		||||
 *
 | 
			
		||||
 * Will make Clutter test the X11 and Wayland backends, and then fall back
 | 
			
		||||
 * to the internal list of available backends.
 | 
			
		||||
 *
 | 
			
		||||
 * This function must be called before the first API call to Clutter, including
 | 
			
		||||
 * clutter_get_option_context()
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.16
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_set_windowing_backend (const char *backend_type)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (backend_type != NULL);
 | 
			
		||||
 | 
			
		||||
  allowed_backends = g_strdup (backend_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
clutter_try_set_windowing_backend (const char *backend_type)
 | 
			
		||||
{
 | 
			
		||||
  if (allowed_backends == NULL)
 | 
			
		||||
    clutter_set_windowing_backend (backend_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PangoDirection
 | 
			
		||||
_clutter_backend_get_keymap_direction (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBackendClass *klass;
 | 
			
		||||
 | 
			
		||||
  klass = CLUTTER_BACKEND_GET_CLASS (backend);
 | 
			
		||||
  if (klass->get_keymap_direction != NULL)
 | 
			
		||||
    return klass->get_keymap_direction (backend);
 | 
			
		||||
 | 
			
		||||
  return PANGO_DIRECTION_NEUTRAL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_backend_reset_cogl_framebuffer (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  if (backend->dummy_onscreen == COGL_INVALID_HANDLE)
 | 
			
		||||
    {
 | 
			
		||||
      CoglError *internal_error = NULL;
 | 
			
		||||
 | 
			
		||||
      backend->dummy_onscreen = cogl_onscreen_new (backend->cogl_context, 1, 1);
 | 
			
		||||
 | 
			
		||||
      if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (backend->dummy_onscreen),
 | 
			
		||||
                                      &internal_error))
 | 
			
		||||
        {
 | 
			
		||||
          g_critical ("Unable to create dummy onscreen: %s", internal_error->message);
 | 
			
		||||
          cogl_error_free (internal_error);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  cogl_set_framebuffer (COGL_FRAMEBUFFER (backend->dummy_onscreen));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
clutter_set_allowed_drivers (const char *drivers)
 | 
			
		||||
{
 | 
			
		||||
@@ -909,71 +1364,12 @@ clutter_set_allowed_drivers (const char *drivers)
 | 
			
		||||
  allowed_drivers = g_strdup (drivers);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_input_method:
 | 
			
		||||
 * @backend: the #CLutterBackend
 | 
			
		||||
 *
 | 
			
		||||
 * Returns the input method used by Clutter
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: (transfer none): the input method
 | 
			
		||||
 **/
 | 
			
		||||
ClutterInputMethod *
 | 
			
		||||
clutter_backend_get_input_method (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  return backend->input_method;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_set_input_method:
 | 
			
		||||
 * @backend: the #ClutterBackend
 | 
			
		||||
 * @method: the input method
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the input method to be used by Clutter
 | 
			
		||||
 **/
 | 
			
		||||
void
 | 
			
		||||
clutter_backend_set_input_method (ClutterBackend     *backend,
 | 
			
		||||
                                  ClutterInputMethod *method)
 | 
			
		||||
clutter_backend_bell_notify (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  g_set_object (&backend->input_method, method);
 | 
			
		||||
}
 | 
			
		||||
  ClutterBackendClass *klass;
 | 
			
		||||
 | 
			
		||||
ClutterStageWindow *
 | 
			
		||||
clutter_backend_get_stage_window (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  return backend->stage_window;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_backend_get_default_seat:
 | 
			
		||||
 * @backend: the #ClutterBackend
 | 
			
		||||
 *
 | 
			
		||||
 * Returns the default seat
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: (transfer none): the default seat
 | 
			
		||||
 **/
 | 
			
		||||
ClutterSeat *
 | 
			
		||||
clutter_backend_get_default_seat (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_BACKEND (backend), NULL);
 | 
			
		||||
 | 
			
		||||
  return CLUTTER_BACKEND_GET_CLASS (backend)->get_default_seat (backend);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
clutter_backend_set_fallback_resource_scale (ClutterBackend *backend,
 | 
			
		||||
                                             float           fallback_resource_scale)
 | 
			
		||||
{
 | 
			
		||||
  backend->fallback_resource_scale = fallback_resource_scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float
 | 
			
		||||
clutter_backend_get_fallback_resource_scale (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  return backend->fallback_resource_scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_backend_is_display_server (ClutterBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  return CLUTTER_BACKEND_GET_CLASS (backend)->is_display_server (backend);
 | 
			
		||||
  klass = CLUTTER_BACKEND_GET_CLASS (backend);
 | 
			
		||||
  if (klass->bell_notify)
 | 
			
		||||
    klass->bell_notify (backend);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -34,9 +34,7 @@
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter-config.h>
 | 
			
		||||
#include <clutter/clutter-keymap.h>
 | 
			
		||||
#include <clutter/clutter-types.h>
 | 
			
		||||
#include <clutter/clutter-seat.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
@@ -55,32 +53,29 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _ClutterBackend          ClutterBackend;
 | 
			
		||||
typedef struct _ClutterBackendClass     ClutterBackendClass;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GType clutter_backend_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterBackend *                clutter_get_default_backend             (void);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_16
 | 
			
		||||
void                            clutter_set_windowing_backend           (const char *backend_type);
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gdouble                         clutter_backend_get_resolution          (ClutterBackend             *backend);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_backend_set_font_options        (ClutterBackend             *backend,
 | 
			
		||||
                                                                         const cairo_font_options_t *options);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
const cairo_font_options_t *    clutter_backend_get_font_options        (ClutterBackend             *backend);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_8
 | 
			
		||||
CoglContext *                   clutter_backend_get_cogl_context        (ClutterBackend             *backend);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
ClutterInputMethod *            clutter_backend_get_input_method        (ClutterBackend             *backend);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_backend_set_input_method        (ClutterBackend             *backend,
 | 
			
		||||
                                                                         ClutterInputMethod         *method);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
ClutterSeat *                   clutter_backend_get_default_seat        (ClutterBackend             *backend);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                            clutter_backend_bell_notify             (ClutterBackend             *backend);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -324,7 +324,7 @@ _clutter_bezier_init (ClutterBezier *b,
 | 
			
		||||
   * triggers, we need to change those two functions a bit.
 | 
			
		||||
   */
 | 
			
		||||
  if (b->ax > 0x1fff || b->bx > 0x1fff || b->cx > 0x1fff)
 | 
			
		||||
    g_warning ("Calculated coefficients will result in multiplication "
 | 
			
		||||
    g_warning ("Calculated coefficents will result in multiplication "
 | 
			
		||||
               "overflow in clutter_bezier_t2x and clutter_bezier_t2y.");
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterBezier ClutterBezier;
 | 
			
		||||
 | 
			
		||||
ClutterBezier *_clutter_bezier_new (void);
 | 
			
		||||
ClutterBezier *_clutter_bezier_new ();
 | 
			
		||||
 | 
			
		||||
void           _clutter_bezier_free (ClutterBezier * b);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -43,16 +43,18 @@
 | 
			
		||||
 * #ClutterBinLayout is available since Clutter 1.2
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
 | 
			
		||||
#include "deprecated/clutter-container.h"
 | 
			
		||||
#include "deprecated/clutter-bin-layout.h"
 | 
			
		||||
 | 
			
		||||
#include "clutter-actor-private.h"
 | 
			
		||||
#include "clutter-animatable.h"
 | 
			
		||||
#include "clutter-bin-layout.h"
 | 
			
		||||
#include "clutter-child-meta.h"
 | 
			
		||||
#include "clutter-debug.h"
 | 
			
		||||
#include "clutter-enum-types.h"
 | 
			
		||||
@@ -406,7 +408,8 @@ get_actor_align_factor (ClutterActorAlign alignment)
 | 
			
		||||
static void
 | 
			
		||||
clutter_bin_layout_allocate (ClutterLayoutManager   *manager,
 | 
			
		||||
                             ClutterContainer       *container,
 | 
			
		||||
                             const ClutterActorBox  *allocation)
 | 
			
		||||
                             const ClutterActorBox  *allocation,
 | 
			
		||||
                             ClutterAllocationFlags  flags)
 | 
			
		||||
{
 | 
			
		||||
  gfloat allocation_x, allocation_y;
 | 
			
		||||
  gfloat available_w, available_h;
 | 
			
		||||
@@ -514,7 +517,8 @@ clutter_bin_layout_allocate (ClutterLayoutManager   *manager,
 | 
			
		||||
 | 
			
		||||
      clutter_actor_allocate_align_fill (child, &child_alloc,
 | 
			
		||||
                                         x_align, y_align,
 | 
			
		||||
                                         x_fill, y_fill);
 | 
			
		||||
                                         x_fill, y_fill,
 | 
			
		||||
                                         flags);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -696,3 +700,187 @@ clutter_bin_layout_new (ClutterBinAlignment x_align,
 | 
			
		||||
                       "y-align", y_align,
 | 
			
		||||
                       NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_bin_layout_set_alignment:
 | 
			
		||||
 * @self: a #ClutterBinLayout
 | 
			
		||||
 * @child: (allow-none): a child of @container
 | 
			
		||||
 * @x_align: the horizontal alignment policy to be used for the @child
 | 
			
		||||
 *   inside @container
 | 
			
		||||
 * @y_align: the vertical aligment policy to be used on the @child
 | 
			
		||||
 *   inside @container
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the horizontal and vertical alignment policies to be applied
 | 
			
		||||
 * to a @child of @self
 | 
			
		||||
 *
 | 
			
		||||
 * If @child is %NULL then the @x_align and @y_align values will
 | 
			
		||||
 * be set as the default alignment policies
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.2
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.12: Use the #ClutterActor:x-align and
 | 
			
		||||
 *   #ClutterActor:y-align properties of #ClutterActor instead.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_bin_layout_set_alignment (ClutterBinLayout    *self,
 | 
			
		||||
                                  ClutterActor        *child,
 | 
			
		||||
                                  ClutterBinAlignment  x_align,
 | 
			
		||||
                                  ClutterBinAlignment  y_align)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBinLayoutPrivate *priv;
 | 
			
		||||
  ClutterLayoutManager *manager;
 | 
			
		||||
  ClutterLayoutMeta *meta;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_BIN_LAYOUT (self));
 | 
			
		||||
  g_return_if_fail (child == NULL || CLUTTER_IS_ACTOR (child));
 | 
			
		||||
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->container == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      if (child == NULL)
 | 
			
		||||
        {
 | 
			
		||||
          set_x_align (self, x_align);
 | 
			
		||||
          set_y_align (self, y_align);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        g_warning ("The layout of type '%s' must be associated to "
 | 
			
		||||
                   "a ClutterContainer before setting the alignment "
 | 
			
		||||
                   "on its children",
 | 
			
		||||
                   G_OBJECT_TYPE_NAME (self));
 | 
			
		||||
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  manager = CLUTTER_LAYOUT_MANAGER (self);
 | 
			
		||||
  meta = clutter_layout_manager_get_child_meta (manager,
 | 
			
		||||
                                                priv->container,
 | 
			
		||||
                                                child);
 | 
			
		||||
  g_assert (CLUTTER_IS_BIN_LAYER (meta));
 | 
			
		||||
 | 
			
		||||
  set_layer_x_align (CLUTTER_BIN_LAYER (meta), x_align);
 | 
			
		||||
  set_layer_y_align (CLUTTER_BIN_LAYER (meta), y_align);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_bin_layout_get_alignment:
 | 
			
		||||
 * @self: a #ClutterBinLayout
 | 
			
		||||
 * @child: (allow-none): a child of @container
 | 
			
		||||
 * @x_align: (out) (allow-none): return location for the horizontal
 | 
			
		||||
 *   alignment policy
 | 
			
		||||
 * @y_align: (out) (allow-none): return location for the vertical
 | 
			
		||||
 *   alignment policy
 | 
			
		||||
 *
 | 
			
		||||
 * Retrieves the horizontal and vertical alignment policies for
 | 
			
		||||
 * a child of @self
 | 
			
		||||
 *
 | 
			
		||||
 * If @child is %NULL the default alignment policies will be returned
 | 
			
		||||
 * instead
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.2
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.12: Use the #ClutterActor:x-align and the
 | 
			
		||||
 *   #ClutterActor:y-align properties of #ClutterActor instead.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_bin_layout_get_alignment (ClutterBinLayout    *self,
 | 
			
		||||
                                  ClutterActor        *child,
 | 
			
		||||
                                  ClutterBinAlignment *x_align,
 | 
			
		||||
                                  ClutterBinAlignment *y_align)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBinLayoutPrivate *priv;
 | 
			
		||||
  ClutterLayoutManager *manager;
 | 
			
		||||
  ClutterLayoutMeta *meta;
 | 
			
		||||
  ClutterBinLayer *layer;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_BIN_LAYOUT (self));
 | 
			
		||||
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->container == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      if (child == NULL)
 | 
			
		||||
        {
 | 
			
		||||
          if (x_align)
 | 
			
		||||
            *x_align = priv->x_align;
 | 
			
		||||
 | 
			
		||||
          if (y_align)
 | 
			
		||||
            *y_align = priv->y_align;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        g_warning ("The layout of type '%s' must be associated to "
 | 
			
		||||
                   "a ClutterContainer before getting the alignment "
 | 
			
		||||
                   "of its children",
 | 
			
		||||
                   G_OBJECT_TYPE_NAME (self));
 | 
			
		||||
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  manager = CLUTTER_LAYOUT_MANAGER (self);
 | 
			
		||||
  meta = clutter_layout_manager_get_child_meta (manager,
 | 
			
		||||
                                                priv->container,
 | 
			
		||||
                                                child);
 | 
			
		||||
  g_assert (CLUTTER_IS_BIN_LAYER (meta));
 | 
			
		||||
 | 
			
		||||
  layer = CLUTTER_BIN_LAYER (meta);
 | 
			
		||||
 | 
			
		||||
  if (x_align)
 | 
			
		||||
    *x_align = layer->x_align;
 | 
			
		||||
 | 
			
		||||
  if (y_align)
 | 
			
		||||
    *y_align = layer->y_align;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_bin_layout_add:
 | 
			
		||||
 * @self: a #ClutterBinLayout
 | 
			
		||||
 * @child: a #ClutterActor
 | 
			
		||||
 * @x_align: horizontal alignment policy for @child
 | 
			
		||||
 * @y_align: vertical alignment policy for @child
 | 
			
		||||
 *
 | 
			
		||||
 * Adds a #ClutterActor to the container using @self and
 | 
			
		||||
 * sets the alignment policies for it
 | 
			
		||||
 *
 | 
			
		||||
 * This function is equivalent to clutter_container_add_actor()
 | 
			
		||||
 * and clutter_layout_manager_child_set_property() but it does not
 | 
			
		||||
 * require a pointer to the #ClutterContainer associated to the
 | 
			
		||||
 * #ClutterBinLayout
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.2
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.12: Use clutter_actor_add_child() instead.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_bin_layout_add (ClutterBinLayout    *self,
 | 
			
		||||
                        ClutterActor        *child,
 | 
			
		||||
                        ClutterBinAlignment  x_align,
 | 
			
		||||
                        ClutterBinAlignment  y_align)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBinLayoutPrivate *priv;
 | 
			
		||||
  ClutterLayoutManager *manager;
 | 
			
		||||
  ClutterLayoutMeta *meta;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_BIN_LAYOUT (self));
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR (child));
 | 
			
		||||
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->container == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("The layout of type '%s' must be associated to "
 | 
			
		||||
                 "a ClutterContainer before adding children",
 | 
			
		||||
                 G_OBJECT_TYPE_NAME (self));
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  clutter_container_add_actor (priv->container, child);
 | 
			
		||||
 | 
			
		||||
  manager = CLUTTER_LAYOUT_MANAGER (self);
 | 
			
		||||
  meta = clutter_layout_manager_get_child_meta (manager,
 | 
			
		||||
                                                priv->container,
 | 
			
		||||
                                                child);
 | 
			
		||||
  g_assert (CLUTTER_IS_BIN_LAYER (meta));
 | 
			
		||||
 | 
			
		||||
  set_layer_x_align (CLUTTER_BIN_LAYER (meta), x_align);
 | 
			
		||||
  set_layer_y_align (CLUTTER_BIN_LAYER (meta), y_align);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -74,10 +74,10 @@ struct _ClutterBinLayoutClass
 | 
			
		||||
  ClutterLayoutManagerClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
GType clutter_bin_layout_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
ClutterLayoutManager *  clutter_bin_layout_new  (ClutterBinAlignment x_align,
 | 
			
		||||
                                                 ClutterBinAlignment y_align);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,14 +38,12 @@
 | 
			
		||||
 *
 | 
			
		||||
 * |[<!-- language="C" -->
 | 
			
		||||
 * // source
 | 
			
		||||
 * rect[0] = clutter_actor_new ();
 | 
			
		||||
 * clutter_actor_set_background_color (rect[0], &red_color);
 | 
			
		||||
 * rect[0] = clutter_rectangle_new_with_color (&red_color);
 | 
			
		||||
 * clutter_actor_set_position (rect[0], x_pos, y_pos);
 | 
			
		||||
 * clutter_actor_set_size (rect[0], 100, 100);
 | 
			
		||||
 *
 | 
			
		||||
 * // second rectangle
 | 
			
		||||
 * rect[1] = clutter_actor_new ();
 | 
			
		||||
 * clutter_actor_set_background_color (rect[1], &green_color);
 | 
			
		||||
 * rect[1] = clutter_rectangle_new_with_color (&green_color);
 | 
			
		||||
 * clutter_actor_set_size (rect[1], 100, 100);
 | 
			
		||||
 * clutter_actor_set_opacity (rect[1], 0);
 | 
			
		||||
 *
 | 
			
		||||
@@ -55,8 +53,7 @@
 | 
			
		||||
 * clutter_actor_add_constraint_with_name (rect[1], "green-y", constraint);
 | 
			
		||||
 *
 | 
			
		||||
 * // third rectangle
 | 
			
		||||
 * rect[2] = clutter_actor_new ();
 | 
			
		||||
 * clutter_actor_set_background_color (rect[2], &blue_color);
 | 
			
		||||
 * rect[2] = clutter_rectangle_new_with_color (&blue_color);
 | 
			
		||||
 * clutter_actor_set_size (rect[2], 100, 100);
 | 
			
		||||
 * clutter_actor_set_opacity (rect[2], 0);
 | 
			
		||||
 *
 | 
			
		||||
@@ -83,7 +80,9 @@
 | 
			
		||||
 * #ClutterBindConstraint is available since Clutter 1.4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
@@ -147,58 +146,6 @@ source_destroyed (ClutterActor          *actor,
 | 
			
		||||
  bind->source = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_bind_constraint_update_preferred_size (ClutterConstraint  *constraint,
 | 
			
		||||
                                               ClutterActor       *actor,
 | 
			
		||||
                                               ClutterOrientation  direction,
 | 
			
		||||
                                               float               for_size,
 | 
			
		||||
                                               float              *minimum_size,
 | 
			
		||||
                                               float              *natural_size)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBindConstraint *bind = CLUTTER_BIND_CONSTRAINT (constraint);
 | 
			
		||||
  float source_min, source_nat;
 | 
			
		||||
 | 
			
		||||
  if (bind->source == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* only these bindings affect the preferred size */
 | 
			
		||||
  if (!(bind->coordinate == CLUTTER_BIND_WIDTH ||
 | 
			
		||||
        bind->coordinate == CLUTTER_BIND_HEIGHT ||
 | 
			
		||||
        bind->coordinate == CLUTTER_BIND_SIZE ||
 | 
			
		||||
        bind->coordinate == CLUTTER_BIND_ALL))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (clutter_actor_contains (bind->source, actor))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  switch (direction)
 | 
			
		||||
    {
 | 
			
		||||
    case CLUTTER_ORIENTATION_HORIZONTAL:
 | 
			
		||||
      if (bind->coordinate != CLUTTER_BIND_HEIGHT)
 | 
			
		||||
        {
 | 
			
		||||
          clutter_actor_get_preferred_width (bind->source, for_size,
 | 
			
		||||
                                             &source_min,
 | 
			
		||||
                                             &source_nat);
 | 
			
		||||
 | 
			
		||||
          *minimum_size = source_min;
 | 
			
		||||
          *natural_size = source_nat;
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case CLUTTER_ORIENTATION_VERTICAL:
 | 
			
		||||
      if (bind->coordinate != CLUTTER_BIND_WIDTH)
 | 
			
		||||
        {
 | 
			
		||||
          clutter_actor_get_preferred_height (bind->source, for_size,
 | 
			
		||||
                                              &source_min,
 | 
			
		||||
                                              &source_nat);
 | 
			
		||||
 | 
			
		||||
          *minimum_size = source_min;
 | 
			
		||||
          *natural_size = source_nat;
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_bind_constraint_update_allocation (ClutterConstraint *constraint,
 | 
			
		||||
                                           ClutterActor      *actor,
 | 
			
		||||
@@ -207,9 +154,7 @@ clutter_bind_constraint_update_allocation (ClutterConstraint *constraint,
 | 
			
		||||
  ClutterBindConstraint *bind = CLUTTER_BIND_CONSTRAINT (constraint);
 | 
			
		||||
  gfloat source_width, source_height;
 | 
			
		||||
  gfloat actor_width, actor_height;
 | 
			
		||||
  graphene_point3d_t source_position;
 | 
			
		||||
 | 
			
		||||
  source_position = GRAPHENE_POINT3D_INIT (0.f, 0.f, 0.f);
 | 
			
		||||
  ClutterVertex source_position = { 0., };
 | 
			
		||||
 | 
			
		||||
  if (bind->source == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
@@ -383,8 +328,6 @@ clutter_bind_constraint_class_init (ClutterBindConstraintClass *klass)
 | 
			
		||||
  meta_class->set_actor = clutter_bind_constraint_set_actor;
 | 
			
		||||
 | 
			
		||||
  constraint_class->update_allocation = clutter_bind_constraint_update_allocation;
 | 
			
		||||
  constraint_class->update_preferred_size = clutter_bind_constraint_update_preferred_size;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterBindConstraint:source:
 | 
			
		||||
   *
 | 
			
		||||
 
 | 
			
		||||
@@ -48,28 +48,28 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _ClutterBindConstraint           ClutterBindConstraint;
 | 
			
		||||
typedef struct _ClutterBindConstraintClass      ClutterBindConstraintClass;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_bind_constraint_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterConstraint *   clutter_bind_constraint_new            (ClutterActor          *source,
 | 
			
		||||
                                                              ClutterBindCoordinate  coordinate,
 | 
			
		||||
                                                              gfloat                 offset);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void                  clutter_bind_constraint_set_source     (ClutterBindConstraint *constraint,
 | 
			
		||||
                                                              ClutterActor          *source);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterActor *        clutter_bind_constraint_get_source     (ClutterBindConstraint *constraint);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void                  clutter_bind_constraint_set_coordinate (ClutterBindConstraint *constraint,
 | 
			
		||||
                                                              ClutterBindCoordinate  coordinate);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterBindCoordinate clutter_bind_constraint_get_coordinate (ClutterBindConstraint *constraint);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void                  clutter_bind_constraint_set_offset     (ClutterBindConstraint *constraint,
 | 
			
		||||
                                                              gfloat                 offset);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
gfloat                clutter_bind_constraint_get_offset     (ClutterBindConstraint *constraint);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -94,7 +94,9 @@
 | 
			
		||||
 * #ClutterBindingPool is available since Clutter 1.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-binding-pool.h"
 | 
			
		||||
#include "clutter-debug.h"
 | 
			
		||||
@@ -235,7 +237,8 @@ clutter_binding_pool_finalize (GObject *gobject)
 | 
			
		||||
 | 
			
		||||
  g_hash_table_destroy (pool->entries_hash);
 | 
			
		||||
 | 
			
		||||
  g_slist_free_full (pool->entries, (GDestroyNotify) binding_entry_free);
 | 
			
		||||
  g_slist_foreach (pool->entries, (GFunc) binding_entry_free, NULL);
 | 
			
		||||
  g_slist_free (pool->entries);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (clutter_binding_pool_parent_class)->finalize (gobject);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -71,17 +71,17 @@ typedef gboolean (* ClutterBindingActionFunc) (GObject             *gobject,
 | 
			
		||||
                                               ClutterModifierType  modifiers,
 | 
			
		||||
                                               gpointer             user_data);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
GType clutter_binding_pool_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
ClutterBindingPool *  clutter_binding_pool_new              (const gchar         *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
ClutterBindingPool *  clutter_binding_pool_get_for_class    (gpointer             klass);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
ClutterBindingPool *  clutter_binding_pool_find             (const gchar         *name);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_install_action   (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             const gchar         *action_name,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
@@ -89,44 +89,44 @@ void                  clutter_binding_pool_install_action   (ClutterBindingPool
 | 
			
		||||
                                                             GCallback            callback,
 | 
			
		||||
                                                             gpointer             data,
 | 
			
		||||
                                                             GDestroyNotify       notify);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_install_closure  (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             const gchar         *action_name,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
                                                             ClutterModifierType  modifiers,
 | 
			
		||||
                                                             GClosure            *closure);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_override_action  (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
                                                             ClutterModifierType  modifiers,
 | 
			
		||||
                                                             GCallback            callback,
 | 
			
		||||
                                                             gpointer             data,
 | 
			
		||||
                                                             GDestroyNotify       notify);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_override_closure (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
                                                             ClutterModifierType  modifiers,
 | 
			
		||||
                                                             GClosure            *closure);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
const gchar *         clutter_binding_pool_find_action      (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
                                                             ClutterModifierType  modifiers);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_remove_action    (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
                                                             ClutterModifierType  modifiers);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
gboolean              clutter_binding_pool_activate         (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             guint                key_val,
 | 
			
		||||
                                                             ClutterModifierType  modifiers,
 | 
			
		||||
                                                             GObject             *gobject);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_block_action     (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             const gchar         *action_name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                  clutter_binding_pool_unblock_action   (ClutterBindingPool  *pool,
 | 
			
		||||
                                                             const gchar         *action_name);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,9 @@
 | 
			
		||||
#define CLUTTER_IS_BLUR_EFFECT_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BLUR_EFFECT))
 | 
			
		||||
#define CLUTTER_BLUR_EFFECT_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BLUR_EFFECT, ClutterBlurEffectClass))
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
 | 
			
		||||
 | 
			
		||||
@@ -99,8 +101,7 @@ G_DEFINE_TYPE (ClutterBlurEffect,
 | 
			
		||||
               CLUTTER_TYPE_OFFSCREEN_EFFECT);
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
clutter_blur_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
                               ClutterPaintContext *paint_context)
 | 
			
		||||
clutter_blur_effect_pre_paint (ClutterEffect *effect)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect);
 | 
			
		||||
  ClutterEffectClass *parent_class;
 | 
			
		||||
@@ -125,7 +126,7 @@ clutter_blur_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  parent_class = CLUTTER_EFFECT_CLASS (clutter_blur_effect_parent_class);
 | 
			
		||||
  if (parent_class->pre_paint (effect, paint_context))
 | 
			
		||||
  if (parent_class->pre_paint (effect))
 | 
			
		||||
    {
 | 
			
		||||
      ClutterOffscreenEffect *offscreen_effect =
 | 
			
		||||
        CLUTTER_OFFSCREEN_EFFECT (effect);
 | 
			
		||||
@@ -158,12 +159,9 @@ clutter_blur_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_blur_effect_paint_target (ClutterOffscreenEffect *effect,
 | 
			
		||||
                                  ClutterPaintContext    *paint_context)
 | 
			
		||||
clutter_blur_effect_paint_target (ClutterOffscreenEffect *effect)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect);
 | 
			
		||||
  CoglFramebuffer *framebuffer =
 | 
			
		||||
    clutter_paint_context_get_framebuffer (paint_context);
 | 
			
		||||
  guint8 paint_opacity;
 | 
			
		||||
 | 
			
		||||
  paint_opacity = clutter_actor_get_paint_opacity (self->actor);
 | 
			
		||||
@@ -173,19 +171,19 @@ clutter_blur_effect_paint_target (ClutterOffscreenEffect *effect,
 | 
			
		||||
                              paint_opacity,
 | 
			
		||||
                              paint_opacity,
 | 
			
		||||
                              paint_opacity);
 | 
			
		||||
  cogl_push_source (self->pipeline);
 | 
			
		||||
 | 
			
		||||
  cogl_framebuffer_draw_rectangle (framebuffer,
 | 
			
		||||
                                   self->pipeline,
 | 
			
		||||
                                   0, 0,
 | 
			
		||||
                                   self->tex_width, self->tex_height);
 | 
			
		||||
  cogl_rectangle (0, 0, self->tex_width, self->tex_height);
 | 
			
		||||
 | 
			
		||||
  cogl_pop_source ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
clutter_blur_effect_modify_paint_volume (ClutterEffect      *effect,
 | 
			
		||||
                                         ClutterPaintVolume *volume)
 | 
			
		||||
clutter_blur_effect_get_paint_volume (ClutterEffect      *effect,
 | 
			
		||||
                                      ClutterPaintVolume *volume)
 | 
			
		||||
{
 | 
			
		||||
  gfloat cur_width, cur_height;
 | 
			
		||||
  graphene_point3d_t origin;
 | 
			
		||||
  ClutterVertex origin;
 | 
			
		||||
 | 
			
		||||
  clutter_paint_volume_get_origin (volume, &origin);
 | 
			
		||||
  cur_width = clutter_paint_volume_get_width (volume);
 | 
			
		||||
@@ -226,7 +224,7 @@ clutter_blur_effect_class_init (ClutterBlurEffectClass *klass)
 | 
			
		||||
  gobject_class->dispose = clutter_blur_effect_dispose;
 | 
			
		||||
 | 
			
		||||
  effect_class->pre_paint = clutter_blur_effect_pre_paint;
 | 
			
		||||
  effect_class->modify_paint_volume = clutter_blur_effect_modify_paint_volume;
 | 
			
		||||
  effect_class->get_paint_volume = clutter_blur_effect_get_paint_volume;
 | 
			
		||||
 | 
			
		||||
  offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
 | 
			
		||||
  offscreen_class->paint_target = clutter_blur_effect_paint_target;
 | 
			
		||||
@@ -252,7 +250,9 @@ clutter_blur_effect_init (ClutterBlurEffect *self)
 | 
			
		||||
      cogl_pipeline_add_layer_snippet (klass->base_pipeline, 0, snippet);
 | 
			
		||||
      cogl_object_unref (snippet);
 | 
			
		||||
 | 
			
		||||
      cogl_pipeline_set_layer_null_texture (klass->base_pipeline, 0);
 | 
			
		||||
      cogl_pipeline_set_layer_null_texture (klass->base_pipeline,
 | 
			
		||||
                                            0, /* layer number */
 | 
			
		||||
                                            COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
 
 | 
			
		||||
@@ -48,10 +48,10 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _ClutterBlurEffect       ClutterBlurEffect;
 | 
			
		||||
typedef struct _ClutterBlurEffectClass  ClutterBlurEffectClass;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_blur_effect_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterEffect *clutter_blur_effect_new (void);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -77,34 +77,92 @@ struct _ClutterBoxLayoutClass
 | 
			
		||||
  ClutterLayoutManagerClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
GType clutter_box_layout_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
ClutterLayoutManager *  clutter_box_layout_new                 (void);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_orientation      (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterOrientation   orientation);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
ClutterOrientation      clutter_box_layout_get_orientation      (ClutterBoxLayout    *layout);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
void                    clutter_box_layout_set_spacing          (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 guint                spacing);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
guint                   clutter_box_layout_get_spacing          (ClutterBoxLayout    *layout);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
void                    clutter_box_layout_set_homogeneous      (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 gboolean             homogeneous);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
gboolean                clutter_box_layout_get_homogeneous      (ClutterBoxLayout    *layout);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
void                    clutter_box_layout_set_pack_start       (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 gboolean             pack_start);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
gboolean                clutter_box_layout_get_pack_start       (ClutterBoxLayout    *layout);
 | 
			
		||||
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12_FOR(clutter_box_layout_set_orientation)
 | 
			
		||||
void                    clutter_box_layout_set_vertical         (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 gboolean             vertical);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12_FOR(clutter_box_layout_get_orientation)
 | 
			
		||||
gboolean                clutter_box_layout_get_vertical         (ClutterBoxLayout    *layout);
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_2
 | 
			
		||||
void                    clutter_box_layout_pack                 (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor,
 | 
			
		||||
                                                                 gboolean             expand,
 | 
			
		||||
                                                                 gboolean             x_fill,
 | 
			
		||||
                                                                 gboolean             y_fill,
 | 
			
		||||
                                                                 ClutterBoxAlignment  x_align,
 | 
			
		||||
                                                                 ClutterBoxAlignment  y_align);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_alignment        (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor,
 | 
			
		||||
                                                                 ClutterBoxAlignment  x_align,
 | 
			
		||||
                                                                 ClutterBoxAlignment  y_align);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_get_alignment        (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor,
 | 
			
		||||
                                                                 ClutterBoxAlignment *x_align,
 | 
			
		||||
                                                                 ClutterBoxAlignment *y_align);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_fill             (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor,
 | 
			
		||||
                                                                 gboolean             x_fill,
 | 
			
		||||
                                                                 gboolean             y_fill);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_get_fill             (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor,
 | 
			
		||||
                                                                 gboolean            *x_fill,
 | 
			
		||||
                                                                 gboolean            *y_fill);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_expand           (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor,
 | 
			
		||||
                                                                 gboolean             expand);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
gboolean                clutter_box_layout_get_expand           (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 ClutterActor        *actor);
 | 
			
		||||
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_use_animations   (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 gboolean             animate);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
gboolean                clutter_box_layout_get_use_animations   (ClutterBoxLayout    *layout);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_easing_mode      (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 gulong               mode);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
gulong                  clutter_box_layout_get_easing_mode      (ClutterBoxLayout    *layout);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
void                    clutter_box_layout_set_easing_duration  (ClutterBoxLayout    *layout,
 | 
			
		||||
                                                                 guint                msecs);
 | 
			
		||||
CLUTTER_DEPRECATED_IN_1_12
 | 
			
		||||
guint                   clutter_box_layout_get_easing_duration  (ClutterBoxLayout    *layout);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CLUTTER_BOX_LAYOUT_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,9 @@
 | 
			
		||||
#define CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT))
 | 
			
		||||
#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass))
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
@@ -121,17 +123,16 @@ G_DEFINE_TYPE (ClutterBrightnessContrastEffect,
 | 
			
		||||
static gboolean
 | 
			
		||||
will_have_no_effect (ClutterBrightnessContrastEffect *self)
 | 
			
		||||
{
 | 
			
		||||
  return (G_APPROX_VALUE (self->brightness_red, no_change, FLT_EPSILON) &&
 | 
			
		||||
          G_APPROX_VALUE (self->brightness_green, no_change, FLT_EPSILON) &&
 | 
			
		||||
          G_APPROX_VALUE (self->brightness_blue, no_change, FLT_EPSILON) &&
 | 
			
		||||
          G_APPROX_VALUE (self->contrast_red, no_change, FLT_EPSILON) &&
 | 
			
		||||
          G_APPROX_VALUE (self->contrast_green, no_change, FLT_EPSILON) &&
 | 
			
		||||
          G_APPROX_VALUE (self->contrast_blue, no_change, FLT_EPSILON));
 | 
			
		||||
  return (self->brightness_red == no_change &&
 | 
			
		||||
          self->brightness_green == no_change &&
 | 
			
		||||
          self->brightness_blue == no_change &&
 | 
			
		||||
          self->contrast_red == no_change &&
 | 
			
		||||
          self->contrast_green == no_change &&
 | 
			
		||||
          self->contrast_blue == no_change);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
clutter_brightness_contrast_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
                                              ClutterPaintContext *paint_context)
 | 
			
		||||
clutter_brightness_contrast_effect_pre_paint (ClutterEffect *effect)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect);
 | 
			
		||||
  ClutterEffectClass *parent_class;
 | 
			
		||||
@@ -157,7 +158,7 @@ clutter_brightness_contrast_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
 | 
			
		||||
  parent_class =
 | 
			
		||||
    CLUTTER_EFFECT_CLASS (clutter_brightness_contrast_effect_parent_class);
 | 
			
		||||
  if (parent_class->pre_paint (effect, paint_context))
 | 
			
		||||
  if (parent_class->pre_paint (effect))
 | 
			
		||||
    {
 | 
			
		||||
      ClutterOffscreenEffect *offscreen_effect =
 | 
			
		||||
        CLUTTER_OFFSCREEN_EFFECT (effect);
 | 
			
		||||
@@ -176,12 +177,9 @@ clutter_brightness_contrast_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect,
 | 
			
		||||
                                                 ClutterPaintContext    *paint_context)
 | 
			
		||||
clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect);
 | 
			
		||||
  CoglFramebuffer *framebuffer =
 | 
			
		||||
   clutter_paint_context_get_framebuffer (paint_context);
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  guint8 paint_opacity;
 | 
			
		||||
 | 
			
		||||
@@ -193,11 +191,11 @@ clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect,
 | 
			
		||||
                              paint_opacity,
 | 
			
		||||
                              paint_opacity,
 | 
			
		||||
                              paint_opacity);
 | 
			
		||||
  cogl_push_source (self->pipeline);
 | 
			
		||||
 | 
			
		||||
  cogl_framebuffer_draw_rectangle (framebuffer,
 | 
			
		||||
                                   self->pipeline,
 | 
			
		||||
                                   0, 0,
 | 
			
		||||
                                   self->tex_width, self->tex_height);
 | 
			
		||||
  cogl_rectangle (0, 0, self->tex_width, self->tex_height);
 | 
			
		||||
 | 
			
		||||
  cogl_pop_source ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -441,7 +439,9 @@ clutter_brightness_contrast_effect_init (ClutterBrightnessContrastEffect *self)
 | 
			
		||||
      cogl_pipeline_add_snippet (klass->base_pipeline, snippet);
 | 
			
		||||
      cogl_object_unref (snippet);
 | 
			
		||||
 | 
			
		||||
      cogl_pipeline_set_layer_null_texture (klass->base_pipeline, 0);
 | 
			
		||||
      cogl_pipeline_set_layer_null_texture (klass->base_pipeline,
 | 
			
		||||
                                            0, /* layer number */
 | 
			
		||||
                                            COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
@@ -497,9 +497,9 @@ clutter_brightness_contrast_effect_set_brightness_full (ClutterBrightnessContras
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
 | 
			
		||||
 | 
			
		||||
  if (G_APPROX_VALUE (red, effect->brightness_red, FLT_EPSILON) &&
 | 
			
		||||
      G_APPROX_VALUE (green, effect->brightness_green, FLT_EPSILON) &&
 | 
			
		||||
      G_APPROX_VALUE (blue, effect->brightness_blue, FLT_EPSILON))
 | 
			
		||||
  if (red == effect->brightness_red &&
 | 
			
		||||
      green == effect->brightness_green &&
 | 
			
		||||
      blue == effect->brightness_blue)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  effect->brightness_red = red;
 | 
			
		||||
@@ -587,9 +587,9 @@ clutter_brightness_contrast_effect_set_contrast_full (ClutterBrightnessContrastE
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
 | 
			
		||||
 | 
			
		||||
  if (G_APPROX_VALUE (red, effect->contrast_red, FLT_EPSILON) &&
 | 
			
		||||
      G_APPROX_VALUE (green, effect->contrast_green, FLT_EPSILON) &&
 | 
			
		||||
      G_APPROX_VALUE (blue, effect->contrast_blue, FLT_EPSILON))
 | 
			
		||||
  if (red == effect->contrast_red &&
 | 
			
		||||
      green == effect->contrast_green &&
 | 
			
		||||
      blue == effect->contrast_blue)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  effect->contrast_red = red;
 | 
			
		||||
 
 | 
			
		||||
@@ -49,35 +49,35 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _ClutterBrightnessContrastEffect         ClutterBrightnessContrastEffect;
 | 
			
		||||
typedef struct _ClutterBrightnessContrastEffectClass    ClutterBrightnessContrastEffectClass;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
GType clutter_brightness_contrast_effect_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterEffect * clutter_brightness_contrast_effect_new                          (void);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void            clutter_brightness_contrast_effect_set_brightness_full          (ClutterBrightnessContrastEffect *effect,
 | 
			
		||||
                                                                                 float                            red,
 | 
			
		||||
                                                                                 float                            green,
 | 
			
		||||
                                                                                 float                            blue);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void            clutter_brightness_contrast_effect_set_brightness               (ClutterBrightnessContrastEffect *effect,
 | 
			
		||||
                                                                                 float                            brightness);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void            clutter_brightness_contrast_effect_get_brightness               (ClutterBrightnessContrastEffect *effect,
 | 
			
		||||
                                                                                 float                           *red,
 | 
			
		||||
                                                                                 float                           *green,
 | 
			
		||||
                                                                                 float                           *blue);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void            clutter_brightness_contrast_effect_set_contrast_full            (ClutterBrightnessContrastEffect *effect,
 | 
			
		||||
                                                                                 float                            red,
 | 
			
		||||
                                                                                 float                            green,
 | 
			
		||||
                                                                                 float                            blue);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void            clutter_brightness_contrast_effect_set_contrast                 (ClutterBrightnessContrastEffect *effect,
 | 
			
		||||
                                                                                 float                            contrast);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
void            clutter_brightness_contrast_effect_get_contrast                 (ClutterBrightnessContrastEffect *effect,
 | 
			
		||||
                                                                                 float                           *red,
 | 
			
		||||
                                                                                 float                           *green,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
/* Mutter version */
 | 
			
		||||
#mesondefine MUTTER_VERSION
 | 
			
		||||
 | 
			
		||||
/* List of Cogl drivers */
 | 
			
		||||
#mesondefine CLUTTER_DRIVERS
 | 
			
		||||
 | 
			
		||||
/* Have evdev support for input handling */
 | 
			
		||||
#mesondefine HAVE_EVDEV
 | 
			
		||||
 | 
			
		||||
/* Building with libwacom for advanced tablet management */
 | 
			
		||||
#mesondefine HAVE_LIBWACOM
 | 
			
		||||
 | 
			
		||||
/* Supports PangoFt2 */
 | 
			
		||||
#mesondefine HAVE_PANGO_FT2
 | 
			
		||||
@@ -27,7 +27,9 @@
 | 
			
		||||
 * Clutter provides some utility functions for using Cairo.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-cairo.h"
 | 
			
		||||
#include "clutter-color.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -50,9 +50,9 @@ G_BEGIN_DECLS
 | 
			
		||||
#define CLUTTER_CAIRO_FORMAT_ARGB32     (COGL_PIXEL_FORMAT_ARGB_8888_PRE)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
void    clutter_cairo_clear             (cairo_t               *cr);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void    clutter_cairo_set_source_color  (cairo_t               *cr,
 | 
			
		||||
                                         const ClutterColor    *color);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,9 +42,10 @@
 | 
			
		||||
 * #ClutterCanvas is available since Clutter 1.10.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
#include <cairo-gobject.h>
 | 
			
		||||
 | 
			
		||||
@@ -70,7 +71,6 @@ struct _ClutterCanvasPrivate
 | 
			
		||||
 | 
			
		||||
  int width;
 | 
			
		||||
  int height;
 | 
			
		||||
  float scale_factor;
 | 
			
		||||
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  gboolean dirty;
 | 
			
		||||
@@ -84,7 +84,6 @@ enum
 | 
			
		||||
 | 
			
		||||
  PROP_WIDTH,
 | 
			
		||||
  PROP_HEIGHT,
 | 
			
		||||
  PROP_SCALE_FACTOR,
 | 
			
		||||
 | 
			
		||||
  LAST_PROP
 | 
			
		||||
};
 | 
			
		||||
@@ -100,7 +99,7 @@ enum
 | 
			
		||||
 | 
			
		||||
static guint canvas_signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
static void clutter_content_iface_init (ClutterContentInterface *iface);
 | 
			
		||||
static void clutter_content_iface_init (ClutterContentIface *iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE (ClutterCanvas, clutter_canvas, G_TYPE_OBJECT,
 | 
			
		||||
                         G_ADD_PRIVATE (ClutterCanvas)
 | 
			
		||||
@@ -181,19 +180,6 @@ clutter_canvas_set_property (GObject      *gobject,
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_SCALE_FACTOR:
 | 
			
		||||
      {
 | 
			
		||||
        gfloat new_scale_factor = g_value_get_float (value);
 | 
			
		||||
 | 
			
		||||
        if (priv->scale_factor != new_scale_factor)
 | 
			
		||||
          {
 | 
			
		||||
            priv->scale_factor = new_scale_factor;
 | 
			
		||||
 | 
			
		||||
            clutter_content_invalidate (CLUTTER_CONTENT (gobject));
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -218,10 +204,6 @@ clutter_canvas_get_property (GObject    *gobject,
 | 
			
		||||
      g_value_set_int (value, priv->height);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_SCALE_FACTOR:
 | 
			
		||||
      g_value_set_float (value, priv->scale_factor);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -265,19 +247,6 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
 | 
			
		||||
                      G_PARAM_READWRITE |
 | 
			
		||||
                      G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterCanvas:scale-factor:
 | 
			
		||||
   *
 | 
			
		||||
   * The height of the canvas.
 | 
			
		||||
   */
 | 
			
		||||
  obj_props[PROP_SCALE_FACTOR] =
 | 
			
		||||
    g_param_spec_float ("scale-factor",
 | 
			
		||||
                        P_("Scale Factor"),
 | 
			
		||||
                        P_("The Scale factor of the canvas"),
 | 
			
		||||
                        0.01f, G_MAXFLOAT,
 | 
			
		||||
                        1.0f,
 | 
			
		||||
                        G_PARAM_READWRITE |
 | 
			
		||||
                        G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterCanvas::draw:
 | 
			
		||||
@@ -324,14 +293,12 @@ clutter_canvas_init (ClutterCanvas *self)
 | 
			
		||||
 | 
			
		||||
  self->priv->width = -1;
 | 
			
		||||
  self->priv->height = -1;
 | 
			
		||||
  self->priv->scale_factor = 1.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_canvas_paint_content (ClutterContent      *content,
 | 
			
		||||
                              ClutterActor        *actor,
 | 
			
		||||
                              ClutterPaintNode    *root,
 | 
			
		||||
                              ClutterPaintContext *paint_context)
 | 
			
		||||
clutter_canvas_paint_content (ClutterContent   *content,
 | 
			
		||||
                              ClutterActor     *actor,
 | 
			
		||||
                              ClutterPaintNode *root)
 | 
			
		||||
{
 | 
			
		||||
  ClutterCanvas *self = CLUTTER_CANVAS (content);
 | 
			
		||||
  ClutterCanvasPrivate *priv = self->priv;
 | 
			
		||||
@@ -352,7 +319,7 @@ clutter_canvas_paint_content (ClutterContent      *content,
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  node = clutter_actor_create_texture_paint_node (actor, priv->texture);
 | 
			
		||||
  clutter_paint_node_set_static_name (node, "Canvas Content");
 | 
			
		||||
  clutter_paint_node_set_name (node, "Canvas Content");
 | 
			
		||||
  clutter_paint_node_add_child (root, node);
 | 
			
		||||
  clutter_paint_node_unref (node);
 | 
			
		||||
 | 
			
		||||
@@ -375,8 +342,8 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
 | 
			
		||||
 | 
			
		||||
  priv->dirty = TRUE;
 | 
			
		||||
 | 
			
		||||
  real_width = ceilf (priv->width * priv->scale_factor);
 | 
			
		||||
  real_height = ceilf (priv->height * priv->scale_factor);
 | 
			
		||||
  real_width = priv->width;
 | 
			
		||||
  real_height = priv->height;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d",
 | 
			
		||||
                priv->width, priv->height);
 | 
			
		||||
@@ -422,10 +389,6 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
 | 
			
		||||
      mapped_buffer = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  cairo_surface_set_device_scale (surface,
 | 
			
		||||
                                  priv->scale_factor,
 | 
			
		||||
                                  priv->scale_factor);
 | 
			
		||||
 | 
			
		||||
  self->priv->cr = cr = cairo_create (surface);
 | 
			
		||||
 | 
			
		||||
  g_signal_emit (self, canvas_signals[DRAW], 0,
 | 
			
		||||
@@ -487,16 +450,16 @@ clutter_canvas_get_preferred_size (ClutterContent *content,
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (width != NULL)
 | 
			
		||||
    *width = ceilf (priv->width * priv->scale_factor);
 | 
			
		||||
    *width = priv->width;
 | 
			
		||||
 | 
			
		||||
  if (height != NULL)
 | 
			
		||||
    *height = ceilf (priv->height * priv->scale_factor);
 | 
			
		||||
    *height = priv->height;
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_content_iface_init (ClutterContentInterface *iface)
 | 
			
		||||
clutter_content_iface_init (ClutterContentIface *iface)
 | 
			
		||||
{
 | 
			
		||||
  iface->invalidate = clutter_canvas_invalidate;
 | 
			
		||||
  iface->paint_content = clutter_canvas_paint_content;
 | 
			
		||||
@@ -599,48 +562,3 @@ clutter_canvas_set_size (ClutterCanvas *canvas,
 | 
			
		||||
 | 
			
		||||
  return clutter_canvas_invalidate_internal (canvas, width, height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_canvas_set_scale_factor:
 | 
			
		||||
 * @canvas: a #ClutterCanvas
 | 
			
		||||
 * @scale: the integer scaling factor of the canvas
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the scaling factor of the @canvas, and invalidates the content.
 | 
			
		||||
 *
 | 
			
		||||
 * This function will cause the @canvas to be invalidated only
 | 
			
		||||
 * if the scale factor of the canvas surface has changed.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
 | 
			
		||||
                                 float          scale)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CANVAS (canvas));
 | 
			
		||||
  g_return_if_fail (scale > 0.0f);
 | 
			
		||||
 | 
			
		||||
  if (canvas->priv->scale_factor != scale)
 | 
			
		||||
    {
 | 
			
		||||
      canvas->priv->scale_factor = scale;
 | 
			
		||||
 | 
			
		||||
      g_object_freeze_notify (G_OBJECT (canvas));
 | 
			
		||||
      clutter_content_invalidate (CLUTTER_CONTENT (canvas));
 | 
			
		||||
      g_object_thaw_notify (G_OBJECT (canvas));
 | 
			
		||||
 | 
			
		||||
      g_object_notify_by_pspec (G_OBJECT (canvas), obj_props[PROP_SCALE_FACTOR]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_canvas_get_scale_factor:
 | 
			
		||||
 * @canvas: a #ClutterCanvas
 | 
			
		||||
 *
 | 
			
		||||
 * Gets the scale factor of the @canvas.
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: the current @canvas scale factor or -1 if invalid
 | 
			
		||||
 */
 | 
			
		||||
float
 | 
			
		||||
clutter_canvas_get_scale_factor (ClutterCanvas *canvas)
 | 
			
		||||
{
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_CANVAS (canvas), -1.0f);
 | 
			
		||||
 | 
			
		||||
  return canvas->priv->scale_factor;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -85,21 +85,21 @@ struct _ClutterCanvasClass
 | 
			
		||||
  gpointer _padding[16];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
GType clutter_canvas_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
ClutterContent *        clutter_canvas_new                      (void);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gboolean                clutter_canvas_set_size                 (ClutterCanvas *canvas,
 | 
			
		||||
                                                                 int            width,
 | 
			
		||||
                                                                 int            height);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_18
 | 
			
		||||
void                    clutter_canvas_set_scale_factor         (ClutterCanvas *canvas,
 | 
			
		||||
                                                                 float          scale);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
float                   clutter_canvas_get_scale_factor         (ClutterCanvas *canvas);
 | 
			
		||||
                                                                 int            scale);
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_18
 | 
			
		||||
int                     clutter_canvas_get_scale_factor         (ClutterCanvas *canvas);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,9 @@
 | 
			
		||||
 *
 | 
			
		||||
 * #ClutterChildMeta is available since Clutter 0.8
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-child-meta.h"
 | 
			
		||||
#include "clutter-container.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -109,12 +109,12 @@ struct _ClutterChildMetaClass
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
}; 
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GType clutter_child_meta_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterContainer *      clutter_child_meta_get_container        (ClutterChildMeta *data);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterActor     *      clutter_child_meta_get_actor            (ClutterChildMeta *data);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,9 @@
 | 
			
		||||
 * #ClutterClickAction is available since Clutter 1.4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-click-action.h"
 | 
			
		||||
 | 
			
		||||
@@ -105,8 +107,8 @@ struct _ClutterClickActionPrivate
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *stage;
 | 
			
		||||
 | 
			
		||||
  gulong event_id;
 | 
			
		||||
  gulong capture_id;
 | 
			
		||||
  guint event_id;
 | 
			
		||||
  guint capture_id;
 | 
			
		||||
  guint long_press_id;
 | 
			
		||||
 | 
			
		||||
  gint long_press_threshold;
 | 
			
		||||
@@ -159,8 +161,7 @@ static inline void
 | 
			
		||||
click_action_set_pressed (ClutterClickAction *action,
 | 
			
		||||
                          gboolean            is_pressed)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
 | 
			
		||||
  is_pressed = !!is_pressed;
 | 
			
		||||
 | 
			
		||||
@@ -175,8 +176,7 @@ static inline void
 | 
			
		||||
click_action_set_held (ClutterClickAction *action,
 | 
			
		||||
                       gboolean            is_held)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
 | 
			
		||||
  is_held = !!is_held;
 | 
			
		||||
 | 
			
		||||
@@ -191,8 +191,7 @@ static gboolean
 | 
			
		||||
click_action_emit_long_press (gpointer data)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickAction *action = data;
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  gboolean result;
 | 
			
		||||
 | 
			
		||||
@@ -205,7 +204,11 @@ click_action_emit_long_press (gpointer data)
 | 
			
		||||
                 CLUTTER_LONG_PRESS_ACTIVATE,
 | 
			
		||||
                 &result);
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&priv->capture_id, priv->stage);
 | 
			
		||||
  if (priv->capture_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_handler_disconnect (priv->stage, priv->capture_id);
 | 
			
		||||
      priv->capture_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  click_action_set_pressed (action, FALSE);
 | 
			
		||||
  click_action_set_held (action, FALSE);
 | 
			
		||||
@@ -216,8 +219,7 @@ click_action_emit_long_press (gpointer data)
 | 
			
		||||
static inline void
 | 
			
		||||
click_action_query_long_press (ClutterClickAction *action)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  gboolean result = FALSE;
 | 
			
		||||
  gint timeout;
 | 
			
		||||
@@ -242,7 +244,6 @@ click_action_query_long_press (ClutterClickAction *action)
 | 
			
		||||
 | 
			
		||||
  if (result)
 | 
			
		||||
    {
 | 
			
		||||
      g_clear_handle_id (&priv->long_press_id, g_source_remove);
 | 
			
		||||
      priv->long_press_id =
 | 
			
		||||
        clutter_threads_add_timeout (timeout,
 | 
			
		||||
                                     click_action_emit_long_press,
 | 
			
		||||
@@ -253,8 +254,7 @@ click_action_query_long_press (ClutterClickAction *action)
 | 
			
		||||
static inline void
 | 
			
		||||
click_action_cancel_long_press (ClutterClickAction *action)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->long_press_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
@@ -263,7 +263,8 @@ click_action_cancel_long_press (ClutterClickAction *action)
 | 
			
		||||
 | 
			
		||||
      actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (action));
 | 
			
		||||
 | 
			
		||||
      g_clear_handle_id (&priv->long_press_id, g_source_remove);
 | 
			
		||||
      g_source_remove (priv->long_press_id);
 | 
			
		||||
      priv->long_press_id = 0;
 | 
			
		||||
 | 
			
		||||
      g_signal_emit (action, click_signals[LONG_PRESS], 0,
 | 
			
		||||
                     actor,
 | 
			
		||||
@@ -277,8 +278,7 @@ on_event (ClutterActor       *actor,
 | 
			
		||||
          ClutterEvent       *event,
 | 
			
		||||
          ClutterClickAction *action)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
  gboolean has_button = TRUE;
 | 
			
		||||
 | 
			
		||||
  if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (action)))
 | 
			
		||||
@@ -348,8 +348,7 @@ on_captured_event (ClutterActor       *stage,
 | 
			
		||||
                   ClutterEvent       *event,
 | 
			
		||||
                   ClutterClickAction *action)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  ClutterModifierType modifier_state;
 | 
			
		||||
  gboolean has_button = TRUE;
 | 
			
		||||
@@ -358,10 +357,6 @@ on_captured_event (ClutterActor       *stage,
 | 
			
		||||
 | 
			
		||||
  switch (clutter_event_type (event))
 | 
			
		||||
    {
 | 
			
		||||
    case CLUTTER_TOUCH_CANCEL:
 | 
			
		||||
      clutter_click_action_release (action);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case CLUTTER_TOUCH_END:
 | 
			
		||||
      has_button = FALSE;
 | 
			
		||||
    case CLUTTER_BUTTON_RELEASE:
 | 
			
		||||
@@ -378,9 +373,17 @@ on_captured_event (ClutterActor       *stage,
 | 
			
		||||
      click_action_cancel_long_press (action);
 | 
			
		||||
 | 
			
		||||
      /* disconnect the capture */
 | 
			
		||||
      g_clear_signal_handler (&priv->capture_id, priv->stage);
 | 
			
		||||
      if (priv->capture_id != 0)
 | 
			
		||||
        {
 | 
			
		||||
          g_signal_handler_disconnect (priv->stage, priv->capture_id);
 | 
			
		||||
          priv->capture_id = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      g_clear_handle_id (&priv->long_press_id, g_source_remove);
 | 
			
		||||
      if (priv->long_press_id != 0)
 | 
			
		||||
        {
 | 
			
		||||
          g_source_remove (priv->long_press_id);
 | 
			
		||||
          priv->long_press_id = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (!clutter_actor_contains (actor, clutter_event_get_source (event)))
 | 
			
		||||
        return CLUTTER_EVENT_PROPAGATE;
 | 
			
		||||
@@ -441,15 +444,14 @@ clutter_click_action_set_actor (ClutterActorMeta *meta,
 | 
			
		||||
                                ClutterActor     *actor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickAction *action = CLUTTER_CLICK_ACTION (meta);
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (action);
 | 
			
		||||
  ClutterClickActionPrivate *priv = action->priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->event_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActor *old_actor = clutter_actor_meta_get_actor (meta);
 | 
			
		||||
 | 
			
		||||
      if (old_actor != NULL)
 | 
			
		||||
        g_clear_signal_handler (&priv->event_id, old_actor);
 | 
			
		||||
        g_signal_handler_disconnect (old_actor, priv->event_id);
 | 
			
		||||
 | 
			
		||||
      priv->event_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
@@ -457,13 +459,17 @@ clutter_click_action_set_actor (ClutterActorMeta *meta,
 | 
			
		||||
  if (priv->capture_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
      if (priv->stage != NULL)
 | 
			
		||||
        g_clear_signal_handler (&priv->capture_id, priv->stage);
 | 
			
		||||
        g_signal_handler_disconnect (priv->stage, priv->capture_id);
 | 
			
		||||
 | 
			
		||||
      priv->capture_id = 0;
 | 
			
		||||
      priv->stage = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_clear_handle_id (&priv->long_press_id, g_source_remove);
 | 
			
		||||
  if (priv->long_press_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_source_remove (priv->long_press_id);
 | 
			
		||||
      priv->long_press_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  click_action_set_pressed (action, FALSE);
 | 
			
		||||
  click_action_set_held (action, FALSE);
 | 
			
		||||
@@ -476,28 +482,13 @@ clutter_click_action_set_actor (ClutterActorMeta *meta,
 | 
			
		||||
  CLUTTER_ACTOR_META_CLASS (clutter_click_action_parent_class)->set_actor (meta, actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_click_action_set_enabled (ClutterActorMeta *meta,
 | 
			
		||||
                                  gboolean          is_enabled)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickAction *click_action = CLUTTER_CLICK_ACTION (meta);
 | 
			
		||||
  ClutterActorMetaClass *parent_class =
 | 
			
		||||
    CLUTTER_ACTOR_META_CLASS (clutter_click_action_parent_class);
 | 
			
		||||
 | 
			
		||||
  if (!is_enabled)
 | 
			
		||||
    clutter_click_action_release (click_action);
 | 
			
		||||
 | 
			
		||||
  parent_class->set_enabled (meta, is_enabled);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_click_action_set_property (GObject      *gobject,
 | 
			
		||||
                                   guint         prop_id,
 | 
			
		||||
                                   const GValue *value,
 | 
			
		||||
                                   GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (CLUTTER_CLICK_ACTION (gobject));
 | 
			
		||||
  ClutterClickActionPrivate *priv = CLUTTER_CLICK_ACTION (gobject)->priv;
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
@@ -521,8 +512,7 @@ clutter_click_action_get_property (GObject    *gobject,
 | 
			
		||||
                                   GValue     *value,
 | 
			
		||||
                                   GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (CLUTTER_CLICK_ACTION (gobject));
 | 
			
		||||
  ClutterClickActionPrivate *priv = CLUTTER_CLICK_ACTION (gobject)->priv;
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
@@ -551,15 +541,26 @@ clutter_click_action_get_property (GObject    *gobject,
 | 
			
		||||
static void
 | 
			
		||||
clutter_click_action_dispose (GObject *gobject)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (CLUTTER_CLICK_ACTION (gobject));
 | 
			
		||||
  ClutterClickActionPrivate *priv = CLUTTER_CLICK_ACTION (gobject)->priv;
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&priv->event_id,
 | 
			
		||||
                          clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (gobject)));
 | 
			
		||||
  if (priv->event_id)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_handler_disconnect (clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (gobject)),
 | 
			
		||||
                                   priv->event_id);
 | 
			
		||||
      priv->event_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&priv->capture_id, priv->stage);
 | 
			
		||||
  if (priv->capture_id)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_handler_disconnect (priv->stage, priv->capture_id);
 | 
			
		||||
      priv->capture_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_clear_handle_id (&priv->long_press_id, g_source_remove);
 | 
			
		||||
  if (priv->long_press_id)
 | 
			
		||||
    {
 | 
			
		||||
      g_source_remove (priv->long_press_id);
 | 
			
		||||
      priv->long_press_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (clutter_click_action_parent_class)->dispose (gobject);
 | 
			
		||||
}
 | 
			
		||||
@@ -572,7 +573,6 @@ clutter_click_action_class_init (ClutterClickActionClass *klass)
 | 
			
		||||
  ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  meta_class->set_actor = clutter_click_action_set_actor;
 | 
			
		||||
  meta_class->set_enabled = clutter_click_action_set_enabled;
 | 
			
		||||
 | 
			
		||||
  gobject_class->dispose = clutter_click_action_dispose;
 | 
			
		||||
  gobject_class->set_property = clutter_click_action_set_property;
 | 
			
		||||
@@ -664,7 +664,8 @@ clutter_click_action_class_init (ClutterClickActionClass *klass)
 | 
			
		||||
                  G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
                  G_SIGNAL_RUN_LAST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterClickActionClass, clicked),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__OBJECT,
 | 
			
		||||
                  G_TYPE_NONE, 1,
 | 
			
		||||
                  CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
@@ -710,11 +711,9 @@ clutter_click_action_class_init (ClutterClickActionClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
clutter_click_action_init (ClutterClickAction *self)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv =
 | 
			
		||||
    clutter_click_action_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  priv->long_press_threshold = -1;
 | 
			
		||||
  priv->long_press_duration = -1;
 | 
			
		||||
  self->priv = clutter_click_action_get_instance_private (self);
 | 
			
		||||
  self->priv->long_press_threshold = -1;
 | 
			
		||||
  self->priv->long_press_duration = -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -754,13 +753,17 @@ clutter_click_action_release (ClutterClickAction *action)
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CLICK_ACTION (action));
 | 
			
		||||
 | 
			
		||||
  priv = clutter_click_action_get_instance_private (action);
 | 
			
		||||
  priv = action->priv;
 | 
			
		||||
 | 
			
		||||
  if (!priv->is_held)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* disconnect the capture */
 | 
			
		||||
  g_clear_signal_handler (&priv->capture_id, priv->stage);
 | 
			
		||||
  if (priv->capture_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_handler_disconnect (priv->stage, priv->capture_id);
 | 
			
		||||
      priv->capture_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  click_action_cancel_long_press (action);
 | 
			
		||||
  click_action_set_held (action, FALSE);
 | 
			
		||||
@@ -780,13 +783,9 @@ clutter_click_action_release (ClutterClickAction *action)
 | 
			
		||||
guint
 | 
			
		||||
clutter_click_action_get_button (ClutterClickAction *action)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_CLICK_ACTION (action), 0);
 | 
			
		||||
 | 
			
		||||
  priv = clutter_click_action_get_instance_private (action);
 | 
			
		||||
 | 
			
		||||
  return priv->press_button;
 | 
			
		||||
  return action->priv->press_button;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -802,13 +801,9 @@ clutter_click_action_get_button (ClutterClickAction *action)
 | 
			
		||||
ClutterModifierType
 | 
			
		||||
clutter_click_action_get_state (ClutterClickAction *action)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_CLICK_ACTION (action), 0);
 | 
			
		||||
 | 
			
		||||
  priv = clutter_click_action_get_instance_private (action);
 | 
			
		||||
 | 
			
		||||
  return priv->modifier_state;
 | 
			
		||||
  return action->priv->modifier_state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -826,15 +821,11 @@ clutter_click_action_get_coords (ClutterClickAction *action,
 | 
			
		||||
                                 gfloat             *press_x,
 | 
			
		||||
                                 gfloat             *press_y)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClickActionPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTION (action));
 | 
			
		||||
 | 
			
		||||
  priv = clutter_click_action_get_instance_private (action);
 | 
			
		||||
 | 
			
		||||
  if (press_x != NULL)
 | 
			
		||||
    *press_x = priv->press_x;
 | 
			
		||||
    *press_x = action->priv->press_x;
 | 
			
		||||
 | 
			
		||||
  if (press_y != NULL)
 | 
			
		||||
    *press_y = priv->press_y;
 | 
			
		||||
    *press_y = action->priv->press_y;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,13 +37,32 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_TYPE_CLICK_ACTION (clutter_click_action_get_type ())
 | 
			
		||||
#define CLUTTER_TYPE_CLICK_ACTION               (clutter_click_action_get_type ())
 | 
			
		||||
#define CLUTTER_CLICK_ACTION(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_CLICK_ACTION, ClutterClickAction))
 | 
			
		||||
#define CLUTTER_IS_CLICK_ACTION(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_CLICK_ACTION))
 | 
			
		||||
#define CLUTTER_CLICK_ACTION_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_CLICK_ACTION, ClutterClickActionClass))
 | 
			
		||||
#define CLUTTER_IS_CLICK_ACTION_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_CLICK_ACTION))
 | 
			
		||||
#define CLUTTER_CLICK_ACTION_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_CLICK_ACTION, ClutterClickActionClass))
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ClutterClickAction, clutter_click_action,
 | 
			
		||||
                          CLUTTER, CLICK_ACTION, ClutterAction);
 | 
			
		||||
typedef struct _ClutterClickAction              ClutterClickAction;
 | 
			
		||||
typedef struct _ClutterClickActionPrivate       ClutterClickActionPrivate;
 | 
			
		||||
typedef struct _ClutterClickActionClass         ClutterClickActionClass;
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterClickActionPrivate ClutterClickActionPrivate;
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterClickAction:
 | 
			
		||||
 *
 | 
			
		||||
 * The #ClutterClickAction structure contains
 | 
			
		||||
 * only private data and should be accessed using the provided API
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.4
 | 
			
		||||
 */
 | 
			
		||||
struct _ClutterClickAction
 | 
			
		||||
{
 | 
			
		||||
  /*< private >*/
 | 
			
		||||
  ClutterAction parent_instance;
 | 
			
		||||
 | 
			
		||||
  ClutterClickActionPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterClickActionClass:
 | 
			
		||||
@@ -78,19 +97,22 @@ struct _ClutterClickActionClass
 | 
			
		||||
  void (* _clutter_click_action7) (void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_click_action_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterAction *        clutter_click_action_new        (void);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
guint                  clutter_click_action_get_button (ClutterClickAction *action);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterModifierType    clutter_click_action_get_state  (ClutterClickAction *action);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_8
 | 
			
		||||
void                   clutter_click_action_get_coords (ClutterClickAction *action,
 | 
			
		||||
                                                        gfloat             *press_x,
 | 
			
		||||
                                                        gfloat             *press_y);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void                   clutter_click_action_release    (ClutterClickAction *action);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,9 @@
 | 
			
		||||
 * #ClutterClone is available since Clutter 1.0
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
 | 
			
		||||
#include "clutter-actor-private.h"
 | 
			
		||||
@@ -52,8 +54,6 @@
 | 
			
		||||
struct _ClutterClonePrivate
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *clone_source;
 | 
			
		||||
  float x_scale, y_scale;
 | 
			
		||||
 | 
			
		||||
  gulong source_destroy_id;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -124,6 +124,8 @@ static void
 | 
			
		||||
clutter_clone_apply_transform (ClutterActor *self, CoglMatrix *matrix)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClonePrivate *priv = CLUTTER_CLONE (self)->priv;
 | 
			
		||||
  ClutterActorBox box, source_box;
 | 
			
		||||
  gfloat x_scale, y_scale;
 | 
			
		||||
 | 
			
		||||
  /* First chain up and apply all the standard ClutterActor
 | 
			
		||||
   * transformations... */
 | 
			
		||||
@@ -134,12 +136,25 @@ clutter_clone_apply_transform (ClutterActor *self, CoglMatrix *matrix)
 | 
			
		||||
  if (priv->clone_source == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  cogl_matrix_scale (matrix, priv->x_scale, priv->y_scale, 1.f);
 | 
			
		||||
  /* get our allocated size */
 | 
			
		||||
  clutter_actor_get_allocation_box (self, &box);
 | 
			
		||||
 | 
			
		||||
  /* and get the allocated size of the source */
 | 
			
		||||
  clutter_actor_get_allocation_box (priv->clone_source, &source_box);
 | 
			
		||||
 | 
			
		||||
  /* We need to scale what the clone-source actor paints to fill our own
 | 
			
		||||
   * allocation...
 | 
			
		||||
   */
 | 
			
		||||
  x_scale = clutter_actor_box_get_width (&box)
 | 
			
		||||
          / clutter_actor_box_get_width (&source_box);
 | 
			
		||||
  y_scale = clutter_actor_box_get_height (&box)
 | 
			
		||||
          / clutter_actor_box_get_height (&source_box);
 | 
			
		||||
 | 
			
		||||
  cogl_matrix_scale (matrix, x_scale, y_scale, x_scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_clone_paint (ClutterActor        *actor,
 | 
			
		||||
                     ClutterPaintContext *paint_context)
 | 
			
		||||
clutter_clone_paint (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClone *self = CLUTTER_CLONE (actor);
 | 
			
		||||
  ClutterClonePrivate *priv = self->priv;
 | 
			
		||||
@@ -176,7 +191,7 @@ clutter_clone_paint (ClutterActor        *actor,
 | 
			
		||||
  if (clutter_actor_is_realized (priv->clone_source))
 | 
			
		||||
    {
 | 
			
		||||
      _clutter_actor_push_clone_paint ();
 | 
			
		||||
      clutter_actor_paint (priv->clone_source, paint_context);
 | 
			
		||||
      clutter_actor_paint (priv->clone_source);
 | 
			
		||||
      _clutter_actor_pop_clone_paint ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -226,51 +241,19 @@ clutter_clone_has_overlaps (ClutterActor *actor)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_clone_allocate (ClutterActor           *self,
 | 
			
		||||
                        const ClutterActorBox  *box)
 | 
			
		||||
                        const ClutterActorBox  *box,
 | 
			
		||||
                        ClutterAllocationFlags  flags)
 | 
			
		||||
{
 | 
			
		||||
  ClutterClonePrivate *priv = CLUTTER_CLONE (self)->priv;
 | 
			
		||||
  ClutterActorClass *parent_class;
 | 
			
		||||
  ClutterActorBox source_box;
 | 
			
		||||
  float x_scale, y_scale;
 | 
			
		||||
 | 
			
		||||
  /* chain up */
 | 
			
		||||
  parent_class = CLUTTER_ACTOR_CLASS (clutter_clone_parent_class);
 | 
			
		||||
  parent_class->allocate (self, box);
 | 
			
		||||
  parent_class->allocate (self, box, flags);
 | 
			
		||||
 | 
			
		||||
  if (priv->clone_source == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* ClutterActor delays allocating until the actor is shown; however
 | 
			
		||||
   * we cannot paint it correctly in that case, so force an allocation.
 | 
			
		||||
   */
 | 
			
		||||
  if (clutter_actor_get_parent (priv->clone_source) != NULL &&
 | 
			
		||||
      !clutter_actor_has_allocation (priv->clone_source))
 | 
			
		||||
    {
 | 
			
		||||
      float x = 0.f;
 | 
			
		||||
      float y = 0.f;
 | 
			
		||||
 | 
			
		||||
      clutter_actor_get_fixed_position (priv->clone_source, &x, &y);
 | 
			
		||||
      clutter_actor_allocate_preferred_size (priv->clone_source, x, y);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  clutter_actor_get_allocation_box (priv->clone_source, &source_box);
 | 
			
		||||
 | 
			
		||||
  /* We need to scale what the clone-source actor paints to fill our own
 | 
			
		||||
   * allocation...
 | 
			
		||||
   */
 | 
			
		||||
  x_scale = clutter_actor_box_get_width (box)
 | 
			
		||||
          / clutter_actor_box_get_width (&source_box);
 | 
			
		||||
  y_scale = clutter_actor_box_get_height (box)
 | 
			
		||||
          / clutter_actor_box_get_height (&source_box);
 | 
			
		||||
 | 
			
		||||
  if (!G_APPROX_VALUE (priv->x_scale, x_scale, FLT_EPSILON) ||
 | 
			
		||||
      !G_APPROX_VALUE (priv->y_scale, y_scale, FLT_EPSILON))
 | 
			
		||||
    {
 | 
			
		||||
      priv->x_scale = x_scale;
 | 
			
		||||
      priv->y_scale = y_scale;
 | 
			
		||||
      clutter_actor_invalidate_transform (CLUTTER_ACTOR (self));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
  /* XXX - this is wrong: ClutterClone cannot clone unparented
 | 
			
		||||
   * actors, as it will break all invariants
 | 
			
		||||
@@ -284,7 +267,7 @@ clutter_clone_allocate (ClutterActor           *self,
 | 
			
		||||
   * paint cycle, we can safely give it as much size as it requires
 | 
			
		||||
   */
 | 
			
		||||
  if (clutter_actor_get_parent (priv->clone_source) == NULL)
 | 
			
		||||
    clutter_actor_allocate_preferred_size (priv->clone_source);
 | 
			
		||||
    clutter_actor_allocate_preferred_size (priv->clone_source, flags);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -376,9 +359,6 @@ static void
 | 
			
		||||
clutter_clone_init (ClutterClone *self)
 | 
			
		||||
{
 | 
			
		||||
  self->priv = clutter_clone_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  self->priv->x_scale = 1.f;
 | 
			
		||||
  self->priv->y_scale = 1.f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -415,7 +395,8 @@ clutter_clone_set_source_internal (ClutterClone *self,
 | 
			
		||||
 | 
			
		||||
  if (priv->clone_source != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_clear_signal_handler (&priv->source_destroy_id, priv->clone_source);
 | 
			
		||||
      g_signal_handler_disconnect (priv->clone_source, priv->source_destroy_id);
 | 
			
		||||
      priv->source_destroy_id = 0;
 | 
			
		||||
      _clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self));
 | 
			
		||||
      g_object_unref (priv->clone_source);
 | 
			
		||||
      priv->clone_source = NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -78,15 +78,15 @@ struct _ClutterCloneClass
 | 
			
		||||
  void (*_clutter_actor_clone4) (void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
GType clutter_clone_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
ClutterActor *  clutter_clone_new               (ClutterActor *source);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void            clutter_clone_set_source        (ClutterClone *self,
 | 
			
		||||
                                                 ClutterActor *source);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
ClutterActor *  clutter_clone_get_source        (ClutterClone *self);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,9 @@
 | 
			
		||||
 * The alpha channel is fully opaque at 255 and fully transparent at 0.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -68,76 +68,76 @@ struct _ClutterColor
 | 
			
		||||
 */
 | 
			
		||||
#define CLUTTER_COLOR_INIT(r,g,b,a)     { (r), (g), (b), (a) }
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GType clutter_color_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterColor *clutter_color_new         (guint8              red,
 | 
			
		||||
                                         guint8              green,
 | 
			
		||||
                                         guint8              blue,
 | 
			
		||||
                                         guint8              alpha);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
ClutterColor *clutter_color_alloc       (void);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_12
 | 
			
		||||
ClutterColor *clutter_color_init        (ClutterColor       *color,
 | 
			
		||||
                                         guint8              red,
 | 
			
		||||
                                         guint8              green,
 | 
			
		||||
                                         guint8              blue,
 | 
			
		||||
                                         guint8              alpha);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterColor *clutter_color_copy        (const ClutterColor *color);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_free        (ClutterColor       *color);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_add         (const ClutterColor *a,
 | 
			
		||||
                                         const ClutterColor *b,
 | 
			
		||||
                                         ClutterColor       *result);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_subtract    (const ClutterColor *a,
 | 
			
		||||
                                         const ClutterColor *b,
 | 
			
		||||
                                         ClutterColor       *result);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_lighten     (const ClutterColor *color,
 | 
			
		||||
                                         ClutterColor       *result);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_darken      (const ClutterColor *color,
 | 
			
		||||
                                         ClutterColor       *result);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_shade       (const ClutterColor *color,
 | 
			
		||||
                                         gdouble             factor,
 | 
			
		||||
                                         ClutterColor       *result);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gchar *       clutter_color_to_string   (const ClutterColor *color);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
gboolean      clutter_color_from_string (ClutterColor       *color,
 | 
			
		||||
                                         const gchar        *str);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_to_hls      (const ClutterColor *color,
 | 
			
		||||
                                         gfloat             *hue,
 | 
			
		||||
					 gfloat             *luminance,
 | 
			
		||||
					 gfloat             *saturation);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_from_hls    (ClutterColor       *color,
 | 
			
		||||
                                         gfloat              hue,
 | 
			
		||||
                                         gfloat              luminance,
 | 
			
		||||
                                         gfloat              saturation);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
guint32       clutter_color_to_pixel    (const ClutterColor *color);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void          clutter_color_from_pixel  (ClutterColor       *color,
 | 
			
		||||
                                         guint32             pixel);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
guint         clutter_color_hash        (gconstpointer       v);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
gboolean      clutter_color_equal       (gconstpointer       v1,
 | 
			
		||||
                                         gconstpointer       v2);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_6
 | 
			
		||||
void          clutter_color_interpolate (const ClutterColor *initial,
 | 
			
		||||
                                         const ClutterColor *final,
 | 
			
		||||
                                         gdouble             progress,
 | 
			
		||||
@@ -177,22 +177,22 @@ struct _ClutterParamSpecColor
 | 
			
		||||
  ClutterColor *default_value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
void                    clutter_value_set_color         (GValue             *value,
 | 
			
		||||
                                                         const ClutterColor *color);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
const ClutterColor *    clutter_value_get_color         (const GValue       *value);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
GType clutter_param_color_get_type (void) G_GNUC_CONST;
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_0
 | 
			
		||||
GParamSpec *    clutter_param_spec_color        (const gchar        *name,
 | 
			
		||||
                                                 const gchar        *nick,
 | 
			
		||||
                                                 const gchar        *blurb,
 | 
			
		||||
                                                 const ClutterColor *default_value,
 | 
			
		||||
                                                 GParamFlags         flags);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_6
 | 
			
		||||
const ClutterColor *clutter_color_get_static (ClutterStaticColor color);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,9 @@
 | 
			
		||||
#define CLUTTER_IS_COLORIZE_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_COLORIZE_EFFECT))
 | 
			
		||||
#define CLUTTER_COLORIZE_EFFECT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_COLORIZE_EFFECT, ClutterColorizeEffectClass))
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
 | 
			
		||||
 | 
			
		||||
@@ -105,8 +107,7 @@ G_DEFINE_TYPE (ClutterColorizeEffect,
 | 
			
		||||
               CLUTTER_TYPE_OFFSCREEN_EFFECT);
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
clutter_colorize_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
                                   ClutterPaintContext *paint_context)
 | 
			
		||||
clutter_colorize_effect_pre_paint (ClutterEffect *effect)
 | 
			
		||||
{
 | 
			
		||||
  ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect);
 | 
			
		||||
  ClutterEffectClass *parent_class;
 | 
			
		||||
@@ -127,7 +128,7 @@ clutter_colorize_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  parent_class = CLUTTER_EFFECT_CLASS (clutter_colorize_effect_parent_class);
 | 
			
		||||
  if (parent_class->pre_paint (effect, paint_context))
 | 
			
		||||
  if (parent_class->pre_paint (effect))
 | 
			
		||||
    {
 | 
			
		||||
      ClutterOffscreenEffect *offscreen_effect =
 | 
			
		||||
        CLUTTER_OFFSCREEN_EFFECT (effect);
 | 
			
		||||
@@ -146,12 +147,9 @@ clutter_colorize_effect_pre_paint (ClutterEffect       *effect,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_colorize_effect_paint_target (ClutterOffscreenEffect *effect,
 | 
			
		||||
                                      ClutterPaintContext    *paint_context)
 | 
			
		||||
clutter_colorize_effect_paint_target (ClutterOffscreenEffect *effect)
 | 
			
		||||
{
 | 
			
		||||
  ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect);
 | 
			
		||||
  CoglFramebuffer *framebuffer =
 | 
			
		||||
    clutter_paint_context_get_framebuffer (paint_context);
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  guint8 paint_opacity;
 | 
			
		||||
 | 
			
		||||
@@ -163,11 +161,11 @@ clutter_colorize_effect_paint_target (ClutterOffscreenEffect *effect,
 | 
			
		||||
                              paint_opacity,
 | 
			
		||||
                              paint_opacity,
 | 
			
		||||
                              paint_opacity);
 | 
			
		||||
  cogl_push_source (self->pipeline);
 | 
			
		||||
 | 
			
		||||
  cogl_framebuffer_draw_rectangle (framebuffer,
 | 
			
		||||
                                   self->pipeline,
 | 
			
		||||
                                   0, 0,
 | 
			
		||||
                                   self->tex_width, self->tex_height);
 | 
			
		||||
  cogl_rectangle (0, 0, self->tex_width, self->tex_height);
 | 
			
		||||
 | 
			
		||||
  cogl_pop_source ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -296,7 +294,9 @@ clutter_colorize_effect_init (ClutterColorizeEffect *self)
 | 
			
		||||
      cogl_pipeline_add_snippet (klass->base_pipeline, snippet);
 | 
			
		||||
      cogl_object_unref (snippet);
 | 
			
		||||
 | 
			
		||||
      cogl_pipeline_set_layer_null_texture (klass->base_pipeline, 0);
 | 
			
		||||
      cogl_pipeline_set_layer_null_texture (klass->base_pipeline,
 | 
			
		||||
                                            0, /* layer number */
 | 
			
		||||
                                            COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
 
 | 
			
		||||
@@ -49,16 +49,16 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _ClutterColorizeEffect           ClutterColorizeEffect;
 | 
			
		||||
typedef struct _ClutterColorizeEffectClass      ClutterColorizeEffectClass;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_colorize_effect_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterEffect *clutter_colorize_effect_new      (const ClutterColor *tint);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_colorize_effect_set_tint (ClutterColorizeEffect *effect,
 | 
			
		||||
                                                 const ClutterColor    *tint);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void           clutter_colorize_effect_get_tint (ClutterColorizeEffect *effect,
 | 
			
		||||
                                                 ClutterColor          *tint);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,13 +9,7 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#mesondefine CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT
 | 
			
		||||
#mesondefine CLUTTER_WINDOWING_X11
 | 
			
		||||
#mesondefine CLUTTER_INPUT_X11
 | 
			
		||||
#mesondefine CLUTTER_WINDOWING_GLX
 | 
			
		||||
#mesondefine CLUTTER_WINDOWING_EGL
 | 
			
		||||
#mesondefine CLUTTER_INPUT_EVDEV
 | 
			
		||||
#mesondefine CLUTTER_INPUT_NULL
 | 
			
		||||
@CLUTTER_CONFIG_DEFINES@
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,13 @@ gboolean clutter_constraint_update_allocation (ClutterConstraint *constraint,
 | 
			
		||||
                                               ClutterActor      *actor,
 | 
			
		||||
                                               ClutterActorBox   *allocation);
 | 
			
		||||
 | 
			
		||||
void clutter_constraint_update_preferred_size (ClutterConstraint  *constraint,
 | 
			
		||||
                                               ClutterActor       *actor,
 | 
			
		||||
                                               ClutterOrientation  direction,
 | 
			
		||||
                                               float               for_size,
 | 
			
		||||
                                               float              *minimum_size,
 | 
			
		||||
                                               float              *natural_size);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __CLUTTER_CONSTRAINT_PRIVATE_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@
 | 
			
		||||
 * Constraints provide a way to build user interfaces by using
 | 
			
		||||
 * relations between #ClutterActors, without explicit fixed
 | 
			
		||||
 * positioning and sizing, similarly to how fluid layout managers like
 | 
			
		||||
 * #ClutterBoxLayout lay out their children.
 | 
			
		||||
 * #ClutterBoxLayout and #ClutterTableLayout lay out their children.
 | 
			
		||||
 *
 | 
			
		||||
 * Constraints are attached to a #ClutterActor, and are available
 | 
			
		||||
 * for inspection using clutter_actor_get_constraints().
 | 
			
		||||
@@ -128,7 +128,9 @@
 | 
			
		||||
 * can be recovered at any point using clutter_actor_meta_get_actor().
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
@@ -160,26 +162,28 @@ constraint_update_preferred_size (ClutterConstraint  *constraint,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_constraint_set_enabled (ClutterActorMeta *meta,
 | 
			
		||||
                                gboolean          is_enabled)
 | 
			
		||||
clutter_constraint_notify (GObject    *gobject,
 | 
			
		||||
                           GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaClass *parent_class =
 | 
			
		||||
    CLUTTER_ACTOR_META_CLASS (clutter_constraint_parent_class);
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  if (strcmp (pspec->name, "enabled") == 0)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActorMeta *meta = CLUTTER_ACTOR_META (gobject);
 | 
			
		||||
      ClutterActor *actor = clutter_actor_meta_get_actor (meta);
 | 
			
		||||
 | 
			
		||||
  actor = clutter_actor_meta_get_actor (meta);
 | 
			
		||||
  if (actor)
 | 
			
		||||
    clutter_actor_queue_relayout (actor);
 | 
			
		||||
      if (actor != NULL)
 | 
			
		||||
        clutter_actor_queue_relayout (actor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  parent_class->set_enabled (meta, is_enabled);
 | 
			
		||||
  if (G_OBJECT_CLASS (clutter_constraint_parent_class)->notify != NULL)
 | 
			
		||||
    G_OBJECT_CLASS (clutter_constraint_parent_class)->notify (gobject, pspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_constraint_class_init (ClutterConstraintClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActorMetaClass *actor_meta_class = CLUTTER_ACTOR_META_CLASS (klass);
 | 
			
		||||
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  actor_meta_class->set_enabled = clutter_constraint_set_enabled;
 | 
			
		||||
  gobject_class->notify = clutter_constraint_notify;
 | 
			
		||||
 | 
			
		||||
  klass->update_allocation = constraint_update_allocation;
 | 
			
		||||
  klass->update_preferred_size = constraint_update_preferred_size;
 | 
			
		||||
@@ -220,17 +224,6 @@ clutter_constraint_update_allocation (ClutterConstraint *constraint,
 | 
			
		||||
  return !clutter_actor_box_equal (allocation, &old_alloc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_constraint_update_preferred_size:
 | 
			
		||||
 * @constraint: a #ClutterConstraint
 | 
			
		||||
 * @actor: a #ClutterActor
 | 
			
		||||
 * @direction: a #ClutterOrientation
 | 
			
		||||
 * @for_size: the size in the opposite direction
 | 
			
		||||
 * @minimum_size: (inout): the minimum size to modify
 | 
			
		||||
 * @natural_size: (inout): the natural size to modify
 | 
			
		||||
 *
 | 
			
		||||
 * Asks the @constraint to update the size request of a #ClutterActor.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_constraint_update_preferred_size (ClutterConstraint  *constraint,
 | 
			
		||||
                                          ClutterActor       *actor,
 | 
			
		||||
 
 | 
			
		||||
@@ -96,40 +96,32 @@ struct _ClutterConstraintClass
 | 
			
		||||
  void (* _clutter_constraint7) (void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GType clutter_constraint_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_constraint_update_preferred_size (ClutterConstraint  *constraint,
 | 
			
		||||
                                               ClutterActor       *actor,
 | 
			
		||||
                                               ClutterOrientation  direction,
 | 
			
		||||
                                               float               for_size,
 | 
			
		||||
                                               float              *minimum_size,
 | 
			
		||||
                                               float              *natural_size);
 | 
			
		||||
 | 
			
		||||
/* ClutterActor API */
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_actor_add_constraint            (ClutterActor      *self,
 | 
			
		||||
                                                            ClutterConstraint *constraint);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_actor_add_constraint_with_name  (ClutterActor      *self,
 | 
			
		||||
                                                            const gchar       *name,
 | 
			
		||||
                                                            ClutterConstraint *constraint);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_actor_remove_constraint         (ClutterActor      *self,
 | 
			
		||||
                                                            ClutterConstraint *constraint);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_actor_remove_constraint_by_name (ClutterActor      *self,
 | 
			
		||||
                                                            const gchar       *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
GList *            clutter_actor_get_constraints           (ClutterActor      *self);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
ClutterConstraint *clutter_actor_get_constraint            (ClutterActor      *self,
 | 
			
		||||
                                                            const gchar       *name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_4
 | 
			
		||||
void               clutter_actor_clear_constraints         (ClutterActor      *self);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_1_10
 | 
			
		||||
gboolean           clutter_actor_has_constraints           (ClutterActor      *self);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,9 @@
 | 
			
		||||
 * Author: Emmanuele Bassi <ebassi@openedhand.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
@@ -37,7 +39,6 @@
 | 
			
		||||
 | 
			
		||||
#include "clutter-actor-private.h"
 | 
			
		||||
#include "clutter-child-meta.h"
 | 
			
		||||
#include "clutter-container-private.h"
 | 
			
		||||
#include "clutter-debug.h"
 | 
			
		||||
#include "clutter-main.h"
 | 
			
		||||
#include "clutter-marshal.h"
 | 
			
		||||
@@ -119,6 +120,37 @@ container_real_remove (ClutterContainer *container,
 | 
			
		||||
  clutter_actor_remove_child (CLUTTER_ACTOR (container), actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  ClutterCallback callback;
 | 
			
		||||
  gpointer data;
 | 
			
		||||
} ForeachClosure;
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
foreach_cb (ClutterActor *actor,
 | 
			
		||||
            gpointer      data)
 | 
			
		||||
{
 | 
			
		||||
  ForeachClosure *clos = data;
 | 
			
		||||
 | 
			
		||||
  clos->callback (actor, clos->data);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
container_real_foreach (ClutterContainer *container,
 | 
			
		||||
                        ClutterCallback   callback,
 | 
			
		||||
                        gpointer          user_data)
 | 
			
		||||
{
 | 
			
		||||
  ForeachClosure clos;
 | 
			
		||||
 | 
			
		||||
  clos.callback = callback;
 | 
			
		||||
  clos.data = user_data;
 | 
			
		||||
 | 
			
		||||
  _clutter_actor_foreach_child (CLUTTER_ACTOR (container),
 | 
			
		||||
                                foreach_cb,
 | 
			
		||||
                                &clos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
container_real_raise (ClutterContainer *container,
 | 
			
		||||
                      ClutterActor     *child,
 | 
			
		||||
@@ -167,7 +199,8 @@ clutter_container_default_init (ClutterContainerInterface *iface)
 | 
			
		||||
                  iface_type,
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterContainerIface, actor_added),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__OBJECT,
 | 
			
		||||
                  G_TYPE_NONE, 1,
 | 
			
		||||
                  CLUTTER_TYPE_ACTOR);
 | 
			
		||||
  /**
 | 
			
		||||
@@ -185,7 +218,8 @@ clutter_container_default_init (ClutterContainerInterface *iface)
 | 
			
		||||
                  iface_type,
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterContainerIface, actor_removed),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__OBJECT,
 | 
			
		||||
                  G_TYPE_NONE, 1,
 | 
			
		||||
                  CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
@@ -213,6 +247,7 @@ clutter_container_default_init (ClutterContainerInterface *iface)
 | 
			
		||||
 | 
			
		||||
  iface->add = container_real_add;
 | 
			
		||||
  iface->remove = container_real_remove;
 | 
			
		||||
  iface->foreach = container_real_foreach;
 | 
			
		||||
  iface->raise = container_real_raise;
 | 
			
		||||
  iface->lower = container_real_lower;
 | 
			
		||||
  iface->sort_depth_order = container_real_sort_depth_order;
 | 
			
		||||
@@ -385,6 +420,33 @@ clutter_container_add_actor (ClutterContainer *container,
 | 
			
		||||
  container_add_actor (container, actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_container_add_valist: (skip)
 | 
			
		||||
 * @container: a #ClutterContainer
 | 
			
		||||
 * @first_actor: the first #ClutterActor to add
 | 
			
		||||
 * @var_args: list of actors to add, followed by %NULL
 | 
			
		||||
 *
 | 
			
		||||
 * Alternative va_list version of clutter_container_add().
 | 
			
		||||
 *
 | 
			
		||||
 * This function will call #ClutterContainerIface.add(), which is a
 | 
			
		||||
 * deprecated virtual function. The default implementation will
 | 
			
		||||
 * call clutter_actor_add_child().
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.10: Use clutter_actor_add_child() instead.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_container_add_valist (ClutterContainer *container,
 | 
			
		||||
                              ClutterActor     *first_actor,
 | 
			
		||||
                              va_list           var_args)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTAINER (container));
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR (first_actor));
 | 
			
		||||
 | 
			
		||||
  container_add_valist (container, first_actor, var_args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_container_remove: (skip)
 | 
			
		||||
 * @container: a #ClutterContainer
 | 
			
		||||
@@ -448,6 +510,42 @@ clutter_container_remove_actor (ClutterContainer *container,
 | 
			
		||||
  container_remove_actor (container, actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_container_remove_valist: (skip)
 | 
			
		||||
 * @container: a #ClutterContainer
 | 
			
		||||
 * @first_actor: the first #ClutterActor to add
 | 
			
		||||
 * @var_args: list of actors to remove, followed by %NULL
 | 
			
		||||
 *
 | 
			
		||||
 * Alternative va_list version of clutter_container_remove().
 | 
			
		||||
 *
 | 
			
		||||
 * This function will call #ClutterContainerIface.remove(), which is a
 | 
			
		||||
 * deprecated virtual function. The default implementation will call
 | 
			
		||||
 * clutter_actor_remove_child().
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.10: Use clutter_actor_remove_child() instead.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_container_remove_valist (ClutterContainer *container,
 | 
			
		||||
                                 ClutterActor     *first_actor,
 | 
			
		||||
                                 va_list           var_args)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTAINER (container));
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR (first_actor));
 | 
			
		||||
 | 
			
		||||
  container_remove_valist (container, first_actor, var_args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
get_children_cb (ClutterActor *child,
 | 
			
		||||
                 gpointer      data)
 | 
			
		||||
{
 | 
			
		||||
  GList **children = data;
 | 
			
		||||
 | 
			
		||||
  *children = g_list_prepend (*children, child);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_container_get_children:
 | 
			
		||||
 * @container: a #ClutterContainer
 | 
			
		||||
@@ -465,9 +563,108 @@ clutter_container_remove_actor (ClutterContainer *container,
 | 
			
		||||
GList *
 | 
			
		||||
clutter_container_get_children (ClutterContainer *container)
 | 
			
		||||
{
 | 
			
		||||
  GList *retval;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_CONTAINER (container), NULL);
 | 
			
		||||
 | 
			
		||||
  return clutter_actor_get_children (CLUTTER_ACTOR (container));
 | 
			
		||||
  retval = NULL;
 | 
			
		||||
  clutter_container_foreach (container, get_children_cb, &retval);
 | 
			
		||||
 | 
			
		||||
  return g_list_reverse (retval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_container_foreach:
 | 
			
		||||
 * @container: a #ClutterContainer
 | 
			
		||||
 * @callback: (scope call): a function to be called for each child
 | 
			
		||||
 * @user_data: data to be passed to the function, or %NULL
 | 
			
		||||
 *
 | 
			
		||||
 * Calls @callback for each child of @container that was added
 | 
			
		||||
 * by the application (with clutter_container_add_actor()). Does
 | 
			
		||||
 * not iterate over "internal" children that are part of the
 | 
			
		||||
 * container's own implementation, if any.
 | 
			
		||||
 *
 | 
			
		||||
 * This function calls the #ClutterContainerIface.foreach()
 | 
			
		||||
 * virtual function, which has been deprecated.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 0.4
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.10: Use clutter_actor_get_first_child() or
 | 
			
		||||
 *   clutter_actor_get_last_child() to retrieve the beginning of
 | 
			
		||||
 *   the list of children, and clutter_actor_get_next_sibling()
 | 
			
		||||
 *   and clutter_actor_get_previous_sibling() to iterate over it;
 | 
			
		||||
 *   alternatively, use the #ClutterActorIter API.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_container_foreach (ClutterContainer *container,
 | 
			
		||||
                           ClutterCallback   callback,
 | 
			
		||||
                           gpointer          user_data)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTAINER (container));
 | 
			
		||||
  g_return_if_fail (callback != NULL);
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_ENABLE_DEBUG
 | 
			
		||||
  if (G_UNLIKELY (_clutter_diagnostic_enabled ()))
 | 
			
		||||
    {
 | 
			
		||||
      ClutterContainerIface *iface = CLUTTER_CONTAINER_GET_IFACE (container);
 | 
			
		||||
 | 
			
		||||
      if (iface->foreach != container_real_foreach)
 | 
			
		||||
        _clutter_diagnostic_message ("The ClutterContainer::foreach() "
 | 
			
		||||
                                     "virtual function has been deprecated "
 | 
			
		||||
                                     "and it should not be overridden by "
 | 
			
		||||
                                     "newly written code");
 | 
			
		||||
    }
 | 
			
		||||
#endif /* CLUTTER_ENABLE_DEBUG */
 | 
			
		||||
 | 
			
		||||
  CLUTTER_CONTAINER_GET_IFACE (container)->foreach (container,
 | 
			
		||||
                                                    callback,
 | 
			
		||||
                                                    user_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_container_foreach_with_internals:
 | 
			
		||||
 * @container: a #ClutterContainer
 | 
			
		||||
 * @callback: (scope call): a function to be called for each child
 | 
			
		||||
 * @user_data: data to be passed to the function, or %NULL
 | 
			
		||||
 *
 | 
			
		||||
 * Calls @callback for each child of @container, including "internal"
 | 
			
		||||
 * children built in to the container itself that were never added
 | 
			
		||||
 * by the application.
 | 
			
		||||
 *
 | 
			
		||||
 * This function calls the #ClutterContainerIface.foreach_with_internals()
 | 
			
		||||
 * virtual function, which has been deprecated.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.0
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.10: See clutter_container_foreach().
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_container_foreach_with_internals (ClutterContainer *container,
 | 
			
		||||
                                          ClutterCallback   callback,
 | 
			
		||||
                                          gpointer          user_data)
 | 
			
		||||
{
 | 
			
		||||
  ClutterContainerIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTAINER (container));
 | 
			
		||||
  g_return_if_fail (callback != NULL);
 | 
			
		||||
 | 
			
		||||
  iface = CLUTTER_CONTAINER_GET_IFACE (container);
 | 
			
		||||
 | 
			
		||||
#ifdef CLUTTER_ENABLE_DEBUG
 | 
			
		||||
  if (G_UNLIKELY (_clutter_diagnostic_enabled ()))
 | 
			
		||||
    {
 | 
			
		||||
      if (iface->foreach_with_internals != NULL)
 | 
			
		||||
        _clutter_diagnostic_message ("The ClutterContainer::foreach_with_internals() "
 | 
			
		||||
                                     "virtual function has been deprecated "
 | 
			
		||||
                                     "and it should not be overridden by "
 | 
			
		||||
                                     "newly written code");
 | 
			
		||||
    }
 | 
			
		||||
#endif /* CLUTTER_ENABLE_DEBUG */
 | 
			
		||||
 | 
			
		||||
  if (iface->foreach_with_internals != NULL)
 | 
			
		||||
    iface->foreach_with_internals (container, callback, user_data);
 | 
			
		||||
  else
 | 
			
		||||
    iface->foreach (container, callback, user_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -1251,23 +1448,3 @@ clutter_container_child_notify (ClutterContainer *container,
 | 
			
		||||
                                                         child,
 | 
			
		||||
                                                         pspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_container_emit_actor_added (ClutterContainer *container,
 | 
			
		||||
                                     ClutterActor     *actor)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTAINER (container));
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR (actor));
 | 
			
		||||
 | 
			
		||||
  g_signal_emit (container, container_signals[ACTOR_ADDED], 0, actor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_container_emit_actor_removed (ClutterContainer *container,
 | 
			
		||||
                                       ClutterActor     *actor)
 | 
			
		||||
{
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTAINER (container));
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_ACTOR (actor));
 | 
			
		||||
 | 
			
		||||
  g_signal_emit (container, container_signals[ACTOR_REMOVED], 0, actor);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,14 @@ typedef struct _ClutterContainerIface   ClutterContainerIface;
 | 
			
		||||
 *   function is deprecated, and it should not be overridden.
 | 
			
		||||
 * @remove: virtual function for removing an actor from the container. This
 | 
			
		||||
 *   virtual function is deprecated, and it should not be overridden.
 | 
			
		||||
 * @foreach: virtual function for iterating over the container's children.
 | 
			
		||||
 *   This virtual function is deprecated, and it should not be overridden.
 | 
			
		||||
 * @foreach_with_internals: virtual functions for iterating over the
 | 
			
		||||
 *   container's children, both added using the #ClutterContainer API
 | 
			
		||||
 *   and internal children. The implementation of this virtual function
 | 
			
		||||
 *   is required only if the #ClutterContainer implementation has
 | 
			
		||||
 *   internal children. This virtual function is deprecated, and it should
 | 
			
		||||
 *   not be overridden.
 | 
			
		||||
 * @raise: virtual function for raising a child. This virtual function is
 | 
			
		||||
 *   deprecated and it should not be overridden.
 | 
			
		||||
 * @lower: virtual function for lowering a child. This virtual function is
 | 
			
		||||
@@ -80,7 +88,7 @@ typedef struct _ClutterContainerIface   ClutterContainerIface;
 | 
			
		||||
 * @actor_removed: class handler for #ClutterContainer::actor-removed
 | 
			
		||||
 * @child_notify: class handler for #ClutterContainer::child-notify
 | 
			
		||||
 *
 | 
			
		||||
 * Base interface for container actors. The @add and @remove
 | 
			
		||||
 * Base interface for container actors. The @add, @remove and @foreach
 | 
			
		||||
 * virtual functions must be provided by any implementation; the other
 | 
			
		||||
 * virtual functions are optional.
 | 
			
		||||
 *
 | 
			
		||||
@@ -96,6 +104,13 @@ struct _ClutterContainerIface
 | 
			
		||||
                             ClutterActor     *actor);
 | 
			
		||||
  void (* remove)           (ClutterContainer *container,
 | 
			
		||||
                             ClutterActor     *actor);
 | 
			
		||||
  void (* foreach)          (ClutterContainer *container,
 | 
			
		||||
                             ClutterCallback   callback,
 | 
			
		||||
                             gpointer          user_data);
 | 
			
		||||
 | 
			
		||||
  void (* foreach_with_internals) (ClutterContainer *container,
 | 
			
		||||
                                   ClutterCallback   callback,
 | 
			
		||||
                                   gpointer          user_data);
 | 
			
		||||
 | 
			
		||||
  /* child stacking */
 | 
			
		||||
  void (* raise)            (ClutterContainer *container,
 | 
			
		||||
@@ -126,52 +141,52 @@ struct _ClutterContainerIface
 | 
			
		||||
                          GParamSpec       *pspec);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GType clutter_container_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterActor *          clutter_container_find_child_by_name            (ClutterContainer *container,
 | 
			
		||||
                                                                         const gchar      *child_name);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GParamSpec *            clutter_container_class_find_child_property     (GObjectClass     *klass,
 | 
			
		||||
                                                                         const gchar      *property_name);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
GParamSpec **           clutter_container_class_list_child_properties   (GObjectClass     *klass,
 | 
			
		||||
                                                                         guint            *n_properties);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_create_child_meta             (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *actor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_destroy_child_meta            (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *actor);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterChildMeta *      clutter_container_get_child_meta                (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *actor);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_child_set_property            (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *child,
 | 
			
		||||
                                                                         const gchar      * property,
 | 
			
		||||
                                                                         const GValue     *value);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_child_get_property            (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *child,
 | 
			
		||||
                                                                         const gchar      *property,
 | 
			
		||||
                                                                         GValue           *value);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_child_set                     (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *actor,
 | 
			
		||||
                                                                         const gchar      *first_prop,
 | 
			
		||||
                                                                         ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_child_get                     (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *actor,
 | 
			
		||||
                                                                         const gchar      *first_prop,
 | 
			
		||||
                                                                         ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
void                    clutter_container_child_notify                  (ClutterContainer *container,
 | 
			
		||||
                                                                         ClutterActor     *child,
 | 
			
		||||
                                                                         GParamSpec       *pspec);
 | 
			
		||||
 
 | 
			
		||||
@@ -34,10 +34,9 @@ void            _clutter_content_attached               (ClutterContent   *conte
 | 
			
		||||
void            _clutter_content_detached               (ClutterContent   *content,
 | 
			
		||||
                                                         ClutterActor     *actor);
 | 
			
		||||
 | 
			
		||||
void            _clutter_content_paint_content          (ClutterContent      *content,
 | 
			
		||||
                                                         ClutterActor        *actor,
 | 
			
		||||
                                                         ClutterPaintNode    *node,
 | 
			
		||||
                                                         ClutterPaintContext *paint_context);
 | 
			
		||||
void            _clutter_content_paint_content          (ClutterContent   *content,
 | 
			
		||||
                                                         ClutterActor     *actor,
 | 
			
		||||
                                                         ClutterPaintNode *node);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,15 +36,18 @@
 | 
			
		||||
 * #ClutterContent is available since Clutter 1.10.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "clutter-build-config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "clutter-actor-private.h"
 | 
			
		||||
#include "clutter-content-private.h"
 | 
			
		||||
 | 
			
		||||
#include "clutter-debug.h"
 | 
			
		||||
#include "clutter-marshal.h"
 | 
			
		||||
#include "clutter-private.h"
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterContentIface     ClutterContentInterface;
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  ATTACHED,
 | 
			
		||||
@@ -91,15 +94,9 @@ clutter_content_real_invalidate (ClutterContent *content)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_content_real_invalidate_size (ClutterContent *content)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_content_real_paint_content (ClutterContent      *content,
 | 
			
		||||
                                    ClutterActor        *actor,
 | 
			
		||||
                                    ClutterPaintNode    *context,
 | 
			
		||||
                                    ClutterPaintContext *paint_context)
 | 
			
		||||
clutter_content_real_paint_content (ClutterContent   *content,
 | 
			
		||||
                                    ClutterActor     *actor,
 | 
			
		||||
                                    ClutterPaintNode *context)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -113,7 +110,6 @@ clutter_content_default_init (ClutterContentInterface *iface)
 | 
			
		||||
  iface->attached = clutter_content_real_attached;
 | 
			
		||||
  iface->detached = clutter_content_real_detached;
 | 
			
		||||
  iface->invalidate = clutter_content_real_invalidate;
 | 
			
		||||
  iface->invalidate_size = clutter_content_real_invalidate_size;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterContent::attached:
 | 
			
		||||
@@ -129,8 +125,9 @@ clutter_content_default_init (ClutterContentInterface *iface)
 | 
			
		||||
    g_signal_new (I_("attached"),
 | 
			
		||||
                  G_TYPE_FROM_INTERFACE (iface),
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterContentInterface, attached),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterContentIface, attached),
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__OBJECT,
 | 
			
		||||
                  G_TYPE_NONE, 1,
 | 
			
		||||
                  CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
@@ -148,8 +145,9 @@ clutter_content_default_init (ClutterContentInterface *iface)
 | 
			
		||||
    g_signal_new (I_("detached"),
 | 
			
		||||
                  G_TYPE_FROM_INTERFACE (iface),
 | 
			
		||||
                  G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterContentInterface, detached),
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  G_STRUCT_OFFSET (ClutterContentIface, detached),
 | 
			
		||||
                  NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__OBJECT,
 | 
			
		||||
                  G_TYPE_NONE, 1,
 | 
			
		||||
                  CLUTTER_TYPE_ACTOR);
 | 
			
		||||
}
 | 
			
		||||
@@ -192,45 +190,6 @@ clutter_content_invalidate (ClutterContent *content)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_content_invalidate_size:
 | 
			
		||||
 * @content: a #ClutterContent
 | 
			
		||||
 *
 | 
			
		||||
 * Signals that @content's size changed. Attached actors with request mode
 | 
			
		||||
 * set to %CLUTTER_REQUEST_CONTENT_SIZE will have a relayout queued.
 | 
			
		||||
 *
 | 
			
		||||
 * Attached actors with other request modes are not redrawn. To redraw them
 | 
			
		||||
 * too, use clutter_content_invalidate().
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_content_invalidate_size (ClutterContent *content)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  GHashTable *actors;
 | 
			
		||||
  GHashTableIter iter;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CONTENT (content));
 | 
			
		||||
 | 
			
		||||
  CLUTTER_CONTENT_GET_IFACE (content)->invalidate_size (content);
 | 
			
		||||
 | 
			
		||||
  actors = g_object_get_qdata (G_OBJECT (content), quark_content_actors);
 | 
			
		||||
  if (actors == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_hash_table_iter_init (&iter, actors);
 | 
			
		||||
  while (g_hash_table_iter_next (&iter, (gpointer *) &actor, NULL))
 | 
			
		||||
    {
 | 
			
		||||
      ClutterRequestMode request_mode;
 | 
			
		||||
 | 
			
		||||
      g_assert (actor != NULL);
 | 
			
		||||
 | 
			
		||||
      request_mode = clutter_actor_get_request_mode (actor);
 | 
			
		||||
 | 
			
		||||
      if (request_mode == CLUTTER_REQUEST_CONTENT_SIZE)
 | 
			
		||||
        _clutter_actor_queue_only_relayout (actor);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*< private >
 | 
			
		||||
 * _clutter_content_attached:
 | 
			
		||||
 * @content: a #ClutterContent
 | 
			
		||||
@@ -242,7 +201,7 @@ clutter_content_invalidate_size (ClutterContent *content)
 | 
			
		||||
 * is associated to a #ClutterContent, to set up a backpointer from
 | 
			
		||||
 * the @content to the @actor.
 | 
			
		||||
 *
 | 
			
		||||
 * This function will invoke the #ClutterContentInterface.attached() virtual
 | 
			
		||||
 * This function will invoke the #ClutterContentIface.attached() virtual
 | 
			
		||||
 * function.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
@@ -276,7 +235,7 @@ _clutter_content_attached (ClutterContent *content,
 | 
			
		||||
 * This function should be used internally every time a #ClutterActor
 | 
			
		||||
 * removes the association with a #ClutterContent.
 | 
			
		||||
 *
 | 
			
		||||
 * This function will invoke the #ClutterContentInterface.detached() virtual
 | 
			
		||||
 * This function will invoke the #ClutterContentIface.detached() virtual
 | 
			
		||||
 * function.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
@@ -301,22 +260,19 @@ _clutter_content_detached (ClutterContent *content,
 | 
			
		||||
 * _clutter_content_paint_content:
 | 
			
		||||
 * @content: a #ClutterContent
 | 
			
		||||
 * @actor: a #ClutterActor
 | 
			
		||||
 * @node: a #ClutterPaintNode
 | 
			
		||||
 * @paint_context: a #ClutterPaintContext
 | 
			
		||||
 * @context: a #ClutterPaintNode
 | 
			
		||||
 *
 | 
			
		||||
 * Creates the render tree for the @content and @actor.
 | 
			
		||||
 *
 | 
			
		||||
 * This function will invoke the #ClutterContentInterface.paint_content()
 | 
			
		||||
 * This function will invoke the #ClutterContentIface.paint_content()
 | 
			
		||||
 * virtual function.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
_clutter_content_paint_content (ClutterContent      *content,
 | 
			
		||||
                                ClutterActor        *actor,
 | 
			
		||||
                                ClutterPaintNode    *node,
 | 
			
		||||
                                ClutterPaintContext *paint_context)
 | 
			
		||||
_clutter_content_paint_content (ClutterContent   *content,
 | 
			
		||||
                                ClutterActor     *actor,
 | 
			
		||||
                                ClutterPaintNode *node)
 | 
			
		||||
{
 | 
			
		||||
  CLUTTER_CONTENT_GET_IFACE (content)->paint_content (content, actor, node,
 | 
			
		||||
                                                      paint_context);
 | 
			
		||||
  CLUTTER_CONTENT_GET_IFACE (content)->paint_content (content, actor, node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user