values (SIGSEGV)
* clutter/cogl/gl/cogl-texture.c
(_cogl_texture_upload_subregion_to_gl): When iterating over the
slices, discard ones that don't intersect immediatly otherwise it
will call glTexSubImage2D with a negative width/height and then
move the source position incorrectly. Thanks to Gwenole
Beauchesne.
* clutter/clutter-behaviour-bspline.c: Changed the CBZ_T_POW3 and
CBZ_T_MUL functions so that they preserve more of the least
significant bits. This fixes some of the jaggy behaviour with
longer paths.
reviewed by: Emmanuele Bassi <ebassi@linux.intel.com>
* clutter/clutter-color.[ch]: Add GParamSpec and GValue integration
for ClutterColor. With ClutterParamSpecColor it is possible to define
color properties; with the GValue integration it's possible to
automatically transform strings into colors and vice versa.
(clutter_color_free): Allow NULL parameter to match other boxed
types destructors.
(clutter_color_new): Add a constructor for the ClutterColor boxed
type, mostly for bindings.
* clutter/clutter-container.[ch]: Add checks to the Container
interface invocation methods, to avoid crashing or corrupting
the stack when an actor does not implement every virtual
function of the Container interface vtable. GObject allows this
to happen so we must handle the case gracefully. This also means
that we can classify some virtual function as mandatory (as is
the case for ::add, ::remove and ::foreach) and some other
optional.
Handle dropped motion events when computing crossing events,
based on a patch from Gwenole Beauchesne.
* clutter/clutter-main.c: (clutter_event_get_device): internal static
utility function.
(clutter_do_event): generate enter/leave events for all pointer
events.
(generate_enter_leave_events): modified enter/leave events generator
to work for all pointer event types. Enter/leave events are now
delivered before the motion/button event that caused the crossing to
happen.
* clutter/clutter-event.c: (clutter_event_copy), (clutter_event_free):
removed reference counting logic that is not needed when the crossing
events are directly delivered.
Bug 1130 - CLUTTER_MOTION is not emitted when time goes backwards.
* clutter/clutter-main.c (clutter_do_event): Check for time
rollbacks inside the motion event throttling. (Pierce Liu)
Bug 1154 - clutter_timeout_pool_new() documentation doesn't say
how to free
* clutter/clutter-timeout-pool.c: Update the documentation to
note that you must use g_source_unref() to free the timeout
pool. (Murray Cumming)
Bug 1124 - Clutter causes an additional size request in each
allocation
* clutter/clutter-actor.c:
(clutter_actor_store_old_geometry): Store the allocation instead
of causing a new size-request cycle. (Johan Bilien)
Bug 1125 - Save an extra pango_layout_get_size in many cases
* clutter/clutter-label.c:
(clutter_label_create_layout_no_cache): Add a simple check
before calling pango_layout_get_size(). (Johan Bilien)
* clutter/clutter-alpha.c:
(clutter_alpha_get_alpha): Do not return the cached value but
just compute the current alpha value. The use case is pretty
much straightforward: stop a timeline, advance it, and retrieve
the alpha value before starting the timeline to adjust an
animation dependent on the alpha. Caching the alpha value is
not needed because the behaviours will always pass the alpha
value inside the ::alpha-notify virtual function anyway, so
there is no need for them to call clutter_alpha_get_alpha().
This change makes it also possible to reliably unit-test
ClutterAlpha.
(timeline_new_frame_cb): Call clutter_alpha_get_alpha().
* clutter/clutter-main.c:
* clutter/clutter-main.h:
* clutter/clutter-private.h:
* clutter/x11/clutter-backend-x11.c:
(clutter_get_option_group_without_init):
Function to obtain clutter option group without opening display
(for use with foreign display and gtk_clutter_init). Bug 1033.
Stripped trailing whitespace.
* clutter/clutter-main.c: Don't free the ClutterMainContext so
that the main loop can be restarted.
* clutter/eglx/clutter-backend-egl.c:
* clutter/eglnative/clutter-backend-egl.c: Register an atexit
handler which disposes the backend object so that we are still
guaranteed to call eglTerminate on GLES.
Bug 1033 - Manually parsing command line options prevents
initializing clutter
* clutter/clutter-main.c:
(post_parse_hook), (clutter_init_with_args),
(clutter_parse_args), (clutter_init): Move the initialization
of Clutter at the end of the post-parse hook of Clutter's
GOptionGroup. Clutter must be initialized at the end of the
argument parsing.
* clutter/clutter-main.c: Properly document the
clutter_get_option_group() function and the invariant that
after parsing Clutter's option group the library will be
initialized. (Thanks to Tomas Frydrych for pointing this
out)
* clutter/x11/clutter-backend-x11.c: Properly document the
usage of clutter_x11_set_display().
* clutter/x11/clutter-x11.h: clutter_x11_set_display() is
public API and should be declared in the header we install.
* clutter/cogl/gl/cogl-texture.c (cogl_texture_set_region):
* clutter/cogl/gles/cogl-texture.c (cogl_texture_set_region):
Don't attempt to upload any data if the width or height of the
subregion is zero. Thanks to Gwenole Beauchesne.
* clutter/cogl/gles/cogl.c (cogl_get_viewport): Use glGetIntegerv
instead of glGetFixedv to read the viewport because the latter
converts incorrectly on some hardware.
* clutter/clutter-stage.c (clutter_stage_read_pixels): Use
OpenGL's coordinate system for the arguments to glReadPixels (so
that y zero is the bottom of the window). Use clutter_redraw
instead of clutter_stage_paint to ensure the right GL context is
selected. Set some of the glPixelStore parameters that might have
been changed by Cogl.
* tests/test-stage-read-pixels.c: Replace with a different test
that gets a sub-region of the stage around the cursor.
* clutter/glx/clutter-stage-glx.c (clutter_stage_glx_realize):
Don't set a backing pixel on the X window. Otherwise when the
window resizes it will flicker when X paints the background
immediatly before Clutter repaints the whole stage.
* clutter/clutter-actor.c
(clutter_actor_set_anchor_point_from_gravity)
(clutter_actor_move_anchor_point_from_gravity): Add documentation
to make it clear that the anchor point won't move when the actor
is resized.
window_style correction.
* clutter/win32/clutter-stage-win32.c (get_window_style): Remove
the WS_MAXIMIZEBOX style if the stage isn't resizable.
(clutter_stage_win32_set_user_resize): Queue a redraw of the
window frame when the user_resize property is changed.
* clutter/win32/clutter-event-win32.c (message_translate): Don't
update the size of the stage when handling WM_SIZE messages that
result from the stage being minimized. Thanks to Roman Yazmin.
* clutter/glx/clutter-glx-texture-pixmap.c:
* clutter/x11/clutter-x11-texture-pixmap.c:
TFP resyncing on MapNotify/ConfigureNotify (bug 1020; patch by
Andy Wingo <wingo@pobox.com>).
* clutter/clutter-main.c (_clutter_id_to_color): When choosing a
pick color, set all but the most significant of the unused
bits. This should make make it more likely that the GL
implementation will round down to the right value.
* tests/test-pick.c: Test case for picking. It creates 192 actors
at known positions and stores their gids. It then calls
clutter_stage_get_actor_at_pos with each position to check that
the right gid is returned.
* tests/Makefile.am (noinst_PROGRAMS): Add test-pick
* clutter/clutter-label.c: Bring back layout caching. This time it
will cache up to three different layouts. The width for which each
layout was generated is stored so that if the same width is
requested again it can use the cached version. If no cached
version is available it will try to replace the oldest
layout. 'Age' is determined by a counter which is incremented
every time a layout is created. The cache is cleared after any
property changes that might affect the layout.
(struct _ClutterLabelPrivate): Removed extents_width,
extents_height and context because they weren't used anywhere.
* tests/test-label-cache.c: Add a test which checks whether the
label is using a different layout when properties are
changed. Also compares the extents of the label's layout with an
independent layout and fails if they aren't the same.
* tests/Makefile.am (noinst_PROGRAMS): Add test-label-cache
* clutter/clutter-actor.c (clutter_actor_set_property): When
changing the anchor point properties, use set_anchor_pointu
instead of changing the value directly so that a redraw will be
queued.
(clutter_actor_set_anchor_pointu): Queue a redraw when the anchor
point is changed. Thanks to Johan Bilien.
Bug 1082 - Texture bitmap is destroyed in wrong way
* clutter/cogl/common/cogl-bitmap-pixbuf.c:
(_cogl_bitmap_from_file): Make a copy of the pixbuf data in
the internal image loader so that we can keep working under
the assumption that we are using the GLib memory allocation
and deallocation functions.
Bug 1099 - No ClutterScript API to get a list of IDs in a given file
* clutter/clutter-script.[ch]: Add clutter_script_list_objects(),
a function for retrieving all the objects built by a ClutterScript
instance. (Based on a patch by Noah Gibbs)
Bug 1090 - Label somtimes returns natural_width < min_width
* clutter/clutter-label.c:
(clutter_label_get_preferred_width): Check that the width of the
layout is always greater than 0. (Johan Bilien)
* doc/reference/clutter/subclassing-ClutterActor.xml: Update the
custom actor example since the Cogl API was changed to namespace
all of the path related functions in cogl_path_*. Thanks to Nati
Berkover.
* clutter/clutter-score.c: Add missing parameter in example of
calling clutter_score_start().
x-align property
* clutter/clutter-entry.c (clutter_entry_paint): When calculating
the position to draw the cursor at, take into account the
alignment of the text. Queue a redraw when the x-align property is
changed.
* clutter/win32/clutter-event-win32.c (message_translate): The
coordinates in a WM_MOUSEWEEL message are given relative to the
screen so they need to be converted to client coordinates before
use. Thanks to Roman Yazmin.
* clutter/clutter-child-meta.c:
(clutter_child_meta_set_property),
(clutter_child_meta_class_init): Make the :container and
:actor properties of ChildMeta construct-only, to allow
bindings to actually use ChildMeta without abusing the API.
* clutter/clutter-container.c (create_child_meta): Instead of
setting the members of the ChildMeta structure, use the
constructor properties.
* clutter/clutter-script-parser.c:
* clutter/clutter-script-private.h: Clean up the code; add a
conversion function for reading a ClutterColor out of a
JSON object or array definition.
* clutter/clutter-script.c: Clean up the code; document properly
how we translate from type name to type function.
* clutter/cogl/gl/cogl.c:
* clutter/cogl/gles/cogl.c:
* clutter/cogl/cogl.h.in: Add cogl_clip_stack_save,
cogl_clip_stack_restore, cogl_viewport and cogl_frustum.
* clutter/cogl/gl/cogl-fbo.h:
* clutter/cogl/gl/cogl-fbo.c: Try to attach a stencil buffer when
creating an FBO.
* clutter/cogl/common/cogl-clip-stack.c: Add functions to save and
restore the whole state of the stack.
* clutter/clutter-texture.c (clutter_texture_paint): When
rendering the FBO source, setup a temporary asymmetric perspective
projection matrix to render it as it would appear on screen.
* clutter/clutter-private.h:
* clutter/clutter-actor.c
(_clutter_actor_apply_modelview_transform_recursive): No longer
static and exported in clutter-private.h
* clutter/clutter-timeline.c: Calculate the 'duration' property
on-demand instead of storing it as a member variable. Notify
duration property changes whenever the fps or num_frames changes.
* clutter/clutter-score.c (clutter_score_is_playing): Check
whether priv->running_timelines is NULL before checking its
length.
(foreach_running_timeline): Remove the completed signal handler
when stopping the score. Otherwise the completed callback will get
called multiple times if the timeline is started later.
* clutter/clutter-stage.c (clutter_stage_dispose): Unrealize the
stage before removing the update idle handler. Otherwise
unrealizing causes another redraw to be queued and if the stage
object remains alive it will cause an assert and abort.