Skip to content

Commit 5f49901

Browse files
committed
Make font aliasing optional
1 parent 13fe73f commit 5f49901

17 files changed

+68
-15
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ While Windows 9x used the bitmap font MS Sans Serif for its distinctive appearan
5252

5353
Tahoma is available on Windows and macOS, but not Linux. A free alternative, 'Wine Tahoma Regular,' is distributed under the GNU Lesser General Public License, but I’m unsure if it’s compatible with the MIT license. Any insights would be appreciated.
5454

55+
#### Font aliasing
56+
57+
For the old look and feel, Classic.Avalonia disables antialiasing (smoothing) for font rendering. If for some reason, you would like to use Classic.Avalonia **with** font antialiasing, set property `FontAliasing` on the `ClassicTheme`:
58+
59+
```
60+
<classic:ClassicTheme FontAliasing="False" />
61+
```
62+
5563
## Custom Controls
5664

5765
`Classic.Avalonia` introduces several custom controls with a classic appearance and behavior.

src/Classic.Avalonia.Theme/ClassicTheme.axaml.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
using Avalonia.Markup.Xaml;
88
using Avalonia.Metadata;
99
using Avalonia.Styling;
10+
using Classic.CommonControls;
1011

1112
[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Classic.Avalonia.Theme")]
1213

1314
namespace Classic.Avalonia.Theme;
1415

1516
public class ClassicTheme : Styles
1617
{
18+
public static readonly StyledProperty<bool> FontAliasingProperty = AvaloniaProperty.Register<ClassicTheme, bool>(nameof(FontAliasing), defaultValue: true);
1719
public static ThemeVariant Standard { get; } = new("Standard", ThemeVariant.Light);
1820
public static ThemeVariant Classic { get; } = new("Classic", ThemeVariant.Light);
1921
public static ThemeVariant Brick { get; } = new("Brick", ThemeVariant.Light);
@@ -52,6 +54,11 @@ static void UpdateRangeClasses(RangeBase bar)
5254
window.Classes.Add("__classic_theme_is_mac");
5355
});
5456
}
57+
58+
FontAliasingProperty.Changed.AddClassHandler<ClassicTheme>((theme, e) =>
59+
{
60+
theme.Resources[SystemParameters.FontAliasingKey] = e.GetNewValue<bool>();
61+
});
5562
}
5663

5764
/// <summary>
@@ -62,4 +69,10 @@ public ClassicTheme(IServiceProvider? sp = null)
6269
{
6370
AvaloniaXamlLoader.Load(sp, this);
6471
}
72+
73+
public bool FontAliasing
74+
{
75+
get => GetValue(FontAliasingProperty);
76+
set => SetValue(FontAliasingProperty, value);
77+
}
6578
}

src/Classic.Avalonia.Theme/Styles/AutoAttachTitleBar.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
<TextBlock Text="{Binding $parent[Window].Title}"
3737
VerticalAlignment="Center"
3838
HorizontalAlignment="Stretch"
39-
RenderOptions.TextRenderingMode="Alias"
4039
FontFamily="{DynamicResource {x:Static common:NonClientMetrics.CaptionFontKey}}"
4140
FontSize="{DynamicResource {x:Static common:NonClientMetrics.CaptionFontSizeKey}}"
4241
IsHitTestVisible="False"

src/Classic.Avalonia.Theme/Styles/CalendarDatePicker.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:common="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
44
xmlns:classic="clr-namespace:Classic.Avalonia.Theme"
5+
xmlns:utils="clr-namespace:Classic.Avalonia.Theme.Utils"
56
x:ClassModifier="internal">
67
<Design.PreviewWith>
78
<Border Height="200"
@@ -79,7 +80,7 @@
7980
DisplayDateStart="{TemplateBinding DisplayDateStart}"
8081
FirstDayOfWeek="{TemplateBinding FirstDayOfWeek}"
8182
IsTodayHighlighted="{TemplateBinding IsTodayHighlighted}"
82-
RenderOptions.TextRenderingMode="Alias"
83+
utils:FontUtils.FontAliasing="{DynamicResource {x:Static common:SystemParameters.FontAliasingKey}}"
8384
RenderOptions.EdgeMode="Aliased"
8485
SelectedDate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedDate,
8586
Mode=TwoWay}" />

src/Classic.Avalonia.Theme/Styles/ComboBox.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xmlns:classic="clr-namespace:Classic.Avalonia.Theme"
44
xmlns:common="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
55
xmlns:controls="clr-namespace:Classic.Avalonia.Theme.Controls"
6+
xmlns:utils="clr-namespace:Classic.Avalonia.Theme.Utils"
67
x:ClassModifier="internal">
78
<Design.PreviewWith>
89
<ComboBox Width="200" IsEnabled="False"></ComboBox>
@@ -102,7 +103,7 @@
102103
<Border x:Name="DropDownBorder"
103104
Background="{DynamicResource {x:Static common:SystemColors.WindowBrushKey}}"
104105
BorderThickness="1"
105-
RenderOptions.TextRenderingMode="Alias"
106+
utils:FontUtils.FontAliasing="{DynamicResource {x:Static common:SystemParameters.FontAliasingKey}}"
106107
BorderBrush="{DynamicResource {x:Static common:SystemColors.WindowFrameBrushKey}}">
107108
<ScrollViewer Name="DropDownScrollViewer"
108109
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"

