hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.22k stars 895 forks source link

popin animations renders out of the center with out-of-graph-boundaries bezier curves #8058

Closed macydnah closed 6 days ago

macydnah commented 2 weeks ago

Already reported ? *

Regression?

Yes

System Info and Version

System/Version info ```sh Hyprland, built from branch at commit 4520b30d498daca8079365bdb909a8dea38e8d55 (version: bump to 0.44.1). Date: Wed Oct 9 12:54:39 2024 Tag: v0.44.1, commits: 5309 built against aquamarine 0.4.2 flags: (if any) System Information: System name: Linux Node name: HuaaaliP0NKH-ER0S Release: 6.11.0-zen1-1-zen Version: #1 ZEN SMP PREEMPT_DYNAMIC Thu, 19 Sep 2024 04:45:39 +0000 GPU information: 00:02.0 VGA compatible controller [0300]: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0126] (rev 09) (prog-if 00 [VGA controller]) os-release: NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo plugins: ======Config-Start====== Config File: /home/macydnah/.config/hypr/hyprland.conf: Read Succeeded # ~/.config/hypr/hyprland.conf # https://wiki.hyprland.org/Configuring/Keywords/ $mod = SUPER $terminal = footclient $floatingTerminal = footclient -a floating-foot -e tmux new-session -A -s shession $fileManager = pcmanfm $menu = ~/.config/rofi/launcher.sh $bar = togglewaybar.sh # https://wiki.hyprland.org/Configuring/Monitors/ #monitor = name, resolution, position, scale, transform, 0 monitor = ,preferred,auto,auto,transform,0 monitor = LVDS-1, 1366x768@60, 0x0, 1, transform, 0 exec-once = pcmanfm -d exec-once = foot --server exec-once = swaybg --output LVDS-1 --mode fill --image /usr/share/backgrounds/fgm.png env = XCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24 env = GDK_BACKEND,wayland env = LIBVA_DRIVER_NAME,i965 env = LIBVA_DRIVERS_PATH,/usr/lib/dri env = MOZ_ENABLE_WAYLAND,1 env = QT_QPA_PLATFORM,wayland-egl env = SDL_VIDEODRIVER,wayland env = XDG_SESSION_TYPE,wayland env = _JAVA_AWT_WM_NONREPARENTING,1 env = FLOATINGTERM,$floatingTerminal # https://wiki.hyprland.org/Configuring/Variables/#general general { border_size = 0 no_border_on_floating = true gaps_in = 2 gaps_out = 4 gaps_workspaces = 40 col.inactive_border = rgba(595959aa) #col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.active_border = rgba(97d01add) layout = dwindle allow_tearing = true } # https://wiki.hyprland.org/Configuring/Variables/#decoration decoration { rounding = 4 active_opacity = 1.0 inactive_opacity = 0.85 drop_shadow = true shadow_range = 4 shadow_render_power = 4 col.shadow = rgba(1a1a1aee) col.shadow_inactive = rgba(00000000) dim_inactive = false dim_strength = 0.5 dim_special = 0.2 dim_around = 0.4 #screen_shader = ~/.config/hypr/blue-light-filter.frag # https://wiki.hyprland.org/Configuring/Variables/#blur blur { enabled = true size = 4 passes = 1 ignore_opacity = true xray = true noise = 0.0117 contrast = 0.8916 brightness = 0.8172 vibrancy = 0.1696 vibrancy_darkness = 0.0 } } # https://wiki.hyprland.org/Configuring/Variables/#animations # file:///home/macydnah/.config/hypr/conf.d/bezier.conf source = conf.d/bezier.conf animations { enabled = true first_launch_animation = false # https://wiki.hyprland.org/Configuring/Animations/ animation = windowsIn, 1, 4, overshot animation = windowsOut, 0, 4, default, popin 100% animation = windowsMove, 1, 4, easeOutExpo animation = layersIn, 1, 4, easeInOutBack animation = layersOut, 1, 4, easeOutExpo animation = fade, 1, 4, default animation = fadeIn, 1, 3, easeInBack animation = fadeOut, 1, 2, easeOutExpo animation = fadeSwitch, 1, 2, easeOutExpo animation = fadeShadow, 1, 2, easeOutExpo animation = fadeLayersIn, 1, 4, easeInOutBack animation = fadeLayersOut, 1, 4, easeOutExpo animation = border, 0 animation = borderangle, 0 animation = workspaces, 1, 6, default, slide #animation = workspacesIn, 1, 6, easeOutBack, slide #animation = workspacesOut, 1, 6, easeOutBack, fade animation = specialWorkspace, 1, 5, overshot, slidevert } # https://wiki.hyprland.org/Configuring/Variables/#input input { kb_model = pc104 kb_layout = us kb_variant = altgr-intl kb_options = kb_rules = sensitivity = 0.0 accel_profile = adaptive force_no_accel = false scroll_method = 2fg follow_mouse = 2 off_window_axis_events = 0 # https://wiki.hyprland.org/Configuring/Variables/#touchpad touchpad { natural_scroll = true scroll_factor = 1.3 tap_button_map = lrm clickfinger_behavior = false drag_lock = true } } # https://wiki.hyprland.org/Configuring/Variables/#gestures gestures { workspace_swipe = true workspace_swipe_fingers = 3 workspace_swipe_min_fingers = true workspace_swipe_distance = 150 workspace_swipe_min_speed_to_force = 0 workspace_swipe_cancel_ratio = 0.0 } # https://wiki.hyprland.org/Configuring/Variables/#group group { groupbar { enabled = true font_size = 8 gradients = true height = 15 stacked = false render_titles = true scrolling = false text_color = 0xffffffff col.active = 0x66ffff00 col.inactive = 0x66777700 } } # https://wiki.hyprland.org/Configuring/Variables/#misc misc { disable_hyprland_logo = true disable_splash_rendering = true font_family = SF Pro Display force_default_wallpaper = -1 vfr = false mouse_move_enables_dpms = false key_press_enables_dpms = false animate_manual_resizes = false animate_mouse_windowdragging = false disable_autoreload = false enable_swallow = false mouse_move_focuses_monitor = false background_color = 0x777777 new_window_takes_over_fullscreen = 2 middle_click_paste = false } # https://wiki.hyprland.org/Configuring/Variables/#binds binds { allow_workspace_cycles = true window_direction_monitor_fallback = true } # https://wiki.hyprland.org/Configuring/Variables/#opengl opengl { nvidia_anti_flicker = false force_introspection = 1 } # https://wiki.hyprland.org/Configuring/Variables/#cursor cursor { inactive_timeout = 2 hotspot_padding = 5 no_warps = true persistent_warps = true zoom_factor = 1.000 hide_on_key_press = false } # https://wiki.hyprland.org/Configuring/Dwindle-Layout/ dwindle { pseudotile = true force_split = 2 preserve_split = true no_gaps_when_only = 0 use_active_for_splits = true bind = $mod, P, pseudo bind = $mod, C, togglesplit } # https://wiki.hyprland.org/Configuring/Master-Layout/ master { new_status = master } #################### ### KEYBINDINGS ### #################### # https://wiki.hyprland.org/Configuring/Binds/ # Volume/Brightness Control bind = ,XF86AudioMute, exec, volfade.sh -m bind = ,XF86AudioRaiseVolume, exec, volfade.sh -i bind = ,XF86AudioLowerVolume, exec, volfade.sh -d bind = $mod, XF86AudioRaiseVolume, exec, pavucontrol --tab=3 bind = $mod, XF86AudioLowerVolume, exec, pavucontrol --tab=3 binde = ,XF86MonBrightnessUp, exec, xbacklight -inc 3 -fps 60 -time 111 -perceived binde = ,XF86MonBrightnessDown, exec, xbacklight -dec 3 -fps 60 -time 111 -perceived bind = SHIFT, XF86MonBrightnessUp, exec, hyprctl keyword decoration:screen_shader ' ' bind = SHIFT, XF86MonBrightnessDown, exec, hyprctl keyword decoration:screen_shader ~/.config/hypr/blue-light-filter.frag bind = $mod, XF86MonBrightnessUp, exec, hyprctl dispatch dpms on bind = $mod, XF86MonBrightnessDown, exec, hyprctl dispatch dpms off bind = $mod, Menu, exec, kblight # Keybinds/shortcuts for applications bind = $mod, Return, exec, $terminal bind = $mod, grave, exec, togglescrat.sh bind = $mod, A, exec, $menu bind = $mod, B, exec, $bar bind = $mod, E, exec, $fileManager bind = $mod, N, exec, networkmanager_dmenu # Window manager functions bind = $mod, Q, killactive bind = $mod, F, fullscreen, 0 bind = $mod, Tab, workspace, previous bind = $mod, space, togglefloating, bind = $mod, X, exec, togglehyprtab.sh bind = $mod SHIFT, Escape, exec, hyprctl dispatcher exit bind = $mod, Escape, exec, hyprlock # Navigation bind = $mod, J, movefocus, l bind = $mod, semicolon, movefocus, r bind = $mod, K, movefocus, u bind = $mod, L, movefocus, d bind = $mod SHIFT, J, movewindow, l bind = $mod SHIFT, semicolon, movewindow, r bind = $mod SHIFT, K, movewindow, u bind = $mod SHIFT, L, movewindow, d bindm = $mod, mouse:272, movewindow bindm = $mod, mouse:273, resizewindow bind = $mod, 1, workspace, 1 bind = $mod, 2, workspace, 2 bind = $mod, 3, workspace, 3 bind = $mod, 4, workspace, 4 bind = $mod, 5, workspace, 5 bind = $mod, 6, workspace, 6 bind = $mod, 7, workspace, 7 bind = $mod, 8, workspace, 8 bind = $mod, 9, workspace, 9 bind = $mod, 0, workspace, 10 bind = $mod SHIFT, 1, movetoworkspace, 1 bind = $mod SHIFT, 2, movetoworkspace, 2 bind = $mod SHIFT, 3, movetoworkspace, 3 bind = $mod SHIFT, 4, movetoworkspace, 4 bind = $mod SHIFT, 5, movetoworkspace, 5 bind = $mod SHIFT, 6, movetoworkspace, 6 bind = $mod SHIFT, 7, movetoworkspace, 7 bind = $mod SHIFT, 8, movetoworkspace, 8 bind = $mod SHIFT, 9, movetoworkspace, 9 bind = $mod SHIFT, 0, movetoworkspace, 10 bind = $mod SHIFT, grave, movetoworkspace, special:magic ############# ### RULES ### ############# # https://wiki.hyprland.org/Configuring/Window-Rules/#rules # https://wiki.hyprland.org/Configuring/Window-Rules/#layer-rules # https://wiki.hyprland.org/Configuring/Workspace-Rules/#workspace-rules #workspace = special:magic,bordersize:2 windowrulev2 = suppressevent maximize,class:.* layerrule = animation slide,waybar windowrulev2 = float,class:^(org.pulseaudio.pavucontrol)$ # floating-foot windowrulev2 = workspace special:magic,class:^(floating-foot)$ windowrulev2 = size 677 382,class:^(floating-foot)$ windowrulev2 = float,class:^(floating-foot)$ windowrulev2 = pseudo,class:^(floating-foot)$ windowrulev2 = tile,class:^(floating-foot)$ #windowrulev2 = bordercolor rgb(97d01a),class:^(floating-foot)$ #windowrulev2 = bordersize 2,class:^(floating-foot)$ #windowrulev2 = dimaround 0,class:^(floating-foot)$ windowrulev2 = noshadow 1,class:^(floating-foot)$ # mpv windowrulev2 = noblur 1,class:^(mpv)$ windowrulev2 = nodim 1,class:^(mpv)$ windowrulev2 = noshadow 1,class:^(mpv)$ windowrulev2 = opaque 1,class:^(mpv)$ windowrulev2 = forcergbx 1,class:^(mpv)$ windowrulev2 = immediate 1, class:^(mpv)$ windowrulev2 = xray 0,class:^(mpv)$ # swayimg windowrulev2 = immediate 1, class:^(swayimg)$ # rofi layerrule = blur,rofi #layerrule = ignorealpha 0,rofi layerrule = ignorezero,rofi layerrule = dimaround,rofi layerrule = xray 1,rofi layerrule = animation popin,rofi # scrcpy windowrulev2 = float,class:^(scrcpy)$,title:^(SM-G935F)$ windowrulev2 = size 32% 99%,class:^(scrcpy)$,title:^(SM-G935F)$ windowrulev2 = tile,class:^(scrcpy)$,title:^(SM-G935F)$ windowrulev2 = pseudo,class:^(scrcpy)$,title:^(SM-G935F)$ # V4L2 Viewer #windowrulev2 = opaque,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = forcergbx,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = noblur,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = nodim,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = noshadow,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = xray off,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = float,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = pseudo,class:^(qvidcap)$,title:^(V4L2 Viewer)$ #windowrulev2 = tile,class:^(qvidcap)$,title:^(V4L2 Viewer)$ windowrulev2 = opaque,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = forcergbx,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = noblur,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = nodim,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = noshadow,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = xray off,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = float,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = pseudo,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) windowrulev2 = tile,class:^(qvidcap|qv4l2)$,title:(Viewer|Capture) # vim: ft=hypr tabstop=4 shiftwidth=4 expandtab ai Config File: /home/macydnah/.config/hypr/conf.d/bezier.conf: Read Succeeded # ~/.config/hypr/conf.d/bezier.conf # https://easings.net/ bezier = overshot, 0.05, 0.9, 0.1, 1.1 bezier = overshotIn, 0.05, 0.9, 0.1, 1.1 bezier = overshotOut, 0.05, -2.1, 0.1, 1 bezier = easeInSine, 0.12, 0, 0.39, 0 bezier = easeOutSine, 0.61, 1, 0.88, 1 bezier = easeInOutSine, 0.37, 0, 0.63, 1 bezier = easeInQuad, 0.11, 0, 0.5, 0 bezier = easeOutQuad, 0.5, 1, 0.89, 1 bezier = easeInOutQuad, 0.45, 0, 0.55, 1 bezier = easeInCubic, 0.32, 0, 0.67, 0 bezier = easeOutCubic, 0.33, 1, 0.68, 1 bezier = easeInOutCubic, 0.65, 0, 0.35, 1 bezier = easeInQuart, 0.5, 0, 0.75, 0 bezier = easeOutQuart, 0.25, 1, 0.5, 1 bezier = easeInOutQuart, 0.76, 0, 0.24, 1 bezier = easeInQuint, 0.64, 0, 0.78, 0 bezier = easeOutQuint, 0.22, 1, 0.36, 1 bezier = easeInOutQuint, 0.83, 0, 0.17, 1 bezier = easeInExpo, 0.7, 0, 0.84, 0 bezier = easeOutExpo, 0.16, 1, 0.3, 1 bezier = easeInOutExpo, 0.87, 0, 0.13, 1 bezier = easeInCirc, 0.55, 0, 1, 0.45 bezier = easeOutCirc, 0, 0.55, 0.45, 1 bezier = easeInOutCirc, 0.85, 0, 0.15, 1 bezier = easeInBack, 0.36, 0, 0.66, -0.56 bezier = easeOutBack, 0.34, 1.56, 0.64, 1 bezier = easeInOutBack, 0.68, -0.6, 0.32, 1.6 # vim: ft=hypr tabstop=4 shiftwidth=4 expandtab ai ======Config-End======== ```

