profile/ivi/clutter.git
15 years ago[docs] Update after the Input API changes
Emmanuele Bassi [Tue, 23 Jun 2009 14:45:42 +0000 (15:45 +0100)]
[docs] Update after the Input API changes

15 years ago[docs] Add an initial porting guide
Emmanuele Bassi [Tue, 23 Jun 2009 14:25:16 +0000 (15:25 +0100)]
[docs] Add an initial porting guide

The Clutter API reference should have a section on how to port
applications from older version of Clutter to the new API.

The first guide deals on how to port animations created with
ClutterEffect to clutter_actor_animate().

15 years ago[docs] Fix the ActorBox annotations
Emmanuele Bassi [Tue, 23 Jun 2009 14:23:53 +0000 (15:23 +0100)]
[docs] Fix the ActorBox annotations

The ClutterActorBox API is incorrectly annotated and gtk-doc is unable
to pick it up.

15 years ago[test-shader] Fix some of the shaders to use premultiplied colors
Neil Roberts [Wed, 24 Jun 2009 11:04:55 +0000 (12:04 +0100)]
[test-shader] Fix some of the shaders to use premultiplied colors

Texture data is now in premultiplied format and the shader should
output a premultiplied color if the default blend mode is being
used. Shaders that directly manipulate the rgb values now
unpremultiply and premultiply again afterwards.

15 years agoAdd element-type annotations for animate*v functions
Tim Horton [Fri, 19 Jun 2009 02:46:48 +0000 (22:46 -0400)]
Add element-type annotations for animate*v functions

Fixes bug:

  http://bugzilla.openedhand.com/show_bug.cgi?id=1653

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years ago[master clock] Fix MT safety issues
Ole André Vadla Ravnås [Thu, 18 Jun 2009 21:53:46 +0000 (23:53 +0200)]
[master clock] Fix MT safety issues

Fix MT issues when enabling threading in Clutter.

Fixes bug:

  http://bugzilla.openedhand.com/show_bug.cgi?id=1655

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years ago[texture] Revert to integer parameters in ::size-change
Emmanuele Bassi [Mon, 22 Jun 2009 11:07:08 +0000 (12:07 +0100)]
[texture] Revert to integer parameters in ::size-change

In the int-to-float switch for actor properties, the ::size-change signal
was moved to use floats instead of integers. Sub-pixel precision for image
size is meaningless, though, so we should revert it back to ints.

Fixes bug:

  http://bugzilla.openedhand.com/show_bug.cgi?id=1659

15 years agoPost-release bump to 0.9.5
Emmanuele Bassi [Fri, 19 Jun 2009 17:25:25 +0000 (18:25 +0100)]
Post-release bump to 0.9.5

15 years ago[release] 0.9.4
Emmanuele Bassi [Fri, 19 Jun 2009 16:50:31 +0000 (17:50 +0100)]
[release] 0.9.4

15 years agoUpdate the NEWS file
Emmanuele Bassi [Tue, 16 Jun 2009 15:42:41 +0000 (16:42 +0100)]
Update the NEWS file

15 years ago[docs] Add new input-related accessors
Emmanuele Bassi [Fri, 19 Jun 2009 17:06:02 +0000 (18:06 +0100)]
[docs] Add new input-related accessors

Add the ClutterEvent accessors for the device pointer and type, and
the ClutterInputDevice accessors for the id and type.

15 years agoRemove the last few fixed-point entry points
Emmanuele Bassi [Fri, 19 Jun 2009 15:38:35 +0000 (16:38 +0100)]
Remove the last few fixed-point entry points

The last fixed-point entry points are just a few, and trivial. The
end user is expected to do the conversion using the CoglFixed type
and macros.

15 years ago[x11] Simplify the XInput support
Emmanuele Bassi [Fri, 19 Jun 2009 14:12:32 +0000 (15:12 +0100)]
[x11] Simplify the XInput support

Instead of using a specific function to check whether the X
server supports the XInput extension we can use the generic
Xlib function XQueryExtension(). This cuts down the extra
checks inside the configure.ac and simplifies the code inside
clutter_x11_register_xinput().

15 years ago[x11] Add a command line switch for enabling XInput
Emmanuele Bassi [Fri, 19 Jun 2009 13:32:37 +0000 (14:32 +0100)]
[x11] Add a command line switch for enabling XInput

Currently, XInput support requires a function call. In order to
make it easier for people to test it, we can also add a command
line switch that moves the pointer device detection and handling
to XInput. This should ensure that, at least for people building
Clutter with --enable-xinput, applications can be easily migrated
and regressions can be caught.

15 years ago[tests] Remove unneeded g_type_init()
Emmanuele Bassi [Fri, 19 Jun 2009 13:20:50 +0000 (14:20 +0100)]
[tests] Remove unneeded g_type_init()

Now that we can safely check for an uninitialized Clutter we
don't have side effects in calling one of the functions like
clutter_x11_enable_xinput(), which require to be called before
any other Clutter function.

15 years ago[backend] Do not store the stage manager singleton
Emmanuele Bassi [Fri, 19 Jun 2009 13:19:39 +0000 (14:19 +0100)]
[backend] Do not store the stage manager singleton

The StageManager singleton instance is already kept around
by the clutter_stage_manager_get_default() function; there is
no need to have it inside the main Clutter context as well.

15 years ago[x11] Use _clutter_context_is_initialized()
Emmanuele Bassi [Fri, 19 Jun 2009 13:12:36 +0000 (14:12 +0100)]
[x11] Use _clutter_context_is_initialized()

Instead of using _clutter_context_get_default() and checking the
is_initialized flag, we should use the newly added private function
that does not cause side effects, especially for functions that have
to be called before any other Clutter function.

15 years agoAllow checking initialization without side-effects
Emmanuele Bassi [Fri, 19 Jun 2009 13:09:42 +0000 (14:09 +0100)]
Allow checking initialization without side-effects

