diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs
index e70de673e4c..4648aef637c 100644
--- a/Flow.Launcher.Core/Resource/Theme.cs
+++ b/Flow.Launcher.Core/Resource/Theme.cs
@@ -145,11 +145,9 @@ private ResourceDictionary CurrentThemeResourceDictionary()
public ResourceDictionary GetResourceDictionary()
{
var dict = CurrentThemeResourceDictionary();
-
- Style queryBoxStyle = dict["QueryBoxStyle"] as Style;
- Style querySuggestionBoxStyle = dict["QuerySuggestionBoxStyle"] as Style;
-
- if (queryBoxStyle != null && querySuggestionBoxStyle != null)
+
+ if (dict["QueryBoxStyle"] is Style queryBoxStyle &&
+ dict["QuerySuggestionBoxStyle"] is Style querySuggestionBoxStyle)
{
var fontFamily = new FontFamily(Settings.QueryBoxFont);
var fontStyle = FontHelper.GetFontStyleFromInvariantStringOrNormal(Settings.QueryBoxFontStyle);
@@ -174,11 +172,12 @@ public ResourceDictionary GetResourceDictionary()
querySuggestionBoxStyle.Setters.Add(new Setter(TextBox.FontStretchProperty, fontStretch));
}
- Style resultItemStyle = dict["ItemTitleStyle"] as Style;
- Style resultSubItemStyle = dict["ItemSubTitleStyle"] as Style;
- Style resultItemSelectedStyle = dict["ItemTitleSelectedStyle"] as Style;
- Style resultSubItemSelectedStyle = dict["ItemSubTitleSelectedStyle"] as Style;
- if (resultItemStyle != null && resultSubItemStyle != null && resultSubItemSelectedStyle != null && resultItemSelectedStyle != null)
+ if (dict["ItemTitleStyle"] is Style resultItemStyle &&
+ dict["ItemSubTitleStyle"] is Style resultSubItemStyle &&
+ dict["ItemSubTitleSelectedStyle"] is Style resultSubItemSelectedStyle &&
+ dict["ItemTitleSelectedStyle"] is Style resultItemSelectedStyle &&
+ dict["ItemHotkeyStyle"] is Style resultHotkeyItemStyle &&
+ dict["ItemHotkeySelectedStyle"] is Style resultHotkeyItemSelectedStyle)
{
Setter fontFamily = new Setter(TextBlock.FontFamilyProperty, new FontFamily(Settings.ResultFont));
Setter fontStyle = new Setter(TextBlock.FontStyleProperty, FontHelper.GetFontStyleFromInvariantStringOrNormal(Settings.ResultFontStyle));
@@ -186,7 +185,9 @@ public ResourceDictionary GetResourceDictionary()
Setter fontStretch = new Setter(TextBlock.FontStretchProperty, FontHelper.GetFontStretchFromInvariantStringOrNormal(Settings.ResultFontStretch));
Setter[] setters = { fontFamily, fontStyle, fontWeight, fontStretch };
- Array.ForEach(new[] { resultItemStyle, resultSubItemStyle, resultItemSelectedStyle, resultSubItemSelectedStyle }, o => Array.ForEach(setters, p => o.Setters.Add(p)));
+ Array.ForEach(
+ new[] { resultItemStyle, resultSubItemStyle, resultItemSelectedStyle, resultSubItemSelectedStyle, resultHotkeyItemStyle, resultHotkeyItemSelectedStyle }, o
+ => Array.ForEach(setters, p => o.Setters.Add(p)));
}
var windowStyle = dict["WindowStyle"] as Style;
@@ -236,17 +237,19 @@ private string GetThemePath(string themeName)
public void AddDropShadowEffectToCurrentTheme()
{
- var dict = CurrentThemeResourceDictionary();
+ var dict = GetResourceDictionary();
var windowBorderStyle = dict["WindowBorderStyle"] as Style;
- var effectSetter = new Setter();
- effectSetter.Property = Border.EffectProperty;
- effectSetter.Value = new DropShadowEffect
+ var effectSetter = new Setter
{
- Opacity = 0.9,
- ShadowDepth = 2,
- BlurRadius = 15
+ Property = Border.EffectProperty,
+ Value = new DropShadowEffect
+ {
+ Opacity = 0.4,
+ ShadowDepth = 2,
+ BlurRadius = 15
+ }
};
var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter;
@@ -261,7 +264,7 @@ public void AddDropShadowEffectToCurrentTheme()
}
else
{
- var baseMargin = (Thickness) marginSetter.Value;
+ var baseMargin = (Thickness)marginSetter.Value;
var newMargin = new Thickness(
baseMargin.Left + ShadowExtraMargin,
baseMargin.Top + ShadowExtraMargin,
@@ -282,8 +285,8 @@ public void RemoveDropShadowEffectFromCurrentTheme()
var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter;
var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter;
-
- if(effectSetter != null)
+
+ if (effectSetter != null)
{
windowBorderStyle.Setters.Remove(effectSetter);
}
@@ -371,11 +374,11 @@ private bool IsBlurTheme()
private void SetWindowAccent(Window w, AccentState state)
{
var windowHelper = new WindowInteropHelper(w);
-
+
// this determines the width of the main query window
w.Width = mainWindowWidth;
windowHelper.EnsureHandle();
-
+
var accent = new AccentPolicy { AccentState = state };
var accentStructSize = Marshal.SizeOf(accent);
diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
index ebef2c6315a..907314ba88e 100644
--- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
+++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
@@ -32,6 +32,7 @@ public string Language
public string ResultFontStyle { get; set; }
public string ResultFontWeight { get; set; }
public string ResultFontStretch { get; set; }
+ public bool UseGlyphIcons { get; set; } = true;
///
diff --git a/Flow.Launcher/Converters/BorderClipConverter.cs b/Flow.Launcher/Converters/BorderClipConverter.cs
new file mode 100644
index 00000000000..83e83f1de04
--- /dev/null
+++ b/Flow.Launcher/Converters/BorderClipConverter.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Data;
+using System.Windows.Media;
+using System.Windows.Documents;
+using System.Windows.Shapes;
+
+// For Clipping inside listbox item
+
+namespace Flow.Launcher.Converters
+{
+ public class BorderClipConverter : IMultiValueConverter
+ {
+ public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (values.Length == 3 && values[0] is double && values[1] is double && values[2] is CornerRadius)
+ {
+ var width = (double)values[0];
+ var height = (double)values[1];
+ Path myPath = new Path();
+ if (width < Double.Epsilon || height < Double.Epsilon)
+ {
+ return Geometry.Empty;
+ }
+ var radius = (CornerRadius)values[2];
+ var radiusHeight = radius.TopLeft;
+
+ // Drawing Round box for bottom round, and rect for top area of listbox.
+ var corner = new RectangleGeometry(new Rect(0, 0, width, height), radius.TopLeft, radius.TopLeft);
+ var box = new RectangleGeometry(new Rect(0, 0, width, radiusHeight), 0, 0);
+
+ GeometryGroup myGeometryGroup = new GeometryGroup();
+ myGeometryGroup.Children.Add(corner);
+ myGeometryGroup.Children.Add(box);
+
+ CombinedGeometry c1 = new CombinedGeometry(GeometryCombineMode.Union, corner, box);
+ myPath.Data = c1;
+
+ myPath.Data.Freeze();
+ return myPath.Data;
+ }
+
+ return DependencyProperty.UnsetValue;
+ }
+
+ public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
+ {
+ throw new NotSupportedException();
+ }
+ }
+
+}
diff --git a/Flow.Launcher/Converters/HighlightTextConverter.cs b/Flow.Launcher/Converters/HighlightTextConverter.cs
index 006e523200b..972dd1bc83e 100644
--- a/Flow.Launcher/Converters/HighlightTextConverter.cs
+++ b/Flow.Launcher/Converters/HighlightTextConverter.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
+using System.Windows.Media;
using System.Windows.Documents;
namespace Flow.Launcher.Converters
@@ -30,7 +31,9 @@ public object Convert(object[] value, Type targetType, object parameter, Culture
var currentCharacter = text.Substring(i, 1);
if (this.ShouldHighlight(highlightData, i))
{
- textBlock.Inlines.Add(new Bold(new Run(currentCharacter)));
+
+ textBlock.Inlines.Add(new Run(currentCharacter) { Style = (Style)Application.Current.FindResource("HighlightStyle") });
+
}
else
{
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index 529fc52a2ee..edf41e1938b 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -77,6 +77,9 @@
Designer
PreserveNewest
+
+ PreserveNewest
+
diff --git a/Flow.Launcher/HotkeyControl.xaml b/Flow.Launcher/HotkeyControl.xaml
index e732cbe97e9..ab786fd5657 100644
--- a/Flow.Launcher/HotkeyControl.xaml
+++ b/Flow.Launcher/HotkeyControl.xaml
@@ -9,11 +9,11 @@
d:DesignHeight="300" d:DesignWidth="300">
-
+
-
-
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml
index 90a920e3ed4..4a9b9270071 100644
--- a/Flow.Launcher/Languages/en.xaml
+++ b/Flow.Launcher/Languages/en.xaml
@@ -38,7 +38,7 @@
Hide tray icon
Query Search Precision
Should Use Pinyin
- Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for transliterating Chinese
+ Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese
Shadow effect is not allowed while current theme has blur effect enabled
@@ -81,8 +81,9 @@
Please select an item
Are you sure you want to delete {0} plugin hotkey?
Query window shadow effect
- Shadow effect has a substantial usage of GPU.
- Not recommended if your computer performance is limited.
+ Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited.
+ Use Segoe Fluent Icons
+ Use Segoe Fluent Icons for query results where supported
HTTP Proxy
diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml
index 346c708377c..5e63020a886 100644
--- a/Flow.Launcher/Languages/sk.xaml
+++ b/Flow.Launcher/Languages/sk.xaml
@@ -81,8 +81,7 @@
Vyberte položku, prosím
Ste si istý, že chcete odstrániť klávesovú skratku {0} pre plugin?
Tieňový efekt v poli vyhľadávania
- Tieňový efekt významne využíva GPU.
- Neodporúča sa, ak je výkon počítača obmedzený.
+ Tieňový efekt významne využíva GPU. Neodporúča sa, ak je výkon počítača obmedzený.
HTTP Proxy
diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml
index efc7f19d9c6..0c2307dc51a 100644
--- a/Flow.Launcher/Languages/zh-cn.xaml
+++ b/Flow.Launcher/Languages/zh-cn.xaml
@@ -76,8 +76,7 @@
请选择一项
你确定要删除插件 {0} 的热键吗?
查询窗口阴影效果
- 阴影效果将占用大量的GPU资源。
- 如果您的计算机性能有限,则不建议使用。
+ 阴影效果将占用大量的GPU资源。 如果您的计算机性能有限,则不建议使用。
HTTP 代理
diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml
index 83cc016bbbd..73b13be8c95 100644
--- a/Flow.Launcher/MainWindow.xaml
+++ b/Flow.Launcher/MainWindow.xaml
@@ -30,6 +30,7 @@
d:DataContext="{d:DesignInstance vm:MainViewModel}">
+
@@ -45,6 +46,8 @@
+
+
@@ -62,13 +65,12 @@
-
+
+ IsEnabled="False">
@@ -82,34 +84,67 @@
PreviewDragOver="OnPreviewDragOver"
AllowDrop="True"
Visibility="Visible"
- Background="Transparent"
- Margin="18,0,56,0">
+ Background="Transparent">
-
+
+
-
+
-
+
+
-
-
-
-
-
-
-
-
-
-
+ Y1="0" Y2="0" X1="-150" X2="-50" Height="2" Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}},Path=ActualWidth}" StrokeThickness="1">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs
index 7521c65d250..e84a3148e2d 100644
--- a/Flow.Launcher/MainWindow.xaml.cs
+++ b/Flow.Launcher/MainWindow.xaml.cs
@@ -207,9 +207,9 @@ private void InitializeNotifyIcon()
private void InitProgressbarAnimation()
{
- var da = new DoubleAnimation(ProgressBar.X2, ActualWidth + 100,
+ var da = new DoubleAnimation(ProgressBar.X2, ActualWidth + 150,
new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
- var da1 = new DoubleAnimation(ProgressBar.X1, ActualWidth, new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
+ var da1 = new DoubleAnimation(ProgressBar.X1, ActualWidth + 50, new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
Storyboard.SetTargetProperty(da, new PropertyPath("(Line.X2)"));
Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X1)"));
_progressBarStoryboard.Children.Add(da);
@@ -313,25 +313,43 @@ private double WindowTop()
///
private void OnKeyDown(object sender, KeyEventArgs e)
{
- if (e.Key == Key.Down)
+ switch (e.Key)
{
- _viewModel.SelectNextItemCommand.Execute(null);
- e.Handled = true;
- }
- else if (e.Key == Key.Up)
- {
- _viewModel.SelectPrevItemCommand.Execute(null);
- e.Handled = true;
- }
- else if (e.Key == Key.PageDown)
- {
- _viewModel.SelectNextPageCommand.Execute(null);
- e.Handled = true;
- }
- else if (e.Key == Key.PageUp)
- {
- _viewModel.SelectPrevPageCommand.Execute(null);
- e.Handled = true;
+ case Key.Down:
+ _viewModel.SelectNextItemCommand.Execute(null);
+ e.Handled = true;
+ break;
+ case Key.Up:
+ _viewModel.SelectPrevItemCommand.Execute(null);
+ e.Handled = true;
+ break;
+ case Key.PageDown:
+ _viewModel.SelectNextPageCommand.Execute(null);
+ e.Handled = true;
+ break;
+ case Key.PageUp:
+ _viewModel.SelectPrevPageCommand.Execute(null);
+ e.Handled = true;
+ break;
+ case Key.Right:
+ if (_viewModel.SelectedIsFromQueryResults()
+ && QueryTextBox.CaretIndex == QueryTextBox.Text.Length
+ && !string.IsNullOrEmpty(QueryTextBox.Text))
+ {
+ _viewModel.LoadContextMenuCommand.Execute(null);
+ e.Handled = true;
+ }
+ break;
+ case Key.Left:
+ if (!_viewModel.SelectedIsFromQueryResults() && QueryTextBox.CaretIndex == 0)
+ {
+ _viewModel.EscCommand.Execute(null);
+ e.Handled = true;
+ }
+ break;
+ default:
+ break;
+
}
}
diff --git a/Flow.Launcher/Resources/Segoe Fluent Icons.ttf b/Flow.Launcher/Resources/Segoe Fluent Icons.ttf
new file mode 100644
index 00000000000..8f05a4bbc13
Binary files /dev/null and b/Flow.Launcher/Resources/Segoe Fluent Icons.ttf differ
diff --git a/Flow.Launcher/ResultListBox.xaml b/Flow.Launcher/ResultListBox.xaml
index dfee8981072..d52474d3f44 100644
--- a/Flow.Launcher/ResultListBox.xaml
+++ b/Flow.Launcher/ResultListBox.xaml
@@ -20,6 +20,7 @@
IsSynchronizedWithCurrentItem="True"
PreviewMouseDown="ListBox_PreviewMouseDown">
+
-
+
+
@@ -104,7 +110,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+ DisplayMemberPath="Display" SelectedValuePath="LanguageCode" Grid.Column="2"/>
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+ Margin="0, 0, 0, 0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ui:ScrollViewerHelper.AutoHideScrollBars="{Binding AutoHideScrollBar, Mode=OneWay}" ItemContainerStyle="{StaticResource PluginList}" ScrollViewer.IsDeferredScrollingEnabled="True">
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
@@ -154,6 +475,7 @@
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+ Style="{DynamicResource QueryBoxStyle}"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
+ Width="130" Margin="10 0 0 0">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
+ Width="130" Margin="10 -2 0 0">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
- #4D4D4D
-
-
+
+
+
@@ -120,15 +169,16 @@
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
Grid.Column="0"
- Margin="{TemplateBinding Padding}"
+ Margin="0"
Grid.Row="0" />
-
@@ -149,7 +198,7 @@
-
+
@@ -158,6 +207,7 @@
+
+
+
+
+
+
+
+
+ F1 M12000,12000z M0,0z M10354,10962C10326,10951 10279,10927 10249,10907 10216,10886 9476,10153 8370,9046 7366,8042 6541,7220 6536,7220 6532,7220 6498,7242 6461,7268 6213,7447 5883,7619 5592,7721 5194,7860 4802,7919 4360,7906 3612,7886 2953,7647 2340,7174 2131,7013 1832,6699 1664,6465 1394,6088 1188,5618 1097,5170 1044,4909 1030,4764 1030,4470 1030,4130 1056,3914 1135,3609 1263,3110 1511,2633 1850,2235 1936,2134 2162,1911 2260,1829 2781,1395 3422,1120 4090,1045 4271,1025 4667,1025 4848,1045 5505,1120 6100,1368 6630,1789 6774,1903 7081,2215 7186,2355 7362,2588 7467,2759 7579,2990 7802,3455 7911,3937 7911,4460 7911,4854 7861,5165 7737,5542 7684,5702 7675,5724 7602,5885 7517,6071 7390,6292 7270,6460 7242,6499 7220,6533 7220,6538 7220,6542 8046,7371 9055,8380 10441,9766 10898,10229 10924,10274 10945,10308 10966,10364 10976,10408 10990,10472 10991,10493 10980,10554 10952,10717 10840,10865 10690,10937 10621,10971 10607,10974 10510,10977 10425,10980 10395,10977 10354,10962z M4685,7050C5214,7001 5694,6809 6100,6484 6209,6396 6396,6209 6484,6100 7151,5267 7246,4110 6721,3190 6369,2571 5798,2137 5100,1956 4706,1855 4222,1855 3830,1957 3448,2056 3140,2210 2838,2453 2337,2855 2010,3427 1908,4080 1877,4274 1877,4656 1908,4850 1948,5105 2028,5370 2133,5590 2459,6272 3077,6782 3810,6973 3967,7014 4085,7034 4290,7053 4371,7061 4583,7059 4685,7050z
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/BlackAndWhite.xaml b/Flow.Launcher/Themes/BlackAndWhite.xaml
index 01e7e0bc134..395f5d614bc 100644
--- a/Flow.Launcher/Themes/BlackAndWhite.xaml
+++ b/Flow.Launcher/Themes/BlackAndWhite.xaml
@@ -3,32 +3,51 @@
+
-
+
- #4F6180
+ #494949
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/BlurBlack Darker.xaml b/Flow.Launcher/Themes/BlurBlack Darker.xaml
index 2fb3f1faa92..98ab77314b3 100644
--- a/Flow.Launcher/Themes/BlurBlack Darker.xaml
+++ b/Flow.Launcher/Themes/BlurBlack Darker.xaml
@@ -7,6 +7,9 @@
True
+
@@ -42,6 +47,7 @@
#356ef3
+
+
+
diff --git a/Flow.Launcher/Themes/BlurBlack.xaml b/Flow.Launcher/Themes/BlurBlack.xaml
index c03285af0ee..2fdbd0cd332 100644
--- a/Flow.Launcher/Themes/BlurBlack.xaml
+++ b/Flow.Launcher/Themes/BlurBlack.xaml
@@ -6,7 +6,9 @@
True
-
+
@@ -33,6 +35,7 @@
@@ -54,9 +57,32 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/BlurWhite.xaml b/Flow.Launcher/Themes/BlurWhite.xaml
index d88c033c977..99b5b222cd1 100644
--- a/Flow.Launcher/Themes/BlurWhite.xaml
+++ b/Flow.Launcher/Themes/BlurWhite.xaml
@@ -6,7 +6,9 @@
True
-
+
-
+
+
+
diff --git a/Flow.Launcher/Themes/Darker.xaml b/Flow.Launcher/Themes/Darker.xaml
index ae9ba899aff..675092bf8ab 100644
--- a/Flow.Launcher/Themes/Darker.xaml
+++ b/Flow.Launcher/Themes/Darker.xaml
@@ -4,20 +4,23 @@
-
+
-
-
-
+
-
+
@@ -25,18 +28,20 @@
-
+ #4d4d4d
-
+
diff --git a/Flow.Launcher/Themes/Discord Dark.xaml b/Flow.Launcher/Themes/Discord Dark.xaml
new file mode 100644
index 00000000000..aa1067bcadb
--- /dev/null
+++ b/Flow.Launcher/Themes/Discord Dark.xaml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #49443c
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/Themes/Gray.xaml b/Flow.Launcher/Themes/Gray.xaml
index 1fbaa959aa7..c3cec7bd86f 100644
--- a/Flow.Launcher/Themes/Gray.xaml
+++ b/Flow.Launcher/Themes/Gray.xaml
@@ -7,15 +7,17 @@
-
+
#787878
+
+
+
diff --git a/Flow.Launcher/Themes/League.xaml b/Flow.Launcher/Themes/League.xaml
new file mode 100644
index 00000000000..f57457d78cc
--- /dev/null
+++ b/Flow.Launcher/Themes/League.xaml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #192026
+
+
+
+
+
+ F1 M12000,12000z M0,0z M10354,10962C10326,10951 10279,10927 10249,10907 10216,10886 9476,10153 8370,9046 7366,8042 6541,7220 6536,7220 6532,7220 6498,7242 6461,7268 6213,7447 5883,7619 5592,7721 5194,7860 4802,7919 4360,7906 3612,7886 2953,7647 2340,7174 2131,7013 1832,6699 1664,6465 1394,6088 1188,5618 1097,5170 1044,4909 1030,4764 1030,4470 1030,4130 1056,3914 1135,3609 1263,3110 1511,2633 1850,2235 1936,2134 2162,1911 2260,1829 2781,1395 3422,1120 4090,1045 4271,1025 4667,1025 4848,1045 5505,1120 6100,1368 6630,1789 6774,1903 7081,2215 7186,2355 7362,2588 7467,2759 7579,2990 7802,3455 7911,3937 7911,4460 7911,4854 7861,5165 7737,5542 7684,5702 7675,5724 7602,5885 7517,6071 7390,6292 7270,6460 7242,6499 7220,6533 7220,6538 7220,6542 8046,7371 9055,8380 10441,9766 10898,10229 10924,10274 10945,10308 10966,10364 10976,10408 10990,10472 10991,10493 10980,10554 10952,10717 10840,10865 10690,10937 10621,10971 10607,10974 10510,10977 10425,10980 10395,10977 10354,10962z M4685,7050C5214,7001 5694,6809 6100,6484 6209,6396 6396,6209 6484,6100 7151,5267 7246,4110 6721,3190 6369,2571 5798,2137 5100,1956 4706,1855 4222,1855 3830,1957 3448,2056 3140,2210 2838,2453 2337,2855 2010,3427 1908,4080 1877,4274 1877,4656 1908,4850 1948,5105 2028,5370 2133,5590 2459,6272 3077,6782 3810,6973 3967,7014 4085,7034 4290,7053 4371,7061 4583,7059 4685,7050z
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/Light.xaml b/Flow.Launcher/Themes/Light.xaml
index 2380f424e4c..10c99594143 100644
--- a/Flow.Launcher/Themes/Light.xaml
+++ b/Flow.Launcher/Themes/Light.xaml
@@ -4,15 +4,19 @@
-
+
- #909090
+ #d9d9d9
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/Metro Server.xaml b/Flow.Launcher/Themes/Metro Server.xaml
index 9d74252c59a..f6a5326636a 100644
--- a/Flow.Launcher/Themes/Metro Server.xaml
+++ b/Flow.Launcher/Themes/Metro Server.xaml
@@ -1,39 +1,57 @@
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
- #006ac1
-
-
+
+
+
+
+
+
+
+
+
+
+
+ #04152E
+
+
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/Nord Darker.xaml b/Flow.Launcher/Themes/Nord Darker.xaml
index 13f4bf230b8..413effa518b 100644
--- a/Flow.Launcher/Themes/Nord Darker.xaml
+++ b/Flow.Launcher/Themes/Nord Darker.xaml
@@ -3,6 +3,9 @@
+
@@ -22,29 +25,31 @@
-
+
- #5e81ac
+ #4e586b
+
+
+
diff --git a/Flow.Launcher/Themes/Nord.xaml b/Flow.Launcher/Themes/Nord.xaml
index 2253b341015..2fcc11ef2bd 100644
--- a/Flow.Launcher/Themes/Nord.xaml
+++ b/Flow.Launcher/Themes/Nord.xaml
@@ -3,16 +3,19 @@
+
-
+
- #5e81ac
+ #596479
-
+
+
+
diff --git a/Flow.Launcher/Themes/Pink.xaml b/Flow.Launcher/Themes/Pink.xaml
index d3130584b95..cb5f56a8e75 100644
--- a/Flow.Launcher/Themes/Pink.xaml
+++ b/Flow.Launcher/Themes/Pink.xaml
@@ -2,35 +2,76 @@
+
-
+
#cc1081
-
-
+
+
+ F1 M20,20z M0,0z M14.75,1A5.24,5.24,0,0,0,10,4A5.24,5.24,0,0,0,0,6.25C0,11.75 10,19 10,19 10,19 20,11.75 20,6.25A5.25,5.25,0,0,0,14.75,1z
+
+
+
+
+
\ No newline at end of file
diff --git a/Flow.Launcher/Themes/Sublime.xaml b/Flow.Launcher/Themes/Sublime.xaml
new file mode 100644
index 00000000000..e50230f3395
--- /dev/null
+++ b/Flow.Launcher/Themes/Sublime.xaml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #3c454e
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/Themes/Win10Light.xaml b/Flow.Launcher/Themes/Win10Light.xaml
new file mode 100644
index 00000000000..33dbeeb4d43
--- /dev/null
+++ b/Flow.Launcher/Themes/Win10Light.xaml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #ccd0d4
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/Themes/Win11Dark.xaml b/Flow.Launcher/Themes/Win11Dark.xaml
new file mode 100644
index 00000000000..a0ac25f9ee2
--- /dev/null
+++ b/Flow.Launcher/Themes/Win11Dark.xaml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #2d2d2d
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/Themes/Win11Light.xaml b/Flow.Launcher/Themes/Win11Light.xaml
new file mode 100644
index 00000000000..6d5e41a187e
--- /dev/null
+++ b/Flow.Launcher/Themes/Win11Light.xaml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #eaeaea
+
+
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index 6eee51bd883..4212280bb3b 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -292,6 +292,8 @@ public void ChangeQueryText(string queryText)
}
public bool LastQuerySelected { get; set; }
+
+ // This is not a reliable indicator of the cursor's position, it is manually set for a specific purpose.
public bool QueryTextCursorMovedToEnd { get; set; }
private ResultsViewModel _selectedResults;
@@ -595,6 +597,7 @@ private Result ContextMenuTopMost(Result result)
{
Title = InternationalizationManager.Instance.GetTranslation("setAsTopMostInThisQuery"),
IcoPath = "Images\\up.png",
+ Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xeac2"),
PluginDirectory = Constant.ProgramDirectory,
Action = _ =>
{
@@ -632,7 +635,7 @@ private Result ContextMenuPluginInfo(string id)
return menu;
}
- private bool SelectedIsFromQueryResults()
+ internal bool SelectedIsFromQueryResults()
{
var selected = SelectedResults == Results;
return selected;
diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs
index 328dbcba5f6..ed3d842e3b9 100644
--- a/Flow.Launcher/ViewModel/ResultViewModel.cs
+++ b/Flow.Launcher/ViewModel/ResultViewModel.cs
@@ -44,13 +44,42 @@ public ResultViewModel(Result result, Settings settings)
private Settings Settings { get; }
public Visibility ShowOpenResultHotkey =>
- Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Hidden;
+ Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Collapsed;
- public Visibility ShowIcon => Result.IcoPath != null || Result.Icon is not null || Glyph == null
- ? Visibility.Visible
- : Visibility.Hidden;
+ public Visibility ShowIcon
+ {
+ get
+ {
+ // If both glyph and image icons are not available, it will then be the default icon
+ if (!ImgIconAvailable && !GlyphAvailable)
+ return Visibility.Visible;
+
+ // Although user can choose to use glyph icons, plugins may choose to supply only image icons.
+ // In this case we ignore the setting because otherwise icons will not display as intended
+ if (Settings.UseGlyphIcons && !GlyphAvailable && ImgIconAvailable)
+ return Visibility.Visible;
+
+ return !Settings.UseGlyphIcons && ImgIconAvailable ? Visibility.Visible : Visibility.Hidden;
+ }
+ }
+
+ public Visibility ShowGlyph
+ {
+ get
+ {
+ // Although user can choose to not use glyph icons, plugins may choose to supply only glyph icons.
+ // In this case we ignore the setting because otherwise icons will not display as intended
+ if (!Settings.UseGlyphIcons && !ImgIconAvailable && GlyphAvailable)
+ return Visibility.Visible;
+
+ return Settings.UseGlyphIcons && GlyphAvailable ? Visibility.Visible : Visibility.Hidden;
+ }
+ }
+
+ private bool GlyphAvailable => Glyph is not null;
+
+ private bool ImgIconAvailable => !string.IsNullOrEmpty(Result.IcoPath) || Result.Icon is not null;
- public Visibility ShowGlyph => Glyph is not null ? Visibility.Visible : Visibility.Hidden;
public string OpenResultModifiers => Settings.OpenResultModifiers;
public string ShowTitleToolTip => string.IsNullOrEmpty(Result.TitleToolTip)
diff --git a/Flow.Launcher/ViewModel/ResultsViewModel.cs b/Flow.Launcher/ViewModel/ResultsViewModel.cs
index 0766c7bbcd1..01a19d871c8 100644
--- a/Flow.Launcher/ViewModel/ResultsViewModel.cs
+++ b/Flow.Launcher/ViewModel/ResultsViewModel.cs
@@ -42,7 +42,7 @@ public ResultsViewModel(Settings settings) : this()
#region Properties
- public int MaxHeight => MaxResults * 50;
+ public int MaxHeight => MaxResults * 52;
public int SelectedIndex { get; set; }
@@ -166,7 +166,7 @@ private void UpdateResults(List newResults, CancellationToken t
switch (Visbility)
{
case Visibility.Collapsed when Results.Count > 0:
- Margin = new Thickness { Top = 8 };
+ Margin = new Thickness { Top = 0 };
SelectedIndex = 0;
Visbility = Visibility.Visible;
break;
diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs
index 53789d2d90d..d3a4f9a83a5 100644
--- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs
+++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs
@@ -304,6 +304,12 @@ public bool DropShadowEffect
}
}
+ public bool UseGlyphIcons
+ {
+ get { return Settings.UseGlyphIcons; }
+ set { Settings.UseGlyphIcons = value; }
+ }
+
public Brush PreviewBackground
{
get
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs
index b7fe1373f61..5a8a65985f3 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs
@@ -190,7 +190,8 @@ public List LoadContextMenus(Result selectedResult)
"flowlauncher_plugin_program_disable_dlgtitle_success_message"));
return false;
},
- IcoPath = "Images/disable.png"
+ IcoPath = "Images/disable.png",
+ Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xece4"),
}
);
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 9d753085652..a09b8c254d9 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -149,7 +149,8 @@ public List ContextMenus(IPublicAPI api)
return true;
},
- IcoPath = "Images/user.png"
+ IcoPath = "Images/user.png",
+ Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe7ee"),
},
new Result
{
@@ -168,7 +169,8 @@ public List ContextMenus(IPublicAPI api)
return true;
},
- IcoPath = "Images/cmd.png"
+ IcoPath = "Images/cmd.png",
+ Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe7ef"),
},
new Result
{
@@ -192,7 +194,8 @@ public List ContextMenus(IPublicAPI api)
return true;
},
- IcoPath = "Images/folder.png"
+ IcoPath = "Images/folder.png",
+ Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe838"),
}
};
return contextMenus;
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml
index 8712cdb8382..0f9fa99ff5f 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml
@@ -15,12 +15,12 @@
-
+
-
+
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
index ba5de8a8900..282c8a25dd0 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
@@ -96,6 +96,7 @@ private List Commands()
{
Title = "Shutdown",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_shutdown_computer"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe7e8"),
IcoPath = "Images\\shutdown.png",
Action = c =>
{
@@ -115,6 +116,7 @@ private List Commands()
{
Title = "Restart",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_restart_computer"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe777"),
IcoPath = "Images\\restart.png",
Action = c =>
{
@@ -134,6 +136,7 @@ private List Commands()
{
Title = "Restart With Advanced Boot Options",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_restart_advanced"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xecc5"),
IcoPath = "Images\\restart_advanced.png",
Action = c =>
{
@@ -152,6 +155,7 @@ private List Commands()
{
Title = "Log Off",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_log_off"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe77b"),
IcoPath = "Images\\logoff.png",
Action = c => ExitWindowsEx(EWX_LOGOFF, 0)
},
@@ -159,6 +163,7 @@ private List Commands()
{
Title = "Lock",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_lock"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe72e"),
IcoPath = "Images\\lock.png",
Action = c =>
{
@@ -170,6 +175,7 @@ private List Commands()
{
Title = "Sleep",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_sleep"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xec46"),
IcoPath = "Images\\sleep.png",
Action = c => FormsApplication.SetSuspendState(PowerState.Suspend, false, false)
},
@@ -177,6 +183,7 @@ private List Commands()
{
Title = "Hibernate",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_hibernate"),
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe945"),
IcoPath = "Images\\hibernate.png",
Action= c =>
{
@@ -194,6 +201,7 @@ private List Commands()
Title = "Empty Recycle Bin",
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_emptyrecyclebin"),
IcoPath = "Images\\recyclebin.png",
+ Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe74d"),
Action = c =>
{
// http://www.pinvoke.net/default.aspx/shell32/SHEmptyRecycleBin.html