mirror of
https://github.com/brl/mutter.git
synced 2024-11-23 00:20:42 -05:00
2007-10-08 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-actor.c: * clutter/clutter-actor.h: * clutter/clutter-private.h: * clutter/clutter-main.c: Add a hash to global clutter context mapping all parented actor id's to actors. Add clutter_get_actor_by_id() call. Convert picking machinery to use above. (performance/simpler composite actor creation) * clutter/clutter-stage.c: (clutter_stage_fullscreen), (clutter_stage_unfullscreen), (clutter_stage_event): Only set the fullscreen property on stage state fullscreen event(#545) Experimental as could be painful to implement on non X backends.
This commit is contained in:
parent
9e81870d0b
commit
34a40de3c5
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2007-10-08 Matthew Allum <mallum@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-actor.c:
|
||||||
|
* clutter/clutter-actor.h:
|
||||||
|
* clutter/clutter-private.h:
|
||||||
|
* clutter/clutter-main.c:
|
||||||
|
Add a hash to global clutter context mapping all parented actor
|
||||||
|
id's to actors.
|
||||||
|
Add clutter_get_actor_by_id() call.
|
||||||
|
Convert picking machinery to use above.
|
||||||
|
(performance/simpler composite actor creation)
|
||||||
|
|
||||||
|
* clutter/clutter-stage.c: (clutter_stage_fullscreen),
|
||||||
|
(clutter_stage_unfullscreen), (clutter_stage_event):
|
||||||
|
Only set the fullscreen property on stage state fullscreen event(#545)
|
||||||
|
Experimental as could be painful to implement on non X backends.
|
||||||
|
|
||||||
2007-10-08 Emmanuele Bassi <ebassi@openedhand.com>
|
2007-10-08 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-script.c (json_parse_end):
|
* clutter/clutter-script.c (json_parse_end):
|
||||||
|
@ -2655,9 +2655,14 @@ void
|
|||||||
clutter_actor_set_parent (ClutterActor *self,
|
clutter_actor_set_parent (ClutterActor *self,
|
||||||
ClutterActor *parent)
|
ClutterActor *parent)
|
||||||
{
|
{
|
||||||
|
ClutterMainContext *clutter_context;
|
||||||
|
|
||||||
|
clutter_context = clutter_context_get_default ();
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
||||||
g_return_if_fail (CLUTTER_IS_ACTOR (parent));
|
g_return_if_fail (CLUTTER_IS_ACTOR (parent));
|
||||||
g_return_if_fail (self != parent);
|
g_return_if_fail (self != parent);
|
||||||
|
g_return_if_fail (clutter_context != NULL);
|
||||||
|
|
||||||
if (self->priv->parent_actor != NULL)
|
if (self->priv->parent_actor != NULL)
|
||||||
{
|
{
|
||||||
@ -2674,6 +2679,10 @@ clutter_actor_set_parent (ClutterActor *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_hash_table_insert (clutter_context->actor_hash,
|
||||||
|
(gpointer)clutter_actor_get_id(self),
|
||||||
|
(gpointer)self);
|
||||||
|
|
||||||
g_object_ref_sink (self);
|
g_object_ref_sink (self);
|
||||||
self->priv->parent_actor = parent;
|
self->priv->parent_actor = parent;
|
||||||
g_signal_emit (self, actor_signals[PARENT_SET], 0, NULL);
|
g_signal_emit (self, actor_signals[PARENT_SET], 0, NULL);
|
||||||
@ -2718,8 +2727,12 @@ void
|
|||||||
clutter_actor_unparent (ClutterActor *self)
|
clutter_actor_unparent (ClutterActor *self)
|
||||||
{
|
{
|
||||||
ClutterActor *old_parent;
|
ClutterActor *old_parent;
|
||||||
|
ClutterMainContext *clutter_context;
|
||||||
|
|
||||||
|
clutter_context = clutter_context_get_default ();
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
||||||
|
g_return_if_fail (clutter_context != NULL);
|
||||||
|
|
||||||
if (self->priv->parent_actor == NULL)
|
if (self->priv->parent_actor == NULL)
|
||||||
return;
|
return;
|
||||||
@ -2737,6 +2750,9 @@ clutter_actor_unparent (ClutterActor *self)
|
|||||||
self->priv->parent_actor = NULL;
|
self->priv->parent_actor = NULL;
|
||||||
g_signal_emit (self, actor_signals[PARENT_SET], 0, old_parent);
|
g_signal_emit (self, actor_signals[PARENT_SET], 0, old_parent);
|
||||||
|
|
||||||
|
g_hash_table_remove (clutter_context->actor_hash,
|
||||||
|
(gconstpointer)clutter_actor_get_id(self));
|
||||||
|
|
||||||
g_object_unref (self);
|
g_object_unref (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,6 +373,8 @@ clutter_actor_unset_reactive (ClutterActor *actor);
|
|||||||
gboolean
|
gboolean
|
||||||
clutter_actor_is_reactive (ClutterActor *actor);
|
clutter_actor_is_reactive (ClutterActor *actor);
|
||||||
|
|
||||||
|
ClutterActor*
|
||||||
|
clutter_get_actor_by_id (guint32 id);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -232,10 +232,9 @@ _clutter_do_pick (ClutterStage *stage,
|
|||||||
/* Decode color back into an ID, taking into account fb depth */
|
/* 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);
|
id = pixel[2]>>(8-b) | pixel[1]<<b>>(8-g) | pixel[0]<<(g+b)>>(8-r);
|
||||||
|
|
||||||
return clutter_container_find_child_by_id (CLUTTER_CONTAINER (stage), id);
|
return clutter_get_actor_by_id (id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_main_quit:
|
* clutter_main_quit:
|
||||||
*
|
*
|
||||||
@ -761,6 +760,8 @@ pre_parse_hook (GOptionContext *context,
|
|||||||
clutter_context->font_map = PANGO_FT2_FONT_MAP (pango_ft2_font_map_new ());
|
clutter_context->font_map = PANGO_FT2_FONT_MAP (pango_ft2_font_map_new ());
|
||||||
pango_ft2_font_map_set_resolution (clutter_context->font_map, 96.0, 96.0);
|
pango_ft2_font_map_set_resolution (clutter_context->font_map, 96.0, 96.0);
|
||||||
|
|
||||||
|
clutter_context->actor_hash = g_hash_table_new (NULL, NULL);
|
||||||
|
|
||||||
backend = clutter_context->backend;
|
backend = clutter_context->backend;
|
||||||
g_assert (CLUTTER_IS_BACKEND (backend));
|
g_assert (CLUTTER_IS_BACKEND (backend));
|
||||||
|
|
||||||
@ -1318,6 +1319,27 @@ clutter_do_event (ClutterEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_get_actor_by_id
|
||||||
|
* @id: a #ClutterActor ID.
|
||||||
|
*
|
||||||
|
* FIXME.
|
||||||
|
*
|
||||||
|
* Since: 0.6
|
||||||
|
*/
|
||||||
|
ClutterActor*
|
||||||
|
clutter_get_actor_by_id (guint32 id)
|
||||||
|
{
|
||||||
|
ClutterMainContext *context;
|
||||||
|
|
||||||
|
context = clutter_context_get_default ();
|
||||||
|
|
||||||
|
g_return_val_if_fail (context != NULL, NULL);
|
||||||
|
g_return_val_if_fail (context->actor_hash != NULL, NULL);
|
||||||
|
|
||||||
|
return g_hash_table_lookup (context->actor_hash, (gconstpointer)id);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
clutter_base_init (void)
|
clutter_base_init (void)
|
||||||
{
|
{
|
||||||
@ -1336,3 +1358,4 @@ clutter_base_init (void)
|
|||||||
foo = clutter_actor_get_type ();
|
foo = clutter_actor_get_type ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,22 +65,20 @@ typedef struct _ClutterMainContext ClutterMainContext;
|
|||||||
|
|
||||||
struct _ClutterMainContext
|
struct _ClutterMainContext
|
||||||
{
|
{
|
||||||
/* holds a pointer to the backend, which controls the stage */
|
ClutterBackend *backend; /* holds a pointer to the windowing
|
||||||
ClutterBackend *backend;
|
system backend */
|
||||||
|
GQueue *events_queue; /* the main event queue */
|
||||||
/* the main event queue */
|
|
||||||
GQueue *events_queue;
|
|
||||||
|
|
||||||
PangoFT2FontMap *font_map;
|
PangoFT2FontMap *font_map;
|
||||||
|
guint update_idle; /* repaint idler id */
|
||||||
|
|
||||||
guint update_idle;
|
guint is_initialized : 1;
|
||||||
|
|
||||||
guint is_initialized : 1;
|
|
||||||
GTimer *timer; /* Used for debugging scheduler */
|
GTimer *timer; /* Used for debugging scheduler */
|
||||||
|
|
||||||
ClutterPickMode pick_mode; /* Indicates pick render mode */
|
ClutterPickMode pick_mode; /* Indicates pick render mode */
|
||||||
guint motion_events_per_actor : 1;
|
guint motion_events_per_actor : 1;/* set for enter/leave events */
|
||||||
gint num_reactives; /* Num of reactive actors */
|
gint num_reactives; /* Num of reactive actors */
|
||||||
|
|
||||||
|
GHashTable *actor_hash; /* Hash of all actors mapped to id */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CLUTTER_CONTEXT() (clutter_context_get_default ())
|
#define CLUTTER_CONTEXT() (clutter_context_get_default ())
|
||||||
|
@ -608,13 +608,12 @@ clutter_stage_fullscreen (ClutterStage *stage)
|
|||||||
priv = stage->priv;
|
priv = stage->priv;
|
||||||
if (!priv->is_fullscreen)
|
if (!priv->is_fullscreen)
|
||||||
{
|
{
|
||||||
/* Only set if backend implements */
|
/* Only set if backend implements.
|
||||||
|
* Also see clutter_stage_event() for setting priv->is_fullscreen
|
||||||
|
* on state change event.
|
||||||
|
*/
|
||||||
if (CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen)
|
if (CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen)
|
||||||
{
|
CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen (stage, TRUE);
|
||||||
priv->is_fullscreen = TRUE;
|
|
||||||
CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen (stage, TRUE);
|
|
||||||
g_object_notify (G_OBJECT (stage), "fullscreen");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,11 +639,7 @@ clutter_stage_unfullscreen (ClutterStage *stage)
|
|||||||
{
|
{
|
||||||
/* Only set if backend implements */
|
/* Only set if backend implements */
|
||||||
if (CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen)
|
if (CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen)
|
||||||
{
|
CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen (stage, FALSE);
|
||||||
priv->is_fullscreen = FALSE;
|
|
||||||
CLUTTER_STAGE_GET_CLASS (stage)->set_fullscreen (stage, FALSE);
|
|
||||||
g_object_notify (G_OBJECT (stage), "fullscreen");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -819,9 +814,13 @@ gboolean
|
|||||||
clutter_stage_event (ClutterStage *stage,
|
clutter_stage_event (ClutterStage *stage,
|
||||||
ClutterEvent *event)
|
ClutterEvent *event)
|
||||||
{
|
{
|
||||||
|
ClutterStagePrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
|
g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
|
||||||
g_return_val_if_fail (event != NULL, FALSE);
|
g_return_val_if_fail (event != NULL, FALSE);
|
||||||
|
|
||||||
|
priv = stage->priv;
|
||||||
|
|
||||||
if (event->type == CLUTTER_DELETE)
|
if (event->type == CLUTTER_DELETE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -835,9 +834,15 @@ clutter_stage_event (ClutterStage *stage,
|
|||||||
if (event->stage_state.changed_mask & CLUTTER_STAGE_STATE_FULLSCREEN)
|
if (event->stage_state.changed_mask & CLUTTER_STAGE_STATE_FULLSCREEN)
|
||||||
{
|
{
|
||||||
if (event->stage_state.new_state & CLUTTER_STAGE_STATE_FULLSCREEN)
|
if (event->stage_state.new_state & CLUTTER_STAGE_STATE_FULLSCREEN)
|
||||||
g_signal_emit (stage, stage_signals[FULLSCREEN], 0);
|
{
|
||||||
|
priv->is_fullscreen = TRUE;
|
||||||
|
g_signal_emit (stage, stage_signals[FULLSCREEN], 0);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
g_signal_emit (stage, stage_signals[UNFULLSCREEN], 0);
|
{
|
||||||
|
priv->is_fullscreen = FALSE;
|
||||||
|
g_signal_emit (stage, stage_signals[UNFULLSCREEN], 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->stage_state.changed_mask & CLUTTER_STAGE_STATE_ACTIVATED)
|
if (event->stage_state.changed_mask & CLUTTER_STAGE_STATE_ACTIVATED)
|
||||||
|
Loading…
Reference in New Issue
Block a user