private void DoAggregateUpdatedForImage(UIElementState uistate, bool resetTransforms = true) { //we only care about images that are the root parent, effects that are children are handled in the Effect class RenderDTO found = _renderTree.Where( x => x.Type == eRenderType.Effect && x.EffectDTO.AggregateId == uistate.AggregateId && string.IsNullOrEmpty(x.EffectDTO.Grouping1) ).FirstOrDefault(); if (found != null) { found.EffectDTO.IsRenderable = uistate.IsRenderable; found.EffectDTO.MainTranslation = new Vector3((float)uistate.Left, (float)uistate.Top, (float)0); found.EffectDTO.MainScale = new Vector3((float)uistate.Scale, (float)uistate.Scale, 0); //update linked effects (parent got changed so update the children where applicable) if (found.HasLinkedEffects) { var linkedRenderTreeItems = _renderTree.Where(x => x.Type == eRenderType.Effect && x.EffectDTO.Grouping1 == uistate.AggregateId); foreach (var linkedRenderTreeItem in linkedRenderTreeItems) { linkedRenderTreeItem.EffectDTO.MainScale = found.EffectDTO.MainScale; linkedRenderTreeItem.EffectDTO.MainTranslation = found.EffectDTO.MainTranslation; //linkedRenderTreeItem.EffectDTO.IsRenderable = found.EffectDTO.IsRenderable; } } //udfBool1 is used to trigger an update of the image if (!string.IsNullOrEmpty(uistate.udfString1) && uistate.udfBool1) { var layoutDetail = AppDatabase.Current.GetLayoutDetail(uistate.LayoutStyle); UpdateImageByUri(uistate, layoutDetail, resetTransforms); } } }
public async void PushToCloud(UIElementState uiElementState) { if (!AppService.IsConnected()) { return; } try { if (uiElementState.MSId != 0) { int id = uiElementState.Id; uiElementState.Id = uiElementState.MSId; uiElementState.MSId = id; await mstUIElementState.UpdateAsync(uiElementState); uiElementState.Id = id; } else { uiElementState.Id = 0; await mstUIElementState.InsertAsync(uiElementState); AppDatabase.Current.UpdateSolutionField(uiElementState.AggregateId, "MSId", uiElementState.Id, false); } Messenger.Default.Send <GeneralSystemWideMessage>(new GeneralSystemWideMessage("writing ...") { Identifier = "CLOUD BAR", SourceId = "AzureMobileService", Action = "WRITE" }); } catch { Messenger.Default.Send <GeneralSystemWideMessage>(new GeneralSystemWideMessage("writing ...") { Identifier = "CLOUD BAR", SourceId = "AzureMobileService", Action = "ERROR" }); } }
private async Task<RenderDTO> AddUpdateUIElementState_Path(UIElementState uistate, RenderDTO rDto) { if (rDto == null) { ShapePathDTO dto = new ShapePathDTO(); dto.AggregateId = uistate.AggregateId; rDto = new RenderDTO() { ShapePathDTO = dto, Type = eRenderType.ShapePath, Order = _renderTree.Count() + 1 }; rDto.ShapePathDTO.ShapeDatas.Add("M6.33675,26.318 L32.1257,26.318 C32.1257,26.318 44.2178,18.6175 32.1257,10.8489 C32.1257,10.8489 31.7393,1.25822 23.4461,0.582515 C23.4461,0.582515 16.6888,-0.631889 13.9267,6.25699 C13.9267,6.25699 11.8669,4.43488 8.52113,5.78424 C8.52113,5.78424 6.01503,6.73083 5.88855,10.6481 C5.88855,10.6481 0.609425,11.1868 0.547688,17.8748 C0.547688,17.8748 -0.417516,25.1005 6.33675,26.318 z"); rDto.ShapePathDTO.Shapes.Add(_pathD2DConverter.parse(dto.ShapeDatas[0], _deviceManager.FactoryDirect2D)); _renderTree.Add(rDto); } //stroke stuff rDto.ShapePathDTO.StrokeWidth = (float)uistate.udfDouble3; if (!string.IsNullOrEmpty(uistate.udfString4)) { var strokeParts = uistate.udfString4.Split("|".ToCharArray()); if (strokeParts.Length > 0) { rDto.ShapePathDTO.DashOffset = float.Parse(strokeParts[0]); rDto.ShapePathDTO.MiterLimit = float.Parse(strokeParts[1]); rDto.ShapePathDTO.DashStyleIndex = int.Parse(string.IsNullOrEmpty(strokeParts[2]) ? "0" : strokeParts[2]); if (rDto.ShapePathDTO.DashStyleIndex < 0) rDto.ShapePathDTO.DashStyleIndex = 0; if (rDto.ShapePathDTO.DashStyleIndex == 5) rDto.ShapePathDTO.DashStyleIndex = 0; } } if (uistate.udfInt2 == 1) { var parts1 = uistate.udfString2.Split("|".ToCharArray()); var parts2 = uistate.udfString3.Split("|".ToCharArray()); Color4 colorToUse1; Color4 colorToUse2; try { colorToUse1 = new Color4( float.Parse(parts1[0]) / 255, float.Parse(parts1[1]) / 255, float.Parse(parts1[2]) / 255, parts1.Length > 6 ? float.Parse(parts1[6]) / 255 : float.Parse(parts1[3]) / 255 ); colorToUse2 = new Color4( float.Parse(parts2[0]) / 255, float.Parse(parts2[1]) / 255, float.Parse(parts2[2]) / 255, parts2.Length > 6 ? float.Parse(parts2[6]) / 255 : float.Parse(parts2[3]) / 255 ); } catch { colorToUse1 = Color.Black; colorToUse2 = Color.White; } rDto.ShapePathDTO.Brush = CreateRadialGradientBrush(_deviceManager.ContextDirect2D, (float)uistate.Width, (float)uistate.Height, colorToUse1, colorToUse2, (float)uistate.udfDouble1 / 100, (float)uistate.udfDouble2 / 100); } else { var parts = uistate.udfString2.Split("|".ToCharArray()); Color4 colorToUse; try { colorToUse = new Color4( float.Parse(parts[0]) / 255, float.Parse(parts[1]) / 255, float.Parse(parts[2]) / 255, parts.Length > 6 ? float.Parse(parts[6]) / 255 : float.Parse(parts[3]) / 255 ); } catch { colorToUse = Color.Black; } rDto.ShapePathDTO.Brush = new SharpDX.Direct2D1.SolidColorBrush(_deviceManager.ContextDirect2D, colorToUse); } rDto.ShapePathDTO.IsRenderable = true; rDto.ShapePathDTO.MainScale = new Vector3((float)uistate.Scale, (float)uistate.Scale, 1); rDto.ShapePathDTO.MainTranslation = new Vector3((float)uistate.Left, (float)uistate.Top, 0); //ROTATION if (!string.IsNullOrEmpty(uistate.udfString5)) { var strokeParts = uistate.udfString5.Split("|".ToCharArray()); if (strokeParts.Length > 0) { rDto.ShapePathDTO.MainRotation = new Vector3( MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[0]) ? "0" : strokeParts[0])), MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[1]) ? "0" : strokeParts[1])), MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[2]) ? "0" : strokeParts[2])) ); } } NumberFramesToRender = 3; //TurnOnRenderingBecauseThereAreRenderableEffects(); return rDto; }
private async Task<RenderDTO> AddUpdateUIElementState_Rectangle(UIElementState uistate, RenderDTO rDto) { if (rDto == null) { ShapeDTO dto = new ShapeDTO(); dto.AggregateId = uistate.AggregateId; rDto = new RenderDTO() { ShapeDTO = dto, Type = eRenderType.Shape, Order = _renderTree.Count() + 1 }; _renderTree.Add(rDto); } switch (uistate.udfString1) { case "Rectangle": RectangleF newGeometry1 = new RectangleF(0, 0, (float)uistate.Width, (float)uistate.Height); rDto.ShapeDTO.Shape = new SharpDX.Direct2D1.RectangleGeometry(_deviceManager.FactoryDirect2D, newGeometry1); rDto.ShapeDTO.Type = uistate.udfInt1; break; case "Ellipse": SharpDX.Direct2D1.Ellipse newGeometry2 = new SharpDX.Direct2D1.Ellipse( new Vector2(((float)uistate.Width / 2), ((float)uistate.Height / 2)), (float)uistate.Width, (float)uistate.Height ); rDto.ShapeDTO.Shape = new SharpDX.Direct2D1.EllipseGeometry(_deviceManager.FactoryDirect2D, newGeometry2); rDto.ShapeDTO.Type = uistate.udfInt1; break; } //stroke stuff rDto.ShapeDTO.StrokeWidth = (float)uistate.udfDouble3; if (!string.IsNullOrEmpty(uistate.udfString4)) { var strokeParts = uistate.udfString4.Split("|".ToCharArray()); if (strokeParts.Length > 0) { rDto.ShapeDTO.DashOffset = float.Parse(strokeParts[0]); rDto.ShapeDTO.MiterLimit = float.Parse(strokeParts[1]); rDto.ShapeDTO.DashStyleIndex = int.Parse(string.IsNullOrEmpty(strokeParts[2]) ? "0" : strokeParts[2]); if (rDto.ShapeDTO.DashStyleIndex < 0) rDto.ShapeDTO.DashStyleIndex = 0; if (rDto.ShapeDTO.DashStyleIndex == 5) rDto.ShapeDTO.DashStyleIndex = 0; } } if (uistate.udfInt2 == 1) { var parts1 = uistate.udfString2.Split("|".ToCharArray()); var parts2 = uistate.udfString3.Split("|".ToCharArray()); Color4 colorToUse1; Color4 colorToUse2; try { colorToUse1 = new Color4( float.Parse(parts1[0]) / 255, float.Parse(parts1[1]) / 255, float.Parse(parts1[2]) / 255, parts1.Length > 6 ? float.Parse(parts1[6]) / 255 : float.Parse(parts1[3]) / 255 ); colorToUse2 = new Color4( float.Parse(parts2[0]) / 255, float.Parse(parts2[1]) / 255, float.Parse(parts2[2]) / 255, parts2.Length > 6 ? float.Parse(parts2[6]) / 255 : float.Parse(parts2[3]) / 255 ); } catch { colorToUse1 = Color.Black; colorToUse2 = Color.White; } rDto.ShapeDTO.Brush = CreateRadialGradientBrush(_deviceManager.ContextDirect2D, (float)uistate.Width, (float)uistate.Height, colorToUse1, colorToUse2, (float)uistate.udfDouble1 / 100, (float)uistate.udfDouble2 / 100); } else { var parts = uistate.udfString2.Split("|".ToCharArray()); Color4 colorToUse; try { colorToUse = new Color4( float.Parse(parts[0]) / 255, float.Parse(parts[1]) / 255, float.Parse(parts[2]) / 255, parts.Length > 6 ? float.Parse(parts[6]) / 255 : float.Parse(parts[3]) / 255 ); } catch { colorToUse = Color.Black; } rDto.ShapeDTO.Brush = new SharpDX.Direct2D1.SolidColorBrush(_deviceManager.ContextDirect2D, colorToUse); } rDto.ShapeDTO.IsRenderable = uistate.IsRenderable; //true rDto.ShapeDTO.MainScale = new Vector3((float)uistate.Scale, (float)uistate.Scale, 1); rDto.ShapeDTO.MainTranslation = new Vector3((float)uistate.Left, (float)uistate.Top, 0); //ROTATION if (!string.IsNullOrEmpty(uistate.udfString5)) { var strokeParts = uistate.udfString5.Split("|".ToCharArray()); if (strokeParts.Length > 0) { rDto.ShapeDTO.MainRotation = new Vector3( MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[0]) ? "0" : strokeParts[0])), MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[1]) ? "0" : strokeParts[1])), MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[2]) ? "0" : strokeParts[2])) ); } } if (NumberFramesToRender < 1) NumberFramesToRender = 1; //TurnOnRenderingBecauseThereAreRenderableEffects(); return rDto; }
private async Task<RenderDTO> CreateRenderItemWithUIElement_Effect(UIElementState uies, string effectClass, RenderDTO parentRenderTreeItem) { EffectDTO edto = new EffectDTO(); edto.IsRenderable = uies.IsRenderable; edto.AggregateId = uies.AggregateId; edto.Grouping1 = uies.Grouping1; if (parentRenderTreeItem != null) { edto.MainTranslation = parentRenderTreeItem.EffectDTO.MainTranslation; edto.MainScale = parentRenderTreeItem.EffectDTO.MainScale; } else { edto.MainTranslation = new Vector3(0); edto.MainScale = new Vector3(1); } switch (effectClass) { case "SharpDX.Direct2D1.Effects.AffineTransform2D": break; case "SharpDX.Direct2D1.Effects.ArithmeticComposite": break; case "SharpDX.Direct2D1.Effects.Atlas": break; case "SharpDX.Direct2D1.Effects.BitmapSourceEffect": #region bitmap source try { if (uies.udfString2 == "PicturesLibrary") { var asset = await LoadAssetAsync(_deviceManager.WICFactory, uies.udfString1, uies.AggregateId, path: "PicturesLibrary"); edto.Effect = new SharpDX.Direct2D1.Effects.BitmapSource(_deviceManager.ContextDirect2D); edto.Effect.SetValueByName("WicBitmapSource", asset.Item1); uies.Width = asset.Item2.Width; uies.Height = asset.Item2.Height; } else if (uies.udfString2 == "PublicPicturesLibrary") { var asset = await LoadAssetAsync(_deviceManager.WICFactory, uies.udfString1, uies.AggregateId, path: "PublicPicturesLibrary"); edto.Effect = new SharpDX.Direct2D1.Effects.BitmapSource(_deviceManager.ContextDirect2D); edto.Effect.SetValueByName("WicBitmapSource", asset.Item1); uies.Width = asset.Item2.Width; uies.Height = asset.Item2.Height; } else { var asset = await LoadAssetAsync(_deviceManager.WICFactory, uies.udfString1, uies.AggregateId); edto.Effect = new SharpDX.Direct2D1.Effects.BitmapSource(_deviceManager.ContextDirect2D); edto.Effect.SetValueByName("WicBitmapSource", asset.Item1); uies.Width = asset.Item2.Width; uies.Height = asset.Item2.Height; } } catch { var asset = LoadAssetAsync(_deviceManager.WICFactory, "Assets\\StartDemo\\Backgrounds\\green1.jpg", uies.AggregateId); edto.Effect = new SharpDX.Direct2D1.Effects.BitmapSource(_deviceManager.ContextDirect2D); edto.Effect.SetValueByName("WicBitmapSource", asset.Result.Item1); uies.Width = asset.Result.Item2.Width; uies.Height = asset.Result.Item2.Height; } #endregion break; case "SharpDX.Direct2D1.Effects.Blend": break; case "SharpDX.Direct2D1.Effects.Border": break; case "SharpDX.Direct2D1.Effects.Brightness": #region brightness edto.Effect = new SharpDX.Direct2D1.Effects.Brightness(_deviceManager.ContextDirect2D); ((SharpDX.Direct2D1.Effects.Brightness)edto.Effect).WhitePoint = new Vector2((float)uies.udfDouble1, (float)uies.udfDouble2); ((SharpDX.Direct2D1.Effects.Brightness)edto.Effect).BlackPoint = new Vector2((float)uies.udfDouble3, (float)uies.udfDouble4); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.ColorManagement": break; case "SharpDX.Direct2D1.Effects.ColorMatrix": break; case "SharpDX.Direct2D1.Effects.Composite": #region composite if (!string.IsNullOrEmpty(uies.Grouping2) && !string.IsNullOrEmpty(uies.udfString2)) { edto.Effect = new SharpDX.Direct2D1.Effects.Composite(_deviceManager.ContextDirect2D); if (!string.IsNullOrEmpty(uies.Grouping2)) { var found = _renderTree.Where(x => x.EffectDTO != null && x.EffectDTO.AggregateId == uies.Grouping2); if (found != null && found.Count() > 0) edto.Effect.SetInputEffect(0, found.First().EffectDTO.Effect, true); else edto.Effect.SetInputEffect(1, parentRenderTreeItem.EffectDTO.Effect, true); } else edto.Effect.SetInputEffect(1, parentRenderTreeItem.EffectDTO.Effect, true); if (!string.IsNullOrEmpty(uies.udfString2)) { var found = _renderTree.Where(x => x.EffectDTO != null && x.EffectDTO.AggregateId == uies.udfString2); if (found != null && found.Count() > 0) edto.Effect.SetInputEffect(1, found.First().EffectDTO.Effect, true); else edto.Effect.SetInputEffect(1, parentRenderTreeItem.EffectDTO.Effect, true); } else edto.Effect.SetInputEffect(1, parentRenderTreeItem.EffectDTO.Effect, true); } #endregion break; case "SharpDX.Direct2D1.Effects.ConvolveMatrix": #region convolve matrix edto.Effect = new SharpDX.Direct2D1.Effects.ConvolveMatrix(_deviceManager.ContextDirect2D); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); if (!string.IsNullOrEmpty(uies.udfString2)) //matrix { var parts = uies.udfString2.Split("|".ToCharArray()); if (parts.Length == 9) { float[] matrix = new float[9]{ float.Parse(parts[0]), float.Parse(parts[1]), float.Parse(parts[2]), float.Parse(parts[3]), float.Parse(parts[4]), float.Parse(parts[5]), float.Parse(parts[6]), float.Parse(parts[7]), float.Parse(parts[8]), }; ((SharpDX.Direct2D1.Effects.ConvolveMatrix)edto.Effect).KernelMatrix = matrix; } //edto.Effect.SetInput(0, parentRenderTreeItem.EffectDTO.Effect.Output, true); //var kernelmatrix = new float[9] { 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f }; //((SharpDX.Direct2D1.Effects.ConvolveMatrix)edto.Effect).KernelMatrix = kernelmatrix; } else { ((SharpDX.Direct2D1.Effects.ConvolveMatrix)edto.Effect).KernelMatrix = new float[9] { 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f }; } #endregion break; case "SharpDX.Direct2D1.Effects.Crop": #region crop edto.Effect = new SharpDX.Direct2D1.Effects.Crop(_deviceManager.ContextDirect2D); ((SharpDX.Direct2D1.Effects.Crop)edto.Effect).Rectangle = new Vector4((float)uies.udfDouble1, (float)uies.udfDouble2, (float)uies.udfDouble3, (float)uies.udfDouble4); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.DirectionalBlur": #region directional blur edto.Effect = new SharpDX.Direct2D1.Effects.DirectionalBlur(_deviceManager.ContextDirect2D); edto.Effect.SetValueByName("StandardDeviation", (float)uies.udfDouble1); edto.Effect.SetValueByName("Angle", (float)uies.udfDouble2); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.DiscreteTransfer": break; case "SharpDX.Direct2D1.Effects.DisplacementMap": break; case "SharpDX.Direct2D1.Effects.DistantDiffuse": break; case "SharpDX.Direct2D1.Effects.DistantSpecular": break; case "SharpDX.Direct2D1.Effects.DpiCompensation": break; case "SharpDX.Direct2D1.Effects.Flood": #region flood edto.Effect = new SharpDX.Direct2D1.Effects.Flood(_deviceManager.ContextDirect2D); ((SharpDX.Direct2D1.Effects.Flood)edto.Effect).Color = new Color4((float)uies.udfDouble1, (float)uies.udfDouble2, (float)uies.udfDouble3, (float)uies.udfDouble4); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.GammaTransfer": break; case "SharpDX.Direct2D1.Effects.GaussianBlur": #region gaussian blur edto.Effect = new SharpDX.Direct2D1.Effects.GaussianBlur(_deviceManager.ContextDirect2D); edto.Effect.SetValueByName("StandardDeviation", (float)uies.udfDouble1); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.Histogram": break; case "SharpDX.Direct2D1.Effects.HueRotate": #region hue rotate edto.Effect = new SharpDX.Direct2D1.Effects.HueRotation(_deviceManager.ContextDirect2D); edto.Effect.SetValue(0, (float)uies.udfDouble1); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.LinearTransfer": break; case "SharpDX.Direct2D1.Effects.LuminanceToAlpha": break; case "SharpDX.Direct2D1.Effects.Morphology": break; case "SharpDX.Direct2D1.Effects.NamespaceDoc": break; case "SharpDX.Direct2D1.Effects.PointDiffuse": break; case "SharpDX.Direct2D1.Effects.PointSpecular": break; case "SharpDX.Direct2D1.Effects.Premultiply": break; case "SharpDX.Direct2D1.Effects.Saturation": #region saturation edto.Effect = new SharpDX.Direct2D1.Effects.Saturation(_deviceManager.ContextDirect2D); edto.Effect.SetValue(0, (float)uies.udfDouble1); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.Scale": #region scale SharpDX.Direct2D1.Effects.Scale ef = new SharpDX.Direct2D1.Effects.Scale(_deviceManager.ContextDirect2D); ef.BorderMode = SharpDX.Direct2D1.BorderMode.Soft; ef.Cached = false; ef.ScaleAmount = new Vector2((float)uies.udfDouble1, (float)uies.udfDouble2); ef.CenterPoint = new Vector2((float)uies.udfDouble3, (float)uies.udfDouble4); edto.Effect = ef; edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.Shadow": #region shadow edto.Effect = new SharpDX.Direct2D1.Effects.Shadow(_deviceManager.ContextDirect2D); edto.Effect.SetValue(0, (float)uies.udfDouble1); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.SpotDiffuse": break; case "SharpDX.Direct2D1.Effects.SpotSpecular": break; case "SharpDX.Direct2D1.Effects.TableTransfer": break; case "SharpDX.Direct2D1.Effects.Tile": #region tile edto.Effect = new SharpDX.Direct2D1.Effects.Tile(_deviceManager.ContextDirect2D); ((SharpDX.Direct2D1.Effects.Tile)edto.Effect).Rectangle = new Vector4((float)uies.udfDouble1, (float)uies.udfDouble2, (float)uies.udfDouble3, (float)uies.udfDouble4); edto.Effect.SetInputEffect(0, parentRenderTreeItem.EffectDTO.Effect, true); #endregion break; case "SharpDX.Direct2D1.Effects.Transform3D": break; case "SharpDX.Direct2D1.Effects.Turbulence": break; case "SharpDX.Direct2D1.Effects.UnPremultiply": break; } RenderDTO _newRenderDto; if(parentRenderTreeItem!=null) _newRenderDto = new RenderDTO() { EffectDTO = edto, Type = eRenderType.Effect , Order = parentRenderTreeItem.Order }; else _newRenderDto = new RenderDTO() { EffectDTO = edto, Type = eRenderType.Effect, Order = 1}; _renderTree.Add(_newRenderDto); return _newRenderDto; }
private async Task<bool> UpdateRenderItemWithUIElement_Effect(UIElementState uies, RenderDTO renderItem) { if (_renderTree == null || _renderTree.Count == 0) return true; UIElementState uiesParent = AppDatabase.Current.RetrieveUIElementState(renderItem.EffectDTO.Grouping1).First(); string[] parts = uies.udfString1.Split("|".ToCharArray()); //child got changed so re update from the parent where applicable renderItem.EffectDTO.IsRenderable = uies.IsRenderable; renderItem.EffectDTO.MainTranslation = new Vector3( (float)uiesParent.Left, (float)uiesParent.Top, (float)0); renderItem.EffectDTO.MainScale = new Vector3( (float)uiesParent.Scale, (float)uiesParent.Scale, 0); if (string.IsNullOrEmpty(uies.Grouping2)) { if (renderItem.EffectDTO.Effect != null) { RenderDTO renderItemParent = _renderTree.Where(x => x.EffectDTO != null && x.EffectDTO.AggregateId == uies.Grouping1).First(); renderItem.EffectDTO.Effect.SetInputEffect(0, renderItemParent.EffectDTO.Effect, true); } } else { if (renderItem.EffectDTO.Effect != null) { RenderDTO renderItemParent = _renderTree.Where(x => x.EffectDTO != null && x.EffectDTO.AggregateId == uies.Grouping2).First(); renderItem.EffectDTO.Effect.SetInputEffect(0, renderItemParent.EffectDTO.Effect, true); } } //SharpDX.Direct2D1.Effects.Blend //now just update child based on new values from child UIElementState switch (parts[0]) { case "SharpDX.Direct2D1.Effects.AffineTransform2D": break; case "SharpDX.Direct2D1.Effects.ArithmeticComposite": break; case "SharpDX.Direct2D1.Effects.Atlas": break; case "SharpDX.Direct2D1.Effects.BitmapSourceEffect": #region bitmap source var asset = await LoadAssetAsync(_deviceManager.WICFactory, uies.udfString1, uies.AggregateId); ((SharpDX.Direct2D1.Effects.BitmapSource)renderItem.EffectDTO.Effect).SetValueByName("WicBitmapSource", asset.Item1); #endregion break; case "SharpDX.Direct2D1.Effects.Blend": break; case "SharpDX.Direct2D1.Effects.Border": break; case "SharpDX.Direct2D1.Effects.Brightness": #region brightness ((SharpDX.Direct2D1.Effects.Brightness)renderItem.EffectDTO.Effect).WhitePoint = new Vector2((float)uies.udfDouble1, (float)uies.udfDouble2); ((SharpDX.Direct2D1.Effects.Brightness)renderItem.EffectDTO.Effect).BlackPoint = new Vector2((float)uies.udfDouble3, (float)uies.udfDouble4); #endregion break; case "SharpDX.Direct2D1.Effects.ColorManagement": break; case "SharpDX.Direct2D1.Effects.ColorMatrix": break; case "SharpDX.Direct2D1.Effects.Composite": #region composite if(!string.IsNullOrEmpty(uies.Grouping2) && !string.IsNullOrEmpty(uies.udfString2)){ //renderItem.EffectDTO.Effect.SetValue(0, (float)uies.udfDouble1); if (renderItem.EffectDTO.Effect == null) renderItem.EffectDTO.Effect = new SharpDX.Direct2D1.Effects.Composite(_deviceManager.ContextDirect2D); //else //{ // renderItem.EffectDTO.Effect.Dispose(); // renderItem.EffectDTO.Effect = new SharpDX.Direct2D1.Effects.Composite(_deviceManager.ContextDirect2D); //} if (!string.IsNullOrEmpty(uies.Grouping2)) { var found = _renderTree.Where(x => x.EffectDTO != null && x.EffectDTO.AggregateId == uies.Grouping2); if (found != null && found.Count() > 0) renderItem.EffectDTO.Effect.SetInputEffect(0, found.First().EffectDTO.Effect, true); } if (!string.IsNullOrEmpty(uies.udfString2)) { var found = _renderTree.Where(x => x.EffectDTO != null && x.EffectDTO.AggregateId == uies.udfString2); if (found != null && found.Count() > 0) renderItem.EffectDTO.Effect.SetInputEffect(1, found.First().EffectDTO.Effect, true); } } #endregion break; case "SharpDX.Direct2D1.Effects.ConvolveMatrix": #region convolve matrix if (!string.IsNullOrEmpty(uies.udfString2)) //matrix { var matrixParts = uies.udfString2.Split("|".ToCharArray()); if (matrixParts.Length == 9) { float[] matrix = new float[9]{ float.Parse(matrixParts[0]), float.Parse(matrixParts[1]), float.Parse(matrixParts[2]), float.Parse(matrixParts[3]), float.Parse(matrixParts[4]), float.Parse(matrixParts[5]), float.Parse(matrixParts[6]), float.Parse(matrixParts[7]), float.Parse(matrixParts[8]), }; ((SharpDX.Direct2D1.Effects.ConvolveMatrix)renderItem.EffectDTO.Effect).KernelMatrix = matrix; } } #endregion break; case "SharpDX.Direct2D1.Effects.Crop": #region Crop ((SharpDX.Direct2D1.Effects.Crop)renderItem.EffectDTO.Effect).Rectangle = new Vector4((float)uies.udfDouble1, (float)uies.udfDouble2, (float)uies.udfDouble3, (float)uies.udfDouble4); #endregion break; case "SharpDX.Direct2D1.Effects.DirectionalBlur": #region directional blur renderItem.EffectDTO.Effect.SetValueByName("StandardDeviation", (float)uies.udfDouble1); renderItem.EffectDTO.Effect.SetValueByName("Angle", (float)uies.udfDouble2); #endregion break; case "SharpDX.Direct2D1.Effects.DiscreteTransfer": break; case "SharpDX.Direct2D1.Effects.DisplacementMap": break; case "SharpDX.Direct2D1.Effects.DistantDiffuse": break; case "SharpDX.Direct2D1.Effects.DistantSpecular": break; case "SharpDX.Direct2D1.Effects.DpiCompensation": break; case "SharpDX.Direct2D1.Effects.Flood": #region flood ((SharpDX.Direct2D1.Effects.Flood)renderItem.EffectDTO.Effect).Color = new Color4((float)uies.udfDouble1, (float)uies.udfDouble2, (float)uies.udfDouble3, (float)uies.udfDouble4); #endregion break; case "SharpDX.Direct2D1.Effects.GammaTransfer": break; case "SharpDX.Direct2D1.Effects.GaussianBlur": #region gaussian blur renderItem.EffectDTO.Effect.SetValueByName("StandardDeviation", (float)uies.udfDouble1); #endregion break; case "SharpDX.Direct2D1.Effects.Histogram": break; case "SharpDX.Direct2D1.Effects.HueRotate": #region hue rotate renderItem.EffectDTO.Effect.SetValue(0, (float)uies.udfDouble1); #endregion break; case "SharpDX.Direct2D1.Effects.LinearTransfer": break; case "SharpDX.Direct2D1.Effects.LuminanceToAlpha": break; case "SharpDX.Direct2D1.Effects.Morphology": break; case "SharpDX.Direct2D1.Effects.NamespaceDoc": break; case "SharpDX.Direct2D1.Effects.PointDiffuse": break; case "SharpDX.Direct2D1.Effects.PointSpecular": break; case "SharpDX.Direct2D1.Effects.Premultiply": break; case "SharpDX.Direct2D1.Effects.Saturation": #region saturation renderItem.EffectDTO.Effect.SetValue(0, (float)uies.udfDouble1); #endregion break; case "SharpDX.Direct2D1.Effects.Scale": #region scale SharpDX.Direct2D1.Effects.Scale ef = (SharpDX.Direct2D1.Effects.Scale)renderItem.EffectDTO.Effect; ef.ScaleAmount = new Vector2((float)uies.udfDouble1, (float)uies.udfDouble2); ef.CenterPoint = new Vector2((float)uies.udfDouble3, (float)uies.udfDouble4); #endregion break; case "SharpDX.Direct2D1.Effects.Shadow": #region shadow renderItem.EffectDTO.Effect.SetValue(0, (float)uies.udfDouble1); #endregion break; case "SharpDX.Direct2D1.Effects.SpotDiffuse": break; case "SharpDX.Direct2D1.Effects.SpotSpecular": break; case "SharpDX.Direct2D1.Effects.TableTransfer": break; case "SharpDX.Direct2D1.Effects.Tile": #region tile ((SharpDX.Direct2D1.Effects.Tile)renderItem.EffectDTO.Effect).Rectangle = new Vector4((float)uies.udfDouble1, (float)uies.udfDouble2, (float)uies.udfDouble3, (float)uies.udfDouble4); #endregion break; case "SharpDX.Direct2D1.Effects.Transform3D": break; case "SharpDX.Direct2D1.Effects.Turbulence": break; case "SharpDX.Direct2D1.Effects.UnPremultiply": break; } return true; }
public async void PushToCloud(UIElementState uiElementState) { if (!AppService.IsConnected()) return; try { if (uiElementState.MSId != 0) { int id = uiElementState.Id; uiElementState.Id = uiElementState.MSId; uiElementState.MSId = id; await mstUIElementState.UpdateAsync(uiElementState); uiElementState.Id = id; } else { uiElementState.Id = 0; await mstUIElementState.InsertAsync(uiElementState); AppDatabase.Current.UpdateSolutionField(uiElementState.AggregateId, "MSId", uiElementState.Id, false); } Messenger.Default.Send<GeneralSystemWideMessage>(new GeneralSystemWideMessage("writing ...") { Identifier = "CLOUD BAR", SourceId = "AzureMobileService", Action = "WRITE" }); } catch { Messenger.Default.Send<GeneralSystemWideMessage>(new GeneralSystemWideMessage("writing ...") { Identifier = "CLOUD BAR", SourceId = "AzureMobileService", Action = "ERROR" }); } }
private async Task _changeBackgroundImpl(int uniqueId, float width, float height, float left, float top,string path, string backgroundUrl, string iconUrl, Color fontColor, float iconScale = 1.0f, string label = "", bool isPressed = false) { //=============== //CREATE LAYOUT ITEM USED FOR HITTESTING //=============== _layoutTree.Add(new HitTestRect() { UniqueId = uniqueId, IsHit = false, Rectangle = new Rectangle((int)left, (int)top, (int)width, (int)height) }); //=============== //TILE //=============== var _bs = new UIElementState() { IsRenderable = false, //is effect rendered/visible AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfString1 = backgroundUrl, udfString2 = path }; var _ebs = await CreateRenderItemWithUIElement_Effect( _bs, "SharpDX.Direct2D1.Effects.BitmapSourceEffect", null); _ebs.EffectDTO.MainTranslation = new Vector3(left, top, 0); //determine the scale to use to scale the image to the app dimension double _scaleRatio = 1; var yRatio = 1.0f / (height / _bs.Height); var xRatio = 1.0f / (width / _bs.Width); var xyRatio = Math.Min(xRatio, yRatio); _scaleRatio = 1.0d / xyRatio; //create effect - scale var _escale = await CreateRenderItemWithUIElement_Effect( new UIElementState() { IsRenderable = false, //is effect rendered/visible AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfDouble1 = _scaleRatio, // scale x udfDouble2 = _scaleRatio, // scale y udfDouble3 = 0.5f, // centerpoint x udfDouble4 = 0.5f // centerpoint y }, "SharpDX.Direct2D1.Effects.Scale", _ebs //linked parent effect ); //create effect - crop var _ecrop = await CreateRenderItemWithUIElement_Effect( new UIElementState() { IsRenderable = true, //is effect rendered/visible AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfDouble1 = 0, udfDouble2 = 0, udfDouble3 = width, udfDouble4 = height }, "SharpDX.Direct2D1.Effects.Crop", _escale //linked parent effect ); _ecrop.Order = 9; //=============== //INNER GLOW //=============== var rect_fade = await AddUpdateUIElementState_Rectangle( new UIElementState() { IsRenderable = isPressed ? false : true, AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, Width = width, Height = height, udfInt1 = 2, //not fill = 1, fill = 2 udfString1 = "Rectangle", udfDouble3 = 0, //stroke width udfInt2 = 1, // 1 = 2 point gradient, 2= solid udfString2 = "0|0|0|0", //gradient 1 // white = "255|255|255|0", //gradient 1 udfDouble1 = 70d, // color position 1 udfString3 = "0|0|0|255", //gradient 2 udfDouble2 = 100d, // color position 2 Left = left, Top = top, Scale = 1d }, null); rect_fade.Order = 10; //=============== //OUTER SHADOW //=============== if (!isPressed) { var _eshadow = await CreateRenderItemWithUIElement_Effect( new UIElementState() { IsRenderable = true, AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfDouble1 = 5.0d, }, "SharpDX.Direct2D1.Effects.Shadow", _ecrop ); _eshadow.Order = 5; } //=============== //ICON //=============== if (iconUrl.Length > 0) { //bitmap source var _bsicon = new UIElementState() { IsRenderable = true, AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfString1 = iconUrl }; //bitmap effect var _ebsicon = await CreateRenderItemWithUIElement_Effect( _bsicon, "SharpDX.Direct2D1.Effects.BitmapSourceEffect", null); double iconX = (width - (_bsicon.Width * iconScale)) / 2; double iconY = (height - (_bsicon.Height * iconScale)) / 2; _ebsicon.EffectDTO.MainTranslation = new Vector3(left + (float)iconX, top + (float)iconY, 0); _ebsicon.EffectDTO.MainScale = new Vector3(iconScale); _ebsicon.Order = 20; //outer glow var _ebsiconshadow = await CreateRenderItemWithUIElement_Effect( new UIElementState() { IsRenderable = isPressed ? false : true, AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfDouble1 = 2.0d, }, "SharpDX.Direct2D1.Effects.Shadow", _ebsicon ); _ebsiconshadow.Order = 19; } //=============== //LABEL //=============== if (label.Length > 0) { //outer glow var _txtLabel = await AddUpdateUIElementState_Text( new UIElementState() { IsRenderable = true, AggregateId = Guid.NewGuid().ToString(), Grouping1 = string.Empty, udfString1 = label, udfString2 = "Segoe UI", udfDouble1 = 18d, Left = left, Top = top + height - 25, Scale = 1, Width = width, Height = height } , null , fontColor ); _txtLabel.Order = 25; } if (NumberFramesToRender < 1) NumberFramesToRender = 1; }
private async void AddImageByUriAsync( UIElementState uiElementState) // string assetUri, string aggregateId) { var layoutDetail = AppDatabase.Current.GetLayoutDetail(0); // 0 = LayoutDetail AppDatabase.Current.UpdateUIElementStateField(uiElementState.AggregateId, "udfBool1", true, sendAggregateUpdateMessage: false); uiElementState.udfBool1 = true; DoAggregateUpdatedForImage(uiElementState, false); }
///// <summary> ///// Loads bitmap asynchronously and injects into global variables. I need to work out how to NOT make them global ///// </summary> ///// <param name="assetNativeUri"></param> ///// <returns></returns> //public async Task<bool> LoadAssetAsync(string assetNativeUri) //{ // var path = Windows.ApplicationModel.Package.Current.InstalledLocation.Path; // var storageFile = await Windows.Storage.StorageFile.GetFileFromPathAsync(assetNativeUri); // Stream ms = await storageFile.OpenStreamForReadAsync(); //ras.GetResults().AsStreamForRead()) // //var data = SharpDX.IO.NativeFile.ReadAllBytes(assetNativeUri); // //using (System.IO.MemoryStream ms = new System.IO.MemoryStream(data)) // { // if (ms != null) // { // SharpDX.WIC.BitmapDecoder bitmapDecoder = new SharpDX.WIC.BitmapDecoder( // _deviceManager.WICFactory, // ms, // SharpDX.WIC.DecodeOptions.CacheOnDemand // ); // { // SharpDX.WIC.BitmapFrameDecode bitmapFrameDecode = bitmapDecoder.GetFrame(0); // { // SharpDX.WIC.BitmapSource bitmapSource = new SharpDX.WIC.BitmapSource(bitmapFrameDecode.NativePointer); // { // SharpDX.WIC.FormatConverter formatConverter = new SharpDX.WIC.FormatConverter(_deviceManager.WICFactory); // //formatConverter.Initialize( bitmapSource, SharpDX.WIC.PixelFormat.Format32bppBGRA); // formatConverter.Initialize( // bitmapSource, // SharpDX.WIC.PixelFormat.Format32bppBGRA, // SharpDX.WIC.BitmapDitherType.None, // null, // 0.0f, // SharpDX.WIC.BitmapPaletteType.Custom // ); // _backgroundImageSize = formatConverter.Size; // _backgroundImageFormatConverter = formatConverter; // return true; // } // } // } // } // } // //ras.Close(); // _backgroundImageFormatConverter = null; // _backgroundImageSize = new Size2(0, 0); // return false; //} /// <summary> /// Used to update an existing bitmap effect with a new image /// </summary> /// <param name="assetUri"></param> /// <param name="aggregateId"></param> private async void UpdateImageByUri(UIElementState uistate, LayoutDetail layoutDetail, bool resetTransforms = true) { try { //string assetUri, string aggregateId var found = _renderTree.Where(x => x.Type == eRenderType.Effect && x.EffectDTO.AggregateId == uistate.AggregateId).FirstOrDefault(); if (found != null) { var ret = await LoadAssetAsync(_deviceManager.WICFactory, uistate.udfString1, uistate.AggregateId); //LoadLocalNativeAsset(assetUri, out backgroundImageFormatConverter, out backgroundImageSize); if (ret!=null) { found.EffectDTO.Effect.SetValueByName("WicBitmapSource", _backgroundImageFormatConverter); _backgroundImageFormatConverter.Dispose(); _backgroundImageFormatConverter = null; //double newRatio = (_backgroundImageSize.Width > Window.Current.Bounds.Width) ? (Window.Current.Bounds.Width/_backgroundImageSize.Width) : 1d; double newRatio = (_backgroundImageSize.Width > layoutDetail.Width) ? (layoutDetail.Width / _backgroundImageSize.Width) : 1d; AppDatabase.Current.UpdateUIElementStateField(uistate.AggregateId, "udfBool1", false, sendAggregateUpdateMessage: false); if (resetTransforms) AppDatabase.Current.AddUpdateUIElementState(uistate.AggregateId, State.SelectedScene.AggregateId, 0, 0, _backgroundImageSize.Width, _backgroundImageSize.Height, newRatio, true, null, null, false); else AppDatabase.Current.AddUpdateUIElementState(uistate.AggregateId, State.SelectedScene.AggregateId, uistate.Left, uistate.Top, _backgroundImageSize.Width, _backgroundImageSize.Height, uistate.Scale, true, null, null, false); NumberFramesToRender = 3; } } //TurnOnRenderingBecauseThereAreRenderableEffects(); } catch (Exception ex) { } }
private async Task<RenderDTO> AddUpdateUIElementState_Text(UIElementState uistate, RenderDTO rDto, Color color) { TextDTO textDto = null; if (rDto == null || rDto.TextDTO == null) { textDto = new TextDTO(); textDto.AggregateId = uistate.AggregateId; rDto = new RenderDTO() { TextDTO = textDto, Type = eRenderType.Text, Order = _renderTree.Count() + 1 }; _renderTree.Add(rDto); } else { textDto = rDto.TextDTO; } textDto.TextFormat = new SharpDX.DirectWrite.TextFormat( _deviceManager.FactoryDirectWrite, uistate.udfString2, SharpDX.DirectWrite.FontWeight.Light, SharpDX.DirectWrite.FontStyle.Normal, SharpDX.DirectWrite.FontStretch.Normal, (float)uistate.udfDouble1); textDto.Brush = new SharpDX.Direct2D1.SolidColorBrush(_deviceManager.ContextDirect2D, color); textDto.Text = uistate.udfString1; textDto.TextFormat.TextAlignment = SharpDX.DirectWrite.TextAlignment.Center; textDto.LayoutRect = new RectangleF(0, 0, (float)uistate.Width, (float)uistate.Height); rDto.TextDTO.IsRenderable = uistate.IsRenderable; //true rDto.TextDTO.MainScale = new Vector3((float)uistate.Scale, (float)uistate.Scale, 1); rDto.TextDTO.MainTranslation = new Vector3((float)uistate.Left, (float)uistate.Top, 0); ////ROTATION //if (!string.IsNullOrEmpty(uistate.udfString5)) //{ // var strokeParts = uistate.udfString5.Split("|".ToCharArray()); // if (strokeParts.Length > 0) // { // rDto.ShapeDTO.MainRotation = new Vector3( // MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[0]) ? "0" : strokeParts[0])), // MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[1]) ? "0" : strokeParts[1])), // MathUtil.DegreesToRadians(float.Parse(string.IsNullOrEmpty(strokeParts[2]) ? "0" : strokeParts[2])) // ); // } //} if (NumberFramesToRender < 1) NumberFramesToRender = 1; //TurnOnRenderingBecauseThereAreRenderableEffects(); return rDto; }