The _clutter_context_get_default() function will automatically
create the main Clutter context; if we just want to check whether
Clutter has been initialized this will complicate matters, by
requiring a call to g_type_init() inside the client code.

Instead, we should simply provide an internal API that checks
whether the main Clutter context exists and if it has been
initialized, without any side effect.

15 years ago[input] Rework input device API
Emmanuele Bassi [Fri, 19 Jun 2009 12:07:20 +0000 (13:07 +0100)]
[input] Rework input device API

The input device API is split halfway thorugh the backends in a very
weird way. The data structures are private, as they should, but most
of the information should be available in the main API since it's
generic enough.

The device type enumeration, for instance, should be common across
every backend; the accessors for device type and id should live in the
core API. The internal API should always use ClutterInputDevice and
not the private X11 implementation when dealing with public structures
like ClutterEvent.

By adding accessors for the device type and id, and by moving the
device type enumeration into the core API we can cut down the amount
of symbols private and/or visible only to the X11 backends; this way
when other backends start implementing multi-pointer support we can
share the same API across the code.

15 years agoPublic headers should not have #ifdefs relying on private defines
Damien Lespiau [Mon, 15 Jun 2009 13:15:27 +0000 (14:15 +0100)]
Public headers should not have #ifdefs relying on private defines

HAVE_COGL_GLES2 is defined in config.h through the configure script and
should not be used in public headers.

The patch makes configure generate the right define that can be used
later in the header.

15 years agoHide clutter_context_get_default()
Emmanuele Bassi [Wed, 17 Jun 2009 16:59:54 +0000 (17:59 +0100)]
Hide clutter_context_get_default()

The clutter_context_get_default() function is private, but shared
across Clutter. For this reason, it should be prefixed by '_' so
that the symbol is hidden from the shared object.

15 years agoRemove an unusued member from MainContext
Emmanuele Bassi [Wed, 17 Jun 2009 14:43:53 +0000 (15:43 +0100)]
Remove an unusued member from MainContext

The MainContext structure has a field for the master clock, but
clutter_master_clock_get_default() will return the same instance
from everywhere.

15 years ago[XInput] Get XInput working again.
Matthew Allum [Wed, 17 Jun 2009 14:09:16 +0000 (15:09 +0100)]
[XInput] Get XInput working again.

Check for distros shipping out of sync header vs libXi,
call in g_type_init() in test-devices, fix ifdef so
XInput events get correctly selected.

15 years agoDo not use the --pkd switch for g-ir-scanner
Emmanuele Bassi [Tue, 16 Jun 2009 17:08:52 +0000 (18:08 +0100)]
Do not use the --pkd switch for g-ir-scanner

Revert commit 8aacff0e0f38d2cdfae841f6a154baa793ea7739

15 years ago[docs] Update the backends hacking reference
Emmanuele Bassi [Tue, 16 Jun 2009 15:42:07 +0000 (16:42 +0100)]
[docs] Update the backends hacking reference

15 years ago[docs] Update the release notes
Emmanuele Bassi [Tue, 16 Jun 2009 15:41:46 +0000 (16:41 +0100)]
[docs] Update the release notes

15 years ago[docs] Update the HACKING file
Emmanuele Bassi [Tue, 16 Jun 2009 15:41:29 +0000 (16:41 +0100)]
[docs] Update the HACKING file

15 years ago[introspection] Add --pkg switch pointing at Clutter
Emmanuele Bassi [Tue, 16 Jun 2009 15:40:36 +0000 (16:40 +0100)]
[introspection] Add --pkg switch pointing at Clutter

Add a <package/> element pointing to Clutter's pkg-config
file name.

15 years ago[stage] Remove an assertion
Emmanuele Bassi [Tue, 16 Jun 2009 15:38:01 +0000 (16:38 +0100)]
[stage] Remove an assertion

We might get a size request on destruction, so it should be safe
to avoid an assertion failure because we don't have the stage
implementation anymore.

15 years agoAdd more ActorBox utility methods
Emmanuele Bassi [Tue, 16 Jun 2009 15:30:41 +0000 (16:30 +0100)]
Add more ActorBox utility methods

ActorBox should have methods for easily extracting the X and Y
coordinates of the origin, and the width and height separately.

These methods will make it easier for high-level language bindings
to manipulate ActorBox instances and avoid the Geometry type.

15 years ago[doap] Add branches for past releases
Emmanuele Bassi [Tue, 16 Jun 2009 12:48:11 +0000 (13:48 +0100)]
[doap] Add branches for past releases

15 years agoAdd accessors for the boxed types
Emmanuele Bassi [Tue, 16 Jun 2009 11:47:19 +0000 (12:47 +0100)]
Add accessors for the boxed types

The Vertex and ActorBox boxed types are meant to be used across
the API, but are fairly difficult to bind. Their memory management
is also unclear, and has to go through the indirection of
g_boxed_copy() and g_boxed_free().

15 years agoPlug minor memory leak in cogl_vertex_buffer_submit_real
Colin Walters [Tue, 16 Jun 2009 14:34:13 +0000 (10:34 -0400)]
Plug minor memory leak in cogl_vertex_buffer_submit_real

Free a temporary list.

15 years ago[tests] Beautify the bouncing actor
Emmanuele Bassi [Mon, 15 Jun 2009 14:08:59 +0000 (15:08 +0100)]
[tests] Beautify the bouncing actor

The test-easing interactive demo for the high-level animation API
is a bit "flat". Instead of using a Rectangle actor we should
probably be using something more "interesting" -- like a CairoTexture
with a gradient.

15 years ago[ClutterCairoTexture] Use the right component ordering when uploading data
Neil Roberts [Mon, 15 Jun 2009 11:41:13 +0000 (12:41 +0100)]
[ClutterCairoTexture] Use the right component ordering when uploading data

