profile/ivi/clutter.git
14 years agoglx: handle spurious GLX_BufferSwapComplete events gracefully
Robert Bragg [Fri, 16 Apr 2010 13:38:52 +0000 (14:38 +0100)]
glx: handle spurious GLX_BufferSwapComplete events gracefully

Instead of simply aborting we now print out a warning, when a spurious
GLX_BufferSwapComplete event is handled since it seems that people are
coming across the problem (perhaps due to a buggy driver) and making
apps crash in this situation is a bit extreme.

14 years agoclutter-cairo-texture: Use the new cogl_pixel_buffer API
Neil Roberts [Wed, 3 Feb 2010 20:58:32 +0000 (20:58 +0000)]
clutter-cairo-texture: Use the new cogl_pixel_buffer API

ClutterCairoTexture now stores the surface image data in a Cogl pixel
buffer object. When clutter_cairo_texture_create is called the buffer
is mapped and a new Cairo surface is created to render directly to the
PBO. When the surface is destroyed the buffer is unmapped and a Cogl
texture is recreated from the buffer. This should enable slightly
faster uploads when using Cairo because it avoids having to copy the
surface data to the texture.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agotext: Increase the size of the Layout cache
Emmanuele Bassi [Fri, 16 Apr 2010 10:11:50 +0000 (11:11 +0100)]
text: Increase the size of the Layout cache

Currently, each ClutterText caches 3 Pango layouts:

  » one for the preferred, unbounded width
  » one for the preferred height for a given width
  » one for the allocated size

Some layout managers do a double pass that could flush the whole cache
before it has a chance of actually storing relevant data, resulting in
a continuous series of misses.

We can try to counteract this by doubling the size of the cache, from
three slots to six. More than six would be pointless, as well as too
memory consuming; but we might get down to a number between 3 and 6 at
any later point.

14 years agotext: Check generated size of layouts in cache
Rob Bradford [Tue, 13 Apr 2010 23:12:02 +0000 (00:12 +0100)]
text: Check generated size of layouts in cache

By comparing the requested size against the computed sized for existing
Pango layouts we can avoid creating layouts where the requested size
matches that of a previously computed one.

In particular this optimisation means that when working with a fixed
positioning based layout (with no constraints on the size of the
ClutterText) the same PangoLayout can be used to calculate the preferred
width, height and also the layout used for the actual painting.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agocogl: Implement retained clip stacks
Neil Roberts [Thu, 15 Apr 2010 09:58:28 +0000 (10:58 +0100)]
cogl: Implement retained clip stacks

This adds three new internal API functions which can be used to retain
the clip stack state and restore it later:

 _cogl_get_clip_stack
 _cogl_set_clip_stack
 _cogl_clip_stack_copy

The functions are currently internal and not yet used but we may want
to make them public in future to replace the cogl_clip_stack_save()
and cogl_clip_stack_restore() APIs.

The get function just returns the handle to the clip stack at the top
of the stack of stacks and the set function just replaces it.

The copy function makes a cheap copy of an existing stack by taking a
reference to the top stack entry. This ends up working like a deep
copy because there is no way to modify entries of a stack but it
doesn't actually copy the data.

14 years agocogl-clip-stack: Convert to be a CoglHandle
Neil Roberts [Thu, 15 Apr 2010 09:27:43 +0000 (10:27 +0100)]
cogl-clip-stack: Convert to be a CoglHandle

CoglClipStacks can now be reference counted via a CoglHandle. The
ClipClipState now stores handles in the list rather than CoglClipStack
pointers.

14 years agoSeparate out CoglClipStackState from cogl-clip-stack.c
Neil Roberts [Wed, 14 Apr 2010 18:41:08 +0000 (19:41 +0100)]
Separate out CoglClipStackState from cogl-clip-stack.c

CoglClipStackState has now been renamed to CoglClipState and is moved
to a separate file. CoglClipStack now just maintains a stack and
doesn't worry about the rest of the state. CoglClipStack sill contains
the code to flush the stack to GL.

14 years agocogl-slip-stack: Store clip window rect entries in Cogl coordinates
Neil Roberts [Wed, 14 Apr 2010 17:47:25 +0000 (18:47 +0100)]
cogl-slip-stack: Store clip window rect entries in Cogl coordinates

When glScissor is called it needs to pass coordinates in GL's
coordinate space where the origin is the bottom left. Previously this
conversion was done before storing the window rect in the clip
stack. However this might make it more difficult if we want to be able
to grab a handle to a clip stack and use it in different circumstances
later. This patch moves the coordinate conversion to inside the clip
state flushing code.

14 years agocogl-clip-stack: Store window rect entries as ints not floats
Neil Roberts [Wed, 14 Apr 2010 14:42:57 +0000 (15:42 +0100)]
cogl-clip-stack: Store window rect entries as ints not floats

The window rectangles are passed in as integers so there is no point
in converting them to floats when storing a stack entry for them.

14 years agocogl-clip-stack: Use reference counted stack entries
Neil Roberts [Wed, 14 Apr 2010 12:17:26 +0000 (13:17 +0100)]
cogl-clip-stack: Use reference counted stack entries

The stack is now stored as a list of reference counted entries.
Instead of using a GList, each entry now contains a link with a
reference to its parent. The idea is that this would allow copying
stacks with a shared ancestry.

Previously the code flushed the state by finding the bottom of the
stack and then applying each entry by walking back up to the top. This
is slightly harder to do now because the list is no longer
doubly-linked. However I don't think it matters which order the
entries are applied so I've just changed it to apply them in reverse
order.

There was also a restriction that if ever the stencil buffer is used
then we could no longer use clip planes for any subsequent entries. I
don't think this makes sense because it should always work as long as
it doesn't attempt to use the clip planes more than once. I've
therefore removed the restriction.

