2007-07-12 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-actor.c: (clutter_actor_paint): * clutter/clutter-stage.c: (clutter_stage_get_actor_at_pos): * clutter/cogl/cogl.h: * clutter/cogl/gl/cogl.c: (cogl_get_viewport): * clutter/cogl/gles/cogl.c: (cogl_get_viewport): Based on patch from Pan Bohui, See; http://bugzilla.openedhand.com/show_bug.cgi?id=390 * TODO: More misc updates.
This commit is contained in:
parent
c2345a5337
commit
8fcfa9e2db
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2007-07-12 Matthew Allum <mallum@openedhand.com>
|
||||
|
||||
* clutter/clutter-actor.c: (clutter_actor_paint):
|
||||
* clutter/clutter-stage.c: (clutter_stage_get_actor_at_pos):
|
||||
* clutter/cogl/cogl.h:
|
||||
* clutter/cogl/gl/cogl.c: (cogl_get_viewport):
|
||||
* clutter/cogl/gles/cogl.c: (cogl_get_viewport):
|
||||
Hopefully fix clutter_actor_at_pos on !32bpp displays.
|
||||
Based on patch from Pan Bohui, See;
|
||||
http://bugzilla.openedhand.com/show_bug.cgi?id=390
|
||||
|
||||
* TODO:
|
||||
More misc updates.
|
||||
|
||||
2007-07-11 Emmanuele Bassi <ebassi@openedhand.com>
|
||||
|
||||
* clutter/clutter-behaviour-opacity.c:
|
||||
|
1
TODO
1
TODO
@ -45,6 +45,7 @@ Definetly:
|
||||
Nice/Maybe:
|
||||
===========
|
||||
|
||||
- Improve cogl massively to be be processing like.
|
||||
- Gradient support ?
|
||||
- Rectangle like props to all actors
|
||||
- Glitz integration
|
||||
|
@ -682,15 +682,18 @@ clutter_actor_paint (ClutterActor *self)
|
||||
|
||||
if (G_UNLIKELY(context->pick_mode == TRUE))
|
||||
{
|
||||
gint r, g, b;
|
||||
ClutterColor col;
|
||||
guint32 id;
|
||||
|
||||
id = clutter_actor_get_id (self);
|
||||
|
||||
/* Encode the actor id into a color */
|
||||
col.red = (id >> 16) & 0xff;
|
||||
col.green = (id >> 8) & 0xff;
|
||||
col.blue = id & 0xff;
|
||||
cogl_get_bitmasks (&r, &g, &b, NULL);
|
||||
|
||||
/* Encode the actor id into a color, taking into account bpp */
|
||||
col.red = ((id >> (g+b)) & (0xff>>(8-r)))<<(8-r);
|
||||
col.green = ((id >> b) & (0xff>>(8-g))) << (8-g);
|
||||
col.blue = (id & (0xff>>(8-b)))<<(8-b);
|
||||
col.alpha = 0xff;
|
||||
|
||||
/* Actor will then paint silhouette of itself in supplied color.
|
||||
|
@ -783,6 +783,7 @@ clutter_stage_get_actor_at_pos (ClutterStage *stage,
|
||||
GLint viewport[4];
|
||||
ClutterColor white = { 0xff, 0xff, 0xff, 0xff };
|
||||
guint32 id;
|
||||
gint r,g,b;
|
||||
|
||||
context = clutter_context_get_default ();
|
||||
|
||||
@ -796,19 +797,17 @@ clutter_stage_get_actor_at_pos (ClutterStage *stage,
|
||||
clutter_actor_paint (CLUTTER_ACTOR (stage));
|
||||
context->pick_mode = FALSE;
|
||||
|
||||
/* Calls should work under both GL and GLES, note GLES needs RGBA
|
||||
*
|
||||
* FIXME: of course we need to handle the case where the frame buffer isn't
|
||||
* 24bpp, i.e 16bpp which could be the case with GLES ?.
|
||||
*/
|
||||
/* Calls should work under both GL and GLES, note GLES needs RGBA */
|
||||
glGetIntegerv(GL_VIEWPORT, viewport);
|
||||
glReadPixels(x, viewport[3] - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
|
||||
|
||||
if (pixel[0] == 0xff && pixel[1] == 0xff && pixel[2] == 0xff)
|
||||
return CLUTTER_ACTOR(stage);
|
||||
|
||||
/* Decode color back into an ID */
|
||||
id = pixel[2] | pixel[1] << 8 | pixel[0] << 16;
|
||||
cogl_get_bitmasks (&r, &g, &b, NULL);
|
||||
|
||||
/* Decode color back into an ID, taking into account fb depth */
|
||||
id = pixel[2]>>(8-b) | pixel[1]<<b>>(8-g) | pixel[0]<<(g+b)>>(8-r);
|
||||
|
||||
return clutter_group_find_child_by_id (CLUTTER_GROUP (stage), id);
|
||||
}
|
||||
|
@ -198,6 +198,9 @@ cogl_get_projection_matrix (ClutterFixed m[16]);
|
||||
void
|
||||
cogl_get_viewport (ClutterFixed v[4]);
|
||||
|
||||
void
|
||||
cogl_get_bitmasks (gint *red, gint *green, gint *blue, gint *alpha);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __COGL_H__ */
|
||||
|
@ -636,3 +636,16 @@ cogl_get_viewport (ClutterFixed v[4])
|
||||
v[2] = CLUTTER_FLOAT_TO_FIXED (vd[2]);
|
||||
v[3] = CLUTTER_FLOAT_TO_FIXED (vd[3]);
|
||||
}
|
||||
|
||||
void
|
||||
cogl_get_bitmasks (gint *red, gint *green, gint *blue, gint *alpha)
|
||||
{
|
||||
if (red)
|
||||
GE( glGetIntegerv(GL_RED_BITS, red) );
|
||||
if (green)
|
||||
GE( glGetIntegerv(GL_GREEN_BITS, green) );
|
||||
if (blue)
|
||||
GE( glGetIntegerv(GL_BLUE_BITS, blue) );
|
||||
if (alpha)
|
||||
GE( glGetIntegerv(GL_ALPHA_BITS, alpha ) );
|
||||
}
|
||||
|
@ -566,3 +566,16 @@ cogl_get_viewport (ClutterFixed v[4])
|
||||
{
|
||||
glGetFixedv(GL_VIEWPORT, &v[0]);
|
||||
}
|
||||
|
||||
void
|
||||
cogl_get_bitmasks (gint *red, gint *green, gint *blue, gint *alpha)
|
||||
{
|
||||
if (red)
|
||||
GE( glGetInteger(GL_RED_BITS, red) );
|
||||
if (green)
|
||||
GE( glGetInteger(GL_GREEN_BITS, green) );
|
||||
if (blue)
|
||||
GE( glGetInteger(GL_BLUE_BITS, blue) );
|
||||
if (alpha)
|
||||
GE( glGetInteger(GL_ALPHA_BITS, alpha ) );
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user