public static IEnumerable <ImageSetTarget> FindTargets(this ImageSetTarget root, SizeConstraintData constraint) { var result = root.Children .Where(x => x.ImageType == constraint.ImageType) .SelectMany(x => x.Children) .Where(x => string.IsNullOrEmpty(constraint.QualifierName) && x.Children.Count == 0 || x.QualifierName == constraint.QualifierName) .SelectMany(x => x.Children.Count == 0 ? new[] { x } : x.Children); return(result); }
private static void UpdatePaddings(ImageSetTarget imageSetTarget, SizeConstraintData changedConstraint) { var targets = imageSetTarget.FindTargets(changedConstraint); foreach (var target in targets) { var sizeConstraint = target.Constraints.OfType <SizeConstraint>().ToArray(); foreach (var constraint in sizeConstraint) { constraint.UpdatePadding(changedConstraint); } } }
private static void ManifestDesignerUserControl_Loaded(object sender) { var imageSetViewModel = _imageSetViewModel = (ImageSetViewModel)Exposed.From(sender).imageSetViewModel; if (imageSetViewModel == null) { return; } var visualAssetsControl = (FrameworkElement)Exposed.From(sender).visualAssetsControl; if (!visualAssetsControl.IsLoaded) { visualAssetsControl.Loaded -= VisualAssetsControl_Loaded; visualAssetsControl.Loaded += VisualAssetsControl_Loaded; } var imageSetModel = Exposed.From(sender).imageSetModel; var imageSetTargetViewModels = (IList <ImageSetTargetViewModel>)imageSetViewModel.ImageTypeTargets; _imageSetTarget = (ImageSetTarget)imageSetModel.Root; var imageGenerator = Exposed.From(imageSetModel).imageGenerator; if (imageGenerator.GetType().Name == "IImageGeneratorProxy") { return; } var imageGeneratorInterface = typeof(IImageConstraint).Assembly .GetTypes() .First(x => x.Name == "IImageGenerator"); var imageGeneratorProxy = new ProxyGenerator().CreateInterfaceProxyWithTarget(imageGeneratorInterface, imageGenerator, new ImageGeneratorInterceptor()); var imageGeneratorField = typeof(ImageSetModel).GetField("imageGenerator", BindingFlags.Instance | BindingFlags.NonPublic); imageGeneratorField.SetValue(imageSetModel, imageGeneratorProxy); var filePicker = (IFilePicker)Exposed.From(imageSetModel).filePicker; if (filePicker.GetType().Name == "IFilePickerProxy") { return; } imageSetTargetViewModels.Single(x => x.ImageType == null).PropertyChanged += ImageSetTargetViewModel_PropertyChanged; imageSetViewModel.PropertyChanged += ImageSetViewModel_PropertyChanged; var proxy = (IFilePicker) new ProxyGenerator().CreateInterfaceProxyWithTarget(typeof(IFilePicker), filePicker, new DialogFilterInterceptor()); var filePickerField = typeof(ImageSetModel).GetField("filePicker", BindingFlags.Instance | BindingFlags.NonPublic); if (filePickerField == null) { return; } filePickerField.SetValue(imageSetModel, proxy); var imageReaderFactory = Exposed.From(imageGenerator).imageReaderFactory; if (!(Exposed.From(imageReaderFactory).imageReaders is IDictionary readers)) { return; } var formatsToAdd = MagickImageReader.SupportedFormats .Except(readers.Keys.OfType <string>()) .ToArray(); if (formatsToAdd.Any()) { var type = typeof(IImageConstraint).Assembly .GetTypes() .First(x => x.Name == "IImageReader"); //.GetType($"{assembly.GetName().Name}.IImageReader"); var wrapper = DelegateWrapper.WrapAs((Func <string, IEnumerable <IImageConstraint>, Task <Image> >)MagickImageReader.LoadAsync, (Func <string, IEnumerable <IImageConstraint>, Task <Stream> >)MagickImageReader.LoadStreamAsync, (Func <IEnumerable <string> >)(() => formatsToAdd), new DelegateWrapper.MethodByNameAndEnumReturnType("get_ImageGraphicsType", "ImageGraphicsType", "Vector"), type); foreach (var format in formatsToAdd) { readers.Add(format, wrapper); } } var imageReaderFactoryField = Exposed.From(imageSetTargetViewModels.First()).previewImageLoader ?.GetType() .GetField("imageReaderFactory", BindingFlags.Instance | BindingFlags.NonPublic); if (imageReaderFactoryField == null) { return; } foreach (var imageSetTargetViewModel in imageSetTargetViewModels) { var exposedModel = Exposed.From(imageSetTargetViewModel); var previewImageLoader = exposedModel.previewImageLoader; imageReaderFactoryField.SetValue(previewImageLoader, imageReaderFactory); if (!string.IsNullOrEmpty(exposedModel.SourceText) && formatsToAdd.Any(x => x.Equals(Path.GetExtension(exposedModel.SourceText), StringComparison.InvariantCultureIgnoreCase)) && exposedModel.SourceImage == null) { ((UserControl)sender).Dispatcher.InvokeAsync(() => exposedModel.UpdateImagePreviewAsync()); } } }