14 years agodocs: Clean up ClutterActor's long description
Emmanuele Bassi [Wed, 14 Apr 2010 22:34:38 +0000 (23:34 +0100)]
docs: Clean up ClutterActor's long description

The Actor's long description is a bit cluttered; it contains a section
on the actor's box semantics, on the transformation order and on the
event handling.

We should use <refsect2> tags to divide the Actor's description into
logically separated sections.

We should also add a section about the custom Scriptable properties that
ClutterActor defines, and the special handling of unit-based properties.

14 years agoAdd test-cogl-wrap-mode to the ignore list
Emmanuele Bassi [Tue, 13 Apr 2010 23:52:23 +0000 (00:52 +0100)]
Add test-cogl-wrap-mode to the ignore list

14 years agocogl-atlas-texture: Fix a memory leak
Neil Roberts [Tue, 13 Apr 2010 16:26:03 +0000 (17:26 +0100)]
cogl-atlas-texture: Fix a memory leak

The CoglAtlasTexture struct was not being freed in
_cogl_atlas_texture_free so there would be a small leak whenever a
texture was destroyed.

Thanks to Robert Bragg for spotting this.

14 years agocogl-material: Use CLAMP_TO_EDGE for WRAP_AUTOMATIC unless overriden
Neil Roberts [Thu, 1 Apr 2010 17:35:32 +0000 (18:35 +0100)]
cogl-material: Use CLAMP_TO_EDGE for WRAP_AUTOMATIC unless overriden

CoglMaterial now sets GL_CLAMP_TO_EDGE if WRAP_MODE_AUTOMATIC is used
unless it is overridden when the material is flushed. The primitives
are still expected to expose repeat semantics so no user visible
changes are made. The idea is that drawing non-repeated textures is
the most common case so if we make clamp_to_ege the default then we
will reduce the number of times we have to override the
material. Avoiding overrides will become important if the overriding
mechanism is replaced with one where the primitive is expected to copy
the material and change that instead.

14 years agotests: Add a conformance test for the wrap modes of a cogl material
Neil Roberts [Wed, 31 Mar 2010 17:54:34 +0000 (18:54 +0100)]
tests: Add a conformance test for the wrap modes of a cogl material

This renders a texture using different combinations of wrap modes for
the s and t coordinates and then verifies that the expected wrapping
is acheived. The texture is drawn using rectangles, polygons and
vbos. There is also code to test a rectangle using an atlased texture
(which should test the manual repeating) however the validation for
this is currently disabled because it doesn't work.

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

14 years agocogl-material: Add support for setting the wrap mode for a layer
Neil Roberts [Thu, 1 Apr 2010 10:31:33 +0000 (11:31 +0100)]
cogl-material: Add support for setting the wrap mode for a layer

Previously, Cogl's texture coordinate system was effectively always
GL_REPEAT so that if an application specifies coordinates outside the
range 0→1 it would get repeated copies of the texture. It would
however change the mode to GL_CLAMP_TO_EDGE if all of the coordinates
are in the range 0→1 so that in the common case that the whole texture
is being drawn with linear filtering it will not blend in edge pixels
from the opposite sides.

This patch adds the option for applications to change the wrap mode
per layer. There are now three wrap modes: 'repeat', 'clamp-to-edge'
and 'automatic'. The automatic map mode is the default and it
implements the previous behaviour. The wrap mode can be changed for
the s and t coordinates independently. I've tried to make the
internals support setting the r coordinate but as we don't support 3D
textures yet I haven't exposed any public API for it.

