* clutter/glx/clutter-backend-glx.c:
(clutter_backend_glx_get_features): Assert if we don't have a
GL context here or if it's not matched to a drawable. Asserting
might seem too drastic, but if we don't have a valid GL context
here then Clutter will segfault anyway, and I'll take an assert()
over a hard to read, deep in GLX guts backtrace any day (and
twice on a monday).
* clutter/x11/clutter-backend-x11.c:
(clutter_backend_x11_get_features): No need for a variable here.
* clutter/clutter-backend.c:
* clutter/glx/clutter-backend-glx.c:
* clutter/glx/clutter-stage-glx.c:
Allow NULL to be passed to _clutter_backend_ensure_context
which essentially clears GL context. This is hooked into stage
unrealisation. Isn't yet quite bulletproof.
Fixes issues with gtk-embed crasher (thanks to Neil).
* clutter/glx/clutter-glx-texture-pixmap.c:
In clutter_glx_texture_pixmap_dispose; trap X errors around
glXDestroyGLXPixmap so we can't die due to BadDrawable errors.
* README:
Add notes on new multistage feature.
* clutter/clutter-stage-manager.c:
Dont ref contained stages.
* clutter/clutter-stage.c:
Automatically remove stage from stage manager on finalisation.
Cleans up warnings when a stage is destroyed.
* clutter/clutter-backend.h:
* clutter/glx/clutter-backend-glx.c:
Minor formatting cleanups.
* clutter/glx/clutter-stage-glx.c:
* configure.ac:
* clutter/clutter-version.h.in:
Add a general CLUTTER_STAGE_TYPE define, should be useful for
evntual stage subclassing and creating with g_object_new()
* clutter/win32/clutter-backend-win32.c
(clutter_backend_win32_init): Added a call to
timeBeginPeriod. Without this the frame rates are terrible because
the glib timeouts are not accurate enough. However this requires
Glib >= 2.16.0 to take any effect because of a change in the way
g_poll is implemented. See revision 6597 of glib.
(clutter_backend_win32_finalize): Added a call to timeEndPeriod.
* configure.ac: Added -lwinmm to the library dependencies for the
Win32 backend.
* clutter/win32/clutter-win32.h:
* clutter/win32/clutter-stage-win32.h:
* clutter/win32/clutter-stage-win32.c:
* clutter/win32/clutter-event-win32.c:
* clutter/win32/clutter-backend-win32.h:
* clutter/win32/clutter-backend-win32.c:
Upgraded for multi-stage support.
* clutter/win32/clutter-stage-win32.c
(clutter_stage_win32_request_coords): Fixed so that it doesn't set
the position or size if it hasn't changed. This was causing
problems when the window was resized using the top left corner. In
that case the window receives resize and move messages separately
which caused the window to flash at a different size or position
while one message was handled before the other.
(clutter_stage_win32_realize): Added PFD_GENERIC_ACCELERATED to
the list of pixel format flags to force it to use hardware
acceleration.
2008-03-30 Neil Roberts <neil@o-hand.com>
* clutter-sections.txt: Added clutter_win32_get_stage_from_window
* clutter/win32/clutter-win32.h: Added gtk-doc documentation for
the Win32 backend section.
* clutter/win32/clutter-stage-win32.c
(clutter_win32_get_stage_window): Fixed punctuation in the
documentation.
* README: Added notes about the Win32 backend.
2008-03-26 Neil Roberts <neil@o-hand.com>
* clutter-sections.txt: Added a section for the Win32 specific
API.
* clutter-docs.sgml: Added comments about the Win32 backend.
* Makefile.am: Added bits to ignore the headers for the Win32
backend.
* clutter/win32/clutter-event-win32.c (clutter_event_check):
Removed the pointless parameter in the call to check_msg_pending.
(check_msg_pending): Fixed to use PeekMessageW instead of
PeekMessage.
* clutter/clutter-model.[ch]: Add a ::copy() virtual function
for copying iterators.
* clutter/clutter-list-model.c:
(clutter_list_model_iter_copy),
(clutter_list_model_iter_class_init): Implement the ::copy()
function inside the ListModel iterator subclass.
* clutter/clutter-score.[ch]: Small clean ups and refactoring.
Use gulong instead of guint, so we have a bigger id space for
the timelines inside a Score.
* clutter/clutter-score.[ch]: Remove all the API changes, and
just add a clutter_score_append_at_marker(); the implementation
remains the same, but the marker must be explicitly created by
the developer. The ids are no longer used to create implicit
markers, so they can return to be unsigned integers.
* clutter/clutter-timeline.[ch]:
(clutter_timeline_has_marker): Add a function to query a timeline
for a marker being set.
* tests/test-score.c (main): Update with the API changes.
* clutter.symbols: Update exported symbols.
* clutter.symbols: Add new symbols
* clutter/clutter-score.[ch]: Use the newly added marker API
on the timelines to implement attaching timelines at specific
points, using either milliseconds or frames.
* tests/test-score.c (main): Test the new API.
* clutter/clutter-marshal.list: Add signature for the
::marker-reached signal marshaller.
* clutter/clutter-timeline.[ch]: Add timeline marker API;
using markers it is possible to add a unique identifier to
a particular frame of the timeline, and receive a signal
notification when reaching that particular marker while
playing the timeline. (#641)
* tests/test-timeline.c: Update the test case to check for
the marker-reached signal emission.
* clutter.symbols: Add new symbols.
* clutter/clutter-id-pool.c: (clutter_id_pool_free):
Use g_slice_free not g_free.
* clutter/clutter-main.c: (_clutter_do_pick):
Dont 'over read' the framebuffer when picking (#839, Neil Roberts)
contained data structure.
* clutter/clutter-id-pool.[ch]: new files.
* clutter/Makefile.am: added clutter-id-pool.[ch]
* clutter/clutter-private.h: use a ClutterIDPool instead of GArray and
GSList to keep track of the reusable ids.
* clutter/clutter-actor.c: moved id pool logic away.
* clutter/clutter-main.c: simplified id pool creation/finalization.
* clutter/clutter-timeline.c:
Timeline changes to fix the issues identified in bugzilla #439
Notably, this includes some tweaks to timeline semantics. So e.g. for a
10 frame timeline here are some points about the new timeline code:
- When you create a timeline it starts with current_frame_num == 0
- After starting a timeline, the first timeout is for
current_frame_num == 1 (Notably it isn't 0 since there is a delay
before the first timeout signals so re-asserting the starting point
would give a longer than average first frame.)
- For a non looping timeline the last timeout would be for
current_frame_num == 10
- For a looping timeline the timeout for current_frame_num == 10 would
be followed by a timeout for current_frame_num == 1 and frame 0 is
considered == frame 10.
- Asking for a timeline of N frames might better be described as asking
for a timeline of _length_ N.
Warning: Although I tried to test things, I guess it's quite likely that
this breaks somthing depending on a specific quirk of the previous
timeline code.
Signed off by: Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-group.c (clutter_group_real_lower): Fix to
actually lower the actor under the 'above' actor. (#822)
* clutter/clutter-entry.h:
* clutter/clutter-entry.c:
(clutter_entry_handle_key_event_internal),
(clutter_entry_key_press), (clutter_entry_class_init),
(clutter_entry_handle_key_event): Handle a default class handler
for the key-press-event, so that giving key focus to an entry will
automatically make it work. This deprecates the
clutter_entry_handle_key_event() function. (#824)
* tests/test-entry.c (main): Remove the handle_key_event()
machinery, and just give focus to the entry.
Add support for the anchor point inside ClutterScript (#834,
David Stanczak)
* clutter/clutter-actor.c:
(clutter_actor_set_property),
(clutter_actor_get_property),
(clutter_actor_class_init): Add the :anchor-x and :anchor-y
properties to the ClutterActor class.
(clutter_actor_set_anchor_point),
(clutter_actor_set_anchor_pointu),
(clutter_actor_set_anchor_point_from_gravity): Reimplement
the pixel based and gravity based API using the units based
one. Emit the ::notify signal for the :anchor-x and :anchor-y
properties.
(parse_units),
(clutter_actor_parse_custom_node): Parse the :anchor-x and
:anchor-y properties using the custom units format (mm, px,
pt and %).
* tests/test-script.json: Test the newly added properties.
of overflowing the id numbers when continusly creating and destroying
actors on long running applications for 16bpp.
* clutter/clutter-private.h: replaced hashtable with GArray and a
GSList for available slots in the array.
* clutter/clutter-actor.c: (create_actor_id): function to create an
actor->id mapping, (release_actor_id): function to mark an existing id
as available for reuse.
* clutter/clutter-main.c: (clutter_context_free): added utility
function for cleaning up the context,
(clutter_get_actor_by_gid): use the GArray for looking up actors.
* clutter/clutter-actor.c: Remove the usage of g_return_if_fail()
from static functions: either assert or use g_warning() to check
internal state, as g_return_if_fail() can be compiled out.
* clutter/clutter-main.c: Ditto as above.
* clutter/x11/clutter-backend-x11.h:
* clutter/x11/clutter-event-x11.c:
* clutter/x11/clutter-x11.h:
(clutter_x11_handle_event):
(clutter_x11_disable_event_retrieval):
Functions to allow to hook into external XEvent retrieval (for
example when using clutter with gtk); NB: this API is tentative.
* clutter/x11/clutter-event-x11.c (event_translate): Ignore
PropertyNotify events if they don't match our window.
* clutter/x11/clutter-stage-x11.c:
(clutter_stage_x11_request_coords): Chain up to the parent's
request coords.
* clutter/x11/clutter-event-x11.c (event_translate): Ignore
ConfigureNotify events if we are painting on a foreign window.
* clutter/x11/clutter-stage-x11.c:
(clutter_stage_x11_request_coords): Reliquish control of the
window size, if we are painting on a foreign window. This fixes
the GtkClutterEmbed widget.
* clutter/x11/clutter-x11.h:
* clutter/x11/clutter-backend-x11.c:
(clutter_x11_set_display):
Function to set X display connection prior to calling
clutter_init(); stripped loads of trailing space.
* clutter/clutter-actor.h:
* clutter/clutter-actor.c:
(clutter_actor_get_abs_opacity): Add function that does what
get_opacity() does now...
(clutter_actor_get_opacity): ... and make get_opacity() do what
it's supposed to be doing. The original get_opacity() returned
a composited value, and there's no way to actually extract the
real opacity value set with set_opacity().
* clutter/clutter-clone-texture.c:
* clutter/clutter-rectangle.c:
* clutter/clutter-texture.c: Update to use get_abs_opacity().
* clutter/clutter-entry.c:
* clutter/clutter-label.c: Ditto. Also, never change the stored
alpha value. (#804)
* tests/Makefile.am:
* tests/test-opacity.c: Test suite for the get_opacity() and
get_abs_opacity() API, and correct opacity handling.
* README: Add note about the change in get_opacity().
* clutter/clutter-actor.[ch]:
* clutter/clutter-types.h:
* doc/reference/clutter-docs.sgml: Fix a lot of documentation.
2008-02-15 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-actor.c:
* clutter/clutter-actor.h:
(clutter_group_query_coords):
Added function to translate vertex array to a bounding box.
(clutter_actor_is_scaled):
(clutter_actor_is_rotated):
Fixed documentation.
* clutter/clutter-actor.c:
* clutter/clutter-actor.h:
(clutter_actor_is_scaled):
(clutter_actor_is_rotated):
Convenience functions to test whether actor is scaled or rotated.
(clutter_actor_apply_relative_transform_to_point):
Removed unused variable.
* clutter/clutter-group.c:
(clutter_group_query_coords):
Use clutter_actor_get_relative_vertices() to calculate bounding
boxes of children that are scaled or rotated.
* clutter/clutter-actor.c:
* clutter/clutter-actor.h:
(clutter_actor_get_relative_vertices):
(clutter_actor_apply_relative_transform_to_point):
Functions to calculate actor vertices in the plane of a given
ancestor.
* clutter/clutter-texture.c (texture_update_data):
Fixed incorrect calculation of offset into texture data (needs to
use width of the texture, not of the updated area).
* clutter/clutter-actor.c:
Minor documentation tweak to class description.
* clutter/clutter-behaviour-scale.c:
'Force' start + end vals of scale behaviour
(#779, Havoc Pennington)
* clutter/clutter-actor.c (clutter_actor_transform_stage_point):
Moved part of the calculation to floating point to avoid overflow
of ClutterFixed range for large actors (bug 613).
* clutter/clutter-behaviour-path.c: Move the nice graph and
description from the Path behaviour...
* clutter/clutter-behaviour.c: ... to the main Behaviour class.
* clutter/clutter-behaviour-path.c: Reference the newly
added image showing the effects of different alpha functions
on the same path behaviour.
* configure.ac: Find out the prefix of some of the libraries
we depend upon, so that gtk-doc can fix the references for us.
* clutter/clutter-script.c:
(resolve_alpha_func): Use a whitelist containing the alpha function
provided by Clutter, as a fallback in case g_module_open() does not
work.
(clutter_script_parse_alpha): Add an explicit warning in case we
cannot find the alpha function used inside a UI definition.
* clutter/clutter-actor.c:
(clutter_actor_set_property):
Fixed handling of PROP_ROTATE_CENTER_Y, ROTATE_CENTER_Z
* tests/test-actors.c:
Adjusted to use anchor point for both group and hands.
* clutter/clutter-script-parser.c:
(clutter_script_get_type_from_symbol),
(clutter_script_get_type_from_class): Use BIND_LAZY flag
when looking at the symbols, so we don't load them all up.
* clutter/clutter-script.c (resolve_alpha_func): Ditto as above.
(_clutter_actor_apply_modelview_transform): perform translation as
well as anchor point adjustment based on self not being stage (and
not by self not being an orphan).
* clutter/clutter-texture.c:
Initial attempt at handling resizing/tranformed source textures.
* clutter/pango/pangoclutter-render.c: (draw_glyph):
Guards against freetype returning NULL bitmaps and
thus causing device by zeros on NVIDIA drivers. (see ml)
* clutter/clutter-actor.c: (clutter_actor_get_vertices):
Make sure GL related Matrices are initialised. Fixes#756
* clutter/clutter-texture.c:
Fix up code from Norways answer to Jean-Michel Basquiat.
(warning on tile_get_pixbuf)
renamed clutter_actor_apply_shader to be clutter_actor_set_shader.
Reindented/aligned header.
* clutter/clutter-texture.c: (clutter_texture_paint): temporarily
disable the shader on top of the clutter context's shader stack while
rendering into the FBO.
* tests/test-fbo.c: (main): s/apply_shader/set_shader/
* tests/test-shader.c: (button_release_cb), (main):
s/apply_shader/set_shader/
* clutter/clutter-shader.c:
Minor formatting cleanups to fit in 80 cols.
* clutter/clutter-texture.c:
More safety checks, clean ups in clutter_texture_new_from_actor()
* clutter/cogl/gl/cogl.c:
Always clear the FBO initially when rendering
* tests/test-fbo.c:
Overhall the test as to be more useful (and show current issues)
* clutter/cogl/cogl.h:
* clutter/cogl/gl/cogl.c:
* clutter/cogl/gles/cogl.c:
Disable the depth test and buffer as has some strange side
effects, mainly on x/y axis rotation with multiple layers at
same depth (eg rotating text on a bg has very strange
effect). Seems no clean 100% effective way to fix without other
odd issues.. So for now move to application to handle and add
cogl_enable_depth_test() as for custom actors (i.e groups) to
enable if need be.
* clutter/clutter-feature.h:
* clutter/clutter-texture.c:
* clutter/clutter-texture.h:
* clutter/cogl/cogl.h:
* clutter/cogl/gl/cogl.c:
* clutter/cogl/gles/cogl.c:
* tests/Makefile.am:
* tests/test.fbo.c:
Add initial support for FBO's in Clutter (OpenGL only so far).
See new clutter_texture_new_from_actor()
Initial implementation, needs work.
* clutter/x11/clutter-stage-x11.c:
(clutter_stage_x11_set_cursor_visible):
Fall back to again not relying on xfixes to hide cursor. *sigh*
* clutter/clutter-deprecated.h:
Add clutter_group_find_child_by_id
* clutter/clutter-actor.c:
(clutter_actor_get_property): Use clutter_actor_get_reactive()
instead of the IS_REACTIVE() macro.
(clutter_actor_set_reactive): Emit the notify signal for the
reactive property.
* clutter/clutter-timeline.c:
(timeline_timeout_func),
(clutter_timeline_get_delta): Coding style fixes.
* clutter/clutter-timeline.c (clutter_timeline_skip): Don't
add the frames outside the direction check. (thanks to benoar
on clutter-list for spotting it)
* clutter/clutter-actor.c:
(clutter_actor_transform_vertices):
Call clutter_actor_query_coords() instead of accessing the actor
box, so that actors that calculate their bounding box on the fly
(like ClutterGroup) work.
* (_clutter_actor_apply_modelview_transform_recursive):
Made to work for parentless actors.
* clutter/clutter-entry.h:
* clutter/clutter-entry.c:
(clutter_entry_set_cursor_position),
(clutter_entry_get_cursor_position): Rename [gs]et_position()
to [gs]set_cursor_position(), and avoid method name collisions
with bindings for high-level languages.
* clutter/clutter-deprecated.h: Add replacement warnings for the
renamed methods.
* clutter/clutter-actor.c (clutter_actor_init): Explicitly
memset() to 0 the clip container, so if you get the clip without
having set it, you won't get garbage.
2008-01-31 Rob Bradford <rob@openedhand.com>
* clutter/clutter-label.c (clutter_label_query_coords): Check
if the layout logical rectangle size is bigger than the bounding
box; this usually means that the bounding box changed in one
point and the label private allocation needs to be
updated. (#724)
* Makefile.am: Use variables, instead of substitutions.
* clutter/clutter-private.h:
* clutter/clutter-main.h: Make clutter_do_event() public again,
as we need it in clutter-gtk.
* configure.ac:
* clutter/x11/Makefile.am:
* clutter/x11/clutter-x11.pc.in: Add a clutter-x11 pkg-config
file for clutter-gtk, as it depends on the X11 backend API, as
implemented by the GLX and EGLX backends.
* clutter/x11/clutter-event-x11.c (event_translate): Do not
propagate DestroyNotify events if the stage doesn't own the
window.
* tests/test-scale.c (main): Set values different from the default.
* clutter/clutter-behaviour-depth.h:
* clutter/clutter-behaviour-depth.c:
(clutter_behaviour_depth_set_bounds),
(clutter_behaviour_depth_get_bounds): Add the depth-start and
depth-end accessors.
* tests/test-depth.c (timeline_completed): Use set_bounds()
instead of g_object_set().
* clutter.symbols: Add clutter_behaviour_depth_set_bounds()
and clutter_behaviour_opacity_get_bounds() to the list of
public symbols.
* clutter/clutter-behaviour-scale.c: Use separate variables for
storing the scale boundaries; apparently, using arrays broke
the python bindings. (#720)
* clutter/clutter-group.c:
Make sure unrealizing a group also unrealizes children.
* clutter/glx/clutter-stage-glx.c:
Chain up to group unrealize to make sure textures get unrealized
when changing context (see #718)
* clutter/clutter-texture.c:
Formatting cleanups
* clutter/clutter-main.c (generate_enter_leave_events): Do not
take the explicit reference, and let clutter_event_copy() do it
for us. (#714, Neil Roberts)
* clutter/clutter-event.c (clutter_event_copy): Take an extra
reference on the related actor in ClutterEventCrossing that we
explicitly unref in clutter_event_free(). (#714, Neil Roberts)
* clutter/clutter-main.c (clutter_do_event): Check the
return value of the ::event signal for the CLUTTER_DELETE
event type.
* clutter/clutter-stage.c (clutter_stage_event): Emit the
::event signal when receiving the CLUTTER_DELETE event; this
allows to intercept the user's closing of the stage window.
* clutter.symbols: Add ClutterBehaviourOpacity accessors.
* clutter/clutter-behaviour-opacity.h:
* clutter/clutter-behaviour-opacity.c:
(clutter_behaviour_opacity_set_bounds),
(clutter_behaviour_opacity_get_bounds): Add accessors for the
opacity-start and opacity-end properties.
* clutter/clutter-behaviour-scale.h: Fix the argument name to
avoid complaints by gtk-doc.
* clutter.symbols: Add new ClutterBehaviourScale setters.
* clutter/clutter-behaviour-scale.[ch]: Split the scaling factors
on both axis. Add setters for all the behaviour properties.
* clutter/clutter-effect.h:
* clutter/clutter-effect.c (clutter_effect_scale): Split the
final scale factor to match the ClutterBehaviourScale changes. (#709)
* tests/test-actors.c:
* tests/test-effects.c:
* tests/test-rotate.c:
* tests/test-scale.c: Update after API change.
* clutter/cogl/cogl.h: Rename COGLhandleARB to COGLhandle.
* clutter/cogl/gl/cogl-defines.h.in:
* clutter/cogl/gl/cogl.c: Update GL implementation of COGL.
* clutter/cogl/gles/cogl-defines.h:
* clutter/cogl/gles/cogl.c: Update GLES implementation of COGL.
* clutter/clutter-shader.c: Fix ClutterShader to use the new
COGLhandle type instead of COGLhandlerARB.
Define COGLhandleARB. (patch by Johan Bilien)
* clutter/cogl/gles/cogl-defines.h: Define COGLhandleARB on
GLES as well (using GLuint)
* clutter/cogl/gles/cogl.c: Use COGLhandleARB.
reviewed by: Emmanuele Bassi <ebassi@openedhand.com>
* clutter/osx/clutter-event-osx.c (_clutter_event_osx_put):
Initialize ClutterEvent structure with zeroes (#672)
The 'source' member was uninitialized and being referenced in
clutter_do_event leading to crash.
* clutter/cogl/gl/cogl.c (cogl_get_proc_address): Implement non-GLX
version using GModule and looking up the symbol from the running
process. It should work when linked to library providing the
requested function. (#696, Tommi Komulainen)
* clutter.symbols: Add clutter_model_insertv()
* clutter/clutter-model.[ch] (clutter_model_insertv): Add a vector
based insertion API, for language bindings
* clutter/clutter-effect.c (clutter_effect_rotate): Make the
rotate effect work on the passed axis, instead of hardcoding
the X axis. (#700, Neil Roberts)
patch from Tommi Komulainen <tommi.komulainen@iki.fi>, (#694)
* clutter/cogl/gl/cogl-defines.h.in: Added COGLhandleARB typedef.
* clutter/cogl/cogl.h:
* clutter/cogl/gl/cogl.c:
* clutter/clutter-shader.c: Use COGLhandleARB instead of COGLint when
referring to program or shader handles.
* clutter/Makefile.am:
* clutter/clutter.h:
* clutter/clutter-list-model.[ch]: Complete the ClutterModelDefault
to ClutterListModel rename by renaming the source files
* clutter/clutter-model-default.[ch]: Rename ClutterModelDefault
into ClutterListModel, to make it clear that the default
ClutterModel implementation is list-based
* tests/test-model.c: Update call
* clutter/clutter-model-default.c:
(clutter_model_default_new),
(clutter_model_default_newv): Move the constructors in the
right file
* clutter/clutter-model-private.h: Add a private header for
the ClutterModel implementations
* clutter/clutter-model.c:
(clutter_model_check_type),
(clutter_model_set_n_columns),
(clutter_model_set_column_type): Mark as private to Clutter,
not static to ClutterModel
* clutter/Makefile.am: Add clutter-model-private.h
* clutter/clutter-model-default.[ch]: Remove the ClutterModelDefault
iterator symbols from the public API; the iterator implementation
is a detail of the default ClutterModel class
* clutter.symbols: Update
* clutter/clutter-model.h:
* clutter/clutter-model.c:
(clutter_model_appendv),
(clutter_model_prependv): Add vector based API for bindings.
(clutter_model_get_column_name),
(clutter_model_get_column_type),
(clutter_model_set_sorting_column): Fix the check in the condition
on the column index.
* tests/test-scale.c (on_timeline_completed), (main): Fix spelling
* clutter.symbols: Update public symbols
* clutter.symbols: Add clutter_actor_move_byu()
* clutter/clutter-actor.h:
* clutter/clutter-actor.c:
(clutter_actor_move_by),
(clutter_actor_move_byu): Add a units-based variant of the
clutter_actor_move_by() function
* clutter/clutter-model-default.c:
(clutter_model_default_get_iter_at_row),
(clutter_model_default_insert_row): Fix off-by-one errors
(clutter_model_default_class_init):
(clutter_model_default_remove_row): Move the actual removal of the
row to...
(clutter_model_default_row_removed): ... the signal class handler
of ::row-removed; this way, signal handlers connected to
::row-removed will get a valid iterator, while signal handlers
connected to ::row-removed with the AFTER flag will get an updated
model