mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-10 21:41:51 +02:00
[Peek]FlowDirection.LeftToRight added to prevent RTL language mirroring (#27258)
* [Peek] FlowDirection.LeftToRight added to prevent RTL language mirroring. * [Peek] Dynamic layout updates applied to title bar for RTL/LTR language support
This commit is contained in:
@@ -71,6 +71,13 @@ namespace Peek.UI.Views
|
||||
[ObservableProperty]
|
||||
private bool pinned = false;
|
||||
|
||||
private ColumnDefinition systemLeftPaddingColumn = new() { Width = new GridLength(0) };
|
||||
private ColumnDefinition draggableColumn = new() { Width = new GridLength(1, GridUnitType.Star) };
|
||||
private ColumnDefinition launchAppButtonColumn = new() { Width = GridLength.Auto };
|
||||
private ColumnDefinition appRightPaddingColumn = new() { Width = new GridLength(65) };
|
||||
private ColumnDefinition pinButtonColumn = new() { Width = new GridLength(40) };
|
||||
private ColumnDefinition systemRightPaddingColumn = new() { Width = new GridLength(0) };
|
||||
|
||||
public TitleBar()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -184,6 +191,54 @@ namespace Peek.UI.Views
|
||||
Pinned = !Pinned;
|
||||
}
|
||||
|
||||
public FlowDirection TitleBarFlowDirection
|
||||
{
|
||||
get
|
||||
{
|
||||
var direction = CultureInfo.CurrentCulture.TextInfo.IsRightToLeft ?
|
||||
FlowDirection.RightToLeft :
|
||||
FlowDirection.LeftToRight;
|
||||
SetupGridColumnDefinitions(direction);
|
||||
return direction;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetupGridColumnDefinitions(FlowDirection direction)
|
||||
{
|
||||
TitleBarRootContainer.ColumnDefinitions.Clear();
|
||||
|
||||
if (direction == FlowDirection.LeftToRight)
|
||||
{
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(systemLeftPaddingColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(draggableColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(launchAppButtonColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(appRightPaddingColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(pinButtonColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(systemRightPaddingColumn);
|
||||
|
||||
Grid.SetColumn(AppIconAndFileTitleContainer, 1);
|
||||
FileCountAndNameContainer.HorizontalAlignment = HorizontalAlignment.Left;
|
||||
Grid.SetColumn(LaunchAppButton, 2);
|
||||
Grid.SetColumn(PinButton, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(systemRightPaddingColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(pinButtonColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(appRightPaddingColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(launchAppButtonColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(draggableColumn);
|
||||
TitleBarRootContainer.ColumnDefinitions.Add(systemLeftPaddingColumn);
|
||||
|
||||
Grid.SetColumn(AppIconAndFileTitleContainer, 4);
|
||||
FileCountAndNameContainer.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
Grid.SetColumn(LaunchAppButton, 3);
|
||||
LaunchAppButton.HorizontalAlignment = HorizontalAlignment.Left;
|
||||
Grid.SetColumn(PinButton, 1);
|
||||
PinButton.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
}
|
||||
}
|
||||
|
||||
private void TitleBarRootContainer_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||
{
|
||||
UpdateDragRegion();
|
||||
@@ -201,22 +256,37 @@ namespace Peek.UI.Views
|
||||
{
|
||||
var scale = MainWindow.GetMonitorScale();
|
||||
|
||||
SystemRightPaddingColumn.Width = new GridLength(appWindow.TitleBar.RightInset / scale);
|
||||
SystemLeftPaddingColumn.Width = new GridLength(appWindow.TitleBar.LeftInset / scale);
|
||||
systemRightPaddingColumn.Width = new GridLength(appWindow.TitleBar.RightInset / scale);
|
||||
systemLeftPaddingColumn.Width = new GridLength(appWindow.TitleBar.LeftInset / scale);
|
||||
|
||||
var dragRectsList = new List<RectInt32>();
|
||||
|
||||
RectInt32 dragRectangleLeft;
|
||||
dragRectangleLeft.X = (int)(SystemLeftPaddingColumn.ActualWidth * scale);
|
||||
dragRectangleLeft.Y = 0;
|
||||
dragRectangleLeft.Height = (int)(TitleBarRootContainer.ActualHeight * scale);
|
||||
dragRectangleLeft.Width = (int)(DraggableColumn.ActualWidth * scale);
|
||||
|
||||
RectInt32 dragRectangleRight;
|
||||
dragRectangleRight.X = (int)((SystemLeftPaddingColumn.ActualWidth + DraggableColumn.ActualWidth + LaunchAppButtonColumn.ActualWidth) * scale);
|
||||
dragRectangleRight.Y = 0;
|
||||
dragRectangleRight.Height = (int)(TitleBarRootContainer.ActualHeight * scale);
|
||||
dragRectangleRight.Width = (int)(AppRightPaddingColumn.ActualWidth * scale);
|
||||
|
||||
if (TitleBarFlowDirection == FlowDirection.LeftToRight)
|
||||
{
|
||||
dragRectangleLeft.X = (int)(systemLeftPaddingColumn.ActualWidth * scale);
|
||||
dragRectangleLeft.Y = 0;
|
||||
dragRectangleLeft.Height = (int)(TitleBarRootContainer.ActualHeight * scale);
|
||||
dragRectangleLeft.Width = (int)(draggableColumn.ActualWidth * scale);
|
||||
|
||||
dragRectangleRight.X = (int)((systemLeftPaddingColumn.ActualWidth + draggableColumn.ActualWidth + launchAppButtonColumn.ActualWidth) * scale);
|
||||
dragRectangleRight.Y = 0;
|
||||
dragRectangleRight.Height = (int)(TitleBarRootContainer.ActualHeight * scale);
|
||||
dragRectangleRight.Width = (int)(appRightPaddingColumn.ActualWidth * scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
dragRectangleRight.X = (int)(pinButtonColumn.ActualWidth * scale);
|
||||
dragRectangleRight.Y = 0;
|
||||
dragRectangleRight.Height = (int)(TitleBarRootContainer.ActualHeight * scale);
|
||||
dragRectangleRight.Width = (int)(appRightPaddingColumn.ActualWidth * scale);
|
||||
|
||||
dragRectangleLeft.X = (int)((pinButtonColumn.ActualWidth + appRightPaddingColumn.ActualWidth + launchAppButtonColumn.ActualWidth) * scale);
|
||||
dragRectangleLeft.Y = 0;
|
||||
dragRectangleLeft.Height = (int)(TitleBarRootContainer.ActualHeight * scale);
|
||||
dragRectangleLeft.Width = (int)(draggableColumn.ActualWidth * scale);
|
||||
}
|
||||
|
||||
dragRectsList.Add(dragRectangleLeft);
|
||||
dragRectsList.Add(dragRectangleRight);
|
||||
|
||||
Reference in New Issue
Block a user