22212 Commits

Author SHA1 Message Date
Emmanuele Bassi
2a1dcf4008 Deprecate ClutterMedia
The interface looked like a good idea around the time Clutter 0.2 was
out, but in reality we never had a proper, and supported implementation
outside of clutter-gst - thus, ClutterMedia was acting like a wrapper
around GStreamer, leading to hilarious issues of impedence mismatch
between API and all sorts of indirection issues typical of wrong
abstractions.

In theory, ClutterMedia should have been deprecated and removed before
we hit 1.0, but we kept flip-flopping on the issue.

For 2.0, it's time to take it out.

And shoot it in the face.
2012-04-17 18:10:39 +01:00
Jasper St. Pierre
68321d9bf4 keybindings: Use a GSettings object rather than a schema, to support extensions
If we want to support keybindings from extensions installed in the user's
directory, we can't take a schema, as the GSettings object needs to have
a special GSettingsSchemaSource.

https://bugzilla.gnome.org/show_bug.cgi?id=673014
2012-04-16 20:31:45 -04:00
Yinghua Wang
65390e50a4 update Simplified Chinese (zh_CN) translation 2012-04-16 15:21:40 +08:00
Yinghua Wang
e097e5181f update Simplified Chinese (zh_CN) translation 2012-04-16 13:59:44 +08:00
Christian Kirbach
f8d32661b5 Updated German translation 2012-04-15 17:55:13 +02:00
Jiro Matsuzawa
d84911fdf9 [l10n] Update Japanese translation 2012-04-14 12:24:08 +09:00
Jasper St. Pierre
164c6ee741 text: Bubble up a click and quit early for just static text
Static text shouldn't need a cursor position or anything like that,
and it always eats a button press event.

https://bugzilla.gnome.org/show_bug.cgi?id=673190
2012-04-13 14:34:46 -04:00
Christian Kirbach
2a12747ae3 [l10n] Updated German translation 2012-04-13 19:46:47 +02:00
Emmanuele Bassi
7fffb7290e actor: Return a valid paint volume by default
It's been a year and change, and two stable releases, since we
introduced the paint volume mechanism to allow actors to paint outside
their allocation safely in environments that support clipped redraws.

The time has come to flip the switch, and return a valid paint volume,
matching the actor's allocation, by default - at least for Actor
instances from classes that do not override paint() and
get_paint_volume().

If an actor has a paint signal handler then it's the user responsability
not to paint outside the allocation - and to suffer the consequences of
doing so; in an ideal world, paint() would not be a signal in the first
place anyway. Plus, the idea that painting can happen at any time and
still have a valid surface greatly conflicts with the design goal of
making Clutter's rendering operations fully retained into a render tree.

We can still revert this commit before spinning 1.12, if need be.
2012-04-12 17:50:43 +01:00
Emmanuele Bassi
0bf5008159 interactive/snap-constaint: Modernize code 2012-04-12 17:08:33 +01:00
Emmanuele Bassi
119a25269e actor: Check for mapped children in the default get_paint_volume()
Unmapped children won't be painted so they should not contribute to the
default paint volume computation.
2012-04-12 17:07:06 +01:00
Emmanuele Bassi
98c9dad42f actor: Clear MetaGroups when empty
When removing the last Action, Constraint, or Effect, we should also be
clearing the corresponding MetaGroup: code inside ClutterActor relies on
NULL checks, and changing them all to check for NULL && n_items == 0
would not be fun.
2012-04-12 17:04:57 +01:00
Robert Bragg
9a1f1df83f Rework sdl integration api
This re-works the SDL integration api to simplify the integration for
application developers and also allow Cogl to know when the application
is about to go idle waiting for events so it can perform idle
book-keeping work.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-12 12:31:46 +01:00
Peter Hutterer
a66fbd258e Rename XINPUT_2_2 define to HAVE_XINPUT_2_2
configure.ac defines XINPUT_2_2 if XI 2.2 support was found. The code
expects XINPUT_2_2 in the device manager, but HAVE_XINPUT_2_2 in the x11
backend.

On newer X servers, the latter causes a BadValue when XIQueryDevice sends a
different major/minor than gdk's device manager (gnome-control-center).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

https://bugzilla.gnome.org/show_bug.cgi?id=673961
2012-04-12 11:31:29 +01:00
Luca Bruno
d3215b802d tests: Port test-premult
This ports the test-offscreen test from being a Clutter test to a
straight Cogl test.

