diff --git a/.gitignore b/.gitignore
index db70c63b7..616f305f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@ compile
*.lo
*.la
*.gcov
+.dirstamp
README
stamp-enum-types
stamp-marshal
@@ -23,12 +24,16 @@ stamp-marshal
/clutter/gcov-report.txt
/clutter/clutter-json.h
/clutter/cex100/clutter-cex100.h
+/clutter/*.log
+/clutter/*.trs
/clutter-lcov.info
/clutter-lcov
-/build/autotools/*.m4
!/build/autotools/introspection.m4
!/build/autotools/as-linguas.m4
!/build/autotools/as-compiler-flag.m4
+!/build/autotools/glibtests.m4
+/build/autotools/*.m4
+/build/test-driver
*.gir
*.typelib
*.gcda
diff --git a/Makefile.am b/Makefile.am
index 1c37c564f..8743964dd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,11 +2,7 @@ include $(top_srcdir)/build/autotools/Makefile.am.silent
NULL =
-SUBDIRS = clutter doc po build
-
-if BUILD_TESTS
-SUBDIRS += tests
-endif
+SUBDIRS = build clutter tests doc po
if BUILD_EXAMPLES
SUBDIRS += examples
diff --git a/NEWS b/NEWS
index fa484a6ee..f3a8490bd 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,646 @@
+Clutter 1.21.2 2014-12-15
+===============================================================================
+
+ • List of changes since Clutter 1.20.0
+
+ - Improve input device handling
+ Both on the evdev input backend, and the XInput2 backend for X11.
+
+ - Allow content implementations to drive actors preferred size
+ If a ClutterActor is only used to paint a ClutterContent implementation,
+ it should be possible to allow the actor to have the same preferred size
+ of its content. We use a ClutterRequestMode to specify this behaviour.
+
+ - Documentation fixes
+
+ • List of bugs fixed since Clutter 1.20.0
+
+ #738520 - evdev: Flush event queue before removing device(s)
+ #739050 - Fix some weird graphical glitches in RTL
+ #741350 - Improve touchpad detection on libinput
+ #740997 - Easing modes are not used when computing the value of a
+ KeyframeTransition
+ #676326 - actor: Add a :request-content-size property
+ #711182 - Incorrect drawing behaviour with clutter content centered
+ #709252 - ensure that all deprecated symbols are correctly annotated for
+ gtk-doc
+ #669743 - ObjectInfo property is_actor not correctly set when updating
+ existing actor using ClutterScriptParser
+ #719962 - clutter/osx: add clutter_osx_disable_event_retrieval
+ #681300 - Miss CLUTTER_INPUT_BACKEND description in doc
+ #729462 - DeviceManagerXi2: Update cached core pointer in getter if NULL
+
+Many thanks to:
+
+ Carlos Garnacho, Jasper St. Pierre, Jonas Ådahl, Rico Tzschichholz,
+ Samuel Degrande, Sjoerd Simons, cee1.
+
+Clutter 1.20.0 2014-09-22
+===============================================================================
+
+ • List of changes since Clutter 1.19.10
+
+ - Translations updated
+ Greek
+
+ • List of bugs fixed since Clutter 1.19.10
+
+ - #736826 - clutter_text_set_font_name invalid example using "pt"
+
+Clutter 1.19.10 2014-09-17
+===============================================================================
+
+ • List of changes since Clutter 1.19.8
+
+ - Honour the desktop window scaling factor in the GDK backend
+ The GDK backend will become the default backend in the next cycle, so we
+ need to improve its functionality out of the box.
+
+ - Ensure accessibility support is correctly initialized
+ We need to make sure that the accessibility implementation that Clutter
+ relies on is initialized the way we expect it to.
+
+ - Improve default paint volume computation
+ We should reduce the cases that lead to an invalid paint volume.
+
+ - Improve input handling on Wayland and X11
+
+ - Translations updates
+ Hebrew
+
+ • List of bugs fixed since Clutter 1.19.8
+
+ #736682 - clutter-actor: Don't ask children that have no allocation for
+ a paint volume
+ #736413 - USB mouse doesn't register slow movements to the right or down
+ in Gnome on Wayland
+ #734480 - Handle CLUTTER_SCALE envvar
+ #734115 - Deprecated property crashes /actor/transforms/anchor-point
+ #735388 - xi2 device manager gets a "0" client pointer if queried very
+ early in app lifetime
+ #735244 - shell forgets the DPI of screen sometimes
+
+Many thanks to:
+
+ Bastien Nocera, Adel Gadllah, Alejandro Piñeiro, Carlos Garnacho, Jonas
+ Ådahl, Yosef Or Boczko
+
+Clutter 1.19.8 2014-08-21
+===============================================================================
+
+ • List of changes since Clutter 1.19.6
+
+ - Improve the GDK backend
+ The GDK backend is now reporting touch events, as well as supporting
+ foreign Wayland surfaces for the Stage window. The goal is to make the
+ GDK backend the preferred one in the next development cycle.
+
+ - Fix drawing transparent Canvas content inside transparent actors
+
+ - Translation updates
+ German, Assamese
+
+ • List of bugs fixed since Clutter 1.19.6
+
+ #733202 - evdev: Add API to set the xkb layout index
+ #734934 - Add touch event translation code to GDK backend
+ #734935 - Add support for wayland foreign windows in GDK backend
+ #734761 - Memory leak in implicit transition
+
+Many thanks to:
+
+ Lionel Landwerlin Christian Kirbach, Rui Matos, Tom Beckmann, ngoswami,
+ Sunjin Yang
+
+Clutter 1.19.6 2014-07-24
+===============================================================================
+
+ • List of changes since Clutter 1.19.4
+
+ - Add a signal for the end of the frame on ClutterStage
+ The ::after-paint signal is useful to execute custom code after all the
+ painting on a specific ClutterStage has been performend, but before the
+ frame contents have been presented on the screen.
+
+ - Improvements in the reliability of the evdev input backend
+
+ - Improvements in the GestureAction implementation
+
+ • List of bugs fixed since Clutter 1.19.4
+
+ #732342 - ClutterStage: Add an ::after-paint signal
+ #732907 - Allow for calling clutter_gesture_action_cancel() within the
+ ::gesture-end handler
+ #733062 - Evdev: set button state in input devices
+ #733300 - ClutterAnimation: fix memory leak
+ #733561 - Make a GType for ClutterEventSequence
+ #733562 - evdev: update xkb_state when resuming input
+ #733560 - Touch events trigger enter events on press, but no leave events
+ on release
+
+Many thanks to:
+
+ Carlos Garnacho, Giovanni Campagna, Owen W. Taylor
+
+Clutter 1.19.4 2014-06-25
+===============================================================================
+
+ • List of changes since Clutter 1.19.2
+
+ - Depend on libinput 0.4
+ The evdev input backend now depends on libinput 0.4.0.
+
+ • List of bugs fixed since Clutter 1.19.2
+
+ #731268 - Events being clamped to the pre-fullscreen window size when
+ stage goes fullscreen
+ #731178 - evdev: Used floating point instead of fixed point numbers
+ #731254 - evdev: Follow libinput enum rename
+ #731536 - evdev: Add clutter_evdev_warp_pointer
+ #732234 - Touch events may leave a stage-less device, or happen on one
+ #732235 - clutter gesture actions may mistakenly handle enter/leave events
+
+Many thanks to:
+
+ Jonas Ådahl, Chun-wei Fan, Gustavo Noronha Silva, Jasper St. Pierre,
+ Carlos Garnacho.
+
+Clutter 1.19.2 2014-05-28
+===============================================================================
+
+ • List of changes since Clutter 1.18
+
+ - Improve event handling on evdev input backend
+ Clutter now allows writing applications and compositors that can respond
+ to eventts from touch devices, as well as reporting correct smooth
+ scrolling deltas.
+
+ • List of bugs fixed since Clutter 1.18
+
+ #723560 - wayland: Generate better smooth scroll deltas
+ #730577 - Do not compress touch events so eagerly
+ #728968 - evdev: Implement touch support
+ #728967 - evdev: Add libinput-specific helpers
+ #730215 - Add a way to pause the ClutterMasterClock
+
+Many thanks to:
+
+ Carlos Garnacho, Jasper St. Pierre, Jonas Ådahl.
+
+Clutter 1.18.2 2014-04-14
+===============================================================================
+
+ • List of changes since Clutter 1.18.0
+
+ - Fix the list of dependencies
+ Clutter 1.18 depends on Cogl 1.17.5 when building the EGL/KMS backend.
+
+ - Fixes for the Visual Studio build files
+ Use the new symbol visibility annotations when building with MSVC.
+
+ - Fix event handling on Windows
+ An optimization led to a crash on the Windows backend when delivering
+ events without an associated ClutterStage.
+
+ - Ensure that set_child_above/below work on the Stage
+ ClutterStage should respect the paint order when using the Actor API.
+
+ - Skip conformance test suite on X11 when DISPLAY is unset
+ Instead of bailing out when initializing the test suite we should just
+ tell the test suite API to skip the units. This allows the TAP driver
+ to catch the skipped tests and avoid warnings.
+
+ - Translation updates
+ Danish, French, Indonesian, Greek.
+
+ • List of bugs fixed since Clutter 1.18.0
+
+ #728177 - Cannot collect coverage with lcov 1.10
+ #727020 - wayland: Add missing CLUTTER_AVAILABLE annotations
+ #711645 - clutter_actor_set_child_above_sibling() not working in
+ ClutterStage
+ #726762 - Fix Import of Clutter Version Constants
+ #726703 - build error: undefined reference to
+ `cogl_kms_renderer_set_kms_fd'
+
+Many thanks to:
+
+ Chun-wei Fan, Adel Gadllah, Andika Triwidada, Ask H. Larsen, David Warman,
+ Emilio Pozuelo Monfort, Vadim Rutkovsky, maria thukididu, teuf.
+
+Clutter 1.18.0 2014-03-18
+===============================================================================
+
+ • List of changes since Clutter 1.17.6
+
+ - Update build environment for Visual Studio
+
+ - Improve the API for implementing Wayland compositors
+ Allow integrating with logind and KMS; provide clipped redraws on both
+ Wayland clients, and direct KMS.
+
+ - Port the documentation to MarkDown
+
+ - Use symbol annotations to ensure the public ABI
+
+ - Translations updates
+ Korean, Traditional Chinese (Hong Kong and Taiwan), Chinese, Portuguese,
+ Latvian, Russian, French.
+
+ • List of bugs fixed since Clutter 1.17.6
+
+ #725716 - Fix build of clutter-test-utils.c on Windows
+ #725873 - Fix the Win32 backend for newer Visual Studio Versions
+ #725722 - Grid layout actor width/height swapped
+ #726199 - evdev changes needed for logind integration work
+ #726341 - eglnative: Add clutter-stage-window implementation
+ #726315 - clutter-stage-wayland: Enable clipped redraws
+ #726313 - stage-cogl: Fix feature check in clutter_stage_cogl_redraw
+ #726198 - egl: Add a way to set the KMS FD
+ #708781 - wayland: Keep track of button modifier state
+ #711857 - Avoid needless event copies when queueing from a backend
+ to a stage
+
+Many thanks to:
+
+ Jasper St. Pierre, Chun-wei Fan, Adel Gadllah, Bastian Winkler, Changwoo Ryu,
+ Chao-Hsiung Liao, Duarte Loreto, Jonas Ådahl, Rui Matos, Rūdolfs Mazurs,
+ Wylmer Wang, Yuri Myasoedov, teuf.
+
+Clutter 1.17.6 2014-03-03
+===============================================================================
+
+ • List of changes since Clutter 1.17.4
+
+ - Use libinput instead of libevdev
+ The evdev input backend is now based on libinput instead of directly
+ using the evdev API; this allows for shared input behaviour with
+ different toolkits.
+
+ - Improvements in the X11 input handling
+ Remove the chance of input devices going out of sync; avoid excessive
+ round trips when asking for the client pointer; retrieve the text
+ direction for the current keymap.
+
+ - Improve RTL handling in ClutterText
+ Try to use the correct text direction based on the contents, keymap,
+ and actor's direction instead of just the latter.
+
+ - Translation updates
+ Brazilian Portuguese, Lithuanian, Czech, Hungarian, Serbian, Polish,
+ Galician.
+
+ • List of bugs fixed
+
+ #
+ #724788 - stage-cogl: Fix buffer_age code path
+ #724971 - Avoid stale ClutterInputDevice pointers in the device list
+ #720566 - [RFC] evdev: Port evdev input backend to libinput
+ #725102 - Patches to rework the evdev backend's keymap handling
+ #725103 - evdev: Set the initial core pointer coordinates to a sane value
+ #705779 - The text in the search-entry isn't aligned to right in RTL text
+ #725561 - DeviceManagerXi2: Cache the client pointer
+
+Many thanks to:
+
+ Rui Matos, Adel Gadllah, Jasper St. Pierre, Aurimas Černius, Balázs Úr,
+ Carlos Garnacho, Fran Diéguez, Jonas Ådahl, Marek Černocký, Piotr Drąg,
+ Rafael Ferreira, Мирослав Николић.
+
+Clutter 1.17.4 2014-02-19
+===============================================================================
+
+ • List of changes since Clutter 1.17.2
+
+ - Add per-gesture thresholds
+ It is possible to give horizontal and vertical thresholds to each
+ ClutterGestureAction instance; if unset, the default is to use the
+ dnd threshold from ClutterSettings.
+
+ - Allow negative factors in ClutterActor scale properties
+ The functions already accepted these values, but the properties did not.
+
+ - Depend on Cogl 1.17.3
+
+ - Translation updates
+ Spanish, Hebrew, Czech, Brazilian Portuguese, Traditional Chinese (Hong
+ Kong and Taiwan), Serbian, Galician, Indonesian, Italian, Aragonese,
+ Norwegian bokmål, Ukranian.
+
+ • List of bugs fixed since Clutter 1.17.2
+
+ #711540 - Fix bad logic in checks
+ #662818 - Fix documentation of 'hsla()' parsing
+ #710232 - Mention that ClutterTransition is abstract in the documentation
+ #706311 - Extend :scale-[xyz] factors in the negative range
+ #724242 - Add per-action thresholds
+
+Many thanks to:
+
+ Bastien Nocera, Daniel Mustieles, Kjartan Maraas, Milo Casagrande, Adel
+ Gadllah, Andika Triwidada, Chao-Hsiung Liao, Daniel Korostil, Fran Diéguez,
+ Jorge Pérez Pérez, Marek Černocký, Rafael Ferreira, Yosef Or Boczko,
+ Мирослав Николић
+
+
+Clutter 1.17.2 2014-01-22
+===============================================================================
+
+ • List of changes since Clutter 1.16.0
+
+ - Allow ClutterScript definitions for Interval and Transition classes
+ ClutterInterval instances can be defined, and used, in ClutterScript
+ UI definition files.
+
+ - Add generic API for event filtering
+ Event filtering is meant to be used to intercept events before they
+ reach the scene graph.
+
+ - Deprecated ClutterTableLayout
+ The Table layout manager is fully superceded by ClutterGridLayout, which
+ supports dynamic grid layouts, RTL flipping, expansion and alignment of
+ children using the ClutterActor flags, and implicit animations using the
+ actor's easing state.
+
+ - Allow GestureAction subclasses to change the trigger edge
+ GestureAction can emit the ::gesture-begin signal depending on the
+ value of the :threshold-trigger-edge property. Using this property it
+ is possible to specify whether the gesture begins after a certain
+ threshold is passed; before a certain threshold is passed; or
+ immediately.
+
+ - Use the window scaling factor when creating Cairo surfaces
+ ClutterCanvas will use the window scaling factor setting when creating
+ Cairo surfaces; it is also possible to set the scaling factor on a
+ per-instance basis, for future compatibility.
+
+ - Detect window scaling factor automatically on X11
+ Use the XSETTING exposed by the environment to change the window
+ scaling factor.
+
+ - Support ClutterStage cursor visibility in the Wayland backend
+ It is possible to show and hide the cursor on the Stage on Wayland.
+
+ - Translations updates
+ Czech, Greek, Hebrew, Chinese simplified, Brazilian Portuguese,
+ Galician, Italian, Spanish.
+
+ • List of bugs fixed since Clutter 1.16.0
+
+ 705915 - Support high dpi displays
+ 722322 - check coordinate validity in do_pick()
+ 722220 - Incorrect string reported in accessible text-changed events
+ when text is removed
+ 722188 - atk_text_get_n_selections() should return 0 when no text is
+ selected
+ 710229 - Restore initial ClutterGestureAction behavior
+ 710227 - ClutterGestureAction memory corruption
+ 719901 - ClutterStageCogl: Ignore a clip the size of the stage
+ 719900 - ClutterStageCogl: Clip in the right coordinate system
+ 719747 - ClutterStage: Don't add empty actors to the stage clip
+ 719716 - Make test-clip friendly for people with only one mouse button
+ 719563 - input-device: Guard against double free
+ 719368 - Don't queue redraws when reallocating actor that haven't moved
+ 719367 - Bind constraints: Don't force redraws on source relayout
+ 712816 - device-manager-evdev: Stop using deprecated libevdev API
+ 712812 - Crash and memory leak fixes for device removals
+ 712563 - Fixes for cogl journal usage when picking
+ 707560 - Event filter
+ 712322 - input-device-xi2: Calculate the correct state for button events
+ 707071 - Remove use of XFixes for showing/hiding the cursor
+ 709762 - ClutterDragAction can mix pointer and touch events
+ 709590 - wayland: Implement support for 'cursor-visible' stage property
+
+Many thanks to:
+
+ Jasper St. Pierre, Rui Matos, Owen W. Taylor, Alejandro Piñeiro, Lionel
+ Landwerlin, Bastian Winkler, Neil Roberts, Rafael Ferreira, Chun-wei Fan,
+ Daniel Mustieles, Dimitris Spingos, Enrico Nicoletto, Florian Müllner, Fran
+ Diéguez, Jonas Ådahl, Marek Černocký, Milo Casagrande, Piotr Drąg, Robert
+ Bragg, Sphinx Jiang, Yosef Or Boczko
+
+Clutter 1.16.0 2013-09-23
+===============================================================================
+
+ • List of changes since Clutter 1.15.96
+
+ - Fix a division by zero in the X11 backend
+
+ - Translation updates
+ Portuguese, Danish
+
+ • List of bugs fixed since Clutter 1.15.96
+
+ #707033 - Hidden division by zero in examples/basic-actor.c
+
+Many thanks to:
+
+ Duarte Loreto, Kenneth Nielsen.
+
+Clutter 1.15.96 2013-09-20
+===============================================================================
+
+ • List of changes since Clutter 1.15.94
+
+ - Fix a crasher bug happening on X11
+ Some events coming from the system would result in a segmentation fault.
+
+ • List of bugs fixed since Clutter 1.15.94
+
+ #708439 - clutter-xi2: don't access the stage if we don't have one
+
+Clutter 1.15.94 2013-09-19
+===============================================================================
+
+ • List of changes since Clutter 1.15.92
+
+ - Improve the evdev input backend
+ The evdev input backend is used when writing applications and compositors
+ that directly drive the frame buffer on Linux. By ensuring that the evdev
+ input backend works correctly it is possible to manage input sources like
+ pointers, keyboards, and touch devices using the raw evdev device nodes.
+ Clutter now depends on libevdev in order to poll the evdev interfaces.
+
+ - Allow scaling windowing surfaces
+ The main part of the work to support high resolution displays is to make
+ sure that windowing surfaces can be created with a scaling factor, while
+ trasparently handling the new size from an application's perspective. The
+ scaling factor is currently set manually, but it in the near future it will
+ be automatically set by the environment.
+
+ - Translation updates
+ Serbian, Aragonese, Russian, Latvian, Belarusian, Assamese, Indonesian,
+ German, Hebrew.
+
+ • List of bugs fixed since Clutter 1.15.92
+
+ #706652 - evdev: add callback to constrain the pointer position
+ #706543 - evdev: use monotonic times for the events
+ #706494 - an assortment of wayland and evdev related changes
+ #707377 - wayland: Check for NULL surface on pointer leave events
+ #707808 - box-layout: Fix floating point truncation when calculating a
+ child's size
+ #707774 - ClutterClickAction can trigger a crash if disposes at
+ inappropriate time
+ #707869 - Add API to restrict the windowing backend to load
+ #708079 - Clutter clutter-1.16 branch fails to commit after commit
+ da3e6988
+ #708383 - ClutterEvent: preserve extended state across
+ clutter_event_copy()
+
+Many thanks to:
+
+ Giovanni Campagna, Emmanuele Bassi, Lionel Landwerlin, Andika Triwidada,
+ Chun-wei Fan, Florian Müllner, Ihar Hrachyshka, Jasper St. Pierre, Jorge
+ Pérez Pérez, Nilamdyuti Goswami, Rob Bradford, Rūdolfs Mazurs, Yuri
+ Myasoedov, Мирослав Николић.
+
+Clutter 1.15.92 2013-09-02
+===============================================================================
+
+ • List of changes since Clutter 1.15.90
+
+ - Fix regression in BoxLayout for RTL text direction
+
+ - Update Visual Studio build files
+
+ - Translation updates
+ Polish, French, Slovak, Lithuanian, Catalan
+
+ • List of bugs fixed since Clutter 1.15.90
+
+ #706450 - box-layout: Fix RTL layout swapping with non-zero container
+ offsets
+
+Many thanks to:
+
+ Chun-wei Fan, Jasper St. Pierre, Alexandre Franke, Aurimas Černius, Gil
+ Forcada, Ján Kyselica, Piotr Drąg
+
+Clutter 1.15.90 2013-08-19
+===============================================================================
+
+ • List of changes since Clutter 1.15.2
+
+ - Update the Wayland backend
+ Use the new 1.2 behaviour and API, and improve the coverage of windowing
+ system features, alongside a slew of bugs.
+
+ - Drop support for XInput 1.x
+ The XInput 1.x extension was never really used after the introduction of
+ the 2.x version.
+
+ - Fix event and device handling when using evdev
+
+ - Allow using ClutterContent on a ClutterStage
+
+ - Fixes for the Windows backend
+ The build script has also been updated with the required dependencies.
+
+ - Documentation fixes
+
+ - Translations updated
+
+ • List of bugs fixed since Clutter 1.15.2
+
+ #703809 - Some LayoutManager fixes
+ #704625 - Cannot assign a ClutterContent to a stage
+ #698836 - Add interactive test for ClutterZoomAction/ClutterRotateAction
+ #705739 - Crash when removing a ClutterActor from a scene at the end of
+ an animation
+ #705710 - evdev: fix X11 to evdev keycode translation
+ #704269 - evdev: add a way for applications to tweak how devices are
+ opened
+ #704457 - Setting the size of the stage causes it to not be shown on
+ wayland
+ #699578 - Implement foreign surface support for stages
+ #704279 - wayland: Add API for disabling the event dispatching
+ #703336 - clutter-actor: Make clutter_actor_has_mapped_clones public
+ #701356 - Update the windows backend to work with latest Cogl
+ #703969 - Select for events with XIAllMasterDevices under XI2
+ #703878 - wayland: Don't pass the shell and compositor down to Cogl
+ #703608 - Update ClutterWaylandSurface to use a resource instead of
+ wl_buffer
+ #703877 - Bump the required Cogl version to 1.15.1
+
+Many thanks to:
+
+ Giovanni Campagna, Neil Roberts, Florian Müllner, Jasper St. Pierre, Rob
+ Bradford, Matej Urbančič, Adel Gadllah, Chao-Hsiung Liao, Chris Cummins,
+ Chun-wei Fan, Lionel Landwerlin, Rafael Ferreira
+
+Clutter 1.15.2 2013-07-10
+===============================================================================
+
+ • List of changes since Clutter 1.14
+
+ - Improve state tracking and short circuiting
+ ClutterActor now tracks clones and unmapped actors more aggressively, to
+ reduce the amount of work necessary when updating the scene graph.
+
+ - Wayland backend improvements and updates
+
+ - Documentation updates
+ Clean up the API reference for readability, and improve the comments in
+ the inlined example code. Also, include the cookbook in the distribution
+ tarball.
+
+ - Allow installation of conformance tests
+ Clutter now allows installing its conformance tests into a well-known
+ location; this allows running the conformance test suite against an
+ installed version of Clutter.
+
+ - Add ClutterFlowLayout:snap-to-grid
+ ClutterFlowLayout users can now ask the layout manager to not align the
+ actors to a grid.
+
+ - Improve gesture recognizers
+
+ - Deprecations
+ ClutterText::cursor-event has been replaced by ClutterText::cursor-changed;
+ ClutterGeometry has been deprecated; ClutterActor::realize and ::unrealize,
+ along with their virtual functions, have been deprecated.
+
+ • List of bugs fixed since Clutter 1.14
+
+ #682789 - Deprecate ClutterGeometry (and remove it for 2.0)
+ #698668 - A few improvements to ClutterGestureAction
+ #698669 - Fix "trigger edge after" behavior with more than 1 touch point
+ #698671 - Refactor event handling code in ClutterGestureAction
+ #698674 - Improve ClutterZoomAction behavior
+ #698783 - Add a paint callback for ClutterStage
+ #698766 - Implicit transitions queued on invisible actors should be ignored
+ #648873 - Feature request: ClutterFlowLayout not aligning on a grid
+ #699675 - Offscreen effects allocating too much memory
+ #692706 - Frequent crash in cally_stage_notify_key_focus_cb
+ #701974 - x11: trap errors when calling XIQueryDevice
+ #696813 - clutter_actor_set_child_above/below_sibling leaking a reference
+ on the actor
+ #701208 - deform-effect: correctly set the cull-face mode of the back
+ pipeline
+ #700980 - Tap action now longer works
+ #702016 - ClutterText reset font when dpi changes and font was set using
+ a pango description
+ #702610 - text: relayout on cursor visibility change
+ #702941 - Install conformance tests
+ RH#975171 - gnome-shell: screen magnifier can cause crash with Cogl error
+ #702202 - conform tests hang on wayland
+ #703188 - Stage doesn't appear when running under Wayland
+ #703476 - tests/actor-offscreen-redirect: Fix race condition
+ #703566 - Need to be able to share Wayland display between GTK and Clutter
+ #697285 - Inconsistent setting of the time member on the events
+ #703882 - Prevent buffer/text/max-length properties notification in the
+ allocation cycle
+
+Many thanks to:
+
+ Lionel Landwerlin, Chris Cummins, Matthias Clasen, Rob Bradford, Alejandro
+ Piñeiro, Jasper St. Pierre, Bastian Winkler, Colin Walters, Craig R. Hughes,
+ Daniel Mustieles, Marek Černocký, Adel Gadllah, Ask H. Larsen, Bastien
+ Nocera, Cosimo Cecchi, Dimitris Spingos, Duarte Loreto, Emanuele Aina, Fran
+ Diéguez, Gil Forcada, Matej Urbančič, Milo Casagrande, Neil Roberts, Rui
+ Matos, Samuel Degrande, Sebastian Keller, Sjoerd Simons.
+
Clutter 1.13.2 2012-12-18
===============================================================================
diff --git a/README.in b/README.in
index 22f5ef012..1dba0c0e1 100644
--- a/README.in
+++ b/README.in
@@ -21,7 +21,6 @@ When building the X11 backend, Clutter depends on the following extensions:
• XComposite ≥ @XCOMPOSITE_REQ_VERSION@
• XDamage
• XExt
- • XFixes ≥ @XFIXES_REQ_VERSION@
• XInput (1.x or 2.x)
• XKB
@@ -38,6 +37,12 @@ When building the CEx100 backend, Clutter also depends on:
• libgdl
+When building the evdev input backend, Clutter also depends on:
+
+ • xkbcommon
+ • libudev ≥ @LIBUDEV_REQ_VERSION@
+ • libinput ≥ @LIBINPUT_REQ_VERSION@
+
If you are building the API reference you will also need:
• GTK-Doc ≥ @GTK_DOC_REQ_VERSION@
@@ -287,9 +292,9 @@ if possible, add new unit tests for the conformance test suite in case of new
features. Ensure you run the conformance test suite every for every patch you
wish to submit, by using:
- cd tests/conform && make test
+ make -C tests/conform check
-and verifying that the test suite passes.
+and verifying that the whole test suite passes.
RELEASE NOTES
-------------------------------------------------------------------------------
@@ -298,6 +303,61 @@ Relevant information for developers with existing Clutter applications
wanting to port to newer releases (see NEWS for general information on new
features).
+Release Notes for Clutter 1.22
+-------------------------------------------------------------------------------
+
+• The ClutterRequestMode enumeration has a new value. Code checking for the
+ values of ClutterRequestMode should already be resilient to changes to this
+ enumerations, like for all enumerations in Clutter.
+
+Release Notes for Clutter 1.20
+-------------------------------------------------------------------------------
+
+• The clutter_stage_set_paint_callback() experimental function has been
+ removed from the Clutter ABI; it has been replaced by the ::after-paint
+ signal on the ClutterStage class. The set_paint_callback() method was
+ marked as "experimental", required a special definition to be usable, and
+ no guarantees were made on its continued existence.
+
+Release Notes for Clutter 1.18
+-------------------------------------------------------------------------------
+
+• Until 1.18, ClutterStage removed its children during its dispose()
+ implementation, before the default ClutterActor::destroy() implementation
+ would run. ClutterStage will now destroy the children when it is destroyed
+ to ensure that the children are destroyed, and that custom code can remove
+ references through the ClutterActor::destroy signal.
+
+• Clutter does not depend on the XFIXES extension API on X11 any more. Before
+ 1.18 Clutter used the XFIXES API to hide the cursor; the API is less than
+ useful for toolkits and applications, so Clutter unconditionally uses the
+ fall back code that was in place in case XFIXES was not available.
+
+• ClutterText emits the ::insert-text and ::delete-text signals before the
+ contents of the ClutterTextBuffer are changed, as documented. The signal
+ emission cannot be guaranteed if the ClutterTextBuffer API is used instead
+ of the ClutterText API.
+
+• Starting from 1.18, the Clutter evdev input device backend no longer uses
+ libevdev and libgudev directly, but relies on libinput for discovering,
+ reading and processing input devices.
+
+• The Clutter evdev input device backend was already considered
+ experimental and not subject to Clutter's API and ABI stabitility
+ guarantees. Starting from 1.18, users have to explicitly acknowldge
+ this by having to #define CLUTTER_ENABLE_COMPOSITOR_API to use its
+ public API.
+
+Release Notes for Clutter 1.16
+-------------------------------------------------------------------------------
+
+• Implicit transitions will not be created on actors that are not mapped,
+ unless they are in a cloned branch of the scene graph. This was never an
+ approved case, as ClutterActor would implicitly skip layout and paint on
+ unmapped actors, but now it's being enforced through the animation machinery
+ as well. Using explicit transitions still works, as explicit transitions
+ completely place the developer in charge.
+
Release Notes for Clutter 1.14
-------------------------------------------------------------------------------
diff --git a/README.md b/README.md
index 7a3c7a235..0fbf83d44 100644
--- a/README.md
+++ b/README.md
@@ -24,8 +24,7 @@ On X11, Clutter depends on the following extensions:
* XComposite
* XDamage
* XExt
-* XFixes
-* XInput (1.x or 2.x)
+* XInput 2.x
* XKB
If you are building the API reference you will also need:
@@ -54,30 +53,24 @@ The official Clutter website is:
The API references for the latest stable release are available at:
- http://docs.clutter-project.org/docs/clutter/stable/
- http://docs.clutter-project.org/docs/cogl/stable/
- http://docs.clutter-project.org/docs/cally/stable/
+ https://developer.gnome.org/clutter/stable/
The Clutter Cookbook is available at:
- http://docs.clutter-project.org/docs/clutter-cookbook/
+ https://developer.gnome.org/clutter-cookbook/
New releases of Clutter are available at:
- http://source.clutter-project.org/sources/clutter/
-
-The Clutter blog is available at:
-
- http://www.clutter-project.org/blog/
+ https://download.gnome.org/sources/clutter/
To subscribe to the Clutter mailing lists and read the archives, use the
Mailman web interface available at:
- http://lists.clutter-project.org/
+ https://mail.gnome.org/mailman/listinfo/clutter-list
New bug page on Bugzilla:
- http://bugzilla.gnome.org/enter_bug.cgi?product=clutter
+ https://bugzilla.gnome.org/enter_bug.cgi?product=clutter
Clutter is licensed under the terms of the GNU Lesser General Public
License, version 2.1 or (at your option) later: see the `COPYING` file
@@ -93,7 +86,7 @@ be followed:
2. make
3. make install
-To build Clutter from a Git clone, run the autogen.sh script instead
+To build Clutter from a Git clone, run the `autogen.sh` script instead
of the configure one. The `autogen.sh` script will run the configure script
for you, unless the `NOCONFIGURE` environment variable is set to a non-empty
value.
@@ -134,7 +127,7 @@ The usual workflow for contributions should be:
2. Create a branch (`git checkout -b my_work`)
3. Commit your changes (`git commit -am "Added my awesome feature"`)
4. Push to the branch (`git push origin my_work`)
-5. Create an [Bug][1] with a link to your branch
+5. Create an [Bug][bugzilla-clutter] with a link to your branch
6. Sit back, relax and wait for feedback and eventual merge
Bugs
@@ -142,7 +135,7 @@ Bugs
Bugs should be reported to the Clutter Bugzilla at:
- http://bugzilla.gnome.org/enter_bug.cgi?product=clutter
+ https://bugzilla.gnome.org/enter_bug.cgi?product=clutter
You will need a Bugzilla account.
@@ -162,7 +155,5 @@ behaviour.
If the bug exposes a crash, the exact text printed out and a stack trace
obtained using gdb are greatly appreciated.
-
-
-[building-clutter]: http://wiki.clutter-project.org/wiki/BuildingClutter
-[1]: http://bugzilla.gnome.org/enter_bug.cgi?product=clutter
+[building-clutter]: https://wiki.gnome.org/Projects/Clutter/Building
+[bugzilla-clutter]: https://bugzilla.gnome.org/enter_bug.cgi?product=clutter
diff --git a/build/autotools/Makefile.am b/build/autotools/Makefile.am
index 8446ea4b6..19dfd1c72 100644
--- a/build/autotools/Makefile.am
+++ b/build/autotools/Makefile.am
@@ -11,4 +11,8 @@ EXTRA_DIST = \
gtk-doc.m4 \
as-compiler-flag.m4 \
as-linguas.m4 \
+ glibtests.m4 \
+ glib-tap.mk \
+ tap-driver.sh \
+ tap-test \
$(NULL)
diff --git a/build/autotools/Makefile.am.enums b/build/autotools/Makefile.am.enums
index d3dc742b5..2fd69d5bd 100644
--- a/build/autotools/Makefile.am.enums
+++ b/build/autotools/Makefile.am.enums
@@ -26,16 +26,17 @@ $(if $(glib_enum_headers),,$(error Need to define glib_enum_headers))
enum_tmpl_h=$(addprefix $(srcdir)/, $(glib_enum_h:.h=.h.in))
enum_tmpl_c=$(addprefix $(srcdir)/, $(glib_enum_c:.c=.c.in))
+enum_headers=$(addprefix $(srcdir)/, $(glib_enum_headers))
CLEANFILES += stamp-enum-types
DISTCLEANFILES += $(glib_enum_h) $(glib_enum_c)
BUILT_SOURCES += $(glib_enum_h) $(glib_enum_c)
EXTRA_DIST += $(enum_tmpl_h) $(enum_tmpl_c)
-stamp-enum-types: $(glib_enum_headers) $(enum_tmpl_h)
+stamp-enum-types: $(enum_headers) $(enum_tmpl_h)
$(AM_V_GEN)$(GLIB_MKENUMS) \
--template $(enum_tmpl_h) \
- $(glib_enum_headers) > xgen-eh \
+ $(enum_headers) > xgen-eh \
&& (cmp -s xgen-eh $(glib_enum_h) || cp -f xgen-eh $(glib_enum_h)) \
&& rm -f xgen-eh \
&& echo timestamp > $(@F)
@@ -43,9 +44,9 @@ stamp-enum-types: $(glib_enum_headers) $(enum_tmpl_h)
$(glib_enum_h): stamp-enum-types
@true
-$(glib_enum_c): $(glib_enum_headers) $(glib_enum_h) $(enum_tmpl_c)
+$(glib_enum_c): $(enum_headers) $(enum_tmpl_h) $(enum_tmpl_c)
$(AM_V_GEN)$(GLIB_MKENUMS) \
--template $(enum_tmpl_c) \
- $(glib_enum_headers) > xgen-ec \
+ $(enum_headers) > xgen-ec \
&& cp -f xgen-ec $(glib_enum_c) \
&& rm -f xgen-ec
diff --git a/build/autotools/Makefile.am.gitignore b/build/autotools/Makefile.am.gitignore
index e86755b64..c3f4e0a11 100644
--- a/build/autotools/Makefile.am.gitignore
+++ b/build/autotools/Makefile.am.gitignore
@@ -3,12 +3,14 @@
# generator of Git ignore files, and it's not meant to be used as
# the top-level Git ignore file generator.
+GIT_IGNORE_FILES = $(noinst_PROGRAMS) $(check_PROGRAMS) $(check_SCRIPTS) $(GIT_IGNORE_EXTRA)
+
$(srcdir)/.gitignore: Makefile.am
$(QUIET_GEN)( \
echo "*.o" ; \
echo ".gitignore" ; \
) > $(srcdir)/.gitignore ; \
- for p in $(noinst_PROGRAMS); do \
+ for p in $(GIT_IGNORE_FILES); do \
echo "/$$p" >> $(srcdir)/.gitignore ; \
done
diff --git a/build/autotools/Makefile.am.release b/build/autotools/Makefile.am.release
index 6b1fcbc16..79ee35c9d 100644
--- a/build/autotools/Makefile.am.release
+++ b/build/autotools/Makefile.am.release
@@ -11,12 +11,12 @@ TAR_OPTIONS = --owner=0 --group=0
#RELEASE_URL_BASE = http://source.clutter-project.org/sources/clutter
#RELEASE_URL = $(RELEASE_URL_BASE)/$(CLUTTER_MAJOR_VERSION).$(CLUTTER_MINOR_VERSION)
-RELEASE_ANNOUNCE_LIST = clutter-announce@clutter-project.org
+RELEASE_ANNOUNCE_LIST = clutter-list@gnome.org
RELEASE_ANNOUNCE_CC = gnome-announce-list@gnome.org
-RELEASE_DOC_URL = http://docs.clutter-project.org/docs/
+RELEASE_DOC_URL = https://developer.gnome.org
-BUGS_URL = http://bugzilla.gnome.org/enter_bug.cgi?product=clutter
+BUGS_URL = https://bugzilla.gnome.org/enter_bug.cgi?product=clutter
tar_file = $(distdir).tar.xz
sha256_file = $(distdir).sha256sum
@@ -29,7 +29,7 @@ release-tag:
echo "*** Cannot tag a Git version; please, update the Clutter version" >&2; \
else \
if test -d "$(top_srcdir)/.git"; then \
- echo " TAG Tagging release $(CLUTTER_VERSION)..." ; \
+ echo " TAG Tagging release $(CLUTTER_VERSION)..." ; \
$(top_srcdir)/build/missing --run git tag \
-s \
-m "Clutter $(CLUTTER_VERSION) ($(CLUTTER_RELEASE_STATUS))" \
@@ -43,7 +43,7 @@ release-check: release-verify-even-micro release-verify-sane-changelogs release-
TAR_OPTIONS="$(TAR_OPTIONS)" $(MAKE) $(AM_MAKEFLAGS) distcheck
release-verify-news:
- @echo -n " CHK Checking that the NEWS file has been updated..."
+ @echo -n " CHK Checking that the NEWS file has been updated..."
@if ! grep -q "$(CLUTTER_VERSION)" $(top_srcdir)/NEWS; then \
(echo "Ouch." && \
echo "*** The version in the NEWS file does not match $(CLUTTER_VERSION)." && \
@@ -52,7 +52,7 @@ release-verify-news:
@echo "Good."
release-verify-sane-changelogs: changelogs
- @echo -n " CHK Checking that the ChangeLog files are sane..."
+ @echo -n " CHK Checking that the ChangeLog files are sane..."
@if grep -q "is required to generate" $(CHANGELOGS); then \
(echo "Ouch." && \
echo "*** Some of the ChangeLogs are not generated correctly." && \
@@ -60,7 +60,7 @@ release-verify-sane-changelogs: changelogs
@echo "Good."
release-verify-even-micro:
- @echo -n " CHK Checking that $(VERSION) has an even micro component..."
+ @echo -n " CHK Checking that $(VERSION) has an even micro component..."
@test "$(CLUTTER_MICRO_VERSION)" = "`echo $(CLUTTER_MICRO_VERSION)/2*2 | bc`" || \
(echo "Ouch." && \
echo "*** The version micro component '$(CLUTTER_MICRO_VERSION)' is not an even number." && \
@@ -69,10 +69,10 @@ release-verify-even-micro:
@echo "Good."
release-upload: $(sha256_file)
- @echo -n " SCP Uploading to master.gnome.org... "
+ @echo -n " SCP Uploading to master.gnome.org... "
@scp $(tar_file) master.gnome.org:
@echo "Done."
- @echo -n " EXEC Running ftpadmin install... "
+ @echo -n " EXEC Running ftpadmin install... "
@ssh master.gnome.org ftpadmin install $(tar_file)
@mv -f $(sha256_file) $(top_builddir)/build/$(sha256_file)
@echo "Done."
@@ -128,7 +128,7 @@ release-message:
else \
echo " Clutter: http://developer.gnome.org/clutter/stable/"; \
fi
- @echo " Cookbook: $(RELEASE_DOC_URL)/clutter-cookbook/$(CLUTTER_API_VERSION)/"
+ @echo " Cookbook: $(RELEASE_DOC_URL)/clutter-cookbook/$(CLUTTER_VERSION)/"
@echo ""
@echo "Release Notes:"
@if test "x$(CLUTTER_RELEASE_STATUS)" = "xsnapshot"; then \
diff --git a/build/autotools/Makefile.am.silent b/build/autotools/Makefile.am.silent
index ca465920b..5a1605c6e 100644
--- a/build/autotools/Makefile.am.silent
+++ b/build/autotools/Makefile.am.silent
@@ -4,16 +4,16 @@ QUIET_GEN = $(AM_V_GEN)
QUIET_LN = $(QUIET_LN_$(V))
QUIET_LN_ = $(QUIET_LN_$(AM_DEFAULT_VERBOSITY))
-QUIET_LN_0 = @echo ' LN '$@;
+QUIET_LN_0 = @echo ' LN '$@;
QUIET_RM = $(QUIET_RM_$(V))
QUIET_RM_ = $(QUIET_RM_$(AM_DEFAULT_VERBOSITY))
-QUIET_RM_0 = @echo ' RM '$@;
+QUIET_RM_0 = @echo ' RM '$@;
QUIET_SCAN = $(QUIET_SCAN_$(V))
QUIET_SCAN_ = $(QUIET_SCAN_$(AM_DEFAULT_VERBOSITY))
-QUIET_SCAN_0 = @echo ' GISCAN '$@;
+QUIET_SCAN_0 = @echo ' GISCAN '$@;
QUIET_COMP = $(QUIET_COMP_$(V))
QUIET_COMP_ = $(QUIET_COMP_$(AM_DEFAULT_VERBOSITY))
-QUIET_COMP_0 = @echo ' GICOMP '$@;
+QUIET_COMP_0 = @echo ' GICOMP '$@;
diff --git a/build/autotools/glib-tap.mk b/build/autotools/glib-tap.mk
new file mode 100644
index 000000000..7c5f82b9a
--- /dev/null
+++ b/build/autotools/glib-tap.mk
@@ -0,0 +1,134 @@
+# GLIB - Library of useful C routines
+
+TESTS_ENVIRONMENT= \
+ G_TEST_SRCDIR="$(abs_srcdir)" \
+ G_TEST_BUILDDIR="$(abs_builddir)" \
+ G_DEBUG=gc-friendly \
+ MALLOC_CHECK_=2 \
+ MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256))
+LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/build/autotools/tap-driver.sh
+LOG_COMPILER = $(top_srcdir)/build/autotools/tap-test
+
+NULL =
+
+# initialize variables for unconditional += appending
+BUILT_SOURCES =
+BUILT_EXTRA_DIST =
+CLEANFILES = *.log *.trs
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+EXTRA_DIST =
+TESTS =
+
+installed_test_LTLIBRARIES =
+installed_test_PROGRAMS =
+installed_test_SCRIPTS =
+nobase_installed_test_DATA =
+
+noinst_LTLIBRARIES =
+noinst_PROGRAMS =
+noinst_SCRIPTS =
+noinst_DATA =
+
+check_LTLIBRARIES =
+check_PROGRAMS =
+check_SCRIPTS =
+check_DATA =
+
+# We support a fairly large range of possible variables. It is expected that all types of files in a test suite
+# will belong in exactly one of the following variables.
+#
+# First, we support the usual automake suffixes, but in lowercase, with the customary meaning:
+#
+# test_programs, test_scripts, test_data, test_ltlibraries
+#
+# The above are used to list files that are involved in both uninstalled and installed testing. The
+# test_programs and test_scripts are taken to be actual testcases and will be run as part of the test suite.
+# Note that _data is always used with the nobase_ automake variable name to ensure that installed test data is
+# installed in the same way as it appears in the package layout.
+#
+# In order to mark a particular file as being only for one type of testing, use 'installed' or 'uninstalled',
+# like so:
+#
+# installed_test_programs, uninstalled_test_programs
+# installed_test_scripts, uninstalled_test_scripts
+# installed_test_data, uninstalled_test_data
+# installed_test_ltlibraries, uninstalled_test_ltlibraries
+#
+# Additionally, we support 'extra' infixes for programs and scripts. This is used for support programs/scripts
+# that should not themselves be run as testcases (but exist to be used from other testcases):
+#
+# test_extra_programs, installed_test_extra_programs, uninstalled_test_extra_programs
+# test_extra_scripts, installed_test_extra_scripts, uninstalled_test_extra_scripts
+#
+# Additionally, for _scripts and _data, we support the customary dist_ prefix so that the named script or data
+# file automatically end up in the tarball.
+#
+# dist_test_scripts, dist_test_data, dist_test_extra_scripts
+# dist_installed_test_scripts, dist_installed_test_data, dist_installed_test_extra_scripts
+# dist_uninstalled_test_scripts, dist_uninstalled_test_data, dist_uninstalled_test_extra_scripts
+#
+# Note that no file is automatically disted unless it appears in one of the dist_ variables. This follows the
+# standard automake convention of not disting programs scripts or data by default.
+#
+# test_programs, test_scripts, uninstalled_test_programs and uninstalled_test_scripts (as well as their disted
+# variants) will be run as part of the in-tree 'make check'. These are all assumed to be runnable under
+# gtester. That's a bit strange for scripts, but it's possible.
+
+TESTS += $(test_programs) $(test_scripts) $(uninstalled_test_programs) $(uninstalled_test_scripts) \
+ $(dist_test_scripts) $(dist_uninstalled_test_scripts)
+
+# Note: build even the installed-only targets during 'make check' to ensure that they still work.
+# We need to do a bit of trickery here and manage disting via EXTRA_DIST instead of using dist_ prefixes to
+# prevent automake from mistreating gmake functions like $(wildcard ...) and $(addprefix ...) as if they were
+# filenames, including removing duplicate instances of the opening part before the space, eg. '$(addprefix'.
+all_test_programs = $(test_programs) $(uninstalled_test_programs) $(installed_test_programs) \
+ $(test_extra_programs) $(uninstalled_test_extra_programs) $(installed_test_extra_programs)
+all_test_scripts = $(test_scripts) $(uninstalled_test_scripts) $(installed_test_scripts) \
+ $(test_extra_scripts) $(uninstalled_test_extra_scripts) $(installed_test_extra_scripts)
+all_dist_test_scripts = $(dist_test_scripts) $(dist_uninstalled_test_scripts) $(dist_installed_test_scripts) \
+ $(dist_test_extra_scripts) $(dist_uninstalled_test_extra_scripts) $(dist_installed_test_extra_scripts)
+all_test_scripts += $(all_dist_test_scripts)
+EXTRA_DIST += $(all_dist_test_scripts)
+all_test_data = $(test_data) $(uninstalled_test_data) $(installed_test_data)
+all_dist_test_data = $(dist_test_data) $(dist_uninstalled_test_data) $(dist_installed_test_data)
+all_test_data += $(all_dist_test_data)
+EXTRA_DIST += $(all_dist_test_data)
+all_test_ltlibs = $(test_ltlibraries) $(uninstalled_test_ltlibraries) $(installed_test_ltlibraries)
+
+if ENABLE_ALWAYS_BUILD_TESTS
+noinst_LTLIBRARIES += $(all_test_ltlibs)
+noinst_PROGRAMS += $(all_test_programs)
+noinst_SCRIPTS += $(all_test_scripts)
+noinst_DATA += $(all_test_data)
+else
+check_LTLIBRARIES += $(all_test_ltlibs)
+check_PROGRAMS += $(all_test_programs)
+check_SCRIPTS += $(all_test_scripts)
+check_DATA += $(all_test_data)
+endif
+
+if ENABLE_INSTALLED_TESTS
+installed_test_PROGRAMS += $(test_programs) $(installed_test_programs) \
+ $(test_extra_programs) $(installed_test_extra_programs)
+installed_test_SCRIPTS += $(test_scripts) $(installed_test_scripts) \
+ $(test_extra_scripts) $(test_installed_extra_scripts)
+installed_test_SCRIPTS += $(dist_test_scripts) $(dist_test_extra_scripts) \
+ $(dist_installed_test_scripts) $(dist_installed_test_extra_scripts)
+nobase_installed_test_DATA += $(test_data) $(installed_test_data)
+nobase_installed_test_DATA += $(dist_test_data) $(dist_installed_test_data)
+installed_test_LTLIBRARIES += $(test_ltlibraries) $(installed_test_ltlibraries)
+installed_testcases = $(test_programs) $(installed_test_programs) \
+ $(test_scripts) $(installed_test_scripts) \
+ $(dist_test_scripts) $(dist_installed_test_scripts)
+
+installed_test_meta_DATA = $(installed_testcases:=.test)
+
+%.test: %$(EXEEXT) Makefile
+ $(AM_V_GEN) (echo '[Test]' > $@.tmp; \
+ echo 'Type=session' >> $@.tmp; \
+ echo 'Exec=env G_ENABLE_DIAGNOSTIC=0 CLUTTER_ENABLE_DIAGNOSTIC=0 $(installed_testdir)/$<' >> $@.tmp; \
+ mv $@.tmp $@)
+
+CLEANFILES += $(installed_test_meta_DATA)
+endif
diff --git a/build/autotools/glibtests.m4 b/build/autotools/glibtests.m4
new file mode 100644
index 000000000..7d5920a43
--- /dev/null
+++ b/build/autotools/glibtests.m4
@@ -0,0 +1,28 @@
+dnl GLIB_TESTS
+dnl
+
+AC_DEFUN([GLIB_TESTS],
+[
+ AC_ARG_ENABLE(installed-tests,
+ AS_HELP_STRING([--enable-installed-tests],
+ [Enable installation of some test cases]),
+ [case ${enableval} in
+ yes) ENABLE_INSTALLED_TESTS="1" ;;
+ no) ENABLE_INSTALLED_TESTS="" ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-installed-tests]) ;;
+ esac])
+ AM_CONDITIONAL([ENABLE_INSTALLED_TESTS], test "$ENABLE_INSTALLED_TESTS" = "1")
+ AC_ARG_ENABLE(always-build-tests,
+ AS_HELP_STRING([--enable-always-build-tests],
+ [Enable always building tests during 'make all']),
+ [case ${enableval} in
+ yes) ENABLE_ALWAYS_BUILD_TESTS="1" ;;
+ no) ENABLE_ALWAYS_BUILD_TESTS="" ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-always-build-tests]) ;;
+ esac])
+ AM_CONDITIONAL([ENABLE_ALWAYS_BUILD_TESTS], test "$ENABLE_ALWAYS_BUILD_TESTS" = "1")
+ if test "$ENABLE_INSTALLED_TESTS" = "1"; then
+ AC_SUBST(installed_test_metadir, [${datadir}/installed-tests/]AC_PACKAGE_NAME)
+ AC_SUBST(installed_testdir, [${libexecdir}/installed-tests/]AC_PACKAGE_NAME)
+ fi
+])
diff --git a/build/autotools/introspection.m4 b/build/autotools/introspection.m4
index 589721c5a..d89c3d907 100644
--- a/build/autotools/introspection.m4
+++ b/build/autotools/introspection.m4
@@ -41,6 +41,8 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
],dnl
[auto],[dnl
PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
+ dnl Canonicalize enable_introspection
+ enable_introspection=$found_introspection
],dnl
[dnl
AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
diff --git a/build/autotools/tap-driver.sh b/build/autotools/tap-driver.sh
new file mode 100755
index 000000000..19aa531de
--- /dev/null
+++ b/build/autotools/tap-driver.sh
@@ -0,0 +1,652 @@
+#! /bin/sh
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to or send patches to
+# .
+
+scriptversion=2011-12-27.17; # UTC
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+me=tap-driver.sh
+
+fatal ()
+{
+ echo "$me: fatal: $*" >&2
+ exit 1
+}
+
+usage_error ()
+{
+ echo "$me: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <
+ #
+ trap : 1 3 2 13 15
+ if test $merge -gt 0; then
+ exec 2>&1
+ else
+ exec 2>&3
+ fi
+ "$@"
+ echo $?
+ ) | LC_ALL=C ${AM_TAP_AWK-awk} \
+ -v me="$me" \
+ -v test_script_name="$test_name" \
+ -v log_file="$log_file" \
+ -v trs_file="$trs_file" \
+ -v expect_failure="$expect_failure" \
+ -v merge="$merge" \
+ -v ignore_exit="$ignore_exit" \
+ -v comments="$comments" \
+ -v diag_string="$diag_string" \
+'
+# FIXME: the usages of "cat >&3" below could be optimized when using
+# FIXME: GNU awk, and/on on systems that supports /dev/fd/.
+
+# Implementation note: in what follows, `result_obj` will be an
+# associative array that (partly) simulates a TAP result object
+# from the `TAP::Parser` perl module.
+
+## ----------- ##
+## FUNCTIONS ##
+## ----------- ##
+
+function fatal(msg)
+{
+ print me ": " msg | "cat >&2"
+ exit 1
+}
+
+function abort(where)
+{
+ fatal("internal error " where)
+}
+
+# Convert a boolean to a "yes"/"no" string.
+function yn(bool)
+{
+ return bool ? "yes" : "no";
+}
+
+function add_test_result(result)
+{
+ if (!test_results_index)
+ test_results_index = 0
+ test_results_list[test_results_index] = result
+ test_results_index += 1
+ test_results_seen[result] = 1;
+}
+
+# Whether the test script should be re-run by "make recheck".
+function must_recheck()
+{
+ for (k in test_results_seen)
+ if (k != "XFAIL" && k != "PASS" && k != "SKIP")
+ return 1
+ return 0
+}
+
+# Whether the content of the log file associated to this test should
+# be copied into the "global" test-suite.log.
+function copy_in_global_log()
+{
+ for (k in test_results_seen)
+ if (k != "PASS")
+ return 1
+ return 0
+}
+
+# FIXME: this can certainly be improved ...
+function get_global_test_result()
+{
+ if ("ERROR" in test_results_seen)
+ return "ERROR"
+ if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
+ return "FAIL"
+ all_skipped = 1
+ for (k in test_results_seen)
+ if (k != "SKIP")
+ all_skipped = 0
+ if (all_skipped)
+ return "SKIP"
+ return "PASS";
+}
+
+function stringify_result_obj(result_obj)
+{
+ if (result_obj["is_unplanned"] || result_obj["number"] != testno)
+ return "ERROR"
+
+ if (plan_seen == LATE_PLAN)
+ return "ERROR"
+
+ if (result_obj["directive"] == "TODO")
+ return result_obj["is_ok"] ? "XPASS" : "XFAIL"
+
+ if (result_obj["directive"] == "SKIP")
+ return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
+
+ if (length(result_obj["directive"]))
+ abort("in function stringify_result_obj()")
+
+ return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
+}
+
+function decorate_result(result)
+{
+ color_name = color_for_result[result]
+ if (color_name)
+ return color_map[color_name] "" result "" color_map["std"]
+ # If we are not using colorized output, or if we do not know how
+ # to colorize the given result, we should return it unchanged.
+ return result
+}
+
+function report(result, details)
+{
+ if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
+ {
+ msg = ": " test_script_name
+ add_test_result(result)
+ }
+ else if (result == "#")
+ {
+ msg = " " test_script_name ":"
+ }
+ else
+ {
+ abort("in function report()")
+ }
+ if (length(details))
+ msg = msg " " details
+ # Output on console might be colorized.
+ print decorate_result(result) msg
+ # Log the result in the log file too, to help debugging (this is
+ # especially true when said result is a TAP error or "Bail out!").
+ print result msg | "cat >&3";
+}
+
+function testsuite_error(error_message)
+{
+ report("ERROR", "- " error_message)
+}
+
+function handle_tap_result()
+{
+ details = result_obj["number"];
+ if (length(result_obj["description"]))
+ details = details " " result_obj["description"]
+
+ if (plan_seen == LATE_PLAN)
+ {
+ details = details " # AFTER LATE PLAN";
+ }
+ else if (result_obj["is_unplanned"])
+ {
+ details = details " # UNPLANNED";
+ }
+ else if (result_obj["number"] != testno)
+ {
+ details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
+ details, testno);
+ }
+ else if (result_obj["directive"])
+ {
+ details = details " # " result_obj["directive"];
+ if (length(result_obj["explanation"]))
+ details = details " " result_obj["explanation"]
+ }
+
+ report(stringify_result_obj(result_obj), details)
+}
+
+# `skip_reason` should be empty whenever planned > 0.
+function handle_tap_plan(planned, skip_reason)
+{
+ planned += 0 # Avoid getting confused if, say, `planned` is "00"
+ if (length(skip_reason) && planned > 0)
+ abort("in function handle_tap_plan()")
+ if (plan_seen)
+ {
+ # Error, only one plan per stream is acceptable.
+ testsuite_error("multiple test plans")
+ return;
+ }
+ planned_tests = planned
+ # The TAP plan can come before or after *all* the TAP results; we speak
+ # respectively of an "early" or a "late" plan. If we see the plan line
+ # after at least one TAP result has been seen, assume we have a late
+ # plan; in this case, any further test result seen after the plan will
+ # be flagged as an error.
+ plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
+ # If testno > 0, we have an error ("too many tests run") that will be
+ # automatically dealt with later, so do not worry about it here. If
+ # $plan_seen is true, we have an error due to a repeated plan, and that
+ # has already been dealt with above. Otherwise, we have a valid "plan
+ # with SKIP" specification, and should report it as a particular kind
+ # of SKIP result.
+ if (planned == 0 && testno == 0)
+ {
+ if (length(skip_reason))
+ skip_reason = "- " skip_reason;
+ report("SKIP", skip_reason);
+ }
+}
+
+function extract_tap_comment(line)
+{
+ if (index(line, diag_string) == 1)
+ {
+ # Strip leading `diag_string` from `line`.
+ line = substr(line, length(diag_string) + 1)
+ # And strip any leading and trailing whitespace left.
+ sub("^[ \t]*", "", line)
+ sub("[ \t]*$", "", line)
+ # Return what is left (if any).
+ return line;
+ }
+ return "";
+}
+
+# When this function is called, we know that line is a TAP result line,
+# so that it matches the (perl) RE "^(not )?ok\b".
+function setup_result_obj(line)
+{
+ # Get the result, and remove it from the line.
+ result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
+ sub("^(not )?ok[ \t]*", "", line)
+
+ # If the result has an explicit number, get it and strip it; otherwise,
+ # automatically assing the next progresive number to it.
+ if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
+ {
+ match(line, "^[0-9]+")
+ # The final `+ 0` is to normalize numbers with leading zeros.
+ result_obj["number"] = substr(line, 1, RLENGTH) + 0
+ line = substr(line, RLENGTH + 1)
+ }
+ else
+ {
+ result_obj["number"] = testno
+ }
+
+ if (plan_seen == LATE_PLAN)
+ # No further test results are acceptable after a "late" TAP plan
+ # has been seen.
+ result_obj["is_unplanned"] = 1
+ else if (plan_seen && testno > planned_tests)
+ result_obj["is_unplanned"] = 1
+ else
+ result_obj["is_unplanned"] = 0
+
+ # Strip trailing and leading whitespace.
+ sub("^[ \t]*", "", line)
+ sub("[ \t]*$", "", line)
+
+ # This will have to be corrected if we have a "TODO"/"SKIP" directive.
+ result_obj["description"] = line
+ result_obj["directive"] = ""
+ result_obj["explanation"] = ""
+
+ if (index(line, "#") == 0)
+ return # No possible directive, nothing more to do.
+
+ # Directives are case-insensitive.
+ rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
+
+ # See whether we have the directive, and if yes, where.
+ pos = match(line, rx "$")
+ if (!pos)
+ pos = match(line, rx "[^a-zA-Z0-9_]")
+
+ # If there was no TAP directive, we have nothing more to do.
+ if (!pos)
+ return
+
+ # Let`s now see if the TAP directive has been escaped. For example:
+ # escaped: ok \# SKIP
+ # not escaped: ok \\# SKIP
+ # escaped: ok \\\\\# SKIP
+ # not escaped: ok \ # SKIP
+ if (substr(line, pos, 1) == "#")
+ {
+ bslash_count = 0
+ for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
+ bslash_count += 1
+ if (bslash_count % 2)
+ return # Directive was escaped.
+ }
+
+ # Strip the directive and its explanation (if any) from the test
+ # description.
+ result_obj["description"] = substr(line, 1, pos - 1)
+ # Now remove the test description from the line, that has been dealt
+ # with already.
+ line = substr(line, pos)
+ # Strip the directive, and save its value (normalized to upper case).
+ sub("^[ \t]*#[ \t]*", "", line)
+ result_obj["directive"] = toupper(substr(line, 1, 4))
+ line = substr(line, 5)
+ # Now get the explanation for the directive (if any), with leading
+ # and trailing whitespace removed.
+ sub("^[ \t]*", "", line)
+ sub("[ \t]*$", "", line)
+ result_obj["explanation"] = line
+}
+
+function get_test_exit_message(status)
+{
+ if (status == 0)
+ return ""
+ if (status !~ /^[1-9][0-9]*$/)
+ abort("getting exit status")
+ if (status < 127)
+ exit_details = ""
+ else if (status == 127)
+ exit_details = " (command not found?)"
+ else if (status >= 128 && status <= 255)
+ exit_details = sprintf(" (terminated by signal %d?)", status - 128)
+ else if (status > 256 && status <= 384)
+ # We used to report an "abnormal termination" here, but some Korn
+ # shells, when a child process die due to signal number n, can leave
+ # in $? an exit status of 256+n instead of the more standard 128+n.
+ # Apparently, both behaviours are allowed by POSIX (2008), so be
+ # prepared to handle them both. See also Austing Group report ID
+ # 0000051
+ exit_details = sprintf(" (terminated by signal %d?)", status - 256)
+ else
+ # Never seen in practice.
+ exit_details = " (abnormal termination)"
+ return sprintf("exited with status %d%s", status, exit_details)
+}
+
+function write_test_results()
+{
+ print ":global-test-result: " get_global_test_result() > trs_file
+ print ":recheck: " yn(must_recheck()) > trs_file
+ print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
+ for (i = 0; i < test_results_index; i += 1)
+ print ":test-result: " test_results_list[i] > trs_file
+ close(trs_file);
+}
+
+BEGIN {
+
+## ------- ##
+## SETUP ##
+## ------- ##
+
+'"$init_colors"'
+
+# Properly initialized once the TAP plan is seen.
+planned_tests = 0
+
+COOKED_PASS = expect_failure ? "XPASS": "PASS";
+COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
+
+# Enumeration-like constants to remember which kind of plan (if any)
+# has been seen. It is important that NO_PLAN evaluates "false" as
+# a boolean.
+NO_PLAN = 0
+EARLY_PLAN = 1
+LATE_PLAN = 2
+
+testno = 0 # Number of test results seen so far.
+bailed_out = 0 # Whether a "Bail out!" directive has been seen.
+
+# Whether the TAP plan has been seen or not, and if yes, which kind
+# it is ("early" is seen before any test result, "late" otherwise).
+plan_seen = NO_PLAN
+
+## --------- ##
+## PARSING ##
+## --------- ##
+
+is_first_read = 1
+
+while (1)
+ {
+ # Involutions required so that we are able to read the exit status
+ # from the last input line.
+ st = getline
+ if (st < 0) # I/O error.
+ fatal("I/O error while reading from input stream")
+ else if (st == 0) # End-of-input
+ {
+ if (is_first_read)
+ abort("in input loop: only one input line")
+ break
+ }
+ if (is_first_read)
+ {
+ is_first_read = 0
+ nextline = $0
+ continue
+ }
+ else
+ {
+ curline = nextline
+ nextline = $0
+ $0 = curline
+ }
+ # Copy any input line verbatim into the log file.
+ print | "cat >&3"
+ # Parsing of TAP input should stop after a "Bail out!" directive.
+ if (bailed_out)
+ continue
+
+ # TAP test result.
+ if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
+ {
+ testno += 1
+ setup_result_obj($0)
+ handle_tap_result()
+ }
+ # TAP plan (normal or "SKIP" without explanation).
+ else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
+ {
+ # The next two lines will put the number of planned tests in $0.
+ sub("^1\\.\\.", "")
+ sub("[^0-9]*$", "")
+ handle_tap_plan($0, "")
+ continue
+ }
+ # TAP "SKIP" plan, with an explanation.
+ else if ($0 ~ /^1\.\.0+[ \t]*#/)
+ {
+ # The next lines will put the skip explanation in $0, stripping
+ # any leading and trailing whitespace. This is a little more
+ # tricky in truth, since we want to also strip a potential leading
+ # "SKIP" string from the message.
+ sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
+ sub("[ \t]*$", "");
+ handle_tap_plan(0, $0)
+ }
+ # "Bail out!" magic.
+ # Older versions of prove and TAP::Harness (e.g., 3.17) did not
+ # recognize a "Bail out!" directive when preceded by leading
+ # whitespace, but more modern versions (e.g., 3.23) do. So we
+ # emulate the latter, "more modern" behaviour.
+ else if ($0 ~ /^[ \t]*Bail out!/)
+ {
+ bailed_out = 1
+ # Get the bailout message (if any), with leading and trailing
+ # whitespace stripped. The message remains stored in `$0`.
+ sub("^[ \t]*Bail out![ \t]*", "");
+ sub("[ \t]*$", "");
+ # Format the error message for the
+ bailout_message = "Bail out!"
+ if (length($0))
+ bailout_message = bailout_message " " $0
+ testsuite_error(bailout_message)
+ }
+ # Maybe we have too look for dianogtic comments too.
+ else if (comments != 0)
+ {
+ comment = extract_tap_comment($0);
+ if (length(comment))
+ report("#", comment);
+ }
+ }
+
+## -------- ##
+## FINISH ##
+## -------- ##
+
+# A "Bail out!" directive should cause us to ignore any following TAP
+# error, as well as a non-zero exit status from the TAP producer.
+if (!bailed_out)
+ {
+ if (!plan_seen)
+ {
+ testsuite_error("missing test plan")
+ }
+ else if (planned_tests != testno)
+ {
+ bad_amount = testno > planned_tests ? "many" : "few"
+ testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
+ bad_amount, planned_tests, testno))
+ }
+ if (!ignore_exit)
+ {
+ # Fetch exit status from the last line.
+ exit_message = get_test_exit_message(nextline)
+ if (exit_message)
+ testsuite_error(exit_message)
+ }
+ }
+
+write_test_results()
+
+exit 0
+
+} # End of "BEGIN" block.
+'
+
+# TODO: document that we consume the file descriptor 3 :-(
+} 3>"$log_file"
+
+test $? -eq 0 || fatal "I/O or internal error"
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build/autotools/tap-test b/build/autotools/tap-test
new file mode 100755
index 000000000..481e333ec
--- /dev/null
+++ b/build/autotools/tap-test
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+# run a GTest in tap mode. The test binary is passed as $1
+
+$1 -k --tap
diff --git a/build/mingw/mingw-fetch-dependencies.sh b/build/mingw/mingw-fetch-dependencies.sh
index 2fce3fd44..2fc9d304f 100755
--- a/build/mingw/mingw-fetch-dependencies.sh
+++ b/build/mingw/mingw-fetch-dependencies.sh
@@ -8,12 +8,15 @@
TOR_URL="http://ftp.gnome.org/pub/gnome/binaries/win32";
TOR_BINARIES=( \
- glib/2.28/glib{-dev,}_2.28.1-1_win32.zip \
- gtk+/2.16/gtk+{-dev,}_2.16.6-2_win32.zip \
- pango/1.28/pango{-dev,}_1.28.0-1_win32.zip );
+ gtk+/2.16/gtk+{-dev,}_2.16.6-2_win32.zip );
TOR_DEP_URL="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies";
+ZLIB_VERSION=1.2.4-2
+FFI_VERSION=3.0.6
+GLIB_VERSION=2.34.3
+GLIB_MINOR_VERSION="${GLIB_VERSION%.*}"
+
TOR_DEPS=( \
cairo{-dev,}_1.10.0-2_win32.zip \
gettext-runtime-{dev-,}0.17-1.zip \
@@ -21,13 +24,17 @@ TOR_DEPS=( \
freetype{-dev,}_2.3.12-1_win32.zip \
expat_2.0.1-1_win32.zip \
libpng{-dev,}_1.4.0-1_win32.zip \
- zlib{-dev,}_1.2.4-2_win32.zip );
+ zlib{-dev,}_${ZLIB_VERSION}_win32.zip \
+ libffi{-dev,}_${FFI_VERSION}-1_win32.zip \
+ gettext-runtime{-dev,}_0.18.1.1-2_win32.zip );
GNOME_SOURCES_URL="http://ftp.gnome.org/pub/GNOME/sources/"
SOURCES_DEPS=(\
- cogl/1.8/cogl-1.8.0.tar.bz2 \
- json-glib/0.12/json-glib-0.12.2.tar.bz2 \
- atk/2.1/atk-2.1.91.tar.bz2 );
+ glib/${GLIB_MINOR_VERSION}/glib-${GLIB_VERSION}.tar.xz \
+ cogl/1.14/cogl-1.14.0.tar.xz \
+ json-glib/0.16/json-glib-0.16.0.tar.xz \
+ atk/2.8/atk-2.8.0.tar.xz \
+ pango/1.34/pango-1.34.1.tar.xz );
GL_HEADER_URLS=( \
http://cgit.freedesktop.org/mesa/mesa/plain/include/GL/gl.h \
@@ -132,7 +139,7 @@ function do_untar_source_d ()
local exdir="$1"; shift;
local tarfile="$1"; shift;
- tar -C "$exdir" -jxvf "$tarfile" "$@";
+ tar -C "$exdir" -axvf "$tarfile" "$@";
if [ "$?" -ne 0 ]; then
echo "Failed to extract $tarfile";
@@ -185,13 +192,51 @@ function find_compiler ()
echo "Using compiler ${MINGW_TOOL_PREFIX}gcc and target $TARGET";
}
+function generate_pc_file ()
+{
+ local pcfile="$1"; shift;
+ local libs="$1"; shift;
+ local version="$1"; shift;
+ local include="$1"; shift;
+ local bn=`basename "$pcfile"`;
+
+ if test -z "$include"; then
+ include="\${prefix}/include";
+ fi;
+
+ if ! test -f "$pcfile"; then
+ cat > "$pcfile" <Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -169,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atkcomponent-example.vcxproj.filters b/build/win32/vs10/cally-atkcomponent-example.vcxproj.filters
index 5188a4877..94e8fae66 100644
--- a/build/win32/vs10/cally-atkcomponent-example.vcxproj.filters
+++ b/build/win32/vs10/cally-atkcomponent-example.vcxproj.filters
@@ -23,4 +23,4 @@
Headers
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atkeditabletext-example.vcxproj b/build/win32/vs10/cally-atkeditabletext-example.vcxproj
index d3011b734..7c6607d8c 100644
--- a/build/win32/vs10/cally-atkeditabletext-example.vcxproj
+++ b/build/win32/vs10/cally-atkeditabletext-example.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -169,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atkeditabletext-example.vcxproj.filters b/build/win32/vs10/cally-atkeditabletext-example.vcxproj.filters
index 931b48cfc..3d06352dd 100644
--- a/build/win32/vs10/cally-atkeditabletext-example.vcxproj.filters
+++ b/build/win32/vs10/cally-atkeditabletext-example.vcxproj.filters
@@ -23,4 +23,4 @@
Headers
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atkevents-example.vcxproj b/build/win32/vs10/cally-atkevents-example.vcxproj
index 0bc99dd38..0528086aa 100644
--- a/build/win32/vs10/cally-atkevents-example.vcxproj
+++ b/build/win32/vs10/cally-atkevents-example.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -173,4 +177,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atkevents-example.vcxproj.filters b/build/win32/vs10/cally-atkevents-example.vcxproj.filters
index 58c2c138c..dec13f824 100644
--- a/build/win32/vs10/cally-atkevents-example.vcxproj.filters
+++ b/build/win32/vs10/cally-atkevents-example.vcxproj.filters
@@ -23,4 +23,4 @@
Headers
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atktext-example.vcxproj b/build/win32/vs10/cally-atktext-example.vcxproj
index 372a6d96f..4b3192b81 100644
--- a/build/win32/vs10/cally-atktext-example.vcxproj
+++ b/build/win32/vs10/cally-atktext-example.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -169,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-atktext-example.vcxproj.filters b/build/win32/vs10/cally-atktext-example.vcxproj.filters
index 1318d81d6..bda5036e5 100644
--- a/build/win32/vs10/cally-atktext-example.vcxproj.filters
+++ b/build/win32/vs10/cally-atktext-example.vcxproj.filters
@@ -22,4 +22,4 @@
Headers
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-clone-example.vcxproj b/build/win32/vs10/cally-clone-example.vcxproj
index e769dca64..ebec1689a 100644
--- a/build/win32/vs10/cally-clone-example.vcxproj
+++ b/build/win32/vs10/cally-clone-example.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -169,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/cally-clone-example.vcxproj.filters b/build/win32/vs10/cally-clone-example.vcxproj.filters
index 90fccbd5a..81284881e 100644
--- a/build/win32/vs10/cally-clone-example.vcxproj.filters
+++ b/build/win32/vs10/cally-clone-example.vcxproj.filters
@@ -23,4 +23,4 @@
Headers
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/clutter-build-defines.props b/build/win32/vs10/clutter-build-defines.props
new file mode 100644
index 000000000..8fb7ae6ed
--- /dev/null
+++ b/build/win32/vs10/clutter-build-defines.props
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ _WIN32_WINNT=0x0501
+ HAVE_CONFIG_H;CLUTTER_COMPILATION;COGL_ENABLE_EXPERIMENTAL_API;DLL_EXPORT
+ $(LibBuildDefines);_DEBUG;CLUTTER_ENABLE_DEBUG
+ $(LibBuildDefines);G_DISABLE_ASSERT;G_DISABLE_CHECKS;G_DISABLE_CAST_CHECKS
+ $(BaseWinBuildDef);G_LOG_DOMAIN="Clutter";CLUTTER_LOCALEDIR="../share/locale";CLUTTER_SYSCONFDIR="../etc";COGL_DISABLE_DEPRECATION_WARNINGS
+ CLUTTER_DISABLE_DEPRECATION_WARNINGS;GLIB_DISABLE_DEPRECATION_WARNINGS
+ SDL_MAIN_HANDLED
+ $(BaseWinBuildDef);PREFIXDIR="/some/dummy/dir";$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)
+ $(BaseWinBuildDef);TESTS_DATADIR="../share/clutter-$(ApiVersion)/data";TESTS_DATA_DIR="../share/clutter-$(ApiVersion)/data";$(AvoidSDLMain)
+ $(TestProgDef);$(ClutterDisableDeprecationWarnings)
+
+
+ <_PropertySheetDisplayName>clutterbuilddefinesprops
+ $(SolutionDir)$(Configuration)\$(PlatformName)\bin\
+ $(SolutionDir)$(Configuration)\$(PlatformName)\obj\$(ProjectName)\
+
+
+
+ ..\..\..;..\..\..\clutter;$(GlibEtcInstallRoot)\include\cogl-1.0;$(GlibEtcInstallRoot)\include\pango-1.0;$(GlibEtcInstallRoot)\include\atk-1.0;$(GlibEtcInstallRoot)\include\json-glib-1.0;$(GlibEtcInstallRoot)\include\glib-2.0;$(GlibEtcInstallRoot)\lib\glib-2.0\include;$(GlibEtcInstallRoot)\include\cairo;$(GlibEtcInstallRoot)\include;%(AdditionalIncludeDirectories)
+ G_DISABLE_SINGLE_INCLUDES;%(PreprocessorDefinitions)
+ msvc_recommended_pragmas.h;%(ForcedIncludeFiles)
+ %(DisableSpecificWarnings)
+
+
+ cogl-pango-1.0.lib;cogl-path-1.0.lib;cogl-1.0.lib;glib-2.0.lib;gobject-2.0.lib;%(AdditionalDependencies)
+ $(GlibEtcInstallRoot)\lib;%(AdditionalLibraryDirectories)
+
+
+
+
+ $(BaseWinBuildDef)
+
+
+ $(LibBuildDefines)
+
+
+ $(DebugLibBuildDefines)
+
+
+ $(ReleaseLibBuildDefines)
+
+
+ $(ClutterBuildDefines)
+
+
+ $(ClutterDisableDeprecationWarnings)
+
+
+ $(AvoidSDLMain)
+
+
+ $(CallyTestDefs)
+
+
+ $(TestProgDef)
+
+
+ $(TestPerfProgDef)
+
+
+
diff --git a/build/win32/vs10/clutter-gen-srcs.props b/build/win32/vs10/clutter-gen-srcs.props
new file mode 100644
index 000000000..9d8e8b8b7
--- /dev/null
+++ b/build/win32/vs10/clutter-gen-srcs.props
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+ copy ..\..\..\clutter\config.h.win32 ..\..\..\clutter\config.h
+
+if exist ..\..\..\clutter\clutter.bld.win32.win32 goto DONE_CLUTTER_CONFIG_H
+
+if exist clutter.bld.GDK.win32 del clutter.bld.GDK.win32
+
+copy ..\..\..\clutter\clutter-config.h.win32 clutter.bld.win32.win32
+
+copy ..\..\..\clutter\clutter-config.h.win32 ..\..\..\clutter\clutter-config.h
+
+
+:DONE_CLUTTER_CONFIG_H
+
+
+if exist ..\..\..\clutter\clutter.bld.GDK.win32 goto DONE_CLUTTER_CONFIG_H
+
+if exist clutter.bld.win32.win32 del clutter.bld.win32.win32
+
+copy ..\..\..\clutter\clutter-config.h.win32_GDK clutter.bld.GDK.win32
+
+copy ..\..\..\clutter\clutter-config.h.win32_GDK ..\..\..\clutter\clutter-config.h
+
+
+:DONE_CLUTTER_CONFIG_H
+
+
+$(GlibEtcInstallRoot)\bin\glib-genmarshal --prefix=_clutter_marshal --header ..\..\..\clutter\clutter-marshal.list > ..\..\..\clutter\clutter-marshal.h
+
+
+echo #include "clutter-marshal.h" > ..\..\..\clutter\clutter-marshal.c
+
+$(GlibEtcInstallRoot)\bin\glib-genmarshal --prefix=_clutter_marshal --body ..\..\..\clutter\clutter-marshal.list >> ..\..\..\clutter\clutter-marshal.c
+
+ ..\..\..\clutter\clutter-action.h ..\..\..\clutter\clutter-actor-meta.h ..\..\..\clutter\clutter-actor.h ..\..\..\clutter\clutter-align-constraint.h ..\..\..\clutter\clutter-animatable.h ..\..\..\clutter\clutter-backend.h ..\..\..\clutter\clutter-bind-constraint.h ..\..\..\clutter\clutter-binding-pool.h ..\..\..\clutter\clutter-bin-layout.h ..\..\..\clutter\clutter-blur-effect.h ..\..\..\clutter\clutter-box-layout.h ..\..\..\clutter\clutter-brightness-contrast-effect.h ..\..\..\clutter\clutter-cairo.h ..\..\..\clutter\clutter-canvas.h ..\..\..\clutter\clutter-child-meta.h ..\..\..\clutter\clutter-click-action.h ..\..\..\clutter\clutter-cogl-compat.h ..\..\..\clutter\clutter-clone.h ..\..\..\clutter\clutter-color-static.h ..\..\..\clutter\clutter-color.h ..\..\..\clutter\clutter-colorize-effect.h ..\..\..\clutter\clutter-constraint.h ..\..\..\clutter\clutter-container.h ..\..\..\clutter\clutter-content.h ..\..\..\clutter\clutter-deform-effect.h ..\..\..\clutter\clutter-deprecated.h ..\..\..\clutter\clutter-desaturate-effect.h ..\..\..\clutter\clutter-device-manager.h ..\..\..\clutter\clutter-drag-action.h ..\..\..\clutter\clutter-drop-action.h ..\..\..\clutter\clutter-effect.h ..\..\..\clutter\clutter-enums.h ..\..\..\clutter\clutter-event.h ..\..\..\clutter\clutter-feature.h ..\..\..\clutter\clutter-fixed-layout.h ..\..\..\clutter\clutter-flow-layout.h ..\..\..\clutter\clutter-gesture-action.h ..\..\..\clutter\clutter-grid-layout.h ..\..\..\clutter\clutter-group.h ..\..\..\clutter\clutter-image.h ..\..\..\clutter\clutter-input-device.h ..\..\..\clutter\clutter-interval.h ..\..\..\clutter\clutter-keyframe-transition.h ..\..\..\clutter\clutter-keysyms.h ..\..\..\clutter\clutter-layout-manager.h ..\..\..\clutter\clutter-layout-meta.h ..\..\..\clutter\clutter-list-model.h ..\..\..\clutter\clutter-macros.h ..\..\..\clutter\clutter-main.h ..\..\..\clutter\clutter-model.h ..\..\..\clutter\clutter-offscreen-effect.h ..\..\..\clutter\clutter-page-turn-effect.h ..\..\..\clutter\clutter-paint-nodes.h ..\..\..\clutter\clutter-paint-node.h ..\..\..\clutter\clutter-pan-action.h ..\..\..\clutter\clutter-path-constraint.h ..\..\..\clutter\clutter-path.h ..\..\..\clutter\clutter-property-transition.h ..\..\..\clutter\clutter-rotate-action.h ..\..\..\clutter\clutter-script.h ..\..\..\clutter\clutter-scriptable.h ..\..\..\clutter\clutter-scroll-actor.h ..\..\..\clutter\clutter-settings.h ..\..\..\clutter\clutter-shader-effect.h ..\..\..\clutter\clutter-shader-types.h ..\..\..\clutter\clutter-swipe-action.h ..\..\..\clutter\clutter-snap-constraint.h ..\..\..\clutter\clutter-stage.h ..\..\..\clutter\clutter-stage-manager.h ..\..\..\clutter\clutter-tap-action.h ..\..\..\clutter\clutter-test-utils.h ..\..\..\clutter\clutter-texture.h ..\..\..\clutter\clutter-text.h ..\..\..\clutter\clutter-text-buffer.h ..\..\..\clutter\clutter-timeline.h ..\..\..\clutter\clutter-transition-group.h ..\..\..\clutter\clutter-transition.h ..\..\..\clutter\clutter-types.h ..\..\..\clutter\clutter-units.h ..\..\..\clutter\clutter-zoom-action.h ..\..\..\clutter\win32\clutter-win32.h
+ ..\..\..\clutter\gdk\clutter-gdk.h
+ perl $(GlibEtcInstallRoot)\bin\glib-mkenums --template ..\..\..\clutter\clutter-enum-types.h.in $(EnumHeaders) > ..\..\..\clutter\clutter-enum-types.h
+ perl $(GlibEtcInstallRoot)\bin\glib-mkenums --template ..\..\..\clutter\clutter-enum-types.c.in $(EnumHeaders) > ..\..\..\clutter\clutter-enum-types.c
+ perl $(GlibEtcInstallRoot)\bin\glib-mkenums --template ..\..\..\clutter\clutter-enum-types.h.in $(EnumHeaders) $(GdkEnumHeader) > ..\..\..\clutter\clutter-enum-types.h
+ perl $(GlibEtcInstallRoot)\bin\glib-mkenums --template ..\..\..\clutter\clutter-enum-types.c.in $(EnumHeaders) $(GdkEnumHeader) > ..\..\..\clutter\clutter-enum-types.c
+
+
+ <_PropertySheetDisplayName>cluttergensrcsprops
+
+
+
+ $(CopyConfigH)
+
+
+ $(CopyClutterConfigH)
+
+
+ $(CopyClutterConfigGDKH)
+
+
+ $(GenMarshalSrc)
+
+
+ $(EnumHeaders)
+
+
+ $(GdkEnumHeader)
+
+
+ $(GenEnumsSrcC)
+
+
+ $(GenEnumsSrcC)
+
+
+ $(GenEnumsSrcGDKH)
+
+
+ $(GenEnumsSrcGDKC)
+
+
+
diff --git a/build/win32/vs10/clutter-install.props b/build/win32/vs10/clutter-install.props
new file mode 100644
index 000000000..7ac292bed
--- /dev/null
+++ b/build/win32/vs10/clutter-install.props
@@ -0,0 +1,344 @@
+
+
+
+
+
+
+ $(SolutionDir)$(Configuration)\$(Platform)\bin
+ $(BinDir)\$(ClutterDllPrefix)clutter(ClutterDllSuffix).dll
+ $(BinDir)\cally-atkcomponent-example.exe;$(BinDir)\cally-atkeditabletext-example.exe;$(BinDir)\cally-atkevents-example.exe;$(BinDir)\cally-atktext-example.exe;$(BinDir)\cally-clone-example.exe;$(BinDir)\test-cogl-perf.exe;$(BinDir)\test-interactive-clutter.exe;$(BinDir)\test-picking-performance.exe;$(BinDir)\test-picking.exe;$(BinDir)\test-random-text.exe;$(BinDir)\test-state-hidden-performance.exe;$(BinDir)\test-state-interactive-performance.exe;$(BinDir)\test-state-mini-performance.exe;$(BinDir)\test-state-performance.exe;$(BinDir)\test-state-pick-performance.exe;$(BinDir)\test-text-perf-performance.exe;$(BinDir)\test-text-perf.exe;$(BinDir)\test-text.exe
+
+mkdir $(CopyDir)
+
+mkdir $(CopyDir)\bin
+
+mkdir $(CopyDir)\share\clutter-$(ApiVersion)\data
+
+copy $(BinDir)\*.dll $(CopyDir)\bin
+
+
+copy $(BinDir)\*.exe $(CopyDir)\bin
+
+copy ..\..\..\tests\interactive\*.png $(CopyDir)\share\clutter-$(ApiVersion)\data
+
+copy ..\..\..\tests\clutter-1.0.suppressions $(CopyDir)\share\clutter-$(ApiVersion)\data
+
+copy ..\..\..\tests\interactive\*.json $(CopyDir)\share\clutter-$(ApiVersion)\data
+
+
+
+mkdir $(CopyDir)\lib
+
+copy $(BinDir)\*-$(ApiVersion).lib $(CopyDir)\lib
+
+
+mkdir $(CopyDir)\include\clutter-$(ApiVersion)\clutter\win32
+
+if "$(Configuration)" == "Release" goto DO_INSTALL_COMMON_HEADERS
+if "$(Configuration)" == "Debug" goto DO_INSTALL_COMMON_HEADERS
+
+$(ClutterDoInstallGDK)
+
+:DO_INSTALL_COMMON_HEADERS
+
+copy ..\..\..\clutter\clutter.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-actor-meta.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-actor.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-align-constraint.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-animatable.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-backend.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-bind-constraint.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-binding-pool.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-bin-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-blur-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-box-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-brightness-contrast-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-cairo.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-canvas.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-child-meta.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-click-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-clone.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-cogl-compat.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-color-static.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-color.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-colorize-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-config.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-constraint.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-content.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-container.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-deform-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-deprecated.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-desaturate-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-device-manager.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-drag-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-drop-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-enums.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-enum-types.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-event.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-feature.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-fixed-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-flow-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-gesture-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-grid-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-group.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-image.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-input-device.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-interval.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-keyframe-transition.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-keysyms.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-layout-manager.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-layout-meta.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-list-model.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-macros.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-main.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-marshal.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-model.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-offscreen-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-page-turn-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-paint-node.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-paint-nodes.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-pan-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-path-constraint.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-path.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-property-transition.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-rotate-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-script.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-scriptable.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-scroll-actor.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-settings.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-shader-effect.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-shader-types.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-snap-constraint.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-stage.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-stage-manager.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-stage-window.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-swipe-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-tap-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-test-utils.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-texture.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-text.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-text-buffer.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-timeline.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-transition.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-transition-group.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-types.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-units.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-version.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\clutter-zoom-action.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter
+
+copy ..\..\..\clutter\win32\clutter-win32.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\win32
+
+
+mkdir $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-actor.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-alpha.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-animatable.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-animation.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-animator.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-backend.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour-depth.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour-ellipse.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour-opacity.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour-path.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour-rotate.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-behaviour-scale.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-bin-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-box.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-cairo-texture.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-container.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-fixed.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-frame-source.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-group.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-input-device.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-keysyms.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-main.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-media.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-rectangle.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-score.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-shader.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-stage.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-stage-manager.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-state.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-table-layout.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-texture.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-timeline.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-timeout-pool.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+copy ..\..\..\clutter\deprecated\clutter-util.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\deprecated
+
+
+mkdir $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-actor.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-clone.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-factory.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-group.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-main.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-rectangle.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-root.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-stage.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-text.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-texture.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+copy ..\..\..\clutter\cally\cally-util.h $(CopyDir)\include\clutter-$(ApiVersion)\cally
+
+
+mkdir $(CopyDir)\include\clutter-$(ApiVersion)\clutter\gdk
+
+copy ..\..\..\clutter\gdk\clutter-gdk.h $(CopyDir)\include\clutter-$(ApiVersion)\clutter\gdk
+
+
+
+ <_PropertySheetDisplayName>clutterinstallprops
+
+
+
+ $(BinDir)
+
+
+ $(InstalledDlls)
+
+
+ $(InstalledBins)
+
+
+ $(ClutterDoInstall)
+
+
+ $(ClutterDoInstallGDK)
+
+
+
diff --git a/build/win32/vs10/clutter-version-paths.props b/build/win32/vs10/clutter-version-paths.props
new file mode 100644
index 000000000..997854e49
--- /dev/null
+++ b/build/win32/vs10/clutter-version-paths.props
@@ -0,0 +1,57 @@
+
+
+
+ 10
+ $(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)
+ 1.0
+ $(GlibEtcInstallRoot)
+ $(SolutionDir)$(Configuration)\$(PlatformName)\obj\$(ProjectName)\
+ lib
+ -$(ApiVersion)-0
+
+ -1-vs$(VSVer)
+
+ $(ClutterSeparateVSDllPrefix)
+ $(ClutterSeparateVSDllSuffix)
+
+
+ <_PropertySheetDisplayName>clutterversionpathsprops
+
+
+
+ $(VSVer)
+
+
+ $(GlibEtcInstallRoot)
+
+
+ $(CopyDir)
+
+
+ $(DefDir)
+
+
+ $(ApiVersion)
+
+
+ $(ClutterLibtoolCompatibleDllPrefix)
+
+
+ $(ClutterLibtoolCompatibleDllSuffix)
+
+
+ $(ClutterSeparateVSDllPrefix)
+
+
+ $(ClutterSeparateVSDllSuffix)
+
+
+ $(ClutterDllPrefix)
+
+
+ $(ClutterDllSuffix)
+
+
+
diff --git a/build/win32/vs10/clutter.props b/build/win32/vs10/clutter.props
deleted file mode 100644
index 8d7ef7610..000000000
--- a/build/win32/vs10/clutter.props
+++ /dev/null
@@ -1,531 +0,0 @@
-
-
-
- ..\..\..\..\vs10\$(Platform)
- ..\..\..\vs10\$(Platform)
- ..\..\vs10\$(Platform)
- 1.0
- $(GlibEtcInstallRoot)
- $(SolutionDir)$(Configuration)\$(PlatformName)\obj\$(ProjectName)\
- _WIN32_WINNT=0x0500
- $(BaseWinBuildDef)
- HAVE_CONFIG_H;CLUTTER_COMPILATION;COGL_ENABLE_EXPERIMENTAL_API;COGL_HAS_WIN32_SUPPORT;CLUTTER_ENABLE_EXPERIMENTAL_API
- $(LibBuildDefines);_DEBUG;CLUTTER_ENABLE_DEBUG
- $(LibBuildDefines);G_DISABLE_ASSERT;G_DISABLE_CHECKS;G_DISABLE_CAST_CHECKS
- $(BaseBuildDef);G_LOG_DOMAIN="Clutter";CLUTTER_LOCALEDIR="../share/locale";CLUTTER_SYSCONFDIR="../etc"
- CLUTTER_DISABLE_DEPRECATION_WARNINGS;GLIB_DISABLE_DEPRECATION_WARNINGS
- $(BaseWinBuildDef);PREFIXDIR="/some/dummy/dir";$(ClutterDisableDeprecationWarnings)
- $(BaseBuildDef);TESTS_DATADIR="../share/clutter-$(ClutterApiVersion)/data"
- $(BaseBuildDef);TESTS_DATA_DIR="../share/clutter-$(ClutterApiVersion)/data";$(ClutterDisableDeprecationWarnings)
-
-if exist ..\..\..\clutter\config.h goto DONE_CONFIG_H
-
-copy ..\..\..\clutter\config.h.win32 ..\..\..\clutter\config.h
-
-:DONE_CONFIG_H
-
-if exist ..\..\..\clutter\clutter.bld.win32.win32 goto DONE_CLUTTER_CONFIG_H
-
-del clutter.bld.*.win32
-
-copy ..\..\..\clutter\clutter-config.h.win32 clutter.bld.win32.win32
-
-copy ..\..\..\clutter\clutter-config.h.win32 ..\..\..\clutter\clutter-config.h
-
-:DONE_CLUTTER_CONFIG_H
-
-
-if exist ..\..\..\clutter\config.h goto DONE_CONFIG_H
-
-copy ..\..\..\clutter\config.h.win32 ..\..\..\clutter\config.h
-
-:DONE_CONFIG_H
-
-if exist ..\..\..\clutter\clutter.bld.GDK.win32 goto DONE_CLUTTER_CONFIG_H
-
-del clutter.bld.*.win32
-
-copy ..\..\..\clutter\clutter-config.h.win32_GDK clutter.bld.GDK.win32
-
-copy ..\..\..\clutter\clutter-config.h.win32_GDK ..\..\..\clutter\clutter-config.h
-
-:DONE_CLUTTER_CONFIG_H
-
-
-if exist ..\..\..\clutter\clutter-marshal.h goto DONE_CLUTTER_MARSHAL_H
-
-cd ..\..\..\clutter
-
-$(GlibGenMarshalPath)\bin\glib-genmarshal --prefix=_clutter_marshal --header clutter-marshal.list > clutter-marshal.h
-
-cd ..\build\win32\vs10
-
-:DONE_CLUTTER_MARSHAL_H
-
-
-if exist ..\..\..\clutter\clutter-marshal.c goto DONE_CLUTTER_MARSHAL_C
-
-cd ..\..\..\clutter
-
-echo #include "clutter-marshal.h" > clutter-marshal.c
-
-$(GlibGenMarshalPath)\bin\glib-genmarshal --prefix=_clutter_marshal --body clutter-marshal.list >> clutter-marshal.c
-
-cd ..\build\win32\vs10
-
-:DONE_CLUTTER_MARSHAL_C
-
-
-cd ..
-
-gen-enums.bat $(GlibMkEnumsPath)
-
-cd .\vs10
-
-
-
-mkdir $(CopyDir)
-
-mkdir $(CopyDir)\bin
-
-mkdir $(CopyDir)\share\clutter-$(ClutterApiVersion)\data
-
-copy $(SolutionDir)$(Configuration)\$(Platform)\bin\*.dll $(CopyDir)\bin
-
-
-copy $(SolutionDir)$(Configuration)\$(Platform)\bin\*.exe $(CopyDir)\bin
-
-copy ..\*.bat $(CopyDir)\bin
-
-copy ..\..\..\tests\data\*.png $(CopyDir)\share\clutter-$(ClutterApiVersion)\data
-
-copy ..\..\..\tests\data\clutter-1.0.suppressions $(CopyDir)\share\clutter-$(ClutterApiVersion)\data
-
-copy ..\..\..\tests\data\*.json $(CopyDir)\share\clutter-$(ClutterApiVersion)\data
-
-
-mkdir $(CopyDir)\lib
-
-copy $(SolutionDir)$(Configuration)\$(Platform)\bin\*-$(ClutterApiVersion).lib $(CopyDir)\lib
-
-
-mkdir $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\win32
-
-
-copy ..\..\..\clutter\clutter.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-action.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-actor-meta.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-actor.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-align-constraint.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-alpha.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-animatable.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-animation.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-animator.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-backend.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-bind-constraint.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-binding-pool.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-bin-layout.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-blur-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-box-layout.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-brightness-contrast-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-cairo-texture.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-canvas.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-child-meta.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-click-action.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-clone.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-cogl-compat.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-color-static.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-color.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-colorize-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-config.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-constraint.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-content.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-container.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-deform-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-deprecated.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-desaturate-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-device-manager.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-drag-action.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-drop-action.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-enums.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-enum-types.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-event.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-feature.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-fixed-layout.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-flow-layout.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-gesture-action.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-group.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-image.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-input-device.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-interval.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-keysyms.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-layout-manager.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-layout-meta.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-list-model.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-macros.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-main.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-marshal.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-media.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-model.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-offscreen-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-page-turn-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-paint-node.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-paint-nodes.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-path-constraint.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-path.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-property-transition.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-script.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-scriptable.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-settings.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-shader-effect.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-shader-types.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-snap-constraint.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-stage.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-stage-manager.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-stage-window.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-state.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-swipe-action.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-table-layout.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-texture.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-text.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-text-buffer.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-timeline.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-transition.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-types.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-units.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\clutter-version.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter
-
-copy ..\..\..\clutter\win32\clutter-win32.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\win32
-
-
-mkdir $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-actor.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-animatable.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-animation.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-backend.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour-depth.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour-ellipse.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour-opacity.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour-path.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour-rotate.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-behaviour-scale.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-box.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-cairo-texture.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-container.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-fixed.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-frame-source.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-group.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-keysyms.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-main.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-rectangle.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-score.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-shader.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-stage.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-stage-manager.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-texture.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-timeline.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-timeout-pool.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-copy ..\..\..\clutter\deprecated\clutter-util.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\deprecated
-
-
-mkdir $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-actor.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-clone.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-factory.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-group.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-main.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-rectangle.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-root.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-stage.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-text.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-texture.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-copy ..\..\..\clutter\cally\cally-util.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\cally
-
-
-
-
-mkdir $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\gdk
-
-copy ..\..\..\clutter\gdk\clutter-gdk.h $(CopyDir)\include\clutter-$(ClutterApiVersion)\clutter\gdk
-
-
-mkdir $(CopyDir)\bin
-
-copy $(SolutionDir)Release\$(Platform)\bin\*.dll $(CopyDir)\bin
-
-copy $(SolutionDir)Release\$(Platform)\bin\*.exe $(CopyDir)\bin
-
-
-mkdir $(CopyDir)\lib
-
-copy $(SolutionDir)Release\$(Platform)\bin\*-$(ClutterApiVersion).lib $(CopyDir)\lib
-
-
-mkdir $(CopyDir)\bin
-
-copy $(SolutionDir)Debug\$(Platform)\bin\*.dll $(CopyDir)\bin
-
-copy $(SolutionDir)Debug\$(Platform)\bin\*.exe $(CopyDir)\bin
-
-
-mkdir $(CopyDir)\lib
-
-copy $(SolutionDir)Debug\$(Platform)\bin\*-$(ClutterApiVersion).lib $(CopyDir)\lib
-
-
- echo EXPORTS > $(DefDir)\clutter.def
-
- cl -EP -DHAVE_CAIRO -DCLUTTER_WINDOWING_WIN32 -DCLUTTER_ENABLE_EXPERIMENTAL_API ..\..\..\clutter\clutter.symbols >> $(DefDir)\clutter.def
-
-
-
- echo EXPORTS > $(DefDir)\clutter.def
-
- cl -EP -DHAVE_CAIRO -DCLUTTER_WINDOWING_WIN32 -DCLUTTER_WINDOWING_GDK -DCLUTTER_ENABLE_EXPERIMENTAL_API ..\..\..\clutter\clutter.symbols >> $(DefDir)\clutter.def
-
-
- lib
- -$(ClutterApiVersion)-0
-
- -1-vs10
- $(ClutterSeparateVS10DllPrefix)
- $(ClutterSeparateVS10DllSuffix)
-
-
- <_PropertySheetDisplayName>clutterprops
- $(SolutionDir)$(Configuration)\$(PlatformName)\bin\
- $(SolutionDir)$(Configuration)\$(PlatformName)\obj\$(ProjectName)\
-
-
-
- ..\..\..;..\..\..\clutter;$(GlibEtcInstallRoot)\include;$(GlibEtcInstallRoot)\include\glib-2.0;$(GlibEtcInstallRoot)\include\cairo;$(GlibEtcInstallRoot)\include\atk-1.0;$(GlibEtcInstallRoot)\include\pango-1.0;$(GlibEtcInstallRoot)\include\cogl-1.0;$(GlibEtcInstallRoot)\include\json-glib-1.0;$(GlibEtcInstallRoot)\lib\glib-2.0\include;%(AdditionalIncludeDirectories)
- G_DISABLE_SINGLE_INCLUDES;%(PreprocessorDefinitions)
- msvc_recommended_pragmas.h;%(ForcedIncludeFiles)
- %(DisableSpecificWarnings)
-
-
- cogl-pango-1.0.lib;cogl-1.0.lib;glib-2.0.lib;gobject-2.0.lib;%(AdditionalDependencies)
- $(GlibEtcInstallRoot)\lib;%(AdditionalLibraryDirectories)
-
-
-
-
- $(GlibEtcInstallRoot)
-
-
- $(CopyDir)
-
-
- $(DefDir)
-
-
- $(GlibMkEnumsPath)
-
-
- $(GlibGenMarshalPath)
-
-
- $(ClutterApiVersion)
-
-
- $(BaseWinBuildDef)
-
-
- $(BaseBuildDef)
-
-
- $(LibBuildDefines)
-
-
- $(DebugLibBuildDefines)
-
-
- $(ReleaseLibBuildDefines)
-
-
- $(ClutterBuildDefines)
-
-
- $(CallyTestDefs)
-
-
- $(TestProgDef)
-
-
- $(ClutterDisableDeprecationWarnings)
-
-
- $(TestPerfProgDef)
-
-
- $(PreBuildGDK)
-
-
- $(PreBuildWin)
-
-
- $(PreBuildCmd2)
-
-
- $(ClutterDoInstall)
-
-
- $(ClutterDoInstallGDK)
-
-
- $(ClutterDoInstallReleaseBin)
-
-
- $(ClutterDoInstallDebugBin)
-
-
- $(GenerateClutterDef)
-
-
- $(GenerateClutterGDKDef)
-
-
- $(ClutterLibtoolCompatibleDllPrefix)
-
-
- $(ClutterLibtoolCompatibleDllSuffix)
-
-
- $(ClutterSeparateVS10DllPrefix)
-
-
- $(ClutterSeparateVS10DllSuffix)
-
-
- $(ClutterDllPrefix)
-
-
- $(ClutterDllSuffix)
-
-
-
diff --git a/build/win32/vs10/clutter.sln b/build/win32/vs10/clutter.sln
index 1302d3a5c..9a51e7200 100644
--- a/build/win32/vs10/clutter.sln
+++ b/build/win32/vs10/clutter.sln
@@ -37,8 +37,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cally-atkevents-example", "
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cally-clone-example", "cally-clone-example.vcxproj", "{E77D40D0-19D4-4865-BE20-B6DA05BA234D}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-conformance-clutter", "test-conformance-clutter.vcxproj", "{0F08F253-DE1A-40CB-A890-93AE3CA23ADE}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-interactive-clutter", "test-interactive-clutter.vcxproj", "{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "install", "install.vcxproj", "{35B2A4AC-7235-4FC7-995D-469D59195041}"
@@ -343,22 +341,6 @@ Global
{E77D40D0-19D4-4865-BE20-B6DA05BA234D}.Release|Win32.Build.0 = Release|Win32
{E77D40D0-19D4-4865-BE20-B6DA05BA234D}.Release|x64.ActiveCfg = Release|x64
{E77D40D0-19D4-4865-BE20-B6DA05BA234D}.Release|x64.Build.0 = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|Win32.ActiveCfg = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|Win32.Build.0 = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|x64.ActiveCfg = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|x64.Build.0 = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|Win32.ActiveCfg = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|Win32.Build.0 = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|x64.ActiveCfg = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|x64.Build.0 = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|Win32.ActiveCfg = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|Win32.Build.0 = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|x64.ActiveCfg = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|x64.Build.0 = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|Win32.ActiveCfg = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|Win32.Build.0 = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|x64.ActiveCfg = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|x64.Build.0 = Release|x64
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Debug_GDK|Win32.ActiveCfg = Debug|Win32
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Debug_GDK|Win32.Build.0 = Debug|Win32
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Debug_GDK|x64.ActiveCfg = Debug|x64
@@ -375,18 +357,18 @@ Global
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Release|Win32.Build.0 = Release|Win32
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Release|x64.ActiveCfg = Release|x64
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Release|x64.Build.0 = Release|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.ActiveCfg = Debug_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.Build.0 = Debug_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.ActiveCfg = Debug_GDK|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.Build.0 = Debug_GDK|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.ActiveCfg = Debug|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.Build.0 = Debug|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.ActiveCfg = Debug|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.Build.0 = Debug|x64
{35B2A4AC-7235-4FC7-995D-469D59195041}.Debug|Win32.ActiveCfg = Debug|Win32
{35B2A4AC-7235-4FC7-995D-469D59195041}.Debug|Win32.Build.0 = Debug|Win32
{35B2A4AC-7235-4FC7-995D-469D59195041}.Debug|x64.ActiveCfg = Debug|x64
{35B2A4AC-7235-4FC7-995D-469D59195041}.Debug|x64.Build.0 = Debug|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.ActiveCfg = Release_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.Build.0 = Release_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.ActiveCfg = Release_GDK|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.Build.0 = Release_GDK|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.ActiveCfg = Release|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.Build.0 = Release|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.ActiveCfg = Release|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.Build.0 = Release|x64
{35B2A4AC-7235-4FC7-995D-469D59195041}.Release|Win32.ActiveCfg = Release|Win32
{35B2A4AC-7235-4FC7-995D-469D59195041}.Release|Win32.Build.0 = Release|Win32
{35B2A4AC-7235-4FC7-995D-469D59195041}.Release|x64.ActiveCfg = Release|x64
diff --git a/build/win32/vs10/clutter.vcxproj.filtersin b/build/win32/vs10/clutter.vcxproj.filtersin
index bb25d10c7..2d910f754 100644
--- a/build/win32/vs10/clutter.vcxproj.filtersin
+++ b/build/win32/vs10/clutter.vcxproj.filtersin
@@ -23,6 +23,14 @@
Sources
Sources
+
+ Resource Files
+ Resource Files
+ Resource Files
+ Resource Files
+ Resource Files
+ Resource Files
+
Resource Files
diff --git a/build/win32/vs10/clutter.vcxprojin b/build/win32/vs10/clutter.vcxprojin
index ecab540aa..6a6263fdd 100644
--- a/build/win32/vs10/clutter.vcxprojin
+++ b/build/win32/vs10/clutter.vcxprojin
@@ -44,70 +44,78 @@
DynamicLibrary
MultiByte
true
+ v100
DynamicLibrary
MultiByte
true
+ v100
DynamicLibrary
MultiByte
+ v100
DynamicLibrary
MultiByte
+ v100
DynamicLibrary
MultiByte
+ v100
DynamicLibrary
MultiByte
+ v100
DynamicLibrary
MultiByte
+ v100
DynamicLibrary
MultiByte
+ v100
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -126,11 +134,11 @@
- $(PreBuildWin)$(PreBuildCmd2)
+ $(DoConfigs)
Disabled
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(SolutionDir);%(AdditionalIncludeDirectories)
$(DebugLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
true
EnableFastChecks
@@ -140,14 +148,10 @@
Level3
EditAndContinue
-
- $(GenerateClutterDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
MachineX86
@@ -155,11 +159,11 @@
- $(PreBuildGDK)$(PreBuildCmd2)
+ $(DoConfigs)
Disabled
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;$(SolutionDir);%(AdditionalIncludeDirectories)
$(DebugLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
true
EnableFastChecks
@@ -169,14 +173,10 @@
Level3
EditAndContinue
-
- $(GenerateClutterGDKDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;gdk-3.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
MachineX86
@@ -184,11 +184,11 @@
- $(PreBuildWin)$(PreBuildCmd2)
+ $(DoConfigs)
Disabled
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(SolutionDir);%(AdditionalIncludeDirectories)
$(DebugLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
true
EnableFastChecks
@@ -198,14 +198,10 @@
Level3
ProgramDatabase
-
- $(GenerateClutterDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
MachineX64
@@ -213,11 +209,11 @@
- $(PreBuildGDK)$(PreBuildCmd2)
+ $(DoConfigs)
Disabled
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;$(SolutionDir);%(AdditionalIncludeDirectories)
$(DebugLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
true
EnableFastChecks
@@ -227,14 +223,10 @@
Level3
ProgramDatabase
-
- $(GenerateClutterGDKDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;gdk-3.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
MachineX64
@@ -242,12 +234,12 @@
- $(PreBuildWin)$(PreBuildCmd2)
+ $(DoConfigs)
MaxSpeed
true
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(SolutionDir);%(AdditionalIncludeDirectories)
$(ReleaseLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -256,14 +248,10 @@
Level3
ProgramDatabase
-
- $(GenerateClutterDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
true
@@ -273,12 +261,12 @@
- $(PreBuildGDK)$(PreBuildCmd2)
+ $(DoConfigs)
MaxSpeed
true
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;$(SolutionDir);%(AdditionalIncludeDirectories)
$(ReleaseLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -287,14 +275,10 @@
Level3
ProgramDatabase
-
- $(GenerateClutterGDKDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;gdk-3.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
true
@@ -304,10 +288,10 @@
- $(PreBuildWin)$(PreBuildCmd2)
+ $(DoConfigs)
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(SolutionDir);%(AdditionalIncludeDirectories)
$(ReleaseLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -315,14 +299,10 @@
Level3
ProgramDatabase
-
- $(GenerateClutterDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
true
@@ -332,10 +312,10 @@
- $(PreBuildGDK)$(PreBuildCmd2)
+ $(DoConfigs)
- ..\..\..\clutter;..\..\..\clutter\win32;..\..\..\clutter\deprecated;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;%(AdditionalIncludeDirectories)
+ ..\..\..\clutter;..\..\..\clutter\cally;$(GlibEtcInstallRoot)\include\gtk-3.0;$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0;$(SolutionDir);%(AdditionalIncludeDirectories)
$(ReleaseLibBuildDefines);$(ClutterBuildDefines);%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -343,14 +323,10 @@
Level3
ProgramDatabase
-
- $(GenerateClutterGDKDef)
-
opengl32.lib;winmm.lib;intl.lib;json-glib-1.0.lib;gdk-3.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo-gobject.lib;cairo.lib;atk-1.0.lib;gmodule-2.0.lib;gio-2.0.lib;%(AdditionalDependencies)
$(OutDir)$(ClutterDllPrefix)$(ProjectName)$(ClutterDllSuffix).dll
- $(IntDir)\clutter.def
- $(TargetDir)$(ProjectName)-$(ClutterApiVersion).lib
+ $(TargetDir)$(ProjectName)-$(ApiVersion).lib
true
Windows
true
@@ -397,10 +373,144 @@
true
+
+
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+ Copying config.h from config.h.win32...
+ $(CopyConfigH)
+ ..\..\..\clutter\config.h;%(Outputs)
+
+
+ Copying clutter-config.h from clutter-config.h.win32_GDK...
+ $(CopyClutterConfigGDKH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.GDK.win32;%(Outputs)
+ Copying clutter-config.h from clutter-config.h.win32_GDK...
+ $(CopyClutterConfigGDKH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.GDK.win32;%(Outputs)
+ Copying clutter-config.h from clutter-config.h.win32_GDK...
+ $(CopyClutterConfigGDKH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.GDK.win32;%(Outputs)
+ Copying clutter-config.h from clutter-config.h.win32_GDK...
+ $(CopyClutterConfigGDKH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.GDK.win32;%(Outputs)
+
+
+ Copying clutter-config.h from clutter-config.h.win32...
+ $(CopyClutterConfigH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.win32.win32;%(Outputs)
+ Copying clutter-config.h from clutter-config.h.win32...
+ $(CopyClutterConfigH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.win32.win32;%(Outputs)
+ Copying clutter-config.h from clutter-config.h.win32...
+ $(CopyClutterConfigH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.win32.win32;%(Outputs)
+ Copying clutter-config.h from clutter-config.h.win32...
+ $(CopyClutterConfigH)
+ ..\..\..\clutter\clutter-config.h;clutter.bld.win32.win32;%(Outputs)
+
+
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+ Generating Marshalling Sources...
+ $(GenMarshalSrc)
+ ..\..\..\clutter\clutter-marshal.h;..\..\..\clutter\clutter-marshal.c;%(Outputs)
+
+
+ Generating Enumeration Header...
+ $(GenEnumsSrcGDKH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcGDKH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcGDKH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcGDKH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+ Generating Enumeration Header...
+ $(GenEnumsSrcH)
+ ..\..\..\clutter\clutter-enum-types.h;%(Outputs)
+
+
+ Generating Enumeration Sources...
+ $(GenEnumsSrcGDKC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcGDKC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcGDKC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcGDKC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+ Generating Enumeration Sources...
+ $(GenEnumsSrcC)
+ ..\..\..\clutter\clutter-enum-types.c;%(Outputs)
+
+
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/install.vcxproj b/build/win32/vs10/install.vcxproj
index 30a906cad..e87e91ef7 100644
--- a/build/win32/vs10/install.vcxproj
+++ b/build/win32/vs10/install.vcxproj
@@ -5,34 +5,18 @@
Debug
Win32
-
- Debug_GDK
- Win32
-
Debug
x64
-
- Debug_GDK
- x64
-
Release
Win32
-
- Release_GDK
- Win32
-
Release
x64
-
- Release_GDK
- x64
-
{35B2A4AC-7235-4FC7-995D-469D59195041}
@@ -43,128 +27,76 @@
Utility
MultiByte
true
-
-
- Utility
- MultiByte
- true
+ v100
Utility
MultiByte
-
-
- Utility
- MultiByte
+ v100
Utility
MultiByte
true
-
-
- Utility
- MultiByte
- true
+ v100
Utility
MultiByte
-
-
- Utility
- MultiByte
+ v100
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
$(GlibEtcInstallRoot)\
- $(GlibEtcInstallRoot)\
$(GlibEtcInstallRoot)\
- $(GlibEtcInstallRoot)\
-
$(GlibEtcInstallRoot)\
- $(GlibEtcInstallRoot)\
$(GlibEtcInstallRoot)\
- $(GlibEtcInstallRoot)\
-
-
- $(ClutterDoInstallDebugBin) $(ClutterDoInstall)
-
-
-
-
- $(ClutterDoInstallDebugBin) $(ClutterDoInstall) $(ClutterDoInstallGDK)
-
-
- $(ClutterDoInstallDebugBin) $(ClutterDoInstall)
-
-
-
-
- $(ClutterDoInstallDebugBin) $(ClutterDoInstall) $(ClutterDoInstallGDK)
-
-
- $(ClutterDoInstallReleaseBin) $(ClutterDoInstall)
-
-
-
-
- $(ClutterDoInstallReleaseBin) $(ClutterDoInstall) $(ClutterDoInstallGDK)
-
-
- $(ClutterDoInstallReleaseBin) $(ClutterDoInstall)
-
-
-
-
- $(ClutterDoInstallReleaseBin) $(ClutterDoInstall) $(ClutterDoInstallGDK)
-
+
+
+ Installing Build Results...
+ $(ClutterDoInstall)
+ $(InstalledDlls);$(InstalledBins);%(Outputs)
+ Installing Build Results...
+ $(ClutterDoInstall)
+ $(InstalledDlls);$(InstalledBins);%(Outputs)
+ Installing Build Results...
+ $(ClutterDoInstall)
+ $(InstalledDlls);$(InstalledBins);%(Outputs)
+ Installing Build Results...
+ $(ClutterDoInstall)
+ $(InstalledDlls);$(InstalledBins);%(Outputs)
+
+
{4b2c0ee0-f1bd-499c-acad-260cf14c352e}
@@ -194,10 +126,6 @@
{0da94d83-b64e-40ac-8074-96c2416bbbe8}
false
-
- {0f08f253-de1a-40cb-a890-93ae3ca23ade}
- false
-
{75f9e5af-040c-448e-96be-c282efffe2d9}
false
@@ -250,4 +178,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-cogl-perf.vcxproj b/build/win32/vs10/test-cogl-perf.vcxproj
index 17d55c491..0017cf88a 100644
--- a/build/win32/vs10/test-cogl-perf.vcxproj
+++ b/build/win32/vs10/test-cogl-perf.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -71,7 +75,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -89,7 +93,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -113,7 +117,7 @@
MaxSpeed
true
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -131,7 +135,7 @@
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -163,4 +167,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-cogl-perf.vcxproj.filters b/build/win32/vs10/test-cogl-perf.vcxproj.filters
index c351e2255..e4a80eee3 100644
--- a/build/win32/vs10/test-cogl-perf.vcxproj.filters
+++ b/build/win32/vs10/test-cogl-perf.vcxproj.filters
@@ -11,4 +11,4 @@
Sources
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-conformance-clutter.vcxproj.filtersin b/build/win32/vs10/test-conformance-clutter.vcxproj.filtersin
deleted file mode 100644
index 8028da3d1..000000000
--- a/build/win32/vs10/test-conformance-clutter.vcxproj.filtersin
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
-
-#include "testconformance.vs10.sourcefiles.filters"
-
-
\ No newline at end of file
diff --git a/build/win32/vs10/test-conformance-clutter.vcxprojin b/build/win32/vs10/test-conformance-clutter.vcxprojin
deleted file mode 100644
index be31e13ea..000000000
--- a/build/win32/vs10/test-conformance-clutter.vcxprojin
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}
- testconformanceclutter
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;COGL_ENABLE_EXPERIMENTAL_API;$(TestProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- pango-1.0.lib;cairo.lib;atk-1.0.lib;OpenGL32.lib;%(AdditionalDependencies)
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;COGL_ENABLE_EXPERIMENTAL_API;$(TestProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- pango-1.0.lib;cairo.lib;atk-1.0.lib;OpenGL32.lib;%(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- COGL_ENABLE_EXPERIMENTAL_API;$(TestProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- pango-1.0.lib;cairo.lib;atk-1.0.lib;OpenGL32.lib;%(AdditionalDependencies)
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- COGL_ENABLE_EXPERIMENTAL_API;$(TestProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- pango-1.0.lib;cairo.lib;atk-1.0.lib;OpenGL32.lib;%(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-#include "testconformance.vs10.sourcefiles"
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build/win32/vs10/test-interactive-clutter.vcxproj.filtersin b/build/win32/vs10/test-interactive-clutter.vcxproj.filtersin
index a5f15fa43..926c30eb7 100644
--- a/build/win32/vs10/test-interactive-clutter.vcxproj.filtersin
+++ b/build/win32/vs10/test-interactive-clutter.vcxproj.filtersin
@@ -9,4 +9,4 @@
#include "testinteractive.vs10.sourcefiles.filters"
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-interactive-clutter.vcxprojin b/build/win32/vs10/test-interactive-clutter.vcxprojin
index cab15264b..2511fafdb 100644
--- a/build/win32/vs10/test-interactive-clutter.vcxprojin
+++ b/build/win32/vs10/test-interactive-clutter.vcxprojin
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -169,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-picking-performance.vcxproj b/build/win32/vs10/test-picking-performance.vcxproj
index 3ca2c1000..e179adeea 100644
--- a/build/win32/vs10/test-picking-performance.vcxproj
+++ b/build/win32/vs10/test-picking-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {2035D56A-E748-475F-B3D5-C123BF652143}
- testpickingperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {2035D56A-E748-475F-B3D5-C123BF652143}
+ testpickingperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-picking-performance.vcxproj.filters b/build/win32/vs10/test-picking-performance.vcxproj.filters
index f90e6956f..8ffda0997 100644
--- a/build/win32/vs10/test-picking-performance.vcxproj.filters
+++ b/build/win32/vs10/test-picking-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-picking.vcxproj b/build/win32/vs10/test-picking.vcxproj
index 940cbc287..f33e9f50b 100644
--- a/build/win32/vs10/test-picking.vcxproj
+++ b/build/win32/vs10/test-picking.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -71,7 +75,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -90,7 +94,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -114,7 +118,7 @@
MaxSpeed
true
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -132,7 +136,7 @@
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -164,4 +168,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-picking.vcxproj.filters b/build/win32/vs10/test-picking.vcxproj.filters
index 43d775421..27fac1be5 100644
--- a/build/win32/vs10/test-picking.vcxproj.filters
+++ b/build/win32/vs10/test-picking.vcxproj.filters
@@ -11,4 +11,4 @@
Sources
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-random-text.vcxproj b/build/win32/vs10/test-random-text.vcxproj
index 0386ab3dc..50d58256f 100644
--- a/build/win32/vs10/test-random-text.vcxproj
+++ b/build/win32/vs10/test-random-text.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -71,7 +75,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -89,7 +93,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -113,7 +117,7 @@
MaxSpeed
true
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -131,7 +135,7 @@
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -163,4 +167,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-random-text.vcxproj.filters b/build/win32/vs10/test-random-text.vcxproj.filters
index 22be023a1..9cfb50c71 100644
--- a/build/win32/vs10/test-random-text.vcxproj.filters
+++ b/build/win32/vs10/test-random-text.vcxproj.filters
@@ -11,4 +11,4 @@
Sources
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-state-hidden-performance.vcxproj b/build/win32/vs10/test-state-hidden-performance.vcxproj
index 15f68716d..daf9cc54c 100644
--- a/build/win32/vs10/test-state-hidden-performance.vcxproj
+++ b/build/win32/vs10/test-state-hidden-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {2D60135E-2E37-4F54-A1C5-43BCD5BBBA4F}
- teststatehiddenperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {2D60135E-2E37-4F54-A1C5-43BCD5BBBA4F}
+ teststatehiddenperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-state-hidden-performance.vcxproj.filters b/build/win32/vs10/test-state-hidden-performance.vcxproj.filters
index c0ceb02c7..91e778e77 100644
--- a/build/win32/vs10/test-state-hidden-performance.vcxproj.filters
+++ b/build/win32/vs10/test-state-hidden-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-state-interactive-performance.vcxproj b/build/win32/vs10/test-state-interactive-performance.vcxproj
index a431a1f4a..fd3fe7d10 100644
--- a/build/win32/vs10/test-state-interactive-performance.vcxproj
+++ b/build/win32/vs10/test-state-interactive-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {011F9197-F986-44BD-A8F2-045C746B1B70}
- teststateinteractiveperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {011F9197-F986-44BD-A8F2-045C746B1B70}
+ teststateinteractiveperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-state-interactive-performance.vcxproj.filters b/build/win32/vs10/test-state-interactive-performance.vcxproj.filters
index a72cd2688..ddb63cc3e 100644
--- a/build/win32/vs10/test-state-interactive-performance.vcxproj.filters
+++ b/build/win32/vs10/test-state-interactive-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-state-mini-performance.vcxproj b/build/win32/vs10/test-state-mini-performance.vcxproj
index ca45df1f3..ad910de5a 100644
--- a/build/win32/vs10/test-state-mini-performance.vcxproj
+++ b/build/win32/vs10/test-state-mini-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {D4A09850-E35B-4124-A9FF-784AB5BBCD2C}
- teststateminiperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {D4A09850-E35B-4124-A9FF-784AB5BBCD2C}
+ teststateminiperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-state-mini-performance.vcxproj.filters b/build/win32/vs10/test-state-mini-performance.vcxproj.filters
index e9339f2b6..fe9e2b735 100644
--- a/build/win32/vs10/test-state-mini-performance.vcxproj.filters
+++ b/build/win32/vs10/test-state-mini-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-state-performance.vcxproj b/build/win32/vs10/test-state-performance.vcxproj
index de7e08912..d54733fd0 100644
--- a/build/win32/vs10/test-state-performance.vcxproj
+++ b/build/win32/vs10/test-state-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {BEE86058-B4BF-4AA5-91BF-E3620538ED5E}
- teststateperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {BEE86058-B4BF-4AA5-91BF-E3620538ED5E}
+ teststateperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-state-performance.vcxproj.filters b/build/win32/vs10/test-state-performance.vcxproj.filters
index 932d24e12..c94c7dc6d 100644
--- a/build/win32/vs10/test-state-performance.vcxproj.filters
+++ b/build/win32/vs10/test-state-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-state-pick-performance.vcxproj b/build/win32/vs10/test-state-pick-performance.vcxproj
index f375446f9..5ac7c375e 100644
--- a/build/win32/vs10/test-state-pick-performance.vcxproj
+++ b/build/win32/vs10/test-state-pick-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {0C1E8E6C-1563-4F95-A994-6366EE992CB3}
- teststatepickperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {0C1E8E6C-1563-4F95-A994-6366EE992CB3}
+ teststatepickperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-state-pick-performance.vcxproj.filters b/build/win32/vs10/test-state-pick-performance.vcxproj.filters
index ea7b375ce..138e63f65 100644
--- a/build/win32/vs10/test-state-pick-performance.vcxproj.filters
+++ b/build/win32/vs10/test-state-pick-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-text-perf-performance.vcxproj b/build/win32/vs10/test-text-perf-performance.vcxproj
index f0ee2a89a..a18d544eb 100644
--- a/build/win32/vs10/test-text-perf-performance.vcxproj
+++ b/build/win32/vs10/test-text-perf-performance.vcxproj
@@ -1,169 +1,173 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {8AF1EA8E-305B-42C0-919D-12B1843B21A4}
- testtextperfperformance
- Win32Proj
-
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
- true
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- $(TestPerfProgDef);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- %(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
-
-
-
- {ea036190-0950-4640-84f9-d459a33b33a8}
- false
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {8AF1EA8E-305B-42C0-919D-12B1843B21A4}
+ testtextperfperformance
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+ Application
+ MultiByte
+ true
+ v100
+
+
+ Application
+ MultiByte
+ v100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ EditAndContinue
+
+
+ true
+ Console
+ MachineX86
+
+
+
+
+ Disabled
+ _DEBUG;$(TestPerfProgDef);%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ false
+
+
+ MachineX64
+
+
+
+
+ MaxSpeed
+ true
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+
+ Level3
+ ProgramDatabase
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+
+
+
+
+ $(TestPerfProgDef);%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+
+ Level3
+ ProgramDatabase
+ CompileAsC
+
+
+ %(AdditionalDependencies)
+ true
+ Console
+ true
+ true
+ false
+
+
+ MachineX64
+
+
+
+
+
+
+
+
+
+
+ {ea036190-0950-4640-84f9-d459a33b33a8}
+ false
+
+
+
+
+
+
diff --git a/build/win32/vs10/test-text-perf-performance.vcxproj.filters b/build/win32/vs10/test-text-perf-performance.vcxproj.filters
index 31cce6d30..940822ea1 100644
--- a/build/win32/vs10/test-text-perf-performance.vcxproj.filters
+++ b/build/win32/vs10/test-text-perf-performance.vcxproj.filters
@@ -1,23 +1,23 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hpp;hxx;hm;inl;inc;xsd
-
-
-
-
- Sources
-
-
-
-
- Headers
-
-
-
\ No newline at end of file
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+
diff --git a/build/win32/vs10/test-text-perf.vcxproj b/build/win32/vs10/test-text-perf.vcxproj
index c82d9f796..24160a747 100644
--- a/build/win32/vs10/test-text-perf.vcxproj
+++ b/build/win32/vs10/test-text-perf.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -71,7 +75,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -89,7 +93,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -113,7 +117,7 @@
MaxSpeed
true
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -131,7 +135,7 @@
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -163,4 +167,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-text-perf.vcxproj.filters b/build/win32/vs10/test-text-perf.vcxproj.filters
index c8b96c7a8..d153208e4 100644
--- a/build/win32/vs10/test-text-perf.vcxproj.filters
+++ b/build/win32/vs10/test-text-perf.vcxproj.filters
@@ -11,4 +11,4 @@
Sources
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-text.vcxproj b/build/win32/vs10/test-text.vcxproj
index 4b975f596..3fad71277 100644
--- a/build/win32/vs10/test-text.vcxproj
+++ b/build/win32/vs10/test-text.vcxproj
@@ -28,38 +28,42 @@
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
Application
MultiByte
true
+ v100
Application
MultiByte
+ v100
-
+
-
+
-
+
-
+
@@ -71,7 +75,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -89,7 +93,7 @@
Disabled
- _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ _DEBUG;$(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
true
EnableFastChecks
MultiThreadedDebugDLL
@@ -113,7 +117,7 @@
MaxSpeed
true
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
true
@@ -131,7 +135,7 @@
- $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);%(PreprocessorDefinitions)
+ $(BaseWinBuildDef);$(ClutterDisableDeprecationWarnings);$(AvoidSDLMain)%(PreprocessorDefinitions)
MultiThreadedDLL
@@ -163,4 +167,4 @@
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/test-text.vcxproj.filters b/build/win32/vs10/test-text.vcxproj.filters
index dba7a2684..e37673fdf 100644
--- a/build/win32/vs10/test-text.vcxproj.filters
+++ b/build/win32/vs10/test-text.vcxproj.filters
@@ -11,4 +11,4 @@
Sources
-
\ No newline at end of file
+
diff --git a/build/win32/vs9/Makefile.am b/build/win32/vs9/Makefile.am
index b11bf625b..b78f076c6 100644
--- a/build/win32/vs9/Makefile.am
+++ b/build/win32/vs9/Makefile.am
@@ -7,11 +7,12 @@ EXTRA_DIST = \
clutter.sln \
clutter.vcproj \
clutter.vcprojin \
- clutter.vsprops \
+ clutter-build-defines.vsprops \
+ clutter-gen-srcs.vsprops \
+ clutter-install.vsprops \
+ clutter-version-paths.vsprops \
install.vcproj \
test-cogl-perf.vcproj \
- test-conformance-clutter.vcproj \
- test-conformance-clutter.vcprojin \
test-interactive-clutter.vcproj \
test-interactive-clutter.vcprojin \
test-picking.vcproj \
diff --git a/build/win32/vs9/cally-atkcomponent-example.vcproj b/build/win32/vs9/cally-atkcomponent-example.vcproj
index 6eccb4b08..0e170cb48 100644
--- a/build/win32/vs9/cally-atkcomponent-example.vcproj
+++ b/build/win32/vs9/cally-atkcomponent-example.vcproj
@@ -21,7 +21,7 @@
@@ -51,7 +51,7 @@
diff --git a/build/win32/vs9/cally-atkeditabletext-example.vcproj b/build/win32/vs9/cally-atkeditabletext-example.vcproj
index 1aa1a9c2c..a151ce203 100644
--- a/build/win32/vs9/cally-atkeditabletext-example.vcproj
+++ b/build/win32/vs9/cally-atkeditabletext-example.vcproj
@@ -21,7 +21,7 @@
@@ -51,7 +51,7 @@
diff --git a/build/win32/vs9/cally-atkevents-example.vcproj b/build/win32/vs9/cally-atkevents-example.vcproj
index 2ea075e04..e00954ef0 100644
--- a/build/win32/vs9/cally-atkevents-example.vcproj
+++ b/build/win32/vs9/cally-atkevents-example.vcproj
@@ -21,7 +21,7 @@
@@ -52,7 +52,7 @@
diff --git a/build/win32/vs9/cally-atktext-example.vcproj b/build/win32/vs9/cally-atktext-example.vcproj
index 0e656d0d7..d4d4bae4d 100644
--- a/build/win32/vs9/cally-atktext-example.vcproj
+++ b/build/win32/vs9/cally-atktext-example.vcproj
@@ -21,7 +21,7 @@
@@ -51,7 +51,7 @@
diff --git a/build/win32/vs9/cally-clone-example.vcproj b/build/win32/vs9/cally-clone-example.vcproj
index 11dfc367e..ef0f12ace 100644
--- a/build/win32/vs9/cally-clone-example.vcproj
+++ b/build/win32/vs9/cally-clone-example.vcproj
@@ -21,7 +21,7 @@
@@ -51,7 +51,7 @@
diff --git a/build/win32/vs9/clutter-build-defines.vsprops b/build/win32/vs9/clutter-build-defines.vsprops
new file mode 100644
index 000000000..829161bc8
--- /dev/null
+++ b/build/win32/vs9/clutter-build-defines.vsprops
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/clutter-gen-srcs.vsprops b/build/win32/vs9/clutter-gen-srcs.vsprops
new file mode 100644
index 000000000..e9a7e757b
--- /dev/null
+++ b/build/win32/vs9/clutter-gen-srcs.vsprops
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/clutter-install.vsprops b/build/win32/vs9/clutter-install.vsprops
new file mode 100644
index 000000000..e1362d11d
--- /dev/null
+++ b/build/win32/vs9/clutter-install.vsprops
@@ -0,0 +1,182 @@
+
+
+
+
+
diff --git a/build/win32/vs9/clutter-version-paths.vsprops b/build/win32/vs9/clutter-version-paths.vsprops
new file mode 100644
index 000000000..7b988195a
--- /dev/null
+++ b/build/win32/vs9/clutter-version-paths.vsprops
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/clutter.sln b/build/win32/vs9/clutter.sln
index 3b527ba46..2610fd6bd 100644
--- a/build/win32/vs9/clutter.sln
+++ b/build/win32/vs9/clutter.sln
@@ -88,11 +88,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cally-clone-example", "call
{EA036190-0950-4640-84F9-D459A33B33A8} = {EA036190-0950-4640-84F9-D459A33B33A8}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-conformance-clutter", "test-conformance-clutter.vcproj", "{0F08F253-DE1A-40CB-A890-93AE3CA23ADE}"
- ProjectSection(ProjectDependencies) = postProject
- {EA036190-0950-4640-84F9-D459A33B33A8} = {EA036190-0950-4640-84F9-D459A33B33A8}
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-interactive-clutter", "test-interactive-clutter.vcproj", "{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}"
ProjectSection(ProjectDependencies) = postProject
{EA036190-0950-4640-84F9-D459A33B33A8} = {EA036190-0950-4640-84F9-D459A33B33A8}
@@ -118,7 +113,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "install", "install.vcproj",
{E77D40D0-19D4-4865-BE20-B6DA05BA234D} = {E77D40D0-19D4-4865-BE20-B6DA05BA234D}
{4B2C0EE0-F1BD-499C-ACAD-260CF14C352E} = {4B2C0EE0-F1BD-499C-ACAD-260CF14C352E}
{C8EC4CE0-9C6A-4733-A0DD-477689FAF5F4} = {C8EC4CE0-9C6A-4733-A0DD-477689FAF5F4}
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE} = {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9} = {75F9E5AF-040C-448E-96BE-C282EFFFE2D9}
EndProjectSection
EndProject
@@ -422,22 +416,6 @@ Global
{E77D40D0-19D4-4865-BE20-B6DA05BA234D}.Debug_GDK|x64.Build.0 = Debug|x64
{E77D40D0-19D4-4865-BE20-B6DA05BA234D}.Release_GDK|x64.ActiveCfg = Release|x64
{E77D40D0-19D4-4865-BE20-B6DA05BA234D}.Release_GDK|x64.Build.0 = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|Win32.ActiveCfg = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|Win32.Build.0 = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|Win32.ActiveCfg = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|Win32.Build.0 = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|x64.ActiveCfg = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug|x64.Build.0 = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|x64.ActiveCfg = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release|x64.Build.0 = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|Win32.ActiveCfg = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|Win32.Build.0 = Debug|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|Win32.ActiveCfg = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|Win32.Build.0 = Release|Win32
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|x64.ActiveCfg = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Debug_GDK|x64.Build.0 = Debug|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|x64.ActiveCfg = Release|x64
- {0F08F253-DE1A-40CB-A890-93AE3CA23ADE}.Release_GDK|x64.Build.0 = Release|x64
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Debug|Win32.ActiveCfg = Debug|Win32
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Debug|Win32.Build.0 = Debug|Win32
{75F9E5AF-040C-448E-96BE-C282EFFFE2D9}.Release|Win32.ActiveCfg = Release|Win32
@@ -462,14 +440,14 @@ Global
{35B2A4AC-7235-4FC7-995D-469D59195041}.Debug|x64.Build.0 = Debug|x64
{35B2A4AC-7235-4FC7-995D-469D59195041}.Release|x64.ActiveCfg = Release|x64
{35B2A4AC-7235-4FC7-995D-469D59195041}.Release|x64.Build.0 = Release|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.ActiveCfg = Debug_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.Build.0 = Debug_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.ActiveCfg = Release_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.Build.0 = Release_GDK|Win32
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.ActiveCfg = Debug_GDK|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.Build.0 = Debug_GDK|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.ActiveCfg = Release_GDK|x64
- {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.Build.0 = Release_GDK|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.ActiveCfg = Debug|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|Win32.Build.0 = Debug|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.ActiveCfg = Release|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|Win32.Build.0 = Release|Win32
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.ActiveCfg = Debug|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Debug_GDK|x64.Build.0 = Debug|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.ActiveCfg = Release|x64
+ {35B2A4AC-7235-4FC7-995D-469D59195041}.Release_GDK|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/build/win32/vs9/clutter.vcprojin b/build/win32/vs9/clutter.vcprojin
index 6366a57fc..5c23a3bae 100644
--- a/build/win32/vs9/clutter.vcprojin
+++ b/build/win32/vs9/clutter.vcprojin
@@ -21,18 +21,18 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/clutter.vsprops b/build/win32/vs9/clutter.vsprops
deleted file mode 100644
index c7d91eb67..000000000
--- a/build/win32/vs9/clutter.vsprops
+++ /dev/null
@@ -1,353 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build/win32/vs9/install.vcproj b/build/win32/vs9/install.vcproj
index 713a2b590..2121c4eeb 100644
--- a/build/win32/vs9/install.vcproj
+++ b/build/win32/vs9/install.vcproj
@@ -20,31 +20,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build/win32/vs9/test-cogl-perf.vcproj b/build/win32/vs9/test-cogl-perf.vcproj
index e737e1ebf..9326e6431 100644
--- a/build/win32/vs9/test-cogl-perf.vcproj
+++ b/build/win32/vs9/test-cogl-perf.vcproj
@@ -21,7 +21,7 @@
@@ -31,7 +31,7 @@
@@ -122,7 +122,7 @@
/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#include "testconformance.sourcefiles"
-
-
-
-
-
diff --git a/build/win32/vs9/test-interactive-clutter.vcprojin b/build/win32/vs9/test-interactive-clutter.vcprojin
index b283debdd..f5add5279 100644
--- a/build/win32/vs9/test-interactive-clutter.vcprojin
+++ b/build/win32/vs9/test-interactive-clutter.vcprojin
@@ -21,7 +21,7 @@
@@ -86,7 +86,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-picking.vcproj b/build/win32/vs9/test-picking.vcproj
index 7caf1a542..f635e9cea 100644
--- a/build/win32/vs9/test-picking.vcproj
+++ b/build/win32/vs9/test-picking.vcproj
@@ -21,7 +21,7 @@
@@ -31,7 +31,7 @@
@@ -123,7 +123,7 @@
/>
@@ -31,7 +31,7 @@
@@ -122,7 +122,7 @@
/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-state-interactive-performance.vcproj b/build/win32/vs9/test-state-interactive-performance.vcproj
index 8dd2989b9..2f4d01121 100644
--- a/build/win32/vs9/test-state-interactive-performance.vcproj
+++ b/build/win32/vs9/test-state-interactive-performance.vcproj
@@ -1,166 +1,166 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-state-mini-performance.vcproj b/build/win32/vs9/test-state-mini-performance.vcproj
index efdf2889c..7c9f8380a 100644
--- a/build/win32/vs9/test-state-mini-performance.vcproj
+++ b/build/win32/vs9/test-state-mini-performance.vcproj
@@ -1,166 +1,166 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-state-performance.vcproj b/build/win32/vs9/test-state-performance.vcproj
index 784cfb961..71f5c4219 100644
--- a/build/win32/vs9/test-state-performance.vcproj
+++ b/build/win32/vs9/test-state-performance.vcproj
@@ -1,166 +1,166 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-state-pick-performance.vcproj b/build/win32/vs9/test-state-pick-performance.vcproj
index b8bc4578e..5775970b8 100644
--- a/build/win32/vs9/test-state-pick-performance.vcproj
+++ b/build/win32/vs9/test-state-pick-performance.vcproj
@@ -1,166 +1,166 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-text-perf-performance.vcproj b/build/win32/vs9/test-text-perf-performance.vcproj
index 71c3e84a7..3c0afe6aa 100644
--- a/build/win32/vs9/test-text-perf-performance.vcproj
+++ b/build/win32/vs9/test-text-perf-performance.vcproj
@@ -1,166 +1,166 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/win32/vs9/test-text-perf.vcproj b/build/win32/vs9/test-text-perf.vcproj
index 09288051f..385451410 100644
--- a/build/win32/vs9/test-text-perf.vcproj
+++ b/build/win32/vs9/test-text-perf.vcproj
@@ -21,7 +21,7 @@
@@ -31,7 +31,7 @@
@@ -122,7 +122,7 @@
/>
@@ -31,7 +31,7 @@
@@ -122,7 +122,7 @@
/>
Clutter
clutter
+
A toolkit for creating fast, portable, compelling dynamic UIs
diff --git a/clutter/Makefile.am b/clutter/Makefile.am
index c0d3d5a74..d04dc6f54 100644
--- a/clutter/Makefile.am
+++ b/clutter/Makefile.am
@@ -1,3 +1,5 @@
+AUTOMAKE_OPTIONS = subdir-objects
+
include $(top_srcdir)/build/autotools/Makefile.am.silent
# preamble
@@ -11,14 +13,6 @@ BUILT_SOURCES =
lib_LTLIBRARIES =
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/clutter \
- -I$(top_srcdir)/clutter/cally \
- -I$(top_builddir) \
- -I$(top_builddir)/clutter \
- $(NULL)
-
AM_CPPFLAGS = \
-DCLUTTER_PREFIX=\""$(prefix)"\" \
-DCLUTTER_LIBDIR=\""$(libdir)"\" \
@@ -27,10 +21,17 @@ AM_CPPFLAGS = \
-DCLUTTER_SYSCONFDIR=\""$(sysconfdir)"\" \
-DCLUTTER_COMPILATION=1 \
-DCOGL_ENABLE_EXPERIMENTAL_API \
+ -DCOGL_DISABLE_DEPRECATION_WARNINGS \
-DG_LOG_DOMAIN=\"Clutter\" \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/clutter \
+ -I$(top_srcdir)/clutter/cally \
+ -I$(top_builddir) \
+ -I$(top_builddir)/clutter \
$(CLUTTER_DEPRECATED_CFLAGS) \
$(CLUTTER_DEBUG_CFLAGS) \
$(CLUTTER_PROFILE_CFLAGS) \
+ $(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) \
$(NULL)
AM_CFLAGS = $(CLUTTER_CFLAGS) $(MAINTAINER_CFLAGS)
@@ -48,285 +49,288 @@ pc_files =
# common sources - please, keep these sorted alphabetically
source_h = \
- $(srcdir)/clutter-action.h \
- $(srcdir)/clutter-actor-meta.h \
- $(srcdir)/clutter-actor.h \
- $(srcdir)/clutter-align-constraint.h \
- $(srcdir)/clutter-animatable.h \
- $(srcdir)/clutter-backend.h \
- $(srcdir)/clutter-bind-constraint.h \
- $(srcdir)/clutter-binding-pool.h \
- $(srcdir)/clutter-bin-layout.h \
- $(srcdir)/clutter-blur-effect.h \
- $(srcdir)/clutter-box-layout.h \
- $(srcdir)/clutter-brightness-contrast-effect.h \
- $(srcdir)/clutter-cairo.h \
- $(srcdir)/clutter-canvas.h \
- $(srcdir)/clutter-child-meta.h \
- $(srcdir)/clutter-click-action.h \
- $(srcdir)/clutter-cogl-compat.h \
- $(srcdir)/clutter-clone.h \
- $(srcdir)/clutter-color-static.h \
- $(srcdir)/clutter-color.h \
- $(srcdir)/clutter-colorize-effect.h \
- $(srcdir)/clutter-constraint.h \
- $(srcdir)/clutter-container.h \
- $(srcdir)/clutter-content.h \
- $(srcdir)/clutter-deform-effect.h \
- $(srcdir)/clutter-deprecated.h \
- $(srcdir)/clutter-desaturate-effect.h \
- $(srcdir)/clutter-device-manager.h \
- $(srcdir)/clutter-drag-action.h \
- $(srcdir)/clutter-drop-action.h \
- $(srcdir)/clutter-effect.h \
- $(srcdir)/clutter-enums.h \
- $(srcdir)/clutter-event.h \
- $(srcdir)/clutter-feature.h \
- $(srcdir)/clutter-fixed-layout.h \
- $(srcdir)/clutter-flow-layout.h \
- $(srcdir)/clutter-gesture-action.h \
- $(srcdir)/clutter-grid-layout.h \
- $(srcdir)/clutter-group.h \
- $(srcdir)/clutter-image.h \
- $(srcdir)/clutter-input-device.h \
- $(srcdir)/clutter-interval.h \
- $(srcdir)/clutter-keyframe-transition.h \
- $(srcdir)/clutter-keysyms.h \
- $(srcdir)/clutter-layout-manager.h \
- $(srcdir)/clutter-layout-meta.h \
- $(srcdir)/clutter-list-model.h \
- $(srcdir)/clutter-macros.h \
- $(srcdir)/clutter-main.h \
- $(srcdir)/clutter-model.h \
- $(srcdir)/clutter-offscreen-effect.h \
- $(srcdir)/clutter-page-turn-effect.h \
- $(srcdir)/clutter-paint-nodes.h \
- $(srcdir)/clutter-paint-node.h \
- $(srcdir)/clutter-pan-action.h \
- $(srcdir)/clutter-path-constraint.h \
- $(srcdir)/clutter-path.h \
- $(srcdir)/clutter-property-transition.h \
- $(srcdir)/clutter-rotate-action.h \
- $(srcdir)/clutter-script.h \
- $(srcdir)/clutter-scriptable.h \
- $(srcdir)/clutter-scroll-actor.h \
- $(srcdir)/clutter-settings.h \
- $(srcdir)/clutter-shader-effect.h \
- $(srcdir)/clutter-shader-types.h \
- $(srcdir)/clutter-swipe-action.h \
- $(srcdir)/clutter-snap-constraint.h \
- $(srcdir)/clutter-stage.h \
- $(srcdir)/clutter-stage-manager.h \
- $(srcdir)/clutter-table-layout.h \
- $(srcdir)/clutter-tap-action.h \
- $(srcdir)/clutter-texture.h \
- $(srcdir)/clutter-text.h \
- $(srcdir)/clutter-text-buffer.h \
- $(srcdir)/clutter-timeline.h \
- $(srcdir)/clutter-transition-group.h \
- $(srcdir)/clutter-transition.h \
- $(srcdir)/clutter-types.h \
- $(srcdir)/clutter-units.h \
- $(srcdir)/clutter-zoom-action.h \
+ clutter-action.h \
+ clutter-actor-meta.h \
+ clutter-actor.h \
+ clutter-align-constraint.h \
+ clutter-animatable.h \
+ clutter-backend.h \
+ clutter-bind-constraint.h \
+ clutter-binding-pool.h \
+ clutter-bin-layout.h \
+ clutter-blur-effect.h \
+ clutter-box-layout.h \
+ clutter-brightness-contrast-effect.h \
+ clutter-cairo.h \
+ clutter-canvas.h \
+ clutter-child-meta.h \
+ clutter-click-action.h \
+ clutter-cogl-compat.h \
+ clutter-clone.h \
+ clutter-color-static.h \
+ clutter-color.h \
+ clutter-colorize-effect.h \
+ clutter-constraint.h \
+ clutter-container.h \
+ clutter-content.h \
+ clutter-deform-effect.h \
+ clutter-deprecated.h \
+ clutter-desaturate-effect.h \
+ clutter-device-manager.h \
+ clutter-drag-action.h \
+ clutter-drop-action.h \
+ clutter-effect.h \
+ clutter-enums.h \
+ clutter-event.h \
+ clutter-feature.h \
+ clutter-fixed-layout.h \
+ clutter-flow-layout.h \
+ clutter-gesture-action.h \
+ clutter-grid-layout.h \
+ clutter-group.h \
+ clutter-image.h \
+ clutter-input-device.h \
+ clutter-interval.h \
+ clutter-keyframe-transition.h \
+ clutter-keysyms.h \
+ clutter-layout-manager.h \
+ clutter-layout-meta.h \
+ clutter-list-model.h \
+ clutter-macros.h \
+ clutter-main.h \
+ clutter-model.h \
+ clutter-offscreen-effect.h \
+ clutter-page-turn-effect.h \
+ clutter-paint-nodes.h \
+ clutter-paint-node.h \
+ clutter-pan-action.h \
+ clutter-path-constraint.h \
+ clutter-path.h \
+ clutter-property-transition.h \
+ clutter-rotate-action.h \
+ clutter-script.h \
+ clutter-scriptable.h \
+ clutter-scroll-actor.h \
+ clutter-settings.h \
+ clutter-shader-effect.h \
+ clutter-shader-types.h \
+ clutter-swipe-action.h \
+ clutter-snap-constraint.h \
+ clutter-stage.h \
+ clutter-stage-manager.h \
+ clutter-tap-action.h \
+ clutter-test-utils.h \
+ clutter-texture.h \
+ clutter-text.h \
+ clutter-text-buffer.h \
+ clutter-timeline.h \
+ clutter-transition-group.h \
+ clutter-transition.h \
+ clutter-types.h \
+ clutter-units.h \
+ clutter-zoom-action.h \
$(NULL)
source_c = \
- $(srcdir)/clutter-action.c \
- $(srcdir)/clutter-actor-box.c \
- $(srcdir)/clutter-actor-meta.c \
- $(srcdir)/clutter-actor.c \
- $(srcdir)/clutter-align-constraint.c \
- $(srcdir)/clutter-animatable.c \
- $(srcdir)/clutter-backend.c \
- $(srcdir)/clutter-base-types.c \
- $(srcdir)/clutter-bezier.c \
- $(srcdir)/clutter-bind-constraint.c \
- $(srcdir)/clutter-binding-pool.c \
- $(srcdir)/clutter-bin-layout.c \
- $(srcdir)/clutter-blur-effect.c \
- $(srcdir)/clutter-box-layout.c \
- $(srcdir)/clutter-brightness-contrast-effect.c \
- $(srcdir)/clutter-cairo.c \
- $(srcdir)/clutter-canvas.c \
- $(srcdir)/clutter-child-meta.c \
- $(srcdir)/clutter-click-action.c \
- $(srcdir)/clutter-clone.c \
- $(srcdir)/clutter-color.c \
- $(srcdir)/clutter-colorize-effect.c \
- $(srcdir)/clutter-constraint.c \
- $(srcdir)/clutter-container.c \
- $(srcdir)/clutter-content.c \
- $(srcdir)/clutter-deform-effect.c \
- $(srcdir)/clutter-desaturate-effect.c \
- $(srcdir)/clutter-device-manager.c \
- $(srcdir)/clutter-drag-action.c \
- $(srcdir)/clutter-drop-action.c \
- $(srcdir)/clutter-effect.c \
- $(srcdir)/clutter-event.c \
- $(srcdir)/clutter-feature.c \
- $(srcdir)/clutter-fixed-layout.c \
- $(srcdir)/clutter-flatten-effect.c \
- $(srcdir)/clutter-flow-layout.c \
- $(srcdir)/clutter-gesture-action.c \
- $(srcdir)/clutter-grid-layout.c \
- $(srcdir)/clutter-image.c \
- $(srcdir)/clutter-input-device.c \
- $(srcdir)/clutter-interval.c \
- $(srcdir)/clutter-keyframe-transition.c \
- $(srcdir)/clutter-keysyms-table.c \
- $(srcdir)/clutter-layout-manager.c \
- $(srcdir)/clutter-layout-meta.c \
- $(srcdir)/clutter-list-model.c \
- $(srcdir)/clutter-main.c \
- $(srcdir)/clutter-master-clock.c \
- $(srcdir)/clutter-model.c \
- $(srcdir)/clutter-offscreen-effect.c \
- $(srcdir)/clutter-page-turn-effect.c \
- $(srcdir)/clutter-paint-nodes.c \
- $(srcdir)/clutter-paint-node.c \
- $(srcdir)/clutter-pan-action.c \
- $(srcdir)/clutter-path-constraint.c \
- $(srcdir)/clutter-path.c \
- $(srcdir)/clutter-property-transition.c \
- $(srcdir)/clutter-rotate-action.c \
- $(srcdir)/clutter-script.c \
- $(srcdir)/clutter-script-parser.c \
- $(srcdir)/clutter-scriptable.c \
- $(srcdir)/clutter-scroll-actor.c \
- $(srcdir)/clutter-settings.c \
- $(srcdir)/clutter-shader-effect.c \
- $(srcdir)/clutter-shader-types.c \
- $(srcdir)/clutter-swipe-action.c \
- $(srcdir)/clutter-snap-constraint.c \
- $(srcdir)/clutter-stage.c \
- $(srcdir)/clutter-stage-manager.c \
- $(srcdir)/clutter-stage-window.c \
- $(srcdir)/clutter-table-layout.c \
- $(srcdir)/clutter-tap-action.c \
- $(srcdir)/clutter-text.c \
- $(srcdir)/clutter-text-buffer.c \
- $(srcdir)/clutter-transition-group.c \
- $(srcdir)/clutter-transition.c \
- $(srcdir)/clutter-timeline.c \
- $(srcdir)/clutter-units.c \
- $(srcdir)/clutter-util.c \
- $(srcdir)/clutter-paint-volume.c \
- $(srcdir)/clutter-zoom-action.c \
+ clutter-action.c \
+ clutter-actor-box.c \
+ clutter-actor-meta.c \
+ clutter-actor.c \
+ clutter-align-constraint.c \
+ clutter-animatable.c \
+ clutter-backend.c \
+ clutter-base-types.c \
+ clutter-bezier.c \
+ clutter-bind-constraint.c \
+ clutter-binding-pool.c \
+ clutter-bin-layout.c \
+ clutter-blur-effect.c \
+ clutter-box-layout.c \
+ clutter-brightness-contrast-effect.c \
+ clutter-cairo.c \
+ clutter-canvas.c \
+ clutter-child-meta.c \
+ clutter-click-action.c \
+ clutter-clone.c \
+ clutter-color.c \
+ clutter-colorize-effect.c \
+ clutter-constraint.c \
+ clutter-container.c \
+ clutter-content.c \
+ clutter-deform-effect.c \
+ clutter-desaturate-effect.c \
+ clutter-device-manager.c \
+ clutter-drag-action.c \
+ clutter-drop-action.c \
+ clutter-effect.c \
+ clutter-event.c \
+ clutter-feature.c \
+ clutter-fixed-layout.c \
+ clutter-flatten-effect.c \
+ clutter-flow-layout.c \
+ clutter-gesture-action.c \
+ clutter-grid-layout.c \
+ clutter-image.c \
+ clutter-input-device.c \
+ clutter-interval.c \
+ clutter-keyframe-transition.c \
+ clutter-keysyms-table.c \
+ clutter-layout-manager.c \
+ clutter-layout-meta.c \
+ clutter-list-model.c \
+ clutter-main.c \
+ clutter-master-clock.c \
+ clutter-model.c \
+ clutter-offscreen-effect.c \
+ clutter-page-turn-effect.c \
+ clutter-paint-nodes.c \
+ clutter-paint-node.c \
+ clutter-pan-action.c \
+ clutter-path-constraint.c \
+ clutter-path.c \
+ clutter-property-transition.c \
+ clutter-rotate-action.c \
+ clutter-script.c \
+ clutter-script-parser.c \
+ clutter-scriptable.c \
+ clutter-scroll-actor.c \
+ clutter-settings.c \
+ clutter-shader-effect.c \
+ clutter-shader-types.c \
+ clutter-swipe-action.c \
+ clutter-snap-constraint.c \
+ clutter-stage.c \
+ clutter-stage-manager.c \
+ clutter-stage-window.c \
+ clutter-tap-action.c \
+ clutter-test-utils.c \
+ clutter-text.c \
+ clutter-text-buffer.c \
+ clutter-transition-group.c \
+ clutter-transition.c \
+ clutter-timeline.c \
+ clutter-units.c \
+ clutter-util.c \
+ clutter-paint-volume.c \
+ clutter-zoom-action.c \
$(NULL)
# private headers; these should not be distributed or introspected
source_h_priv = \
- $(srcdir)/clutter-actor-meta-private.h \
- $(srcdir)/clutter-actor-private.h \
- $(srcdir)/clutter-backend-private.h \
- $(srcdir)/clutter-bezier.h \
- $(srcdir)/clutter-content-private.h \
- $(srcdir)/clutter-debug.h \
- $(srcdir)/clutter-device-manager-private.h \
- $(srcdir)/clutter-easing.h \
- $(srcdir)/clutter-effect-private.h \
- $(srcdir)/clutter-event-translator.h \
- $(srcdir)/clutter-event-private.h \
- $(srcdir)/clutter-flatten-effect.h \
- $(srcdir)/clutter-gesture-action-private.h \
- $(srcdir)/clutter-id-pool.h \
- $(srcdir)/clutter-master-clock.h \
- $(srcdir)/clutter-model-private.h \
- $(srcdir)/clutter-offscreen-effect-private.h \
- $(srcdir)/clutter-paint-node-private.h \
- $(srcdir)/clutter-paint-volume-private.h \
- $(srcdir)/clutter-private.h \
- $(srcdir)/clutter-profile.h \
- $(srcdir)/clutter-script-private.h \
- $(srcdir)/clutter-settings-private.h \
- $(srcdir)/clutter-stage-manager-private.h \
- $(srcdir)/clutter-stage-private.h \
- $(srcdir)/clutter-stage-window.h \
+ clutter-actor-meta-private.h \
+ clutter-actor-private.h \
+ clutter-backend-private.h \
+ clutter-bezier.h \
+ clutter-constraint-private.h \
+ clutter-content-private.h \
+ clutter-debug.h \
+ clutter-device-manager-private.h \
+ clutter-easing.h \
+ clutter-effect-private.h \
+ clutter-event-translator.h \
+ clutter-event-private.h \
+ clutter-flatten-effect.h \
+ clutter-gesture-action-private.h \
+ clutter-id-pool.h \
+ clutter-master-clock.h \
+ clutter-model-private.h \
+ clutter-offscreen-effect-private.h \
+ clutter-paint-node-private.h \
+ clutter-paint-volume-private.h \
+ clutter-private.h \
+ clutter-profile.h \
+ clutter-script-private.h \
+ clutter-settings-private.h \
+ clutter-stage-manager-private.h \
+ clutter-stage-private.h \
+ clutter-stage-window.h \
$(NULL)
# private source code; these should not be introspected
source_c_priv = \
- $(srcdir)/clutter-easing.c \
- $(srcdir)/clutter-event-translator.c \
- $(srcdir)/clutter-id-pool.c \
- $(srcdir)/clutter-profile.c \
+ clutter-easing.c \
+ clutter-event-translator.c \
+ clutter-id-pool.c \
+ clutter-profile.c \
$(NULL)
# deprecated installed headers
deprecated_h = \
- $(srcdir)/deprecated/clutter-actor.h \
- $(srcdir)/deprecated/clutter-alpha.h \
- $(srcdir)/deprecated/clutter-animatable.h \
- $(srcdir)/deprecated/clutter-animation.h \
- $(srcdir)/deprecated/clutter-animator.h \
- $(srcdir)/deprecated/clutter-backend.h \
- $(srcdir)/deprecated/clutter-behaviour.h \
- $(srcdir)/deprecated/clutter-behaviour-depth.h \
- $(srcdir)/deprecated/clutter-behaviour-ellipse.h \
- $(srcdir)/deprecated/clutter-behaviour-opacity.h \
- $(srcdir)/deprecated/clutter-behaviour-path.h \
- $(srcdir)/deprecated/clutter-behaviour-rotate.h \
- $(srcdir)/deprecated/clutter-behaviour-scale.h \
- $(srcdir)/deprecated/clutter-bin-layout.h \
- $(srcdir)/deprecated/clutter-box.h \
- $(srcdir)/deprecated/clutter-cairo-texture.h \
- $(srcdir)/deprecated/clutter-container.h \
- $(srcdir)/deprecated/clutter-fixed.h \
- $(srcdir)/deprecated/clutter-frame-source.h \
- $(srcdir)/deprecated/clutter-group.h \
- $(srcdir)/deprecated/clutter-input-device.h \
- $(srcdir)/deprecated/clutter-keysyms.h \
- $(srcdir)/deprecated/clutter-main.h \
- $(srcdir)/deprecated/clutter-media.h \
- $(srcdir)/deprecated/clutter-rectangle.h \
- $(srcdir)/deprecated/clutter-score.h \
- $(srcdir)/deprecated/clutter-shader.h \
- $(srcdir)/deprecated/clutter-stage-manager.h \
- $(srcdir)/deprecated/clutter-stage.h \
- $(srcdir)/deprecated/clutter-state.h \
- $(srcdir)/deprecated/clutter-texture.h \
- $(srcdir)/deprecated/clutter-timeline.h \
- $(srcdir)/deprecated/clutter-timeout-pool.h \
- $(srcdir)/deprecated/clutter-util.h \
+ deprecated/clutter-actor.h \
+ deprecated/clutter-alpha.h \
+ deprecated/clutter-animatable.h \
+ deprecated/clutter-animation.h \
+ deprecated/clutter-animator.h \
+ deprecated/clutter-backend.h \
+ deprecated/clutter-behaviour.h \
+ deprecated/clutter-behaviour-depth.h \
+ deprecated/clutter-behaviour-ellipse.h \
+ deprecated/clutter-behaviour-opacity.h \
+ deprecated/clutter-behaviour-path.h \
+ deprecated/clutter-behaviour-rotate.h \
+ deprecated/clutter-behaviour-scale.h \
+ deprecated/clutter-bin-layout.h \
+ deprecated/clutter-box.h \
+ deprecated/clutter-cairo-texture.h \
+ deprecated/clutter-container.h \
+ deprecated/clutter-fixed.h \
+ deprecated/clutter-frame-source.h \
+ deprecated/clutter-group.h \
+ deprecated/clutter-input-device.h \
+ deprecated/clutter-keysyms.h \
+ deprecated/clutter-main.h \
+ deprecated/clutter-media.h \
+ deprecated/clutter-rectangle.h \
+ deprecated/clutter-score.h \
+ deprecated/clutter-shader.h \
+ deprecated/clutter-stage-manager.h \
+ deprecated/clutter-stage.h \
+ deprecated/clutter-state.h \
+ deprecated/clutter-table-layout.h \
+ deprecated/clutter-texture.h \
+ deprecated/clutter-timeline.h \
+ deprecated/clutter-timeout-pool.h \
+ deprecated/clutter-util.h \
$(NULL)
# deprecated source code
deprecated_c = \
- $(srcdir)/deprecated/clutter-actor-deprecated.c \
- $(srcdir)/deprecated/clutter-alpha.c \
- $(srcdir)/deprecated/clutter-animation.c \
- $(srcdir)/deprecated/clutter-animator.c \
- $(srcdir)/deprecated/clutter-behaviour.c \
- $(srcdir)/deprecated/clutter-behaviour-depth.c \
- $(srcdir)/deprecated/clutter-behaviour-ellipse.c \
- $(srcdir)/deprecated/clutter-behaviour-opacity.c \
- $(srcdir)/deprecated/clutter-behaviour-path.c \
- $(srcdir)/deprecated/clutter-behaviour-rotate.c \
- $(srcdir)/deprecated/clutter-behaviour-scale.c \
- $(srcdir)/deprecated/clutter-box.c \
- $(srcdir)/deprecated/clutter-cairo-texture.c \
- $(srcdir)/deprecated/clutter-fixed.c \
- $(srcdir)/deprecated/clutter-frame-source.c \
- $(srcdir)/deprecated/clutter-group.c \
- $(srcdir)/deprecated/clutter-input-device-deprecated.c \
- $(srcdir)/deprecated/clutter-layout-manager-deprecated.c \
- $(srcdir)/deprecated/clutter-media.c \
- $(srcdir)/deprecated/clutter-rectangle.c \
- $(srcdir)/deprecated/clutter-score.c \
- $(srcdir)/deprecated/clutter-shader.c \
- $(srcdir)/deprecated/clutter-state.c \
- $(srcdir)/deprecated/clutter-texture.c \
- $(srcdir)/deprecated/clutter-timeout-pool.c \
+ deprecated/clutter-actor-deprecated.c \
+ deprecated/clutter-alpha.c \
+ deprecated/clutter-animation.c \
+ deprecated/clutter-animator.c \
+ deprecated/clutter-behaviour.c \
+ deprecated/clutter-behaviour-depth.c \
+ deprecated/clutter-behaviour-ellipse.c \
+ deprecated/clutter-behaviour-opacity.c \
+ deprecated/clutter-behaviour-path.c \
+ deprecated/clutter-behaviour-rotate.c \
+ deprecated/clutter-behaviour-scale.c \
+ deprecated/clutter-box.c \
+ deprecated/clutter-cairo-texture.c \
+ deprecated/clutter-fixed.c \
+ deprecated/clutter-frame-source.c \
+ deprecated/clutter-group.c \
+ deprecated/clutter-input-device-deprecated.c \
+ deprecated/clutter-layout-manager-deprecated.c \
+ deprecated/clutter-media.c \
+ deprecated/clutter-rectangle.c \
+ deprecated/clutter-score.c \
+ deprecated/clutter-shader.c \
+ deprecated/clutter-state.c \
+ deprecated/clutter-table-layout.c \
+ deprecated/clutter-texture.c \
+ deprecated/clutter-timeout-pool.c \
$(NULL)
# deprecated private headers; these should not be installed
deprecated_h_priv = \
- $(srcdir)/deprecated/clutter-timeout-interval.h \
+ deprecated/clutter-timeout-interval.h \
$(NULL)
# deprecated private source code; these should not be introspected
deprecated_c_priv = \
- $(srcdir)/deprecated/clutter-timeout-interval.c \
+ deprecated/clutter-timeout-interval.c \
$(NULL)
# built sources
@@ -383,45 +387,45 @@ backend_source_built =
# X11 backend rules
x11_source_c = \
- $(srcdir)/x11/clutter-backend-x11.c \
- $(srcdir)/x11/clutter-device-manager-core-x11.c \
- $(srcdir)/x11/clutter-event-x11.c \
- $(srcdir)/x11/clutter-input-device-core-x11.c \
- $(srcdir)/x11/clutter-keymap-x11.c \
- $(srcdir)/x11/clutter-stage-x11.c \
- $(srcdir)/x11/clutter-x11-texture-pixmap.c \
+ x11/clutter-backend-x11.c \
+ x11/clutter-device-manager-core-x11.c \
+ x11/clutter-event-x11.c \
+ x11/clutter-input-device-core-x11.c \
+ x11/clutter-keymap-x11.c \
+ x11/clutter-stage-x11.c \
+ x11/clutter-x11-texture-pixmap.c \
$(NULL)
x11_source_h = \
- $(srcdir)/x11/clutter-x11.h \
- $(srcdir)/x11/clutter-x11-texture-pixmap.h \
+ x11/clutter-x11.h \
+ x11/clutter-x11-texture-pixmap.h \
$(NULL)
x11_source_h_priv = \
- $(srcdir)/x11/clutter-backend-x11.h \
- $(srcdir)/x11/clutter-device-manager-core-x11.h \
- $(srcdir)/x11/clutter-input-device-core-x11.h \
- $(srcdir)/x11/clutter-keymap-x11.h \
- $(srcdir)/x11/clutter-settings-x11.h \
- $(srcdir)/x11/clutter-stage-x11.h \
+ x11/clutter-backend-x11.h \
+ x11/clutter-device-manager-core-x11.h \
+ x11/clutter-input-device-core-x11.h \
+ x11/clutter-keymap-x11.h \
+ x11/clutter-settings-x11.h \
+ x11/clutter-stage-x11.h \
$(NULL)
x11_source_c_priv = \
- $(srcdir)/x11/xsettings/xsettings-client.c \
- $(srcdir)/x11/xsettings/xsettings-client.h \
- $(srcdir)/x11/xsettings/xsettings-common.c \
- $(srcdir)/x11/xsettings/xsettings-common.h \
+ x11/xsettings/xsettings-client.c \
+ x11/xsettings/xsettings-client.h \
+ x11/xsettings/xsettings-common.c \
+ x11/xsettings/xsettings-common.h \
$(NULL)
if BUILD_XI2
x11_source_c += \
- $(srcdir)/x11/clutter-device-manager-xi2.c \
- $(srcdir)/x11/clutter-input-device-xi2.c \
+ x11/clutter-device-manager-xi2.c \
+ x11/clutter-input-device-xi2.c \
$(NULL)
x11_source_h_priv += \
- $(srcdir)/x11/clutter-device-manager-xi2.h \
- $(srcdir)/x11/clutter-input-device-xi2.h \
+ x11/clutter-device-manager-xi2.h \
+ x11/clutter-input-device-xi2.h \
$(NULL)
endif # BUILD_XI2
@@ -447,11 +451,11 @@ endif # SUPPORT_X11
cogl_source_h =
cogl_source_c = \
- $(srcdir)/cogl/clutter-stage-cogl.c \
+ cogl/clutter-stage-cogl.c \
$(NULL)
cogl_source_h_priv = \
- $(srcdir)/cogl/clutter-stage-cogl.h \
+ cogl/clutter-stage-cogl.h \
$(NULL)
cogl_source_c_priv =
@@ -473,9 +477,9 @@ endif
#
# Note: there wasn't actually anything GLX specific so we can add
# the compatibility if clutter supports x11
-glx_source_c = $(srcdir)/x11/clutter-glx-texture-pixmap.c
-glx_source_h = $(srcdir)/x11/clutter-glx-texture-pixmap.h \
- $(srcdir)/x11/clutter-glx.h
+glx_source_c = x11/clutter-glx-texture-pixmap.c
+glx_source_h = x11/clutter-glx-texture-pixmap.h \
+ x11/clutter-glx.h
if SUPPORT_X11
backend_source_h += $(glx_source_h)
@@ -496,23 +500,23 @@ endif
# GDK backend rules
gdk_source_c = \
- $(srcdir)/gdk/clutter-backend-gdk.c \
- $(srcdir)/gdk/clutter-device-manager-gdk.c \
- $(srcdir)/gdk/clutter-input-device-gdk.c \
- $(srcdir)/gdk/clutter-event-gdk.c \
- $(srcdir)/gdk/clutter-stage-gdk.c \
+ gdk/clutter-backend-gdk.c \
+ gdk/clutter-device-manager-gdk.c \
+ gdk/clutter-input-device-gdk.c \
+ gdk/clutter-event-gdk.c \
+ gdk/clutter-stage-gdk.c \
$(NULL)
gdk_source_h = \
- $(srcdir)/gdk/clutter-gdk.h \
+ gdk/clutter-gdk.h \
$(NULL)
gdk_source_h_priv = \
- $(srcdir)/gdk/clutter-settings-gdk.h \
- $(srcdir)/gdk/clutter-backend-gdk.h \
- $(srcdir)/gdk/clutter-device-manager-gdk.h \
- $(srcdir)/gdk/clutter-input-device-gdk.h \
- $(srcdir)/gdk/clutter-stage-gdk.h \
+ gdk/clutter-settings-gdk.h \
+ gdk/clutter-backend-gdk.h \
+ gdk/clutter-device-manager-gdk.h \
+ gdk/clutter-input-device-gdk.h \
+ gdk/clutter-stage-gdk.h \
$(NULL)
if SUPPORT_GDK
@@ -533,20 +537,20 @@ endif # SUPPORT_GDK
# Windows backend rules
win32_source_c = \
- $(srcdir)/win32/clutter-backend-win32.c \
- $(srcdir)/win32/clutter-device-manager-win32.c \
- $(srcdir)/win32/clutter-event-win32.c \
- $(srcdir)/win32/clutter-stage-win32.c \
+ win32/clutter-backend-win32.c \
+ win32/clutter-device-manager-win32.c \
+ win32/clutter-event-win32.c \
+ win32/clutter-stage-win32.c \
$(NULL)
win32_source_h = \
- $(srcdir)/win32/clutter-win32.h \
+ win32/clutter-win32.h \
$(NULL)
win32_source_h_priv = \
- $(srcdir)/win32/clutter-backend-win32.h \
- $(srcdir)/win32/clutter-device-manager-win32.h \
- $(srcdir)/win32/clutter-stage-win32.h \
+ win32/clutter-backend-win32.h \
+ win32/clutter-device-manager-win32.h \
+ win32/clutter-stage-win32.h \
$(NULL)
if SUPPORT_WIN32
@@ -559,7 +563,7 @@ if SUPPORT_WIN32
mkdir -p win32
$(WINDRES) -I$(srcdir)/win32 $< $@
-win32/resources.o : $(srcdir)/win32/invisible-cursor.cur
+win32/resources.o : win32/invisible-cursor.cur
win32_resources = win32/resources.o
win32_resources_ldflag = -Wl,win32/resources.o
@@ -578,12 +582,12 @@ pc_files += clutter-win32-$(CLUTTER_API_VERSION).pc
endif # SUPPORT_WIN32
EXTRA_DIST += \
- $(srcdir)/win32/invisible-cursor.cur \
- $(srcdir)/win32/resources.rc \
+ win32/invisible-cursor.cur \
+ win32/resources.rc \
$(NULL)
-egl_tslib_h = $(srcdir)/tslib/clutter-event-tslib.h
-egl_tslib_c = $(srcdir)/tslib/clutter-event-tslib.c
+egl_tslib_h = tslib/clutter-event-tslib.h
+egl_tslib_c = tslib/clutter-event-tslib.c
if USE_TSLIB
backend_source_c_priv += $(egl_tslib_c)
@@ -591,14 +595,14 @@ backend_source_h_priv += $(egl_tslib_h)
endif # SUPPORT_TSLIB
evdev_c_priv = \
- $(srcdir)/evdev/clutter-device-manager-evdev.c \
- $(srcdir)/evdev/clutter-input-device-evdev.c \
+ evdev/clutter-device-manager-evdev.c \
+ evdev/clutter-input-device-evdev.c \
$(NULL)
evdev_h_priv = \
- $(srcdir)/evdev/clutter-device-manager-evdev.h \
- $(srcdir)/evdev/clutter-input-device-evdev.h \
+ evdev/clutter-device-manager-evdev.h \
+ evdev/clutter-input-device-evdev.h \
$(NULL)
-evdev_h = $(srcdir)/evdev/clutter-evdev.h
+evdev_h = evdev/clutter-evdev.h
if USE_EVDEV
backend_source_c_priv += $(evdev_c_priv)
@@ -610,12 +614,12 @@ clutterevdev_include_HEADERS = $(evdev_h)
endif # SUPPORT_EVDEV
if NEED_XKB_UTILS
-backend_source_c += $(srcdir)/evdev/clutter-xkb-utils.c
-backend_source_h_priv += $(srcdir)/evdev/clutter-xkb-utils.h
+backend_source_c += evdev/clutter-xkb-utils.c
+backend_source_h_priv += evdev/clutter-xkb-utils.h
endif
-cex_source_h_priv = $(srcdir)/cex100/clutter-backend-cex100.h
-cex_source_c = $(srcdir)/cex100/clutter-backend-cex100.c
+cex_source_h_priv = cex100/clutter-backend-cex100.h
+cex_source_c = cex100/clutter-backend-cex100.c
cex_h = cex100/clutter-cex100.h
BUILT_SOURCES += $(cex_h)
EXTRA_DIST += $(srcdir)/$(cex_h).in
@@ -640,33 +644,33 @@ endif # SUPPORT_CEX100
# EGL backend rules
egl_source_h = \
- $(srcdir)/egl/clutter-egl-headers.h \
- $(srcdir)/egl/clutter-egl.h \
+ egl/clutter-egl-headers.h \
+ egl/clutter-egl.h \
$(NULL)
-egl_source_h_priv = $(srcdir)/egl/clutter-backend-eglnative.h
-egl_source_c = $(srcdir)/egl/clutter-backend-eglnative.c
+egl_source_h_priv = egl/clutter-backend-eglnative.h egl/clutter-stage-eglnative.h
+egl_source_c = egl/clutter-backend-eglnative.c egl/clutter-stage-eglnative.c
# Wayland backend rules
if SUPPORT_WAYLAND
backend_source_h_priv += \
- $(srcdir)/wayland/clutter-backend-wayland.h \
- $(srcdir)/wayland/clutter-backend-wayland-priv.h \
- $(srcdir)/wayland/clutter-stage-wayland.h \
- $(srcdir)/wayland/clutter-event-wayland.h \
- $(srcdir)/wayland/clutter-input-device-wayland.h \
- $(srcdir)/wayland/clutter-device-manager-wayland.h
+ wayland/clutter-backend-wayland.h \
+ wayland/clutter-backend-wayland-priv.h \
+ wayland/clutter-stage-wayland.h \
+ wayland/clutter-event-wayland.h \
+ wayland/clutter-input-device-wayland.h \
+ wayland/clutter-device-manager-wayland.h
backend_source_c += \
- $(srcdir)/wayland/clutter-backend-wayland.c \
- $(srcdir)/wayland/clutter-stage-wayland.c \
- $(srcdir)/wayland/clutter-event-wayland.c \
- $(srcdir)/wayland/clutter-input-device-wayland.c \
- $(srcdir)/wayland/clutter-device-manager-wayland.c
+ wayland/clutter-backend-wayland.c \
+ wayland/clutter-stage-wayland.c \
+ wayland/clutter-event-wayland.c \
+ wayland/clutter-input-device-wayland.c \
+ wayland/clutter-device-manager-wayland.c
clutterwayland_includedir = $(clutter_includedir)/wayland
-clutterwayland_include_HEADERS = $(srcdir)/wayland/clutter-wayland.h
+clutterwayland_include_HEADERS = wayland/clutter-wayland.h
clutter-wayland-$(CLUTTER_API_VERSION).pc: clutter-$(CLUTTER_API_VERSION).pc
$(QUIET_GEN)cp -f $< $(@F)
@@ -676,11 +680,11 @@ endif # SUPPORT_WAYLAND
if SUPPORT_WAYLAND_COMPOSITOR
wayland_compositor_source_h = \
- $(srcdir)/wayland/clutter-wayland-compositor.h \
- $(srcdir)/wayland/clutter-wayland-surface.h
+ wayland/clutter-wayland-compositor.h \
+ wayland/clutter-wayland-surface.h
backend_source_h += $(wayland_compositor_source_h)
backend_source_c += \
- $(srcdir)/wayland/clutter-wayland-surface.c
+ wayland/clutter-wayland-surface.c
wayland_compositor_includedir = $(clutter_includedir)/wayland
wayland_compositor_include_HEADERS = $(wayland_compositor_source_h)
@@ -707,23 +711,23 @@ endif # SUPPORT_EGL
# OSX backend rules
osx_source_c = \
- $(srcdir)/osx/clutter-backend-osx.c \
- $(srcdir)/osx/clutter-stage-osx.c \
+ osx/clutter-backend-osx.c \
+ osx/clutter-stage-osx.c \
$(NULL)
-osx_source_h = $(srcdir)/osx/clutter-osx.h
+osx_source_h = osx/clutter-osx.h
osx_source_h_priv = \
- $(srcdir)/osx/clutter-backend-osx.h \
- $(srcdir)/osx/clutter-event-loop-osx.h \
- $(srcdir)/osx/clutter-stage-osx.h \
- $(srcdir)/osx/clutter-device-manager-osx.h \
+ osx/clutter-backend-osx.h \
+ osx/clutter-event-loop-osx.h \
+ osx/clutter-stage-osx.h \
+ osx/clutter-device-manager-osx.h \
$(NULL)
osx_source_c_priv = \
- $(srcdir)/osx/clutter-event-loop-osx.c \
- $(srcdir)/osx/clutter-event-osx.c \
- $(srcdir)/osx/clutter-device-manager-osx.c \
+ osx/clutter-event-loop-osx.c \
+ osx/clutter-event-osx.c \
+ osx/clutter-device-manager-osx.c \
$(NULL)
if SUPPORT_OSX
@@ -747,35 +751,35 @@ endif # SUPPORT_OSX
# cally
cally_sources_h = \
- $(srcdir)/cally/cally-actor.h \
- $(srcdir)/cally/cally-clone.h \
- $(srcdir)/cally/cally-factory.h \
- $(srcdir)/cally/cally-group.h \
- $(srcdir)/cally/cally.h \
- $(srcdir)/cally/cally-main.h \
- $(srcdir)/cally/cally-rectangle.h \
- $(srcdir)/cally/cally-root.h \
- $(srcdir)/cally/cally-stage.h \
- $(srcdir)/cally/cally-text.h \
- $(srcdir)/cally/cally-texture.h \
- $(srcdir)/cally/cally-util.h \
+ cally/cally-actor.h \
+ cally/cally-clone.h \
+ cally/cally-factory.h \
+ cally/cally-group.h \
+ cally/cally.h \
+ cally/cally-main.h \
+ cally/cally-rectangle.h \
+ cally/cally-root.h \
+ cally/cally-stage.h \
+ cally/cally-text.h \
+ cally/cally-texture.h \
+ cally/cally-util.h \
$(NULL)
cally_sources_c = \
- $(srcdir)/cally/cally-actor.c \
- $(srcdir)/cally/cally.c \
- $(srcdir)/cally/cally-clone.c \
- $(srcdir)/cally/cally-group.c \
- $(srcdir)/cally/cally-rectangle.c \
- $(srcdir)/cally/cally-root.c \
- $(srcdir)/cally/cally-stage.c \
- $(srcdir)/cally/cally-text.c \
- $(srcdir)/cally/cally-texture.c \
- $(srcdir)/cally/cally-util.c \
+ cally/cally-actor.c \
+ cally/cally.c \
+ cally/cally-clone.c \
+ cally/cally-group.c \
+ cally/cally-rectangle.c \
+ cally/cally-root.c \
+ cally/cally-stage.c \
+ cally/cally-text.c \
+ cally/cally-texture.c \
+ cally/cally-util.c \
$(NULL)
cally_sources_private = \
- $(srcdir)/cally/cally-actor-private.h \
+ cally/cally-actor-private.h \
$(NULL)
cally_includedir = $(clutter_base_includedir)/cally
@@ -795,7 +799,7 @@ include $(top_srcdir)/build/autotools/Makefile.am.marshal
# glib-mkenums rules
glib_enum_h = clutter-enum-types.h
glib_enum_c = clutter-enum-types.c
-glib_enum_headers = $(source_h) $(backend_source_h)
+glib_enum_headers = $(source_h) $(deprecated_h) $(backend_source_h)
include $(top_srcdir)/build/autotools/Makefile.am.enums
pkgconfigdir = $(libdir)/pkgconfig
@@ -804,11 +808,11 @@ DISTCLEANFILES += $(pc_files)
clutter_include_HEADERS = \
$(source_h) \
- $(top_srcdir)/clutter/clutter.h \
- $(top_builddir)/clutter/clutter-version.h
+ clutter.h \
+ clutter-version.h
nodist_clutter_include_HEADERS = \
- $(top_builddir)/clutter/clutter-config.h \
+ clutter-config.h \
$(built_source_h)
clutter_deprecated_HEADERS = $(deprecated_h)
@@ -850,7 +854,6 @@ libclutter_@CLUTTER_API_VERSION@_la_LDFLAGS = \
$(CLUTTER_LINK_FLAGS) \
$(CLUTTER_LT_LDFLAGS) \
-export-dynamic \
- -export-symbols-regex "^(clutter|cally).*" \
-rpath $(libdir) \
$(win32_resources_ldflag) \
$(NULL)
@@ -930,7 +933,6 @@ clutter.vsenums_c:
EXTRA_DIST += \
clutter-config.h.win32 \
clutter-config.h.win32_GDK \
- clutter.symbols \
$(NULL)
# Let the VS9/VS10 Project files be cleared out before they are re-expanded...
@@ -970,7 +972,7 @@ Clutter_@CLUTTER_API_VERSION_AM@_gir_FILES = \
$(source_c) \
$(deprecated_c) \
$(built_source_c)
-Clutter_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS)
+Clutter_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
Clutter_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-1.0 CoglPango-1.0 Atk-1.0 Json-1.0
Clutter_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
--warn-all \
@@ -985,7 +987,7 @@ Cally_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = Cally
Cally_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
Cally_@CLUTTER_API_VERSION_AM@_gir_LIBS = libclutter-@CLUTTER_API_VERSION@.la
Cally_@CLUTTER_API_VERSION_AM@_gir_FILES = $(cally_sources_h) $(cally_sources_c)
-Cally_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS)
+Cally_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
Cally_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
--warn-all \
--identifier-prefix=Cally \
@@ -1009,7 +1011,7 @@ ClutterX11_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = xlib-2.0
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_LIBS = libclutter-@CLUTTER_API_VERSION@.la
ClutterX11_@CLUTTER_API_VERSION_AM@_gir_FILES = $(x11_introspection)
-ClutterX11_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS)
+ClutterX11_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
INTROSPECTION_GIRS += ClutterX11-@CLUTTER_API_VERSION@.gir
endif # SUPPORT_X11
@@ -1026,7 +1028,7 @@ ClutterGdk_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
ClutterGdk_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = Gdk-3.0
ClutterGdk_@CLUTTER_API_VERSION_AM@_gir_LIBS = libclutter-@CLUTTER_API_VERSION@.la
ClutterGdk_@CLUTTER_API_VERSION_AM@_gir_FILES = $(gdk_introspection)
-ClutterGdk_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS)
+ClutterGdk_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
INTROSPECTION_GIRS += ClutterGdk-@CLUTTER_API_VERSION@.gir
endif # SUPPORT_GDK
@@ -1041,21 +1043,3 @@ typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
CLEANFILES += $(gir_DATA) $(typelib_DATA)
endif # HAVE_INTROSPECTION
-
-# Test
-clutter_all_c_sources = \
- $(backend_source_c) \
- $(backend_source_c_priv) \
- $(source_c) \
- $(source_c_priv) \
- $(deprecated_c) \
- $(deprecated_c_priv) \
- $(cally_sources_c) \
- $(built_source_c)
-
-TESTS_ENVIRONMENT = srcdir="$(srcdir)" CLUTTER_BACKENDS="$(CLUTTER_BACKENDS)"
-if OS_LINUX
-TESTS = abicheck.sh
-endif
-
-EXTRA_DIST += abicheck.sh
diff --git a/clutter/abicheck.sh b/clutter/abicheck.sh
deleted file mode 100755
index 7106dd61a..000000000
--- a/clutter/abicheck.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-
-has_x11_backend=no
-has_gdk_backend=no
-has_wayland_backend=no
-for backend in ${CLUTTER_BACKENDS}; do
- case "$backend" in
- x11) has_x11_backend=yes ;;
- gdk) has_gdk_backend=yes ;;
- wayland) has_wayland_backend=yes ;;
- esac
-done
-
-cppargs="-DG_OS_UNIX"
-if [ $has_x11_backend = "yes" ]; then
- cppargs="$cppargs -DCLUTTER_WINDOWING_X11 -DCLUTTER_WINDOWING_GLX"
-fi
-
-if [ $has_gdk_backend = "yes" ]; then
- cppargs="$cppargs -DCLUTTER_WINDOWING_GDK"
-fi
-
-if [ $has_wayland_backend = "yes" ]; then
- cppargs="$cppargs -DCLUTTER_WINDOWING_WAYLAND"
-fi
-
-cpp -P ${cppargs} ${srcdir:-.}/clutter.symbols | sed -e '/^$/d' -e 's/ G_GNUC.*$//' -e 's/ PRIVATE//' -e 's/ DATA//' | sort > expected-abi
-
-nm -D -g --defined-only .libs/libclutter-1.0.so | cut -d ' ' -f 3 | egrep -v '^(__bss_start|_edata|_end)' | sort > actual-abi
-diff -u expected-abi actual-abi && rm -f expected-abi actual-abi
diff --git a/clutter/cally/cally-actor.c b/clutter/cally/cally-actor.c
index 2b9142a6f..7783e5fa0 100644
--- a/clutter/cally/cally-actor.c
+++ b/clutter/cally/cally-actor.c
@@ -173,18 +173,6 @@ static void cally_actor_notify_clutter (GObject *obj,
static void cally_actor_real_notify_clutter (GObject *obj,
GParamSpec *pspec);
-G_DEFINE_TYPE_WITH_CODE (CallyActor,
- cally_actor,
- ATK_TYPE_GOBJECT_ACCESSIBLE,
- G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT,
- cally_actor_component_interface_init)
- G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION,
- cally_actor_action_interface_init));
-
-#define CALLY_ACTOR_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CALLY_TYPE_ACTOR, CallyActorPrivate))
-
-
struct _CallyActorPrivate
{
GQueue *action_queue;
@@ -194,6 +182,15 @@ struct _CallyActorPrivate
GList *children;
};
+G_DEFINE_TYPE_WITH_CODE (CallyActor,
+ cally_actor,
+ ATK_TYPE_GOBJECT_ACCESSIBLE,
+ G_ADD_PRIVATE (CallyActor)
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT,
+ cally_actor_component_interface_init)
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION,
+ cally_actor_action_interface_init));
+
/**
* cally_actor_new:
* @actor: a #ClutterActor
@@ -287,18 +284,16 @@ cally_actor_class_init (CallyActorClass *klass)
class->get_n_children = cally_actor_get_n_children;
class->ref_child = cally_actor_ref_child;
class->get_attributes = cally_actor_get_attributes;
-
- g_type_class_add_private (gobject_class, sizeof (CallyActorPrivate));
}
static void
cally_actor_init (CallyActor *cally_actor)
{
- CallyActorPrivate *priv = CALLY_ACTOR_GET_PRIVATE (cally_actor);
+ CallyActorPrivate *priv = cally_actor_get_instance_private (cally_actor);
cally_actor->priv = priv;
- priv->action_queue = NULL;
+ priv->action_queue = NULL;
priv->action_idle_handler = 0;
priv->action_list = NULL;
@@ -306,7 +301,6 @@ cally_actor_init (CallyActor *cally_actor)
priv->children = NULL;
}
-
static void
cally_actor_finalize (GObject *obj)
{
@@ -1105,7 +1099,7 @@ cally_actor_add_action (CallyActor *cally_actor,
}
/**
- * cally_actor_add_action_full:
+ * cally_actor_add_action_full: (rename-to cally_actor_add_action)
* @cally_actor: a #CallyActor
* @action_name: the action name
* @action_description: the action description
@@ -1118,8 +1112,6 @@ cally_actor_add_action (CallyActor *cally_actor,
*
* Return value: added action id, or -1 if failure
*
- * Rename to: cally_actor_add_action
- *
* Since: 1.6
*/
guint
diff --git a/clutter/cally/cally-actor.h b/clutter/cally/cally-actor.h
index 415054eeb..c17c26ea6 100644
--- a/clutter/cally/cally-actor.h
+++ b/clutter/cally/cally-actor.h
@@ -22,13 +22,13 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_ACTOR_H__
+#define __CALLY_ACTOR_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_ACTOR_H__
-#define __CALLY_ACTOR_H__
-
#include
#include
@@ -126,16 +126,19 @@ struct _CallyActorClass
gpointer _padding_dummy[32];
};
-
+CLUTTER_AVAILABLE_IN_1_4
GType cally_actor_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject* cally_actor_new (ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_1_4
guint cally_actor_add_action (CallyActor *cally_actor,
const gchar *action_name,
const gchar *action_description,
const gchar *action_keybinding,
CallyActionFunc action_func);
+CLUTTER_AVAILABLE_IN_1_6
guint cally_actor_add_action_full (CallyActor *cally_actor,
const gchar *action_name,
const gchar *action_description,
@@ -144,9 +147,11 @@ guint cally_actor_add_action_full (CallyActor *cally_actor,
gpointer user_data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_1_4
gboolean cally_actor_remove_action (CallyActor *cally_actor,
gint action_id);
+CLUTTER_AVAILABLE_IN_1_4
gboolean cally_actor_remove_action_by_name (CallyActor *cally_actor,
const gchar *action_name);
diff --git a/clutter/cally/cally-clone.c b/clutter/cally/cally-clone.c
index 3f2704919..9672ce32a 100644
--- a/clutter/cally/cally-clone.c
+++ b/clutter/cally/cally-clone.c
@@ -69,6 +69,7 @@
* a11y POV should still be managed as a image (with the proper properties,
* position, size, etc.).
*/
+#include "config.h"
#include "cally-clone.h"
#include "cally-actor-private.h"
diff --git a/clutter/cally/cally-clone.h b/clutter/cally/cally-clone.h
index 4e187b9d9..3a3777035 100644
--- a/clutter/cally/cally-clone.h
+++ b/clutter/cally/cally-clone.h
@@ -18,15 +18,15 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_CLONE_H__
+#define __CALLY_CLONE_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_CLONE_H__
-#define __CALLY_CLONE_H__
-
-#include
#include
+#include
G_BEGIN_DECLS
@@ -74,7 +74,9 @@ struct _CallyCloneClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_clone_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject *cally_clone_new (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/cally/cally-group.c b/clutter/cally/cally-group.c
index f3b1a1290..fce8a75d5 100644
--- a/clutter/cally/cally-group.c
+++ b/clutter/cally/cally-group.c
@@ -30,14 +30,12 @@
* @see_also: #ClutterGroup
*
* #CallyGroup implements the required ATK interfaces of #ClutterGroup
- * In particular it exposes:
- *
- *
- * Each of the Clutter actors contained in the
- * Group.
- *
+ * In particular it exposes each of the Clutter actors contained in the
+ * group.
*/
+#include "config.h"
+
#include "cally-group.h"
#include "cally-actor-private.h"
diff --git a/clutter/cally/cally-group.h b/clutter/cally/cally-group.h
index 0f0bd170a..4efd25902 100644
--- a/clutter/cally/cally-group.h
+++ b/clutter/cally/cally-group.h
@@ -21,13 +21,13 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_GROUP_H__
+#define __CALLY_GROUP_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_GROUP_H__
-#define __CALLY_GROUP_H__
-
#include
#include
@@ -77,7 +77,9 @@ struct _CallyGroupClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_group_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject* cally_group_new (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/cally/cally-main.h b/clutter/cally/cally-main.h
index 00e613601..62931979b 100644
--- a/clutter/cally/cally-main.h
+++ b/clutter/cally/cally-main.h
@@ -22,16 +22,21 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_MAIN_H__
+#define __CALLY_MAIN_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_MAIN_H__
-#define __CALLY_MAIN_H__
+#include
+#include
G_BEGIN_DECLS
+CLUTTER_AVAILABLE_IN_1_4
gboolean cally_get_cally_initialized (void);
+CLUTTER_AVAILABLE_IN_1_4
gboolean cally_accessibility_init (void);
G_END_DECLS
diff --git a/clutter/cally/cally-rectangle.c b/clutter/cally/cally-rectangle.c
index 51a9863bc..ec792efed 100644
--- a/clutter/cally/cally-rectangle.c
+++ b/clutter/cally/cally-rectangle.c
@@ -30,11 +30,16 @@
* In particular it sets a proper role for the rectangle.
*/
+#include "config.h"
+
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
#include "cally-rectangle.h"
#include "cally-actor-private.h"
+#include "clutter-color.h"
+#include "deprecated/clutter-rectangle.h"
+
/* AtkObject */
static void cally_rectangle_real_initialize (AtkObject *obj,
gpointer data);
diff --git a/clutter/cally/cally-rectangle.h b/clutter/cally/cally-rectangle.h
index 6cd245765..0a205c5e6 100644
--- a/clutter/cally/cally-rectangle.h
+++ b/clutter/cally/cally-rectangle.h
@@ -18,13 +18,13 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_RECTANGLE_H__
+#define __CALLY_RECTANGLE_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_RECTANGLE_H__
-#define __CALLY_RECTANGLE_H__
-
#include
#include
@@ -74,7 +74,9 @@ struct _CallyRectangleClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_rectangle_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject* cally_rectangle_new (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/cally/cally-root.c b/clutter/cally/cally-root.c
index ee921dcce..aae37c6ab 100644
--- a/clutter/cally/cally-root.c
+++ b/clutter/cally/cally-root.c
@@ -35,9 +35,15 @@
* #ClutterStageManager).
*/
-#include
+#include "config.h"
+
#include "cally-root.h"
+#include "clutter-actor.h"
+#include "clutter-stage-private.h"
+#include "clutter-stage-manager.h"
+
+
/* GObject */
static void cally_root_finalize (GObject *object);
@@ -58,10 +64,6 @@ static void cally_util_stage_removed_cb (ClutterStageManager *st
ClutterStage *stage,
gpointer data);
-#define CALLY_ROOT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CALLY_TYPE_ROOT, CallyRootPrivate))
-
-G_DEFINE_TYPE (CallyRoot, cally_root, ATK_TYPE_GOBJECT_ACCESSIBLE)
-
struct _CallyRootPrivate
{
/* We save the CallyStage objects. Other option could save the stage
@@ -77,6 +79,8 @@ struct _CallyRootPrivate
guint stage_removed_id;
};
+G_DEFINE_TYPE_WITH_PRIVATE (CallyRoot, cally_root, ATK_TYPE_GOBJECT_ACCESSIBLE)
+
static void
cally_root_class_init (CallyRootClass *klass)
{
@@ -91,14 +95,12 @@ cally_root_class_init (CallyRootClass *klass)
class->get_parent = cally_root_get_parent;
class->initialize = cally_root_initialize;
class->get_name = cally_root_get_name;
-
- g_type_class_add_private (gobject_class, sizeof (CallyRootPrivate));
}
static void
-cally_root_init (CallyRoot *root)
+cally_root_init (CallyRoot *root)
{
- root->priv = CALLY_ROOT_GET_PRIVATE (root);
+ root->priv = cally_root_get_instance_private (root);
root->priv->stage_list = NULL;
root->priv->stage_added_id = 0;
diff --git a/clutter/cally/cally-root.h b/clutter/cally/cally-root.h
index fd3dcbfd0..10674942f 100644
--- a/clutter/cally/cally-root.h
+++ b/clutter/cally/cally-root.h
@@ -18,14 +18,15 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_ROOT_H__
+#define __CALLY_ROOT_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_ROOT_H__
-#define __CALLY_ROOT_H__
-
#include
+#include
G_BEGIN_DECLS
@@ -73,8 +74,9 @@ struct _CallyRootClass
gpointer _padding_dummy[16];
};
-
+CLUTTER_AVAILABLE_IN_1_4
GType cally_root_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject *cally_root_new (void);
G_END_DECLS
diff --git a/clutter/cally/cally-stage.c b/clutter/cally/cally-stage.c
index 2b1cfd179..25bb321b5 100644
--- a/clutter/cally/cally-stage.c
+++ b/clutter/cally/cally-stage.c
@@ -34,6 +34,7 @@
* being a canvas. Anyway, this is required for applications using
* just clutter, or directly #ClutterStage
*/
+#include "config.h"
#include "cally-stage.h"
#include "cally-actor-private.h"
@@ -52,16 +53,6 @@ static void cally_stage_activate_cb (ClutterStage *stage,
static void cally_stage_deactivate_cb (ClutterStage *stage,
gpointer data);
-
-G_DEFINE_TYPE_WITH_CODE (CallyStage,
- cally_stage,
- CALLY_TYPE_GROUP,
- G_IMPLEMENT_INTERFACE (ATK_TYPE_WINDOW,
- cally_stage_window_interface_init));
-
-#define CALLY_STAGE_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CALLY_TYPE_STAGE, CallyStagePrivate))
-
struct _CallyStagePrivate
{
/* NULL means that the stage will receive the focus */
@@ -70,24 +61,27 @@ struct _CallyStagePrivate
gboolean active;
};
+G_DEFINE_TYPE_WITH_CODE (CallyStage,
+ cally_stage,
+ CALLY_TYPE_GROUP,
+ G_ADD_PRIVATE (CallyStage)
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_WINDOW,
+ cally_stage_window_interface_init));
+
static void
cally_stage_class_init (CallyStageClass *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
-/* CallyActorClass *cally_class = CALLY_ACTOR_CLASS (klass); */
+ AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
/* AtkObject */
class->initialize = cally_stage_real_initialize;
class->ref_state_set = cally_stage_ref_state_set;
-
- g_type_class_add_private (gobject_class, sizeof (CallyStagePrivate));
}
static void
cally_stage_init (CallyStage *cally_stage)
{
- CallyStagePrivate *priv = CALLY_STAGE_GET_PRIVATE (cally_stage);
+ CallyStagePrivate *priv = cally_stage_get_instance_private (cally_stage);
cally_stage->priv = priv;
@@ -139,7 +133,11 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage,
AtkObject *old = NULL;
if (self->priv->key_focus != NULL)
- old = clutter_actor_get_accessible (self->priv->key_focus);
+ {
+ g_object_remove_weak_pointer (G_OBJECT (self->priv->key_focus),
+ (gpointer *) &self->priv->key_focus);
+ old = clutter_actor_get_accessible (self->priv->key_focus);
+ }
else
old = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
@@ -154,7 +152,19 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage,
self->priv->key_focus = key_focus;
if (key_focus != NULL)
- new = clutter_actor_get_accessible (key_focus);
+ {
+ /* ensure that if the key focus goes away, the field inside
+ * CallyStage is reset. see bug:
+ *
+ * https://bugzilla.gnome.org/show_bug.cgi?id=692706
+ *
+ * we remove the weak pointer above.
+ */
+ g_object_add_weak_pointer (G_OBJECT (self->priv->key_focus),
+ (gpointer *) &self->priv->key_focus);
+
+ new = clutter_actor_get_accessible (key_focus);
+ }
else
new = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
diff --git a/clutter/cally/cally-stage.h b/clutter/cally/cally-stage.h
index 7ce4bb21f..c95d2ca13 100644
--- a/clutter/cally/cally-stage.h
+++ b/clutter/cally/cally-stage.h
@@ -18,13 +18,13 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_STAGE_H__
+#define __CALLY_STAGE_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_STAGE_H__
-#define __CALLY_STAGE_H__
-
#include
#include
@@ -74,7 +74,9 @@ struct _CallyStageClass
gpointer _padding_dummy[16];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_stage_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject *cally_stage_new (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/cally/cally-text.c b/clutter/cally/cally-text.c
index cf6dfcec3..0b6606f4a 100644
--- a/clutter/cally/cally-text.c
+++ b/clutter/cally/cally-text.c
@@ -46,7 +46,9 @@
#include "cally-text.h"
#include "cally-actor-private.h"
+#include "clutter-color.h"
#include "clutter-main.h"
+#include "clutter-text.h"
static void cally_text_finalize (GObject *obj);
@@ -172,17 +174,6 @@ static int _cally_misc_get_index_at_point (ClutterText *clutter
gint y,
AtkCoordType coords);
-G_DEFINE_TYPE_WITH_CODE (CallyText,
- cally_text,
- CALLY_TYPE_ACTOR,
- G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT,
- cally_text_text_interface_init)
- G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT,
- cally_text_editable_text_interface_init));
-
-#define CALLY_TEXT_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CALLY_TYPE_TEXT, CallyTextPrivate))
-
struct _CallyTextPrivate
{
/* Cached ClutterText values*/
@@ -204,6 +195,15 @@ struct _CallyTextPrivate
guint activate_action_id;
};
+G_DEFINE_TYPE_WITH_CODE (CallyText,
+ cally_text,
+ CALLY_TYPE_ACTOR,
+ G_ADD_PRIVATE (CallyText)
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT,
+ cally_text_text_interface_init)
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_EDITABLE_TEXT,
+ cally_text_editable_text_interface_init));
+
static void
cally_text_class_init (CallyTextClass *klass)
{
@@ -217,14 +217,12 @@ cally_text_class_init (CallyTextClass *klass)
class->ref_state_set = cally_text_ref_state_set;
cally_class->notify_clutter = cally_text_notify_clutter;
-
- g_type_class_add_private (gobject_class, sizeof (CallyTextPrivate));
}
static void
cally_text_init (CallyText *cally_text)
{
- CallyTextPrivate *priv = CALLY_TEXT_GET_PRIVATE (cally_text);
+ CallyTextPrivate *priv = cally_text_get_instance_private (cally_text);
cally_text->priv = priv;
@@ -1237,6 +1235,7 @@ cally_text_get_n_selections (AtkText *text)
{
ClutterActor *actor = NULL;
gint selection_bound = -1;
+ gint cursor_position = -1;
actor = CALLY_GET_CLUTTER_ACTOR (text);
if (actor == NULL) /* State is defunct */
@@ -1246,11 +1245,12 @@ cally_text_get_n_selections (AtkText *text)
return 0;
selection_bound = clutter_text_get_selection_bound (CLUTTER_TEXT (actor));
+ cursor_position = clutter_text_get_cursor_position (CLUTTER_TEXT (actor));
- if (selection_bound > 0)
- return 1;
- else
+ if (selection_bound == cursor_position)
return 0;
+ else
+ return 1;
}
static gchar*
diff --git a/clutter/cally/cally-text.h b/clutter/cally/cally-text.h
index ea4b6889f..ce3c0cba0 100644
--- a/clutter/cally/cally-text.h
+++ b/clutter/cally/cally-text.h
@@ -18,15 +18,15 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_TEXT_H__
+#define __CALLY_TEXT_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_TEXT_H__
-#define __CALLY_TEXT_H__
-
-#include
#include
+#include
G_BEGIN_DECLS
@@ -74,7 +74,9 @@ struct _CallyTextClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_text_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject* cally_text_new (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/cally/cally-texture.c b/clutter/cally/cally-texture.c
index d59bc3ad6..12964bd5e 100644
--- a/clutter/cally/cally-texture.c
+++ b/clutter/cally/cally-texture.c
@@ -30,10 +30,15 @@
*
* In particular it sets a proper role for the texture.
*/
+#include "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);
diff --git a/clutter/cally/cally-texture.h b/clutter/cally/cally-texture.h
index ff594c96a..dad576c14 100644
--- a/clutter/cally/cally-texture.h
+++ b/clutter/cally/cally-texture.h
@@ -18,15 +18,15 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_TEXTURE_H__
+#define __CALLY_TEXTURE_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_TEXTURE_H__
-#define __CALLY_TEXTURE_H__
-
-#include
#include
+#include
G_BEGIN_DECLS
@@ -74,7 +74,9 @@ struct _CallyTextureClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_texture_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
AtkObject *cally_texture_new (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/cally/cally-util.c b/clutter/cally/cally-util.c
index fdef2951d..ce37869d8 100644
--- a/clutter/cally/cally-util.c
+++ b/clutter/cally/cally-util.c
@@ -438,3 +438,15 @@ cally_util_stage_removed_cb (ClutterStageManager *stage_manager,
g_signal_handlers_disconnect_by_func (stage, cally_key_snooper_cb, NULL);
}
+
+void
+_cally_util_override_atk_util (void)
+{
+ AtkUtilClass *atk_class = ATK_UTIL_CLASS (g_type_class_ref (ATK_TYPE_UTIL));
+
+ atk_class->add_key_event_listener = cally_util_add_key_event_listener;
+ atk_class->remove_key_event_listener = cally_util_remove_key_event_listener;
+ atk_class->get_root = cally_util_get_root;
+ atk_class->get_toolkit_name = cally_util_get_toolkit_name;
+ atk_class->get_toolkit_version = cally_util_get_toolkit_version;
+}
diff --git a/clutter/cally/cally-util.h b/clutter/cally/cally-util.h
index 23d386ce6..76f36be7e 100644
--- a/clutter/cally/cally-util.h
+++ b/clutter/cally/cally-util.h
@@ -18,13 +18,14 @@
* License along with this library. If not, see .
*/
+#ifndef __CALLY_UTIL_H__
+#define __CALLY_UTIL_H__
+
#if !defined(__CALLY_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only can be included directly."
#endif
-#ifndef __CALLY_UTIL_H__
-#define __CALLY_UTIL_H__
-
+#include
#include
G_BEGIN_DECLS
@@ -73,8 +74,11 @@ struct _CallyUtilClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_4
GType cally_util_get_type (void) G_GNUC_CONST;
+void _cally_util_override_atk_util (void);
+
G_END_DECLS
#endif /* __CALLY_UTIL_H__ */
diff --git a/clutter/cally/cally.c b/clutter/cally/cally.c
index 2edcdf82b..4f23d20a4 100644
--- a/clutter/cally/cally.c
+++ b/clutter/cally/cally.c
@@ -53,8 +53,6 @@
#include "clutter-debug.h"
#include "clutter-private.h"
-static int cally_initialized = FALSE;
-
/* factories initialization*/
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_ACTOR, cally_actor, cally_actor_new)
CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_GROUP, cally_group, cally_group_new)
@@ -77,11 +75,6 @@ CALLY_ACCESSIBLE_FACTORY (CALLY_TYPE_CLONE, cally_clone, cally_clone_new)
gboolean
cally_accessibility_init (void)
{
- if (cally_initialized)
- return TRUE;
-
- cally_initialized = TRUE;
-
/* setting the factories */
CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_ACTOR, cally_actor);
CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_GROUP, cally_group);
@@ -92,11 +85,11 @@ cally_accessibility_init (void)
CALLY_ACTOR_SET_FACTORY (CLUTTER_TYPE_CLONE, cally_clone);
/* Initialize the CallyUtility class */
- g_type_class_unref (g_type_class_ref (CALLY_TYPE_UTIL));
+ _cally_util_override_atk_util ();
CLUTTER_NOTE (MISC, "Clutter Accessibility initialized");
- return cally_initialized;
+ return TRUE;
}
/**
@@ -111,5 +104,5 @@ cally_accessibility_init (void)
*/
gboolean cally_get_cally_initialized (void)
{
- return cally_initialized;
+ return !g_strcmp0 (atk_get_toolkit_name (), "clutter");
}
diff --git a/clutter/cex100/clutter-backend-cex100.c b/clutter/cex100/clutter-backend-cex100.c
index 264dc0044..4bd498f8a 100644
--- a/clutter/cex100/clutter-backend-cex100.c
+++ b/clutter/cex100/clutter-backend-cex100.c
@@ -142,7 +142,7 @@ clutter_backend_cex100_init (ClutterBackendCex100 *backend_cex100)
* the stage will be drawn. By default Clutter will pick UPP_C
* (GDL_PLANE_ID_UPP_C).
*
- * This function has to be called before clutter_init()
+ * This function has to be called before clutter_init().
*
* Since: 1.6
*/
@@ -164,7 +164,7 @@ clutter_cex100_set_plane (gdl_plane_id_t plane)
*
* Clutter defaults to %CLUTTER_CEX100_TRIPLE_BUFFERING.
*
- * This function has to be called before clutter_init()
+ * This function has to be called before clutter_init().
*
* Since: 1.6
*/
diff --git a/clutter/cex100/clutter-cex100.h.in b/clutter/cex100/clutter-cex100.h.in
index 57e241df4..c1ea011df 100644
--- a/clutter/cex100/clutter-cex100.h.in
+++ b/clutter/cex100/clutter-cex100.h.in
@@ -29,8 +29,7 @@
* The CEX100 backend for Clutter provides some Intel CE3100/CE4100
* specific API
*
- * You need to include
- *
+ * You need to include `clutter/cex100/clutter-cex100.h`
* to have access to the functions documented here.
*/
diff --git a/clutter/clutter-action.h b/clutter/clutter-action.h
index d2e98db6d..56f31bb73 100644
--- a/clutter/clutter-action.h
+++ b/clutter/clutter-action.h
@@ -45,8 +45,8 @@ typedef struct _ClutterActionClass ClutterActionClass;
/**
* ClutterAction:
*
- * The ClutterAction structure contains only
- * private data and should be accessed using the provided API
+ * The #ClutterAction structure contains only private data and
+ * should be accessed using the provided API.
*
* Since: 1.4
*/
@@ -59,8 +59,7 @@ struct _ClutterAction
/**
* ClutterActionClass:
*
- * The ClutterActionClass structure contains
- * only private data
+ * The ClutterActionClass structure contains only private data
*
* Since: 1.4
*/
@@ -79,24 +78,33 @@ struct _ClutterActionClass
void (* _clutter_action8) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_action_get_type (void) G_GNUC_CONST;
/* ClutterActor API */
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_add_action (ClutterActor *self,
ClutterAction *action);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_add_action_with_name (ClutterActor *self,
const gchar *name,
ClutterAction *action);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_remove_action (ClutterActor *self,
ClutterAction *action);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_remove_action_by_name (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
ClutterAction *clutter_actor_get_action (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
GList * clutter_actor_get_actions (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_clear_actions (ClutterActor *self);
-gboolean clutter_actor_has_actions (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_10
+gboolean clutter_actor_has_actions (ClutterActor *self);
G_END_DECLS
diff --git a/clutter/clutter-actor-box.c b/clutter/clutter-actor-box.c
index 538917660..3f3179dbd 100644
--- a/clutter/clutter-actor-box.c
+++ b/clutter/clutter-actor-box.c
@@ -455,7 +455,7 @@ clutter_actor_box_clamp_to_pixel (ClutterActorBox *box)
/**
* clutter_actor_box_union:
- * @a: (in) the first #ClutterActorBox
+ * @a: (in): the first #ClutterActorBox
* @b: (in): the second #ClutterActorBox
* @result: (out): the #ClutterActorBox representing a union
* of @a and @b
diff --git a/clutter/clutter-actor-meta.c b/clutter/clutter-actor-meta.c
index a58c773c5..583e81693 100644
--- a/clutter/clutter-actor-meta.c
+++ b/clutter/clutter-actor-meta.c
@@ -75,9 +75,9 @@ enum
static GParamSpec *obj_props[PROP_LAST];
-G_DEFINE_ABSTRACT_TYPE (ClutterActorMeta,
- clutter_actor_meta,
- G_TYPE_INITIALLY_UNOWNED);
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterActorMeta,
+ clutter_actor_meta,
+ G_TYPE_INITIALLY_UNOWNED)
static void
on_actor_destroy (ClutterActor *actor,
@@ -177,8 +177,6 @@ clutter_actor_meta_class_init (ClutterActorMetaClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterActorMetaPrivate));
-
klass->set_actor = clutter_actor_meta_real_set_actor;
/**
@@ -234,12 +232,8 @@ clutter_actor_meta_class_init (ClutterActorMetaClass *klass)
void
clutter_actor_meta_init (ClutterActorMeta *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_TYPE_ACTOR_META,
- ClutterActorMetaPrivate);
-
+ self->priv = clutter_actor_meta_get_instance_private (self);
self->priv->is_enabled = TRUE;
-
self->priv->priority = CLUTTER_ACTOR_META_PRIORITY_DEFAULT;
}
diff --git a/clutter/clutter-actor-meta.h b/clutter/clutter-actor-meta.h
index fa3fafe59..25b904c2c 100644
--- a/clutter/clutter-actor-meta.h
+++ b/clutter/clutter-actor-meta.h
@@ -46,7 +46,7 @@ typedef struct _ClutterActorMetaClass ClutterActorMetaClass;
/**
* ClutterActorMeta:
*
- * The ClutterActorMeta structure contains only
+ * The #ClutterActorMeta structure contains only
* private data and should be accessed using the provided API
*
* Since: 1.4
@@ -64,7 +64,7 @@ struct _ClutterActorMeta
* @set_actor: virtual function, invoked when attaching and detaching
* a #ClutterActorMeta instance to a #ClutterActor
*
- * The ClutterActorMetaClass structure contains
+ * The #ClutterActorMetaClass structure contains
* only private data
*
* Since: 1.4
@@ -97,15 +97,21 @@ struct _ClutterActorMetaClass
void (* _clutter_meta7) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_actor_meta_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_meta_set_name (ClutterActorMeta *meta,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
const gchar * clutter_actor_meta_get_name (ClutterActorMeta *meta);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_meta_set_enabled (ClutterActorMeta *meta,
gboolean is_enabled);
+CLUTTER_AVAILABLE_IN_1_4
gboolean clutter_actor_meta_get_enabled (ClutterActorMeta *meta);
+CLUTTER_AVAILABLE_IN_1_4
ClutterActor * clutter_actor_meta_get_actor (ClutterActorMeta *meta);
G_END_DECLS
diff --git a/clutter/clutter-actor-private.h b/clutter/clutter-actor-private.h
index 1c6f16524..29376a6f4 100644
--- a/clutter/clutter-actor-private.h
+++ b/clutter/clutter-actor-private.h
@@ -318,6 +318,9 @@ void _clutter_actor_detach_clone
ClutterActor *clone);
void _clutter_actor_queue_redraw_on_clones (ClutterActor *actor);
void _clutter_actor_queue_relayout_on_clones (ClutterActor *actor);
+void _clutter_actor_queue_only_relayout (ClutterActor *actor);
+
+CoglFramebuffer * _clutter_actor_get_active_framebuffer (ClutterActor *actor);
G_END_DECLS
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index 096361559..5735edfb7 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -30,131 +30,121 @@
* and it encapsulates the position, size, and transformations of a node in
* the graph.
*
- *
- * Actor transformations
- * Each actor can be transformed using methods like
- * clutter_actor_set_scale() or clutter_actor_set_rotation(). The order
- * in which the transformations are applied is decided by Clutter and it is
- * the following:
- *
- * translation by the origin of the #ClutterActor:allocation;
- * translation by the actor's #ClutterActor:depth;
- * scaling by the #ClutterActor:scale-x and #ClutterActor:scale-y factors;
- * rotation around the #ClutterActor:rotation-angle-x and #ClutterActor:rotation-center-x;
- * rotation around the #ClutterActor:rotation-angle-y and #ClutterActor:rotation-center-y;
- * rotation around the #ClutterActor:rotation-angle-z and #ClutterActor:rotation-center-z;
- * negative translation by the #ClutterActor:anchor-x and #ClutterActor:anchor-y point.
- *
- *
+ * ## Actor transformations
*
- *
- * Modifying an actor's geometry
- * Each actor has a bounding box, called #ClutterActor:allocation
- * which is either set by its parent or explicitly through the
- * clutter_actor_set_position() and clutter_actor_set_size() methods.
- * Each actor also has an implicit preferred size.
- * An actor’s preferred size can be defined by any subclass by
- * overriding the #ClutterActorClass.get_preferred_width() and the
- * #ClutterActorClass.get_preferred_height() virtual functions, or it can
- * be explicitly set by using clutter_actor_set_width() and
- * clutter_actor_set_height().
- * An actor’s position can be set explicitly by using
- * clutter_actor_set_x() and clutter_actor_set_y(); the coordinates are
- * relative to the origin of the actor’s parent.
- *
+ * Each actor can be transformed using methods like clutter_actor_set_scale()
+ * or clutter_actor_set_rotation(). The order in which the transformations are
+ * applied is decided by Clutter and it is the following:
*
- *
- * Managing actor children
- * Each actor can have multiple children, by calling
- * clutter_actor_add_child() to add a new child actor, and
- * clutter_actor_remove_child() to remove an existing child. #ClutterActor
- * will hold a reference on each child actor, which will be released when
- * the child is removed from its parent, or destroyed using
- * clutter_actor_destroy().
- *
+ * 1. translation by the origin of the #ClutterActor:allocation property
+ * 2. translation by the actor's #ClutterActor:z-position property
+ * 3. translation by the actor's #ClutterActor:pivot-point property
+ * 4. scaling by the #ClutterActor:scale-x and #ClutterActor:scale-y factors
+ * 5. rotation around the #ClutterActor:rotation-angle-x and #ClutterActor:rotation-center-x
+ * 6. rotation around the #ClutterActor:rotation-angle-y and #ClutterActor:rotation-center-y
+ * 7. rotation around the #ClutterActor:rotation-angle-z and #ClutterActor:rotation-center-z
+ * 8. negative translation by the #ClutterActor:anchor-x and #ClutterActor:anchor-y point.
+ * 9. negative translation by the actor's #ClutterActor:pivot-point
+ *
+ * ## Modifying an actor's geometry
+ *
+ * Each actor has a bounding box, called #ClutterActor:allocation
+ * which is either set by its parent or explicitly through the
+ * clutter_actor_set_position() and clutter_actor_set_size() methods.
+ * Each actor also has an implicit preferred size.
+ *
+ * An actor’s preferred size can be defined by any subclass by
+ * overriding the #ClutterActorClass.get_preferred_width() and the
+ * #ClutterActorClass.get_preferred_height() virtual functions, or it can
+ * be explicitly set by using clutter_actor_set_width() and
+ * clutter_actor_set_height().
+ *
+ * An actor’s position can be set explicitly by using
+ * clutter_actor_set_x() and clutter_actor_set_y(); the coordinates are
+ * relative to the origin of the actor’s parent.
+ *
+ * ## Managing actor children
+ *
+ * Each actor can have multiple children, by calling
+ * clutter_actor_add_child() to add a new child actor, and
+ * clutter_actor_remove_child() to remove an existing child. #ClutterActor
+ * will hold a reference on each child actor, which will be released when
+ * the child is removed from its parent, or destroyed using
+ * clutter_actor_destroy().
+ *
+ * |[
* ClutterActor *actor = clutter_actor_new ();
*
- * /* set the bounding box of the actor */
+ * // set the bounding box of the actor
* clutter_actor_set_position (actor, 0, 0);
* clutter_actor_set_size (actor, 480, 640);
*
- * /* set the background color of the actor */
+ * // set the background color of the actor
* clutter_actor_set_background_color (actor, CLUTTER_COLOR_Orange);
*
- * /* set the bounding box of the child, relative to the parent */
+ * // set the bounding box of the child, relative to the parent
* ClutterActor *child = clutter_actor_new ();
* clutter_actor_set_position (child, 20, 20);
* clutter_actor_set_size (child, 80, 240);
*
- * /* set the background color of the child */
+ * // set the background color of the child
* clutter_actor_set_background_color (child, CLUTTER_COLOR_Blue);
*
- * /* add the child to the actor */
+ * // add the child to the actor
* clutter_actor_add_child (actor, child);
- *
- * Children can be inserted at a given index, or above and below
- * another child actor. The order of insertion determines the order of the
- * children when iterating over them. Iterating over children is performed
- * by using clutter_actor_get_first_child(), clutter_actor_get_previous_sibling(),
- * clutter_actor_get_next_sibling(), and clutter_actor_get_last_child(). It is
- * also possible to retrieve a list of children by using
- * clutter_actor_get_children(), as well as retrieving a specific child at a
- * given index by using clutter_actor_get_child_at_index().
- * If you need to track additions of children to a #ClutterActor, use
- * the #ClutterContainer::actor-added signal; similarly, to track removals
- * of children from a ClutterActor, use the #ClutterContainer::actor-removed
- * signal.
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
- * Actors
- *
- *
- *
+ * ]|
*
- *
- * Painting an actor
- * There are three ways to paint an actor:
- *
- * set a delegate #ClutterContent as the value for the
- * #ClutterActor:content property of the actor;
- * subclass #ClutterActor and override the
- * #ClutterActorClass.paint_node() virtual function;
- * subclass #ClutterActor and override the
- * #ClutterActorClass.paint() virtual function.
- *
- *
- * Setting the Content property
- * A #ClutterContent is a delegate object that takes over the
- * painting operation of one, or more actors. The #ClutterContent
- * painting will be performed on top of the #ClutterActor:background-color
- * of the actor, and before calling the #ClutterActorClass.paint_node()
- * virtual function.
- *
+ * Children can be inserted at a given index, or above and below
+ * another child actor. The order of insertion determines the order of the
+ * children when iterating over them. Iterating over children is performed
+ * by using clutter_actor_get_first_child(), clutter_actor_get_previous_sibling(),
+ * clutter_actor_get_next_sibling(), and clutter_actor_get_last_child(). It is
+ * also possible to retrieve a list of children by using
+ * clutter_actor_get_children(), as well as retrieving a specific child at a
+ * given index by using clutter_actor_get_child_at_index().
+ *
+ * If you need to track additions of children to a #ClutterActor, use
+ * the #ClutterContainer::actor-added signal; similarly, to track removals
+ * of children from a ClutterActor, use the #ClutterContainer::actor-removed
+ * signal.
+ *
+ * See [basic-actor.c](https://git.gnome.org/browse/clutter/tree/examples/basic-actor.c?h=clutter-1.18).
+ *
+ * ## Painting an actor
+ *
+ * There are three ways to paint an actor:
+ *
+ * - set a delegate #ClutterContent as the value for the #ClutterActor:content property of the actor
+ * - subclass #ClutterActor and override the #ClutterActorClass.paint_node() virtual function
+ * - subclass #ClutterActor and override the #ClutterActorClass.paint() virtual function.
+ *
+ * A #ClutterContent is a delegate object that takes over the painting
+ * operations of one, or more actors. The #ClutterContent painting will
+ * be performed on top of the #ClutterActor:background-color of the actor,
+ * and before calling the actor's own implementation of the
+ * #ClutterActorClass.paint_node() virtual function.
+ *
+ * |[
* ClutterActor *actor = clutter_actor_new ();
*
- * /* set the bounding box */
+ * // set the bounding box
* clutter_actor_set_position (actor, 50, 50);
* clutter_actor_set_size (actor, 100, 100);
*
- * /* set the content; the image_content variable is set elsewhere */
+ * // set the content; the image_content variable is set elsewhere
* clutter_actor_set_content (actor, image_content);
- *
- *
- *
- * Overriding the paint_node virtual function
- * The #ClutterActorClass.paint_node() virtual function is invoked
- * whenever an actor needs to be painted. The implementation of the
- * virtual function must only paint the contents of the actor itself,
- * and not the contents of its children, if the actor has any.
- * The #ClutterPaintNode passed to the virtual function is the
- * local root of the render tree; any node added to it will be
- * rendered at the correct position, as defined by the actor's
- * #ClutterActor:allocation.
- *
+ * ]|
+ *
+ * The #ClutterActorClass.paint_node() virtual function is invoked whenever
+ * an actor needs to be painted. The implementation of the virtual function
+ * must only paint the contents of the actor itself, and not the contents of
+ * its children, if the actor has any.
+ *
+ * The #ClutterPaintNode passed to the virtual function is the local root of
+ * the render tree; any node added to it will be rendered at the correct
+ * position, as defined by the actor's #ClutterActor:allocation.
+ *
+ * |[
* static void
* my_actor_paint_node (ClutterActor *actor,
* ClutterPaintNode *root)
@@ -162,112 +152,131 @@
* ClutterPaintNode *node;
* ClutterActorBox box;
*
- * /* where the content of the actor should be painted */
+ * // where the content of the actor should be painted
* clutter_actor_get_allocation_box (actor, &box);
*
- * /* the cogl_texture variable is set elsewhere */
+ * // the cogl_texture variable is set elsewhere
* node = clutter_texture_node_new (cogl_texture, CLUTTER_COLOR_White,
* CLUTTER_SCALING_FILTER_TRILINEAR,
* CLUTTER_SCALING_FILTER_LINEAR);
*
- * /* paint the content of the node using the allocation */
+ * // paint the content of the node using the allocation
* clutter_paint_node_add_rectangle (node, &box);
*
- * /* add the node, and transfer ownership */
+ * // add the node, and transfer ownership
* clutter_paint_node_add_child (root, node);
* clutter_paint_node_unref (node);
* }
- *
- *
- *
- * Overriding the paint virtual function
- * The #ClutterActorClass.paint() virtual function is invoked
- * when the #ClutterActor::paint signal is emitted, and after the other
- * signal handlers have been invoked. Overriding the paint virtual
- * function gives total control to the paint sequence of the actor
- * itself, including the children of the actor, if any.
- * It is strongly discouraged to override the
- * #ClutterActorClass.paint() virtual function, as well as connecting
- * to the #ClutterActor::paint signal. These hooks into the paint
- * sequence are considered legacy, and will be removed when the Clutter
- * API changes.
- *
- *
*
- *
- * Handling events on an actor
- * A #ClutterActor can receive and handle input device events, for
- * instance pointer events and key events, as long as its
- * #ClutterActor:reactive property is set to %TRUE.
- * Once an actor has been determined to be the source of an event,
- * Clutter will traverse the scene graph from the top-level actor towards the
- * event source, emitting the #ClutterActor::captured-event signal on each
- * ancestor until it reaches the source; this phase is also called
- * the capture phase. If the event propagation was not
- * stopped, the graph is walked backwards, from the source actor to the
- * top-level, and the #ClutterActor::event signal, along with other event
- * signals if needed, is emitted; this phase is also called the
- * bubble phase. At any point of the signal emission, signal
- * handlers can stop the propagation through the scene graph by returning
- * %CLUTTER_EVENT_STOP; otherwise, they can continue the propagation by
- * returning %CLUTTER_EVENT_PROPAGATE.
- *
+ * The #ClutterActorClass.paint() virtual function is invoked when the
+ * #ClutterActor::paint signal is emitted, and after the other signal
+ * handlers have been invoked. Overriding the paint virtual function
+ * gives total control to the paint sequence of the actor itself,
+ * including the children of the actor, if any.
*
- *
- * Animation
- * Animation is a core concept of modern user interfaces; Clutter
- * provides a complete and powerful animation framework that automatically
- * tweens the actor's state without requiring direct, frame by frame
- * manipulation from your application code.
- *
- * Implicit animations
- * The implicit animation model of Clutter assumes that all the
- * changes in an actor state should be gradual and asynchronous; Clutter
- * will automatically transition an actor's property change between the
- * current state and the desired one without manual intervention, if the
- * property is defined to be animatable in its documentation.
- * By default, in the 1.0 API series, the transition happens
- * with a duration of zero milliseconds, and the implicit animation is an
- * opt in feature to retain backwards compatibility.
- * Implicit animations depend on the current easing state; in order
- * to use the default easing state for an actor you should call the
- * clutter_actor_save_easing_state() function:
- *
- * /* assume that the actor is currently positioned at (100, 100) */
+ * It is strongly discouraged to override the #ClutterActorClass.paint()
+ * virtual function, as well as connecting to the #ClutterActor::paint
+ * signal. These hooks into the paint sequence are considered legacy, and
+ * will be removed when the Clutter API changes.
+ *
+ * ## Handling events on an actor
+ *
+ * A #ClutterActor can receive and handle input device events, for
+ * instance pointer events and key events, as long as its
+ * #ClutterActor:reactive property is set to %TRUE.
+ *
+ * Once an actor has been determined to be the source of an event,
+ * Clutter will traverse the scene graph from the top-level actor towards the
+ * event source, emitting the #ClutterActor::captured-event signal on each
+ * ancestor until it reaches the source; this phase is also called
+ * the "capture" phase. If the event propagation was not stopped, the graph
+ * is walked backwards, from the source actor to the top-level, and the
+ * #ClutterActor::event signal is emitted, alongside eventual event-specific
+ * signals like #ClutterActor::button-press-event or #ClutterActor::motion-event;
+ * this phase is also called the "bubble" phase.
+ *
+ * At any point of the signal emission, signal handlers can stop the propagation
+ * through the scene graph by returning %CLUTTER_EVENT_STOP; otherwise, they can
+ * continue the propagation by returning %CLUTTER_EVENT_PROPAGATE.
+ *
+ * ## Animation
+ *
+ * Animation is a core concept of modern user interfaces; Clutter provides a
+ * complete and powerful animation framework that automatically tweens the
+ * actor's state without requiring direct, frame by frame manipulation from
+ * your application code. You have two models at your disposal:
+ *
+ * - an implicit animation model
+ * - an explicit animation model
+ *
+ * The implicit animation model of Clutter assumes that all the
+ * changes in an actor state should be gradual and asynchronous; Clutter
+ * will automatically transition an actor's property change between the
+ * current state and the desired one without manual intervention, if the
+ * property is defined to be animatable in its documentation.
+ *
+ * By default, in the 1.0 API series, the transition happens with a duration
+ * of zero milliseconds, and the implicit animation is an opt in feature to
+ * retain backwards compatibility.
+ *
+ * Implicit animations depend on the current easing state; in order to use
+ * the default easing state for an actor you should call the
+ * clutter_actor_save_easing_state() function:
+ *
+ * |[
+ * // assume that the actor is currently positioned at (100, 100)
+ *
+ * // store the current easing state and reset the new easing state to
+ * // its default values
* clutter_actor_save_easing_state (actor);
+ *
+ * // change the actor's position
* clutter_actor_set_position (actor, 500, 500);
+ *
+ * // restore the previously saved easing state
* clutter_actor_restore_easing_state (actor);
- *
- * The example above will trigger an implicit animation of the
- * actor between its current position to a new position.
- * It is possible to animate multiple properties of an actor
- * at the same time, and you can animate multiple actors at the same
- * time as well, for instance:
- *
- * /* animate the actor's opacity and depth */
+ * ]|
+ *
+ * The example above will trigger an implicit animation of the
+ * actor between its current position to a new position.
+ *
+ * Implicit animations use a default duration of 250 milliseconds,
+ * and a default easing mode of %CLUTTER_EASE_OUT_CUBIC, unless you call
+ * clutter_actor_set_easing_mode() and clutter_actor_set_easing_duration()
+ * after changing the easing state of the actor.
+ *
+ * It is possible to animate multiple properties of an actor
+ * at the same time, and you can animate multiple actors at the same
+ * time as well, for instance:
+ *
+ * |[
* clutter_actor_save_easing_state (actor);
+ *
+ * // animate the actor's opacity and depth
* clutter_actor_set_opacity (actor, 0);
* clutter_actor_set_depth (actor, -100);
+ *
* clutter_actor_restore_easing_state (actor);
*
- * /* animate another actor's opacity */
* clutter_actor_save_easing_state (another_actor);
+ *
+ * // animate another actor's opacity
* clutter_actor_set_opacity (another_actor, 255);
* clutter_actor_set_depth (another_actor, 100);
+ *
* clutter_actor_restore_easing_state (another_actor);
- *
- * Implicit animations use a default duration of 250 milliseconds,
- * and a default easing mode of %CLUTTER_EASE_OUT_CUBIC, unless you call
- * clutter_actor_set_easing_mode() and clutter_actor_set_easing_duration()
- * after changing the easing state of the actor.
- * Changing the easing state will affect all the following property
- * transitions, but will not affect existing transitions.
- * It is important to note that if you modify the state on an
- * animatable property while a transition is in flight, the transition's
- * final value will be updated, as well as its duration and progress
- * mode by using the current easing state; for instance, in the following
- * example:
- *
+ * ]|
+ *
+ * Changing the easing state will affect all the following property
+ * transitions, but will not affect existing transitions.
+ *
+ * It is important to note that if you modify the state on an
+ * animatable property while a transition is in flight, the transition's
+ * final value will be updated, as well as its duration and progress
+ * mode by using the current easing state; for instance, in the following
+ * example:
+ *
+ * |[
* clutter_actor_save_easing_state (actor);
* clutter_actor_set_easing_duration (actor, 1000);
* clutter_actor_set_x (actor, 200);
@@ -277,23 +286,30 @@
* clutter_actor_set_easing_duration (actor, 500);
* clutter_actor_set_x (actor, 100);
* clutter_actor_restore_easing_state (actor);
- *
- * the first call to clutter_actor_set_x() will begin a transition
- * of the #ClutterActor:x property from the current value to the value of
- * 200 over a duration of one second; the second call to clutter_actor_set_x()
- * will change the transition's final value to 100 and the duration to 500
- * milliseconds.
- * It is possible to retrieve the #ClutterTransition used by the
- * animatable properties by using clutter_actor_get_transition() and using
- * the property name as the transition name.
- *
- *
- * Explicit animations
- * The explicit animation model supported by Clutter requires that
- * you create a #ClutterTransition object, and set the initial and
- * final values. The transition will not start unless you add it to the
- * #ClutterActor.
- *
+ * ]|
+ *
+ * the first call to clutter_actor_set_x() will begin a transition
+ * of the #ClutterActor:x property from the current value to the value of
+ * 200 over a duration of one second; the second call to clutter_actor_set_x()
+ * will change the transition's final value to 100 and the duration to 500
+ * milliseconds.
+ *
+ * It is possible to receive a notification of the completion of an
+ * implicit transition by using the #ClutterActor::transition-stopped
+ * signal, decorated with the name of the property. In case you want to
+ * know when all the currently in flight transitions are complete, use
+ * the #ClutterActor::transitions-completed signal instead.
+ *
+ * It is possible to retrieve the #ClutterTransition used by the
+ * animatable properties by using clutter_actor_get_transition() and using
+ * the property name as the transition name.
+ *
+ * The explicit animation model supported by Clutter requires that
+ * you create a #ClutterTransition object, and optionally set the initial
+ * and final values. The transition will not start unless you add it to the
+ * #ClutterActor.
+ *
+ * |[
* ClutterTransition *transition;
*
* transition = clutter_property_transition_new ("opacity");
@@ -304,144 +320,144 @@
* clutter_transition_set_to (transition, G_TYPE_UINT, 0);
*
* clutter_actor_add_transition (actor, "animate-opacity", transition);
- *
- * The example above will animate the #ClutterActor:opacity property
- * of an actor between fully opaque and fully transparent, and back, over
- * a span of 3 seconds. The animation does not begin until it is added to
- * the actor.
- * The explicit animation API applies to all #GObject properties,
- * as well as the custom properties defined through the #ClutterAnimatable
- * interface, regardless of whether they are defined as implicitly
- * animatable or not.
- * The explicit animation API should also be used when using custom
- * animatable properties for #ClutterAction, #ClutterConstraint, and
- * #ClutterEffect instances associated to an actor; see the section on
- * custom
- * animatable properties below for an example.
- * Finally, explicit animations are useful for creating animations
- * that run continuously, for instance:
- *
- * /* this animation will pulse the actor's opacity continuously */
+ * ]|
+ *
+ * The example above will animate the #ClutterActor:opacity property
+ * of an actor between fully opaque and fully transparent, and back, over
+ * a span of 3 seconds. The animation does not begin until it is added to
+ * the actor.
+ *
+ * The explicit animation API applies to all #GObject properties,
+ * as well as the custom properties defined through the #ClutterAnimatable
+ * interface, regardless of whether they are defined as implicitly
+ * animatable or not.
+ *
+ * The explicit animation API should also be used when using custom
+ * animatable properties for #ClutterAction, #ClutterConstraint, and
+ * #ClutterEffect instances associated to an actor; see the section on
+ * custom animatable properties below for an example.
+ *
+ * Finally, explicit animations are useful for creating animations
+ * that run continuously, for instance:
+ *
+ * |[
+ * // this animation will pulse the actor's opacity continuously
* ClutterTransition *transition;
* ClutterInterval *interval;
*
* transition = clutter_property_transition_new ("opacity");
*
- * /* we want to animate the opacity between 0 and 255 */
+ * // we want to animate the opacity between 0 and 255
* clutter_transition_set_from (transition, G_TYPE_UINT, 0);
* clutter_transition_set_to (transition, G_TYPE_UINT, 255);
*
- * /* over a one second duration, running an infinite amount of times */
+ * // over a one second duration, running an infinite amount of times
* clutter_timeline_set_duration (CLUTTER_TIMELINE (transition), 1000);
* clutter_timeline_set_repeat_count (CLUTTER_TIMELINE (transition), -1);
*
- * /* we want to fade in and out, so we need to auto-reverse the transition */
+ * // we want to fade in and out, so we need to auto-reverse the transition
* clutter_timeline_set_auto_reverse (CLUTTER_TIMELINE (transition), TRUE);
*
- * /* and we want to use an easing function that eases both in and out */
+ * // and we want to use an easing function that eases both in and out
* clutter_timeline_set_progress_mode (CLUTTER_TIMELINE (transition),
* CLUTTER_EASE_IN_OUT_CUBIC);
*
- * /* add the transition to the desired actor; this will
- * * start the animation.
- * */
+ * // add the transition to the desired actor to start it
* clutter_actor_add_transition (actor, "opacityAnimation", transition);
- *
- *
- *
+ * ]|
*
- *
- * Implementing an actor
- * Careful consideration should be given when deciding to implement
- * a #ClutterActor sub-class. It is generally recommended to implement a
- * sub-class of #ClutterActor only for actors that should be used as leaf
- * nodes of a scene graph.
- * If your actor should be painted in a custom way, you should
- * override the #ClutterActor::paint signal class handler. You can either
- * opt to chain up to the parent class implementation or decide to fully
- * override the default paint implementation; Clutter will set up the
- * transformations and clip regions prior to emitting the #ClutterActor::paint
- * signal.
- * By overriding the #ClutterActorClass.get_preferred_width() and
- * #ClutterActorClass.get_preferred_height() virtual functions it is
- * possible to change or provide the preferred size of an actor; similarly,
- * by overriding the #ClutterActorClass.allocate() virtual function it is
- * possible to control the layout of the children of an actor. Make sure to
- * always chain up to the parent implementation of the
- * #ClutterActorClass.allocate() virtual function.
- * In general, it is strongly encouraged to use delegation and
- * composition instead of direct subclassing.
- *
+ * ## Implementing an actor
*
- *
- * ClutterActor custom properties for #ClutterScript
- * #ClutterActor defines a custom "rotation" property which
- * allows a short-hand description of the rotations to be applied
- * to an actor.
- * The syntax of the "rotation" property is the following:
- *
- *
- * "rotation" : [
- * { "<axis>" : [ <angle>, [ <center> ] ] }
- * ]
- *
- *
- * where the axis is the name of an enumeration
- * value of type #ClutterRotateAxis and angle is a
- * floating point value representing the rotation angle on the given axis,
- * in degrees.
- * The center array is optional, and if present
- * it must contain the center of rotation as described by two coordinates:
- * Y and Z for "x-axis"; X and Z for "y-axis"; and X and Y for
- * "z-axis".
- * #ClutterActor also defines a scriptable "margin" property which
- * follows the CSS "margin" shorthand.
- *
- *
- * // 4 values
- * "margin" : [ <top>, <right>, <bottom> <left> ]
- * // 3 values
- * "margin" : [ <top>, <left/right>, <bottom> ]
- * // 2 values
- * "margin" : [ <top/bottom>, <left/right> ]
- * // 1 value
- * "margin" : [ <top/right/bottom/left> ]
- *
- *
- *
- * #ClutterActor will also parse every positional and dimensional
- * property defined as a string through clutter_units_from_string(); you
- * should read the documentation for the #ClutterUnits parser format for
- * the valid units and syntax.
- *
+ * Careful consideration should be given when deciding to implement
+ * a #ClutterActor sub-class. It is generally recommended to implement a
+ * sub-class of #ClutterActor only for actors that should be used as leaf
+ * nodes of a scene graph.
*
- *
- * Custom animatable properties
- * #ClutterActor allows accessing properties of #ClutterAction,
- * #ClutterEffect, and #ClutterConstraint instances associated to an actor
- * instance for animation purposes.
- * In order to access a specific #ClutterAction or a #ClutterConstraint
- * property it is necessary to set the #ClutterActorMeta:name property on the
- * given action or constraint.
- * The property can be accessed using the following syntax:
- *
- *
- * @<section>.<meta-name>.<property-name>
- *
- *
- * The initial @ is mandatory.
- * The section fragment can be one between
- * "actions", "constraints" and "effects".
- * The meta-name fragment is the name of the
- * action or constraint, as specified by the #ClutterActorMeta:name
- * property.
- * The property-name fragment is the name of the
- * action or constraint property to be animated.
- * The example below animates a #ClutterBindConstraint applied to an
- * actor using clutter_actor_animate(). The rect has
- * a binding constraint for the origin actor, and in
- * its initial state is overlapping the actor to which is bound to.
- *
+ * If your actor should be painted in a custom way, you should
+ * override the #ClutterActor::paint signal class handler. You can either
+ * opt to chain up to the parent class implementation or decide to fully
+ * override the default paint implementation; Clutter will set up the
+ * transformations and clip regions prior to emitting the #ClutterActor::paint
+ * signal.
+ *
+ * By overriding the #ClutterActorClass.get_preferred_width() and
+ * #ClutterActorClass.get_preferred_height() virtual functions it is
+ * possible to change or provide the preferred size of an actor; similarly,
+ * by overriding the #ClutterActorClass.allocate() virtual function it is
+ * possible to control the layout of the children of an actor. Make sure to
+ * always chain up to the parent implementation of the
+ * #ClutterActorClass.allocate() virtual function.
+ *
+ * In general, it is strongly encouraged to use delegation and composition
+ * instead of direct subclassing.
+ *
+ * ## ClutterActor custom properties for ClutterScript
+ *
+ * #ClutterActor defines a custom "rotation" property which allows a short-hand
+ * description of the rotations to be applied to an actor.
+ *
+ * The syntax of the "rotation" property is the following:
+ *
+ * |[
+ * "rotation" : [ { "" : [ , [ ] ] } ]
+ * ]|
+ *
+ * where:
+ *
+ * - axis is the name of an enumeration value of type #ClutterRotateAxis
+ * - angle is a floating point value representing the rotation angle on the given axis in degrees
+ * - center-point is an optional array, and if present it must contain the center of rotation as described by two coordinates:
+ * - Y and Z for "x-axis"
+ * - X and Z for "y-axis"
+ * - X and Y for "z-axis".
+ *
+ * #ClutterActor also defines a scriptable "margin" property which follows the CSS "margin" shorthand.
+ *
+ * |[
+ * // 4 values
+ * "margin" : [ top, right, bottom, left ]
+ * // 3 values
+ * "margin" : [ top, left/right, bottom ]
+ * // 2 values
+ * "margin" : [ top/bottom, left/right ]
+ * // 1 value
+ * "margin" : [ top/right/bottom/left ]
+ * ]|
+ *
+ * #ClutterActor will also parse every positional and dimensional
+ * property defined as a string through clutter_units_from_string(); you
+ * should read the documentation for the #ClutterUnits parser format for
+ * the valid units and syntax.
+ *
+ * ## Custom animatable properties
+ *
+ * #ClutterActor allows accessing properties of #ClutterAction,
+ * #ClutterEffect, and #ClutterConstraint instances associated to an actor
+ * instance for animation purposes.
+ *
+ * In order to access a specific #ClutterAction or a #ClutterConstraint
+ * property it is necessary to set the #ClutterActorMeta:name property on the
+ * given action or constraint.
+ *
+ * The property can be accessed using the following syntax:
+ *
+ * |[
+ * @..
+ * ]|
+ *
+ * - the initial `@` is mandatory
+ * - the `section` fragment can be one between "actions", "constraints" and "effects"
+ * - the `meta-name` fragment is the name of the action, effect, or constraint, as
+ * specified by the #ClutterActorMeta:name property of #ClutterActorMeta
+ * - the `property-name` fragment is the name of the action, effect, or constraint
+ * property to be animated.
+ *
+ * The example below animates a #ClutterBindConstraint applied to an actor
+ * using an explicit transition. The `rect` actor has a binding constraint
+ * on the `origin` actor, and in its initial state is overlapping the actor
+ * to which is bound to.
+ *
+ * |[
* constraint = clutter_bind_constraint_new (origin, CLUTTER_BIND_X, 0.0);
* clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "bind-x");
* clutter_actor_add_constraint (rect, constraint);
@@ -455,11 +471,13 @@
* g_signal_connect (origin, "button-press-event",
* G_CALLBACK (on_button_press),
* rect);
- *
- * On button press, the rectangle "slides" from behind the actor to
- * which is bound to, using the #ClutterBindConstraint:offset property to
- * achieve the effect:
- *
+ * ]|
+ *
+ * On button press, the rectangle "slides" from behind the actor to
+ * which is bound to, using the #ClutterBindConstraint:offset property to
+ * achieve the effect:
+ *
+ * |[
* gboolean
* on_button_press (ClutterActor *origin,
* ClutterEvent *event,
@@ -467,43 +485,39 @@
* {
* ClutterTransition *transition;
*
- * /* the offset that we want to apply; this will make the actor
- * * slide in from behind the origin and rest at the right of
- * * the origin, plus a padding value.
- * */
+ * // the offset that we want to apply; this will make the actor
+ * // slide in from behind the origin and rest at the right of
+ * // the origin, plus a padding value
* float new_offset = clutter_actor_get_width (origin) + h_padding;
*
- * /* the property we wish to animate; the "@constraints" section
- * * tells Clutter to check inside the constraints associated
- * * with the actor; the "bind-x" section is the name of the
- * * constraint; and the "offset" is the name of the property
- * * on the constraint.
- * */
+ * // the property we wish to animate; the "@constraints" section
+ * // tells Clutter to check inside the constraints associated
+ * // with the actor; the "bind-x" section is the name of the
+ * // constraint; and the "offset" is the name of the property
+ * // on the constraint
* const char *prop = "@constraints.bind-x.offset";
*
- * /* create a new transition for the given property */
+ * // create a new transition for the given property
* transition = clutter_property_transition_new (prop);
*
- * /* set the easing mode and duration */
+ * // set the easing mode and duration
* clutter_timeline_set_progress_mode (CLUTTER_TIMELINE (transition),
* CLUTTER_EASE_OUT_CUBIC);
* clutter_timeline_set_duration (CLUTTER_TIMELINE (transition), 500);
*
- * /* create the interval with the initial and final values */
+ * // create the interval with the initial and final values
* clutter_transition_set_from (transition, G_TYPE_FLOAT, 0.f);
* clutter_transition_set_to (transition, G_TYPE_FLOAT, new_offset);
*
- * /* add the transition to the actor; this causes the animation
- * * to start. the name "offsetAnimation" can be used to retrieve
- * * the transition later.
- * */
+ * // add the transition to the actor; this causes the animation
+ * // to start. the name "offsetAnimation" can be used to retrieve
+ * // the transition later
* clutter_actor_add_transition (rect, "offsetAnimation", transition);
*
- * /* we handled the event */
+ * // we handled the event
* return CLUTTER_EVENT_STOP;
* }
- *
- *
+ * ]|
*/
/**
@@ -579,9 +593,7 @@
* Since: 0.6
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include
@@ -599,7 +611,7 @@
#include "clutter-animatable.h"
#include "clutter-color-static.h"
#include "clutter-color.h"
-#include "clutter-constraint.h"
+#include "clutter-constraint-private.h"
#include "clutter-container.h"
#include "clutter-content-private.h"
#include "clutter-debug.h"
@@ -628,9 +640,6 @@
#include "deprecated/clutter-behaviour.h"
#include "deprecated/clutter-container.h"
-#define CLUTTER_ACTOR_GET_PRIVATE(obj) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_ACTOR, ClutterActorPrivate))
-
/* Internal enum used to control mapped state update. This is a hint
* which indicates when to do something other than just enforce
* invariants.
@@ -704,7 +713,6 @@ struct _ClutterActorPrivate
gint age;
gchar *name; /* a non-unique name, used for debugging */
- guint32 id; /* unique id, used for backward compatibility */
gint32 pick_id; /* per-stage unique id, used for picking */
@@ -816,7 +824,6 @@ struct _ClutterActorPrivate
guint needs_compute_expand : 1;
guint needs_x_expand : 1;
guint needs_y_expand : 1;
- guint was_painted : 1;
};
enum
@@ -1041,8 +1048,6 @@ static void clutter_anchor_coord_set_gravity (AnchorCoord *coord
static gboolean clutter_anchor_coord_is_zero (const AnchorCoord *coord);
-static void _clutter_actor_queue_only_relayout (ClutterActor *self);
-
static void _clutter_actor_get_relative_transformation_matrix (ClutterActor *self,
ClutterActor *ancestor,
CoglMatrix *matrix);
@@ -1068,7 +1073,8 @@ static void clutter_actor_set_transform_internal (ClutterActor *self,
static void clutter_actor_set_child_transform_internal (ClutterActor *self,
const ClutterMatrix *transform);
-static inline gboolean clutter_actor_has_mapped_clones (ClutterActor *self);
+static void clutter_actor_realize_internal (ClutterActor *self);
+static void clutter_actor_unrealize_internal (ClutterActor *self);
/* Helper macro which translates by the anchor coord, applies the
given transformation and then translates back */
@@ -1087,6 +1093,7 @@ static GQuark quark_actor_animation_info = 0;
G_DEFINE_TYPE_WITH_CODE (ClutterActor,
clutter_actor,
G_TYPE_INITIALLY_UNOWNED,
+ G_ADD_PRIVATE (ClutterActor)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
clutter_container_iface_init)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
@@ -1488,12 +1495,6 @@ clutter_actor_real_map (ClutterActor *self)
stage = _clutter_actor_get_stage_internal (self);
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
- /* reset the was_painted flag here: unmapped actors are not going to
- * be painted in any case, and this allows us to catch the case of
- * cloned actors.
- */
- priv->was_painted = FALSE;
-
CLUTTER_NOTE (ACTOR, "Pick id '%d' for actor '%s'",
priv->pick_id,
_clutter_actor_get_debug_name (self));
@@ -1607,11 +1608,11 @@ clutter_actor_real_unmap (ClutterActor *self)
* When overriding #ClutterActorClass.unmap(), it is mandatory to
* chain up to the parent implementation.
*
- * It is important to note that the implementation of the
+ * It is important to note that the implementation of the
* #ClutterActorClass.unmap() virtual function may be called after
* the #ClutterActorClass.destroy() or the #GObjectClass.dispose()
* implementation, but it is guaranteed to be called before the
- * #GObjectClass.finalize() implementation.
+ * #GObjectClass.finalize() implementation.
*
* Since: 1.0
*/
@@ -1888,15 +1889,22 @@ clutter_actor_hide_all (ClutterActor *self)
* This function does not realize child actors, except in the special
* case that realizing the stage, when the stage is visible, will
* suddenly map (and thus realize) the children of the stage.
- **/
+ *
+ * Deprecated: 1.16: Actors are automatically realized, and nothing
+ * requires explicit realization.
+ */
void
clutter_actor_realize (ClutterActor *self)
{
- ClutterActorPrivate *priv;
-
g_return_if_fail (CLUTTER_IS_ACTOR (self));
- priv = self->priv;
+ clutter_actor_realize_internal (self);
+}
+
+static void
+clutter_actor_realize_internal (ClutterActor *self)
+{
+ ClutterActorPrivate *priv = self->priv;
#ifdef CLUTTER_ENABLE_DEBUG
clutter_actor_verify_map_state (self);
@@ -1968,14 +1976,8 @@ clutter_actor_real_unrealize (ClutterActor *self)
* may not be expecting.
*
* This function should not be called by application code.
- */
-void
-clutter_actor_unrealize (ClutterActor *self)
-{
- g_return_if_fail (CLUTTER_IS_ACTOR (self));
- g_return_if_fail (!CLUTTER_ACTOR_IS_MAPPED (self));
-
-/* This function should not really be in the public API, because
+ *
+ * This function should not really be in the public API, because
* there isn't a good reason to call it. ClutterActor will already
* unrealize things for you when it's important to do so.
*
@@ -1987,12 +1989,26 @@ clutter_actor_unrealize (ClutterActor *self)
* unrealizing children of your container, then don't, ClutterActor
* will already take care of that.
*
- * If you were using clutter_actor_unrealize() to re-realize to
+ * Deprecated: 1.16: Actors are automatically unrealized, and nothing
+ * requires explicit realization.
+ */
+void
+clutter_actor_unrealize (ClutterActor *self)
+{
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+ g_return_if_fail (!CLUTTER_ACTOR_IS_MAPPED (self));
+
+ clutter_actor_unrealize_internal (self);
+}
+
+/* If you were using clutter_actor_unrealize() to re-realize to
* create your resources in a different way, then use
* _clutter_actor_rerealize() (inside Clutter) or just call your
* code that recreates your resources directly (outside Clutter).
*/
-
+static void
+clutter_actor_unrealize_internal (ClutterActor *self)
+{
#ifdef CLUTTER_ENABLE_DEBUG
clutter_actor_verify_map_state (self);
#endif
@@ -2788,10 +2804,10 @@ clutter_actor_apply_transform_to_point (ClutterActor *self,
* using cogl_set_modelview_matrix() for example then you would want a matrix
* that transforms into eye coordinates.
*
- * This function explicitly initializes the given @matrix. If you just
+ * Note: This function explicitly initializes the given @matrix. If you just
* want clutter to multiply a relative transformation with an existing matrix
* you can use clutter_actor_apply_relative_transformation_matrix()
- * instead.
+ * instead.
*
*/
/* XXX: We should consider caching the stage relative modelview along with
@@ -2843,12 +2859,11 @@ _clutter_actor_transform_and_project_box (ClutterActor *self,
* Calculates the transformed coordinates of the four corners of the
* actor in the plane of @ancestor. The returned vertices relate to
* the #ClutterActorBox coordinates as follows:
- *
- * @verts[0] contains (x1, y1)
- * @verts[1] contains (x2, y1)
- * @verts[2] contains (x1, y2)
- * @verts[3] contains (x2, y2)
- *
+ *
+ * - @verts[0] contains (x1, y1)
+ * - @verts[1] contains (x2, y1)
+ * - @verts[2] contains (x1, y2)
+ * - @verts[3] contains (x2, y2)
*
* If @ancestor is %NULL the ancestor will be the #ClutterStage. In
* this case, the coordinates returned will be the coordinates on
@@ -2932,12 +2947,11 @@ clutter_actor_get_allocation_vertices (ClutterActor *self,
* Calculates the transformed screen coordinates of the four corners of
* the actor; the returned vertices relate to the #ClutterActorBox
* coordinates as follows:
- *
- * v[0] contains (x1, y1)
- * v[1] contains (x2, y1)
- * v[2] contains (x1, y2)
- * v[3] contains (x2, y2)
- *
+ *
+ * - v[0] contains (x1, y1)
+ * - v[1] contains (x2, y1)
+ * - v[2] contains (x1, y2)
+ * - v[3] contains (x2, y2)
*
* Since: 0.4
*/
@@ -3147,11 +3161,11 @@ _clutter_actor_apply_modelview_transform (ClutterActor *self,
* using cogl_set_modelview_matrix() for example then you would want a matrix
* that transforms into eye coordinates.
*
- * This function doesn't initialize the given @matrix, it simply
+ * This function doesn't initialize the given @matrix, it simply
* multiplies the requested transformation matrix with the existing contents of
* @matrix. You can use cogl_matrix_init_identity() to initialize the @matrix
* before calling this function, or you can use
- * clutter_actor_get_relative_transformation_matrix() instead.
+ * clutter_actor_get_relative_transformation_matrix() instead.
*/
void
_clutter_actor_apply_relative_transformation_matrix (ClutterActor *self,
@@ -3347,10 +3361,11 @@ in_clone_paint (void)
* means there's no point in trying to cull descendants of the current
* node. */
static gboolean
-cull_actor (ClutterActor *self, ClutterCullResult *result_out)
+cull_actor (ClutterActor *self,
+ ClutterCullResult *result_out)
{
ClutterActorPrivate *priv = self->priv;
- ClutterActor *stage;
+ ClutterStage *stage;
const ClutterPlane *stage_clip;
if (!priv->last_paint_volume_valid)
@@ -3364,8 +3379,8 @@ cull_actor (ClutterActor *self, ClutterCullResult *result_out)
if (G_UNLIKELY (clutter_paint_debug_flags & CLUTTER_DEBUG_DISABLE_CULLING))
return FALSE;
- stage = _clutter_actor_get_stage_internal (self);
- stage_clip = _clutter_stage_get_clip (CLUTTER_STAGE (stage));
+ stage = (ClutterStage *) _clutter_actor_get_stage_internal (self);
+ stage_clip = _clutter_stage_get_clip (stage);
if (G_UNLIKELY (!stage_clip))
{
CLUTTER_NOTE (CLIPPING, "Bail from cull_actor without culling (%s): "
@@ -3374,8 +3389,7 @@ cull_actor (ClutterActor *self, ClutterCullResult *result_out)
return FALSE;
}
- if (cogl_get_draw_framebuffer () !=
- _clutter_stage_get_active_framebuffer (CLUTTER_STAGE (stage)))
+ if (cogl_get_draw_framebuffer () != _clutter_stage_get_active_framebuffer (stage))
{
CLUTTER_NOTE (CLIPPING, "Bail from cull_actor without culling (%s): "
"Current framebuffer doesn't correspond to stage",
@@ -3385,6 +3399,7 @@ cull_actor (ClutterActor *self, ClutterCullResult *result_out)
*result_out =
_clutter_paint_volume_cull (&priv->last_paint_volume, stage_clip);
+
return TRUE;
}
@@ -3556,23 +3571,51 @@ clutter_actor_paint_node (ClutterActor *actor,
ClutterPaintNode *root)
{
ClutterActorPrivate *priv = actor->priv;
+ ClutterActorBox box;
+ ClutterColor bg_color;
if (root == NULL)
return FALSE;
- if (priv->bg_color_set &&
- !clutter_color_equal (&priv->bg_color, CLUTTER_COLOR_Transparent))
+ box.x1 = 0.f;
+ box.y1 = 0.f;
+ box.x2 = clutter_actor_box_get_width (&priv->allocation);
+ box.y2 = clutter_actor_box_get_height (&priv->allocation);
+
+ bg_color = priv->bg_color;
+
+ if (CLUTTER_ACTOR_IS_TOPLEVEL (actor))
{
ClutterPaintNode *node;
- ClutterColor bg_color;
- ClutterActorBox box;
+ CoglFramebuffer *fb;
+ CoglBufferBit clear_flags;
- box.x1 = 0.f;
- box.y1 = 0.f;
- box.x2 = clutter_actor_box_get_width (&priv->allocation);
- box.y2 = clutter_actor_box_get_height (&priv->allocation);
+ fb = _clutter_stage_get_active_framebuffer (CLUTTER_STAGE (actor));
+
+ if (clutter_stage_get_use_alpha (CLUTTER_STAGE (actor)))
+ {
+ bg_color.alpha = clutter_actor_get_paint_opacity_internal (actor)
+ * priv->bg_color.alpha
+ / 255;
+ }
+ else
+ bg_color.alpha = 255;
+
+ clear_flags = COGL_BUFFER_BIT_DEPTH;
+ if (!clutter_stage_get_no_clear_hint (CLUTTER_STAGE (actor)))
+ clear_flags |= COGL_BUFFER_BIT_COLOR;
+
+ node = _clutter_root_node_new (fb, &bg_color, clear_flags);
+ clutter_paint_node_set_name (node, "stageClear");
+ clutter_paint_node_add_rectangle (node, &box);
+ clutter_paint_node_add_child (root, node);
+ clutter_paint_node_unref (node);
+ }
+ else if (priv->bg_color_set &&
+ !clutter_color_equal (&priv->bg_color, CLUTTER_COLOR_Transparent))
+ {
+ ClutterPaintNode *node;
- bg_color = priv->bg_color;
bg_color.alpha = clutter_actor_get_paint_opacity_internal (actor)
* priv->bg_color.alpha
/ 255;
@@ -3631,6 +3674,7 @@ clutter_actor_paint (ClutterActor *self)
ClutterPickMode pick_mode;
gboolean clip_set = FALSE;
gboolean shader_applied = FALSE;
+ ClutterStage *stage;
CLUTTER_STATIC_COUNTER (actor_paint_counter,
"Actor real-paint counter",
@@ -3670,10 +3714,12 @@ clutter_actor_paint (ClutterActor *self)
if (!CLUTTER_ACTOR_IS_MAPPED (self))
return;
+ stage = (ClutterStage *) _clutter_actor_get_stage_internal (self);
+
/* mark that we are in the paint process */
CLUTTER_SET_PRIVATE_FLAGS (self, CLUTTER_IN_PAINT);
- cogl_push_matrix();
+ cogl_push_matrix ();
if (priv->enable_model_view_transform)
{
@@ -3728,20 +3774,23 @@ clutter_actor_paint (ClutterActor *self)
if (priv->has_clip)
{
- cogl_clip_push_rectangle (priv->clip.origin.x,
- priv->clip.origin.y,
- priv->clip.origin.x + priv->clip.size.width,
- priv->clip.origin.y + priv->clip.size.height);
+ CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
+ cogl_framebuffer_push_rectangle_clip (fb,
+ priv->clip.origin.x,
+ priv->clip.origin.y,
+ priv->clip.origin.x + priv->clip.size.width,
+ priv->clip.origin.y + priv->clip.size.height);
clip_set = TRUE;
}
else if (priv->clip_to_allocation)
{
+ CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
gfloat width, height;
width = priv->allocation.x2 - priv->allocation.x1;
height = priv->allocation.y2 - priv->allocation.y1;
- cogl_clip_push_rectangle (0, 0, width, height);
+ cogl_framebuffer_push_rectangle_clip (fb, 0, 0, width, height);
clip_set = TRUE;
}
@@ -3838,9 +3887,13 @@ done:
priv->is_dirty = FALSE;
if (clip_set)
- cogl_clip_pop();
+ {
+ CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
- cogl_pop_matrix();
+ cogl_framebuffer_pop_clip (fb);
+ }
+
+ cogl_pop_matrix ();
/* paint sequence complete */
CLUTTER_UNSET_PRIVATE_FLAGS (self, CLUTTER_IN_PAINT);
@@ -3899,9 +3952,6 @@ clutter_actor_continue_paint (ClutterActor *self)
/* XXX:2.0 - Call the paint() virtual directly */
g_signal_emit (self, actor_signals[PAINT], 0);
-
- /* the actor was painted at least once */
- priv->was_painted = TRUE;
}
else
{
@@ -5347,7 +5397,7 @@ clutter_actor_get_property (GObject *object,
break;
case PROP_OFFSCREEN_REDIRECT:
- g_value_set_enum (value, priv->offscreen_redirect);
+ g_value_set_flags (value, priv->offscreen_redirect);
break;
case PROP_NAME:
@@ -5774,10 +5824,10 @@ clutter_actor_dispose (GObject *object)
ClutterActor *self = CLUTTER_ACTOR (object);
ClutterActorPrivate *priv = self->priv;
- CLUTTER_NOTE (MISC, "Disposing of object (id=%d) of type '%s' (ref_count:%d)",
- priv->id,
- g_type_name (G_OBJECT_TYPE (self)),
- object->ref_count);
+ CLUTTER_NOTE (MISC, "Dispose actor (name='%s', ref_count:%d) of type '%s'",
+ _clutter_actor_get_debug_name (self),
+ object->ref_count,
+ g_type_name (G_OBJECT_TYPE (self)));
g_signal_emit (self, actor_signals[DESTROY], 0);
@@ -5841,14 +5891,9 @@ clutter_actor_finalize (GObject *object)
{
ClutterActorPrivate *priv = CLUTTER_ACTOR (object)->priv;
- CLUTTER_NOTE (MISC, "Finalize actor (name='%s', id=%d) of type '%s'",
- priv->name != NULL ? priv->name : "",
- priv->id,
- g_type_name (G_OBJECT_TYPE (object)));
-
- clutter_actor_restore_easing_state (CLUTTER_ACTOR (object));
-
- _clutter_context_release_id (priv->id);
+ CLUTTER_NOTE (MISC, "Finalize actor (name='%s') of type '%s'",
+ _clutter_actor_get_debug_name ((ClutterActor *) object),
+ g_type_name (G_OBJECT_TYPE (object)));
g_free (priv->name);
@@ -5918,6 +5963,12 @@ clutter_actor_update_default_paint_volume (ClutterActor *self,
ClutterActorPrivate *priv = self->priv;
gboolean res = TRUE;
+ /* this should be checked before we call this function, but it's a
+ * good idea to be explicit when it costs us nothing
+ */
+ if (priv->needs_allocation)
+ return FALSE;
+
/* we start from the allocation */
clutter_paint_volume_set_width (volume,
priv->allocation.x2 - priv->allocation.x1);
@@ -5970,7 +6021,13 @@ clutter_actor_update_default_paint_volume (ClutterActor *self,
{
const ClutterPaintVolume *child_volume;
- if (!CLUTTER_ACTOR_IS_MAPPED (child))
+ /* we ignore unmapped children, since they won't be painted.
+ *
+ * XXX: we also have to ignore mapped children without a valid
+ * allocation, because apparently some code above Clutter allows
+ * them.
+ */
+ if (!CLUTTER_ACTOR_IS_MAPPED (child) || !clutter_actor_has_allocation (child))
continue;
child_volume = clutter_actor_get_transformed_paint_volume (child, self);
@@ -6159,8 +6216,6 @@ clutter_actor_class_init (ClutterActorClass *klass)
klass->paint = clutter_actor_real_paint;
klass->destroy = clutter_actor_real_destroy;
- g_type_class_add_private (klass, sizeof (ClutterActorPrivate));
-
/**
* ClutterActor:x:
*
@@ -6502,7 +6557,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
*
* For instance:
*
- * |[
+ * |[
* ClutterRequestMode mode;
* gfloat natural_width, min_width;
* gfloat natural_height, min_height;
@@ -6511,20 +6566,30 @@ clutter_actor_class_init (ClutterActorClass *klass)
* if (mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
* {
* clutter_actor_get_preferred_width (child, -1,
- * &min_width,
- * &natural_width);
+ * &min_width,
+ * &natural_width);
* clutter_actor_get_preferred_height (child, natural_width,
- * &min_height,
- * &natural_height);
+ * &min_height,
+ * &natural_height);
* }
- * else
+ * else if (mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
* {
* clutter_actor_get_preferred_height (child, -1,
- * &min_height,
- * &natural_height);
+ * &min_height,
+ * &natural_height);
* clutter_actor_get_preferred_width (child, natural_height,
- * &min_width,
- * &natural_width);
+ * &min_width,
+ * &natural_width);
+ * }
+ * else if (mode == CLUTTER_REQUEST_CONTENT_SIZE)
+ * {
+ * ClutterContent *content = clutter_actor_get_content (child);
+ *
+ * min_width, min_height = 0;
+ * natural_width = natural_height = 0;
+ *
+ * if (content != NULL)
+ * clutter_content_get_preferred_size (content, &natural_width, &natural_height);
* }
* ]|
*
@@ -6813,7 +6878,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
g_param_spec_double ("scale-x",
P_("Scale X"),
P_("Scale factor on the X axis"),
- 0.0, G_MAXDOUBLE,
+ -G_MAXDOUBLE, G_MAXDOUBLE,
1.0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
@@ -6832,7 +6897,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
g_param_spec_double ("scale-y",
P_("Scale Y"),
P_("Scale factor on the Y axis"),
- 0.0, G_MAXDOUBLE,
+ -G_MAXDOUBLE, G_MAXDOUBLE,
1.0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
@@ -6851,7 +6916,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
g_param_spec_double ("scale-z",
P_("Scale Z"),
P_("Scale factor on the Z axis"),
- 0.0, G_MAXDOUBLE,
+ -G_MAXDOUBLE, G_MAXDOUBLE,
1.0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
@@ -7050,14 +7115,14 @@ clutter_actor_class_init (ClutterActorClass *klass)
* The X coordinate of an actor's anchor point, relative to
* the actor coordinate space, in pixels.
*
- * It is highly recommended not to use #ClutterActor:anchor-x,
+ * It is highly recommended not to use #ClutterActor:anchor-x,
* #ClutterActor:anchor-y, and #ClutterActor:anchor-gravity in newly
* written code; the anchor point adds an additional translation that
* will affect the actor's relative position with regards to its
* parent, as well as the position of its children. This change needs
* to always be taken into account when positioning the actor. It is
* recommended to use the #ClutterActor:pivot-point property instead,
- * as it will affect only the transformations.
+ * as it will affect only the transformations.
*
* Since: 0.8
*
@@ -7079,14 +7144,14 @@ clutter_actor_class_init (ClutterActorClass *klass)
* The Y coordinate of an actor's anchor point, relative to
* the actor coordinate space, in pixels
*
- * It is highly recommended not to use #ClutterActor:anchor-x,
+ * It is highly recommended not to use #ClutterActor:anchor-x,
* #ClutterActor:anchor-y, and #ClutterActor:anchor-gravity in newly
* written code; the anchor point adds an additional translation that
* will affect the actor's relative position with regards to its
* parent, as well as the position of its children. This change needs
* to always be taken into account when positioning the actor. It is
* recommended to use the #ClutterActor:pivot-point property instead,
- * as it will affect only the transformations.
+ * as it will affect only the transformations.
*
* Since: 0.8
*
@@ -7107,14 +7172,14 @@ clutter_actor_class_init (ClutterActorClass *klass)
*
* The anchor point expressed as a #ClutterGravity
*
- * It is highly recommended not to use #ClutterActor:anchor-x,
+ * It is highly recommended not to use #ClutterActor:anchor-x,
* #ClutterActor:anchor-y, and #ClutterActor:anchor-gravity in newly
* written code; the anchor point adds an additional translation that
* will affect the actor's relative position with regards to its
* parent, as well as the position of its children. This change needs
* to always be taken into account when positioning the actor. It is
* recommended to use the #ClutterActor:pivot-point property instead,
- * as it will affect only the transformations.
+ * as it will affect only the transformations.
*
* Since: 1.0
*
@@ -7811,33 +7876,32 @@ clutter_actor_class_init (ClutterActorClass *klass)
* GSignal API, redraw the UI and then call clutter_stage_ensure_redraw()
* themselves, like:
*
- * |[
+ * |[
* static void
* on_redraw_complete (gpointer data)
* {
* ClutterStage *stage = data;
*
- * /* execute the Clutter drawing pipeline */
+ * // execute the Clutter drawing pipeline
* clutter_stage_ensure_redraw (stage);
* }
*
* static void
* on_stage_queue_redraw (ClutterStage *stage)
* {
- * /* this prevents the default handler to run */
+ * // this prevents the default handler to run
* g_signal_stop_emission_by_name (stage, "queue-redraw");
*
- * /* queue a redraw with the host toolkit and call
- * * a function when the redraw has been completed
- * */
+ * // queue a redraw with the host toolkit and call
+ * // a function when the redraw has been completed
* queue_a_redraw (G_CALLBACK (on_redraw_complete), stage);
* }
* ]|
*
- * This signal is emitted before the Clutter paint
+ * Note: This signal is emitted before the Clutter paint
* pipeline is executed. If you want to know when the pipeline has
- * been completed you should connect to the ::paint signal on the
- * Stage with g_signal_connect_after().
+ * been completed you should use clutter_threads_add_repaint_func()
+ * or clutter_threads_add_repaint_func_full().
*
* Since: 1.0
*/
@@ -8152,12 +8216,12 @@ clutter_actor_class_init (ClutterActorClass *klass)
* Subclasses of #ClutterActor should override the #ClutterActorClass.paint
* virtual function paint themselves in that function.
*
- * It is strongly discouraged to connect a signal handler to
+ * It is strongly discouraged to connect a signal handler to
* the #ClutterActor::paint signal; if you want to change the paint
* sequence of an existing #ClutterActor instance, either create a new
* #ClutterActor class and override the #ClutterActorClass.paint virtual
* function, or use a #ClutterEffect. The #ClutterActor::paint signal
- * will be removed in a future version of Clutter.
+ * will be removed in a future version of Clutter.
*
* Since: 0.8
*
@@ -8183,11 +8247,14 @@ clutter_actor_class_init (ClutterActorClass *klass)
* realized.
*
* Since: 0.8
+ *
+ * Deprecated: 1.16: The signal should not be used in newly
+ * written code
*/
actor_signals[REALIZE] =
g_signal_new (I_("realize"),
G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED,
G_STRUCT_OFFSET (ClutterActorClass, realize),
NULL, NULL,
_clutter_marshal_VOID__VOID,
@@ -8200,11 +8267,14 @@ clutter_actor_class_init (ClutterActorClass *klass)
* unrealized.
*
* Since: 0.8
+ *
+ * Deprecated: 1.16: The signal should not be used in newly
+ * written code
*/
actor_signals[UNREALIZE] =
g_signal_new (I_("unrealize"),
G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED,
G_STRUCT_OFFSET (ClutterActorClass, unrealize),
NULL, NULL,
_clutter_marshal_VOID__VOID,
@@ -8313,10 +8383,14 @@ clutter_actor_class_init (ClutterActorClass *klass)
/**
* ClutterActor::touch-event:
* @actor: a #ClutterActor
+ * @event: a #ClutterEvent
*
* The ::touch-event signal is emitted each time a touch
* begin/end/update/cancel event.
*
+ * Return value: %CLUTTER_EVENT_STOP if the event has been handled by
+ * the actor, or %CLUTTER_EVENT_PROPAGATE to continue the emission.
+ *
* Since: 1.12
*/
actor_signals[TOUCH_EVENT] =
@@ -8335,9 +8409,8 @@ clutter_actor_init (ClutterActor *self)
{
ClutterActorPrivate *priv;
- self->priv = priv = CLUTTER_ACTOR_GET_PRIVATE (self);
+ self->priv = priv = clutter_actor_get_instance_private (self);
- priv->id = _clutter_context_acquire_id (self);
priv->pick_id = -1;
priv->opacity = 0xff;
@@ -8376,6 +8449,9 @@ clutter_actor_init (ClutterActor *self)
*/
priv->needs_compute_expand = FALSE;
+ /* we start with an easing state with duration forcibly set
+ * to 0, for backward compatibility.
+ */
clutter_actor_save_easing_state (self);
clutter_actor_set_easing_duration (self, 0);
}
@@ -8822,7 +8898,7 @@ _clutter_actor_queue_redraw_with_clip (ClutterActor *self,
NULL /* effect */);
}
-static void
+void
_clutter_actor_queue_only_relayout (ClutterActor *self)
{
ClutterActorPrivate *priv = self->priv;
@@ -8968,7 +9044,7 @@ clutter_actor_get_preferred_size (ClutterActor *self,
&min_height,
&natural_height);
}
- else
+ else if (priv->request_mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
{
CLUTTER_NOTE (LAYOUT, "Preferred size (width-for-height)");
clutter_actor_get_preferred_height (self, -1,
@@ -8978,6 +9054,17 @@ clutter_actor_get_preferred_size (ClutterActor *self,
&min_width,
&natural_width);
}
+ else if (priv->request_mode == CLUTTER_REQUEST_CONTENT_SIZE)
+ {
+ CLUTTER_NOTE (LAYOUT, "Preferred size (content-size)");
+
+ if (priv->content != NULL)
+ clutter_content_get_preferred_size (priv->content, &natural_width, &natural_height);
+ }
+ else
+ {
+ CLUTTER_NOTE (LAYOUT, "Unknown request mode");
+ }
if (min_width_p)
*min_width_p = min_width;
@@ -9215,6 +9302,46 @@ _clutter_actor_get_cached_size_request (gfloat for_size,
return FALSE;
}
+static void
+clutter_actor_update_preferred_size_for_constraints (ClutterActor *self,
+ ClutterOrientation direction,
+ float for_size,
+ float *minimum_size,
+ float *natural_size)
+{
+ ClutterActorPrivate *priv = self->priv;
+ const GList *constraints, *l;
+
+ if (priv->constraints == NULL)
+ return;
+
+ constraints = _clutter_meta_group_peek_metas (priv->constraints);
+ for (l = constraints; l != NULL; l = l->next)
+ {
+ ClutterConstraint *constraint = l->data;
+ ClutterActorMeta *meta = l->data;
+
+ if (!clutter_actor_meta_get_enabled (meta))
+ continue;
+
+ clutter_constraint_update_preferred_size (constraint, self,
+ direction,
+ for_size,
+ minimum_size,
+ natural_size);
+
+ CLUTTER_NOTE (LAYOUT,
+ "Preferred %s of '%s' after constraint '%s': "
+ "{ min:%.2f, nat:%.2f }",
+ direction == CLUTTER_ORIENTATION_HORIZONTAL
+ ? "width"
+ : "height",
+ _clutter_actor_get_debug_name (self),
+ _clutter_actor_meta_get_debug_name (meta),
+ *minimum_size, *natural_size);
+ }
+}
+
/**
* clutter_actor_get_preferred_width:
* @self: A #ClutterActor
@@ -9313,6 +9440,13 @@ clutter_actor_get_preferred_width (ClutterActor *self,
&minimum_width,
&natural_width);
+ /* adjust for constraints */
+ clutter_actor_update_preferred_size_for_constraints (self,
+ CLUTTER_ORIENTATION_HORIZONTAL,
+ for_height,
+ &minimum_width,
+ &natural_width);
+
/* adjust for the margin */
minimum_width += (info->margin.left + info->margin.right);
natural_width += (info->margin.left + info->margin.right);
@@ -9449,6 +9583,13 @@ clutter_actor_get_preferred_height (ClutterActor *self,
&minimum_height,
&natural_height);
+ /* adjust for constraints */
+ clutter_actor_update_preferred_size_for_constraints (self,
+ CLUTTER_ORIENTATION_VERTICAL,
+ for_width,
+ &minimum_height,
+ &natural_height);
+
/* adjust for margin */
minimum_height += (info->margin.top + info->margin.bottom);
natural_height += (info->margin.top + info->margin.bottom);
@@ -9501,9 +9642,9 @@ clutter_actor_get_preferred_height (ClutterActor *self,
* An allocation does not incorporate the actor's scale or anchor point;
* those transformations do not affect layout, only rendering.
*
- * Do not call any of the clutter_actor_get_allocation_*() family
+ * Do not call any of the clutter_actor_get_allocation_*() family
* of functions inside the implementation of the get_preferred_width()
- * or get_preferred_height() virtual functions.
+ * or get_preferred_height() virtual functions.
*
* Since: 0.8
*/
@@ -9559,19 +9700,21 @@ clutter_actor_update_constraints (ClutterActor *self,
if (clutter_actor_meta_get_enabled (meta))
{
- _clutter_constraint_update_allocation (constraint,
- self,
- allocation);
+ gboolean changed =
+ clutter_constraint_update_allocation (constraint,
+ self,
+ allocation);
CLUTTER_NOTE (LAYOUT,
"Allocation of '%s' after constraint '%s': "
- "{ %.2f, %.2f, %.2f, %.2f }",
+ "{ %.2f, %.2f, %.2f, %.2f } (changed:%s)",
_clutter_actor_get_debug_name (self),
_clutter_actor_meta_get_debug_name (meta),
allocation->x1,
allocation->y1,
allocation->x2,
- allocation->y2);
+ allocation->y2,
+ changed ? "yes" : "no");
}
}
}
@@ -9619,6 +9762,14 @@ clutter_actor_adjust_allocation (ClutterActor *self,
&min_width,
&nat_width);
}
+ else if (req_mode == CLUTTER_REQUEST_CONTENT_SIZE)
+ {
+ min_width = min_height = 0;
+ nat_width = nat_height = 0;
+
+ if (self->priv->content != NULL)
+ clutter_content_get_preferred_size (self->priv->content, &nat_width, &nat_height);
+ }
#ifdef CLUTTER_ENABLE_DEBUG
/* warn about underallocations */
@@ -9700,7 +9851,9 @@ clutter_actor_allocate_internal (ClutterActor *self,
CLUTTER_UNSET_PRIVATE_FLAGS (self, CLUTTER_IN_RELAYOUT);
- clutter_actor_queue_redraw (self);
+ /* Caller should call clutter_actor_queue_redraw() if needed
+ * for that particular case.
+ */
}
/**
@@ -9809,6 +9962,14 @@ clutter_actor_allocate (ClutterActor *self,
return;
}
+ if (!stage_allocation_changed)
+ {
+ /* If the actor didn't move but needs_allocation is set, we just
+ * need to allocate the children */
+ clutter_actor_allocate_internal (self, &real_allocation, flags);
+ return;
+ }
+
/* When ABSOLUTE_ORIGIN_CHANGED is passed in to
* clutter_actor_allocate(), it indicates whether the parent has its
* absolute origin moved; when passed in to ClutterActor::allocate()
@@ -9865,7 +10026,7 @@ clutter_actor_allocate (ClutterActor *self,
* expected that the subclass will call clutter_layout_manager_allocate()
* by itself. For instance, the following code:
*
- * |[
+ * |[
* static void
* my_actor_allocate (ClutterActor *actor,
* const ClutterActorBox *allocation,
@@ -9874,18 +10035,18 @@ clutter_actor_allocate (ClutterActor *self,
* ClutterActorBox new_alloc;
* ClutterAllocationFlags new_flags;
*
- * adjust_allocation (allocation, &new_alloc);
+ * adjust_allocation (allocation, &new_alloc);
*
* new_flags = flags | CLUTTER_DELEGATE_LAYOUT;
*
- * /* this will use the layout manager set on the actor */
- * clutter_actor_set_allocation (actor, &new_alloc, new_flags);
+ * // this will use the layout manager set on the actor
+ * clutter_actor_set_allocation (actor, &new_alloc, new_flags);
* }
* ]|
*
* is equivalent to this:
*
- * |[
+ * |[
* static void
* my_actor_allocate (ClutterActor *actor,
* const ClutterActorBox *allocation,
@@ -9894,14 +10055,14 @@ clutter_actor_allocate (ClutterActor *self,
* ClutterLayoutManager *layout;
* ClutterActorBox new_alloc;
*
- * adjust_allocation (allocation, &new_alloc);
+ * adjust_allocation (allocation, &new_alloc);
*
- * clutter_actor_set_allocation (actor, &new_alloc, flags);
+ * clutter_actor_set_allocation (actor, &new_alloc, flags);
*
* layout = clutter_actor_get_layout_manager (actor);
* clutter_layout_manager_allocate (layout,
* CLUTTER_CONTAINER (actor),
- * &new_alloc,
+ * &new_alloc,
* flags);
* }
* ]|
@@ -10593,7 +10754,7 @@ clutter_actor_get_transformed_position (ClutterActor *self,
* If you want the transformed allocation, see
* clutter_actor_get_abs_allocation_vertices() instead.
*
- * When the actor (or one of its ancestors) is rotated around the
+ * When the actor (or one of its ancestors) is rotated around the
* X or Y axis, it no longer appears as on the stage as a rectangle, but
* as a generic quadrangle; in that case this function returns the size
* of the smallest rectangle that encapsulates the entire quad. Please
@@ -10601,7 +10762,7 @@ clutter_actor_get_transformed_position (ClutterActor *self,
* position of this envelope to the absolute position of the actor, as
* returned by clutter_actor_get_transformed_position(); if you need this
* information, you need to use clutter_actor_get_abs_allocation_vertices()
- * to get the coords of the actual quadrangle.
+ * to get the coords of the actual quadrangle.
*
* Since: 0.8
*/
@@ -10711,9 +10872,11 @@ clutter_actor_get_width (ClutterActor *self)
{
gfloat natural_width = 0;
- if (self->priv->request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
- clutter_actor_get_preferred_width (self, -1, NULL, &natural_width);
- else
+ if (priv->request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
+ {
+ clutter_actor_get_preferred_width (self, -1, NULL, &natural_width);
+ }
+ else if (priv->request_mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
{
gfloat natural_height = 0;
@@ -10722,6 +10885,10 @@ clutter_actor_get_width (ClutterActor *self)
NULL,
&natural_width);
}
+ else if (priv->request_mode == CLUTTER_REQUEST_CONTENT_SIZE && priv->content != NULL)
+ {
+ clutter_content_get_preferred_size (priv->content, &natural_width, NULL);
+ }
return natural_width;
}
@@ -10775,8 +10942,14 @@ clutter_actor_get_height (ClutterActor *self)
clutter_actor_get_preferred_height (self, natural_width,
NULL, &natural_height);
}
- else
- clutter_actor_get_preferred_height (self, -1, NULL, &natural_height);
+ else if (priv->request_mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
+ {
+ clutter_actor_get_preferred_height (self, -1, NULL, &natural_height);
+ }
+ else if (priv->request_mode == CLUTTER_REQUEST_CONTENT_SIZE && priv->content != NULL)
+ {
+ clutter_content_get_preferred_size (priv->content, NULL, &natural_height);
+ }
return natural_height;
}
@@ -11629,14 +11802,15 @@ clutter_actor_get_name (ClutterActor *self)
*
* Since: 0.6
*
- * Deprecated: 1.8: The id is not used any longer.
+ * Deprecated: 1.8: The id is not used any longer, and this function
+ * always returns 0.
*/
guint32
clutter_actor_get_gid (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0);
- return self->priv->id;
+ return 0;
}
static inline void
@@ -11888,11 +12062,10 @@ clutter_actor_get_depth (ClutterActor *self)
* Sets the rotation angle of @self around the given axis.
*
* The rotation center coordinates used depend on the value of @axis:
- *
- * %CLUTTER_X_AXIS requires @y and @z
- * %CLUTTER_Y_AXIS requires @x and @z
- * %CLUTTER_Z_AXIS requires @x and @y
- *
+ *
+ * - %CLUTTER_X_AXIS requires @y and @z
+ * - %CLUTTER_Y_AXIS requires @x and @z
+ * - %CLUTTER_Z_AXIS requires @x and @y
*
* The rotation coordinates are relative to the anchor point of the
* actor, set using clutter_actor_set_anchor_point(). If no anchor
@@ -13314,6 +13487,7 @@ clutter_actor_set_child_above_sibling (ClutterActor *self,
ADD_CHILD_NOTIFY_FIRST_LAST,
insert_child_above,
sibling);
+ g_object_unref(child);
clutter_actor_queue_relayout (self);
}
@@ -13360,6 +13534,7 @@ clutter_actor_set_child_below_sibling (ClutterActor *self,
ADD_CHILD_NOTIFY_FIRST_LAST,
insert_child_below,
sibling);
+ g_object_unref(child);
clutter_actor_queue_relayout (self);
}
@@ -13398,6 +13573,7 @@ clutter_actor_set_child_at_index (ClutterActor *self,
ADD_CHILD_NOTIFY_FIRST_LAST,
insert_child_at_index,
GINT_TO_POINTER (index_));
+ g_object_unref (child);
clutter_actor_queue_relayout (self);
}
@@ -14677,6 +14853,7 @@ clutter_actor_set_animatable_property (ClutterActor *actor,
clutter_actor_allocate_internal (actor,
g_value_get_boxed (value),
actor->priv->allocation_flags);
+ clutter_actor_queue_redraw (actor);
break;
case PROP_DEPTH:
@@ -14815,10 +14992,10 @@ clutter_animatable_iface_init (ClutterAnimatableIface *iface)
* nature of the operation. In general the error grows when the skewing
* of the actor rectangle on screen increases.
*
- * This function can be computationally intensive.
+ * This function can be computationally intensive.
*
- * This function only works when the allocation is up-to-date,
- * i.e. inside of paint().
+ * This function only works when the allocation is up-to-date, i.e. inside of
+ * the #ClutterActorClass.paint() implementation
*
* Return value: %TRUE if conversion was successful.
*
@@ -15069,7 +15246,7 @@ clutter_actor_get_stage (ClutterActor *actor)
* actor's natural height
* @flags: flags controlling the allocation
*
- * Allocates @self taking into account the #ClutterActor's
+ * Allocates @self taking into account the #ClutterActor's
* preferred size, but limiting it to the maximum available width
* and height provided.
*
@@ -15078,36 +15255,43 @@ clutter_actor_get_stage (ClutterActor *actor)
*
* The implementation of this function is equivalent to:
*
- * |[
+ * |[
* if (request_mode == CLUTTER_REQUEST_HEIGHT_FOR_WIDTH)
* {
* clutter_actor_get_preferred_width (self, available_height,
- * &min_width,
- * &natural_width);
+ * &min_width,
+ * &natural_width);
* width = CLAMP (natural_width, min_width, available_width);
*
* clutter_actor_get_preferred_height (self, width,
- * &min_height,
- * &natural_height);
+ * &min_height,
+ * &natural_height);
* height = CLAMP (natural_height, min_height, available_height);
* }
- * else
+ * else if (request_mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
* {
* clutter_actor_get_preferred_height (self, available_width,
- * &min_height,
- * &natural_height);
+ * &min_height,
+ * &natural_height);
* height = CLAMP (natural_height, min_height, available_height);
*
* clutter_actor_get_preferred_width (self, height,
- * &min_width,
- * &natural_width);
+ * &min_width,
+ * &natural_width);
* width = CLAMP (natural_width, min_width, available_width);
* }
+ * else if (request_mode == CLUTTER_REQUEST_CONTENT_SIZE)
+ * {
+ * clutter_content_get_preferred_size (content, &natural_width, &natural_height);
+ *
+ * width = CLAMP (natural_width, 0, available_width);
+ * height = CLAMP (natural_height, 0, available_height);
+ * }
*
* box.x1 = x; box.y1 = y;
* box.x2 = box.x1 + available_width;
* box.y2 = box.y1 + available_height;
- * clutter_actor_allocate (self, &box, flags);
+ * clutter_actor_allocate (self, &box, flags);
* ]|
*
* This function can be used by fluid layout managers to allocate
@@ -15161,6 +15345,16 @@ clutter_actor_allocate_available_size (ClutterActor *self,
&natural_width);
width = CLAMP (natural_width, min_width, available_width);
break;
+
+ case CLUTTER_REQUEST_CONTENT_SIZE:
+ if (priv->content != NULL)
+ {
+ clutter_content_get_preferred_size (priv->content, &natural_width, &natural_height);
+
+ width = CLAMP (natural_width, 0, available_width);
+ height = CLAMP (natural_height, 0, available_height);
+ }
+ break;
}
@@ -15326,7 +15520,7 @@ clutter_actor_allocate_align_fill (ClutterActor *self,
child_height = CLAMP (natural_height, min_height, available_height);
}
}
- else
+ else if (priv->request_mode == CLUTTER_REQUEST_WIDTH_FOR_HEIGHT)
{
gfloat min_width, natural_width;
gfloat min_height, natural_height;
@@ -15349,22 +15543,28 @@ clutter_actor_allocate_align_fill (ClutterActor *self,
child_width = CLAMP (natural_width, min_width, available_width);
}
}
+ else if (priv->request_mode == CLUTTER_REQUEST_CONTENT_SIZE && priv->content != NULL)
+ {
+ gfloat natural_width, natural_height;
+
+ clutter_content_get_preferred_size (priv->content, &natural_width, &natural_height);
+
+ if (!x_fill)
+ child_width = CLAMP (natural_width, 0, available_width);
+
+ if (!y_fill)
+ child_height = CLAMP (natural_height, 0, available_height);
+ }
/* invert the horizontal alignment for RTL languages */
if (priv->text_direction == CLUTTER_TEXT_DIRECTION_RTL)
x_align = 1.0 - x_align;
if (!x_fill)
- {
- allocation.x1 += ((available_width - child_width) * x_align);
- allocation.x2 = allocation.x1 + child_width;
- }
+ allocation.x1 += ((available_width - child_width) * x_align);
if (!y_fill)
- {
- allocation.y1 += ((available_height - child_height) * y_align);
- allocation.y2 = allocation.y1 + child_height;
- }
+ allocation.y1 += ((available_height - child_height) * y_align);
out:
@@ -15397,6 +15597,46 @@ clutter_actor_grab_key_focus (ClutterActor *self)
clutter_stage_set_key_focus (CLUTTER_STAGE (stage), self);
}
+static void
+update_pango_context (ClutterBackend *backend,
+ PangoContext *context)
+{
+ ClutterSettings *settings;
+ PangoFontDescription *font_desc;
+ const cairo_font_options_t *font_options;
+ gchar *font_name;
+ PangoDirection pango_dir;
+ gdouble resolution;
+
+ settings = clutter_settings_get_default ();
+
+ /* update the text direction */
+ if (clutter_get_default_text_direction () == CLUTTER_TEXT_DIRECTION_RTL)
+ pango_dir = PANGO_DIRECTION_RTL;
+ else
+ pango_dir = PANGO_DIRECTION_LTR;
+
+ pango_context_set_base_dir (context, pango_dir);
+
+ g_object_get (settings, "font-name", &font_name, NULL);
+
+ /* get the configuration for the PangoContext from the backend */
+ font_options = clutter_backend_get_font_options (backend);
+ resolution = clutter_backend_get_resolution (backend);
+
+ font_desc = pango_font_description_from_string (font_name);
+
+ if (resolution < 0)
+ resolution = 96.0; /* fall back */
+
+ pango_context_set_font_description (context, font_desc);
+ pango_cairo_context_set_font_options (context, font_options);
+ pango_cairo_context_set_resolution (context, resolution);
+
+ pango_font_description_free (font_desc);
+ g_free (font_name);
+}
+
/**
* clutter_actor_get_pango_context:
* @self: a #ClutterActor
@@ -15423,16 +15663,23 @@ PangoContext *
clutter_actor_get_pango_context (ClutterActor *self)
{
ClutterActorPrivate *priv;
+ ClutterBackend *backend = clutter_get_default_backend ();
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), NULL);
priv = self->priv;
- if (priv->pango_context != NULL)
- return priv->pango_context;
+ if (G_UNLIKELY (priv->pango_context == NULL))
+ {
+ priv->pango_context = clutter_actor_create_pango_context (self);
- priv->pango_context = _clutter_context_get_pango_context ();
- g_object_ref (priv->pango_context);
+ g_signal_connect_object (backend, "resolution-changed",
+ G_CALLBACK (update_pango_context), priv->pango_context, 0);
+ g_signal_connect_object (backend, "font-changed",
+ G_CALLBACK (update_pango_context), priv->pango_context, 0);
+ }
+ else
+ update_pango_context (backend, priv->pango_context);
return priv->pango_context;
}
@@ -15456,15 +15703,22 @@ clutter_actor_get_pango_context (ClutterActor *self)
PangoContext *
clutter_actor_create_pango_context (ClutterActor *self)
{
- g_return_val_if_fail (CLUTTER_IS_ACTOR (self), NULL);
+ CoglPangoFontMap *font_map;
+ PangoContext *context;
- return _clutter_context_create_pango_context ();
+ font_map = COGL_PANGO_FONT_MAP (clutter_get_font_map ());
+
+ context = cogl_pango_font_map_create_context (font_map);
+ update_pango_context (clutter_get_default_backend (), context);
+ pango_context_set_language (context, pango_language_get_default ());
+
+ return context;
}
/**
* clutter_actor_create_pango_layout:
* @self: a #ClutterActor
- * @text: (allow-none) the text to set on the #PangoLayout, or %NULL
+ * @text: (allow-none): the text to set on the #PangoLayout, or %NULL
*
* Creates a new #PangoLayout from the same #PangoContext used
* by the #ClutterActor. The #PangoLayout is already configured
@@ -16103,33 +16357,31 @@ clutter_actor_get_text_direction (ClutterActor *self)
* Should be used by actors implementing the #ClutterContainer and with
* internal children added through clutter_actor_set_parent(), for instance:
*
- * |[
+ * |[
* static void
* my_actor_init (MyActor *self)
* {
- * self->priv = SELF_ACTOR_GET_PRIVATE (self);
+ * self->priv = my_actor_get_instance_private (self);
*
* clutter_actor_push_internal (CLUTTER_ACTOR (self));
*
- * /* calling clutter_actor_set_parent() now will result in
- * * the internal flag being set on a child of MyActor
- * */
+ * // calling clutter_actor_set_parent() now will result in
+ * // the internal flag being set on a child of MyActor
*
- * /* internal child - a background texture */
+ * // internal child - a background texture
* self->priv->background_tex = clutter_texture_new ();
* clutter_actor_set_parent (self->priv->background_tex,
* CLUTTER_ACTOR (self));
*
- * /* internal child - a label */
+ * // internal child - a label
* self->priv->label = clutter_text_new ();
* clutter_actor_set_parent (self->priv->label,
* CLUTTER_ACTOR (self));
*
* clutter_actor_pop_internal (CLUTTER_ACTOR (self));
*
- * /* calling clutter_actor_set_parent() now will not result in
- * * the internal flag being set on a child of MyActor
- * */
+ * // calling clutter_actor_set_parent() now will not result in
+ * // the internal flag being set on a child of MyActor
* }
* ]|
*
@@ -16313,7 +16565,7 @@ clutter_actor_add_action (ClutterActor *self,
*
* This function is the logical equivalent of:
*
- * |[
+ * |[
* clutter_actor_meta_set_name (CLUTTER_ACTOR_META (action), name);
* clutter_actor_add_action (self, action);
* ]|
@@ -16519,7 +16771,7 @@ clutter_actor_add_constraint (ClutterActor *self,
*
* This function is the logical equivalent of:
*
- * |[
+ * |[
* clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), name);
* clutter_actor_add_constraint (self, constraint);
* ]|
@@ -16769,7 +17021,7 @@ clutter_actor_add_effect (ClutterActor *self,
*
* This function is the logical equivalent of:
*
- * |[
+ * |[
* clutter_actor_meta_set_name (CLUTTER_ACTOR_META (effect), name);
* clutter_actor_add_effect (self, effect);
* ]|
@@ -17102,16 +17354,16 @@ _clutter_actor_get_paint_volume_mutable (ClutterActor *self)
* The paint volume is defined as the 3D space occupied by an actor
* when being painted.
*
- * This function will call the get_paint_volume()
+ * This function will call the #ClutterActorClass.get_paint_volume()
* virtual function of the #ClutterActor class. Sub-classes of #ClutterActor
* should not usually care about overriding the default implementation,
* unless they are, for instance: painting outside their allocation, or
* actors with a depth factor (not in terms of #ClutterActor:depth but real
* 3D depth).
*
- * 2D actors overriding get_paint_volume()
- * ensure their volume has a depth of 0. (This will be true so long as
- * you don't call clutter_paint_volume_set_depth().)
+ * Note: 2D actors overriding #ClutterActorClass.get_paint_volume()
+ * should ensure that their volume has a depth of 0. (This will be true
+ * as long as you don't call clutter_paint_volume_set_depth().)
*
* Return value: (transfer none): a pointer to a #ClutterPaintVolume,
* or %NULL if no volume could be determined. The returned pointer
@@ -17241,7 +17493,7 @@ clutter_actor_get_paint_box (ClutterActor *self,
* the opacity property.
*
* Custom actors can override the default response by implementing the
- * #ClutterActor has_overlaps virtual function. See
+ * #ClutterActorClass.has_overlaps() virtual function. See
* clutter_actor_set_offscreen_redirect() for more information.
*
* Return value: %TRUE if the actor may have overlapping primitives, and
@@ -17295,7 +17547,10 @@ clutter_actor_has_constraints (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE);
- return self->priv->constraints != NULL;
+ if (self->priv->constraints == NULL)
+ return FALSE;
+
+ return _clutter_meta_group_has_metas_no_internal (self->priv->constraints);
}
/**
@@ -17314,7 +17569,10 @@ clutter_actor_has_actions (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE);
- return self->priv->actions != NULL;
+ if (self->priv->actions == NULL)
+ return FALSE;
+
+ return _clutter_meta_group_has_metas_no_internal (self->priv->actions);
}
/**
@@ -18276,14 +18534,14 @@ typedef struct _RealActorIter
* Modifying the scene graph section that contains @root will invalidate
* the iterator.
*
- * |[
+ * |[
* ClutterActorIter iter;
* ClutterActor *child;
*
* clutter_actor_iter_init (&iter, container);
* while (clutter_actor_iter_next (&iter, &child))
* {
- * /* do something with child */
+ * // do something with child
* }
* ]|
*
@@ -18706,6 +18964,45 @@ clutter_actor_add_transition_internal (ClutterActor *self,
clutter_timeline_start (timeline);
}
+static gboolean
+should_skip_implicit_transition (ClutterActor *self,
+ GParamSpec *pspec)
+{
+ ClutterActorPrivate *priv = self->priv;
+ const ClutterAnimationInfo *info;
+
+ /* this function is called from _clutter_actor_create_transition() which
+ * calls _clutter_actor_get_animation_info() first, so we're guaranteed
+ * to have the correct ClutterAnimationInfo pointer
+ */
+ info = _clutter_actor_get_animation_info_or_defaults (self);
+
+ /* if the easing state has a non-zero duration we always want an
+ * implicit transition to occur
+ */
+ if (info->cur_state->easing_duration == 0)
+ return TRUE;
+
+ /* on the other hand, if the actor hasn't been allocated yet, we want to
+ * skip all transitions on the :allocation, to avoid actors "flying in"
+ * into their new position and size
+ */
+ if (pspec == obj_props[PROP_ALLOCATION] && priv->needs_allocation)
+ return TRUE;
+
+ /* if the actor is not mapped and is not part of a branch of the scene
+ * graph that is being cloned, then we always skip implicit transitions
+ * on the account of the fact that the actor is not going to be visible
+ * when those transitions happen
+ */
+ if (!CLUTTER_ACTOR_IS_MAPPED (self) &&
+ priv->in_cloned_branch == 0 &&
+ !clutter_actor_has_mapped_clones (self))
+ return TRUE;
+
+ return FALSE;
+}
+
/*< private >*
* _clutter_actor_create_transition:
* @actor: a #ClutterActor
@@ -18783,31 +19080,23 @@ _clutter_actor_create_transition (ClutterActor *actor,
goto out;
}
- if (info->cur_state->easing_duration == 0 ||
- !actor->priv->was_painted ||
- (!CLUTTER_ACTOR_IS_MAPPED (actor) &&
- actor->priv->in_cloned_branch == 0 &&
- !clutter_actor_has_mapped_clones (actor)))
+ if (should_skip_implicit_transition (actor, pspec))
{
- /* don't bother creating the transition if one is not necessary
- * because the actor doesn't want one, or if the actor is not
- * visible: we just set the final value directly on the actor.
- *
- * we also don't go through the Animatable interface because we
- * already know we got here through an animatable property.
- */
- CLUTTER_NOTE (ANIMATION, "Easing duration=0 was_painted=%s, immediate set for '%s::%s'",
- actor->priv->was_painted ? "yes" : "no",
+ CLUTTER_NOTE (ANIMATION, "Skipping implicit transition for '%s::%s'",
_clutter_actor_get_debug_name (actor),
pspec->name);
/* remove a transition, if one exists */
clutter_actor_remove_transition (actor, pspec->name);
+ /* we don't go through the Animatable interface because we
+ * already know we got here through an animatable property.
+ */
clutter_actor_set_animatable_property (actor,
pspec->param_id,
&final,
pspec);
+
g_value_unset (&initial);
g_value_unset (&final);
@@ -18817,12 +19106,10 @@ _clutter_actor_create_transition (ClutterActor *actor,
clos = g_hash_table_lookup (info->transitions, pspec->name);
if (clos == NULL)
{
- interval = clutter_interval_new_with_values (ptype, &initial, &final);
-
res = clutter_property_transition_new (pspec->name);
+ interval = clutter_interval_new_with_values (ptype, &initial, &final);
clutter_transition_set_interval (res, interval);
- clutter_transition_set_remove_on_complete (res, TRUE);
timeline = CLUTTER_TIMELINE (res);
clutter_timeline_set_delay (timeline, info->cur_state->easing_delay);
@@ -18830,26 +19117,27 @@ _clutter_actor_create_transition (ClutterActor *actor,
clutter_timeline_set_progress_mode (timeline, info->cur_state->easing_mode);
#ifdef CLUTTER_ENABLE_DEBUG
- {
- gchar *initial_v, *final_v;
+ if (CLUTTER_HAS_DEBUG (ANIMATION))
+ {
+ gchar *initial_v, *final_v;
- initial_v = g_strdup_value_contents (&initial);
- final_v = g_strdup_value_contents (&final);
+ initial_v = g_strdup_value_contents (&initial);
+ final_v = g_strdup_value_contents (&final);
- CLUTTER_NOTE (ANIMATION,
- "Created transition for %s:%s "
- "(len:%u, mode:%s, delay:%u) "
- "initial:%s, final:%s",
- _clutter_actor_get_debug_name (actor),
- pspec->name,
- info->cur_state->easing_duration,
- clutter_get_easing_name_for_mode (info->cur_state->easing_mode),
- info->cur_state->easing_delay,
- initial_v, final_v);
+ CLUTTER_NOTE (ANIMATION,
+ "Created transition for %s:%s "
+ "(len:%u, mode:%s, delay:%u) "
+ "initial:%s, final:%s",
+ _clutter_actor_get_debug_name (actor),
+ pspec->name,
+ info->cur_state->easing_duration,
+ clutter_get_easing_name_for_mode (info->cur_state->easing_mode),
+ info->cur_state->easing_delay,
+ initial_v, final_v);
- g_free (initial_v);
- g_free (final_v);
- }
+ g_free (initial_v);
+ g_free (final_v);
+ }
#endif /* CLUTTER_ENABLE_DEBUG */
/* this will start the transition as well */
@@ -19203,7 +19491,7 @@ clutter_actor_get_easing_delay (ClutterActor *self)
* Transitions created for animatable properties use the name of the
* property itself, for instance the code below:
*
- * |[
+ * |[
* clutter_actor_set_easing_duration (actor, 1000);
* clutter_actor_set_rotation (actor, CLUTTER_Y_AXIS, 360.0, x, y, z);
*
@@ -19213,8 +19501,8 @@ clutter_actor_get_easing_delay (ClutterActor *self)
* actor);
* ]|
*
- * will call the on_transition_stopped callback when
- * the transition is finished.
+ * will call the `on_transition_stopped` callback when the transition
+ * is finished.
*
* If you just want to get notifications of the completion of a transition,
* you should use the #ClutterActor::transition-stopped signal, using the
@@ -19340,6 +19628,9 @@ clutter_actor_set_content (ClutterActor *self,
priv = self->priv;
+ if (priv->content == content)
+ return;
+
if (priv->content != NULL)
{
_clutter_content_detached (priv->content, self);
@@ -19354,9 +19645,12 @@ clutter_actor_set_content (ClutterActor *self,
_clutter_content_attached (priv->content, self);
}
- /* given that the content is always painted within the allocation,
- * we only need to queue a redraw here
+ /* if the actor's preferred size is the content's preferred size,
+ * then we need to conditionally queue a relayout here...
*/
+ if (priv->request_mode == CLUTTER_REQUEST_CONTENT_SIZE)
+ _clutter_actor_queue_only_relayout (self);
+
clutter_actor_queue_redraw (self);
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CONTENT]);
@@ -19368,7 +19662,25 @@ clutter_actor_set_content (ClutterActor *self,
* do.
*/
if (priv->content_gravity != CLUTTER_CONTENT_GRAVITY_RESIZE_FILL)
- g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CONTENT_BOX]);
+ {
+ if (priv->content_box_valid)
+ {
+ ClutterActorBox from_box, to_box;
+
+ clutter_actor_get_content_box (self, &from_box);
+
+ /* invalidate the cached content box */
+ priv->content_box_valid = FALSE;
+ clutter_actor_get_content_box (self, &to_box);
+
+ if (!clutter_actor_box_equal (&from_box, &to_box))
+ _clutter_actor_create_transition (self, obj_props[PROP_CONTENT_BOX],
+ &from_box,
+ &to_box);
+ }
+
+ g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CONTENT_BOX]);
+ }
}
/**
@@ -20286,13 +20598,27 @@ _clutter_actor_queue_relayout_on_clones (ClutterActor *self)
clutter_actor_queue_relayout (key);
}
-static inline gboolean
+/**
+ * clutter_actor_has_mapped_clones:
+ * @self: a #ClutterActor
+ *
+ * Returns whether a #ClutterActor has any mapped clones.
+ *
+ * Return: %TRUE if the actor has mapped clones, and %FALSE otherwise
+ *
+ * Since: 1.16
+ */
+gboolean
clutter_actor_has_mapped_clones (ClutterActor *self)
{
- ClutterActorPrivate *priv = self->priv;
+ ClutterActorPrivate *priv;
GHashTableIter iter;
gpointer key;
+ g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE);
+
+ priv = self->priv;
+
if (priv->clones == NULL)
return FALSE;
@@ -20305,3 +20631,29 @@ clutter_actor_has_mapped_clones (ClutterActor *self)
return FALSE;
}
+
+CoglFramebuffer *
+_clutter_actor_get_active_framebuffer (ClutterActor *self)
+{
+ ClutterStage *stage;
+
+ if (!CLUTTER_ACTOR_IN_PAINT (self))
+ {
+ g_critical ("The active framebuffer of actor '%s' can only be "
+ "retrieved during the paint sequence. Please, check "
+ "your code.",
+ _clutter_actor_get_debug_name (self));
+ return NULL;
+ }
+
+ stage = (ClutterStage *) _clutter_actor_get_stage_internal (self);
+ if (stage == NULL)
+ {
+ g_critical ("The active framebuffer of actor '%s' is only available "
+ "if the actor is associated to a ClutterStage.",
+ _clutter_actor_get_debug_name (self));
+ return NULL;
+ }
+
+ return _clutter_stage_get_active_framebuffer (stage);
+}
diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h
index 50e9e04d5..af2e47b43 100644
--- a/clutter/clutter-actor.h
+++ b/clutter/clutter-actor.h
@@ -129,9 +129,13 @@ struct _ClutterActor
* clutter_actor_hide(). This virtual function is deprecated and it
* should not be overridden.
* @realize: virtual function, used to allocate resources for the actor;
- * it should chain up to the parent's implementation
+ * it should chain up to the parent's implementation. This virtual
+ * function is deprecated and should not be overridden in newly
+ * written code.
* @unrealize: virtual function, used to deallocate resources allocated
- * in ::realize; it should chain up to the parent's implementation
+ * in ::realize; it should chain up to the parent's implementation. This
+ * function is deprecated and should not be overridden in newly
+ * written code.
* @map: virtual function for containers and composite actors, to
* map their children; it must chain up to the parent's implementation.
* Overriding this function is optional.
@@ -147,12 +151,13 @@ struct _ClutterActor
* clutter_actor_get_preferred_height()
* @allocate: virtual function, used when settings the coordinates of an
* actor; it is used by clutter_actor_allocate(); it must chain up to
- * the parent's implementation
+ * the parent's implementation, or call clutter_actor_set_allocation()
* @apply_transform: virtual function, used when applying the transformations
* to an actor before painting it or when transforming coordinates or
* the allocation; it must chain up to the parent's implementation
* @parent_set: signal class handler for the #ClutterActor::parent-set
- * @destroy: signal class handler for #ClutterActor::destroy
+ * @destroy: signal class handler for #ClutterActor::destroy. It must
+ * chain up to the parent's implementation
* @pick: virtual function, used to draw an outline of the actor with
* the given color
* @queue_redraw: class handler for #ClutterActor::queue-redraw
@@ -278,7 +283,7 @@ struct _ClutterActorClass
* An iterator structure that allows to efficiently iterate over a
* section of the scene graph.
*
- * The contents of the ClutterActorIter structure
+ * The contents of the #ClutterActorIter structure
* are private and should only be accessed using the provided API.
*
* Since: 1.10
@@ -293,62 +298,90 @@ struct _ClutterActorIter
gpointer CLUTTER_PRIVATE_FIELD (dummy5);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_actor_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_10
ClutterActor * clutter_actor_new (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_flags (ClutterActor *self,
ClutterActorFlags flags);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_unset_flags (ClutterActor *self,
ClutterActorFlags flags);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActorFlags clutter_actor_get_flags (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_show (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_hide (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_realize (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_unrealize (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_map (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_unmap (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_paint (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_continue_paint (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_queue_redraw (ClutterActor *self);
CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_queue_redraw_with_clip (ClutterActor *self,
const cairo_rectangle_int_t *clip);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_queue_relayout (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_destroy (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_name (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_ALL
const gchar * clutter_actor_get_name (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
AtkObject * clutter_actor_get_accessible (ClutterActor *self);
/* Size negotiation */
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_request_mode (ClutterActor *self,
ClutterRequestMode mode);
+CLUTTER_AVAILABLE_IN_ALL
ClutterRequestMode clutter_actor_get_request_mode (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_preferred_width (ClutterActor *self,
gfloat for_height,
gfloat *min_width_p,
gfloat *natural_width_p);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_preferred_height (ClutterActor *self,
gfloat for_width,
gfloat *min_height_p,
gfloat *natural_height_p);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_preferred_size (ClutterActor *self,
gfloat *min_width_p,
gfloat *min_height_p,
gfloat *natural_width_p,
gfloat *natural_height_p);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_allocate (ClutterActor *self,
const ClutterActorBox *box,
ClutterAllocationFlags flags);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_allocate_preferred_size (ClutterActor *self,
ClutterAllocationFlags flags);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_allocate_available_size (ClutterActor *self,
gfloat x,
gfloat y,
gfloat available_width,
gfloat available_height,
ClutterAllocationFlags flags);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_allocate_align_fill (ClutterActor *self,
const ClutterActorBox *box,
gdouble x_align,
@@ -356,45 +389,64 @@ void clutter_actor_allocate_align_fill
gboolean x_fill,
gboolean y_fill,
ClutterAllocationFlags flags);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_set_allocation (ClutterActor *self,
const ClutterActorBox *box,
ClutterAllocationFlags flags);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_allocation_box (ClutterActor *self,
ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_allocation_vertices (ClutterActor *self,
ClutterActor *ancestor,
ClutterVertex verts[]);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_has_allocation (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_size (ClutterActor *self,
gfloat width,
gfloat height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_size (ClutterActor *self,
gfloat *width,
gfloat *height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_position (ClutterActor *self,
gfloat x,
gfloat y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_position (ClutterActor *self,
gfloat *x,
gfloat *y);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_get_fixed_position_set (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_fixed_position_set (ClutterActor *self,
gboolean is_set);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_move_by (ClutterActor *self,
gfloat dx,
gfloat dy);
/* Actor geometry */
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_get_width (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_get_height (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_width (ClutterActor *self,
gfloat width);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_height (ClutterActor *self,
gfloat height);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_get_x (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_get_y (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_x (ClutterActor *self,
gfloat x);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_y (ClutterActor *self,
gfloat y);
CLUTTER_AVAILABLE_IN_1_12
@@ -458,33 +510,49 @@ gboolean clutter_actor_needs_expand
ClutterOrientation orientation);
/* Paint */
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_clip (ClutterActor *self,
gfloat xoff,
gfloat yoff,
gfloat width,
gfloat height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_remove_clip (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_has_clip (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_clip (ClutterActor *self,
gfloat *xoff,
gfloat *yoff,
gfloat *width,
gfloat *height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_clip_to_allocation (ClutterActor *self,
gboolean clip_set);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_get_clip_to_allocation (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_opacity (ClutterActor *self,
guint8 opacity);
+CLUTTER_AVAILABLE_IN_ALL
guint8 clutter_actor_get_opacity (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
guint8 clutter_actor_get_paint_opacity (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_get_paint_visibility (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_actor_set_offscreen_redirect (ClutterActor *self,
ClutterOffscreenRedirect redirect);
+CLUTTER_AVAILABLE_IN_1_8
ClutterOffscreenRedirect clutter_actor_get_offscreen_redirect (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_should_pick_paint (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_is_in_clone_paint (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_get_paint_box (ClutterActor *self,
ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_1_8
gboolean clutter_actor_has_overlaps (ClutterActor *self);
/* Content */
@@ -520,30 +588,43 @@ void clutter_actor_set_background_color
CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_get_background_color (ClutterActor *self,
ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_6
const ClutterPaintVolume * clutter_actor_get_paint_volume (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_6
const ClutterPaintVolume * clutter_actor_get_transformed_paint_volume (ClutterActor *self,
ClutterActor *relative_to_ancestor);
CLUTTER_AVAILABLE_IN_1_10
const ClutterPaintVolume * clutter_actor_get_default_paint_volume (ClutterActor *self);
/* Events */
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_reactive (ClutterActor *actor,
gboolean reactive);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_get_reactive (ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_has_key_focus (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_grab_key_focus (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_event (ClutterActor *actor,
const ClutterEvent *event,
gboolean capture);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_has_pointer (ClutterActor *self);
/* Text */
+CLUTTER_AVAILABLE_IN_ALL
PangoContext * clutter_actor_get_pango_context (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
PangoContext * clutter_actor_create_pango_context (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
PangoLayout * clutter_actor_create_pango_layout (ClutterActor *self,
const gchar *text);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_text_direction (ClutterActor *self,
ClutterTextDirection text_dir);
+CLUTTER_AVAILABLE_IN_ALL
ClutterTextDirection clutter_actor_get_text_direction (ClutterActor *self);
/* Actor hierarchy */
@@ -588,9 +669,12 @@ CLUTTER_AVAILABLE_IN_1_10
ClutterActor * clutter_actor_get_first_child (ClutterActor *self);
CLUTTER_AVAILABLE_IN_1_10
ClutterActor * clutter_actor_get_last_child (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_actor_get_parent (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_4
gboolean clutter_actor_contains (ClutterActor *self,
ClutterActor *descendant);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor* clutter_actor_get_stage (ClutterActor *actor);
CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_set_child_below_sibling (ClutterActor *self,
@@ -621,7 +705,9 @@ CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_actor_iter_is_valid (const ClutterActorIter *iter);
/* Transformations */
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_is_rotated (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_is_scaled (ClutterActor *self);
CLUTTER_AVAILABLE_IN_1_12
void clutter_actor_set_pivot_point (ClutterActor *self,
@@ -643,9 +729,11 @@ void clutter_actor_set_rotation_angle
CLUTTER_AVAILABLE_IN_1_12
gdouble clutter_actor_get_rotation_angle (ClutterActor *self,
ClutterRotateAxis axis);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_set_scale (ClutterActor *self,
gdouble scale_x,
gdouble scale_y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_scale (ClutterActor *self,
gdouble *scale_x,
gdouble *scale_y);
@@ -676,22 +764,28 @@ void clutter_actor_set_child_transform
CLUTTER_AVAILABLE_IN_1_12
void clutter_actor_get_child_transform (ClutterActor *self,
ClutterMatrix *transform);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_transformed_position (ClutterActor *self,
gfloat *x,
gfloat *y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_transformed_size (ClutterActor *self,
gfloat *width,
gfloat *height);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_transform_stage_point (ClutterActor *self,
gfloat x,
gfloat y,
gfloat *x_out,
gfloat *y_out);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_get_abs_allocation_vertices (ClutterActor *self,
ClutterVertex verts[]);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_apply_transform_to_point (ClutterActor *self,
const ClutterVertex *point,
ClutterVertex *vertex);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_apply_relative_transform_to_point (ClutterActor *self,
ClutterActor *ancestor,
const ClutterVertex *point,
@@ -730,6 +824,13 @@ void clutter_actor_remove_transition
CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_remove_all_transitions (ClutterActor *self);
+
+/* Experimental API */
+#ifdef CLUTTER_ENABLE_EXPERIMENTAL_API
+CLUTTER_AVAILABLE_IN_1_16
+gboolean clutter_actor_has_mapped_clones (ClutterActor *self);
+#endif
+
G_END_DECLS
#endif /* __CLUTTER_ACTOR_H__ */
diff --git a/clutter/clutter-align-constraint.h b/clutter/clutter-align-constraint.h
index 6ff855ecc..9b63f4208 100644
--- a/clutter/clutter-align-constraint.h
+++ b/clutter/clutter-align-constraint.h
@@ -40,7 +40,7 @@ G_BEGIN_DECLS
/**
* ClutterAlignConstraint:
*
- * ClutterAlignConstraint is an opaque structure
+ * #ClutterAlignConstraint is an opaque structure
* whose members cannot be directly accesses
*
* Since: 1.4
@@ -48,20 +48,28 @@ G_BEGIN_DECLS
typedef struct _ClutterAlignConstraint ClutterAlignConstraint;
typedef struct _ClutterAlignConstraintClass ClutterAlignConstraintClass;
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_align_constraint_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterConstraint *clutter_align_constraint_new (ClutterActor *source,
ClutterAlignAxis axis,
gfloat factor);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_align_constraint_set_source (ClutterAlignConstraint *align,
ClutterActor *source);
+CLUTTER_AVAILABLE_IN_1_4
ClutterActor * clutter_align_constraint_get_source (ClutterAlignConstraint *align);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_align_constraint_set_align_axis (ClutterAlignConstraint *align,
ClutterAlignAxis axis);
+CLUTTER_AVAILABLE_IN_1_4
ClutterAlignAxis clutter_align_constraint_get_align_axis (ClutterAlignConstraint *align);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_align_constraint_set_factor (ClutterAlignConstraint *align,
gfloat factor);
+CLUTTER_AVAILABLE_IN_1_4
gfloat clutter_align_constraint_get_factor (ClutterAlignConstraint *align);
G_END_DECLS
diff --git a/clutter/clutter-animatable.h b/clutter/clutter-animatable.h
index 78a796fae..7d20c5a57 100644
--- a/clutter/clutter-animatable.h
+++ b/clutter/clutter-animatable.h
@@ -95,16 +95,21 @@ struct _ClutterAnimatableIface
GValue *value);
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_animatable_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
GParamSpec *clutter_animatable_find_property (ClutterAnimatable *animatable,
const gchar *property_name);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_animatable_get_initial_state (ClutterAnimatable *animatable,
const gchar *property_name,
GValue *value);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_animatable_set_final_state (ClutterAnimatable *animatable,
const gchar *property_name,
const GValue *value);
+CLUTTER_AVAILABLE_IN_1_8
gboolean clutter_animatable_interpolate_value (ClutterAnimatable *animatable,
const gchar *property_name,
ClutterInterval *interval,
diff --git a/clutter/clutter-backend-private.h b/clutter/clutter-backend-private.h
index 72563a3b1..a9e7ae270 100644
--- a/clutter/clutter-backend-private.h
+++ b/clutter/clutter-backend-private.h
@@ -93,12 +93,16 @@ struct _ClutterBackendClass
gpointer native,
ClutterEvent *event);
+ PangoDirection (* get_keymap_direction) (ClutterBackend *backend);
+
/* signals */
void (* resolution_changed) (ClutterBackend *backend);
void (* font_changed) (ClutterBackend *backend);
void (* settings_changed) (ClutterBackend *backend);
};
+ClutterBackend * _clutter_create_backend (void);
+
ClutterStageWindow * _clutter_backend_create_stage (ClutterBackend *backend,
ClutterStage *wrapper,
GError **error);
@@ -136,6 +140,8 @@ gfloat _clutter_backend_get_units_per_em (Clutter
PangoFontDescription *font_desc);
gint32 _clutter_backend_get_units_serial (ClutterBackend *backend);
+PangoDirection _clutter_backend_get_keymap_direction (ClutterBackend *backend);
+
G_END_DECLS
#endif /* __CLUTTER_BACKEND_PRIVATE_H__ */
diff --git a/clutter/clutter-backend.c b/clutter/clutter-backend.c
index c174ae817..d255eee8b 100644
--- a/clutter/clutter-backend.c
+++ b/clutter/clutter-backend.c
@@ -83,6 +83,9 @@
/* XXX - should probably warn, here */
#include "tslib/clutter-event-tslib.h"
#endif
+#ifdef CLUTTER_WINDOWING_EGL
+#include "egl/clutter-backend-eglnative.h"
+#endif
#ifdef CLUTTER_INPUT_WAYLAND
#include "wayland/clutter-device-manager-wayland.h"
#endif
@@ -93,13 +96,8 @@
#include "wayland/clutter-wayland-compositor.h"
#endif
-G_DEFINE_ABSTRACT_TYPE (ClutterBackend, clutter_backend, G_TYPE_OBJECT);
-
#define DEFAULT_FONT_NAME "Sans 10"
-#define CLUTTER_BACKEND_GET_PRIVATE(obj) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_BACKEND, ClutterBackendPrivate))
-
struct _ClutterBackendPrivate
{
cairo_font_options_t *font_options;
@@ -121,6 +119,8 @@ enum
LAST_SIGNAL
};
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterBackend, clutter_backend, G_TYPE_OBJECT)
+
static guint backend_signals[LAST_SIGNAL] = { 0, };
/* Global for being able to specify a compositor side wayland display
@@ -129,6 +129,7 @@ static guint backend_signals[LAST_SIGNAL] = { 0, };
static struct wl_display *_wayland_compositor_display;
#endif
+static const char *allowed_backend;
static void
clutter_backend_dispose (GObject *gobject)
@@ -466,6 +467,58 @@ clutter_backend_real_create_stage (ClutterBackend *backend,
NULL);
}
+ClutterBackend *
+_clutter_create_backend (void)
+{
+ const char *backend = allowed_backend;
+ ClutterBackend *retval = NULL;
+
+ if (backend == NULL)
+ {
+ const char *backend_env = g_getenv ("CLUTTER_BACKEND");
+
+ if (backend_env != NULL)
+ backend = g_intern_string (backend_env);
+ }
+
+#ifdef CLUTTER_WINDOWING_OSX
+ if (backend == NULL || backend == I_(CLUTTER_WINDOWING_OSX))
+ retval = g_object_new (CLUTTER_TYPE_BACKEND_OSX, NULL);
+ else
+#endif
+#ifdef CLUTTER_WINDOWING_WIN32
+ if (backend == NULL || backend == I_(CLUTTER_WINDOWING_WIN32))
+ retval = g_object_new (CLUTTER_TYPE_BACKEND_WIN32, NULL);
+ else
+#endif
+#ifdef CLUTTER_WINDOWING_X11
+ if (backend == NULL || backend == I_(CLUTTER_WINDOWING_X11))
+ retval = g_object_new (CLUTTER_TYPE_BACKEND_X11, NULL);
+ else
+#endif
+#ifdef CLUTTER_WINDOWING_WAYLAND
+ if (backend == NULL || backend == I_(CLUTTER_WINDOWING_WAYLAND))
+ retval = g_object_new (CLUTTER_TYPE_BACKEND_WAYLAND, NULL);
+ else
+#endif
+#ifdef CLUTTER_WINDOWING_EGL
+ if (backend == NULL || backend == I_(CLUTTER_WINDOWING_EGL))
+ retval = g_object_new (CLUTTER_TYPE_BACKEND_EGL_NATIVE, NULL);
+ else
+#endif
+#ifdef CLUTTER_WINDOWING_GDK
+ if (backend == NULL || backend == I_(CLUTTER_WINDOWING_GDK))
+ retval = g_object_new (CLUTTER_TYPE_BACKEND_GDK, NULL);
+ else
+#endif
+ if (backend == NULL)
+ g_error ("No default Clutter backend found.");
+ else
+ g_error ("Unsupported Clutter backend: '%s'", backend);
+
+ return retval;
+}
+
static void
clutter_backend_real_init_events (ClutterBackend *backend)
{
@@ -509,8 +562,12 @@ clutter_backend_real_init_events (ClutterBackend *backend)
#endif
#ifdef CLUTTER_INPUT_EVDEV
/* Evdev can be used regardless of the windowing system */
- if (input_backend != NULL &&
- strcmp (input_backend, CLUTTER_INPUT_EVDEV) == 0)
+ if ((input_backend != NULL && strcmp (input_backend, CLUTTER_INPUT_EVDEV) == 0)
+#ifdef CLUTTER_WINDOWING_EGL
+ /* but we do want to always use it for EGL native */
+ || clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL)
+#endif
+ )
{
_clutter_events_evdev_init (backend);
}
@@ -591,8 +648,6 @@ clutter_backend_class_init (ClutterBackendClass *klass)
gobject_class->dispose = clutter_backend_dispose;
gobject_class->finalize = clutter_backend_finalize;
- g_type_class_add_private (gobject_class, sizeof (ClutterBackendPrivate));
-
klass->stage_window_type = G_TYPE_INVALID;
/**
@@ -662,14 +717,11 @@ clutter_backend_class_init (ClutterBackendClass *klass)
}
static void
-clutter_backend_init (ClutterBackend *backend)
+clutter_backend_init (ClutterBackend *self)
{
- ClutterBackendPrivate *priv;
-
- priv = backend->priv = CLUTTER_BACKEND_GET_PRIVATE (backend);
-
- priv->units_per_em = -1.0;
- priv->units_serial = 1;
+ self->priv = clutter_backend_get_instance_private (self);
+ self->priv->units_per_em = -1.0;
+ self->priv->units_serial = 1;
}
void
@@ -1292,14 +1344,14 @@ _clutter_backend_remove_event_translator (ClutterBackend *backend,
* @backend. A #CoglContext is required when using some of the
* experimental 2.0 Cogl API.
*
- * Since CoglContext is itself experimental API this API should
- * be considered experimental too.
+ * Since CoglContext is itself experimental API this API should
+ * be considered experimental too.
*
- * This API is not yet supported on OSX because OSX still
+ * This API is not yet supported on OSX because OSX still
* uses the stub Cogl winsys and the Clutter backend doesn't
- * explicitly create a CoglContext.
+ * explicitly create a CoglContext.
*
- * Return value: The #CoglContext associated with @backend.
+ * Return value: (transfer none): The #CoglContext associated with @backend.
*
* Since: 1.8
* Stability: unstable
@@ -1334,3 +1386,33 @@ clutter_wayland_set_compositor_display (void *display)
_wayland_compositor_display = display;
}
#endif
+
+/**
+ * clutter_set_windowing_backend:
+ * @backend_type: the name of a clutter window backend
+ *
+ * Restricts clutter to only use the specified backend.
+ * This must be called before the first API call to clutter, including
+ * clutter_get_option_context()
+ *
+ * Since: 1.16
+ */
+void
+clutter_set_windowing_backend (const char *backend_type)
+{
+ g_return_if_fail (backend_type != NULL);
+
+ allowed_backend = g_intern_string (backend_type);
+}
+
+PangoDirection
+_clutter_backend_get_keymap_direction (ClutterBackend *backend)
+{
+ ClutterBackendClass *klass;
+
+ klass = CLUTTER_BACKEND_GET_CLASS (backend);
+ if (klass->get_keymap_direction != NULL)
+ return klass->get_keymap_direction (backend);
+
+ return PANGO_DIRECTION_NEUTRAL;
+}
diff --git a/clutter/clutter-backend.h b/clutter/clutter-backend.h
index 474c4264e..e14d5d2c6 100644
--- a/clutter/clutter-backend.h
+++ b/clutter/clutter-backend.h
@@ -47,7 +47,7 @@ G_BEGIN_DECLS
/**
* ClutterBackend:
*
- * ClutterBackend is an opaque structure whose
+ * #ClutterBackend is an opaque structure whose
* members cannot be directly accessed.
*
* Since: 0.4
@@ -55,18 +55,27 @@ G_BEGIN_DECLS
typedef struct _ClutterBackend ClutterBackend;
typedef struct _ClutterBackendClass ClutterBackendClass;
-GType clutter_backend_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
+GType clutter_backend_get_type (void) G_GNUC_CONST;
-ClutterBackend *clutter_get_default_backend (void);
+CLUTTER_AVAILABLE_IN_ALL
+ClutterBackend * clutter_get_default_backend (void);
-gdouble clutter_backend_get_resolution (ClutterBackend *backend);
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_set_windowing_backend (const char *backend_type);
-void clutter_backend_set_font_options (ClutterBackend *backend,
- const cairo_font_options_t *options);
-const cairo_font_options_t *clutter_backend_get_font_options (ClutterBackend *backend);
+CLUTTER_AVAILABLE_IN_ALL
+gdouble clutter_backend_get_resolution (ClutterBackend *backend);
+
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_backend_set_font_options (ClutterBackend *backend,
+ const cairo_font_options_t *options);
+CLUTTER_AVAILABLE_IN_ALL
+const cairo_font_options_t * clutter_backend_get_font_options (ClutterBackend *backend);
#if defined (COGL_ENABLE_EXPERIMENTAL_API) && defined (CLUTTER_ENABLE_EXPERIMENTAL_API)
-CoglContext *clutter_backend_get_cogl_context (ClutterBackend *backend);
+CLUTTER_AVAILABLE_IN_1_8
+CoglContext * clutter_backend_get_cogl_context (ClutterBackend *backend);
#endif
G_END_DECLS
diff --git a/clutter/clutter-bin-layout.c b/clutter/clutter-bin-layout.c
index de7370ee7..2ee8012a8 100644
--- a/clutter/clutter-bin-layout.c
+++ b/clutter/clutter-bin-layout.c
@@ -29,34 +29,16 @@
* #ClutterBinLayout is a layout manager which implements the following
* policy:
*
- *
- * the preferred size is the maximum preferred size
+ * - the preferred size is the maximum preferred size
* between all the children of the container using the
- * layout;
- * each child is allocated in "layers", on on top
- * of the other;
- * for each layer there are horizontal and vertical
- * alignment policies.
- *
+ * layout;
+ * - each child is allocated in "layers", on on top
+ * of the other;
+ * - for each layer there are horizontal and vertical
+ * alignment policies.
*
- *
- * Bin layout
- * The image shows a #ClutterBinLayout with three layers:
- * a background #ClutterCairoTexture, set to fill on both the X
- * and Y axis; a #ClutterTexture, set to center on both the X and
- * Y axis; and a #ClutterRectangle, set to %CLUTTER_BIN_ALIGNMENT_END
- * on both the X and Y axis.
- *
- *
- *
- *
- * How to pack actors inside a BinLayout
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
+ * The [bin-layout example](https://git.gnome.org/browse/clutter/tree/examples/bin-layout.c?h=clutter-1.18)
+ * shows how to pack actors inside a #ClutterBinLayout.
*
* #ClutterBinLayout is available since Clutter 1.2
*/
@@ -83,8 +65,6 @@
#define CLUTTER_BIN_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_BIN_LAYER, ClutterBinLayer))
#define CLUTTER_IS_BIN_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_BIN_LAYER))
-#define CLUTTER_BIN_LAYOUT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_BIN_LAYOUT, ClutterBinLayoutPrivate))
-
typedef struct _ClutterBinLayer ClutterBinLayer;
typedef struct _ClutterLayoutMetaClass ClutterBinLayerClass;
@@ -131,11 +111,11 @@ GType clutter_bin_layer_get_type (void);
G_DEFINE_TYPE (ClutterBinLayer,
clutter_bin_layer,
- CLUTTER_TYPE_LAYOUT_META);
+ CLUTTER_TYPE_LAYOUT_META)
-G_DEFINE_TYPE (ClutterBinLayout,
- clutter_bin_layout,
- CLUTTER_TYPE_LAYOUT_MANAGER);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBinLayout,
+ clutter_bin_layout,
+ CLUTTER_TYPE_LAYOUT_MANAGER)
/*
* ClutterBinLayer
@@ -491,8 +471,8 @@ clutter_bin_layout_allocate (ClutterLayoutManager *manager,
else
child_alloc.y1 = allocation_y;
- child_alloc.x2 = available_w;
- child_alloc.y2 = available_h;
+ child_alloc.x2 = allocation_x + available_w;
+ child_alloc.y2 = allocation_y + available_h;
if (clutter_actor_needs_expand (child, CLUTTER_ORIENTATION_HORIZONTAL))
{
@@ -637,8 +617,6 @@ clutter_bin_layout_class_init (ClutterBinLayoutClass *klass)
ClutterLayoutManagerClass *layout_class =
CLUTTER_LAYOUT_MANAGER_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterBinLayoutPrivate));
-
/**
* ClutterBinLayout:x-align:
*
@@ -694,7 +672,7 @@ clutter_bin_layout_class_init (ClutterBinLayoutClass *klass)
static void
clutter_bin_layout_init (ClutterBinLayout *self)
{
- self->priv = CLUTTER_BIN_LAYOUT_GET_PRIVATE (self);
+ self->priv = clutter_bin_layout_get_instance_private (self);
self->priv->x_align = CLUTTER_BIN_ALIGNMENT_CENTER;
self->priv->y_align = CLUTTER_BIN_ALIGNMENT_CENTER;
diff --git a/clutter/clutter-bin-layout.h b/clutter/clutter-bin-layout.h
index 6f52ba182..fc89e0bd6 100644
--- a/clutter/clutter-bin-layout.h
+++ b/clutter/clutter-bin-layout.h
@@ -74,10 +74,12 @@ struct _ClutterBinLayoutClass
ClutterLayoutManagerClass parent_class;
};
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_bin_layout_get_type (void) G_GNUC_CONST;
-ClutterLayoutManager *clutter_bin_layout_new (ClutterBinAlignment x_align,
- ClutterBinAlignment y_align);
+CLUTTER_AVAILABLE_IN_1_2
+ClutterLayoutManager * clutter_bin_layout_new (ClutterBinAlignment x_align,
+ ClutterBinAlignment y_align);
G_END_DECLS
diff --git a/clutter/clutter-bind-constraint.c b/clutter/clutter-bind-constraint.c
index b9e45aba5..53cbbba8f 100644
--- a/clutter/clutter-bind-constraint.c
+++ b/clutter/clutter-bind-constraint.c
@@ -36,14 +36,14 @@
* can also be animated. For instance, the following code will set up three
* actors to be bound to the same origin:
*
- * |[
- * /* source */
- * rect[0] = clutter_rectangle_new_with_color (&red_color);
+ * |[
+ * // source
+ * rect[0] = clutter_rectangle_new_with_color (&red_color);
* clutter_actor_set_position (rect[0], x_pos, y_pos);
* clutter_actor_set_size (rect[0], 100, 100);
*
- * /* second rectangle */
- * rect[1] = clutter_rectangle_new_with_color (&green_color);
+ * // second rectangle
+ * rect[1] = clutter_rectangle_new_with_color (&green_color);
* clutter_actor_set_size (rect[1], 100, 100);
* clutter_actor_set_opacity (rect[1], 0);
*
@@ -52,8 +52,8 @@
* constraint = clutter_bind_constraint_new (rect[0], CLUTTER_BIND_Y, 0.0);
* clutter_actor_add_constraint_with_name (rect[1], "green-y", constraint);
*
- * /* third rectangle */
- * rect[2] = clutter_rectangle_new_with_color (&blue_color);
+ * // third rectangle
+ * rect[2] = clutter_rectangle_new_with_color (&blue_color);
* clutter_actor_set_size (rect[2], 100, 100);
* clutter_actor_set_opacity (rect[2], 0);
*
@@ -66,7 +66,7 @@
* The following code animates the second and third rectangles to "expand"
* them horizontally from underneath the first rectangle:
*
- * |[
+ * |[
* clutter_actor_animate (rect[1], CLUTTER_EASE_OUT_CUBIC, 250,
* "@constraints.green-x.offset", 100.0,
* "opacity", 255,
@@ -77,21 +77,6 @@
* NULL);
* ]|
*
- *
- * Animating the offset property of ClutterBindConstraint
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- * The example above creates eight rectangles and binds them to a
- * rectangle positioned in the center of the stage; when the user presses
- * the center rectangle, the #ClutterBindConstraint:offset property is
- * animated through the clutter_actor_animate() function to lay out the
- * eight rectangles around the center one. Pressing one of the outer
- * rectangles will animate the offset back to 0.
- *
- *
* #ClutterBindConstraint is available since Clutter 1.4
*/
@@ -151,7 +136,7 @@ source_queue_relayout (ClutterActor *source,
ClutterBindConstraint *bind)
{
if (bind->actor != NULL)
- clutter_actor_queue_relayout (bind->actor);
+ _clutter_actor_queue_only_relayout (bind->actor);
}
static void
diff --git a/clutter/clutter-bind-constraint.h b/clutter/clutter-bind-constraint.h
index 3ce1d59da..36e2b484e 100644
--- a/clutter/clutter-bind-constraint.h
+++ b/clutter/clutter-bind-constraint.h
@@ -40,7 +40,7 @@ G_BEGIN_DECLS
/**
* ClutterBindConstraint:
*
- * ClutterBindConstraint is an opaque structure
+ * #ClutterBindConstraint is an opaque structure
* whose members cannot be directly accessed
*
* Since: 1.4
@@ -48,20 +48,28 @@ G_BEGIN_DECLS
typedef struct _ClutterBindConstraint ClutterBindConstraint;
typedef struct _ClutterBindConstraintClass ClutterBindConstraintClass;
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_bind_constraint_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterConstraint * clutter_bind_constraint_new (ClutterActor *source,
ClutterBindCoordinate coordinate,
gfloat offset);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_bind_constraint_set_source (ClutterBindConstraint *constraint,
ClutterActor *source);
+CLUTTER_AVAILABLE_IN_1_4
ClutterActor * clutter_bind_constraint_get_source (ClutterBindConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_bind_constraint_set_coordinate (ClutterBindConstraint *constraint,
ClutterBindCoordinate coordinate);
+CLUTTER_AVAILABLE_IN_1_4
ClutterBindCoordinate clutter_bind_constraint_get_coordinate (ClutterBindConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_bind_constraint_set_offset (ClutterBindConstraint *constraint,
gfloat offset);
+CLUTTER_AVAILABLE_IN_1_4
gfloat clutter_bind_constraint_get_offset (ClutterBindConstraint *constraint);
G_END_DECLS
diff --git a/clutter/clutter-binding-pool.c b/clutter/clutter-binding-pool.c
index 6bce92334..66959c784 100644
--- a/clutter/clutter-binding-pool.c
+++ b/clutter/clutter-binding-pool.c
@@ -38,7 +38,7 @@
* inside their class initialization function and then install actions
* like this:
*
- * |[
+ * |[
* static void
* foo_class_init (FooClass *klass)
* {
@@ -59,7 +59,7 @@
*
* The callback has a signature of:
*
- * |[
+ * |[
* gboolean (* callback) (GObject *instance,
* const gchar *action_name,
* guint key_val,
@@ -71,19 +71,18 @@
* use clutter_binding_pool_activate() to match a #ClutterKeyEvent structure
* to one of the actions:
*
- * |[
+ * |[
* ClutterBindingPool *pool;
*
- * /* retrieve the binding pool for the type of the actor */
+ * // retrieve the binding pool for the type of the actor
* pool = clutter_binding_pool_find (G_OBJECT_TYPE_NAME (actor));
*
- * /* activate any callback matching the key symbol and modifiers
- * * mask of the key event. the returned value can be directly
- * * used to signal that the actor has handled the event.
- * */
+ * // activate any callback matching the key symbol and modifiers
+ * // mask of the key event. the returned value can be directly
+ * // used to signal that the actor has handled the event.
* return clutter_binding_pool_activate (pool,
- * key_event->keyval,
- * key_event->modifier_state,
+ * key_event->keyval,
+ * key_event->modifier_state,
* G_OBJECT (actor));
* ]|
*
diff --git a/clutter/clutter-binding-pool.h b/clutter/clutter-binding-pool.h
index cdba0378e..6df5260b3 100644
--- a/clutter/clutter-binding-pool.h
+++ b/clutter/clutter-binding-pool.h
@@ -71,12 +71,17 @@ typedef gboolean (* ClutterBindingActionFunc) (GObject *gobject,
ClutterModifierType modifiers,
gpointer user_data);
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_binding_pool_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterBindingPool * clutter_binding_pool_new (const gchar *name);
+CLUTTER_AVAILABLE_IN_1_0
ClutterBindingPool * clutter_binding_pool_get_for_class (gpointer klass);
+CLUTTER_AVAILABLE_IN_1_0
ClutterBindingPool * clutter_binding_pool_find (const gchar *name);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_install_action (ClutterBindingPool *pool,
const gchar *action_name,
guint key_val,
@@ -84,36 +89,44 @@ void clutter_binding_pool_install_action (ClutterBindingPool
GCallback callback,
gpointer data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_install_closure (ClutterBindingPool *pool,
const gchar *action_name,
guint key_val,
ClutterModifierType modifiers,
GClosure *closure);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_override_action (ClutterBindingPool *pool,
guint key_val,
ClutterModifierType modifiers,
GCallback callback,
gpointer data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_override_closure (ClutterBindingPool *pool,
guint key_val,
ClutterModifierType modifiers,
GClosure *closure);
+CLUTTER_AVAILABLE_IN_1_0
const gchar * clutter_binding_pool_find_action (ClutterBindingPool *pool,
guint key_val,
ClutterModifierType modifiers);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_remove_action (ClutterBindingPool *pool,
guint key_val,
ClutterModifierType modifiers);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_binding_pool_activate (ClutterBindingPool *pool,
guint key_val,
ClutterModifierType modifiers,
GObject *gobject);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_block_action (ClutterBindingPool *pool,
const gchar *action_name);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_binding_pool_unblock_action (ClutterBindingPool *pool,
const gchar *action_name);
diff --git a/clutter/clutter-blur-effect.h b/clutter/clutter-blur-effect.h
index 27466bb48..ca96d8081 100644
--- a/clutter/clutter-blur-effect.h
+++ b/clutter/clutter-blur-effect.h
@@ -40,7 +40,7 @@ G_BEGIN_DECLS
/**
* ClutterBlurEffect:
*
- * ClutterBlurEffect is an opaque structure
+ * #ClutterBlurEffect is an opaque structure
* whose members cannot be accessed directly
*
* Since: 1.4
@@ -48,8 +48,10 @@ G_BEGIN_DECLS
typedef struct _ClutterBlurEffect ClutterBlurEffect;
typedef struct _ClutterBlurEffectClass ClutterBlurEffectClass;
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_blur_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterEffect *clutter_blur_effect_new (void);
G_END_DECLS
diff --git a/clutter/clutter-box-layout.c b/clutter/clutter-box-layout.c
index a87b32bf2..20b2628a1 100644
--- a/clutter/clutter-box-layout.c
+++ b/clutter/clutter-box-layout.c
@@ -31,30 +31,16 @@
*
* The #ClutterBoxLayout is a #ClutterLayoutManager implementing the
* following layout policy:
- *
- * all children are arranged on a single
- * line;
- * the axis used is controlled by the
- * #ClutterBoxLayout:orientation property;
- * the order of the packing is determined by the
- * #ClutterBoxLayout:pack-start boolean property;
- * each child will be allocated to its natural
- * size or, if #ClutterActor:x-expand/#ClutterActor:y-expand
- * is set, the available size;
- * honours the #ClutterActor's #ClutterActor:x-align
- * and #ClutterActor:y-align properties to fill the available
- * size;
- * if the #ClutterBoxLayout:homogeneous boolean property
- * is set, then all widgets will get the same size, ignoring expand
- * settings and the preferred sizes
- *
*
- *
- * Box layout
- * The image shows a #ClutterBoxLayout with the
- * #ClutterBoxLayout:vertical property set to %FALSE.
- *
- *
+ * - all children are arranged on a single line
+ * - the axis used is controlled by the #ClutterBoxLayout:orientation property
+ * - the order of the packing is determined by the #ClutterBoxLayout:pack-start boolean property
+ * - each child will be allocated to its natural size or, if #ClutterActor:x-expand or
+ * #ClutterActor:y-expand are set, the available size
+ * - honours the #ClutterActor's #ClutterActor:x-align and #ClutterActor:y-align properties
+ * to fill the available size
+ * - if the #ClutterBoxLayout:homogeneous boolean propert is set, then all widgets will
+ * get the same size, ignoring expand settings and the preferred sizes
*
* It is possible to control the spacing between children of a
* #ClutterBoxLayout by using clutter_box_layout_set_spacing().
@@ -85,8 +71,6 @@
#define CLUTTER_BOX_CHILD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_BOX_CHILD, ClutterBoxChild))
#define CLUTTER_IS_BOX_CHILD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_BOX_CHILD))
-#define CLUTTER_BOX_LAYOUT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_BOX_LAYOUT, ClutterBoxLayoutPrivate))
-
typedef struct _ClutterBoxChild ClutterBoxChild;
typedef struct _ClutterLayoutMetaClass ClutterBoxChildClass;
@@ -153,11 +137,11 @@ GType clutter_box_child_get_type (void);
G_DEFINE_TYPE (ClutterBoxChild,
clutter_box_child,
- CLUTTER_TYPE_LAYOUT_META);
+ CLUTTER_TYPE_LAYOUT_META)
-G_DEFINE_TYPE (ClutterBoxLayout,
- clutter_box_layout,
- CLUTTER_TYPE_LAYOUT_MANAGER);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBoxLayout,
+ clutter_box_layout,
+ CLUTTER_TYPE_LAYOUT_MANAGER)
typedef struct _RequestedSize
@@ -979,7 +963,7 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
gint extra;
gint n_extra_widgets = 0; /* Number of widgets that receive 1 extra px */
gint x = 0, y = 0, i;
- gint child_size;
+ gfloat child_size;
count_expand_children (layout, container, &nvis_children, &nexpand_children);
@@ -1102,7 +1086,7 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
if (priv->orientation == CLUTTER_ORIENTATION_VERTICAL)
{
child_allocation.x1 = box->x1;
- child_allocation.x2 = MAX (1.0, box->x2 - box->x1);
+ child_allocation.x2 = MAX (1.0, box->x2);
if (priv->is_pack_start)
y = box->y2 - box->y1;
else
@@ -1111,7 +1095,7 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
else
{
child_allocation.y1 = box->y1;
- child_allocation.y2 = MAX (1.0, box->y2 - box->y1);
+ child_allocation.y2 = MAX (1.0, box->y2);
if (priv->is_pack_start)
x = box->x2 - box->x1;
else
@@ -1166,7 +1150,7 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
if (priv->orientation == CLUTTER_ORIENTATION_VERTICAL)
{
if (clutter_actor_needs_expand (child, priv->orientation) ||
- box_child->y_fill)
+ box_child->expand)
{
child_allocation.y1 = y;
child_allocation.y2 = child_allocation.y1 + MAX (1.0, child_size);
@@ -1192,7 +1176,7 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
else /* CLUTTER_ORIENTATION_HORIZONTAL */
{
if (clutter_actor_needs_expand (child, priv->orientation) ||
- box_child->x_fill)
+ box_child->expand)
{
child_allocation.x1 = x;
child_allocation.x2 = child_allocation.x1 + MAX (1.0, child_size);
@@ -1219,10 +1203,8 @@ clutter_box_layout_allocate (ClutterLayoutManager *layout,
{
gfloat width = child_allocation.x2 - child_allocation.x1;
- child_allocation.x1 = box->x2 - box->x1
- - child_allocation.x1
- - (child_allocation.x2 - child_allocation.x1);
- child_allocation.x2 = child_allocation.x1 + width;
+ child_allocation.x2 = box->x1 + (box->x2 - child_allocation.x1);
+ child_allocation.x1 = child_allocation.x2 - width;
}
}
@@ -1348,8 +1330,6 @@ clutter_box_layout_class_init (ClutterBoxLayoutClass *klass)
layout_class->set_container = clutter_box_layout_set_container;
layout_class->get_child_meta_type = clutter_box_layout_get_child_meta_type;
- g_type_class_add_private (klass, sizeof (ClutterBoxLayoutPrivate));
-
/**
* ClutterBoxLayout:vertical:
*
@@ -1503,20 +1483,18 @@ clutter_box_layout_class_init (ClutterBoxLayoutClass *klass)
}
static void
-clutter_box_layout_init (ClutterBoxLayout *layout)
+clutter_box_layout_init (ClutterBoxLayout *self)
{
- ClutterBoxLayoutPrivate *priv;
+ self->priv = clutter_box_layout_get_instance_private (self);
- layout->priv = priv = CLUTTER_BOX_LAYOUT_GET_PRIVATE (layout);
+ self->priv->orientation = CLUTTER_ORIENTATION_HORIZONTAL;
+ self->priv->is_homogeneous = FALSE;
+ self->priv->is_pack_start = FALSE;
+ self->priv->spacing = 0;
- priv->orientation = CLUTTER_ORIENTATION_HORIZONTAL;
- priv->is_homogeneous = FALSE;
- priv->is_pack_start = FALSE;
- priv->spacing = 0;
-
- priv->use_animations = FALSE;
- priv->easing_mode = CLUTTER_EASE_OUT_CUBIC;
- priv->easing_duration = 500;
+ self->priv->use_animations = FALSE;
+ self->priv->easing_mode = CLUTTER_EASE_OUT_CUBIC;
+ self->priv->easing_duration = 500;
}
/**
diff --git a/clutter/clutter-box-layout.h b/clutter/clutter-box-layout.h
index 32daca861..3c5547ea9 100644
--- a/clutter/clutter-box-layout.h
+++ b/clutter/clutter-box-layout.h
@@ -77,8 +77,10 @@ struct _ClutterBoxLayoutClass
ClutterLayoutManagerClass parent_class;
};
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_box_layout_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
ClutterLayoutManager * clutter_box_layout_new (void);
CLUTTER_AVAILABLE_IN_1_12
@@ -87,14 +89,20 @@ void clutter_box_layout_set_orientation (ClutterBoxLayou
CLUTTER_AVAILABLE_IN_1_12
ClutterOrientation clutter_box_layout_get_orientation (ClutterBoxLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_box_layout_set_spacing (ClutterBoxLayout *layout,
guint spacing);
+CLUTTER_AVAILABLE_IN_1_2
guint clutter_box_layout_get_spacing (ClutterBoxLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_box_layout_set_homogeneous (ClutterBoxLayout *layout,
gboolean homogeneous);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_box_layout_get_homogeneous (ClutterBoxLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_box_layout_set_pack_start (ClutterBoxLayout *layout,
gboolean pack_start);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_box_layout_get_pack_start (ClutterBoxLayout *layout);
CLUTTER_DEPRECATED_IN_1_12_FOR(clutter_box_layout_set_orientation)
@@ -103,6 +111,7 @@ void clutter_box_layout_set_vertical (ClutterBoxLayou
CLUTTER_DEPRECATED_IN_1_12_FOR(clutter_box_layout_get_orientation)
gboolean clutter_box_layout_get_vertical (ClutterBoxLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_box_layout_pack (ClutterBoxLayout *layout,
ClutterActor *actor,
gboolean expand,
diff --git a/clutter/clutter-brightness-contrast-effect.h b/clutter/clutter-brightness-contrast-effect.h
index b4b3a4007..f7a204f49 100644
--- a/clutter/clutter-brightness-contrast-effect.h
+++ b/clutter/clutter-brightness-contrast-effect.h
@@ -41,7 +41,7 @@ G_BEGIN_DECLS
/**
* ClutterBrightnessContrastEffect:
*
- * ClutterBrightnessContrastEffect is an opaque structure
+ * #ClutterBrightnessContrastEffect is an opaque structure
* whose members cannot be directly accessed
*
* Since: 1.10
@@ -49,27 +49,35 @@ G_BEGIN_DECLS
typedef struct _ClutterBrightnessContrastEffect ClutterBrightnessContrastEffect;
typedef struct _ClutterBrightnessContrastEffectClass ClutterBrightnessContrastEffectClass;
+CLUTTER_AVAILABLE_IN_1_10
GType clutter_brightness_contrast_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_10
ClutterEffect * clutter_brightness_contrast_effect_new (void);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_brightness_contrast_effect_set_brightness_full (ClutterBrightnessContrastEffect *effect,
float red,
float green,
float blue);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_brightness_contrast_effect_set_brightness (ClutterBrightnessContrastEffect *effect,
float brightness);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_brightness_contrast_effect_get_brightness (ClutterBrightnessContrastEffect *effect,
float *red,
float *green,
float *blue);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_brightness_contrast_effect_set_contrast_full (ClutterBrightnessContrastEffect *effect,
float red,
float green,
float blue);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_brightness_contrast_effect_set_contrast (ClutterBrightnessContrastEffect *effect,
float contrast);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_brightness_contrast_effect_get_contrast (ClutterBrightnessContrastEffect *effect,
float *red,
float *green,
diff --git a/clutter/clutter-cairo.h b/clutter/clutter-cairo.h
index f6bd9d85f..993b3e1b4 100644
--- a/clutter/clutter-cairo.h
+++ b/clutter/clutter-cairo.h
@@ -50,7 +50,9 @@ G_BEGIN_DECLS
#define CLUTTER_CAIRO_FORMAT_ARGB32 (COGL_PIXEL_FORMAT_ARGB_8888_PRE)
#endif
+CLUTTER_AVAILABLE_IN_1_12
void clutter_cairo_clear (cairo_t *cr);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_cairo_set_source_color (cairo_t *cr,
const ClutterColor *color);
diff --git a/clutter/clutter-canvas.c b/clutter/clutter-canvas.c
index 43c0e7524..e75375404 100644
--- a/clutter/clutter-canvas.c
+++ b/clutter/clutter-canvas.c
@@ -36,13 +36,8 @@
* that can be used to draw. #ClutterCanvas will emit the #ClutterCanvas::draw
* signal when invalidated using clutter_content_invalidate().
*
- *
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
+ * See [canvas.c](https://git.gnome.org/browse/clutter/tree/examples/canvas.c?h=clutter-1.18)
+ * for an example of how to use #ClutterCanvas.
*
* #ClutterCanvas is available since Clutter 1.10.
*/
@@ -62,10 +57,12 @@
#include "clutter-cairo.h"
#include "clutter-color.h"
#include "clutter-content-private.h"
+#include "clutter-debug.h"
#include "clutter-marshal.h"
#include "clutter-paint-node.h"
#include "clutter-paint-nodes.h"
#include "clutter-private.h"
+#include "clutter-settings.h"
struct _ClutterCanvasPrivate
{
@@ -74,7 +71,13 @@ struct _ClutterCanvasPrivate
int width;
int height;
+ CoglTexture *texture;
+ gboolean dirty;
+
CoglBitmap *buffer;
+
+ int scale_factor;
+ guint scale_factor_set : 1;
};
enum
@@ -83,6 +86,8 @@ enum
PROP_WIDTH,
PROP_HEIGHT,
+ PROP_SCALE_FACTOR,
+ PROP_SCALE_FACTOR_SET,
LAST_PROP
};
@@ -101,6 +106,7 @@ static guint canvas_signals[LAST_SIGNAL] = { 0, };
static void clutter_content_iface_init (ClutterContentIface *iface);
G_DEFINE_TYPE_WITH_CODE (ClutterCanvas, clutter_canvas, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterCanvas)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT,
clutter_content_iface_init))
@@ -137,6 +143,8 @@ clutter_canvas_finalize (GObject *gobject)
priv->buffer = NULL;
}
+ g_clear_pointer (&priv->texture, cogl_object_unref);
+
G_OBJECT_CLASS (clutter_canvas_parent_class)->finalize (gobject);
}
@@ -151,19 +159,34 @@ clutter_canvas_set_property (GObject *gobject,
switch (prop_id)
{
case PROP_WIDTH:
- if (priv->width != g_value_get_int (value))
- {
- priv->width = g_value_get_int (value);
- clutter_content_invalidate (CLUTTER_CONTENT (gobject));
- }
+ {
+ gint new_size = g_value_get_int (value);
+
+ if (priv->width != new_size)
+ {
+ priv->width = new_size;
+
+ clutter_content_invalidate (CLUTTER_CONTENT (gobject));
+ }
+ }
break;
case PROP_HEIGHT:
- if (priv->height != g_value_get_int (value))
- {
- priv->height = g_value_get_int (value);
- clutter_content_invalidate (CLUTTER_CONTENT (gobject));
- }
+ {
+ gint new_size = g_value_get_int (value);
+
+ if (priv->height != new_size)
+ {
+ priv->height = new_size;
+
+ clutter_content_invalidate (CLUTTER_CONTENT (gobject));
+ }
+ }
+ break;
+
+ case PROP_SCALE_FACTOR:
+ clutter_canvas_set_scale_factor (CLUTTER_CANVAS (gobject),
+ g_value_get_int (value));
break;
default:
@@ -190,6 +213,17 @@ clutter_canvas_get_property (GObject *gobject,
g_value_set_int (value, priv->height);
break;
+ case PROP_SCALE_FACTOR:
+ if (priv->scale_factor_set)
+ g_value_set_int (value, priv->scale_factor);
+ else
+ g_value_set_int (value, -1);
+ break;
+
+ case PROP_SCALE_FACTOR_SET:
+ g_value_set_boolean (value, priv->scale_factor_set);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -201,8 +235,6 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterCanvasPrivate));
-
/**
* ClutterCanvas:width:
*
@@ -235,6 +267,47 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
+ /**
+ * ClutterCanvas:scale-factor-set:
+ *
+ * Whether the #ClutterCanvas:scale-factor property is set.
+ *
+ * If the #ClutterCanvas:scale-factor-set property is %FALSE
+ * then #ClutterCanvas will use the #ClutterSettings:window-scaling-factor
+ * property.
+ *
+ * Since: 1.18
+ */
+ obj_props[PROP_SCALE_FACTOR_SET] =
+ g_param_spec_boolean ("scale-factor-set",
+ P_("Scale Factor Set"),
+ P_("Whether the scale-factor property is set"),
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * ClutterCanvas:scale-factor:
+ *
+ * The scaling factor to be applied to the Cairo surface used for
+ * drawing.
+ *
+ * If #ClutterCanvas:scale-factor is set to a negative value, the
+ * value of the #ClutterSettings:window-scaling-factor property is
+ * used instead.
+ *
+ * Use #ClutterCanvas:scale-factor-set to check if the scale factor
+ * is set.
+ *
+ * Since: 1.18
+ */
+ obj_props[PROP_SCALE_FACTOR] =
+ g_param_spec_int ("scale-factor",
+ P_("Scale Factor"),
+ P_("The scaling factor for the surface"),
+ -1, 1000,
+ -1,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
/**
* ClutterCanvas::draw:
* @canvas: the #ClutterCanvas that emitted the signal
@@ -276,11 +349,11 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
static void
clutter_canvas_init (ClutterCanvas *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_CANVAS,
- ClutterCanvasPrivate);
+ self->priv = clutter_canvas_get_instance_private (self);
self->priv->width = -1;
self->priv->height = -1;
+ self->priv->scale_factor = -1;
}
static void
@@ -289,21 +362,26 @@ clutter_canvas_paint_content (ClutterContent *content,
ClutterPaintNode *root)
{
ClutterCanvas *self = CLUTTER_CANVAS (content);
+ ClutterCanvasPrivate *priv = self->priv;
ClutterPaintNode *node;
- CoglTexture *texture;
ClutterActorBox box;
ClutterColor color;
guint8 paint_opacity;
ClutterScalingFilter min_f, mag_f;
ClutterContentRepeat repeat;
- if (self->priv->buffer == NULL)
+ if (priv->buffer == NULL)
return;
- texture = cogl_texture_new_from_bitmap (self->priv->buffer,
- COGL_TEXTURE_NO_SLICING,
- CLUTTER_CAIRO_FORMAT_ARGB32);
- if (texture == NULL)
+ if (priv->texture && priv->dirty)
+ g_clear_pointer (&priv->texture, cogl_object_unref);
+
+ if (!priv->texture)
+ priv->texture = cogl_texture_new_from_bitmap (self->priv->buffer,
+ COGL_TEXTURE_NO_SLICING,
+ CLUTTER_CAIRO_FORMAT_ARGB32);
+
+ if (priv->texture == NULL)
return;
clutter_actor_get_content_box (actor, &box);
@@ -311,13 +389,12 @@ clutter_canvas_paint_content (ClutterContent *content,
clutter_actor_get_content_scaling_filters (actor, &min_f, &mag_f);
repeat = clutter_actor_get_content_repeat (actor);
- color.red = paint_opacity;
- color.green = paint_opacity;
- color.blue = paint_opacity;
+ color.red = 255;
+ color.green = 255;
+ color.blue = 255;
color.alpha = paint_opacity;
- node = clutter_texture_node_new (texture, &color, min_f, mag_f);
- cogl_object_unref (texture);
+ node = clutter_texture_node_new (priv->texture, &color, min_f, mag_f);
clutter_paint_node_set_name (node, "Canvas");
@@ -328,10 +405,10 @@ clutter_canvas_paint_content (ClutterContent *content,
float t_w = 1.f, t_h = 1.f;
if ((repeat & CLUTTER_REPEAT_X_AXIS) != FALSE)
- t_w = (box.x2 - box.x1) / cogl_texture_get_width (texture);
+ t_w = (box.x2 - box.x1) / cogl_texture_get_width (priv->texture);
if ((repeat & CLUTTER_REPEAT_Y_AXIS) != FALSE)
- t_h = (box.y2 - box.y1) / cogl_texture_get_height (texture);
+ t_h = (box.y2 - box.y1) / cogl_texture_get_height (priv->texture);
clutter_paint_node_add_texture_rectangle (node, &box,
0.f, 0.f,
@@ -340,29 +417,50 @@ clutter_canvas_paint_content (ClutterContent *content,
clutter_paint_node_add_child (root, node);
clutter_paint_node_unref (node);
+
+ priv->dirty = FALSE;
}
static void
clutter_canvas_emit_draw (ClutterCanvas *self)
{
ClutterCanvasPrivate *priv = self->priv;
+ int real_width, real_height;
cairo_surface_t *surface;
gboolean mapped_buffer;
unsigned char *data;
CoglBuffer *buffer;
+ int window_scale = 1;
gboolean res;
cairo_t *cr;
g_assert (priv->width > 0 && priv->width > 0);
+ priv->dirty = TRUE;
+
+ if (priv->scale_factor_set)
+ window_scale = priv->scale_factor;
+ else
+ g_object_get (clutter_settings_get_default (),
+ "window-scaling-factor", &window_scale,
+ NULL);
+
+ real_width = priv->width * window_scale;
+ real_height = priv->height * window_scale;
+
+ CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d (real: %d x %d, scale: %d)",
+ priv->width, priv->height,
+ real_width, real_height,
+ window_scale);
+
if (priv->buffer == NULL)
{
CoglContext *ctx;
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
priv->buffer = cogl_bitmap_new_with_size (ctx,
- priv->width,
- priv->height,
+ real_width,
+ real_height,
CLUTTER_CAIRO_FORMAT_ARGB32);
}
@@ -382,20 +480,24 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
surface = cairo_image_surface_create_for_data (data,
CAIRO_FORMAT_ARGB32,
- priv->width,
- priv->height,
+ real_width,
+ real_height,
bitmap_stride);
mapped_buffer = TRUE;
}
else
{
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- priv->width,
- priv->height);
+ real_width,
+ real_height);
mapped_buffer = FALSE;
}
+#ifdef HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE
+ cairo_surface_set_device_scale (surface, window_scale, window_scale);
+#endif
+
self->priv->cr = cr = cairo_create (surface);
g_signal_emit (self, canvas_signals[DRAW], 0,
@@ -494,28 +596,14 @@ clutter_canvas_new (void)
return g_object_new (CLUTTER_TYPE_CANVAS, NULL);
}
-/**
- * clutter_canvas_set_size:
- * @canvas: a #ClutterCanvas
- * @width: the width of the canvas, in pixels
- * @height: the height of the canvas, in pixels
- *
- * Sets the size of the @canvas.
- *
- * This function will cause the @canvas to be invalidated.
- *
- * Since: 1.10
- */
-void
-clutter_canvas_set_size (ClutterCanvas *canvas,
- int width,
- int height)
+static gboolean
+clutter_canvas_invalidate_internal (ClutterCanvas *canvas,
+ int width,
+ int height)
{
- GObject *obj;
gboolean width_changed = FALSE, height_changed = FALSE;
-
- g_return_if_fail (CLUTTER_IS_CANVAS (canvas));
- g_return_if_fail (width >= -1 && height >= -1);
+ gboolean res = FALSE;
+ GObject *obj;
obj = G_OBJECT (canvas);
@@ -538,7 +626,126 @@ clutter_canvas_set_size (ClutterCanvas *canvas,
}
if (width_changed || height_changed)
- clutter_content_invalidate (CLUTTER_CONTENT (canvas));
+ {
+ clutter_content_invalidate (CLUTTER_CONTENT (canvas));
+ res = TRUE;
+ }
g_object_thaw_notify (obj);
+
+ return res;
+}
+
+/**
+ * clutter_canvas_set_size:
+ * @canvas: a #ClutterCanvas
+ * @width: the width of the canvas, in pixels
+ * @height: the height of the canvas, in pixels
+ *
+ * Sets the size of the @canvas, and invalidates the content.
+ *
+ * This function will cause the @canvas to be invalidated only
+ * if the size of the canvas surface has changed.
+ *
+ * If you want to invalidate the contents of the @canvas when setting
+ * the size, you can use the return value of the function to conditionally
+ * call clutter_content_invalidate():
+ *
+ * |[
+ * if (!clutter_canvas_set_size (canvas, width, height))
+ * clutter_content_invalidate (CLUTTER_CONTENT (canvas));
+ * ]|
+ *
+ * Return value: this function returns %TRUE if the size change
+ * caused a content invalidation, and %FALSE otherwise
+ *
+ * Since: 1.10
+ */
+gboolean
+clutter_canvas_set_size (ClutterCanvas *canvas,
+ int width,
+ int height)
+{
+ g_return_val_if_fail (CLUTTER_IS_CANVAS (canvas), FALSE);
+ g_return_val_if_fail (width >= -1 && height >= -1, FALSE);
+
+ return clutter_canvas_invalidate_internal (canvas, width, height);
+}
+
+/**
+ * clutter_canvas_set_scale_factor:
+ * @canvas: a #ClutterCanvas
+ * @scale: the scale factor, or -1 for the default
+ *
+ * Sets the scaling factor for the Cairo surface used by @canvas.
+ *
+ * This function should rarely be used.
+ *
+ * The default scaling factor of a #ClutterCanvas content uses the
+ * #ClutterSettings:window-scaling-factor property, which is set by
+ * the windowing system. By using this function it is possible to
+ * override that setting.
+ *
+ * Changing the scale factor will invalidate the @canvas.
+ *
+ * Since: 1.18
+ */
+void
+clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
+ int scale)
+{
+ ClutterCanvasPrivate *priv;
+ GObject *obj;
+
+ g_return_if_fail (CLUTTER_IS_CANVAS (canvas));
+ g_return_if_fail (scale != 0);
+
+ priv = canvas->priv;
+
+ if (scale < 0)
+ {
+ if (!priv->scale_factor_set)
+ return;
+
+ priv->scale_factor_set = FALSE;
+ priv->scale_factor = -1;
+ }
+ else
+ {
+ if (priv->scale_factor_set && priv->scale_factor == scale)
+ return;
+
+ priv->scale_factor_set = TRUE;
+ priv->scale_factor = scale;
+ }
+
+ clutter_content_invalidate (CLUTTER_CONTENT (canvas));
+
+ obj = G_OBJECT (canvas);
+
+ g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR]);
+ g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR_SET]);
+}
+
+/**
+ * clutter_canvas_get_scale_factor:
+ * @canvas: a #ClutterCanvas
+ *
+ * Retrieves the scaling factor of @canvas, as set using
+ * clutter_canvas_set_scale_factor().
+ *
+ * Return value: the scaling factor, or -1 if the @canvas
+ * uses the default from #ClutterSettings
+ *
+ * Since: 1.18
+ */
+int
+clutter_canvas_get_scale_factor (ClutterCanvas *canvas)
+{
+ g_return_val_if_fail (CLUTTER_IS_CANVAS (canvas), -1);
+
+ if (!canvas->priv->scale_factor_set)
+ return -1;
+
+ return canvas->priv->scale_factor;
}
diff --git a/clutter/clutter-canvas.h b/clutter/clutter-canvas.h
index c0c27fdee..a1ab28a5f 100644
--- a/clutter/clutter-canvas.h
+++ b/clutter/clutter-canvas.h
@@ -47,7 +47,7 @@ typedef struct _ClutterCanvasClass ClutterCanvasClass;
/**
* ClutterCanvas:
*
- * The ClutterCanvas structure contains
+ * The #ClutterCanvas structure contains
* private data and should only be accessed using the provided
* API.
*
@@ -65,7 +65,7 @@ struct _ClutterCanvas
* ClutterCanvasClass:
* @draw: class handler for the #ClutterCanvas::draw signal
*
- * The ClutterCanvasClass structure contains
+ * The #ClutterCanvasClass structure contains
* private data.
*
* Since: 1.10
@@ -89,11 +89,17 @@ CLUTTER_AVAILABLE_IN_1_10
GType clutter_canvas_get_type (void) G_GNUC_CONST;
CLUTTER_AVAILABLE_IN_1_10
-ClutterContent * clutter_canvas_new (void);
+ClutterContent * clutter_canvas_new (void);
CLUTTER_AVAILABLE_IN_1_10
-void clutter_canvas_set_size (ClutterCanvas *canvas,
- int width,
- int height);
+gboolean clutter_canvas_set_size (ClutterCanvas *canvas,
+ int width,
+ int height);
+
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
+ int scale);
+CLUTTER_AVAILABLE_IN_1_18
+int clutter_canvas_get_scale_factor (ClutterCanvas *canvas);
G_END_DECLS
diff --git a/clutter/clutter-child-meta.h b/clutter/clutter-child-meta.h
index 0a249f07c..7e785a907 100644
--- a/clutter/clutter-child-meta.h
+++ b/clutter/clutter-child-meta.h
@@ -63,14 +63,14 @@ typedef struct _ClutterChildMetaClass ClutterChildMetaClass;
* static void
* my_container_iface_init (ClutterContainerIface *iface)
* {
- * /* set the rest of the #ClutterContainer vtable */
+ * // set the rest of the #ClutterContainer vtable
*
* container_iface->child_meta_type = MY_TYPE_CHILD_META;
* }
* ]|
*
* This will automatically create a #ClutterChildMeta of type
- * MY_TYPE_CHILD_META for every actor that is added to the container.
+ * `MY_TYPE_CHILD_META` for every actor that is added to the container.
*
* The child data for an actor can be retrieved using the
* clutter_container_get_child_meta() function.
@@ -81,9 +81,8 @@ typedef struct _ClutterChildMetaClass ClutterChildMetaClass;
*
* You can provide hooks for your own storage as well as control the
* instantiation by overriding the #ClutterContainerIface virtual functions
- * create_child_meta,
- * destroy_child_meta,
- * and get_child_meta.
+ * #ClutterContainerIface.create_child_meta(), #ClutterContainerIface.destroy_child_meta(),
+ * and #ClutterContainerIface.get_child_meta().
*
* Since: 0.8
*/
@@ -110,10 +109,13 @@ struct _ClutterChildMetaClass
GObjectClass parent_class;
};
-GType clutter_child_meta_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
+GType clutter_child_meta_get_type (void) G_GNUC_CONST;
-ClutterContainer *clutter_child_meta_get_container (ClutterChildMeta *data);
-ClutterActor *clutter_child_meta_get_actor (ClutterChildMeta *data);
+CLUTTER_AVAILABLE_IN_ALL
+ClutterContainer * clutter_child_meta_get_container (ClutterChildMeta *data);
+CLUTTER_AVAILABLE_IN_ALL
+ClutterActor * clutter_child_meta_get_actor (ClutterChildMeta *data);
G_END_DECLS
diff --git a/clutter/clutter-click-action.c b/clutter/clutter-click-action.c
index 3fe164cfa..92aba0b70 100644
--- a/clutter/clutter-click-action.c
+++ b/clutter/clutter-click-action.c
@@ -150,7 +150,7 @@ enum
static guint click_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterClickAction, clutter_click_action, CLUTTER_TYPE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterClickAction, clutter_click_action, CLUTTER_TYPE_ACTION)
/* forward declaration */
static gboolean on_captured_event (ClutterActor *stage,
@@ -534,16 +534,43 @@ clutter_click_action_get_property (GObject *gobject,
}
}
+static void
+clutter_click_action_dispose (GObject *gobject)
+{
+ ClutterClickActionPrivate *priv = CLUTTER_CLICK_ACTION (gobject)->priv;
+
+ if (priv->event_id)
+ {
+ g_signal_handler_disconnect (clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (gobject)),
+ priv->event_id);
+ priv->event_id = 0;
+ }
+
+ if (priv->capture_id)
+ {
+ g_signal_handler_disconnect (priv->stage, priv->capture_id);
+ priv->capture_id = 0;
+ }
+
+ 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);
+}
+
+
static void
clutter_click_action_class_init (ClutterClickActionClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterClickActionPrivate));
-
meta_class->set_actor = clutter_click_action_set_actor;
+ gobject_class->dispose = clutter_click_action_dispose;
gobject_class->set_property = clutter_click_action_set_property;
gobject_class->get_property = clutter_click_action_get_property;
@@ -680,9 +707,7 @@ clutter_click_action_class_init (ClutterClickActionClass *klass)
static void
clutter_click_action_init (ClutterClickAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_CLICK_ACTION,
- ClutterClickActionPrivate);
-
+ self->priv = clutter_click_action_get_instance_private (self);
self->priv->long_press_threshold = -1;
self->priv->long_press_duration = -1;
}
diff --git a/clutter/clutter-click-action.h b/clutter/clutter-click-action.h
index 36c572731..bd8d3e24c 100644
--- a/clutter/clutter-click-action.h
+++ b/clutter/clutter-click-action.h
@@ -51,7 +51,7 @@ typedef struct _ClutterClickActionClass ClutterClickActionClass;
/**
* ClutterClickAction:
*
- * The ClutterClickAction structure contains
+ * The #ClutterClickAction structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.4
@@ -69,7 +69,7 @@ struct _ClutterClickAction
* @clicked: class handler for the #ClutterClickAction::clicked signal
* @long_press: class handler for the #ClutterClickAction::long-press signal
*
- * The ClutterClickActionClass structure
+ * The #ClutterClickActionClass structure
* contains only private data
*
* Since: 1.4
@@ -97,16 +97,22 @@ struct _ClutterClickActionClass
void (* _clutter_click_action7) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_click_action_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterAction * clutter_click_action_new (void);
+CLUTTER_AVAILABLE_IN_1_4
guint clutter_click_action_get_button (ClutterClickAction *action);
+CLUTTER_AVAILABLE_IN_1_4
ClutterModifierType clutter_click_action_get_state (ClutterClickAction *action);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_click_action_get_coords (ClutterClickAction *action,
gfloat *press_x,
gfloat *press_y);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_click_action_release (ClutterClickAction *action);
G_END_DECLS
diff --git a/clutter/clutter-clone.c b/clutter/clutter-clone.c
index 1f94ab2b7..3bcd0c387 100644
--- a/clutter/clutter-clone.c
+++ b/clutter/clutter-clone.c
@@ -30,9 +30,9 @@
*
* #ClutterClone can be used to efficiently clone any other actor.
*
- * This is different from clutter_texture_new_from_actor()
- * which requires support for FBOs in the underlying GL
- * implementation.
+ * Unlike clutter_texture_new_from_actor(), #ClutterClone does not require
+ * the presence of support for FBOs in the underlying GL or GLES
+ * implementation.
*
* #ClutterClone is available since Clutter 1.0
*/
@@ -50,7 +50,12 @@
#include "cogl/cogl.h"
-G_DEFINE_TYPE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR);
+struct _ClutterClonePrivate
+{
+ ClutterActor *clone_source;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR)
enum
{
@@ -63,13 +68,6 @@ enum
static GParamSpec *obj_props[PROP_LAST];
-#define CLUTTER_CLONE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_CLONE, ClutterClonePrivate))
-
-struct _ClutterClonePrivate
-{
- ClutterActor *clone_source;
-};
-
static void clutter_clone_set_source_internal (ClutterClone *clone,
ClutterActor *source);
static void
@@ -319,8 +317,6 @@ clutter_clone_class_init (ClutterCloneClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
- g_type_class_add_private (gobject_class, sizeof (ClutterClonePrivate));
-
actor_class->apply_transform = clutter_clone_apply_transform;
actor_class->paint = clutter_clone_paint;
actor_class->get_paint_volume = clutter_clone_get_paint_volume;
@@ -354,11 +350,7 @@ clutter_clone_class_init (ClutterCloneClass *klass)
static void
clutter_clone_init (ClutterClone *self)
{
- ClutterClonePrivate *priv;
-
- self->priv = priv = CLUTTER_CLONE_GET_PRIVATE (self);
-
- priv->clone_source = NULL;
+ self->priv = clutter_clone_get_instance_private (self);
}
/**
diff --git a/clutter/clutter-clone.h b/clutter/clutter-clone.h
index 14fef88f2..24958deb9 100644
--- a/clutter/clutter-clone.h
+++ b/clutter/clutter-clone.h
@@ -78,12 +78,16 @@ struct _ClutterCloneClass
void (*_clutter_actor_clone4) (void);
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_clone_get_type (void) G_GNUC_CONST;
-ClutterActor *clutter_clone_new (ClutterActor *source);
-void clutter_clone_set_source (ClutterClone *self,
- ClutterActor *source);
-ClutterActor *clutter_clone_get_source (ClutterClone *self);
+CLUTTER_AVAILABLE_IN_1_0
+ClutterActor * clutter_clone_new (ClutterActor *source);
+CLUTTER_AVAILABLE_IN_1_0
+void clutter_clone_set_source (ClutterClone *self,
+ ClutterActor *source);
+CLUTTER_AVAILABLE_IN_1_0
+ClutterActor * clutter_clone_get_source (ClutterClone *self);
G_END_DECLS
diff --git a/clutter/clutter-color.c b/clutter/clutter-color.c
index dd49ed3d7..96dde9482 100644
--- a/clutter/clutter-color.c
+++ b/clutter/clutter-color.c
@@ -624,28 +624,12 @@ parse_hsla (ClutterColor *color,
*
* The format of @str can be either one of:
*
- *
- *
- * a standard name (as taken from the X11 rgb.txt file)
- *
- *
- * an hexadecimal value in the form: #rgb,
- * #rrggbb, #rgba or
- * #rrggbbaa
- *
- *
- * a RGB color in the form: rgb(r, g, b)
- *
- *
- * a RGB color in the form: rgba(r, g, b, a)
- *
- *
- * a HSL color in the form: hsl(h, s, l)
- *
- *
- * a HSL color in the form: hsla(h, s, l, a)
- *
- *
+ * - a standard name (as taken from the X11 rgb.txt file)
+ * - an hexadecimal value in the form: `#rgb`, `#rrggbb`, `#rgba`, or `#rrggbbaa`
+ * - a RGB color in the form: `rgb(r, g, b)`
+ * - a RGB color in the form: `rgba(r, g, b, a)`
+ * - a HSL color in the form: `hsl(h, s, l)`
+ * -a HSL color in the form: `hsla(h, s, l, a)`
*
* where 'r', 'g', 'b' and 'a' are (respectively) the red, green, blue color
* intensities and the opacity. The 'h', 's' and 'l' are (respectively) the
@@ -656,9 +640,9 @@ parse_hsla (ClutterColor *color,
* and 100%; the percentages require the '%' character. The 'a' value, if
* specified, can only be a floating point value between 0.0 and 1.0.
*
- * In the hls() and hlsa() formats, the 'h' value (hue) it's an angle between
+ * In the hls() and hlsa() formats, the 'h' value (hue) is an angle between
* 0 and 360.0 degrees; the 'l' and 's' values (luminance and saturation) are
- * a floating point value between 0.0 and 1.0. The 'a' value, if specified,
+ * percentage values in the range between 0% and 100%. The 'a' value, if specified,
* can only be a floating point value between 0.0 and 1.0.
*
* Whitespace inside the definitions is ignored; no leading whitespace
diff --git a/clutter/clutter-color.h b/clutter/clutter-color.h
index 393eee4b7..cd8e5ccd5 100644
--- a/clutter/clutter-color.h
+++ b/clutter/clutter-color.h
@@ -68,56 +68,76 @@ struct _ClutterColor
*/
#define CLUTTER_COLOR_INIT(r,g,b,a) { (r), (g), (b), (a) }
-GType clutter_color_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
+GType clutter_color_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterColor *clutter_color_new (guint8 red,
guint8 green,
guint8 blue,
guint8 alpha);
+CLUTTER_AVAILABLE_IN_1_12
ClutterColor *clutter_color_alloc (void);
+CLUTTER_AVAILABLE_IN_1_12
ClutterColor *clutter_color_init (ClutterColor *color,
guint8 red,
guint8 green,
guint8 blue,
guint8 alpha);
+CLUTTER_AVAILABLE_IN_ALL
ClutterColor *clutter_color_copy (const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_free (ClutterColor *color);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_add (const ClutterColor *a,
const ClutterColor *b,
ClutterColor *result);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_subtract (const ClutterColor *a,
const ClutterColor *b,
ClutterColor *result);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_lighten (const ClutterColor *color,
ClutterColor *result);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_darken (const ClutterColor *color,
ClutterColor *result);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_shade (const ClutterColor *color,
gdouble factor,
ClutterColor *result);
+CLUTTER_AVAILABLE_IN_ALL
gchar * clutter_color_to_string (const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_color_from_string (ClutterColor *color,
const gchar *str);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_to_hls (const ClutterColor *color,
gfloat *hue,
gfloat *luminance,
gfloat *saturation);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_from_hls (ClutterColor *color,
gfloat hue,
gfloat luminance,
gfloat saturation);
+CLUTTER_AVAILABLE_IN_ALL
guint32 clutter_color_to_pixel (const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_color_from_pixel (ClutterColor *color,
guint32 pixel);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_color_hash (gconstpointer v);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_color_equal (gconstpointer v1,
gconstpointer v2);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_color_interpolate (const ClutterColor *initial,
const ClutterColor *final,
gdouble progress,
@@ -157,17 +177,22 @@ struct _ClutterParamSpecColor
ClutterColor *default_value;
};
+CLUTTER_AVAILABLE_IN_1_0
void clutter_value_set_color (GValue *value,
const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
const ClutterColor * clutter_value_get_color (const GValue *value);
-GType clutter_param_color_get_type (void) G_GNUC_CONST;
-GParamSpec *clutter_param_spec_color (const gchar *name,
- const gchar *nick,
- const gchar *blurb,
- const ClutterColor *default_value,
- GParamFlags flags);
+CLUTTER_AVAILABLE_IN_1_0
+GType clutter_param_color_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
+GParamSpec * clutter_param_spec_color (const gchar *name,
+ const gchar *nick,
+ const gchar *blurb,
+ const ClutterColor *default_value,
+ GParamFlags flags);
+CLUTTER_AVAILABLE_IN_1_6
const ClutterColor *clutter_color_get_static (ClutterStaticColor color);
G_END_DECLS
diff --git a/clutter/clutter-colorize-effect.h b/clutter/clutter-colorize-effect.h
index ddc761fa8..fb4d37937 100644
--- a/clutter/clutter-colorize-effect.h
+++ b/clutter/clutter-colorize-effect.h
@@ -41,7 +41,7 @@ G_BEGIN_DECLS
/**
* ClutterColorizeEffect:
*
- * ClutterColorizeEffect is an opaque structure
+ * #ClutterColorizeEffect is an opaque structure
* whose members cannot be directly accessed
*
* Since: 1.4
@@ -49,12 +49,16 @@ G_BEGIN_DECLS
typedef struct _ClutterColorizeEffect ClutterColorizeEffect;
typedef struct _ClutterColorizeEffectClass ClutterColorizeEffectClass;
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_colorize_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterEffect *clutter_colorize_effect_new (const ClutterColor *tint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_colorize_effect_set_tint (ClutterColorizeEffect *effect,
const ClutterColor *tint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_colorize_effect_get_tint (ClutterColorizeEffect *effect,
ClutterColor *tint);
diff --git a/clutter/clutter-constraint-private.h b/clutter/clutter-constraint-private.h
new file mode 100644
index 000000000..2bed47be2
--- /dev/null
+++ b/clutter/clutter-constraint-private.h
@@ -0,0 +1,42 @@
+/*
+ * 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 .
+ */
+
+#ifndef __CLUTTER_CONSTRAINT_PRIVATE_H__
+#define __CLUTTER_CONSTRAINT_PRIVATE_H__
+
+#include "clutter-constraint.h"
+
+G_BEGIN_DECLS
+
+gboolean clutter_constraint_update_allocation (ClutterConstraint *constraint,
+ ClutterActor *actor,
+ ClutterActorBox *allocation);
+
+void clutter_constraint_update_preferred_size (ClutterConstraint *constraint,
+ ClutterActor *actor,
+ ClutterOrientation direction,
+ float for_size,
+ float *minimum_size,
+ float *natural_size);
+
+G_END_DECLS
+
+#endif /* __CLUTTER_CONSTRAINT_PRIVATE_H__ */
diff --git a/clutter/clutter-constraint.c b/clutter/clutter-constraint.c
index 9b481b572..2e7eb7659 100644
--- a/clutter/clutter-constraint.c
+++ b/clutter/clutter-constraint.c
@@ -1,3 +1,27 @@
+/*
+ * 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 .
+ *
+ * Author:
+ * Emmanuele Bassi
+ */
+
/**
* SECTION:clutter-constraint
* @Title: ClutterConstraint
@@ -13,126 +37,95 @@
* allocation of the actor to which they are applied by overriding the
* #ClutterConstraintClass.update_allocation() virtual function.
*
- *
- * Using Constraints
- * Constraints can be used with fixed layout managers, like
- * #ClutterFixedLayout, or with actors implicitly using a fixed layout
- * manager, like #ClutterGroup and #ClutterStage.
- * Constraints provide a way to build user interfaces by using
- * relations between #ClutterActors, without explicit fixed
- * positioning and sizing, similarly to how fluid layout managers like
- * #ClutterBoxLayout and #ClutterTableLayout lay out their children.
- * Constraints are attached to a #ClutterActor, and are available
- * for inspection using clutter_actor_get_constraints().
- * Clutter provides different implementation of the #ClutterConstraint
- * abstract class, for instance:
- *
- *
- * #ClutterAlignConstraint
- * this constraint can be used to align an actor
- * to another one, on either the horizontal or the vertical axis; the
- * #ClutterAlignConstraint uses a normalized offset between 0.0 (the
- * top or the left of the source actor, depending on the axis) and
- * 1.0 (the bottom or the right of the source actor, depending on the
- * axis).
- *
- *
- * #ClutterBindConstraint
- * this constraint binds the X, Y, width or height
- * of an actor to the corresponding position or size of a source
- * actor; it can also apply an offset.
- *
- *
- * #ClutterSnapConstraint
- * this constraint "snaps" together the edges of
- * two #ClutterActors; if an actor uses two constraints on
- * both its horizontal or vertical edges then it can also expand to
- * fit the empty space.
- *
- *
- *
- * Usage of constraints
- * The example below uses various #ClutterConstraints to
- * lay out three actors on a resizable stage. Only the central actor has
- * an explicit size, and no actor has an explicit position.
- *
- * The #ClutterRectangle with #ClutterActor:name
- * layerA is explicitly sized to 100 pixels by 25
- * pixels, and it's added to the #ClutterStage;
- * two #ClutterAlignConstraints are used
- * to anchor layerA to the center of the stage,
- * by using 0.5 as the alignment #ClutterAlignConstraint:factor on
- * both the X and Y axis.
- * the #ClutterRectangle with #ClutterActor:name
- * layerB is added to the #ClutterStage with
- * no explicit size;
- * the #ClutterActor:x and #ClutterActor:width
- * of layerB are bound to the same properties
- * of layerA using two #ClutterBindConstraint
- * objects, thus keeping layerB aligned to
- * layerA;
- * the top edge of layerB is
- * snapped together with the bottom edge of layerA;
- * the bottom edge of layerB is also snapped
- * together with the bottom edge of the #ClutterStage; an offset is
- * given to the two #ClutterSnapConstraints to allow for some
- * padding; since layerB is snapped between two
- * different #ClutterActors, its height is stretched to match
- * the gap;
- * the #ClutterRectangle with #ClutterActor:name
- * layerC mirrors layerB,
- * snapping the top edge of the #ClutterStage to the top edge of
- * layerC and the top edge of
- * layerA to the bottom edge of
- * layerC;
- *
- *
- * Constraints
- *
- *
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- * You can try resizing interactively the #ClutterStage and verify
- * that the three #ClutterActors maintain the same position and
- * size relative to each other, and to the #ClutterStage.
- *
- * It's important to note that Clutter does not avoid loops
- * or competing constraints; if two or more #ClutterConstraints
- * are operating on the same positional or dimensional attributes of an
- * actor, or if the constraints on two different actors depend on each
- * other, then the behavior is undefined.
- *
- *
- *
- * Implementing a ClutterConstraint
- * Creating a sub-class of #ClutterConstraint requires the
- * implementation of the update_allocation()
- * virtual function.
- * The update_allocation() virtual function
- * is called during the allocation sequence of a #ClutterActor, and
- * allows any #ClutterConstraint attached to that actor to modify the
- * allocation before it is passed to the allocate()
- * implementation.
- * The #ClutterActorBox passed to the
- * update_allocation() implementation contains the
- * original allocation of the #ClutterActor, plus the eventual modifications
- * applied by the other #ClutterConstraints.
- * Constraints are queried in the same order as they were
- * applied using clutter_actor_add_constraint() or
- * clutter_actor_add_constraint_with_name().
- * It is not necessary for a #ClutterConstraint sub-class to chain
- * up to the parent's implementation.
- * If a #ClutterConstraint is parametrized - i.e. if it contains
- * properties that affect the way the constraint is implemented - it should
- * call clutter_actor_queue_relayout() on the actor to which it is attached
- * to whenever any parameter is changed. The actor to which it is attached
- * can be recovered at any point using clutter_actor_meta_get_actor().
- *
- *
* #ClutterConstraint is available since Clutter 1.4
+ *
+ * ## Using Constraints
+ *
+ * Constraints can be used with fixed layout managers, like
+ * #ClutterFixedLayout, or with actors implicitly using a fixed layout
+ * manager, like #ClutterGroup and #ClutterStage.
+ *
+ * Constraints provide a way to build user interfaces by using
+ * relations between #ClutterActors, without explicit fixed
+ * positioning and sizing, similarly to how fluid layout managers like
+ * #ClutterBoxLayout and #ClutterTableLayout lay out their children.
+ *
+ * Constraints are attached to a #ClutterActor, and are available
+ * for inspection using clutter_actor_get_constraints().
+ *
+ * Clutter provides different implementation of the #ClutterConstraint
+ * abstract class, for instance:
+ *
+ * - #ClutterAlignConstraint, a constraint that can be used to align
+ * an actor to another one on either the horizontal or the vertical
+ * axis, using a normalized value between 0 and 1.
+ * - #ClutterBindConstraint, a constraint binds the X, Y, width or height
+ * of an actor to the corresponding position or size of a source actor,
+ * with or without an offset.
+ * - #ClutterSnapConstraint, a constraint that "snaps" together the edges
+ * of two #ClutterActors; if an actor uses two constraints on both its
+ * horizontal or vertical edges then it can also expand to fit the empty
+ * space.
+ *
+ * The [constraints example](https://git.gnome.org/browse/clutter/tree/examples/constraints.c?h=clutter-1.18)
+ * uses various types of #ClutterConstraints to lay out three actors on a
+ * resizable stage. Only the central actor has an explicit size, and no
+ * actor has an explicit position.
+ *
+ * - The #ClutterActor with #ClutterActor:name `layerA` is explicitly
+ * sized to 100 pixels by 25 pixels, and it's added to the #ClutterStage
+ * - two #ClutterAlignConstraints are used to anchor `layerA` to the
+ * center of the stage, by using 0.5 as the alignment #ClutterAlignConstraint:factor on
+ * both the X and Y axis
+ * - the #ClutterActor with #ClutterActor:name `layerB` is added to the
+ * #ClutterStage with no explicit size
+ * - the #ClutterActor:x and #ClutterActor:width of `layerB` are bound
+ * to the same properties of `layerA` using two #ClutterBindConstraint
+ * objects, thus keeping `layerB` aligned to `layerA`
+ * - the top edge of `layerB` is snapped together with the bottom edge
+ * of `layerA`; the bottom edge of `layerB` is also snapped together with
+ * the bottom edge of the #ClutterStage; an offset is given to the two
+ * #ClutterSnapConstraintss to allow for some padding; since `layerB` is
+ * snapped between two different #ClutterActors, its height is stretched
+ * to match the gap
+ * - the #ClutterActor with #ClutterActor:name `layerC` mirrors `layerB`,
+ * snapping the top edge of the #ClutterStage to the top edge of `layerC`
+ * and the top edge of `layerA` to the bottom edge of `layerC`
+ *
+ * You can try resizing interactively the #ClutterStage and verify
+ * that the three #ClutterActors maintain the same position and
+ * size relative to each other, and to the #ClutterStage.
+ *
+ * It is important to note that Clutter does not avoid loops or
+ * competing constraints; if two or more #ClutterConstraints
+ * are operating on the same positional or dimensional attributes of an
+ * actor, or if the constraints on two different actors depend on each
+ * other, then the behavior is undefined.
+ *
+ * ## Implementing a ClutterConstraint
+ *
+ * Creating a sub-class of #ClutterConstraint requires the
+ * implementation of the #ClutterConstraintClass.update_allocation()
+ * virtual function.
+ *
+ * The `update_allocation()` virtual function is called during the
+ * allocation sequence of a #ClutterActor, and allows any #ClutterConstraint
+ * attached to that actor to modify the allocation before it is passed to
+ * the actor's #ClutterActorClass.allocate() implementation.
+ *
+ * The #ClutterActorBox passed to the `update_allocation()` implementation
+ * contains the original allocation of the #ClutterActor, plus the eventual
+ * modifications applied by the other #ClutterConstraints, in the same order
+ * the constraints have been applied to the actor.
+ *
+ * It is not necessary for a #ClutterConstraint sub-class to chain
+ * up to the parent's implementation.
+ *
+ * If a #ClutterConstraint is parametrized - i.e. if it contains
+ * properties that affect the way the constraint is implemented - it should
+ * call clutter_actor_queue_relayout() on the actor to which it is attached
+ * to whenever any parameter is changed. The actor to which it is attached
+ * can be recovered at any point using clutter_actor_meta_get_actor().
*/
#ifdef HAVE_CONFIG_H
@@ -141,7 +134,7 @@
#include
-#include "clutter-constraint.h"
+#include "clutter-constraint-private.h"
#include "clutter-actor.h"
#include "clutter-actor-meta-private.h"
@@ -158,6 +151,16 @@ constraint_update_allocation (ClutterConstraint *constraint,
{
}
+static void
+constraint_update_preferred_size (ClutterConstraint *constraint,
+ ClutterActor *actor,
+ ClutterOrientation direction,
+ float for_size,
+ float *minimum_size,
+ float *natural_size)
+{
+}
+
static void
clutter_constraint_notify (GObject *gobject,
GParamSpec *pspec)
@@ -183,6 +186,7 @@ clutter_constraint_class_init (ClutterConstraintClass *klass)
gobject_class->notify = clutter_constraint_notify;
klass->update_allocation = constraint_update_allocation;
+ klass->update_preferred_size = constraint_update_preferred_size;
}
static void
@@ -190,16 +194,50 @@ clutter_constraint_init (ClutterConstraint *self)
{
}
-void
-_clutter_constraint_update_allocation (ClutterConstraint *constraint,
- ClutterActor *actor,
- ClutterActorBox *allocation)
+/*< private >
+ * clutter_constraint_update_allocation:
+ * @constraint: a #ClutterConstraint
+ * @actor: a #ClutterActor
+ * @allocation: (inout): the allocation to modify
+ *
+ * Asks the @constraint to update the @allocation of a #ClutterActor.
+ *
+ * Returns: %TRUE if the allocation was updated
+ */
+gboolean
+clutter_constraint_update_allocation (ClutterConstraint *constraint,
+ ClutterActor *actor,
+ ClutterActorBox *allocation)
{
- g_return_if_fail (CLUTTER_IS_CONSTRAINT (constraint));
- g_return_if_fail (CLUTTER_IS_ACTOR (actor));
- g_return_if_fail (allocation != NULL);
+ ClutterActorBox old_alloc;
+
+ g_return_val_if_fail (CLUTTER_IS_CONSTRAINT (constraint), FALSE);
+ g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), FALSE);
+ g_return_val_if_fail (allocation != NULL, FALSE);
+
+ old_alloc = *allocation;
CLUTTER_CONSTRAINT_GET_CLASS (constraint)->update_allocation (constraint,
actor,
allocation);
+
+ return !clutter_actor_box_equal (allocation, &old_alloc);
+}
+
+void
+clutter_constraint_update_preferred_size (ClutterConstraint *constraint,
+ ClutterActor *actor,
+ ClutterOrientation direction,
+ float for_size,
+ float *minimum_size,
+ float *natural_size)
+{
+ g_return_if_fail (CLUTTER_IS_CONSTRAINT (constraint));
+ g_return_if_fail (CLUTTER_IS_ACTOR (actor));
+
+ CLUTTER_CONSTRAINT_GET_CLASS (constraint)->update_preferred_size (constraint, actor,
+ direction,
+ for_size,
+ minimum_size,
+ natural_size);
}
diff --git a/clutter/clutter-constraint.h b/clutter/clutter-constraint.h
index 777df5596..ccd20cb2d 100644
--- a/clutter/clutter-constraint.h
+++ b/clutter/clutter-constraint.h
@@ -45,7 +45,7 @@ typedef struct _ClutterConstraintClass ClutterConstraintClass;
/**
* ClutterConstraint:
*
- * The ClutterConstraint structure contains only
+ * The #ClutterConstraint structure contains only
* private data and should be accessed using the provided API
*
* Since: 1.4
@@ -58,8 +58,13 @@ struct _ClutterConstraint
/**
* ClutterConstraintClass:
+ * @update_allocation: virtual function used to update the allocation
+ * of the #ClutterActor using the #ClutterConstraint
+ * @update_preferred_size: virtual function used to update the preferred
+ * size of the #ClutterActor using the #ClutterConstraint; optional,
+ * since 1.22
*
- * The ClutterConstraintClass structure contains
+ * The #ClutterConstraintClass structure contains
* only private data
*
* Since: 1.4
@@ -69,10 +74,18 @@ struct _ClutterConstraintClass
/*< private >*/
ClutterActorMetaClass parent_class;
+ /*< public >*/
void (* update_allocation) (ClutterConstraint *constraint,
ClutterActor *actor,
ClutterActorBox *allocation);
+ void (* update_preferred_size) (ClutterConstraint *constraint,
+ ClutterActor *actor,
+ ClutterOrientation direction,
+ float for_size,
+ float *minimum_size,
+ float *natural_size);
+
/*< private >*/
void (* _clutter_constraint1) (void);
void (* _clutter_constraint2) (void);
@@ -81,27 +94,35 @@ struct _ClutterConstraintClass
void (* _clutter_constraint5) (void);
void (* _clutter_constraint6) (void);
void (* _clutter_constraint7) (void);
- void (* _clutter_constraint8) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_constraint_get_type (void) G_GNUC_CONST;
/* ClutterActor API */
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_add_constraint (ClutterActor *self,
ClutterConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_add_constraint_with_name (ClutterActor *self,
const gchar *name,
ClutterConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_remove_constraint (ClutterActor *self,
ClutterConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_remove_constraint_by_name (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
GList * clutter_actor_get_constraints (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_4
ClutterConstraint *clutter_actor_get_constraint (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_clear_constraints (ClutterActor *self);
-gboolean clutter_actor_has_constraints (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_10
+gboolean clutter_actor_has_constraints (ClutterActor *self);
G_END_DECLS
diff --git a/clutter/clutter-container.c b/clutter/clutter-container.c
index 8c64151fc..72d40fafe 100644
--- a/clutter/clutter-container.c
+++ b/clutter/clutter-container.c
@@ -393,7 +393,7 @@ clutter_container_add (ClutterContainer *container,
}
/**
- * clutter_container_add_actor:
+ * clutter_container_add_actor: (virtual add)
* @container: a #ClutterContainer
* @actor: the first #ClutterActor to add
*
@@ -406,8 +406,6 @@ clutter_container_add (ClutterContainer *container,
* deprecated virtual function. The default implementation will
* call clutter_actor_add_child().
*
- * Virtual: add
- *
* Since: 0.4
*
* Deprecated: 1.10: Use clutter_actor_add_child() instead.
@@ -485,7 +483,7 @@ clutter_container_remove (ClutterContainer *container,
}
/**
- * clutter_container_remove_actor:
+ * clutter_container_remove_actor: (virtual remove)
* @container: a #ClutterContainer
* @actor: a #ClutterActor
*
@@ -498,8 +496,6 @@ clutter_container_remove (ClutterContainer *container,
* deprecated virtual function. The default implementation will call
* clutter_actor_remove_child().
*
- * Virtual: remove
- *
* Since: 0.4
*
* Deprecated: 1.10: Use clutter_actor_remove_child() instead.
@@ -672,7 +668,7 @@ clutter_container_foreach_with_internals (ClutterContainer *container,
}
/**
- * clutter_container_raise_child:
+ * clutter_container_raise_child: (virtual raise)
* @container: a #ClutterContainer
* @actor: the actor to raise
* @sibling: (allow-none): the sibling to raise to, or %NULL to raise
@@ -684,8 +680,6 @@ clutter_container_foreach_with_internals (ClutterContainer *container,
* which has been deprecated. The default implementation will call
* clutter_actor_set_child_above_sibling().
*
- * Virtual: raise
- *
* Since: 0.6
*
* Deprecated: 1.10: Use clutter_actor_set_child_above_sibling() instead.
@@ -743,7 +737,7 @@ clutter_container_raise_child (ClutterContainer *container,
}
/**
- * clutter_container_lower_child:
+ * clutter_container_lower_child: (virtual lower)
* @container: a #ClutterContainer
* @actor: the actor to raise
* @sibling: (allow-none): the sibling to lower to, or %NULL to lower
@@ -755,8 +749,6 @@ clutter_container_raise_child (ClutterContainer *container,
* which has been deprecated. The default implementation will call
* clutter_actor_set_child_below_sibling().
*
- * Virtual: lower
- *
* Since: 0.6
*
* Deprecated: 1.10: Use clutter_actor_set_child_below_sibling() instead.
diff --git a/clutter/clutter-container.h b/clutter/clutter-container.h
index b7e3f2b6c..990ffb732 100644
--- a/clutter/clutter-container.h
+++ b/clutter/clutter-container.h
@@ -141,43 +141,55 @@ struct _ClutterContainerIface
GParamSpec *pspec);
};
-GType clutter_container_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
+GType clutter_container_get_type (void) G_GNUC_CONST;
-ClutterActor *clutter_container_find_child_by_name (ClutterContainer *container,
- const gchar *child_name);
+CLUTTER_AVAILABLE_IN_ALL
+ClutterActor * clutter_container_find_child_by_name (ClutterContainer *container,
+ const gchar *child_name);
-GParamSpec * clutter_container_class_find_child_property (GObjectClass *klass,
- const gchar *property_name);
-GParamSpec ** clutter_container_class_list_child_properties (GObjectClass *klass,
- guint *n_properties);
+CLUTTER_AVAILABLE_IN_ALL
+GParamSpec * clutter_container_class_find_child_property (GObjectClass *klass,
+ const gchar *property_name);
+CLUTTER_AVAILABLE_IN_ALL
+GParamSpec ** clutter_container_class_list_child_properties (GObjectClass *klass,
+ guint *n_properties);
-void clutter_container_create_child_meta (ClutterContainer *container,
- ClutterActor *actor);
-void clutter_container_destroy_child_meta (ClutterContainer *container,
- ClutterActor *actor);
-ClutterChildMeta *clutter_container_get_child_meta (ClutterContainer *container,
- ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_create_child_meta (ClutterContainer *container,
+ ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_destroy_child_meta (ClutterContainer *container,
+ ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
+ClutterChildMeta * clutter_container_get_child_meta (ClutterContainer *container,
+ ClutterActor *actor);
-void clutter_container_child_set_property (ClutterContainer *container,
- ClutterActor *child,
- const gchar * property,
- const GValue *value);
-void clutter_container_child_get_property (ClutterContainer *container,
- ClutterActor *child,
- const gchar *property,
- GValue *value);
-void clutter_container_child_set (ClutterContainer *container,
- ClutterActor *actor,
- const gchar *first_prop,
- ...) G_GNUC_NULL_TERMINATED;
-void clutter_container_child_get (ClutterContainer *container,
- ClutterActor *actor,
- const gchar *first_prop,
- ...) G_GNUC_NULL_TERMINATED;
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_child_set_property (ClutterContainer *container,
+ ClutterActor *child,
+ const gchar * property,
+ const GValue *value);
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_child_get_property (ClutterContainer *container,
+ ClutterActor *child,
+ const gchar *property,
+ GValue *value);
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_child_set (ClutterContainer *container,
+ ClutterActor *actor,
+ const gchar *first_prop,
+ ...) G_GNUC_NULL_TERMINATED;
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_child_get (ClutterContainer *container,
+ ClutterActor *actor,
+ const gchar *first_prop,
+ ...) G_GNUC_NULL_TERMINATED;
-void clutter_container_child_notify (ClutterContainer *container,
- ClutterActor *child,
- GParamSpec *pspec);
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_container_child_notify (ClutterContainer *container,
+ ClutterActor *child,
+ GParamSpec *pspec);
G_END_DECLS
diff --git a/clutter/clutter-content.h b/clutter/clutter-content.h
index df5aa838c..1ca45de7f 100644
--- a/clutter/clutter-content.h
+++ b/clutter/clutter-content.h
@@ -43,7 +43,7 @@ typedef struct _ClutterContentIface ClutterContentIface;
/**
* ClutterContent:
*
- * The ClutterContent structure is an opaque type
+ * The #ClutterContent structure is an opaque type
* whose members cannot be acccessed directly.
*
* Since: 1.10
@@ -62,7 +62,7 @@ typedef struct _ClutterContentIface ClutterContentIface;
* @invalidate: virtual function; called each time a #ClutterContent state
* is changed.
*
- * The ClutterContentIface structure contains only
+ * The #ClutterContentIface structure contains only
* private data.
*
* Since: 1.10
diff --git a/clutter/clutter-deform-effect.c b/clutter/clutter-deform-effect.c
index a7ab5cb01..925866a85 100644
--- a/clutter/clutter-deform-effect.c
+++ b/clutter/clutter-deform-effect.c
@@ -39,17 +39,16 @@
* a #ClutterActor and then the Cogl vertex buffers API to submit the
* geometry to the GPU.
*
- *
- * Implementing ClutterDeformEffect
- * Sub-classes of #ClutterDeformEffect should override the
- * #ClutterDeformEffectClass.deform_vertex() virtual function; this function
- * is called on every vertex that needs to be deformed by the effect.
- * Each passed vertex is an in-out parameter that initially contains the
- * position of the vertex and should be modified according to a specific
- * deformation algorithm.
- *
- *
* #ClutterDeformEffect is available since Clutter 1.4
+ *
+ * ## Implementing ClutterDeformEffect
+ *
+ * Sub-classes of #ClutterDeformEffect should override the
+ * #ClutterDeformEffectClass.deform_vertex() virtual function; this function
+ * is called on every vertex that needs to be deformed by the effect.
+ * Each passed vertex is an in-out parameter that initially contains the
+ * position of the vertex and should be modified according to a specific
+ * deformation algorithm.
*/
#ifdef HAVE_CONFIG_H
@@ -102,9 +101,9 @@ enum
static GParamSpec *obj_props[PROP_LAST];
-G_DEFINE_ABSTRACT_TYPE (ClutterDeformEffect,
- clutter_deform_effect,
- CLUTTER_TYPE_OFFSCREEN_EFFECT);
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterDeformEffect,
+ clutter_deform_effect,
+ CLUTTER_TYPE_OFFSCREEN_EFFECT)
static void
clutter_deform_effect_real_deform_vertex (ClutterDeformEffect *effect,
@@ -305,7 +304,7 @@ clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect)
instead we make a temporary copy */
back_pipeline = cogl_pipeline_copy (priv->back_pipeline);
cogl_pipeline_set_depth_state (back_pipeline, &depth_state, NULL);
- cogl_pipeline_set_cull_face_mode (pipeline,
+ cogl_pipeline_set_cull_face_mode (back_pipeline,
COGL_PIPELINE_CULL_FACE_MODE_FRONT);
cogl_framebuffer_draw_primitive (fb, back_pipeline, priv->primitive);
@@ -577,8 +576,6 @@ clutter_deform_effect_class_init (ClutterDeformEffectClass *klass)
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
ClutterOffscreenEffectClass *offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterDeformEffectPrivate));
-
klass->deform_vertex = clutter_deform_effect_real_deform_vertex;
/**
@@ -645,9 +642,7 @@ clutter_deform_effect_class_init (ClutterDeformEffectClass *klass)
static void
clutter_deform_effect_init (ClutterDeformEffect *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_DEFORM_EFFECT,
- ClutterDeformEffectPrivate);
-
+ self->priv = clutter_deform_effect_get_instance_private (self);
self->priv->x_tiles = self->priv->y_tiles = DEFAULT_N_TILES;
self->priv->back_pipeline = NULL;
diff --git a/clutter/clutter-deform-effect.h b/clutter/clutter-deform-effect.h
index 7650e7100..dc6eabccd 100644
--- a/clutter/clutter-deform-effect.h
+++ b/clutter/clutter-deform-effect.h
@@ -48,7 +48,7 @@ typedef struct _ClutterDeformEffectClass ClutterDeformEffectClass;
/**
* ClutterDeformEffect:
*
- * The ClutterDeformEffect structure contains
+ * The #ClutterDeformEffect structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.4
@@ -66,7 +66,7 @@ struct _ClutterDeformEffect
* @deform_vertex: virtual function; sub-classes should override this
* function to compute the deformation of each vertex
*
- * The ClutterDeformEffectClass structure contains
+ * The #ClutterDeformEffectClass structure contains
* only private data
*
* Since: 1.4
@@ -92,19 +92,25 @@ struct _ClutterDeformEffectClass
void (*_clutter_deform7) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_deform_effect_get_type (void) G_GNUC_CONST;
-void clutter_deform_effect_set_back_material (ClutterDeformEffect *effect,
- CoglHandle material);
-CoglHandle clutter_deform_effect_get_back_material (ClutterDeformEffect *effect);
-void clutter_deform_effect_set_n_tiles (ClutterDeformEffect *effect,
- guint x_tiles,
- guint y_tiles);
-void clutter_deform_effect_get_n_tiles (ClutterDeformEffect *effect,
- guint *x_tiles,
- guint *y_tiles);
+CLUTTER_AVAILABLE_IN_1_4
+void clutter_deform_effect_set_back_material (ClutterDeformEffect *effect,
+ CoglHandle material);
+CLUTTER_AVAILABLE_IN_1_4
+CoglHandle clutter_deform_effect_get_back_material (ClutterDeformEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
+void clutter_deform_effect_set_n_tiles (ClutterDeformEffect *effect,
+ guint x_tiles,
+ guint y_tiles);
+CLUTTER_AVAILABLE_IN_1_4
+void clutter_deform_effect_get_n_tiles (ClutterDeformEffect *effect,
+ guint *x_tiles,
+ guint *y_tiles);
-void clutter_deform_effect_invalidate (ClutterDeformEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
+void clutter_deform_effect_invalidate (ClutterDeformEffect *effect);
G_END_DECLS
diff --git a/clutter/clutter-deprecated.h b/clutter/clutter-deprecated.h
index 1f400299f..fc40557dc 100644
--- a/clutter/clutter-deprecated.h
+++ b/clutter/clutter-deprecated.h
@@ -33,6 +33,7 @@
#include "deprecated/clutter-stage-manager.h"
#include "deprecated/clutter-stage.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-timeout-pool.h"
diff --git a/clutter/clutter-desaturate-effect.h b/clutter/clutter-desaturate-effect.h
index d73ed734d..08c1583f5 100644
--- a/clutter/clutter-desaturate-effect.h
+++ b/clutter/clutter-desaturate-effect.h
@@ -40,7 +40,7 @@ G_BEGIN_DECLS
/**
* ClutterDesaturateEffect:
*
- * ClutterDesaturateEffect is an opaque structure
+ * #ClutterDesaturateEffect is an opaque structure
* whose members cannot be directly accessed
*
* Since: 1.4
@@ -48,12 +48,16 @@ G_BEGIN_DECLS
typedef struct _ClutterDesaturateEffect ClutterDesaturateEffect;
typedef struct _ClutterDesaturateEffectClass ClutterDesaturateEffectClass;
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_desaturate_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterEffect *clutter_desaturate_effect_new (gdouble factor);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_desaturate_effect_set_factor (ClutterDesaturateEffect *effect,
gdouble factor);
+CLUTTER_AVAILABLE_IN_1_4
gdouble clutter_desaturate_effect_get_factor (ClutterDesaturateEffect *effect);
G_END_DECLS
diff --git a/clutter/clutter-device-manager-private.h b/clutter/clutter-device-manager-private.h
index 8bc5330d7..2f18b6e12 100644
--- a/clutter/clutter-device-manager-private.h
+++ b/clutter/clutter-device-manager-private.h
@@ -65,8 +65,8 @@ typedef struct _ClutterTouchInfo
ClutterEventSequence *sequence;
ClutterActor *actor;
- gint current_x;
- gint current_y;
+ gfloat current_x;
+ gfloat current_y;
} ClutterTouchInfo;
struct _ClutterInputDevice
@@ -106,8 +106,8 @@ struct _ClutterInputDevice
ClutterStage *stage;
/* the current state */
- gint current_x;
- gint current_y;
+ gfloat current_x;
+ gfloat current_y;
guint32 current_time;
gint current_button_number;
ClutterModifierType current_state;
@@ -137,9 +137,6 @@ struct _ClutterInputDeviceClass
{
GObjectClass parent_class;
- void (* select_stage_events) (ClutterInputDevice *device,
- ClutterStage *stage,
- gint event_mask);
gboolean (* keycode_to_evdev) (ClutterInputDevice *device,
guint hardware_keycode,
guint *evdev_keycode);
@@ -152,8 +149,7 @@ void _clutter_device_manager_remove_device (ClutterDeviceMa
ClutterInputDevice *device);
void _clutter_device_manager_update_devices (ClutterDeviceManager *device_manager);
void _clutter_device_manager_select_stage_events (ClutterDeviceManager *device_manager,
- ClutterStage *stage,
- gint event_mask);
+ ClutterStage *stage);
ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager);
/* input device */
@@ -165,8 +161,8 @@ void _clutter_input_device_remove_event_sequence (ClutterInputDev
ClutterEvent *event);
void _clutter_input_device_set_coords (ClutterInputDevice *device,
ClutterEventSequence *sequence,
- gint x,
- gint y,
+ gfloat x,
+ gfloat y,
ClutterStage *stage);
void _clutter_input_device_set_state (ClutterInputDevice *device,
ClutterModifierType state);
@@ -198,10 +194,6 @@ void _clutter_input_device_add_slave (ClutterInputDev
void _clutter_input_device_remove_slave (ClutterInputDevice *master,
ClutterInputDevice *slave);
-void _clutter_input_device_select_stage_events (ClutterInputDevice *device,
- ClutterStage *stage,
- gint event_flags);
-
gboolean _clutter_input_device_translate_axis (ClutterInputDevice *device,
guint index_,
gdouble value,
diff --git a/clutter/clutter-device-manager.c b/clutter/clutter-device-manager.c
index 2dc67be01..32a6e8a4a 100644
--- a/clutter/clutter-device-manager.c
+++ b/clutter/clutter-device-manager.c
@@ -48,8 +48,6 @@
#include "clutter-private.h"
#include "clutter-stage-private.h"
-#define CLUTTER_DEVICE_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_DEVICE_MANAGER, ClutterDeviceManagerPrivate))
-
struct _ClutterDeviceManagerPrivate
{
/* back-pointer to the backend */
@@ -77,9 +75,9 @@ enum
static guint manager_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_ABSTRACT_TYPE (ClutterDeviceManager,
- clutter_device_manager,
- G_TYPE_OBJECT);
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterDeviceManager,
+ clutter_device_manager,
+ G_TYPE_OBJECT)
static void
clutter_device_manager_set_property (GObject *gobject,
@@ -124,8 +122,6 @@ clutter_device_manager_class_init (ClutterDeviceManagerClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterDeviceManagerPrivate));
-
obj_props[PROP_BACKEND] =
g_param_spec_object ("backend",
P_("Backend"),
@@ -183,7 +179,7 @@ clutter_device_manager_class_init (ClutterDeviceManagerClass *klass)
static void
clutter_device_manager_init (ClutterDeviceManager *self)
{
- self->priv = CLUTTER_DEVICE_MANAGER_GET_PRIVATE (self);
+ self->priv = clutter_device_manager_get_instance_private (self);
}
/**
@@ -308,24 +304,15 @@ clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager,
void
_clutter_device_manager_select_stage_events (ClutterDeviceManager *device_manager,
- ClutterStage *stage,
- gint event_flags)
+ ClutterStage *stage)
{
ClutterDeviceManagerClass *manager_class;
- const GSList *devices, *d;
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
- devices = manager_class->get_devices (device_manager);
-
- for (d = devices; d != NULL; d = d->next)
- {
- ClutterInputDevice *device = d->data;
-
- if (device->is_enabled)
- _clutter_input_device_select_stage_events (device, stage, event_flags);
- }
+ if (manager_class->select_stage_events)
+ manager_class->select_stage_events (device_manager, stage);
}
/*
@@ -381,9 +368,14 @@ _clutter_device_manager_remove_device (ClutterDeviceManager *device_manager,
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
g_assert (manager_class->remove_device != NULL);
- manager_class->remove_device (device_manager, device);
+ /* 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);
}
/*
diff --git a/clutter/clutter-device-manager.h b/clutter/clutter-device-manager.h
index 94cde3d17..177d45280 100644
--- a/clutter/clutter-device-manager.h
+++ b/clutter/clutter-device-manager.h
@@ -81,21 +81,27 @@ struct _ClutterDeviceManagerClass
ClutterInputDevice *device);
void (* remove_device) (ClutterDeviceManager *manager,
ClutterInputDevice *device);
+ void (* select_stage_events) (ClutterDeviceManager *manager,
+ ClutterStage *stage);
/* padding */
- gpointer _padding[8];
+ gpointer _padding[7];
};
-
-
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_device_manager_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
ClutterDeviceManager *clutter_device_manager_get_default (void);
+CLUTTER_AVAILABLE_IN_1_2
GSList * clutter_device_manager_list_devices (ClutterDeviceManager *device_manager);
+CLUTTER_AVAILABLE_IN_1_2
const GSList * clutter_device_manager_peek_devices (ClutterDeviceManager *device_manager);
+CLUTTER_AVAILABLE_IN_1_2
ClutterInputDevice * clutter_device_manager_get_device (ClutterDeviceManager *device_manager,
gint device_id);
+CLUTTER_AVAILABLE_IN_1_2
ClutterInputDevice * clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager,
ClutterInputDeviceType device_type);
diff --git a/clutter/clutter-drag-action.c b/clutter/clutter-drag-action.c
index 669240c1b..13145221e 100644
--- a/clutter/clutter-drag-action.c
+++ b/clutter/clutter-drag-action.c
@@ -34,7 +34,7 @@
* a #ClutterActor and setting it as reactive; for instance, the following
* code:
*
- * |[
+ * |[
* clutter_actor_add_action (actor, clutter_drag_action_new ());
* clutter_actor_set_reactive (actor, TRUE);
* ]|
@@ -54,19 +54,11 @@
* parented and exist between the emission of #ClutterDragAction::drag-begin
* and #ClutterDragAction::drag-end.
*
- *
- * A simple draggable actor
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- * The example program above allows dragging the rectangle around
- * the stage using a #ClutterDragAction. When pressing the
- * Shift key the actor that is going to be dragged is a
- * separate rectangle, and when the drag ends, the original rectangle will
- * be animated to the final coordinates.
- *
+ * The [drag-action example](https://git.gnome.org/browse/clutter/tree/examples/drag-action.c?h=clutter-1.18)
+ * allows dragging the rectangle around the stage using a #ClutterDragAction.
+ * When pressing the `Shift` key the actor that is being dragged will be a
+ * separate rectangle, and when the drag ends, the original rectangle will be
+ * animated to the final drop coordinates.
*
* #ClutterDragAction is available since Clutter 1.4
*/
@@ -150,7 +142,7 @@ static gboolean on_captured_event (ClutterActor *stage,
ClutterEvent *event,
ClutterDragAction *action);
-G_DEFINE_TYPE (ClutterDragAction, clutter_drag_action, CLUTTER_TYPE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterDragAction, clutter_drag_action, CLUTTER_TYPE_ACTION)
static void
get_drag_threshold (ClutterDragAction *action,
@@ -364,14 +356,14 @@ on_captured_event (ClutterActor *stage,
if (!priv->in_drag)
return CLUTTER_EVENT_PROPAGATE;
- if (clutter_event_get_device (event) != priv->device)
+ if (clutter_event_get_device (event) != priv->device ||
+ clutter_event_get_event_sequence (event) != priv->sequence)
return CLUTTER_EVENT_PROPAGATE;
switch (clutter_event_type (event))
{
case CLUTTER_TOUCH_UPDATE:
- if (clutter_event_get_event_sequence (event) == priv->sequence)
- emit_drag_motion (action, actor, event);
+ emit_drag_motion (action, actor, event);
break;
case CLUTTER_MOTION:
@@ -391,8 +383,7 @@ on_captured_event (ClutterActor *stage,
case CLUTTER_TOUCH_END:
case CLUTTER_TOUCH_CANCEL:
- if (clutter_event_get_event_sequence (event) == priv->sequence)
- emit_drag_end (action, actor, event);
+ emit_drag_end (action, actor, event);
break;
case CLUTTER_BUTTON_RELEASE:
@@ -427,6 +418,8 @@ on_drag_begin (ClutterActor *actor,
switch (clutter_event_type (event))
{
case CLUTTER_BUTTON_PRESS:
+ if (priv->sequence != NULL)
+ return CLUTTER_EVENT_PROPAGATE;
if (clutter_event_get_button (event) != CLUTTER_BUTTON_PRIMARY)
return CLUTTER_EVENT_PROPAGATE;
break;
@@ -710,8 +703,6 @@ clutter_drag_action_class_init (ClutterDragActionClass *klass)
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterDragActionPrivate));
-
meta_class->set_actor = clutter_drag_action_set_actor;
klass->drag_progress = clutter_drag_action_real_drag_progress;
@@ -991,8 +982,7 @@ clutter_drag_action_class_init (ClutterDragActionClass *klass)
static void
clutter_drag_action_init (ClutterDragAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_DRAG_ACTION,
- ClutterDragActionPrivate);
+ self->priv = clutter_drag_action_get_instance_private (self);
}
/**
@@ -1141,14 +1131,18 @@ clutter_drag_action_set_drag_handle (ClutterDragAction *action,
priv->transformed_press_x = priv->press_x;
priv->transformed_press_y = priv->press_y;
- clutter_actor_transform_stage_point (handle, priv->press_x, priv->press_y,
- &priv->transformed_press_x,
- &priv->transformed_press_y);
if (priv->drag_handle != NULL)
- g_signal_connect (priv->drag_handle, "destroy",
- G_CALLBACK (on_drag_handle_destroy),
- action);
+ {
+ clutter_actor_transform_stage_point (priv->drag_handle,
+ priv->press_x,
+ priv->press_y,
+ &priv->transformed_press_x,
+ &priv->transformed_press_y);
+ g_signal_connect (priv->drag_handle, "destroy",
+ G_CALLBACK (on_drag_handle_destroy),
+ action);
+ }
g_object_notify_by_pspec (G_OBJECT (action), drag_props[PROP_DRAG_HANDLE]);
}
diff --git a/clutter/clutter-drag-action.h b/clutter/clutter-drag-action.h
index b2503dd43..3e0ed26df 100644
--- a/clutter/clutter-drag-action.h
+++ b/clutter/clutter-drag-action.h
@@ -48,7 +48,7 @@ typedef struct _ClutterDragActionClass ClutterDragActionClass;
/**
* ClutterDragAction:
*
- * The ClutterDragAction structure contains only
+ * The #ClutterDragAction structure contains only
* private data and should be accessed using the provided API
*
* Since: 1.4
@@ -68,7 +68,7 @@ struct _ClutterDragAction
* @drag_end: class handler of the #ClutterDragAction::drag-end signal
* @drag_progress: class handler of the #ClutterDragAction::drag-progress signal
*
- * The ClutterDragActionClass structure contains
+ * The #ClutterDragActionClass structure contains
* only private data
*
* Since: 1.4
@@ -105,26 +105,36 @@ struct _ClutterDragActionClass
void (* _clutter_drag_action4) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_drag_action_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterAction * clutter_drag_action_new (void);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_drag_action_set_drag_threshold (ClutterDragAction *action,
gint x_threshold,
gint y_threshold);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_drag_action_get_drag_threshold (ClutterDragAction *action,
guint *x_threshold,
guint *y_threshold);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_drag_action_set_drag_handle (ClutterDragAction *action,
ClutterActor *handle);
+CLUTTER_AVAILABLE_IN_1_4
ClutterActor * clutter_drag_action_get_drag_handle (ClutterDragAction *action);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_drag_action_set_drag_axis (ClutterDragAction *action,
ClutterDragAxis axis);
+CLUTTER_AVAILABLE_IN_1_4
ClutterDragAxis clutter_drag_action_get_drag_axis (ClutterDragAction *action);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_drag_action_get_press_coords (ClutterDragAction *action,
gfloat *press_x,
gfloat *press_y);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_drag_action_get_motion_coords (ClutterDragAction *action,
gfloat *motion_x,
gfloat *motion_y);
diff --git a/clutter/clutter-drop-action.c b/clutter/clutter-drop-action.c
index adf6aeb9f..d1940dd2a 100644
--- a/clutter/clutter-drop-action.c
+++ b/clutter/clutter-drop-action.c
@@ -36,7 +36,7 @@
* #ClutterDropAction::drop signal and handling the drop from there,
* for instance:
*
- * |[
+ * |[
* ClutterAction *action = clutter_drop_action ();
*
* g_signal_connect (action, "drop", G_CALLBACK (on_drop), NULL);
@@ -49,18 +49,12 @@
* cause the #ClutterDropAction::drop signal to be skipped when the input
* device button is released.
*
- *
- * Drop targets
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
- *
* It's important to note that #ClutterDropAction will only work with
* actors dragged using #ClutterDragAction.
*
+ * See [drop-action.c](https://git.gnome.org/browse/clutter/tree/examples/drop-action.c?h=clutter-1.18)
+ * for an example of how to use #ClutterDropAction.
+ *
* #ClutterDropAction is available since Clutter 1.8
*/
@@ -108,7 +102,7 @@ enum
static guint drop_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterDropAction, clutter_drop_action, CLUTTER_TYPE_ACTION)
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterDropAction, clutter_drop_action, CLUTTER_TYPE_ACTION)
static void
drop_target_free (gpointer _data)
@@ -129,23 +123,25 @@ on_stage_capture (ClutterStage *stage,
gfloat event_x, event_y;
ClutterActor *actor, *drag_actor;
ClutterDropAction *drop_action;
+ ClutterInputDevice *device;
gboolean was_reactive;
switch (clutter_event_type (event))
{
case CLUTTER_MOTION:
case CLUTTER_BUTTON_RELEASE:
- {
- ClutterInputDevice *device;
+ if (clutter_event_type (event) == CLUTTER_MOTION &&
+ !(clutter_event_get_state (event) & CLUTTER_BUTTON1_MASK))
+ return CLUTTER_EVENT_PROPAGATE;
- if (!(clutter_event_get_state (event) & CLUTTER_BUTTON1_MASK))
- return CLUTTER_EVENT_PROPAGATE;
+ if (clutter_event_type (event) == CLUTTER_BUTTON_RELEASE &&
+ clutter_event_get_button (event) != CLUTTER_BUTTON_PRIMARY)
+ return CLUTTER_EVENT_PROPAGATE;
- device = clutter_event_get_device (event);
- drag_actor = _clutter_stage_get_pointer_drag_actor (stage, device);
- if (drag_actor == NULL)
- return CLUTTER_EVENT_PROPAGATE;
- }
+ device = clutter_event_get_device (event);
+ drag_actor = _clutter_stage_get_pointer_drag_actor (stage, device);
+ if (drag_actor == NULL)
+ return CLUTTER_EVENT_PROPAGATE;
break;
case CLUTTER_TOUCH_UPDATE:
@@ -384,8 +380,6 @@ clutter_drop_action_class_init (ClutterDropActionClass *klass)
{
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterDropActionPrivate));
-
meta_class->set_actor = clutter_drop_action_set_actor;
klass->can_drop = clutter_drop_action_real_can_drop;
@@ -518,8 +512,7 @@ clutter_drop_action_class_init (ClutterDropActionClass *klass)
static void
clutter_drop_action_init (ClutterDropAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_DROP_ACTION,
- ClutterDropActionPrivate);
+ self->priv = clutter_drop_action_get_instance_private (self);
}
/**
diff --git a/clutter/clutter-drop-action.h b/clutter/clutter-drop-action.h
index 732baad57..9c58242d6 100644
--- a/clutter/clutter-drop-action.h
+++ b/clutter/clutter-drop-action.h
@@ -47,7 +47,7 @@ typedef struct _ClutterDropActionClass ClutterDropActionClass;
/**
* ClutterDropAction:
*
- * The ClutterDropAction structure contains only
+ * The #ClutterDropAction structure contains only
* private data and should be accessed using the provided API.
*
* Since: 1.8
@@ -67,7 +67,7 @@ struct _ClutterDropAction
* @over_out: class handler for the #ClutterDropAction::over-out signal
* @drop: class handler for the #ClutterDropAction::drop signal
*
- * The ClutterDropActionClass structure contains
+ * The #ClutterDropActionClass structure contains
* only private data.
*
* Since: 1.8
@@ -104,8 +104,10 @@ struct _ClutterDropActionClass
void (*_clutter_drop_action8) (void);
};
+CLUTTER_AVAILABLE_IN_1_8
GType clutter_drop_action_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_8
ClutterAction * clutter_drop_action_new (void);
G_END_DECLS
diff --git a/clutter/clutter-effect.c b/clutter/clutter-effect.c
index 8430a7616..33d8f1387 100644
--- a/clutter/clutter-effect.c
+++ b/clutter/clutter-effect.c
@@ -36,78 +36,50 @@
* actor without sub-classing the actor itself and overriding the
* #ClutterActorClass.paint()_ virtual function.
*
- *
- * Implementing a ClutterEffect
- *
- * Creating a sub-class of #ClutterEffect requires overriding the
- * ‘paint’ method. The implementation of the function should look
- * something like this:
- *
- *
+ * ## Implementing a ClutterEffect
+ *
+ * Creating a sub-class of #ClutterEffect requires overriding the
+ * #ClutterEffectClass.paint() method. The implementation of the function should look
+ * something like this:
+ *
+ * |[
* void effect_paint (ClutterEffect *effect, ClutterEffectPaintFlags flags)
* {
- * /* Set up initialisation of the paint such as binding a
- * CoglOffscreen or other operations */
+ * // Set up initialisation of the paint such as binding a
+ * // CoglOffscreen or other operations
*
- * /* Chain to the next item in the paint sequence. This will either call
- * ‘paint’ on the next effect or just paint the actor if this is
- * the last effect. */
+ * // Chain to the next item in the paint sequence. This will either call
+ * // ‘paint’ on the next effect or just paint the actor if this is
+ * // the last effect.
* ClutterActor *actor =
* clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
+ *
* clutter_actor_continue_paint (actor);
*
- * /* perform any cleanup of state, such as popping the
- * CoglOffscreen */
+ * // perform any cleanup of state, such as popping the CoglOffscreen
* }
- *
- *
- * The effect can optionally avoid calling
- * clutter_actor_continue_paint() to skip any further stages of
- * the paint sequence. This is useful for example if the effect
- * contains a cached image of the actor. In that case it can
- * optimise painting by avoiding the actor paint and instead
- * painting the cached image. The %CLUTTER_EFFECT_PAINT_ACTOR_DIRTY
- * flag is useful in this case. Clutter will set this flag when a
- * redraw has been queued on the actor since it was last
- * painted. The effect can use this information to decide if the
- * cached image is still valid.
- *
- *
- * The ‘paint’ virtual was added in Clutter 1.8. Prior to that there
- * were two separate functions as follows.
- *
- *
- * pre_paint(), which is called
- * before painting the #ClutterActor.
- * post_paint(), which is called
- * after painting the #ClutterActor.
- *
- * The pre_paint() function was used to set
- * up the #ClutterEffect right before the #ClutterActor's paint
- * sequence. This function can fail, and return %FALSE; in that case, no
- * post_paint() invocation will follow.
- * The post_paint() function was called after the
- * #ClutterActor's paint sequence.
- *
- * With these two functions it is not possible to skip the rest of
- * the paint sequence. The default implementation of the ‘paint’
- * virtual calls #ClutterEffectClass.pre_paint(), clutter_actor_continue_paint()
- * and then #ClutterEffectClass.post_paint() so that existing actors that aren't
- * using the #ClutterEffectClass.paint() virtual will continue to work. New
- * effects using the #ClutterEffectClass.paint() virtual do not need to implement
- * pre or post paint.
- *
- *
- * A simple ClutterEffect implementation
- * The example below creates two rectangles: one will be
- * painted "behind" the actor, while another will be painted "on
- * top" of the actor. The #ClutterActorMetaClass.set_actor()
- * implementation will create the two materials used for the two
- * different rectangles; the #ClutterEffectClass.paint() implementation
- * will paint the first material using cogl_rectangle(), before
- * continuing and then it will paint paint the second material
- * after.
- *
+ * ]|
+ *
+ * The effect can optionally avoid calling clutter_actor_continue_paint() to skip any
+ * further stages of the paint sequence. This is useful for example if the effect
+ * contains a cached image of the actor. In that case it can optimise painting by
+ * avoiding the actor paint and instead painting the cached image.
+ *
+ * The %CLUTTER_EFFECT_PAINT_ACTOR_DIRTY flag is useful in this case. Clutter will set
+ * this flag when a redraw has been queued on the actor since it was last painted. The
+ * effect can use this information to decide if the cached image is still valid.
+ *
+ * ## A simple ClutterEffect implementation
+ *
+ * The example below creates two rectangles: one will be painted "behind" the actor,
+ * while another will be painted "on top" of the actor.
+ *
+ * The #ClutterActorMetaClass.set_actor() implementation will create the two materials
+ * used for the two different rectangles; the #ClutterEffectClass.paint() implementation
+ * will paint the first material using cogl_rectangle(), before continuing and then it
+ * will paint paint the second material after.
+ *
+ * |[
* typedef struct {
* ClutterEffect parent_instance;
*
@@ -125,35 +97,33 @@
* {
* MyEffect *self = MY_EFFECT (meta);
*
- * /* Clear the previous state */
- * if (self->rect_1)
+ * // Clear the previous state //
+ * if (self->rect_1)
* {
- * cogl_handle_unref (self->rect_1);
- * self->rect_1 = NULL;
+ * cogl_handle_unref (self->rect_1);
+ * self->rect_1 = NULL;
* }
*
- * if (self->rect_2)
+ * if (self->rect_2)
* {
- * cogl_handle_unref (self->rect_2);
- * self->rect_2 = NULL;
+ * cogl_handle_unref (self->rect_2);
+ * self->rect_2 = NULL;
* }
*
- * /* Maintain a pointer to the actor *
- * self->actor = actor;
+ * // Maintain a pointer to the actor
+ * self->actor = actor;
*
- * /* If we've been detached by the actor then we should
- * * just bail out here
- * */
- * if (self->actor == NULL)
+ * // If we've been detached by the actor then we should just bail out here
+ * if (self->actor == NULL)
* return;
*
- * /* Create a red material */
- * self->rect_1 = cogl_material_new ();
- * cogl_material_set_color4f (self->rect_1, 1.0, 0.0, 0.0, 1.0);
+ * // Create a red material
+ * self->rect_1 = cogl_material_new ();
+ * cogl_material_set_color4f (self->rect_1, 1.0, 0.0, 0.0, 1.0);
*
- * /* Create a green material */
- * self->rect_2 = cogl_material_new ();
- * cogl_material_set_color4f (self->rect_2, 0.0, 1.0, 0.0, 1.0);
+ * // Create a green material
+ * self->rect_2 = cogl_material_new ();
+ * cogl_material_set_color4f (self->rect_2, 0.0, 1.0, 0.0, 1.0);
* }
*
* static gboolean
@@ -162,17 +132,17 @@
* MyEffect *self = MY_EFFECT (effect);
* gfloat width, height;
*
- * clutter_actor_get_size (self->actor, &width, &height);
+ * clutter_actor_get_size (self->actor, &width, &height);
*
- * /* Paint the first rectangle in the upper left quadrant */
- * cogl_set_source (self->rect_1);
+ * // Paint the first rectangle in the upper left quadrant
+ * cogl_set_source (self->rect_1);
* cogl_rectangle (0, 0, width / 2, height / 2);
*
- * /* Continue to the rest of the paint sequence */
- * clutter_actor_continue_paint (self->actor);
+ * // Continue to the rest of the paint sequence
+ * clutter_actor_continue_paint (self->actor);
*
- * /* Paint the second rectangle in the lower right quadrant */
- * cogl_set_source (self->rect_2);
+ * // Paint the second rectangle in the lower right quadrant
+ * cogl_set_source (self->rect_2);
* cogl_rectangle (width / 2, height / 2, width, height);
* }
*
@@ -181,13 +151,11 @@
* {
* ClutterActorMetaClas *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
*
- * meta_class->set_actor = my_effect_set_actor;
+ * meta_class->set_actor = my_effect_set_actor;
*
- * klass->paint = my_effect_paint;
+ * klass->paint = my_effect_paint;
* }
- *
- *
- *
+ * ]|
*
* #ClutterEffect is available since Clutter 1.4
*/
diff --git a/clutter/clutter-effect.h b/clutter/clutter-effect.h
index cad454801..b5286fd79 100644
--- a/clutter/clutter-effect.h
+++ b/clutter/clutter-effect.h
@@ -91,29 +91,39 @@ struct _ClutterEffectClass
void (* _clutter_effect6) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_8
void clutter_effect_queue_repaint (ClutterEffect *effect);
/*
* ClutterActor API
*/
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_add_effect (ClutterActor *self,
ClutterEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_add_effect_with_name (ClutterActor *self,
const gchar *name,
ClutterEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_remove_effect (ClutterActor *self,
ClutterEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_remove_effect_by_name (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
GList * clutter_actor_get_effects (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_4
ClutterEffect *clutter_actor_get_effect (ClutterActor *self,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_actor_clear_effects (ClutterActor *self);
-gboolean clutter_actor_has_effects (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_10
+gboolean clutter_actor_has_effects (ClutterActor *self);
G_END_DECLS
diff --git a/clutter/clutter-enum-types.c.in b/clutter/clutter-enum-types.c.in
index 19fb9e502..39bffd4a7 100644
--- a/clutter/clutter-enum-types.c.in
+++ b/clutter/clutter-enum-types.c.in
@@ -1,4 +1,5 @@
/*** BEGIN file-header ***/
+#include "config.h"
#include "clutter-enum-types.h"
/*** END file-header ***/
diff --git a/clutter/clutter-enum-types.h.in b/clutter/clutter-enum-types.h.in
index a6131c3dc..aea757ed0 100644
--- a/clutter/clutter-enum-types.h.in
+++ b/clutter/clutter-enum-types.h.in
@@ -2,7 +2,11 @@
#ifndef __CLUTTER_ENUM_TYPES_H__
#define __CLUTTER_ENUM_TYPES_H__
-#include
+#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only can be included directly."
+#endif
+
+#include
G_BEGIN_DECLS
@@ -12,15 +16,14 @@ G_BEGIN_DECLS
/* enumerations from "@filename@" */
/*** END file-production ***/
+/*** BEGIN value-header ***/
+CLUTTER_AVAILABLE_IN_ALL GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define CLUTTER_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
+
+/*** END value-header ***/
+
/*** BEGIN file-tail ***/
G_END_DECLS
#endif /* !__CLUTTER_ENUM_TYPES_H__ */
/*** END file-tail ***/
-
-/*** BEGIN value-header ***/
-GType @enum_name@_get_type (void) G_GNUC_CONST;
-#define CLUTTER_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
-
-/*** END value-header ***/
-
diff --git a/clutter/clutter-enums.h b/clutter/clutter-enums.h
index f2a666285..fd6dd6d59 100644
--- a/clutter/clutter-enums.h
+++ b/clutter/clutter-enums.h
@@ -96,6 +96,8 @@ typedef enum { /*< prefix=CLUTTER_ROTATE >*/
* ClutterRequestMode:
* @CLUTTER_REQUEST_HEIGHT_FOR_WIDTH: Height for width requests
* @CLUTTER_REQUEST_WIDTH_FOR_HEIGHT: Width for height requests
+ * @CLUTTER_REQUEST_CONTENT_SIZE: Use the preferred size of the
+ * #ClutterContent, if it has any (available since 1.22)
*
* Specifies the type of requests for a #ClutterActor.
*
@@ -103,7 +105,8 @@ typedef enum { /*< prefix=CLUTTER_ROTATE >*/
*/
typedef enum { /*< prefix=CLUTTER_REQUEST >*/
CLUTTER_REQUEST_HEIGHT_FOR_WIDTH,
- CLUTTER_REQUEST_WIDTH_FOR_HEIGHT
+ CLUTTER_REQUEST_WIDTH_FOR_HEIGHT,
+ CLUTTER_REQUEST_CONTENT_SIZE
} ClutterRequestMode;
/**
@@ -1357,6 +1360,29 @@ typedef enum { /*< prefix=CLUTTER_ZOOM >*/
CLUTTER_ZOOM_BOTH
} ClutterZoomAxis;
+/**
+ * ClutterGestureTriggerEdge:
+ * @CLUTTER_GESTURE_TRIGGER_EDGE_NONE: Tell #ClutterGestureAction that
+ * the gesture must begin immediately and there's no drag limit that
+ * will cause its cancellation;
+ * @CLUTTER_GESTURE_TRIGGER_EDGE_AFTER: Tell #ClutterGestureAction that
+ * it needs to wait until the drag threshold has been exceeded before
+ * considering that the gesture has begun;
+ * @CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE: Tell #ClutterGestureAction that
+ * the gesture must begin immediately and that it must be cancelled
+ * once the drag exceed the configured threshold.
+ *
+ * Enum passed to the clutter_gesture_action_set_threshold_trigger_edge()
+ * function.
+ *
+ * Since: 1.18
+ */
+typedef enum {
+ CLUTTER_GESTURE_TRIGGER_EDGE_NONE = 0,
+ CLUTTER_GESTURE_TRIGGER_EDGE_AFTER,
+ CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE
+} ClutterGestureTriggerEdge;
+
G_END_DECLS
#endif /* __CLUTTER_ENUMS_H__ */
diff --git a/clutter/clutter-event-private.h b/clutter/clutter-event-private.h
index eeb10800b..00d627d12 100644
--- a/clutter/clutter-event-private.h
+++ b/clutter/clutter-event-private.h
@@ -11,6 +11,8 @@ void _clutter_event_set_pointer_emulated (ClutterEvent *eve
/* Reinjecting queued events for processing */
void _clutter_process_event (ClutterEvent *event);
+gboolean _clutter_event_process_filters (ClutterEvent *event);
+
/* clears the event queue inside the main context */
void _clutter_clear_events_queue (void);
void _clutter_clear_events_queue_for_stage (ClutterStage *stage);
@@ -19,6 +21,13 @@ void _clutter_event_set_platform_data (ClutterEvent *eve
gpointer data);
gpointer _clutter_event_get_platform_data (const ClutterEvent *event);
+void _clutter_event_set_state_full (ClutterEvent *event,
+ ClutterModifierType button_state,
+ ClutterModifierType base_state,
+ ClutterModifierType latched_state,
+ ClutterModifierType locked_state,
+ ClutterModifierType effective_state);
+
void _clutter_event_push (const ClutterEvent *event,
gboolean do_copy);
diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c
index 2547572ca..26d561153 100644
--- a/clutter/clutter-event.c
+++ b/clutter/clutter-event.c
@@ -56,15 +56,46 @@ typedef struct _ClutterEventPrivate {
gpointer platform_data;
+ ClutterModifierType button_state;
+ ClutterModifierType base_state;
+ ClutterModifierType latched_state;
+ ClutterModifierType locked_state;
+
guint is_pointer_emulated : 1;
} ClutterEventPrivate;
+typedef struct _ClutterEventFilter {
+ int id;
+
+ ClutterStage *stage;
+ ClutterEventFilterFunc func;
+ GDestroyNotify notify;
+ gpointer user_data;
+} ClutterEventFilter;
+
static GHashTable *all_events = NULL;
G_DEFINE_BOXED_TYPE (ClutterEvent, clutter_event,
clutter_event_copy,
clutter_event_free);
+static ClutterEventSequence *
+clutter_event_sequence_copy (ClutterEventSequence *sequence)
+{
+ /* Nothing to copy here */
+ return sequence;
+}
+
+static void
+clutter_event_sequence_free (ClutterEventSequence *sequence)
+{
+ /* Nothing to free here */
+}
+
+G_DEFINE_BOXED_TYPE (ClutterEventSequence, clutter_event_sequence,
+ clutter_event_sequence_copy,
+ clutter_event_sequence_free);
+
static gboolean
is_event_allocated (const ClutterEvent *event)
{
@@ -178,7 +209,9 @@ clutter_event_set_time (ClutterEvent *event,
* clutter_event_get_state:
* @event: a #ClutterEvent
*
- * Retrieves the modifier state of the event.
+ * Retrieves the modifier state of the event. In case the window system
+ * supports reporting latched and locked modifiers, this function returns
+ * the effective state.
*
* Return value: the modifier state parameter, or 0
*
@@ -265,6 +298,63 @@ clutter_event_set_state (ClutterEvent *event,
}
}
+void
+_clutter_event_set_state_full (ClutterEvent *event,
+ ClutterModifierType button_state,
+ ClutterModifierType base_state,
+ ClutterModifierType latched_state,
+ ClutterModifierType locked_state,
+ ClutterModifierType effective_state)
+{
+ ClutterEventPrivate *private = (ClutterEventPrivate*) event;
+
+ private->button_state = button_state;
+ private->base_state = base_state;
+ private->latched_state = latched_state;
+ private->locked_state = locked_state;
+
+ clutter_event_set_state (event, effective_state);
+}
+
+/**
+ * clutter_event_get_state_full:
+ * @event: a #ClutterEvent
+ * @button_state: (out) (allow-none): the pressed buttons as a mask
+ * @base_state: (out) (allow-none): the regular pressed modifier keys
+ * @latched_state: (out) (allow-none): the latched modifier keys (currently released but still valid for one key press/release)
+ * @locked_state: (out) (allow-none): the locked modifier keys (valid until the lock key is pressed and released again)
+ * @effective_state: (out) (allow-none): the logical OR of all the state bits above
+ *
+ * Retrieves the decomposition of the keyboard state into button, base,
+ * latched, locked and effective. This can be used to transmit to other
+ * applications, for example when implementing a wayland compositor.
+ *
+ * Since: 1.16
+ */
+void
+clutter_event_get_state_full (const ClutterEvent *event,
+ ClutterModifierType *button_state,
+ ClutterModifierType *base_state,
+ ClutterModifierType *latched_state,
+ ClutterModifierType *locked_state,
+ ClutterModifierType *effective_state)
+{
+ const ClutterEventPrivate *private = (const ClutterEventPrivate*) event;
+
+ g_return_if_fail (event != NULL);
+
+ if (button_state)
+ *button_state = private->button_state;
+ if (base_state)
+ *base_state = private->base_state;
+ if (latched_state)
+ *latched_state = private->latched_state;
+ if (locked_state)
+ *locked_state = private->locked_state;
+ if (effective_state)
+ *effective_state = clutter_event_get_state (event);
+}
+
/**
* clutter_event_get_coords:
* @event: a #ClutterEvent
@@ -1015,6 +1105,8 @@ clutter_event_set_device (ClutterEvent *event,
* @event: a #ClutterEvent
*
* Retrieves the #ClutterInputDevice for the event.
+ * If you want the physical device the event originated from, use
+ * clutter_event_get_source_device().
*
* The #ClutterInputDevice structure is completely opaque and should
* be cast to the platform-specific implementation.
@@ -1143,6 +1235,10 @@ clutter_event_copy (const ClutterEvent *event)
new_real_event->delta_x = real_event->delta_x;
new_real_event->delta_y = real_event->delta_y;
new_real_event->is_pointer_emulated = real_event->is_pointer_emulated;
+ new_real_event->base_state = real_event->base_state;
+ new_real_event->button_state = real_event->button_state;
+ new_real_event->latched_state = real_event->latched_state;
+ new_real_event->locked_state = real_event->locked_state;
}
device = clutter_event_get_device (event);
@@ -1650,3 +1746,100 @@ clutter_event_is_pointer_emulated (const ClutterEvent *event)
return ((ClutterEventPrivate *) event)->is_pointer_emulated;
}
+
+gboolean
+_clutter_event_process_filters (ClutterEvent *event)
+{
+ ClutterMainContext *context = _clutter_context_get_default ();
+ GList *l, *next;
+
+ /* Event filters are handled in order from least recently added to
+ * most recently added */
+
+ for (l = context->event_filters; l; l = next)
+ {
+ ClutterEventFilter *event_filter = l->data;
+
+ next = l->next;
+
+ if (event_filter->stage && event_filter->stage != event->any.stage)
+ continue;
+
+ if (event_filter->func (event, event_filter->user_data) == CLUTTER_EVENT_STOP)
+ return CLUTTER_EVENT_STOP;
+ }
+
+ return CLUTTER_EVENT_PROPAGATE;
+}
+
+/**
+ * clutter_event_add_filter:
+ * @stage: (allow-none): The #ClutterStage to capture events for
+ * @func: The callback function which will be passed all events.
+ * @notify: A #GDestroyNotify
+ * @user_data: A data pointer to pass to the function.
+ *
+ * Adds a function which will be called for all events that Clutter
+ * processes. The function will be called before any signals are
+ * emitted for the event and it will take precedence over any grabs.
+ *
+ * Return value: an identifier for the event filter, to be used
+ * with clutter_event_remove_filter().
+ *
+ * Since: 1.18
+ */
+guint
+clutter_event_add_filter (ClutterStage *stage,
+ ClutterEventFilterFunc func,
+ GDestroyNotify notify,
+ gpointer user_data)
+{
+ ClutterMainContext *context = _clutter_context_get_default ();
+ ClutterEventFilter *event_filter = g_slice_new (ClutterEventFilter);
+ static guint event_filter_id = 0;
+
+ event_filter->stage = stage;
+ event_filter->id = ++event_filter_id;
+ event_filter->func = func;
+ event_filter->notify = notify;
+ event_filter->user_data = user_data;
+
+ /* The event filters are kept in order from least recently added to
+ * most recently added so we must add it to the end */
+ context->event_filters = g_list_append (context->event_filters, event_filter);
+
+ return event_filter->id;
+}
+
+/**
+ * clutter_event_remove_filter:
+ * @id: The ID of the event filter, as returned from clutter_event_add_filter()
+ *
+ * Removes an event filter that was previously added with
+ * clutter_event_add_filter().
+ *
+ * Since: 1.18
+ */
+void
+clutter_event_remove_filter (guint id)
+{
+ ClutterMainContext *context = _clutter_context_get_default ();
+ GList *l;
+
+ for (l = context->event_filters; l; l = l->next)
+ {
+ ClutterEventFilter *event_filter = l->data;
+
+ if (event_filter->id == id)
+ {
+ if (event_filter->notify)
+ event_filter->notify (event_filter->user_data);
+
+ context->event_filters = g_list_delete_link (context->event_filters, l);
+ g_slice_free (ClutterEventFilter, event_filter);
+ return;
+ }
+ }
+
+ g_warning ("No event filter found for id: %d\n", id);
+}
diff --git a/clutter/clutter-event.h b/clutter/clutter-event.h
index 65ba1511f..9e3969349 100644
--- a/clutter/clutter-event.h
+++ b/clutter/clutter-event.h
@@ -34,6 +34,7 @@
G_BEGIN_DECLS
#define CLUTTER_TYPE_EVENT (clutter_event_get_type ())
+#define CLUTTER_TYPE_EVENT_SEQUENCE (clutter_event_sequence_get_type ())
/**
* CLUTTER_PRIORITY_EVENTS:
@@ -146,7 +147,8 @@ struct _ClutterAnyEvent
* @keyval: raw key value
* @hardware_keycode: raw hardware key value
* @unicode_value: Unicode representation
- * @device: reserved for future use
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
*
* Key event
*
@@ -181,7 +183,8 @@ struct _ClutterKeyEvent
* @click_count: number of button presses within the default time
* and radius
* @axes: reserved for future use
- * @device: reserved for future use
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
*
* Button event.
*
@@ -218,7 +221,8 @@ struct _ClutterButtonEvent
* @x: event X coordinate
* @y: event Y coordinate
* @related: actor related to the crossing
- * @device: reserved for future use
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
*
* Event for the movement of the pointer across different actors
*
@@ -249,7 +253,8 @@ struct _ClutterCrossingEvent
* @y: event Y coordinate
* @modifier_state: button modifiers
* @axes: reserved for future use
- * @device: reserved for future use
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
*
* Event for the pointer motion
*
@@ -282,7 +287,8 @@ struct _ClutterMotionEvent
* @direction: direction of the scrolling
* @modifier_state: button modifiers
* @axes: reserved for future use
- * @device: reserved for future use
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
*
* Scroll wheel (or similar device) event
*
@@ -344,7 +350,8 @@ struct _ClutterStageStateEvent
* of modifier keys (e.g. Control, Shift, and Alt) and the pointer
* buttons. See #ClutterModifierType
* @axes: reserved
- * @device: the device that originated the event
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
*
* Used for touch events.
*
@@ -399,47 +406,108 @@ union _ClutterEvent
ClutterTouchEvent touch;
};
+/**
+ * ClutterEventFilterFunc:
+ * @event: the event that is going to be emitted
+ * @user_data: the data pointer passed to clutter_event_add_filter()
+ *
+ * A function pointer type used by event filters that are added with
+ * clutter_event_add_filter().
+ *
+ * Return value: %CLUTTER_EVENT_STOP to indicate that the event
+ * has been handled or %CLUTTER_EVENT_PROPAGATE otherwise.
+ * Returning %CLUTTER_EVENT_STOP skips any further filter
+ * functions and prevents the signal emission for the event.
+ *
+ * Since: 1.18
+ */
+typedef gboolean (* ClutterEventFilterFunc) (const ClutterEvent *event,
+ gpointer user_data);
+
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_event_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_20
+GType clutter_event_sequence_get_type (void) G_GNUC_CONST;
+
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_events_pending (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterEvent * clutter_event_get (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterEvent * clutter_event_peek (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_event_put (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_18
+guint clutter_event_add_filter (ClutterStage *stage,
+ ClutterEventFilterFunc func,
+ GDestroyNotify notify,
+ gpointer user_data);
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_event_remove_filter (guint id);
+
+CLUTTER_AVAILABLE_IN_ALL
ClutterEvent * clutter_event_new (ClutterEventType type);
+CLUTTER_AVAILABLE_IN_ALL
ClutterEvent * clutter_event_copy (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_event_free (ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_ALL
ClutterEventType clutter_event_type (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_flags (ClutterEvent *event,
ClutterEventFlags flags);
+CLUTTER_AVAILABLE_IN_1_0
ClutterEventFlags clutter_event_get_flags (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_time (ClutterEvent *event,
guint32 time_);
+CLUTTER_AVAILABLE_IN_ALL
guint32 clutter_event_get_time (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_state (ClutterEvent *event,
ClutterModifierType state);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModifierType clutter_event_get_state (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_event_get_state_full (const ClutterEvent *event,
+ ClutterModifierType *button_state,
+ ClutterModifierType *base_state,
+ ClutterModifierType *latched_state,
+ ClutterModifierType *locked_state,
+ ClutterModifierType *effective_state);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_event_set_device (ClutterEvent *event,
ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_6
ClutterInputDevice * clutter_event_get_device (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_event_set_source_device (ClutterEvent *event,
ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_6
ClutterInputDevice * clutter_event_get_source_device (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_source (ClutterEvent *event,
ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_event_get_source (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_stage (ClutterEvent *event,
ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
ClutterStage * clutter_event_get_stage (const ClutterEvent *event);
-
+CLUTTER_AVAILABLE_IN_ALL
gint clutter_event_get_device_id (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_0
ClutterInputDeviceType clutter_event_get_device_type (const ClutterEvent *event);
-
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_coords (ClutterEvent *event,
gfloat x,
gfloat y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_event_get_coords (const ClutterEvent *event,
gfloat *x,
gfloat *y);
@@ -452,38 +520,46 @@ float clutter_event_get_distance (const ClutterEv
CLUTTER_AVAILABLE_IN_1_12
double clutter_event_get_angle (const ClutterEvent *source,
const ClutterEvent *target);
-
+CLUTTER_AVAILABLE_IN_1_6
gdouble * clutter_event_get_axes (const ClutterEvent *event,
guint *n_axes);
-
CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_event_has_shift_modifier (const ClutterEvent *event);
CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_event_has_control_modifier (const ClutterEvent *event);
CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_event_is_pointer_emulated (const ClutterEvent *event);
-
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_key_symbol (ClutterEvent *event,
guint key_sym);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_event_get_key_symbol (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_key_code (ClutterEvent *event,
guint16 key_code);
+CLUTTER_AVAILABLE_IN_1_0
guint16 clutter_event_get_key_code (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_key_unicode (ClutterEvent *event,
gunichar key_unicode);
+CLUTTER_AVAILABLE_IN_1_0
gunichar clutter_event_get_key_unicode (const ClutterEvent *event);
-
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_button (ClutterEvent *event,
guint32 button);
+CLUTTER_AVAILABLE_IN_1_0
guint32 clutter_event_get_button (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_event_get_click_count (const ClutterEvent *event);
-
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_related (ClutterEvent *event,
ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_1_0
ClutterActor * clutter_event_get_related (const ClutterEvent *event);
-
+CLUTTER_AVAILABLE_IN_1_8
void clutter_event_set_scroll_direction (ClutterEvent *event,
ClutterScrollDirection direction);
+CLUTTER_AVAILABLE_IN_1_0
ClutterScrollDirection clutter_event_get_scroll_direction (const ClutterEvent *event);
CLUTTER_AVAILABLE_IN_1_10
void clutter_event_set_scroll_delta (ClutterEvent *event,
@@ -497,11 +573,14 @@ void clutter_event_get_scroll_delta (const ClutterEv
CLUTTER_AVAILABLE_IN_1_10
ClutterEventSequence * clutter_event_get_event_sequence (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_ALL
guint32 clutter_keysym_to_unicode (guint keyval);
CLUTTER_AVAILABLE_IN_1_10
guint clutter_unicode_to_keysym (guint32 wc);
+CLUTTER_AVAILABLE_IN_1_0
guint32 clutter_get_current_event_time (void);
+CLUTTER_AVAILABLE_IN_1_2
const ClutterEvent * clutter_get_current_event (void);
G_END_DECLS
diff --git a/clutter/clutter-feature.h b/clutter/clutter-feature.h
index 4242ce0fb..083f1a9cc 100644
--- a/clutter/clutter-feature.h
+++ b/clutter/clutter-feature.h
@@ -32,7 +32,9 @@
G_BEGIN_DECLS
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_feature_available (ClutterFeatureFlags feature);
+CLUTTER_AVAILABLE_IN_ALL
ClutterFeatureFlags clutter_feature_get_all (void);
G_END_DECLS
diff --git a/clutter/clutter-fixed-layout.h b/clutter/clutter-fixed-layout.h
index 32273bc00..a64d900a9 100644
--- a/clutter/clutter-fixed-layout.h
+++ b/clutter/clutter-fixed-layout.h
@@ -71,8 +71,10 @@ struct _ClutterFixedLayoutClass
ClutterLayoutManagerClass parent_class;
};
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_fixed_layout_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
ClutterLayoutManager *clutter_fixed_layout_new (void);
G_END_DECLS
diff --git a/clutter/clutter-flow-layout.c b/clutter/clutter-flow-layout.c
index 97524b219..064566643 100644
--- a/clutter/clutter-flow-layout.c
+++ b/clutter/clutter-flow-layout.c
@@ -29,40 +29,25 @@
* #ClutterFlowLayout is a layout manager which implements the following
* policy:
*
- *
- * the preferred natural size depends on the value
+ * - the preferred natural size depends on the value
* of the #ClutterFlowLayout:orientation property; the layout will try
* to maintain all its children on a single row or
- * column;
- * if either the width or the height allocated are
+ * column;
+ * - if either the width or the height allocated are
* smaller than the preferred ones, the layout will wrap; in this case,
* the preferred height or width, respectively, will take into account
- * the amount of columns and rows;
- * each line (either column or row) in reflowing will
+ * the amount of columns and rows;
+ * - each line (either column or row) in reflowing will
* have the size of the biggest cell on that line; if the
* #ClutterFlowLayout:homogeneous property is set to %FALSE the actor
* will be allocated within that area, and if set to %TRUE instead the
- * actor will be given exactly that area;
- * the size of the columns or rows can be controlled
+ * actor will be given exactly that area;
+ * - the size of the columns or rows can be controlled
* for both minimum and maximum; the spacing can also be controlled
- * in both columns and rows.
- *
+ * in both columns and rows.
*
- *
- * Horizontal flow layout
- * The image shows a #ClutterFlowLayout with the
- * #ClutterFlowLayout:orientation propert set to
- * %CLUTTER_FLOW_HORIZONTAL.
- *
- *
- *
- *
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
+ * The [flow-layout example](https://git.gnome.org/browse/clutter/tree/examples/flow-layout.c?h=clutter-1.18)
+ * shows how to use the #ClutterFlowLayout.
*
* #ClutterFlowLayout is available since Clutter 1.2
*/
@@ -85,8 +70,6 @@
#include "clutter-layout-meta.h"
#include "clutter-private.h"
-#define CLUTTER_FLOW_LAYOUT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_FLOW_LAYOUT, ClutterFlowLayoutPrivate))
-
struct _ClutterFlowLayoutPrivate
{
ClutterContainer *container;
@@ -113,6 +96,7 @@ struct _ClutterFlowLayoutPrivate
guint line_count;
guint is_homogeneous : 1;
+ guint snap_to_grid : 1;
};
enum
@@ -131,14 +115,16 @@ enum
PROP_MIN_ROW_HEGHT,
PROP_MAX_ROW_HEIGHT,
+ PROP_SNAP_TO_GRID,
+
N_PROPERTIES
};
static GParamSpec *flow_properties[N_PROPERTIES] = { NULL, };
-G_DEFINE_TYPE (ClutterFlowLayout,
- clutter_flow_layout,
- CLUTTER_TYPE_LAYOUT_MANAGER);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterFlowLayout,
+ clutter_flow_layout,
+ CLUTTER_TYPE_LAYOUT_MANAGER)
static gint
get_columns (ClutterFlowLayout *self,
@@ -258,7 +244,12 @@ clutter_flow_layout_get_preferred_width (ClutterLayoutManager *manager,
if (priv->orientation == CLUTTER_FLOW_VERTICAL && for_height > 0)
{
- if (line_item_count == n_rows)
+ clutter_actor_get_preferred_height (child, -1,
+ &child_min,
+ &child_natural);
+
+ if ((priv->snap_to_grid && line_item_count == n_rows) ||
+ (!priv->snap_to_grid && item_y + child_natural > for_height))
{
total_min_width += line_min_width;
total_natural_width += line_natural_width;
@@ -275,9 +266,17 @@ clutter_flow_layout_get_preferred_width (ClutterLayoutManager *manager,
item_y = 0;
}
- new_y = ((line_item_count + 1) * (for_height + priv->row_spacing))
- / n_rows;
- item_height = new_y - item_y - priv->row_spacing;
+ if (priv->snap_to_grid)
+ {
+ new_y = ((line_item_count + 1) * (for_height + priv->row_spacing))
+ / n_rows;
+ item_height = new_y - item_y - priv->row_spacing;
+ }
+ else
+ {
+ new_y = item_y + child_natural + priv->row_spacing;
+ item_height = child_natural;
+ }
clutter_actor_get_preferred_width (child, item_height,
&child_min,
@@ -436,7 +435,12 @@ clutter_flow_layout_get_preferred_height (ClutterLayoutManager *manager,
if (priv->orientation == CLUTTER_FLOW_HORIZONTAL && for_width > 0)
{
- if (line_item_count == n_columns)
+ clutter_actor_get_preferred_width (child, -1,
+ &child_min,
+ &child_natural);
+
+ if ((priv->snap_to_grid && line_item_count == n_columns) ||
+ (!priv->snap_to_grid && item_x + child_natural > for_width))
{
total_min_height += line_min_height;
total_natural_height += line_natural_height;
@@ -453,9 +457,17 @@ clutter_flow_layout_get_preferred_height (ClutterLayoutManager *manager,
item_x = 0;
}
- new_x = ((line_item_count + 1) * (for_width + priv->col_spacing))
- / n_columns;
- item_width = new_x - item_x - priv->col_spacing;
+ if (priv->snap_to_grid)
+ {
+ new_x = ((line_item_count + 1) * (for_width + priv->col_spacing))
+ / n_columns;
+ item_width = new_x - item_x - priv->col_spacing;
+ }
+ else
+ {
+ new_x = item_x + child_natural + priv->col_spacing;
+ item_width = child_natural;
+ }
clutter_actor_get_preferred_height (child, item_width,
&child_min,
@@ -606,15 +618,24 @@ clutter_flow_layout_allocate (ClutterLayoutManager *manager,
ClutterActorBox child_alloc;
gfloat item_width, item_height;
gfloat new_x, new_y;
+ gfloat child_min, child_natural;
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
continue;
new_x = new_y = 0;
+ if (!priv->snap_to_grid)
+ clutter_actor_get_preferred_size (child,
+ NULL, NULL,
+ &item_width,
+ &item_height);
+
if (priv->orientation == CLUTTER_FLOW_HORIZONTAL)
{
- if (line_item_count == items_per_line && line_item_count > 0)
+ if ((priv->snap_to_grid &&
+ line_item_count == items_per_line && line_item_count > 0) ||
+ (!priv->snap_to_grid && item_x + item_width > avail_width))
{
item_y += g_array_index (priv->line_natural,
gfloat,
@@ -629,31 +650,27 @@ clutter_flow_layout_allocate (ClutterLayoutManager *manager,
item_x = x_off;
}
- new_x = x_off + ((line_item_count + 1) * (avail_width + priv->col_spacing))
- / items_per_line;
- item_width = new_x - item_x - priv->col_spacing;
+ if (priv->snap_to_grid)
+ {
+ new_x = x_off + ((line_item_count + 1) * (avail_width + priv->col_spacing))
+ / items_per_line;
+ item_width = new_x - item_x - priv->col_spacing;
+ }
+ else
+ {
+ new_x = item_x + item_width + priv->col_spacing;
+ }
+
item_height = g_array_index (priv->line_natural,
gfloat,
line_index);
- if (!priv->is_homogeneous)
- {
- gfloat child_min, child_natural;
-
- clutter_actor_get_preferred_width (child, item_height,
- &child_min,
- &child_natural);
- item_width = MIN (item_width, child_natural);
-
- clutter_actor_get_preferred_height (child, item_width,
- &child_min,
- &child_natural);
- item_height = MIN (item_height, child_natural);
- }
}
else
{
- if (line_item_count == items_per_line && line_item_count > 0)
+ if ((priv->snap_to_grid &&
+ line_item_count == items_per_line && line_item_count > 0) ||
+ (!priv->snap_to_grid && item_y + item_height > avail_height))
{
item_x += g_array_index (priv->line_natural,
gfloat,
@@ -668,27 +685,40 @@ clutter_flow_layout_allocate (ClutterLayoutManager *manager,
item_y = y_off;
}
- new_y = y_off + ((line_item_count + 1) * (avail_height + priv->row_spacing))
- / items_per_line;
- item_height = new_y - item_y - priv->row_spacing;
+ if (priv->snap_to_grid)
+ {
+ new_y = y_off + ((line_item_count + 1) * (avail_height + priv->row_spacing))
+ / items_per_line;
+ item_height = new_y - item_y - priv->row_spacing;
+ }
+ else
+ {
+ new_y = item_y + item_height + priv->row_spacing;
+ }
+
item_width = g_array_index (priv->line_natural,
gfloat,
line_index);
+ }
- if (!priv->is_homogeneous)
- {
- gfloat child_min, child_natural;
+ if (!priv->is_homogeneous &&
+ !clutter_actor_needs_expand (child,
+ CLUTTER_ORIENTATION_HORIZONTAL))
+ {
+ clutter_actor_get_preferred_width (child, item_height,
+ &child_min,
+ &child_natural);
+ item_width = MIN (item_width, child_natural);
+ }
- clutter_actor_get_preferred_width (child, item_height,
- &child_min,
- &child_natural);
- item_width = MIN (item_width, child_natural);
-
- clutter_actor_get_preferred_height (child, item_width,
- &child_min,
- &child_natural);
- item_height = MIN (item_height, child_natural);
- }
+ if (!priv->is_homogeneous &&
+ !clutter_actor_needs_expand (child,
+ CLUTTER_ORIENTATION_VERTICAL))
+ {
+ clutter_actor_get_preferred_height (child, item_width,
+ &child_min,
+ &child_natural);
+ item_height = MIN (item_height, child_natural);
}
CLUTTER_NOTE (LAYOUT,
@@ -789,6 +819,11 @@ clutter_flow_layout_set_property (GObject *gobject,
g_value_get_float (value));
break;
+ case PROP_SNAP_TO_GRID:
+ clutter_flow_layout_set_snap_to_grid (self,
+ g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -837,6 +872,10 @@ clutter_flow_layout_get_property (GObject *gobject,
g_value_set_float (value, priv->max_row_height);
break;
+ case PROP_SNAP_TO_GRID:
+ g_value_set_boolean (value, priv->snap_to_grid);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -863,8 +902,6 @@ clutter_flow_layout_class_init (ClutterFlowLayoutClass *klass)
GObjectClass *gobject_class;
ClutterLayoutManagerClass *layout_class;
- g_type_class_add_private (klass, sizeof (ClutterFlowLayoutPrivate));
-
gobject_class = G_OBJECT_CLASS (klass);
layout_class = CLUTTER_LAYOUT_MANAGER_CLASS (klass);
@@ -1004,6 +1041,21 @@ clutter_flow_layout_class_init (ClutterFlowLayoutClass *klass)
-1.0,
CLUTTER_PARAM_READWRITE);
+ /**
+ * ClutterFlowLayout:snap-to-grid:
+ *
+ * Whether the #ClutterFlowLayout should arrange its children
+ * on a grid
+ *
+ * Since: 1.16
+ */
+ flow_properties[PROP_SNAP_TO_GRID] =
+ g_param_spec_boolean ("snap-to-grid",
+ P_("Snap to grid"),
+ P_("Snap to grid"),
+ TRUE,
+ CLUTTER_PARAM_READWRITE);
+
gobject_class->finalize = clutter_flow_layout_finalize;
gobject_class->set_property = clutter_flow_layout_set_property;
gobject_class->get_property = clutter_flow_layout_get_property;
@@ -1017,7 +1069,7 @@ clutter_flow_layout_init (ClutterFlowLayout *self)
{
ClutterFlowLayoutPrivate *priv;
- self->priv = priv = CLUTTER_FLOW_LAYOUT_GET_PRIVATE (self);
+ self->priv = priv = clutter_flow_layout_get_instance_private (self);
priv->orientation = CLUTTER_FLOW_HORIZONTAL;
@@ -1029,6 +1081,7 @@ clutter_flow_layout_init (ClutterFlowLayout *self)
priv->line_min = NULL;
priv->line_natural = NULL;
+ priv->snap_to_grid = TRUE;
}
/**
@@ -1434,3 +1487,51 @@ clutter_flow_layout_get_row_height (ClutterFlowLayout *layout,
if (max_height)
*max_height = layout->priv->max_row_height;
}
+
+/**
+ * clutter_flow_layout_set_snap_to_grid:
+ * @layout: a #ClutterFlowLayout
+ * @snap_to_grid: %TRUE if @layout should place its children on a grid
+ *
+ * Whether the @layout should place its children on a grid.
+ *
+ * Since: 1.16
+ */
+void
+clutter_flow_layout_set_snap_to_grid (ClutterFlowLayout *layout,
+ gboolean snap_to_grid)
+{
+ ClutterFlowLayoutPrivate *priv;
+
+ g_return_if_fail (CLUTTER_IS_FLOW_LAYOUT (layout));
+
+ priv = layout->priv;
+
+ if (priv->snap_to_grid != snap_to_grid)
+ {
+ priv->snap_to_grid = snap_to_grid;
+
+ clutter_layout_manager_layout_changed (CLUTTER_LAYOUT_MANAGER (layout));
+
+ g_object_notify_by_pspec (G_OBJECT (layout),
+ flow_properties[PROP_SNAP_TO_GRID]);
+ }
+}
+
+/**
+ * clutter_flow_layout_get_snap_to_grid:
+ * @layout: a #ClutterFlowLayout
+ *
+ * Retrieves the value of #ClutterFlowLayout:snap-to-grid property
+ *
+ * Return value: %TRUE if the @layout is placing its children on a grid
+ *
+ * Since: 1.16
+ */
+gboolean
+clutter_flow_layout_get_snap_to_grid (ClutterFlowLayout *layout)
+{
+ g_return_val_if_fail (CLUTTER_IS_FLOW_LAYOUT (layout), FALSE);
+
+ return layout->priv->snap_to_grid;
+}
diff --git a/clutter/clutter-flow-layout.h b/clutter/clutter-flow-layout.h
index abbf82c85..f552c54a6 100644
--- a/clutter/clutter-flow-layout.h
+++ b/clutter/clutter-flow-layout.h
@@ -74,36 +74,55 @@ struct _ClutterFlowLayoutClass
ClutterLayoutManagerClass parent_class;
};
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_flow_layout_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
ClutterLayoutManager * clutter_flow_layout_new (ClutterFlowOrientation orientation);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_set_orientation (ClutterFlowLayout *layout,
ClutterFlowOrientation orientation);
+CLUTTER_AVAILABLE_IN_1_2
ClutterFlowOrientation clutter_flow_layout_get_orientation (ClutterFlowLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_set_homogeneous (ClutterFlowLayout *layout,
gboolean homogeneous);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_flow_layout_get_homogeneous (ClutterFlowLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_set_column_spacing (ClutterFlowLayout *layout,
gfloat spacing);
+CLUTTER_AVAILABLE_IN_1_2
gfloat clutter_flow_layout_get_column_spacing (ClutterFlowLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_set_row_spacing (ClutterFlowLayout *layout,
gfloat spacing);
+CLUTTER_AVAILABLE_IN_1_2
gfloat clutter_flow_layout_get_row_spacing (ClutterFlowLayout *layout);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_set_column_width (ClutterFlowLayout *layout,
gfloat min_width,
gfloat max_width);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_get_column_width (ClutterFlowLayout *layout,
gfloat *min_width,
gfloat *max_width);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_set_row_height (ClutterFlowLayout *layout,
gfloat min_height,
gfloat max_height);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_flow_layout_get_row_height (ClutterFlowLayout *layout,
gfloat *min_height,
gfloat *max_height);
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_flow_layout_set_snap_to_grid (ClutterFlowLayout *layout,
+ gboolean snap_to_grid);
+CLUTTER_AVAILABLE_IN_1_16
+gboolean clutter_flow_layout_get_snap_to_grid (ClutterFlowLayout *layout);
G_END_DECLS
diff --git a/clutter/clutter-gesture-action-private.h b/clutter/clutter-gesture-action-private.h
index d3eb8659a..cd804abc7 100644
--- a/clutter/clutter-gesture-action-private.h
+++ b/clutter/clutter-gesture-action-private.h
@@ -26,34 +26,6 @@
G_BEGIN_DECLS
-/*< private >
- * ClutterGestureTriggerEdge:
- * @CLUTTER_GESTURE_TRIGGER_NONE: Tell #ClutterGestureAction that
- * the gesture must begin immediately and there's no drag limit that
- * will cause its cancellation;
- * @CLUTTER_GESTURE_TRIGGER_AFTER: Tell #ClutterGestureAction that
- * it needs to wait until the drag threshold has been exceeded before
- * considering that the gesture has begun;
- * @CLUTTER_GESTURE_TRIGGER_BEFORE: Tell #ClutterGestureAction that
- * the gesture must begin immegiately and that it must be cancelled
- * once the drag exceed the configured threshold.
- *
- * Enum passed to the _clutter_gesture_action_set_threshold_trigger_edge()
- * function.
- *
- * Since: 1.14
- */
-typedef enum
-{
- CLUTTER_GESTURE_TRIGGER_EDGE_NONE = 0,
- CLUTTER_GESTURE_TRIGGER_EDGE_AFTER,
- CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE
-} ClutterGestureTriggerEdge;
-
-
-void _clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
- ClutterGestureTriggerEdge edge);
-
G_END_DECLS
#endif /* __CLUTTER_GESTURE_ACTION_PRIVATE_H__ */
diff --git a/clutter/clutter-gesture-action.c b/clutter/clutter-gesture-action.c
index 751555a44..6eca26f9c 100644
--- a/clutter/clutter-gesture-action.c
+++ b/clutter/clutter-gesture-action.c
@@ -38,7 +38,7 @@
* To use #ClutterGestureAction you just need to apply it to a #ClutterActor
* using clutter_actor_add_action() and connect to the signals:
*
- * |[
+ * |[
* ClutterAction *action = clutter_gesture_action_new ();
*
* clutter_actor_add_action (actor, action);
@@ -48,37 +48,37 @@
* g_signal_connect (action, "gesture-end", G_CALLBACK (on_gesture_end), NULL);
* ]|
*
- *
- * Creating Gesture actions
- * A #ClutterGestureAction provides four separate states that can be
- * used to recognize or ignore gestures when writing a new action class:
- * Cancel
- Prepare -> Begin -> Cancel
- Prepare -> Begin -> End
- Prepare -> Begin -> Progress -> Cancel
- Prepare -> Begin -> Progress -> End
- * ]]>
- *
- * Each #ClutterGestureAction starts in the "prepare" state, and calls
- * the #ClutterGestureActionClass.gesture_prepare() virtual function; this
- * state can be used to reset the internal state of a #ClutterGestureAction
- * subclass, but it can also immediately cancel a gesture without going
- * through the rest of the states.
- * The "begin" state follows the "prepare" state, and calls the
- * #ClutterGestureActionClass.gesture_begin() virtual function. This state
- * signals the start of a gesture recognizing process. From the "begin" state
- * the gesture recognition process can successfully end, by going to the
- * "end" state; it can continue in the "progress" state, in case of a
- * continuous gesture; or it can be terminated, by moving to the "cancel"
- * state.
- * In case of continuous gestures, the #ClutterGestureAction will use
- * the "progress" state, calling the #ClutterGestureActionClass.gesture_progress()
- * virtual function; the "progress" state will continue until the end of the
- * gesture, in which case the "end" state will be reached, or until the
- * gesture is cancelled, in which case the "cancel" gesture will be used
- * instead.
- *
+ * ## Creating Gesture actions
+ *
+ * A #ClutterGestureAction provides four separate states that can be
+ * used to recognize or ignore gestures when writing a new action class:
+ *
+ * - Prepare -> Cancel
+ * - Prepare -> Begin -> Cancel
+ * - Prepare -> Begin -> End
+ * - Prepare -> Begin -> Progress -> Cancel
+ * - Prepare -> Begin -> Progress -> End
+ *
+ * Each #ClutterGestureAction starts in the "prepare" state, and calls
+ * the #ClutterGestureActionClass.gesture_prepare() virtual function; this
+ * state can be used to reset the internal state of a #ClutterGestureAction
+ * subclass, but it can also immediately cancel a gesture without going
+ * through the rest of the states.
+ *
+ * The "begin" state follows the "prepare" state, and calls the
+ * #ClutterGestureActionClass.gesture_begin() virtual function. This state
+ * signals the start of a gesture recognizing process. From the "begin" state
+ * the gesture recognition process can successfully end, by going to the
+ * "end" state; it can continue in the "progress" state, in case of a
+ * continuous gesture; or it can be terminated, by moving to the "cancel"
+ * state.
+ *
+ * In case of continuous gestures, the #ClutterGestureAction will use
+ * the "progress" state, calling the #ClutterGestureActionClass.gesture_progress()
+ * virtual function; the "progress" state will continue until the end of the
+ * gesture, in which case the "end" state will be reached, or until the
+ * gesture is cancelled, in which case the "cancel" gesture will be used
+ * instead.
*
* Since: 1.8
*/
@@ -124,10 +124,23 @@ struct _ClutterGestureActionPrivate
gulong stage_capture_id;
ClutterGestureTriggerEdge edge;
+ float distance_x, distance_y;
guint in_gesture : 1;
};
+enum
+{
+ PROP_0,
+
+ PROP_N_TOUCH_POINTS,
+ PROP_THRESHOLD_TRIGGER_EDGE,
+ PROP_THRESHOLD_TRIGGER_DISTANCE_X,
+ PROP_THRESHOLD_TRIGGER_DISTANCE_Y,
+
+ PROP_LAST
+};
+
enum
{
GESTURE_BEGIN,
@@ -138,9 +151,10 @@ enum
LAST_SIGNAL
};
+static GParamSpec *gesture_props[PROP_LAST];
static guint gesture_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterGestureAction, clutter_gesture_action, CLUTTER_TYPE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterGestureAction, clutter_gesture_action, CLUTTER_TYPE_ACTION)
static GesturePoint *
gesture_register_point (ClutterGestureAction *action, ClutterEvent *event)
@@ -210,11 +224,54 @@ gesture_unregister_point (ClutterGestureAction *action, gint position)
{
ClutterGestureActionPrivate *priv = action->priv;
+ if (action->priv->points->len == 0)
+ return;
+
g_array_remove_index (priv->points, position);
}
+static void
+gesture_update_motion_point (GesturePoint *point,
+ ClutterEvent *event)
+{
+ gfloat motion_x, motion_y;
+ gint64 _time;
+
+ clutter_event_get_coords (event, &motion_x, &motion_y);
+
+ clutter_event_free (point->last_event);
+ point->last_event = clutter_event_copy (event);
+
+ point->last_delta_x = motion_x - point->last_motion_x;
+ point->last_delta_y = motion_y - point->last_motion_y;
+ point->last_motion_x = motion_x;
+ point->last_motion_y = motion_y;
+
+ _time = clutter_event_get_time (event);
+ point->last_delta_time = _time - point->last_motion_time;
+ point->last_motion_time = _time;
+}
+
+static void
+gesture_update_release_point (GesturePoint *point,
+ ClutterEvent *event)
+{
+ gint64 _time;
+
+ clutter_event_get_coords (event, &point->release_x, &point->release_y);
+
+ clutter_event_free (point->last_event);
+ point->last_event = clutter_event_copy (event);
+
+ /* Treat the release event as the continuation of the last motion,
+ * in case the user keeps the pointer still for a while before
+ * releasing it. */
+ _time = clutter_event_get_time (event);
+ point->last_delta_time += _time - point->last_motion_time;
+}
+
static gint
-gesture_get_threshold (ClutterGestureAction *action)
+gesture_get_default_threshold (void)
{
gint threshold;
ClutterSettings *settings = clutter_settings_get_default ();
@@ -222,6 +279,23 @@ gesture_get_threshold (ClutterGestureAction *action)
return threshold;
}
+static gboolean
+gesture_point_pass_threshold (ClutterGestureAction *action,
+ GesturePoint *point,
+ ClutterEvent *event)
+{
+ float threshold_x, threshold_y;
+ gfloat motion_x, motion_y;
+
+ clutter_event_get_coords (event, &motion_x, &motion_y);
+ clutter_gesture_action_get_threshold_trigger_distance (action, &threshold_x, &threshold_y);
+
+ if ((fabsf (point->press_y - motion_y) < threshold_y) &&
+ (fabsf (point->press_x - motion_x) < threshold_x))
+ return TRUE;
+ return FALSE;
+}
+
static void
gesture_point_unset (GesturePoint *point)
{
@@ -281,17 +355,25 @@ begin_gesture (ClutterGestureAction *action,
}
static gboolean
-stage_captured_event_cb (ClutterActor *stage,
- ClutterEvent *event,
+stage_captured_event_cb (ClutterActor *stage,
+ ClutterEvent *event,
ClutterGestureAction *action)
{
ClutterGestureActionPrivate *priv = action->priv;
ClutterActor *actor;
- gint position, drag_threshold;
+ gint position;
+ float threshold_x, threshold_y;
gboolean return_value;
GesturePoint *point;
- gfloat motion_x, motion_y;
- gint64 time;
+ ClutterEventType event_type;
+
+ event_type = clutter_event_type (event);
+ if (event_type != CLUTTER_TOUCH_CANCEL &&
+ event_type != CLUTTER_TOUCH_UPDATE &&
+ event_type != CLUTTER_TOUCH_END &&
+ event_type != CLUTTER_MOTION &&
+ event_type != CLUTTER_BUTTON_RELEASE)
+ return CLUTTER_EVENT_PROPAGATE;
if ((point = gesture_find_point (action, event, &position)) == NULL)
return CLUTTER_EVENT_PROPAGATE;
@@ -317,39 +399,35 @@ stage_captured_event_cb (ClutterActor *stage,
/* Follow same code path as a touch event update */
case CLUTTER_TOUCH_UPDATE:
- clutter_event_get_coords (event,
- &motion_x,
- &motion_y);
-
- if (priv->points->len < priv->requested_nb_points)
- return CLUTTER_EVENT_PROPAGATE;
-
- drag_threshold = gesture_get_threshold (action);
-
if (!priv->in_gesture)
{
+ if (priv->points->len < priv->requested_nb_points)
+ {
+ gesture_update_motion_point (point, event);
+ return CLUTTER_EVENT_PROPAGATE;
+ }
+
/* Wait until the drag threshold has been exceeded
* before starting _TRIGGER_EDGE_AFTER gestures. */
if (priv->edge == CLUTTER_GESTURE_TRIGGER_EDGE_AFTER &&
- (fabsf (point->press_y - motion_y) < drag_threshold) &&
- (fabsf (point->press_x - motion_x) < drag_threshold))
- return CLUTTER_EVENT_PROPAGATE;
+ gesture_point_pass_threshold (action, point, event))
+ {
+ gesture_update_motion_point (point, event);
+ return CLUTTER_EVENT_PROPAGATE;
+ }
- if (!begin_gesture(action, actor))
+ if (!begin_gesture (action, actor))
+ {
+ if ((point = gesture_find_point (action, event, &position)) != NULL)
+ gesture_update_motion_point (point, event);
+ return CLUTTER_EVENT_PROPAGATE;
+ }
+
+ if ((point = gesture_find_point (action, event, &position)) == NULL)
return CLUTTER_EVENT_PROPAGATE;
}
- clutter_event_free (point->last_event);
- point->last_event = clutter_event_copy (event);
-
- point->last_delta_x = motion_x - point->last_motion_x;
- point->last_delta_y = motion_y - point->last_motion_y;
- point->last_motion_x = motion_x;
- point->last_motion_y = motion_y;
-
- time = clutter_event_get_time (event);
- point->last_delta_time = time - point->last_motion_time;
- point->last_motion_time = time;
+ gesture_update_motion_point (point, event);
g_signal_emit (action, gesture_signals[GESTURE_PROGRESS], 0, actor,
&return_value);
@@ -361,9 +439,10 @@ stage_captured_event_cb (ClutterActor *stage,
/* Check if a _TRIGGER_EDGE_BEFORE gesture needs to be cancelled because
* the drag threshold has been exceeded. */
+ clutter_gesture_action_get_threshold_trigger_distance (action, &threshold_x, &threshold_y);
if (priv->edge == CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE &&
- ((fabsf (point->press_y - motion_y) > drag_threshold) ||
- (fabsf (point->press_x - motion_x) > drag_threshold)))
+ ((fabsf (point->press_y - point->last_motion_y) > threshold_y) ||
+ (fabsf (point->press_x - point->last_motion_x) > threshold_x)))
{
cancel_gesture (action);
return CLUTTER_EVENT_PROPAGATE;
@@ -373,20 +452,11 @@ stage_captured_event_cb (ClutterActor *stage,
case CLUTTER_BUTTON_RELEASE:
case CLUTTER_TOUCH_END:
{
- clutter_event_get_coords (event, &point->release_x, &point->release_y);
-
- clutter_event_free (point->last_event);
- point->last_event = clutter_event_copy (event);
+ gesture_update_release_point (point, event);
if (priv->in_gesture &&
((priv->points->len - 1) < priv->requested_nb_points))
{
- /* Treat the release event as the continuation of the last motion,
- * in case the user keeps the pointer still for a while before
- * releasing it. */
- time = clutter_event_get_time (event);
- point->last_delta_time += time - point->last_motion_time;
-
priv->in_gesture = FALSE;
g_signal_emit (action, gesture_signals[GESTURE_END], 0, actor);
}
@@ -397,6 +467,8 @@ stage_captured_event_cb (ClutterActor *stage,
case CLUTTER_TOUCH_CANCEL:
{
+ gesture_update_release_point (point, event);
+
if (priv->in_gesture)
{
priv->in_gesture = FALSE;
@@ -411,7 +483,7 @@ stage_captured_event_cb (ClutterActor *stage,
break;
}
- if (priv->points->len == 0)
+ if (priv->points->len == 0 && priv->stage_capture_id)
{
g_signal_handler_disconnect (priv->stage, priv->stage_capture_id);
priv->stage_capture_id = 0;
@@ -448,7 +520,8 @@ actor_captured_event_cb (ClutterActor *actor,
/* Start the gesture immediately if the gesture has no
* _TRIGGER_EDGE_AFTER drag threshold. */
- if (priv->edge != CLUTTER_GESTURE_TRIGGER_EDGE_AFTER)
+ if ((priv->points->len >= priv->requested_nb_points) &&
+ (priv->edge != CLUTTER_GESTURE_TRIGGER_EDGE_AFTER))
begin_gesture (action, actor);
return CLUTTER_EVENT_PROPAGATE;
@@ -499,32 +572,95 @@ default_event_handler (ClutterGestureAction *action,
return TRUE;
}
-
-/*< private >
- * _clutter_gesture_action_set_threshold_trigger_edge:
- * @action: a #ClutterGestureAction
- * @edge: the %ClutterGestureTriggerEdge
- *
- * Sets the edge trigger for the gesture drag threshold, if any.
- *
- * This function can be called by #ClutterGestureAction subclasses that needs
- * to change the %CLUTTER_GESTURE_TRIGGER_EDGE_AFTER default.
- *
- * Since: 1.14
- */
-void
-_clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
- ClutterGestureTriggerEdge edge)
+static void
+clutter_gesture_action_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- action->priv->edge = edge;
+ ClutterGestureAction *self = CLUTTER_GESTURE_ACTION (gobject);
+
+ switch (prop_id)
+ {
+ case PROP_N_TOUCH_POINTS:
+ clutter_gesture_action_set_n_touch_points (self, g_value_get_int (value));
+ break;
+
+ case PROP_THRESHOLD_TRIGGER_EDGE:
+ clutter_gesture_action_set_threshold_trigger_edge (self, g_value_get_enum (value));
+ break;
+
+ case PROP_THRESHOLD_TRIGGER_DISTANCE_X:
+ clutter_gesture_action_set_threshold_trigger_distance (self, g_value_get_float (value), self->priv->distance_y);
+ break;
+
+ case PROP_THRESHOLD_TRIGGER_DISTANCE_Y:
+ clutter_gesture_action_set_threshold_trigger_distance (self, self->priv->distance_x, g_value_get_float (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_gesture_action_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ClutterGestureAction *self = CLUTTER_GESTURE_ACTION (gobject);
+
+ switch (prop_id)
+ {
+ case PROP_N_TOUCH_POINTS:
+ g_value_set_int (value, self->priv->requested_nb_points);
+ break;
+
+ case PROP_THRESHOLD_TRIGGER_EDGE:
+ g_value_set_enum (value, self->priv->edge);
+ break;
+
+ case PROP_THRESHOLD_TRIGGER_DISTANCE_X:
+ if (self->priv->distance_x > 0.0)
+ g_value_set_float (value, self->priv->distance_x);
+ else
+ g_value_set_float (value, gesture_get_default_threshold ());
+ break;
+
+ case PROP_THRESHOLD_TRIGGER_DISTANCE_Y:
+ if (self->priv->distance_y > 0.0)
+ g_value_set_float (value, self->priv->distance_y);
+ else
+ g_value_set_float (value, gesture_get_default_threshold ());
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_gesture_action_finalize (GObject *gobject)
+{
+ ClutterGestureActionPrivate *priv = CLUTTER_GESTURE_ACTION (gobject)->priv;
+
+ g_array_unref (priv->points);
+
+ G_OBJECT_CLASS (clutter_gesture_action_parent_class)->finalize (gobject);
}
static void
clutter_gesture_action_class_init (ClutterGestureActionClass *klass)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterGestureActionPrivate));
+ gobject_class->finalize = clutter_gesture_action_finalize;
+ gobject_class->set_property = clutter_gesture_action_set_property;
+ gobject_class->get_property = clutter_gesture_action_get_property;
meta_class->set_actor = clutter_gesture_action_set_actor;
@@ -532,6 +668,80 @@ clutter_gesture_action_class_init (ClutterGestureActionClass *klass)
klass->gesture_progress = default_event_handler;
klass->gesture_prepare = default_event_handler;
+ /**
+ * ClutterGestureAction:n-touch-points:
+ *
+ * Number of touch points to trigger a gesture action.
+ *
+ * Since: 1.16
+ */
+ gesture_props[PROP_N_TOUCH_POINTS] =
+ g_param_spec_int ("n-touch-points",
+ P_("Number touch points"),
+ P_("Number of touch points"),
+ 1, G_MAXINT, 1,
+ CLUTTER_PARAM_READWRITE);
+
+ /**
+ * ClutterGestureAction:threshold-trigger-edge:
+ *
+ * The trigger edge to be used by the action to either emit the
+ * #ClutterGestureAction::gesture-begin signal or to emit the
+ * #ClutterGestureAction::gesture-cancel signal.
+ *
+ * Since: 1.18
+ */
+ gesture_props[PROP_THRESHOLD_TRIGGER_EDGE] =
+ g_param_spec_enum ("threshold-trigger-edge",
+ P_("Threshold Trigger Edge"),
+ P_("The trigger edge used by the action"),
+ CLUTTER_TYPE_GESTURE_TRIGGER_EDGE,
+ CLUTTER_GESTURE_TRIGGER_EDGE_NONE,
+ CLUTTER_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+
+ /**
+ * ClutterGestureAction:threshold-trigger-distance-x:
+ *
+ * The horizontal trigger distance to be used by the action to either
+ * emit the #ClutterGestureAction::gesture-begin signal or to emit
+ * the #ClutterGestureAction::gesture-cancel signal.
+ *
+ * A negative value will be interpreted as the default drag threshold.
+ *
+ * Since: 1.18
+ */
+ gesture_props[PROP_THRESHOLD_TRIGGER_DISTANCE_X] =
+ g_param_spec_float ("threshold-trigger-distance-x",
+ P_("Threshold Trigger Horizontal Distance"),
+ P_("The horizontal trigger distance used by the action"),
+ -1.0, G_MAXFLOAT, -1.0,
+ CLUTTER_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+
+ /**
+ * ClutterGestureAction:threshold-trigger-distance-y:
+ *
+ * The vertical trigger distance to be used by the action to either
+ * emit the #ClutterGestureAction::gesture-begin signal or to emit
+ * the #ClutterGestureAction::gesture-cancel signal.
+ *
+ * A negative value will be interpreted as the default drag threshold.
+ *
+ * Since: 1.18
+ */
+ gesture_props[PROP_THRESHOLD_TRIGGER_DISTANCE_Y] =
+ g_param_spec_float ("threshold-trigger-distance-y",
+ P_("Threshold Trigger Vertical Distance"),
+ P_("The vertical trigger distance used by the action"),
+ -1.0, G_MAXFLOAT, -1.0,
+ CLUTTER_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY);
+
+ g_object_class_install_properties (gobject_class,
+ PROP_LAST,
+ gesture_props);
+
/**
* ClutterGestureAction::gesture-begin:
* @action: the #ClutterGestureAction that emitted the signal
@@ -628,14 +838,13 @@ clutter_gesture_action_class_init (ClutterGestureActionClass *klass)
static void
clutter_gesture_action_init (ClutterGestureAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_GESTURE_ACTION,
- ClutterGestureActionPrivate);
+ self->priv = clutter_gesture_action_get_instance_private (self);
self->priv->points = g_array_sized_new (FALSE, TRUE, sizeof (GesturePoint), 3);
g_array_set_clear_func (self->priv->points, (GDestroyNotify) gesture_point_unset);
self->priv->requested_nb_points = 1;
- self->priv->edge = CLUTTER_GESTURE_TRIGGER_EDGE_AFTER;
+ self->priv->edge = CLUTTER_GESTURE_TRIGGER_EDGE_NONE;
}
/**
@@ -884,6 +1093,9 @@ clutter_gesture_action_set_n_touch_points (ClutterGestureAction *action,
priv = action->priv;
+ if (priv->requested_nb_points == nb_points)
+ return;
+
priv->requested_nb_points = nb_points;
if (priv->in_gesture)
@@ -897,16 +1109,17 @@ clutter_gesture_action_set_n_touch_points (ClutterGestureAction *action,
{
ClutterActor *actor =
clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (action));
- gint i, drag_threshold;
+ gint i;
+ float threshold_x, threshold_y;
- drag_threshold = gesture_get_threshold (action);
+ clutter_gesture_action_get_threshold_trigger_distance (action, &threshold_x, &threshold_y);
for (i = 0; i < priv->points->len; i++)
{
GesturePoint *point = &g_array_index (priv->points, GesturePoint, i);
- if ((ABS (point->press_y - point->last_motion_y) >= drag_threshold) ||
- (ABS (point->press_x - point->last_motion_x) >= drag_threshold))
+ if ((fabsf (point->press_y - point->last_motion_y) >= threshold_y) ||
+ (fabsf (point->press_x - point->last_motion_x) >= threshold_x))
{
begin_gesture (action, actor);
break;
@@ -914,6 +1127,9 @@ clutter_gesture_action_set_n_touch_points (ClutterGestureAction *action,
}
}
}
+
+ g_object_notify_by_pspec (G_OBJECT (action),
+ gesture_props[PROP_N_TOUCH_POINTS]);
}
/**
@@ -1018,3 +1234,135 @@ clutter_gesture_action_cancel (ClutterGestureAction *action)
cancel_gesture (action);
}
+
+/**
+ * clutter_gesture_action_set_threshold_trigger_edge:
+ * @action: a #ClutterGestureAction
+ * @edge: the %ClutterGestureTriggerEdge
+ *
+ * Sets the edge trigger for the gesture drag threshold, if any.
+ *
+ * This function should only be called by sub-classes of
+ * #ClutterGestureAction during their construction phase.
+ *
+ * Since: 1.18
+ */
+void
+clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
+ ClutterGestureTriggerEdge edge)
+{
+ g_return_if_fail (CLUTTER_IS_GESTURE_ACTION (action));
+
+ if (action->priv->edge == edge)
+ return;
+
+ action->priv->edge = edge;
+
+ g_object_notify_by_pspec (G_OBJECT (action), gesture_props[PROP_THRESHOLD_TRIGGER_EDGE]);
+}
+
+/**
+ * clutter_gesture_action_get_threshold_trigger_edge:
+ * @action: a #ClutterGestureAction
+ *
+ * Retrieves the edge trigger of the gesture @action, as set using
+ * clutter_gesture_action_set_threshold_trigger_edge().
+ *
+ * Return value: the edge trigger
+ *
+ * Since: 1.20
+ */
+ClutterGestureTriggerEdge
+clutter_gesture_action_get_threshold_trigger_edge (ClutterGestureAction *action)
+{
+ g_return_val_if_fail (CLUTTER_IS_GESTURE_ACTION (action),
+ CLUTTER_GESTURE_TRIGGER_EDGE_NONE);
+
+ return action->priv->edge;
+}
+
+/**
+ * clutter_gesture_action_get_threshold_trigger_egde:
+ * @action: a #ClutterGestureAction
+ *
+ * Retrieves the edge trigger of the gesture @action, as set using
+ * clutter_gesture_action_set_threshold_trigger_edge().
+ *
+ * Return value: the edge trigger
+ *
+ * Since: 1.18
+ *
+ * Deprecated: 1.20: Use clutter_gesture_action_get_threshold_trigger_edge() instead.
+ */
+ClutterGestureTriggerEdge
+clutter_gesture_action_get_threshold_trigger_egde (ClutterGestureAction *action)
+{
+ return clutter_gesture_action_get_threshold_trigger_edge (action);
+}
+
+/**
+ * clutter_gesture_action_set_threshold_trigger_distance:
+ * @action: a #ClutterGestureAction
+ * @x: the distance on the horizontal axis
+ * @y: the distance on the vertical axis
+ *
+ * Sets the threshold trigger distance for the gesture drag threshold, if any.
+ *
+ * This function should only be called by sub-classes of
+ * #ClutterGestureAction during their construction phase.
+ *
+ * Since: 1.18
+ */
+void
+clutter_gesture_action_set_threshold_trigger_distance (ClutterGestureAction *action,
+ float x,
+ float y)
+{
+ g_return_if_fail (CLUTTER_IS_GESTURE_ACTION (action));
+
+ if (fabsf (x - action->priv->distance_x) > FLOAT_EPSILON)
+ {
+ action->priv->distance_x = x;
+ g_object_notify_by_pspec (G_OBJECT (action), gesture_props[PROP_THRESHOLD_TRIGGER_DISTANCE_X]);
+ }
+
+ if (fabsf (y - action->priv->distance_y) > FLOAT_EPSILON)
+ {
+ action->priv->distance_y = y;
+ g_object_notify_by_pspec (G_OBJECT (action), gesture_props[PROP_THRESHOLD_TRIGGER_DISTANCE_Y]);
+ }
+}
+
+/**
+ * clutter_gesture_action_get_threshold_trigger_distance:
+ * @action: a #ClutterGestureAction
+ * @x: (out) (allow-none): The return location for the horizontal distance, or %NULL
+ * @y: (out) (allow-none): The return location for the vertical distance, or %NULL
+ *
+ * Retrieves the threshold trigger distance of the gesture @action,
+ * as set using clutter_gesture_action_set_threshold_trigger_distance().
+ *
+ * Since: 1.18
+ */
+void
+clutter_gesture_action_get_threshold_trigger_distance (ClutterGestureAction *action,
+ float *x,
+ float *y)
+{
+ g_return_if_fail (CLUTTER_IS_GESTURE_ACTION (action));
+
+ if (x != NULL)
+ {
+ if (action->priv->distance_x > 0.0)
+ *x = action->priv->distance_x;
+ else
+ *x = gesture_get_default_threshold ();
+ }
+ if (y != NULL)
+ {
+ if (action->priv->distance_y > 0.0)
+ *y = action->priv->distance_y;
+ else
+ *y = gesture_get_default_threshold ();
+ }
+}
diff --git a/clutter/clutter-gesture-action.h b/clutter/clutter-gesture-action.h
index ab38b4b23..ca7db12ce 100644
--- a/clutter/clutter-gesture-action.h
+++ b/clutter/clutter-gesture-action.h
@@ -48,7 +48,7 @@ typedef struct _ClutterGestureActionClass ClutterGestureActionClass;
/**
* ClutterGestureAction:
*
- * The ClutterGestureAction structure contains
+ * The #ClutterGestureAction structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.8
@@ -70,7 +70,7 @@ struct _ClutterGestureAction
* @gesture_prepare: virtual function called before emitting the
* #ClutterGestureAction::gesture-cancel signal
*
- * The ClutterGestureClass structure contains only
+ * The #ClutterGestureClass structure contains only
* private data.
*
* Since: 1.8
@@ -101,17 +101,23 @@ struct _ClutterGestureActionClass
void (* _clutter_gesture_action6) (void);
};
+CLUTTER_AVAILABLE_IN_1_8
GType clutter_gesture_action_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_8
ClutterAction * clutter_gesture_action_new (void);
+CLUTTER_AVAILABLE_IN_1_8
gint clutter_gesture_action_get_n_touch_points (ClutterGestureAction *action);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_gesture_action_set_n_touch_points (ClutterGestureAction *action,
gint nb_points);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_gesture_action_get_press_coords (ClutterGestureAction *action,
guint point,
gfloat *press_x,
gfloat *press_y);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_gesture_action_get_motion_coords (ClutterGestureAction *action,
guint point,
gfloat *motion_x,
@@ -121,6 +127,7 @@ gfloat clutter_gesture_action_get_motion_delta (ClutterGestu
guint point,
gfloat *delta_x,
gfloat *delta_y);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_gesture_action_get_release_coords (ClutterGestureAction *action,
guint point,
gfloat *release_x,
@@ -149,6 +156,24 @@ const ClutterEvent * clutter_gesture_action_get_last_event (ClutterGestu
CLUTTER_AVAILABLE_IN_1_12
void clutter_gesture_action_cancel (ClutterGestureAction *action);
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
+ ClutterGestureTriggerEdge edge);
+CLUTTER_DEPRECATED_IN_1_20_FOR(clutter_gesture_action_get_threshold_trigger_edge)
+ClutterGestureTriggerEdge clutter_gesture_action_get_threshold_trigger_egde (ClutterGestureAction *action);
+CLUTTER_AVAILABLE_IN_1_20
+ClutterGestureTriggerEdge clutter_gesture_action_get_threshold_trigger_edge (ClutterGestureAction *action);
+
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_gesture_action_set_threshold_trigger_distance (ClutterGestureAction *action,
+ float x,
+ float y);
+
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_gesture_action_get_threshold_trigger_distance (ClutterGestureAction *action,
+ float *x,
+ float *y);
+
G_END_DECLS
#endif /* __CLUTTER_GESTURE_ACTION_H__ */
diff --git a/clutter/clutter-grid-layout.c b/clutter/clutter-grid-layout.c
index 8c419bbc9..e9ef8f7bb 100644
--- a/clutter/clutter-grid-layout.c
+++ b/clutter/clutter-grid-layout.c
@@ -66,7 +66,6 @@
#define CLUTTER_TYPE_GRID_CHILD (clutter_grid_child_get_type ())
#define CLUTTER_GRID_CHILD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_GRID_CHILD, ClutterGridChild))
#define CLUTTER_IS_GRID_CHILD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_GRID_CHILD))
-#define CLUTTER_GRID_LAYOUT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_GRID_LAYOUT, ClutterGridLayoutPrivate))
typedef struct _ClutterGridChild ClutterGridChild;
typedef struct _ClutterLayoutMetaClass ClutterGridChildClass;
@@ -173,9 +172,11 @@ static GParamSpec *child_props[PROP_CHILD_LAST];
GType clutter_grid_child_get_type (void);
G_DEFINE_TYPE (ClutterGridChild, clutter_grid_child,
- CLUTTER_TYPE_LAYOUT_META);
-G_DEFINE_TYPE (ClutterGridLayout, clutter_grid_layout,
- CLUTTER_TYPE_LAYOUT_MANAGER);
+ CLUTTER_TYPE_LAYOUT_META)
+
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterGridLayout,
+ clutter_grid_layout,
+ CLUTTER_TYPE_LAYOUT_MANAGER)
#define GET_GRID_CHILD(grid, child) \
@@ -509,7 +510,7 @@ compute_request_for_child (ClutterGridRequest *request,
}
else
{
- if (orientation == CLUTTER_ORIENTATION_VERTICAL)
+ if (orientation == CLUTTER_ORIENTATION_HORIZONTAL)
clutter_actor_get_preferred_width (child, -1, minimum, natural);
else
clutter_actor_get_preferred_height (child, -1, minimum, natural);
@@ -1527,8 +1528,6 @@ clutter_grid_layout_class_init (ClutterGridLayoutClass *klass)
layout_class = CLUTTER_LAYOUT_MANAGER_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterGridLayoutPrivate));
-
object_class->set_property = clutter_grid_layout_set_property;
object_class->get_property = clutter_grid_layout_get_property;
@@ -1616,17 +1615,15 @@ clutter_grid_layout_class_init (ClutterGridLayoutClass *klass)
static void
clutter_grid_layout_init (ClutterGridLayout *self)
{
- ClutterGridLayoutPrivate *priv;
+ self->priv = clutter_grid_layout_get_instance_private (self);
- self->priv = priv = CLUTTER_GRID_LAYOUT_GET_PRIVATE (self);
+ self->priv->orientation = CLUTTER_ORIENTATION_HORIZONTAL;
- priv->orientation = CLUTTER_ORIENTATION_HORIZONTAL;
+ self->priv->linedata[0].spacing = 0;
+ self->priv->linedata[1].spacing = 0;
- priv->linedata[0].spacing = 0;
- priv->linedata[1].spacing = 0;
-
- priv->linedata[0].homogeneous = FALSE;
- priv->linedata[1].homogeneous = FALSE;
+ self->priv->linedata[0].homogeneous = FALSE;
+ self->priv->linedata[1].homogeneous = FALSE;
}
/**
diff --git a/clutter/clutter-group.h b/clutter/clutter-group.h
index 31f8c0374..20afe5723 100644
--- a/clutter/clutter-group.h
+++ b/clutter/clutter-group.h
@@ -88,6 +88,7 @@ struct _ClutterGroupClass
void (*_clutter_reserved6) (void);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_group_get_type (void) G_GNUC_CONST;
G_END_DECLS
diff --git a/clutter/clutter-image.c b/clutter/clutter-image.c
index 7ae9839ee..880b7344e 100644
--- a/clutter/clutter-image.c
+++ b/clutter/clutter-image.c
@@ -28,13 +28,10 @@
* @Short_Description: Image data content
*
* #ClutterImage is a #ClutterContent implementation that displays
- * image data.
+ * image data inside a #ClutterActor.
*
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
+ * See [image.c](https://git.gnome.org/browse/clutter/tree/examples/image-content.c?h=clutter-1.18)
+ * for an example of how to use #ClutterImage.
*
* #ClutterImage is available since Clutter 1.10.
*/
@@ -62,6 +59,7 @@ struct _ClutterImagePrivate
static void clutter_content_iface_init (ClutterContentIface *iface);
G_DEFINE_TYPE_WITH_CODE (ClutterImage, clutter_image, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterImage)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT,
clutter_content_iface_init))
@@ -88,16 +86,13 @@ clutter_image_finalize (GObject *gobject)
static void
clutter_image_class_init (ClutterImageClass *klass)
{
- g_type_class_add_private (klass, sizeof (ClutterImagePrivate));
-
G_OBJECT_CLASS (klass)->finalize = clutter_image_finalize;
}
static void
clutter_image_init (ClutterImage *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_IMAGE,
- ClutterImagePrivate);
+ self->priv = clutter_image_get_instance_private (self);
}
static void
@@ -121,9 +116,12 @@ clutter_image_paint_content (ClutterContent *content,
clutter_actor_get_content_scaling_filters (actor, &min_f, &mag_f);
repeat = clutter_actor_get_content_repeat (actor);
- color.red = paint_opacity;
- color.green = paint_opacity;
- color.blue = paint_opacity;
+ /* ClutterTextureNode will premultiply the blend color, so we
+ * want it to be white with the paint opacity
+ */
+ color.red = 255;
+ color.green = 255;
+ color.blue = 255;
color.alpha = paint_opacity;
node = clutter_texture_node_new (priv->texture, &color, min_f, mag_f);
@@ -211,6 +209,28 @@ clutter_image_new (void)
*
* The image data is copied in texture memory.
*
+ * The image data is expected to be a linear array of RGBA or RGB pixel data;
+ * how to retrieve that data is left to platform specific image loaders. For
+ * instance, if you use the GdkPixbuf library:
+ *
+ * |[
+ * ClutterContent *image = clutter_image_new ();
+ *
+ * GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+ *
+ * clutter_image_set_data (CLUTTER_IMAGE (image),
+ * gdk_pixbuf_get_pixels (pixbuf),
+ * gdk_pixbuf_has_alpha (pixbuf)
+ * ? COGL_PIXEL_FORMAT_RGBA_8888
+ * : COGL_PIXEL_FORMAT_RGB_888,
+ * gdk_pixbuf_get_width (pixbuf),
+ * gdk_pixbuf_get_height (pixbuf),
+ * gdk_pixbuf_get_rowstride (pixbuf),
+ * &error);
+ *
+ * g_object_unref (pixbuf);
+ * ]|
+ *
* Return value: %TRUE if the image data was successfully loaded,
* and %FALSE otherwise.
*
@@ -226,6 +246,7 @@ clutter_image_set_data (ClutterImage *image,
GError **error)
{
ClutterImagePrivate *priv;
+ CoglTextureFlags flags;
g_return_val_if_fail (CLUTTER_IS_IMAGE (image), FALSE);
g_return_val_if_fail (data != NULL, FALSE);
@@ -235,8 +256,12 @@ clutter_image_set_data (ClutterImage *image,
if (priv->texture != NULL)
cogl_object_unref (priv->texture);
+ flags = COGL_TEXTURE_NONE;
+ if (width >= 512 && height >= 512)
+ flags |= COGL_TEXTURE_NO_ATLAS;
+
priv->texture = cogl_texture_new_from_data (width, height,
- COGL_TEXTURE_NONE,
+ flags,
pixel_format,
COGL_PIXEL_FORMAT_ANY,
row_stride,
@@ -289,6 +314,7 @@ clutter_image_set_bytes (ClutterImage *image,
GError **error)
{
ClutterImagePrivate *priv;
+ CoglTextureFlags flags;
g_return_val_if_fail (CLUTTER_IS_IMAGE (image), FALSE);
g_return_val_if_fail (data != NULL, FALSE);
@@ -298,8 +324,12 @@ clutter_image_set_bytes (ClutterImage *image,
if (priv->texture != NULL)
cogl_object_unref (priv->texture);
+ flags = COGL_TEXTURE_NONE;
+ if (width >= 512 && height >= 512)
+ flags |= COGL_TEXTURE_NO_ATLAS;
+
priv->texture = cogl_texture_new_from_data (width, height,
- COGL_TEXTURE_NONE,
+ flags,
pixel_format,
COGL_PIXEL_FORMAT_ANY,
row_stride,
@@ -364,9 +394,14 @@ clutter_image_set_area (ClutterImage *image,
if (priv->texture == NULL)
{
+ CoglTextureFlags flags = COGL_TEXTURE_NONE;
+
+ if (area->width >= 512 && area->height >= 512)
+ flags |= COGL_TEXTURE_NO_ATLAS;
+
priv->texture = cogl_texture_new_from_data (area->width,
area->height,
- COGL_TEXTURE_NONE,
+ flags,
pixel_format,
COGL_PIXEL_FORMAT_ANY,
row_stride,
diff --git a/clutter/clutter-image.h b/clutter/clutter-image.h
index af8df1e6d..2819b79af 100644
--- a/clutter/clutter-image.h
+++ b/clutter/clutter-image.h
@@ -70,7 +70,7 @@ typedef enum {
/**
* ClutterImage:
*
- * The ClutterImage structure contains
+ * The #ClutterImage structure contains
* private data and should only be accessed using the provided
* API.
*
@@ -87,7 +87,7 @@ struct _ClutterImage
/**
* ClutterImageClass:
*
- * The ClutterImageClass structure contains
+ * The #ClutterImageClass structure contains
* private data.
*
* Since: 1.10
diff --git a/clutter/clutter-input-device.c b/clutter/clutter-input-device.c
index e92cf22a7..b7de58630 100644
--- a/clutter/clutter-input-device.c
+++ b/clutter/clutter-input-device.c
@@ -46,6 +46,8 @@
#include "clutter-private.h"
#include "clutter-stage-private.h"
+#include
+
enum
{
PROP_0,
@@ -79,7 +81,7 @@ clutter_input_device_dispose (GObject *gobject)
{
ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (gobject);
- g_free (device->device_name);
+ g_clear_pointer (&device->device_name, g_free);
if (device->associated != NULL)
{
@@ -91,23 +93,10 @@ clutter_input_device_dispose (GObject *gobject)
device->associated = NULL;
}
- if (device->axes != NULL)
- {
- g_array_free (device->axes, TRUE);
- device->axes = NULL;
- }
-
- if (device->keys != NULL)
- {
- g_array_free (device->keys, TRUE);
- device->keys = NULL;
- }
-
- if (device->touch_sequences_info)
- {
- g_hash_table_unref (device->touch_sequences_info);
- device->touch_sequences_info = NULL;
- }
+ g_clear_pointer (&device->axes, g_array_unref);
+ g_clear_pointer (&device->keys, g_array_unref);
+ g_clear_pointer (&device->scroll_info, g_array_unref);
+ g_clear_pointer (&device->touch_sequences_info, g_hash_table_unref);
if (device->inv_touch_sequence_actors)
{
@@ -428,8 +417,8 @@ _clutter_input_device_ensure_touch_info (ClutterInputDevice *device,
void
_clutter_input_device_set_coords (ClutterInputDevice *device,
ClutterEventSequence *sequence,
- gint x,
- gint y,
+ gfloat x,
+ gfloat y,
ClutterStage *stage)
{
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
@@ -467,6 +456,25 @@ _clutter_input_device_set_state (ClutterInputDevice *device,
device->current_state = state;
}
+/**
+ * clutter_input_device_get_modifier_state:
+ * @device: a #ClutterInputDevice
+ *
+ * Retrieves the current modifiers state of the device, as seen
+ * by the last event Clutter processed.
+ *
+ * Return value: the last known modifier state
+ *
+ * Since: 1.16
+ */
+ClutterModifierType
+clutter_input_device_get_modifier_state (ClutterInputDevice *device)
+{
+ g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
+
+ return device->current_state;
+}
+
/*< private >
* clutter_input_device_set_time:
* @device: a #ClutterInputDevice
@@ -1028,9 +1036,9 @@ clutter_input_device_get_device_mode (ClutterInputDevice *device)
* |[
* ClutterEvent c_event;
*
- * translate_native_event_to_clutter (native_event, &c_event);
+ * translate_native_event_to_clutter (native_event, &c_event);
*
- * clutter_do_event (&c_event);
+ * clutter_do_event (&c_event);
* ]|
*
* Before letting clutter_do_event() process the event, it is necessary to call
@@ -1041,20 +1049,18 @@ clutter_input_device_get_device_mode (ClutterInputDevice *device)
* ClutterDeviceManager *manager;
* ClutterInputDevice *device;
*
- * translate_native_event_to_clutter (native_event, &c_event);
+ * translate_native_event_to_clutter (native_event, &c_event);
*
- * /* get the device manager */
+ * // get the device manager
* 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_device_manager_get_core_device (manager, %CLUTTER_POINTER_DEVICE);
*
- * /* update the state of the input device */
- * clutter_input_device_update_from_event (device, &c_event, FALSE);
+ * // update the state of the input device
+ * clutter_input_device_update_from_event (device, &c_event, FALSE);
*
- * clutter_do_event (&c_event);
+ * clutter_do_event (&c_event);
* ]|
*
* The @update_stage boolean argument should be used when the input device
@@ -1199,6 +1205,9 @@ _clutter_input_device_translate_axis (ClutterInputDevice *device,
info->axis == CLUTTER_INPUT_AXIS_Y)
return FALSE;
+ if (fabs (info->max_value - info->min_value) < 0.0000001)
+ return FALSE;
+
width = info->max_value - info->min_value;
real_value = (info->max_axis * (value - info->min_value)
+ info->min_axis * (info->max_value - value))
@@ -1261,7 +1270,7 @@ clutter_input_device_get_axis (ClutterInputDevice *device,
*
* clutter_input_device_get_axis_value (device, axes,
* CLUTTER_INPUT_AXIS_PRESSURE,
- * &pressure_value);
+ * &pressure_value);
* ]|
*
* Return value: %TRUE if the value was set, and %FALSE otherwise
@@ -1520,12 +1529,10 @@ _clutter_input_device_remove_event_sequence (ClutterInputDevice *device,
g_hash_table_replace (device->inv_touch_sequence_actors,
info->actor, sequences);
+ _clutter_input_device_set_actor (device, sequence, NULL, TRUE);
}
g_hash_table_remove (device->touch_sequences_info, sequence);
-
- if (g_hash_table_size (device->touch_sequences_info) == 0)
- _clutter_input_device_set_stage (device, NULL);
}
/**
@@ -1615,28 +1622,6 @@ clutter_input_device_get_associated_device (ClutterInputDevice *device)
return device->associated;
}
-/*< internal >
- * clutter_input_device_select_stage_events:
- * @device: a #ClutterInputDevice
- * @stage: the #ClutterStage to select events on
- * @event_mask: platform-specific mask of events
- *
- * Selects input device events on @stage.
- *
- * The implementation of this function depends on the backend used.
- */
-void
-_clutter_input_device_select_stage_events (ClutterInputDevice *device,
- ClutterStage *stage,
- gint event_mask)
-{
- ClutterInputDeviceClass *device_class;
-
- device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
- if (device_class->select_stage_events != NULL)
- device_class->select_stage_events (device, stage, event_mask);
-}
-
/**
* clutter_input_device_keycode_to_evdev:
* @device: A #ClutterInputDevice
diff --git a/clutter/clutter-input-device.h b/clutter/clutter-input-device.h
index 1a5a4a1c5..4fcdfc758 100644
--- a/clutter/clutter-input-device.h
+++ b/clutter/clutter-input-device.h
@@ -47,45 +47,66 @@ G_BEGIN_DECLS
*/
typedef struct _ClutterInputDeviceClass ClutterInputDeviceClass;
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_input_device_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterInputDeviceType clutter_input_device_get_device_type (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_0
gint clutter_input_device_get_device_id (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_1_12
gboolean clutter_input_device_get_coords (ClutterInputDevice *device,
ClutterEventSequence *sequence,
ClutterPoint *point);
+CLUTTER_AVAILABLE_IN_1_16
+ClutterModifierType clutter_input_device_get_modifier_state (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
ClutterActor * clutter_input_device_get_pointer_actor (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
ClutterStage * clutter_input_device_get_pointer_stage (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
const gchar * clutter_input_device_get_device_name (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
ClutterInputMode clutter_input_device_get_device_mode (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_input_device_get_has_cursor (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_input_device_set_enabled (ClutterInputDevice *device,
gboolean enabled);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_input_device_get_enabled (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
guint clutter_input_device_get_n_axes (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
ClutterInputAxis clutter_input_device_get_axis (ClutterInputDevice *device,
guint index_);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_input_device_get_axis_value (ClutterInputDevice *device,
gdouble *axes,
ClutterInputAxis axis,
gdouble *value);
+CLUTTER_AVAILABLE_IN_1_2
guint clutter_input_device_get_n_keys (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_input_device_set_key (ClutterInputDevice *device,
guint index_,
guint keyval,
ClutterModifierType modifiers);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_input_device_get_key (ClutterInputDevice *device,
guint index_,
guint *keyval,
ClutterModifierType *modifiers);
+CLUTTER_AVAILABLE_IN_1_2
ClutterInputDevice * clutter_input_device_get_associated_device (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
GList * clutter_input_device_get_slave_devices (ClutterInputDevice *device);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_input_device_update_from_event (ClutterInputDevice *device,
ClutterEvent *event,
gboolean update_stage);
@@ -109,6 +130,7 @@ CLUTTER_AVAILABLE_IN_1_12
ClutterActor * clutter_input_device_sequence_get_grabbed_actor (ClutterInputDevice *device,
ClutterEventSequence *sequence);
+CLUTTER_AVAILABLE_IN_1_10
gboolean clutter_input_device_keycode_to_evdev (ClutterInputDevice *device,
guint hardware_keycode,
guint *evdev_keycode);
diff --git a/clutter/clutter-interval.c b/clutter/clutter-interval.c
index 13649ad16..782f82655 100644
--- a/clutter/clutter-interval.c
+++ b/clutter/clutter-interval.c
@@ -46,9 +46,7 @@
* #ClutterInterval is available since Clutter 1.0
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include
#include
@@ -61,7 +59,10 @@
#include "clutter-interval.h"
#include "clutter-private.h"
#include "clutter-units.h"
+#include "clutter-scriptable.h"
+#include "clutter-script-private.h"
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
#include "deprecated/clutter-fixed.h"
enum
@@ -86,8 +87,6 @@ enum
N_VALUES
};
-#define CLUTTER_INTERVAL_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_INTERVAL, ClutterIntervalPrivate))
-
struct _ClutterIntervalPrivate
{
GType value_type;
@@ -95,7 +94,15 @@ struct _ClutterIntervalPrivate
GValue *values;
};
-G_DEFINE_TYPE (ClutterInterval, clutter_interval, G_TYPE_INITIALLY_UNOWNED);
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterInterval,
+ clutter_interval,
+ G_TYPE_INITIALLY_UNOWNED,
+ G_ADD_PRIVATE (ClutterInterval)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init));
+
static gboolean
clutter_interval_real_validate (ClutterInterval *interval,
@@ -103,6 +110,8 @@ clutter_interval_real_validate (ClutterInterval *interval,
{
GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+
/* check the GTypes we provide first */
if (pspec_gtype == COGL_TYPE_FIXED)
{
@@ -118,6 +127,8 @@ clutter_interval_real_validate (ClutterInterval *interval,
return FALSE;
}
+G_GNUC_END_IGNORE_DEPRECATIONS;
+
/* then check the fundamental types */
switch (G_TYPE_FUNDAMENTAL (pspec_gtype))
{
@@ -420,7 +431,8 @@ clutter_interval_set_property (GObject *gobject,
const GValue *value,
GParamSpec *pspec)
{
- ClutterIntervalPrivate *priv = CLUTTER_INTERVAL_GET_PRIVATE (gobject);
+ ClutterInterval *self = CLUTTER_INTERVAL (gobject);
+ ClutterIntervalPrivate *priv = clutter_interval_get_instance_private (self);
switch (prop_id)
{
@@ -430,16 +442,14 @@ clutter_interval_set_property (GObject *gobject,
case PROP_INITIAL:
if (g_value_get_boxed (value) != NULL)
- clutter_interval_set_initial_value (CLUTTER_INTERVAL (gobject),
- g_value_get_boxed (value));
+ clutter_interval_set_initial_value (self, g_value_get_boxed (value));
else if (G_IS_VALUE (&priv->values[INITIAL]))
g_value_unset (&priv->values[INITIAL]);
break;
case PROP_FINAL:
if (g_value_get_boxed (value) != NULL)
- clutter_interval_set_final_value (CLUTTER_INTERVAL (gobject),
- g_value_get_boxed (value));
+ clutter_interval_set_final_value (self, g_value_get_boxed (value));
else if (G_IS_VALUE (&priv->values[FINAL]))
g_value_unset (&priv->values[FINAL]);
break;
@@ -456,7 +466,9 @@ clutter_interval_get_property (GObject *gobject,
GValue *value,
GParamSpec *pspec)
{
- ClutterIntervalPrivate *priv = CLUTTER_INTERVAL_GET_PRIVATE (gobject);
+ ClutterIntervalPrivate *priv;
+
+ priv = clutter_interval_get_instance_private (CLUTTER_INTERVAL (gobject));
switch (prop_id)
{
@@ -480,13 +492,52 @@ clutter_interval_get_property (GObject *gobject,
}
}
+static gboolean
+clutter_interval_parse_custom_node (ClutterScriptable *scriptable,
+ ClutterScript *script,
+ GValue *value,
+ const gchar *name,
+ JsonNode *node)
+{
+ ClutterIntervalPrivate *priv = CLUTTER_INTERVAL (scriptable)->priv;
+
+ if ((strcmp (name, "initial") == 0) || (strcmp (name, "final") == 0))
+ {
+ g_value_init (value, priv->value_type);
+ return _clutter_script_parse_node (script, value, name, node, NULL);
+ }
+
+ return FALSE;
+}
+
+static void
+clutter_interval_set_custom_property (ClutterScriptable *scriptable,
+ ClutterScript *script,
+ const gchar *name,
+ const GValue *value)
+{
+ ClutterInterval *self = CLUTTER_INTERVAL (scriptable);
+
+ if (strcmp (name, "initial") == 0)
+ clutter_interval_set_initial_value (self, value);
+ else if (strcmp (name, "final") == 0)
+ clutter_interval_set_final_value (self, value);
+ else
+ g_object_set_property (G_OBJECT (scriptable), name, value);
+}
+
+static void
+clutter_scriptable_iface_init (ClutterScriptableIface *iface)
+{
+ iface->parse_custom_node = clutter_interval_parse_custom_node;
+ iface->set_custom_property = clutter_interval_set_custom_property;
+}
+
static void
clutter_interval_class_init (ClutterIntervalClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterIntervalPrivate));
-
klass->validate = clutter_interval_real_validate;
klass->compute_value = clutter_interval_real_compute_value;
@@ -546,12 +597,10 @@ clutter_interval_class_init (ClutterIntervalClass *klass)
static void
clutter_interval_init (ClutterInterval *self)
{
- ClutterIntervalPrivate *priv;
+ self->priv = clutter_interval_get_instance_private (self);
- self->priv = priv = CLUTTER_INTERVAL_GET_PRIVATE (self);
-
- priv->value_type = G_TYPE_INVALID;
- priv->values = g_malloc0 (sizeof (GValue) * N_VALUES);
+ self->priv->value_type = G_TYPE_INVALID;
+ self->priv->values = g_malloc0 (sizeof (GValue) * N_VALUES);
}
static inline void
@@ -836,15 +885,13 @@ clutter_interval_get_value_type (ClutterInterval *interval)
}
/**
- * clutter_interval_set_initial_value:
+ * clutter_interval_set_initial_value: (rename-to clutter_interval_set_initial)
* @interval: a #ClutterInterval
* @value: a #GValue
*
* Sets the initial value of @interval to @value. The value is copied
* inside the #ClutterInterval.
*
- * Rename to: clutter_interval_set_initial
- *
* Since: 1.0
*/
void
@@ -928,15 +975,13 @@ clutter_interval_peek_initial_value (ClutterInterval *interval)
}
/**
- * clutter_interval_set_final_value:
+ * clutter_interval_set_final_value: (rename-to clutter_interval_set_final)
* @interval: a #ClutterInterval
* @value: a #GValue
*
* Sets the final value of @interval to @value. The value is
* copied inside the #ClutterInterval.
*
- * Rename to: clutter_interval_set_final
- *
* Since: 1.0
*/
void
diff --git a/clutter/clutter-interval.h b/clutter/clutter-interval.h
index b0c371463..fa36698e0 100644
--- a/clutter/clutter-interval.h
+++ b/clutter/clutter-interval.h
@@ -92,44 +92,62 @@ struct _ClutterIntervalClass
void (*_clutter_reserved6) (void);
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_interval_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterInterval *clutter_interval_new (GType gtype,
...);
+CLUTTER_AVAILABLE_IN_1_0
ClutterInterval *clutter_interval_new_with_values (GType gtype,
const GValue *initial,
const GValue *final);
+CLUTTER_AVAILABLE_IN_1_0
ClutterInterval *clutter_interval_clone (ClutterInterval *interval);
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_interval_get_value_type (ClutterInterval *interval);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_interval_set_initial (ClutterInterval *interval,
...);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_set_initial_value (ClutterInterval *interval,
const GValue *value);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_get_initial_value (ClutterInterval *interval,
GValue *value);
+CLUTTER_AVAILABLE_IN_1_0
GValue * clutter_interval_peek_initial_value (ClutterInterval *interval);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_interval_set_final (ClutterInterval *interval,
...);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_set_final_value (ClutterInterval *interval,
const GValue *value);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_get_final_value (ClutterInterval *interval,
GValue *value);
+CLUTTER_AVAILABLE_IN_1_0
GValue * clutter_interval_peek_final_value (ClutterInterval *interval);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_set_interval (ClutterInterval *interval,
...);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_get_interval (ClutterInterval *interval,
...);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_interval_validate (ClutterInterval *interval,
GParamSpec *pspec);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_interval_compute_value (ClutterInterval *interval,
gdouble factor,
GValue *value);
+CLUTTER_AVAILABLE_IN_1_4
const GValue * clutter_interval_compute (ClutterInterval *interval,
gdouble factor);
diff --git a/clutter/clutter-keyframe-transition.c b/clutter/clutter-keyframe-transition.c
index 007be9caf..54b670b73 100644
--- a/clutter/clutter-keyframe-transition.c
+++ b/clutter/clutter-keyframe-transition.c
@@ -96,9 +96,9 @@ struct _ClutterKeyframeTransitionPrivate
gint current_frame;
};
-G_DEFINE_TYPE (ClutterKeyframeTransition,
- clutter_keyframe_transition,
- CLUTTER_TYPE_PROPERTY_TRANSITION)
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterKeyframeTransition,
+ clutter_keyframe_transition,
+ CLUTTER_TYPE_PROPERTY_TRANSITION)
static void
key_frame_free (gpointer data)
@@ -295,8 +295,8 @@ clutter_keyframe_transition_compute_value (ClutterTransition *transition,
/* update the interval to be used to interpolate the property */
real_interval = cur_frame->interval;
- /* normalize the progress */
- real_progress = (p - cur_frame->start) / (cur_frame->end - cur_frame->start);
+ /* normalize the progress and apply the easing mode */
+ real_progress = clutter_easing_for_mode ( cur_frame->mode, (p - cur_frame->start), (cur_frame->end - cur_frame->start));
#ifdef CLUTTER_ENABLE_DEBUG
if (CLUTTER_HAS_DEBUG (ANIMATION))
@@ -375,8 +375,6 @@ clutter_keyframe_transition_class_init (ClutterKeyframeTransitionClass *klass)
ClutterTimelineClass *timeline_class = CLUTTER_TIMELINE_CLASS (klass);
ClutterTransitionClass *transition_class = CLUTTER_TRANSITION_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterKeyframeTransitionPrivate));
-
gobject_class->finalize = clutter_keyframe_transition_finalize;
timeline_class->started = clutter_keyframe_transition_started;
@@ -388,9 +386,7 @@ clutter_keyframe_transition_class_init (ClutterKeyframeTransitionClass *klass)
static void
clutter_keyframe_transition_init (ClutterKeyframeTransition *self)
{
- self->priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_KEYFRAME_TRANSITION,
- ClutterKeyframeTransitionPrivate);
+ self->priv = clutter_keyframe_transition_get_instance_private (self);
}
/**
diff --git a/clutter/clutter-keysyms-table.c b/clutter/clutter-keysyms-table.c
index 785059c4b..310d103b1 100644
--- a/clutter/clutter-keysyms-table.c
+++ b/clutter/clutter-keysyms-table.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include
#include "clutter-event.h"
diff --git a/clutter/clutter-keysyms.h b/clutter/clutter-keysyms.h
index 4be94d4b2..b128bab10 100644
--- a/clutter/clutter-keysyms.h
+++ b/clutter/clutter-keysyms.h
@@ -278,6 +278,10 @@
#define CLUTTER_KEY_dead_invertedbreve 0xfe6d
#define CLUTTER_KEY_dead_belowcomma 0xfe6e
#define CLUTTER_KEY_dead_currency 0xfe6f
+#define CLUTTER_KEY_dead_lowline 0xfe90
+#define CLUTTER_KEY_dead_aboveverticalline 0xfe91
+#define CLUTTER_KEY_dead_belowverticalline 0xfe92
+#define CLUTTER_KEY_dead_longsolidusoverlay 0xfe93
#define CLUTTER_KEY_dead_a 0xfe80
#define CLUTTER_KEY_dead_A 0xfe81
#define CLUTTER_KEY_dead_e 0xfe82
@@ -2282,6 +2286,7 @@
#define CLUTTER_KEY_TouchpadToggle 0x1008ffa9
#define CLUTTER_KEY_TouchpadOn 0x1008ffb0
#define CLUTTER_KEY_TouchpadOff 0x1008ffb1
+#define CLUTTER_KEY_AudioMicMute 0x1008ffb2
#define CLUTTER_KEY_Switch_VT_1 0x1008fe01
#define CLUTTER_KEY_Switch_VT_2 0x1008fe02
#define CLUTTER_KEY_Switch_VT_3 0x1008fe03
diff --git a/clutter/clutter-layout-manager.c b/clutter/clutter-layout-manager.c
index 9f3ef5605..3b731c928 100644
--- a/clutter/clutter-layout-manager.c
+++ b/clutter/clutter-layout-manager.c
@@ -38,227 +38,36 @@
* Clutter provides some simple #ClutterLayoutManager sub-classes, like
* #ClutterFlowLayout and #ClutterBinLayout.
*
- *
- * Using a Layout Manager inside an Actor
- * In order to use a #ClutterLayoutManager inside a #ClutterActor
- * sub-class you should invoke clutter_layout_manager_get_preferred_width()
- * inside the #ClutterActorClass.get_preferred_width() virtual function and
- * clutter_layout_manager_get_preferred_height() inside the
- * #ClutterActorClass.get_preferred_height() virtual functions implementation.
- * You should also call clutter_layout_manager_allocate() inside the
- * implementation of the #ClutterActorClass.allocate() virtual function.
- * In order to receive notifications for changes in the layout
- * manager policies you should also connect to the
- * #ClutterLayoutManager::layout-changed signal and queue a relayout
- * on your actor. The following code should be enough if the actor
- * does not need to perform specific operations whenever a layout
- * manager changes:
- *
- * g_signal_connect_swapped (layout_manager,
- * "layout-changed",
- * G_CALLBACK (clutter_actor_queue_relayout),
- * actor);
- *
- *
+ * ## Implementing a ClutterLayoutManager
+ * The implementation of a layout manager does not differ from the
+ * implementation of the size requisition and allocation bits of
+ * #ClutterActor, so you should read the relative documentation
+ * forr subclassing #ClutterActor.
*
- *
- * Implementing a ClutterLayoutManager
- * The implementation of a layout manager does not differ from
- * the implementation of the size requisition and allocation bits of
- * #ClutterActor, so you should read the relative documentation
- * for subclassing
- * ClutterActor.
- * The layout manager implementation can hold a back pointer
- * to the #ClutterContainer by implementing the
- * set_container() virtual function. The layout manager
- * should not hold a real reference (i.e. call g_object_ref()) on the
- * container actor, to avoid reference cycles.
- * If a layout manager has properties affecting the layout
- * policies then it should emit the #ClutterLayoutManager::layout-changed
- * signal on itself by using the clutter_layout_manager_layout_changed()
- * function whenever one of these properties changes.
- *
+ * The layout manager implementation can hold a back pointer to the
+ * #ClutterContainer by implementing the #ClutterLayoutManagerClass.set_container()
+ * virtual function. The layout manager should not hold a real reference (i.e.
+ * call g_object_ref()) on the container actor, to avoid reference cycles.
*
- *
- * Animating a ClutterLayoutManager
- * A layout manager is used to let a #ClutterContainer take complete
- * ownership over the layout (that is: the position and sizing) of its
- * children; this means that using the Clutter animation API, like
- * clutter_actor_animate(), to animate the position and sizing of a child of
- * a layout manager it is not going to work properly, as the animation will
- * automatically override any setting done by the layout manager
- * itself.
- * It is possible for a #ClutterLayoutManager sub-class to animate its
- * children layout by using the base class animation support. The
- * #ClutterLayoutManager animation support consists of three virtual
- * functions: #ClutterLayoutManagerClass.begin_animation(),
- * #ClutterLayoutManagerClass.get_animation_progress(), and
- * #ClutterLayoutManagerClass.end_animation().
- *
- *
- * begin_animation (duration, easing)
- * This virtual function is invoked when the layout
- * manager should begin an animation. The implementation should set up
- * the state for the animation and create the ancillary objects for
- * animating the layout. The default implementation creates a
- * #ClutterTimeline for the given duration and a #ClutterAlpha binding
- * the timeline to the given easing mode. This function returns a
- * #ClutterAlpha which should be used to control the animation from
- * the caller perspective.
- *
- *
- * get_animation_progress()
- * This virtual function should be invoked when animating
- * a layout manager. It returns the progress of the animation, using the
- * same semantics as the #ClutterAlpha:alpha value.
- *
- *
- * end_animation()
- * This virtual function is invoked when the animation of
- * a layout manager ends, and it is meant to be used for bookkeeping the
- * objects created in the begin_animation()
- * function. The default implementation will call it implicitly when the
- * timeline is complete.
- *
- *
- * The simplest way to animate a layout is to create a #ClutterTimeline
- * inside the begin_animation() virtual function, along
- * with a #ClutterAlpha, and for each #ClutterTimeline::new-frame signal
- * emission call clutter_layout_manager_layout_changed(), which will cause a
- * relayout. The #ClutterTimeline::completed signal emission should cause
- * clutter_layout_manager_end_animation() to be called. The default
- * implementation provided internally by #ClutterLayoutManager does exactly
- * this, so most sub-classes should either not override any animation-related
- * virtual function or simply override #ClutterLayoutManagerClass.begin_animation()
- * and #ClutterLayoutManagerClass.end_animation() to set up ad hoc state, and then
- * chain up to the parent's implementation.
- *
- * Animation of a Layout Manager
- * The code below shows how a #ClutterLayoutManager sub-class should
- * provide animating the allocation of its children from within the
- * #ClutterLayoutManagerClass.allocate() virtual function implementation. The
- * animation is computed between the last stable allocation performed
- * before the animation started and the desired final allocation.
- * The is_animating variable is stored inside the
- * #ClutterLayoutManager sub-class and it is updated by overriding the
- * #ClutterLayoutManagerClass.begin_animation() and the
- * #ClutterLayoutManagerClass.end_animation() virtual functions and chaining up
- * to the base class implementation.
- * The last stable allocation is stored within a #ClutterLayoutMeta
- * sub-class used by the implementation.
- *
- * static void
- * my_layout_manager_allocate (ClutterLayoutManager *manager,
- * ClutterContainer *container,
- * const ClutterActorBox *allocation,
- * ClutterAllocationFlags flags)
- * {
- * MyLayoutManager *self = MY_LAYOUT_MANAGER (manager);
- * ClutterActor *child;
+ * If a layout manager has properties affecting the layout policies then it should
+ * emit the #ClutterLayoutManager::layout-changed signal on itself by using the
+ * clutter_layout_manager_layout_changed() function whenever one of these properties
+ * changes.
*
- * for (child = clutter_actor_get_first_child (CLUTTER_ACTOR (container));
- * child != NULL;
- * child = clutter_actor_get_next_sibling (child))
- * {
- * ClutterLayoutMeta *meta;
- * MyLayoutMeta *my_meta;
+ * ## Layout Properties
*
- * /* retrieve the layout meta-object */
- * meta = clutter_layout_manager_get_child_meta (manager,
- * container,
- * child);
- * my_meta = MY_LAYOUT_META (meta);
+ * If a layout manager has layout properties, that is properties that
+ * should exist only as the result of the presence of a specific (layout
+ * manager, container actor, child actor) combination, and it wishes to store
+ * those properties inside a #ClutterLayoutMeta, then it should override the
+ * #ClutterLayoutManagerClass.get_child_meta_type() virtual function to return
+ * the #GType of the #ClutterLayoutMeta sub-class used to store the layout
+ * properties; optionally, the #ClutterLayoutManager sub-class might also
+ * override the #ClutterLayoutManagerClass.create_child_meta() virtual function
+ * to control how the #ClutterLayoutMeta instance is created, otherwise the
+ * default implementation will be equivalent to:
*
- * /* compute the desired allocation for the child */
- * compute_allocation (self, my_meta, child,
- * allocation, flags,
- * &child_box);
- *
- * /* this is the additional code that deals with the animation
- * * of the layout manager
- * */
- * if (!self->is_animating)
- * {
- * /* store the last stable allocation for later use */
- * my_meta->last_alloc = clutter_actor_box_copy (&child_box);
- * }
- * else
- * {
- * ClutterActorBox end = { 0, };
- * gdouble p;
- *
- * /* get the progress of the animation */
- * p = clutter_layout_manager_get_animation_progress (manager);
- *
- * if (my_meta->last_alloc != NULL)
- * {
- * /* copy the desired allocation as the final state */
- * end = child_box;
- *
- * /* then interpolate the initial and final state
- * * depending on the progress of the animation,
- * * and put the result inside the box we will use
- * * to allocate the child
- * */
- * clutter_actor_box_interpolate (my_meta->last_alloc,
- * &end,
- * p,
- * &child_box);
- * }
- * else
- * {
- * /* if there is no stable allocation then the child was
- * * added while animating; one possible course of action
- * * is to just bail out and fall through to the allocation
- * * to position the child directly at its final state
- * */
- * my_meta->last_alloc =
- * clutter_actor_box_copy (&child_box);
- * }
- * }
- *
- * /* allocate the child */
- * clutter_actor_allocate (child, &child_box, flags);
- * }
- * }
- *
- *
- * Sub-classes of #ClutterLayoutManager that support animations of the
- * layout changes should call clutter_layout_manager_begin_animation()
- * whenever a layout property changes value, e.g.:
- *
- *
- * if (self->orientation != new_orientation)
- * {
- * ClutterLayoutManager *manager;
- *
- * self->orientation = new_orientation;
- *
- * manager = CLUTTER_LAYOUT_MANAGER (self);
- * clutter_layout_manager_layout_changed (manager);
- * clutter_layout_manager_begin_animation (manager, 500, CLUTTER_LINEAR);
- *
- * g_object_notify (G_OBJECT (self), "orientation");
- * }
- *
- *
- * The code above will animate a change in the
- * orientation layout property of a layout manager.
- *
- *
- *
- * Layout Properties
- * If a layout manager has layout properties, that is properties that
- * should exist only as the result of the presence of a specific (layout
- * manager, container actor, child actor) combination, and it wishes to store
- * those properties inside a #ClutterLayoutMeta, then it should override the
- * #ClutterLayoutManagerClass.get_child_meta_type() virtual function to return
- * the #GType of the #ClutterLayoutMeta sub-class used to store the layout
- * properties; optionally, the #ClutterLayoutManager sub-class might also
- * override the #ClutterLayoutManagerClass.create_child_meta() virtual function
- * to control how the #ClutterLayoutMeta instance is created, otherwise the
- * default implementation will be equivalent to:
- *
+ * |[
* ClutterLayoutManagerClass *klass;
* GType meta_type;
*
@@ -270,22 +79,23 @@
* "container", container,
* "actor", actor,
* NULL);
- *
- * Where manager is the #ClutterLayoutManager,
- * container is the #ClutterContainer using the
- * #ClutterLayoutManager and actor is the #ClutterActor
- * child of the #ClutterContainer.
- *
+ * ]|
*
- *
- * Using ClutterLayoutManager with ClutterScript
- * #ClutterLayoutManager instance can be created in the same way
- * as other objects in #ClutterScript; properties can be set using the
- * common syntax.
- * Layout properties can be set on children of a container with
- * a #ClutterLayoutManager using the layout::
- * modifier on the property name, for instance:
- *
+ * Where `manager` is the #ClutterLayoutManager, `container` is the
+ * #ClutterContainer using the #ClutterLayoutManager, and `actor` is
+ * the #ClutterActor child of the #ClutterContainer.
+ *
+ * ## Using ClutterLayoutManager with ClutterScript
+ *
+ * #ClutterLayoutManager instances can be created in the same way
+ * as other objects in #ClutterScript; properties can be set using the
+ * common syntax.
+ *
+ * Layout properties can be set on children of a container with
+ * a #ClutterLayoutManager using the `layout::` modifier on the property
+ * name, for instance:
+ *
+ * |[
* {
* "type" : "ClutterBox",
* "layout-manager" : { "type" : "ClutterTableLayout" },
@@ -314,8 +124,7 @@
* }
* ]
* }
- *
- *
+ * ]|
*
* #ClutterLayoutManager is available since Clutter 1.2
*/
@@ -345,11 +154,6 @@
G_OBJECT_TYPE_NAME (_obj), \
(method)); } G_STMT_END
-struct _ClutterLayoutManagerPrivate
-{
- gpointer dummy;
-};
-
enum
{
LAYOUT_CHANGED,
@@ -359,7 +163,7 @@ enum
G_DEFINE_ABSTRACT_TYPE (ClutterLayoutManager,
clutter_layout_manager,
- G_TYPE_INITIALLY_UNOWNED);
+ G_TYPE_INITIALLY_UNOWNED)
static GQuark quark_layout_meta = 0;
static GQuark quark_layout_alpha = 0;
@@ -595,8 +399,6 @@ clutter_layout_manager_class_init (ClutterLayoutManagerClass *klass)
quark_layout_alpha =
g_quark_from_static_string ("clutter-layout-manager-alpha");
- g_type_class_add_private (klass, sizeof (ClutterLayoutManagerPrivate));
-
klass->get_preferred_width = layout_manager_real_get_preferred_width;
klass->get_preferred_height = layout_manager_real_get_preferred_height;
klass->allocate = layout_manager_real_allocate;
@@ -652,9 +454,6 @@ clutter_layout_manager_class_init (ClutterLayoutManagerClass *klass)
static void
clutter_layout_manager_init (ClutterLayoutManager *manager)
{
- manager->priv =
- G_TYPE_INSTANCE_GET_PRIVATE (manager, CLUTTER_TYPE_LAYOUT_MANAGER,
- ClutterLayoutManagerPrivate);
}
/**
diff --git a/clutter/clutter-layout-manager.h b/clutter/clutter-layout-manager.h
index d19d56337..cbfac1e82 100644
--- a/clutter/clutter-layout-manager.h
+++ b/clutter/clutter-layout-manager.h
@@ -40,7 +40,6 @@ G_BEGIN_DECLS
#define CLUTTER_IS_LAYOUT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_LAYOUT_MANAGER))
#define CLUTTER_LAYOUT_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_LAYOUT_MANAGER, ClutterLayoutManagerClass))
-typedef struct _ClutterLayoutManagerPrivate ClutterLayoutManagerPrivate;
typedef struct _ClutterLayoutManagerClass ClutterLayoutManagerClass;
/**
@@ -56,7 +55,7 @@ struct _ClutterLayoutManager
/*< private >*/
GInitiallyUnowned parent_instance;
- ClutterLayoutManagerPrivate *priv;
+ gpointer CLUTTER_PRIVATE_FIELD (dummy);
};
/**
@@ -150,51 +149,64 @@ struct _ClutterLayoutManagerClass
void (* _clutter_padding_8) (void);
};
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_layout_manager_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_get_preferred_width (ClutterLayoutManager *manager,
ClutterContainer *container,
gfloat for_height,
gfloat *min_width_p,
gfloat *nat_width_p);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_get_preferred_height (ClutterLayoutManager *manager,
ClutterContainer *container,
gfloat for_width,
gfloat *min_height_p,
gfloat *nat_height_p);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_allocate (ClutterLayoutManager *manager,
ClutterContainer *container,
const ClutterActorBox *allocation,
ClutterAllocationFlags flags);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_set_container (ClutterLayoutManager *manager,
ClutterContainer *container);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_layout_changed (ClutterLayoutManager *manager);
+CLUTTER_AVAILABLE_IN_1_2
GParamSpec * clutter_layout_manager_find_child_property (ClutterLayoutManager *manager,
const gchar *name);
+CLUTTER_AVAILABLE_IN_1_2
GParamSpec ** clutter_layout_manager_list_child_properties (ClutterLayoutManager *manager,
guint *n_pspecs);
+CLUTTER_AVAILABLE_IN_1_2
ClutterLayoutMeta *clutter_layout_manager_get_child_meta (ClutterLayoutManager *manager,
ClutterContainer *container,
ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_child_set (ClutterLayoutManager *manager,
ClutterContainer *container,
ClutterActor *actor,
const gchar *first_property,
...) G_GNUC_NULL_TERMINATED;
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_child_get (ClutterLayoutManager *manager,
ClutterContainer *container,
ClutterActor *actor,
const gchar *first_property,
...) G_GNUC_NULL_TERMINATED;
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_child_set_property (ClutterLayoutManager *manager,
ClutterContainer *container,
ClutterActor *actor,
const gchar *property_name,
const GValue *value);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_layout_manager_child_get_property (ClutterLayoutManager *manager,
ClutterContainer *container,
ClutterActor *actor,
diff --git a/clutter/clutter-layout-meta.h b/clutter/clutter-layout-meta.h
index 0f7e7e82e..88ab97018 100644
--- a/clutter/clutter-layout-meta.h
+++ b/clutter/clutter-layout-meta.h
@@ -92,8 +92,10 @@ struct _ClutterLayoutMetaClass
void (*_clutter_padding4) (void);
};
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_layout_meta_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
ClutterLayoutManager *clutter_layout_meta_get_manager (ClutterLayoutMeta *data);
G_END_DECLS
diff --git a/clutter/clutter-list-model.c b/clutter/clutter-list-model.c
index 49ac9df9d..b1dec9b84 100644
--- a/clutter/clutter-list-model.c
+++ b/clutter/clutter-list-model.c
@@ -76,8 +76,6 @@
typedef struct _ClutterListModelIter ClutterListModelIter;
typedef struct _ClutterModelIterClass ClutterListModelIterClass;
-#define CLUTTER_LIST_MODEL_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_LIST_MODEL, ClutterListModelPrivate))
-
struct _ClutterListModelPrivate
{
GSequence *sequence;
@@ -102,7 +100,7 @@ GType clutter_list_model_iter_get_type (void);
G_DEFINE_TYPE (ClutterListModelIter,
clutter_list_model_iter,
- CLUTTER_TYPE_MODEL_ITER);
+ CLUTTER_TYPE_MODEL_ITER)
static void
clutter_list_model_iter_get_value (ClutterModelIter *iter,
@@ -434,7 +432,7 @@ clutter_list_model_iter_init (ClutterListModelIter *iter)
* ClutterListModel
*/
-G_DEFINE_TYPE (ClutterListModel, clutter_list_model, CLUTTER_TYPE_MODEL);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterListModel, clutter_list_model, CLUTTER_TYPE_MODEL)
static ClutterModelIter *
clutter_list_model_get_iter_at_row (ClutterModel *model,
@@ -698,24 +696,21 @@ clutter_list_model_class_init (ClutterListModelClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterModelClass *model_class = CLUTTER_MODEL_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterListModelPrivate));
-
gobject_class->finalize = clutter_list_model_finalize;
gobject_class->dispose = clutter_list_model_dispose;
model_class->get_iter_at_row = clutter_list_model_get_iter_at_row;
- model_class->insert_row = clutter_list_model_insert_row;
- model_class->remove_row = clutter_list_model_remove_row;
- model_class->resort = clutter_list_model_resort;
- model_class->get_n_rows = clutter_list_model_get_n_rows;
-
- model_class->row_removed = clutter_list_model_row_removed;
+ model_class->insert_row = clutter_list_model_insert_row;
+ model_class->remove_row = clutter_list_model_remove_row;
+ model_class->resort = clutter_list_model_resort;
+ model_class->get_n_rows = clutter_list_model_get_n_rows;
+ model_class->row_removed = clutter_list_model_row_removed;
}
static void
clutter_list_model_init (ClutterListModel *model)
{
- model->priv = CLUTTER_LIST_MODEL_GET_PRIVATE (model);
+ model->priv = clutter_list_model_get_instance_private (model);
model->priv->sequence = g_sequence_new (NULL);
model->priv->temp_iter = g_object_new (CLUTTER_TYPE_LIST_MODEL_ITER,
diff --git a/clutter/clutter-list-model.h b/clutter/clutter-list-model.h
index e84cef581..ed52823fb 100644
--- a/clutter/clutter-list-model.h
+++ b/clutter/clutter-list-model.h
@@ -75,10 +75,13 @@ struct _ClutterListModelClass
ClutterModelClass parent_class;
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_list_model_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterModel *clutter_list_model_new (guint n_columns,
...);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModel *clutter_list_model_newv (guint n_columns,
GType *types,
const gchar * const names[]);
diff --git a/clutter/clutter-macros.h b/clutter/clutter-macros.h
index db797d9a4..dc593f15f 100644
--- a/clutter/clutter-macros.h
+++ b/clutter/clutter-macros.h
@@ -92,6 +92,10 @@
#define CLUTTER_PRIVATE_FIELD(x) clutter_private_ ## x
#endif
+#ifndef _CLUTTER_EXTERN
+#define _CLUTTER_EXTERN extern
+#endif
+
/* these macros are used to mark deprecated functions, and thus have to be
* exposed in a public header.
*
@@ -99,15 +103,17 @@
* and G_DEPRECATED_FOR, or use your own wrappers around them.
*/
#ifdef CLUTTER_DISABLE_DEPRECATION_WARNINGS
-#define CLUTTER_DEPRECATED
-#define CLUTTER_DEPRECATED_FOR(f)
-#define CLUTTER_UNAVAILABLE(maj,min)
+#define CLUTTER_DEPRECATED _CLUTTER_EXTERN
+#define CLUTTER_DEPRECATED_FOR(f) _CLUTTER_EXTERN
+#define CLUTTER_UNAVAILABLE(maj,min) _CLUTTER_EXTERN
#else
-#define CLUTTER_DEPRECATED G_DEPRECATED
-#define CLUTTER_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f)
-#define CLUTTER_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min)
+#define CLUTTER_DEPRECATED G_DEPRECATED _CLUTTER_EXTERN
+#define CLUTTER_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _CLUTTER_EXTERN
+#define CLUTTER_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _CLUTTER_EXTERN
#endif
+#define CLUTTER_AVAILABLE_IN_ALL _CLUTTER_EXTERN
+
/**
* CLUTTER_VERSION_MIN_REQUIRED:
*
@@ -168,126 +174,168 @@
# define CLUTTER_DEPRECATED_IN_1_0 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_0_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_0
-# define CLUTTER_DEPRECATED_IN_1_0_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_0 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_0_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_0
# define CLUTTER_AVAILABLE_IN_1_0 CLUTTER_UNAVAILABLE(1, 0)
#else
-# define CLUTTER_AVAILABLE_IN_1_0
+# define CLUTTER_AVAILABLE_IN_1_0 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_2
# define CLUTTER_DEPRECATED_IN_1_2 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_2_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_2
-# define CLUTTER_DEPRECATED_IN_1_2_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_2 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_2_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_2
# define CLUTTER_AVAILABLE_IN_1_2 CLUTTER_UNAVAILABLE(1, 2)
#else
-# define CLUTTER_AVAILABLE_IN_1_2
+# define CLUTTER_AVAILABLE_IN_1_2 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_4
# define CLUTTER_DEPRECATED_IN_1_4 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_4_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_4
-# define CLUTTER_DEPRECATED_IN_1_4_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_4 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_4_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_4
# define CLUTTER_AVAILABLE_IN_1_4 CLUTTER_UNAVAILABLE(1, 4)
#else
-# define CLUTTER_AVAILABLE_IN_1_4
+# define CLUTTER_AVAILABLE_IN_1_4 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_6
# define CLUTTER_DEPRECATED_IN_1_6 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_6_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_6
-# define CLUTTER_DEPRECATED_IN_1_6_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_6 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_6_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_6
# define CLUTTER_AVAILABLE_IN_1_6 CLUTTER_UNAVAILABLE(1, 6)
#else
-# define CLUTTER_AVAILABLE_IN_1_6
+# define CLUTTER_AVAILABLE_IN_1_6 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_8
# define CLUTTER_DEPRECATED_IN_1_8 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_8_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_8
-# define CLUTTER_DEPRECATED_IN_1_8_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_8 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_8_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_8
# define CLUTTER_AVAILABLE_IN_1_8 CLUTTER_UNAVAILABLE(1, 8)
#else
-# define CLUTTER_AVAILABLE_IN_1_8
+# define CLUTTER_AVAILABLE_IN_1_8 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_10
# define CLUTTER_DEPRECATED_IN_1_10 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_10_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_10
-# define CLUTTER_DEPRECATED_IN_1_10_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_10 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_10_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_10
# define CLUTTER_AVAILABLE_IN_1_10 CLUTTER_UNAVAILABLE(1, 10)
#else
-# define CLUTTER_AVAILABLE_IN_1_10
+# define CLUTTER_AVAILABLE_IN_1_10 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_12
# define CLUTTER_DEPRECATED_IN_1_12 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_12_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_12
-# define CLUTTER_DEPRECATED_IN_1_12_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_12 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_12_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_12
# define CLUTTER_AVAILABLE_IN_1_12 CLUTTER_UNAVAILABLE(1, 12)
#else
-# define CLUTTER_AVAILABLE_IN_1_12
+# define CLUTTER_AVAILABLE_IN_1_12 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_14
# define CLUTTER_DEPRECATED_IN_1_14 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_14_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_14
-# define CLUTTER_DEPRECATED_IN_1_14_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_14 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_14_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_14
# define CLUTTER_AVAILABLE_IN_1_14 CLUTTER_UNAVAILABLE(1, 14)
#else
-# define CLUTTER_AVAILABLE_IN_1_14
+# define CLUTTER_AVAILABLE_IN_1_14 _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_16
# define CLUTTER_DEPRECATED_IN_1_16 CLUTTER_DEPRECATED
# define CLUTTER_DEPRECATED_IN_1_16_FOR(f) CLUTTER_DEPRECATED_FOR(f)
#else
-# define CLUTTER_DEPRECATED_IN_1_16
-# define CLUTTER_DEPRECATED_IN_1_16_FOR(f)
+# define CLUTTER_DEPRECATED_IN_1_16 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_16_FOR(f) _CLUTTER_EXTERN
#endif
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_16
# define CLUTTER_AVAILABLE_IN_1_16 CLUTTER_UNAVAILABLE(1, 16)
#else
-# define CLUTTER_AVAILABLE_IN_1_16
+# define CLUTTER_AVAILABLE_IN_1_16 _CLUTTER_EXTERN
+#endif
+
+#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_18
+# define CLUTTER_DEPRECATED_IN_1_18 CLUTTER_DEPRECATED
+# define CLUTTER_DEPRECATED_IN_1_18_FOR(f) CLUTTER_DEPRECATED_FOR(f)
+#else
+# define CLUTTER_DEPRECATED_IN_1_18 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_18_FOR(f) _CLUTTER_EXTERN
+#endif
+
+#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_18
+# define CLUTTER_AVAILABLE_IN_1_18 CLUTTER_UNAVAILABLE(1, 18)
+#else
+# define CLUTTER_AVAILABLE_IN_1_18 _CLUTTER_EXTERN
+#endif
+
+#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_20
+# define CLUTTER_DEPRECATED_IN_1_20 CLUTTER_DEPRECATED
+# define CLUTTER_DEPRECATED_IN_1_20_FOR(f) CLUTTER_DEPRECATED_FOR(f)
+#else
+# define CLUTTER_DEPRECATED_IN_1_20 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_20_FOR(f) _CLUTTER_EXTERN
+#endif
+
+#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_20
+# define CLUTTER_AVAILABLE_IN_1_20 CLUTTER_UNAVAILABLE(1, 20)
+#else
+# define CLUTTER_AVAILABLE_IN_1_20 _CLUTTER_EXTERN
+#endif
+
+#if CLUTTER_VERSION_MIN_REQUIRED >= CLUTTER_VERSION_1_22
+# define CLUTTER_DEPRECATED_IN_1_22 CLUTTER_DEPRECATED
+# define CLUTTER_DEPRECATED_IN_1_22_FOR(f) CLUTTER_DEPRECATED_FOR(f)
+#else
+# define CLUTTER_DEPRECATED_IN_1_22 _CLUTTER_EXTERN
+# define CLUTTER_DEPRECATED_IN_1_22_FOR(f) _CLUTTER_EXTERN
+#endif
+
+#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_22
+# define CLUTTER_AVAILABLE_IN_1_22 CLUTTER_UNAVAILABLE(1, 22)
+#else
+# define CLUTTER_AVAILABLE_IN_1_22 _CLUTTER_EXTERN
#endif
#endif /* __CLUTTER_MACROS_H__ */
diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c
index d0d6185e2..c21f897d2 100644
--- a/clutter/clutter-main.c
+++ b/clutter/clutter-main.c
@@ -23,70 +23,28 @@
/**
* SECTION:clutter-main
- * @short_description: Various 'global' clutter functions.
+ * @short_description: Various 'global' Clutter functions.
*
* Functions to retrieve various global Clutter resources and other utility
* functions for mainloops, events and threads
*
- *
- * Threading Model
- * Clutter is thread-aware: all operations
- * performed by Clutter are assumed to be under the big Clutter lock,
- * which is created when the threading is initialized through
- * clutter_init().
- *
- * Thread Initialization
- * The code below shows how to correctly initialize Clutter
- * in a multi-threaded environment. These operations are mandatory for
- * applications that wish to use threads with Clutter.
- *
- * int
- * main (int argc, char *argv[])
- * {
- * /* initialize Clutter */
- * clutter_init (&argc, &argv);
+ * ## The Clutter Threading Model
*
- * /* program code */
+ * Clutter is *thread-aware*: all operations performed by Clutter are assumed
+ * to be under the Big Clutter Lock, which is created when the threading is
+ * initialized through clutter_init(), and entered when calling user-related
+ * code during event handling and actor drawing.
*
- * /* acquire the main lock */
- * clutter_threads_enter ();
+ * The only safe and portable way to use the Clutter API in a multi-threaded
+ * environment is to only access the Clutter API from a thread that did called
+ * clutter_init() and clutter_main().
*
- * /* start the main loop */
- * clutter_main ();
+ * The common pattern for using threads with Clutter is to use worker threads
+ * to perform blocking operations and then install idle or timeout sources with
+ * the result when the thread finishes, and update the UI from those callbacks.
*
- * /* release the main lock */
- * clutter_threads_leave ();
- *
- * /* clean up */
- * return 0;
- * }
- *
- *
- * This threading model has the caveat that it is only safe to call
- * Clutter's API when the lock has been acquired — which happens
- * between pairs of clutter_threads_enter() and clutter_threads_leave()
- * calls.
- * The only safe and portable way to use the Clutter API in a
- * multi-threaded environment is to never access the API from a thread that
- * did not call clutter_init() and clutter_main().
- * The common pattern for using threads with Clutter is to use worker
- * threads to perform blocking operations and then install idle or timeout
- * sources with the result when the thread finished.
- * Clutter provides thread-aware variants of g_idle_add() and
- * g_timeout_add() that acquire the Clutter lock before invoking the provided
- * callback: clutter_threads_add_idle() and
- * clutter_threads_add_timeout().
- * The example below shows how to use a worker thread to perform a
- * blocking operation, and perform UI updates using the main loop.
- *
- * A worker thread example
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
- *
+ * For a working example of how to use a worker thread to update the UI, see
+ * [threads.c](https://git.gnome.org/browse/clutter/tree/examples/threads.c?h=clutter-1.18)
*/
#ifdef HAVE_CONFIG_H
@@ -556,12 +514,10 @@ clutter_redraw (ClutterStage *stage)
* all #ClutterStages managed by Clutter.
*
* If @enable is %FALSE the following events will not work:
- *
- * ClutterActor::motion-event, unless on the
- * #ClutterStage
- * ClutterActor::enter-event
- * ClutterActor::leave-event
- *
+ *
+ * - ClutterActor::motion-event, except on the #ClutterStage
+ * - ClutterActor::enter-event
+ * - ClutterActor::leave-event
*
* Since: 0.6
*
@@ -611,20 +567,6 @@ clutter_get_motion_events_enabled (void)
return _clutter_context_get_motion_events_enabled ();
}
-ClutterActor *
-_clutter_get_actor_by_id (ClutterStage *stage,
- guint32 actor_id)
-{
- if (stage == NULL)
- {
- ClutterMainContext *context = _clutter_context_get_default ();
-
- return _clutter_id_pool_lookup (context->id_pool, actor_id);
- }
-
- return _clutter_stage_get_actor_by_pick_id (stage, actor_id);
-}
-
void
_clutter_id_to_color (guint id_,
ClutterColor *col)
@@ -808,86 +750,6 @@ clutter_get_text_direction (void)
return dir;
}
-static void
-update_pango_context (ClutterBackend *backend,
- PangoContext *context)
-{
- ClutterSettings *settings;
- PangoFontDescription *font_desc;
- const cairo_font_options_t *font_options;
- gchar *font_name;
- PangoDirection pango_dir;
- gdouble resolution;
-
- settings = clutter_settings_get_default ();
-
- /* update the text direction */
- if (clutter_text_direction == CLUTTER_TEXT_DIRECTION_RTL)
- pango_dir = PANGO_DIRECTION_RTL;
- else
- pango_dir = PANGO_DIRECTION_LTR;
-
- pango_context_set_base_dir (context, pango_dir);
-
- g_object_get (settings, "font-name", &font_name, NULL);
-
- /* get the configuration for the PangoContext from the backend */
- font_options = clutter_backend_get_font_options (backend);
- resolution = clutter_backend_get_resolution (backend);
-
- font_desc = pango_font_description_from_string (font_name);
-
- if (resolution < 0)
- resolution = 96.0; /* fall back */
-
- pango_context_set_font_description (context, font_desc);
- pango_cairo_context_set_font_options (context, font_options);
- pango_cairo_context_set_resolution (context, resolution);
-
- pango_font_description_free (font_desc);
- g_free (font_name);
-}
-
-PangoContext *
-_clutter_context_get_pango_context (void)
-{
- ClutterMainContext *self = _clutter_context_get_default ();
-
- if (G_UNLIKELY (self->pango_context == NULL))
- {
- PangoContext *context;
-
- context = _clutter_context_create_pango_context ();
- self->pango_context = context;
-
- g_signal_connect (self->backend, "resolution-changed",
- G_CALLBACK (update_pango_context),
- self->pango_context);
- g_signal_connect (self->backend, "font-changed",
- G_CALLBACK (update_pango_context),
- self->pango_context);
- }
- else
- update_pango_context (self->backend, self->pango_context);
-
- return self->pango_context;
-}
-
-PangoContext *
-_clutter_context_create_pango_context (void)
-{
- CoglPangoFontMap *font_map;
- PangoContext *context;
-
- font_map = clutter_context_get_pango_fontmap ();
-
- context = cogl_pango_font_map_create_context (font_map);
- update_pango_context (clutter_get_default_backend (), context);
- pango_context_set_language (context, pango_language_get_default ());
-
- return context;
-}
-
/**
* clutter_main_quit:
*
@@ -896,7 +758,15 @@ _clutter_context_create_pango_context (void)
void
clutter_main_quit (void)
{
- g_return_if_fail (main_loops != NULL);
+ if (main_loops == NULL)
+ {
+ g_critical ("Calling clutter_main_quit() without calling clutter_main() "
+ "is not allowed. If you are using another main loop, use the "
+ "appropriate API to terminate it.");
+ return;
+ }
+
+ CLUTTER_NOTE (MISC, "Terminating main loop level %d", clutter_main_loop_level);
g_main_loop_quit (main_loops->data);
}
@@ -945,14 +815,6 @@ void
clutter_main (void)
{
GMainLoop *loop;
- CLUTTER_STATIC_TIMER (mainloop_timer,
- NULL, /* no parent */
- "Mainloop",
- "The time spent in the clutter mainloop",
- 0 /* no application private data */);
-
- if (clutter_main_loop_level == 0)
- CLUTTER_TIMER_START (uprof_get_mainloop_context (), mainloop_timer);
if (!_clutter_context_is_initialized ())
{
@@ -961,8 +823,6 @@ clutter_main (void)
return;
}
- clutter_main_loop_level++;
-
#ifdef CLUTTER_ENABLE_PROFILE
if (!prev_poll)
{
@@ -971,6 +831,10 @@ clutter_main (void)
}
#endif
+ clutter_main_loop_level++;
+
+ CLUTTER_NOTE (MISC, "Entering main loop level %d", clutter_main_loop_level);
+
loop = g_main_loop_new (NULL, TRUE);
main_loops = g_slist_prepend (main_loops, loop);
@@ -985,10 +849,9 @@ clutter_main (void)
g_main_loop_unref (loop);
- clutter_main_loop_level--;
+ CLUTTER_NOTE (MISC, "Leaving main loop level %d", clutter_main_loop_level);
- if (clutter_main_loop_level == 0)
- CLUTTER_TIMER_STOP (uprof_get_mainloop_context (), mainloop_timer);
+ clutter_main_loop_level--;
}
/**
@@ -1088,7 +951,7 @@ _clutter_threads_dispatch_free (gpointer data)
}
/**
- * clutter_threads_add_idle_full:
+ * clutter_threads_add_idle_full: (rename-to clutter_threads_add_idle)
* @priority: the priority of the timeout source. Typically this will be in the
* range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE
* @func: function to call
@@ -1110,13 +973,13 @@ _clutter_threads_dispatch_free (gpointer data)
* SafeClosure *closure = data;
* gboolean res = FALSE;
*
- * /* mark the critical section */
+ * // mark the critical section //
*
* clutter_threads_enter();
*
- * /* the callback does not need to acquire the Clutter
- * * lock itself, as it is held by the this proxy handler
- * */
+ * // the callback does not need to acquire the Clutter
+ * / lock itself, as it is held by the this proxy handler
+ * //
* res = closure->callback (closure->data);
*
* clutter_threads_leave();
@@ -1129,8 +992,8 @@ _clutter_threads_dispatch_free (gpointer data)
* {
* SafeClosure *closure = g_new0 (SafeClosure, 1);
*
- * closure->callback = callback;
- * closure->data = data;
+ * closure->callback = callback;
+ * closure->data = data;
*
* return g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
* idle_safe_callback,
@@ -1151,24 +1014,24 @@ _clutter_threads_dispatch_free (gpointer data)
* {
* SomeClosure *closure = data;
*
- * /* it is safe to call Clutter API from this function because
- * * it is invoked from the same thread that started the main
- * * loop and under the Clutter thread lock
- * */
- * clutter_label_set_text (CLUTTER_LABEL (closure->label),
- * closure->text);
+ * // it is safe to call Clutter API from this function because
+ * / it is invoked from the same thread that started the main
+ * / loop and under the Clutter thread lock
+ * //
+ * clutter_label_set_text (CLUTTER_LABEL (closure->label),
+ * closure->text);
*
- * g_object_unref (closure->label);
+ * g_object_unref (closure->label);
* g_free (closure);
*
* return FALSE;
* }
*
- * /* within another thread */
+ * // within another thread //
* closure = g_new0 (SomeClosure, 1);
- * /* always take a reference on GObject instances */
- * closure->label = g_object_ref (my_application->label);
- * closure->text = g_strdup (processed_text_to_update_the_label);
+ * // always take a reference on GObject instances //
+ * closure->label = g_object_ref (my_application->label);
+ * closure->text = g_strdup (processed_text_to_update_the_label);
*
* clutter_threads_add_idle_full (G_PRIORITY_HIGH_IDLE,
* update_ui,
@@ -1176,8 +1039,6 @@ _clutter_threads_dispatch_free (gpointer data)
* NULL);
* ]|
*
- * Rename to: clutter_threads_add_idle
- *
* Return value: the ID (greater than 0) of the event source.
*
* Since: 0.4
@@ -1226,7 +1087,7 @@ clutter_threads_add_idle (GSourceFunc func,
}
/**
- * clutter_threads_add_timeout_full:
+ * clutter_threads_add_timeout_full: (rename-to clutter_threads_add_timeout)
* @priority: the priority of the timeout source. Typically this will be in the
* range between #G_PRIORITY_DEFAULT and #G_PRIORITY_HIGH.
* @interval: the time between calls to the function, in milliseconds
@@ -1248,8 +1109,6 @@ clutter_threads_add_idle (GSourceFunc func,
*
* See also clutter_threads_add_idle_full().
*
- * Rename to: clutter_threads_add_timeout
- *
* Return value: the ID (greater than 0) of the event source.
*
* Since: 0.4
@@ -1390,53 +1249,6 @@ _clutter_context_is_initialized (void)
return ClutterCntx->is_initialized;
}
-static ClutterBackend *
-clutter_create_backend (void)
-{
- const char *backend = g_getenv ("CLUTTER_BACKEND");
- ClutterBackend *retval = NULL;
-
- if (backend != NULL)
- backend = g_intern_string (backend);
-
-#ifdef CLUTTER_WINDOWING_OSX
- if (backend == NULL || backend == I_(CLUTTER_WINDOWING_OSX))
- retval = g_object_new (CLUTTER_TYPE_BACKEND_OSX, NULL);
- else
-#endif
-#ifdef CLUTTER_WINDOWING_WIN32
- if (backend == NULL || backend == I_(CLUTTER_WINDOWING_WIN32))
- retval = g_object_new (CLUTTER_TYPE_BACKEND_WIN32, NULL);
- else
-#endif
-#ifdef CLUTTER_WINDOWING_X11
- if (backend == NULL || backend == I_(CLUTTER_WINDOWING_X11))
- retval = g_object_new (CLUTTER_TYPE_BACKEND_X11, NULL);
- else
-#endif
-#ifdef CLUTTER_WINDOWING_WAYLAND
- if (backend == NULL || backend == I_(CLUTTER_WINDOWING_WAYLAND))
- retval = g_object_new (CLUTTER_TYPE_BACKEND_WAYLAND, NULL);
- else
-#endif
-#ifdef CLUTTER_WINDOWING_EGL
- if (backend == NULL || backend == I_(CLUTTER_WINDOWING_EGL))
- retval = g_object_new (CLUTTER_TYPE_BACKEND_EGL_NATIVE, NULL);
- else
-#endif
-#ifdef CLUTTER_WINDOWING_GDK
- if (backend == NULL || backend == I_(CLUTTER_WINDOWING_GDK))
- retval = g_object_new (CLUTTER_TYPE_BACKEND_GDK, NULL);
- else
-#endif
- if (backend == NULL)
- g_error ("No default Clutter backend found.");
- else
- g_error ("Unsupported Clutter backend: '%s'", backend);
-
- return retval;
-}
-
static ClutterMainContext *
clutter_context_get_default_unlocked (void)
{
@@ -1449,7 +1261,7 @@ clutter_context_get_default_unlocked (void)
ctx->is_initialized = FALSE;
/* create the windowing system backend */
- ctx->backend = clutter_create_backend ();
+ ctx->backend = _clutter_create_backend ();
/* create the default settings object, and store a back pointer to
* the backend singleton
@@ -1584,6 +1396,14 @@ clutter_init_real (GError **error)
ClutterMainContext *ctx;
ClutterBackend *backend;
+#ifdef CLUTTER_ENABLE_PROFILE
+ CLUTTER_STATIC_TIMER (mainloop_timer,
+ NULL, /* no parent */
+ "Mainloop",
+ "The time spent in the clutter mainloop",
+ 0 /* no application private data */);
+#endif
+
/* Note, creates backend if not already existing, though parse args will
* have likely created it
*/
@@ -1645,6 +1465,8 @@ clutter_init_real (GError **error)
uprof_init (NULL, NULL);
_clutter_uprof_init ();
+ CLUTTER_TIMER_START (uprof_get_mainloop_context (), mainloop_timer);
+
if (clutter_profile_flags & CLUTTER_PROFILE_PICKING_ONLY)
_clutter_profile_suspend ();
#endif
@@ -1726,8 +1548,6 @@ pre_parse_hook (GOptionContext *context,
clutter_context = _clutter_context_get_default ();
- clutter_context->id_pool = _clutter_id_pool_new (256);
-
backend = clutter_context->backend;
g_assert (CLUTTER_IS_BACKEND (backend));
@@ -1856,13 +1676,13 @@ post_parse_hook (GOptionContext *context,
*
* |[
* g_option_context_set_main_group (context, clutter_get_option_group ());
- * res = g_option_context_parse (context, &argc, &argc, NULL);
+ * res = g_option_context_parse (context, &argc, &argc, NULL);
* ]|
*
* is functionally equivalent to:
*
* |[
- * clutter_init (&argc, &argv);
+ * clutter_init (&argc, &argv);
* ]|
*
* After g_option_context_parse() on a #GOptionContext containing the
@@ -1912,7 +1732,7 @@ clutter_get_option_group (void)
* the #GOptionGroup returned by this function requires a subsequent explicit
* call to clutter_init(); use this function when needing to set foreign
* display connection with clutter_x11_set_display(), or with
- * gtk_clutter_init().
+ * `gtk_clutter_init()`.
*
* Return value: (transfer full): a #GOptionGroup for the commandline arguments
* recognized by Clutter
@@ -2097,12 +1917,12 @@ clutter_parse_args (int *argc,
*
* It is safe to call this function multiple times.
*
- * This function will not abort in case of errors during
+ * This function will not abort in case of errors during
* initialization; clutter_init() will print out the error message on
* stderr, and will return an error code. It is up to the application
* code to handle this case. If you need to display the error message
* yourself, you can use clutter_init_with_args(), which takes a #GError
- * pointer.
+ * pointer.
*
* If this function fails, and returns an error code, any subsequent
* Clutter API will have undefined behaviour - including segmentation
@@ -2326,6 +2146,9 @@ emit_pointer_event (ClutterEvent *event,
{
ClutterMainContext *context = _clutter_context_get_default ();
+ if (_clutter_event_process_filters (event))
+ return;
+
if (context->pointer_grab_actor == NULL &&
(device == NULL || device->pointer_grab_actor == NULL))
{
@@ -2353,6 +2176,9 @@ emit_touch_event (ClutterEvent *event,
{
ClutterActor *grab_actor = NULL;
+ if (_clutter_event_process_filters (event))
+ return;
+
if (device->sequence_grab_actors != NULL)
{
grab_actor = g_hash_table_lookup (device->sequence_grab_actors,
@@ -2377,6 +2203,9 @@ emit_keyboard_event (ClutterEvent *event,
{
ClutterMainContext *context = _clutter_context_get_default ();
+ if (_clutter_event_process_filters (event))
+ return;
+
if (context->keyboard_grab_actor == NULL &&
(device == NULL || device->keyboard_grab_actor == NULL))
{
@@ -2448,7 +2277,7 @@ clutter_do_event (ClutterEvent *event)
* because we've "looked ahead" and know all motion events that
* will occur before drawing the frame.
*/
- _clutter_stage_queue_event (event->any.stage, event);
+ _clutter_stage_queue_event (event->any.stage, event, TRUE);
}
static void
@@ -2540,6 +2369,10 @@ _clutter_process_event_details (ClutterActor *stage,
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_DELETE:
event->any.source = stage;
+
+ if (_clutter_event_process_filters (event))
+ break;
+
/* the stage did not handle the event, so we just quit */
clutter_stage_event (CLUTTER_STAGE (stage), event);
break;
@@ -2552,6 +2385,9 @@ _clutter_process_event_details (ClutterActor *stage,
/* Only stage gets motion events */
event->any.source = stage;
+ if (_clutter_event_process_filters (event))
+ break;
+
/* global grabs */
if (context->pointer_grab_actor != NULL)
{
@@ -2679,6 +2515,9 @@ _clutter_process_event_details (ClutterActor *stage,
/* Only stage gets motion events */
event->any.source = stage;
+ if (_clutter_event_process_filters (event))
+ break;
+
/* global grabs */
if (device->sequence_grab_actors != NULL)
{
@@ -2782,7 +2621,8 @@ _clutter_process_event_details (ClutterActor *stage,
case CLUTTER_STAGE_STATE:
/* fullscreen / focus - forward to stage */
event->any.source = stage;
- clutter_stage_event (CLUTTER_STAGE (stage), event);
+ if (!_clutter_event_process_filters (event))
+ clutter_stage_event (CLUTTER_STAGE (stage), event);
break;
case CLUTTER_CLIENT_MESSAGE:
@@ -2837,12 +2677,14 @@ _clutter_process_event (ClutterEvent *event)
*
* Since: 0.6
*
- * Deprecated: 1.8: The id is not used any longer.
+ * Deprecated: 1.8: The id is deprecated, and this function always returns
+ * %NULL. Use the proper scene graph API in #ClutterActor to find a child
+ * of the stage.
*/
ClutterActor *
clutter_get_actor_by_gid (guint32 id_)
{
- return _clutter_get_actor_by_id (NULL, id_);
+ return NULL;
}
void
@@ -2946,10 +2788,10 @@ on_grab_actor_destroy (ClutterActor *actor,
* the event delivery chain. The source set in the event will be the actor
* that would have received the event if the pointer grab was not in effect.
*
- * Grabs completely override the entire event delivery chain
+ * Grabs completely override the entire event delivery chain
* done by Clutter. Pointer grabs should only be used as a last resource;
* using the #ClutterActor::captured-event signal should always be the
- * preferred way to intercept event delivery to reactive actors.
+ * preferred way to intercept event delivery to reactive actors.
*
* This function should rarely be used.
*
@@ -3348,7 +3190,6 @@ clutter_clear_glyph_cache (void)
void
clutter_set_font_flags (ClutterFontFlags flags)
{
- ClutterMainContext *context = _clutter_context_get_default ();
CoglPangoFontMap *font_map;
ClutterFontFlags old_flags, changed_flags;
const cairo_font_options_t *font_options;
@@ -3398,10 +3239,6 @@ clutter_set_font_flags (ClutterFontFlags flags)
clutter_backend_set_font_options (backend, new_font_options);
cairo_font_options_destroy (new_font_options);
-
- /* update the default pango context, if any */
- if (context->pango_context != NULL)
- update_pango_context (backend, context->pango_context);
}
/**
@@ -3806,22 +3643,6 @@ _clutter_clear_events_queue (void)
}
}
-guint32
-_clutter_context_acquire_id (gpointer key)
-{
- ClutterMainContext *context = _clutter_context_get_default ();
-
- return _clutter_id_pool_add (context->id_pool, key);
-}
-
-void
-_clutter_context_release_id (guint32 id_)
-{
- ClutterMainContext *context = _clutter_context_get_default ();
-
- _clutter_id_pool_remove (context->id_pool, id_);
-}
-
void
_clutter_clear_events_queue_for_stage (ClutterStage *stage)
{
@@ -3905,20 +3726,20 @@ _clutter_context_get_motion_events_enabled (void)
* windowing system; for instance:
*
* |[
- * #ifdef CLUTTER_WINDOWING_X11
+ * #ifdef CLUTTER_WINDOWING_X11
* if (clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
* {
- * /* it is safe to use the clutter_x11_* API */
+ * // it is safe to use the clutter_x11_* API
* }
* else
- * #endif
- * #ifdef CLUTTER_WINDOWING_WIN32
+ * #endif
+ * #ifdef CLUTTER_WINDOWING_WIN32
* if (clutter_check_windowing_backend (CLUTTER_WINDOWING_WIN32))
* {
- * /* it is safe to use the clutter_win32_* API */
+ * // it is safe to use the clutter_win32_* API
* }
* else
- * #endif
+ * #endif
* g_error ("Unknown Clutter backend.");
* ]|
*
@@ -3975,6 +3796,12 @@ clutter_check_windowing_backend (const char *backend_type)
return FALSE;
}
+void
+_clutter_set_sync_to_vblank (gboolean sync_to_vblank)
+{
+ clutter_sync_to_vblank = !!sync_to_vblank;
+}
+
gboolean
_clutter_get_sync_to_vblank (void)
{
diff --git a/clutter/clutter-main.h b/clutter/clutter-main.h
index b7c856585..c7f246075 100644
--- a/clutter/clutter-main.h
+++ b/clutter/clutter-main.h
@@ -61,6 +61,7 @@ typedef enum {
CLUTTER_INIT_ERROR_INTERNAL = -3
} ClutterInitError;
+CLUTTER_AVAILABLE_IN_ALL
GQuark clutter_init_error_quark (void);
/**
@@ -77,9 +78,12 @@ GQuark clutter_init_error_quark (void);
#define CLUTTER_PRIORITY_REDRAW (G_PRIORITY_HIGH_IDLE + 50)
/* Initialisation */
+CLUTTER_AVAILABLE_IN_ALL
void clutter_base_init (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterInitError clutter_init (int *argc,
char ***argv) G_GNUC_WARN_UNUSED_RESULT;
+CLUTTER_AVAILABLE_IN_ALL
ClutterInitError clutter_init_with_args (int *argc,
char ***argv,
const char *parameter_string,
@@ -87,39 +91,52 @@ ClutterInitError clutter_init_with_args (int *a
const char *translation_domain,
GError **error) G_GNUC_WARN_UNUSED_RESULT;
+CLUTTER_AVAILABLE_IN_ALL
GOptionGroup * clutter_get_option_group (void);
+CLUTTER_AVAILABLE_IN_ALL
GOptionGroup * clutter_get_option_group_without_init (void);
/* Mainloop */
+CLUTTER_AVAILABLE_IN_ALL
void clutter_main (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_main_quit (void);
+CLUTTER_AVAILABLE_IN_ALL
gint clutter_main_level (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_do_event (ClutterEvent *event);
/* Debug utility functions */
+CLUTTER_AVAILABLE_IN_1_4
gboolean clutter_get_accessibility_enabled (void);
CLUTTER_AVAILABLE_IN_1_14
void clutter_disable_accessibility (void);
/* Threading functions */
+CLUTTER_AVAILABLE_IN_ALL
void clutter_threads_set_lock_functions (GCallback enter_fn,
GCallback leave_fn);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_threads_add_idle (GSourceFunc func,
gpointer data);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_threads_add_idle_full (gint priority,
GSourceFunc func,
gpointer data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_threads_add_timeout (guint interval,
GSourceFunc func,
gpointer data);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_threads_add_timeout_full (gint priority,
guint interval,
GSourceFunc func,
gpointer data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_threads_add_repaint_func (GSourceFunc func,
gpointer data,
GDestroyNotify notify);
@@ -128,21 +145,40 @@ guint clutter_threads_add_repaint_func_full (ClutterRepaintF
GSourceFunc func,
gpointer data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_threads_remove_repaint_func (guint handle_id);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_grab_pointer (ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_ungrab_pointer (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_get_pointer_grab (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_grab_keyboard (ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_ungrab_keyboard (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_get_keyboard_grab (void);
+CLUTTER_AVAILABLE_IN_ALL
PangoFontMap * clutter_get_font_map (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterTextDirection clutter_get_default_text_direction (void);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_get_default_frame_rate (void);
+CLUTTER_AVAILABLE_IN_1_2
+gboolean clutter_check_version (guint major,
+ guint minor,
+ guint micro);
+
+CLUTTER_AVAILABLE_IN_1_10
+gboolean clutter_check_windowing_backend (const char *backend_type);
+
+
G_END_DECLS
#endif /* _CLUTTER_MAIN_H__ */
diff --git a/clutter/clutter-master-clock.c b/clutter/clutter-master-clock.c
index 104ea0c81..b830818bc 100644
--- a/clutter/clutter-master-clock.c
+++ b/clutter/clutter-master-clock.c
@@ -52,8 +52,9 @@
gint64 __budget = master_clock->remaining_budget; \
if (__budget > 0 && __delta >= __budget) { \
_clutter_diagnostic_message ("%s took %" G_GINT64_FORMAT " microseconds " \
- "over a budget of %" G_GINT64_FORMAT " microseconds", \
- section, __delta, __budget); \
+ "more than the remaining budget of %" G_GINT64_FORMAT \
+ " microseconds", \
+ section, __delta - __budget, __budget); \
} } G_STMT_END
#else
#define clutter_warn_if_over_budget(master_clock,start_time,section)
@@ -92,6 +93,8 @@ struct _ClutterMasterClock
*/
guint idle : 1;
guint ensure_next_iteration : 1;
+
+ guint paused : 1;
};
struct _ClutterMasterClockClass
@@ -142,6 +145,9 @@ master_clock_is_running (ClutterMasterClock *master_clock)
stages = clutter_stage_manager_peek_stages (stage_manager);
+ if (master_clock->paused)
+ return FALSE;
+
if (master_clock->timelines)
return TRUE;
@@ -635,6 +641,7 @@ clutter_master_clock_init (ClutterMasterClock *self)
self->idle = FALSE;
self->ensure_next_iteration = FALSE;
+ self->paused = FALSE;
#ifdef CLUTTER_ENABLE_DEBUG
self->frame_budget = G_USEC_PER_SEC / 60;
@@ -739,3 +746,12 @@ _clutter_master_clock_ensure_next_iteration (ClutterMasterClock *master_clock)
master_clock->ensure_next_iteration = TRUE;
}
+
+void
+_clutter_master_clock_set_paused (ClutterMasterClock *master_clock,
+ gboolean paused)
+{
+ g_return_if_fail (CLUTTER_IS_MASTER_CLOCK (master_clock));
+
+ master_clock->paused = !!paused;
+}
diff --git a/clutter/clutter-master-clock.h b/clutter/clutter-master-clock.h
index 211f378ba..771a26d77 100644
--- a/clutter/clutter-master-clock.h
+++ b/clutter/clutter-master-clock.h
@@ -43,6 +43,8 @@ void _clutter_master_clock_remove_timeline (Clutter
ClutterTimeline *timeline);
void _clutter_master_clock_start_running (ClutterMasterClock *master_clock);
void _clutter_master_clock_ensure_next_iteration (ClutterMasterClock *master_clock);
+void _clutter_master_clock_set_paused (ClutterMasterClock *master_clock,
+ gboolean paused);
void _clutter_timeline_advance (ClutterTimeline *timeline,
gint64 tick_time);
diff --git a/clutter/clutter-model.c b/clutter/clutter-model.c
index 5ebaefa05..28ed76874 100644
--- a/clutter/clutter-model.c
+++ b/clutter/clutter-model.c
@@ -37,8 +37,11 @@
* The #ClutterModel class is a list model which can accept most GObject
* types as a column type.
*
- * Creating a simple clutter model:
- *
+ * ## Creating a simple ClutterModel
+ *
+ * The example below shows how to create a simple list model.
+ *
+ * |[
* enum
* {
* COLUMN_INT,
@@ -51,10 +54,10 @@
* ClutterModel *model;
* gint i;
*
- * model = clutter_model_default_new (N_COLUMNS,
- * /* column type, column title */
- * G_TYPE_INT, "my integers",
- * G_TYPE_STRING, "my strings");
+ * model = clutter_list_model_new (N_COLUMNS,
+ * // column type, title
+ * G_TYPE_INT, "my integers",
+ * G_TYPE_STRING, "my strings");
* for (i = 0; i < 10; i++)
* {
* gchar *string = g_strdup_printf ("String %d", i);
@@ -67,7 +70,9 @@
*
*
* }
- *
+ * ]|
+ *
+ * ## Iterating through a ClutterModel
*
* Iterating through the model consists of retrieving a new #ClutterModelIter
* pointing to the starting row, and calling clutter_model_iter_next() or
@@ -79,8 +84,7 @@
* after the last row. In an empty sequence, the first and last iterators are
* the same.
*
- * Iterating a #ClutterModel:
- *
+ * |[
* enum
* {
* COLUMN_INT,
@@ -93,10 +97,10 @@
* ClutterModel *model;
* ClutterModelIter *iter = NULL;
*
- * /* Fill the model */
+ * // fill the model
* model = populate_model ();
*
- * /* Get the first iter */
+ * // get the iterator for the first row in the model
* iter = clutter_model_get_first_iter (model);
* while (!clutter_model_iter_is_last (iter))
* {
@@ -105,32 +109,33 @@
* iter = clutter_model_iter_next (iter);
* }
*
- * /* Make sure to unref the iter */
+ * // Make sure to unref the iter
* g_object_unref (iter);
* }
- *
+ * ]|
*
* #ClutterModel is an abstract class. Clutter provides a list model
* implementation called #ClutterListModel which has been optimised
* for insertion and look up in sorted lists.
*
- *
- * ClutterModel custom properties for #ClutterScript
- * #ClutterModel defines a custom property "columns" for #ClutterScript
- * which allows defining the column names and types. It also defines a custom
- * "rows" property which allows filling the #ClutterModel with some
- * data.
- *
- * Example of the "columns" and "rows" custom properties
- * The definition below will create a #ClutterListModel with three
- * columns: the first one with name "Name" and containing strings; the
- * second one with name "Score" and containing integers; the third one with
- * name "Icon" and containing #ClutterTextures. The model is filled
- * with three rows. A row can be defined either with an array that holds
- * all columns of a row, or an object that holds "column-name" :
- * "column-value" pairs.
- *
- *
+ * #ClutterModel is available since Clutter 0.6
+ *
+ * ## ClutterModel custom properties for ClutterScript
+ *
+ * #ClutterModel defines a custom property "columns" for #ClutterScript
+ * which allows defining the column names and types. It also defines a custom
+ * "rows" property which allows filling the #ClutterModel with some
+ * data.
+ *
+ * The definition below will create a #ClutterListModel with three
+ * columns: the first one with name "Name" and containing strings; the
+ * second one with name "Score" and containing integers; the third one with
+ * name "Icon" and containing #ClutterTextures. The model is filled
+ * with three rows. A row can be defined either with an array that holds
+ * all columns of a row, or an object that holds "column-name" :
+ * "column-value" pairs.
+ *
+ * |[
* {
* "type" : "ClutterListModel",
* "id" : "teams-model",
@@ -145,11 +150,6 @@
* { "Name" : "Team 3", "Icon" : "team3-icon-script-id" }
* ]
* }
- *
- *
- *
- *
- * #ClutterModel is available since Clutter 0.6
*/
@@ -170,13 +170,6 @@
#include "clutter-scriptable.h"
#include "clutter-script-private.h"
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-
-G_DEFINE_ABSTRACT_TYPE_WITH_CODE
- (ClutterModel, clutter_model, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
-
enum
{
PROP_0,
@@ -198,9 +191,6 @@ enum
static guint model_signals[LAST_SIGNAL] = { 0, };
-#define CLUTTER_MODEL_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_MODEL, ClutterModelPrivate))
-
struct _ClutterModelPrivate
{
GType *column_types;
@@ -226,6 +216,13 @@ struct _ClutterModelPrivate
GDestroyNotify sort_notify;
};
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (ClutterModel, clutter_model, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterModel)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init))
+
static GType
clutter_model_real_get_column_type (ClutterModel *model,
guint column)
@@ -347,8 +344,6 @@ clutter_model_class_init (ClutterModelClass *klass)
gobject_class->get_property = clutter_model_get_property;
gobject_class->finalize = clutter_model_finalize;
- g_type_class_add_private (gobject_class, sizeof (ClutterModelPrivate));
-
klass->get_column_name = clutter_model_real_get_column_name;
klass->get_column_type = clutter_model_real_get_column_type;
klass->get_n_columns = clutter_model_real_get_n_columns;
@@ -470,7 +465,7 @@ clutter_model_init (ClutterModel *self)
{
ClutterModelPrivate *priv;
- self->priv = priv = CLUTTER_MODEL_GET_PRIVATE (self);
+ self->priv = priv = clutter_model_get_instance_private (self);
priv->n_columns = -1;
priv->column_types = NULL;
@@ -1757,12 +1752,6 @@ clutter_model_get_filter_set (ClutterModel *model)
* #ClutterModelIter is available since Clutter 0.6
*/
-G_DEFINE_ABSTRACT_TYPE (ClutterModelIter, clutter_model_iter, G_TYPE_OBJECT);
-
-#define CLUTTER_MODEL_ITER_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_MODEL_ITER, ClutterModelIterPrivate))
-
struct _ClutterModelIterPrivate
{
ClutterModel *model;
@@ -1770,6 +1759,8 @@ struct _ClutterModelIterPrivate
gint row;
};
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterModelIter, clutter_model_iter, G_TYPE_OBJECT)
+
enum
{
ITER_PROP_0,
@@ -1964,19 +1955,12 @@ clutter_model_iter_class_init (ClutterModelIterClass *klass)
0, G_MAXUINT, 0,
CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, ITER_PROP_ROW, pspec);
-
- g_type_class_add_private (gobject_class, sizeof (ClutterModelIterPrivate));
}
static void
clutter_model_iter_init (ClutterModelIter *self)
{
- ClutterModelIterPrivate *priv;
-
- self->priv = priv = CLUTTER_MODEL_ITER_GET_PRIVATE (self);
-
- priv->model = NULL;
- priv->row = 0;
+ self->priv = clutter_model_iter_get_instance_private (self);
}
/*
diff --git a/clutter/clutter-model.h b/clutter/clutter-model.h
index a8217ba89..a2dad66d9 100644
--- a/clutter/clutter-model.h
+++ b/clutter/clutter-model.h
@@ -30,7 +30,7 @@
#ifndef __CLUTTER_MODEL_H__
#define __CLUTTER_MODEL_H__
-#include
+#include
G_BEGIN_DECLS
@@ -188,75 +188,102 @@ struct _ClutterModelClass
void (*_clutter_model_8) (void);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_model_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_set_types (ClutterModel *model,
guint n_columns,
GType *types);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_set_names (ClutterModel *model,
guint n_columns,
const gchar * const names[]);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_append (ClutterModel *model,
...);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_appendv (ClutterModel *model,
guint n_columns,
guint *columns,
GValue *values);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_prepend (ClutterModel *model,
...);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_prependv (ClutterModel *model,
guint n_columns,
guint *columns,
GValue *values);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_insert (ClutterModel *model,
guint row,
...);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_insertv (ClutterModel *model,
guint row,
guint n_columns,
guint *columns,
GValue *values);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_insert_value (ClutterModel *model,
guint row,
guint column,
const GValue *value);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_remove (ClutterModel *model,
guint row);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_model_get_n_rows (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_model_get_n_columns (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
const gchar * clutter_model_get_column_name (ClutterModel *model,
guint column);
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_model_get_column_type (ClutterModel *model,
guint column);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModelIter * clutter_model_get_first_iter (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModelIter * clutter_model_get_last_iter (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModelIter * clutter_model_get_iter_at_row (ClutterModel *model,
guint row);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_set_sorting_column (ClutterModel *model,
gint column);
+CLUTTER_AVAILABLE_IN_ALL
gint clutter_model_get_sorting_column (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_foreach (ClutterModel *model,
ClutterModelForeachFunc func,
gpointer user_data);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_set_sort (ClutterModel *model,
gint column,
ClutterModelSortFunc func,
gpointer user_data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_set_filter (ClutterModel *model,
ClutterModelFilterFunc func,
gpointer user_data,
GDestroyNotify notify);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_model_get_filter_set (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_resort (ClutterModel *model);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_model_filter_row (ClutterModel *model,
guint row);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_model_filter_iter (ClutterModel *model,
ClutterModelIter *iter);
@@ -349,31 +376,45 @@ struct _ClutterModelIterClass
void (*_clutter_model_iter_8) (void);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_model_iter_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_iter_get (ClutterModelIter *iter,
...);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_iter_get_valist (ClutterModelIter *iter,
va_list args);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_iter_get_value (ClutterModelIter *iter,
guint column,
GValue *value);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_iter_set (ClutterModelIter *iter,
...);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_iter_set_valist (ClutterModelIter *iter,
va_list args);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_model_iter_set_value (ClutterModelIter *iter,
guint column,
const GValue *value);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_model_iter_is_first (ClutterModelIter *iter);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_model_iter_is_last (ClutterModelIter *iter);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModelIter *clutter_model_iter_next (ClutterModelIter *iter);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModelIter *clutter_model_iter_prev (ClutterModelIter *iter);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModel * clutter_model_iter_get_model (ClutterModelIter *iter);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_model_iter_get_row (ClutterModelIter *iter);
+CLUTTER_AVAILABLE_IN_ALL
ClutterModelIter *clutter_model_iter_copy (ClutterModelIter *iter);
G_END_DECLS
diff --git a/clutter/clutter-offscreen-effect.c b/clutter/clutter-offscreen-effect.c
index 8d8c8522b..c30811339 100644
--- a/clutter/clutter-offscreen-effect.c
+++ b/clutter/clutter-offscreen-effect.c
@@ -40,25 +40,26 @@
* offscreen framebuffer, the redirection and the final paint of the texture on
* the desired stage.
*
- *
- * Implementing a ClutterOffscreenEffect
- * Creating a sub-class of #ClutterOffscreenEffect requires, in case
- * of overriding the #ClutterEffect virtual functions, to chain up to the
- * #ClutterOffscreenEffect's implementation.
- * On top of the #ClutterEffect's virtual functions,
- * #ClutterOffscreenEffect also provides a #ClutterOffscreenEffectClass.paint_target()
- * function, which encapsulates the effective painting of the texture that
- * contains the result of the offscreen redirection.
- * The size of the target material is defined to be as big as the
- * transformed size of the #ClutterActor using the offscreen effect.
- * Sub-classes of #ClutterOffscreenEffect can change the texture creation
- * code to provide bigger textures by overriding the
- * #ClutterOffscreenEffectClass.create_texture() virtual function; no chain up
- * to the #ClutterOffscreenEffect implementation is required in this
- * case.
- *
- *
* #ClutterOffscreenEffect is available since Clutter 1.4
+ *
+ * ## Implementing a ClutterOffscreenEffect
+ *
+ * Creating a sub-class of #ClutterOffscreenEffect requires, in case
+ * of overriding the #ClutterEffect virtual functions, to chain up to the
+ * #ClutterOffscreenEffect's implementation.
+ *
+ * On top of the #ClutterEffect's virtual functions,
+ * #ClutterOffscreenEffect also provides a #ClutterOffscreenEffectClass.paint_target()
+ * function, which encapsulates the effective painting of the texture that
+ * contains the result of the offscreen redirection.
+ *
+ * The size of the target material is defined to be as big as the
+ * transformed size of the #ClutterActor using the offscreen effect.
+ * Sub-classes of #ClutterOffscreenEffect can change the texture creation
+ * code to provide bigger textures by overriding the
+ * #ClutterOffscreenEffectClass.create_texture() virtual function; no chain up
+ * to the #ClutterOffscreenEffect implementation is required in this
+ * case.
*/
#ifdef HAVE_CONFIG_H
@@ -108,9 +109,9 @@ struct _ClutterOffscreenEffectPrivate
CoglMatrix last_matrix_drawn;
};
-G_DEFINE_ABSTRACT_TYPE (ClutterOffscreenEffect,
- clutter_offscreen_effect,
- CLUTTER_TYPE_EFFECT);
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterOffscreenEffect,
+ clutter_offscreen_effect,
+ CLUTTER_TYPE_EFFECT)
static void
clutter_offscreen_effect_set_actor (ClutterActorMeta *meta,
@@ -223,9 +224,11 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect)
ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect);
ClutterOffscreenEffectPrivate *priv = self->priv;
ClutterActorBox box;
+ ClutterActor *stage;
CoglMatrix projection;
CoglColor transparent;
- gfloat fbo_width, fbo_height;
+ gfloat stage_width, stage_height;
+ gfloat fbo_width = -1, fbo_height = -1;
gfloat width, height;
gfloat xexpand, yexpand;
int texture_width, texture_height;
@@ -236,6 +239,9 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect)
if (priv->actor == NULL)
return FALSE;
+ stage = _clutter_actor_get_stage_internal (priv->actor);
+ clutter_actor_get_size (stage, &stage_width, &stage_height);
+
/* The paint box is the bounding box of the actor's paint volume in
* stage coordinates. This will give us the size for the framebuffer
* we need to redirect its rendering offscreen and its position will
@@ -244,17 +250,21 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect)
{
clutter_actor_box_get_size (&box, &fbo_width, &fbo_height);
clutter_actor_box_get_origin (&box, &priv->x_offset, &priv->y_offset);
+
+ fbo_width = MIN (fbo_width, stage_width);
+ fbo_height = MIN (fbo_height, stage_height);
}
else
{
- /* If we can't get a valid paint box then we fallback to
- * creating a full stage size fbo. */
- ClutterActor *stage = _clutter_actor_get_stage_internal (priv->actor);
- clutter_actor_get_size (stage, &fbo_width, &fbo_height);
- priv->x_offset = 0.0f;
- priv->y_offset = 0.0f;
+ fbo_width = stage_width;
+ fbo_height = stage_height;
}
+ if (fbo_width == stage_width)
+ priv->x_offset = 0.0f;
+ if (fbo_height == stage_height)
+ priv->y_offset = 0.0f;
+
/* First assert that the framebuffer is the right size... */
if (!update_fbo (effect, fbo_width, fbo_height))
return FALSE;
@@ -462,8 +472,6 @@ clutter_offscreen_effect_class_init (ClutterOffscreenEffectClass *klass)
ClutterEffectClass *effect_class = CLUTTER_EFFECT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterOffscreenEffectPrivate));
-
klass->create_texture = clutter_offscreen_effect_real_create_texture;
klass->paint_target = clutter_offscreen_effect_real_paint_target;
@@ -479,9 +487,7 @@ clutter_offscreen_effect_class_init (ClutterOffscreenEffectClass *klass)
static void
clutter_offscreen_effect_init (ClutterOffscreenEffect *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_TYPE_OFFSCREEN_EFFECT,
- ClutterOffscreenEffectPrivate);
+ self->priv = clutter_offscreen_effect_get_instance_private (self);
}
/**
@@ -591,7 +597,7 @@ clutter_offscreen_effect_create_texture (ClutterOffscreenEffect *effect,
* paint the actor to which it has been applied.
*
* This function should only be called by #ClutterOffscreenEffect
- * implementations, from within the paint_target()
+ * implementations, from within the #ClutterOffscreenEffectClass.paint_target()
* virtual function.
*
* Return value: %TRUE if the offscreen buffer has a valid size,
@@ -633,7 +639,7 @@ clutter_offscreen_effect_get_target_size (ClutterOffscreenEffect *effect,
* paint the actor to which it has been applied.
*
* This function should only be called by #ClutterOffscreenEffect
- * implementations, from within the paint_target()
+ * implementations, from within the #ClutterOffscreenEffectClass.paint_target()
* virtual function.
*
* Return value: %TRUE if the offscreen buffer has a valid rectangle,
diff --git a/clutter/clutter-offscreen-effect.h b/clutter/clutter-offscreen-effect.h
index 6e70cbe45..8fd547ebc 100644
--- a/clutter/clutter-offscreen-effect.h
+++ b/clutter/clutter-offscreen-effect.h
@@ -92,14 +92,18 @@ struct _ClutterOffscreenEffectClass
void (* _clutter_offscreen7) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_offscreen_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
CoglMaterial * clutter_offscreen_effect_get_target (ClutterOffscreenEffect *effect);
CLUTTER_AVAILABLE_IN_1_10
CoglHandle clutter_offscreen_effect_get_texture (ClutterOffscreenEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_offscreen_effect_paint_target (ClutterOffscreenEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
CoglHandle clutter_offscreen_effect_create_texture (ClutterOffscreenEffect *effect,
gfloat width,
gfloat height);
diff --git a/clutter/clutter-page-turn-effect.h b/clutter/clutter-page-turn-effect.h
index 9a9b2feb7..63beb2039 100644
--- a/clutter/clutter-page-turn-effect.h
+++ b/clutter/clutter-page-turn-effect.h
@@ -43,7 +43,7 @@ G_BEGIN_DECLS
/**
* ClutterPageTurnEffect:
*
- * ClutterPageTurnEffect is an opaque structure
+ * #ClutterPageTurnEffect is an opaque structure
* whose members can only be accessed using the provided API
*
* Since: 1.4
@@ -51,20 +51,28 @@ G_BEGIN_DECLS
typedef struct _ClutterPageTurnEffect ClutterPageTurnEffect;
typedef struct _ClutterPageTurnEffectClass ClutterPageTurnEffectClass;
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_page_turn_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterEffect *clutter_page_turn_effect_new (gdouble period,
gdouble angle,
gfloat radius);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_page_turn_effect_set_period (ClutterPageTurnEffect *effect,
gdouble period);
+CLUTTER_AVAILABLE_IN_1_4
gdouble clutter_page_turn_effect_get_period (ClutterPageTurnEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_page_turn_effect_set_angle (ClutterPageTurnEffect *effect,
gdouble angle);
+CLUTTER_AVAILABLE_IN_1_4
gdouble clutter_page_turn_effect_get_angle (ClutterPageTurnEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_page_turn_effect_set_radius (ClutterPageTurnEffect *effect,
gfloat radius);
+CLUTTER_AVAILABLE_IN_1_4
gfloat clutter_page_turn_effect_get_radius (ClutterPageTurnEffect *effect);
G_END_DECLS
diff --git a/clutter/clutter-paint-node-private.h b/clutter/clutter-paint-node-private.h
index b91187fab..2945b78a4 100644
--- a/clutter/clutter-paint-node-private.h
+++ b/clutter/clutter-paint-node-private.h
@@ -68,6 +68,8 @@ struct _ClutterPaintNodeClass
void (* post_draw) (ClutterPaintNode *node);
JsonNode*(* serialize) (ClutterPaintNode *node);
+
+ CoglFramebuffer *(* get_framebuffer) (ClutterPaintNode *node);
};
#define PAINT_OP_INIT { PAINT_OP_INVALID }
@@ -107,8 +109,7 @@ gpointer _clutter_paint_node_create (GType g
ClutterPaintNode * _clutter_root_node_new (CoglFramebuffer *framebuffer,
const ClutterColor *clear_color,
- CoglBufferBit clear_flags,
- const CoglMatrix *matrix);
+ CoglBufferBit clear_flags);
ClutterPaintNode * _clutter_transform_node_new (const CoglMatrix *matrix);
ClutterPaintNode * _clutter_dummy_node_new (ClutterActor *actor);
@@ -138,6 +139,8 @@ G_GNUC_INTERNAL
ClutterPaintNode * clutter_paint_node_get_last_child (ClutterPaintNode *node);
G_GNUC_INTERNAL
ClutterPaintNode * clutter_paint_node_get_parent (ClutterPaintNode *node);
+G_GNUC_INTERNAL
+CoglFramebuffer * clutter_paint_node_get_framebuffer (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))
@@ -146,7 +149,7 @@ ClutterPaintNode * clutter_paint_node_get_parent (Clutter
/*
* ClutterLayerNode:
*
- * The ClutterLayerNode structure is an opaque
+ * The #ClutterLayerNode structure is an opaque
* type whose members cannot be directly accessed.
*
* Since: 1.10
diff --git a/clutter/clutter-paint-node.c b/clutter/clutter-paint-node.c
index 00987e668..04fe0813c 100644
--- a/clutter/clutter-paint-node.c
+++ b/clutter/clutter-paint-node.c
@@ -42,16 +42,11 @@
*/
/**
- * ClutterPaintNode:
+ * ClutterPaintNode: (ref-func clutter_paint_node_ref) (unref-func clutter_paint_node_unref) (set-value-func clutter_value_set_paint_node) (get-value-func clutter_value_get_paint_node)
*
* The ClutterPaintNode structure contains only
* private data and it should be accessed using the provided API.
*
- * Ref Func: clutter_paint_node_ref
- * Unref Func: clutter_paint_node_unref
- * Set Value Func: clutter_value_set_paint_node
- * Get Value Func: clutter_value_get_paint_node
- *
* Since: 1.10
*/
@@ -1123,3 +1118,31 @@ _clutter_paint_node_create (GType gtype)
return (gpointer) g_type_create_instance (gtype);
}
+
+static ClutterPaintNode *
+clutter_paint_node_get_root (ClutterPaintNode *node)
+{
+ ClutterPaintNode *iter;
+
+ iter = node;
+ while (iter != NULL && iter->parent != NULL)
+ iter = iter->parent;
+
+ return iter;
+}
+
+CoglFramebuffer *
+clutter_paint_node_get_framebuffer (ClutterPaintNode *node)
+{
+ ClutterPaintNode *root = clutter_paint_node_get_root (node);
+ ClutterPaintNodeClass *klass;
+
+ if (root == NULL)
+ return NULL;
+
+ klass = CLUTTER_PAINT_NODE_GET_CLASS (root);
+ if (klass->get_framebuffer != NULL)
+ return klass->get_framebuffer (root);
+
+ return cogl_get_draw_framebuffer ();
+}
diff --git a/clutter/clutter-paint-nodes.c b/clutter/clutter-paint-nodes.c
index 506e459b8..acb87e52d 100644
--- a/clutter/clutter-paint-nodes.c
+++ b/clutter/clutter-paint-nodes.c
@@ -81,7 +81,7 @@ _clutter_paint_node_init_types (void)
COGL_TEXTURE_TYPE_2D);
cogl_pipeline_set_color (default_texture_pipeline, &cogl_color);
cogl_pipeline_set_layer_wrap_mode (default_texture_pipeline, 0,
- COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
+ COGL_PIPELINE_WRAP_MODE_AUTOMATIC);
}
/*
@@ -104,7 +104,6 @@ struct _ClutterRootNode
CoglBufferBit clear_flags;
CoglColor clear_color;
- CoglMatrix modelview;
};
G_DEFINE_TYPE (ClutterRootNode, clutter_root_node, CLUTTER_TYPE_PAINT_NODE)
@@ -114,11 +113,6 @@ clutter_root_node_pre_draw (ClutterPaintNode *node)
{
ClutterRootNode *rnode = (ClutterRootNode *) node;
- cogl_push_matrix ();
-
- cogl_framebuffer_set_modelview_matrix (rnode->framebuffer,
- &rnode->modelview);
-
cogl_framebuffer_clear (rnode->framebuffer,
rnode->clear_flags,
&rnode->clear_color);
@@ -129,7 +123,6 @@ clutter_root_node_pre_draw (ClutterPaintNode *node)
static void
clutter_root_node_post_draw (ClutterPaintNode *node)
{
- cogl_pop_matrix ();
}
static void
@@ -142,6 +135,14 @@ clutter_root_node_finalize (ClutterPaintNode *node)
CLUTTER_PAINT_NODE_CLASS (clutter_root_node_parent_class)->finalize (node);
}
+static CoglFramebuffer *
+clutter_root_node_get_framebuffer (ClutterPaintNode *node)
+{
+ ClutterRootNode *rnode = (ClutterRootNode *) node;
+
+ return rnode->framebuffer;
+}
+
static void
clutter_root_node_class_init (ClutterRootNodeClass *klass)
{
@@ -150,19 +151,18 @@ clutter_root_node_class_init (ClutterRootNodeClass *klass)
node_class->pre_draw = clutter_root_node_pre_draw;
node_class->post_draw = clutter_root_node_post_draw;
node_class->finalize = clutter_root_node_finalize;
+ node_class->get_framebuffer = clutter_root_node_get_framebuffer;
}
static void
clutter_root_node_init (ClutterRootNode *self)
{
- cogl_matrix_init_identity (&self->modelview);
}
ClutterPaintNode *
_clutter_root_node_new (CoglFramebuffer *framebuffer,
const ClutterColor *clear_color,
- CoglBufferBit clear_flags,
- const CoglMatrix *matrix)
+ CoglBufferBit clear_flags)
{
ClutterRootNode *res;
@@ -175,9 +175,12 @@ _clutter_root_node_new (CoglFramebuffer *framebuffer,
clear_color->alpha);
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->modelview = *matrix;
return (ClutterPaintNode *) res;
}
@@ -268,6 +271,7 @@ struct _ClutterDummyNode
ClutterPaintNode parent_instance;
ClutterActor *actor;
+ CoglFramebuffer *framebuffer;
};
G_DEFINE_TYPE (ClutterDummyNode, clutter_dummy_node, CLUTTER_TYPE_PAINT_NODE)
@@ -302,6 +306,14 @@ clutter_dummy_node_serialize (ClutterPaintNode *node)
return res;
}
+static CoglFramebuffer *
+clutter_dummy_node_get_framebuffer (ClutterPaintNode *node)
+{
+ ClutterDummyNode *dnode = (ClutterDummyNode *) node;
+
+ return dnode->framebuffer;
+}
+
static void
clutter_dummy_node_class_init (ClutterDummyNodeClass *klass)
{
@@ -309,6 +321,7 @@ clutter_dummy_node_class_init (ClutterDummyNodeClass *klass)
node_class->pre_draw = clutter_dummy_node_pre_draw;
node_class->serialize = clutter_dummy_node_serialize;
+ node_class->get_framebuffer = clutter_dummy_node_get_framebuffer;
}
static void
@@ -320,10 +333,13 @@ ClutterPaintNode *
_clutter_dummy_node_new (ClutterActor *actor)
{
ClutterPaintNode *res;
+ ClutterDummyNode *dnode;
res = _clutter_paint_node_create (_clutter_dummy_node_get_type ());
- ((ClutterDummyNode *) res)->actor = actor;
+ dnode = (ClutterDummyNode *) res;
+ dnode->actor = actor;
+ dnode->framebuffer = _clutter_actor_get_active_framebuffer (actor);
return res;
}
@@ -384,6 +400,7 @@ static void
clutter_pipeline_node_draw (ClutterPaintNode *node)
{
ClutterPipelineNode *pnode = CLUTTER_PIPELINE_NODE (node);
+ CoglFramebuffer *fb;
guint i;
if (pnode->pipeline == NULL)
@@ -392,6 +409,8 @@ clutter_pipeline_node_draw (ClutterPaintNode *node)
if (node->operations == NULL)
return;
+ fb = clutter_paint_node_get_framebuffer (node);
+
for (i = 0; i < node->operations->len; i++)
{
const ClutterPaintOperation *op;
@@ -419,12 +438,9 @@ clutter_pipeline_node_draw (ClutterPaintNode *node)
break;
case PAINT_OP_PRIMITIVE:
- {
- CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
-
- cogl_framebuffer_draw_primitive (fb, pnode->pipeline,
- op->op.primitive);
- }
+ cogl_framebuffer_draw_primitive (fb,
+ pnode->pipeline,
+ op->op.primitive);
break;
}
}
@@ -658,7 +674,7 @@ clutter_scaling_filter_to_cogl_pipeline_filter (ClutterScalingFilter filter)
/**
* clutter_texture_node_new:
* @texture: a #CoglTexture
- * @color: a #ClutterColor
+ * @color: (allow-none): a #ClutterColor used for blending, or %NULL
* @min_filter: the minification filter for the texture
* @mag_filter: the magnification filter for the texture
*
@@ -667,6 +683,10 @@ clutter_scaling_filter_to_cogl_pipeline_filter (ClutterScalingFilter filter)
* This function will take a reference on @texture, so it is safe to
* call cogl_object_unref() on @texture when it returns.
*
+ * The @color must not be pre-multiplied with its #ClutterColor.alpha
+ * channel value; if @color is %NULL, a fully opaque white color will
+ * be used for blending.
+ *
* Return value: (transfer full): the newly created #ClutterPaintNode.
* Use clutter_paint_node_unref() when done
*
@@ -692,12 +712,18 @@ clutter_texture_node_new (CoglTexture *texture,
mag_f = clutter_scaling_filter_to_cogl_pipeline_filter (mag_filter);
cogl_pipeline_set_layer_filters (tnode->pipeline, 0, min_f, mag_f);
- cogl_color_init_from_4ub (&cogl_color,
- color->red,
- color->green,
- color->blue,
- color->alpha);
- cogl_color_premultiply (&cogl_color);
+ if (color != NULL)
+ {
+ cogl_color_init_from_4ub (&cogl_color,
+ color->red,
+ color->green,
+ color->blue,
+ color->alpha);
+ cogl_color_premultiply (&cogl_color);
+ }
+ else
+ cogl_color_init_from_4ub (&cogl_color, 255, 255, 255, 255);
+
cogl_pipeline_set_color (tnode->pipeline, &cogl_color);
return (ClutterPaintNode *) tnode;
@@ -754,11 +780,14 @@ clutter_text_node_draw (ClutterPaintNode *node)
{
ClutterTextNode *tnode = CLUTTER_TEXT_NODE (node);
PangoRectangle extents;
+ CoglFramebuffer *fb;
guint i;
if (node->operations == NULL)
return;
+ fb = clutter_paint_node_get_framebuffer (node);
+
pango_layout_get_pixel_extents (tnode->layout, NULL, &extents);
for (i = 0; i < node->operations->len; i++)
@@ -782,10 +811,11 @@ clutter_text_node_draw (ClutterPaintNode *node)
if (extents.width > op_width ||
extents.height > op_height)
{
- cogl_clip_push_rectangle (op->op.texrect[0],
- op->op.texrect[1],
- op->op.texrect[2],
- op->op.texrect[3]);
+ cogl_framebuffer_push_rectangle_clip (fb,
+ op->op.texrect[0],
+ op->op.texrect[1],
+ op->op.texrect[2],
+ op->op.texrect[3]);
clipped = TRUE;
}
@@ -796,7 +826,7 @@ clutter_text_node_draw (ClutterPaintNode *node)
0);
if (clipped)
- cogl_clip_pop ();
+ cogl_framebuffer_pop_clip (fb);
break;
case PAINT_OP_PATH:
@@ -940,7 +970,7 @@ clutter_clip_node_pre_draw (ClutterPaintNode *node)
if (node->operations == NULL)
return FALSE;
- fb = cogl_get_draw_framebuffer ();
+ fb = clutter_paint_node_get_framebuffer (node);
for (i = 0; i < node->operations->len; i++)
{
@@ -982,7 +1012,7 @@ clutter_clip_node_post_draw (ClutterPaintNode *node)
if (node->operations == NULL)
return;
- fb = cogl_get_draw_framebuffer ();
+ fb = clutter_paint_node_get_framebuffer (node);
for (i = 0; i < node->operations->len; i++)
{
diff --git a/clutter/clutter-paint-nodes.h b/clutter/clutter-paint-nodes.h
index bd854e816..8842e3fd5 100644
--- a/clutter/clutter-paint-nodes.h
+++ b/clutter/clutter-paint-nodes.h
@@ -41,7 +41,7 @@ G_BEGIN_DECLS
/**
* ClutterColorNode:
*
- * The ClutterTextNode structure is an opaque
+ * The #ClutterTextNode structure is an opaque
* type whose members cannot be directly accessed.
*
* Since: 1.10
@@ -62,7 +62,7 @@ ClutterPaintNode * clutter_color_node_new (const ClutterColor *
/**
* ClutterTextureNode:
*
- * The ClutterTextNode structure is an opaque
+ * The #ClutterTextNode structure is an opaque
* type whose members cannot be directly accessed.
*
* Since: 1.10
@@ -86,7 +86,7 @@ ClutterPaintNode * clutter_texture_node_new (CoglTexture *
/**
* ClutterClipNode:
*
- * The ClutterTextNode structure is an opaque
+ * The #ClutterTextNode structure is an opaque
* type whose members cannot be directly accessed.
*
* Since: 1.10
@@ -107,7 +107,7 @@ ClutterPaintNode * clutter_clip_node_new (void);
/**
* ClutterPipelineNode:
*
- * The ClutterTextNode structure is an opaque
+ * The #ClutterTextNode structure is an opaque
* type whose members cannot be directly accessed.
*
* Since: 1.10
@@ -130,7 +130,7 @@ ClutterPaintNode * clutter_pipeline_node_new (CoglPipeline *
/**
* ClutterTextNode:
*
- * The ClutterTextNode structure is an opaque
+ * The #ClutterTextNode structure is an opaque
* type whose members cannot be directly accessed.
*
* Since: 1.10
diff --git a/clutter/clutter-paint-volume.c b/clutter/clutter-paint-volume.c
index 9eeee1e9b..184e18663 100644
--- a/clutter/clutter-paint-volume.c
+++ b/clutter/clutter-paint-volume.c
@@ -290,20 +290,21 @@ clutter_paint_volume_set_width (ClutterPaintVolume *pv,
* around the volume. It returns the size of that bounding box as
* measured along the x-axis.
*
- * If, for example, clutter_actor_get_transformed_paint_volume()
+ * If, for example, clutter_actor_get_transformed_paint_volume()
* is used to transform a 2D child actor that is 100px wide, 100px
* high and 0px deep into container coordinates then the width might
* not simply be 100px if the child actor has a 3D rotation applied to
- * it.
- * Remember; after clutter_actor_get_transformed_paint_volume() is
+ * it.
+ *
+ * Remember: if clutter_actor_get_transformed_paint_volume() is
* used then a transformed child volume will be defined relative to the
- * ancestor container actor and so a 2D child actor
- * can have a 3D bounding volume.
+ * ancestor container actor and so a 2D child actor can have a 3D
+ * bounding volume.
*
- * There are no accuracy guarantees for the reported width,
- * except that it must always be >= to the true width. This is
- * because actors may report simple, loose fitting paint-volumes
- * for efficiency
+ * There are no accuracy guarantees for the reported width,
+ * except that it must always be greater than, or equal to, the
+ * actor's width. This is because actors may report simple, loose
+ * fitting paint volumes for efficiency.
* Return value: the width, in units of @pv's local coordinate system.
*
@@ -381,20 +382,21 @@ clutter_paint_volume_set_height (ClutterPaintVolume *pv,
* around the volume. It returns the size of that bounding box as
* measured along the y-axis.
*
- * If, for example, clutter_actor_get_transformed_paint_volume()
+ * If, for example, clutter_actor_get_transformed_paint_volume()
* is used to transform a 2D child actor that is 100px wide, 100px
* high and 0px deep into container coordinates then the height might
* not simply be 100px if the child actor has a 3D rotation applied to
- * it.
- * Remember; after clutter_actor_get_transformed_paint_volume() is
+ * it.
+ *
+ * Remember: if clutter_actor_get_transformed_paint_volume() is
* used then a transformed child volume will be defined relative to the
* ancestor container actor and so a 2D child actor
- * can have a 3D bounding volume.
+ * can have a 3D bounding volume.
*
- * There are no accuracy guarantees for the reported height,
- * except that it must always be >= to the true height. This is
- * because actors may report simple, loose fitting paint-volumes
- * for efficiency
+ * There are no accuracy guarantees for the reported height,
+ * except that it must always be greater than, or equal to, the actor's
+ * height. This is because actors may report simple, loose fitting paint
+ * volumes for efficiency.
*
* Return value: the height, in units of @pv's local coordinate system.
*
@@ -473,20 +475,21 @@ clutter_paint_volume_set_depth (ClutterPaintVolume *pv,
* around the volume. It returns the size of that bounding box as
* measured along the z-axis.
*
- * If, for example, clutter_actor_get_transformed_paint_volume()
+ * If, for example, clutter_actor_get_transformed_paint_volume()
* is used to transform a 2D child actor that is 100px wide, 100px
* high and 0px deep into container coordinates then the depth might
* not simply be 0px if the child actor has a 3D rotation applied to
- * it.
- * Remember; after clutter_actor_get_transformed_paint_volume() is
+ * it.
+ *
+ * Remember: if clutter_actor_get_transformed_paint_volume() is
* used then the transformed volume will be defined relative to the
* container actor and in container coordinates a 2D child actor
- * can have a 3D bounding volume.
+ * can have a 3D bounding volume.
*
- * There are no accuracy guarantees for the reported depth,
- * except that it must always be >= to the true depth. This is
- * because actors may report simple, loose fitting paint-volumes
- * for efficiency.
+ * There are no accuracy guarantees for the reported depth,
+ * except that it must always be greater than, or equal to, the actor's
+ * depth. This is because actors may report simple, loose fitting paint
+ * volumes for efficiency.
*
* Return value: the depth, in units of @pv's local coordinate system.
*
@@ -521,8 +524,8 @@ clutter_paint_volume_get_depth (const ClutterPaintVolume *pv)
*
* Updates the geometry of @pv to encompass @pv and @another_pv.
*
- * There are no guarantees about how precisely the two volumes
- * will be encompassed.
+ * There are no guarantees about how precisely the two volumes
+ * will be unioned.
*
* Since: 1.6
*/
@@ -743,9 +746,10 @@ _clutter_paint_volume_complete (ClutterPaintVolume *pv)
* the paint volume into window coordinates before getting
* the 2D bounding box.
*
- * The coordinates of the returned box are not clamped to
- * integer pixel values, if you need them to be clamped you can use
- * clutter_actor_box_clamp_to_pixel()
+ * The coordinates of the returned box are not clamped to
+ * integer pixel values; if you need them to be rounded to the
+ * nearest integer pixel values, you can use the
+ * clutter_actor_box_clamp_to_pixel() function.
*
* Since: 1.6
*/
diff --git a/clutter/clutter-pan-action.c b/clutter/clutter-pan-action.c
index 53a32d3e5..a1f61240d 100644
--- a/clutter/clutter-pan-action.c
+++ b/clutter/clutter-pan-action.c
@@ -61,6 +61,7 @@
#include "clutter-debug.h"
#include "clutter-enum-types.h"
+#include "clutter-gesture-action-private.h"
#include "clutter-marshal.h"
#include "clutter-private.h"
#include
@@ -127,8 +128,7 @@ enum
static guint pan_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterPanAction, clutter_pan_action,
- CLUTTER_TYPE_GESTURE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterPanAction, clutter_pan_action, CLUTTER_TYPE_GESTURE_ACTION)
static void
emit_pan (ClutterPanAction *self,
@@ -386,6 +386,15 @@ clutter_pan_action_get_property (GObject *gobject,
}
}
+static void
+clutter_pan_action_constructed (GObject *gobject)
+{
+ ClutterGestureAction *gesture;
+
+ gesture = CLUTTER_GESTURE_ACTION (gobject);
+ clutter_gesture_action_set_threshold_trigger_edge (gesture, CLUTTER_GESTURE_TRIGGER_EDGE_AFTER);
+}
+
static void
clutter_pan_action_dispose (GObject *gobject)
{
@@ -424,8 +433,6 @@ clutter_pan_action_class_init (ClutterPanActionClass *klass)
ClutterGestureActionClass *gesture_class =
CLUTTER_GESTURE_ACTION_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterPanActionPrivate));
-
klass->pan = clutter_pan_action_real_pan;
gesture_class->gesture_prepare = gesture_prepare;
@@ -500,6 +507,7 @@ clutter_pan_action_class_init (ClutterPanActionClass *klass)
1.0, G_MAXDOUBLE, default_acceleration_factor,
CLUTTER_PARAM_READWRITE);
+ gobject_class->constructed = clutter_pan_action_constructed;
gobject_class->set_property = clutter_pan_action_set_property;
gobject_class->get_property = clutter_pan_action_get_property;
gobject_class->dispose = clutter_pan_action_dispose;
@@ -559,12 +567,10 @@ clutter_pan_action_class_init (ClutterPanActionClass *klass)
static void
clutter_pan_action_init (ClutterPanAction *self)
{
- ClutterPanActionPrivate *priv = self->priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_PAN_ACTION,
- ClutterPanActionPrivate);
- priv->deceleration_rate = default_deceleration_rate;
- priv->acceleration_factor = default_acceleration_factor;
- priv->state = PAN_STATE_INACTIVE;
+ self->priv = clutter_pan_action_get_instance_private (self);
+ self->priv->deceleration_rate = default_deceleration_rate;
+ self->priv->acceleration_factor = default_acceleration_factor;
+ self->priv->state = PAN_STATE_INACTIVE;
}
/**
diff --git a/clutter/clutter-pan-action.h b/clutter/clutter-pan-action.h
index 77d6b330c..8d90b7a65 100644
--- a/clutter/clutter-pan-action.h
+++ b/clutter/clutter-pan-action.h
@@ -55,7 +55,7 @@ typedef struct _ClutterPanActionClass ClutterPanActionClass;
/**
* ClutterPanAction:
*
- * The ClutterPanAction structure contains
+ * The #ClutterPanAction structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.12
@@ -73,7 +73,7 @@ struct _ClutterPanAction
* @pan: class handler for the #ClutterPanAction::pan signal
* @pan_stopped: class handler for the #ClutterPanAction::pan-stopped signal
*
- * The ClutterPanActionClass structure contains
+ * The #ClutterPanActionClass structure contains
* only private data.
*
* Since: 1.12
diff --git a/clutter/clutter-path-constraint.h b/clutter/clutter-path-constraint.h
index e65555e89..9c77d4fe8 100644
--- a/clutter/clutter-path-constraint.h
+++ b/clutter/clutter-path-constraint.h
@@ -41,7 +41,7 @@ G_BEGIN_DECLS
/**
* ClutterPathConstraint:
*
- * ClutterPathConstraint is an opaque structure
+ * #ClutterPathConstraint is an opaque structure
* whose members cannot be directly accessed
*
* Since: 1.6
@@ -49,16 +49,22 @@ G_BEGIN_DECLS
typedef struct _ClutterPathConstraint ClutterPathConstraint;
typedef struct _ClutterPathConstraintClass ClutterPathConstraintClass;
+CLUTTER_AVAILABLE_IN_1_6
GType clutter_path_constraint_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_6
ClutterConstraint *clutter_path_constraint_new (ClutterPath *path,
gfloat offset);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_path_constraint_set_path (ClutterPathConstraint *constraint,
ClutterPath *path);
+CLUTTER_AVAILABLE_IN_1_6
ClutterPath * clutter_path_constraint_get_path (ClutterPathConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_path_constraint_set_offset (ClutterPathConstraint *constraint,
gfloat offset);
+CLUTTER_AVAILABLE_IN_1_6
gfloat clutter_path_constraint_get_offset (ClutterPathConstraint *constraint);
G_END_DECLS
diff --git a/clutter/clutter-path.c b/clutter/clutter-path.c
index 799c2e57a..0ff7a2182 100644
--- a/clutter/clutter-path.c
+++ b/clutter/clutter-path.c
@@ -33,32 +33,19 @@
* The path consists of a series of nodes. Each node is one of the
* following four types:
*
- *
- * %CLUTTER_PATH_MOVE_TO
- *
- * Changes the position of the path to the given pair of
- * coordinates. This is usually used as the first node of a path to
- * mark the start position. If it is used in the middle of a path then
- * the path will be disjoint and the actor will appear to jump to the
- * new position when animated.
- *
- * %CLUTTER_PATH_LINE_TO
- *
- * Creates a straight line from the previous point to the given point.
- *
- * %CLUTTER_PATH_CURVE_TO
- *
- * Creates a bezier curve. The end of the last node is used as the
- * first control point and the three subsequent coordinates given in
- * the node as used as the other three.
- *
- * %CLUTTER_PATH_CLOSE
- *
- * Creates a straight line from the last node to the last
- * %CLUTTER_PATH_MOVE_TO node. This can be used to close a path so
- * that it will appear as a loop when animated.
- *
- *
+ * - %CLUTTER_PATH_MOVE_TO, changes the position of the path to the
+ * given pair of coordinates. This is usually used as the first node
+ * of a path to mark the start position. If it is used in the middle
+ * of a path then the path will be disjoint and the actor will appear
+ * to jump to the new position when animated.
+ * - %CLUTTER_PATH_LINE_TO, creates a straight line from the previous
+ * point to the given point.
+ * - %CLUTTER_PATH_CURVE_TO, creates a bezier curve. The end of the
+ * last node is used as the first control point and the three
+ * subsequent coordinates given in the node as used as the other three.
+ * -%CLUTTER_PATH_CLOSE, creates a straight line from the last node to
+ * the last %CLUTTER_PATH_MOVE_TO node. This can be used to close a
+ * path so that it will appear as a loop when animated.
*
* The first three types have the corresponding relative versions
* %CLUTTER_PATH_REL_MOVE_TO, %CLUTTER_PATH_REL_LINE_TO and
@@ -88,10 +75,6 @@
#include "clutter-bezier.h"
#include "clutter-private.h"
-#define CLUTTER_PATH_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_PATH, \
- ClutterPathPrivate))
-
#define CLUTTER_PATH_NODE_TYPE_IS_VALID(t) \
((((t) & ~CLUTTER_PATH_RELATIVE) >= CLUTTER_PATH_MOVE_TO \
&& ((t) & ~CLUTTER_PATH_RELATIVE) <= CLUTTER_PATH_CURVE_TO) \
@@ -149,6 +132,7 @@ G_DEFINE_BOXED_TYPE (ClutterPathNode, clutter_path_node,
G_DEFINE_TYPE_WITH_CODE (ClutterPath,
clutter_path,
G_TYPE_INITIALLY_UNOWNED,
+ G_ADD_PRIVATE (ClutterPath)
CLUTTER_REGISTER_VALUE_TRANSFORM_TO (G_TYPE_STRING, clutter_value_transform_path_string)
CLUTTER_REGISTER_VALUE_TRANSFORM_FROM (G_TYPE_STRING, clutter_value_transform_string_path));
@@ -220,14 +204,12 @@ clutter_path_class_init (ClutterPathClass *klass)
CLUTTER_PARAM_READABLE);
obj_props[PROP_LENGTH] = pspec;
g_object_class_install_property (gobject_class, PROP_LENGTH, pspec);
-
- g_type_class_add_private (klass, sizeof (ClutterPathPrivate));
}
static void
clutter_path_init (ClutterPath *self)
{
- self->priv = CLUTTER_PATH_GET_PRIVATE (self);
+ self->priv = clutter_path_get_instance_private (self);
}
static void
@@ -716,24 +698,10 @@ clutter_path_add_nodes (ClutterPath *path,
* coordinates. The coordinates can be separated by spaces or a
* comma. The types are:
*
- *
- * M
- *
- * Adds a %CLUTTER_PATH_MOVE_TO node. Takes one pair of coordinates.
- *
- * L
- *
- * Adds a %CLUTTER_PATH_LINE_TO node. Takes one pair of coordinates.
- *
- * C
- *
- * Adds a %CLUTTER_PATH_CURVE_TO node. Takes three pairs of coordinates.
- *
- * z
- *
- * Adds a %CLUTTER_PATH_CLOSE node. No coordinates are needed.
- *
- *
+ * - `M`: Adds a %CLUTTER_PATH_MOVE_TO node. Takes one pair of coordinates.
+ * - `L`: Adds a %CLUTTER_PATH_LINE_TO node. Takes one pair of coordinates.
+ * - `C`: Adds a %CLUTTER_PATH_CURVE_TO node. Takes three pairs of coordinates.
+ * - `z`: Adds a %CLUTTER_PATH_CLOSE node. No coordinates are needed.
*
* The M, L and C commands can also be specified in lower case which
* means the coordinates are relative to the previous node.
@@ -741,11 +709,9 @@ clutter_path_add_nodes (ClutterPath *path,
* For example, to move an actor in a 100 by 100 pixel square centered
* on the point 300,300 you could use the following path:
*
- *
- *
+ * |[
* M 250,350 l 0 -100 L 350,250 l 0 100 z
- *
- *
+ * ]|
*
* If the path description isn't valid %FALSE will be returned and no
* nodes will be added.
diff --git a/clutter/clutter-path.h b/clutter/clutter-path.h
index 599499a98..c170bb32f 100644
--- a/clutter/clutter-path.h
+++ b/clutter/clutter-path.h
@@ -86,22 +86,30 @@ struct _ClutterPathClass
GInitiallyUnownedClass parent_class;
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_path_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterPath *clutter_path_new (void);
+CLUTTER_AVAILABLE_IN_1_0
ClutterPath *clutter_path_new_with_description (const gchar *desc);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_move_to (ClutterPath *path,
gint x,
gint y);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_rel_move_to (ClutterPath *path,
gint x,
gint y);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_line_to (ClutterPath *path,
gint x,
gint y);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_rel_line_to (ClutterPath *path,
gint x,
gint y);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_curve_to (ClutterPath *path,
gint x_1,
gint y_1,
@@ -109,6 +117,7 @@ void clutter_path_add_curve_to (ClutterPath *path,
gint y_2,
gint x_3,
gint y_3);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_rel_curve_to (ClutterPath *path,
gint x_1,
gint y_1,
@@ -116,38 +125,55 @@ void clutter_path_add_rel_curve_to (ClutterPath *path,
gint y_2,
gint x_3,
gint y_3);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_close (ClutterPath *path);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_path_add_string (ClutterPath *path,
const gchar *str);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_node (ClutterPath *path,
const ClutterPathNode *node);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_add_cairo_path (ClutterPath *path,
const cairo_path_t *cpath);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_path_get_n_nodes (ClutterPath *path);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_get_node (ClutterPath *path,
guint index_,
ClutterPathNode *node);
+CLUTTER_AVAILABLE_IN_1_0
GSList * clutter_path_get_nodes (ClutterPath *path);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_foreach (ClutterPath *path,
ClutterPathCallback callback,
gpointer user_data);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_insert_node (ClutterPath *path,
gint index_,
const ClutterPathNode *node);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_remove_node (ClutterPath *path,
guint index_);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_replace_node (ClutterPath *path,
guint index_,
const ClutterPathNode *node);
+CLUTTER_AVAILABLE_IN_1_0
gchar * clutter_path_get_description (ClutterPath *path);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_path_set_description (ClutterPath *path,
const gchar *str);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_clear (ClutterPath *path);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_to_cairo_path (ClutterPath *path,
cairo_t *cr);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_path_get_position (ClutterPath *path,
gdouble progress,
ClutterKnot *position);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_path_get_length (ClutterPath *path);
G_END_DECLS
diff --git a/clutter/clutter-private.h b/clutter/clutter-private.h
index 2136efe75..6621a00ad 100644
--- a/clutter/clutter-private.h
+++ b/clutter/clutter-private.h
@@ -70,7 +70,6 @@ typedef struct _ClutterVertex4 ClutterVertex4;
#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_RELAYOUT(a) ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_RELAYOUT) != FALSE)
-#define CLUTTER_STAGE_IN_RESIZE(a) ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_RESIZE) != FALSE)
#define CLUTTER_PARAM_READABLE (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)
#define CLUTTER_PARAM_WRITABLE (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)
@@ -108,14 +107,8 @@ typedef enum {
/* Used to avoid recursion */
CLUTTER_IN_RELAYOUT = 1 << 4,
- /* Used by the stage if resizing is an asynchronous operation (like on
- * X11) to delay queueing relayouts until we got a notification from the
- * event handling
- */
- CLUTTER_IN_RESIZE = 1 << 5,
-
- /* a flag for internal children of Containers */
- CLUTTER_INTERNAL_CHILD = 1 << 6
+ /* a flag for internal children of Containers (DEPRECATED) */
+ CLUTTER_INTERNAL_CHILD = 1 << 5
} ClutterPrivateFlags;
/*
@@ -137,10 +130,11 @@ struct _ClutterMainContext
/* the main event queue */
GQueue *events_queue;
- ClutterPickMode pick_mode;
+ /* the event filters added via clutter_event_add_filter. these are
+ * ordered from least recently added to most recently added */
+ GList *event_filters;
- /* mapping between reused integer ids and actors */
- ClutterIDPool *id_pool;
+ ClutterPickMode pick_mode;
/* default FPS; this is only used if we cannot sync to vblank */
guint frame_rate;
@@ -160,7 +154,6 @@ struct _ClutterMainContext
gint fb_g_mask_used;
gint fb_b_mask_used;
- PangoContext *pango_context; /* Global Pango context */
CoglPangoFontMap *font_map; /* Global font map */
/* stack of #ClutterEvent */
@@ -201,14 +194,10 @@ ClutterMainContext * _clutter_context_get_default (void);
void _clutter_context_lock (void);
void _clutter_context_unlock (void);
gboolean _clutter_context_is_initialized (void);
-PangoContext * _clutter_context_create_pango_context (void);
-PangoContext * _clutter_context_get_pango_context (void);
ClutterPickMode _clutter_context_get_pick_mode (void);
void _clutter_context_push_shader_stack (ClutterActor *actor);
ClutterActor * _clutter_context_pop_shader_stack (ClutterActor *actor);
ClutterActor * _clutter_context_peek_shader_stack (void);
-guint32 _clutter_context_acquire_id (gpointer key);
-void _clutter_context_release_id (guint32 id_);
gboolean _clutter_context_get_motion_events_enabled (void);
gboolean _clutter_context_get_show_fps (void);
@@ -224,9 +213,8 @@ void _clutter_diagnostic_message (const char *fmt, ...);
guint _clutter_pixel_to_id (guchar pixel[4]);
void _clutter_id_to_color (guint id,
ClutterColor *col);
-ClutterActor * _clutter_get_actor_by_id (ClutterStage *stage,
- guint32 actor_id);
+void _clutter_set_sync_to_vblank (gboolean sync_to_vblank);
gboolean _clutter_get_sync_to_vblank (void);
/* use this function as the accumulator if you have a signal with
@@ -249,10 +237,6 @@ gboolean _clutter_boolean_continue_accumulator (GSignalInvocationHint *ihint,
void _clutter_run_repaint_functions (ClutterRepaintFlags flags);
-void _clutter_constraint_update_allocation (ClutterConstraint *constraint,
- ClutterActor *actor,
- ClutterActorBox *allocation);
-
GType _clutter_layout_manager_get_child_meta_type (ClutterLayoutManager *manager);
void _clutter_util_fully_transform_vertices (const CoglMatrix *modelview,
diff --git a/clutter/clutter-property-transition.c b/clutter/clutter-property-transition.c
index e74490de4..6cdceb2da 100644
--- a/clutter/clutter-property-transition.c
+++ b/clutter/clutter-property-transition.c
@@ -60,7 +60,7 @@ enum
static GParamSpec *obj_props[PROP_LAST] = { NULL, };
-G_DEFINE_TYPE (ClutterPropertyTransition, clutter_property_transition, CLUTTER_TYPE_TRANSITION)
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterPropertyTransition, clutter_property_transition, CLUTTER_TYPE_TRANSITION)
static inline void
clutter_property_transition_ensure_interval (ClutterPropertyTransition *transition,
@@ -249,8 +249,6 @@ clutter_property_transition_class_init (ClutterPropertyTransitionClass *klass)
ClutterTransitionClass *transition_class = CLUTTER_TRANSITION_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterPropertyTransitionPrivate));
-
transition_class->attached = clutter_property_transition_attached;
transition_class->detached = clutter_property_transition_detached;
transition_class->compute_value = clutter_property_transition_compute_value;
@@ -279,9 +277,7 @@ clutter_property_transition_class_init (ClutterPropertyTransitionClass *klass)
static void
clutter_property_transition_init (ClutterPropertyTransition *self)
{
- self->priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_PROPERTY_TRANSITION,
- ClutterPropertyTransitionPrivate);
+ self->priv = clutter_property_transition_get_instance_private (self);
}
/**
diff --git a/clutter/clutter-property-transition.h b/clutter/clutter-property-transition.h
index 0d32f162c..5ea2e9ba9 100644
--- a/clutter/clutter-property-transition.h
+++ b/clutter/clutter-property-transition.h
@@ -46,7 +46,7 @@ typedef struct _ClutterPropertyTransitionClass ClutterPropertyTransitio
/**
* ClutterPropertyTransition:
*
- * The ClutterPropertyTransition structure contains
+ * The #ClutterPropertyTransition structure contains
* private data and should only be accessed using the provided API.
*
* Since: 1.10
@@ -62,7 +62,7 @@ struct _ClutterPropertyTransition
/**
* ClutterPropertyTransitionClass:
*
- * The ClutterPropertyTransitionClass structure
+ * The #ClutterPropertyTransitionClass structure
* contains private data.
*
* Since: 1.10
diff --git a/clutter/clutter-rotate-action.c b/clutter/clutter-rotate-action.c
index 567d73fc1..7286c2b08 100644
--- a/clutter/clutter-rotate-action.c
+++ b/clutter/clutter-rotate-action.c
@@ -43,6 +43,7 @@
#include "clutter-debug.h"
#include "clutter-enum-types.h"
+#include "clutter-gesture-action-private.h"
#include "clutter-marshal.h"
#include "clutter-private.h"
@@ -62,8 +63,7 @@ enum
static guint rotate_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterRotateAction, clutter_rotate_action,
- CLUTTER_TYPE_GESTURE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterRotateAction, clutter_rotate_action, CLUTTER_TYPE_GESTURE_ACTION)
static gboolean
clutter_rotate_action_real_rotate (ClutterRotateAction *action,
@@ -172,16 +172,27 @@ clutter_rotate_action_gesture_cancel (ClutterGestureAction *action,
&retval);
}
+static void
+clutter_rotate_action_constructed (GObject *gobject)
+{
+ ClutterGestureAction *gesture;
+
+ gesture = CLUTTER_GESTURE_ACTION (gobject);
+ clutter_gesture_action_set_threshold_trigger_edge (gesture, CLUTTER_GESTURE_TRIGGER_EDGE_NONE);
+}
+
static void
clutter_rotate_action_class_init (ClutterRotateActionClass *klass)
{
ClutterGestureActionClass *gesture_class =
CLUTTER_GESTURE_ACTION_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (ClutterRotateActionPrivate));
+ GObjectClass *object_class =
+ G_OBJECT_CLASS (klass);
klass->rotate = clutter_rotate_action_real_rotate;
+ object_class->constructed = clutter_rotate_action_constructed;
+
gesture_class->gesture_begin = clutter_rotate_action_gesture_begin;
gesture_class->gesture_progress = clutter_rotate_action_gesture_progress;
gesture_class->gesture_cancel = clutter_rotate_action_gesture_cancel;
@@ -217,10 +228,12 @@ clutter_rotate_action_class_init (ClutterRotateActionClass *klass)
static void
clutter_rotate_action_init (ClutterRotateAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_ROTATE_ACTION,
- ClutterRotateActionPrivate);
+ ClutterGestureAction *gesture;
- clutter_gesture_action_set_n_touch_points (CLUTTER_GESTURE_ACTION (self), 2);
+ self->priv = clutter_rotate_action_get_instance_private (self);
+
+ gesture = CLUTTER_GESTURE_ACTION (self);
+ clutter_gesture_action_set_n_touch_points (gesture, 2);
}
/**
diff --git a/clutter/clutter-rotate-action.h b/clutter/clutter-rotate-action.h
index ee41059c2..8f6f27873 100644
--- a/clutter/clutter-rotate-action.h
+++ b/clutter/clutter-rotate-action.h
@@ -47,7 +47,7 @@ typedef struct _ClutterRotateActionClass ClutterRotateActionClass;
/**
* ClutterRotateAction:
*
- * The ClutterRotateAction structure contains
+ * The #ClutterRotateAction structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.12
@@ -64,7 +64,7 @@ struct _ClutterRotateAction
* ClutterRotateActionClass:
* @rotate: class handler for the #ClutterRotateAction::rotate signal
*
- * The ClutterRotateActionClass structure contains
+ * The #ClutterRotateActionClass structure contains
* only private data.
*
* Since: 1.12
diff --git a/clutter/clutter-script-parser.c b/clutter/clutter-script-parser.c
index 3ed900cb2..161103734 100644
--- a/clutter/clutter-script-parser.c
+++ b/clutter/clutter-script-parser.c
@@ -1083,6 +1083,7 @@ clutter_script_parser_object_end (JsonParser *json_parser,
oinfo = g_slice_new0 (ObjectInfo);
oinfo->merge_id = _clutter_script_get_last_merge_id (script);
oinfo->id = g_strdup (id_);
+ oinfo->has_unresolved = TRUE;
class_name = json_object_get_string_member (object, "type");
oinfo->class_name = g_strdup (class_name);
@@ -1107,6 +1108,8 @@ clutter_script_parser_object_end (JsonParser *json_parser,
oinfo->children = parse_children (oinfo, val);
json_object_remove_member (object, "children");
+
+ oinfo->has_unresolved = TRUE;
}
if (json_object_has_member (object, "signals"))
@@ -1115,9 +1118,9 @@ clutter_script_parser_object_end (JsonParser *json_parser,
oinfo->signals = parse_signals (script, oinfo, val);
json_object_remove_member (object, "signals");
- }
- oinfo->is_actor = FALSE;
+ oinfo->has_unresolved = TRUE;
+ }
if (strcmp (oinfo->class_name, "ClutterStage") == 0 &&
json_object_has_member (object, "is-default"))
@@ -1132,9 +1135,6 @@ clutter_script_parser_object_end (JsonParser *json_parser,
else
oinfo->is_stage_default = FALSE;
- oinfo->is_unmerged = FALSE;
- oinfo->has_unresolved = TRUE;
-
members = json_object_get_members (object);
for (l = members; l; l = l->next)
{
@@ -1175,6 +1175,7 @@ clutter_script_parser_object_end (JsonParser *json_parser,
pinfo->is_layout = g_str_has_prefix (name, "layout::") ? TRUE : FALSE;
oinfo->properties = g_list_prepend (oinfo->properties, pinfo);
+ oinfo->has_unresolved = TRUE;
}
g_list_free (members);
@@ -2169,12 +2170,12 @@ _clutter_script_construct_object (ClutterScript *script,
if (G_UNLIKELY (oinfo->gtype == G_TYPE_INVALID))
return;
-
- oinfo->is_actor = g_type_is_a (oinfo->gtype, CLUTTER_TYPE_ACTOR);
- if (oinfo->is_actor)
- oinfo->is_stage = g_type_is_a (oinfo->gtype, CLUTTER_TYPE_STAGE);
}
+ oinfo->is_actor = g_type_is_a (oinfo->gtype, CLUTTER_TYPE_ACTOR);
+ if (oinfo->is_actor)
+ oinfo->is_stage = g_type_is_a (oinfo->gtype, CLUTTER_TYPE_STAGE);
+
if (oinfo->is_stage && oinfo->is_stage_default)
{
ClutterStageManager *manager = clutter_stage_manager_get_default ();
diff --git a/clutter/clutter-script.c b/clutter/clutter-script.c
index 6d0b6071f..8df91b2c7 100644
--- a/clutter/clutter-script.c
+++ b/clutter/clutter-script.c
@@ -287,7 +287,7 @@ struct _ClutterScriptPrivate
guint is_filename : 1;
};
-G_DEFINE_TYPE (ClutterScript, clutter_script, G_TYPE_OBJECT);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterScript, clutter_script, G_TYPE_OBJECT)
static GType
clutter_script_real_get_type_from_name (ClutterScript *script,
@@ -448,8 +448,6 @@ clutter_script_class_init (ClutterScriptClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterScriptPrivate));
-
klass->get_type_from_name = clutter_script_real_get_type_from_name;
/**
@@ -515,7 +513,7 @@ clutter_script_init (ClutterScript *script)
{
ClutterScriptPrivate *priv;
- script->priv = priv = CLUTTER_SCRIPT_GET_PRIVATE (script);
+ script->priv = priv = clutter_script_get_instance_private (script);
priv->parser = g_object_new (CLUTTER_TYPE_SCRIPT_PARSER, NULL);
priv->parser->script = script;
@@ -758,15 +756,15 @@ clutter_script_get_objects_valist (ClutterScript *script,
* names/return location pairs should be listed, with a %NULL pointer
* ending the list, like:
*
- *
+ * |[
* GObject *my_label, *a_button, *main_timeline;
*
* clutter_script_get_objects (script,
- * "my-label", &my_label,
- * "a-button", &a_button,
- * "main-timeline", &main_timeline,
+ * "my-label", &my_label,
+ * "a-button", &a_button,
+ * "main-timeline", &main_timeline,
* NULL);
- *
+ * ]|
*
* Note: This function does not increment the reference count of the
* returned objects.
diff --git a/clutter/clutter-script.h b/clutter/clutter-script.h
index f2b6222c6..4ac5c8f5d 100644
--- a/clutter/clutter-script.h
+++ b/clutter/clutter-script.h
@@ -93,6 +93,7 @@ typedef enum {
* Since: 0.6
*/
#define CLUTTER_SCRIPT_ERROR (clutter_script_error_quark ())
+CLUTTER_AVAILABLE_IN_ALL
GQuark clutter_script_error_quark (void);
/**
@@ -143,12 +144,16 @@ struct _ClutterScriptClass
void (*_clutter_reserved8) (void);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_script_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterScript * clutter_script_new (void);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_script_load_from_file (ClutterScript *script,
const gchar *filename,
GError **error);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_script_load_from_data (ClutterScript *script,
const gchar *data,
gssize length,
@@ -158,14 +163,19 @@ guint clutter_script_load_from_resource (ClutterScript
const gchar *resource_path,
GError **error);
+CLUTTER_AVAILABLE_IN_ALL
GObject * clutter_script_get_object (ClutterScript *script,
const gchar *name);
+CLUTTER_AVAILABLE_IN_ALL
gint clutter_script_get_objects (ClutterScript *script,
const gchar *first_name,
...) G_GNUC_NULL_TERMINATED;
+CLUTTER_AVAILABLE_IN_ALL
GList * clutter_script_list_objects (ClutterScript *script);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_script_unmerge_objects (ClutterScript *script,
guint merge_id);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_script_ensure_objects (ClutterScript *script);
CLUTTER_DEPRECATED_IN_1_12
@@ -177,17 +187,22 @@ CLUTTER_DEPRECATED_IN_1_12
ClutterState * clutter_script_get_states (ClutterScript *script,
const gchar *name);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_script_connect_signals (ClutterScript *script,
gpointer user_data);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_script_connect_signals_full (ClutterScript *script,
ClutterScriptConnectFunc func,
gpointer user_data);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_script_add_search_paths (ClutterScript *script,
const gchar * const paths[],
gsize n_paths);
+CLUTTER_AVAILABLE_IN_ALL
gchar * clutter_script_lookup_filename (ClutterScript *script,
const gchar *filename) G_GNUC_MALLOC;
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_script_get_type_from_name (ClutterScript *script,
const gchar *type_name);
@@ -197,6 +212,7 @@ void clutter_script_set_translation_domain (ClutterScript
CLUTTER_AVAILABLE_IN_1_10
const gchar * clutter_script_get_translation_domain (ClutterScript *script);
+CLUTTER_AVAILABLE_IN_ALL
const gchar * clutter_get_script_id (GObject *gobject);
G_END_DECLS
diff --git a/clutter/clutter-scriptable.h b/clutter/clutter-scriptable.h
index f47aac40c..f66ec863a 100644
--- a/clutter/clutter-scriptable.h
+++ b/clutter/clutter-scriptable.h
@@ -87,16 +87,21 @@ struct _ClutterScriptableIface
const GValue *value);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_scriptable_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
void clutter_scriptable_set_id (ClutterScriptable *scriptable,
const gchar *id_);
+CLUTTER_AVAILABLE_IN_ALL
const gchar * clutter_scriptable_get_id (ClutterScriptable *scriptable);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_scriptable_parse_custom_node (ClutterScriptable *scriptable,
ClutterScript *script,
GValue *value,
const gchar *name,
JsonNode *node);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_scriptable_set_custom_property (ClutterScriptable *scriptable,
ClutterScript *script,
const gchar *name,
diff --git a/clutter/clutter-scroll-actor.c b/clutter/clutter-scroll-actor.c
index 8783e102a..49f73279b 100644
--- a/clutter/clutter-scroll-actor.c
+++ b/clutter/clutter-scroll-actor.c
@@ -36,13 +36,8 @@
* #ClutterScrollActor does not provide pointer or keyboard event handling,
* nor does it provide visible scroll handles.
*
- *
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
+ * See [scroll-actor.c](https://git.gnome.org/browse/clutter/tree/examples/scroll-actor.c?h=clutter-1.18)
+ * for an example of how to use #ClutterScrollActor.
*
* #ClutterScrollActor is available since Clutter 1.12.
*/
@@ -96,6 +91,7 @@ static ClutterAnimatableIface *parent_animatable_iface = NULL;
static void clutter_animatable_iface_init (ClutterAnimatableIface *iface);
G_DEFINE_TYPE_WITH_CODE (ClutterScrollActor, clutter_scroll_actor, CLUTTER_TYPE_ACTOR,
+ G_ADD_PRIVATE (ClutterScrollActor)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_ANIMATABLE,
clutter_animatable_iface_init))
@@ -173,8 +169,6 @@ clutter_scroll_actor_class_init (ClutterScrollActorClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterScrollActorPrivate));
-
gobject_class->set_property = clutter_scroll_actor_set_property;
gobject_class->get_property = clutter_scroll_actor_get_property;
@@ -200,9 +194,7 @@ clutter_scroll_actor_class_init (ClutterScrollActorClass *klass)
static void
clutter_scroll_actor_init (ClutterScrollActor *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_SCROLL_ACTOR,
- ClutterScrollActorPrivate);
-
+ self->priv = clutter_scroll_actor_get_instance_private (self);
self->priv->scroll_mode = CLUTTER_SCROLL_BOTH;
clutter_actor_set_clip_to_allocation (CLUTTER_ACTOR (self), TRUE);
diff --git a/clutter/clutter-scroll-actor.h b/clutter/clutter-scroll-actor.h
index cad50814f..4665cfaf6 100644
--- a/clutter/clutter-scroll-actor.h
+++ b/clutter/clutter-scroll-actor.h
@@ -44,7 +44,7 @@ typedef struct _ClutterScrollActorClass ClutterScrollActorClass;
/**
* ClutterScrollActor:
*
- * The ClutterScrollActor structure contains only
+ * The #ClutterScrollActor structure contains only
* private data, and should be accessed using the provided API.
*
* Since: 1.12
@@ -60,7 +60,7 @@ struct _ClutterScrollActor
/**
* ClutterScrollActorClass:
*
- * The ClutterScrollActor structure contains only
+ * The #ClutterScrollActor structure contains only
* private data.
*
* Since: 1.12
diff --git a/clutter/clutter-settings-private.h b/clutter/clutter-settings-private.h
index 0e1c463f9..244122c1f 100644
--- a/clutter/clutter-settings-private.h
+++ b/clutter/clutter-settings-private.h
@@ -11,6 +11,10 @@ void _clutter_settings_set_backend (ClutterSettings *settings,
void _clutter_settings_read_from_key_file (ClutterSettings *settings,
GKeyFile *key_file);
+void clutter_settings_set_property_internal (ClutterSettings *settings,
+ const char *property,
+ GValue *value);
+
G_END_DECLS
#endif /* __CLUTTER_SETTINGS_PRIVATE_H__ */
diff --git a/clutter/clutter-settings.c b/clutter/clutter-settings.c
index 55a155b84..a269c3a89 100644
--- a/clutter/clutter-settings.c
+++ b/clutter/clutter-settings.c
@@ -31,6 +31,7 @@
#include "clutter-debug.h"
#include "clutter-settings-private.h"
+#include "clutter-stage-private.h"
#include "clutter-private.h"
#define DEFAULT_FONT_NAME "Sans 12"
@@ -61,6 +62,7 @@ struct _ClutterSettings
gdouble resolution;
gchar *font_name;
+ gint font_dpi;
gint xft_hinting;
gint xft_antialias;
@@ -72,6 +74,10 @@ struct _ClutterSettings
guint last_fontconfig_timestamp;
guint password_hint_time;
+
+ gint window_scaling_factor;
+ gint unscaled_font_dpi;
+ guint fixed_scaling_factor : 1;
};
struct _ClutterSettingsClass
@@ -104,6 +110,9 @@ enum
PROP_PASSWORD_HINT_TIME,
+ PROP_WINDOW_SCALING_FACTOR,
+ PROP_UNSCALED_FONT_DPI,
+
PROP_LAST
};
@@ -173,14 +182,12 @@ settings_update_font_options (ClutterSettings *self)
" - antialias: %d\n"
" - hinting: %d\n"
" - hint-style: %s\n"
- " - rgba: %s\n"
- " - dpi: %.2f",
+ " - rgba: %s\n",
self->font_name != NULL ? self->font_name : DEFAULT_FONT_NAME,
self->xft_antialias,
self->xft_hinting,
self->xft_hint_style != NULL ? self->xft_hint_style : "",
- self->xft_rgba != NULL ? self->xft_rgba : "",
- self->resolution);
+ self->xft_rgba != NULL ? self->xft_rgba : "");
clutter_backend_set_font_options (self->backend, options);
cairo_font_options_destroy (options);
@@ -198,7 +205,24 @@ settings_update_font_name (ClutterSettings *self)
static void
settings_update_resolution (ClutterSettings *self)
{
- CLUTTER_NOTE (BACKEND, "New resolution: %.2f", self->resolution);
+ const char *scale_env = NULL;
+
+ if (self->font_dpi > 0)
+ self->resolution = (gdouble) self->font_dpi / 1024.0;
+ else
+ self->resolution = 96.0;
+
+ scale_env = g_getenv ("GDK_DPI_SCALE");
+ if (scale_env != NULL)
+ {
+ double scale = g_ascii_strtod (scale_env, NULL);
+ if (scale != 0 && self->resolution > 0)
+ self->resolution *= scale;
+ }
+
+ CLUTTER_NOTE (BACKEND, "New resolution: %.2f (%s)",
+ self->resolution,
+ self->unscaled_font_dpi > 0 ? "unscaled" : "scaled");
if (self->backend != NULL)
g_signal_emit_by_name (self->backend, "resolution-changed");
@@ -296,7 +320,7 @@ clutter_settings_set_property (GObject *gobject,
break;
case PROP_FONT_DPI:
- self->resolution = (gdouble) g_value_get_int (value) / 1024.0;
+ self->font_dpi = g_value_get_int (value);
settings_update_resolution (self);
break;
@@ -329,12 +353,43 @@ clutter_settings_set_property (GObject *gobject,
self->password_hint_time = g_value_get_uint (value);
break;
+ case PROP_WINDOW_SCALING_FACTOR:
+ if (!self->fixed_scaling_factor)
+ {
+ self->window_scaling_factor = g_value_get_int (value);
+ self->fixed_scaling_factor = TRUE;
+ }
+ break;
+
+ case PROP_UNSCALED_FONT_DPI:
+ self->font_dpi = g_value_get_int (value);
+ settings_update_resolution (self);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
}
}
+void
+clutter_settings_set_property_internal (ClutterSettings *self,
+ const char *property,
+ GValue *value)
+{
+
+ property = g_intern_string (property);
+
+ if (property == I_("window-scaling-factor") &&
+ self->fixed_scaling_factor)
+ return;
+
+ g_object_set_property (G_OBJECT (self), property, value);
+
+ if (property == I_("window-scaling-factor"))
+ self->fixed_scaling_factor = FALSE;
+}
+
static void
clutter_settings_get_property (GObject *gobject,
guint prop_id,
@@ -389,6 +444,10 @@ clutter_settings_get_property (GObject *gobject,
g_value_set_uint (value, self->password_hint_time);
break;
+ case PROP_WINDOW_SCALING_FACTOR:
+ g_value_set_int (value, self->window_scaling_factor);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -532,6 +591,14 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
-1,
CLUTTER_PARAM_READWRITE);
+ obj_props[PROP_UNSCALED_FONT_DPI] =
+ g_param_spec_int ("unscaled-font-dpi",
+ P_("Font DPI"),
+ P_("The resolution of the font, in 1024 * dots/inch, or -1 to use the default"),
+ -1, 1024 * 1024,
+ -1,
+ CLUTTER_PARAM_WRITABLE);
+
/**
* ClutterSettings:font-hinting:
*
@@ -554,12 +621,11 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
*
* The style of the hinting used when rendering text. Valid values
* are:
- *
- * hintnone
- * hintslight
- * hintmedium
- * hintfull
- *
+ *
+ * - hintnone
+ * - hintslight
+ * - hintmedium
+ * - hintfull
*
* Since: 1.4
*/
@@ -575,13 +641,12 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
*
* The type of sub-pixel antialiasing used when rendering text. Valid
* values are:
- *
- * none
- * rgb
- * bgr
- * vrgb
- * vbgr
- *
+ *
+ * - none
+ * - rgb
+ * - bgr
+ * - vrgb
+ * - vbgr
*
* Since: 1.4
*/
@@ -610,6 +675,14 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
500,
CLUTTER_PARAM_READWRITE);
+ obj_props[PROP_WINDOW_SCALING_FACTOR] =
+ g_param_spec_int ("window-scaling-factor",
+ P_("Window Scaling Factor"),
+ P_("The scaling factor to be applied to windows"),
+ 1, G_MAXINT,
+ 1,
+ CLUTTER_PARAM_READWRITE);
+
obj_props[PROP_FONTCONFIG_TIMESTAMP] =
g_param_spec_uint ("fontconfig-timestamp",
P_("Fontconfig configuration timestamp"),
@@ -647,8 +720,13 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
static void
clutter_settings_init (ClutterSettings *self)
{
+ const char *scale_str;
+
self->resolution = -1.0;
+ self->font_dpi = -1;
+ self->unscaled_font_dpi = -1;
+
self->double_click_time = 250;
self->double_click_distance = 5;
@@ -662,6 +740,18 @@ clutter_settings_init (ClutterSettings *self)
self->xft_rgba = NULL;
self->long_press_duration = 500;
+
+ /* if the scaling factor was set by the environment we ignore
+ * any explicit setting
+ */
+ scale_str = g_getenv ("CLUTTER_SCALE");
+ if (scale_str != NULL)
+ {
+ self->window_scaling_factor = atol (scale_str);
+ self->fixed_scaling_factor = TRUE;
+ }
+ else
+ self->window_scaling_factor = 1;
}
/**
diff --git a/clutter/clutter-settings.h b/clutter/clutter-settings.h
index aa254ec4a..6e5719aca 100644
--- a/clutter/clutter-settings.h
+++ b/clutter/clutter-settings.h
@@ -16,8 +16,10 @@ G_BEGIN_DECLS
typedef struct _ClutterSettings ClutterSettings;
typedef struct _ClutterSettingsClass ClutterSettingsClass;
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_settings_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterSettings *clutter_settings_get_default (void);
G_END_DECLS
diff --git a/clutter/clutter-shader-effect.c b/clutter/clutter-shader-effect.c
index 08b4a92a4..a5169782f 100644
--- a/clutter/clutter-shader-effect.c
+++ b/clutter/clutter-shader-effect.c
@@ -34,35 +34,43 @@
* GLSL shader (after checking whether the compilation and linking were
* successfull) to the buffer before painting it on screen.
*
- *
- * Implementing a ClutterShaderEffect
- * Creating a sub-class of #ClutterShaderEffect requires the
- * overriding of the #ClutterOffscreenEffectClass.paint_target() virtual
- * function from the #ClutterOffscreenEffect class as well as the
- * get_static_shader_source() virtual from the
- * #ClutterShaderEffect class.
- * The #ClutterShaderEffectClass.get_static_shader_source()
- * function should return a copy of the shader source to use. This
- * function is only called once per subclass of #ClutterShaderEffect
- * regardless of how many instances of the effect are created. The
- * source for the shader is typically stored in a static const
- * string which is returned from this function via
- * g_strdup().
- * The paint_target() should set the
- * shader's uniforms if any. This is done by calling
- * clutter_shader_effect_set_uniform_value() or
- * clutter_shader_effect_set_uniform(). The sub-class should then
- * chain up to the #ClutterShaderEffect implementation.
- *
- * Setting uniforms on a ClutterShaderEffect
- * The example below shows a typical implementation of the
- * get_static_shader_source() and
- * paint_target() phases of a
- * #ClutterShaderEffect sub-class.
- *
+ * #ClutterShaderEffect is available since Clutter 1.4
+ *
+ * ## Implementing a ClutterShaderEffect
+ *
+ * Creating a sub-class of #ClutterShaderEffect requires the
+ * overriding of the #ClutterOffscreenEffectClass.paint_target() virtual
+ * function from the #ClutterOffscreenEffect class. It is also convenient
+ * to implement the #ClutterShaderEffectClass.get_static_shader_source()
+ * virtual function in case you are planning to create more than one
+ * instance of the effect.
+ *
+ * The #ClutterShaderEffectClass.get_static_shader_source()
+ * function should return a copy of the shader source to use. This
+ * function is only called once per subclass of #ClutterShaderEffect
+ * regardless of how many instances of the effect are created. The
+ * source for the shader is typically stored in a static const
+ * string which is returned from this function via
+ * g_strdup().
+ *
+ * The #ClutterOffscreenEffectClass.paint_target() should set the
+ * shader's uniforms if any. This is done by calling
+ * clutter_shader_effect_set_uniform_value() or
+ * clutter_shader_effect_set_uniform(). The sub-class should then
+ * chain up to the #ClutterShaderEffect implementation.
+ *
+ * ## Setting uniforms on a ClutterShaderEffect
+ *
+ * The example below shows a typical implementation of the
+ * #ClutterShaderEffectClass.get_static_shader_source() and
+ * #ClutterOffscreenEffectClass.paint_target() virtual functions
+ * for a #ClutterShaderEffect subclass.
+ *
+ * |[
* static gchar *
* my_effect_get_static_shader_source (ClutterShaderEffect *effect)
* {
+ * // shader_source is set elsewhere
* return g_strdup (shader_source);
* }
*
@@ -74,21 +82,19 @@
* ClutterEffectClass *parent_class;
* gfloat component_r, component_g, component_b;
*
- * /* the "tex" uniform is declared in the shader as:
- * *
- * * uniform int tex;
- * *
- * * and it is passed a constant value of 0
- * */
+ * // the "tex" uniform is declared in the shader as:
+ * //
+ * // uniform int tex;
+ * //
+ * // and it is passed a constant value of 0
* clutter_shader_effect_set_uniform (shader, "tex", G_TYPE_INT, 1, 0);
*
- * /* the "component" uniform is declared in the shader as:
- * *
- * * uniform vec3 component;
- * *
- * * and it's defined to contain the normalized components
- * * of a #ClutterColor
- * */
+ * // the "component" uniform is declared in the shader as:
+ * //
+ * // uniform vec3 component;
+ * //
+ * // and it's defined to contain the normalized components
+ * // of a #ClutterColor
* component_r = self->color.red / 255.0f;
* component_g = self->color.green / 255.0f;
* component_b = self->color.blue / 255.0f;
@@ -98,15 +104,11 @@
* component_g,
* component_b);
*
- * /* chain up to the parent's implementation */
+ * // chain up to the parent's implementation
* parent_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (my_effect_parent_class);
* return parent_class->paint_target (effect);
* }
- *
- *
- *
- *
- * #ClutterShaderEffect is available since Clutter 1.4
+ * ]|
*/
#ifdef HAVE_CONFIG_H
@@ -171,6 +173,7 @@ static GParamSpec *obj_props[PROP_LAST];
G_DEFINE_TYPE_WITH_CODE (ClutterShaderEffect,
clutter_shader_effect,
CLUTTER_TYPE_OFFSCREEN_EFFECT,
+ G_ADD_PRIVATE (ClutterShaderEffect)
g_type_add_class_private (g_define_type_id,
sizeof (ClutterShaderEffectClassPrivate)))
@@ -470,8 +473,6 @@ clutter_shader_effect_class_init (ClutterShaderEffectClass *klass)
offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterShaderEffectPrivate));
-
/**
* ClutterShaderEffect:shader-type:
*
@@ -503,9 +504,7 @@ clutter_shader_effect_class_init (ClutterShaderEffectClass *klass)
static void
clutter_shader_effect_init (ClutterShaderEffect *effect)
{
- effect->priv = G_TYPE_INSTANCE_GET_PRIVATE (effect,
- CLUTTER_TYPE_SHADER_EFFECT,
- ClutterShaderEffectPrivate);
+ effect->priv = clutter_shader_effect_get_instance_private (effect);
}
/**
@@ -808,7 +807,7 @@ add_uniform:
* argument, and by the @gtype argument. For instance, a uniform named
* "sampler0" and containing a single integer value is set using:
*
- * |[
+ * |[
* clutter_shader_effect_set_uniform (effect, "sampler0",
* G_TYPE_INT, 1,
* 0);
@@ -817,7 +816,7 @@ add_uniform:
* While a uniform named "components" and containing a 3-elements vector
* of floating point values (a "vec3") can be set using:
*
- * |[
+ * |[
* gfloat component_r, component_g, component_b;
*
* clutter_shader_effect_set_uniform (effect, "components",
@@ -829,7 +828,7 @@ add_uniform:
*
* or can be set using:
*
- * |[
+ * |[
* gfloat component_vec[3];
*
* clutter_shader_effect_set_uniform (effect, "components",
@@ -839,7 +838,7 @@ add_uniform:
*
* Finally, a uniform named "map" and containing a matrix can be set using:
*
- * |[
+ * |[
* clutter_shader_effect_set_uniform (effect, "map",
* CLUTTER_TYPE_SHADER_MATRIX, 1,
* cogl_matrix_get_array (&matrix));
diff --git a/clutter/clutter-shader-effect.h b/clutter/clutter-shader-effect.h
index 9777b64fa..0891ba570 100644
--- a/clutter/clutter-shader-effect.h
+++ b/clutter/clutter-shader-effect.h
@@ -47,7 +47,7 @@ typedef struct _ClutterShaderEffectClass ClutterShaderEffectClass;
/**
* ClutterShaderEffect:
*
- * The ClutterShaderEffect structure contains
+ * The #ClutterShaderEffect structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.4
@@ -68,7 +68,7 @@ struct _ClutterShaderEffect
* many instances are used. It is expected that subclasses will return
* a copy of a static string from this function.
*
- * The ClutterShaderEffectClass structure contains
+ * The #ClutterShaderEffectClass structure contains
* only private data
*
* Since: 1.4
@@ -90,23 +90,30 @@ struct _ClutterShaderEffectClass
void (*_clutter_shader5) (void);
};
+CLUTTER_AVAILABLE_IN_1_4
GType clutter_shader_effect_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_4
ClutterEffect * clutter_shader_effect_new (ClutterShaderType shader_type);
+CLUTTER_AVAILABLE_IN_1_4
gboolean clutter_shader_effect_set_shader_source (ClutterShaderEffect *effect,
const gchar *source);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_shader_effect_set_uniform (ClutterShaderEffect *effect,
const gchar *name,
GType gtype,
gsize n_values,
...);
+CLUTTER_AVAILABLE_IN_1_4
void clutter_shader_effect_set_uniform_value (ClutterShaderEffect *effect,
const gchar *name,
const GValue *value);
+CLUTTER_AVAILABLE_IN_1_4
CoglHandle clutter_shader_effect_get_shader (ClutterShaderEffect *effect);
+CLUTTER_AVAILABLE_IN_1_4
CoglHandle clutter_shader_effect_get_program (ClutterShaderEffect *effect);
G_END_DECLS
diff --git a/clutter/clutter-shader-types.h b/clutter/clutter-shader-types.h
index 21e54f3a5..0906243a3 100644
--- a/clutter/clutter-shader-types.h
+++ b/clutter/clutter-shader-types.h
@@ -28,7 +28,7 @@
#ifndef __CLUTTER_SHADER_TYPES_H__
#define __CLUTTER_SHADER_TYPES_H__
-#include
+#include
G_BEGIN_DECLS
@@ -70,23 +70,32 @@ typedef struct _ClutterShaderMatrix ClutterShaderMatrix;
*/
#define CLUTTER_VALUE_HOLDS_SHADER_MATRIX(x) (G_VALUE_HOLDS ((x), CLUTTER_TYPE_SHADER_MATRIX))
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_shader_float_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_shader_int_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_shader_matrix_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
void clutter_value_set_shader_float (GValue *value,
gint size,
const gfloat *floats);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_value_set_shader_int (GValue *value,
gint size,
const gint *ints);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_value_set_shader_matrix (GValue *value,
gint size,
const gfloat *matrix);
+CLUTTER_AVAILABLE_IN_1_0
const gfloat * clutter_value_get_shader_float (const GValue *value,
gsize *length);
+CLUTTER_AVAILABLE_IN_1_0
const gint * clutter_value_get_shader_int (const GValue *value,
gsize *length);
+CLUTTER_AVAILABLE_IN_1_0
const gfloat * clutter_value_get_shader_matrix (const GValue *value,
gsize *length);
diff --git a/clutter/clutter-snap-constraint.c b/clutter/clutter-snap-constraint.c
index c8eaea9ad..b4c558fd0 100644
--- a/clutter/clutter-snap-constraint.c
+++ b/clutter/clutter-snap-constraint.c
@@ -94,7 +94,7 @@ source_queue_relayout (ClutterActor *source,
ClutterSnapConstraint *constraint)
{
if (constraint->actor != NULL)
- clutter_actor_queue_relayout (constraint->actor);
+ _clutter_actor_queue_only_relayout (constraint->actor);
}
static void
diff --git a/clutter/clutter-snap-constraint.h b/clutter/clutter-snap-constraint.h
index e27821e09..9039536f1 100644
--- a/clutter/clutter-snap-constraint.h
+++ b/clutter/clutter-snap-constraint.h
@@ -40,7 +40,7 @@ G_BEGIN_DECLS
/**
* ClutterSnapConstraint:
*
- * ClutterSnapConstraint is an opaque structure
+ * #ClutterSnapConstraint is an opaque structure
* whose members cannot be directly accesses
*
* Since: 1.6
@@ -48,24 +48,32 @@ G_BEGIN_DECLS
typedef struct _ClutterSnapConstraint ClutterSnapConstraint;
typedef struct _ClutterSnapConstraintClass ClutterSnapConstraintClass;
+CLUTTER_AVAILABLE_IN_1_6
GType clutter_snap_constraint_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_6
ClutterConstraint * clutter_snap_constraint_new (ClutterActor *source,
ClutterSnapEdge from_edge,
ClutterSnapEdge to_edge,
gfloat offset);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_snap_constraint_set_source (ClutterSnapConstraint *constraint,
ClutterActor *source);
+CLUTTER_AVAILABLE_IN_1_6
ClutterActor * clutter_snap_constraint_get_source (ClutterSnapConstraint *constraint);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_snap_constraint_set_edges (ClutterSnapConstraint *constraint,
ClutterSnapEdge from_edge,
ClutterSnapEdge to_edge);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_snap_constraint_get_edges (ClutterSnapConstraint *constraint,
ClutterSnapEdge *from_edge,
ClutterSnapEdge *to_edge);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_snap_constraint_set_offset (ClutterSnapConstraint *constraint,
gfloat offset);
+CLUTTER_AVAILABLE_IN_1_6
gfloat clutter_snap_constraint_get_offset (ClutterSnapConstraint *constraint);
G_END_DECLS
diff --git a/clutter/clutter-stage-manager.h b/clutter/clutter-stage-manager.h
index b9174b1fc..2838b64cb 100644
--- a/clutter/clutter-stage-manager.h
+++ b/clutter/clutter-stage-manager.h
@@ -69,11 +69,16 @@ struct _ClutterStageManagerClass
ClutterStage *stage);
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_stage_manager_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterStageManager *clutter_stage_manager_get_default (void);
+CLUTTER_AVAILABLE_IN_1_0
ClutterStage * clutter_stage_manager_get_default_stage (ClutterStageManager *stage_manager);
+CLUTTER_AVAILABLE_IN_1_0
GSList * clutter_stage_manager_list_stages (ClutterStageManager *stage_manager);
+CLUTTER_AVAILABLE_IN_1_0
const GSList * clutter_stage_manager_peek_stages (ClutterStageManager *stage_manager);
G_END_DECLS
diff --git a/clutter/clutter-stage-private.h b/clutter/clutter-stage-private.h
index 9ccba3f5b..7529cdfdd 100644
--- a/clutter/clutter-stage-private.h
+++ b/clutter/clutter-stage-private.h
@@ -62,7 +62,8 @@ gboolean _clutter_stage_needs_update (ClutterStage
gboolean _clutter_stage_do_update (ClutterStage *stage);
void _clutter_stage_queue_event (ClutterStage *stage,
- ClutterEvent *event);
+ ClutterEvent *event,
+ gboolean copy_event);
gboolean _clutter_stage_has_queued_events (ClutterStage *stage);
void _clutter_stage_process_queued_events (ClutterStage *stage);
void _clutter_stage_update_input_devices (ClutterStage *stage);
@@ -119,6 +120,9 @@ gboolean _clutter_stage_update_state (ClutterStage *stag
ClutterStageState unset_state,
ClutterStageState set_state);
+void _clutter_stage_set_scale_factor (ClutterStage *stage,
+ int factor);
+
G_END_DECLS
#endif /* __CLUTTER_STAGE_PRIVATE_H__ */
diff --git a/clutter/clutter-stage-window.c b/clutter/clutter-stage-window.c
index c6c9f1ad8..450d264a1 100644
--- a/clutter/clutter-stage-window.c
+++ b/clutter/clutter-stage-window.c
@@ -333,3 +333,30 @@ _clutter_stage_window_can_clip_redraws (ClutterStageWindow *window)
return FALSE;
}
+
+void
+_clutter_stage_window_set_scale_factor (ClutterStageWindow *window,
+ int factor)
+{
+ ClutterStageWindowIface *iface;
+
+ g_return_if_fail (CLUTTER_IS_STAGE_WINDOW (window));
+
+ iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
+ if (iface->set_scale_factor != NULL)
+ iface->set_scale_factor (window, factor);
+}
+
+int
+_clutter_stage_window_get_scale_factor (ClutterStageWindow *window)
+{
+ ClutterStageWindowIface *iface;
+
+ g_return_val_if_fail (CLUTTER_IS_STAGE_WINDOW (window), 1);
+
+ iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
+ if (iface->get_scale_factor != NULL)
+ return iface->get_scale_factor (window);
+
+ return 1;
+}
diff --git a/clutter/clutter-stage-window.h b/clutter/clutter-stage-window.h
index 9b38994cc..fa8982525 100644
--- a/clutter/clutter-stage-window.h
+++ b/clutter/clutter-stage-window.h
@@ -14,7 +14,7 @@ G_BEGIN_DECLS
/*
* ClutterStageWindow: (skip)
*
- * ClutterStageWindow is an opaque structure
+ * #ClutterStageWindow is an opaque structure
* whose members should not be accessed directly
*
* Since: 0.8
@@ -84,6 +84,10 @@ struct _ClutterStageWindowIface
CoglFramebuffer *(* get_active_framebuffer) (ClutterStageWindow *stage_window);
gboolean (* can_clip_redraws) (ClutterStageWindow *stage_window);
+
+ void (* set_scale_factor) (ClutterStageWindow *stage_window,
+ int factor);
+ int (* get_scale_factor) (ClutterStageWindow *stage_window);
};
GType _clutter_stage_window_get_type (void) G_GNUC_CONST;
@@ -137,6 +141,10 @@ CoglFramebuffer *_clutter_stage_window_get_active_framebuffer (ClutterStageWin
gboolean _clutter_stage_window_can_clip_redraws (ClutterStageWindow *window);
+void _clutter_stage_window_set_scale_factor (ClutterStageWindow *window,
+ int factor);
+int _clutter_stage_window_get_scale_factor (ClutterStageWindow *window);
+
G_END_DECLS
#endif /* __CLUTTER_STAGE_WINDOW_H__ */
diff --git a/clutter/clutter-stage.c b/clutter/clutter-stage.c
index 333a3d379..d1ec7b483 100644
--- a/clutter/clutter-stage.c
+++ b/clutter/clutter-stage.c
@@ -79,15 +79,6 @@
#include "cogl/cogl.h"
-static void clutter_container_iface_init (ClutterContainerIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (ClutterStage, clutter_stage, CLUTTER_TYPE_GROUP,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
- clutter_container_iface_init))
-
-#define CLUTTER_STAGE_GET_PRIVATE(obj) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_STAGE, ClutterStagePrivate))
-
/*
* ClutterStageHint:
* @CLUTTER_STAGE_NONE: No hint set
@@ -134,16 +125,12 @@ struct _ClutterStagePrivate
ClutterStageHint stage_hints;
- gint picks_per_frame;
-
GArray *paint_volume_stack;
ClutterPlane current_clip_planes[4];
GList *pending_queue_redraws;
- ClutterPickMode pick_buffer_mode;
-
CoglFramebuffer *active_framebuffer;
gint sync_delay;
@@ -159,6 +146,9 @@ struct _ClutterStagePrivate
ClutterStageState current_state;
+ gpointer paint_data;
+ GDestroyNotify paint_notify;
+
guint relayout_pending : 1;
guint redraw_pending : 1;
guint is_fullscreen : 1;
@@ -170,7 +160,6 @@ struct _ClutterStagePrivate
guint min_size_changed : 1;
guint dirty_viewport : 1;
guint dirty_projection : 1;
- guint have_valid_pick_buffer : 1;
guint accept_focus : 1;
guint motion_events_enabled : 1;
guint has_custom_perspective : 1;
@@ -202,6 +191,7 @@ enum
ACTIVATE,
DEACTIVATE,
DELETE_EVENT,
+ AFTER_PAINT,
LAST_SIGNAL
};
@@ -210,9 +200,16 @@ static guint stage_signals[LAST_SIGNAL] = { 0, };
static const ClutterColor default_stage_color = { 255, 255, 255, 255 };
-static void _clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage);
+static void clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage);
static void free_queue_redraw_entry (ClutterStageQueueRedrawEntry *entry);
+static void clutter_container_iface_init (ClutterContainerIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterStage, clutter_stage, CLUTTER_TYPE_GROUP,
+ G_ADD_PRIVATE (ClutterStage)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
+ clutter_container_iface_init))
+
static void
clutter_stage_real_add (ClutterContainer *container,
ClutterActor *child)
@@ -368,6 +365,7 @@ clutter_stage_allocate (ClutterActor *self,
float new_width, new_height;
float width, height;
cairo_rectangle_int_t window_size;
+ int scale_factor;
if (priv->impl == NULL)
return;
@@ -447,11 +445,10 @@ clutter_stage_allocate (ClutterActor *self,
override.y2 = window_size.height;
CLUTTER_NOTE (LAYOUT,
- "Overriding original allocation of %dx%d "
+ "Overriding original allocation of %.2fx%.2f "
"with %.2fx%.2f (absolute origin %s)",
width, height,
- (int) (override.x2),
- (int) (override.y2),
+ override.x2, override.y2,
(flags & CLUTTER_ABSOLUTE_ORIGIN_CHANGED)
? "changed"
: "not changed");
@@ -468,6 +465,12 @@ clutter_stage_allocate (ClutterActor *self,
* allocation.
*/
_clutter_stage_window_get_geometry (priv->impl, &window_size);
+
+ scale_factor = _clutter_stage_window_get_scale_factor (priv->impl);
+
+ window_size.width *= scale_factor;
+ window_size.height *= scale_factor;
+
cogl_onscreen_clutter_backend_set_size (window_size.width,
window_size.height);
@@ -478,10 +481,13 @@ clutter_stage_allocate (ClutterActor *self,
if (CLUTTER_NEARBYINT (old_width) != CLUTTER_NEARBYINT (new_width) ||
CLUTTER_NEARBYINT (old_height) != CLUTTER_NEARBYINT (new_height))
{
+ int real_width = CLUTTER_NEARBYINT (new_width);
+ int real_height = CLUTTER_NEARBYINT (new_height);
+
_clutter_stage_set_viewport (CLUTTER_STAGE (self),
0, 0,
- CLUTTER_NEARBYINT (new_width),
- CLUTTER_NEARBYINT (new_height));
+ real_width,
+ real_height);
/* Note: we don't assume that set_viewport will queue a full redraw
* since it may bail-out early if something preemptively set the
@@ -626,18 +632,29 @@ _clutter_stage_do_paint (ClutterStage *stage,
{
ClutterStagePrivate *priv = stage->priv;
float clip_poly[8];
+ float viewport[4];
cairo_rectangle_int_t geom;
+ int window_scale;
+
+ if (priv->impl == NULL)
+ return;
_clutter_stage_window_get_geometry (priv->impl, &geom);
+ window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
+
+ viewport[0] = priv->viewport[0] * window_scale;
+ viewport[1] = priv->viewport[1] * window_scale;
+ viewport[2] = priv->viewport[2] * window_scale;
+ viewport[3] = priv->viewport[3] * window_scale;
if (clip)
{
- clip_poly[0] = MAX (clip->x, 0);
- clip_poly[1] = MAX (clip->y, 0);
- clip_poly[2] = MIN (clip->x + clip->width, geom.width);
+ clip_poly[0] = MAX (clip->x * window_scale, 0);
+ clip_poly[1] = MAX (clip->y * window_scale, 0);
+ clip_poly[2] = MIN ((clip->x + clip->width) * window_scale, geom.width * window_scale);
clip_poly[3] = clip_poly[1];
clip_poly[4] = clip_poly[2];
- clip_poly[5] = MIN (clip->y + clip->height, geom.height);
+ clip_poly[5] = MIN ((clip->y + clip->height) * window_scale, geom.height * window_scale);
clip_poly[6] = clip_poly[0];
clip_poly[7] = clip_poly[5];
}
@@ -645,12 +662,12 @@ _clutter_stage_do_paint (ClutterStage *stage,
{
clip_poly[0] = 0;
clip_poly[1] = 0;
- clip_poly[2] = geom.width;
+ clip_poly[2] = geom.width * window_scale;
clip_poly[3] = 0;
- clip_poly[4] = geom.width;
- clip_poly[5] = geom.height;
+ clip_poly[4] = geom.width * window_scale;
+ clip_poly[5] = geom.height * window_scale;
clip_poly[6] = 0;
- clip_poly[7] = geom.height;
+ clip_poly[7] = geom.height * window_scale;
}
CLUTTER_NOTE (CLIPPING, "Setting stage clip too: "
@@ -661,7 +678,7 @@ _clutter_stage_do_paint (ClutterStage *stage,
_cogl_util_get_eye_planes_for_screen_poly (clip_poly,
4,
- priv->viewport,
+ viewport,
&priv->projection,
&priv->inverse_projection,
priv->current_clip_planes);
@@ -669,8 +686,27 @@ _clutter_stage_do_paint (ClutterStage *stage,
_clutter_stage_paint_volume_stack_free_all (stage);
_clutter_stage_update_active_framebuffer (stage);
clutter_actor_paint (CLUTTER_ACTOR (stage));
+
+ g_signal_emit (stage, stage_signals[AFTER_PAINT], 0);
}
+/* If we don't implement this here, we get the paint function
+ * from the deprecated clutter-group class, which doesn't
+ * respect the Z order as it uses our empty sort_depth_order.
+ */
+static void
+clutter_stage_paint (ClutterActor *self)
+{
+ ClutterActorIter iter;
+ ClutterActor *child;
+
+ clutter_actor_iter_init (&iter, self);
+ while (clutter_actor_iter_next (&iter, &child))
+ clutter_actor_paint (child);
+}
+
+#if 0
+/* the Stage is cleared in clutter_actor_paint_node() */
static void
clutter_stage_paint (ClutterActor *self)
{
@@ -717,6 +753,7 @@ clutter_stage_paint (ClutterActor *self)
while (clutter_actor_iter_next (&iter, &child))
clutter_actor_paint (child);
}
+#endif
static void
clutter_stage_pick (ClutterActor *self,
@@ -914,7 +951,8 @@ clutter_stage_real_fullscreen (ClutterStage *stage)
void
_clutter_stage_queue_event (ClutterStage *stage,
- ClutterEvent *event)
+ ClutterEvent *event,
+ gboolean copy_event)
{
ClutterStagePrivate *priv;
gboolean first_event;
@@ -926,7 +964,10 @@ _clutter_stage_queue_event (ClutterStage *stage,
first_event = priv->event_queue->length == 0;
- g_queue_push_tail (priv->event_queue, clutter_event_copy (event));
+ if (copy_event)
+ event = clutter_event_copy (event);
+
+ g_queue_push_tail (priv->event_queue, event);
if (first_event)
{
@@ -1012,19 +1053,31 @@ _clutter_stage_process_queued_events (ClutterStage *stage)
check_device = TRUE;
/* Skip consecutive motion events coming from the same device */
- if (priv->throttle_motion_events &&
- next_event != NULL &&
- event->type == CLUTTER_MOTION &&
- (next_event->type == CLUTTER_MOTION ||
- next_event->type == CLUTTER_LEAVE) &&
- (!check_device || (device == next_device)))
- {
- CLUTTER_NOTE (EVENT,
- "Omitting motion event at %d, %d",
- (int) event->motion.x,
- (int) event->motion.y);
- goto next_event;
- }
+ if (priv->throttle_motion_events && next_event != NULL)
+ {
+ if (event->type == CLUTTER_MOTION &&
+ (next_event->type == CLUTTER_MOTION ||
+ next_event->type == CLUTTER_LEAVE) &&
+ (!check_device || (device == next_device)))
+ {
+ CLUTTER_NOTE (EVENT,
+ "Omitting motion event at %d, %d",
+ (int) event->motion.x,
+ (int) event->motion.y);
+ goto next_event;
+ }
+ else if (event->type == CLUTTER_TOUCH_UPDATE &&
+ next_event->type == CLUTTER_TOUCH_UPDATE &&
+ event->touch.sequence == next_event->touch.sequence &&
+ (!check_device || (device == next_device)))
+ {
+ CLUTTER_NOTE (EVENT,
+ "Omitting touch update event at %d, %d",
+ (int) event->touch.x,
+ (int) event->touch.y);
+ goto next_event;
+ }
+ }
_clutter_process_event (event);
@@ -1105,28 +1158,6 @@ _clutter_stage_maybe_relayout (ClutterActor *actor)
}
}
-static gboolean
-_clutter_stage_get_pick_buffer_valid (ClutterStage *stage, ClutterPickMode mode)
-{
- g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
-
- if (stage->priv->pick_buffer_mode != mode)
- return FALSE;
-
- return stage->priv->have_valid_pick_buffer;
-}
-
-static void
-_clutter_stage_set_pick_buffer_valid (ClutterStage *stage,
- gboolean valid,
- ClutterPickMode mode)
-{
- g_return_if_fail (CLUTTER_IS_STAGE (stage));
-
- stage->priv->have_valid_pick_buffer = !!valid;
- stage->priv->pick_buffer_mode = mode;
-}
-
static void
clutter_stage_do_redraw (ClutterStage *stage)
{
@@ -1154,9 +1185,6 @@ clutter_stage_do_redraw (ClutterStage *stage)
_clutter_actor_get_debug_name (actor),
stage);
- _clutter_stage_set_pick_buffer_valid (stage, FALSE, -1);
- priv->picks_per_frame = 0;
-
_clutter_backend_ensure_context (backend, stage);
if (_clutter_context_get_show_fps ())
@@ -1226,7 +1254,7 @@ _clutter_stage_do_update (ClutterStage *stage)
if (!priv->redraw_pending)
return FALSE;
- _clutter_stage_maybe_finish_queue_redraws (stage);
+ clutter_stage_maybe_finish_queue_redraws (stage);
clutter_stage_do_redraw (stage);
@@ -1301,6 +1329,9 @@ clutter_stage_real_queue_redraw (ClutterActor *actor,
return;
}
+ if (redraw_clip->is_empty)
+ return;
+
_clutter_paint_volume_get_stage_paint_box (redraw_clip,
stage,
&bounding_box);
@@ -1416,16 +1447,20 @@ _clutter_stage_do_pick (ClutterStage *stage,
gint y,
ClutterPickMode mode)
{
- ClutterStagePrivate *priv;
+ ClutterActor *actor = CLUTTER_ACTOR (stage);
+ ClutterStagePrivate *priv = stage->priv;
ClutterMainContext *context;
guchar pixel[4] = { 0xff, 0xff, 0xff, 0xff };
CoglColor stage_pick_id;
gboolean dither_enabled_save;
+ ClutterActor *retval;
CoglFramebuffer *fb;
- ClutterActor *actor;
- gboolean is_clipped;
+ gint dirty_x;
+ gint dirty_y;
gint read_x;
gint read_y;
+ float stage_width, stage_height;
+ int window_scale;
CLUTTER_STATIC_COUNTER (do_pick_counter,
"_clutter_stage_do_pick counter",
@@ -1452,12 +1487,20 @@ _clutter_stage_do_pick (ClutterStage *stage,
"The time spent issuing a read pixels",
0 /* no application private data */);
- g_return_val_if_fail (CLUTTER_IS_STAGE (stage), NULL);
-
priv = stage->priv;
+ if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
+ return actor;
+
if (G_UNLIKELY (clutter_pick_debug_flags & CLUTTER_DEBUG_NOP_PICKING))
- return CLUTTER_ACTOR (stage);
+ return actor;
+
+ if (G_UNLIKELY (priv->impl == NULL))
+ return actor;
+
+ clutter_actor_get_size (CLUTTER_ACTOR (stage), &stage_width, &stage_height);
+ if (x < 0 || x >= stage_width || y < 0 || y >= stage_height)
+ return actor;
#ifdef CLUTTER_ENABLE_PROFILE
if (clutter_profile_flags & CLUTTER_PROFILE_PICKING_ONLY)
@@ -1469,73 +1512,36 @@ _clutter_stage_do_pick (ClutterStage *stage,
context = _clutter_context_get_default ();
clutter_stage_ensure_current (stage);
+ window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
- /* It's possible that we currently have a static scene and have renderered a
- * full, unclipped pick buffer. If so we can simply continue to read from
- * this cached buffer until the scene next changes. */
- if (_clutter_stage_get_pick_buffer_valid (stage, mode))
- {
- CLUTTER_TIMER_START (_clutter_uprof_context, pick_read);
- cogl_read_pixels (x, y, 1, 1,
- COGL_READ_PIXELS_COLOR_BUFFER,
- COGL_PIXEL_FORMAT_RGBA_8888_PRE,
- pixel);
- CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_read);
-
- CLUTTER_NOTE (PICK, "Reusing pick buffer from previous render to fetch "
- "actor at %i,%i", x, y);
-
- goto check_pixel;
- }
-
- priv->picks_per_frame++;
+ fb = cogl_get_draw_framebuffer ();
_clutter_backend_ensure_context (context->backend, stage);
/* needed for when a context switch happens */
_clutter_stage_maybe_setup_viewport (stage);
- /* If we are seeing multiple picks per frame that means the scene is static
- * so we promote to doing a non-scissored pick render so that all subsequent
- * picks for the same static scene won't require additional renders */
- if (priv->picks_per_frame < 2)
- {
- gint dirty_x;
- gint dirty_y;
+ _clutter_stage_window_get_dirty_pixel (priv->impl, &dirty_x, &dirty_y);
- _clutter_stage_window_get_dirty_pixel (priv->impl, &dirty_x, &dirty_y);
+ if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
+ cogl_framebuffer_push_scissor_clip (fb, dirty_x * window_scale, dirty_y * window_scale, 1, 1);
- if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
- cogl_clip_push_window_rectangle (dirty_x, dirty_y, 1, 1);
+ cogl_set_viewport (priv->viewport[0] * window_scale - x * window_scale + dirty_x * window_scale,
+ priv->viewport[1] * window_scale - y * window_scale + dirty_y * window_scale,
+ priv->viewport[2] * window_scale,
+ priv->viewport[3] * window_scale);
- cogl_set_viewport (priv->viewport[0] - x + dirty_x,
- priv->viewport[1] - y + dirty_y,
- priv->viewport[2],
- priv->viewport[3]);
+ read_x = dirty_x * window_scale;
+ read_y = dirty_y * window_scale;
- read_x = dirty_x;
- read_y = dirty_y;
- is_clipped = TRUE;
- }
- else
- {
- read_x = x;
- read_y = y;
- is_clipped = FALSE;
- }
+ CLUTTER_NOTE (PICK, "Performing pick at %i,%i", x, y);
- CLUTTER_NOTE (PICK, "Performing %s pick at %i,%i",
- is_clipped ? "clipped" : "full", x, y);
-
- cogl_color_init_from_4ub (&stage_pick_id, 255, 255, 255, 255);
CLUTTER_TIMER_START (_clutter_uprof_context, pick_clear);
- cogl_clear (&stage_pick_id,
- COGL_BUFFER_BIT_COLOR |
- COGL_BUFFER_BIT_DEPTH);
+ cogl_color_init_from_4ub (&stage_pick_id, 255, 255, 255, 255);
+ cogl_clear (&stage_pick_id, COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_DEPTH);
CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_clear);
/* Disable dithering (if any) when doing the painting in pick mode */
- fb = cogl_get_draw_framebuffer ();
dither_enabled_save = cogl_framebuffer_get_dither_enabled (fb);
cogl_framebuffer_set_dither_enabled (fb, FALSE);
@@ -1566,12 +1572,10 @@ _clutter_stage_do_pick (ClutterStage *stage,
{
char *file_name =
g_strconcat ("pick-buffer-",
- _clutter_actor_get_debug_name (CLUTTER_ACTOR (stage)),
+ _clutter_actor_get_debug_name (actor),
NULL);
- read_pixels_to_file (file_name, 0, 0,
- clutter_actor_get_width (CLUTTER_ACTOR (stage)),
- clutter_actor_get_height (CLUTTER_ACTOR (stage)));
+ read_pixels_to_file (file_name, 0, 0, stage_width, stage_height);
g_free (file_name);
}
@@ -1579,34 +1583,18 @@ _clutter_stage_do_pick (ClutterStage *stage,
/* Restore whether GL_DITHER was enabled */
cogl_framebuffer_set_dither_enabled (fb, dither_enabled_save);
- if (is_clipped)
- {
- if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
- cogl_clip_pop ();
+ if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
+ cogl_framebuffer_pop_clip (fb);
- _clutter_stage_dirty_viewport (stage);
+ _clutter_stage_dirty_viewport (stage);
- _clutter_stage_set_pick_buffer_valid (stage, FALSE, -1);
- }
- else
- {
- /* Notify the backend that we have trashed the contents of
- * the back buffer... */
- _clutter_stage_window_dirty_back_buffer (priv->impl);
-
- _clutter_stage_set_pick_buffer_valid (stage, TRUE, mode);
- }
-
-check_pixel:
if (pixel[0] == 0xff && pixel[1] == 0xff && pixel[2] == 0xff)
- {
- actor = CLUTTER_ACTOR (stage);
- }
+ retval = actor;
else
{
guint32 id_ = _clutter_pixel_to_id (pixel);
- actor = _clutter_get_actor_by_id (stage, id_);
+ retval = _clutter_stage_get_actor_by_pick_id (stage, id_);
}
CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_timer);
@@ -1616,11 +1604,9 @@ check_pixel:
_clutter_profile_suspend ();
#endif
- return actor;
+ return retval;
}
-
-
static gboolean
clutter_stage_real_delete_event (ClutterStage *stage,
ClutterEvent *event)
@@ -1630,7 +1616,7 @@ clutter_stage_real_delete_event (ClutterStage *stage,
else
clutter_actor_destroy (CLUTTER_ACTOR (stage));
- return TRUE;
+ return CLUTTER_EVENT_STOP;
}
static void
@@ -1848,7 +1834,7 @@ clutter_stage_dispose (GObject *object)
priv->impl = NULL;
}
- clutter_actor_remove_all_children (CLUTTER_ACTOR (object));
+ clutter_actor_destroy_all_children (CLUTTER_ACTOR (object));
g_list_free_full (priv->pending_queue_redraws,
(GDestroyNotify) free_queue_redraw_entry);
@@ -1879,6 +1865,9 @@ clutter_stage_finalize (GObject *object)
if (priv->fps_timer != NULL)
g_timer_destroy (priv->fps_timer);
+ if (priv->paint_notify != NULL)
+ priv->paint_notify (priv->paint_data);
+
G_OBJECT_CLASS (clutter_stage_parent_class)->finalize (object);
}
@@ -2205,9 +2194,9 @@ clutter_stage_class_init (ClutterStageClass *klass)
* It is possible to override the default behaviour by connecting
* a new handler and returning %TRUE there.
*
- * This signal is emitted only on Clutter backends that
+ * This signal is emitted only on Clutter backends that
* embed #ClutterStage in native windows. It is not emitted for
- * backends that use a static frame buffer.
+ * backends that use a static frame buffer.
*
* Since: 1.2
*/
@@ -2221,12 +2210,27 @@ clutter_stage_class_init (ClutterStageClass *klass)
G_TYPE_BOOLEAN, 1,
CLUTTER_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
+ /**
+ * ClutterStage::after-paint:
+ * @stage: the stage that received the event
+ *
+ * The ::after-paint signal is emitted after the stage is painted,
+ * but before the results are displayed on the screen.
+ *
+ * Since: 1.20
+ */
+ stage_signals[AFTER_PAINT] =
+ g_signal_new (I_("after-paint"),
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0, /* no corresponding vfunc */
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
klass->fullscreen = clutter_stage_real_fullscreen;
klass->activate = clutter_stage_real_activate;
klass->deactivate = clutter_stage_real_deactivate;
klass->delete_event = clutter_stage_real_delete_event;
-
- g_type_class_add_private (gobject_class, sizeof (ClutterStagePrivate));
}
static void
@@ -2242,12 +2246,13 @@ clutter_stage_init (ClutterStage *self)
ClutterStagePrivate *priv;
ClutterStageWindow *impl;
ClutterBackend *backend;
+ int window_scale = 1;
GError *error;
/* a stage is a top-level object */
CLUTTER_SET_PRIVATE_FLAGS (self, CLUTTER_IS_TOPLEVEL);
- self->priv = priv = CLUTTER_STAGE_GET_PRIVATE (self);
+ self->priv = priv = clutter_stage_get_instance_private (self);
CLUTTER_NOTE (BACKEND, "Creating stage from the default backend");
backend = clutter_get_default_backend ();
@@ -2259,6 +2264,7 @@ clutter_stage_init (ClutterStage *self)
{
_clutter_stage_set_window (self, impl);
_clutter_stage_window_get_geometry (priv->impl, &geom);
+ window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
}
else
{
@@ -2312,8 +2318,8 @@ clutter_stage_init (ClutterStage *self)
priv->perspective.aspect,
priv->perspective.z_near,
50, /* distance to 2d plane */
- geom.width,
- geom.height);
+ geom.width * window_scale,
+ geom.height * window_scale);
/* FIXME - remove for 2.0 */
@@ -2331,10 +2337,10 @@ clutter_stage_init (ClutterStage *self)
g_signal_connect (self, "notify::min-height",
G_CALLBACK (clutter_stage_notify_min_size), NULL);
- _clutter_stage_set_viewport (self, 0, 0, geom.width, geom.height);
-
- _clutter_stage_set_pick_buffer_valid (self, FALSE, CLUTTER_PICK_ALL);
- priv->picks_per_frame = 0;
+ _clutter_stage_set_viewport (self,
+ 0, 0,
+ geom.width,
+ geom.height);
priv->paint_volume_stack =
g_array_new (FALSE, FALSE, sizeof (ClutterPaintVolume));
@@ -2917,6 +2923,8 @@ clutter_stage_get_actor_at_pos (ClutterStage *stage,
gint x,
gint y)
{
+ g_return_val_if_fail (CLUTTER_IS_STAGE (stage), NULL);
+
return _clutter_stage_do_pick (stage, x, y, pick_mode);
}
@@ -3218,29 +3226,29 @@ clutter_stage_set_use_fog (ClutterStage *stage,
* ClutterColor stage_color = { 0, };
* CoglColor fog_color = { 0, };
*
- * /* set the fog color to the stage background color */
- * clutter_stage_get_color (CLUTTER_STAGE (actor), &stage_color);
- * cogl_color_init_from_4ub (&fog_color,
+ * // set the fog color to the stage background color
+ * clutter_stage_get_color (CLUTTER_STAGE (actor), &stage_color);
+ * cogl_color_init_from_4ub (&fog_color,
* stage_color.red,
* stage_color.green,
* stage_color.blue,
* stage_color.alpha);
*
- * /* enable fog */
- * cogl_set_fog (&fog_color,
- * COGL_FOG_MODE_EXPONENTIAL, /* mode */
- * 0.5, /* density */
- * 5.0, 30.0); /* z_near and z_far */
+ * // enable fog //
+ * cogl_set_fog (&fog_color,
+ * COGL_FOG_MODE_EXPONENTIAL, // mode
+ * 0.5, // density
+ * 5.0, 30.0); // z_near and z_far
* }
* ]|
*
- * The fogging functions only work correctly when the visible actors use
+ * The fogging functions only work correctly when the visible actors use
* unmultiplied alpha colors. By default Cogl will premultiply textures and
* cogl_set_source_color() will premultiply colors, so unless you explicitly
* load your textures requesting an unmultiplied internal format and use
* cogl_material_set_color() you can only use fogging with fully opaque actors.
* Support for premultiplied colors will improve in the future when we can
- * depend on fragment shaders.
+ * depend on fragment shaders.
*
* Since: 0.6
*
@@ -3386,6 +3394,18 @@ clutter_stage_ensure_viewport (ClutterStage *stage)
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
}
+static void
+clutter_stage_apply_scale (ClutterStage *stage)
+{
+ int factor;
+
+ factor = _clutter_stage_window_get_scale_factor (stage->priv->impl);
+ if (factor != 1)
+ cogl_matrix_scale (&stage->priv->view, factor, factor, 1.f);
+}
+
+# define _DEG_TO_RAD(d) ((d) * ((float) G_PI / 180.0f))
+
/* This calculates a distance into the view frustum to position the
* stage so there is a decent amount of space to position geometry
* between the stage and the near clipping plane.
@@ -3498,13 +3518,26 @@ calculate_z_translation (float z_near)
* z_2d = --------------------------- + z_near
* sin (0.5°)
*/
-#define _DEG_TO_RAD (G_PI / 180.0)
- return z_near * tanf (30.0f * _DEG_TO_RAD) *
- sinf (120.0f * _DEG_TO_RAD) * cosf (30.5f * _DEG_TO_RAD) /
- sinf (0.5f * _DEG_TO_RAD) +
- z_near;
-#undef _DEG_TO_RAD
- /* We expect the compiler should boil this down to z_near * CONSTANT */
+
+ /* We expect the compiler should boil this down to z_near * CONSTANT
+ * already, but just in case we use precomputed constants
+ */
+#if 0
+# define A tanf (_DEG_TO_RAD (30.f))
+# define B sinf (_DEG_TO_RAD (120.f))
+# define C cosf (_DEG_TO_RAD (30.5f))
+# define D sinf (_DEG_TO_RAD (.5f))
+#else
+# define A 0.57735025882720947265625f
+# define B 0.866025388240814208984375f
+# define C 0.86162912845611572265625f
+# define D 0.00872653536498546600341796875f
+#endif
+
+ return z_near
+ * A * B * C
+ / D
+ + z_near;
}
void
@@ -3515,16 +3548,20 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage)
if (priv->dirty_viewport)
{
ClutterPerspective perspective;
+ int window_scale;
float z_2d;
CLUTTER_NOTE (PAINT,
"Setting up the viewport { w:%f, h:%f }",
- priv->viewport[2], priv->viewport[3]);
+ priv->viewport[2],
+ priv->viewport[3]);
- cogl_set_viewport (priv->viewport[0],
- priv->viewport[1],
- priv->viewport[2],
- priv->viewport[3]);
+ window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
+
+ cogl_set_viewport (priv->viewport[0] * window_scale,
+ priv->viewport[1] * window_scale,
+ priv->viewport[2] * window_scale,
+ priv->viewport[3] * window_scale);
perspective = priv->perspective;
@@ -3536,15 +3573,13 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage)
perspective.aspect = priv->viewport[2] / priv->viewport[3];
z_2d = calculate_z_translation (perspective.z_near);
-#define _DEG_TO_RAD (G_PI / 180.0)
/* NB: z_2d is only enough room for 85% of the stage_height between
* the stage and the z_near plane. For behind the stage plane we
* want a more consistent gap of 10 times the stage_height before
* hitting the far plane so we calculate that relative to the final
* height of the stage plane at the z_2d_distance we got... */
perspective.z_far = z_2d +
- tanf ((perspective.fovy / 2.0f) * _DEG_TO_RAD) * z_2d * 20.0f;
-#undef _DEG_TO_RAD
+ tanf (_DEG_TO_RAD (perspective.fovy / 2.0f)) * z_2d * 20.0f;
clutter_stage_set_perspective_internal (stage, &perspective);
}
@@ -3557,8 +3592,10 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage)
perspective.aspect,
perspective.z_near,
z_2d,
- priv->viewport[2],
- priv->viewport[3]);
+ priv->viewport[2] * window_scale,
+ priv->viewport[3] * window_scale);
+
+ clutter_stage_apply_scale (stage);
priv->dirty_viewport = FALSE;
}
@@ -3571,6 +3608,8 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage)
}
}
+#undef _DEG_TO_RAD
+
/**
* clutter_stage_ensure_redraw:
* @stage: a #ClutterStage
@@ -3609,8 +3648,8 @@ clutter_stage_ensure_redraw (ClutterStage *stage)
*
* Queues a redraw for the passed stage.
*
- * Applications should call clutter_actor_queue_redraw() and not
- * this function.
+ * Applications should call clutter_actor_queue_redraw() and not
+ * this function.
*
* Since: 0.8
*
@@ -3918,12 +3957,12 @@ _clutter_stage_clear_update_time (ClutterStage *stage)
* if the stage is always covered - for instance, in a full-screen
* video player or in a game with a background texture.
*
- * This setting is a hint; Clutter might discard this
- * hint depending on its internal state.
+ * This setting is a hint; Clutter might discard this hint
+ * depending on its internal state.
*
- * If parts of the stage are visible and you disable
- * clearing you might end up with visual artifacts while painting the
- * contents of the stage.
+ * If parts of the stage are visible and you disable clearing you
+ * might end up with visual artifacts while painting the contents of
+ * the stage.
*
* Since: 1.4
*/
@@ -4052,16 +4091,6 @@ _clutter_stage_queue_actor_redraw (ClutterStage *stage,
}
#endif /* CLUTTER_ENABLE_DEBUG */
- /* We have an optimization in _clutter_stage_do_pick to detect when
- * the scene is static so we can cache a full, un-clipped pick
- * buffer to avoid continuous pick renders.
- *
- * Currently the assumption is that actors queue a redraw when some
- * state changes that affects painting *or* picking so we can use
- * this point to invalidate any currently cached pick buffer.
- */
- _clutter_stage_set_pick_buffer_valid (stage, FALSE, -1);
-
if (entry)
{
/* Ignore all requests to queue a redraw for an actor if a full
@@ -4137,7 +4166,7 @@ _clutter_stage_queue_redraw_entry_invalidate (ClutterStageQueueRedrawEntry *entr
}
static void
-_clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage)
+clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage)
{
/* Note: we have to repeat until the pending_queue_redraws list is
* empty because actors are allowed to queue redraws in response to
@@ -4235,14 +4264,12 @@ clutter_stage_get_accept_focus (ClutterStage *stage)
*
* The default is %TRUE.
*
- * If @enable is %FALSE the following events will not be delivered
- * to the actors children of @stage.
+ * If @enable is %FALSE the following signals will not be emitted
+ * by the actors children of @stage:
*
- *
- * #ClutterActor::motion-event
- * #ClutterActor::enter-event
- * #ClutterActor::leave-event
- *
+ * - #ClutterActor::motion-event
+ * - #ClutterActor::enter-event
+ * - #ClutterActor::leave-event
*
* The events will still be delivered to the #ClutterStage.
*
@@ -4581,3 +4608,20 @@ clutter_stage_skip_sync_delay (ClutterStage *stage)
if (stage_window)
_clutter_stage_window_schedule_update (stage_window, -1);
}
+
+void
+_clutter_stage_set_scale_factor (ClutterStage *stage,
+ int factor)
+{
+ ClutterStagePrivate *priv = stage->priv;
+
+ if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
+ return;
+
+ if (priv->impl == NULL)
+ return;
+
+ _clutter_stage_window_set_scale_factor (priv->impl, factor);
+
+ clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
+}
diff --git a/clutter/clutter-stage.h b/clutter/clutter-stage.h
index af6b091df..758381144 100644
--- a/clutter/clutter-stage.h
+++ b/clutter/clutter-stage.h
@@ -135,71 +135,106 @@ struct _ClutterFog
gfloat z_far;
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_perspective_get_type (void) G_GNUC_CONST;
+CLUTTER_DEPRECATED_IN_1_10
GType clutter_fog_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_stage_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_stage_new (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_perspective (ClutterStage *stage,
ClutterPerspective *perspective);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_get_perspective (ClutterStage *stage,
ClutterPerspective *perspective);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_fullscreen (ClutterStage *stage,
gboolean fullscreen);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_fullscreen (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_show_cursor (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_hide_cursor (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_title (ClutterStage *stage,
const gchar *title);
+CLUTTER_AVAILABLE_IN_ALL
const gchar * clutter_stage_get_title (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_user_resizable (ClutterStage *stage,
gboolean resizable);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_user_resizable (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_minimum_size (ClutterStage *stage,
guint width,
guint height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_get_minimum_size (ClutterStage *stage,
guint *width,
guint *height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_no_clear_hint (ClutterStage *stage,
gboolean no_clear);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_no_clear_hint (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_use_alpha (ClutterStage *stage,
gboolean use_alpha);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_use_alpha (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_key_focus (ClutterStage *stage,
ClutterActor *actor);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_stage_get_key_focus (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_throttle_motion_events (ClutterStage *stage,
gboolean throttle);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_throttle_motion_events (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_motion_events_enabled (ClutterStage *stage,
gboolean enabled);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_motion_events_enabled (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_set_accept_focus (ClutterStage *stage,
gboolean accept_focus);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_get_accept_focus (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_stage_event (ClutterStage *stage,
ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor * clutter_stage_get_actor_at_pos (ClutterStage *stage,
ClutterPickMode pick_mode,
gint x,
gint y);
+CLUTTER_AVAILABLE_IN_ALL
guchar * clutter_stage_read_pixels (ClutterStage *stage,
gint x,
gint y,
gint width,
gint height);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_get_redraw_clip_bounds (ClutterStage *stage,
cairo_rectangle_int_t *clip);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_ensure_current (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_ensure_viewport (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_stage_ensure_redraw (ClutterStage *stage);
#ifdef CLUTTER_ENABLE_EXPERIMENTAL_API
diff --git a/clutter/clutter-swipe-action.c b/clutter/clutter-swipe-action.c
index 0b0886bbc..452a5a020 100644
--- a/clutter/clutter-swipe-action.c
+++ b/clutter/clutter-swipe-action.c
@@ -45,6 +45,7 @@
#include "clutter-debug.h"
#include "clutter-enum-types.h"
+#include "clutter-gesture-action-private.h"
#include "clutter-marshal.h"
#include "clutter-private.h"
@@ -53,7 +54,7 @@ struct _ClutterSwipeActionPrivate
ClutterSwipeDirection h_direction;
ClutterSwipeDirection v_direction;
- int threshold;
+ float distance_x, distance_y;
};
enum
@@ -66,21 +67,22 @@ enum
static guint swipe_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterSwipeAction, clutter_swipe_action,
- CLUTTER_TYPE_GESTURE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterSwipeAction, clutter_swipe_action, CLUTTER_TYPE_GESTURE_ACTION)
static gboolean
gesture_begin (ClutterGestureAction *action,
ClutterActor *actor)
{
ClutterSwipeActionPrivate *priv = CLUTTER_SWIPE_ACTION (action)->priv;
- ClutterSettings *settings = clutter_settings_get_default ();
/* reset the state at the beginning of a new gesture */
priv->h_direction = 0;
priv->v_direction = 0;
- g_object_get (settings, "dnd-drag-threshold", &priv->threshold, NULL);
+ g_object_get (action,
+ "threshold-trigger-distance-x", &priv->distance_x,
+ "threshold-trigger-distance-y", &priv->distance_y,
+ NULL);
return TRUE;
}
@@ -108,14 +110,14 @@ gesture_progress (ClutterGestureAction *action,
delta_x = press_x - motion_x;
delta_y = press_y - motion_y;
- if (delta_x >= priv->threshold)
+ if (delta_x >= priv->distance_x)
h_direction = CLUTTER_SWIPE_DIRECTION_RIGHT;
- else if (delta_x < -priv->threshold)
+ else if (delta_x < -priv->distance_x)
h_direction = CLUTTER_SWIPE_DIRECTION_LEFT;
- if (delta_y >= priv->threshold)
+ if (delta_y >= priv->distance_y)
v_direction = CLUTTER_SWIPE_DIRECTION_DOWN;
- else if (delta_y < -priv->threshold)
+ else if (delta_y < -priv->distance_y)
v_direction = CLUTTER_SWIPE_DIRECTION_UP;
/* cancel gesture on direction reversal */
@@ -152,14 +154,14 @@ gesture_end (ClutterGestureAction *action,
0,
&release_x, &release_y);
- if (release_x - press_x > priv->threshold)
+ if (release_x - press_x > priv->distance_y)
direction |= CLUTTER_SWIPE_DIRECTION_RIGHT;
- else if (press_x - release_x > priv->threshold)
+ else if (press_x - release_x > priv->distance_x)
direction |= CLUTTER_SWIPE_DIRECTION_LEFT;
- if (release_y - press_y > priv->threshold)
+ if (release_y - press_y > priv->distance_y)
direction |= CLUTTER_SWIPE_DIRECTION_DOWN;
- else if (press_y - release_y > priv->threshold)
+ else if (press_y - release_y > priv->distance_y)
direction |= CLUTTER_SWIPE_DIRECTION_UP;
/* XXX:2.0 remove */
@@ -178,13 +180,22 @@ clutter_swipe_action_real_swipe (ClutterSwipeAction *action,
return TRUE;
}
+static void
+clutter_swipe_action_constructed (GObject *object)
+{
+ clutter_gesture_action_set_threshold_trigger_edge (CLUTTER_GESTURE_ACTION (object),
+ CLUTTER_GESTURE_TRIGGER_EDGE_AFTER);
+}
+
static void
clutter_swipe_action_class_init (ClutterSwipeActionClass *klass)
{
ClutterGestureActionClass *gesture_class =
CLUTTER_GESTURE_ACTION_CLASS (klass);
+ GObjectClass *object_class =
+ G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterSwipeActionPrivate));
+ object_class->constructed = clutter_swipe_action_constructed;
gesture_class->gesture_begin = gesture_begin;
gesture_class->gesture_progress = gesture_progress;
@@ -247,8 +258,7 @@ clutter_swipe_action_class_init (ClutterSwipeActionClass *klass)
static void
clutter_swipe_action_init (ClutterSwipeAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_SWIPE_ACTION,
- ClutterSwipeActionPrivate);
+ self->priv = clutter_swipe_action_get_instance_private (self);
}
/**
diff --git a/clutter/clutter-swipe-action.h b/clutter/clutter-swipe-action.h
index c35b65ac7..9c18e94ad 100644
--- a/clutter/clutter-swipe-action.h
+++ b/clutter/clutter-swipe-action.h
@@ -51,7 +51,7 @@ typedef struct _ClutterSwipeActionClass ClutterSwipeActionClass;
/**
* ClutterSwipeAction:
*
- * The ClutterSwipeAction structure contains
+ * The #ClutterSwipeAction structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.8
@@ -70,7 +70,7 @@ struct _ClutterSwipeAction
* deprecated since 1.14
* @swipe: class handler for the #ClutterSwipeAction::swipe signal
*
- * The ClutterSwipeActionClass structure contains
+ * The #ClutterSwipeActionClass structure contains
* only private data.
*
* Since: 1.8
@@ -98,8 +98,10 @@ struct _ClutterSwipeActionClass
void (* _clutter_swipe_action6) (void);
};
+CLUTTER_AVAILABLE_IN_1_8
GType clutter_swipe_action_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_8
ClutterAction * clutter_swipe_action_new (void);
G_END_DECLS
diff --git a/clutter/clutter-tap-action.c b/clutter/clutter-tap-action.c
index caa00a1d1..4d30eb129 100644
--- a/clutter/clutter-tap-action.c
+++ b/clutter/clutter-tap-action.c
@@ -91,11 +91,22 @@ gesture_end (ClutterGestureAction *gesture,
emit_tap (CLUTTER_TAP_ACTION (gesture), actor);
}
+static void
+clutter_tap_action_constructed (GObject *object)
+{
+ clutter_gesture_action_set_threshold_trigger_edge (CLUTTER_GESTURE_ACTION (object),
+ CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE);
+}
+
static void
clutter_tap_action_class_init (ClutterTapActionClass *klass)
{
ClutterGestureActionClass *gesture_class =
CLUTTER_GESTURE_ACTION_CLASS (klass);
+ GObjectClass *object_class =
+ G_OBJECT_CLASS (klass);
+
+ object_class->constructed = clutter_tap_action_constructed;
gesture_class->gesture_end = gesture_end;
@@ -122,8 +133,6 @@ clutter_tap_action_class_init (ClutterTapActionClass *klass)
static void
clutter_tap_action_init (ClutterTapAction *self)
{
- _clutter_gesture_action_set_threshold_trigger_edge (CLUTTER_GESTURE_ACTION (self),
- CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE);
}
/**
diff --git a/clutter/clutter-tap-action.h b/clutter/clutter-tap-action.h
index 12f54173c..8bf80a375 100644
--- a/clutter/clutter-tap-action.h
+++ b/clutter/clutter-tap-action.h
@@ -56,7 +56,7 @@ typedef struct _ClutterTapActionClass ClutterTapActionClass;
/**
* ClutterTapAction:
*
- * The ClutterTapAction structure contains
+ * The #ClutterTapAction structure contains
* only private data and should be accessed using the provided API
*
* Since: 1.14
@@ -71,7 +71,7 @@ struct _ClutterTapAction
* ClutterTapActionClass:
* @tap: class handler for the #ClutterTapAction::tap signal
*
- * The ClutterTapActionClass structure contains
+ * The #ClutterTapActionClass structure contains
* only private data.
*/
struct _ClutterTapActionClass
diff --git a/clutter/clutter-test-utils.c b/clutter/clutter-test-utils.c
new file mode 100644
index 000000000..2f2841231
--- /dev/null
+++ b/clutter/clutter-test-utils.c
@@ -0,0 +1,467 @@
+#include "config.h"
+
+#include "clutter-test-utils.h"
+
+#include
+#include
+
+#include "clutter-actor.h"
+#include "clutter-color.h"
+#include "clutter-event.h"
+#include "clutter-keysyms.h"
+#include "clutter-main.h"
+#include "clutter-private.h"
+#include "clutter-stage.h"
+
+typedef struct {
+ ClutterActor *stage;
+
+ guint no_display : 1;
+} ClutterTestEnvironment;
+
+static ClutterTestEnvironment *test_environ = NULL;
+
+/*
+ * clutter_test_init:
+ * @argc: (inout): number of arguments in @argv
+ * @argv: (inout) (array length=argc) (nullable): array of arguments
+ *
+ * Initializes the Clutter test environment.
+ *
+ * Since: 1.18
+ */
+void
+clutter_test_init (int *argc,
+ char ***argv)
+{
+ gboolean no_display = FALSE;
+
+ if (G_UNLIKELY (test_environ != NULL))
+ g_error ("Attempting to initialize the test suite more than once, "
+ "aborting...\n");
+
+#ifdef CLUTTER_WINDOWING_X11
+ /* on X11 backends we need the DISPLAY environment set.
+ *
+ * check_windowing_backend() will pre-initialize the Clutter
+ * backend object.
+ */
+ if (clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
+ {
+ const char *display = g_getenv ("DISPLAY");
+
+ if (display == NULL || *display == '\0')
+ {
+ g_test_message ("No DISPLAY environment variable found, but we require a "
+ "DISPLAY set in order to run the conformance test suite.\n"
+ "Skipping all tests.\n");
+ no_display = TRUE;
+
+ goto out;
+ }
+ }
+#endif
+
+ /* we explicitly disable the synchronisation to the vertical refresh
+ * rate, and run the master clock using a 60 fps timer instead.
+ */
+ _clutter_set_sync_to_vblank (FALSE);
+
+ /* perform the actual initialization */
+ g_assert (clutter_init (NULL, NULL) == CLUTTER_INIT_SUCCESS);
+
+out:
+ g_test_init (argc, argv, NULL);
+ g_test_bug_base ("https://bugzilla.gnome.org/show_bug.cgi?id=%s");
+
+ /* our global state, accessible from each test unit */
+ test_environ = g_new0 (ClutterTestEnvironment, 1);
+ test_environ->no_display = no_display;
+}
+
+/**
+ * clutter_test_get_stage:
+ *
+ * Retrieves the #ClutterStage used for testing.
+ *
+ * Return value: (transfer none): the stage used for testing
+ *
+ * Since: 1.18
+ */
+ClutterActor *
+clutter_test_get_stage (void)
+{
+ g_assert (test_environ != NULL);
+
+ if (test_environ->stage == NULL)
+ {
+ /* create a stage, and ensure that it goes away at the end */
+ test_environ->stage = clutter_stage_new ();
+ clutter_actor_set_name (test_environ->stage, "Test Stage");
+ g_object_add_weak_pointer (G_OBJECT (test_environ->stage),
+ (gpointer *) &test_environ->stage);
+ }
+
+ return test_environ->stage;
+}
+
+typedef struct {
+ gpointer test_func;
+ gpointer test_data;
+ GDestroyNotify test_notify;
+} ClutterTestData;
+
+static void
+clutter_test_func_wrapper (gconstpointer data_)
+{
+ const ClutterTestData *data = data_;
+
+ /* ensure that the previous test state has been cleaned up */
+ g_assert_null (test_environ->stage);
+
+ if (test_environ->no_display)
+ {
+ g_test_skip ("No DISPLAY set");
+ goto out;
+ }
+
+ if (data->test_data != NULL)
+ {
+ GTestDataFunc test_func = data->test_func;
+
+ test_func (data->test_data);
+ }
+ else
+ {
+ GTestFunc test_func = data->test_func;
+
+ test_func ();
+ }
+
+out:
+ if (data->test_notify != NULL)
+ data->test_notify (data->test_data);
+
+ if (test_environ->stage != NULL)
+ {
+ clutter_actor_destroy (test_environ->stage);
+ g_assert_null (test_environ->stage);
+ }
+}
+
+/**
+ * clutter_test_add: (skip)
+ * @test_path:
+ * @test_func:
+ *
+ * Adds a test unit to the Clutter test environment.
+ *
+ * See also: g_test_add()
+ *
+ * Since: 1.18
+ */
+void
+clutter_test_add (const char *test_path,
+ GTestFunc test_func)
+{
+ clutter_test_add_data_full (test_path, (GTestDataFunc) test_func, NULL, NULL);
+}
+
+/**
+ * clutter_test_add_data: (skip)
+ * @test_path:
+ * @test_func:
+ * @test_data:
+ *
+ * Adds a test unit to the Clutter test environment.
+ *
+ * See also: g_test_add_data_func()
+ *
+ * Since: 1.18
+ */
+void
+clutter_test_add_data (const char *test_path,
+ GTestDataFunc test_func,
+ gpointer test_data)
+{
+ clutter_test_add_data_full (test_path, test_func, test_data, NULL);
+}
+
+/**
+ * clutter_test_add_data_full:
+ * @test_path:
+ * @test_func: (scope notified)
+ * @test_data:
+ * @test_notify:
+ *
+ * Adds a test unit to the Clutter test environment.
+ *
+ * See also: g_test_add_data_func_full()
+ *
+ * Since: 1.18
+ */
+void
+clutter_test_add_data_full (const char *test_path,
+ GTestDataFunc test_func,
+ gpointer test_data,
+ GDestroyNotify test_notify)
+{
+ ClutterTestData *data;
+
+ g_return_if_fail (test_path != NULL);
+ g_return_if_fail (test_func != NULL);
+
+ g_assert (test_environ != NULL);
+
+ data = g_new (ClutterTestData, 1);
+ data->test_func = test_func;
+ data->test_data = test_data;
+ data->test_notify = test_notify;
+
+ g_test_add_data_func_full (test_path, data,
+ clutter_test_func_wrapper,
+ g_free);
+}
+
+/**
+ * clutter_test_run:
+ *
+ * Runs the test suite using the units added by calling
+ * clutter_test_add().
+ *
+ * The typical test suite is composed of a list of functions
+ * called by clutter_test_run(), for instance:
+ *
+ * |[
+ * static void unit_foo (void) { ... }
+ *
+ * static void unit_bar (void) { ... }
+ *
+ * static void unit_baz (void) { ... }
+ *
+ * int
+ * main (int argc, char *argv[])
+ * {
+ * clutter_test_init (&argc, &argv);
+ *
+ * clutter_test_add ("/unit/foo", unit_foo);
+ * clutter_test_add ("/unit/bar", unit_bar);
+ * clutter_test_add ("/unit/baz", unit_baz);
+ *
+ * return clutter_test_run ();
+ * }
+ * ]|
+ *
+ * Return value: the exit code for the test suite
+ *
+ * Since: 1.18
+ */
+int
+clutter_test_run (void)
+{
+ int res;
+
+ g_assert (test_environ != NULL);
+
+ res = g_test_run ();
+
+ g_free (test_environ);
+
+ return res;
+}
+
+typedef struct {
+ ClutterActor *stage;
+
+ ClutterPoint point;
+
+ gpointer result;
+
+ guint check_actor : 1;
+ guint check_color : 1;
+
+ guint was_painted : 1;
+} ValidateData;
+
+static gboolean
+validate_stage (gpointer data_)
+{
+ ValidateData *data = data_;
+
+ if (data->check_actor)
+ {
+ data->result =
+ clutter_stage_get_actor_at_pos (CLUTTER_STAGE (data->stage),
+ CLUTTER_PICK_ALL,
+ data->point.x,
+ data->point.y);
+ }
+
+ if (data->check_color)
+ {
+ data->result =
+ clutter_stage_read_pixels (CLUTTER_STAGE (data->stage),
+ data->point.x,
+ data->point.y,
+ 1, 1);
+ }
+
+ if (!g_test_verbose ())
+ {
+ clutter_actor_hide (data->stage);
+ data->was_painted = TRUE;
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
+on_key_press_event (ClutterActor *stage,
+ ClutterEvent *event,
+ gpointer data_)
+{
+ ValidateData *data = data_;
+
+ if (data->stage == stage &&
+ clutter_event_get_key_symbol (event) == CLUTTER_KEY_Escape)
+ {
+ clutter_actor_hide (stage);
+
+ data->was_painted = TRUE;
+ }
+
+ return CLUTTER_EVENT_PROPAGATE;
+}
+
+/**
+ * clutter_test_check_actor_at_point:
+ * @stage: a #ClutterStage
+ * @point: coordinates to check
+ * @actor: the expected actor at the given coordinates
+ * @result: (out) (nullable): actor at the coordinates
+ *
+ * Checks the given coordinates of the @stage and compares the
+ * actor found there with the given @actor.
+ *
+ * Returns: %TRUE if the actor at the given coordinates matches
+ *
+ * Since: 1.18
+ */
+gboolean
+clutter_test_check_actor_at_point (ClutterActor *stage,
+ const ClutterPoint *point,
+ ClutterActor *actor,
+ ClutterActor **result)
+{
+ ValidateData *data;
+ guint press_id = 0;
+
+ g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
+ g_return_val_if_fail (point != NULL, FALSE);
+ g_return_val_if_fail (CLUTTER_IS_ACTOR (stage), FALSE);
+ g_return_val_if_fail (result != NULL, FALSE);
+
+ data = g_new0 (ValidateData, 1);
+ data->stage = stage;
+ data->point = *point;
+ data->check_actor = TRUE;
+
+ if (g_test_verbose ())
+ {
+ g_printerr ("Press ESC to close the stage and resume the test\n");
+ press_id = g_signal_connect (stage, "key-press-event",
+ G_CALLBACK (on_key_press_event),
+ data);
+ }
+
+ clutter_actor_show (stage);
+
+ clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
+ validate_stage,
+ data,
+ NULL);
+
+ while (!data->was_painted)
+ g_main_context_iteration (NULL, TRUE);
+
+ *result = data->result;
+
+ if (press_id != 0)
+ g_signal_handler_disconnect (stage, press_id);
+
+ g_free (data);
+
+ return *result == actor;
+}
+
+/**
+ * clutter_test_check_color_at_point:
+ * @stage: a #ClutterStage
+ * @point: coordinates to check
+ * @color: expected color
+ * @result: (out caller-allocates): color at the given coordinates
+ *
+ * Checks the color at the given coordinates on @stage, and matches
+ * it with the red, green, and blue channels of @color. The alpha
+ * component of @color and @result is ignored.
+ *
+ * Returns: %TRUE if the colors match
+ *
+ * Since: 1.18
+ */
+gboolean
+clutter_test_check_color_at_point (ClutterActor *stage,
+ const ClutterPoint *point,
+ const ClutterColor *color,
+ ClutterColor *result)
+{
+ ValidateData *data;
+ gboolean retval;
+ guint8 *buffer;
+ guint press_id = 0;
+
+ g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
+ g_return_val_if_fail (point != NULL, FALSE);
+ g_return_val_if_fail (color != NULL, FALSE);
+ g_return_val_if_fail (result != NULL, FALSE);
+
+ data = g_new0 (ValidateData, 1);
+ data->stage = stage;
+ data->point = *point;
+ data->check_color = TRUE;
+
+ if (g_test_verbose ())
+ {
+ g_printerr ("Press ESC to close the stage and resume the test\n");
+ press_id = g_signal_connect (stage, "key-press-event",
+ G_CALLBACK (on_key_press_event),
+ data);
+ }
+
+ clutter_actor_show (stage);
+
+ clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
+ validate_stage,
+ data,
+ NULL);
+
+ while (!data->was_painted)
+ g_main_context_iteration (NULL, TRUE);
+
+ if (press_id != 0)
+ g_signal_handler_disconnect (stage, press_id);
+
+ buffer = data->result;
+
+ clutter_color_init (result, buffer[0], buffer[1], buffer[2], 255);
+
+ /* we only check the color channels, so we can't use clutter_color_equal() */
+ retval = buffer[0] == color->red &&
+ buffer[1] == color->green &&
+ buffer[2] == color->blue;
+
+ g_free (data->result);
+ g_free (data);
+
+ return retval;
+}
diff --git a/clutter/clutter-test-utils.h b/clutter/clutter-test-utils.h
new file mode 100644
index 000000000..81dad9737
--- /dev/null
+++ b/clutter/clutter-test-utils.h
@@ -0,0 +1,164 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2013 Emmanuele Bassi
+ *
+ * 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 .
+ */
+
+#ifndef __CLUTTER_TEST_UTILS_H__
+#define __CLUTTER_TEST_UTILS_H__
+
+#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only can be included directly."
+#endif
+
+#include
+#include
+#include
+
+G_BEGIN_DECLS
+
+/**
+ * CLUTTER_TEST_UNIT:
+ * @path: the GTest path for the test function
+ * @func: the GTestFunc function
+ *
+ * Adds @func at the given @path in the test suite.
+ *
+ * Since: 1.18
+ */
+#define CLUTTER_TEST_UNIT(path,func) \
+ clutter_test_add (path, func);
+
+/**
+ * CLUTTER_TEST_SUITE:
+ * @units: a list of %CLUTTER_TEST_UNIT definitions
+ *
+ * Defines the entry point and initializes a Clutter test unit, e.g.:
+ *
+ * |[
+ * CLUTTER_TEST_SUITE (
+ * CLUTTER_TEST_UNIT ("/foobarize", foobarize)
+ * CLUTTER_TEST_UNIT ("/bar-enabled", bar_enabled)
+ * )
+ * ]|
+ *
+ * Expands to:
+ *
+ * |[
+ * int
+ * main (int argc,
+ * char *argv[])
+ * {
+ * clutter_test_init (&argc, &argv);
+ *
+ * clutter_test_add ("/foobarize", foobarize);
+ * clutter_test_add ("/bar-enabled", bar_enabled);
+ *
+ * return clutter_test_run ();
+ * }
+ * ]|
+ *
+ * Since: 1.18
+ */
+#define CLUTTER_TEST_SUITE(units) \
+int \
+main (int argc, char *argv[]) \
+{ \
+ clutter_test_init (&argc, &argv); \
+\
+ { \
+ units \
+ } \
+\
+ return clutter_test_run (); \
+}
+
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_test_init (int *argc,
+ char ***argv);
+CLUTTER_AVAILABLE_IN_1_18
+int clutter_test_run (void);
+
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_test_add (const char *test_path,
+ GTestFunc test_func);
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_test_add_data (const char *test_path,
+ GTestDataFunc test_func,
+ gpointer test_data);
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_test_add_data_full (const char *test_path,
+ GTestDataFunc test_func,
+ gpointer test_data,
+ GDestroyNotify test_notify);
+
+CLUTTER_AVAILABLE_IN_1_18
+ClutterActor * clutter_test_get_stage (void);
+
+#define clutter_test_assert_actor_at_point(stage,point,actor) \
+G_STMT_START { \
+ const ClutterPoint *__p = (point); \
+ ClutterActor *__actor = (actor); \
+ ClutterActor *__stage = (stage); \
+ ClutterActor *__res; \
+ if (clutter_test_check_actor_at_point (__stage, __p, actor, &__res)) ; else { \
+ const char *__str1 = clutter_actor_get_name (__actor) != NULL \
+ ? clutter_actor_get_name (__actor) \
+ : G_OBJECT_TYPE_NAME (__actor); \
+ const char *__str2 = clutter_actor_get_name (__res) != NULL \
+ ? clutter_actor_get_name (__res) \
+ : G_OBJECT_TYPE_NAME (__res); \
+ char *__msg = g_strdup_printf ("assertion failed (actor %s at %.2f,%.2f): found actor %s", \
+ __str1, __p->x, __p->y, __str2); \
+ g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, __msg); \
+ g_free (__msg); \
+ } \
+} G_STMT_END
+
+#define clutter_test_assert_color_at_point(stage,point,color) \
+G_STMT_START { \
+ const ClutterPoint *__p = (point); \
+ const ClutterColor *__c = (color); \
+ ClutterActor *__stage = (stage); \
+ ClutterColor __res; \
+ if (clutter_test_check_color_at_point (__stage, __p, __c, &__res)) ; else { \
+ char *__str1 = clutter_color_to_string (__c); \
+ char *__str2 = clutter_color_to_string (&__res); \
+ char *__msg = g_strdup_printf ("assertion failed (color %s at %.2f,%.2f): found color %s", \
+ __str1, __p->x, __p->y, __str2); \
+ g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, __msg); \
+ g_free (__msg); \
+ g_free (__str1); \
+ g_free (__str2); \
+ } \
+} G_STMT_END
+
+CLUTTER_AVAILABLE_IN_1_18
+gboolean clutter_test_check_actor_at_point (ClutterActor *stage,
+ const ClutterPoint *point,
+ ClutterActor *actor,
+ ClutterActor **result);
+CLUTTER_AVAILABLE_IN_1_18
+gboolean clutter_test_check_color_at_point (ClutterActor *stage,
+ const ClutterPoint *point,
+ const ClutterColor *color,
+ ClutterColor *result);
+
+G_END_DECLS
+
+#endif /* __CLUTTER_TEST_UTILS_H__ */
diff --git a/clutter/clutter-text-buffer.c b/clutter/clutter-text-buffer.c
index 1ee9f4df8..63cab2206 100644
--- a/clutter/clutter-text-buffer.c
+++ b/clutter/clutter-text-buffer.c
@@ -81,7 +81,7 @@ struct _ClutterTextBufferPrivate
guint normal_text_chars;
};
-G_DEFINE_TYPE (ClutterTextBuffer, clutter_text_buffer, G_TYPE_OBJECT);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterTextBuffer, clutter_text_buffer, G_TYPE_OBJECT)
/* --------------------------------------------------------------------------------
* DEFAULT IMPLEMENTATIONS OF TEXT BUFFER
@@ -246,16 +246,14 @@ clutter_text_buffer_real_deleted_text (ClutterTextBuffer *buffer,
*/
static void
-clutter_text_buffer_init (ClutterTextBuffer *buffer)
+clutter_text_buffer_init (ClutterTextBuffer *self)
{
- ClutterTextBufferPrivate *pv;
+ self->priv = clutter_text_buffer_get_instance_private (self);
- pv = buffer->priv = G_TYPE_INSTANCE_GET_PRIVATE (buffer, CLUTTER_TYPE_TEXT_BUFFER, ClutterTextBufferPrivate);
-
- pv->normal_text = NULL;
- pv->normal_text_chars = 0;
- pv->normal_text_bytes = 0;
- pv->normal_text_size = 0;
+ self->priv->normal_text = NULL;
+ self->priv->normal_text_chars = 0;
+ self->priv->normal_text_bytes = 0;
+ self->priv->normal_text_size = 0;
}
static void
@@ -337,8 +335,6 @@ clutter_text_buffer_class_init (ClutterTextBufferClass *klass)
klass->inserted_text = clutter_text_buffer_real_inserted_text;
klass->deleted_text = clutter_text_buffer_real_deleted_text;
- g_type_class_add_private (gobject_class, sizeof (ClutterTextBufferPrivate));
-
/**
* ClutterTextBuffer:text:
*
diff --git a/clutter/clutter-text-buffer.h b/clutter/clutter-text-buffer.h
index 9b6f8ceee..a524d93b2 100644
--- a/clutter/clutter-text-buffer.h
+++ b/clutter/clutter-text-buffer.h
@@ -53,7 +53,7 @@ typedef struct _ClutterTextBufferPrivate ClutterTextBufferPrivate;
/**
* ClutterTextBuffer:
*
- * The ClutterTextBuffer structure contains private
+ * The #ClutterTextBuffer structure contains private
* data and it should only be accessed using the provided API.
*
* Since: 1.10
@@ -75,7 +75,7 @@ struct _ClutterTextBuffer
* @insert_text: virtual function
* @delete_text: virtual function
*
- * The ClutterTextBufferClass structure contains
+ * The #ClutterTextBufferClass structure contains
* only private data.
*
* Since: 1.10
diff --git a/clutter/clutter-text.c b/clutter/clutter-text.c
index e0901cd31..dad50edbb 100644
--- a/clutter/clutter-text.c
+++ b/clutter/clutter-text.c
@@ -49,6 +49,7 @@
#include "clutter-actor-private.h"
#include "clutter-animatable.h"
+#include "clutter-backend-private.h"
#include "clutter-binding-pool.h"
#include "clutter-color.h"
#include "clutter-debug.h"
@@ -82,29 +83,8 @@
*/
#define N_CACHED_LAYOUTS 6
-#define CLUTTER_TEXT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_TEXT, ClutterTextPrivate))
-
typedef struct _LayoutCache LayoutCache;
-static const ClutterColor default_cursor_color = { 0, 0, 0, 255 };
-static const ClutterColor default_selection_color = { 0, 0, 0, 255 };
-static const ClutterColor default_text_color = { 0, 0, 0, 255 };
-static const ClutterColor default_selected_text_color = { 0, 0, 0, 255 };
-
-static ClutterAnimatableIface *parent_animatable_iface = NULL;
-static ClutterScriptableIface *parent_scriptable_iface = NULL;
-
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-static void clutter_animatable_iface_init (ClutterAnimatableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (ClutterText,
- clutter_text,
- CLUTTER_TYPE_ACTOR,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init)
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_ANIMATABLE,
- clutter_animatable_iface_init));
-
struct _LayoutCache
{
/* Cached layout. Pango internally caches the computed extents
@@ -221,6 +201,7 @@ struct _ClutterTextPrivate
guint paint_volume_valid : 1;
guint show_password_hint : 1;
guint password_hint_visible : 1;
+ guint resolved_direction : 4;
};
enum
@@ -281,6 +262,26 @@ static void buffer_connect_signals (ClutterText *self);
static void buffer_disconnect_signals (ClutterText *self);
static ClutterTextBuffer *get_buffer (ClutterText *self);
+static const ClutterColor default_cursor_color = { 0, 0, 0, 255 };
+static const ClutterColor default_selection_color = { 0, 0, 0, 255 };
+static const ClutterColor default_text_color = { 0, 0, 0, 255 };
+static const ClutterColor default_selected_text_color = { 0, 0, 0, 255 };
+
+static ClutterAnimatableIface *parent_animatable_iface = NULL;
+static ClutterScriptableIface *parent_scriptable_iface = NULL;
+
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+static void clutter_animatable_iface_init (ClutterAnimatableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterText,
+ clutter_text,
+ CLUTTER_TYPE_ACTOR,
+ G_ADD_PRIVATE (ClutterText)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_ANIMATABLE,
+ clutter_animatable_iface_init));
+
static inline void
clutter_text_dirty_paint_volume (ClutterText *text)
{
@@ -345,6 +346,18 @@ clutter_text_clear_selection (ClutterText *self)
}
}
+static gboolean
+clutter_text_is_empty (ClutterText *self)
+{
+ if (self->priv->buffer == NULL)
+ return TRUE;
+
+ if (clutter_text_buffer_get_length (self->priv->buffer) == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
static gchar *
clutter_text_get_display_text (ClutterText *self)
{
@@ -352,6 +365,13 @@ clutter_text_get_display_text (ClutterText *self)
ClutterTextBuffer *buffer;
const gchar *text;
+ /* short-circuit the case where the buffer is unset or it's empty,
+ * to avoid creating a pointless TextBuffer and emitting
+ * notifications with it
+ */
+ if (clutter_text_is_empty (self))
+ return g_strdup ("");
+
buffer = get_buffer (self);
text = clutter_text_buffer_get_text (buffer);
@@ -510,7 +530,38 @@ clutter_text_create_layout_no_cache (ClutterText *text,
pango_attr_list_unref (tmp_attrs);
}
else
- pango_layout_set_text (layout, contents, contents_len);
+ {
+ PangoDirection pango_dir;
+
+ if (priv->password_char != 0)
+ pango_dir = PANGO_DIRECTION_NEUTRAL;
+ else
+ pango_dir = pango_find_base_dir (contents, contents_len);
+
+ if (pango_dir == PANGO_DIRECTION_NEUTRAL)
+ {
+ ClutterBackend *backend = clutter_get_default_backend ();
+ ClutterTextDirection text_dir;
+
+ if (clutter_actor_has_key_focus (CLUTTER_ACTOR (text)))
+ pango_dir = _clutter_backend_get_keymap_direction (backend);
+ else
+ {
+ text_dir = clutter_actor_get_text_direction (CLUTTER_ACTOR (text));
+
+ if (text_dir == CLUTTER_TEXT_DIRECTION_RTL)
+ pango_dir = PANGO_DIRECTION_RTL;
+ else
+ pango_dir = PANGO_DIRECTION_LTR;
+ }
+ }
+
+ pango_context_set_base_dir (clutter_actor_get_pango_context (CLUTTER_ACTOR (text)), pango_dir);
+
+ priv->resolved_direction = pango_dir;
+
+ pango_layout_set_text (layout, contents, contents_len);
+ }
/* This will merge the markup attributes and the attributes
* property if needed */
@@ -568,10 +619,13 @@ clutter_text_dirty_cache (ClutterText *text)
*/
static inline void
clutter_text_set_font_description_internal (ClutterText *self,
- PangoFontDescription *desc)
+ PangoFontDescription *desc,
+ gboolean is_default_font)
{
ClutterTextPrivate *priv = self->priv;
+ priv->is_default_font = is_default_font;
+
if (priv->font_desc == desc ||
pango_font_description_equal (priv->font_desc, desc))
return;
@@ -619,7 +673,7 @@ clutter_text_settings_changed_cb (ClutterText *text)
font_name);
font_desc = pango_font_description_from_string (font_name);
- clutter_text_set_font_description_internal (text, font_desc);
+ clutter_text_set_font_description_internal (text, font_desc, TRUE);
pango_font_description_free (font_desc);
g_free (font_name);
@@ -1611,6 +1665,11 @@ selection_paint (ClutterText *self)
PangoLayout *layout = clutter_text_get_layout (self);
CoglPath *selection_path = cogl_path_new ();
CoglColor cogl_color = { 0, };
+ CoglFramebuffer *fb;
+
+ fb = _clutter_actor_get_active_framebuffer (actor);
+ if (G_UNLIKELY (fb == NULL))
+ return;
/* Paint selection background */
if (priv->selection_color_set)
@@ -1632,8 +1691,7 @@ selection_paint (ClutterText *self)
cogl_path_fill (selection_path);
/* Paint selected text */
- cogl_framebuffer_push_path_clip (cogl_get_draw_framebuffer (),
- selection_path);
+ cogl_framebuffer_push_path_clip (fb, selection_path);
cogl_object_unref (selection_path);
if (priv->selected_text_color_set)
@@ -1649,7 +1707,7 @@ selection_paint (ClutterText *self)
cogl_pango_render_layout (layout, priv->text_x, 0, &cogl_color, 0);
- cogl_clip_pop ();
+ cogl_framebuffer_pop_clip (fb);
}
}
}
@@ -2184,6 +2242,7 @@ clutter_text_paint (ClutterActor *self)
{
ClutterText *text = CLUTTER_TEXT (self);
ClutterTextPrivate *priv = text->priv;
+ CoglFramebuffer *fb;
PangoLayout *layout;
ClutterActorBox alloc = { 0, };
CoglColor color = { 0, };
@@ -2193,6 +2252,16 @@ clutter_text_paint (ClutterActor *self)
gboolean clip_set = FALSE;
gboolean bg_color_set = FALSE;
guint n_chars;
+ float alloc_width;
+ float alloc_height;
+
+ /* FIXME: this should not be needed, but apparently the text-cache
+ * test unit manages to get in a situation where the active frame
+ * buffer is NULL
+ */
+ fb = _clutter_actor_get_active_framebuffer (self);
+ if (fb == NULL)
+ fb = cogl_get_draw_framebuffer ();
/* Note that if anything in this paint method changes it needs to be
reflected in the get_paint_volume implementation which is tightly
@@ -2200,6 +2269,8 @@ clutter_text_paint (ClutterActor *self)
n_chars = clutter_text_buffer_get_length (get_buffer (text));
clutter_actor_get_allocation_box (self, &alloc);
+ alloc_width = alloc.x2 - alloc.x1;
+ alloc_height = alloc.y2 - alloc.y1;
g_object_get (self, "background-color-set", &bg_color_set, NULL);
if (bg_color_set)
@@ -2215,7 +2286,7 @@ clutter_text_paint (ClutterActor *self)
bg_color.green,
bg_color.blue,
bg_color.alpha);
- cogl_rectangle (0, 0, alloc.x2 - alloc.x1, alloc.y2 - alloc.y1);
+ cogl_rectangle (0, 0, alloc_width, alloc_height);
}
/* don't bother painting an empty text actor, unless it's
@@ -2235,9 +2306,7 @@ clutter_text_paint (ClutterActor *self)
*/
if (priv->wrap && priv->ellipsize)
{
- layout = clutter_text_create_layout (text,
- alloc.x2 - alloc.x1,
- alloc.y2 - alloc.y1);
+ layout = clutter_text_create_layout (text, alloc_width, alloc_height);
}
else
{
@@ -2254,9 +2323,7 @@ clutter_text_paint (ClutterActor *self)
* in the assigned width, then we clip the actor if the
* logical rectangle overflows the allocation.
*/
- layout = clutter_text_create_layout (text,
- alloc.x2 - alloc.x1,
- -1);
+ layout = clutter_text_create_layout (text, alloc_width, -1);
}
}
@@ -2267,29 +2334,29 @@ clutter_text_paint (ClutterActor *self)
{
PangoRectangle logical_rect = { 0, };
gint actor_width, text_width;
+ gboolean rtl;
pango_layout_get_extents (layout, NULL, &logical_rect);
- cogl_clip_push_rectangle (0, 0,
- (alloc.x2 - alloc.x1),
- (alloc.y2 - alloc.y1));
+ cogl_framebuffer_push_rectangle_clip (fb, 0, 0, alloc_width, alloc_height);
clip_set = TRUE;
- actor_width = (alloc.x2 - alloc.x1)
- - 2 * TEXT_PADDING;
+ actor_width = alloc_width - 2 * TEXT_PADDING;
text_width = logical_rect.width / PANGO_SCALE;
+ rtl = priv->resolved_direction == PANGO_DIRECTION_RTL;
+
if (actor_width < text_width)
{
gint cursor_x = clutter_rect_get_x (&priv->cursor_rect);
if (priv->position == -1)
{
- text_x = actor_width - text_width;
+ text_x = rtl ? TEXT_PADDING : actor_width - text_width;
}
else if (priv->position == 0)
{
- text_x = TEXT_PADDING;
+ text_x = rtl ? actor_width - text_width : TEXT_PADDING;
}
else
{
@@ -2305,7 +2372,7 @@ clutter_text_paint (ClutterActor *self)
}
else
{
- text_x = TEXT_PADDING;
+ text_x = rtl ? actor_width - text_width : TEXT_PADDING;
}
}
else if (!priv->editable && !(priv->wrap && priv->ellipsize))
@@ -2315,12 +2382,10 @@ clutter_text_paint (ClutterActor *self)
pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
/* don't clip if the layout managed to fit inside our allocation */
- if (logical_rect.width > (alloc.x2 - alloc.x1) ||
- logical_rect.height > (alloc.y2 - alloc.y1))
+ if (logical_rect.width > alloc_width ||
+ logical_rect.height > alloc_height)
{
- cogl_clip_push_rectangle (0, 0,
- alloc.x2 - alloc.x1,
- alloc.y2 - alloc.y1);
+ cogl_framebuffer_push_rectangle_clip (fb, 0, 0, alloc_width, alloc_height);
clip_set = TRUE;
}
@@ -2355,7 +2420,7 @@ clutter_text_paint (ClutterActor *self)
selection_paint (text);
if (clip_set)
- cogl_clip_pop ();
+ cogl_framebuffer_pop_clip (fb);
}
static void
@@ -3322,8 +3387,6 @@ clutter_text_class_init (ClutterTextClass *klass)
ClutterBindingPool *binding_pool;
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterTextPrivate));
-
gobject_class->set_property = clutter_text_set_property;
gobject_class->get_property = clutter_text_get_property;
gobject_class->dispose = clutter_text_dispose;
@@ -3646,10 +3709,10 @@ clutter_text_class_init (ClutterTextClass *klass)
* For more informations about the Pango markup format, see
* pango_layout_set_markup() in the Pango documentation.
*
- * It is not possible to round-trip this property between
+ * It is not possible to round-trip this property between
* %TRUE and %FALSE. Once a string with markup has been set on
* a #ClutterText actor with :use-markup set to %TRUE, the markup
- * is stripped from the string.
+ * is stripped from the string.
*
* Since: 1.0
*/
@@ -4057,7 +4120,7 @@ clutter_text_init (ClutterText *self)
gchar *font_name;
int i, password_hint_time;
- self->priv = priv = CLUTTER_TEXT_GET_PRIVATE (self);
+ self->priv = priv = clutter_text_get_instance_private (self);
priv->alignment = PANGO_ALIGN_LEFT;
priv->wrap = FALSE;
@@ -4227,7 +4290,6 @@ buffer_inserted_text (ClutterTextBuffer *buffer,
ClutterTextPrivate *priv;
gint new_position;
gint new_selection_bound;
- gsize n_bytes;
priv = self->priv;
if (priv->position >= 0 || priv->selection_bound >= 0)
@@ -4244,10 +4306,6 @@ buffer_inserted_text (ClutterTextBuffer *buffer,
clutter_text_set_positions (self, new_position, new_selection_bound);
}
- n_bytes = g_utf8_offset_to_pointer (chars, n_chars) - chars;
- g_signal_emit (self, text_signals[INSERT_TEXT], 0, chars,
- n_bytes, &position);
-
/* TODO: What are we supposed to with the out value of position? */
}
@@ -4275,8 +4333,6 @@ buffer_deleted_text (ClutterTextBuffer *buffer,
if (priv->position != new_position || priv->selection_bound != new_selection_bound)
clutter_text_set_positions (self, new_position, new_selection_bound);
}
-
- g_signal_emit (self, text_signals[DELETE_TEXT], 0, position, position + n_chars);
}
static void
@@ -4628,7 +4684,8 @@ clutter_text_set_cursor_visible (ClutterText *self,
{
priv->cursor_visible = cursor_visible;
- clutter_text_queue_redraw (CLUTTER_ACTOR (self));
+ clutter_text_dirty_cache (self);
+ clutter_actor_queue_relayout (CLUTTER_ACTOR (self));
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CURSOR_VISIBLE]);
}
@@ -4945,7 +5002,8 @@ clutter_text_set_font_description (ClutterText *self,
{
g_return_if_fail (CLUTTER_IS_TEXT (self));
- clutter_text_set_font_description_internal (self, font_desc);
+ clutter_text_set_font_description_internal (self, font_desc,
+ font_desc == NULL);
}
/**
@@ -4999,8 +5057,13 @@ clutter_text_get_font_name (ClutterText *text)
* like:
*
* |[
- * clutter_text_set_font_name (text, "Sans 10pt");
+ * // Set the font to the system's Sans, 10 points
+ * clutter_text_set_font_name (text, "Sans 10");
+ *
+ * // Set the font to the system's Serif, 16 pixels
* clutter_text_set_font_name (text, "Serif 16px");
+ *
+ * // Set the font to Helvetica, 10 points
* clutter_text_set_font_name (text, "Helvetica 10");
* ]|
*
@@ -5052,8 +5115,7 @@ clutter_text_set_font_name (ClutterText *self,
}
/* this will set the font_name field as well */
- clutter_text_set_font_description_internal (self, desc);
- priv->is_default_font = is_default_font;
+ clutter_text_set_font_description_internal (self, desc, is_default_font);
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_FONT_NAME]);
@@ -5865,6 +5927,33 @@ clutter_text_get_max_length (ClutterText *self)
return clutter_text_buffer_get_max_length (get_buffer (self));
}
+static void
+clutter_text_real_insert_text (ClutterText *self,
+ guint start_pos,
+ const gchar *chars,
+ guint n_chars)
+{
+ gsize n_bytes;
+
+ n_bytes = g_utf8_offset_to_pointer (chars, n_chars) - chars;
+
+ /*
+ * insert-text is emitted here instead of as part of a
+ * buffer_inserted_text() callback because that should be emitted
+ * before the buffer changes, while ClutterTextBuffer::deleted-text
+ * is emitter after. See BG#722220 for more info.
+ */
+ g_signal_emit (self, text_signals[INSERT_TEXT], 0, chars,
+ n_bytes, &start_pos);
+
+ /*
+ * The actual insertion from the buffer. This will end firing the
+ * following signal handlers: buffer_inserted_text(),
+ * buffer_notify_text(), buffer_notify_max_length()
+ */
+ clutter_text_buffer_insert_text (get_buffer (self), start_pos, chars, n_chars);
+}
+
/**
* clutter_text_insert_unichar:
* @self: a #ClutterText
@@ -5887,11 +5976,12 @@ clutter_text_insert_unichar (ClutterText *self,
new = g_string_new ("");
g_string_append_unichar (new, wc);
- clutter_text_buffer_insert_text (get_buffer (self), priv->position, new->str, 1);
+ clutter_text_real_insert_text (self, priv->position, new->str, 1);
g_string_free (new, TRUE);
}
+
/**
* clutter_text_insert_text:
* @self: a #ClutterText
@@ -5915,10 +6005,32 @@ clutter_text_insert_text (ClutterText *self,
g_return_if_fail (CLUTTER_IS_TEXT (self));
g_return_if_fail (text != NULL);
- clutter_text_buffer_insert_text (get_buffer (self), position, text,
- g_utf8_strlen (text, -1));
+ clutter_text_real_insert_text (self, position, text, g_utf8_strlen (text, -1));
}
+static
+void clutter_text_real_delete_text (ClutterText *self,
+ gssize start_pos,
+ gssize end_pos)
+{
+ /*
+ * delete-text is emitted here instead of as part of a
+ * buffer_deleted_text() callback because that should be emitted
+ * before the buffer changes, while ClutterTextBuffer::deleted-text
+ * is emitter after. See BG#722220 for more info.
+ */
+ g_signal_emit (self, text_signals[DELETE_TEXT], 0, start_pos, end_pos);
+
+ /*
+ * The actual deletion from the buffer. This will end firing the
+ * following signal handlers: buffer_deleted_text(),
+ * buffer_notify_text(), buffer_notify_max_length()
+ */
+ clutter_text_buffer_delete_text (get_buffer (self), start_pos, end_pos - start_pos);
+}
+
+
+
/**
* clutter_text_delete_text:
* @self: a #ClutterText
@@ -5940,7 +6052,7 @@ clutter_text_delete_text (ClutterText *self,
{
g_return_if_fail (CLUTTER_IS_TEXT (self));
- clutter_text_buffer_delete_text (get_buffer (self), start_pos, end_pos - start_pos);
+ clutter_text_real_delete_text (self, start_pos, end_pos);
}
/**
@@ -5966,7 +6078,7 @@ clutter_text_delete_chars (ClutterText *self,
priv = self->priv;
- clutter_text_buffer_delete_text (get_buffer (self), priv->position, n_chars);
+ clutter_text_real_delete_text (self, priv->position, priv->position + n_chars);
if (priv->position > 0)
clutter_text_set_cursor_position (self, priv->position - n_chars);
diff --git a/clutter/clutter-text.h b/clutter/clutter-text.h
index fd6e193de..95e6a661f 100644
--- a/clutter/clutter-text.h
+++ b/clutter/clutter-text.h
@@ -96,12 +96,16 @@ struct _ClutterTextClass
void (* _clutter_reserved7) (void);
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_text_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterActor * clutter_text_new (void);
+CLUTTER_AVAILABLE_IN_1_0
ClutterActor * clutter_text_new_full (const gchar *font_name,
const gchar *text,
const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
ClutterActor * clutter_text_new_with_text (const gchar *font_name,
const gchar *text);
CLUTTER_AVAILABLE_IN_1_10
@@ -111,126 +115,189 @@ ClutterTextBuffer * clutter_text_get_buffer (ClutterText *s
CLUTTER_AVAILABLE_IN_1_10
void clutter_text_set_buffer (ClutterText *self,
ClutterTextBuffer *buffer);
+CLUTTER_AVAILABLE_IN_1_0
const gchar * clutter_text_get_text (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_text (ClutterText *self,
const gchar *text);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_markup (ClutterText *self,
const gchar *markup);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_color (ClutterText *self,
const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_get_color (ClutterText *self,
ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_font_name (ClutterText *self,
const gchar *font_name);
+CLUTTER_AVAILABLE_IN_1_0
const gchar * clutter_text_get_font_name (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_text_set_font_description (ClutterText *self,
PangoFontDescription *font_desc);
+CLUTTER_AVAILABLE_IN_1_2
PangoFontDescription *clutter_text_get_font_description (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_ellipsize (ClutterText *self,
PangoEllipsizeMode mode);
+CLUTTER_AVAILABLE_IN_1_0
PangoEllipsizeMode clutter_text_get_ellipsize (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_line_wrap (ClutterText *self,
gboolean line_wrap);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_line_wrap (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_line_wrap_mode (ClutterText *self,
PangoWrapMode wrap_mode);
+CLUTTER_AVAILABLE_IN_1_0
PangoWrapMode clutter_text_get_line_wrap_mode (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
PangoLayout * clutter_text_get_layout (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_attributes (ClutterText *self,
PangoAttrList *attrs);
+CLUTTER_AVAILABLE_IN_1_0
PangoAttrList * clutter_text_get_attributes (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_use_markup (ClutterText *self,
gboolean setting);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_use_markup (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_line_alignment (ClutterText *self,
PangoAlignment alignment);
+CLUTTER_AVAILABLE_IN_1_0
PangoAlignment clutter_text_get_line_alignment (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_justify (ClutterText *self,
gboolean justify);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_justify (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_insert_unichar (ClutterText *self,
gunichar wc);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_delete_chars (ClutterText *self,
guint n_chars);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_insert_text (ClutterText *self,
const gchar *text,
gssize position);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_delete_text (ClutterText *self,
gssize start_pos,
gssize end_pos);
+CLUTTER_AVAILABLE_IN_1_0
gchar * clutter_text_get_chars (ClutterText *self,
gssize start_pos,
gssize end_pos);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_editable (ClutterText *self,
gboolean editable);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_editable (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_activatable (ClutterText *self,
gboolean activatable);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_activatable (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
gint clutter_text_get_cursor_position (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_cursor_position (ClutterText *self,
gint position);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_cursor_visible (ClutterText *self,
gboolean cursor_visible);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_cursor_visible (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_cursor_color (ClutterText *self,
const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_get_cursor_color (ClutterText *self,
ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_cursor_size (ClutterText *self,
gint size);
+CLUTTER_AVAILABLE_IN_1_0
guint clutter_text_get_cursor_size (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_16
void clutter_text_get_cursor_rect (ClutterText *self,
ClutterRect *rect);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_selectable (ClutterText *self,
gboolean selectable);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_selectable (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_selection_bound (ClutterText *self,
gint selection_bound);
+CLUTTER_AVAILABLE_IN_1_0
gint clutter_text_get_selection_bound (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_selection (ClutterText *self,
gssize start_pos,
gssize end_pos);
+CLUTTER_AVAILABLE_IN_1_0
gchar * clutter_text_get_selection (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_selection_color (ClutterText *self,
const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_get_selection_color (ClutterText *self,
ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_delete_selection (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_password_char (ClutterText *self,
gunichar wc);
+CLUTTER_AVAILABLE_IN_1_0
gunichar clutter_text_get_password_char (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_max_length (ClutterText *self,
gint max);
+CLUTTER_AVAILABLE_IN_1_0
gint clutter_text_get_max_length (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_text_set_single_line_mode (ClutterText *self,
gboolean single_line);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_get_single_line_mode (ClutterText *self);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_text_set_selected_text_color (ClutterText *self,
const ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_text_get_selected_text_color (ClutterText *self,
ClutterColor *color);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_activate (ClutterText *self);
CLUTTER_AVAILABLE_IN_1_10
gint clutter_text_coords_to_position (ClutterText *self,
gfloat x,
gfloat y);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_text_position_to_coords (ClutterText *self,
gint position,
gfloat *x,
gfloat *y,
gfloat *line_height);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_text_set_preedit_string (ClutterText *self,
const gchar *preedit_str,
PangoAttrList *preedit_attrs,
guint cursor_pos);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_text_get_layout_offsets (ClutterText *self,
gint *x,
gint *y);
diff --git a/clutter/clutter-texture.h b/clutter/clutter-texture.h
index 4781b2c87..95fd17060 100644
--- a/clutter/clutter-texture.h
+++ b/clutter/clutter-texture.h
@@ -67,6 +67,7 @@ typedef enum {
* Since: 0.4
*/
#define CLUTTER_TEXTURE_ERROR (clutter_texture_error_quark ())
+CLUTTER_AVAILABLE_IN_ALL
GQuark clutter_texture_error_quark (void);
typedef struct _ClutterTexture ClutterTexture;
@@ -121,6 +122,7 @@ struct _ClutterTextureClass
void (*_clutter_texture5) (void);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_texture_get_type (void) G_GNUC_CONST;
G_END_DECLS
diff --git a/clutter/clutter-timeline.c b/clutter/clutter-timeline.c
index 440b2d2e9..f64fd930f 100644
--- a/clutter/clutter-timeline.c
+++ b/clutter/clutter-timeline.c
@@ -19,8 +19,6 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
- *
- *
*/
/**
@@ -57,8 +55,8 @@
* its #ClutterTimeline:duration.
*
* It is possible to connect to specific points in the timeline progress by
- * adding markers using clutter_timeline_add_marker_at_time()
- * and connecting to the #ClutterTimeline::marker-reached signal.
+ * adding markers using clutter_timeline_add_marker_at_time() and connecting
+ * to the #ClutterTimeline::marker-reached signal.
*
* Timelines can be made to loop once they reach the end of their duration, by
* using clutter_timeline_set_repeat_count(); a looping timeline will still
@@ -75,13 +73,14 @@
* Timelines are used in the Clutter animation framework by classes like
* #ClutterAnimation, #ClutterAnimator, and #ClutterState.
*
- *
- * Defining Timelines in ClutterScript
- * A #ClutterTimeline can be described in #ClutterScript like any
- * other object. Additionally, it is possible to define markers directly
- * inside the JSON definition by using the markers
- * JSON object member, such as:
- *
- *
+ * ]|
*/
#ifdef HAVE_CONFIG_H
@@ -112,12 +110,6 @@
#include "deprecated/clutter-timeline.h"
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (ClutterTimeline, clutter_timeline, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
-
struct _ClutterTimelinePrivate
{
ClutterTimelineDirection direction;
@@ -210,6 +202,13 @@ enum
static guint timeline_signals[LAST_SIGNAL] = { 0, };
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterTimeline, clutter_timeline, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterTimeline)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init))
+
static TimelineMarker *
timeline_marker_new_time (const gchar *name,
guint msecs)
@@ -575,8 +574,6 @@ clutter_timeline_class_init (ClutterTimelineClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterTimelinePrivate));
-
/**
* ClutterTimeline:loop:
*
@@ -846,21 +843,17 @@ clutter_timeline_class_init (ClutterTimelineClass *klass)
static void
clutter_timeline_init (ClutterTimeline *self)
{
- ClutterTimelinePrivate *priv;
+ self->priv = clutter_timeline_get_instance_private (self);
- self->priv = priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_TIMELINE,
- ClutterTimelinePrivate);
-
- priv->progress_mode = CLUTTER_LINEAR;
+ self->priv->progress_mode = CLUTTER_LINEAR;
/* default steps() parameters are 1, end */
- priv->n_steps = 1;
- priv->step_mode = CLUTTER_STEP_MODE_END;
+ self->priv->n_steps = 1;
+ self->priv->step_mode = CLUTTER_STEP_MODE_END;
/* default cubic-bezier() paramereters are (0, 0, 1, 1) */
- clutter_point_init (&priv->cb_1, 0, 0);
- clutter_point_init (&priv->cb_2, 1, 1);
+ clutter_point_init (&self->priv->cb_1, 0, 0);
+ clutter_point_init (&self->priv->cb_2, 1, 1);
}
struct CheckIfMarkerHitClosure
@@ -1371,10 +1364,9 @@ clutter_timeline_skip (ClutterTimeline *timeline,
* Advance timeline to the requested point. The point is given as a
* time in milliseconds since the timeline started.
*
- * The @timeline will not emit the #ClutterTimeline::new-frame
+ * The @timeline will not emit the #ClutterTimeline::new-frame
* signal for the given time. The first ::new-frame signal after the call to
* clutter_timeline_advance() will be emit the skipped markers.
- *
*/
void
clutter_timeline_advance (ClutterTimeline *timeline,
@@ -1428,15 +1420,15 @@ clutter_timeline_is_playing (ClutterTimeline *timeline)
* Create a new #ClutterTimeline instance which has property values
* matching that of supplied timeline. The cloned timeline will not
* be started and will not be positioned to the current position of
- * the original @timeline: you will have to start it with clutter_timeline_start().
+ * the original @timeline: you will have to start it with
+ * clutter_timeline_start().
*
- * The only cloned properties are:
- *
- * #ClutterTimeline:duration
- * #ClutterTimeline:loop
- * #ClutterTimeline:delay
- * #ClutterTimeline:direction
- *
+ * The only cloned properties are:
+ *
+ * - #ClutterTimeline:duration
+ * - #ClutterTimeline:loop
+ * - #ClutterTimeline:delay
+ * - #ClutterTimeline:direction
*
* Return value: (transfer full): a new #ClutterTimeline, cloned
* from @timeline
@@ -1939,10 +1931,10 @@ clutter_timeline_list_markers (ClutterTimeline *timeline,
*
* Advances @timeline to the time of the given @marker_name.
*
- * Like clutter_timeline_advance(), this function will not
+ * Like clutter_timeline_advance(), this function will not
* emit the #ClutterTimeline::new-frame for the time where @marker_name
* is set, nor it will emit #ClutterTimeline::marker-reached for
- * @marker_name.
+ * @marker_name.
*
* Since: 0.8
*/
@@ -2452,9 +2444,9 @@ clutter_timeline_get_step_progress (ClutterTimeline *timeline,
{
g_return_val_if_fail (CLUTTER_IS_TIMELINE (timeline), FALSE);
- if (timeline->priv->progress_mode != CLUTTER_STEPS ||
- timeline->priv->progress_mode != CLUTTER_STEP_START ||
- timeline->priv->progress_mode != CLUTTER_STEP_END)
+ if (!(timeline->priv->progress_mode == CLUTTER_STEPS ||
+ timeline->priv->progress_mode == CLUTTER_STEP_START ||
+ timeline->priv->progress_mode == CLUTTER_STEP_END))
return FALSE;
if (n_steps != NULL)
@@ -2526,11 +2518,11 @@ clutter_timeline_get_cubic_bezier_progress (ClutterTimeline *timeline,
{
g_return_val_if_fail (CLUTTER_IS_TIMELINE (timeline), FALSE);
- if (timeline->priv->progress_mode != CLUTTER_CUBIC_BEZIER ||
- timeline->priv->progress_mode != CLUTTER_EASE ||
- timeline->priv->progress_mode != CLUTTER_EASE_IN ||
- timeline->priv->progress_mode != CLUTTER_EASE_OUT ||
- timeline->priv->progress_mode != CLUTTER_EASE_IN_OUT)
+ if (!(timeline->priv->progress_mode == CLUTTER_CUBIC_BEZIER ||
+ timeline->priv->progress_mode == CLUTTER_EASE ||
+ timeline->priv->progress_mode == CLUTTER_EASE_IN ||
+ timeline->priv->progress_mode == CLUTTER_EASE_OUT ||
+ timeline->priv->progress_mode == CLUTTER_EASE_IN_OUT))
return FALSE;
if (c_1 != NULL)
diff --git a/clutter/clutter-timeline.h b/clutter/clutter-timeline.h
index c31f8df2e..267dc63d8 100644
--- a/clutter/clutter-timeline.h
+++ b/clutter/clutter-timeline.h
@@ -115,53 +115,78 @@ struct _ClutterTimelineClass
void (*_clutter_timeline_4) (void);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_timeline_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterTimeline * clutter_timeline_new (guint msecs);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_timeline_get_duration (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_set_duration (ClutterTimeline *timeline,
guint msecs);
+CLUTTER_AVAILABLE_IN_ALL
ClutterTimelineDirection clutter_timeline_get_direction (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_set_direction (ClutterTimeline *timeline,
ClutterTimelineDirection direction);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_start (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_pause (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_stop (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_1_6
void clutter_timeline_set_auto_reverse (ClutterTimeline *timeline,
gboolean reverse);
+CLUTTER_AVAILABLE_IN_1_6
gboolean clutter_timeline_get_auto_reverse (ClutterTimeline *timeline);
CLUTTER_AVAILABLE_IN_1_10
void clutter_timeline_set_repeat_count (ClutterTimeline *timeline,
gint count);
CLUTTER_AVAILABLE_IN_1_10
gint clutter_timeline_get_repeat_count (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_rewind (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_skip (ClutterTimeline *timeline,
guint msecs);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_advance (ClutterTimeline *timeline,
guint msecs);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_timeline_get_elapsed_time (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
gdouble clutter_timeline_get_progress (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_timeline_is_playing (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_set_delay (ClutterTimeline *timeline,
guint msecs);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_timeline_get_delay (ClutterTimeline *timeline);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_timeline_get_delta (ClutterTimeline *timeline);
CLUTTER_AVAILABLE_IN_1_14
void clutter_timeline_add_marker (ClutterTimeline *timeline,
const gchar *marker_name,
gdouble progress);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_add_marker_at_time (ClutterTimeline *timeline,
const gchar *marker_name,
guint msecs);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_remove_marker (ClutterTimeline *timeline,
const gchar *marker_name);
+CLUTTER_AVAILABLE_IN_ALL
gchar ** clutter_timeline_list_markers (ClutterTimeline *timeline,
gint msecs,
gsize *n_markers) G_GNUC_MALLOC;
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_timeline_has_marker (ClutterTimeline *timeline,
const gchar *marker_name);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_timeline_advance_to_marker (ClutterTimeline *timeline,
const gchar *marker_name);
CLUTTER_AVAILABLE_IN_1_10
diff --git a/clutter/clutter-transition-group.c b/clutter/clutter-transition-group.c
index 1b8e664bb..f479dc44c 100644
--- a/clutter/clutter-transition-group.c
+++ b/clutter/clutter-transition-group.c
@@ -51,7 +51,7 @@ struct _ClutterTransitionGroupPrivate
GHashTable *transitions;
};
-G_DEFINE_TYPE (ClutterTransitionGroup, clutter_transition_group, CLUTTER_TYPE_TRANSITION)
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterTransitionGroup, clutter_transition_group, CLUTTER_TYPE_TRANSITION)
static void
clutter_transition_group_new_frame (ClutterTimeline *timeline,
@@ -155,8 +155,6 @@ clutter_transition_group_class_init (ClutterTransitionGroupClass *klass)
ClutterTimelineClass *timeline_class = CLUTTER_TIMELINE_CLASS (klass);
ClutterTransitionClass *transition_class = CLUTTER_TRANSITION_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterTransitionGroupPrivate));
-
gobject_class->finalize = clutter_transition_group_finalize;
timeline_class->started = clutter_transition_group_started;
@@ -169,10 +167,7 @@ clutter_transition_group_class_init (ClutterTransitionGroupClass *klass)
static void
clutter_transition_group_init (ClutterTransitionGroup *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_TYPE_TRANSITION_GROUP,
- ClutterTransitionGroupPrivate);
-
+ self->priv = clutter_transition_group_get_instance_private (self);
self->priv->transitions =
g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL);
}
diff --git a/clutter/clutter-transition-group.h b/clutter/clutter-transition-group.h
index efa9ddb22..0408fc59d 100644
--- a/clutter/clutter-transition-group.h
+++ b/clutter/clutter-transition-group.h
@@ -42,7 +42,7 @@ typedef struct _ClutterTransitionGroupClass ClutterTransitionGroupCl
/**
* ClutterTransitionGroup:
*
- * The ClutterTransitionGroup structure contains
+ * The #ClutterTransitionGroup structure contains
* private data and should only be accessed using the provided API.
*
* Since: 1.12
@@ -58,7 +58,7 @@ struct _ClutterTransitionGroup
/**
* ClutterTransitionGroupClass:
*
- * The ClutterTransitionGroupClass structure
+ * The #ClutterTransitionGroupClass structure
* contains only private data.
*
* Since: 1.12
diff --git a/clutter/clutter-transition.c b/clutter/clutter-transition.c
index ec6055b0c..03f91d0af 100644
--- a/clutter/clutter-transition.c
+++ b/clutter/clutter-transition.c
@@ -26,8 +26,8 @@
* @Title: ClutterTransition
* @Short_Description: Transition between two values
*
- * #ClutterTransition is a subclass of #ClutterTimeline that computes
- * the interpolation between two values, stored by a #ClutterInterval.
+ * #ClutterTransition is an abstract subclass of #ClutterTimeline that
+ * computes the interpolation between two values, stored by a #ClutterInterval.
*/
#ifdef HAVE_CONFIG_H
@@ -67,7 +67,7 @@ static GParamSpec *obj_props[PROP_LAST] = { NULL, };
static GQuark quark_animatable_set = 0;
-G_DEFINE_ABSTRACT_TYPE (ClutterTransition, clutter_transition, CLUTTER_TYPE_TIMELINE)
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterTransition, clutter_transition, CLUTTER_TYPE_TIMELINE)
static void
clutter_transition_attach (ClutterTransition *transition,
@@ -220,8 +220,6 @@ clutter_transition_class_init (ClutterTransitionClass *klass)
quark_animatable_set =
g_quark_from_static_string ("-clutter-transition-animatable-set");
- g_type_class_add_private (klass, sizeof (ClutterTransitionPrivate));
-
klass->compute_value = clutter_transition_real_compute_value;
klass->attached = clutter_transition_real_attached;
klass->detached = clutter_transition_real_detached;
@@ -269,7 +267,7 @@ clutter_transition_class_init (ClutterTransitionClass *klass)
*
* Whether the #ClutterTransition should be automatically detached
* from the #ClutterTransition:animatable instance whenever the
- * #ClutterTimeline::completed signal is emitted.
+ * #ClutterTimeline::stopped signal is emitted.
*
* The #ClutterTransition:remove-on-complete property takes into
* account the value of the #ClutterTimeline:repeat-count property,
@@ -291,8 +289,7 @@ clutter_transition_class_init (ClutterTransitionClass *klass)
static void
clutter_transition_init (ClutterTransition *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_TRANSITION,
- ClutterTransitionPrivate);
+ self->priv = clutter_transition_get_instance_private (self);
}
/**
@@ -512,7 +509,7 @@ clutter_transition_set_value (ClutterTransition *transition,
}
/**
- * clutter_transition_set_from_value:
+ * clutter_transition_set_from_value: (rename-to clutter_transition_set_from)
* @transition: a #ClutterTransition
* @value: a #GValue with the initial value of the transition
*
@@ -531,8 +528,6 @@ clutter_transition_set_value (ClutterTransition *transition,
*
* This function is meant to be used by language bindings.
*
- * Rename to: clutter_transition_set_from
- *
* Since: 1.12
*/
void
@@ -548,7 +543,7 @@ clutter_transition_set_from_value (ClutterTransition *transition,
}
/**
- * clutter_transition_set_to_value:
+ * clutter_transition_set_to_value: (rename-to clutter_transition_set_to)
* @transition: a #ClutterTransition
* @value: a #GValue with the final value of the transition
*
@@ -567,8 +562,6 @@ clutter_transition_set_from_value (ClutterTransition *transition,
*
* This function is meant to be used by language bindings.
*
- * Rename to: clutter_transition_set_to
- *
* Since: 1.12
*/
void
diff --git a/clutter/clutter-transition.h b/clutter/clutter-transition.h
index c52764d17..f536a4ee5 100644
--- a/clutter/clutter-transition.h
+++ b/clutter/clutter-transition.h
@@ -46,7 +46,7 @@ typedef struct _ClutterTransitionClass ClutterTransitionClass;
/**
* ClutterTransition:
*
- * The ClutterTransition structure contains private
+ * The #ClutterTransition structure contains private
* data and should only be accessed using the provided API.
*
* Since: 1.10
@@ -68,7 +68,7 @@ struct _ClutterTransition
* @compute_value: virtual function; called each frame to compute and apply
* the interpolation of the interval
*
- * The ClutterTransitionClass structure contains
+ * The #ClutterTransitionClass structure contains
* private data.
*
* Since: 1.10
diff --git a/clutter/clutter-types.h b/clutter/clutter-types.h
index 9a66394e2..f9b835a7b 100644
--- a/clutter/clutter-types.h
+++ b/clutter/clutter-types.h
@@ -101,7 +101,7 @@ typedef union _ClutterEvent ClutterEvent;
/**
* ClutterEventSequence:
*
- * The ClutterEventSequence structure is an opaque
+ * The #ClutterEventSequence structure is an opaque
* type used to denote the event sequence of a touch event.
*
* Since: 1.12
@@ -115,14 +115,14 @@ typedef struct _ClutterShader ClutterShader; /* deprecated */
/**
* ClutterPaintVolume:
*
- * ClutterPaintVolume is an opaque structure
+ * #ClutterPaintVolume is an opaque structure
* whose members cannot be directly accessed.
*
- * A ClutterPaintVolume represents an
+ * A #ClutterPaintVolume represents an
* a bounding volume whose internal representation isn't defined but
* can be set and queried in terms of an axis aligned bounding box.
*
- * A ClutterPaintVolume for a #ClutterActor
+ * A #ClutterPaintVolume for a #ClutterActor
* is defined to be relative from the current actor modelview matrix.
*
* Other internal representation and methods for describing the
@@ -408,18 +408,24 @@ struct _ClutterVertex
*/
#define CLUTTER_VERTEX_INIT_ZERO CLUTTER_VERTEX_INIT (0.f, 0.f, 0.f)
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_vertex_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterVertex *clutter_vertex_new (gfloat x,
gfloat y,
gfloat z);
CLUTTER_AVAILABLE_IN_1_12
ClutterVertex *clutter_vertex_alloc (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterVertex *clutter_vertex_init (ClutterVertex *vertex,
gfloat x,
gfloat y,
gfloat z);
+CLUTTER_AVAILABLE_IN_ALL
ClutterVertex *clutter_vertex_copy (const ClutterVertex *vertex);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_vertex_free (ClutterVertex *vertex);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_vertex_equal (const ClutterVertex *vertex_a,
const ClutterVertex *vertex_b);
@@ -475,55 +481,76 @@ struct _ClutterActorBox
*/
#define CLUTTER_ACTOR_BOX_INIT_ZERO CLUTTER_ACTOR_BOX_INIT (0.f, 0.f, 0.f, 0.f)
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_actor_box_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterActorBox *clutter_actor_box_new (gfloat x_1,
gfloat y_1,
gfloat x_2,
gfloat y_2);
CLUTTER_AVAILABLE_IN_1_12
ClutterActorBox *clutter_actor_box_alloc (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActorBox *clutter_actor_box_init (ClutterActorBox *box,
gfloat x_1,
gfloat y_1,
gfloat x_2,
gfloat y_2);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_init_rect (ClutterActorBox *box,
gfloat x,
gfloat y,
gfloat width,
gfloat height);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActorBox *clutter_actor_box_copy (const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_free (ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_box_equal (const ClutterActorBox *box_a,
const ClutterActorBox *box_b);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_box_get_x (const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_box_get_y (const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_box_get_width (const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_box_get_height (const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_get_origin (const ClutterActorBox *box,
gfloat *x,
gfloat *y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_get_size (const ClutterActorBox *box,
gfloat *width,
gfloat *height);
+CLUTTER_AVAILABLE_IN_ALL
gfloat clutter_actor_box_get_area (const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_actor_box_contains (const ClutterActorBox *box,
gfloat x,
gfloat y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_from_vertices (ClutterActorBox *box,
const ClutterVertex verts[]);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_interpolate (const ClutterActorBox *initial,
const ClutterActorBox *final,
gdouble progress,
ClutterActorBox *result);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_clamp_to_pixel (ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_union (const ClutterActorBox *a,
const ClutterActorBox *b,
ClutterActorBox *result);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_set_origin (ClutterActorBox *box,
gfloat x,
gfloat y);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_actor_box_set_size (ClutterActorBox *box,
gfloat width,
gfloat height);
@@ -537,9 +564,9 @@ void clutter_actor_box_set_size (ClutterActorBox *box,
*
* The rectangle containing an actor's bounding box, measured in pixels.
*
- * You should not use #ClutterGeometry, or operate on its fields
+ * You should not use #ClutterGeometry, or operate on its fields
* directly; you should use #cairo_rectangle_int_t or #ClutterRect if you
- * need a rectangle type, depending on the precision required.
+ * need a rectangle type, depending on the precision required.
*
* Deprecated: 1.16
*/
@@ -552,6 +579,7 @@ struct _ClutterGeometry
guint height;
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_geometry_get_type (void) G_GNUC_CONST;
CLUTTER_DEPRECATED_IN_1_16
@@ -577,9 +605,13 @@ struct _ClutterKnot
gint y;
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_knot_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterKnot *clutter_knot_copy (const ClutterKnot *knot);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_knot_free (ClutterKnot *knot);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_knot_equal (const ClutterKnot *knot_a,
const ClutterKnot *knot_b);
@@ -604,10 +636,14 @@ struct _ClutterPathNode
ClutterKnot points[3];
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_path_node_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterPathNode *clutter_path_node_copy (const ClutterPathNode *node);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_path_node_free (ClutterPathNode *node);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_path_node_equal (const ClutterPathNode *node_a,
const ClutterPathNode *node_b);
@@ -615,30 +651,43 @@ gboolean clutter_path_node_equal (const ClutterPathNode *node_a,
* ClutterPaintVolume
*/
+CLUTTER_AVAILABLE_IN_1_2
GType clutter_paint_volume_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_2
ClutterPaintVolume *clutter_paint_volume_copy (const ClutterPaintVolume *pv);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_free (ClutterPaintVolume *pv);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_set_origin (ClutterPaintVolume *pv,
const ClutterVertex *origin);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_get_origin (const ClutterPaintVolume *pv,
ClutterVertex *vertex);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_set_width (ClutterPaintVolume *pv,
gfloat width);
+CLUTTER_AVAILABLE_IN_1_2
gfloat clutter_paint_volume_get_width (const ClutterPaintVolume *pv);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_set_height (ClutterPaintVolume *pv,
gfloat height);
+CLUTTER_AVAILABLE_IN_1_2
gfloat clutter_paint_volume_get_height (const ClutterPaintVolume *pv);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_set_depth (ClutterPaintVolume *pv,
gfloat depth);
+CLUTTER_AVAILABLE_IN_1_2
gfloat clutter_paint_volume_get_depth (const ClutterPaintVolume *pv);
+CLUTTER_AVAILABLE_IN_1_2
void clutter_paint_volume_union (ClutterPaintVolume *pv,
const ClutterPaintVolume *another_pv);
CLUTTER_AVAILABLE_IN_1_10
void clutter_paint_volume_union_box (ClutterPaintVolume *pv,
const ClutterActorBox *box);
+CLUTTER_AVAILABLE_IN_1_2
gboolean clutter_paint_volume_set_from_allocation (ClutterPaintVolume *pv,
ClutterActor *actor);
@@ -661,10 +710,14 @@ struct _ClutterMargin
float bottom;
};
+CLUTTER_AVAILABLE_IN_1_10
GType clutter_margin_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_10
ClutterMargin * clutter_margin_new (void) G_GNUC_MALLOC;
+CLUTTER_AVAILABLE_IN_1_10
ClutterMargin * clutter_margin_copy (const ClutterMargin *margin_);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_margin_free (ClutterMargin *margin_);
/**
@@ -695,6 +748,7 @@ typedef gboolean (* ClutterProgressFunc) (const GValue *a,
gdouble progress,
GValue *retval);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_interval_register_progress_func (GType value_type,
ClutterProgressFunc func);
diff --git a/clutter/clutter-units.c b/clutter/clutter-units.c
index f07f0f619..f49df9b99 100644
--- a/clutter/clutter-units.c
+++ b/clutter/clutter-units.c
@@ -466,7 +466,7 @@ clutter_units_to_pixels (ClutterUnits *units)
* omg!1!ponies
* ]|
*
- * If no unit is specified, pixels are assumed.
+ * If no unit is specified, pixels are assumed.
*
* Return value: %TRUE if the string was successfully parsed,
* and %FALSE otherwise
@@ -595,9 +595,9 @@ clutter_unit_type_name (ClutterUnitType unit_type)
* See clutter_units_from_string() for the units syntax and for
* examples of output
*
- * Fractional values are truncated to the second decimal
+ * Fractional values are truncated to the second decimal
* position for em, mm and cm, and to the first decimal position for
- * typographic points. Pixels are integers.
+ * typographic points. Pixels are integers.
*
* Return value: a newly allocated string containing the encoded
* #ClutterUnits value. Use g_free() to free the string
diff --git a/clutter/clutter-units.h b/clutter/clutter-units.h
index e50242bf9..c558b10fa 100644
--- a/clutter/clutter-units.h
+++ b/clutter/clutter-units.h
@@ -70,31 +70,45 @@ struct _ClutterUnits
gint64 __padding_2;
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_units_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
ClutterUnitType clutter_units_get_unit_type (const ClutterUnits *units);
+CLUTTER_AVAILABLE_IN_1_0
gfloat clutter_units_get_unit_value (const ClutterUnits *units);
+CLUTTER_AVAILABLE_IN_1_0
ClutterUnits * clutter_units_copy (const ClutterUnits *units);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_free (ClutterUnits *units);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_from_pixels (ClutterUnits *units,
gint px);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_from_em (ClutterUnits *units,
gfloat em);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_from_em_for_font (ClutterUnits *units,
const gchar *font_name,
gfloat em);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_from_mm (ClutterUnits *units,
gfloat mm);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_from_cm (ClutterUnits *units,
gfloat cm);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_units_from_pt (ClutterUnits *units,
gfloat pt);
+CLUTTER_AVAILABLE_IN_1_0
gfloat clutter_units_to_pixels (ClutterUnits *units);
+CLUTTER_AVAILABLE_IN_1_0
gboolean clutter_units_from_string (ClutterUnits *units,
const gchar *str);
+CLUTTER_AVAILABLE_IN_1_0
gchar * clutter_units_to_string (const ClutterUnits *units);
/* shorthands for the constructors */
@@ -146,8 +160,10 @@ struct _ClutterParamSpecUnits
gfloat maximum;
};
+CLUTTER_AVAILABLE_IN_1_0
GType clutter_param_units_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_0
GParamSpec * clutter_param_spec_units (const gchar *name,
const gchar *nick,
const gchar *blurb,
@@ -157,8 +173,10 @@ GParamSpec * clutter_param_spec_units (const gchar *name,
gfloat default_value,
GParamFlags flags);
+CLUTTER_AVAILABLE_IN_1_0
void clutter_value_set_units (GValue *value,
const ClutterUnits *units);
+CLUTTER_AVAILABLE_IN_1_0
const ClutterUnits * clutter_value_get_units (const GValue *value);
G_END_DECLS
diff --git a/clutter/clutter-version.h.in b/clutter/clutter-version.h.in
index a4703e120..bcee39f69 100644
--- a/clutter/clutter-version.h.in
+++ b/clutter/clutter-version.h.in
@@ -210,10 +210,40 @@ G_BEGIN_DECLS
* A macro that evaluates to the 1.16 version of Clutter, in a format
* that can be used by the C pre-processor.
*
- * Since: 1.14
+ * Since: 1.16
*/
#define CLUTTER_VERSION_1_16 (G_ENCODE_VERSION (1, 16))
+/**
+ * CLUTTER_VERSION_1_18:
+ *
+ * A macro that evaluates to the 1.18 version of Clutter, in a format
+ * that can be used by the C pre-processor.
+ *
+ * Since: 1.18
+ */
+#define CLUTTER_VERSION_1_18 (G_ENCODE_VERSION (1, 18))
+
+/**
+ * CLUTTER_VERSION_1_20:
+ *
+ * A macro that evaluates to the 1.20 version of Clutter, in a format
+ * that can be used by the C pre-processor.
+ *
+ * Since: 1.20
+ */
+#define CLUTTER_VERSION_1_20 (G_ENCODE_VERSION (1, 20))
+
+/**
+ * CLUTTER_VERSION_1_22:
+ *
+ * A macro that evaluates to the 1.22 version of Clutter, in a format
+ * that can be used by the C pre-processor.
+ *
+ * Since: 1.22
+ */
+#define CLUTTER_VERSION_1_22 (G_ENCODE_VERSION (1, 22))
+
/* evaluates to the current stable version; for development cycles,
* this means the next stable target
*/
@@ -244,19 +274,22 @@ G_BEGIN_DECLS
(CLUTTER_MAJOR_VERSION == (major) && CLUTTER_MINOR_VERSION > (minor)) || \
(CLUTTER_MAJOR_VERSION == (major) && CLUTTER_MINOR_VERSION == (minor) && CLUTTER_MICRO_VERSION >= (micro)))
-/* annotation for exported variables
- *
- * XXX: this has to be defined here because clutter-macro.h imports this
- * header file.
- */
-#ifdef _MSC_VER
+#ifndef _CLUTTER_EXTERN
+#define _CLUTTER_EXTERN extern
+#endif
+
+#ifdef CLUTTER_WINDOWING_WIN32
# ifdef CLUTTER_COMPILATION
-# define CLUTTER_VAR __declspec(dllexport)
+# ifdef DLL_EXPORT
+# define CLUTTER_VAR __declspec(dllexport)
+# else
+# define CLUTTER_VAR extern
+# endif
# else
-# define CLUTTER_VAR extern __declspec(dllimport)
+# define CLUTTER_VAR __declspec(dllimport)
# endif
#else
-# define CLUTTER_VAR extern
+# define CLUTTER_VAR _CLUTTER_EXTERN
#endif
/**
@@ -301,12 +334,6 @@ CLUTTER_VAR const guint clutter_minor_version;
*/
CLUTTER_VAR const guint clutter_micro_version;
-gboolean clutter_check_version (guint major,
- guint minor,
- guint micro);
-
-gboolean clutter_check_windowing_backend (const char *backend_type);
-
G_END_DECLS
#endif /* __CLUTTER_VERSION_H__ */
diff --git a/clutter/clutter-zoom-action.c b/clutter/clutter-zoom-action.c
index 5901a6e85..4e844a95a 100644
--- a/clutter/clutter-zoom-action.c
+++ b/clutter/clutter-zoom-action.c
@@ -56,6 +56,7 @@
#include "clutter-debug.h"
#include "clutter-enum-types.h"
+#include "clutter-gesture-action-private.h"
#include "clutter-marshal.h"
#include "clutter-private.h"
#include "clutter-stage-private.h"
@@ -81,6 +82,7 @@ struct _ClutterZoomActionPrivate
ZoomPoint points[2];
+ ClutterPoint initial_focal_point;
ClutterPoint focal_point;
ClutterPoint transformed_focal_point;
@@ -114,7 +116,7 @@ enum
static guint zoom_signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (ClutterZoomAction, clutter_zoom_action, CLUTTER_TYPE_GESTURE_ACTION);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterZoomAction, clutter_zoom_action, CLUTTER_TYPE_GESTURE_ACTION)
static void
capture_point_initial_position (ClutterGestureAction *action,
@@ -176,6 +178,18 @@ clutter_zoom_action_gesture_begin (ClutterGestureAction *action,
&priv->initial_scale_x,
&priv->initial_scale_y);
+ priv->initial_focal_point.x = (priv->points[0].start_x + priv->points[1].start_x) / 2;
+ priv->initial_focal_point.y = (priv->points[0].start_y + priv->points[1].start_y) / 2;
+ clutter_actor_transform_stage_point (actor,
+ priv->initial_focal_point.x,
+ priv->initial_focal_point.y,
+ &priv->transformed_focal_point.x,
+ &priv->transformed_focal_point.y);
+
+ clutter_actor_set_pivot_point (actor,
+ priv->transformed_focal_point.x / clutter_actor_get_width (actor),
+ priv->transformed_focal_point.y / clutter_actor_get_height (actor));
+
return TRUE;
}
@@ -200,11 +214,6 @@ clutter_zoom_action_gesture_progress (ClutterGestureAction *action,
priv->focal_point.x = (priv->points[0].update_x + priv->points[1].update_x) / 2;
priv->focal_point.y = (priv->points[0].update_y + priv->points[1].update_y) / 2;
- priv->transformed_focal_point.x = (priv->points[0].transformed_update_x +
- priv->points[1].transformed_update_x) / 2;
- priv->transformed_focal_point.y = (priv->points[0].transformed_update_y +
- priv->points[1].transformed_update_y) / 2;
-
new_scale = distance / priv->zoom_initial_distance;
@@ -235,11 +244,16 @@ clutter_zoom_action_real_zoom (ClutterZoomAction *action,
gdouble factor)
{
ClutterZoomActionPrivate *priv = action->priv;
- ClutterActor *parent = clutter_actor_get_parent (actor);
gfloat x, y, z;
gdouble scale_x, scale_y;
ClutterVertex out, in;
+ in.x = priv->transformed_focal_point.x;
+ in.y = priv->transformed_focal_point.y;
+ in.z = 0;
+
+ clutter_actor_apply_transform_to_point (actor, &in, &out);
+
clutter_actor_get_scale (actor, &scale_x, &scale_y);
switch (priv->zoom_axis)
@@ -260,21 +274,10 @@ clutter_zoom_action_real_zoom (ClutterZoomAction *action,
break;
}
-
- in.x = priv->transformed_focal_point.x;
- in.y = priv->transformed_focal_point.y;
- in.z = 0;
-
- clutter_actor_apply_relative_transform_to_point (actor,
- parent,
- &in, &out);
-
-
- clutter_actor_get_translation (actor, &x, &y, &z);
- clutter_actor_set_translation (actor,
- x + priv->focal_point.x - out.x,
- y + priv->focal_point.y - out.y,
- z);
+ x = priv->initial_x + priv->focal_point.x - priv->initial_focal_point.x;
+ y = priv->initial_y + priv->focal_point.y - priv->initial_focal_point.y;
+ clutter_actor_get_translation (actor, NULL, NULL, &z);
+ clutter_actor_set_translation (actor, x, y, z);
return TRUE;
}
@@ -323,6 +326,15 @@ clutter_zoom_action_dispose (GObject *gobject)
G_OBJECT_CLASS (clutter_zoom_action_parent_class)->dispose (gobject);
}
+static void
+clutter_zoom_action_constructed (GObject *gobject)
+{
+ ClutterGestureAction *gesture;
+
+ gesture = CLUTTER_GESTURE_ACTION (gobject);
+ clutter_gesture_action_set_threshold_trigger_edge (gesture, CLUTTER_GESTURE_TRIGGER_EDGE_NONE);
+}
+
static void
clutter_zoom_action_class_init (ClutterZoomActionClass *klass)
{
@@ -330,8 +342,7 @@ clutter_zoom_action_class_init (ClutterZoomActionClass *klass)
CLUTTER_GESTURE_ACTION_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterZoomActionPrivate));
-
+ gobject_class->constructed = clutter_zoom_action_constructed;
gobject_class->set_property = clutter_zoom_action_set_property;
gobject_class->get_property = clutter_zoom_action_get_property;
gobject_class->dispose = clutter_zoom_action_dispose;
@@ -398,12 +409,13 @@ clutter_zoom_action_class_init (ClutterZoomActionClass *klass)
static void
clutter_zoom_action_init (ClutterZoomAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_ZOOM_ACTION,
- ClutterZoomActionPrivate);
+ ClutterGestureAction *gesture;
+ self->priv = clutter_zoom_action_get_instance_private (self);
self->priv->zoom_axis = CLUTTER_ZOOM_BOTH;
- clutter_gesture_action_set_n_touch_points (CLUTTER_GESTURE_ACTION (self), 2);
+ gesture = CLUTTER_GESTURE_ACTION (self);
+ clutter_gesture_action_set_n_touch_points (gesture, 2);
}
/**
diff --git a/clutter/clutter-zoom-action.h b/clutter/clutter-zoom-action.h
index 3111e12d9..7ebbe4f0d 100644
--- a/clutter/clutter-zoom-action.h
+++ b/clutter/clutter-zoom-action.h
@@ -49,7 +49,7 @@ typedef struct _ClutterZoomActionClass ClutterZoomActionClass;
/**
* ClutterZoomAction:
*
- * The ClutterZoomAction structure contains only
+ * The #ClutterZoomAction structure contains only
* private data and should be accessed using the provided API
*
* Since: 1.12
@@ -66,7 +66,7 @@ struct _ClutterZoomAction
* ClutterZoomActionClass:
* @zoom: class handler of the #ClutterZoomAction::zoom signal
*
- * The ClutterZoomActionClass structure contains
+ * The #ClutterZoomActionClass structure contains
* only private data
*
* Since: 1.12
diff --git a/clutter/clutter.h b/clutter/clutter.h
index 5bdd6bcf5..cb7985ae2 100644
--- a/clutter/clutter.h
+++ b/clutter/clutter.h
@@ -61,6 +61,7 @@
#include "clutter-drop-action.h"
#include "clutter-effect.h"
#include "clutter-enums.h"
+#include "clutter-enum-types.h"
#include "clutter-event.h"
#include "clutter-feature.h"
#include "clutter-fixed-layout.h"
@@ -98,8 +99,8 @@
#include "clutter-snap-constraint.h"
#include "clutter-stage.h"
#include "clutter-stage-manager.h"
-#include "clutter-table-layout.h"
#include "clutter-tap-action.h"
+#include "clutter-test-utils.h"
#include "clutter-texture.h"
#include "clutter-text.h"
#include "clutter-timeline.h"
@@ -109,8 +110,6 @@
#include "clutter-version.h"
#include "clutter-zoom-action.h"
-#include "clutter-enum-types.h"
-
#include "clutter-deprecated.h"
#undef __CLUTTER_H_INSIDE__
diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols
deleted file mode 100644
index 1ca0b9406..000000000
--- a/clutter/clutter.symbols
+++ /dev/null
@@ -1,1649 +0,0 @@
-cally_accessibility_init
-cally_actor_add_action
-cally_actor_add_action_full
-cally_actor_get_type
-cally_actor_new
-cally_actor_remove_action
-cally_actor_remove_action_by_name
-cally_clone_get_type
-cally_clone_new
-cally_get_cally_initialized
-cally_group_get_type
-cally_group_new
-cally_rectangle_get_type
-cally_rectangle_new
-cally_root_get_type
-cally_root_new
-cally_stage_get_type
-cally_stage_new
-cally_texture_get_type
-cally_texture_new
-cally_text_get_type
-cally_text_new
-cally_util_get_type
-clutter_action_get_type
-clutter_actor_flags_get_type
-clutter_actor_add_action
-clutter_actor_add_action_with_name
-clutter_actor_add_child
-clutter_actor_add_constraint
-clutter_actor_add_constraint_with_name
-clutter_actor_add_effect
-clutter_actor_add_effect_with_name
-clutter_actor_add_transition
-clutter_actor_align_get_type
-clutter_actor_allocate
-clutter_actor_allocate_align_fill
-clutter_actor_allocate_available_size
-clutter_actor_allocate_preferred_size
-clutter_actor_animate
-clutter_actor_animatev
-clutter_actor_animate_with_alpha
-clutter_actor_animate_with_alphav
-clutter_actor_animate_with_timeline
-clutter_actor_animate_with_timelinev
-clutter_actor_apply_transform_to_point
-clutter_actor_apply_relative_transform_to_point
-clutter_actor_box_alloc
-clutter_actor_box_clamp_to_pixel
-clutter_actor_box_contains
-clutter_actor_box_copy
-clutter_actor_box_equal
-clutter_actor_box_free
-clutter_actor_box_from_vertices
-clutter_actor_box_get_area
-clutter_actor_box_get_height
-clutter_actor_box_get_origin
-clutter_actor_box_get_size
-clutter_actor_box_get_type
-clutter_actor_box_get_width
-clutter_actor_box_get_x
-clutter_actor_box_get_y
-clutter_actor_box_init_rect
-clutter_actor_box_init
-clutter_actor_box_interpolate
-clutter_actor_box_new
-clutter_actor_box_set_origin
-clutter_actor_box_set_size
-clutter_actor_box_union
-clutter_actor_clear_actions
-clutter_actor_clear_constraints
-clutter_actor_clear_effects
-clutter_actor_contains
-clutter_actor_continue_paint
-clutter_actor_create_pango_context
-clutter_actor_create_pango_layout
-clutter_actor_destroy
-clutter_actor_destroy_all_children
-clutter_actor_detach_animation
-clutter_actor_event
-clutter_actor_get_abs_allocation_vertices
-clutter_actor_get_accessible
-clutter_actor_get_action
-clutter_actor_get_actions
-clutter_actor_get_allocation_box
-clutter_actor_get_allocation_geometry
-clutter_actor_get_allocation_vertices
-clutter_actor_get_anchor_point
-clutter_actor_get_anchor_point_gravity
-clutter_actor_get_animation
-clutter_actor_get_background_color
-clutter_actor_get_child_at_index
-clutter_actor_get_child_transform
-clutter_actor_get_children
-clutter_actor_get_clip
-clutter_actor_get_clip_to_allocation
-clutter_actor_get_constraint
-clutter_actor_get_constraints
-clutter_actor_get_content
-clutter_actor_get_content_box
-clutter_actor_get_content_gravity
-clutter_actor_get_content_repeat
-clutter_actor_get_content_scaling_filters
-clutter_actor_get_default_paint_volume
-clutter_actor_get_depth
-clutter_actor_get_easing_delay
-clutter_actor_get_easing_duration
-clutter_actor_get_easing_mode
-clutter_actor_get_effect
-clutter_actor_get_effects
-clutter_actor_get_first_child
-clutter_actor_get_fixed_position_set
-clutter_actor_get_flags
-clutter_actor_get_geometry
-clutter_actor_get_gid
-clutter_actor_get_height
-clutter_actor_get_last_child
-clutter_actor_get_layout_manager
-clutter_actor_get_margin_bottom
-clutter_actor_get_margin_left
-clutter_actor_get_margin_right
-clutter_actor_get_margin_top
-clutter_actor_get_margin
-clutter_actor_get_n_children
-clutter_actor_get_name
-clutter_actor_get_next_sibling
-clutter_actor_get_offscreen_redirect
-clutter_actor_get_opacity
-clutter_actor_get_paint_box
-clutter_actor_get_paint_opacity
-clutter_actor_get_paint_visibility
-clutter_actor_get_paint_volume
-clutter_actor_get_pango_context
-clutter_actor_get_parent
-clutter_actor_get_pivot_point_z
-clutter_actor_get_pivot_point
-clutter_actor_get_position
-clutter_actor_get_preferred_height
-clutter_actor_get_preferred_size
-clutter_actor_get_preferred_width
-clutter_actor_get_previous_sibling
-clutter_actor_get_reactive
-clutter_actor_get_request_mode
-clutter_actor_get_rotation_angle
-clutter_actor_get_rotation
-clutter_actor_get_scale
-clutter_actor_get_scale_center
-clutter_actor_get_scale_gravity
-clutter_actor_get_scale_z
-clutter_actor_get_shader
-clutter_actor_get_size
-clutter_actor_get_stage
-clutter_actor_get_text_direction
-clutter_actor_get_transform
-clutter_actor_get_transformation_matrix
-clutter_actor_get_transformed_paint_volume
-clutter_actor_get_transformed_position
-clutter_actor_get_transformed_size
-clutter_actor_get_transition
-clutter_actor_get_translation
-clutter_actor_get_type
-clutter_actor_get_width
-clutter_actor_get_x_align
-clutter_actor_get_x_expand
-clutter_actor_get_x
-clutter_actor_get_y_align
-clutter_actor_get_y_expand
-clutter_actor_get_y
-clutter_actor_get_z_position
-clutter_actor_get_z_rotation_gravity
-clutter_actor_grab_key_focus
-clutter_actor_has_actions
-clutter_actor_has_allocation
-clutter_actor_has_clip
-clutter_actor_has_constraints
-clutter_actor_has_effects
-clutter_actor_has_key_focus
-clutter_actor_has_overlaps
-clutter_actor_has_pointer
-clutter_actor_hide
-clutter_actor_hide_all
-clutter_actor_insert_child_above
-clutter_actor_insert_child_at_index
-clutter_actor_insert_child_below
-clutter_actor_is_in_clone_paint
-clutter_actor_is_rotated
-clutter_actor_is_scaled
-clutter_actor_iter_destroy
-clutter_actor_iter_init
-clutter_actor_iter_is_valid
-clutter_actor_iter_next
-clutter_actor_iter_prev
-clutter_actor_iter_remove
-clutter_actor_lower
-clutter_actor_lower_bottom
-clutter_actor_map
-clutter_actor_meta_get_actor
-clutter_actor_meta_get_enabled
-clutter_actor_meta_get_name
-clutter_actor_meta_get_type
-clutter_actor_meta_set_enabled
-clutter_actor_meta_set_name
-clutter_actor_move_anchor_point
-clutter_actor_move_anchor_point_from_gravity
-clutter_actor_move_by
-clutter_actor_needs_expand
-clutter_actor_new
-clutter_actor_paint
-clutter_actor_pop_internal
-clutter_actor_push_internal
-clutter_actor_queue_redraw
-clutter_actor_queue_redraw_with_clip
-clutter_actor_queue_relayout
-clutter_actor_raise
-clutter_actor_raise_top
-clutter_actor_realize
-clutter_actor_remove_action
-clutter_actor_remove_action_by_name
-clutter_actor_remove_all_children
-clutter_actor_remove_all_transitions
-clutter_actor_remove_constraint
-clutter_actor_remove_constraint_by_name
-clutter_actor_remove_child
-clutter_actor_remove_clip
-clutter_actor_remove_effect
-clutter_actor_remove_effect_by_name
-clutter_actor_remove_transition
-clutter_actor_reparent
-clutter_actor_replace_child
-clutter_actor_restore_easing_state
-clutter_actor_save_easing_state
-clutter_actor_set_allocation
-clutter_actor_set_anchor_point
-clutter_actor_set_anchor_point_from_gravity
-clutter_actor_set_background_color
-clutter_actor_set_child_above_sibling
-clutter_actor_set_child_at_index
-clutter_actor_set_child_below_sibling
-clutter_actor_set_child_transform
-clutter_actor_set_clip
-clutter_actor_set_clip_to_allocation
-clutter_actor_set_content
-clutter_actor_set_content_gravity
-clutter_actor_set_content_repeat
-clutter_actor_set_content_scaling_filters
-clutter_actor_set_depth
-clutter_actor_set_easing_delay
-clutter_actor_set_easing_duration
-clutter_actor_set_easing_mode
-clutter_actor_set_fixed_position_set
-clutter_actor_set_flags
-clutter_actor_set_geometry
-clutter_actor_set_height
-clutter_actor_set_layout_manager
-clutter_actor_set_margin_bottom
-clutter_actor_set_margin_left
-clutter_actor_set_margin_right
-clutter_actor_set_margin_top
-clutter_actor_set_margin
-clutter_actor_set_name
-clutter_actor_set_offscreen_redirect
-clutter_actor_set_opacity
-clutter_actor_set_parent
-clutter_actor_set_pivot_point_z
-clutter_actor_set_pivot_point
-clutter_actor_set_position
-clutter_actor_set_reactive
-clutter_actor_set_request_mode
-clutter_actor_set_rotation_angle
-clutter_actor_set_rotation
-clutter_actor_set_scale
-clutter_actor_set_scale_full
-clutter_actor_set_scale_with_gravity
-clutter_actor_set_scale_z
-clutter_actor_set_shader
-clutter_actor_set_shader_param
-clutter_actor_set_shader_param_float
-clutter_actor_set_shader_param_int
-clutter_actor_set_size
-clutter_actor_set_text_direction
-clutter_actor_set_transform
-clutter_actor_set_translation
-clutter_actor_set_width
-clutter_actor_set_x_align
-clutter_actor_set_x_expand
-clutter_actor_set_x
-clutter_actor_set_y_align
-clutter_actor_set_y_expand
-clutter_actor_set_y
-clutter_actor_set_z_position
-clutter_actor_set_z_rotation_from_gravity
-clutter_actor_should_pick_paint
-clutter_actor_show
-clutter_actor_show_all
-clutter_actor_transform_stage_point
-clutter_actor_unmap
-clutter_actor_unparent
-clutter_actor_unrealize
-clutter_actor_unset_flags
-clutter_align_axis_get_type
-clutter_align_constraint_get_align_axis
-clutter_align_constraint_get_factor
-clutter_align_constraint_get_source
-clutter_align_constraint_get_type
-clutter_align_constraint_new
-clutter_align_constraint_set_align_axis
-clutter_align_constraint_set_factor
-clutter_align_constraint_set_source
-clutter_allocation_flags_get_type
-clutter_alpha_get_alpha
-clutter_alpha_get_mode
-clutter_alpha_get_timeline
-clutter_alpha_get_type
-clutter_alpha_new
-clutter_alpha_new_full
-clutter_alpha_new_with_func
-clutter_alpha_register_closure
-clutter_alpha_register_func
-clutter_alpha_set_closure
-clutter_alpha_set_func
-clutter_alpha_set_mode
-clutter_alpha_set_timeline
-clutter_animatable_animate_property
-clutter_animatable_find_property
-clutter_animatable_get_initial_state
-clutter_animatable_get_type
-clutter_animatable_interpolate_value
-clutter_animatable_set_final_state
-clutter_animation_bind
-clutter_animation_bind_interval
-clutter_animation_completed
-clutter_animation_get_alpha
-clutter_animation_get_duration
-clutter_animation_get_interval
-clutter_animation_get_loop
-clutter_animation_get_mode
-clutter_animation_get_object
-clutter_animation_get_timeline
-clutter_animation_get_type
-clutter_animation_has_property
-clutter_animation_mode_get_type
-clutter_animation_new
-clutter_animation_set_alpha
-clutter_animation_set_duration
-clutter_animation_set_loop
-clutter_animation_set_mode
-clutter_animation_set_object
-clutter_animation_set_timeline
-clutter_animation_unbind_property
-clutter_animation_update
-clutter_animation_update_interval
-clutter_animator_compute_value
-clutter_animator_get_duration
-clutter_animator_get_keys
-clutter_animator_get_timeline
-clutter_animator_get_type
-clutter_animator_key_get_mode
-clutter_animator_key_get_object
-clutter_animator_key_get_property_name
-clutter_animator_key_get_property_type
-clutter_animator_key_get_progress
-clutter_animator_key_get_type
-clutter_animator_key_get_value
-clutter_animator_new
-clutter_animator_property_get_ease_in
-clutter_animator_property_get_interpolation
-clutter_animator_property_set_ease_in
-clutter_animator_property_set_interpolation
-clutter_animator_remove_key
-clutter_animator_set_key
-clutter_animator_set
-clutter_animator_set_duration
-clutter_animator_set_timeline
-clutter_animator_start
-clutter_backend_get_cogl_context
-clutter_backend_get_double_click_distance
-clutter_backend_get_double_click_time
-clutter_backend_get_font_name
-clutter_backend_get_font_options
-clutter_backend_get_resolution
-clutter_backend_get_type
-clutter_backend_set_double_click_distance
-clutter_backend_set_double_click_time
-clutter_backend_set_font_name
-clutter_backend_set_font_options
-clutter_backend_set_resolution
-clutter_base_init
-clutter_behaviour_actors_foreach
-clutter_behaviour_apply
-clutter_behaviour_depth_get_bounds
-clutter_behaviour_depth_get_type
-clutter_behaviour_depth_new
-clutter_behaviour_depth_set_bounds
-clutter_behaviour_ellipse_get_angle_end
-clutter_behaviour_ellipse_get_angle_start
-clutter_behaviour_ellipse_get_angle_tilt
-clutter_behaviour_ellipse_get_center
-clutter_behaviour_ellipse_get_direction
-clutter_behaviour_ellipse_get_height
-clutter_behaviour_ellipse_get_tilt
-clutter_behaviour_ellipse_get_type
-clutter_behaviour_ellipse_get_width
-clutter_behaviour_ellipse_new
-clutter_behaviour_ellipse_set_angle_end
-clutter_behaviour_ellipse_set_angle_start
-clutter_behaviour_ellipse_set_angle_tilt
-clutter_behaviour_ellipse_set_center
-clutter_behaviour_ellipse_set_direction
-clutter_behaviour_ellipse_set_height
-clutter_behaviour_ellipse_set_tilt
-clutter_behaviour_ellipse_set_width
-clutter_behaviour_get_actors
-clutter_behaviour_get_alpha
-clutter_behaviour_get_nth_actor
-clutter_behaviour_get_n_actors
-clutter_behaviour_get_type
-clutter_behaviour_is_applied
-clutter_behaviour_opacity_get_bounds
-clutter_behaviour_opacity_get_type
-clutter_behaviour_opacity_new
-clutter_behaviour_opacity_set_bounds
-clutter_behaviour_path_get_path
-clutter_behaviour_path_get_type
-clutter_behaviour_path_new
-clutter_behaviour_path_new_with_description
-clutter_behaviour_path_new_with_knots
-clutter_behaviour_path_set_path
-clutter_behaviour_remove
-clutter_behaviour_remove_all
-clutter_behaviour_rotate_get_axis
-clutter_behaviour_rotate_get_bounds
-clutter_behaviour_rotate_get_center
-clutter_behaviour_rotate_get_direction
-clutter_behaviour_rotate_get_type
-clutter_behaviour_rotate_new
-clutter_behaviour_rotate_set_axis
-clutter_behaviour_rotate_set_bounds
-clutter_behaviour_rotate_set_center
-clutter_behaviour_rotate_set_direction
-clutter_behaviour_scale_get_bounds
-clutter_behaviour_scale_get_type
-clutter_behaviour_scale_new
-clutter_behaviour_scale_set_bounds
-clutter_behaviour_set_alpha
-clutter_binding_pool_activate
-clutter_binding_pool_block_action
-clutter_binding_pool_find
-clutter_binding_pool_find_action
-clutter_binding_pool_get_for_class
-clutter_binding_pool_get_type
-clutter_binding_pool_install_action
-clutter_binding_pool_install_closure
-clutter_binding_pool_new
-clutter_binding_pool_override_action
-clutter_binding_pool_override_closure
-clutter_binding_pool_remove_action
-clutter_binding_pool_unblock_action
-clutter_bind_constraint_get_coordinate
-clutter_bind_constraint_get_offset
-clutter_bind_constraint_get_source
-clutter_bind_constraint_get_type
-clutter_bind_constraint_new
-clutter_bind_constraint_set_coordinate
-clutter_bind_constraint_set_offset
-clutter_bind_constraint_set_source
-clutter_bind_coordinate_get_type
-clutter_bin_alignment_get_type
-clutter_bin_layer_get_type
-clutter_bin_layout_add
-clutter_bin_layout_get_alignment
-clutter_bin_layout_get_type
-clutter_bin_layout_new
-clutter_bin_layout_set_alignment
-clutter_blur_effect_get_type
-clutter_blur_effect_new
-clutter_box_alignment_get_type
-clutter_box_child_get_type
-clutter_box_get_color
-clutter_box_get_layout_manager
-clutter_box_get_type
-clutter_box_layout_get_alignment
-clutter_box_layout_get_easing_duration
-clutter_box_layout_get_easing_mode
-clutter_box_layout_get_expand
-clutter_box_layout_get_fill
-clutter_box_layout_get_homogeneous
-clutter_box_layout_get_orientation
-clutter_box_layout_get_pack_start
-clutter_box_layout_get_spacing
-clutter_box_layout_get_type
-clutter_box_layout_get_use_animations
-clutter_box_layout_get_vertical
-clutter_box_layout_new
-clutter_box_layout_pack
-clutter_box_layout_set_alignment
-clutter_box_layout_set_expand
-clutter_box_layout_set_fill
-clutter_box_layout_set_easing_duration
-clutter_box_layout_set_easing_mode
-clutter_box_layout_set_homogeneous
-clutter_box_layout_set_orientation
-clutter_box_layout_set_pack_start
-clutter_box_layout_set_spacing
-clutter_box_layout_set_use_animations
-clutter_box_layout_set_vertical
-clutter_box_new
-clutter_box_set_color
-clutter_box_set_layout_manager
-clutter_box_pack
-clutter_box_packv
-clutter_box_pack_after
-clutter_box_pack_at
-clutter_box_pack_before
-clutter_brightness_contrast_effect_get_brightness
-clutter_brightness_contrast_effect_get_contrast
-clutter_brightness_contrast_effect_get_type
-clutter_brightness_contrast_effect_new
-clutter_brightness_contrast_effect_set_brightness_full
-clutter_brightness_contrast_effect_set_brightness
-clutter_brightness_contrast_effect_set_contrast_full
-clutter_brightness_contrast_effect_set_contrast
-clutter_canvas_get_type
-clutter_canvas_new
-clutter_canvas_set_size
-clutter_cairo_clear
-clutter_cairo_set_source_color
-clutter_cairo_texture_clear
-clutter_cairo_texture_create
-clutter_cairo_texture_create_region
-clutter_cairo_texture_get_auto_resize
-clutter_cairo_texture_get_surface_size
-clutter_cairo_texture_get_type
-clutter_cairo_texture_invalidate
-clutter_cairo_texture_invalidate_rectangle
-clutter_cairo_texture_new
-clutter_cairo_texture_set_auto_resize
-clutter_cairo_texture_set_surface_size
-clutter_check_version
-clutter_check_windowing_backend
-clutter_child_meta_get_actor
-clutter_child_meta_get_container
-clutter_child_meta_get_type
-clutter_clear_glyph_cache
-clutter_click_action_get_button
-clutter_click_action_get_coords
-clutter_click_action_get_state
-clutter_click_action_get_type
-clutter_click_action_new
-clutter_click_action_release
-clutter_clip_node_get_type
-clutter_clip_node_new
-clutter_clone_get_source
-clutter_clone_get_type
-clutter_clone_new
-clutter_clone_set_source
-clutter_colorize_effect_get_tint
-clutter_colorize_effect_get_type
-clutter_colorize_effect_new
-clutter_colorize_effect_set_tint
-clutter_color_add
-clutter_color_alloc
-clutter_color_copy
-clutter_color_darken
-clutter_color_equal
-clutter_color_free
-clutter_color_from_hls
-clutter_color_from_pixel
-clutter_color_from_string
-clutter_color_get_static
-clutter_color_get_type
-clutter_color_hash
-clutter_color_init
-clutter_color_interpolate
-clutter_color_lighten
-clutter_color_new
-clutter_color_node_get_type
-clutter_color_node_new
-clutter_color_shade
-clutter_color_subtract
-clutter_color_to_hls
-clutter_color_to_pixel
-clutter_color_to_string
-clutter_container_add
-clutter_container_add_actor
-clutter_container_add_valist
-clutter_container_child_get
-clutter_container_child_get_property
-clutter_container_child_notify
-clutter_container_child_set
-clutter_container_child_set_property
-clutter_container_class_find_child_property
-clutter_container_class_list_child_properties
-clutter_container_create_child_meta
-clutter_container_destroy_child_meta
-clutter_container_find_child_by_name
-clutter_container_foreach
-clutter_container_foreach_with_internals
-clutter_container_get_children
-clutter_container_get_child_meta
-clutter_container_get_type
-clutter_container_lower_child
-clutter_container_raise_child
-clutter_container_remove
-clutter_container_remove_actor
-clutter_container_remove_valist
-clutter_container_sort_depth_order
-clutter_content_get_preferred_size
-clutter_content_get_type
-clutter_content_gravity_get_type
-clutter_content_invalidate
-clutter_content_repeat_get_type
-clutter_constraint_get_type
-clutter_debug_flags DATA
-clutter_deform_effect_get_back_material
-clutter_deform_effect_get_n_tiles
-clutter_deform_effect_get_type
-clutter_deform_effect_invalidate
-clutter_deform_effect_set_back_material
-clutter_deform_effect_set_n_tiles
-clutter_desaturate_effect_get_factor
-clutter_desaturate_effect_get_type
-clutter_desaturate_effect_new
-clutter_desaturate_effect_set_factor
-clutter_device_manager_get_core_device
-clutter_device_manager_get_device
-clutter_device_manager_get_default
-clutter_device_manager_get_type
-clutter_device_manager_list_devices
-clutter_device_manager_peek_devices
-clutter_disable_accessibility
-clutter_do_event
-clutter_drag_action_get_drag_area
-clutter_drag_action_get_drag_axis
-clutter_drag_action_get_drag_handle
-clutter_drag_action_get_drag_threshold
-clutter_drag_action_get_motion_coords
-clutter_drag_action_get_press_coords
-clutter_drag_action_get_type
-clutter_drag_action_new
-clutter_drag_action_set_drag_area
-clutter_drag_action_set_drag_axis
-clutter_drag_action_set_drag_handle
-clutter_drag_action_set_drag_threshold
-clutter_drag_axis_get_type
-clutter_drop_action_get_type
-clutter_drop_action_new
-clutter_effect_get_type
-clutter_effect_paint_flags_get_type
-clutter_effect_queue_repaint
-clutter_events_pending
-clutter_event_copy
-clutter_event_flags_get_type
-clutter_event_free
-clutter_event_get_angle
-clutter_event_get_axes
-clutter_event_get_button
-clutter_event_get_click_count
-clutter_event_get_coords
-clutter_event_get_device
-clutter_event_get_device_id
-clutter_event_get_device_type
-clutter_event_get_distance
-clutter_event_get_event_sequence
-clutter_event_get_flags
-clutter_event_get_key_code
-clutter_event_get_key_symbol
-clutter_event_get_key_unicode
-clutter_event_get_position
-clutter_event_get_related
-clutter_event_get_scroll_delta
-clutter_event_get_scroll_direction
-clutter_event_get_source
-clutter_event_get_source_device
-clutter_event_get_stage
-clutter_event_get_state
-clutter_event_get_type
-clutter_event_get_time
-clutter_event_get
-clutter_event_has_control_modifier
-clutter_event_has_shift_modifier
-clutter_event_is_pointer_emulated
-clutter_event_new
-clutter_event_peek
-clutter_event_put
-clutter_event_set_button
-clutter_event_set_coords
-clutter_event_set_device
-clutter_event_set_flags
-clutter_event_set_key_code
-clutter_event_set_key_symbol
-clutter_event_set_key_unicode
-clutter_event_set_related
-clutter_event_set_scroll_delta
-clutter_event_set_scroll_direction
-clutter_event_set_source
-clutter_event_set_source_device
-clutter_event_set_stage
-clutter_event_set_state
-clutter_event_set_time
-clutter_event_type
-clutter_event_type_get_type
-clutter_feature_available
-clutter_feature_flags_get_type
-clutter_feature_get_all
-clutter_fixed_layout_get_type
-clutter_fixed_layout_new
-clutter_flow_layout_get_column_spacing
-clutter_flow_layout_get_column_width
-clutter_flow_layout_get_homogeneous
-clutter_flow_layout_get_orientation
-clutter_flow_layout_get_row_height
-clutter_flow_layout_get_row_spacing
-clutter_flow_layout_get_type
-clutter_flow_layout_new
-clutter_flow_layout_set_column_spacing
-clutter_flow_layout_set_column_width
-clutter_flow_layout_set_homogeneous
-clutter_flow_layout_set_orientation
-clutter_flow_layout_set_row_height
-clutter_flow_layout_set_row_spacing
-clutter_flow_orientation_get_type
-clutter_fog_get_type
-clutter_font_flags_get_type
-clutter_frame_source_add
-clutter_frame_source_add_full
-#ifdef CLUTTER_WINDOWING_GDK
-clutter_gdk_disable_event_retrieval
-clutter_gdk_get_default_display
-clutter_gdk_get_stage_from_window
-clutter_gdk_get_stage_window
-clutter_gdk_handle_event
-clutter_gdk_set_display
-clutter_gdk_set_stage_foreign
-#endif
-clutter_geometry_get_type
-clutter_geometry_intersects
-clutter_geometry_union
-clutter_gesture_action_cancel
-clutter_gesture_action_get_device
-clutter_gesture_action_get_last_event
-clutter_gesture_action_get_motion_coords
-clutter_gesture_action_get_motion_delta
-clutter_gesture_action_get_n_current_points
-clutter_gesture_action_get_n_touch_points
-clutter_gesture_action_get_press_coords
-clutter_gesture_action_get_release_coords
-clutter_gesture_action_get_sequence
-clutter_gesture_action_get_type
-clutter_gesture_action_get_velocity
-clutter_gesture_action_set_n_touch_points
-clutter_gesture_action_new
-clutter_get_accessibility_enabled
-clutter_get_actor_by_gid
-clutter_get_current_event
-clutter_get_current_event_time
-clutter_get_debug_enabled
-clutter_get_default_backend
-clutter_get_default_frame_rate
-clutter_get_default_text_direction
-clutter_get_font_flags
-clutter_get_font_map
-clutter_get_input_device_for_id
-clutter_get_keyboard_grab
-clutter_get_motion_events_enabled
-clutter_get_option_group
-clutter_get_option_group_without_init
-clutter_get_pointer_grab
-clutter_get_script_id
-clutter_get_show_fps
-clutter_get_timestamp
-#ifdef CLUTTER_WINDOWING_GLX
-clutter_glx_texture_pixmap_get_type
-clutter_glx_texture_pixmap_new
-clutter_glx_texture_pixmap_new_with_pixmap
-clutter_glx_texture_pixmap_new_with_window
-clutter_glx_texture_pixmap_using_extension
-#endif
-clutter_grab_keyboard
-clutter_grab_pointer
-clutter_grab_pointer_for_device
-clutter_gravity_get_type
-clutter_grid_child_get_type
-clutter_grid_layout_get_type
-clutter_grid_layout_new
-clutter_grid_layout_attach
-clutter_grid_layout_attach_next_to
-clutter_grid_layout_get_child_at
-clutter_grid_layout_insert_row
-clutter_grid_layout_insert_column
-clutter_grid_layout_insert_next_to
-clutter_grid_layout_set_orientation
-clutter_grid_layout_get_orientation
-clutter_grid_layout_set_column_spacing
-clutter_grid_layout_get_column_spacing
-clutter_grid_layout_set_row_spacing
-clutter_grid_layout_get_row_spacing
-clutter_grid_layout_set_column_homogeneous
-clutter_grid_layout_get_column_homogeneous
-clutter_grid_layout_set_row_homogeneous
-clutter_grid_layout_get_row_homogeneous
-clutter_grid_position_get_type
-clutter_group_get_nth_child
-clutter_group_get_n_children
-clutter_group_get_type
-clutter_group_new
-clutter_group_remove_all
-clutter_image_error_get_type
-clutter_image_error_quark
-clutter_image_get_texture
-clutter_image_get_type
-clutter_image_new
-clutter_image_set_area
-clutter_image_set_bytes
-clutter_image_set_data
-clutter_init
-clutter_init_error_get_type
-clutter_init_error_quark
-clutter_init_with_args
-clutter_interpolation_get_type
-clutter_interval_clone
-clutter_interval_compute
-clutter_interval_compute_value
-clutter_interval_get_final_value
-clutter_interval_get_initial_value
-clutter_interval_get_interval
-clutter_interval_get_type
-clutter_interval_get_value_type
-clutter_interval_is_valid
-clutter_interval_new
-clutter_interval_new_with_values
-clutter_interval_peek_final_value
-clutter_interval_peek_initial_value
-clutter_interval_register_progress_func
-clutter_interval_set_final_value
-clutter_interval_set_final
-clutter_interval_set_initial_value
-clutter_interval_set_initial
-clutter_interval_set_interval
-clutter_interval_validate
-clutter_input_axis_get_type
-clutter_input_device_get_associated_device
-clutter_input_device_get_axis
-clutter_input_device_get_axis_value
-clutter_input_device_get_coords
-clutter_input_device_get_device_coords
-clutter_input_device_get_device_id
-clutter_input_device_get_device_name
-clutter_input_device_get_device_mode
-clutter_input_device_get_device_type
-clutter_input_device_get_enabled
-clutter_input_device_get_grabbed_actor
-clutter_input_device_get_has_cursor
-clutter_input_device_get_key
-clutter_input_device_get_n_axes
-clutter_input_device_get_n_keys
-clutter_input_device_get_pointer_actor
-clutter_input_device_get_pointer_stage
-clutter_input_device_get_slave_devices
-clutter_input_device_get_type
-clutter_input_device_grab
-clutter_input_device_keycode_to_evdev
-clutter_input_device_sequence_get_grabbed_actor
-clutter_input_device_sequence_grab
-clutter_input_device_sequence_ungrab
-clutter_input_device_set_enabled
-clutter_input_device_set_key
-clutter_input_device_type_get_type
-clutter_input_device_ungrab
-clutter_input_device_update_from_event
-clutter_input_mode_get_type
-clutter_keyframe_transition_clear
-clutter_keyframe_transition_get_key_frame
-clutter_keyframe_transition_get_n_key_frames
-clutter_keyframe_transition_get_type
-clutter_keyframe_transition_new
-clutter_keyframe_transition_set_key_frames
-clutter_keyframe_transition_set_key_frame
-clutter_keyframe_transition_set_modes
-clutter_keyframe_transition_set_values
-clutter_keyframe_transition_set
-clutter_keysym_to_unicode
-clutter_knot_copy
-clutter_knot_equal
-clutter_knot_free
-clutter_knot_get_type
-clutter_layout_meta_get_manager
-clutter_layout_meta_get_type
-clutter_layout_manager_allocate
-clutter_layout_manager_begin_animation
-clutter_layout_manager_child_get
-clutter_layout_manager_child_get_property
-clutter_layout_manager_child_set
-clutter_layout_manager_child_set_property
-clutter_layout_manager_end_animation
-clutter_layout_manager_find_child_property
-clutter_layout_manager_get_animation_progress
-clutter_layout_manager_get_child_meta
-clutter_layout_manager_get_preferred_width
-clutter_layout_manager_get_preferred_height
-clutter_layout_manager_get_type
-clutter_layout_manager_layout_changed
-clutter_layout_manager_list_child_properties
-clutter_layout_manager_set_container
-clutter_list_model_get_type
-clutter_list_model_iter_get_type
-clutter_list_model_new
-clutter_list_model_newv
-clutter_long_press_state_get_type
-clutter_main
-clutter_main_level
-clutter_main_quit
-clutter_major_version DATA
-clutter_margin_copy
-clutter_margin_free
-clutter_margin_get_type
-clutter_margin_new
-clutter_matrix_alloc
-clutter_matrix_free
-clutter_matrix_get_type
-clutter_matrix_init_identity
-clutter_matrix_init_from_array
-clutter_matrix_init_from_matrix
-clutter_media_get_audio_volume
-clutter_media_get_buffer_fill
-clutter_media_get_can_seek
-clutter_media_get_duration
-clutter_media_get_playing
-clutter_media_get_progress
-clutter_media_get_subtitle_font_name
-clutter_media_get_subtitle_uri
-clutter_media_get_type
-clutter_media_get_uri
-clutter_media_set_audio_volume
-clutter_media_set_filename
-clutter_media_set_playing
-clutter_media_set_progress
-clutter_media_set_subtitle_font_name
-clutter_media_set_subtitle_uri
-clutter_media_set_uri
-clutter_micro_version DATA
-clutter_minor_version DATA
-clutter_model_append
-clutter_model_appendv
-clutter_model_filter_iter
-clutter_model_filter_row
-clutter_model_foreach
-clutter_model_get_column_name
-clutter_model_get_column_type
-clutter_model_get_filter_set
-clutter_model_get_first_iter
-clutter_model_get_iter_at_row
-clutter_model_get_last_iter
-clutter_model_get_n_columns
-clutter_model_get_n_rows
-clutter_model_get_sorting_column
-clutter_model_get_type
-clutter_model_insert
-clutter_model_insertv
-clutter_model_insert_value
-clutter_model_iter_copy
-clutter_model_iter_get
-clutter_model_iter_get_model
-clutter_model_iter_get_row
-clutter_model_iter_get_type
-clutter_model_iter_get_valist
-clutter_model_iter_get_value
-clutter_model_iter_is_first
-clutter_model_iter_is_last
-clutter_model_iter_next
-clutter_model_iter_prev
-clutter_model_iter_set
-clutter_model_iter_set_valist
-clutter_model_iter_set_value
-clutter_model_prepend
-clutter_model_prependv
-clutter_model_remove
-clutter_model_resort
-clutter_model_set_filter
-clutter_model_set_names
-clutter_model_set_sort
-clutter_model_set_sorting_column
-clutter_model_set_types
-clutter_modifier_type_get_type
-clutter_offscreen_effect_create_texture
-clutter_offscreen_effect_get_target
-clutter_offscreen_effect_get_target_rect
-clutter_offscreen_effect_get_target_size
-clutter_offscreen_effect_get_texture
-clutter_offscreen_effect_get_type
-clutter_offscreen_effect_paint_target
-clutter_offscreen_redirect_get_type
-clutter_orientation_get_type
-clutter_page_turn_effect_get_angle
-clutter_page_turn_effect_get_period
-clutter_page_turn_effect_get_radius
-clutter_page_turn_effect_get_type
-clutter_page_turn_effect_new
-clutter_page_turn_effect_set_angle
-clutter_page_turn_effect_set_period
-clutter_page_turn_effect_set_radius
-clutter_paint_debug_flags DATA
-clutter_paint_node_add_child
-clutter_paint_node_add_path
-clutter_paint_node_add_primitive
-clutter_paint_node_add_rectangle
-clutter_paint_node_add_texture_rectangle
-clutter_paint_node_get_type
-clutter_paint_node_ref
-clutter_paint_node_set_name
-clutter_paint_node_unref
-clutter_path_add_cairo_path
-clutter_path_add_close
-clutter_path_add_curve_to
-clutter_path_add_line_to
-clutter_path_add_move_to
-clutter_path_add_node
-clutter_path_add_string
-clutter_path_add_rel_curve_to
-clutter_path_add_rel_line_to
-clutter_path_add_rel_move_to
-clutter_path_clear
-clutter_path_constraint_get_offset
-clutter_path_constraint_get_path
-clutter_path_constraint_get_type
-clutter_path_constraint_new
-clutter_path_constraint_set_offset
-clutter_path_constraint_set_path
-clutter_path_foreach
-clutter_path_get_description
-clutter_path_get_length
-clutter_path_get_node
-clutter_path_get_nodes
-clutter_path_get_n_nodes
-clutter_path_get_position
-clutter_path_get_type
-clutter_path_insert_node
-clutter_path_new
-clutter_path_new_with_description
-clutter_path_node_copy
-clutter_path_node_equal
-clutter_path_node_free
-clutter_path_node_get_type
-clutter_path_node_type_get_type
-clutter_path_remove_node
-clutter_path_replace_node
-clutter_path_set_description
-clutter_path_to_cairo_path
-clutter_paint_volume_copy
-clutter_paint_volume_free
-clutter_paint_volume_get_depth
-clutter_paint_volume_get_height
-clutter_paint_volume_get_origin
-clutter_paint_volume_get_type
-clutter_paint_volume_get_width
-clutter_paint_volume_set_depth
-clutter_paint_volume_set_from_allocation
-clutter_paint_volume_set_height
-clutter_paint_volume_set_origin
-clutter_paint_volume_set_width
-clutter_paint_volume_union_box
-clutter_paint_volume_union
-clutter_pan_axis_get_type
-clutter_pan_action_get_type
-clutter_pan_action_get_acceleration_factor
-clutter_pan_action_get_deceleration
-clutter_pan_action_get_interpolated_coords
-clutter_pan_action_get_interpolated_delta
-clutter_pan_action_get_interpolate
-clutter_pan_action_get_motion_coords
-clutter_pan_action_get_motion_delta
-clutter_pan_action_get_pan_axis
-clutter_pan_action_new
-clutter_pan_action_set_acceleration_factor
-clutter_pan_action_set_deceleration
-clutter_pan_action_set_interpolate
-clutter_pan_action_set_pan_axis
-clutter_param_color_get_type
-clutter_param_fixed_get_type
-clutter_param_spec_color
-clutter_param_spec_fixed
-clutter_param_spec_units
-clutter_param_units_get_type
-clutter_perspective_get_type
-clutter_pick_debug_flags DATA
-clutter_pipeline_node_get_type
-clutter_pipeline_node_new
-clutter_pick_mode_get_type
-clutter_point_alloc
-clutter_point_copy
-clutter_point_distance
-clutter_point_equals
-clutter_point_free
-clutter_point_get_type
-clutter_point_init
-clutter_point_zero
-clutter_profile_flags DATA
-clutter_property_transition_get_property_name
-clutter_property_transition_get_type
-clutter_property_transition_new
-clutter_property_transition_set_property_name
-clutter_rect_alloc
-clutter_rect_clamp_to_pixel
-clutter_rect_contains_point
-clutter_rect_contains_rect
-clutter_rect_copy
-clutter_rect_equals
-clutter_rect_free
-clutter_rect_get_center
-clutter_rect_get_height
-clutter_rect_get_type
-clutter_rect_get_width
-clutter_rect_get_x
-clutter_rect_get_y
-clutter_rect_init
-clutter_rect_inset
-clutter_rect_intersection
-clutter_rect_normalize
-clutter_rect_offset
-clutter_rect_union
-clutter_rect_zero
-clutter_rectangle_get_border_color
-clutter_rectangle_get_border_width
-clutter_rectangle_get_color
-clutter_rectangle_get_type
-clutter_rectangle_new
-clutter_rectangle_new_with_color
-clutter_rectangle_set_border_color
-clutter_rectangle_set_border_width
-clutter_rectangle_set_color
-clutter_redraw
-clutter_repaint_flags_get_type
-clutter_request_mode_get_type
-clutter_rotate_action_get_type
-clutter_rotate_action_new
-clutter_rotate_axis_get_type
-clutter_rotate_direction_get_type
-clutter_scaling_filter_get_type
-clutter_score_append
-clutter_score_append_at_marker
-clutter_score_get_loop
-clutter_score_get_timeline
-clutter_score_get_type
-clutter_score_is_playing
-clutter_score_list_timelines
-clutter_score_new
-clutter_score_pause
-clutter_score_remove
-clutter_score_remove_all
-clutter_score_rewind
-clutter_score_set_loop
-clutter_score_start
-clutter_score_stop
-clutter_scriptable_get_id
-clutter_scriptable_get_type
-clutter_scriptable_parse_custom_node
-clutter_scriptable_set_custom_property
-clutter_scriptable_set_id
-clutter_script_add_search_paths
-clutter_script_add_states
-clutter_script_connect_signals
-clutter_script_connect_signals_full
-clutter_script_ensure_objects
-clutter_script_error_get_type
-clutter_script_error_quark
-clutter_script_get_object
-clutter_script_get_objects
-clutter_script_get_states
-clutter_script_get_translation_domain
-clutter_script_get_type
-clutter_script_get_type_from_name
-clutter_script_list_objects
-clutter_script_load_from_data
-clutter_script_load_from_file
-clutter_script_load_from_resource
-clutter_script_lookup_filename
-clutter_script_new
-clutter_script_set_translation_domain
-clutter_script_unmerge_objects
-clutter_scroll_actor_get_scroll_mode
-clutter_scroll_actor_get_type
-clutter_scroll_actor_new
-clutter_scroll_actor_scroll_to_point
-clutter_scroll_actor_scroll_to_rect
-clutter_scroll_actor_set_scroll_mode
-clutter_scroll_direction_get_type
-clutter_scroll_mode_get_type
-clutter_settings_get_default
-clutter_settings_get_type
-clutter_set_default_frame_rate
-clutter_set_font_flags
-clutter_set_motion_events_enabled
-clutter_shader_compile
-clutter_shader_effect_get_program
-clutter_shader_effect_get_shader
-clutter_shader_effect_get_type
-clutter_shader_effect_new
-clutter_shader_effect_set_shader_source
-clutter_shader_effect_set_uniform
-clutter_shader_effect_set_uniform_value
-clutter_shader_error_quark
-clutter_shader_float_get_type
-clutter_shader_get_cogl_fragment_shader
-clutter_shader_get_cogl_program
-clutter_shader_get_cogl_vertex_shader
-clutter_shader_get_fragment_source
-clutter_shader_get_is_enabled
-clutter_shader_get_type
-clutter_shader_get_vertex_source
-clutter_shader_int_get_type
-clutter_shader_is_compiled
-clutter_shader_matrix_get_type
-clutter_shader_new
-clutter_shader_release
-clutter_shader_set_fragment_source
-clutter_shader_set_is_enabled
-clutter_shader_set_uniform
-clutter_shader_set_vertex_source
-clutter_shader_type_get_type
-clutter_size_alloc
-clutter_size_copy
-clutter_size_equals
-clutter_size_free
-clutter_size_get_type
-clutter_size_init
-clutter_snap_constraint_get_edges
-clutter_snap_constraint_get_offset
-clutter_snap_constraint_get_source
-clutter_snap_constraint_get_type
-clutter_snap_constraint_new
-clutter_snap_constraint_set_edges
-clutter_snap_constraint_set_offset
-clutter_snap_constraint_set_source
-clutter_snap_edge_get_type
-clutter_stage_ensure_current
-clutter_stage_ensure_redraw
-clutter_stage_ensure_viewport
-clutter_stage_event
-clutter_stage_get_accept_focus
-clutter_stage_get_actor_at_pos
-clutter_stage_get_color
-clutter_stage_get_default
-clutter_stage_get_fog
-clutter_stage_get_fullscreen
-clutter_stage_get_key_focus
-clutter_stage_get_minimum_size
-clutter_stage_get_motion_events_enabled
-clutter_stage_get_no_clear_hint
-clutter_stage_get_perspective
-clutter_stage_get_throttle_motion_events
-clutter_stage_get_title
-clutter_stage_get_type
-clutter_stage_get_user_resizable
-clutter_stage_get_use_alpha
-clutter_stage_get_use_fog
-clutter_stage_hide_cursor
-clutter_stage_is_default
-clutter_stage_manager_get_default
-clutter_stage_manager_get_default_stage
-clutter_stage_manager_get_type
-clutter_stage_manager_list_stages
-clutter_stage_manager_peek_stages
-clutter_stage_manager_set_default_stage
-
-#ifdef HAVE_CLUTTER_EGL
-
-#ifndef CLUTTER_DISABLE_DEPRECATED
-#ifdef CLUTTER_EGL_BACKEND_CEX100
-clutter_cex100_set_buffering_mode
-#endif
-clutter_eglx_display
-clutter_egl_display
-#endif
-
-clutter_egl_get_egl_display
-#endif
-
-clutter_stage_new
-clutter_stage_queue_redraw
-clutter_stage_read_pixels
-clutter_stage_set_accept_focus
-clutter_stage_set_color
-clutter_stage_set_fog
-clutter_stage_set_fullscreen
-clutter_stage_set_key_focus
-clutter_stage_set_minimum_size
-clutter_stage_set_motion_events_enabled
-clutter_stage_set_no_clear_hint
-clutter_stage_set_perspective
-clutter_stage_set_sync_delay
-clutter_stage_set_throttle_motion_events
-clutter_stage_set_title
-clutter_stage_set_user_resizable
-clutter_stage_set_use_alpha
-clutter_stage_set_use_fog
-clutter_stage_skip_sync_delay
-clutter_stage_state_get_type
-clutter_stage_show_cursor
-clutter_state_get_animator
-clutter_state_get_duration
-clutter_state_get_keys
-clutter_stage_get_redraw_clip_bounds
-clutter_state_get_state
-clutter_state_get_states
-clutter_state_get_timeline
-clutter_state_get_type
-clutter_state_key_get_mode
-clutter_state_key_get_object
-clutter_state_key_get_post_delay
-clutter_state_key_get_pre_delay
-clutter_state_key_get_property_name
-clutter_state_key_get_property_type
-clutter_state_key_get_source_state_name
-clutter_state_key_get_target_state_name
-clutter_state_key_get_type
-clutter_state_key_get_value
-clutter_state_new
-clutter_state_remove_key
-clutter_state_set
-clutter_state_set_animator
-clutter_state_set_duration
-clutter_state_set_key
-clutter_state_set_state
-clutter_state_warp_to_state
-clutter_static_color_get_type
-clutter_step_mode_get_type
-clutter_swipe_action_get_type
-clutter_swipe_action_new
-clutter_swipe_direction_get_type
-clutter_table_alignment_get_type
-clutter_table_child_get_type
-clutter_table_layout_get_alignment
-clutter_table_layout_get_column_count
-clutter_table_layout_get_column_spacing
-clutter_table_layout_get_easing_duration
-clutter_table_layout_get_easing_mode
-clutter_table_layout_get_expand
-clutter_table_layout_get_fill
-clutter_table_layout_get_row_count
-clutter_table_layout_get_row_spacing
-clutter_table_layout_get_span
-clutter_table_layout_get_type
-clutter_table_layout_get_use_animations
-clutter_table_layout_new
-clutter_table_layout_pack
-clutter_table_layout_set_alignment
-clutter_table_layout_set_column_spacing
-clutter_table_layout_set_easing_duration
-clutter_table_layout_set_easing_mode
-clutter_table_layout_set_expand
-clutter_table_layout_set_fill
-clutter_table_layout_set_row_spacing
-clutter_table_layout_set_span
-clutter_table_layout_set_use_animations
-clutter_tap_action_get_type
-clutter_tap_action_new
-clutter_texture_get_base_size
-clutter_texture_get_cogl_texture
-clutter_texture_get_cogl_material
-clutter_texture_error_get_type
-clutter_texture_error_quark
-clutter_texture_flags_get_type
-clutter_texture_get_filter_quality
-clutter_texture_get_keep_aspect_ratio
-clutter_texture_get_load_async
-clutter_texture_get_load_data_async
-clutter_texture_get_max_tile_waste
-clutter_texture_get_pick_with_alpha
-clutter_texture_get_pixel_format
-clutter_texture_get_repeat
-clutter_texture_get_sync_size
-clutter_texture_get_type
-clutter_texture_new
-clutter_texture_new_from_actor
-clutter_texture_new_from_file
-clutter_texture_node_get_type
-clutter_texture_node_new
-clutter_texture_quality_get_type
-clutter_texture_set_area_from_rgb_data
-clutter_texture_set_cogl_material
-clutter_texture_set_cogl_texture
-clutter_texture_set_filter_quality
-clutter_texture_set_from_file
-clutter_texture_set_from_rgb_data
-clutter_texture_set_from_yuv_data
-clutter_texture_set_keep_aspect_ratio
-clutter_texture_set_load_async
-clutter_texture_set_load_data_async
-clutter_texture_set_pick_with_alpha
-clutter_texture_set_repeat
-clutter_texture_set_sync_size
-clutter_text_buffer_emit_deleted_text
-clutter_text_buffer_emit_inserted_text
-clutter_text_buffer_get_bytes
-clutter_text_buffer_get_length
-clutter_text_buffer_get_max_length
-clutter_text_buffer_get_text
-clutter_text_buffer_get_type
-clutter_text_buffer_delete_text
-clutter_text_buffer_insert_text
-clutter_text_buffer_new_with_text
-clutter_text_buffer_new
-clutter_text_buffer_set_max_length
-clutter_text_buffer_set_text
-clutter_text_activate
-clutter_text_coords_to_position
-clutter_text_delete_chars
-clutter_text_delete_selection
-clutter_text_delete_text
-clutter_text_direction_get_type
-clutter_text_get_activatable
-clutter_text_get_attributes
-clutter_text_get_buffer
-clutter_text_get_chars
-clutter_text_get_color
-clutter_text_get_cursor_color
-clutter_text_get_cursor_position
-clutter_text_get_cursor_rect
-clutter_text_get_cursor_size
-clutter_text_get_cursor_visible
-clutter_text_get_editable
-clutter_text_get_ellipsize
-clutter_text_get_font_description
-clutter_text_get_font_name
-clutter_text_get_justify
-clutter_text_get_line_alignment
-clutter_text_get_layout
-clutter_text_get_layout_offsets
-clutter_text_get_line_wrap
-clutter_text_get_line_wrap_mode
-clutter_text_get_max_length
-clutter_text_get_password_char
-clutter_text_get_selectable
-clutter_text_get_selected_text_color
-clutter_text_get_selection
-clutter_text_get_selection_bound
-clutter_text_get_selection_color
-clutter_text_get_single_line_mode
-clutter_text_get_text
-clutter_text_get_type
-clutter_text_get_use_markup
-clutter_text_insert_text
-clutter_text_insert_unichar
-clutter_text_new
-clutter_text_new_full
-clutter_text_new_with_buffer
-clutter_text_new_with_text
-clutter_text_node_get_type
-clutter_text_node_new
-clutter_text_position_to_coords
-clutter_text_set_activatable
-clutter_text_set_attributes
-clutter_text_set_buffer
-clutter_text_set_color
-clutter_text_set_cursor_color
-clutter_text_set_cursor_position
-clutter_text_set_cursor_size
-clutter_text_set_cursor_visible
-clutter_text_set_editable
-clutter_text_set_ellipsize
-clutter_text_set_font_description
-clutter_text_set_font_name
-clutter_text_set_justify
-clutter_text_set_line_alignment
-clutter_text_set_line_wrap
-clutter_text_set_line_wrap_mode
-clutter_text_set_markup
-clutter_text_set_max_length
-clutter_text_set_password_char
-clutter_text_set_preedit_string
-clutter_text_set_selectable
-clutter_text_set_selected_text_color
-clutter_text_set_selection
-clutter_text_set_selection_bound
-clutter_text_set_selection_color
-clutter_text_set_single_line_mode
-clutter_text_set_text
-clutter_text_set_use_markup
-clutter_threads_add_frame_source
-clutter_threads_add_frame_source_full
-clutter_threads_add_idle
-clutter_threads_add_idle_full
-clutter_threads_add_repaint_func
-clutter_threads_add_repaint_func_full
-clutter_threads_add_timeout
-clutter_threads_add_timeout_full
-clutter_threads_enter
-clutter_threads_init
-clutter_threads_leave
-clutter_threads_remove_repaint_func
-clutter_threads_set_lock_functions
-clutter_timeline_add_marker
-clutter_timeline_add_marker_at_time
-clutter_timeline_advance
-clutter_timeline_advance_to_marker
-clutter_timeline_new
-clutter_timeline_clone
-clutter_timeline_direction_get_type
-clutter_timeline_get_auto_reverse
-clutter_timeline_get_cubic_bezier_progress
-clutter_timeline_get_current_repeat
-clutter_timeline_get_delay
-clutter_timeline_get_delta
-clutter_timeline_get_direction
-clutter_timeline_get_duration_hint
-clutter_timeline_get_duration
-clutter_timeline_get_elapsed_time
-clutter_timeline_get_loop
-clutter_timeline_get_progress_mode
-clutter_timeline_get_progress
-clutter_timeline_get_repeat_count
-clutter_timeline_get_step_progress
-clutter_timeline_get_type
-clutter_timeline_has_marker
-clutter_timeline_is_playing
-clutter_timeline_list_markers
-clutter_timeline_pause
-clutter_timeline_remove_marker
-clutter_timeline_rewind
-clutter_timeline_set_auto_reverse
-clutter_timeline_set_cubic_bezier_progress
-clutter_timeline_set_delay
-clutter_timeline_set_direction
-clutter_timeline_set_duration
-clutter_timeline_set_loop
-clutter_timeline_set_progress_func
-clutter_timeline_set_progress_mode
-clutter_timeline_set_repeat_count
-clutter_timeline_set_step_progress
-clutter_timeline_skip
-clutter_timeline_start
-clutter_timeline_stop
-clutter_timeout_pool_add
-clutter_timeout_pool_new
-clutter_timeout_pool_remove
-clutter_transition_group_add_transition
-clutter_transition_group_get_type
-clutter_transition_group_new
-clutter_transition_group_remove_transition
-clutter_transition_group_remove_all
-clutter_transition_get_animatable
-clutter_transition_get_interval
-clutter_transition_get_type
-clutter_transition_get_remove_on_complete
-clutter_transition_set_animatable
-clutter_transition_set_from_value
-clutter_transition_set_from
-clutter_transition_set_interval
-clutter_transition_set_remove_on_complete
-clutter_transition_set_to_value
-clutter_transition_set_to
-clutter_ungrab_keyboard
-clutter_ungrab_pointer
-clutter_ungrab_pointer_for_device
-clutter_unicode_to_keysym
-clutter_units_copy
-clutter_units_free
-clutter_units_from_cm
-clutter_units_from_em
-clutter_units_from_em_for_font
-clutter_units_from_mm
-clutter_units_from_pixels
-clutter_units_from_pt
-clutter_units_from_string
-clutter_units_get_type
-clutter_units_get_unit_type
-clutter_units_get_unit_value
-clutter_units_to_pixels
-clutter_units_to_string
-clutter_unit_type_get_type
-clutter_util_next_p2
-clutter_value_dup_paint_node
-clutter_value_get_color
-clutter_value_get_fixed
-clutter_value_get_paint_node
-clutter_value_get_shader_float
-clutter_value_get_shader_int
-clutter_value_get_shader_matrix
-clutter_value_get_units
-clutter_value_set_color
-clutter_value_set_fixed
-clutter_value_set_paint_node
-clutter_value_set_shader_float
-clutter_value_set_shader_int
-clutter_value_set_shader_matrix
-clutter_value_set_units
-clutter_value_take_paint_node
-clutter_vertex_alloc
-clutter_vertex_copy
-clutter_vertex_equal
-clutter_vertex_free
-clutter_vertex_get_type
-clutter_vertex_init
-clutter_vertex_new
-#ifdef CLUTTER_WINDOWING_WAYLAND
-clutter_wayland_input_device_get_wl_seat
-clutter_wayland_stage_get_wl_shell_surface
-clutter_wayland_stage_get_wl_surface
-#endif
-#ifdef CLUTTER_WINDOWING_WIN32
-clutter_win32_disable_event_retrieval
-clutter_win32_get_stage_from_window
-clutter_win32_get_stage_window
-clutter_win32_set_stage_foreign
-clutter_win32_handle_event
-#endif
-#ifdef CLUTTER_WINDOWING_X11
-clutter_x11_add_filter
-clutter_x11_disable_event_retrieval
-clutter_x11_enable_xinput
-clutter_x11_event_get_key_group
-clutter_x11_event_sequence_get_touch_detail
-clutter_x11_filter_return_get_type
-clutter_x11_get_current_event_time
-clutter_x11_get_default_display
-clutter_x11_get_default_screen
-clutter_x11_get_input_devices
-clutter_x11_get_root_window
-clutter_x11_get_stage_from_window
-clutter_x11_get_stage_visual
-clutter_x11_get_stage_window
-clutter_x11_get_use_argb_visual
-clutter_x11_get_visual_info
-clutter_x11_handle_event
-clutter_x11_has_composite_extension
-clutter_x11_has_event_retrieval
-clutter_x11_has_xinput
-clutter_x11_remove_filter
-clutter_x11_set_use_argb_visual
-clutter_x11_set_display
-clutter_x11_set_stage_foreign
-clutter_x11_texture_pixmap_get_type
-clutter_x11_texture_pixmap_new
-clutter_x11_texture_pixmap_new_with_pixmap
-clutter_x11_texture_pixmap_new_with_window
-clutter_x11_texture_pixmap_set_automatic
-clutter_x11_texture_pixmap_set_pixmap
-clutter_x11_texture_pixmap_set_window
-clutter_x11_texture_pixmap_sync_window
-clutter_x11_texture_pixmap_update_area
-clutter_x11_trap_x_errors
-clutter_x11_untrap_x_errors
-clutter_x11_xinput_event_types_get_type
-#endif
-clutter_zoom_action_get_focal_point
-clutter_zoom_action_get_transformed_focal_point
-clutter_zoom_action_get_type
-clutter_zoom_action_get_zoom_axis
-clutter_zoom_action_new
-clutter_zoom_action_set_zoom_axis
-clutter_zoom_axis_get_type
diff --git a/clutter/cogl/clutter-stage-cogl.c b/clutter/cogl/clutter-stage-cogl.c
index c7fb5be2b..0b8f27987 100644
--- a/clutter/cogl/clutter-stage-cogl.c
+++ b/clutter/cogl/clutter-stage-cogl.c
@@ -160,10 +160,10 @@ clutter_stage_cogl_realize (ClutterStageWindow *stage_window)
* updated to this size. */
stage_cogl->frame_closure =
- cogl_onscreen_add_frame_callback (stage_cogl->onscreen,
- frame_cb,
- stage_cogl,
- NULL);
+ cogl_onscreen_add_frame_callback (stage_cogl->onscreen,
+ frame_cb,
+ stage_cogl,
+ NULL);
return TRUE;
}
@@ -260,8 +260,11 @@ clutter_stage_cogl_get_geometry (ClutterStageWindow *stage_window,
cairo_rectangle_int_t *geometry)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+ int window_scale;
- if (geometry)
+ window_scale = _clutter_stage_window_get_scale_factor (stage_window);
+
+ if (geometry != NULL)
{
if (stage_cogl->onscreen)
{
@@ -270,8 +273,8 @@ clutter_stage_cogl_get_geometry (ClutterStageWindow *stage_window,
geometry->x = geometry->y = 0;
- geometry->width = cogl_framebuffer_get_width (framebuffer);
- geometry->height = cogl_framebuffer_get_height (framebuffer);
+ geometry->width = cogl_framebuffer_get_width (framebuffer) / window_scale;
+ geometry->height = cogl_framebuffer_get_height (framebuffer) / window_scale;
}
else
{
@@ -284,8 +287,8 @@ clutter_stage_cogl_get_geometry (ClutterStageWindow *stage_window,
static void
clutter_stage_cogl_resize (ClutterStageWindow *stage_window,
- gint width,
- gint height)
+ gint width,
+ gint height)
{
}
@@ -395,6 +398,8 @@ static void
clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+ cairo_rectangle_int_t geom;
+ gboolean have_clip;
gboolean may_use_clipped_redraw;
gboolean use_clipped_redraw;
gboolean can_blit_sub_buffer;
@@ -402,6 +407,7 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
ClutterActor *wrapper;
cairo_rectangle_int_t *clip_region;
gboolean force_swap;
+ int window_scale;
CLUTTER_STATIC_TIMER (painting_timer,
"Redrawing", /* parent */
@@ -431,11 +437,19 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
has_buffer_age = cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_BUFFER_AGE);
+ _clutter_stage_window_get_geometry (stage_window, &geom);
+
+ /* NB: a zero width redraw clip == full stage redraw */
+ have_clip = (stage_cogl->bounding_redraw_clip.width != 0 &&
+ !(stage_cogl->bounding_redraw_clip.x == 0 &&
+ stage_cogl->bounding_redraw_clip.y == 0 &&
+ stage_cogl->bounding_redraw_clip.width == geom.width &&
+ stage_cogl->bounding_redraw_clip.height == geom.height));
+
may_use_clipped_redraw = FALSE;
if (_clutter_stage_window_can_clip_redraws (stage_window) &&
- can_blit_sub_buffer &&
- /* NB: a zero width redraw clip == full stage redraw */
- stage_cogl->bounding_redraw_clip.width != 0 &&
+ (can_blit_sub_buffer || has_buffer_age) &&
+ have_clip &&
/* some drivers struggle to get going and produce some junk
* frames when starting up... */
stage_cogl->frame_count > 3)
@@ -443,16 +457,19 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
may_use_clipped_redraw = TRUE;
clip_region = &stage_cogl->bounding_redraw_clip;
}
+ else
+ clip_region = NULL;
if (may_use_clipped_redraw &&
- G_LIKELY (!(clutter_paint_debug_flags &
- CLUTTER_DEBUG_DISABLE_CLIPPED_REDRAWS)))
+ G_LIKELY (!(clutter_paint_debug_flags & CLUTTER_DEBUG_DISABLE_CLIPPED_REDRAWS)))
use_clipped_redraw = TRUE;
else
use_clipped_redraw = FALSE;
force_swap = FALSE;
+ window_scale = _clutter_stage_window_get_scale_factor (stage_window);
+
if (use_clipped_redraw)
{
if (has_buffer_age)
@@ -468,11 +485,12 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
stage_cogl->damage_history = g_slist_prepend (stage_cogl->damage_history, current_damage);
- if (age != 0 && !stage_cogl->dirty_backbuffer && g_slist_length (stage_cogl->damage_history) >= age)
+ if (age != 0 && !stage_cogl->dirty_backbuffer && g_slist_length (stage_cogl->damage_history) > age)
{
int i = 0;
GSList *tmp = NULL;
- for (tmp = stage_cogl->damage_history; tmp; tmp = tmp->next)
+ /* We skip the first entry because it is the clip_region itself */
+ for (tmp = stage_cogl->damage_history->next; tmp; tmp = tmp->next)
{
_clutter_util_rectangle_union (clip_region, tmp->data, clip_region);
i++;
@@ -486,10 +504,10 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
force_swap = TRUE;
CLUTTER_NOTE (CLIPPING, "Reusing back buffer - repairing region: x=%d, y=%d, width=%d, height=%d\n",
- clip_region->x,
- clip_region->y,
- clip_region->width,
- clip_region->height);
+ clip_region->x,
+ clip_region->y,
+ clip_region->width,
+ clip_region->height);
}
else if (age == 0 || stage_cogl->dirty_backbuffer)
@@ -501,7 +519,7 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
}
}
- else
+ else if (has_buffer_age)
{
CLUTTER_NOTE (CLIPPING, "Unclipped redraw: Resetting damage history list.\n");
g_slist_free_full (stage_cogl->damage_history, g_free);
@@ -513,6 +531,8 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
if (use_clipped_redraw)
{
+ CoglFramebuffer *fb = COGL_FRAMEBUFFER (stage_cogl->onscreen);
+
CLUTTER_NOTE (CLIPPING,
"Stage clip pushed: x=%d, y=%d, width=%d, height=%d\n",
clip_region->x,
@@ -522,13 +542,13 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
stage_cogl->using_clipped_redraw = TRUE;
- cogl_clip_push_window_rectangle (clip_region->x,
- clip_region->y,
- clip_region->width,
- clip_region->height);
- _clutter_stage_do_paint (CLUTTER_STAGE (wrapper),
- clip_region);
- cogl_clip_pop ();
+ cogl_framebuffer_push_scissor_clip (fb,
+ clip_region->x * window_scale,
+ clip_region->y * window_scale,
+ clip_region->width * window_scale,
+ clip_region->height * window_scale);
+ _clutter_stage_do_paint (CLUTTER_STAGE (wrapper), clip_region);
+ cogl_framebuffer_pop_clip (fb);
stage_cogl->using_clipped_redraw = FALSE;
}
@@ -538,12 +558,10 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
/* If we are trying to debug redraw issues then we want to pass
* the bounding_redraw_clip so it can be visualized */
- if (G_UNLIKELY (clutter_paint_debug_flags &
- CLUTTER_DEBUG_DISABLE_CLIPPED_REDRAWS) &&
+ if (G_UNLIKELY (clutter_paint_debug_flags & CLUTTER_DEBUG_DISABLE_CLIPPED_REDRAWS) &&
may_use_clipped_redraw)
{
- _clutter_stage_do_paint (CLUTTER_STAGE (wrapper),
- clip_region);
+ _clutter_stage_do_paint (CLUTTER_STAGE (wrapper), clip_region);
}
else
_clutter_stage_do_paint (CLUTTER_STAGE (wrapper), NULL);
@@ -557,10 +575,10 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
static CoglPipeline *outline = NULL;
cairo_rectangle_int_t *clip = &stage_cogl->bounding_redraw_clip;
ClutterActor *actor = CLUTTER_ACTOR (wrapper);
- float x_1 = clip->x;
- float x_2 = clip->x + clip->width;
- float y_1 = clip->y;
- float y_2 = clip->y + clip->height;
+ float x_1 = clip->x * window_scale;
+ float x_2 = clip->x + clip->width * window_scale;
+ float y_1 = clip->y * window_scale;
+ float y_2 = clip->y + clip->height * window_scale;
CoglVertexP2 quad[4] = {
{ x_1, y_1 },
{ x_2, y_1 },
@@ -609,10 +627,10 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
* artefacts.
*/
- copy_area[0] = clip->x;
- copy_area[1] = clip->y;
- copy_area[2] = clip->width;
- copy_area[3] = clip->height;
+ copy_area[0] = clip->x * window_scale;
+ copy_area[1] = clip->y * window_scale;
+ copy_area[2] = clip->width * window_scale;
+ copy_area[3] = clip->height * window_scale;
CLUTTER_NOTE (BACKEND,
"cogl_onscreen_swap_region (onscreen: %p, "
@@ -671,22 +689,24 @@ clutter_stage_cogl_dirty_back_buffer (ClutterStageWindow *stage_window)
static void
clutter_stage_cogl_get_dirty_pixel (ClutterStageWindow *stage_window,
- int *x, int *y)
+ int *x,
+ int *y)
{
- ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
- gboolean has_buffer_age = cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_BUFFER_AGE);
- if ((stage_cogl->damage_history == NULL && has_buffer_age) || !has_buffer_age)
- {
- *x = 0;
- *y = 0;
- }
- else
- {
- cairo_rectangle_int_t *rect;
- rect = (cairo_rectangle_int_t *) (stage_cogl->damage_history->data);
- *x = rect->x;
- *y = rect->y;
- }
+ ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+ gboolean has_buffer_age = cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_BUFFER_AGE);
+
+ if ((stage_cogl->damage_history == NULL && has_buffer_age) || !has_buffer_age)
+ {
+ *x = 0;
+ *y = 0;
+ }
+ else
+ {
+ cairo_rectangle_int_t *rect;
+ rect = (cairo_rectangle_int_t *) (stage_cogl->damage_history->data);
+ *x = rect->x;
+ *y = rect->y;
+ }
}
static void
diff --git a/clutter/config.h.win32.in b/clutter/config.h.win32.in
index 798bfcb73..f53803555 100644
--- a/clutter/config.h.win32.in
+++ b/clutter/config.h.win32.in
@@ -1,10 +1,10 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Use CEX100 EGL backend */
-/*#undef CLUTTER_EGL_BACKEND_CEX100*/
+/* #undef CLUTTER_EGL_BACKEND_CEX100 */
/* Use Generic EGL backend */
-/*#undef CLUTTER_EGL_BACKEND_GENERIC*/
+/* #undef CLUTTER_EGL_BACKEND_GENERIC*/
/* Can use Cogl 2.0 API internally */
#define COGL_ENABLE_EXPERIMENTAL_2_0_API 1
@@ -16,28 +16,31 @@
/* The prefix for our gettext translation domains. */
#define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
+/* Define to 1 if you have the `cairo_surface_set_device_scale' function. */
+/* #undef HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE */
+
/* Define to 1 if you have the header file. */
-/*#undef HAVE_CE4100_LIBGDL_H*/
+/* #undef HAVE_CE4100_LIBGDL_H */
/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
CoreFoundation framework. */
-/*#undef HAVE_CFLOCALECOPYCURRENT*/
+/* #undef HAVE_CFLOCALECOPYCURRENT */
/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
the CoreFoundation framework. */
-/*#undef HAVE_CFPREFERENCESCOPYAPPVALUE*/
+/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
/* Have the EGL backend */
-/*#undef HAVE_CLUTTER_EGL*/
+/* #undef HAVE_CLUTTER_EGL */
/* Have the GLX backend */
-/*#undef HAVE_CLUTTER_GLX*/
+/* #undef HAVE_CLUTTER_GLX */
/* Have the OSX backend */
-/*#undef HAVE_CLUTTER_OSX*/
+/* #undef HAVE_CLUTTER_OSX */
/* Have the Wayland backend */
-/*#undef HAVE_CLUTTER_WAYLAND*/
+/* #undef HAVE_CLUTTER_WAYLAND */
/* Have Wayland compositor support */
/* #undef HAVE_CLUTTER_WAYLAND_COMPOSITOR */
@@ -50,10 +53,13 @@
#define HAVE_DCGETTEXT 1
/* Define to 1 if you have the header file. */
-/*#undef HAVE_DLFCN_H*/
+/* #undef HAVE_DLFCN_H */
/* Have evdev support for input handling */
-/*#undef HAVE_EVDEV*/
+/* #undef HAVE_EVDEV */
+
+/* Whether you have gcov */
+/* #undef HAVE_GCOV */
/* Define if the GNU gettext() function is already present or preinstalled. */
#define HAVE_GETTEXT 1
@@ -62,10 +68,12 @@
#define HAVE_ICONV 1
/* Define to 1 if you have the header file. */
-/*#undef HAVE_INTTYPES_H*/
+#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
+#define HAVE_INTTYPES_H 1
+#endif
/* Define to 1 if you have the header file. */
-/*#undef HAVE_LIBGDL_H*/
+/* #undef HAVE_LIBGDL_H */
/* Define to 1 if you have the header file. */
#define HAVE_MEMORY_H 1
@@ -74,7 +82,7 @@
/* #undef HAVE_PANGO_FT2 */
/* Define to 1 if you have the header file. */
-#if (_MSC_VER >= 1600)
+#if !defined (_MSC_VER) || (_MSC_VER >= 1600)
#define HAVE_STDINT_H 1
#endif
@@ -82,7 +90,9 @@
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the header file. */
-/*#undef HAVE_STRINGS_H*/
+#ifndef _MSC_VER
+#define HAVE_STRINGS_H 1
+#endif
/* Define to 1 if you have the header file. */
#define HAVE_STRING_H 1
@@ -94,44 +104,46 @@
#define HAVE_SYS_TYPES_H 1
/* Have tslib for touchscreen handling */
-/*#undef HAVE_TSLIB*/
+/* #undef HAVE_TSLIB */
/* Define to 1 if you have the header file. */
-/*#undef HAVE_UNISTD_H*/
+#ifndef _MSC_VER
+#define HAVE_UNISTD_H 1
+#endif
/* Define to 1 if you have the header file. */
-/*#undef HAVE_X11_EXTENSIONS_XINPUT2_H*/
+/* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */
/* Define to 1 if we have the XCOMPOSITE X extension */
-/*#undef HAVE_XCOMPOSITE*/
+/* #undef HAVE_XCOMPOSITE */
/* Define to 1 if we have the XDAMAGE X extension */
-/*#undef HAVE_XDAMAGE*/
+/* #undef HAVE_XDAMAGE */
/* Define to 1 if we have the XEXT X extension */
-/*#undef HAVE_XEXT*/
-
-/* Define to 1 if we have the XFIXES X extension */
-/*#undef HAVE_XFIXES*/
+/* #undef HAVE_XEXT */
/* Define to 1 if X Generic Extensions is available */
/* #undef HAVE_XGE */
-/* Define to 1 if XInput is available */
-/*#undef HAVE_XINPUT*/
-
/* Define to 1 if XI2 is available */
-/*#undef HAVE_XINPUT_2*/
+/* #undef HAVE_XINPUT_2 */
+
+/* Define to 1 if XInput 2.2 is available */
+/* #undef HAVE_XINPUT_2_2 */
/* Define to use XKB extension */
-/*#undef HAVE_XKB*/
+/* #undef HAVE_XKB */
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#define NO_MINUS_C_MINUS_O 1
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* Define to 1 if building for Linux */
+/* #undef OS_LINUX */
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "https://bugzilla.gnome.org/enter_bug.cgi?product=clutter"
@@ -153,3 +165,10 @@
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
+
+/* defines how to decorate public symbols while building */
+#ifdef _MSC_VER
+#define _CLUTTER_EXTERN __declspec(dllexport) extern
+#else
+#define _CLUTTER_EXTERN __attribute__((visibility("default"))) __declspec(dllexport) extern
+#endif
diff --git a/clutter/deprecated/clutter-actor-deprecated.c b/clutter/deprecated/clutter-actor-deprecated.c
index ff3a37c06..e3f381305 100644
--- a/clutter/deprecated/clutter-actor-deprecated.c
+++ b/clutter/deprecated/clutter-actor-deprecated.c
@@ -94,8 +94,8 @@ clutter_actor_get_shader (ClutterActor *self)
* If @shader is %NULL this function will unset any currently set shader
* for the actor.
*
- * Any #ClutterEffect applied to @self will take the precedence
- * over the #ClutterShader set using this function.
+ * Any #ClutterEffect applied to @self will take the precedence
+ * over the #ClutterShader set using this function.
*
* Return value: %TRUE if the shader was successfully applied
* or removed
diff --git a/clutter/deprecated/clutter-alpha.c b/clutter/deprecated/clutter-alpha.c
index d9548a5ee..def8ec532 100644
--- a/clutter/deprecated/clutter-alpha.c
+++ b/clutter/deprecated/clutter-alpha.c
@@ -32,11 +32,11 @@
* #ClutterAlpha is a class for calculating an floating point value
* dependent only on the position of a #ClutterTimeline.
*
- * For newly written code, it is recommended to use the
+ * For newly written code, it is recommended to use the
* #ClutterTimeline:progress-mode property of #ClutterTimeline, or the
* clutter_timeline_set_progress_func() function instead of #ClutterAlpha.
* The #ClutterAlpha class will be deprecated in the future, and will not
- * be available any more in the next major version of Clutter.
+ * be available any more in the next major version of Clutter.
*
* A #ClutterAlpha binds a #ClutterTimeline to a progress function which
* translates the time T into an adimensional factor alpha. The factor can
@@ -62,22 +62,27 @@
* #ClutterAlpha is used to "drive" a #ClutterBehaviour instance, and it
* is internally used by the #ClutterAnimation API.
*
- *
- * ClutterAlpha custom properties for #ClutterScript
- * #ClutterAlpha defines a custom "function" property for
- * #ClutterScript which allows to reference a custom alpha function
- * available in the source code. Setting the "function" property
- * is equivalent to calling clutter_alpha_set_func() with the
- * specified function name. No user data or #GDestroyNotify is
- * available to be passed.
- *
- * Defining a ClutterAlpha in ClutterScript
- * The following JSON fragment defines a #ClutterAlpha
- * using a #ClutterTimeline with id "sine-timeline" and an alpha
- * function called my_sine_alpha. The defined
- * #ClutterAlpha instance can be reused in multiple #ClutterBehaviour
- * definitions or for #ClutterAnimation definitions.
- *
- *
- * For the way to define the #ClutterAlpha:mode property
- * inside a ClutterScript fragment, see the corresponding section
- * in #ClutterAnimation.
- *
- *
- * #ClutterAlpha is available since Clutter 0.2.
- *
- * #ClutterAlpha is deprecated since Clutter 1.12; use #ClutterTimeline and the
- * #ClutterTimeline:progress-mode property.
- *
+ * ]|
*/
#ifdef HAVE_CONFIG_H
@@ -122,14 +115,6 @@
#include "clutter-scriptable.h"
#include "clutter-script-private.h"
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (ClutterAlpha,
- clutter_alpha,
- G_TYPE_INITIALLY_UNOWNED,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
-
struct _ClutterAlphaPrivate
{
ClutterTimeline *timeline;
@@ -159,6 +144,15 @@ enum
static GParamSpec *obj_props[PROP_LAST];
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterAlpha,
+ clutter_alpha,
+ G_TYPE_INITIALLY_UNOWNED,
+ G_ADD_PRIVATE (ClutterAlpha)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init));
+
static void
timeline_new_frame_cb (ClutterTimeline *timeline,
guint msecs,
@@ -339,8 +333,6 @@ clutter_alpha_class_init (ClutterAlphaClass *klass)
object_class->finalize = clutter_alpha_finalize;
object_class->dispose = clutter_alpha_dispose;
- g_type_class_add_private (klass, sizeof (ClutterAlphaPrivate));
-
/**
* ClutterAlpha:timeline:
*
@@ -405,10 +397,7 @@ clutter_alpha_class_init (ClutterAlphaClass *klass)
static void
clutter_alpha_init (ClutterAlpha *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_TYPE_ALPHA,
- ClutterAlphaPrivate);
-
+ self->priv = clutter_alpha_get_instance_private (self);
self->priv->mode = CLUTTER_CUSTOM_MODE;
self->priv->alpha = 0.0;
}
@@ -926,7 +915,7 @@ clutter_alpha_register_func (ClutterAlphaFunc func,
}
/**
- * clutter_alpha_register_closure:
+ * clutter_alpha_register_closure: (rename-to clutter_alpha_register_func)
* @closure: a #GClosure
*
* #GClosure variant of clutter_alpha_register_func().
@@ -936,8 +925,6 @@ clutter_alpha_register_func (ClutterAlphaFunc func,
*
* The logical id is always greater than %CLUTTER_ANIMATION_LAST.
*
- * Rename to: clutter_alpha_register_func
- *
* Return value: the logical id of the alpha function
*
* Since: 1.0
diff --git a/clutter/deprecated/clutter-alpha.h b/clutter/deprecated/clutter-alpha.h
index 347ff4a14..8a0dff661 100644
--- a/clutter/deprecated/clutter-alpha.h
+++ b/clutter/deprecated/clutter-alpha.h
@@ -58,6 +58,8 @@ typedef struct _ClutterAlphaPrivate ClutterAlphaPrivate;
* Return value: a floating point value
*
* Since: 0.2
+ *
+ * Deprecated: 1.12: Use #ClutterTimelineProgressFunc instead.
*/
typedef gdouble (*ClutterAlphaFunc) (ClutterAlpha *alpha,
gpointer user_data);
@@ -70,6 +72,8 @@ typedef gdouble (*ClutterAlphaFunc) (ClutterAlpha *alpha,
* only be accessed using the provided API.
*
* Since: 0.2
+ *
+ * Deprecated: 1.12: Use #ClutterTimeline instead
*/
struct _ClutterAlpha
{
@@ -85,6 +89,8 @@ struct _ClutterAlpha
* Base class for #ClutterAlpha
*
* Since: 0.2
+ *
+ * Deprecated: 1.12: Use #ClutterTimeline instead
*/
struct _ClutterAlphaClass
{
diff --git a/clutter/deprecated/clutter-animation.c b/clutter/deprecated/clutter-animation.c
index 80f5f6a7b..06a8f8d42 100644
--- a/clutter/deprecated/clutter-animation.c
+++ b/clutter/deprecated/clutter-animation.c
@@ -29,7 +29,7 @@
* #ClutterTimeline
*
* #ClutterAnimation is an object providing simple, implicit animations
- * for #GObjects.
+ * for #GObjects.
*
* #ClutterAnimation instances will bind one or more #GObject properties
* belonging to a #GObject to a #ClutterInterval, and will then use a
@@ -57,91 +57,40 @@
* #ClutterAnimatable interface it is possible for that instance to
* control the way the initial and final states are interpolated.
*
- * #ClutterAnimations are distinguished from #ClutterBehaviours
+ * #ClutterAnimations are distinguished from #ClutterBehaviours
* because the former can only control #GObject properties of a single
* #GObject instance, while the latter can control multiple properties
* using accessor functions inside the #ClutterBehaviour
- * alpha_notify virtual function, and can control
- * multiple #ClutterActors as well.
+ * `alpha_notify` virtual function, and can control multiple #ClutterActors
+ * as well.
*
* For convenience, it is possible to use the clutter_actor_animate()
* function call which will take care of setting up and tearing down
* a #ClutterAnimation instance and animate an actor between its current
* state and the specified final state.
*
- *
- * Defining ClutterAnimationMode inside ClutterScript
- * When defining a #ClutterAnimation inside a ClutterScript
- * file or string the #ClutterAnimation:mode can be defined either
- * using the #ClutterAnimationMode enumeration values through their
- * "nick" (the short string used inside #GEnumValue), their numeric
- * id, or using the following strings:
- *
- *
- * easeInQuad, easeOutQuad, easeInOutQuad
- * Corresponding to the quadratic easing
- * modes
- *
- *
- * easeInCubic, easeOutCubic, easeInOutCubic
- * Corresponding to the cubic easing
- * modes
- *
- *
- * easeInQuart, easeOutQuart, easeInOutQuart
- * Corresponding to the quartic easing
- * modes
- *
- *
- * easeInQuint, easeOutQuint, easeInOutQuint
- * Corresponding to the quintic easing
- * modes
- *
- *
- * easeInSine, easeOutSine, easeInOutSine
- * Corresponding to the sine easing
- * modes
- *
- *
- * easeInExpo, easeOutExpo, easeInOutExpo
- * Corresponding to the exponential easing
- * modes
- *
- *
- * easeInCirc, easeOutCirc, easeInOutCirc
- * Corresponding to the circular easing
- * modes
- *
- *
- * easeInElastic, easeOutElastic, easeInOutElastic
- * Corresponding to the overshooting elastic
- * easing modes
- *
- *
- * easeInBack, easeOutBack, easeInOutBack
- * Corresponding to the overshooting cubic
- * easing modes
- *
- *
- * easeInBounce, easeOutBounce, easeInOutBounce
- * Corresponding to the bouncing easing
- * modes
- *
- *
- *
- *
- *
- * Tweening using clutter_actor_animate()
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
- *
* #ClutterAnimation is available since Clutter 1.0.
*
* #ClutterAnimation has been deprecated in Clutter 1.12.
+ *
+ * ## Defining ClutterAnimationMode inside ClutterScript
+ *
+ * When defining a #ClutterAnimation inside a ClutterScript
+ * file or string the #ClutterAnimation:mode can be defined either
+ * using the #ClutterAnimationMode enumeration values through their
+ * "nick" (the short string used inside #GEnumValue), their numeric
+ * id, or using the following strings:
+ *
+ * - easeInQuad, easeOutQuad, easeInOutQuad
+ * - easeInCubic, easeOutCubic, easeInOutCubic
+ * - easeInQuart, easeOutQuart, easeInOutQuart
+ * - easeInQuint, easeOutQuint, easeInOutQuint
+ * - easeInSine, easeOutSine, easeInOutSine
+ * - easeInExpo, easeOutExpo, easeInOutExpo
+ * - easeInCirc, easeOutCirc, easeInOutCirc
+ * - easeInElastic, easeOutElastic, easeInOutElastic
+ * - easeInBack, easeOutBack, easeInOutBack
+ * - easeInBounce, easeOutBounce, easeInOutBounce
*/
#ifdef HAVE_CONFIG_H
@@ -190,8 +139,6 @@ enum
LAST_SIGNAL
};
-#define CLUTTER_ANIMATION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_ANIMATION, ClutterAnimationPrivate))
-
struct _ClutterAnimationPrivate
{
GObject *object;
@@ -218,6 +165,7 @@ static ClutterAlpha * clutter_animation_get_alpha_internal (Clutter
static ClutterTimeline * clutter_animation_get_timeline_internal (ClutterAnimation *animation);
G_DEFINE_TYPE_WITH_CODE (ClutterAnimation, clutter_animation, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterAnimation)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
clutter_scriptable_init));
@@ -357,6 +305,12 @@ clutter_animation_dispose (GObject *gobject)
priv->timeline_completed_id = 0;
priv->timeline_frame_id = 0;
+ if (priv->timeline != NULL)
+ {
+ g_object_unref (priv->timeline);
+ priv->timeline = NULL;
+ }
+
if (priv->alpha != NULL)
{
g_object_unref (priv->alpha);
@@ -489,8 +443,6 @@ clutter_animation_class_init (ClutterAnimationClass *klass)
quark_object_animation =
g_quark_from_static_string ("clutter-actor-animation");
- g_type_class_add_private (klass, sizeof (ClutterAnimationPrivate));
-
klass->completed = clutter_animation_real_completed;
gobject_class->set_property = clutter_animation_set_property;
@@ -643,7 +595,7 @@ clutter_animation_class_init (ClutterAnimationClass *klass)
static void
clutter_animation_init (ClutterAnimation *self)
{
- self->priv = CLUTTER_ANIMATION_GET_PRIVATE (self);
+ self->priv = clutter_animation_get_instance_private (self);
self->priv->properties =
g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -2236,7 +2188,7 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
*
* For example, this:
*
- * |[
+ * |[
* clutter_actor_animate (rectangle, CLUTTER_LINEAR, 250,
* "width", 100.0,
* "height", 100.0,
@@ -2254,10 +2206,10 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
* the animation but not updated during the animation, it should be prefixed
* by the "fixed::" string, for instance:
*
- * |[
+ * |[
* clutter_actor_animate (actor, CLUTTER_EASE_IN_SINE, 100,
* "rotation-angle-z", 360.0,
- * "fixed::rotation-center-z", ¢er,
+ * "fixed::rotation-center-z", ¢er,
* NULL);
* ]|
*
@@ -2275,8 +2227,7 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
* are used as callback function and data for a signal handler installed on
* the #ClutterAnimation object for the specified signal name, for instance:
*
- * |[
- *
+ * |[
* static void
* on_animation_completed (ClutterAnimation *animation,
* ClutterActor *actor)
@@ -2292,7 +2243,7 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
*
* or, to automatically destroy an actor at the end of the animation:
*
- * |[
+ * |[
* clutter_actor_animate (actor, CLUTTER_EASE_IN_CUBIC, 100,
* "opacity", 0,
* "signal-swapped-after::completed",
@@ -2317,7 +2268,7 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
* will cause the current animation to change with the new final values,
* the new easing mode and the new duration - that is, this code:
*
- * |[
+ * |[
* clutter_actor_animate (actor, CLUTTER_LINEAR, 250,
* "width", 100.0,
* "height", 100.0,
@@ -2331,7 +2282,7 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
*
* is the equivalent of:
*
- * |[
+ * |[
* clutter_actor_animate (actor, CLUTTER_EASE_IN_CUBIC, 500,
* "x", 100.0,
* "y", 100.0,
@@ -2340,9 +2291,9 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
* NULL);
* ]|
*
- * Unless the animation is looping, the #ClutterAnimation created by
+ * Unless the animation is looping, the #ClutterAnimation created by
* clutter_actor_animate() will become invalid as soon as it is
- * complete.
+ * complete.
*
* Since the created #ClutterAnimation instance attached to @actor
* is guaranteed to be valid throughout the #ClutterAnimation::completed
@@ -2351,7 +2302,7 @@ clutter_actor_animate_with_timeline (ClutterActor *actor,
* #ClutterAnimation::completed signal handler unless you use
* g_signal_connect_after() to connect the callback function, for instance:
*
- * |[
+ * |[
* static void
* on_animation_completed (ClutterAnimation *animation,
* ClutterActor *actor)
@@ -2427,8 +2378,8 @@ clutter_actor_animate (ClutterActor *actor,
* This is the vector-based variant of clutter_actor_animate(), useful
* for language bindings.
*
- * Unlike clutter_actor_animate(), this function will not
- * allow you to specify "signal::" names and callbacks.
+ * Unlike clutter_actor_animate(), this function will not
+ * allow you to specify "signal::" names and callbacks.
*
* Return value: (transfer none): a #ClutterAnimation object. The object is
* owned by the #ClutterActor and should not be unreferenced with
@@ -2486,8 +2437,8 @@ clutter_actor_animatev (ClutterActor *actor,
* This is the vector-based variant of clutter_actor_animate_with_timeline(),
* useful for language bindings.
*
- * Unlike clutter_actor_animate_with_timeline(), this function
- * will not allow you to specify "signal::" names and callbacks.
+ * Unlike clutter_actor_animate_with_timeline(), this function
+ * will not allow you to specify "signal::" names and callbacks.
*
* Return value: (transfer none): a #ClutterAnimation object. The object is
* owned by the #ClutterActor and should not be unreferenced with
@@ -2543,8 +2494,8 @@ clutter_actor_animate_with_timelinev (ClutterActor *actor,
* This is the vector-based variant of clutter_actor_animate_with_alpha(),
* useful for language bindings.
*
- * Unlike clutter_actor_animate_with_alpha(), this function will
- * not allow you to specify "signal::" names and callbacks.
+ * Unlike clutter_actor_animate_with_alpha(), this function will
+ * not allow you to specify "signal::" names and callbacks.
*
* Return value: (transfer none): a #ClutterAnimation object. The object is owned by the
* #ClutterActor and should not be unreferenced with g_object_unref()
diff --git a/clutter/deprecated/clutter-animation.h b/clutter/deprecated/clutter-animation.h
index 4c6aa8bb6..3b2310bb4 100644
--- a/clutter/deprecated/clutter-animation.h
+++ b/clutter/deprecated/clutter-animation.h
@@ -50,6 +50,8 @@ typedef struct _ClutterAnimationClass ClutterAnimationClass;
* be accessed using the provided functions.
*
* Since: 1.0
+ *
+ * Deprecated: 1.12: Use the implicit animation on #ClutterActor
*/
struct _ClutterAnimation
{
@@ -68,6 +70,8 @@ struct _ClutterAnimation
* should be accessed using the provided functions.
*
* Since: 1.0
+ *
+ * Deprecated: 1.12: Use the implicit animation on #ClutterActor
*/
struct _ClutterAnimationClass
{
diff --git a/clutter/deprecated/clutter-animator.c b/clutter/deprecated/clutter-animator.c
index 89e4925f4..4a4cf6283 100644
--- a/clutter/deprecated/clutter-animator.c
+++ b/clutter/deprecated/clutter-animator.c
@@ -37,58 +37,55 @@
* through the #ClutterScript definition format, but it comes with a
* convenience C API.
*
- *
- * Key Frames
- * Every animation handled by a #ClutterAnimator can be
- * described in terms of "key frames". For each #GObject property
- * there can be multiple key frames, each one defined by the end
- * value for the property to be computed starting from the current
- * value to a specific point in time, using a given easing
- * mode.
- * The point in time is defined using a value representing
- * the progress in the normalized interval of [ 0, 1 ]. This maps
- * the value returned by clutter_timeline_get_duration().
- *
- * Key Frames
- *
- *
- * In the image above the duration of the animation is
- * represented by the blue line. Each key frame is the white dot,
- * along with its progress. The red line represents the computed
- * function of time given the easing mode.
- *
+ * #ClutterAnimator is available since Clutter 1.2
*
- *
- * ClutterAnimator description for #ClutterScript
- * #ClutterAnimator defines a custom "properties" property
- * which allows describing the key frames for objects.
- * The "properties" property has the following syntax:
- *
- *
- *
- *
- * ClutterAnimator definition
- * The following JSON fragment defines a #ClutterAnimator
- * with the duration of 1 second and operating on the x and y
- * properties of a #ClutterActor named "rect-01", with two frames
- * for each property. The first frame will linearly move the actor
- * from its current position to the 100, 100 position in 20 percent
- * of the duration of the animation; the second will using a cubic
- * easing to move the actor to the 200, 200 coordinates.
- *
- *
- *
- *
- * #ClutterAnimator is available since Clutter 1.2
- *
- * #ClutterAnimator has been deprecated in Clutter 1.12
+ * ]|
*/
#ifdef HAVE_CONFIG_H
@@ -143,8 +134,6 @@
#include "clutter-script-private.h"
#include "clutter-scriptable.h"
-#define CLUTTER_ANIMATOR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_ANIMATOR, ClutterAnimatorPrivate))
-
/* progress values varying by less than this are considered equal */
#define PROGRESS_EPSILON 0.00001
@@ -203,6 +192,7 @@ static void clutter_scriptable_init (ClutterScriptableIface *iface);
G_DEFINE_TYPE_WITH_CODE (ClutterAnimator,
clutter_animator,
G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterAnimator)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
clutter_scriptable_init));
/**
@@ -1783,8 +1773,6 @@ clutter_animator_class_init (ClutterAnimatorClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterAnimatorPrivate));
-
gobject_class->set_property = clutter_animator_set_property;
gobject_class->get_property = clutter_animator_get_property;
gobject_class->dispose = clutter_animator_dispose;
@@ -1834,7 +1822,7 @@ clutter_animator_init (ClutterAnimator *animator)
ClutterAnimatorPrivate *priv;
ClutterTimeline *timeline;
- animator->priv = priv = CLUTTER_ANIMATOR_GET_PRIVATE (animator);
+ animator->priv = priv = clutter_animator_get_instance_private (animator);
priv->properties = g_hash_table_new_full (prop_actor_hash,
prop_actor_equal,
diff --git a/clutter/deprecated/clutter-animator.h b/clutter/deprecated/clutter-animator.h
index 54be75b66..a72e27a4c 100644
--- a/clutter/deprecated/clutter-animator.h
+++ b/clutter/deprecated/clutter-animator.h
@@ -54,6 +54,8 @@ typedef struct _ClutterAnimatorPrivate ClutterAnimatorPrivate;
* A key frame inside a #ClutterAnimator
*
* Since: 1.2
+ *
+ * Deprecated: 1.12
*/
typedef struct _ClutterAnimatorKey ClutterAnimatorKey;
diff --git a/clutter/deprecated/clutter-behaviour-depth.c b/clutter/deprecated/clutter-behaviour-depth.c
index 49a4afc9a..405b14bef 100644
--- a/clutter/deprecated/clutter-behaviour-depth.c
+++ b/clutter/deprecated/clutter-behaviour-depth.c
@@ -54,10 +54,6 @@
* instead.
*/
-G_DEFINE_TYPE (ClutterBehaviourDepth,
- clutter_behaviour_depth,
- CLUTTER_TYPE_BEHAVIOUR);
-
struct _ClutterBehaviourDepthPrivate
{
gint depth_start;
@@ -72,6 +68,10 @@ enum
PROP_DEPTH_END
};
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBehaviourDepth,
+ clutter_behaviour_depth,
+ CLUTTER_TYPE_BEHAVIOUR)
+
static void
alpha_notify_foreach (ClutterBehaviour *behaviour,
ClutterActor *actor,
@@ -159,8 +159,6 @@ clutter_behaviour_depth_class_init (ClutterBehaviourDepthClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterBehaviourClass *behaviour_class = CLUTTER_BEHAVIOUR_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterBehaviourDepthPrivate));
-
gobject_class->set_property = clutter_behaviour_depth_set_property;
gobject_class->get_property = clutter_behaviour_depth_get_property;
@@ -204,9 +202,7 @@ clutter_behaviour_depth_class_init (ClutterBehaviourDepthClass *klass)
static void
clutter_behaviour_depth_init (ClutterBehaviourDepth *depth)
{
- depth->priv = G_TYPE_INSTANCE_GET_PRIVATE (depth,
- CLUTTER_TYPE_BEHAVIOUR_DEPTH,
- ClutterBehaviourDepthPrivate);
+ depth->priv = clutter_behaviour_depth_get_instance_private (depth);
}
/**
diff --git a/clutter/deprecated/clutter-behaviour-ellipse.c b/clutter/deprecated/clutter-behaviour-ellipse.c
index 103a4aeea..168430cac 100644
--- a/clutter/deprecated/clutter-behaviour-ellipse.c
+++ b/clutter/deprecated/clutter-behaviour-ellipse.c
@@ -33,9 +33,9 @@
* #ClutterBehaviourEllipse interpolates actors along a path defined by
* an ellipse.
*
- * When applying an ellipse behaviour to an actor, the
+ * When applying an ellipse behaviour to an actor, the
* behaviour will update the actor's position and depth and set them
- * to what is dictated by the ellipses initial position.
+ * to what is dictated by the ellipses initial position.
*
* Deprecated: 1.6: Use clutter_actor_animate(), #ClutterPath and a
* #ClutterPathConstraint instead.
@@ -60,15 +60,6 @@
#include "clutter-enum-types.h"
#include "clutter-private.h"
-G_DEFINE_TYPE (ClutterBehaviourEllipse,
- clutter_behaviour_ellipse,
- CLUTTER_TYPE_BEHAVIOUR);
-
-#define CLUTTER_BEHAVIOUR_ELLIPSE_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_BEHAVIOUR_ELLIPSE, \
- ClutterBehaviourEllipsePrivate))
-
enum
{
PROP_0,
@@ -108,6 +99,10 @@ struct _ClutterBehaviourEllipsePrivate
ClutterRotateDirection direction;
};
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBehaviourEllipse,
+ clutter_behaviour_ellipse,
+ CLUTTER_TYPE_BEHAVIOUR)
+
typedef struct _knot3d
{
gint x;
@@ -382,8 +377,6 @@ clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass)
ClutterBehaviourClass *behave_class = CLUTTER_BEHAVIOUR_CLASS (klass);
GParamSpec *pspec = NULL;
- g_type_class_add_private (klass, sizeof (ClutterBehaviourEllipsePrivate));
-
object_class->set_property = clutter_behaviour_ellipse_set_property;
object_class->get_property = clutter_behaviour_ellipse_get_property;
@@ -539,7 +532,7 @@ clutter_behaviour_ellipse_init (ClutterBehaviourEllipse * self)
{
ClutterBehaviourEllipsePrivate *priv;
- self->priv = priv = CLUTTER_BEHAVIOUR_ELLIPSE_GET_PRIVATE (self);
+ self->priv = priv = clutter_behaviour_ellipse_get_instance_private (self);
priv->direction = CLUTTER_ROTATE_CW;
diff --git a/clutter/deprecated/clutter-behaviour-opacity.c b/clutter/deprecated/clutter-behaviour-opacity.c
index b685be03b..385506754 100644
--- a/clutter/deprecated/clutter-behaviour-opacity.c
+++ b/clutter/deprecated/clutter-behaviour-opacity.c
@@ -50,21 +50,12 @@
#include "clutter-private.h"
#include "clutter-debug.h"
-G_DEFINE_TYPE (ClutterBehaviourOpacity,
- clutter_behaviour_opacity,
- CLUTTER_TYPE_BEHAVIOUR);
-
struct _ClutterBehaviourOpacityPrivate
{
guint8 opacity_start;
guint8 opacity_end;
};
-#define CLUTTER_BEHAVIOUR_OPACITY_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_BEHAVIOUR_OPACITY, \
- ClutterBehaviourOpacityPrivate))
-
enum
{
PROP_0,
@@ -77,6 +68,10 @@ enum
static GParamSpec *obj_props[PROP_LAST];
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBehaviourOpacity,
+ clutter_behaviour_opacity,
+ CLUTTER_TYPE_BEHAVIOUR)
+
static void
alpha_notify_foreach (ClutterBehaviour *behaviour,
ClutterActor *actor,
@@ -166,8 +161,6 @@ clutter_behaviour_opacity_class_init (ClutterBehaviourOpacityClass *klass)
ClutterBehaviourClass *behave_class = CLUTTER_BEHAVIOUR_CLASS (klass);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterBehaviourOpacityPrivate));
-
gobject_class->set_property = clutter_behaviour_opacity_set_property;
gobject_class->get_property = clutter_behaviour_opacity_get_property;
@@ -213,10 +206,7 @@ clutter_behaviour_opacity_class_init (ClutterBehaviourOpacityClass *klass)
static void
clutter_behaviour_opacity_init (ClutterBehaviourOpacity *self)
{
- self->priv = CLUTTER_BEHAVIOUR_OPACITY_GET_PRIVATE (self);
-
- self->priv->opacity_start = 0;
- self->priv->opacity_end = 0;
+ self->priv = clutter_behaviour_opacity_get_instance_private (self);
}
/**
diff --git a/clutter/deprecated/clutter-behaviour-path.c b/clutter/deprecated/clutter-behaviour-path.c
index 9702a3942..929500c55 100644
--- a/clutter/deprecated/clutter-behaviour-path.c
+++ b/clutter/deprecated/clutter-behaviour-path.c
@@ -53,9 +53,9 @@
* }
* ]|
*
- * If the alpha function is a periodic function, i.e. it returns to
+ * If the alpha function is a periodic function, i.e. it returns to
* 0.0 after reaching 1.0, then the actors will walk the path back to the
- * starting #ClutterKnot.
+ * starting #ClutterKnot.
*
* #ClutterBehaviourPath is available since Clutter 0.2
*
@@ -83,25 +83,12 @@
#include
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (ClutterBehaviourPath,
- clutter_behaviour_path,
- CLUTTER_TYPE_BEHAVIOUR,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
-
struct _ClutterBehaviourPathPrivate
{
ClutterPath *path;
guint last_knot_passed;
};
-#define CLUTTER_BEHAVIOUR_PATH_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_BEHAVIOUR_PATH, \
- ClutterBehaviourPathPrivate))
-
enum
{
KNOT_REACHED,
@@ -122,6 +109,15 @@ enum
static GParamSpec *obj_props[PROP_LAST];
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterBehaviourPath,
+ clutter_behaviour_path,
+ CLUTTER_TYPE_BEHAVIOUR,
+ G_ADD_PRIVATE (ClutterBehaviourPath)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init))
+
static void
actor_apply_knot_foreach (ClutterBehaviour *behaviour,
ClutterActor *actor,
@@ -253,8 +249,6 @@ clutter_behaviour_path_class_init (ClutterBehaviourPathClass *klass)
G_TYPE_UINT);
behave_class->alpha_notify = clutter_behaviour_path_alpha_notify;
-
- g_type_class_add_private (klass, sizeof (ClutterBehaviourPathPrivate));
}
static ClutterScriptableIface *parent_scriptable_iface = NULL;
@@ -310,12 +304,8 @@ clutter_scriptable_iface_init (ClutterScriptableIface *iface)
static void
clutter_behaviour_path_init (ClutterBehaviourPath *self)
{
- ClutterBehaviourPathPrivate *priv;
-
- self->priv = priv = CLUTTER_BEHAVIOUR_PATH_GET_PRIVATE (self);
-
- priv->path = NULL;
- priv->last_knot_passed = G_MAXUINT;
+ self->priv = clutter_behaviour_path_get_instance_private (self);
+ self->priv->last_knot_passed = G_MAXUINT;
}
/**
diff --git a/clutter/deprecated/clutter-behaviour-rotate.c b/clutter/deprecated/clutter-behaviour-rotate.c
index 9ba0f42a6..67ab3e441 100644
--- a/clutter/deprecated/clutter-behaviour-rotate.c
+++ b/clutter/deprecated/clutter-behaviour-rotate.c
@@ -52,10 +52,6 @@
#include "clutter-main.h"
#include "clutter-private.h"
-G_DEFINE_TYPE (ClutterBehaviourRotate,
- clutter_behaviour_rotate,
- CLUTTER_TYPE_BEHAVIOUR);
-
struct _ClutterBehaviourRotatePrivate
{
gdouble angle_start;
@@ -69,11 +65,6 @@ struct _ClutterBehaviourRotatePrivate
gint center_z;
};
-#define CLUTTER_BEHAVIOUR_ROTATE_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_BEHAVIOUR_ROTATE, \
- ClutterBehaviourRotatePrivate))
-
enum
{
PROP_0,
@@ -91,6 +82,10 @@ enum
static GParamSpec *obj_props[PROP_LAST];
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBehaviourRotate,
+ clutter_behaviour_rotate,
+ CLUTTER_TYPE_BEHAVIOUR)
+
typedef struct {
gdouble angle;
} RotateFrameClosure;
@@ -265,8 +260,6 @@ clutter_behaviour_rotate_class_init (ClutterBehaviourRotateClass *klass)
ClutterBehaviourClass *behaviour_class = CLUTTER_BEHAVIOUR_CLASS (klass);
GParamSpec *pspec = NULL;
- g_type_class_add_private (klass, sizeof (ClutterBehaviourRotatePrivate));
-
gobject_class->set_property = clutter_behaviour_rotate_set_property;
gobject_class->get_property = clutter_behaviour_rotate_get_property;
@@ -400,19 +393,19 @@ clutter_behaviour_rotate_class_init (ClutterBehaviourRotateClass *klass)
}
static void
-clutter_behaviour_rotate_init (ClutterBehaviourRotate *rotate)
+clutter_behaviour_rotate_init (ClutterBehaviourRotate *self)
{
- ClutterBehaviourRotatePrivate *priv;
+ self->priv = clutter_behaviour_rotate_get_instance_private (self);
- rotate->priv = priv = CLUTTER_BEHAVIOUR_ROTATE_GET_PRIVATE (rotate);
+ self->priv->angle_start = 0.0;
+ self->priv->angle_end = 0.0;
- priv->angle_start = priv->angle_end = 0;
+ self->priv->axis = CLUTTER_Z_AXIS;
+ self->priv->direction = CLUTTER_ROTATE_CW;
- priv->axis = CLUTTER_Z_AXIS;
-
- priv->direction = CLUTTER_ROTATE_CW;
-
- priv->center_x = priv->center_y = priv->center_z = 0;
+ self->priv->center_x = 0;
+ self->priv->center_y = 0;
+ self->priv->center_z = 0;
}
/**
diff --git a/clutter/deprecated/clutter-behaviour-scale.c b/clutter/deprecated/clutter-behaviour-scale.c
index 2f78eee11..c0d5fcf03 100644
--- a/clutter/deprecated/clutter-behaviour-scale.c
+++ b/clutter/deprecated/clutter-behaviour-scale.c
@@ -51,10 +51,6 @@
#include "clutter-main.h"
#include "clutter-private.h"
-G_DEFINE_TYPE (ClutterBehaviourScale,
- clutter_behaviour_scale,
- CLUTTER_TYPE_BEHAVIOUR);
-
struct _ClutterBehaviourScalePrivate
{
gdouble x_scale_start;
@@ -64,8 +60,6 @@ struct _ClutterBehaviourScalePrivate
gdouble y_scale_end;
};
-#define CLUTTER_BEHAVIOUR_SCALE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_BEHAVIOUR_SCALE, ClutterBehaviourScalePrivate))
-
enum
{
PROP_0,
@@ -80,6 +74,10 @@ enum
static GParamSpec *obj_props[PROP_LAST];
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBehaviourScale,
+ clutter_behaviour_scale,
+ CLUTTER_TYPE_BEHAVIOUR)
+
typedef struct {
gdouble scale_x;
gdouble scale_y;
@@ -208,8 +206,6 @@ clutter_behaviour_scale_class_init (ClutterBehaviourScaleClass *klass)
ClutterBehaviourClass *behave_class = CLUTTER_BEHAVIOUR_CLASS (klass);
GParamSpec *pspec = NULL;
- g_type_class_add_private (klass, sizeof (ClutterBehaviourScalePrivate));
-
gobject_class->set_property = clutter_behaviour_scale_set_property;
gobject_class->get_property = clutter_behaviour_scale_get_property;
@@ -298,7 +294,7 @@ clutter_behaviour_scale_init (ClutterBehaviourScale *self)
{
ClutterBehaviourScalePrivate *priv;
- self->priv = priv = CLUTTER_BEHAVIOUR_SCALE_GET_PRIVATE (self);
+ self->priv = priv = clutter_behaviour_scale_get_instance_private (self);
priv->x_scale_start = priv->x_scale_end = 1.0;
priv->y_scale_start = priv->y_scale_end = 1.0;
diff --git a/clutter/deprecated/clutter-behaviour.c b/clutter/deprecated/clutter-behaviour.c
index 08a11f444..95511880d 100644
--- a/clutter/deprecated/clutter-behaviour.c
+++ b/clutter/deprecated/clutter-behaviour.c
@@ -88,14 +88,6 @@
#include "clutter-scriptable.h"
#include "clutter-script-private.h"
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-
-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (ClutterBehaviour,
- clutter_behaviour,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
-
struct _ClutterBehaviourPrivate
{
ClutterAlpha *alpha;
@@ -122,10 +114,14 @@ enum {
static guint behave_signals[LAST_SIGNAL] = { 0 };
-#define CLUTTER_BEHAVIOUR_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_BEHAVIOUR, \
- ClutterBehaviourPrivate))
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (ClutterBehaviour,
+ clutter_behaviour,
+ G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterBehaviour)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init))
static gboolean
clutter_behaviour_parse_custom_node (ClutterScriptable *scriptable,
@@ -291,14 +287,12 @@ clutter_behaviour_class_init (ClutterBehaviourClass *klass)
_clutter_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
CLUTTER_TYPE_ACTOR);
-
- g_type_class_add_private (klass, sizeof (ClutterBehaviourPrivate));
}
static void
clutter_behaviour_init (ClutterBehaviour *self)
{
- self->priv = CLUTTER_BEHAVIOUR_GET_PRIVATE (self);
+ self->priv = clutter_behaviour_get_instance_private (self);
}
static void
diff --git a/clutter/deprecated/clutter-box.c b/clutter/deprecated/clutter-box.c
index 51412c633..357b35560 100644
--- a/clutter/deprecated/clutter-box.c
+++ b/clutter/deprecated/clutter-box.c
@@ -30,44 +30,42 @@
* interface. A Box delegates the whole size requisition and size allocation to
* a #ClutterLayoutManager instance.
*
- *
- * Using ClutterBox
- * The following code shows how to create a #ClutterBox with
- * a #ClutterLayoutManager sub-class, and how to add children to
- * it via clutter_box_pack().
- *
+ * #ClutterBox is available since Clutter 1.2
+ *
+ * Deprecated: 1.10: Use #ClutterActor instead.
+ *
+ * ## Using ClutterBox
+ *
+ * The following code shows how to create a #ClutterBox with
+ * a #ClutterLayoutManager sub-class, and how to add children to
+ * it via clutter_box_pack().
+ *
+ * |[
* ClutterActor *box;
* ClutterLayoutManager *layout;
*
- * /* Create the layout manager first */
+ * // Create the layout manager first
* layout = clutter_box_layout_new ();
* clutter_box_layout_set_homogeneous (CLUTTER_BOX_LAYOUT (layout), TRUE);
* clutter_box_layout_set_spacing (CLUTTER_BOX_LAYOUT (layout), 12);
*
- * /* Then create the ClutterBox actor. The Box will take
- * * ownership of the ClutterLayoutManager instance by sinking
- * * its floating reference
- * */
+ * // Then create the ClutterBox actor. The Box will take
+ * // ownership of the ClutterLayoutManager instance by sinking
+ * // its floating reference
* box = clutter_box_new (layout);
*
- * /* Now add children to the Box using the variadic arguments
- * * function clutter_box_pack() to set layout properties
- * */
+ * // Now add children to the Box using the variadic arguments
+ * // function clutter_box_pack() to set layout properties
* clutter_box_pack (CLUTTER_BOX (box), actor,
* "x-align", CLUTTER_BOX_ALIGNMENT_CENTER,
* "y-align", CLUTTER_BOX_ALIGNMENT_END,
* "expand", TRUE,
* NULL);
- *
- *
+ * ]|
*
- * #ClutterBox's clutter_box_pack() wraps the generic
+ * #ClutterBox's clutter_box_pack() wraps the generic
* clutter_container_add_actor() function, but it also allows setting
* layout properties while adding the new child to the box.
- *
- * #ClutterBox is available since Clutter 1.2
- *
- * Deprecated: 1.10: Use #ClutterActor instead.
*/
#ifdef HAVE_CONFIG_H
@@ -89,8 +87,6 @@
#include "clutter-marshal.h"
#include "clutter-private.h"
-#define CLUTTER_BOX_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_BOX, ClutterBoxPrivate))
-
struct _ClutterBoxPrivate
{
ClutterLayoutManager *manager;
@@ -112,7 +108,7 @@ static GParamSpec *obj_props[PROP_LAST] = { NULL, };
static const ClutterColor default_box_color = { 255, 255, 255, 255 };
-G_DEFINE_TYPE (ClutterBox, clutter_box, CLUTTER_TYPE_ACTOR);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterBox, clutter_box, CLUTTER_TYPE_ACTOR)
static inline void
clutter_box_set_color_internal (ClutterBox *box,
@@ -238,8 +234,6 @@ clutter_box_class_init (ClutterBoxClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterBoxPrivate));
-
actor_class->destroy = clutter_box_real_destroy;
actor_class->get_paint_volume = clutter_box_real_get_paint_volume;
@@ -282,7 +276,7 @@ clutter_box_class_init (ClutterBoxClass *klass)
static void
clutter_box_init (ClutterBox *self)
{
- self->priv = CLUTTER_BOX_GET_PRIVATE (self);
+ self->priv = clutter_box_get_instance_private (self);
}
/**
diff --git a/clutter/deprecated/clutter-cairo-texture.c b/clutter/deprecated/clutter-cairo-texture.c
index d08b6eaba..c69149c81 100644
--- a/clutter/deprecated/clutter-cairo-texture.c
+++ b/clutter/deprecated/clutter-cairo-texture.c
@@ -34,11 +34,11 @@
* Cairo image surface which will then be uploaded to a GL texture when
* needed.
*
- * Since #ClutterCairoTexture uses a Cairo image surface
+ * Since #ClutterCairoTexture uses a Cairo image surface
* internally all the drawing operations will be performed in
* software and not using hardware acceleration. This can lead to
* performance degradation if the contents of the texture change
- * frequently.
+ * frequently.
*
* In order to use a #ClutterCairoTexture you should connect to the
* #ClutterCairoTexture::draw signal; the signal is emitted each time
@@ -51,18 +51,10 @@
* is owned by the #ClutterCairoTexture and should not be destroyed
* explicitly.
*
- *
- * A simple ClutterCairoTexture canvas
- *
- *
- * FIXME: MISSING XINCLUDE CONTENT
- *
- *
- *
- *
* #ClutterCairoTexture is available since Clutter 1.0.
*
- * #ClutterCairoTexture is deprecated since Clutter 1.12.
+ * #ClutterCairoTexture is deprecated since Clutter 1.12. You should
+ * use #ClutterCanvas instead.
*/
#ifdef HAVE_CONFIG_H
@@ -86,9 +78,17 @@
#include "clutter-marshal.h"
#include "clutter-private.h"
-G_DEFINE_TYPE (ClutterCairoTexture,
- clutter_cairo_texture,
- CLUTTER_TYPE_TEXTURE);
+struct _ClutterCairoTexturePrivate
+{
+ cairo_surface_t *cr_surface;
+
+ guint surface_width;
+ guint surface_height;
+
+ cairo_t *cr_context;
+
+ guint auto_resize : 1;
+};
enum
{
@@ -113,6 +113,10 @@ static GParamSpec *obj_props[PROP_LAST] = { NULL, };
static guint cairo_signals[LAST_SIGNAL] = { 0, };
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterCairoTexture,
+ clutter_cairo_texture,
+ CLUTTER_TYPE_TEXTURE)
+
#ifdef CLUTTER_ENABLE_DEBUG
#define clutter_warn_if_paint_fail(obj) G_STMT_START { \
if (CLUTTER_ACTOR_IN_PAINT (obj)) { \
@@ -124,20 +128,6 @@ static guint cairo_signals[LAST_SIGNAL] = { 0, };
#define clutter_warn_if_paint_fail(obj) /* void */
#endif /* CLUTTER_ENABLE_DEBUG */
-#define CLUTTER_CAIRO_TEXTURE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_CAIRO_TEXTURE, ClutterCairoTexturePrivate))
-
-struct _ClutterCairoTexturePrivate
-{
- cairo_surface_t *cr_surface;
-
- guint surface_width;
- guint surface_height;
-
- cairo_t *cr_context;
-
- guint auto_resize : 1;
-};
-
typedef struct {
ClutterCairoTexture *texture;
@@ -580,8 +570,6 @@ clutter_cairo_texture_class_init (ClutterCairoTextureClass *klass)
klass->create_surface = clutter_cairo_texture_create_surface;
- g_type_class_add_private (gobject_class, sizeof (ClutterCairoTexturePrivate));
-
/**
* ClutterCairoTexture:surface-width:
*
@@ -711,7 +699,7 @@ clutter_cairo_texture_class_init (ClutterCairoTextureClass *klass)
static void
clutter_cairo_texture_init (ClutterCairoTexture *self)
{
- self->priv = CLUTTER_CAIRO_TEXTURE_GET_PRIVATE (self);
+ self->priv = clutter_cairo_texture_get_instance_private (self);
/* FIXME - we are hardcoding the format; it would be good to have
* a :surface-format construct-only property for creating
@@ -849,9 +837,9 @@ clutter_cairo_texture_create_region_internal (ClutterCairoTexture *self,
* Creates a new Cairo context that will updat the region defined
* by @x_offset, @y_offset, @width and @height.
*
- * Do not call this function within the paint virtual
+ * Do not call this function within the paint virtual
* function or from a callback to the #ClutterActor::paint
- * signal.
+ * signal.
*
* Return value: a newly created Cairo context. Use cairo_destroy()
* to upload the contents of the context when done drawing
@@ -971,9 +959,9 @@ clutter_cairo_texture_invalidate (ClutterCairoTexture *self)
* and @y_offset of 0, @width equal to the @cairo texture surface width
* and @height equal to the @cairo texture surface height.
*
- * Do not call this function within the paint virtual
+ * Do not call this function within the paint virtual
* function or from a callback to the #ClutterActor::paint
- * signal.
+ * signal.
*
* Return value: a newly created Cairo context. Use cairo_destroy()
* to upload the contents of the context when done drawing
diff --git a/clutter/deprecated/clutter-fixed.h b/clutter/deprecated/clutter-fixed.h
index c756ef43c..215e6260e 100644
--- a/clutter/deprecated/clutter-fixed.h
+++ b/clutter/deprecated/clutter-fixed.h
@@ -75,6 +75,7 @@ struct _ClutterParamSpecFixed
CoglFixed default_value;
};
+CLUTTER_DEPRECATED_IN_1_10
GType clutter_param_fixed_get_type (void) G_GNUC_CONST;
CLUTTER_DEPRECATED_IN_1_10_FOR(g_value_set_int)
diff --git a/clutter/deprecated/clutter-frame-source.c b/clutter/deprecated/clutter-frame-source.c
index cd2fb06a1..e0a82a2b0 100644
--- a/clutter/deprecated/clutter-frame-source.c
+++ b/clutter/deprecated/clutter-frame-source.c
@@ -60,7 +60,7 @@ static GSourceFuncs clutter_frame_source_funcs =
};
/**
- * clutter_frame_source_add_full:
+ * clutter_frame_source_add_full: (rename-to clutter_frame_source_add)
* @priority: the priority of the frame source. Typically this will be in the
* range between %G_PRIORITY_DEFAULT and %G_PRIORITY_HIGH.
* @fps: the number of times per second to call the function
@@ -85,8 +85,6 @@ static GSourceFuncs clutter_frame_source_funcs =
* multiple times to catch up missing frames if @func takes more than
* @interval ms to execute.
*
- * Rename to: clutter_frame_source_add
- *
* Return value: the ID (greater than 0) of the event source.
*
* Since: 0.8
@@ -183,7 +181,7 @@ clutter_frame_source_dispatch (GSource *source,
}
/**
- * clutter_threads_add_frame_source_full:
+ * clutter_threads_add_frame_source_full: (rename-to clutter_threads_add_frame_source)
* @priority: the priority of the frame source. Typically this will be in the
* range between %G_PRIORITY_DEFAULT and %G_PRIORITY_HIGH.
* @fps: the number of times per second to call the function
@@ -209,8 +207,6 @@ clutter_frame_source_dispatch (GSource *source,
*
* See also clutter_threads_add_idle_full().
*
- * Rename to: clutter_threads_add_frame_source
- *
* Return value: the ID (greater than 0) of the event source.
*
* Since: 0.8
diff --git a/clutter/deprecated/clutter-group.c b/clutter/deprecated/clutter-group.c
index 365b0dc5a..5afaf2b6c 100644
--- a/clutter/deprecated/clutter-group.c
+++ b/clutter/deprecated/clutter-group.c
@@ -65,8 +65,6 @@
#include "cogl/cogl.h"
-#define CLUTTER_GROUP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_GROUP, ClutterGroupPrivate))
-
struct _ClutterGroupPrivate
{
GList *children;
@@ -77,6 +75,7 @@ struct _ClutterGroupPrivate
static void clutter_container_iface_init (ClutterContainerIface *iface);
G_DEFINE_TYPE_WITH_CODE (ClutterGroup, clutter_group, CLUTTER_TYPE_ACTOR,
+ G_ADD_PRIVATE (ClutterGroup)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
clutter_container_iface_init));
@@ -441,8 +440,6 @@ clutter_group_class_init (ClutterGroupClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
- g_type_class_add_private (klass, sizeof (ClutterGroupPrivate));
-
actor_class->get_preferred_width = clutter_group_real_get_preferred_width;
actor_class->get_preferred_height = clutter_group_real_get_preferred_height;
actor_class->allocate = clutter_group_real_allocate;
@@ -460,7 +457,7 @@ clutter_group_init (ClutterGroup *self)
{
ClutterActor *actor = CLUTTER_ACTOR (self);
- self->priv = CLUTTER_GROUP_GET_PRIVATE (self);
+ self->priv = clutter_group_get_instance_private (self);
/* turn on some optimization
*
diff --git a/clutter/deprecated/clutter-keysyms.h b/clutter/deprecated/clutter-keysyms.h
index ad99ee2ff..18bb4cd8f 100644
--- a/clutter/deprecated/clutter-keysyms.h
+++ b/clutter/deprecated/clutter-keysyms.h
@@ -278,6 +278,10 @@
#define CLUTTER_dead_invertedbreve 0xfe6d
#define CLUTTER_dead_belowcomma 0xfe6e
#define CLUTTER_dead_currency 0xfe6f
+#define CLUTTER_dead_lowline 0xfe90
+#define CLUTTER_dead_aboveverticalline 0xfe91
+#define CLUTTER_dead_belowverticalline 0xfe92
+#define CLUTTER_dead_longsolidusoverlay 0xfe93
#define CLUTTER_dead_a 0xfe80
#define CLUTTER_dead_A 0xfe81
#define CLUTTER_dead_e 0xfe82
@@ -2282,6 +2286,7 @@
#define CLUTTER_TouchpadToggle 0x1008ffa9
#define CLUTTER_TouchpadOn 0x1008ffb0
#define CLUTTER_TouchpadOff 0x1008ffb1
+#define CLUTTER_AudioMicMute 0x1008ffb2
#define CLUTTER_Switch_VT_1 0x1008fe01
#define CLUTTER_Switch_VT_2 0x1008fe02
#define CLUTTER_Switch_VT_3 0x1008fe03
diff --git a/clutter/deprecated/clutter-rectangle.c b/clutter/deprecated/clutter-rectangle.c
index b6236aff5..0565658f5 100644
--- a/clutter/deprecated/clutter-rectangle.c
+++ b/clutter/deprecated/clutter-rectangle.c
@@ -48,7 +48,15 @@
#include "cogl/cogl.h"
-G_DEFINE_TYPE (ClutterRectangle, clutter_rectangle, CLUTTER_TYPE_ACTOR);
+struct _ClutterRectanglePrivate
+{
+ ClutterColor color;
+ ClutterColor border_color;
+
+ guint border_width;
+
+ guint has_border : 1;
+};
enum
{
@@ -62,22 +70,11 @@ enum
/* FIXME: Add gradient, rounded corner props etc */
};
-#define CLUTTER_RECTANGLE_GET_PRIVATE(obj) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_RECTANGLE, ClutterRectanglePrivate))
-
-struct _ClutterRectanglePrivate
-{
- ClutterColor color;
- ClutterColor border_color;
-
- guint border_width;
-
- guint has_border : 1;
-};
-
static const ClutterColor default_color = { 255, 255, 255, 255 };
static const ClutterColor default_border_color = { 0, 0, 0, 255 };
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterRectangle, clutter_rectangle, CLUTTER_TYPE_ACTOR)
+
static void
clutter_rectangle_paint (ClutterActor *self)
{
@@ -319,8 +316,6 @@ clutter_rectangle_class_init (ClutterRectangleClass *klass)
P_("Whether the rectangle should have a border"),
FALSE,
CLUTTER_PARAM_READWRITE));
-
- g_type_class_add_private (gobject_class, sizeof (ClutterRectanglePrivate));
}
static void
@@ -328,7 +323,7 @@ clutter_rectangle_init (ClutterRectangle *self)
{
ClutterRectanglePrivate *priv;
- self->priv = priv = CLUTTER_RECTANGLE_GET_PRIVATE (self);
+ self->priv = priv = clutter_rectangle_get_instance_private (self);
priv->color = default_color;
priv->border_color = default_border_color;
diff --git a/clutter/deprecated/clutter-score.c b/clutter/deprecated/clutter-score.c
index 2991d6591..bae728598 100644
--- a/clutter/deprecated/clutter-score.c
+++ b/clutter/deprecated/clutter-score.c
@@ -114,8 +114,6 @@ struct _ClutterScoreEntry
GNode *node;
};
-#define CLUTTER_SCORE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_SCORE, ClutterScorePrivate))
-
struct _ClutterScorePrivate
{
GNode *root;
@@ -149,7 +147,7 @@ enum
static inline void clutter_score_clear (ClutterScore *score);
-G_DEFINE_TYPE (ClutterScore, clutter_score, G_TYPE_OBJECT);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterScore, clutter_score, G_TYPE_OBJECT)
static int score_signals[LAST_SIGNAL] = { 0 };
@@ -161,7 +159,9 @@ clutter_score_set_property (GObject *gobject,
const GValue *value,
GParamSpec *pspec)
{
- ClutterScorePrivate *priv = CLUTTER_SCORE_GET_PRIVATE (gobject);
+ ClutterScorePrivate *priv;
+
+ priv = clutter_score_get_instance_private (CLUTTER_SCORE (gobject));
switch (prop_id)
{
@@ -180,7 +180,9 @@ clutter_score_get_property (GObject *gobject,
GValue *value,
GParamSpec *pspec)
{
- ClutterScorePrivate *priv = CLUTTER_SCORE_GET_PRIVATE (gobject);
+ ClutterScorePrivate *priv;
+
+ priv = clutter_score_get_instance_private (CLUTTER_SCORE (gobject));
switch (prop_id)
{
@@ -213,8 +215,6 @@ clutter_score_class_init (ClutterScoreClass *klass)
gobject_class->get_property = clutter_score_get_property;
gobject_class->finalize = clutter_score_finalize;
- g_type_class_add_private (klass, sizeof (ClutterScorePrivate));
-
/**
* ClutterScore:loop:
*
@@ -330,7 +330,7 @@ clutter_score_init (ClutterScore *self)
{
ClutterScorePrivate *priv;
- self->priv = priv = CLUTTER_SCORE_GET_PRIVATE (self);
+ self->priv = priv = clutter_score_get_instance_private (self);
/* sentinel */
priv->root = g_node_new (NULL);
diff --git a/clutter/deprecated/clutter-shader.c b/clutter/deprecated/clutter-shader.c
index 3e728ca01..8e50c88d5 100644
--- a/clutter/deprecated/clutter-shader.c
+++ b/clutter/deprecated/clutter-shader.c
@@ -71,8 +71,6 @@
/* global list of shaders */
static GList *clutter_shaders_list = NULL;
-#define CLUTTER_SHADER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_SHADER, ClutterShaderPrivate))
-
struct _ClutterShaderPrivate
{
guint compiled : 1; /* Shader is bound to the GL context */
@@ -103,7 +101,7 @@ enum
static GParamSpec *obj_props[PROP_LAST];
-G_DEFINE_TYPE (ClutterShader, clutter_shader, G_TYPE_OBJECT);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterShader, clutter_shader, G_TYPE_OBJECT)
static inline void
clutter_shader_release_internal (ClutterShader *shader)
@@ -245,8 +243,6 @@ clutter_shader_class_init (ClutterShaderClass *klass)
object_class->get_property = clutter_shader_get_property;
object_class->constructor = clutter_shader_constructor;
- g_type_class_add_private (klass, sizeof (ClutterShaderPrivate));
-
/**
* ClutterShader:vertex-source:
*
@@ -323,7 +319,7 @@ clutter_shader_init (ClutterShader *self)
{
ClutterShaderPrivate *priv;
- priv = self->priv = CLUTTER_SHADER_GET_PRIVATE (self);
+ priv = self->priv = clutter_shader_get_instance_private (self);
priv->compiled = FALSE;
diff --git a/clutter/deprecated/clutter-state.c b/clutter/deprecated/clutter-state.c
index 8df11a178..f482de2ae 100644
--- a/clutter/deprecated/clutter-state.c
+++ b/clutter/deprecated/clutter-state.c
@@ -31,15 +31,20 @@
* is NULL it is used for transition to the target state unless a specific key
* exists for transitioning from the current state to the requested state.
*
- *
- * A ClutterState example
- * The following example defines a "base" and a "hover" state in a
- * #ClutterState instance.
- *
+ * #ClutterState is available since Clutter 1.4.
+ *
+ * #ClutterState has been deprecated in Clutter 1.12.
+ *
+ * ## Using ClutterState
+ *
+ * The following example defines a "base" and a "hover" state in a
+ * #ClutterState instance.
+ *
+ * |[
* ClutterState *state = clutter_state_new ();
* ClutterColor color = { 0, };
*
- * /* transition from any state to the "base" state */
+ * // transition from any state to the "base" state
* clutter_color_from_string (&color, "rgb(255, 0, 0)");
* clutter_state_set (state, NULL, "base",
* actor, "color", CLUTTER_LINEAR, &color,
@@ -47,7 +52,7 @@
* actor, "scale-y", CLUTTER_EASE_IN_BOUNCE, 1.0,
* NULL);
*
- * /* transition from the "base" state to the "hover" state */
+ * // transition from the "base" state to the "hover" state
* clutter_color_from_string (&color, "rgb(0, 0, 255)");
* clutter_state_set (state, "base", "hover",
* actor, "color", CLUTTER_LINEAR, &color,
@@ -55,16 +60,18 @@
* actor, "scale-y", CLUTTER_EASE_OUT_BOUNCE, 1.7,
* NULL);
*
- * /* the default duration of any transition */
+ * // the default duration of any transition
* clutter_state_set_duration (state, NULL, NULL, 500);
*
- * /* set "base" as the initial state */
+ * // set "base" as the initial state
* clutter_state_warp_to_state (state, "base");
- *
- * The actor then uses the #ClutterState to animate through the
- * two states using callbacks for the #ClutterActor::enter-event and
- * #ClutterActor::leave-event signals.
- *
+ * ]|
+ *
+ * The actor then uses the #ClutterState to animate through the
+ * two states using callbacks for the #ClutterActor::enter-event and
+ * #ClutterActor::leave-event signals.
+ *
+ * |[
* static gboolean
* on_enter (ClutterActor *actor,
* ClutterEvent *event,
@@ -72,7 +79,7 @@
* {
* clutter_state_set_state (state, "hover");
*
- * return TRUE;
+ * return CLUTTER_EVENT_STOP;
* }
*
* static gboolean
@@ -82,67 +89,64 @@
* {
* clutter_state_set_state (state, "base");
*
- * return TRUE;
+ * return CLUTTER_EVENT_STOP;
* }
- *
- *
*
- *
- * ClutterState description for #ClutterScript
- * #ClutterState defines a custom transitions
- * property which allows describing the states.
- * The transitions property has the following
- * syntax:
- *
- *
+ * ## ClutterState description for ClutterScript
+ *
+ * #ClutterState defines a custom `transitions` JSON object member which
+ * allows describing the states.
+ *
+ * The `transitions` property has the following syntax:
+ *
+ * |[
* {
* "transitions" : [
* {
- * "source" : "<source-state>",
- * "target" : "<target-state>",
- * "duration" : <milliseconds>,
+ * "source" : "source-state",
+ * "target" : "target-state",
+ * "duration" : milliseconds,
* "keys" : [
* [
- * "<object-id>",
- * "<property-name>",
- * "<easing-mode>",
- * "<final-value>",
+ * "object-id",
+ * "property-name",
+ * "easing-mode",
+ * "final-value",
* ],
* [
- * "<object-id>",
- * "<property-name>",
- * "<easing-mode>",
- * "<final-value>",
- * <pre-delay>,
- * <post-delay>
+ * "object-id",
+ * "property-name",
+ * "easing-mode",
+ * "final-value",
+ * pre-delay,
+ * post-delay;
* ],
* ...
* ]
* },
* {
- * "source" : "<source-state>",
- * "target" : "<target-state>",
- * "duration" : <milliseconds>,
- * "animator" : "<animator-definition>"
+ * "source" : "source-state",
+ * "target" : "target-state",
+ * "duration" : milliseconds,
+ * "animator" : "animator-definition"
* },
* ...
* ]
* }
- *
- *
- * Each element of the transitions array follows
- * the same rules as clutter_state_set_key().
- * The source and target
- * values control the source and target state of the transition. The
- * key and animator are mutually
- * exclusive. The pre-delay and
- * post-delay values are optional.
- *
- * ClutterState definition
- * The example below is a translation into a #ClutterScript
- * definition of the code in the example
- * above.
- *
+ * ]|
+ *
+ * Each element of the transitions array follows the same rules and order
+ * as clutter_state_set_key() function arguments.
+ *
+ * The source and target values control the source and target state of the
+ * transition. The key and animator properties are mutually exclusive.
+ *
+ * The pre-delay and post-delay values are optional.
+ *
+ * The example below is a translation into a #ClutterScript definition of
+ * the code in the #ClutterState example above.
+ *
+ * |[
* {
* "id" : "button-state",
* "type" : "ClutterState",
@@ -168,13 +172,7 @@
* }
* ]
* }
- *
- *
- *
- *
- * #ClutterState is available since Clutter 1.4.
- *
- * #ClutterState has been deprecated in Clutter 1.12.
+ * ]|
*/
#ifdef HAVE_CONFIG_H
@@ -287,14 +285,10 @@ static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
static guint state_signals[LAST_SIGNAL] = {0, };
-#define CLUTTER_STATE_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_STATE, \
- ClutterStatePrivate))
-
G_DEFINE_TYPE_WITH_CODE (ClutterState, clutter_state, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (ClutterState)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
+ clutter_scriptable_iface_init))
/**
* clutter_state_new:
@@ -937,7 +931,7 @@ get_property_from_object (GObject *gobject,
*
* will create a transition from any state (a @source_state_name or NULL is
* treated as a wildcard) and a state named "hover"; the
- * button object will have the #ClutterActor:opacity
+ * button object will have the #ClutterActor:opacity
* property animated to a value of 255 using %CLUTTER_LINEAR as the animation
* mode, and the #ClutterActor:scale-x and #ClutterActor:scale-y properties
* animated to a value of 1.2 using %CLUTTER_EASE_OUT_CUBIC as the animation
@@ -1462,8 +1456,6 @@ clutter_state_class_init (ClutterStateClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterStatePrivate));
-
gobject_class->finalize = clutter_state_finalize;
gobject_class->set_property = clutter_state_set_property;
gobject_class->get_property = clutter_state_get_property;
@@ -1533,7 +1525,7 @@ clutter_state_init (ClutterState *self)
{
ClutterStatePrivate *priv;
- priv = self->priv = CLUTTER_STATE_GET_PRIVATE (self);
+ priv = self->priv = clutter_state_get_instance_private (self);
priv->states = g_hash_table_new_full (g_direct_hash, g_direct_equal,
NULL,
diff --git a/clutter/deprecated/clutter-state.h b/clutter/deprecated/clutter-state.h
index c446e7784..e33ae0fec 100644
--- a/clutter/deprecated/clutter-state.h
+++ b/clutter/deprecated/clutter-state.h
@@ -42,7 +42,7 @@ typedef struct _ClutterStateClass ClutterStateClass;
/**
* ClutterStateKey:
*
- * ClutterStateKey is an opaque structure whose
+ * #ClutterStateKey is an opaque structure whose
* members cannot be accessed directly
*
* Since: 1.4
@@ -52,7 +52,7 @@ typedef struct _ClutterStateKey ClutterStateKey;
/**
* ClutterState:
*
- * The ClutterState structure contains only
+ * The #ClutterState structure contains only
* private data and should be accessed using the provided API
*
* Since: 1.4
@@ -68,7 +68,7 @@ struct _ClutterState
* ClutterStateClass:
* @completed: class handler for the #ClutterState::completed signal
*
- * The ClutterStateClass structure contains
+ * The #ClutterStateClass structure contains
* only private data
*
* Since: 1.4
diff --git a/clutter/clutter-table-layout.c b/clutter/deprecated/clutter-table-layout.c
similarity index 97%
rename from clutter/clutter-table-layout.c
rename to clutter/deprecated/clutter-table-layout.c
index 9927ad59a..28fad3c10 100644
--- a/clutter/clutter-table-layout.c
+++ b/clutter/deprecated/clutter-table-layout.c
@@ -36,22 +36,20 @@
* The #ClutterTableLayout is a #ClutterLayoutManager implementing the
* following layout policy:
*
- *
- * children are arranged in a table
- * each child specifies the specific row and column
- * cell to appear;
- * a child can also set a span, and this way, take
- * more than one cell both horizontally and vertically;
- * each child will be allocated to its natural
- * size or, if set to expand, the available size;
- * if a child is set to fill on either (or both)
+ * - children are arranged in a table
+ * - each child specifies the specific row and column
+ * cell to appear;
+ * - a child can also set a span, and this way, take
+ * more than one cell both horizontally and vertically;
+ * - each child will be allocated to its natural
+ * size or, if set to expand, the available size;
+ * - if a child is set to fill on either (or both)
* axis, its allocation will match all the available size; the
* fill layout property only makes sense if the expand property is
- * also set;
- * if a child is set to expand but not to fill then
+ * also set;
+ * - if a child is set to expand but not to fill then
* it is possible to control the alignment using the horizontal and
- * vertical alignment layout properties.
- *
+ * vertical alignment layout properties.
*
* It is possible to control the spacing between children of a
* #ClutterTableLayout by using clutter_table_layout_set_row_spacing()
@@ -67,13 +65,13 @@
* #ClutterTableLayout:easing-mode and #ClutterTableLayout:easing-duration
* properties and their accessor functions.
*
- *
- * Table layout
- * The image shows a #ClutterTableLayout.
- *
- *
- *
* #ClutterTableLayout is available since Clutter 1.4
+ *
+ * Since Clutter 1.18 it's recommended to use #ClutterGridLayout instead
+ * of #ClutterTableLayout; the former supports right-to-left text direction,
+ * as well as using the alignment and expansion flags on #ClutterActor.
+ *
+ * Deprecated: 1.18
*/
#ifdef HAVE_CONFIG_H
@@ -98,8 +96,6 @@
#define CLUTTER_TABLE_CHILD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TABLE_CHILD, ClutterTableChild))
#define CLUTTER_IS_TABLE_CHILD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_TABLE_CHILD))
-#define CLUTTER_TABLE_LAYOUT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_TABLE_LAYOUT, ClutterTableLayoutPrivate))
-
typedef struct _ClutterTableChild ClutterTableChild;
typedef struct _ClutterLayoutMetaClass ClutterTableChildClass;
@@ -184,13 +180,9 @@ enum
GType clutter_table_child_get_type (void);
-G_DEFINE_TYPE (ClutterTableChild,
- clutter_table_child,
- CLUTTER_TYPE_LAYOUT_META);
+G_DEFINE_TYPE (ClutterTableChild, clutter_table_child, CLUTTER_TYPE_LAYOUT_META)
-G_DEFINE_TYPE (ClutterTableLayout,
- clutter_table_layout,
- CLUTTER_TYPE_LAYOUT_MANAGER);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterTableLayout, clutter_table_layout, CLUTTER_TYPE_LAYOUT_MANAGER)
/*
* ClutterBoxChild
@@ -574,28 +566,28 @@ clutter_table_child_class_init (ClutterTableChildClass *klass)
pspec = g_param_spec_boolean ("x-expand",
P_("Horizontal Expand"),
P_("Allocate extra space for the child in horizontal axis"),
- FALSE,
+ TRUE,
CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_CHILD_X_EXPAND, pspec);
pspec = g_param_spec_boolean ("y-expand",
P_("Vertical Expand"),
P_("Allocate extra space for the child in vertical axis"),
- FALSE,
+ TRUE,
CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_CHILD_Y_EXPAND, pspec);
pspec = g_param_spec_boolean ("x-fill",
P_("Horizontal Fill"),
P_("Whether the child should receive priority when the container is allocating spare space on the horizontal axis"),
- FALSE,
+ TRUE,
CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_CHILD_X_FILL, pspec);
pspec = g_param_spec_boolean ("y-fill",
P_("Vertical Fill"),
P_("Whether the child should receive priority when the container is allocating spare space on the vertical axis"),
- FALSE,
+ TRUE,
CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_CHILD_Y_FILL, pspec);
@@ -889,8 +881,8 @@ calculate_col_widths (ClutterTableLayout *self,
n_expand++;
}
- pref_width += priv->col_spacing * (priv->n_cols - 1);
- min_width += priv->col_spacing * (priv->n_cols - 1);
+ pref_width += priv->col_spacing * MAX (priv->visible_cols - 1, 0);
+ min_width += priv->col_spacing * MAX (priv->visible_cols - 1, 0);
if (for_width <= min_width)
{
@@ -1179,8 +1171,8 @@ calculate_row_heights (ClutterTableLayout *self,
n_expand++;
}
- pref_height += priv->row_spacing * (priv->n_rows - 1);
- min_height += priv->row_spacing * (priv->n_rows - 1);
+ pref_height += priv->row_spacing * MAX (priv->visible_rows - 1, 0);
+ min_height += priv->row_spacing * MAX (priv->visible_rows - 1, 0);
if (for_height <= min_height)
{
@@ -1297,7 +1289,7 @@ clutter_table_layout_get_preferred_width (ClutterLayoutManager *layout,
calculate_table_dimensions (self, container, -1, for_height);
columns = (DimensionData *) (void *) priv->columns->data;
- total_min_width = (priv->visible_cols - 1) * (float) priv->col_spacing;
+ total_min_width = MAX ((priv->visible_cols - 1) * (float) priv->col_spacing, 0);
total_pref_width = total_min_width;
for (i = 0; i < priv->n_cols; i++)
@@ -1337,7 +1329,7 @@ clutter_table_layout_get_preferred_height (ClutterLayoutManager *layout,
calculate_table_dimensions (self, container, for_width, -1);
rows = (DimensionData *) (void *) priv->rows->data;
- total_min_height = (priv->visible_rows - 1) * (float) priv->row_spacing;
+ total_min_height = MAX ((priv->visible_rows - 1) * (float) priv->row_spacing, 0);
total_pref_height = total_min_height;
for (i = 0; i < self->priv->n_rows; i++)
@@ -1624,14 +1616,14 @@ clutter_table_layout_class_init (ClutterTableLayoutClass *klass)
layout_class->get_child_meta_type =
clutter_table_layout_get_child_meta_type;
- g_type_class_add_private (klass, sizeof (ClutterTableLayoutPrivate));
-
/**
* ClutterTableLayout:column-spacing:
*
* The spacing between columns of the #ClutterTableLayout, in pixels
*
* Since: 1.4
+ *
+ * Deprecated: 1.18
*/
pspec = g_param_spec_uint ("column-spacing",
P_("Column Spacing"),
@@ -1646,6 +1638,8 @@ clutter_table_layout_class_init (ClutterTableLayoutClass *klass)
* The spacing between rows of the #ClutterTableLayout, in pixels
*
* Since: 1.4
+ *
+ * Deprecated: 1.18
*/
pspec = g_param_spec_uint ("row-spacing",
P_("Row Spacing"),
@@ -1731,7 +1725,7 @@ clutter_table_layout_init (ClutterTableLayout *layout)
{
ClutterTableLayoutPrivate *priv;
- layout->priv = priv = CLUTTER_TABLE_LAYOUT_GET_PRIVATE (layout);
+ layout->priv = priv = clutter_table_layout_get_instance_private (layout);
priv->row_spacing = 0;
priv->col_spacing = 0;
@@ -1752,6 +1746,8 @@ clutter_table_layout_init (ClutterTableLayout *layout)
* Return value: the newly created #ClutterTableLayout
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
ClutterLayoutManager *
clutter_table_layout_new (void)
@@ -1767,6 +1763,8 @@ clutter_table_layout_new (void)
* Sets the spacing between columns of @layout
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
void
clutter_table_layout_set_column_spacing (ClutterTableLayout *layout,
@@ -1800,6 +1798,8 @@ clutter_table_layout_set_column_spacing (ClutterTableLayout *layout,
* Return value: the spacing between columns of the #ClutterTableLayout
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
guint
clutter_table_layout_get_column_spacing (ClutterTableLayout *layout)
@@ -1817,6 +1817,8 @@ clutter_table_layout_get_column_spacing (ClutterTableLayout *layout)
* Sets the spacing between rows of @layout
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
void
clutter_table_layout_set_row_spacing (ClutterTableLayout *layout,
@@ -1850,6 +1852,8 @@ clutter_table_layout_set_row_spacing (ClutterTableLayout *layout,
* Return value: the spacing between rows of the #ClutterTableLayout
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
guint
clutter_table_layout_get_row_spacing (ClutterTableLayout *layout)
@@ -1870,6 +1874,8 @@ clutter_table_layout_get_row_spacing (ClutterTableLayout *layout)
* at the given row and column.
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
void
clutter_table_layout_pack (ClutterTableLayout *layout,
@@ -1924,6 +1930,8 @@ clutter_table_layout_pack (ClutterTableLayout *layout,
* inside @layout
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
void
clutter_table_layout_set_span (ClutterTableLayout *layout,
@@ -1978,6 +1986,8 @@ clutter_table_layout_set_span (ClutterTableLayout *layout,
* clutter_table_layout_pack() or clutter_table_layout_set_span()
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
void
clutter_table_layout_get_span (ClutterTableLayout *layout,
@@ -2559,6 +2569,8 @@ clutter_table_layout_get_easing_duration (ClutterTableLayout *layout)
* Returns: the number of rows
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
gint
clutter_table_layout_get_row_count (ClutterTableLayout *layout)
@@ -2578,6 +2590,8 @@ clutter_table_layout_get_row_count (ClutterTableLayout *layout)
* Returns: the number of columns
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
gint
clutter_table_layout_get_column_count (ClutterTableLayout *layout)
diff --git a/clutter/clutter-table-layout.h b/clutter/deprecated/clutter-table-layout.h
similarity index 92%
rename from clutter/clutter-table-layout.h
rename to clutter/deprecated/clutter-table-layout.h
index 06d6e5105..dffbfb777 100644
--- a/clutter/clutter-table-layout.h
+++ b/clutter/deprecated/clutter-table-layout.h
@@ -54,6 +54,8 @@ typedef struct _ClutterTableLayoutClass ClutterTableLayoutClass;
* and should be accessed using the provided API
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
struct _ClutterTableLayout
{
@@ -70,6 +72,8 @@ struct _ClutterTableLayout
* data and should be accessed using the provided API
*
* Since: 1.4
+ *
+ * Deprecated: 1.18: Use #ClutterGridLayout instead
*/
struct _ClutterTableLayoutClass
{
@@ -77,26 +81,35 @@ struct _ClutterTableLayoutClass
ClutterLayoutManagerClass parent_class;
};
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_get_type)
GType clutter_table_layout_get_type (void) G_GNUC_CONST;
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_new)
ClutterLayoutManager *clutter_table_layout_new (void);
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_attach)
void clutter_table_layout_pack (ClutterTableLayout *layout,
ClutterActor *actor,
gint column,
gint row);
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_set_column_spacing)
void clutter_table_layout_set_column_spacing (ClutterTableLayout *layout,
guint spacing);
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_set_row_spacing)
void clutter_table_layout_set_row_spacing (ClutterTableLayout *layout,
guint spacing);
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_get_column_spacing)
guint clutter_table_layout_get_column_spacing (ClutterTableLayout *layout);
+CLUTTER_DEPRECATED_IN_1_18_FOR (clutter_grid_layout_get_row_spacing)
guint clutter_table_layout_get_row_spacing (ClutterTableLayout *layout);
+CLUTTER_DEPRECATED_IN_1_18
void clutter_table_layout_set_span (ClutterTableLayout *layout,
ClutterActor *actor,
gint column_span,
gint row_span);
+CLUTTER_DEPRECATED_IN_1_18
void clutter_table_layout_get_span (ClutterTableLayout *layout,
ClutterActor *actor,
gint *column_span,
@@ -133,7 +146,9 @@ void clutter_table_layout_get_expand (ClutterTableLayo
gboolean *x_expand,
gboolean *y_expand);
+CLUTTER_DEPRECATED_IN_1_18
gint clutter_table_layout_get_row_count (ClutterTableLayout *layout);
+CLUTTER_DEPRECATED_IN_1_18
gint clutter_table_layout_get_column_count (ClutterTableLayout *layout);
CLUTTER_DEPRECATED_IN_1_12
diff --git a/clutter/deprecated/clutter-texture.c b/clutter/deprecated/clutter-texture.c
index 448c8849f..d72f0e3e6 100644
--- a/clutter/deprecated/clutter-texture.c
+++ b/clutter/deprecated/clutter-texture.c
@@ -47,6 +47,9 @@
#include "config.h"
#endif
+/* sadly, we are still using ClutterShader internally */
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+
/* This file depends on the glib enum types which aren't exposed
* by cogl.h when COGL_ENABLE_EXPERIMENTAL_2_0_API is defined.
*
@@ -58,9 +61,6 @@
#define CLUTTER_ENABLE_EXPERIMENTAL_API
-/* sadly, we are still using ClutterShader internally */
-#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
-
#include "clutter-texture.h"
#include "clutter-actor-private.h"
@@ -78,16 +78,6 @@
#include "deprecated/clutter-texture.h"
#include "deprecated/clutter-util.h"
-static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (ClutterTexture,
- clutter_texture,
- CLUTTER_TYPE_ACTOR,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
- clutter_scriptable_iface_init));
-
-#define CLUTTER_TEXTURE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_TEXTURE, ClutterTexturePrivate))
-
typedef struct _ClutterTextureAsyncData ClutterTextureAsyncData;
struct _ClutterTexturePrivate
@@ -194,6 +184,16 @@ static CoglPipeline *texture_template_pipeline = NULL;
static void
texture_fbo_free_resources (ClutterTexture *texture);
+static void clutter_scriptable_iface_init (ClutterScriptableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (ClutterTexture,
+ clutter_texture,
+ CLUTTER_TYPE_ACTOR,
+ G_ADD_PRIVATE (ClutterTexture)
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE,
+ clutter_scriptable_iface_init));
+
+
GQuark
clutter_texture_error_quark (void)
{
@@ -972,8 +972,6 @@ clutter_texture_class_init (ClutterTextureClass *klass)
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterTexturePrivate));
-
actor_class->paint = clutter_texture_paint;
actor_class->pick = clutter_texture_pick;
actor_class->get_paint_volume = clutter_texture_get_paint_volume;
@@ -1296,7 +1294,7 @@ clutter_texture_init (ClutterTexture *self)
{
ClutterTexturePrivate *priv;
- self->priv = priv = CLUTTER_TEXTURE_GET_PRIVATE (self);
+ self->priv = priv = clutter_texture_get_instance_private (self);
priv->repeat_x = FALSE;
priv->repeat_y = FALSE;
@@ -2516,13 +2514,8 @@ fbo_source_queue_relayout_cb (ClutterActor *source,
*
* Some tips on usage:
*
- *
- *
- * The source actor must be made visible (i.e by calling
- * #clutter_actor_show).
- *
- *
- * The source actor must have a parent in order for it to be
+ * - The source actor must be visible
+ * - The source actor must have a parent in order for it to be
* allocated a size from the layouting mechanism. If the source
* actor does not have a parent when this function is called then
* the ClutterTexture will adopt it and allocate it at its
@@ -2531,10 +2524,8 @@ fbo_source_queue_relayout_cb (ClutterActor *source,
* intend to display the source actor then you must make sure that
* the actor is parented before calling
* clutter_texture_new_from_actor() or that you unparent it before
- * adding it to a container.
- *
- *
- * When getting the image for the clone texture, Clutter
+ * adding it to a container.
+ * - When getting the image for the clone texture, Clutter
* will attempt to render the source actor exactly as it would
* appear if it was rendered on screen. The source actor's parent
* transformations are taken into account. Therefore if your
@@ -2546,33 +2537,21 @@ fbo_source_queue_relayout_cb (ClutterActor *source,
* actor will be projected as if a small section of the screen was
* being viewed. Before version 0.8.2, an orthogonal identity
* projection was used which meant that the source actor would be
- * clipped if any part of it was not on the zero Z-plane.
- *
- *
- * Avoid reparenting the source with the created texture.
- *
- *
- * A group can be padded with a transparent rectangle as to
+ * clipped if any part of it was not on the zero Z-plane.
+ * - Avoid reparenting the source with the created texture.
+ * - A group can be padded with a transparent rectangle as to
* provide a border to contents for shader output (blurring text
- * for example).
- *
- *
- * The texture will automatically resize to contain a further
+ * for example).
+ * - The texture will automatically resize to contain a further
* transformed source. However, this involves overhead and can be
* avoided by placing the source actor in a bounding group
- * sized large enough to contain any child tranformations.
- *
- *
- * Uploading pixel data to the texture (e.g by using
+ * sized large enough to contain any child tranformations.
+ * - Uploading pixel data to the texture (e.g by using
* clutter_texture_set_from_file()) will destroy the offscreen texture
- * data and end redirection.
- *
- *
- * cogl_texture_get_data() with the handle returned by
+ * data and end redirection.
+ * - cogl_texture_get_data() with the handle returned by
* clutter_texture_get_cogl_texture() can be used to read the
* offscreen texture pixels into a pixbuf.
- *
- *
*
* Return value: A newly created #ClutterTexture object, or %NULL on failure.
*
diff --git a/clutter/deprecated/clutter-timeout-pool.h b/clutter/deprecated/clutter-timeout-pool.h
index 9d7ad1d22..61780e546 100644
--- a/clutter/deprecated/clutter-timeout-pool.h
+++ b/clutter/deprecated/clutter-timeout-pool.h
@@ -42,7 +42,7 @@ G_BEGIN_DECLS
/**
* ClutterTimeoutPool: (skip)
*
- * ClutterTimeoutPool is an opaque structure
+ * #ClutterTimeoutPool is an opaque structure
* whose members cannot be directly accessed.
*
* Since: 0.6
diff --git a/clutter/egl/clutter-backend-eglnative.c b/clutter/egl/clutter-backend-eglnative.c
index a99d37491..1eccd31d9 100644
--- a/clutter/egl/clutter-backend-eglnative.c
+++ b/clutter/egl/clutter-backend-eglnative.c
@@ -53,10 +53,16 @@
#include "clutter-egl.h"
#endif
+#include "clutter-stage-eglnative.h"
+
#define clutter_backend_egl_native_get_type _clutter_backend_egl_native_get_type
G_DEFINE_TYPE (ClutterBackendEglNative, clutter_backend_egl_native, CLUTTER_TYPE_BACKEND);
+#ifdef COGL_HAS_EGL_PLATFORM_KMS_SUPPORT
+static int _kms_fd = -1;
+#endif
+
static void
clutter_backend_egl_native_dispose (GObject *gobject)
{
@@ -71,6 +77,25 @@ clutter_backend_egl_native_dispose (GObject *gobject)
G_OBJECT_CLASS (clutter_backend_egl_native_parent_class)->dispose (gobject);
}
+static CoglRenderer *
+clutter_backend_egl_native_get_renderer (ClutterBackend *backend,
+ GError **error)
+{
+ CoglRenderer *renderer;
+
+ renderer = cogl_renderer_new ();
+
+#ifdef COGL_HAS_EGL_PLATFORM_KMS_SUPPORT
+ if (_kms_fd > -1)
+ {
+ cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_EGL_KMS);
+ cogl_kms_renderer_set_kms_fd (renderer, _kms_fd);
+ }
+#endif
+
+ return renderer;
+}
+
static void
clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass)
{
@@ -79,7 +104,9 @@ clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass)
gobject_class->dispose = clutter_backend_egl_native_dispose;
- backend_class->stage_window_type = CLUTTER_TYPE_STAGE_COGL;
+ backend_class->stage_window_type = CLUTTER_TYPE_STAGE_EGL_NATIVE;
+
+ backend_class->get_renderer = clutter_backend_egl_native_get_renderer;
}
static void
@@ -157,3 +184,77 @@ clutter_egl_get_egl_display (void)
return 0;
#endif
}
+
+#ifdef COGL_HAS_EGL_PLATFORM_KMS_SUPPORT
+/**
+ * clutter_egl_set_kms_fd:
+ * @fd: The fd to talk to the kms driver with
+ *
+ * Sets the fd that Cogl should use to talk to the kms driver.
+ * Setting this to a negative value effectively reverts this
+ * call, making Cogl open the device itself.
+ *
+ * This can only be called before clutter_init() is called.
+ *
+ * Since: 1.18
+ */
+void
+clutter_egl_set_kms_fd (int fd)
+{
+ _kms_fd = fd;
+}
+#endif
+
+/**
+ * clutter_egl_freeze_master_clock:
+ *
+ * Freezing the master clock makes Clutter stop processing events,
+ * redrawing, and advancing timelines. This is necessary when implementing
+ * a display server, to ensure that Clutter doesn't keep trying to page
+ * flip when DRM master has been dropped, e.g. when VT switched away.
+ *
+ * The master clock starts out running, so if you are VT switched away on
+ * startup, you need to call this immediately.
+ *
+ * If you're also using the evdev backend, make sure to also use
+ * clutter_evdev_release_devices() to make sure that Clutter doesn't also
+ * access revoked evdev devices when VT switched away.
+ *
+ * To unthaw a frozen master clock, use clutter_egl_thaw_master_clock().
+ *
+ * Since: 1.20
+ */
+void
+clutter_egl_freeze_master_clock (void)
+{
+ ClutterMasterClock *master_clock;
+
+ g_return_if_fail (CLUTTER_IS_BACKEND_EGL_NATIVE (clutter_get_default_backend ()));
+
+ master_clock = _clutter_master_clock_get_default ();
+ _clutter_master_clock_set_paused (master_clock, TRUE);
+}
+
+/**
+ * clutter_egl_thaw_master_clock:
+ *
+ * Thaws a master clock that has previously been frozen with
+ * clutter_egl_freeze_master_clock(), and start pumping the master clock
+ * again at the next iteration. Note that if you're switching back to your
+ * own VT, you should probably also queue a stage redraw with
+ * clutter_stage_ensure_redraw().
+ *
+ * Since: 1.20
+ */
+void
+clutter_egl_thaw_master_clock (void)
+{
+ ClutterMasterClock *master_clock;
+
+ g_return_if_fail (CLUTTER_IS_BACKEND_EGL_NATIVE (clutter_get_default_backend ()));
+
+ master_clock = _clutter_master_clock_get_default ();
+ _clutter_master_clock_set_paused (master_clock, FALSE);
+
+ _clutter_master_clock_start_running (master_clock);
+}
diff --git a/clutter/egl/clutter-egl.h b/clutter/egl/clutter-egl.h
index c15cd1556..83b021343 100644
--- a/clutter/egl/clutter-egl.h
+++ b/clutter/egl/clutter-egl.h
@@ -29,9 +29,7 @@
*
* The EGL backend for Clutter provides some EGL specific API
*
- * You need to include
- *
- * to have access to the functions documented here.
+ * You need to include `clutter-egl.h` to have access to the functions documented here.
*/
#ifndef __CLUTTER_EGL_H__
@@ -46,13 +44,14 @@
#endif
#include "clutter-egl-headers.h"
+#include
G_BEGIN_DECLS
/**
* clutter_eglx_display:
*
- * Retrieves the EGLDisplay used by Clutter,
+ * Retrieves the #EGLDisplay used by Clutter,
* if Clutter has been compiled with EGL and X11 support.
*
* Return value: the EGL display
@@ -67,7 +66,7 @@ EGLDisplay clutter_eglx_display (void);
/**
* clutter_egl_display:
*
- * Retrieves the EGLDisplay used by Clutter
+ * Retrieves the #EGLDisplay used by Clutter
*
* Return value: the EGL display
*
@@ -79,14 +78,25 @@ EGLDisplay clutter_egl_display (void);
/**
* clutter_egl_get_egl_display:
*
- * Retrieves the EGLDisplay used by Clutter.
+ * Retrieves the #EGLDisplay used by Clutter.
*
* Return value: the EGL display
*
* Since: 1.6
*/
+CLUTTER_AVAILABLE_IN_1_6
EGLDisplay clutter_egl_get_egl_display (void);
+#ifdef COGL_HAS_EGL_PLATFORM_KMS_SUPPORT
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_egl_set_kms_fd (int fd);
+#endif
+
+CLUTTER_AVAILABLE_IN_1_20
+void clutter_egl_freeze_master_clock (void);
+CLUTTER_AVAILABLE_IN_1_20
+void clutter_egl_thaw_master_clock (void);
+
G_END_DECLS
#endif /* __CLUTTER_EGL_H__ */
diff --git a/clutter/egl/clutter-stage-eglnative.c b/clutter/egl/clutter-stage-eglnative.c
new file mode 100644
index 000000000..d7484bb96
--- /dev/null
+++ b/clutter/egl/clutter-stage-eglnative.c
@@ -0,0 +1,70 @@
+/*
+ * 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 .
+
+ * Authors:
+ * Adel Gadllah
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+
+#include "clutter-stage-window.h"
+#include "clutter-stage-private.h"
+#include "clutter-stage-eglnative.h"
+#include
+
+static ClutterStageWindowIface *clutter_stage_window_parent_iface = NULL;
+
+static void clutter_stage_window_iface_init (ClutterStageWindowIface *iface);
+
+#define clutter_stage_eglnative_get_type _clutter_stage_eglnative_get_type
+
+G_DEFINE_TYPE_WITH_CODE (ClutterStageEglNative,
+ clutter_stage_eglnative,
+ CLUTTER_TYPE_STAGE_COGL,
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_STAGE_WINDOW,
+ clutter_stage_window_iface_init));
+
+static gboolean
+clutter_stage_eglnative_can_clip_redraws (ClutterStageWindow *stage_window)
+{
+ return TRUE;
+}
+
+static void
+clutter_stage_eglnative_class_init (ClutterStageEglNativeClass *klass)
+{
+}
+
+static void
+clutter_stage_eglnative_init (ClutterStageEglNative *stage_eglnative)
+{
+}
+
+static void
+clutter_stage_window_iface_init (ClutterStageWindowIface *iface)
+{
+ clutter_stage_window_parent_iface = g_type_interface_peek_parent (iface);
+
+ iface->can_clip_redraws = clutter_stage_eglnative_can_clip_redraws;
+}
diff --git a/clutter/egl/clutter-stage-eglnative.h b/clutter/egl/clutter-stage-eglnative.h
new file mode 100644
index 000000000..cc64390bc
--- /dev/null
+++ b/clutter/egl/clutter-stage-eglnative.h
@@ -0,0 +1,59 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2010,2011 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 .
+
+ * Authors:
+ * Adel Gadllah
+ */
+
+#ifndef __CLUTTER_STAGE_EGL_NATIVE_H__
+#define __CLUTTER_STAGE_EGL_NATIVE_H__
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#include "cogl/clutter-stage-cogl.h"
+
+#define CLUTTER_TYPE_STAGE_EGL_NATIVE (_clutter_stage_eglnative_get_type ())
+#define CLUTTER_STAGE_EGL_NATIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_STAGE_EGL_NATIVE, ClutterStageEglNative))
+#define CLUTTER_IS_STAGE_EGL_NATIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_STAGE_EGL_NATIVE))
+#define CLUTTER_STAGE_EGL_NATIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_STAGE_EGL_NATIVE, ClutterStageEglNativeClass))
+#define CLUTTER_IS_STAGE_EGL_NATIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_STAGE_EGL_NATIVE))
+#define CLUTTER_STAGE_EGL_NATIVE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_STAGE_EGL_NATIVE, ClutterStageEglNativeClass))
+
+typedef struct _ClutterStageEglNative ClutterStageEglNative;
+typedef struct _ClutterStageEglNativeClass ClutterStageEglNativeClass;
+
+struct _ClutterStageEglNative
+{
+ ClutterStageCogl parent_instance;
+};
+
+struct _ClutterStageEglNativeClass
+{
+ ClutterStageCoglClass parent_class;
+};
+
+GType _clutter_stage_eglnative_get_type (void) G_GNUC_CONST;
+
+#endif /* __CLUTTER_STAGE_EGL_NATIVE_H__ */
diff --git a/clutter/evdev/clutter-device-manager-evdev.c b/clutter/evdev/clutter-device-manager-evdev.c
index 101c955fe..7b4848182 100644
--- a/clutter/evdev/clutter-device-manager-evdev.c
+++ b/clutter/evdev/clutter-device-manager-evdev.c
@@ -4,6 +4,7 @@
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2010 Intel Corp.
+ * Copyright (C) 2014 Jonas Ådahl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -19,12 +20,14 @@
* License along with this library. If not, see .
*
* Author: Damien Lespiau
+ * Author: Jonas Ådahl
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+#include
#include
#include
#include
@@ -34,7 +37,7 @@
#include
#include
-#include
+#include
#include "clutter-backend.h"
#include "clutter-debug.h"
@@ -48,51 +51,119 @@
#include "clutter-xkb-utils.h"
#include "clutter-backend-private.h"
#include "clutter-evdev.h"
+#include "clutter-stage-private.h"
#include "clutter-device-manager-evdev.h"
-#define CLUTTER_DEVICE_MANAGER_EVDEV_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- CLUTTER_TYPE_DEVICE_MANAGER_EVDEV, \
- ClutterDeviceManagerEvdevPrivate))
+#define AUTOREPEAT_VALUE 2
-G_DEFINE_TYPE (ClutterDeviceManagerEvdev,
- clutter_device_manager_evdev,
- CLUTTER_TYPE_DEVICE_MANAGER);
+/* Try to keep the pointer inside the stage. Hopefully no one is using
+ * this backend with stages smaller than this. */
+#define INITIAL_POINTER_X 16
+#define INITIAL_POINTER_Y 16
-struct _ClutterDeviceManagerEvdevPrivate
+typedef struct _ClutterTouchState ClutterTouchState;
+typedef struct _ClutterEventFilter ClutterEventFilter;
+
+struct _ClutterTouchState
{
- GUdevClient *udev_client;
+ guint32 id;
+ ClutterPoint coords;
+};
- ClutterStage *stage;
- gboolean released;
+struct _ClutterSeatEvdev
+{
+ struct libinput_seat *libinput_seat;
+ ClutterDeviceManagerEvdev *manager_evdev;
- GSList *devices; /* list of ClutterInputDeviceEvdevs */
- GSList *event_sources; /* list of the event sources */
+ GSList *devices;
ClutterInputDevice *core_pointer;
ClutterInputDevice *core_keyboard;
+ GHashTable *touches;
+
+ struct xkb_state *xkb;
+ xkb_led_index_t caps_lock_led;
+ xkb_led_index_t num_lock_led;
+ xkb_led_index_t scroll_lock_led;
+ uint32_t button_state;
+
+ /* keyboard repeat */
+ gboolean repeat;
+ guint32 repeat_delay;
+ guint32 repeat_interval;
+ guint32 repeat_key;
+ guint32 repeat_count;
+ guint32 repeat_timer;
+ ClutterInputDevice *repeat_device;
+};
+
+struct _ClutterEventFilter
+{
+ ClutterEvdevFilterFunc func;
+ gpointer data;
+ GDestroyNotify destroy_notify;
+};
+
+typedef struct _ClutterEventSource ClutterEventSource;
+
+struct _ClutterDeviceManagerEvdevPrivate
+{
+ struct libinput *libinput;
+
+ ClutterStage *stage;
+ gboolean released;
+
+ ClutterEventSource *event_source;
+
+ GSList *devices;
+ GSList *seats;
+
+ ClutterSeatEvdev *main_seat;
+ struct xkb_keymap *keymap;
+
+ ClutterPointerConstrainCallback constrain_callback;
+ gpointer constrain_data;
+ GDestroyNotify constrain_data_notify;
+
ClutterStageManager *stage_manager;
guint stage_added_handler;
guint stage_removed_handler;
+
+ GSList *event_filters;
};
-static const gchar *subsystems[] = { "input", NULL };
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterDeviceManagerEvdev,
+ clutter_device_manager_evdev,
+ CLUTTER_TYPE_DEVICE_MANAGER)
+
+static ClutterOpenDeviceCallback device_open_callback;
+static ClutterCloseDeviceCallback device_close_callback;
+static gpointer device_callback_data;
+
+#ifdef CLUTTER_ENABLE_DEBUG
+static const char *device_type_str[] = {
+ "pointer", /* CLUTTER_POINTER_DEVICE */
+ "keyboard", /* CLUTTER_KEYBOARD_DEVICE */
+ "extension", /* CLUTTER_EXTENSION_DEVICE */
+ "joystick", /* CLUTTER_JOYSTICK_DEVICE */
+ "tablet", /* CLUTTER_TABLET_DEVICE */
+ "touchpad", /* CLUTTER_TOUCHPAD_DEVICE */
+ "touchscreen", /* CLUTTER_TOUCHSCREEN_DEVICE */
+ "pen", /* CLUTTER_PEN_DEVICE */
+ "eraser", /* CLUTTER_ERASER_DEVICE */
+ "cursor", /* CLUTTER_CURSOR_DEVICE */
+};
+#endif /* CLUTTER_ENABLE_DEBUG */
/*
* ClutterEventSource management
*
* The device manager is responsible for managing the GSource when devices
* appear and disappear from the system.
- *
- * FIXME: For now, we associate a GSource with every single device. Starting
- * from glib 2.28 we can use g_source_add_child_source() to have a single
- * GSource for the device manager, each device becoming a child source. Revisit
- * this once we depend on glib >= 2.28.
*/
-
static const char *option_xkb_layout = "us";
static const char *option_xkb_variant = "";
static const char *option_xkb_options = "";
@@ -101,19 +172,17 @@ static const char *option_xkb_options = "";
* ClutterEventSource for reading input devices
*/
-typedef struct _ClutterEventSource ClutterEventSource;
-
struct _ClutterEventSource
{
GSource source;
- ClutterInputDeviceEvdev *device; /* back pointer to the evdev device */
- GPollFD event_poll_fd; /* file descriptor of the /dev node */
- struct xkb_state *xkb; /* XKB state object */
- gint x, y; /* last x, y position for pointers */
- guint32 modifier_state; /* key modifiers */
+ ClutterDeviceManagerEvdev *manager_evdev;
+ GPollFD event_poll_fd;
};
+static void
+process_events (ClutterDeviceManagerEvdev *manager_evdev);
+
static gboolean
clutter_event_prepare (GSource *source,
gint *timeout)
@@ -149,19 +218,142 @@ clutter_event_check (GSource *source)
static void
queue_event (ClutterEvent *event)
{
- if (event == NULL)
- return;
-
_clutter_event_push (event, FALSE);
}
static void
-notify_key (ClutterEventSource *source,
- guint32 time_,
- guint32 key,
- guint32 state)
+clear_repeat_timer (ClutterSeatEvdev *seat)
{
- ClutterInputDevice *input_device = (ClutterInputDevice *) source->device;
+ if (seat->repeat_timer)
+ {
+ g_source_remove (seat->repeat_timer);
+ seat->repeat_timer = 0;
+ g_clear_object (&seat->repeat_device);
+ }
+}
+
+static gboolean
+keyboard_repeat (gpointer data);
+
+static void
+clutter_seat_evdev_sync_leds (ClutterSeatEvdev *seat);
+
+static void
+notify_key_device (ClutterInputDevice *input_device,
+ guint32 time_,
+ guint32 key,
+ guint32 state,
+ gboolean update_keys)
+{
+ ClutterInputDeviceEvdev *device_evdev =
+ CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ ClutterSeatEvdev *seat = _clutter_input_device_evdev_get_seat (device_evdev);
+ ClutterStage *stage;
+ ClutterEvent *event = NULL;
+ enum xkb_state_component changed_state;
+
+ /* We can drop the event on the floor if no stage has been
+ * associated with the device yet. */
+ stage = _clutter_input_device_get_stage (input_device);
+ if (!stage)
+ {
+ clear_repeat_timer (seat);
+ return;
+ }
+
+ event = _clutter_key_event_new_from_evdev (input_device,
+ seat->core_keyboard,
+ stage,
+ seat->xkb,
+ seat->button_state,
+ time_, key, state);
+
+ /* We must be careful and not pass multiple releases to xkb, otherwise it gets
+ confused and locks the modifiers */
+ if (state != AUTOREPEAT_VALUE)
+ {
+ changed_state = xkb_state_update_key (seat->xkb,
+ event->key.hardware_keycode,
+ state ? XKB_KEY_DOWN : XKB_KEY_UP);
+ }
+ else
+ {
+ changed_state = 0;
+ clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_SYNTHETIC);
+ }
+
+ queue_event (event);
+
+ if (update_keys && (changed_state & XKB_STATE_LEDS))
+ clutter_seat_evdev_sync_leds (seat);
+
+ if (state == 0 || /* key release */
+ !seat->repeat ||
+ !xkb_keymap_key_repeats (xkb_state_get_keymap (seat->xkb), event->key.hardware_keycode))
+ {
+ clear_repeat_timer (seat);
+ return;
+ }
+
+ if (state == 1) /* key press */
+ seat->repeat_count = 0;
+
+ seat->repeat_count += 1;
+ seat->repeat_key = key;
+
+ switch (seat->repeat_count)
+ {
+ case 1:
+ case 2:
+ {
+ guint32 interval;
+
+ clear_repeat_timer (seat);
+ seat->repeat_device = g_object_ref (input_device);
+
+ if (seat->repeat_count == 1)
+ interval = seat->repeat_delay;
+ else
+ interval = seat->repeat_interval;
+
+ seat->repeat_timer =
+ clutter_threads_add_timeout_full (CLUTTER_PRIORITY_EVENTS,
+ interval,
+ keyboard_repeat,
+ seat,
+ NULL);
+ return;
+ }
+ default:
+ return;
+ }
+}
+
+static gboolean
+keyboard_repeat (gpointer data)
+{
+ ClutterSeatEvdev *seat = data;
+ guint32 time;
+
+ g_return_val_if_fail (seat->repeat_device != NULL, G_SOURCE_REMOVE);
+
+ time = g_source_get_time (g_main_context_find_source_by_id (NULL, seat->repeat_timer)) / 1000;
+
+ notify_key_device (seat->repeat_device, time, seat->repeat_key, AUTOREPEAT_VALUE, FALSE);
+
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+notify_absolute_motion (ClutterInputDevice *input_device,
+ guint32 time_,
+ gfloat x,
+ gfloat y)
+{
+ gfloat stage_width, stage_height;
+ ClutterDeviceManagerEvdev *manager_evdev;
+ ClutterInputDeviceEvdev *device_evdev;
+ ClutterSeatEvdev *seat;
ClutterStage *stage;
ClutterEvent *event = NULL;
@@ -171,31 +363,79 @@ notify_key (ClutterEventSource *source,
if (!stage)
return;
- /* if we have a mapping for that device, use it to generate the event */
- if (source->xkb)
- {
- event =
- _clutter_key_event_new_from_evdev (input_device,
- stage,
- source->xkb,
- time_, key, state);
- xkb_state_update_key (source->xkb, key, state ? XKB_KEY_DOWN : XKB_KEY_UP);
- }
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (input_device->device_manager);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
+
+ stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage));
+ stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage));
+
+ event = clutter_event_new (CLUTTER_MOTION);
+
+ if (manager_evdev->priv->constrain_callback)
+ {
+ manager_evdev->priv->constrain_callback (seat->core_pointer,
+ time_, &x, &y,
+ manager_evdev->priv->constrain_data);
+ }
+ else
+ {
+ x = CLAMP (x, 0.f, stage_width - 1);
+ y = CLAMP (y, 0.f, stage_height - 1);
+ }
+
+ event->motion.time = time_;
+ event->motion.stage = stage;
+ event->motion.device = seat->core_pointer;
+ _clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
+ event->motion.x = x;
+ event->motion.y = y;
+ clutter_event_set_device (event, seat->core_pointer);
+ clutter_event_set_source_device (event, input_device);
+
+ _clutter_input_device_set_stage (seat->core_pointer, stage);
queue_event (event);
}
+static void
+notify_relative_motion (ClutterInputDevice *input_device,
+ guint32 time_,
+ double dx,
+ double dy)
+{
+ gfloat new_x, new_y;
+ ClutterInputDeviceEvdev *device_evdev;
+ ClutterSeatEvdev *seat;
+ ClutterPoint point;
+
+ /* We can drop the event on the floor if no stage has been
+ * associated with the device yet. */
+ if (!_clutter_input_device_get_stage (input_device))
+ return;
+
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
+
+ clutter_input_device_get_coords (seat->core_pointer, NULL, &point);
+ new_x = point.x + dx;
+ new_y = point.y + dy;
+
+ notify_absolute_motion (input_device, time_, new_x, new_y);
+}
static void
-notify_motion (ClutterEventSource *source,
+notify_scroll (ClutterInputDevice *input_device,
guint32 time_,
- gint x,
- gint y)
+ gdouble dx,
+ gdouble dy)
{
- ClutterInputDevice *input_device = (ClutterInputDevice *) source->device;
- gfloat stage_width, stage_height, new_x, new_y;
- ClutterEvent *event;
+ ClutterInputDeviceEvdev *device_evdev;
+ ClutterSeatEvdev *seat;
ClutterStage *stage;
+ ClutterEvent *event = NULL;
+ ClutterPoint point;
+ gdouble scroll_factor;
/* We can drop the event on the floor if no stage has been
* associated with the device yet. */
@@ -203,47 +443,45 @@ notify_motion (ClutterEventSource *source,
if (!stage)
return;
- stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage));
- stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage));
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
- event = clutter_event_new (CLUTTER_MOTION);
+ event = clutter_event_new (CLUTTER_SCROLL);
- if (x < 0)
- new_x = 0.f;
- else if (x >= stage_width)
- new_x = stage_width - 1;
- else
- new_x = x;
+ event->scroll.time = time_;
+ event->scroll.stage = CLUTTER_STAGE (stage);
+ event->scroll.device = seat->core_pointer;
+ _clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
- if (y < 0)
- new_y = 0.f;
- else if (y >= stage_height)
- new_y = stage_height - 1;
- else
- new_y = y;
+ /* libinput pointer axis events are in pointer motion coordinate space.
+ * To convert to Xi2 discrete step coordinate space, multiply the factor
+ * 1/10. */
+ event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
+ scroll_factor = 1.0 / 10.0;
+ clutter_event_set_scroll_delta (event,
+ scroll_factor * dx,
+ scroll_factor * dy);
- source->x = new_x;
- source->y = new_y;
-
- event->motion.time = time_;
- event->motion.stage = stage;
- event->motion.device = input_device;
- event->motion.modifier_state = source->modifier_state;
- event->motion.x = new_x;
- event->motion.y = new_y;
+ clutter_input_device_get_coords (seat->core_pointer, NULL, &point);
+ event->scroll.x = point.x;
+ event->scroll.y = point.y;
+ clutter_event_set_device (event, seat->core_pointer);
+ clutter_event_set_source_device (event, input_device);
queue_event (event);
}
static void
-notify_button (ClutterEventSource *source,
+notify_button (ClutterInputDevice *input_device,
guint32 time_,
guint32 button,
guint32 state)
{
- ClutterInputDevice *input_device = (ClutterInputDevice *) source->device;
- ClutterEvent *event;
+ ClutterInputDeviceEvdev *device_evdev;
+ ClutterSeatEvdev *seat;
ClutterStage *stage;
+ ClutterEvent *event = NULL;
+ ClutterPoint point;
gint button_nr;
static gint maskmap[8] =
{
@@ -257,6 +495,9 @@ notify_button (ClutterEventSource *source,
if (!stage)
return;
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
+
/* The evdev button numbers don't map sequentially to clutter button
* numbers (the right and middle mouse buttons are in the opposite
* order) so we'll map them directly with a switch statement */
@@ -292,162 +533,123 @@ notify_button (ClutterEventSource *source,
/* Update the modifiers */
if (state)
- source->modifier_state |= maskmap[button - BTN_LEFT];
+ seat->button_state |= maskmap[button - BTN_LEFT];
else
- source->modifier_state &= ~maskmap[button - BTN_LEFT];
+ seat->button_state &= ~maskmap[button - BTN_LEFT];
event->button.time = time_;
event->button.stage = CLUTTER_STAGE (stage);
- event->button.device = (ClutterInputDevice *) source->device;
- event->button.modifier_state = source->modifier_state;
+ event->button.device = seat->core_pointer;
+ _clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
event->button.button = button_nr;
- event->button.x = source->x;
- event->button.y = source->y;
+ clutter_input_device_get_coords (seat->core_pointer, NULL, &point);
+ event->button.x = point.x;
+ event->button.y = point.y;
+ clutter_event_set_device (event, seat->core_pointer);
+ clutter_event_set_source_device (event, input_device);
+
+ _clutter_input_device_set_stage (seat->core_pointer, stage);
queue_event (event);
}
+static void
+notify_touch_event (ClutterInputDevice *input_device,
+ ClutterEventType evtype,
+ guint32 time_,
+ gint32 slot,
+ gdouble x,
+ gdouble y)
+{
+ ClutterInputDeviceEvdev *device_evdev;
+ ClutterSeatEvdev *seat;
+ ClutterStage *stage;
+ ClutterEvent *event = NULL;
+
+ /* We can drop the event on the floor if no stage has been
+ * associated with the device yet. */
+ stage = _clutter_input_device_get_stage (input_device);
+ if (!stage)
+ return;
+
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
+
+ event = clutter_event_new (evtype);
+
+ event->touch.time = time_;
+ event->touch.stage = CLUTTER_STAGE (stage);
+ event->touch.device = seat->core_pointer;
+ event->touch.x = x;
+ event->touch.y = y;
+ /* "NULL" sequences are special cased in clutter */
+ event->touch.sequence = GINT_TO_POINTER (slot + 1);
+ _clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
+
+ if (evtype == CLUTTER_TOUCH_BEGIN ||
+ evtype == CLUTTER_TOUCH_UPDATE)
+ event->touch.modifier_state |= CLUTTER_BUTTON1_MASK;
+
+ clutter_event_set_device (event, seat->core_pointer);
+ clutter_event_set_source_device (event, input_device);
+
+ queue_event (event);
+}
+
+static void
+dispatch_libinput (ClutterDeviceManagerEvdev *manager_evdev)
+{
+ ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
+
+ libinput_dispatch (priv->libinput);
+ process_events (manager_evdev);
+}
+
static gboolean
clutter_event_dispatch (GSource *g_source,
GSourceFunc callback,
gpointer user_data)
{
ClutterEventSource *source = (ClutterEventSource *) g_source;
- ClutterInputDevice *input_device = (ClutterInputDevice *) source->device;
- struct input_event ev[8];
+ ClutterDeviceManagerEvdev *manager_evdev;
ClutterEvent *event;
- gint len, i, dx = 0, dy = 0;
- uint32_t _time;
- ClutterStage *stage;
_clutter_threads_acquire_lock ();
- stage = _clutter_input_device_get_stage (input_device);
+ manager_evdev = source->manager_evdev;
/* Don't queue more events if we haven't finished handling the previous batch
*/
- if (!clutter_events_pending ())
- {
- len = read (source->event_poll_fd.fd, &ev, sizeof (ev));
- if (len < 0 || len % sizeof (ev[0]) != 0)
- {
- if (errno != EAGAIN)
- {
- ClutterDeviceManager *manager;
- ClutterInputDevice *device;
- const gchar *device_path;
+ if (clutter_events_pending ())
+ goto queue_event;
- device = CLUTTER_INPUT_DEVICE (source->device);
+ dispatch_libinput (manager_evdev);
- if (CLUTTER_HAS_DEBUG (EVENT))
- {
- device_path =
- _clutter_input_device_evdev_get_device_path (source->device);
-
- CLUTTER_NOTE (EVENT, "Could not read device (%s), removing.",
- device_path);
- }
-
- /* remove the faulty device */
- manager = clutter_device_manager_get_default ();
- _clutter_device_manager_remove_device (manager, device);
-
- }
- goto out;
- }
-
- /* Drop events if we don't have any stage to forward them to */
- if (!stage)
- goto out;
-
- for (i = 0; i < len / sizeof (ev[0]); i++)
- {
- struct input_event *e = &ev[i];
-
- _time = e->time.tv_sec * 1000 + e->time.tv_usec / 1000;
- event = NULL;
-
- switch (e->type)
- {
- case EV_KEY:
-
- /* don't repeat mouse buttons */
- if (e->code >= BTN_MOUSE && e->code < KEY_OK)
- if (e->value == 2)
- continue;
-
- switch (e->code)
- {
- case BTN_TOUCH:
- case BTN_TOOL_PEN:
- case BTN_TOOL_RUBBER:
- case BTN_TOOL_BRUSH:
- case BTN_TOOL_PENCIL:
- case BTN_TOOL_AIRBRUSH:
- case BTN_TOOL_FINGER:
- case BTN_TOOL_MOUSE:
- case BTN_TOOL_LENS:
- break;
-
- case BTN_LEFT:
- case BTN_RIGHT:
- case BTN_MIDDLE:
- case BTN_SIDE:
- case BTN_EXTRA:
- case BTN_FORWARD:
- case BTN_BACK:
- case BTN_TASK:
- notify_button(source, _time, e->code, e->value);
- break;
-
- default:
- notify_key (source, _time, e->code, e->value);
- break;
- }
- break;
-
- case EV_SYN:
- /* Nothing to do here? */
- break;
-
- case EV_MSC:
- /* Nothing to do here? */
- break;
-
- case EV_REL:
- /* compress the EV_REL events in dx/dy */
- switch (e->code)
- {
- case REL_X:
- dx += e->value;
- break;
- case REL_Y:
- dy += e->value;
- break;
- }
- break;
-
- case EV_ABS:
- default:
- g_warning ("Unhandled event of type %d", e->type);
- break;
- }
-
- queue_event (event);
- }
-
- if (dx != 0 || dy != 0)
- notify_motion (source, _time, source->x + dx, source->y + dy);
- }
-
- /* Pop an event off the queue if any */
+ queue_event:
event = clutter_event_get ();
if (event)
{
+ ClutterModifierType event_state;
+ ClutterInputDevice *input_device =
+ clutter_event_get_source_device (event);
+ ClutterInputDeviceEvdev *device_evdev =
+ CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ ClutterSeatEvdev *seat =
+ _clutter_input_device_evdev_get_seat (device_evdev);
+
+ /* Drop events if we don't have any stage to forward them to */
+ if (!_clutter_input_device_get_stage (input_device))
+ goto out;
+
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
+
+ /* update the device states *after* the event */
+ event_state = seat->button_state |
+ xkb_state_serialize_mods (seat->xkb, XKB_STATE_MODS_EFFECTIVE);
+ _clutter_input_device_set_state (seat->core_pointer, event_state);
+ _clutter_input_device_set_state (seat->core_keyboard, event_state);
}
out:
@@ -462,75 +664,39 @@ static GSourceFuncs event_funcs = {
NULL
};
-static GSource *
-clutter_event_source_new (ClutterInputDeviceEvdev *input_device)
+static ClutterEventSource *
+clutter_event_source_new (ClutterDeviceManagerEvdev *manager_evdev)
{
- GSource *source = g_source_new (&event_funcs, sizeof (ClutterEventSource));
- ClutterEventSource *event_source = (ClutterEventSource *) source;
- ClutterInputDeviceType type;
- const gchar *node_path;
+ ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
+ GSource *source;
+ ClutterEventSource *event_source;
gint fd;
- /* grab the udev input device node and open it */
- node_path = _clutter_input_device_evdev_get_device_path (input_device);
-
- CLUTTER_NOTE (EVENT, "Creating GSource for device %s", node_path);
-
- fd = open (node_path, O_RDONLY | O_NONBLOCK);
- if (fd < 0)
- {
- g_warning ("Could not open device %s: %s", node_path, strerror (errno));
- return NULL;
- }
+ source = g_source_new (&event_funcs, sizeof (ClutterEventSource));
+ event_source = (ClutterEventSource *) source;
/* setup the source */
- event_source->device = input_device;
+ event_source->manager_evdev = manager_evdev;
+
+ fd = libinput_get_fd (priv->libinput);
event_source->event_poll_fd.fd = fd;
event_source->event_poll_fd.events = G_IO_IN;
- type =
- clutter_input_device_get_device_type (CLUTTER_INPUT_DEVICE (input_device));
-
- if (type == CLUTTER_KEYBOARD_DEVICE)
- {
- /* create the xkb description */
- event_source->xkb = _clutter_xkb_state_new (NULL,
- option_xkb_layout,
- option_xkb_variant,
- option_xkb_options);
- if (G_UNLIKELY (event_source->xkb == NULL))
- {
- g_warning ("Could not compile keymap %s:%s:%s", option_xkb_layout,
- option_xkb_variant, option_xkb_options);
- close (fd);
- g_source_unref (source);
- return NULL;
- }
- }
- else if (type == CLUTTER_POINTER_DEVICE)
- {
- event_source->x = 0;
- event_source->y = 0;
- }
-
/* and finally configure and attach the GSource */
g_source_set_priority (source, CLUTTER_PRIORITY_EVENTS);
g_source_add_poll (source, &event_source->event_poll_fd);
g_source_set_can_recurse (source, TRUE);
g_source_attach (source, NULL);
- return source;
+ return event_source;
}
static void
clutter_event_source_free (ClutterEventSource *source)
{
GSource *g_source = (GSource *) source;
- const gchar *node_path;
- node_path = _clutter_input_device_evdev_get_device_path (source->device);
-
- CLUTTER_NOTE (EVENT, "Removing GSource for device %s", node_path);
+ CLUTTER_NOTE (EVENT, "Removing GSource for evdev device manager");
/* ignore the return value of close, it's not like we can do something
* about it */
@@ -540,157 +706,185 @@ clutter_event_source_free (ClutterEventSource *source)
g_source_unref (g_source);
}
-static ClutterEventSource *
-find_source_by_device (ClutterDeviceManagerEvdev *manager,
- ClutterInputDevice *device)
+static void
+clutter_touch_state_free (ClutterTouchState *touch_state)
{
- ClutterDeviceManagerEvdevPrivate *priv = manager->priv;
- GSList *l;
-
- for (l = priv->event_sources; l; l = g_slist_next (l))
- {
- ClutterEventSource *source = l->data;
-
- if (source->device == (ClutterInputDeviceEvdev *) device)
- return source;
- }
-
- return NULL;
+ g_slice_free (ClutterTouchState, touch_state);
}
-static gboolean
-is_evdev (const gchar *sysfs_path)
+static void
+clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat,
+ struct libinput_seat *libinput_seat)
{
- GRegex *regex;
- gboolean match;
+ g_assert (seat->libinput_seat == NULL);
- regex = g_regex_new ("/input[0-9]+/event[0-9]+$", 0, 0, NULL);
- match = g_regex_match (regex, sysfs_path, 0, NULL);
+ libinput_seat_ref (libinput_seat);
+ libinput_seat_set_user_data (libinput_seat, seat);
+ seat->libinput_seat = libinput_seat;
+}
- g_regex_unref (regex);
- return match;
+static ClutterSeatEvdev *
+clutter_seat_evdev_new (ClutterDeviceManagerEvdev *manager_evdev)
+{
+ ClutterDeviceManager *manager = CLUTTER_DEVICE_MANAGER (manager_evdev);
+ ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
+ ClutterSeatEvdev *seat;
+ ClutterInputDevice *device;
+ struct xkb_context *ctx;
+ struct xkb_rule_names names;
+ struct xkb_keymap *keymap;
+
+ seat = g_new0 (ClutterSeatEvdev, 1);
+ if (!seat)
+ return NULL;
+
+ device = _clutter_input_device_evdev_new_virtual (
+ manager, seat, CLUTTER_POINTER_DEVICE);
+ _clutter_input_device_set_stage (device, priv->stage);
+ _clutter_input_device_set_coords (device, NULL, INITIAL_POINTER_X, INITIAL_POINTER_Y, NULL);
+ _clutter_device_manager_add_device (manager, device);
+ seat->core_pointer = device;
+
+ device = _clutter_input_device_evdev_new_virtual (
+ manager, seat, CLUTTER_KEYBOARD_DEVICE);
+ _clutter_input_device_set_stage (device, priv->stage);
+ _clutter_device_manager_add_device (manager, device);
+ seat->core_keyboard = device;
+
+ seat->touches = g_hash_table_new_full (NULL, NULL, NULL,
+ (GDestroyNotify) clutter_touch_state_free);
+
+ ctx = xkb_context_new(0);
+ g_assert (ctx);
+
+ names.rules = "evdev";
+ names.model = "pc105";
+ names.layout = option_xkb_layout;
+ names.variant = option_xkb_variant;
+ names.options = option_xkb_options;
+
+ keymap = xkb_keymap_new_from_names (ctx, &names, 0);
+ xkb_context_unref(ctx);
+ if (keymap)
+ {
+ seat->xkb = xkb_state_new (keymap);
+
+ seat->caps_lock_led =
+ xkb_keymap_led_get_index (keymap, XKB_LED_NAME_CAPS);
+ seat->num_lock_led =
+ xkb_keymap_led_get_index (keymap, XKB_LED_NAME_NUM);
+ seat->scroll_lock_led =
+ xkb_keymap_led_get_index (keymap, XKB_LED_NAME_SCROLL);
+
+ priv->keymap = keymap;
+ }
+
+ seat->repeat = TRUE;
+ seat->repeat_delay = 250; /* ms */
+ seat->repeat_interval = 33; /* ms */
+
+ priv->seats = g_slist_append (priv->seats, seat);
+ return seat;
+}
+
+static void
+clutter_seat_evdev_free (ClutterSeatEvdev *seat)
+{
+ GSList *iter;
+
+ for (iter = seat->devices; iter; iter = g_slist_next (iter))
+ {
+ ClutterInputDevice *device = iter->data;
+
+ g_object_unref (device);
+ }
+ g_slist_free (seat->devices);
+ g_hash_table_unref (seat->touches);
+
+ xkb_state_unref (seat->xkb);
+
+ clear_repeat_timer (seat);
+
+ if (seat->libinput_seat)
+ libinput_seat_unref (seat->libinput_seat);
+
+ g_free (seat);
+}
+
+static void
+clutter_seat_evdev_set_stage (ClutterSeatEvdev *seat, ClutterStage *stage)
+{
+ GSList *l;
+
+ for (l = seat->devices; l; l = l->next)
+ {
+ ClutterInputDevice *device = l->data;
+
+ _clutter_input_device_set_stage (device, stage);
+ }
}
static void
evdev_add_device (ClutterDeviceManagerEvdev *manager_evdev,
- GUdevDevice *udev_device)
+ struct libinput_device *libinput_device)
{
ClutterDeviceManager *manager = (ClutterDeviceManager *) manager_evdev;
- ClutterInputDeviceType type = CLUTTER_EXTENSION_DEVICE;
+ ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
+ ClutterInputDeviceType type;
+ struct libinput_seat *libinput_seat;
+ ClutterSeatEvdev *seat;
ClutterInputDevice *device;
- const gchar *device_file, *sysfs_path, *device_name;
- device_file = g_udev_device_get_device_file (udev_device);
- sysfs_path = g_udev_device_get_sysfs_path (udev_device);
- device_name = g_udev_device_get_name (udev_device);
+ libinput_seat = libinput_device_get_seat (libinput_device);
+ seat = libinput_seat_get_user_data (libinput_seat);
+ if (seat == NULL)
+ {
+ /* Clutter has the notion of global "core" pointers and keyboard devices,
+ * which are located on the main seat. Make whatever seat comes first the
+ * main seat. */
+ if (priv->main_seat->libinput_seat == NULL)
+ seat = priv->main_seat;
+ else
+ seat = clutter_seat_evdev_new (manager_evdev);
- if (device_file == NULL || sysfs_path == NULL)
- return;
-
- if (g_udev_device_get_property (udev_device, "ID_INPUT") == NULL)
- return;
-
- /* Make sure to only add evdev devices, ie the device with a sysfs path that
- * finishes by input%d/event%d (We don't rely on the node name as this
- * policy is enforced by udev rules Vs API/ABI guarantees of sysfs) */
- if (!is_evdev (sysfs_path))
- return;
-
- /* Clutter assumes that device types are exclusive in the
- * ClutterInputDevice API */
- if (g_udev_device_has_property (udev_device, "ID_INPUT_KEYBOARD"))
- type = CLUTTER_KEYBOARD_DEVICE;
- else if (g_udev_device_has_property (udev_device, "ID_INPUT_MOUSE"))
- type = CLUTTER_POINTER_DEVICE;
- else if (g_udev_device_has_property (udev_device, "ID_INPUT_JOYSTICK"))
- type = CLUTTER_JOYSTICK_DEVICE;
- else if (g_udev_device_has_property (udev_device, "ID_INPUT_TABLET"))
- type = CLUTTER_TABLET_DEVICE;
- else if (g_udev_device_has_property (udev_device, "ID_INPUT_TOUCHPAD"))
- type = CLUTTER_TOUCHPAD_DEVICE;
- else if (g_udev_device_has_property (udev_device, "ID_INPUT_TOUCHSCREEN"))
- type = CLUTTER_TOUCHSCREEN_DEVICE;
-
- device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE_EVDEV,
- "id", 0,
- "name", device_name,
- "device-type", type,
- "sysfs-path", sysfs_path,
- "device-path", device_file,
- "enabled", TRUE,
- NULL);
+ clutter_seat_evdev_set_libinput_seat (seat, libinput_seat);
+ }
+ device = _clutter_input_device_evdev_new (manager, seat, libinput_device);
_clutter_input_device_set_stage (device, manager_evdev->priv->stage);
_clutter_device_manager_add_device (manager, device);
- CLUTTER_NOTE (EVENT, "Added device %s, type %d, sysfs %s",
- device_file, type, sysfs_path);
-}
+ /* Clutter assumes that device types are exclusive in the
+ * ClutterInputDevice API */
+ type = _clutter_input_device_evdev_determine_type (libinput_device);
-static ClutterInputDeviceEvdev *
-find_device_by_udev_device (ClutterDeviceManagerEvdev *manager_evdev,
- GUdevDevice *udev_device)
-{
- ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
- GSList *l;
- const gchar *sysfs_path;
-
- sysfs_path = g_udev_device_get_sysfs_path (udev_device);
- if (sysfs_path == NULL)
+ if (type == CLUTTER_KEYBOARD_DEVICE)
{
- g_message ("device file is NULL");
- return NULL;
+ _clutter_input_device_set_associated_device (device, seat->core_keyboard);
+ _clutter_input_device_add_slave (seat->core_keyboard, device);
+ }
+ else if (type == CLUTTER_POINTER_DEVICE)
+ {
+ _clutter_input_device_set_associated_device (device, seat->core_pointer);
+ _clutter_input_device_add_slave (seat->core_pointer, device);
}
- for (l = priv->devices; l; l = g_slist_next (l))
- {
- ClutterInputDeviceEvdev *device = l->data;
-
- if (strcmp (sysfs_path,
- _clutter_input_device_evdev_get_sysfs_path (device)) == 0)
- {
- return device;
- }
- }
-
- return NULL;
+ CLUTTER_NOTE (EVENT, "Added physical device '%s', type %s",
+ clutter_input_device_get_device_name (device),
+ device_type_str[type]);
}
static void
evdev_remove_device (ClutterDeviceManagerEvdev *manager_evdev,
- GUdevDevice *device)
+ ClutterInputDeviceEvdev *device_evdev)
{
ClutterDeviceManager *manager = CLUTTER_DEVICE_MANAGER (manager_evdev);
- ClutterInputDeviceEvdev *device_evdev;
- ClutterInputDevice *input_device;
+ ClutterInputDevice *input_device = CLUTTER_INPUT_DEVICE (device_evdev);
- device_evdev = find_device_by_udev_device (manager_evdev, device);
- if (device_evdev == NULL)
- return;
-
- input_device = CLUTTER_INPUT_DEVICE (device_evdev);
_clutter_device_manager_remove_device (manager, input_device);
}
-static void
-on_uevent (GUdevClient *client,
- gchar *action,
- GUdevDevice *device,
- gpointer data)
-{
- ClutterDeviceManagerEvdev *manager = CLUTTER_DEVICE_MANAGER_EVDEV (data);
- ClutterDeviceManagerEvdevPrivate *priv = manager->priv;
-
- if (priv->released)
- return;
-
- if (g_strcmp0 (action, "add") == 0)
- evdev_add_device (manager, device);
- else if (g_strcmp0 (action, "remove") == 0)
- evdev_remove_device (manager, device);
-}
-
/*
* ClutterDeviceManager implementation
*/
@@ -701,32 +895,16 @@ clutter_device_manager_evdev_add_device (ClutterDeviceManager *manager,
{
ClutterDeviceManagerEvdev *manager_evdev;
ClutterDeviceManagerEvdevPrivate *priv;
- ClutterInputDeviceType device_type;
ClutterInputDeviceEvdev *device_evdev;
- gboolean is_pointer, is_keyboard;
- GSource *source;
+ ClutterSeatEvdev *seat;
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
priv = manager_evdev->priv;
-
device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
- device_type = clutter_input_device_get_device_type (device);
- is_pointer = device_type == CLUTTER_POINTER_DEVICE;
- is_keyboard = device_type == CLUTTER_KEYBOARD_DEVICE;
-
+ seat->devices = g_slist_prepend (seat->devices, device);
priv->devices = g_slist_prepend (priv->devices, device);
-
- if (is_pointer && priv->core_pointer == NULL)
- priv->core_pointer = device;
-
- if (is_keyboard && priv->core_keyboard == NULL)
- priv->core_keyboard = device;
-
- /* Install the GSource for this device */
- source = clutter_event_source_new (device_evdev);
- if (G_LIKELY (source))
- priv->event_sources = g_slist_prepend (priv->event_sources, source);
}
static void
@@ -735,24 +913,22 @@ clutter_device_manager_evdev_remove_device (ClutterDeviceManager *manager,
{
ClutterDeviceManagerEvdev *manager_evdev;
ClutterDeviceManagerEvdevPrivate *priv;
- ClutterEventSource *source;
+ ClutterInputDeviceEvdev *device_evdev;
+ ClutterSeatEvdev *seat;
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device);
+ seat = _clutter_input_device_evdev_get_seat (device_evdev);
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
priv = manager_evdev->priv;
/* Remove the device */
+ seat->devices = g_slist_remove (seat->devices, device);
priv->devices = g_slist_remove (priv->devices, device);
- /* Remove the source */
- source = find_source_by_device (manager_evdev, device);
- if (G_UNLIKELY (source == NULL))
- {
- g_warning ("Trying to remove a device without a source installed ?!");
- return;
- }
+ if (seat->repeat_timer && seat->repeat_device == device)
+ clear_repeat_timer (seat);
- clutter_event_source_free (source);
- priv->event_sources = g_slist_remove (priv->event_sources, source);
+ g_object_unref (device);
}
static const GSList *
@@ -774,10 +950,10 @@ clutter_device_manager_evdev_get_core_device (ClutterDeviceManager *manager,
switch (type)
{
case CLUTTER_POINTER_DEVICE:
- return priv->core_pointer;
+ return priv->main_seat->core_pointer;
case CLUTTER_KEYBOARD_DEVICE:
- return priv->core_keyboard;
+ return priv->main_seat->core_keyboard;
case CLUTTER_EXTENSION_DEVICE:
default:
@@ -794,38 +970,476 @@ clutter_device_manager_evdev_get_device (ClutterDeviceManager *manager,
ClutterDeviceManagerEvdev *manager_evdev;
ClutterDeviceManagerEvdevPrivate *priv;
GSList *l;
+ GSList *device_it;
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
priv = manager_evdev->priv;
- for (l = priv->devices; l; l = l->next)
+ for (l = priv->seats; l; l = l->next)
{
- ClutterInputDevice *device = l->data;
+ ClutterSeatEvdev *seat = l->data;
- if (clutter_input_device_get_device_id (device) == id)
- return device;
+ for (device_it = seat->devices; device_it; device_it = device_it->next)
+ {
+ ClutterInputDevice *device = device_it->data;
+
+ if (clutter_input_device_get_device_id (device) == id)
+ return device;
+ }
}
return NULL;
}
static void
-clutter_device_manager_evdev_probe_devices (ClutterDeviceManagerEvdev *self)
+clutter_seat_evdev_sync_leds (ClutterSeatEvdev *seat)
{
- ClutterDeviceManagerEvdevPrivate *priv = self->priv;
- GList *devices, *l;
+ GSList *iter;
+ ClutterInputDeviceEvdev *device_evdev;
+ int caps_lock, num_lock, scroll_lock;
+ enum libinput_led leds = 0;
- devices = g_udev_client_query_by_subsystem (priv->udev_client, subsystems[0]);
- for (l = devices; l; l = g_list_next (l))
+ caps_lock = xkb_state_led_index_is_active (seat->xkb, seat->caps_lock_led);
+ num_lock = xkb_state_led_index_is_active (seat->xkb, seat->num_lock_led);
+ scroll_lock = xkb_state_led_index_is_active (seat->xkb, seat->scroll_lock_led);
+
+ if (caps_lock)
+ leds |= LIBINPUT_LED_CAPS_LOCK;
+ if (num_lock)
+ leds |= LIBINPUT_LED_NUM_LOCK;
+ if (scroll_lock)
+ leds |= LIBINPUT_LED_SCROLL_LOCK;
+
+ for (iter = seat->devices; iter; iter = iter->next)
{
- GUdevDevice *device = l->data;
-
- evdev_add_device (self, device);
- g_object_unref (device);
+ device_evdev = iter->data;
+ _clutter_input_device_evdev_update_leds (device_evdev, leds);
}
- g_list_free (devices);
}
+static void
+flush_event_queue (void)
+{
+ ClutterEvent *event;
+
+ while ((event = clutter_event_get ()) != NULL)
+ {
+ _clutter_process_event (event);
+ clutter_event_free (event);
+ }
+}
+
+static gboolean
+process_base_event (ClutterDeviceManagerEvdev *manager_evdev,
+ struct libinput_event *event)
+{
+ ClutterInputDevice *device;
+ struct libinput_device *libinput_device;
+ gboolean handled = TRUE;
+
+ switch (libinput_event_get_type (event))
+ {
+ case LIBINPUT_EVENT_DEVICE_ADDED:
+ libinput_device = libinput_event_get_device (event);
+
+ evdev_add_device (manager_evdev, libinput_device);
+ break;
+
+ case LIBINPUT_EVENT_DEVICE_REMOVED:
+ /* Flush all queued events, there
+ * might be some from this device.
+ */
+ flush_event_queue ();
+
+ libinput_device = libinput_event_get_device (event);
+
+ device = libinput_device_get_user_data (libinput_device);
+ evdev_remove_device (manager_evdev,
+ CLUTTER_INPUT_DEVICE_EVDEV (device));
+ break;
+
+ default:
+ handled = FALSE;
+ }
+
+ return handled;
+}
+
+static ClutterTouchState *
+_device_seat_add_touch (ClutterInputDevice *input_device,
+ guint32 id)
+{
+ ClutterInputDeviceEvdev *device_evdev =
+ CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ ClutterSeatEvdev *seat = _clutter_input_device_evdev_get_seat (device_evdev);
+ ClutterTouchState *touch;
+
+ touch = g_slice_new0 (ClutterTouchState);
+ touch->id = id;
+
+ g_hash_table_insert (seat->touches, GUINT_TO_POINTER (id), touch);
+
+ return touch;
+}
+
+static void
+_device_seat_remove_touch (ClutterInputDevice *input_device,
+ guint32 id)
+{
+ ClutterInputDeviceEvdev *device_evdev =
+ CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ ClutterSeatEvdev *seat = _clutter_input_device_evdev_get_seat (device_evdev);
+
+ g_hash_table_remove (seat->touches, GUINT_TO_POINTER (id));
+}
+
+static ClutterTouchState *
+_device_seat_get_touch (ClutterInputDevice *input_device,
+ guint32 id)
+{
+ ClutterInputDeviceEvdev *device_evdev =
+ CLUTTER_INPUT_DEVICE_EVDEV (input_device);
+ ClutterSeatEvdev *seat = _clutter_input_device_evdev_get_seat (device_evdev);
+
+ return g_hash_table_lookup (seat->touches, GUINT_TO_POINTER (id));
+}
+
+static gboolean
+process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
+ struct libinput_event *event)
+{
+ gboolean handled = TRUE;
+ struct libinput_device *libinput_device = libinput_event_get_device(event);
+ ClutterInputDevice *device;
+
+ switch (libinput_event_get_type (event))
+ {
+ case LIBINPUT_EVENT_KEYBOARD_KEY:
+ {
+ guint32 time, key, key_state;
+ struct libinput_event_keyboard *key_event =
+ libinput_event_get_keyboard_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ time = libinput_event_keyboard_get_time (key_event);
+ key = libinput_event_keyboard_get_key (key_event);
+ key_state = libinput_event_keyboard_get_key_state (key_event) ==
+ LIBINPUT_KEY_STATE_PRESSED;
+ notify_key_device (device, time, key, key_state, TRUE);
+
+ break;
+ }
+
+ case LIBINPUT_EVENT_POINTER_MOTION:
+ {
+ guint32 time;
+ double dx, dy;
+ struct libinput_event_pointer *motion_event =
+ libinput_event_get_pointer_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ time = libinput_event_pointer_get_time (motion_event);
+ dx = libinput_event_pointer_get_dx (motion_event);
+ dy = libinput_event_pointer_get_dy (motion_event);
+ notify_relative_motion (device, time, dx, dy);
+
+ break;
+ }
+
+ case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
+ {
+ guint32 time;
+ double x, y;
+ gfloat stage_width, stage_height;
+ ClutterStage *stage;
+ struct libinput_event_pointer *motion_event =
+ libinput_event_get_pointer_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ stage = _clutter_input_device_get_stage (device);
+ if (!stage)
+ break;
+
+ stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage));
+ stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage));
+
+ time = libinput_event_pointer_get_time (motion_event);
+ x = libinput_event_pointer_get_absolute_x_transformed (motion_event,
+ stage_width);
+ y = libinput_event_pointer_get_absolute_y_transformed (motion_event,
+ stage_height);
+ notify_absolute_motion (device, time, x, y);
+
+ break;
+ }
+
+ case LIBINPUT_EVENT_POINTER_BUTTON:
+ {
+ guint32 time, button, button_state;
+ struct libinput_event_pointer *button_event =
+ libinput_event_get_pointer_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ time = libinput_event_pointer_get_time (button_event);
+ button = libinput_event_pointer_get_button (button_event);
+ button_state = libinput_event_pointer_get_button_state (button_event) ==
+ LIBINPUT_BUTTON_STATE_PRESSED;
+ notify_button (device, time, button, button_state);
+
+ break;
+ }
+
+ case LIBINPUT_EVENT_POINTER_AXIS:
+ {
+ gdouble value, dx = 0.0, dy = 0.0;
+ guint32 time;
+ enum libinput_pointer_axis axis;
+ struct libinput_event_pointer *axis_event =
+ libinput_event_get_pointer_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ time = libinput_event_pointer_get_time (axis_event);
+ value = libinput_event_pointer_get_axis_value (axis_event);
+ axis = libinput_event_pointer_get_axis (axis_event);
+
+ switch (axis)
+ {
+ case LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL:
+ dx = 0;
+ dy = value;
+ break;
+
+ case LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL:
+ dx = value;
+ dy = 0;
+ break;
+
+ }
+
+ notify_scroll (device, time, dx, dy);
+ break;
+
+ }
+
+ case LIBINPUT_EVENT_TOUCH_DOWN:
+ {
+ gint32 slot;
+ guint32 time;
+ double x, y;
+ gfloat stage_width, stage_height;
+ ClutterStage *stage;
+ ClutterTouchState *touch_state;
+ struct libinput_event_touch *touch_event =
+ libinput_event_get_touch_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ stage = _clutter_input_device_get_stage (device);
+ if (!stage)
+ break;
+
+ stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage));
+ stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage));
+
+ slot = libinput_event_touch_get_slot (touch_event);
+ time = libinput_event_touch_get_time (touch_event);
+ x = libinput_event_touch_get_x_transformed (touch_event,
+ stage_width);
+ y = libinput_event_touch_get_y_transformed (touch_event,
+ stage_height);
+
+ touch_state = _device_seat_add_touch (device, slot);
+ touch_state->coords.x = x;
+ touch_state->coords.y = y;
+
+ notify_touch_event (device, CLUTTER_TOUCH_BEGIN, time, slot,
+ touch_state->coords.x, touch_state->coords.y);
+ break;
+ }
+
+ case LIBINPUT_EVENT_TOUCH_UP:
+ {
+ gint32 slot;
+ guint32 time;
+ ClutterTouchState *touch_state;
+ struct libinput_event_touch *touch_event =
+ libinput_event_get_touch_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ slot = libinput_event_touch_get_slot (touch_event);
+ time = libinput_event_touch_get_time (touch_event);
+ touch_state = _device_seat_get_touch (device, slot);
+
+ notify_touch_event (device, CLUTTER_TOUCH_END, time, slot,
+ touch_state->coords.x, touch_state->coords.y);
+ _device_seat_remove_touch (device, slot);
+
+ break;
+ }
+
+ case LIBINPUT_EVENT_TOUCH_MOTION:
+ {
+ gint32 slot;
+ guint32 time;
+ double x, y;
+ gfloat stage_width, stage_height;
+ ClutterStage *stage;
+ ClutterTouchState *touch_state;
+ struct libinput_event_touch *touch_event =
+ libinput_event_get_touch_event (event);
+ device = libinput_device_get_user_data (libinput_device);
+
+ stage = _clutter_input_device_get_stage (device);
+ if (!stage)
+ break;
+
+ stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage));
+ stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage));
+
+ slot = libinput_event_touch_get_slot (touch_event);
+ time = libinput_event_touch_get_time (touch_event);
+ x = libinput_event_touch_get_x_transformed (touch_event,
+ stage_width);
+ y = libinput_event_touch_get_y_transformed (touch_event,
+ stage_height);
+
+ touch_state = _device_seat_get_touch (device, slot);
+ touch_state->coords.x = x;
+ touch_state->coords.y = y;
+
+ notify_touch_event (device, CLUTTER_TOUCH_UPDATE, time, slot,
+ touch_state->coords.x, touch_state->coords.y);
+ break;
+ }
+ case LIBINPUT_EVENT_TOUCH_CANCEL:
+ {
+ ClutterTouchState *touch_state;
+ GHashTableIter iter;
+ guint32 time;
+ struct libinput_event_touch *touch_event =
+ libinput_event_get_touch_event (event);
+ ClutterSeatEvdev *seat;
+
+ device = libinput_device_get_user_data (libinput_device);
+ time = libinput_event_touch_get_time (touch_event);
+ seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device));
+ g_hash_table_iter_init (&iter, seat->touches);
+
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &touch_state))
+ {
+ notify_touch_event (device, CLUTTER_TOUCH_CANCEL,
+ time, touch_state->id,
+ touch_state->coords.x, touch_state->coords.y);
+ g_hash_table_iter_remove (&iter);
+ }
+
+ break;
+ }
+ default:
+ handled = FALSE;
+ }
+
+ return handled;
+}
+
+static gboolean
+filter_event (ClutterDeviceManagerEvdev *manager_evdev,
+ struct libinput_event *event)
+{
+ gboolean retval = CLUTTER_EVENT_PROPAGATE;
+ ClutterEventFilter *filter;
+ GSList *tmp_list;
+
+ tmp_list = manager_evdev->priv->event_filters;
+
+ while (tmp_list)
+ {
+ filter = tmp_list->data;
+ retval = filter->func (event, filter->data);
+ tmp_list = tmp_list->next;
+
+ if (retval != CLUTTER_EVENT_PROPAGATE)
+ break;
+ }
+
+ return retval;
+}
+
+static void
+process_event (ClutterDeviceManagerEvdev *manager_evdev,
+ struct libinput_event *event)
+{
+ gboolean retval;
+
+ retval = filter_event (manager_evdev, event);
+
+ if (retval != CLUTTER_EVENT_PROPAGATE)
+ return;
+
+ if (process_base_event (manager_evdev, event))
+ return;
+ if (process_device_event (manager_evdev, event))
+ return;
+}
+
+static void
+process_events (ClutterDeviceManagerEvdev *manager_evdev)
+{
+ ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
+ struct libinput_event *event;
+
+ while ((event = libinput_get_event (priv->libinput)))
+ {
+ process_event(manager_evdev, event);
+ libinput_event_destroy(event);
+ }
+}
+
+static int
+open_restricted (const char *path,
+ int flags,
+ void *user_data)
+{
+ gint fd;
+
+ if (device_open_callback)
+ {
+ GError *error = NULL;
+
+ fd = device_open_callback (path, flags, device_callback_data, &error);
+
+ if (fd < 0)
+ {
+ g_warning ("Could not open device %s: %s", path, error->message);
+ g_error_free (error);
+ }
+ }
+ else
+ {
+ fd = open (path, O_RDWR | O_NONBLOCK);
+ if (fd < 0)
+ {
+ g_warning ("Could not open device %s: %s", path, strerror (errno));
+ }
+ }
+
+ return fd;
+}
+
+static void
+close_restricted (int fd,
+ void *user_data)
+{
+ if (device_close_callback)
+ device_close_callback (fd, device_callback_data);
+ else
+ close (fd);
+}
+
+static const struct libinput_interface libinput_interface = {
+ open_restricted,
+ close_restricted
+};
+
/*
* GObject implementation
*/
@@ -835,17 +1449,44 @@ clutter_device_manager_evdev_constructed (GObject *gobject)
{
ClutterDeviceManagerEvdev *manager_evdev;
ClutterDeviceManagerEvdevPrivate *priv;
+ ClutterEventSource *source;
+ struct udev *udev;
+
+ udev = udev_new ();
+ if (G_UNLIKELY (udev == NULL))
+ {
+ g_warning ("Failed to create udev object");
+ return;
+ }
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (gobject);
priv = manager_evdev->priv;
- priv->udev_client = g_udev_client_new (subsystems);
+ priv->libinput = libinput_udev_create_context (&libinput_interface,
+ manager_evdev,
+ udev);
+ if (priv->libinput == NULL)
+ {
+ g_critical ("Failed to create the libinput object.");
+ return;
+ }
- clutter_device_manager_evdev_probe_devices (manager_evdev);
+ if (libinput_udev_assign_seat (priv->libinput, "seat0") == -1)
+ {
+ g_critical ("Failed to assign a seat to the libinput object.");
+ libinput_unref (priv->libinput);
+ priv->libinput = NULL;
+ return;
+ }
- /* subcribe for events on input devices */
- g_signal_connect (priv->udev_client, "uevent",
- G_CALLBACK (on_uevent), manager_evdev);
+ udev_unref (udev);
+
+ priv->main_seat = clutter_seat_evdev_new (manager_evdev);
+
+ dispatch_libinput (manager_evdev);
+
+ source = clutter_event_source_new (manager_evdev);
+ priv->event_source = source;
}
static void
@@ -885,28 +1526,24 @@ clutter_device_manager_evdev_finalize (GObject *object)
{
ClutterDeviceManagerEvdev *manager_evdev;
ClutterDeviceManagerEvdevPrivate *priv;
- GSList *l;
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (object);
priv = manager_evdev->priv;
- g_object_unref (priv->udev_client);
-
- for (l = priv->devices; l; l = g_slist_next (l))
- {
- ClutterInputDevice *device = l->data;
-
- g_object_unref (device);
- }
+ g_slist_free_full (priv->seats, (GDestroyNotify) clutter_seat_evdev_free);
g_slist_free (priv->devices);
- for (l = priv->event_sources; l; l = g_slist_next (l))
- {
- ClutterEventSource *source = l->data;
+ if (priv->keymap)
+ xkb_keymap_unref (priv->keymap);
- clutter_event_source_free (source);
- }
- g_slist_free (priv->event_sources);
+ if (priv->event_source != NULL)
+ clutter_event_source_free (priv->event_source);
+
+ if (priv->constrain_data_notify != NULL)
+ priv->constrain_data_notify (priv->constrain_data);
+
+ if (priv->libinput != NULL)
+ libinput_unref (priv->libinput);
G_OBJECT_CLASS (clutter_device_manager_evdev_parent_class)->finalize (object);
}
@@ -914,10 +1551,8 @@ clutter_device_manager_evdev_finalize (GObject *object)
static void
clutter_device_manager_evdev_class_init (ClutterDeviceManagerEvdevClass *klass)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterDeviceManagerClass *manager_class;
- GObjectClass *gobject_class = (GObjectClass *) klass;
-
- g_type_class_add_private (klass, sizeof (ClutterDeviceManagerEvdevPrivate));
gobject_class->constructed = clutter_device_manager_evdev_constructed;
gobject_class->finalize = clutter_device_manager_evdev_finalize;
@@ -949,12 +1584,11 @@ clutter_device_manager_evdev_stage_added_cb (ClutterStageManager *manager,
priv->stage = stage;
/* Set the stage of any devices that don't already have a stage */
- for (l = priv->devices; l; l = l->next)
+ for (l = priv->seats; l; l = l->next)
{
- ClutterInputDevice *device = l->data;
+ ClutterSeatEvdev *seat = l->data;
- if (_clutter_input_device_get_stage (device) == NULL)
- _clutter_input_device_set_stage (device, stage);
+ clutter_seat_evdev_set_stage (seat, stage);
}
/* We only want to do this once so we can catch the default
@@ -975,12 +1609,11 @@ clutter_device_manager_evdev_stage_removed_cb (ClutterStageManager *manager,
/* Remove the stage of any input devices that were pointing to this
stage so we don't send events to invalid stages */
- for (l = priv->devices; l; l = l->next)
+ for (l = priv->seats; l; l = l->next)
{
- ClutterInputDevice *device = l->data;
+ ClutterSeatEvdev *seat = l->data;
- if (_clutter_input_device_get_stage (device) == stage)
- _clutter_input_device_set_stage (device, NULL);
+ clutter_seat_evdev_set_stage (seat, NULL);
}
}
@@ -989,7 +1622,7 @@ clutter_device_manager_evdev_init (ClutterDeviceManagerEvdev *self)
{
ClutterDeviceManagerEvdevPrivate *priv;
- priv = self->priv = CLUTTER_DEVICE_MANAGER_EVDEV_GET_PRIVATE (self);
+ priv = self->priv = clutter_device_manager_evdev_get_instance_private (self);
priv->stage_manager = clutter_stage_manager_get_default ();
g_object_ref (priv->stage_manager);
@@ -1046,9 +1679,8 @@ void
clutter_evdev_release_devices (void)
{
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
- ClutterDeviceManagerEvdev *evdev_manager;
+ ClutterDeviceManagerEvdev *manager_evdev;
ClutterDeviceManagerEvdevPrivate *priv;
- GSList *l, *next;
if (!manager)
{
@@ -1059,8 +1691,8 @@ clutter_evdev_release_devices (void)
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (manager));
- evdev_manager = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
- priv = evdev_manager->priv;
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
+ priv = manager_evdev->priv;
if (priv->released)
{
@@ -1070,19 +1702,48 @@ clutter_evdev_release_devices (void)
return;
}
- for (l = priv->devices; l; l = next)
- {
- ClutterInputDevice *device = l->data;
-
- /* Be careful about the list we're iterating being modified... */
- next = l->next;
-
- _clutter_device_manager_remove_device (manager, device);
- }
+ libinput_suspend (priv->libinput);
+ process_events (manager_evdev);
priv->released = TRUE;
}
+static void
+clutter_evdev_update_xkb_state (ClutterDeviceManagerEvdev *manager_evdev)
+{
+ ClutterDeviceManagerEvdevPrivate *priv;
+ GSList *iter;
+ ClutterSeatEvdev *seat;
+ xkb_mod_mask_t latched_mods;
+ xkb_mod_mask_t locked_mods;
+
+ priv = manager_evdev->priv;
+
+ for (iter = priv->seats; iter; iter = iter->next)
+ {
+ seat = iter->data;
+
+ latched_mods = xkb_state_serialize_mods (seat->xkb,
+ XKB_STATE_MODS_LATCHED);
+ locked_mods = xkb_state_serialize_mods (seat->xkb,
+ XKB_STATE_MODS_LOCKED);
+ xkb_state_unref (seat->xkb);
+ seat->xkb = xkb_state_new (priv->keymap);
+
+ xkb_state_update_mask (seat->xkb,
+ 0, /* depressed */
+ latched_mods,
+ locked_mods,
+ 0, 0, 0);
+
+ seat->caps_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_CAPS);
+ seat->num_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_NUM);
+ seat->scroll_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_SCROLL);
+
+ clutter_seat_evdev_sync_leds (seat);
+ }
+}
+
/**
* clutter_evdev_reclaim_devices:
*
@@ -1101,20 +1762,9 @@ void
clutter_evdev_reclaim_devices (void)
{
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
- ClutterDeviceManagerEvdev *evdev_manager;
- ClutterDeviceManagerEvdevPrivate *priv;
-
- if (!manager)
- {
- g_warning ("clutter_evdev_reclaim_devices shouldn't be called "
- "before clutter_init()");
- return;
- }
-
- g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (manager));
-
- evdev_manager = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
- priv = evdev_manager->priv;
+ ClutterDeviceManagerEvdev *manager_evdev =
+ CLUTTER_DEVICE_MANAGER_EVDEV (manager);
+ ClutterDeviceManagerEvdevPrivate *priv = manager_evdev->priv;
if (!priv->released)
{
@@ -1123,6 +1773,312 @@ clutter_evdev_reclaim_devices (void)
return;
}
+ libinput_resume (priv->libinput);
+ clutter_evdev_update_xkb_state (manager_evdev);
+ process_events (manager_evdev);
+
priv->released = FALSE;
- clutter_device_manager_evdev_probe_devices (evdev_manager);
+}
+
+/**
+ * clutter_evdev_set_device_callbacks: (skip)
+ * @open_callback: the user replacement for open()
+ * @close_callback: the user replacement for close()
+ * @user_data: user data for @callback
+ *
+ * Through this function, the application can set a custom callback
+ * to invoked when Clutter is about to open an evdev device. It can do
+ * so if special handling is needed, for example to circumvent permission
+ * problems.
+ *
+ * Setting @callback to %NULL will reset the default behavior.
+ *
+ * For reliable effects, this function must be called before clutter_init().
+ *
+ * Since: 1.16
+ * Stability: unstable
+ */
+void
+clutter_evdev_set_device_callbacks (ClutterOpenDeviceCallback open_callback,
+ ClutterCloseDeviceCallback close_callback,
+ gpointer user_data)
+{
+ device_open_callback = open_callback;
+ device_close_callback = close_callback;
+ device_callback_data = user_data;
+}
+
+/**
+ * clutter_evdev_set_keyboard_map: (skip)
+ * @evdev: the #ClutterDeviceManager created by the evdev backend
+ * @keymap: the new keymap
+ *
+ * Instructs @evdev to use the speficied keyboard map. This will cause
+ * the backend to drop the state and create a new one with the new
+ * map. To avoid state being lost, callers should ensure that no key
+ * is pressed when calling this function.
+ *
+ * Since: 1.16
+ * Stability: unstable
+ */
+void
+clutter_evdev_set_keyboard_map (ClutterDeviceManager *evdev,
+ struct xkb_keymap *keymap)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+ ClutterDeviceManagerEvdevPrivate *priv;
+
+ g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
+ priv = manager_evdev->priv;
+
+ if (priv->keymap)
+ xkb_keymap_unref (priv->keymap);
+
+ priv->keymap = xkb_keymap_ref (keymap);
+ clutter_evdev_update_xkb_state (manager_evdev);
+}
+
+/**
+ * clutter_evdev_get_keyboard_map: (skip)
+ * @evdev: the #ClutterDeviceManager created by the evdev backend
+ *
+ * Retrieves the #xkb_keymap in use by the evdev backend.
+ *
+ * Return value: the #xkb_keymap.
+ *
+ * Since: 1.18
+ * Stability: unstable
+ */
+struct xkb_keymap *
+clutter_evdev_get_keyboard_map (ClutterDeviceManager *evdev)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+
+ g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev), NULL);
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
+
+ return xkb_state_get_keymap (manager_evdev->priv->main_seat->xkb);
+}
+
+/**
+ * clutter_evdev_set_keyboard_layout_index: (skip)
+ * @evdev: the #ClutterDeviceManager created by the evdev backend
+ * @idx: the xkb layout index to set
+ *
+ * Sets the xkb layout index on the backend's #xkb_state .
+ *
+ * Since: 1.20
+ * Stability: unstable
+ */
+void
+clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev,
+ xkb_layout_index_t idx)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+ xkb_mod_mask_t depressed_mods;
+ xkb_mod_mask_t latched_mods;
+ xkb_mod_mask_t locked_mods;
+ struct xkb_state *state;
+
+ g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
+ state = manager_evdev->priv->main_seat->xkb;
+
+ depressed_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED);
+ latched_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED);
+ locked_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED);
+
+ xkb_state_update_mask (state, depressed_mods, latched_mods, locked_mods, 0, 0, idx);
+}
+
+/**
+ * clutter_evdev_set_pointer_constrain_callback:
+ * @evdev: the #ClutterDeviceManager created by the evdev backend
+ * @callback: the callback
+ * @user_data:
+ * @user_data_notify:
+ *
+ * Sets a callback to be invoked for every pointer motion. The callback
+ * can then modify the new pointer coordinates to constrain movement within
+ * a specific region.
+ *
+ * Since: 1.16
+ * Stability: unstable
+ */
+void
+clutter_evdev_set_pointer_constrain_callback (ClutterDeviceManager *evdev,
+ ClutterPointerConstrainCallback callback,
+ gpointer user_data,
+ GDestroyNotify user_data_notify)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+ ClutterDeviceManagerEvdevPrivate *priv;
+
+ g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
+ priv = manager_evdev->priv;
+
+ if (priv->constrain_data_notify)
+ priv->constrain_data_notify (priv->constrain_data);
+
+ priv->constrain_callback = callback;
+ priv->constrain_data = user_data;
+ priv->constrain_data_notify = user_data_notify;
+}
+
+/**
+ * clutter_evdev_set_keyboard_repeat:
+ * @evdev: the #ClutterDeviceManager created by the evdev backend
+ * @repeat: whether to enable or disable keyboard repeat events
+ * @delay: the delay in ms between the hardware key press event and
+ * the first synthetic event
+ * @interval: the period in ms between consecutive synthetic key
+ * press events
+ *
+ * Enables or disables sythetic key press events, allowing for initial
+ * delay and interval period to be specified.
+ *
+ * Since: 1.18
+ * Stability: unstable
+ */
+void
+clutter_evdev_set_keyboard_repeat (ClutterDeviceManager *evdev,
+ gboolean repeat,
+ guint32 delay,
+ guint32 interval)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+ ClutterSeatEvdev *seat;
+
+ g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
+ seat = manager_evdev->priv->main_seat;
+
+ seat->repeat = repeat;
+ seat->repeat_delay = delay;
+ seat->repeat_interval = interval;
+}
+
+/**
+ * clutter_evdev_add_filter: (skip)
+ * @func: (closure data): a filter function
+ * @data: (allow-none): user data to be passed to the filter function, or %NULL
+ * @destroy_notify: (allow-none): function to call on @data when the filter is removed, or %NULL
+ *
+ * Adds an event filter function.
+ *
+ * Since: 1.20
+ * Stability: unstable
+ */
+void
+clutter_evdev_add_filter (ClutterEvdevFilterFunc func,
+ gpointer data,
+ GDestroyNotify destroy_notify)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+ ClutterDeviceManager *manager;
+ ClutterEventFilter *filter;
+
+ g_return_if_fail (func != NULL);
+
+ manager = clutter_device_manager_get_default ();
+
+ if (!CLUTTER_IS_DEVICE_MANAGER_EVDEV (manager))
+ {
+ g_critical ("The Clutter input backend is not a evdev backend");
+ return;
+ }
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
+
+ filter = g_new0 (ClutterEventFilter, 1);
+ filter->func = func;
+ filter->data = data;
+ filter->destroy_notify = destroy_notify;
+
+ manager_evdev->priv->event_filters =
+ g_slist_append (manager_evdev->priv->event_filters, filter);
+}
+
+/**
+ * clutter_evdev_remove_filter: (skip)
+ * @func: a filter function
+ * @data: (allow-none): user data to be passed to the filter function, or %NULL
+ *
+ * Removes the given filter function.
+ *
+ * Since: 1.20
+ * Stability: unstable
+ */
+void
+clutter_evdev_remove_filter (ClutterEvdevFilterFunc func,
+ gpointer data)
+{
+ ClutterDeviceManagerEvdev *manager_evdev;
+ ClutterDeviceManager *manager;
+ ClutterEventFilter *filter;
+ GSList *tmp_list;
+
+ g_return_if_fail (func != NULL);
+
+ manager = clutter_device_manager_get_default ();
+
+ if (!CLUTTER_IS_DEVICE_MANAGER_EVDEV (manager))
+ {
+ g_critical ("The Clutter input backend is not a evdev backend");
+ return;
+ }
+
+ manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
+ tmp_list = manager_evdev->priv->event_filters;
+
+ while (tmp_list)
+ {
+ filter = tmp_list->data;
+
+ if (filter->func == func && filter->data == data)
+ {
+ if (filter->destroy_notify)
+ filter->destroy_notify (filter->data);
+ g_free (filter);
+ manager_evdev->priv->event_filters =
+ g_slist_delete_link (manager_evdev->priv->event_filters, tmp_list);
+ return;
+ }
+
+ tmp_list = tmp_list->next;
+ }
+}
+
+/**
+ * clutter_evdev_warp_pointer:
+ * @pointer_device: the pointer device to warp
+ * @time: the timestamp for the warp event
+ * @x: the new X position of the pointer
+ * @y: the new Y position of the pointer
+ *
+ * Warps the pointer to a new location. Technically, this is
+ * processed the same way as an absolute motion event from
+ * libinput: it simply generates an absolute motion event that
+ * will be processed on the next iteration of the mainloop.
+ *
+ * The intended use for this is for display servers that need
+ * to warp cursor the cursor to a new location.
+ *
+ * Since: 1.20
+ * Stability: unstable
+ */
+void
+clutter_evdev_warp_pointer (ClutterInputDevice *pointer_device,
+ guint32 time_,
+ int x,
+ int y)
+{
+ notify_absolute_motion (pointer_device, time_, x, y);
}
diff --git a/clutter/evdev/clutter-evdev.h b/clutter/evdev/clutter-evdev.h
index cc5e18edd..423913948 100644
--- a/clutter/evdev/clutter-evdev.h
+++ b/clutter/evdev/clutter-evdev.h
@@ -26,13 +26,109 @@
#include
#include
+#include
#include
+#include
G_BEGIN_DECLS
+#if !defined(CLUTTER_ENABLE_COMPOSITOR_API) && !defined(CLUTTER_COMPILATION)
+#error "You need to define CLUTTER_ENABLE_COMPOSITOR_API before including clutter-evdev.h"
+#endif
+
+/**
+ * ClutterOpenDeviceCallback:
+ * @path: the device path
+ * @flags: flags to be passed to open
+ *
+ * This callback will be called when Clutter needs to access an input
+ * device. It should return an open file descriptor for the file at @path,
+ * or -1 if opening failed.
+ */
+typedef int (*ClutterOpenDeviceCallback) (const char *path,
+ int flags,
+ gpointer user_data,
+ GError **error);
+typedef void (*ClutterCloseDeviceCallback) (int fd,
+ gpointer user_data);
+
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_evdev_set_device_callbacks (ClutterOpenDeviceCallback open_callback,
+ ClutterCloseDeviceCallback close_callback,
+ gpointer user_data);
+
+CLUTTER_AVAILABLE_IN_1_10
void clutter_evdev_release_devices (void);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_evdev_reclaim_devices (void);
+/**
+ * ClutterPointerConstrainCallback:
+ * @device: the core pointer device
+ * @time: the event time in milliseconds
+ * @x: (inout): the new X coordinate
+ * @y: (inout): the new Y coordinate
+ * @user_data:
+ *
+ * This callback will be called for all pointer motion events, and should
+ * update (@x, @y) to constrain the pointer position appropriately.
+ * The subsequent motion event will use the updated values as the new coordinates.
+ * Note that the coordinates are not clamped to the stage size, and the callback
+ * must make sure that this happens before it returns.
+ * Also note that the event will be emitted even if the pointer is constrained
+ * to be in the same position.
+ */
+typedef void (*ClutterPointerConstrainCallback) (ClutterInputDevice *device,
+ guint32 time,
+ float *x,
+ float *y,
+ gpointer user_data);
+
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_evdev_set_pointer_constrain_callback (ClutterDeviceManager *evdev,
+ ClutterPointerConstrainCallback callback,
+ gpointer user_data,
+ GDestroyNotify user_data_notify);
+
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_evdev_set_keyboard_map (ClutterDeviceManager *evdev,
+ struct xkb_keymap *keymap);
+
+CLUTTER_AVAILABLE_IN_1_18
+struct xkb_keymap * clutter_evdev_get_keyboard_map (ClutterDeviceManager *evdev);
+
+CLUTTER_AVAILABLE_IN_1_20
+void clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev,
+ xkb_layout_index_t idx);
+
+CLUTTER_AVAILABLE_IN_1_18
+void clutter_evdev_set_keyboard_repeat (ClutterDeviceManager *evdev,
+ gboolean repeat,
+ guint32 delay,
+ guint32 interval);
+
+typedef gboolean (* ClutterEvdevFilterFunc) (struct libinput_event *event,
+ gpointer data);
+
+CLUTTER_AVAILABLE_IN_1_20
+void clutter_evdev_add_filter (ClutterEvdevFilterFunc func,
+ gpointer data,
+ GDestroyNotify destroy_notify);
+CLUTTER_AVAILABLE_IN_1_20
+void clutter_evdev_remove_filter (ClutterEvdevFilterFunc func,
+ gpointer data);
+CLUTTER_AVAILABLE_IN_1_20
+struct libinput_device * clutter_evdev_input_device_get_libinput_device (ClutterInputDevice *device);
+
+CLUTTER_AVAILABLE_IN_1_20
+gint32 clutter_evdev_event_sequence_get_slot (const ClutterEventSequence *sequence);
+
+CLUTTER_AVAILABLE_IN_1_20
+void clutter_evdev_warp_pointer (ClutterInputDevice *pointer_device,
+ guint32 time_,
+ int x,
+ int y);
+
G_END_DECLS
#endif /* __CLUTTER_EVDEV_H__ */
diff --git a/clutter/evdev/clutter-input-device-evdev.c b/clutter/evdev/clutter-input-device-evdev.c
index 7eccbe58d..cdd38a7cb 100644
--- a/clutter/evdev/clutter-input-device-evdev.c
+++ b/clutter/evdev/clutter-input-device-evdev.c
@@ -4,6 +4,7 @@
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2010 Intel Corp.
+ * Copyright (C) 2014 Jonas Ådahl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -19,6 +20,7 @@
* License along with this library. If not, see .
*
* Author: Damien Lespiau
+ * Author: Jonas Ådahl
*/
#ifdef HAVE_CONFIG_H
@@ -27,98 +29,37 @@
#include "clutter/clutter-device-manager-private.h"
#include "clutter-private.h"
+#include "clutter-evdev.h"
#include "clutter-input-device-evdev.h"
typedef struct _ClutterInputDeviceClass ClutterInputDeviceEvdevClass;
-typedef struct _ClutterInputDeviceEvdevPrivate ClutterInputDeviceEvdevPrivate;
-#define INPUT_DEVICE_EVDEV_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- CLUTTER_TYPE_INPUT_DEVICE_EVDEV, \
- ClutterInputDeviceEvdevPrivate))
-
-enum
-{
- PROP_0,
-
- PROP_SYSFS_PATH,
- PROP_DEVICE_PATH,
-
- PROP_LAST
-};
-
-struct _ClutterInputDeviceEvdevPrivate
-{
- gchar *sysfs_path;
- gchar *device_path;
-};
-
-struct _ClutterInputDeviceEvdev
-{
- ClutterInputDevice parent;
-
- ClutterInputDeviceEvdevPrivate *priv;
-};
+#define clutter_input_device_evdev_get_type _clutter_input_device_evdev_get_type
G_DEFINE_TYPE (ClutterInputDeviceEvdev,
clutter_input_device_evdev,
CLUTTER_TYPE_INPUT_DEVICE)
-static GParamSpec *obj_props[PROP_LAST];
+/*
+ * Clutter makes the assumption that two core devices have ID's 2 and 3 (core
+ * pointer and core keyboard).
+ *
+ * Since the two first devices that will ever be created will be the virtual
+ * pointer and virtual keyboard of the first seat, we fulfill the made
+ * assumptions by having the first device having ID 2 and following 3.
+ */
+#define INITIAL_DEVICE_ID 2
-static void
-clutter_input_device_evdev_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- ClutterInputDeviceEvdev *input = CLUTTER_INPUT_DEVICE_EVDEV (object);
- ClutterInputDeviceEvdevPrivate *priv = input->priv;
-
- switch (property_id)
- {
- case PROP_SYSFS_PATH:
- g_value_set_string (value, priv->sysfs_path);
- break;
- case PROP_DEVICE_PATH:
- g_value_set_string (value, priv->device_path);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-clutter_input_device_evdev_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- ClutterInputDeviceEvdev *input = CLUTTER_INPUT_DEVICE_EVDEV (object);
- ClutterInputDeviceEvdevPrivate *priv = input->priv;
-
- switch (property_id)
- {
- case PROP_SYSFS_PATH:
- priv->sysfs_path = g_value_dup_string (value);
- break;
- case PROP_DEVICE_PATH:
- priv->device_path = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
+static gint global_device_id_next = INITIAL_DEVICE_ID;
static void
clutter_input_device_evdev_finalize (GObject *object)
{
- ClutterInputDeviceEvdev *input = CLUTTER_INPUT_DEVICE_EVDEV (object);
- ClutterInputDeviceEvdevPrivate *priv = input->priv;
+ ClutterInputDeviceEvdev *device = CLUTTER_INPUT_DEVICE_EVDEV (object);
- g_free (priv->sysfs_path);
- g_free (priv->device_path);
+ if (device->libinput_device)
+ libinput_device_unref (device->libinput_device);
G_OBJECT_CLASS (clutter_input_device_evdev_parent_class)->finalize (object);
}
@@ -128,9 +69,11 @@ clutter_input_device_evdev_keycode_to_evdev (ClutterInputDevice *device,
guint hardware_keycode,
guint *evdev_keycode)
{
- /* The hardware keycodes from the evdev backend are already evdev
- keycodes */
- *evdev_keycode = hardware_keycode;
+ /* The hardware keycodes from the evdev backend are almost evdev
+ keycodes: we use the evdev keycode file, but xkb rules have an
+ offset by 8. See the comment in _clutter_key_event_new_from_evdev()
+ */
+ *evdev_keycode = hardware_keycode - 8;
return TRUE;
}
@@ -138,72 +81,168 @@ static void
clutter_input_device_evdev_class_init (ClutterInputDeviceEvdevClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterInputDeviceEvdevPrivate));
-
- object_class->get_property = clutter_input_device_evdev_get_property;
- object_class->set_property = clutter_input_device_evdev_set_property;
object_class->finalize = clutter_input_device_evdev_finalize;
klass->keycode_to_evdev = clutter_input_device_evdev_keycode_to_evdev;
-
- /*
- * ClutterInputDeviceEvdev:udev-device:
- *
- * The Sysfs path of the device
- *
- * Since: 1.6
- */
- pspec =
- g_param_spec_string ("sysfs-path",
- P_("sysfs Path"),
- P_("Path of the device in sysfs"),
- NULL,
- G_PARAM_CONSTRUCT_ONLY | CLUTTER_PARAM_READWRITE);
- obj_props[PROP_SYSFS_PATH] = pspec;
- g_object_class_install_property (object_class, PROP_SYSFS_PATH, pspec);
-
- /*
- * ClutterInputDeviceEvdev:device-path
- *
- * The path of the device file.
- *
- * Since: 1.6
- */
- pspec =
- g_param_spec_string ("device-path",
- P_("Device Path"),
- P_("Path of the device node"),
- NULL,
- G_PARAM_CONSTRUCT_ONLY | CLUTTER_PARAM_READWRITE);
- obj_props[PROP_DEVICE_PATH] = pspec;
- g_object_class_install_property (object_class, PROP_DEVICE_PATH, pspec);
}
static void
clutter_input_device_evdev_init (ClutterInputDeviceEvdev *self)
{
- self->priv = INPUT_DEVICE_EVDEV_PRIVATE (self);
}
-ClutterInputDeviceEvdev *
-_clutter_input_device_evdev_new (void)
+/*
+ * _clutter_input_device_evdev_new:
+ * @manager: the device manager
+ * @seat: the seat the device will belong to
+ * @libinput_device: the libinput device
+ *
+ * Create a new ClutterInputDevice given a libinput device and associate
+ * it with the provided seat.
+ */
+ClutterInputDevice *
+_clutter_input_device_evdev_new (ClutterDeviceManager *manager,
+ ClutterSeatEvdev *seat,
+ struct libinput_device *libinput_device)
{
- return g_object_new (CLUTTER_TYPE_INPUT_DEVICE_EVDEV, NULL);
+ ClutterInputDeviceEvdev *device;
+ ClutterInputDeviceType type;
+
+ type = _clutter_input_device_evdev_determine_type (libinput_device);
+ device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE_EVDEV,
+ "id", global_device_id_next++,
+ "name", libinput_device_get_sysname (libinput_device),
+ "device-manager", manager,
+ "device-type", type,
+ "device-mode", CLUTTER_INPUT_MODE_SLAVE,
+ "enabled", TRUE,
+ NULL);
+
+ device->seat = seat;
+ device->libinput_device = libinput_device;
+
+ libinput_device_set_user_data (libinput_device, device);
+ libinput_device_ref (libinput_device);
+
+ return CLUTTER_INPUT_DEVICE (device);
}
-const gchar *
-_clutter_input_device_evdev_get_sysfs_path (ClutterInputDeviceEvdev *device)
+/*
+ * _clutter_input_device_evdev_new_virtual:
+ * @manager: the device manager
+ * @seat: the seat the device will belong to
+ * @type: the input device type
+ *
+ * Create a new virtual ClutterInputDevice of the given type.
+ */
+ClutterInputDevice *
+_clutter_input_device_evdev_new_virtual (ClutterDeviceManager *manager,
+ ClutterSeatEvdev *seat,
+ ClutterInputDeviceType type)
{
+ ClutterInputDeviceEvdev *device;
+ const char *name;
+
+ switch (type)
+ {
+ case CLUTTER_KEYBOARD_DEVICE:
+ name = "Virtual keyboard device for seat";
+ break;
+ case CLUTTER_POINTER_DEVICE:
+ name = "Virtual pointer device for seat";
+ break;
+ default:
+ name = "Virtual device for seat";
+ break;
+ };
+
+ device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE_EVDEV,
+ "id", global_device_id_next++,
+ "name", name,
+ "device-manager", manager,
+ "device-type", type,
+ "device-mode", CLUTTER_INPUT_MODE_MASTER,
+ "enabled", TRUE,
+ NULL);
+
+ device->seat = seat;
+
+ return CLUTTER_INPUT_DEVICE (device);
+}
+
+ClutterSeatEvdev *
+_clutter_input_device_evdev_get_seat (ClutterInputDeviceEvdev *device)
+{
+ return device->seat;
+}
+
+void
+_clutter_input_device_evdev_update_leds (ClutterInputDeviceEvdev *device,
+ enum libinput_led leds)
+{
+ if (!device->libinput_device)
+ return;
+
+ libinput_device_led_update (device->libinput_device, leds);
+}
+
+ClutterInputDeviceType
+_clutter_input_device_evdev_determine_type (struct libinput_device *ldev)
+{
+ /* This setting is specific to touchpads and alike, only in these
+ * devices there is this additional layer of touch event interpretation.
+ */
+ if (libinput_device_config_tap_get_finger_count (ldev) > 0)
+ return CLUTTER_TOUCHPAD_DEVICE;
+ else if (libinput_device_has_capability (ldev, LIBINPUT_DEVICE_CAP_POINTER))
+ return CLUTTER_POINTER_DEVICE;
+ else if (libinput_device_has_capability (ldev, LIBINPUT_DEVICE_CAP_TOUCH))
+ return CLUTTER_TOUCHSCREEN_DEVICE;
+ else if (libinput_device_has_capability (ldev, LIBINPUT_DEVICE_CAP_KEYBOARD))
+ return CLUTTER_KEYBOARD_DEVICE;
+ else
+ return CLUTTER_EXTENSION_DEVICE;
+}
+
+/**
+ * clutter_evdev_input_device_get_libinput_device:
+ * @device: a #ClutterInputDevice
+ *
+ * Retrieves the libinput_device struct held in @device.
+ *
+ * Returns: The libinput_device struct
+ *
+ * Since: 1.20
+ * Stability: unstable
+ **/
+struct libinput_device *
+clutter_evdev_input_device_get_libinput_device (ClutterInputDevice *device)
+{
+ ClutterInputDeviceEvdev *device_evdev;
+
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_EVDEV (device), NULL);
- return device->priv->sysfs_path;
+ device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device);
+
+ return device_evdev->libinput_device;
}
-const gchar *
-_clutter_input_device_evdev_get_device_path (ClutterInputDeviceEvdev *device)
+/**
+ * clutter_evdev_event_sequence_get_slot:
+ * @sequence: a #ClutterEventSequence
+ *
+ * Retrieves the touch slot triggered by this @sequence
+ *
+ * Returns: the libinput touch slot.
+ *
+ * Since: 1.20
+ * Stability: unstable
+ **/
+gint32
+clutter_evdev_event_sequence_get_slot (const ClutterEventSequence *sequence)
{
- g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_EVDEV (device), NULL);
+ if (!sequence)
+ return -1;
- return device->priv->device_path;
+ return GPOINTER_TO_INT (sequence) - 1;
}
diff --git a/clutter/evdev/clutter-input-device-evdev.h b/clutter/evdev/clutter-input-device-evdev.h
index 4b76e6223..06f3d8615 100644
--- a/clutter/evdev/clutter-input-device-evdev.h
+++ b/clutter/evdev/clutter-input-device-evdev.h
@@ -4,6 +4,7 @@
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2010 Intel Corp.
+ * Copyright (C) 2014 Jonas Ådahl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -19,19 +20,20 @@
* License along with this library. If not, see .
*
* Author: Damien Lespiau
+ * Author: Jonas Ådahl
*/
#ifndef __CLUTTER_INPUT_DEVICE_EVDEV_H__
#define __CLUTTER_INPUT_DEVICE_EVDEV_H__
#include
-#include
+#include
#include
G_BEGIN_DECLS
-#define CLUTTER_TYPE_INPUT_DEVICE_EVDEV clutter_input_device_evdev_get_type()
+#define CLUTTER_TYPE_INPUT_DEVICE_EVDEV _clutter_input_device_evdev_get_type()
#define CLUTTER_INPUT_DEVICE_EVDEV(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
@@ -54,12 +56,32 @@ G_BEGIN_DECLS
CLUTTER_TYPE_INPUT_DEVICE_EVDEV, ClutterInputDeviceEvdevClass))
typedef struct _ClutterInputDeviceEvdev ClutterInputDeviceEvdev;
+typedef struct _ClutterSeatEvdev ClutterSeatEvdev;
-GType clutter_input_device_evdev_get_type (void) G_GNUC_CONST;
+struct _ClutterInputDeviceEvdev
+{
+ ClutterInputDevice parent;
-ClutterInputDeviceEvdev * _clutter_input_device_evdev_new (void);
-const gchar * _clutter_input_device_evdev_get_sysfs_path (ClutterInputDeviceEvdev *device);
-const gchar * _clutter_input_device_evdev_get_device_path (ClutterInputDeviceEvdev *device);
+ struct libinput_device *libinput_device;
+ ClutterSeatEvdev *seat;
+};
+
+GType _clutter_input_device_evdev_get_type (void) G_GNUC_CONST;
+
+ClutterInputDevice * _clutter_input_device_evdev_new (ClutterDeviceManager *manager,
+ ClutterSeatEvdev *seat,
+ struct libinput_device *libinput_device);
+
+ClutterInputDevice * _clutter_input_device_evdev_new_virtual (ClutterDeviceManager *manager,
+ ClutterSeatEvdev *seat,
+ ClutterInputDeviceType type);
+
+ClutterSeatEvdev * _clutter_input_device_evdev_get_seat (ClutterInputDeviceEvdev *device);
+
+void _clutter_input_device_evdev_update_leds (ClutterInputDeviceEvdev *device,
+ enum libinput_led leds);
+
+ClutterInputDeviceType _clutter_input_device_evdev_determine_type (struct libinput_device *libinput_device);
G_END_DECLS
diff --git a/clutter/evdev/clutter-xkb-utils.c b/clutter/evdev/clutter-xkb-utils.c
index 7f50858ee..fd6e0f121 100644
--- a/clutter/evdev/clutter-xkb-utils.c
+++ b/clutter/evdev/clutter-xkb-utils.c
@@ -24,6 +24,7 @@
*/
#include "clutter-keysyms.h"
+#include "clutter-event-private.h"
#include "clutter-xkb-utils.h"
/*
@@ -42,8 +43,10 @@
*/
ClutterEvent *
_clutter_key_event_new_from_evdev (ClutterInputDevice *device,
+ ClutterInputDevice *core_device,
ClutterStage *stage,
struct xkb_state *xkb_state,
+ uint32_t button_state,
uint32_t _time,
xkb_keycode_t key,
uint32_t state)
@@ -71,13 +74,13 @@ _clutter_key_event_new_from_evdev (ClutterInputDevice *device,
else
sym = XKB_KEY_NoSymbol;
- event->key.device = device;
+ event->key.device = core_device;
event->key.stage = stage;
event->key.time = _time;
- event->key.modifier_state =
- xkb_state_serialize_mods (xkb_state, XKB_STATE_EFFECTIVE);
+ _clutter_xkb_translate_state (event, xkb_state, button_state);
event->key.hardware_keycode = key;
event->key.keyval = sym;
+ clutter_event_set_source_device (event, device);
n = xkb_keysym_to_utf8 (sym, buffer, sizeof (buffer));
@@ -96,45 +99,15 @@ _clutter_key_event_new_from_evdev (ClutterInputDevice *device,
return event;
}
-/*
- * _clutter_xkb_state_new:
- *
- * Create a new xkbcommon keymap and state object.
- *
- * FIXME: We need a way to override the layout here, a fixed or runtime
- * detected layout is provided by the backend calling _clutter_xkb_state_new();
- */
-struct xkb_state *
-_clutter_xkb_state_new (const gchar *model,
- const gchar *layout,
- const gchar *variant,
- const gchar *options)
+void
+_clutter_xkb_translate_state (ClutterEvent *event,
+ struct xkb_state *state,
+ uint32_t button_state)
{
- struct xkb_context *ctx;
- struct xkb_keymap *keymap;
- struct xkb_state *state;
- struct xkb_rule_names names;
-
- ctx = xkb_context_new(0);
- if (!ctx)
- return NULL;
-
- names.rules = "evdev";
- if (model)
- names.model = model;
- else
- names.model = "pc105";
- names.layout = layout;
- names.variant = variant;
- names.options = options;
-
- keymap = xkb_map_new_from_names(ctx, &names, 0);
- xkb_context_unref(ctx);
- if (!keymap)
- return NULL;
-
- state = xkb_state_new(keymap);
- xkb_map_unref(keymap);
-
- return state;
+ _clutter_event_set_state_full (event,
+ button_state,
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED),
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED),
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
+ xkb_state_serialize_mods (state, XKB_STATE_MODS_EFFECTIVE) | button_state);
}
diff --git a/clutter/evdev/clutter-xkb-utils.h b/clutter/evdev/clutter-xkb-utils.h
index f732f5b86..ae057dd6f 100644
--- a/clutter/evdev/clutter-xkb-utils.h
+++ b/clutter/evdev/clutter-xkb-utils.h
@@ -32,14 +32,15 @@
#include "clutter-input-device.h"
ClutterEvent * _clutter_key_event_new_from_evdev (ClutterInputDevice *device,
+ ClutterInputDevice *core_keyboard,
ClutterStage *stage,
struct xkb_state *xkb_state,
+ uint32_t button_state,
uint32_t _time,
uint32_t key,
uint32_t state);
-struct xkb_state * _clutter_xkb_state_new (const gchar *model,
- const gchar *layout,
- const gchar *variant,
- const gchar *options);
+void _clutter_xkb_translate_state (ClutterEvent *event,
+ struct xkb_state *xkb_state,
+ uint32_t button_state);
#endif /* __CLUTTER_XKB_UTILS_H__ */
diff --git a/clutter/gdk/clutter-backend-gdk.c b/clutter/gdk/clutter-backend-gdk.c
index 988b37075..7f14feb6e 100644
--- a/clutter/gdk/clutter-backend-gdk.c
+++ b/clutter/gdk/clutter-backend-gdk.c
@@ -65,6 +65,7 @@
#include "clutter-event-private.h"
#include "clutter-main.h"
#include "clutter-private.h"
+#include "clutter-settings-private.h"
#define clutter_backend_gdk_get_type _clutter_backend_gdk_get_type
G_DEFINE_TYPE (ClutterBackendGdk, clutter_backend_gdk, CLUTTER_TYPE_BACKEND);
@@ -88,9 +89,9 @@ clutter_backend_gdk_init_settings (ClutterBackendGdk *backend_gdk)
gdk_screen_get_setting (backend_gdk->screen,
CLUTTER_SETTING_GDK_NAME(i),
&val);
- g_object_set_property (G_OBJECT (settings),
- CLUTTER_SETTING_PROPERTY(i),
- &val);
+ clutter_settings_set_property_internal (settings,
+ CLUTTER_SETTING_PROPERTY (i),
+ &val);
g_value_unset (&val);
}
}
@@ -112,9 +113,9 @@ _clutter_backend_gdk_update_setting (ClutterBackendGdk *backend_gdk,
gdk_screen_get_setting (backend_gdk->screen,
CLUTTER_SETTING_GDK_NAME (i),
&val);
- g_object_set_property (G_OBJECT (settings),
- CLUTTER_SETTING_PROPERTY (i),
- &val);
+ clutter_settings_set_property_internal (settings,
+ CLUTTER_SETTING_PROPERTY (i),
+ &val);
g_value_unset (&val);
break;
@@ -128,9 +129,10 @@ cogl_gdk_filter (GdkXEvent *xevent,
gpointer data)
{
#ifdef GDK_WINDOWING_X11
+ ClutterBackend *backend = data;
CoglFilterReturn ret;
- ret = cogl_xlib_handle_event ((XEvent*)xevent);
+ ret = cogl_xlib_renderer_handle_event (backend->cogl_renderer, (XEvent *) xevent);
switch (ret)
{
case COGL_FILTER_REMOVE:
@@ -170,7 +172,7 @@ _clutter_backend_gdk_post_parse (ClutterBackend *backend,
backend_gdk->screen = gdk_display_get_default_screen (backend_gdk->display);
/* add event filter for Cogl events */
- gdk_window_add_filter (NULL, cogl_gdk_filter, NULL);
+ gdk_window_add_filter (NULL, cogl_gdk_filter, backend_gdk);
clutter_backend_gdk_init_settings (backend_gdk);
@@ -210,7 +212,7 @@ clutter_backend_gdk_finalize (GObject *gobject)
{
ClutterBackendGdk *backend_gdk = CLUTTER_BACKEND_GDK (gobject);
- gdk_window_remove_filter (NULL, cogl_gdk_filter, NULL);
+ gdk_window_remove_filter (NULL, cogl_gdk_filter, backend_gdk);
g_object_unref (backend_gdk->display);
G_OBJECT_CLASS (clutter_backend_gdk_parent_class)->finalize (gobject);
@@ -278,6 +280,7 @@ clutter_backend_gdk_get_renderer (ClutterBackend *backend,
{
/* Force a WGL winsys on windows */
cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_WGL);
+ cogl_win32_renderer_set_event_retrieval_enabled (renderer, FALSE);
}
else
#endif
diff --git a/clutter/gdk/clutter-event-gdk.c b/clutter/gdk/clutter-event-gdk.c
index d9ce5deff..7675cc18e 100644
--- a/clutter/gdk/clutter-event-gdk.c
+++ b/clutter/gdk/clutter-event-gdk.c
@@ -184,6 +184,33 @@ clutter_gdk_handle_event (GdkEvent *gdk_event)
event->button.y);
break;
+ case GDK_TOUCH_BEGIN:
+ case GDK_TOUCH_END:
+ case GDK_TOUCH_CANCEL:
+ case GDK_TOUCH_UPDATE:
+ event = clutter_event_new (gdk_event->type == GDK_TOUCH_BEGIN ?
+ CLUTTER_TOUCH_BEGIN :
+ ((gdk_event->type == GDK_TOUCH_END) ?
+ CLUTTER_TOUCH_END :
+ (gdk_event->type == GDK_TOUCH_UPDATE ?
+ CLUTTER_TOUCH_UPDATE :
+ CLUTTER_TOUCH_CANCEL)));
+ event->touch.time = gdk_event->touch.time;
+ event->touch.x = gdk_event->touch.x;
+ event->touch.y = gdk_event->touch.y;
+ event->touch.sequence = (ClutterEventSequence *) gdk_event->touch.sequence;
+ event->touch.modifier_state = gdk_event->touch.state;
+ clutter_event_set_device (event, device);
+ clutter_event_set_source_device (event, source_device);
+ CLUTTER_NOTE (EVENT, "Touch %p %s [%",
+ event->touch.sequence,
+ event->type == CLUTTER_TOUCH_BEGIN ? "begin" :
+ (event->type == CLUTTER_TOUCH_END ? "end" :
+ (event->type == CLUTTER_TOUCH_UPDATE ? "update"
+ : "cancel")),
+ event->touch.x, event->touch.y);
+ break;
+
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
/* these are handled by clutter-main.c updating click_count */
@@ -309,8 +336,7 @@ clutter_gdk_handle_event (GdkEvent *gdk_event)
while (spin > 0 && (event = clutter_event_get ()))
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
--spin;
}
diff --git a/clutter/gdk/clutter-gdk.h b/clutter/gdk/clutter-gdk.h
index f569718d4..a009378c5 100644
--- a/clutter/gdk/clutter-gdk.h
+++ b/clutter/gdk/clutter-gdk.h
@@ -41,17 +41,24 @@
G_BEGIN_DECLS
+CLUTTER_AVAILABLE_IN_1_10
GdkDisplay * clutter_gdk_get_default_display (void);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_gdk_set_display (GdkDisplay *display);
+CLUTTER_AVAILABLE_IN_1_10
GdkWindow * clutter_gdk_get_stage_window (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_1_10
gboolean clutter_gdk_set_stage_foreign (ClutterStage *stage,
GdkWindow *window);
+CLUTTER_AVAILABLE_IN_1_10
GdkFilterReturn clutter_gdk_handle_event (GdkEvent *event);
+CLUTTER_AVAILABLE_IN_1_10
ClutterStage * clutter_gdk_get_stage_from_window (GdkWindow *window);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_gdk_disable_event_retrieval (void);
G_END_DECLS
diff --git a/clutter/gdk/clutter-settings-gdk.h b/clutter/gdk/clutter-settings-gdk.h
index c2b576e01..9c0fd4f1f 100644
--- a/clutter/gdk/clutter-settings-gdk.h
+++ b/clutter/gdk/clutter-settings-gdk.h
@@ -7,6 +7,7 @@ static const struct {
const char *settings_property;
GType type;
} _clutter_settings_map[] = {
+ { "gdk-window-scaling-factor", "window-scaling-factor", G_TYPE_INT },
{ "gtk-double-click-time", "double-click-time", G_TYPE_INT },
{ "gtk-double-click-distance", "double-click-distance", G_TYPE_INT },
{ "gtk-dnd-drag-threshold", "dnd-drag-threshold", G_TYPE_INT },
diff --git a/clutter/gdk/clutter-stage-gdk.c b/clutter/gdk/clutter-stage-gdk.c
index 342906a9e..c0188e0c0 100644
--- a/clutter/gdk/clutter-stage-gdk.c
+++ b/clutter/gdk/clutter-stage-gdk.c
@@ -28,10 +28,16 @@
#endif
#include
+
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
#include
#ifdef GDK_WINDOWING_X11
#include
#endif
+#ifdef GDK_WINDOWING_WAYLAND
+#include
+#endif
#ifdef GDK_WINDOWING_WIN32
#include
#endif
@@ -143,9 +149,6 @@ clutter_stage_gdk_resize (ClutterStageWindow *stage_window,
CLUTTER_NOTE (BACKEND, "New size received: (%d, %d)", width, height);
- CLUTTER_SET_PRIVATE_FLAGS (CLUTTER_STAGE_COGL (stage_gdk)->wrapper,
- CLUTTER_IN_RESIZE);
-
gdk_window_resize (stage_gdk->window, width, height);
}
@@ -225,7 +228,7 @@ clutter_stage_gdk_realize (ClutterStageWindow *stage_window)
if (!cursor_visible)
{
if (stage_gdk->blank_cursor == NULL)
- stage_gdk->blank_cursor = gdk_cursor_new (GDK_BLANK_CURSOR);
+ stage_gdk->blank_cursor = gdk_cursor_new_for_display (backend_gdk->display, GDK_BLANK_CURSOR);
attributes.cursor = stage_gdk->blank_cursor;
}
@@ -273,6 +276,14 @@ clutter_stage_gdk_realize (ClutterStageWindow *stage_window)
}
else
#endif
+#if defined(GDK_WINDOWING_WAYLAND) && defined(COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT)
+ if (GDK_IS_WAYLAND_WINDOW (stage_gdk->window))
+ {
+ cogl_wayland_onscreen_set_foreign_surface (stage_cogl->onscreen,
+ gdk_wayland_window_get_wl_surface (stage_gdk->window));
+ }
+ else
+#endif
#if defined(GDK_WINDOWING_WIN32) && defined(COGL_HAS_WIN32_SUPPORT)
if (GDK_IS_WIN32_WINDOW (stage_gdk->window))
{
@@ -336,7 +347,11 @@ clutter_stage_gdk_set_cursor_visible (ClutterStageWindow *stage_window,
else
{
if (stage_gdk->blank_cursor == NULL)
- stage_gdk->blank_cursor = gdk_cursor_new (GDK_BLANK_CURSOR);
+ {
+ GdkDisplay *display = clutter_gdk_get_default_display ();
+
+ stage_gdk->blank_cursor = gdk_cursor_new_for_display (display, GDK_BLANK_CURSOR);
+ }
gdk_window_set_cursor (stage_gdk->window, stage_gdk->blank_cursor);
}
diff --git a/clutter/osx/clutter-backend-osx.c b/clutter/osx/clutter-backend-osx.c
index 1438a50f5..90f5e6c17 100644
--- a/clutter/osx/clutter-backend-osx.c
+++ b/clutter/osx/clutter-backend-osx.c
@@ -42,6 +42,9 @@
G_DEFINE_TYPE (ClutterBackendOSX, clutter_backend_osx, CLUTTER_TYPE_BACKEND)
+/* various flags corresponding to pre init setup calls */
+static gboolean _no_event_retrieval = FALSE;
+
/*************************************************************************/
static gboolean
clutter_backend_osx_post_parse (ClutterBackend *backend,
@@ -73,6 +76,19 @@ clutter_backend_osx_post_parse (ClutterBackend *backend,
return TRUE;
}
+void
+clutter_osx_disable_event_retrieval (void)
+{
+ if (_clutter_context_is_initialized ())
+ {
+ g_warning ("clutter_osx_disable_event_retrieval() can only be "
+ "called before clutter_init()");
+ return;
+ }
+
+ _no_event_retrieval = TRUE;
+}
+
static ClutterFeatureFlags
clutter_backend_osx_get_features (ClutterBackend *backend)
{
@@ -95,7 +111,8 @@ _clutter_backend_osx_events_init (ClutterBackend *backend)
"backend", CLUTTER_BACKEND(backend_osx),
NULL);
- _clutter_osx_event_loop_init ();
+ if (!_no_event_retrieval)
+ _clutter_osx_event_loop_init ();
}
static gboolean
diff --git a/clutter/osx/clutter-backend-osx.h b/clutter/osx/clutter-backend-osx.h
index b1720abb9..cef4e0e72 100644
--- a/clutter/osx/clutter-backend-osx.h
+++ b/clutter/osx/clutter-backend-osx.h
@@ -61,7 +61,13 @@ struct _ClutterBackendOSXClass
GType _clutter_backend_osx_get_type (void) G_GNUC_CONST;
-void _clutter_backend_osx_events_init (ClutterBackend *backend);
+void _clutter_backend_osx_events_init (ClutterBackend *backend);
+
+#define CLUTTER_OSX_POOL_ALLOC() NSAutoreleasePool *autorelease_pool = [[NSAutoreleasePool alloc] init]
+#define CLUTTER_OSX_POOL_RELEASE() [autorelease_pool release];
+
+void _clutter_event_osx_put (NSEvent *nsevent,
+ ClutterStage *wrapper);
G_END_DECLS
diff --git a/clutter/osx/clutter-event-loop-osx.c b/clutter/osx/clutter-event-loop-osx.c
index 6b3a561ef..77a4330ab 100644
--- a/clutter/osx/clutter-event-loop-osx.c
+++ b/clutter/osx/clutter-event-loop-osx.c
@@ -712,8 +712,7 @@ clutter_event_dispatch (GSource *source,
if (event)
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
}
_clutter_threads_release_lock ();
diff --git a/clutter/osx/clutter-event-osx.c b/clutter/osx/clutter-event-osx.c
index 1f9ee77d3..4b53fefad 100644
--- a/clutter/osx/clutter-event-osx.c
+++ b/clutter/osx/clutter-event-osx.c
@@ -24,6 +24,7 @@
#include "clutter-osx.h"
+#include "clutter-backend-osx.h"
#include "clutter-device-manager-osx.h"
#include "clutter-stage-osx.h"
diff --git a/clutter/osx/clutter-osx.h b/clutter/osx/clutter-osx.h
index b8ea62854..8930b0ad1 100644
--- a/clutter/osx/clutter-osx.h
+++ b/clutter/osx/clutter-osx.h
@@ -24,19 +24,14 @@
#import
-#include
+#include
@class NSEvent;
G_BEGIN_DECLS
-#define CLUTTER_OSX_POOL_ALLOC() NSAutoreleasePool *autorelease_pool = [[NSAutoreleasePool alloc] init]
-#define CLUTTER_OSX_POOL_RELEASE() [autorelease_pool release];
-
-void _clutter_events_osx_init (void);
-void _clutter_events_osx_uninit (void);
-
-void _clutter_event_osx_put (NSEvent *nsevent, ClutterStage *wrapper);
+CLUTTER_AVAILABLE_IN_1_22
+void clutter_osx_disable_event_retrieval (void);
G_END_DECLS
diff --git a/clutter/tslib/clutter-event-tslib.c b/clutter/tslib/clutter-event-tslib.c
index 260562565..8ed27f347 100644
--- a/clutter/tslib/clutter-event-tslib.c
+++ b/clutter/tslib/clutter-event-tslib.c
@@ -267,8 +267,7 @@ clutter_event_dispatch (GSource *source,
if (event)
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
}
out:
diff --git a/clutter/wayland/clutter-backend-wayland-priv.h b/clutter/wayland/clutter-backend-wayland-priv.h
index e917b7f8c..a278754ba 100644
--- a/clutter/wayland/clutter-backend-wayland-priv.h
+++ b/clutter/wayland/clutter-backend-wayland-priv.h
@@ -62,6 +62,8 @@ struct _ClutterBackendWayland
GTimer *event_timer;
};
+void _clutter_backend_wayland_ensure_cursor (ClutterBackendWayland *backend_wayland);
+
G_END_DECLS
#endif /* __CLUTTER_BACKEND_WAYLAND_PRIV_H__ */
diff --git a/clutter/wayland/clutter-backend-wayland.c b/clutter/wayland/clutter-backend-wayland.c
index 77ed8c4be..dcc7c65a1 100644
--- a/clutter/wayland/clutter-backend-wayland.c
+++ b/clutter/wayland/clutter-backend-wayland.c
@@ -46,6 +46,7 @@
#include "wayland/clutter-device-manager-wayland.h"
#include "wayland/clutter-event-wayland.h"
#include "wayland/clutter-stage-wayland.h"
+#include "wayland/clutter-wayland.h"
#include "cogl/clutter-stage-cogl.h"
#include
@@ -59,7 +60,8 @@
G_DEFINE_TYPE (ClutterBackendWayland, clutter_backend_wayland, CLUTTER_TYPE_BACKEND);
-static void clutter_backend_wayland_load_cursor (ClutterBackendWayland *backend_wayland);
+static struct wl_display *_foreign_display = NULL;
+static gboolean _no_event_dispatch = FALSE;
static void
clutter_backend_wayland_dispose (GObject *gobject)
@@ -175,7 +177,10 @@ clutter_backend_wayland_post_parse (ClutterBackend *backend,
ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend);
/* TODO: expose environment variable/commandline option for this... */
- backend_wayland->wayland_display = wl_display_connect (NULL);
+ backend_wayland->wayland_display = _foreign_display;
+ if (backend_wayland->wayland_display == NULL)
+ backend_wayland->wayland_display = wl_display_connect (NULL);
+
if (!backend_wayland->wayland_display)
{
g_set_error (error, CLUTTER_INIT_ERROR,
@@ -217,9 +222,6 @@ clutter_backend_wayland_post_parse (ClutterBackend *backend,
backend_wayland->wayland_shell))
wl_display_roundtrip (backend_wayland->wayland_display);
- /* We need the shm object before we can create the cursor */
- clutter_backend_wayland_load_cursor (backend_wayland);
-
return TRUE;
}
@@ -234,14 +236,11 @@ clutter_backend_wayland_get_renderer (ClutterBackend *backend,
renderer = cogl_renderer_new ();
+ cogl_wayland_renderer_set_event_dispatch_enabled (renderer, !_no_event_dispatch);
cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_EGL_WAYLAND);
cogl_wayland_renderer_set_foreign_display (renderer,
backend_wayland->wayland_display);
- cogl_wayland_renderer_set_foreign_compositor (renderer,
- backend_wayland->wayland_compositor);
- cogl_wayland_renderer_set_foreign_shell (renderer,
- backend_wayland->wayland_shell);
return renderer;
}
@@ -292,8 +291,8 @@ clutter_backend_wayland_class_init (ClutterBackendWaylandClass *klass)
backend_class->get_display = clutter_backend_wayland_get_display;
}
-static void
-clutter_backend_wayland_load_cursor (ClutterBackendWayland *backend_wayland)
+void
+_clutter_backend_wayland_ensure_cursor (ClutterBackendWayland *backend_wayland)
{
struct wl_cursor *cursor;
@@ -322,3 +321,59 @@ static void
clutter_backend_wayland_init (ClutterBackendWayland *backend_wayland)
{
}
+
+/**
+ * clutter_wayland_set_display
+ * @display: pointer to a wayland display
+ *
+ * Sets the display connection Clutter should use; must be called
+ * before clutter_init(), clutter_init_with_args() or other functions
+ * pertaining Clutter's initialization process.
+ *
+ * If you are parsing the command line arguments by retrieving Clutter's
+ * #GOptionGroup with clutter_get_option_group() and calling
+ * g_option_context_parse() yourself, you should also call
+ * clutter_wayland_set_display() before g_option_context_parse().
+ *
+ * Since: 1.16
+ */
+void
+clutter_wayland_set_display (struct wl_display *display)
+{
+ if (_clutter_context_is_initialized ())
+ {
+ g_warning ("%s() can only be used before calling clutter_init()",
+ G_STRFUNC);
+ return;
+ }
+
+ _foreign_display = display;
+}
+
+/**
+ * clutter_wayland_disable_event_retrieval:
+ *
+ * Disables the dispatch of the events in the main loop.
+ *
+ * This is useful for integrating Clutter with another library that will do the
+ * event dispatch; in general only a single source should be acting on changes
+ * on the Wayland file descriptor.
+ *
+ * This function can only be called before calling clutter_init().
+ *
+ * This function should not be normally used by applications.
+ *
+ * Since: 1.16
+ */
+void
+clutter_wayland_disable_event_retrieval (void)
+{
+ if (_clutter_context_is_initialized ())
+ {
+ g_warning ("%s() can only be used before calling clutter_init()",
+ G_STRFUNC);
+ return;
+ }
+
+ _no_event_dispatch = TRUE;
+}
diff --git a/clutter/wayland/clutter-event-wayland.c b/clutter/wayland/clutter-event-wayland.c
index 8ba2f3cb4..c832d80b8 100644
--- a/clutter/wayland/clutter-event-wayland.c
+++ b/clutter/wayland/clutter-event-wayland.c
@@ -35,13 +35,13 @@
#include "clutter-event.h"
#include "clutter-main.h"
#include "clutter-private.h"
+#include "clutter-stage-private.h"
#include "clutter-event-wayland.h"
typedef struct _ClutterEventSourceWayland
{
GSource source;
- GPollFD pfd;
struct wl_display *display;
} ClutterEventSourceWayland;
@@ -70,12 +70,11 @@ clutter_event_source_wayland_prepare (GSource *base, gint *timeout)
static gboolean
clutter_event_source_wayland_check (GSource *base)
{
- ClutterEventSourceWayland *source = (ClutterEventSourceWayland *) base;
gboolean retval;
_clutter_threads_acquire_lock ();
- retval = clutter_events_pending () || source->pfd.revents;
+ retval = clutter_events_pending ();
_clutter_threads_release_lock ();
@@ -87,24 +86,16 @@ clutter_event_source_wayland_dispatch (GSource *base,
GSourceFunc callback,
gpointer data)
{
- ClutterEventSourceWayland *source = (ClutterEventSourceWayland *) base;
ClutterEvent *event;
_clutter_threads_acquire_lock ();
- if (source->pfd.revents)
- {
- wl_display_dispatch (source->display);
- source->pfd.revents = 0;
- }
-
event = clutter_event_get ();
if (event)
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
}
_clutter_threads_release_lock ();
@@ -129,10 +120,6 @@ _clutter_event_source_wayland_new (struct wl_display *display)
g_source_new (&clutter_event_source_wayland_funcs,
sizeof (ClutterEventSourceWayland));
source->display = display;
- source->pfd.fd =
- wl_display_get_fd (display);
- source->pfd.events = G_IO_IN | G_IO_ERR;
- g_source_add_poll (&source->source, &source->pfd);
return &source->source;
}
diff --git a/clutter/wayland/clutter-input-device-wayland.c b/clutter/wayland/clutter-input-device-wayland.c
index 8f08ff6db..7bfb615b7 100644
--- a/clutter/wayland/clutter-input-device-wayland.c
+++ b/clutter/wayland/clutter-input-device-wayland.c
@@ -44,6 +44,7 @@
#include "clutter-backend-wayland.h"
#include "clutter-backend-wayland-priv.h"
#include "clutter-stage-private.h"
+#include "clutter-stage-wayland.h"
#include "clutter-wayland.h"
#include "cogl/clutter-stage-cogl.h"
@@ -57,6 +58,16 @@ G_DEFINE_TYPE (ClutterInputDeviceWayland,
clutter_input_device_wayland,
CLUTTER_TYPE_INPUT_DEVICE);
+/* This gives us a fake time source for higher level abstractions to have an
+ * understanding of when an event happens. All that matters are that this is a
+ * monotonic increasing millisecond accurate time for events to be compared with.
+ */
+static guint32
+_clutter_wayland_get_time (void)
+{
+ return g_get_monotonic_time () / 1000;
+}
+
static void
clutter_wayland_handle_motion (void *data,
struct wl_pointer *pointer,
@@ -64,16 +75,21 @@ clutter_wayland_handle_motion (void *data,
wl_fixed_t x, wl_fixed_t y)
{
ClutterInputDeviceWayland *device = data;
- ClutterStageCogl *stage_cogl = device->pointer_focus;
+ ClutterStageCogl *stage_cogl;
ClutterEvent *event;
+ if (!device->pointer_focus)
+ return;
+
+ stage_cogl = device->pointer_focus;
+
event = clutter_event_new (CLUTTER_MOTION);
event->motion.stage = stage_cogl->wrapper;
event->motion.device = CLUTTER_INPUT_DEVICE (device);
- event->motion.time = _time;
+ event->motion.time = _clutter_wayland_get_time ();
event->motion.modifier_state = 0;
- event->motion.x = wl_fixed_to_double(x);
- event->motion.y = wl_fixed_to_double(y);
+ event->motion.x = wl_fixed_to_double (x);
+ event->motion.y = wl_fixed_to_double (y);
device->x = event->motion.x;
device->y = event->motion.y;
@@ -88,9 +104,15 @@ clutter_wayland_handle_button (void *data,
uint32_t button, uint32_t state)
{
ClutterInputDeviceWayland *device = data;
- ClutterStageCogl *stage_cogl = device->pointer_focus;
+ ClutterStageCogl *stage_cogl;
ClutterEvent *event;
ClutterEventType type;
+ ClutterModifierType modifier_mask = 0;
+
+ if (!device->pointer_focus)
+ return;
+
+ stage_cogl = device->pointer_focus;
if (state)
type = CLUTTER_BUTTON_PRESS;
@@ -100,25 +122,37 @@ clutter_wayland_handle_button (void *data,
event = clutter_event_new (type);
event->button.stage = stage_cogl->wrapper;
event->button.device = CLUTTER_INPUT_DEVICE (device);
- event->button.time = /*_time*/ serial;
+ event->button.time = _clutter_wayland_get_time ();
event->button.x = device->x;
event->button.y = device->y;
- event->button.modifier_state =
- xkb_state_serialize_mods (device->xkb, XKB_STATE_EFFECTIVE);
+ _clutter_xkb_translate_state (event, device->xkb, 0);
/* evdev button codes */
switch (button) {
case 272:
event->button.button = 1;
+ modifier_mask = CLUTTER_BUTTON1_MASK;
break;
case 273:
event->button.button = 3;
+ modifier_mask = CLUTTER_BUTTON2_MASK;
break;
case 274:
event->button.button = 2;
+ modifier_mask = CLUTTER_BUTTON3_MASK;
break;
}
+ if (modifier_mask)
+ {
+ if (state)
+ device->button_modifier_state |= modifier_mask;
+ else
+ device->button_modifier_state &= ~modifier_mask;
+ }
+
+ event->button.modifier_state = device->button_modifier_state;
+
_clutter_event_push (event, FALSE);
}
@@ -130,31 +164,39 @@ clutter_wayland_handle_axis (void *data,
wl_fixed_t value)
{
ClutterInputDeviceWayland *device = data;
- ClutterStageCogl *stage_cogl = device->pointer_focus;
+ ClutterStageCogl *stage_cogl;
ClutterEvent *event;
gdouble delta_x, delta_y;
+ gdouble delta_factor;
+ if (!device->pointer_focus)
+ return;
+
+ stage_cogl = device->pointer_focus;
event = clutter_event_new (CLUTTER_SCROLL);
- event->scroll.time = time;
+ event->scroll.time = _clutter_wayland_get_time ();
event->scroll.stage = stage_cogl->wrapper;
event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
event->scroll.x = device->x;
event->scroll.y = device->y;
+ /* Wayland pointer axis events are in pointer motion coordinate space.
+ * To convert to Xi2 discrete step coordinate space, multiply the factor
+ * 1/10. */
+ delta_factor = 1.0 / 10.0;
if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL)
{
- delta_x = -wl_fixed_to_double(value) * 23;
+ delta_x = wl_fixed_to_double (value) * delta_factor;
delta_y = 0;
}
else
{
delta_x = 0;
- delta_y = -wl_fixed_to_double(value) * 23; /* XXX: based on my bcm5794 */
+ delta_y = wl_fixed_to_double (value) * delta_factor;
}
clutter_event_set_scroll_delta (event, delta_x, delta_y);
- event->scroll.modifier_state =
- xkb_state_serialize_mods(device->xkb, XKB_STATE_EFFECTIVE);
+ _clutter_xkb_translate_state (event, device->xkb, 0);
_clutter_event_push (event, FALSE);
}
@@ -193,7 +235,7 @@ clutter_wayland_handle_keymap (void *data,
map_str = mmap (NULL, size, PROT_READ, MAP_SHARED, fd, 0);
if (map_str == MAP_FAILED)
{
- close(fd);
+ close (fd);
return;
}
@@ -211,7 +253,7 @@ clutter_wayland_handle_keymap (void *data,
return;
}
- device->xkb = xkb_state_new(keymap);
+ device->xkb = xkb_state_new (keymap);
xkb_map_unref (keymap);
if (!device->xkb)
{
@@ -232,8 +274,9 @@ clutter_wayland_repeat_key (void *data)
ClutterEvent *event;
event = _clutter_key_event_new_from_evdev ((ClutterInputDevice *) device,
+ (ClutterInputDevice*) device,
stage_cogl->wrapper,
- device->xkb,
+ device->xkb, 0,
device->repeat_time,
device->repeat_key,
1);
@@ -262,13 +305,17 @@ clutter_wayland_handle_key (void *data,
ClutterStageCogl *stage_cogl = device->keyboard_focus;
ClutterEvent *event;
+ if (!device->keyboard_focus)
+ return;
if (!device->xkb)
return;
event = _clutter_key_event_new_from_evdev ((ClutterInputDevice *) device,
+ (ClutterInputDevice *) device,
stage_cogl->wrapper,
- device->xkb,
- _time, key, state);
+ device->xkb, 0,
+ _clutter_wayland_get_time (),
+ key, state);
_clutter_event_push (event, FALSE);
@@ -324,12 +371,17 @@ clutter_wayland_handle_pointer_enter (void *data,
wl_fixed_t x, wl_fixed_t y)
{
ClutterInputDeviceWayland *device = data;
+ ClutterStageWayland *stage_wayland;
ClutterStageCogl *stage_cogl;
ClutterEvent *event;
ClutterBackend *backend;
ClutterBackendWayland *backend_wayland;
- stage_cogl = wl_surface_get_user_data (surface);
+ stage_wayland = wl_surface_get_user_data (surface);
+
+ if (!CLUTTER_IS_STAGE_COGL (stage_wayland))
+ return;
+ stage_cogl = CLUTTER_STAGE_COGL (stage_wayland);
device->pointer_focus = stage_cogl;
_clutter_input_device_set_stage (CLUTTER_INPUT_DEVICE (device),
@@ -337,9 +389,9 @@ clutter_wayland_handle_pointer_enter (void *data,
event = clutter_event_new (CLUTTER_ENTER);
event->crossing.stage = stage_cogl->wrapper;
- event->crossing.time = 0; /* ?! */
- event->crossing.x = wl_fixed_to_double(x);
- event->crossing.y = wl_fixed_to_double(y);
+ event->crossing.time = _clutter_wayland_get_time ();
+ event->crossing.x = wl_fixed_to_double (x);
+ event->crossing.y = wl_fixed_to_double (y);
event->crossing.source = CLUTTER_ACTOR (stage_cogl->wrapper);
event->crossing.device = CLUTTER_INPUT_DEVICE (device);
@@ -348,26 +400,35 @@ clutter_wayland_handle_pointer_enter (void *data,
_clutter_event_push (event, FALSE);
- /* Set the cursor to the cursor loaded at backend initialisation */
- backend = clutter_get_default_backend ();
- backend_wayland = CLUTTER_BACKEND_WAYLAND (backend);
+ if (stage_wayland->cursor_visible)
+ {
+ /* Set the cursor to the cursor loaded at backend initialisation */
+ backend = clutter_get_default_backend ();
+ backend_wayland = CLUTTER_BACKEND_WAYLAND (backend);
- wl_pointer_set_cursor (pointer,
- serial,
- backend_wayland->cursor_surface,
- backend_wayland->cursor_x,
- backend_wayland->cursor_y);
- wl_surface_attach (backend_wayland->cursor_surface,
- backend_wayland->cursor_buffer,
- 0,
- 0);
- wl_surface_damage (backend_wayland->cursor_surface,
- 0,
- 0,
- 32, /* XXX: FFS */
- 32);
+ _clutter_backend_wayland_ensure_cursor (backend_wayland);
- wl_surface_commit (backend_wayland->cursor_surface);
+ wl_pointer_set_cursor (pointer,
+ serial,
+ backend_wayland->cursor_surface,
+ backend_wayland->cursor_x,
+ backend_wayland->cursor_y);
+ wl_surface_attach (backend_wayland->cursor_surface,
+ backend_wayland->cursor_buffer,
+ 0,
+ 0);
+ wl_surface_damage (backend_wayland->cursor_surface,
+ 0,
+ 0,
+ 32, /* XXX: FFS */
+ 32);
+
+ wl_surface_commit (backend_wayland->cursor_surface);
+ }
+ else
+ {
+ wl_pointer_set_cursor (pointer, serial, NULL, 0, 0);
+ }
}
static void
@@ -380,12 +441,18 @@ clutter_wayland_handle_pointer_leave (void *data,
ClutterStageCogl *stage_cogl;
ClutterEvent *event;
+ if (surface == NULL)
+ return;
+
+ if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface)))
+ return;
+
stage_cogl = wl_surface_get_user_data (surface);
g_assert (device->pointer_focus == stage_cogl);
event = clutter_event_new (CLUTTER_LEAVE);
event->crossing.stage = stage_cogl->wrapper;
- event->crossing.time = 0; /* ?! */
+ event->crossing.time = _clutter_wayland_get_time ();
event->crossing.x = device->x;
event->crossing.y = device->y;
event->crossing.source = CLUTTER_ACTOR (stage_cogl->wrapper);
@@ -407,6 +474,9 @@ clutter_wayland_handle_keyboard_enter (void *data,
ClutterInputDeviceWayland *device = data;
ClutterStageCogl *stage_cogl;
+ if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface)))
+ return;
+
stage_cogl = wl_surface_get_user_data (surface);
g_assert (device->keyboard_focus == NULL);
device->keyboard_focus = stage_cogl;
@@ -425,6 +495,11 @@ clutter_wayland_handle_keyboard_leave (void *data,
ClutterInputDeviceWayland *device = data;
ClutterStageCogl *stage_cogl;
+ if (!surface)
+ return;
+ if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface)))
+ return;
+
stage_cogl = wl_surface_get_user_data (surface);
g_assert (device->keyboard_focus == stage_cogl);
@@ -525,8 +600,7 @@ clutter_input_device_wayland_init (ClutterInputDeviceWayland *self)
}
/**
- * clutter_wayland_input_device_get_wl_input_device: (skip)
- *
+ * clutter_wayland_input_device_get_wl_seat: (skip)
* @device: a #ClutterInputDevice
*
* Access the underlying data structure representing the Wayland device that is
diff --git a/clutter/wayland/clutter-input-device-wayland.h b/clutter/wayland/clutter-input-device-wayland.h
index 22de8b1cf..d242ac41c 100644
--- a/clutter/wayland/clutter-input-device-wayland.h
+++ b/clutter/wayland/clutter-input-device-wayland.h
@@ -53,6 +53,7 @@ struct _ClutterInputDeviceWayland
guint repeat_time;
guint repeat_source;
gboolean is_initial_repeat;
+ ClutterModifierType button_modifier_state;
};
GType _clutter_input_device_wayland_get_type (void) G_GNUC_CONST;
diff --git a/clutter/wayland/clutter-stage-wayland.c b/clutter/wayland/clutter-stage-wayland.c
index 2a3346b52..a9658bfca 100644
--- a/clutter/wayland/clutter-stage-wayland.c
+++ b/clutter/wayland/clutter-stage-wayland.c
@@ -113,15 +113,17 @@ clutter_stage_wayland_realize (ClutterStageWindow *stage_window)
wl_surface = cogl_wayland_onscreen_get_surface (stage_cogl->onscreen);
wl_surface_set_user_data (wl_surface, stage_wayland);
-
- wl_shell_surface =
- cogl_wayland_onscreen_get_shell_surface (stage_cogl->onscreen);
- wl_shell_surface_add_listener (wl_shell_surface,
- &shell_surface_listener,
- stage_wayland);
-
stage_wayland->wayland_surface = wl_surface;
- stage_wayland->wayland_shell_surface = wl_shell_surface;
+
+ if (!stage_wayland->foreign_wl_surface)
+ {
+ wl_shell_surface =
+ cogl_wayland_onscreen_get_shell_surface (stage_cogl->onscreen);
+ wl_shell_surface_add_listener (wl_shell_surface,
+ &shell_surface_listener,
+ stage_wayland);
+ stage_wayland->wayland_shell_surface = wl_shell_surface;
+ }
if (stage_wayland->fullscreen)
clutter_stage_wayland_set_fullscreen (stage_window, TRUE);
@@ -134,9 +136,15 @@ clutter_stage_wayland_show (ClutterStageWindow *stage_window,
gboolean do_raise)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+ ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
clutter_stage_window_parent_iface->show (stage_window, do_raise);
+ if (stage_wayland->wayland_shell_surface)
+ wl_shell_surface_set_toplevel (stage_wayland->wayland_shell_surface);
+
+ stage_wayland->shown = TRUE;
+
/* We need to queue a redraw after the stage is shown because all of
* the other queue redraws up to this point will have been ignored
* because the actor was not visible. The other backends do not need
@@ -145,6 +153,15 @@ clutter_stage_wayland_show (ClutterStageWindow *stage_window,
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage_cogl->wrapper));
}
+static void
+clutter_stage_wayland_set_cursor_visible (ClutterStageWindow *stage_window,
+ gboolean cursor_visible)
+{
+ ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
+
+ stage_wayland->cursor_visible = cursor_visible;
+}
+
static void
clutter_stage_wayland_set_fullscreen (ClutterStageWindow *stage_window,
gboolean fullscreen)
@@ -157,7 +174,7 @@ clutter_stage_wayland_set_fullscreen (ClutterStageWindow *stage_window,
stage_wayland->fullscreen = fullscreen;
- if (!stage_wayland->wayland_shell_surface) /* Not realized yet */
+ if (!stage_wayland->wayland_shell_surface)
return;
if (fullscreen)
@@ -199,18 +216,29 @@ clutter_stage_wayland_resize (ClutterStageWindow *stage_window,
gint height)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+ ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
/* Resize preserving top left */
if (stage_cogl->onscreen)
{
cogl_wayland_onscreen_resize (stage_cogl->onscreen, width, height, 0, 0);
- _clutter_stage_window_redraw (stage_window);
+
+ /* Only trigger a redraw if the stage window has been shown */
+ if (stage_wayland->shown)
+ _clutter_stage_window_redraw (stage_window);
}
}
+static gboolean
+clutter_stage_wayland_can_clip_redraws (ClutterStageWindow *stage_window)
+{
+ return TRUE;
+}
+
static void
clutter_stage_wayland_init (ClutterStageWayland *stage_wayland)
{
+ stage_wayland->cursor_visible = TRUE;
}
static void
@@ -221,7 +249,9 @@ clutter_stage_window_iface_init (ClutterStageWindowIface *iface)
iface->realize = clutter_stage_wayland_realize;
iface->show = clutter_stage_wayland_show;
iface->set_fullscreen = clutter_stage_wayland_set_fullscreen;
+ iface->set_cursor_visible = clutter_stage_wayland_set_cursor_visible;
iface->resize = clutter_stage_wayland_resize;
+ iface->can_clip_redraws = clutter_stage_wayland_can_clip_redraws;
}
static void
@@ -231,7 +261,6 @@ clutter_stage_wayland_class_init (ClutterStageWaylandClass *klass)
/**
* clutter_wayland_stage_get_wl_shell_surface: (skip)
- *
* @stage: a #ClutterStage
*
* Access the underlying data structure representing the shell surface that is
@@ -240,7 +269,7 @@ clutter_stage_wayland_class_init (ClutterStageWaylandClass *klass)
* Note: this function can only be called when running on the Wayland
* platform. Calling this function at any other time will return %NULL.
*
- * Returns: (transfer non): the Wayland shell surface associated with
+ * Returns: (transfer none): the Wayland shell surface associated with
* @stage
*
* Since: 1.10
@@ -261,7 +290,6 @@ clutter_wayland_stage_get_wl_shell_surface (ClutterStage *stage)
/**
* clutter_wayland_stage_get_wl_surface: (skip)
- *
* @stage: a #ClutterStage
*
* Access the underlying data structure representing the surface that is
@@ -271,6 +299,8 @@ clutter_wayland_stage_get_wl_shell_surface (ClutterStage *stage)
* platform. Calling this function at any other time will return %NULL.
*
* Returns: (transfer none): the Wayland surface associated with @stage
+ *
+ * Since: 1.10
*/
struct wl_surface *
clutter_wayland_stage_get_wl_surface (ClutterStage *stage)
@@ -286,3 +316,50 @@ clutter_wayland_stage_get_wl_surface (ClutterStage *stage)
return stage_wayland->wayland_surface;
}
+
+/**
+ * clutter_wayland_stage_set_wl_surface:
+ * @stage: a #ClutterStage
+ * @surface: A Wayland surface to associate with the @stage.
+ *
+ * Allows you to explicitly provide an existing Wayland surface to associate
+ * with @stage, preventing Cogl from allocating a surface and shell surface for
+ * the stage automatically.
+ *
+ * This function must be called before @stage is shown.
+ *
+ * Note: this function can only be called when running on the Wayland
+ * platform. Calling this function at any other time has no effect.
+ *
+ * Since: 1.16
+ */
+void
+clutter_wayland_stage_set_wl_surface (ClutterStage *stage,
+ struct wl_surface *surface)
+{
+ ClutterStageWindow *stage_window = _clutter_stage_get_window (stage);
+ ClutterStageWayland *stage_wayland;
+ ClutterStageCogl *stage_cogl;
+
+ if (!CLUTTER_IS_STAGE_WAYLAND (stage_window))
+ return;
+
+ stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+
+ if (stage_cogl->onscreen == NULL)
+ {
+ ClutterBackend *backend = clutter_get_default_backend ();
+
+ /* Use the same default dimensions as clutter_stage_cogl_realize() */
+ stage_cogl->onscreen = cogl_onscreen_new (backend->cogl_context,
+ 800, 600);
+
+ cogl_wayland_onscreen_set_foreign_surface (stage_cogl->onscreen,
+ surface);
+
+ stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
+ stage_wayland->foreign_wl_surface = TRUE;
+ }
+ else
+ g_warning (G_STRLOC ": cannot set foreign surface for stage");
+}
diff --git a/clutter/wayland/clutter-stage-wayland.h b/clutter/wayland/clutter-stage-wayland.h
index 3c7eb4209..46092c3c2 100644
--- a/clutter/wayland/clutter-stage-wayland.h
+++ b/clutter/wayland/clutter-stage-wayland.h
@@ -53,6 +53,9 @@ struct _ClutterStageWayland
struct wl_surface *wayland_surface;
struct wl_shell_surface *wayland_shell_surface;
gboolean fullscreen;
+ gboolean foreign_wl_surface;
+ gboolean shown;
+ gboolean cursor_visible;
};
struct _ClutterStageWaylandClass
diff --git a/clutter/wayland/clutter-wayland-compositor.h b/clutter/wayland/clutter-wayland-compositor.h
index a3e797113..703a7e2f5 100644
--- a/clutter/wayland/clutter-wayland-compositor.h
+++ b/clutter/wayland/clutter-wayland-compositor.h
@@ -37,8 +37,8 @@
G_BEGIN_DECLS
-void
-clutter_wayland_set_compositor_display (void *display);
+CLUTTER_AVAILABLE_IN_1_10
+void clutter_wayland_set_compositor_display (void *display);
G_END_DECLS
diff --git a/clutter/wayland/clutter-wayland-surface.c b/clutter/wayland/clutter-wayland-surface.c
index becd917cd..9ee40359a 100644
--- a/clutter/wayland/clutter-wayland-surface.c
+++ b/clutter/wayland/clutter-wayland-surface.c
@@ -78,9 +78,9 @@ struct _ClutterWaylandSurfacePrivate
CoglPipeline *pipeline;
};
-G_DEFINE_TYPE (ClutterWaylandSurface,
- clutter_wayland_surface,
- CLUTTER_TYPE_ACTOR);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterWaylandSurface,
+ clutter_wayland_surface,
+ CLUTTER_TYPE_ACTOR)
static gboolean
clutter_wayland_surface_get_paint_volume (ClutterActor *self,
@@ -156,11 +156,9 @@ opacity_change_cb (ClutterWaylandSurface *self)
static void
clutter_wayland_surface_init (ClutterWaylandSurface *self)
{
- ClutterWaylandSurfacePrivate *priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_WAYLAND_TYPE_SURFACE,
- ClutterWaylandSurfacePrivate);
-
+ ClutterWaylandSurfacePrivate *priv;
+
+ priv = clutter_wayland_surface_get_instance_private (self);
priv->surface = NULL;
priv->width = 0;
priv->height = 0;
@@ -405,8 +403,6 @@ clutter_wayland_surface_class_init (ClutterWaylandSurfaceClass *klass)
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterWaylandSurfacePrivate));
-
actor_class->get_paint_volume = clutter_wayland_surface_get_paint_volume;
actor_class->paint = clutter_wayland_surface_paint;
actor_class->get_preferred_width =
@@ -515,7 +511,7 @@ clutter_wayland_surface_new (struct wl_surface *surface)
/**
* clutter_wayland_surface_attach_buffer:
* @self: A #ClutterWaylandSurface actor
- * @buffer: A compositor side struct wl_buffer pointer
+ * @buffer: A compositor side resource representing a wl_buffer
* @error: A #GError
*
* This associates a client's buffer with the #ClutterWaylandSurface
@@ -527,7 +523,7 @@ clutter_wayland_surface_new (struct wl_surface *surface)
*/
gboolean
clutter_wayland_surface_attach_buffer (ClutterWaylandSurface *self,
- struct wl_buffer *buffer,
+ struct wl_resource *buffer,
GError **error)
{
ClutterWaylandSurfacePrivate *priv;
@@ -540,8 +536,6 @@ clutter_wayland_surface_attach_buffer (ClutterWaylandSurface *self,
free_surface_buffers (self);
- set_size (self, buffer->width, buffer->height);
-
priv->buffer =
cogl_wayland_texture_2d_new_from_buffer (context, buffer, error);
@@ -555,13 +549,17 @@ clutter_wayland_surface_attach_buffer (ClutterWaylandSurface *self,
if (!priv->buffer)
return FALSE;
+ set_size (self,
+ cogl_texture_get_width (COGL_TEXTURE (priv->buffer)),
+ cogl_texture_get_height (COGL_TEXTURE (priv->buffer)));
+
return TRUE;
}
/**
* clutter_wayland_surface_damage_buffer:
* @self: A #ClutterWaylandSurface actor
- * @buffer: A compositor side struct wl_buffer pointer
+ * @buffer: A wayland resource for a buffer
* @x: The x coordinate of the damaged rectangle
* @y: The y coordinate of the damaged rectangle
* @width: The width of the damaged rectangle
@@ -579,23 +577,26 @@ clutter_wayland_surface_attach_buffer (ClutterWaylandSurface *self,
*/
void
clutter_wayland_surface_damage_buffer (ClutterWaylandSurface *self,
- struct wl_buffer *buffer,
+ struct wl_resource *buffer,
gint32 x,
gint32 y,
gint32 width,
gint32 height)
{
ClutterWaylandSurfacePrivate *priv;
+ struct wl_shm_buffer *shm_buffer;
g_return_if_fail (CLUTTER_WAYLAND_IS_SURFACE (self));
priv = self->priv;
- if (priv->buffer && wl_buffer_is_shm (buffer))
+ shm_buffer = wl_shm_buffer_get (buffer);
+
+ if (priv->buffer && shm_buffer)
{
CoglPixelFormat format;
- switch (wl_shm_buffer_get_format (buffer))
+ switch (wl_shm_buffer_get_format (shm_buffer))
{
#if G_BYTE_ORDER == G_BIG_ENDIAN
case WL_SHM_FORMAT_ARGB8888:
@@ -623,8 +624,8 @@ clutter_wayland_surface_damage_buffer (ClutterWaylandSurface *self,
width, height,
width, height,
format,
- wl_shm_buffer_get_stride (buffer),
- wl_shm_buffer_get_data (buffer));
+ wl_shm_buffer_get_stride (shm_buffer),
+ wl_shm_buffer_get_data (shm_buffer));
}
g_signal_emit (self, signals[QUEUE_DAMAGE_REDRAW],
diff --git a/clutter/wayland/clutter-wayland-surface.h b/clutter/wayland/clutter-wayland-surface.h
index b68483ec7..f674af88a 100644
--- a/clutter/wayland/clutter-wayland-surface.h
+++ b/clutter/wayland/clutter-wayland-surface.h
@@ -88,21 +88,28 @@ struct _ClutterWaylandSurfaceClass
gpointer _padding_dummy[8];
};
+CLUTTER_AVAILABLE_IN_1_10
GType clutter_wayland_surface_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_1_8
ClutterActor *clutter_wayland_surface_new (struct wl_surface *surface);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_wayland_surface_set_surface (ClutterWaylandSurface *self,
struct wl_surface *surface);
+CLUTTER_AVAILABLE_IN_1_10
struct wl_surface *clutter_wayland_surface_get_surface (ClutterWaylandSurface *self);
+CLUTTER_AVAILABLE_IN_1_8
gboolean clutter_wayland_surface_attach_buffer (ClutterWaylandSurface *self,
- struct wl_buffer *buffer,
+ struct wl_resource *buffer,
GError **error);
+CLUTTER_AVAILABLE_IN_1_8
void clutter_wayland_surface_damage_buffer (ClutterWaylandSurface *self,
- struct wl_buffer *buffer,
+ struct wl_resource *buffer,
gint32 x,
gint32 y,
gint32 width,
gint32 height);
+CLUTTER_AVAILABLE_IN_1_10
CoglTexture *clutter_wayland_surface_get_cogl_texture (ClutterWaylandSurface *self);
G_END_DECLS
diff --git a/clutter/wayland/clutter-wayland.h b/clutter/wayland/clutter-wayland.h
index b9ffb1bc4..08f63a8dd 100644
--- a/clutter/wayland/clutter-wayland.h
+++ b/clutter/wayland/clutter-wayland.h
@@ -40,9 +40,23 @@
#include
G_BEGIN_DECLS
+CLUTTER_AVAILABLE_IN_1_10
struct wl_seat *clutter_wayland_input_device_get_wl_seat (ClutterInputDevice *device);
-struct wl_shell_surface *clutter_wayland_stage_get_wl_shell_surface (ClutterStage *stage);
-struct wl_surface *clutter_wayland_stage_get_wl_surface (ClutterStage *stage);
-G_END_DECLS
+CLUTTER_AVAILABLE_IN_1_10
+struct wl_shell_surface *clutter_wayland_stage_get_wl_shell_surface (ClutterStage *stage);
+
+CLUTTER_AVAILABLE_IN_1_10
+struct wl_surface *clutter_wayland_stage_get_wl_surface (ClutterStage *stage);
+
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_wayland_stage_set_wl_surface (ClutterStage *stage, struct wl_surface *surface);
+
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_wayland_set_display (struct wl_display *display);
+
+CLUTTER_AVAILABLE_IN_1_16
+void clutter_wayland_disable_event_retrieval (void);
+
+G_END_DECLS
#endif /* __CLUTTER_WAYLAND_H__ */
diff --git a/clutter/win32/clutter-backend-win32.c b/clutter/win32/clutter-backend-win32.c
index cb990797b..fc7c6042b 100644
--- a/clutter/win32/clutter-backend-win32.c
+++ b/clutter/win32/clutter-backend-win32.c
@@ -178,6 +178,24 @@ clutter_win32_disable_event_retrieval (void)
_no_event_retrieval = TRUE;
}
+static CoglRenderer *
+clutter_backend_win32_get_renderer (ClutterBackend *backend,
+ GError **error)
+{
+ CoglRenderer *renderer;
+
+ CLUTTER_NOTE (BACKEND, "Creating a new WGL renderer");
+
+ renderer = cogl_renderer_new ();
+ cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_WGL);
+
+ /* We don't want Cogl to install its default event handler because
+ * we'll handle them manually */
+ cogl_win32_renderer_set_event_retrieval_enabled (renderer, FALSE);
+
+ return renderer;
+}
+
static void
clutter_backend_win32_class_init (ClutterBackendWin32Class *klass)
{
@@ -192,6 +210,7 @@ clutter_backend_win32_class_init (ClutterBackendWin32Class *klass)
backend_class->init_events = clutter_backend_win32_init_events;
backend_class->get_features = clutter_backend_win32_get_features;
+ backend_class->get_renderer = clutter_backend_win32_get_renderer;
}
static void
diff --git a/clutter/win32/clutter-event-win32.c b/clutter/win32/clutter-event-win32.c
index 504011114..7a360c625 100644
--- a/clutter/win32/clutter-event-win32.c
+++ b/clutter/win32/clutter-event-win32.c
@@ -294,8 +294,8 @@ clutter_event_dispatch (GSource *source,
if ((event = clutter_event_get ()))
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ if (event->any.stage)
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
}
_clutter_threads_release_lock ();
diff --git a/clutter/win32/clutter-stage-win32.c b/clutter/win32/clutter-stage-win32.c
index bcc39a7d3..cdc1fc69b 100644
--- a/clutter/win32/clutter-stage-win32.c
+++ b/clutter/win32/clutter-stage-win32.c
@@ -138,11 +138,26 @@ get_full_window_size (ClutterStageWin32 *stage_win32,
= clutter_stage_get_user_resizable (stage_win32->wrapper);
/* The window size passed to CreateWindow includes the window
decorations */
- *width_out = width_in + GetSystemMetrics (resizable ? SM_CXSIZEFRAME
- : SM_CXFIXEDFRAME) * 2;
- *height_out = height_in + GetSystemMetrics (resizable ? SM_CYSIZEFRAME
- : SM_CYFIXEDFRAME) * 2
- + GetSystemMetrics (SM_CYCAPTION);
+ gint frame_width, frame_height;
+
+#if !defined (_MSC_VER) || (_MSC_VER < 1700)
+ frame_width = GetSystemMetrics (resizable ? SM_CXSIZEFRAME : SM_CXFIXEDFRAME);
+ frame_height = GetSystemMetrics (resizable ? SM_CYSIZEFRAME : SM_CYFIXEDFRAME);
+#else
+ /* MSVC 2012 and later returns wrong values from GetSystemMetrics()
+ * http://connect.microsoft.com/VisualStudio/feedback/details/753224/regression-getsystemmetrics-delivers-different-values
+ *
+ * For AdjustWindowRectEx(), it doesn't matter much whether the Window is resizble.
+ */
+
+ RECT cxrect = {0, 0, 0, 0};
+ AdjustWindowRectEx (&cxrect, WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_THICKFRAME | WS_DLGFRAME, FALSE, 0);
+
+ frame_width = abs (cxrect.bottom);
+ frame_height = abs (cxrect.left);
+#endif
+ *width_out = width_in + frame_width * 2;
+ *height_out = height_in + frame_height * 2 + GetSystemMetrics (SM_CYCAPTION);
}
void
diff --git a/clutter/win32/clutter-win32.h b/clutter/win32/clutter-win32.h
index c6fd863dc..5112c3928 100644
--- a/clutter/win32/clutter-win32.h
+++ b/clutter/win32/clutter-win32.h
@@ -43,14 +43,19 @@
G_BEGIN_DECLS
+CLUTTER_AVAILABLE_IN_ALL
HWND clutter_win32_get_stage_window (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
ClutterStage *clutter_win32_get_stage_from_window (HWND hwnd);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_win32_set_stage_foreign (ClutterStage *stage,
HWND hwnd);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_win32_disable_event_retrieval (void);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_win32_handle_event (const MSG *msg);
G_END_DECLS
diff --git a/clutter/x11/clutter-backend-x11.c b/clutter/x11/clutter-backend-x11.c
index b7cfcc477..d52296677 100644
--- a/clutter/x11/clutter-backend-x11.c
+++ b/clutter/x11/clutter-backend-x11.c
@@ -50,10 +50,6 @@
#include
#endif
-#if HAVE_XINPUT
-#include
-#endif
-
#if HAVE_XINPUT_2
#include
#endif
@@ -67,6 +63,7 @@
#include "clutter-event-private.h"
#include "clutter-main.h"
#include "clutter-private.h"
+#include "clutter-settings-private.h"
#define clutter_backend_x11_get_type _clutter_backend_x11_get_type
@@ -128,10 +125,11 @@ cogl_xlib_filter (XEvent *xevent,
ClutterEvent *event,
gpointer data)
{
+ ClutterBackend *backend = data;
ClutterX11FilterReturn retval;
CoglFilterReturn ret;
- ret = cogl_xlib_handle_event (xevent);
+ ret = cogl_xlib_renderer_handle_event (backend->cogl_renderer, xevent);
switch (ret)
{
case COGL_FILTER_REMOVE:
@@ -168,7 +166,7 @@ clutter_backend_x11_xsettings_notify (const char *name,
{
if (g_strcmp0 (name, CLUTTER_SETTING_X11_NAME (i)) == 0)
{
- GValue value = { 0, };
+ GValue value = G_VALUE_INIT;
switch (setting->type)
{
@@ -206,9 +204,9 @@ clutter_backend_x11_xsettings_notify (const char *name,
CLUTTER_SETTING_X11_NAME (i),
CLUTTER_SETTING_PROPERTY (i));
- g_object_set_property (G_OBJECT (settings),
- CLUTTER_SETTING_PROPERTY (i),
- &value);
+ clutter_settings_set_property_internal (settings,
+ CLUTTER_SETTING_PROPERTY (i),
+ &value);
g_value_unset (&value);
@@ -222,71 +220,55 @@ clutter_backend_x11_xsettings_notify (const char *name,
static void
clutter_backend_x11_create_device_manager (ClutterBackendX11 *backend_x11)
{
- if (G_UNLIKELY (backend_x11->device_manager == NULL))
- {
- ClutterEventTranslator *translator;
- ClutterBackend *backend;
+ ClutterEventTranslator *translator;
+ ClutterBackend *backend;
-#if defined(HAVE_XINPUT) || defined(HAVE_XINPUT_2)
- if (clutter_enable_xinput)
- {
- int event_base, first_event, first_error;
-
- if (XQueryExtension (backend_x11->xdpy, "XInputExtension",
- &event_base,
- &first_event,
- &first_error))
- {
#ifdef HAVE_XINPUT_2
- int major = 2;
- int minor = 3;
+ if (clutter_enable_xinput)
+ {
+ int event_base, first_event, first_error;
- if (XIQueryVersion (backend_x11->xdpy, &major, &minor) != BadRequest)
- {
- CLUTTER_NOTE (BACKEND, "Creating XI2 device manager");
- backend_x11->has_xinput = TRUE;
- backend_x11->device_manager =
- g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_XI2,
- "backend", backend_x11,
- "opcode", event_base,
- NULL);
+ if (XQueryExtension (backend_x11->xdpy, "XInputExtension",
+ &event_base,
+ &first_event,
+ &first_error))
+ {
+ int major = 2;
+ int minor = 3;
- backend_x11->xi_minor = minor;
- }
- else
-#endif /* HAVE_XINPUT_2 */
- {
- CLUTTER_NOTE (BACKEND, "Creating Core+XI device manager");
- backend_x11->has_xinput = TRUE;
- backend_x11->device_manager =
- g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_X11,
- "backend", backend_x11,
- "event-base", first_event,
- NULL);
+ if (XIQueryVersion (backend_x11->xdpy, &major, &minor) != BadRequest)
+ {
+ CLUTTER_NOTE (BACKEND, "Creating XI2 device manager");
+ backend_x11->has_xinput = TRUE;
+ backend_x11->device_manager =
+ g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_XI2,
+ "backend", backend_x11,
+ "opcode", event_base,
+ NULL);
- backend_x11->xi_minor = -1;
- }
+ backend_x11->xi_minor = minor;
}
}
- else
-#endif /* HAVE_XINPUT || HAVE_XINPUT_2 */
- {
- CLUTTER_NOTE (BACKEND, "Creating Core device manager");
- backend_x11->has_xinput = FALSE;
- backend_x11->device_manager =
- g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_X11,
- "backend", backend_x11,
- NULL);
-
- backend_x11->xi_minor = -1;
- }
-
- backend = CLUTTER_BACKEND (backend_x11);
- backend->device_manager = backend_x11->device_manager;
-
- translator = CLUTTER_EVENT_TRANSLATOR (backend_x11->device_manager);
- _clutter_backend_add_event_translator (backend, translator);
}
+
+ if (backend_x11->device_manager == NULL)
+#endif /* HAVE_XINPUT_2 */
+ {
+ CLUTTER_NOTE (BACKEND, "Creating Core device manager");
+ backend_x11->has_xinput = FALSE;
+ backend_x11->device_manager =
+ g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_X11,
+ "backend", backend_x11,
+ NULL);
+
+ backend_x11->xi_minor = -1;
+ }
+
+ backend = CLUTTER_BACKEND (backend_x11);
+ backend->device_manager = backend_x11->device_manager;
+
+ translator = CLUTTER_EVENT_TRANSLATOR (backend_x11->device_manager);
+ _clutter_backend_add_event_translator (backend, translator);
}
static void
@@ -391,7 +373,7 @@ clutter_backend_x11_post_parse (ClutterBackend *backend,
settings = clutter_settings_get_default ();
/* add event filter for Cogl events */
- clutter_x11_add_filter (cogl_xlib_filter, NULL);
+ clutter_x11_add_filter (cogl_xlib_filter, backend);
if (clutter_screen == -1)
backend_x11->xscreen = DefaultScreenOfDisplay (backend_x11->xdpy);
@@ -517,14 +499,14 @@ static const GOptionEntry entries[] =
G_OPTION_ARG_NONE, &clutter_synchronise,
N_("Make X calls synchronous"), NULL
},
-#if defined(HAVE_XINPUT) || defined(HAVE_XINPUT_2)
+#ifdef HAVE_XINPUT_2
{
"disable-xinput", 0,
G_OPTION_FLAG_REVERSE,
G_OPTION_ARG_NONE, &clutter_enable_xinput,
N_("Disable XInput support"), NULL
},
-#endif /* HAVE_XINPUT */
+#endif /* HAVE_XINPUT_2 */
{ NULL }
};
@@ -542,7 +524,7 @@ clutter_backend_x11_finalize (GObject *gobject)
g_free (backend_x11->display_name);
- clutter_x11_remove_filter (cogl_xlib_filter, NULL);
+ clutter_x11_remove_filter (cogl_xlib_filter, gobject);
clutter_x11_remove_filter (xsettings_filter, backend_x11);
_clutter_xsettings_client_destroy (backend_x11->xsettings);
@@ -785,7 +767,7 @@ clutter_backend_x11_create_stage (ClutterBackend *backend,
translator = CLUTTER_EVENT_TRANSLATOR (stage);
_clutter_backend_add_event_translator (backend, translator);
- CLUTTER_NOTE (MISC, "X11 stage created (display:%p, screen:%d, root:%u)",
+ CLUTTER_NOTE (BACKEND, "X11 stage created (display:%p, screen:%d, root:%u)",
CLUTTER_BACKEND_X11 (backend)->xdpy,
CLUTTER_BACKEND_X11 (backend)->xscreen_num,
(unsigned int) CLUTTER_BACKEND_X11 (backend)->xwin_root);
@@ -793,6 +775,17 @@ clutter_backend_x11_create_stage (ClutterBackend *backend,
return stage;
}
+static PangoDirection
+clutter_backend_x11_get_keymap_direction (ClutterBackend *backend)
+{
+ ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (backend);
+
+ if (G_UNLIKELY (backend_x11->keymap == NULL))
+ return PANGO_DIRECTION_NEUTRAL;
+
+ return _clutter_keymap_x11_get_direction (backend_x11->keymap);
+}
+
static void
clutter_backend_x11_class_init (ClutterBackendX11Class *klass)
{
@@ -816,6 +809,8 @@ clutter_backend_x11_class_init (ClutterBackendX11Class *klass)
backend_class->get_renderer = clutter_backend_x11_get_renderer;
backend_class->get_display = clutter_backend_x11_get_display;
backend_class->create_stage = clutter_backend_x11_create_stage;
+
+ backend_class->get_keymap_direction = clutter_backend_x11_get_keymap_direction;
}
static void
@@ -955,15 +950,14 @@ clutter_x11_enable_xinput (void)
* You also must call clutter_x11_handle_event() to let Clutter process
* events and maintain its internal state.
*
- * This function can only be called before calling
- * clutter_init().
+ * This function can only be called before calling clutter_init().
*
- * Even with event handling disabled, Clutter will still select
+ * Even with event handling disabled, Clutter will still select
* all the events required to maintain its internal state on the stage
* Window; compositors using Clutter and input regions to pass events
* through to application windows should not rely on an empty input
* region, and should instead clear it themselves explicitly using the
- * XFixes extension.
+ * XFixes extension.
*
* This function should not be normally used by applications.
*
@@ -1191,7 +1185,7 @@ clutter_x11_get_input_devices (void)
gboolean
clutter_x11_has_xinput (void)
{
-#if defined(HAVE_XINPUT) || defined(HAVE_XINPUT_2)
+#ifdef HAVE_XINPUT_2
ClutterBackend *backend = clutter_get_default_backend ();
if (backend == NULL)
@@ -1268,13 +1262,13 @@ clutter_x11_has_composite_extension (void)
*
* By default, Clutter requests RGB visuals.
*
- * If no ARGB visuals are found, the X11 backend will fall back to
- * requesting a RGB visual instead.
+ * If no ARGB visuals are found, the X11 backend will fall back to
+ * requesting a RGB visual instead.
*
* ARGB visuals are required for the #ClutterStage:use-alpha property to work.
*
- * This function can only be called once, and before clutter_init() is
- * called.
+ * This function can only be called once, and before clutter_init() is
+ * called.
*
* Since: 1.2
*/
@@ -1363,11 +1357,8 @@ _clutter_x11_input_device_translate_screen_coord (ClutterInputDevice *device,
return FALSE;
info = &g_array_index (device->axes, ClutterAxisInfo, index_);
- if (info->axis != CLUTTER_INPUT_AXIS_X ||
- info->axis != CLUTTER_INPUT_AXIS_Y)
- {
- return FALSE;
- }
+ if (!(info->axis == CLUTTER_INPUT_AXIS_X || info->axis == CLUTTER_INPUT_AXIS_Y))
+ return FALSE;
width = info->max_value - info->min_value;
diff --git a/clutter/x11/clutter-device-manager-core-x11.c b/clutter/x11/clutter-device-manager-core-x11.c
index f4701893b..f47e3b888 100644
--- a/clutter/x11/clutter-device-manager-core-x11.c
+++ b/clutter/x11/clutter-device-manager-core-x11.c
@@ -37,17 +37,6 @@
#include "clutter-stage-private.h"
#include "clutter-private.h"
-#ifdef HAVE_XINPUT
-#include
-
-/* old versions of XI.h don't define these */
-#ifndef IsXExtensionKeyboard
-#define IsXExtensionKeyboard 3
-#define IsXExtensionPointer 4
-#endif
-
-#endif /* HAVE_XINPUT */
-
enum
{
PROP_0,
@@ -69,146 +58,6 @@ G_DEFINE_TYPE_WITH_CODE (ClutterDeviceManagerX11,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_EVENT_TRANSLATOR,
clutter_event_translator_iface_init));
-#ifdef HAVE_XINPUT
-static void
-translate_class_info (ClutterInputDevice *device,
- XDeviceInfo *info)
-{
- XAnyClassPtr any_class;
- gint i;
-
- any_class = info->inputclassinfo;
-
- for (i = 0; i < info->num_classes; i++)
- {
- switch (any_class->class)
- {
- case ButtonClass:
- break;
-
- case KeyClass:
- {
- XKeyInfo *xk_info = (XKeyInfo *) any_class;
- ClutterInputDeviceX11 *device_x11;
- guint n_keys;
-
- device_x11 = CLUTTER_INPUT_DEVICE_X11 (device);
-
- n_keys = xk_info->max_keycode - xk_info->min_keycode + 1;
-
- _clutter_input_device_set_n_keys (device, n_keys);
- _clutter_input_device_x11_set_keycodes (device_x11,
- xk_info->min_keycode,
- xk_info->max_keycode);
- }
- break;
-
- case ValuatorClass:
- {
- XValuatorInfo *xv_info = (XValuatorInfo *) any_class;
- gint j;
-
- for (j = 0; j < xv_info->num_axes; j++)
- {
- ClutterInputAxis axis;
-
- switch (j)
- {
- case 0:
- axis = CLUTTER_INPUT_AXIS_X;
- break;
-
- case 1:
- axis = CLUTTER_INPUT_AXIS_Y;
- break;
-
- case 2:
- axis = CLUTTER_INPUT_AXIS_PRESSURE;
- break;
-
- case 3:
- axis = CLUTTER_INPUT_AXIS_XTILT;
- break;
-
- case 4:
- axis = CLUTTER_INPUT_AXIS_YTILT;
- break;
-
- case 5:
- axis = CLUTTER_INPUT_AXIS_WHEEL;
- break;
-
- default:
- axis = CLUTTER_INPUT_AXIS_IGNORE;
- break;
- }
-
- _clutter_input_device_add_axis (device, axis,
- xv_info->axes[j].min_value,
- xv_info->axes[j].max_value,
- xv_info->axes[j].resolution);
- }
- }
- break;
- }
-
- any_class = (XAnyClassPtr) (((char *) any_class) + any_class->length);
- }
-}
-
-static ClutterInputDevice *
-create_device (ClutterDeviceManagerX11 *manager_x11,
- ClutterBackendX11 *backend_x11,
- XDeviceInfo *info)
-{
- ClutterInputDeviceType source;
- ClutterInputDevice *retval;
-
- if (info->use != IsXExtensionPointer &&
- info->use != IsXExtensionKeyboard)
- return NULL;
-
- if (info->use == IsXExtensionKeyboard)
- source = CLUTTER_KEYBOARD_DEVICE;
- else
- {
- gchar *name;
-
- name = g_ascii_strdown (info->name, -1);
-
- if (strstr (name, "eraser") != NULL)
- source = CLUTTER_ERASER_DEVICE;
- else if (strstr (name, "cursor") != NULL)
- source = CLUTTER_CURSOR_DEVICE;
- else if (strstr (name, "wacom") != NULL || strstr (name, "pen") != NULL)
- source = CLUTTER_PEN_DEVICE;
- else
- source = CLUTTER_POINTER_DEVICE;
-
- g_free (name);
- }
-
- retval = g_object_new (CLUTTER_TYPE_INPUT_DEVICE_X11,
- "name", info->name,
- "id", info->id,
- "has-cursor", FALSE,
- "device-manager", manager_x11,
- "device-type", source,
- "device-mode", CLUTTER_INPUT_MODE_FLOATING,
- "backend", backend_x11,
- "enabled", FALSE,
- NULL);
- translate_class_info (retval, info);
-
- CLUTTER_NOTE (BACKEND,
- "XI Device '%s' (id: %d) created",
- info->name,
- (int) info->id);
-
- return retval;
-}
-#endif /* HAVE_XINPUT */
-
static inline void
translate_key_event (ClutterBackendX11 *backend_x11,
ClutterDeviceManagerX11 *manager_x11,
@@ -275,20 +124,6 @@ out:
return;
}
-#ifdef HAVE_XINPUT
-static ClutterInputDevice *
-get_device_from_event (ClutterDeviceManagerX11 *manager_x11,
- XEvent *xevent)
-{
- guint32 device_id;
-
- device_id = ((XDeviceButtonEvent *) xevent)->deviceid;
-
- return g_hash_table_lookup (manager_x11->devices_by_id,
- GINT_TO_POINTER (device_id));
-}
-#endif /* HAVE_XINPUT */
-
static ClutterTranslateReturn
clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
gpointer native,
@@ -300,9 +135,7 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
ClutterTranslateReturn res;
ClutterStage *stage;
XEvent *xevent;
-#ifdef HAVE_XINPUT
- ClutterInputDevice *device;
-#endif
+ int window_scale;
manager_x11 = CLUTTER_DEVICE_MANAGER_X11 (translator);
backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ());
@@ -318,27 +151,12 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
stage_x11 = CLUTTER_STAGE_X11 (_clutter_stage_get_window (stage));
+ window_scale = stage_x11->scale_factor;
+
event->any.stage = stage;
res = CLUTTER_TRANSLATE_CONTINUE;
-#ifdef HAVE_XINPUT
- device = get_device_from_event (manager_x11, xevent);
- if (device != NULL)
- {
- ClutterInputDeviceX11 *device_x11;
- gboolean retval;
-
- device_x11 = CLUTTER_INPUT_DEVICE_X11 (device);
- retval = _clutter_input_device_x11_translate_xi_event (device_x11,
- stage_x11,
- xevent,
- event);
- if (retval)
- return CLUTTER_TRANSLATE_QUEUE;
- }
-#endif /* HAVE_XINPUT */
-
switch (xevent->type)
{
case KeyPress:
@@ -407,8 +225,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
event->scroll.direction = CLUTTER_SCROLL_RIGHT;
event->scroll.time = xevent->xbutton.time;
- event->scroll.x = xevent->xbutton.x;
- event->scroll.y = xevent->xbutton.y;
+ event->scroll.x = xevent->xbutton.x / window_scale;
+ event->scroll.y = xevent->xbutton.y / window_scale;
event->scroll.modifier_state = xevent->xbutton.state;
event->scroll.axes = NULL;
break;
@@ -416,8 +234,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
default:
event->button.type = event->type = CLUTTER_BUTTON_PRESS;
event->button.time = xevent->xbutton.time;
- event->button.x = xevent->xbutton.x;
- event->button.y = xevent->xbutton.y;
+ event->button.x = xevent->xbutton.x / window_scale;
+ event->button.y = xevent->xbutton.y / window_scale;
event->button.modifier_state = xevent->xbutton.state;
event->button.button = xevent->xbutton.button;
event->button.axes = NULL;
@@ -450,8 +268,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
event->button.type = event->type = CLUTTER_BUTTON_RELEASE;
event->button.time = xevent->xbutton.time;
- event->button.x = xevent->xbutton.x;
- event->button.y = xevent->xbutton.y;
+ event->button.x = xevent->xbutton.x / window_scale;
+ event->button.y = xevent->xbutton.y / window_scale;
event->button.modifier_state = xevent->xbutton.state;
event->button.button = xevent->xbutton.button;
event->button.axes = NULL;
@@ -468,8 +286,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
event->motion.type = event->type = CLUTTER_MOTION;
event->motion.time = xevent->xmotion.time;
- event->motion.x = xevent->xmotion.x;
- event->motion.y = xevent->xmotion.y;
+ event->motion.x = xevent->xmotion.x / window_scale;
+ event->motion.y = xevent->xmotion.y / window_scale;
event->motion.modifier_state = xevent->xmotion.state;
event->motion.axes = NULL;
clutter_event_set_device (event, manager_x11->core_pointer);
@@ -482,8 +300,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
event->crossing.type = CLUTTER_ENTER;
event->crossing.time = xevent->xcrossing.time;
- event->crossing.x = xevent->xcrossing.x;
- event->crossing.y = xevent->xcrossing.y;
+ event->crossing.x = xevent->xcrossing.x / window_scale;
+ event->crossing.y = xevent->xcrossing.y / window_scale;
event->crossing.source = CLUTTER_ACTOR (stage);
event->crossing.related = NULL;
clutter_event_set_device (event, manager_x11->core_pointer);
@@ -508,8 +326,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
event->crossing.type = CLUTTER_LEAVE;
event->crossing.time = xevent->xcrossing.time;
- event->crossing.x = xevent->xcrossing.x;
- event->crossing.y = xevent->xcrossing.y;
+ event->crossing.x = xevent->xcrossing.x / window_scale;
+ event->crossing.y = xevent->xcrossing.y / window_scale;
event->crossing.source = CLUTTER_ACTOR (stage);
event->crossing.related = NULL;
clutter_event_set_device (event, manager_x11->core_pointer);
@@ -537,57 +355,12 @@ clutter_device_manager_x11_constructed (GObject *gobject)
{
ClutterDeviceManagerX11 *manager_x11;
ClutterBackendX11 *backend_x11;
-#ifdef HAVE_XINPUT
- ClutterDeviceManager *manager;
- XDeviceInfo *x_devices = NULL;
- int i, n_devices;
-#endif /* HAVE_XINPUT */
manager_x11 = CLUTTER_DEVICE_MANAGER_X11 (gobject);
g_object_get (gobject, "backend", &backend_x11, NULL);
g_assert (backend_x11 != NULL);
-#ifdef HAVE_XINPUT
- manager = CLUTTER_DEVICE_MANAGER (gobject);
- x_devices = XListInputDevices (backend_x11->xdpy, &n_devices);
- if (n_devices == 0)
- {
- CLUTTER_NOTE (BACKEND, "No XInput devices found");
- goto default_device;
- }
-
- for (i = 0; i < n_devices; i++)
- {
- XDeviceInfo *info = x_devices + i;
- ClutterInputDevice *device;
-
- CLUTTER_NOTE (BACKEND,
- "Considering device %li with type %d, %d of %d",
- info->id,
- info->use,
- i, n_devices);
-
- device = create_device (manager_x11, backend_x11, info);
- if (device != NULL)
- _clutter_device_manager_add_device (manager, device);
- }
-
- XFreeDeviceList (x_devices);
-
-default_device:
-#endif /* HAVE_XINPUT */
-
- /* fallback code in case:
- *
- * - we do not have XInput support compiled in
- * - we do not have the XInput extension
- *
- * we register two default devices, one for the pointer
- * and one for the keyboard. this block must also be
- * executed for the XInput support because XI does not
- * cover core devices
- */
manager_x11->core_pointer =
g_object_new (CLUTTER_TYPE_INPUT_DEVICE_X11,
"name", "Core Pointer",
diff --git a/clutter/x11/clutter-device-manager-xi2.c b/clutter/x11/clutter-device-manager-xi2.c
index 6a06cec0d..223e87515 100644
--- a/clutter/x11/clutter-device-manager-xi2.c
+++ b/clutter/x11/clutter-device-manager-xi2.c
@@ -254,6 +254,8 @@ create_device (ClutterDeviceManagerXI2 *manager_xi2,
source = CLUTTER_CURSOR_DEVICE;
else if (strstr (name, "wacom") != NULL || strstr (name, "pen") != NULL)
source = CLUTTER_PEN_DEVICE;
+ else if (strstr (name, "touchpad") != NULL)
+ source = CLUTTER_TOUCHPAD_DEVICE;
else
source = CLUTTER_POINTER_DEVICE;
@@ -319,7 +321,7 @@ add_device (ClutterDeviceManagerXI2 *manager_xi2,
*/
g_hash_table_replace (manager_xi2->devices_by_id,
GINT_TO_POINTER (info->deviceid),
- g_object_ref (device));
+ device);
if (info->use == XIMasterPointer ||
info->use == XIMasterKeyboard)
@@ -401,17 +403,25 @@ translate_hierarchy_event (ClutterBackendX11 *backend_x11,
for (i = 0; i < ev->num_info; i++)
{
- if (ev->info[i].flags & XIDeviceEnabled)
+ if (ev->info[i].flags & XIDeviceEnabled &&
+ !g_hash_table_lookup (manager_xi2->devices_by_id,
+ GINT_TO_POINTER (ev->info[i].deviceid)))
{
XIDeviceInfo *info;
int n_devices;
CLUTTER_NOTE (EVENT, "Hierarchy event: device enabled");
+ clutter_x11_trap_x_errors ();
info = XIQueryDevice (backend_x11->xdpy,
ev->info[i].deviceid,
&n_devices);
- add_device (manager_xi2, backend_x11, &info[0], FALSE);
+ clutter_x11_untrap_x_errors ();
+ if (info != NULL)
+ {
+ add_device (manager_xi2, backend_x11, &info[0], FALSE);
+ XIFreeDeviceInfo (info);
+ }
}
else if (ev->info[i].flags & XIDeviceDisabled)
{
@@ -448,16 +458,24 @@ translate_hierarchy_event (ClutterBackendX11 *backend_x11,
/* and attach the slave to the new master if needed */
if (ev->info[i].flags & XISlaveAttached)
{
+ clutter_x11_trap_x_errors ();
info = XIQueryDevice (backend_x11->xdpy,
ev->info[i].deviceid,
&n_devices);
- master = g_hash_table_lookup (manager_xi2->devices_by_id,
- GINT_TO_POINTER (info->attachment));
- _clutter_input_device_set_associated_device (slave, master);
- _clutter_input_device_add_slave (master, slave);
+ clutter_x11_untrap_x_errors ();
+ if (info != NULL)
+ {
+ master = g_hash_table_lookup (manager_xi2->devices_by_id,
+ GINT_TO_POINTER (info->attachment));
+ if (master != NULL)
+ {
+ _clutter_input_device_set_associated_device (slave, master);
+ _clutter_input_device_add_slave (master, slave);
- send_changed = TRUE;
- XIFreeDeviceInfo (info);
+ send_changed = TRUE;
+ }
+ XIFreeDeviceInfo (info);
+ }
}
if (send_changed)
@@ -588,7 +606,6 @@ static gdouble *
translate_axes (ClutterInputDevice *device,
gdouble x,
gdouble y,
- ClutterStageX11 *stage_x11,
XIValuatorState *valuators)
{
guint n_axes = clutter_input_device_get_n_axes (device);
@@ -629,6 +646,24 @@ translate_axes (ClutterInputDevice *device,
return retval;
}
+static void
+translate_coords (ClutterStageX11 *stage_x11,
+ gdouble event_x,
+ gdouble event_y,
+ gfloat *x_out,
+ gfloat *y_out)
+{
+ ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_x11);
+ ClutterActor *stage = CLUTTER_ACTOR (stage_cogl->wrapper);
+ gfloat stage_width;
+ gfloat stage_height;
+
+ clutter_actor_get_size (stage, &stage_width, &stage_height);
+
+ *x_out = CLAMP (event_x, 0, stage_width) / stage_x11->scale_factor;
+ *y_out = CLAMP (event_y, 0, stage_height) / stage_x11->scale_factor;
+}
+
static gdouble
scroll_valuators_changed (ClutterInputDevice *device,
XIValuatorState *valuators,
@@ -674,6 +709,49 @@ scroll_valuators_changed (ClutterInputDevice *device,
return retval;
}
+static void
+clutter_device_manager_xi2_select_stage_events (ClutterDeviceManager *manager,
+ ClutterStage *stage)
+{
+ ClutterBackendX11 *backend_x11;
+ ClutterStageX11 *stage_x11;
+ XIEventMask xi_event_mask;
+ unsigned char *mask;
+ int len;
+
+ backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ());
+ stage_x11 = CLUTTER_STAGE_X11 (_clutter_stage_get_window (stage));
+
+ len = XIMaskLen (XI_LASTEVENT);
+ mask = g_new0 (unsigned char, len);
+
+ XISetMask (mask, XI_Motion);
+ XISetMask (mask, XI_ButtonPress);
+ XISetMask (mask, XI_ButtonRelease);
+ XISetMask (mask, XI_KeyPress);
+ XISetMask (mask, XI_KeyRelease);
+ XISetMask (mask, XI_Enter);
+ XISetMask (mask, XI_Leave);
+
+#ifdef HAVE_XINPUT_2_2
+ /* enable touch event support if we're running on XInput 2.2 */
+ if (backend_x11->xi_minor >= 2)
+ {
+ XISetMask (mask, XI_TouchBegin);
+ XISetMask (mask, XI_TouchUpdate);
+ XISetMask (mask, XI_TouchEnd);
+ }
+#endif /* HAVE_XINPUT_2_2 */
+
+ xi_event_mask.deviceid = XIAllMasterDevices;
+ xi_event_mask.mask = mask;
+ xi_event_mask.mask_len = len;
+
+ XISelectEvents (backend_x11->xdpy, stage_x11->xwin, &xi_event_mask, 1);
+
+ g_free (mask);
+}
+
static ClutterTranslateReturn
clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
gpointer native,
@@ -764,8 +842,7 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->key.time = xev->time;
event->key.stage = stage;
- event->key.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods, &xev->buttons, &xev->group);
+ _clutter_input_device_xi2_translate_state (event, &xev->mods, &xev->buttons, &xev->group);
event->key.hardware_keycode = xev->detail;
/* keyval is the key ignoring all modifiers ('1' vs. '!') */
@@ -871,12 +948,11 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->scroll.stage = stage;
event->scroll.time = xev->time;
- event->scroll.x = xev->event_x;
- event->scroll.y = xev->event_y;
- event->scroll.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods,
- &xev->buttons,
- &xev->group);
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->scroll.x, &event->scroll.y);
+ _clutter_input_device_xi2_translate_state (event,
+ &xev->mods,
+ &xev->buttons,
+ &xev->group);
clutter_event_set_source_device (event, source_device);
clutter_event_set_device (event, device);
@@ -884,7 +960,6 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->scroll.axes = translate_axes (event->scroll.device,
event->scroll.x,
event->scroll.y,
- stage_x11,
&xev->valuators);
CLUTTER_NOTE (EVENT,
@@ -919,13 +994,12 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->button.stage = stage;
event->button.time = xev->time;
- event->button.x = xev->event_x;
- event->button.y = xev->event_y;
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->button.x, &event->button.y);
event->button.button = xev->detail;
- event->button.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods,
- &xev->buttons,
- &xev->group);
+ _clutter_input_device_xi2_translate_state (event,
+ &xev->mods,
+ &xev->buttons,
+ &xev->group);
clutter_event_set_source_device (event, source_device);
clutter_event_set_device (event, device);
@@ -933,7 +1007,6 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->button.axes = translate_axes (event->button.device,
event->button.x,
event->button.y,
- stage_x11,
&xev->valuators);
CLUTTER_NOTE (EVENT,
@@ -1002,12 +1075,11 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->scroll.stage = stage;
event->scroll.time = xev->time;
- event->scroll.x = xev->event_x;
- event->scroll.y = xev->event_y;
- event->scroll.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods,
- &xev->buttons,
- &xev->group);
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->scroll.x, &event->scroll.y);
+ _clutter_input_device_xi2_translate_state (event,
+ &xev->mods,
+ &xev->buttons,
+ &xev->group);
clutter_event_set_scroll_delta (event, delta_x, delta_y);
clutter_event_set_source_device (event, source_device);
@@ -1031,12 +1103,11 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->motion.stage = stage;
event->motion.time = xev->time;
- event->motion.x = xev->event_x;
- event->motion.y = xev->event_y;
- event->motion.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods,
- &xev->buttons,
- &xev->group);
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->motion.x, &event->motion.y);
+ _clutter_input_device_xi2_translate_state (event,
+ &xev->mods,
+ &xev->buttons,
+ &xev->group);
clutter_event_set_source_device (event, source_device);
clutter_event_set_device (event, device);
@@ -1044,7 +1115,6 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->motion.axes = translate_axes (event->motion.device,
event->motion.x,
event->motion.y,
- stage_x11,
&xev->valuators);
if (source_device != NULL && device->stage != NULL)
@@ -1069,6 +1139,14 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
#ifdef HAVE_XINPUT_2_2
case XI_TouchBegin:
+ {
+ XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
+ device = g_hash_table_lookup (manager_xi2->devices_by_id,
+ GINT_TO_POINTER (xev->deviceid));
+ if (!_clutter_input_device_get_stage (device))
+ _clutter_input_device_set_stage (device, stage);
+ }
+ /* Fall through */
case XI_TouchEnd:
{
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
@@ -1083,12 +1161,11 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->touch.stage = stage;
event->touch.time = xev->time;
- event->touch.x = xev->event_x;
- event->touch.y = xev->event_y;
- event->touch.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods,
- &xev->buttons,
- &xev->group);
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->touch.x, &event->touch.y);
+ _clutter_input_device_xi2_translate_state (event,
+ &xev->mods,
+ &xev->buttons,
+ &xev->group);
clutter_event_set_source_device (event, source_device);
@@ -1099,7 +1176,6 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->touch.axes = translate_axes (event->touch.device,
event->motion.x,
event->motion.y,
- stage_x11,
&xev->valuators);
if (xi_event->evtype == XI_TouchBegin)
@@ -1139,8 +1215,7 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->touch.stage = stage;
event->touch.time = xev->time;
event->touch.sequence = GUINT_TO_POINTER (xev->detail);
- event->touch.x = xev->event_x;
- event->touch.y = xev->event_y;
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->touch.x, &event->touch.y);
clutter_event_set_source_device (event, source_device);
@@ -1151,13 +1226,12 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->touch.axes = translate_axes (event->touch.device,
event->motion.x,
event->motion.y,
- stage_x11,
&xev->valuators);
- event->touch.modifier_state =
- _clutter_input_device_xi2_translate_state (&xev->mods,
- &xev->buttons,
- &xev->group);
+ _clutter_input_device_xi2_translate_state (event,
+ &xev->mods,
+ &xev->buttons,
+ &xev->group);
event->touch.modifier_state |= CLUTTER_BUTTON1_MASK;
if (xev->flags & XITouchEmulatingPointer)
@@ -1197,8 +1271,7 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->crossing.related = NULL;
event->crossing.time = xev->time;
- event->crossing.x = xev->event_x;
- event->crossing.y = xev->event_y;
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->crossing.x, &event->crossing.y);
_clutter_input_device_set_stage (device, stage);
}
@@ -1221,8 +1294,7 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
event->crossing.related = NULL;
event->crossing.time = xev->time;
- event->crossing.x = xev->event_x;
- event->crossing.y = xev->event_y;
+ translate_coords (stage_x11, xev->event_x, xev->event_y, &event->crossing.x, &event->crossing.y);
_clutter_input_device_set_stage (device, NULL);
}
@@ -1301,25 +1373,29 @@ clutter_device_manager_xi2_get_core_device (ClutterDeviceManager *manager,
ClutterInputDeviceType device_type)
{
ClutterDeviceManagerXI2 *manager_xi2 = CLUTTER_DEVICE_MANAGER_XI2 (manager);
- ClutterBackendX11 *backend_x11;
- ClutterInputDevice *device;
- int device_id;
+ ClutterInputDevice *pointer = NULL;
+ GList *l;
- backend_x11 =
- CLUTTER_BACKEND_X11 (_clutter_device_manager_get_backend (manager));
+ for (l = manager_xi2->master_devices; l != NULL ; l = l->next)
+ {
+ ClutterInputDevice *device = l->data;
+ if (clutter_input_device_get_device_type (device) == CLUTTER_POINTER_DEVICE)
+ {
+ pointer = device;
+ break;
+ }
+ }
- XIGetClientPointer (backend_x11->xdpy, None, &device_id);
-
- device = g_hash_table_lookup (manager_xi2->devices_by_id,
- GINT_TO_POINTER (device_id));
+ if (pointer == NULL)
+ return NULL;
switch (device_type)
{
case CLUTTER_POINTER_DEVICE:
- return device;
+ return pointer;
case CLUTTER_KEYBOARD_DEVICE:
- return clutter_input_device_get_associated_device (device);
+ return clutter_input_device_get_associated_device (pointer);
default:
break;
@@ -1382,6 +1458,9 @@ clutter_device_manager_xi2_constructed (GObject *gobject)
{
XIDeviceInfo *xi_device = &info[i];
+ if (!xi_device->enabled)
+ continue;
+
add_device (manager_xi2, backend_x11, xi_device, TRUE);
if (xi_device->use == XIMasterPointer ||
@@ -1419,6 +1498,8 @@ clutter_device_manager_xi2_constructed (GObject *gobject)
clutter_x11_get_root_window (),
&event_mask);
+ XSync (backend_x11->xdpy, False);
+
if (G_OBJECT_CLASS (clutter_device_manager_xi2_parent_class)->constructed)
G_OBJECT_CLASS (clutter_device_manager_xi2_parent_class)->constructed (gobject);
}
@@ -1469,6 +1550,7 @@ clutter_device_manager_xi2_class_init (ClutterDeviceManagerXI2Class *klass)
manager_class->get_devices = clutter_device_manager_xi2_get_devices;
manager_class->get_core_device = clutter_device_manager_xi2_get_core_device;
manager_class->get_device = clutter_device_manager_xi2_get_device;
+ manager_class->select_stage_events = clutter_device_manager_xi2_select_stage_events;
}
static void
diff --git a/clutter/x11/clutter-device-manager-xi2.h b/clutter/x11/clutter-device-manager-xi2.h
index ec54cbdb4..2ceb623a6 100644
--- a/clutter/x11/clutter-device-manager-xi2.h
+++ b/clutter/x11/clutter-device-manager-xi2.h
@@ -49,8 +49,6 @@ struct _ClutterDeviceManagerXI2
GList *master_devices;
GList *slave_devices;
- ClutterInputDevice *client_pointer;
-
int opcode;
};
diff --git a/clutter/x11/clutter-event-x11.c b/clutter/x11/clutter-event-x11.c
index 9eedbcd2a..3305063c3 100644
--- a/clutter/x11/clutter-event-x11.c
+++ b/clutter/x11/clutter-event-x11.c
@@ -34,6 +34,7 @@
#include "clutter-event-private.h"
#include "clutter-main.h"
#include "clutter-private.h"
+#include "clutter-stage-private.h"
#include
@@ -220,8 +221,7 @@ clutter_x11_handle_event (XEvent *xevent)
while (spin > 0 && (event = clutter_event_get ()))
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
--spin;
}
@@ -321,8 +321,7 @@ clutter_event_dispatch (GSource *source,
if (event != NULL)
{
/* forward the event into clutter for emission etc. */
- clutter_do_event (event);
- clutter_event_free (event);
+ _clutter_stage_queue_event (event->any.stage, event, FALSE);
}
_clutter_threads_release_lock ();
diff --git a/clutter/x11/clutter-glx-texture-pixmap.h b/clutter/x11/clutter-glx-texture-pixmap.h
index 1563f92de..ffc967087 100644
--- a/clutter/x11/clutter-glx-texture-pixmap.h
+++ b/clutter/x11/clutter-glx-texture-pixmap.h
@@ -73,6 +73,7 @@ struct _ClutterGLXTexturePixmap
ClutterGLXTexturePixmapPrivate *priv;
};
+CLUTTER_DEPRECATED_FOR(clutter_x11_texture_pixmap_get_type)
GType clutter_glx_texture_pixmap_get_type (void);
CLUTTER_DEPRECATED_FOR(clutter_x11_texture_pixmap_new)
diff --git a/clutter/x11/clutter-input-device-core-x11.c b/clutter/x11/clutter-input-device-core-x11.c
index 6c78a3024..c7eda97cf 100644
--- a/clutter/x11/clutter-input-device-core-x11.c
+++ b/clutter/x11/clutter-input-device-core-x11.c
@@ -33,12 +33,6 @@
#include "clutter-backend-x11.h"
#include "clutter-stage-x11.h"
-#ifdef HAVE_XINPUT
-#include
-#endif
-
-#define MAX_DEVICE_CLASSES 13
-
typedef struct _ClutterInputDeviceClass ClutterInputDeviceX11Class;
/* a specific X11 input device */
@@ -46,22 +40,6 @@ struct _ClutterInputDeviceX11
{
ClutterInputDevice device;
-#ifdef HAVE_XINPUT
- XDevice *xdevice;
-
- XEventClass event_classes[MAX_DEVICE_CLASSES];
- int num_classes;
-
- int button_press_type;
- int button_release_type;
- int motion_notify_type;
- int state_notify_type;
- int key_press_type;
- int key_release_type;
-#endif /* HAVE_XINPUT */
-
- gint *axis_data;
-
int min_keycode;
int max_keycode;
};
@@ -72,134 +50,6 @@ G_DEFINE_TYPE (ClutterInputDeviceX11,
clutter_input_device_x11,
CLUTTER_TYPE_INPUT_DEVICE);
-static void
-clutter_input_device_x11_select_stage_events (ClutterInputDevice *device,
- ClutterStage *stage,
- gint event_mask)
-{
-#if HAVE_XINPUT
- ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (device->backend);
- ClutterInputDeviceX11 *device_x11;
- ClutterStageX11 *stage_x11;
- XEventClass class;
- gint i;
-
- device_x11 = CLUTTER_INPUT_DEVICE_X11 (device);
-
- stage_x11 = CLUTTER_STAGE_X11 (_clutter_stage_get_window (stage));
-
- i = 0;
-
- if (event_mask & ButtonPressMask)
- {
- DeviceButtonPress (device_x11->xdevice,
- device_x11->button_press_type,
- class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
-
- DeviceButtonPressGrab (device_x11->xdevice, 0, class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
- }
-
- if (event_mask & ButtonReleaseMask)
- {
- DeviceButtonRelease (device_x11->xdevice,
- device_x11->button_release_type,
- class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
- }
-
- if (event_mask & PointerMotionMask)
- {
- DeviceMotionNotify (device_x11->xdevice,
- device_x11->motion_notify_type,
- class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
-
- DeviceStateNotify (device_x11->xdevice,
- device_x11->state_notify_type,
- class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
- }
-
- if (event_mask & KeyPressMask)
- {
- DeviceKeyPress (device_x11->xdevice,
- device_x11->key_press_type,
- class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
- }
-
- if (event_mask & KeyReleaseMask)
- {
- DeviceKeyRelease (device_x11->xdevice,
- device_x11->key_release_type,
- class);
- if (class != 0)
- device_x11->event_classes[i++] = class;
- }
-
- device_x11->num_classes = i;
-
- XSelectExtensionEvent (backend_x11->xdpy,
- stage_x11->xwin,
- device_x11->event_classes,
- device_x11->num_classes);
-#endif /* HAVE_XINPUT */
-}
-
-static void
-clutter_input_device_x11_dispose (GObject *gobject)
-{
- ClutterInputDeviceX11 *device_x11 = CLUTTER_INPUT_DEVICE_X11 (gobject);
-
-#ifdef HAVE_XINPUT
- if (device_x11->xdevice)
- {
- ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (gobject);
- ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (device->backend);
-
- XCloseDevice (backend_x11->xdpy, device_x11->xdevice);
- device_x11->xdevice = NULL;
- }
-#endif /* HAVE_XINPUT */
-
- g_free (device_x11->axis_data);
-
- G_OBJECT_CLASS (clutter_input_device_x11_parent_class)->dispose (gobject);
-}
-
-static void
-clutter_input_device_x11_constructed (GObject *gobject)
-{
-#ifdef HAVE_XINPUT
- ClutterInputDeviceX11 *device_x11 = CLUTTER_INPUT_DEVICE_X11 (gobject);
- ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (gobject);
- ClutterBackendX11 *backend_x11;
-
- backend_x11 = CLUTTER_BACKEND_X11 (device->backend);
-
- clutter_x11_trap_x_errors ();
-
- device_x11->xdevice = XOpenDevice (backend_x11->xdpy, device->id);
-
- if (clutter_x11_untrap_x_errors ())
- {
- g_warning ("Device '%s' cannot be opened",
- clutter_input_device_get_device_name (device));
- }
-#endif /* HAVE_XINPUT */
-
- if (G_OBJECT_CLASS (clutter_input_device_x11_parent_class)->constructed)
- G_OBJECT_CLASS (clutter_input_device_x11_parent_class)->constructed (gobject);
-}
-
static gboolean
clutter_input_device_x11_keycode_to_evdev (ClutterInputDevice *device,
guint hardware_keycode,
@@ -217,13 +67,8 @@ clutter_input_device_x11_keycode_to_evdev (ClutterInputDevice *device,
static void
clutter_input_device_x11_class_init (ClutterInputDeviceX11Class *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterInputDeviceClass *device_class = CLUTTER_INPUT_DEVICE_CLASS (klass);
- gobject_class->constructed = clutter_input_device_x11_constructed;
- gobject_class->dispose = clutter_input_device_x11_dispose;
-
- device_class->select_stage_events = clutter_input_device_x11_select_stage_events;
device_class->keycode_to_evdev = clutter_input_device_x11_keycode_to_evdev;
}
@@ -231,243 +76,3 @@ static void
clutter_input_device_x11_init (ClutterInputDeviceX11 *self)
{
}
-
-void
-_clutter_input_device_x11_set_keycodes (ClutterInputDeviceX11 *device_x11,
- int min_keycode,
- int max_keycode)
-{
- device_x11->min_keycode = min_keycode;
- device_x11->max_keycode = max_keycode;
-}
-
-int
-_clutter_input_device_x11_get_min_keycode (ClutterInputDeviceX11 *device_x11)
-{
- return device_x11->min_keycode;
-}
-
-int
-_clutter_input_device_x11_get_max_keycode (ClutterInputDeviceX11 *device_x11)
-{
- return device_x11->max_keycode;
-}
-
-#ifdef HAVE_XINPUT
-static void
-update_axes (ClutterInputDeviceX11 *device_x11,
- guint n_axes,
- gint first_axis,
- gint *axes_data)
-{
- ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (device_x11);
- gint i;
-
- if (device_x11->axis_data == NULL)
- {
- device_x11->axis_data =
- g_new0 (gint, clutter_input_device_get_n_axes (device));
- }
-
- for (i = 0; i < n_axes; i++)
- device_x11->axis_data[first_axis + i] = axes_data[i];
-}
-
-static gdouble *
-translate_axes (ClutterInputDeviceX11 *device_x11,
- ClutterStageX11 *stage_x11,
- gfloat *event_x,
- gfloat *event_y)
-{
- ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (device_x11);
- gint root_x, root_y;
- gint n_axes, i;
- gdouble x, y;
- gdouble *retval;
-
- if (!_clutter_stage_x11_get_root_coords (stage_x11, &root_x, &root_y))
- return NULL;
-
- x = y = 0.0f;
- n_axes = clutter_input_device_get_n_axes (device);
-
- retval = g_new0 (gdouble, n_axes);
-
- for (i = 0; i < n_axes; i++)
- {
- ClutterInputAxis axis;
-
- axis = clutter_input_device_get_axis (device, i);
- switch (axis)
- {
- case CLUTTER_INPUT_AXIS_X:
- case CLUTTER_INPUT_AXIS_Y:
- _clutter_x11_input_device_translate_screen_coord (device,
- root_x, root_y,
- i,
- device_x11->axis_data[i],
- &retval[i]);
- if (axis == CLUTTER_INPUT_AXIS_X)
- x = retval[i];
- else if (axis == CLUTTER_INPUT_AXIS_Y)
- y = retval[i];
- break;
-
- default:
- _clutter_input_device_translate_axis (device, i,
- device_x11->axis_data[i],
- &retval[i]);
- break;
- }
- }
-
- if (event_x)
- *event_x = x;
-
- if (event_y)
- *event_y = y;
-
- return retval;
-}
-
-/*
- * translate_state:
- * @state: the keyboard state of the core device
- * @device_state: the button state of the device
- *
- * Trivially translates the state and the device state into a
- * single bitmask.
- */
-static guint
-translate_state (guint state,
- guint device_state)
-{
- return device_state | (state & 0xff);
-}
-#endif /* HAVE_XINPUT */
-
-gboolean
-_clutter_input_device_x11_translate_xi_event (ClutterInputDeviceX11 *device_x11,
- ClutterStageX11 *stage_x11,
- XEvent *xevent,
- ClutterEvent *event)
-{
-#ifdef HAVE_XINPUT
- ClutterInputDevice *device = CLUTTER_INPUT_DEVICE (device_x11);
-
- if ((xevent->type == device_x11->button_press_type) ||
- (xevent->type == device_x11->button_release_type))
- {
- XDeviceButtonEvent *xdbe = (XDeviceButtonEvent *) xevent;
-
- event->button.type = event->type =
- (xdbe->type == device_x11->button_press_type) ? CLUTTER_BUTTON_PRESS
- : CLUTTER_BUTTON_RELEASE;
- event->button.device = device;
- event->button.time = xdbe->time;
- event->button.button = xdbe->button;
- event->button.modifier_state =
- translate_state (xdbe->state, xdbe->device_state);
-
- update_axes (device_x11,
- xdbe->axes_count,
- xdbe->first_axis,
- xdbe->axis_data);
-
- event->button.axes = translate_axes (device_x11, stage_x11,
- &event->button.x,
- &event->button.y);
-
- _clutter_stage_x11_set_user_time (stage_x11, event->button.time);
-
- return TRUE;
- }
-
- if ((xevent->type == device_x11->key_press_type) ||
- (xevent->type == device_x11->key_release_type))
- {
- XDeviceKeyEvent *xdke = (XDeviceKeyEvent *) xevent;
-
- if (xdke->keycode < device_x11->min_keycode ||
- xdke->keycode >= device_x11->max_keycode)
- {
- g_warning ("Invalid device key code received: %d", xdke->keycode);
- return FALSE;
- }
-
- clutter_input_device_get_key (device,
- xdke->keycode - device_x11->min_keycode,
- &event->key.keyval,
- &event->key.modifier_state);
- if (event->key.keyval == 0)
- return FALSE;
-
- event->key.type = event->type =
- (xdke->type == device_x11->key_press_type) ? CLUTTER_KEY_PRESS
- : CLUTTER_KEY_RELEASE;
- event->key.time = xdke->time;
- event->key.modifier_state |=
- translate_state (xdke->state, xdke->device_state);
- event->key.device = device;
-
-#if 0
- if ((event->key.keyval >= 0x20) && (event->key.keyval <= 0xff))
- {
- event->key.unicode = (gunichar) event->key.keyval;
- }
-#endif
-
- _clutter_stage_x11_set_user_time (stage_x11, event->key.time);
-
- return TRUE;
- }
-
- if (xevent->type == device_x11->motion_notify_type)
- {
- XDeviceMotionEvent *xdme = (XDeviceMotionEvent *) xevent;
-
- event->motion.type = event->type = CLUTTER_MOTION;
- event->motion.time = xdme->time;
- event->motion.modifier_state =
- translate_state (xdme->state, xdme->device_state);
- event->motion.device = device;
-
- event->motion.axes =
- g_new0 (gdouble, clutter_input_device_get_n_axes (device));
-
- update_axes (device_x11,
- xdme->axes_count,
- xdme->first_axis,
- xdme->axis_data);
-
- event->motion.axes = translate_axes (device_x11, stage_x11,
- &event->motion.x,
- &event->motion.y);
-
- return TRUE;
- }
-
- if (xevent->type == device_x11->state_notify_type)
- {
- XDeviceStateNotifyEvent *xdse = (XDeviceStateNotifyEvent *) xevent;
- XInputClass *input_class = (XInputClass *) xdse->data;
- gint n_axes = clutter_input_device_get_n_axes (device);
- int i;
-
- for (i = 0; i < xdse->num_classes; i++)
- {
- if (input_class->class == ValuatorClass)
- {
- int *axis_data = ((XValuatorState *) input_class)->valuators;
-
- update_axes (device_x11, n_axes, 0, axis_data);
- }
-
- input_class =
- (XInputClass *)(((char *) input_class) + input_class->length);
- }
- }
-#endif /* HAVE_XINPUT */
-
- return FALSE;
-}
diff --git a/clutter/x11/clutter-input-device-core-x11.h b/clutter/x11/clutter-input-device-core-x11.h
index af4ed59cb..c264051e5 100644
--- a/clutter/x11/clutter-input-device-core-x11.h
+++ b/clutter/x11/clutter-input-device-core-x11.h
@@ -39,17 +39,6 @@ typedef struct _ClutterInputDeviceX11 ClutterInputDeviceX11;
GType _clutter_input_device_x11_get_type (void) G_GNUC_CONST;
-void _clutter_input_device_x11_set_keycodes (ClutterInputDeviceX11 *device_x11,
- int min_keycode,
- int max_keycode);
-int _clutter_input_device_x11_get_min_keycode (ClutterInputDeviceX11 *device_x11);
-int _clutter_input_device_x11_get_max_keycode (ClutterInputDeviceX11 *device_x11);
-
-gboolean _clutter_input_device_x11_translate_xi_event (ClutterInputDeviceX11 *device_x11,
- ClutterStageX11 *stage_x11,
- XEvent *xevent,
- ClutterEvent *event);
-
G_END_DECLS
#endif /* __CLUTTER_INPUT_DEVICE_X11_H__ */
diff --git a/clutter/x11/clutter-input-device-xi2.c b/clutter/x11/clutter-input-device-xi2.c
index 5923977d3..9490c521e 100644
--- a/clutter/x11/clutter-input-device-xi2.c
+++ b/clutter/x11/clutter-input-device-xi2.c
@@ -27,6 +27,7 @@
#include "clutter-debug.h"
#include "clutter-device-manager-private.h"
+#include "clutter-event-private.h"
#include "clutter-private.h"
#include "clutter-stage-private.h"
@@ -53,67 +54,6 @@ G_DEFINE_TYPE (ClutterInputDeviceXI2,
clutter_input_device_xi2,
CLUTTER_TYPE_INPUT_DEVICE);
-static void
-clutter_input_device_xi2_select_stage_events (ClutterInputDevice *device,
- ClutterStage *stage,
- gint event_mask)
-{
- ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device);
- ClutterBackendX11 *backend_x11;
- ClutterStageX11 *stage_x11;
- XIEventMask xi_event_mask;
- unsigned char *mask;
- int len;
-
- backend_x11 = CLUTTER_BACKEND_X11 (device->backend);
- stage_x11 = CLUTTER_STAGE_X11 (_clutter_stage_get_window (stage));
-
- len = XIMaskLen (XI_LASTEVENT);
- mask = g_new0 (unsigned char, len);
-
- if (event_mask & PointerMotionMask)
- XISetMask (mask, XI_Motion);
-
- if (event_mask & ButtonPressMask)
- XISetMask (mask, XI_ButtonPress);
-
- if (event_mask & ButtonReleaseMask)
- XISetMask (mask, XI_ButtonRelease);
-
- if (event_mask & KeyPressMask)
- XISetMask (mask, XI_KeyPress);
-
- if (event_mask & KeyReleaseMask)
- XISetMask (mask, XI_KeyRelease);
-
- if (event_mask & EnterWindowMask)
- XISetMask (mask, XI_Enter);
-
- if (event_mask & LeaveWindowMask)
- XISetMask (mask, XI_Leave);
-
-#ifdef HAVE_XINPUT_2_2
- /* enable touch event support if we're running on XInput 2.2 */
- if (backend_x11->xi_minor >= 2)
- {
- XISetMask (mask, XI_TouchBegin);
- XISetMask (mask, XI_TouchUpdate);
- XISetMask (mask, XI_TouchEnd);
- }
-#endif /* HAVE_XINPUT_2_2 */
-
- xi_event_mask.deviceid = device_xi2->device_id;
- xi_event_mask.mask = mask;
- xi_event_mask.mask_len = len;
-
- CLUTTER_NOTE (BACKEND, "Selecting device id '%d' events",
- device_xi2->device_id);
-
- XISelectEvents (backend_x11->xdpy, stage_x11->xwin, &xi_event_mask, 1);
-
- g_free (mask);
-}
-
static void
clutter_input_device_xi2_constructed (GObject *gobject)
{
@@ -147,7 +87,6 @@ clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass)
gobject_class->constructed = clutter_input_device_xi2_constructed;
- device_class->select_stage_events = clutter_input_device_xi2_select_stage_events;
device_class->keycode_to_evdev = clutter_input_device_xi2_keycode_to_evdev;
}
@@ -156,15 +95,44 @@ clutter_input_device_xi2_init (ClutterInputDeviceXI2 *self)
{
}
-guint
-_clutter_input_device_xi2_translate_state (XIModifierState *modifiers_state,
+static ClutterModifierType
+get_modifier_for_button (int i)
+{
+ switch (i)
+ {
+ case 1:
+ return CLUTTER_BUTTON1_MASK;
+ case 2:
+ return CLUTTER_BUTTON2_MASK;
+ case 3:
+ return CLUTTER_BUTTON3_MASK;
+ case 4:
+ return CLUTTER_BUTTON4_MASK;
+ case 5:
+ return CLUTTER_BUTTON5_MASK;
+ default:
+ return 0;
+ }
+}
+
+void
+_clutter_input_device_xi2_translate_state (ClutterEvent *event,
+ XIModifierState *modifiers_state,
XIButtonState *buttons_state,
XIGroupState *group_state)
{
- guint retval = 0;
+ guint button = 0;
+ guint base = 0;
+ guint latched = 0;
+ guint locked = 0;
+ guint effective;
if (modifiers_state)
- retval = (guint) modifiers_state->effective;
+ {
+ base = (guint) modifiers_state->base;
+ latched = (guint) modifiers_state->latched;
+ locked = (guint) modifiers_state->locked;
+ }
if (buttons_state)
{
@@ -177,36 +145,30 @@ _clutter_input_device_xi2_translate_state (XIModifierState *modifiers_state,
if (!XIMaskIsSet (buttons_state->mask, i))
continue;
- switch (i)
- {
- case 1:
- retval |= CLUTTER_BUTTON1_MASK;
- break;
-
- case 2:
- retval |= CLUTTER_BUTTON2_MASK;
- break;
-
- case 3:
- retval |= CLUTTER_BUTTON3_MASK;
- break;
-
- case 4:
- retval |= CLUTTER_BUTTON4_MASK;
- break;
-
- case 5:
- retval |= CLUTTER_BUTTON5_MASK;
- break;
-
- default:
- break;
- }
+ button |= get_modifier_for_button (i);
}
}
- if (group_state)
- retval |= (group_state->effective) << 13;
+ /* The XIButtonState sent in the event specifies the
+ * state of the buttons before the event. In order to
+ * get the current state of the buttons, we need to
+ * filter out the current button.
+ */
+ switch (event->type)
+ {
+ case CLUTTER_BUTTON_PRESS:
+ button |= (get_modifier_for_button (event->button.button));
+ break;
+ case CLUTTER_BUTTON_RELEASE:
+ button &= ~(get_modifier_for_button (event->button.button));
+ break;
+ default:
+ break;
+ }
- return retval;
+ effective = button | base | latched | locked;
+ if (group_state)
+ effective |= (group_state->effective) << 13;
+
+ _clutter_event_set_state_full (event, button, base, latched, locked, effective);
}
diff --git a/clutter/x11/clutter-input-device-xi2.h b/clutter/x11/clutter-input-device-xi2.h
index b86401fb9..92dadc965 100644
--- a/clutter/x11/clutter-input-device-xi2.h
+++ b/clutter/x11/clutter-input-device-xi2.h
@@ -37,9 +37,10 @@ typedef struct _ClutterInputDeviceXI2 ClutterInputDeviceXI2;
GType _clutter_input_device_xi2_get_type (void) G_GNUC_CONST;
-guint _clutter_input_device_xi2_translate_state (XIModifierState *modifiers_state,
- XIButtonState *buttons_state,
- XIGroupState *group_state);
+void _clutter_input_device_xi2_translate_state (ClutterEvent *event,
+ XIModifierState *modifiers_state,
+ XIButtonState *buttons_state,
+ XIGroupState *group_state);
G_END_DECLS
diff --git a/clutter/x11/clutter-keymap-x11.c b/clutter/x11/clutter-keymap-x11.c
index e5de3ee7e..2e9bae423 100644
--- a/clutter/x11/clutter-keymap-x11.c
+++ b/clutter/x11/clutter-keymap-x11.c
@@ -37,6 +37,14 @@
#endif
typedef struct _ClutterKeymapX11Class ClutterKeymapX11Class;
+typedef struct _DirectionCacheEntry DirectionCacheEntry;
+
+struct _DirectionCacheEntry
+{
+ guint serial;
+ Atom group_atom;
+ PangoDirection direction;
+};
struct _ClutterKeymapX11
{
@@ -52,14 +60,20 @@ struct _ClutterKeymapX11
ClutterModifierType num_lock_mask;
ClutterModifierType scroll_lock_mask;
+ PangoDirection current_direction;
+
#ifdef HAVE_XKB
XkbDescPtr xkb_desc;
int xkb_event_base;
guint xkb_map_serial;
+ Atom current_group_atom;
+ guint current_cache_serial;
+ DirectionCacheEntry group_direction_cache[4];
#endif
guint caps_lock_state : 1;
guint num_lock_state : 1;
+ guint has_direction : 1;
};
struct _ClutterKeymapX11Class
@@ -217,6 +231,128 @@ update_locked_mods (ClutterKeymapX11 *keymap_x11,
}
#endif /* HAVE_XKB */
+#ifdef HAVE_XKB
+/* the code to retrieve the keymap direction and cache it
+ * is taken from GDK:
+ * gdk/x11/gdkkeys-x11.c
+ */
+static PangoDirection
+get_direction (XkbDescPtr xkb,
+ int group)
+{
+ int rtl_minus_ltr = 0; /* total number of RTL keysyms minus LTR ones */
+ int code;
+
+ for (code = xkb->min_key_code;
+ code <= xkb->max_key_code;
+ code += 1)
+ {
+ int level = 0;
+ KeySym sym = XkbKeySymEntry (xkb, code, level, group);
+ PangoDirection dir = pango_unichar_direction (clutter_keysym_to_unicode (sym));
+
+ switch (dir)
+ {
+ case PANGO_DIRECTION_RTL:
+ rtl_minus_ltr++;
+ break;
+
+ case PANGO_DIRECTION_LTR:
+ rtl_minus_ltr--;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (rtl_minus_ltr > 0)
+ return PANGO_DIRECTION_RTL;
+
+ return PANGO_DIRECTION_LTR;
+}
+
+static PangoDirection
+get_direction_from_cache (ClutterKeymapX11 *keymap_x11,
+ XkbDescPtr xkb,
+ int group)
+{
+ Atom group_atom = xkb->names->groups[group];
+ gboolean cache_hit = FALSE;
+ DirectionCacheEntry *cache = keymap_x11->group_direction_cache;
+ PangoDirection direction = PANGO_DIRECTION_NEUTRAL;
+ int i;
+
+ if (keymap_x11->has_direction)
+ {
+ /* look up in the cache */
+ for (i = 0; i < G_N_ELEMENTS (keymap_x11->group_direction_cache); i++)
+ {
+ if (cache[i].group_atom == group_atom)
+ {
+ cache_hit = TRUE;
+ cache[i].serial = keymap_x11->current_cache_serial++;
+ direction = cache[i].direction;
+ group_atom = cache[i].group_atom;
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* initialize the cache */
+ for (i = 0; i < G_N_ELEMENTS (keymap_x11->group_direction_cache); i++)
+ {
+ cache[i].group_atom = 0;
+ cache[i].direction = PANGO_DIRECTION_NEUTRAL;
+ cache[i].serial = keymap_x11->current_cache_serial;
+ }
+
+ keymap_x11->current_cache_serial += 1;
+ }
+
+ /* insert the new entry in the cache */
+ if (!cache_hit)
+ {
+ int oldest = 0;
+
+ direction = get_direction (xkb, group);
+
+ /* replace the oldest entry */
+ for (i = 0; i < G_N_ELEMENTS (keymap_x11->group_direction_cache); i++)
+ {
+ if (cache[i].serial < cache[oldest].serial)
+ oldest = i;
+ }
+
+ cache[oldest].group_atom = group_atom;
+ cache[oldest].direction = direction;
+ cache[oldest].serial = keymap_x11->current_cache_serial++;
+ }
+
+ return direction;
+}
+#endif /* HAVE_XKB */
+
+static void
+update_direction (ClutterKeymapX11 *keymap_x11,
+ int group)
+{
+#ifdef HAVE_XKB
+ XkbDescPtr xkb = get_xkb (keymap_x11);
+ Atom group_atom;
+
+ group_atom = xkb->names->groups[group];
+
+ if (!keymap_x11->has_direction || keymap_x11->current_group_atom != group_atom)
+ {
+ keymap_x11->current_direction = get_direction_from_cache (keymap_x11, xkb, group);
+ keymap_x11->current_group_atom = group_atom;
+ keymap_x11->has_direction = TRUE;
+ }
+#endif /* HAVE_XKB */
+}
+
static void
clutter_keymap_x11_constructed (GObject *gobject)
{
@@ -332,6 +468,7 @@ clutter_keymap_x11_class_init (ClutterKeymapX11Class *klass)
static void
clutter_keymap_x11_init (ClutterKeymapX11 *keymap)
{
+ keymap->current_direction = PANGO_DIRECTION_NEUTRAL;
}
static ClutterTranslateReturn
@@ -360,7 +497,8 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator,
switch (xkb_event->any.xkb_type)
{
case XkbStateNotify:
- CLUTTER_NOTE (EVENT, "Updating locked modifiers");
+ CLUTTER_NOTE (EVENT, "Updating keyboard state");
+ update_direction (keymap_x11, XkbStateGroup (&xkb_event->state));
update_locked_mods (keymap_x11, xkb_event->state.locked_mods);
retval = CLUTTER_TRANSLATE_REMOVE;
break;
@@ -503,3 +641,27 @@ _clutter_keymap_x11_get_is_modifier (ClutterKeymapX11 *keymap,
return FALSE;
}
+
+PangoDirection
+_clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap)
+{
+ g_return_val_if_fail (CLUTTER_IS_KEYMAP_X11 (keymap), PANGO_DIRECTION_NEUTRAL);
+
+#ifdef HAVE_XKB
+ if (CLUTTER_BACKEND_X11 (keymap->backend)->use_xkb)
+ {
+ if (!keymap->has_direction)
+ {
+ Display *xdisplay = CLUTTER_BACKEND_X11 (keymap->backend)->xdpy;
+ XkbStateRec state_rec;
+
+ XkbGetState (xdisplay, XkbUseCoreKbd, &state_rec);
+ update_direction (keymap, XkbStateGroup (&state_rec));
+ }
+
+ return keymap->current_direction;
+ }
+ else
+#endif
+ return PANGO_DIRECTION_NEUTRAL;
+}
diff --git a/clutter/x11/clutter-keymap-x11.h b/clutter/x11/clutter-keymap-x11.h
index 30327852d..ad673a2a7 100644
--- a/clutter/x11/clutter-keymap-x11.h
+++ b/clutter/x11/clutter-keymap-x11.h
@@ -25,6 +25,7 @@
#define __CLUTTER_KEYMAP_X11_H__
#include
+#include
#include
G_BEGIN_DECLS
@@ -48,6 +49,8 @@ gint _clutter_keymap_x11_translate_key_state (ClutterKeymapX11 *keymap,
gboolean _clutter_keymap_x11_get_is_modifier (ClutterKeymapX11 *keymap,
gint keycode);
+PangoDirection _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap);
+
G_END_DECLS
#endif /* __CLUTTER_KEYMAP_X11_H__ */
diff --git a/clutter/x11/clutter-settings-x11.h b/clutter/x11/clutter-settings-x11.h
index fd2efc629..b06565bed 100644
--- a/clutter/x11/clutter-settings-x11.h
+++ b/clutter/x11/clutter-settings-x11.h
@@ -16,6 +16,8 @@ static const struct {
{ "Xft/HintStyle", "font-hint-style" },
{ "Xft/RGBA", "font-subpixel-order" },
{ "Fontconfig/Timestamp", "fontconfig-timestamp" },
+ { "Gdk/WindowScalingFactor", "window-scaling-factor" },
+ { "Gdk/UnscaledDPI", "unscaled-font-dpi" },
};
static const gint _n_clutter_settings_map = G_N_ELEMENTS (_clutter_settings_map);
diff --git a/clutter/x11/clutter-stage-x11.c b/clutter/x11/clutter-stage-x11.c
index 230172cc9..aecd978a7 100644
--- a/clutter/x11/clutter-stage-x11.c
+++ b/clutter/x11/clutter-stage-x11.c
@@ -22,6 +22,7 @@
#include "config.h"
#include
+#include
#ifdef HAVE_UNISTD_H
#include
@@ -45,10 +46,6 @@
#include "clutter-private.h"
#include "clutter-stage-private.h"
-#ifdef HAVE_XFIXES
-#include
-#endif
-
#define STAGE_X11_IS_MAPPED(s) ((((ClutterStageX11 *) (s))->wm_state & STAGE_X11_WITHDRAWN) == 0)
static ClutterStageWindowIface *clutter_stage_window_parent_iface = NULL;
@@ -151,10 +148,10 @@ clutter_stage_x11_fix_window_size (ClutterStageX11 *stage_x11,
&min_height);
if (new_width <= 0)
- new_width = min_width;
+ new_width = min_width * stage_x11->scale_factor;
if (new_height <= 0)
- new_height = min_height;
+ new_height = min_height * stage_x11->scale_factor;
size_hints->flags = 0;
@@ -164,8 +161,8 @@ clutter_stage_x11_fix_window_size (ClutterStageX11 *stage_x11,
{
if (resize)
{
- size_hints->min_width = min_width;
- size_hints->min_height = min_height;
+ size_hints->min_width = min_width * stage_x11->scale_factor;
+ size_hints->min_height = min_height * stage_x11->scale_factor;
size_hints->flags = PMinSize;
}
else
@@ -225,8 +222,8 @@ clutter_stage_x11_get_geometry (ClutterStageWindow *stage_window,
return;
}
- geometry->width = stage_x11->xwin_width;
- geometry->height = stage_x11->xwin_height;
+ geometry->width = stage_x11->xwin_width / stage_x11->scale_factor;
+ geometry->height = stage_x11->xwin_height / stage_x11->scale_factor;
}
static void
@@ -244,8 +241,8 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
* so we need to manually set the size and queue a relayout on the
* stage here (as is normally done in response to ConfigureNotify).
*/
- stage_x11->xwin_width = width;
- stage_x11->xwin_height = height;
+ stage_x11->xwin_width = width * stage_x11->scale_factor;
+ stage_x11->xwin_height = height * stage_x11->scale_factor;
clutter_actor_queue_relayout (CLUTTER_ACTOR (stage_cogl->wrapper));
return;
}
@@ -266,6 +263,9 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
CLUTTER_NOTE (BACKEND, "New size received: (%d, %d)", width, height);
+ width *= stage_x11->scale_factor;
+ height *= stage_x11->scale_factor;
+
if (stage_x11->xwin != None)
{
clutter_stage_x11_fix_window_size (stage_x11, width, height);
@@ -279,9 +279,6 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
width,
height);
- CLUTTER_SET_PRIVATE_FLAGS (stage_cogl->wrapper,
- CLUTTER_IN_RESIZE);
-
/* XXX: in this case we can rely on a subsequent
* ConfigureNotify that will result in the stage
* being reallocated so we don't actively do anything
@@ -292,6 +289,14 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
height);
}
}
+ else
+ {
+ /* if the backing window hasn't been created yet, we just
+ * need to store the new window size
+ */
+ stage_x11->xwin_width = width;
+ stage_x11->xwin_height = height;
+ }
}
static inline void
@@ -362,22 +367,10 @@ set_cursor_visible (ClutterStageX11 *stage_x11)
if (stage_x11->is_cursor_visible)
{
-#if HAVE_XFIXES
- if (stage_x11->cursor_hidden_xfixes)
- {
- XFixesShowCursor (backend_x11->xdpy, stage_x11->xwin);
- stage_x11->cursor_hidden_xfixes = FALSE;
- }
-#else
XUndefineCursor (backend_x11->xdpy, stage_x11->xwin);
-#endif /* HAVE_XFIXES */
}
else
{
-#if HAVE_XFIXES
- XFixesHideCursor (backend_x11->xdpy, stage_x11->xwin);
- stage_x11->cursor_hidden_xfixes = TRUE;
-#else
XColor col;
Pixmap pix;
Cursor curs;
@@ -390,10 +383,23 @@ set_cursor_visible (ClutterStageX11 *stage_x11)
1, 1);
XFreePixmap (backend_x11->xdpy, pix);
XDefineCursor (backend_x11->xdpy, stage_x11->xwin, curs);
-#endif /* HAVE_XFIXES */
}
}
+static void
+on_window_scaling_factor_notify (GObject *settings,
+ GParamSpec *pspec,
+ ClutterStageX11 *stage_x11)
+{
+ g_object_get (settings,
+ "window-scaling-factor", &stage_x11->scale_factor,
+ NULL);
+
+ clutter_stage_x11_resize (CLUTTER_STAGE_WINDOW (stage_x11),
+ stage_x11->xwin_width,
+ stage_x11->xwin_height);
+}
+
static void
clutter_stage_x11_unrealize (ClutterStageWindow *stage_window)
{
@@ -547,14 +553,10 @@ _clutter_stage_x11_events_device_changed (ClutterStageX11 *stage_x11,
ClutterDeviceManager *device_manager)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_x11);
- int event_flags = 0;
if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_FLOATING)
- event_flags = CLUTTER_STAGE_X11_EVENT_MASK;
-
- _clutter_device_manager_select_stage_events (device_manager,
- stage_cogl->wrapper,
- event_flags);
+ _clutter_device_manager_select_stage_events (device_manager,
+ stage_cogl->wrapper);
}
static void
@@ -564,12 +566,10 @@ stage_events_device_added (ClutterDeviceManager *device_manager,
{
ClutterStageWindow *stage_window = user_data;
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
- int event_flags = CLUTTER_STAGE_X11_EVENT_MASK;
if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_FLOATING)
_clutter_device_manager_select_stage_events (device_manager,
- stage_cogl->wrapper,
- event_flags);
+ stage_cogl->wrapper);
}
static gboolean
@@ -580,14 +580,20 @@ clutter_stage_x11_realize (ClutterStageWindow *stage_window)
ClutterBackend *backend = CLUTTER_BACKEND (stage_cogl->backend);
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (backend);
ClutterDeviceManager *device_manager;
- int event_flags;
gfloat width, height;
- clutter_actor_get_size (CLUTTER_ACTOR (stage_cogl->wrapper),
- &width, &height);
+ clutter_actor_get_size (CLUTTER_ACTOR (stage_cogl->wrapper), &width, &height);
- stage_cogl->onscreen = cogl_onscreen_new (backend->cogl_context,
- width, height);
+ CLUTTER_NOTE (BACKEND, "Wrapper size: %.2f x %.2f", width, height);
+
+ width = width * (float) stage_x11->scale_factor;
+ height = height * (float) stage_x11->scale_factor;
+
+ CLUTTER_NOTE (BACKEND, "Creating a new Cogl onscreen surface: %.2f x %.2f (factor: %d)",
+ width, height,
+ stage_x11->scale_factor);
+
+ stage_cogl->onscreen = cogl_onscreen_new (backend->cogl_context, width, height);
/* We just created a window of the size of the actor. No need to fix
the size of the stage, just update it. */
@@ -623,14 +629,6 @@ clutter_stage_x11_realize (ClutterStageWindow *stage_window)
set_wm_title (stage_x11);
set_cursor_visible (stage_x11);
-
- /* the masks for the events we want to select on a stage window;
- * KeyPressMask and KeyReleaseMask are necessary even with XI1
- * because key events are broken with that extension, and will
- * be fixed by XI2
- */
- event_flags = CLUTTER_STAGE_X11_EVENT_MASK;
-
/* we unconditionally select input events even with event retrieval
* disabled because we need to guarantee that the Clutter internal
* state is maintained when calling clutter_x11_handle_event() without
@@ -648,7 +646,7 @@ clutter_stage_x11_realize (ClutterStageWindow *stage_window)
* for an example of things that break if we do conditional event
* selection.
*/
- XSelectInput (backend_x11->xdpy, stage_x11->xwin, event_flags);
+ XSelectInput (backend_x11->xdpy, stage_x11->xwin, CLUTTER_STAGE_X11_EVENT_MASK);
/* input events also depent on the actual device, so we need to
* use the device manager to let every device select them, using
@@ -658,8 +656,7 @@ clutter_stage_x11_realize (ClutterStageWindow *stage_window)
if (G_UNLIKELY (device_manager != NULL))
{
_clutter_device_manager_select_stage_events (device_manager,
- stage_cogl->wrapper,
- event_flags);
+ stage_cogl->wrapper);
g_signal_connect (device_manager, "device-added",
G_CALLBACK (stage_events_device_added),
@@ -832,12 +829,33 @@ clutter_stage_x11_can_clip_redraws (ClutterStageWindow *stage_window)
ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
/* while resizing a window, clipped redraws are disabled in order to
- * avoid artefacts. see clutter-event-x11.c:event_translate for a more
- * detailed explanation
+ * avoid artefacts.
*/
return stage_x11->clipped_redraws_cool_off == 0;
}
+static void
+clutter_stage_x11_set_scale_factor (ClutterStageWindow *stage_window,
+ int factor)
+{
+ ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
+
+ if (stage_x11->scale_factor == factor)
+ return;
+
+ stage_x11->scale_factor = factor;
+
+ clutter_stage_x11_resize (stage_window, stage_x11->xwin_width, stage_x11->xwin_height);
+}
+
+static int
+clutter_stage_x11_get_scale_factor (ClutterStageWindow *stage_window)
+{
+ ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
+
+ return stage_x11->scale_factor;
+}
+
static void
clutter_stage_x11_finalize (GObject *gobject)
{
@@ -871,6 +889,8 @@ clutter_stage_x11_class_init (ClutterStageX11Class *klass)
static void
clutter_stage_x11_init (ClutterStageX11 *stage)
{
+ ClutterSettings *settings;
+
stage->xwin = None;
stage->xwin_width = 640;
stage->xwin_height = 480;
@@ -880,10 +900,15 @@ clutter_stage_x11_init (ClutterStageX11 *stage)
stage->is_foreign_xwin = FALSE;
stage->fullscreening = FALSE;
stage->is_cursor_visible = TRUE;
- stage->cursor_hidden_xfixes = FALSE;
stage->accept_focus = TRUE;
stage->title = NULL;
+
+ settings = clutter_settings_get_default ();
+ g_signal_connect (settings, "notify::window-scaling-factor",
+ G_CALLBACK (on_window_scaling_factor_notify),
+ stage);
+ on_window_scaling_factor_notify (G_OBJECT (settings), NULL, stage);
}
static void
@@ -903,6 +928,8 @@ clutter_stage_window_iface_init (ClutterStageWindowIface *iface)
iface->realize = clutter_stage_x11_realize;
iface->unrealize = clutter_stage_x11_unrealize;
iface->can_clip_redraws = clutter_stage_x11_can_clip_redraws;
+ iface->set_scale_factor = clutter_stage_x11_set_scale_factor;
+ iface->get_scale_factor = clutter_stage_x11_get_scale_factor;
}
static inline void
@@ -1024,10 +1051,8 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
}
clutter_actor_set_size (CLUTTER_ACTOR (stage),
- xevent->xconfigure.width,
- xevent->xconfigure.height);
-
- CLUTTER_UNSET_PRIVATE_FLAGS (stage_cogl->wrapper, CLUTTER_IN_RESIZE);
+ xevent->xconfigure.width / stage_x11->scale_factor,
+ xevent->xconfigure.height / stage_x11->scale_factor);
if (size_changed)
{
@@ -1161,26 +1186,6 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
}
break;
- case EnterNotify:
-#if HAVE_XFIXES
- if (!stage_x11->is_cursor_visible && !stage_x11->cursor_hidden_xfixes)
- {
- XFixesHideCursor (backend_x11->xdpy, stage_x11->xwin);
- stage_x11->cursor_hidden_xfixes = TRUE;
- }
-#endif
- break;
-
- case LeaveNotify:
-#if HAVE_XFIXES
- if (stage_x11->cursor_hidden_xfixes)
- {
- XFixesShowCursor (backend_x11->xdpy, stage_x11->xwin);
- stage_x11->cursor_hidden_xfixes = FALSE;
- }
-#endif
- break;
-
case Expose:
{
XExposeEvent *expose = (XExposeEvent *) xevent;
@@ -1197,10 +1202,10 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
expose->width,
expose->height);
- clip.x = expose->x;
- clip.y = expose->y;
- clip.width = expose->width;
- clip.height = expose->height;
+ clip.x = expose->x / stage_x11->scale_factor;
+ clip.y = expose->y / stage_x11->scale_factor;
+ clip.width = expose->width / stage_x11->scale_factor;
+ clip.height = expose->height / stage_x11->scale_factor;
clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), &clip);
}
break;
@@ -1366,8 +1371,8 @@ set_foreign_window_callback (ClutterActor *actor,
fwd->stage_x11->xwin = fwd->xwindow;
fwd->stage_x11->is_foreign_xwin = TRUE;
- fwd->stage_x11->xwin_width = fwd->geom.width;
- fwd->stage_x11->xwin_height = fwd->geom.height;
+ fwd->stage_x11->xwin_width = fwd->geom.width * fwd->stage_x11->scale_factor;
+ fwd->stage_x11->xwin_height = fwd->geom.height * fwd->stage_x11->scale_factor;
clutter_actor_set_size (actor, fwd->geom.width, fwd->geom.height);
@@ -1467,8 +1472,8 @@ clutter_x11_set_stage_foreign (ClutterStage *stage,
fwd.geom.x = x;
fwd.geom.y = y;
- fwd.geom.width = width;
- fwd.geom.height = height;
+ fwd.geom.width = width / stage_x11->scale_factor;
+ fwd.geom.height = height / stage_x11->scale_factor;
actor = CLUTTER_ACTOR (stage);
diff --git a/clutter/x11/clutter-stage-x11.h b/clutter/x11/clutter-stage-x11.h
index c7a7a1b3c..a359c991a 100644
--- a/clutter/x11/clutter-stage-x11.h
+++ b/clutter/x11/clutter-stage-x11.h
@@ -61,13 +61,14 @@ struct _ClutterStageX11
ClutterStageX11State wm_state;
+ int scale_factor;
+
guint is_foreign_xwin : 1;
guint fullscreening : 1;
guint is_cursor_visible : 1;
guint viewport_initialized : 1;
guint accept_focus : 1;
guint fullscreen_on_realize : 1;
- guint cursor_hidden_xfixes : 1;
};
struct _ClutterStageX11Class
@@ -86,7 +87,7 @@ struct _ClutterStageX11Class
KeyReleaseMask | \
ButtonPressMask | \
ButtonReleaseMask | \
- PointerMotionMask;
+ PointerMotionMask
GType _clutter_stage_x11_get_type (void) G_GNUC_CONST;
diff --git a/clutter/x11/clutter-x11-texture-pixmap.c b/clutter/x11/clutter-x11-texture-pixmap.c
index 62add1971..119fd4693 100644
--- a/clutter/x11/clutter-x11-texture-pixmap.c
+++ b/clutter/x11/clutter-x11-texture-pixmap.c
@@ -136,9 +136,9 @@ struct _ClutterX11TexturePixmapPrivate
static int _damage_event_base = 0;
-G_DEFINE_TYPE (ClutterX11TexturePixmap,
- clutter_x11_texture_pixmap,
- CLUTTER_TYPE_TEXTURE);
+G_DEFINE_TYPE_WITH_PRIVATE (ClutterX11TexturePixmap,
+ clutter_x11_texture_pixmap,
+ CLUTTER_TYPE_TEXTURE)
static gboolean
check_extensions (ClutterX11TexturePixmap *texture)
@@ -384,10 +384,7 @@ clutter_x11_texture_pixmap_real_queue_damage_redraw (
static void
clutter_x11_texture_pixmap_init (ClutterX11TexturePixmap *self)
{
- self->priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_X11_TYPE_TEXTURE_PIXMAP,
- ClutterX11TexturePixmapPrivate);
+ self->priv = clutter_x11_texture_pixmap_get_instance_private (self);
if (!check_extensions (self))
{
@@ -525,8 +522,6 @@ clutter_x11_texture_pixmap_class_init (ClutterX11TexturePixmapClass *klass)
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
GParamSpec *pspec;
- g_type_class_add_private (klass, sizeof (ClutterX11TexturePixmapPrivate));
-
actor_class->get_paint_volume = clutter_x11_texture_pixmap_get_paint_volume;
object_class->dispose = clutter_x11_texture_pixmap_dispose;
@@ -649,6 +644,10 @@ clutter_x11_texture_pixmap_class_init (ClutterX11TexturePixmapClass *klass)
/**
* ClutterX11TexturePixmap::update-area:
* @texture: the object which received the signal
+ * @x: X coordinate of the area to update
+ * @y: Y coordinate of the area to update
+ * @width: width of the area to update
+ * @height: height of the area to update
*
* The ::update-area signal is emitted to ask the texture to update its
* content from its source pixmap.
diff --git a/clutter/x11/clutter-x11-texture-pixmap.h b/clutter/x11/clutter-x11-texture-pixmap.h
index ee963551e..8d2dc3338 100644
--- a/clutter/x11/clutter-x11-texture-pixmap.h
+++ b/clutter/x11/clutter-x11-texture-pixmap.h
@@ -81,21 +81,30 @@ struct _ClutterX11TexturePixmapClass
gint height);
};
+CLUTTER_AVAILABLE_IN_ALL
GType clutter_x11_texture_pixmap_get_type (void) G_GNUC_CONST;
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor *clutter_x11_texture_pixmap_new (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor *clutter_x11_texture_pixmap_new_with_pixmap (Pixmap pixmap);
+CLUTTER_AVAILABLE_IN_ALL
ClutterActor *clutter_x11_texture_pixmap_new_with_window (Window window);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_texture_pixmap_set_automatic (ClutterX11TexturePixmap *texture,
gboolean setting);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_texture_pixmap_set_pixmap (ClutterX11TexturePixmap *texture,
Pixmap pixmap);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_texture_pixmap_set_window (ClutterX11TexturePixmap *texture,
Window window,
gboolean automatic);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_texture_pixmap_sync_window (ClutterX11TexturePixmap *texture);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_texture_pixmap_update_area (ClutterX11TexturePixmap *texture,
gint x,
gint y,
diff --git a/clutter/x11/clutter-x11.h b/clutter/x11/clutter-x11.h
index 6913280b9..285ea511d 100644
--- a/clutter/x11/clutter-x11.h
+++ b/clutter/x11/clutter-x11.h
@@ -85,7 +85,7 @@ typedef struct _ClutterX11XInputDevice ClutterX11XInputDevice;
* ClutterX11FilterFunc:
* @xev: Native X11 event structure
* @cev: Clutter event structure
- * @data: user data passed to the filter function
+ * @data: (closure): user data passed to the filter function
*
* Filter function for X11 native events.
*
@@ -97,32 +97,47 @@ typedef ClutterX11FilterReturn (*ClutterX11FilterFunc) (XEvent *xev,
ClutterEvent *cev,
gpointer data);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_trap_x_errors (void);
+CLUTTER_AVAILABLE_IN_ALL
gint clutter_x11_untrap_x_errors (void);
+CLUTTER_AVAILABLE_IN_ALL
Display *clutter_x11_get_default_display (void);
+CLUTTER_AVAILABLE_IN_ALL
int clutter_x11_get_default_screen (void);
+CLUTTER_AVAILABLE_IN_ALL
Window clutter_x11_get_root_window (void);
+CLUTTER_AVAILABLE_IN_ALL
XVisualInfo *clutter_x11_get_visual_info (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_set_display (Display * xdpy);
CLUTTER_DEPRECATED_FOR(clutter_x11_get_visual_info)
XVisualInfo *clutter_x11_get_stage_visual (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
Window clutter_x11_get_stage_window (ClutterStage *stage);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_x11_set_stage_foreign (ClutterStage *stage,
Window xwindow);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_add_filter (ClutterX11FilterFunc func,
gpointer data);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_remove_filter (ClutterX11FilterFunc func,
gpointer data);
+CLUTTER_AVAILABLE_IN_ALL
ClutterX11FilterReturn clutter_x11_handle_event (XEvent *xevent);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_disable_event_retrieval (void);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_x11_has_event_retrieval (void);
+CLUTTER_AVAILABLE_IN_ALL
ClutterStage *clutter_x11_get_stage_from_window (Window win);
CLUTTER_DEPRECATED_FOR(clutter_device_manager_peek_devices)
@@ -130,17 +145,24 @@ const GSList* clutter_x11_get_input_devices (void);
CLUTTER_DEPRECATED_IN_1_14
void clutter_x11_enable_xinput (void);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_x11_has_xinput (void);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_x11_has_composite_extension (void);
+CLUTTER_AVAILABLE_IN_ALL
void clutter_x11_set_use_argb_visual (gboolean use_argb);
+CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_x11_get_use_argb_visual (void);
+CLUTTER_AVAILABLE_IN_ALL
Time clutter_x11_get_current_event_time (void);
+CLUTTER_AVAILABLE_IN_ALL
gint clutter_x11_event_get_key_group (const ClutterEvent *event);
+CLUTTER_AVAILABLE_IN_ALL
guint clutter_x11_event_sequence_get_touch_detail (const ClutterEventSequence *sequence);
G_END_DECLS
diff --git a/configure.ac b/configure.ac
index 48beaedae..0a9a58000 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,8 +9,8 @@
# - increase clutter_micro_version to the next odd number
# - increase clutter_interface_version to the next odd number
m4_define([clutter_major_version], [1])
-m4_define([clutter_minor_version], [15])
-m4_define([clutter_micro_version], [1])
+m4_define([clutter_minor_version], [21])
+m4_define([clutter_micro_version], [3])
# • for stable releases: increase the interface age by 1 for each release;
# if the API changes, set to 0. interface_age and binary_age are used to
@@ -135,18 +135,19 @@ LT_INIT([disable-static])
AC_HEADER_STDC
# required versions for dependencies
-m4_define([glib_req_version], [2.31.19])
-m4_define([cogl_req_version], [1.14.0])
+m4_define([glib_req_version], [2.39.0])
+m4_define([cogl_req_version], [1.17.5])
m4_define([json_glib_req_version], [0.12.0])
m4_define([atk_req_version], [2.5.3])
-m4_define([cairo_req_version], [1.10])
+m4_define([cairo_req_version], [1.12.0])
m4_define([pango_req_version], [1.30])
-m4_define([gi_req_version], [0.9.5])
+m4_define([gi_req_version], [1.39.0])
m4_define([uprof_req_version], [0.3])
-m4_define([gtk_doc_req_version], [1.15])
-m4_define([xfixes_req_version], [3])
+m4_define([gtk_doc_req_version], [1.20])
m4_define([xcomposite_req_version], [0.4])
m4_define([gdk_req_version], [3.3.18])
+m4_define([libinput_req_version], [0.4.0])
+m4_define([libudev_req_version], [136])
AC_SUBST([GLIB_REQ_VERSION], [glib_req_version])
AC_SUBST([COGL_REQ_VERSION], [cogl_req_version])
@@ -157,9 +158,10 @@ AC_SUBST([PANGO_REQ_VERSION], [pango_req_version])
AC_SUBST([GI_REQ_VERSION], [gi_req_version])
AC_SUBST([UPROF_REQ_VERSION], [uprof_req_version])
AC_SUBST([GTK_DOC_REQ_VERSION], [gtk_doc_req_version])
-AC_SUBST([XFIXES_REQ_VERSION], [xfixes_req_version])
AC_SUBST([XCOMPOSITE_REQ_VERSION], [xcomposite_req_version])
AC_SUBST([GDK_REQ_VERSION], [gdk_req_version])
+AC_SUBST([LIBINPUT_REQ_VERSION], [libinput_req_version])
+AC_SUBST([LIBUDEV_REQ_VERSION], [libudev_req_version])
# Checks for typedefs, structures, and compiler characteristics.
AM_PATH_GLIB_2_0([glib_req_version],
@@ -191,6 +193,36 @@ AC_ARG_ENABLE([Bsymbolic],
AS_IF([test "x$enable_Bsymbolic" = "xyes"], [CLUTTER_LINK_FLAGS=-Wl[,]-Bsymbolic-functions])
AC_SUBST(CLUTTER_LINK_FLAGS)
+# Check for the visibility flags
+CLUTTER_HIDDEN_VISIBILITY_CFLAGS=""
+case "$host" in
+ *-*-mingw*)
+ dnl on mingw32 we do -fvisibility=hidden and __declspec(dllexport)
+ AC_DEFINE([_CLUTTER_EXTERN], [__attribute__((visibility("default"))) __declspec(dllexport) extern],
+ [defines how to decorate public symbols while building])
+ CFLAGS="${CFLAGS} -fvisibility=hidden"
+ ;;
+ *)
+ dnl on other compilers, check if we can do -fvisibility=hidden
+ SAVED_CFLAGS="${CFLAGS}"
+ CFLAGS="-fvisibility=hidden"
+ AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
+ AC_TRY_COMPILE([], [int main (void) { return 0; }],
+ AC_MSG_RESULT(yes)
+ enable_fvisibility_hidden=yes,
+ AC_MSG_RESULT(no)
+ enable_fvisibility_hidden=no)
+ CFLAGS="${SAVED_CFLAGS}"
+
+ AS_IF([test "${enable_fvisibility_hidden}" = "yes"], [
+ AC_DEFINE([_CLUTTER_EXTERN], [__attribute__((visibility("default"))) extern],
+ [defines how to decorate public symbols while building])
+ CLUTTER_HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden"
+ ])
+ ;;
+esac
+AC_SUBST(CLUTTER_HIDDEN_VISIBILITY_CFLAGS)
+
AC_CACHE_SAVE
dnl ========================================================================
@@ -205,7 +237,7 @@ experimental_backend=no
experimental_input_backend=no
# base dependencies for core
-CLUTTER_BASE_PC_FILES="cogl-1.0 >= $COGL_REQ_VERSION cairo-gobject >= $CAIRO_REQ_VERSION atk >= $ATK_REQ_VERSION pangocairo >= $PANGO_REQ_VERSION cogl-pango-1.0 json-glib-1.0 >= $JSON_GLIB_REQ_VERSION"
+CLUTTER_BASE_PC_FILES="cogl-1.0 >= $COGL_REQ_VERSION cogl-path-1.0 cairo-gobject >= $CAIRO_REQ_VERSION atk >= $ATK_REQ_VERSION pangocairo >= $PANGO_REQ_VERSION cogl-pango-1.0 json-glib-1.0 >= $JSON_GLIB_REQ_VERSION"
# private base dependencies
CLUTTER_BASE_PC_FILES_PRIVATE=""
@@ -307,9 +339,8 @@ AS_IF([test "x$enable_wayland" = "xyes"],
CLUTTER_BACKENDS="$CLUTTER_BACKENDS wayland"
CLUTTER_INPUT_BACKENDS="$CLUTTER_INPUT_BACKENDS wayland"
- experimental_backend="yes"
-
SUPPORT_WAYLAND=1
+ SUPPORT_COGL=1
PKG_CHECK_EXISTS([wayland-client wayland-cursor xkbcommon gdk-pixbuf-2.0],
[
@@ -337,7 +368,10 @@ AS_IF([test "x$enable_wayland_compositor" = "xyes"],
[
PKG_CHECK_EXISTS([wayland-server],
[BACKEND_PC_FILES="$BACKEND_PC_FILES wayland-server"], [])
+
SUPPORT_WAYLAND_COMPOSITOR=1
+ SUPPORT_COGL=1
+
CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES
#define CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT 1"
AC_DEFINE([HAVE_CLUTTER_WAYLAND_COMPOSITOR], [1], [Have Wayland compositor support])
@@ -359,8 +393,8 @@ AS_IF([test "x$enable_cex100" = "xyes"],
experimental_backend="yes"
- SUPPORT_COGL=1
SUPPORT_CEX100=1
+ SUPPORT_COGL=1
have_gdl=no
AC_CHECK_HEADERS([libgdl.h], [have_gdl=yes])
@@ -470,8 +504,7 @@ AS_IF([test "x$enable_evdev" = "xyes"],
AS_IF([test "x$have_evdev" = "xyes"],
[
CLUTTER_INPUT_BACKENDS="$CLUTTER_INPUT_BACKENDS evdev"
- BACKEND_PC_FILES="$BACKEND_PC_FILES gudev-1.0 xkbcommon"
- experimental_input_backend="yes"
+ BACKEND_PC_FILES_PRIVATE="$BACKEND_PC_FILES_PRIVATE libudev >= $LIBUDEV_REQ_VERSION libinput >= $LIBINPUT_REQ_VERSION xkbcommon"
AC_DEFINE([HAVE_EVDEV], [1], [Have evdev support for input handling])
SUPPORT_EVDEV=1
])
@@ -623,22 +656,6 @@ AS_IF([test "x$SUPPORT_X11" = "x1"],
[AC_MSG_ERROR([Not found])]
)
- # XFIXES (required)
- AC_MSG_CHECKING([for XFIXES extension >= $XFIXES_REQ_VERSION])
- PKG_CHECK_EXISTS([xfixes >= $XFIXES_REQ_VERSION], [have_xfixes=yes], [have_xfixes=no])
- AS_IF([test "x$have_xfixes" = "xyes"],
- [
- AC_DEFINE(HAVE_XFIXES, [1], [Define to 1 if we have the XFIXES X extension])
-
- X11_LIBS="$X11_LIBS -lXfixes"
- X11_PC_FILES="$X11_PC_FILES xfixes >= $XFIXES_REQ_VERSION"
- X11_EXTS="$X11_EXTS xfixes"
-
- AC_MSG_RESULT([found])
- ],
- [AC_MSG_ERROR([Not found])]
- )
-
# XDAMAGE (required)
AC_MSG_CHECKING([for XDAMAGE extension])
PKG_CHECK_EXISTS([xdamage], [have_xdamage=yes], [have_xdamage=no])
@@ -713,12 +730,6 @@ AS_IF([test "x$SUPPORT_X11" = "x1"],
AC_DEFINE([HAVE_XINPUT_2],
[1],
[Define to 1 if XI2 is available])
- ],
- [
- have_xinput2=no
- AC_DEFINE([HAVE_XINPUT],
- [1],
- [Define to 1 if XInput is available])
])
clutter_save_LIBS="$LIBS"
@@ -811,6 +822,18 @@ AS_CASE([$enable_pixbuf],
AM_CONDITIONAL([PIXBUF_TESTS], [test "x$pixbuf_tests" = "xyes"])
+# Check for cairo_set_device_scale, as we don't want to depend hard on
+# this until there is a stable release with it
+saved_CFLAGS="$CFLAGS"
+saved_LIBS="$LIBS"
+CAIRO_CFLAGS=`$PKG_CONFIG --cflags cairo`
+CAIRO_LIBS=`$PKG_CONFIG --libs cairo`
+CFLAGS="$CFLAGS $CAIRO_CFLAGS"
+LIBS="$CAIRO_LIBS $LIBS"
+AC_CHECK_FUNCS(cairo_surface_set_device_scale)
+LIBS="$saved_LIBS"
+CFLAGS="$saved_CFLAGS"
+
dnl === Enable debug level ====================================================
m4_define([debug_default], [m4_if(m4_eval(clutter_minor_version % 2), [1], [yes], [minimum])])
@@ -924,6 +947,7 @@ MAINTAINER_COMPILER_FLAGS="$MAINTAINER_COMPILER_FLAGS
-Wcast-align
-Wuninitialized
-Wno-strict-aliasing
+ -Werror=logical-op
-Werror=pointer-arith
-Werror=missing-declarations
-Werror=redundant-decls
@@ -1009,7 +1033,7 @@ AS_IF([test "x$use_gcov" = "xyes"],
AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
fi
- ltp_version_list="1.6 1.7 1.8 1.9"
+ ltp_version_list="1.6 1.7 1.8 1.9 1.10"
AC_CHECK_PROG(LTP, lcov, lcov)
AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
@@ -1137,16 +1161,7 @@ dnl = Build optionals =========================================================
dnl === Conformance test suite ================================================
-AC_ARG_ENABLE([conformance],
- [AS_HELP_STRING([--disable-conformance], [Whether the conformance tests should be built])],
- [],
- [enable_conformance=yes])
-
-AC_ARG_ENABLE([tests],
- [AS_HELP_STRING([--disable-tests], [Whether tests should be built])],
- [],
- [enable_tests=yes])
-AM_CONDITIONAL(BUILD_TESTS, [test "x$enable_tests" = "xyes" && test "x$enable_conformance" = "xyes"])
+GLIB_TESTS
AC_ARG_ENABLE([examples],
[AS_HELP_STRING([--disable-examples], [Whether examples should be built])],
@@ -1180,8 +1195,6 @@ AC_CONFIG_FILES([
tests/Makefile
tests/accessibility/Makefile
tests/conform/Makefile
- tests/conform/test-launcher.sh
- tests/data/Makefile
tests/interactive/Makefile
tests/interactive/wrapper.sh
tests/micro-bench/Makefile
@@ -1236,11 +1249,13 @@ echo " Build Additional Documentation: ${enable_docs} (Generate PDF: ${en
echo ""
echo " • Extra:"
echo " Build introspection data: ${enable_introspection}"
-echo " Build test suites: ${enable_tests}"
-if test "x$enable_tests" = "xyes"; then
+if test "x$x11_tests" = "xyes"; then
echo " Build X11-specific tests: ${x11_tests}"
+fi
+if test "x$pixbuf_tests" = "xyes"; then
echo " Build tests using GDK-Pixbuf: ${pixbuf_tests}"
fi
+echo " Install test suites: ${enable_installed_tests}"
echo " Build examples: ${enable_examples}"
# Clutter backend related flags
@@ -1279,7 +1294,7 @@ fi
echo ""
# General warning about experimental features
-if test "x$experimental_backend" = "xyes"; then
+if test "x$experimental_backend" = xyes -o "x$experimental_input_backend" = xyes; then
echo ""
echo "☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠"
echo "*WARNING* *WARNING* *WARNING* *WARNING* *WARNING* *WARNING* *WARNING*"
diff --git a/doc/cookbook/examples/Makefile.am b/doc/cookbook/examples/Makefile.am
index 054128f7b..236edf27a 100644
--- a/doc/cookbook/examples/Makefile.am
+++ b/doc/cookbook/examples/Makefile.am
@@ -4,7 +4,12 @@ NULL =
EXTRA_DIST =
-noinst_PROGRAMS = \
+noinst_PROGRAMS =
+examples_DATA =
+
+examplesdir = $(datadir)/clutter-1.0/cookbook/examples
+
+all_examples = \
actors-composite-main \
animations-complex \
animations-looping-animator \
@@ -51,22 +56,19 @@ noinst_PROGRAMS = \
events-buttons-lasso \
$(NULL)
-INCLUDES = \
- -I$(top_srcdir)/ \
- -I$(top_builddir)/ \
- -I$(top_srcdir)/clutter \
- -I$(top_builddir)/clutter \
- $(NULL)
-
LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_API_VERSION@.la -lm
AM_CFLAGS = $(CLUTTER_CFLAGS)
AM_CPPFLAGS = \
+ -I$(top_srcdir)/ \
+ -I$(top_builddir)/ \
+ -I$(top_srcdir)/clutter \
+ -I$(top_builddir)/clutter \
-DG_DISABLE_SINGLE_INCLUDES \
- -DCOGL_DISABLE_DEPRECATED \
+ -DCOGL_DISABLE_DEPRECATION_WARNINGS \
-DCLUTTER_DISABLE_DEPRECATION_WARNINGS \
- -DTESTS_DATA_DIR=\""$(top_srcdir)/tests/data/"\"
+ $(NULL)
AM_LDFLAGS = $(CLUTTER_LIBS) -export-dynamic
@@ -129,7 +131,14 @@ ui_data = \
$(srcdir)/script-ui.json \
$(NULL)
-examplesdir = $(datadir)/clutter-1.0/cookbook/examples
-examples_DATA = $(uidata) $(srcdir)/*.c $(srcdir)/*.h
+img_data = \
+ $(srcdir)/redhand.png \
+ $(srcdir)/smiley.png \
+ $(NULL)
+
+EXTRA_DIST += $(ui_data) $(img_data)
+
+examples_DATA += $(ui_data) $(img_data) $(srcdir)/*.c $(srcdir)/*.h
+noinst_PROGRAMS += $(all_examples)
-include $(top_srcdir)/build/autotools/Makefile.am.gitignore
diff --git a/doc/cookbook/examples/animations-rotating.c b/doc/cookbook/examples/animations-rotating.c
index 411d5b849..4c2d39f43 100644
--- a/doc/cookbook/examples/animations-rotating.c
+++ b/doc/cookbook/examples/animations-rotating.c
@@ -52,7 +52,7 @@ main (int argc, char *argv[])
clutter_align_constraint_new (stage, CLUTTER_ALIGN_Y_AXIS, 0.5));
clutter_texture_set_sync_size (CLUTTER_TEXTURE (texture), TRUE);
clutter_texture_set_from_file (CLUTTER_TEXTURE (texture),
- TESTS_DATA_DIR "/redhand.png",
+ "redhand.png",
&error);
if (error != NULL)
diff --git a/doc/cookbook/examples/events-mouse-scroll.c b/doc/cookbook/examples/events-mouse-scroll.c
index e491c14de..1b2c8386b 100644
--- a/doc/cookbook/examples/events-mouse-scroll.c
+++ b/doc/cookbook/examples/events-mouse-scroll.c
@@ -68,7 +68,7 @@ main (int argc, char *argv[])
ClutterActor *viewport;
ClutterActor *texture;
- gchar *image_file_path = TESTS_DATA_DIR "/redhand.png";
+ const gchar *image_file_path = "redhand.png";
if (argc > 1)
{
diff --git a/doc/cookbook/examples/events-pointer-motion-scribbler.c b/doc/cookbook/examples/events-pointer-motion-scribbler.c
index 4d5168dc9..de065332e 100644
--- a/doc/cookbook/examples/events-pointer-motion-scribbler.c
+++ b/doc/cookbook/examples/events-pointer-motion-scribbler.c
@@ -2,6 +2,7 @@
* Simple scribble application: move mouse over the dark yellow
* rectangle to draw brighter yellow lines
*/
+
#include
static const ClutterColor stage_color = { 0x33, 0x33, 0x55, 0xff };
diff --git a/doc/cookbook/examples/layouts-bind-constraint-overlay.c b/doc/cookbook/examples/layouts-bind-constraint-overlay.c
index 77c209f7f..856955c70 100644
--- a/doc/cookbook/examples/layouts-bind-constraint-overlay.c
+++ b/doc/cookbook/examples/layouts-bind-constraint-overlay.c
@@ -73,7 +73,7 @@ main (int argc, char *argv[])
ClutterAction *click;
GError *error = NULL;
- gchar *filename = TESTS_DATA_DIR "/redhand.png";
+ const gchar *filename = "redhand.png";
if (argc > 1)
filename = argv[1];
diff --git a/doc/cookbook/examples/layouts-stacking.c b/doc/cookbook/examples/layouts-stacking.c
index 9ee340b4c..d1d6321a5 100644
--- a/doc/cookbook/examples/layouts-stacking.c
+++ b/doc/cookbook/examples/layouts-stacking.c
@@ -20,7 +20,7 @@ main (int argc, char *argv[])
GError *error = NULL;
gfloat width;
- gchar *filename = TESTS_DATA_DIR "/redhand.png";
+ const gchar *filename = "redhand.png";
if (argc > 1)
filename = argv[1];
diff --git a/tests/data/redhand.png b/doc/cookbook/examples/redhand.png
similarity index 100%
rename from tests/data/redhand.png
rename to doc/cookbook/examples/redhand.png
diff --git a/doc/cookbook/examples/textures-reflection.c b/doc/cookbook/examples/textures-reflection.c
index 170e701c2..03c970d66 100644
--- a/doc/cookbook/examples/textures-reflection.c
+++ b/doc/cookbook/examples/textures-reflection.c
@@ -86,7 +86,7 @@ main (int argc, char *argv[])
texture = clutter_texture_new ();
clutter_texture_set_from_file (CLUTTER_TEXTURE (texture),
- TESTS_DATA_DIR "/redhand.png",
+ "redhand.png",
&error);
clutter_actor_add_constraint (texture, clutter_align_constraint_new (stage, CLUTTER_ALIGN_X_AXIS, 0.5));
clutter_actor_add_constraint (texture, clutter_align_constraint_new (stage, CLUTTER_ALIGN_Y_AXIS, 0.2));
diff --git a/doc/reference/cally/Makefile.am b/doc/reference/cally/Makefile.am
index 797d463e6..107cf22da 100644
--- a/doc/reference/cally/Makefile.am
+++ b/doc/reference/cally/Makefile.am
@@ -29,7 +29,7 @@ SCAN_OPTIONS=--deprecated-guards="CALLY_DISABLE_DEPRECATED"
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
-MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=cally
+MKDB_OPTIONS=--output-format=xml --name-space=cally
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
@@ -78,7 +78,12 @@ expand_content_files= \
# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
-INCLUDES=-I$(top_srcdir) -I$(top_srcdir)/clutter -I$(top_srcdir)/clutter/cogl -I$(top_builddir) -I$(top_builddir)/clutter -I$(top_builddir)/clutter/cogl $(CLUTTER_CFLAGS)
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/clutter \
+ -I$(top_builddir) \
+ -I$(top_builddir)/clutter
+AM_CFLAGS = $(CLUTTER_CFLAGS)
GTKDOC_LIBS=$(top_builddir)/clutter/libclutter-@CLUTTER_API_VERSION@.la $(CLUTTER_LIBS)
# This includes the standard gtk-doc make rules, copied by gtkdocize.
diff --git a/doc/reference/clutter/Makefile.am b/doc/reference/clutter/Makefile.am
index 0fb073746..8a280691e 100644
--- a/doc/reference/clutter/Makefile.am
+++ b/doc/reference/clutter/Makefile.am
@@ -16,7 +16,7 @@ SCAN_OPTIONS = --deprecated-guards="CLUTTER_DISABLE_DEPRECATED"
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
-MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space=clutter
+MKDB_OPTIONS = --output-format=xml --name-space=clutter
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
@@ -37,13 +37,15 @@ FIXXREF_OPTIONS = \
HFILE_GLOB = \
$(top_srcdir)/clutter/*.h \
$(top_builddir)/clutter/*.h \
+ $(top_srcdir)/clutter/deprecated/*.h \
$(top_srcdir)/clutter/x11/clutter-x11.h \
$(top_srcdir)/clutter/x11/clutter-x11-texture-pixmap.h \
$(top_srcdir)/clutter/x11/clutter-glx-texture-pixmap.h \
$(top_srcdir)/clutter/egl/clutter-egl.h \
- $(top_srcdir)/clutter/cex100/clutter-cex100.h \
+ $(top_builddir)/clutter/cex100/clutter-cex100.h \
$(top_srcdir)/clutter/win32/clutter-win32.h \
$(top_srcdir)/clutter/gdk/clutter-gdk.h \
+ $(top_srcdir)/clutter/wayland/clutter-wayland.h \
$(top_srcdir)/clutter/wayland/clutter-wayland-compositor.h \
$(top_srcdir)/clutter/wayland/clutter-wayland-surface.h
@@ -55,7 +57,8 @@ CFILE_GLOB = \
$(top_srcdir)/clutter/gdk/*.c \
$(top_srcdir)/clutter/cex100/*.c \
$(top_srcdir)/clutter/egl/*.c \
- $(top_srcdir)/clutter/wayland/*.c
+ $(top_srcdir)/clutter/wayland/*.c \
+ $(top_srcdir)/clutter/deprecated/*.c
# Header files to ignore when scanning.
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
@@ -69,6 +72,7 @@ IGNORE_HFILES = \
clutter-cogl-compat.h \
clutter-color-static.h \
clutter-config.h \
+ clutter-constraint-private.h \
clutter-debug.h \
clutter-deprecated.h \
clutter-device-manager-private.h \
@@ -89,6 +93,7 @@ IGNORE_HFILES = \
clutter-private.h \
clutter-profile.h \
clutter-script-private.h \
+ clutter-settings-private.h \
clutter-stage-manager-private.h \
clutter-stage-private.h \
clutter-stage-window.h \
@@ -113,6 +118,7 @@ EXTRA_HFILES = \
$(top_srcdir)/clutter/cex100/clutter-cex100.h \
$(top_srcdir)/clutter/win32/clutter-win32.h \
$(top_srcdir)/clutter/gdk/clutter-gdk.h \
+ $(top_srcdir)/clutter/wayland/clutter-wayland.h \
$(top_srcdir)/clutter/wayland/clutter-wayland-compositor.h \
$(top_srcdir)/clutter/wayland/clutter-wayland-surface.h
@@ -168,7 +174,13 @@ expand_content_files = \
# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/clutter -I$(top_builddir) -I$(top_builddir)/clutter $(CLUTTER_CFLAGS) -DCLUTTER_DISABLE_DEPRECATION_WARNINGS
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/clutter \
+ -I$(top_builddir) \
+ -I$(top_builddir)/clutter \
+ -DCLUTTER_DISABLE_DEPRECATION_WARNINGS
+AM_CFLAGS = $(CLUTTER_CFLAGS)
GTKDOC_LIBS = $(top_builddir)/clutter/libclutter-@CLUTTER_API_VERSION@.la $(CLUTTER_LIBS)
# This includes the standard gtk-doc make rules, copied by gtkdocize.
diff --git a/doc/reference/clutter/clutter-docs.xml.in b/doc/reference/clutter/clutter-docs.xml.in
index 032f6931b..e00ccf9ba 100644
--- a/doc/reference/clutter/clutter-docs.xml.in
+++ b/doc/reference/clutter/clutter-docs.xml.in
@@ -72,7 +72,6 @@
Base actors
-
@@ -85,7 +84,6 @@
-
@@ -222,6 +220,7 @@
+
@@ -262,6 +261,8 @@
+
+
@@ -357,6 +358,26 @@
+
+ Index of new symbols in 1.16
+
+
+
+
+ Index of new symbols in 1.18
+
+
+
+
+ Index of new symbols in 1.20
+
+
+
+
+ Index of new symbols in 1.22
+
+
+
License
diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt
index 1fd6837c6..5248a0500 100644
--- a/doc/reference/clutter/clutter-sections.txt
+++ b/doc/reference/clutter/clutter-sections.txt
@@ -297,6 +297,7 @@ clutter_actor_unrealize
clutter_actor_paint
clutter_actor_continue_paint
clutter_actor_queue_redraw
+clutter_actor_queue_redraw_with_clip
clutter_actor_queue_relayout
clutter_actor_destroy
clutter_actor_event
@@ -304,6 +305,7 @@ clutter_actor_should_pick_paint
clutter_actor_map
clutter_actor_unmap
clutter_actor_has_overlaps
+clutter_actor_has_mapped_clones
ClutterAllocationFlags
@@ -624,26 +626,14 @@ clutter_texture_get_type
ClutterStage
ClutterStage
ClutterStageClass
-CLUTTER_STAGE_WIDTH
-CLUTTER_STAGE_HEIGHT
-clutter_stage_get_default
clutter_stage_new
-clutter_stage_is_default
-clutter_stage_set_color
-clutter_stage_get_color
-clutter_stage_set_fullscreen
-clutter_stage_get_fullscreen
-clutter_stage_show_cursor
-clutter_stage_hide_cursor
ClutterPickMode
clutter_stage_get_actor_at_pos
clutter_stage_ensure_current
clutter_stage_ensure_viewport
clutter_stage_ensure_redraw
-clutter_stage_queue_redraw
-clutter_actor_queue_redraw_with_clip
clutter_stage_event
clutter_stage_set_key_focus
clutter_stage_get_key_focus
@@ -657,8 +647,6 @@ clutter_stage_get_minimum_size
clutter_stage_set_no_clear_hint
clutter_stage_get_no_clear_hint
clutter_stage_get_redraw_clip_bounds
-clutter_stage_set_accept_focus
-clutter_stage_get_accept_focus
clutter_stage_get_motion_events_enabled
clutter_stage_set_motion_events_enabled
@@ -672,8 +660,25 @@ clutter_stage_set_title
clutter_stage_get_title
clutter_stage_set_user_resizable
clutter_stage_get_user_resizable
+clutter_stage_set_fullscreen
+clutter_stage_get_fullscreen
+clutter_stage_show_cursor
+clutter_stage_hide_cursor
+clutter_stage_set_accept_focus
+clutter_stage_get_accept_focus
+clutter_stage_set_sync_delay
+clutter_stage_skip_sync_delay
+
+
+CLUTTER_STAGE_WIDTH
+CLUTTER_STAGE_HEIGHT
+clutter_stage_get_default
+clutter_stage_is_default
+clutter_stage_set_color
+clutter_stage_get_color
+clutter_stage_queue_redraw
ClutterFog
clutter_stage_set_use_fog
clutter_stage_get_use_fog
@@ -971,6 +976,7 @@ clutter_backend_get_cogl_context
clutter_check_windowing_backend
+clutter_set_windowing_backend
CLUTTER_BACKEND
@@ -1101,6 +1107,7 @@ clutter_event_set_coords
clutter_event_get_coords
clutter_event_set_state
clutter_event_get_state
+clutter_event_get_state_full
clutter_event_set_time
clutter_event_get_time
clutter_event_set_source
@@ -1123,6 +1130,9 @@ clutter_event_get
clutter_event_peek
clutter_event_put
clutter_events_pending
+ClutterEventFilterFunc
+clutter_event_add_filter
+clutter_event_remove_filter
CLUTTER_BUTTON_PRIMARY
@@ -1165,9 +1175,11 @@ clutter_get_current_event_time
clutter_get_current_event
+CLUTTER_TYPE_EVENT_SEQUENCE
CLUTTER_TYPE_EVENT
ClutterAnyEvent
+clutter_event_sequence_get_type
clutter_event_get_type
@@ -1187,6 +1199,7 @@ clutter_input_device_set_enabled
clutter_input_device_get_enabled
clutter_input_device_get_associated_device
clutter_input_device_get_slave_devices
+clutter_input_device_get_modifier_state
clutter_input_device_keycode_to_evdev
@@ -1321,6 +1334,18 @@ clutter_ungrab_pointer_for_device
clutter_do_event
+
+CLUTTER_TEST_UNIT
+CLUTTER_TEST_SUITE
+clutter_test_init
+clutter_test_run
+clutter_test_add
+clutter_test_add_data
+clutter_test_add_data_full
+clutter_test_get_stage
+clutter_test_check_actor_at_point
+clutter_test_check_color_at_point
+
CLUTTER_INIT_ERROR
@@ -1423,6 +1448,17 @@ ClutterGLXTexturePixmapPrivate
clutter_glx_texture_pixmap_get_type
+
+clutter-wayland
+Wayland specific support
+clutter_wayland_input_device_get_wl_seat
+clutter_wayland_stage_get_wl_shell_surface
+clutter_wayland_stage_get_wl_surface
+clutter_wayland_stage_set_wl_surface
+clutter_wayland_set_display
+clutter_wayland_disable_event_retrieval
+
+
clutter-wayland-compositor
Wayland compositor specific support
@@ -1501,6 +1537,10 @@ CLUTTER_VERSION_1_8
CLUTTER_VERSION_1_10
CLUTTER_VERSION_1_12
CLUTTER_VERSION_1_14
+CLUTTER_VERSION_1_16
+CLUTTER_VERSION_1_18
+CLUTTER_VERSION_1_20
+CLUTTER_VERSION_1_22
CLUTTER_VERSION_MAX_ALLOWED
CLUTTER_VERSION_MIN_REQUIRED
@@ -1513,6 +1553,7 @@ clutter_check_version
CLUTTER_VERSION_CUR_STABLE
CLUTTER_VERSION_PREV_STABLE
+CLUTTER_AVAILABLE_IN_ALL
CLUTTER_AVAILABLE_IN_1_0
CLUTTER_AVAILABLE_IN_1_2
CLUTTER_AVAILABLE_IN_1_4
@@ -1521,6 +1562,10 @@ CLUTTER_AVAILABLE_IN_1_8
CLUTTER_AVAILABLE_IN_1_10
CLUTTER_AVAILABLE_IN_1_12
CLUTTER_AVAILABLE_IN_1_14
+CLUTTER_AVAILABLE_IN_1_16
+CLUTTER_AVAILABLE_IN_1_18
+CLUTTER_AVAILABLE_IN_1_20
+CLUTTER_AVAILABLE_IN_1_22
CLUTTER_DEPRECATED_IN_1_0
CLUTTER_DEPRECATED_IN_1_0_FOR
CLUTTER_DEPRECATED_IN_1_2
@@ -1537,6 +1582,14 @@ CLUTTER_DEPRECATED_IN_1_12
CLUTTER_DEPRECATED_IN_1_12_FOR
CLUTTER_DEPRECATED_IN_1_14
CLUTTER_DEPRECATED_IN_1_14_FOR
+CLUTTER_DEPRECATED_IN_1_16
+CLUTTER_DEPRECATED_IN_1_16_FOR
+CLUTTER_DEPRECATED_IN_1_18
+CLUTTER_DEPRECATED_IN_1_18_FOR
+CLUTTER_DEPRECATED_IN_1_20
+CLUTTER_DEPRECATED_IN_1_20_FOR
+CLUTTER_DEPRECATED_IN_1_22
+CLUTTER_DEPRECATED_IN_1_22_FOR
CLUTTER_UNAVAILABLE
@@ -2038,6 +2091,7 @@ clutter_text_set_cursor_visible
clutter_text_get_cursor_visible
clutter_text_set_cursor_size
clutter_text_get_cursor_size
+clutter_text_get_cursor_rect
clutter_text_activate
@@ -2120,6 +2174,10 @@ clutter_binding_pool_get_type
clutter_egl_display
clutter_eglx_display
clutter_egl_get_egl_display
+clutter_egl_set_kms_fd
+clutter_egl_freeze_master_clock
+clutter_egl_thaw_master_clock
+
@@ -2298,6 +2356,8 @@ clutter_flow_layout_set_homogeneous
clutter_flow_layout_get_homogeneous
clutter_flow_layout_set_orientation
clutter_flow_layout_get_orientation
+clutter_flow_layout_set_snap_to_grid
+clutter_flow_layout_get_snap_to_grid
clutter_flow_layout_set_column_spacing
@@ -2958,6 +3018,11 @@ clutter_gesture_action_set_n_touch_points
clutter_gesture_action_get_n_current_points
clutter_gesture_action_get_sequence
clutter_gesture_action_get_device
+clutter_gesture_action_get_threshold_trigger_distance
+clutter_gesture_action_set_threshold_trigger_distance
+ClutterGestureTriggerEdge
+clutter_gesture_action_set_threshold_trigger_edge
+clutter_gesture_action_get_threshold_trigger_edge
clutter_gesture_action_cancel
CLUTTER_GESTURE_ACTION
@@ -2969,6 +3034,7 @@ CLUTTER_TYPE_GESTURE_ACTION
ClutterGestureActionPrivate
clutter_gesture_action_get_type
+clutter_gesture_action_get_threshold_trigger_egde
@@ -3192,6 +3258,8 @@ ClutterCanvas
ClutterCanvasClass
clutter_canvas_new
clutter_canvas_set_size
+clutter_canvas_set_scale_factor
+clutter_canvas_get_scale_factor
CLUTTER_TYPE_CANVAS
CLUTTER_CANVAS
diff --git a/doc/reference/clutter/running-clutter.xml b/doc/reference/clutter/running-clutter.xml
index 0469ead38..081174431 100644
--- a/doc/reference/clutter/running-clutter.xml
+++ b/doc/reference/clutter/running-clutter.xml
@@ -26,6 +26,51 @@
+
+ CLUTTER_BACKEND
+
+ Changes the windowing system backend used by Clutter.
+ The allowed values for this environment variable depend on
+ the configuration options used when compiling Clutter. The
+ available values are:
+
+ x11, for the X11 backend
+ wayland, for the Wayland backend
+ win32, for the Windows backend
+ osx, for the MacOS X backend
+ gsk, for the GDK backend
+ eglnative, for the EGL/KMS backend
+ cex100, for the CEx100 backend
+
+ All of the above options except for the eglnative
+ and cex100 backends also have an input backend.
+
+
+
+ CLUTTER_INPUT_BACKEND
+
+ Changes the input backend used by Clutter.
+ The allowed values for this environment variable depend on
+ the configuration options used when compiling Clutter. The
+ available values are:
+
+ tslib
+ evdev
+ null
+
+ This environment variable is only useful for setting the input
+ backend when using a windowing system backend that does not have an
+ input API, like the eglnative or the cex100
+ windowing system backends.
+
+
+
+ CLUTTER_SCALE
+
+ Forces the window scaling factor to that value
+ inside Clutter instead of relying on what backends detect.
+
+
CLUTTER_TEXT_DIRECTION
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 4c6998f64..cb80c9ff3 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -22,12 +22,6 @@ all_examples += \
image-content
endif
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- -I$(top_srcdir)/clutter \
- -I$(top_builddir)/clutter
-
LDADD = \
$(top_builddir)/clutter/libclutter-@CLUTTER_API_VERSION@.la \
$(CLUTTER_LIBS) \
@@ -37,10 +31,15 @@ LDADD = \
AM_CFLAGS = $(CLUTTER_CFLAGS) $(GDK_PIXBUF_CFLAGS) $(MAINTAINER_CFLAGS)
AM_CPPFLAGS = \
- -DTESTS_DATADIR=\""$(abs_top_srcdir)/tests/data"\" \
-DG_DISABLE_SINGLE_INCLUDES \
- -DGLIB_DISABLE_DEPRECATION_WARNINGS
+ -DGLIB_DISABLE_DEPRECATION_WARNINGS \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/clutter \
+ -I$(top_builddir)/clutter
noinst_PROGRAMS = $(all_examples)
+EXTRA_DIST = redhand.png
+
-include $(top_srcdir)/build/autotools/Makefile.am.gitignore
diff --git a/examples/bin-layout.c b/examples/bin-layout.c
index 7dc9b967d..b6098d6fe 100644
--- a/examples/bin-layout.c
+++ b/examples/bin-layout.c
@@ -222,7 +222,7 @@ main (int argc, char *argv[])
canvas);
/* we use GdkPixbuf to load an image from our data directory */
- pixbuf = gdk_pixbuf_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL);
+ pixbuf = gdk_pixbuf_new_from_file ("redhand.png", NULL);
image = clutter_image_new ();
clutter_image_set_data (CLUTTER_IMAGE (image),
gdk_pixbuf_get_pixels (pixbuf),
diff --git a/examples/drop-action.c b/examples/drop-action.c
index c369dba15..55615e120 100644
--- a/examples/drop-action.c
+++ b/examples/drop-action.c
@@ -47,7 +47,6 @@ on_drag_end (ClutterDragAction *action,
clutter_actor_set_easing_mode (handle, CLUTTER_EASE_OUT_BOUNCE);
clutter_actor_set_position (handle, x_pos, y_pos);
clutter_actor_set_opacity (handle, 0);
- clutter_actor_restore_easing_state (handle);
}
else
diff --git a/examples/flow-layout.c b/examples/flow-layout.c
index f21c3a45b..f68888467 100644
--- a/examples/flow-layout.c
+++ b/examples/flow-layout.c
@@ -9,6 +9,7 @@ static gboolean is_homogeneous = FALSE;
static gboolean vertical = FALSE;
static gboolean random_size = FALSE;
static gboolean fixed_size = FALSE;
+static gboolean snap_to_grid = TRUE;
static gint n_rects = N_RECTS;
static gint x_spacing = 0;
@@ -64,6 +65,13 @@ static GOptionEntry entries[] = {
&fixed_size,
"Fix the layout size", NULL
},
+ {
+ "no-snap-to-grid", 's',
+ G_OPTION_FLAG_REVERSE,
+ G_OPTION_ARG_NONE,
+ &snap_to_grid,
+ "Don't snap elements to grid", NULL
+ },
{ NULL }
};
@@ -102,6 +110,8 @@ main (int argc, char *argv[])
x_spacing);
clutter_flow_layout_set_row_spacing (CLUTTER_FLOW_LAYOUT (layout),
y_spacing);
+ clutter_flow_layout_set_snap_to_grid (CLUTTER_FLOW_LAYOUT (layout),
+ snap_to_grid);
box = clutter_actor_new ();
clutter_actor_set_layout_manager (box, layout);
diff --git a/examples/image-content.c b/examples/image-content.c
index a661d2caa..c9c01c6ec 100644
--- a/examples/image-content.c
+++ b/examples/image-content.c
@@ -27,8 +27,8 @@ static int cur_gravity = 0;
static void
on_tap (ClutterTapAction *action,
- ClutterActor *actor,
- ClutterText *label)
+ ClutterActor *actor,
+ ClutterText *label)
{
gchar *str;
@@ -49,7 +49,7 @@ on_tap (ClutterTapAction *action,
int
main (int argc, char *argv[])
{
- ClutterActor *stage, *box, *text;
+ ClutterActor *stage, *text;
ClutterContent *image;
ClutterAction *action;
GdkPixbuf *pixbuf;
@@ -63,18 +63,13 @@ main (int argc, char *argv[])
clutter_stage_set_title (CLUTTER_STAGE (stage), "Content Box");
clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);
g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
+ clutter_actor_set_margin_top (stage, 12);
+ clutter_actor_set_margin_right (stage, 12);
+ clutter_actor_set_margin_bottom (stage, 12);
+ clutter_actor_set_margin_left (stage, 12);
clutter_actor_show (stage);
- box = clutter_actor_new ();
- clutter_actor_set_name (box, "Image");
- clutter_actor_set_margin_top (box, 12);
- clutter_actor_set_margin_right (box, 12);
- clutter_actor_set_margin_bottom (box, 12);
- clutter_actor_set_margin_left (box, 12);
- clutter_actor_add_constraint (box, clutter_bind_constraint_new (stage, CLUTTER_BIND_SIZE, 0.0));
- clutter_actor_add_child (stage, box);
-
- pixbuf = gdk_pixbuf_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL);
+ pixbuf = gdk_pixbuf_new_from_file ("redhand.png", NULL);
image = clutter_image_new ();
clutter_image_set_data (CLUTTER_IMAGE (image),
gdk_pixbuf_get_pixels (pixbuf),
@@ -87,11 +82,11 @@ main (int argc, char *argv[])
NULL);
g_object_unref (pixbuf);
- clutter_actor_set_content_scaling_filters (box,
+ clutter_actor_set_content_scaling_filters (stage,
CLUTTER_SCALING_FILTER_TRILINEAR,
CLUTTER_SCALING_FILTER_LINEAR);
- clutter_actor_set_content_gravity (box, gravities[n_gravities - 1].gravity);
- clutter_actor_set_content (box, image);
+ clutter_actor_set_content_gravity (stage, gravities[n_gravities - 1].gravity);
+ clutter_actor_set_content (stage, image);
g_object_unref (image);
str = g_strconcat ("Content gravity: ",
@@ -107,8 +102,7 @@ main (int argc, char *argv[])
action = clutter_tap_action_new ();
g_signal_connect (action, "tap", G_CALLBACK (on_tap), text);
- clutter_actor_set_reactive (box, TRUE);
- clutter_actor_add_action (box, action);
+ clutter_actor_add_action (stage, action);
clutter_main ();
diff --git a/examples/pan-action.c b/examples/pan-action.c
index 71dcb24ae..e8733056b 100644
--- a/examples/pan-action.c
+++ b/examples/pan-action.c
@@ -15,7 +15,7 @@ create_content_actor (void)
content = clutter_actor_new ();
clutter_actor_set_size (content, 720, 720);
- pixbuf = gdk_pixbuf_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL);
+ pixbuf = gdk_pixbuf_new_from_file ("redhand.png", NULL);
image = clutter_image_new ();
clutter_image_set_data (CLUTTER_IMAGE (image),
gdk_pixbuf_get_pixels (pixbuf),
diff --git a/examples/redhand.png b/examples/redhand.png
new file mode 100644
index 000000000..c07d8acd3
Binary files /dev/null and b/examples/redhand.png differ
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 91c013a3f..1eb2e0efb 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -45,7 +45,6 @@ clutter/clutter-snap-constraint.c
clutter/clutter-stage.c
clutter/clutter-stage-window.c
clutter/clutter-swipe-action.c
-clutter/clutter-table-layout.c
clutter/clutter-tap-action.c
clutter/clutter-text-buffer.c
clutter/clutter-text.c
@@ -71,6 +70,7 @@ clutter/deprecated/clutter-media.c
clutter/deprecated/clutter-rectangle.c
clutter/deprecated/clutter-shader.c
clutter/deprecated/clutter-state.c
+clutter/deprecated/clutter-table-layout.c
clutter/deprecated/clutter-texture.c
clutter/evdev/clutter-input-device-evdev.c
clutter/gdk/clutter-backend-gdk.c
diff --git a/po/an.po b/po/an.po
new file mode 100644
index 000000000..f61a5af5e
--- /dev/null
+++ b/po/an.po
@@ -0,0 +1,2841 @@
+# Aragonese translation for clutter.
+# Copyright (C) 2013 clutter's COPYRIGHT HOLDER
+# This file is distributed under the same license as the clutter package.
+# Daniel Martínez , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: clutter clutter-1.16\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=clutter&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-02-08 16:11+0000\n"
+"PO-Revision-Date: 2014-02-08 19:13+0100\n"
+"Last-Translator: Jorge Pérez Pérez \n"
+"Language-Team: Aragonese \n"
+"Language: an\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.3\n"
+
+#: ../clutter/clutter-actor.c:6214
+msgid "X coordinate"
+msgstr "Coordenada X"
+
+#: ../clutter/clutter-actor.c:6215
+msgid "X coordinate of the actor"
+msgstr "X coordinate of the actor"
+
+#: ../clutter/clutter-actor.c:6233
+msgid "Y coordinate"
+msgstr "Coordenada Y"
+
+#: ../clutter/clutter-actor.c:6234
+msgid "Y coordinate of the actor"
+msgstr "A coordenada Y de l'actor"
+
+#: ../clutter/clutter-actor.c:6256
+msgid "Position"
+msgstr "Posición"
+
+#: ../clutter/clutter-actor.c:6257
+msgid "The position of the origin of the actor"
+msgstr "A posición d'orichen de l'actor"
+
+#: ../clutter/clutter-actor.c:6274 ../clutter/clutter-canvas.c:247
+#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:474
+msgid "Width"
+msgstr "Amplaria"
+
+#: ../clutter/clutter-actor.c:6275
+msgid "Width of the actor"
+msgstr "Amplaria de l'actor"
+
+#: ../clutter/clutter-actor.c:6293 ../clutter/clutter-canvas.c:263
+#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:490
+msgid "Height"
+msgstr "Altura"
+
+#: ../clutter/clutter-actor.c:6294
+msgid "Height of the actor"
+msgstr "Altura de l'actor"
+
+#: ../clutter/clutter-actor.c:6315
+msgid "Size"
+msgstr "Grandaria"
+
+#: ../clutter/clutter-actor.c:6316
+msgid "The size of the actor"
+msgstr "A grandaria de l'actor"
+
+#: ../clutter/clutter-actor.c:6334
+msgid "Fixed X"
+msgstr "X fixa"
+
+#: ../clutter/clutter-actor.c:6335
+msgid "Forced X position of the actor"
+msgstr "Posición X aforzada de l'actor"
+
+#: ../clutter/clutter-actor.c:6352
+msgid "Fixed Y"
+msgstr "Y fixa"
+
+#: ../clutter/clutter-actor.c:6353
+msgid "Forced Y position of the actor"
+msgstr "Posición Y aforzada de l'actor"
+
+#: ../clutter/clutter-actor.c:6368
+msgid "Fixed position set"
+msgstr "Posición fixa establida"
+
+#: ../clutter/clutter-actor.c:6369
+msgid "Whether to use fixed positioning for the actor"
+msgstr "Indica si s'usa una posición fixa ta l'actor"
+
+#: ../clutter/clutter-actor.c:6387
+msgid "Min Width"
+msgstr "Amplaria minima"
+
+#: ../clutter/clutter-actor.c:6388
+msgid "Forced minimum width request for the actor"
+msgstr "Solicitut d'amplaria minima aforzada ta l'actor"
+
+#: ../clutter/clutter-actor.c:6406
+msgid "Min Height"
+msgstr "Altura minima"
+
+#: ../clutter/clutter-actor.c:6407
+msgid "Forced minimum height request for the actor"
+msgstr "Solicitut d'altura minima aforzada ta l'actor"
+
+#: ../clutter/clutter-actor.c:6425
+msgid "Natural Width"
+msgstr "Amplaria natural"
+
+#: ../clutter/clutter-actor.c:6426
+msgid "Forced natural width request for the actor"
+msgstr "Solicitut d'amplaria natural aforzada ta l'actor"
+
+#: ../clutter/clutter-actor.c:6444
+msgid "Natural Height"
+msgstr "Altura natural"
+
+#: ../clutter/clutter-actor.c:6445
+msgid "Forced natural height request for the actor"
+msgstr "Solicitut d'altura natural aforzada ta l'actor"
+
+#: ../clutter/clutter-actor.c:6460
+msgid "Minimum width set"
+msgstr "Amplaria minima establida"
+
+#: ../clutter/clutter-actor.c:6461
+msgid "Whether to use the min-width property"
+msgstr "Indica si s'usa a propiedat «amplaria minima»"
+
+#: ../clutter/clutter-actor.c:6475
+msgid "Minimum height set"
+msgstr "Altura minima establida"
+
+#: ../clutter/clutter-actor.c:6476
+msgid "Whether to use the min-height property"
+msgstr "Indica si s'usa a propiedat «altura minima»"
+
+#: ../clutter/clutter-actor.c:6490
+msgid "Natural width set"
+msgstr "Amplaria natural establida"
+
+#: ../clutter/clutter-actor.c:6491
+msgid "Whether to use the natural-width property"
+msgstr "Indica si s'usa a propiedat «amplaria natural»"
+
+#: ../clutter/clutter-actor.c:6505
+msgid "Natural height set"
+msgstr "Altura natural establida"
+
+#: ../clutter/clutter-actor.c:6506
+msgid "Whether to use the natural-height property"
+msgstr "Indica si s'usa a propiedat «altura natural»"
+
+#: ../clutter/clutter-actor.c:6522
+msgid "Allocation"
+msgstr "Asignación"
+
+#: ../clutter/clutter-actor.c:6523
+msgid "The actor's allocation"
+msgstr "L'asignación de l'actor"
+
+#: ../clutter/clutter-actor.c:6580
+msgid "Request Mode"
+msgstr "Modo de solicitut"
+
+#: ../clutter/clutter-actor.c:6581
+msgid "The actor's request mode"
+msgstr "O modo de solicitut de l'actor"
+
+#: ../clutter/clutter-actor.c:6605
+msgid "Depth"
+msgstr "Profundidat"
+
+#: ../clutter/clutter-actor.c:6606
+msgid "Position on the Z axis"
+msgstr "Posición en l'eixe Z"
+
+#: ../clutter/clutter-actor.c:6633
+msgid "Z Position"
+msgstr "Posición Z"
+
+#: ../clutter/clutter-actor.c:6634
+msgid "The actor's position on the Z axis"
+msgstr "Posición de l'actor en l'eixe Z"
+
+#: ../clutter/clutter-actor.c:6651
+msgid "Opacity"
+msgstr "Opacidat"
+
+#: ../clutter/clutter-actor.c:6652
+msgid "Opacity of an actor"
+msgstr "Opacidat d'un actor"
+
+#: ../clutter/clutter-actor.c:6672
+msgid "Offscreen redirect"
+msgstr "Redirección difuera d'a pantalla"
+
+#: ../clutter/clutter-actor.c:6673
+msgid "Flags controlling when to flatten the actor into a single image"
+msgstr "Opcions que controlan si cal aplanar l'actor en una sola imachen"
+
+#: ../clutter/clutter-actor.c:6687
+msgid "Visible"
+msgstr "Visible"
+
+#: ../clutter/clutter-actor.c:6688
+msgid "Whether the actor is visible or not"
+msgstr "Indica si l'actor ye visible u no pas"
+
+#: ../clutter/clutter-actor.c:6702
+msgid "Mapped"
+msgstr "Mapeyau"
+
+#: ../clutter/clutter-actor.c:6703
+msgid "Whether the actor will be painted"
+msgstr "Indica si se dibuixará l'actor"
+
+#: ../clutter/clutter-actor.c:6716
+msgid "Realized"
+msgstr "Realizau"
+
+#: ../clutter/clutter-actor.c:6717
+msgid "Whether the actor has been realized"
+msgstr "Indica si l'actor s'ha realizau"
+
+#: ../clutter/clutter-actor.c:6732
+msgid "Reactive"
+msgstr "Reactivo"
+
+#: ../clutter/clutter-actor.c:6733
+msgid "Whether the actor is reactive to events"
+msgstr "Indica si l'actor ye reactivo a eventos"
+
+#: ../clutter/clutter-actor.c:6744
+msgid "Has Clip"
+msgstr "Tien retalle"
+
+#: ../clutter/clutter-actor.c:6745
+msgid "Whether the actor has a clip set"
+msgstr "Indica si l'actor tien un conchunto de retalles"
+
+#: ../clutter/clutter-actor.c:6758
+msgid "Clip"
+msgstr "Retallar"
+
+#: ../clutter/clutter-actor.c:6759
+msgid "The clip region for the actor"
+msgstr "A rechión de retalle de l'actor"
+
+#: ../clutter/clutter-actor.c:6778
+msgid "Clip Rectangle"
+msgstr "Retallar un rectanglo"
+
+#: ../clutter/clutter-actor.c:6779
+msgid "The visible region of the actor"
+msgstr "A rechión visible de l'actor"
+
+#: ../clutter/clutter-actor.c:6793 ../clutter/clutter-actor-meta.c:205
+#: ../clutter/clutter-binding-pool.c:319 ../clutter/clutter-input-device.c:247
+msgid "Name"
+msgstr "Nombre"
+
+#: ../clutter/clutter-actor.c:6794
+msgid "Name of the actor"
+msgstr "Nombre de l'actor"
+
+#: ../clutter/clutter-actor.c:6815
+msgid "Pivot Point"
+msgstr "Punto de pivote"
+
+#: ../clutter/clutter-actor.c:6816
+msgid "The point around which the scaling and rotation occur"
+msgstr "O punto arredol d'o como succede o escalau y a rotación"
+
+#: ../clutter/clutter-actor.c:6834
+msgid "Pivot Point Z"
+msgstr "Punto de pivote Z"
+
+#: ../clutter/clutter-actor.c:6835
+msgid "Z component of the pivot point"
+msgstr "Componente Z d'o punto de pivote"
+
+#: ../clutter/clutter-actor.c:6853
+msgid "Scale X"
+msgstr "Escala en X"
+
+#: ../clutter/clutter-actor.c:6854
+msgid "Scale factor on the X axis"
+msgstr "Factor d'escala en l'eixe X"
+
+#: ../clutter/clutter-actor.c:6872
+msgid "Scale Y"
+msgstr "Escala en Y"
+
+#: ../clutter/clutter-actor.c:6873
+msgid "Scale factor on the Y axis"
+msgstr "Factor d'escala en l'eixe Y"
+
+#: ../clutter/clutter-actor.c:6891
+msgid "Scale Z"
+msgstr "Escala en Z"
+
+#: ../clutter/clutter-actor.c:6892
+msgid "Scale factor on the Z axis"
+msgstr "Factor d'escala en l'eixe Z"
+
+#: ../clutter/clutter-actor.c:6910
+msgid "Scale Center X"
+msgstr "Centro X del'escalau"
+
+#: ../clutter/clutter-actor.c:6911
+msgid "Horizontal scale center"
+msgstr "Centro d'a escala horizontal"
+
+#: ../clutter/clutter-actor.c:6929
+msgid "Scale Center Y"
+msgstr "Centro Y de l'escalau"
+
+#: ../clutter/clutter-actor.c:6930
+msgid "Vertical scale center"
+msgstr "Centro d'a escala vertical"
+
+#: ../clutter/clutter-actor.c:6948
+msgid "Scale Gravity"
+msgstr "Gravedat de l'escalau"
+
+#: ../clutter/clutter-actor.c:6949
+msgid "The center of scaling"
+msgstr "O centro de l'escalau"
+
+#: ../clutter/clutter-actor.c:6967
+msgid "Rotation Angle X"
+msgstr "Anglo de rotación X"
+
+#: ../clutter/clutter-actor.c:6968
+msgid "The rotation angle on the X axis"
+msgstr "L'anglo de rotación en l'eixe X"
+
+#: ../clutter/clutter-actor.c:6986
+msgid "Rotation Angle Y"
+msgstr "Anglo de rotación Y"
+
+#: ../clutter/clutter-actor.c:6987
+msgid "The rotation angle on the Y axis"
+msgstr "L'anglo de rotación en l'eixe Y"
+
+#: ../clutter/clutter-actor.c:7005
+msgid "Rotation Angle Z"
+msgstr "Anglo de rotación Z"
+
+#: ../clutter/clutter-actor.c:7006
+msgid "The rotation angle on the Z axis"
+msgstr "L'anglo de rotación en l'eixe Z"
+
+#: ../clutter/clutter-actor.c:7024
+msgid "Rotation Center X"
+msgstr "Centro de rotación X"
+
+#: ../clutter/clutter-actor.c:7025
+msgid "The rotation center on the X axis"
+msgstr "O centro de rotación en l'eixe Y"
+
+#: ../clutter/clutter-actor.c:7042
+msgid "Rotation Center Y"
+msgstr "Centro de rotación Y"
+
+#: ../clutter/clutter-actor.c:7043
+msgid "The rotation center on the Y axis"
+msgstr "O centro d'a rotación en l'eixe Y"
+
+#: ../clutter/clutter-actor.c:7060
+msgid "Rotation Center Z"
+msgstr "Centro de rotación Z"
+
+#: ../clutter/clutter-actor.c:7061
+msgid "The rotation center on the Z axis"
+msgstr "O centro de rotación en l'eixe Z"
+
+#: ../clutter/clutter-actor.c:7078
+msgid "Rotation Center Z Gravity"
+msgstr "Gravedat d'o centro de rotación Z"
+
+#: ../clutter/clutter-actor.c:7079
+msgid "Center point for rotation around the Z axis"
+msgstr "Punto central d'a rotación arredol de l'eixe Z"
+
+#: ../clutter/clutter-actor.c:7107
+msgid "Anchor X"
+msgstr "Ancora X"
+
+#: ../clutter/clutter-actor.c:7108
+msgid "X coordinate of the anchor point"
+msgstr "Coordenada X d'o punto d'ancorau"
+
+#: ../clutter/clutter-actor.c:7136
+msgid "Anchor Y"
+msgstr "Ancora Y"
+
+#: ../clutter/clutter-actor.c:7137
+msgid "Y coordinate of the anchor point"
+msgstr "Coordenada Y d'o punto d'ancorau"
+
+#: ../clutter/clutter-actor.c:7164
+msgid "Anchor Gravity"
+msgstr "Gravedat de l'ancora"
+
+#: ../clutter/clutter-actor.c:7165
+msgid "The anchor point as a ClutterGravity"
+msgstr "O punto d'ancorau como un «ClutterGravity»"
+
+#: ../clutter/clutter-actor.c:7184
+msgid "Translation X"
+msgstr "Translación X"
+
+#: ../clutter/clutter-actor.c:7185
+msgid "Translation along the X axis"
+msgstr "Translación alo luengo de l'eixe X"
+
+#: ../clutter/clutter-actor.c:7204
+msgid "Translation Y"
+msgstr "Translación Y"
+
+#: ../clutter/clutter-actor.c:7205
+msgid "Translation along the Y axis"
+msgstr "Translación a lo luengo de l'eixe Y"
+
+#: ../clutter/clutter-actor.c:7224
+msgid "Translation Z"
+msgstr "Translación Z"
+
+#: ../clutter/clutter-actor.c:7225
+msgid "Translation along the Z axis"
+msgstr "Translación a lo luengo de l'eixe Z"
+
+#: ../clutter/clutter-actor.c:7255
+msgid "Transform"
+msgstr "Transformar"
+
+#: ../clutter/clutter-actor.c:7256
+msgid "Transformation matrix"
+msgstr "Matriz de transformación"
+
+#: ../clutter/clutter-actor.c:7271
+msgid "Transform Set"
+msgstr "Transformar un conchunto"
+
+#: ../clutter/clutter-actor.c:7272
+msgid "Whether the transform property is set"
+msgstr "Indica si a propiedat de transformación ye establida"
+
+#: ../clutter/clutter-actor.c:7293
+msgid "Child Transform"
+msgstr "Transformar o fillo"
+
+#: ../clutter/clutter-actor.c:7294
+msgid "Children transformation matrix"
+msgstr "Matriz de transformación d'o fillo"
+
+#: ../clutter/clutter-actor.c:7309
+msgid "Child Transform Set"
+msgstr "Transformar o fillo establida"
+
+#: ../clutter/clutter-actor.c:7310
+msgid "Whether the child-transform property is set"
+msgstr "Indica si a propiedat de transformación d'o fillo ye establida"
+
+#: ../clutter/clutter-actor.c:7327
+msgid "Show on set parent"
+msgstr "Amostrar en o conchunto pai"
+
+#: ../clutter/clutter-actor.c:7328
+msgid "Whether the actor is shown when parented"
+msgstr "Indica si l'actor s'amuestra quan tien pai"
+
+#: ../clutter/clutter-actor.c:7345
+msgid "Clip to Allocation"
+msgstr "Retallar a l'asignación"
+
+#: ../clutter/clutter-actor.c:7346
+msgid "Sets the clip region to track the actor's allocation"
+msgstr "Estableix a rechión de retalle ta seguir a ubicación de l'actor"
+
+#: ../clutter/clutter-actor.c:7359
+msgid "Text Direction"
+msgstr "Adreza d'o texto"
+
+#: ../clutter/clutter-actor.c:7360
+msgid "Direction of the text"
+msgstr "Adreza d'o texto"
+
+#: ../clutter/clutter-actor.c:7375
+msgid "Has Pointer"
+msgstr "Tien puntero"
+
+#: ../clutter/clutter-actor.c:7376
+msgid "Whether the actor contains the pointer of an input device"
+msgstr "Indica si l'actor contién un puntero enta un dispositivo de dentrada"
+
+#: ../clutter/clutter-actor.c:7389
+msgid "Actions"
+msgstr "Accions"
+
+#: ../clutter/clutter-actor.c:7390
+msgid "Adds an action to the actor"
+msgstr "Adhibe una acción a l'actor"
+
+#: ../clutter/clutter-actor.c:7403
+msgid "Constraints"
+msgstr "Restriccions"
+
+#: ../clutter/clutter-actor.c:7404
+msgid "Adds a constraint to the actor"
+msgstr "Adhibe una restricción a l'actor"
+
+#: ../clutter/clutter-actor.c:7417
+msgid "Effect"
+msgstr "Efecto"
+
+#: ../clutter/clutter-actor.c:7418
+msgid "Add an effect to be applied on the actor"
+msgstr "Adhibir un efecto que aplicar a l'actor"
+
+#: ../clutter/clutter-actor.c:7432
+msgid "Layout Manager"
+msgstr "Chestor de distribución"
+
+#: ../clutter/clutter-actor.c:7433
+msgid "The object controlling the layout of an actor's children"
+msgstr "L'obchecto que controla a distribución d'o fillo d'un actor"
+
+#: ../clutter/clutter-actor.c:7447
+msgid "X Expand"
+msgstr "Expansión X"
+
+#: ../clutter/clutter-actor.c:7448
+msgid "Whether extra horizontal space should be assigned to the actor"
+msgstr "Indica si cal asignar a l'actor l'espacio horizontal adicional"
+
+#: ../clutter/clutter-actor.c:7463
+msgid "Y Expand"
+msgstr "Expansión Y"
+
+#: ../clutter/clutter-actor.c:7464
+msgid "Whether extra vertical space should be assigned to the actor"
+msgstr "Indica si cal asignar a l'actor l'espacio vertical adicional"
+
+#: ../clutter/clutter-actor.c:7480
+msgid "X Alignment"
+msgstr "Alineación X"
+
+#: ../clutter/clutter-actor.c:7481
+msgid "The alignment of the actor on the X axis within its allocation"
+msgstr "L'aliniación de l'actor en l'eixe X en a l'asignación d'ell"
+
+#: ../clutter/clutter-actor.c:7496
+msgid "Y Alignment"
+msgstr "Alineación Y"
+
+#: ../clutter/clutter-actor.c:7497
+msgid "The alignment of the actor on the Y axis within its allocation"
+msgstr "L'aliniación de l'actor en l'eixe Y en a l'asignación d'ell"
+
+#: ../clutter/clutter-actor.c:7516
+msgid "Margin Top"
+msgstr "Marguin superior"
+
+#: ../clutter/clutter-actor.c:7517
+msgid "Extra space at the top"
+msgstr "Espacio superior adicional"
+
+#: ../clutter/clutter-actor.c:7538
+msgid "Margin Bottom"
+msgstr "Marguin inferior"
+
+#: ../clutter/clutter-actor.c:7539
+msgid "Extra space at the bottom"
+msgstr "Espacio inferior adicional"
+
+#: ../clutter/clutter-actor.c:7560
+msgid "Margin Left"
+msgstr "Marguin cucha"
+
+#: ../clutter/clutter-actor.c:7561
+msgid "Extra space at the left"
+msgstr "Espacio adicional a la cucha"
+
+#: ../clutter/clutter-actor.c:7582
+msgid "Margin Right"
+msgstr "Marguin dreita"
+
+#: ../clutter/clutter-actor.c:7583
+msgid "Extra space at the right"
+msgstr "Espacio adicional a la dreita"
+
+#: ../clutter/clutter-actor.c:7599
+msgid "Background Color Set"
+msgstr "Conchunto de colors de fondo"
+
+#: ../clutter/clutter-actor.c:7600 ../clutter/deprecated/clutter-box.c:271
+msgid "Whether the background color is set"
+msgstr "Indica si a color de fondo ye establida"
+
+#: ../clutter/clutter-actor.c:7616
+msgid "Background color"
+msgstr "Color de fondo"
+
+#: ../clutter/clutter-actor.c:7617
+msgid "The actor's background color"
+msgstr "A color de fondo de l'actor"
+
+#: ../clutter/clutter-actor.c:7632
+msgid "First Child"
+msgstr "Primer fillo"
+
+#: ../clutter/clutter-actor.c:7633
+msgid "The actor's first child"
+msgstr "O primer fillo de l'actor"
+
+#: ../clutter/clutter-actor.c:7646
+msgid "Last Child"
+msgstr "Zaguer fillo"
+
+#: ../clutter/clutter-actor.c:7647
+msgid "The actor's last child"
+msgstr "O zaguer fillo de l'actor"
+
+#: ../clutter/clutter-actor.c:7661
+msgid "Content"
+msgstr "Conteniu"
+
+#: ../clutter/clutter-actor.c:7662
+msgid "Delegate object for painting the actor's content"
+msgstr "Delegar l'obchecto ta pintar o conteniu de l'actor"
+
+#: ../clutter/clutter-actor.c:7687
+msgid "Content Gravity"
+msgstr "Gravedat d'o conteniu"
+
+#: ../clutter/clutter-actor.c:7688
+msgid "Alignment of the actor's content"
+msgstr "Aliniación d'o conteniu de l'actor"
+
+#: ../clutter/clutter-actor.c:7708
+msgid "Content Box"
+msgstr "Caixa d'o conteniu"
+
+#: ../clutter/clutter-actor.c:7709
+msgid "The bounding box of the actor's content"
+msgstr "A caixa que rodia a lo conteniu de l'actor"
+
+#: ../clutter/clutter-actor.c:7717
+msgid "Minification Filter"
+msgstr "Filtro de reducción"
+
+#: ../clutter/clutter-actor.c:7718
+msgid "The filter used when reducing the size of the content"
+msgstr "O filtro usau en reducir a grandaria d'o conteniu"
+
+#: ../clutter/clutter-actor.c:7725
+msgid "Magnification Filter"
+msgstr "Filtro d'enampladura"
+
+#: ../clutter/clutter-actor.c:7726
+msgid "The filter used when increasing the size of the content"
+msgstr "O filtro usau en aumentar a grandaria d'o conteniu"
+
+#: ../clutter/clutter-actor.c:7740
+msgid "Content Repeat"
+msgstr "Segundiar o conteniu"
+
+#: ../clutter/clutter-actor.c:7741
+msgid "The repeat policy for the actor's content"
+msgstr "A politica de segundiada d'o conteniu de l'actor"
+
+#: ../clutter/clutter-actor-meta.c:191 ../clutter/clutter-child-meta.c:142
+msgid "Actor"
+msgstr "Actor"
+
+#: ../clutter/clutter-actor-meta.c:192
+msgid "The actor attached to the meta"
+msgstr "L'actor adchunto a la meta"
+
+#: ../clutter/clutter-actor-meta.c:206
+msgid "The name of the meta"
+msgstr "O nombre d'a meta"
+
+#: ../clutter/clutter-actor-meta.c:219 ../clutter/clutter-input-device.c:326
+#: ../clutter/deprecated/clutter-shader.c:309
+msgid "Enabled"
+msgstr "Activada"
+
+#: ../clutter/clutter-actor-meta.c:220
+msgid "Whether the meta is enabled"
+msgstr "Indica si a meta ye activada"
+
+#: ../clutter/clutter-align-constraint.c:279
+#: ../clutter/clutter-bind-constraint.c:358 ../clutter/clutter-clone.c:341
+#: ../clutter/clutter-snap-constraint.c:321
+msgid "Source"
+msgstr "Fuent"
+
+#: ../clutter/clutter-align-constraint.c:280
+msgid "The source of the alignment"
+msgstr "A fuent de l'aliniación"
+
+#: ../clutter/clutter-align-constraint.c:293
+msgid "Align Axis"
+msgstr "Aliniar os eixes"
+
+#: ../clutter/clutter-align-constraint.c:294
+msgid "The axis to align the position to"
+msgstr "L'eixe a lo que aliniar a posición"
+
+#: ../clutter/clutter-align-constraint.c:313
+#: ../clutter/clutter-desaturate-effect.c:270
+msgid "Factor"
+msgstr "Factor"
+
+#: ../clutter/clutter-align-constraint.c:314
+msgid "The alignment factor, between 0.0 and 1.0"
+msgstr "O factor d'aliniación, entre 0.0 y 1.0"
+
+#: ../clutter/clutter-backend.c:380
+msgid "Unable to initialize the Clutter backend"
+msgstr "No s'ha puesto inicializar o backend de Clutter"
+
+#: ../clutter/clutter-backend.c:454
+#, c-format
+msgid "The backend of type '%s' does not support creating multiple stages"
+msgstr "O backend d'a mena «%s» no suporta a creyación de multiples escenarios"
+
+#: ../clutter/clutter-bind-constraint.c:359
+msgid "The source of the binding"
+msgstr "L'orichen d'o ligallo"
+
+#: ../clutter/clutter-bind-constraint.c:372
+msgid "Coordinate"
+msgstr "Coordenada"
+
+#: ../clutter/clutter-bind-constraint.c:373
+msgid "The coordinate to bind"
+msgstr "A coordenada que ligar"
+
+#: ../clutter/clutter-bind-constraint.c:387
+#: ../clutter/clutter-path-constraint.c:226
+#: ../clutter/clutter-snap-constraint.c:366
+msgid "Offset"
+msgstr "Desplazamiento"
+
+#: ../clutter/clutter-bind-constraint.c:388
+msgid "The offset in pixels to apply to the binding"
+msgstr "O desplazamiento en pixels que aplicar a lo ligallo"
+
+#: ../clutter/clutter-binding-pool.c:320
+msgid "The unique name of the binding pool"
+msgstr "O nombre solo d'o ligallo de l'agrupación"
+
+#: ../clutter/clutter-bin-layout.c:238 ../clutter/clutter-bin-layout.c:651
+#: ../clutter/clutter-box-layout.c:388
+#: ../clutter/deprecated/clutter-table-layout.c:610
+msgid "Horizontal Alignment"
+msgstr "Aliniación horizontal"
+
+#: ../clutter/clutter-bin-layout.c:239
+msgid "Horizontal alignment for the actor inside the layout manager"
+msgstr "Aliniación horizontal de l'actor adentro d'o chestor de distribución"
+
+#: ../clutter/clutter-bin-layout.c:247 ../clutter/clutter-bin-layout.c:671
+#: ../clutter/clutter-box-layout.c:397
+#: ../clutter/deprecated/clutter-table-layout.c:625
+msgid "Vertical Alignment"
+msgstr "Alineación vertical"
+
+#: ../clutter/clutter-bin-layout.c:248
+msgid "Vertical alignment for the actor inside the layout manager"
+msgstr "Alineación vertical de l'actor adentro d'o chestor de distribución"
+
+#: ../clutter/clutter-bin-layout.c:652
+msgid "Default horizontal alignment for the actors inside the layout manager"
+msgstr ""
+"Aliniación horizontal predeterminada d'os actors adentro d'o chestor de "
+"distribución"
+
+#: ../clutter/clutter-bin-layout.c:672
+msgid "Default vertical alignment for the actors inside the layout manager"
+msgstr ""
+"Aliniación vertical predeterminada d'os actors adentro d'o chestor de "
+"distribución"
+
+#: ../clutter/clutter-box-layout.c:363
+msgid "Expand"
+msgstr "Desplegar"
+
+#: ../clutter/clutter-box-layout.c:364
+msgid "Allocate extra space for the child"
+msgstr "Asignar espacio adicional ta lo fillo"
+
+#: ../clutter/clutter-box-layout.c:370
+#: ../clutter/deprecated/clutter-table-layout.c:589
+msgid "Horizontal Fill"
+msgstr "Replenau horizontal"
+
+#: ../clutter/clutter-box-layout.c:371
+#: ../clutter/deprecated/clutter-table-layout.c:590
+msgid ""
+"Whether the child should receive priority when the container is allocating "
+"spare space on the horizontal axis"
+msgstr ""
+"Indica si o fillo debe tener prioridat quan o contenedor reserve espacio "
+"libre en l'eixe horizontal"
+
+#: ../clutter/clutter-box-layout.c:379
+#: ../clutter/deprecated/clutter-table-layout.c:596
+msgid "Vertical Fill"
+msgstr "Replenau vertical"
+
+#: ../clutter/clutter-box-layout.c:380
+#: ../clutter/deprecated/clutter-table-layout.c:597
+msgid ""
+"Whether the child should receive priority when the container is allocating "
+"spare space on the vertical axis"
+msgstr ""
+"Indica si o fillo debe tener prioridat quan o contenedor reserve espacio "
+"libre en l'eixe vertical"
+
+#: ../clutter/clutter-box-layout.c:389
+#: ../clutter/deprecated/clutter-table-layout.c:611
+msgid "Horizontal alignment of the actor within the cell"
+msgstr "Aliniación horizontal de l'actor en a celda"
+
+#: ../clutter/clutter-box-layout.c:398
+#: ../clutter/deprecated/clutter-table-layout.c:626
+msgid "Vertical alignment of the actor within the cell"
+msgstr "Alineación vertical de l'actor en a celda"
+
+#: ../clutter/clutter-box-layout.c:1359
+msgid "Vertical"
+msgstr "Vertical"
+
+#: ../clutter/clutter-box-layout.c:1360
+msgid "Whether the layout should be vertical, rather than horizontal"
+msgstr "Indica si a distribución cal estar vertical, en cuenta d'horizontal"
+
+#: ../clutter/clutter-box-layout.c:1377 ../clutter/clutter-flow-layout.c:942
+#: ../clutter/clutter-grid-layout.c:1549
+msgid "Orientation"
+msgstr "Orientación"
+
+#: ../clutter/clutter-box-layout.c:1378 ../clutter/clutter-flow-layout.c:943
+#: ../clutter/clutter-grid-layout.c:1550
+msgid "The orientation of the layout"
+msgstr "A orientación d'a distribución"
+
+#: ../clutter/clutter-box-layout.c:1394 ../clutter/clutter-flow-layout.c:958
+msgid "Homogeneous"
+msgstr "Homochénea"
+
+#: ../clutter/clutter-box-layout.c:1395
+msgid ""
+"Whether the layout should be homogeneous, i.e. all childs get the same size"
+msgstr ""
+"Indica si a distribución debe estar homochénea, eix. totz os fillos tienen a "
+"mesma grandaria"
+
+#: ../clutter/clutter-box-layout.c:1410
+msgid "Pack Start"
+msgstr "Empaquetar a lo prencipio"
+
+#: ../clutter/clutter-box-layout.c:1411
+msgid "Whether to pack items at the start of the box"
+msgstr "Indica si s'empaquetan os elementos a lo prencipio d'a caixa"
+
+#: ../clutter/clutter-box-layout.c:1424
+msgid "Spacing"
+msgstr "Espaciau"
+
+#: ../clutter/clutter-box-layout.c:1425
+msgid "Spacing between children"
+msgstr "Espaciau entre fillos"
+
+#: ../clutter/clutter-box-layout.c:1442
+#: ../clutter/deprecated/clutter-table-layout.c:1677
+msgid "Use Animations"
+msgstr "Fer servir animacions"
+
+#: ../clutter/clutter-box-layout.c:1443
+#: ../clutter/deprecated/clutter-table-layout.c:1678
+msgid "Whether layout changes should be animated"
+msgstr "Indica si cal puixar os cambeos en a distribución"
+
+#: ../clutter/clutter-box-layout.c:1467
+#: ../clutter/deprecated/clutter-table-layout.c:1702
+msgid "Easing Mode"
+msgstr "Modo de desacceleración"
+
+#: ../clutter/clutter-box-layout.c:1468
+#: ../clutter/deprecated/clutter-table-layout.c:1703
+msgid "The easing mode of the animations"
+msgstr "O modo de desacceleración d'as animacions"
+
+#: ../clutter/clutter-box-layout.c:1488
+#: ../clutter/deprecated/clutter-table-layout.c:1723
+msgid "Easing Duration"
+msgstr "Durada d'a desacceleración"
+
+#: ../clutter/clutter-box-layout.c:1489
+#: ../clutter/deprecated/clutter-table-layout.c:1724
+msgid "The duration of the animations"
+msgstr "A durada d'as animacions"
+
+#: ../clutter/clutter-brightness-contrast-effect.c:321
+msgid "Brightness"
+msgstr "Brilo"
+
+#: ../clutter/clutter-brightness-contrast-effect.c:322
+msgid "The brightness change to apply"
+msgstr "O cambeo d'o brilo que aplicar"
+
+#: ../clutter/clutter-brightness-contrast-effect.c:341
+msgid "Contrast"
+msgstr "Concarada"
+
+#: ../clutter/clutter-brightness-contrast-effect.c:342
+msgid "The contrast change to apply"
+msgstr "O cambeo d'a concarada que aplicar"
+
+#: ../clutter/clutter-canvas.c:248
+msgid "The width of the canvas"
+msgstr "L'amplaria de l'estopazo"
+
+#: ../clutter/clutter-canvas.c:264
+msgid "The height of the canvas"
+msgstr "L'altura de l'estopazo"
+
+#: ../clutter/clutter-canvas.c:283
+msgid "Scale Factor Set"
+msgstr "Factor d'escalau establiu"
+
+#: ../clutter/clutter-canvas.c:284
+msgid "Whether the scale-factor property is set"
+msgstr "Indica si a propiedat factor d'escalau ye establida"
+
+#: ../clutter/clutter-canvas.c:305
+msgid "Scale Factor"
+msgstr "Factor d'escalau"
+
+#: ../clutter/clutter-canvas.c:306
+msgid "The scaling factor for the surface"
+msgstr "O factor d'escalau ta la superficie"
+
+#: ../clutter/clutter-child-meta.c:127
+msgid "Container"
+msgstr "Contenedor"
+
+#: ../clutter/clutter-child-meta.c:128
+msgid "The container that created this data"
+msgstr "O contenedor que creyó istos datos"
+
+#: ../clutter/clutter-child-meta.c:143
+msgid "The actor wrapped by this data"
+msgstr "L'actor embolicau por istos datos"
+
+#: ../clutter/clutter-click-action.c:586
+msgid "Pressed"
+msgstr "Pretau"
+
+#: ../clutter/clutter-click-action.c:587
+msgid "Whether the clickable should be in pressed state"
+msgstr "Indica si o pretable cal estar en estau «pretau»"
+
+#: ../clutter/clutter-click-action.c:600
+msgid "Held"
+msgstr "Reteniu"
+
+#: ../clutter/clutter-click-action.c:601
+msgid "Whether the clickable has a grab"
+msgstr "Indica si o dispositivo tien un tirador"
+
+#: ../clutter/clutter-click-action.c:618 ../clutter/clutter-settings.c:653
+msgid "Long Press Duration"
+msgstr "Durada d'a pulsación luenga"
+
+#: ../clutter/clutter-click-action.c:619
+msgid "The minimum duration of a long press to recognize the gesture"
+msgstr "A durada minima d'una pulsación luenga ta reconoixer o cenyo"
+
+#: ../clutter/clutter-click-action.c:637
+msgid "Long Press Threshold"
+msgstr "Branquil d'a pulsación luenga"
+
+#: ../clutter/clutter-click-action.c:638
+msgid "The maximum threshold before a long press is cancelled"
+msgstr "O branquil maximo antes de cancelar una pulsación luenga"
+
+#: ../clutter/clutter-clone.c:342
+msgid "Specifies the actor to be cloned"
+msgstr "Especifica qué actor clonar"
+
+#: ../clutter/clutter-colorize-effect.c:251
+msgid "Tint"
+msgstr "Matiz"
+
+#: ../clutter/clutter-colorize-effect.c:252
+msgid "The tint to apply"
+msgstr "O matiz que aplicar"
+
+#: ../clutter/clutter-deform-effect.c:592
+msgid "Horizontal Tiles"
+msgstr "Quadros horizontals"
+
+#: ../clutter/clutter-deform-effect.c:593
+msgid "The number of horizontal tiles"
+msgstr "O numero de quadros horizontals"
+
+#: ../clutter/clutter-deform-effect.c:608
+msgid "Vertical Tiles"
+msgstr "Quadros verticals"
+
+#: ../clutter/clutter-deform-effect.c:609
+msgid "The number of vertical tiles"
+msgstr "O número de quadros verticals"
+
+#: ../clutter/clutter-deform-effect.c:626
+msgid "Back Material"
+msgstr "Material zaguero"
+
+#: ../clutter/clutter-deform-effect.c:627
+msgid "The material to be used when painting the back of the actor"
+msgstr "O material que fer servir ta pintar a parti zaguera de l'actor"
+
+#: ../clutter/clutter-desaturate-effect.c:271
+msgid "The desaturation factor"
+msgstr "O factor de desaturación"
+
+#: ../clutter/clutter-device-manager.c:127
+#: ../clutter/clutter-input-device.c:355
+#: ../clutter/x11/clutter-keymap-x11.c:321
+msgid "Backend"
+msgstr "Backend"
+
+#: ../clutter/clutter-device-manager.c:128
+msgid "The ClutterBackend of the device manager"
+msgstr "O «ClutterBackend» d'o chestor de dispositivos"
+
+#: ../clutter/clutter-drag-action.c:741
+msgid "Horizontal Drag Threshold"
+msgstr "Branquil d'arrociegue horizontal"
+
+#: ../clutter/clutter-drag-action.c:742
+msgid "The horizontal amount of pixels required to start dragging"
+msgstr "A cantidat de pixels horizontals requerius ta empecipiar a arrocegar"
+
+#: ../clutter/clutter-drag-action.c:769
+msgid "Vertical Drag Threshold"
+msgstr "Branquil d'arrociegue vertical"
+
+#: ../clutter/clutter-drag-action.c:770
+msgid "The vertical amount of pixels required to start dragging"
+msgstr "A cantidat de pixels verticals requerius ta empecipiar a arrocegar"
+
+#: ../clutter/clutter-drag-action.c:791
+msgid "Drag Handle"
+msgstr "Arrocegar o tirador"
+
+#: ../clutter/clutter-drag-action.c:792
+msgid "The actor that is being dragged"
+msgstr "L'actor que se ye arrocegando"
+
+#: ../clutter/clutter-drag-action.c:805
+msgid "Drag Axis"
+msgstr "Arrocegar os eixes"
+
+#: ../clutter/clutter-drag-action.c:806
+msgid "Constraints the dragging to an axis"
+msgstr "Restrinche l'arrocegau a un eixe"
+
+#: ../clutter/clutter-drag-action.c:822
+msgid "Drag Area"
+msgstr "Arrocegar l'aria"
+
+#: ../clutter/clutter-drag-action.c:823
+msgid "Constrains the dragging to a rectangle"
+msgstr "Restrinche l'arrocegau a un rectanglo"
+
+#: ../clutter/clutter-drag-action.c:836
+msgid "Drag Area Set"
+msgstr "Arrocegar l'aria establida"
+
+#: ../clutter/clutter-drag-action.c:837
+msgid "Whether the drag area is set"
+msgstr "Indica si a propiedat d'arrocegar l'aria ye establida"
+
+#: ../clutter/clutter-flow-layout.c:959
+msgid "Whether each item should receive the same allocation"
+msgstr "Indica si cada elemento debe recibir a mesma asignación"
+
+#: ../clutter/clutter-flow-layout.c:974
+#: ../clutter/deprecated/clutter-table-layout.c:1637
+msgid "Column Spacing"
+msgstr "Espaciau entre columnas"
+
+#: ../clutter/clutter-flow-layout.c:975
+msgid "The spacing between columns"
+msgstr "L'espaciau entre columnas"
+
+#: ../clutter/clutter-flow-layout.c:991
+#: ../clutter/deprecated/clutter-table-layout.c:1653
+msgid "Row Spacing"
+msgstr "Espaciau entre ringleras"
+
+#: ../clutter/clutter-flow-layout.c:992
+msgid "The spacing between rows"
+msgstr "L'espaciau entre ringleras"
+
+#: ../clutter/clutter-flow-layout.c:1006
+msgid "Minimum Column Width"
+msgstr "Amplaria minima d'a columna"
+
+#: ../clutter/clutter-flow-layout.c:1007
+msgid "Minimum width for each column"
+msgstr "Amplaria minima de cada columna"
+
+#: ../clutter/clutter-flow-layout.c:1022
+msgid "Maximum Column Width"
+msgstr "Amplaria maxima d'a columna"
+
+#: ../clutter/clutter-flow-layout.c:1023
+msgid "Maximum width for each column"
+msgstr "Amplaria maxima de cada columna"
+
+#: ../clutter/clutter-flow-layout.c:1037
+msgid "Minimum Row Height"
+msgstr "Altura minima d'a ringlera"
+
+#: ../clutter/clutter-flow-layout.c:1038
+msgid "Minimum height for each row"
+msgstr "Altura minima de cada ringlera"
+
+#: ../clutter/clutter-flow-layout.c:1053
+msgid "Maximum Row Height"
+msgstr "Altura maxima d'a ringlera"
+
+#: ../clutter/clutter-flow-layout.c:1054
+msgid "Maximum height for each row"
+msgstr "Altura maxima de cada ringlera"
+
+#: ../clutter/clutter-flow-layout.c:1069 ../clutter/clutter-flow-layout.c:1070
+msgid "Snap to grid"
+msgstr "Achustar a la quadricula"
+
+#: ../clutter/clutter-gesture-action.c:639
+msgid "Number touch points"
+msgstr "Numero de puntos de contacto"
+
+#: ../clutter/clutter-gesture-action.c:640
+msgid "Number of touch points"
+msgstr "Numero de puntos de contacto"
+
+#: ../clutter/clutter-gesture-action.c:655
+msgid "Threshold Trigger Edge"
+msgstr "Canto d'o disparador d'o branquil"
+
+#: ../clutter/clutter-gesture-action.c:656
+msgid "The trigger edge used by the action"
+msgstr "O canto d'o disparador emplegau por l'acción"
+
+#: ../clutter/clutter-grid-layout.c:1223
+msgid "Left attachment"
+msgstr "Acoplau cucho"
+
+#: ../clutter/clutter-grid-layout.c:1224
+msgid "The column number to attach the left side of the child to"
+msgstr "O número de columnas que acoplar a lo costau cucho d'o fillo"
+
+#: ../clutter/clutter-grid-layout.c:1231
+msgid "Top attachment"
+msgstr "Acoplau superior"
+
+#: ../clutter/clutter-grid-layout.c:1232
+msgid "The row number to attach the top side of a child widget to"
+msgstr "O número de ringlera que acoplar a la parti superior d'un widget fillo"
+
+#: ../clutter/clutter-grid-layout.c:1240
+msgid "The number of columns that a child spans"
+msgstr "O número de columnas que un fillo s'expande"
+
+#: ../clutter/clutter-grid-layout.c:1247
+msgid "The number of rows that a child spans"
+msgstr "O número de ringleras que un fillo s'expande"
+
+#: ../clutter/clutter-grid-layout.c:1564
+msgid "Row spacing"
+msgstr "Espaciau entre ringleras"
+
+#: ../clutter/clutter-grid-layout.c:1565
+msgid "The amount of space between two consecutive rows"
+msgstr "A cantidat d'espacio entre dos ringleras consecutivas"
+
+#: ../clutter/clutter-grid-layout.c:1578
+msgid "Column spacing"
+msgstr "Espaciau entre columnas"
+
+#: ../clutter/clutter-grid-layout.c:1579
+msgid "The amount of space between two consecutive columns"
+msgstr "A cantidat d'espacio entre dos columnas consecutivas"
+
+#: ../clutter/clutter-grid-layout.c:1593
+msgid "Row Homogeneous"
+msgstr "Ringlera homochénea"
+
+#: ../clutter/clutter-grid-layout.c:1594
+msgid "If TRUE, the rows are all the same height"
+msgstr "Si ye cierto, todas as ringleras tienen a mesma altura"
+
+#: ../clutter/clutter-grid-layout.c:1607
+msgid "Column Homogeneous"
+msgstr "Columna homochénea"
+
+#: ../clutter/clutter-grid-layout.c:1608
+msgid "If TRUE, the columns are all the same width"
+msgstr "Si ye cierto, todas as columnas tienen a mesma altura"
+
+#: ../clutter/clutter-image.c:249 ../clutter/clutter-image.c:312
+#: ../clutter/clutter-image.c:400
+msgid "Unable to load image data"
+msgstr "No s'han puesto cargar os datos d'a imachen"
+
+#: ../clutter/clutter-input-device.c:231
+msgid "Id"
+msgstr "ID"
+
+#: ../clutter/clutter-input-device.c:232
+msgid "Unique identifier of the device"
+msgstr "Identificador único d'o dispositivo"
+
+#: ../clutter/clutter-input-device.c:248
+msgid "The name of the device"
+msgstr "O nombre d'o dispositivo"
+
+#: ../clutter/clutter-input-device.c:262
+msgid "Device Type"
+msgstr "Mena de dispositivo"
+
+#: ../clutter/clutter-input-device.c:263
+msgid "The type of the device"
+msgstr "A mena d'o dispositivo"
+
+#: ../clutter/clutter-input-device.c:278
+msgid "Device Manager"
+msgstr "Chestor de dispositivos"
+
+#: ../clutter/clutter-input-device.c:279
+msgid "The device manager instance"
+msgstr "A instancia d'o chestor de dispositivos"
+
+#: ../clutter/clutter-input-device.c:292
+msgid "Device Mode"
+msgstr "Modo d'o dispositivo"
+
+#: ../clutter/clutter-input-device.c:293
+msgid "The mode of the device"
+msgstr "O modo d'o dispositivo"
+
+#: ../clutter/clutter-input-device.c:307
+msgid "Has Cursor"
+msgstr "Tien un cursor"
+
+#: ../clutter/clutter-input-device.c:308
+msgid "Whether the device has a cursor"
+msgstr "Indica si o dispositivo tien un cursor"
+
+#: ../clutter/clutter-input-device.c:327
+msgid "Whether the device is enabled"
+msgstr "indica si o dispositivo ye activau"
+
+#: ../clutter/clutter-input-device.c:340
+msgid "Number of Axes"
+msgstr "Numero d'eixes"
+
+#: ../clutter/clutter-input-device.c:341
+msgid "The number of axes on the device"
+msgstr "O numero d'eixes en o dispositivo"
+
+#: ../clutter/clutter-input-device.c:356
+msgid "The backend instance"
+msgstr "A instancia d'o backend"
+
+#: ../clutter/clutter-interval.c:553
+msgid "Value Type"
+msgstr "Mena de valor"
+
+#: ../clutter/clutter-interval.c:554
+msgid "The type of the values in the interval"
+msgstr "A mena de valors en l'intervalo"
+
+#: ../clutter/clutter-interval.c:569
+msgid "Initial Value"
+msgstr "Valor inicial"
+
+#: ../clutter/clutter-interval.c:570
+msgid "Initial value of the interval"
+msgstr "Valor inicial de l'intervalo"
+
+#: ../clutter/clutter-interval.c:584
+msgid "Final Value"
+msgstr "Valor final"
+
+#: ../clutter/clutter-interval.c:585
+msgid "Final value of the interval"
+msgstr "Valor final de l'intervalo"
+
+#: ../clutter/clutter-layout-meta.c:117
+msgid "Manager"
+msgstr "Chestor"
+
+#: ../clutter/clutter-layout-meta.c:118
+msgid "The manager that created this data"
+msgstr "O chestor que ha creyau iste dato"
+
+#. Translators: Leave this UNTRANSLATED if your language is
+#. * left-to-right. If your language is right-to-left
+#. * (e.g. Hebrew, Arabic), translate it to "default:RTL".
+#. *
+#. * Do NOT translate it to non-English e.g. "predefinito:LTR"! If
+#. * it isn't default:LTR or default:RTL it will not work.
+#.
+#: ../clutter/clutter-main.c:795
+msgid "default:LTR"
+msgstr "default:LTR"
+
+#: ../clutter/clutter-main.c:1622
+msgid "Show frames per second"
+msgstr "Amostrar fotogramas por segundo"
+
+#: ../clutter/clutter-main.c:1624
+msgid "Default frame rate"
+msgstr "Velocidat de fotogramas predeterminada"
+
+#: ../clutter/clutter-main.c:1626
+msgid "Make all warnings fatal"
+msgstr "Fer que totz os avisos actúen como errors"
+
+#: ../clutter/clutter-main.c:1629
+msgid "Direction for the text"
+msgstr "Adreza d'o texto"
+
+#: ../clutter/clutter-main.c:1632
+msgid "Disable mipmapping on text"
+msgstr "Desactivar o «mipmapping» en o texto"
+
+#: ../clutter/clutter-main.c:1635
+msgid "Use 'fuzzy' picking"
+msgstr "Fer servir a selección «fosca»"
+
+#: ../clutter/clutter-main.c:1638
+msgid "Clutter debugging flags to set"
+msgstr "Opcions de depuración de Clutter que establir"
+
+#: ../clutter/clutter-main.c:1640
+msgid "Clutter debugging flags to unset"
+msgstr "Opcions de depuración de Clutter que no establir"
+
+#: ../clutter/clutter-main.c:1644
+msgid "Clutter profiling flags to set"
+msgstr "Opcions de perfil de Clutter que establir"
+
+#: ../clutter/clutter-main.c:1646
+msgid "Clutter profiling flags to unset"
+msgstr "Opcions de perfil de Clutter que no establir"
+
+#: ../clutter/clutter-main.c:1649
+msgid "Enable accessibility"
+msgstr "Activar l'accesibilidat"
+
+#: ../clutter/clutter-main.c:1841
+msgid "Clutter Options"
+msgstr "Opcions de Clutter"
+
+#: ../clutter/clutter-main.c:1842
+msgid "Show Clutter Options"
+msgstr "Amostrar as opcions de Clutter"
+
+#: ../clutter/clutter-pan-action.c:446
+msgid "Pan Axis"
+msgstr "Eixe de movimiento horizontal"
+
+#: ../clutter/clutter-pan-action.c:447
+msgid "Constraints the panning to an axis"
+msgstr "Restrinche o movimiento horizontal a un eixe"
+
+#: ../clutter/clutter-pan-action.c:461
+msgid "Interpolate"
+msgstr "Interpolar"
+
+#: ../clutter/clutter-pan-action.c:462
+msgid "Whether interpolated events emission is enabled."
+msgstr "Indica si a emisión d'eventos interpolaus ye activada."
+
+#: ../clutter/clutter-pan-action.c:478
+msgid "Deceleration"
+msgstr "Deceleración"
+
+#: ../clutter/clutter-pan-action.c:479
+msgid "Rate at which the interpolated panning will decelerate in"
+msgstr "Velocidat a la quala o movimiento horizontal interpolau decelerará"
+
+#: ../clutter/clutter-pan-action.c:496
+msgid "Initial acceleration factor"
+msgstr "Factor inicial d'acceleración"
+
+#: ../clutter/clutter-pan-action.c:497
+msgid "Factor applied to the momentum when starting the interpolated phase"
+msgstr "Factor aplicau a l'inte en encetar a fase d'interpolación"
+
+#: ../clutter/clutter-path-constraint.c:212
+#: ../clutter/deprecated/clutter-behaviour-path.c:221
+msgid "Path"
+msgstr "Rota"
+
+#: ../clutter/clutter-path-constraint.c:213
+msgid "The path used to constrain an actor"
+msgstr "A rota usada ta restrinchir a un actor"
+
+#: ../clutter/clutter-path-constraint.c:227
+msgid "The offset along the path, between -1.0 and 2.0"
+msgstr "O desplazamiento sobre a rota, entre -1.0 y 2.0"
+
+#: ../clutter/clutter-property-transition.c:269
+msgid "Property Name"
+msgstr "Nombre d'a propiedat"
+
+#: ../clutter/clutter-property-transition.c:270
+msgid "The name of the property to animate"
+msgstr "O nombre d'a propiedat que puixar"
+
+#: ../clutter/clutter-script.c:464
+msgid "Filename Set"
+msgstr "Conchunto de nombres de fichero"
+
+#: ../clutter/clutter-script.c:465
+msgid "Whether the :filename property is set"
+msgstr "Indica si a propiedat «:filename» ye establida"
+
+#: ../clutter/clutter-script.c:479
+#: ../clutter/deprecated/clutter-texture.c:1080
+msgid "Filename"
+msgstr "Nombre de fichero"
+
+#: ../clutter/clutter-script.c:480
+msgid "The path of the currently parsed file"
+msgstr "A rota d'o fichero analisau actualment"
+
+#: ../clutter/clutter-script.c:497
+msgid "Translation Domain"
+msgstr "Dominio de traducción"
+
+#: ../clutter/clutter-script.c:498
+msgid "The translation domain used to localize string"
+msgstr "O dominio de traducción emplegau ta localizar cadenas"
+
+#: ../clutter/clutter-scroll-actor.c:189
+msgid "Scroll Mode"
+msgstr "Modo de desplazamiento"
+
+#: ../clutter/clutter-scroll-actor.c:190
+msgid "The scrolling direction"
+msgstr "L'adreza d'o desplazamiento"
+
+#: ../clutter/clutter-settings.c:486
+msgid "Double Click Time"
+msgstr "Tiempo d'o dople clic"
+
+#: ../clutter/clutter-settings.c:487
+msgid "The time between clicks necessary to detect a multiple click"
+msgstr "O tiempo necesario entre clics ta detectar un clic multiple"
+
+#: ../clutter/clutter-settings.c:502
+msgid "Double Click Distance"
+msgstr "Distancia d'o dople clic"
+
+#: ../clutter/clutter-settings.c:503
+msgid "The distance between clicks necessary to detect a multiple click"
+msgstr "A distancia necesaria entre clics ta detectar un clic múltiple"
+
+#: ../clutter/clutter-settings.c:518
+msgid "Drag Threshold"
+msgstr "Branquil d'arrociegue"
+
+#: ../clutter/clutter-settings.c:519
+msgid "The distance the cursor should travel before starting to drag"
+msgstr "A distancia que o cursor cal recorrer antis d'empecipiar a arrocegar"
+
+#: ../clutter/clutter-settings.c:534 ../clutter/clutter-text.c:3404
+msgid "Font Name"
+msgstr "Nombre d'a fuent"
+
+#: ../clutter/clutter-settings.c:535
+msgid ""
+"The description of the default font, as one that could be parsed by Pango"
+msgstr ""
+"A descripción d'a fuent predeterminada, como una que Pango pueda analisar"
+
+#: ../clutter/clutter-settings.c:550
+msgid "Font Antialias"
+msgstr "suavezau d'a tipografía"
+
+#: ../clutter/clutter-settings.c:551
+msgid ""
+"Whether to use antialiasing (1 to enable, 0 to disable, and -1 to use the "
+"default)"
+msgstr ""
+"Indica si cal fer servir o suavezau (1 ta activar-ne, 0 ta desactivar-ne y "
+"-1 ta fer servir a opción predeterminada)"
+
+#: ../clutter/clutter-settings.c:567 ../clutter/clutter-settings.c:575
+msgid "Font DPI"
+msgstr "PPP d'a fuent"
+
+#: ../clutter/clutter-settings.c:568 ../clutter/clutter-settings.c:576
+msgid ""
+"The resolution of the font, in 1024 * dots/inch, or -1 to use the default"
+msgstr ""
+"A resolución d'a fuent, en 1024 * puntos/pulgada, u -1 ta fer servir a "
+"predeterminada"
+
+#: ../clutter/clutter-settings.c:592
+msgid "Font Hinting"
+msgstr "Redolín d'a fuent"
+
+#: ../clutter/clutter-settings.c:593
+msgid ""
+"Whether to use hinting (1 to enable, 0 to disable and -1 to use the default)"
+msgstr ""
+"Indica si cal fer servir o redolín (1 ta activar-ne, 0 ta desactivar-ne y -1 "
+"ta fer servir a opción predeterminada)"
+
+#: ../clutter/clutter-settings.c:614
+msgid "Font Hint Style"
+msgstr "Estilo de redolín d'a fuent"
+
+#: ../clutter/clutter-settings.c:615
+msgid "The style of hinting (hintnone, hintslight, hintmedium, hintfull)"
+msgstr ""
+"L'estilo d'o redolín («hintnone», «hintslight», «hintmedium», «hintfull»)"
+
+#: ../clutter/clutter-settings.c:636
+msgid "Font Subpixel Order"
+msgstr "Orden de fuents d'o subpíxel"
+
+#: ../clutter/clutter-settings.c:637
+msgid "The type of subpixel antialiasing (none, rgb, bgr, vrgb, vbgr)"
+msgstr "A mena de suavezau d'o subpíxel («none», «rgb», «bgr», «vrgb», «vbgr»)"
+
+#: ../clutter/clutter-settings.c:654
+msgid "The minimum duration for a long press gesture to be recognized"
+msgstr "A durada minima d'una pulsación luenga ta reconoixer o cenyo"
+
+#: ../clutter/clutter-settings.c:661
+msgid "Window Scaling Factor"
+msgstr "Factor d'escalau d'a finestra"
+
+#: ../clutter/clutter-settings.c:662
+msgid "The scaling factor to be applied to windows"
+msgstr "O factor d'escalau que aplicar a las finestras"
+
+#: ../clutter/clutter-settings.c:669
+msgid "Fontconfig configuration timestamp"
+msgstr "Configuración d'a marca de tiempo de fontconfig"
+
+#: ../clutter/clutter-settings.c:670
+msgid "Timestamp of the current fontconfig configuration"
+msgstr "Marca de tiempo d'a configuración actual de fontconfig"
+
+#: ../clutter/clutter-settings.c:687
+msgid "Password Hint Time"
+msgstr "Tiempo d'a sucherencia d'a clau"
+
+#: ../clutter/clutter-settings.c:688
+msgid "How long to show the last input character in hidden entries"
+msgstr "Quánto tiempo amostrar o zaguer caracter en dentradas amagadas"
+
+#: ../clutter/clutter-shader-effect.c:485
+msgid "Shader Type"
+msgstr "Mena de uembrau"
+
+#: ../clutter/clutter-shader-effect.c:486
+msgid "The type of shader used"
+msgstr "A mena de uembrau emplegau"
+
+#: ../clutter/clutter-snap-constraint.c:322
+msgid "The source of the constraint"
+msgstr "A fuent d'a restricción"
+
+#: ../clutter/clutter-snap-constraint.c:335
+msgid "From Edge"
+msgstr "Dende lo canto"
+
+#: ../clutter/clutter-snap-constraint.c:336
+msgid "The edge of the actor that should be snapped"
+msgstr "O canto de l'actor que caldría trencar"
+
+#: ../clutter/clutter-snap-constraint.c:350
+msgid "To Edge"
+msgstr "A lo canto"
+
+#: ../clutter/clutter-snap-constraint.c:351
+msgid "The edge of the source that should be snapped"
+msgstr "O canto d'a fuent que cal trencar"
+
+#: ../clutter/clutter-snap-constraint.c:367
+msgid "The offset in pixels to apply to the constraint"
+msgstr "O desplazamiento en pixels que aplicar a la restricción"
+
+#: ../clutter/clutter-stage.c:1899
+msgid "Fullscreen Set"
+msgstr "Conchunto a pantalla completa"
+
+#: ../clutter/clutter-stage.c:1900
+msgid "Whether the main stage is fullscreen"
+msgstr "Indica si l'escenario prencipal ye a pantalla completa"
+
+#: ../clutter/clutter-stage.c:1914
+msgid "Offscreen"
+msgstr "Difuera d'a pantalla"
+
+#: ../clutter/clutter-stage.c:1915
+msgid "Whether the main stage should be rendered offscreen"
+msgstr ""
+"Indica si l'escenario prencipal se debe renderizar difuera d'a pantalla"
+
+#: ../clutter/clutter-stage.c:1927 ../clutter/clutter-text.c:3518
+msgid "Cursor Visible"
+msgstr "Cursor visible"
+
+#: ../clutter/clutter-stage.c:1928
+msgid "Whether the mouse pointer is visible on the main stage"
+msgstr "Indica si lo puntero d'o churi ye visible en l'escenario prencipal"
+
+#: ../clutter/clutter-stage.c:1942
+msgid "User Resizable"
+msgstr "Redimensionable por l'usuario"
+
+#: ../clutter/clutter-stage.c:1943
+msgid "Whether the stage is able to be resized via user interaction"
+msgstr ""
+"Indica si l'escenario se puet redimensionar por meyo d'interacción de "
+"l'usuario"
+
+#: ../clutter/clutter-stage.c:1958 ../clutter/deprecated/clutter-box.c:256
+#: ../clutter/deprecated/clutter-rectangle.c:270
+msgid "Color"
+msgstr "Color"
+
+#: ../clutter/clutter-stage.c:1959
+msgid "The color of the stage"
+msgstr "A color de l'escenario"
+
+#: ../clutter/clutter-stage.c:1974
+msgid "Perspective"
+msgstr "Prespectiva"
+
+#: ../clutter/clutter-stage.c:1975
+msgid "Perspective projection parameters"
+msgstr "Parametros de prochección de prespectiva"
+
+#: ../clutter/clutter-stage.c:1990
+msgid "Title"
+msgstr "Titol"
+
+#: ../clutter/clutter-stage.c:1991
+msgid "Stage Title"
+msgstr "Titol de l'escenario"
+
+#: ../clutter/clutter-stage.c:2008
+msgid "Use Fog"
+msgstr "Fer servir a boira"
+
+#: ../clutter/clutter-stage.c:2009
+msgid "Whether to enable depth cueing"
+msgstr "Indica si activar l'indicador de profundidat"
+
+#: ../clutter/clutter-stage.c:2025
+msgid "Fog"
+msgstr "Boira"
+
+#: ../clutter/clutter-stage.c:2026
+msgid "Settings for the depth cueing"
+msgstr "Configuración ta l'indicador de profundidat"
+
+#: ../clutter/clutter-stage.c:2042
+msgid "Use Alpha"
+msgstr "Fer servir l'alfa"
+
+#: ../clutter/clutter-stage.c:2043
+msgid "Whether to honour the alpha component of the stage color"
+msgstr "Indica si se fa servir a componente alfa d'a color de l'escenario"
+
+#: ../clutter/clutter-stage.c:2059
+msgid "Key Focus"
+msgstr "Foco d'a tecla"
+
+#: ../clutter/clutter-stage.c:2060
+msgid "The currently key focused actor"
+msgstr "L'actor que actualment tien o foco"
+
+#: ../clutter/clutter-stage.c:2076
+msgid "No Clear Hint"
+msgstr "No escarrar o redolín"
+
+#: ../clutter/clutter-stage.c:2077
+msgid "Whether the stage should clear its contents"
+msgstr "Indica si l'escenario debe escarrar o conteniu d'ell"
+
+#: ../clutter/clutter-stage.c:2090
+msgid "Accept Focus"
+msgstr "Acceptar o foco"
+
+#: ../clutter/clutter-stage.c:2091
+msgid "Whether the stage should accept focus on show"
+msgstr "Indica si L'escenario debe acceptar o foco en amostrar-se"
+
+#: ../clutter/clutter-text-buffer.c:347 ../clutter/clutter-text.c:3439
+msgid "Text"
+msgstr "Texto"
+
+#: ../clutter/clutter-text-buffer.c:348
+msgid "The contents of the buffer"
+msgstr "O conteniu d'o búfer"
+
+#: ../clutter/clutter-text-buffer.c:361
+msgid "Text length"
+msgstr "Longaria d'o texto"
+
+#: ../clutter/clutter-text-buffer.c:362
+msgid "Length of the text currently in the buffer"
+msgstr "Longaria d'o texto actualment en o búfer"
+
+#: ../clutter/clutter-text-buffer.c:375
+msgid "Maximum length"
+msgstr "Longaria máxima"
+
+#: ../clutter/clutter-text-buffer.c:376
+msgid "Maximum number of characters for this entry. Zero if no maximum"
+msgstr "Número máximo de caracters ta ista dentrada. Zero si no bi ha máximo"
+
+#: ../clutter/clutter-text.c:3386
+msgid "Buffer"
+msgstr "Búfer"
+
+#: ../clutter/clutter-text.c:3387
+msgid "The buffer for the text"
+msgstr "O búfer ta lo texto"
+
+#: ../clutter/clutter-text.c:3405
+msgid "The font to be used by the text"
+msgstr "A fuent que se fa servir ta lo texto"
+
+#: ../clutter/clutter-text.c:3422
+msgid "Font Description"
+msgstr "Descripción d'a fuent"
+
+#: ../clutter/clutter-text.c:3423
+msgid "The font description to be used"
+msgstr "A descripción d'a fuent que fer servir"
+
+#: ../clutter/clutter-text.c:3440
+msgid "The text to render"
+msgstr "O texto que renderizar"
+
+#: ../clutter/clutter-text.c:3454
+msgid "Font Color"
+msgstr "Color d'a fuent"
+
+#: ../clutter/clutter-text.c:3455
+msgid "Color of the font used by the text"
+msgstr "Color d'a fuent que fa servir o texto"
+
+#: ../clutter/clutter-text.c:3470
+msgid "Editable"
+msgstr "Editable"
+
+#: ../clutter/clutter-text.c:3471
+msgid "Whether the text is editable"
+msgstr "Indica si o texto ye editable"
+
+#: ../clutter/clutter-text.c:3486
+msgid "Selectable"
+msgstr "Seleccionable"
+
+#: ../clutter/clutter-text.c:3487
+msgid "Whether the text is selectable"
+msgstr "Indica si o texto ye seleccionable"
+
+#: ../clutter/clutter-text.c:3501
+msgid "Activatable"
+msgstr "Activable"
+
+#: ../clutter/clutter-text.c:3502
+msgid "Whether pressing return causes the activate signal to be emitted"
+msgstr "Indica si en pretar «Intro» fa que s'emita o sinyal d'activación"
+
+#: ../clutter/clutter-text.c:3519
+msgid "Whether the input cursor is visible"
+msgstr "Indica si o cursor de dentrada ye visible"
+
+#: ../clutter/clutter-text.c:3533 ../clutter/clutter-text.c:3534
+msgid "Cursor Color"
+msgstr "Color d'o cursor"
+
+#: ../clutter/clutter-text.c:3549
+msgid "Cursor Color Set"
+msgstr "Conchunto de colors d'o cursor"
+
+#: ../clutter/clutter-text.c:3550
+msgid "Whether the cursor color has been set"
+msgstr "Indica si s'ha establiu a color d'o cursor"
+
+#: ../clutter/clutter-text.c:3565
+msgid "Cursor Size"
+msgstr "Grandaria d'o cursor"
+
+#: ../clutter/clutter-text.c:3566
+msgid "The width of the cursor, in pixels"
+msgstr "L'amplaria d'o cursor, en pixels"
+
+#: ../clutter/clutter-text.c:3582 ../clutter/clutter-text.c:3600
+msgid "Cursor Position"
+msgstr "Posición d'o cursor"
+
+#: ../clutter/clutter-text.c:3583 ../clutter/clutter-text.c:3601
+msgid "The cursor position"
+msgstr "A posición d'o cursor"
+
+#: ../clutter/clutter-text.c:3616
+msgid "Selection-bound"
+msgstr "Destín d'a selección"
+
+#: ../clutter/clutter-text.c:3617
+msgid "The cursor position of the other end of the selection"
+msgstr "A posición d'o cursor de l'atro final d'a selección"
+
+#: ../clutter/clutter-text.c:3632 ../clutter/clutter-text.c:3633
+msgid "Selection Color"
+msgstr "Selección de color"
+
+#: ../clutter/clutter-text.c:3648
+msgid "Selection Color Set"
+msgstr "Conchunto de selección de colors"
+
+#: ../clutter/clutter-text.c:3649
+msgid "Whether the selection color has been set"
+msgstr "Indica si s'ha establiu a color d'a selección"
+
+#: ../clutter/clutter-text.c:3664
+msgid "Attributes"
+msgstr "Atributos"
+
+#: ../clutter/clutter-text.c:3665
+msgid "A list of style attributes to apply to the contents of the actor"
+msgstr "Una lista d'atributos d'estilo que aplicar a os contenius de l'actor"
+
+#: ../clutter/clutter-text.c:3687
+msgid "Use markup"
+msgstr "Fer servir omarcau"
+
+#: ../clutter/clutter-text.c:3688
+msgid "Whether or not the text includes Pango markup"
+msgstr "Indica si o texto incluye u no pas o marcau de Pango"
+
+#: ../clutter/clutter-text.c:3704
+msgid "Line wrap"
+msgstr "Achuste de linia"
+
+#: ../clutter/clutter-text.c:3705
+msgid "If set, wrap the lines if the text becomes too wide"
+msgstr "Si ye definiu, achusta las linias si o texto se torna masiau amplo"
+
+#: ../clutter/clutter-text.c:3720
+msgid "Line wrap mode"
+msgstr "Modo d'achuste de linia"
+
+#: ../clutter/clutter-text.c:3721
+msgid "Control how line-wrapping is done"
+msgstr "Controlar cómo se fa l'achuste de linia"
+
+#: ../clutter/clutter-text.c:3736
+msgid "Ellipsize"
+msgstr "Creyar una elipse"
+
+#: ../clutter/clutter-text.c:3737
+msgid "The preferred place to ellipsize the string"
+msgstr "O puesto preferiu ta creyar a cadena eliptica"
+
+#: ../clutter/clutter-text.c:3753
+msgid "Line Alignment"
+msgstr "Aliniación de linia"
+
+#: ../clutter/clutter-text.c:3754
+msgid "The preferred alignment for the string, for multi-line text"
+msgstr "L'aliniación preferida ta la cadena, ta texto multilinia"
+
+#: ../clutter/clutter-text.c:3770
+msgid "Justify"
+msgstr "Chustificar"
+
+#: ../clutter/clutter-text.c:3771
+msgid "Whether the text should be justified"
+msgstr "Indica si cal chustificar o texto"
+
+#: ../clutter/clutter-text.c:3786
+msgid "Password Character"
+msgstr "Caracter d'a clau"
+
+#: ../clutter/clutter-text.c:3787
+msgid "If non-zero, use this character to display the actor's contents"
+msgstr ""
+"Si no ye zero, fer servir iste caracter ta amostrar o conteniu de l'actor"
+
+#: ../clutter/clutter-text.c:3801
+msgid "Max Length"
+msgstr "Longaria maxima"
+
+#: ../clutter/clutter-text.c:3802
+msgid "Maximum length of the text inside the actor"
+msgstr "Longaria maxima d'o texto adintro de l'actor"
+
+#: ../clutter/clutter-text.c:3825
+msgid "Single Line Mode"
+msgstr "Modo de linia única"
+
+#: ../clutter/clutter-text.c:3826
+msgid "Whether the text should be a single line"
+msgstr "Indica si o texto debe estar en una sola linia"
+
+#: ../clutter/clutter-text.c:3840 ../clutter/clutter-text.c:3841
+msgid "Selected Text Color"
+msgstr "Color d'o texto seleccionau"
+
+#: ../clutter/clutter-text.c:3856
+msgid "Selected Text Color Set"
+msgstr "Conchunto de colors d'o texto seleccionau"
+
+#: ../clutter/clutter-text.c:3857
+msgid "Whether the selected text color has been set"
+msgstr "Indica si s'ha establiu a color d'o texto seleccionau"
+
+#: ../clutter/clutter-timeline.c:593
+#: ../clutter/deprecated/clutter-animation.c:557
+msgid "Loop"
+msgstr "Bucle"
+
+#: ../clutter/clutter-timeline.c:594
+msgid "Should the timeline automatically restart"
+msgstr "Indica si cal reiniciar automaticament a linia de tiempo "
+
+#: ../clutter/clutter-timeline.c:608
+msgid "Delay"
+msgstr "Retardo"
+
+#: ../clutter/clutter-timeline.c:609
+msgid "Delay before start"
+msgstr "Retardo antis d'empecipiar"
+
+#: ../clutter/clutter-timeline.c:624
+#: ../clutter/deprecated/clutter-animation.c:541
+#: ../clutter/deprecated/clutter-animator.c:1801
+#: ../clutter/deprecated/clutter-media.c:224
+#: ../clutter/deprecated/clutter-state.c:1517
+msgid "Duration"
+msgstr "Durada"
+
+#: ../clutter/clutter-timeline.c:625
+msgid "Duration of the timeline in milliseconds"
+msgstr "Durada d'a linia de tiempo, en milisegundos"
+
+#: ../clutter/clutter-timeline.c:640
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:521
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:330
+msgid "Direction"
+msgstr "Adreza"
+
+#: ../clutter/clutter-timeline.c:641
+msgid "Direction of the timeline"
+msgstr "Adreza d'a linia de tiempo"
+
+#: ../clutter/clutter-timeline.c:656
+msgid "Auto Reverse"
+msgstr "Invertir automaticament"
+
+#: ../clutter/clutter-timeline.c:657
+msgid "Whether the direction should be reversed when reaching the end"
+msgstr "Indica si cal invertir a endrecera a lo plegar ta la fin"
+
+#: ../clutter/clutter-timeline.c:675
+msgid "Repeat Count"
+msgstr "Repetir a cuenta"
+
+#: ../clutter/clutter-timeline.c:676
+msgid "How many times the timeline should repeat"
+msgstr "Quántas vegadas cal repetir a linia de tiempo"
+
+#: ../clutter/clutter-timeline.c:690
+msgid "Progress Mode"
+msgstr "Modo de progreso"
+
+#: ../clutter/clutter-timeline.c:691
+msgid "How the timeline should compute the progress"
+msgstr "Cómo habría de calcular o progreso a linia de tiempo"
+
+#: ../clutter/clutter-transition.c:244
+msgid "Interval"
+msgstr "Intervalo"
+
+#: ../clutter/clutter-transition.c:245
+msgid "The interval of values to transition"
+msgstr "L'intervalo de valors ta la transición"
+
+#: ../clutter/clutter-transition.c:259
+msgid "Animatable"
+msgstr "Animable"
+
+#: ../clutter/clutter-transition.c:260
+msgid "The animatable object"
+msgstr "L'obchecto animable"
+
+#: ../clutter/clutter-transition.c:281
+msgid "Remove on Complete"
+msgstr "Sacar en completar"
+
+#: ../clutter/clutter-transition.c:282
+msgid "Detach the transition when completed"
+msgstr "Sacar a transición en que se complete"
+
+#: ../clutter/clutter-zoom-action.c:355
+msgid "Zoom Axis"
+msgstr "Enamplar l'eixe"
+
+#: ../clutter/clutter-zoom-action.c:356
+msgid "Constraints the zoom to an axis"
+msgstr "Restrinche l'ampliación a un eixe"
+
+#: ../clutter/deprecated/clutter-alpha.c:354
+#: ../clutter/deprecated/clutter-animation.c:572
+#: ../clutter/deprecated/clutter-animator.c:1818
+msgid "Timeline"
+msgstr "Linia de tiempo"
+
+#: ../clutter/deprecated/clutter-alpha.c:355
+msgid "Timeline used by the alpha"
+msgstr "Linia de tiempo emplegada por l'alfa"
+
+#: ../clutter/deprecated/clutter-alpha.c:371
+msgid "Alpha value"
+msgstr "Valor alfa"
+
+#: ../clutter/deprecated/clutter-alpha.c:372
+msgid "Alpha value as computed by the alpha"
+msgstr "Valor alfa calculau por l'alfa"
+
+#: ../clutter/deprecated/clutter-alpha.c:393
+#: ../clutter/deprecated/clutter-animation.c:525
+msgid "Mode"
+msgstr "Modo"
+
+#: ../clutter/deprecated/clutter-alpha.c:394
+msgid "Progress mode"
+msgstr "Modo de progreso"
+
+#: ../clutter/deprecated/clutter-animation.c:508
+msgid "Object"
+msgstr "Obchecto"
+
+#: ../clutter/deprecated/clutter-animation.c:509
+msgid "Object to which the animation applies"
+msgstr "Obchecto a lo que s'aplica l'animación"
+
+#: ../clutter/deprecated/clutter-animation.c:526
+msgid "The mode of the animation"
+msgstr "O modo de l'animación"
+
+#: ../clutter/deprecated/clutter-animation.c:542
+msgid "Duration of the animation, in milliseconds"
+msgstr "Durada de l'animación, en milisegundos"
+
+#: ../clutter/deprecated/clutter-animation.c:558
+msgid "Whether the animation should loop"
+msgstr "Indica si l'animación habría d'estar un bucle"
+
+#: ../clutter/deprecated/clutter-animation.c:573
+msgid "The timeline used by the animation"
+msgstr "A linia de tiempo emplegada por l'animación"
+
+#: ../clutter/deprecated/clutter-animation.c:589
+#: ../clutter/deprecated/clutter-behaviour.c:237
+msgid "Alpha"
+msgstr "Alfa"
+
+#: ../clutter/deprecated/clutter-animation.c:590
+msgid "The alpha used by the animation"
+msgstr "L'alfa usau por l'animación"
+
+#: ../clutter/deprecated/clutter-animator.c:1802
+msgid "The duration of the animation"
+msgstr "A durada de l'animación"
+
+#: ../clutter/deprecated/clutter-animator.c:1819
+msgid "The timeline of the animation"
+msgstr "A linia de tiempo de l'animación"
+
+#: ../clutter/deprecated/clutter-behaviour.c:238
+msgid "Alpha Object to drive the behaviour"
+msgstr "Obchecto alfa ta endrezar o comportamiento"
+
+#: ../clutter/deprecated/clutter-behaviour-depth.c:180
+msgid "Start Depth"
+msgstr "Profundidat inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-depth.c:181
+msgid "Initial depth to apply"
+msgstr "Profundidat inicial que aplicar"
+
+#: ../clutter/deprecated/clutter-behaviour-depth.c:196
+msgid "End Depth"
+msgstr "Profundidat final"
+
+#: ../clutter/deprecated/clutter-behaviour-depth.c:197
+msgid "Final depth to apply"
+msgstr "Profundidat final que aplicar"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:394
+msgid "Start Angle"
+msgstr "Anglo inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:395
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:277
+msgid "Initial angle"
+msgstr "Anglo inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:410
+msgid "End Angle"
+msgstr "Anglo final"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:411
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:295
+msgid "Final angle"
+msgstr "Anglo final"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:426
+msgid "Angle x tilt"
+msgstr "Inclinación X de l'anglo"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:427
+msgid "Tilt of the ellipse around x axis"
+msgstr "Inclinación d'a elipse sobre l'eixe X"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:442
+msgid "Angle y tilt"
+msgstr "Inclinación Y de l'anglo"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:443
+msgid "Tilt of the ellipse around y axis"
+msgstr "Inclinación d'a elipse sobre l'eixe Y"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:458
+msgid "Angle z tilt"
+msgstr "Inclinación Z de l'anglo"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:459
+msgid "Tilt of the ellipse around z axis"
+msgstr "Inclinación d'a elipse sobre l'eixe Z"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:475
+msgid "Width of the ellipse"
+msgstr "Amplaria d'a elipse"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:491
+msgid "Height of ellipse"
+msgstr "Altaria d'a elipse"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:506
+msgid "Center"
+msgstr "Centro"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:507
+msgid "Center of ellipse"
+msgstr "Centro d'a elipse"
+
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:522
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:331
+msgid "Direction of rotation"
+msgstr "Adreza d'a rotación"
+
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:177
+msgid "Opacity Start"
+msgstr "Opacidat inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:178
+msgid "Initial opacity level"
+msgstr "Ran inicial d'opacidat"
+
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:195
+msgid "Opacity End"
+msgstr "Opacidat final"
+
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:196
+msgid "Final opacity level"
+msgstr "Ran final d'opacidat"
+
+#: ../clutter/deprecated/clutter-behaviour-path.c:222
+msgid "The ClutterPath object representing the path to animate along"
+msgstr "L'obchecto «ClutterPath» que represienta a rota sobre a que puixar"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:276
+msgid "Angle Begin"
+msgstr "Anglo inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:294
+msgid "Angle End"
+msgstr "Anglo final"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:312
+msgid "Axis"
+msgstr "Eixe"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:313
+msgid "Axis of rotation"
+msgstr "Eixe de rotación"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:348
+msgid "Center X"
+msgstr "Centro X"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:349
+msgid "X coordinate of the center of rotation"
+msgstr "Coordenada X d'o centro de rotación"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:366
+msgid "Center Y"
+msgstr "Centro Y"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:367
+msgid "Y coordinate of the center of rotation"
+msgstr "Coordenada Y d'o centro de rotación"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:384
+msgid "Center Z"
+msgstr "Centro Z"
+
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:385
+msgid "Z coordinate of the center of rotation"
+msgstr "Coordenada Z d'o centro de rotación"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:222
+msgid "X Start Scale"
+msgstr "Escala X inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:223
+msgid "Initial scale on the X axis"
+msgstr "Escala inicial en l'eixe X"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:241
+msgid "X End Scale"
+msgstr "Escala X final"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:242
+msgid "Final scale on the X axis"
+msgstr "Escala final en l'eixe X"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:260
+msgid "Y Start Scale"
+msgstr "Escala Y inicial"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:261
+msgid "Initial scale on the Y axis"
+msgstr "Escala inicial en l'eixe Y"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:279
+msgid "Y End Scale"
+msgstr "Escala Y final"
+
+#: ../clutter/deprecated/clutter-behaviour-scale.c:280
+msgid "Final scale on the Y axis"
+msgstr "Escala final en l'eixe Y"
+
+#: ../clutter/deprecated/clutter-box.c:257
+msgid "The background color of the box"
+msgstr "A color de fondo d'a caixa"
+
+#: ../clutter/deprecated/clutter-box.c:270
+msgid "Color Set"
+msgstr "Conchunto de colors"
+
+#: ../clutter/deprecated/clutter-cairo-texture.c:593
+msgid "Surface Width"
+msgstr "Amplaria d'a superficie"
+
+#: ../clutter/deprecated/clutter-cairo-texture.c:594
+msgid "The width of the Cairo surface"
+msgstr "L'amplaria d'a superficie Cairo"
+
+#: ../clutter/deprecated/clutter-cairo-texture.c:611
+msgid "Surface Height"
+msgstr "Altaria d'a superficie"
+
+#: ../clutter/deprecated/clutter-cairo-texture.c:612
+msgid "The height of the Cairo surface"
+msgstr "L'altura d'a superficie Cairo"
+
+#: ../clutter/deprecated/clutter-cairo-texture.c:632
+msgid "Auto Resize"
+msgstr "Redimensionar automaticament"
+
+#: ../clutter/deprecated/clutter-cairo-texture.c:633
+msgid "Whether the surface should match the allocation"
+msgstr "Indica si a superficie debe coincidir con l'asignación"
+
+#: ../clutter/deprecated/clutter-media.c:83
+msgid "URI"
+msgstr "URI"
+
+#: ../clutter/deprecated/clutter-media.c:84
+msgid "URI of a media file"
+msgstr "URI d'un fichero multimedia"
+
+#: ../clutter/deprecated/clutter-media.c:100
+msgid "Playing"
+msgstr "Reproducindo"
+
+#: ../clutter/deprecated/clutter-media.c:101
+msgid "Whether the actor is playing"
+msgstr "Indica si l'actor se ye reproducindo"
+
+#: ../clutter/deprecated/clutter-media.c:118
+msgid "Progress"
+msgstr "Progreso"
+
+#: ../clutter/deprecated/clutter-media.c:119
+msgid "Current progress of the playback"
+msgstr "Progreso actual d'a reproducción"
+
+#: ../clutter/deprecated/clutter-media.c:135
+msgid "Subtitle URI"
+msgstr "URI d'o subtitol"
+
+#: ../clutter/deprecated/clutter-media.c:136
+msgid "URI of a subtitle file"
+msgstr "URI d'un fichero de subtitols"
+
+#: ../clutter/deprecated/clutter-media.c:154
+msgid "Subtitle Font Name"
+msgstr "Nombre d'a fuent d'os subtitols"
+
+#: ../clutter/deprecated/clutter-media.c:155
+msgid "The font used to display subtitles"
+msgstr "A fuent usada ta amostrar os subtitols"
+
+#: ../clutter/deprecated/clutter-media.c:172
+msgid "Audio Volume"
+msgstr "Volumen d'o son"
+
+#: ../clutter/deprecated/clutter-media.c:173
+msgid "The volume of the audio"
+msgstr "O volumen d'o son"
+
+#: ../clutter/deprecated/clutter-media.c:189
+msgid "Can Seek"
+msgstr "Puetz mirar"
+
+#: ../clutter/deprecated/clutter-media.c:190
+msgid "Whether the current stream is seekable"
+msgstr "Indica si o fluxo actual se puetz mirar"
+
+#: ../clutter/deprecated/clutter-media.c:207
+msgid "Buffer Fill"
+msgstr "Empliu d'o búfer"
+
+#: ../clutter/deprecated/clutter-media.c:208
+msgid "The fill level of the buffer"
+msgstr "O ran d'empliu d'o búfer"
+
+#: ../clutter/deprecated/clutter-media.c:225
+msgid "The duration of the stream, in seconds"
+msgstr "A durada d'o fluxo, en segundos"
+
+#: ../clutter/deprecated/clutter-rectangle.c:271
+msgid "The color of the rectangle"
+msgstr "A color d'o rectanglo"
+
+#: ../clutter/deprecated/clutter-rectangle.c:284
+msgid "Border Color"
+msgstr "Color d'o canto"
+
+#: ../clutter/deprecated/clutter-rectangle.c:285
+msgid "The color of the border of the rectangle"
+msgstr "A color d'o canto d'o rectanglo"
+
+#: ../clutter/deprecated/clutter-rectangle.c:300
+msgid "Border Width"
+msgstr "Amplaria d'o canto"
+
+#: ../clutter/deprecated/clutter-rectangle.c:301
+msgid "The width of the border of the rectangle"
+msgstr "L'amplaria d'o canto d'o rectanglo"
+
+#: ../clutter/deprecated/clutter-rectangle.c:315
+msgid "Has Border"
+msgstr "Tien canto"
+
+#: ../clutter/deprecated/clutter-rectangle.c:316
+msgid "Whether the rectangle should have a border"
+msgstr "Indica si o rectanglo debe tener canto"
+
+#: ../clutter/deprecated/clutter-shader.c:257
+msgid "Vertex Source"
+msgstr "Orichen d'o vertiz"
+
+#: ../clutter/deprecated/clutter-shader.c:258
+msgid "Source of vertex shader"
+msgstr "Orichen d'o uembrau d'o vertiz"
+
+#: ../clutter/deprecated/clutter-shader.c:274
+msgid "Fragment Source"
+msgstr "Orichen d'a fleca"
+
+#: ../clutter/deprecated/clutter-shader.c:275
+msgid "Source of fragment shader"
+msgstr "Orichen d'o uembrau d'a fleca"
+
+#: ../clutter/deprecated/clutter-shader.c:292
+msgid "Compiled"
+msgstr "Compilau"
+
+#: ../clutter/deprecated/clutter-shader.c:293
+msgid "Whether the shader is compiled and linked"
+msgstr "Indica si o uembrau ye compilau y enlazau"
+
+#: ../clutter/deprecated/clutter-shader.c:310
+msgid "Whether the shader is enabled"
+msgstr "Indica si o uembrau ye activau"
+
+#: ../clutter/deprecated/clutter-shader.c:521
+#, c-format
+msgid "%s compilation failed: %s"
+msgstr "ha fallau a compilación de %s: %s"
+
+#: ../clutter/deprecated/clutter-shader.c:522
+msgid "Vertex shader"
+msgstr "Uembrau d'o vertiz"
+
+#: ../clutter/deprecated/clutter-shader.c:523
+msgid "Fragment shader"
+msgstr "Uembrau d'a fleca"
+
+#: ../clutter/deprecated/clutter-state.c:1499
+msgid "State"
+msgstr "Estau"
+
+#: ../clutter/deprecated/clutter-state.c:1500
+msgid "Currently set state, (transition to this state might not be complete)"
+msgstr ""
+"Estau establiu actualment, (a transición ta iste estau puet no estar "
+"completa)"
+
+#: ../clutter/deprecated/clutter-state.c:1518
+msgid "Default transition duration"
+msgstr "Durada d'a transición predeterminada"
+
+#: ../clutter/deprecated/clutter-table-layout.c:543
+msgid "Column Number"
+msgstr "Numero de columna"
+
+#: ../clutter/deprecated/clutter-table-layout.c:544
+msgid "The column the widget resides in"
+msgstr "A columna en a quala ye o widget"
+
+#: ../clutter/deprecated/clutter-table-layout.c:551
+msgid "Row Number"
+msgstr "Numero de ringlera"
+
+#: ../clutter/deprecated/clutter-table-layout.c:552
+msgid "The row the widget resides in"
+msgstr "A ringlera en a quala ye o widget"
+
+#: ../clutter/deprecated/clutter-table-layout.c:559
+msgid "Column Span"
+msgstr "Espaciau entre columnas"
+
+#: ../clutter/deprecated/clutter-table-layout.c:560
+msgid "The number of columns the widget should span"
+msgstr "O numero de columnas que o widget debe expandir-se"
+
+#: ../clutter/deprecated/clutter-table-layout.c:567
+msgid "Row Span"
+msgstr "Espaciau entre ringleras"
+
+#: ../clutter/deprecated/clutter-table-layout.c:568
+msgid "The number of rows the widget should span"
+msgstr "O numero de ringleras que o widget debe expandir-se"
+
+#: ../clutter/deprecated/clutter-table-layout.c:575
+msgid "Horizontal Expand"
+msgstr "Expansión horizontal"
+
+#: ../clutter/deprecated/clutter-table-layout.c:576
+msgid "Allocate extra space for the child in horizontal axis"
+msgstr "Asignar espacio adicional ta lo fillo en l'eixe horizontal"
+
+#: ../clutter/deprecated/clutter-table-layout.c:582
+msgid "Vertical Expand"
+msgstr "Expansión vertical"
+
+#: ../clutter/deprecated/clutter-table-layout.c:583
+msgid "Allocate extra space for the child in vertical axis"
+msgstr "Asignar espacio adicional ta lo fillo en l'eixe vertical"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1638
+msgid "Spacing between columns"
+msgstr "Espaciau entre columnas"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1654
+msgid "Spacing between rows"
+msgstr "Espaciau entre ringleras"
+
+#: ../clutter/deprecated/clutter-texture.c:992
+msgid "Sync size of actor"
+msgstr "Sincronizar a grandaria de l'actor"
+
+#: ../clutter/deprecated/clutter-texture.c:993
+msgid "Auto sync size of actor to underlying pixbuf dimensions"
+msgstr ""
+"Sincronizar automaticament a grandaria de l'actor a las dimensions de "
+"«pixbuf» subchacent"
+
+#: ../clutter/deprecated/clutter-texture.c:1000
+msgid "Disable Slicing"
+msgstr "Desactivar o troceyau"
+
+#: ../clutter/deprecated/clutter-texture.c:1001
+msgid ""
+"Forces the underlying texture to be singular and not made of smaller space "
+"saving individual textures"
+msgstr ""
+"Afuerza a la textura subchacent a estar singular y a que no siga feita d'un "
+"espacio menor alzando texturas individuals"
+
+#: ../clutter/deprecated/clutter-texture.c:1010
+msgid "Tile Waste"
+msgstr "Quadrau sobrant"
+
+#: ../clutter/deprecated/clutter-texture.c:1011
+msgid "Maximum waste area of a sliced texture"
+msgstr "Aria maxima sobrant d'una textura troceyada"
+
+#: ../clutter/deprecated/clutter-texture.c:1019
+msgid "Horizontal repeat"
+msgstr "Segundiada horizontal"
+
+#: ../clutter/deprecated/clutter-texture.c:1020
+msgid "Repeat the contents rather than scaling them horizontally"
+msgstr "Segundia lo conteniu en cuenta d'escalar-lo horizontalment"
+
+#: ../clutter/deprecated/clutter-texture.c:1027
+msgid "Vertical repeat"
+msgstr "Segundiada vertical"
+
+#: ../clutter/deprecated/clutter-texture.c:1028
+msgid "Repeat the contents rather than scaling them vertically"
+msgstr "Segundia lo conteniu en cuenta d'escalar-lo verticalment"
+
+#: ../clutter/deprecated/clutter-texture.c:1035
+msgid "Filter Quality"
+msgstr "Calidat d'o filtro"
+
+#: ../clutter/deprecated/clutter-texture.c:1036
+msgid "Rendering quality used when drawing the texture"
+msgstr "Calidat de renderizau usada en dibuixar a textura"
+
+#: ../clutter/deprecated/clutter-texture.c:1044
+msgid "Pixel Format"
+msgstr "Formato d'o pixel"
+
+#: ../clutter/deprecated/clutter-texture.c:1045
+msgid "The Cogl pixel format to use"
+msgstr "O formato de pixel Cogl que usar"
+
+#: ../clutter/deprecated/clutter-texture.c:1053
+#: ../clutter/wayland/clutter-wayland-surface.c:445
+msgid "Cogl Texture"
+msgstr "Textura de Cogl"
+
+#: ../clutter/deprecated/clutter-texture.c:1054
+#: ../clutter/wayland/clutter-wayland-surface.c:446
+msgid "The underlying Cogl texture handle used to draw this actor"
+msgstr "A textura Cogl subchacent usada ta dibuixar iste actor"
+
+#: ../clutter/deprecated/clutter-texture.c:1061
+msgid "Cogl Material"
+msgstr "Material de Cogl"
+
+#: ../clutter/deprecated/clutter-texture.c:1062
+msgid "The underlying Cogl material handle used to draw this actor"
+msgstr "O material de Cogl subchacent usau ta dibuixar iste actor"
+
+#: ../clutter/deprecated/clutter-texture.c:1081
+msgid "The path of the file containing the image data"
+msgstr "A rota d'o fichero que contién os datos d'a imachen"
+
+#: ../clutter/deprecated/clutter-texture.c:1088
+msgid "Keep Aspect Ratio"
+msgstr "Mantener a proporción d'aspecto"
+
+#: ../clutter/deprecated/clutter-texture.c:1089
+msgid ""
+"Keep the aspect ratio of the texture when requesting the preferred width or "
+"height"
+msgstr ""
+"Mantener a relación d'aspecto d'a textura en solicitar l'amplaria u "
+"l'altaria preferidas"
+
+#: ../clutter/deprecated/clutter-texture.c:1117
+msgid "Load asynchronously"
+msgstr "Cargar de traza asincrona"
+
+#: ../clutter/deprecated/clutter-texture.c:1118
+msgid ""
+"Load files inside a thread to avoid blocking when loading images from disk"
+msgstr ""
+"Cargar os fichers en un filo ta privar bloqueyos en cargar imachens dende o "
+"disco"
+
+#: ../clutter/deprecated/clutter-texture.c:1136
+msgid "Load data asynchronously"
+msgstr "Cargar os datos de forma asincrona"
+
+#: ../clutter/deprecated/clutter-texture.c:1137
+msgid ""
+"Decode image data files inside a thread to reduce blocking when loading "
+"images from disk"
+msgstr ""
+"Decodificar os fichers de datos d'imachens en un filo ta reducir os "
+"bloqueyos en cargar imachens dende o disco"
+
+#: ../clutter/deprecated/clutter-texture.c:1163
+msgid "Pick With Alpha"
+msgstr "Seleccionar con alfa"
+
+#: ../clutter/deprecated/clutter-texture.c:1164
+msgid "Shape actor with alpha channel when picking"
+msgstr "Dar forma a l'actor con canal alfa en seleccionar-lo"
+
+#: ../clutter/deprecated/clutter-texture.c:1597
+#: ../clutter/deprecated/clutter-texture.c:1992
+#: ../clutter/deprecated/clutter-texture.c:2088
+#: ../clutter/deprecated/clutter-texture.c:2386
+#, c-format
+msgid "Failed to load the image data"
+msgstr "S'ha produciu una error en cargar os datos d'a imachen"
+
+#: ../clutter/deprecated/clutter-texture.c:1756
+#, c-format
+msgid "YUV textures are not supported"
+msgstr "As texturas YUV no son suportadas"
+
+#: ../clutter/deprecated/clutter-texture.c:1765
+#, c-format
+msgid "YUV2 textues are not supported"
+msgstr "As texturas YUV2 no son suportadas"
+
+#: ../clutter/evdev/clutter-input-device-evdev.c:154
+msgid "sysfs Path"
+msgstr "Rota de sysfs"
+
+#: ../clutter/evdev/clutter-input-device-evdev.c:155
+msgid "Path of the device in sysfs"
+msgstr "Rota d'o dispositivo en sysfs"
+
+#: ../clutter/evdev/clutter-input-device-evdev.c:170
+msgid "Device Path"
+msgstr "Rota d'o dispositivo"
+
+#: ../clutter/evdev/clutter-input-device-evdev.c:171
+msgid "Path of the device node"
+msgstr "Rota a lo nodo d'o dispositivo"
+
+#: ../clutter/gdk/clutter-backend-gdk.c:289
+#, c-format
+msgid "Could not find a suitable CoglWinsys for a GdkDisplay of type %s"
+msgstr ""
+"No s'ha puesto trobar un CoglWinsys adequau ta un GdkDisplay de mena %s"
+
+#: ../clutter/wayland/clutter-wayland-surface.c:419
+msgid "Surface"
+msgstr " Superficie"
+
+#: ../clutter/wayland/clutter-wayland-surface.c:420
+msgid "The underlying wayland surface"
+msgstr "A superficie Wayland subchacent"
+
+#: ../clutter/wayland/clutter-wayland-surface.c:427
+msgid "Surface width"
+msgstr "Amplaria d'a superficie"
+
+#: ../clutter/wayland/clutter-wayland-surface.c:428
+msgid "The width of the underlying wayland surface"
+msgstr "L'amplaria d'a superficie Wayland subchacent"
+
+#: ../clutter/wayland/clutter-wayland-surface.c:436
+msgid "Surface height"
+msgstr "Altaria d'a superficie"
+
+#: ../clutter/wayland/clutter-wayland-surface.c:437
+msgid "The height of the underlying wayland surface"
+msgstr "L'altaria d'a superficie Wayland subchacent"
+
+#: ../clutter/x11/clutter-backend-x11.c:488
+msgid "X display to use"
+msgstr "Pantalla X que usar"
+
+#: ../clutter/x11/clutter-backend-x11.c:494
+msgid "X screen to use"
+msgstr "Pantalla X ta fer servir"
+
+#: ../clutter/x11/clutter-backend-x11.c:499
+msgid "Make X calls synchronous"
+msgstr "Fer clamadas a X síncronas"
+
+#: ../clutter/x11/clutter-backend-x11.c:506
+msgid "Disable XInput support"
+msgstr "Desactivar o suporte de XInput"
+
+#: ../clutter/x11/clutter-keymap-x11.c:322
+msgid "The Clutter backend"
+msgstr "O backend de Clutter"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:534
+msgid "Pixmap"
+msgstr "Mapa de pixels"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:535
+msgid "The X11 Pixmap to be bound"
+msgstr "O mapa de pixels X11 ta asociar"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:543
+msgid "Pixmap width"
+msgstr "Amplaria d'o mapa de pixels"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:544
+msgid "The width of the pixmap bound to this texture"
+msgstr "L'amplaria d'o mapa de pixels asociau a ista textura"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:552
+msgid "Pixmap height"
+msgstr "Altaria d'o mapa de pixels"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:553
+msgid "The height of the pixmap bound to this texture"
+msgstr "L'altaria d'o mapa de pixels asociau a ista textura"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:561
+msgid "Pixmap Depth"
+msgstr "Profundidat d'o mapa de pixels"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:562
+msgid "The depth (in number of bits) of the pixmap bound to this texture"
+msgstr ""
+"A profundidat (en numero de bits) d'o mapa de pixels asociau a ista textura"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:570
+msgid "Automatic Updates"
+msgstr "Actualizacions automáticas"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:571
+msgid "If the texture should be kept in sync with any pixmap changes."
+msgstr ""
+"Indica si cal sincronizar a textura con qualsiquier cambeo en o mapa de "
+"pixels."
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:579
+msgid "Window"
+msgstr "Finestra"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:580
+msgid "The X11 Window to be bound"
+msgstr "A finestra X11 ta asociar"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:588
+msgid "Window Redirect Automatic"
+msgstr "Rendreza automatica d'a finestra"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:589
+msgid "If composite window redirects are set to Automatic (or Manual if false)"
+msgstr ""
+"Indica si a rendreza d'a finestra composada ye establida a «Automatica» (u "
+"«Manual» si ye falso)"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:599
+msgid "Window Mapped"
+msgstr "Finestra mapeyada"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:600
+msgid "If window is mapped"
+msgstr "Indica si a finestra ye mapeyada"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:609
+msgid "Destroyed"
+msgstr "Destruida"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:610
+msgid "If window has been destroyed"
+msgstr "Indica si s'ha destruiu a finestra"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:618
+msgid "Window X"
+msgstr "Finestra X"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:619
+msgid "X position of window on screen according to X11"
+msgstr "Posición X d'a finestra en a pantalla, d'alcuerdo con X11"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:627
+msgid "Window Y"
+msgstr "Finestra Y"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:628
+msgid "Y position of window on screen according to X11"
+msgstr "Posición Y d'a finestra en a pantalla, d'alcuerdo con X11"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:635
+msgid "Window Override Redirect"
+msgstr "Omitir a rendreza d'a finestra"
+
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:636
+msgid "If this is an override-redirect window"
+msgstr "Indica si ista ye una finestra que omite a rendreza"
diff --git a/po/as.po b/po/as.po
index e217354c9..fa6b944fa 100644
--- a/po/as.po
+++ b/po/as.po
@@ -3,707 +3,707 @@
# This file is distributed under the same license as the clutter package.
#
# ngoswami , 2011.
-# Nilamdyuti Goswami , 2011, 2012.
+# Nilamdyuti Goswami , 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: clutter master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
-"cgi?product=clutter&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-08-28 13:46+0000\n"
-"PO-Revision-Date: 2012-09-11 16:58+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=clutter&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-08-18 15:05+0000\n"
+"PO-Revision-Date: 2014-08-18 21:07+0530\n"
"Last-Translator: Nilamdyuti Goswami \n"
-"Language-Team: as_IN \n"
-"Language: \n"
+"Language-Team: American English \n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: ../clutter/clutter-actor.c:6121
+#: ../clutter/clutter-actor.c:6224
msgid "X coordinate"
msgstr "X অক্ষ"
-#: ../clutter/clutter-actor.c:6122
+#: ../clutter/clutter-actor.c:6225
msgid "X coordinate of the actor"
msgstr "অভিনেতাৰ X অক্ষ"
-#: ../clutter/clutter-actor.c:6140
+#: ../clutter/clutter-actor.c:6243
msgid "Y coordinate"
msgstr "Y অক্ষ"
-#: ../clutter/clutter-actor.c:6141
+#: ../clutter/clutter-actor.c:6244
msgid "Y coordinate of the actor"
msgstr "অভিনেতাৰ Y অক্ষ"
-#: ../clutter/clutter-actor.c:6163
+#: ../clutter/clutter-actor.c:6266
msgid "Position"
msgstr "অৱস্থান"
-#: ../clutter/clutter-actor.c:6164
+#: ../clutter/clutter-actor.c:6267
msgid "The position of the origin of the actor"
msgstr "অভিনেতাৰ উৎসৰ অৱস্থান"
-#: ../clutter/clutter-actor.c:6181 ../clutter/clutter-canvas.c:215
-#: ../clutter/clutter-grid-layout.c:1238
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:481
+#: ../clutter/clutter-actor.c:6284 ../clutter/clutter-canvas.c:247
+#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:474
msgid "Width"
msgstr "প্ৰস্থ"
-#: ../clutter/clutter-actor.c:6182
+#: ../clutter/clutter-actor.c:6285
msgid "Width of the actor"
msgstr "অভিনেতাৰ প্ৰস্থ"
-#: ../clutter/clutter-actor.c:6200 ../clutter/clutter-canvas.c:231
-#: ../clutter/clutter-grid-layout.c:1245
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:497
+#: ../clutter/clutter-actor.c:6303 ../clutter/clutter-canvas.c:263
+#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:490
msgid "Height"
msgstr "উচ্চতা"
-#: ../clutter/clutter-actor.c:6201
+#: ../clutter/clutter-actor.c:6304
msgid "Height of the actor"
msgstr "অভিনেতাৰ উচ্চতা"
-#: ../clutter/clutter-actor.c:6222
+#: ../clutter/clutter-actor.c:6325
msgid "Size"
msgstr "আকাৰ"
-#: ../clutter/clutter-actor.c:6223
+#: ../clutter/clutter-actor.c:6326
msgid "The size of the actor"
msgstr "অভিনেতাৰ আকাৰ"
-#: ../clutter/clutter-actor.c:6241
+#: ../clutter/clutter-actor.c:6344
msgid "Fixed X"
msgstr "নিৰ্দিষ্ট X"
-#: ../clutter/clutter-actor.c:6242
+#: ../clutter/clutter-actor.c:6345
msgid "Forced X position of the actor"
msgstr "অভিনেতাৰ বলৱৎ X অৱস্থান"
-#: ../clutter/clutter-actor.c:6259
+#: ../clutter/clutter-actor.c:6362
msgid "Fixed Y"
msgstr "নিৰ্দিষ্ট Y"
-#: ../clutter/clutter-actor.c:6260
+#: ../clutter/clutter-actor.c:6363
msgid "Forced Y position of the actor"
msgstr "অভিনেতাৰ বলৱৎ Y অৱস্থান"
-#: ../clutter/clutter-actor.c:6275
+#: ../clutter/clutter-actor.c:6378
msgid "Fixed position set"
msgstr "নিৰ্দিষ্ট অৱস্থান সংহতি"
-#: ../clutter/clutter-actor.c:6276
+#: ../clutter/clutter-actor.c:6379
msgid "Whether to use fixed positioning for the actor"
msgstr "অভওিনায়কৰ বাবে নিৰ্দিষ্ট অৱস্থান ব্যৱহাৰ কৰা হব নে"
-#: ../clutter/clutter-actor.c:6294
+#: ../clutter/clutter-actor.c:6397
msgid "Min Width"
msgstr "নূন্যতম প্ৰস্থ"
-#: ../clutter/clutter-actor.c:6295
+#: ../clutter/clutter-actor.c:6398
msgid "Forced minimum width request for the actor"
msgstr "অভিনেতাৰ বাবে বলৱৎ নূন্যতম প্ৰস্থ অনুৰোধ"
-#: ../clutter/clutter-actor.c:6313
+#: ../clutter/clutter-actor.c:6416
msgid "Min Height"
msgstr "নূন্যতম উচ্চতা"
-#: ../clutter/clutter-actor.c:6314
+#: ../clutter/clutter-actor.c:6417
msgid "Forced minimum height request for the actor"
msgstr "অভিনেতাৰ বাবে বলৱৎ নূন্যতম উচ্চতা অনুৰোধ"
-#: ../clutter/clutter-actor.c:6332
+#: ../clutter/clutter-actor.c:6435
msgid "Natural Width"
msgstr "স্বাভাৱিক প্ৰস্থ"
-#: ../clutter/clutter-actor.c:6333
+#: ../clutter/clutter-actor.c:6436
msgid "Forced natural width request for the actor"
msgstr "অভিনেতাৰ বাবে বলৱৎ স্বাভাৱিক প্ৰস্থ অনুৰোধ"
-#: ../clutter/clutter-actor.c:6351
+#: ../clutter/clutter-actor.c:6454
msgid "Natural Height"
msgstr "স্বাভাৱিক উচ্চতা"
-#: ../clutter/clutter-actor.c:6352
+#: ../clutter/clutter-actor.c:6455
msgid "Forced natural height request for the actor"
msgstr "অভিনেতাৰ বাবে বলৱৎ স্বাভাৱিক উচ্চতা অনুৰোধ"
-#: ../clutter/clutter-actor.c:6367
+#: ../clutter/clutter-actor.c:6470
msgid "Minimum width set"
msgstr "নূন্যতম প্ৰস্থ সংহতি"
-#: ../clutter/clutter-actor.c:6368
+#: ../clutter/clutter-actor.c:6471
msgid "Whether to use the min-width property"
msgstr "নূন্যতম-প্ৰস্থ বৈশিষ্ট ব্যৱহাৰ কৰা হব নে"
-#: ../clutter/clutter-actor.c:6382
+#: ../clutter/clutter-actor.c:6485
msgid "Minimum height set"
msgstr "নূন্যতম উচ্চতা সংহতি"
-#: ../clutter/clutter-actor.c:6383
+#: ../clutter/clutter-actor.c:6486
msgid "Whether to use the min-height property"
msgstr "নূন্যতম-উচ্চতা বৈশিষ্ট ব্যৱহাৰ কৰা হব নে"
-#: ../clutter/clutter-actor.c:6397
+#: ../clutter/clutter-actor.c:6500
msgid "Natural width set"
msgstr "স্বাভাৱিক প্ৰস্থ সংহতি"
-#: ../clutter/clutter-actor.c:6398
+#: ../clutter/clutter-actor.c:6501
msgid "Whether to use the natural-width property"
msgstr "স্বাভাৱিক-প্ৰস্থ বৈশিষ্ট ব্যৱহাৰ কৰা হব নে"
-#: ../clutter/clutter-actor.c:6412
+#: ../clutter/clutter-actor.c:6515
msgid "Natural height set"
msgstr "স্বাভাৱিক উচ্চতা সংহতি"
-#: ../clutter/clutter-actor.c:6413
+#: ../clutter/clutter-actor.c:6516
msgid "Whether to use the natural-height property"
msgstr "স্বাভাৱিক-উচ্চতা বৈশিষ্ট ব্যৱহাৰ কৰা হব নে"
-#: ../clutter/clutter-actor.c:6429
+#: ../clutter/clutter-actor.c:6532
msgid "Allocation"
msgstr "আবন্টন"
-#: ../clutter/clutter-actor.c:6430
+#: ../clutter/clutter-actor.c:6533
msgid "The actor's allocation"
msgstr "অভিনেতাৰ আবন্টন"
-#: ../clutter/clutter-actor.c:6487
+#: ../clutter/clutter-actor.c:6590
msgid "Request Mode"
msgstr "অনুৰোধ অৱস্থা"
-#: ../clutter/clutter-actor.c:6488
+#: ../clutter/clutter-actor.c:6591
msgid "The actor's request mode"
msgstr "অভিনেতাৰ অনুৰোধ অৱস্থা"
-#: ../clutter/clutter-actor.c:6512
+#: ../clutter/clutter-actor.c:6615
msgid "Depth"
msgstr "গভীৰতা"
-#: ../clutter/clutter-actor.c:6513
+#: ../clutter/clutter-actor.c:6616
msgid "Position on the Z axis"
msgstr "Z অক্ষত অৱস্থান"
-#: ../clutter/clutter-actor.c:6540
+#: ../clutter/clutter-actor.c:6643
msgid "Z Position"
msgstr "Z অৱস্থান"
-#: ../clutter/clutter-actor.c:6541
+#: ../clutter/clutter-actor.c:6644
msgid "The actor's position on the Z axis"
msgstr "Z অক্ষত অভিনেতাৰ অৱস্থান"
-#: ../clutter/clutter-actor.c:6558
+#: ../clutter/clutter-actor.c:6661
msgid "Opacity"
msgstr "অস্বচ্ছতা"
-#: ../clutter/clutter-actor.c:6559
+#: ../clutter/clutter-actor.c:6662
msgid "Opacity of an actor"
msgstr "এজন অভিনেতাৰ অস্বচ্ছতা"
-#: ../clutter/clutter-actor.c:6579
+#: ../clutter/clutter-actor.c:6682
msgid "Offscreen redirect"
msgstr "অফস্ক্ৰিন পুনৰনিৰ্দেশ"
-#: ../clutter/clutter-actor.c:6580
+#: ../clutter/clutter-actor.c:6683
msgid "Flags controlling when to flatten the actor into a single image"
msgstr "অভিনেতাক কেতিয়া এটা ছবিত চেপেটা কৰা হব সেয়া নিয়ন্ত্ৰণ কৰা ফ্লেগসমূহ"
-#: ../clutter/clutter-actor.c:6594
+#: ../clutter/clutter-actor.c:6697
msgid "Visible"
msgstr "দৃশ্যমান"
-#: ../clutter/clutter-actor.c:6595
+#: ../clutter/clutter-actor.c:6698
msgid "Whether the actor is visible or not"
msgstr "অভিনেতা দৃশ্যমান হয় নে নহয়"
-#: ../clutter/clutter-actor.c:6609
+#: ../clutter/clutter-actor.c:6712
msgid "Mapped"
msgstr "মেপ্পড্"
-#: ../clutter/clutter-actor.c:6610
+#: ../clutter/clutter-actor.c:6713
msgid "Whether the actor will be painted"
msgstr "অভিনেতাকক ৰঙ কৰা হব নে"
-#: ../clutter/clutter-actor.c:6623
+#: ../clutter/clutter-actor.c:6726
msgid "Realized"
msgstr "উপলব্ধিত"
-#: ../clutter/clutter-actor.c:6624
+#: ../clutter/clutter-actor.c:6727
msgid "Whether the actor has been realized"
msgstr "অভিনেতাক উপলব্ধি কৰা হৈছে নে"
-#: ../clutter/clutter-actor.c:6639
+#: ../clutter/clutter-actor.c:6742
msgid "Reactive"
msgstr "প্ৰতিক্ৰিয়া"
-#: ../clutter/clutter-actor.c:6640
+#: ../clutter/clutter-actor.c:6743
msgid "Whether the actor is reactive to events"
msgstr "অভিনেতাজন ঘটনাসমূহলে প্ৰতিক্ৰিয়া কৰে নে"
-#: ../clutter/clutter-actor.c:6651
+#: ../clutter/clutter-actor.c:6754
msgid "Has Clip"
msgstr "ক্লিপ আছে নে"
-#: ../clutter/clutter-actor.c:6652
+#: ../clutter/clutter-actor.c:6755
msgid "Whether the actor has a clip set"
msgstr "অভিনেতাৰ এটা ক্লিপ সংহতি আছে নে"
-#: ../clutter/clutter-actor.c:6665
+#: ../clutter/clutter-actor.c:6768
msgid "Clip"
msgstr "ক্লিপ"
-#: ../clutter/clutter-actor.c:6666
+#: ../clutter/clutter-actor.c:6769
msgid "The clip region for the actor"
msgstr "অভিনেতাৰ বাবে ক্লিপ অঞ্চল"
-#: ../clutter/clutter-actor.c:6685
+#: ../clutter/clutter-actor.c:6788
msgid "Clip Rectangle"
msgstr "ক্লিপ আয়ত"
-#: ../clutter/clutter-actor.c:6686
+#: ../clutter/clutter-actor.c:6789
msgid "The visible region of the actor"
msgstr "অভিনেতাৰ দৃশ্যমান অঞ্চল"
-#: ../clutter/clutter-actor.c:6700 ../clutter/clutter-actor-meta.c:207
-#: ../clutter/clutter-binding-pool.c:319 ../clutter/clutter-input-device.c:258
+#: ../clutter/clutter-actor.c:6803 ../clutter/clutter-actor-meta.c:205
+#: ../clutter/clutter-binding-pool.c:318 ../clutter/clutter-input-device.c:247
msgid "Name"
msgstr "নাম"
-#: ../clutter/clutter-actor.c:6701
+#: ../clutter/clutter-actor.c:6804
msgid "Name of the actor"
msgstr "অভিনেতাৰ নাম"
-#: ../clutter/clutter-actor.c:6722
+#: ../clutter/clutter-actor.c:6825
msgid "Pivot Point"
msgstr "পিভট বিন্দু"
-#: ../clutter/clutter-actor.c:6723
+#: ../clutter/clutter-actor.c:6826
msgid "The point around which the scaling and rotation occur"
msgstr "বিন্দু যাক কেন্দ্ৰ কৰি স্কেইলিং আৰু ঘূৰ্ণন হয়"
-#: ../clutter/clutter-actor.c:6741
+#: ../clutter/clutter-actor.c:6844
msgid "Pivot Point Z"
msgstr "পিভট বিন্দু Z"
-#: ../clutter/clutter-actor.c:6742
+#: ../clutter/clutter-actor.c:6845
msgid "Z component of the pivot point"
msgstr "পিভট বিন্দুৰ Z উপাদান"
-#: ../clutter/clutter-actor.c:6760
+#: ../clutter/clutter-actor.c:6863
msgid "Scale X"
msgstr "স্কেইল X"
-#: ../clutter/clutter-actor.c:6761
+#: ../clutter/clutter-actor.c:6864
msgid "Scale factor on the X axis"
msgstr "X অক্ষত স্কেইল কাৰক"
-#: ../clutter/clutter-actor.c:6779
+#: ../clutter/clutter-actor.c:6882
msgid "Scale Y"
msgstr "অক্ষ Y"
-#: ../clutter/clutter-actor.c:6780
+#: ../clutter/clutter-actor.c:6883
msgid "Scale factor on the Y axis"
msgstr "Y অক্ষত স্কেইল কাৰক"
-#: ../clutter/clutter-actor.c:6798
+#: ../clutter/clutter-actor.c:6901
msgid "Scale Z"
msgstr "স্কেইল Z"
-#: ../clutter/clutter-actor.c:6799
+#: ../clutter/clutter-actor.c:6902
msgid "Scale factor on the Z axis"
msgstr "Z অক্ষত স্কেইল কাৰক"
-#: ../clutter/clutter-actor.c:6817
+#: ../clutter/clutter-actor.c:6920
msgid "Scale Center X"
msgstr "স্কেইল কেন্দ্ৰ X"
-#: ../clutter/clutter-actor.c:6818
+#: ../clutter/clutter-actor.c:6921
msgid "Horizontal scale center"
msgstr "আনুভূমিক স্কেইল কেন্দ্ৰ"
-#: ../clutter/clutter-actor.c:6836
+#: ../clutter/clutter-actor.c:6939
msgid "Scale Center Y"
msgstr "স্কেইল কেন্দ্ৰ Y"
-#: ../clutter/clutter-actor.c:6837
+#: ../clutter/clutter-actor.c:6940
msgid "Vertical scale center"
msgstr "উলম্ব স্কেইল কেন্দ্ৰ"
-#: ../clutter/clutter-actor.c:6855
+#: ../clutter/clutter-actor.c:6958
msgid "Scale Gravity"
msgstr "স্কেইল মাধ্যাকৰ্ষণ"
-#: ../clutter/clutter-actor.c:6856
+#: ../clutter/clutter-actor.c:6959
msgid "The center of scaling"
msgstr "স্কেইলিংৰ কেন্দ্ৰ"
-#: ../clutter/clutter-actor.c:6874
+#: ../clutter/clutter-actor.c:6977
msgid "Rotation Angle X"
msgstr "ঘূৰ্ণন কোণ X"
-#: ../clutter/clutter-actor.c:6875
+#: ../clutter/clutter-actor.c:6978
msgid "The rotation angle on the X axis"
msgstr "X অক্ষত ঘূৰ্ণন কোণ"
-#: ../clutter/clutter-actor.c:6893
+#: ../clutter/clutter-actor.c:6996
msgid "Rotation Angle Y"
msgstr "ঘূৰ্ণন কোণ Y"
-#: ../clutter/clutter-actor.c:6894
+#: ../clutter/clutter-actor.c:6997
msgid "The rotation angle on the Y axis"
msgstr "Y অক্ষত ঘূৰ্ণন কোণ"
-#: ../clutter/clutter-actor.c:6912
+#: ../clutter/clutter-actor.c:7015
msgid "Rotation Angle Z"
msgstr "ঘূৰ্ণন কোণ Z"
-#: ../clutter/clutter-actor.c:6913
+#: ../clutter/clutter-actor.c:7016
msgid "The rotation angle on the Z axis"
msgstr "Z অক্ষত ঘূৰ্ণন কোণ"
-#: ../clutter/clutter-actor.c:6931
+#: ../clutter/clutter-actor.c:7034
msgid "Rotation Center X"
msgstr "ঘূৰ্ণন কেন্দ্ৰ X"
-#: ../clutter/clutter-actor.c:6932
+#: ../clutter/clutter-actor.c:7035
msgid "The rotation center on the X axis"
msgstr "X অক্ষত ঘূৰ্ণন কেন্দ্ৰ"
-#: ../clutter/clutter-actor.c:6949
+#: ../clutter/clutter-actor.c:7052
msgid "Rotation Center Y"
msgstr "ঘূৰ্ণন কেন্দ্ৰ Y"
-#: ../clutter/clutter-actor.c:6950
+#: ../clutter/clutter-actor.c:7053
msgid "The rotation center on the Y axis"
msgstr "Y অক্ষত ঘূৰ্ণন কেন্দ্ৰ"
-#: ../clutter/clutter-actor.c:6967
+#: ../clutter/clutter-actor.c:7070
msgid "Rotation Center Z"
msgstr "ঘূৰ্ণন কেন্দ্ৰ Z"
-#: ../clutter/clutter-actor.c:6968
+#: ../clutter/clutter-actor.c:7071
msgid "The rotation center on the Z axis"
msgstr "Z অক্ষত ঘূৰ্ণন কেন্দ্ৰ"
-#: ../clutter/clutter-actor.c:6985
+#: ../clutter/clutter-actor.c:7088
msgid "Rotation Center Z Gravity"
msgstr "ঘূৰ্ণন কেন্দ্ৰ Z মাধ্যাকৰ্ষণ"
-#: ../clutter/clutter-actor.c:6986
+#: ../clutter/clutter-actor.c:7089
msgid "Center point for rotation around the Z axis"
msgstr "Z অক্ষৰ চাৰিওফালে ঘূৰিবলে কেন্দ্ৰবিন্দু"
-#: ../clutter/clutter-actor.c:7014
+#: ../clutter/clutter-actor.c:7117
msgid "Anchor X"
msgstr "সুত্ৰধাৰ X"
-#: ../clutter/clutter-actor.c:7015
+#: ../clutter/clutter-actor.c:7118
msgid "X coordinate of the anchor point"
msgstr "সুত্ৰধাৰ বিন্দুৰ X অক্ষ"
-#: ../clutter/clutter-actor.c:7043
+#: ../clutter/clutter-actor.c:7146
msgid "Anchor Y"
msgstr "সুত্ৰধাৰ Y"
-#: ../clutter/clutter-actor.c:7044
+#: ../clutter/clutter-actor.c:7147
msgid "Y coordinate of the anchor point"
msgstr "সুত্ৰধাৰ বিন্দুৰ Y অক্ষ"
-#: ../clutter/clutter-actor.c:7071
+#: ../clutter/clutter-actor.c:7174
msgid "Anchor Gravity"
msgstr "সুত্ৰধাৰ মাধ্যাকৰ্ষণ"
-#: ../clutter/clutter-actor.c:7072
+#: ../clutter/clutter-actor.c:7175
msgid "The anchor point as a ClutterGravity"
msgstr "ClutterGravity হিচাপে সুত্ৰধাৰ বিন্দু"
-#: ../clutter/clutter-actor.c:7091
+#: ../clutter/clutter-actor.c:7194
msgid "Translation X"
msgstr "অনুবাদ X"
-#: ../clutter/clutter-actor.c:7092
+#: ../clutter/clutter-actor.c:7195
msgid "Translation along the X axis"
msgstr "X অক্ষত অনুবাদ"
-#: ../clutter/clutter-actor.c:7111
+#: ../clutter/clutter-actor.c:7214
msgid "Translation Y"
msgstr "অনুবাদ Y"
-#: ../clutter/clutter-actor.c:7112
+#: ../clutter/clutter-actor.c:7215
msgid "Translation along the Y axis"
msgstr "Y অক্ষত অনুবাদ"
-#: ../clutter/clutter-actor.c:7131
+#: ../clutter/clutter-actor.c:7234
msgid "Translation Z"
msgstr "অনুবাদ Z"
-#: ../clutter/clutter-actor.c:7132
+#: ../clutter/clutter-actor.c:7235
msgid "Translation along the Z axis"
msgstr "Z অক্ষত অনুবাদ"
-#: ../clutter/clutter-actor.c:7160
+#: ../clutter/clutter-actor.c:7265
msgid "Transform"
msgstr "পৰিবৰ্তন"
-#: ../clutter/clutter-actor.c:7161
+#: ../clutter/clutter-actor.c:7266
msgid "Transformation matrix"
msgstr "ৰুপান্তৰ মেট্ৰিক্স"
-#: ../clutter/clutter-actor.c:7175
+#: ../clutter/clutter-actor.c:7281
msgid "Transform Set"
msgstr "ৰুপান্তৰ সংহতি"
-#: ../clutter/clutter-actor.c:7176
+#: ../clutter/clutter-actor.c:7282
msgid "Whether the transform property is set"
msgstr "ৰুপান্তৰ বৈশিষ্ট সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-actor.c:7195
+#: ../clutter/clutter-actor.c:7303
msgid "Child Transform"
msgstr "সন্তান পৰিবৰ্তন"
-#: ../clutter/clutter-actor.c:7196
+#: ../clutter/clutter-actor.c:7304
msgid "Children transformation matrix"
msgstr "সন্তান ৰুপান্তৰ মেট্ৰিক্স"
-#: ../clutter/clutter-actor.c:7210
+#: ../clutter/clutter-actor.c:7319
msgid "Child Transform Set"
msgstr "সন্তান ৰুপান্তৰ সংহতি"
-#: ../clutter/clutter-actor.c:7211
+#: ../clutter/clutter-actor.c:7320
msgid "Whether the child-transform property is set"
msgstr "সন্তান-ৰুপান্তৰ বৈশিষ্ট সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-actor.c:7228
+#: ../clutter/clutter-actor.c:7337
msgid "Show on set parent"
msgstr "সংহতি উপধায়কত দেখুৱাওক"
-#: ../clutter/clutter-actor.c:7229
+#: ../clutter/clutter-actor.c:7338
msgid "Whether the actor is shown when parented"
msgstr "উপধায়ক কৰোতে অভিনেতাক দেখুৱা হয় নে"
-#: ../clutter/clutter-actor.c:7246
+#: ../clutter/clutter-actor.c:7355
msgid "Clip to Allocation"
msgstr "আবন্টনলে ক্লিপ"
-#: ../clutter/clutter-actor.c:7247
+#: ../clutter/clutter-actor.c:7356
msgid "Sets the clip region to track the actor's allocation"
msgstr "অভিনেতাৰ আবন্টন অনুকৰন কৰিবলে ক্লিপ অঞ্চল সংহতি কৰক"
-#: ../clutter/clutter-actor.c:7260
+#: ../clutter/clutter-actor.c:7369
msgid "Text Direction"
-msgstr "লিখনী দিশ"
+msgstr "লিখনি দিশ"
-#: ../clutter/clutter-actor.c:7261
+#: ../clutter/clutter-actor.c:7370
msgid "Direction of the text"
-msgstr "লিখনীৰ দিশ"
+msgstr "লিখনিৰ দিশ"
-#: ../clutter/clutter-actor.c:7276
+#: ../clutter/clutter-actor.c:7385
msgid "Has Pointer"
msgstr "পোইন্টাৰ আছে"
-#: ../clutter/clutter-actor.c:7277
+#: ../clutter/clutter-actor.c:7386
msgid "Whether the actor contains the pointer of an input device"
msgstr "অভিনায়কে এটা ইনপুট ডিভাইচৰ পোইন্টাৰ অন্তৰ্ভুক্ত কৰে নে"
-#: ../clutter/clutter-actor.c:7290
+#: ../clutter/clutter-actor.c:7399
msgid "Actions"
msgstr "কাৰ্য্যসমূহ"
-#: ../clutter/clutter-actor.c:7291
+#: ../clutter/clutter-actor.c:7400
msgid "Adds an action to the actor"
msgstr "অভিনেতালে এটা কাৰ্য্য যোগ কৰে"
-#: ../clutter/clutter-actor.c:7304
+#: ../clutter/clutter-actor.c:7413
msgid "Constraints"
msgstr "বাধাসমূহ"
-#: ../clutter/clutter-actor.c:7305
+#: ../clutter/clutter-actor.c:7414
msgid "Adds a constraint to the actor"
msgstr "অভিনেতালে এটা বাধা যোগ কৰে"
-#: ../clutter/clutter-actor.c:7318
+#: ../clutter/clutter-actor.c:7427
msgid "Effect"
msgstr "পৰিণতি"
-#: ../clutter/clutter-actor.c:7319
+#: ../clutter/clutter-actor.c:7428
msgid "Add an effect to be applied on the actor"
msgstr "অভিনেতালে প্ৰয়োগ কৰিবলে এটা প্ৰভাৱ যোগ কৰে"
-#: ../clutter/clutter-actor.c:7333
+#: ../clutter/clutter-actor.c:7442
msgid "Layout Manager"
msgstr "বিন্যাস ব্যৱস্থাপক"
-#: ../clutter/clutter-actor.c:7334
+#: ../clutter/clutter-actor.c:7443
msgid "The object controlling the layout of an actor's children"
msgstr "এজন অভিনেতাৰ সন্তানৰ বিন্যাস নিয়ন্ত্ৰণ কৰা অবজেক্ট"
-#: ../clutter/clutter-actor.c:7348
+#: ../clutter/clutter-actor.c:7457
msgid "X Expand"
msgstr "X প্ৰসাৰিত"
-#: ../clutter/clutter-actor.c:7349
+#: ../clutter/clutter-actor.c:7458
msgid "Whether extra horizontal space should be assigned to the actor"
msgstr "অতিৰিক্ত আনুভূমিক স্থান অভিনেতালে ধাৰ্য্য কৰা হব নে"
-#: ../clutter/clutter-actor.c:7364
+#: ../clutter/clutter-actor.c:7473
msgid "Y Expand"
msgstr "Y প্ৰসাৰিত"
-#: ../clutter/clutter-actor.c:7365
+#: ../clutter/clutter-actor.c:7474
msgid "Whether extra vertical space should be assigned to the actor"
msgstr "অতিৰিক্ত উলম্ব স্থান অভিনেতালে ধাৰ্য্য কৰা হব নে"
-#: ../clutter/clutter-actor.c:7381
+#: ../clutter/clutter-actor.c:7490
msgid "X Alignment"
msgstr "X সংৰেখন"
-#: ../clutter/clutter-actor.c:7382
+#: ../clutter/clutter-actor.c:7491
msgid "The alignment of the actor on the X axis within its allocation"
msgstr "X অক্ষত তাৰ আবন্টনৰ মাজত অভিনেতাৰ সংৰেখন"
-#: ../clutter/clutter-actor.c:7397
+#: ../clutter/clutter-actor.c:7506
msgid "Y Alignment"
msgstr "Y সংৰেখন"
-#: ../clutter/clutter-actor.c:7398
+#: ../clutter/clutter-actor.c:7507
msgid "The alignment of the actor on the Y axis within its allocation"
msgstr "Y অক্ষত তাৰ আবন্টনৰ ভিতৰত অভিনেতাৰ সংৰেখন"
-#: ../clutter/clutter-actor.c:7417
+#: ../clutter/clutter-actor.c:7526
msgid "Margin Top"
msgstr "সীমাৰ উপৰ"
-#: ../clutter/clutter-actor.c:7418
+#: ../clutter/clutter-actor.c:7527
msgid "Extra space at the top"
msgstr "উপৰত অতিৰিক্ত ঠাই"
-#: ../clutter/clutter-actor.c:7439
+#: ../clutter/clutter-actor.c:7548
msgid "Margin Bottom"
msgstr "সীমাৰ তল"
-#: ../clutter/clutter-actor.c:7440
+#: ../clutter/clutter-actor.c:7549
msgid "Extra space at the bottom"
msgstr "তলত অতিৰিক্ত ঠাই"
-#: ../clutter/clutter-actor.c:7461
+#: ../clutter/clutter-actor.c:7570
msgid "Margin Left"
msgstr "সীমাৰ বাওঁ"
-#: ../clutter/clutter-actor.c:7462
+#: ../clutter/clutter-actor.c:7571
msgid "Extra space at the left"
msgstr "বাঁওফালে অতিৰিক্ত ঠাই"
-#: ../clutter/clutter-actor.c:7483
+#: ../clutter/clutter-actor.c:7592
msgid "Margin Right"
msgstr "সীমাৰ সোঁ"
-#: ../clutter/clutter-actor.c:7484
+#: ../clutter/clutter-actor.c:7593
msgid "Extra space at the right"
msgstr "সোঁফালে অতিৰিক্ত ঠাই"
-#: ../clutter/clutter-actor.c:7500
+#: ../clutter/clutter-actor.c:7609
msgid "Background Color Set"
msgstr "পটভূমীৰ ৰঙৰ সংহতি"
-#: ../clutter/clutter-actor.c:7501 ../clutter/deprecated/clutter-box.c:275
+#: ../clutter/clutter-actor.c:7610 ../clutter/deprecated/clutter-box.c:269
msgid "Whether the background color is set"
msgstr "পটভূমী ৰঙ সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-actor.c:7517
+#: ../clutter/clutter-actor.c:7626
msgid "Background color"
msgstr "পটভূমীৰ ৰঙ"
-#: ../clutter/clutter-actor.c:7518
+#: ../clutter/clutter-actor.c:7627
msgid "The actor's background color"
msgstr "অভিনেতাৰ পটভূমীৰ ৰঙ"
-#: ../clutter/clutter-actor.c:7533
+#: ../clutter/clutter-actor.c:7642
msgid "First Child"
msgstr "প্ৰথম সন্তান"
-#: ../clutter/clutter-actor.c:7534
+#: ../clutter/clutter-actor.c:7643
msgid "The actor's first child"
msgstr "অভিনেতাৰ প্ৰথম সন্তান"
-#: ../clutter/clutter-actor.c:7547
+#: ../clutter/clutter-actor.c:7656
msgid "Last Child"
msgstr "শেষ সন্তান"
-#: ../clutter/clutter-actor.c:7548
+#: ../clutter/clutter-actor.c:7657
msgid "The actor's last child"
msgstr "অভিনেতাৰ শেষ সন্তান"
-#: ../clutter/clutter-actor.c:7562
+#: ../clutter/clutter-actor.c:7671
msgid "Content"
msgstr "সমল"
-#: ../clutter/clutter-actor.c:7563
+#: ../clutter/clutter-actor.c:7672
msgid "Delegate object for painting the actor's content"
msgstr "অভিনেতাৰ সমল ৰূপাঙ্কণৰ বাবে অবজেক্ট প্ৰতিনিধি কৰক"
-#: ../clutter/clutter-actor.c:7588
+#: ../clutter/clutter-actor.c:7697
msgid "Content Gravity"
msgstr "সমল ভৰ"
-#: ../clutter/clutter-actor.c:7589
+#: ../clutter/clutter-actor.c:7698
msgid "Alignment of the actor's content"
msgstr "অভিনেতাৰ সমলৰ সংৰেখন"
-#: ../clutter/clutter-actor.c:7609
+#: ../clutter/clutter-actor.c:7718
msgid "Content Box"
msgstr "সমল বাকচ"
-#: ../clutter/clutter-actor.c:7610
+#: ../clutter/clutter-actor.c:7719
msgid "The bounding box of the actor's content"
msgstr "অভিনেতাৰ সমলৰ বান্ধনী বাকচ"
-#: ../clutter/clutter-actor.c:7618
+#: ../clutter/clutter-actor.c:7727
msgid "Minification Filter"
msgstr "সৰু কৰা পৰিস্ৰাৱক"
-#: ../clutter/clutter-actor.c:7619
+#: ../clutter/clutter-actor.c:7728
msgid "The filter used when reducing the size of the content"
msgstr "সমলৰ আকাৰ সৰু কৰোতে ব্যৱহৃত পৰিস্ৰাৱক"
-#: ../clutter/clutter-actor.c:7626
+#: ../clutter/clutter-actor.c:7735
msgid "Magnification Filter"
msgstr "ডাঙৰ কৰা পৰিস্ৰাৱক"
-#: ../clutter/clutter-actor.c:7627
+#: ../clutter/clutter-actor.c:7736
msgid "The filter used when increasing the size of the content"
msgstr "সমলৰ আকাৰ বৃদ্ধি কৰোতে ব্যৱহৃত পৰিস্ৰাৱক"
-#: ../clutter/clutter-actor.c:7641
+#: ../clutter/clutter-actor.c:7750
msgid "Content Repeat"
msgstr "সমল পুনৰাবৃত্তি"
-#: ../clutter/clutter-actor.c:7642
+#: ../clutter/clutter-actor.c:7751
msgid "The repeat policy for the actor's content"
msgstr "অভিনেতাৰ সমলৰ বাবে পুনৰাবৃত্তি নীতি"
-#: ../clutter/clutter-actor-meta.c:193 ../clutter/clutter-child-meta.c:142
+#: ../clutter/clutter-actor-meta.c:191 ../clutter/clutter-child-meta.c:142
msgid "Actor"
msgstr "অভিনেতা"
-#: ../clutter/clutter-actor-meta.c:194
+#: ../clutter/clutter-actor-meta.c:192
msgid "The actor attached to the meta"
msgstr "মেটালে সংযুক্ত অভিনেতাজন"
-#: ../clutter/clutter-actor-meta.c:208
+#: ../clutter/clutter-actor-meta.c:206
msgid "The name of the meta"
msgstr "মেটাৰ নাম"
-#: ../clutter/clutter-actor-meta.c:221 ../clutter/clutter-input-device.c:337
-#: ../clutter/deprecated/clutter-shader.c:313
+#: ../clutter/clutter-actor-meta.c:219 ../clutter/clutter-input-device.c:326
+#: ../clutter/deprecated/clutter-shader.c:309
msgid "Enabled"
msgstr "সামৰ্থবান কৰা আছে"
-#: ../clutter/clutter-actor-meta.c:222
+#: ../clutter/clutter-actor-meta.c:220
msgid "Whether the meta is enabled"
msgstr "মেটা সামৰ্থবান কৰা আছে নে"
#: ../clutter/clutter-align-constraint.c:279
-#: ../clutter/clutter-bind-constraint.c:358 ../clutter/clutter-clone.c:345
+#: ../clutter/clutter-bind-constraint.c:343 ../clutter/clutter-clone.c:341
#: ../clutter/clutter-snap-constraint.c:321
msgid "Source"
msgstr "উৎস"
@@ -729,195 +729,233 @@ msgstr "কাৰক"
msgid "The alignment factor, between 0.0 and 1.0"
msgstr "সংস্থাপন কাৰক, 0.0 আৰু 1.0 -ৰ মাজত"
-#: ../clutter/clutter-backend.c:379
+#: ../clutter/clutter-backend.c:380
msgid "Unable to initialize the Clutter backend"
msgstr "Clutter বেকএন্ড আৰম্ভ কৰিবলে অক্ষম"
-#: ../clutter/clutter-backend.c:453
+#: ../clutter/clutter-backend.c:454
#, c-format
msgid "The backend of type '%s' does not support creating multiple stages"
msgstr "'%s' ধৰণৰ বেকএণ্ড কেইবাটাও স্তৰ সৃষ্টি কৰা সমৰ্থন নকৰে"
-#: ../clutter/clutter-bind-constraint.c:359
+#: ../clutter/clutter-bind-constraint.c:344
msgid "The source of the binding"
msgstr "বান্ধণীৰ উৎস"
-#: ../clutter/clutter-bind-constraint.c:372
+#: ../clutter/clutter-bind-constraint.c:357
msgid "Coordinate"
msgstr "অক্ষ"
-#: ../clutter/clutter-bind-constraint.c:373
+#: ../clutter/clutter-bind-constraint.c:358
msgid "The coordinate to bind"
msgstr "বান্ধিবলে অক্ষ"
-#: ../clutter/clutter-bind-constraint.c:387
+#: ../clutter/clutter-bind-constraint.c:372
#: ../clutter/clutter-path-constraint.c:226
#: ../clutter/clutter-snap-constraint.c:366
msgid "Offset"
msgstr "অফছেট"
-#: ../clutter/clutter-bind-constraint.c:388
+#: ../clutter/clutter-bind-constraint.c:373
msgid "The offset in pixels to apply to the binding"
msgstr "বান্ধনীলে প্ৰয়োগ হবলে পিক্সেলসমূহত অফছেট"
-#: ../clutter/clutter-binding-pool.c:320
+#: ../clutter/clutter-binding-pool.c:319
msgid "The unique name of the binding pool"
msgstr "বান্ধণী পুলৰ অবিকল্পিত নাম"
-#: ../clutter/clutter-bin-layout.c:240 ../clutter/clutter-bin-layout.c:649
-#: ../clutter/clutter-box-layout.c:390 ../clutter/clutter-table-layout.c:610
+#: ../clutter/clutter-bin-layout.c:220 ../clutter/clutter-bin-layout.c:633
+#: ../clutter/clutter-box-layout.c:374
+#: ../clutter/deprecated/clutter-table-layout.c:602
msgid "Horizontal Alignment"
msgstr "আনুভূমিক সংস্থাপন"
-#: ../clutter/clutter-bin-layout.c:241
+#: ../clutter/clutter-bin-layout.c:221
msgid "Horizontal alignment for the actor inside the layout manager"
msgstr "বিন্যাস ব্যৱস্থাপকৰ ভিতৰৰ অভিনেতাৰ বাবে আনুভূমিক সংস্থাপন"
-#: ../clutter/clutter-bin-layout.c:249 ../clutter/clutter-bin-layout.c:669
-#: ../clutter/clutter-box-layout.c:399 ../clutter/clutter-table-layout.c:625
+#: ../clutter/clutter-bin-layout.c:229 ../clutter/clutter-bin-layout.c:653
+#: ../clutter/clutter-box-layout.c:383
+#: ../clutter/deprecated/clutter-table-layout.c:617
msgid "Vertical Alignment"
msgstr "উলম্ব সংস্থাপন"
-#: ../clutter/clutter-bin-layout.c:250
+#: ../clutter/clutter-bin-layout.c:230
msgid "Vertical alignment for the actor inside the layout manager"
msgstr "বিন্যাস ব্যৱস্থাপকৰ ভিতৰৰ অভিনেতাৰ বাবে উলম্ব সংস্থাপন"
-#: ../clutter/clutter-bin-layout.c:650
+#: ../clutter/clutter-bin-layout.c:634
msgid "Default horizontal alignment for the actors inside the layout manager"
-msgstr "বিন্যাস ব্যৱস্থাপকৰ ভিতৰৰ অভিনেতাসমূহৰ বাবে অবিকল্পিত আনুভূমিক সংস্থাপন"
+msgstr ""
+"বিন্যাস ব্যৱস্থাপকৰ ভিতৰৰ অভিনেতাসমূহৰ বাবে অবিকল্পিত আনুভূমিক সংস্থাপন"
-#: ../clutter/clutter-bin-layout.c:670
+#: ../clutter/clutter-bin-layout.c:654
msgid "Default vertical alignment for the actors inside the layout manager"
msgstr "বিন্যাস ব্যৱস্থাপকৰ ভিতৰৰ অভিনেতাসমূহৰ বাবে অবিকল্পিত উলম্ব সংস্থাপন"
-#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/clutter-box-layout.c:349
msgid "Expand"
msgstr "প্ৰসাৰিত"
-#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/clutter-box-layout.c:350
msgid "Allocate extra space for the child"
msgstr "ছাইল্ডৰ বাবে অতিৰিক্ত স্থান আবন্টন কৰক"
-#: ../clutter/clutter-box-layout.c:372 ../clutter/clutter-table-layout.c:589
+#: ../clutter/clutter-box-layout.c:356
+#: ../clutter/deprecated/clutter-table-layout.c:581
msgid "Horizontal Fill"
msgstr "আনুভূমিক পূৰ্ণ"
-#: ../clutter/clutter-box-layout.c:373 ../clutter/clutter-table-layout.c:590
+#: ../clutter/clutter-box-layout.c:357
+#: ../clutter/deprecated/clutter-table-layout.c:582
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the horizontal axis"
msgstr ""
-"বৈয়ামে আনুভূমিক অক্ষত ৰিক্ত স্থান আবন্টন কৰি থাকোতে ছাইল্ডে প্ৰাথমিকতা গ্ৰহণ কৰিব নে"
+"বৈয়ামে আনুভূমিক অক্ষত ৰিক্ত স্থান আবন্টন কৰি থাকোতে ছাইল্ডে প্ৰাথমিকতা গ্ৰহণ "
+"কৰিব নে"
-#: ../clutter/clutter-box-layout.c:381 ../clutter/clutter-table-layout.c:596
+#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/deprecated/clutter-table-layout.c:588
msgid "Vertical Fill"
msgstr "উলম্ব পূৰ্ণ"
-#: ../clutter/clutter-box-layout.c:382 ../clutter/clutter-table-layout.c:597
+#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/deprecated/clutter-table-layout.c:589
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the vertical axis"
msgstr ""
-"বৈয়ামে উলম্ব অক্ষত ৰিক্ত স্থান আবন্টন কৰি থাকোতে ছাইল্ডে প্ৰাথমিকতা গ্ৰহণ কৰিব নে"
+"বৈয়ামে উলম্ব অক্ষত ৰিক্ত স্থান আবন্টন কৰি থাকোতে ছাইল্ডে প্ৰাথমিকতা গ্ৰহণ "
+"কৰিব নে"
-#: ../clutter/clutter-box-layout.c:391 ../clutter/clutter-table-layout.c:611
+#: ../clutter/clutter-box-layout.c:375
+#: ../clutter/deprecated/clutter-table-layout.c:603
msgid "Horizontal alignment of the actor within the cell"
msgstr "কোষৰ ভিতৰত অভিনেতাৰ আনুভূমিক সংস্থাপন"
-#: ../clutter/clutter-box-layout.c:400 ../clutter/clutter-table-layout.c:626
+#: ../clutter/clutter-box-layout.c:384
+#: ../clutter/deprecated/clutter-table-layout.c:618
msgid "Vertical alignment of the actor within the cell"
msgstr "কোষৰ ভিতৰত অভিনেতাৰ উলম্ব সংস্থাপন"
-#: ../clutter/clutter-box-layout.c:1365
+#: ../clutter/clutter-box-layout.c:1345
msgid "Vertical"
msgstr "উলম্ব"
-#: ../clutter/clutter-box-layout.c:1366
+#: ../clutter/clutter-box-layout.c:1346
msgid "Whether the layout should be vertical, rather than horizontal"
msgstr "বিন্যাস আনুভূমিক নহৈ, উলম্ব হব লাগে নে"
-#: ../clutter/clutter-box-layout.c:1383 ../clutter/clutter-flow-layout.c:890
-#: ../clutter/clutter-grid-layout.c:1547
+#: ../clutter/clutter-box-layout.c:1363 ../clutter/clutter-flow-layout.c:927
+#: ../clutter/clutter-grid-layout.c:1549
msgid "Orientation"
msgstr "দিশনিৰ্ণয়"
-#: ../clutter/clutter-box-layout.c:1384 ../clutter/clutter-flow-layout.c:891
-#: ../clutter/clutter-grid-layout.c:1548
+#: ../clutter/clutter-box-layout.c:1364 ../clutter/clutter-flow-layout.c:928
+#: ../clutter/clutter-grid-layout.c:1550
msgid "The orientation of the layout"
msgstr "বিন্যাসৰ দিশ"
-#: ../clutter/clutter-box-layout.c:1400 ../clutter/clutter-flow-layout.c:906
+#: ../clutter/clutter-box-layout.c:1380 ../clutter/clutter-flow-layout.c:943
msgid "Homogeneous"
msgstr "সমমাত্ৰিক"
-#: ../clutter/clutter-box-layout.c:1401
-msgid "Whether the layout should be homogeneous, i.e. all childs get the same size"
+#: ../clutter/clutter-box-layout.c:1381
+msgid ""
+"Whether the layout should be homogeneous, i.e. all childs get the same size"
msgstr "বিন্যাস সমমাত্ৰিক হব লাগে নে, যাতে সকলো ছাইল্ডে একে আকাৰ প্ৰাপ্ত কৰে"
-#: ../clutter/clutter-box-layout.c:1416
+#: ../clutter/clutter-box-layout.c:1396
msgid "Pack Start"
msgstr "পেক আৰম্ভণি"
-#: ../clutter/clutter-box-layout.c:1417
+#: ../clutter/clutter-box-layout.c:1397
msgid "Whether to pack items at the start of the box"
msgstr "বাকচৰ আৰম্ভণিত বস্তুসমূহ পেক কৰিব লাগে নে"
-#: ../clutter/clutter-box-layout.c:1430
+#: ../clutter/clutter-box-layout.c:1410
msgid "Spacing"
msgstr "স্পেইচিং"
-#: ../clutter/clutter-box-layout.c:1431
+#: ../clutter/clutter-box-layout.c:1411
msgid "Spacing between children"
msgstr "ছাইল্ডৰ মাজত স্পেইচিং"
-#: ../clutter/clutter-box-layout.c:1448 ../clutter/clutter-table-layout.c:1675
+#: ../clutter/clutter-box-layout.c:1428
+#: ../clutter/deprecated/clutter-table-layout.c:1669
msgid "Use Animations"
msgstr "জীৱন্তকৰণসমূহ ব্যৱহাৰ কৰক"
-#: ../clutter/clutter-box-layout.c:1449 ../clutter/clutter-table-layout.c:1676
+#: ../clutter/clutter-box-layout.c:1429
+#: ../clutter/deprecated/clutter-table-layout.c:1670
msgid "Whether layout changes should be animated"
msgstr "বিন্যাস পৰিবৰ্তনসমূহ জীৱন্ত কৰিব লাগে নে"
-#: ../clutter/clutter-box-layout.c:1473 ../clutter/clutter-table-layout.c:1700
+#: ../clutter/clutter-box-layout.c:1453
+#: ../clutter/deprecated/clutter-table-layout.c:1694
msgid "Easing Mode"
msgstr "সহজ অৱস্থা"
-#: ../clutter/clutter-box-layout.c:1474 ../clutter/clutter-table-layout.c:1701
+#: ../clutter/clutter-box-layout.c:1454
+#: ../clutter/deprecated/clutter-table-layout.c:1695
msgid "The easing mode of the animations"
msgstr "জীৱন্তকৰণসমূহৰ সহজ অৱস্থা"
-#: ../clutter/clutter-box-layout.c:1494 ../clutter/clutter-table-layout.c:1721
+#: ../clutter/clutter-box-layout.c:1474
+#: ../clutter/deprecated/clutter-table-layout.c:1715
msgid "Easing Duration"
msgstr "সহজ অবধি"
-#: ../clutter/clutter-box-layout.c:1495 ../clutter/clutter-table-layout.c:1722
+#: ../clutter/clutter-box-layout.c:1475
+#: ../clutter/deprecated/clutter-table-layout.c:1716
msgid "The duration of the animations"
msgstr "জীৱন্তকৰণসমূহৰ অবধি"
-#: ../clutter/clutter-brightness-contrast-effect.c:307
+#: ../clutter/clutter-brightness-contrast-effect.c:321
msgid "Brightness"
msgstr "উজ্জ্বলতা"
-#: ../clutter/clutter-brightness-contrast-effect.c:308
+#: ../clutter/clutter-brightness-contrast-effect.c:322
msgid "The brightness change to apply"
msgstr "প্ৰয়োগ কৰিব লগিয়া উজ্জ্বলতা পৰিবৰ্তন"
-#: ../clutter/clutter-brightness-contrast-effect.c:327
+#: ../clutter/clutter-brightness-contrast-effect.c:341
msgid "Contrast"
msgstr "প্ৰভেদ"
-#: ../clutter/clutter-brightness-contrast-effect.c:328
+#: ../clutter/clutter-brightness-contrast-effect.c:342
msgid "The contrast change to apply"
msgstr "প্ৰয়োগ কৰিব লগিয়া প্ৰভেদ পৰিবৰ্তন"
-#: ../clutter/clutter-canvas.c:216
+#: ../clutter/clutter-canvas.c:248
msgid "The width of the canvas"
msgstr "কেনভাচৰ প্ৰস্থ"
-#: ../clutter/clutter-canvas.c:232
+#: ../clutter/clutter-canvas.c:264
msgid "The height of the canvas"
msgstr "কেনভাচৰ উচ্চতা"
+#: ../clutter/clutter-canvas.c:283
+#| msgid "Selection Color Set"
+msgid "Scale Factor Set"
+msgstr "স্কেইল কাৰক সংহতি"
+
+#: ../clutter/clutter-canvas.c:284
+#| msgid "Whether the transform property is set"
+msgid "Whether the scale-factor property is set"
+msgstr "স্কেইল-কাৰক বৈশিষ্ট সংহতি কৰা হৈছে নে"
+
+#: ../clutter/clutter-canvas.c:305
+#| msgid "Factor"
+msgid "Scale Factor"
+msgstr "স্কেইল কাৰক"
+
+#: ../clutter/clutter-canvas.c:306
+#| msgid "The height of the Cairo surface"
+msgid "The scaling factor for the surface"
+msgstr "পৃষ্ঠৰ স্কেইলিং কাৰক"
+
#: ../clutter/clutter-child-meta.c:127
msgid "Container"
msgstr "বৈয়াম"
@@ -930,39 +968,39 @@ msgstr "এই তথ্য সৃষ্টি কৰা বৈয়াম"
msgid "The actor wrapped by this data"
msgstr "এই তথ্যৰে মেৰিওৱা অভিনেতা"
-#: ../clutter/clutter-click-action.c:546
+#: ../clutter/clutter-click-action.c:586
msgid "Pressed"
msgstr "দবাই থোৱা"
-#: ../clutter/clutter-click-action.c:547
+#: ../clutter/clutter-click-action.c:587
msgid "Whether the clickable should be in pressed state"
msgstr "ক্লিক কৰিব পৰাটো দবোৱা অৱস্থাত থাকিব লাগে নে"
-#: ../clutter/clutter-click-action.c:560
+#: ../clutter/clutter-click-action.c:600
msgid "Held"
msgstr "ধৰি ৰাখক"
-#: ../clutter/clutter-click-action.c:561
+#: ../clutter/clutter-click-action.c:601
msgid "Whether the clickable has a grab"
msgstr "ক্লিক কৰিব পৰাটোৰ এটা তাপ আছে নে"
-#: ../clutter/clutter-click-action.c:578 ../clutter/clutter-settings.c:599
+#: ../clutter/clutter-click-action.c:618 ../clutter/clutter-settings.c:651
msgid "Long Press Duration"
msgstr "দীঘল দবোৱা অবধি"
-#: ../clutter/clutter-click-action.c:579
+#: ../clutter/clutter-click-action.c:619
msgid "The minimum duration of a long press to recognize the gesture"
msgstr "ভংগিক চিনাক্ত কৰিবলে এটা দীঘল দবোৱাৰ নূন্যতম অবধি"
-#: ../clutter/clutter-click-action.c:597
+#: ../clutter/clutter-click-action.c:637
msgid "Long Press Threshold"
msgstr "দীঘল দবোৱাৰ ডেউৰী"
-#: ../clutter/clutter-click-action.c:598
+#: ../clutter/clutter-click-action.c:638
msgid "The maximum threshold before a long press is cancelled"
msgstr "এটা দীঘল দবোৱা বাতিল কৰাৰ আগত সৰ্বাধিক ডেউৰী"
-#: ../clutter/clutter-clone.c:346
+#: ../clutter/clutter-clone.c:342
msgid "Specifies the actor to be cloned"
msgstr "ক্লৌন কৰিব লগিয়া অভিনেতাক ধাৰ্য্য কৰে"
@@ -974,27 +1012,27 @@ msgstr "টিন্ট"
msgid "The tint to apply"
msgstr "প্ৰয়োগ কৰিব লগিয়া টিন্ট"
-#: ../clutter/clutter-deform-effect.c:588
+#: ../clutter/clutter-deform-effect.c:591
msgid "Horizontal Tiles"
msgstr "আনুভূমিক টাইলসমূহ"
-#: ../clutter/clutter-deform-effect.c:589
+#: ../clutter/clutter-deform-effect.c:592
msgid "The number of horizontal tiles"
msgstr "আনুভূমিক টাইলসমূহৰ সংখ্যা"
-#: ../clutter/clutter-deform-effect.c:604
+#: ../clutter/clutter-deform-effect.c:607
msgid "Vertical Tiles"
msgstr "উলম্ব টাইলসমূহ"
-#: ../clutter/clutter-deform-effect.c:605
+#: ../clutter/clutter-deform-effect.c:608
msgid "The number of vertical tiles"
msgstr "উলম্ব টাইলসমূহৰ সংখ্যা"
-#: ../clutter/clutter-deform-effect.c:622
+#: ../clutter/clutter-deform-effect.c:625
msgid "Back Material"
msgstr "পিছফালৰ সামগ্ৰী"
-#: ../clutter/clutter-deform-effect.c:623
+#: ../clutter/clutter-deform-effect.c:626
msgid "The material to be used when painting the back of the actor"
msgstr "অভিনেতাৰ পিছফাল ৰঙ কৰোতে ব্যৱহাৰ কৰিব লগিয়া সামগ্ৰী"
@@ -1002,258 +1040,299 @@ msgstr "অভিনেতাৰ পিছফাল ৰঙ কৰোতে ব
msgid "The desaturation factor"
msgstr "অসংপৃক্তকৰণ কাৰক"
-#: ../clutter/clutter-device-manager.c:131
-#: ../clutter/clutter-input-device.c:366
-#: ../clutter/x11/clutter-keymap-x11.c:316
+#: ../clutter/clutter-device-manager.c:127
+#: ../clutter/clutter-input-device.c:355
+#: ../clutter/x11/clutter-keymap-x11.c:457
msgid "Backend"
msgstr "বেকএন্ড"
-#: ../clutter/clutter-device-manager.c:132
+#: ../clutter/clutter-device-manager.c:128
msgid "The ClutterBackend of the device manager"
msgstr "ডিভাইচ মেনেজাৰৰ ClutterBackend"
-#: ../clutter/clutter-drag-action.c:709
+#: ../clutter/clutter-drag-action.c:733
msgid "Horizontal Drag Threshold"
msgstr "আনুভূমিক টান ডেউৰী"
-#: ../clutter/clutter-drag-action.c:710
+#: ../clutter/clutter-drag-action.c:734
msgid "The horizontal amount of pixels required to start dragging"
msgstr "টান আৰম্ভ কৰিবলে প্ৰয়োজনীয় পিক্সেলসমূহৰ আনুভূমিক পৰিমাণ"
-#: ../clutter/clutter-drag-action.c:737
+#: ../clutter/clutter-drag-action.c:761
msgid "Vertical Drag Threshold"
msgstr "উলম্ব টান ডেউৰী"
-#: ../clutter/clutter-drag-action.c:738
+#: ../clutter/clutter-drag-action.c:762
msgid "The vertical amount of pixels required to start dragging"
msgstr "টান আৰম্ভ কৰিবলে প্ৰয়োজনীয় পিক্সেলসমূহৰ উলম্ব পৰিমাণ"
-#: ../clutter/clutter-drag-action.c:759
+#: ../clutter/clutter-drag-action.c:783
msgid "Drag Handle"
msgstr "টান হাতল"
-#: ../clutter/clutter-drag-action.c:760
+#: ../clutter/clutter-drag-action.c:784
msgid "The actor that is being dragged"
msgstr "অভিনেতা যাক টনা হৈ আছে"
-#: ../clutter/clutter-drag-action.c:773
+#: ../clutter/clutter-drag-action.c:797
msgid "Drag Axis"
msgstr "টান অক্ষ"
-#: ../clutter/clutter-drag-action.c:774
+#: ../clutter/clutter-drag-action.c:798
msgid "Constraints the dragging to an axis"
msgstr "টনাক এটা অক্ষত সীমিত ৰাখে"
-#: ../clutter/clutter-drag-action.c:790
+#: ../clutter/clutter-drag-action.c:814
msgid "Drag Area"
msgstr "টানৰ স্থান"
-#: ../clutter/clutter-drag-action.c:791
+#: ../clutter/clutter-drag-action.c:815
msgid "Constrains the dragging to a rectangle"
msgstr "টানক এটা আয়তলে সীমিত ৰাখে"
-#: ../clutter/clutter-drag-action.c:804
+#: ../clutter/clutter-drag-action.c:828
msgid "Drag Area Set"
msgstr "টানৰ স্থান সংহতি"
-#: ../clutter/clutter-drag-action.c:805
+#: ../clutter/clutter-drag-action.c:829
msgid "Whether the drag area is set"
msgstr "টানৰ স্থান সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-flow-layout.c:907
+#: ../clutter/clutter-flow-layout.c:944
msgid "Whether each item should receive the same allocation"
msgstr "প্ৰতিটো বস্তুয়ে একেটা আবন্টন গ্ৰহন কৰিব লাগে নে"
-#: ../clutter/clutter-flow-layout.c:922 ../clutter/clutter-table-layout.c:1637
+#: ../clutter/clutter-flow-layout.c:959
+#: ../clutter/deprecated/clutter-table-layout.c:1629
msgid "Column Spacing"
msgstr "স্তম্ভ স্থান"
-#: ../clutter/clutter-flow-layout.c:923
+#: ../clutter/clutter-flow-layout.c:960
msgid "The spacing between columns"
msgstr "স্তম্ভসমূহৰ মাজৰ স্থান"
-#: ../clutter/clutter-flow-layout.c:939 ../clutter/clutter-table-layout.c:1651
+#: ../clutter/clutter-flow-layout.c:976
+#: ../clutter/deprecated/clutter-table-layout.c:1645
msgid "Row Spacing"
msgstr "শাৰী স্থান"
-#: ../clutter/clutter-flow-layout.c:940
+#: ../clutter/clutter-flow-layout.c:977
msgid "The spacing between rows"
msgstr "শাৰীসমূহৰ মাজৰ স্থান"
-#: ../clutter/clutter-flow-layout.c:954
+#: ../clutter/clutter-flow-layout.c:991
msgid "Minimum Column Width"
msgstr "নূন্যতম স্তম্ভ প্ৰস্থ"
-#: ../clutter/clutter-flow-layout.c:955
+#: ../clutter/clutter-flow-layout.c:992
msgid "Minimum width for each column"
msgstr "প্ৰতিটো স্তম্ভৰ বাবে নূন্যতম প্ৰস্থ"
-#: ../clutter/clutter-flow-layout.c:970
+#: ../clutter/clutter-flow-layout.c:1007
msgid "Maximum Column Width"
msgstr "সৰ্বাধিক স্তম্ভ প্ৰস্থ"
-#: ../clutter/clutter-flow-layout.c:971
+#: ../clutter/clutter-flow-layout.c:1008
msgid "Maximum width for each column"
msgstr "প্ৰতিটো স্তম্ভৰ বাবে সৰ্বাধিক প্ৰস্থ"
-#: ../clutter/clutter-flow-layout.c:985
+#: ../clutter/clutter-flow-layout.c:1022
msgid "Minimum Row Height"
msgstr "নূন্যতম শাৰী উচ্চতা"
-#: ../clutter/clutter-flow-layout.c:986
+#: ../clutter/clutter-flow-layout.c:1023
msgid "Minimum height for each row"
msgstr "প্ৰতিটো শাৰীৰ বাবে নূন্যতম উচ্চতা"
-#: ../clutter/clutter-flow-layout.c:1001
+#: ../clutter/clutter-flow-layout.c:1038
msgid "Maximum Row Height"
msgstr "সৰ্বাধিক শাৰী উচ্চতা"
-#: ../clutter/clutter-flow-layout.c:1002
+#: ../clutter/clutter-flow-layout.c:1039
msgid "Maximum height for each row"
msgstr "প্ৰতিটো শাৰীৰ বাবে সৰ্বাধিক উচ্চতা"
-#: ../clutter/clutter-grid-layout.c:1222
+#: ../clutter/clutter-flow-layout.c:1054 ../clutter/clutter-flow-layout.c:1055
+msgid "Snap to grid"
+msgstr "গ্ৰিডলৈ স্নেপ কৰক"
+
+#: ../clutter/clutter-gesture-action.c:680
+msgid "Number touch points"
+msgstr "সংখ্যা স্পৰ্শ বিন্দুসমূহ"
+
+#: ../clutter/clutter-gesture-action.c:681
+msgid "Number of touch points"
+msgstr "সংখ্যাৰ স্পৰ্শ বিন্দুসমূহ"
+
+#: ../clutter/clutter-gesture-action.c:696
+msgid "Threshold Trigger Edge"
+msgstr "ডেউৰী ট্ৰিগাৰ প্ৰান্ত"
+
+#: ../clutter/clutter-gesture-action.c:697
+#| msgid "The timeline used by the animation"
+msgid "The trigger edge used by the action"
+msgstr "কাৰ্য্য দ্বাৰা ব্যৱহাৰ কৰা ট্ৰিগাৰ প্ৰান্ত"
+
+#: ../clutter/clutter-gesture-action.c:716
+msgid "Threshold Trigger Horizontal Distance"
+msgstr "ডেউৰী ট্ৰিগাৰ আনুভূমিক দূৰত্ব"
+
+#: ../clutter/clutter-gesture-action.c:717
+#| msgid "The timeline used by the animation"
+msgid "The horizontal trigger distance used by the action"
+msgstr "কাৰ্য্য দ্বাৰা ব্যৱহৃত আনুভূমিক ট্ৰিগাৰ দূৰত্ব"
+
+#: ../clutter/clutter-gesture-action.c:735
+msgid "Threshold Trigger Vertical Distance"
+msgstr "ডেউৰী ট্ৰিগাৰ উলম্ভ দূৰত্ব"
+
+#: ../clutter/clutter-gesture-action.c:736
+#| msgid "The timeline used by the animation"
+msgid "The vertical trigger distance used by the action"
+msgstr "কাৰ্য্য দ্বাৰা ব্যৱহৃত উলম্ব ট্ৰিগাৰ দূৰত্ব"
+
+#: ../clutter/clutter-grid-layout.c:1223
msgid "Left attachment"
msgstr "বাঁওফালৰ এটাচমেন্ট"
-#: ../clutter/clutter-grid-layout.c:1223
+#: ../clutter/clutter-grid-layout.c:1224
msgid "The column number to attach the left side of the child to"
msgstr "সন্তানৰ বাঁওফাল সংলগ্ন কৰিবলে স্তম্ভ সংখ্যা"
-#: ../clutter/clutter-grid-layout.c:1230
+#: ../clutter/clutter-grid-layout.c:1231
msgid "Top attachment"
msgstr "ওপৰৰ এটাচমেন্ট"
-#: ../clutter/clutter-grid-layout.c:1231
+#: ../clutter/clutter-grid-layout.c:1232
msgid "The row number to attach the top side of a child widget to"
msgstr "এটা সন্তান উইজেটৰ ওপৰফাল সংলগ্ন কৰিবলে শাৰী সংখ্যা"
-#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/clutter-grid-layout.c:1240
msgid "The number of columns that a child spans"
msgstr "এটা সন্তান বিস্তাৰ কৰা স্তম্ভসমূহৰ সংখ্যা"
-#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/clutter-grid-layout.c:1247
msgid "The number of rows that a child spans"
msgstr "এটা সন্তানে বিস্তাৰ কৰা শাৰীসমূহৰ সংখ্যা"
-#: ../clutter/clutter-grid-layout.c:1562
+#: ../clutter/clutter-grid-layout.c:1564
msgid "Row spacing"
msgstr "শাৰী স্থান"
-#: ../clutter/clutter-grid-layout.c:1563
+#: ../clutter/clutter-grid-layout.c:1565
msgid "The amount of space between two consecutive rows"
msgstr "দুটা সংখ্যানুক্ৰমিক শাৰীৰ মাজৰ স্থান"
-#: ../clutter/clutter-grid-layout.c:1576
+#: ../clutter/clutter-grid-layout.c:1578
msgid "Column spacing"
msgstr "স্তম্ভ স্থান"
-#: ../clutter/clutter-grid-layout.c:1577
+#: ../clutter/clutter-grid-layout.c:1579
msgid "The amount of space between two consecutive columns"
msgstr "দুটা সংখ্যানুক্ৰমিক স্তম্ভৰ মাজৰ স্থান"
-#: ../clutter/clutter-grid-layout.c:1591
+#: ../clutter/clutter-grid-layout.c:1593
msgid "Row Homogeneous"
msgstr "সমমাত্ৰিক শাৰী"
-#: ../clutter/clutter-grid-layout.c:1592
+#: ../clutter/clutter-grid-layout.c:1594
msgid "If TRUE, the rows are all the same height"
msgstr "যদি TRUE, শাৰীসমূহ সকলো একেটা উচ্চতাৰ হব"
-#: ../clutter/clutter-grid-layout.c:1605
+#: ../clutter/clutter-grid-layout.c:1607
msgid "Column Homogeneous"
msgstr "সমমাত্ৰিক স্তম্ভসমূহ"
-#: ../clutter/clutter-grid-layout.c:1606
+#: ../clutter/clutter-grid-layout.c:1608
msgid "If TRUE, the columns are all the same width"
msgstr "যদি TRUE, স্তম্ভসমূহ একেটা প্ৰস্থৰ হব"
-#: ../clutter/clutter-image.c:248 ../clutter/clutter-image.c:311
-#: ../clutter/clutter-image.c:399
+#: ../clutter/clutter-image.c:268 ../clutter/clutter-image.c:331
+#: ../clutter/clutter-image.c:419
msgid "Unable to load image data"
msgstr "ছবি তথ্য ল'ড কৰিবলে অক্ষম"
-#: ../clutter/clutter-input-device.c:242
+#: ../clutter/clutter-input-device.c:231
msgid "Id"
msgstr "আই-ডি"
-#: ../clutter/clutter-input-device.c:243
+#: ../clutter/clutter-input-device.c:232
msgid "Unique identifier of the device"
msgstr "ডিভাইচৰ বাবে অবিকল্প পৰিচয়ক"
-#: ../clutter/clutter-input-device.c:259
+#: ../clutter/clutter-input-device.c:248
msgid "The name of the device"
msgstr "ডিভাইচৰ নাম"
-#: ../clutter/clutter-input-device.c:273
+#: ../clutter/clutter-input-device.c:262
msgid "Device Type"
msgstr "ডিভাইচৰ ধৰণ"
-#: ../clutter/clutter-input-device.c:274
+#: ../clutter/clutter-input-device.c:263
msgid "The type of the device"
msgstr "ডিভাইচৰ ধৰণ"
-#: ../clutter/clutter-input-device.c:289
+#: ../clutter/clutter-input-device.c:278
msgid "Device Manager"
msgstr "ডিভাইচ ব্যৱস্থাপক"
-#: ../clutter/clutter-input-device.c:290
+#: ../clutter/clutter-input-device.c:279
msgid "The device manager instance"
msgstr "ডিভাইচ ব্যৱস্থাপক উদাহৰণ"
-#: ../clutter/clutter-input-device.c:303
+#: ../clutter/clutter-input-device.c:292
msgid "Device Mode"
msgstr "ডিভাইচ অৱস্থা"
-#: ../clutter/clutter-input-device.c:304
+#: ../clutter/clutter-input-device.c:293
msgid "The mode of the device"
msgstr "ডিভাইচৰ অৱস্থা"
-#: ../clutter/clutter-input-device.c:318
+#: ../clutter/clutter-input-device.c:307
msgid "Has Cursor"
msgstr "কাৰ্চাৰ আছে"
-#: ../clutter/clutter-input-device.c:319
+#: ../clutter/clutter-input-device.c:308
msgid "Whether the device has a cursor"
msgstr "ডিভাইচৰ এটা কাৰ্চাৰ আছে নে"
-#: ../clutter/clutter-input-device.c:338
+#: ../clutter/clutter-input-device.c:327
msgid "Whether the device is enabled"
msgstr "ডিভাইচ সামৰ্থবান হয় নে"
-#: ../clutter/clutter-input-device.c:351
+#: ../clutter/clutter-input-device.c:340
msgid "Number of Axes"
msgstr "অক্ষসমূহৰ সংখ্যা"
-#: ../clutter/clutter-input-device.c:352
+#: ../clutter/clutter-input-device.c:341
msgid "The number of axes on the device"
msgstr "ডিভাইচত অক্ষসমূহৰ সংখ্যা"
-#: ../clutter/clutter-input-device.c:367
+#: ../clutter/clutter-input-device.c:356
msgid "The backend instance"
msgstr "বেকএন্ডৰ উদাহৰণ"
-#: ../clutter/clutter-interval.c:506
+#: ../clutter/clutter-interval.c:557
msgid "Value Type"
msgstr "মানৰ ধৰণ"
-#: ../clutter/clutter-interval.c:507
+#: ../clutter/clutter-interval.c:558
msgid "The type of the values in the interval"
msgstr "অন্তৰালত মানসমূহৰ ধৰণ"
-#: ../clutter/clutter-interval.c:522
+#: ../clutter/clutter-interval.c:573
msgid "Initial Value"
msgstr "আৰম্ভণিৰ মান"
-#: ../clutter/clutter-interval.c:523
+#: ../clutter/clutter-interval.c:574
msgid "Initial value of the interval"
msgstr "অন্তৰালৰ আৰম্ভণি মান"
-#: ../clutter/clutter-interval.c:537
+#: ../clutter/clutter-interval.c:588
msgid "Final Value"
msgstr "অন্তিম মান"
-#: ../clutter/clutter-interval.c:538
+#: ../clutter/clutter-interval.c:589
msgid "Final value of the interval"
msgstr "অন্তৰালৰ অন্তিম মান"
@@ -1272,102 +1351,96 @@ msgstr "এই তথ্য যিজন ব্যৱস্থাপকে স
#. * Do NOT translate it to non-English e.g. "predefinito:LTR"! If
#. * it isn't default:LTR or default:RTL it will not work.
#.
-#: ../clutter/clutter-main.c:762
+#: ../clutter/clutter-main.c:751
msgid "default:LTR"
msgstr "default:LTR"
-#: ../clutter/clutter-main.c:1633
+#: ../clutter/clutter-main.c:1577
msgid "Show frames per second"
msgstr "ফ্ৰেইম প্ৰতি ছেকেণ্ডসমূহত দেখাওক"
-#: ../clutter/clutter-main.c:1635
+#: ../clutter/clutter-main.c:1579
msgid "Default frame rate"
msgstr "অবিকল্পিত ফ্ৰেইম হাৰ"
-#: ../clutter/clutter-main.c:1637
+#: ../clutter/clutter-main.c:1581
msgid "Make all warnings fatal"
msgstr "সকলো সতৰ্কবাৰ্তা মাৰাত্মক কৰক"
-#: ../clutter/clutter-main.c:1640
+#: ../clutter/clutter-main.c:1584
msgid "Direction for the text"
-msgstr "লিখনীৰ দিশ"
+msgstr "লিখনিৰ দিশ"
-#: ../clutter/clutter-main.c:1643
+#: ../clutter/clutter-main.c:1587
msgid "Disable mipmapping on text"
-msgstr "লিখনীত মিপমেপিং অসামৰ্থবান কৰক"
+msgstr "লিখনিত মিপমেপিং অসামৰ্থবান কৰক"
-#: ../clutter/clutter-main.c:1646
+#: ../clutter/clutter-main.c:1590
msgid "Use 'fuzzy' picking"
msgstr "'fuzzy' বুটলা ব্যৱহাৰ কৰক"
-#: ../clutter/clutter-main.c:1649
+#: ../clutter/clutter-main.c:1593
msgid "Clutter debugging flags to set"
msgstr "সংহতি কৰিবলে Clutter ডিবাগিং ফ্লেগসমূহ"
-#: ../clutter/clutter-main.c:1651
+#: ../clutter/clutter-main.c:1595
msgid "Clutter debugging flags to unset"
msgstr "অসংহতি কৰিবলে Clutter ডিবাগিং ফ্লেগসমূহ"
-#: ../clutter/clutter-main.c:1655
+#: ../clutter/clutter-main.c:1599
msgid "Clutter profiling flags to set"
msgstr "সংহতি কৰিবলে Clutter আলেখ্যণ ফ্লেগসমূহ"
-#: ../clutter/clutter-main.c:1657
+#: ../clutter/clutter-main.c:1601
msgid "Clutter profiling flags to unset"
msgstr "অসংহতি কৰিবলে Clutter আলেখ্য ফ্লেগসমূহ"
-#: ../clutter/clutter-main.c:1660
+#: ../clutter/clutter-main.c:1604
msgid "Enable accessibility"
msgstr "অভিগম সামৰ্থবান কৰক"
-#: ../clutter/clutter-main.c:1852
+#: ../clutter/clutter-main.c:1796
msgid "Clutter Options"
msgstr "Clutter বিকল্পসমূহ"
-#: ../clutter/clutter-main.c:1853
+#: ../clutter/clutter-main.c:1797
msgid "Show Clutter Options"
msgstr "Clutter বিকল্পসমূহ দেখুৱাওক"
-#: ../clutter/clutter-pan-action.c:440
-#| msgid "Drag Axis"
+#: ../clutter/clutter-pan-action.c:455
msgid "Pan Axis"
msgstr "পেন অক্ষ"
-#: ../clutter/clutter-pan-action.c:441
-#| msgid "Constraints the dragging to an axis"
+#: ../clutter/clutter-pan-action.c:456
msgid "Constraints the panning to an axis"
msgstr "পেনিংক এটা অক্ষত সীমিত ৰাখে"
-#: ../clutter/clutter-pan-action.c:455
-#| msgid "Interval"
+#: ../clutter/clutter-pan-action.c:470
msgid "Interpolate"
msgstr "সন্নিবিষ্ট কৰক"
-#: ../clutter/clutter-pan-action.c:456
-#| msgid "Whether the device is enabled"
+#: ../clutter/clutter-pan-action.c:471
msgid "Whether interpolated events emission is enabled."
msgstr "সন্নিবিষ্ট কৰা ঘটনাসমূহ সামৰ্থবান কৰা আছে নে।"
-#: ../clutter/clutter-pan-action.c:472
-#| msgid "Duration"
+#: ../clutter/clutter-pan-action.c:487
msgid "Deceleration"
msgstr "মন্থৰণ"
-#: ../clutter/clutter-pan-action.c:473
+#: ../clutter/clutter-pan-action.c:488
msgid "Rate at which the interpolated panning will decelerate in"
msgstr "যি হাৰত সন্নিবিষ্ট কৰা পেনিংৰ মন্থৰণ হব"
-#: ../clutter/clutter-pan-action.c:490
-#| msgid "The desaturation factor"
+#: ../clutter/clutter-pan-action.c:505
msgid "Initial acceleration factor"
msgstr "আৰম্ভণি ত্বৰণ কাৰক"
-#: ../clutter/clutter-pan-action.c:491
+#: ../clutter/clutter-pan-action.c:506
msgid "Factor applied to the momentum when starting the interpolated phase"
msgstr "সন্নিবিষ্ট কৰা স্তৰ আৰম্ভ কৰোতে ভৰবেগলে প্ৰয়োগ কৰা কাৰক"
#: ../clutter/clutter-path-constraint.c:212
-#: ../clutter/deprecated/clutter-behaviour-path.c:225
+#: ../clutter/deprecated/clutter-behaviour-path.c:221
msgid "Path"
msgstr "পথ"
@@ -1379,150 +1452,163 @@ msgstr "এজন অভিনেতাক বাধা দিবলে ব্
msgid "The offset along the path, between -1.0 and 2.0"
msgstr "পথত অফছেট, -1.0 আৰু 2.0 -ৰ মাজত"
-#: ../clutter/clutter-property-transition.c:271
+#: ../clutter/clutter-property-transition.c:269
msgid "Property Name"
msgstr "বৈশিষ্ট নাম"
-#: ../clutter/clutter-property-transition.c:272
+#: ../clutter/clutter-property-transition.c:270
msgid "The name of the property to animate"
msgstr "জীৱন্ত কৰিব লগিয়া বৈশিষ্টৰ নাম"
-#: ../clutter/clutter-script.c:466
+#: ../clutter/clutter-script.c:464
msgid "Filename Set"
msgstr "ফাইলনাম সংহতি"
-#: ../clutter/clutter-script.c:467
+#: ../clutter/clutter-script.c:465
msgid "Whether the :filename property is set"
msgstr ":filename বৈশিষ্ট সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-script.c:481
-#: ../clutter/deprecated/clutter-texture.c:1082
+#: ../clutter/clutter-script.c:479
+#: ../clutter/deprecated/clutter-texture.c:1080
msgid "Filename"
msgstr "ফাইলনাম"
-#: ../clutter/clutter-script.c:482
+#: ../clutter/clutter-script.c:480
msgid "The path of the currently parsed file"
msgstr "বৰ্তমানে বিশ্লেষণ কৰা ফাইলৰ পথ"
-#: ../clutter/clutter-script.c:499
+#: ../clutter/clutter-script.c:497
msgid "Translation Domain"
msgstr "অনুবাদ ডমেইন"
-#: ../clutter/clutter-script.c:500
+#: ../clutter/clutter-script.c:498
msgid "The translation domain used to localize string"
msgstr "স্ট্ৰিং স্থানীয়কৰণ কৰিবলে ব্যৱহৃত অনুবাদ ডমেইন"
-#: ../clutter/clutter-scroll-actor.c:263
+#: ../clutter/clutter-scroll-actor.c:184
msgid "Scroll Mode"
msgstr "স্ক্ৰল অৱস্থা"
-#: ../clutter/clutter-scroll-actor.c:264
+#: ../clutter/clutter-scroll-actor.c:185
msgid "The scrolling direction"
msgstr "স্ক্ৰলিংৰ দিশ"
-#: ../clutter/clutter-settings.c:440
+#: ../clutter/clutter-settings.c:486
msgid "Double Click Time"
msgstr "দ্বিগুণ ক্লিক সময়"
-#: ../clutter/clutter-settings.c:441
+#: ../clutter/clutter-settings.c:487
msgid "The time between clicks necessary to detect a multiple click"
msgstr "এটা বহু ক্লিক চিনাক্ত কৰিবলে প্ৰয়োজনীয় ক্লিকসমূহৰ মাজৰ সময়"
-#: ../clutter/clutter-settings.c:456
+#: ../clutter/clutter-settings.c:502
msgid "Double Click Distance"
msgstr "দ্বিগুণ ক্লিক দুৰত্ব"
-#: ../clutter/clutter-settings.c:457
+#: ../clutter/clutter-settings.c:503
msgid "The distance between clicks necessary to detect a multiple click"
msgstr "এটা বহু ক্লিক চিনাক্ত কৰিবলে প্ৰয়োজনীয় ক্লিকসমূহৰ মাজৰ দুৰত্ব"
-#: ../clutter/clutter-settings.c:472
+#: ../clutter/clutter-settings.c:518
msgid "Drag Threshold"
msgstr "টান্ ডেউৰী"
-#: ../clutter/clutter-settings.c:473
+#: ../clutter/clutter-settings.c:519
msgid "The distance the cursor should travel before starting to drag"
msgstr "টনা আৰম্ভ কৰাৰ আগত কাৰ্চাৰে ভ্ৰমণ কৰিব লগিয়া দুৰত্ব"
-#: ../clutter/clutter-settings.c:488 ../clutter/clutter-text.c:3368
+#: ../clutter/clutter-settings.c:534 ../clutter/clutter-text.c:3437
msgid "Font Name"
msgstr "ফন্টৰ নাম"
-#: ../clutter/clutter-settings.c:489
-msgid "The description of the default font, as one that could be parsed by Pango"
+#: ../clutter/clutter-settings.c:535
+msgid ""
+"The description of the default font, as one that could be parsed by Pango"
msgstr "অবিকল্পিত ফন্টৰ বিৱৰণ, এনে এটা যি Pango দ্বাৰা বিশ্লেষণ কৰিব পাৰি"
-#: ../clutter/clutter-settings.c:504
+#: ../clutter/clutter-settings.c:550
msgid "Font Antialias"
msgstr "ফন্ট এন্টিএলিয়াচসমূহ"
-#: ../clutter/clutter-settings.c:505
+#: ../clutter/clutter-settings.c:551
msgid ""
"Whether to use antialiasing (1 to enable, 0 to disable, and -1 to use the "
"default)"
msgstr ""
-"এন্টিএলিয়াচিং ব্যৱহাৰ কৰা হব নে (1 সামৰ্থবান কৰিবলে, 0 অসামৰ্থবান কৰিবলে, আৰু -1 "
+"এন্টিএলিয়াচিং ব্যৱহাৰ কৰা হব নে (1 সামৰ্থবান কৰিবলে, 0 অসামৰ্থবান কৰিবলে, আৰু "
+"-1 "
"অবিকল্পিতক ব্যৱহাৰ কৰিবলে)"
-#: ../clutter/clutter-settings.c:521
+#: ../clutter/clutter-settings.c:567 ../clutter/clutter-settings.c:575
msgid "Font DPI"
msgstr "ফন্ট DPI"
-#: ../clutter/clutter-settings.c:522
-msgid "The resolution of the font, in 1024 * dots/inch, or -1 to use the default"
+#: ../clutter/clutter-settings.c:568 ../clutter/clutter-settings.c:576
+msgid ""
+"The resolution of the font, in 1024 * dots/inch, or -1 to use the default"
msgstr "ফন্টৰ বিভেদন, 1024 * dots/inch -ত, অথবা অবিকল্পিত ব্যৱহাৰ কৰিবলে -1"
-#: ../clutter/clutter-settings.c:538
+#: ../clutter/clutter-settings.c:592
msgid "Font Hinting"
msgstr "ফন্ট ইংগিত"
-#: ../clutter/clutter-settings.c:539
-msgid "Whether to use hinting (1 to enable, 0 to disable and -1 to use the default)"
+#: ../clutter/clutter-settings.c:593
+msgid ""
+"Whether to use hinting (1 to enable, 0 to disable and -1 to use the default)"
msgstr ""
"ইংগিত ব্যৱহাৰ কৰা হব নে (1 সামৰ্থবান কৰিবলে, 0 অসামৰ্থবান কৰিবলে আৰু -1 "
"অবিকল্পিতক ব্যৱহাৰ কৰিবলে)"
-#: ../clutter/clutter-settings.c:560
+#: ../clutter/clutter-settings.c:613
msgid "Font Hint Style"
msgstr "ফন্ট ইংগিত শৈলী"
-#: ../clutter/clutter-settings.c:561
+#: ../clutter/clutter-settings.c:614
msgid "The style of hinting (hintnone, hintslight, hintmedium, hintfull)"
msgstr "ইংগিতৰ শৈলী (ইংগিতনাই, ইংগিতপাতল, ইংগিতমধ্যম, ইংগিতসম্পূৰ্ণ)"
-#: ../clutter/clutter-settings.c:582
+#: ../clutter/clutter-settings.c:634
msgid "Font Subpixel Order"
msgstr "ফন্ট উপপিক্সেল ক্ৰম"
-#: ../clutter/clutter-settings.c:583
+#: ../clutter/clutter-settings.c:635
msgid "The type of subpixel antialiasing (none, rgb, bgr, vrgb, vbgr)"
msgstr "উপপিক্সেল এন্টিএলিয়াচিংৰ ধৰণ (কোনো নহয়, rgb, bgr, vrgb, vbgr)"
-#: ../clutter/clutter-settings.c:600
+#: ../clutter/clutter-settings.c:652
msgid "The minimum duration for a long press gesture to be recognized"
msgstr "এটা দীঘল দবোৱা ভংগি চিনাক্ত কৰিবলে নূন্যতম অবধি"
-#: ../clutter/clutter-settings.c:607
+#: ../clutter/clutter-settings.c:659
+msgid "Window Scaling Factor"
+msgstr "উইন্ডো স্কেইলিং কাৰক"
+
+#: ../clutter/clutter-settings.c:660
+#| msgid "Add an effect to be applied on the actor"
+msgid "The scaling factor to be applied to windows"
+msgstr "উইন্ডোসমূহলৈ প্ৰয়োগ কৰিবলে স্কেইলিং কাৰক"
+
+#: ../clutter/clutter-settings.c:667
msgid "Fontconfig configuration timestamp"
msgstr "ফন্টসংৰূপ সংৰূপ সময়মোহৰ"
-#: ../clutter/clutter-settings.c:608
+#: ../clutter/clutter-settings.c:668
msgid "Timestamp of the current fontconfig configuration"
msgstr "বৰ্তমান ফন্টসংৰূপ সংৰূপৰ সময়মোহৰ"
-#: ../clutter/clutter-settings.c:625
+#: ../clutter/clutter-settings.c:685
msgid "Password Hint Time"
-msgstr "পাছৱাৰ্ড ইংগিত সময়"
+msgstr "পাছৱৰ্ড ইংগিত সময়"
-#: ../clutter/clutter-settings.c:626
+#: ../clutter/clutter-settings.c:686
msgid "How long to show the last input character in hidden entries"
msgstr "লুকুৱা প্ৰবিষ্টিসমূহত সৰ্বশেষ ইনপুট আখৰ কিমান দেৰি দেখুৱা হব"
-#: ../clutter/clutter-shader-effect.c:486
+#: ../clutter/clutter-shader-effect.c:487
msgid "Shader Type"
msgstr "শেডাৰৰ ধৰণ"
-#: ../clutter/clutter-shader-effect.c:487
+#: ../clutter/clutter-shader-effect.c:488
msgid "The type of shader used"
msgstr "ব্যৱহাৰ কৰা শেডাৰৰ ধৰণ"
@@ -1550,758 +1636,702 @@ msgstr "স্নেপ কৰিব লগিয়া উৎসৰ প্ৰা
msgid "The offset in pixels to apply to the constraint"
msgstr "বাধালে প্ৰয়োগ কৰিবলে পিক্সেলসমূহত অফছেট"
-#: ../clutter/clutter-stage.c:1899
+#: ../clutter/clutter-stage.c:1917
msgid "Fullscreen Set"
msgstr "সম্পূৰ্ণপৰ্দা সংহতি"
-#: ../clutter/clutter-stage.c:1900
+#: ../clutter/clutter-stage.c:1918
msgid "Whether the main stage is fullscreen"
msgstr "মূখ্য মঞ্চ সম্পূৰ্ণপৰ্দা হয় নে"
-#: ../clutter/clutter-stage.c:1914
+#: ../clutter/clutter-stage.c:1932
msgid "Offscreen"
msgstr "অফস্ক্ৰিন"
-#: ../clutter/clutter-stage.c:1915
+#: ../clutter/clutter-stage.c:1933
msgid "Whether the main stage should be rendered offscreen"
msgstr "মূখ্য মঞ্চক অফস্ক্ৰিন ৰেন্ডাৰ কৰা হব নে"
-#: ../clutter/clutter-stage.c:1927 ../clutter/clutter-text.c:3482
+#: ../clutter/clutter-stage.c:1945 ../clutter/clutter-text.c:3551
msgid "Cursor Visible"
msgstr "কাৰ্চাৰ দৃশ্যমান"
-#: ../clutter/clutter-stage.c:1928
+#: ../clutter/clutter-stage.c:1946
msgid "Whether the mouse pointer is visible on the main stage"
msgstr "মূখ্য মঞ্চত মাউছ পোইন্টাৰ দৃশ্যমান হয় নে"
-#: ../clutter/clutter-stage.c:1942
+#: ../clutter/clutter-stage.c:1960
msgid "User Resizable"
msgstr "ব্যৱহাৰকাৰী দ্বাৰা পুনৰআকাৰ কৰিব পৰা"
-#: ../clutter/clutter-stage.c:1943
+#: ../clutter/clutter-stage.c:1961
msgid "Whether the stage is able to be resized via user interaction"
msgstr "মঞ্চক ব্যৱহাৰকাৰী ভাৱ-বিনিময়ৰে পুনৰ আকাৰ দিয়া সম্ভব হয় নে"
-#: ../clutter/clutter-stage.c:1958 ../clutter/deprecated/clutter-box.c:260
-#: ../clutter/deprecated/clutter-rectangle.c:273
+#: ../clutter/clutter-stage.c:1976 ../clutter/deprecated/clutter-box.c:254
+#: ../clutter/deprecated/clutter-rectangle.c:270
msgid "Color"
msgstr "ৰঙ"
-#: ../clutter/clutter-stage.c:1959
+#: ../clutter/clutter-stage.c:1977
msgid "The color of the stage"
msgstr "মঞ্চৰ ৰঙ"
-#: ../clutter/clutter-stage.c:1974
+#: ../clutter/clutter-stage.c:1992
msgid "Perspective"
msgstr "পৰিপ্ৰেক্ষিত"
-#: ../clutter/clutter-stage.c:1975
+#: ../clutter/clutter-stage.c:1993
msgid "Perspective projection parameters"
msgstr "পৰিপ্ৰেক্ষিত প্ৰক্ষেপন প্ৰাচলসমূহ"
-#: ../clutter/clutter-stage.c:1990
+#: ../clutter/clutter-stage.c:2008
msgid "Title"
msgstr "শীৰ্ষক"
-#: ../clutter/clutter-stage.c:1991
+#: ../clutter/clutter-stage.c:2009
msgid "Stage Title"
msgstr "মঞ্চ শীৰ্ষক"
-#: ../clutter/clutter-stage.c:2008
+#: ../clutter/clutter-stage.c:2026
msgid "Use Fog"
msgstr "ফগ ব্যৱহাৰ কৰক"
-#: ../clutter/clutter-stage.c:2009
+#: ../clutter/clutter-stage.c:2027
msgid "Whether to enable depth cueing"
msgstr "গভীৰতা এনকিউং সামৰ্থবান কৰা হব নে"
-#: ../clutter/clutter-stage.c:2025
+#: ../clutter/clutter-stage.c:2043
msgid "Fog"
msgstr "ফগ"
-#: ../clutter/clutter-stage.c:2026
+#: ../clutter/clutter-stage.c:2044
msgid "Settings for the depth cueing"
msgstr "গভীৰতা এনকিউংৰ বাবে সংহতিসমূহ"
-#: ../clutter/clutter-stage.c:2042
+#: ../clutter/clutter-stage.c:2060
msgid "Use Alpha"
msgstr "আলফা ব্যৱহাৰ কৰক"
-#: ../clutter/clutter-stage.c:2043
+#: ../clutter/clutter-stage.c:2061
msgid "Whether to honour the alpha component of the stage color"
msgstr "মঞ্চ ৰঙৰ আলফা উপাদানক শ্ৰদ্ধা কৰা হব নে"
-#: ../clutter/clutter-stage.c:2059
+#: ../clutter/clutter-stage.c:2077
msgid "Key Focus"
msgstr "চাবি মনোনিবেষ"
-#: ../clutter/clutter-stage.c:2060
+#: ../clutter/clutter-stage.c:2078
msgid "The currently key focused actor"
msgstr "বৰ্তমান চাবি মনোনিবেষিত অভিনেতা"
-#: ../clutter/clutter-stage.c:2076
+#: ../clutter/clutter-stage.c:2094
msgid "No Clear Hint"
msgstr "কোনো পৰিষ্কাৰ ইংগিত নাই"
-#: ../clutter/clutter-stage.c:2077
+#: ../clutter/clutter-stage.c:2095
msgid "Whether the stage should clear its contents"
msgstr "মঞ্চয় তাৰ সমলসমূহ পৰিষ্কাৰ কৰিব লাগে নে"
-#: ../clutter/clutter-stage.c:2090
+#: ../clutter/clutter-stage.c:2108
msgid "Accept Focus"
msgstr "মনোনিবেষ গ্ৰহণ কৰক"
-#: ../clutter/clutter-stage.c:2091
+#: ../clutter/clutter-stage.c:2109
msgid "Whether the stage should accept focus on show"
msgstr "মঞ্চয় প্ৰদৰ্শনত মনোনিবেষ গ্ৰহণ কৰিব লাগে নে"
-#: ../clutter/clutter-table-layout.c:543
-msgid "Column Number"
-msgstr "স্তম্ভ নম্বৰ"
-
-#: ../clutter/clutter-table-layout.c:544
-msgid "The column the widget resides in"
-msgstr "উইজেট অৱস্থিত স্তম্ভ"
-
-#: ../clutter/clutter-table-layout.c:551
-msgid "Row Number"
-msgstr "শাৰী নম্বৰ"
-
-#: ../clutter/clutter-table-layout.c:552
-msgid "The row the widget resides in"
-msgstr "উইজেট অৱস্থিত শাৰী"
-
-#: ../clutter/clutter-table-layout.c:559
-msgid "Column Span"
-msgstr "স্তম্ভ বিস্তাৰ"
-
-#: ../clutter/clutter-table-layout.c:560
-msgid "The number of columns the widget should span"
-msgstr "উইজেট বিস্তাৰ কৰিবলে স্তম্ভসমূহৰ সংখ্যা"
-
-#: ../clutter/clutter-table-layout.c:567
-msgid "Row Span"
-msgstr "শাৰী বিস্তাৰ"
-
-#: ../clutter/clutter-table-layout.c:568
-msgid "The number of rows the widget should span"
-msgstr "উইজেটে বিস্তাৰ কৰিবলে শাৰীসমূহৰ সংখ্যা"
-
-#: ../clutter/clutter-table-layout.c:575
-msgid "Horizontal Expand"
-msgstr "আনুভূমিক প্ৰসাৰন"
-
-#: ../clutter/clutter-table-layout.c:576
-msgid "Allocate extra space for the child in horizontal axis"
-msgstr "আনুভূমিক অক্ষত ছাইল্ডৰ বাবে অতিৰিক্ত স্থান আবন্টন কৰক"
-
-#: ../clutter/clutter-table-layout.c:582
-msgid "Vertical Expand"
-msgstr "উলম্ব প্ৰসাৰন"
-
-#: ../clutter/clutter-table-layout.c:583
-msgid "Allocate extra space for the child in vertical axis"
-msgstr "উলম্ব অক্ষত ছাইল্ডৰ বাবে অতিৰিক্ত স্থান আবন্টন কৰক"
-
-#: ../clutter/clutter-table-layout.c:1638
-msgid "Spacing between columns"
-msgstr "স্তম্ভসমূহৰ মাজৰ স্থান"
-
-#: ../clutter/clutter-table-layout.c:1652
-msgid "Spacing between rows"
-msgstr "শাৰীসমূহৰ মাজৰ স্থান"
-
-#: ../clutter/clutter-text-buffer.c:351 ../clutter/clutter-text.c:3403
+#: ../clutter/clutter-text-buffer.c:347 ../clutter/clutter-text.c:3472
msgid "Text"
-msgstr "লিখনী"
+msgstr "লিখনি"
-#: ../clutter/clutter-text-buffer.c:352
+#: ../clutter/clutter-text-buffer.c:348
msgid "The contents of the buffer"
msgstr "বাফাৰৰ সমল"
-#: ../clutter/clutter-text-buffer.c:365
+#: ../clutter/clutter-text-buffer.c:361
msgid "Text length"
-msgstr "লিখনী দৈৰ্ঘ্য"
+msgstr "লিখনি দৈৰ্ঘ্য"
-#: ../clutter/clutter-text-buffer.c:366
+#: ../clutter/clutter-text-buffer.c:362
msgid "Length of the text currently in the buffer"
-msgstr "বাফাৰত বৰ্তমানে থকা লিখনীৰ দৈৰ্ঘ্য"
+msgstr "বাফাৰত বৰ্তমানে থকা লিখনিৰ দৈৰ্ঘ্য"
-#: ../clutter/clutter-text-buffer.c:379
+#: ../clutter/clutter-text-buffer.c:375
msgid "Maximum length"
msgstr "সৰ্বাধিক দৈৰ্ঘ্য"
-#: ../clutter/clutter-text-buffer.c:380
+#: ../clutter/clutter-text-buffer.c:376
msgid "Maximum number of characters for this entry. Zero if no maximum"
msgstr "এই প্ৰবিষ্টিৰ বাবে আখৰসমূহৰ সমৰ্বাধিক সংখ্যা। শূন্য যদি সৰ্বাধিক নহয়"
-#: ../clutter/clutter-text.c:3350
+#: ../clutter/clutter-text.c:3419
msgid "Buffer"
msgstr "বাফাৰ"
-#: ../clutter/clutter-text.c:3351
+#: ../clutter/clutter-text.c:3420
msgid "The buffer for the text"
-msgstr "লিখনীৰ বাবে বাফাৰ"
+msgstr "লিখনিৰ বাবে বাফাৰ"
-#: ../clutter/clutter-text.c:3369
+#: ../clutter/clutter-text.c:3438
msgid "The font to be used by the text"
-msgstr "লিখনী দ্বাৰা ব্যৱহৃত ফন্ট"
+msgstr "লিখনি দ্বাৰা ব্যৱহৃত ফন্ট"
-#: ../clutter/clutter-text.c:3386
+#: ../clutter/clutter-text.c:3455
msgid "Font Description"
msgstr "ফন্ট বিৱৰণ"
-#: ../clutter/clutter-text.c:3387
+#: ../clutter/clutter-text.c:3456
msgid "The font description to be used"
msgstr "ব্যৱহাৰ কৰিব লগিয়া ফন্ট বিৱৰণ"
-#: ../clutter/clutter-text.c:3404
+#: ../clutter/clutter-text.c:3473
msgid "The text to render"
-msgstr "ৰেন্ডাৰ কৰিবলে লিখনী"
+msgstr "ৰেন্ডাৰ কৰিবলে লিখনি"
-#: ../clutter/clutter-text.c:3418
+#: ../clutter/clutter-text.c:3487
msgid "Font Color"
msgstr "ফন্টৰ ৰঙ"
-#: ../clutter/clutter-text.c:3419
+#: ../clutter/clutter-text.c:3488
msgid "Color of the font used by the text"
-msgstr "লিখনী দ্বাৰা ব্যৱহৃত ফন্টৰ ৰঙ"
+msgstr "লিখনি দ্বাৰা ব্যৱহৃত ফন্টৰ ৰঙ"
-#: ../clutter/clutter-text.c:3434
+#: ../clutter/clutter-text.c:3503
msgid "Editable"
msgstr "সম্পাদন কৰিব পাৰি"
-#: ../clutter/clutter-text.c:3435
+#: ../clutter/clutter-text.c:3504
msgid "Whether the text is editable"
-msgstr "লিখনী সম্পাদন কৰিব পাৰি নে"
+msgstr "লিখনি সম্পাদন কৰিব পাৰি নে"
-#: ../clutter/clutter-text.c:3450
+#: ../clutter/clutter-text.c:3519
msgid "Selectable"
msgstr "নিৰ্বাচন কৰিব পাৰি"
-#: ../clutter/clutter-text.c:3451
+#: ../clutter/clutter-text.c:3520
msgid "Whether the text is selectable"
-msgstr "লিখনী নিৰ্বাচন কৰিব পাৰি নে"
+msgstr "লিখনি নিৰ্বাচন কৰিব পাৰি নে"
-#: ../clutter/clutter-text.c:3465
+#: ../clutter/clutter-text.c:3534
msgid "Activatable"
msgstr "সক্ৰিয় কৰিব পাৰি"
-#: ../clutter/clutter-text.c:3466
+#: ../clutter/clutter-text.c:3535
msgid "Whether pressing return causes the activate signal to be emitted"
msgstr "return দবালে সক্ৰিয় সংকেত নিৰ্গত হয় নে"
-#: ../clutter/clutter-text.c:3483
+#: ../clutter/clutter-text.c:3552
msgid "Whether the input cursor is visible"
msgstr "ইনপুট কাৰ্চাৰ দৃশ্যমান হয় নে"
-#: ../clutter/clutter-text.c:3497 ../clutter/clutter-text.c:3498
+#: ../clutter/clutter-text.c:3566 ../clutter/clutter-text.c:3567
msgid "Cursor Color"
msgstr "কাৰ্চাৰৰ ৰঙ"
-#: ../clutter/clutter-text.c:3513
+#: ../clutter/clutter-text.c:3582
msgid "Cursor Color Set"
msgstr "কাৰ্চাৰৰ ৰঙৰ সংহতি"
-#: ../clutter/clutter-text.c:3514
+#: ../clutter/clutter-text.c:3583
msgid "Whether the cursor color has been set"
msgstr "কাৰ্চাৰৰ ৰঙ সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-text.c:3529
+#: ../clutter/clutter-text.c:3598
msgid "Cursor Size"
msgstr "কাৰ্চাৰৰ আকাৰ"
-#: ../clutter/clutter-text.c:3530
+#: ../clutter/clutter-text.c:3599
msgid "The width of the cursor, in pixels"
msgstr "কাৰ্চাৰৰ প্ৰস্থ, পিক্সেলসমূহত"
-#: ../clutter/clutter-text.c:3546 ../clutter/clutter-text.c:3564
+#: ../clutter/clutter-text.c:3615 ../clutter/clutter-text.c:3633
msgid "Cursor Position"
msgstr "কাৰ্চাৰৰ অৱস্থান"
-#: ../clutter/clutter-text.c:3547 ../clutter/clutter-text.c:3565
+#: ../clutter/clutter-text.c:3616 ../clutter/clutter-text.c:3634
msgid "The cursor position"
msgstr "কাৰ্চাৰৰ অৱস্থান"
-#: ../clutter/clutter-text.c:3580
+#: ../clutter/clutter-text.c:3649
msgid "Selection-bound"
msgstr "নিৰ্বাচন-বান্ধীত"
-#: ../clutter/clutter-text.c:3581
+#: ../clutter/clutter-text.c:3650
msgid "The cursor position of the other end of the selection"
msgstr "নিৰ্বাচনৰ অন্য প্ৰান্তৰ কাৰ্চাৰ অৱস্থান"
-#: ../clutter/clutter-text.c:3596 ../clutter/clutter-text.c:3597
+#: ../clutter/clutter-text.c:3665 ../clutter/clutter-text.c:3666
msgid "Selection Color"
msgstr "নিৰ্বাচনৰ ৰঙ"
-#: ../clutter/clutter-text.c:3612
+#: ../clutter/clutter-text.c:3681
msgid "Selection Color Set"
msgstr "নিৰ্বাচনৰ ৰঙ সংহতি"
-#: ../clutter/clutter-text.c:3613
+#: ../clutter/clutter-text.c:3682
msgid "Whether the selection color has been set"
msgstr "নিৰ্বাচন ৰঙ সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-text.c:3628
+#: ../clutter/clutter-text.c:3697
msgid "Attributes"
msgstr "বৈশিষ্টসমূহ"
-#: ../clutter/clutter-text.c:3629
+#: ../clutter/clutter-text.c:3698
msgid "A list of style attributes to apply to the contents of the actor"
msgstr "অভিনেতাৰ সমলসমূহলে প্ৰয়োগ কৰিবলে শৈলী বৈশিষ্টসমূহৰ এটা তালিকা"
-#: ../clutter/clutter-text.c:3651
+#: ../clutter/clutter-text.c:3720
msgid "Use markup"
msgstr "মাৰ্কআপ ব্যৱহাৰ কৰক"
-#: ../clutter/clutter-text.c:3652
+#: ../clutter/clutter-text.c:3721
msgid "Whether or not the text includes Pango markup"
-msgstr "লিখনীয়ে Pango মাৰ্কআপ অন্তৰ্ভুক্ত কৰে নে"
+msgstr "লিখনিয়ে Pango মাৰ্কআপ অন্তৰ্ভুক্ত কৰে নে"
-#: ../clutter/clutter-text.c:3668
+#: ../clutter/clutter-text.c:3737
msgid "Line wrap"
msgstr "শাৰী মেৰিওৱা"
-#: ../clutter/clutter-text.c:3669
+#: ../clutter/clutter-text.c:3738
msgid "If set, wrap the lines if the text becomes too wide"
-msgstr "যদি সংহতি কৰা থাকে, লিখনী অতি বহল হৈ গলে শাৰীসমূহ মেৰিৱাওক"
+msgstr "যদি সংহতি কৰা থাকে, লিখনি অতি বহল হৈ গলে শাৰীসমূহ মেৰিৱাওক"
-#: ../clutter/clutter-text.c:3684
+#: ../clutter/clutter-text.c:3753
msgid "Line wrap mode"
msgstr "শাৰী মেৰিওৱা অৱস্থা"
-#: ../clutter/clutter-text.c:3685
+#: ../clutter/clutter-text.c:3754
msgid "Control how line-wrapping is done"
msgstr "শাৰী-মেৰিওৱা কিধৰণে কৰা হয় নিয়ন্ত্ৰণ কৰক"
-#: ../clutter/clutter-text.c:3700
+#: ../clutter/clutter-text.c:3769
msgid "Ellipsize"
msgstr "উপবৃত্ত কৰক"
-#: ../clutter/clutter-text.c:3701
+#: ../clutter/clutter-text.c:3770
msgid "The preferred place to ellipsize the string"
msgstr "স্ট্ৰিং উপবৃত্ত কৰিবলে পছন্দৰ স্থান"
-#: ../clutter/clutter-text.c:3717
+#: ../clutter/clutter-text.c:3786
msgid "Line Alignment"
msgstr "শাৰী সংস্থাপন"
-#: ../clutter/clutter-text.c:3718
+#: ../clutter/clutter-text.c:3787
msgid "The preferred alignment for the string, for multi-line text"
-msgstr "স্ট্ৰিং, বহু-শাৰী লিখনীৰ বাবে পছন্দৰ সংস্থাপন"
+msgstr "স্ট্ৰিং, বহু-শাৰী লিখনিৰ বাবে পছন্দৰ সংস্থাপন"
-#: ../clutter/clutter-text.c:3734
+#: ../clutter/clutter-text.c:3803
msgid "Justify"
msgstr "শুদ্ধ প্ৰমাণিত কৰক"
-#: ../clutter/clutter-text.c:3735
+#: ../clutter/clutter-text.c:3804
msgid "Whether the text should be justified"
-msgstr "লিখনীক শুদ্ধ প্ৰমাণীত কৰা হব নে"
+msgstr "লিখনিক শুদ্ধ প্ৰমাণীত কৰা হব নে"
-#: ../clutter/clutter-text.c:3750
+#: ../clutter/clutter-text.c:3819
msgid "Password Character"
-msgstr "পাছৱাৰ্ড আখৰ"
+msgstr "পাছৱৰ্ড আখৰ"
-#: ../clutter/clutter-text.c:3751
+#: ../clutter/clutter-text.c:3820
msgid "If non-zero, use this character to display the actor's contents"
msgstr "যদি শূন্য নহয়, অভিনেতাৰ সমলসমূহ প্ৰদৰ্শন কৰিবলে এই আখৰ ব্যৱহাৰ কৰক"
-#: ../clutter/clutter-text.c:3765
+#: ../clutter/clutter-text.c:3834
msgid "Max Length"
msgstr "সৰ্বাধিক দৈৰ্ঘ্য"
-#: ../clutter/clutter-text.c:3766
+#: ../clutter/clutter-text.c:3835
msgid "Maximum length of the text inside the actor"
-msgstr "অভিনেতাৰ ভিতৰত লিখনীৰ সৰ্বাধিক দৈৰ্ঘ্য"
+msgstr "অভিনেতাৰ ভিতৰত লিখনিৰ সৰ্বাধিক দৈৰ্ঘ্য"
-#: ../clutter/clutter-text.c:3789
+#: ../clutter/clutter-text.c:3858
msgid "Single Line Mode"
msgstr "এটা শাৰী অৱস্থা"
-#: ../clutter/clutter-text.c:3790
+#: ../clutter/clutter-text.c:3859
msgid "Whether the text should be a single line"
-msgstr "লিখনী এটা শাৰী হব লাগিব নে"
+msgstr "লিখনি এটা শাৰী হব লাগিব নে"
-#: ../clutter/clutter-text.c:3804 ../clutter/clutter-text.c:3805
+#: ../clutter/clutter-text.c:3873 ../clutter/clutter-text.c:3874
msgid "Selected Text Color"
-msgstr "নিৰ্বাচিত লিখনী ৰঙ"
+msgstr "নিৰ্বাচিত লিখনি ৰঙ"
-#: ../clutter/clutter-text.c:3820
+#: ../clutter/clutter-text.c:3889
msgid "Selected Text Color Set"
-msgstr "নিৰ্বাচিত লিখনী ৰঙ সংহতি"
+msgstr "নিৰ্বাচিত লিখনি ৰঙ সংহতি"
-#: ../clutter/clutter-text.c:3821
+#: ../clutter/clutter-text.c:3890
msgid "Whether the selected text color has been set"
-msgstr "নিৰ্বাচিত লিখনী ৰঙ সংহতি কৰা হৈছে নে"
+msgstr "নিৰ্বাচিত লিখনি ৰঙ সংহতি কৰা হৈছে নে"
-#: ../clutter/clutter-timeline.c:561
-#: ../clutter/deprecated/clutter-animation.c:560
+#: ../clutter/clutter-timeline.c:591
+#: ../clutter/deprecated/clutter-animation.c:512
msgid "Loop"
msgstr "পুনৰাবৃত্তি"
-#: ../clutter/clutter-timeline.c:562
+#: ../clutter/clutter-timeline.c:592
msgid "Should the timeline automatically restart"
msgstr "সময়ৰেখা স্বচালিতভাৱে আৰম্ভ হব লাগে নে"
-#: ../clutter/clutter-timeline.c:576
+#: ../clutter/clutter-timeline.c:606
msgid "Delay"
msgstr "বিলম্ব"
-#: ../clutter/clutter-timeline.c:577
+#: ../clutter/clutter-timeline.c:607
msgid "Delay before start"
msgstr "আৰম্ভৰ আগত বিলম্ব"
-#: ../clutter/clutter-timeline.c:592
-#: ../clutter/deprecated/clutter-animation.c:544
-#: ../clutter/deprecated/clutter-animator.c:1803
+#: ../clutter/clutter-timeline.c:622
+#: ../clutter/deprecated/clutter-animation.c:496
+#: ../clutter/deprecated/clutter-animator.c:1792
#: ../clutter/deprecated/clutter-media.c:224
-#: ../clutter/deprecated/clutter-state.c:1522
+#: ../clutter/deprecated/clutter-state.c:1515
msgid "Duration"
msgstr "অবধি"
-#: ../clutter/clutter-timeline.c:593
+#: ../clutter/clutter-timeline.c:623
msgid "Duration of the timeline in milliseconds"
msgstr "মিলিছেকেণ্ডসমূহত সময়ৰেখাৰ অবধি"
-#: ../clutter/clutter-timeline.c:608
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:528
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:337
+#: ../clutter/clutter-timeline.c:638
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:521
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:330
msgid "Direction"
msgstr "দিশ"
-#: ../clutter/clutter-timeline.c:609
+#: ../clutter/clutter-timeline.c:639
msgid "Direction of the timeline"
msgstr "সময়ৰেখাৰ দিশ"
-#: ../clutter/clutter-timeline.c:624
+#: ../clutter/clutter-timeline.c:654
msgid "Auto Reverse"
msgstr "স্বচালিত উভতা"
-#: ../clutter/clutter-timeline.c:625
+#: ../clutter/clutter-timeline.c:655
msgid "Whether the direction should be reversed when reaching the end"
msgstr "অন্ত পাওতে দিশ উভতোৱা হব নে"
-#: ../clutter/clutter-timeline.c:643
+#: ../clutter/clutter-timeline.c:673
msgid "Repeat Count"
msgstr "গণনা পুনৰাবৃত্তি কৰক"
-#: ../clutter/clutter-timeline.c:644
+#: ../clutter/clutter-timeline.c:674
msgid "How many times the timeline should repeat"
msgstr "সময়ৰেখা কিমান দেৰি পুনৰাবৃত্তি হব লাগে"
-#: ../clutter/clutter-timeline.c:658
+#: ../clutter/clutter-timeline.c:688
msgid "Progress Mode"
msgstr "প্ৰগতি অৱস্থা"
-#: ../clutter/clutter-timeline.c:659
+#: ../clutter/clutter-timeline.c:689
msgid "How the timeline should compute the progress"
msgstr "সময়ৰেখায় কিদৰে প্ৰগতি গণনা কৰিব"
-#: ../clutter/clutter-transition.c:246
+#: ../clutter/clutter-transition.c:244
msgid "Interval"
msgstr "অন্তৰাল"
-#: ../clutter/clutter-transition.c:247
+#: ../clutter/clutter-transition.c:245
msgid "The interval of values to transition"
msgstr "স্থানান্তৰলে মানসমূহৰ অন্তৰাল"
-#: ../clutter/clutter-transition.c:261
+#: ../clutter/clutter-transition.c:259
msgid "Animatable"
msgstr "জীৱন্ত কৰিব পাৰি"
-#: ../clutter/clutter-transition.c:262
+#: ../clutter/clutter-transition.c:260
msgid "The animatable object"
msgstr "জীৱন্ত কৰিব পৰা অবজেক্ট"
-#: ../clutter/clutter-transition.c:283
+#: ../clutter/clutter-transition.c:281
msgid "Remove on Complete"
msgstr "সম্পূৰ্ণত আতৰাব"
-#: ../clutter/clutter-transition.c:284
+#: ../clutter/clutter-transition.c:282
msgid "Detach the transition when completed"
msgstr "সম্পূৰ্ণ হলে স্থানান্তৰ বিচ্ছিন্ন কৰক"
-#: ../clutter/clutter-zoom-action.c:353
+#: ../clutter/clutter-zoom-action.c:365
msgid "Zoom Axis"
msgstr "জুম অক্ষ"
-#: ../clutter/clutter-zoom-action.c:354
+#: ../clutter/clutter-zoom-action.c:366
msgid "Constraints the zoom to an axis"
msgstr "জুমক এটা অক্ষত সীমিত ৰাখে"
-#: ../clutter/deprecated/clutter-alpha.c:355
-#: ../clutter/deprecated/clutter-animation.c:575
-#: ../clutter/deprecated/clutter-animator.c:1820
+#: ../clutter/deprecated/clutter-alpha.c:347
+#: ../clutter/deprecated/clutter-animation.c:527
+#: ../clutter/deprecated/clutter-animator.c:1809
msgid "Timeline"
msgstr "সময়ৰেখা"
-#: ../clutter/deprecated/clutter-alpha.c:356
+#: ../clutter/deprecated/clutter-alpha.c:348
msgid "Timeline used by the alpha"
msgstr "আলফাৰ দ্বাৰা ব্যৱহৃত সময়ৰেখা"
-#: ../clutter/deprecated/clutter-alpha.c:372
+#: ../clutter/deprecated/clutter-alpha.c:364
msgid "Alpha value"
msgstr "আলফা মান"
-#: ../clutter/deprecated/clutter-alpha.c:373
+#: ../clutter/deprecated/clutter-alpha.c:365
msgid "Alpha value as computed by the alpha"
msgstr "আলফাৰ দ্বাৰা গণনা কৰা আলফা মান"
-#: ../clutter/deprecated/clutter-alpha.c:394
-#: ../clutter/deprecated/clutter-animation.c:528
+#: ../clutter/deprecated/clutter-alpha.c:386
+#: ../clutter/deprecated/clutter-animation.c:480
msgid "Mode"
msgstr "অৱস্থা"
-#: ../clutter/deprecated/clutter-alpha.c:395
+#: ../clutter/deprecated/clutter-alpha.c:387
msgid "Progress mode"
msgstr "প্ৰগতি অৱস্থা"
-#: ../clutter/deprecated/clutter-animation.c:511
+#: ../clutter/deprecated/clutter-animation.c:463
msgid "Object"
msgstr "অবজেক্ট"
-#: ../clutter/deprecated/clutter-animation.c:512
+#: ../clutter/deprecated/clutter-animation.c:464
msgid "Object to which the animation applies"
msgstr "অবজেক্ট যলৈ জীৱন্তকৰণ প্ৰয়োগ হয়"
-#: ../clutter/deprecated/clutter-animation.c:529
+#: ../clutter/deprecated/clutter-animation.c:481
msgid "The mode of the animation"
msgstr "জীৱন্তকৰণৰ অৱস্থা"
-#: ../clutter/deprecated/clutter-animation.c:545
+#: ../clutter/deprecated/clutter-animation.c:497
msgid "Duration of the animation, in milliseconds"
msgstr "জীৱন্তকৰণড় অবধি, মিলিছেকেণ্ডসমূহত"
-#: ../clutter/deprecated/clutter-animation.c:561
+#: ../clutter/deprecated/clutter-animation.c:513
msgid "Whether the animation should loop"
msgstr "জীৱন্তৰকৰণৰ পুনৰাবৃত্তি হব নে"
-#: ../clutter/deprecated/clutter-animation.c:576
+#: ../clutter/deprecated/clutter-animation.c:528
msgid "The timeline used by the animation"
msgstr "জীৱন্তকৰণ দ্বাৰা ব্যৱহৃত সময়ৰেখা"
-#: ../clutter/deprecated/clutter-animation.c:592
-#: ../clutter/deprecated/clutter-behaviour.c:241
+#: ../clutter/deprecated/clutter-animation.c:544
+#: ../clutter/deprecated/clutter-behaviour.c:237
msgid "Alpha"
msgstr "আলফা"
-#: ../clutter/deprecated/clutter-animation.c:593
+#: ../clutter/deprecated/clutter-animation.c:545
msgid "The alpha used by the animation"
msgstr "জীৱন্তকৰণ দ্বাৰা ব্যৱহৃত আলফা"
-#: ../clutter/deprecated/clutter-animator.c:1804
+#: ../clutter/deprecated/clutter-animator.c:1793
msgid "The duration of the animation"
msgstr "জীৱন্তকৰণৰ অবধি"
-#: ../clutter/deprecated/clutter-animator.c:1821
+#: ../clutter/deprecated/clutter-animator.c:1810
msgid "The timeline of the animation"
msgstr "জীৱন্তকৰণৰ সময়ৰেখা"
-#: ../clutter/deprecated/clutter-behaviour.c:242
+#: ../clutter/deprecated/clutter-behaviour.c:238
msgid "Alpha Object to drive the behaviour"
msgstr "ব্যৱহাৰ চলাবলে আলফা অবজেক্ট"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:182
+#: ../clutter/deprecated/clutter-behaviour-depth.c:180
msgid "Start Depth"
msgstr "গভিৰতা আৰম্ভ কৰক"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:183
+#: ../clutter/deprecated/clutter-behaviour-depth.c:181
msgid "Initial depth to apply"
msgstr "প্ৰয়োগ কৰিবলে আৰম্ভণি গভীৰতা"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:198
+#: ../clutter/deprecated/clutter-behaviour-depth.c:196
msgid "End Depth"
msgstr "অন্ত গভীৰতা"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:199
+#: ../clutter/deprecated/clutter-behaviour-depth.c:197
msgid "Final depth to apply"
msgstr "প্ৰয়োগ কৰিবলে অন্তিম গভীৰতা"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:401
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:394
msgid "Start Angle"
msgstr "আৰম্ভণি কোণ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:402
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:284
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:395
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:277
msgid "Initial angle"
msgstr "আৰম্ভণি কোণ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:417
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:410
msgid "End Angle"
msgstr "অন্তিম কোণ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:418
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:302
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:411
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:295
msgid "Final angle"
msgstr "অন্তিম কোণ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:433
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:426
msgid "Angle x tilt"
msgstr "কোণ x হালি অহা"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:434
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:427
msgid "Tilt of the ellipse around x axis"
msgstr "x অক্ষৰ চাৰিওফালে উপবৃত্তৰ হাল"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:449
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:442
msgid "Angle y tilt"
msgstr "কোণ y হাল"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:450
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:443
msgid "Tilt of the ellipse around y axis"
msgstr "y অক্ষৰ চাৰিওফালে উপবৃত্তৰ হাল"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:465
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:458
msgid "Angle z tilt"
msgstr "কোণ z হাল"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:466
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:459
msgid "Tilt of the ellipse around z axis"
msgstr "z অক্ষৰ চাৰিওফালে উপবৃত্তৰ হাল"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:482
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:475
msgid "Width of the ellipse"
msgstr "উপবৃত্তৰ প্ৰস্থ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:498
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:491
msgid "Height of ellipse"
msgstr "উপবৃত্তৰ উচ্চতা"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:513
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:506
msgid "Center"
msgstr "কেন্দ্ৰ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:514
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:507
msgid "Center of ellipse"
msgstr "উপবৃত্তৰ কেন্দ্ৰ"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:529
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:338
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:522
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:331
msgid "Direction of rotation"
msgstr "ঘূৰ্ণনৰ দিশ"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:184
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:177
msgid "Opacity Start"
msgstr "অস্বচ্ছতাৰ আৰম্ভণি"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:185
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:178
msgid "Initial opacity level"
msgstr "আৰম্ভণি অস্বচ্ছতাৰ স্তৰ"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:202
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:195
msgid "Opacity End"
msgstr "অস্বচ্ছতাৰ অন্ত"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:203
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:196
msgid "Final opacity level"
msgstr "অন্তিম অস্বচ্ছ স্তৰ"
-#: ../clutter/deprecated/clutter-behaviour-path.c:226
+#: ../clutter/deprecated/clutter-behaviour-path.c:222
msgid "The ClutterPath object representing the path to animate along"
msgstr "জীৱন্ত কৰিবলে পথ প্ৰতিবেদন কৰা ClutterPath অবজেক্ট"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:283
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:276
msgid "Angle Begin"
msgstr "কোণৰ আৰম্ভণি"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:301
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:294
msgid "Angle End"
msgstr "কোণৰ অন্ত"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:319
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:312
msgid "Axis"
msgstr "অক্ষ"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:320
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:313
msgid "Axis of rotation"
msgstr "ঘূৰ্ণনৰ অক্ষ"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:355
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:348
msgid "Center X"
msgstr "কেন্দ্ৰ X"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:356
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:349
msgid "X coordinate of the center of rotation"
msgstr "ঘূৰ্ণনৰ কেন্দ্ৰৰ X অক্ষ"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:373
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:366
msgid "Center Y"
msgstr "কেন্দ্ৰ Y"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:374
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:367
msgid "Y coordinate of the center of rotation"
msgstr "ঘূৰ্ণনৰ কেন্দ্ৰৰ Y অক্ষ"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:391
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:384
msgid "Center Z"
msgstr "কেন্দ্ৰ Z"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:392
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:385
msgid "Z coordinate of the center of rotation"
msgstr "ঘূৰ্ণনৰ কেন্দ্ৰৰ Z অক্ষ"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:226
+#: ../clutter/deprecated/clutter-behaviour-scale.c:222
msgid "X Start Scale"
msgstr "X আৰম্ভ স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:227
+#: ../clutter/deprecated/clutter-behaviour-scale.c:223
msgid "Initial scale on the X axis"
msgstr "X অক্ষত আৰম্ভণি স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:245
+#: ../clutter/deprecated/clutter-behaviour-scale.c:241
msgid "X End Scale"
msgstr "X অন্ত স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:246
+#: ../clutter/deprecated/clutter-behaviour-scale.c:242
msgid "Final scale on the X axis"
msgstr "X অক্ষত অন্তিম স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:264
+#: ../clutter/deprecated/clutter-behaviour-scale.c:260
msgid "Y Start Scale"
msgstr "Y আৰম্ভণি স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:265
+#: ../clutter/deprecated/clutter-behaviour-scale.c:261
msgid "Initial scale on the Y axis"
msgstr "Y অক্ষত আৰম্ভণি স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:283
+#: ../clutter/deprecated/clutter-behaviour-scale.c:279
msgid "Y End Scale"
msgstr "Y অন্ত স্কেইল"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:284
+#: ../clutter/deprecated/clutter-behaviour-scale.c:280
msgid "Final scale on the Y axis"
msgstr "Y অক্ষত অন্তিম স্কেইল"
-#: ../clutter/deprecated/clutter-box.c:261
+#: ../clutter/deprecated/clutter-box.c:255
msgid "The background color of the box"
msgstr "বাকচৰ পটভূমী ৰঙ"
-#: ../clutter/deprecated/clutter-box.c:274
+#: ../clutter/deprecated/clutter-box.c:268
msgid "Color Set"
msgstr "ৰঙ সংহতি"
-#: ../clutter/deprecated/clutter-cairo-texture.c:597
+#: ../clutter/deprecated/clutter-cairo-texture.c:585
msgid "Surface Width"
msgstr "পৃষ্ঠ প্ৰস্থ"
-#: ../clutter/deprecated/clutter-cairo-texture.c:598
+#: ../clutter/deprecated/clutter-cairo-texture.c:586
msgid "The width of the Cairo surface"
msgstr "Cairo পৃষ্ঠৰ প্ৰস্থ"
-#: ../clutter/deprecated/clutter-cairo-texture.c:615
+#: ../clutter/deprecated/clutter-cairo-texture.c:603
msgid "Surface Height"
msgstr "পৃষ্ঠ উচ্চতা"
-#: ../clutter/deprecated/clutter-cairo-texture.c:616
+#: ../clutter/deprecated/clutter-cairo-texture.c:604
msgid "The height of the Cairo surface"
msgstr "Cairo পৃষ্ঠৰ উচ্চতা"
-#: ../clutter/deprecated/clutter-cairo-texture.c:636
+#: ../clutter/deprecated/clutter-cairo-texture.c:624
msgid "Auto Resize"
msgstr "স্বচালিত পুনৰ আকাৰ"
-#: ../clutter/deprecated/clutter-cairo-texture.c:637
+#: ../clutter/deprecated/clutter-cairo-texture.c:625
msgid "Whether the surface should match the allocation"
msgstr "পৃষ্ঠ আবন্টনৰ সৈতে মিল খাব লাগে নে"
@@ -2373,193 +2403,252 @@ msgstr "বাফাৰৰ পূৰ্ণ স্তৰ"
msgid "The duration of the stream, in seconds"
msgstr "স্ট্ৰিমৰ অবধি, ছেকেণ্ডসমূহত"
-#: ../clutter/deprecated/clutter-rectangle.c:274
+#: ../clutter/deprecated/clutter-rectangle.c:271
msgid "The color of the rectangle"
msgstr "আয়তৰ ৰঙ"
-#: ../clutter/deprecated/clutter-rectangle.c:287
+#: ../clutter/deprecated/clutter-rectangle.c:284
msgid "Border Color"
msgstr "সীমাৰ ৰঙ"
-#: ../clutter/deprecated/clutter-rectangle.c:288
+#: ../clutter/deprecated/clutter-rectangle.c:285
msgid "The color of the border of the rectangle"
msgstr "আয়তৰ সীমাৰ ৰঙ"
-#: ../clutter/deprecated/clutter-rectangle.c:303
+#: ../clutter/deprecated/clutter-rectangle.c:300
msgid "Border Width"
msgstr "সীমাৰ প্ৰস্থ"
-#: ../clutter/deprecated/clutter-rectangle.c:304
+#: ../clutter/deprecated/clutter-rectangle.c:301
msgid "The width of the border of the rectangle"
msgstr "আয়তৰ সীমাৰ প্ৰস্থ"
-#: ../clutter/deprecated/clutter-rectangle.c:318
+#: ../clutter/deprecated/clutter-rectangle.c:315
msgid "Has Border"
msgstr "সীমা আছে"
-#: ../clutter/deprecated/clutter-rectangle.c:319
+#: ../clutter/deprecated/clutter-rectangle.c:316
msgid "Whether the rectangle should have a border"
msgstr "আয়তৰ এটা সীমা থাকিব লাগে নে"
-#: ../clutter/deprecated/clutter-shader.c:261
+#: ../clutter/deprecated/clutter-shader.c:257
msgid "Vertex Source"
msgstr "শীৰ্ষবিন্দু উৎস"
-#: ../clutter/deprecated/clutter-shader.c:262
+#: ../clutter/deprecated/clutter-shader.c:258
msgid "Source of vertex shader"
msgstr "শীৰ্ষবিন্দু শেডাৰৰ উৎস"
-#: ../clutter/deprecated/clutter-shader.c:278
+#: ../clutter/deprecated/clutter-shader.c:274
msgid "Fragment Source"
msgstr "ফ্ৰেগমেন্টৰ উৎস"
-#: ../clutter/deprecated/clutter-shader.c:279
+#: ../clutter/deprecated/clutter-shader.c:275
msgid "Source of fragment shader"
msgstr "ফ্ৰেগমেন্ট শেডাৰৰ উৎস"
-#: ../clutter/deprecated/clutter-shader.c:296
+#: ../clutter/deprecated/clutter-shader.c:292
msgid "Compiled"
msgstr "কমপাইল কৰা হৈছে"
-#: ../clutter/deprecated/clutter-shader.c:297
+#: ../clutter/deprecated/clutter-shader.c:293
msgid "Whether the shader is compiled and linked"
msgstr "শেডাৰ কমপাইল আৰু লিঙ্ক কৰা আছে"
-#: ../clutter/deprecated/clutter-shader.c:314
+#: ../clutter/deprecated/clutter-shader.c:310
msgid "Whether the shader is enabled"
msgstr "শেডাৰ সামৰ্থবান কৰা আছে নে"
-#: ../clutter/deprecated/clutter-shader.c:525
+#: ../clutter/deprecated/clutter-shader.c:521
#, c-format
msgid "%s compilation failed: %s"
msgstr "%s কমপাইল ব্যৰ্থ হল: %s"
-#: ../clutter/deprecated/clutter-shader.c:526
+#: ../clutter/deprecated/clutter-shader.c:522
msgid "Vertex shader"
msgstr "শীৰ্ষবিন্দু শেডাৰ"
-#: ../clutter/deprecated/clutter-shader.c:527
+#: ../clutter/deprecated/clutter-shader.c:523
msgid "Fragment shader"
msgstr "ফ্ৰেগমেন্ট শেডাৰ"
-#: ../clutter/deprecated/clutter-state.c:1504
+#: ../clutter/deprecated/clutter-state.c:1497
msgid "State"
msgstr "অৱস্থা"
-#: ../clutter/deprecated/clutter-state.c:1505
+#: ../clutter/deprecated/clutter-state.c:1498
msgid "Currently set state, (transition to this state might not be complete)"
msgstr "বৰ্তমানে সংহতি কৰা অৱস্থা, (এই অৱস্থালে স্থানান্তৰ সম্পূৰ্ণ নহবও পাৰে)"
-#: ../clutter/deprecated/clutter-state.c:1523
+#: ../clutter/deprecated/clutter-state.c:1516
msgid "Default transition duration"
msgstr "অবিকল্পিত স্থানান্তৰ অবধি"
-#: ../clutter/deprecated/clutter-texture.c:994
+#: ../clutter/deprecated/clutter-table-layout.c:535
+msgid "Column Number"
+msgstr "স্তম্ভ নম্বৰ"
+
+#: ../clutter/deprecated/clutter-table-layout.c:536
+msgid "The column the widget resides in"
+msgstr "উইজেট অৱস্থিত স্তম্ভ"
+
+#: ../clutter/deprecated/clutter-table-layout.c:543
+msgid "Row Number"
+msgstr "শাৰী নম্বৰ"
+
+#: ../clutter/deprecated/clutter-table-layout.c:544
+msgid "The row the widget resides in"
+msgstr "উইজেট অৱস্থিত শাৰী"
+
+#: ../clutter/deprecated/clutter-table-layout.c:551
+msgid "Column Span"
+msgstr "স্তম্ভ বিস্তাৰ"
+
+#: ../clutter/deprecated/clutter-table-layout.c:552
+msgid "The number of columns the widget should span"
+msgstr "উইজেট বিস্তাৰ কৰিবলে স্তম্ভসমূহৰ সংখ্যা"
+
+#: ../clutter/deprecated/clutter-table-layout.c:559
+msgid "Row Span"
+msgstr "শাৰী বিস্তাৰ"
+
+#: ../clutter/deprecated/clutter-table-layout.c:560
+msgid "The number of rows the widget should span"
+msgstr "উইজেটে বিস্তাৰ কৰিবলে শাৰীসমূহৰ সংখ্যা"
+
+#: ../clutter/deprecated/clutter-table-layout.c:567
+msgid "Horizontal Expand"
+msgstr "আনুভূমিক প্ৰসাৰন"
+
+#: ../clutter/deprecated/clutter-table-layout.c:568
+msgid "Allocate extra space for the child in horizontal axis"
+msgstr "আনুভূমিক অক্ষত ছাইল্ডৰ বাবে অতিৰিক্ত স্থান আবন্টন কৰক"
+
+#: ../clutter/deprecated/clutter-table-layout.c:574
+msgid "Vertical Expand"
+msgstr "উলম্ব প্ৰসাৰন"
+
+#: ../clutter/deprecated/clutter-table-layout.c:575
+msgid "Allocate extra space for the child in vertical axis"
+msgstr "উলম্ব অক্ষত ছাইল্ডৰ বাবে অতিৰিক্ত স্থান আবন্টন কৰক"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1630
+msgid "Spacing between columns"
+msgstr "স্তম্ভসমূহৰ মাজৰ স্থান"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1646
+msgid "Spacing between rows"
+msgstr "শাৰীসমূহৰ মাজৰ স্থান"
+
+#: ../clutter/deprecated/clutter-texture.c:992
msgid "Sync size of actor"
msgstr "অভিনেতাৰ সংমিহলি আকাৰ"
-#: ../clutter/deprecated/clutter-texture.c:995
+#: ../clutter/deprecated/clutter-texture.c:993
msgid "Auto sync size of actor to underlying pixbuf dimensions"
msgstr "নিম্নলিখিত pixbuf পৰিসৰসমূহলে অভিনেতাৰ স্বচালিত সংমহিলি আকাৰ"
-#: ../clutter/deprecated/clutter-texture.c:1002
+#: ../clutter/deprecated/clutter-texture.c:1000
msgid "Disable Slicing"
msgstr "স্লাইচিং অসামৰ্থবান কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1003
+#: ../clutter/deprecated/clutter-texture.c:1001
msgid ""
"Forces the underlying texture to be singular and not made of smaller space "
"saving individual textures"
msgstr ""
-"নিম্নলিখিত গাঁথনিক একক আৰু সৰু স্থান সঞ্চয়ী সূকীয়া গাঁথনিসমূহৰে নিৰ্মিত নহবলে বাধ্য কৰে"
+"নিম্নলিখিত গাঁথনিক একক আৰু সৰু স্থান সঞ্চয়ী সূকীয়া গাঁথনিসমূহৰে নিৰ্মিত নহবলে "
+"বাধ্য কৰে"
-#: ../clutter/deprecated/clutter-texture.c:1012
+#: ../clutter/deprecated/clutter-texture.c:1010
msgid "Tile Waste"
msgstr "টাইল আবৰ্জনা"
-#: ../clutter/deprecated/clutter-texture.c:1013
+#: ../clutter/deprecated/clutter-texture.c:1011
msgid "Maximum waste area of a sliced texture"
msgstr "এটা স্লাইচ কৰা গাঁথনিৰ সৰ্বাধিক আবৰ্জনা স্থান"
-#: ../clutter/deprecated/clutter-texture.c:1021
+#: ../clutter/deprecated/clutter-texture.c:1019
msgid "Horizontal repeat"
msgstr "আনুভূমিক পুনৰাবৃত্তি"
-#: ../clutter/deprecated/clutter-texture.c:1022
+#: ../clutter/deprecated/clutter-texture.c:1020
msgid "Repeat the contents rather than scaling them horizontally"
msgstr "সমলসমূহক আনুভূমিকভাৱে স্কেইল কৰাতকে পুনৰাবৃত্তি কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1029
+#: ../clutter/deprecated/clutter-texture.c:1027
msgid "Vertical repeat"
msgstr "উলম্ব পুনৰাবৃত্তি"
-#: ../clutter/deprecated/clutter-texture.c:1030
+#: ../clutter/deprecated/clutter-texture.c:1028
msgid "Repeat the contents rather than scaling them vertically"
msgstr "সমলসমূহক উলম্বভাৱে স্কেইল কৰাৰ পৰিৱৰ্তে পুনৰাবৃত্তি কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1037
+#: ../clutter/deprecated/clutter-texture.c:1035
msgid "Filter Quality"
msgstr "পৰিস্ৰাৱন গুণ"
-#: ../clutter/deprecated/clutter-texture.c:1038
+#: ../clutter/deprecated/clutter-texture.c:1036
msgid "Rendering quality used when drawing the texture"
msgstr "গাঁথনি আকোতে ব্যৱহৃত ৰেন্ডাৰিং গুণ"
-#: ../clutter/deprecated/clutter-texture.c:1046
+#: ../clutter/deprecated/clutter-texture.c:1044
msgid "Pixel Format"
msgstr "পিক্সেল বিন্যাস"
-#: ../clutter/deprecated/clutter-texture.c:1047
+#: ../clutter/deprecated/clutter-texture.c:1045
msgid "The Cogl pixel format to use"
msgstr "ব্যৱহাৰ কৰিব লগিয়া Cogl পিক্সেল বিন্যাস"
-#: ../clutter/deprecated/clutter-texture.c:1055
-#: ../clutter/wayland/clutter-wayland-surface.c:449
+#: ../clutter/deprecated/clutter-texture.c:1053
+#: ../clutter/wayland/clutter-wayland-surface.c:445
msgid "Cogl Texture"
msgstr "Cogl গাঁথনি"
-#: ../clutter/deprecated/clutter-texture.c:1056
-#: ../clutter/wayland/clutter-wayland-surface.c:450
+#: ../clutter/deprecated/clutter-texture.c:1054
+#: ../clutter/wayland/clutter-wayland-surface.c:446
msgid "The underlying Cogl texture handle used to draw this actor"
msgstr "এই অভিনেতাক আকিবলে ব্যৱহৃত নিম্নলিখিত Cogl গাঁথনি হাতল"
-#: ../clutter/deprecated/clutter-texture.c:1063
+#: ../clutter/deprecated/clutter-texture.c:1061
msgid "Cogl Material"
msgstr "Cogl সামগ্ৰী"
-#: ../clutter/deprecated/clutter-texture.c:1064
+#: ../clutter/deprecated/clutter-texture.c:1062
msgid "The underlying Cogl material handle used to draw this actor"
msgstr "এই অভিনেতাক আকিবলে ব্যৱহৃত নিম্নলিখিত Cogl সামগ্ৰী"
-#: ../clutter/deprecated/clutter-texture.c:1083
+#: ../clutter/deprecated/clutter-texture.c:1081
msgid "The path of the file containing the image data"
msgstr "ছবি তথ্য অন্তৰ্ভুক্ত কৰা ফাইলৰ পথ"
-#: ../clutter/deprecated/clutter-texture.c:1090
+#: ../clutter/deprecated/clutter-texture.c:1088
msgid "Keep Aspect Ratio"
msgstr "দিশৰ অনুপাত ৰাখক"
-#: ../clutter/deprecated/clutter-texture.c:1091
+#: ../clutter/deprecated/clutter-texture.c:1089
msgid ""
"Keep the aspect ratio of the texture when requesting the preferred width or "
"height"
msgstr "পছন্দৰ প্ৰস্থ অথবা উচ্চতা অনুৰোধ কৰোতে গাঁথনিৰ দিশ অনুপাত ৰাখক"
-#: ../clutter/deprecated/clutter-texture.c:1119
+#: ../clutter/deprecated/clutter-texture.c:1117
msgid "Load asynchronously"
msgstr "অসমকালীভাৱে ল'ড কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1120
-msgid "Load files inside a thread to avoid blocking when loading images from disk"
+#: ../clutter/deprecated/clutter-texture.c:1118
+msgid ""
+"Load files inside a thread to avoid blocking when loading images from disk"
msgstr ""
-"ডিস্কৰ পৰা ছবিসমূহ ল'ড কৰি থাকোতে প্ৰতিৰোধ বাধা দিবলে ফাইলসমূহক এটা থ্ৰেডৰ ভিতৰত "
+"ডিস্কৰ পৰা ছবিসমূহ ল'ড কৰি থাকোতে প্ৰতিৰোধ বাধা দিবলে ফাইলসমূহক এটা থ্ৰেডৰ "
+"ভিতৰত "
"ল'ড কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1138
+#: ../clutter/deprecated/clutter-texture.c:1136
msgid "Load data asynchronously"
msgstr "তথ্যক অসমকালীভাৱে ল'ড কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1139
+#: ../clutter/deprecated/clutter-texture.c:1137
msgid ""
"Decode image data files inside a thread to reduce blocking when loading "
"images from disk"
@@ -2567,192 +2656,189 @@ msgstr ""
"ডিস্কৰ পৰা ছবিসমূহ ল'ড কৰি থাকোতে প্ৰতিৰোধ বাধা দিবলে ছবি তথ্য ফাইলসমূহক এটা "
"থ্ৰেডৰ ভিতৰত ডিকোড কৰক"
-#: ../clutter/deprecated/clutter-texture.c:1165
+#: ../clutter/deprecated/clutter-texture.c:1163
msgid "Pick With Alpha"
msgstr "আলফাৰ সৈতে বুটলক"
-#: ../clutter/deprecated/clutter-texture.c:1166
+#: ../clutter/deprecated/clutter-texture.c:1164
msgid "Shape actor with alpha channel when picking"
msgstr "বুটলাৰ সময়ত অভিনেতাক আলফা চেনেলৰ সৈতে আকাৰ দিয়ক"
-#: ../clutter/deprecated/clutter-texture.c:1599
-#: ../clutter/deprecated/clutter-texture.c:1994
-#: ../clutter/deprecated/clutter-texture.c:2090
-#: ../clutter/deprecated/clutter-texture.c:2388
+#: ../clutter/deprecated/clutter-texture.c:1597
+#: ../clutter/deprecated/clutter-texture.c:1992
+#: ../clutter/deprecated/clutter-texture.c:2088
+#: ../clutter/deprecated/clutter-texture.c:2386
#, c-format
msgid "Failed to load the image data"
msgstr "ছবি তথ্য ল'ড কৰিবলে ব্যৰ্থ"
-#: ../clutter/deprecated/clutter-texture.c:1758
+#: ../clutter/deprecated/clutter-texture.c:1756
#, c-format
msgid "YUV textures are not supported"
msgstr "YUV গাঁথনিসমূহ সমৰ্থিত নহয়"
-#: ../clutter/deprecated/clutter-texture.c:1767
+#: ../clutter/deprecated/clutter-texture.c:1765
#, c-format
msgid "YUV2 textues are not supported"
msgstr "YUV2 গাঁথনিসমূহ সমৰ্থিত নহয়"
-#: ../clutter/evdev/clutter-input-device-evdev.c:159
-msgid "sysfs Path"
-msgstr "sysfs পথ"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:160
-msgid "Path of the device in sysfs"
-msgstr "sysfs -ত থকা ডিভাইচৰ পথ"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:175
-msgid "Device Path"
-msgstr "ডিভাইচৰ পথ"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:176
-msgid "Path of the device node"
-msgstr "ডিভাইচ নোডৰ পথ"
-
-#: ../clutter/gdk/clutter-backend-gdk.c:296
+#: ../clutter/gdk/clutter-backend-gdk.c:289
#, c-format
msgid "Could not find a suitable CoglWinsys for a GdkDisplay of type %s"
msgstr "ধৰণ %s এটা GdkDisplay ৰ বাবে এটা যথাযথ CoglWinsys পোৱা নগল"
-#: ../clutter/wayland/clutter-wayland-surface.c:423
+#: ../clutter/wayland/clutter-wayland-surface.c:419
msgid "Surface"
msgstr "পৃষ্ঠ"
-#: ../clutter/wayland/clutter-wayland-surface.c:424
+#: ../clutter/wayland/clutter-wayland-surface.c:420
msgid "The underlying wayland surface"
msgstr "নিম্নৰেখিত wayland পৃষ্ঠ"
-#: ../clutter/wayland/clutter-wayland-surface.c:431
+#: ../clutter/wayland/clutter-wayland-surface.c:427
msgid "Surface width"
msgstr "পৃষ্ঠ প্ৰস্থ"
-#: ../clutter/wayland/clutter-wayland-surface.c:432
+#: ../clutter/wayland/clutter-wayland-surface.c:428
msgid "The width of the underlying wayland surface"
msgstr "নিম্নৰেখিত wayland পৃষ্ঠৰ প্ৰস্থ"
-#: ../clutter/wayland/clutter-wayland-surface.c:440
+#: ../clutter/wayland/clutter-wayland-surface.c:436
msgid "Surface height"
msgstr "পৃষ্ঠ উচ্চতা"
-#: ../clutter/wayland/clutter-wayland-surface.c:441
+#: ../clutter/wayland/clutter-wayland-surface.c:437
msgid "The height of the underlying wayland surface"
msgstr "নিম্নৰেখিত wayland পৃষ্ঠৰ উচ্চতা"
-#: ../clutter/x11/clutter-backend-x11.c:516
+#: ../clutter/x11/clutter-backend-x11.c:488
msgid "X display to use"
msgstr "ব্যৱহাৰ কৰিব লগিয়া X প্ৰদৰ্শন"
-#: ../clutter/x11/clutter-backend-x11.c:522
+#: ../clutter/x11/clutter-backend-x11.c:494
msgid "X screen to use"
msgstr "ব্যৱহাৰ কৰিব লগিয়া X পৰ্দা"
-#: ../clutter/x11/clutter-backend-x11.c:527
+#: ../clutter/x11/clutter-backend-x11.c:499
msgid "Make X calls synchronous"
msgstr "X কলসমূহক সংমিহলি কৰক"
-#: ../clutter/x11/clutter-backend-x11.c:534
-msgid "Enable XInput support"
-msgstr "XInput সমৰ্থন সামৰ্থবান কৰক"
+#: ../clutter/x11/clutter-backend-x11.c:506
+msgid "Disable XInput support"
+msgstr "XInput সমৰ্থন অসামৰ্থবান কৰক"
-#: ../clutter/x11/clutter-keymap-x11.c:317
+#: ../clutter/x11/clutter-keymap-x11.c:458
msgid "The Clutter backend"
msgstr "Clutter বেকএন্ড"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:539
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:534
msgid "Pixmap"
msgstr "পিক্সমেপ"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:540
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:535
msgid "The X11 Pixmap to be bound"
msgstr "বান্ধিবলে X11 পিক্সমেপ"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:548
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:543
msgid "Pixmap width"
msgstr "পিক্সমেপ প্ৰস্থ"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:549
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:544
msgid "The width of the pixmap bound to this texture"
msgstr "এই গাঁথনিলে বান্ধীত পিক্সমেপৰ প্ৰস্থ"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:557
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:552
msgid "Pixmap height"
msgstr "পিক্সমেপৰ উচ্চতা"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:558
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:553
msgid "The height of the pixmap bound to this texture"
msgstr "এই গাঁথনিলে বান্ধীত পিক্সমেপৰ উচ্চতা"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:566
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:561
msgid "Pixmap Depth"
msgstr "পিক্সমেপ গভীৰতা"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:567
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:562
msgid "The depth (in number of bits) of the pixmap bound to this texture"
msgstr "এই গাঁথনিলে বান্ধীত পিক্সমেপৰ গভীৰতা (বিটসমূহৰ সংখ্যাত)"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:575
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:570
msgid "Automatic Updates"
msgstr "স্বচালিত আপডেইটসমূহ"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:576
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:571
msgid "If the texture should be kept in sync with any pixmap changes."
msgstr "গাঁথনিক কোনো পিক্সমেপ পৰিবৰ্তনৰ সৈতে সংমিহলি কৰা হব নে।"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:584
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:579
msgid "Window"
msgstr "উইন্ডো"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:585
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:580
msgid "The X11 Window to be bound"
msgstr "বান্ধীবলে X11 উইন্ডো"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:593
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:588
msgid "Window Redirect Automatic"
msgstr "উইন্ডো পুনৰদিশ স্বচালিতভাৱে"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:594
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:589
msgid "If composite window redirects are set to Automatic (or Manual if false)"
-msgstr "বহু উইন্ডো পুনৰদিশসমূহ স্বচালিতলে সংহতি কৰা হয় নে (অথবা হস্তচালিতলে যদি মিচা)"
+msgstr ""
+"বহু উইন্ডো পুনৰদিশসমূহ স্বচালিতলে সংহতি কৰা হয় নে (অথবা হস্তচালিতলে যদি মিচা)"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:604
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:599
msgid "Window Mapped"
msgstr "উইন্ডো মেপ কৰা হল"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:605
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:600
msgid "If window is mapped"
msgstr "উইন্ডো মেপ কৰা আছে নে"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:614
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:609
msgid "Destroyed"
msgstr "ধ্বংস কৰা হল"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:615
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:610
msgid "If window has been destroyed"
msgstr "উইন্ডো ধ্বংস কৰা হৈছে নে"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:623
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:618
msgid "Window X"
msgstr "উইন্ডো X"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:624
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:619
msgid "X position of window on screen according to X11"
msgstr "X11 -ৰ মতে পৰ্দাত উইন্ডোৰ X অৱস্থান"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:632
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:627
msgid "Window Y"
msgstr "উইন্ডো Y"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:633
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:628
msgid "Y position of window on screen according to X11"
msgstr "X11 -ৰ মতে পৰ্দাত উইন্ডোৰ Y অৱস্থান"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:640
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:635
msgid "Window Override Redirect"
msgstr "উইন্ডো অভাৰৰাইড পুনৰদিশ"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:641
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:636
msgid "If this is an override-redirect window"
msgstr "যদি ই এটা অভাৰৰাইড-পুনৰদিশ উইন্ডো হয়"
+#~ msgid "sysfs Path"
+#~ msgstr "sysfs পথ"
+
+#~ msgid "Path of the device in sysfs"
+#~ msgstr "sysfs -ত থকা ডিভাইচৰ পথ"
+
+#~ msgid "Device Path"
+#~ msgstr "ডিভাইচৰ পথ"
+
+#~ msgid "Path of the device node"
+#~ msgstr "ডিভাইচ নোডৰ পথ"
+
#~ msgid "The layout manager used by the box"
#~ msgstr "বাকচৰ দ্বাৰা ব্যৱহাৰ কৰা বিন্যাস ব্যৱস্থাপক"
diff --git a/po/be.po b/po/be.po
index 082e28698..32dda9bd3 100644
--- a/po/be.po
+++ b/po/be.po
@@ -1,12 +1,13 @@
# Kasia Bondarava , 2012.
+# Ihar Hrachyshka , 2013.
msgid ""
msgstr ""
"Project-Id-Version: clutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=clutter&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2012-08-28 13:46+0000\n"
+"POT-Creation-Date: 2013-08-28 19:59+0000\n"
"PO-Revision-Date: 2012-09-09 15:29+0300\n"
-"Last-Translator: Kasia Bondarava \n"
+"Last-Translator: Ihar Hrachyshka \n"
"Language-Team: Belarusian \n"
"Language: be\n"
"MIME-Version: 1.0\n"
@@ -17,690 +18,690 @@ msgstr ""
"X-Generator: Virtaal 0.7.0\n"
"X-Project-Style: gnome\n"
-#: ../clutter/clutter-actor.c:6121
+#: ../clutter/clutter-actor.c:6205
msgid "X coordinate"
msgstr "X-каардыната"
-#: ../clutter/clutter-actor.c:6122
+#: ../clutter/clutter-actor.c:6206
msgid "X coordinate of the actor"
msgstr "X-каардыната актара"
-#: ../clutter/clutter-actor.c:6140
+#: ../clutter/clutter-actor.c:6224
msgid "Y coordinate"
msgstr "Y-каардыната"
-#: ../clutter/clutter-actor.c:6141
+#: ../clutter/clutter-actor.c:6225
msgid "Y coordinate of the actor"
msgstr "Y-каардыната актара"
-#: ../clutter/clutter-actor.c:6163
+#: ../clutter/clutter-actor.c:6247
msgid "Position"
msgstr "Пазіцыя"
-#: ../clutter/clutter-actor.c:6164
+#: ../clutter/clutter-actor.c:6248
msgid "The position of the origin of the actor"
msgstr "Пазіцыя пачатку актара"
-#: ../clutter/clutter-actor.c:6181 ../clutter/clutter-canvas.c:215
-#: ../clutter/clutter-grid-layout.c:1238
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:481
+#: ../clutter/clutter-actor.c:6265 ../clutter/clutter-canvas.c:224
+#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:474
msgid "Width"
msgstr "Шырыня"
-#: ../clutter/clutter-actor.c:6182
+#: ../clutter/clutter-actor.c:6266
msgid "Width of the actor"
msgstr "Шырыня актара"
-#: ../clutter/clutter-actor.c:6200 ../clutter/clutter-canvas.c:231
-#: ../clutter/clutter-grid-layout.c:1245
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:497
+#: ../clutter/clutter-actor.c:6284 ../clutter/clutter-canvas.c:240
+#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:490
msgid "Height"
msgstr "Вышыня"
-#: ../clutter/clutter-actor.c:6201
+#: ../clutter/clutter-actor.c:6285
msgid "Height of the actor"
msgstr "Вышыня актара"
-#: ../clutter/clutter-actor.c:6222
+#: ../clutter/clutter-actor.c:6306
msgid "Size"
msgstr "Памер"
-#: ../clutter/clutter-actor.c:6223
+#: ../clutter/clutter-actor.c:6307
msgid "The size of the actor"
msgstr "Памер актара"
-#: ../clutter/clutter-actor.c:6241
+#: ../clutter/clutter-actor.c:6325
msgid "Fixed X"
msgstr "Сталая X"
-#: ../clutter/clutter-actor.c:6242
+#: ../clutter/clutter-actor.c:6326
msgid "Forced X position of the actor"
msgstr "Сталая X-пазіцыя актара"
-#: ../clutter/clutter-actor.c:6259
+#: ../clutter/clutter-actor.c:6343
msgid "Fixed Y"
msgstr "Сталая Y"
-#: ../clutter/clutter-actor.c:6260
+#: ../clutter/clutter-actor.c:6344
msgid "Forced Y position of the actor"
msgstr "Сталая Y-пазіцыя актара"
-#: ../clutter/clutter-actor.c:6275
+#: ../clutter/clutter-actor.c:6359
msgid "Fixed position set"
msgstr "Выбрана сталая пазіцыя"
-#: ../clutter/clutter-actor.c:6276
+#: ../clutter/clutter-actor.c:6360
msgid "Whether to use fixed positioning for the actor"
msgstr "Ці ўжываць сталую пазіцыю для гэтага актара"
-#: ../clutter/clutter-actor.c:6294
+#: ../clutter/clutter-actor.c:6378
msgid "Min Width"
msgstr "Мінімальная шырыня"
-#: ../clutter/clutter-actor.c:6295
+#: ../clutter/clutter-actor.c:6379
msgid "Forced minimum width request for the actor"
msgstr "Сталая мінімальная шырыня актара"
-#: ../clutter/clutter-actor.c:6313
+#: ../clutter/clutter-actor.c:6397
msgid "Min Height"
msgstr "Мінімальная вышыня"
-#: ../clutter/clutter-actor.c:6314
+#: ../clutter/clutter-actor.c:6398
msgid "Forced minimum height request for the actor"
msgstr "Сталая мінімальная вышыня актара"
-#: ../clutter/clutter-actor.c:6332
+#: ../clutter/clutter-actor.c:6416
msgid "Natural Width"
msgstr "Натуральная шырыня"
-#: ../clutter/clutter-actor.c:6333
+#: ../clutter/clutter-actor.c:6417
msgid "Forced natural width request for the actor"
msgstr "Сталая натуральная шырыня актара"
-#: ../clutter/clutter-actor.c:6351
+#: ../clutter/clutter-actor.c:6435
msgid "Natural Height"
msgstr "Натуральная вышыня"
-#: ../clutter/clutter-actor.c:6352
+#: ../clutter/clutter-actor.c:6436
msgid "Forced natural height request for the actor"
msgstr "Сталая натуральная вышыня актара"
-#: ../clutter/clutter-actor.c:6367
+#: ../clutter/clutter-actor.c:6451
msgid "Minimum width set"
msgstr "Выбрана мінімальная шырыня"
-#: ../clutter/clutter-actor.c:6368
+#: ../clutter/clutter-actor.c:6452
msgid "Whether to use the min-width property"
msgstr "Ці ўжываць уласцівасць мінімальнай шырыні"
-#: ../clutter/clutter-actor.c:6382
+#: ../clutter/clutter-actor.c:6466
msgid "Minimum height set"
msgstr "Выбрана мінімальная вышыня"
-#: ../clutter/clutter-actor.c:6383
+#: ../clutter/clutter-actor.c:6467
msgid "Whether to use the min-height property"
msgstr "Ці ўжываць уласцівасць мінімальнай вышыні"
-#: ../clutter/clutter-actor.c:6397
+#: ../clutter/clutter-actor.c:6481
msgid "Natural width set"
msgstr "Выбрана натуральная шырыня"
-#: ../clutter/clutter-actor.c:6398
+#: ../clutter/clutter-actor.c:6482
msgid "Whether to use the natural-width property"
msgstr "Ці ўжываць уласцівасць натуральнай шырыні"
-#: ../clutter/clutter-actor.c:6412
+#: ../clutter/clutter-actor.c:6496
msgid "Natural height set"
msgstr "Выбрана натуральная вышыня"
-#: ../clutter/clutter-actor.c:6413
+#: ../clutter/clutter-actor.c:6497
msgid "Whether to use the natural-height property"
msgstr "Ці ўжываць уласцівасць натуральнай вышыні"
-#: ../clutter/clutter-actor.c:6429
+#: ../clutter/clutter-actor.c:6513
msgid "Allocation"
msgstr "Размеркаванне"
-#: ../clutter/clutter-actor.c:6430
+#: ../clutter/clutter-actor.c:6514
msgid "The actor's allocation"
msgstr "Размеркаванне актара"
-#: ../clutter/clutter-actor.c:6487
+#: ../clutter/clutter-actor.c:6571
msgid "Request Mode"
msgstr "Рэжым запыту"
-#: ../clutter/clutter-actor.c:6488
+#: ../clutter/clutter-actor.c:6572
msgid "The actor's request mode"
msgstr "Рэжым запыту актара"
-#: ../clutter/clutter-actor.c:6512
+#: ../clutter/clutter-actor.c:6596
msgid "Depth"
msgstr "Глыбіня"
-#: ../clutter/clutter-actor.c:6513
+#: ../clutter/clutter-actor.c:6597
msgid "Position on the Z axis"
msgstr "Пазіцыя на Z-восі"
-#: ../clutter/clutter-actor.c:6540
+#: ../clutter/clutter-actor.c:6624
msgid "Z Position"
msgstr "Z-пазіцыя"
-#: ../clutter/clutter-actor.c:6541
+#: ../clutter/clutter-actor.c:6625
msgid "The actor's position on the Z axis"
msgstr "Пазіцыя актара на Z-восі"
-#: ../clutter/clutter-actor.c:6558
+#: ../clutter/clutter-actor.c:6642
msgid "Opacity"
msgstr "Непразрыстасць"
-#: ../clutter/clutter-actor.c:6559
+#: ../clutter/clutter-actor.c:6643
msgid "Opacity of an actor"
msgstr "Непразрыстасць актара"
-#: ../clutter/clutter-actor.c:6579
+#: ../clutter/clutter-actor.c:6663
msgid "Offscreen redirect"
msgstr "Перанакіраванне па-за экранам"
-#: ../clutter/clutter-actor.c:6580
+#: ../clutter/clutter-actor.c:6664
msgid "Flags controlling when to flatten the actor into a single image"
msgstr "Сцяжкі, якія кантралююць перавод актара ў адзіночную выяву"
-#: ../clutter/clutter-actor.c:6594
+#: ../clutter/clutter-actor.c:6678
msgid "Visible"
msgstr "Бачны"
-#: ../clutter/clutter-actor.c:6595
+#: ../clutter/clutter-actor.c:6679
msgid "Whether the actor is visible or not"
msgstr "Ці бачны актар"
-#: ../clutter/clutter-actor.c:6609
+#: ../clutter/clutter-actor.c:6693
msgid "Mapped"
msgstr "Адлюстраваны"
-#: ../clutter/clutter-actor.c:6610
+#: ../clutter/clutter-actor.c:6694
msgid "Whether the actor will be painted"
msgstr "Ці актар будзе пафарбаваны"
-#: ../clutter/clutter-actor.c:6623
+#: ../clutter/clutter-actor.c:6707
msgid "Realized"
msgstr "Рэалізаваны"
-#: ../clutter/clutter-actor.c:6624
+#: ../clutter/clutter-actor.c:6708
msgid "Whether the actor has been realized"
msgstr "Ці актар быў рэалізаваны"
-#: ../clutter/clutter-actor.c:6639
+#: ../clutter/clutter-actor.c:6723
msgid "Reactive"
msgstr "Ці рэагуе"
-#: ../clutter/clutter-actor.c:6640
+#: ../clutter/clutter-actor.c:6724
msgid "Whether the actor is reactive to events"
msgstr "Ці рэагуе актар на падзеі"
-#: ../clutter/clutter-actor.c:6651
+#: ../clutter/clutter-actor.c:6735
msgid "Has Clip"
msgstr "Мае заціск"
-#: ../clutter/clutter-actor.c:6652
+#: ../clutter/clutter-actor.c:6736
msgid "Whether the actor has a clip set"
msgstr "Ці настаўлены заціск актара"
-#: ../clutter/clutter-actor.c:6665
+#: ../clutter/clutter-actor.c:6749
msgid "Clip"
msgstr "Заціск"
-#: ../clutter/clutter-actor.c:6666
+#: ../clutter/clutter-actor.c:6750
msgid "The clip region for the actor"
msgstr "Абшар заціску актара"
-#: ../clutter/clutter-actor.c:6685
+#: ../clutter/clutter-actor.c:6769
msgid "Clip Rectangle"
msgstr "Прамавугольнік заціску"
-#: ../clutter/clutter-actor.c:6686
+#: ../clutter/clutter-actor.c:6770
msgid "The visible region of the actor"
msgstr "Бачны абшар актара"
-#: ../clutter/clutter-actor.c:6700 ../clutter/clutter-actor-meta.c:207
+#: ../clutter/clutter-actor.c:6784 ../clutter/clutter-actor-meta.c:205
#: ../clutter/clutter-binding-pool.c:319 ../clutter/clutter-input-device.c:258
msgid "Name"
msgstr "Назва"
-#: ../clutter/clutter-actor.c:6701
+#: ../clutter/clutter-actor.c:6785
msgid "Name of the actor"
msgstr "Назва актара"
-#: ../clutter/clutter-actor.c:6722
+#: ../clutter/clutter-actor.c:6806
msgid "Pivot Point"
msgstr "Апорны пункт"
-#: ../clutter/clutter-actor.c:6723
+#: ../clutter/clutter-actor.c:6807
msgid "The point around which the scaling and rotation occur"
msgstr "Пункт, адносна якога ажыццяўляецца маштабаванне і кручэнне"
-#: ../clutter/clutter-actor.c:6741
+#: ../clutter/clutter-actor.c:6825
msgid "Pivot Point Z"
msgstr "Апорны Z-пункт"
-#: ../clutter/clutter-actor.c:6742
+#: ../clutter/clutter-actor.c:6826
msgid "Z component of the pivot point"
msgstr "Z-складнік апорнага пункта"
-#: ../clutter/clutter-actor.c:6760
+#: ../clutter/clutter-actor.c:6844
msgid "Scale X"
msgstr "Маштаб па X-восі"
-#: ../clutter/clutter-actor.c:6761
+#: ../clutter/clutter-actor.c:6845
msgid "Scale factor on the X axis"
msgstr "Маштабны каэфіцыент па X-восі"
-#: ../clutter/clutter-actor.c:6779
+#: ../clutter/clutter-actor.c:6863
msgid "Scale Y"
msgstr "Маштаб па Y-восі"
-#: ../clutter/clutter-actor.c:6780
+#: ../clutter/clutter-actor.c:6864
msgid "Scale factor on the Y axis"
msgstr "Маштабны каэфіцыент па Y-восі"
-#: ../clutter/clutter-actor.c:6798
+#: ../clutter/clutter-actor.c:6882
msgid "Scale Z"
msgstr "Маштаб па Z-восі"
-#: ../clutter/clutter-actor.c:6799
+#: ../clutter/clutter-actor.c:6883
msgid "Scale factor on the Z axis"
msgstr "Маштабны каэфіцыент па Z-восі"
-#: ../clutter/clutter-actor.c:6817
+#: ../clutter/clutter-actor.c:6901
msgid "Scale Center X"
msgstr "Цэнтр маштабавання па X-восі"
-#: ../clutter/clutter-actor.c:6818
+#: ../clutter/clutter-actor.c:6902
msgid "Horizontal scale center"
msgstr "Цэнтр маштабавання па гарызанталі"
-#: ../clutter/clutter-actor.c:6836
+#: ../clutter/clutter-actor.c:6920
msgid "Scale Center Y"
msgstr "Цэнтр маштабавання па Y-восі"
-#: ../clutter/clutter-actor.c:6837
+#: ../clutter/clutter-actor.c:6921
msgid "Vertical scale center"
msgstr "Цэнтр маштабавання па вертыкалі"
-#: ../clutter/clutter-actor.c:6855
+#: ../clutter/clutter-actor.c:6939
msgid "Scale Gravity"
msgstr "Прыцягненне маштабавання"
-#: ../clutter/clutter-actor.c:6856
+#: ../clutter/clutter-actor.c:6940
msgid "The center of scaling"
msgstr "Цэнтр маштабавання"
-#: ../clutter/clutter-actor.c:6874
+#: ../clutter/clutter-actor.c:6958
msgid "Rotation Angle X"
msgstr "Вугал X-кручэння"
-#: ../clutter/clutter-actor.c:6875
+#: ../clutter/clutter-actor.c:6959
msgid "The rotation angle on the X axis"
msgstr "Вугал кручэння па X-восі"
-#: ../clutter/clutter-actor.c:6893
+#: ../clutter/clutter-actor.c:6977
msgid "Rotation Angle Y"
msgstr "Вугал Y-кручэння"
-#: ../clutter/clutter-actor.c:6894
+#: ../clutter/clutter-actor.c:6978
msgid "The rotation angle on the Y axis"
msgstr "Вугал кручэння па Y-восі"
-#: ../clutter/clutter-actor.c:6912
+#: ../clutter/clutter-actor.c:6996
msgid "Rotation Angle Z"
msgstr "Вугал Z-кручэння"
-#: ../clutter/clutter-actor.c:6913
+#: ../clutter/clutter-actor.c:6997
msgid "The rotation angle on the Z axis"
msgstr "Вугал кручэння па Z-восі"
-#: ../clutter/clutter-actor.c:6931
+#: ../clutter/clutter-actor.c:7015
msgid "Rotation Center X"
msgstr "Цэнтр X-кручэння"
-#: ../clutter/clutter-actor.c:6932
+#: ../clutter/clutter-actor.c:7016
msgid "The rotation center on the X axis"
msgstr "Цэнтр кручэння па X-восі"
-#: ../clutter/clutter-actor.c:6949
+#: ../clutter/clutter-actor.c:7033
msgid "Rotation Center Y"
msgstr "Цэнтр Y-кручэння"
-#: ../clutter/clutter-actor.c:6950
+#: ../clutter/clutter-actor.c:7034
msgid "The rotation center on the Y axis"
msgstr "Цэнтр кручэння па Y-восі"
-#: ../clutter/clutter-actor.c:6967
+#: ../clutter/clutter-actor.c:7051
msgid "Rotation Center Z"
msgstr "Цэнтр Z-кручэння"
-#: ../clutter/clutter-actor.c:6968
+#: ../clutter/clutter-actor.c:7052
msgid "The rotation center on the Z axis"
msgstr "Цэнтр кручэння па Z-восі"
-#: ../clutter/clutter-actor.c:6985
+#: ../clutter/clutter-actor.c:7069
msgid "Rotation Center Z Gravity"
msgstr "Прыцягненне цэнтра Z-кручэння"
-#: ../clutter/clutter-actor.c:6986
+#: ../clutter/clutter-actor.c:7070
msgid "Center point for rotation around the Z axis"
msgstr "Цэнтральны пункт кручэння вакол Z-восі"
-#: ../clutter/clutter-actor.c:7014
+#: ../clutter/clutter-actor.c:7098
msgid "Anchor X"
msgstr "X-якар"
-#: ../clutter/clutter-actor.c:7015
+#: ../clutter/clutter-actor.c:7099
msgid "X coordinate of the anchor point"
msgstr "X-каардыната пункта якара"
-#: ../clutter/clutter-actor.c:7043
+#: ../clutter/clutter-actor.c:7127
msgid "Anchor Y"
msgstr "Y-якар"
-#: ../clutter/clutter-actor.c:7044
+#: ../clutter/clutter-actor.c:7128
msgid "Y coordinate of the anchor point"
msgstr "Y-каардыната пункта якара"
-#: ../clutter/clutter-actor.c:7071
+#: ../clutter/clutter-actor.c:7155
msgid "Anchor Gravity"
msgstr "Прыцягненне якара"
-#: ../clutter/clutter-actor.c:7072
+#: ../clutter/clutter-actor.c:7156
msgid "The anchor point as a ClutterGravity"
msgstr "Пункт якара як ClutterGravity"
-#: ../clutter/clutter-actor.c:7091
+#: ../clutter/clutter-actor.c:7175
msgid "Translation X"
msgstr "X-пераўтварэнне"
-#: ../clutter/clutter-actor.c:7092
+#: ../clutter/clutter-actor.c:7176
msgid "Translation along the X axis"
msgstr "Пераўтварэнне паўз X-вось"
-#: ../clutter/clutter-actor.c:7111
+#: ../clutter/clutter-actor.c:7195
msgid "Translation Y"
msgstr "Y-пераўтварэнне"
-#: ../clutter/clutter-actor.c:7112
+#: ../clutter/clutter-actor.c:7196
msgid "Translation along the Y axis"
msgstr "Пераўтварэнне паўз Y-вось"
-#: ../clutter/clutter-actor.c:7131
+#: ../clutter/clutter-actor.c:7215
msgid "Translation Z"
msgstr "Z-пераўтварэнне"
-#: ../clutter/clutter-actor.c:7132
+#: ../clutter/clutter-actor.c:7216
msgid "Translation along the Z axis"
msgstr "Пераўтварэнне паўз Z-вось"
-#: ../clutter/clutter-actor.c:7160
+#: ../clutter/clutter-actor.c:7246
msgid "Transform"
msgstr "Трансфармацыя"
-#: ../clutter/clutter-actor.c:7161
+#: ../clutter/clutter-actor.c:7247
msgid "Transformation matrix"
msgstr "Матрыца трансфармацыі"
-#: ../clutter/clutter-actor.c:7175
+#: ../clutter/clutter-actor.c:7262
msgid "Transform Set"
msgstr "Набор транфармацый"
-#: ../clutter/clutter-actor.c:7176
+#: ../clutter/clutter-actor.c:7263
msgid "Whether the transform property is set"
msgstr "Ці настаўлена ўласцівасць transform"
-#: ../clutter/clutter-actor.c:7195
+#: ../clutter/clutter-actor.c:7284
msgid "Child Transform"
msgstr "Трансфармацыя нашчадкаў"
-#: ../clutter/clutter-actor.c:7196
+#: ../clutter/clutter-actor.c:7285
msgid "Children transformation matrix"
msgstr "Матрыца трансфармацыі нашчадкаў"
-#: ../clutter/clutter-actor.c:7210
+#: ../clutter/clutter-actor.c:7300
msgid "Child Transform Set"
msgstr "Набор транфармацый нашчадкаў"
-#: ../clutter/clutter-actor.c:7211
+#: ../clutter/clutter-actor.c:7301
msgid "Whether the child-transform property is set"
msgstr "Ці настаўлена ўласцівасць child-transform"
-#: ../clutter/clutter-actor.c:7228
+#: ../clutter/clutter-actor.c:7318
msgid "Show on set parent"
msgstr "Паказаць на настаўленым бацьку"
-#: ../clutter/clutter-actor.c:7229
+#: ../clutter/clutter-actor.c:7319
msgid "Whether the actor is shown when parented"
msgstr "Ці актар бачны, калі ў яго ёсць бацька"
-#: ../clutter/clutter-actor.c:7246
+#: ../clutter/clutter-actor.c:7336
msgid "Clip to Allocation"
msgstr "Заціск для размеркавання"
-#: ../clutter/clutter-actor.c:7247
+#: ../clutter/clutter-actor.c:7337
msgid "Sets the clip region to track the actor's allocation"
msgstr "Настаўляе абшар заціску для адсочвання размеркавання актара"
-#: ../clutter/clutter-actor.c:7260
+#: ../clutter/clutter-actor.c:7350
msgid "Text Direction"
msgstr "Кірунак тэксту"
-#: ../clutter/clutter-actor.c:7261
+#: ../clutter/clutter-actor.c:7351
msgid "Direction of the text"
msgstr "Кірунак тэксту"
-#: ../clutter/clutter-actor.c:7276
+#: ../clutter/clutter-actor.c:7366
msgid "Has Pointer"
msgstr "Мае паказальнік"
-#: ../clutter/clutter-actor.c:7277
+#: ../clutter/clutter-actor.c:7367
msgid "Whether the actor contains the pointer of an input device"
msgstr "Ці актар утрымлівае паказальнік уводнага прыстасавання"
-#: ../clutter/clutter-actor.c:7290
+#: ../clutter/clutter-actor.c:7380
msgid "Actions"
msgstr "Дзеянні"
-#: ../clutter/clutter-actor.c:7291
+#: ../clutter/clutter-actor.c:7381
msgid "Adds an action to the actor"
msgstr "Дадае дзеянне для актара"
-#: ../clutter/clutter-actor.c:7304
+#: ../clutter/clutter-actor.c:7394
msgid "Constraints"
msgstr "Абмежаванні"
-#: ../clutter/clutter-actor.c:7305
+#: ../clutter/clutter-actor.c:7395
msgid "Adds a constraint to the actor"
msgstr "Дадае абмежаванне для актара"
-#: ../clutter/clutter-actor.c:7318
+#: ../clutter/clutter-actor.c:7408
msgid "Effect"
msgstr "Эфект"
-#: ../clutter/clutter-actor.c:7319
+#: ../clutter/clutter-actor.c:7409
msgid "Add an effect to be applied on the actor"
msgstr "Дадае эфект для актара"
-#: ../clutter/clutter-actor.c:7333
+#: ../clutter/clutter-actor.c:7423
msgid "Layout Manager"
msgstr "Кіраўнік размяшчэння"
-#: ../clutter/clutter-actor.c:7334
+#: ../clutter/clutter-actor.c:7424
msgid "The object controlling the layout of an actor's children"
msgstr "Аб'ект, які кіруе размяшчэннем нашчадкаў актара"
-#: ../clutter/clutter-actor.c:7348
+#: ../clutter/clutter-actor.c:7438
msgid "X Expand"
msgstr "Разгарнуць па X-восі"
-#: ../clutter/clutter-actor.c:7349
+#: ../clutter/clutter-actor.c:7439
msgid "Whether extra horizontal space should be assigned to the actor"
msgstr "Ці трэба прызначыць актару дадатковы абшар па гарызанталі"
-#: ../clutter/clutter-actor.c:7364
+#: ../clutter/clutter-actor.c:7454
msgid "Y Expand"
msgstr "Разгарнуць па Y-восі"
-#: ../clutter/clutter-actor.c:7365
+#: ../clutter/clutter-actor.c:7455
msgid "Whether extra vertical space should be assigned to the actor"
msgstr "Ці трэба прызначыць актару дадатковы абшар па вертыкалі"
-#: ../clutter/clutter-actor.c:7381
+#: ../clutter/clutter-actor.c:7471
msgid "X Alignment"
msgstr "X-раўнаванне"
-#: ../clutter/clutter-actor.c:7382
+#: ../clutter/clutter-actor.c:7472
msgid "The alignment of the actor on the X axis within its allocation"
msgstr "Раўнаванне актара па X-восі ўнутры яго размеркавання"
-#: ../clutter/clutter-actor.c:7397
+#: ../clutter/clutter-actor.c:7487
msgid "Y Alignment"
msgstr "Y-раўнаванне"
-#: ../clutter/clutter-actor.c:7398
+#: ../clutter/clutter-actor.c:7488
msgid "The alignment of the actor on the Y axis within its allocation"
msgstr "Раўнаванне актара па Y-восі ўнутры яго размеркавання"
-#: ../clutter/clutter-actor.c:7417
+#: ../clutter/clutter-actor.c:7507
msgid "Margin Top"
msgstr "Верхняе поле"
-#: ../clutter/clutter-actor.c:7418
+#: ../clutter/clutter-actor.c:7508
msgid "Extra space at the top"
msgstr "Дадатковая прастора ўверсе"
-#: ../clutter/clutter-actor.c:7439
+#: ../clutter/clutter-actor.c:7529
msgid "Margin Bottom"
msgstr "Ніжняе поле"
-#: ../clutter/clutter-actor.c:7440
+#: ../clutter/clutter-actor.c:7530
msgid "Extra space at the bottom"
msgstr "Дадатковая прастора ўнізе"
-#: ../clutter/clutter-actor.c:7461
+#: ../clutter/clutter-actor.c:7551
msgid "Margin Left"
msgstr "Левае поле"
-#: ../clutter/clutter-actor.c:7462
+#: ../clutter/clutter-actor.c:7552
msgid "Extra space at the left"
msgstr "Дадатковая прастора злева"
-#: ../clutter/clutter-actor.c:7483
+#: ../clutter/clutter-actor.c:7573
msgid "Margin Right"
msgstr "Правае поле"
-#: ../clutter/clutter-actor.c:7484
+#: ../clutter/clutter-actor.c:7574
msgid "Extra space at the right"
msgstr "Дадатковая прастора справа"
-#: ../clutter/clutter-actor.c:7500
+#: ../clutter/clutter-actor.c:7590
msgid "Background Color Set"
msgstr "Фонавы колер"
-#: ../clutter/clutter-actor.c:7501 ../clutter/deprecated/clutter-box.c:275
+#: ../clutter/clutter-actor.c:7591 ../clutter/deprecated/clutter-box.c:271
msgid "Whether the background color is set"
msgstr "Ці настаўлены фонавы колер"
-#: ../clutter/clutter-actor.c:7517
+#: ../clutter/clutter-actor.c:7607
msgid "Background color"
msgstr "Фонавы колер"
-#: ../clutter/clutter-actor.c:7518
+#: ../clutter/clutter-actor.c:7608
msgid "The actor's background color"
msgstr "Фонавы колер актара"
-#: ../clutter/clutter-actor.c:7533
+#: ../clutter/clutter-actor.c:7623
msgid "First Child"
msgstr "Першы нашчадак"
-#: ../clutter/clutter-actor.c:7534
+#: ../clutter/clutter-actor.c:7624
msgid "The actor's first child"
msgstr "Першы нашчадак актара"
-#: ../clutter/clutter-actor.c:7547
+#: ../clutter/clutter-actor.c:7637
msgid "Last Child"
msgstr "Апошні нашчадак"
-#: ../clutter/clutter-actor.c:7548
+#: ../clutter/clutter-actor.c:7638
msgid "The actor's last child"
msgstr "Апошні нашчадак актара"
-#: ../clutter/clutter-actor.c:7562
+#: ../clutter/clutter-actor.c:7652
msgid "Content"
msgstr "Змесціва"
-#: ../clutter/clutter-actor.c:7563
+#: ../clutter/clutter-actor.c:7653
msgid "Delegate object for painting the actor's content"
msgstr "Аб'ект-дэлегат для малявання змесціва актара"
-#: ../clutter/clutter-actor.c:7588
+#: ../clutter/clutter-actor.c:7678
msgid "Content Gravity"
msgstr "Прыцягненне змесціва"
-#: ../clutter/clutter-actor.c:7589
+#: ../clutter/clutter-actor.c:7679
msgid "Alignment of the actor's content"
msgstr "Раўнаванне змесціва актара"
-#: ../clutter/clutter-actor.c:7609
+#: ../clutter/clutter-actor.c:7699
msgid "Content Box"
msgstr "Рамка са змесцівам"
-#: ../clutter/clutter-actor.c:7610
+#: ../clutter/clutter-actor.c:7700
msgid "The bounding box of the actor's content"
msgstr "Рамка, у якой знаходзіцца змесціва актара"
-#: ../clutter/clutter-actor.c:7618
+#: ../clutter/clutter-actor.c:7708
msgid "Minification Filter"
msgstr "Памяншальны фільтр"
-#: ../clutter/clutter-actor.c:7619
+#: ../clutter/clutter-actor.c:7709
msgid "The filter used when reducing the size of the content"
msgstr "Фільтр для памяншэння памеру змесціва"
-#: ../clutter/clutter-actor.c:7626
+#: ../clutter/clutter-actor.c:7716
msgid "Magnification Filter"
msgstr "Павелічальны фільтр"
-#: ../clutter/clutter-actor.c:7627
+#: ../clutter/clutter-actor.c:7717
msgid "The filter used when increasing the size of the content"
msgstr "Фільтр для павелічэння памеру змесціва"
-#: ../clutter/clutter-actor.c:7641
+#: ../clutter/clutter-actor.c:7731
msgid "Content Repeat"
msgstr "Паўтор змесціва"
-#: ../clutter/clutter-actor.c:7642
+#: ../clutter/clutter-actor.c:7732
msgid "The repeat policy for the actor's content"
msgstr "Правілы паўтору змесціва актара"
-#: ../clutter/clutter-actor-meta.c:193 ../clutter/clutter-child-meta.c:142
+#: ../clutter/clutter-actor-meta.c:191 ../clutter/clutter-child-meta.c:142
msgid "Actor"
msgstr "Актар"
-#: ../clutter/clutter-actor-meta.c:194
+#: ../clutter/clutter-actor-meta.c:192
msgid "The actor attached to the meta"
msgstr "Актар, прычэплены да метааб'екта"
-#: ../clutter/clutter-actor-meta.c:208
+#: ../clutter/clutter-actor-meta.c:206
msgid "The name of the meta"
msgstr "Назва метааб'екта"
-#: ../clutter/clutter-actor-meta.c:221 ../clutter/clutter-input-device.c:337
-#: ../clutter/deprecated/clutter-shader.c:313
+#: ../clutter/clutter-actor-meta.c:219 ../clutter/clutter-input-device.c:337
+#: ../clutter/deprecated/clutter-shader.c:309
msgid "Enabled"
msgstr "Уключаны"
-#: ../clutter/clutter-actor-meta.c:222
+#: ../clutter/clutter-actor-meta.c:220
msgid "Whether the meta is enabled"
msgstr "Ці метааб'ект уключаны"
#: ../clutter/clutter-align-constraint.c:279
-#: ../clutter/clutter-bind-constraint.c:358 ../clutter/clutter-clone.c:345
+#: ../clutter/clutter-bind-constraint.c:358 ../clutter/clutter-clone.c:341
#: ../clutter/clutter-snap-constraint.c:321
msgid "Source"
msgstr "Крыніца"
@@ -726,11 +727,11 @@ msgstr "Множнік"
msgid "The alignment factor, between 0.0 and 1.0"
msgstr "Множнік раўнавання, ад 0.0 да 1.0"
-#: ../clutter/clutter-backend.c:379
+#: ../clutter/clutter-backend.c:376
msgid "Unable to initialize the Clutter backend"
msgstr "Не ўдалося ініцыяваць праграмны драйвер Clutter"
-#: ../clutter/clutter-backend.c:453
+#: ../clutter/clutter-backend.c:450
#, c-format
msgid "The backend of type '%s' does not support creating multiple stages"
msgstr "Праграмны драйвер тыпу \"%s\" не падтрымлівае стварэнне некалькіх сцэн"
@@ -761,49 +762,49 @@ msgstr "Зрух у пікселах для прывязкі"
msgid "The unique name of the binding pool"
msgstr "Унікальная назва збору прывязак"
-#: ../clutter/clutter-bin-layout.c:240 ../clutter/clutter-bin-layout.c:649
-#: ../clutter/clutter-box-layout.c:390 ../clutter/clutter-table-layout.c:610
+#: ../clutter/clutter-bin-layout.c:238 ../clutter/clutter-bin-layout.c:651
+#: ../clutter/clutter-box-layout.c:388 ../clutter/clutter-table-layout.c:604
msgid "Horizontal Alignment"
msgstr "Гарызантальнае раўнаванне"
-#: ../clutter/clutter-bin-layout.c:241
+#: ../clutter/clutter-bin-layout.c:239
msgid "Horizontal alignment for the actor inside the layout manager"
msgstr "Гарызантальнае раўнаванне для актара ўнутры кіраўніка размяшчэння"
-#: ../clutter/clutter-bin-layout.c:249 ../clutter/clutter-bin-layout.c:669
-#: ../clutter/clutter-box-layout.c:399 ../clutter/clutter-table-layout.c:625
+#: ../clutter/clutter-bin-layout.c:247 ../clutter/clutter-bin-layout.c:671
+#: ../clutter/clutter-box-layout.c:397 ../clutter/clutter-table-layout.c:619
msgid "Vertical Alignment"
msgstr "Вертыкальнае раўнаванне"
-#: ../clutter/clutter-bin-layout.c:250
+#: ../clutter/clutter-bin-layout.c:248
msgid "Vertical alignment for the actor inside the layout manager"
msgstr "Вертыкальнае раўнаванне для актара ўнутры кіраўніка размяшчэння"
-#: ../clutter/clutter-bin-layout.c:650
+#: ../clutter/clutter-bin-layout.c:652
msgid "Default horizontal alignment for the actors inside the layout manager"
msgstr ""
"Прадвызначанае гарызантальнае раўнаванне для актараў унутры кіраўніка "
"размяшчэння"
-#: ../clutter/clutter-bin-layout.c:670
+#: ../clutter/clutter-bin-layout.c:672
msgid "Default vertical alignment for the actors inside the layout manager"
msgstr ""
"Прадвызначанае вертыкальнае раўнаванне для актараў унутры кіраўніка "
"размяшчэння"
-#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/clutter-box-layout.c:363
msgid "Expand"
msgstr "Разгарнуць"
-#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/clutter-box-layout.c:364
msgid "Allocate extra space for the child"
msgstr "Выдзеліць дадатковую прастору для нашчадка"
-#: ../clutter/clutter-box-layout.c:372 ../clutter/clutter-table-layout.c:589
+#: ../clutter/clutter-box-layout.c:370 ../clutter/clutter-table-layout.c:583
msgid "Horizontal Fill"
msgstr "Гарызантальнае запаўненне"
-#: ../clutter/clutter-box-layout.c:373 ../clutter/clutter-table-layout.c:590
+#: ../clutter/clutter-box-layout.c:371 ../clutter/clutter-table-layout.c:584
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the horizontal axis"
@@ -811,11 +812,11 @@ msgstr ""
"Ці нашчадак мусіць атрымаць прыярытэт, калі кантэйнер змяшчаецца ў пустой "
"прасторы па гарызанталі"
-#: ../clutter/clutter-box-layout.c:381 ../clutter/clutter-table-layout.c:596
+#: ../clutter/clutter-box-layout.c:379 ../clutter/clutter-table-layout.c:590
msgid "Vertical Fill"
msgstr "Вертыкальнае запаўненне"
-#: ../clutter/clutter-box-layout.c:382 ../clutter/clutter-table-layout.c:597
+#: ../clutter/clutter-box-layout.c:380 ../clutter/clutter-table-layout.c:591
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the vertical axis"
@@ -823,104 +824,104 @@ msgstr ""
"Ці нашчадак мусіць атрымаць прыярытэт, калі кантэйнер змяшчаецца ў пустой "
"прасторы па вертыкалі"
-#: ../clutter/clutter-box-layout.c:391 ../clutter/clutter-table-layout.c:611
+#: ../clutter/clutter-box-layout.c:389 ../clutter/clutter-table-layout.c:605
msgid "Horizontal alignment of the actor within the cell"
msgstr "Гарызантальнае раўнаванне актара ўнутры клеткі"
-#: ../clutter/clutter-box-layout.c:400 ../clutter/clutter-table-layout.c:626
+#: ../clutter/clutter-box-layout.c:398 ../clutter/clutter-table-layout.c:620
msgid "Vertical alignment of the actor within the cell"
msgstr "Вертыкальнае раўнаванне актара ўнутры клеткі"
-#: ../clutter/clutter-box-layout.c:1365
+#: ../clutter/clutter-box-layout.c:1359
msgid "Vertical"
msgstr "Вертыкальна"
-#: ../clutter/clutter-box-layout.c:1366
+#: ../clutter/clutter-box-layout.c:1360
msgid "Whether the layout should be vertical, rather than horizontal"
msgstr "Ці размяшчэнне мусіць быць вертыкальным замест гарызантальнага"
-#: ../clutter/clutter-box-layout.c:1383 ../clutter/clutter-flow-layout.c:890
-#: ../clutter/clutter-grid-layout.c:1547
+#: ../clutter/clutter-box-layout.c:1377 ../clutter/clutter-flow-layout.c:942
+#: ../clutter/clutter-grid-layout.c:1549
msgid "Orientation"
msgstr "Арыентацыя"
-#: ../clutter/clutter-box-layout.c:1384 ../clutter/clutter-flow-layout.c:891
-#: ../clutter/clutter-grid-layout.c:1548
+#: ../clutter/clutter-box-layout.c:1378 ../clutter/clutter-flow-layout.c:943
+#: ../clutter/clutter-grid-layout.c:1550
msgid "The orientation of the layout"
msgstr "Арыентацыя размяшчэння"
-#: ../clutter/clutter-box-layout.c:1400 ../clutter/clutter-flow-layout.c:906
+#: ../clutter/clutter-box-layout.c:1394 ../clutter/clutter-flow-layout.c:958
msgid "Homogeneous"
msgstr "Аднастайна"
-#: ../clutter/clutter-box-layout.c:1401
+#: ../clutter/clutter-box-layout.c:1395
msgid ""
"Whether the layout should be homogeneous, i.e. all childs get the same size"
msgstr ""
"Ці размяшчэнне мусіць быць аднастайным, г.зн. усе нашчадкі маюць аднолькавыя "
"памеры"
-#: ../clutter/clutter-box-layout.c:1416
+#: ../clutter/clutter-box-layout.c:1410
msgid "Pack Start"
msgstr "Пачатак пакавання"
-#: ../clutter/clutter-box-layout.c:1417
+#: ../clutter/clutter-box-layout.c:1411
msgid "Whether to pack items at the start of the box"
msgstr "Ці пакаваць элементы ў пачатку рамкі"
-#: ../clutter/clutter-box-layout.c:1430
+#: ../clutter/clutter-box-layout.c:1424
msgid "Spacing"
msgstr "Прагал"
-#: ../clutter/clutter-box-layout.c:1431
+#: ../clutter/clutter-box-layout.c:1425
msgid "Spacing between children"
msgstr "Прагал паміж нашчадкамі"
-#: ../clutter/clutter-box-layout.c:1448 ../clutter/clutter-table-layout.c:1675
+#: ../clutter/clutter-box-layout.c:1442 ../clutter/clutter-table-layout.c:1667
msgid "Use Animations"
msgstr "Ужыць анімацыю"
-#: ../clutter/clutter-box-layout.c:1449 ../clutter/clutter-table-layout.c:1676
+#: ../clutter/clutter-box-layout.c:1443 ../clutter/clutter-table-layout.c:1668
msgid "Whether layout changes should be animated"
msgstr "Ці трэба анімаваць змяненне размяшчэння"
-#: ../clutter/clutter-box-layout.c:1473 ../clutter/clutter-table-layout.c:1700
+#: ../clutter/clutter-box-layout.c:1467 ../clutter/clutter-table-layout.c:1692
msgid "Easing Mode"
msgstr "Рэжым змянення кіроўнай функцыі"
-#: ../clutter/clutter-box-layout.c:1474 ../clutter/clutter-table-layout.c:1701
+#: ../clutter/clutter-box-layout.c:1468 ../clutter/clutter-table-layout.c:1693
msgid "The easing mode of the animations"
msgstr "Рэжым змянення кіроўнай функцыі анімацыі"
-#: ../clutter/clutter-box-layout.c:1494 ../clutter/clutter-table-layout.c:1721
+#: ../clutter/clutter-box-layout.c:1488 ../clutter/clutter-table-layout.c:1713
msgid "Easing Duration"
msgstr "Працягласць змянення кіроўнай функцыі"
-#: ../clutter/clutter-box-layout.c:1495 ../clutter/clutter-table-layout.c:1722
+#: ../clutter/clutter-box-layout.c:1489 ../clutter/clutter-table-layout.c:1714
msgid "The duration of the animations"
msgstr "Працягласць анімацыі"
-#: ../clutter/clutter-brightness-contrast-effect.c:307
+#: ../clutter/clutter-brightness-contrast-effect.c:321
msgid "Brightness"
msgstr "Яркасць"
-#: ../clutter/clutter-brightness-contrast-effect.c:308
+#: ../clutter/clutter-brightness-contrast-effect.c:322
msgid "The brightness change to apply"
msgstr "Велічыня змены яркасці"
-#: ../clutter/clutter-brightness-contrast-effect.c:327
+#: ../clutter/clutter-brightness-contrast-effect.c:341
msgid "Contrast"
msgstr "Кантраснасць"
-#: ../clutter/clutter-brightness-contrast-effect.c:328
+#: ../clutter/clutter-brightness-contrast-effect.c:342
msgid "The contrast change to apply"
msgstr "Велічыня змены кантраснасці"
-#: ../clutter/clutter-canvas.c:216
+#: ../clutter/clutter-canvas.c:225
msgid "The width of the canvas"
msgstr "Шырыня палатна"
-#: ../clutter/clutter-canvas.c:232
+#: ../clutter/clutter-canvas.c:241
msgid "The height of the canvas"
msgstr "Вышыня палатна"
@@ -936,39 +937,39 @@ msgstr "Кантэйнер, які стварыў гэтыя даныя"
msgid "The actor wrapped by this data"
msgstr "Актар, запакаваны гэтымі данымі"
-#: ../clutter/clutter-click-action.c:546
+#: ../clutter/clutter-click-action.c:557
msgid "Pressed"
msgstr "Націснуты"
-#: ../clutter/clutter-click-action.c:547
+#: ../clutter/clutter-click-action.c:558
msgid "Whether the clickable should be in pressed state"
msgstr "Ці аб'ект, які рэагуе на пстрычкі, мусіць быць націснуты"
-#: ../clutter/clutter-click-action.c:560
+#: ../clutter/clutter-click-action.c:571
msgid "Held"
msgstr "Утрыманне"
-#: ../clutter/clutter-click-action.c:561
+#: ../clutter/clutter-click-action.c:572
msgid "Whether the clickable has a grab"
msgstr "Ці мусіць аб'ект, які рэагуе на пстрычкі, утрымліваць курсор"
-#: ../clutter/clutter-click-action.c:578 ../clutter/clutter-settings.c:599
+#: ../clutter/clutter-click-action.c:589 ../clutter/clutter-settings.c:607
msgid "Long Press Duration"
msgstr "Працягласць доўгага націскання"
-#: ../clutter/clutter-click-action.c:579
+#: ../clutter/clutter-click-action.c:590
msgid "The minimum duration of a long press to recognize the gesture"
msgstr "Мінімальная працягласць доўгага націскання, каб пазнаць жэст"
-#: ../clutter/clutter-click-action.c:597
+#: ../clutter/clutter-click-action.c:608
msgid "Long Press Threshold"
msgstr "Парог доўгага націскання"
-#: ../clutter/clutter-click-action.c:598
+#: ../clutter/clutter-click-action.c:609
msgid "The maximum threshold before a long press is cancelled"
msgstr "Максімальны парог перад ануляваннем доўгага націскання"
-#: ../clutter/clutter-clone.c:346
+#: ../clutter/clutter-clone.c:342
msgid "Specifies the actor to be cloned"
msgstr "Вызначае актара для кланіравання"
@@ -980,27 +981,27 @@ msgstr "Афарбоўка"
msgid "The tint to apply"
msgstr "Ужыць афарбоўку"
-#: ../clutter/clutter-deform-effect.c:588
+#: ../clutter/clutter-deform-effect.c:592
msgid "Horizontal Tiles"
msgstr "Гарызантальная кафля"
-#: ../clutter/clutter-deform-effect.c:589
+#: ../clutter/clutter-deform-effect.c:593
msgid "The number of horizontal tiles"
msgstr "Колькасць гарызантальных кафляў"
-#: ../clutter/clutter-deform-effect.c:604
+#: ../clutter/clutter-deform-effect.c:608
msgid "Vertical Tiles"
msgstr "Вертыкальная кафля"
-#: ../clutter/clutter-deform-effect.c:605
+#: ../clutter/clutter-deform-effect.c:609
msgid "The number of vertical tiles"
msgstr "Колькасць вертыкальных кафляў"
-#: ../clutter/clutter-deform-effect.c:622
+#: ../clutter/clutter-deform-effect.c:626
msgid "Back Material"
msgstr "Матэрыял задняга плана"
-#: ../clutter/clutter-deform-effect.c:623
+#: ../clutter/clutter-deform-effect.c:627
msgid "The material to be used when painting the back of the actor"
msgstr "Матэрыял, які выкарыстоўваецца падчас малявання задняга плана актара"
@@ -1008,174 +1009,186 @@ msgstr "Матэрыял, які выкарыстоўваецца падчас
msgid "The desaturation factor"
msgstr "Каэфіцыент разбаўлення"
-#: ../clutter/clutter-device-manager.c:131
+#: ../clutter/clutter-device-manager.c:127
#: ../clutter/clutter-input-device.c:366
-#: ../clutter/x11/clutter-keymap-x11.c:316
+#: ../clutter/x11/clutter-keymap-x11.c:321
msgid "Backend"
msgstr "Праграмны драйвер"
-#: ../clutter/clutter-device-manager.c:132
+#: ../clutter/clutter-device-manager.c:128
msgid "The ClutterBackend of the device manager"
msgstr "ClutterBackend кіраўніка прыстасаванняў"
-#: ../clutter/clutter-drag-action.c:709
+#: ../clutter/clutter-drag-action.c:740
msgid "Horizontal Drag Threshold"
msgstr "Парог гарызантальнага перацягвання"
-#: ../clutter/clutter-drag-action.c:710
+#: ../clutter/clutter-drag-action.c:741
msgid "The horizontal amount of pixels required to start dragging"
msgstr "Колькасць пікселаў па гарызанталі, патрэбных для пачатку перацягвання"
-#: ../clutter/clutter-drag-action.c:737
+#: ../clutter/clutter-drag-action.c:768
msgid "Vertical Drag Threshold"
msgstr "Парог вертыкальнага перацягвання"
-#: ../clutter/clutter-drag-action.c:738
+#: ../clutter/clutter-drag-action.c:769
msgid "The vertical amount of pixels required to start dragging"
msgstr "Колькасць пікселаў па вертыкалі, патрэбных для пачатку перацягвання"
-#: ../clutter/clutter-drag-action.c:759
+#: ../clutter/clutter-drag-action.c:790
msgid "Drag Handle"
msgstr "Дзяржак перацягвання"
-#: ../clutter/clutter-drag-action.c:760
+#: ../clutter/clutter-drag-action.c:791
msgid "The actor that is being dragged"
msgstr "Актар, які перацягваецца"
-#: ../clutter/clutter-drag-action.c:773
+#: ../clutter/clutter-drag-action.c:804
msgid "Drag Axis"
msgstr "Вось перацягвання"
-#: ../clutter/clutter-drag-action.c:774
+#: ../clutter/clutter-drag-action.c:805
msgid "Constraints the dragging to an axis"
msgstr "Абмяжоўвае перацягванне пэўнай воссю"
-#: ../clutter/clutter-drag-action.c:790
+#: ../clutter/clutter-drag-action.c:821
msgid "Drag Area"
msgstr "Абшар перацягвання"
-#: ../clutter/clutter-drag-action.c:791
+#: ../clutter/clutter-drag-action.c:822
msgid "Constrains the dragging to a rectangle"
msgstr "Абмяжоўвае перацягванне пэўным прамавугольнікам"
-#: ../clutter/clutter-drag-action.c:804
+#: ../clutter/clutter-drag-action.c:835
msgid "Drag Area Set"
msgstr "Набор абшараў перацягвання"
-#: ../clutter/clutter-drag-action.c:805
+#: ../clutter/clutter-drag-action.c:836
msgid "Whether the drag area is set"
msgstr "Ці настаўлены абшар перацягвання"
-#: ../clutter/clutter-flow-layout.c:907
+#: ../clutter/clutter-flow-layout.c:959
msgid "Whether each item should receive the same allocation"
msgstr "Ці кожны элемент мусіць атрымаць аднолькавае размеркаванне"
-#: ../clutter/clutter-flow-layout.c:922 ../clutter/clutter-table-layout.c:1637
+#: ../clutter/clutter-flow-layout.c:974 ../clutter/clutter-table-layout.c:1629
msgid "Column Spacing"
msgstr "Прагал паміж слупкамі"
-#: ../clutter/clutter-flow-layout.c:923
+#: ../clutter/clutter-flow-layout.c:975
msgid "The spacing between columns"
msgstr "Прагал паміж слупкамі"
-#: ../clutter/clutter-flow-layout.c:939 ../clutter/clutter-table-layout.c:1651
+#: ../clutter/clutter-flow-layout.c:991 ../clutter/clutter-table-layout.c:1643
msgid "Row Spacing"
msgstr "Прагал паміж радкамі"
-#: ../clutter/clutter-flow-layout.c:940
+#: ../clutter/clutter-flow-layout.c:992
msgid "The spacing between rows"
msgstr "Прагал паміж радкамі"
-#: ../clutter/clutter-flow-layout.c:954
+#: ../clutter/clutter-flow-layout.c:1006
msgid "Minimum Column Width"
msgstr "Мінімальная шырыня слупка"
-#: ../clutter/clutter-flow-layout.c:955
+#: ../clutter/clutter-flow-layout.c:1007
msgid "Minimum width for each column"
msgstr "Мінімальная шырыня для кожнага слупка"
-#: ../clutter/clutter-flow-layout.c:970
+#: ../clutter/clutter-flow-layout.c:1022
msgid "Maximum Column Width"
msgstr "Максімальная шырыня слупка"
-#: ../clutter/clutter-flow-layout.c:971
+#: ../clutter/clutter-flow-layout.c:1023
msgid "Maximum width for each column"
msgstr "Максімальная шырыня для кожнага слупка"
-#: ../clutter/clutter-flow-layout.c:985
+#: ../clutter/clutter-flow-layout.c:1037
msgid "Minimum Row Height"
msgstr "Мінімальная вышыня радка"
-#: ../clutter/clutter-flow-layout.c:986
+#: ../clutter/clutter-flow-layout.c:1038
msgid "Minimum height for each row"
msgstr "Мінімальная вышыня для кожнага радка"
-#: ../clutter/clutter-flow-layout.c:1001
+#: ../clutter/clutter-flow-layout.c:1053
msgid "Maximum Row Height"
msgstr "Максімальная вышыня радка"
-#: ../clutter/clutter-flow-layout.c:1002
+#: ../clutter/clutter-flow-layout.c:1054
msgid "Maximum height for each row"
msgstr "Максімальная вышыня для кожнага радка"
-#: ../clutter/clutter-grid-layout.c:1222
+#: ../clutter/clutter-flow-layout.c:1069 ../clutter/clutter-flow-layout.c:1070
+msgid "Snap to grid"
+msgstr "Змесціць у сетку"
+
+#: ../clutter/clutter-gesture-action.c:646
+msgid "Number touch points"
+msgstr "Колькасць пунктаў судакранання"
+
+#: ../clutter/clutter-gesture-action.c:647
+msgid "Number of touch points"
+msgstr "Колькасць пунктаў судакранання"
+
+#: ../clutter/clutter-grid-layout.c:1223
msgid "Left attachment"
msgstr "Левая прычэпка"
-#: ../clutter/clutter-grid-layout.c:1223
+#: ../clutter/clutter-grid-layout.c:1224
msgid "The column number to attach the left side of the child to"
msgstr "Нумар слупка, да якога трэба прычапіць левы край нашчадка"
-#: ../clutter/clutter-grid-layout.c:1230
+#: ../clutter/clutter-grid-layout.c:1231
msgid "Top attachment"
msgstr "Верхняя прычэпка"
-#: ../clutter/clutter-grid-layout.c:1231
+#: ../clutter/clutter-grid-layout.c:1232
msgid "The row number to attach the top side of a child widget to"
msgstr "Нумар радка, да якога трэба прычапіць верхні край нашчадка"
-#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/clutter-grid-layout.c:1240
msgid "The number of columns that a child spans"
msgstr "Колькасць слупкоў, якія займае нашчадак"
-#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/clutter-grid-layout.c:1247
msgid "The number of rows that a child spans"
msgstr "Колькасць радкоў, якія займае нашчадак"
-#: ../clutter/clutter-grid-layout.c:1562
+#: ../clutter/clutter-grid-layout.c:1564
msgid "Row spacing"
msgstr "Прагал паміж радкамі"
-#: ../clutter/clutter-grid-layout.c:1563
+#: ../clutter/clutter-grid-layout.c:1565
msgid "The amount of space between two consecutive rows"
msgstr "Абшар паміж двума паслядоўнымі радкамі"
-#: ../clutter/clutter-grid-layout.c:1576
+#: ../clutter/clutter-grid-layout.c:1578
msgid "Column spacing"
msgstr "Прагал паміж слупкамі"
-#: ../clutter/clutter-grid-layout.c:1577
+#: ../clutter/clutter-grid-layout.c:1579
msgid "The amount of space between two consecutive columns"
msgstr "Абшар паміж двума паслядоўнымі слупкамі"
-#: ../clutter/clutter-grid-layout.c:1591
+#: ../clutter/clutter-grid-layout.c:1593
msgid "Row Homogeneous"
msgstr "Аднастайныя радкі"
-#: ../clutter/clutter-grid-layout.c:1592
+#: ../clutter/clutter-grid-layout.c:1594
msgid "If TRUE, the rows are all the same height"
msgstr "Калі ўключана, усе радкі будуць мець адну вышыню"
-#: ../clutter/clutter-grid-layout.c:1605
+#: ../clutter/clutter-grid-layout.c:1607
msgid "Column Homogeneous"
msgstr "Аднастайныя слупкі"
-#: ../clutter/clutter-grid-layout.c:1606
+#: ../clutter/clutter-grid-layout.c:1608
msgid "If TRUE, the columns are all the same width"
msgstr "Калі ўключана, усе слупкі будуць мець адну шырыню"
-#: ../clutter/clutter-image.c:248 ../clutter/clutter-image.c:311
-#: ../clutter/clutter-image.c:399
+#: ../clutter/clutter-image.c:246 ../clutter/clutter-image.c:309
+#: ../clutter/clutter-image.c:397
msgid "Unable to load image data"
msgstr "Не ўдалося загрузіць даныя выявы"
@@ -1239,27 +1252,27 @@ msgstr "Колькасць восяў на прыстасаванні"
msgid "The backend instance"
msgstr "Экзэмпляр праграмнага драйвера"
-#: ../clutter/clutter-interval.c:506
+#: ../clutter/clutter-interval.c:503
msgid "Value Type"
msgstr "Тып значэння"
-#: ../clutter/clutter-interval.c:507
+#: ../clutter/clutter-interval.c:504
msgid "The type of the values in the interval"
msgstr "Тып значэнняў у дыяпазоне"
-#: ../clutter/clutter-interval.c:522
+#: ../clutter/clutter-interval.c:519
msgid "Initial Value"
msgstr "Пачатковае значэнне"
-#: ../clutter/clutter-interval.c:523
+#: ../clutter/clutter-interval.c:520
msgid "Initial value of the interval"
msgstr "Пачатковае значэнне дыяпазона"
-#: ../clutter/clutter-interval.c:537
+#: ../clutter/clutter-interval.c:534
msgid "Final Value"
msgstr "Канчатковае значэнне"
-#: ../clutter/clutter-interval.c:538
+#: ../clutter/clutter-interval.c:535
msgid "Final value of the interval"
msgstr "Канчатковае значэнне дыяпазона"
@@ -1278,96 +1291,96 @@ msgstr "Кіраўнік, які стварыў гэтыя даныя"
#. * Do NOT translate it to non-English e.g. "predefinito:LTR"! If
#. * it isn't default:LTR or default:RTL it will not work.
#.
-#: ../clutter/clutter-main.c:762
+#: ../clutter/clutter-main.c:795
msgid "default:LTR"
msgstr "default:LTR"
-#: ../clutter/clutter-main.c:1633
+#: ../clutter/clutter-main.c:1669
msgid "Show frames per second"
msgstr "Паказваць колькасць кадраў на секунду"
-#: ../clutter/clutter-main.c:1635
+#: ../clutter/clutter-main.c:1671
msgid "Default frame rate"
msgstr "Прадвызначаная частата кадраў"
-#: ../clutter/clutter-main.c:1637
+#: ../clutter/clutter-main.c:1673
msgid "Make all warnings fatal"
msgstr "Лічыць усе перасцярогі непапраўнымі"
-#: ../clutter/clutter-main.c:1640
+#: ../clutter/clutter-main.c:1676
msgid "Direction for the text"
msgstr "Кірунак тэксту"
-#: ../clutter/clutter-main.c:1643
+#: ../clutter/clutter-main.c:1679
msgid "Disable mipmapping on text"
msgstr "Выключыць mip-адлюстраванне тэксту"
-#: ../clutter/clutter-main.c:1646
+#: ../clutter/clutter-main.c:1682
msgid "Use 'fuzzy' picking"
msgstr "Ужыць \"няпэўны\" выбар"
-#: ../clutter/clutter-main.c:1649
+#: ../clutter/clutter-main.c:1685
msgid "Clutter debugging flags to set"
msgstr "Патрэбныя адладачныя сцяжкі Clutter"
-#: ../clutter/clutter-main.c:1651
+#: ../clutter/clutter-main.c:1687
msgid "Clutter debugging flags to unset"
msgstr "Непатрэбныя адладачныя сцяжкі Clutter"
-#: ../clutter/clutter-main.c:1655
+#: ../clutter/clutter-main.c:1691
msgid "Clutter profiling flags to set"
msgstr "Патрэбныя прафілявальныя сцяжкі Clutter"
-#: ../clutter/clutter-main.c:1657
+#: ../clutter/clutter-main.c:1693
msgid "Clutter profiling flags to unset"
msgstr "Непатрэбныя прафілявальныя сцяжкі Clutter"
-#: ../clutter/clutter-main.c:1660
+#: ../clutter/clutter-main.c:1696
msgid "Enable accessibility"
msgstr "Уключыць функцыі даступнасці"
-#: ../clutter/clutter-main.c:1852
+#: ../clutter/clutter-main.c:1888
msgid "Clutter Options"
msgstr "Параметры Clutter"
-#: ../clutter/clutter-main.c:1853
+#: ../clutter/clutter-main.c:1889
msgid "Show Clutter Options"
msgstr "Паказаць параметры Clutter"
-#: ../clutter/clutter-pan-action.c:440
+#: ../clutter/clutter-pan-action.c:445
msgid "Pan Axis"
msgstr "Вось панарамнага руху камеры"
-#: ../clutter/clutter-pan-action.c:441
+#: ../clutter/clutter-pan-action.c:446
msgid "Constraints the panning to an axis"
msgstr "Абмяжоўвае панарамны рух камеры пэўнай воссю"
-#: ../clutter/clutter-pan-action.c:455
+#: ../clutter/clutter-pan-action.c:460
msgid "Interpolate"
msgstr "Інтэрпаляцыя"
-#: ../clutter/clutter-pan-action.c:456
+#: ../clutter/clutter-pan-action.c:461
msgid "Whether interpolated events emission is enabled."
msgstr "Ці ўключана генерацыя інтэрпаляваных падзей."
-#: ../clutter/clutter-pan-action.c:472
+#: ../clutter/clutter-pan-action.c:477
msgid "Deceleration"
msgstr "Запавольванне"
-#: ../clutter/clutter-pan-action.c:473
+#: ../clutter/clutter-pan-action.c:478
msgid "Rate at which the interpolated panning will decelerate in"
msgstr "Частата запавольвання інтэрпаляванага панарамнага руху камеры"
-#: ../clutter/clutter-pan-action.c:490
+#: ../clutter/clutter-pan-action.c:495
msgid "Initial acceleration factor"
msgstr "Пачатковы каэфіцыент паскарэння"
-#: ../clutter/clutter-pan-action.c:491
+#: ../clutter/clutter-pan-action.c:496
msgid "Factor applied to the momentum when starting the interpolated phase"
msgstr "Каэфіцыент да імпульсу ў пачатку інтэрпаляванай фазы"
#: ../clutter/clutter-path-constraint.c:212
-#: ../clutter/deprecated/clutter-behaviour-path.c:225
+#: ../clutter/deprecated/clutter-behaviour-path.c:221
msgid "Path"
msgstr "Сцежка"
@@ -1379,157 +1392,157 @@ msgstr "Сцежка для абмежавання актара"
msgid "The offset along the path, between -1.0 and 2.0"
msgstr "Зрух па сцежцы, ад -1.0 да 2.0"
-#: ../clutter/clutter-property-transition.c:271
+#: ../clutter/clutter-property-transition.c:269
msgid "Property Name"
msgstr "Назва ўласцівасці"
-#: ../clutter/clutter-property-transition.c:272
+#: ../clutter/clutter-property-transition.c:270
msgid "The name of the property to animate"
msgstr "Назва ўласцівасці, якую трэба анімаваць"
-#: ../clutter/clutter-script.c:466
+#: ../clutter/clutter-script.c:464
msgid "Filename Set"
msgstr "Выбрана назва файла"
-#: ../clutter/clutter-script.c:467
+#: ../clutter/clutter-script.c:465
msgid "Whether the :filename property is set"
msgstr "Ці настаўлена ўласцівасць :filename"
-#: ../clutter/clutter-script.c:481
-#: ../clutter/deprecated/clutter-texture.c:1082
+#: ../clutter/clutter-script.c:479
+#: ../clutter/deprecated/clutter-texture.c:1080
msgid "Filename"
msgstr "Назва файла"
-#: ../clutter/clutter-script.c:482
+#: ../clutter/clutter-script.c:480
msgid "The path of the currently parsed file"
msgstr "Сцежка да бягучага файла разбору"
-#: ../clutter/clutter-script.c:499
+#: ../clutter/clutter-script.c:497
msgid "Translation Domain"
msgstr "Дамен перакладу"
-#: ../clutter/clutter-script.c:500
+#: ../clutter/clutter-script.c:498
msgid "The translation domain used to localize string"
msgstr "Дамен перакладу для лакалізацыі радка"
-#: ../clutter/clutter-scroll-actor.c:263
+#: ../clutter/clutter-scroll-actor.c:189
msgid "Scroll Mode"
msgstr "Рэжым пракруткі"
-#: ../clutter/clutter-scroll-actor.c:264
+#: ../clutter/clutter-scroll-actor.c:190
msgid "The scrolling direction"
msgstr "Кірунак пракруткі"
-#: ../clutter/clutter-settings.c:440
+#: ../clutter/clutter-settings.c:448
msgid "Double Click Time"
msgstr "Час падвойнай пстрычкі"
-#: ../clutter/clutter-settings.c:441
+#: ../clutter/clutter-settings.c:449
msgid "The time between clicks necessary to detect a multiple click"
msgstr "Час паміж пстрычкамі, неабходны, каб апазнаць шматразовую пстрычку"
-#: ../clutter/clutter-settings.c:456
+#: ../clutter/clutter-settings.c:464
msgid "Double Click Distance"
msgstr "Адлегласць падвойнай пстрычкі"
-#: ../clutter/clutter-settings.c:457
+#: ../clutter/clutter-settings.c:465
msgid "The distance between clicks necessary to detect a multiple click"
msgstr ""
"Адлегласць паміж пстрычкамі, неабходная, каб апазнаць шматразовую пстрычку"
-#: ../clutter/clutter-settings.c:472
+#: ../clutter/clutter-settings.c:480
msgid "Drag Threshold"
msgstr "Парог адчувальнасці пры перацягванні"
-#: ../clutter/clutter-settings.c:473
+#: ../clutter/clutter-settings.c:481
msgid "The distance the cursor should travel before starting to drag"
msgstr "Адлегласць, на якую трэба зрушыць паказальнік, каб пачаць перацягванне"
-#: ../clutter/clutter-settings.c:488 ../clutter/clutter-text.c:3368
+#: ../clutter/clutter-settings.c:496 ../clutter/clutter-text.c:3393
msgid "Font Name"
msgstr "Назва шрыфту"
-#: ../clutter/clutter-settings.c:489
+#: ../clutter/clutter-settings.c:497
msgid ""
"The description of the default font, as one that could be parsed by Pango"
msgstr ""
"Апісанне прадвызначанага шрыфту як адзінага, які можа быць разабраны Pango"
-#: ../clutter/clutter-settings.c:504
+#: ../clutter/clutter-settings.c:512
msgid "Font Antialias"
msgstr "Згладжванне шрыфту"
-#: ../clutter/clutter-settings.c:505
+#: ../clutter/clutter-settings.c:513
msgid ""
"Whether to use antialiasing (1 to enable, 0 to disable, and -1 to use the "
"default)"
msgstr ""
"Ці ўжываць згладжванне (1 - так, 0 - не і -1 - ужыць прадвызначанае значэнне)"
-#: ../clutter/clutter-settings.c:521
+#: ../clutter/clutter-settings.c:529
msgid "Font DPI"
msgstr "DPI шрыфту"
-#: ../clutter/clutter-settings.c:522
+#: ../clutter/clutter-settings.c:530
msgid ""
"The resolution of the font, in 1024 * dots/inch, or -1 to use the default"
msgstr ""
"Распазнавальнасць шрыфту (1024 * кропак/цалю), ці -1, каб ужыць "
"прадвызначанае значэнне"
-#: ../clutter/clutter-settings.c:538
+#: ../clutter/clutter-settings.c:546
msgid "Font Hinting"
msgstr "Хінтынг шрыфту"
-#: ../clutter/clutter-settings.c:539
+#: ../clutter/clutter-settings.c:547
msgid ""
"Whether to use hinting (1 to enable, 0 to disable and -1 to use the default)"
msgstr ""
"Ці ўжываць хінтынг (1 - так, 0 - не і -1 - ужыць прадвызначанае значэнне)"
-#: ../clutter/clutter-settings.c:560
+#: ../clutter/clutter-settings.c:568
msgid "Font Hint Style"
msgstr "Стыль хінтынгу шрыфту"
-#: ../clutter/clutter-settings.c:561
+#: ../clutter/clutter-settings.c:569
msgid "The style of hinting (hintnone, hintslight, hintmedium, hintfull)"
msgstr ""
"Стыль хінтынгу (hintnone (нічога), hintslight (лёгкі), hintmedium (сярэдні), "
"hintfull (поўны))"
-#: ../clutter/clutter-settings.c:582
+#: ../clutter/clutter-settings.c:590
msgid "Font Subpixel Order"
msgstr "Субпіксельны парадак шрыфту"
-#: ../clutter/clutter-settings.c:583
+#: ../clutter/clutter-settings.c:591
msgid "The type of subpixel antialiasing (none, rgb, bgr, vrgb, vbgr)"
msgstr "Тып згладжвання субпікселаў (none, rgb, bgr, vrgb, vbgr)"
-#: ../clutter/clutter-settings.c:600
+#: ../clutter/clutter-settings.c:608
msgid "The minimum duration for a long press gesture to be recognized"
msgstr "Мінімальная працягласць, неабходная, каб апазнаць доўгі націск"
-#: ../clutter/clutter-settings.c:607
+#: ../clutter/clutter-settings.c:615
msgid "Fontconfig configuration timestamp"
msgstr "Часавы адбітак канфігурацыі fontconfig"
-#: ../clutter/clutter-settings.c:608
+#: ../clutter/clutter-settings.c:616
msgid "Timestamp of the current fontconfig configuration"
msgstr "Часавы адбітак бягучай канфігурацыі fontconfig"
-#: ../clutter/clutter-settings.c:625
+#: ../clutter/clutter-settings.c:633
msgid "Password Hint Time"
msgstr "Час падказкі пароля"
-#: ../clutter/clutter-settings.c:626
+#: ../clutter/clutter-settings.c:634
msgid "How long to show the last input character in hidden entries"
msgstr "Як доўга паказваць апошні ўведзены знак у схаваных запісах"
-#: ../clutter/clutter-shader-effect.c:486
+#: ../clutter/clutter-shader-effect.c:485
msgid "Shader Type"
msgstr "Тып шэйдара"
-#: ../clutter/clutter-shader-effect.c:487
+#: ../clutter/clutter-shader-effect.c:486
msgid "The type of shader used"
msgstr "Ужыты тып шэйдара"
@@ -1557,759 +1570,759 @@ msgstr "Край крыніцы, які трэба замацаваць"
msgid "The offset in pixels to apply to the constraint"
msgstr "Зрух у пікселах для абмежавання"
-#: ../clutter/clutter-stage.c:1899
+#: ../clutter/clutter-stage.c:1947
msgid "Fullscreen Set"
msgstr "Выбраны рэжым на ўвесь экран"
-#: ../clutter/clutter-stage.c:1900
+#: ../clutter/clutter-stage.c:1948
msgid "Whether the main stage is fullscreen"
msgstr "Ці галоўная сцэна паказваецца на ўвесь экран"
-#: ../clutter/clutter-stage.c:1914
+#: ../clutter/clutter-stage.c:1962
msgid "Offscreen"
msgstr "Па-за экранам"
-#: ../clutter/clutter-stage.c:1915
+#: ../clutter/clutter-stage.c:1963
msgid "Whether the main stage should be rendered offscreen"
msgstr "Ці галоўная сцэна мусіць паказвацца па-за экранам"
-#: ../clutter/clutter-stage.c:1927 ../clutter/clutter-text.c:3482
+#: ../clutter/clutter-stage.c:1975 ../clutter/clutter-text.c:3507
msgid "Cursor Visible"
msgstr "Бачны паказальнік"
-#: ../clutter/clutter-stage.c:1928
+#: ../clutter/clutter-stage.c:1976
msgid "Whether the mouse pointer is visible on the main stage"
msgstr "Ці паказальнік мышы бачны на галоўнай сцэне"
-#: ../clutter/clutter-stage.c:1942
+#: ../clutter/clutter-stage.c:1990
msgid "User Resizable"
msgstr "Карыстальнік можа змяняць памер"
-#: ../clutter/clutter-stage.c:1943
+#: ../clutter/clutter-stage.c:1991
msgid "Whether the stage is able to be resized via user interaction"
msgstr "Ці можа сцэна змяняць памер у залежнасці ад дзеянняў карыстальніка"
-#: ../clutter/clutter-stage.c:1958 ../clutter/deprecated/clutter-box.c:260
-#: ../clutter/deprecated/clutter-rectangle.c:273
+#: ../clutter/clutter-stage.c:2006 ../clutter/deprecated/clutter-box.c:256
+#: ../clutter/deprecated/clutter-rectangle.c:270
msgid "Color"
msgstr "Колер"
-#: ../clutter/clutter-stage.c:1959
+#: ../clutter/clutter-stage.c:2007
msgid "The color of the stage"
msgstr "Колер сцэны"
-#: ../clutter/clutter-stage.c:1974
+#: ../clutter/clutter-stage.c:2022
msgid "Perspective"
msgstr "Перспектыва"
-#: ../clutter/clutter-stage.c:1975
+#: ../clutter/clutter-stage.c:2023
msgid "Perspective projection parameters"
msgstr "Параметры праекцыі перспектывы"
-#: ../clutter/clutter-stage.c:1990
+#: ../clutter/clutter-stage.c:2038
msgid "Title"
msgstr "Назва"
-#: ../clutter/clutter-stage.c:1991
+#: ../clutter/clutter-stage.c:2039
msgid "Stage Title"
msgstr "Назва сцэны"
-#: ../clutter/clutter-stage.c:2008
+#: ../clutter/clutter-stage.c:2056
msgid "Use Fog"
msgstr "Ужыць туман"
-#: ../clutter/clutter-stage.c:2009
+#: ../clutter/clutter-stage.c:2057
msgid "Whether to enable depth cueing"
msgstr "Ці трэба ўключыць пазнакі глыбіні"
-#: ../clutter/clutter-stage.c:2025
+#: ../clutter/clutter-stage.c:2073
msgid "Fog"
msgstr "Туман"
-#: ../clutter/clutter-stage.c:2026
+#: ../clutter/clutter-stage.c:2074
msgid "Settings for the depth cueing"
msgstr "Настройкі пазнак глыбіні"
-#: ../clutter/clutter-stage.c:2042
+#: ../clutter/clutter-stage.c:2090
msgid "Use Alpha"
msgstr "Ужыць альфу"
-#: ../clutter/clutter-stage.c:2043
+#: ../clutter/clutter-stage.c:2091
msgid "Whether to honour the alpha component of the stage color"
msgstr "Ці ўлічваць альфа-складнік колеру сцэны"
-#: ../clutter/clutter-stage.c:2059
+#: ../clutter/clutter-stage.c:2107
msgid "Key Focus"
msgstr "Фокус клавіш"
-#: ../clutter/clutter-stage.c:2060
+#: ../clutter/clutter-stage.c:2108
msgid "The currently key focused actor"
msgstr "Актар, які цяпер мае клавішы ў фокусе"
-#: ../clutter/clutter-stage.c:2076
+#: ../clutter/clutter-stage.c:2124
msgid "No Clear Hint"
msgstr "Няма падказкі ачысткі"
-#: ../clutter/clutter-stage.c:2077
+#: ../clutter/clutter-stage.c:2125
msgid "Whether the stage should clear its contents"
msgstr "Ці павінна сцэна ачышчаць сваё змесціва"
-#: ../clutter/clutter-stage.c:2090
+#: ../clutter/clutter-stage.c:2138
msgid "Accept Focus"
msgstr "Прымае фокус"
-#: ../clutter/clutter-stage.c:2091
+#: ../clutter/clutter-stage.c:2139
msgid "Whether the stage should accept focus on show"
msgstr "Ці павінна сцэна прымаць фокус падчас паказу"
-#: ../clutter/clutter-table-layout.c:543
+#: ../clutter/clutter-table-layout.c:537
msgid "Column Number"
msgstr "Нумар слупка"
-#: ../clutter/clutter-table-layout.c:544
+#: ../clutter/clutter-table-layout.c:538
msgid "The column the widget resides in"
msgstr "Слупок, у якім знаходзіцца віджэт"
-#: ../clutter/clutter-table-layout.c:551
+#: ../clutter/clutter-table-layout.c:545
msgid "Row Number"
msgstr "Нумар радка"
-#: ../clutter/clutter-table-layout.c:552
+#: ../clutter/clutter-table-layout.c:546
msgid "The row the widget resides in"
msgstr "Радок, у якім знаходзіцца віджэт"
-#: ../clutter/clutter-table-layout.c:559
+#: ../clutter/clutter-table-layout.c:553
msgid "Column Span"
msgstr "Дыяпазон слупкоў"
-#: ../clutter/clutter-table-layout.c:560
+#: ../clutter/clutter-table-layout.c:554
msgid "The number of columns the widget should span"
msgstr "Колькасць слупкоў, якія займае віджэт"
-#: ../clutter/clutter-table-layout.c:567
+#: ../clutter/clutter-table-layout.c:561
msgid "Row Span"
msgstr "Дыяпазон радкоў"
-#: ../clutter/clutter-table-layout.c:568
+#: ../clutter/clutter-table-layout.c:562
msgid "The number of rows the widget should span"
msgstr "Колькасць радкоў, якія займае віджэт"
-#: ../clutter/clutter-table-layout.c:575
+#: ../clutter/clutter-table-layout.c:569
msgid "Horizontal Expand"
msgstr "Гарызантальнае разгортванне"
-#: ../clutter/clutter-table-layout.c:576
+#: ../clutter/clutter-table-layout.c:570
msgid "Allocate extra space for the child in horizontal axis"
msgstr "Выдзеліць дадатковую прастору для нашчадка па гарызанталі"
-#: ../clutter/clutter-table-layout.c:582
+#: ../clutter/clutter-table-layout.c:576
msgid "Vertical Expand"
msgstr "Вертыкальнае разгортванне"
-#: ../clutter/clutter-table-layout.c:583
+#: ../clutter/clutter-table-layout.c:577
msgid "Allocate extra space for the child in vertical axis"
msgstr "Выдзеліць дадатковую прастору для нашчадка па вертыкалі"
-#: ../clutter/clutter-table-layout.c:1638
+#: ../clutter/clutter-table-layout.c:1630
msgid "Spacing between columns"
msgstr "Прагал паміж слупкамі"
-#: ../clutter/clutter-table-layout.c:1652
+#: ../clutter/clutter-table-layout.c:1644
msgid "Spacing between rows"
msgstr "Прагал паміж радкамі"
-#: ../clutter/clutter-text-buffer.c:351 ../clutter/clutter-text.c:3403
+#: ../clutter/clutter-text-buffer.c:347 ../clutter/clutter-text.c:3428
msgid "Text"
msgstr "Тэкст"
-#: ../clutter/clutter-text-buffer.c:352
+#: ../clutter/clutter-text-buffer.c:348
msgid "The contents of the buffer"
msgstr "Змесціва буфера"
-#: ../clutter/clutter-text-buffer.c:365
+#: ../clutter/clutter-text-buffer.c:361
msgid "Text length"
msgstr "Даўжыня тэксту"
-#: ../clutter/clutter-text-buffer.c:366
+#: ../clutter/clutter-text-buffer.c:362
msgid "Length of the text currently in the buffer"
msgstr "Даўжыня тэксту, які цяпер знаходзіцца ў буферы"
-#: ../clutter/clutter-text-buffer.c:379
+#: ../clutter/clutter-text-buffer.c:375
msgid "Maximum length"
msgstr "Максімальная даўжыня"
-#: ../clutter/clutter-text-buffer.c:380
+#: ../clutter/clutter-text-buffer.c:376
msgid "Maximum number of characters for this entry. Zero if no maximum"
msgstr ""
"Максімальная колькасць знакаў для гэтага запісу. Нуль, калі няма абмежавання"
-#: ../clutter/clutter-text.c:3350
+#: ../clutter/clutter-text.c:3375
msgid "Buffer"
msgstr "Буфер"
-#: ../clutter/clutter-text.c:3351
+#: ../clutter/clutter-text.c:3376
msgid "The buffer for the text"
msgstr "Буфер для тэксту"
-#: ../clutter/clutter-text.c:3369
+#: ../clutter/clutter-text.c:3394
msgid "The font to be used by the text"
msgstr "Шрыфт для тэксту"
-#: ../clutter/clutter-text.c:3386
+#: ../clutter/clutter-text.c:3411
msgid "Font Description"
msgstr "Апісанне шрыфту"
-#: ../clutter/clutter-text.c:3387
+#: ../clutter/clutter-text.c:3412
msgid "The font description to be used"
msgstr "Апісанне ўжытага шрыфту"
-#: ../clutter/clutter-text.c:3404
+#: ../clutter/clutter-text.c:3429
msgid "The text to render"
msgstr "Тэкст для выяўлення"
-#: ../clutter/clutter-text.c:3418
+#: ../clutter/clutter-text.c:3443
msgid "Font Color"
msgstr "Колер шрыфту"
-#: ../clutter/clutter-text.c:3419
+#: ../clutter/clutter-text.c:3444
msgid "Color of the font used by the text"
msgstr "Колер шрыфту для тэксту"
-#: ../clutter/clutter-text.c:3434
+#: ../clutter/clutter-text.c:3459
msgid "Editable"
msgstr "Папраўны"
-#: ../clutter/clutter-text.c:3435
+#: ../clutter/clutter-text.c:3460
msgid "Whether the text is editable"
msgstr "Ці тэкст можна рэдагаваць"
-#: ../clutter/clutter-text.c:3450
+#: ../clutter/clutter-text.c:3475
msgid "Selectable"
msgstr "Вылучальны"
-#: ../clutter/clutter-text.c:3451
+#: ../clutter/clutter-text.c:3476
msgid "Whether the text is selectable"
msgstr "Ці тэкст можна вылучаць"
-#: ../clutter/clutter-text.c:3465
+#: ../clutter/clutter-text.c:3490
msgid "Activatable"
msgstr "Актывізавальны"
-#: ../clutter/clutter-text.c:3466
+#: ../clutter/clutter-text.c:3491
msgid "Whether pressing return causes the activate signal to be emitted"
msgstr "Ці выклікае націсканне клавішы Return пасылку сігналу актывацыі"
-#: ../clutter/clutter-text.c:3483
+#: ../clutter/clutter-text.c:3508
msgid "Whether the input cursor is visible"
msgstr "Ці бачны курсор уводу"
-#: ../clutter/clutter-text.c:3497 ../clutter/clutter-text.c:3498
+#: ../clutter/clutter-text.c:3522 ../clutter/clutter-text.c:3523
msgid "Cursor Color"
msgstr "Колер курсора"
-#: ../clutter/clutter-text.c:3513
+#: ../clutter/clutter-text.c:3538
msgid "Cursor Color Set"
msgstr "Выбраны колер курсора"
-#: ../clutter/clutter-text.c:3514
+#: ../clutter/clutter-text.c:3539
msgid "Whether the cursor color has been set"
msgstr "Ці выбраны колер курсора"
-#: ../clutter/clutter-text.c:3529
+#: ../clutter/clutter-text.c:3554
msgid "Cursor Size"
msgstr "Памер курсора"
-#: ../clutter/clutter-text.c:3530
+#: ../clutter/clutter-text.c:3555
msgid "The width of the cursor, in pixels"
msgstr "Шырыня курсора, у пікселах"
-#: ../clutter/clutter-text.c:3546 ../clutter/clutter-text.c:3564
+#: ../clutter/clutter-text.c:3571 ../clutter/clutter-text.c:3589
msgid "Cursor Position"
msgstr "Пазіцыя курсора"
-#: ../clutter/clutter-text.c:3547 ../clutter/clutter-text.c:3565
+#: ../clutter/clutter-text.c:3572 ../clutter/clutter-text.c:3590
msgid "The cursor position"
msgstr "Пазіцыя курсора"
-#: ../clutter/clutter-text.c:3580
+#: ../clutter/clutter-text.c:3605
msgid "Selection-bound"
msgstr "Мяжа вылучэння"
-#: ../clutter/clutter-text.c:3581
+#: ../clutter/clutter-text.c:3606
msgid "The cursor position of the other end of the selection"
msgstr "Пазіцыя курсора на іншым канцы выдзялення"
-#: ../clutter/clutter-text.c:3596 ../clutter/clutter-text.c:3597
+#: ../clutter/clutter-text.c:3621 ../clutter/clutter-text.c:3622
msgid "Selection Color"
msgstr "Колер вылучэння"
-#: ../clutter/clutter-text.c:3612
+#: ../clutter/clutter-text.c:3637
msgid "Selection Color Set"
msgstr "Выбраны колер вылучэння"
-#: ../clutter/clutter-text.c:3613
+#: ../clutter/clutter-text.c:3638
msgid "Whether the selection color has been set"
msgstr "Ці выбраны колер вылучэння"
-#: ../clutter/clutter-text.c:3628
+#: ../clutter/clutter-text.c:3653
msgid "Attributes"
msgstr "Атрыбуты"
-#: ../clutter/clutter-text.c:3629
+#: ../clutter/clutter-text.c:3654
msgid "A list of style attributes to apply to the contents of the actor"
msgstr "Спіс атрыбутаў тэксту, якія ўжываюцца для змесціва актара"
-#: ../clutter/clutter-text.c:3651
+#: ../clutter/clutter-text.c:3676
msgid "Use markup"
msgstr "Ужыць разметку"
-#: ../clutter/clutter-text.c:3652
+#: ../clutter/clutter-text.c:3677
msgid "Whether or not the text includes Pango markup"
msgstr "Ці змяшчае тэкст разметку Pango"
-#: ../clutter/clutter-text.c:3668
+#: ../clutter/clutter-text.c:3693
msgid "Line wrap"
msgstr "Перанос радкоў"
-#: ../clutter/clutter-text.c:3669
+#: ../clutter/clutter-text.c:3694
msgid "If set, wrap the lines if the text becomes too wide"
msgstr "Калі ўключана, пераносіць радкі ў надта доўгім тэксце"
-#: ../clutter/clutter-text.c:3684
+#: ../clutter/clutter-text.c:3709
msgid "Line wrap mode"
msgstr "Рэжым пераносу радкоў"
-#: ../clutter/clutter-text.c:3685
+#: ../clutter/clutter-text.c:3710
msgid "Control how line-wrapping is done"
msgstr "Кіраванне пераносам радкоў"
-#: ../clutter/clutter-text.c:3700
+#: ../clutter/clutter-text.c:3725
msgid "Ellipsize"
msgstr "Абрэз"
-#: ../clutter/clutter-text.c:3701
+#: ../clutter/clutter-text.c:3726
msgid "The preferred place to ellipsize the string"
msgstr "Пажаданае месца абразання тэкставага ланцужка"
-#: ../clutter/clutter-text.c:3717
+#: ../clutter/clutter-text.c:3742
msgid "Line Alignment"
msgstr "Раўнаванне радкоў"
-#: ../clutter/clutter-text.c:3718
+#: ../clutter/clutter-text.c:3743
msgid "The preferred alignment for the string, for multi-line text"
msgstr "Пажаданае раўнаванне ланцужка шматрадковага тэксту"
-#: ../clutter/clutter-text.c:3734
+#: ../clutter/clutter-text.c:3759
msgid "Justify"
msgstr "Выраўнаваць"
-#: ../clutter/clutter-text.c:3735
+#: ../clutter/clutter-text.c:3760
msgid "Whether the text should be justified"
msgstr "Ці павінны радкі тэксту быць выраўнаванымі"
-#: ../clutter/clutter-text.c:3750
+#: ../clutter/clutter-text.c:3775
msgid "Password Character"
msgstr "Знак пароля"
-#: ../clutter/clutter-text.c:3751
+#: ../clutter/clutter-text.c:3776
msgid "If non-zero, use this character to display the actor's contents"
msgstr "Ужыць гэты знак для паказу змесціва актара, калі знак не роўны нулю"
-#: ../clutter/clutter-text.c:3765
+#: ../clutter/clutter-text.c:3790
msgid "Max Length"
msgstr "Максімальная даўжыня"
-#: ../clutter/clutter-text.c:3766
+#: ../clutter/clutter-text.c:3791
msgid "Maximum length of the text inside the actor"
msgstr "Максімальная даўжыня тэксту ўнутры актара"
-#: ../clutter/clutter-text.c:3789
+#: ../clutter/clutter-text.c:3814
msgid "Single Line Mode"
msgstr "Аднарадковы рэжым"
-#: ../clutter/clutter-text.c:3790
+#: ../clutter/clutter-text.c:3815
msgid "Whether the text should be a single line"
msgstr "Ці тэкст мусіць быць адным радком"
-#: ../clutter/clutter-text.c:3804 ../clutter/clutter-text.c:3805
+#: ../clutter/clutter-text.c:3829 ../clutter/clutter-text.c:3830
msgid "Selected Text Color"
msgstr "Колер вылучанага тэксту"
-#: ../clutter/clutter-text.c:3820
+#: ../clutter/clutter-text.c:3845
msgid "Selected Text Color Set"
msgstr "Выбраны колер вылучанага тэксту"
-#: ../clutter/clutter-text.c:3821
+#: ../clutter/clutter-text.c:3846
msgid "Whether the selected text color has been set"
msgstr "Ці выбраны колер вылучанага тэксту"
-#: ../clutter/clutter-timeline.c:561
-#: ../clutter/deprecated/clutter-animation.c:560
+#: ../clutter/clutter-timeline.c:593
+#: ../clutter/deprecated/clutter-animation.c:557
msgid "Loop"
msgstr "Паўтараць у цыкле"
-#: ../clutter/clutter-timeline.c:562
+#: ../clutter/clutter-timeline.c:594
msgid "Should the timeline automatically restart"
msgstr "Ці трэба аўтаматычна перазапускаць часавую шкалу"
-#: ../clutter/clutter-timeline.c:576
+#: ../clutter/clutter-timeline.c:608
msgid "Delay"
msgstr "Затрымка"
-#: ../clutter/clutter-timeline.c:577
+#: ../clutter/clutter-timeline.c:609
msgid "Delay before start"
msgstr "Затрымка перад запускам"
-#: ../clutter/clutter-timeline.c:592
-#: ../clutter/deprecated/clutter-animation.c:544
-#: ../clutter/deprecated/clutter-animator.c:1803
+#: ../clutter/clutter-timeline.c:624
+#: ../clutter/deprecated/clutter-animation.c:541
+#: ../clutter/deprecated/clutter-animator.c:1801
#: ../clutter/deprecated/clutter-media.c:224
-#: ../clutter/deprecated/clutter-state.c:1522
+#: ../clutter/deprecated/clutter-state.c:1517
msgid "Duration"
msgstr "Працягласць"
-#: ../clutter/clutter-timeline.c:593
+#: ../clutter/clutter-timeline.c:625
msgid "Duration of the timeline in milliseconds"
msgstr "Працягласць часавай шкалы ў мілісекундах"
-#: ../clutter/clutter-timeline.c:608
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:528
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:337
+#: ../clutter/clutter-timeline.c:640
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:521
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:330
msgid "Direction"
msgstr "Кірунак"
-#: ../clutter/clutter-timeline.c:609
+#: ../clutter/clutter-timeline.c:641
msgid "Direction of the timeline"
msgstr "Кірунак часавай шкалы"
-#: ../clutter/clutter-timeline.c:624
+#: ../clutter/clutter-timeline.c:656
msgid "Auto Reverse"
msgstr "Аўтаматычны рэверс"
-#: ../clutter/clutter-timeline.c:625
+#: ../clutter/clutter-timeline.c:657
msgid "Whether the direction should be reversed when reaching the end"
msgstr "Ці трэба ўключаць адваротны кірунак пры дасягненні канца"
-#: ../clutter/clutter-timeline.c:643
+#: ../clutter/clutter-timeline.c:675
msgid "Repeat Count"
msgstr "Колькасць паўтораў"
-#: ../clutter/clutter-timeline.c:644
+#: ../clutter/clutter-timeline.c:676
msgid "How many times the timeline should repeat"
msgstr "Колькі разоў трэба паўтараць часавую шкалу"
-#: ../clutter/clutter-timeline.c:658
+#: ../clutter/clutter-timeline.c:690
msgid "Progress Mode"
msgstr "Рэжым прагрэсу"
-#: ../clutter/clutter-timeline.c:659
+#: ../clutter/clutter-timeline.c:691
msgid "How the timeline should compute the progress"
msgstr "Як часавая шкала разлічвае прагрэс"
-#: ../clutter/clutter-transition.c:246
+#: ../clutter/clutter-transition.c:244
msgid "Interval"
msgstr "Інтэрвал"
-#: ../clutter/clutter-transition.c:247
+#: ../clutter/clutter-transition.c:245
msgid "The interval of values to transition"
msgstr "Інтэрвал значэнняў пераходу"
-#: ../clutter/clutter-transition.c:261
+#: ../clutter/clutter-transition.c:259
msgid "Animatable"
msgstr "Магчыма анімацыя"
-#: ../clutter/clutter-transition.c:262
+#: ../clutter/clutter-transition.c:260
msgid "The animatable object"
msgstr "Аб'ект з магчымасцю анімацыі"
-#: ../clutter/clutter-transition.c:283
+#: ../clutter/clutter-transition.c:281
msgid "Remove on Complete"
msgstr "Выдаліць па заканчэнні"
-#: ../clutter/clutter-transition.c:284
+#: ../clutter/clutter-transition.c:282
msgid "Detach the transition when completed"
msgstr "Адлучыць пераход па заканчэнні"
-#: ../clutter/clutter-zoom-action.c:353
+#: ../clutter/clutter-zoom-action.c:354
msgid "Zoom Axis"
msgstr "Вось маштабавання"
-#: ../clutter/clutter-zoom-action.c:354
+#: ../clutter/clutter-zoom-action.c:355
msgid "Constraints the zoom to an axis"
msgstr "Абмяжоўвае маштабаванне пэўнай воссю"
-#: ../clutter/deprecated/clutter-alpha.c:355
-#: ../clutter/deprecated/clutter-animation.c:575
-#: ../clutter/deprecated/clutter-animator.c:1820
+#: ../clutter/deprecated/clutter-alpha.c:354
+#: ../clutter/deprecated/clutter-animation.c:572
+#: ../clutter/deprecated/clutter-animator.c:1818
msgid "Timeline"
msgstr "Часавая шкала"
-#: ../clutter/deprecated/clutter-alpha.c:356
+#: ../clutter/deprecated/clutter-alpha.c:355
msgid "Timeline used by the alpha"
msgstr "Часавая шкала для альфы"
-#: ../clutter/deprecated/clutter-alpha.c:372
+#: ../clutter/deprecated/clutter-alpha.c:371
msgid "Alpha value"
msgstr "Значэнне альфы"
-#: ../clutter/deprecated/clutter-alpha.c:373
+#: ../clutter/deprecated/clutter-alpha.c:372
msgid "Alpha value as computed by the alpha"
msgstr "Значэнне альфы як злічанае з дапамогай альфы"
-#: ../clutter/deprecated/clutter-alpha.c:394
-#: ../clutter/deprecated/clutter-animation.c:528
+#: ../clutter/deprecated/clutter-alpha.c:393
+#: ../clutter/deprecated/clutter-animation.c:525
msgid "Mode"
msgstr "Рэжым"
-#: ../clutter/deprecated/clutter-alpha.c:395
+#: ../clutter/deprecated/clutter-alpha.c:394
msgid "Progress mode"
msgstr "Рэжым прагрэсу"
-#: ../clutter/deprecated/clutter-animation.c:511
+#: ../clutter/deprecated/clutter-animation.c:508
msgid "Object"
msgstr "Аб'ект"
-#: ../clutter/deprecated/clutter-animation.c:512
+#: ../clutter/deprecated/clutter-animation.c:509
msgid "Object to which the animation applies"
msgstr "Аб'ект, да якога ўжыта анімацыя"
-#: ../clutter/deprecated/clutter-animation.c:529
+#: ../clutter/deprecated/clutter-animation.c:526
msgid "The mode of the animation"
msgstr "Рэжым анімацыі"
-#: ../clutter/deprecated/clutter-animation.c:545
+#: ../clutter/deprecated/clutter-animation.c:542
msgid "Duration of the animation, in milliseconds"
msgstr "Працягласць анімацыі, у мілісекундах"
-#: ../clutter/deprecated/clutter-animation.c:561
+#: ../clutter/deprecated/clutter-animation.c:558
msgid "Whether the animation should loop"
msgstr "Ці паўтараць анімацыю ў цыкле"
-#: ../clutter/deprecated/clutter-animation.c:576
+#: ../clutter/deprecated/clutter-animation.c:573
msgid "The timeline used by the animation"
msgstr "Часавая шкала для анімацыі"
-#: ../clutter/deprecated/clutter-animation.c:592
-#: ../clutter/deprecated/clutter-behaviour.c:241
+#: ../clutter/deprecated/clutter-animation.c:589
+#: ../clutter/deprecated/clutter-behaviour.c:237
msgid "Alpha"
msgstr "Альфа"
-#: ../clutter/deprecated/clutter-animation.c:593
+#: ../clutter/deprecated/clutter-animation.c:590
msgid "The alpha used by the animation"
msgstr "Альфа для анімацыі"
-#: ../clutter/deprecated/clutter-animator.c:1804
+#: ../clutter/deprecated/clutter-animator.c:1802
msgid "The duration of the animation"
msgstr "Працягласць анімацыі"
-#: ../clutter/deprecated/clutter-animator.c:1821
+#: ../clutter/deprecated/clutter-animator.c:1819
msgid "The timeline of the animation"
msgstr "Часавая шкала анімацыі"
-#: ../clutter/deprecated/clutter-behaviour.c:242
+#: ../clutter/deprecated/clutter-behaviour.c:238
msgid "Alpha Object to drive the behaviour"
msgstr "Альфа-аб'ект для кіравання паводзінамі"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:182
+#: ../clutter/deprecated/clutter-behaviour-depth.c:180
msgid "Start Depth"
msgstr "Пачатковая глыбіня"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:183
+#: ../clutter/deprecated/clutter-behaviour-depth.c:181
msgid "Initial depth to apply"
msgstr "Пачатковая глыбіня"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:198
+#: ../clutter/deprecated/clutter-behaviour-depth.c:196
msgid "End Depth"
msgstr "Канчатковая глыбіня"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:199
+#: ../clutter/deprecated/clutter-behaviour-depth.c:197
msgid "Final depth to apply"
msgstr "Канчатковая глыбіня"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:401
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:394
msgid "Start Angle"
msgstr "Пачатковы вугал"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:402
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:284
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:395
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:277
msgid "Initial angle"
msgstr "Пачатковы вугал"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:417
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:410
msgid "End Angle"
msgstr "Канчатковы вугал"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:418
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:302
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:411
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:295
msgid "Final angle"
msgstr "Канчатковы вугал"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:433
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:426
msgid "Angle x tilt"
msgstr "Вугал X-нахілу"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:434
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:427
msgid "Tilt of the ellipse around x axis"
msgstr "Нахіл эліпса па X-восі"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:449
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:442
msgid "Angle y tilt"
msgstr "Вугал Y-нахілу"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:450
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:443
msgid "Tilt of the ellipse around y axis"
msgstr "Нахіл эліпса па Y-восі"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:465
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:458
msgid "Angle z tilt"
msgstr "Вугал Z-нахілу"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:466
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:459
msgid "Tilt of the ellipse around z axis"
msgstr "Нахіл эліпса па Z-восі"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:482
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:475
msgid "Width of the ellipse"
msgstr "Шырыня эліпса"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:498
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:491
msgid "Height of ellipse"
msgstr "Вышыня эліпса"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:513
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:506
msgid "Center"
msgstr "Цэнтр"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:514
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:507
msgid "Center of ellipse"
msgstr "Цэнтр эліпса"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:529
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:338
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:522
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:331
msgid "Direction of rotation"
msgstr "Кірунак кручэння"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:184
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:177
msgid "Opacity Start"
msgstr "Пачатковая непразрыстасць"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:185
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:178
msgid "Initial opacity level"
msgstr "Пачатковы ўзровень непразрыстасці"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:202
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:195
msgid "Opacity End"
msgstr "Канчатковая непразрыстасць"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:203
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:196
msgid "Final opacity level"
msgstr "Канчатковы ўзровень непразрыстасці"
-#: ../clutter/deprecated/clutter-behaviour-path.c:226
+#: ../clutter/deprecated/clutter-behaviour-path.c:222
msgid "The ClutterPath object representing the path to animate along"
msgstr "Аб'ект ClutterPath, які прадстаўляе сцежку для анімацыі"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:283
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:276
msgid "Angle Begin"
msgstr "Пачатковы вугал"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:301
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:294
msgid "Angle End"
msgstr "Канчатковы вугал"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:319
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:312
msgid "Axis"
msgstr "Вось"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:320
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:313
msgid "Axis of rotation"
msgstr "Вось кручэння"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:355
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:348
msgid "Center X"
msgstr "Цэнтр X-восі"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:356
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:349
msgid "X coordinate of the center of rotation"
msgstr "X-каардыната цэнтра кручэння"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:373
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:366
msgid "Center Y"
msgstr "Цэнтр Y-восі"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:374
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:367
msgid "Y coordinate of the center of rotation"
msgstr "Y-каардыната цэнтра кручэння"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:391
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:384
msgid "Center Z"
msgstr "Цэнтр Z-восі"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:392
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:385
msgid "Z coordinate of the center of rotation"
msgstr "Z-каардыната цэнтра кручэння"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:226
+#: ../clutter/deprecated/clutter-behaviour-scale.c:222
msgid "X Start Scale"
msgstr "Пачатковы X-маштаб"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:227
+#: ../clutter/deprecated/clutter-behaviour-scale.c:223
msgid "Initial scale on the X axis"
msgstr "Пачатковы маштаб па X-восі"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:245
+#: ../clutter/deprecated/clutter-behaviour-scale.c:241
msgid "X End Scale"
msgstr "Канчатковы X-маштаб"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:246
+#: ../clutter/deprecated/clutter-behaviour-scale.c:242
msgid "Final scale on the X axis"
msgstr "Канчатковы маштаб па X-восі"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:264
+#: ../clutter/deprecated/clutter-behaviour-scale.c:260
msgid "Y Start Scale"
msgstr "Пачатковы Y-маштаб"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:265
+#: ../clutter/deprecated/clutter-behaviour-scale.c:261
msgid "Initial scale on the Y axis"
msgstr "Пачатковы маштаб па Y-восі"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:283
+#: ../clutter/deprecated/clutter-behaviour-scale.c:279
msgid "Y End Scale"
msgstr "Канчатковы Y-маштаб"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:284
+#: ../clutter/deprecated/clutter-behaviour-scale.c:280
msgid "Final scale on the Y axis"
msgstr "Канчатковы маштаб па Y-восі"
-#: ../clutter/deprecated/clutter-box.c:261
+#: ../clutter/deprecated/clutter-box.c:257
msgid "The background color of the box"
msgstr "Фонавы колер рамкі"
-#: ../clutter/deprecated/clutter-box.c:274
+#: ../clutter/deprecated/clutter-box.c:270
msgid "Color Set"
msgstr "Выбраны колер"
-#: ../clutter/deprecated/clutter-cairo-texture.c:597
+#: ../clutter/deprecated/clutter-cairo-texture.c:593
msgid "Surface Width"
msgstr "Шырыня паверхні"
-#: ../clutter/deprecated/clutter-cairo-texture.c:598
+#: ../clutter/deprecated/clutter-cairo-texture.c:594
msgid "The width of the Cairo surface"
msgstr "Шырыня паверхні Cairo"
-#: ../clutter/deprecated/clutter-cairo-texture.c:615
+#: ../clutter/deprecated/clutter-cairo-texture.c:611
msgid "Surface Height"
msgstr "Вышыня паверхні"
-#: ../clutter/deprecated/clutter-cairo-texture.c:616
+#: ../clutter/deprecated/clutter-cairo-texture.c:612
msgid "The height of the Cairo surface"
msgstr "Вышыня паверхні Cairo"
-#: ../clutter/deprecated/clutter-cairo-texture.c:636
+#: ../clutter/deprecated/clutter-cairo-texture.c:632
msgid "Auto Resize"
msgstr "Аўтаматычнае змяненне памераў"
-#: ../clutter/deprecated/clutter-cairo-texture.c:637
+#: ../clutter/deprecated/clutter-cairo-texture.c:633
msgid "Whether the surface should match the allocation"
msgstr "Ці павінна паверхня адпавядаць размеркаванню"
@@ -2381,101 +2394,101 @@ msgstr "Узровень запаўнення буфера"
msgid "The duration of the stream, in seconds"
msgstr "Працягласць струменя, у секундах"
-#: ../clutter/deprecated/clutter-rectangle.c:274
+#: ../clutter/deprecated/clutter-rectangle.c:271
msgid "The color of the rectangle"
msgstr "Колер прамавугольніка"
-#: ../clutter/deprecated/clutter-rectangle.c:287
+#: ../clutter/deprecated/clutter-rectangle.c:284
msgid "Border Color"
msgstr "Колер аблямоўкі"
-#: ../clutter/deprecated/clutter-rectangle.c:288
+#: ../clutter/deprecated/clutter-rectangle.c:285
msgid "The color of the border of the rectangle"
msgstr "Колер аблямоўкі прамавугольніка"
-#: ../clutter/deprecated/clutter-rectangle.c:303
+#: ../clutter/deprecated/clutter-rectangle.c:300
msgid "Border Width"
msgstr "Шырыня аблямоўкі"
-#: ../clutter/deprecated/clutter-rectangle.c:304
+#: ../clutter/deprecated/clutter-rectangle.c:301
msgid "The width of the border of the rectangle"
msgstr "Шырыня аблямоўкі прамавугольніка"
-#: ../clutter/deprecated/clutter-rectangle.c:318
+#: ../clutter/deprecated/clutter-rectangle.c:315
msgid "Has Border"
msgstr "Мае аблямоўку"
-#: ../clutter/deprecated/clutter-rectangle.c:319
+#: ../clutter/deprecated/clutter-rectangle.c:316
msgid "Whether the rectangle should have a border"
msgstr "Ці прамавугольнік мусіць мець аблямоўку"
-#: ../clutter/deprecated/clutter-shader.c:261
+#: ../clutter/deprecated/clutter-shader.c:257
msgid "Vertex Source"
msgstr "Крыніца вяршыні"
-#: ../clutter/deprecated/clutter-shader.c:262
+#: ../clutter/deprecated/clutter-shader.c:258
msgid "Source of vertex shader"
msgstr "Крыніца вяршыннага шэйдара"
-#: ../clutter/deprecated/clutter-shader.c:278
+#: ../clutter/deprecated/clutter-shader.c:274
msgid "Fragment Source"
msgstr "Крыніца фрагмента"
-#: ../clutter/deprecated/clutter-shader.c:279
+#: ../clutter/deprecated/clutter-shader.c:275
msgid "Source of fragment shader"
msgstr "Крыніца фрагментавага шэйдара"
-#: ../clutter/deprecated/clutter-shader.c:296
+#: ../clutter/deprecated/clutter-shader.c:292
msgid "Compiled"
msgstr "Скампіляваны"
-#: ../clutter/deprecated/clutter-shader.c:297
+#: ../clutter/deprecated/clutter-shader.c:293
msgid "Whether the shader is compiled and linked"
msgstr "Ці шэйдар скампіляваны і злінкаваны"
-#: ../clutter/deprecated/clutter-shader.c:314
+#: ../clutter/deprecated/clutter-shader.c:310
msgid "Whether the shader is enabled"
msgstr "Ці шэйдар уключаны"
-#: ../clutter/deprecated/clutter-shader.c:525
+#: ../clutter/deprecated/clutter-shader.c:521
#, c-format
msgid "%s compilation failed: %s"
msgstr "Кампіляцыя %s была няўдалай: %s"
-#: ../clutter/deprecated/clutter-shader.c:526
+#: ../clutter/deprecated/clutter-shader.c:522
msgid "Vertex shader"
msgstr "Вяршынны шэйдар"
-#: ../clutter/deprecated/clutter-shader.c:527
+#: ../clutter/deprecated/clutter-shader.c:523
msgid "Fragment shader"
msgstr "Фрагментавы шэйдар"
-#: ../clutter/deprecated/clutter-state.c:1504
+#: ../clutter/deprecated/clutter-state.c:1499
msgid "State"
msgstr "Стан"
-#: ../clutter/deprecated/clutter-state.c:1505
+#: ../clutter/deprecated/clutter-state.c:1500
msgid "Currently set state, (transition to this state might not be complete)"
msgstr "Бягучы стан (пераход да гэтага стану можа быць няпоўным)"
-#: ../clutter/deprecated/clutter-state.c:1523
+#: ../clutter/deprecated/clutter-state.c:1518
msgid "Default transition duration"
msgstr "Прадвызначаная працягласць пераходу"
-#: ../clutter/deprecated/clutter-texture.c:994
+#: ../clutter/deprecated/clutter-texture.c:992
msgid "Sync size of actor"
msgstr "Сінхранізаваць памер актара"
-#: ../clutter/deprecated/clutter-texture.c:995
+#: ../clutter/deprecated/clutter-texture.c:993
msgid "Auto sync size of actor to underlying pixbuf dimensions"
msgstr ""
"Аўтаматычная сінхранізацыя памеру актара з адпаведным растравым буферам"
-#: ../clutter/deprecated/clutter-texture.c:1002
+#: ../clutter/deprecated/clutter-texture.c:1000
msgid "Disable Slicing"
msgstr "Выключыць нарэзку"
-#: ../clutter/deprecated/clutter-texture.c:1003
+#: ../clutter/deprecated/clutter-texture.c:1001
msgid ""
"Forces the underlying texture to be singular and not made of smaller space "
"saving individual textures"
@@ -2483,95 +2496,95 @@ msgstr ""
"Забараняе раскладанне адпаведнай структуры на меншыя асобныя тэкстуры, "
"эфектыўныя ў плане выкарыстання памяці"
-#: ../clutter/deprecated/clutter-texture.c:1012
+#: ../clutter/deprecated/clutter-texture.c:1010
msgid "Tile Waste"
msgstr "Рэшта кафлі"
-#: ../clutter/deprecated/clutter-texture.c:1013
+#: ../clutter/deprecated/clutter-texture.c:1011
msgid "Maximum waste area of a sliced texture"
msgstr "Максімальная лішняя плошча раскладзенай тэкстуры"
-#: ../clutter/deprecated/clutter-texture.c:1021
+#: ../clutter/deprecated/clutter-texture.c:1019
msgid "Horizontal repeat"
msgstr "Гарызантальны паўтор"
-#: ../clutter/deprecated/clutter-texture.c:1022
+#: ../clutter/deprecated/clutter-texture.c:1020
msgid "Repeat the contents rather than scaling them horizontally"
msgstr "Паўтараць змесціва замест яго гарызантальнага маштабавання"
-#: ../clutter/deprecated/clutter-texture.c:1029
+#: ../clutter/deprecated/clutter-texture.c:1027
msgid "Vertical repeat"
msgstr "Вертыкальны паўтор"
-#: ../clutter/deprecated/clutter-texture.c:1030
+#: ../clutter/deprecated/clutter-texture.c:1028
msgid "Repeat the contents rather than scaling them vertically"
msgstr "Паўтараць змесціва замест яго вертыкальнага маштабавання"
-#: ../clutter/deprecated/clutter-texture.c:1037
+#: ../clutter/deprecated/clutter-texture.c:1035
msgid "Filter Quality"
msgstr "Якасць фільтра"
-#: ../clutter/deprecated/clutter-texture.c:1038
+#: ../clutter/deprecated/clutter-texture.c:1036
msgid "Rendering quality used when drawing the texture"
msgstr "Якасць выяўлення пры маляванні тэкстуры"
-#: ../clutter/deprecated/clutter-texture.c:1046
+#: ../clutter/deprecated/clutter-texture.c:1044
msgid "Pixel Format"
msgstr "Фармат пікселаў"
-#: ../clutter/deprecated/clutter-texture.c:1047
+#: ../clutter/deprecated/clutter-texture.c:1045
msgid "The Cogl pixel format to use"
msgstr "Фармат пікселаў Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1055
-#: ../clutter/wayland/clutter-wayland-surface.c:449
+#: ../clutter/deprecated/clutter-texture.c:1053
+#: ../clutter/wayland/clutter-wayland-surface.c:445
msgid "Cogl Texture"
msgstr "Тэкстура Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1056
-#: ../clutter/wayland/clutter-wayland-surface.c:450
+#: ../clutter/deprecated/clutter-texture.c:1054
+#: ../clutter/wayland/clutter-wayland-surface.c:446
msgid "The underlying Cogl texture handle used to draw this actor"
msgstr "Дзяржак адпаведнай тэкстуры Cogl, ужытай для малявання гэтага актара"
-#: ../clutter/deprecated/clutter-texture.c:1063
+#: ../clutter/deprecated/clutter-texture.c:1061
msgid "Cogl Material"
msgstr "Матэрыял Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1064
+#: ../clutter/deprecated/clutter-texture.c:1062
msgid "The underlying Cogl material handle used to draw this actor"
msgstr ""
"Дзяржак адпаведнага матэрыялу Cogl, ужытага для малявання гэтага актара"
-#: ../clutter/deprecated/clutter-texture.c:1083
+#: ../clutter/deprecated/clutter-texture.c:1081
msgid "The path of the file containing the image data"
msgstr "Сцежка да файла, які змяшчае даныя выявы"
-#: ../clutter/deprecated/clutter-texture.c:1090
+#: ../clutter/deprecated/clutter-texture.c:1088
msgid "Keep Aspect Ratio"
msgstr "Захоўваць прапорцыі"
-#: ../clutter/deprecated/clutter-texture.c:1091
+#: ../clutter/deprecated/clutter-texture.c:1089
msgid ""
"Keep the aspect ratio of the texture when requesting the preferred width or "
"height"
msgstr "Захоўваць прапорцыі тэкстуры пры запыце пажаданай шырыні ці вышыні"
-#: ../clutter/deprecated/clutter-texture.c:1119
+#: ../clutter/deprecated/clutter-texture.c:1117
msgid "Load asynchronously"
msgstr "Асінхронная загрузка"
-#: ../clutter/deprecated/clutter-texture.c:1120
+#: ../clutter/deprecated/clutter-texture.c:1118
msgid ""
"Load files inside a thread to avoid blocking when loading images from disk"
msgstr ""
"Загружаць файлы ў асобнай ніці, каб пазбегнуць блакіравання пры загрузцы "
"выяў з дыска"
-#: ../clutter/deprecated/clutter-texture.c:1138
+#: ../clutter/deprecated/clutter-texture.c:1136
msgid "Load data asynchronously"
msgstr "Асінхронная загрузка даных"
-#: ../clutter/deprecated/clutter-texture.c:1139
+#: ../clutter/deprecated/clutter-texture.c:1137
msgid ""
"Decode image data files inside a thread to reduce blocking when loading "
"images from disk"
@@ -2579,193 +2592,193 @@ msgstr ""
"Дэкадаваць файлы ў асобнай ніці, каб скараціць блакіраванне пры загрузцы "
"выяў з дыска"
-#: ../clutter/deprecated/clutter-texture.c:1165
+#: ../clutter/deprecated/clutter-texture.c:1163
msgid "Pick With Alpha"
msgstr "Выбіраць разам з альфай"
-#: ../clutter/deprecated/clutter-texture.c:1166
+#: ../clutter/deprecated/clutter-texture.c:1164
msgid "Shape actor with alpha channel when picking"
msgstr "Пры выбары фармаваць актара разам з альфа-каналам"
-#: ../clutter/deprecated/clutter-texture.c:1599
-#: ../clutter/deprecated/clutter-texture.c:1994
-#: ../clutter/deprecated/clutter-texture.c:2090
-#: ../clutter/deprecated/clutter-texture.c:2388
+#: ../clutter/deprecated/clutter-texture.c:1597
+#: ../clutter/deprecated/clutter-texture.c:1992
+#: ../clutter/deprecated/clutter-texture.c:2088
+#: ../clutter/deprecated/clutter-texture.c:2386
#, c-format
msgid "Failed to load the image data"
msgstr "Не ўдалося загрузіць даныя выявы"
-#: ../clutter/deprecated/clutter-texture.c:1758
+#: ../clutter/deprecated/clutter-texture.c:1756
#, c-format
msgid "YUV textures are not supported"
msgstr "YUV-тэкстуры не падтрымліваюцца"
-#: ../clutter/deprecated/clutter-texture.c:1767
+#: ../clutter/deprecated/clutter-texture.c:1765
#, c-format
msgid "YUV2 textues are not supported"
msgstr "YUV2-тэкстуры не падтрымліваюцца"
-#: ../clutter/evdev/clutter-input-device-evdev.c:159
+#: ../clutter/evdev/clutter-input-device-evdev.c:154
msgid "sysfs Path"
msgstr "Сцежка sysfs"
-#: ../clutter/evdev/clutter-input-device-evdev.c:160
+#: ../clutter/evdev/clutter-input-device-evdev.c:155
msgid "Path of the device in sysfs"
msgstr "Сцежка прыстасавання ў sysfs"
-#: ../clutter/evdev/clutter-input-device-evdev.c:175
+#: ../clutter/evdev/clutter-input-device-evdev.c:170
msgid "Device Path"
msgstr "Сцежка прыстасавання"
-#: ../clutter/evdev/clutter-input-device-evdev.c:176
+#: ../clutter/evdev/clutter-input-device-evdev.c:171
msgid "Path of the device node"
msgstr "Сцежка вузла прыстасавання"
-#: ../clutter/gdk/clutter-backend-gdk.c:296
+#: ../clutter/gdk/clutter-backend-gdk.c:289
#, c-format
msgid "Could not find a suitable CoglWinsys for a GdkDisplay of type %s"
msgstr "Не ўдалося знайсці адпаведны CoglWinsys для GdkDisplay тыпу %s"
-#: ../clutter/wayland/clutter-wayland-surface.c:423
+#: ../clutter/wayland/clutter-wayland-surface.c:419
msgid "Surface"
msgstr "Паверхня"
-#: ../clutter/wayland/clutter-wayland-surface.c:424
+#: ../clutter/wayland/clutter-wayland-surface.c:420
msgid "The underlying wayland surface"
msgstr "Адпаведная паверхня Wayland"
-#: ../clutter/wayland/clutter-wayland-surface.c:431
+#: ../clutter/wayland/clutter-wayland-surface.c:427
msgid "Surface width"
msgstr "Шырыня паверхні"
-#: ../clutter/wayland/clutter-wayland-surface.c:432
+#: ../clutter/wayland/clutter-wayland-surface.c:428
msgid "The width of the underlying wayland surface"
msgstr "Шырыня адпаведнай паверхні Wayland"
-#: ../clutter/wayland/clutter-wayland-surface.c:440
+#: ../clutter/wayland/clutter-wayland-surface.c:436
msgid "Surface height"
msgstr "Вышыня паверхні"
-#: ../clutter/wayland/clutter-wayland-surface.c:441
+#: ../clutter/wayland/clutter-wayland-surface.c:437
msgid "The height of the underlying wayland surface"
msgstr "Вышыня адпаведнай паверхні Wayland"
-#: ../clutter/x11/clutter-backend-x11.c:516
+#: ../clutter/x11/clutter-backend-x11.c:488
msgid "X display to use"
msgstr "Патрэбны X-дысплей"
-#: ../clutter/x11/clutter-backend-x11.c:522
+#: ../clutter/x11/clutter-backend-x11.c:494
msgid "X screen to use"
msgstr "Патрэбны X-экран"
-#: ../clutter/x11/clutter-backend-x11.c:527
+#: ../clutter/x11/clutter-backend-x11.c:499
msgid "Make X calls synchronous"
msgstr "Рабіць X-выклікі сінхронна"
-#: ../clutter/x11/clutter-backend-x11.c:534
-msgid "Enable XInput support"
-msgstr "Уключыць падтрымку XInput"
+#: ../clutter/x11/clutter-backend-x11.c:506
+msgid "Disable XInput support"
+msgstr "Выключыць падтрымку XInput"
-#: ../clutter/x11/clutter-keymap-x11.c:317
+#: ../clutter/x11/clutter-keymap-x11.c:322
msgid "The Clutter backend"
msgstr "Праграмны драйвер Clutter"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:539
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:534
msgid "Pixmap"
msgstr "Растравая выява"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:540
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:535
msgid "The X11 Pixmap to be bound"
msgstr "Растравая выява X11 для прывязкі"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:548
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:543
msgid "Pixmap width"
msgstr "Шырыня растравай выявы"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:549
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:544
msgid "The width of the pixmap bound to this texture"
msgstr "Шырыня растравай выявы, звязанай з гэтай тэкстурай"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:557
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:552
msgid "Pixmap height"
msgstr "Вышыня растравай выявы"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:558
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:553
msgid "The height of the pixmap bound to this texture"
msgstr "Вышыня растравай выявы, звязанай з гэтай тэкстурай"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:566
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:561
msgid "Pixmap Depth"
msgstr "Глыбіня растравай выявы"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:567
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:562
msgid "The depth (in number of bits) of the pixmap bound to this texture"
msgstr "Глыбіня растравай выявы, звязанай з гэтай тэкстурай, у бітах"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:575
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:570
msgid "Automatic Updates"
msgstr "Аўтаматычныя абнаўленні"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:576
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:571
msgid "If the texture should be kept in sync with any pixmap changes."
msgstr ""
"Ці павінна падтрымлівацца сінхранізацыя тэкстуры з любымі зменамі растравай "
"выявы."
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:584
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:579
msgid "Window"
msgstr "Акно"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:585
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:580
msgid "The X11 Window to be bound"
msgstr "X11-акно для прывязкі"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:593
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:588
msgid "Window Redirect Automatic"
msgstr "Аўтаматычнае перанакіраванне акна"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:594
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:589
msgid "If composite window redirects are set to Automatic (or Manual if false)"
msgstr ""
"Ці кампазітныя перанакіраванні вокнаў настаўленыя ў аўтаматычны рэжым (ці ў "
"ручны, калі выключана)"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:604
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:599
msgid "Window Mapped"
msgstr "Адлюстраванае акно"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:605
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:600
msgid "If window is mapped"
msgstr "Ці акно адлюстравана"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:614
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:609
msgid "Destroyed"
msgstr "Знішчана"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:615
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:610
msgid "If window has been destroyed"
msgstr "Ці акно было знішчана"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:623
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:618
msgid "Window X"
msgstr "X-каардыната акна"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:624
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:619
msgid "X position of window on screen according to X11"
msgstr "X-пазіцыя акна на экране згодна з X11"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:632
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:627
msgid "Window Y"
msgstr "Y-каардыната акна"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:633
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:628
msgid "Y position of window on screen according to X11"
msgstr "Y-пазіцыя акна на экране згодна з X11"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:640
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:635
msgid "Window Override Redirect"
msgstr "Акно засланяе перанакіраванні"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:641
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:636
msgid "If this is an override-redirect window"
msgstr "Ці гэта акно засланяе перанакіраванні (override-redirect window)"
diff --git a/po/ca.po b/po/ca.po
index 03d54c5a3..dd478dc18 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,702 +9,702 @@ msgstr ""
"Project-Id-Version: clutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=clutter&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2013-02-21 00:39+0000\n"
-"PO-Revision-Date: 2012-09-21 21:34+0200\n"
-"Last-Translator: Gil Forcada \n"
+"POT-Creation-Date: 2014-05-01 15:08+0000\n"
+"PO-Revision-Date: 2014-03-21 05:55+0100\n"
+"Last-Translator: Pau Iranzo \n"
"Language-Team: Catalan \n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bits\n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: ../clutter/clutter-actor.c:6144
+#: ../clutter/clutter-actor.c:6224
msgid "X coordinate"
msgstr "Coordenada X"
-#: ../clutter/clutter-actor.c:6145
+#: ../clutter/clutter-actor.c:6225
msgid "X coordinate of the actor"
msgstr "Coordenada X de l'actor"
-#: ../clutter/clutter-actor.c:6163
+#: ../clutter/clutter-actor.c:6243
msgid "Y coordinate"
msgstr "Coordenada Y"
-#: ../clutter/clutter-actor.c:6164
+#: ../clutter/clutter-actor.c:6244
msgid "Y coordinate of the actor"
msgstr "Coordenada Y de l'actor"
-#: ../clutter/clutter-actor.c:6186
+#: ../clutter/clutter-actor.c:6266
msgid "Position"
msgstr "Posició"
-#: ../clutter/clutter-actor.c:6187
+#: ../clutter/clutter-actor.c:6267
msgid "The position of the origin of the actor"
msgstr "La posició de l'origen de l'actor"
-#: ../clutter/clutter-actor.c:6204 ../clutter/clutter-canvas.c:215
-#: ../clutter/clutter-grid-layout.c:1238
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:481
+#: ../clutter/clutter-actor.c:6284 ../clutter/clutter-canvas.c:247
+#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:474
msgid "Width"
msgstr "Amplada"
-#: ../clutter/clutter-actor.c:6205
+#: ../clutter/clutter-actor.c:6285
msgid "Width of the actor"
msgstr "Amplada de l'actor"
-#: ../clutter/clutter-actor.c:6223 ../clutter/clutter-canvas.c:231
-#: ../clutter/clutter-grid-layout.c:1245
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:497
+#: ../clutter/clutter-actor.c:6303 ../clutter/clutter-canvas.c:263
+#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:490
msgid "Height"
msgstr "Alçada"
-#: ../clutter/clutter-actor.c:6224
+#: ../clutter/clutter-actor.c:6304
msgid "Height of the actor"
msgstr "Alçada de l'actor"
-#: ../clutter/clutter-actor.c:6245
+#: ../clutter/clutter-actor.c:6325
msgid "Size"
msgstr "Mida"
-#: ../clutter/clutter-actor.c:6246
+#: ../clutter/clutter-actor.c:6326
msgid "The size of the actor"
msgstr "La mida de l'actor"
-#: ../clutter/clutter-actor.c:6264
+#: ../clutter/clutter-actor.c:6344
msgid "Fixed X"
msgstr "X fixada"
-#: ../clutter/clutter-actor.c:6265
+#: ../clutter/clutter-actor.c:6345
msgid "Forced X position of the actor"
msgstr "Posició X forçada de l'actor"
-#: ../clutter/clutter-actor.c:6282
+#: ../clutter/clutter-actor.c:6362
msgid "Fixed Y"
msgstr "Y fixada"
-#: ../clutter/clutter-actor.c:6283
+#: ../clutter/clutter-actor.c:6363
msgid "Forced Y position of the actor"
msgstr "Posició Y forçada de l'actor"
-#: ../clutter/clutter-actor.c:6298
+#: ../clutter/clutter-actor.c:6378
msgid "Fixed position set"
msgstr "Ús de la posició fixa"
-#: ../clutter/clutter-actor.c:6299
+#: ../clutter/clutter-actor.c:6379
msgid "Whether to use fixed positioning for the actor"
msgstr "Si s'ha d'utilitzar el posicionament fixat per a l'actor"
-#: ../clutter/clutter-actor.c:6317
+#: ../clutter/clutter-actor.c:6397
msgid "Min Width"
msgstr "Amplada mínima"
-#: ../clutter/clutter-actor.c:6318
+#: ../clutter/clutter-actor.c:6398
msgid "Forced minimum width request for the actor"
-msgstr "Amplada mínima forçada soŀlicitada per l'actor"
+msgstr "Amplada mínima forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6336
+#: ../clutter/clutter-actor.c:6416
msgid "Min Height"
msgstr "Alçada mínima"
-#: ../clutter/clutter-actor.c:6337
+#: ../clutter/clutter-actor.c:6417
msgid "Forced minimum height request for the actor"
-msgstr "Alçada mínima forçada soŀlicitada per l'actor"
+msgstr "Alçada mínima forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6355
+#: ../clutter/clutter-actor.c:6435
msgid "Natural Width"
msgstr "Amplada natural"
-#: ../clutter/clutter-actor.c:6356
+#: ../clutter/clutter-actor.c:6436
msgid "Forced natural width request for the actor"
-msgstr "Amplada natural forçada soŀlicitada per l'actor"
+msgstr "Amplada natural forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6374
+#: ../clutter/clutter-actor.c:6454
msgid "Natural Height"
msgstr "Alçada natural"
-#: ../clutter/clutter-actor.c:6375
+#: ../clutter/clutter-actor.c:6455
msgid "Forced natural height request for the actor"
-msgstr "Alçada natural forçada soŀlicitada per l'actor"
+msgstr "Alçada natural forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6390
+#: ../clutter/clutter-actor.c:6470
msgid "Minimum width set"
msgstr "Ús de l'amplada mínima"
-#: ../clutter/clutter-actor.c:6391
+#: ../clutter/clutter-actor.c:6471
msgid "Whether to use the min-width property"
msgstr "Si s'ha d'utilitzar la propietat «amplada mínima»"
-#: ../clutter/clutter-actor.c:6405
+#: ../clutter/clutter-actor.c:6485
msgid "Minimum height set"
msgstr "Ús de l'alçada mínima"
-#: ../clutter/clutter-actor.c:6406
+#: ../clutter/clutter-actor.c:6486
msgid "Whether to use the min-height property"
msgstr "Si s'ha d'utilitzar la propietat «alçada mínima»"
-#: ../clutter/clutter-actor.c:6420
+#: ../clutter/clutter-actor.c:6500
msgid "Natural width set"
msgstr "Ús de l'amplada natural"
-#: ../clutter/clutter-actor.c:6421
+#: ../clutter/clutter-actor.c:6501
msgid "Whether to use the natural-width property"
msgstr "Si s'ha d'utilitzar la propietat «amplada natural»"
-#: ../clutter/clutter-actor.c:6435
+#: ../clutter/clutter-actor.c:6515
msgid "Natural height set"
msgstr "Ús de l'alçada natural"
-#: ../clutter/clutter-actor.c:6436
+#: ../clutter/clutter-actor.c:6516
msgid "Whether to use the natural-height property"
msgstr "Si s'ha d'utilitzar la propietat «alçada natural»"
-#: ../clutter/clutter-actor.c:6452
+#: ../clutter/clutter-actor.c:6532
msgid "Allocation"
msgstr "Ubicació"
-#: ../clutter/clutter-actor.c:6453
+#: ../clutter/clutter-actor.c:6533
msgid "The actor's allocation"
msgstr "La ubicació de l'actor"
-#: ../clutter/clutter-actor.c:6510
+#: ../clutter/clutter-actor.c:6590
msgid "Request Mode"
-msgstr "Mode soŀlicitat"
+msgstr "Mode sol·licitat"
-#: ../clutter/clutter-actor.c:6511
+#: ../clutter/clutter-actor.c:6591
msgid "The actor's request mode"
-msgstr "El mode soŀlicitat per l'actor"
+msgstr "El mode sol·licitat per l'actor"
-#: ../clutter/clutter-actor.c:6535
+#: ../clutter/clutter-actor.c:6615
msgid "Depth"
msgstr "Profunditat"
-#: ../clutter/clutter-actor.c:6536
+#: ../clutter/clutter-actor.c:6616
msgid "Position on the Z axis"
msgstr "Posició en l'eix de la Z"
-#: ../clutter/clutter-actor.c:6563
+#: ../clutter/clutter-actor.c:6643
msgid "Z Position"
msgstr "Posició Z"
-#: ../clutter/clutter-actor.c:6564
+#: ../clutter/clutter-actor.c:6644
msgid "The actor's position on the Z axis"
msgstr "La posició de l'actor en l'eix de la Z"
-#: ../clutter/clutter-actor.c:6581
+#: ../clutter/clutter-actor.c:6661
msgid "Opacity"
msgstr "Opacitat"
-#: ../clutter/clutter-actor.c:6582
+#: ../clutter/clutter-actor.c:6662
msgid "Opacity of an actor"
msgstr "Opacitat d'un actor"
-#: ../clutter/clutter-actor.c:6602
+#: ../clutter/clutter-actor.c:6682
msgid "Offscreen redirect"
msgstr "Redireccionament fora de pantalla"
-#: ../clutter/clutter-actor.c:6603
+#: ../clutter/clutter-actor.c:6683
msgid "Flags controlling when to flatten the actor into a single image"
msgstr ""
"Senyaladors que controlen quan s'ha d'aplanar l'actor a una sola imatge"
-#: ../clutter/clutter-actor.c:6617
+#: ../clutter/clutter-actor.c:6697
msgid "Visible"
msgstr "Visible"
-#: ../clutter/clutter-actor.c:6618
+#: ../clutter/clutter-actor.c:6698
msgid "Whether the actor is visible or not"
msgstr "Si l'actor és visible"
-#: ../clutter/clutter-actor.c:6632
+#: ../clutter/clutter-actor.c:6712
msgid "Mapped"
msgstr "Mapat"
-#: ../clutter/clutter-actor.c:6633
+#: ../clutter/clutter-actor.c:6713
msgid "Whether the actor will be painted"
msgstr "Si l'actor es pintarà"
-#: ../clutter/clutter-actor.c:6646
+#: ../clutter/clutter-actor.c:6726
msgid "Realized"
msgstr "Realitzat"
-#: ../clutter/clutter-actor.c:6647
+#: ../clutter/clutter-actor.c:6727
msgid "Whether the actor has been realized"
msgstr "Si l'actor s'ha realitzat"
-#: ../clutter/clutter-actor.c:6662
+#: ../clutter/clutter-actor.c:6742
msgid "Reactive"
msgstr "Reactiu"
-#: ../clutter/clutter-actor.c:6663
+#: ../clutter/clutter-actor.c:6743
msgid "Whether the actor is reactive to events"
msgstr "Si l'actor reacciona a esdeveniments"
-#: ../clutter/clutter-actor.c:6674
+#: ../clutter/clutter-actor.c:6754
msgid "Has Clip"
msgstr "Té un retallat"
-#: ../clutter/clutter-actor.c:6675
+#: ../clutter/clutter-actor.c:6755
msgid "Whether the actor has a clip set"
msgstr "Si l'actor té un retallat establert"
-#: ../clutter/clutter-actor.c:6688
+#: ../clutter/clutter-actor.c:6768
msgid "Clip"
msgstr "Retallat"
-#: ../clutter/clutter-actor.c:6689
+#: ../clutter/clutter-actor.c:6769
msgid "The clip region for the actor"
msgstr "La regió de retallat de l'actor"
-#: ../clutter/clutter-actor.c:6708
+#: ../clutter/clutter-actor.c:6788
msgid "Clip Rectangle"
msgstr "Rectangle retallat"
-#: ../clutter/clutter-actor.c:6709
+#: ../clutter/clutter-actor.c:6789
msgid "The visible region of the actor"
msgstr "La regió visible de l'actor"
-#: ../clutter/clutter-actor.c:6723 ../clutter/clutter-actor-meta.c:207
-#: ../clutter/clutter-binding-pool.c:319 ../clutter/clutter-input-device.c:258
+#: ../clutter/clutter-actor.c:6803 ../clutter/clutter-actor-meta.c:205
+#: ../clutter/clutter-binding-pool.c:318 ../clutter/clutter-input-device.c:247
msgid "Name"
msgstr "Nom"
-#: ../clutter/clutter-actor.c:6724
+#: ../clutter/clutter-actor.c:6804
msgid "Name of the actor"
msgstr "El nom de l'actor"
-#: ../clutter/clutter-actor.c:6745
+#: ../clutter/clutter-actor.c:6825
msgid "Pivot Point"
msgstr "Punt de pivotació"
-#: ../clutter/clutter-actor.c:6746
+#: ../clutter/clutter-actor.c:6826
msgid "The point around which the scaling and rotation occur"
msgstr "El punt sobre el qual es fa l'escalat i la rotació"
-#: ../clutter/clutter-actor.c:6764
+#: ../clutter/clutter-actor.c:6844
msgid "Pivot Point Z"
msgstr "El punt de pivotació sobre la Z"
-#: ../clutter/clutter-actor.c:6765
+#: ../clutter/clutter-actor.c:6845
msgid "Z component of the pivot point"
msgstr "Component Z del punt de pivotació"
-#: ../clutter/clutter-actor.c:6783
+#: ../clutter/clutter-actor.c:6863
msgid "Scale X"
msgstr "Escala X"
-#: ../clutter/clutter-actor.c:6784
+#: ../clutter/clutter-actor.c:6864
msgid "Scale factor on the X axis"
msgstr "El factor d'escala en l'eix de les X"
-#: ../clutter/clutter-actor.c:6802
+#: ../clutter/clutter-actor.c:6882
msgid "Scale Y"
msgstr "Escala Y"
-#: ../clutter/clutter-actor.c:6803
+#: ../clutter/clutter-actor.c:6883
msgid "Scale factor on the Y axis"
msgstr "El factor d'escala en l'eix de les Y"
-#: ../clutter/clutter-actor.c:6821
+#: ../clutter/clutter-actor.c:6901
msgid "Scale Z"
msgstr "Escala Z"
-#: ../clutter/clutter-actor.c:6822
+#: ../clutter/clutter-actor.c:6902
msgid "Scale factor on the Z axis"
msgstr "El factor d'escala en l'eix de les Z"
-#: ../clutter/clutter-actor.c:6840
+#: ../clutter/clutter-actor.c:6920
msgid "Scale Center X"
msgstr "Centre de l'escala X"
-#: ../clutter/clutter-actor.c:6841
+#: ../clutter/clutter-actor.c:6921
msgid "Horizontal scale center"
msgstr "Centre horitzontal de l'escala"
-#: ../clutter/clutter-actor.c:6859
+#: ../clutter/clutter-actor.c:6939
msgid "Scale Center Y"
msgstr "Centre de l'escala Y"
-#: ../clutter/clutter-actor.c:6860
+#: ../clutter/clutter-actor.c:6940
msgid "Vertical scale center"
msgstr "Centre vertical de l'escala"
-#: ../clutter/clutter-actor.c:6878
+#: ../clutter/clutter-actor.c:6958
msgid "Scale Gravity"
msgstr "Gravetat de l'escala"
-#: ../clutter/clutter-actor.c:6879
+#: ../clutter/clutter-actor.c:6959
msgid "The center of scaling"
msgstr "El centre de l'escalat"
-#: ../clutter/clutter-actor.c:6897
+#: ../clutter/clutter-actor.c:6977
msgid "Rotation Angle X"
msgstr "Angle de rotació X"
-#: ../clutter/clutter-actor.c:6898
+#: ../clutter/clutter-actor.c:6978
msgid "The rotation angle on the X axis"
msgstr "L'angle de rotació en l'eix de les X"
-#: ../clutter/clutter-actor.c:6916
+#: ../clutter/clutter-actor.c:6996
msgid "Rotation Angle Y"
msgstr "Angle de rotació Y"
-#: ../clutter/clutter-actor.c:6917
+#: ../clutter/clutter-actor.c:6997
msgid "The rotation angle on the Y axis"
msgstr "L'angle de rotació en l'eix de les Y"
-#: ../clutter/clutter-actor.c:6935
+#: ../clutter/clutter-actor.c:7015
msgid "Rotation Angle Z"
msgstr "Angle de rotació Z"
-#: ../clutter/clutter-actor.c:6936
+#: ../clutter/clutter-actor.c:7016
msgid "The rotation angle on the Z axis"
msgstr "L'angle de rotació en l'eix de les Z"
-#: ../clutter/clutter-actor.c:6954
+#: ../clutter/clutter-actor.c:7034
msgid "Rotation Center X"
msgstr "Centre de rotació X"
-#: ../clutter/clutter-actor.c:6955
+#: ../clutter/clutter-actor.c:7035
msgid "The rotation center on the X axis"
msgstr "El centre de rotació en l'eix de les X"
-#: ../clutter/clutter-actor.c:6972
+#: ../clutter/clutter-actor.c:7052
msgid "Rotation Center Y"
msgstr "Centre de rotació Y"
-#: ../clutter/clutter-actor.c:6973
+#: ../clutter/clutter-actor.c:7053
msgid "The rotation center on the Y axis"
msgstr "El centre de rotació en l'eix de les Y"
-#: ../clutter/clutter-actor.c:6990
+#: ../clutter/clutter-actor.c:7070
msgid "Rotation Center Z"
msgstr "Centre de rotació Z"
-#: ../clutter/clutter-actor.c:6991
+#: ../clutter/clutter-actor.c:7071
msgid "The rotation center on the Z axis"
msgstr "El centre de rotació en l'eix de les Z"
-#: ../clutter/clutter-actor.c:7008
+#: ../clutter/clutter-actor.c:7088
msgid "Rotation Center Z Gravity"
msgstr "Gravetat del centre de rotació Z"
-#: ../clutter/clutter-actor.c:7009
+#: ../clutter/clutter-actor.c:7089
msgid "Center point for rotation around the Z axis"
msgstr "Punt del centre de rotació al voltant de l'eix de les Z"
-#: ../clutter/clutter-actor.c:7037
+#: ../clutter/clutter-actor.c:7117
msgid "Anchor X"
msgstr "Àncora X"
-#: ../clutter/clutter-actor.c:7038
+#: ../clutter/clutter-actor.c:7118
msgid "X coordinate of the anchor point"
msgstr "Coordenada X del punt de l'àncora"
-#: ../clutter/clutter-actor.c:7066
+#: ../clutter/clutter-actor.c:7146
msgid "Anchor Y"
msgstr "Àncora Y"
-#: ../clutter/clutter-actor.c:7067
+#: ../clutter/clutter-actor.c:7147
msgid "Y coordinate of the anchor point"
msgstr "Coordenada Y del punt de l'àncora"
-#: ../clutter/clutter-actor.c:7094
+#: ../clutter/clutter-actor.c:7174
msgid "Anchor Gravity"
msgstr "Gravetat de l'àncora"
-#: ../clutter/clutter-actor.c:7095
+#: ../clutter/clutter-actor.c:7175
msgid "The anchor point as a ClutterGravity"
msgstr "El punt d'àncora com a «ClutterGravity»"
-#: ../clutter/clutter-actor.c:7114
+#: ../clutter/clutter-actor.c:7194
msgid "Translation X"
msgstr "Translació X"
-#: ../clutter/clutter-actor.c:7115
+#: ../clutter/clutter-actor.c:7195
msgid "Translation along the X axis"
msgstr "La translació en l'eix de les X"
-#: ../clutter/clutter-actor.c:7134
+#: ../clutter/clutter-actor.c:7214
msgid "Translation Y"
msgstr "Translació Y"
-#: ../clutter/clutter-actor.c:7135
+#: ../clutter/clutter-actor.c:7215
msgid "Translation along the Y axis"
msgstr "La translació en l'eix de les Y"
-#: ../clutter/clutter-actor.c:7154
+#: ../clutter/clutter-actor.c:7234
msgid "Translation Z"
msgstr "Translació Z"
-#: ../clutter/clutter-actor.c:7155
+#: ../clutter/clutter-actor.c:7235
msgid "Translation along the Z axis"
msgstr "La translació en l'eix de les Z"
-#: ../clutter/clutter-actor.c:7185
+#: ../clutter/clutter-actor.c:7265
msgid "Transform"
msgstr "Transformació"
-#: ../clutter/clutter-actor.c:7186
+#: ../clutter/clutter-actor.c:7266
msgid "Transformation matrix"
msgstr "Matriu de transformació"
-#: ../clutter/clutter-actor.c:7201
+#: ../clutter/clutter-actor.c:7281
msgid "Transform Set"
msgstr "Establiment de la transformació"
-#: ../clutter/clutter-actor.c:7202
+#: ../clutter/clutter-actor.c:7282
msgid "Whether the transform property is set"
msgstr "Si la propietat de transformació té un valor"
-#: ../clutter/clutter-actor.c:7223
+#: ../clutter/clutter-actor.c:7303
msgid "Child Transform"
msgstr "Transformació filla"
-#: ../clutter/clutter-actor.c:7224
+#: ../clutter/clutter-actor.c:7304
msgid "Children transformation matrix"
msgstr "Matriu de la transformació filla"
-#: ../clutter/clutter-actor.c:7239
+#: ../clutter/clutter-actor.c:7319
msgid "Child Transform Set"
msgstr "Establiment de la transformació filla"
-#: ../clutter/clutter-actor.c:7240
+#: ../clutter/clutter-actor.c:7320
msgid "Whether the child-transform property is set"
msgstr "Si la propietat de transformació filla té un valor"
-#: ../clutter/clutter-actor.c:7257
+#: ../clutter/clutter-actor.c:7337
msgid "Show on set parent"
msgstr "Mostra si és pare"
-#: ../clutter/clutter-actor.c:7258
+#: ../clutter/clutter-actor.c:7338
msgid "Whether the actor is shown when parented"
msgstr "Si s'ha de mostrar l'actor si se'l fa pare d'un element"
-#: ../clutter/clutter-actor.c:7275
+#: ../clutter/clutter-actor.c:7355
msgid "Clip to Allocation"
msgstr "Retalla a la ubicació"
-#: ../clutter/clutter-actor.c:7276
+#: ../clutter/clutter-actor.c:7356
msgid "Sets the clip region to track the actor's allocation"
msgstr ""
"Estableix la regió de retallat per fer un seguiment de la ubicació de l'actor"
-#: ../clutter/clutter-actor.c:7289
+#: ../clutter/clutter-actor.c:7369
msgid "Text Direction"
msgstr "Direcció del text"
-#: ../clutter/clutter-actor.c:7290
+#: ../clutter/clutter-actor.c:7370
msgid "Direction of the text"
msgstr "La direcció del text"
-#: ../clutter/clutter-actor.c:7305
+#: ../clutter/clutter-actor.c:7385
msgid "Has Pointer"
msgstr "Té un punter"
-#: ../clutter/clutter-actor.c:7306
+#: ../clutter/clutter-actor.c:7386
msgid "Whether the actor contains the pointer of an input device"
msgstr "Si l'actor conté el punter d'un dispositiu d'entrada"
-#: ../clutter/clutter-actor.c:7319
+#: ../clutter/clutter-actor.c:7399
msgid "Actions"
msgstr "Accions"
-#: ../clutter/clutter-actor.c:7320
+#: ../clutter/clutter-actor.c:7400
msgid "Adds an action to the actor"
msgstr "Afegeix una acció a l'actor"
-#: ../clutter/clutter-actor.c:7333
+#: ../clutter/clutter-actor.c:7413
msgid "Constraints"
msgstr "Restriccions"
-#: ../clutter/clutter-actor.c:7334
+#: ../clutter/clutter-actor.c:7414
msgid "Adds a constraint to the actor"
msgstr "Afegeix una restricció a l'actor"
-#: ../clutter/clutter-actor.c:7347
+#: ../clutter/clutter-actor.c:7427
msgid "Effect"
msgstr "Efecte"
-#: ../clutter/clutter-actor.c:7348
+#: ../clutter/clutter-actor.c:7428
msgid "Add an effect to be applied on the actor"
msgstr "Afegeix un efecte que s'aplicarà a l'actor"
-#: ../clutter/clutter-actor.c:7362
+#: ../clutter/clutter-actor.c:7442
msgid "Layout Manager"
msgstr "Gestor de disposició"
-#: ../clutter/clutter-actor.c:7363
+#: ../clutter/clutter-actor.c:7443
msgid "The object controlling the layout of an actor's children"
msgstr "L'objecte que controla la disposició dels fills de l'actor"
-#: ../clutter/clutter-actor.c:7377
+#: ../clutter/clutter-actor.c:7457
msgid "X Expand"
msgstr "Expansió X"
-#: ../clutter/clutter-actor.c:7378
+#: ../clutter/clutter-actor.c:7458
msgid "Whether extra horizontal space should be assigned to the actor"
msgstr "Si l'actor hauria de tenir assignat un espai horitzontal extra"
-#: ../clutter/clutter-actor.c:7393
+#: ../clutter/clutter-actor.c:7473
msgid "Y Expand"
msgstr "Expansió Y"
-#: ../clutter/clutter-actor.c:7394
+#: ../clutter/clutter-actor.c:7474
msgid "Whether extra vertical space should be assigned to the actor"
msgstr "Si l'actor hauria de tenir assignat un espai vertical extra"
-#: ../clutter/clutter-actor.c:7410
+#: ../clutter/clutter-actor.c:7490
msgid "X Alignment"
msgstr "Alineació X"
-#: ../clutter/clutter-actor.c:7411
+#: ../clutter/clutter-actor.c:7491
msgid "The alignment of the actor on the X axis within its allocation"
msgstr "L'alineació de l'actor en l'eix de les X dins la seva ubicació"
-#: ../clutter/clutter-actor.c:7426
+#: ../clutter/clutter-actor.c:7506
msgid "Y Alignment"
msgstr "Alineació Y"
-#: ../clutter/clutter-actor.c:7427
+#: ../clutter/clutter-actor.c:7507
msgid "The alignment of the actor on the Y axis within its allocation"
msgstr "L'alineació de l'actor en l'eix de les Y dins la seva ubicació"
-#: ../clutter/clutter-actor.c:7446
+#: ../clutter/clutter-actor.c:7526
msgid "Margin Top"
msgstr "Marge superior"
-#: ../clutter/clutter-actor.c:7447
+#: ../clutter/clutter-actor.c:7527
msgid "Extra space at the top"
msgstr "Espai extra a la part superior"
-#: ../clutter/clutter-actor.c:7468
+#: ../clutter/clutter-actor.c:7548
msgid "Margin Bottom"
msgstr "Marge inferior"
-#: ../clutter/clutter-actor.c:7469
+#: ../clutter/clutter-actor.c:7549
msgid "Extra space at the bottom"
msgstr "Espai extra a la part inferior"
-#: ../clutter/clutter-actor.c:7490
+#: ../clutter/clutter-actor.c:7570
msgid "Margin Left"
msgstr "Marge esquerra"
-#: ../clutter/clutter-actor.c:7491
+#: ../clutter/clutter-actor.c:7571
msgid "Extra space at the left"
msgstr "Espai extra a l'esquerra"
-#: ../clutter/clutter-actor.c:7512
+#: ../clutter/clutter-actor.c:7592
msgid "Margin Right"
msgstr "Marge dret"
-#: ../clutter/clutter-actor.c:7513
+#: ../clutter/clutter-actor.c:7593
msgid "Extra space at the right"
msgstr "Espai extra a la dreta"
-#: ../clutter/clutter-actor.c:7529
+#: ../clutter/clutter-actor.c:7609
msgid "Background Color Set"
msgstr "Establiment del color de fons"
-#: ../clutter/clutter-actor.c:7530 ../clutter/deprecated/clutter-box.c:275
+#: ../clutter/clutter-actor.c:7610 ../clutter/deprecated/clutter-box.c:269
msgid "Whether the background color is set"
msgstr "Si hi ha cap color de fons"
-#: ../clutter/clutter-actor.c:7546
+#: ../clutter/clutter-actor.c:7626
msgid "Background color"
msgstr "Color de fons"
-#: ../clutter/clutter-actor.c:7547
+#: ../clutter/clutter-actor.c:7627
msgid "The actor's background color"
msgstr "El color de fons de l'actor"
-#: ../clutter/clutter-actor.c:7562
+#: ../clutter/clutter-actor.c:7642
msgid "First Child"
msgstr "Primer fill"
-#: ../clutter/clutter-actor.c:7563
+#: ../clutter/clutter-actor.c:7643
msgid "The actor's first child"
msgstr "El primer fill de l'actor"
-#: ../clutter/clutter-actor.c:7576
+#: ../clutter/clutter-actor.c:7656
msgid "Last Child"
msgstr "Últim fill"
-#: ../clutter/clutter-actor.c:7577
+#: ../clutter/clutter-actor.c:7657
msgid "The actor's last child"
msgstr "L'últim fill de l'actor"
-#: ../clutter/clutter-actor.c:7591
+#: ../clutter/clutter-actor.c:7671
msgid "Content"
msgstr "Contingut"
-#: ../clutter/clutter-actor.c:7592
+#: ../clutter/clutter-actor.c:7672
msgid "Delegate object for painting the actor's content"
msgstr "L'objecte al que es delega el pintat del contingut de l'actor"
-#: ../clutter/clutter-actor.c:7617
+#: ../clutter/clutter-actor.c:7697
msgid "Content Gravity"
msgstr "Gravetat del contingut"
-#: ../clutter/clutter-actor.c:7618
+#: ../clutter/clutter-actor.c:7698
msgid "Alignment of the actor's content"
msgstr "L'alineació del contingut de l'actor"
-#: ../clutter/clutter-actor.c:7638
+#: ../clutter/clutter-actor.c:7718
msgid "Content Box"
msgstr "Caixa del contingut"
-#: ../clutter/clutter-actor.c:7639
+#: ../clutter/clutter-actor.c:7719
msgid "The bounding box of the actor's content"
msgstr "La caixa de limitació que conté el contingut de l'actor"
-#: ../clutter/clutter-actor.c:7647
+#: ../clutter/clutter-actor.c:7727
msgid "Minification Filter"
msgstr "Filtre de minimització"
-#: ../clutter/clutter-actor.c:7648
+#: ../clutter/clutter-actor.c:7728
msgid "The filter used when reducing the size of the content"
msgstr "El filtre que s'utilitzarà per reduir la mida del contingut"
-#: ../clutter/clutter-actor.c:7655
+#: ../clutter/clutter-actor.c:7735
msgid "Magnification Filter"
msgstr "Filtre d'ampliació"
-#: ../clutter/clutter-actor.c:7656
+#: ../clutter/clutter-actor.c:7736
msgid "The filter used when increasing the size of the content"
msgstr "El filtre que s'utilitzarà per ampliar la mida del contingut"
-#: ../clutter/clutter-actor.c:7670
+#: ../clutter/clutter-actor.c:7750
msgid "Content Repeat"
msgstr "Repetició del contingut"
-#: ../clutter/clutter-actor.c:7671
+#: ../clutter/clutter-actor.c:7751
msgid "The repeat policy for the actor's content"
msgstr "La política de repetició del contingut de l'actor"
-#: ../clutter/clutter-actor-meta.c:193 ../clutter/clutter-child-meta.c:142
+#: ../clutter/clutter-actor-meta.c:191 ../clutter/clutter-child-meta.c:142
msgid "Actor"
msgstr "Actor"
-#: ../clutter/clutter-actor-meta.c:194
+#: ../clutter/clutter-actor-meta.c:192
msgid "The actor attached to the meta"
msgstr "L'actor acoblat a un meta"
-#: ../clutter/clutter-actor-meta.c:208
+#: ../clutter/clutter-actor-meta.c:206
msgid "The name of the meta"
msgstr "El nom del meta"
-#: ../clutter/clutter-actor-meta.c:221 ../clutter/clutter-input-device.c:337
-#: ../clutter/deprecated/clutter-shader.c:313
+#: ../clutter/clutter-actor-meta.c:219 ../clutter/clutter-input-device.c:326
+#: ../clutter/deprecated/clutter-shader.c:309
msgid "Enabled"
msgstr "Habilitat"
-#: ../clutter/clutter-actor-meta.c:222
+#: ../clutter/clutter-actor-meta.c:220
msgid "Whether the meta is enabled"
msgstr "Si el meta és habilitat"
#: ../clutter/clutter-align-constraint.c:279
-#: ../clutter/clutter-bind-constraint.c:358 ../clutter/clutter-clone.c:345
+#: ../clutter/clutter-bind-constraint.c:343 ../clutter/clutter-clone.c:341
#: ../clutter/clutter-snap-constraint.c:321
msgid "Source"
msgstr "Font"
@@ -730,82 +730,86 @@ msgstr "Factor"
msgid "The alignment factor, between 0.0 and 1.0"
msgstr "El factor d'alineació, entre 0.0 i 1.0"
-#: ../clutter/clutter-backend.c:379
+#: ../clutter/clutter-backend.c:380
msgid "Unable to initialize the Clutter backend"
msgstr "No s'ha pogut inicialitzar el rerefons de la Clutter"
-#: ../clutter/clutter-backend.c:453
+#: ../clutter/clutter-backend.c:454
#, c-format
msgid "The backend of type '%s' does not support creating multiple stages"
msgstr "El rerefons, de tipus «%s», no permet crear múltiples escenaris"
-#: ../clutter/clutter-bind-constraint.c:359
+#: ../clutter/clutter-bind-constraint.c:344
msgid "The source of the binding"
msgstr "La font de la vinculació"
-#: ../clutter/clutter-bind-constraint.c:372
+#: ../clutter/clutter-bind-constraint.c:357
msgid "Coordinate"
msgstr "Coordenada"
-#: ../clutter/clutter-bind-constraint.c:373
+#: ../clutter/clutter-bind-constraint.c:358
msgid "The coordinate to bind"
msgstr "La coordenada a vincular"
-#: ../clutter/clutter-bind-constraint.c:387
+#: ../clutter/clutter-bind-constraint.c:372
#: ../clutter/clutter-path-constraint.c:226
#: ../clutter/clutter-snap-constraint.c:366
msgid "Offset"
msgstr "Desplaçament"
-#: ../clutter/clutter-bind-constraint.c:388
+#: ../clutter/clutter-bind-constraint.c:373
msgid "The offset in pixels to apply to the binding"
msgstr "El desplaçament, en píxels, que s'ha d'aplicar a la vinculació"
-#: ../clutter/clutter-binding-pool.c:320
+#: ../clutter/clutter-binding-pool.c:319
msgid "The unique name of the binding pool"
msgstr "El nom únic del conjunt de vinculacions"
-#: ../clutter/clutter-bin-layout.c:240 ../clutter/clutter-bin-layout.c:655
-#: ../clutter/clutter-box-layout.c:390 ../clutter/clutter-table-layout.c:610
+#: ../clutter/clutter-bin-layout.c:220 ../clutter/clutter-bin-layout.c:633
+#: ../clutter/clutter-box-layout.c:374
+#: ../clutter/deprecated/clutter-table-layout.c:602
msgid "Horizontal Alignment"
msgstr "Alineació horitzontal"
-#: ../clutter/clutter-bin-layout.c:241
+#: ../clutter/clutter-bin-layout.c:221
msgid "Horizontal alignment for the actor inside the layout manager"
msgstr "L'alineació horitzontal de l'actor dins del gestor de disposició"
-#: ../clutter/clutter-bin-layout.c:249 ../clutter/clutter-bin-layout.c:675
-#: ../clutter/clutter-box-layout.c:399 ../clutter/clutter-table-layout.c:625
+#: ../clutter/clutter-bin-layout.c:229 ../clutter/clutter-bin-layout.c:653
+#: ../clutter/clutter-box-layout.c:383
+#: ../clutter/deprecated/clutter-table-layout.c:617
msgid "Vertical Alignment"
msgstr "Alineació vertical"
-#: ../clutter/clutter-bin-layout.c:250
+#: ../clutter/clutter-bin-layout.c:230
msgid "Vertical alignment for the actor inside the layout manager"
msgstr "L'alineació vertical de l'actor dins del gestor de disposició"
-#: ../clutter/clutter-bin-layout.c:656
+#: ../clutter/clutter-bin-layout.c:634
msgid "Default horizontal alignment for the actors inside the layout manager"
msgstr ""
"L'alineació horitzontal per defecte dels actors dins del gestor de disposició"
-#: ../clutter/clutter-bin-layout.c:676
+#: ../clutter/clutter-bin-layout.c:654
msgid "Default vertical alignment for the actors inside the layout manager"
msgstr ""
"L'alineació vertical per defecte dels actors dins del gestor de disposició"
-#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/clutter-box-layout.c:349
msgid "Expand"
msgstr "Expandeix"
-#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/clutter-box-layout.c:350
msgid "Allocate extra space for the child"
msgstr "Ubica espai extra per al fill"
-#: ../clutter/clutter-box-layout.c:372 ../clutter/clutter-table-layout.c:589
+#: ../clutter/clutter-box-layout.c:356
+#: ../clutter/deprecated/clutter-table-layout.c:581
msgid "Horizontal Fill"
msgstr "Emplena horitzontalment"
-#: ../clutter/clutter-box-layout.c:373 ../clutter/clutter-table-layout.c:590
+#: ../clutter/clutter-box-layout.c:357
+#: ../clutter/deprecated/clutter-table-layout.c:582
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the horizontal axis"
@@ -813,11 +817,13 @@ msgstr ""
"Si el fill hauria de tenir prioritat quan el contenidor ubiqui espai extra "
"en l'eix horitzontal"
-#: ../clutter/clutter-box-layout.c:381 ../clutter/clutter-table-layout.c:596
+#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/deprecated/clutter-table-layout.c:588
msgid "Vertical Fill"
msgstr "Emplena verticalment"
-#: ../clutter/clutter-box-layout.c:382 ../clutter/clutter-table-layout.c:597
+#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/deprecated/clutter-table-layout.c:589
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the vertical axis"
@@ -825,80 +831,88 @@ msgstr ""
"Si el fill hauria de tenir prioritat quan el contenidor ubiqui espai extra "
"en l'eix vertical"
-#: ../clutter/clutter-box-layout.c:391 ../clutter/clutter-table-layout.c:611
+#: ../clutter/clutter-box-layout.c:375
+#: ../clutter/deprecated/clutter-table-layout.c:603
msgid "Horizontal alignment of the actor within the cell"
-msgstr "L'alineació horitzontal de l'actor dins la ceŀla"
+msgstr "L'alineació horitzontal de l'actor dins la cel·la"
-#: ../clutter/clutter-box-layout.c:400 ../clutter/clutter-table-layout.c:626
+#: ../clutter/clutter-box-layout.c:384
+#: ../clutter/deprecated/clutter-table-layout.c:618
msgid "Vertical alignment of the actor within the cell"
-msgstr "L'alineació vertical de l'actor dins la ceŀla"
+msgstr "L'alineació vertical de l'actor dins la cel·la"
-#: ../clutter/clutter-box-layout.c:1365
+#: ../clutter/clutter-box-layout.c:1345
msgid "Vertical"
msgstr "Vertical"
-#: ../clutter/clutter-box-layout.c:1366
+#: ../clutter/clutter-box-layout.c:1346
msgid "Whether the layout should be vertical, rather than horizontal"
msgstr "Si la disposició hauria de ser vertical en comptes d'horitzontal"
-#: ../clutter/clutter-box-layout.c:1383 ../clutter/clutter-flow-layout.c:890
-#: ../clutter/clutter-grid-layout.c:1550
+#: ../clutter/clutter-box-layout.c:1363 ../clutter/clutter-flow-layout.c:927
+#: ../clutter/clutter-grid-layout.c:1549
msgid "Orientation"
msgstr "Orientació"
-#: ../clutter/clutter-box-layout.c:1384 ../clutter/clutter-flow-layout.c:891
-#: ../clutter/clutter-grid-layout.c:1551
+#: ../clutter/clutter-box-layout.c:1364 ../clutter/clutter-flow-layout.c:928
+#: ../clutter/clutter-grid-layout.c:1550
msgid "The orientation of the layout"
msgstr "L'orientació de la disposició"
-#: ../clutter/clutter-box-layout.c:1400 ../clutter/clutter-flow-layout.c:906
+#: ../clutter/clutter-box-layout.c:1380 ../clutter/clutter-flow-layout.c:943
msgid "Homogeneous"
msgstr "Homogeni"
-#: ../clutter/clutter-box-layout.c:1401
+#: ../clutter/clutter-box-layout.c:1381
msgid ""
"Whether the layout should be homogeneous, i.e. all childs get the same size"
msgstr ""
"Si la disposició hauria de ser homogènia, és a dir, que tots els fills "
"tinguin la mateixa mida"
-#: ../clutter/clutter-box-layout.c:1416
+#: ../clutter/clutter-box-layout.c:1396
msgid "Pack Start"
msgstr "Ajunta al principi"
-#: ../clutter/clutter-box-layout.c:1417
+#: ../clutter/clutter-box-layout.c:1397
msgid "Whether to pack items at the start of the box"
msgstr "Si s'ha d'ajuntar els elements a l'inici de la caixa"
-#: ../clutter/clutter-box-layout.c:1430
+#: ../clutter/clutter-box-layout.c:1410
msgid "Spacing"
msgstr "Espaiat"
-#: ../clutter/clutter-box-layout.c:1431
+#: ../clutter/clutter-box-layout.c:1411
msgid "Spacing between children"
msgstr "Espaiat entre fills"
-#: ../clutter/clutter-box-layout.c:1448 ../clutter/clutter-table-layout.c:1675
+#: ../clutter/clutter-box-layout.c:1428
+#: ../clutter/deprecated/clutter-table-layout.c:1669
msgid "Use Animations"
msgstr "Utilitza animacions"
-#: ../clutter/clutter-box-layout.c:1449 ../clutter/clutter-table-layout.c:1676
+#: ../clutter/clutter-box-layout.c:1429
+#: ../clutter/deprecated/clutter-table-layout.c:1670
msgid "Whether layout changes should be animated"
msgstr "Si s'han d'animar els canvis de disposició"
-#: ../clutter/clutter-box-layout.c:1473 ../clutter/clutter-table-layout.c:1700
+#: ../clutter/clutter-box-layout.c:1453
+#: ../clutter/deprecated/clutter-table-layout.c:1694
msgid "Easing Mode"
msgstr "Mode del camí"
-#: ../clutter/clutter-box-layout.c:1474 ../clutter/clutter-table-layout.c:1701
+#: ../clutter/clutter-box-layout.c:1454
+#: ../clutter/deprecated/clutter-table-layout.c:1695
msgid "The easing mode of the animations"
msgstr "El mode del camí de les animacions"
-#: ../clutter/clutter-box-layout.c:1494 ../clutter/clutter-table-layout.c:1721
+#: ../clutter/clutter-box-layout.c:1474
+#: ../clutter/deprecated/clutter-table-layout.c:1715
msgid "Easing Duration"
msgstr "Durada del camí"
-#: ../clutter/clutter-box-layout.c:1495 ../clutter/clutter-table-layout.c:1722
+#: ../clutter/clutter-box-layout.c:1475
+#: ../clutter/deprecated/clutter-table-layout.c:1716
msgid "The duration of the animations"
msgstr "La durada de les animacions"
@@ -918,14 +932,30 @@ msgstr "Contrast"
msgid "The contrast change to apply"
msgstr "El canvi de contrast a aplicar"
-#: ../clutter/clutter-canvas.c:216
+#: ../clutter/clutter-canvas.c:248
msgid "The width of the canvas"
msgstr "L'amplada del llenç"
-#: ../clutter/clutter-canvas.c:232
+#: ../clutter/clutter-canvas.c:264
msgid "The height of the canvas"
msgstr "L'alçada del llenç"
+#: ../clutter/clutter-canvas.c:283
+msgid "Scale Factor Set"
+msgstr "Establert el factor d'escalat"
+
+#: ../clutter/clutter-canvas.c:284
+msgid "Whether the scale-factor property is set"
+msgstr "Si la propietat de factor d'escalat té un valor"
+
+#: ../clutter/clutter-canvas.c:305
+msgid "Scale Factor"
+msgstr "Factor d'escalat"
+
+#: ../clutter/clutter-canvas.c:306
+msgid "The scaling factor for the surface"
+msgstr "El factor d'escalat de la superfície"
+
#: ../clutter/clutter-child-meta.c:127
msgid "Container"
msgstr "Contenidor"
@@ -938,39 +968,39 @@ msgstr "El contenidor que ha creat aquesta dada"
msgid "The actor wrapped by this data"
msgstr "L'actor envoltat per aquesta dada"
-#: ../clutter/clutter-click-action.c:559
+#: ../clutter/clutter-click-action.c:586
msgid "Pressed"
msgstr "Premut"
-#: ../clutter/clutter-click-action.c:560
+#: ../clutter/clutter-click-action.c:587
msgid "Whether the clickable should be in pressed state"
msgstr "Si l'element que s'hi pot fer clic hauria d'estar en l'estat de premut"
-#: ../clutter/clutter-click-action.c:573
+#: ../clutter/clutter-click-action.c:600
msgid "Held"
msgstr "Manté"
-#: ../clutter/clutter-click-action.c:574
+#: ../clutter/clutter-click-action.c:601
msgid "Whether the clickable has a grab"
msgstr "Si l'element que s'hi pot fer clic té un mantenidor"
-#: ../clutter/clutter-click-action.c:591 ../clutter/clutter-settings.c:607
+#: ../clutter/clutter-click-action.c:618 ../clutter/clutter-settings.c:651
msgid "Long Press Duration"
msgstr "Durada de la premuda llarga"
-#: ../clutter/clutter-click-action.c:592
+#: ../clutter/clutter-click-action.c:619
msgid "The minimum duration of a long press to recognize the gesture"
msgstr "La durada mínima perquè es reconegui el gest d'una premuda llarga"
-#: ../clutter/clutter-click-action.c:610
+#: ../clutter/clutter-click-action.c:637
msgid "Long Press Threshold"
msgstr "Llindar de la premuda llarga"
-#: ../clutter/clutter-click-action.c:611
+#: ../clutter/clutter-click-action.c:638
msgid "The maximum threshold before a long press is cancelled"
-msgstr "El llindar màxim abans de canceŀlar una premuda llarga"
+msgstr "El llindar màxim abans de cancel·lar una premuda llarga"
-#: ../clutter/clutter-clone.c:346
+#: ../clutter/clutter-clone.c:342
msgid "Specifies the actor to be cloned"
msgstr "Especifica l'actor a ser clonat"
@@ -982,27 +1012,27 @@ msgstr "Matís"
msgid "The tint to apply"
msgstr "El matís a aplicar"
-#: ../clutter/clutter-deform-effect.c:588
+#: ../clutter/clutter-deform-effect.c:591
msgid "Horizontal Tiles"
msgstr "Quadres horitzontals"
-#: ../clutter/clutter-deform-effect.c:589
+#: ../clutter/clutter-deform-effect.c:592
msgid "The number of horizontal tiles"
msgstr "El nombre de quadres horitzontals"
-#: ../clutter/clutter-deform-effect.c:604
+#: ../clutter/clutter-deform-effect.c:607
msgid "Vertical Tiles"
msgstr "Quadres verticals"
-#: ../clutter/clutter-deform-effect.c:605
+#: ../clutter/clutter-deform-effect.c:608
msgid "The number of vertical tiles"
msgstr "El nombre de quadres verticals"
-#: ../clutter/clutter-deform-effect.c:622
+#: ../clutter/clutter-deform-effect.c:625
msgid "Back Material"
msgstr "Material de fons"
-#: ../clutter/clutter-deform-effect.c:623
+#: ../clutter/clutter-deform-effect.c:626
msgid "The material to be used when painting the back of the actor"
msgstr "El material que s'utilitzarà quan es pinti el fons de l'actor"
@@ -1010,259 +1040,297 @@ msgstr "El material que s'utilitzarà quan es pinti el fons de l'actor"
msgid "The desaturation factor"
msgstr "El factor de dessaturació"
-#: ../clutter/clutter-device-manager.c:131
-#: ../clutter/clutter-input-device.c:366
-#: ../clutter/x11/clutter-keymap-x11.c:321
+#: ../clutter/clutter-device-manager.c:127
+#: ../clutter/clutter-input-device.c:355
+#: ../clutter/x11/clutter-keymap-x11.c:457
msgid "Backend"
msgstr "Rerefons"
-#: ../clutter/clutter-device-manager.c:132
+#: ../clutter/clutter-device-manager.c:128
msgid "The ClutterBackend of the device manager"
msgstr "El «ClutterBackend» del gestor del dispositiu"
-#: ../clutter/clutter-drag-action.c:742
+#: ../clutter/clutter-drag-action.c:733
msgid "Horizontal Drag Threshold"
msgstr "Llindar d'arrossegament horitzontal"
-#: ../clutter/clutter-drag-action.c:743
+#: ../clutter/clutter-drag-action.c:734
msgid "The horizontal amount of pixels required to start dragging"
msgstr ""
"El nombre de píxels horitzontals necessaris per iniciar un arrossegament"
-#: ../clutter/clutter-drag-action.c:770
+#: ../clutter/clutter-drag-action.c:761
msgid "Vertical Drag Threshold"
msgstr "Llindar d'arrossegament vertical"
-#: ../clutter/clutter-drag-action.c:771
+#: ../clutter/clutter-drag-action.c:762
msgid "The vertical amount of pixels required to start dragging"
msgstr "El nombre de píxels verticals necessaris per iniciar un arrossegament"
-#: ../clutter/clutter-drag-action.c:792
+#: ../clutter/clutter-drag-action.c:783
msgid "Drag Handle"
msgstr "Nansa d'arrossegament"
-#: ../clutter/clutter-drag-action.c:793
+#: ../clutter/clutter-drag-action.c:784
msgid "The actor that is being dragged"
msgstr "L'actor que s'està arrossegant"
-#: ../clutter/clutter-drag-action.c:806
+#: ../clutter/clutter-drag-action.c:797
msgid "Drag Axis"
msgstr "Eix d'arrossegament"
-#: ../clutter/clutter-drag-action.c:807
+#: ../clutter/clutter-drag-action.c:798
msgid "Constraints the dragging to an axis"
msgstr "Restringeix l'arrossegament a un eix"
-#: ../clutter/clutter-drag-action.c:823
+#: ../clutter/clutter-drag-action.c:814
msgid "Drag Area"
msgstr "Àrea d'arrossegament"
-#: ../clutter/clutter-drag-action.c:824
+#: ../clutter/clutter-drag-action.c:815
msgid "Constrains the dragging to a rectangle"
msgstr "Restringeix l'arrossegament a un rectangle"
-#: ../clutter/clutter-drag-action.c:837
+#: ../clutter/clutter-drag-action.c:828
msgid "Drag Area Set"
msgstr "Establiment de l'àrea d'arrossegament"
-#: ../clutter/clutter-drag-action.c:838
+#: ../clutter/clutter-drag-action.c:829
msgid "Whether the drag area is set"
msgstr "Si la propietat d'àrea d'arrossegament té un valor"
-#: ../clutter/clutter-flow-layout.c:907
+#: ../clutter/clutter-flow-layout.c:944
msgid "Whether each item should receive the same allocation"
msgstr "Si cada element hauria de rebre la mateixa ubicació"
-#: ../clutter/clutter-flow-layout.c:922 ../clutter/clutter-table-layout.c:1637
+#: ../clutter/clutter-flow-layout.c:959
+#: ../clutter/deprecated/clutter-table-layout.c:1629
msgid "Column Spacing"
msgstr "Espaiat de columna"
-#: ../clutter/clutter-flow-layout.c:923
+#: ../clutter/clutter-flow-layout.c:960
msgid "The spacing between columns"
msgstr "L'espaiat entre columnes"
-#: ../clutter/clutter-flow-layout.c:939 ../clutter/clutter-table-layout.c:1651
+#: ../clutter/clutter-flow-layout.c:976
+#: ../clutter/deprecated/clutter-table-layout.c:1645
msgid "Row Spacing"
msgstr "Espaiat de fila"
-#: ../clutter/clutter-flow-layout.c:940
+#: ../clutter/clutter-flow-layout.c:977
msgid "The spacing between rows"
msgstr "L'espaiat entre files"
-#: ../clutter/clutter-flow-layout.c:954
+#: ../clutter/clutter-flow-layout.c:991
msgid "Minimum Column Width"
msgstr "Amplada mínima de columna"
-#: ../clutter/clutter-flow-layout.c:955
+#: ../clutter/clutter-flow-layout.c:992
msgid "Minimum width for each column"
msgstr "L'amplada mínima per a cada columna"
-#: ../clutter/clutter-flow-layout.c:970
+#: ../clutter/clutter-flow-layout.c:1007
msgid "Maximum Column Width"
msgstr "Amplada màxima de columna"
-#: ../clutter/clutter-flow-layout.c:971
+#: ../clutter/clutter-flow-layout.c:1008
msgid "Maximum width for each column"
msgstr "L'amplada màxima per a cada columna"
-#: ../clutter/clutter-flow-layout.c:985
+#: ../clutter/clutter-flow-layout.c:1022
msgid "Minimum Row Height"
msgstr "Alçada mínima de columna"
-#: ../clutter/clutter-flow-layout.c:986
+#: ../clutter/clutter-flow-layout.c:1023
msgid "Minimum height for each row"
msgstr "L'alçada mínima per a cada columna"
-#: ../clutter/clutter-flow-layout.c:1001
+#: ../clutter/clutter-flow-layout.c:1038
msgid "Maximum Row Height"
msgstr "Alçada màxima de columna"
-#: ../clutter/clutter-flow-layout.c:1002
+#: ../clutter/clutter-flow-layout.c:1039
msgid "Maximum height for each row"
msgstr "L'alçada màxima per a cada columna"
-#: ../clutter/clutter-grid-layout.c:1222
+#: ../clutter/clutter-flow-layout.c:1054 ../clutter/clutter-flow-layout.c:1055
+msgid "Snap to grid"
+msgstr "Ajusta a la graella"
+
+#: ../clutter/clutter-gesture-action.c:668
+msgid "Number touch points"
+msgstr "Nombre de punts tàctils"
+
+#: ../clutter/clutter-gesture-action.c:669
+msgid "Number of touch points"
+msgstr "El nombre de punts tàctils"
+
+#: ../clutter/clutter-gesture-action.c:684
+msgid "Threshold Trigger Edge"
+msgstr "Vora del llindar d'activació"
+
+#: ../clutter/clutter-gesture-action.c:685
+msgid "The trigger edge used by the action"
+msgstr "La vora d'activació que utilitza l'acció"
+
+#: ../clutter/clutter-gesture-action.c:704
+msgid "Threshold Trigger Horizontal Distance"
+msgstr "Llindar d'activació de distància horitzontal"
+
+#: ../clutter/clutter-gesture-action.c:705
+msgid "The horizontal trigger distance used by the action"
+msgstr "La distància d'activació horitzontal que utilitza l'acció"
+
+#: ../clutter/clutter-gesture-action.c:723
+msgid "Threshold Trigger Vertical Distance"
+msgstr "Llindar d'activació de distància vertical"
+
+#: ../clutter/clutter-gesture-action.c:724
+msgid "The vertical trigger distance used by the action"
+msgstr "La distància d'activació vertical que utilitza l'acció"
+
+#: ../clutter/clutter-grid-layout.c:1223
msgid "Left attachment"
msgstr "Adjunció esquerra"
-#: ../clutter/clutter-grid-layout.c:1223
+#: ../clutter/clutter-grid-layout.c:1224
msgid "The column number to attach the left side of the child to"
msgstr "El número de columna al que adjuntar-hi la part esquerra del fill"
-#: ../clutter/clutter-grid-layout.c:1230
+#: ../clutter/clutter-grid-layout.c:1231
msgid "Top attachment"
msgstr "Adjunció superior"
-#: ../clutter/clutter-grid-layout.c:1231
+#: ../clutter/clutter-grid-layout.c:1232
msgid "The row number to attach the top side of a child widget to"
msgstr "El número de columna al que adjuntar-hi la part superior del giny fill"
-#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/clutter-grid-layout.c:1240
msgid "The number of columns that a child spans"
msgstr "El nombre de columnes que hauria d'abastir el fill"
-#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/clutter-grid-layout.c:1247
msgid "The number of rows that a child spans"
msgstr "El nombre de files que hauria d'abastir el fill"
-#: ../clutter/clutter-grid-layout.c:1565
+#: ../clutter/clutter-grid-layout.c:1564
msgid "Row spacing"
msgstr "Espaiat de files"
-#: ../clutter/clutter-grid-layout.c:1566
+#: ../clutter/clutter-grid-layout.c:1565
msgid "The amount of space between two consecutive rows"
msgstr "La quantitat d'espai entre dues files consecutives"
-#: ../clutter/clutter-grid-layout.c:1579
+#: ../clutter/clutter-grid-layout.c:1578
msgid "Column spacing"
msgstr "Espaiat de columnes"
-#: ../clutter/clutter-grid-layout.c:1580
+#: ../clutter/clutter-grid-layout.c:1579
msgid "The amount of space between two consecutive columns"
msgstr "La quantitat d'espai entre dues columnes consecutives"
-#: ../clutter/clutter-grid-layout.c:1594
+#: ../clutter/clutter-grid-layout.c:1593
msgid "Row Homogeneous"
msgstr "Files homogènies"
-#: ../clutter/clutter-grid-layout.c:1595
+#: ../clutter/clutter-grid-layout.c:1594
msgid "If TRUE, the rows are all the same height"
msgstr "Si és «TRUE» (cert), totes les files tenen la mateixa alçada"
-#: ../clutter/clutter-grid-layout.c:1608
+#: ../clutter/clutter-grid-layout.c:1607
msgid "Column Homogeneous"
msgstr "Columnes homogènies"
-#: ../clutter/clutter-grid-layout.c:1609
+#: ../clutter/clutter-grid-layout.c:1608
msgid "If TRUE, the columns are all the same width"
msgstr "Si és «TRUE» (cert), totes les columnes tenen la mateixa amplada"
-#: ../clutter/clutter-image.c:248 ../clutter/clutter-image.c:311
-#: ../clutter/clutter-image.c:399
+#: ../clutter/clutter-image.c:268 ../clutter/clutter-image.c:331
+#: ../clutter/clutter-image.c:419
msgid "Unable to load image data"
msgstr "No s'han pogut carregar les dades de la imatge"
-#: ../clutter/clutter-input-device.c:242
+#: ../clutter/clutter-input-device.c:231
msgid "Id"
msgstr "Identificador"
-#: ../clutter/clutter-input-device.c:243
+#: ../clutter/clutter-input-device.c:232
msgid "Unique identifier of the device"
msgstr "L'identificador únic del dispositiu"
-#: ../clutter/clutter-input-device.c:259
+#: ../clutter/clutter-input-device.c:248
msgid "The name of the device"
msgstr "El nom del dispositiu"
-#: ../clutter/clutter-input-device.c:273
+#: ../clutter/clutter-input-device.c:262
msgid "Device Type"
msgstr "Tipus de dispositiu"
-#: ../clutter/clutter-input-device.c:274
+#: ../clutter/clutter-input-device.c:263
msgid "The type of the device"
msgstr "El tipus de dispositiu"
-#: ../clutter/clutter-input-device.c:289
+#: ../clutter/clutter-input-device.c:278
msgid "Device Manager"
msgstr "Gestor de dispositiu"
-#: ../clutter/clutter-input-device.c:290
+#: ../clutter/clutter-input-device.c:279
msgid "The device manager instance"
msgstr "La instància del gestor de dispositiu"
-#: ../clutter/clutter-input-device.c:303
+#: ../clutter/clutter-input-device.c:292
msgid "Device Mode"
msgstr "Mode del dispositiu"
-#: ../clutter/clutter-input-device.c:304
+#: ../clutter/clutter-input-device.c:293
msgid "The mode of the device"
msgstr "El mode del dispositiu"
-#: ../clutter/clutter-input-device.c:318
+#: ../clutter/clutter-input-device.c:307
msgid "Has Cursor"
msgstr "Té un cursor"
-#: ../clutter/clutter-input-device.c:319
+#: ../clutter/clutter-input-device.c:308
msgid "Whether the device has a cursor"
msgstr "Si el dispositiu té un cursor"
-#: ../clutter/clutter-input-device.c:338
+#: ../clutter/clutter-input-device.c:327
msgid "Whether the device is enabled"
msgstr "Si el dispositiu és habilitat"
-#: ../clutter/clutter-input-device.c:351
+#: ../clutter/clutter-input-device.c:340
msgid "Number of Axes"
msgstr "Nombre d'eixos"
-#: ../clutter/clutter-input-device.c:352
+#: ../clutter/clutter-input-device.c:341
msgid "The number of axes on the device"
msgstr "El nombre d'eixos en el dispositiu"
-#: ../clutter/clutter-input-device.c:367
+#: ../clutter/clutter-input-device.c:356
msgid "The backend instance"
msgstr "La instància del rerefons"
-#: ../clutter/clutter-interval.c:506
+#: ../clutter/clutter-interval.c:557
msgid "Value Type"
msgstr "Tipus de valor"
-#: ../clutter/clutter-interval.c:507
+#: ../clutter/clutter-interval.c:558
msgid "The type of the values in the interval"
msgstr "El tipus dels valors en l'interval"
-#: ../clutter/clutter-interval.c:522
+#: ../clutter/clutter-interval.c:573
msgid "Initial Value"
msgstr "Valor inicial"
-#: ../clutter/clutter-interval.c:523
+#: ../clutter/clutter-interval.c:574
msgid "Initial value of the interval"
msgstr "El valor inicial de l'interval"
-#: ../clutter/clutter-interval.c:537
+#: ../clutter/clutter-interval.c:588
msgid "Final Value"
msgstr "Valor final"
-#: ../clutter/clutter-interval.c:538
+#: ../clutter/clutter-interval.c:589
msgid "Final value of the interval"
msgstr "El valor final de l'interval"
@@ -1281,96 +1349,96 @@ msgstr "El gestor que ha creat aquesta dada"
#. * Do NOT translate it to non-English e.g. "predefinito:LTR"! If
#. * it isn't default:LTR or default:RTL it will not work.
#.
-#: ../clutter/clutter-main.c:772
+#: ../clutter/clutter-main.c:751
msgid "default:LTR"
msgstr "default:LTR"
-#: ../clutter/clutter-main.c:1646
+#: ../clutter/clutter-main.c:1577
msgid "Show frames per second"
msgstr "Mostra els fotogrames per segon"
-#: ../clutter/clutter-main.c:1648
+#: ../clutter/clutter-main.c:1579
msgid "Default frame rate"
msgstr "Fotogrames per segon per defecte"
-#: ../clutter/clutter-main.c:1650
+#: ../clutter/clutter-main.c:1581
msgid "Make all warnings fatal"
msgstr "Fes que tots els avisos siguin fatals"
-#: ../clutter/clutter-main.c:1653
+#: ../clutter/clutter-main.c:1584
msgid "Direction for the text"
msgstr "Direcció del text"
-#: ../clutter/clutter-main.c:1656
+#: ../clutter/clutter-main.c:1587
msgid "Disable mipmapping on text"
msgstr "Inhabilita el mapat MIP en el text"
-#: ../clutter/clutter-main.c:1659
+#: ../clutter/clutter-main.c:1590
msgid "Use 'fuzzy' picking"
msgstr "Utilitza una selecció «difusa»"
-#: ../clutter/clutter-main.c:1662
+#: ../clutter/clutter-main.c:1593
msgid "Clutter debugging flags to set"
msgstr "Senyaladors de depuració de la Clutter a establir"
-#: ../clutter/clutter-main.c:1664
+#: ../clutter/clutter-main.c:1595
msgid "Clutter debugging flags to unset"
msgstr "Senyaladors de depuració de la Clutter a inhabilitar"
-#: ../clutter/clutter-main.c:1668
+#: ../clutter/clutter-main.c:1599
msgid "Clutter profiling flags to set"
msgstr "Senyaladors de perfilació de la Clutter a establir"
-#: ../clutter/clutter-main.c:1670
+#: ../clutter/clutter-main.c:1601
msgid "Clutter profiling flags to unset"
msgstr "Senyaladors de perfilació de la Clutter a inhabilitar"
-#: ../clutter/clutter-main.c:1673
+#: ../clutter/clutter-main.c:1604
msgid "Enable accessibility"
msgstr "Habilita l'accessibilitat"
-#: ../clutter/clutter-main.c:1865
+#: ../clutter/clutter-main.c:1796
msgid "Clutter Options"
msgstr "Opcions de la Clutter"
-#: ../clutter/clutter-main.c:1866
+#: ../clutter/clutter-main.c:1797
msgid "Show Clutter Options"
msgstr "Mostra les opcions de la Clutter"
-#: ../clutter/clutter-pan-action.c:448
+#: ../clutter/clutter-pan-action.c:455
msgid "Pan Axis"
msgstr "Eix de panorama"
-#: ../clutter/clutter-pan-action.c:449
+#: ../clutter/clutter-pan-action.c:456
msgid "Constraints the panning to an axis"
msgstr "Restringeix el panorama a un eix"
-#: ../clutter/clutter-pan-action.c:463
+#: ../clutter/clutter-pan-action.c:470
msgid "Interpolate"
msgstr "Interpolació"
-#: ../clutter/clutter-pan-action.c:464
+#: ../clutter/clutter-pan-action.c:471
msgid "Whether interpolated events emission is enabled."
msgstr "Si l'emissió d'esdeveniments interpolats és habilitat."
-#: ../clutter/clutter-pan-action.c:480
+#: ../clutter/clutter-pan-action.c:487
msgid "Deceleration"
msgstr "Desacceleració"
-#: ../clutter/clutter-pan-action.c:481
+#: ../clutter/clutter-pan-action.c:488
msgid "Rate at which the interpolated panning will decelerate in"
msgstr "La ràtio en la que la interpolació del panorama desaccelerarà"
-#: ../clutter/clutter-pan-action.c:498
+#: ../clutter/clutter-pan-action.c:505
msgid "Initial acceleration factor"
msgstr "Factor d'acceleració inicial"
-#: ../clutter/clutter-pan-action.c:499
+#: ../clutter/clutter-pan-action.c:506
msgid "Factor applied to the momentum when starting the interpolated phase"
msgstr "El factor aplicat al moment quan s'iniciï la fase d'interpolació"
#: ../clutter/clutter-path-constraint.c:212
-#: ../clutter/deprecated/clutter-behaviour-path.c:225
+#: ../clutter/deprecated/clutter-behaviour-path.c:221
msgid "Path"
msgstr "Camí"
@@ -1382,89 +1450,89 @@ msgstr "El camí utilitzat per restringir un actor"
msgid "The offset along the path, between -1.0 and 2.0"
msgstr "El desplaçament al llarg del camí, entre -1.0 i 2.0"
-#: ../clutter/clutter-property-transition.c:271
+#: ../clutter/clutter-property-transition.c:269
msgid "Property Name"
msgstr "Nom de la propietat"
-#: ../clutter/clutter-property-transition.c:272
+#: ../clutter/clutter-property-transition.c:270
msgid "The name of the property to animate"
msgstr "El nom de la propietat que s'animarà"
-#: ../clutter/clutter-script.c:466
+#: ../clutter/clutter-script.c:464
msgid "Filename Set"
msgstr "Té nom de fitxer"
-#: ../clutter/clutter-script.c:467
+#: ../clutter/clutter-script.c:465
msgid "Whether the :filename property is set"
msgstr "Si la propietat «:filename» té un valor"
-#: ../clutter/clutter-script.c:481
-#: ../clutter/deprecated/clutter-texture.c:1082
+#: ../clutter/clutter-script.c:479
+#: ../clutter/deprecated/clutter-texture.c:1080
msgid "Filename"
msgstr "Nom de fitxer"
-#: ../clutter/clutter-script.c:482
+#: ../clutter/clutter-script.c:480
msgid "The path of the currently parsed file"
msgstr "El camí al fitxer analitzat actualment"
-#: ../clutter/clutter-script.c:499
+#: ../clutter/clutter-script.c:497
msgid "Translation Domain"
msgstr "Domini de la traducció"
-#: ../clutter/clutter-script.c:500
+#: ../clutter/clutter-script.c:498
msgid "The translation domain used to localize string"
msgstr "El domini de traducció utilitzat per ubicar una cadena"
-#: ../clutter/clutter-scroll-actor.c:190
+#: ../clutter/clutter-scroll-actor.c:184
msgid "Scroll Mode"
msgstr "Mode de desplaçament"
-#: ../clutter/clutter-scroll-actor.c:191
+#: ../clutter/clutter-scroll-actor.c:185
msgid "The scrolling direction"
msgstr "La direcció del desplaçament"
-#: ../clutter/clutter-settings.c:448
+#: ../clutter/clutter-settings.c:486
msgid "Double Click Time"
msgstr "Temps del doble clic"
-#: ../clutter/clutter-settings.c:449
+#: ../clutter/clutter-settings.c:487
msgid "The time between clicks necessary to detect a multiple click"
msgstr "El temps entre clics necessari per detectar un clic múltiple"
-#: ../clutter/clutter-settings.c:464
+#: ../clutter/clutter-settings.c:502
msgid "Double Click Distance"
msgstr "Distància de doble clic"
-#: ../clutter/clutter-settings.c:465
+#: ../clutter/clutter-settings.c:503
msgid "The distance between clicks necessary to detect a multiple click"
msgstr "La distància entre clics necessària per detectar un clic múltiple"
-#: ../clutter/clutter-settings.c:480
+#: ../clutter/clutter-settings.c:518
msgid "Drag Threshold"
msgstr "Llindar d'arrossegament"
-#: ../clutter/clutter-settings.c:481
+#: ../clutter/clutter-settings.c:519
msgid "The distance the cursor should travel before starting to drag"
msgstr ""
"La distància que ha de desplaçar-se el cursor abans de començar un "
"arrossegament"
-#: ../clutter/clutter-settings.c:496 ../clutter/clutter-text.c:3367
+#: ../clutter/clutter-settings.c:534 ../clutter/clutter-text.c:3437
msgid "Font Name"
msgstr "Nom del tipus de lletra"
-#: ../clutter/clutter-settings.c:497
+#: ../clutter/clutter-settings.c:535
msgid ""
"The description of the default font, as one that could be parsed by Pango"
msgstr ""
"La descripció del tipus de lletra per defecte, tal com l'hauria d'analitzar "
"la Pango"
-#: ../clutter/clutter-settings.c:512
+#: ../clutter/clutter-settings.c:550
msgid "Font Antialias"
msgstr "Antialiàsing del tipus de lletra"
-#: ../clutter/clutter-settings.c:513
+#: ../clutter/clutter-settings.c:551
msgid ""
"Whether to use antialiasing (1 to enable, 0 to disable, and -1 to use the "
"default)"
@@ -1472,73 +1540,81 @@ msgstr ""
"Si s'ha d'utilitzar l'antialiàsing (1 l'habilita, 0 l'inhabilita i -1 "
"utilitza el per defecte)"
-#: ../clutter/clutter-settings.c:529
+#: ../clutter/clutter-settings.c:567 ../clutter/clutter-settings.c:575
msgid "Font DPI"
msgstr "PPP del tipus de lletra"
-#: ../clutter/clutter-settings.c:530
+#: ../clutter/clutter-settings.c:568 ../clutter/clutter-settings.c:576
msgid ""
"The resolution of the font, in 1024 * dots/inch, or -1 to use the default"
msgstr ""
"La resolució del tipus de lletra, en 1024 * punts/polzada, o -1 utilitza la "
"per defecte"
-#: ../clutter/clutter-settings.c:546
+#: ../clutter/clutter-settings.c:592
msgid "Font Hinting"
msgstr "Contorn del tipus de lletra"
-#: ../clutter/clutter-settings.c:547
+#: ../clutter/clutter-settings.c:593
msgid ""
"Whether to use hinting (1 to enable, 0 to disable and -1 to use the default)"
msgstr ""
"Si s'ha d'utilitzar el contorn (1 l'habilita, 0 l'inhabilita i -1 per "
"utilitzar el per defecte)"
-#: ../clutter/clutter-settings.c:568
+#: ../clutter/clutter-settings.c:613
msgid "Font Hint Style"
msgstr "Estil del contorn del tipus de lletra"
-#: ../clutter/clutter-settings.c:569
+#: ../clutter/clutter-settings.c:614
msgid "The style of hinting (hintnone, hintslight, hintmedium, hintfull)"
msgstr ""
"L'estil del contorn (sense contorn, contorn lleuger, contorn mitjà, contorn "
"complet)"
-#: ../clutter/clutter-settings.c:590
+#: ../clutter/clutter-settings.c:634
msgid "Font Subpixel Order"
msgstr "Ordre de subpíxels del tipus de lletra"
-#: ../clutter/clutter-settings.c:591
+#: ../clutter/clutter-settings.c:635
msgid "The type of subpixel antialiasing (none, rgb, bgr, vrgb, vbgr)"
msgstr "El tipus d'antialiàsing de subpíxel (cap, rgb, bgr, vrgb, vbgr)"
-#: ../clutter/clutter-settings.c:608
+#: ../clutter/clutter-settings.c:652
msgid "The minimum duration for a long press gesture to be recognized"
msgstr "La durada mínima d'una premuda llarga perquè es reconegui"
-#: ../clutter/clutter-settings.c:615
+#: ../clutter/clutter-settings.c:659
+msgid "Window Scaling Factor"
+msgstr "El factor d'escalat de la finestra"
+
+#: ../clutter/clutter-settings.c:660
+msgid "The scaling factor to be applied to windows"
+msgstr "El factor d'escalat que s'ha d'aplicar a les finestres"
+
+#: ../clutter/clutter-settings.c:667
msgid "Fontconfig configuration timestamp"
msgstr "Marca horària de la configuració de la Fontconfig"
-#: ../clutter/clutter-settings.c:616
+#: ../clutter/clutter-settings.c:668
msgid "Timestamp of the current fontconfig configuration"
msgstr "Marca horària de la configuració actual de la Fontconfig"
-#: ../clutter/clutter-settings.c:633
+#: ../clutter/clutter-settings.c:685
msgid "Password Hint Time"
msgstr "Temps de pista de la contrasenya"
-#: ../clutter/clutter-settings.c:634
+#: ../clutter/clutter-settings.c:686
msgid "How long to show the last input character in hidden entries"
msgstr ""
"Temps de durada de visualització de l'últim caràcter introduït en les "
"entrades de ocultes"
-#: ../clutter/clutter-shader-effect.c:486
+#: ../clutter/clutter-shader-effect.c:487
msgid "Shader Type"
msgstr "Tipus de shader"
-#: ../clutter/clutter-shader-effect.c:487
+#: ../clutter/clutter-shader-effect.c:488
msgid "The type of shader used"
msgstr "El tipus de shader que s'utilitza"
@@ -1566,760 +1642,704 @@ msgstr "La vora de la font que s'hauria de trencar"
msgid "The offset in pixels to apply to the constraint"
msgstr "El desplaçament, en píxels, a aplicar a la restricció"
-#: ../clutter/clutter-stage.c:1929
+#: ../clutter/clutter-stage.c:1918
msgid "Fullscreen Set"
msgstr "A pantalla completa"
-#: ../clutter/clutter-stage.c:1930
+#: ../clutter/clutter-stage.c:1919
msgid "Whether the main stage is fullscreen"
msgstr "Si l'escenari principal és a pantalla completa"
-#: ../clutter/clutter-stage.c:1944
+#: ../clutter/clutter-stage.c:1933
msgid "Offscreen"
msgstr "Fora de pantalla"
-#: ../clutter/clutter-stage.c:1945
+#: ../clutter/clutter-stage.c:1934
msgid "Whether the main stage should be rendered offscreen"
msgstr "Si l'escenari principal hauria de renderitzar-se fora de pantalla"
-#: ../clutter/clutter-stage.c:1957 ../clutter/clutter-text.c:3481
+#: ../clutter/clutter-stage.c:1946 ../clutter/clutter-text.c:3551
msgid "Cursor Visible"
msgstr "Visibilitat del cursor"
-#: ../clutter/clutter-stage.c:1958
+#: ../clutter/clutter-stage.c:1947
msgid "Whether the mouse pointer is visible on the main stage"
msgstr "Si el punter del ratolí és visible a l'escenari principal"
-#: ../clutter/clutter-stage.c:1972
+#: ../clutter/clutter-stage.c:1961
msgid "User Resizable"
msgstr "Redimensionable per l'usuari"
-#: ../clutter/clutter-stage.c:1973
+#: ../clutter/clutter-stage.c:1962
msgid "Whether the stage is able to be resized via user interaction"
msgstr "Si l'usuari pot redimensionar l'escenari"
-#: ../clutter/clutter-stage.c:1988 ../clutter/deprecated/clutter-box.c:260
-#: ../clutter/deprecated/clutter-rectangle.c:273
+#: ../clutter/clutter-stage.c:1977 ../clutter/deprecated/clutter-box.c:254
+#: ../clutter/deprecated/clutter-rectangle.c:270
msgid "Color"
msgstr "Color"
-#: ../clutter/clutter-stage.c:1989
+#: ../clutter/clutter-stage.c:1978
msgid "The color of the stage"
msgstr "El color de l'escenari"
-#: ../clutter/clutter-stage.c:2004
+#: ../clutter/clutter-stage.c:1993
msgid "Perspective"
msgstr "Perspectiva"
-#: ../clutter/clutter-stage.c:2005
+#: ../clutter/clutter-stage.c:1994
msgid "Perspective projection parameters"
msgstr "Els paràmetres de projecció de la perspectiva"
-#: ../clutter/clutter-stage.c:2020
+#: ../clutter/clutter-stage.c:2009
msgid "Title"
msgstr "Títol"
-#: ../clutter/clutter-stage.c:2021
+#: ../clutter/clutter-stage.c:2010
msgid "Stage Title"
msgstr "Títol de l'escenari"
-#: ../clutter/clutter-stage.c:2038
+#: ../clutter/clutter-stage.c:2027
msgid "Use Fog"
msgstr "Utilitza la boira"
-#: ../clutter/clutter-stage.c:2039
+#: ../clutter/clutter-stage.c:2028
msgid "Whether to enable depth cueing"
msgstr "Si s'habilita la percepció de profunditat"
-#: ../clutter/clutter-stage.c:2055
+#: ../clutter/clutter-stage.c:2044
msgid "Fog"
msgstr "Boira"
-#: ../clutter/clutter-stage.c:2056
+#: ../clutter/clutter-stage.c:2045
msgid "Settings for the depth cueing"
msgstr "Paràmetres de la percepció de profunditat"
-#: ../clutter/clutter-stage.c:2072
+#: ../clutter/clutter-stage.c:2061
msgid "Use Alpha"
msgstr "Utilitza l'alfa"
-#: ../clutter/clutter-stage.c:2073
+#: ../clutter/clutter-stage.c:2062
msgid "Whether to honour the alpha component of the stage color"
msgstr "Si s'ha de respectar el component alfa del color de l'escenari"
-#: ../clutter/clutter-stage.c:2089
+#: ../clutter/clutter-stage.c:2078
msgid "Key Focus"
msgstr "Focus clau"
-#: ../clutter/clutter-stage.c:2090
+#: ../clutter/clutter-stage.c:2079
msgid "The currently key focused actor"
msgstr "L'actor clau que té el focus"
-#: ../clutter/clutter-stage.c:2106
+#: ../clutter/clutter-stage.c:2095
msgid "No Clear Hint"
msgstr "Sense indicació de neteja"
-#: ../clutter/clutter-stage.c:2107
+#: ../clutter/clutter-stage.c:2096
msgid "Whether the stage should clear its contents"
msgstr "Si l'escenari hauria de netejar els seus continguts"
-#: ../clutter/clutter-stage.c:2120
+#: ../clutter/clutter-stage.c:2109
msgid "Accept Focus"
msgstr "Accepta el focus"
-#: ../clutter/clutter-stage.c:2121
+#: ../clutter/clutter-stage.c:2110
msgid "Whether the stage should accept focus on show"
msgstr "Si l'escenari hauria d'acceptar el focus en mostrar-se"
-#: ../clutter/clutter-table-layout.c:543
-msgid "Column Number"
-msgstr "Número de columna"
-
-#: ../clutter/clutter-table-layout.c:544
-msgid "The column the widget resides in"
-msgstr "La columna en la que està el giny"
-
-#: ../clutter/clutter-table-layout.c:551
-msgid "Row Number"
-msgstr "Número de fila"
-
-#: ../clutter/clutter-table-layout.c:552
-msgid "The row the widget resides in"
-msgstr "La fila en la que està el giny"
-
-#: ../clutter/clutter-table-layout.c:559
-msgid "Column Span"
-msgstr "Abast en columnes"
-
-#: ../clutter/clutter-table-layout.c:560
-msgid "The number of columns the widget should span"
-msgstr "El nombre de columnes que hauria d'abastir el giny"
-
-#: ../clutter/clutter-table-layout.c:567
-msgid "Row Span"
-msgstr "Abast en files"
-
-#: ../clutter/clutter-table-layout.c:568
-msgid "The number of rows the widget should span"
-msgstr "El nombre de files que hauria d'abastir el giny"
-
-#: ../clutter/clutter-table-layout.c:575
-msgid "Horizontal Expand"
-msgstr "Expansió horitzontal"
-
-#: ../clutter/clutter-table-layout.c:576
-msgid "Allocate extra space for the child in horizontal axis"
-msgstr "Ubica espai extra per al fill en l'eix horitzontal"
-
-#: ../clutter/clutter-table-layout.c:582
-msgid "Vertical Expand"
-msgstr "Expansió vertical"
-
-#: ../clutter/clutter-table-layout.c:583
-msgid "Allocate extra space for the child in vertical axis"
-msgstr "Ubica espai extra per al fill en l'eix vertical"
-
-#: ../clutter/clutter-table-layout.c:1638
-msgid "Spacing between columns"
-msgstr "Espaiat entre columnes"
-
-#: ../clutter/clutter-table-layout.c:1652
-msgid "Spacing between rows"
-msgstr "Espaiat entre files"
-
-#: ../clutter/clutter-text-buffer.c:351 ../clutter/clutter-text.c:3402
+#: ../clutter/clutter-text-buffer.c:347 ../clutter/clutter-text.c:3472
msgid "Text"
msgstr "Text"
-#: ../clutter/clutter-text-buffer.c:352
+#: ../clutter/clutter-text-buffer.c:348
msgid "The contents of the buffer"
msgstr "El contingut de la memòria intermèdia"
-#: ../clutter/clutter-text-buffer.c:365
+#: ../clutter/clutter-text-buffer.c:361
msgid "Text length"
msgstr "Llargada del text"
-#: ../clutter/clutter-text-buffer.c:366
+#: ../clutter/clutter-text-buffer.c:362
msgid "Length of the text currently in the buffer"
msgstr "La llargada del text que hi ha actualment a la memòria intermèdia"
-#: ../clutter/clutter-text-buffer.c:379
+#: ../clutter/clutter-text-buffer.c:375
msgid "Maximum length"
msgstr "Llargada màxima"
-#: ../clutter/clutter-text-buffer.c:380
+#: ../clutter/clutter-text-buffer.c:376
msgid "Maximum number of characters for this entry. Zero if no maximum"
msgstr "Nombre màxim de caràcters per aquesta entrada. Zero si no té màxim"
-#: ../clutter/clutter-text.c:3349
+#: ../clutter/clutter-text.c:3419
msgid "Buffer"
msgstr "Memòria intermèdia"
-#: ../clutter/clutter-text.c:3350
+#: ../clutter/clutter-text.c:3420
msgid "The buffer for the text"
msgstr "La memòria intermèdia del text"
-#: ../clutter/clutter-text.c:3368
+#: ../clutter/clutter-text.c:3438
msgid "The font to be used by the text"
msgstr "El tipus de lletra per al text"
-#: ../clutter/clutter-text.c:3385
+#: ../clutter/clutter-text.c:3455
msgid "Font Description"
msgstr "Descripció del tipus de lletra"
-#: ../clutter/clutter-text.c:3386
+#: ../clutter/clutter-text.c:3456
msgid "The font description to be used"
msgstr "La descripció del tipus de lletra que s'utilitzarà"
-#: ../clutter/clutter-text.c:3403
+#: ../clutter/clutter-text.c:3473
msgid "The text to render"
msgstr "El text a renderitzar"
-#: ../clutter/clutter-text.c:3417
+#: ../clutter/clutter-text.c:3487
msgid "Font Color"
msgstr "Color del tipus de lletra"
-#: ../clutter/clutter-text.c:3418
+#: ../clutter/clutter-text.c:3488
msgid "Color of the font used by the text"
msgstr "El color del tipus de lletra que utilitzarà el text"
-#: ../clutter/clutter-text.c:3433
+#: ../clutter/clutter-text.c:3503
msgid "Editable"
msgstr "Editable"
-#: ../clutter/clutter-text.c:3434
+#: ../clutter/clutter-text.c:3504
msgid "Whether the text is editable"
msgstr "Si el text es pot editar"
-#: ../clutter/clutter-text.c:3449
+#: ../clutter/clutter-text.c:3519
msgid "Selectable"
msgstr "Seleccionable"
-#: ../clutter/clutter-text.c:3450
+#: ../clutter/clutter-text.c:3520
msgid "Whether the text is selectable"
msgstr "Si el text es pot seleccionar"
-#: ../clutter/clutter-text.c:3464
+#: ../clutter/clutter-text.c:3534
msgid "Activatable"
msgstr "Activable"
-#: ../clutter/clutter-text.c:3465
+#: ../clutter/clutter-text.c:3535
msgid "Whether pressing return causes the activate signal to be emitted"
msgstr "Si s'emet el senyal d'activació en prémer la tecla de retorn"
-#: ../clutter/clutter-text.c:3482
+#: ../clutter/clutter-text.c:3552
msgid "Whether the input cursor is visible"
msgstr "Si és visible el cursor d'entrada"
-#: ../clutter/clutter-text.c:3496 ../clutter/clutter-text.c:3497
+#: ../clutter/clutter-text.c:3566 ../clutter/clutter-text.c:3567
msgid "Cursor Color"
msgstr "Color del cursor"
-#: ../clutter/clutter-text.c:3512
+#: ../clutter/clutter-text.c:3582
msgid "Cursor Color Set"
msgstr "Establert el color del cursor"
-#: ../clutter/clutter-text.c:3513
+#: ../clutter/clutter-text.c:3583
msgid "Whether the cursor color has been set"
msgstr "Si s'ha establert el color del cursor"
-#: ../clutter/clutter-text.c:3528
+#: ../clutter/clutter-text.c:3598
msgid "Cursor Size"
msgstr "Mida del cursor"
-#: ../clutter/clutter-text.c:3529
+#: ../clutter/clutter-text.c:3599
msgid "The width of the cursor, in pixels"
msgstr "L'amplada del cursor, en píxels"
-#: ../clutter/clutter-text.c:3545 ../clutter/clutter-text.c:3563
+#: ../clutter/clutter-text.c:3615 ../clutter/clutter-text.c:3633
msgid "Cursor Position"
msgstr "Posició del cursor"
-#: ../clutter/clutter-text.c:3546 ../clutter/clutter-text.c:3564
+#: ../clutter/clutter-text.c:3616 ../clutter/clutter-text.c:3634
msgid "The cursor position"
msgstr "La posició del cursor"
-#: ../clutter/clutter-text.c:3579
+#: ../clutter/clutter-text.c:3649
msgid "Selection-bound"
msgstr "Extrem de selecció"
-#: ../clutter/clutter-text.c:3580
+#: ../clutter/clutter-text.c:3650
msgid "The cursor position of the other end of the selection"
msgstr "La posició del cursor a l'altre extrem de la selecció"
-#: ../clutter/clutter-text.c:3595 ../clutter/clutter-text.c:3596
+#: ../clutter/clutter-text.c:3665 ../clutter/clutter-text.c:3666
msgid "Selection Color"
msgstr "Color de la selecció"
-#: ../clutter/clutter-text.c:3611
+#: ../clutter/clutter-text.c:3681
msgid "Selection Color Set"
msgstr "Establert el color de selecció"
-#: ../clutter/clutter-text.c:3612
+#: ../clutter/clutter-text.c:3682
msgid "Whether the selection color has been set"
msgstr "Si s'ha establert el color de selecció"
-#: ../clutter/clutter-text.c:3627
+#: ../clutter/clutter-text.c:3697
msgid "Attributes"
msgstr "Atributs"
-#: ../clutter/clutter-text.c:3628
+#: ../clutter/clutter-text.c:3698
msgid "A list of style attributes to apply to the contents of the actor"
msgstr "Una llista d'atributs d'estil per aplicar als continguts de l'actor"
-#: ../clutter/clutter-text.c:3650
+#: ../clutter/clutter-text.c:3720
msgid "Use markup"
msgstr "Utilitza l'etiquetatge"
-#: ../clutter/clutter-text.c:3651
+#: ../clutter/clutter-text.c:3721
msgid "Whether or not the text includes Pango markup"
msgstr "Si el text inclou etiquetatge de la Pango"
-#: ../clutter/clutter-text.c:3667
+#: ../clutter/clutter-text.c:3737
msgid "Line wrap"
msgstr "Ajustament de línia"
-#: ../clutter/clutter-text.c:3668
+#: ../clutter/clutter-text.c:3738
msgid "If set, wrap the lines if the text becomes too wide"
msgstr "Si s'estableix, ajusta les línies si el text és massa ample"
-#: ../clutter/clutter-text.c:3683
+#: ../clutter/clutter-text.c:3753
msgid "Line wrap mode"
msgstr "Mode d'ajust de línia"
-#: ../clutter/clutter-text.c:3684
+#: ../clutter/clutter-text.c:3754
msgid "Control how line-wrapping is done"
msgstr "Controla com s'ajusten les línies"
-#: ../clutter/clutter-text.c:3699
+#: ../clutter/clutter-text.c:3769
msgid "Ellipsize"
msgstr "Punts suspensius"
-#: ../clutter/clutter-text.c:3700
+#: ../clutter/clutter-text.c:3770
msgid "The preferred place to ellipsize the string"
msgstr "El lloc preferit on posar punts suspensius al segment"
-#: ../clutter/clutter-text.c:3716
+#: ../clutter/clutter-text.c:3786
msgid "Line Alignment"
msgstr "Alineació de la línia"
-#: ../clutter/clutter-text.c:3717
+#: ../clutter/clutter-text.c:3787
msgid "The preferred alignment for the string, for multi-line text"
msgstr ""
"L'alineació preferida per al segment quan és un text de més d'una línia"
-#: ../clutter/clutter-text.c:3733
+#: ../clutter/clutter-text.c:3803
msgid "Justify"
msgstr "Justifica"
-#: ../clutter/clutter-text.c:3734
+#: ../clutter/clutter-text.c:3804
msgid "Whether the text should be justified"
msgstr "Si el text s'hauria de justificar"
-#: ../clutter/clutter-text.c:3749
+#: ../clutter/clutter-text.c:3819
msgid "Password Character"
msgstr "Caràcter de contrasenya"
-#: ../clutter/clutter-text.c:3750
+#: ../clutter/clutter-text.c:3820
msgid "If non-zero, use this character to display the actor's contents"
msgstr ""
"Si no és zero, utilitza aquest caràcter per mostrar els continguts de l'actor"
-#: ../clutter/clutter-text.c:3764
+#: ../clutter/clutter-text.c:3834
msgid "Max Length"
msgstr "Llargada màxima"
-#: ../clutter/clutter-text.c:3765
+#: ../clutter/clutter-text.c:3835
msgid "Maximum length of the text inside the actor"
msgstr "Llargada màxima del text dins de l'actor"
-#: ../clutter/clutter-text.c:3788
+#: ../clutter/clutter-text.c:3858
msgid "Single Line Mode"
msgstr "Mode d'una línia sola"
-#: ../clutter/clutter-text.c:3789
+#: ../clutter/clutter-text.c:3859
msgid "Whether the text should be a single line"
msgstr "Si el text hauria de ser una sola línia"
-#: ../clutter/clutter-text.c:3803 ../clutter/clutter-text.c:3804
+#: ../clutter/clutter-text.c:3873 ../clutter/clutter-text.c:3874
msgid "Selected Text Color"
msgstr "Color del text seleccionat"
-#: ../clutter/clutter-text.c:3819
+#: ../clutter/clutter-text.c:3889
msgid "Selected Text Color Set"
msgstr "Establert el color del text seleccionat"
-#: ../clutter/clutter-text.c:3820
+#: ../clutter/clutter-text.c:3890
msgid "Whether the selected text color has been set"
msgstr "Si s'ha establert el color del text seleccionat"
-#: ../clutter/clutter-timeline.c:594
-#: ../clutter/deprecated/clutter-animation.c:560
+#: ../clutter/clutter-timeline.c:591
+#: ../clutter/deprecated/clutter-animation.c:506
msgid "Loop"
msgstr "Repetició"
-#: ../clutter/clutter-timeline.c:595
+#: ../clutter/clutter-timeline.c:592
msgid "Should the timeline automatically restart"
msgstr "Si s'hauria de reiniciar automàticament la línia del temps"
-#: ../clutter/clutter-timeline.c:609
+#: ../clutter/clutter-timeline.c:606
msgid "Delay"
msgstr "Retard"
-#: ../clutter/clutter-timeline.c:610
+#: ../clutter/clutter-timeline.c:607
msgid "Delay before start"
msgstr "El retard abans d'iniciar"
-#: ../clutter/clutter-timeline.c:625
-#: ../clutter/deprecated/clutter-animation.c:544
-#: ../clutter/deprecated/clutter-animator.c:1804
+#: ../clutter/clutter-timeline.c:622
+#: ../clutter/deprecated/clutter-animation.c:490
+#: ../clutter/deprecated/clutter-animator.c:1792
#: ../clutter/deprecated/clutter-media.c:224
-#: ../clutter/deprecated/clutter-state.c:1523
+#: ../clutter/deprecated/clutter-state.c:1515
msgid "Duration"
msgstr "Durada"
-#: ../clutter/clutter-timeline.c:626
+#: ../clutter/clutter-timeline.c:623
msgid "Duration of the timeline in milliseconds"
-msgstr "La durada de la línia del temps en miŀlisegons"
+msgstr "La durada de la línia del temps en mil·lisegons"
-#: ../clutter/clutter-timeline.c:641
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:528
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:337
+#: ../clutter/clutter-timeline.c:638
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:521
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:330
msgid "Direction"
msgstr "Direcció"
-#: ../clutter/clutter-timeline.c:642
+#: ../clutter/clutter-timeline.c:639
msgid "Direction of the timeline"
msgstr "La direcció de la línia del temps"
-#: ../clutter/clutter-timeline.c:657
+#: ../clutter/clutter-timeline.c:654
msgid "Auto Reverse"
msgstr "Capgira automàticament"
-#: ../clutter/clutter-timeline.c:658
+#: ../clutter/clutter-timeline.c:655
msgid "Whether the direction should be reversed when reaching the end"
msgstr "Si la direcció s'hauria de capgirar quan s'arribi al final"
-#: ../clutter/clutter-timeline.c:676
+#: ../clutter/clutter-timeline.c:673
msgid "Repeat Count"
msgstr "Comptador de repeticions"
-#: ../clutter/clutter-timeline.c:677
+#: ../clutter/clutter-timeline.c:674
msgid "How many times the timeline should repeat"
msgstr "Nombre de vegades que s'hauria de repetir la línia de temps"
-#: ../clutter/clutter-timeline.c:691
+#: ../clutter/clutter-timeline.c:688
msgid "Progress Mode"
msgstr "Mode de progrés"
-#: ../clutter/clutter-timeline.c:692
+#: ../clutter/clutter-timeline.c:689
msgid "How the timeline should compute the progress"
msgstr "Com s'ha de calcular el progrés de la línia del temps"
-#: ../clutter/clutter-transition.c:246
+#: ../clutter/clutter-transition.c:244
msgid "Interval"
msgstr "Interval"
-#: ../clutter/clutter-transition.c:247
+#: ../clutter/clutter-transition.c:245
msgid "The interval of values to transition"
msgstr "L'interval de valors en que es farà la transició"
-#: ../clutter/clutter-transition.c:261
+#: ../clutter/clutter-transition.c:259
msgid "Animatable"
msgstr "Es pot animar"
-#: ../clutter/clutter-transition.c:262
+#: ../clutter/clutter-transition.c:260
msgid "The animatable object"
msgstr "L'objecte que es pot animar"
-#: ../clutter/clutter-transition.c:283
+#: ../clutter/clutter-transition.c:281
msgid "Remove on Complete"
msgstr "Suprimeix en completar"
-#: ../clutter/clutter-transition.c:284
+#: ../clutter/clutter-transition.c:282
msgid "Detach the transition when completed"
msgstr "Desacobla la transició quan es completi"
-#: ../clutter/clutter-zoom-action.c:354
+#: ../clutter/clutter-zoom-action.c:365
msgid "Zoom Axis"
msgstr "Eix d'ampliació"
-#: ../clutter/clutter-zoom-action.c:355
+#: ../clutter/clutter-zoom-action.c:366
msgid "Constraints the zoom to an axis"
msgstr "Restringeix l'ampliació a un eix"
-#: ../clutter/deprecated/clutter-alpha.c:355
-#: ../clutter/deprecated/clutter-animation.c:575
-#: ../clutter/deprecated/clutter-animator.c:1821
+#: ../clutter/deprecated/clutter-alpha.c:347
+#: ../clutter/deprecated/clutter-animation.c:521
+#: ../clutter/deprecated/clutter-animator.c:1809
msgid "Timeline"
msgstr "Línia del temps"
-#: ../clutter/deprecated/clutter-alpha.c:356
+#: ../clutter/deprecated/clutter-alpha.c:348
msgid "Timeline used by the alpha"
msgstr "La línia del temps que utilitzarà l'alfa"
-#: ../clutter/deprecated/clutter-alpha.c:372
+#: ../clutter/deprecated/clutter-alpha.c:364
msgid "Alpha value"
msgstr "Valor alfa"
-#: ../clutter/deprecated/clutter-alpha.c:373
+#: ../clutter/deprecated/clutter-alpha.c:365
msgid "Alpha value as computed by the alpha"
msgstr "El valor alfa calculat per l'alfa"
-#: ../clutter/deprecated/clutter-alpha.c:394
-#: ../clutter/deprecated/clutter-animation.c:528
+#: ../clutter/deprecated/clutter-alpha.c:386
+#: ../clutter/deprecated/clutter-animation.c:474
msgid "Mode"
msgstr "Mode"
-#: ../clutter/deprecated/clutter-alpha.c:395
+#: ../clutter/deprecated/clutter-alpha.c:387
msgid "Progress mode"
msgstr "Mode de progrés"
-#: ../clutter/deprecated/clutter-animation.c:511
+#: ../clutter/deprecated/clutter-animation.c:457
msgid "Object"
msgstr "Objecte"
-#: ../clutter/deprecated/clutter-animation.c:512
+#: ../clutter/deprecated/clutter-animation.c:458
msgid "Object to which the animation applies"
msgstr "L'objecte al que s'aplica l'animació"
-#: ../clutter/deprecated/clutter-animation.c:529
+#: ../clutter/deprecated/clutter-animation.c:475
msgid "The mode of the animation"
msgstr "El mode de l'animació"
-#: ../clutter/deprecated/clutter-animation.c:545
+#: ../clutter/deprecated/clutter-animation.c:491
msgid "Duration of the animation, in milliseconds"
-msgstr "Durada de l'animació, en miŀlisegons"
+msgstr "Durada de l'animació, en mil·lisegons"
-#: ../clutter/deprecated/clutter-animation.c:561
+#: ../clutter/deprecated/clutter-animation.c:507
msgid "Whether the animation should loop"
msgstr "Si l'animació s'hauria de repetir"
-#: ../clutter/deprecated/clutter-animation.c:576
+#: ../clutter/deprecated/clutter-animation.c:522
msgid "The timeline used by the animation"
msgstr "La línia del temps que utilitzarà l'animació"
-#: ../clutter/deprecated/clutter-animation.c:592
-#: ../clutter/deprecated/clutter-behaviour.c:241
+#: ../clutter/deprecated/clutter-animation.c:538
+#: ../clutter/deprecated/clutter-behaviour.c:237
msgid "Alpha"
msgstr "Alfa"
-#: ../clutter/deprecated/clutter-animation.c:593
+#: ../clutter/deprecated/clutter-animation.c:539
msgid "The alpha used by the animation"
msgstr "L'alfa que utilitzarà l'animació"
-#: ../clutter/deprecated/clutter-animator.c:1805
+#: ../clutter/deprecated/clutter-animator.c:1793
msgid "The duration of the animation"
msgstr "La durada de l'animació"
-#: ../clutter/deprecated/clutter-animator.c:1822
+#: ../clutter/deprecated/clutter-animator.c:1810
msgid "The timeline of the animation"
msgstr "La línia del temps de l'animació"
-#: ../clutter/deprecated/clutter-behaviour.c:242
+#: ../clutter/deprecated/clutter-behaviour.c:238
msgid "Alpha Object to drive the behaviour"
msgstr "L'objecte alfa que estableix el comportament"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:182
+#: ../clutter/deprecated/clutter-behaviour-depth.c:180
msgid "Start Depth"
msgstr "Profunditat inicial"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:183
+#: ../clutter/deprecated/clutter-behaviour-depth.c:181
msgid "Initial depth to apply"
msgstr "La profunditat inicial a aplicar"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:198
+#: ../clutter/deprecated/clutter-behaviour-depth.c:196
msgid "End Depth"
msgstr "Profunditat final"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:199
+#: ../clutter/deprecated/clutter-behaviour-depth.c:197
msgid "Final depth to apply"
msgstr "La profunditat final a aplicar"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:401
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:394
msgid "Start Angle"
msgstr "Angle d'inici"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:402
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:284
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:395
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:277
msgid "Initial angle"
msgstr "Angle inicial"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:417
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:410
msgid "End Angle"
msgstr "Angle de fi"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:418
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:302
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:411
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:295
msgid "Final angle"
msgstr "Angle final"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:433
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:426
msgid "Angle x tilt"
msgstr "Angle d'inclinació X"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:434
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:427
msgid "Tilt of the ellipse around x axis"
-msgstr "La inclinació de l'eŀlipse al voltant de l'eix de les X"
+msgstr "La inclinació de l'el·lipse al voltant de l'eix de les X"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:449
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:442
msgid "Angle y tilt"
msgstr "Angle d'inclinació Y"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:450
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:443
msgid "Tilt of the ellipse around y axis"
-msgstr "La inclinació de l'eŀlipse al voltant de l'eix de les Y"
+msgstr "La inclinació de l'el·lipse al voltant de l'eix de les Y"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:465
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:458
msgid "Angle z tilt"
msgstr "Angle d'inclinació Z"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:466
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:459
msgid "Tilt of the ellipse around z axis"
-msgstr "La inclinació de l'eŀlipse al voltant de l'eix de les Z"
+msgstr "La inclinació de l'el·lipse al voltant de l'eix de les Z"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:482
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:475
msgid "Width of the ellipse"
-msgstr "Amplada de l'eŀlipse"
+msgstr "Amplada de l'el·lipse"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:498
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:491
msgid "Height of ellipse"
-msgstr "Alçada de l'eŀlipse"
+msgstr "Alçada de l'el·lipse"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:513
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:506
msgid "Center"
msgstr "Centre"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:514
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:507
msgid "Center of ellipse"
-msgstr "El centre de l'eŀlipse"
+msgstr "El centre de l'el·lipse"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:529
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:338
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:522
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:331
msgid "Direction of rotation"
msgstr "Direcció de la rotació"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:184
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:177
msgid "Opacity Start"
msgstr "Opacitat inicial"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:185
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:178
msgid "Initial opacity level"
msgstr "El nivell d'opacitat inicial"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:202
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:195
msgid "Opacity End"
msgstr "Opacitat final"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:203
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:196
msgid "Final opacity level"
msgstr "El nivell d'opacitat final"
-#: ../clutter/deprecated/clutter-behaviour-path.c:226
+#: ../clutter/deprecated/clutter-behaviour-path.c:222
msgid "The ClutterPath object representing the path to animate along"
msgstr "L'objecte «ClutterPath» que representa el camí en el que s'anima"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:283
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:276
msgid "Angle Begin"
msgstr "Angle inicial"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:301
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:294
msgid "Angle End"
msgstr "Angle final"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:319
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:312
msgid "Axis"
msgstr "Eix"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:320
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:313
msgid "Axis of rotation"
msgstr "L'eix de rotació"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:355
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:348
msgid "Center X"
msgstr "Centre X"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:356
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:349
msgid "X coordinate of the center of rotation"
msgstr "La coordenada X del centre de rotació"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:373
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:366
msgid "Center Y"
msgstr "Centre Y"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:374
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:367
msgid "Y coordinate of the center of rotation"
msgstr "La coordenada Y del centre de rotació"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:391
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:384
msgid "Center Z"
msgstr "Centre Z"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:392
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:385
msgid "Z coordinate of the center of rotation"
msgstr "La coordenada Z del centre de rotació"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:226
+#: ../clutter/deprecated/clutter-behaviour-scale.c:222
msgid "X Start Scale"
msgstr "Escala inicial X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:227
+#: ../clutter/deprecated/clutter-behaviour-scale.c:223
msgid "Initial scale on the X axis"
msgstr "L'escala inicial en l'eix de les X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:245
+#: ../clutter/deprecated/clutter-behaviour-scale.c:241
msgid "X End Scale"
msgstr "Escala final X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:246
+#: ../clutter/deprecated/clutter-behaviour-scale.c:242
msgid "Final scale on the X axis"
msgstr "L'escala final en l'eix de les X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:264
+#: ../clutter/deprecated/clutter-behaviour-scale.c:260
msgid "Y Start Scale"
msgstr "Escala inicial Y"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:265
+#: ../clutter/deprecated/clutter-behaviour-scale.c:261
msgid "Initial scale on the Y axis"
msgstr "L'escala inicial en l'eix de les Y"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:283
+#: ../clutter/deprecated/clutter-behaviour-scale.c:279
msgid "Y End Scale"
msgstr "Escala final Y"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:284
+#: ../clutter/deprecated/clutter-behaviour-scale.c:280
msgid "Final scale on the Y axis"
msgstr "L'escala final en l'eix de les Y"
-#: ../clutter/deprecated/clutter-box.c:261
+#: ../clutter/deprecated/clutter-box.c:255
msgid "The background color of the box"
msgstr "El color de fons de la caixa"
-#: ../clutter/deprecated/clutter-box.c:274
+#: ../clutter/deprecated/clutter-box.c:268
msgid "Color Set"
msgstr "Té color"
-#: ../clutter/deprecated/clutter-cairo-texture.c:597
+#: ../clutter/deprecated/clutter-cairo-texture.c:585
msgid "Surface Width"
msgstr "Amplada de la superfície"
-#: ../clutter/deprecated/clutter-cairo-texture.c:598
+#: ../clutter/deprecated/clutter-cairo-texture.c:586
msgid "The width of the Cairo surface"
msgstr "L'amplada de la superfície Cairo"
-#: ../clutter/deprecated/clutter-cairo-texture.c:615
+#: ../clutter/deprecated/clutter-cairo-texture.c:603
msgid "Surface Height"
msgstr "Alçada de la superfície"
-#: ../clutter/deprecated/clutter-cairo-texture.c:616
+#: ../clutter/deprecated/clutter-cairo-texture.c:604
msgid "The height of the Cairo surface"
msgstr "L'alçada de la superfície Cairo"
-#: ../clutter/deprecated/clutter-cairo-texture.c:636
+#: ../clutter/deprecated/clutter-cairo-texture.c:624
msgid "Auto Resize"
msgstr "Redimensiona automàticament"
-#: ../clutter/deprecated/clutter-cairo-texture.c:637
+#: ../clutter/deprecated/clutter-cairo-texture.c:625
msgid "Whether the surface should match the allocation"
msgstr "Si la superfície hauria de coincidir amb la ubicació"
@@ -2391,104 +2411,160 @@ msgstr "El nivell d'emplenament de la memòria intermèdia"
msgid "The duration of the stream, in seconds"
msgstr "La durada del flux, en segons"
-#: ../clutter/deprecated/clutter-rectangle.c:274
+#: ../clutter/deprecated/clutter-rectangle.c:271
msgid "The color of the rectangle"
msgstr "El color del rectangle"
-#: ../clutter/deprecated/clutter-rectangle.c:287
+#: ../clutter/deprecated/clutter-rectangle.c:284
msgid "Border Color"
msgstr "Color de la vora"
-#: ../clutter/deprecated/clutter-rectangle.c:288
+#: ../clutter/deprecated/clutter-rectangle.c:285
msgid "The color of the border of the rectangle"
msgstr "El color de la vora del rectangle"
-#: ../clutter/deprecated/clutter-rectangle.c:303
+#: ../clutter/deprecated/clutter-rectangle.c:300
msgid "Border Width"
msgstr "Amplada de la vora"
-#: ../clutter/deprecated/clutter-rectangle.c:304
+#: ../clutter/deprecated/clutter-rectangle.c:301
msgid "The width of the border of the rectangle"
msgstr "L'amplada de la vora del rectangle"
-#: ../clutter/deprecated/clutter-rectangle.c:318
+#: ../clutter/deprecated/clutter-rectangle.c:315
msgid "Has Border"
msgstr "Té vora"
-#: ../clutter/deprecated/clutter-rectangle.c:319
+#: ../clutter/deprecated/clutter-rectangle.c:316
msgid "Whether the rectangle should have a border"
msgstr "Si el rectangle hauria de tenir vora"
-#: ../clutter/deprecated/clutter-shader.c:261
+#: ../clutter/deprecated/clutter-shader.c:257
msgid "Vertex Source"
msgstr "Font del vèrtex"
-#: ../clutter/deprecated/clutter-shader.c:262
+#: ../clutter/deprecated/clutter-shader.c:258
msgid "Source of vertex shader"
msgstr "Font del shader del vèrtex"
-#: ../clutter/deprecated/clutter-shader.c:278
+#: ../clutter/deprecated/clutter-shader.c:274
msgid "Fragment Source"
msgstr "Font del fragment"
-#: ../clutter/deprecated/clutter-shader.c:279
+#: ../clutter/deprecated/clutter-shader.c:275
msgid "Source of fragment shader"
msgstr "Font del shader del fragment"
-#: ../clutter/deprecated/clutter-shader.c:296
+#: ../clutter/deprecated/clutter-shader.c:292
msgid "Compiled"
msgstr "Compilat"
-#: ../clutter/deprecated/clutter-shader.c:297
+#: ../clutter/deprecated/clutter-shader.c:293
msgid "Whether the shader is compiled and linked"
msgstr "Si el shader és compilat i enllaçat"
-#: ../clutter/deprecated/clutter-shader.c:314
+#: ../clutter/deprecated/clutter-shader.c:310
msgid "Whether the shader is enabled"
msgstr "Si el shader és habilitat"
-#: ../clutter/deprecated/clutter-shader.c:525
+#: ../clutter/deprecated/clutter-shader.c:521
#, c-format
msgid "%s compilation failed: %s"
msgstr "Ha fallat la compilació del %s: %s"
-#: ../clutter/deprecated/clutter-shader.c:526
+#: ../clutter/deprecated/clutter-shader.c:522
msgid "Vertex shader"
msgstr "Shader de vèrtex"
-#: ../clutter/deprecated/clutter-shader.c:527
+#: ../clutter/deprecated/clutter-shader.c:523
msgid "Fragment shader"
msgstr "Shader del fragment"
-#: ../clutter/deprecated/clutter-state.c:1505
+#: ../clutter/deprecated/clutter-state.c:1497
msgid "State"
msgstr "Estat"
-#: ../clutter/deprecated/clutter-state.c:1506
+#: ../clutter/deprecated/clutter-state.c:1498
msgid "Currently set state, (transition to this state might not be complete)"
msgstr ""
"L'estat establert actualment (potser encara no s'ha completat la transició a "
"aquest estat)"
-#: ../clutter/deprecated/clutter-state.c:1524
+#: ../clutter/deprecated/clutter-state.c:1516
msgid "Default transition duration"
msgstr "La durada per defecte de la transició"
-#: ../clutter/deprecated/clutter-texture.c:994
+#: ../clutter/deprecated/clutter-table-layout.c:535
+msgid "Column Number"
+msgstr "Número de columna"
+
+#: ../clutter/deprecated/clutter-table-layout.c:536
+msgid "The column the widget resides in"
+msgstr "La columna en la que està el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:543
+msgid "Row Number"
+msgstr "Número de fila"
+
+#: ../clutter/deprecated/clutter-table-layout.c:544
+msgid "The row the widget resides in"
+msgstr "La fila en la que està el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:551
+msgid "Column Span"
+msgstr "Abast en columnes"
+
+#: ../clutter/deprecated/clutter-table-layout.c:552
+msgid "The number of columns the widget should span"
+msgstr "El nombre de columnes que hauria d'abastir el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:559
+msgid "Row Span"
+msgstr "Abast en files"
+
+#: ../clutter/deprecated/clutter-table-layout.c:560
+msgid "The number of rows the widget should span"
+msgstr "El nombre de files que hauria d'abastir el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:567
+msgid "Horizontal Expand"
+msgstr "Expansió horitzontal"
+
+#: ../clutter/deprecated/clutter-table-layout.c:568
+msgid "Allocate extra space for the child in horizontal axis"
+msgstr "Ubica espai extra per al fill en l'eix horitzontal"
+
+#: ../clutter/deprecated/clutter-table-layout.c:574
+msgid "Vertical Expand"
+msgstr "Expansió vertical"
+
+#: ../clutter/deprecated/clutter-table-layout.c:575
+msgid "Allocate extra space for the child in vertical axis"
+msgstr "Ubica espai extra per al fill en l'eix vertical"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1630
+msgid "Spacing between columns"
+msgstr "Espaiat entre columnes"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1646
+msgid "Spacing between rows"
+msgstr "Espaiat entre files"
+
+#: ../clutter/deprecated/clutter-texture.c:992
msgid "Sync size of actor"
msgstr "Sincronitza la mida de l'actor"
-#: ../clutter/deprecated/clutter-texture.c:995
+#: ../clutter/deprecated/clutter-texture.c:993
msgid "Auto sync size of actor to underlying pixbuf dimensions"
msgstr ""
"Sincronitza automàticament la mida de l'actor amb les mides de la memòria de "
"píxels de rerefons"
-#: ../clutter/deprecated/clutter-texture.c:1002
+#: ../clutter/deprecated/clutter-texture.c:1000
msgid "Disable Slicing"
msgstr "Inhabilita el tallat"
-#: ../clutter/deprecated/clutter-texture.c:1003
+#: ../clutter/deprecated/clutter-texture.c:1001
msgid ""
"Forces the underlying texture to be singular and not made of smaller space "
"saving individual textures"
@@ -2496,100 +2572,100 @@ msgstr ""
"Força la textura de rerefons a ser una de sola i no estar formada per "
"diverses de més petites"
-#: ../clutter/deprecated/clutter-texture.c:1012
+#: ../clutter/deprecated/clutter-texture.c:1010
msgid "Tile Waste"
msgstr "Desaprofitament de quadre"
-#: ../clutter/deprecated/clutter-texture.c:1013
+#: ../clutter/deprecated/clutter-texture.c:1011
msgid "Maximum waste area of a sliced texture"
msgstr "Àrea màxima de desaprofitament d'una textura tallada"
-#: ../clutter/deprecated/clutter-texture.c:1021
+#: ../clutter/deprecated/clutter-texture.c:1019
msgid "Horizontal repeat"
msgstr "Repetició horitzontal"
-#: ../clutter/deprecated/clutter-texture.c:1022
+#: ../clutter/deprecated/clutter-texture.c:1020
msgid "Repeat the contents rather than scaling them horizontally"
msgstr "Repeteix els continguts en comptes d'escalar-los horitzontalment"
-#: ../clutter/deprecated/clutter-texture.c:1029
+#: ../clutter/deprecated/clutter-texture.c:1027
msgid "Vertical repeat"
msgstr "Repetició vertical"
-#: ../clutter/deprecated/clutter-texture.c:1030
+#: ../clutter/deprecated/clutter-texture.c:1028
msgid "Repeat the contents rather than scaling them vertically"
msgstr "Repeteix els continguts en comptes d'escalar-los verticalment"
-#: ../clutter/deprecated/clutter-texture.c:1037
+#: ../clutter/deprecated/clutter-texture.c:1035
msgid "Filter Quality"
msgstr "Qualitat del filtre"
-#: ../clutter/deprecated/clutter-texture.c:1038
+#: ../clutter/deprecated/clutter-texture.c:1036
msgid "Rendering quality used when drawing the texture"
msgstr "La qualitat de la renderització quan es dibuixi una textura"
-#: ../clutter/deprecated/clutter-texture.c:1046
+#: ../clutter/deprecated/clutter-texture.c:1044
msgid "Pixel Format"
msgstr "Format del píxel"
-#: ../clutter/deprecated/clutter-texture.c:1047
+#: ../clutter/deprecated/clutter-texture.c:1045
msgid "The Cogl pixel format to use"
msgstr "El format de píxel de Cogl a utilitzar"
-#: ../clutter/deprecated/clutter-texture.c:1055
-#: ../clutter/wayland/clutter-wayland-surface.c:449
+#: ../clutter/deprecated/clutter-texture.c:1053
+#: ../clutter/wayland/clutter-wayland-surface.c:445
msgid "Cogl Texture"
msgstr "Textura de Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1056
-#: ../clutter/wayland/clutter-wayland-surface.c:450
+#: ../clutter/deprecated/clutter-texture.c:1054
+#: ../clutter/wayland/clutter-wayland-surface.c:446
msgid "The underlying Cogl texture handle used to draw this actor"
msgstr ""
"El gestor de la textura de Cogl de rerefons que s'utilitza per dibuixar "
"aquest actor"
-#: ../clutter/deprecated/clutter-texture.c:1063
+#: ../clutter/deprecated/clutter-texture.c:1061
msgid "Cogl Material"
msgstr "Material de Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1064
+#: ../clutter/deprecated/clutter-texture.c:1062
msgid "The underlying Cogl material handle used to draw this actor"
msgstr ""
"El gestor del material de Cogl de rerefons que s'utilitza per dibuixar "
"aquest actor"
-#: ../clutter/deprecated/clutter-texture.c:1083
+#: ../clutter/deprecated/clutter-texture.c:1081
msgid "The path of the file containing the image data"
msgstr "El camí al fitxer que conté les dades de la imatge"
-#: ../clutter/deprecated/clutter-texture.c:1090
+#: ../clutter/deprecated/clutter-texture.c:1088
msgid "Keep Aspect Ratio"
msgstr "Manté la relació d'aspecte"
-#: ../clutter/deprecated/clutter-texture.c:1091
+#: ../clutter/deprecated/clutter-texture.c:1089
msgid ""
"Keep the aspect ratio of the texture when requesting the preferred width or "
"height"
msgstr ""
-"Manté la relació d'aspecte de la textura quan es soŀliciti una amplada o "
+"Manté la relació d'aspecte de la textura quan es sol·liciti una amplada o "
"alçada preferida"
-#: ../clutter/deprecated/clutter-texture.c:1119
+#: ../clutter/deprecated/clutter-texture.c:1117
msgid "Load asynchronously"
msgstr "Carrega asíncronament"
-#: ../clutter/deprecated/clutter-texture.c:1120
+#: ../clutter/deprecated/clutter-texture.c:1118
msgid ""
"Load files inside a thread to avoid blocking when loading images from disk"
msgstr ""
"Carrega els fitxers en un altre fil d'execució per evitar el blocatge quan "
"es carreguin imatges del disc"
-#: ../clutter/deprecated/clutter-texture.c:1138
+#: ../clutter/deprecated/clutter-texture.c:1136
msgid "Load data asynchronously"
msgstr "Carrega les dades asíncronament"
-#: ../clutter/deprecated/clutter-texture.c:1139
+#: ../clutter/deprecated/clutter-texture.c:1137
msgid ""
"Decode image data files inside a thread to reduce blocking when loading "
"images from disk"
@@ -2597,198 +2673,179 @@ msgstr ""
"Descodifica els fitxers de dades d'imatge en un altre fil d'execució per "
"reduir el blocatge quan es carreguin imatges del disc"
-#: ../clutter/deprecated/clutter-texture.c:1165
+#: ../clutter/deprecated/clutter-texture.c:1163
msgid "Pick With Alpha"
msgstr "Selecció amb transparència"
-#: ../clutter/deprecated/clutter-texture.c:1166
+#: ../clutter/deprecated/clutter-texture.c:1164
msgid "Shape actor with alpha channel when picking"
msgstr "Modela l'actor amb un canal de transparència quan es seleccioni"
-#: ../clutter/deprecated/clutter-texture.c:1599
-#: ../clutter/deprecated/clutter-texture.c:1994
-#: ../clutter/deprecated/clutter-texture.c:2090
-#: ../clutter/deprecated/clutter-texture.c:2388
+#: ../clutter/deprecated/clutter-texture.c:1597
+#: ../clutter/deprecated/clutter-texture.c:1992
+#: ../clutter/deprecated/clutter-texture.c:2088
+#: ../clutter/deprecated/clutter-texture.c:2386
#, c-format
msgid "Failed to load the image data"
msgstr "No s'han pogut carregar les dades de la imatge"
-#: ../clutter/deprecated/clutter-texture.c:1758
+#: ../clutter/deprecated/clutter-texture.c:1756
#, c-format
msgid "YUV textures are not supported"
msgstr "No es poden utilitzar textures YUV"
-#: ../clutter/deprecated/clutter-texture.c:1767
+#: ../clutter/deprecated/clutter-texture.c:1765
#, c-format
msgid "YUV2 textues are not supported"
msgstr "No es poden utilitzar textures YUV2"
-#: ../clutter/evdev/clutter-input-device-evdev.c:159
-msgid "sysfs Path"
-msgstr "Camí al sysfs"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:160
-msgid "Path of the device in sysfs"
-msgstr "Camí al dispositiu a sysfs"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:175
-msgid "Device Path"
-msgstr "Camí al dispositiu"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:176
-msgid "Path of the device node"
-msgstr "Camí al node del dispositiu"
-
-#: ../clutter/gdk/clutter-backend-gdk.c:287
+#: ../clutter/gdk/clutter-backend-gdk.c:289
#, c-format
msgid "Could not find a suitable CoglWinsys for a GdkDisplay of type %s"
msgstr "No s'ha pogut trobar cap CoglWinsys per a una GdkDisplay del tipus %s"
-#: ../clutter/wayland/clutter-wayland-surface.c:423
+#: ../clutter/wayland/clutter-wayland-surface.c:419
msgid "Surface"
msgstr "Superfície"
-#: ../clutter/wayland/clutter-wayland-surface.c:424
+#: ../clutter/wayland/clutter-wayland-surface.c:420
msgid "The underlying wayland surface"
msgstr "La superfície de Wayland de rerefons"
-#: ../clutter/wayland/clutter-wayland-surface.c:431
+#: ../clutter/wayland/clutter-wayland-surface.c:427
msgid "Surface width"
msgstr "Amplada de la superfície"
-#: ../clutter/wayland/clutter-wayland-surface.c:432
+#: ../clutter/wayland/clutter-wayland-surface.c:428
msgid "The width of the underlying wayland surface"
msgstr "L'amplada de la superfície Wayland subjacent"
-#: ../clutter/wayland/clutter-wayland-surface.c:440
+#: ../clutter/wayland/clutter-wayland-surface.c:436
msgid "Surface height"
msgstr "Alçada de la superfície"
-#: ../clutter/wayland/clutter-wayland-surface.c:441
+#: ../clutter/wayland/clutter-wayland-surface.c:437
msgid "The height of the underlying wayland surface"
msgstr "L'alçada de la superfície Wayland subjacent"
-#: ../clutter/x11/clutter-backend-x11.c:507
+#: ../clutter/x11/clutter-backend-x11.c:488
msgid "X display to use"
msgstr "El monitor d'X a utilitzar"
-#: ../clutter/x11/clutter-backend-x11.c:513
+#: ../clutter/x11/clutter-backend-x11.c:494
msgid "X screen to use"
msgstr "La pantalla d'X a utilitzar"
-#: ../clutter/x11/clutter-backend-x11.c:518
+#: ../clutter/x11/clutter-backend-x11.c:499
msgid "Make X calls synchronous"
msgstr "Fes les crides síncrones a l'X"
-#: ../clutter/x11/clutter-backend-x11.c:525
+#: ../clutter/x11/clutter-backend-x11.c:506
msgid "Disable XInput support"
msgstr "Inhabilita l'XInput"
-#: ../clutter/x11/clutter-keymap-x11.c:322
+#: ../clutter/x11/clutter-keymap-x11.c:458
msgid "The Clutter backend"
msgstr "El rerefons de la Clutter"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:539
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:534
msgid "Pixmap"
msgstr "Mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:540
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:535
msgid "The X11 Pixmap to be bound"
msgstr "El mapa de píxels X11 que es vincularà"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:548
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:543
msgid "Pixmap width"
msgstr "Amplada del mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:549
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:544
msgid "The width of the pixmap bound to this texture"
msgstr "L'amplada del mapa de píxels vinculat a aquesta textura"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:557
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:552
msgid "Pixmap height"
msgstr "Alçada del mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:558
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:553
msgid "The height of the pixmap bound to this texture"
msgstr "L'alçada del mapa de píxels vinculat a aquesta textura"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:566
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:561
msgid "Pixmap Depth"
msgstr "Profunditat del mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:567
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:562
msgid "The depth (in number of bits) of the pixmap bound to this texture"
msgstr ""
"La profunditat (en nombre de bits) del mapa de píxels vinculat a aquesta "
"textura"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:575
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:570
msgid "Automatic Updates"
msgstr "Actualitzacions automàtiques"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:576
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:571
msgid "If the texture should be kept in sync with any pixmap changes."
msgstr ""
"Si la textura s'hauria de mantenir sincronitzada amb els canvis al mapa de "
"píxels."
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:584
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:579
msgid "Window"
msgstr "Finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:585
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:580
msgid "The X11 Window to be bound"
msgstr "La finestra X11 que es vincularà"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:593
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:588
msgid "Window Redirect Automatic"
msgstr "Redireccions automàtiques de finestres"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:594
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:589
msgid "If composite window redirects are set to Automatic (or Manual if false)"
msgstr ""
"Si les redireccions de les finestres compostes són automàtiques (o manuals "
"si «false» (fals))"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:604
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:599
msgid "Window Mapped"
msgstr "Finestra mapada"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:605
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:600
msgid "If window is mapped"
msgstr "Si la finestra és mapada"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:614
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:609
msgid "Destroyed"
msgstr "Destruïda"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:615
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:610
msgid "If window has been destroyed"
msgstr "Si s'ha destruït la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:623
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:618
msgid "Window X"
msgstr "X de la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:624
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:619
msgid "X position of window on screen according to X11"
msgstr "La posició X de la finestra a la pantalla segons l'X11"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:632
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:627
msgid "Window Y"
msgstr "Y de la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:633
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:628
msgid "Y position of window on screen according to X11"
msgstr "La posició Y de la finestra a la pantalla segons l'X11"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:640
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:635
msgid "Window Override Redirect"
msgstr "Redirecció de la sobreescriptura de la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:641
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:636
msgid "If this is an override-redirect window"
msgstr "Si és una finestra de redirecció de la sobreescriptura"
-
-#~ msgid "The layout manager used by the box"
-#~ msgstr "El gestor de disposició utilitzat per la caixa"
diff --git a/po/ca@valencia.po b/po/ca@valencia.po
index 118795363..19510b3b1 100644
--- a/po/ca@valencia.po
+++ b/po/ca@valencia.po
@@ -1,7 +1,7 @@
# Catalan translation for clutter.
# Copyright (C) 2011 clutter's COPYRIGHT HOLDER
# This file is distributed under the same license as the clutter package.
-# Gil Forcada , 2011, 2012.
+# Gil Forcada , 2011, 2012, 2013.
# Jordi Serratosa , 2012.
#
msgid ""
@@ -9,702 +9,702 @@ msgstr ""
"Project-Id-Version: clutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=clutter\n"
-"POT-Creation-Date: 2012-09-21 21:37+0200\n"
-"PO-Revision-Date: 2012-09-21 21:34+0200\n"
-"Last-Translator: Gil Forcada \n"
+"POT-Creation-Date: 2014-05-12 23:45+0200\n"
+"PO-Revision-Date: 2014-03-21 05:55+0100\n"
+"Last-Translator: Pau Iranzo \n"
"Language-Team: Catalan \n"
"Language: ca-XV\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bits\n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: ../clutter/clutter-actor.c:6125
+#: ../clutter/clutter-actor.c:6224
msgid "X coordinate"
msgstr "Coordenada X"
-#: ../clutter/clutter-actor.c:6126
+#: ../clutter/clutter-actor.c:6225
msgid "X coordinate of the actor"
msgstr "Coordenada X de l'actor"
-#: ../clutter/clutter-actor.c:6144
+#: ../clutter/clutter-actor.c:6243
msgid "Y coordinate"
msgstr "Coordenada Y"
-#: ../clutter/clutter-actor.c:6145
+#: ../clutter/clutter-actor.c:6244
msgid "Y coordinate of the actor"
msgstr "Coordenada Y de l'actor"
-#: ../clutter/clutter-actor.c:6167
+#: ../clutter/clutter-actor.c:6266
msgid "Position"
msgstr "Posició"
-#: ../clutter/clutter-actor.c:6168
+#: ../clutter/clutter-actor.c:6267
msgid "The position of the origin of the actor"
msgstr "La posició de l'origen de l'actor"
-#: ../clutter/clutter-actor.c:6185 ../clutter/clutter-canvas.c:215
-#: ../clutter/clutter-grid-layout.c:1238
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:481
+#: ../clutter/clutter-actor.c:6284 ../clutter/clutter-canvas.c:247
+#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:474
msgid "Width"
msgstr "Amplada"
-#: ../clutter/clutter-actor.c:6186
+#: ../clutter/clutter-actor.c:6285
msgid "Width of the actor"
msgstr "Amplada de l'actor"
-#: ../clutter/clutter-actor.c:6204 ../clutter/clutter-canvas.c:231
-#: ../clutter/clutter-grid-layout.c:1245
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:497
+#: ../clutter/clutter-actor.c:6303 ../clutter/clutter-canvas.c:263
+#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:490
msgid "Height"
msgstr "Alçada"
-#: ../clutter/clutter-actor.c:6205
+#: ../clutter/clutter-actor.c:6304
msgid "Height of the actor"
msgstr "Alçada de l'actor"
-#: ../clutter/clutter-actor.c:6226
+#: ../clutter/clutter-actor.c:6325
msgid "Size"
msgstr "Mida"
-#: ../clutter/clutter-actor.c:6227
+#: ../clutter/clutter-actor.c:6326
msgid "The size of the actor"
msgstr "La mida de l'actor"
-#: ../clutter/clutter-actor.c:6245
+#: ../clutter/clutter-actor.c:6344
msgid "Fixed X"
msgstr "X fixada"
-#: ../clutter/clutter-actor.c:6246
+#: ../clutter/clutter-actor.c:6345
msgid "Forced X position of the actor"
msgstr "Posició X forçada de l'actor"
-#: ../clutter/clutter-actor.c:6263
+#: ../clutter/clutter-actor.c:6362
msgid "Fixed Y"
msgstr "Y fixada"
-#: ../clutter/clutter-actor.c:6264
+#: ../clutter/clutter-actor.c:6363
msgid "Forced Y position of the actor"
msgstr "Posició Y forçada de l'actor"
-#: ../clutter/clutter-actor.c:6279
+#: ../clutter/clutter-actor.c:6378
msgid "Fixed position set"
msgstr "Ús de la posició fixa"
-#: ../clutter/clutter-actor.c:6280
+#: ../clutter/clutter-actor.c:6379
msgid "Whether to use fixed positioning for the actor"
msgstr "Si s'ha d'utilitzar el posicionament fixat per a l'actor"
-#: ../clutter/clutter-actor.c:6298
+#: ../clutter/clutter-actor.c:6397
msgid "Min Width"
msgstr "Amplada mínima"
-#: ../clutter/clutter-actor.c:6299
+#: ../clutter/clutter-actor.c:6398
msgid "Forced minimum width request for the actor"
-msgstr "Amplada mínima forçada soŀlicitada per l'actor"
+msgstr "Amplada mínima forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6317
+#: ../clutter/clutter-actor.c:6416
msgid "Min Height"
msgstr "Alçada mínima"
-#: ../clutter/clutter-actor.c:6318
+#: ../clutter/clutter-actor.c:6417
msgid "Forced minimum height request for the actor"
-msgstr "Alçada mínima forçada soŀlicitada per l'actor"
+msgstr "Alçada mínima forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6336
+#: ../clutter/clutter-actor.c:6435
msgid "Natural Width"
msgstr "Amplada natural"
-#: ../clutter/clutter-actor.c:6337
+#: ../clutter/clutter-actor.c:6436
msgid "Forced natural width request for the actor"
-msgstr "Amplada natural forçada soŀlicitada per l'actor"
+msgstr "Amplada natural forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6355
+#: ../clutter/clutter-actor.c:6454
msgid "Natural Height"
msgstr "Alçada natural"
-#: ../clutter/clutter-actor.c:6356
+#: ../clutter/clutter-actor.c:6455
msgid "Forced natural height request for the actor"
-msgstr "Alçada natural forçada soŀlicitada per l'actor"
+msgstr "Alçada natural forçada sol·licitada per l'actor"
-#: ../clutter/clutter-actor.c:6371
+#: ../clutter/clutter-actor.c:6470
msgid "Minimum width set"
msgstr "Ús de l'amplada mínima"
-#: ../clutter/clutter-actor.c:6372
+#: ../clutter/clutter-actor.c:6471
msgid "Whether to use the min-width property"
msgstr "Si s'ha d'utilitzar la propietat «amplada mínima»"
-#: ../clutter/clutter-actor.c:6386
+#: ../clutter/clutter-actor.c:6485
msgid "Minimum height set"
msgstr "Ús de l'alçada mínima"
-#: ../clutter/clutter-actor.c:6387
+#: ../clutter/clutter-actor.c:6486
msgid "Whether to use the min-height property"
msgstr "Si s'ha d'utilitzar la propietat «alçada mínima»"
-#: ../clutter/clutter-actor.c:6401
+#: ../clutter/clutter-actor.c:6500
msgid "Natural width set"
msgstr "Ús de l'amplada natural"
-#: ../clutter/clutter-actor.c:6402
+#: ../clutter/clutter-actor.c:6501
msgid "Whether to use the natural-width property"
msgstr "Si s'ha d'utilitzar la propietat «amplada natural»"
-#: ../clutter/clutter-actor.c:6416
+#: ../clutter/clutter-actor.c:6515
msgid "Natural height set"
msgstr "Ús de l'alçada natural"
-#: ../clutter/clutter-actor.c:6417
+#: ../clutter/clutter-actor.c:6516
msgid "Whether to use the natural-height property"
msgstr "Si s'ha d'utilitzar la propietat «alçada natural»"
-#: ../clutter/clutter-actor.c:6433
+#: ../clutter/clutter-actor.c:6532
msgid "Allocation"
msgstr "Ubicació"
-#: ../clutter/clutter-actor.c:6434
+#: ../clutter/clutter-actor.c:6533
msgid "The actor's allocation"
msgstr "La ubicació de l'actor"
-#: ../clutter/clutter-actor.c:6491
+#: ../clutter/clutter-actor.c:6590
msgid "Request Mode"
-msgstr "Mode soŀlicitat"
+msgstr "Mode sol·licitat"
-#: ../clutter/clutter-actor.c:6492
+#: ../clutter/clutter-actor.c:6591
msgid "The actor's request mode"
-msgstr "El mode soŀlicitat per l'actor"
+msgstr "El mode sol·licitat per l'actor"
-#: ../clutter/clutter-actor.c:6516
+#: ../clutter/clutter-actor.c:6615
msgid "Depth"
msgstr "Profunditat"
-#: ../clutter/clutter-actor.c:6517
+#: ../clutter/clutter-actor.c:6616
msgid "Position on the Z axis"
msgstr "Posició en l'eix de la Z"
-#: ../clutter/clutter-actor.c:6544
+#: ../clutter/clutter-actor.c:6643
msgid "Z Position"
msgstr "Posició Z"
-#: ../clutter/clutter-actor.c:6545
+#: ../clutter/clutter-actor.c:6644
msgid "The actor's position on the Z axis"
msgstr "La posició de l'actor en l'eix de la Z"
-#: ../clutter/clutter-actor.c:6562
+#: ../clutter/clutter-actor.c:6661
msgid "Opacity"
msgstr "Opacitat"
-#: ../clutter/clutter-actor.c:6563
+#: ../clutter/clutter-actor.c:6662
msgid "Opacity of an actor"
msgstr "Opacitat d'un actor"
-#: ../clutter/clutter-actor.c:6583
+#: ../clutter/clutter-actor.c:6682
msgid "Offscreen redirect"
msgstr "Redireccionament fora de pantalla"
-#: ../clutter/clutter-actor.c:6584
+#: ../clutter/clutter-actor.c:6683
msgid "Flags controlling when to flatten the actor into a single image"
msgstr ""
"Senyaladors que controlen quan s'ha d'aplanar l'actor a una sola imatge"
-#: ../clutter/clutter-actor.c:6598
+#: ../clutter/clutter-actor.c:6697
msgid "Visible"
msgstr "Visible"
-#: ../clutter/clutter-actor.c:6599
+#: ../clutter/clutter-actor.c:6698
msgid "Whether the actor is visible or not"
msgstr "Si l'actor és visible"
-#: ../clutter/clutter-actor.c:6613
+#: ../clutter/clutter-actor.c:6712
msgid "Mapped"
msgstr "Mapat"
-#: ../clutter/clutter-actor.c:6614
+#: ../clutter/clutter-actor.c:6713
msgid "Whether the actor will be painted"
msgstr "Si l'actor es pintarà"
-#: ../clutter/clutter-actor.c:6627
+#: ../clutter/clutter-actor.c:6726
msgid "Realized"
msgstr "Realitzat"
-#: ../clutter/clutter-actor.c:6628
+#: ../clutter/clutter-actor.c:6727
msgid "Whether the actor has been realized"
msgstr "Si l'actor s'ha realitzat"
-#: ../clutter/clutter-actor.c:6643
+#: ../clutter/clutter-actor.c:6742
msgid "Reactive"
msgstr "Reactiu"
-#: ../clutter/clutter-actor.c:6644
+#: ../clutter/clutter-actor.c:6743
msgid "Whether the actor is reactive to events"
msgstr "Si l'actor reacciona a esdeveniments"
-#: ../clutter/clutter-actor.c:6655
+#: ../clutter/clutter-actor.c:6754
msgid "Has Clip"
msgstr "Té un retallat"
-#: ../clutter/clutter-actor.c:6656
+#: ../clutter/clutter-actor.c:6755
msgid "Whether the actor has a clip set"
msgstr "Si l'actor té un retallat establit"
-#: ../clutter/clutter-actor.c:6669
+#: ../clutter/clutter-actor.c:6768
msgid "Clip"
msgstr "Retallat"
-#: ../clutter/clutter-actor.c:6670
+#: ../clutter/clutter-actor.c:6769
msgid "The clip region for the actor"
msgstr "La regió de retallat de l'actor"
-#: ../clutter/clutter-actor.c:6689
+#: ../clutter/clutter-actor.c:6788
msgid "Clip Rectangle"
msgstr "Rectangle retallat"
-#: ../clutter/clutter-actor.c:6690
+#: ../clutter/clutter-actor.c:6789
msgid "The visible region of the actor"
msgstr "La regió visible de l'actor"
-#: ../clutter/clutter-actor.c:6704 ../clutter/clutter-actor-meta.c:207
-#: ../clutter/clutter-binding-pool.c:319 ../clutter/clutter-input-device.c:258
+#: ../clutter/clutter-actor.c:6803 ../clutter/clutter-actor-meta.c:205
+#: ../clutter/clutter-binding-pool.c:318 ../clutter/clutter-input-device.c:247
msgid "Name"
msgstr "Nom"
-#: ../clutter/clutter-actor.c:6705
+#: ../clutter/clutter-actor.c:6804
msgid "Name of the actor"
msgstr "El nom de l'actor"
-#: ../clutter/clutter-actor.c:6726
+#: ../clutter/clutter-actor.c:6825
msgid "Pivot Point"
msgstr "Punt de pivotació"
-#: ../clutter/clutter-actor.c:6727
+#: ../clutter/clutter-actor.c:6826
msgid "The point around which the scaling and rotation occur"
msgstr "El punt sobre el qual es fa l'escalat i la rotació"
-#: ../clutter/clutter-actor.c:6745
+#: ../clutter/clutter-actor.c:6844
msgid "Pivot Point Z"
msgstr "El punt de pivotació sobre la Z"
-#: ../clutter/clutter-actor.c:6746
+#: ../clutter/clutter-actor.c:6845
msgid "Z component of the pivot point"
msgstr "Component Z del punt de pivotació"
-#: ../clutter/clutter-actor.c:6764
+#: ../clutter/clutter-actor.c:6863
msgid "Scale X"
msgstr "Escala X"
-#: ../clutter/clutter-actor.c:6765
+#: ../clutter/clutter-actor.c:6864
msgid "Scale factor on the X axis"
msgstr "El factor d'escala en l'eix de les X"
-#: ../clutter/clutter-actor.c:6783
+#: ../clutter/clutter-actor.c:6882
msgid "Scale Y"
msgstr "Escala Y"
-#: ../clutter/clutter-actor.c:6784
+#: ../clutter/clutter-actor.c:6883
msgid "Scale factor on the Y axis"
msgstr "El factor d'escala en l'eix de les Y"
-#: ../clutter/clutter-actor.c:6802
+#: ../clutter/clutter-actor.c:6901
msgid "Scale Z"
msgstr "Escala Z"
-#: ../clutter/clutter-actor.c:6803
+#: ../clutter/clutter-actor.c:6902
msgid "Scale factor on the Z axis"
msgstr "El factor d'escala en l'eix de les Z"
-#: ../clutter/clutter-actor.c:6821
+#: ../clutter/clutter-actor.c:6920
msgid "Scale Center X"
msgstr "Centre de l'escala X"
-#: ../clutter/clutter-actor.c:6822
+#: ../clutter/clutter-actor.c:6921
msgid "Horizontal scale center"
msgstr "Centre horitzontal de l'escala"
-#: ../clutter/clutter-actor.c:6840
+#: ../clutter/clutter-actor.c:6939
msgid "Scale Center Y"
msgstr "Centre de l'escala Y"
-#: ../clutter/clutter-actor.c:6841
+#: ../clutter/clutter-actor.c:6940
msgid "Vertical scale center"
msgstr "Centre vertical de l'escala"
-#: ../clutter/clutter-actor.c:6859
+#: ../clutter/clutter-actor.c:6958
msgid "Scale Gravity"
msgstr "Gravetat de l'escala"
-#: ../clutter/clutter-actor.c:6860
+#: ../clutter/clutter-actor.c:6959
msgid "The center of scaling"
msgstr "El centre de l'escalat"
-#: ../clutter/clutter-actor.c:6878
+#: ../clutter/clutter-actor.c:6977
msgid "Rotation Angle X"
msgstr "Angle de rotació X"
-#: ../clutter/clutter-actor.c:6879
+#: ../clutter/clutter-actor.c:6978
msgid "The rotation angle on the X axis"
msgstr "L'angle de rotació en l'eix de les X"
-#: ../clutter/clutter-actor.c:6897
+#: ../clutter/clutter-actor.c:6996
msgid "Rotation Angle Y"
msgstr "Angle de rotació Y"
-#: ../clutter/clutter-actor.c:6898
+#: ../clutter/clutter-actor.c:6997
msgid "The rotation angle on the Y axis"
msgstr "L'angle de rotació en l'eix de les Y"
-#: ../clutter/clutter-actor.c:6916
+#: ../clutter/clutter-actor.c:7015
msgid "Rotation Angle Z"
msgstr "Angle de rotació Z"
-#: ../clutter/clutter-actor.c:6917
+#: ../clutter/clutter-actor.c:7016
msgid "The rotation angle on the Z axis"
msgstr "L'angle de rotació en l'eix de les Z"
-#: ../clutter/clutter-actor.c:6935
+#: ../clutter/clutter-actor.c:7034
msgid "Rotation Center X"
msgstr "Centre de rotació X"
-#: ../clutter/clutter-actor.c:6936
+#: ../clutter/clutter-actor.c:7035
msgid "The rotation center on the X axis"
msgstr "El centre de rotació en l'eix de les X"
-#: ../clutter/clutter-actor.c:6953
+#: ../clutter/clutter-actor.c:7052
msgid "Rotation Center Y"
msgstr "Centre de rotació Y"
-#: ../clutter/clutter-actor.c:6954
+#: ../clutter/clutter-actor.c:7053
msgid "The rotation center on the Y axis"
msgstr "El centre de rotació en l'eix de les Y"
-#: ../clutter/clutter-actor.c:6971
+#: ../clutter/clutter-actor.c:7070
msgid "Rotation Center Z"
msgstr "Centre de rotació Z"
-#: ../clutter/clutter-actor.c:6972
+#: ../clutter/clutter-actor.c:7071
msgid "The rotation center on the Z axis"
msgstr "El centre de rotació en l'eix de les Z"
-#: ../clutter/clutter-actor.c:6989
+#: ../clutter/clutter-actor.c:7088
msgid "Rotation Center Z Gravity"
msgstr "Gravetat del centre de rotació Z"
-#: ../clutter/clutter-actor.c:6990
+#: ../clutter/clutter-actor.c:7089
msgid "Center point for rotation around the Z axis"
msgstr "Punt del centre de rotació al voltant de l'eix de les Z"
-#: ../clutter/clutter-actor.c:7018
+#: ../clutter/clutter-actor.c:7117
msgid "Anchor X"
msgstr "Àncora X"
-#: ../clutter/clutter-actor.c:7019
+#: ../clutter/clutter-actor.c:7118
msgid "X coordinate of the anchor point"
msgstr "Coordenada X del punt de l'àncora"
-#: ../clutter/clutter-actor.c:7047
+#: ../clutter/clutter-actor.c:7146
msgid "Anchor Y"
msgstr "Àncora Y"
-#: ../clutter/clutter-actor.c:7048
+#: ../clutter/clutter-actor.c:7147
msgid "Y coordinate of the anchor point"
msgstr "Coordenada Y del punt de l'àncora"
-#: ../clutter/clutter-actor.c:7075
+#: ../clutter/clutter-actor.c:7174
msgid "Anchor Gravity"
msgstr "Gravetat de l'àncora"
-#: ../clutter/clutter-actor.c:7076
+#: ../clutter/clutter-actor.c:7175
msgid "The anchor point as a ClutterGravity"
msgstr "El punt d'àncora com a «ClutterGravity»"
-#: ../clutter/clutter-actor.c:7095
+#: ../clutter/clutter-actor.c:7194
msgid "Translation X"
msgstr "Translació X"
-#: ../clutter/clutter-actor.c:7096
+#: ../clutter/clutter-actor.c:7195
msgid "Translation along the X axis"
msgstr "La translació en l'eix de les X"
-#: ../clutter/clutter-actor.c:7115
+#: ../clutter/clutter-actor.c:7214
msgid "Translation Y"
msgstr "Translació Y"
-#: ../clutter/clutter-actor.c:7116
+#: ../clutter/clutter-actor.c:7215
msgid "Translation along the Y axis"
msgstr "La translació en l'eix de les Y"
-#: ../clutter/clutter-actor.c:7135
+#: ../clutter/clutter-actor.c:7234
msgid "Translation Z"
msgstr "Translació Z"
-#: ../clutter/clutter-actor.c:7136
+#: ../clutter/clutter-actor.c:7235
msgid "Translation along the Z axis"
msgstr "La translació en l'eix de les Z"
-#: ../clutter/clutter-actor.c:7166
+#: ../clutter/clutter-actor.c:7265
msgid "Transform"
msgstr "Transformació"
-#: ../clutter/clutter-actor.c:7167
+#: ../clutter/clutter-actor.c:7266
msgid "Transformation matrix"
msgstr "Matriu de transformació"
-#: ../clutter/clutter-actor.c:7182
+#: ../clutter/clutter-actor.c:7281
msgid "Transform Set"
msgstr "Establiment de la transformació"
-#: ../clutter/clutter-actor.c:7183
+#: ../clutter/clutter-actor.c:7282
msgid "Whether the transform property is set"
msgstr "Si la propietat de transformació té un valor"
-#: ../clutter/clutter-actor.c:7204
+#: ../clutter/clutter-actor.c:7303
msgid "Child Transform"
msgstr "Transformació filla"
-#: ../clutter/clutter-actor.c:7205
+#: ../clutter/clutter-actor.c:7304
msgid "Children transformation matrix"
msgstr "Matriu de la transformació filla"
-#: ../clutter/clutter-actor.c:7220
+#: ../clutter/clutter-actor.c:7319
msgid "Child Transform Set"
msgstr "Establiment de la transformació filla"
-#: ../clutter/clutter-actor.c:7221
+#: ../clutter/clutter-actor.c:7320
msgid "Whether the child-transform property is set"
msgstr "Si la propietat de transformació filla té un valor"
-#: ../clutter/clutter-actor.c:7238
+#: ../clutter/clutter-actor.c:7337
msgid "Show on set parent"
msgstr "Mostra si és pare"
-#: ../clutter/clutter-actor.c:7239
+#: ../clutter/clutter-actor.c:7338
msgid "Whether the actor is shown when parented"
msgstr "Si s'ha de mostrar l'actor si se'l fa pare d'un element"
-#: ../clutter/clutter-actor.c:7256
+#: ../clutter/clutter-actor.c:7355
msgid "Clip to Allocation"
msgstr "Retalla a la ubicació"
-#: ../clutter/clutter-actor.c:7257
+#: ../clutter/clutter-actor.c:7356
msgid "Sets the clip region to track the actor's allocation"
msgstr ""
"Estableix la regió de retallat per fer un seguiment de la ubicació de l'actor"
-#: ../clutter/clutter-actor.c:7270
+#: ../clutter/clutter-actor.c:7369
msgid "Text Direction"
msgstr "Direcció del text"
-#: ../clutter/clutter-actor.c:7271
+#: ../clutter/clutter-actor.c:7370
msgid "Direction of the text"
msgstr "La direcció del text"
-#: ../clutter/clutter-actor.c:7286
+#: ../clutter/clutter-actor.c:7385
msgid "Has Pointer"
msgstr "Té un punter"
-#: ../clutter/clutter-actor.c:7287
+#: ../clutter/clutter-actor.c:7386
msgid "Whether the actor contains the pointer of an input device"
msgstr "Si l'actor conté el punter d'un dispositiu d'entrada"
-#: ../clutter/clutter-actor.c:7300
+#: ../clutter/clutter-actor.c:7399
msgid "Actions"
msgstr "Accions"
-#: ../clutter/clutter-actor.c:7301
+#: ../clutter/clutter-actor.c:7400
msgid "Adds an action to the actor"
msgstr "Afig una acció a l'actor"
-#: ../clutter/clutter-actor.c:7314
+#: ../clutter/clutter-actor.c:7413
msgid "Constraints"
msgstr "Restriccions"
-#: ../clutter/clutter-actor.c:7315
+#: ../clutter/clutter-actor.c:7414
msgid "Adds a constraint to the actor"
msgstr "Afig una restricció a l'actor"
-#: ../clutter/clutter-actor.c:7328
+#: ../clutter/clutter-actor.c:7427
msgid "Effect"
msgstr "Efecte"
-#: ../clutter/clutter-actor.c:7329
+#: ../clutter/clutter-actor.c:7428
msgid "Add an effect to be applied on the actor"
msgstr "Afig un efecte que s'aplicarà a l'actor"
-#: ../clutter/clutter-actor.c:7343
+#: ../clutter/clutter-actor.c:7442
msgid "Layout Manager"
msgstr "Gestor de disposició"
-#: ../clutter/clutter-actor.c:7344
+#: ../clutter/clutter-actor.c:7443
msgid "The object controlling the layout of an actor's children"
msgstr "L'objecte que controla la disposició dels fills de l'actor"
-#: ../clutter/clutter-actor.c:7358
+#: ../clutter/clutter-actor.c:7457
msgid "X Expand"
msgstr "Expansió X"
-#: ../clutter/clutter-actor.c:7359
+#: ../clutter/clutter-actor.c:7458
msgid "Whether extra horizontal space should be assigned to the actor"
msgstr "Si l'actor hauria de tindre assignat un espai horitzontal extra"
-#: ../clutter/clutter-actor.c:7374
+#: ../clutter/clutter-actor.c:7473
msgid "Y Expand"
msgstr "Expansió Y"
-#: ../clutter/clutter-actor.c:7375
+#: ../clutter/clutter-actor.c:7474
msgid "Whether extra vertical space should be assigned to the actor"
msgstr "Si l'actor hauria de tindre assignat un espai vertical extra"
-#: ../clutter/clutter-actor.c:7391
+#: ../clutter/clutter-actor.c:7490
msgid "X Alignment"
msgstr "Alineació X"
-#: ../clutter/clutter-actor.c:7392
+#: ../clutter/clutter-actor.c:7491
msgid "The alignment of the actor on the X axis within its allocation"
msgstr "L'alineació de l'actor en l'eix de les X dins la seua ubicació"
-#: ../clutter/clutter-actor.c:7407
+#: ../clutter/clutter-actor.c:7506
msgid "Y Alignment"
msgstr "Alineació Y"
-#: ../clutter/clutter-actor.c:7408
+#: ../clutter/clutter-actor.c:7507
msgid "The alignment of the actor on the Y axis within its allocation"
msgstr "L'alineació de l'actor en l'eix de les Y dins la seua ubicació"
-#: ../clutter/clutter-actor.c:7427
+#: ../clutter/clutter-actor.c:7526
msgid "Margin Top"
msgstr "Marge superior"
-#: ../clutter/clutter-actor.c:7428
+#: ../clutter/clutter-actor.c:7527
msgid "Extra space at the top"
msgstr "Espai extra a la part superior"
-#: ../clutter/clutter-actor.c:7449
+#: ../clutter/clutter-actor.c:7548
msgid "Margin Bottom"
msgstr "Marge inferior"
-#: ../clutter/clutter-actor.c:7450
+#: ../clutter/clutter-actor.c:7549
msgid "Extra space at the bottom"
msgstr "Espai extra a la part inferior"
-#: ../clutter/clutter-actor.c:7471
+#: ../clutter/clutter-actor.c:7570
msgid "Margin Left"
msgstr "Marge esquerra"
-#: ../clutter/clutter-actor.c:7472
+#: ../clutter/clutter-actor.c:7571
msgid "Extra space at the left"
msgstr "Espai extra a l'esquerra"
-#: ../clutter/clutter-actor.c:7493
+#: ../clutter/clutter-actor.c:7592
msgid "Margin Right"
msgstr "Marge dret"
-#: ../clutter/clutter-actor.c:7494
+#: ../clutter/clutter-actor.c:7593
msgid "Extra space at the right"
msgstr "Espai extra a la dreta"
-#: ../clutter/clutter-actor.c:7510
+#: ../clutter/clutter-actor.c:7609
msgid "Background Color Set"
msgstr "Establiment del color de fons"
-#: ../clutter/clutter-actor.c:7511 ../clutter/deprecated/clutter-box.c:275
+#: ../clutter/clutter-actor.c:7610 ../clutter/deprecated/clutter-box.c:269
msgid "Whether the background color is set"
msgstr "Si hi ha cap color de fons"
-#: ../clutter/clutter-actor.c:7527
+#: ../clutter/clutter-actor.c:7626
msgid "Background color"
msgstr "Color de fons"
-#: ../clutter/clutter-actor.c:7528
+#: ../clutter/clutter-actor.c:7627
msgid "The actor's background color"
msgstr "El color de fons de l'actor"
-#: ../clutter/clutter-actor.c:7543
+#: ../clutter/clutter-actor.c:7642
msgid "First Child"
msgstr "Primer fill"
-#: ../clutter/clutter-actor.c:7544
+#: ../clutter/clutter-actor.c:7643
msgid "The actor's first child"
msgstr "El primer fill de l'actor"
-#: ../clutter/clutter-actor.c:7557
+#: ../clutter/clutter-actor.c:7656
msgid "Last Child"
msgstr "Últim fill"
-#: ../clutter/clutter-actor.c:7558
+#: ../clutter/clutter-actor.c:7657
msgid "The actor's last child"
msgstr "L'últim fill de l'actor"
-#: ../clutter/clutter-actor.c:7572
+#: ../clutter/clutter-actor.c:7671
msgid "Content"
msgstr "Contingut"
-#: ../clutter/clutter-actor.c:7573
+#: ../clutter/clutter-actor.c:7672
msgid "Delegate object for painting the actor's content"
msgstr "L'objecte al que es delega el pintat del contingut de l'actor"
-#: ../clutter/clutter-actor.c:7598
+#: ../clutter/clutter-actor.c:7697
msgid "Content Gravity"
msgstr "Gravetat del contingut"
-#: ../clutter/clutter-actor.c:7599
+#: ../clutter/clutter-actor.c:7698
msgid "Alignment of the actor's content"
msgstr "L'alineació del contingut de l'actor"
-#: ../clutter/clutter-actor.c:7619
+#: ../clutter/clutter-actor.c:7718
msgid "Content Box"
msgstr "Caixa del contingut"
-#: ../clutter/clutter-actor.c:7620
+#: ../clutter/clutter-actor.c:7719
msgid "The bounding box of the actor's content"
msgstr "La caixa de limitació que conté el contingut de l'actor"
-#: ../clutter/clutter-actor.c:7628
+#: ../clutter/clutter-actor.c:7727
msgid "Minification Filter"
msgstr "Filtre de minimització"
-#: ../clutter/clutter-actor.c:7629
+#: ../clutter/clutter-actor.c:7728
msgid "The filter used when reducing the size of the content"
msgstr "El filtre que s'utilitzarà per reduir la mida del contingut"
-#: ../clutter/clutter-actor.c:7636
+#: ../clutter/clutter-actor.c:7735
msgid "Magnification Filter"
msgstr "Filtre d'ampliació"
-#: ../clutter/clutter-actor.c:7637
+#: ../clutter/clutter-actor.c:7736
msgid "The filter used when increasing the size of the content"
msgstr "El filtre que s'utilitzarà per ampliar la mida del contingut"
-#: ../clutter/clutter-actor.c:7651
+#: ../clutter/clutter-actor.c:7750
msgid "Content Repeat"
msgstr "Repetició del contingut"
-#: ../clutter/clutter-actor.c:7652
+#: ../clutter/clutter-actor.c:7751
msgid "The repeat policy for the actor's content"
msgstr "La política de repetició del contingut de l'actor"
-#: ../clutter/clutter-actor-meta.c:193 ../clutter/clutter-child-meta.c:142
+#: ../clutter/clutter-actor-meta.c:191 ../clutter/clutter-child-meta.c:142
msgid "Actor"
msgstr "Actor"
-#: ../clutter/clutter-actor-meta.c:194
+#: ../clutter/clutter-actor-meta.c:192
msgid "The actor attached to the meta"
msgstr "L'actor acoblat a un meta"
-#: ../clutter/clutter-actor-meta.c:208
+#: ../clutter/clutter-actor-meta.c:206
msgid "The name of the meta"
msgstr "El nom del meta"
-#: ../clutter/clutter-actor-meta.c:221 ../clutter/clutter-input-device.c:337
-#: ../clutter/deprecated/clutter-shader.c:313
+#: ../clutter/clutter-actor-meta.c:219 ../clutter/clutter-input-device.c:326
+#: ../clutter/deprecated/clutter-shader.c:309
msgid "Enabled"
msgstr "Habilitat"
-#: ../clutter/clutter-actor-meta.c:222
+#: ../clutter/clutter-actor-meta.c:220
msgid "Whether the meta is enabled"
msgstr "Si el meta és habilitat"
#: ../clutter/clutter-align-constraint.c:279
-#: ../clutter/clutter-bind-constraint.c:358 ../clutter/clutter-clone.c:345
+#: ../clutter/clutter-bind-constraint.c:343 ../clutter/clutter-clone.c:341
#: ../clutter/clutter-snap-constraint.c:321
msgid "Source"
msgstr "Font"
@@ -730,82 +730,86 @@ msgstr "Factor"
msgid "The alignment factor, between 0.0 and 1.0"
msgstr "El factor d'alineació, entre 0.0 i 1.0"
-#: ../clutter/clutter-backend.c:379
+#: ../clutter/clutter-backend.c:380
msgid "Unable to initialize the Clutter backend"
msgstr "No s'ha pogut inicialitzar el rerefons de la Clutter"
-#: ../clutter/clutter-backend.c:453
+#: ../clutter/clutter-backend.c:454
#, c-format
msgid "The backend of type '%s' does not support creating multiple stages"
msgstr "El rerefons, de tipus «%s», no permet crear múltiples escenaris"
-#: ../clutter/clutter-bind-constraint.c:359
+#: ../clutter/clutter-bind-constraint.c:344
msgid "The source of the binding"
msgstr "La font de la vinculació"
-#: ../clutter/clutter-bind-constraint.c:372
+#: ../clutter/clutter-bind-constraint.c:357
msgid "Coordinate"
msgstr "Coordenada"
-#: ../clutter/clutter-bind-constraint.c:373
+#: ../clutter/clutter-bind-constraint.c:358
msgid "The coordinate to bind"
msgstr "La coordenada a vincular"
-#: ../clutter/clutter-bind-constraint.c:387
+#: ../clutter/clutter-bind-constraint.c:372
#: ../clutter/clutter-path-constraint.c:226
#: ../clutter/clutter-snap-constraint.c:366
msgid "Offset"
msgstr "Desplaçament"
-#: ../clutter/clutter-bind-constraint.c:388
+#: ../clutter/clutter-bind-constraint.c:373
msgid "The offset in pixels to apply to the binding"
msgstr "El desplaçament, en píxels, que s'ha d'aplicar a la vinculació"
-#: ../clutter/clutter-binding-pool.c:320
+#: ../clutter/clutter-binding-pool.c:319
msgid "The unique name of the binding pool"
msgstr "El nom únic del conjunt de vinculacions"
-#: ../clutter/clutter-bin-layout.c:240 ../clutter/clutter-bin-layout.c:649
-#: ../clutter/clutter-box-layout.c:390 ../clutter/clutter-table-layout.c:610
+#: ../clutter/clutter-bin-layout.c:220 ../clutter/clutter-bin-layout.c:633
+#: ../clutter/clutter-box-layout.c:374
+#: ../clutter/deprecated/clutter-table-layout.c:602
msgid "Horizontal Alignment"
msgstr "Alineació horitzontal"
-#: ../clutter/clutter-bin-layout.c:241
+#: ../clutter/clutter-bin-layout.c:221
msgid "Horizontal alignment for the actor inside the layout manager"
msgstr "L'alineació horitzontal de l'actor dins del gestor de disposició"
-#: ../clutter/clutter-bin-layout.c:249 ../clutter/clutter-bin-layout.c:669
-#: ../clutter/clutter-box-layout.c:399 ../clutter/clutter-table-layout.c:625
+#: ../clutter/clutter-bin-layout.c:229 ../clutter/clutter-bin-layout.c:653
+#: ../clutter/clutter-box-layout.c:383
+#: ../clutter/deprecated/clutter-table-layout.c:617
msgid "Vertical Alignment"
msgstr "Alineació vertical"
-#: ../clutter/clutter-bin-layout.c:250
+#: ../clutter/clutter-bin-layout.c:230
msgid "Vertical alignment for the actor inside the layout manager"
msgstr "L'alineació vertical de l'actor dins del gestor de disposició"
-#: ../clutter/clutter-bin-layout.c:650
+#: ../clutter/clutter-bin-layout.c:634
msgid "Default horizontal alignment for the actors inside the layout manager"
msgstr ""
"L'alineació horitzontal per defecte dels actors dins del gestor de disposició"
-#: ../clutter/clutter-bin-layout.c:670
+#: ../clutter/clutter-bin-layout.c:654
msgid "Default vertical alignment for the actors inside the layout manager"
msgstr ""
"L'alineació vertical per defecte dels actors dins del gestor de disposició"
-#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/clutter-box-layout.c:349
msgid "Expand"
msgstr "Expandeix"
-#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/clutter-box-layout.c:350
msgid "Allocate extra space for the child"
msgstr "Ubica espai extra per al fill"
-#: ../clutter/clutter-box-layout.c:372 ../clutter/clutter-table-layout.c:589
+#: ../clutter/clutter-box-layout.c:356
+#: ../clutter/deprecated/clutter-table-layout.c:581
msgid "Horizontal Fill"
msgstr "Emplena horitzontalment"
-#: ../clutter/clutter-box-layout.c:373 ../clutter/clutter-table-layout.c:590
+#: ../clutter/clutter-box-layout.c:357
+#: ../clutter/deprecated/clutter-table-layout.c:582
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the horizontal axis"
@@ -813,11 +817,13 @@ msgstr ""
"Si el fill hauria de tindre prioritat quan el contenidor ubiqui espai extra "
"en l'eix horitzontal"
-#: ../clutter/clutter-box-layout.c:381 ../clutter/clutter-table-layout.c:596
+#: ../clutter/clutter-box-layout.c:365
+#: ../clutter/deprecated/clutter-table-layout.c:588
msgid "Vertical Fill"
msgstr "Emplena verticalment"
-#: ../clutter/clutter-box-layout.c:382 ../clutter/clutter-table-layout.c:597
+#: ../clutter/clutter-box-layout.c:366
+#: ../clutter/deprecated/clutter-table-layout.c:589
msgid ""
"Whether the child should receive priority when the container is allocating "
"spare space on the vertical axis"
@@ -825,80 +831,88 @@ msgstr ""
"Si el fill hauria de tindre prioritat quan el contenidor ubiqui espai extra "
"en l'eix vertical"
-#: ../clutter/clutter-box-layout.c:391 ../clutter/clutter-table-layout.c:611
+#: ../clutter/clutter-box-layout.c:375
+#: ../clutter/deprecated/clutter-table-layout.c:603
msgid "Horizontal alignment of the actor within the cell"
-msgstr "L'alineació horitzontal de l'actor dins la ceŀla"
+msgstr "L'alineació horitzontal de l'actor dins la cel·la"
-#: ../clutter/clutter-box-layout.c:400 ../clutter/clutter-table-layout.c:626
+#: ../clutter/clutter-box-layout.c:384
+#: ../clutter/deprecated/clutter-table-layout.c:618
msgid "Vertical alignment of the actor within the cell"
-msgstr "L'alineació vertical de l'actor dins la ceŀla"
+msgstr "L'alineació vertical de l'actor dins la cel·la"
-#: ../clutter/clutter-box-layout.c:1365
+#: ../clutter/clutter-box-layout.c:1345
msgid "Vertical"
msgstr "Vertical"
-#: ../clutter/clutter-box-layout.c:1366
+#: ../clutter/clutter-box-layout.c:1346
msgid "Whether the layout should be vertical, rather than horizontal"
msgstr "Si la disposició hauria de ser vertical en comptes d'horitzontal"
-#: ../clutter/clutter-box-layout.c:1383 ../clutter/clutter-flow-layout.c:890
-#: ../clutter/clutter-grid-layout.c:1547
+#: ../clutter/clutter-box-layout.c:1363 ../clutter/clutter-flow-layout.c:927
+#: ../clutter/clutter-grid-layout.c:1549
msgid "Orientation"
msgstr "Orientació"
-#: ../clutter/clutter-box-layout.c:1384 ../clutter/clutter-flow-layout.c:891
-#: ../clutter/clutter-grid-layout.c:1548
+#: ../clutter/clutter-box-layout.c:1364 ../clutter/clutter-flow-layout.c:928
+#: ../clutter/clutter-grid-layout.c:1550
msgid "The orientation of the layout"
msgstr "L'orientació de la disposició"
-#: ../clutter/clutter-box-layout.c:1400 ../clutter/clutter-flow-layout.c:906
+#: ../clutter/clutter-box-layout.c:1380 ../clutter/clutter-flow-layout.c:943
msgid "Homogeneous"
msgstr "Homogeni"
-#: ../clutter/clutter-box-layout.c:1401
+#: ../clutter/clutter-box-layout.c:1381
msgid ""
"Whether the layout should be homogeneous, i.e. all childs get the same size"
msgstr ""
"Si la disposició hauria de ser homogènia, és a dir, que tots els fills "
"tinguen la mateixa mida"
-#: ../clutter/clutter-box-layout.c:1416
+#: ../clutter/clutter-box-layout.c:1396
msgid "Pack Start"
msgstr "Ajunta al principi"
-#: ../clutter/clutter-box-layout.c:1417
+#: ../clutter/clutter-box-layout.c:1397
msgid "Whether to pack items at the start of the box"
msgstr "Si s'ha d'ajuntar els elements a l'inici de la caixa"
-#: ../clutter/clutter-box-layout.c:1430
+#: ../clutter/clutter-box-layout.c:1410
msgid "Spacing"
msgstr "Espaiat"
-#: ../clutter/clutter-box-layout.c:1431
+#: ../clutter/clutter-box-layout.c:1411
msgid "Spacing between children"
msgstr "Espaiat entre fills"
-#: ../clutter/clutter-box-layout.c:1448 ../clutter/clutter-table-layout.c:1675
+#: ../clutter/clutter-box-layout.c:1428
+#: ../clutter/deprecated/clutter-table-layout.c:1669
msgid "Use Animations"
msgstr "Utilitza animacions"
-#: ../clutter/clutter-box-layout.c:1449 ../clutter/clutter-table-layout.c:1676
+#: ../clutter/clutter-box-layout.c:1429
+#: ../clutter/deprecated/clutter-table-layout.c:1670
msgid "Whether layout changes should be animated"
msgstr "Si s'han d'animar els canvis de disposició"
-#: ../clutter/clutter-box-layout.c:1473 ../clutter/clutter-table-layout.c:1700
+#: ../clutter/clutter-box-layout.c:1453
+#: ../clutter/deprecated/clutter-table-layout.c:1694
msgid "Easing Mode"
msgstr "Mode del camí"
-#: ../clutter/clutter-box-layout.c:1474 ../clutter/clutter-table-layout.c:1701
+#: ../clutter/clutter-box-layout.c:1454
+#: ../clutter/deprecated/clutter-table-layout.c:1695
msgid "The easing mode of the animations"
msgstr "El mode del camí de les animacions"
-#: ../clutter/clutter-box-layout.c:1494 ../clutter/clutter-table-layout.c:1721
+#: ../clutter/clutter-box-layout.c:1474
+#: ../clutter/deprecated/clutter-table-layout.c:1715
msgid "Easing Duration"
msgstr "Durada del camí"
-#: ../clutter/clutter-box-layout.c:1495 ../clutter/clutter-table-layout.c:1722
+#: ../clutter/clutter-box-layout.c:1475
+#: ../clutter/deprecated/clutter-table-layout.c:1716
msgid "The duration of the animations"
msgstr "La durada de les animacions"
@@ -918,14 +932,30 @@ msgstr "Contrast"
msgid "The contrast change to apply"
msgstr "El canvi de contrast a aplicar"
-#: ../clutter/clutter-canvas.c:216
+#: ../clutter/clutter-canvas.c:248
msgid "The width of the canvas"
msgstr "L'amplada del llenç"
-#: ../clutter/clutter-canvas.c:232
+#: ../clutter/clutter-canvas.c:264
msgid "The height of the canvas"
msgstr "L'alçada del llenç"
+#: ../clutter/clutter-canvas.c:283
+msgid "Scale Factor Set"
+msgstr "Establit el factor d'escalat"
+
+#: ../clutter/clutter-canvas.c:284
+msgid "Whether the scale-factor property is set"
+msgstr "Si la propietat de factor d'escalat té un valor"
+
+#: ../clutter/clutter-canvas.c:305
+msgid "Scale Factor"
+msgstr "Factor d'escalat"
+
+#: ../clutter/clutter-canvas.c:306
+msgid "The scaling factor for the surface"
+msgstr "El factor d'escalat de la superfície"
+
#: ../clutter/clutter-child-meta.c:127
msgid "Container"
msgstr "Contenidor"
@@ -938,39 +968,39 @@ msgstr "El contenidor que ha creat esta dada"
msgid "The actor wrapped by this data"
msgstr "L'actor envoltat per esta dada"
-#: ../clutter/clutter-click-action.c:559
+#: ../clutter/clutter-click-action.c:586
msgid "Pressed"
msgstr "Premut"
-#: ../clutter/clutter-click-action.c:560
+#: ../clutter/clutter-click-action.c:587
msgid "Whether the clickable should be in pressed state"
msgstr "Si l'element que s'hi pot fer clic hauria d'estar en l'estat de premut"
-#: ../clutter/clutter-click-action.c:573
+#: ../clutter/clutter-click-action.c:600
msgid "Held"
msgstr "Manté"
-#: ../clutter/clutter-click-action.c:574
+#: ../clutter/clutter-click-action.c:601
msgid "Whether the clickable has a grab"
msgstr "Si l'element que s'hi pot fer clic té un mantenidor"
-#: ../clutter/clutter-click-action.c:591 ../clutter/clutter-settings.c:599
+#: ../clutter/clutter-click-action.c:618 ../clutter/clutter-settings.c:651
msgid "Long Press Duration"
msgstr "Durada de la premuda llarga"
-#: ../clutter/clutter-click-action.c:592
+#: ../clutter/clutter-click-action.c:619
msgid "The minimum duration of a long press to recognize the gesture"
msgstr "La durada mínima perquè es reconegui el gest d'una premuda llarga"
-#: ../clutter/clutter-click-action.c:610
+#: ../clutter/clutter-click-action.c:637
msgid "Long Press Threshold"
msgstr "Llindar de la premuda llarga"
-#: ../clutter/clutter-click-action.c:611
+#: ../clutter/clutter-click-action.c:638
msgid "The maximum threshold before a long press is cancelled"
-msgstr "El llindar màxim abans de canceŀlar una premuda llarga"
+msgstr "El llindar màxim abans de cancel·lar una premuda llarga"
-#: ../clutter/clutter-clone.c:346
+#: ../clutter/clutter-clone.c:342
msgid "Specifies the actor to be cloned"
msgstr "Especifica l'actor a ser clonat"
@@ -982,27 +1012,27 @@ msgstr "Matís"
msgid "The tint to apply"
msgstr "El matís a aplicar"
-#: ../clutter/clutter-deform-effect.c:588
+#: ../clutter/clutter-deform-effect.c:591
msgid "Horizontal Tiles"
msgstr "Quadres horitzontals"
-#: ../clutter/clutter-deform-effect.c:589
+#: ../clutter/clutter-deform-effect.c:592
msgid "The number of horizontal tiles"
msgstr "El nombre de quadres horitzontals"
-#: ../clutter/clutter-deform-effect.c:604
+#: ../clutter/clutter-deform-effect.c:607
msgid "Vertical Tiles"
msgstr "Quadres verticals"
-#: ../clutter/clutter-deform-effect.c:605
+#: ../clutter/clutter-deform-effect.c:608
msgid "The number of vertical tiles"
msgstr "El nombre de quadres verticals"
-#: ../clutter/clutter-deform-effect.c:622
+#: ../clutter/clutter-deform-effect.c:625
msgid "Back Material"
msgstr "Material de fons"
-#: ../clutter/clutter-deform-effect.c:623
+#: ../clutter/clutter-deform-effect.c:626
msgid "The material to be used when painting the back of the actor"
msgstr "El material que s'utilitzarà quan es pinti el fons de l'actor"
@@ -1010,259 +1040,297 @@ msgstr "El material que s'utilitzarà quan es pinti el fons de l'actor"
msgid "The desaturation factor"
msgstr "El factor de dessaturació"
-#: ../clutter/clutter-device-manager.c:131
-#: ../clutter/clutter-input-device.c:366
-#: ../clutter/x11/clutter-keymap-x11.c:316
+#: ../clutter/clutter-device-manager.c:127
+#: ../clutter/clutter-input-device.c:355
+#: ../clutter/x11/clutter-keymap-x11.c:457
msgid "Backend"
msgstr "Rerefons"
-#: ../clutter/clutter-device-manager.c:132
+#: ../clutter/clutter-device-manager.c:128
msgid "The ClutterBackend of the device manager"
msgstr "El «ClutterBackend» del gestor del dispositiu"
-#: ../clutter/clutter-drag-action.c:742
+#: ../clutter/clutter-drag-action.c:733
msgid "Horizontal Drag Threshold"
msgstr "Llindar d'arrossegament horitzontal"
-#: ../clutter/clutter-drag-action.c:743
+#: ../clutter/clutter-drag-action.c:734
msgid "The horizontal amount of pixels required to start dragging"
msgstr ""
"El nombre de píxels horitzontals necessaris per iniciar un arrossegament"
-#: ../clutter/clutter-drag-action.c:770
+#: ../clutter/clutter-drag-action.c:761
msgid "Vertical Drag Threshold"
msgstr "Llindar d'arrossegament vertical"
-#: ../clutter/clutter-drag-action.c:771
+#: ../clutter/clutter-drag-action.c:762
msgid "The vertical amount of pixels required to start dragging"
msgstr "El nombre de píxels verticals necessaris per iniciar un arrossegament"
-#: ../clutter/clutter-drag-action.c:792
+#: ../clutter/clutter-drag-action.c:783
msgid "Drag Handle"
msgstr "Nansa d'arrossegament"
-#: ../clutter/clutter-drag-action.c:793
+#: ../clutter/clutter-drag-action.c:784
msgid "The actor that is being dragged"
msgstr "L'actor que s'està arrossegant"
-#: ../clutter/clutter-drag-action.c:806
+#: ../clutter/clutter-drag-action.c:797
msgid "Drag Axis"
msgstr "Eix d'arrossegament"
-#: ../clutter/clutter-drag-action.c:807
+#: ../clutter/clutter-drag-action.c:798
msgid "Constraints the dragging to an axis"
msgstr "Restringeix l'arrossegament a un eix"
-#: ../clutter/clutter-drag-action.c:823
+#: ../clutter/clutter-drag-action.c:814
msgid "Drag Area"
msgstr "Àrea d'arrossegament"
-#: ../clutter/clutter-drag-action.c:824
+#: ../clutter/clutter-drag-action.c:815
msgid "Constrains the dragging to a rectangle"
msgstr "Restringeix l'arrossegament a un rectangle"
-#: ../clutter/clutter-drag-action.c:837
+#: ../clutter/clutter-drag-action.c:828
msgid "Drag Area Set"
msgstr "Establiment de l'àrea d'arrossegament"
-#: ../clutter/clutter-drag-action.c:838
+#: ../clutter/clutter-drag-action.c:829
msgid "Whether the drag area is set"
msgstr "Si la propietat d'àrea d'arrossegament té un valor"
-#: ../clutter/clutter-flow-layout.c:907
+#: ../clutter/clutter-flow-layout.c:944
msgid "Whether each item should receive the same allocation"
msgstr "Si cada element hauria de rebre la mateixa ubicació"
-#: ../clutter/clutter-flow-layout.c:922 ../clutter/clutter-table-layout.c:1637
+#: ../clutter/clutter-flow-layout.c:959
+#: ../clutter/deprecated/clutter-table-layout.c:1629
msgid "Column Spacing"
msgstr "Espaiat de columna"
-#: ../clutter/clutter-flow-layout.c:923
+#: ../clutter/clutter-flow-layout.c:960
msgid "The spacing between columns"
msgstr "L'espaiat entre columnes"
-#: ../clutter/clutter-flow-layout.c:939 ../clutter/clutter-table-layout.c:1651
+#: ../clutter/clutter-flow-layout.c:976
+#: ../clutter/deprecated/clutter-table-layout.c:1645
msgid "Row Spacing"
msgstr "Espaiat de fila"
-#: ../clutter/clutter-flow-layout.c:940
+#: ../clutter/clutter-flow-layout.c:977
msgid "The spacing between rows"
msgstr "L'espaiat entre files"
-#: ../clutter/clutter-flow-layout.c:954
+#: ../clutter/clutter-flow-layout.c:991
msgid "Minimum Column Width"
msgstr "Amplada mínima de columna"
-#: ../clutter/clutter-flow-layout.c:955
+#: ../clutter/clutter-flow-layout.c:992
msgid "Minimum width for each column"
msgstr "L'amplada mínima per a cada columna"
-#: ../clutter/clutter-flow-layout.c:970
+#: ../clutter/clutter-flow-layout.c:1007
msgid "Maximum Column Width"
msgstr "Amplada màxima de columna"
-#: ../clutter/clutter-flow-layout.c:971
+#: ../clutter/clutter-flow-layout.c:1008
msgid "Maximum width for each column"
msgstr "L'amplada màxima per a cada columna"
-#: ../clutter/clutter-flow-layout.c:985
+#: ../clutter/clutter-flow-layout.c:1022
msgid "Minimum Row Height"
msgstr "Alçada mínima de columna"
-#: ../clutter/clutter-flow-layout.c:986
+#: ../clutter/clutter-flow-layout.c:1023
msgid "Minimum height for each row"
msgstr "L'alçada mínima per a cada columna"
-#: ../clutter/clutter-flow-layout.c:1001
+#: ../clutter/clutter-flow-layout.c:1038
msgid "Maximum Row Height"
msgstr "Alçada màxima de columna"
-#: ../clutter/clutter-flow-layout.c:1002
+#: ../clutter/clutter-flow-layout.c:1039
msgid "Maximum height for each row"
msgstr "L'alçada màxima per a cada columna"
-#: ../clutter/clutter-grid-layout.c:1222
+#: ../clutter/clutter-flow-layout.c:1054 ../clutter/clutter-flow-layout.c:1055
+msgid "Snap to grid"
+msgstr "Ajusta a la graella"
+
+#: ../clutter/clutter-gesture-action.c:668
+msgid "Number touch points"
+msgstr "Nombre de punts tàctils"
+
+#: ../clutter/clutter-gesture-action.c:669
+msgid "Number of touch points"
+msgstr "El nombre de punts tàctils"
+
+#: ../clutter/clutter-gesture-action.c:684
+msgid "Threshold Trigger Edge"
+msgstr "Vora del llindar d'activació"
+
+#: ../clutter/clutter-gesture-action.c:685
+msgid "The trigger edge used by the action"
+msgstr "La vora d'activació que utilitza l'acció"
+
+#: ../clutter/clutter-gesture-action.c:704
+msgid "Threshold Trigger Horizontal Distance"
+msgstr "Llindar d'activació de distància horitzontal"
+
+#: ../clutter/clutter-gesture-action.c:705
+msgid "The horizontal trigger distance used by the action"
+msgstr "La distància d'activació horitzontal que utilitza l'acció"
+
+#: ../clutter/clutter-gesture-action.c:723
+msgid "Threshold Trigger Vertical Distance"
+msgstr "Llindar d'activació de distància vertical"
+
+#: ../clutter/clutter-gesture-action.c:724
+msgid "The vertical trigger distance used by the action"
+msgstr "La distància d'activació vertical que utilitza l'acció"
+
+#: ../clutter/clutter-grid-layout.c:1223
msgid "Left attachment"
msgstr "Adjunció esquerra"
-#: ../clutter/clutter-grid-layout.c:1223
+#: ../clutter/clutter-grid-layout.c:1224
msgid "The column number to attach the left side of the child to"
msgstr "El número de columna al que adjuntar-hi la part esquerra del fill"
-#: ../clutter/clutter-grid-layout.c:1230
+#: ../clutter/clutter-grid-layout.c:1231
msgid "Top attachment"
msgstr "Adjunció superior"
-#: ../clutter/clutter-grid-layout.c:1231
+#: ../clutter/clutter-grid-layout.c:1232
msgid "The row number to attach the top side of a child widget to"
msgstr "El número de columna al que adjuntar-hi la part superior del giny fill"
-#: ../clutter/clutter-grid-layout.c:1239
+#: ../clutter/clutter-grid-layout.c:1240
msgid "The number of columns that a child spans"
msgstr "El nombre de columnes que hauria d'abastir el fill"
-#: ../clutter/clutter-grid-layout.c:1246
+#: ../clutter/clutter-grid-layout.c:1247
msgid "The number of rows that a child spans"
msgstr "El nombre de files que hauria d'abastir el fill"
-#: ../clutter/clutter-grid-layout.c:1562
+#: ../clutter/clutter-grid-layout.c:1564
msgid "Row spacing"
msgstr "Espaiat de files"
-#: ../clutter/clutter-grid-layout.c:1563
+#: ../clutter/clutter-grid-layout.c:1565
msgid "The amount of space between two consecutive rows"
msgstr "La quantitat d'espai entre dues files consecutives"
-#: ../clutter/clutter-grid-layout.c:1576
+#: ../clutter/clutter-grid-layout.c:1578
msgid "Column spacing"
msgstr "Espaiat de columnes"
-#: ../clutter/clutter-grid-layout.c:1577
+#: ../clutter/clutter-grid-layout.c:1579
msgid "The amount of space between two consecutive columns"
msgstr "La quantitat d'espai entre dues columnes consecutives"
-#: ../clutter/clutter-grid-layout.c:1591
+#: ../clutter/clutter-grid-layout.c:1593
msgid "Row Homogeneous"
msgstr "Files homogènies"
-#: ../clutter/clutter-grid-layout.c:1592
+#: ../clutter/clutter-grid-layout.c:1594
msgid "If TRUE, the rows are all the same height"
msgstr "Si és «TRUE» (cert), totes les files tenen la mateixa alçada"
-#: ../clutter/clutter-grid-layout.c:1605
+#: ../clutter/clutter-grid-layout.c:1607
msgid "Column Homogeneous"
msgstr "Columnes homogènies"
-#: ../clutter/clutter-grid-layout.c:1606
+#: ../clutter/clutter-grid-layout.c:1608
msgid "If TRUE, the columns are all the same width"
msgstr "Si és «TRUE» (cert), totes les columnes tenen la mateixa amplada"
-#: ../clutter/clutter-image.c:248 ../clutter/clutter-image.c:311
-#: ../clutter/clutter-image.c:399
+#: ../clutter/clutter-image.c:268 ../clutter/clutter-image.c:331
+#: ../clutter/clutter-image.c:419
msgid "Unable to load image data"
msgstr "No s'han pogut carregar les dades de la imatge"
-#: ../clutter/clutter-input-device.c:242
+#: ../clutter/clutter-input-device.c:231
msgid "Id"
msgstr "Identificador"
-#: ../clutter/clutter-input-device.c:243
+#: ../clutter/clutter-input-device.c:232
msgid "Unique identifier of the device"
msgstr "L'identificador únic del dispositiu"
-#: ../clutter/clutter-input-device.c:259
+#: ../clutter/clutter-input-device.c:248
msgid "The name of the device"
msgstr "El nom del dispositiu"
-#: ../clutter/clutter-input-device.c:273
+#: ../clutter/clutter-input-device.c:262
msgid "Device Type"
msgstr "Tipus de dispositiu"
-#: ../clutter/clutter-input-device.c:274
+#: ../clutter/clutter-input-device.c:263
msgid "The type of the device"
msgstr "El tipus de dispositiu"
-#: ../clutter/clutter-input-device.c:289
+#: ../clutter/clutter-input-device.c:278
msgid "Device Manager"
msgstr "Gestor de dispositiu"
-#: ../clutter/clutter-input-device.c:290
+#: ../clutter/clutter-input-device.c:279
msgid "The device manager instance"
msgstr "La instància del gestor de dispositiu"
-#: ../clutter/clutter-input-device.c:303
+#: ../clutter/clutter-input-device.c:292
msgid "Device Mode"
msgstr "Mode del dispositiu"
-#: ../clutter/clutter-input-device.c:304
+#: ../clutter/clutter-input-device.c:293
msgid "The mode of the device"
msgstr "El mode del dispositiu"
-#: ../clutter/clutter-input-device.c:318
+#: ../clutter/clutter-input-device.c:307
msgid "Has Cursor"
msgstr "Té un cursor"
-#: ../clutter/clutter-input-device.c:319
+#: ../clutter/clutter-input-device.c:308
msgid "Whether the device has a cursor"
msgstr "Si el dispositiu té un cursor"
-#: ../clutter/clutter-input-device.c:338
+#: ../clutter/clutter-input-device.c:327
msgid "Whether the device is enabled"
msgstr "Si el dispositiu és habilitat"
-#: ../clutter/clutter-input-device.c:351
+#: ../clutter/clutter-input-device.c:340
msgid "Number of Axes"
msgstr "Nombre d'eixos"
-#: ../clutter/clutter-input-device.c:352
+#: ../clutter/clutter-input-device.c:341
msgid "The number of axes on the device"
msgstr "El nombre d'eixos en el dispositiu"
-#: ../clutter/clutter-input-device.c:367
+#: ../clutter/clutter-input-device.c:356
msgid "The backend instance"
msgstr "La instància del rerefons"
-#: ../clutter/clutter-interval.c:506
+#: ../clutter/clutter-interval.c:557
msgid "Value Type"
msgstr "Tipus de valor"
-#: ../clutter/clutter-interval.c:507
+#: ../clutter/clutter-interval.c:558
msgid "The type of the values in the interval"
msgstr "El tipus dels valors en l'interval"
-#: ../clutter/clutter-interval.c:522
+#: ../clutter/clutter-interval.c:573
msgid "Initial Value"
msgstr "Valor inicial"
-#: ../clutter/clutter-interval.c:523
+#: ../clutter/clutter-interval.c:574
msgid "Initial value of the interval"
msgstr "El valor inicial de l'interval"
-#: ../clutter/clutter-interval.c:537
+#: ../clutter/clutter-interval.c:588
msgid "Final Value"
msgstr "Valor final"
-#: ../clutter/clutter-interval.c:538
+#: ../clutter/clutter-interval.c:589
msgid "Final value of the interval"
msgstr "El valor final de l'interval"
@@ -1281,96 +1349,96 @@ msgstr "El gestor que ha creat esta dada"
#. * Do NOT translate it to non-English e.g. "predefinito:LTR"! If
#. * it isn't default:LTR or default:RTL it will not work.
#.
-#: ../clutter/clutter-main.c:762
+#: ../clutter/clutter-main.c:751
msgid "default:LTR"
msgstr "default:LTR"
-#: ../clutter/clutter-main.c:1633
+#: ../clutter/clutter-main.c:1577
msgid "Show frames per second"
msgstr "Mostra els fotogrames per segon"
-#: ../clutter/clutter-main.c:1635
+#: ../clutter/clutter-main.c:1579
msgid "Default frame rate"
msgstr "Fotogrames per segon per defecte"
-#: ../clutter/clutter-main.c:1637
+#: ../clutter/clutter-main.c:1581
msgid "Make all warnings fatal"
msgstr "Fes que tots els avisos siguen fatals"
-#: ../clutter/clutter-main.c:1640
+#: ../clutter/clutter-main.c:1584
msgid "Direction for the text"
msgstr "Direcció del text"
-#: ../clutter/clutter-main.c:1643
+#: ../clutter/clutter-main.c:1587
msgid "Disable mipmapping on text"
msgstr "Inhabilita el mapat MIP en el text"
-#: ../clutter/clutter-main.c:1646
+#: ../clutter/clutter-main.c:1590
msgid "Use 'fuzzy' picking"
msgstr "Utilitza una selecció «difusa»"
-#: ../clutter/clutter-main.c:1649
+#: ../clutter/clutter-main.c:1593
msgid "Clutter debugging flags to set"
msgstr "Senyaladors de depuració de la Clutter a establir"
-#: ../clutter/clutter-main.c:1651
+#: ../clutter/clutter-main.c:1595
msgid "Clutter debugging flags to unset"
msgstr "Senyaladors de depuració de la Clutter a inhabilitar"
-#: ../clutter/clutter-main.c:1655
+#: ../clutter/clutter-main.c:1599
msgid "Clutter profiling flags to set"
msgstr "Senyaladors de perfilació de la Clutter a establir"
-#: ../clutter/clutter-main.c:1657
+#: ../clutter/clutter-main.c:1601
msgid "Clutter profiling flags to unset"
msgstr "Senyaladors de perfilació de la Clutter a inhabilitar"
-#: ../clutter/clutter-main.c:1660
+#: ../clutter/clutter-main.c:1604
msgid "Enable accessibility"
msgstr "Habilita l'accessibilitat"
-#: ../clutter/clutter-main.c:1852
+#: ../clutter/clutter-main.c:1796
msgid "Clutter Options"
msgstr "Opcions de la Clutter"
-#: ../clutter/clutter-main.c:1853
+#: ../clutter/clutter-main.c:1797
msgid "Show Clutter Options"
msgstr "Mostra les opcions de la Clutter"
-#: ../clutter/clutter-pan-action.c:451
+#: ../clutter/clutter-pan-action.c:455
msgid "Pan Axis"
msgstr "Eix de panorama"
-#: ../clutter/clutter-pan-action.c:452
+#: ../clutter/clutter-pan-action.c:456
msgid "Constraints the panning to an axis"
msgstr "Restringeix el panorama a un eix"
-#: ../clutter/clutter-pan-action.c:466
+#: ../clutter/clutter-pan-action.c:470
msgid "Interpolate"
msgstr "Interpolació"
-#: ../clutter/clutter-pan-action.c:467
+#: ../clutter/clutter-pan-action.c:471
msgid "Whether interpolated events emission is enabled."
msgstr "Si l'emissió d'esdeveniments interpolats és habilitat."
-#: ../clutter/clutter-pan-action.c:483
+#: ../clutter/clutter-pan-action.c:487
msgid "Deceleration"
msgstr "Desacceleració"
-#: ../clutter/clutter-pan-action.c:484
+#: ../clutter/clutter-pan-action.c:488
msgid "Rate at which the interpolated panning will decelerate in"
msgstr "La ràtio en la que la interpolació del panorama desaccelerarà"
-#: ../clutter/clutter-pan-action.c:501
+#: ../clutter/clutter-pan-action.c:505
msgid "Initial acceleration factor"
msgstr "Factor d'acceleració inicial"
-#: ../clutter/clutter-pan-action.c:502
+#: ../clutter/clutter-pan-action.c:506
msgid "Factor applied to the momentum when starting the interpolated phase"
msgstr "El factor aplicat al moment quan s'inicie la fase d'interpolació"
#: ../clutter/clutter-path-constraint.c:212
-#: ../clutter/deprecated/clutter-behaviour-path.c:225
+#: ../clutter/deprecated/clutter-behaviour-path.c:221
msgid "Path"
msgstr "Camí"
@@ -1382,89 +1450,89 @@ msgstr "El camí utilitzat per restringir un actor"
msgid "The offset along the path, between -1.0 and 2.0"
msgstr "El desplaçament al llarg del camí, entre -1.0 i 2.0"
-#: ../clutter/clutter-property-transition.c:271
+#: ../clutter/clutter-property-transition.c:269
msgid "Property Name"
msgstr "Nom de la propietat"
-#: ../clutter/clutter-property-transition.c:272
+#: ../clutter/clutter-property-transition.c:270
msgid "The name of the property to animate"
msgstr "El nom de la propietat que s'animarà"
-#: ../clutter/clutter-script.c:466
+#: ../clutter/clutter-script.c:464
msgid "Filename Set"
msgstr "Té nom de fitxer"
-#: ../clutter/clutter-script.c:467
+#: ../clutter/clutter-script.c:465
msgid "Whether the :filename property is set"
msgstr "Si la propietat «:filename» té un valor"
-#: ../clutter/clutter-script.c:481
-#: ../clutter/deprecated/clutter-texture.c:1082
+#: ../clutter/clutter-script.c:479
+#: ../clutter/deprecated/clutter-texture.c:1080
msgid "Filename"
msgstr "Nom de fitxer"
-#: ../clutter/clutter-script.c:482
+#: ../clutter/clutter-script.c:480
msgid "The path of the currently parsed file"
msgstr "El camí al fitxer analitzat actualment"
-#: ../clutter/clutter-script.c:499
+#: ../clutter/clutter-script.c:497
msgid "Translation Domain"
msgstr "Domini de la traducció"
-#: ../clutter/clutter-script.c:500
+#: ../clutter/clutter-script.c:498
msgid "The translation domain used to localize string"
msgstr "El domini de traducció utilitzat per ubicar una cadena"
-#: ../clutter/clutter-scroll-actor.c:263
+#: ../clutter/clutter-scroll-actor.c:184
msgid "Scroll Mode"
msgstr "Mode de desplaçament"
-#: ../clutter/clutter-scroll-actor.c:264
+#: ../clutter/clutter-scroll-actor.c:185
msgid "The scrolling direction"
msgstr "La direcció del desplaçament"
-#: ../clutter/clutter-settings.c:440
+#: ../clutter/clutter-settings.c:486
msgid "Double Click Time"
msgstr "Temps del doble clic"
-#: ../clutter/clutter-settings.c:441
+#: ../clutter/clutter-settings.c:487
msgid "The time between clicks necessary to detect a multiple click"
msgstr "El temps entre clics necessari per detectar un clic múltiple"
-#: ../clutter/clutter-settings.c:456
+#: ../clutter/clutter-settings.c:502
msgid "Double Click Distance"
msgstr "Distància de doble clic"
-#: ../clutter/clutter-settings.c:457
+#: ../clutter/clutter-settings.c:503
msgid "The distance between clicks necessary to detect a multiple click"
msgstr "La distància entre clics necessària per detectar un clic múltiple"
-#: ../clutter/clutter-settings.c:472
+#: ../clutter/clutter-settings.c:518
msgid "Drag Threshold"
msgstr "Llindar d'arrossegament"
-#: ../clutter/clutter-settings.c:473
+#: ../clutter/clutter-settings.c:519
msgid "The distance the cursor should travel before starting to drag"
msgstr ""
"La distància que ha de desplaçar-se el cursor abans de començar un "
"arrossegament"
-#: ../clutter/clutter-settings.c:488 ../clutter/clutter-text.c:3368
+#: ../clutter/clutter-settings.c:534 ../clutter/clutter-text.c:3437
msgid "Font Name"
msgstr "Nom del tipus de lletra"
-#: ../clutter/clutter-settings.c:489
+#: ../clutter/clutter-settings.c:535
msgid ""
"The description of the default font, as one that could be parsed by Pango"
msgstr ""
"La descripció del tipus de lletra per defecte, tal com l'hauria d'analitzar "
"la Pango"
-#: ../clutter/clutter-settings.c:504
+#: ../clutter/clutter-settings.c:550
msgid "Font Antialias"
msgstr "Antialiàsing del tipus de lletra"
-#: ../clutter/clutter-settings.c:505
+#: ../clutter/clutter-settings.c:551
msgid ""
"Whether to use antialiasing (1 to enable, 0 to disable, and -1 to use the "
"default)"
@@ -1472,73 +1540,81 @@ msgstr ""
"Si s'ha d'utilitzar l'antialiàsing (1 l'habilita, 0 l'inhabilita i -1 "
"utilitza el per defecte)"
-#: ../clutter/clutter-settings.c:521
+#: ../clutter/clutter-settings.c:567 ../clutter/clutter-settings.c:575
msgid "Font DPI"
msgstr "PPP del tipus de lletra"
-#: ../clutter/clutter-settings.c:522
+#: ../clutter/clutter-settings.c:568 ../clutter/clutter-settings.c:576
msgid ""
"The resolution of the font, in 1024 * dots/inch, or -1 to use the default"
msgstr ""
"La resolució del tipus de lletra, en 1024 * punts/polzada, o -1 utilitza la "
"per defecte"
-#: ../clutter/clutter-settings.c:538
+#: ../clutter/clutter-settings.c:592
msgid "Font Hinting"
msgstr "Contorn del tipus de lletra"
-#: ../clutter/clutter-settings.c:539
+#: ../clutter/clutter-settings.c:593
msgid ""
"Whether to use hinting (1 to enable, 0 to disable and -1 to use the default)"
msgstr ""
"Si s'ha d'utilitzar el contorn (1 l'habilita, 0 l'inhabilita i -1 per "
"utilitzar el per defecte)"
-#: ../clutter/clutter-settings.c:560
+#: ../clutter/clutter-settings.c:613
msgid "Font Hint Style"
msgstr "Estil del contorn del tipus de lletra"
-#: ../clutter/clutter-settings.c:561
+#: ../clutter/clutter-settings.c:614
msgid "The style of hinting (hintnone, hintslight, hintmedium, hintfull)"
msgstr ""
"L'estil del contorn (sense contorn, contorn lleuger, contorn mitjà, contorn "
"complet)"
-#: ../clutter/clutter-settings.c:582
+#: ../clutter/clutter-settings.c:634
msgid "Font Subpixel Order"
msgstr "Orde de subpíxels del tipus de lletra"
-#: ../clutter/clutter-settings.c:583
+#: ../clutter/clutter-settings.c:635
msgid "The type of subpixel antialiasing (none, rgb, bgr, vrgb, vbgr)"
msgstr "El tipus d'antialiàsing de subpíxel (cap, rgb, bgr, vrgb, vbgr)"
-#: ../clutter/clutter-settings.c:600
+#: ../clutter/clutter-settings.c:652
msgid "The minimum duration for a long press gesture to be recognized"
msgstr "La durada mínima d'una premuda llarga perquè es reconegui"
-#: ../clutter/clutter-settings.c:607
+#: ../clutter/clutter-settings.c:659
+msgid "Window Scaling Factor"
+msgstr "El factor d'escalat de la finestra"
+
+#: ../clutter/clutter-settings.c:660
+msgid "The scaling factor to be applied to windows"
+msgstr "El factor d'escalat que s'ha d'aplicar a les finestres"
+
+#: ../clutter/clutter-settings.c:667
msgid "Fontconfig configuration timestamp"
msgstr "Marca horària de la configuració de la Fontconfig"
-#: ../clutter/clutter-settings.c:608
+#: ../clutter/clutter-settings.c:668
msgid "Timestamp of the current fontconfig configuration"
msgstr "Marca horària de la configuració actual de la Fontconfig"
-#: ../clutter/clutter-settings.c:625
+#: ../clutter/clutter-settings.c:685
msgid "Password Hint Time"
msgstr "Temps de pista de la contrasenya"
-#: ../clutter/clutter-settings.c:626
+#: ../clutter/clutter-settings.c:686
msgid "How long to show the last input character in hidden entries"
msgstr ""
"Temps de durada de visualització de l'últim caràcter introduït en les "
"entrades d'ocultes"
-#: ../clutter/clutter-shader-effect.c:486
+#: ../clutter/clutter-shader-effect.c:487
msgid "Shader Type"
msgstr "Tipus de shader"
-#: ../clutter/clutter-shader-effect.c:487
+#: ../clutter/clutter-shader-effect.c:488
msgid "The type of shader used"
msgstr "El tipus de shader que s'utilitza"
@@ -1566,760 +1642,704 @@ msgstr "La vora de la font que s'hauria de trencar"
msgid "The offset in pixels to apply to the constraint"
msgstr "El desplaçament, en píxels, a aplicar a la restricció"
-#: ../clutter/clutter-stage.c:1895
+#: ../clutter/clutter-stage.c:1918
msgid "Fullscreen Set"
msgstr "A pantalla completa"
-#: ../clutter/clutter-stage.c:1896
+#: ../clutter/clutter-stage.c:1919
msgid "Whether the main stage is fullscreen"
msgstr "Si l'escenari principal és a pantalla completa"
-#: ../clutter/clutter-stage.c:1910
+#: ../clutter/clutter-stage.c:1933
msgid "Offscreen"
msgstr "Fora de pantalla"
-#: ../clutter/clutter-stage.c:1911
+#: ../clutter/clutter-stage.c:1934
msgid "Whether the main stage should be rendered offscreen"
msgstr "Si l'escenari principal hauria de renderitzar-se fora de pantalla"
-#: ../clutter/clutter-stage.c:1923 ../clutter/clutter-text.c:3482
+#: ../clutter/clutter-stage.c:1946 ../clutter/clutter-text.c:3551
msgid "Cursor Visible"
msgstr "Visibilitat del cursor"
-#: ../clutter/clutter-stage.c:1924
+#: ../clutter/clutter-stage.c:1947
msgid "Whether the mouse pointer is visible on the main stage"
msgstr "Si el punter del ratolí és visible a l'escenari principal"
-#: ../clutter/clutter-stage.c:1938
+#: ../clutter/clutter-stage.c:1961
msgid "User Resizable"
msgstr "Redimensionable per l'usuari"
-#: ../clutter/clutter-stage.c:1939
+#: ../clutter/clutter-stage.c:1962
msgid "Whether the stage is able to be resized via user interaction"
msgstr "Si l'usuari pot redimensionar l'escenari"
-#: ../clutter/clutter-stage.c:1954 ../clutter/deprecated/clutter-box.c:260
-#: ../clutter/deprecated/clutter-rectangle.c:273
+#: ../clutter/clutter-stage.c:1977 ../clutter/deprecated/clutter-box.c:254
+#: ../clutter/deprecated/clutter-rectangle.c:270
msgid "Color"
msgstr "Color"
-#: ../clutter/clutter-stage.c:1955
+#: ../clutter/clutter-stage.c:1978
msgid "The color of the stage"
msgstr "El color de l'escenari"
-#: ../clutter/clutter-stage.c:1970
+#: ../clutter/clutter-stage.c:1993
msgid "Perspective"
msgstr "Perspectiva"
-#: ../clutter/clutter-stage.c:1971
+#: ../clutter/clutter-stage.c:1994
msgid "Perspective projection parameters"
msgstr "Els paràmetres de projecció de la perspectiva"
-#: ../clutter/clutter-stage.c:1986
+#: ../clutter/clutter-stage.c:2009
msgid "Title"
msgstr "Títol"
-#: ../clutter/clutter-stage.c:1987
+#: ../clutter/clutter-stage.c:2010
msgid "Stage Title"
msgstr "Títol de l'escenari"
-#: ../clutter/clutter-stage.c:2004
+#: ../clutter/clutter-stage.c:2027
msgid "Use Fog"
msgstr "Utilitza la boira"
-#: ../clutter/clutter-stage.c:2005
+#: ../clutter/clutter-stage.c:2028
msgid "Whether to enable depth cueing"
msgstr "Si s'habilita la percepció de profunditat"
-#: ../clutter/clutter-stage.c:2021
+#: ../clutter/clutter-stage.c:2044
msgid "Fog"
msgstr "Boira"
-#: ../clutter/clutter-stage.c:2022
+#: ../clutter/clutter-stage.c:2045
msgid "Settings for the depth cueing"
msgstr "Paràmetres de la percepció de profunditat"
-#: ../clutter/clutter-stage.c:2038
+#: ../clutter/clutter-stage.c:2061
msgid "Use Alpha"
msgstr "Utilitza l'alfa"
-#: ../clutter/clutter-stage.c:2039
+#: ../clutter/clutter-stage.c:2062
msgid "Whether to honour the alpha component of the stage color"
msgstr "Si s'ha de respectar el component alfa del color de l'escenari"
-#: ../clutter/clutter-stage.c:2055
+#: ../clutter/clutter-stage.c:2078
msgid "Key Focus"
msgstr "Focus clau"
-#: ../clutter/clutter-stage.c:2056
+#: ../clutter/clutter-stage.c:2079
msgid "The currently key focused actor"
msgstr "L'actor clau que té el focus"
-#: ../clutter/clutter-stage.c:2072
+#: ../clutter/clutter-stage.c:2095
msgid "No Clear Hint"
msgstr "Sense indicació de neteja"
-#: ../clutter/clutter-stage.c:2073
+#: ../clutter/clutter-stage.c:2096
msgid "Whether the stage should clear its contents"
msgstr "Si l'escenari hauria de netejar els seus continguts"
-#: ../clutter/clutter-stage.c:2086
+#: ../clutter/clutter-stage.c:2109
msgid "Accept Focus"
msgstr "Accepta el focus"
-#: ../clutter/clutter-stage.c:2087
+#: ../clutter/clutter-stage.c:2110
msgid "Whether the stage should accept focus on show"
msgstr "Si l'escenari hauria d'acceptar el focus en mostrar-se"
-#: ../clutter/clutter-table-layout.c:543
-msgid "Column Number"
-msgstr "Número de columna"
-
-#: ../clutter/clutter-table-layout.c:544
-msgid "The column the widget resides in"
-msgstr "La columna en la que està el giny"
-
-#: ../clutter/clutter-table-layout.c:551
-msgid "Row Number"
-msgstr "Número de fila"
-
-#: ../clutter/clutter-table-layout.c:552
-msgid "The row the widget resides in"
-msgstr "La fila en la que està el giny"
-
-#: ../clutter/clutter-table-layout.c:559
-msgid "Column Span"
-msgstr "Abast en columnes"
-
-#: ../clutter/clutter-table-layout.c:560
-msgid "The number of columns the widget should span"
-msgstr "El nombre de columnes que hauria d'abastir el giny"
-
-#: ../clutter/clutter-table-layout.c:567
-msgid "Row Span"
-msgstr "Abast en files"
-
-#: ../clutter/clutter-table-layout.c:568
-msgid "The number of rows the widget should span"
-msgstr "El nombre de files que hauria d'abastir el giny"
-
-#: ../clutter/clutter-table-layout.c:575
-msgid "Horizontal Expand"
-msgstr "Expansió horitzontal"
-
-#: ../clutter/clutter-table-layout.c:576
-msgid "Allocate extra space for the child in horizontal axis"
-msgstr "Ubica espai extra per al fill en l'eix horitzontal"
-
-#: ../clutter/clutter-table-layout.c:582
-msgid "Vertical Expand"
-msgstr "Expansió vertical"
-
-#: ../clutter/clutter-table-layout.c:583
-msgid "Allocate extra space for the child in vertical axis"
-msgstr "Ubica espai extra per al fill en l'eix vertical"
-
-#: ../clutter/clutter-table-layout.c:1638
-msgid "Spacing between columns"
-msgstr "Espaiat entre columnes"
-
-#: ../clutter/clutter-table-layout.c:1652
-msgid "Spacing between rows"
-msgstr "Espaiat entre files"
-
-#: ../clutter/clutter-text-buffer.c:351 ../clutter/clutter-text.c:3403
+#: ../clutter/clutter-text-buffer.c:347 ../clutter/clutter-text.c:3472
msgid "Text"
msgstr "Text"
-#: ../clutter/clutter-text-buffer.c:352
+#: ../clutter/clutter-text-buffer.c:348
msgid "The contents of the buffer"
msgstr "El contingut de la memòria intermèdia"
-#: ../clutter/clutter-text-buffer.c:365
+#: ../clutter/clutter-text-buffer.c:361
msgid "Text length"
msgstr "Llargada del text"
-#: ../clutter/clutter-text-buffer.c:366
+#: ../clutter/clutter-text-buffer.c:362
msgid "Length of the text currently in the buffer"
msgstr "La llargada del text que hi ha actualment a la memòria intermèdia"
-#: ../clutter/clutter-text-buffer.c:379
+#: ../clutter/clutter-text-buffer.c:375
msgid "Maximum length"
msgstr "Llargada màxima"
-#: ../clutter/clutter-text-buffer.c:380
+#: ../clutter/clutter-text-buffer.c:376
msgid "Maximum number of characters for this entry. Zero if no maximum"
msgstr "Nombre màxim de caràcters per esta entrada. Zero si no té màxim"
-#: ../clutter/clutter-text.c:3350
+#: ../clutter/clutter-text.c:3419
msgid "Buffer"
msgstr "Memòria intermèdia"
-#: ../clutter/clutter-text.c:3351
+#: ../clutter/clutter-text.c:3420
msgid "The buffer for the text"
msgstr "La memòria intermèdia del text"
-#: ../clutter/clutter-text.c:3369
+#: ../clutter/clutter-text.c:3438
msgid "The font to be used by the text"
msgstr "El tipus de lletra per al text"
-#: ../clutter/clutter-text.c:3386
+#: ../clutter/clutter-text.c:3455
msgid "Font Description"
msgstr "Descripció del tipus de lletra"
-#: ../clutter/clutter-text.c:3387
+#: ../clutter/clutter-text.c:3456
msgid "The font description to be used"
msgstr "La descripció del tipus de lletra que s'utilitzarà"
-#: ../clutter/clutter-text.c:3404
+#: ../clutter/clutter-text.c:3473
msgid "The text to render"
msgstr "El text a renderitzar"
-#: ../clutter/clutter-text.c:3418
+#: ../clutter/clutter-text.c:3487
msgid "Font Color"
msgstr "Color del tipus de lletra"
-#: ../clutter/clutter-text.c:3419
+#: ../clutter/clutter-text.c:3488
msgid "Color of the font used by the text"
msgstr "El color del tipus de lletra que utilitzarà el text"
-#: ../clutter/clutter-text.c:3434
+#: ../clutter/clutter-text.c:3503
msgid "Editable"
msgstr "Editable"
-#: ../clutter/clutter-text.c:3435
+#: ../clutter/clutter-text.c:3504
msgid "Whether the text is editable"
msgstr "Si el text es pot editar"
-#: ../clutter/clutter-text.c:3450
+#: ../clutter/clutter-text.c:3519
msgid "Selectable"
msgstr "Seleccionable"
-#: ../clutter/clutter-text.c:3451
+#: ../clutter/clutter-text.c:3520
msgid "Whether the text is selectable"
msgstr "Si el text es pot seleccionar"
-#: ../clutter/clutter-text.c:3465
+#: ../clutter/clutter-text.c:3534
msgid "Activatable"
msgstr "Activable"
-#: ../clutter/clutter-text.c:3466
+#: ../clutter/clutter-text.c:3535
msgid "Whether pressing return causes the activate signal to be emitted"
msgstr "Si s'emet el senyal d'activació en prémer la tecla de retorn"
-#: ../clutter/clutter-text.c:3483
+#: ../clutter/clutter-text.c:3552
msgid "Whether the input cursor is visible"
msgstr "Si és visible el cursor d'entrada"
-#: ../clutter/clutter-text.c:3497 ../clutter/clutter-text.c:3498
+#: ../clutter/clutter-text.c:3566 ../clutter/clutter-text.c:3567
msgid "Cursor Color"
msgstr "Color del cursor"
-#: ../clutter/clutter-text.c:3513
+#: ../clutter/clutter-text.c:3582
msgid "Cursor Color Set"
msgstr "Establit el color del cursor"
-#: ../clutter/clutter-text.c:3514
+#: ../clutter/clutter-text.c:3583
msgid "Whether the cursor color has been set"
msgstr "Si s'ha establit el color del cursor"
-#: ../clutter/clutter-text.c:3529
+#: ../clutter/clutter-text.c:3598
msgid "Cursor Size"
msgstr "Mida del cursor"
-#: ../clutter/clutter-text.c:3530
+#: ../clutter/clutter-text.c:3599
msgid "The width of the cursor, in pixels"
msgstr "L'amplada del cursor, en píxels"
-#: ../clutter/clutter-text.c:3546 ../clutter/clutter-text.c:3564
+#: ../clutter/clutter-text.c:3615 ../clutter/clutter-text.c:3633
msgid "Cursor Position"
msgstr "Posició del cursor"
-#: ../clutter/clutter-text.c:3547 ../clutter/clutter-text.c:3565
+#: ../clutter/clutter-text.c:3616 ../clutter/clutter-text.c:3634
msgid "The cursor position"
msgstr "La posició del cursor"
-#: ../clutter/clutter-text.c:3580
+#: ../clutter/clutter-text.c:3649
msgid "Selection-bound"
msgstr "Extrem de selecció"
-#: ../clutter/clutter-text.c:3581
+#: ../clutter/clutter-text.c:3650
msgid "The cursor position of the other end of the selection"
msgstr "La posició del cursor a l'altre extrem de la selecció"
-#: ../clutter/clutter-text.c:3596 ../clutter/clutter-text.c:3597
+#: ../clutter/clutter-text.c:3665 ../clutter/clutter-text.c:3666
msgid "Selection Color"
msgstr "Color de la selecció"
-#: ../clutter/clutter-text.c:3612
+#: ../clutter/clutter-text.c:3681
msgid "Selection Color Set"
msgstr "Establit el color de selecció"
-#: ../clutter/clutter-text.c:3613
+#: ../clutter/clutter-text.c:3682
msgid "Whether the selection color has been set"
msgstr "Si s'ha establit el color de selecció"
-#: ../clutter/clutter-text.c:3628
+#: ../clutter/clutter-text.c:3697
msgid "Attributes"
msgstr "Atributs"
-#: ../clutter/clutter-text.c:3629
+#: ../clutter/clutter-text.c:3698
msgid "A list of style attributes to apply to the contents of the actor"
msgstr "Una llista d'atributs d'estil per aplicar als continguts de l'actor"
-#: ../clutter/clutter-text.c:3651
+#: ../clutter/clutter-text.c:3720
msgid "Use markup"
msgstr "Utilitza l'etiquetatge"
-#: ../clutter/clutter-text.c:3652
+#: ../clutter/clutter-text.c:3721
msgid "Whether or not the text includes Pango markup"
msgstr "Si el text inclou etiquetatge de la Pango"
-#: ../clutter/clutter-text.c:3668
+#: ../clutter/clutter-text.c:3737
msgid "Line wrap"
msgstr "Ajustament de línia"
-#: ../clutter/clutter-text.c:3669
+#: ../clutter/clutter-text.c:3738
msgid "If set, wrap the lines if the text becomes too wide"
msgstr "Si s'estableix, ajusta les línies si el text és massa ample"
-#: ../clutter/clutter-text.c:3684
+#: ../clutter/clutter-text.c:3753
msgid "Line wrap mode"
msgstr "Mode d'ajust de línia"
-#: ../clutter/clutter-text.c:3685
+#: ../clutter/clutter-text.c:3754
msgid "Control how line-wrapping is done"
msgstr "Controla com s'ajusten les línies"
-#: ../clutter/clutter-text.c:3700
+#: ../clutter/clutter-text.c:3769
msgid "Ellipsize"
msgstr "Punts suspensius"
-#: ../clutter/clutter-text.c:3701
+#: ../clutter/clutter-text.c:3770
msgid "The preferred place to ellipsize the string"
msgstr "El lloc preferit on posar punts suspensius al segment"
-#: ../clutter/clutter-text.c:3717
+#: ../clutter/clutter-text.c:3786
msgid "Line Alignment"
msgstr "Alineació de la línia"
-#: ../clutter/clutter-text.c:3718
+#: ../clutter/clutter-text.c:3787
msgid "The preferred alignment for the string, for multi-line text"
msgstr ""
"L'alineació preferida per al segment quan és un text de més d'una línia"
-#: ../clutter/clutter-text.c:3734
+#: ../clutter/clutter-text.c:3803
msgid "Justify"
msgstr "Justifica"
-#: ../clutter/clutter-text.c:3735
+#: ../clutter/clutter-text.c:3804
msgid "Whether the text should be justified"
msgstr "Si el text s'hauria de justificar"
-#: ../clutter/clutter-text.c:3750
+#: ../clutter/clutter-text.c:3819
msgid "Password Character"
msgstr "Caràcter de contrasenya"
-#: ../clutter/clutter-text.c:3751
+#: ../clutter/clutter-text.c:3820
msgid "If non-zero, use this character to display the actor's contents"
msgstr ""
"Si no és zero, utilitza este caràcter per mostrar els continguts de l'actor"
-#: ../clutter/clutter-text.c:3765
+#: ../clutter/clutter-text.c:3834
msgid "Max Length"
msgstr "Llargada màxima"
-#: ../clutter/clutter-text.c:3766
+#: ../clutter/clutter-text.c:3835
msgid "Maximum length of the text inside the actor"
msgstr "Llargada màxima del text dins de l'actor"
-#: ../clutter/clutter-text.c:3789
+#: ../clutter/clutter-text.c:3858
msgid "Single Line Mode"
msgstr "Mode d'una línia sola"
-#: ../clutter/clutter-text.c:3790
+#: ../clutter/clutter-text.c:3859
msgid "Whether the text should be a single line"
msgstr "Si el text hauria de ser una sola línia"
-#: ../clutter/clutter-text.c:3804 ../clutter/clutter-text.c:3805
+#: ../clutter/clutter-text.c:3873 ../clutter/clutter-text.c:3874
msgid "Selected Text Color"
msgstr "Color del text seleccionat"
-#: ../clutter/clutter-text.c:3820
+#: ../clutter/clutter-text.c:3889
msgid "Selected Text Color Set"
msgstr "Establit el color del text seleccionat"
-#: ../clutter/clutter-text.c:3821
+#: ../clutter/clutter-text.c:3890
msgid "Whether the selected text color has been set"
msgstr "Si s'ha establit el color del text seleccionat"
-#: ../clutter/clutter-timeline.c:561
-#: ../clutter/deprecated/clutter-animation.c:560
+#: ../clutter/clutter-timeline.c:591
+#: ../clutter/deprecated/clutter-animation.c:506
msgid "Loop"
msgstr "Repetició"
-#: ../clutter/clutter-timeline.c:562
+#: ../clutter/clutter-timeline.c:592
msgid "Should the timeline automatically restart"
msgstr "Si s'hauria de reiniciar automàticament la línia del temps"
-#: ../clutter/clutter-timeline.c:576
+#: ../clutter/clutter-timeline.c:606
msgid "Delay"
msgstr "Retard"
-#: ../clutter/clutter-timeline.c:577
+#: ../clutter/clutter-timeline.c:607
msgid "Delay before start"
msgstr "El retard abans d'iniciar"
-#: ../clutter/clutter-timeline.c:592
-#: ../clutter/deprecated/clutter-animation.c:544
-#: ../clutter/deprecated/clutter-animator.c:1803
+#: ../clutter/clutter-timeline.c:622
+#: ../clutter/deprecated/clutter-animation.c:490
+#: ../clutter/deprecated/clutter-animator.c:1792
#: ../clutter/deprecated/clutter-media.c:224
-#: ../clutter/deprecated/clutter-state.c:1522
+#: ../clutter/deprecated/clutter-state.c:1515
msgid "Duration"
msgstr "Durada"
-#: ../clutter/clutter-timeline.c:593
+#: ../clutter/clutter-timeline.c:623
msgid "Duration of the timeline in milliseconds"
-msgstr "La durada de la línia del temps en miŀlisegons"
+msgstr "La durada de la línia del temps en mil·lisegons"
-#: ../clutter/clutter-timeline.c:608
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:528
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:337
+#: ../clutter/clutter-timeline.c:638
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:521
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:330
msgid "Direction"
msgstr "Direcció"
-#: ../clutter/clutter-timeline.c:609
+#: ../clutter/clutter-timeline.c:639
msgid "Direction of the timeline"
msgstr "La direcció de la línia del temps"
-#: ../clutter/clutter-timeline.c:624
+#: ../clutter/clutter-timeline.c:654
msgid "Auto Reverse"
msgstr "Capgira automàticament"
-#: ../clutter/clutter-timeline.c:625
+#: ../clutter/clutter-timeline.c:655
msgid "Whether the direction should be reversed when reaching the end"
msgstr "Si la direcció s'hauria de capgirar quan s'arribe al final"
-#: ../clutter/clutter-timeline.c:643
+#: ../clutter/clutter-timeline.c:673
msgid "Repeat Count"
msgstr "Comptador de repeticions"
-#: ../clutter/clutter-timeline.c:644
+#: ../clutter/clutter-timeline.c:674
msgid "How many times the timeline should repeat"
msgstr "Nombre de vegades que s'hauria de repetir la línia de temps"
-#: ../clutter/clutter-timeline.c:658
+#: ../clutter/clutter-timeline.c:688
msgid "Progress Mode"
msgstr "Mode de progrés"
-#: ../clutter/clutter-timeline.c:659
+#: ../clutter/clutter-timeline.c:689
msgid "How the timeline should compute the progress"
msgstr "Com s'ha de calcular el progrés de la línia del temps"
-#: ../clutter/clutter-transition.c:246
+#: ../clutter/clutter-transition.c:244
msgid "Interval"
msgstr "Interval"
-#: ../clutter/clutter-transition.c:247
+#: ../clutter/clutter-transition.c:245
msgid "The interval of values to transition"
msgstr "L'interval de valors en que es farà la transició"
-#: ../clutter/clutter-transition.c:261
+#: ../clutter/clutter-transition.c:259
msgid "Animatable"
msgstr "Es pot animar"
-#: ../clutter/clutter-transition.c:262
+#: ../clutter/clutter-transition.c:260
msgid "The animatable object"
msgstr "L'objecte que es pot animar"
-#: ../clutter/clutter-transition.c:283
+#: ../clutter/clutter-transition.c:281
msgid "Remove on Complete"
msgstr "Suprimeix en completar"
-#: ../clutter/clutter-transition.c:284
+#: ../clutter/clutter-transition.c:282
msgid "Detach the transition when completed"
msgstr "Desacobla la transició quan es completi"
-#: ../clutter/clutter-zoom-action.c:353
+#: ../clutter/clutter-zoom-action.c:365
msgid "Zoom Axis"
msgstr "Eix d'ampliació"
-#: ../clutter/clutter-zoom-action.c:354
+#: ../clutter/clutter-zoom-action.c:366
msgid "Constraints the zoom to an axis"
msgstr "Restringeix l'ampliació a un eix"
-#: ../clutter/deprecated/clutter-alpha.c:355
-#: ../clutter/deprecated/clutter-animation.c:575
-#: ../clutter/deprecated/clutter-animator.c:1820
+#: ../clutter/deprecated/clutter-alpha.c:347
+#: ../clutter/deprecated/clutter-animation.c:521
+#: ../clutter/deprecated/clutter-animator.c:1809
msgid "Timeline"
msgstr "Línia del temps"
-#: ../clutter/deprecated/clutter-alpha.c:356
+#: ../clutter/deprecated/clutter-alpha.c:348
msgid "Timeline used by the alpha"
msgstr "La línia del temps que utilitzarà l'alfa"
-#: ../clutter/deprecated/clutter-alpha.c:372
+#: ../clutter/deprecated/clutter-alpha.c:364
msgid "Alpha value"
msgstr "Valor alfa"
-#: ../clutter/deprecated/clutter-alpha.c:373
+#: ../clutter/deprecated/clutter-alpha.c:365
msgid "Alpha value as computed by the alpha"
msgstr "El valor alfa calculat per l'alfa"
-#: ../clutter/deprecated/clutter-alpha.c:394
-#: ../clutter/deprecated/clutter-animation.c:528
+#: ../clutter/deprecated/clutter-alpha.c:386
+#: ../clutter/deprecated/clutter-animation.c:474
msgid "Mode"
msgstr "Mode"
-#: ../clutter/deprecated/clutter-alpha.c:395
+#: ../clutter/deprecated/clutter-alpha.c:387
msgid "Progress mode"
msgstr "Mode de progrés"
-#: ../clutter/deprecated/clutter-animation.c:511
+#: ../clutter/deprecated/clutter-animation.c:457
msgid "Object"
msgstr "Objecte"
-#: ../clutter/deprecated/clutter-animation.c:512
+#: ../clutter/deprecated/clutter-animation.c:458
msgid "Object to which the animation applies"
msgstr "L'objecte al que s'aplica l'animació"
-#: ../clutter/deprecated/clutter-animation.c:529
+#: ../clutter/deprecated/clutter-animation.c:475
msgid "The mode of the animation"
msgstr "El mode de l'animació"
-#: ../clutter/deprecated/clutter-animation.c:545
+#: ../clutter/deprecated/clutter-animation.c:491
msgid "Duration of the animation, in milliseconds"
-msgstr "Durada de l'animació, en miŀlisegons"
+msgstr "Durada de l'animació, en mil·lisegons"
-#: ../clutter/deprecated/clutter-animation.c:561
+#: ../clutter/deprecated/clutter-animation.c:507
msgid "Whether the animation should loop"
msgstr "Si l'animació s'hauria de repetir"
-#: ../clutter/deprecated/clutter-animation.c:576
+#: ../clutter/deprecated/clutter-animation.c:522
msgid "The timeline used by the animation"
msgstr "La línia del temps que utilitzarà l'animació"
-#: ../clutter/deprecated/clutter-animation.c:592
-#: ../clutter/deprecated/clutter-behaviour.c:241
+#: ../clutter/deprecated/clutter-animation.c:538
+#: ../clutter/deprecated/clutter-behaviour.c:237
msgid "Alpha"
msgstr "Alfa"
-#: ../clutter/deprecated/clutter-animation.c:593
+#: ../clutter/deprecated/clutter-animation.c:539
msgid "The alpha used by the animation"
msgstr "L'alfa que utilitzarà l'animació"
-#: ../clutter/deprecated/clutter-animator.c:1804
+#: ../clutter/deprecated/clutter-animator.c:1793
msgid "The duration of the animation"
msgstr "La durada de l'animació"
-#: ../clutter/deprecated/clutter-animator.c:1821
+#: ../clutter/deprecated/clutter-animator.c:1810
msgid "The timeline of the animation"
msgstr "La línia del temps de l'animació"
-#: ../clutter/deprecated/clutter-behaviour.c:242
+#: ../clutter/deprecated/clutter-behaviour.c:238
msgid "Alpha Object to drive the behaviour"
msgstr "L'objecte alfa que estableix el comportament"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:182
+#: ../clutter/deprecated/clutter-behaviour-depth.c:180
msgid "Start Depth"
msgstr "Profunditat inicial"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:183
+#: ../clutter/deprecated/clutter-behaviour-depth.c:181
msgid "Initial depth to apply"
msgstr "La profunditat inicial a aplicar"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:198
+#: ../clutter/deprecated/clutter-behaviour-depth.c:196
msgid "End Depth"
msgstr "Profunditat final"
-#: ../clutter/deprecated/clutter-behaviour-depth.c:199
+#: ../clutter/deprecated/clutter-behaviour-depth.c:197
msgid "Final depth to apply"
msgstr "La profunditat final a aplicar"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:401
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:394
msgid "Start Angle"
msgstr "Angle d'inici"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:402
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:284
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:395
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:277
msgid "Initial angle"
msgstr "Angle inicial"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:417
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:410
msgid "End Angle"
msgstr "Angle de fi"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:418
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:302
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:411
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:295
msgid "Final angle"
msgstr "Angle final"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:433
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:426
msgid "Angle x tilt"
msgstr "Angle d'inclinació X"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:434
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:427
msgid "Tilt of the ellipse around x axis"
-msgstr "La inclinació de l'eŀlipse al voltant de l'eix de les X"
+msgstr "La inclinació de l'el·lipse al voltant de l'eix de les X"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:449
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:442
msgid "Angle y tilt"
msgstr "Angle d'inclinació Y"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:450
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:443
msgid "Tilt of the ellipse around y axis"
-msgstr "La inclinació de l'eŀlipse al voltant de l'eix de les Y"
+msgstr "La inclinació de l'el·lipse al voltant de l'eix de les Y"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:465
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:458
msgid "Angle z tilt"
msgstr "Angle d'inclinació Z"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:466
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:459
msgid "Tilt of the ellipse around z axis"
-msgstr "La inclinació de l'eŀlipse al voltant de l'eix de les Z"
+msgstr "La inclinació de l'el·lipse al voltant de l'eix de les Z"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:482
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:475
msgid "Width of the ellipse"
-msgstr "Amplada de l'eŀlipse"
+msgstr "Amplada de l'el·lipse"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:498
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:491
msgid "Height of ellipse"
-msgstr "Alçada de l'eŀlipse"
+msgstr "Alçada de l'el·lipse"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:513
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:506
msgid "Center"
msgstr "Centre"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:514
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:507
msgid "Center of ellipse"
-msgstr "El centre de l'eŀlipse"
+msgstr "El centre de l'el·lipse"
-#: ../clutter/deprecated/clutter-behaviour-ellipse.c:529
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:338
+#: ../clutter/deprecated/clutter-behaviour-ellipse.c:522
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:331
msgid "Direction of rotation"
msgstr "Direcció de la rotació"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:184
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:177
msgid "Opacity Start"
msgstr "Opacitat inicial"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:185
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:178
msgid "Initial opacity level"
msgstr "El nivell d'opacitat inicial"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:202
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:195
msgid "Opacity End"
msgstr "Opacitat final"
-#: ../clutter/deprecated/clutter-behaviour-opacity.c:203
+#: ../clutter/deprecated/clutter-behaviour-opacity.c:196
msgid "Final opacity level"
msgstr "El nivell d'opacitat final"
-#: ../clutter/deprecated/clutter-behaviour-path.c:226
+#: ../clutter/deprecated/clutter-behaviour-path.c:222
msgid "The ClutterPath object representing the path to animate along"
msgstr "L'objecte «ClutterPath» que representa el camí en el que s'anima"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:283
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:276
msgid "Angle Begin"
msgstr "Angle inicial"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:301
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:294
msgid "Angle End"
msgstr "Angle final"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:319
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:312
msgid "Axis"
msgstr "Eix"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:320
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:313
msgid "Axis of rotation"
msgstr "L'eix de rotació"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:355
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:348
msgid "Center X"
msgstr "Centre X"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:356
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:349
msgid "X coordinate of the center of rotation"
msgstr "La coordenada X del centre de rotació"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:373
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:366
msgid "Center Y"
msgstr "Centre Y"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:374
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:367
msgid "Y coordinate of the center of rotation"
msgstr "La coordenada Y del centre de rotació"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:391
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:384
msgid "Center Z"
msgstr "Centre Z"
-#: ../clutter/deprecated/clutter-behaviour-rotate.c:392
+#: ../clutter/deprecated/clutter-behaviour-rotate.c:385
msgid "Z coordinate of the center of rotation"
msgstr "La coordenada Z del centre de rotació"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:226
+#: ../clutter/deprecated/clutter-behaviour-scale.c:222
msgid "X Start Scale"
msgstr "Escala inicial X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:227
+#: ../clutter/deprecated/clutter-behaviour-scale.c:223
msgid "Initial scale on the X axis"
msgstr "L'escala inicial en l'eix de les X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:245
+#: ../clutter/deprecated/clutter-behaviour-scale.c:241
msgid "X End Scale"
msgstr "Escala final X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:246
+#: ../clutter/deprecated/clutter-behaviour-scale.c:242
msgid "Final scale on the X axis"
msgstr "L'escala final en l'eix de les X"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:264
+#: ../clutter/deprecated/clutter-behaviour-scale.c:260
msgid "Y Start Scale"
msgstr "Escala inicial Y"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:265
+#: ../clutter/deprecated/clutter-behaviour-scale.c:261
msgid "Initial scale on the Y axis"
msgstr "L'escala inicial en l'eix de les Y"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:283
+#: ../clutter/deprecated/clutter-behaviour-scale.c:279
msgid "Y End Scale"
msgstr "Escala final Y"
-#: ../clutter/deprecated/clutter-behaviour-scale.c:284
+#: ../clutter/deprecated/clutter-behaviour-scale.c:280
msgid "Final scale on the Y axis"
msgstr "L'escala final en l'eix de les Y"
-#: ../clutter/deprecated/clutter-box.c:261
+#: ../clutter/deprecated/clutter-box.c:255
msgid "The background color of the box"
msgstr "El color de fons de la caixa"
-#: ../clutter/deprecated/clutter-box.c:274
+#: ../clutter/deprecated/clutter-box.c:268
msgid "Color Set"
msgstr "Té color"
-#: ../clutter/deprecated/clutter-cairo-texture.c:597
+#: ../clutter/deprecated/clutter-cairo-texture.c:585
msgid "Surface Width"
msgstr "Amplada de la superfície"
-#: ../clutter/deprecated/clutter-cairo-texture.c:598
+#: ../clutter/deprecated/clutter-cairo-texture.c:586
msgid "The width of the Cairo surface"
msgstr "L'amplada de la superfície Cairo"
-#: ../clutter/deprecated/clutter-cairo-texture.c:615
+#: ../clutter/deprecated/clutter-cairo-texture.c:603
msgid "Surface Height"
msgstr "Alçada de la superfície"
-#: ../clutter/deprecated/clutter-cairo-texture.c:616
+#: ../clutter/deprecated/clutter-cairo-texture.c:604
msgid "The height of the Cairo surface"
msgstr "L'alçada de la superfície Cairo"
-#: ../clutter/deprecated/clutter-cairo-texture.c:636
+#: ../clutter/deprecated/clutter-cairo-texture.c:624
msgid "Auto Resize"
msgstr "Redimensiona automàticament"
-#: ../clutter/deprecated/clutter-cairo-texture.c:637
+#: ../clutter/deprecated/clutter-cairo-texture.c:625
msgid "Whether the surface should match the allocation"
msgstr "Si la superfície hauria de coincidir amb la ubicació"
@@ -2391,104 +2411,160 @@ msgstr "El nivell d'emplenament de la memòria intermèdia"
msgid "The duration of the stream, in seconds"
msgstr "La durada del flux, en segons"
-#: ../clutter/deprecated/clutter-rectangle.c:274
+#: ../clutter/deprecated/clutter-rectangle.c:271
msgid "The color of the rectangle"
msgstr "El color del rectangle"
-#: ../clutter/deprecated/clutter-rectangle.c:287
+#: ../clutter/deprecated/clutter-rectangle.c:284
msgid "Border Color"
msgstr "Color de la vora"
-#: ../clutter/deprecated/clutter-rectangle.c:288
+#: ../clutter/deprecated/clutter-rectangle.c:285
msgid "The color of the border of the rectangle"
msgstr "El color de la vora del rectangle"
-#: ../clutter/deprecated/clutter-rectangle.c:303
+#: ../clutter/deprecated/clutter-rectangle.c:300
msgid "Border Width"
msgstr "Amplada de la vora"
-#: ../clutter/deprecated/clutter-rectangle.c:304
+#: ../clutter/deprecated/clutter-rectangle.c:301
msgid "The width of the border of the rectangle"
msgstr "L'amplada de la vora del rectangle"
-#: ../clutter/deprecated/clutter-rectangle.c:318
+#: ../clutter/deprecated/clutter-rectangle.c:315
msgid "Has Border"
msgstr "Té vora"
-#: ../clutter/deprecated/clutter-rectangle.c:319
+#: ../clutter/deprecated/clutter-rectangle.c:316
msgid "Whether the rectangle should have a border"
msgstr "Si el rectangle hauria de tindre vora"
-#: ../clutter/deprecated/clutter-shader.c:261
+#: ../clutter/deprecated/clutter-shader.c:257
msgid "Vertex Source"
msgstr "Font del vèrtex"
-#: ../clutter/deprecated/clutter-shader.c:262
+#: ../clutter/deprecated/clutter-shader.c:258
msgid "Source of vertex shader"
msgstr "Font del shader del vèrtex"
-#: ../clutter/deprecated/clutter-shader.c:278
+#: ../clutter/deprecated/clutter-shader.c:274
msgid "Fragment Source"
msgstr "Font del fragment"
-#: ../clutter/deprecated/clutter-shader.c:279
+#: ../clutter/deprecated/clutter-shader.c:275
msgid "Source of fragment shader"
msgstr "Font del shader del fragment"
-#: ../clutter/deprecated/clutter-shader.c:296
+#: ../clutter/deprecated/clutter-shader.c:292
msgid "Compiled"
msgstr "Compilat"
-#: ../clutter/deprecated/clutter-shader.c:297
+#: ../clutter/deprecated/clutter-shader.c:293
msgid "Whether the shader is compiled and linked"
msgstr "Si el shader és compilat i enllaçat"
-#: ../clutter/deprecated/clutter-shader.c:314
+#: ../clutter/deprecated/clutter-shader.c:310
msgid "Whether the shader is enabled"
msgstr "Si el shader és habilitat"
-#: ../clutter/deprecated/clutter-shader.c:525
+#: ../clutter/deprecated/clutter-shader.c:521
#, c-format
msgid "%s compilation failed: %s"
msgstr "Ha fallat la compilació del %s: %s"
-#: ../clutter/deprecated/clutter-shader.c:526
+#: ../clutter/deprecated/clutter-shader.c:522
msgid "Vertex shader"
msgstr "Shader de vèrtex"
-#: ../clutter/deprecated/clutter-shader.c:527
+#: ../clutter/deprecated/clutter-shader.c:523
msgid "Fragment shader"
msgstr "Shader del fragment"
-#: ../clutter/deprecated/clutter-state.c:1504
+#: ../clutter/deprecated/clutter-state.c:1497
msgid "State"
msgstr "Estat"
-#: ../clutter/deprecated/clutter-state.c:1505
+#: ../clutter/deprecated/clutter-state.c:1498
msgid "Currently set state, (transition to this state might not be complete)"
msgstr ""
"L'estat establit actualment (potser encara no s'ha completat la transició a "
"este estat)"
-#: ../clutter/deprecated/clutter-state.c:1523
+#: ../clutter/deprecated/clutter-state.c:1516
msgid "Default transition duration"
msgstr "La durada per defecte de la transició"
-#: ../clutter/deprecated/clutter-texture.c:994
+#: ../clutter/deprecated/clutter-table-layout.c:535
+msgid "Column Number"
+msgstr "Número de columna"
+
+#: ../clutter/deprecated/clutter-table-layout.c:536
+msgid "The column the widget resides in"
+msgstr "La columna en la que està el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:543
+msgid "Row Number"
+msgstr "Número de fila"
+
+#: ../clutter/deprecated/clutter-table-layout.c:544
+msgid "The row the widget resides in"
+msgstr "La fila en la que està el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:551
+msgid "Column Span"
+msgstr "Abast en columnes"
+
+#: ../clutter/deprecated/clutter-table-layout.c:552
+msgid "The number of columns the widget should span"
+msgstr "El nombre de columnes que hauria d'abastir el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:559
+msgid "Row Span"
+msgstr "Abast en files"
+
+#: ../clutter/deprecated/clutter-table-layout.c:560
+msgid "The number of rows the widget should span"
+msgstr "El nombre de files que hauria d'abastir el giny"
+
+#: ../clutter/deprecated/clutter-table-layout.c:567
+msgid "Horizontal Expand"
+msgstr "Expansió horitzontal"
+
+#: ../clutter/deprecated/clutter-table-layout.c:568
+msgid "Allocate extra space for the child in horizontal axis"
+msgstr "Ubica espai extra per al fill en l'eix horitzontal"
+
+#: ../clutter/deprecated/clutter-table-layout.c:574
+msgid "Vertical Expand"
+msgstr "Expansió vertical"
+
+#: ../clutter/deprecated/clutter-table-layout.c:575
+msgid "Allocate extra space for the child in vertical axis"
+msgstr "Ubica espai extra per al fill en l'eix vertical"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1630
+msgid "Spacing between columns"
+msgstr "Espaiat entre columnes"
+
+#: ../clutter/deprecated/clutter-table-layout.c:1646
+msgid "Spacing between rows"
+msgstr "Espaiat entre files"
+
+#: ../clutter/deprecated/clutter-texture.c:992
msgid "Sync size of actor"
msgstr "Sincronitza la mida de l'actor"
-#: ../clutter/deprecated/clutter-texture.c:995
+#: ../clutter/deprecated/clutter-texture.c:993
msgid "Auto sync size of actor to underlying pixbuf dimensions"
msgstr ""
"Sincronitza automàticament la mida de l'actor amb les mides de la memòria de "
"píxels de rerefons"
-#: ../clutter/deprecated/clutter-texture.c:1002
+#: ../clutter/deprecated/clutter-texture.c:1000
msgid "Disable Slicing"
msgstr "Inhabilita el tallat"
-#: ../clutter/deprecated/clutter-texture.c:1003
+#: ../clutter/deprecated/clutter-texture.c:1001
msgid ""
"Forces the underlying texture to be singular and not made of smaller space "
"saving individual textures"
@@ -2496,100 +2572,100 @@ msgstr ""
"Força la textura de rerefons a ser una de sola i no estar formada per "
"diverses de més petites"
-#: ../clutter/deprecated/clutter-texture.c:1012
+#: ../clutter/deprecated/clutter-texture.c:1010
msgid "Tile Waste"
msgstr "Desaprofitament de quadre"
-#: ../clutter/deprecated/clutter-texture.c:1013
+#: ../clutter/deprecated/clutter-texture.c:1011
msgid "Maximum waste area of a sliced texture"
msgstr "Àrea màxima de desaprofitament d'una textura tallada"
-#: ../clutter/deprecated/clutter-texture.c:1021
+#: ../clutter/deprecated/clutter-texture.c:1019
msgid "Horizontal repeat"
msgstr "Repetició horitzontal"
-#: ../clutter/deprecated/clutter-texture.c:1022
+#: ../clutter/deprecated/clutter-texture.c:1020
msgid "Repeat the contents rather than scaling them horizontally"
msgstr "Repeteix els continguts en comptes d'escalar-los horitzontalment"
-#: ../clutter/deprecated/clutter-texture.c:1029
+#: ../clutter/deprecated/clutter-texture.c:1027
msgid "Vertical repeat"
msgstr "Repetició vertical"
-#: ../clutter/deprecated/clutter-texture.c:1030
+#: ../clutter/deprecated/clutter-texture.c:1028
msgid "Repeat the contents rather than scaling them vertically"
msgstr "Repeteix els continguts en comptes d'escalar-los verticalment"
-#: ../clutter/deprecated/clutter-texture.c:1037
+#: ../clutter/deprecated/clutter-texture.c:1035
msgid "Filter Quality"
msgstr "Qualitat del filtre"
-#: ../clutter/deprecated/clutter-texture.c:1038
+#: ../clutter/deprecated/clutter-texture.c:1036
msgid "Rendering quality used when drawing the texture"
msgstr "La qualitat de la renderització quan es dibuixi una textura"
-#: ../clutter/deprecated/clutter-texture.c:1046
+#: ../clutter/deprecated/clutter-texture.c:1044
msgid "Pixel Format"
msgstr "Format del píxel"
-#: ../clutter/deprecated/clutter-texture.c:1047
+#: ../clutter/deprecated/clutter-texture.c:1045
msgid "The Cogl pixel format to use"
msgstr "El format de píxel de Cogl a utilitzar"
-#: ../clutter/deprecated/clutter-texture.c:1055
-#: ../clutter/wayland/clutter-wayland-surface.c:449
+#: ../clutter/deprecated/clutter-texture.c:1053
+#: ../clutter/wayland/clutter-wayland-surface.c:445
msgid "Cogl Texture"
msgstr "Textura de Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1056
-#: ../clutter/wayland/clutter-wayland-surface.c:450
+#: ../clutter/deprecated/clutter-texture.c:1054
+#: ../clutter/wayland/clutter-wayland-surface.c:446
msgid "The underlying Cogl texture handle used to draw this actor"
msgstr ""
"El gestor de la textura de Cogl de rerefons que s'utilitza per dibuixar este "
"actor"
-#: ../clutter/deprecated/clutter-texture.c:1063
+#: ../clutter/deprecated/clutter-texture.c:1061
msgid "Cogl Material"
msgstr "Material de Cogl"
-#: ../clutter/deprecated/clutter-texture.c:1064
+#: ../clutter/deprecated/clutter-texture.c:1062
msgid "The underlying Cogl material handle used to draw this actor"
msgstr ""
"El gestor del material de Cogl de rerefons que s'utilitza per dibuixar este "
"actor"
-#: ../clutter/deprecated/clutter-texture.c:1083
+#: ../clutter/deprecated/clutter-texture.c:1081
msgid "The path of the file containing the image data"
msgstr "El camí al fitxer que conté les dades de la imatge"
-#: ../clutter/deprecated/clutter-texture.c:1090
+#: ../clutter/deprecated/clutter-texture.c:1088
msgid "Keep Aspect Ratio"
msgstr "Manté la relació d'aspecte"
-#: ../clutter/deprecated/clutter-texture.c:1091
+#: ../clutter/deprecated/clutter-texture.c:1089
msgid ""
"Keep the aspect ratio of the texture when requesting the preferred width or "
"height"
msgstr ""
-"Manté la relació d'aspecte de la textura quan es soŀliciti una amplada o "
+"Manté la relació d'aspecte de la textura quan es sol·liciti una amplada o "
"alçada preferida"
-#: ../clutter/deprecated/clutter-texture.c:1119
+#: ../clutter/deprecated/clutter-texture.c:1117
msgid "Load asynchronously"
msgstr "Carrega asíncronament"
-#: ../clutter/deprecated/clutter-texture.c:1120
+#: ../clutter/deprecated/clutter-texture.c:1118
msgid ""
"Load files inside a thread to avoid blocking when loading images from disk"
msgstr ""
"Carrega els fitxers en un altre fil d'execució per evitar el blocatge quan "
"es carreguin imatges del disc"
-#: ../clutter/deprecated/clutter-texture.c:1138
+#: ../clutter/deprecated/clutter-texture.c:1136
msgid "Load data asynchronously"
msgstr "Carrega les dades asíncronament"
-#: ../clutter/deprecated/clutter-texture.c:1139
+#: ../clutter/deprecated/clutter-texture.c:1137
msgid ""
"Decode image data files inside a thread to reduce blocking when loading "
"images from disk"
@@ -2597,197 +2673,178 @@ msgstr ""
"Descodifica els fitxers de dades d'imatge en un altre fil d'execució per "
"reduir el blocatge quan es carreguin imatges del disc"
-#: ../clutter/deprecated/clutter-texture.c:1165
+#: ../clutter/deprecated/clutter-texture.c:1163
msgid "Pick With Alpha"
msgstr "Selecció amb transparència"
-#: ../clutter/deprecated/clutter-texture.c:1166
+#: ../clutter/deprecated/clutter-texture.c:1164
msgid "Shape actor with alpha channel when picking"
msgstr "Modela l'actor amb un canal de transparència quan es seleccioni"
-#: ../clutter/deprecated/clutter-texture.c:1599
-#: ../clutter/deprecated/clutter-texture.c:1994
-#: ../clutter/deprecated/clutter-texture.c:2090
-#: ../clutter/deprecated/clutter-texture.c:2388
+#: ../clutter/deprecated/clutter-texture.c:1597
+#: ../clutter/deprecated/clutter-texture.c:1992
+#: ../clutter/deprecated/clutter-texture.c:2088
+#: ../clutter/deprecated/clutter-texture.c:2386
#, c-format
msgid "Failed to load the image data"
msgstr "No s'han pogut carregar les dades de la imatge"
-#: ../clutter/deprecated/clutter-texture.c:1758
+#: ../clutter/deprecated/clutter-texture.c:1756
#, c-format
msgid "YUV textures are not supported"
msgstr "No es poden utilitzar textures YUV"
-#: ../clutter/deprecated/clutter-texture.c:1767
+#: ../clutter/deprecated/clutter-texture.c:1765
#, c-format
msgid "YUV2 textues are not supported"
msgstr "No es poden utilitzar textures YUV2"
-#: ../clutter/evdev/clutter-input-device-evdev.c:159
-msgid "sysfs Path"
-msgstr "Camí al sysfs"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:160
-msgid "Path of the device in sysfs"
-msgstr "Camí al dispositiu a sysfs"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:175
-msgid "Device Path"
-msgstr "Camí al dispositiu"
-
-#: ../clutter/evdev/clutter-input-device-evdev.c:176
-msgid "Path of the device node"
-msgstr "Camí al node del dispositiu"
-
-#: ../clutter/gdk/clutter-backend-gdk.c:296
+#: ../clutter/gdk/clutter-backend-gdk.c:289
#, c-format
msgid "Could not find a suitable CoglWinsys for a GdkDisplay of type %s"
msgstr "No s'ha pogut trobar cap CoglWinsys per a una GdkDisplay del tipus %s"
-#: ../clutter/wayland/clutter-wayland-surface.c:423
+#: ../clutter/wayland/clutter-wayland-surface.c:419
msgid "Surface"
msgstr "Superfície"
-#: ../clutter/wayland/clutter-wayland-surface.c:424
+#: ../clutter/wayland/clutter-wayland-surface.c:420
msgid "The underlying wayland surface"
msgstr "La superfície de Wayland de rerefons"
-#: ../clutter/wayland/clutter-wayland-surface.c:431
+#: ../clutter/wayland/clutter-wayland-surface.c:427
msgid "Surface width"
msgstr "Amplada de la superfície"
-#: ../clutter/wayland/clutter-wayland-surface.c:432
+#: ../clutter/wayland/clutter-wayland-surface.c:428
msgid "The width of the underlying wayland surface"
msgstr "L'amplada de la superfície Wayland subjacent"
-#: ../clutter/wayland/clutter-wayland-surface.c:440
+#: ../clutter/wayland/clutter-wayland-surface.c:436
msgid "Surface height"
msgstr "Alçada de la superfície"
-#: ../clutter/wayland/clutter-wayland-surface.c:441
+#: ../clutter/wayland/clutter-wayland-surface.c:437
msgid "The height of the underlying wayland surface"
msgstr "L'alçada de la superfície Wayland subjacent"
-#: ../clutter/x11/clutter-backend-x11.c:516
+#: ../clutter/x11/clutter-backend-x11.c:488
msgid "X display to use"
msgstr "El monitor d'X a utilitzar"
-#: ../clutter/x11/clutter-backend-x11.c:522
+#: ../clutter/x11/clutter-backend-x11.c:494
msgid "X screen to use"
msgstr "La pantalla d'X a utilitzar"
-#: ../clutter/x11/clutter-backend-x11.c:527
+#: ../clutter/x11/clutter-backend-x11.c:499
msgid "Make X calls synchronous"
msgstr "Fes les crides síncrones a l'X"
-#: ../clutter/x11/clutter-backend-x11.c:534
-msgid "Enable XInput support"
-msgstr "Habilita l'XInput"
+#: ../clutter/x11/clutter-backend-x11.c:506
+msgid "Disable XInput support"
+msgstr "Inhabilita l'XInput"
-#: ../clutter/x11/clutter-keymap-x11.c:317
+#: ../clutter/x11/clutter-keymap-x11.c:458
msgid "The Clutter backend"
msgstr "El rerefons de la Clutter"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:539
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:534
msgid "Pixmap"
msgstr "Mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:540
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:535
msgid "The X11 Pixmap to be bound"
msgstr "El mapa de píxels X11 que es vincularà"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:548
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:543
msgid "Pixmap width"
msgstr "Amplada del mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:549
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:544
msgid "The width of the pixmap bound to this texture"
msgstr "L'amplada del mapa de píxels vinculat a esta textura"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:557
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:552
msgid "Pixmap height"
msgstr "Alçada del mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:558
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:553
msgid "The height of the pixmap bound to this texture"
msgstr "L'alçada del mapa de píxels vinculat a esta textura"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:566
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:561
msgid "Pixmap Depth"
msgstr "Profunditat del mapa de píxels"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:567
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:562
msgid "The depth (in number of bits) of the pixmap bound to this texture"
msgstr ""
"La profunditat (en nombre de bits) del mapa de píxels vinculat a esta textura"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:575
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:570
msgid "Automatic Updates"
msgstr "Actualitzacions automàtiques"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:576
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:571
msgid "If the texture should be kept in sync with any pixmap changes."
msgstr ""
"Si la textura s'hauria de mantindre sincronitzada amb els canvis al mapa de "
"píxels."
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:584
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:579
msgid "Window"
msgstr "Finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:585
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:580
msgid "The X11 Window to be bound"
msgstr "La finestra X11 que es vincularà"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:593
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:588
msgid "Window Redirect Automatic"
msgstr "Redireccions automàtiques de finestres"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:594
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:589
msgid "If composite window redirects are set to Automatic (or Manual if false)"
msgstr ""
"Si les redireccions de les finestres compostes són automàtiques (o manuals "
"si «false» (fals))"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:604
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:599
msgid "Window Mapped"
msgstr "Finestra mapada"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:605
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:600
msgid "If window is mapped"
msgstr "Si la finestra és mapada"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:614
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:609
msgid "Destroyed"
msgstr "Destruïda"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:615
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:610
msgid "If window has been destroyed"
msgstr "Si s'ha destruït la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:623
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:618
msgid "Window X"
msgstr "X de la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:624
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:619
msgid "X position of window on screen according to X11"
msgstr "La posició X de la finestra a la pantalla segons l'X11"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:632
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:627
msgid "Window Y"
msgstr "Y de la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:633
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:628
msgid "Y position of window on screen according to X11"
msgstr "La posició Y de la finestra a la pantalla segons l'X11"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:640
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:635
msgid "Window Override Redirect"
msgstr "Redirecció de la sobreescriptura de la finestra"
-#: ../clutter/x11/clutter-x11-texture-pixmap.c:641
+#: ../clutter/x11/clutter-x11-texture-pixmap.c:636
msgid "If this is an override-redirect window"
msgstr "Si és una finestra de redirecció de la sobreescriptura"
-
-#~ msgid "The layout manager used by the box"
-#~ msgstr "El gestor de disposició utilitzat per la caixa"
diff --git a/po/cs.po b/po/cs.po
index 5931d8c83..af61854e6 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the clutter package.
#
# Adam Matoušek , 2012.
-# Marek Černocký , 2011, 2012, 2013.
+# Marek Černocký