|
@@ -1,12 +1,10 @@
|
|
|
using System;
|
|
|
-using System.Collections;
|
|
|
using System.Collections.ObjectModel;
|
|
|
-using System.Diagnostics;
|
|
|
using System.Windows;
|
|
|
using System.Windows.Controls;
|
|
|
+using PixiEditor.Models.Controllers;
|
|
|
using PixiEditor.Models.Layers;
|
|
|
using PixiEditor.Models.Undo;
|
|
|
-using PixiEditor.ViewModels;
|
|
|
using PixiEditor.ViewModels.SubViewModels.Main;
|
|
|
|
|
|
namespace PixiEditor.Views.UserControls
|
|
@@ -31,32 +29,6 @@ namespace PixiEditor.Views.UserControls
|
|
|
typeof(ObservableCollection<object>),
|
|
|
typeof(LayersManager),
|
|
|
new PropertyMetadata(default(ObservableCollection<object>), ItemsChanged));
|
|
|
-
|
|
|
- private static void ItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
|
- {
|
|
|
- var items = (ObservableCollection<object>)e.NewValue;
|
|
|
- LayersManager manager = (LayersManager)d;
|
|
|
- if (items != null && items.Count > 0 && (e.OldValue == null || ((ObservableCollection<object>)e.OldValue).Count == 0))
|
|
|
- {
|
|
|
- var item = items[0];
|
|
|
- manager.cachedItem = item;
|
|
|
- var numberInput = manager.numberInput;
|
|
|
- SetInputOpacity(item, numberInput);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private static void SetInputOpacity(object item, NumberInput numberInput)
|
|
|
- {
|
|
|
- if (item is Layer layer)
|
|
|
- {
|
|
|
- numberInput.Value = layer.Opacity * 100f;
|
|
|
- }
|
|
|
- else if (item is LayerGroup group)
|
|
|
- {
|
|
|
- numberInput.Value = group.StructureData.Opacity * 100f;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public LayersViewModel LayerCommandsViewModel
|
|
|
{
|
|
|
get { return (LayersViewModel)GetValue(LayerCommandsViewModelProperty); }
|
|
@@ -88,8 +60,36 @@ namespace PixiEditor.Views.UserControls
|
|
|
{
|
|
|
DragDrop.DoDragDrop(container, container, DragDropEffects.Move);
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void ItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
|
+ {
|
|
|
+ var items = (ObservableCollection<object>)e.NewValue;
|
|
|
+ LayersManager manager = (LayersManager)d;
|
|
|
+ var numberInput = manager.numberInput;
|
|
|
+ object item = manager.treeView.SelectedItem;
|
|
|
+ if (items != null && items.Count > 0 && (e.OldValue == null || ((ObservableCollection<object>)e.OldValue).Count == 0))
|
|
|
+ {
|
|
|
+ item = items[0];
|
|
|
+ manager.cachedItem = item;
|
|
|
+ }
|
|
|
+
|
|
|
+ SetInputOpacity(item, numberInput);
|
|
|
}
|
|
|
|
|
|
+ private static void SetInputOpacity(object item, NumberInput numberInput)
|
|
|
+ {
|
|
|
+ if (item is Layer layer)
|
|
|
+ {
|
|
|
+ numberInput.Value = layer.Opacity * 100f;
|
|
|
+ }
|
|
|
+ else if (item is LayerGroup group)
|
|
|
+ {
|
|
|
+ numberInput.Value = group.StructureData.Opacity * 100f;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
private void HandleGroupOpacityChange(LayerGroup group, float value)
|
|
|
{
|
|
|
if (LayerCommandsViewModel.Owner?.BitmapManager?.ActiveDocument != null)
|
|
@@ -119,7 +119,8 @@ namespace PixiEditor.Views.UserControls
|
|
|
var group = structure.GetGroupByGuid(groupGuid);
|
|
|
group.Opacity = opacity;
|
|
|
var layers = structure.GetGroupLayers(group);
|
|
|
- layers.ForEach(x => x.Opacity = x.Opacity); // This might seems stupid, but it raises property changed, without setting any value. This is used to trigger converters that use group opacity
|
|
|
+ layers.ForEach(x => x.Opacity = x.Opacity); // This might seems stupid, but it raises property changed, without setting any value. This is used to trigger converters that use group opacity
|
|
|
+ numberInput.Value = opacity * 100;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -144,7 +145,16 @@ namespace PixiEditor.Views.UserControls
|
|
|
|
|
|
if (item is Layer layer)
|
|
|
{
|
|
|
+ float oldOpacity = layer.Opacity;
|
|
|
layer.OpacityUndoTriggerable = val;
|
|
|
+ UndoManager undoManager = LayerCommandsViewModel.Owner.BitmapManager.ActiveDocument.UndoManager;
|
|
|
+ undoManager.AddUndoChange(
|
|
|
+ new Change(
|
|
|
+ UpdateNumberInputLayerOpacityProcess,
|
|
|
+ new object[] { oldOpacity },
|
|
|
+ UpdateNumberInputLayerOpacityProcess,
|
|
|
+ new object[] { val }));
|
|
|
+ undoManager.SquashUndoChanges(2);
|
|
|
}
|
|
|
else if(item is LayerGroup group)
|
|
|
{
|
|
@@ -152,6 +162,14 @@ namespace PixiEditor.Views.UserControls
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void UpdateNumberInputLayerOpacityProcess(object[] args)
|
|
|
+ {
|
|
|
+ if(args.Length > 0 && args[0] is float opacity)
|
|
|
+ {
|
|
|
+ numberInput.Value = opacity * 100;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
|
|
|
{
|
|
|
SetInputOpacity(treeView.SelectedItem, numberInput);
|