https://bugzilla.gnome.org/show_bug.cgi?id=660617

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-11 16:49:42 +01:00
Robert Bragg
bdb645e7f5 kms: defer setting crtc modes until first swap buffers
Instead of creating a dummy framebuffer allocation just so we can setup
crtc modes during display_setup we now wait until the first swap_buffers
request before setting up the crtc modes.

This patch also adds a cogl_kms_display_queue_modes_reset() function
that allows developers to explicitly queue a reset of the crtc modes.
The idea is that applications that handle VT switching can use this for
VT enter events to explicitly ensure their mode is restored since modes
are often not automatically restored correctly.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 15:44:58 +01:00
Robert Bragg
125c31a70b kms: Add mirror support and env var configurability
This adds support for mirroring the display output on two KMS
connectors.

This patch also checks for a number of environment variables that can
influence how KMS is configured. The following variables can be set:

COGL_KMS_MIRROR: If this is set to anything then Cogl will try and setup
two connectors with the same resolution so that onscreen frame buffers
can be mirrored.

COGL_KMS_CONNECTOR0: This can be set to an integer identifier for a
specific KMS connector id to use for the first output.

COGL_KMS_CONNECTOR0_MODE: Can be set to a mode name like "1024x768"
explicitly select what mode should be used for the first output.

If COGL_KMS_MIRROR is set then COGL_KMS_CONNECTOR1 and
COGL_KMS_CONNECTOR1_MODE can optionally be set to specify a connector id
and mode name for the second output.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 15:44:58 +01:00
Neil Roberts
f9d3ea03ec kms: Implement the swap buffers notify feature
The KMS EGL platform now notifies when a swap is complete. The
notification is delayed until the application calls
cogl_context_dispatch. The GLX backend doesn't currently do this but I
think that is how it should behave to make it easier for the
application to handle locks and such.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-11 15:44:50 +01:00
Neil Roberts
cfefff1500 egl-kms: Use drmModePageFlip
The KMS platform now uses drmModePageFlip to present the buffer. The
main loop mechanism is used to poll for events on the DRM file
descriptor so that we notice when the page flip is complete. The
swap_buffers is throttled so that if there is a pending flip it will
block until it is complete before starting another flip.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-11 15:44:45 +01:00
Neil Roberts
d1d2120a91 kms: Use GBM surfaces
Instead of creating FBOs on the GL side, the KMS EGL platform uses the
latest changes to Mesa to create an EGL surface using a GBM surface as
the native surface type. This removes some of the special vtable hooks
that the KMS platform needed because it is now much more similar to
the other platforms.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-11 15:44:32 +01:00
Emmanuele Bassi
14b9cb4f7b actor: Fix completed transitions logic
We need to remove the transition only if the current repeat is equal to
the number of repeats, and if the transition was marked as remove on
complete. Otherwise, the transition has to remain where it is.
2012-04-11 13:57:06 +01:00
Robert Bragg
cc4c578887 fix cogl_context_new crash if fail to connect renderer
If a NULL display is passed to cogl_context_new() then it has to
implicitly create a CoglRenderer and CoglDisplay and propagate any
resulting errors back to the user. Previously the implementation relied
on passing a NULL renderer to cogl_display_new() as the means for
implicitly connecting to a renderer. The problem with this though is
that cogl_display_new() isn't designed to ever return NULL but if it
failed to connect to a renderer automatically it would do and then
cogl_context_new would pass NULL to cogl_display_setup() leading to a
crash.

This patch changes the implementation of cogl_context_new() to now
explicitly create a CoglRenderer and connect to it if a NULL display is
given. This way we can easily propagate any errors. In addition
cogl_display_new has been changed to abort if it fails to implicitly
connect to a renderer due to a NULL renderer argument.

An application needing to gracefully handle problems connecting to a
renderer at runtime should manually instantiate and connect a renderer
passing a GError argument to cogl_renderer_connect.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 12:26:52 +01:00
Robert Bragg
995f4cd019 msaa: print GError message on onscreen alloc failure
If we fail to allocate the onscreen framebuffer when first requesting 4x
msaa then we now print the GError message.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 12:26:51 +01:00
Robert Bragg
836d54445d Use cogl_framebuffer_draw_rectangle api
Instead of using cogl_rectangle() this example now uses
cogl_framebuffer_draw_rectangle(). This fixes a crash due to the example
not pushing a current framebuffer before calling cogl_rectangle().

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 12:26:48 +01:00
Robert Bragg
0205a96efb cogl-crate: remove redundant g_type_init
Cogl internally will call g_type_init if necessary so the cogl-crate
example doesn't need to do this explicitly.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 12:26:47 +01:00
Robert Bragg
b61b328f51 cogl-crate: print GError message if texture load fails
If we fail to load the crate texture then we now print error->message to
hopefully give more insight into the failure to the user.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
2012-04-11 12:26:46 +01:00
Rob Bradford
2d48e6e3e4 build: Bump pango dependency to 1.30
Clutter now uses pango_layout_get_character_count() which was added in 1.30.
2012-04-11 11:56:11 +01:00
Carles Ferrando
4147ea4660 [l10n]Updated Catalan (Valencian) translation 2012-04-10 21:09:06 +02:00
Jordi Serratosa
2dd7c98641 [l10n] Fixes on Catalan translation 2012-04-10 21:09:01 +02:00
Carles Ferrando
df237e2151 [l10n]Updated Catalan (Valencian) translation 2012-04-10 20:57:42 +02:00
Jordi Serratosa
8f08c9d9c2 [l10n] Fixes on Catalan translation 2012-04-10 20:57:40 +02:00
Carles Ferrando
656d5c31e3 [l10n]Updated Catalan (Valencian) translation 2012-04-10 20:56:50 +02:00
Jordi Serratosa
331488fe86 [l10n] Fixes on Catalan translation 2012-04-10 20:56:46 +02:00
Emmanuele Bassi
ab486bfe70 actor: Remove unnecessary relayout/redraw calls
They will be handled internally.
2012-04-10 13:37:04 +01:00
Emmanuele Bassi
de9112bc8c actor: Do not queue_redraw() in set_opacity()
The opacity internal setter will do it for us, and it will take into
consideration any eventual flatten effect applied to the actor.

This unbreaks the actor-offscreen-redirect conformance test.
2012-04-10 12:59:16 +01:00
Emmanuele Bassi
25bf0b72f6 x11/stage: Leave a comment about multi-head setup
The get_geometry() implementation is broken on multi-head systems; the
only solution is to use XRandR to get the size of the CRTC that contains
the stage.
2012-04-10 12:34:54 +01:00
Emmanuele Bassi
b12514ff9a stage: Unset the natural size when fullscreening
This ensures that constraints and signal handlers will go through the
allocation and not through the cache after ::fullscreen has been
emitted.
2012-04-10 12:12:50 +01:00
Emmanuele Bassi
612b714149 interactive/stage-sizing: Clean up 2012-04-10 12:12:28 +01:00
Emmanuele Bassi
f6da5ea616 x11/device-manager-xi2: Add 'Abs Distance' axis
In XInput 2, the proximity events of XInput 1 have been replaced by an
axis on a valuator class. This means that, on devices that support
proximity information, for instance pens of a tablet, you will start
receiving events with the distance as an axis value - similarly to how
the pressure and tilt are presented in the API.
2012-04-10 09:32:00 +01:00
Emmanuele Bassi
c699972bfa enums: Add CLUTTER_INPUT_AXIS_DISTANCE 2012-04-10 09:32:00 +01:00
Giovanni Campagna
3aad30143c default plugin: use the right type for varargs
Coordinates in Clutter are double, so twice the size of an int, and
if not correctly casted memory corruption occurs.

https://bugzilla.gnome.org/show_bug.cgi?id=673809
2012-04-10 03:45:25 +02:00
Owen W. Taylor
bdf4b3a33a ClutterText: Fix length passed to clutter_text_buffer_set_text()
clutter_text_buffer_set_text() expects a char count, not a byte
count, so pass -1 rather than using strlen.

https://bugzilla.gnome.org/show_bug.cgi?id=673783
2012-04-09 16:11:49 -04:00
Emmanuele Bassi
86a5213473 x11/device-manager-xi2: Remove heuristics for touchscreen devices
Devices that have touch valuator classes will be touchscreens or
touchpads; anything else should be ignored.
2012-04-07 23:07:59 +01:00
Owen W. Taylor
93d06d4368 Don't try to auto-maximize not-maximizable windows
Starting the auto-maximize process on a window like a
META_WINDOW_DESKTOP window that is not maximizable gets placement into
a confused state and eventually results in the window being positioned
at the wrong position (the position that an auto-maximized window would
be restored to.)

