diff --git a/lib/Utils.vala b/lib/Utils.vala index 753f05a51..8edf8677b 100644 --- a/lib/Utils.vala +++ b/lib/Utils.vala @@ -486,5 +486,24 @@ namespace Gala { public static int calculate_button_size (float monitor_scale) { return Utils.scale_to_int (BUTTON_SIZE, monitor_scale); } + + private static bool? framebuffer_is_logical = null; + public static bool get_framebuffer_is_logical () { + if (framebuffer_is_logical != null) { + return framebuffer_is_logical; + } + + framebuffer_is_logical = false; + + var experimental_features = new Settings ("org.gnome.mutter").get_strv ("experimental-features"); + for (var i = 0; i < experimental_features.length; i++) { + if (experimental_features[i] == "scale-monitor-framebuffer") { + framebuffer_is_logical = true; + break; + } + } + + return framebuffer_is_logical; + } } } diff --git a/src/BlurManager.vala b/src/BlurManager.vala index 7e83b09f8..20d188222 100644 --- a/src/BlurManager.vala +++ b/src/BlurManager.vala @@ -32,7 +32,6 @@ public class Gala.BlurManager : Object { public WindowManagerGala wm { get; construct; } - private bool framebuffer_is_logical = false; private GLib.HashTable blurred_windows = new GLib.HashTable (null, null); private BlurManager (WindowManagerGala wm) { @@ -40,14 +39,6 @@ public class Gala.BlurManager : Object { } construct { - var experimental_features = new Settings ("org.gnome.mutter").get_strv ("experimental-features"); - for (var i = 0; i < experimental_features.length; i++) { - if (experimental_features[i] == "scale-monitor-framebuffer") { - framebuffer_is_logical = true; - break; - } - } - wm.get_display ().window_created.connect ((window) => { window.notify["mutter-hints"].connect ((obj, pspec) => parse_mutter_hints ((Meta.Window) obj)); parse_mutter_hints (window); @@ -83,7 +74,7 @@ public class Gala.BlurManager : Object { var x_shadow_size = frame_rect.x - buffer_rect.x; var y_shadow_size = frame_rect.y - buffer_rect.y; - var monitor_scale = framebuffer_is_logical ? 1.0f : window.display.get_monitor_scale (window.get_monitor ()); + var monitor_scale = Utils.get_framebuffer_is_logical () ? 1.0f : window.display.get_monitor_scale (window.get_monitor ()); var inverse_monitor_scale = 1.0f / monitor_scale; blur_data.actor.set_position ( diff --git a/src/Widgets/MultitaskingView/Tooltip.vala b/src/Widgets/MultitaskingView/Tooltip.vala index b74d791cb..2dec8ed57 100644 --- a/src/Widgets/MultitaskingView/Tooltip.vala +++ b/src/Widgets/MultitaskingView/Tooltip.vala @@ -8,6 +8,9 @@ * Clutter actor to display text in a tooltip-like component. */ public class Gala.Tooltip : Clutter.Actor { + private const int TEXT_MARGIN = 6; + private const int CORNER_RADIUS = 3; + public float monitor_scale { get; construct set; } private Gala.Text text_actor; @@ -18,20 +21,19 @@ public class Gala.Tooltip : Clutter.Actor { construct { text_actor = new Gala.Text () { - margin_left = 6, - margin_top = 6, - margin_bottom = 6, - margin_right = 6, ellipsize = Pango.EllipsizeMode.MIDDLE, color = Drawing.Color.TOOLTIP_TEXT_COLOR }; - - add_child (text_actor); + bind_property ("monitor-scale", text_actor, "margin-left", SYNC_CREATE, transform_monitor_scale_to_margin); + bind_property ("monitor-scale", text_actor, "margin-top", SYNC_CREATE, transform_monitor_scale_to_margin); + bind_property ("monitor-scale", text_actor, "margin-right", SYNC_CREATE, transform_monitor_scale_to_margin); + bind_property ("monitor-scale", text_actor, "margin-bottom", SYNC_CREATE, transform_monitor_scale_to_margin); layout_manager = new Clutter.BinLayout (); background_color = Drawing.Color.TOOLTIP_BACKGROUND; + add_child (text_actor); - var rounded_corners_effect = new RoundedCornersEffect (3, monitor_scale); + var rounded_corners_effect = new RoundedCornersEffect (CORNER_RADIUS, monitor_scale); bind_property ("monitor-scale", rounded_corners_effect, "monitor-scale"); add_effect (rounded_corners_effect); } @@ -39,4 +41,13 @@ public class Gala.Tooltip : Clutter.Actor { public void set_text (string new_text) { text_actor.text = new_text; } + + private static bool transform_monitor_scale_to_margin (Binding binding, Value from_value, ref Value to_value) { + to_value.set_float ( + Utils.get_framebuffer_is_logical () + ? TEXT_MARGIN + : Utils.scale_to_int (TEXT_MARGIN, from_value.get_float ()) + ); + return true; + } }