Commit Graph

6003 Commits

Author SHA1 Message Date
Neil Roberts
98a33e03d3 Add a conformance test for cogl_pipeline_set_layer_matrix
This adds a conformance test which paints using a pipeline that has
two layers containing textures. Each layer has a different user
matrix. When the two layers are combined with the right matrices then
all of the colors end up white. The test then verifies this by reading
back the pixels.
2011-02-09 16:14:12 +00:00
Emmanuele Bassi
95f6359f64 Intern clutter_get_actor_by_gid() implementation
As the prelude to deprecation of the function in 1.8, let's move the
implementation to an internal function, and use that instead of the
public facing one.
2011-02-09 15:27:24 +00:00
Emmanuele Bassi
03358aca6c test-actors: Clear the state on destroy
The venerable test-actors used the default stage, which meant that
closing the window just stopped the main loop but left the scene intact.
This does not happen with a normal stage created through
clutter_stage_new().

The change happened in 6ed6b2a54b, in an
unhelpfully named commit that was just supposed to switch to static
colors. My bad.

Anyway, the change led to some assertion failures when closing the stage
in the middle of an animation.

The correct thing to do when using an actor from another object (a
Timeline ::new-frame callback in this case) without owning the instance
is to connect to the ::destroy signal and clean up the pointer to avoid
calling an invalid actor.
2011-02-09 13:36:54 +00:00
Emmanuele Bassi
719e3b7e20 Clean up ClutterMainContext and clutter-private.h
Do a better job at documenting the main context structure fields; remove
unused members; clean up the declarations.
2011-02-09 13:36:54 +00:00
Emmanuele Bassi
ef4688fd0e Avoid direct access to the main context events queue
The GQueue that stores the global events queue is handled all over the
place:

  • the structure is created in _clutter_backend_init_events();
  • the queue is handled in clutter-event.c, clutter-stage.c and
    clutter-backend.c;
  • ClutterStage::dispose cleans up the events associated with
    the stage being destroyed;
  • the queue is destroyed in ClutterBackend::dispose.

Since we need to have access to it in different places we cannot put it
inside ClutterBackendPrivate, hence it should stay in ClutterMainContext;
but we should still manage it from just one place - preferably by the
ClutterEvent API only.
2011-02-09 13:34:25 +00:00
Emmanuele Bassi
56d133f908 backend: Move event translators to the base class
In the future, we want event translators to be the way to handle events
in backends. For this reason, they should be a part of the base abstract
ClutterBackend class, and not an X11-only concept.
2011-02-09 13:29:30 +00:00
Emmanuele Bassi
e9fa986ccc docs: Update the HACKING.backends documentation 2011-02-09 13:29:30 +00:00
Emmanuele Bassi
224280be22 backend: Invoke ClutterStageWindow::redraw by default
Instead of asking all backends to do that for us, we can call
ClutterStageWindow::redraw ourselves by default.

This changeset fixes all backends to actually do the right thing, and
move the stage implementation redraw inside the ClutterStageWindow
implementation itself.
2011-02-09 13:29:30 +00:00
nobled
734a236a97 wayland: fix shm buffers
We need to *write* to the shared memory, not read from it.
cogl_texture_from_data() is read-only, it doesn't keep
the data in sync with the texture.

Instead, we have to call cogl_texture_get_data() ourselves
to sync manually.
2011-02-08 16:17:29 +00:00
nobled
c1a27d481b wayland: set renderable type on dummy surface
Make sure it's compatible with the API that's in use.
2011-02-08 16:16:18 +00:00
nobled
20b1350614 wayland: check for egl extensions explicitly
eglGetProcAddress() returns non-null function pointers
whether or not they're actually supported by the driver,
since it can be used before any driver gets loaded. So
we have to check if the extensions are advertised first,
which requires having an initialized display, so we split
the display creation code into its own function.

The exception to extension-checking is EGL_MESA_drm_display,
since by definition it's needed before any display is even
created.
2011-02-08 16:15:09 +00:00
Emmanuele Bassi
7da930fb75 stage-window: Add ::redraw virtual function
How to redraw a ClutterStage's implementation should be part of the
ClutterStageWindow interface.
2011-02-08 15:49:19 +00:00
Emmanuele Bassi
bbf73f58b6 Skip some x11-specific calls when generating introspection
Some types are just not handled currently.
2011-02-08 15:31:20 +00:00
Emmanuele Bassi
2f8d22ef89 Unify the vfunc parameters names with their callers
Otherwise g-ir-scanner will get fairly angry.
2011-02-08 15:30:48 +00:00
Elliot Smith
cf18836ca0 docs: Add recipe for animating an actor on a curved path
Show how to animate an actor using a ClutterPathConstraint.

This demonstrates how to get effects similar to
ClutterPathBehaviour with the modern animation APIs.

Includes 3 examples:

1) Simple ClutterPathConstraint used with implicit animations
2) ClutterPathConstraint used to simulate circular animation,
using ClutterAnimator
3) Creating simple curved path animations with non-linear
easing
2011-02-08 14:41:51 +00:00
Emmanuele Bassi
9090070a98 x11: Refresh key mapping when notified by X11
Use both the MappingNotify event and the XKB XkbMapNotify event, if
we're compiled with XKB support.

