Interface ILayoutEngine
- Namespace
- Whim
- Assembly
- Whim.dll
Layout engines dictate how windows are laid out.
public interface ILayoutEngine
Remarks
Layout engines are immutable, and should be implemented as records. All methods that change the
layout engine return a new layout engine.
Layout engines are also composable, via the BaseProxyLayoutEngine class.
Layout engine tests should extend the
Whim.TestUtils.LayoutEngineBaseTests
class, to verify they do not break in common scenarios.Properties
Count
The number of windows in the layout engine.
int Count { get; }
Property Value
Identity
The identity of the layout engine.
LayoutEngineIdentity Identity { get; }
Property Value
Name
The name of the layout engine.
string Name { get; }
Property Value
Methods
AddWindow(IWindow)
Adds a
window to the layout engine.ILayoutEngine AddWindow(IWindow window)
Parameters
windowIWindow
Returns
- ILayoutEngine
- The new ILayoutEngine after the add.
ContainsEqual(ILayoutEngine)
Checks to see if this ILayoutEngine or a child layout engine is
layoutEngine.bool ContainsEqual(ILayoutEngine layoutEngine)
Parameters
layoutEngineILayoutEngine- The layout engine to check for.
Returns
- bool
if the layout engine is found, otherwise.
ContainsWindow(IWindow)
Determines whether the layout engine contains the
window.bool ContainsWindow(IWindow window)
Parameters
windowIWindow
Returns
- bool
- True if the layout engine contains the
window, otherwise false.
DoLayout(IRectangle<int>, IMonitor)
Performs a layout inside the available
rectangle.IEnumerable<IWindowState> DoLayout(IRectangle<int> rectangle, IMonitor monitor)
Parameters
rectangleIRectangle<int>- The available area to do a layout inside.
monitorIMonitor- The monitor which the layout is being done for.
Returns
- IEnumerable<IWindowState>
- The layout result.
Remarks
For a given
rectangle, the layout engine should return the same
result every time.FocusWindowInDirection(Direction, IWindow)
Focuses the
window in the direction.
It's recommended that this method is not called directly, but rather
through dispatching FocusWindowInDirectionTransform.ILayoutEngine FocusWindowInDirection(Direction direction, IWindow window)
Parameters
Returns
GetFirstWindow()
Retrieves the first window in the layout engine.
IWindow? GetFirstWindow()
Returns
GetLayoutEngine<T>()
Checks to see if this ILayoutEngine or a child layout engine is type
T.T? GetLayoutEngine<T>() where T : ILayoutEngine
Returns
- T
- The layout engine with type
T, or null if none is found.
Type Parameters
T- The type of layout engine to check for.
MinimizeWindowEnd(IWindow)
Called when a window is being unminimized - i.e., the window size will no longer be
Minimized.
The layout engine can choose to ignore this call, if it does not support unminimizing
windows.
ILayoutEngine MinimizeWindowEnd(IWindow window)
Parameters
windowIWindow
Returns
MinimizeWindowStart(IWindow)
Called when a window is being minimized - i.e., the window size will become
Minimized.
The layout engine can choose to ignore this call, if it does not support minimizing
windows.
ILayoutEngine MinimizeWindowStart(IWindow window)
Parameters
windowIWindow
Returns
MoveWindowEdgesInDirection(Direction, IPoint<double>, IWindow)
Moves the focused window's edges by the specified
deltas.ILayoutEngine MoveWindowEdgesInDirection(Direction edges, IPoint<double> deltas, IWindow window)
Parameters
edgesDirection- The edges to change.
deltasIPoint<double>- The deltas to change the given
edgesby. Thedeltasare in the range [0, 1] for both x and y (the unit square). windowIWindow
Returns
- ILayoutEngine
- The new ILayoutEngine after the move.
MoveWindowToPoint(IWindow, IPoint<double>)
Move the
window to the point.
The point has a coordinate space of [0, 1] for both x and y.ILayoutEngine MoveWindowToPoint(IWindow window, IPoint<double> point)
Parameters
Returns
- ILayoutEngine
- The new ILayoutEngine after the move.
PerformCustomAction<T>(LayoutEngineCustomAction<T>)
Attempts to trigger a custom action in a layout engine.
ILayoutEngine PerformCustomAction<T>(LayoutEngineCustomAction<T> action)
Parameters
actionLayoutEngineCustomAction<T>- Metadata about the action to perform, and the payload to perform it with.
Returns
- ILayoutEngine
- A new layout engine if the action is handled, otherwise it returns the current layout engine.
Type Parameters
T- The type of the
action's payload.
Remarks
This method is used to handle custom actions that are not part of the
ILayoutEngine interface.
For example, the SliceLayoutEngine uses this method to promote/demote windows in the
window stack.
RemoveWindow(IWindow)
Removes a
window from the layout engine.ILayoutEngine RemoveWindow(IWindow window)
Parameters
windowIWindow
Returns
- ILayoutEngine
- The new ILayoutEngine after the remove.
SwapWindowInDirection(Direction, IWindow)
Swaps the
window in the direction.
It's recommended that this method is not called directly, but rather
through duspatching SwapWindowInDirectionTransform.ILayoutEngine SwapWindowInDirection(Direction direction, IWindow window)
Parameters
Returns
- ILayoutEngine
- The new ILayoutEngine after the swap.