Description

Using complex bezier curves that goes out of the function limits, makes Hyprland to render popins animations out of the center, stretching the borders instead of the whole window.

It happens primarily in layer popin animations (e.g. opening rofi). I'm not solid sure if it happens in windows animations too, but it seems to me that it does. Anyways, it's pretty clear on layer popin animations.

This didn't happen on v0.43.0

How to reproduce

Add a bezier curve that it's function graph goes out of the limits. Then add a layer animation that uses said bezier:

bezier = easeInOutBack, 0.68, -0.6, 0.32, 1.6
animation = layersIn, 1, 4, easeInOutBack

I recommend the above as it shows the glitching in a clearer way but the overshot example bezier showed in Hyprland's wiki also applies, as it goes further the function's upper limit:

bezier = overshot, 0.05, 0.9, 0.1, 1.1

Crash reports, logs, images, videos

No crashes.

v0.43.0 (This is expected behavior)

https://github.com/user-attachments/assets/736f722b-1436-42c2-bc15-7e76af6301af

v0.44.0 (This renders out of the center and stretches borders)

https://github.com/user-attachments/assets/5c200c20-db66-48ba-b71c-b037788aa4e3

v0.44.1 (Idem)

https://github.com/user-attachments/assets/844515f7-a9d7-434f-aed1-4a5da648a5d1

macydnah commented 2 weeks ago

Bisected:

595eb89f6e16df0e19916e3c02bf5ceac5a61c57 is the first bad commit

https://github.com/user-attachments/assets/45b5cff0-b5c9-4989-8be4-b2b55979abfb

vaxerski commented 2 weeks ago

yes this is expected behavior unfortunately, and I don't think we can do much about it without sacrificing the major improvements the MR had.

gksudolol commented 2 weeks ago

I switched the layer bezier back to default and it's good enough I spose

https://github.com/user-attachments/assets/9ea78cd8-857e-40b5-8c33-feb553b8aae5

macydnah commented 1 week ago

yes this is expected behavior unfortunately, and I don't think we can do much about it without sacrificing the major improvements the MR had.

Got it, it was good while it last, ty. Other thing, should I leave this open or close it?

I switched the layer bezier back to default and it's good enough I spose

yeah.. had to resort to something like that too, not as beautiful but u r right good enough