Cairo stores the image data in ARGB native byte order so we need to
upload this as BGRA on little endian architectures and ARGB on big
endian. ClutterTexture doesn't currently expose any flags to describe
ARGB format so until we can fix the Clutter API it now uses the Cogl
API directly.

15 years ago[cairo-texture] Clean up and whitespace fixes
Emmanuele Bassi [Mon, 15 Jun 2009 10:50:23 +0000 (11:50 +0100)]
[cairo-texture] Clean up and whitespace fixes

Simple clean up of the CairoTexture to remove unneeded checks,
redundant variables and white space.

15 years ago[animation] Rework animation chaining
Emmanuele Bassi [Mon, 15 Jun 2009 09:53:43 +0000 (10:53 +0100)]
[animation] Rework animation chaining

In order to chain up animations using clutter_actor_animate() and
friends you have to use an idle handler that guarantees that the
main loop spins at least once after the animation pointer has been
detached from the actor.

This has several drawbacks, first and foremost the fact that the
slice of the main loop for the idle handler might be starved by
other operations, like redrawing. This inevitably leads to tricks
with priorities and the like, contributing to the overall complexity.

Instead, we should guarantee that the animation instance created by
clutter_actor_animate() is valid for the ::completed signal until
it reaches its default handler; after that, the animation is detached
from the actor and destroyed. This means that it's possible to
create a new animation after the first is complete by simply using
g_signal_connect_after().

This unfortunately makes it impossible to keep a reference to the
animation pointer attached to the actor by using g_object_ref(); a
way to "fix" this would be to have a clutter_animation_attach()
and a clutter_animation_detach() pair of methods that allow attaching
any animation to an actor. This might overcomplicate what it is
the simple animation API, though, so it's currently not implemented
and left for future versions.

The test-easing interactive demo has been modified to show how
the animation queuing works by adding a command line switch that
recenters the animated actor once the first animation has ended.

15 years ago[animation] Allow swapped/after signal variants
Emmanuele Bassi [Mon, 15 Jun 2009 10:24:54 +0000 (11:24 +0100)]
[animation] Allow swapped/after signal variants

Continuing in the tradition on making clutter_actor_animate() the
next g_object_connect(), here's the addition of the signal-after::
and signal-swapped:: modifiers for the automagic signal connection
arguments.

Fixes bug:

  http://bugzilla.openedhand.com/show_bug.cgi?id=1646

15 years agoDisable single header inclusion for GLib
Emmanuele Bassi [Mon, 15 Jun 2009 09:48:56 +0000 (10:48 +0100)]
Disable single header inclusion for GLib

In order to be ready for the next major version of GLib we need to
disable single header inclusion by using the G_DISABLE_SINGLE_INCLUDES
define in the build process.

15 years agoFix redraw queueing in the presence of cloning
Owen W. Taylor [Thu, 11 Jun 2009 22:56:27 +0000 (18:56 -0400)]
Fix redraw queueing in the presence of cloning

We can't short-circuit the emission of ::queue-redraw for not-visible
actors, since ClutterClone uses that signal to know when things need
to be redrawn.

Calling clutter_actor_queue_redraw() out of clutter_actor_real_map() /
clutter_actor_real_unmap() was causing the flag state to get set
incorrectly from _clutter_actor_set_enable_paint_unmapped(), because
a paint queueing a redraw was not expected.

Moving queuing the redraw to clutter_actor_hide()/show() fixes this, and
also fixes a problem where showing a child of a cloned actor wouldn't
cause the clone to be repainted.

http://bugzilla.openedhand.com/show_bug.cgi?id=1484

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years ago[tests] Add unit for Clone behaviour
Emmanuele Bassi [Fri, 12 Jun 2009 02:46:38 +0000 (03:46 +0100)]
[tests] Add unit for Clone behaviour

A clone actor should not modify the state of its source, so we need
to check that it's not breaking any invariant.

15 years agoFix handling of not-visible texture pixmaps
Owen W. Taylor [Thu, 11 Jun 2009 22:46:44 +0000 (18:46 -0400)]
Fix handling of not-visible texture pixmaps

If we have an not-visible texture pixmap, we need to:

 - Still update it if it is realized, since it won't be
   updated when shown. And it might be also be cloned.

 - Queue a redraw if even if not visible, since it
   it might be cloned.

http://bugzilla.openedhand.com/show_bug.cgi?id=1647

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years ago[gitignore] ignore TAGS and new test
Damien Lespiau [Sun, 14 Jun 2009 00:16:30 +0000 (01:16 +0100)]
[gitignore] ignore TAGS and new test

* ignore files generated by make tags
* ignore the newly introduced premult test

15 years ago[test-cogl-tex-tile] Fix breakages from ClutterFixed removal and timelines
Neil Roberts [Fri, 12 Jun 2009 10:05:26 +0000 (11:05 +0100)]
[test-cogl-tex-tile] Fix breakages from ClutterFixed removal and timelines

The test has been broken since the change to use floats instead of
fixed point because it was passing degrees to sin and cos but they
expect radians.

It was further broken since the timeline changes because it was
directly using the parameter of the new-frame signal as a frame number
but it now represents the elapsed time.

15 years ago[_cogl_texture_bitmap_prepare] use bitmap format for FORMAT_ANY + no alpha
Robert Bragg [Mon, 8 Jun 2009 16:43:34 +0000 (17:43 +0100)]
[_cogl_texture_bitmap_prepare] use bitmap format for FORMAT_ANY + no alpha

My patch to choose a premultiplied format when the user gives
COGL_PIXEL_FORMAT_ANY for the internal_format broke the case where the data
in question doesn't have and alpha channel.

This was accidentally missed when merging the premultiplication branch
since I merged a local version of the branch that missed this commit.

