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);

                }


            }
        }
Exemplo n.º 2
0
        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;


        }
Exemplo n.º 7
0
        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;
        }