The texture backends still have a set_wrap_mode virtual but this value
is intended to be transitory and it will be changed whenever the
material is flushed (although the backends are expected to cache it so
that it won't use too many GL calls). In my understanding this value
was always meant to be transitory and all primitives were meant to set
the value before drawing. However there were comments suggesting that
this is not the expected behaviour. In particular the vertex buffer
drawing code never set a wrap mode so it would end up with whatever
the texture was previously used for. These issues are now fixed
because the material will always set the wrap modes.

There is code to manually implement clamp-to-edge for textures that
can't be hardware repeated. However this doesn't fully work because it
relies on being able to draw the stretched parts using quads with the
same values for tx1 and tx2. The texture iteration code doesn't
support this so it breaks. This is a separate bug and it isn't
trivially solved.

When flushing a material there are now extra options to set wrap mode
overrides. The overrides are an array of values for each layer that
specifies an override for the s, t or r coordinates. The primitives
use this to implement the automatic wrap mode. cogl_polygon also uses
it to set GL_CLAMP_TO_BORDER mode for its trick to render sliced
textures. Although this code has been added it looks like the sliced
trick has been broken for a while and I haven't attempted to fix it
here.

I've added a constant to represent the maximum number of layers that a
material supports so that I can size the overrides array. I've set it
to 32 because as far as I can tell we have that limit imposed anyway
because the other flush options use a guint32 to store a flag about
each layer. The overrides array ends up adding 32 bytes to each flush
options struct which may be a concern.

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

14 years agoSplit the wrap mode of _cogl_texture_set_wrap_mode into three
Neil Roberts [Thu, 25 Mar 2010 17:29:22 +0000 (17:29 +0000)]
Split the wrap mode of _cogl_texture_set_wrap_mode into three

GL supports setting different wrap modes for the s, t and r
coordinates so we should design the backend interface to support that
also. The r coordinate is not currently used by any of the backends
but we might as well have it to make life easier if we ever add
support for 3D textures.

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

14 years agocogl: Make private members really hard to accidentally use
Neil Roberts [Thu, 1 Apr 2010 19:06:30 +0000 (20:06 +0100)]
cogl: Make private members really hard to accidentally use

CoglColor and CoglMatrix have public declarations with private members
so that we are free to change the implementation but the structures
could still be allocated on the stack in applications. However it's
quite easy not to realise the members are private and then access them
directly. This patch wraps the members in a macro which redefines the
symbol name when including the header outside of the clutter source.

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

14 years agoCoglMatrix: Don't make the matrix fields private
Neil Roberts [Mon, 12 Apr 2010 14:16:58 +0000 (15:16 +0100)]
CoglMatrix: Don't make the matrix fields private

The xx, yx, zx etc fields are meant to be read-only but they were
marked as private with the gtk-doc annotation. This patch moves the
private marker so that the 16 float member fields are public but the
type, inverted matrix, flags and padding are not.

14 years agoFix indentation in CoglMatrix
Neil Roberts [Mon, 12 Apr 2010 11:06:03 +0000 (12:06 +0100)]
Fix indentation in CoglMatrix

The members of CoglMatrix were indented by 4 characters instead of 2.

14 years agoactor: Flag the color argument of the ::pick signal as being constant
Damien Lespiau [Sat, 10 Apr 2010 16:02:42 +0000 (17:02 +0100)]
actor: Flag the color argument of the ::pick signal as being constant

When emitting signals, one can mark arguments as being "static", ie an
indication this argument will not change during the signal emission.
This allows the signal marshalling code to create static GValues, in
this case not to copy the Color.

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

14 years agoactor: Do not use G_UNLIKELY in paint()
Emmanuele Bassi [Fri, 9 Apr 2010 17:24:09 +0000 (18:24 +0100)]
actor: Do not use G_UNLIKELY in paint()

We decide whether the paint() should be a real paint or a paint in pick
mode depending on the global pick_mode value. Using G_UNLIKELY() on an
operation that most likely is going to be executed once every frame is
going to blow a lot of cache lines and frak with the CPU branch
prediction. Not good.

14 years agotests: Fix test-script.json
Emmanuele Bassi [Fri, 9 Apr 2010 17:22:50 +0000 (18:22 +0100)]
tests: Fix test-script.json

A trailing comma is breaking the validity of test-script.json

14 years agowin32: Use GCLP_* instead of GCL_* when calling GetClassLongPtr
Fridrich Strba [Fri, 9 Apr 2010 14:43:42 +0000 (15:43 +0100)]
win32: Use GCLP_* instead of GCL_* when calling GetClassLongPtr

(commit message by Neil)

GetClassLongPtr expects a different constant when retrieving handles
or pointers. This fixes problems using Win64.

14 years agoAdd tests/conform/test-cogl-path to .gitignore
Neil Roberts [Fri, 9 Apr 2010 13:10:11 +0000 (14:10 +0100)]
Add tests/conform/test-cogl-path to .gitignore

14 years agoAdd a test case for cogl_path
Neil Roberts [Thu, 8 Apr 2010 16:18:40 +0000 (17:18 +0100)]
Add a test case for cogl_path

This tests various paths drawing rectangles and verifies that the
expected pixels are filled in. Some of the paths are drawn by copying
an existing path and modifying it which should test the copy-on-write
code.

14 years agocogl: Support retained paths
Neil Roberts [Thu, 8 Apr 2010 16:43:27 +0000 (17:43 +0100)]
cogl: Support retained paths

This adds three new API calls:

  CoglHandle cogl_path_get()
  void cogl_path_set(CoglHandle path)
  CoglHandle cogl_path_copy(CoglHandle path)

All of the fields relating to the path have been moved from the Cogl
context to a new CoglPath handle type. The cogl context now just
contains a CoglPath handle. All of the existing path commands
manipulate the data in the current path handle. cogl_path_new now just
creates a new path handle and unrefs the old one.

The path handle can be stored for later with cogl_path_get. The path
can then be copied with cogl_path_copy. Internally it implements
copy-on-write semantics with an extra optimisation that it will only
copy the data if the new path is modified, but not if the original
path is modified. It can do this because the only way to modify a path
is by appending to it so the copied path is able to store its own path
length and only render the nodes up to that length. For this to work
the copied path also needs to keep its own copies of the path extents
because the parent path may change these by adding nodes.

The clip stack now uses the cogl_path_copy mechanism to store paths in
the stack instead of directly copying the data. This should save some
memory and processing time.

14 years agocogl: renames cogl_multiply_matrix to cogl_transform
Robert Bragg [Thu, 8 Apr 2010 13:37:01 +0000 (14:37 +0100)]
cogl: renames cogl_multiply_matrix to cogl_transform

Although cogl_multiply_matrix was consistent with OpenGL, after further
consideration it was agreed that cogl_transform is a better name. Given
that it's in the global cogl_ namespace cogl_transform seems more self
documenting.

14 years agodocs: This improves the documentation for cogl_push_framebuffer
Robert Bragg [Thu, 1 Apr 2010 12:15:12 +0000 (13:15 +0100)]
docs: This improves the documentation for cogl_push_framebuffer

This adds an example of how to setup a Clutter style 2D coordinate space
and clarifies what state is owned by a framebuffer. (projection,
modelview, viewport and clip stack)

When we expose more cogl_framebuffer API this example will hopefully be
migrated into a more extensive introduction to using framebuffers.

14 years agotest-cogl-offscreen: Setup a clutter style modelview/projection
Robert Bragg [Wed, 3 Mar 2010 16:37:59 +0000 (16:37 +0000)]
test-cogl-offscreen: Setup a clutter style modelview/projection

This updates test-cogl-offscreen to give an example of setting up a
CoglFramebuffer with a Clutter style 2D coordinate system with (0,0) top
left and (framebuffer_width, framebuffer_height) bottom right.

14 years agocogl: move cogl_set_source* funcs into cogl.c
Robert Bragg [Fri, 19 Mar 2010 09:55:30 +0000 (09:55 +0000)]
cogl: move cogl_set_source* funcs into cogl.c

Previously cogl_set_source and cogl_set_source_texture were in
cogl-material.c and the cogl_set_source_color* funcs were in
cogl-color.c. Originally this was because cogl.c was duplicated between
the GL and GLES backends and we didn't want to add to the amount of
duplicated code, but these files have since been consolidated into one
cogl.c.

14 years agocogl: adds convenience cogl_multiply_matrix function
Robert Bragg [Fri, 19 Mar 2010 09:30:59 +0000 (09:30 +0000)]
cogl: adds convenience cogl_multiply_matrix function

Quite often it's desirable to be able to multiply the current modelview
matrix by an arbitrary matrix. Currently though you have to first
explicitly call cogl_get_modelview_matrix to get the current modelview
into a temporary variable, then you need to multiply it with your matrix
using cogl_matrix_multiply and finally use cogl_set_modelview_matrix to
make the result be the new modelview. This new convenience function lets
more efficiently skip the first get and last set steps.

14 years agocogl: rename cogl_enable to _cogl_enable
Robert Bragg [Fri, 19 Mar 2010 09:16:08 +0000 (09:16 +0000)]
cogl: rename cogl_enable to _cogl_enable

Every now and then someone sees the cogl_enable API and gets confused,
thinking its public API so this renames the symbol to be clear that it's
is an internal only API.

14 years agotest-cogl-tex-polygon: Actually use the material it creates
Neil Roberts [Wed, 31 Mar 2010 18:03:02 +0000 (19:03 +0100)]
test-cogl-tex-polygon: Actually use the material it creates

test-cogl-tex-polygon creates a separate material so that it can set
the texture filters. However in the paint functions that use
cogl_polygon it was calling cogl_set_source_texture which replaces the
material and ends up always using GL_LINEAR. This patch makes the
paint functions assume the correct source is set up instead of trying
to select a new source.

14 years agoAdd jhbuild moduleset
Emmanuele Bassi [Wed, 31 Mar 2010 14:14:09 +0000 (15:14 +0100)]
Add jhbuild moduleset

Clutter should provide a moduleset for JHBuild, to allow building the
whole Clutter stack within a separate prefix.

14 years agox11: Use has_allocation() in TfP actor
Owen W. Taylor [Fri, 26 Mar 2010 00:41:46 +0000 (00:41 +0000)]
x11: Use has_allocation() in TfP actor

ClutterX11TexturePixmap calls get_allocation_box() when queueing a
clipped redraw. If the allocation is not valid, and if we queue a
lot of redraws in response to a series of damage events, the net
result is that we spend all our time in a re-layout. We can
short-circuit this by checking if the actor has a valid allocation, and
if not, just queue a redraw - the actor will be allocated by the time it
is going to be painted.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agoactor: Add has_allocation() method
Owen W. Taylor [Fri, 26 Mar 2010 00:35:36 +0000 (00:35 +0000)]
actor: Add has_allocation() method

Add clutter_actor_has_allocation(), a method meant to be used when
deciding whether to call clutter_actor_get_allocation_box() or any
of its wrappers.

The get_allocation_box() method will, in case the allocation is invalid,
perform a costly re-allocation cycle to ensure that the returned box
is valid. The has_allocation() method is meant to be used if we have an
actor calling get_allocation_box() from outside the place where the
allocation is always guaranteed to be valid.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agodocs: Add 1.4 index to the API references
Emmanuele Bassi [Thu, 25 Mar 2010 09:45:59 +0000 (09:45 +0000)]
docs: Add 1.4 index to the API references

Now that master has branched for the 1.3 development cycle.

14 years agoAdd "homogeneous" mode to ClutterBoxLayout.
José Dapena Paz [Wed, 17 Mar 2010 15:16:09 +0000 (16:16 +0100)]
Add "homogeneous" mode to ClutterBoxLayout.

Added new "homogeneous" mode to ClutterBoxLayout, that makes layout children
get all the same size.

This is heavily inspired in the "homogeneous" attribute available in GtkBox,
but simplified as we don't have padding nor borders in box layout, only
spacing.

Also added to test-box-layout a key to set/unset homogeneous mode.

* Coding style fixes.
* Added proper test for homogeneous mode in box layout.
* Fix in homogeneous mode.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agoUse begin/end macros in cogl-primitives.h
Emmanuele Bassi [Thu, 25 Mar 2010 09:33:26 +0000 (09:33 +0000)]
Use begin/end macros in cogl-primitives.h

Protect the people using a C++ compiler from the dark abyss of C code.

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

14 years agoclutter-actor: Rename y1 to y_1 to avoid a compiler warning
Neil Roberts [Wed, 24 Mar 2010 15:32:28 +0000 (15:32 +0000)]
clutter-actor: Rename y1 to y_1 to avoid a compiler warning

Somebody somewhere decided it would be ok to define 'y1' as a global
function in math.h thus condemning us to repeatedly making commits to
fix these obnoxious compiler warnings about aliasing.

14 years agoMake sure GLX_SGI_swap_control is set up correctly
Adel Gadllah [Sun, 21 Mar 2010 12:12:58 +0000 (13:12 +0100)]
Make sure GLX_SGI_swap_control is set up correctly

glXSwapIntervalSGI only affects buffer swaps to the
current GLX drawable.

That means that calling it once in clutter_backend_glx_get_features
isn't sufficent, so set it up in clutter_backend_glx_ensure_context to
make sure it affects buffer swaps for the current drawable.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agoglx: Clean up the clip area conditions
Owen W. Taylor [Fri, 19 Mar 2010 18:18:17 +0000 (18:18 +0000)]
glx: Clean up the clip area conditions

Move the size check after the NULL check, add the clip height into the
check logic and fix up the comment.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agoscript: Do not allocate memory when not needed
Emmanuele Bassi [Fri, 19 Mar 2010 16:24:34 +0000 (16:24 +0000)]
script: Do not allocate memory when not needed

When printing out the property value during a ClutterScript debug run we
generate the value's content using g_strdup_value_contents() - though we
do it unconditionally. The contents might not be printed (they most
likely won't, actually) and will be freed afterwards. This is
unnecessary: we can allocate the contents string after checking if we're
going to print out the debug note, thus avoiding the whole
allocation/free cycle unless strictly needed.

14 years agoglx: Do not access stage_clip without checking it
Emmanuele Bassi [Fri, 19 Mar 2010 11:39:23 +0000 (11:39 +0000)]
glx: Do not access stage_clip without checking it

The stage_clip parameter for add_redraw_clip() can be NULL, so we need
to check before accessing its members.

14 years agoSwitch texture units before calling _cogl_texture_set_filters()
Owen W. Taylor [Wed, 17 Mar 2010 00:38:53 +0000 (20:38 -0400)]
Switch texture units before calling _cogl_texture_set_filters()

When setting up the state for a layer, we need to switch texture
units before we do anything that might bind the texture, or
we'll bind the wrong texture to the previous unit.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agojson: Update JsonParser
Emmanuele Bassi [Fri, 19 Mar 2010 11:13:04 +0000 (11:13 +0000)]
json: Update JsonParser

Add another fix from upstream, to clean up the code.

14 years agojson: Update the internal copy of JsonGenerator
Emmanuele Bassi [Fri, 19 Mar 2010 10:40:12 +0000 (10:40 +0000)]
json: Update the internal copy of JsonGenerator

The JsonGenerator we have inside Clutter as a fallback for a missing
system copy of JSON-GLib is way out of date.

14 years agoFix errors in keeping track of the stage bounding rectangle
Owen W. Taylor [Thu, 18 Mar 2010 17:55:01 +0000 (13:55 -0400)]
Fix errors in keeping track of the stage bounding rectangle

* Add new clutter_geometry_union(), because writing union intersection
  is harder than it looks. Fixes two problems with the inline code in
  clutter_stage_glx_add_redraw_clip().

  1) The ->x and ->y of were reassigned to before using them to
     compute the new width and height.
  2) since ClutterGeometry has unsigned width, x + width is unsigned,
     and comparison goes wrong if either rectangle has a negative
     x + width. (We fixed width for GdkRectangle to be signed for GTK+-2.0,
     this is a potent source of bugs.)

