Tweak/fix/improve workspace switching effect
This commit is contained in:
parent
10f9a7f252
commit
53d89a7fd5
@ -1980,6 +1980,17 @@ mutter_get_overlay_group_for_screen (MetaScreen *screen)
|
|||||||
return info->overlay_group;
|
return info->overlay_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClutterActor *
|
||||||
|
mutter_get_window_group_for_screen (MetaScreen *screen)
|
||||||
|
{
|
||||||
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
if (!info)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return info->window_group;
|
||||||
|
}
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
mutter_get_windows (MetaScreen *screen)
|
mutter_get_windows (MetaScreen *screen)
|
||||||
{
|
{
|
||||||
|
@ -418,6 +418,8 @@ mutter_plugin_manager_load (MutterPluginManager *plugin_mgr)
|
|||||||
else
|
else
|
||||||
g_message ("Unable to load plugin [%s]\n", path);
|
g_message ("Unable to load plugin [%s]\n", path);
|
||||||
|
|
||||||
|
g_message ("got this far with [%s]\n", path);
|
||||||
|
|
||||||
g_free (path);
|
g_free (path);
|
||||||
g_free (plugin_string);
|
g_free (plugin_string);
|
||||||
}
|
}
|
||||||
@ -792,6 +794,15 @@ mutter_plugin_get_stage (MutterPlugin *plugin)
|
|||||||
return mutter_get_stage_for_screen (plugin_mgr->screen);
|
return mutter_get_stage_for_screen (plugin_mgr->screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClutterActor *
|
||||||
|
mutter_plugin_get_window_group (MutterPlugin *plugin)
|
||||||
|
{
|
||||||
|
MutterPluginPrivate *priv = plugin->manager_private;
|
||||||
|
MutterPluginManager *plugin_mgr = priv->self;
|
||||||
|
|
||||||
|
return mutter_get_window_group_for_screen (plugin_mgr->screen);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mutter_plugin_effect_completed (MutterPlugin *plugin,
|
mutter_plugin_effect_completed (MutterPlugin *plugin,
|
||||||
MutterWindow *actor,
|
MutterWindow *actor,
|
||||||
|
@ -88,6 +88,7 @@ struct PluginPrivate
|
|||||||
ClutterEffectTemplate *maximize_effect;
|
ClutterEffectTemplate *maximize_effect;
|
||||||
ClutterEffectTemplate *map_effect;
|
ClutterEffectTemplate *map_effect;
|
||||||
ClutterEffectTemplate *switch_workspace_effect;
|
ClutterEffectTemplate *switch_workspace_effect;
|
||||||
|
ClutterEffectTemplate *switch_workspace_arrow_effect;
|
||||||
ClutterEffectTemplate *panel_slide_effect;
|
ClutterEffectTemplate *panel_slide_effect;
|
||||||
|
|
||||||
/* Valid only when switch_workspace effect is in progress */
|
/* Valid only when switch_workspace effect is in progress */
|
||||||
@ -204,10 +205,10 @@ switch_workspace (const GList **actors, gint from, gint to,
|
|||||||
ClutterActor *group1 = clutter_group_new ();
|
ClutterActor *group1 = clutter_group_new ();
|
||||||
ClutterActor *group2 = clutter_group_new ();
|
ClutterActor *group2 = clutter_group_new ();
|
||||||
ClutterActor *group3 = clutter_group_new ();
|
ClutterActor *group3 = clutter_group_new ();
|
||||||
ClutterActor *stage, *label, *rect;
|
ClutterActor *stage, *label, *rect, *window_layer, *overlay_layer;
|
||||||
gint to_x, to_y, from_x = 0, from_y = 0;
|
gint to_x, to_y, from_x = 0, from_y = 0;
|
||||||
ClutterColor white = { 0xff, 0xff, 0xff, 0xff };
|
ClutterColor white = { 0xff, 0xff, 0xff, 0xff };
|
||||||
ClutterColor black = { 0x44, 0x44, 0x44, 0xff };
|
ClutterColor black = { 0x33, 0x33, 0x33, 0xff };
|
||||||
gint screen_width;
|
gint screen_width;
|
||||||
gint screen_height;
|
gint screen_height;
|
||||||
|
|
||||||
@ -215,11 +216,12 @@ switch_workspace (const GList **actors, gint from, gint to,
|
|||||||
|
|
||||||
mutter_plugin_query_screen_size (plugin, &screen_width, &screen_height);
|
mutter_plugin_query_screen_size (plugin, &screen_width, &screen_height);
|
||||||
|
|
||||||
clutter_actor_set_scale (group2, 0.0, 0.0);
|
window_layer = mutter_plugin_get_window_group (plugin);
|
||||||
|
overlay_layer = mutter_plugin_get_overlay_group (plugin);
|
||||||
|
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group2);
|
clutter_container_add_actor (CLUTTER_CONTAINER (window_layer), group1);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group1);
|
clutter_container_add_actor (CLUTTER_CONTAINER (window_layer), group2);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group3);
|
clutter_container_add_actor (CLUTTER_CONTAINER (overlay_layer), group3);
|
||||||
|
|
||||||
if (from == to)
|
if (from == to)
|
||||||
{
|
{
|
||||||
@ -274,110 +276,89 @@ switch_workspace (const GList **actors, gint from, gint to,
|
|||||||
l = l->prev;
|
l = l->prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Make arrow indicator */
|
||||||
rect = clutter_rectangle_new ();
|
rect = clutter_rectangle_new ();
|
||||||
clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &black);
|
clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &white);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (group3), rect);
|
clutter_container_add_actor (CLUTTER_CONTAINER (group3), rect);
|
||||||
|
|
||||||
label = clutter_label_new ();
|
label = clutter_label_new ();
|
||||||
clutter_label_set_font_name (CLUTTER_LABEL (label), "Sans Bold 148");
|
clutter_label_set_font_name (CLUTTER_LABEL (label), "Sans Bold 148");
|
||||||
clutter_label_set_color (CLUTTER_LABEL (label), &white);
|
clutter_label_set_color (CLUTTER_LABEL (label), &black);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (group3), label);
|
clutter_container_add_actor (CLUTTER_CONTAINER (group3), label);
|
||||||
|
|
||||||
clutter_actor_set_size (rect,
|
clutter_actor_set_size (rect,
|
||||||
clutter_actor_get_width (label),
|
clutter_actor_get_width (label),
|
||||||
clutter_actor_get_height (label));
|
clutter_actor_get_height (label));
|
||||||
|
|
||||||
|
|
||||||
clutter_actor_set_opacity (group3, 0);
|
|
||||||
|
|
||||||
ppriv->actors = (GList **)actors;
|
ppriv->actors = (GList **)actors;
|
||||||
ppriv->desktop1 = group1;
|
ppriv->desktop1 = group1;
|
||||||
ppriv->desktop2 = group2;
|
ppriv->desktop2 = group2;
|
||||||
ppriv->d_overlay = group3;
|
ppriv->d_overlay = group3;
|
||||||
|
|
||||||
clutter_effect_fade (ppriv->switch_workspace_effect, group3,
|
|
||||||
128,
|
|
||||||
NULL, NULL);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
ppriv->tml_switch_workspace2 =
|
|
||||||
clutter_effect_scale (ppriv->switch_workspace_effect, group2,
|
|
||||||
1.0, 1.0,
|
|
||||||
on_switch_workspace_effect_complete,
|
|
||||||
actors);
|
|
||||||
|
|
||||||
ppriv->tml_switch_workspace1 =
|
|
||||||
clutter_effect_scale (ppriv->switch_workspace_effect, group1,
|
|
||||||
0.0, 0.0,
|
|
||||||
NULL, NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (direction)
|
switch (direction)
|
||||||
{
|
{
|
||||||
case META_MOTION_UP:
|
case META_MOTION_UP:
|
||||||
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\221");
|
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\221");
|
||||||
|
|
||||||
from_x = 0;
|
|
||||||
from_y = screen_height;
|
|
||||||
|
|
||||||
to_x = 0;
|
to_x = 0;
|
||||||
to_y = 0;
|
to_y = -screen_height;
|
||||||
clutter_actor_set_position (group2, 0, screen_height);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case META_MOTION_DOWN:
|
case META_MOTION_DOWN:
|
||||||
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\223");
|
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\223");
|
||||||
|
|
||||||
from_x = 0;
|
|
||||||
from_y = screen_height;
|
|
||||||
|
|
||||||
to_x = 0;
|
to_x = 0;
|
||||||
to_y = 0;
|
to_y = -screen_height;
|
||||||
clutter_actor_set_position (group2, 0, screen_height * -1);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case META_MOTION_LEFT:
|
case META_MOTION_LEFT:
|
||||||
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\220");
|
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\220");
|
||||||
|
|
||||||
from_x = screen_width * -1;
|
to_x = -screen_width * -1;
|
||||||
from_y = 0;
|
|
||||||
|
|
||||||
to_x = 0;
|
|
||||||
to_y = 0;
|
to_y = 0;
|
||||||
clutter_actor_set_position (group2, screen_width, 0);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case META_MOTION_RIGHT:
|
case META_MOTION_RIGHT:
|
||||||
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\222");
|
clutter_label_set_text (CLUTTER_LABEL (label), "\342\206\222");
|
||||||
|
|
||||||
from_x = screen_width;
|
to_x = -screen_width;
|
||||||
from_y = 0;
|
|
||||||
|
|
||||||
to_x = 0;
|
|
||||||
to_y = 0;
|
to_y = 0;
|
||||||
clutter_actor_set_position (group2, screen_width * -1, 0);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
clutter_actor_set_position (group3,
|
/* dest group offscreen and on top */
|
||||||
(screen_width - clutter_actor_get_width (group3)) / 2,
|
clutter_actor_set_position (group2, to_x, to_y); /* *-1 for simpler */
|
||||||
(screen_height - clutter_actor_get_height (group3)) / 2);
|
clutter_actor_raise_top (group2);
|
||||||
|
|
||||||
|
/* center arrow */
|
||||||
|
clutter_actor_set_position
|
||||||
|
(group3,
|
||||||
|
(screen_width - clutter_actor_get_width (group3)) / 2,
|
||||||
|
(screen_height - clutter_actor_get_height (group3)) / 2);
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
/* workspace were going too */
|
||||||
ppriv->tml_switch_workspace2 =
|
ppriv->tml_switch_workspace2 =
|
||||||
clutter_effect_move (ppriv->switch_workspace_effect, group2,
|
clutter_effect_move (ppriv->switch_workspace_effect, group2,
|
||||||
to_x, to_y,
|
0, 0,
|
||||||
on_switch_workspace_effect_complete,
|
on_switch_workspace_effect_complete,
|
||||||
|
|
||||||
actors);
|
actors);
|
||||||
|
/* coming from */
|
||||||
ppriv->tml_switch_workspace1 =
|
ppriv->tml_switch_workspace1 =
|
||||||
clutter_effect_move (ppriv->switch_workspace_effect, group1,
|
clutter_effect_move (ppriv->switch_workspace_effect, group1,
|
||||||
from_x, from_y,
|
to_x, to_y,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
#endif
|
|
||||||
|
/* arrow */
|
||||||
|
clutter_effect_fade (ppriv->switch_workspace_arrow_effect, group3,
|
||||||
|
0,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1129,6 +1110,15 @@ do_init (const char *params)
|
|||||||
switch_timeout),
|
switch_timeout),
|
||||||
CLUTTER_ALPHA_SINE_INC);
|
CLUTTER_ALPHA_SINE_INC);
|
||||||
|
|
||||||
|
/* better syncing as multiple groups run off this */
|
||||||
|
clutter_effect_template_set_timeline_clone (priv->switch_workspace_effect,
|
||||||
|
TRUE);
|
||||||
|
|
||||||
|
priv->switch_workspace_arrow_effect
|
||||||
|
= clutter_effect_template_new (clutter_timeline_new_for_duration (
|
||||||
|
switch_timeout*4),
|
||||||
|
CLUTTER_ALPHA_SINE_INC);
|
||||||
|
|
||||||
overlay = mutter_plugin_get_overlay_group (plugin);
|
overlay = mutter_plugin_get_overlay_group (plugin);
|
||||||
|
|
||||||
panel = priv->panel = make_panel (screen_width);
|
panel = priv->panel = make_panel (screen_width);
|
||||||
@ -1176,6 +1166,7 @@ free_plugin_private (PluginPrivate *priv)
|
|||||||
g_object_unref (priv->minimize_effect);
|
g_object_unref (priv->minimize_effect);
|
||||||
g_object_unref (priv->maximize_effect);
|
g_object_unref (priv->maximize_effect);
|
||||||
g_object_unref (priv->switch_workspace_effect);
|
g_object_unref (priv->switch_workspace_effect);
|
||||||
|
g_object_unref (priv->switch_workspace_arrow_effect);
|
||||||
|
|
||||||
g_free (priv);
|
g_free (priv);
|
||||||
|
|
||||||
|
@ -74,5 +74,6 @@ ClutterActor * mutter_get_stage_for_screen (MetaScreen *screen);
|
|||||||
ClutterActor * mutter_get_overlay_group_for_screen (MetaScreen *screen);
|
ClutterActor * mutter_get_overlay_group_for_screen (MetaScreen *screen);
|
||||||
Window mutter_get_overlay_window (MetaScreen *screen);
|
Window mutter_get_overlay_window (MetaScreen *screen);
|
||||||
GList * mutter_get_windows (MetaScreen *screen);
|
GList * mutter_get_windows (MetaScreen *screen);
|
||||||
|
ClutterActor * mutter_get_window_group_for_screen (MetaScreen *screen);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -219,6 +219,9 @@ mutter_plugin_effect_completed (MutterPlugin *plugin,
|
|||||||
ClutterActor *
|
ClutterActor *
|
||||||
mutter_plugin_get_overlay_group (MutterPlugin *plugin);
|
mutter_plugin_get_overlay_group (MutterPlugin *plugin);
|
||||||
|
|
||||||
|
ClutterActor *
|
||||||
|
mutter_plugin_get_window_group (MutterPlugin *plugin);
|
||||||
|
|
||||||
ClutterActor *
|
ClutterActor *
|
||||||
mutter_plugin_get_stage (MutterPlugin *plugin);
|
mutter_plugin_get_stage (MutterPlugin *plugin);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user