15 years ago[tests] Fix the cogl_polygon() interactive test
Emmanuele Bassi [Thu, 11 Jun 2009 15:59:50 +0000 (16:59 +0100)]
[tests] Fix the cogl_polygon() interactive test

We need to premultiply the alpha, and we also need to change the
frame painting to use the frame-less Timeline.

15 years ago[tests] Fix the VBO interactive test
Emmanuele Bassi [Thu, 11 Jun 2009 15:53:52 +0000 (16:53 +0100)]
[tests] Fix the VBO interactive test

We need to fix the VBO premultiplication; we also do not need to
forcibly queue a redraw in an idle handler: the timeline and the
master clock will do that for us.

15 years ago[tests] Update test-actors (and clones)
Emmanuele Bassi [Thu, 11 Jun 2009 15:23:26 +0000 (16:23 +0100)]
[tests] Update test-actors (and clones)

The test-actors test (and its clones, test-actor-clone and
test-paint-wrapper) was written a long time ago for a different API
and has been tweaked to bits. We should probably have something a
little bit more complicated, but at least we should not use semantics
and coding patterns from Clutter 0.2, otherwise we won't be testing
anything except that Clutter 0.2 worked.

15 years ago[cogl] Don't allow calling cogl_set_source_texture with an INVALID_HANDLE
Robert Bragg [Mon, 8 Jun 2009 11:18:34 +0000 (12:18 +0100)]
[cogl] Don't allow calling cogl_set_source_texture with an INVALID_HANDLE

Although the underlying materials should allow layers with INVALID_HANDLES
it shouldn't be necissary to expose that via cogl_set_source_texture() and
it's easier to resolve a warning/crash here than odd artefacts/crashes later
in the pipeline.

15 years agoBug 1406 - Handling of premultiplication in clutter
Robert Bragg [Thu, 11 Jun 2009 14:16:27 +0000 (15:16 +0100)]
Bug 1406 - Handling of premultiplication in clutter

Merge branch 'premultiplication'

[cogl-texture docs] Improves the documentation of the internal_format args
[test-premult] Adds a unit test for texture upload premultiplication semantics
[fog] Document that fogging only works with opaque or unmultipled colors
[test-blend-strings] Explicitly request RGBA_888 tex format for test textures
[premultiplication] Be more conservative with what data gets premultiplied
[bitmap] Fixes _cogl_bitmap_fallback_unpremult
[cogl-bitmap] Fix minor copy and paste error in _cogl_bitmap_fallback_premult
Avoid unnecesary unpremultiplication when saving to local data
Don't unpremultiply Cairo data
Default to a blend function that expects premultiplied colors
Implement premultiplication for CoglBitmap
Use correct texture format for pixmap textures and FBO's
Add cogl_color_premultiply()

15 years ago[cogl-texture docs] Improves the documentation of the internal_format args
Robert Bragg [Thu, 11 Jun 2009 13:31:01 +0000 (14:31 +0100)]
[cogl-texture docs] Improves the documentation of the internal_format args

Clarifies that if you give COGL_PIXEL_FORMAT_ANY as the internal format for
cogl_texture_new_from_file or cogl_texture_new_from_data then Cogl will
choose a premultiplied internal format.

15 years ago[test-premult] Adds a unit test for texture upload premultiplication semantics
Robert Bragg [Sun, 7 Jun 2009 15:31:12 +0000 (16:31 +0100)]
[test-premult] Adds a unit test for texture upload premultiplication semantics

cogl_texture_new_from_data lets you specify a source format for the users given
data, and an internal format which the user wants the GPU to see. This unit
test verifies that the users data is premultiplied, un-premultiplied or
left alone for a number of (source format, internal format) pairs.

cogl_texture_set_region allows specifying a source format, and the internal
format is determined from the texture being updated. As above we test
a number of format pairs and check Cogl is converting data correctly.

The test verifies that if the user allows COGL_FORMAT_ANY for the
internal_format then by default Cogl will choose a premultipled format for
RGBA textures.

Note: Currently this only tests cogl_texture_new_from_data and
cogl_texture_set_region, we should also test cogl_texture_new_from_file,
cogl_texture_new_from_bitmap and cogl_texture_new_from_foreign.

15 years ago[fog] Document that fogging only works with opaque or unmultipled colors
Robert Bragg [Sun, 7 Jun 2009 10:54:05 +0000 (11:54 +0100)]
[fog] Document that fogging only works with opaque or unmultipled colors

The fixed function fogging provided by OpenGL only works with unmultiplied
colors (or if the color has an alpha of 1.0) so since we now premultiply
textures and colors by default a note to this affect has been added to
clutter_stage_set_fog and cogl_set_fog.

test-depth.c no longer uses clutter_stage_set_fog for this reason.

In the future when we can depend on fragment shaders we should also be
able to support fogging of premultiplied primitives.

15 years ago[test-blend-strings] Explicitly request RGBA_888 tex format for test textures
Robert Bragg [Sat, 6 Jun 2009 20:55:05 +0000 (21:55 +0100)]
[test-blend-strings] Explicitly request RGBA_888 tex format for test textures

This test assumes that the textures will be stored internally with exactly
the color given so that specific texture combining arithmetic can be
tested. Using COGL_PIXEL_FORMAT_ANY allows Cogl to internally premultiply
the textures, so we have to explicitly request an unmultiplied format.

15 years ago[premultiplication] Be more conservative with what data gets premultiplied
Robert Bragg [Sat, 6 Jun 2009 20:45:05 +0000 (21:45 +0100)]
[premultiplication] Be more conservative with what data gets premultiplied

We don't want to force texture data to be premultipled if the user
explicitly specifies a non premultiplied internal_format such as
COGL_PIXEL_FORMAT_RGBA_8888.  So now Cogl will only automatically
premultiply data when COGL_PIXEL_FORMAT_ANY is given for the
internal_format, or a premultiplied internal format such as
COGL_PIXEL_FORMAT_RGBA_8888_PRE is requested but non-premultiplied source
data is given.