* Use in clutter_stage_glx_add_redraw_clip()

* Account for the case where the incoming rectangle is empty, and don't
  end up with the stage being entirely redrawn.

* Account for the case where the stage already has a degenerate
  width and don't end up with redrawing only the new rectangle and not
  the rest of the stage.

The better fix here for the second two problems is to stop using a 0
width to mean the entire stage, but this should work for now.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agoSet pixel store parameters before calling glGetTexImage
Owen W. Taylor [Wed, 17 Mar 2010 19:39:55 +0000 (15:39 -0400)]
Set pixel store parameters before calling glGetTexImage

We need to set up the rowstride and alignment properly in
CoglTexture2D before reading texture data.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agobuild: Mark --with-json=internal as experimental
Emmanuele Bassi [Thu, 18 Mar 2010 20:36:02 +0000 (20:36 +0000)]
build: Mark --with-json=internal as experimental

The system JSON-GLib installation should be the preferred way of parsing
JSON in Clutter. The internal copy is limited by re-synchronization from
upstream, and by the fact that upstream contains a fork of GScanner that
allows parsing escaped UTF-8. We should warn users compiling Clutter
with the internal copy, just like we warn about the internal image
backend.

14 years agodocs: Update the README
Emmanuele Bassi [Thu, 18 Mar 2010 20:29:59 +0000 (20:29 +0000)]
docs: Update the README

