mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 10:00:45 -05:00
2007-06-22 Matthew Allum <mallum@openedhand.com>
* NEWS: * README.in: * TODO: Update for 0.3 release. * clutter/clutter-actor.c: Minor doc fixups * clutter/clutter-texture.c: Various minor additions for handling non RGBA data. Fix a typo breaking clutter_texture_get_pixbuf() on tiled textures. * tests/test-actors.c: Disable scaling to avoid drifting (temporary till API is fixed)
This commit is contained in:
parent
b302c80864
commit
ee6156cb01
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
||||
2007-06-22 Matthew Allum <mallum@openedhand.com>
|
||||
|
||||
* NEWS:
|
||||
* README.in:
|
||||
* TODO:
|
||||
Update for 0.3 release.
|
||||
|
||||
* clutter/clutter-actor.c:
|
||||
Minor doc fixups
|
||||
|
||||
* clutter/clutter-texture.c:
|
||||
Various minor additions for handling non RGBA data.
|
||||
Fix a typo breaking clutter_texture_get_pixbuf() on tiled textures.
|
||||
|
||||
* tests/test-actors.c:
|
||||
Disable scaling to avoid drifting (temporary till API is fixed)
|
||||
|
||||
2007-06-21 Emmanuele Bassi <ebassi@openedhand.com>
|
||||
|
||||
* clutter/clutter-timeline.c: Allow disabling the timeline pool
|
||||
|
116
NEWS
116
NEWS
@ -1,4 +1,118 @@
|
||||
Clutter 0.2 ()
|
||||
Clutter 0.3 ()
|
||||
========================
|
||||
|
||||
* List of changes between 0.2.3 and 0.3
|
||||
o Clutter now supports both switchable windowing system and GL backends.
|
||||
Window systems supported include GLX, EGL and SDL.
|
||||
|
||||
GL support includes OpenGL 1.2+ and OpenGL ES 1.1. This is
|
||||
provided by a small basic abstraction layer 'cogl.h'. Cogl is not
|
||||
yet documented - usage external to Clutter is not yet advised.
|
||||
|
||||
Backends may provide specific command line options.
|
||||
|
||||
Notes;
|
||||
|
||||
GLX
|
||||
---
|
||||
The GLX backend is built by default and is currently the most
|
||||
developed, supported and featured windowing system backend. Only
|
||||
OpenGL is supported via GLX.
|
||||
|
||||
SDL
|
||||
---
|
||||
Clutter has experimental support for using SDL. Open GL is supported as
|
||||
is OpenGL ES via Dogles (very experimental).
|
||||
|
||||
EGL
|
||||
---
|
||||
Clutter has experimental support for using EGL. Only Open GL ES
|
||||
is supported by EGL.
|
||||
|
||||
EGL support assumes an EGL implementation running atop X Windows.
|
||||
|
||||
Open GL ES.
|
||||
-----------
|
||||
|
||||
Clutter now has experimental support for Open GL ES.
|
||||
Current known issues;
|
||||
|
||||
+ Unrealising a ClutterTexture will not move pixel data from video
|
||||
into system memory but simply destroy it.
|
||||
+ BGRA, YUV Texture data not currently supported.
|
||||
|
||||
(Use the clutter_feature API to probe for above at runtime)
|
||||
|
||||
Open Source ES implementations this has been tested against
|
||||
include `Vincent' and `dgles'. Support for commerical
|
||||
implementations may require modifications to the configure.ac
|
||||
script.
|
||||
|
||||
vincent: http://ogl-es.sourceforge.net/
|
||||
(Also see: http://svn.o-hand.com/repos/misc/trunk/ogles/ )
|
||||
|
||||
dgles: http://developer.hybrid.fi/dgles/index.html
|
||||
|
||||
o New ClutterEffect class provides a simplified (and thus less flexible)
|
||||
API wrapping around behaviours, alphas and timelines.
|
||||
o New Behaviours - bspline, ellipsis, rotation.
|
||||
o New built in Alpha functions;
|
||||
CLUTTER_ALPHA_SINE_INC
|
||||
CLUTTER_ALPHA_SINE_DEC
|
||||
CLUTTER_ALPHA_SINE_HALF
|
||||
CLUTTER_ALPHA_SQUARE
|
||||
CLUTTER_ALPHA_SMOOTHSTEP_INC
|
||||
CLUTTER_ALPHA_SMOOTHSTEP_DEC
|
||||
CLUTTER_ALPHA_EXP_INC
|
||||
CLUTTER_ALPHA_EXP_DEC
|
||||
o New Actors
|
||||
+ ClutterContainer and ClutterVBox, ClutterHBox layout actors.
|
||||
+ ClutterEntry, text entry actor
|
||||
o ClutterTexture now handles BGRA, YUV and premultiplied alpha data.
|
||||
o All internal math now fixed point based.
|
||||
o Clutter now has it own internal event queue.
|
||||
o ClutterStage new features;
|
||||
+ Title property for naming in window decorations.
|
||||
+ Perspective setting - The stages perspective can now be modified.
|
||||
o New Clutter_actor *project API calls allow for querying of tranformed
|
||||
actor vertices and points.
|
||||
o New Clutter Feature checks.
|
||||
o Initial ClutterUnit implementation for device independant positioning.
|
||||
* List of Bugs fixed
|
||||
o Various issues with very poor performance and Intel drivers.
|
||||
o #138 Fix typo in x rotation transform.
|
||||
|
||||
|
||||
Clutter 0.2.3 (2007-04-11)
|
||||
==========================
|
||||
|
||||
* List of changed between 0.2.2 and 0.2.3
|
||||
o Fixes to tile based textures and again clutter_texture_get_pixbuf(). [Matthew]
|
||||
o Implement Gravity for ClutterScaleBehaviour. [Matthew, Rob]
|
||||
|
||||
Clutter 0.2.2 (2007-03-22)
|
||||
==========================
|
||||
|
||||
* List of changed between 0.2.1 and 0.2.2
|
||||
o Addition of basic XEMBED support for clutter stage. [Matthew]
|
||||
o Fixes to clutter_texture_get_pixbuf(). [Matthew]
|
||||
o Export clutter_group_remove_all and add associated fixes. [Matthew]
|
||||
|
||||
Clutter 0.2.1 (2007-02-07)
|
||||
==========================
|
||||
|
||||
* List of changed between 0.2.0 and 0.2.1
|
||||
o Add even faster double to integer (and back) conversion
|
||||
functions. [Tomas]
|
||||
o Fix some errors in the fixed point sine waveform
|
||||
function. [Tomas]
|
||||
o Use fixed point math in the Pango renderer. [Tomas]
|
||||
o Improve the GL version check. [Matthew]
|
||||
o Add a square waveform function. [Emmanuele]
|
||||
* List of bugs fixed
|
||||
o #215 - macro CLUTTER_MARK() not disabled for non-debug builds
|
||||
|
||||
Clutter 0.2 (18-01-2007)
|
||||
========================
|
||||
|
||||
* List of changes between 0.2 and 0.1
|
||||
|
57
README.in
57
README.in
@ -1,33 +1,34 @@
|
||||
Clutter README.
|
||||
===============
|
||||
|
||||
This is Clutter @CLUTTER_VERSION@. Clutter aims to give a nice easy
|
||||
GObject based API for creating fast, mainly 2D single window stylalised
|
||||
applications such as media box UI's, presentaions, kiosk style apps etc.
|
||||
It uses OpenGL for rendering.
|
||||
This is Clutter 0.3. Clutter is a GObject based user interface toolkit
|
||||
intended for the creation of fast, visually bespoke and impressive
|
||||
applications. Open GL is used for rendering.
|
||||
|
||||
Its not meant to be a full featured GUI toolkit for regular desktop
|
||||
apps nor provide a general interface to *all* OpenGL functionality.
|
||||
|
||||
It currently uses fairly low end GL functionality with an aim to still
|
||||
work well on open source graphics drivers as well as possibly making
|
||||
an eventual GL ES port feasable.
|
||||
|
||||
Clutter currently requires:
|
||||
|
||||
* GLib >= 2.10.0
|
||||
* GdkPixbuf
|
||||
* OpenGL >= 1.2
|
||||
* Pango 1.x
|
||||
* OpenGL >= 1.2 or OpenGL ES 1.1
|
||||
* GLX, SDL or an EGL Implementation
|
||||
|
||||
Its also recommended you have some kind of working hardware OpenGL on
|
||||
your target system.
|
||||
The official website is:
|
||||
http://www.clutter-project.org
|
||||
The Clutter blog is at
|
||||
http://www.clutter-project.org/blog
|
||||
To subscribe to the Clutter mailing list, send mail to:
|
||||
clutter+subscribe@o-hand.com
|
||||
The official mailing list archive is:
|
||||
http://lists.o-hand.com/clutter/
|
||||
New bug page on Bugzilla:
|
||||
http://bugzilla.o-hand.com/enter_bug.cgi?product=Clutter
|
||||
|
||||
Clutter is LGPL licensed.
|
||||
|
||||
The official website is: http://www.clutter-project.org
|
||||
The official mailing list is: http://lists.o-hand.com/clutter/
|
||||
New bug page on Bugzilla: http://bugzilla.o-hand.com/enter_bug.cgi?product=Clutter
|
||||
|
||||
INSTALLATION
|
||||
====
|
||||
See the INSTALL file
|
||||
@ -35,9 +36,18 @@ See the INSTALL file
|
||||
RELEASE NOTES
|
||||
====
|
||||
|
||||
Release Notes for Clutter 0.4
|
||||
Relevant information for developers with existing Clutter applications
|
||||
wanting to port to newer releases;
|
||||
|
||||
Release Notes for Clutter 0.3
|
||||
-----------------------------
|
||||
|
||||
* ClutterTexture changes:
|
||||
+ clutter_texture_set_pixbuf() now takes a GError paremeter.
|
||||
+ clutter_texture_upload_data has been split into two new and
|
||||
more functional versions; clutter_texture_set_from_rgb_data(),
|
||||
clutter_texture_set_from_yuv_data().
|
||||
|
||||
* The GLX specific API has been moved to the GLX backend code and
|
||||
it's now under the ClutterGlx namespace.
|
||||
|
||||
@ -45,7 +55,7 @@ Release Notes for Clutter 0.4
|
||||
reviewed and changed were necessary. Every paint is queued with a
|
||||
priority of G_PRIORITY_DEFAULT + 10; timelines are allocated with
|
||||
a G_PRIORITY_DEFAULT + 30 priority; events are processed with a
|
||||
G_PRIORITY_DEFAUTL priority. This ensures that events are processed
|
||||
G_PRIORITY_DEFAULT priority. This ensures that events are processed
|
||||
before the paints take place.
|
||||
|
||||
* The ClutterActor::allocate_coords() has been renamed to
|
||||
@ -71,6 +81,16 @@ Release Notes for Clutter 0.4
|
||||
If an application experiences bad behaviours during animations
|
||||
use "export CLUTTER_TIMELINE=no-pool" to disable the timeout pool.
|
||||
|
||||
* clutter_color_parse() now handles color definitions with alpha. Alpha
|
||||
will default to fully Opaque rather than fully transparent if not specified.
|
||||
|
||||
* The Clutter examples/ directory has been removed and replaced with a
|
||||
tests/ directory.
|
||||
|
||||
* Event API changes and event queue (Ebassi) .
|
||||
|
||||
* Runtime options now dependant on backend.
|
||||
|
||||
HACKING
|
||||
====
|
||||
If you want to hack on and improve clutter check the TODO file.
|
||||
@ -86,7 +106,8 @@ You will need an account.
|
||||
In the report you should include:
|
||||
* what system you're running Clutter on;
|
||||
* which version of GLib, GdkPixbuf and OpenGL you are using;
|
||||
* which video card and which drivers you are using;
|
||||
* which video card and which drivers you are using, including output of
|
||||
glxinfo and xdpyinfo.
|
||||
* how to reproduce the bug.
|
||||
|
||||
If you cannot reproduce the bug with one of the tests that come with Clutter
|
||||
|
6
TODO
6
TODO
@ -1,7 +1,7 @@
|
||||
TODO
|
||||
====
|
||||
|
||||
Last updated 31/05/2007
|
||||
Last updated 22/06/2007
|
||||
|
||||
|
||||
0.4 (July 07)
|
||||
@ -32,8 +32,9 @@ Maybe:
|
||||
|
||||
Definetly:
|
||||
|
||||
- Fragment shader support infrastructure
|
||||
- More ClutterUnits support, convert actor API to units.
|
||||
- Device independant units
|
||||
- Fragment shader support infrastructure
|
||||
- XML/JSON type 'layout' files - include actors + behaviours + timeline etc.
|
||||
- App developers manual.
|
||||
|
||||
@ -44,3 +45,4 @@ Nice/Maybe:
|
||||
- Glitz integration
|
||||
- Some kind of focus model.
|
||||
- Apple/Win native backends.
|
||||
- Glitz backend over GLX (would cover above)
|
@ -59,10 +59,10 @@ struct _ClutterActorPrivate
|
||||
{
|
||||
ClutterActorBox coords;
|
||||
|
||||
ClutterGeometry clip;
|
||||
ClutterGeometry clip; /* FIXME: Should be Units */
|
||||
guint has_clip : 1;
|
||||
ClutterFixed rxang, ryang, rzang; /* Rotation*/
|
||||
gint rzx, rzy, rxy, rxz, ryx, ryz;
|
||||
gint rzx, rzy, rxy, rxz, ryx, ryz; /* FIXME: Should be Units */
|
||||
gint z;
|
||||
guint8 opacity;
|
||||
ClutterActor *parent_actor;
|
||||
@ -498,9 +498,9 @@ clutter_actor_transform_vertices (ClutterActor * self,
|
||||
* @verts: Pointer to a location of an array of 4 #ClutterVertex where to
|
||||
* store the result.
|
||||
*
|
||||
* Calculates the screen coordinaces of the four corners or the actor; the
|
||||
* returned corners are in the following order: bottomleft, bottomright,
|
||||
* topright, topleft.
|
||||
* Calculates the tranformed screen coordinaces of the four corners of
|
||||
* the actor; the returned corners are in the following order:
|
||||
* bottomleft, bottomright, topright, topleft.
|
||||
*
|
||||
* Since: 0.4
|
||||
**/
|
||||
@ -706,9 +706,10 @@ clutter_actor_paint (ClutterActor *self)
|
||||
/**
|
||||
* clutter_actor_request_coords:
|
||||
* @self: A #ClutterActor
|
||||
* @box: A #ClutterActorBox with requested new co-ordinates.
|
||||
* @box: A #ClutterActorBox with requested new co-ordinates in ClutterUnits
|
||||
*
|
||||
* Requests new co-ordinates for the #ClutterActor ralative to any parent.
|
||||
* Requests new untransformed co-ordinates for the #ClutterActor
|
||||
* ralative to any parent.
|
||||
*
|
||||
* This function should not be called directly by applications instead
|
||||
* the various position/geometry methods should be used.
|
||||
@ -767,8 +768,8 @@ clutter_actor_request_coords (ClutterActor *self,
|
||||
* @self: A #ClutterActor
|
||||
* @box: A location to store the actors #ClutterActorBox co-ordinates
|
||||
*
|
||||
* Requests the queryd un transformed co-ordinates for the #ClutterActor
|
||||
* relative to any parent.
|
||||
* Requests the untransformed co-ordinates (in ClutterUnits) for the
|
||||
* #ClutterActor relative to any parent.
|
||||
*
|
||||
* This function should not be called directly by applications instead
|
||||
* the various position/geometry methods should be used.
|
||||
@ -1212,7 +1213,8 @@ clutter_actor_queue_redraw (ClutterActor *self)
|
||||
* @self: A #ClutterActor
|
||||
* @geometry: A #ClutterGeometry
|
||||
*
|
||||
* Sets the actors geometry in pixels relative to any parent actor.
|
||||
* Sets the actors untransformed geometry in pixels relative to any
|
||||
* parent actor.
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_geometry (ClutterActor *self,
|
||||
@ -1233,7 +1235,8 @@ clutter_actor_set_geometry (ClutterActor *self,
|
||||
* @self: A #ClutterActor
|
||||
* @geometry: A location to store actors #ClutterGeometry
|
||||
*
|
||||
* Gets the actors geometry in pixels relative to any parent actor.
|
||||
* Gets the actors untransformed geometry in pixels relative to any
|
||||
* parent actor.
|
||||
*/
|
||||
void
|
||||
clutter_actor_get_geometry (ClutterActor *self,
|
||||
@ -1259,7 +1262,7 @@ clutter_actor_get_geometry (ClutterActor *self,
|
||||
* @x2: A location to store actors right position if non NULL.
|
||||
* @y2: A location to store actors bottom position if non NULL.
|
||||
*
|
||||
* Gets the actors bounding rectangle co-ordinates in pixels
|
||||
* Gets the actors untransformed bounding rectangle co-ordinates in pixels
|
||||
* relative to any parent actor.
|
||||
*/
|
||||
void
|
||||
@ -1324,7 +1327,7 @@ clutter_actor_set_position (ClutterActor *self,
|
||||
* @dy: Distance to move Actor on Y axis.
|
||||
*
|
||||
* Moves an actor by specified distance relative to
|
||||
* current position.
|
||||
* current position in pixels.
|
||||
*
|
||||
* Since: 0.2
|
||||
*/
|
||||
@ -1355,8 +1358,7 @@ clutter_actor_move_by (ClutterActor *self,
|
||||
* @width: New width of actor in pixels
|
||||
* @height: New height of actor in pixels
|
||||
*
|
||||
* Sets the actors position in pixels relative to any
|
||||
* parent actor.
|
||||
* Sets the actors size in pixels.
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_size (ClutterActor *self,
|
||||
@ -1381,7 +1383,7 @@ clutter_actor_set_size (ClutterActor *self,
|
||||
* @width: Location to store width if non NULL.
|
||||
* @height: Location to store height if non NULL.
|
||||
*
|
||||
* Gets the size of an actor ignoring any scaling factors
|
||||
* Gets the size of an actor in pixels ignoring any scaling factors.
|
||||
*
|
||||
* Since: 0.2
|
||||
*/
|
||||
@ -1522,7 +1524,7 @@ clutter_actor_get_abs_size (ClutterActor *self,
|
||||
* clutter_actor_get_width
|
||||
* @self: A #ClutterActor
|
||||
*
|
||||
* Retrieves the actors width.
|
||||
* Retrieves the actors width ignoring any scaling factors.
|
||||
*
|
||||
* Return value: The actor width in pixels
|
||||
**/
|
||||
@ -1542,7 +1544,7 @@ clutter_actor_get_width (ClutterActor *self)
|
||||
* clutter_actor_get_height
|
||||
* @self: A #ClutterActor
|
||||
*
|
||||
* Retrieves the actors height.
|
||||
* Retrieves the actors height ignoring any scaling factors.
|
||||
*
|
||||
* Return value: The actor height in pixels
|
||||
**/
|
||||
@ -1599,7 +1601,8 @@ clutter_actor_set_height (ClutterActor *self, guint height)
|
||||
*
|
||||
* Retrieves the actors x position relative to any parent.
|
||||
*
|
||||
* Return value: The actor x position in pixels
|
||||
* Return value: The actor x position in pixels ignoring any tranforms
|
||||
* (i.e scaling, rotation).
|
||||
**/
|
||||
gint
|
||||
clutter_actor_get_x (ClutterActor *self)
|
||||
@ -1619,7 +1622,8 @@ clutter_actor_get_x (ClutterActor *self)
|
||||
*
|
||||
* Retrieves the actors y position relative to any parent.
|
||||
*
|
||||
* Return value: The actor y position in pixels
|
||||
* Return value: The actor y position in pixels ignoring any tranforms
|
||||
* (i.e scaling, rotation).
|
||||
**/
|
||||
gint
|
||||
clutter_actor_get_y (ClutterActor *self)
|
||||
@ -1639,7 +1643,7 @@ clutter_actor_get_y (ClutterActor *self)
|
||||
* @scale_x: #ClutterFixed factor to scale actor by horizontally.
|
||||
* @scale_y: #ClutterFixed factor to scale actor by vertically.
|
||||
*
|
||||
* Scale an actor.
|
||||
* Scales an actor with fixed point parameters.
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_scalex (ClutterActor *self,
|
||||
@ -1658,10 +1662,10 @@ clutter_actor_set_scalex (ClutterActor *self,
|
||||
/**
|
||||
* clutter_actor_set_scale:
|
||||
* @self: A #ClutterActor
|
||||
* @scale_x: double
|
||||
* @scale_y: double
|
||||
* @scale_x: double factor to scale actor by horizontally.
|
||||
* @scale_y: double factor to scale actor by vertically.
|
||||
*
|
||||
* FIXME
|
||||
* Scales an actor with floating point parameters.
|
||||
*
|
||||
* Since: 0.2
|
||||
*/
|
||||
@ -1680,10 +1684,10 @@ clutter_actor_set_scale (ClutterActor *self,
|
||||
/**
|
||||
* clutter_actor_get_scalex:
|
||||
* @self: A #ClutterActor
|
||||
* @scale_x: FIXME
|
||||
* @scale_y: FIXME
|
||||
* @scale_x: Location to store horizonal fixed scale factor if non NULL.
|
||||
* @scale_y: Location to store vertical fixed scale factor if non NULL.
|
||||
*
|
||||
* FIXME
|
||||
* Retrieves an actors scale in fixed point.
|
||||
*
|
||||
* Since: 0.2
|
||||
*/
|
||||
@ -1702,10 +1706,10 @@ clutter_actor_get_scalex (ClutterActor *self,
|
||||
/**
|
||||
* clutter_actor_get_scale:
|
||||
* @self: A #ClutterActor
|
||||
* @scale_x: FIXME
|
||||
* @scale_y: FIXME
|
||||
* @scale_x: Location to store horizonal float scale factor if non NULL.
|
||||
* @scale_y: Location to store vertical float scale factor if non NULL.
|
||||
*
|
||||
* FIXME
|
||||
* Retrieves an actors scale in floating point.
|
||||
*
|
||||
* Since: 0.2
|
||||
*/
|
||||
@ -1735,14 +1739,14 @@ clutter_actor_get_scale (ClutterActor *self,
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_scale_with_gravity (ClutterActor *self,
|
||||
gfloat scale_x,
|
||||
gfloat scale_y,
|
||||
ClutterGravity gravity)
|
||||
gfloat scale_x,
|
||||
gfloat scale_y,
|
||||
ClutterGravity gravity)
|
||||
{
|
||||
clutter_actor_set_scale_with_gravityx (self,
|
||||
CLUTTER_FLOAT_TO_FIXED (scale_x),
|
||||
CLUTTER_FLOAT_TO_FIXED (scale_y),
|
||||
gravity);
|
||||
clutter_actor_set_scale_with_gravityx (self,
|
||||
CLUTTER_FLOAT_TO_FIXED (scale_x),
|
||||
CLUTTER_FLOAT_TO_FIXED (scale_y),
|
||||
gravity);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1927,7 +1931,8 @@ clutter_actor_get_id (ClutterActor *self)
|
||||
* @self: a #ClutterActor
|
||||
* @depth: Z co-ord
|
||||
*
|
||||
* Sets the Z co-ordinate of @self to @depth.
|
||||
* Sets the Z co-ordinate of @self to @depth. The Units of which are dependant
|
||||
* on the perspective setup.
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_depth (ClutterActor *self,
|
||||
@ -1942,7 +1947,7 @@ clutter_actor_set_depth (ClutterActor *self,
|
||||
/* Sets Z value. - FIXME: should invert ?*/
|
||||
priv->z = depth;
|
||||
|
||||
if (priv->parent_actor)
|
||||
if (priv->parent_actor && CLUTTER_IS_GROUP (priv->parent_actor))
|
||||
{
|
||||
/* We need to resort the group stacking order as to
|
||||
* correctly render alpha values.
|
||||
@ -2060,7 +2065,7 @@ clutter_actor_rotate_y (ClutterActor *self,
|
||||
* @width: Width of the clip rectangle
|
||||
* @height: Height of the clip rectangle
|
||||
*
|
||||
* Sets clip area for @self.
|
||||
* Sets clip area in pixels for @self.
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_clip (ClutterActor *self,
|
||||
@ -2090,7 +2095,7 @@ clutter_actor_set_clip (ClutterActor *self,
|
||||
* clutter_actor_remove_clip
|
||||
* @self: A #ClutterActor
|
||||
*
|
||||
* Removes clip area from @self.
|
||||
* Removes clip area in pixels from @self.
|
||||
*/
|
||||
void
|
||||
clutter_actor_remove_clip (ClutterActor *self)
|
||||
@ -2128,7 +2133,8 @@ clutter_actor_has_clip (ClutterActor *self)
|
||||
* Sets the parent of @self to @parent. The opposite function is
|
||||
* clutter_actor_unparent().
|
||||
*
|
||||
* This function should not be used by applications.
|
||||
* This function should not be used by applications but by custom
|
||||
* 'composite' actor sub classes.
|
||||
*/
|
||||
void
|
||||
clutter_actor_set_parent (ClutterActor *self,
|
||||
@ -2265,8 +2271,9 @@ clutter_actor_reparent (ClutterActor *self,
|
||||
|
||||
g_object_ref (self);
|
||||
|
||||
/* XXX: below assumes only containers can reparent */
|
||||
clutter_container_remove_actor (CLUTTER_CONTAINER (priv->parent_actor), self);
|
||||
/* FIXME: below assumes only containers can reparent */
|
||||
clutter_container_remove_actor (CLUTTER_CONTAINER (priv->parent_actor),
|
||||
self);
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (new_parent), self);
|
||||
|
||||
g_object_unref (self);
|
||||
|
@ -112,6 +112,77 @@ enum
|
||||
|
||||
static int texture_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static guchar*
|
||||
un_pre_multiply_alpha (const guchar *data,
|
||||
gint width,
|
||||
gint height,
|
||||
gint rowstride)
|
||||
{
|
||||
gint x,y;
|
||||
unsigned char *ret, *dst, *src;
|
||||
|
||||
ret = dst = g_malloc(sizeof(guchar) * height * rowstride);
|
||||
|
||||
/* FIXME: Optimise */
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
src = (guchar*)data + y * rowstride;
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
guchar alpha = src[3];
|
||||
if (alpha == 0)
|
||||
{
|
||||
src[0] = src[1] = src[2] = src[3] = alpha;
|
||||
}
|
||||
else
|
||||
{
|
||||
dst[0] = (((src[0] >> 16) & 0xff) * 255 ) / alpha;
|
||||
dst[1] = (((src[1] >> 8) & 0xff) * 255 ) / alpha;
|
||||
dst[2] = (((src[2] >> 0) & 0xff) * 255 ) / alpha;
|
||||
dst[3] = alpha;
|
||||
}
|
||||
dst += 4;
|
||||
src += 4;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static guchar*
|
||||
rgb_to_bgr (const guchar *data,
|
||||
gboolean has_alpha,
|
||||
gint width,
|
||||
gint height,
|
||||
gint rowstride)
|
||||
{
|
||||
gint x,y, bpp = 4;
|
||||
unsigned char *ret, *dst, *src;
|
||||
|
||||
ret = dst = g_malloc(sizeof(guchar) * height * rowstride);
|
||||
|
||||
if (!has_alpha)
|
||||
bpp = 3;
|
||||
|
||||
/* FIXME: Optimise */
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
src = (guchar*)data + y * rowstride;
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
dst[0] = src[2];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[0];
|
||||
if (has_alpha)
|
||||
dst[3] = src[3];
|
||||
dst += bpp;
|
||||
src += bpp;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
tile_dimension (int to_fill,
|
||||
int start_size,
|
||||
@ -447,11 +518,6 @@ texture_upload_data (ClutterTexture *texture,
|
||||
src_w = priv->x_tiles[x].size;
|
||||
src_h = priv->y_tiles[y].size;
|
||||
|
||||
pixtmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
|
||||
has_alpha,
|
||||
8,
|
||||
src_w, src_h);
|
||||
|
||||
/* clip */
|
||||
if (priv->x_tiles[x].pos + src_w > priv->width)
|
||||
src_w = priv->width - priv->x_tiles[x].pos;
|
||||
@ -459,6 +525,11 @@ texture_upload_data (ClutterTexture *texture,
|
||||
if (priv->y_tiles[y].pos + src_h > priv->height)
|
||||
src_h = priv->height - priv->y_tiles[y].pos;
|
||||
|
||||
pixtmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
|
||||
has_alpha,
|
||||
8,
|
||||
src_w, src_h);
|
||||
|
||||
gdk_pixbuf_copy_area (master_pixbuf,
|
||||
priv->x_tiles[x].pos,
|
||||
priv->y_tiles[y].pos,
|
||||
@ -466,7 +537,6 @@ texture_upload_data (ClutterTexture *texture,
|
||||
src_h,
|
||||
pixtmp,
|
||||
0, 0);
|
||||
|
||||
#ifdef CLUTTER_DUMP_TILES
|
||||
{
|
||||
gchar *filename;
|
||||
@ -543,6 +613,8 @@ clutter_texture_unrealize (ClutterActor *actor)
|
||||
* GL/ES cant do this - it probably makes sense
|
||||
* to move this kind of thing into a ClutterProxyTexture
|
||||
* where this behaviour can be better controlled.
|
||||
*
|
||||
* Or make it controllable via a property.
|
||||
*/
|
||||
if (priv->local_pixbuf == NULL)
|
||||
{
|
||||
@ -1009,7 +1081,10 @@ clutter_texture_get_pixbuf (ClutterTexture* texture)
|
||||
if (priv->tiles == NULL)
|
||||
return NULL;
|
||||
|
||||
if (priv->pixel_format == CGL_RGB)
|
||||
if (priv->pixel_format == CGL_YCBCR_MESA)
|
||||
return NULL; /* FIXME: convert YUV */
|
||||
|
||||
if (priv->pixel_format == CGL_RGB || priv->pixel_format == CGL_BGR)
|
||||
bpp = 3;
|
||||
|
||||
if (!priv->is_tiled)
|
||||
@ -1019,8 +1094,6 @@ clutter_texture_get_pixbuf (ClutterTexture* texture)
|
||||
if (!pixels)
|
||||
return NULL;
|
||||
|
||||
/* FIXME: cogl */
|
||||
|
||||
glBindTexture(priv->target_type, priv->tiles[0]);
|
||||
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, priv->width);
|
||||
@ -1030,13 +1103,16 @@ clutter_texture_get_pixbuf (ClutterTexture* texture)
|
||||
/* No such func in gles... */
|
||||
glGetTexImage (priv->target_type,
|
||||
0,
|
||||
priv->pixel_format,
|
||||
priv->pixel_type,
|
||||
(priv->pixel_format == CGL_RGBA
|
||||
|| priv->pixel_format == CGL_BGRA) ?
|
||||
CGL_RGBA : CGL_RGB,
|
||||
PIXEL_TYPE,
|
||||
(GLvoid*)pixels);
|
||||
|
||||
pixbuf = gdk_pixbuf_new_from_data ((const guchar*)pixels,
|
||||
GDK_COLORSPACE_RGB,
|
||||
(priv->pixel_format == GL_RGBA),
|
||||
(priv->pixel_format == CGL_RGBA
|
||||
|| priv->pixel_format == CGL_BGRA),
|
||||
8,
|
||||
priv->width,
|
||||
priv->height,
|
||||
@ -1051,7 +1127,8 @@ clutter_texture_get_pixbuf (ClutterTexture* texture)
|
||||
i = 0;
|
||||
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
|
||||
(priv->pixel_format == GL_RGBA),
|
||||
(priv->pixel_format == CGL_RGBA
|
||||
|| priv->pixel_format == CGL_BGRA),
|
||||
8,
|
||||
priv->width,
|
||||
priv->height);
|
||||
@ -1074,8 +1151,10 @@ clutter_texture_get_pixbuf (ClutterTexture* texture)
|
||||
|
||||
glGetTexImage (priv->target_type,
|
||||
0,
|
||||
priv->pixel_format,
|
||||
priv->pixel_type,
|
||||
(priv->pixel_format == CGL_RGBA
|
||||
|| priv->pixel_format == CGL_BGRA) ?
|
||||
CGL_RGBA : CGL_RGB,
|
||||
PIXEL_TYPE,
|
||||
(GLvoid *) pixels);
|
||||
|
||||
/* Clip */
|
||||
@ -1083,12 +1162,13 @@ clutter_texture_get_pixbuf (ClutterTexture* texture)
|
||||
src_w = priv->width - priv->x_tiles[x].pos;
|
||||
|
||||
if (priv->y_tiles[y].pos + src_h > priv->height)
|
||||
src_h = priv->height = priv->y_tiles[y].pos;
|
||||
src_h = priv->height - priv->y_tiles[y].pos;
|
||||
|
||||
tmp_pixb =
|
||||
gdk_pixbuf_new_from_data ((const guchar*)pixels,
|
||||
GDK_COLORSPACE_RGB,
|
||||
(priv->pixel_format == GL_RGBA),
|
||||
(priv->pixel_format == CGL_RGBA
|
||||
|| priv->pixel_format == CGL_BGRA),
|
||||
8,
|
||||
src_w,
|
||||
src_h,
|
||||
@ -1154,6 +1234,7 @@ clutter_texture_set_from_rgb_data (ClutterTexture *texture,
|
||||
ClutterTexturePrivate *priv;
|
||||
gboolean texture_dirty = TRUE, size_change = FALSE;
|
||||
COGLenum prev_format;
|
||||
guchar *copy_data = NULL;
|
||||
|
||||
priv = texture->priv;
|
||||
|
||||
@ -1173,13 +1254,20 @@ clutter_texture_set_from_rgb_data (ClutterTexture *texture,
|
||||
|
||||
if (flags & CLUTTER_TEXTURE_RGB_FLAG_BGR)
|
||||
{
|
||||
/* FIXME: We actually need to convert for GLES */
|
||||
#if HAVE_COGL_GL
|
||||
if (has_alpha)
|
||||
priv->pixel_format = CGL_BGRA;
|
||||
else
|
||||
priv->pixel_format = CGL_BGR;
|
||||
#else
|
||||
/* GLES has no BGR format*/
|
||||
copy_data = rgb_to_bgr (data, has_alpha, width, height, rowstride);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (flags & CLUTTER_TEXTURE_RGB_FLAG_PREMULT)
|
||||
copy_data = un_pre_multiply_alpha (data, width, height, rowstride);
|
||||
|
||||
if (prev_format != priv->pixel_format || priv->pixel_type != PIXEL_TYPE)
|
||||
texture_dirty = TRUE;
|
||||
|
||||
@ -1232,7 +1320,7 @@ clutter_texture_set_from_rgb_data (ClutterTexture *texture,
|
||||
|
||||
/* Set Error from this */
|
||||
texture_upload_data (texture,
|
||||
data,
|
||||
copy_data != NULL ? copy_data : data,
|
||||
has_alpha,
|
||||
width,
|
||||
height,
|
||||
@ -1259,6 +1347,9 @@ clutter_texture_set_from_rgb_data (ClutterTexture *texture,
|
||||
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR(texture)))
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR(texture));
|
||||
|
||||
if (copy_data != NULL)
|
||||
g_free (copy_data);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -94,17 +94,23 @@ frame_cb (ClutterTimeline *timeline,
|
||||
{
|
||||
gdouble scale_x, scale_y;
|
||||
|
||||
|
||||
clutter_actor_get_scale (oh->hand[i], &scale_x, &scale_y);
|
||||
|
||||
/* Rotate each hand around there centers - to get this we need
|
||||
* to take into account any scaling.
|
||||
*
|
||||
* FIXME: scaling causes drift so disabled for now. Need rotation
|
||||
* unit based functions to fix.
|
||||
*/
|
||||
clutter_actor_rotate_z
|
||||
(oh->hand[i],
|
||||
- 6.0 * frame_num,
|
||||
#if 0
|
||||
(clutter_actor_get_width (oh->hand[i]) / 2) * scale_x,
|
||||
(clutter_actor_get_height (oh->hand[i]) / 2) * scale_y);
|
||||
(clutter_actor_get_height (oh->hand[i]) / 2) * scale_y
|
||||
#endif
|
||||
(clutter_actor_get_width (oh->hand[i]) / 2),
|
||||
(clutter_actor_get_height (oh->hand[i]) / 2));
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,10 +209,12 @@ main (int argc, char *argv[])
|
||||
/* Add to our group group */
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (oh->group), oh->hand[i]);
|
||||
|
||||
#if 0 /* FIXME: disabled as causes drift - see comment above */
|
||||
if (i % 2)
|
||||
clutter_behaviour_apply (scaler_1, oh->hand[i]);
|
||||
else
|
||||
clutter_behaviour_apply (scaler_2, oh->hand[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
clutter_actor_show_all (oh->group);
|
||||
|
Loading…
Reference in New Issue
Block a user