Compare commits
	
		
			1 Commits
		
	
	
		
			wip/cherge
			...
			wip/carlos
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 18c85c9ffb | 
| @@ -1,4 +1,4 @@ | |||||||
| image: registry.gitlab.gnome.org/gnome/mutter/master:v3 | image: registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||||
|  |  | ||||||
| stages: | stages: | ||||||
|  - review |  - review | ||||||
| @@ -28,10 +28,10 @@ build-mutter: | |||||||
|     - merge_requests |     - merge_requests | ||||||
|     - /^.*$/ |     - /^.*$/ | ||||||
|  |  | ||||||
| build-without-native-backend-and-wayland: | build-without-native-backend: | ||||||
|   stage: build |   stage: build | ||||||
|   script: |   script: | ||||||
|     - meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false -Dwayland=false -Dcore_tests=false --werror --prefix /usr |     - meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false --werror --prefix /usr | ||||||
|     - ninja -C build |     - ninja -C build | ||||||
|     - ninja -C build install |     - ninja -C build install | ||||||
|   artifacts: |   artifacts: | ||||||
|   | |||||||
| @@ -1,32 +1,40 @@ | |||||||
| # Rebuild and push with | # Rebuild and push with | ||||||
| # | # | ||||||
| #     cd .gitlab-ci/ | #     cd .gitlab-ci/ | ||||||
| #     podman build --format docker --no-cache -t registry.gitlab.gnome.org/gnome/mutter/master:v3 . | #     docker build --no-cache -t registry.gitlab.gnome.org/gnome/mutter/master:v2 . | ||||||
| #     podman push registry.gitlab.gnome.org/gnome/mutter/master:v3 | #     docker push registry.gitlab.gnome.org/gnome/mutter/master:v2 | ||||||
| # | # | ||||||
|  |  | ||||||
| FROM fedora:31 | FROM fedora:30 | ||||||
|  |  | ||||||
| RUN dnf -y update && dnf -y upgrade && \ | RUN dnf -y update && dnf -y upgrade && \ | ||||||
|     dnf install -y 'dnf-command(builddep)' && \ |     dnf install -y 'dnf-command(builddep)' && \ | ||||||
|     dnf install -y 'dnf-command(copr)' && \ |     dnf install -y 'dnf-command(copr)' && \ | ||||||
|     dnf copr enable -y fmuellner/gnome-shell-ci && \ |     dnf copr enable -y fmuellner/gnome-shell-ci && \ | ||||||
|     dnf copr enable -y jadahl/mutter-ci && \ |     dnf copr enable -y jadahl/mutter-ci && \ | ||||||
|  |     dnf copr enable -y hergertme/sysprof-3 && \ | ||||||
|     dnf -y update && dnf -y upgrade && \ |     dnf -y update && dnf -y upgrade && \ | ||||||
|  |  | ||||||
|     dnf builddep -y mutter && \ |     dnf builddep -y mutter && \ | ||||||
|  |  | ||||||
|     # Until Fedora catches up with new build-deps |     # Until Fedora catches up with meson build-deps | ||||||
|     dnf install -y 'pkgconfig(graphene-gobject-1.0)' 'pkgconfig(sysprof-capture-3)' && \ |     dnf install -y meson xorg-x11-server-Xorg gnome-settings-daemon-devel egl-wayland-devel xorg-x11-server-Xwayland && \ | ||||||
|  |  | ||||||
|  |     # Until Fedora catches up with mesa bug fixes | ||||||
|  |     dnf upgrade -y mesa-dri-drivers mesa-libEGL && \ | ||||||
|  |  | ||||||
|     # For running unit tests |     # 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 && \ |     dnf install -y xorg-x11-server-Xvfb mesa-dri-drivers dbus dbus-x11 '*/xvfb-run' gdm-lib accountsservice-libs && \ | ||||||
|  |  | ||||||
|  |     dnf install -y sysprof-devel && \ | ||||||
|  |  | ||||||
|  |     dnf install -y intltool redhat-rpm-config make && \ | ||||||
|  |  | ||||||
|     # GNOME Shell |     # GNOME Shell | ||||||
|     dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \ |     dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \ | ||||||
|  |     # New dep this cycle | ||||||
|  |     dnf install -y 'pkgconfig(gnome-autoar-0)' && \ | ||||||
|     dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel upower-devel python3-devel && \ |     dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel upower-devel python3-devel && \ | ||||||
|     dnf remove -y --noautoremove mutter mutter-devel && \ |     dnf remove -y --noautoremove mutter mutter-devel && \ | ||||||
|  |  | ||||||
|     dnf upgrade -y 'pkgconfig(libpipewire-0.3)' && \ |  | ||||||
|  |  | ||||||
|     dnf clean all |     dnf clean all | ||||||
|   | |||||||
| @@ -40,12 +40,11 @@ function commit_message_subject_is_compliant() { | |||||||
|   return 0 |   return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| RET=0 |  | ||||||
| for commit in $commits; do | for commit in $commits; do | ||||||
|   commit_short=$(echo $commit | cut -c -8) |   commit_short=$(echo $commit | cut -c -8) | ||||||
|  |  | ||||||
|   if ! commit_message_has_url $commit; then |   if ! commit_message_has_url $commit; then | ||||||
|     echo "Commit $commit_short needs a merge request or issue URL" |     echo "Missing merge request or issue URL on commit $commit_short" | ||||||
|     exit 1 |     exit 1 | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
| @@ -53,8 +52,6 @@ for commit in $commits; do | |||||||
|   if [ $? != 0 ]; then |   if [ $? != 0 ]; then | ||||||
|     echo "Commit message for $commit_short is not compliant:" |     echo "Commit message for $commit_short is not compliant:" | ||||||
|     echo "$errors" |     echo "$errors" | ||||||
|     RET=1 |     exit 1 | ||||||
|   fi |   fi | ||||||
| done | done | ||||||
|  |  | ||||||
| exit $RET |  | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| #!/usr/bin/bash | #!/usr/bin/bash | ||||||
|  |  | ||||||
|  | mutter_branch=$(git describe --contains --all HEAD) | ||||||
| gnome_shell_target= | gnome_shell_target= | ||||||
|  |  | ||||||
| git clone https://gitlab.gnome.org/GNOME/gnome-shell.git | git clone https://gitlab.gnome.org/GNOME/gnome-shell.git | ||||||
| @@ -25,7 +26,8 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ -z "$gnome_shell_target" ]; then | if [ -z "$gnome_shell_target" ]; then | ||||||
|   gnome_shell_target=$(git branch -r -l origin/$CI_COMMIT_REF_NAME) |   gnome_shell_target=$(git branch -r -l origin/$mutter_branch) | ||||||
|  |   gnome_shell_target=${gnome_shell_target:-$(git branch -r -l ${mutter_branch#remotes/})} | ||||||
|   gnome_shell_target=${gnome_shell_target:-origin/master} |   gnome_shell_target=${gnome_shell_target:-origin/master} | ||||||
|   echo Using $gnome_shell_target instead |   echo Using $gnome_shell_target instead | ||||||
| fi | fi | ||||||
|   | |||||||
| @@ -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" |  | ||||||
							
								
								
									
										206
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										206
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,209 +1,3 @@ | |||||||
| 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 | 3.33.91 | ||||||
| ======= | ======= | ||||||
| * Fix primary selection copy and paste between X11 and wayland [Hans; #702] | * Fix primary selection copy and paste between X11 and wayland [Hans; #702] | ||||||
|   | |||||||
| @@ -310,7 +310,11 @@ cally_actor_finalize (GObject *obj) | |||||||
|  |  | ||||||
|   _cally_actor_clean_action_list (cally_actor); |   _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) |   if (priv->action_queue) | ||||||
|     { |     { | ||||||
| @@ -653,7 +657,7 @@ cally_actor_get_extents (AtkComponent *component, | |||||||
|   ClutterActor *actor      = NULL; |   ClutterActor *actor      = NULL; | ||||||
|   gint          top_level_x, top_level_y; |   gint          top_level_x, top_level_y; | ||||||
|   gfloat        f_width, f_height; |   gfloat        f_width, f_height; | ||||||
|   graphene_point3d_t verts[4]; |   ClutterVertex verts[4]; | ||||||
|   ClutterActor  *stage = NULL; |   ClutterActor  *stage = NULL; | ||||||
|  |  | ||||||
|   g_return_if_fail (CALLY_IS_ACTOR (component)); |   g_return_if_fail (CALLY_IS_ACTOR (component)); | ||||||
|   | |||||||
| @@ -75,8 +75,8 @@ struct _CallyRootPrivate | |||||||
|   GSList *stage_list; |   GSList *stage_list; | ||||||
|  |  | ||||||
|   /* signals id */ |   /* signals id */ | ||||||
|   gulong stage_added_id; |   guint stage_added_id; | ||||||
|   gulong stage_removed_id; |   guint stage_removed_id; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| G_DEFINE_TYPE_WITH_PRIVATE (CallyRoot, cally_root,  ATK_TYPE_GOBJECT_ACCESSIBLE) | 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)); |   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); |   G_OBJECT_CLASS (cally_root_parent_class)->finalize (object); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -247,7 +247,11 @@ cally_text_finalize   (GObject *obj) | |||||||
| /*   g_object_unref (cally_text->priv->textutil); */ | /*   g_object_unref (cally_text->priv->textutil); */ | ||||||
| /*   cally_text->priv->textutil = NULL; */ | /*   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); |   G_OBJECT_CLASS (cally_text_parent_class)->finalize (obj); | ||||||
| } | } | ||||||
| @@ -1434,7 +1438,7 @@ static void cally_text_get_character_extents (AtkText *text, | |||||||
|   PangoLayout *layout; |   PangoLayout *layout; | ||||||
|   PangoRectangle extents; |   PangoRectangle extents; | ||||||
|   const gchar *text_value; |   const gchar *text_value; | ||||||
|   graphene_point3d_t verts[4]; |   ClutterVertex verts[4]; | ||||||
|  |  | ||||||
|   actor = CALLY_GET_CLUTTER_ACTOR (text); |   actor = CALLY_GET_CLUTTER_ACTOR (text); | ||||||
|   if (actor == NULL) /* State is defunct */ |   if (actor == NULL) /* State is defunct */ | ||||||
| @@ -2290,7 +2294,7 @@ _cally_misc_get_index_at_point (ClutterText *clutter_text, | |||||||
|   gint index, x_window, y_window, x_toplevel, y_toplevel; |   gint index, x_window, y_window, x_toplevel, y_toplevel; | ||||||
|   gint x_temp, y_temp; |   gint x_temp, y_temp; | ||||||
|   gboolean ret; |   gboolean ret; | ||||||
|   graphene_point3d_t verts[4]; |   ClutterVertex verts[4]; | ||||||
|   PangoLayout *layout; |   PangoLayout *layout; | ||||||
|   gint x_layout, y_layout; |   gint x_layout, y_layout; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										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_EXPORT | ||||||
|  | GType      cally_texture_get_type (void) G_GNUC_CONST; | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | AtkObject *cally_texture_new      (ClutterActor *actor); | ||||||
|  |  | ||||||
|  | G_END_DECLS | ||||||
|  |  | ||||||
|  | #endif /* __CALLY_TEXTURE_H__ */ | ||||||
| @@ -39,6 +39,7 @@ | |||||||
| #include "cally-group.h" | #include "cally-group.h" | ||||||
| #include "cally-stage.h" | #include "cally-stage.h" | ||||||
| #include "cally-text.h" | #include "cally-text.h" | ||||||
|  | #include "cally-texture.h" | ||||||
| #include "cally-rectangle.h" | #include "cally-rectangle.h" | ||||||
| #include "cally-clone.h" | #include "cally-clone.h" | ||||||
|  |  | ||||||
| @@ -55,6 +56,7 @@ 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_GROUP, cally_group, cally_group_new) | ||||||
| CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_STAGE, cally_stage, cally_stage_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_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_RECTANGLE, cally_rectangle, cally_rectangle_new) | ||||||
| CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_CLONE, cally_clone, cally_clone_new) | CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_CLONE, cally_clone, cally_clone_new) | ||||||
|  |  | ||||||
| @@ -76,6 +78,7 @@ cally_accessibility_init (void) | |||||||
|   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_GROUP, cally_group); |   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_GROUP, cally_group); | ||||||
|   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_STAGE, cally_stage); |   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_STAGE, cally_stage); | ||||||
|   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_TEXT, cally_text); |   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_RECTANGLE, cally_rectangle); | ||||||
|   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_CLONE, cally_clone); |   CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_CLONE, cally_clone); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ | |||||||
| #include "cally-root.h" | #include "cally-root.h" | ||||||
| #include "cally-stage.h" | #include "cally-stage.h" | ||||||
| #include "cally-text.h" | #include "cally-text.h" | ||||||
|  | #include "cally-texture.h" | ||||||
| #include "cally-util.h" | #include "cally-util.h" | ||||||
|  |  | ||||||
| #undef __CALLY_H_INSIDE__ | #undef __CALLY_H_INSIDE__ | ||||||
|   | |||||||
| @@ -340,7 +340,7 @@ clutter_actor_box_contains (const ClutterActorBox *box, | |||||||
| /** | /** | ||||||
|  * clutter_actor_box_from_vertices: |  * clutter_actor_box_from_vertices: | ||||||
|  * @box: a #ClutterActorBox |  * @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 |  * Calculates the bounding box represented by the four vertices; for details | ||||||
|  * of the vertex array see clutter_actor_get_abs_allocation_vertices(). |  * of the vertex array see clutter_actor_get_abs_allocation_vertices(). | ||||||
| @@ -348,8 +348,8 @@ clutter_actor_box_contains (const ClutterActorBox *box, | |||||||
|  * Since: 1.0 |  * Since: 1.0 | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_actor_box_from_vertices (ClutterActorBox          *box, | clutter_actor_box_from_vertices (ClutterActorBox     *box, | ||||||
|                                  const graphene_point3d_t  verts[]) |                                  const ClutterVertex  verts[]) | ||||||
| { | { | ||||||
|   gfloat x_1, x_2, y_1, y_2; |   gfloat x_1, x_2, y_1, y_2; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ | |||||||
| struct _ClutterActorMetaPrivate | struct _ClutterActorMetaPrivate | ||||||
| { | { | ||||||
|   ClutterActor *actor; |   ClutterActor *actor; | ||||||
|   gulong destroy_id; |   guint destroy_id; | ||||||
|  |  | ||||||
|   gchar *name; |   gchar *name; | ||||||
|  |  | ||||||
| @@ -91,7 +91,11 @@ clutter_actor_meta_real_set_actor (ClutterActorMeta *meta, | |||||||
|   if (meta->priv->actor == actor) |   if (meta->priv->actor == actor) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   g_clear_signal_handler (&meta->priv->destroy_id, meta->priv->actor); |   if (meta->priv->destroy_id != 0) | ||||||
|  |     { | ||||||
|  |       g_signal_handler_disconnect (meta->priv->actor, meta->priv->destroy_id); | ||||||
|  |       meta->priv->destroy_id = 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   meta->priv->actor = actor; |   meta->priv->actor = actor; | ||||||
|  |  | ||||||
| @@ -158,8 +162,8 @@ clutter_actor_meta_finalize (GObject *gobject) | |||||||
| { | { | ||||||
|   ClutterActorMetaPrivate *priv = CLUTTER_ACTOR_META (gobject)->priv; |   ClutterActorMetaPrivate *priv = CLUTTER_ACTOR_META (gobject)->priv; | ||||||
|  |  | ||||||
|   if (priv->actor != NULL) |   if (priv->destroy_id != 0 && priv->actor != NULL) | ||||||
|     g_clear_signal_handler (&priv->destroy_id, priv->actor); |     g_signal_handler_disconnect (priv->actor, priv->destroy_id); | ||||||
|  |  | ||||||
|   g_free (priv->name); |   g_free (priv->name); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -135,7 +135,7 @@ struct _AnchorCoord | |||||||
|     } fraction; |     } fraction; | ||||||
|  |  | ||||||
|     /* Use when is_fractional == FALSE */ |     /* Use when is_fractional == FALSE */ | ||||||
|     graphene_point3d_t units; |     ClutterVertex units; | ||||||
|   } v; |   } v; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -163,7 +163,7 @@ struct _SizeRequest | |||||||
| struct _ClutterLayoutInfo | struct _ClutterLayoutInfo | ||||||
| { | { | ||||||
|   /* fixed position coordinates */ |   /* fixed position coordinates */ | ||||||
|   graphene_point_t fixed_pos; |   ClutterPoint fixed_pos; | ||||||
|  |  | ||||||
|   ClutterMargin margin; |   ClutterMargin margin; | ||||||
|  |  | ||||||
| @@ -173,8 +173,8 @@ struct _ClutterLayoutInfo | |||||||
|   guint x_expand : 1; |   guint x_expand : 1; | ||||||
|   guint y_expand : 1; |   guint y_expand : 1; | ||||||
|  |  | ||||||
|   graphene_size_t minimum; |   ClutterSize minimum; | ||||||
|   graphene_size_t natural; |   ClutterSize natural; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| const ClutterLayoutInfo *       _clutter_actor_get_layout_info_or_defaults      (ClutterActor *self); | const ClutterLayoutInfo *       _clutter_actor_get_layout_info_or_defaults      (ClutterActor *self); | ||||||
| @@ -203,13 +203,13 @@ struct _ClutterTransformInfo | |||||||
|   AnchorCoord anchor; |   AnchorCoord anchor; | ||||||
|  |  | ||||||
|   /* translation */ |   /* translation */ | ||||||
|   graphene_point3d_t translation; |   ClutterVertex translation; | ||||||
|  |  | ||||||
|   /* z_position */ |   /* z_position */ | ||||||
|   gfloat z_position; |   gfloat z_position; | ||||||
|  |  | ||||||
|   /* transformation center */ |   /* transformation center */ | ||||||
|   graphene_point_t pivot; |   ClutterPoint pivot; | ||||||
|   gfloat pivot_z; |   gfloat pivot_z; | ||||||
|  |  | ||||||
|   CoglMatrix transform; |   CoglMatrix transform; | ||||||
| @@ -242,6 +242,9 @@ ClutterAnimationInfo *          _clutter_actor_get_animation_info | |||||||
| ClutterTransition *             _clutter_actor_create_transition                        (ClutterActor *self, | ClutterTransition *             _clutter_actor_create_transition                        (ClutterActor *self, | ||||||
|                                                                                          GParamSpec   *pspec, |                                                                                          GParamSpec   *pspec, | ||||||
|                                                                                          ...); |                                                                                          ...); | ||||||
|  | ClutterTransition *             _clutter_actor_get_transition                           (ClutterActor *self, | ||||||
|  |                                                                                          GParamSpec   *pspec); | ||||||
|  |  | ||||||
| gboolean                        _clutter_actor_foreach_child                            (ClutterActor *self, | gboolean                        _clutter_actor_foreach_child                            (ClutterActor *self, | ||||||
|                                                                                          ClutterForeachCallback callback, |                                                                                          ClutterForeachCallback callback, | ||||||
|                                                                                          gpointer user_data); |                                                                                          gpointer user_data); | ||||||
| @@ -274,9 +277,6 @@ void                            _clutter_actor_set_enable_paint_unmapped | |||||||
| void                            _clutter_actor_set_has_pointer                          (ClutterActor *self, | void                            _clutter_actor_set_has_pointer                          (ClutterActor *self, | ||||||
|                                                                                          gboolean      has_pointer); |                                                                                          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, | void                            _clutter_actor_queue_redraw_with_clip                   (ClutterActor             *self, | ||||||
|                                                                                          ClutterRedrawFlags        flags, |                                                                                          ClutterRedrawFlags        flags, | ||||||
|                                                                                          const ClutterPaintVolume *clip_volume); |                                                                                          const ClutterPaintVolume *clip_volume); | ||||||
| @@ -315,6 +315,7 @@ void                            _clutter_actor_queue_relayout_on_clones | |||||||
| void                            _clutter_actor_queue_only_relayout                      (ClutterActor *actor); | void                            _clutter_actor_queue_only_relayout                      (ClutterActor *actor); | ||||||
| void                            _clutter_actor_queue_update_resource_scale_recursive    (ClutterActor *actor); | void                            _clutter_actor_queue_update_resource_scale_recursive    (ClutterActor *actor); | ||||||
|  |  | ||||||
|  | CoglFramebuffer *               _clutter_actor_get_active_framebuffer                   (ClutterActor *actor); | ||||||
| gboolean                        _clutter_actor_get_real_resource_scale                  (ClutterActor *actor, | gboolean                        _clutter_actor_get_real_resource_scale                  (ClutterActor *actor, | ||||||
|                                                                                          float        *resource_scale); |                                                                                          float        *resource_scale); | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -39,8 +39,6 @@ | |||||||
|  |  | ||||||
| #include <clutter/clutter-types.h> | #include <clutter/clutter-types.h> | ||||||
| #include <clutter/clutter-event.h> | #include <clutter/clutter-event.h> | ||||||
| #include <clutter/clutter-paint-context.h> |  | ||||||
| #include <clutter/clutter-pick-context.h> |  | ||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
| @@ -230,14 +228,13 @@ struct _ClutterActorClass | |||||||
|   void (* unrealize)            (ClutterActor          *self); |   void (* unrealize)            (ClutterActor          *self); | ||||||
|   void (* map)                  (ClutterActor          *self); |   void (* map)                  (ClutterActor          *self); | ||||||
|   void (* unmap)                (ClutterActor          *self); |   void (* unmap)                (ClutterActor          *self); | ||||||
|   void (* paint)                (ClutterActor          *self, |   void (* paint)                (ClutterActor          *self); | ||||||
|                                  ClutterPaintContext   *paint_context); |  | ||||||
|   void (* parent_set)           (ClutterActor          *actor, |   void (* parent_set)           (ClutterActor          *actor, | ||||||
|                                  ClutterActor          *old_parent); |                                  ClutterActor          *old_parent); | ||||||
|  |  | ||||||
|   void (* destroy)              (ClutterActor          *self); |   void (* destroy)              (ClutterActor          *self); | ||||||
|   void (* pick)                 (ClutterActor          *actor, |   void (* pick)                 (ClutterActor          *actor, | ||||||
|                                  ClutterPickContext    *pick_context); |                                  const ClutterColor    *color); | ||||||
|  |  | ||||||
|   gboolean (* queue_redraw)     (ClutterActor          *actor, |   gboolean (* queue_redraw)     (ClutterActor          *actor, | ||||||
|                                  ClutterActor          *leaf_that_queued, |                                  ClutterActor          *leaf_that_queued, | ||||||
| @@ -353,17 +350,9 @@ void                            clutter_actor_map | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_unmap                             (ClutterActor                *self); | void                            clutter_actor_unmap                             (ClutterActor                *self); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_paint                             (ClutterActor                *self, | void                            clutter_actor_paint                             (ClutterActor                *self); | ||||||
|                                                                                  ClutterPaintContext         *paint_context); |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_continue_paint                    (ClutterActor                *self, | 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_EXPORT | ||||||
| void                            clutter_actor_queue_redraw                      (ClutterActor                *self); | void                            clutter_actor_queue_redraw                      (ClutterActor                *self); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| @@ -442,7 +431,7 @@ void                            clutter_actor_get_allocation_box | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_get_allocation_vertices           (ClutterActor                *self, | void                            clutter_actor_get_allocation_vertices           (ClutterActor                *self, | ||||||
|                                                                                  ClutterActor                *ancestor, |                                                                                  ClutterActor                *ancestor, | ||||||
|                                                                                  graphene_point3d_t          *verts); |                                                                                  ClutterVertex                verts[]); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean                        clutter_actor_has_allocation                    (ClutterActor                *self); | gboolean                        clutter_actor_has_allocation                    (ClutterActor                *self); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| @@ -828,16 +817,16 @@ gboolean                        clutter_actor_transform_stage_point | |||||||
|                                                                                  gfloat                     *y_out); |                                                                                  gfloat                     *y_out); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_get_abs_allocation_vertices       (ClutterActor               *self, | void                            clutter_actor_get_abs_allocation_vertices       (ClutterActor               *self, | ||||||
|                                                                                  graphene_point3d_t         *verts); |                                                                                  ClutterVertex               verts[]); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_apply_transform_to_point          (ClutterActor               *self, | void                            clutter_actor_apply_transform_to_point          (ClutterActor               *self, | ||||||
|                                                                                  const graphene_point3d_t   *point, |                                                                                  const ClutterVertex        *point, | ||||||
|                                                                                  graphene_point3d_t         *vertex); |                                                                                  ClutterVertex              *vertex); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                            clutter_actor_apply_relative_transform_to_point (ClutterActor               *self, | void                            clutter_actor_apply_relative_transform_to_point (ClutterActor               *self, | ||||||
|                                                                                  ClutterActor               *ancestor, |                                                                                  ClutterActor               *ancestor, | ||||||
|                                                                                  const graphene_point3d_t   *point, |                                                                                  const ClutterVertex        *point, | ||||||
|                                                                                  graphene_point3d_t         *vertex); |                                                                                  ClutterVertex              *vertex); | ||||||
|  |  | ||||||
| /* Implicit animations */ | /* Implicit animations */ | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| @@ -915,7 +904,6 @@ void                            clutter_actor_bind_model_with_properties | |||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void clutter_actor_pick_box (ClutterActor          *self, | void clutter_actor_pick_box (ClutterActor          *self, | ||||||
|                              ClutterPickContext    *pick_context, |  | ||||||
|                              const ClutterActorBox *box); |                              const ClutterActorBox *box); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|   | |||||||
| @@ -54,6 +54,7 @@ | |||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
| #include "clutter-private.h" | #include "clutter-private.h" | ||||||
|  |  | ||||||
|  | #include "deprecated/clutter-animatable.h" | ||||||
| #include "deprecated/clutter-animation.h" | #include "deprecated/clutter-animation.h" | ||||||
|  |  | ||||||
| G_DEFINE_INTERFACE (ClutterAnimatable, clutter_animatable, G_TYPE_OBJECT); | G_DEFINE_INTERFACE (ClutterAnimatable, clutter_animatable, G_TYPE_OBJECT); | ||||||
| @@ -63,6 +64,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) | ||||||
|  | { | ||||||
|  |   ClutterAnimatableInterface *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: |  * clutter_animatable_find_property: | ||||||
|  * @animatable: a #ClutterAnimatable |  * @animatable: a #ClutterAnimatable | ||||||
|   | |||||||
| @@ -90,10 +90,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 (ClutterColor, clutter_color_free) | ||||||
| G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterMargin, clutter_margin_free) | G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterMargin, clutter_margin_free) | ||||||
| G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterMatrix, clutter_matrix_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 (ClutterPaintNode, clutter_paint_node_unref) | ||||||
| G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPaintVolume, clutter_paint_volume_free) | 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 (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__ */ | #endif /* __GI_SCANNER__ */ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,7 +23,8 @@ | |||||||
| #define __CLUTTER_BACKEND_PRIVATE_H__ | #define __CLUTTER_BACKEND_PRIVATE_H__ | ||||||
|  |  | ||||||
| #include <clutter/clutter-backend.h> | #include <clutter/clutter-backend.h> | ||||||
| #include <clutter/clutter-seat.h> | #include <clutter/clutter-device-manager.h> | ||||||
|  | #include <clutter/clutter-keymap.h> | ||||||
| #include <clutter/clutter-stage-window.h> | #include <clutter/clutter-stage-window.h> | ||||||
|  |  | ||||||
| #define CLUTTER_BACKEND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BACKEND, ClutterBackendClass)) | #define CLUTTER_BACKEND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BACKEND, ClutterBackendClass)) | ||||||
| @@ -46,6 +47,8 @@ struct _ClutterBackend | |||||||
|  |  | ||||||
|   CoglOnscreen *dummy_onscreen; |   CoglOnscreen *dummy_onscreen; | ||||||
|  |  | ||||||
|  |   ClutterDeviceManager *device_manager; | ||||||
|  |  | ||||||
|   cairo_font_options_t *font_options; |   cairo_font_options_t *font_options; | ||||||
|  |  | ||||||
|   gchar *font_name; |   gchar *font_name; | ||||||
| @@ -56,6 +59,8 @@ struct _ClutterBackend | |||||||
|   ClutterStageWindow *stage_window; |   ClutterStageWindow *stage_window; | ||||||
|  |  | ||||||
|   ClutterInputMethod *input_method; |   ClutterInputMethod *input_method; | ||||||
|  |  | ||||||
|  |   ClutterKeymap *keymap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct _ClutterBackendClass | struct _ClutterBackendClass | ||||||
| @@ -84,12 +89,17 @@ struct _ClutterBackendClass | |||||||
|                                                 GError         **error); |                                                 GError         **error); | ||||||
|   gboolean              (* create_context)     (ClutterBackend  *backend, |   gboolean              (* create_context)     (ClutterBackend  *backend, | ||||||
|                                                 GError         **error); |                                                 GError         **error); | ||||||
|  |   ClutterDeviceManager *(* get_device_manager) (ClutterBackend  *backend); | ||||||
|  |  | ||||||
|   gboolean              (* translate_event)    (ClutterBackend     *backend, |   gboolean              (* translate_event)    (ClutterBackend     *backend, | ||||||
|                                                 gpointer            native, |                                                 gpointer            native, | ||||||
|                                                 ClutterEvent       *event); |                                                 ClutterEvent       *event); | ||||||
|  |  | ||||||
|   ClutterSeat *         (* get_default_seat)   (ClutterBackend *backend); |   PangoDirection        (* get_keymap_direction) (ClutterBackend   *backend); | ||||||
|  |  | ||||||
|  |   void                  (* bell_notify)          (ClutterBackend   *backend); | ||||||
|  |  | ||||||
|  |   ClutterKeymap *       (* get_keymap)           (ClutterBackend   *backend); | ||||||
|  |  | ||||||
|   /* signals */ |   /* signals */ | ||||||
|   void (* resolution_changed) (ClutterBackend *backend); |   void (* resolution_changed) (ClutterBackend *backend); | ||||||
| @@ -129,6 +139,11 @@ gfloat                  _clutter_backend_get_units_per_em               (Clutter | |||||||
|                                                                          PangoFontDescription   *font_desc); |                                                                          PangoFontDescription   *font_desc); | ||||||
| gint32                  _clutter_backend_get_units_serial               (ClutterBackend         *backend); | gint32                  _clutter_backend_get_units_serial               (ClutterBackend         *backend); | ||||||
|  |  | ||||||
|  | PangoDirection          _clutter_backend_get_keymap_direction           (ClutterBackend         *backend); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void                    _clutter_backend_reset_cogl_framebuffer         (ClutterBackend         *backend); | ||||||
|  |  | ||||||
| void                    clutter_set_allowed_drivers                     (const char             *drivers); | void                    clutter_set_allowed_drivers                     (const char             *drivers); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
|   | |||||||
| @@ -51,6 +51,7 @@ | |||||||
| #include "clutter-stage-manager-private.h" | #include "clutter-stage-manager-private.h" | ||||||
| #include "clutter-stage-private.h" | #include "clutter-stage-private.h" | ||||||
| #include "clutter-stage-window.h" | #include "clutter-stage-window.h" | ||||||
|  | #include "clutter-device-manager-private.h" | ||||||
|  |  | ||||||
| #ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT | #ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT | ||||||
| #include "wayland/clutter-wayland-compositor.h" | #include "wayland/clutter-wayland-compositor.h" | ||||||
| @@ -527,6 +528,30 @@ clutter_backend_real_init_events (ClutterBackend *backend) | |||||||
|   g_error ("Unknown input backend"); |   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 ClutterKeymap * | ||||||
|  | clutter_backend_real_get_keymap (ClutterBackend *backend) | ||||||
|  | { | ||||||
|  |   if (G_UNLIKELY (backend->keymap == NULL)) | ||||||
|  |     { | ||||||
|  |       g_critical ("No keymap available, expect broken keyboard input"); | ||||||
|  |       return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   return backend->keymap; | ||||||
|  | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_backend_class_init (ClutterBackendClass *klass) | clutter_backend_class_init (ClutterBackendClass *klass) | ||||||
| { | { | ||||||
| @@ -590,8 +615,10 @@ clutter_backend_class_init (ClutterBackendClass *klass) | |||||||
|   klass->font_changed = clutter_backend_real_font_changed; |   klass->font_changed = clutter_backend_real_font_changed; | ||||||
|  |  | ||||||
|   klass->init_events = clutter_backend_real_init_events; |   klass->init_events = clutter_backend_real_init_events; | ||||||
|  |   klass->get_device_manager = clutter_backend_real_get_device_manager; | ||||||
|   klass->create_context = clutter_backend_real_create_context; |   klass->create_context = clutter_backend_real_create_context; | ||||||
|   klass->get_features = clutter_backend_real_get_features; |   klass->get_features = clutter_backend_real_get_features; | ||||||
|  |   klass->get_keymap = clutter_backend_real_get_keymap; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -600,7 +627,7 @@ clutter_backend_init (ClutterBackend *self) | |||||||
|   self->units_per_em = -1.0; |   self->units_per_em = -1.0; | ||||||
|   self->units_serial = 1; |   self->units_serial = 1; | ||||||
|  |  | ||||||
|   self->dummy_onscreen = NULL; |   self->dummy_onscreen = COGL_INVALID_HANDLE; | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| @@ -756,24 +783,24 @@ _clutter_backend_copy_event_data (ClutterBackend     *backend, | |||||||
|                                   const ClutterEvent *src, |                                   const ClutterEvent *src, | ||||||
|                                   ClutterEvent       *dest) |                                   ClutterEvent       *dest) | ||||||
| { | { | ||||||
|   ClutterSeatClass *seat_class; |   ClutterDeviceManagerClass *device_manager_class; | ||||||
|   ClutterSeat *seat; |   ClutterDeviceManager *device_manager; | ||||||
|  |  | ||||||
|   seat = clutter_backend_get_default_seat (backend); |   device_manager = clutter_device_manager_get_default (); | ||||||
|   seat_class = CLUTTER_SEAT_GET_CLASS (seat); |   device_manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|   seat_class->copy_event_data (seat, src, dest); |   device_manager_class->copy_event_data (device_manager, src, dest); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| _clutter_backend_free_event_data (ClutterBackend *backend, | _clutter_backend_free_event_data (ClutterBackend *backend, | ||||||
|                                   ClutterEvent   *event) |                                   ClutterEvent   *event) | ||||||
| { | { | ||||||
|   ClutterSeatClass *seat_class; |   ClutterDeviceManagerClass *device_manager_class; | ||||||
|   ClutterSeat *seat; |   ClutterDeviceManager *device_manager; | ||||||
|  |  | ||||||
|   seat = clutter_backend_get_default_seat (backend); |   device_manager = clutter_device_manager_get_default (); | ||||||
|   seat_class = CLUTTER_SEAT_GET_CLASS (seat); |   device_manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|   seat_class->free_event_data (seat, event); |   device_manager_class->free_event_data (device_manager, event); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -970,6 +997,39 @@ clutter_wayland_set_compositor_display (void *display) | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | 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) | ||||||
|  |     { | ||||||
|  |       GError *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); | ||||||
|  |           g_error_free (internal_error); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   cogl_set_framebuffer (COGL_FRAMEBUFFER (backend->dummy_onscreen)); | ||||||
|  | } | ||||||
|  |  | ||||||
| void | void | ||||||
| clutter_set_allowed_drivers (const char *drivers) | clutter_set_allowed_drivers (const char *drivers) | ||||||
| { | { | ||||||
| @@ -982,6 +1042,16 @@ clutter_set_allowed_drivers (const char *drivers) | |||||||
|   allowed_drivers = g_strdup (drivers); |   allowed_drivers = g_strdup (drivers); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | clutter_backend_bell_notify (ClutterBackend *backend) | ||||||
|  | { | ||||||
|  |   ClutterBackendClass *klass; | ||||||
|  |  | ||||||
|  |   klass = CLUTTER_BACKEND_GET_CLASS (backend); | ||||||
|  |   if (klass->bell_notify) | ||||||
|  |     klass->bell_notify (backend); | ||||||
|  | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * clutter_backend_get_input_method: |  * clutter_backend_get_input_method: | ||||||
|  * @backend: the #CLutterBackend |  * @backend: the #CLutterBackend | ||||||
| @@ -1010,24 +1080,22 @@ clutter_backend_set_input_method (ClutterBackend     *backend, | |||||||
|   g_set_object (&backend->input_method, method); |   g_set_object (&backend->input_method, method); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_backend_get_keymap: | ||||||
|  |  * @backend: the #ClutterBackend | ||||||
|  |  * | ||||||
|  |  * Gets the keymap used by Clutter | ||||||
|  |  * | ||||||
|  |  * Returns: (transfer none): the keymap | ||||||
|  |  **/ | ||||||
|  | ClutterKeymap * | ||||||
|  | clutter_backend_get_keymap (ClutterBackend *backend) | ||||||
|  | { | ||||||
|  |   return CLUTTER_BACKEND_GET_CLASS (backend)->get_keymap (backend); | ||||||
|  | } | ||||||
|  |  | ||||||
| ClutterStageWindow * | ClutterStageWindow * | ||||||
| clutter_backend_get_stage_window (ClutterBackend *backend) | clutter_backend_get_stage_window (ClutterBackend *backend) | ||||||
| { | { | ||||||
|   return backend->stage_window; |   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); |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -36,7 +36,6 @@ | |||||||
| #include <clutter/clutter-config.h> | #include <clutter/clutter-config.h> | ||||||
| #include <clutter/clutter-keymap.h> | #include <clutter/clutter-keymap.h> | ||||||
| #include <clutter/clutter-types.h> | #include <clutter/clutter-types.h> | ||||||
| #include <clutter/clutter-seat.h> |  | ||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
| @@ -73,6 +72,9 @@ const cairo_font_options_t *    clutter_backend_get_font_options        (Clutter | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| CoglContext *                   clutter_backend_get_cogl_context        (ClutterBackend             *backend); | CoglContext *                   clutter_backend_get_cogl_context        (ClutterBackend             *backend); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void                            clutter_backend_bell_notify             (ClutterBackend             *backend); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| ClutterInputMethod *            clutter_backend_get_input_method        (ClutterBackend             *backend); | ClutterInputMethod *            clutter_backend_get_input_method        (ClutterBackend             *backend); | ||||||
|  |  | ||||||
| @@ -80,7 +82,7 @@ CLUTTER_EXPORT | |||||||
| void                            clutter_backend_set_input_method        (ClutterBackend             *backend, | void                            clutter_backend_set_input_method        (ClutterBackend             *backend, | ||||||
|                                                                          ClutterInputMethod         *method); |                                                                          ClutterInputMethod         *method); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| ClutterSeat *                   clutter_backend_get_default_seat        (ClutterBackend             *backend); | ClutterKeymap *                 clutter_backend_get_keymap              (ClutterBackend             *backend); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -49,10 +49,10 @@ | |||||||
|  |  | ||||||
| #define CLUTTER_DISABLE_DEPRECATION_WARNINGS | #define CLUTTER_DISABLE_DEPRECATION_WARNINGS | ||||||
| #include "deprecated/clutter-container.h" | #include "deprecated/clutter-container.h" | ||||||
|  | #include "deprecated/clutter-bin-layout.h" | ||||||
|  |  | ||||||
| #include "clutter-actor-private.h" | #include "clutter-actor-private.h" | ||||||
| #include "clutter-animatable.h" | #include "clutter-animatable.h" | ||||||
| #include "clutter-bin-layout.h" |  | ||||||
| #include "clutter-child-meta.h" | #include "clutter-child-meta.h" | ||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
| #include "clutter-enum-types.h" | #include "clutter-enum-types.h" | ||||||
| @@ -698,3 +698,187 @@ clutter_bin_layout_new (ClutterBinAlignment x_align, | |||||||
|                        "y-align", y_align, |                        "y-align", y_align, | ||||||
|                        NULL); |                        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); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -144,55 +144,6 @@ source_destroyed (ClutterActor          *actor, | |||||||
|   bind->source = NULL; |   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; |  | ||||||
|  |  | ||||||
|   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 | static void | ||||||
| clutter_bind_constraint_update_allocation (ClutterConstraint *constraint, | clutter_bind_constraint_update_allocation (ClutterConstraint *constraint, | ||||||
|                                            ClutterActor      *actor, |                                            ClutterActor      *actor, | ||||||
| @@ -201,9 +152,7 @@ clutter_bind_constraint_update_allocation (ClutterConstraint *constraint, | |||||||
|   ClutterBindConstraint *bind = CLUTTER_BIND_CONSTRAINT (constraint); |   ClutterBindConstraint *bind = CLUTTER_BIND_CONSTRAINT (constraint); | ||||||
|   gfloat source_width, source_height; |   gfloat source_width, source_height; | ||||||
|   gfloat actor_width, actor_height; |   gfloat actor_width, actor_height; | ||||||
|   graphene_point3d_t source_position; |   ClutterVertex source_position = { 0., }; | ||||||
|  |  | ||||||
|   source_position = GRAPHENE_POINT3D_INIT (0.f, 0.f, 0.f); |  | ||||||
|  |  | ||||||
|   if (bind->source == NULL) |   if (bind->source == NULL) | ||||||
|     return; |     return; | ||||||
| @@ -377,8 +326,6 @@ clutter_bind_constraint_class_init (ClutterBindConstraintClass *klass) | |||||||
|   meta_class->set_actor = clutter_bind_constraint_set_actor; |   meta_class->set_actor = clutter_bind_constraint_set_actor; | ||||||
|  |  | ||||||
|   constraint_class->update_allocation = clutter_bind_constraint_update_allocation; |   constraint_class->update_allocation = clutter_bind_constraint_update_allocation; | ||||||
|   constraint_class->update_preferred_size = clutter_bind_constraint_update_preferred_size; |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * ClutterBindConstraint:source: |    * ClutterBindConstraint:source: | ||||||
|    * |    * | ||||||
|   | |||||||
| @@ -99,8 +99,7 @@ G_DEFINE_TYPE (ClutterBlurEffect, | |||||||
|                CLUTTER_TYPE_OFFSCREEN_EFFECT); |                CLUTTER_TYPE_OFFSCREEN_EFFECT); | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_blur_effect_pre_paint (ClutterEffect       *effect, | clutter_blur_effect_pre_paint (ClutterEffect *effect) | ||||||
|                                ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect); |   ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect); | ||||||
|   ClutterEffectClass *parent_class; |   ClutterEffectClass *parent_class; | ||||||
| @@ -125,7 +124,7 @@ clutter_blur_effect_pre_paint (ClutterEffect       *effect, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|   parent_class = CLUTTER_EFFECT_CLASS (clutter_blur_effect_parent_class); |   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 = |       ClutterOffscreenEffect *offscreen_effect = | ||||||
|         CLUTTER_OFFSCREEN_EFFECT (effect); |         CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
| @@ -158,12 +157,10 @@ clutter_blur_effect_pre_paint (ClutterEffect       *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_blur_effect_paint_target (ClutterOffscreenEffect *effect, | clutter_blur_effect_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                   ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect); |   ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect); | ||||||
|   CoglFramebuffer *framebuffer = |   CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); | ||||||
|     clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|   guint8 paint_opacity; |   guint8 paint_opacity; | ||||||
|  |  | ||||||
|   paint_opacity = clutter_actor_get_paint_opacity (self->actor); |   paint_opacity = clutter_actor_get_paint_opacity (self->actor); | ||||||
| @@ -185,7 +182,7 @@ clutter_blur_effect_modify_paint_volume (ClutterEffect      *effect, | |||||||
|                                          ClutterPaintVolume *volume) |                                          ClutterPaintVolume *volume) | ||||||
| { | { | ||||||
|   gfloat cur_width, cur_height; |   gfloat cur_width, cur_height; | ||||||
|   graphene_point3d_t origin; |   ClutterVertex origin; | ||||||
|  |  | ||||||
|   clutter_paint_volume_get_origin (volume, &origin); |   clutter_paint_volume_get_origin (volume, &origin); | ||||||
|   cur_width = clutter_paint_volume_get_width (volume); |   cur_width = clutter_paint_volume_get_width (volume); | ||||||
|   | |||||||
| @@ -121,17 +121,16 @@ G_DEFINE_TYPE (ClutterBrightnessContrastEffect, | |||||||
| static gboolean | static gboolean | ||||||
| will_have_no_effect (ClutterBrightnessContrastEffect *self) | will_have_no_effect (ClutterBrightnessContrastEffect *self) | ||||||
| { | { | ||||||
|   return (G_APPROX_VALUE (self->brightness_red, no_change, FLT_EPSILON) && |   return (self->brightness_red == no_change && | ||||||
|           G_APPROX_VALUE (self->brightness_green, no_change, FLT_EPSILON) && |           self->brightness_green == no_change && | ||||||
|           G_APPROX_VALUE (self->brightness_blue, no_change, FLT_EPSILON) && |           self->brightness_blue == no_change && | ||||||
|           G_APPROX_VALUE (self->contrast_red, no_change, FLT_EPSILON) && |           self->contrast_red == no_change && | ||||||
|           G_APPROX_VALUE (self->contrast_green, no_change, FLT_EPSILON) && |           self->contrast_green == no_change && | ||||||
|           G_APPROX_VALUE (self->contrast_blue, no_change, FLT_EPSILON)); |           self->contrast_blue == no_change); | ||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_brightness_contrast_effect_pre_paint (ClutterEffect       *effect, | clutter_brightness_contrast_effect_pre_paint (ClutterEffect *effect) | ||||||
|                                               ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect); |   ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect); | ||||||
|   ClutterEffectClass *parent_class; |   ClutterEffectClass *parent_class; | ||||||
| @@ -157,7 +156,7 @@ clutter_brightness_contrast_effect_pre_paint (ClutterEffect       *effect, | |||||||
|  |  | ||||||
|   parent_class = |   parent_class = | ||||||
|     CLUTTER_EFFECT_CLASS (clutter_brightness_contrast_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 = |       ClutterOffscreenEffect *offscreen_effect = | ||||||
|         CLUTTER_OFFSCREEN_EFFECT (effect); |         CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
| @@ -176,12 +175,10 @@ clutter_brightness_contrast_effect_pre_paint (ClutterEffect       *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect, | clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                                  ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect); |   ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect); | ||||||
|   CoglFramebuffer *framebuffer = |   CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); | ||||||
|    clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|   ClutterActor *actor; |   ClutterActor *actor; | ||||||
|   guint8 paint_opacity; |   guint8 paint_opacity; | ||||||
|  |  | ||||||
| @@ -497,9 +494,9 @@ clutter_brightness_contrast_effect_set_brightness_full (ClutterBrightnessContras | |||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect)); |   g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect)); | ||||||
|  |  | ||||||
|   if (G_APPROX_VALUE (red, effect->brightness_red, FLT_EPSILON) && |   if (red == effect->brightness_red && | ||||||
|       G_APPROX_VALUE (green, effect->brightness_green, FLT_EPSILON) && |       green == effect->brightness_green && | ||||||
|       G_APPROX_VALUE (blue, effect->brightness_blue, FLT_EPSILON)) |       blue == effect->brightness_blue) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   effect->brightness_red = red; |   effect->brightness_red = red; | ||||||
| @@ -587,9 +584,9 @@ clutter_brightness_contrast_effect_set_contrast_full (ClutterBrightnessContrastE | |||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect)); |   g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect)); | ||||||
|  |  | ||||||
|   if (G_APPROX_VALUE (red, effect->contrast_red, FLT_EPSILON) && |   if (red == effect->contrast_red && | ||||||
|       G_APPROX_VALUE (green, effect->contrast_green, FLT_EPSILON) && |       green == effect->contrast_green && | ||||||
|       G_APPROX_VALUE (blue, effect->contrast_blue, FLT_EPSILON)) |       blue == effect->contrast_blue) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   effect->contrast_red = red; |   effect->contrast_red = red; | ||||||
|   | |||||||
| @@ -328,10 +328,9 @@ clutter_canvas_init (ClutterCanvas *self) | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_canvas_paint_content (ClutterContent      *content, | clutter_canvas_paint_content (ClutterContent   *content, | ||||||
|                               ClutterActor        *actor, |                               ClutterActor     *actor, | ||||||
|                               ClutterPaintNode    *root, |                               ClutterPaintNode *root) | ||||||
|                               ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterCanvas *self = CLUTTER_CANVAS (content); |   ClutterCanvas *self = CLUTTER_CANVAS (content); | ||||||
|   ClutterCanvasPrivate *priv = self->priv; |   ClutterCanvasPrivate *priv = self->priv; | ||||||
| @@ -352,7 +351,7 @@ clutter_canvas_paint_content (ClutterContent      *content, | |||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   node = clutter_actor_create_texture_paint_node (actor, priv->texture); |   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_add_child (root, node); | ||||||
|   clutter_paint_node_unref (node); |   clutter_paint_node_unref (node); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -105,8 +105,8 @@ struct _ClutterClickActionPrivate | |||||||
| { | { | ||||||
|   ClutterActor *stage; |   ClutterActor *stage; | ||||||
|  |  | ||||||
|   gulong event_id; |   guint event_id; | ||||||
|   gulong capture_id; |   guint capture_id; | ||||||
|   guint long_press_id; |   guint long_press_id; | ||||||
|  |  | ||||||
|   gint long_press_threshold; |   gint long_press_threshold; | ||||||
| @@ -202,7 +202,11 @@ click_action_emit_long_press (gpointer data) | |||||||
|                  CLUTTER_LONG_PRESS_ACTIVATE, |                  CLUTTER_LONG_PRESS_ACTIVATE, | ||||||
|                  &result); |                  &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_pressed (action, FALSE); | ||||||
|   click_action_set_held (action, FALSE); |   click_action_set_held (action, FALSE); | ||||||
| @@ -257,7 +261,8 @@ click_action_cancel_long_press (ClutterClickAction *action) | |||||||
|  |  | ||||||
|       actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (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, |       g_signal_emit (action, click_signals[LONG_PRESS], 0, | ||||||
|                      actor, |                      actor, | ||||||
| @@ -370,9 +375,17 @@ on_captured_event (ClutterActor       *stage, | |||||||
|       click_action_cancel_long_press (action); |       click_action_cancel_long_press (action); | ||||||
|  |  | ||||||
|       /* disconnect the capture */ |       /* 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))) |       if (!clutter_actor_contains (actor, clutter_event_get_source (event))) | ||||||
|         return CLUTTER_EVENT_PROPAGATE; |         return CLUTTER_EVENT_PROPAGATE; | ||||||
| @@ -440,7 +453,7 @@ clutter_click_action_set_actor (ClutterActorMeta *meta, | |||||||
|       ClutterActor *old_actor = clutter_actor_meta_get_actor (meta); |       ClutterActor *old_actor = clutter_actor_meta_get_actor (meta); | ||||||
|  |  | ||||||
|       if (old_actor != NULL) |       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; |       priv->event_id = 0; | ||||||
|     } |     } | ||||||
| @@ -448,13 +461,17 @@ clutter_click_action_set_actor (ClutterActorMeta *meta, | |||||||
|   if (priv->capture_id != 0) |   if (priv->capture_id != 0) | ||||||
|     { |     { | ||||||
|       if (priv->stage != NULL) |       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->capture_id = 0; | ||||||
|       priv->stage = NULL; |       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_pressed (action, FALSE); | ||||||
|   click_action_set_held (action, FALSE); |   click_action_set_held (action, FALSE); | ||||||
| @@ -528,12 +545,24 @@ clutter_click_action_dispose (GObject *gobject) | |||||||
| { | { | ||||||
|   ClutterClickActionPrivate *priv = CLUTTER_CLICK_ACTION (gobject)->priv; |   ClutterClickActionPrivate *priv = CLUTTER_CLICK_ACTION (gobject)->priv; | ||||||
|  |  | ||||||
|   g_clear_signal_handler (&priv->event_id, |   if (priv->event_id) | ||||||
|                           clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (gobject))); |     { | ||||||
|  |       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); |   G_OBJECT_CLASS (clutter_click_action_parent_class)->dispose (gobject); | ||||||
| } | } | ||||||
| @@ -731,7 +760,11 @@ clutter_click_action_release (ClutterClickAction *action) | |||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   /* disconnect the capture */ |   /* 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_cancel_long_press (action); | ||||||
|   click_action_set_held (action, FALSE); |   click_action_set_held (action, FALSE); | ||||||
|   | |||||||
| @@ -152,8 +152,7 @@ clutter_clone_apply_transform (ClutterActor *self, CoglMatrix *matrix) | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_clone_paint (ClutterActor        *actor, | clutter_clone_paint (ClutterActor *actor) | ||||||
|                      ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterClone *self = CLUTTER_CLONE (actor); |   ClutterClone *self = CLUTTER_CLONE (actor); | ||||||
|   ClutterClonePrivate *priv = self->priv; |   ClutterClonePrivate *priv = self->priv; | ||||||
| @@ -190,7 +189,7 @@ clutter_clone_paint (ClutterActor        *actor, | |||||||
|   if (clutter_actor_is_realized (priv->clone_source)) |   if (clutter_actor_is_realized (priv->clone_source)) | ||||||
|     { |     { | ||||||
|       _clutter_actor_push_clone_paint (); |       _clutter_actor_push_clone_paint (); | ||||||
|       clutter_actor_paint (priv->clone_source, paint_context); |       clutter_actor_paint (priv->clone_source); | ||||||
|       _clutter_actor_pop_clone_paint (); |       _clutter_actor_pop_clone_paint (); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -401,7 +400,8 @@ clutter_clone_set_source_internal (ClutterClone *self, | |||||||
|  |  | ||||||
|   if (priv->clone_source != NULL) |   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)); |       _clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self)); | ||||||
|       g_object_unref (priv->clone_source); |       g_object_unref (priv->clone_source); | ||||||
|       priv->clone_source = NULL; |       priv->clone_source = NULL; | ||||||
|   | |||||||
| @@ -105,8 +105,7 @@ G_DEFINE_TYPE (ClutterColorizeEffect, | |||||||
|                CLUTTER_TYPE_OFFSCREEN_EFFECT); |                CLUTTER_TYPE_OFFSCREEN_EFFECT); | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_colorize_effect_pre_paint (ClutterEffect       *effect, | clutter_colorize_effect_pre_paint (ClutterEffect *effect) | ||||||
|                                    ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect); |   ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect); | ||||||
|   ClutterEffectClass *parent_class; |   ClutterEffectClass *parent_class; | ||||||
| @@ -127,7 +126,7 @@ clutter_colorize_effect_pre_paint (ClutterEffect       *effect, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|   parent_class = CLUTTER_EFFECT_CLASS (clutter_colorize_effect_parent_class); |   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 = |       ClutterOffscreenEffect *offscreen_effect = | ||||||
|         CLUTTER_OFFSCREEN_EFFECT (effect); |         CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
| @@ -146,12 +145,10 @@ clutter_colorize_effect_pre_paint (ClutterEffect       *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_colorize_effect_paint_target (ClutterOffscreenEffect *effect, | clutter_colorize_effect_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                       ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect); |   ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect); | ||||||
|   CoglFramebuffer *framebuffer = |   CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); | ||||||
|     clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|   ClutterActor *actor; |   ClutterActor *actor; | ||||||
|   guint8 paint_opacity; |   guint8 paint_opacity; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,6 +30,13 @@ gboolean clutter_constraint_update_allocation (ClutterConstraint *constraint, | |||||||
|                                                ClutterActor      *actor, |                                                ClutterActor      *actor, | ||||||
|                                                ClutterActorBox   *allocation); |                                                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 | G_END_DECLS | ||||||
|  |  | ||||||
| #endif /* __CLUTTER_CONSTRAINT_PRIVATE_H__ */ | #endif /* __CLUTTER_CONSTRAINT_PRIVATE_H__ */ | ||||||
|   | |||||||
| @@ -48,7 +48,7 @@ | |||||||
|  * Constraints provide a way to build user interfaces by using |  * Constraints provide a way to build user interfaces by using | ||||||
|  * relations between #ClutterActors, without explicit fixed |  * relations between #ClutterActors, without explicit fixed | ||||||
|  * positioning and sizing, similarly to how fluid layout managers like |  * 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 |  * Constraints are attached to a #ClutterActor, and are available | ||||||
|  * for inspection using clutter_actor_get_constraints(). |  * for inspection using clutter_actor_get_constraints(). | ||||||
| @@ -222,17 +222,6 @@ clutter_constraint_update_allocation (ClutterConstraint *constraint, | |||||||
|   return !clutter_actor_box_equal (allocation, &old_alloc); |   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 | void | ||||||
| clutter_constraint_update_preferred_size (ClutterConstraint  *constraint, | clutter_constraint_update_preferred_size (ClutterConstraint  *constraint, | ||||||
|                                           ClutterActor       *actor, |                                           ClutterActor       *actor, | ||||||
|   | |||||||
| @@ -99,14 +99,6 @@ struct _ClutterConstraintClass | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| GType clutter_constraint_get_type (void) G_GNUC_CONST; | 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 */ | /* ClutterActor API */ | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void               clutter_actor_add_constraint            (ClutterActor      *self, | void               clutter_actor_add_constraint            (ClutterActor      *self, | ||||||
|   | |||||||
| @@ -118,6 +118,37 @@ container_real_remove (ClutterContainer *container, | |||||||
|   clutter_actor_remove_child (CLUTTER_ACTOR (container), actor); |   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 | static void | ||||||
| container_real_raise (ClutterContainer *container, | container_real_raise (ClutterContainer *container, | ||||||
|                       ClutterActor     *child, |                       ClutterActor     *child, | ||||||
| @@ -212,6 +243,7 @@ clutter_container_default_init (ClutterContainerInterface *iface) | |||||||
|  |  | ||||||
|   iface->add = container_real_add; |   iface->add = container_real_add; | ||||||
|   iface->remove = container_real_remove; |   iface->remove = container_real_remove; | ||||||
|  |   iface->foreach = container_real_foreach; | ||||||
|   iface->raise = container_real_raise; |   iface->raise = container_real_raise; | ||||||
|   iface->lower = container_real_lower; |   iface->lower = container_real_lower; | ||||||
|   iface->sort_depth_order = container_real_sort_depth_order; |   iface->sort_depth_order = container_real_sort_depth_order; | ||||||
| @@ -384,6 +416,33 @@ clutter_container_add_actor (ClutterContainer *container, | |||||||
|   container_add_actor (container, actor); |   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) |  * clutter_container_remove: (skip) | ||||||
|  * @container: a #ClutterContainer |  * @container: a #ClutterContainer | ||||||
| @@ -447,6 +506,42 @@ clutter_container_remove_actor (ClutterContainer *container, | |||||||
|   container_remove_actor (container, actor); |   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: |  * clutter_container_get_children: | ||||||
|  * @container: a #ClutterContainer |  * @container: a #ClutterContainer | ||||||
| @@ -464,9 +559,108 @@ clutter_container_remove_actor (ClutterContainer *container, | |||||||
| GList * | GList * | ||||||
| clutter_container_get_children (ClutterContainer *container) | clutter_container_get_children (ClutterContainer *container) | ||||||
| { | { | ||||||
|  |   GList *retval; | ||||||
|  |  | ||||||
|   g_return_val_if_fail (CLUTTER_IS_CONTAINER (container), NULL); |   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); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|   | |||||||
| @@ -59,6 +59,14 @@ typedef struct _ClutterContainerIface   ClutterContainerIface; | |||||||
|  *   function is deprecated, and it should not be overridden. |  *   function is deprecated, and it should not be overridden. | ||||||
|  * @remove: virtual function for removing an actor from the container. This |  * @remove: virtual function for removing an actor from the container. This | ||||||
|  *   virtual function is deprecated, and it should not be overridden. |  *   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 |  * @raise: virtual function for raising a child. This virtual function is | ||||||
|  *   deprecated and it should not be overridden. |  *   deprecated and it should not be overridden. | ||||||
|  * @lower: virtual function for lowering a child. This virtual function is |  * @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 |  * @actor_removed: class handler for #ClutterContainer::actor-removed | ||||||
|  * @child_notify: class handler for #ClutterContainer::child-notify |  * @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 must be provided by any implementation; the other | ||||||
|  * virtual functions are optional. |  * virtual functions are optional. | ||||||
|  * |  * | ||||||
| @@ -96,6 +104,13 @@ struct _ClutterContainerIface | |||||||
|                              ClutterActor     *actor); |                              ClutterActor     *actor); | ||||||
|   void (* remove)           (ClutterContainer *container, |   void (* remove)           (ClutterContainer *container, | ||||||
|                              ClutterActor     *actor); |                              ClutterActor     *actor); | ||||||
|  |   void (* foreach)          (ClutterContainer *container, | ||||||
|  |                              ClutterCallback   callback, | ||||||
|  |                              gpointer          user_data); | ||||||
|  |  | ||||||
|  |   void (* foreach_with_internals) (ClutterContainer *container, | ||||||
|  |                                    ClutterCallback   callback, | ||||||
|  |                                    gpointer          user_data); | ||||||
|  |  | ||||||
|   /* child stacking */ |   /* child stacking */ | ||||||
|   void (* raise)            (ClutterContainer *container, |   void (* raise)            (ClutterContainer *container, | ||||||
|   | |||||||
| @@ -34,10 +34,9 @@ void            _clutter_content_attached               (ClutterContent   *conte | |||||||
| void            _clutter_content_detached               (ClutterContent   *content, | void            _clutter_content_detached               (ClutterContent   *content, | ||||||
|                                                          ClutterActor     *actor); |                                                          ClutterActor     *actor); | ||||||
|  |  | ||||||
| void            _clutter_content_paint_content          (ClutterContent      *content, | void            _clutter_content_paint_content          (ClutterContent   *content, | ||||||
|                                                          ClutterActor        *actor, |                                                          ClutterActor     *actor, | ||||||
|                                                          ClutterPaintNode    *node, |                                                          ClutterPaintNode *node); | ||||||
|                                                          ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -96,10 +96,9 @@ clutter_content_real_invalidate_size (ClutterContent *content) | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_content_real_paint_content (ClutterContent      *content, | clutter_content_real_paint_content (ClutterContent   *content, | ||||||
|                                     ClutterActor        *actor, |                                     ClutterActor     *actor, | ||||||
|                                     ClutterPaintNode    *context, |                                     ClutterPaintNode *context) | ||||||
|                                     ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -301,8 +300,7 @@ _clutter_content_detached (ClutterContent *content, | |||||||
|  * _clutter_content_paint_content: |  * _clutter_content_paint_content: | ||||||
|  * @content: a #ClutterContent |  * @content: a #ClutterContent | ||||||
|  * @actor: a #ClutterActor |  * @actor: a #ClutterActor | ||||||
|  * @node: a #ClutterPaintNode |  * @context: a #ClutterPaintNode | ||||||
|  * @paint_context: a #ClutterPaintContext |  | ||||||
|  * |  * | ||||||
|  * Creates the render tree for the @content and @actor. |  * Creates the render tree for the @content and @actor. | ||||||
|  * |  * | ||||||
| @@ -310,13 +308,11 @@ _clutter_content_detached (ClutterContent *content, | |||||||
|  * virtual function. |  * virtual function. | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| _clutter_content_paint_content (ClutterContent      *content, | _clutter_content_paint_content (ClutterContent   *content, | ||||||
|                                 ClutterActor        *actor, |                                 ClutterActor     *actor, | ||||||
|                                 ClutterPaintNode    *node, |                                 ClutterPaintNode *node) | ||||||
|                                 ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   CLUTTER_CONTENT_GET_IFACE (content)->paint_content (content, actor, node, |   CLUTTER_CONTENT_GET_IFACE (content)->paint_content (content, actor, node); | ||||||
|                                                       paint_context); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|   | |||||||
| @@ -65,10 +65,9 @@ struct _ClutterContentInterface | |||||||
|   gboolean      (* get_preferred_size)  (ClutterContent   *content, |   gboolean      (* get_preferred_size)  (ClutterContent   *content, | ||||||
|                                          gfloat           *width, |                                          gfloat           *width, | ||||||
|                                          gfloat           *height); |                                          gfloat           *height); | ||||||
|   void          (* paint_content)       (ClutterContent      *content, |   void          (* paint_content)       (ClutterContent   *content, | ||||||
|                                          ClutterActor        *actor, |                                          ClutterActor     *actor, | ||||||
|                                          ClutterPaintNode    *node, |                                          ClutterPaintNode *node); | ||||||
|                                          ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
|   void          (* attached)            (ClutterContent   *content, |   void          (* attached)            (ClutterContent   *content, | ||||||
|                                          ClutterActor     *actor); |                                          ClutterActor     *actor); | ||||||
|   | |||||||
| @@ -6,6 +6,45 @@ | |||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   CLUTTER_DEBUG_MISC                = 1 << 0, | ||||||
|  |   CLUTTER_DEBUG_ACTOR               = 1 << 1, | ||||||
|  |   CLUTTER_DEBUG_TEXTURE             = 1 << 2, | ||||||
|  |   CLUTTER_DEBUG_EVENT               = 1 << 3, | ||||||
|  |   CLUTTER_DEBUG_PAINT               = 1 << 4, | ||||||
|  |   CLUTTER_DEBUG_PANGO               = 1 << 5, | ||||||
|  |   CLUTTER_DEBUG_BACKEND             = 1 << 6, | ||||||
|  |   CLUTTER_DEBUG_SCHEDULER           = 1 << 7, | ||||||
|  |   CLUTTER_DEBUG_SCRIPT              = 1 << 8, | ||||||
|  |   CLUTTER_DEBUG_SHADER              = 1 << 9, | ||||||
|  |   CLUTTER_DEBUG_MULTISTAGE          = 1 << 10, | ||||||
|  |   CLUTTER_DEBUG_ANIMATION           = 1 << 11, | ||||||
|  |   CLUTTER_DEBUG_LAYOUT              = 1 << 12, | ||||||
|  |   CLUTTER_DEBUG_PICK                = 1 << 13, | ||||||
|  |   CLUTTER_DEBUG_EVENTLOOP           = 1 << 14, | ||||||
|  |   CLUTTER_DEBUG_CLIPPING            = 1 << 15, | ||||||
|  |   CLUTTER_DEBUG_OOB_TRANSFORMS      = 1 << 16 | ||||||
|  | } ClutterDebugFlag; | ||||||
|  |  | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   CLUTTER_DEBUG_NOP_PICKING         = 1 << 0, | ||||||
|  | } ClutterPickDebugFlag; | ||||||
|  |  | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   CLUTTER_DEBUG_DISABLE_SWAP_EVENTS     = 1 << 0, | ||||||
|  |   CLUTTER_DEBUG_DISABLE_CLIPPED_REDRAWS = 1 << 1, | ||||||
|  |   CLUTTER_DEBUG_REDRAWS                 = 1 << 2, | ||||||
|  |   CLUTTER_DEBUG_PAINT_VOLUMES           = 1 << 3, | ||||||
|  |   CLUTTER_DEBUG_DISABLE_CULLING         = 1 << 4, | ||||||
|  |   CLUTTER_DEBUG_DISABLE_OFFSCREEN_REDIRECT = 1 << 5, | ||||||
|  |   CLUTTER_DEBUG_CONTINUOUS_REDRAW       = 1 << 6, | ||||||
|  |   CLUTTER_DEBUG_PAINT_DEFORM_TILES      = 1 << 7, | ||||||
|  |   CLUTTER_DEBUG_PAINT_DAMAGE_REGION     = 1 << 8, | ||||||
|  | } ClutterDrawDebugFlag; | ||||||
|  |  | ||||||
| #ifdef CLUTTER_ENABLE_DEBUG | #ifdef CLUTTER_ENABLE_DEBUG | ||||||
|  |  | ||||||
| #define CLUTTER_HAS_DEBUG(type)         ((clutter_debug_flags & CLUTTER_DEBUG_##type) != FALSE) | #define CLUTTER_HAS_DEBUG(type)         ((clutter_debug_flags & CLUTTER_DEBUG_##type) != FALSE) | ||||||
|   | |||||||
| @@ -147,7 +147,7 @@ clutter_deform_effect_set_actor (ClutterActorMeta *meta, | |||||||
|       ClutterActor *old_actor = clutter_actor_meta_get_actor (meta); |       ClutterActor *old_actor = clutter_actor_meta_get_actor (meta); | ||||||
|  |  | ||||||
|       if (old_actor != NULL) |       if (old_actor != NULL) | ||||||
|         g_clear_signal_handler (&priv->allocation_id, old_actor); |         g_signal_handler_disconnect (old_actor, priv->allocation_id); | ||||||
|  |  | ||||||
|       priv->allocation_id = 0; |       priv->allocation_id = 0; | ||||||
|     } |     } | ||||||
| @@ -166,20 +166,18 @@ clutter_deform_effect_set_actor (ClutterActorMeta *meta, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect, | clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                     ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterDeformEffect *self= CLUTTER_DEFORM_EFFECT (effect); |   ClutterDeformEffect *self= CLUTTER_DEFORM_EFFECT (effect); | ||||||
|   ClutterDeformEffectPrivate *priv = self->priv; |   ClutterDeformEffectPrivate *priv = self->priv; | ||||||
|   CoglHandle material; |   CoglHandle material; | ||||||
|   CoglPipeline *pipeline; |   CoglPipeline *pipeline; | ||||||
|   CoglDepthState depth_state; |   CoglDepthState depth_state; | ||||||
|   CoglFramebuffer *fb = |   CoglFramebuffer *fb = cogl_get_draw_framebuffer (); | ||||||
|     clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|  |  | ||||||
|   if (priv->is_dirty) |   if (priv->is_dirty) | ||||||
|     { |     { | ||||||
|       graphene_rect_t rect; |       ClutterRect rect; | ||||||
|       gboolean mapped_buffer; |       gboolean mapped_buffer; | ||||||
|       CoglVertexP3T2C4 *verts; |       CoglVertexP3T2C4 *verts; | ||||||
|       ClutterActor *actor; |       ClutterActor *actor; | ||||||
| @@ -195,8 +193,8 @@ clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect, | |||||||
|        */ |        */ | ||||||
|       if (clutter_offscreen_effect_get_target_rect (effect, &rect)) |       if (clutter_offscreen_effect_get_target_rect (effect, &rect)) | ||||||
|         { |         { | ||||||
|           width = graphene_rect_get_width (&rect); |           width = clutter_rect_get_width (&rect); | ||||||
|           height = graphene_rect_get_height (&rect); |           height = clutter_rect_get_height (&rect); | ||||||
|         } |         } | ||||||
|       else |       else | ||||||
|         clutter_actor_get_size (actor, &width, &height); |         clutter_actor_get_size (actor, &width, &height); | ||||||
|   | |||||||
| @@ -5,13 +5,24 @@ | |||||||
|  |  | ||||||
| #include "deprecated/clutter-actor.h" | #include "deprecated/clutter-actor.h" | ||||||
| #include "deprecated/clutter-alpha.h" | #include "deprecated/clutter-alpha.h" | ||||||
|  | #include "deprecated/clutter-animatable.h" | ||||||
| #include "deprecated/clutter-animation.h" | #include "deprecated/clutter-animation.h" | ||||||
|  | #include "deprecated/clutter-behaviour.h" | ||||||
|  | #include "deprecated/clutter-behaviour-depth.h" | ||||||
|  | #include "deprecated/clutter-behaviour-opacity.h" | ||||||
|  | #include "deprecated/clutter-behaviour-scale.h" | ||||||
|  | #include "deprecated/clutter-bin-layout.h" | ||||||
| #include "deprecated/clutter-box.h" | #include "deprecated/clutter-box.h" | ||||||
|  | #include "deprecated/clutter-cairo-texture.h" | ||||||
| #include "deprecated/clutter-container.h" | #include "deprecated/clutter-container.h" | ||||||
| #include "deprecated/clutter-group.h" | #include "deprecated/clutter-group.h" | ||||||
|  | #include "deprecated/clutter-keysyms.h" | ||||||
| #include "deprecated/clutter-rectangle.h" | #include "deprecated/clutter-rectangle.h" | ||||||
|  | #include "deprecated/clutter-stage-manager.h" | ||||||
| #include "deprecated/clutter-stage.h" | #include "deprecated/clutter-stage.h" | ||||||
| #include "deprecated/clutter-state.h" | #include "deprecated/clutter-state.h" | ||||||
|  | #include "deprecated/clutter-table-layout.h" | ||||||
|  | #include "deprecated/clutter-texture.h" | ||||||
| #include "deprecated/clutter-timeline.h" | #include "deprecated/clutter-timeline.h" | ||||||
|  |  | ||||||
| #undef __CLUTTER_DEPRECATED_H_INSIDE__ | #undef __CLUTTER_DEPRECATED_H_INSIDE__ | ||||||
|   | |||||||
| @@ -112,8 +112,7 @@ G_DEFINE_TYPE (ClutterDesaturateEffect, | |||||||
|                CLUTTER_TYPE_OFFSCREEN_EFFECT); |                CLUTTER_TYPE_OFFSCREEN_EFFECT); | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_desaturate_effect_pre_paint (ClutterEffect       *effect, | clutter_desaturate_effect_pre_paint (ClutterEffect *effect) | ||||||
|                                      ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterDesaturateEffect *self = CLUTTER_DESATURATE_EFFECT (effect); |   ClutterDesaturateEffect *self = CLUTTER_DESATURATE_EFFECT (effect); | ||||||
|   ClutterEffectClass *parent_class; |   ClutterEffectClass *parent_class; | ||||||
| @@ -134,7 +133,7 @@ clutter_desaturate_effect_pre_paint (ClutterEffect       *effect, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|   parent_class = CLUTTER_EFFECT_CLASS (clutter_desaturate_effect_parent_class); |   parent_class = CLUTTER_EFFECT_CLASS (clutter_desaturate_effect_parent_class); | ||||||
|   if (parent_class->pre_paint (effect, paint_context)) |   if (parent_class->pre_paint (effect)) | ||||||
|     { |     { | ||||||
|       ClutterOffscreenEffect *offscreen_effect = |       ClutterOffscreenEffect *offscreen_effect = | ||||||
|         CLUTTER_OFFSCREEN_EFFECT (effect); |         CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
| @@ -153,12 +152,10 @@ clutter_desaturate_effect_pre_paint (ClutterEffect       *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_desaturate_effect_paint_target (ClutterOffscreenEffect *effect, | clutter_desaturate_effect_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                         ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterDesaturateEffect *self = CLUTTER_DESATURATE_EFFECT (effect); |   ClutterDesaturateEffect *self = CLUTTER_DESATURATE_EFFECT (effect); | ||||||
|   CoglFramebuffer *framebuffer = |   CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); | ||||||
|    clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|   ClutterActor *actor; |   ClutterActor *actor; | ||||||
|   CoglHandle texture; |   CoglHandle texture; | ||||||
|   guint8 paint_opacity; |   guint8 paint_opacity; | ||||||
|   | |||||||
							
								
								
									
										306
									
								
								clutter/clutter/clutter-device-manager-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										306
									
								
								clutter/clutter/clutter-device-manager-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,306 @@ | |||||||
|  | /* | ||||||
|  |  * Clutter. | ||||||
|  |  * | ||||||
|  |  * An OpenGL based 'interactive canvas' library. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2010  Intel Corporation. | ||||||
|  |  * | ||||||
|  |  * 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/>. | ||||||
|  |  * | ||||||
|  |  * Author: | ||||||
|  |  *   Emmanuele Bassi <ebassi@linux.intel.com> | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef __CLUTTER_DEVICE_MANAGER_PRIVATE_H__ | ||||||
|  | #define __CLUTTER_DEVICE_MANAGER_PRIVATE_H__ | ||||||
|  |  | ||||||
|  | #include <clutter/clutter-backend.h> | ||||||
|  | #include <clutter/clutter-device-manager.h> | ||||||
|  | #include <clutter/clutter-event.h> | ||||||
|  |  | ||||||
|  | G_BEGIN_DECLS | ||||||
|  |  | ||||||
|  | typedef struct _ClutterAxisInfo | ||||||
|  | { | ||||||
|  |   ClutterInputAxis axis; | ||||||
|  |  | ||||||
|  |   gdouble min_axis; | ||||||
|  |   gdouble max_axis; | ||||||
|  |  | ||||||
|  |   gdouble min_value; | ||||||
|  |   gdouble max_value; | ||||||
|  |  | ||||||
|  |   gdouble resolution; | ||||||
|  | } ClutterAxisInfo; | ||||||
|  |  | ||||||
|  | typedef struct _ClutterKeyInfo | ||||||
|  | { | ||||||
|  |   guint keyval; | ||||||
|  |   ClutterModifierType modifiers; | ||||||
|  | } ClutterKeyInfo; | ||||||
|  |  | ||||||
|  | typedef struct _ClutterScrollInfo | ||||||
|  | { | ||||||
|  |   guint axis_id; | ||||||
|  |   ClutterScrollDirection direction; | ||||||
|  |   gdouble increment; | ||||||
|  |  | ||||||
|  |   gdouble last_value; | ||||||
|  |   guint last_value_valid : 1; | ||||||
|  | } ClutterScrollInfo; | ||||||
|  |  | ||||||
|  | typedef struct _ClutterTouchInfo | ||||||
|  | { | ||||||
|  |   ClutterEventSequence *sequence; | ||||||
|  |   ClutterActor *actor; | ||||||
|  |  | ||||||
|  |   gfloat current_x; | ||||||
|  |   gfloat current_y; | ||||||
|  | } ClutterTouchInfo; | ||||||
|  |  | ||||||
|  | typedef struct _ClutterPtrA11yData | ||||||
|  | { | ||||||
|  |   int n_btn_pressed; | ||||||
|  |   float current_x; | ||||||
|  |   float current_y; | ||||||
|  |  | ||||||
|  |   float dwell_x; | ||||||
|  |   float dwell_y; | ||||||
|  |   gboolean dwell_drag_started; | ||||||
|  |   gboolean dwell_gesture_started; | ||||||
|  |   guint dwell_timer; | ||||||
|  |   guint dwell_position_timer; | ||||||
|  |  | ||||||
|  |   guint secondary_click_timer; | ||||||
|  |   gboolean secondary_click_triggered; | ||||||
|  | } ClutterPtrA11yData; | ||||||
|  |  | ||||||
|  | struct _ClutterInputDevice | ||||||
|  | { | ||||||
|  |   GObject parent_instance; | ||||||
|  |  | ||||||
|  |   gint id; | ||||||
|  |  | ||||||
|  |   ClutterInputDeviceType device_type; | ||||||
|  |   ClutterInputMode device_mode; | ||||||
|  |  | ||||||
|  |   gchar *device_name; | ||||||
|  |  | ||||||
|  |   ClutterDeviceManager *device_manager; | ||||||
|  |  | ||||||
|  |   ClutterBackend *backend; | ||||||
|  |  | ||||||
|  |   /* the associated device */ | ||||||
|  |   ClutterInputDevice *associated; | ||||||
|  |  | ||||||
|  |   GList *slaves; | ||||||
|  |  | ||||||
|  |   /* the actor underneath the pointer */ | ||||||
|  |   ClutterActor *cursor_actor; | ||||||
|  |   GHashTable   *inv_touch_sequence_actors; | ||||||
|  |  | ||||||
|  |   /* the actor that has a grab in place for the device */ | ||||||
|  |   ClutterActor *pointer_grab_actor; | ||||||
|  |   ClutterActor *keyboard_grab_actor; | ||||||
|  |   GHashTable   *sequence_grab_actors; | ||||||
|  |   GHashTable   *inv_sequence_grab_actors; | ||||||
|  |  | ||||||
|  |   /* the current click count */ | ||||||
|  |   gint click_count; | ||||||
|  |  | ||||||
|  |   /* the stage the device is on */ | ||||||
|  |   ClutterStage *stage; | ||||||
|  |  | ||||||
|  |   /* the current state */ | ||||||
|  |   gfloat current_x; | ||||||
|  |   gfloat current_y; | ||||||
|  |   guint32 current_time; | ||||||
|  |   gint current_button_number; | ||||||
|  |   ClutterModifierType current_state; | ||||||
|  |  | ||||||
|  |   /* the current touch points states */ | ||||||
|  |   GHashTable *touch_sequences_info; | ||||||
|  |  | ||||||
|  |   /* the previous state, used for click count generation */ | ||||||
|  |   gint previous_x; | ||||||
|  |   gint previous_y; | ||||||
|  |   guint32 previous_time; | ||||||
|  |   gint previous_button_number; | ||||||
|  |   ClutterModifierType previous_state; | ||||||
|  |  | ||||||
|  |   GArray *axes; | ||||||
|  |  | ||||||
|  |   guint n_keys; | ||||||
|  |   GArray *keys; | ||||||
|  |  | ||||||
|  |   GArray *scroll_info; | ||||||
|  |  | ||||||
|  |   gchar *vendor_id; | ||||||
|  |   gchar *product_id; | ||||||
|  |   gchar *node_path; | ||||||
|  |  | ||||||
|  |   GPtrArray *tools; | ||||||
|  |  | ||||||
|  |   gint n_rings; | ||||||
|  |   gint n_strips; | ||||||
|  |   gint n_mode_groups; | ||||||
|  |  | ||||||
|  |   ClutterInputDeviceMapping mapping_mode; | ||||||
|  |  | ||||||
|  |   guint has_cursor : 1; | ||||||
|  |   guint is_enabled : 1; | ||||||
|  |  | ||||||
|  |   /* Accessiblity */ | ||||||
|  |   ClutterVirtualInputDevice *accessibility_virtual_device; | ||||||
|  |   ClutterPtrA11yData *ptr_a11y_data; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | typedef void (*ClutterEmitInputDeviceEvent) (ClutterEvent       *event, | ||||||
|  |                                              ClutterInputDevice *device); | ||||||
|  |  | ||||||
|  | struct _ClutterInputDeviceClass | ||||||
|  | { | ||||||
|  |   GObjectClass parent_class; | ||||||
|  |  | ||||||
|  |   gboolean (* keycode_to_evdev) (ClutterInputDevice *device, | ||||||
|  |                                  guint               hardware_keycode, | ||||||
|  |                                  guint              *evdev_keycode); | ||||||
|  |   void (* update_from_tool) (ClutterInputDevice     *device, | ||||||
|  |                              ClutterInputDeviceTool *tool); | ||||||
|  |  | ||||||
|  |   gboolean (* is_mode_switch_button) (ClutterInputDevice *device, | ||||||
|  |                                       guint               group, | ||||||
|  |                                       guint               button); | ||||||
|  |   gint (* get_group_n_modes) (ClutterInputDevice *device, | ||||||
|  |                               gint                group); | ||||||
|  |  | ||||||
|  |   gboolean (* is_grouped) (ClutterInputDevice *device, | ||||||
|  |                            ClutterInputDevice *other_device); | ||||||
|  |  | ||||||
|  |   /* Keyboard accessbility */ | ||||||
|  |   void (* process_kbd_a11y_event) (ClutterEvent               *event, | ||||||
|  |                                    ClutterInputDevice         *device, | ||||||
|  |                                    ClutterEmitInputDeviceEvent emit_event_func); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* device manager */ | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_device_manager_add_device              (ClutterDeviceManager *device_manager, | ||||||
|  |                                                                  ClutterInputDevice   *device); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_device_manager_remove_device           (ClutterDeviceManager *device_manager, | ||||||
|  |                                                                  ClutterInputDevice   *device); | ||||||
|  | void            _clutter_device_manager_update_devices          (ClutterDeviceManager *device_manager); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_device_manager_select_stage_events     (ClutterDeviceManager *device_manager, | ||||||
|  |                                                                  ClutterStage         *stage); | ||||||
|  | ClutterBackend *_clutter_device_manager_get_backend             (ClutterDeviceManager *device_manager); | ||||||
|  |  | ||||||
|  | void            _clutter_device_manager_compress_motion         (ClutterDeviceManager *device_manger, | ||||||
|  |                                                                  ClutterEvent         *event, | ||||||
|  |                                                                  const ClutterEvent   *to_discard); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            clutter_device_manager_ensure_a11y_state        (ClutterDeviceManager *device_manager); | ||||||
|  |  | ||||||
|  | /* input device */ | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | gboolean        _clutter_input_device_has_sequence              (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterEventSequence *sequence); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_add_event_sequence        (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterEvent         *event); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_remove_event_sequence     (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterEvent         *event); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_set_coords                (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterEventSequence *sequence, | ||||||
|  |                                                                  gfloat                x, | ||||||
|  |                                                                  gfloat                y, | ||||||
|  |                                                                  ClutterStage         *stage); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_set_state                 (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterModifierType   state); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_set_time                  (ClutterInputDevice   *device, | ||||||
|  |                                                                  guint32               time_); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_set_stage                 (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterStage         *stage); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterStage *  _clutter_input_device_get_stage                 (ClutterInputDevice   *device); | ||||||
|  | void            _clutter_input_device_set_actor                 (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterEventSequence *sequence, | ||||||
|  |                                                                  ClutterActor         *actor, | ||||||
|  |                                                                  gboolean              emit_crossing); | ||||||
|  | ClutterActor *  _clutter_input_device_update                    (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterEventSequence *sequence, | ||||||
|  |                                                                  gboolean              emit_crossing); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_set_n_keys                (ClutterInputDevice   *device, | ||||||
|  |                                                                  guint                 n_keys); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | guint           _clutter_input_device_add_axis                  (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterInputAxis      axis, | ||||||
|  |                                                                  gdouble               min_value, | ||||||
|  |                                                                  gdouble               max_value, | ||||||
|  |                                                                  gdouble               resolution); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_reset_axes                (ClutterInputDevice   *device); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_set_associated_device     (ClutterInputDevice   *device, | ||||||
|  |                                                                  ClutterInputDevice   *associated); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_add_slave                 (ClutterInputDevice   *master, | ||||||
|  |                                                                  ClutterInputDevice   *slave); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_remove_slave              (ClutterInputDevice   *master, | ||||||
|  |                                                                  ClutterInputDevice   *slave); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | gboolean        _clutter_input_device_translate_axis            (ClutterInputDevice   *device, | ||||||
|  |                                                                  guint                 index_, | ||||||
|  |                                                                  gdouble               value, | ||||||
|  |                                                                  gdouble              *axis_value); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_add_scroll_info           (ClutterInputDevice   *device, | ||||||
|  |                                                                  guint                 index_, | ||||||
|  |                                                                  ClutterScrollDirection direction, | ||||||
|  |                                                                  gdouble               increment); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            _clutter_input_device_reset_scroll_info         (ClutterInputDevice   *device); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | gboolean        _clutter_input_device_get_scroll_delta          (ClutterInputDevice   *device, | ||||||
|  |                                                                  guint                 index_, | ||||||
|  |                                                                  gdouble               value, | ||||||
|  |                                                                  ClutterScrollDirection *direction_p, | ||||||
|  |                                                                  gdouble                *delta_p); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterInputDeviceTool * clutter_input_device_lookup_tool       (ClutterInputDevice         *device, | ||||||
|  |                                                                  guint64                     serial, | ||||||
|  |                                                                  ClutterInputDeviceToolType  type); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            clutter_input_device_add_tool                   (ClutterInputDevice     *device, | ||||||
|  |                                                                  ClutterInputDeviceTool *tool); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void            clutter_input_device_update_from_tool           (ClutterInputDevice     *device, | ||||||
|  |                                                                  ClutterInputDeviceTool *tool); | ||||||
|  |  | ||||||
|  | G_END_DECLS | ||||||
|  |  | ||||||
|  | #endif /* __CLUTTER_DEVICE_MANAGER_PRIVATE_H__ */ | ||||||
							
								
								
									
										753
									
								
								clutter/clutter/clutter-device-manager.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										753
									
								
								clutter/clutter/clutter-device-manager.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,753 @@ | |||||||
|  | /* | ||||||
|  |  * Clutter. | ||||||
|  |  * | ||||||
|  |  * An OpenGL based 'interactive canvas' library. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2009  Intel Corp. | ||||||
|  |  * | ||||||
|  |  * 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/>. | ||||||
|  |  * | ||||||
|  |  * Author: Emmanuele Bassi <ebassi@linux.intel.com> | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * SECTION:clutter-device-manager | ||||||
|  |  * @short_description: Maintains the list of input devices | ||||||
|  |  * | ||||||
|  |  * #ClutterDeviceManager is a singleton object, owned by Clutter, which | ||||||
|  |  * maintains the list of #ClutterInputDevice<!-- -->s. | ||||||
|  |  * | ||||||
|  |  * Depending on the backend used by Clutter it is possible to use the | ||||||
|  |  * #ClutterDeviceManager::device-added and | ||||||
|  |  * #ClutterDeviceManager::device-removed to monitor addition and removal | ||||||
|  |  * of devices. | ||||||
|  |  * | ||||||
|  |  * #ClutterDeviceManager is available since Clutter 1.2 | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "clutter-build-config.h" | ||||||
|  |  | ||||||
|  | #include "clutter-backend-private.h" | ||||||
|  | #include "clutter-debug.h" | ||||||
|  | #include "clutter-device-manager-private.h" | ||||||
|  | #include "clutter-enum-types.h" | ||||||
|  | #include "clutter-marshal.h" | ||||||
|  | #include "clutter-private.h" | ||||||
|  | #include "clutter-stage-private.h" | ||||||
|  | #include "clutter-virtual-input-device.h" | ||||||
|  | #include "clutter-input-device-tool.h" | ||||||
|  | #include "clutter-input-pointer-a11y-private.h" | ||||||
|  |  | ||||||
|  | struct _ClutterDeviceManagerPrivate | ||||||
|  | { | ||||||
|  |   /* back-pointer to the backend */ | ||||||
|  |   ClutterBackend *backend; | ||||||
|  |  | ||||||
|  |   /* Keyboard a11y */ | ||||||
|  |   ClutterKbdA11ySettings kbd_a11y_settings; | ||||||
|  |   /* Pointer a11y */ | ||||||
|  |   ClutterPointerA11ySettings pointer_a11y_settings; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | enum | ||||||
|  | { | ||||||
|  |   PROP_0, | ||||||
|  |  | ||||||
|  |   PROP_BACKEND, | ||||||
|  |  | ||||||
|  |   PROP_LAST | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static GParamSpec *obj_props[PROP_LAST]; | ||||||
|  |  | ||||||
|  | enum | ||||||
|  | { | ||||||
|  |   DEVICE_ADDED, | ||||||
|  |   DEVICE_REMOVED, | ||||||
|  |   TOOL_CHANGED, | ||||||
|  |   KBD_A11Y_MASK_CHANGED, | ||||||
|  |   KBD_A11Y_FLAGS_CHANGED, | ||||||
|  |   PTR_A11Y_DWELL_CLICK_TYPE_CHANGED, | ||||||
|  |   PTR_A11Y_TIMEOUT_STARTED, | ||||||
|  |   PTR_A11Y_TIMEOUT_STOPPED, | ||||||
|  |  | ||||||
|  |   LAST_SIGNAL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static guint manager_signals[LAST_SIGNAL] = { 0, }; | ||||||
|  |  | ||||||
|  | G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterDeviceManager, | ||||||
|  |                                      clutter_device_manager, | ||||||
|  |                                      G_TYPE_OBJECT) | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | clutter_device_manager_set_property (GObject      *gobject, | ||||||
|  |                                      guint         prop_id, | ||||||
|  |                                      const GValue *value, | ||||||
|  |                                      GParamSpec   *pspec) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManager *self = CLUTTER_DEVICE_MANAGER (gobject); | ||||||
|  |   ClutterDeviceManagerPrivate *priv = clutter_device_manager_get_instance_private (self); | ||||||
|  |  | ||||||
|  |   switch (prop_id) | ||||||
|  |     { | ||||||
|  |     case PROP_BACKEND: | ||||||
|  |       priv->backend = g_value_get_object (value); | ||||||
|  |       break; | ||||||
|  |  | ||||||
|  |     default: | ||||||
|  |       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | clutter_device_manager_get_property (GObject    *gobject, | ||||||
|  |                                      guint       prop_id, | ||||||
|  |                                      GValue     *value, | ||||||
|  |                                      GParamSpec *pspec) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManager *self = CLUTTER_DEVICE_MANAGER (gobject); | ||||||
|  |   ClutterDeviceManagerPrivate *priv = clutter_device_manager_get_instance_private (self); | ||||||
|  |  | ||||||
|  |   switch (prop_id) | ||||||
|  |     { | ||||||
|  |     case PROP_BACKEND: | ||||||
|  |       g_value_set_object (value, priv->backend); | ||||||
|  |       break; | ||||||
|  |  | ||||||
|  |     default: | ||||||
|  |       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | clutter_device_manager_class_init (ClutterDeviceManagerClass *klass) | ||||||
|  | { | ||||||
|  |   GObjectClass *gobject_class = G_OBJECT_CLASS (klass); | ||||||
|  |  | ||||||
|  |   obj_props[PROP_BACKEND] = | ||||||
|  |     g_param_spec_object ("backend", | ||||||
|  |                          P_("Backend"), | ||||||
|  |                          P_("The ClutterBackend of the device manager"), | ||||||
|  |                          CLUTTER_TYPE_BACKEND, | ||||||
|  |                          CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); | ||||||
|  |  | ||||||
|  |   gobject_class->set_property = clutter_device_manager_set_property; | ||||||
|  |   gobject_class->get_property = clutter_device_manager_get_property; | ||||||
|  |   g_object_class_install_properties (gobject_class, | ||||||
|  |                                      PROP_LAST, | ||||||
|  |                                      obj_props); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::device-added: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @device: the newly added #ClutterInputDevice | ||||||
|  |    * | ||||||
|  |    * The ::device-added signal is emitted each time a device has been | ||||||
|  |    * added to the #ClutterDeviceManager | ||||||
|  |    * | ||||||
|  |    * Since: 1.2 | ||||||
|  |    */ | ||||||
|  |   manager_signals[DEVICE_ADDED] = | ||||||
|  |     g_signal_new (I_("device-added"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, | ||||||
|  |                   NULL, NULL, NULL, | ||||||
|  |                   G_TYPE_NONE, 1, | ||||||
|  |                   CLUTTER_TYPE_INPUT_DEVICE); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::device-removed: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @device: the removed #ClutterInputDevice | ||||||
|  |    * | ||||||
|  |    * The ::device-removed signal is emitted each time a device has been | ||||||
|  |    * removed from the #ClutterDeviceManager | ||||||
|  |    * | ||||||
|  |    * Since: 1.2 | ||||||
|  |    */ | ||||||
|  |   manager_signals[DEVICE_REMOVED] = | ||||||
|  |     g_signal_new (I_("device-removed"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, | ||||||
|  |                   NULL, NULL, NULL, | ||||||
|  |                   G_TYPE_NONE, 1, | ||||||
|  |                   CLUTTER_TYPE_INPUT_DEVICE); | ||||||
|  |  | ||||||
|  |   manager_signals[TOOL_CHANGED] = | ||||||
|  |     g_signal_new (I_("tool-changed"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, NULL, NULL, | ||||||
|  |                   _clutter_marshal_VOID__OBJECT_OBJECT, | ||||||
|  |                   G_TYPE_NONE, 2, | ||||||
|  |                   CLUTTER_TYPE_INPUT_DEVICE, | ||||||
|  |                   CLUTTER_TYPE_INPUT_DEVICE_TOOL); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::kbd-a11y-mods-state-changed: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @latched_mask: the latched modifier mask from stickykeys | ||||||
|  |    * @locked_mask:  the locked modifier mask from stickykeys | ||||||
|  |    * | ||||||
|  |    * The ::kbd-a11y-mods-state-changed signal is emitted each time either the | ||||||
|  |    * latched modifiers mask or locked modifiers mask are changed as the | ||||||
|  |    * result of keyboard accessibilty's sticky keys operations. | ||||||
|  |    */ | ||||||
|  |   manager_signals[KBD_A11Y_MASK_CHANGED] = | ||||||
|  |     g_signal_new (I_("kbd-a11y-mods-state-changed"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, NULL, NULL, | ||||||
|  |                   _clutter_marshal_VOID__UINT_UINT, | ||||||
|  |                   G_TYPE_NONE, 2, | ||||||
|  |                   G_TYPE_UINT, | ||||||
|  |                   G_TYPE_UINT); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::kbd-a11y-flags-changed: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @settings_flags: the new ClutterKeyboardA11yFlags configuration | ||||||
|  |    * @changed_mask: the ClutterKeyboardA11yFlags changed | ||||||
|  |    * | ||||||
|  |    * The ::kbd-a11y-flags-changed signal is emitted each time the | ||||||
|  |    * ClutterKeyboardA11yFlags configuration is changed as the result of | ||||||
|  |    * keyboard accessibilty operations. | ||||||
|  |    */ | ||||||
|  |   manager_signals[KBD_A11Y_FLAGS_CHANGED] = | ||||||
|  |     g_signal_new (I_("kbd-a11y-flags-changed"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, NULL, NULL, | ||||||
|  |                   _clutter_marshal_VOID__UINT_UINT, | ||||||
|  |                   G_TYPE_NONE, 2, | ||||||
|  |                   G_TYPE_UINT, | ||||||
|  |                   G_TYPE_UINT); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::ptr-a11y-dwell-click-type-changed: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @click_type: the new #ClutterPointerA11yDwellClickType mode | ||||||
|  |    * | ||||||
|  |    * The ::ptr-a11y-dwell-click-type-changed signal is emitted each time | ||||||
|  |    * the ClutterPointerA11yDwellClickType mode is changed as the result | ||||||
|  |    * of pointer accessibility operations. | ||||||
|  |    */ | ||||||
|  |   manager_signals[PTR_A11Y_DWELL_CLICK_TYPE_CHANGED] = | ||||||
|  |     g_signal_new (I_("ptr-a11y-dwell-click-type-changed"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, NULL, NULL, | ||||||
|  |                   g_cclosure_marshal_VOID__FLAGS, | ||||||
|  |                   G_TYPE_NONE, 1, | ||||||
|  |                   CLUTTER_TYPE_POINTER_A11Y_DWELL_CLICK_TYPE); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::ptr-a11y-timeout-started: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @device: the core pointer #ClutterInputDevice | ||||||
|  |    * @timeout_type: the type of timeout #ClutterPointerA11yTimeoutType | ||||||
|  |    * @delay: the delay in ms before secondary-click is triggered. | ||||||
|  |    * | ||||||
|  |    * The ::ptr-a11y-timeout-started signal is emitted when a | ||||||
|  |    * pointer accessibility timeout delay is started, so that upper | ||||||
|  |    * layers can notify the user with some visual feedback. | ||||||
|  |    */ | ||||||
|  |   manager_signals[PTR_A11Y_TIMEOUT_STARTED] = | ||||||
|  |     g_signal_new (I_("ptr-a11y-timeout-started"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, NULL, NULL, | ||||||
|  |                   _clutter_marshal_VOID__OBJECT_FLAGS_UINT, | ||||||
|  |                   G_TYPE_NONE, 3, | ||||||
|  |                   CLUTTER_TYPE_INPUT_DEVICE, | ||||||
|  |                   CLUTTER_TYPE_POINTER_A11Y_TIMEOUT_TYPE, | ||||||
|  |                   G_TYPE_UINT); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * ClutterDeviceManager::ptr-a11y-timeout-stopped: | ||||||
|  |    * @manager: the #ClutterDeviceManager that emitted the signal | ||||||
|  |    * @device: the core pointer #ClutterInputDevice | ||||||
|  |    * @timeout_type: the type of timeout #ClutterPointerA11yTimeoutType | ||||||
|  |    * @clicked: %TRUE if the timeout finished and triggered a click | ||||||
|  |    * | ||||||
|  |    * The ::ptr-a11y-timeout-stopped signal is emitted when a running | ||||||
|  |    * pointer accessibility timeout delay is stopped, either because | ||||||
|  |    * it's triggered at the end of the delay or cancelled, so that | ||||||
|  |    * upper layers can notify the user with some visual feedback. | ||||||
|  |    */ | ||||||
|  |   manager_signals[PTR_A11Y_TIMEOUT_STOPPED] = | ||||||
|  |     g_signal_new (I_("ptr-a11y-timeout-stopped"), | ||||||
|  |                   G_TYPE_FROM_CLASS (klass), | ||||||
|  |                   G_SIGNAL_RUN_LAST, | ||||||
|  |                   0, NULL, NULL, | ||||||
|  |                   _clutter_marshal_VOID__OBJECT_FLAGS_BOOLEAN, | ||||||
|  |                   G_TYPE_NONE, 3, | ||||||
|  |                   CLUTTER_TYPE_INPUT_DEVICE, | ||||||
|  |                   CLUTTER_TYPE_POINTER_A11Y_TIMEOUT_TYPE, | ||||||
|  |                   G_TYPE_BOOLEAN); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | clutter_device_manager_init (ClutterDeviceManager *self) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_get_default: | ||||||
|  |  * | ||||||
|  |  * Retrieves the device manager singleton | ||||||
|  |  * | ||||||
|  |  * Return value: (transfer none): the #ClutterDeviceManager singleton. | ||||||
|  |  *   The returned instance is owned by Clutter and it should not be | ||||||
|  |  *   modified or freed | ||||||
|  |  * | ||||||
|  |  * Since: 1.2 | ||||||
|  |  */ | ||||||
|  | ClutterDeviceManager * | ||||||
|  | clutter_device_manager_get_default (void) | ||||||
|  | { | ||||||
|  |   ClutterBackend *backend = clutter_get_default_backend (); | ||||||
|  |  | ||||||
|  |   return CLUTTER_BACKEND_GET_CLASS (backend)->get_device_manager (backend); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_list_devices: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * | ||||||
|  |  * Lists all currently registered input devices | ||||||
|  |  * | ||||||
|  |  * Return value: (transfer container) (element-type Clutter.InputDevice): | ||||||
|  |  *   a newly allocated list of #ClutterInputDevice objects. Use | ||||||
|  |  *   g_slist_free() to deallocate it when done | ||||||
|  |  * | ||||||
|  |  * Since: 1.2 | ||||||
|  |  */ | ||||||
|  | GSList * | ||||||
|  | clutter_device_manager_list_devices (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   const GSList *devices; | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL); | ||||||
|  |  | ||||||
|  |   devices = clutter_device_manager_peek_devices (device_manager); | ||||||
|  |  | ||||||
|  |   return g_slist_copy ((GSList *) devices); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_peek_devices: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * | ||||||
|  |  * Lists all currently registered input devices | ||||||
|  |  * | ||||||
|  |  * Return value: (transfer none) (element-type Clutter.InputDevice): | ||||||
|  |  *   a pointer to the internal list of #ClutterInputDevice objects. The | ||||||
|  |  *   returned list is owned by the #ClutterDeviceManager and should never | ||||||
|  |  *   be modified or freed | ||||||
|  |  * | ||||||
|  |  * Since: 1.2 | ||||||
|  |  */ | ||||||
|  | const GSList * | ||||||
|  | clutter_device_manager_peek_devices (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   return manager_class->get_devices (device_manager); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_get_device: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @device_id: the integer id of a device | ||||||
|  |  * | ||||||
|  |  * Retrieves the #ClutterInputDevice with the given @device_id | ||||||
|  |  * | ||||||
|  |  * Return value: (transfer none): a #ClutterInputDevice or %NULL. The | ||||||
|  |  *   returned device is owned by the #ClutterDeviceManager and should | ||||||
|  |  *   never be modified or freed | ||||||
|  |  * | ||||||
|  |  * Since: 1.2 | ||||||
|  |  */ | ||||||
|  | ClutterInputDevice * | ||||||
|  | clutter_device_manager_get_device (ClutterDeviceManager *device_manager, | ||||||
|  |                                    gint                  device_id) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   return manager_class->get_device (device_manager, device_id); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_get_core_device: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @device_type: the type of the core device | ||||||
|  |  * | ||||||
|  |  * Retrieves the core #ClutterInputDevice of type @device_type | ||||||
|  |  * | ||||||
|  |  * Core devices are devices created automatically by the default | ||||||
|  |  * Clutter backend | ||||||
|  |  * | ||||||
|  |  * Return value: (transfer none): a #ClutterInputDevice or %NULL. The | ||||||
|  |  *   returned device is owned by the #ClutterDeviceManager and should | ||||||
|  |  *   not be modified or freed | ||||||
|  |  * | ||||||
|  |  * Since: 1.2 | ||||||
|  |  */ | ||||||
|  | ClutterInputDevice * | ||||||
|  | clutter_device_manager_get_core_device (ClutterDeviceManager   *device_manager, | ||||||
|  |                                         ClutterInputDeviceType  device_type) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   return manager_class->get_core_device (device_manager, device_type); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | _clutter_device_manager_select_stage_events (ClutterDeviceManager *device_manager, | ||||||
|  |                                              ClutterStage         *stage) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   if (manager_class->select_stage_events) | ||||||
|  |     manager_class->select_stage_events (device_manager, stage); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * _clutter_device_manager_add_device: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @device: a #ClutterInputDevice | ||||||
|  |  * | ||||||
|  |  * Adds @device to the list of #ClutterInputDevice<!-- -->s maintained | ||||||
|  |  * by @device_manager | ||||||
|  |  * | ||||||
|  |  * The reference count of @device is not increased | ||||||
|  |  * | ||||||
|  |  * The #ClutterDeviceManager::device-added signal is emitted after | ||||||
|  |  * adding @device to the list | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | _clutter_device_manager_add_device (ClutterDeviceManager *device_manager, | ||||||
|  |                                     ClutterInputDevice   *device) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   g_assert (manager_class->add_device != NULL); | ||||||
|  |  | ||||||
|  |   manager_class->add_device (device_manager, device); | ||||||
|  |  | ||||||
|  |   g_signal_emit (device_manager, manager_signals[DEVICE_ADDED], 0, device); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * _clutter_device_manager_remove_device: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @device: a #ClutterInputDevice | ||||||
|  |  * | ||||||
|  |  * Removes @device from the list of #ClutterInputDevice<!-- -->s | ||||||
|  |  * maintained by @device_manager | ||||||
|  |  * | ||||||
|  |  * The reference count of @device is not decreased | ||||||
|  |  * | ||||||
|  |  * The #ClutterDeviceManager::device-removed signal is emitted after | ||||||
|  |  * removing @device from the list | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | _clutter_device_manager_remove_device (ClutterDeviceManager *device_manager, | ||||||
|  |                                        ClutterInputDevice   *device) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   g_assert (manager_class->remove_device != NULL); | ||||||
|  |  | ||||||
|  |   /* The subclass remove_device() method will likely unref it but we | ||||||
|  |      have to keep it alive during the signal emission. */ | ||||||
|  |   g_object_ref (device); | ||||||
|  |  | ||||||
|  |   manager_class->remove_device (device_manager, device); | ||||||
|  |   g_signal_emit (device_manager, manager_signals[DEVICE_REMOVED], 0, device); | ||||||
|  |  | ||||||
|  |   g_object_unref (device); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * _clutter_device_manager_update_devices: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * | ||||||
|  |  * Updates every #ClutterInputDevice handled by @device_manager | ||||||
|  |  * by performing a pick paint at the coordinates of each pointer | ||||||
|  |  * device | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | _clutter_device_manager_update_devices (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   const GSList *d; | ||||||
|  |  | ||||||
|  |   for (d = clutter_device_manager_peek_devices (device_manager); | ||||||
|  |        d != NULL; | ||||||
|  |        d = d->next) | ||||||
|  |     { | ||||||
|  |       ClutterInputDevice *device = d->data; | ||||||
|  |       ClutterInputDeviceType device_type; | ||||||
|  |  | ||||||
|  |       /* we only care about pointer devices */ | ||||||
|  |       device_type = clutter_input_device_get_device_type (device); | ||||||
|  |       if (device_type != CLUTTER_POINTER_DEVICE) | ||||||
|  |         continue; | ||||||
|  |  | ||||||
|  |       /* out of stage */ | ||||||
|  |       if (device->stage == NULL) | ||||||
|  |         continue; | ||||||
|  |  | ||||||
|  |       /* the user disabled motion events delivery on actors for | ||||||
|  |        * the stage the device is on; we don't perform any picking | ||||||
|  |        * since the source of the events will always be set to be | ||||||
|  |        * the stage | ||||||
|  |        */ | ||||||
|  |       if (!clutter_stage_get_motion_events_enabled (device->stage)) | ||||||
|  |         continue; | ||||||
|  |  | ||||||
|  |       _clutter_input_device_update (device, NULL, TRUE); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ClutterBackend * | ||||||
|  | _clutter_device_manager_get_backend (ClutterDeviceManager *manager) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerPrivate *priv = clutter_device_manager_get_instance_private (manager); | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (manager), NULL); | ||||||
|  |  | ||||||
|  |   return priv->backend; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_create_virtual_device: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @device_type: the type of the virtual device | ||||||
|  |  * | ||||||
|  |  * Creates a virtual input device. | ||||||
|  |  * | ||||||
|  |  * Returns: (transfer full): a newly created virtual device | ||||||
|  |  **/ | ||||||
|  | ClutterVirtualInputDevice * | ||||||
|  | clutter_device_manager_create_virtual_device (ClutterDeviceManager   *device_manager, | ||||||
|  |                                               ClutterInputDeviceType  device_type) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   return manager_class->create_virtual_device (device_manager, | ||||||
|  |                                                device_type); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_supported_virtua_device_types: (skip) | ||||||
|  |  */ | ||||||
|  | ClutterVirtualDeviceType | ||||||
|  | clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), | ||||||
|  |                         CLUTTER_VIRTUAL_DEVICE_TYPE_NONE); | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   return manager_class->get_supported_virtual_device_types (device_manager); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager, | ||||||
|  |                                          ClutterEvent         *event, | ||||||
|  |                                          const ClutterEvent   *to_discard) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   if (!manager_class->compress_motion) | ||||||
|  |     return; | ||||||
|  |  | ||||||
|  |   manager_class->compress_motion (device_manager, event, to_discard); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | clutter_device_manager_ensure_a11y_state (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   ClutterInputDevice *core_pointer; | ||||||
|  |  | ||||||
|  |   core_pointer = clutter_device_manager_get_core_device (device_manager, | ||||||
|  |                                                          CLUTTER_POINTER_DEVICE); | ||||||
|  |   if (core_pointer) | ||||||
|  |     { | ||||||
|  |       if (_clutter_is_input_pointer_a11y_enabled (core_pointer)) | ||||||
|  |         _clutter_input_pointer_a11y_add_device (core_pointer); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static gboolean | ||||||
|  | are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a, | ||||||
|  |                              ClutterKbdA11ySettings *b) | ||||||
|  | { | ||||||
|  |   return (memcmp (a, b, sizeof (ClutterKbdA11ySettings)) == 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||||
|  |                                               ClutterKbdA11ySettings *settings) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerClass *manager_class; | ||||||
|  |   ClutterDeviceManagerPrivate *priv = clutter_device_manager_get_instance_private (device_manager); | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   if (are_kbd_a11y_settings_equal (&priv->kbd_a11y_settings, settings)) | ||||||
|  |     return; | ||||||
|  |  | ||||||
|  |   priv->kbd_a11y_settings = *settings; | ||||||
|  |  | ||||||
|  |   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||||
|  |   if (manager_class->apply_kbd_a11y_settings) | ||||||
|  |     manager_class->apply_kbd_a11y_settings (device_manager, settings); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||||
|  |                                               ClutterKbdA11ySettings *settings) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerPrivate *priv = clutter_device_manager_get_instance_private (device_manager); | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   *settings = priv->kbd_a11y_settings; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static gboolean | ||||||
|  | are_pointer_a11y_settings_equal (ClutterPointerA11ySettings *a, | ||||||
|  |                                  ClutterPointerA11ySettings *b) | ||||||
|  | { | ||||||
|  |   return (memcmp (a, b, sizeof (ClutterPointerA11ySettings)) == 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | clutter_device_manager_enable_pointer_a11y (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   ClutterInputDevice *core_pointer; | ||||||
|  |  | ||||||
|  |   core_pointer = clutter_device_manager_get_core_device (device_manager, | ||||||
|  |                                                          CLUTTER_POINTER_DEVICE); | ||||||
|  |  | ||||||
|  |   _clutter_input_pointer_a11y_add_device (core_pointer); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | clutter_device_manager_disable_pointer_a11y (ClutterDeviceManager *device_manager) | ||||||
|  | { | ||||||
|  |   ClutterInputDevice *core_pointer; | ||||||
|  |  | ||||||
|  |   core_pointer = clutter_device_manager_get_core_device (device_manager, | ||||||
|  |                                                          CLUTTER_POINTER_DEVICE); | ||||||
|  |  | ||||||
|  |   _clutter_input_pointer_a11y_remove_device (core_pointer); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_set_pointer_a11y_settings: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @settings: a pointer to a #ClutterPointerA11ySettings | ||||||
|  |  * | ||||||
|  |  * Sets the pointer accessibility settings | ||||||
|  |  **/ | ||||||
|  | void | ||||||
|  | clutter_device_manager_set_pointer_a11y_settings (ClutterDeviceManager       *device_manager, | ||||||
|  |                                                   ClutterPointerA11ySettings *settings) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerPrivate *priv = | ||||||
|  |     clutter_device_manager_get_instance_private (device_manager); | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   if (are_pointer_a11y_settings_equal (&priv->pointer_a11y_settings, settings)) | ||||||
|  |     return; | ||||||
|  |  | ||||||
|  |   if (priv->pointer_a11y_settings.controls == 0 && settings->controls != 0) | ||||||
|  |     clutter_device_manager_enable_pointer_a11y (device_manager); | ||||||
|  |   else if (priv->pointer_a11y_settings.controls != 0 && settings->controls == 0) | ||||||
|  |     clutter_device_manager_disable_pointer_a11y (device_manager); | ||||||
|  |  | ||||||
|  |   priv->pointer_a11y_settings = *settings; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_get_pointer_a11y_settings: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @settings: a pointer to a #ClutterPointerA11ySettings | ||||||
|  |  * | ||||||
|  |  * Gets the current pointer accessibility settings | ||||||
|  |  **/ | ||||||
|  | void | ||||||
|  | clutter_device_manager_get_pointer_a11y_settings (ClutterDeviceManager       *device_manager, | ||||||
|  |                                                   ClutterPointerA11ySettings *settings) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerPrivate *priv = | ||||||
|  |     clutter_device_manager_get_instance_private (device_manager); | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   *settings = priv->pointer_a11y_settings; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * clutter_device_manager_set_pointer_a11y_dwell_click_type: | ||||||
|  |  * @device_manager: a #ClutterDeviceManager | ||||||
|  |  * @click_type: type of click as #ClutterPointerA11yDwellClickType | ||||||
|  |  * | ||||||
|  |  * Sets the dwell click type | ||||||
|  |  **/ | ||||||
|  | void | ||||||
|  | clutter_device_manager_set_pointer_a11y_dwell_click_type (ClutterDeviceManager             *device_manager, | ||||||
|  |                                                           ClutterPointerA11yDwellClickType  click_type) | ||||||
|  | { | ||||||
|  |   ClutterDeviceManagerPrivate *priv = | ||||||
|  |     clutter_device_manager_get_instance_private (device_manager); | ||||||
|  |  | ||||||
|  |   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||||
|  |  | ||||||
|  |   priv->pointer_a11y_settings.dwell_click_type = click_type; | ||||||
|  | } | ||||||
							
								
								
									
										181
									
								
								clutter/clutter/clutter-device-manager.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								clutter/clutter/clutter-device-manager.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,181 @@ | |||||||
|  | /* | ||||||
|  |  * Clutter. | ||||||
|  |  * | ||||||
|  |  * An OpenGL based 'interactive canvas' library. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2009  Intel Corp. | ||||||
|  |  * | ||||||
|  |  * 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/>. | ||||||
|  |  * | ||||||
|  |  * Author: Emmanuele Bassi <ebassi@linux.intel.com> | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef __CLUTTER_DEVICE_MANAGER_H__ | ||||||
|  | #define __CLUTTER_DEVICE_MANAGER_H__ | ||||||
|  |  | ||||||
|  | #if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION) | ||||||
|  | #error "Only <clutter/clutter.h> can be included directly." | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include <clutter/clutter-input-device.h> | ||||||
|  | #include <clutter/clutter-stage.h> | ||||||
|  |  | ||||||
|  | G_BEGIN_DECLS | ||||||
|  |  | ||||||
|  | #define CLUTTER_TYPE_DEVICE_MANAGER (clutter_device_manager_get_type ()) | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | G_DECLARE_DERIVABLE_TYPE (ClutterDeviceManager, clutter_device_manager, | ||||||
|  |                           CLUTTER, DEVICE_MANAGER, GObject) | ||||||
|  |  | ||||||
|  | typedef struct _ClutterDeviceManagerPrivate     ClutterDeviceManagerPrivate; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ClutterVirtualDeviceType: | ||||||
|  |  */ | ||||||
|  | typedef enum _ClutterVirtualDeviceType | ||||||
|  | { | ||||||
|  |   CLUTTER_VIRTUAL_DEVICE_TYPE_NONE = 0, | ||||||
|  |   CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD = 1 << 0, | ||||||
|  |   CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER = 1 << 1, | ||||||
|  |   CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN = 1 << 2, | ||||||
|  | } ClutterVirtualDeviceType; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ClutterKbdA11ySettings: | ||||||
|  |  * | ||||||
|  |  * The #ClutterKbdA11ySettings structure contains keyboard accessibility | ||||||
|  |  * settings | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | typedef struct _ClutterKbdA11ySettings | ||||||
|  | { | ||||||
|  |   ClutterKeyboardA11yFlags controls; | ||||||
|  |   gint slowkeys_delay; | ||||||
|  |   gint debounce_delay; | ||||||
|  |   gint timeout_delay; | ||||||
|  |   gint mousekeys_init_delay; | ||||||
|  |   gint mousekeys_max_speed; | ||||||
|  |   gint mousekeys_accel_time; | ||||||
|  | } ClutterKbdA11ySettings; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ClutterPointerA11ySettings: | ||||||
|  |  * | ||||||
|  |  * The #ClutterPointerA11ySettings structure contains pointer accessibility | ||||||
|  |  * settings | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | typedef struct _ClutterPointerA11ySettings | ||||||
|  | { | ||||||
|  |   ClutterPointerA11yFlags controls; | ||||||
|  |   ClutterPointerA11yDwellClickType dwell_click_type; | ||||||
|  |   ClutterPointerA11yDwellMode dwell_mode; | ||||||
|  |   ClutterPointerA11yDwellDirection dwell_gesture_single; | ||||||
|  |   ClutterPointerA11yDwellDirection dwell_gesture_double; | ||||||
|  |   ClutterPointerA11yDwellDirection dwell_gesture_drag; | ||||||
|  |   ClutterPointerA11yDwellDirection dwell_gesture_secondary; | ||||||
|  |   gint secondary_click_delay; | ||||||
|  |   gint dwell_delay; | ||||||
|  |   gint dwell_threshold; | ||||||
|  | } ClutterPointerA11ySettings; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ClutterDeviceManagerClass: | ||||||
|  |  * | ||||||
|  |  * The #ClutterDeviceManagerClass structure contains only private data | ||||||
|  |  * | ||||||
|  |  * Since: 1.2 | ||||||
|  |  */ | ||||||
|  | struct _ClutterDeviceManagerClass | ||||||
|  | { | ||||||
|  |   /*< private >*/ | ||||||
|  |   GObjectClass parent_class; | ||||||
|  |  | ||||||
|  |   const GSList *      (* get_devices)     (ClutterDeviceManager   *device_manager); | ||||||
|  |   ClutterInputDevice *(* get_core_device) (ClutterDeviceManager   *device_manager, | ||||||
|  |                                            ClutterInputDeviceType  device_type); | ||||||
|  |   ClutterInputDevice *(* get_device)      (ClutterDeviceManager   *device_manager, | ||||||
|  |                                            gint                    device_id); | ||||||
|  |  | ||||||
|  |   void                (* add_device)      (ClutterDeviceManager   *manager, | ||||||
|  |                                            ClutterInputDevice     *device); | ||||||
|  |   void                (* remove_device)   (ClutterDeviceManager   *manager, | ||||||
|  |                                            ClutterInputDevice     *device); | ||||||
|  |   void                (* select_stage_events) (ClutterDeviceManager *manager, | ||||||
|  |                                                ClutterStage       *stage); | ||||||
|  |   ClutterVirtualInputDevice *(* create_virtual_device) (ClutterDeviceManager  *device_manager, | ||||||
|  |                                                         ClutterInputDeviceType device_type); | ||||||
|  |   ClutterVirtualDeviceType (* get_supported_virtual_device_types) (ClutterDeviceManager *device_manager); | ||||||
|  |   void                (* compress_motion) (ClutterDeviceManager *device_manger, | ||||||
|  |                                            ClutterEvent         *event, | ||||||
|  |                                            const ClutterEvent   *to_discard); | ||||||
|  |   /* Keyboard accessbility */ | ||||||
|  |   void                (* apply_kbd_a11y_settings) (ClutterDeviceManager   *device_manger, | ||||||
|  |                                                    ClutterKbdA11ySettings *settings); | ||||||
|  |  | ||||||
|  |   /* Event platform data */ | ||||||
|  |   void (* copy_event_data) (ClutterDeviceManager *device_manager, | ||||||
|  |                             const ClutterEvent   *src, | ||||||
|  |                             ClutterEvent         *dest); | ||||||
|  |   void (* free_event_data) (ClutterDeviceManager *device_manager, | ||||||
|  |                             ClutterEvent         *event); | ||||||
|  |  | ||||||
|  |   /* padding */ | ||||||
|  |   gpointer _padding[4]; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterDeviceManager *clutter_device_manager_get_default     (void); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | GSList *              clutter_device_manager_list_devices    (ClutterDeviceManager   *device_manager); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | const GSList *        clutter_device_manager_peek_devices    (ClutterDeviceManager   *device_manager); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterInputDevice *  clutter_device_manager_get_device      (ClutterDeviceManager   *device_manager, | ||||||
|  |                                                               gint                    device_id); | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterInputDevice *  clutter_device_manager_get_core_device (ClutterDeviceManager   *device_manager, | ||||||
|  |                                                               ClutterInputDeviceType  device_type); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterVirtualInputDevice *clutter_device_manager_create_virtual_device (ClutterDeviceManager  *device_manager, | ||||||
|  |                                                                          ClutterInputDeviceType device_type); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | ClutterVirtualDeviceType clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||||
|  |                                                    ClutterKbdA11ySettings *settings); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||||
|  |                                                    ClutterKbdA11ySettings *settings); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void clutter_device_manager_set_pointer_a11y_settings (ClutterDeviceManager       *device_manager, | ||||||
|  |                                                        ClutterPointerA11ySettings *settings); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void clutter_device_manager_get_pointer_a11y_settings (ClutterDeviceManager       *device_manager, | ||||||
|  |                                                        ClutterPointerA11ySettings *settings); | ||||||
|  |  | ||||||
|  | CLUTTER_EXPORT | ||||||
|  | void clutter_device_manager_set_pointer_a11y_dwell_click_type (ClutterDeviceManager             *device_manager, | ||||||
|  |                                                                ClutterPointerA11yDwellClickType  click_type); | ||||||
|  |  | ||||||
|  | G_END_DECLS | ||||||
|  |  | ||||||
|  | #endif /* __CLUTTER_DEVICE_MANAGER_H__ */ | ||||||
| @@ -81,7 +81,7 @@ struct _ClutterDragActionPrivate | |||||||
|   gint y_drag_threshold; |   gint y_drag_threshold; | ||||||
|   ClutterActor *drag_handle; |   ClutterActor *drag_handle; | ||||||
|   ClutterDragAxis drag_axis; |   ClutterDragAxis drag_axis; | ||||||
|   graphene_rect_t drag_area; |   ClutterRect drag_area; | ||||||
|  |  | ||||||
|   ClutterInputDevice *device; |   ClutterInputDevice *device; | ||||||
|   ClutterEventSequence *sequence; |   ClutterEventSequence *sequence; | ||||||
| @@ -315,7 +315,11 @@ emit_drag_end (ClutterDragAction *action, | |||||||
|     goto out; |     goto out; | ||||||
|  |  | ||||||
|   /* disconnect the capture */ |   /* 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; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   clutter_stage_set_motion_events_enabled (priv->stage, |   clutter_stage_set_motion_events_enabled (priv->stage, | ||||||
|                                            priv->motion_events_enabled); |                                            priv->motion_events_enabled); | ||||||
| @@ -474,8 +478,8 @@ clutter_drag_action_set_actor (ClutterActorMeta *meta, | |||||||
|       old_actor = clutter_actor_meta_get_actor (meta); |       old_actor = clutter_actor_meta_get_actor (meta); | ||||||
|       if (old_actor != NULL) |       if (old_actor != NULL) | ||||||
|         { |         { | ||||||
|           g_clear_signal_handler (&priv->button_press_id, old_actor); |           g_signal_handler_disconnect (old_actor, priv->button_press_id); | ||||||
|           g_clear_signal_handler (&priv->touch_begin_id, old_actor); |           g_signal_handler_disconnect (old_actor, priv->touch_begin_id); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|       priv->button_press_id = 0; |       priv->button_press_id = 0; | ||||||
| @@ -485,7 +489,7 @@ clutter_drag_action_set_actor (ClutterActorMeta *meta, | |||||||
|   if (priv->capture_id != 0) |   if (priv->capture_id != 0) | ||||||
|     { |     { | ||||||
|       if (priv->stage != NULL) |       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->capture_id = 0; | ||||||
|       priv->stage = NULL; |       priv->stage = NULL; | ||||||
| @@ -538,7 +542,7 @@ clutter_drag_action_real_drag_motion (ClutterDragAction *action, | |||||||
|  |  | ||||||
|   if (action->priv->drag_area_set) |   if (action->priv->drag_area_set) | ||||||
|     { |     { | ||||||
|       graphene_rect_t *drag_area = &action->priv->drag_area; |       ClutterRect *drag_area = &action->priv->drag_area; | ||||||
|  |  | ||||||
|       x = CLAMP (x, drag_area->origin.x, drag_area->origin.x + drag_area->size.width); |       x = CLAMP (x, drag_area->origin.x, drag_area->origin.x + drag_area->size.width); | ||||||
|       y = CLAMP (y, drag_area->origin.y, drag_area->origin.y + drag_area->size.height); |       y = CLAMP (y, drag_area->origin.y, drag_area->origin.y + drag_area->size.height); | ||||||
| @@ -664,7 +668,7 @@ clutter_drag_action_dispose (GObject *gobject) | |||||||
|                                                priv->motion_events_enabled); |                                                priv->motion_events_enabled); | ||||||
|  |  | ||||||
|       if (priv->stage != NULL) |       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->capture_id = 0; | ||||||
|       priv->stage = NULL; |       priv->stage = NULL; | ||||||
| @@ -677,8 +681,8 @@ clutter_drag_action_dispose (GObject *gobject) | |||||||
|       actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (gobject)); |       actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (gobject)); | ||||||
|       if (actor != NULL) |       if (actor != NULL) | ||||||
|         { |         { | ||||||
|           g_clear_signal_handler (&priv->button_press_id, actor); |           g_signal_handler_disconnect (actor, priv->button_press_id); | ||||||
|           g_clear_signal_handler (&priv->touch_begin_id, actor); |           g_signal_handler_disconnect (actor, priv->touch_begin_id); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|       priv->button_press_id = 0; |       priv->button_press_id = 0; | ||||||
| @@ -807,7 +811,7 @@ clutter_drag_action_class_init (ClutterDragActionClass *klass) | |||||||
|     g_param_spec_boxed ("drag-area", |     g_param_spec_boxed ("drag-area", | ||||||
| 			P_("Drag Area"), | 			P_("Drag Area"), | ||||||
| 			P_("Constrains the dragging to a rectangle"), | 			P_("Constrains the dragging to a rectangle"), | ||||||
| 			GRAPHENE_TYPE_RECT, | 			CLUTTER_TYPE_RECT, | ||||||
| 			CLUTTER_PARAM_READWRITE); | 			CLUTTER_PARAM_READWRITE); | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
| @@ -1263,10 +1267,10 @@ clutter_drag_action_get_motion_coords (ClutterDragAction *action, | |||||||
| /** | /** | ||||||
|  * clutter_drag_action_get_drag_area: |  * clutter_drag_action_get_drag_area: | ||||||
|  * @action: a #ClutterDragAction |  * @action: a #ClutterDragAction | ||||||
|  * @drag_area: (out caller-allocates): a #graphene_rect_t to be filled |  * @drag_area: (out caller-allocates): a #ClutterRect to be filled | ||||||
|  * |  * | ||||||
|  * Retrieves the "drag area" associated with @action, that |  * Retrieves the "drag area" associated with @action, that | ||||||
|  * is a #graphene_rect_t that constrains the actor movements, |  * is a #ClutterRect that constrains the actor movements, | ||||||
|  * in parents coordinates. |  * in parents coordinates. | ||||||
|  * |  * | ||||||
|  * Returns: %TRUE if the actor is actually constrained (and thus |  * Returns: %TRUE if the actor is actually constrained (and thus | ||||||
| @@ -1274,7 +1278,7 @@ clutter_drag_action_get_motion_coords (ClutterDragAction *action, | |||||||
|  */ |  */ | ||||||
| gboolean | gboolean | ||||||
| clutter_drag_action_get_drag_area (ClutterDragAction *action, | clutter_drag_action_get_drag_area (ClutterDragAction *action, | ||||||
|                                    graphene_rect_t   *drag_area) | 				   ClutterRect       *drag_area) | ||||||
| { | { | ||||||
|   g_return_val_if_fail (CLUTTER_IS_DRAG_ACTION (action), FALSE); |   g_return_val_if_fail (CLUTTER_IS_DRAG_ACTION (action), FALSE); | ||||||
|  |  | ||||||
| @@ -1294,8 +1298,8 @@ clutter_drag_action_get_drag_area (ClutterDragAction *action, | |||||||
|  * If @drag_area is %NULL, the actor is not constrained. |  * If @drag_area is %NULL, the actor is not constrained. | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_drag_action_set_drag_area (ClutterDragAction     *action, | clutter_drag_action_set_drag_area (ClutterDragAction *action, | ||||||
|                                    const graphene_rect_t *drag_area) | 				   const ClutterRect *drag_area) | ||||||
| { | { | ||||||
|   ClutterDragActionPrivate *priv; |   ClutterDragActionPrivate *priv; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -141,11 +141,11 @@ void            clutter_drag_action_get_motion_coords  (ClutterDragAction *actio | |||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean        clutter_drag_action_get_drag_area      (ClutterDragAction *action, | gboolean        clutter_drag_action_get_drag_area      (ClutterDragAction *action, | ||||||
|                                                         graphene_rect_t   *drag_area); |                                                         ClutterRect       *drag_area); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void            clutter_drag_action_set_drag_area      (ClutterDragAction     *action, | void            clutter_drag_action_set_drag_area      (ClutterDragAction *action, | ||||||
|                                                         const graphene_rect_t *drag_area); |                                                         const ClutterRect *drag_area); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -107,7 +107,7 @@ drop_target_free (gpointer _data) | |||||||
| { | { | ||||||
|   DropTarget *data = _data; |   DropTarget *data = _data; | ||||||
|  |  | ||||||
|   g_clear_signal_handler (&data->capture_id, data->stage); |   g_signal_handler_disconnect (data->stage, data->capture_id); | ||||||
|   g_hash_table_destroy (data->actions); |   g_hash_table_destroy (data->actions); | ||||||
|   g_free (data); |   g_free (data); | ||||||
| } | } | ||||||
| @@ -326,10 +326,12 @@ clutter_drop_action_set_actor (ClutterActorMeta *meta, | |||||||
|     { |     { | ||||||
|       drop_action_unregister (CLUTTER_DROP_ACTION (meta)); |       drop_action_unregister (CLUTTER_DROP_ACTION (meta)); | ||||||
|  |  | ||||||
|       g_clear_signal_handler (&priv->mapped_id, priv->actor); |       if (priv->mapped_id != 0) | ||||||
|  |         g_signal_handler_disconnect (priv->actor, priv->mapped_id); | ||||||
|  |  | ||||||
|       priv->stage = NULL; |       priv->stage = NULL; | ||||||
|       priv->actor = NULL; |       priv->actor = NULL; | ||||||
|  |       priv->mapped_id = 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   priv->actor = actor; |   priv->actor = actor; | ||||||
|   | |||||||
| @@ -5,18 +5,15 @@ | |||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
| gboolean        _clutter_effect_pre_paint               (ClutterEffect           *effect, | gboolean        _clutter_effect_pre_paint               (ClutterEffect           *effect); | ||||||
|                                                          ClutterPaintContext     *paint_context); | void            _clutter_effect_post_paint              (ClutterEffect           *effect); | ||||||
| void            _clutter_effect_post_paint              (ClutterEffect           *effect, |  | ||||||
|                                                          ClutterPaintContext     *paint_context); |  | ||||||
| gboolean        _clutter_effect_modify_paint_volume     (ClutterEffect           *effect, | gboolean        _clutter_effect_modify_paint_volume     (ClutterEffect           *effect, | ||||||
|                                                          ClutterPaintVolume      *volume); |                                                          ClutterPaintVolume      *volume); | ||||||
| gboolean        _clutter_effect_has_custom_paint_volume (ClutterEffect           *effect); | gboolean        _clutter_effect_has_custom_paint_volume (ClutterEffect           *effect); | ||||||
| void            _clutter_effect_paint                   (ClutterEffect           *effect, | void            _clutter_effect_paint                   (ClutterEffect           *effect, | ||||||
|                                                          ClutterPaintContext     *paint_context, |  | ||||||
|                                                          ClutterEffectPaintFlags  flags); |                                                          ClutterEffectPaintFlags  flags); | ||||||
| void            _clutter_effect_pick                    (ClutterEffect           *effect, | void            _clutter_effect_pick                    (ClutterEffect           *effect, | ||||||
|                                                          ClutterPickContext      *pick_context); |                                                          ClutterEffectPaintFlags  flags); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -100,13 +100,13 @@ | |||||||
|  *    // Clear the previous state // |  *    // Clear the previous state // | ||||||
|  *    if (self->rect_1) |  *    if (self->rect_1) | ||||||
|  *      { |  *      { | ||||||
|  *        cogl_object_unref (self->rect_1); |  *        cogl_handle_unref (self->rect_1); | ||||||
|  *        self->rect_1 = NULL; |  *        self->rect_1 = NULL; | ||||||
|  *      } |  *      } | ||||||
|  * |  * | ||||||
|  *    if (self->rect_2) |  *    if (self->rect_2) | ||||||
|  *      { |  *      { | ||||||
|  *        cogl_object_unref (self->rect_2); |  *        cogl_handle_unref (self->rect_2); | ||||||
|  *        self->rect_2 = NULL; |  *        self->rect_2 = NULL; | ||||||
|  *      } |  *      } | ||||||
|  * |  * | ||||||
| @@ -177,15 +177,13 @@ G_DEFINE_ABSTRACT_TYPE (ClutterEffect, | |||||||
|                         CLUTTER_TYPE_ACTOR_META); |                         CLUTTER_TYPE_ACTOR_META); | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_effect_real_pre_paint (ClutterEffect       *effect, | clutter_effect_real_pre_paint (ClutterEffect *effect) | ||||||
|                                ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   return TRUE; |   return TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_effect_real_post_paint (ClutterEffect       *effect, | clutter_effect_real_post_paint (ClutterEffect *effect) | ||||||
|                                 ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -198,7 +196,6 @@ clutter_effect_real_modify_paint_volume (ClutterEffect      *effect, | |||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_effect_real_paint (ClutterEffect           *effect, | clutter_effect_real_paint (ClutterEffect           *effect, | ||||||
|                            ClutterPaintContext     *paint_context, |  | ||||||
|                            ClutterEffectPaintFlags  flags) |                            ClutterEffectPaintFlags  flags) | ||||||
| { | { | ||||||
|   ClutterActorMeta *actor_meta = CLUTTER_ACTOR_META (effect); |   ClutterActorMeta *actor_meta = CLUTTER_ACTOR_META (effect); | ||||||
| @@ -209,24 +206,24 @@ clutter_effect_real_paint (ClutterEffect           *effect, | |||||||
|      effects that haven't migrated to use the 'paint' virtual yet. This |      effects that haven't migrated to use the 'paint' virtual yet. This | ||||||
|      just calls the old pre and post virtuals before chaining on */ |      just calls the old pre and post virtuals before chaining on */ | ||||||
|  |  | ||||||
|   pre_paint_succeeded = _clutter_effect_pre_paint (effect, paint_context); |   pre_paint_succeeded = _clutter_effect_pre_paint (effect); | ||||||
|  |  | ||||||
|   actor = clutter_actor_meta_get_actor (actor_meta); |   actor = clutter_actor_meta_get_actor (actor_meta); | ||||||
|   clutter_actor_continue_paint (actor, paint_context); |   clutter_actor_continue_paint (actor); | ||||||
|  |  | ||||||
|   if (pre_paint_succeeded) |   if (pre_paint_succeeded) | ||||||
|     _clutter_effect_post_paint (effect, paint_context); |     _clutter_effect_post_paint (effect); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_effect_real_pick (ClutterEffect      *effect, | clutter_effect_real_pick (ClutterEffect           *effect, | ||||||
|                           ClutterPickContext *pick_context) |                           ClutterEffectPaintFlags  flags) | ||||||
| { | { | ||||||
|   ClutterActorMeta *actor_meta = CLUTTER_ACTOR_META (effect); |   ClutterActorMeta *actor_meta = CLUTTER_ACTOR_META (effect); | ||||||
|   ClutterActor *actor; |   ClutterActor *actor; | ||||||
|  |  | ||||||
|   actor = clutter_actor_meta_get_actor (actor_meta); |   actor = clutter_actor_meta_get_actor (actor_meta); | ||||||
|   clutter_actor_continue_pick (actor, pick_context); |   clutter_actor_continue_paint (actor); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -266,40 +263,37 @@ clutter_effect_init (ClutterEffect *self) | |||||||
| } | } | ||||||
|  |  | ||||||
| gboolean | gboolean | ||||||
| _clutter_effect_pre_paint (ClutterEffect       *effect, | _clutter_effect_pre_paint (ClutterEffect *effect) | ||||||
|                            ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   g_return_val_if_fail (CLUTTER_IS_EFFECT (effect), FALSE); |   g_return_val_if_fail (CLUTTER_IS_EFFECT (effect), FALSE); | ||||||
|  |  | ||||||
|   return CLUTTER_EFFECT_GET_CLASS (effect)->pre_paint (effect, paint_context); |   return CLUTTER_EFFECT_GET_CLASS (effect)->pre_paint (effect); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| _clutter_effect_post_paint (ClutterEffect       *effect, | _clutter_effect_post_paint (ClutterEffect *effect) | ||||||
|                             ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_EFFECT (effect)); |   g_return_if_fail (CLUTTER_IS_EFFECT (effect)); | ||||||
|  |  | ||||||
|   CLUTTER_EFFECT_GET_CLASS (effect)->post_paint (effect, paint_context); |   CLUTTER_EFFECT_GET_CLASS (effect)->post_paint (effect); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| _clutter_effect_paint (ClutterEffect           *effect, | _clutter_effect_paint (ClutterEffect           *effect, | ||||||
|                        ClutterPaintContext     *paint_context, |  | ||||||
|                        ClutterEffectPaintFlags  flags) |                        ClutterEffectPaintFlags  flags) | ||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_EFFECT (effect)); |   g_return_if_fail (CLUTTER_IS_EFFECT (effect)); | ||||||
|  |  | ||||||
|   CLUTTER_EFFECT_GET_CLASS (effect)->paint (effect, paint_context, flags); |   CLUTTER_EFFECT_GET_CLASS (effect)->paint (effect, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| _clutter_effect_pick (ClutterEffect      *effect, | _clutter_effect_pick (ClutterEffect           *effect, | ||||||
|                       ClutterPickContext *pick_context) |                       ClutterEffectPaintFlags  flags) | ||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_EFFECT (effect)); |   g_return_if_fail (CLUTTER_IS_EFFECT (effect)); | ||||||
|  |  | ||||||
|   CLUTTER_EFFECT_GET_CLASS (effect)->pick (effect, pick_context); |   CLUTTER_EFFECT_GET_CLASS (effect)->pick (effect, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| gboolean | gboolean | ||||||
|   | |||||||
| @@ -30,8 +30,6 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include <clutter/clutter-actor-meta.h> | #include <clutter/clutter-actor-meta.h> | ||||||
| #include <clutter/clutter-paint-context.h> |  | ||||||
| #include <clutter/clutter-pick-context.h> |  | ||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
| @@ -76,19 +74,16 @@ struct _ClutterEffectClass | |||||||
|   ClutterActorMetaClass parent_class; |   ClutterActorMetaClass parent_class; | ||||||
|  |  | ||||||
|   /*< public >*/ |   /*< public >*/ | ||||||
|   gboolean (* pre_paint)           (ClutterEffect           *effect, |   gboolean (* pre_paint)           (ClutterEffect           *effect); | ||||||
|                                     ClutterPaintContext     *paint_context); |   void     (* post_paint)          (ClutterEffect           *effect); | ||||||
|   void     (* post_paint)          (ClutterEffect           *effect, |  | ||||||
|                                     ClutterPaintContext     *paint_context); |  | ||||||
|  |  | ||||||
|   gboolean (* modify_paint_volume) (ClutterEffect           *effect, |   gboolean (* modify_paint_volume) (ClutterEffect           *effect, | ||||||
|                                     ClutterPaintVolume      *volume); |                                     ClutterPaintVolume      *volume); | ||||||
|  |  | ||||||
|   void     (* paint)               (ClutterEffect           *effect, |   void     (* paint)               (ClutterEffect           *effect, | ||||||
|                                     ClutterPaintContext     *paint_context, |  | ||||||
|                                     ClutterEffectPaintFlags  flags); |                                     ClutterEffectPaintFlags  flags); | ||||||
|   void     (* pick)                (ClutterEffect           *effect, |   void     (* pick)                (ClutterEffect           *effect, | ||||||
|                                     ClutterPickContext      *pick_context); |                                     ClutterEffectPaintFlags  flags); | ||||||
|  |  | ||||||
|   /*< private >*/ |   /*< private >*/ | ||||||
|   void (* _clutter_effect4) (void); |   void (* _clutter_effect4) (void); | ||||||
|   | |||||||
| @@ -535,13 +535,9 @@ typedef enum /*< prefix=CLUTTER_ACTOR >*/ | |||||||
|  * ClutterOffscreenRedirect: |  * ClutterOffscreenRedirect: | ||||||
|  * @CLUTTER_OFFSCREEN_REDIRECT_AUTOMATIC_FOR_OPACITY: Only redirect |  * @CLUTTER_OFFSCREEN_REDIRECT_AUTOMATIC_FOR_OPACITY: Only redirect | ||||||
|  *   the actor if it is semi-transparent and its has_overlaps() |  *   the actor if it is semi-transparent and its has_overlaps() | ||||||
|  *   virtual returns %TRUE. |  *   virtual returns %TRUE. This is the default. | ||||||
|  * @CLUTTER_OFFSCREEN_REDIRECT_ALWAYS: Always redirect the actor to an |  * @CLUTTER_OFFSCREEN_REDIRECT_ALWAYS: Always redirect the actor to an | ||||||
|  *   offscreen buffer even if it is fully opaque. |  *   offscreen buffer even if it is fully opaque. | ||||||
|  * @CLUTTER_OFFSCREEN_REDIRECT_ON_IDLE: Only redirect the actor if it is the |  | ||||||
|  *   most efficient thing to do based on its recent repaint behaviour. That |  | ||||||
|  *   means when its contents are changing less frequently than it's being used |  | ||||||
|  *   on stage. |  | ||||||
|  * |  * | ||||||
|  * Possible flags to pass to clutter_actor_set_offscreen_redirect(). |  * Possible flags to pass to clutter_actor_set_offscreen_redirect(). | ||||||
|  * |  * | ||||||
| @@ -549,9 +545,8 @@ typedef enum /*< prefix=CLUTTER_ACTOR >*/ | |||||||
|  */ |  */ | ||||||
| typedef enum /*< prefix=CLUTTER_OFFSCREEN_REDIRECT >*/ | typedef enum /*< prefix=CLUTTER_OFFSCREEN_REDIRECT >*/ | ||||||
| { | { | ||||||
|   CLUTTER_OFFSCREEN_REDIRECT_AUTOMATIC_FOR_OPACITY = 1 << 0, |   CLUTTER_OFFSCREEN_REDIRECT_AUTOMATIC_FOR_OPACITY = 1<<0, | ||||||
|   CLUTTER_OFFSCREEN_REDIRECT_ALWAYS                = 1 << 1, |   CLUTTER_OFFSCREEN_REDIRECT_ALWAYS = 1<<1 | ||||||
|   CLUTTER_OFFSCREEN_REDIRECT_ON_IDLE               = 1 << 2 |  | ||||||
| } ClutterOffscreenRedirect; | } ClutterOffscreenRedirect; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -678,15 +673,12 @@ typedef enum /*< prefix=CLUTTER_BIND >*/ | |||||||
|  *   has queued a redraw before this paint. This implies that the effect |  *   has queued a redraw before this paint. This implies that the effect | ||||||
|  *   should call clutter_actor_continue_paint() to chain to the next |  *   should call clutter_actor_continue_paint() to chain to the next | ||||||
|  *   effect and can not cache any results from a previous paint. |  *   effect and can not cache any results from a previous paint. | ||||||
|  * @CLUTTER_EFFECT_PAINT_BYPASS_EFFECT: The effect should not be used |  | ||||||
|  *   on this frame, but it will be asked to paint the actor still. |  | ||||||
|  * |  * | ||||||
|  * Flags passed to the ‘paint’ or ‘pick’ method of #ClutterEffect. |  * Flags passed to the ‘paint’ or ‘pick’ method of #ClutterEffect. | ||||||
|  */ |  */ | ||||||
| typedef enum /*< prefix=CLUTTER_EFFECT_PAINT >*/ | typedef enum /*< prefix=CLUTTER_EFFECT_PAINT >*/ | ||||||
| { | { | ||||||
|   CLUTTER_EFFECT_PAINT_ACTOR_DIRTY   = (1 << 0), |   CLUTTER_EFFECT_PAINT_ACTOR_DIRTY = (1 << 0) | ||||||
|   CLUTTER_EFFECT_PAINT_BYPASS_EFFECT = (1 << 1) |  | ||||||
| } ClutterEffectPaintFlags; | } ClutterEffectPaintFlags; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -978,6 +970,8 @@ typedef enum | |||||||
| /** | /** | ||||||
|  * ClutterFeatureFlags: |  * ClutterFeatureFlags: | ||||||
|  * @CLUTTER_FEATURE_SWAP_THROTTLE: Set if backend throttles buffer swaps. |  * @CLUTTER_FEATURE_SWAP_THROTTLE: Set if backend throttles buffer swaps. | ||||||
|  |  * @CLUTTER_FEATURE_TEXTURE_YUV: Set if YUV based textures supported. | ||||||
|  |  * @CLUTTER_FEATURE_TEXTURE_READ_PIXELS: Set if texture pixels can be read. | ||||||
|  * @CLUTTER_FEATURE_STAGE_STATIC: Set if stage size if fixed (i.e framebuffer) |  * @CLUTTER_FEATURE_STAGE_STATIC: Set if stage size if fixed (i.e framebuffer) | ||||||
|  * @CLUTTER_FEATURE_STAGE_CURSOR: Set if stage has a graphical cursor. |  * @CLUTTER_FEATURE_STAGE_CURSOR: Set if stage has a graphical cursor. | ||||||
|  * @CLUTTER_FEATURE_SHADERS_GLSL: Set if the backend supports GLSL shaders. |  * @CLUTTER_FEATURE_SHADERS_GLSL: Set if the backend supports GLSL shaders. | ||||||
| @@ -993,6 +987,8 @@ typedef enum | |||||||
| typedef enum | typedef enum | ||||||
| { | { | ||||||
|   CLUTTER_FEATURE_SWAP_THROTTLE          = (1 << 3), |   CLUTTER_FEATURE_SWAP_THROTTLE          = (1 << 3), | ||||||
|  |   CLUTTER_FEATURE_TEXTURE_YUV            = (1 << 4), | ||||||
|  |   CLUTTER_FEATURE_TEXTURE_READ_PIXELS    = (1 << 5), | ||||||
|   CLUTTER_FEATURE_STAGE_STATIC           = (1 << 6), |   CLUTTER_FEATURE_STAGE_STATIC           = (1 << 6), | ||||||
|   CLUTTER_FEATURE_STAGE_CURSOR           = (1 << 8), |   CLUTTER_FEATURE_STAGE_CURSOR           = (1 << 8), | ||||||
|   CLUTTER_FEATURE_SHADERS_GLSL           = (1 << 9), |   CLUTTER_FEATURE_SHADERS_GLSL           = (1 << 9), | ||||||
| @@ -1191,6 +1187,29 @@ typedef enum /*< prefix=CLUTTER_PAN >*/ | |||||||
|   CLUTTER_PAN_AXIS_AUTO |   CLUTTER_PAN_AXIS_AUTO | ||||||
| } ClutterPanAxis; | } ClutterPanAxis; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ClutterTableAlignment: | ||||||
|  |  * @CLUTTER_TABLE_ALIGNMENT_START: Align the child to the top or to the | ||||||
|  |  *   left of a cell in the table, depending on the axis | ||||||
|  |  * @CLUTTER_TABLE_ALIGNMENT_CENTER: Align the child to the center of | ||||||
|  |  *   a cell in the table | ||||||
|  |  * @CLUTTER_TABLE_ALIGNMENT_END: Align the child to the bottom or to the | ||||||
|  |  *   right of a cell in the table, depending on the axis | ||||||
|  |  * | ||||||
|  |  * The alignment policies available on each axis of the #ClutterTableLayout | ||||||
|  |  * | ||||||
|  |  * Since: 1.4 | ||||||
|  |  * | ||||||
|  |  * Deprecated: 1.22: Use the alignment properties of #ClutterActor | ||||||
|  |  */ | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   CLUTTER_TABLE_ALIGNMENT_START, | ||||||
|  |   CLUTTER_TABLE_ALIGNMENT_CENTER, | ||||||
|  |   CLUTTER_TABLE_ALIGNMENT_END | ||||||
|  | } ClutterTableAlignment; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * ClutterTextureFlags: |  * ClutterTextureFlags: | ||||||
|  * @CLUTTER_TEXTURE_NONE: No flags |  * @CLUTTER_TEXTURE_NONE: No flags | ||||||
| @@ -1198,7 +1217,8 @@ typedef enum /*< prefix=CLUTTER_PAN >*/ | |||||||
|  * @CLUTTER_TEXTURE_RGB_FLAG_PREMULT: Unused flag |  * @CLUTTER_TEXTURE_RGB_FLAG_PREMULT: Unused flag | ||||||
|  * @CLUTTER_TEXTURE_YUV_FLAG_YUV2: Unused flag |  * @CLUTTER_TEXTURE_YUV_FLAG_YUV2: Unused flag | ||||||
|  * |  * | ||||||
|  * Flags for clutter_texture_set_from_rgb_data(). |  * Flags for clutter_texture_set_from_rgb_data() and | ||||||
|  |  * clutter_texture_set_from_yuv_data(). | ||||||
|  * |  * | ||||||
|  * Since: 0.4 |  * Since: 0.4 | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -370,7 +370,7 @@ clutter_event_get_coords (const ClutterEvent *event, | |||||||
|                           gfloat             *x, |                           gfloat             *x, | ||||||
|                           gfloat             *y) |                           gfloat             *y) | ||||||
| { | { | ||||||
|   graphene_point_t coords; |   ClutterPoint coords; | ||||||
|  |  | ||||||
|   g_return_if_fail (event != NULL); |   g_return_if_fail (event != NULL); | ||||||
|  |  | ||||||
| @@ -386,15 +386,15 @@ clutter_event_get_coords (const ClutterEvent *event, | |||||||
| /** | /** | ||||||
|  * clutter_event_get_position: |  * clutter_event_get_position: | ||||||
|  * @event: a #ClutterEvent |  * @event: a #ClutterEvent | ||||||
|  * @position: a #graphene_point_t |  * @position: a #ClutterPoint | ||||||
|  * |  * | ||||||
|  * Retrieves the event coordinates as a #graphene_point_t. |  * Retrieves the event coordinates as a #ClutterPoint. | ||||||
|  * |  * | ||||||
|  * Since: 1.12 |  * Since: 1.12 | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_event_get_position (const ClutterEvent *event, | clutter_event_get_position (const ClutterEvent *event, | ||||||
|                             graphene_point_t   *position) |                             ClutterPoint       *position) | ||||||
| { | { | ||||||
|   g_return_if_fail (event != NULL); |   g_return_if_fail (event != NULL); | ||||||
|   g_return_if_fail (position != NULL); |   g_return_if_fail (position != NULL); | ||||||
| @@ -415,42 +415,42 @@ clutter_event_get_position (const ClutterEvent *event, | |||||||
|     case CLUTTER_PAD_BUTTON_RELEASE: |     case CLUTTER_PAD_BUTTON_RELEASE: | ||||||
|     case CLUTTER_PAD_STRIP: |     case CLUTTER_PAD_STRIP: | ||||||
|     case CLUTTER_PAD_RING: |     case CLUTTER_PAD_RING: | ||||||
|       graphene_point_init (position, 0.f, 0.f); |       clutter_point_init (position, 0.f, 0.f); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_ENTER: |     case CLUTTER_ENTER: | ||||||
|     case CLUTTER_LEAVE: |     case CLUTTER_LEAVE: | ||||||
|       graphene_point_init (position, event->crossing.x, event->crossing.y); |       clutter_point_init (position, event->crossing.x, event->crossing.y); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_BUTTON_PRESS: |     case CLUTTER_BUTTON_PRESS: | ||||||
|     case CLUTTER_BUTTON_RELEASE: |     case CLUTTER_BUTTON_RELEASE: | ||||||
|       graphene_point_init (position, event->button.x, event->button.y); |       clutter_point_init (position, event->button.x, event->button.y); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_MOTION: |     case CLUTTER_MOTION: | ||||||
|       graphene_point_init (position, event->motion.x, event->motion.y); |       clutter_point_init (position, event->motion.x, event->motion.y); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_TOUCH_BEGIN: |     case CLUTTER_TOUCH_BEGIN: | ||||||
|     case CLUTTER_TOUCH_UPDATE: |     case CLUTTER_TOUCH_UPDATE: | ||||||
|     case CLUTTER_TOUCH_END: |     case CLUTTER_TOUCH_END: | ||||||
|     case CLUTTER_TOUCH_CANCEL: |     case CLUTTER_TOUCH_CANCEL: | ||||||
|       graphene_point_init (position, event->touch.x, event->touch.y); |       clutter_point_init (position, event->touch.x, event->touch.y); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_SCROLL: |     case CLUTTER_SCROLL: | ||||||
|       graphene_point_init (position, event->scroll.x, event->scroll.y); |       clutter_point_init (position, event->scroll.x, event->scroll.y); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_TOUCHPAD_PINCH: |     case CLUTTER_TOUCHPAD_PINCH: | ||||||
|       graphene_point_init (position, event->touchpad_pinch.x, |       clutter_point_init (position, event->touchpad_pinch.x, | ||||||
|                            event->touchpad_pinch.y); |                           event->touchpad_pinch.y); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case CLUTTER_TOUCHPAD_SWIPE: |     case CLUTTER_TOUCHPAD_SWIPE: | ||||||
|       graphene_point_init (position, event->touchpad_swipe.x, |       clutter_point_init (position, event->touchpad_swipe.x, | ||||||
|                            event->touchpad_swipe.y); |                           event->touchpad_swipe.y); | ||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -1796,12 +1796,12 @@ float | |||||||
| clutter_event_get_distance (const ClutterEvent *source, | clutter_event_get_distance (const ClutterEvent *source, | ||||||
|                             const ClutterEvent *target) |                             const ClutterEvent *target) | ||||||
| { | { | ||||||
|   graphene_point_t p0, p1; |   ClutterPoint p0, p1; | ||||||
|  |  | ||||||
|   clutter_event_get_position (source, &p0); |   clutter_event_get_position (source, &p0); | ||||||
|   clutter_event_get_position (source, &p1); |   clutter_event_get_position (source, &p1); | ||||||
|  |  | ||||||
|   return graphene_point_distance (&p0, &p1, NULL, NULL); |   return clutter_point_distance (&p0, &p1, NULL, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -1822,17 +1822,17 @@ double | |||||||
| clutter_event_get_angle (const ClutterEvent *source, | clutter_event_get_angle (const ClutterEvent *source, | ||||||
|                          const ClutterEvent *target) |                          const ClutterEvent *target) | ||||||
| { | { | ||||||
|   graphene_point_t p0, p1; |   ClutterPoint p0, p1; | ||||||
|   float x_distance, y_distance; |   float x_distance, y_distance; | ||||||
|   double angle; |   double angle; | ||||||
|  |  | ||||||
|   clutter_event_get_position (source, &p0); |   clutter_event_get_position (source, &p0); | ||||||
|   clutter_event_get_position (target, &p1); |   clutter_event_get_position (target, &p1); | ||||||
|  |  | ||||||
|   if (graphene_point_equal (&p0, &p1)) |   if (clutter_point_equals (&p0, &p1)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   graphene_point_distance (&p0, &p1, &x_distance, &y_distance); |   clutter_point_distance (&p0, &p1, &x_distance, &y_distance); | ||||||
|  |  | ||||||
|   angle = atan2 (x_distance, y_distance); |   angle = atan2 (x_distance, y_distance); | ||||||
|  |  | ||||||
| @@ -2161,9 +2161,9 @@ clutter_event_get_scroll_source (const ClutterEvent *event) | |||||||
| ClutterScrollFinishFlags | ClutterScrollFinishFlags | ||||||
| clutter_event_get_scroll_finish_flags (const ClutterEvent *event) | clutter_event_get_scroll_finish_flags (const ClutterEvent *event) | ||||||
| { | { | ||||||
|   g_return_val_if_fail (event != NULL, CLUTTER_SCROLL_FINISHED_NONE); |   g_return_val_if_fail (event != NULL, CLUTTER_SCROLL_SOURCE_UNKNOWN); | ||||||
|   g_return_val_if_fail (event->type == CLUTTER_SCROLL, |   g_return_val_if_fail (event->type == CLUTTER_SCROLL, | ||||||
|                         CLUTTER_SCROLL_FINISHED_NONE); |                         CLUTTER_SCROLL_SOURCE_UNKNOWN); | ||||||
|  |  | ||||||
|   return event->scroll.finish_flags; |   return event->scroll.finish_flags; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -686,7 +686,7 @@ void                    clutter_event_get_coords                (const ClutterEv | |||||||
|                                                                  gfloat                 *y); |                                                                  gfloat                 *y); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                    clutter_event_get_position              (const ClutterEvent     *event, | void                    clutter_event_get_position              (const ClutterEvent     *event, | ||||||
|                                                                  graphene_point_t       *position); |                                                                  ClutterPoint           *position); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| float                   clutter_event_get_distance              (const ClutterEvent     *source, | float                   clutter_event_get_distance              (const ClutterEvent     *source, | ||||||
|                                                                  const ClutterEvent     *target); |                                                                  const ClutterEvent     *target); | ||||||
|   | |||||||
| @@ -33,6 +33,8 @@ | |||||||
|  * |  * | ||||||
|  * It is possible to ask whether Clutter has support for specific features at |  * It is possible to ask whether Clutter has support for specific features at | ||||||
|  * run-time. |  * run-time. | ||||||
|  |  * | ||||||
|  |  * See also cogl_get_features() and #CoglFeatureFlags | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include "clutter-build-config.h" | #include "clutter-build-config.h" | ||||||
| @@ -58,13 +60,20 @@ typedef struct ClutterFeatures | |||||||
| static ClutterFeatures* __features = NULL; | static ClutterFeatures* __features = NULL; | ||||||
|  |  | ||||||
| static ClutterFeatureFlags | static ClutterFeatureFlags | ||||||
| clutter_features_from_cogl (void) | clutter_features_from_cogl (guint cogl_flags) | ||||||
| { | { | ||||||
|   ClutterFeatureFlags clutter_flags = 0; |   ClutterFeatureFlags clutter_flags = 0; | ||||||
|    |    | ||||||
|  |   if (cogl_flags & COGL_FEATURE_TEXTURE_YUV) | ||||||
|  |     clutter_flags |= CLUTTER_FEATURE_TEXTURE_YUV; | ||||||
|  |    | ||||||
|  |   if (cogl_flags & COGL_FEATURE_TEXTURE_READ_PIXELS) | ||||||
|  |     clutter_flags |= CLUTTER_FEATURE_TEXTURE_READ_PIXELS; | ||||||
|  |    | ||||||
|   clutter_flags |= CLUTTER_FEATURE_SHADERS_GLSL; |   clutter_flags |= CLUTTER_FEATURE_SHADERS_GLSL; | ||||||
|    |    | ||||||
|   clutter_flags |= CLUTTER_FEATURE_OFFSCREEN; |   if (cogl_flags & COGL_FEATURE_OFFSCREEN) | ||||||
|  |     clutter_flags |= CLUTTER_FEATURE_OFFSCREEN; | ||||||
|    |    | ||||||
|   return clutter_flags; |   return clutter_flags; | ||||||
| } | } | ||||||
| @@ -92,7 +101,7 @@ _clutter_feature_init (GError **error) | |||||||
|   if (!_clutter_backend_create_context (context->backend, error)) |   if (!_clutter_backend_create_context (context->backend, error)) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
|   __features->flags = (clutter_features_from_cogl () |   __features->flags = (clutter_features_from_cogl (cogl_get_features ()) | ||||||
|                     | _clutter_backend_get_features (context->backend)); |                     | _clutter_backend_get_features (context->backend)); | ||||||
|  |  | ||||||
|   __features->features_set = TRUE; |   __features->features_set = TRUE; | ||||||
|   | |||||||
| @@ -118,7 +118,7 @@ struct _ClutterGestureActionPrivate | |||||||
|   gint requested_nb_points; |   gint requested_nb_points; | ||||||
|   GArray *points; |   GArray *points; | ||||||
|  |  | ||||||
|   gulong actor_capture_id; |   guint actor_capture_id; | ||||||
|   gulong stage_capture_id; |   gulong stage_capture_id; | ||||||
|  |  | ||||||
|   ClutterGestureTriggerEdge edge; |   ClutterGestureTriggerEdge edge; | ||||||
| @@ -308,7 +308,11 @@ cancel_gesture (ClutterGestureAction *action) | |||||||
|  |  | ||||||
|   priv->in_gesture = FALSE; |   priv->in_gesture = FALSE; | ||||||
|  |  | ||||||
|   g_clear_signal_handler (&priv->stage_capture_id, priv->stage); |   if (priv->stage_capture_id != 0) | ||||||
|  |     { | ||||||
|  |       g_signal_handler_disconnect (priv->stage, priv->stage_capture_id); | ||||||
|  |       priv->stage_capture_id = 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (action)); |   actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (action)); | ||||||
|   g_signal_emit (action, gesture_signals[GESTURE_CANCEL], 0, actor); |   g_signal_emit (action, gesture_signals[GESTURE_CANCEL], 0, actor); | ||||||
| @@ -477,8 +481,11 @@ stage_captured_event_cb (ClutterActor         *stage, | |||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   if (priv->points->len == 0) |   if (priv->points->len == 0 && priv->stage_capture_id) | ||||||
|     g_clear_signal_handler (&priv->stage_capture_id, priv->stage); |     { | ||||||
|  |       g_signal_handler_disconnect (priv->stage, priv->stage_capture_id); | ||||||
|  |       priv->stage_capture_id = 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   return CLUTTER_EVENT_PROPAGATE; |   return CLUTTER_EVENT_PROPAGATE; | ||||||
| } | } | ||||||
| @@ -531,7 +538,7 @@ clutter_gesture_action_set_actor (ClutterActorMeta *meta, | |||||||
|       ClutterActor *old_actor = clutter_actor_meta_get_actor (meta); |       ClutterActor *old_actor = clutter_actor_meta_get_actor (meta); | ||||||
|  |  | ||||||
|       if (old_actor != NULL) |       if (old_actor != NULL) | ||||||
|         g_clear_signal_handler (&priv->actor_capture_id, old_actor); |         g_signal_handler_disconnect (old_actor, priv->actor_capture_id); | ||||||
|  |  | ||||||
|       priv->actor_capture_id = 0; |       priv->actor_capture_id = 0; | ||||||
|     } |     } | ||||||
| @@ -539,7 +546,7 @@ clutter_gesture_action_set_actor (ClutterActorMeta *meta, | |||||||
|   if (priv->stage_capture_id != 0) |   if (priv->stage_capture_id != 0) | ||||||
|     { |     { | ||||||
|       if (priv->stage != NULL) |       if (priv->stage != NULL) | ||||||
|         g_clear_signal_handler (&priv->stage_capture_id, priv->stage); |         g_signal_handler_disconnect (priv->stage, priv->stage_capture_id); | ||||||
|  |  | ||||||
|       priv->stage_capture_id = 0; |       priv->stage_capture_id = 0; | ||||||
|       priv->stage = NULL; |       priv->stage = NULL; | ||||||
|   | |||||||
| @@ -1,111 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Clutter. |  | ||||||
|  * |  | ||||||
|  * An OpenGL based 'interactive canvas' library. |  | ||||||
|  * |  | ||||||
|  * Authored By Georges Basile Stavracas Neto <georges.stavracas@gmail.com> |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2019 Endless, Inc |  | ||||||
|  * Copyright (C) 2009, 2010 Intel Corp |  | ||||||
|  * |  | ||||||
|  * 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/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include "clutter-build-config.h" |  | ||||||
|  |  | ||||||
| #include "clutter-graphene.h" |  | ||||||
|  |  | ||||||
| #include "clutter-private.h" |  | ||||||
| #include "clutter-types.h" |  | ||||||
|  |  | ||||||
| static gboolean |  | ||||||
| graphene_point_progress (const GValue *a, |  | ||||||
|                          const GValue *b, |  | ||||||
|                          double        progress, |  | ||||||
|                          GValue       *retval) |  | ||||||
| { |  | ||||||
|   const graphene_point_t *ap = g_value_get_boxed (a); |  | ||||||
|   const graphene_point_t *bp = g_value_get_boxed (b); |  | ||||||
|   graphene_point_t res; |  | ||||||
|  |  | ||||||
|   graphene_point_interpolate (ap, bp, progress, &res); |  | ||||||
|  |  | ||||||
|   g_value_set_boxed (retval, &res); |  | ||||||
|  |  | ||||||
|   return TRUE; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static gboolean |  | ||||||
| graphene_point3d_progress (const GValue *a, |  | ||||||
|                            const GValue *b, |  | ||||||
|                            double        progress, |  | ||||||
|                            GValue       *retval) |  | ||||||
| { |  | ||||||
|   const graphene_point3d_t *av = g_value_get_boxed (a); |  | ||||||
|   const graphene_point3d_t *bv = g_value_get_boxed (b); |  | ||||||
|   graphene_point3d_t res; |  | ||||||
|  |  | ||||||
|   graphene_point3d_interpolate (av, bv, progress, &res); |  | ||||||
|  |  | ||||||
|   g_value_set_boxed (retval, &res); |  | ||||||
|  |  | ||||||
|   return TRUE; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static gboolean |  | ||||||
| graphene_rect_progress (const GValue *a, |  | ||||||
|                         const GValue *b, |  | ||||||
|                         double        progress, |  | ||||||
|                         GValue       *retval) |  | ||||||
| { |  | ||||||
|   const graphene_rect_t *rect_a = g_value_get_boxed (a); |  | ||||||
|   const graphene_rect_t *rect_b = g_value_get_boxed (b); |  | ||||||
|   graphene_rect_t res; |  | ||||||
|  |  | ||||||
|   graphene_rect_interpolate (rect_a, rect_b, progress, &res); |  | ||||||
|  |  | ||||||
|   g_value_set_boxed (retval, &res); |  | ||||||
|  |  | ||||||
|   return TRUE; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static gboolean |  | ||||||
| graphene_size_progress (const GValue *a, |  | ||||||
|                         const GValue *b, |  | ||||||
|                         double        progress, |  | ||||||
|                         GValue       *retval) |  | ||||||
| { |  | ||||||
|   const graphene_size_t *as = g_value_get_boxed (a); |  | ||||||
|   const graphene_size_t *bs = g_value_get_boxed (b); |  | ||||||
|   graphene_size_t res; |  | ||||||
|  |  | ||||||
|   graphene_size_interpolate (as, bs, progress, &res); |  | ||||||
|  |  | ||||||
|   g_value_set_boxed (retval, &res); |  | ||||||
|  |  | ||||||
|   return TRUE; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_graphene_init (void) |  | ||||||
| { |  | ||||||
|   clutter_interval_register_progress_func (GRAPHENE_TYPE_POINT, |  | ||||||
|                                            graphene_point_progress); |  | ||||||
|   clutter_interval_register_progress_func (GRAPHENE_TYPE_POINT3D, |  | ||||||
|                                            graphene_point3d_progress); |  | ||||||
|   clutter_interval_register_progress_func (GRAPHENE_TYPE_RECT, |  | ||||||
|                                            graphene_rect_progress); |  | ||||||
|   clutter_interval_register_progress_func (GRAPHENE_TYPE_SIZE, |  | ||||||
|                                            graphene_size_progress); |  | ||||||
| } |  | ||||||
| @@ -44,12 +44,12 @@ | |||||||
|  * SECTION:clutter-grid-layout |  * SECTION:clutter-grid-layout | ||||||
|  * @Short_description: A layout manager for a grid of actors |  * @Short_description: A layout manager for a grid of actors | ||||||
|  * @Title: ClutterGridLayout |  * @Title: ClutterGridLayout | ||||||
|  * @See_also: #ClutterBoxLayout |  * @See_also: #ClutterTableLayout, #ClutterBoxLayout | ||||||
|  * |  * | ||||||
|  * #ClutterGridLayout is a layout manager which arranges its child widgets in |  * #ClutterGridLayout is a layout manager which arranges its child widgets in | ||||||
|  * rows and columns. It is a very similar to #ClutterBoxLayout, but it |  * rows and columns. It is a very similar to #ClutterTableLayout and | ||||||
|  * consistently uses #ClutterActor's alignment and expansion flags instead of |  * #ClutterBoxLayout, but it consistently uses #ClutterActor's | ||||||
|  * custom child properties. |  * alignment and expansion flags instead of custom child properties. | ||||||
|  * |  * | ||||||
|  * Children are added using clutter_grid_layout_attach(). They can span |  * Children are added using clutter_grid_layout_attach(). They can span | ||||||
|  * multiple rows or columns. It is also possible to add a child next to an |  * multiple rows or columns. It is also possible to add a child next to an | ||||||
|   | |||||||
| @@ -118,10 +118,9 @@ clutter_image_init (ClutterImage *self) | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_image_paint_content (ClutterContent      *content, | clutter_image_paint_content (ClutterContent   *content, | ||||||
|                              ClutterActor        *actor, |                              ClutterActor     *actor, | ||||||
|                              ClutterPaintNode    *root, |                              ClutterPaintNode *root) | ||||||
|                              ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterImagePrivate *priv = CLUTTER_IMAGE (content)->priv; |   ClutterImagePrivate *priv = CLUTTER_IMAGE (content)->priv; | ||||||
|   ClutterPaintNode *node; |   ClutterPaintNode *node; | ||||||
| @@ -130,7 +129,7 @@ clutter_image_paint_content (ClutterContent      *content, | |||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   node = clutter_actor_create_texture_paint_node (actor, priv->texture); |   node = clutter_actor_create_texture_paint_node (actor, priv->texture); | ||||||
|   clutter_paint_node_set_static_name (node, "Image Content"); |   clutter_paint_node_set_name (node, "Image Content"); | ||||||
|   clutter_paint_node_add_child (root, node); |   clutter_paint_node_add_child (root, node); | ||||||
|   clutter_paint_node_unref (node); |   clutter_paint_node_unref (node); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,255 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Clutter. |  | ||||||
|  * |  | ||||||
|  * An OpenGL based 'interactive canvas' library. |  | ||||||
|  * |  | ||||||
|  * Copyright © 2009, 2010, 2011  Intel Corp. |  | ||||||
|  * |  | ||||||
|  * 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/>. |  | ||||||
|  * |  | ||||||
|  * Author: Emmanuele Bassi <ebassi@linux.intel.com> |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef CLUTTER_INPUT_DEVICE_PRIVATE_H |  | ||||||
| #define CLUTTER_INPUT_DEVICE_PRIVATE_H |  | ||||||
|  |  | ||||||
| #if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION) |  | ||||||
| #error "Only <clutter/clutter.h> can be included directly." |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include <clutter/clutter-input-device.h> |  | ||||||
|  |  | ||||||
| G_BEGIN_DECLS |  | ||||||
|  |  | ||||||
| typedef struct _ClutterAxisInfo |  | ||||||
| { |  | ||||||
|   ClutterInputAxis axis; |  | ||||||
|  |  | ||||||
|   double min_axis; |  | ||||||
|   double max_axis; |  | ||||||
|  |  | ||||||
|   double min_value; |  | ||||||
|   double max_value; |  | ||||||
|  |  | ||||||
|   double resolution; |  | ||||||
| } ClutterAxisInfo; |  | ||||||
|  |  | ||||||
| typedef struct _ClutterKeyInfo |  | ||||||
| { |  | ||||||
|   guint keyval; |  | ||||||
|   ClutterModifierType modifiers; |  | ||||||
| } ClutterKeyInfo; |  | ||||||
|  |  | ||||||
| typedef struct _ClutterScrollInfo |  | ||||||
| { |  | ||||||
|   guint axis_id; |  | ||||||
|   ClutterScrollDirection direction; |  | ||||||
|   double increment; |  | ||||||
|  |  | ||||||
|   double last_value; |  | ||||||
|   guint last_value_valid : 1; |  | ||||||
| } ClutterScrollInfo; |  | ||||||
|  |  | ||||||
| typedef struct _ClutterTouchInfo |  | ||||||
| { |  | ||||||
|   ClutterEventSequence *sequence; |  | ||||||
|   ClutterActor *actor; |  | ||||||
|  |  | ||||||
|   float current_x; |  | ||||||
|   float current_y; |  | ||||||
| } ClutterTouchInfo; |  | ||||||
|  |  | ||||||
| typedef struct _ClutterPtrA11yData |  | ||||||
| { |  | ||||||
|   int n_btn_pressed; |  | ||||||
|   float current_x; |  | ||||||
|   float current_y; |  | ||||||
|  |  | ||||||
|   float dwell_x; |  | ||||||
|   float dwell_y; |  | ||||||
|   gboolean dwell_drag_started; |  | ||||||
|   gboolean dwell_gesture_started; |  | ||||||
|   guint dwell_timer; |  | ||||||
|   guint dwell_position_timer; |  | ||||||
|  |  | ||||||
|   guint secondary_click_timer; |  | ||||||
|   gboolean secondary_click_triggered; |  | ||||||
| } ClutterPtrA11yData; |  | ||||||
|  |  | ||||||
| struct _ClutterInputDevice |  | ||||||
| { |  | ||||||
|   GObject parent_instance; |  | ||||||
|  |  | ||||||
|   int id; |  | ||||||
|  |  | ||||||
|   ClutterInputDeviceType device_type; |  | ||||||
|   ClutterInputMode device_mode; |  | ||||||
|  |  | ||||||
|   char *device_name; |  | ||||||
|  |  | ||||||
|   ClutterSeat *seat; |  | ||||||
|  |  | ||||||
|   ClutterBackend *backend; |  | ||||||
|  |  | ||||||
|   /* the associated device */ |  | ||||||
|   ClutterInputDevice *associated; |  | ||||||
|  |  | ||||||
|   GList *slaves; |  | ||||||
|  |  | ||||||
|   /* the actor underneath the pointer */ |  | ||||||
|   ClutterActor *cursor_actor; |  | ||||||
|   GHashTable   *inv_touch_sequence_actors; |  | ||||||
|  |  | ||||||
|   /* the actor that has a grab in place for the device */ |  | ||||||
|   ClutterActor *pointer_grab_actor; |  | ||||||
|   ClutterActor *keyboard_grab_actor; |  | ||||||
|   GHashTable   *sequence_grab_actors; |  | ||||||
|   GHashTable   *inv_sequence_grab_actors; |  | ||||||
|  |  | ||||||
|   /* the current click count */ |  | ||||||
|   int click_count; |  | ||||||
|  |  | ||||||
|   /* the stage the device is on */ |  | ||||||
|   ClutterStage *stage; |  | ||||||
|  |  | ||||||
|   /* the current state */ |  | ||||||
|   float current_x; |  | ||||||
|   float current_y; |  | ||||||
|   uint32_t current_time; |  | ||||||
|   int current_button_number; |  | ||||||
|   ClutterModifierType current_state; |  | ||||||
|  |  | ||||||
|   /* the current touch points states */ |  | ||||||
|   GHashTable *touch_sequences_info; |  | ||||||
|  |  | ||||||
|   /* the previous state, used for click count generation */ |  | ||||||
|   int previous_x; |  | ||||||
|   int previous_y; |  | ||||||
|   uint32_t previous_time; |  | ||||||
|   int previous_button_number; |  | ||||||
|   ClutterModifierType previous_state; |  | ||||||
|  |  | ||||||
|   GArray *axes; |  | ||||||
|  |  | ||||||
|   guint n_keys; |  | ||||||
|   GArray *keys; |  | ||||||
|  |  | ||||||
|   GArray *scroll_info; |  | ||||||
|  |  | ||||||
|   char *vendor_id; |  | ||||||
|   char *product_id; |  | ||||||
|   char *node_path; |  | ||||||
|  |  | ||||||
|   GPtrArray *tools; |  | ||||||
|  |  | ||||||
|   int n_rings; |  | ||||||
|   int n_strips; |  | ||||||
|   int n_mode_groups; |  | ||||||
|  |  | ||||||
|   ClutterInputDeviceMapping mapping_mode; |  | ||||||
|  |  | ||||||
|   guint has_cursor : 1; |  | ||||||
|   guint is_enabled : 1; |  | ||||||
|  |  | ||||||
|   /* Accessiblity */ |  | ||||||
|   ClutterVirtualInputDevice *accessibility_virtual_device; |  | ||||||
|   ClutterPtrA11yData *ptr_a11y_data; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_set_associated_device (ClutterInputDevice *device, |  | ||||||
|                                                   ClutterInputDevice *associated); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_add_slave (ClutterInputDevice *master, |  | ||||||
|                                       ClutterInputDevice *slave); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_remove_slave (ClutterInputDevice *master, |  | ||||||
|                                          ClutterInputDevice *slave); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_input_device_update_from_tool (ClutterInputDevice     *device, |  | ||||||
|                                             ClutterInputDeviceTool *tool); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterStage * _clutter_input_device_get_stage (ClutterInputDevice *device); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_set_stage (ClutterInputDevice *device, |  | ||||||
|                                       ClutterStage       *stage); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_set_coords (ClutterInputDevice   *device, |  | ||||||
|                                        ClutterEventSequence *sequence, |  | ||||||
|                                        gfloat                x, |  | ||||||
|                                        gfloat                y, |  | ||||||
|                                        ClutterStage         *stage); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_set_state (ClutterInputDevice  *device, |  | ||||||
|                                       ClutterModifierType  state); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_set_time (ClutterInputDevice *device, |  | ||||||
|                                      guint32             time_); |  | ||||||
| void _clutter_input_device_set_actor (ClutterInputDevice   *device, |  | ||||||
|                                       ClutterEventSequence *sequence, |  | ||||||
|                                       ClutterActor         *actor, |  | ||||||
|                                       gboolean              emit_crossing); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterActor * clutter_input_device_update (ClutterInputDevice   *device, |  | ||||||
| 					    ClutterEventSequence *sequence, |  | ||||||
| 					    gboolean              emit_crossing); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_add_event_sequence (ClutterInputDevice *device, |  | ||||||
|                                                ClutterEvent       *event); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_remove_event_sequence (ClutterInputDevice *device, |  | ||||||
|                                                   ClutterEvent       *event); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_set_n_keys (ClutterInputDevice *device, |  | ||||||
|                                        guint               n_keys); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| gboolean _clutter_input_device_translate_axis (ClutterInputDevice *device, |  | ||||||
|                                                guint               index_, |  | ||||||
|                                                gdouble             value, |  | ||||||
|                                                gdouble            *axis_value); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| guint _clutter_input_device_add_axis (ClutterInputDevice *device, |  | ||||||
|                                       ClutterInputAxis    axis, |  | ||||||
|                                       gdouble             minimum, |  | ||||||
|                                       gdouble             maximum, |  | ||||||
|                                       gdouble             resolution); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_reset_axes (ClutterInputDevice *device); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_add_scroll_info (ClutterInputDevice     *device, |  | ||||||
|                                             guint                   index_, |  | ||||||
|                                             ClutterScrollDirection  direction, |  | ||||||
|                                             gdouble                 increment); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| gboolean _clutter_input_device_get_scroll_delta (ClutterInputDevice     *device, |  | ||||||
|                                                  guint                   index_, |  | ||||||
|                                                  gdouble                 value, |  | ||||||
|                                                  ClutterScrollDirection *direction_p, |  | ||||||
|                                                  gdouble                *delta_p); |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void _clutter_input_device_reset_scroll_info (ClutterInputDevice *device); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_input_device_add_tool (ClutterInputDevice     *device, |  | ||||||
|                                     ClutterInputDeviceTool *tool); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterInputDeviceTool * |  | ||||||
|    clutter_input_device_lookup_tool (ClutterInputDevice         *device, |  | ||||||
|                                      guint64                     serial, |  | ||||||
|                                      ClutterInputDeviceToolType  type); |  | ||||||
|  |  | ||||||
| #endif /* CLUTTER_INPUT_DEVICE_PRIVATE_H */ |  | ||||||
| @@ -37,12 +37,12 @@ | |||||||
|  |  | ||||||
| #include "clutter-actor-private.h" | #include "clutter-actor-private.h" | ||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
|  | #include "clutter-device-manager-private.h" | ||||||
| #include "clutter-enum-types.h" | #include "clutter-enum-types.h" | ||||||
| #include "clutter-event-private.h" | #include "clutter-event-private.h" | ||||||
| #include "clutter-marshal.h" | #include "clutter-marshal.h" | ||||||
| #include "clutter-private.h" | #include "clutter-private.h" | ||||||
| #include "clutter-stage-private.h" | #include "clutter-stage-private.h" | ||||||
| #include "clutter-input-device-private.h" |  | ||||||
| #include "clutter-input-device-tool.h" | #include "clutter-input-device-tool.h" | ||||||
|  |  | ||||||
| #include <math.h> | #include <math.h> | ||||||
| @@ -57,7 +57,7 @@ enum | |||||||
|   PROP_NAME, |   PROP_NAME, | ||||||
|  |  | ||||||
|   PROP_DEVICE_TYPE, |   PROP_DEVICE_TYPE, | ||||||
|   PROP_SEAT, |   PROP_DEVICE_MANAGER, | ||||||
|   PROP_DEVICE_MODE, |   PROP_DEVICE_MODE, | ||||||
|  |  | ||||||
|   PROP_HAS_CURSOR, |   PROP_HAS_CURSOR, | ||||||
| @@ -96,7 +96,6 @@ clutter_input_device_dispose (GObject *gobject) | |||||||
|   g_clear_pointer (&device->device_name, g_free); |   g_clear_pointer (&device->device_name, g_free); | ||||||
|   g_clear_pointer (&device->vendor_id, g_free); |   g_clear_pointer (&device->vendor_id, g_free); | ||||||
|   g_clear_pointer (&device->product_id, g_free); |   g_clear_pointer (&device->product_id, g_free); | ||||||
|   g_clear_pointer (&device->node_path, g_free); |  | ||||||
|  |  | ||||||
|   if (device->associated != NULL) |   if (device->associated != NULL) | ||||||
|     { |     { | ||||||
| @@ -171,8 +170,8 @@ clutter_input_device_set_property (GObject      *gobject, | |||||||
|       self->device_type = g_value_get_enum (value); |       self->device_type = g_value_get_enum (value); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case PROP_SEAT: |     case PROP_DEVICE_MANAGER: | ||||||
|       self->seat = g_value_get_object (value); |       self->device_manager = g_value_get_object (value); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case PROP_DEVICE_MODE: |     case PROP_DEVICE_MODE: | ||||||
| @@ -247,8 +246,8 @@ clutter_input_device_get_property (GObject    *gobject, | |||||||
|       g_value_set_enum (value, self->device_type); |       g_value_set_enum (value, self->device_type); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case PROP_SEAT: |     case PROP_DEVICE_MANAGER: | ||||||
|       g_value_set_object (value, self->seat); |       g_value_set_object (value, self->device_manager); | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     case PROP_DEVICE_MODE: |     case PROP_DEVICE_MODE: | ||||||
| @@ -362,15 +361,17 @@ clutter_input_device_class_init (ClutterInputDeviceClass *klass) | |||||||
|                        G_PARAM_CONSTRUCT_ONLY); |                        G_PARAM_CONSTRUCT_ONLY); | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * ClutterInputDevice:seat: |    * ClutterInputDevice:device-manager: | ||||||
|    * |    * | ||||||
|    * The #ClutterSeat instance which owns the device |    * The #ClutterDeviceManager instance which owns the device | ||||||
|  |    * | ||||||
|  |    * Since: 1.6 | ||||||
|    */ |    */ | ||||||
|   obj_props[PROP_SEAT] = |   obj_props[PROP_DEVICE_MANAGER] = | ||||||
|     g_param_spec_object ("seat", |     g_param_spec_object ("device-manager", | ||||||
|                          P_("Seat"), |                          P_("Device Manager"), | ||||||
|                          P_("Seat"), |                          P_("The device manager instance"), | ||||||
|                          CLUTTER_TYPE_SEAT, |                          CLUTTER_TYPE_DEVICE_MANAGER, | ||||||
|                          CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); |                          CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
| @@ -798,7 +799,7 @@ on_cursor_actor_reactive_changed (ClutterActor       *actor, | |||||||
|  * |  * | ||||||
|  * Sets the actor under the pointer coordinates of @device |  * Sets the actor under the pointer coordinates of @device | ||||||
|  * |  * | ||||||
|  * This function is called by clutter_input_device_update() |  * This function is called by _clutter_input_device_update() | ||||||
|  * and it will: |  * and it will: | ||||||
|  * |  * | ||||||
|  *   - queue a %CLUTTER_LEAVE event on the previous pointer actor |  *   - queue a %CLUTTER_LEAVE event on the previous pointer actor | ||||||
| @@ -990,7 +991,7 @@ clutter_input_device_get_enabled (ClutterInputDevice *device) | |||||||
| gboolean | gboolean | ||||||
| clutter_input_device_get_coords (ClutterInputDevice   *device, | clutter_input_device_get_coords (ClutterInputDevice   *device, | ||||||
|                                  ClutterEventSequence *sequence, |                                  ClutterEventSequence *sequence, | ||||||
|                                  graphene_point_t     *point) |                                  ClutterPoint         *point) | ||||||
| { | { | ||||||
|   g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE); |   g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE); | ||||||
|   g_return_val_if_fail (point != NULL, FALSE); |   g_return_val_if_fail (point != NULL, FALSE); | ||||||
| @@ -1016,7 +1017,7 @@ clutter_input_device_get_coords (ClutterInputDevice   *device, | |||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * clutter_input_device_update: |  * _clutter_input_device_update: | ||||||
|  * @device: a #ClutterInputDevice |  * @device: a #ClutterInputDevice | ||||||
|  * |  * | ||||||
|  * Updates the input @device by determining the #ClutterActor underneath the |  * Updates the input @device by determining the #ClutterActor underneath the | ||||||
| @@ -1030,14 +1031,14 @@ clutter_input_device_get_coords (ClutterInputDevice   *device, | |||||||
|  * Since: 1.2 |  * Since: 1.2 | ||||||
|  */ |  */ | ||||||
| ClutterActor * | ClutterActor * | ||||||
| clutter_input_device_update (ClutterInputDevice   *device, | _clutter_input_device_update (ClutterInputDevice   *device, | ||||||
|                              ClutterEventSequence *sequence, |                               ClutterEventSequence *sequence, | ||||||
|                              gboolean              emit_crossing) |                               gboolean              emit_crossing) | ||||||
| { | { | ||||||
|   ClutterStage *stage; |   ClutterStage *stage; | ||||||
|   ClutterActor *new_cursor_actor; |   ClutterActor *new_cursor_actor; | ||||||
|   ClutterActor *old_cursor_actor; |   ClutterActor *old_cursor_actor; | ||||||
|   graphene_point_t point = GRAPHENE_POINT_INIT (-1.0f, -1.0f); |   ClutterPoint point = { -1, -1 }; | ||||||
|   ClutterInputDeviceType device_type = device->device_type; |   ClutterInputDeviceType device_type = device->device_type; | ||||||
|  |  | ||||||
|   g_assert (device_type != CLUTTER_KEYBOARD_DEVICE && |   g_assert (device_type != CLUTTER_KEYBOARD_DEVICE && | ||||||
| @@ -1223,11 +1224,11 @@ clutter_input_device_get_device_mode (ClutterInputDevice *device) | |||||||
|  * |  * | ||||||
|  *   translate_native_event_to_clutter (native_event, &c_event); |  *   translate_native_event_to_clutter (native_event, &c_event); | ||||||
|  * |  * | ||||||
|  *   // get the seat |  *   // get the device manager | ||||||
|  *   seat = clutter_backend_get_deafult_seat (clutter_get_default_backend ()); |  *   manager = clutter_device_manager_get_default (); | ||||||
|  * |  * | ||||||
|  *   // use the default Core Pointer that Clutter backends register by default |  *   // use the default Core Pointer that Clutter backends register by default | ||||||
|  *   device = clutter_seat_get_pointer (seat); |  *   device = clutter_device_manager_get_core_device (manager, %CLUTTER_POINTER_DEVICE); | ||||||
|  * |  * | ||||||
|  *   // update the state of the input device |  *   // update the state of the input device | ||||||
|  *   clutter_input_device_update_from_event (device, &c_event, FALSE); |  *   clutter_input_device_update_from_event (device, &c_event, FALSE); | ||||||
| @@ -2440,19 +2441,3 @@ clutter_input_device_is_grouped (ClutterInputDevice *device, | |||||||
|  |  | ||||||
|   return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->is_grouped (device, other_device); |   return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->is_grouped (device, other_device); | ||||||
| } | } | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_input_device_get_seat: |  | ||||||
|  * @device: a #ClutterInputDevice |  | ||||||
|  * |  | ||||||
|  * Returns the seat the device belongs to |  | ||||||
|  * |  | ||||||
|  * Returns: (transfer none): the device seat |  | ||||||
|  **/ |  | ||||||
| ClutterSeat * |  | ||||||
| clutter_input_device_get_seat (ClutterInputDevice *device) |  | ||||||
| { |  | ||||||
|   g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL); |  | ||||||
|  |  | ||||||
|   return device->seat; |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -28,40 +28,10 @@ | |||||||
| #error "Only <clutter/clutter.h> can be included directly." | #error "Only <clutter/clutter.h> can be included directly." | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include <clutter/clutter-backend.h> |  | ||||||
| #include <clutter/clutter-types.h> | #include <clutter/clutter-types.h> | ||||||
| #include <clutter/clutter-seat.h> |  | ||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
| typedef void (*ClutterEmitInputDeviceEvent) (ClutterEvent       *event, |  | ||||||
|                                              ClutterInputDevice *device); |  | ||||||
|  |  | ||||||
| struct _ClutterInputDeviceClass |  | ||||||
| { |  | ||||||
|   GObjectClass parent_class; |  | ||||||
|  |  | ||||||
|   gboolean (* keycode_to_evdev) (ClutterInputDevice *device, |  | ||||||
|                                  guint               hardware_keycode, |  | ||||||
|                                  guint              *evdev_keycode); |  | ||||||
|   void (* update_from_tool) (ClutterInputDevice     *device, |  | ||||||
|                              ClutterInputDeviceTool *tool); |  | ||||||
|  |  | ||||||
|   gboolean (* is_mode_switch_button) (ClutterInputDevice *device, |  | ||||||
|                                       guint               group, |  | ||||||
|                                       guint               button); |  | ||||||
|   gint (* get_group_n_modes) (ClutterInputDevice *device, |  | ||||||
|                               gint                group); |  | ||||||
|  |  | ||||||
|   gboolean (* is_grouped) (ClutterInputDevice *device, |  | ||||||
|                            ClutterInputDevice *other_device); |  | ||||||
|  |  | ||||||
|   /* Keyboard accessbility */ |  | ||||||
|   void (* process_kbd_a11y_event) (ClutterEvent               *event, |  | ||||||
|                                    ClutterInputDevice         *device, |  | ||||||
|                                    ClutterEmitInputDeviceEvent emit_event_func); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_INPUT_DEVICE               (clutter_input_device_get_type ()) | #define CLUTTER_TYPE_INPUT_DEVICE               (clutter_input_device_get_type ()) | ||||||
| #define CLUTTER_INPUT_DEVICE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_INPUT_DEVICE, ClutterInputDevice)) | #define CLUTTER_INPUT_DEVICE(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_INPUT_DEVICE, ClutterInputDevice)) | ||||||
| #define CLUTTER_IS_INPUT_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_INPUT_DEVICE)) | #define CLUTTER_IS_INPUT_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_INPUT_DEVICE)) | ||||||
| @@ -88,7 +58,7 @@ gint                    clutter_input_device_get_device_id      (ClutterInputDev | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean                clutter_input_device_get_coords        (ClutterInputDevice   *device, | gboolean                clutter_input_device_get_coords        (ClutterInputDevice   *device, | ||||||
|                                                                 ClutterEventSequence *sequence, |                                                                 ClutterEventSequence *sequence, | ||||||
|                                                                 graphene_point_t     *point); |                                                                 ClutterPoint         *point); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| ClutterModifierType     clutter_input_device_get_modifier_state (ClutterInputDevice  *device); | ClutterModifierType     clutter_input_device_get_modifier_state (ClutterInputDevice  *device); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| @@ -201,8 +171,6 @@ void                      clutter_input_device_set_mapping_mode (ClutterInputDev | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean                  clutter_input_device_is_grouped       (ClutterInputDevice *device, | gboolean                  clutter_input_device_is_grouped       (ClutterInputDevice *device, | ||||||
|                                                                  ClutterInputDevice *other_device); |                                                                  ClutterInputDevice *other_device); | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterSeat *             clutter_input_device_get_seat         (ClutterInputDevice *device); |  | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -89,8 +89,8 @@ clutter_input_focus_reset (ClutterInputFocus *focus) | |||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| clutter_input_focus_set_cursor_location (ClutterInputFocus     *focus, | clutter_input_focus_set_cursor_location (ClutterInputFocus *focus, | ||||||
|                                          const graphene_rect_t *rect) |                                          const ClutterRect *rect) | ||||||
| { | { | ||||||
|   ClutterInputFocusPrivate *priv; |   ClutterInputFocusPrivate *priv; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -57,8 +57,8 @@ gboolean clutter_input_focus_is_focused (ClutterInputFocus *focus); | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void clutter_input_focus_reset (ClutterInputFocus *focus); | void clutter_input_focus_reset (ClutterInputFocus *focus); | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void clutter_input_focus_set_cursor_location (ClutterInputFocus     *focus, | void clutter_input_focus_set_cursor_location (ClutterInputFocus *focus, | ||||||
|                                               const graphene_rect_t *rect); |                                               const ClutterRect *rect); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void clutter_input_focus_set_surrounding (ClutterInputFocus *focus, | void clutter_input_focus_set_surrounding (ClutterInputFocus *focus, | ||||||
|   | |||||||
| @@ -26,8 +26,8 @@ ClutterInputFocus * clutter_input_method_get_focus (ClutterInputMethod *method); | |||||||
|  |  | ||||||
| void clutter_input_method_reset               (ClutterInputMethod *method); | void clutter_input_method_reset               (ClutterInputMethod *method); | ||||||
|  |  | ||||||
| void clutter_input_method_set_cursor_location (ClutterInputMethod    *method, | void clutter_input_method_set_cursor_location (ClutterInputMethod *method, | ||||||
|                                                const graphene_rect_t *rect); |                                                const ClutterRect  *rect); | ||||||
| void clutter_input_method_set_surrounding     (ClutterInputMethod *method, | void clutter_input_method_set_surrounding     (ClutterInputMethod *method, | ||||||
|                                                const gchar        *text, |                                                const gchar        *text, | ||||||
|                                                guint               cursor, |                                                guint               cursor, | ||||||
|   | |||||||
| @@ -22,10 +22,10 @@ | |||||||
| #include "clutter-build-config.h" | #include "clutter-build-config.h" | ||||||
|  |  | ||||||
| #include "clutter-private.h" | #include "clutter-private.h" | ||||||
| #include "clutter/clutter-input-device-private.h" |  | ||||||
| #include "clutter/clutter-input-method.h" | #include "clutter/clutter-input-method.h" | ||||||
| #include "clutter/clutter-input-method-private.h" | #include "clutter/clutter-input-method-private.h" | ||||||
| #include "clutter/clutter-input-focus-private.h" | #include "clutter/clutter-input-focus-private.h" | ||||||
|  | #include "clutter/clutter-device-manager-private.h" | ||||||
|  |  | ||||||
| typedef struct _ClutterInputMethodPrivate ClutterInputMethodPrivate; | typedef struct _ClutterInputMethodPrivate ClutterInputMethodPrivate; | ||||||
|  |  | ||||||
| @@ -187,7 +187,7 @@ clutter_input_method_class_init (ClutterInputMethodClass *klass) | |||||||
|                   G_TYPE_FROM_CLASS (object_class), |                   G_TYPE_FROM_CLASS (object_class), | ||||||
|                   G_SIGNAL_RUN_LAST, |                   G_SIGNAL_RUN_LAST, | ||||||
|                   0, NULL, NULL, NULL, |                   0, NULL, NULL, NULL, | ||||||
|                   G_TYPE_NONE, 1, GRAPHENE_TYPE_RECT); |                   G_TYPE_NONE, 1, CLUTTER_TYPE_RECT); | ||||||
|  |  | ||||||
|   pspecs[PROP_CONTENT_HINTS] = |   pspecs[PROP_CONTENT_HINTS] = | ||||||
|     g_param_spec_flags ("content-hints", |     g_param_spec_flags ("content-hints", | ||||||
| @@ -377,8 +377,8 @@ clutter_input_method_reset (ClutterInputMethod *im) | |||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| clutter_input_method_set_cursor_location (ClutterInputMethod    *im, | clutter_input_method_set_cursor_location (ClutterInputMethod *im, | ||||||
|                                           const graphene_rect_t *rect) |                                           const ClutterRect  *rect) | ||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); |   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||||
|  |  | ||||||
| @@ -452,8 +452,8 @@ clutter_input_method_forward_key (ClutterInputMethod *im, | |||||||
|                                   gboolean            press) |                                   gboolean            press) | ||||||
| { | { | ||||||
|   ClutterInputMethodPrivate *priv; |   ClutterInputMethodPrivate *priv; | ||||||
|  |   ClutterDeviceManager *device_manager; | ||||||
|   ClutterInputDevice *keyboard; |   ClutterInputDevice *keyboard; | ||||||
|   ClutterSeat *seat; |  | ||||||
|   ClutterStage *stage; |   ClutterStage *stage; | ||||||
|   ClutterEvent *event; |   ClutterEvent *event; | ||||||
|  |  | ||||||
| @@ -463,8 +463,9 @@ clutter_input_method_forward_key (ClutterInputMethod *im, | |||||||
|   if (!priv->focus) |   if (!priv->focus) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   seat = clutter_backend_get_default_seat (clutter_get_default_backend ()); |   device_manager = clutter_device_manager_get_default (); | ||||||
|   keyboard = clutter_seat_get_keyboard (seat); |   keyboard = clutter_device_manager_get_core_device (device_manager, | ||||||
|  |                                                      CLUTTER_KEYBOARD_DEVICE); | ||||||
|   stage = _clutter_input_device_get_stage (keyboard); |   stage = _clutter_input_device_get_stage (keyboard); | ||||||
|   if (stage == NULL) |   if (stage == NULL) | ||||||
|     return; |     return; | ||||||
|   | |||||||
| @@ -42,8 +42,8 @@ struct _ClutterInputMethodClass | |||||||
|  |  | ||||||
|   void (* reset) (ClutterInputMethod *im); |   void (* reset) (ClutterInputMethod *im); | ||||||
|  |  | ||||||
|   void (* set_cursor_location) (ClutterInputMethod    *im, |   void (* set_cursor_location) (ClutterInputMethod          *im, | ||||||
|                                 const graphene_rect_t *rect); |                                 const ClutterRect           *rect); | ||||||
|   void (* set_surrounding) (ClutterInputMethod *im, |   void (* set_surrounding) (ClutterInputMethod *im, | ||||||
|                             const gchar        *text, |                             const gchar        *text, | ||||||
|                             guint               cursor, |                             guint               cursor, | ||||||
|   | |||||||
| @@ -25,9 +25,10 @@ | |||||||
|  |  | ||||||
| #include "clutter-build-config.h" | #include "clutter-build-config.h" | ||||||
|  |  | ||||||
|  | #include "clutter-device-manager.h" | ||||||
|  | #include "clutter-device-manager-private.h" | ||||||
| #include "clutter-enum-types.h" | #include "clutter-enum-types.h" | ||||||
| #include "clutter-input-device.h" | #include "clutter-input-device.h" | ||||||
| #include "clutter-input-device-private.h" |  | ||||||
| #include "clutter-input-pointer-a11y-private.h" | #include "clutter-input-pointer-a11y-private.h" | ||||||
| #include "clutter-main.h" | #include "clutter-main.h" | ||||||
| #include "clutter-virtual-input-device.h" | #include "clutter-virtual-input-device.h" | ||||||
| @@ -37,7 +38,7 @@ is_secondary_click_enabled (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return (settings.controls & CLUTTER_A11Y_SECONDARY_CLICK_ENABLED); |   return (settings.controls & CLUTTER_A11Y_SECONDARY_CLICK_ENABLED); | ||||||
| } | } | ||||||
| @@ -47,7 +48,7 @@ is_dwell_click_enabled (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return (settings.controls & CLUTTER_A11Y_DWELL_ENABLED); |   return (settings.controls & CLUTTER_A11Y_DWELL_ENABLED); | ||||||
| } | } | ||||||
| @@ -57,7 +58,7 @@ get_secondary_click_delay (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return settings.secondary_click_delay; |   return settings.secondary_click_delay; | ||||||
| } | } | ||||||
| @@ -67,7 +68,7 @@ get_dwell_delay (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return settings.dwell_delay; |   return settings.dwell_delay; | ||||||
| } | } | ||||||
| @@ -77,7 +78,7 @@ get_dwell_threshold (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return settings.dwell_threshold; |   return settings.dwell_threshold; | ||||||
| } | } | ||||||
| @@ -87,7 +88,7 @@ get_dwell_mode (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return settings.dwell_mode; |   return settings.dwell_mode; | ||||||
| } | } | ||||||
| @@ -97,7 +98,7 @@ get_dwell_click_type (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   return settings.dwell_click_type; |   return settings.dwell_click_type; | ||||||
| } | } | ||||||
| @@ -108,7 +109,7 @@ get_dwell_click_type_for_direction (ClutterInputDevice               *device, | |||||||
| { | { | ||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   if (direction == settings.dwell_gesture_single) |   if (direction == settings.dwell_gesture_single) | ||||||
|     return CLUTTER_A11Y_DWELL_CLICK_TYPE_PRIMARY; |     return CLUTTER_A11Y_DWELL_CLICK_TYPE_PRIMARY; | ||||||
| @@ -167,7 +168,7 @@ trigger_secondary_click (gpointer data) | |||||||
|   device->ptr_a11y_data->secondary_click_triggered = TRUE; |   device->ptr_a11y_data->secondary_click_triggered = TRUE; | ||||||
|   device->ptr_a11y_data->secondary_click_timer = 0; |   device->ptr_a11y_data->secondary_click_timer = 0; | ||||||
|  |  | ||||||
|   g_signal_emit_by_name (device->seat, |   g_signal_emit_by_name (device->device_manager, | ||||||
|                          "ptr-a11y-timeout-stopped", |                          "ptr-a11y-timeout-stopped", | ||||||
|                          device, |                          device, | ||||||
|                          CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK, |                          CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK, | ||||||
| @@ -184,7 +185,7 @@ start_secondary_click_timeout (ClutterInputDevice *device) | |||||||
|   device->ptr_a11y_data->secondary_click_timer = |   device->ptr_a11y_data->secondary_click_timer = | ||||||
|     clutter_threads_add_timeout (delay, trigger_secondary_click, device); |     clutter_threads_add_timeout (delay, trigger_secondary_click, device); | ||||||
|  |  | ||||||
|   g_signal_emit_by_name (device->seat, |   g_signal_emit_by_name (device->device_manager, | ||||||
|                          "ptr-a11y-timeout-started", |                          "ptr-a11y-timeout-started", | ||||||
|                          device, |                          device, | ||||||
|                          CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK, |                          CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK, | ||||||
| @@ -196,10 +197,10 @@ stop_secondary_click_timeout (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   if (device->ptr_a11y_data->secondary_click_timer) |   if (device->ptr_a11y_data->secondary_click_timer) | ||||||
|     { |     { | ||||||
|       g_clear_handle_id (&device->ptr_a11y_data->secondary_click_timer, |       g_source_remove (device->ptr_a11y_data->secondary_click_timer); | ||||||
|                          g_source_remove); |       device->ptr_a11y_data->secondary_click_timer = 0; | ||||||
|  |  | ||||||
|       g_signal_emit_by_name (device->seat, |       g_signal_emit_by_name (device->device_manager, | ||||||
|                              "ptr-a11y-timeout-stopped", |                              "ptr-a11y-timeout-stopped", | ||||||
|                              device, |                              device, | ||||||
|                              CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK, |                              CLUTTER_A11Y_TIMEOUT_TYPE_SECONDARY_CLICK, | ||||||
| @@ -303,7 +304,7 @@ update_dwell_click_type (ClutterInputDevice *device) | |||||||
|   ClutterPointerA11ySettings settings; |   ClutterPointerA11ySettings settings; | ||||||
|   ClutterPointerA11yDwellClickType dwell_click_type; |   ClutterPointerA11yDwellClickType dwell_click_type; | ||||||
|  |  | ||||||
|   clutter_seat_get_pointer_a11y_settings (device->seat, &settings); |   clutter_device_manager_get_pointer_a11y_settings (device->device_manager, &settings); | ||||||
|  |  | ||||||
|   dwell_click_type = settings.dwell_click_type; |   dwell_click_type = settings.dwell_click_type; | ||||||
|   switch (dwell_click_type) |   switch (dwell_click_type) | ||||||
| @@ -328,9 +329,10 @@ update_dwell_click_type (ClutterInputDevice *device) | |||||||
|   if (dwell_click_type != settings.dwell_click_type) |   if (dwell_click_type != settings.dwell_click_type) | ||||||
|     { |     { | ||||||
|       settings.dwell_click_type = dwell_click_type; |       settings.dwell_click_type = dwell_click_type; | ||||||
|       clutter_seat_set_pointer_a11y_settings (device->seat, &settings); |       clutter_device_manager_set_pointer_a11y_settings (device->device_manager, | ||||||
|  |                                                         &settings); | ||||||
|  |  | ||||||
|       g_signal_emit_by_name (device->seat, |       g_signal_emit_by_name (device->device_manager, | ||||||
|                              "ptr-a11y-dwell-click-type-changed", |                              "ptr-a11y-dwell-click-type-changed", | ||||||
|                              dwell_click_type); |                              dwell_click_type); | ||||||
|     } |     } | ||||||
| @@ -435,7 +437,7 @@ trigger_dwell_gesture (gpointer data) | |||||||
|   device->ptr_a11y_data->dwell_timer = |   device->ptr_a11y_data->dwell_timer = | ||||||
|     clutter_threads_add_timeout (delay, trigger_clear_dwell_gesture, device); |     clutter_threads_add_timeout (delay, trigger_clear_dwell_gesture, device); | ||||||
|  |  | ||||||
|   g_signal_emit_by_name (device->seat, |   g_signal_emit_by_name (device->device_manager, | ||||||
|                          "ptr-a11y-timeout-stopped", |                          "ptr-a11y-timeout-stopped", | ||||||
|                          device, |                          device, | ||||||
|                          CLUTTER_A11Y_TIMEOUT_TYPE_GESTURE, |                          CLUTTER_A11Y_TIMEOUT_TYPE_GESTURE, | ||||||
| @@ -453,7 +455,7 @@ start_dwell_gesture_timeout (ClutterInputDevice *device) | |||||||
|     clutter_threads_add_timeout (delay, trigger_dwell_gesture, device); |     clutter_threads_add_timeout (delay, trigger_dwell_gesture, device); | ||||||
|   device->ptr_a11y_data->dwell_gesture_started = TRUE; |   device->ptr_a11y_data->dwell_gesture_started = TRUE; | ||||||
|  |  | ||||||
|   g_signal_emit_by_name (device->seat, |   g_signal_emit_by_name (device->device_manager, | ||||||
|                          "ptr-a11y-timeout-started", |                          "ptr-a11y-timeout-started", | ||||||
|                          device, |                          device, | ||||||
|                          CLUTTER_A11Y_TIMEOUT_TYPE_GESTURE, |                          CLUTTER_A11Y_TIMEOUT_TYPE_GESTURE, | ||||||
| @@ -467,7 +469,7 @@ trigger_dwell_click (gpointer data) | |||||||
|  |  | ||||||
|   device->ptr_a11y_data->dwell_timer = 0; |   device->ptr_a11y_data->dwell_timer = 0; | ||||||
|  |  | ||||||
|   g_signal_emit_by_name (device->seat, |   g_signal_emit_by_name (device->device_manager, | ||||||
|                          "ptr-a11y-timeout-stopped", |                          "ptr-a11y-timeout-stopped", | ||||||
|                          device, |                          device, | ||||||
|                          CLUTTER_A11Y_TIMEOUT_TYPE_DWELL, |                          CLUTTER_A11Y_TIMEOUT_TYPE_DWELL, | ||||||
| @@ -497,7 +499,7 @@ start_dwell_timeout (ClutterInputDevice *device) | |||||||
|   device->ptr_a11y_data->dwell_timer = |   device->ptr_a11y_data->dwell_timer = | ||||||
|     clutter_threads_add_timeout (delay, trigger_dwell_click, device); |     clutter_threads_add_timeout (delay, trigger_dwell_click, device); | ||||||
|  |  | ||||||
|   g_signal_emit_by_name (device->seat, |   g_signal_emit_by_name (device->device_manager, | ||||||
|                          "ptr-a11y-timeout-started", |                          "ptr-a11y-timeout-started", | ||||||
|                          device, |                          device, | ||||||
|                          CLUTTER_A11Y_TIMEOUT_TYPE_DWELL, |                          CLUTTER_A11Y_TIMEOUT_TYPE_DWELL, | ||||||
| @@ -509,10 +511,11 @@ stop_dwell_timeout (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   if (device->ptr_a11y_data->dwell_timer) |   if (device->ptr_a11y_data->dwell_timer) | ||||||
|     { |     { | ||||||
|       g_clear_handle_id (&device->ptr_a11y_data->dwell_timer, g_source_remove); |       g_source_remove (device->ptr_a11y_data->dwell_timer); | ||||||
|  |       device->ptr_a11y_data->dwell_timer = 0; | ||||||
|       device->ptr_a11y_data->dwell_gesture_started = FALSE; |       device->ptr_a11y_data->dwell_gesture_started = FALSE; | ||||||
|  |  | ||||||
|       g_signal_emit_by_name (device->seat, |       g_signal_emit_by_name (device->device_manager, | ||||||
|                              "ptr-a11y-timeout-stopped", |                              "ptr-a11y-timeout-stopped", | ||||||
|                              device, |                              device, | ||||||
|                              CLUTTER_A11Y_TIMEOUT_TYPE_DWELL, |                              CLUTTER_A11Y_TIMEOUT_TYPE_DWELL, | ||||||
| @@ -571,7 +574,8 @@ is_device_core_pointer (ClutterInputDevice *device) | |||||||
| { | { | ||||||
|   ClutterInputDevice *core_pointer; |   ClutterInputDevice *core_pointer; | ||||||
|  |  | ||||||
|   core_pointer = clutter_seat_get_pointer (device->seat); |   core_pointer = clutter_device_manager_get_core_device (device->device_manager, | ||||||
|  |                                                          CLUTTER_POINTER_DEVICE); | ||||||
|   if (core_pointer == NULL) |   if (core_pointer == NULL) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
| @@ -585,8 +589,8 @@ _clutter_input_pointer_a11y_add_device (ClutterInputDevice *device) | |||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   device->accessibility_virtual_device = |   device->accessibility_virtual_device = | ||||||
|     clutter_seat_create_virtual_device (device->seat, |     clutter_device_manager_create_virtual_device (device->device_manager, | ||||||
|                                         CLUTTER_POINTER_DEVICE); |                                                   CLUTTER_POINTER_DEVICE); | ||||||
|  |  | ||||||
|   device->ptr_a11y_data = g_new0 (ClutterPtrA11yData, 1); |   device->ptr_a11y_data = g_new0 (ClutterPtrA11yData, 1); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -62,9 +62,3 @@ clutter_keymap_get_caps_lock_state (ClutterKeymap *keymap) | |||||||
| { | { | ||||||
|   return CLUTTER_KEYMAP_GET_CLASS (keymap)->get_caps_lock_state (keymap); |   return CLUTTER_KEYMAP_GET_CLASS (keymap)->get_caps_lock_state (keymap); | ||||||
| } | } | ||||||
|  |  | ||||||
| PangoDirection |  | ||||||
| clutter_keymap_get_direction (ClutterKeymap *keymap) |  | ||||||
| { |  | ||||||
|   return CLUTTER_KEYMAP_GET_CLASS (keymap)->get_direction (keymap); |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -29,7 +29,6 @@ | |||||||
| #include <clutter/clutter-macros.h> | #include <clutter/clutter-macros.h> | ||||||
|  |  | ||||||
| #include <glib-object.h> | #include <glib-object.h> | ||||||
| #include <pango/pango.h> |  | ||||||
|  |  | ||||||
| typedef struct _ClutterKeymap ClutterKeymap; | typedef struct _ClutterKeymap ClutterKeymap; | ||||||
| typedef struct _ClutterKeymapClass ClutterKeymapClass; | typedef struct _ClutterKeymapClass ClutterKeymapClass; | ||||||
| @@ -40,7 +39,6 @@ struct _ClutterKeymapClass | |||||||
|  |  | ||||||
|   gboolean (* get_num_lock_state)  (ClutterKeymap *keymap); |   gboolean (* get_num_lock_state)  (ClutterKeymap *keymap); | ||||||
|   gboolean (* get_caps_lock_state) (ClutterKeymap *keymap); |   gboolean (* get_caps_lock_state) (ClutterKeymap *keymap); | ||||||
|   PangoDirection (* get_direction) (ClutterKeymap *keymap); |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_KEYMAP (clutter_keymap_get_type ()) | #define CLUTTER_TYPE_KEYMAP (clutter_keymap_get_type ()) | ||||||
| @@ -55,6 +53,4 @@ gboolean clutter_keymap_get_num_lock_state  (ClutterKeymap *keymap); | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean clutter_keymap_get_caps_lock_state (ClutterKeymap *keymap); | gboolean clutter_keymap_get_caps_lock_state (ClutterKeymap *keymap); | ||||||
|  |  | ||||||
| PangoDirection clutter_keymap_get_direction (ClutterKeymap *keymap); |  | ||||||
|  |  | ||||||
| #endif /* CLUTTER_KEYMAP_H */ | #endif /* CLUTTER_KEYMAP_H */ | ||||||
|   | |||||||
| @@ -58,6 +58,10 @@ die "Could not open file keysymdef.h: $!\n" | |||||||
| die "Could not open file clutter-keysyms.h: $!\n" | die "Could not open file clutter-keysyms.h: $!\n" | ||||||
|     unless open(OUT_KEYSYMS, ">:utf8", "clutter-keysyms.h"); |     unless open(OUT_KEYSYMS, ">:utf8", "clutter-keysyms.h"); | ||||||
|  |  | ||||||
|  | # Output: clutter/clutter/deprecated/clutter-keysyms.h | ||||||
|  | die "Could not open file clutter-keysyms-compat.h: $!\n" | ||||||
|  |     unless open(OUT_KEYSYMS_COMPAT, ">:utf8", "deprecated/clutter-keysyms.h"); | ||||||
|  |  | ||||||
| my $LICENSE_HEADER= <<EOF; | my $LICENSE_HEADER= <<EOF; | ||||||
| /* Clutter | /* Clutter | ||||||
|  * |  * | ||||||
| @@ -81,6 +85,7 @@ my $LICENSE_HEADER= <<EOF; | |||||||
| EOF | EOF | ||||||
|  |  | ||||||
| print OUT_KEYSYMS $LICENSE_HEADER; | print OUT_KEYSYMS $LICENSE_HEADER; | ||||||
|  | print OUT_KEYSYMS_COMPAT $LICENSE_HEADER; | ||||||
|  |  | ||||||
| print OUT_KEYSYMS<<EOF; | print OUT_KEYSYMS<<EOF; | ||||||
|  |  | ||||||
| @@ -99,6 +104,23 @@ print OUT_KEYSYMS<<EOF; | |||||||
|  |  | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
|  | print OUT_KEYSYMS_COMPAT<<EOF; | ||||||
|  | /* | ||||||
|  |  * Compatibility version of clutter-keysyms.h. | ||||||
|  |  * | ||||||
|  |  * Since Clutter 1.4, the key symbol defines have been changed to have | ||||||
|  |  * a KEY_ prefix. This is a compatibility header that is included when | ||||||
|  |  * deprecated symbols are enabled. Consider porting to the new names | ||||||
|  |  * instead. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef __CLUTTER_KEYSYMS_DEPRECATED_H__ | ||||||
|  | #define __CLUTTER_KEYSYMS_DEPRECATED_H__ | ||||||
|  |  | ||||||
|  | #ifndef CLUTTER_DISABLE_DEPRECATED | ||||||
|  |  | ||||||
|  | EOF | ||||||
|  |  | ||||||
| while (<IN_KEYSYMDEF>) | while (<IN_KEYSYMDEF>) | ||||||
| { | { | ||||||
| 	next if ( ! /^#define / ); | 	next if ( ! /^#define / ); | ||||||
| @@ -115,8 +137,13 @@ while (<IN_KEYSYMDEF>) | |||||||
| 	my $element = $keysymelements[1]; | 	my $element = $keysymelements[1]; | ||||||
| 	my $binding = $element; | 	my $binding = $element; | ||||||
| 	$binding =~ s/^XK_/CLUTTER_KEY_/g; | 	$binding =~ s/^XK_/CLUTTER_KEY_/g; | ||||||
|  | 	my $compat_binding = $element; | ||||||
|  | 	$compat_binding =~ s/^XK_/CLUTTER_/g; | ||||||
|  |  | ||||||
|  | 	my $deprecation = "CLUTTER_DEPRECATED_MACRO_FOR(\"Deprecated key symbol. Use $binding instead.\")"; | ||||||
|  |  | ||||||
| 	printf OUT_KEYSYMS "#define %s 0x%03x\n", $binding, hex($keysymelements[2]); | 	printf OUT_KEYSYMS "#define %s 0x%03x\n", $binding, hex($keysymelements[2]); | ||||||
|  | 	printf OUT_KEYSYMS_COMPAT "#define %s 0x%03x %s\n", $compat_binding, hex($keysymelements[2]), $deprecation; | ||||||
| } | } | ||||||
|  |  | ||||||
| close IN_KEYSYMDEF; | close IN_KEYSYMDEF; | ||||||
| @@ -160,8 +187,11 @@ while (<IN_XF86KEYSYM>) | |||||||
| 	my $element = $keysymelements[1]; | 	my $element = $keysymelements[1]; | ||||||
| 	my $binding = $element; | 	my $binding = $element; | ||||||
| 	$binding =~ s/^XF86XK_/CLUTTER_KEY_/g; | 	$binding =~ s/^XF86XK_/CLUTTER_KEY_/g; | ||||||
|  | 	my $compat_binding = $element; | ||||||
|  | 	$compat_binding =~ s/^XF86XK_/CLUTTER_/g; | ||||||
|  |  | ||||||
| 	printf OUT_KEYSYMS "#define %s 0x%03x\n", $binding, hex($keysymelements[2]); | 	printf OUT_KEYSYMS "#define %s 0x%03x\n", $binding, hex($keysymelements[2]); | ||||||
|  | 	printf OUT_KEYSYMS_COMPAT "#define %s 0x%03x\n", $compat_binding, hex($keysymelements[2]); | ||||||
| } | } | ||||||
|  |  | ||||||
| close IN_XF86KEYSYM; | close IN_XF86KEYSYM; | ||||||
| @@ -172,6 +202,13 @@ print OUT_KEYSYMS<<EOF; | |||||||
| #endif /* __CLUTTER_KEYSYMS_H__ */ | #endif /* __CLUTTER_KEYSYMS_H__ */ | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
|  | print OUT_KEYSYMS_COMPAT<<EOF; | ||||||
|  |  | ||||||
|  | #endif /* CLUTTER_DISABLE_DEPRECATED */ | ||||||
|  |  | ||||||
|  | #endif /* __CLUTTER_KEYSYMS_DEPRECATED_H__ */ | ||||||
|  | EOF | ||||||
|  |  | ||||||
| foreach my $f (qw/ keysymdef.h XF86keysym.h /) { | foreach my $f (qw/ keysymdef.h XF86keysym.h /) { | ||||||
|     unlink $f or die "Unable to delete $f: $!"; |     unlink $f or die "Unable to delete $f: $!"; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -98,11 +98,11 @@ | |||||||
|  * |[ |  * |[ | ||||||
|  * { |  * { | ||||||
|  *   "type" : "ClutterBox", |  *   "type" : "ClutterBox", | ||||||
|  *   "layout-manager" : { "type" : "ClutterGridLayout" }, |  *   "layout-manager" : { "type" : "ClutterTableLayout" }, | ||||||
|  *   "children" : [ |  *   "children" : [ | ||||||
|  *     { |  *     { | ||||||
|  *       "type" : "ClutterText", |  *       "type" : "ClutterTexture", | ||||||
|  *       "text" : "Some text", |  *       "filename" : "image-00.png", | ||||||
|  * |  * | ||||||
|  *       "layout::row" : 0, |  *       "layout::row" : 0, | ||||||
|  *       "layout::column" : 0, |  *       "layout::column" : 0, | ||||||
| @@ -112,8 +112,8 @@ | |||||||
|  *       "layout::y-expand" : true |  *       "layout::y-expand" : true | ||||||
|  *     }, |  *     }, | ||||||
|  *     { |  *     { | ||||||
|  *       "type" : "ClutterText", |  *       "type" : "ClutterTexture", | ||||||
|  *       "text" : "Some more text", |  *       "filename" : "image-01.png", | ||||||
|  * |  * | ||||||
|  *       "layout::row" : 0, |  *       "layout::row" : 0, | ||||||
|  *       "layout::column" : 1, |  *       "layout::column" : 1, | ||||||
| @@ -329,6 +329,9 @@ layout_manager_real_begin_animation (ClutterLayoutManager *manager, | |||||||
|   /* let the alpha take ownership of the timeline */ |   /* let the alpha take ownership of the timeline */ | ||||||
|   g_object_unref (timeline); |   g_object_unref (timeline); | ||||||
|  |  | ||||||
|  |   g_signal_connect_swapped (timeline, "completed", | ||||||
|  |                             G_CALLBACK (clutter_layout_manager_end_animation), | ||||||
|  |                             manager); | ||||||
|   g_signal_connect_swapped (timeline, "new-frame", |   g_signal_connect_swapped (timeline, "new-frame", | ||||||
|                             G_CALLBACK (clutter_layout_manager_layout_changed), |                             G_CALLBACK (clutter_layout_manager_layout_changed), | ||||||
|                             manager); |                             manager); | ||||||
| @@ -372,6 +375,9 @@ layout_manager_real_end_animation (ClutterLayoutManager *manager) | |||||||
|   if (clutter_timeline_is_playing (timeline)) |   if (clutter_timeline_is_playing (timeline)) | ||||||
|     clutter_timeline_stop (timeline); |     clutter_timeline_stop (timeline); | ||||||
|  |  | ||||||
|  |   g_signal_handlers_disconnect_by_func (timeline, | ||||||
|  |                                         G_CALLBACK (clutter_layout_manager_end_animation), | ||||||
|  |                                         manager); | ||||||
|   g_signal_handlers_disconnect_by_func (timeline, |   g_signal_handlers_disconnect_by_func (timeline, | ||||||
|                                         G_CALLBACK (clutter_layout_manager_layout_changed), |                                         G_CALLBACK (clutter_layout_manager_layout_changed), | ||||||
|                                         manager); |                                         manager); | ||||||
|   | |||||||
| @@ -213,6 +213,15 @@ void               clutter_layout_manager_child_get_property    (ClutterLayoutMa | |||||||
|                                                                  const gchar            *property_name, |                                                                  const gchar            *property_name, | ||||||
|                                                                  GValue                 *value); |                                                                  GValue                 *value); | ||||||
|  |  | ||||||
|  | CLUTTER_DEPRECATED | ||||||
|  | ClutterAlpha *     clutter_layout_manager_begin_animation       (ClutterLayoutManager   *manager, | ||||||
|  |                                                                  guint                   duration, | ||||||
|  |                                                                  gulong                  mode); | ||||||
|  | CLUTTER_DEPRECATED | ||||||
|  | void               clutter_layout_manager_end_animation         (ClutterLayoutManager   *manager); | ||||||
|  | CLUTTER_DEPRECATED | ||||||
|  | gdouble            clutter_layout_manager_get_animation_progress (ClutterLayoutManager   *manager); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
| #endif /* __CLUTTER_LAYOUT_MANAGER_H__ */ | #endif /* __CLUTTER_LAYOUT_MANAGER_H__ */ | ||||||
|   | |||||||
| @@ -55,11 +55,10 @@ | |||||||
| #include "clutter-backend-private.h" | #include "clutter-backend-private.h" | ||||||
| #include "clutter-config.h" | #include "clutter-config.h" | ||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
|  | #include "clutter-device-manager-private.h" | ||||||
| #include "clutter-event-private.h" | #include "clutter-event-private.h" | ||||||
| #include "clutter-feature.h" | #include "clutter-feature.h" | ||||||
| #include "clutter-input-device-private.h" |  | ||||||
| #include "clutter-input-pointer-a11y-private.h" | #include "clutter-input-pointer-a11y-private.h" | ||||||
| #include "clutter-graphene.h" |  | ||||||
| #include "clutter-main.h" | #include "clutter-main.h" | ||||||
| #include "clutter-master-clock.h" | #include "clutter-master-clock.h" | ||||||
| #include "clutter-mutter.h" | #include "clutter-mutter.h" | ||||||
| @@ -1523,7 +1522,7 @@ event_click_count_generate (ClutterEvent *event) | |||||||
|         previous_y = event->button.y; |         previous_y = event->button.y; | ||||||
|         previous_time = event->button.time; |         previous_time = event->button.time; | ||||||
|  |  | ||||||
|         G_GNUC_FALLTHROUGH; |         /* fallthrough */ | ||||||
|       case CLUTTER_BUTTON_RELEASE: |       case CLUTTER_BUTTON_RELEASE: | ||||||
|         event->button.click_count = click_count; |         event->button.click_count = click_count; | ||||||
|         break; |         break; | ||||||
| @@ -1776,7 +1775,7 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|  |  | ||||||
|             emit_crossing_event (event, device); |             emit_crossing_event (event, device); | ||||||
|  |  | ||||||
|             actor = clutter_input_device_update (device, NULL, FALSE); |             actor = _clutter_input_device_update (device, NULL, FALSE); | ||||||
|             if (actor != stage) |             if (actor != stage) | ||||||
|               { |               { | ||||||
|                 ClutterEvent *crossing; |                 ClutterEvent *crossing; | ||||||
| @@ -1834,10 +1833,13 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|           { |           { | ||||||
|             if (_clutter_is_input_pointer_a11y_enabled (device)) |             if (_clutter_is_input_pointer_a11y_enabled (device)) | ||||||
|               { |               { | ||||||
|  |                 ClutterInputDevice *core_pointer; | ||||||
|                 gfloat x, y; |                 gfloat x, y; | ||||||
|  |  | ||||||
|                 clutter_event_get_coords (event, &x, &y); |                 clutter_event_get_coords (event, &x, &y); | ||||||
|                 _clutter_input_pointer_a11y_on_motion_event (device, x, y); |                 core_pointer = clutter_device_manager_get_core_device (device->device_manager, | ||||||
|  |                                                                        CLUTTER_POINTER_DEVICE); | ||||||
|  |                 _clutter_input_pointer_a11y_on_motion_event (core_pointer, x, y); | ||||||
|               } |               } | ||||||
|           } |           } | ||||||
| #endif /* CLUTTER_WINDOWING_X11 */ | #endif /* CLUTTER_WINDOWING_X11 */ | ||||||
| @@ -1868,7 +1870,7 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|             break; |             break; | ||||||
|           } |           } | ||||||
|  |  | ||||||
|         G_GNUC_FALLTHROUGH; |       /* fallthrough from motion */ | ||||||
|       case CLUTTER_BUTTON_PRESS: |       case CLUTTER_BUTTON_PRESS: | ||||||
|       case CLUTTER_BUTTON_RELEASE: |       case CLUTTER_BUTTON_RELEASE: | ||||||
| #ifdef CLUTTER_WINDOWING_X11 | #ifdef CLUTTER_WINDOWING_X11 | ||||||
| @@ -1876,7 +1878,12 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|           { |           { | ||||||
|             if (_clutter_is_input_pointer_a11y_enabled (device) && (event->type != CLUTTER_MOTION)) |             if (_clutter_is_input_pointer_a11y_enabled (device) && (event->type != CLUTTER_MOTION)) | ||||||
|               { |               { | ||||||
|                 _clutter_input_pointer_a11y_on_button_event (device, |                 ClutterInputDevice *core_pointer; | ||||||
|  |  | ||||||
|  |                 core_pointer = clutter_device_manager_get_core_device (device->device_manager, | ||||||
|  |                                                                        CLUTTER_POINTER_DEVICE); | ||||||
|  |  | ||||||
|  |                 _clutter_input_pointer_a11y_on_button_event (core_pointer, | ||||||
|                                                              event->button.button, |                                                              event->button.button, | ||||||
|                                                              event->type == CLUTTER_BUTTON_PRESS); |                                                              event->type == CLUTTER_BUTTON_PRESS); | ||||||
|               } |               } | ||||||
| @@ -1935,7 +1942,7 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|                * get the actor underneath |                * get the actor underneath | ||||||
|                */ |                */ | ||||||
|               if (device != NULL) |               if (device != NULL) | ||||||
|                 actor = clutter_input_device_update (device, NULL, TRUE); |                 actor = _clutter_input_device_update (device, NULL, TRUE); | ||||||
|               else |               else | ||||||
|                 { |                 { | ||||||
|                   CLUTTER_NOTE (EVENT, "No device found: picking"); |                   CLUTTER_NOTE (EVENT, "No device found: picking"); | ||||||
| @@ -2008,7 +2015,7 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|             break; |             break; | ||||||
|           } |           } | ||||||
|  |  | ||||||
|         G_GNUC_FALLTHROUGH; |       /* fallthrough from motion */ | ||||||
|       case CLUTTER_TOUCH_BEGIN: |       case CLUTTER_TOUCH_BEGIN: | ||||||
|       case CLUTTER_TOUCH_CANCEL: |       case CLUTTER_TOUCH_CANCEL: | ||||||
|       case CLUTTER_TOUCH_END: |       case CLUTTER_TOUCH_END: | ||||||
| @@ -2052,7 +2059,7 @@ _clutter_process_event_details (ClutterActor        *stage, | |||||||
|                 } |                 } | ||||||
|  |  | ||||||
|               if (device != NULL) |               if (device != NULL) | ||||||
|                 actor = clutter_input_device_update (device, sequence, TRUE); |                 actor = _clutter_input_device_update (device, sequence, TRUE); | ||||||
|               else |               else | ||||||
|                 { |                 { | ||||||
|                   CLUTTER_NOTE (EVENT, "No device found: picking"); |                   CLUTTER_NOTE (EVENT, "No device found: picking"); | ||||||
| @@ -2187,8 +2194,6 @@ clutter_base_init (void) | |||||||
|  |  | ||||||
|       /* initialise the Big Clutter Lock™ if necessary */ |       /* initialise the Big Clutter Lock™ if necessary */ | ||||||
|       clutter_threads_init_default (); |       clutter_threads_init_default (); | ||||||
|  |  | ||||||
|       clutter_graphene_init (); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -2303,7 +2308,8 @@ clutter_threads_remove_repaint_func (guint handle_id) | |||||||
|  * that it does not block, otherwise the frame time budget may be lost. |  * that it does not block, otherwise the frame time budget may be lost. | ||||||
|  * |  * | ||||||
|  * A repaint function is useful to ensure that an update of the scenegraph |  * A repaint function is useful to ensure that an update of the scenegraph | ||||||
|  * is performed before the scenegraph is repainted. By default, a repaint |  * is performed before the scenegraph is repainted; for instance, uploading | ||||||
|  |  * a frame from a video into a #ClutterTexture. By default, a repaint | ||||||
|  * function added using this function will be invoked prior to the frame |  * function added using this function will be invoked prior to the frame | ||||||
|  * being processed. |  * being processed. | ||||||
|  * |  * | ||||||
| @@ -2352,7 +2358,8 @@ clutter_threads_add_repaint_func (GSourceFunc    func, | |||||||
|  * that it does not block, otherwise the frame time budget may be lost. |  * that it does not block, otherwise the frame time budget may be lost. | ||||||
|  * |  * | ||||||
|  * A repaint function is useful to ensure that an update of the scenegraph |  * A repaint function is useful to ensure that an update of the scenegraph | ||||||
|  * is performed before the scenegraph is repainted. The @flags passed to this |  * is performed before the scenegraph is repainted; for instance, uploading | ||||||
|  |  * a frame from a video into a #ClutterTexture. The @flags passed to this | ||||||
|  * function will determine the section of the frame processing that will |  * function will determine the section of the frame processing that will | ||||||
|  * result in @func being called. |  * result in @func being called. | ||||||
|  * |  * | ||||||
| @@ -2595,36 +2602,6 @@ clutter_check_windowing_backend (const char *backend_type) | |||||||
|   return FALSE; |   return FALSE; | ||||||
| } | } | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_add_debug_flags: (skip) |  | ||||||
|  * |  | ||||||
|  * Adds the debug flags passed to the list of debug flags. |  | ||||||
|  */ |  | ||||||
| void |  | ||||||
| clutter_add_debug_flags (ClutterDebugFlag     debug_flags, |  | ||||||
|                          ClutterDrawDebugFlag draw_flags, |  | ||||||
|                          ClutterPickDebugFlag pick_flags) |  | ||||||
| { |  | ||||||
|   clutter_debug_flags |= debug_flags; |  | ||||||
|   clutter_paint_debug_flags |= draw_flags; |  | ||||||
|   clutter_pick_debug_flags |= pick_flags; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_remove_debug_flags: (skip) |  | ||||||
|  * |  | ||||||
|  * Removes the debug flags passed from the list of debug flags. |  | ||||||
|  */ |  | ||||||
| void |  | ||||||
| clutter_remove_debug_flags (ClutterDebugFlag     debug_flags, |  | ||||||
|                             ClutterDrawDebugFlag draw_flags, |  | ||||||
|                             ClutterPickDebugFlag pick_flags) |  | ||||||
| { |  | ||||||
|   clutter_debug_flags &= ~debug_flags; |  | ||||||
|   clutter_paint_debug_flags &= ~draw_flags; |  | ||||||
|   clutter_pick_debug_flags &= ~pick_flags; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void | void | ||||||
| _clutter_set_sync_to_vblank (gboolean sync_to_vblank) | _clutter_set_sync_to_vblank (gboolean sync_to_vblank) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -34,45 +34,6 @@ | |||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
|  |  | ||||||
| typedef enum |  | ||||||
| { |  | ||||||
|   CLUTTER_DEBUG_MISC                = 1 << 0, |  | ||||||
|   CLUTTER_DEBUG_ACTOR               = 1 << 1, |  | ||||||
|   CLUTTER_DEBUG_TEXTURE             = 1 << 2, |  | ||||||
|   CLUTTER_DEBUG_EVENT               = 1 << 3, |  | ||||||
|   CLUTTER_DEBUG_PAINT               = 1 << 4, |  | ||||||
|   CLUTTER_DEBUG_PANGO               = 1 << 5, |  | ||||||
|   CLUTTER_DEBUG_BACKEND             = 1 << 6, |  | ||||||
|   CLUTTER_DEBUG_SCHEDULER           = 1 << 7, |  | ||||||
|   CLUTTER_DEBUG_SCRIPT              = 1 << 8, |  | ||||||
|   CLUTTER_DEBUG_SHADER              = 1 << 9, |  | ||||||
|   CLUTTER_DEBUG_MULTISTAGE          = 1 << 10, |  | ||||||
|   CLUTTER_DEBUG_ANIMATION           = 1 << 11, |  | ||||||
|   CLUTTER_DEBUG_LAYOUT              = 1 << 12, |  | ||||||
|   CLUTTER_DEBUG_PICK                = 1 << 13, |  | ||||||
|   CLUTTER_DEBUG_EVENTLOOP           = 1 << 14, |  | ||||||
|   CLUTTER_DEBUG_CLIPPING            = 1 << 15, |  | ||||||
|   CLUTTER_DEBUG_OOB_TRANSFORMS      = 1 << 16, |  | ||||||
| } ClutterDebugFlag; |  | ||||||
|  |  | ||||||
| typedef enum |  | ||||||
| { |  | ||||||
|   CLUTTER_DEBUG_NOP_PICKING = 1 << 0, |  | ||||||
| } ClutterPickDebugFlag; |  | ||||||
|  |  | ||||||
| typedef enum |  | ||||||
| { |  | ||||||
|   CLUTTER_DEBUG_DISABLE_SWAP_EVENTS        = 1 << 0, |  | ||||||
|   CLUTTER_DEBUG_DISABLE_CLIPPED_REDRAWS    = 1 << 1, |  | ||||||
|   CLUTTER_DEBUG_REDRAWS                    = 1 << 2, |  | ||||||
|   CLUTTER_DEBUG_PAINT_VOLUMES              = 1 << 3, |  | ||||||
|   CLUTTER_DEBUG_DISABLE_CULLING            = 1 << 4, |  | ||||||
|   CLUTTER_DEBUG_DISABLE_OFFSCREEN_REDIRECT = 1 << 5, |  | ||||||
|   CLUTTER_DEBUG_CONTINUOUS_REDRAW          = 1 << 6, |  | ||||||
|   CLUTTER_DEBUG_PAINT_DEFORM_TILES         = 1 << 7, |  | ||||||
|   CLUTTER_DEBUG_PAINT_DAMAGE_REGION        = 1 << 8, |  | ||||||
| } ClutterDrawDebugFlag; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * CLUTTER_INIT_ERROR: |  * CLUTTER_INIT_ERROR: | ||||||
|  * |  * | ||||||
| @@ -197,15 +158,6 @@ guint                   clutter_get_default_frame_rate          (void); | |||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean                clutter_check_windowing_backend         (const char *backend_type); | gboolean                clutter_check_windowing_backend         (const char *backend_type); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void                    clutter_add_debug_flags                 (ClutterDebugFlag     debug_flags, |  | ||||||
|                                                                  ClutterDrawDebugFlag draw_flags, |  | ||||||
|                                                                  ClutterPickDebugFlag pick_flags); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void                    clutter_remove_debug_flags              (ClutterDebugFlag     debug_flags, |  | ||||||
|                                                                  ClutterDrawDebugFlag draw_flags, |  | ||||||
|                                                                  ClutterPickDebugFlag pick_flags); |  | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -26,8 +26,8 @@ | |||||||
| #define __CLUTTER_H_INSIDE__ | #define __CLUTTER_H_INSIDE__ | ||||||
|  |  | ||||||
| #include "clutter-backend.h" | #include "clutter-backend.h" | ||||||
|  | #include "clutter-device-manager-private.h" | ||||||
| #include "clutter-event-private.h" | #include "clutter-event-private.h" | ||||||
| #include "clutter-input-device-private.h" |  | ||||||
| #include "clutter-input-pointer-a11y-private.h" | #include "clutter-input-pointer-a11y-private.h" | ||||||
| #include "clutter-macros.h" | #include "clutter-macros.h" | ||||||
| #include "clutter-private.h" | #include "clutter-private.h" | ||||||
|   | |||||||
| @@ -74,7 +74,6 @@ | |||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
| #include "clutter-private.h" | #include "clutter-private.h" | ||||||
| #include "clutter-stage-private.h" | #include "clutter-stage-private.h" | ||||||
| #include "clutter-paint-context-private.h" |  | ||||||
| #include "clutter-paint-volume-private.h" | #include "clutter-paint-volume-private.h" | ||||||
| #include "clutter-actor-box-private.h" | #include "clutter-actor-box-private.h" | ||||||
|  |  | ||||||
| @@ -87,7 +86,7 @@ struct _ClutterOffscreenEffectPrivate | |||||||
|   ClutterActor *actor; |   ClutterActor *actor; | ||||||
|   ClutterActor *stage; |   ClutterActor *stage; | ||||||
|  |  | ||||||
|   graphene_point3d_t position; |   ClutterVertex position; | ||||||
|  |  | ||||||
|   int fbo_offset_x; |   int fbo_offset_x; | ||||||
|   int fbo_offset_y; |   int fbo_offset_y; | ||||||
| @@ -118,7 +117,11 @@ clutter_offscreen_effect_set_actor (ClutterActorMeta *meta, | |||||||
|   meta_class->set_actor (meta, actor); |   meta_class->set_actor (meta, actor); | ||||||
|  |  | ||||||
|   /* clear out the previous state */ |   /* clear out the previous state */ | ||||||
|   g_clear_pointer (&priv->offscreen, cogl_object_unref); |   if (priv->offscreen != NULL) | ||||||
|  |     { | ||||||
|  |       cogl_handle_unref (priv->offscreen); | ||||||
|  |       priv->offscreen = NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   /* we keep a back pointer here, to avoid going through the ActorMeta */ |   /* we keep a back pointer here, to avoid going through the ActorMeta */ | ||||||
|   priv->actor = clutter_actor_meta_get_actor (meta); |   priv->actor = clutter_actor_meta_get_actor (meta); | ||||||
| @@ -194,8 +197,17 @@ update_fbo (ClutterEffect *effect, | |||||||
|       ensure_pipeline_filter_for_scale (self, resource_scale); |       ensure_pipeline_filter_for_scale (self, resource_scale); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   g_clear_pointer (&priv->texture, cogl_object_unref); |   if (priv->texture != NULL) | ||||||
|   g_clear_pointer (&priv->offscreen, cogl_object_unref); |     { | ||||||
|  |       cogl_handle_unref (priv->texture); | ||||||
|  |       priv->texture = NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   if (priv->offscreen != NULL) | ||||||
|  |     { | ||||||
|  |       cogl_handle_unref (priv->offscreen); | ||||||
|  |       priv->offscreen = NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   priv->texture = |   priv->texture = | ||||||
|     clutter_offscreen_effect_create_texture (self, target_width, target_height); |     clutter_offscreen_effect_create_texture (self, target_width, target_height); | ||||||
| @@ -212,7 +224,7 @@ update_fbo (ClutterEffect *effect, | |||||||
|     { |     { | ||||||
|       g_warning ("%s: Unable to create an Offscreen buffer", G_STRLOC); |       g_warning ("%s: Unable to create an Offscreen buffer", G_STRLOC); | ||||||
|  |  | ||||||
|       cogl_object_unref (priv->target); |       cogl_handle_unref (priv->target); | ||||||
|       priv->target = NULL; |       priv->target = NULL; | ||||||
|  |  | ||||||
|       priv->target_width = 0; |       priv->target_width = 0; | ||||||
| @@ -225,8 +237,7 @@ update_fbo (ClutterEffect *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | clutter_offscreen_effect_pre_paint (ClutterEffect *effect) | ||||||
|                                     ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); |   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
|   ClutterOffscreenEffectPrivate *priv = self->priv; |   ClutterOffscreenEffectPrivate *priv = self->priv; | ||||||
| @@ -237,14 +248,11 @@ clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | |||||||
|   CoglColor transparent; |   CoglColor transparent; | ||||||
|   gfloat stage_width, stage_height; |   gfloat stage_width, stage_height; | ||||||
|   gfloat target_width = -1, target_height = -1; |   gfloat target_width = -1, target_height = -1; | ||||||
|   CoglFramebuffer *framebuffer; |  | ||||||
|   gfloat resource_scale; |   gfloat resource_scale; | ||||||
|   gfloat ceiled_resource_scale; |   gfloat ceiled_resource_scale; | ||||||
|   graphene_point3d_t local_offset; |   ClutterVertex local_offset = { 0.f, 0.f, 0.f }; | ||||||
|   gfloat old_viewport[4]; |   gfloat old_viewport[4]; | ||||||
|  |  | ||||||
|   local_offset = GRAPHENE_POINT3D_INIT (0.0f, 0.0f, 0.0f); |  | ||||||
|  |  | ||||||
|   if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect))) |   if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect))) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
| @@ -302,10 +310,10 @@ clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | |||||||
|   if (!update_fbo (effect, target_width, target_height, resource_scale)) |   if (!update_fbo (effect, target_width, target_height, resource_scale)) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
|   framebuffer = clutter_paint_context_get_framebuffer (paint_context); |   cogl_get_modelview_matrix (&old_modelview); | ||||||
|   cogl_framebuffer_get_modelview_matrix (framebuffer, &old_modelview); |  | ||||||
|  |  | ||||||
|   clutter_paint_context_push_framebuffer (paint_context, priv->offscreen); |   /* let's draw offscreen */ | ||||||
|  |   cogl_push_framebuffer (priv->offscreen); | ||||||
|  |  | ||||||
|   /* We don't want the FBO contents to be transformed. That could waste memory |   /* We don't want the FBO contents to be transformed. That could waste memory | ||||||
|    * (e.g. during zoom), or result in something that's not rectangular (clipped |    * (e.g. during zoom), or result in something that's not rectangular (clipped | ||||||
| @@ -315,7 +323,7 @@ clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | |||||||
|    * contents on screen... |    * contents on screen... | ||||||
|    */ |    */ | ||||||
|   clutter_actor_get_transform (priv->stage, &modelview); |   clutter_actor_get_transform (priv->stage, &modelview); | ||||||
|   cogl_framebuffer_set_modelview_matrix (priv->offscreen, &modelview); |   cogl_set_modelview_matrix (&modelview); | ||||||
|  |  | ||||||
|   /* Save the original viewport for calculating priv->position */ |   /* Save the original viewport for calculating priv->position */ | ||||||
|   _clutter_stage_get_viewport (CLUTTER_STAGE (priv->stage), |   _clutter_stage_get_viewport (CLUTTER_STAGE (priv->stage), | ||||||
| @@ -327,11 +335,10 @@ clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | |||||||
|   /* Set up the viewport so that it has the same size as the stage (avoid |   /* Set up the viewport so that it has the same size as the stage (avoid | ||||||
|    * distortion), but translated to account for the FBO offset... |    * distortion), but translated to account for the FBO offset... | ||||||
|    */ |    */ | ||||||
|   cogl_framebuffer_set_viewport (priv->offscreen, |   cogl_set_viewport (-priv->fbo_offset_x, | ||||||
|                                  -priv->fbo_offset_x, |                      -priv->fbo_offset_y, | ||||||
|                                  -priv->fbo_offset_y, |                      stage_width, | ||||||
|                                  stage_width, |                      stage_height); | ||||||
|                                  stage_height); |  | ||||||
|  |  | ||||||
|   /* Copy the stage's projection matrix across to the framebuffer */ |   /* Copy the stage's projection matrix across to the framebuffer */ | ||||||
|   _clutter_stage_get_projection_matrix (CLUTTER_STAGE (priv->stage), |   _clutter_stage_get_projection_matrix (CLUTTER_STAGE (priv->stage), | ||||||
| @@ -348,15 +355,14 @@ clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | |||||||
|                                           &priv->position, |                                           &priv->position, | ||||||
|                                           1); |                                           1); | ||||||
|  |  | ||||||
|   cogl_framebuffer_set_projection_matrix (priv->offscreen, &projection); |   cogl_set_projection_matrix (&projection); | ||||||
|  |  | ||||||
|   cogl_color_init_from_4ub (&transparent, 0, 0, 0, 0); |   cogl_color_init_from_4ub (&transparent, 0, 0, 0, 0); | ||||||
|   cogl_framebuffer_clear (priv->offscreen, |   cogl_clear (&transparent, | ||||||
|                           COGL_BUFFER_BIT_COLOR | |               COGL_BUFFER_BIT_COLOR | | ||||||
|                           COGL_BUFFER_BIT_DEPTH, |               COGL_BUFFER_BIT_DEPTH); | ||||||
|                           &transparent); |  | ||||||
|  |  | ||||||
|   cogl_framebuffer_push_matrix (priv->offscreen); |   cogl_push_matrix (); | ||||||
|  |  | ||||||
|   /* Override the actor's opacity to fully opaque - we paint the offscreen |   /* Override the actor's opacity to fully opaque - we paint the offscreen | ||||||
|    * texture with the actor's paint opacity, so we need to do this to avoid |    * texture with the actor's paint opacity, so we need to do this to avoid | ||||||
| @@ -370,12 +376,10 @@ clutter_offscreen_effect_pre_paint (ClutterEffect       *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_offscreen_effect_real_paint_target (ClutterOffscreenEffect *effect, | clutter_offscreen_effect_real_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                             ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterOffscreenEffectPrivate *priv = effect->priv; |   ClutterOffscreenEffectPrivate *priv = effect->priv; | ||||||
|   CoglFramebuffer *framebuffer = |   CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); | ||||||
|     clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|   guint8 paint_opacity; |   guint8 paint_opacity; | ||||||
|  |  | ||||||
|   paint_opacity = clutter_actor_get_paint_opacity (priv->actor); |   paint_opacity = clutter_actor_get_paint_opacity (priv->actor); | ||||||
| @@ -401,21 +405,18 @@ clutter_offscreen_effect_real_paint_target (ClutterOffscreenEffect *effect, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_offscreen_effect_paint_texture (ClutterOffscreenEffect *effect, | clutter_offscreen_effect_paint_texture (ClutterOffscreenEffect *effect) | ||||||
|                                         ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterOffscreenEffectPrivate *priv = effect->priv; |   ClutterOffscreenEffectPrivate *priv = effect->priv; | ||||||
|   CoglFramebuffer *framebuffer = |  | ||||||
|     clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|   CoglMatrix modelview; |   CoglMatrix modelview; | ||||||
|   float resource_scale; |   float resource_scale; | ||||||
|  |  | ||||||
|   cogl_framebuffer_push_matrix (framebuffer); |   cogl_push_matrix (); | ||||||
|  |  | ||||||
|   /* The current modelview matrix is *almost* perfect already. It's only |   /* The current modelview matrix is *almost* perfect already. It's only | ||||||
|    * missing a correction for the expanded FBO and offset rendering within... |    * missing a correction for the expanded FBO and offset rendering within... | ||||||
|    */ |    */ | ||||||
|   cogl_framebuffer_get_modelview_matrix (framebuffer, &modelview); |   cogl_get_modelview_matrix (&modelview); | ||||||
|  |  | ||||||
|   if (clutter_actor_get_resource_scale (priv->actor, &resource_scale) && |   if (clutter_actor_get_resource_scale (priv->actor, &resource_scale) && | ||||||
|       resource_scale != 1.0f) |       resource_scale != 1.0f) | ||||||
| @@ -428,23 +429,21 @@ clutter_offscreen_effect_paint_texture (ClutterOffscreenEffect *effect, | |||||||
|                          priv->fbo_offset_x, |                          priv->fbo_offset_x, | ||||||
|                          priv->fbo_offset_y, |                          priv->fbo_offset_y, | ||||||
|                          0.0f); |                          0.0f); | ||||||
|   cogl_framebuffer_set_modelview_matrix (framebuffer, &modelview); |   cogl_set_modelview_matrix (&modelview); | ||||||
|  |  | ||||||
|   /* paint the target material; this is virtualized for |   /* paint the target material; this is virtualized for | ||||||
|    * sub-classes that require special hand-holding |    * sub-classes that require special hand-holding | ||||||
|    */ |    */ | ||||||
|   clutter_offscreen_effect_paint_target (effect, paint_context); |   clutter_offscreen_effect_paint_target (effect); | ||||||
|  |  | ||||||
|   cogl_framebuffer_pop_matrix (framebuffer); |   cogl_pop_matrix (); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_offscreen_effect_post_paint (ClutterEffect       *effect, | clutter_offscreen_effect_post_paint (ClutterEffect *effect) | ||||||
|                                      ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); |   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
|   ClutterOffscreenEffectPrivate *priv = self->priv; |   ClutterOffscreenEffectPrivate *priv = self->priv; | ||||||
|   CoglFramebuffer *framebuffer; |  | ||||||
|  |  | ||||||
|   if (priv->offscreen == NULL || |   if (priv->offscreen == NULL || | ||||||
|       priv->target == NULL || |       priv->target == NULL || | ||||||
| @@ -454,60 +453,31 @@ clutter_offscreen_effect_post_paint (ClutterEffect       *effect, | |||||||
|   /* Restore the previous opacity override */ |   /* Restore the previous opacity override */ | ||||||
|   clutter_actor_set_opacity_override (priv->actor, priv->old_opacity_override); |   clutter_actor_set_opacity_override (priv->actor, priv->old_opacity_override); | ||||||
|  |  | ||||||
|   framebuffer = clutter_paint_context_get_framebuffer (paint_context); |   cogl_pop_matrix (); | ||||||
|   cogl_framebuffer_pop_matrix (framebuffer); |   cogl_pop_framebuffer (); | ||||||
|   clutter_paint_context_pop_framebuffer (paint_context); |  | ||||||
|  |  | ||||||
|   clutter_offscreen_effect_paint_texture (self, paint_context); |   clutter_offscreen_effect_paint_texture (self); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_offscreen_effect_paint (ClutterEffect           *effect, | clutter_offscreen_effect_paint (ClutterEffect           *effect, | ||||||
|                                 ClutterPaintContext     *paint_context, |  | ||||||
|                                 ClutterEffectPaintFlags  flags) |                                 ClutterEffectPaintFlags  flags) | ||||||
| { | { | ||||||
|   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); |   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect); | ||||||
|   ClutterOffscreenEffectPrivate *priv = self->priv; |   ClutterOffscreenEffectPrivate *priv = self->priv; | ||||||
|  |  | ||||||
|   if (flags & CLUTTER_EFFECT_PAINT_BYPASS_EFFECT) |  | ||||||
|     { |  | ||||||
|       clutter_actor_continue_paint (priv->actor, paint_context); |  | ||||||
|       cogl_clear_object (&priv->offscreen); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|   /* If we've already got a cached image and the actor hasn't been redrawn |   /* If we've already got a cached image and the actor hasn't been redrawn | ||||||
|    * then we can just use the cached image in the FBO. |    * then we can just use the cached image in the FBO. | ||||||
|    */ |    */ | ||||||
|   if (priv->offscreen == NULL || (flags & CLUTTER_EFFECT_PAINT_ACTOR_DIRTY)) |   if (priv->offscreen == NULL || (flags & CLUTTER_EFFECT_PAINT_ACTOR_DIRTY)) | ||||||
|     { |     { | ||||||
|       ClutterEffectClass *effect_class = CLUTTER_EFFECT_GET_CLASS (effect); |       /* Chain up to the parent paint method which will call the pre and | ||||||
|       gboolean pre_paint_succeeded; |          post paint functions to update the image */ | ||||||
|  |       CLUTTER_EFFECT_CLASS (clutter_offscreen_effect_parent_class)-> | ||||||
|       pre_paint_succeeded = effect_class->pre_paint (effect, paint_context); |         paint (effect, flags); | ||||||
|  |  | ||||||
|       clutter_actor_continue_paint (priv->actor, paint_context); |  | ||||||
|  |  | ||||||
|       if (pre_paint_succeeded) |  | ||||||
|         effect_class->post_paint (effect, paint_context); |  | ||||||
|       else |  | ||||||
|         g_clear_pointer (&priv->offscreen, cogl_object_unref); |  | ||||||
|     } |     } | ||||||
|   else |   else | ||||||
|     clutter_offscreen_effect_paint_texture (self, paint_context); |     clutter_offscreen_effect_paint_texture (self); | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_offscreen_effect_notify (GObject    *gobject, |  | ||||||
|                                  GParamSpec *pspec) |  | ||||||
| { |  | ||||||
|   ClutterOffscreenEffect *offscreen_effect = CLUTTER_OFFSCREEN_EFFECT (gobject); |  | ||||||
|   ClutterOffscreenEffectPrivate *priv = offscreen_effect->priv; |  | ||||||
|  |  | ||||||
|   if (strcmp (pspec->name, "enabled") == 0) |  | ||||||
|     g_clear_pointer (&priv->offscreen, cogl_object_unref); |  | ||||||
|  |  | ||||||
|   G_OBJECT_CLASS (clutter_offscreen_effect_parent_class)->notify (gobject, pspec); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -516,9 +486,14 @@ clutter_offscreen_effect_finalize (GObject *gobject) | |||||||
|   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (gobject); |   ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (gobject); | ||||||
|   ClutterOffscreenEffectPrivate *priv = self->priv; |   ClutterOffscreenEffectPrivate *priv = self->priv; | ||||||
|  |  | ||||||
|   g_clear_pointer (&priv->offscreen, cogl_object_unref); |   if (priv->offscreen) | ||||||
|   g_clear_pointer (&priv->texture, cogl_object_unref); |     cogl_handle_unref (priv->offscreen); | ||||||
|   g_clear_pointer (&priv->target, cogl_object_unref); |  | ||||||
|  |   if (priv->target) | ||||||
|  |     cogl_handle_unref (priv->target); | ||||||
|  |  | ||||||
|  |   if (priv->texture) | ||||||
|  |     cogl_handle_unref (priv->texture); | ||||||
|  |  | ||||||
|   G_OBJECT_CLASS (clutter_offscreen_effect_parent_class)->finalize (gobject); |   G_OBJECT_CLASS (clutter_offscreen_effect_parent_class)->finalize (gobject); | ||||||
| } | } | ||||||
| @@ -540,7 +515,6 @@ clutter_offscreen_effect_class_init (ClutterOffscreenEffectClass *klass) | |||||||
|   effect_class->paint = clutter_offscreen_effect_paint; |   effect_class->paint = clutter_offscreen_effect_paint; | ||||||
|  |  | ||||||
|   gobject_class->finalize = clutter_offscreen_effect_finalize; |   gobject_class->finalize = clutter_offscreen_effect_finalize; | ||||||
|   gobject_class->notify = clutter_offscreen_effect_notify; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -563,7 +537,7 @@ clutter_offscreen_effect_init (ClutterOffscreenEffect *self) | |||||||
|  * used instead of clutter_offscreen_effect_get_target() when the |  * used instead of clutter_offscreen_effect_get_target() when the | ||||||
|  * effect subclass wants to paint using its own material. |  * effect subclass wants to paint using its own material. | ||||||
|  * |  * | ||||||
|  * Return value: (transfer none): a #CoglHandle or %NULL. The |  * Return value: (transfer none): a #CoglHandle or %COGL_INVALID_HANDLE. The | ||||||
|  *   returned texture is owned by Clutter and it should not be |  *   returned texture is owned by Clutter and it should not be | ||||||
|  *   modified or freed |  *   modified or freed | ||||||
|  * |  * | ||||||
| @@ -606,20 +580,17 @@ clutter_offscreen_effect_get_target (ClutterOffscreenEffect *effect) | |||||||
| /** | /** | ||||||
|  * clutter_offscreen_effect_paint_target: |  * clutter_offscreen_effect_paint_target: | ||||||
|  * @effect: a #ClutterOffscreenEffect |  * @effect: a #ClutterOffscreenEffect | ||||||
|  * @paint_context: a #ClutterPaintContext |  | ||||||
|  * |  * | ||||||
|  * Calls the paint_target() virtual function of the @effect |  * Calls the paint_target() virtual function of the @effect | ||||||
|  * |  * | ||||||
|  * Since: 1.4 |  * Since: 1.4 | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_offscreen_effect_paint_target (ClutterOffscreenEffect *effect, | clutter_offscreen_effect_paint_target (ClutterOffscreenEffect *effect) | ||||||
|                                        ClutterPaintContext    *paint_context) |  | ||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_OFFSCREEN_EFFECT (effect)); |   g_return_if_fail (CLUTTER_IS_OFFSCREEN_EFFECT (effect)); | ||||||
|  |  | ||||||
|   CLUTTER_OFFSCREEN_EFFECT_GET_CLASS (effect)->paint_target (effect, |   CLUTTER_OFFSCREEN_EFFECT_GET_CLASS (effect)->paint_target (effect); | ||||||
|                                                              paint_context); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -631,7 +602,7 @@ clutter_offscreen_effect_paint_target (ClutterOffscreenEffect *effect, | |||||||
|  * Calls the create_texture() virtual function of the @effect |  * Calls the create_texture() virtual function of the @effect | ||||||
|  * |  * | ||||||
|  * Return value: (transfer full): a handle to a Cogl texture, or |  * Return value: (transfer full): a handle to a Cogl texture, or | ||||||
|  *   %NULL. The returned handle has its reference |  *   %COGL_INVALID_HANDLE. The returned handle has its reference | ||||||
|  *   count increased. |  *   count increased. | ||||||
|  * |  * | ||||||
|  * Since: 1.4 |  * Since: 1.4 | ||||||
| @@ -711,7 +682,7 @@ clutter_offscreen_effect_get_target_size (ClutterOffscreenEffect *effect, | |||||||
|  */ |  */ | ||||||
| gboolean | gboolean | ||||||
| clutter_offscreen_effect_get_target_rect (ClutterOffscreenEffect *effect, | clutter_offscreen_effect_get_target_rect (ClutterOffscreenEffect *effect, | ||||||
|                                           graphene_rect_t        *rect) |                                           ClutterRect            *rect) | ||||||
| { | { | ||||||
|   ClutterOffscreenEffectPrivate *priv; |   ClutterOffscreenEffectPrivate *priv; | ||||||
|  |  | ||||||
| @@ -723,11 +694,11 @@ clutter_offscreen_effect_get_target_rect (ClutterOffscreenEffect *effect, | |||||||
|   if (priv->texture == NULL) |   if (priv->texture == NULL) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
|   graphene_rect_init (rect, |   clutter_rect_init (rect, | ||||||
|                       priv->position.x, |                      priv->position.x, | ||||||
|                       priv->position.y, |                      priv->position.y, | ||||||
|                       cogl_texture_get_width (priv->texture), |                      cogl_texture_get_width (priv->texture), | ||||||
|                       cogl_texture_get_height (priv->texture)); |                      cogl_texture_get_height (priv->texture)); | ||||||
|  |  | ||||||
|   return TRUE; |   return TRUE; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -79,8 +79,7 @@ struct _ClutterOffscreenEffectClass | |||||||
|   CoglHandle (* create_texture) (ClutterOffscreenEffect *effect, |   CoglHandle (* create_texture) (ClutterOffscreenEffect *effect, | ||||||
|                                  gfloat                  width, |                                  gfloat                  width, | ||||||
|                                  gfloat                  height); |                                  gfloat                  height); | ||||||
|   void       (* paint_target)   (ClutterOffscreenEffect *effect, |   void       (* paint_target)   (ClutterOffscreenEffect *effect); | ||||||
|                                  ClutterPaintContext    *paint_context); |  | ||||||
|  |  | ||||||
|   /*< private >*/ |   /*< private >*/ | ||||||
|   void (* _clutter_offscreen1) (void); |   void (* _clutter_offscreen1) (void); | ||||||
| @@ -102,8 +101,7 @@ CLUTTER_EXPORT | |||||||
| CoglHandle      clutter_offscreen_effect_get_texture            (ClutterOffscreenEffect *effect); | CoglHandle      clutter_offscreen_effect_get_texture            (ClutterOffscreenEffect *effect); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void            clutter_offscreen_effect_paint_target           (ClutterOffscreenEffect *effect, | void            clutter_offscreen_effect_paint_target           (ClutterOffscreenEffect *effect); | ||||||
|                                                                  ClutterPaintContext    *paint_context); |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| CoglHandle      clutter_offscreen_effect_create_texture         (ClutterOffscreenEffect *effect, | CoglHandle      clutter_offscreen_effect_create_texture         (ClutterOffscreenEffect *effect, | ||||||
|                                                                  gfloat                  width, |                                                                  gfloat                  width, | ||||||
| @@ -116,7 +114,7 @@ gboolean        clutter_offscreen_effect_get_target_size        (ClutterOffscree | |||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| gboolean        clutter_offscreen_effect_get_target_rect        (ClutterOffscreenEffect *effect, | gboolean        clutter_offscreen_effect_get_target_rect        (ClutterOffscreenEffect *effect, | ||||||
|                                                                  graphene_rect_t        *rect); |                                                                  ClutterRect            *rect); | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,29 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) 2019 Red Hat 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 CLUTTER_PAINT_CONTEXT_PRIVATE_H |  | ||||||
| #define CLUTTER_PAINT_CONTEXT_PRIVATE_H |  | ||||||
|  |  | ||||||
| #include "clutter-paint-context.h" |  | ||||||
|  |  | ||||||
| ClutterPaintContext * clutter_paint_context_new_for_view (ClutterStageView *view); |  | ||||||
|  |  | ||||||
| gboolean clutter_paint_context_is_drawing_off_stage (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| CoglFramebuffer * clutter_paint_context_get_base_framebuffer (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| #endif /* CLUTTER_PAINT_CONTEXT_PRIVATE_H */ |  | ||||||
| @@ -1,161 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) 2019 Red Hat 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/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include "clutter-build-config.h" |  | ||||||
|  |  | ||||||
| #include "clutter-paint-context-private.h" |  | ||||||
|  |  | ||||||
| struct _ClutterPaintContext |  | ||||||
| { |  | ||||||
|   grefcount ref_count; |  | ||||||
|  |  | ||||||
|   GList *framebuffers; |  | ||||||
|  |  | ||||||
|   ClutterStageView *view; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| G_DEFINE_BOXED_TYPE (ClutterPaintContext, clutter_paint_context, |  | ||||||
|                      clutter_paint_context_ref, |  | ||||||
|                      clutter_paint_context_unref) |  | ||||||
|  |  | ||||||
| ClutterPaintContext * |  | ||||||
| clutter_paint_context_new_for_view (ClutterStageView *view) |  | ||||||
| { |  | ||||||
|   ClutterPaintContext *paint_context; |  | ||||||
|   CoglFramebuffer *framebuffer; |  | ||||||
|  |  | ||||||
|   paint_context = g_new0 (ClutterPaintContext, 1); |  | ||||||
|   g_ref_count_init (&paint_context->ref_count); |  | ||||||
|   paint_context->view = view; |  | ||||||
|  |  | ||||||
|   framebuffer = clutter_stage_view_get_framebuffer (view); |  | ||||||
|   clutter_paint_context_push_framebuffer (paint_context, framebuffer); |  | ||||||
|  |  | ||||||
|   return paint_context; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_paint_context_new_for_framebuffer: (skip) |  | ||||||
|  */ |  | ||||||
| ClutterPaintContext * |  | ||||||
| clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer) |  | ||||||
| { |  | ||||||
|   ClutterPaintContext *paint_context; |  | ||||||
|  |  | ||||||
|   paint_context = g_new0 (ClutterPaintContext, 1); |  | ||||||
|   g_ref_count_init (&paint_context->ref_count); |  | ||||||
|  |  | ||||||
|   clutter_paint_context_push_framebuffer (paint_context, framebuffer); |  | ||||||
|  |  | ||||||
|   return paint_context; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ClutterPaintContext * |  | ||||||
| clutter_paint_context_ref (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   g_ref_count_inc (&paint_context->ref_count); |  | ||||||
|   return paint_context; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_paint_context_dispose (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   g_list_free_full (paint_context->framebuffers, |  | ||||||
|                     cogl_object_unref); |  | ||||||
|   paint_context->framebuffers = NULL; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_paint_context_unref (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   if (g_ref_count_dec (&paint_context->ref_count)) |  | ||||||
|     { |  | ||||||
|       clutter_paint_context_dispose (paint_context); |  | ||||||
|       g_free (paint_context); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_paint_context_destroy (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   clutter_paint_context_dispose (paint_context); |  | ||||||
|   clutter_paint_context_unref (paint_context); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_paint_context_push_framebuffer (ClutterPaintContext *paint_context, |  | ||||||
|                                         CoglFramebuffer     *framebuffer) |  | ||||||
| { |  | ||||||
|   paint_context->framebuffers = g_list_prepend (paint_context->framebuffers, |  | ||||||
|                                                 cogl_object_ref (framebuffer)); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_paint_context_pop_framebuffer (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   g_return_if_fail (paint_context->framebuffers); |  | ||||||
|  |  | ||||||
|   cogl_object_unref (paint_context->framebuffers->data); |  | ||||||
|   paint_context->framebuffers = |  | ||||||
|     g_list_delete_link (paint_context->framebuffers, |  | ||||||
|                         paint_context->framebuffers); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_paint_context_get_framebuffer: |  | ||||||
|  * @paint_context: The #ClutterPaintContext |  | ||||||
|  * |  | ||||||
|  * Returns: (transfer none): The #CoglFramebuffer used for drawing |  | ||||||
|  */ |  | ||||||
| CoglFramebuffer * |  | ||||||
| clutter_paint_context_get_framebuffer (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   g_return_val_if_fail (paint_context->framebuffers, NULL); |  | ||||||
|  |  | ||||||
|   return paint_context->framebuffers->data; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| CoglFramebuffer * |  | ||||||
| clutter_paint_context_get_base_framebuffer (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   return g_list_last (paint_context->framebuffers)->data; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_paint_context_get_stage_view: (skip) |  | ||||||
|  */ |  | ||||||
| ClutterStageView * |  | ||||||
| clutter_paint_context_get_stage_view (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   return paint_context->view; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_paint_context_is_drawing_off_stage: (skip) |  | ||||||
|  * |  | ||||||
|  * Return %TRUE if the paint context is currently drawing off stage. |  | ||||||
|  * This happens if there are any framebuffers pushed, and the base framebuffer |  | ||||||
|  * comes from the stage view. |  | ||||||
|  */ |  | ||||||
| gboolean |  | ||||||
| clutter_paint_context_is_drawing_off_stage (ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   if (g_list_length (paint_context->framebuffers) > 1) |  | ||||||
|     return TRUE; |  | ||||||
|  |  | ||||||
|   return !paint_context->view; |  | ||||||
| } |  | ||||||
| @@ -1,62 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) 2019 Red Hat 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 CLUTTER_PAINT_CONTEXT_H |  | ||||||
| #define CLUTTER_PAINT_CONTEXT_H |  | ||||||
|  |  | ||||||
| #if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION) |  | ||||||
| #error "Only <clutter/clutter.h> can be included directly." |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include <glib-object.h> |  | ||||||
|  |  | ||||||
| #include "clutter-macros.h" |  | ||||||
| #include "clutter-stage-view.h" |  | ||||||
|  |  | ||||||
| typedef struct _ClutterPaintContext ClutterPaintContext; |  | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_PAINT_CONTEXT (clutter_paint_context_get_type ()) |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| GType clutter_paint_context_get_type (void); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterPaintContext * clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterPaintContext * clutter_paint_context_ref (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_paint_context_unref (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_paint_context_destroy (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| CoglFramebuffer * clutter_paint_context_get_framebuffer (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterStageView * clutter_paint_context_get_stage_view (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_paint_context_push_framebuffer (ClutterPaintContext *paint_context, |  | ||||||
|                                              CoglFramebuffer     *framebuffer); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_paint_context_pop_framebuffer (ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
| #endif /* CLUTTER_PAINT_CONTEXT_H */ |  | ||||||
| @@ -27,7 +27,6 @@ | |||||||
|  |  | ||||||
| #include <glib-object.h> | #include <glib-object.h> | ||||||
| #include <json-glib/json-glib.h> | #include <json-glib/json-glib.h> | ||||||
| #include <clutter/clutter-paint-context.h> |  | ||||||
| #include <clutter/clutter-paint-node.h> | #include <clutter/clutter-paint-node.h> | ||||||
|  |  | ||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
| @@ -49,11 +48,11 @@ struct _ClutterPaintNode | |||||||
|   ClutterPaintNode *next_sibling; |   ClutterPaintNode *next_sibling; | ||||||
|   ClutterPaintNode *last_child; |   ClutterPaintNode *last_child; | ||||||
|  |  | ||||||
|  |   guint n_children; | ||||||
|  |  | ||||||
|   GArray *operations; |   GArray *operations; | ||||||
|  |  | ||||||
|   const gchar *name; |   gchar *name; | ||||||
|  |  | ||||||
|   guint n_children; |  | ||||||
|  |  | ||||||
|   volatile int ref_count; |   volatile int ref_count; | ||||||
| }; | }; | ||||||
| @@ -64,12 +63,9 @@ struct _ClutterPaintNodeClass | |||||||
|  |  | ||||||
|   void     (* finalize)  (ClutterPaintNode *node); |   void     (* finalize)  (ClutterPaintNode *node); | ||||||
|  |  | ||||||
|   gboolean (* pre_draw)  (ClutterPaintNode    *node, |   gboolean (* pre_draw)  (ClutterPaintNode *node); | ||||||
|                           ClutterPaintContext *paint_context); |   void     (* draw)      (ClutterPaintNode *node); | ||||||
|   void     (* draw)      (ClutterPaintNode    *node, |   void     (* post_draw) (ClutterPaintNode *node); | ||||||
|                           ClutterPaintContext *paint_context); |  | ||||||
|   void     (* post_draw) (ClutterPaintNode    *node, |  | ||||||
|                           ClutterPaintContext *paint_context); |  | ||||||
|  |  | ||||||
|   JsonNode*(* serialize) (ClutterPaintNode *node); |   JsonNode*(* serialize) (ClutterPaintNode *node); | ||||||
|  |  | ||||||
| @@ -115,8 +111,7 @@ void                    _clutter_paint_node_init_types                  (void); | |||||||
| gpointer                _clutter_paint_node_create                      (GType gtype); | gpointer                _clutter_paint_node_create                      (GType gtype); | ||||||
|  |  | ||||||
| ClutterPaintNode *      _clutter_transform_node_new                     (const CoglMatrix            *matrix); | ClutterPaintNode *      _clutter_transform_node_new                     (const CoglMatrix            *matrix); | ||||||
| ClutterPaintNode *      _clutter_dummy_node_new                         (ClutterActor                *actor, | ClutterPaintNode *      _clutter_dummy_node_new                         (ClutterActor                *actor); | ||||||
|                                                                          CoglFramebuffer             *framebuffer); |  | ||||||
|  |  | ||||||
| void                    _clutter_paint_node_dump_tree                   (ClutterPaintNode            *root); | void                    _clutter_paint_node_dump_tree                   (ClutterPaintNode            *root); | ||||||
|  |  | ||||||
| @@ -144,6 +139,30 @@ ClutterPaintNode *      clutter_paint_node_get_last_child               (Clutter | |||||||
| G_GNUC_INTERNAL | G_GNUC_INTERNAL | ||||||
| ClutterPaintNode *      clutter_paint_node_get_parent                   (ClutterPaintNode      *node); | ClutterPaintNode *      clutter_paint_node_get_parent                   (ClutterPaintNode      *node); | ||||||
|  |  | ||||||
|  | #define CLUTTER_TYPE_LAYER_NODE                 (_clutter_layer_node_get_type ()) | ||||||
|  | #define CLUTTER_LAYER_NODE(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_LAYER_NODE, ClutterLayerNode)) | ||||||
|  | #define CLUTTER_IS_LAYER_NODE(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_LAYER_NODE)) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * ClutterLayerNode: | ||||||
|  |  * | ||||||
|  |  * The #ClutterLayerNode structure is an opaque | ||||||
|  |  * type whose members cannot be directly accessed. | ||||||
|  |  * | ||||||
|  |  * Since: 1.10 | ||||||
|  |  */ | ||||||
|  | typedef struct _ClutterLayerNode                ClutterLayerNode; | ||||||
|  | typedef struct _ClutterLayerNodeClass           ClutterLayerNodeClass; | ||||||
|  |  | ||||||
|  | GType _clutter_layer_node_get_type (void) G_GNUC_CONST; | ||||||
|  |  | ||||||
|  | ClutterPaintNode *      _clutter_layer_node_new         (const CoglMatrix        *projection, | ||||||
|  |                                                          const cairo_rectangle_t *viewport, | ||||||
|  |                                                          float                    width, | ||||||
|  |                                                          float                    height, | ||||||
|  |                                                          guint8                   opacity); | ||||||
|  |  | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
| #endif /* __CLUTTER_PAINT_NODE_PRIVATE_H__ */ | #endif /* __CLUTTER_PAINT_NODE_PRIVATE_H__ */ | ||||||
|   | |||||||
| @@ -171,6 +171,8 @@ clutter_paint_node_real_finalize (ClutterPaintNode *node) | |||||||
| { | { | ||||||
|   ClutterPaintNode *iter; |   ClutterPaintNode *iter; | ||||||
|  |  | ||||||
|  |   g_free (node->name); | ||||||
|  |  | ||||||
|   if (node->operations != NULL) |   if (node->operations != NULL) | ||||||
|     { |     { | ||||||
|       guint i; |       guint i; | ||||||
| @@ -200,21 +202,18 @@ clutter_paint_node_real_finalize (ClutterPaintNode *node) | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_paint_node_real_pre_draw (ClutterPaintNode    *node, | clutter_paint_node_real_pre_draw (ClutterPaintNode *node) | ||||||
|                                   ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   return FALSE; |   return FALSE; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_paint_node_real_draw (ClutterPaintNode    *node, | clutter_paint_node_real_draw (ClutterPaintNode *node) | ||||||
|                               ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_paint_node_real_post_draw (ClutterPaintNode    *node, | clutter_paint_node_real_post_draw (ClutterPaintNode *node) | ||||||
|                                    ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -295,8 +294,7 @@ clutter_paint_node_get_type (void) | |||||||
|  * |  * | ||||||
|  * The @name will be used for debugging purposes. |  * The @name will be used for debugging purposes. | ||||||
|  * |  * | ||||||
|  * The @node will intern @name using g_intern_string(). If you have access to a |  * The @node will copy the passed string. | ||||||
|  * static string, use clutter_paint_node_set_static_name() instead. |  | ||||||
|  * |  * | ||||||
|  * Since: 1.10 |  * Since: 1.10 | ||||||
|  */ |  */ | ||||||
| @@ -306,22 +304,8 @@ clutter_paint_node_set_name (ClutterPaintNode *node, | |||||||
| { | { | ||||||
|   g_return_if_fail (CLUTTER_IS_PAINT_NODE (node)); |   g_return_if_fail (CLUTTER_IS_PAINT_NODE (node)); | ||||||
|  |  | ||||||
|   node->name = g_intern_string (name); |   g_free (node->name); | ||||||
| } |   node->name = g_strdup (name); | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_paint_node_set_static_name: (skip) |  | ||||||
|  * |  | ||||||
|  * Like clutter_paint_node_set_name() but uses a static or interned string |  | ||||||
|  * containing the name. |  | ||||||
|  */ |  | ||||||
| void |  | ||||||
| clutter_paint_node_set_static_name (ClutterPaintNode *node, |  | ||||||
|                                     const char       *name) |  | ||||||
| { |  | ||||||
|   g_return_if_fail (CLUTTER_IS_PAINT_NODE (node)); |  | ||||||
|  |  | ||||||
|   node->name = name; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -1013,30 +997,29 @@ clutter_paint_node_add_primitive (ClutterPaintNode *node, | |||||||
|  * its children, if any. |  * its children, if any. | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_paint_node_paint (ClutterPaintNode    *node, | clutter_paint_node_paint (ClutterPaintNode *node) | ||||||
|                           ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterPaintNodeClass *klass = CLUTTER_PAINT_NODE_GET_CLASS (node); |   ClutterPaintNodeClass *klass = CLUTTER_PAINT_NODE_GET_CLASS (node); | ||||||
|   ClutterPaintNode *iter; |   ClutterPaintNode *iter; | ||||||
|   gboolean res; |   gboolean res; | ||||||
|  |  | ||||||
|   res = klass->pre_draw (node, paint_context); |   res = klass->pre_draw (node); | ||||||
|  |  | ||||||
|   if (res) |   if (res) | ||||||
|     { |     { | ||||||
|       klass->draw (node, paint_context); |       klass->draw (node); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   for (iter = node->first_child; |   for (iter = node->first_child; | ||||||
|        iter != NULL; |        iter != NULL; | ||||||
|        iter = iter->next_sibling) |        iter = iter->next_sibling) | ||||||
|     { |     { | ||||||
|       clutter_paint_node_paint (iter, paint_context); |       clutter_paint_node_paint (iter); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   if (res) |   if (res) | ||||||
|     { |     { | ||||||
|       klass->post_draw (node, paint_context); |       klass->post_draw (node); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1116,12 +1099,12 @@ clutter_paint_node_to_json (ClutterPaintNode *node) | |||||||
|  |  | ||||||
|             case PAINT_OP_PATH: |             case PAINT_OP_PATH: | ||||||
|               json_builder_set_member_name (builder, "path"); |               json_builder_set_member_name (builder, "path"); | ||||||
|               json_builder_add_int_value (builder, (intptr_t) op->op.path); |               json_builder_add_int_value (builder, (gint64) op->op.path); | ||||||
|               break; |               break; | ||||||
|  |  | ||||||
|             case PAINT_OP_PRIMITIVE: |             case PAINT_OP_PRIMITIVE: | ||||||
|               json_builder_set_member_name (builder, "primitive"); |               json_builder_set_member_name (builder, "primitive"); | ||||||
|               json_builder_add_int_value (builder, (intptr_t) op->op.primitive); |               json_builder_add_int_value (builder, (gint64) op->op.primitive); | ||||||
|               break; |               break; | ||||||
|  |  | ||||||
|             case PAINT_OP_INVALID: |             case PAINT_OP_INVALID: | ||||||
| @@ -1216,10 +1199,9 @@ clutter_paint_node_get_root (ClutterPaintNode *node) | |||||||
|  * @node: a #ClutterPaintNode |  * @node: a #ClutterPaintNode | ||||||
|  * |  * | ||||||
|  * Retrieves the #CoglFramebuffer that @node will draw |  * Retrieves the #CoglFramebuffer that @node will draw | ||||||
|  * into, if it the root node has a custom framebuffer set. |  * into. | ||||||
|  * |  * | ||||||
|  * Returns: (transfer none): a #CoglFramebuffer or %NULL if no custom one is |  * Returns: (transfer none): a #CoglFramebuffer | ||||||
|  * set. |  | ||||||
|  */ |  */ | ||||||
| CoglFramebuffer * | CoglFramebuffer * | ||||||
| clutter_paint_node_get_framebuffer (ClutterPaintNode *node) | clutter_paint_node_get_framebuffer (ClutterPaintNode *node) | ||||||
| @@ -1227,9 +1209,12 @@ clutter_paint_node_get_framebuffer (ClutterPaintNode *node) | |||||||
|   ClutterPaintNode *root = clutter_paint_node_get_root (node); |   ClutterPaintNode *root = clutter_paint_node_get_root (node); | ||||||
|   ClutterPaintNodeClass *klass; |   ClutterPaintNodeClass *klass; | ||||||
|  |  | ||||||
|  |   if (root == NULL) | ||||||
|  |     return NULL; | ||||||
|  |  | ||||||
|   klass = CLUTTER_PAINT_NODE_GET_CLASS (root); |   klass = CLUTTER_PAINT_NODE_GET_CLASS (root); | ||||||
|   if (klass->get_framebuffer != NULL) |   if (klass->get_framebuffer != NULL) | ||||||
|     return klass->get_framebuffer (root); |     return klass->get_framebuffer (root); | ||||||
|   else |  | ||||||
|     return NULL; |   return cogl_get_draw_framebuffer (); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -50,15 +50,11 @@ CLUTTER_EXPORT | |||||||
| void                    clutter_paint_node_unref                        (ClutterPaintNode      *node); | void                    clutter_paint_node_unref                        (ClutterPaintNode      *node); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                    clutter_paint_node_paint                        (ClutterPaintNode      *node, | void                    clutter_paint_node_paint                        (ClutterPaintNode      *node); | ||||||
|                                                                          ClutterPaintContext   *paint_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| void                    clutter_paint_node_set_name                     (ClutterPaintNode      *node, | void                    clutter_paint_node_set_name                     (ClutterPaintNode      *node, | ||||||
|                                                                          const char            *name); |                                                                          const char            *name); | ||||||
| CLUTTER_EXPORT |  | ||||||
| void                    clutter_paint_node_set_static_name              (ClutterPaintNode      *node, |  | ||||||
|                                                                          const char            *name); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| CoglFramebuffer *       clutter_paint_node_get_framebuffer              (ClutterPaintNode      *node); | CoglFramebuffer *       clutter_paint_node_get_framebuffer              (ClutterPaintNode      *node); | ||||||
|   | |||||||
| @@ -44,7 +44,6 @@ | |||||||
| #include "clutter-color.h" | #include "clutter-color.h" | ||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
| #include "clutter-private.h" | #include "clutter-private.h" | ||||||
| #include "clutter-paint-context-private.h" |  | ||||||
|  |  | ||||||
| #include "clutter-paint-nodes.h" | #include "clutter-paint-nodes.h" | ||||||
|  |  | ||||||
| @@ -104,12 +103,11 @@ struct _ClutterRootNode | |||||||
| G_DEFINE_TYPE (ClutterRootNode, clutter_root_node, CLUTTER_TYPE_PAINT_NODE) | G_DEFINE_TYPE (ClutterRootNode, clutter_root_node, CLUTTER_TYPE_PAINT_NODE) | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_root_node_pre_draw (ClutterPaintNode    *node, | clutter_root_node_pre_draw (ClutterPaintNode *node) | ||||||
|                             ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterRootNode *rnode = (ClutterRootNode *) node; |   ClutterRootNode *rnode = (ClutterRootNode *) node; | ||||||
|  |  | ||||||
|   clutter_paint_context_push_framebuffer (paint_context, rnode->framebuffer); |   cogl_push_framebuffer (rnode->framebuffer); | ||||||
|  |  | ||||||
|   cogl_framebuffer_clear (rnode->framebuffer, |   cogl_framebuffer_clear (rnode->framebuffer, | ||||||
|                           rnode->clear_flags, |                           rnode->clear_flags, | ||||||
| @@ -119,10 +117,9 @@ clutter_root_node_pre_draw (ClutterPaintNode    *node, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_root_node_post_draw (ClutterPaintNode    *node, | clutter_root_node_post_draw (ClutterPaintNode *node) | ||||||
|                              ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   clutter_paint_context_pop_framebuffer (paint_context); |   cogl_pop_framebuffer (); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -166,8 +163,6 @@ clutter_root_node_new (CoglFramebuffer    *framebuffer, | |||||||
| { | { | ||||||
|   ClutterRootNode *res; |   ClutterRootNode *res; | ||||||
|  |  | ||||||
|   g_return_val_if_fail (framebuffer, NULL); |  | ||||||
|  |  | ||||||
|   res = _clutter_paint_node_create (CLUTTER_TYPE_ROOT_NODE); |   res = _clutter_paint_node_create (CLUTTER_TYPE_ROOT_NODE); | ||||||
|  |  | ||||||
|   cogl_color_init_from_4ub (&res->clear_color, |   cogl_color_init_from_4ub (&res->clear_color, | ||||||
| @@ -177,52 +172,54 @@ clutter_root_node_new (CoglFramebuffer    *framebuffer, | |||||||
|                             clear_color->alpha); |                             clear_color->alpha); | ||||||
|   cogl_color_premultiply (&res->clear_color); |   cogl_color_premultiply (&res->clear_color); | ||||||
|  |  | ||||||
|   res->framebuffer = cogl_object_ref (framebuffer); |   if (G_LIKELY (framebuffer != NULL)) | ||||||
|  |     res->framebuffer = cogl_object_ref (framebuffer); | ||||||
|  |   else | ||||||
|  |     res->framebuffer = cogl_object_ref (cogl_get_draw_framebuffer ()); | ||||||
|  |  | ||||||
|   res->clear_flags = clear_flags; |   res->clear_flags = clear_flags; | ||||||
|  |  | ||||||
|   return (ClutterPaintNode *) res; |   return (ClutterPaintNode *) res; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * ClutterTransformNode |  * Transform node | ||||||
|  |  * | ||||||
|  |  * A private PaintNode, that changes the modelview of its child | ||||||
|  |  * nodes. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| struct _ClutterTransformNode | #define clutter_transform_node_get_type _clutter_transform_node_get_type | ||||||
| { |  | ||||||
|  | typedef struct _ClutterTransformNode { | ||||||
|   ClutterPaintNode parent_instance; |   ClutterPaintNode parent_instance; | ||||||
|  |  | ||||||
|   CoglMatrix transform; |   CoglMatrix modelview; | ||||||
| }; | } ClutterTransformNode; | ||||||
|  |  | ||||||
| struct _ClutterTransformNodeClass | typedef struct _ClutterPaintNodeClass   ClutterTransformNodeClass; | ||||||
| { |  | ||||||
|   ClutterPaintNodeClass parent_class; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| G_DEFINE_TYPE (ClutterTransformNode, clutter_transform_node, CLUTTER_TYPE_PAINT_NODE) | G_DEFINE_TYPE (ClutterTransformNode, clutter_transform_node, CLUTTER_TYPE_PAINT_NODE) | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_transform_node_pre_draw (ClutterPaintNode    *node, | clutter_transform_node_pre_draw (ClutterPaintNode *node) | ||||||
|                                  ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterTransformNode *transform_node = (ClutterTransformNode *) node; |   ClutterTransformNode *tnode = (ClutterTransformNode *) node; | ||||||
|   CoglFramebuffer *fb = |   CoglMatrix matrix; | ||||||
|    clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|  |  | ||||||
|   cogl_framebuffer_push_matrix (fb); |   cogl_push_matrix (); | ||||||
|   cogl_framebuffer_transform (fb, &transform_node->transform); |  | ||||||
|  |   cogl_get_modelview_matrix (&matrix); | ||||||
|  |   cogl_matrix_multiply (&matrix, &matrix, &tnode->modelview); | ||||||
|  |   cogl_set_modelview_matrix (&matrix); | ||||||
|  |  | ||||||
|   return TRUE; |   return TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_transform_node_post_draw (ClutterPaintNode    *node, | clutter_transform_node_post_draw (ClutterPaintNode *node) | ||||||
|                                   ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   CoglFramebuffer *fb = |   cogl_pop_matrix (); | ||||||
|    clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
|  |  | ||||||
|   cogl_framebuffer_pop_matrix (fb); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -238,24 +235,18 @@ clutter_transform_node_class_init (ClutterTransformNodeClass *klass) | |||||||
| static void | static void | ||||||
| clutter_transform_node_init (ClutterTransformNode *self) | clutter_transform_node_init (ClutterTransformNode *self) | ||||||
| { | { | ||||||
|   cogl_matrix_init_identity (&self->transform); |   cogl_matrix_init_identity (&self->modelview); | ||||||
| } | } | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * clutter_transform_node_new: |  | ||||||
|  * @transform: (nullable): the transform matrix to apply |  | ||||||
|  * |  | ||||||
|  * Return value: (transfer full): the newly created #ClutterTransformNode. |  | ||||||
|  *   Use clutter_paint_node_unref() when done. |  | ||||||
|  */ |  | ||||||
| ClutterPaintNode * | ClutterPaintNode * | ||||||
| clutter_transform_node_new (const CoglMatrix *transform) | _clutter_transform_node_new (const CoglMatrix *modelview) | ||||||
| { | { | ||||||
|   ClutterTransformNode *res; |   ClutterTransformNode *res; | ||||||
|  |  | ||||||
|   res = _clutter_paint_node_create (CLUTTER_TYPE_TRANSFORM_NODE); |   res = _clutter_paint_node_create (_clutter_transform_node_get_type ()); | ||||||
|   if (transform) |  | ||||||
|     res->transform = *transform; |   if (modelview != NULL) | ||||||
|  |     res->modelview = *modelview; | ||||||
|  |  | ||||||
|   return (ClutterPaintNode *) res; |   return (ClutterPaintNode *) res; | ||||||
| } | } | ||||||
| @@ -283,8 +274,7 @@ struct _ClutterDummyNode | |||||||
| G_DEFINE_TYPE (ClutterDummyNode, clutter_dummy_node, CLUTTER_TYPE_PAINT_NODE) | G_DEFINE_TYPE (ClutterDummyNode, clutter_dummy_node, CLUTTER_TYPE_PAINT_NODE) | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_dummy_node_pre_draw (ClutterPaintNode    *node, | clutter_dummy_node_pre_draw (ClutterPaintNode *node) | ||||||
|                              ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   return TRUE; |   return TRUE; | ||||||
| } | } | ||||||
| @@ -321,16 +311,6 @@ clutter_dummy_node_get_framebuffer (ClutterPaintNode *node) | |||||||
|   return dnode->framebuffer; |   return dnode->framebuffer; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_dummy_node_finalize (ClutterPaintNode *node) |  | ||||||
| { |  | ||||||
|   ClutterDummyNode *dnode = (ClutterDummyNode *) node; |  | ||||||
|  |  | ||||||
|   cogl_clear_object (&dnode->framebuffer); |  | ||||||
|  |  | ||||||
|   CLUTTER_PAINT_NODE_CLASS (clutter_dummy_node_parent_class)->finalize (node); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_dummy_node_class_init (ClutterDummyNodeClass *klass) | clutter_dummy_node_class_init (ClutterDummyNodeClass *klass) | ||||||
| { | { | ||||||
| @@ -339,7 +319,6 @@ clutter_dummy_node_class_init (ClutterDummyNodeClass *klass) | |||||||
|   node_class->pre_draw = clutter_dummy_node_pre_draw; |   node_class->pre_draw = clutter_dummy_node_pre_draw; | ||||||
|   node_class->serialize = clutter_dummy_node_serialize; |   node_class->serialize = clutter_dummy_node_serialize; | ||||||
|   node_class->get_framebuffer = clutter_dummy_node_get_framebuffer; |   node_class->get_framebuffer = clutter_dummy_node_get_framebuffer; | ||||||
|   node_class->finalize = clutter_dummy_node_finalize; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -348,8 +327,7 @@ clutter_dummy_node_init (ClutterDummyNode *self) | |||||||
| } | } | ||||||
|  |  | ||||||
| ClutterPaintNode * | ClutterPaintNode * | ||||||
| _clutter_dummy_node_new (ClutterActor    *actor, | _clutter_dummy_node_new (ClutterActor *actor) | ||||||
|                          CoglFramebuffer *framebuffer) |  | ||||||
| { | { | ||||||
|   ClutterPaintNode *res; |   ClutterPaintNode *res; | ||||||
|   ClutterDummyNode *dnode; |   ClutterDummyNode *dnode; | ||||||
| @@ -358,7 +336,7 @@ _clutter_dummy_node_new (ClutterActor    *actor, | |||||||
|  |  | ||||||
|   dnode = (ClutterDummyNode *) res; |   dnode = (ClutterDummyNode *) res; | ||||||
|   dnode->actor = actor; |   dnode->actor = actor; | ||||||
|   dnode->framebuffer = cogl_object_ref (framebuffer); |   dnode->framebuffer = _clutter_actor_get_active_framebuffer (actor); | ||||||
|  |  | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
| @@ -401,34 +379,22 @@ clutter_pipeline_node_finalize (ClutterPaintNode *node) | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_pipeline_node_pre_draw (ClutterPaintNode    *node, | clutter_pipeline_node_pre_draw (ClutterPaintNode *node) | ||||||
|                                 ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterPipelineNode *pnode = CLUTTER_PIPELINE_NODE (node); |   ClutterPipelineNode *pnode = CLUTTER_PIPELINE_NODE (node); | ||||||
|  |  | ||||||
|   if (node->operations != NULL && |   if (node->operations != NULL && | ||||||
|       pnode->pipeline != NULL) |       pnode->pipeline != NULL) | ||||||
|     return TRUE; |     { | ||||||
|  |       cogl_push_source (pnode->pipeline); | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|   return FALSE; |   return FALSE; | ||||||
| } | } | ||||||
|  |  | ||||||
| static CoglFramebuffer * |  | ||||||
| get_target_framebuffer (ClutterPaintNode    *node, |  | ||||||
|                         ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   CoglFramebuffer *framebuffer; |  | ||||||
|  |  | ||||||
|   framebuffer = clutter_paint_node_get_framebuffer (node); |  | ||||||
|   if (framebuffer) |  | ||||||
|     return framebuffer; |  | ||||||
|  |  | ||||||
|   return clutter_paint_context_get_framebuffer (paint_context); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_pipeline_node_draw (ClutterPaintNode    *node, | clutter_pipeline_node_draw (ClutterPaintNode *node) | ||||||
|                             ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterPipelineNode *pnode = CLUTTER_PIPELINE_NODE (node); |   ClutterPipelineNode *pnode = CLUTTER_PIPELINE_NODE (node); | ||||||
|   CoglFramebuffer *fb; |   CoglFramebuffer *fb; | ||||||
| @@ -440,7 +406,7 @@ clutter_pipeline_node_draw (ClutterPaintNode    *node, | |||||||
|   if (node->operations == NULL) |   if (node->operations == NULL) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   fb = clutter_paint_context_get_framebuffer (paint_context); |   fb = clutter_paint_node_get_framebuffer (node); | ||||||
|  |  | ||||||
|   for (i = 0; i < node->operations->len; i++) |   for (i = 0; i < node->operations->len; i++) | ||||||
|     { |     { | ||||||
| @@ -454,20 +420,18 @@ clutter_pipeline_node_draw (ClutterPaintNode    *node, | |||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_TEX_RECT: |         case PAINT_OP_TEX_RECT: | ||||||
|           cogl_framebuffer_draw_textured_rectangle (fb, |           cogl_rectangle_with_texture_coords (op->op.texrect[0], | ||||||
|                                                     pnode->pipeline, |                                               op->op.texrect[1], | ||||||
|                                                     op->op.texrect[0], |                                               op->op.texrect[2], | ||||||
|                                                     op->op.texrect[1], |                                               op->op.texrect[3], | ||||||
|                                                     op->op.texrect[2], |                                               op->op.texrect[4], | ||||||
|                                                     op->op.texrect[3], |                                               op->op.texrect[5], | ||||||
|                                                     op->op.texrect[4], |                                               op->op.texrect[6], | ||||||
|                                                     op->op.texrect[5], |                                               op->op.texrect[7]); | ||||||
|                                                     op->op.texrect[6], |  | ||||||
|                                                     op->op.texrect[7]); |  | ||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_MULTITEX_RECT: |         case PAINT_OP_MULTITEX_RECT: | ||||||
|           cogl_framebuffer_draw_multitextured_rectangle (fb, |           cogl_framebuffer_draw_multitextured_rectangle (cogl_get_draw_framebuffer (), | ||||||
|                                                          pnode->pipeline, |                                                          pnode->pipeline, | ||||||
|                                                          op->op.texrect[0], |                                                          op->op.texrect[0], | ||||||
|                                                          op->op.texrect[1], |                                                          op->op.texrect[1], | ||||||
| @@ -478,7 +442,7 @@ clutter_pipeline_node_draw (ClutterPaintNode    *node, | |||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_PATH: |         case PAINT_OP_PATH: | ||||||
|           cogl_framebuffer_fill_path (fb, pnode->pipeline, op->op.path); |           cogl_path_fill (op->op.path); | ||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_PRIMITIVE: |         case PAINT_OP_PRIMITIVE: | ||||||
| @@ -491,9 +455,9 @@ clutter_pipeline_node_draw (ClutterPaintNode    *node, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_pipeline_node_post_draw (ClutterPaintNode    *node, | clutter_pipeline_node_post_draw (ClutterPaintNode *node) | ||||||
|                                  ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|  |   cogl_pop_source (); | ||||||
| } | } | ||||||
|  |  | ||||||
| static JsonNode * | static JsonNode * | ||||||
| @@ -812,8 +776,7 @@ clutter_text_node_finalize (ClutterPaintNode *node) | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_text_node_pre_draw (ClutterPaintNode    *node, | clutter_text_node_pre_draw (ClutterPaintNode *node) | ||||||
|                             ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterTextNode *tnode = CLUTTER_TEXT_NODE (node); |   ClutterTextNode *tnode = CLUTTER_TEXT_NODE (node); | ||||||
|  |  | ||||||
| @@ -821,8 +784,7 @@ clutter_text_node_pre_draw (ClutterPaintNode    *node, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_text_node_draw (ClutterPaintNode    *node, | clutter_text_node_draw (ClutterPaintNode *node) | ||||||
|                         ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterTextNode *tnode = CLUTTER_TEXT_NODE (node); |   ClutterTextNode *tnode = CLUTTER_TEXT_NODE (node); | ||||||
|   PangoRectangle extents; |   PangoRectangle extents; | ||||||
| @@ -832,7 +794,7 @@ clutter_text_node_draw (ClutterPaintNode    *node, | |||||||
|   if (node->operations == NULL) |   if (node->operations == NULL) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   fb = get_target_framebuffer (node, paint_context); |   fb = clutter_paint_node_get_framebuffer (node); | ||||||
|  |  | ||||||
|   pango_layout_get_pixel_extents (tnode->layout, NULL, &extents); |   pango_layout_get_pixel_extents (tnode->layout, NULL, &extents); | ||||||
|  |  | ||||||
| @@ -865,11 +827,11 @@ clutter_text_node_draw (ClutterPaintNode    *node, | |||||||
|               clipped = TRUE; |               clipped = TRUE; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|           cogl_pango_show_layout (fb, |           cogl_pango_render_layout (tnode->layout, | ||||||
|                                   tnode->layout, |                                     op->op.texrect[0], | ||||||
|                                   op->op.texrect[0], |                                     op->op.texrect[1], | ||||||
|                                   op->op.texrect[1], |                                     &tnode->color, | ||||||
|                                   &tnode->color); |                                     0); | ||||||
|  |  | ||||||
|           if (clipped) |           if (clipped) | ||||||
|             cogl_framebuffer_pop_clip (fb); |             cogl_framebuffer_pop_clip (fb); | ||||||
| @@ -1008,8 +970,7 @@ struct _ClutterClipNodeClass | |||||||
| G_DEFINE_TYPE (ClutterClipNode, clutter_clip_node, CLUTTER_TYPE_PAINT_NODE) | G_DEFINE_TYPE (ClutterClipNode, clutter_clip_node, CLUTTER_TYPE_PAINT_NODE) | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_clip_node_pre_draw (ClutterPaintNode    *node, | clutter_clip_node_pre_draw (ClutterPaintNode *node) | ||||||
|                             ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   gboolean retval = FALSE; |   gboolean retval = FALSE; | ||||||
|   CoglFramebuffer *fb; |   CoglFramebuffer *fb; | ||||||
| @@ -1018,7 +979,7 @@ clutter_clip_node_pre_draw (ClutterPaintNode    *node, | |||||||
|   if (node->operations == NULL) |   if (node->operations == NULL) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
|   fb = get_target_framebuffer (node, paint_context); |   fb = clutter_paint_node_get_framebuffer (node); | ||||||
|  |  | ||||||
|   for (i = 0; i < node->operations->len; i++) |   for (i = 0; i < node->operations->len; i++) | ||||||
|     { |     { | ||||||
| @@ -1053,8 +1014,7 @@ clutter_clip_node_pre_draw (ClutterPaintNode    *node, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_clip_node_post_draw (ClutterPaintNode    *node, | clutter_clip_node_post_draw (ClutterPaintNode *node) | ||||||
|                              ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   CoglFramebuffer *fb; |   CoglFramebuffer *fb; | ||||||
|   guint i; |   guint i; | ||||||
| @@ -1062,7 +1022,7 @@ clutter_clip_node_post_draw (ClutterPaintNode    *node, | |||||||
|   if (node->operations == NULL) |   if (node->operations == NULL) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   fb = get_target_framebuffer (node, paint_context); |   fb = clutter_paint_node_get_framebuffer (node); | ||||||
|  |  | ||||||
|   for (i = 0; i < node->operations->len; i++) |   for (i = 0; i < node->operations->len; i++) | ||||||
|     { |     { | ||||||
| @@ -1118,118 +1078,10 @@ clutter_clip_node_new (void) | |||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * ClutterActorNode |  * ClutterLayerNode (private) | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| struct _ClutterActorNode | #define clutter_layer_node_get_type     _clutter_layer_node_get_type | ||||||
| { |  | ||||||
|   ClutterPaintNode parent_instance; |  | ||||||
|  |  | ||||||
|   ClutterActor *actor; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| struct _ClutterActorNodeClass |  | ||||||
| { |  | ||||||
|   ClutterPaintNodeClass parent_class; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| G_DEFINE_TYPE (ClutterActorNode, clutter_actor_node, CLUTTER_TYPE_PAINT_NODE) |  | ||||||
|  |  | ||||||
| static gboolean |  | ||||||
| clutter_actor_node_pre_draw (ClutterPaintNode    *node, |  | ||||||
|                              ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   ClutterActorNode *actor_node = CLUTTER_ACTOR_NODE (node); |  | ||||||
|  |  | ||||||
|   CLUTTER_SET_PRIVATE_FLAGS (actor_node->actor, CLUTTER_IN_PAINT); |  | ||||||
|  |  | ||||||
|   return TRUE; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_actor_node_draw (ClutterPaintNode    *node, |  | ||||||
|                          ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   ClutterActorNode *actor_node = CLUTTER_ACTOR_NODE (node); |  | ||||||
|  |  | ||||||
|   clutter_actor_continue_paint (actor_node->actor, paint_context); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_actor_node_post_draw (ClutterPaintNode    *node, |  | ||||||
|                               ClutterPaintContext *paint_context) |  | ||||||
| { |  | ||||||
|   ClutterActorNode *actor_node = CLUTTER_ACTOR_NODE (node); |  | ||||||
|  |  | ||||||
|   CLUTTER_UNSET_PRIVATE_FLAGS (actor_node->actor, CLUTTER_IN_PAINT); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static JsonNode * |  | ||||||
| clutter_actor_node_serialize (ClutterPaintNode *node) |  | ||||||
| { |  | ||||||
|   ClutterActorNode *actor_node = CLUTTER_ACTOR_NODE (node); |  | ||||||
|   g_autoptr (JsonBuilder) builder = NULL; |  | ||||||
|   const char *debug_name; |  | ||||||
|  |  | ||||||
|   debug_name = _clutter_actor_get_debug_name (actor_node->actor); |  | ||||||
|  |  | ||||||
|   builder = json_builder_new (); |  | ||||||
|  |  | ||||||
|   json_builder_begin_object (builder); |  | ||||||
|   json_builder_set_member_name (builder, "actor"); |  | ||||||
|   json_builder_add_string_value (builder, debug_name); |  | ||||||
|   json_builder_end_object (builder); |  | ||||||
|  |  | ||||||
|   return json_builder_get_root (builder); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_actor_node_class_init (ClutterActorNodeClass *klass) |  | ||||||
| { |  | ||||||
|   ClutterPaintNodeClass *node_class; |  | ||||||
|  |  | ||||||
|   node_class = CLUTTER_PAINT_NODE_CLASS (klass); |  | ||||||
|   node_class->pre_draw = clutter_actor_node_pre_draw; |  | ||||||
|   node_class->draw = clutter_actor_node_draw; |  | ||||||
|   node_class->post_draw = clutter_actor_node_post_draw; |  | ||||||
|   node_class->serialize = clutter_actor_node_serialize; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_actor_node_init (ClutterActorNode *self) |  | ||||||
| { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * clutter_actor_node_new: |  | ||||||
|  * @actor: the actor to paint |  | ||||||
|  * |  | ||||||
|  * Creates a new #ClutterActorNode. |  | ||||||
|  * |  | ||||||
|  * The actor is painted together with any effects |  | ||||||
|  * applied to it. Children of this node will draw |  | ||||||
|  * over the actor contents. |  | ||||||
|  * |  | ||||||
|  * Return value: (transfer full): the newly created #ClutterActorNode. |  | ||||||
|  *   Use clutter_paint_node_unref() when done. |  | ||||||
|  */ |  | ||||||
| ClutterPaintNode * |  | ||||||
| clutter_actor_node_new (ClutterActor *actor) |  | ||||||
| { |  | ||||||
|   ClutterActorNode *res; |  | ||||||
|  |  | ||||||
|   g_assert (actor != NULL); |  | ||||||
|  |  | ||||||
|   res = _clutter_paint_node_create (CLUTTER_TYPE_ACTOR_NODE); |  | ||||||
|   res->actor = actor; |  | ||||||
|  |  | ||||||
|   return (ClutterPaintNode *) res; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * ClutterLayerNode |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| struct _ClutterLayerNode | struct _ClutterLayerNode | ||||||
| { | { | ||||||
| @@ -1257,11 +1109,9 @@ struct _ClutterLayerNodeClass | |||||||
| G_DEFINE_TYPE (ClutterLayerNode, clutter_layer_node, CLUTTER_TYPE_PAINT_NODE) | G_DEFINE_TYPE (ClutterLayerNode, clutter_layer_node, CLUTTER_TYPE_PAINT_NODE) | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| clutter_layer_node_pre_draw (ClutterPaintNode *node, | clutter_layer_node_pre_draw (ClutterPaintNode *node) | ||||||
|                              ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterLayerNode *lnode = (ClutterLayerNode *) node; |   ClutterLayerNode *lnode = (ClutterLayerNode *) node; | ||||||
|   CoglFramebuffer *framebuffer; |  | ||||||
|   CoglMatrix matrix; |   CoglMatrix matrix; | ||||||
|  |  | ||||||
|   /* if we were unable to create an offscreen buffer for this node, then |   /* if we were unable to create an offscreen buffer for this node, then | ||||||
| @@ -1277,10 +1127,9 @@ clutter_layer_node_pre_draw (ClutterPaintNode *node, | |||||||
|   /* copy the same modelview from the current framebuffer to the one we |   /* copy the same modelview from the current framebuffer to the one we | ||||||
|    * are going to use |    * are going to use | ||||||
|    */ |    */ | ||||||
|   framebuffer = clutter_paint_context_get_framebuffer (paint_context); |   cogl_get_modelview_matrix (&matrix); | ||||||
|   cogl_framebuffer_get_modelview_matrix (framebuffer, &matrix); |  | ||||||
|  |  | ||||||
|   clutter_paint_context_push_framebuffer (paint_context, lnode->offscreen); |   cogl_push_framebuffer (lnode->offscreen); | ||||||
|  |  | ||||||
|   cogl_framebuffer_set_modelview_matrix (lnode->offscreen, &matrix); |   cogl_framebuffer_set_modelview_matrix (lnode->offscreen, &matrix); | ||||||
|  |  | ||||||
| @@ -1298,7 +1147,7 @@ clutter_layer_node_pre_draw (ClutterPaintNode *node, | |||||||
|                             COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_DEPTH, |                             COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_DEPTH, | ||||||
|                             0.f, 0.f, 0.f, 0.f); |                             0.f, 0.f, 0.f, 0.f); | ||||||
|  |  | ||||||
|   cogl_framebuffer_push_matrix (lnode->offscreen); |   cogl_push_matrix (); | ||||||
|  |  | ||||||
|   /* every draw operation after this point will happen an offscreen |   /* every draw operation after this point will happen an offscreen | ||||||
|    * framebuffer |    * framebuffer | ||||||
| @@ -1308,18 +1157,17 @@ clutter_layer_node_pre_draw (ClutterPaintNode *node, | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_layer_node_post_draw (ClutterPaintNode    *node, | clutter_layer_node_post_draw (ClutterPaintNode *node) | ||||||
|                               ClutterPaintContext *paint_context) |  | ||||||
| { | { | ||||||
|   ClutterLayerNode *lnode = CLUTTER_LAYER_NODE (node); |   ClutterLayerNode *lnode = CLUTTER_LAYER_NODE (node); | ||||||
|   CoglFramebuffer *fb; |   CoglFramebuffer *fb; | ||||||
|   guint i; |   guint i; | ||||||
|  |  | ||||||
|   /* switch to the previous framebuffer */ |   /* switch to the previous framebuffer */ | ||||||
|   cogl_framebuffer_pop_matrix (lnode->offscreen); |   cogl_pop_matrix (); | ||||||
|   clutter_paint_context_pop_framebuffer (paint_context); |   cogl_pop_framebuffer (); | ||||||
|  |  | ||||||
|   fb = clutter_paint_context_get_framebuffer (paint_context); |   fb = cogl_get_draw_framebuffer (); | ||||||
|  |  | ||||||
|   for (i = 0; i < node->operations->len; i++) |   for (i = 0; i < node->operations->len; i++) | ||||||
|     { |     { | ||||||
| @@ -1333,20 +1181,20 @@ clutter_layer_node_post_draw (ClutterPaintNode    *node, | |||||||
|  |  | ||||||
|         case PAINT_OP_TEX_RECT: |         case PAINT_OP_TEX_RECT: | ||||||
|           /* now we need to paint the texture */ |           /* now we need to paint the texture */ | ||||||
|           cogl_framebuffer_draw_textured_rectangle (fb, |           cogl_push_source (lnode->state); | ||||||
|                                                     lnode->state, |           cogl_rectangle_with_texture_coords (op->op.texrect[0], | ||||||
|                                                     op->op.texrect[0], |                                               op->op.texrect[1], | ||||||
|                                                     op->op.texrect[1], |                                               op->op.texrect[2], | ||||||
|                                                     op->op.texrect[2], |                                               op->op.texrect[3], | ||||||
|                                                     op->op.texrect[3], |                                               op->op.texrect[4], | ||||||
|                                                     op->op.texrect[4], |                                               op->op.texrect[5], | ||||||
|                                                     op->op.texrect[5], |                                               op->op.texrect[6], | ||||||
|                                                     op->op.texrect[6], |                                               op->op.texrect[7]); | ||||||
|                                                     op->op.texrect[7]); |           cogl_pop_source (); | ||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_MULTITEX_RECT: |         case PAINT_OP_MULTITEX_RECT: | ||||||
|           cogl_framebuffer_draw_multitextured_rectangle (fb, |           cogl_framebuffer_draw_multitextured_rectangle (cogl_get_draw_framebuffer (), | ||||||
|                                                          lnode->state, |                                                          lnode->state, | ||||||
|                                                          op->op.texrect[0], |                                                          op->op.texrect[0], | ||||||
|                                                          op->op.texrect[1], |                                                          op->op.texrect[1], | ||||||
| @@ -1357,7 +1205,9 @@ clutter_layer_node_post_draw (ClutterPaintNode    *node, | |||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_PATH: |         case PAINT_OP_PATH: | ||||||
|           cogl_framebuffer_fill_path (fb, lnode->state, op->op.path); |           cogl_push_source (lnode->state); | ||||||
|  |           cogl_path_fill (op->op.path); | ||||||
|  |           cogl_pop_source (); | ||||||
|           break; |           break; | ||||||
|  |  | ||||||
|         case PAINT_OP_PRIMITIVE: |         case PAINT_OP_PRIMITIVE: | ||||||
| @@ -1418,11 +1268,11 @@ clutter_layer_node_init (ClutterLayerNode *self) | |||||||
|  * Since: 1.10 |  * Since: 1.10 | ||||||
|  */ |  */ | ||||||
| ClutterPaintNode * | ClutterPaintNode * | ||||||
| clutter_layer_node_new (const CoglMatrix        *projection, | _clutter_layer_node_new (const CoglMatrix        *projection, | ||||||
|                         const cairo_rectangle_t *viewport, |                          const cairo_rectangle_t *viewport, | ||||||
|                         float                    width, |                          float                    width, | ||||||
|                         float                    height, |                          float                    height, | ||||||
|                         guint8                   opacity) |                          guint8                   opacity) | ||||||
| { | { | ||||||
|   ClutterLayerNode *res; |   ClutterLayerNode *res; | ||||||
|   CoglColor color; |   CoglColor color; | ||||||
|   | |||||||
| @@ -143,25 +143,6 @@ CLUTTER_EXPORT | |||||||
| ClutterPaintNode *      clutter_text_node_new           (PangoLayout           *layout, | ClutterPaintNode *      clutter_text_node_new           (PangoLayout           *layout, | ||||||
|                                                          const ClutterColor    *color); |                                                          const ClutterColor    *color); | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_ACTOR_NODE                 (clutter_actor_node_get_type ()) |  | ||||||
| #define CLUTTER_ACTOR_NODE(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ACTOR_NODE, ClutterActorNode)) |  | ||||||
| #define CLUTTER_IS_ACTOR_NODE(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ACTOR_NODE)) |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * ClutterActorNode: |  | ||||||
|  * |  | ||||||
|  * The #ClutterActorNode structure is an opaque |  | ||||||
|  * type whose members cannot be directly accessed. |  | ||||||
|  */ |  | ||||||
| typedef struct _ClutterActorNode ClutterActorNode; |  | ||||||
| typedef struct _ClutterActorNode ClutterActorNodeClass; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| GType clutter_actor_node_get_type (void) G_GNUC_CONST; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterPaintNode * clutter_actor_node_new (ClutterActor *actor); |  | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_ROOT_NODE                  (clutter_root_node_get_type ()) | #define CLUTTER_TYPE_ROOT_NODE                  (clutter_root_node_get_type ()) | ||||||
| #define CLUTTER_ROOT_NODE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ROOT_NODE, ClutterRootNode)) | #define CLUTTER_ROOT_NODE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_ROOT_NODE, ClutterRootNode)) | ||||||
| #define CLUTTER_IS_ROOT_NODE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ROOT_NODE)) | #define CLUTTER_IS_ROOT_NODE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_ROOT_NODE)) | ||||||
| @@ -182,54 +163,6 @@ CLUTTER_EXPORT | |||||||
| ClutterPaintNode *      clutter_root_node_new           (CoglFramebuffer       *framebuffer, | ClutterPaintNode *      clutter_root_node_new           (CoglFramebuffer       *framebuffer, | ||||||
|                                                          const ClutterColor    *clear_color, |                                                          const ClutterColor    *clear_color, | ||||||
|                                                          CoglBufferBit          clear_flags); |                                                          CoglBufferBit          clear_flags); | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_LAYER_NODE                 (clutter_layer_node_get_type ()) |  | ||||||
| #define CLUTTER_LAYER_NODE(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_LAYER_NODE, ClutterLayerNode)) |  | ||||||
| #define CLUTTER_IS_LAYER_NODE(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_LAYER_NODE)) |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * ClutterLayerNode: |  | ||||||
|  * |  | ||||||
|  * The #ClutterLayerNode structure is an opaque |  | ||||||
|  * type whose members cannot be directly accessed. |  | ||||||
|  * |  | ||||||
|  * Since: 1.10 |  | ||||||
|  */ |  | ||||||
| typedef struct _ClutterLayerNode                ClutterLayerNode; |  | ||||||
| typedef struct _ClutterLayerNodeClass           ClutterLayerNodeClass; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| GType clutter_layer_node_get_type (void) G_GNUC_CONST; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterPaintNode *      clutter_layer_node_new          (const CoglMatrix        *projection, |  | ||||||
|                                                          const cairo_rectangle_t *viewport, |  | ||||||
|                                                          float                    width, |  | ||||||
|                                                          float                    height, |  | ||||||
|                                                          guint8                   opacity); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_TRANSFORM_NODE             (clutter_transform_node_get_type ()) |  | ||||||
| #define CLUTTER_TRANSFORM_NODE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TRANSFORM_NODE, ClutterTransformNode)) |  | ||||||
| #define CLUTTER_IS_TRANSFORM_NODE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_TRANSFORM_NODE)) |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * ClutterTransformNode: |  | ||||||
|  * |  | ||||||
|  * The #ClutterLayerNode structure is an opaque |  | ||||||
|  * type whose members cannot be directly accessed. |  | ||||||
|  * |  | ||||||
|  * Since: 1.10 |  | ||||||
|  */ |  | ||||||
| typedef struct _ClutterTransformNode            ClutterTransformNode; |  | ||||||
| typedef struct _ClutterPaintNodeClass           ClutterTransformNodeClass; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| GType clutter_transform_node_get_type (void) G_GNUC_CONST; |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterPaintNode *      clutter_transform_node_new          (const CoglMatrix *projection); |  | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
| #endif /* __CLUTTER_PAINT_NODES_H__ */ | #endif /* __CLUTTER_PAINT_NODES_H__ */ | ||||||
|   | |||||||
| @@ -58,7 +58,7 @@ struct _ClutterPaintVolume | |||||||
|    * elements 4, 5, 6 and 7 most of the time for 2D actors when |    * elements 4, 5, 6 and 7 most of the time for 2D actors when | ||||||
|    * calculating the projected paint box. |    * calculating the projected paint box. | ||||||
|    */ |    */ | ||||||
|   graphene_point3d_t vertices[8]; |   ClutterVertex vertices[8]; | ||||||
|  |  | ||||||
|   /* As an optimization for internally managed PaintVolumes we allow |   /* As an optimization for internally managed PaintVolumes we allow | ||||||
|    * initializing ClutterPaintVolume variables allocated on the stack |    * initializing ClutterPaintVolume variables allocated on the stack | ||||||
|   | |||||||
| @@ -63,7 +63,7 @@ _clutter_paint_volume_new (ClutterActor *actor) | |||||||
|  |  | ||||||
|   pv->actor = actor; |   pv->actor = actor; | ||||||
|  |  | ||||||
|   memset (pv->vertices, 0, 8 * sizeof (graphene_point3d_t)); |   memset (pv->vertices, 0, 8 * sizeof (ClutterVertex)); | ||||||
|  |  | ||||||
|   pv->is_static = FALSE; |   pv->is_static = FALSE; | ||||||
|   pv->is_empty = TRUE; |   pv->is_empty = TRUE; | ||||||
| @@ -96,7 +96,7 @@ _clutter_paint_volume_init_static (ClutterPaintVolume *pv, | |||||||
| { | { | ||||||
|   pv->actor = actor; |   pv->actor = actor; | ||||||
|  |  | ||||||
|   memset (pv->vertices, 0, 8 * sizeof (graphene_point3d_t)); |   memset (pv->vertices, 0, 8 * sizeof (ClutterVertex)); | ||||||
|  |  | ||||||
|   pv->is_static = TRUE; |   pv->is_static = TRUE; | ||||||
|   pv->is_empty = TRUE; |   pv->is_empty = TRUE; | ||||||
| @@ -170,7 +170,7 @@ clutter_paint_volume_free (ClutterPaintVolume *pv) | |||||||
| /** | /** | ||||||
|  * clutter_paint_volume_set_origin: |  * clutter_paint_volume_set_origin: | ||||||
|  * @pv: a #ClutterPaintVolume |  * @pv: a #ClutterPaintVolume | ||||||
|  * @origin: a #graphene_point3d_t |  * @origin: a #ClutterVertex | ||||||
|  * |  * | ||||||
|  * Sets the origin of the paint volume. |  * Sets the origin of the paint volume. | ||||||
|  * |  * | ||||||
| @@ -182,8 +182,8 @@ clutter_paint_volume_free (ClutterPaintVolume *pv) | |||||||
|  * Since: 1.6 |  * Since: 1.6 | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_paint_volume_set_origin (ClutterPaintVolume       *pv, | clutter_paint_volume_set_origin (ClutterPaintVolume  *pv, | ||||||
|                                  const graphene_point3d_t *origin) |                                  const ClutterVertex *origin) | ||||||
| { | { | ||||||
|   static const int key_vertices[4] = { 0, 1, 3, 4 }; |   static const int key_vertices[4] = { 0, 1, 3, 4 }; | ||||||
|   float dx, dy, dz; |   float dx, dy, dz; | ||||||
| @@ -210,7 +210,7 @@ clutter_paint_volume_set_origin (ClutterPaintVolume       *pv, | |||||||
| /** | /** | ||||||
|  * clutter_paint_volume_get_origin: |  * clutter_paint_volume_get_origin: | ||||||
|  * @pv: a #ClutterPaintVolume |  * @pv: a #ClutterPaintVolume | ||||||
|  * @vertex: (out): the return location for a #graphene_point3d_t |  * @vertex: (out): the return location for a #ClutterVertex | ||||||
|  * |  * | ||||||
|  * Retrieves the origin of the #ClutterPaintVolume. |  * Retrieves the origin of the #ClutterPaintVolume. | ||||||
|  * |  * | ||||||
| @@ -218,7 +218,7 @@ clutter_paint_volume_set_origin (ClutterPaintVolume       *pv, | |||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_paint_volume_get_origin (const ClutterPaintVolume *pv, | clutter_paint_volume_get_origin (const ClutterPaintVolume *pv, | ||||||
|                                  graphene_point3d_t       *vertex) |                                  ClutterVertex            *vertex) | ||||||
| { | { | ||||||
|   g_return_if_fail (pv != NULL); |   g_return_if_fail (pv != NULL); | ||||||
|   g_return_if_fail (vertex != NULL); |   g_return_if_fail (vertex != NULL); | ||||||
| @@ -659,7 +659,7 @@ clutter_paint_volume_union_box (ClutterPaintVolume    *pv, | |||||||
|                                 const ClutterActorBox *box) |                                 const ClutterActorBox *box) | ||||||
| { | { | ||||||
|   ClutterPaintVolume volume; |   ClutterPaintVolume volume; | ||||||
|   graphene_point3d_t origin; |   ClutterVertex origin; | ||||||
|  |  | ||||||
|   g_return_if_fail (pv != NULL); |   g_return_if_fail (pv != NULL); | ||||||
|   g_return_if_fail (box != NULL); |   g_return_if_fail (box != NULL); | ||||||
| @@ -757,7 +757,7 @@ _clutter_paint_volume_get_bounding_box (ClutterPaintVolume *pv, | |||||||
|                                         ClutterActorBox *box) |                                         ClutterActorBox *box) | ||||||
| { | { | ||||||
|   gfloat x_min, y_min, x_max, y_max; |   gfloat x_min, y_min, x_max, y_max; | ||||||
|   graphene_point3d_t *vertices; |   ClutterVertex *vertices; | ||||||
|   int count; |   int count; | ||||||
|   gint i; |   gint i; | ||||||
|  |  | ||||||
| @@ -878,9 +878,9 @@ _clutter_paint_volume_transform (ClutterPaintVolume *pv, | |||||||
|  |  | ||||||
|   cogl_matrix_transform_points (matrix, |   cogl_matrix_transform_points (matrix, | ||||||
|                                 3, |                                 3, | ||||||
|                                 sizeof (graphene_point3d_t), |                                 sizeof (ClutterVertex), | ||||||
|                                 pv->vertices, |                                 pv->vertices, | ||||||
|                                 sizeof (graphene_point3d_t), |                                 sizeof (ClutterVertex), | ||||||
|                                 pv->vertices, |                                 pv->vertices, | ||||||
|                                 transform_count); |                                 transform_count); | ||||||
|  |  | ||||||
| @@ -896,7 +896,7 @@ _clutter_paint_volume_axis_align (ClutterPaintVolume *pv) | |||||||
| { | { | ||||||
|   int count; |   int count; | ||||||
|   int i; |   int i; | ||||||
|   graphene_point3d_t origin; |   ClutterVertex origin; | ||||||
|   float max_x; |   float max_x; | ||||||
|   float max_y; |   float max_y; | ||||||
|   float max_z; |   float max_z; | ||||||
| @@ -1075,7 +1075,7 @@ _clutter_paint_volume_cull (ClutterPaintVolume *pv, | |||||||
|                             const ClutterPlane *planes) |                             const ClutterPlane *planes) | ||||||
| { | { | ||||||
|   int vertex_count; |   int vertex_count; | ||||||
|   graphene_point3d_t *vertices = pv->vertices; |   ClutterVertex *vertices = pv->vertices; | ||||||
|   gboolean partial = FALSE; |   gboolean partial = FALSE; | ||||||
|   int i; |   int i; | ||||||
|   int j; |   int j; | ||||||
| @@ -1097,18 +1097,24 @@ _clutter_paint_volume_cull (ClutterPaintVolume *pv, | |||||||
|  |  | ||||||
|   for (i = 0; i < 4; i++) |   for (i = 0; i < 4; i++) | ||||||
|     { |     { | ||||||
|       const ClutterPlane *plane = &planes[i]; |  | ||||||
|       int out = 0; |       int out = 0; | ||||||
|       for (j = 0; j < vertex_count; j++) |       for (j = 0; j < vertex_count; j++) | ||||||
|         { |         { | ||||||
|           graphene_vec3_t v; |           ClutterVertex p; | ||||||
|  |           float distance; | ||||||
|  |  | ||||||
|           graphene_vec3_init (&v, |           /* XXX: for perspective projections this can be optimized | ||||||
|                               vertices[j].x - graphene_vec3_get_x (&plane->v0), |            * out because all the planes should pass through the origin | ||||||
|                               vertices[j].y - graphene_vec3_get_y (&plane->v0), |            * so (0,0,0) is a valid v0. */ | ||||||
|                               vertices[j].z - graphene_vec3_get_z (&plane->v0)); |           p.x = vertices[j].x - planes[i].v0[0]; | ||||||
|  |           p.y = vertices[j].y - planes[i].v0[1]; | ||||||
|  |           p.z = vertices[j].z - planes[i].v0[2]; | ||||||
|  |  | ||||||
|           if (graphene_vec3_dot (&plane->n, &v) < 0) |           distance = (planes[i].n[0] * p.x + | ||||||
|  |                       planes[i].n[1] * p.y + | ||||||
|  |                       planes[i].n[2] * p.z); | ||||||
|  |  | ||||||
|  |           if (distance < 0) | ||||||
|             out++; |             out++; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -27,7 +27,8 @@ | |||||||
|  * and bezier curves. |  * and bezier curves. | ||||||
|  * |  * | ||||||
|  * A #ClutterPath contains a description of a path consisting of |  * A #ClutterPath contains a description of a path consisting of | ||||||
|  * straight lines and bezier curves. |  * straight lines and bezier curves. This can be used in a | ||||||
|  |  * #ClutterBehaviourPath to animate an actor moving along the path. | ||||||
|  * |  * | ||||||
|  * The path consists of a series of nodes. Each node is one of the |  * The path consists of a series of nodes. Each node is one of the | ||||||
|  * following four types: |  * following four types: | ||||||
| @@ -243,6 +244,9 @@ clutter_path_finalize (GObject *object) | |||||||
|  * |  * | ||||||
|  * Creates a new #ClutterPath instance with no nodes. |  * Creates a new #ClutterPath instance with no nodes. | ||||||
|  * |  * | ||||||
|  |  * The object has a floating reference so if you add it to a | ||||||
|  |  * #ClutterBehaviourPath then you do not need to unref it. | ||||||
|  |  * | ||||||
|  * Return value: the newly created #ClutterPath |  * Return value: the newly created #ClutterPath | ||||||
|  * |  * | ||||||
|  * Since: 1.0 |  * Since: 1.0 | ||||||
| @@ -263,6 +267,9 @@ clutter_path_new (void) | |||||||
|  * @desc. See clutter_path_add_string() for details of the format of |  * @desc. See clutter_path_add_string() for details of the format of | ||||||
|  * the string. |  * the string. | ||||||
|  * |  * | ||||||
|  |  * The object has a floating reference so if you add it to a | ||||||
|  |  * #ClutterBehaviourPath then you do not need to unref it. | ||||||
|  |  * | ||||||
|  * Return value: the newly created #ClutterPath |  * Return value: the newly created #ClutterPath | ||||||
|  * |  * | ||||||
|  * Since: 1.0 |  * Since: 1.0 | ||||||
|   | |||||||
| @@ -1,25 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) 2019 Red Hat 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 CLUTTER_PICK_CONTEXT_PRIVATE_H |  | ||||||
| #define CLUTTER_PICK_CONTEXT_PRIVATE_H |  | ||||||
|  |  | ||||||
| #include "clutter-pick-context.h" |  | ||||||
|  |  | ||||||
| ClutterPickContext * clutter_pick_context_new_for_view (ClutterStageView *view); |  | ||||||
|  |  | ||||||
| #endif /* CLUTTER_PICK_CONTEXT_PRIVATE_H */ |  | ||||||
| @@ -1,83 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) 2019 Red Hat 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/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include "clutter-build-config.h" |  | ||||||
|  |  | ||||||
| #include "clutter-pick-context-private.h" |  | ||||||
|  |  | ||||||
| struct _ClutterPickContext |  | ||||||
| { |  | ||||||
|   grefcount ref_count; |  | ||||||
|  |  | ||||||
|   CoglFramebuffer *framebuffer; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| G_DEFINE_BOXED_TYPE (ClutterPickContext, clutter_pick_context, |  | ||||||
|                      clutter_pick_context_ref, |  | ||||||
|                      clutter_pick_context_unref) |  | ||||||
|  |  | ||||||
| ClutterPickContext * |  | ||||||
| clutter_pick_context_new_for_view (ClutterStageView *view) |  | ||||||
| { |  | ||||||
|   ClutterPickContext *pick_context; |  | ||||||
|  |  | ||||||
|   pick_context = g_new0 (ClutterPickContext, 1); |  | ||||||
|   g_ref_count_init (&pick_context->ref_count); |  | ||||||
|   pick_context->framebuffer = |  | ||||||
|     cogl_object_ref (clutter_stage_view_get_framebuffer (view)); |  | ||||||
|  |  | ||||||
|   return pick_context; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ClutterPickContext * |  | ||||||
| clutter_pick_context_ref (ClutterPickContext *pick_context) |  | ||||||
| { |  | ||||||
|   g_ref_count_inc (&pick_context->ref_count); |  | ||||||
|   return pick_context; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| clutter_pick_context_dispose (ClutterPickContext *pick_context) |  | ||||||
| { |  | ||||||
|   g_clear_pointer (&pick_context->framebuffer, cogl_object_unref); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_pick_context_unref (ClutterPickContext *pick_context) |  | ||||||
| { |  | ||||||
|   if (g_ref_count_dec (&pick_context->ref_count)) |  | ||||||
|     { |  | ||||||
|       clutter_pick_context_dispose (pick_context); |  | ||||||
|       g_free (pick_context); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void |  | ||||||
| clutter_pick_context_destroy (ClutterPickContext *pick_context) |  | ||||||
| { |  | ||||||
|   clutter_pick_context_dispose (pick_context); |  | ||||||
|   clutter_pick_context_unref (pick_context); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * clutter_pick_context_get_framebuffer: (skip) |  | ||||||
|  */ |  | ||||||
| CoglFramebuffer * |  | ||||||
| clutter_pick_context_get_framebuffer (ClutterPickContext *pick_context) |  | ||||||
| { |  | ||||||
|   return pick_context->framebuffer; |  | ||||||
| } |  | ||||||
| @@ -1,49 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) 2019 Red Hat 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 CLUTTER_PICK_CONTEXT_H |  | ||||||
| #define CLUTTER_PICK_CONTEXT_H |  | ||||||
|  |  | ||||||
| #if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION) |  | ||||||
| #error "Only <clutter/clutter.h> can be included directly." |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include <glib-object.h> |  | ||||||
|  |  | ||||||
| #include "clutter-macros.h" |  | ||||||
| #include "clutter-stage-view.h" |  | ||||||
|  |  | ||||||
| typedef struct _ClutterPickContext ClutterPickContext; |  | ||||||
|  |  | ||||||
| #define CLUTTER_TYPE_PICK_CONTEXT (clutter_pick_context_get_type ()) |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| GType clutter_pick_context_get_type (void); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| ClutterPickContext * clutter_pick_context_ref (ClutterPickContext *pick_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_pick_context_unref (ClutterPickContext *pick_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| void clutter_pick_context_destroy (ClutterPickContext *pick_context); |  | ||||||
|  |  | ||||||
| CLUTTER_EXPORT |  | ||||||
| CoglFramebuffer * clutter_pick_context_get_framebuffer (ClutterPickContext *pick_context); |  | ||||||
|  |  | ||||||
| #endif /* CLUTTER_PICK_CONTEXT_H */ |  | ||||||
| @@ -64,10 +64,10 @@ typedef struct _ClutterVertex4          ClutterVertex4; | |||||||
| #define CLUTTER_UNSET_PRIVATE_FLAGS(a,f) (CLUTTER_PRIVATE_FLAGS (a) &= ~(f)) | #define CLUTTER_UNSET_PRIVATE_FLAGS(a,f) (CLUTTER_PRIVATE_FLAGS (a) &= ~(f)) | ||||||
|  |  | ||||||
| #define CLUTTER_ACTOR_IS_TOPLEVEL(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IS_TOPLEVEL) != FALSE) | #define CLUTTER_ACTOR_IS_TOPLEVEL(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IS_TOPLEVEL) != FALSE) | ||||||
|  | #define CLUTTER_ACTOR_IS_INTERNAL_CHILD(a)      ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_INTERNAL_CHILD) != FALSE) | ||||||
| #define CLUTTER_ACTOR_IN_DESTRUCTION(a)         ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_DESTRUCTION) != FALSE) | #define CLUTTER_ACTOR_IN_DESTRUCTION(a)         ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_DESTRUCTION) != FALSE) | ||||||
| #define CLUTTER_ACTOR_IN_REPARENT(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_REPARENT) != FALSE) | #define CLUTTER_ACTOR_IN_REPARENT(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_REPARENT) != FALSE) | ||||||
| #define CLUTTER_ACTOR_IN_PAINT(a)               ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PAINT) != FALSE) | #define CLUTTER_ACTOR_IN_PAINT(a)               ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PAINT) != FALSE) | ||||||
| #define CLUTTER_ACTOR_IN_PICK(a)                ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PICK) != FALSE) |  | ||||||
| #define CLUTTER_ACTOR_IN_RELAYOUT(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_RELAYOUT) != FALSE) | #define CLUTTER_ACTOR_IN_RELAYOUT(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_RELAYOUT) != FALSE) | ||||||
| #define CLUTTER_ACTOR_IN_PREF_WIDTH(a)          ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PREF_WIDTH) != FALSE) | #define CLUTTER_ACTOR_IN_PREF_WIDTH(a)          ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PREF_WIDTH) != FALSE) | ||||||
| #define CLUTTER_ACTOR_IN_PREF_HEIGHT(a)         ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PREF_HEIGHT) != FALSE) | #define CLUTTER_ACTOR_IN_PREF_HEIGHT(a)         ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PREF_HEIGHT) != FALSE) | ||||||
| @@ -105,10 +105,12 @@ typedef enum | |||||||
|  |  | ||||||
|   /* Used to avoid recursion */ |   /* Used to avoid recursion */ | ||||||
|   CLUTTER_IN_PAINT       = 1 << 5, |   CLUTTER_IN_PAINT       = 1 << 5, | ||||||
|   CLUTTER_IN_PICK        = 1 << 6, |  | ||||||
|  |  | ||||||
|   /* Used to avoid recursion */ |   /* Used to avoid recursion */ | ||||||
|   CLUTTER_IN_RELAYOUT    = 1 << 7, |   CLUTTER_IN_RELAYOUT    = 1 << 6, | ||||||
|  |  | ||||||
|  |   /* a flag for internal children of Containers (DEPRECATED) */ | ||||||
|  |   CLUTTER_INTERNAL_CHILD = 1 << 7 | ||||||
| } ClutterPrivateFlags; | } ClutterPrivateFlags; | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -222,17 +224,17 @@ void _clutter_run_repaint_functions (ClutterRepaintFlags flags); | |||||||
|  |  | ||||||
| GType _clutter_layout_manager_get_child_meta_type (ClutterLayoutManager *manager); | GType _clutter_layout_manager_get_child_meta_type (ClutterLayoutManager *manager); | ||||||
|  |  | ||||||
| void  _clutter_util_fully_transform_vertices (const CoglMatrix         *modelview, | void  _clutter_util_fully_transform_vertices (const CoglMatrix    *modelview, | ||||||
|                                               const CoglMatrix         *projection, |                                               const CoglMatrix    *projection, | ||||||
|                                               const float              *viewport, |                                               const float         *viewport, | ||||||
|                                               const graphene_point3d_t *vertices_in, |                                               const ClutterVertex *vertices_in, | ||||||
|                                               graphene_point3d_t       *vertices_out, |                                               ClutterVertex       *vertices_out, | ||||||
|                                               int                       n_vertices); |                                               int                  n_vertices); | ||||||
|  |  | ||||||
| void _clutter_util_rect_from_rectangle (const cairo_rectangle_int_t *src, | void _clutter_util_rect_from_rectangle (const cairo_rectangle_int_t *src, | ||||||
|                                         graphene_rect_t             *dest); |                                         ClutterRect                 *dest); | ||||||
|  |  | ||||||
| void _clutter_util_rectangle_int_extents (const graphene_rect_t *src, | void _clutter_util_rectangle_int_extents (const ClutterRect     *src, | ||||||
|                                           cairo_rectangle_int_t *dest); |                                           cairo_rectangle_int_t *dest); | ||||||
|  |  | ||||||
| void _clutter_util_rectangle_offset (const cairo_rectangle_int_t *src, | void _clutter_util_rectangle_offset (const cairo_rectangle_int_t *src, | ||||||
| @@ -280,10 +282,10 @@ void    _clutter_util_matrix_skew_yz            (ClutterMatrix *matrix, | |||||||
|                                                  float          factor); |                                                  float          factor); | ||||||
|  |  | ||||||
| gboolean        _clutter_util_matrix_decompose  (const ClutterMatrix *src, | gboolean        _clutter_util_matrix_decompose  (const ClutterMatrix *src, | ||||||
|                                                  graphene_point3d_t  *scale_p, |                                                  ClutterVertex       *scale_p, | ||||||
|                                                  float                shear_p[3], |                                                  float                shear_p[3], | ||||||
|                                                  graphene_point3d_t  *rotate_p, |                                                  ClutterVertex       *rotate_p, | ||||||
|                                                  graphene_point3d_t  *translate_p, |                                                  ClutterVertex       *translate_p, | ||||||
|                                                  ClutterVertex4      *perspective_p); |                                                  ClutterVertex4      *perspective_p); | ||||||
|  |  | ||||||
| CLUTTER_EXPORT | CLUTTER_EXPORT | ||||||
| @@ -294,8 +296,8 @@ PangoDirection _clutter_pango_find_base_dir     (const gchar *text, | |||||||
|  |  | ||||||
| typedef struct _ClutterPlane | typedef struct _ClutterPlane | ||||||
| { | { | ||||||
|   graphene_vec3_t v0; |   float v0[3]; | ||||||
|   graphene_vec3_t n; |   float n[3]; | ||||||
| } ClutterPlane; | } ClutterPlane; | ||||||
|  |  | ||||||
| typedef enum _ClutterCullResult | typedef enum _ClutterCullResult | ||||||
| @@ -313,8 +315,6 @@ gboolean        _clutter_run_progress_function  (GType gtype, | |||||||
|                                                  gdouble progress, |                                                  gdouble progress, | ||||||
|                                                  GValue *retval); |                                                  GValue *retval); | ||||||
|  |  | ||||||
| void            clutter_timeline_cancel_delay (ClutterTimeline *timeline); |  | ||||||
|  |  | ||||||
| G_END_DECLS | G_END_DECLS | ||||||
|  |  | ||||||
| #endif /* __CLUTTER_PRIVATE_H__ */ | #endif /* __CLUTTER_PRIVATE_H__ */ | ||||||
|   | |||||||
| @@ -352,64 +352,63 @@ _clutter_script_parse_knot (ClutterScript *script, | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| parse_rect_from_array (JsonArray       *array, | parse_geometry_from_array (JsonArray       *array, | ||||||
|                        graphene_rect_t *rect) |                            ClutterGeometry *geometry) | ||||||
| { | { | ||||||
|   if (json_array_get_length (array) != 4) |   if (json_array_get_length (array) != 4) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |  | ||||||
|   graphene_rect_init (rect, |   geometry->x = json_array_get_int_element (array, 0); | ||||||
|                       json_array_get_int_element (array, 0), |   geometry->y = json_array_get_int_element (array, 1); | ||||||
|                       json_array_get_int_element (array, 1), |   geometry->width = json_array_get_int_element (array, 2); | ||||||
|                       json_array_get_int_element (array, 2), |   geometry->height = json_array_get_int_element (array, 3); | ||||||
|                       json_array_get_int_element (array, 3)); |  | ||||||
|  |  | ||||||
|   return TRUE; |   return TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| parse_rect_from_object (JsonObject      *object, | parse_geometry_from_object (JsonObject      *object, | ||||||
|                             graphene_rect_t *rect) |                             ClutterGeometry *geometry) | ||||||
| { | { | ||||||
|   if (json_object_has_member (object, "x")) |   if (json_object_has_member (object, "x")) | ||||||
|     rect->origin.x = json_object_get_int_member (object, "x"); |     geometry->x = json_object_get_int_member (object, "x"); | ||||||
|   else |   else | ||||||
|     rect->origin.x = 0; |     geometry->x = 0; | ||||||
|  |  | ||||||
|   if (json_object_has_member (object, "y")) |   if (json_object_has_member (object, "y")) | ||||||
|     rect->origin.y = json_object_get_int_member (object, "y"); |     geometry->y = json_object_get_int_member (object, "y"); | ||||||
|   else |   else | ||||||
|     rect->origin.y = 0; |     geometry->y = 0; | ||||||
|  |  | ||||||
|   if (json_object_has_member (object, "width")) |   if (json_object_has_member (object, "width")) | ||||||
|     rect->size.width = json_object_get_int_member (object, "width"); |     geometry->width = json_object_get_int_member (object, "width"); | ||||||
|   else |   else | ||||||
|     rect->size.width = 0; |     geometry->width = 0; | ||||||
|  |  | ||||||
|   if (json_object_has_member (object, "height")) |   if (json_object_has_member (object, "height")) | ||||||
|     rect->size.height = json_object_get_int_member (object, "height"); |     geometry->height = json_object_get_int_member (object, "height"); | ||||||
|   else |   else | ||||||
|     rect->size.height = 0; |     geometry->height = 0; | ||||||
|  |  | ||||||
|   return TRUE; |   return TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
| gboolean | gboolean | ||||||
| _clutter_script_parse_rect (ClutterScript   *script, | _clutter_script_parse_geometry (ClutterScript   *script, | ||||||
|                             JsonNode        *node, |                                 JsonNode        *node, | ||||||
|                             graphene_rect_t *rect) |                                 ClutterGeometry *geometry) | ||||||
| { | { | ||||||
|   g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE); |   g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE); | ||||||
|   g_return_val_if_fail (node != NULL, FALSE); |   g_return_val_if_fail (node != NULL, FALSE); | ||||||
|   g_return_val_if_fail (rect != NULL, FALSE); |   g_return_val_if_fail (geometry != NULL, FALSE); | ||||||
|  |  | ||||||
|   switch (JSON_NODE_TYPE (node)) |   switch (JSON_NODE_TYPE (node)) | ||||||
|     { |     { | ||||||
|     case JSON_NODE_ARRAY: |     case JSON_NODE_ARRAY: | ||||||
|       return parse_rect_from_array (json_node_get_array (node), rect); |       return parse_geometry_from_array (json_node_get_array (node), geometry); | ||||||
|  |  | ||||||
|     case JSON_NODE_OBJECT: |     case JSON_NODE_OBJECT: | ||||||
|       return parse_rect_from_object (json_node_get_object (node), rect); |       return parse_geometry_from_object (json_node_get_object (node), geometry); | ||||||
|  |  | ||||||
|     default: |     default: | ||||||
|       break; |       break; | ||||||
| @@ -493,8 +492,8 @@ _clutter_script_parse_color (ClutterScript *script, | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| parse_point_from_array (JsonArray        *array, | parse_point_from_array (JsonArray    *array, | ||||||
|                         graphene_point_t *point) |                         ClutterPoint *point) | ||||||
| { | { | ||||||
|   if (json_array_get_length (array) != 2) |   if (json_array_get_length (array) != 2) | ||||||
|     return FALSE; |     return FALSE; | ||||||
| @@ -506,8 +505,8 @@ parse_point_from_array (JsonArray        *array, | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| parse_point_from_object (JsonObject       *object, | parse_point_from_object (JsonObject   *object, | ||||||
|                          graphene_point_t *point) |                          ClutterPoint *point) | ||||||
| { | { | ||||||
|   if (json_object_has_member (object, "x")) |   if (json_object_has_member (object, "x")) | ||||||
|     point->x = json_object_get_double_member (object, "x"); |     point->x = json_object_get_double_member (object, "x"); | ||||||
| @@ -523,9 +522,9 @@ parse_point_from_object (JsonObject       *object, | |||||||
| } | } | ||||||
|  |  | ||||||
| gboolean | gboolean | ||||||
| _clutter_script_parse_point (ClutterScript    *script, | _clutter_script_parse_point (ClutterScript *script, | ||||||
|                              JsonNode         *node, |                              JsonNode      *node, | ||||||
|                              graphene_point_t *point) |                              ClutterPoint  *point) | ||||||
| { | { | ||||||
|   g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE); |   g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE); | ||||||
|   g_return_val_if_fail (node != NULL, FALSE); |   g_return_val_if_fail (node != NULL, FALSE); | ||||||
| @@ -547,8 +546,8 @@ _clutter_script_parse_point (ClutterScript    *script, | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| parse_size_from_array (JsonArray       *array, | parse_size_from_array (JsonArray   *array, | ||||||
|                        graphene_size_t *size) |                        ClutterSize *size) | ||||||
| { | { | ||||||
|   if (json_array_get_length (array) != 2) |   if (json_array_get_length (array) != 2) | ||||||
|     return FALSE; |     return FALSE; | ||||||
| @@ -560,8 +559,8 @@ parse_size_from_array (JsonArray       *array, | |||||||
| } | } | ||||||
|  |  | ||||||
| static gboolean | static gboolean | ||||||
| parse_size_from_object (JsonObject      *object, | parse_size_from_object (JsonObject  *object, | ||||||
|                         graphene_size_t *size) |                         ClutterSize *size) | ||||||
| { | { | ||||||
|   if (json_object_has_member (object, "width")) |   if (json_object_has_member (object, "width")) | ||||||
|     size->width = json_object_get_double_member (object, "width"); |     size->width = json_object_get_double_member (object, "width"); | ||||||
| @@ -577,9 +576,9 @@ parse_size_from_object (JsonObject      *object, | |||||||
| } | } | ||||||
|  |  | ||||||
| gboolean | gboolean | ||||||
| _clutter_script_parse_size (ClutterScript   *script, | _clutter_script_parse_size (ClutterScript *script, | ||||||
|                             JsonNode        *node, |                             JsonNode      *node, | ||||||
|                             graphene_size_t *size) |                             ClutterSize   *size) | ||||||
| { | { | ||||||
|   g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE); |   g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE); | ||||||
|   g_return_val_if_fail (node != NULL, FALSE); |   g_return_val_if_fail (node != NULL, FALSE); | ||||||
| @@ -1329,11 +1328,11 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|           else if (p_type == GRAPHENE_TYPE_RECT) |           else if (p_type == CLUTTER_TYPE_GEOMETRY) | ||||||
|             { |             { | ||||||
|               graphene_rect_t rect = GRAPHENE_RECT_INIT_ZERO; |               ClutterGeometry geom = { 0, }; | ||||||
|  |  | ||||||
|               /* rect := { |               /* geometry := { | ||||||
|                *        "x" : (int), |                *        "x" : (int), | ||||||
|                *        "y" : (int), |                *        "y" : (int), | ||||||
|                *        "width" : (int), |                *        "width" : (int), | ||||||
| @@ -1341,9 +1340,9 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                * } |                * } | ||||||
|                */ |                */ | ||||||
|  |  | ||||||
|               if (_clutter_script_parse_rect (script, node, &rect)) |               if (_clutter_script_parse_geometry (script, node, &geom)) | ||||||
|                 { |                 { | ||||||
|                   g_value_set_boxed (value, &rect); |                   g_value_set_boxed (value, &geom); | ||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -1365,9 +1364,9 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|           else if (p_type == GRAPHENE_TYPE_POINT) |           else if (p_type == CLUTTER_TYPE_POINT) | ||||||
|             { |             { | ||||||
|               graphene_point_t point = GRAPHENE_POINT_INIT_ZERO; |               ClutterPoint point = CLUTTER_POINT_INIT_ZERO; | ||||||
|  |  | ||||||
|               if (_clutter_script_parse_point (script, node, &point)) |               if (_clutter_script_parse_point (script, node, &point)) | ||||||
|                 { |                 { | ||||||
| @@ -1375,9 +1374,9 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|           else if (p_type == GRAPHENE_TYPE_SIZE) |           else if (p_type == CLUTTER_TYPE_SIZE) | ||||||
|             { |             { | ||||||
|               graphene_size_t size = GRAPHENE_SIZE_INIT_ZERO; |               ClutterSize size = CLUTTER_SIZE_INIT_ZERO; | ||||||
|  |  | ||||||
|               if (_clutter_script_parse_size (script, node, &size)) |               if (_clutter_script_parse_size (script, node, &size)) | ||||||
|                 { |                 { | ||||||
| @@ -1418,15 +1417,15 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|           else if (G_VALUE_HOLDS (value, GRAPHENE_TYPE_RECT)) |           else if (G_VALUE_HOLDS (value, CLUTTER_TYPE_GEOMETRY)) | ||||||
|             { |             { | ||||||
|               graphene_rect_t rect = GRAPHENE_RECT_INIT_ZERO; |               ClutterGeometry geom = { 0, }; | ||||||
|  |  | ||||||
|               /* rect := [ (int), (int), (int), (int) ] */ |               /* geometry := [ (int), (int), (int), (int) ] */ | ||||||
|  |  | ||||||
|               if (_clutter_script_parse_rect (script, node, &rect)) |               if (_clutter_script_parse_geometry (script, node, &geom)) | ||||||
|                 { |                 { | ||||||
|                   g_value_set_boxed (value, &rect); |                   g_value_set_boxed (value, &geom); | ||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -1442,9 +1441,9 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|           else if (G_VALUE_HOLDS (value, GRAPHENE_TYPE_POINT)) |           else if (G_VALUE_HOLDS (value, CLUTTER_TYPE_POINT)) | ||||||
|             { |             { | ||||||
|               graphene_point_t point = GRAPHENE_POINT_INIT_ZERO; |               ClutterPoint point = CLUTTER_POINT_INIT_ZERO; | ||||||
|  |  | ||||||
|               if (_clutter_script_parse_point (script, node, &point)) |               if (_clutter_script_parse_point (script, node, &point)) | ||||||
|                 { |                 { | ||||||
| @@ -1452,9 +1451,9 @@ _clutter_script_parse_node (ClutterScript *script, | |||||||
|                   return TRUE; |                   return TRUE; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|           else if (G_VALUE_HOLDS (value, GRAPHENE_TYPE_SIZE)) |           else if (G_VALUE_HOLDS (value, CLUTTER_TYPE_SIZE)) | ||||||
|             { |             { | ||||||
|               graphene_size_t size = GRAPHENE_SIZE_INIT_ZERO; |               ClutterSize size = CLUTTER_SIZE_INIT_ZERO; | ||||||
|  |  | ||||||
|               if (_clutter_script_parse_size (script, node, &size)) |               if (_clutter_script_parse_size (script, node, &size)) | ||||||
|                 { |                 { | ||||||
|   | |||||||
| @@ -122,20 +122,20 @@ gboolean _clutter_script_flags_from_string (GType          gtype, | |||||||
| gboolean _clutter_script_parse_knot        (ClutterScript   *script, | gboolean _clutter_script_parse_knot        (ClutterScript   *script, | ||||||
|                                             JsonNode        *node, |                                             JsonNode        *node, | ||||||
|                                             ClutterKnot     *knot); |                                             ClutterKnot     *knot); | ||||||
| gboolean _clutter_script_parse_rect        (ClutterScript   *script, | gboolean _clutter_script_parse_geometry    (ClutterScript   *script, | ||||||
|                                             JsonNode        *node, |                                             JsonNode        *node, | ||||||
|                                             graphene_rect_t *rect); |                                             ClutterGeometry *geometry); | ||||||
| gboolean _clutter_script_parse_color       (ClutterScript   *script, | gboolean _clutter_script_parse_color       (ClutterScript   *script, | ||||||
|                                             JsonNode        *node, |                                             JsonNode        *node, | ||||||
|                                             ClutterColor    *color); |                                             ClutterColor    *color); | ||||||
| GObject *_clutter_script_parse_alpha       (ClutterScript   *script, | GObject *_clutter_script_parse_alpha       (ClutterScript   *script, | ||||||
|                                             JsonNode        *node); |                                             JsonNode        *node); | ||||||
| gboolean _clutter_script_parse_point       (ClutterScript    *script, | gboolean _clutter_script_parse_point       (ClutterScript   *script, | ||||||
|                                             JsonNode         *node, |                                             JsonNode        *node, | ||||||
|                                             graphene_point_t *point); |                                             ClutterPoint    *point); | ||||||
| gboolean _clutter_script_parse_size        (ClutterScript   *script, | gboolean _clutter_script_parse_size        (ClutterScript   *script, | ||||||
|                                             JsonNode        *node, |                                             JsonNode        *node, | ||||||
|                                             graphene_size_t *size); |                                             ClutterSize     *size); | ||||||
|  |  | ||||||
| gboolean _clutter_script_parse_translatable_string (ClutterScript *script, | gboolean _clutter_script_parse_translatable_string (ClutterScript *script, | ||||||
|                                                     JsonNode      *node, |                                                     JsonNode      *node, | ||||||
|   | |||||||
| @@ -75,6 +75,65 @@ | |||||||
|  * packing rules of Clutter still apply, and an actor cannot be packed |  * packing rules of Clutter still apply, and an actor cannot be packed | ||||||
|  * in multiple containers without unparenting it in between). |  * in multiple containers without unparenting it in between). | ||||||
|  * |  * | ||||||
|  |  * Behaviours and timelines can also be defined inside a UI definition | ||||||
|  |  * buffer: | ||||||
|  |  * | ||||||
|  |  * <informalexample><programlisting><![CDATA[ | ||||||
|  |  * { | ||||||
|  |  *   "id"          : "rotate-behaviour", | ||||||
|  |  *   "type"        : "ClutterBehaviourRotate", | ||||||
|  |  *   "angle-start" : 0.0, | ||||||
|  |  *   "angle-end"   : 360.0, | ||||||
|  |  *   "axis"        : "z-axis", | ||||||
|  |  *   "alpha"       : { | ||||||
|  |  *     "timeline" : { "duration" : 4000, "loop" : true }, | ||||||
|  |  *     "mode"     : "easeInSine" | ||||||
|  |  *   } | ||||||
|  |  * } | ||||||
|  |  * ]]></programlisting></informalexample> | ||||||
|  |  * | ||||||
|  |  * And then to apply a defined behaviour to an actor defined inside the | ||||||
|  |  * definition of an actor, the "behaviour" member can be used: | ||||||
|  |  * | ||||||
|  |  * <informalexample><programlisting><![CDATA[ | ||||||
|  |  * { | ||||||
|  |  *   "id" : "my-rotating-actor", | ||||||
|  |  *   "type" : "ClutterTexture", | ||||||
|  |  *   ... | ||||||
|  |  *   "behaviours" : [ "rotate-behaviour" ] | ||||||
|  |  * } | ||||||
|  |  * ]]></programlisting></informalexample> | ||||||
|  |  * | ||||||
|  |  * A #ClutterAlpha belonging to a #ClutterBehaviour can only be defined | ||||||
|  |  * implicitly like in the example above, or explicitly by setting the | ||||||
|  |  * "alpha" property to point to a previously defined #ClutterAlpha, e.g.: | ||||||
|  |  * | ||||||
|  |  * <informalexample><programlisting><![CDATA[ | ||||||
|  |  * { | ||||||
|  |  *   "id"          : "rotate-behaviour", | ||||||
|  |  *   "type"        : "ClutterBehaviourRotate", | ||||||
|  |  *   "angle-start" : 0.0, | ||||||
|  |  *   "angle-end"   : 360.0, | ||||||
|  |  *   "axis"        : "z-axis", | ||||||
|  |  *   "alpha"       : { | ||||||
|  |  *     "id"       : "rotate-alpha", | ||||||
|  |  *     "type"     : "ClutterAlpha", | ||||||
|  |  *     "timeline" : { | ||||||
|  |  *       "id"       : "rotate-timeline", | ||||||
|  |  *       "type      : "ClutterTimeline", | ||||||
|  |  *       "duration" : 4000, | ||||||
|  |  *       "loop"     : true | ||||||
|  |  *     }, | ||||||
|  |  *     "function" : "custom_sine_alpha" | ||||||
|  |  *   } | ||||||
|  |  * } | ||||||
|  |  * ]]></programlisting></informalexample> | ||||||
|  |  * | ||||||
|  |  * Implicitely defined #ClutterAlpha<!-- -->s and #ClutterTimeline<!-- -->s | ||||||
|  |  * can omit the `id`, as well as the `type` members, but will not be available | ||||||
|  |  * using clutter_script_get_object() (they can, however, be extracted using the | ||||||
|  |  * #ClutterBehaviour and #ClutterAlpha API respectively). | ||||||
|  |  * | ||||||
|  * Signal handlers can be defined inside a Clutter UI definition file and |  * Signal handlers can be defined inside a Clutter UI definition file and | ||||||
|  * then autoconnected to their respective signals using the |  * then autoconnected to their respective signals using the | ||||||
|  * clutter_script_connect_signals() function: |  * clutter_script_connect_signals() function: | ||||||
| @@ -151,6 +210,7 @@ | |||||||
|  *                   function |  *                   function | ||||||
|  *   "type_func"  := the GType function name, for non-standard classes |  *   "type_func"  := the GType function name, for non-standard classes | ||||||
|  *   "children"   := an array of names or objects to add as children |  *   "children"   := an array of names or objects to add as children | ||||||
|  |  *   "behaviours" := an array of names or objects to apply to an actor | ||||||
|  *   "signals"    := an array of signal definitions to connect to an object |  *   "signals"    := an array of signal definitions to connect to an object | ||||||
|  *   "is-default" := a boolean flag used when defining the #ClutterStage; |  *   "is-default" := a boolean flag used when defining the #ClutterStage; | ||||||
|  *                   if set to "true" the default stage will be used instead |  *                   if set to "true" the default stage will be used instead | ||||||
| @@ -175,6 +235,7 @@ | |||||||
|  |  | ||||||
| #include "clutter-actor.h" | #include "clutter-actor.h" | ||||||
| #include "clutter-stage.h" | #include "clutter-stage.h" | ||||||
|  | #include "clutter-texture.h" | ||||||
|  |  | ||||||
| #include "clutter-script.h" | #include "clutter-script.h" | ||||||
| #include "clutter-script-private.h" | #include "clutter-script-private.h" | ||||||
| @@ -185,6 +246,7 @@ | |||||||
| #include "clutter-debug.h" | #include "clutter-debug.h" | ||||||
|  |  | ||||||
| #include "deprecated/clutter-alpha.h" | #include "deprecated/clutter-alpha.h" | ||||||
|  | #include "deprecated/clutter-behaviour.h" | ||||||
| #include "deprecated/clutter-container.h" | #include "deprecated/clutter-container.h" | ||||||
| #include "deprecated/clutter-state.h" | #include "deprecated/clutter-state.h" | ||||||
|  |  | ||||||
| @@ -462,10 +524,11 @@ clutter_script_init (ClutterScript *script) | |||||||
| /** | /** | ||||||
|  * clutter_script_new: |  * clutter_script_new: | ||||||
|  * |  * | ||||||
|  * Creates a new #ClutterScript instance. #ClutterScript can be used to load |  * Creates a new #ClutterScript instance. #ClutterScript can be used | ||||||
|  * objects definitions for scenegraph elements, like actors, or behavioural |  * to load objects definitions for scenegraph elements, like actors, | ||||||
|  * elements, like timelines. The definitions must be encoded using the |  * or behavioural elements, like behaviours and timelines. The | ||||||
|  * JavaScript Object Notation (JSON) language. |  * definitions must be encoded using the JavaScript Object Notation (JSON) | ||||||
|  |  * language. | ||||||
|  * |  * | ||||||
|  * Return value: the newly created #ClutterScript instance. Use |  * Return value: the newly created #ClutterScript instance. Use | ||||||
|  *   g_object_unref() when done. |  *   g_object_unref() when done. | ||||||
| @@ -800,7 +863,9 @@ construct_each_objects (gpointer key, | |||||||
|       if (oinfo->object == NULL) |       if (oinfo->object == NULL) | ||||||
|         _clutter_script_construct_object (script, oinfo); |         _clutter_script_construct_object (script, oinfo); | ||||||
|  |  | ||||||
|       /* this will take care of setting up properties and adding children */ |       /* this will take care of setting up properties, | ||||||
|  |        * adding children and applying behaviours | ||||||
|  |        */ | ||||||
|       _clutter_script_apply_properties (script, oinfo); |       _clutter_script_apply_properties (script, oinfo); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ | |||||||
|  |  | ||||||
| struct _ClutterScrollActorPrivate | struct _ClutterScrollActorPrivate | ||||||
| { | { | ||||||
|   graphene_point_t scroll_to; |   ClutterPoint scroll_to; | ||||||
|  |  | ||||||
|   ClutterScrollMode scroll_mode; |   ClutterScrollMode scroll_mode; | ||||||
|  |  | ||||||
| @@ -94,19 +94,19 @@ G_DEFINE_TYPE_WITH_CODE (ClutterScrollActor, clutter_scroll_actor, CLUTTER_TYPE_ | |||||||
|                                                 clutter_animatable_iface_init)) |                                                 clutter_animatable_iface_init)) | ||||||
|  |  | ||||||
| static void | static void | ||||||
| clutter_scroll_actor_set_scroll_to_internal (ClutterScrollActor     *self, | clutter_scroll_actor_set_scroll_to_internal (ClutterScrollActor *self, | ||||||
|                                              const graphene_point_t *point) |                                              const ClutterPoint *point) | ||||||
| { | { | ||||||
|   ClutterScrollActorPrivate *priv = self->priv; |   ClutterScrollActorPrivate *priv = self->priv; | ||||||
|   ClutterActor *actor = CLUTTER_ACTOR (self); |   ClutterActor *actor = CLUTTER_ACTOR (self); | ||||||
|   ClutterMatrix m = CLUTTER_MATRIX_INIT_IDENTITY; |   ClutterMatrix m = CLUTTER_MATRIX_INIT_IDENTITY; | ||||||
|   float dx, dy; |   float dx, dy; | ||||||
|  |  | ||||||
|   if (graphene_point_equal (&priv->scroll_to, point)) |   if (clutter_point_equals (&priv->scroll_to, point)) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   if (point == NULL) |   if (point == NULL) | ||||||
|     graphene_point_init (&priv->scroll_to, 0.f, 0.f); |     clutter_point_init (&priv->scroll_to, 0.f, 0.f); | ||||||
|   else |   else | ||||||
|     priv->scroll_to = *point; |     priv->scroll_to = *point; | ||||||
|  |  | ||||||
| @@ -216,7 +216,7 @@ clutter_scroll_actor_set_final_state (ClutterAnimatable *animatable, | |||||||
|   if (strcmp (property_name, "scroll-to") == 0) |   if (strcmp (property_name, "scroll-to") == 0) | ||||||
|     { |     { | ||||||
|       ClutterScrollActor *self = CLUTTER_SCROLL_ACTOR (animatable); |       ClutterScrollActor *self = CLUTTER_SCROLL_ACTOR (animatable); | ||||||
|       const graphene_point_t *point = g_value_get_boxed (value); |       const ClutterPoint *point = g_value_get_boxed (value); | ||||||
|  |  | ||||||
|       clutter_scroll_actor_set_scroll_to_internal (self, point); |       clutter_scroll_actor_set_scroll_to_internal (self, point); | ||||||
|     } |     } | ||||||
| @@ -248,7 +248,7 @@ clutter_animatable_iface_init (ClutterAnimatableInterface *iface) | |||||||
|     g_param_spec_boxed ("scroll-to", |     g_param_spec_boxed ("scroll-to", | ||||||
|                         "Scroll To", |                         "Scroll To", | ||||||
|                         "The point to scroll the actor to", |                         "The point to scroll the actor to", | ||||||
|                         GRAPHENE_TYPE_POINT, |                         CLUTTER_TYPE_POINT, | ||||||
|                         G_PARAM_READWRITE | |                         G_PARAM_READWRITE | | ||||||
|                         G_PARAM_STATIC_STRINGS | |                         G_PARAM_STATIC_STRINGS | | ||||||
|                         CLUTTER_PARAM_ANIMATABLE); |                         CLUTTER_PARAM_ANIMATABLE); | ||||||
| @@ -322,7 +322,7 @@ clutter_scroll_actor_get_scroll_mode (ClutterScrollActor *actor) | |||||||
| /** | /** | ||||||
|  * clutter_scroll_actor_scroll_to_point: |  * clutter_scroll_actor_scroll_to_point: | ||||||
|  * @actor: a #ClutterScrollActor |  * @actor: a #ClutterScrollActor | ||||||
|  * @point: a #graphene_point_t |  * @point: a #ClutterPoint | ||||||
|  * |  * | ||||||
|  * Scrolls the contents of @actor so that @point is the new origin |  * Scrolls the contents of @actor so that @point is the new origin | ||||||
|  * of the visible area. |  * of the visible area. | ||||||
| @@ -335,8 +335,8 @@ clutter_scroll_actor_get_scroll_mode (ClutterScrollActor *actor) | |||||||
|  * Since: 1.12 |  * Since: 1.12 | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_scroll_actor_scroll_to_point (ClutterScrollActor     *actor, | clutter_scroll_actor_scroll_to_point (ClutterScrollActor *actor, | ||||||
|                                       const graphene_point_t *point) |                                       const ClutterPoint *point) | ||||||
| { | { | ||||||
|   ClutterScrollActorPrivate *priv; |   ClutterScrollActorPrivate *priv; | ||||||
|   const ClutterAnimationInfo *info; |   const ClutterAnimationInfo *info; | ||||||
| @@ -390,10 +390,10 @@ clutter_scroll_actor_scroll_to_point (ClutterScrollActor     *actor, | |||||||
|  |  | ||||||
|   /* if a transition already exist, update its bounds */ |   /* if a transition already exist, update its bounds */ | ||||||
|   clutter_transition_set_from (priv->transition, |   clutter_transition_set_from (priv->transition, | ||||||
|                                GRAPHENE_TYPE_POINT, |                                CLUTTER_TYPE_POINT, | ||||||
|                                &priv->scroll_to); |                                &priv->scroll_to); | ||||||
|   clutter_transition_set_to (priv->transition, |   clutter_transition_set_to (priv->transition, | ||||||
|                              GRAPHENE_TYPE_POINT, |                              CLUTTER_TYPE_POINT, | ||||||
|                              point); |                              point); | ||||||
|  |  | ||||||
|   /* always use the current easing state */ |   /* always use the current easing state */ | ||||||
| @@ -417,10 +417,10 @@ clutter_scroll_actor_scroll_to_point (ClutterScrollActor     *actor, | |||||||
|  * Since: 1.12 |  * Since: 1.12 | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| clutter_scroll_actor_scroll_to_rect (ClutterScrollActor    *actor, | clutter_scroll_actor_scroll_to_rect (ClutterScrollActor *actor, | ||||||
|                                      const graphene_rect_t *rect) |                                      const ClutterRect  *rect) | ||||||
| { | { | ||||||
|   graphene_rect_t n_rect; |   ClutterRect n_rect; | ||||||
|  |  | ||||||
|   g_return_if_fail (CLUTTER_IS_SCROLL_ACTOR (actor)); |   g_return_if_fail (CLUTTER_IS_SCROLL_ACTOR (actor)); | ||||||
|   g_return_if_fail (rect != NULL); |   g_return_if_fail (rect != NULL); | ||||||
| @@ -428,7 +428,7 @@ clutter_scroll_actor_scroll_to_rect (ClutterScrollActor    *actor, | |||||||
|   n_rect = *rect; |   n_rect = *rect; | ||||||
|  |  | ||||||
|   /* normalize, so that we have a valid origin */ |   /* normalize, so that we have a valid origin */ | ||||||
|   graphene_rect_normalize (&n_rect); |   clutter_rect_normalize (&n_rect); | ||||||
|  |  | ||||||
|   clutter_scroll_actor_scroll_to_point (actor, &n_rect.origin); |   clutter_scroll_actor_scroll_to_point (actor, &n_rect.origin); | ||||||
| } | } | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user