Add a "requirements" section and detail all the build requirements for
Clutter, depending on the platform.

14 years agobuild: Require xcomposite
Emmanuele Bassi [Thu, 18 Mar 2010 20:27:18 +0000 (20:27 +0000)]
build: Require xcomposite

The X11TexturePixmap actor uses XComposite API directly, without guards.
It has been doing so for a while, against the fact that we do check for
the XComposite extension - but we don't depend on it. As soon as you try
building Clutter on X11 without the XComposite extension available all
hell breaks loose.

The obvious fix is to make Clutter depend on XComposite - basically
ratifying what's the current state of things.

14 years agoscript: Add more comments and annotations
Emmanuele Bassi [Thu, 18 Mar 2010 20:20:09 +0000 (20:20 +0000)]
script: Add more comments and annotations

Detail why we are adding a fake id, and under which circumstances that
happens. Also be more verbose with the debug annotations.

14 years agoscript: Skip empty nodes
Emmanuele Bassi [Thu, 18 Mar 2010 17:44:14 +0000 (17:44 +0000)]
script: Skip empty nodes

If we get an empty node then we should skip it; this is really a
workaround for something that is broken in JSON-GLib or in our use
of JSON-GLib.

14 years agoEmit a critical warning if features are not initialized
Emmanuele Bassi [Thu, 18 Mar 2010 14:15:33 +0000 (14:15 +0000)]
Emit a critical warning if features are not initialized

If you forgot to call clutter_init() then you currently end up with a
warning saying that the stage cannot be initialized because the backend
does not support multiple stages. Clearly not useful.

We can catch some of the missing initialization in the features API,
since we will likely end up asking for a feature at some point.

14 years agoglx: Remove unnecessary call to create_stage()
Emmanuele Bassi [Wed, 17 Mar 2010 17:41:52 +0000 (17:41 +0000)]
glx: Remove unnecessary call to create_stage()

If we are in the stage realization sequence we already have a GLX
context set in the backend; there is no need to call create_backend().

14 years agoAdd error reporting for create_context() failures
Emmanuele Bassi [Wed, 17 Mar 2010 17:28:20 +0000 (17:28 +0000)]
Add error reporting for create_context() failures

We kind of assume that stuff will break well before during the
ClutterBackend::create_context() implementation if we fail to create a
GL context. We do, however, have error reporting in place inside the
Backend API to catch those cases. Unfortunately, since we switched to
lazy initialization of the Stage, there can be a case of GL context
creation failure that still leads to a successful initialization - and a
segmentation fault later on. This is clearly Not Good™.