https://bugzilla.gnome.org/show_bug.cgi?id=673566
2012-04-05 14:53:11 -04:00
Neil Roberts
f676785906 Fix including a non-existent header
cogl-sampler-cache-private.h was including a header which doesn't
exist so the build was broken. The header comes from a patch which
hasn't been pushed to master yet which splits including GL/gl.h out of
cogl-defines.h into a separate header. I added the inclusion to make
it pick up the GL defines but it doesn't need to do this yet because
cogl-context.h is still including the GL header. I didn't notice the
failure because I still had a cogl-gl-header.h lying around from a
previous build with the patch.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-05 15:35:01 +01:00
Neil Roberts
cb146dc515 Add a workaround for slow read pixels on Mesa
Mesa before version 8.0.2 has a slow read pixels path that gets used
with the Intel driver where it converts all of the pixels into a
floating point representation and back even if the data is being read
into exactly the same format. There is however a faster path using the
blitter when reading into a PBO with BGRA format. It works out faster
to read into a PBO and then memcpy back out into the application's
buffer even though it adds an extra memcpy. This patch adds a
workaround in cogl_framebuffer_read_pixels_into_bitmap when it detects
this situation. In that case it will create a temporary CoglBitmap
using cogl_bitmap_new_with_size, read into it and then memcpy the data
back out.

The main impetus for this patch is that Gnome Shell has implemented
this workaround directly using GL calls but it seems like the kind of
thing that would sit better at the Cogl layer.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-05 13:52:43 +01:00
Neil Roberts
2037e0f4f1 Add a mechanism for determining GPU driver details
This adds a CoglGpuInfo struct to the CoglContext which contains some
enums describing the GL driver in use. This currently includes the
driver package (ie, is it Mesa) the version number of the package and
the vendor of the GPU (ie, is it by Intel). There is also a bitmask
which will contain the workarounds that we should do for that
particular driver configuration. The struct is initialised on context
creation by using a series of string comparisons on the strings
returned from glGetString.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-05 13:52:43 +01:00
Neil Roberts
ec5009fa23 Use GL_PACK_ALIGNMENT of 1 whenever possible
The Intel driver currently has an optimisation when calling
glReadPixels into a PBO so that it will use a blit instead of the Mesa
fallback path. However this only works if the GL_PACK_ALIGNMENT is
exactly 1, even if this would be equivalent to a higher alignment
value because the bpp*width is already aligned. To make it more likely
to hit this fast path, we now detect this situation and explicitly use
an alignment of 1. To make this work the texture driver needs to be
passed down the bpp*width as well as the rowstride when configuring
the alignment.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-05 13:51:56 +01:00
Neil Roberts
d54111795f Use ffs to calculate the GL_{UN,}PACK_ALIGNMENT
Instead of having a series of if-statements this adds an inline
function to calculate the alignment directly using ffs which is
probably slightly faster. Admittedly this is a pointless
micro-optimisation but I think it makes the code looks a bit neater
anyway.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-05 13:51:56 +01:00
Neil Roberts
c33ce5fc6b Use GL_ARB_sampler_objects
GL_ARB_sampler_objects provides a GL object which overrides the
sampler state part of a texture object with different values. The
sampler state that Cogl currently exposes is the wrap modes and
filters. Cogl exposes the state as part of the pipeline layer state
but without this extension GL only exposes it as part of the texture
object state. This means that it won't work to use a single texture
multiple times in one primitive with different sampler states. It also
makes switching between different sampler states with a single texture
not terribly efficient because it has to change the texture object
state every time.

This patch adds a cache for sampler states in a shared hash table
attached to the CoglContext. The entire set of parameters for the
sampler state is used as the key for the hash table. When a unique
state is encountered the sampler cache will create a new entry,
otherwise it will return a const pointer to an existing entry. That
means we can have a single pointer to represent any combination of
sampler state.

Pipeline layers now just store this single pointer rather than storing
all of the sampler state. The two separate state flags for wrap modes
and filters have now been combined into one. It should be faster to
compare the sampler state now because instead of comparing each value
it can just compare the pointers to the cached sampler entries. The
hash table of cached sampler states should only need to perform its
more expensive hash on the state when a property is changed on a
pipeline, not every time it is flushed.

When the sampler objects extension is available each cached sampler
state will also get a sampler object to represent it. The common code
to flush the GL state will now simply bind this object to a unit
instead of flushing the state though the CoglTexture when possible.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
2012-04-05 13:47:36 +01:00