aboutsummaryrefslogtreecommitdiff
path: root/src/layout
AgeCommit message (Collapse)Author
2024-09-01Change IdCounter to be backed by an AtomicU64Ivan Molodetskikh
Let's see if anyone complains.
2024-09-01Make WorkspaceId inner field privateIvan Molodetskikh
2024-09-01Implement the event stream IPCIvan Molodetskikh
2024-09-01Animate focus-workspace by idx/back and forth/previousIvan Molodetskikh
Deleting the test because it only made sense when no-animation was special cased.
2024-09-01layout: Cache monitor output nameIvan Molodetskikh
2024-08-25layout: Break out early on min sizeIvan Molodetskikh
2024-08-25layout: Fix rounding in height distributionIvan Molodetskikh
Rounding before checking min height could artificially increase the window height that we check, leading to an incorrectly satisfied min constraint.
2024-08-25layout: Clamp window height to max available in columnIvan Molodetskikh
When the window is alone in its column this logic intentionally isn't triggered. Until we have a floating layer, there's no other way to get a window larger than the screen, which I need.
2024-08-23Implement window close transactionIvan Molodetskikh
Mainly visible with disabled animations.
2024-08-23Extract Niri::update_render_elements()Ivan Molodetskikh
2024-08-22Implement resize transactionsIvan Molodetskikh
2024-08-22Implement window resize throttlingIvan Molodetskikh
2024-08-22Update Smithay (apply state in post commit)Ivan Molodetskikh
2024-08-15layout: Do not recompute total_weight every iterationIvan Molodetskikh
2024-08-15layout: Implement weighted height distributionIvan Molodetskikh
The intention is to make columns add up to the working area height most of the time, while still preserving the ability to have one fixed-height window. Automatic heights are now distributed according to their weight, rather than evenly. This is similar to flex-grow in CSS or fraction in Typst. Resizing one window in a column still makes that window fixed, however it changes all other windows to automatic height, computing their weights in such a way as to preserve their apparent heights.
2024-08-15layout: Pre-subtract gaps during height distributionIvan Molodetskikh
Same result, but code a bit clearer.
2024-07-22Add negative struts to testsIvan Molodetskikh
2024-07-16Implement gradient color interpolation option (#548)Ivan Molodetskikh
* Added the better color averaging code (tested & functional) * rustfmt * Make Color f32 0..1, clarify premul/unpremul * Fix imports and test name * Premultiply gradient colors matching CSS * Fix indentation * fixup * Add gradient image --------- Co-authored-by: K's Thinkpad <K.T.Kraft@protonmail.com>
2024-07-10Add move-column-{left/right}-or-to-monitor-{left/right} (#528)Winter
* feature added, move-column-left-or-monitor-left and move-column-right-or-monitor-right * fixed stupid mistake * yalter's fixes * fixed names * fixed a stupid mistake --------- Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
2024-07-09Fix view offset anim restart on switching focusIvan Molodetskikh
2024-07-09Add tolerance to view offset anim restart checkIvan Molodetskikh
It was getting tripped by tiny differences.
2024-07-05Implement focus-follows-mouse max-scroll-amountIvan Molodetskikh
2024-07-05Refactor and simplify new view offset calculationIvan Molodetskikh
* Split new offset computation from starting the animation. * Simplify new column on empty workspace logic.
2024-07-05layout: Remove todo!() when activating window with no monitorsIvan Molodetskikh
2024-07-05Added Commnads to focus windows or Monitors above/below the active window (#497)TheAngusMcFire
* Implement focus-window-up/down-or-monitor calls * Fixed wrong naming of focus-window-or-monitor commands * fix copy pase errors for focusing direction * Fixed wrong behaviour when the current workspace is empty * Cleanup navigation code to reduce complexity * Fix wrong comments and add testcases for FocusWindowOrMonitorUp/Down --------- Co-authored-by: Christian Rieger <christian.rieger@student.tugraz.at>
2024-06-28feat: add `focus-column-or-monitor-left`, `focus-column-or-monitor-right` (#456)Filipe Paniguel
* feat: add support for focus-window-or-monitor * addresses output without window case * refactor: reduce verbosity * update this.. * refactor: rename `maybe_focus_window` functions * refactor: flip focus_window_or_output return logic * Update src/layout/mod.rs Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com> * refactor: rename to Column * move blocks next to other Column variables --------- Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
2024-06-19Implement vertical middle mouse gestureIvan Molodetskikh
2024-06-19Somewhat fix height distribution logicIvan Molodetskikh
This got a bit broken with fractional layout. The current logic seems to give exact results for integer scales again, but for fractional scales sometimes the resulting height goes beyond the maximum, even clearly by more than one logical pixel. Not entirely sure why that is.
2024-06-18Fix blurry rounded corners on high scalesIvan Molodetskikh
2024-06-18Animate xdg-activation and foreign-toplevel workspace switchesIvan Molodetskikh
These are a bit jarring without an animation.
2024-06-18Refactor layout to fractional-logicalIvan Molodetskikh
Lets borders, gaps, and everything else stay pixel-perfect even with fractional scale. Allows setting fractional border widths, gaps, struts. See the new wiki .md for more details.
2024-06-17Fix cached data not updating on config changeIvan Molodetskikh
2024-06-17layout: Cache scale and transform on the workspaceIvan Molodetskikh
2024-06-10Implement our own TextureBuffer/RenderElementIvan Molodetskikh
Supports fractional texture scale + has some getters.
2024-06-10Signal fractional scale to clientsIvan Molodetskikh
Doesn't do anything yet because we don't bind the fractional scale manager and don't allow fractional scales.
2024-06-09Add `focus-column-right-or-first`, `focus-column-left-or-last` (#391)James Sully
* add focus-column-right-or-first * add focus-column-left-or-last
2024-06-09Fix typos (#429)Ujp8LfXBJ6wCPR
* Fix typos reported by "typos" crate https://github.com/crate-ci/typos * Ignore typo datas -> data See https://github.com/crate-ci/typos?tab=readme-ov-file#false-positives for more configureability. --------- Co-authored-by: Carl Hjerpe <git@hjerpe.xyz> Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
2024-06-04Add missing fullscreen checkIvan Molodetskikh
Fixes crash when a window in a column requests to be unfullscreened.
2024-06-02Preserve empty named workspaces upon output removalIvan Molodetskikh
Not sure how we missed this.
2024-05-24Added actions to allow focusing up or down as normal but to wrap to the ↵Micah N Gorrell
column to the left or right if there is no window above or below
2024-05-17Implement niri msg workspacesrustysec
2024-05-16Make workspace names case-insensitiveIvan Molodetskikh
2024-05-16Implement named workspacesGergely Nagy
This is an implementation of named, pre-declared workspaces. With this implementation, workspaces can be declared in the configuration file by name: ``` workspace "name" { open-on-output "winit" } ``` The `open-on-output` property is optional, and can be skipped, in which case the workspace will open on the primary output. All actions that were able to target a workspace by index can now target them by either an index, or a name. In case of the command line, where we do not have types available, this means that workspace names that also pass as `u8` cannot be switched to by name, only by index. Unlike dynamic workspaces, named workspaces do not close when they are empty, they remain static. Like dynamic workspaces, named workspaces are bound to a particular output. Switching to a named workspace, or moving a window or column to one will also switch to, or move the thing in question to the output of the workspace. When reloading the configuration, newly added named workspaces will be created, and removed ones will lose their name. If any such orphaned workspace was empty, they will be removed. If they weren't, they'll remain as a dynamic workspace, without a name. Re-declaring a workspace with the same name later will create a new one. Additionally, this also implements a `open-on-workspace "<name>"` window rule. Matching windows will open on the given workspace (or the current one, if the named workspace does not exist). Signed-off-by: Gergely Nagy <niri@gergo.csillger.hu>
2024-05-15Fix render elements looking off on screenshotsIvan Molodetskikh
2024-05-15Implement custom shader for window-openIvan Molodetskikh
2024-05-14Avoid changing the view offset if size didn't changeIvan Molodetskikh
2024-05-14Improve interactive resize end edge cases and animationsIvan Molodetskikh
2024-05-14Fix interactive resize cancellingIvan Molodetskikh
The interactive resize may have ended, but we're still waiting for the last commit of the respective window. When cancelling, we should cancel those ones too.
2024-05-14Refactor column and tile offsets, fix a few issuesIvan Molodetskikh
2024-05-14Draw closing windows in the right orderIvan Molodetskikh