Let's try to catch a failure in all the places calling create_context()
and report back to the user the error in a meaningful way, before
crashing and burning.

14 years agomodel: Let get_n_columns() return a sane value
Emmanuele Bassi [Wed, 17 Mar 2010 17:14:08 +0000 (17:14 +0000)]
model: Let get_n_columns() return a sane value

If you call get_n_columns() during the instance initialization phase but
before set_name()/set_types() have been called, you'll get a (guint) -1.
This is less than ideal.

If columns haven't been initialized we should just return 0, which was
the intent of the API since the beginning.

Based on a patch by: Bastian Winkler <buz@netbuz.org>

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agomodel: Add a comment on the n_columns field type
Emmanuele Bassi [Tue, 16 Mar 2010 18:57:28 +0000 (18:57 +0000)]
model: Add a comment on the n_columns field type

To avoid another bug report like:

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

with a patch that gets applied without a proper review, resulting in a
bug like:

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

I should probably add a comment on why on earth we're using an integer
as the n_columns member of the ClutterModelPrivate structure, and why it
is important that it is initialized as -1.

14 years agoRevert "model: Use guint for the n_columns field"
Emmanuele Bassi [Tue, 16 Mar 2010 18:53:24 +0000 (18:53 +0000)]
Revert "model: Use guint for the n_columns field"

The int storage, and the initial value of -1, is used as a guard when
subclassing ClutterListModel to allow the sub-class to call
clutter_model_set_names() and clutter_model_set_types().

This reverts commit c274118a8f7ed18e5bc703e614a9ea0a7cdb553c.

14 years agoBranch master for 1.3
Emmanuele Bassi [Tue, 16 Mar 2010 10:44:40 +0000 (10:44 +0000)]
Branch master for 1.3

14 years agoPost-release version bump to 1.2.3
Emmanuele Bassi [Mon, 15 Mar 2010 16:40:50 +0000 (16:40 +0000)]
Post-release version bump to 1.2.3

14 years agoRelease 1.2.2
Emmanuele Bassi [Mon, 15 Mar 2010 16:25:46 +0000 (16:25 +0000)]
Release 1.2.2

14 years agoUpdate NEWS file
Emmanuele Bassi [Mon, 15 Mar 2010 16:04:34 +0000 (16:04 +0000)]
Update NEWS file

14 years agoReturn and warn if a handle's refcount is <= 0
Colin Walters [Fri, 12 Mar 2010 22:39:27 +0000 (17:39 -0500)]
Return and warn if a handle's refcount is <= 0

This makes it more likely consumers notice invalid unreferences.
GObject has the same assertion.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agomodel: Use guint for the n_columns field
Bastian Winkler [Tue, 2 Mar 2010 08:26:57 +0000 (09:26 +0100)]
model: Use guint for the n_columns field

clutter_model_get_n_columns is supposed to return a guint, so the
n_columns field needs to be a guint with the initial value set to 0.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agocogl-texture-2d: Determine format before checking texture support
Neil Roberts [Wed, 10 Mar 2010 00:37:52 +0000 (16:37 -0800)]
cogl-texture-2d: Determine format before checking texture support

When entering cogl_texture_2d_new_from_bitmap the internal format can
be COGL_PIXEL_FORMAT_ANY. This was causing _cogl_texture_2d_can_create
to use an invalid GL format type. Mesa apparently ignores this but it
was causing errors when Cogl is compiled with debugging under NVidia.

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

14 years agoFix checks for out-of-bounds coordinates and repeats
Owen W. Taylor [Mon, 1 Mar 2010 21:49:04 +0000 (16:49 -0500)]
Fix checks for out-of-bounds coordinates and repeats

Add a return result from CoglTexture.transform_quad_coords_to_gl(),
so that we can properly determine the nature of repeats in
the face of GL_TEXTURE_RECTANGLE_ARB, where the returned
coordinates are not normalized.

The comment "We also work out whether any of the texture
coordinates are outside the range [0.0,1.0]. We need to do
this after calling transform_coords_to_gl in case the texture
backend is munging the coordinates (such as in the sub texture
backend)." is disregarded and removed, since it's actually
the virtual coordinates that determine whether we repeat,
not the GL coordinates.

Warnings about disregarded layers are used in all cases where
applicable, including for subtextures.

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

Signed-off-by: Neil Roberts <neil@linux.intel.com>
14 years agotest-paint-wrapper: Request ARGB visuals on GLX
Emmanuele Bassi [Wed, 10 Mar 2010 00:25:26 +0000 (00:25 +0000)]
test-paint-wrapper: Request ARGB visuals on GLX

If we are on GLX we have to request ARGB visuals, otherwise Clutter will
not do it by itself.

14 years agoFix argb initialisation.
José Dapena Paz [Mon, 8 Mar 2010 14:37:36 +0000 (15:37 +0100)]
Fix argb initialisation.

Fix clutter initialisation if argb visuals are enabled, setting a border
color on creating the dummy window. This should avoid BadMatch happening
when the depth of the root window visual is not the same of the depth
of the argb visual.

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

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
14 years agoactor: Remove some double indirection
Emmanuele Bassi [Sun, 7 Mar 2010 23:46:59 +0000 (23:46 +0000)]
actor: Remove some double indirection

Use an intermediate variable to avoid a double indirection when accessing
the instance private data structure.

14 years agojson: Improve strictness of the JSON parser
Emmanuele Bassi [Sun, 7 Mar 2010 20:54:33 +0000 (20:54 +0000)]
json: Improve strictness of the JSON parser

Backport of the upstream JSON-GLib commit that improved the strictness
of JsonParser.

The original upstream commit is:

  29881f03468db08bfb404cfcd5b61b4cdc419a87

14 years agoAdd test-cogl-texture-rectangle to the ignore file
Emmanuele Bassi [Fri, 5 Mar 2010 11:39:32 +0000 (11:39 +0000)]
Add test-cogl-texture-rectangle to the ignore file

14 years agoeglnative: Connect StageWindow.show and .hide
Emmanuele Bassi [Fri, 5 Mar 2010 08:48:52 +0000 (08:48 +0000)]
eglnative: Connect StageWindow.show and .hide

The show() and hide() methods of the StageWindow interface are
implemented but not assigned when initializing the interface
vtable.

14 years agodocs: Update the HACKING.backends file
Emmanuele Bassi [Wed, 3 Mar 2010 18:17:15 +0000 (18:17 +0000)]
docs: Update the HACKING.backends file

The create_context() and ensure_context() sections should be more clear
on the role of the functions, and their eventual caveats, like being
called multiple times.

14 years agoAdd a conformance test for rectangle textures
Neil Roberts [Tue, 2 Mar 2010 15:18:00 +0000 (15:18 +0000)]
Add a conformance test for rectangle textures

The test creates a GL_TEXTURE_RECTANGLE_ARB texture using
cogl_texture_new_from_foreign and confirms that rendering it works
correctly. If the rectangle texture extension isn't available then
this test always succeeds.

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

14 years agoCoglTexture2DSliced: Handle TEXTURE_RECTANGLE_ARB
Owen W. Taylor [Mon, 1 Mar 2010 19:04:20 +0000 (14:04 -0500)]
CoglTexture2DSliced: Handle TEXTURE_RECTANGLE_ARB

In _cogl_texture_2d_sliced_foreach_sub_texture_in_region(), don't
assert that the target is GL_TEXTURE_2D; instead conditionalize
normalization on the target.

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

14 years agoeglnative: Don't create a context if there already is one
Neil Roberts [Wed, 3 Mar 2010 18:08:33 +0000 (18:08 +0000)]
eglnative: Don't create a context if there already is one

If the EGL context is already created then we shouldn't try to create
another one. This was causing problems where one context would be
created from calling _clutter_feature_init and the other was created
from _clutter_backend_get_features. Cogl would set up its state using
the first context and then assume the state was still valid when the
second context became used so blending was not working correctly.

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

14 years agox11-texture-pixmap: Move signal handler override
Emmanuele Bassi [Wed, 3 Mar 2010 17:46:53 +0000 (17:46 +0000)]
x11-texture-pixmap: Move signal handler override

The signal handling override for the ::queue-damage-redraw should be
done in the class initialization function, not in the instance one.

14 years agoUpdate stb_image.c
Emmanuele Bassi [Wed, 3 Mar 2010 17:02:51 +0000 (17:02 +0000)]
Update stb_image.c

Upstream "released" 1.18.

14 years agoanimator: compare floating point values with an epsilon
Øyvind Kolås [Wed, 3 Mar 2010 15:45:43 +0000 (15:45 +0000)]
animator: compare floating point values with an epsilon

Direct comparisons with doubles are error prone.

14 years agoanimator: fix a crash in clutter_animator_compute_value
Øyvind Kolås [Wed, 3 Mar 2010 15:46:19 +0000 (15:46 +0000)]
animator: fix a crash in clutter_animator_compute_value

Fix a crasher when there is only one key in the animator.

14 years agoeglnative: Compilation fixes
Emmanuele Bassi [Wed, 3 Mar 2010 15:31:01 +0000 (15:31 +0000)]
eglnative: Compilation fixes

We should include <errno.h>, if we plan to use errno.

Why, yes: I am that stupid.

14 years agodocs: Fix gtk-doc annotation for ClutterStageManageClass
Emmanuele Bassi [Wed, 3 Mar 2010 10:49:34 +0000 (10:49 +0000)]
docs: Fix gtk-doc annotation for ClutterStageManageClass

Remove the semi-colon and use a colon for declaring the type.

14 years agobox: Fix allow-none annotation
Emmanuele Bassi [Wed, 3 Mar 2010 10:47:42 +0000 (10:47 +0000)]
box: Fix allow-none annotation

The syntax for allowing NULL is "allow-none", not "allow none".

14 years agoPost-release version bump to 1.2.1
Emmanuele Bassi [Tue, 2 Mar 2010 19:41:44 +0000 (19:41 +0000)]
Post-release version bump to 1.2.1

14 years agoRelease 1.2.0 (stable)
Emmanuele Bassi [Tue, 2 Mar 2010 18:03:23 +0000 (18:03 +0000)]
Release 1.2.0 (stable)

14 years agoUpdate the NEWS file
Emmanuele Bassi [Tue, 2 Mar 2010 18:03:13 +0000 (18:03 +0000)]
Update the NEWS file

14 years agobuild: Include test-script-model.json
Emmanuele Bassi [Tue, 2 Mar 2010 19:17:28 +0000 (19:17 +0000)]
build: Include test-script-model.json

The Model conformance test for ClutterScript parsing requires the file
to be inside the dist.

14 years agobuild: Add test-animator-3.json to EXTRA_DIST
Emmanuele Bassi [Tue, 2 Mar 2010 19:29:22 +0000 (19:29 +0000)]
build: Add test-animator-3.json to EXTRA_DIST

14 years agoconformance: Use g_assert_no_error() if available
Emmanuele Bassi [Tue, 2 Mar 2010 19:09:20 +0000 (19:09 +0000)]
conformance: Use g_assert_no_error() if available

GLib 2.20 has a nice g_assert() wrapper which will print out the GError
if it's not NULL.

14 years agoclutter-actor: Initialize with the identity matrix in get_transform
Neil Roberts [Tue, 2 Mar 2010 18:30:31 +0000 (18:30 +0000)]
clutter-actor: Initialize with the identity matrix in get_transform