This approach is consistent with OpenVG image formats which have already
influenced Cogl's pixel format semantics.

15 years ago[bitmap] Fixes _cogl_bitmap_fallback_unpremult
Robert Bragg [Sun, 7 Jun 2009 14:58:56 +0000 (15:58 +0100)]
[bitmap] Fixes _cogl_bitmap_fallback_unpremult

The _cogl_unpremult_alpha_{first,last} functions which
_cogl_bitmap_fallback_unpremult depends on were incorrectly casting each
of the byte components of a texel to a gulong and performing shifts as
if it were dealing with the whole texel.

It now just uses array indexing to access the byte components without
needing to cast or manually shift any bits around.

Even though we used to depend on unpremult whenever we used a
ClutterCairoTexture, clutter_cairo_texture_context_destroy had it's own
unpremult code which worked which is why this bug wouldn't have been noticed
before.

15 years ago[cogl-bitmap] Fix minor copy and paste error in _cogl_bitmap_fallback_premult
Robert Bragg [Sun, 7 Jun 2009 19:29:13 +0000 (20:29 +0100)]
[cogl-bitmap] Fix minor copy and paste error in _cogl_bitmap_fallback_premult

The returned bitmap format should include the COGL_PREMULT_BIT flag not
have it explicitly removed as for _cogl_bitmap_fallback_unpremult.

15 years agoAvoid unnecesary unpremultiplication when saving to local data
Owen W. Taylor [Sat, 9 May 2009 18:39:01 +0000 (14:39 -0400)]
Avoid unnecesary unpremultiplication when saving to local data

Now that we typically have premultiplied data stored in Cogl
textures, when fetching a texture into local data for temporary
storage, use a premultiplied format to avoid an unpremultiply/
premultiply roundtrip.

http://bugzilla.openedhand.com/show_bug.cgi?id=1406

Signed-off-by: Robert Bragg <robert@linux.intel.com>
15 years agoDon't unpremultiply Cairo data
Owen W. Taylor [Thu, 4 Jun 2009 17:45:43 +0000 (13:45 -0400)]
Don't unpremultiply Cairo data

Instead of unpremultiplying the Cairo data, pass it directly to Cogl
in premultiplied form; we now *prefer* premultiplied data.

http://bugzilla.openedhand.com/show_bug.cgi?id=1406

Signed-off-by: Robert Bragg <robert@linux.intel.com>
15 years agoDefault to a blend function that expects premultiplied colors
Owen W. Taylor [Sat, 9 May 2009 18:39:01 +0000 (14:39 -0400)]
Default to a blend function that expects premultiplied colors

Many operations, like mixing two textures together or alpha-blending
onto a destination with alpha, are done most logically if texture data
is in premultiplied form. We also have many sources of premultiplied
texture data, like X pixmaps, FBOs, cairo surfaces. Rather than trying
to work with two different types of texture data, simplify things by
always premultiplying texture data before uploading to GL.

Because the default blend function is changed to accommodate this,
uses of pure-color CoglMaterial need to be adapted to add
premultiplication.

gl/cogl-texture.c gles/cogl-texture.c: Always premultiply
  non-premultiplied texture data before uploading to GL.

cogl-material.c cogl-material.h: Switch the default blend functions
  to ONE, ONE_MINUS_SRC_ALPHA so they work correctly with premultiplied
  data.

cogl.c: Make cogl_set_source_color() premultiply the color.

cogl.h.in color-material.h: Add some documentation about
  premultiplication and its interaction with color values.

cogl-pango-render.c clutter-texture.c tests/interactive/test-cogl-offscreen.c:
  Use premultiplied colors.

http://bugzilla.openedhand.com/show_bug.cgi?id=1406

Signed-off-by: Robert Bragg <robert@linux.intel.com>
15 years agoImplement premultiplication for CoglBitmap
Owen W. Taylor [Sat, 9 May 2009 18:39:01 +0000 (14:39 -0400)]
Implement premultiplication for CoglBitmap

cogl-bitmap.c cogl-bitmap-pixbuf.c cogl-bitmap-fallback.c cogl-bitmap-private.h:
  Add _cogl_bitmap_can_premult(), _cogl_bitmap_premult() and implement
  a reasonably fast implementation in the "fallback" code.

http://bugzilla.openedhand.com/show_bug.cgi?id=1406

Signed-off-by: Robert Bragg <robert@linux.intel.com>
15 years agoUse correct texture format for pixmap textures and FBO's
Owen W. Taylor [Sat, 9 May 2009 18:39:01 +0000 (14:39 -0400)]
Use correct texture format for pixmap textures and FBO's

RGBA data in X pixmaps and in FBOs is already premultiplied; use
the right format when creating cogl textures.

http://bugzilla.openedhand.com/show_bug.cgi?id=1406

Signed-off-by: Robert Bragg <robert@linux.intel.com>
15 years agoAdd cogl_color_premultiply()
Owen W. Taylor [Sat, 9 May 2009 18:39:01 +0000 (14:39 -0400)]
Add cogl_color_premultiply()

Add a convenience function to convert an ARGB color from
non-premultiplied to premultiplied form.

http://bugzilla.openedhand.com/show_bug.cgi?id=1406

Signed-off-by: Robert Bragg <robert@linux.intel.com>
15 years ago[build] Fix distcheck for the json-glib internal copy
Emmanuele Bassi [Thu, 11 Jun 2009 12:24:34 +0000 (13:24 +0100)]
[build] Fix distcheck for the json-glib internal copy

Since commit d743aeaa updated the internal copy of JSON-GLib and
added a new private header file, we need to fix the build to avoid
a distcheck failure.

