NotificationStack: Support floating point scale factors (#1631)

This commit is contained in:
David Hewitt 2023-04-07 14:42:02 +01:00 committed by GitHub
parent 53da4ea072
commit ff5914a745
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -55,8 +55,6 @@ public class Gala.NotificationStack : Object {
var window_rect = window.get_frame_rect (); var window_rect = window.get_frame_rect ();
window.stick (); window.stick ();
var scale = Utils.get_ui_scaling_factor ();
if (animate) { if (animate) {
var opacity_transition = new Clutter.PropertyTransition ("opacity"); var opacity_transition = new Clutter.PropertyTransition ("opacity");
opacity_transition.set_from_value (0); opacity_transition.set_from_value (0);
@ -78,19 +76,20 @@ public class Gala.NotificationStack : Object {
notification.add_transition (TRANSITION_ENTRY_NAME, entry); notification.add_transition (TRANSITION_ENTRY_NAME, entry);
} }
var primary = display.get_primary_monitor ();
var area = display.get_workspace_manager ().get_active_workspace ().get_work_area_for_monitor (primary);
var scale = display.get_monitor_scale (primary);
/** /**
* We will make space for the incoming notification * We will make space for the incoming notification
* by shifting all current notifications by height * by shifting all current notifications by height
* and then add it to the notifications list. * and then add it to the notifications list.
*/ */
update_positions (animate, window_rect.height); update_positions (animate, scale, window_rect.height);
var primary = display.get_primary_monitor ();
var area = display.get_workspace_manager ().get_active_workspace ().get_work_area_for_monitor (primary);
int notification_x_pos = area.x + area.width - window_rect.width; int notification_x_pos = area.x + area.width - window_rect.width;
move_window (notification, notification_x_pos, stack_y + TOP_OFFSET + ADDITIONAL_MARGIN * scale); move_window (notification, notification_x_pos, stack_y + TOP_OFFSET + InternalUtils.scale_to_int (ADDITIONAL_MARGIN, scale));
notifications.insert (0, notification); notifications.insert (0, notification);
} }
@ -98,15 +97,14 @@ public class Gala.NotificationStack : Object {
var primary = display.get_primary_monitor (); var primary = display.get_primary_monitor ();
var area = display.get_workspace_manager ().get_active_workspace ().get_work_area_for_monitor (primary); var area = display.get_workspace_manager ().get_active_workspace ().get_work_area_for_monitor (primary);
var scale = Utils.get_ui_scaling_factor (); var scale = display.get_monitor_scale (primary);
stack_width = (WIDTH + MARGIN) * scale; stack_width = InternalUtils.scale_to_int (WIDTH + MARGIN, scale);
stack_y = area.y; stack_y = area.y;
} }
private void update_positions (bool animate, float add_y = 0.0f) { private void update_positions (bool animate, float scale, float add_y = 0.0f) {
var scale = Utils.get_ui_scaling_factor (); var y = stack_y + TOP_OFFSET + add_y + InternalUtils.scale_to_int (ADDITIONAL_MARGIN, scale);
var y = stack_y + TOP_OFFSET + add_y + ADDITIONAL_MARGIN * scale;
var i = notifications.size; var i = notifications.size;
var delay_step = i > 0 ? 150 / i : 0; var delay_step = i > 0 ? 150 / i : 0;
var iterator = 0; var iterator = 0;
@ -161,8 +159,11 @@ public class Gala.NotificationStack : Object {
notification.x += stack_width; notification.x += stack_width;
} }
var primary = display.get_primary_monitor ();
var scale = display.get_monitor_scale (primary);
notifications.remove (notification); notifications.remove (notification);
update_positions (animate); update_positions (animate, scale);
} }
/** /**