This change is also useful for making ClutterKeymapX11 an event
translator and let it deal with XKB events internally like we do for
stage and input events.

Based on a patch by: Damien Lespiau <damien.lespiau@intel.com>

Signed-off by: Emmanuele Bassi <ebassi@linux.intel.com>

http://bugzilla.clutter-project.org/show_bug.cgi?id=2525
2011-02-08 12:13:13 +00:00
Emmanuele Bassi
4956152a11 Post-release version bump to 1.6.3 2011-02-07 15:59:42 +00:00
Emmanuele Bassi
bb5608532e Release Clutter 1.6.2 2011-02-07 15:42:45 +00:00
Emmanuele Bassi
3e857802a8 Update NEWS 2011-02-07 15:42:23 +00:00
Emmanuele Bassi
615c200707 build: Fix the Cally pkg-config file
Do not use ${winsys}: use ${soname_infix} instead.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2549
2011-02-07 15:40:50 +00:00
Emmanuele Bassi
9fa85ee9bf osx: Add more checks to the redraw function
The redraw function might be called during destruction phase, when the
Stage state has not entirely been tore down. We need to be slightly more
resilient to that scenario.
2011-02-03 16:25:42 +00:00
Emmanuele Bassi
d846f5fe6a Add some more sanity checks to clutter_do_event()
Silently ignore events on stages during destruction; but print out a
warning if clutter_do_event() is being called with a stage-less event.
2011-02-03 11:30:10 +00:00
Emmanuele Bassi
63e88d9840 stage: Unconditionally create the devices hash table 2011-02-03 11:27:46 +00:00
Emmanuele Bassi
f133d84c02 stage: Do not update when destroying a stage
During the stage destruction we should just skip event processing, since
we cannot guarantee that the stage is actually valid.
2011-02-03 11:25:28 +00:00
Viatcheslav Gachkaylo
901ed32568 Fixed bugs with mouse events.
Enter/leave events are now being received. Mouse move events
now work properly.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>

http://bugzilla.clutter-project.org/show_bug.cgi?id=2545
2011-02-03 10:58:38 +00:00
Emmanuele Bassi
cef380040d osx: Use _clutter_event_push()
Do not operate directly on the event queue, but use the wrapper call
that all backends share.
2011-02-02 14:44:35 +00:00
Emmanuele Bassi
af22290f0d osx: Re-add the event time
Some overzealous diffing led to a missing call to setting the time of a
ClutterEvent from the corresponding NSEvent.
2011-02-02 14:44:35 +00:00
Neil Roberts
55e26e23df cogl-vertex-buffer: Use a ref count on the pipeline private data
The pipeline private data is accessed both from the private data set
on a CoglPipeline and the destroy notify function of a weak material
that the vertex buffer creates when it needs to override the wrap
mode. However when a CoglPipeline is destroyed, the CoglObject code
first removes all of the private data set on the object and then the
CoglPipeline code gets invoked to destroy all of the weak children. At
this point the vertex buffer's weak override destroy notify function
will get invoked and try to use the private data which has already
been freed causing a crash.

This patch instead adds a reference count to the pipeline private data
stuct so that we can avoid freeing it until both the private data on
the pipeline has been destroyed and all of the weak materials are
destroyed.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2544
2011-02-01 18:47:05 +00:00
Neil Roberts
5740a5a38a cogl-pipeline: Fix comparing the color in set_layer_combine_constant
In cogl_pipeline_set_layer_combine_constant it was comparing whether
the new color is the same as the old color using a memcmp on the
constant_color parameter. However the combine constant is stored in
the layer data as an array of four floats but the passed in color is a
CoglColor (which is currently an array of four guint8s). This was
causing valgrind errors and presumably also the check for setting the
same color twice would always fail.

This patch makes it do the conversion to a float array upfront before
the comparison.
2011-02-01 17:50:10 +00:00
Emmanuele Bassi
a573ad05c9 event: The device setter work on sub-types
Instead of just setting the input device pointer in the private event
data, it should also set the field in the event sub-types, so that
direct access to the structures still works.
2011-02-01 14:44:22 +00:00
Emmanuele Bassi
8fc462269d build: Pass --enable-cookbook when distchecking
We should force building the cookbook when releasing a tarball of
Clutter, so that users of packaged tarballs can actually build the
cookbook themselves.
2011-02-01 14:39:21 +00:00
Emmanuele Bassi
428f64212c build: Fixes to pass distcheck
Try to make the cookbook pass the distcheck phase, so that we can run
distcheck with --enable-docs, and make sure that a tarballed clutter
release can actually build the cookbook.
2011-02-01 14:39:21 +00:00
Emmanuele Bassi
6f1e5010d9 docs: Switch a 'Since' annotation in CallyActor
Since doesn't like it when it's not the last annotation.
2011-02-01 14:39:21 +00:00
Neil Roberts
2ded18933e cogl-matrix: Get rid of the *_packed variants
cogl_matrix_project_points and cogl_matrix_transform_points had an
optimization for the common case where the stride parameters exactly
match the size of the corresponding structures. The code for both when
generated by gcc with -O2 on x86-64 use two registers to hold the
addresses of the input and output arrays. In the strided version these
pointers are incremented by adding the value of a register and in the
packed version they are incremented by adding an immediate value. I
think the difference in cost here would be negligible and it may even
be faster to add a register.