15 years agoBug 1637 - Master clock improvements
Emmanuele Bassi [Thu, 11 Jun 2009 12:01:34 +0000 (13:01 +0100)]
Bug 1637 - Master clock improvements

Merge branch 'master-clock-updates'

* master-clock-updates: (22 commits)
  Change the paint forcing on the Text cache text
  [timelines] Improve marker hit check and don't fudge the delta
  Revert "[timeline] Don't clamp the elapsed time when a looping tl reaches the end"
  [tests] Don't add a newline to the end of g_test_message calls
  [test-timeline] Add a marker at the beginning of the timeline
  [timeline] Don't clamp the elapsed time when a looping tl reaches the end
  [master-clock] Throttle if no redraw was performed
  [docs] Update Clutter's API reference
  Force a paint instead of calling clutter_redraw()
  Fix clutter_redraw() to match the redraw cycle
  Run the repaint functions inside the redraw cycle
  Remove useless manual timeline ticking
  Move elapsed-time calculations into ClutterTimeline
  Limit the frame rate when not syncing to VBLANK
  Decrease the main-loop priority of the frame cycle
  Avoid motion-compression in test-picking test
  Compress events as part of the frame cycle
  Remove stage update idle and do updates from the master clock
  Call g_main_context_wakeup() when we start running timelines
  Remove unused msecs_delta member
  ...

15 years ago[tests] Fix a segfault in the binding-pool test
Emmanuele Bassi [Thu, 11 Jun 2009 11:36:41 +0000 (12:36 +0100)]
[tests] Fix a segfault in the binding-pool test

The commit that moved all the properties to floats missed the
test-binding-pool interactive test.

15 years agoChange the paint forcing on the Text cache text
Emmanuele Bassi [Wed, 10 Jun 2009 17:10:32 +0000 (18:10 +0100)]
Change the paint forcing on the Text cache text

The changes in the master clock and the repaint cycle have been
changed, and broke the way the test for the Text actor cache of
PangoLayouts forces a redraw.

We have to call clutter_actor_paint() on the Stage embedding the
Text actor we want to test; this is kinda fugly because if the
Layout has changed it will end up causing a reallocation cycle
in the middle of the Text actor paint. Since it's a test case,
and since forcing redraws is a bit of a hack as well, we can
close both our eyes on that.

15 years ago[timelines] Improve marker hit check and don't fudge the delta
Neil Roberts [Thu, 11 Jun 2009 11:14:53 +0000 (12:14 +0100)]
[timelines] Improve marker hit check and don't fudge the delta

Markers added at the start of the timeline need to be special cased
because we effectively check whether the marker time is greater than
the old frame time or less than or equal to the new frame time but we
never actually emit a frame for the start of the timeline.

If the timeline is looping then it adjusts the position to interpolate
a wrapped around position. However we do not emit a new frame after
setting this position so we need to check for markers again there.

clutter_timeline_get_delta should return the actual wall clock time
between emissions of the new-frame signal - even if the elapsed time
has been fudged at the end of the timeline. To make this work it no
longer directly manipulates priv->msecs_delta but instead passes a
delta value to check_markers.

15 years agostage: set key focus actor to NULL before emitting focus-out
Tommi Komulainen [Fri, 24 Apr 2009 15:43:39 +0000 (16:43 +0100)]
stage: set key focus actor to NULL before emitting focus-out

Someone might hide the previously focused actor in the focus-out signal
handler and as key focus still appears to be on that actor we'd get
re-entrant call and get glib critical from g_object_weak_unref

This changes clutter_stage_get_key_focus() to return stage/NULL during
focus-out signal emission. It used to be the actor focus-out was being
emitted on.

Fixes bug:

  http://bugzilla.openedhand.com/show_bug.cgi?id=1547

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoRevert "[timeline] Don't clamp the elapsed time when a looping tl reaches the end"
Neil Roberts [Thu, 11 Jun 2009 09:55:52 +0000 (10:55 +0100)]
Revert "[timeline] Don't clamp the elapsed time when a looping tl reaches the end"

This reverts commit 9c5663d6717722d6d77162060f284355b5081174.

The patch was causing problems for applications that expect the
elapsed_time to be at either end of the timeline when the completed
signal is fired. For example test-behave swaps the direction of the
timeline in the completed handler but if the time has overflowed the
end then the timeline would only take a short time to get back the
beginning. This caused the animation to just vibrate around the
beginning.

15 years ago[tests] Don't add a newline to the end of g_test_message calls
Neil Roberts [Thu, 11 Jun 2009 10:38:49 +0000 (11:38 +0100)]
[tests] Don't add a newline to the end of g_test_message calls

Two of the timeline tests were calling g_test_message and adding a \n
so the output looked odd.

15 years ago[test-timeline] Add a marker at the beginning of the timeline
Neil Roberts [Thu, 11 Jun 2009 10:23:45 +0000 (11:23 +0100)]
[test-timeline] Add a marker at the beginning of the timeline

The beginning of the timeline needs special treatment to detect a
marker so it should have one in the conformance test.

15 years ago[timeline] Don't clamp the elapsed time when a looping tl reaches the end
Neil Roberts [Wed, 10 Jun 2009 16:41:16 +0000 (17:41 +0100)]
[timeline] Don't clamp the elapsed time when a looping tl reaches the end

The new-frame signal of a timeline was previously guaranteed to be
emitted with the elapsed_time set to the end before it emits the
completed signal. This doesn't necessarily make sense for looping
timelines because it would cause the elapsed time to be clamped to a
slightly off value whenever the timeline restarts. This patch makes it
perform the wrap around before emitting the new-frame signal so that
the elapsed time always corresponds to the time elapsed since the
timeline was started.

Additionally it no longer fudges the msecs_delta property to make the
marker check work so clutter_timeline_get_delta will always return the
wall clock time since the last frame.

