outfoxxed / hy3

Hyprland plugin for an i3 / sway like manual tiling layout
GNU General Public License v3.0
512 stars 44 forks source link

Windows resizing on focus change #51

Open shot-codes opened 11 months ago

shot-codes commented 11 months ago

When changing focus, the windows are resizing ever so slightly. This causes layout shifts that are especially apparent in terminal windows. In the screen recording below, note the window size in kitty flashing while focus is changing, as well as the layout shift taking place on the text in each terminal window.

https://github.com/outfoxxed/hy3/assets/43202406/39297046-e862-44b3-830c-092b43587af4

outfoxxed commented 11 months ago

I can't reproduce this. Please confirm it does not happen on base hyprland, then give more details about your setup such as hyprland.conf, monitor size, dpi and anything else relevant

shot-codes commented 11 months ago

I'm not entirely sure what you mean by base hyprland, If I could ask you to clarify I would be more than happy to try. I am on latest hy3-git(r209.65a849b-3) and hyprland-git (0.33.1.r20.efdf07e2-1). It's occurring on both my laptop and external monitors (eDP-1: 2560x1600, DP-1: 2560x1440). hyprland.conf below, it is running on integrated graphics, not nvidia.

hyprland.conf

plugin = /usr/lib/libhy3.so

# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=eDP-1, 2560x1600@240.00301, 0x0, 1.0
monitor=DP-1, preferred, -2560x-500, 1.0
# monitor=DP-1, preferred, 2560x-500, 1.0
monitor=HDMI-A-1, preferred@100, 2560x0, 1.0

# Execute your favorite apps at launch
exec-once = mako & /usr/lib/polkit-agent-helper-1 & hyprpaper & waybar & swayidle -w

# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf

# env = WLR_DRM_DEVICES,/dev/dri/card1
# env = WLR_DRM_DEVICES,/dev/dri/card0
env = XCURSOR_SIZE,24
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = __VK_LAYER_NV_optimus,NVIDIA_only
env = NVD_BACKEND,direct

# Comment these lines to run on integrated graphics
# env = __NV_PRIME_RENDER_OFFLOAD,1
# env = WLR_NO_HARDWARE_CURSORS,1

blurls = waybar
blurls = launcher

# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options =
    kb_rules =

    follow_mouse = 1

    repeat_rate = 50
    repeat_delay = 300

    touchpad {
        natural_scroll = yes
        scroll_factor = 4.0
        clickfinger_behavior = true
    }

    sensitivity = 0.5 # -1.0 - 1.0, 0 means no modification.
}

general {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    border_part_of_window = 0
    gaps_in = 10
    gaps_out = 50
    border_size = 3
    # col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.active_border = rgba(ffa100ee) rgba(ff2a00ee) 45deg
    col.inactive_border = rgba(00000000)

    layout = dwindle
}

decoration {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    rounding = 4
    active_opacity = 0.9
    inactive_opacity = 0.7

    blur {
        enabled = true
        size = 12
        passes = 3
        xray = true
        noise = 0.05
        ignore_opacity = true
    }

    drop_shadow = yes
    shadow_range = 20
    shadow_render_power = 3
    col.shadow = rgba(00000090)
}

group {
    # col.border_active = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.border_inactive = rgba(33ccff00)
    col.border_active = rgba(ffa100ee) rgba(ff2a00ee) 45deg
    groupbar {
      gradients = true
      font_size = 9
      scrolling = false
      col.active = rgba(ffa100ee)
      col.inactive = rgba(ff330000)
      }
  }

animations {
    enabled = yes

    # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

    bezier = myBezier, 0.05, 0.9, 0.1, 1.0

    animation = windows, 1, 5, myBezier
    animation = windowsOut, 1, 5, default, popin 80%
    animation = border, 1, 10, default
    animation = borderangle, 1, 8, default
    animation = fade, 1, 7, default
    animation = workspaces, 1, 2, myBezier
}

dwindle {
    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
    pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = yes # you probably want this
}

master {
    # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
    new_is_master = false
    allow_small_split = false
    orientation = left
    special_scale_factor = 0.5
}

gestures {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    workspace_swipe = off
}

misc {
    disable_hyprland_logo = true
  }

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
device:epic-mouse-v1 {
    sensitivity = -0.5
}

# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more

windowrule = opacity 1.0 override 1.0 override,Gimp

# windowrulev2 = bordersize 0, focus: 0

# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER

# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, Return, exec, kitty
bind = $mainMod, Q, killactive, 
# bind = $mainMod, M, exit, 
# bind = $mainMod, E, exec, dolphin
bind = $mainMod, V, togglefloating, 
# bind = $mainMod, R, exec, wofi --show drun
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, S, togglesplit, # dwindle

# Move focus with mainMod + arrow keys
bind = $mainMod, H, hy3:movefocus, l
bind = $mainMod, L, hy3:movefocus, r
bind = $mainMod, K, hy3:movefocus, u
bind = $mainMod, J, hy3:movefocus, d

# Resize focused window
bind = $mainMod SHIFT, L, resizeactive, 40 0
bind = $mainMod SHIFT, H, resizeactive, -40 0
bind = $mainMod SHIFT, K, resizeactive, 0 -40
bind = $mainMod SHIFT, J, resizeactive, 0 40

# Move focused window
bind = $mainMod alt, H, movewindow, l
bind = $mainMod alt, L, movewindow, r
bind = $mainMod alt, K, movewindow, u
bind = $mainMod alt, J, movewindow, d

# Groups
bind = $mainMod ALT, G, togglegroup
bind = $mainMod CTRL, O, moveoutofgroup
bind = $mainMod CTRL, H, moveintogroup, l
bind = $mainMod CTRL, L, moveintogroup, r
bind = $mainMod CTRL, K, moveintogroup, u
bind = $mainMod CTRL, J, moveintogroup, d
bind = $mainMod CTRL, J, changegroupactive, f
bind = $mainMod CTRL, K, changegroupactive, b

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10

# Scroll through existing workspaces with mainMod + scroll
# bind = $mainMod, mouse_down, workspace, e+1
# bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

bind = $mainMod, SPACE, exec, tofi-drun --drun-launch=true
bind = $mainMod SHIFT, SPACE, exec, tofi-drun -c ~/.config/tofi/config-prime | xargs hyprctl dispatch exec prime-run 

# tux fn-key Binds
bind = , XF86MonBrightnessDown, exec, xbacklight -dec 10
bind = , XF86MonBrightnessUp, exec, xbacklight -inc 10
bind = , XF86AudioMute, exec, pamixer --toggle-mute
bind = , XF86AudioLowerVolume, exec, pamixer --decrease 10
bind = , XF86AudioRaiseVolume, exec, pamixer --increase 10

# Dynamic gaps
bind = $mainMod SHIFT, G, exec, /home/shot/.config/hypr/scripts/toggle_gaps/toggle_gaps.sh

# Screenshots
bind =  CTRL SHIFT, 4, exec, /home/shot/.config/hypr/scripts/screenshots/portion.sh
bind =  CTRL SHIFT, 2, exec, /home/shot/.config/hypr/scripts/screenshots/DP-1.sh
bind =  CTRL SHIFT, 1, exec, /home/shot/.config/hypr/scripts/screenshots/eDP-1.sh

# Light/Dark mode toggle
bind = $mainMod SHIFT, T, exec, /home/shot/.config/hypr/scripts/toggle-system-theme.sh

bind = $mainMod CTRL SHIFT, F, fakefullscreen
bind = CTRL SHIFT, F, fullscreen
outfoxxed commented 11 months ago

By base hyprland I mean hyprland with no plugins.

shot-codes commented 11 months ago

Ah okay, the only plugin I am using is hy3 :)

outfoxxed commented 11 months ago

If it dosen't happen on base hyprland also check if #52 fixes it.

shot-codes commented 11 months ago

It's happening with border_part_of_window set to 1 and 0. I should note, this is occurring dependent on the amount of columns I have. Doesn't happen with 1, 2, or 4 columns, but seemingly with every other number of columns (tested up to 11

*edit Just updated hyprland-git and hy3, behavior is still present

hy3-git r232.a562617-1
hyprland-git 0.33.1.r23.167f2ed3-1
outfoxxed commented 10 months ago

I've been able to reproduce this on my machine now but only unintentionally. Not sure what causes it yet.