Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace Jade {
- public static const string MUTTER_BUTTON_LAYOUT = "button-layout";
- public static const string WM_SCHEMA = "org.jade.wm";
- public static const bool CLUTTER_EVENT_PROPAGATE = false;
- public static const bool CLUTTER_EVENT_STOP = true;
- public class JadeWM : Meta.Plugin
- {
- public Clutter.Actor ui_group { get; protected set; }
- public Clutter.Stage stage { get; protected set; }
- public Clutter.Actor window_group { get; protected set; }
- public Clutter.Actor top_window_group { get; protected set; }
- public Meta.BackgroundGroup background_group { get; protected set; }
- static Meta.PluginInfo info;
- public static string[]? old_args;
- Gee.HashSet<Meta.WindowActor> minimizing = new Gee.HashSet<Meta.WindowActor> ();
- Gee.HashSet<Meta.WindowActor> mapping = new Gee.HashSet<Meta.WindowActor>();
- Gee.HashSet<Meta.WindowActor> destroying = new Gee.HashSet<Meta.WindowActor> ();
- static construct
- {
- info = Meta.PluginInfo() {
- name = "Jade WM",
- version = "0.1",
- author = "Joseph Mccullar",
- license = "GPL-2.0",
- description = "Jade Window Manager"
- };
- }
- public override void start()
- {
- var screen = this.get_screen();
- var display = screen.get_display();
- Meta.Prefs.override_preference_schema(MUTTER_BUTTON_LAYOUT, WM_SCHEMA);
- var stage = Meta.Compositor.get_stage_for_screen(screen) as Clutter.Stage;
- stage.background_color = Clutter.Color.from_string("rgb(0,0,0)");
- ui_group = new Clutter.Actor();
- ui_group.reactive = true;
- stage.add_child(ui_group);
- window_group = Meta.Compositor.get_window_group_for_screen(screen);
- stage.remove_child(window_group);
- ui_group.add_child(window_group);
- background_group = new Meta.BackgroundGroup();
- window_group.add_child (background_group);
- window_group.set_child_below_sibling (background_group, null);
- screen.monitors_changed.connect(on_monitors_changed);
- on_monitors_changed(screen);
- top_window_group = Meta.Compositor.get_top_window_group_for_screen(screen);
- stage.remove_child(top_window_group);
- ui_group.add_child(top_window_group);
- stage.show();
- }
- void on_monitors_changed(Meta.Screen? screen)
- {
- background_group.destroy_all_children();
- for (int i = 0; i < screen.get_n_monitors(); i++) {
- var actor = new JadeBackground(screen, i);
- background_group.add_child(actor);
- }
- }
- public override void minimize (Meta.WindowActor actor)
- {
- var duration = 200;
- kill_window_effects (actor);
- minimizing.add (actor);
- int width, height;
- get_screen ().get_size (out width, out height);
- Meta.Rectangle icon = {};
- if (actor.get_meta_window ().get_icon_geometry (out icon)) {
- float scale_x = (float)icon.width / actor.width;
- float scale_y = (float)icon.height / actor.height;
- float anchor_x = (float)(actor.x - icon.x) * actor.width / (icon.width - actor.width);
- float anchor_y = (float)(actor.y - icon.y) * actor.height / (icon.height - actor.height);
- actor.set_pivot_point (anchor_x, anchor_y);
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_IN_EXPO);
- actor.set_easing_duration (duration);
- actor.set_scale (scale_x, scale_y);
- actor.opacity = 0U;
- actor.restore_easing_state ();
- ulong minimize_handler_id = 0UL;
- minimize_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (minimize_handler_id);
- actor.set_pivot_point (0.0f, 0.0f);
- actor.set_scale (1.0f, 1.0f);
- actor.opacity = 255U;
- minimize_completed (actor);
- minimizing.remove (actor);
- });
- } else {
- actor.set_pivot_point (width / 2.0f - actor.x, height - actor.y);
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_IN_EXPO);
- actor.set_easing_duration (duration);
- actor.set_scale (0.0f, 0.0f);
- actor.opacity = 0U;
- actor.restore_easing_state ();
- ulong minimize_handler_id = 0UL;
- minimize_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (minimize_handler_id);
- actor.set_pivot_point (0.0f, 0.0f);
- actor.set_scale (1.0f, 1.0f);
- actor.opacity = 255U;
- minimize_completed (actor);
- minimizing.remove (actor);
- });
- }
- }
- public override void map(Meta.WindowActor actor)
- {
- var window = actor.get_meta_window();
- actor.remove_all_transitions();
- actor.show();
- switch (window.window_type) {
- case Meta.WindowType.NORMAL:
- var duration = 350;
- if (duration == 0) {
- map_completed (actor);
- return;
- }
- mapping.add (actor);
- actor.set_pivot_point (0.5f, 1.0f);
- actor.set_scale (0.01f, 0.1f);
- actor.opacity = 0;
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_OUT_EXPO);
- actor.set_easing_duration (duration);
- actor.set_scale (1.0f, 1.0f);
- actor.opacity = 255U;
- actor.restore_easing_state ();
- ulong map_handler_id = 0UL;
- map_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (map_handler_id);
- mapping.remove (actor);
- map_completed (actor);
- });
- break;
- case Meta.WindowType.MENU:
- case Meta.WindowType.DROPDOWN_MENU:
- case Meta.WindowType.POPUP_MENU:
- var duration = 150;
- if (duration == 0) {
- map_completed (actor);
- return;
- }
- mapping.add (actor);
- actor.set_pivot_point (0.5f, 0.5f);
- actor.set_pivot_point_z (0.2f);
- actor.set_scale (0.9f, 0.9f);
- actor.opacity = 0;
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_OUT_QUAD);
- actor.set_easing_duration (duration);
- actor.set_scale (1.0f, 1.0f);
- actor.opacity = 255U;
- actor.restore_easing_state ();
- ulong map_handler_id = 0UL;
- map_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (map_handler_id);
- mapping.remove (actor);
- map_completed (actor);
- });
- break;
- case Meta.WindowType.MODAL_DIALOG:
- case Meta.WindowType.DIALOG:
- mapping.add (actor);
- actor.set_pivot_point (0.5f, 0.0f);
- actor.set_scale (1.0f, 0.0f);
- actor.opacity = 0;
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_OUT_QUAD);
- actor.set_easing_duration (250);
- actor.set_scale (1.0f, 1.0f);
- actor.opacity = 255U;
- actor.restore_easing_state ();
- ulong map_handler_id = 0UL;
- map_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (map_handler_id);
- mapping.remove (actor);
- map_completed (actor);
- });
- break;
- default:
- map_completed (actor);
- break;
- }
- }
- public override void destroy (Meta.WindowActor actor)
- {
- var window = actor.get_meta_window ();
- actor.remove_all_transitions ();
- switch (window.window_type) {
- case Meta.WindowType.NORMAL:
- var duration = 300;
- if (duration == 0) {
- destroy_completed (actor);
- return;
- }
- destroying.add (actor);
- actor.set_pivot_point (0.5f, 0.5f);
- actor.show ();
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.LINEAR);
- actor.set_easing_duration (duration);
- actor.set_scale (0.8f, 0.8f);
- actor.opacity = 0U;
- actor.restore_easing_state ();
- ulong destroy_handler_id = 0UL;
- destroy_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (destroy_handler_id);
- destroying.remove (actor);
- destroy_completed (actor);
- // Utils.request_clean_icon_cache (get_all_xids ());
- });
- break;
- case Meta.WindowType.MODAL_DIALOG:
- case Meta.WindowType.DIALOG:
- destroying.add (actor);
- actor.set_pivot_point (0.5f, 0.0f);
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_OUT_QUAD);
- actor.set_easing_duration (200);
- actor.set_scale (1.0f, 0.0f);
- actor.opacity = 0U;
- actor.restore_easing_state ();
- ulong destroy_handler_id = 0UL;
- destroy_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (destroy_handler_id);
- destroying.remove (actor);
- destroy_completed (actor);
- });
- // dim_window (window.find_root_ancestor (), false);
- break;
- case Meta.WindowType.MENU:
- case Meta.WindowType.DROPDOWN_MENU:
- case Meta.WindowType.POPUP_MENU:
- var duration = 150;
- if (duration == 0) {
- destroy_completed (actor);
- return;
- }
- destroying.add (actor);
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_OUT_QUAD);
- actor.set_easing_duration (duration);
- actor.set_scale (0.8f, 0.8f);
- actor.opacity = 0U;
- actor.restore_easing_state ();
- ulong destroy_handler_id = 0UL;
- destroy_handler_id = actor.transitions_completed.connect (() => {
- actor.disconnect (destroy_handler_id);
- destroying.remove (actor);
- destroy_completed (actor);
- });
- break;
- default:
- destroy_completed (actor);
- break;
- }
- }
- bool end_animation (ref Gee.HashSet<Meta.WindowActor> list, Meta.WindowActor actor)
- {
- if (!list.contains (actor))
- return false;
- if (actor.is_destroyed ()) {
- list.remove (actor);
- return false;
- }
- actor.remove_all_transitions ();
- actor.opacity = 255U;
- actor.set_scale (1.0f, 1.0f);
- actor.rotation_angle_x = 0.0f;
- actor.set_pivot_point (0.0f, 0.0f);
- list.remove (actor);
- return true;
- }
- public override void kill_window_effects (Meta.WindowActor actor)
- {
- if (end_animation (ref mapping, actor))
- map_completed (actor);
- if (end_animation (ref minimizing, actor))
- minimize_completed (actor);
- if (end_animation (ref destroying, actor))
- destroy_completed (actor);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement