Browse Source

Bunch load of icons

flabbet 1 year ago
parent
commit
d16f36a946

+ 6 - 1
src/PixiEditor.AvaloniaUI/Models/Palettes/Palette.cs

@@ -9,6 +9,7 @@ namespace PixiEditor.AvaloniaUI.Models.Palettes;
 internal class Palette : ObservableObject, IPalette
 {
     private string _name = "";
+    private bool _isFavourite;
 
     public string Name
     {
@@ -29,7 +30,11 @@ internal class Palette : ObservableObject, IPalette
         }
     }
 
-    public bool IsFavourite { get; set; }
+    public bool IsFavourite
+    {
+        get => _isFavourite;
+        set => SetProperty(ref _isFavourite, value);
+    }
 
     public PaletteListDataSource Source { get; }
 

+ 4 - 2
src/PixiEditor.AvaloniaUI/ViewModels/Document/DocumentManagerViewModel.cs

@@ -112,7 +112,8 @@ internal class DocumentManagerViewModel : SubViewModel<ViewModelMain>, IDocument
         ActiveDocument?.Operations.RotateImage(angle, ActiveDocument.GetSelectedMembers());
     }
 
-    [Command.Basic("PixiEditor.Document.ToggleVerticalSymmetryAxis", "TOGGLE_VERT_SYMMETRY_AXIS", "TOGGLE_VERT_SYMMETRY_AXIS", CanExecute = "PixiEditor.HasDocument", Icon = "SymmetryVertical.png")]
+    [Command.Basic("PixiEditor.Document.ToggleVerticalSymmetryAxis", "TOGGLE_VERT_SYMMETRY_AXIS", "TOGGLE_VERT_SYMMETRY_AXIS", CanExecute = "PixiEditor.HasDocument", 
+        Icon = PixiPerfectIcons.YSymmetry)]
     public void ToggleVerticalSymmetryAxis()
     {
         if (ActiveDocument is null)
@@ -120,7 +121,8 @@ internal class DocumentManagerViewModel : SubViewModel<ViewModelMain>, IDocument
         ActiveDocument.VerticalSymmetryAxisEnabledBindable ^= true;
     }
 
-    [Command.Basic("PixiEditor.Document.ToggleHorizontalSymmetryAxis", "TOGGLE_HOR_SYMMETRY_AXIS", "TOGGLE_HOR_SYMMETRY_AXIS", CanExecute = "PixiEditor.HasDocument", Icon = "SymmetryHorizontal.png")]
+    [Command.Basic("PixiEditor.Document.ToggleHorizontalSymmetryAxis", "TOGGLE_HOR_SYMMETRY_AXIS", "TOGGLE_HOR_SYMMETRY_AXIS", CanExecute = "PixiEditor.HasDocument", 
+        Icon = PixiPerfectIcons.XSymmetry)]
     public void ToggleHorizontalSymmetryAxis()
     {
         if (ActiveDocument is null)

+ 14 - 8
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayersViewModel.cs

@@ -110,7 +110,8 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
             doc.Operations.DeleteStructureMembers(selected);
     }
 
-    [Command.Basic("PixiEditor.Layer.NewFolder", "NEW_FOLDER", "CREATE_NEW_FOLDER", CanExecute = "PixiEditor.Layer.CanCreateNewMember", Icon = "Folder-add.png")]
+    [Command.Basic("PixiEditor.Layer.NewFolder", "NEW_FOLDER", "CREATE_NEW_FOLDER", CanExecute = "PixiEditor.Layer.CanCreateNewMember",
+        Icon = PixiPerfectIcons.FolderPlus)]
     public void NewFolder()
     {
         if (Owner.DocumentManagerSubViewModel.ActiveDocument is not { } doc)
@@ -118,7 +119,8 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc.Operations.CreateStructureMember(StructureMemberType.Folder);
     }
 