Also GCC appears to retain the loop counter in a register for the
strided version but in the packed version it can optimize it out and
directly use the input pointer as the counter. I think it would be
possible to reorder the code a bit to explicitly use the input pointer
as the counter if this were a problem.

Getting rid of the packed versions tidies up the code a bit and it
could potentially be faster if the code differences are small and we
get to avoid an extra conditional in cogl_matrix_transform_points.
2011-02-01 13:18:43 +00:00
Emmanuele Bassi
c4d4a5469a build: Dist cb-button.h in the cookbook examples
The header is missing, so we have a build failure if you try to build
Clutter's cookbook from the tarball.
2011-02-01 12:45:52 +00:00
nobled
e855bc45a2 wayland: fall back to shm buffers if drm fails 2011-02-01 02:58:15 +00:00
nobled
d84f31ef3a wayland: add shm buffer code
It's not enabled to do anything yet.
2011-02-01 02:58:11 +00:00
Emmanuele Bassi
adeb611934 Post-release version bump to 1.6.1 2011-01-31 15:04:48 +00:00
Emmanuele Bassi
01cbd47b19 Release Clutter 1.6.0 2011-01-31 14:47:37 +00:00
Emmanuele Bassi
c060f086c5 docs: Update the NEWS file 2011-01-31 14:01:04 +00:00
Emmanuele Bassi
bb44d51fc9 Merge remote branch 'elliot/cookbook-actors-composite'
* elliot/cookbook-actors-composite:
  docs: Add reference to useful GObject tutorial
  docs: Explain why destroy() is implemented
  docs: Implement destroy() rather than dispose()
  docs: Don't use clutter_stage_get_default()
  docs: Change text on button
  docs: Add a note about other state variables
  docs: Complete composite actor recipe
  docs: Change order of functions in example to match docs
  docs: Add more comments on how allocate() works
  docs: Include code examples in the recipe
  docs: Explain enums for properties and signals
  docs: Don't set explicit size on button
  docs: Add example of preferred_height() and preferred_width()
  docs: Add recipe for creating a custom ClutterActor with composition
  docs: Add more comments on code example for composite actor
  docs: Improve example code formatting
  docs: Add some gtk-doc annotations to example
  docs: Add custom ClutterActor example which uses composition
2011-01-31 13:58:12 +00:00
Emmanuele Bassi
5859efa34f docs: Update NEWS file 2011-01-31 13:56:05 +00:00
Emmanuele Bassi
2c1f8c9ad3 osx: Add devices to event translation code
Use a DeviceManager sub-class similar to the Win32 backend one, which
creates two InputDevices: a core pointer and a core keyboard.

The event translation code then uses these two devices to fill out the
.device field of the events.

Throw in enter/leave tracking, given that we need to update the device's
state.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2490
2011-01-31 13:47:34 +00:00
Viatcheslav Gachkaylo
634e4ffd1a osx: Improve the event loop
Implementation of event loop which works with GLib events, native OS X
events and Clutter events.

The event loop source code comes from the equivalent code in the Quartz
GDK backend from GTK+ 2.22.1, which is LGPL v2.1+ and thus compatible
with Clutter's licensing terms.

The code has been tested with libsoup, which did not work before together
with Clutter.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>

http://bugzilla.clutter-project.org/show_bug.cgi?id=2490
2011-01-31 13:43:12 +00:00
Elliot Smith
6680cebfe1 docs: Add reference to useful GObject tutorial
Add a reference to a GObject tutorial which
is a good introduction to the various macros etc.
and what they're for.
2011-01-31 13:40:10 +00:00
Elliot Smith
885664f725 docs: Explain why destroy() is implemented
As destroy() is Clutter-specific and not generic
GObject code, explain why we implement it
(rather than dispose()).
2011-01-31 13:39:11 +00:00
Emmanuele Bassi
1558975bc3 docs: Fix documentation for clutter_actor_pop_internal()
http://bugzilla.clutter-project.org/show_bug.cgi?id=2534
2011-01-31 13:37:32 +00:00
Elliot Smith
e69d60e8b6 docs: Implement destroy() rather than dispose()
Remove the dispose() implementation and replace
with destroy().

This should be promoted as the standard approach
for implementing a composite actor, as it emits a
signal when instances of the actor subclass are destroyed.
2011-01-31 13:36:37 +00:00
Emmanuele Bassi
9753cd4a59 docs: Update Cogl release notes for 1.6 2011-01-31 13:04:49 +00:00
Emmanuele Bassi
f954b8e1bb Update the NEWS file 2011-01-31 13:04:35 +00:00