15 years ago[text] Do not leak the effective attributes
Emmanuele Bassi [Wed, 10 Jun 2009 15:23:35 +0000 (16:23 +0100)]
[text] Do not leak the effective attributes

Thanks to Iain Holmes for catching the leak.

15 years ago[master-clock] Throttle if no redraw was performed
Neil Roberts [Wed, 10 Jun 2009 14:50:27 +0000 (15:50 +0100)]
[master-clock] Throttle if no redraw was performed

A flag in the master clock is now set whenever the dispatch caused an
actual redraw of a stage. If this flag is not set during the prepare
and check functions then it will resort to limiting the redraw
attempts to the default frame rate as if vblank syncing was
disabled. Otherwise if a timeline is running that does not cause the
scene to change then it would busy-wait with 100% CPU until the next
frame.

This fix was suggested by Owen Taylor in:

  http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years ago[docs] Annotate fixed sized arrays
Emmanuele Bassi [Wed, 10 Jun 2009 13:54:42 +0000 (14:54 +0100)]
[docs] Annotate fixed sized arrays

15 years ago[docs] Update Clutter's API reference
Emmanuele Bassi [Wed, 10 Jun 2009 13:54:19 +0000 (14:54 +0100)]
[docs] Update Clutter's API reference

15 years agoForce a paint instead of calling clutter_redraw()
Emmanuele Bassi [Wed, 10 Jun 2009 13:52:53 +0000 (14:52 +0100)]
Force a paint instead of calling clutter_redraw()

We do not need the whole redraw machinery inside
clutter_stage_read_pixels(): instead, we want Clutter to drop everything,
paint and call glReadPixels() with the current buffer.

15 years ago[build] Use top_srcdir instead of relative paths
Emmanuele Bassi [Wed, 10 Jun 2009 13:24:33 +0000 (14:24 +0100)]
[build] Use top_srcdir instead of relative paths

15 years ago[l10n] Add LINGUAS
Emmanuele Bassi [Wed, 10 Jun 2009 13:23:45 +0000 (14:23 +0100)]
[l10n] Add LINGUAS

Use the LINGUAS file to generate the contents of the ALL_LINGUAS
variable.

15 years ago[docs] Various gtk-doc fixes for COGL
Emmanuele Bassi [Wed, 10 Jun 2009 11:50:45 +0000 (12:50 +0100)]
[docs] Various gtk-doc fixes for COGL

Try to keep the gtk-doc errors down to a minimum.

15 years agoFix clutter_redraw() to match the redraw cycle
Emmanuele Bassi [Tue, 9 Jun 2009 15:29:29 +0000 (16:29 +0100)]
Fix clutter_redraw() to match the redraw cycle

The clutter_redraw() function is used by embedding toolkits to
force a redraw on a stage. Since everything is performed by
toggling a flag inside the Stage itself and then letting the
master clock advance, we need a ClutterStage method to ensure
that we start the master clock and redraw.

15 years agoRun the repaint functions inside the redraw cycle
Emmanuele Bassi [Tue, 9 Jun 2009 15:28:25 +0000 (16:28 +0100)]
Run the repaint functions inside the redraw cycle

Now that every redraw is performed within the master clock we
need to run the repaint functions inside it.

15 years agoRemove useless manual timeline ticking
Owen W. Taylor [Mon, 8 Jun 2009 17:13:18 +0000 (13:13 -0400)]
Remove useless manual timeline ticking

The master clock now works fine whether or not there are any stages,
so in the timeline conformance tests don't need to set up their
own times.

Set CLUTTER_VBLANK=none for the conformance tests, which in addition
to removing an test-environment dependency, will result in the ticking
for timeline tests being throttled to the default frame rate.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoMove elapsed-time calculations into ClutterTimeline
Owen W. Taylor [Mon, 8 Jun 2009 17:00:09 +0000 (13:00 -0400)]
Move elapsed-time calculations into ClutterTimeline

Instead of calculating a delta in the master clock, and passing that
into each timeline, make each timeline individually responsible for
remembering the last time and computing the delta.

This:

 - Fixes a problem where we could spin infinitely processing
   timeline-only frames with < 1msec differences.
 - Makes timelines consistently start timing on the first frame;
   instead of doing different things for the first started timeline
   and other timelines.
 - Improves accuracy of elapsed time computations by avoiding
   accumulating microsecond => millisecond truncation errors.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoLimit the frame rate when not syncing to VBLANK
Owen W. Taylor [Sun, 7 Jun 2009 02:48:15 +0000 (22:48 -0400)]
Limit the frame rate when not syncing to VBLANK

clutter-master-clock.c clutter-master-clock.h: When the
  SYNC_TO_VBLANK feature is not available, wait for 1/frame_rate
  seconds since the start of the last frame before drawing the next
  frame. Add _clutter_master_clock_start_running() to abstract
  the usage of g_main_context_wakeup()

clutter-stage.c: Add _clutter_master_clock_start_running()

clutter-main.c: Update docs for clutter_set_default_frame_rate()
  clutter_get_default_frame_rate() to no longer talk about timeline
  frame rates.

test-text-perf.c test-text.c: Set a frame rate of 1000fps so that
  frame-rate limiting doesn't affect the result.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoDecrease the main-loop priority of the frame cycle
Owen W. Taylor [Sat, 6 Jun 2009 23:31:32 +0000 (19:31 -0400)]
Decrease the main-loop priority of the frame cycle

Change CLUTTER_PRIORITY_REDRAW to be lower than the GTK+ resize
  and relayout priorities to avoid starving GTK+ when run in the
  same process as clutter.
Remove the unused CLUTTER_PRIORITY_TIMELINE

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoAvoid motion-compression in test-picking test
Owen W. Taylor [Sun, 7 Jun 2009 02:55:34 +0000 (22:55 -0400)]
Avoid motion-compression in test-picking test