src/Classic.Avalonia.Theme/Styles/DatePicker.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xmlns:sys="using:System"
44
xmlns:classic="clr-namespace:Classic.Avalonia.Theme"
55
xmlns:common="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
6+
xmlns:utils="clr-namespace:Classic.Avalonia.Theme.Utils"
67
x:ClassModifier="internal">
78
<Design.PreviewWith>
89
<Border Padding="20">
@@ -166,7 +167,7 @@
166167
Placement="Bottom"
167168
PlacementTarget="{Binding #PART_FlyoutButton}"
168169
WindowManagerAddShadowHint="False">
169-
<DatePickerPresenter Name="PART_PickerPresenter" RenderOptions.TextRenderingMode="Alias" />
170+
<DatePickerPresenter Name="PART_PickerPresenter" utils:FontUtils.FontAliasing="{DynamicResource {x:Static common:SystemParameters.FontAliasingKey}}" />
170171
</Popup>
171172
</Grid>
172173
</classic:ClassicBorderDecorator>

src/Classic.Avalonia.Theme/Styles/FlyoutPresenter.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:classic="clr-namespace:Classic.Avalonia.Theme"
44
xmlns:common="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
5+
xmlns:utils="clr-namespace:Classic.Avalonia.Theme.Utils"
56
x:ClassModifier="internal">
67
<ControlTheme x:Key="{x:Type FlyoutPresenter}"
78
TargetType="FlyoutPresenter">
@@ -19,7 +20,7 @@
1920
Background="{TemplateBinding Background}"
2021
RenderOptions.EdgeMode="Aliased"
2122
RenderOptions.BitmapInterpolationMode="None"
22-
RenderOptions.TextRenderingMode="Alias"
23+
utils:FontUtils.FontAliasing="{DynamicResource {x:Static common:SystemParameters.FontAliasingKey}}"
2324
BorderThickness="{TemplateBinding BorderThickness}">
2425
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
2526
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">

src/Classic.Avalonia.Theme/Styles/ManagedFileChooser.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
xmlns:converters="clr-namespace:Avalonia.Controls.Converters;assembly=Avalonia.Controls"
66
xmlns:common="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
77
xmlns:classic="clr-namespace:Classic.Avalonia.Theme"
8+
xmlns:utils="clr-namespace:Classic.Avalonia.Theme.Utils"
89
x:ClassModifier="internal">
910
<Design.PreviewWith>
1011
<dialogs:ManagedFileChooser Width="555" Height="384"/>
@@ -80,7 +81,7 @@
8081
BorderThickness="{TemplateBinding BorderThickness}"
8182
CornerRadius="{TemplateBinding CornerRadius}"
8283
Padding="{TemplateBinding Padding}"
83-
RenderOptions.TextRenderingMode="Alias">
84+
utils:FontUtils.FontAliasing="{DynamicResource {x:Static common:SystemParameters.FontAliasingKey}}">
8485
<DockPanel Margin="5">
8586
<DockPanel Margin="0,0,75,5"
8687
DockPanel.Dock="Top">

src/Classic.Avalonia.Theme/Styles/Menu.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
<ItemsPresenter Name="PART_ItemsPresenter"
4747
Margin="1"
4848
Grid.IsSharedSizeScope="True"
49-
RenderOptions.TextRenderingMode="Alias"
5049
ItemsPanel="{TemplateBinding ItemsPanel}" />
5150
</ScrollViewer>
5251
</classic:ClassicBorderDecorator>

src/Classic.Avalonia.Theme/Styles/MenuFlyoutPresenter.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:classic="clr-namespace:Classic.Avalonia.Theme"
44
xmlns:common="clr-namespace:Classic.CommonControls;assembly=Classic.CommonControls.Avalonia"
5+
xmlns:utils="clr-namespace:Classic.Avalonia.Theme.Utils"
56
x:ClassModifier="internal">
67
<ControlTheme x:Key="{x:Type MenuFlyoutPresenter}"
78
TargetType="MenuFlyoutPresenter">
@@ -15,7 +16,7 @@
1516
BorderBrush="{x:Static classic:ClassicBorderDecorator.ClassicBorderBrush}"
1617
RenderOptions.EdgeMode="Aliased"
1718
RenderOptions.BitmapInterpolationMode="None"
18-
RenderOptions.TextRenderingMode="Alias"
19+
utils:FontUtils.FontAliasing="{DynamicResource {x:Static common:SystemParameters.FontAliasingKey}}"
1920
BorderThickness="2">
2021
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
2122
Theme="{StaticResource SimpleMenuScrollViewer}"

0 commit comments

Comments
 (0)