The documentation and name of the get_transformation_matrix function
implies that 'matrix' is purely an out parameter. However it wasn't
initializing the matrix before calling the 'apply_transform' virtual
so it was basically just a wrapper for the virtual. The virtual
assumes the matrix parameter is in/out and applies the actor's
transformation on top of any existing transformations. This causes
unexpected semantics that are inconsistent with the documentation.

14 years agotext-field: Cast GString->len to integer before printing
Emmanuele Bassi [Tue, 2 Mar 2010 17:47:13 +0000 (17:47 +0000)]
text-field: Cast GString->len to integer before printing

The compiler will warn on 64bit architectures when using %d for
printing a gsize field.

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

14 years agoglx tfp: make clutter_glx_texture_pixmap_update_area cheap
Robert Bragg [Tue, 2 Mar 2010 14:04:54 +0000 (14:04 +0000)]
glx tfp: make clutter_glx_texture_pixmap_update_area cheap

This changes clutter_glx_texture_pixmap_update_area so it defers the
call to glXBindTexImageEXT until our pre "paint" signal handler which
makes clutter_glx_texture_pixmap_update_area cheap to call.

The hope is that mutter can switch to reporting raw damage updates to
ClutterGLXTexturePixmap and we can use these to queue clipped redraws.

14 years agoAdds initial clipped redraw support to Clutter
Robert Bragg [Mon, 30 Nov 2009 17:47:55 +0000 (17:47 +0000)]
Adds initial clipped redraw support to Clutter

A new (internal only currently) API, _clutter_actor_queue_clipped_redraw
can be used to queue a redraw along with a clip rectangle in actor
coordinates. This clip rectangle propagates up to the stage and clutter
backend which may optionally use the information to optimize stage
redraws. The GLX backend in particular may scissor the next redraw to
the clip rectangle and use GLX_MESA_copy_sub_buffer to present the stage
subregion.

The intention is that any actors that can naturally determine the bounds
of updates should queue clipped redraws to reduce the cost of updating
small regions of the screen.

Notes:
» If GLX_MESA_copy_sub_buffer isn't available then the GLX backend
  ignores any clip rectangles.

» queuing multiple clipped redraws will result in the bounding box of
  each clip rectangle being used.

» If a clipped redraw has a height > 300 pixels then it's promoted into
  a full stage redraw, so that the GPU doesn't end up blocking too long
  waiting for the vsync to reach the optimal position to avoid tearing.

  » Note: no empirical data was used to come up with this threshold so
    we may need to tune this.

» Currently only ClutterX11TexturePixmap makes use of this new API. This
  is done via a new "queue-damage-redraw" signal that is emitted when
  the pixmap is updated. The default handler queues a clipped redraw
  with the assumption that the pixmap is being painted as a rectangle
  covering the actors transformed allocation. If you subclass
  ClutterX11TexturePixmap and change how it's painted you now also
  need to override the signal handler and queue your own redraw.

  Technically this is a semantic break, but it's assumed that no one
  is currently doing this.

This still leaves a few unsolved issues with regards to optimizing sub
stage redraws that need to be addressed in further work so this can only
be considered a stepping stone a this point:

» Because we have no reliable way to determine if the painting of any
  given actor is being modified any optimizations implemented using
  _clutter_actor_queue_redraw_with_clip must be overridable by a
  subclass, and technically must be opt-in for existing classes to avoid
  a change in semantics. E.g. consider that a user connects to the paint
  signal for ClutterTexture and paints a circle instead of a rectangle.
  In this case any original logic to queue clipped redraws would be
  incorrect.

» Currently only the implementation of an actor has enough information
  with which to queue clipped redraws. E.g. It is not possible for
  generic code in clutter-actor.c to queue a clipped redraw when hiding
  an actor because actors have no way to report a "paint box". (remember
  actors can draw outside their allocation and actors with depth may
  also be projected outside of their allocation)

  » The current plan is to add a actor_class->get_paint_cuboid()
    virtual so actors can report a bounding cube for everything they
    would draw in their current state and use that to queue clipped
    redraws against the stage by projecting the paint cube into stage
    coordinates.

» Our heuristics for promoting clipped redraws into full redraws to
  avoid blocking the GPU while we wait for the vsync need improving:

  » vsync issues aren't relevant for redirected/composited applications
    so they should use different heuristics. In this case we instead
    need to trade off the cost of blitting when using glXCopySubBuffer
    vs promoting to a full redraw and flipping instead.

14 years agoanimator: s/clutter_animator_run/clutter_animator_start/
Øyvind Kolås [Tue, 2 Mar 2010 17:03:03 +0000 (17:03 +0000)]
animator: s/clutter_animator_run/clutter_animator_start/

This is consistent with choice of words in clutter_timeline_start and
makes the API less surprising.

14 years agocogl debug: Adds missing guards around debug cogl_args[]
Robert Bragg [Tue, 2 Mar 2010 02:07:40 +0000 (02:07 +0000)]
cogl debug: Adds missing guards around debug cogl_args[]

commit 511e5ceb516dc accidentally removed the #ifdef COGL_ENABLE_DEBUG
guards around the "cogl-debug" and "cogl-no-debug" cogl_args[] which
this patch restores.

14 years agoflow-layout: Provide a preferred size
Emmanuele Bassi [Tue, 2 Mar 2010 15:08:01 +0000 (15:08 +0000)]
flow-layout: Provide a preferred size

The FlowLayout fails to provide a preferred size in case no sizing is
specified on one axis. It should, instead, have the preferred size of
the sum of its children, depending on the orientation property.

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

14 years agobuild: Require libtool >= 2.2.6
Emmanuele Bassi [Tue, 2 Mar 2010 13:32:46 +0000 (13:32 +0000)]
build: Require libtool >= 2.2.6

Update the configure.ac to use the LT_INIT() instead of the deprecated
AC_PROG_LIBTOOL. This also allows us to depend on a specific libtool
version, namely one that doesn't thoroughly suck.