-    [Command.Basic("PixiEditor.Layer.NewLayer", "NEW_LAYER", "CREATE_NEW_LAYER", CanExecute = "PixiEditor.Layer.CanCreateNewMember", Key = Key.N, Modifiers = KeyModifiers.Control | KeyModifiers.Shift, Icon = "Layer-add.png")]
+    [Command.Basic("PixiEditor.Layer.NewLayer", "NEW_LAYER", "CREATE_NEW_LAYER", CanExecute = "PixiEditor.Layer.CanCreateNewMember", Key = Key.N, Modifiers = KeyModifiers.Control | KeyModifiers.Shift, 
+        Icon = PixiPerfectIcons.FilePlus)]
     public void NewLayer()
     {
         if (Owner.DocumentManagerSubViewModel.ActiveDocument is not { } doc)
@@ -237,7 +239,8 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
     [Evaluator.CanExecute("PixiEditor.Layer.ActiveLayerHasNoMask")]
     public bool ActiveLayerHasNoMask() => !Owner.DocumentManagerSubViewModel.ActiveDocument?.SelectedStructureMember?.HasMaskBindable ?? false;
 
-    [Command.Basic("PixiEditor.Layer.CreateMask", "CREATE_MASK", "CREATE_MASK", CanExecute = "PixiEditor.Layer.ActiveLayerHasNoMask", Icon = "Create-mask.png")]
+    [Command.Basic("PixiEditor.Layer.CreateMask", "CREATE_MASK", "CREATE_MASK", CanExecute = "PixiEditor.Layer.ActiveLayerHasNoMask", 
+        Icon = PixiPerfectIcons.CreateMask)]
     public void CreateMask()
     {
         var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
@@ -247,7 +250,7 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc!.Operations.CreateMask(member);
     }
 
-    [Command.Basic("PixiEditor.Layer.DeleteMask", "DELETE_MASK", "DELETE_MASK", CanExecute = "PixiEditor.Layer.ActiveLayerHasMask", Icon = "PixiPerfectIcons.Trash")]
+    [Command.Basic("PixiEditor.Layer.DeleteMask", "DELETE_MASK", "DELETE_MASK", CanExecute = "PixiEditor.Layer.ActiveLayerHasMask", Icon = PixiPerfectIcons.Trash)]
     public void DeleteMask()
     {
         var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
@@ -332,7 +335,8 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
     [Command.Basic("PixiEditor.Layer.MergeWithAbove", "MERGE_WITH_ABOVE", "MERGE_WITH_ABOVE_DESCRIPTIVE", CanExecute = "PixiEditor.Layer.HasMemberAbove")]
     public void MergeWithAbove() => MergeSelectedWith(true);
 
-    [Command.Basic("PixiEditor.Layer.MergeWithBelow", "MERGE_WITH_BELOW", "MERGE_WITH_BELOW_DESCRIPTIVE", CanExecute = "PixiEditor.Layer.HasMemberBelow", Icon = "Merge-downwards.png")]
+    [Command.Basic("PixiEditor.Layer.MergeWithBelow", "MERGE_WITH_BELOW", "MERGE_WITH_BELOW_DESCRIPTIVE", CanExecute = "PixiEditor.Layer.HasMemberBelow", 
+        Icon = PixiPerfectIcons.Merge)]
     public void MergeWithBelow() => MergeSelectedWith(false);
 
     [Evaluator.CanExecute("PixiEditor.Layer.ReferenceLayerExists")]
@@ -393,7 +397,7 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         return null;
     }
 
-    [Command.Basic("PixiEditor.Layer.DeleteReferenceLayer", "DELETE_REFERENCE_LAYER", "DELETE_REFERENCE_LAYER", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", Icon = "PixiPerfectIcons.Trash")]
+    [Command.Basic("PixiEditor.Layer.DeleteReferenceLayer", "DELETE_REFERENCE_LAYER", "DELETE_REFERENCE_LAYER", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", Icon = PixiPerfectIcons.Trash)]
     public void DeleteReferenceLayer()
     {
         var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
@@ -403,7 +407,8 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc.Operations.DeleteReferenceLayer();
     }
 
-    [Command.Basic("PixiEditor.Layer.TransformReferenceLayer", "TRANSFORM_REFERENCE_LAYER", "TRANSFORM_REFERENCE_LAYER", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", Icon = "crop.png")]
+    [Command.Basic("PixiEditor.Layer.TransformReferenceLayer", "TRANSFORM_REFERENCE_LAYER", "TRANSFORM_REFERENCE_LAYER", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", 
+        Icon = PixiPerfectIcons.Crop)]
     public void TransformReferenceLayer()
     {
         var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
@@ -423,7 +428,8 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc.ReferenceLayerViewModel.IsTopMost = !doc.ReferenceLayerViewModel.IsTopMost;
     }
 
-    [Command.Basic("PixiEditor.Layer.ResetReferenceLayerPosition", "RESET_REFERENCE_LAYER_POS", "RESET_REFERENCE_LAYER_POS", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", Icon = "Layout.png")]
+    [Command.Basic("PixiEditor.Layer.ResetReferenceLayerPosition", "RESET_REFERENCE_LAYER_POS", "RESET_REFERENCE_LAYER_POS", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", 
+        Icon = PixiPerfectIcons.Reset)]
     public void ResetReferenceLayerPosition()
     {
         var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;

+ 4 - 4
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/SelectionViewModel.cs

@@ -63,10 +63,10 @@ internal class SelectionViewModel : SubViewModel<ViewModelMain>
         Owner.DocumentManagerSubViewModel.ActiveDocument?.Operations.TransformSelectedArea(false);
     }
 
-    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectLeft", "NUDGE_SELECTED_LEFT", "NUDGE_SELECTED_LEFT", Key = Key.Left, Parameter = new int[] { -1, 0 }, Icon = "E76B", CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
-    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectRight", "NUDGE_SELECTED_RIGHT", "NUDGE_SELECTED_RIGHT", Key = Key.Right, Parameter = new int[] { 1, 0 }, Icon = "E76C", CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
-    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectUp", "NUDGE_SELECTED_UP", "NUDGE_SELECTED_UP", Key = Key.Up, Parameter = new int[] { 0, -1 }, Icon = "E70E", CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
-    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectDown", "NUDGE_SELECTED_DOWN", "NUDGE_SELECTED_DOWN", Key = Key.Down, Parameter = new int[] { 0, 1 }, Icon = "E70D", CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
+    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectLeft", "NUDGE_SELECTED_LEFT", "NUDGE_SELECTED_LEFT", Key = Key.Left, Parameter = new int[] { -1, 0 }, Icon = PixiPerfectIcons.ChevronLeft, CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
+    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectRight", "NUDGE_SELECTED_RIGHT", "NUDGE_SELECTED_RIGHT", Key = Key.Right, Parameter = new int[] { 1, 0 }, Icon = PixiPerfectIcons.ChevronRight, CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
+    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectUp", "NUDGE_SELECTED_UP", "NUDGE_SELECTED_UP", Key = Key.Up, Parameter = new int[] { 0, -1 }, Icon = PixiPerfectIcons.ChevronUp, CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
+    [Command.Basic("PixiEditor.Selection.NudgeSelectedObjectDown", "NUDGE_SELECTED_DOWN", "NUDGE_SELECTED_DOWN", Key = Key.Down, Parameter = new int[] { 0, 1 }, Icon = PixiPerfectIcons.ChevronDown, CanExecute = "PixiEditor.Selection.CanNudgeSelectedObject")]
     public void NudgeSelectedObject(int[] dist)
     {
         VecI distance = new(dist[0], dist[1]);

+ 2 - 1
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/StylusViewModel.cs

@@ -2,6 +2,7 @@
 using PixiEditor.AvaloniaUI.ViewModels.Tools;
 using PixiEditor.AvaloniaUI.ViewModels.Tools.Tools;
 using PixiEditor.Extensions.CommonApi.UserPreferences;
+using PixiEditor.UI.Common.Fonts;
 
 namespace PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 
@@ -46,7 +47,7 @@ internal class StylusViewModel : SubViewModel<ViewModelMain>
         UpdateUseTouchGesture();
     }
 
-    [Command.Basic("PixiEditor.Stylus.TogglePenMode", "TOGGLE_PEN_MODE", "TOGGLE_PEN_MODE", Icon = "penMode.png")]
+    [Command.Basic("PixiEditor.Stylus.TogglePenMode", "TOGGLE_PEN_MODE", "TOGGLE_PEN_MODE", Icon = PixiPerfectIcons.Edit)]
     public void TogglePenMode()
     {
         IsPenModeEnabled = !IsPenModeEnabled;

+ 1 - 0
src/PixiEditor.AvaloniaUI/Views/Input/EditableTextBlock.axaml

@@ -16,6 +16,7 @@
                  MaxLength="{Binding Path=MaxChars, ElementName=etb, Mode=TwoWay}"
                  LostFocus="TextBox_LostFocus"
                  Text="{Binding Path=Text, ElementName=etb, Mode=TwoWay}"
+                 Padding="0" Margin="-1"
                  KeyDown="TextBox_KeyDown"
                  IsVisible="{Binding !TextBlockVisibility, ElementName=etb}"
                  Name="textBox">

+ 2 - 0
src/PixiEditor.AvaloniaUI/Views/Input/InputBox.cs

@@ -30,6 +30,8 @@ internal class InputBox : TextBox
 
     public event EventHandler<InputBoxEventArgs> OnSubmit;
 
+    protected override Type StyleKeyOverride => typeof(TextBox);
+
     protected override void OnLostFocus(RoutedEventArgs e)
     {
         OnSubmit?.Invoke(this, new InputBoxEventArgs(Text));

+ 1 - 1
src/PixiEditor.AvaloniaUI/Views/Layers/ReferenceLayer.axaml

@@ -94,7 +94,7 @@
                         <Button Cursor="Hand" DockPanel.Dock="Right"
                                 Command="{cmds:Command PixiEditor.Layer.ResetReferenceLayerPosition}"
                                 Classes="pixi-icon"
-                                Content="R"
+                                Content="{DynamicResource icon-reset}"
                                 Margin="2, 0, 0, 0"
                                 ui:Translator.TooltipKey="RESET_REFERENCE_LAYER_POS"
                                 RenderOptions.BitmapInterpolationMode="HighQuality"

+ 44 - 73
src/PixiEditor.AvaloniaUI/Views/Palettes/PaletteItem.axaml

@@ -8,11 +8,20 @@
     xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              xmlns:input="clr-namespace:PixiEditor.AvaloniaUI.Views.Input"
              xmlns:decorators="clr-namespace:PixiEditor.AvaloniaUI.Views.Decorators"
+             xmlns:palettes="clr-namespace:PixiEditor.AvaloniaUI.Views.Palettes"
              mc:Ignorable="d"
              d:DesignHeight="200"
              d:DesignWidth="800" 
              Name="paletteItem">
-    <Grid Background="{DynamicResource ThemeBackgroundBrush}" >
+    <UserControl.Styles>
+        <Style Selector="Button#FavouriteButton">
+            <Setter Property="Content" Value="{DynamicResource icon-star}"/>
+        </Style>
+        <Style Selector="palettes|PaletteItem:favourite Button#FavouriteButton">
+            <Setter Property="Content" Value="{DynamicResource icon-star-filled}"/>
+        </Style>
+    </UserControl.Styles>
+    <Grid Background="{DynamicResource ThemeBackgroundBrush}">
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="100*"/>
             <ColumnDefinition Width="95"/>
@@ -22,7 +31,7 @@
             <RowDefinition Height="60*" MinHeight="45"/>
         </Grid.RowDefinitions>
         <StackPanel Orientation="Vertical" Grid.RowSpan="2" Grid.ColumnSpan="2">
-            <Separator Background="{DynamicResource ThemeBackgroundBrush}" />
+            <Separator Background="{DynamicResource ThemeBackgroundBrush1}" />
             <DockPanel>
                 <StackPanel Orientation="Horizontal" DockPanel.Dock="Left">
                     <input:EditableTextBlock x:Name="titleTextBlock" OnSubmit="EditableTextBlock_OnSubmit"
@@ -30,13 +39,9 @@
                                                     FontSize="20" MaxChars="50"/>
                 <Button IsVisible="{Binding ElementName=paletteItem, Path=IsPointerOver}"
                         Click="RenameButton_Click"
-                        Cursor="Hand" Width="20" Height="20">
-                    <Image Source="/Images/Edit.png"/>
-                </Button>
+                        Cursor="Hand" FontSize="20" Classes="pixi-icon"
+                        Content="{DynamicResource icon-edit}" Margin="5 0 0 0"/>
             </StackPanel>
-                <!--<Image Margin="0 5 5 0"
-                       Source="/Images/SupperterPack.png" Width="24"
-                       DockPanel.Dock="Right" HorizontalAlignment="Right"/>-->
                 <decorators:Chip Margin="0 5 5 0"
                                    ui:Translator.Key="{Binding ElementName=paletteItem, Path=Palette.Source.Name}"
                                    DockPanel.Dock="Right" HorizontalAlignment="Right"/>
@@ -55,77 +60,43 @@
                 </DataTemplate>
             </ItemsControl.ItemTemplate>
         </ItemsControl>
-        <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" VerticalAlignment="Center">
-            <Border Margin="0 0 2 0" Width="28" Height="28" HorizontalAlignment="Right" CornerRadius="2.5">
-                <Border.Styles>
-                    <Style Selector="Border">
-                        <Setter Property="Background" Value="Transparent"/>
-                    </Style>
-                    <Style Selector="Border:hover">
+        <StackPanel Spacing="2" Orientation="Horizontal" Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" VerticalAlignment="Center">
+            <Button
+                ui:Translator.TooltipKey="USE_IN_CURRENT_IMAGE" Cursor="Hand"
+                Margin="0 3 0 0" Padding="2" Width="28" Height="28"
+                CommandParameter="{Binding ElementName=paletteItem, Path=Palette.Colors}"
+                Classes="pixi-icon" 
+                Content="{DynamicResource icon-check}"
+                Command="{Binding ImportPaletteCommand, ElementName=paletteItem}">
+                <Button.Styles>
+                    <Style Selector="Button:pointerover">
                         <Setter Property="Background" Value="SeaGreen"/>
                     </Style>
-                </Border.Styles>
-                <Button
-                    ui:Translator.TooltipKey="USE_IN_CURRENT_IMAGE" Cursor="Hand"
-                    Margin="0 3 0 0" Width="24" Height="24"
-                    CommandParameter="{Binding ElementName=paletteItem, Path=Palette.Colors}"
-                    Command="{Binding ImportPaletteCommand, ElementName=paletteItem}">
-                    <Button.Background>
-                        <ImageBrush Source="/Images/Check-square.png"/>
-                    </Button.Background>
-                </Button>
-            </Border>
-            <Border Margin="2 0 -2 0" Width="28" Height="28" HorizontalAlignment="Right" CornerRadius="2.5"
-                    Padding="2">
-                <Border.Styles>
-                    <Style Selector="Border">
-                        <Setter Property="Background" Value="Transparent"/>
-                    </Style>
-                    <Style Selector="Border:hover">
-                        <Setter Property="Background" Value="DarkOrange"/>
+                </Button.Styles>
+            </Button>
+            <Button
+                Command="{Binding ElementName=paletteItem, Path=ToggleFavouriteCommand}"
+                CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
+                Name="FavouriteButton" Width="28" Height="28"
+                Classes="pixi-icon" Padding="2"
+                ui:Translator.TooltipKey="ADD_TO_FAVORITES">
+                <Button.Styles>
+                    <Style Selector="Button:pointerover">
+                        <Setter Property="Background" Value="Orange"/>
                     </Style>
-                </Border.Styles>
-                <Button
-                    Classes="ImageButton"
-                    Command="{Binding ElementName=paletteItem, Path=ToggleFavouriteCommand}"
+                </Button.Styles>
+            </Button>
+            <Button Name="deleteButton" Command="{Binding DeletePaletteCommand, ElementName=paletteItem}"
                     CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
-                    ui:Translator.TooltipKey="ADD_TO_FAVORITES">
-                    <Button.Styles>
-                        <Style Selector="Button">
-                            <Setter Property="Background">
-                                <Setter.Value>
-                                    <ImageBrush Source="/Images/Star.png"/>
-                                </Setter.Value>
-                            </Setter>
-                            </Style>
-                        <Style Selector="Button.IsFavourite">
-                            <Setter Property="Background">
-                                <Setter.Value>
-                                    <ImageBrush Source="/Images/Star-filled.png"/>
-                                </Setter.Value>
-                            </Setter>
-                        </Style>
-                    </Button.Styles>
-                </Button>
-            </Border>
-            <Border Width="28" Height="28" CornerRadius="2.5"
-                    Margin="5 0 0 0" Padding="2" Name="deleteBorder">
-                <Border.Styles>
-                    <Style Selector="Border">
-                        <Setter Property="Background" Value="Transparent"/>
-                    </Style>
-                    <Style Selector="Border.IsEnabled:hover">
+                    Classes="pixi-icon" Width="28" Height="28"
+                    Content="{DynamicResource icon-trash}"
+                    ui:Translator.TooltipKey="DELETE" Padding="2" Margin="0" Cursor="Hand">
+                <Button.Styles>
+                    <Style Selector="Button:pointerover">
                         <Setter Property="Background" Value="Red"/>
                     </Style>
-                </Border.Styles>
-                <Button Name="deleteButton" Command="{Binding DeletePaletteCommand, ElementName=paletteItem}"
-                        CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
-                ui:Translator.TooltipKey="DELETE" Width="24" Height="24" Margin="0" Cursor="Hand">
-                    <Button.Background>
-                        <ImageBrush Source="/Images/Trash.png"/>
-                    </Button.Background>
-                </Button>
-            </Border>
+                </Button.Styles>
+            </Button>
         </StackPanel>
     </Grid>
 </UserControl>

+ 30 - 1
src/PixiEditor.AvaloniaUI/Views/Palettes/PaletteItem.axaml.cs

@@ -1,12 +1,15 @@
-using System.Windows.Input;
+using System.ComponentModel;
+using System.Windows.Input;
 using Avalonia;
 using Avalonia.Controls;
+using Avalonia.Controls.Metadata;
 using Avalonia.Interactivity;
 using PixiEditor.AvaloniaUI.Models.Palettes;
 using PixiEditor.AvaloniaUI.Views.Input;
 
 namespace PixiEditor.AvaloniaUI.Views.Palettes;
 
+[PseudoClasses(":favourite")]
 internal partial class PaletteItem : UserControl
 {
     public Palette Palette
@@ -51,6 +54,10 @@ internal partial class PaletteItem : UserControl
 
     public event EventHandler<EditableTextBlock.TextChangedEventArgs> OnRename;
 
+    static PaletteItem()
+    {
+        PaletteProperty.Changed.Subscribe(OnPaletteChanged);
+    }
 
     public PaletteItem()
     {
@@ -66,4 +73,26 @@ internal partial class PaletteItem : UserControl
     {
         titleTextBlock.IsEditing = true;
     }
+    
+    private static void OnPaletteChanged(AvaloniaPropertyChangedEventArgs<Palette> e)
+    {
+        PaletteItem paletteItem = (PaletteItem)e.Sender;
+        if(e.OldValue.Value != null)
+        {
+            e.OldValue.Value.PropertyChanged -= paletteItem.Palette_PropertyChanged;
+        }
+        if(e.NewValue.Value != null)
+        {
+            e.NewValue.Value.PropertyChanged += paletteItem.Palette_PropertyChanged;
+            paletteItem.PseudoClasses.Set(":favourite", e.NewValue.Value.IsFavourite);
+        }
+    }
+
+    private void Palette_PropertyChanged(object? sender, PropertyChangedEventArgs e)
+    {
+        if (e.PropertyName == nameof(Palette.IsFavourite))
+        {
+            PseudoClasses.Set(":favourite", Palette.IsFavourite);
+        }
+    }
 }

+ 2 - 2
src/PixiEditor.AvaloniaUI/Views/Palettes/PaletteViewer.axaml

@@ -18,7 +18,7 @@
                   ui1:DragDropEvents.DragLeave="Grid_PreviewDragLeave"
                   ui1:DragDropEvents.Drop="Grid_Drop">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="40" />
+                    <RowDefinition Height="35" />
                     <RowDefinition Height="5" />
                     <RowDefinition Height="*" />
                 </Grid.RowDefinitions>
@@ -37,7 +37,7 @@
                                     Cursor="Hand" Height="24" Width="24" ui:Translator.TooltipKey="BROWSE_PALETTES"/>
                             <Button Classes="pixi-icon"
                                     Cursor="Hand" Height="24" Width="24" ui:Translator.TooltipKey="LOAD_PALETTE"
-                                    Content="{DynamicResource icon-folder}"
+                                    Content="{DynamicResource icon-hard-drive}"
                                     Click="ImportPalette_OnClick"/>
                             <Button Height="24" Width="24" Classes="pixi-icon"
                                     Content="{DynamicResource icon-save}"

+ 1 - 1
src/PixiEditor.AvaloniaUI/Views/Windows/HelloTherePopup.axaml

@@ -293,7 +293,7 @@
                           IsVisible="{Binding !NewsPanelCollapsed}">
                 <Border Padding="5" BorderThickness="3 0 0 0" BorderBrush="{DynamicResource ThemeBackgroundBrush}">
                     <Grid>
-                        <indicators1:LoadingIndicator IsVisible="{Binding IsFetchingNews}"/>
+                        <indicators1:LoadingIndicator IsVisible="{Binding IsFetchingNews}" Width="100" Height="100"/>
                         <TextBlock ui:Translator.Key="FAILED_FETCH_NEWS" FontSize="20"
                                    VerticalAlignment="Center" TextAlignment="Center"
                                    IsVisible="{Binding Path=FailedFetchingNews}"/>

+ 95 - 78
src/PixiEditor.AvaloniaUI/Views/Windows/PalettesBrowser.axaml

@@ -13,119 +13,136 @@
     xmlns:ui1="clr-namespace:PixiEditor.AvaloniaUI.Helpers.UI"
     xmlns:palettes1="clr-namespace:PixiEditor.AvaloniaUI.Views.Palettes"
     xmlns:indicators1="clr-namespace:PixiEditor.AvaloniaUI.Views.Indicators"
+    xmlns:palettes="clr-namespace:PixiEditor.AvaloniaUI.Models.Palettes"
     mc:Ignorable="d"
     Height="600" Width="850"
     x:Name="palettesBrowser"
     Title="PALETTE_BROWSER">
-    <Grid Background="{DynamicResource ThemeBackgroundBrush1}" Focusable="True" PointerPressed="Grid_MouseDown">
+    <Grid Background="{DynamicResource ThemeBackgroundBrush}" Focusable="True" PointerPressed="Grid_MouseDown">
         <Grid.RowDefinitions>
-            <RowDefinition Height="45"/>
-            <RowDefinition Height="1*"/>
+            <RowDefinition Height="45" />
+            <RowDefinition Height="1*" />
         </Grid.RowDefinitions>
 
-        <DockPanel Background="{DynamicResource ThemeBackgroundBrush}" Grid.Row="0">
+        <DockPanel Background="{DynamicResource ThemeBackgroundBrush1}" Grid.Row="0">
             <StackPanel HorizontalAlignment="Left" Margin="10" Orientation="Horizontal" VerticalAlignment="Center">
-                <Label ui:Translator.Key="SORT_BY" VerticalAlignment="Center"/>
-                <ComboBox x:Name="sortingComboBox" VerticalAlignment="Center" SelectedIndex="0" SelectionChanged="SortingComboBox_SelectionChanged">
-                    <ComboBoxItem ui:Translator.Key="DEFAULT"/>
-                    <ComboBoxItem ui:Translator.Key="ALPHABETICAL"/>
-                    <ComboBoxItem ui:Translator.Key="COLOR_COUNT"/>
+                <Label ui:Translator.Key="SORT_BY" VerticalAlignment="Center" />
+                <ComboBox x:Name="sortingComboBox" VerticalAlignment="Center" SelectedIndex="0"
+                          SelectionChanged="SortingComboBox_SelectionChanged">
+                    <ComboBoxItem ui:Translator.Key="DEFAULT" />
+                    <ComboBoxItem ui:Translator.Key="ALPHABETICAL" />
+                    <ComboBoxItem ui:Translator.Key="COLOR_COUNT" />
                 </ComboBox>
-                <ToggleButton Margin="10 0 0 0" x:Name="toggleBtn"
+                <ToggleButton Margin="10 0 0 0" Name="toggleBtn" Classes="pixi-icon"
                               IsChecked="{Binding SortAscending, ElementName=palettesBrowser}"
                               Focusable="False">
-                    <Image Width="24" Height="24" Source="/Images/ChevronsDown.png">
-                        <Image.Styles>
-                            <Style Selector="Image">
-                                <Setter Property="ui:Translator.TooltipKey" Value="DESCENDING"/>
-                            </Style>
-                            <Style Selector="Image.IsChecked">
-                                <Setter Property="RenderTransform">
-                                    <Setter.Value>
-                                        <RotateTransform Angle="180" CenterX="11.5" CenterY="11.5"/>
-                                    </Setter.Value>
-                                </Setter>
-                                <Setter Property="ui:Translator.TooltipKey" Value="ASCENDING"/>
-                                </Style>
-                        </Image.Styles>
-                    </Image>
+                    <ToggleButton.Styles>
+                        <Style Selector="ToggleButton">
+                            <Setter Property="ui:Translator.TooltipKey" Value="DESCENDING" />
+                            <Setter Property="Content" Value="{DynamicResource icon-chevrons-down}" />
+                        </Style>
+                        <Style Selector="ToggleButton[IsChecked=True]">
+                            <Setter Property="ui:Translator.TooltipKey" Value="ASCENDING" />
+                            <Setter Property="Content" Value="{DynamicResource icon-chevrons-up}" />
+                        </Style>
+                    </ToggleButton.Styles>
                 </ToggleButton>
-                <Label Margin="10 0 0 0" ui:Translator.Key="NAME" VerticalAlignment="Center"/>
+                <Label Margin="10 0 0 0" ui:Translator.Key="NAME" VerticalAlignment="Center" />
                 <input:InputBox
-                                       Text="{Binding NameFilter, ElementName=palettesBrowser}"
-                                       VerticalAlignment="Center" Width="150">
+                    Text="{Binding NameFilter, ElementName=palettesBrowser}"
+                    VerticalAlignment="Center" Width="150">
                     <Interaction.Behaviors>
                         <behaviours:TextBoxFocusBehavior SelectOnMouseClick="True" ConfirmOnEnter="True"
-                                                         FocusNext="{Binding ElementName=numberInput, Path=FocusNext}"/>
-                        <behaviours:GlobalShortcutFocusBehavior/>
+                                                         FocusNext="{Binding ElementName=numberInput, Path=FocusNext}" />
+                        <behaviours:GlobalShortcutFocusBehavior />
                     </Interaction.Behaviors>
                 </input:InputBox>
 
-                <Label Margin="10 0 0 0" ui:Translator.Key="COLORS" VerticalAlignment="Center"/>
-                <ComboBox x:Name="colorsComboBox" VerticalAlignment="Center" SelectedIndex="0" SelectionChanged="ColorsComboBox_SelectionChanged">
-                    <ComboBoxItem ui:Translator.Key="ANY"/>
-                    <ComboBoxItem ui:Translator.Key="MAX"/>
-                    <ComboBoxItem ui:Translator.Key="MIN"/>
-                    <ComboBoxItem ui:Translator.Key="EXACT"/>
+                <Label Margin="10 0 0 0" ui:Translator.Key="COLORS" VerticalAlignment="Center" />
+                <ComboBox x:Name="colorsComboBox" VerticalAlignment="Center" SelectedIndex="0"
+                          SelectionChanged="ColorsComboBox_SelectionChanged">
+                    <ComboBoxItem ui:Translator.Key="ANY" />
+                    <ComboBoxItem ui:Translator.Key="MAX" />
+                    <ComboBoxItem ui:Translator.Key="MIN" />
+                    <ComboBoxItem ui:Translator.Key="EXACT" />
                 </ComboBox>
                 <input:NumberInput Width="50" VerticalAlignment="Center" Margin="10 0 0 0"
                                    FocusNext="True"
-                                   Value="{Binding ColorsNumber, ElementName=palettesBrowser, Mode=TwoWay}"/>
+                                   Value="{Binding ColorsNumber, ElementName=palettesBrowser, Mode=TwoWay}" />
                 <CheckBox Margin="10 0 0 0" VerticalAlignment="Center"
-                          IsChecked="{Binding ShowOnlyFavourites, ElementName=palettesBrowser}" ui:Translator.Key="FAVORITES"/>
+                          IsChecked="{Binding ShowOnlyFavourites, ElementName=palettesBrowser}"
+                          ui:Translator.Key="FAVORITES" />
             </StackPanel>
-            <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 10 0">
-                <Button ui:Translator.TooltipKey="ADD_FROM_CURRENT_PALETTE" Command="{Binding ElementName=palettesBrowser, Path=AddFromPaletteCommand}"
-                        Cursor="Hand" Margin="10 0" Width="24" Height="24">
-                    <Image Source="/Images/Plus-square.png"/>
-                </Button>
+            <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right"
+                        Margin="0 0 10 0">
+                <Button ui:Translator.TooltipKey="ADD_FROM_CURRENT_PALETTE"
+                        Command="{Binding ElementName=palettesBrowser, Path=AddFromPaletteCommand}"
+                        Cursor="Hand" Margin="10 0" Width="24" Height="24" Classes="pixi-icon" 
+                        Content="{DynamicResource icon-plus-square}"/>
                 <Button Cursor="Hand" Click="OpenFolder_OnClick" Width="24" Height="24"
-                        ui:Translator.TooltipKey="OPEN_PALETTES_DIR_TOOLTIP">
-                    <Image Source="/Images/Folder.png"/>
-                </Button>
-                <Button HorizontalAlignment="Right" Margin="10 0 0 0" ui:Translator.TooltipKey="BROWSE_ON_LOSPEC_TOOLTIP"
+                        ui:Translator.TooltipKey="OPEN_PALETTES_DIR_TOOLTIP" 
+                        Classes="pixi-icon" Content="{DynamicResource icon-folder}"/>
+                <Button HorizontalAlignment="Right" Margin="10 0 0 0"
+                        ui:Translator.TooltipKey="BROWSE_ON_LOSPEC_TOOLTIP"
                         Width="24" Height="24"
                         Click="BrowseOnLospec_OnClick"
-                        CommandParameter="https://lospec.com/palette-list">
-                    <Image Source="/Images/Globe.png"/>
-                </Button>
-                <Button HorizontalAlignment="Right" Margin="10 0 0 0" ui:Translator.TooltipKey="IMPORT_FROM_FILE_TOOLTIP"
+                        CommandParameter="https://lospec.com/palette-list" Classes="pixi-icon"
+                        Content="{DynamicResource icon-globe}"/>
+                <Button HorizontalAlignment="Right" Margin="10 0 0 0"
+                        ui:Translator.TooltipKey="IMPORT_FROM_FILE_TOOLTIP"
                         Width="24" Height="24"
-                        Click="ImportFromFile_OnClick">
-                    <Image Source="/Images/hard-drive.png"/>
-                </Button>
+                        Click="ImportFromFile_OnClick" Classes="pixi-icon"
+                        Content="{DynamicResource icon-hard-drive}"/>
             </StackPanel>
         </DockPanel>
         <Grid Grid.Row="1" Margin="10">
-            <TextBlock ui:Translator.Key="COULD_NOT_LOAD_PALETTE" Foreground="White" FontSize="20" HorizontalAlignment="Center"
-                       VerticalAlignment="Center" IsVisible="{Binding !IsVisible, ElementName=itemsControl}"/>
-            <StackPanel Panel.ZIndex="10" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"
-                        IsVisible="{Binding ElementName=palettesBrowser, Path=SortedResults.Count, Converter={converters:CountToVisibilityConverter}}">
-                <TextBlock ui:Translator.Key="NO_PALETTES_FOUND" Foreground="White" FontSize="20" TextAlignment="Center"/>
-                <TextBlock Margin="0 10 0 0">
-                    <TextBlock ui:Translator.Key="LOSPEC_LINK_TEXT"
-                               ui1:Hyperlink.Url="https://lospec.com/palette-list"/>
-                </TextBlock>
-                <Image Width="128" Height="128" Source="/Images/Search.png"/>
-            </StackPanel>
-            <ScrollViewer x:Name="scrollViewer" Margin="5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" ScrollChanged="ScrollViewer_ScrollChanged">
+            <indicators1:LoadingIndicator
+                IsVisible="{Binding IsFetching, ElementName=palettesBrowser}"
+                HorizontalAlignment="Center" VerticalAlignment="Center"
+                ZIndex="10"
+                Height="150" Width="150"/>
+            
+            <Panel IsVisible="{Binding ElementName=palettesBrowser, Path=!IsFetching}">
+                <TextBlock ui:Translator.Key="COULD_NOT_LOAD_PALETTE"
+                           Foreground="{DynamicResource ThemeForegroundBrush}" FontSize="20"
+                           HorizontalAlignment="Center"
+                           VerticalAlignment="Center" IsVisible="{Binding !IsVisible, ElementName=itemsControl}" />
+                <StackPanel Panel.ZIndex="10" Orientation="Vertical" HorizontalAlignment="Center"
+                            VerticalAlignment="Center"
+                            IsVisible="{Binding ElementName=palettesBrowser, Path=SortedResults.Count, Converter={converters:CountToVisibilityConverter}}">
+                    <TextBlock ui:Translator.Key="NO_PALETTES_FOUND"
+                               Foreground="{DynamicResource ThemeForegroundBrush}" FontSize="20"
+                               TextAlignment="Center" />
+                    <TextBlock Margin="0 10 0 0">
+                        <TextBlock ui:Translator.Key="LOSPEC_LINK_TEXT"
+                                   ui1:Hyperlink.Url="https://lospec.com/palette-list" />
+                    </TextBlock>
+                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
+                               FontSize="128" Text="{DynamicResource icon-search}" Classes="pixi-icon" 
+                               Foreground="{DynamicResource ThemeForegroundSecondaryBrush}"/>
+                </StackPanel>
+            </Panel>
+
+            <ScrollViewer x:Name="scrollViewer" Margin="5" HorizontalScrollBarVisibility="Disabled"
+                          VerticalScrollBarVisibility="Auto" ScrollChanged="ScrollViewer_ScrollChanged">
                 <ItemsControl x:Name="itemsControl" ItemsSource="{Binding SortedResults, ElementName=palettesBrowser}"
                               IsVisible="{Binding PaletteList.FetchedCorrectly, ElementName=palettesBrowser}">
-                    <ItemsControl.ItemTemplate>
-                        <DataTemplate>
+                    <ItemsControl.ItemsPanel>
+                        <ItemsPanelTemplate>
+                            <VirtualizingStackPanel Orientation="Vertical" />
+                        </ItemsPanelTemplate>
+                    </ItemsControl.ItemsPanel>
+                    <ItemsControl.DataTemplates>
+                        <DataTemplate x:DataType="palettes:Palette">
                             <palettes1:PaletteItem Palette="{Binding}"
-                                               OnRename="PaletteItem_OnRename"
-                                               ToggleFavouriteCommand="{Binding ToggleFavouriteCommand, ElementName=palettesBrowser}"
-                                               DeletePaletteCommand="{Binding DeletePaletteCommand, ElementName=palettesBrowser}"
-                                               ImportPaletteCommand="{Binding ImportPaletteCommand, ElementName=palettesBrowser}"/>
+                                                   OnRename="PaletteItem_OnRename"
+                                                   ToggleFavouriteCommand="{Binding ToggleFavouriteCommand, ElementName=palettesBrowser}"
+                                                   DeletePaletteCommand="{Binding DeletePaletteCommand, ElementName=palettesBrowser}"
+                                                   ImportPaletteCommand="{Binding ImportPaletteCommand, ElementName=palettesBrowser}" />
                         </DataTemplate>
-                    </ItemsControl.ItemTemplate>
+                    </ItemsControl.DataTemplates>
                 </ItemsControl>
             </ScrollViewer>
-            <indicators1:LoadingIndicator
-                IsVisible="{Binding IsFetching, ElementName=palettesBrowser}"
-                HorizontalAlignment="Center" VerticalAlignment="Center"
-                Height="50"/>
         </Grid>
     </Grid>
-</dialogs:PixiEditorPopup>
+</dialogs:PixiEditorPopup>

+ 2 - 2
src/PixiEditor.UI.Common/Controls/Button.axaml

@@ -32,12 +32,12 @@
                                   TextElement.Foreground="{TemplateBinding Foreground}" />
             </ControlTemplate>
         </Setter>
-        <Style Selector="^:pointerover /template/ ContentPresenter#PART_ContentPresenter">
+        <Style Selector="^:pointerover">
             <Setter Property="Background" Value="{DynamicResource ThemeControlHighlightBrush}" />
             <Setter Property="Foreground" Value="{DynamicResource ThemeForegroundColor}" />
             <Setter Property="Cursor" Value="Hand" />
         </Style>
-        <Style Selector="^:pressed  /template/ ContentPresenter#PART_ContentPresenter">
+        <Style Selector="^:pressed">
             <Setter Property="Background" Value="{DynamicResource ThemeControlHighBrush}" />
             <Setter Property="Foreground" Value="{DynamicResource ThemeForegroundColor}" />
         </Style>

+ 5 - 5
src/PixiEditor.UI.Common/Controls/ToggleButton.axaml

@@ -3,7 +3,7 @@
   <ControlTheme x:Key="{x:Type ToggleButton}"
                 TargetType="ToggleButton">
     <Setter Property="Background" Value="{DynamicResource ThemeControlMidBrush}" />
-    <Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderLowBrush}" />
+    <Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderMidBrush}" />
     <Setter Property="BorderThickness" Value="{DynamicResource ThemeBorderThickness}" />
     <Setter Property="CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
     <Setter Property="Cursor" Value="Hand"/>
@@ -27,14 +27,14 @@
                           TextElement.Foreground="{TemplateBinding Foreground}" />
       </ControlTemplate>
     </Setter>
-    <Style Selector="^:checked /template/ ContentPresenter#PART_ContentPresenter">
+    <Style Selector="^:checked">
       <Setter Property="Background" Value="{DynamicResource ThemeControlHighBrush}" />
       <Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderMidBrush}" />
     </Style>
-    <Style Selector="^:pointerover /template/ ContentPresenter#PART_ContentPresenter">
-      <Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderMidBrush}" />
+    <Style Selector="^:pointerover">
+      <Setter Property="BorderBrush" Value="{DynamicResource ThemeBorderHighBrush}" />
     </Style>
-    <Style Selector="^:pressed  /template/ ContentPresenter#PART_ContentPresenter">
+    <Style Selector="^:pressed">
       <Setter Property="Background" Value="{DynamicResource ThemeControlHighBrush}" />
     </Style>
     <Style Selector="^:disabled">

+ 18 - 4
src/PixiEditor.UI.Common/Fonts/PixiPerfectIcons.axaml

@@ -20,6 +20,10 @@
             <system:String x:Key="icon-chevron-down">&#xE90C;</system:String>
             <system:String x:Key="icon-chevron-left">&#xE90D;</system:String>
             <system:String x:Key="icon-chevron-right">&#xE90E;</system:String>
+            <system:String x:Key="icon-chevrons-down">&#xE964;</system:String>
+            <system:String x:Key="icon-chevrons-left">&#xE964;</system:String>
+            <system:String x:Key="icon-chevrons-right">&#xE966;</system:String>
+            <system:String x:Key="icon-chevrons-up">&#xE967;</system:String>
             <system:String x:Key="icon-chevron-up">&#xE90F;</system:String>
             <system:String x:Key="icon-circle">&#xE910;</system:String>
             <system:String x:Key="icon-clock">&#xE911;</system:String>
@@ -105,10 +109,16 @@
             <system:String x:Key="icon-zoom-out">&#xE962;</system:String>
             <system:String x:Key="icon-pen">&#xE971;</system:String>
             <system:String x:Key="icon-link">&#xE96B;</system:String>
+            <system:String x:Key="icon-search">&#xE976;</system:String>
+            <system:String x:Key="icon-hard-drive">&#xE96C;</system:String>
+            <system:String x:Key="icon-copy-add">&#xe921;</system:String>
+            <system:String x:Key="icon-check">&#xe96a;</system:String>
             
-            <system:String x:Key="icon-copy-add">&#x25a1;</system:String>
-            <system:String x:Key="icon-paste-reference-layer">&#x25a1;</system:String>
-            <system:String x:Key="icon-paste-as-new-layer">&#x25a1;</system:String>
+            <system:String x:Key="icon-paste-reference-layer">&#xe977;</system:String>
+            <system:String x:Key="icon-paste-as-new-layer">&#xe978;</system:String>
+            <system:String x:Key="icon-star">&#x25a1;</system:String>
+            <system:String x:Key="icon-star-filled">&#xfffd;</system:String>
+            <system:String x:Key="icon-reset">R</system:String>
         </ResourceDictionary>
     </Styles.Resources>
     
@@ -129,7 +139,7 @@
         <Setter Property="VerticalContentAlignment" Value="Center"/>
     </Style>
     
-    <Style Selector="Button.pixi-icon:pointerover ContentPresenter">
+    <Style Selector="Button.pixi-icon:pointerover">
         <Setter Property="Background" Value="Transparent"/>
     </Style>
     
@@ -141,4 +151,8 @@
         <Setter Property="HorizontalContentAlignment" Value="Center"/>
         <Setter Property="VerticalContentAlignment" Value="Center"/>
     </Style>
+    
+    <Style Selector="ToggleButton.pixi-icon:checked">
+        <Setter Property="Background" Value="{DynamicResource ThemeControlHighBrush}"/>
+    </Style>
 </Styles>

+ 4 - 3
src/PixiEditor.UI.Common/Fonts/PixiPerfectIcons.axaml.cs

@@ -111,9 +111,10 @@ public static class PixiPerfectIcons
     public const string YSymmetry = "\uE960";
     public const string ZoomIn = "\uE961";
     public const string ZoomOut = "\uE962";
-    public const string PasteReferenceLayer = "\u25a1"; // TODO: Create a paste reference layer icon
-    public const string PasteAsNewLayer = "\u25a1"; // TODO: Create a paste as new layer icon
-    public const string CopyAdd = "\u25a1"; // TODO: Create a copy add icon
+    public const string PasteReferenceLayer = "\ue977";
+    public const string PasteAsNewLayer = "\ue978";
+    public const string CopyAdd = "\ue921";
+    public const string Reset = "R"; // TODO: Create a reset icon
     public static string Pen => "\uE971";
 
     public static IImage ToIcon(string unicode, double size = 18)

+ 2 - 0
src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj

@@ -9,6 +9,8 @@
     <ItemGroup>
       <AvaloniaResource Include="Assets\*"/>
       <AvaloniaResource Include="Fonts\pixiperfect.ttf" />
+      <None Remove="Assets\Animations\LoadingIndicator.json" />
+      <AvaloniaResource Include="Assets\Animations\LoadingIndicator.json" />
     </ItemGroup>
 
     <ItemGroup>