Using clutter_stage_get_actor_at_pos() rather than synthesizing
events; the synthesized events were being compressed, so we were
only tesitng one pick per frame.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoCompress events as part of the frame cycle
Owen W. Taylor [Sat, 6 Jun 2009 23:10:41 +0000 (19:10 -0400)]
Compress events as part of the frame cycle

Instead of trying to guess about which motion events are
extraneous, queue up all events until we process a frame.
This allows us to look ahead and reliably compress consecutive
sequence of motion events.

clutter-main.c: Feed received events to the stage for queueing.
  Remove old compression code. Remove clutter_get_motion_events_frequency()
  clutter_set_motion_events_frequency()
clutter-stage.c: Keep a queue of pending events.
clutter-master-clock.c: Add processng of queued events to the
  clock source dispatch function.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoRemove stage update idle and do updates from the master clock
Owen W. Taylor [Sat, 6 Jun 2009 22:22:51 +0000 (18:22 -0400)]
Remove stage update idle and do updates from the master clock

When a redraw is queued on a stage, simply set a flag; then in
the check/prepare functions of the master clock source, check
for stages that need redrawing.

This avoids the complexity of having multiple competing sources
at the same priority and makes the update ordering more reliable and
understandable.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoCall g_main_context_wakeup() when we start running timelines
Owen W. Taylor [Sat, 6 Jun 2009 22:12:26 +0000 (18:12 -0400)]
Call g_main_context_wakeup() when we start running timelines

If a timeline is added from a different thread, we need to
call g_main_context_wakeup() to wake the main thread up to
start updating the timeline.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoRemove unused msecs_delta member
Owen W. Taylor [Sat, 6 Jun 2009 22:11:19 +0000 (18:11 -0400)]
Remove unused msecs_delta member

msecs_delta member of ClutterMasterClock was set but not used.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoSimplify timeout list handling for the master clock
Owen W. Taylor [Sat, 6 Jun 2009 21:44:40 +0000 (17:44 -0400)]
Simplify timeout list handling for the master clock

Instead of keeping a list of all timelines, and connecting to
signals and weak notifies, simply keep a list of running timelines;
this greatly simplifies both the book-keeping, and also determining
if there are any running timelines.

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years agoOnly advance the master clock before drawing a frame
Owen W. Taylor [Sat, 6 Jun 2009 21:54:05 +0000 (17:54 -0400)]
Only advance the master clock before drawing a frame

Remove code to advance the master clock after drawing a frame; if
there are any running timelines the master clock will do another
frame by itself, and the clock will be advanced before running
that frame.

With this change, there is no point in queueing an extra frame
redraw after completing a timeline, since we are always advancing
the timeline *before* redrawing, so remove that code as well.
(This does mean that calling clutter_timeline_stop() won't implicitly
cause the stage to be redrawn; this doesn't seem like something
an app should rely on in any case.)

http://bugzilla.openedhand.com/show_bug.cgi?id=1637

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
15 years ago[docs] Various gtk-docs fixes
Emmanuele Bassi [Tue, 9 Jun 2009 13:47:36 +0000 (14:47 +0100)]
[docs] Various gtk-docs fixes

15 years ago[stage] Rename fullscreen methods
Emmanuele Bassi [Tue, 9 Jun 2009 13:05:03 +0000 (14:05 +0100)]
[stage] Rename fullscreen methods

The clutter_stage_fullscreen() and clutter_stage_unfullscreen() are
a GDK-ism. The underlying implementation is already using an accessor
with a boolean parameter.

This should take the amount of collisions between properties, methods
and signals to zero.

15 years ago[stage] Rename :fullscreen to :fullscreen-set
Emmanuele Bassi [Tue, 9 Jun 2009 12:48:03 +0000 (13:48 +0100)]
[stage] Rename :fullscreen to :fullscreen-set

The :fullscreen property is very much confusing as it is implemented.
It can be written to a value, but the whole process might fail. If we
set:

  g_object_set (stage, "fullscreen", TRUE, NULL);

and the fullscreen process fails or it is not implemented, the value
will be reset to FALSE (if we're lucky) or left TRUE (most of the
times).

The writability is just a shorthand for invoking clutter_stage_fullscreen()
or clutter_stage_unfullscreen() depending on a boolean value without
using an if.

The :fullscreen property also greatly confuses high level languages,
since the same symbol is used:

  - for a method name (Clutter.Stage.fullscreen())
  - for a property name (Clutter.Stage.fullscreen)
  - for a signal (Clutter.Stage::fullscreen)

For these reasons, the :fullscreen should be renamed to :fullscreen-set
and be read-only. Implementations of the Stage should only emit the
StageState event to change from normal to fullscreen, and the Stage
will automatically update the value of the property and emit a notify
signal for it.

15 years ago[build] Update the experimental features checks
Emmanuele Bassi [Tue, 9 Jun 2009 11:43:57 +0000 (12:43 +0100)]
[build] Update the experimental features checks

Instead of blacklisting experimental features at the end we can
explicitly mark backends and image backends near their checks and
provide a summary at the end.

15 years ago[json] Update the internal JSON-GLib copy
Emmanuele Bassi [Tue, 9 Jun 2009 11:42:19 +0000 (12:42 +0100)]
[json] Update the internal JSON-GLib copy

There have been changes in JSON-GLib upstream to clean up the
data structures, and facilitate introspection.

We still not use the updated JsonParser with the (private) JsonScanner
code, since it's a fork of GLib's GScanner.

15 years ago[introspection] Add --c-include to g-ir-scanner
Emmanuele Bassi [Tue, 9 Jun 2009 11:40:06 +0000 (12:40 +0100)]
[introspection] Add --c-include to g-ir-scanner

Since Clutter has a single-include header policy we need to put
the header to be included inside the GIR file.