Exemplo n.º 1
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line)
        {
            var rect   = line.GetBoundingRect(rootElement).ToSharpDX();
            var stroke = await line.Stroke.ToSharpDX(renderTarget, rect);

            if (stroke == null ||
                line.StrokeThickness <= 0)
            {
                return;
            }

            var layer = line.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

            renderTarget.DrawLine(
                new Vector2(
                    rect.Left + (float)line.X1,
                    rect.Top + (float)line.Y1),
                new Vector2(
                    rect.Left + (float)line.X2,
                    rect.Top + (float)line.Y2),
                stroke,
                (float)line.StrokeThickness,
                line.GetStrokeStyle(compositionEngine.D2DFactory));

            if (layer != null)
            {
                renderTarget.PopLayer();
                layer.Dispose();
            }
        }
Exemplo n.º 2
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line)
        {
            var rect = line.GetBoundingRect(rootElement).ToSharpDX();
            var stroke = await line.Stroke.ToSharpDX(renderTarget, rect);

            if (stroke == null ||
                line.StrokeThickness <= 0)
            {
                return;
            }

            var layer = line.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

            renderTarget.DrawLine(
                new Vector2(
                    rect.Left + (float)line.X1,
                    rect.Top + (float)line.Y1),
                new Vector2(
                    rect.Left + (float)line.X2,
                    rect.Top + (float)line.Y2),
                    stroke,
                    (float)line.StrokeThickness,
                    line.GetStrokeStyle(compositionEngine.D2DFactory));

            if (layer != null)
            {
                renderTarget.PopLayer();
                layer.Dispose();
            }
        }
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line)
        {
            var rect = line.GetBoundingRect(rootElement).ToSharpDX();
            //var fill = line.Fill.ToSharpDX(renderTarget, rect);
            var stroke = await line.Stroke.ToSharpDX(renderTarget, rect);

            if (stroke == null ||
                line.StrokeThickness <= 0)
            {
                return;
            }

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            renderTarget.DrawLine(
                new DrawingPointF(
                    rect.Left + (float)line.X1,
                    rect.Top + (float)line.Y1),
                new DrawingPointF(
                    rect.Left + (float)line.X2,
                    rect.Top + (float)line.Y2),
                    stroke,
                    (float)line.StrokeThickness,
                    line.GetStrokeStyle(compositionEngine.D2DFactory));

            //renderTarget.PopLayer();
        }
Exemplo n.º 4
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line)
        {
            var rect = line.GetBoundingRect(rootElement).ToSharpDX();
            //var fill = line.Fill.ToSharpDX(renderTarget, rect);
            var stroke = await line.Stroke.ToSharpDX(renderTarget, rect);

            if (stroke == null ||
                line.StrokeThickness <= 0)
            {
                return;
            }

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            renderTarget.DrawLine(
                new DrawingPointF(
                    rect.Left + (float)line.X1,
                    rect.Top + (float)line.Y1),
                new DrawingPointF(
                    rect.Left + (float)line.X2,
                    rect.Top + (float)line.Y2),
                stroke,
                (float)line.StrokeThickness,
                line.GetStrokeStyle(compositionEngine.D2DFactory));

            //renderTarget.PopLayer();
        }
        public ComplementCreationCommand(CompositionEngine TargetEngine, SimplePresentationElement ComplementKind)
            : base("Create Complement '" + ComplementKind.Name + "'.")
        {
            this.ContextEngine  = TargetEngine;
            this.ComplementKind = ComplementKind;

            this.Initialize();
        }
        public ShortcutCreationCommand(CompositionEngine TargetEngine, Idea TargetIdea)
            : base("Create Shortcut.")
        {
            this.ContextEngine = TargetEngine;
            this.TargetIdea    = TargetIdea;

            this.Initialize();
        }
Exemplo n.º 7
0
        public MarkerAssignmentCommand(CompositionEngine TargetEngine, MarkerDefinition MarkerDef)
            : base("Assign Marker: " + MarkerDef.Name)
        {
            this.ContextEngine = TargetEngine;
            this.MarkerDef     = MarkerDef;

            this.Initialize();
        }
Exemplo n.º 8
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Jupiter.Shapes.Path path)
        {
            var rect = path.GetBoundingRect(rootElement).ToSharpDX();
            var fill = await path.Fill.ToSharpDX(renderTarget, rect);

            var stroke = await path.Stroke.ToSharpDX(renderTarget, rect);

            //var layer = new D2D.Layer(renderTarget);
            //var layerParameters = new D2D.LayerParameters();
            //layerParameters.ContentBounds = rect;
            var oldTransform = renderTarget.Transform;

            renderTarget.Transform = new Matrix3x2(
                1, 0, 0, 1, rect.Left, rect.Top);
            //renderTarget.PushLayer(ref layerParameters, layer);

            var d2dGeometry = path.Data.ToSharpDX(compositionEngine.D2DFactory, rect);

            if (fill != null)
            {
                renderTarget.FillGeometry(d2dGeometry, fill, null);
            }

            if (stroke != null &&
                path.StrokeThickness > 0)
            {
                renderTarget.DrawGeometry(
                    d2dGeometry,
                    stroke,
                    (float)path.StrokeThickness,
                    path.GetStrokeStyle(compositionEngine.D2DFactory));
            }

            //if (path.StrokeThickness > 0 &&
            //    stroke != null)
            //{
            //    var halfThickness = (float)(path.StrokeThickness * 0.5);
            //    roundedRect.Rect = rect.Eroded(halfThickness);

            //    if (fill != null)
            //    {
            //        renderTarget.FillRoundedRectangle(roundedRect, fill);
            //    }

            //    renderTarget.DrawRoundedRectangle(
            //        roundedRect,
            //        stroke,
            //        (float)path.StrokeThickness,
            //        path.GetStrokeStyle(compositionEngine.D2DFactory));
            //}
            //else
            //{
            //    renderTarget.FillRoundedRectangle(roundedRect, fill);
            //}

            //renderTarget.PopLayer();
            renderTarget.Transform = oldTransform;
        }
Exemplo n.º 9
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Jupiter.Shapes.Path path)
        {
            var rect = path.GetBoundingRect(rootElement).ToSharpDX();
            var fill = await path.Fill.ToSharpDX(renderTarget, rect);
            var stroke = await path.Stroke.ToSharpDX(renderTarget, rect);

            var layer = path.CreateAndPushLayerIfNecessary(renderTarget, rootElement);
            var oldTransform = renderTarget.Transform;
            renderTarget.Transform = new Matrix3x2(
                1, 0, 0, 1, rect.Left, rect.Top);
            //renderTarget.PushLayer(ref layerParameters, layer);

            var d2dGeometry = path.Data.ToSharpDX(compositionEngine.D2DFactory, rect);

            if (fill != null)
            {
                renderTarget.FillGeometry(d2dGeometry, fill, null);
            }

            if (stroke != null &&
                path.StrokeThickness > 0)
            {
                renderTarget.DrawGeometry(
                d2dGeometry,
                stroke,
                (float)path.StrokeThickness,
                path.GetStrokeStyle(compositionEngine.D2DFactory));}

            //if (path.StrokeThickness > 0 &&
            //    stroke != null)
            //{
            //    var halfThickness = (float)(path.StrokeThickness * 0.5);
            //    roundedRect.Rect = rect.Eroded(halfThickness);

            //    if (fill != null)
            //    {
            //        renderTarget.FillRoundedRectangle(roundedRect, fill);
            //    }

            //    renderTarget.DrawRoundedRectangle(
            //        roundedRect,
            //        stroke,
            //        (float)path.StrokeThickness,
            //        path.GetStrokeStyle(compositionEngine.D2DFactory));
            //}
            //else
            //{
            //    renderTarget.FillRoundedRectangle(roundedRect, fill);
            //}

            if (layer != null)
            {
                renderTarget.PopLayer();
                layer.Dispose();
            }

            renderTarget.Transform = oldTransform;
        }
Exemplo n.º 10
0
        public RelationshipCreationCommand(CompositionEngine TargetEngine, RelationshipDefinition RelationshipDef)
            : base("Create Relationship '" + RelationshipDef.Name + "'.")
        {
            this.ContextEngine           = TargetEngine;
            this.RelationshipDef         = RelationshipDef;
            this.PointingConnectorFormat = RelationshipDef.DefaultConnectorsFormat;

            this.Initialize();

            this.Assistance = "Press [Left-ALT] to link the pointed Idea as origin.";
        }
        public static ExternalAnomaly TryLoadPendingAttachmentsFor(CompositionEngine Engine)
        {
            foreach (var RegAttachment in ExposedAttachmentFiles)
            {
                try
                {
                    LoadAttachmentFile(RegAttachment.Value.Source);
                }
                catch (Exception Failure)
                {
                    return(new ExternalAnomaly("Cannot load Attachment edited by an external application.", Failure));
                }
            }

            return(null);
        }
        public static void StopWatchingAttachmentsFor(CompositionEngine Engine)
        {
            var FilesToUnwatch = new List <string>();

            foreach (var RegAttachment in ExposedAttachmentFiles)
            {
                if (RegAttachment.Value.OwnerIdea != null && RegAttachment.Value.OwnerIdea.EditEngine == Engine)
                {
                    FilesToUnwatch.Add(RegAttachment.Key);
                }
            }

            foreach (var RegFile in FilesToUnwatch)
            {
                ExposedAttachmentFiles.Remove(RegFile);
            }
        }
Exemplo n.º 13
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse)
        {
            var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX();

            var d2dEllipse = new D2D.Ellipse(
                new Vector2(
                    (float)((rect.Left + rect.Right) * 0.5),
                    (float)((rect.Top + rect.Bottom) * 0.5)),
                (float)(0.5 * rect.Width),
                (float)(0.5 * rect.Height));
            var fill = await ellipse.Fill.ToSharpDX(renderTarget, rect);

            var layer = ellipse.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

            var stroke = await ellipse.Stroke.ToSharpDX(renderTarget, rect);

            if (ellipse.StrokeThickness > 0 &&
                stroke != null)
            {
                var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5);
                d2dEllipse.RadiusX -= halfStrokeThickness;
                d2dEllipse.RadiusY -= halfStrokeThickness;

                if (fill != null)
                {
                    renderTarget.FillEllipse(d2dEllipse, fill);
                }

                renderTarget.DrawEllipse(
                    d2dEllipse,
                    stroke,
                    (float)ellipse.StrokeThickness,
                    ellipse.GetStrokeStyle(compositionEngine.D2DFactory));
            }
            else if (fill != null)
            {
                renderTarget.FillEllipse(d2dEllipse, fill);
            }

            if (layer != null)
            {
                renderTarget.PopLayer();
                layer.Dispose();
            }
        }
Exemplo n.º 14
0
        internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, TextBlock textBlock)
        {
            using (var textFormat = new TextFormat(
                compositionEngine.DWriteFactory,
                textBlock.FontFamily.Source,
                (float)textBlock.FontSize)
            {
                TextAlignment = textBlock.TextAlignment.ToSharpDX(),
                ParagraphAlignment = ParagraphAlignment.Near
            })
            {
                var rect = textBlock.GetBoundingRect(rootElement).ToSharpDX();
                // For some reason we need a bigger rect for the TextBlock rendering to fit in the same boundaries
                rect.Right++;
                rect.Bottom++;

                using (
                    var textBrush = await textBlock.Foreground.ToSharpDX(renderTarget, rect))
                {
                    if (textBrush == null)
                    {
                        return;
                    }

                    var layer = textBlock.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                    // You can render the bounding rectangle to debug composition
                    //renderTarget.DrawRectangle(
                    //    rect,
                    //    textBrush);
                    renderTarget.DrawText(
                        textBlock.Text,
                        textFormat,
                        rect,
                        textBrush);

                    if (layer != null)
                    {
                        renderTarget.PopLayer();
                        layer.Dispose();
                    }
                    //}
                }
            }
        }
Exemplo n.º 15
0
        internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, TextBlock textBlock)
        {
            using (var textFormat = new TextFormat(
                       compositionEngine.DWriteFactory,
                       textBlock.FontFamily.Source,
                       (float)textBlock.FontSize)
            {
                TextAlignment = textBlock.TextAlignment.ToSharpDX(),
                ParagraphAlignment = ParagraphAlignment.Near
            })
            {
                var rect = textBlock.GetBoundingRect(rootElement).ToSharpDX();
                // For some reason we need a bigger rect for the TextBlock rendering to fit in the same boundaries
                rect.Right++;
                rect.Bottom++;

                using (
                    var textBrush = await textBlock.Foreground.ToSharpDX(renderTarget, rect))
                {
                    if (textBrush == null)
                    {
                        return;
                    }

                    var layer = textBlock.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                    // You can render the bounding rectangle to debug composition
                    //renderTarget.DrawRectangle(
                    //    rect,
                    //    textBrush);
                    renderTarget.DrawText(
                        textBlock.Text,
                        textFormat,
                        rect,
                        textBrush);

                    if (layer != null)
                    {
                        renderTarget.PopLayer();
                        layer.Dispose();
                    }
                    //}
                }
            }
        }
Exemplo n.º 16
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse)
        {
            var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX();

            var d2dEllipse = new D2D.Ellipse(
                new Vector2(
                    (float)((rect.Left + rect.Right) * 0.5),
                    (float)((rect.Top + rect.Bottom) * 0.5)),
                (float)(0.5 * rect.Width),
                (float)(0.5 * rect.Height));
            var fill = await ellipse.Fill.ToSharpDX(renderTarget, rect);

            var layer = ellipse.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

            var stroke = await ellipse.Stroke.ToSharpDX(renderTarget, rect);

            if (ellipse.StrokeThickness > 0 &&
                stroke != null)
            {
                var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5);
                d2dEllipse.RadiusX -= halfStrokeThickness;
                d2dEllipse.RadiusY -= halfStrokeThickness;

                if (fill != null)
                {
                    renderTarget.FillEllipse(d2dEllipse, fill);
                }

                renderTarget.DrawEllipse(
                    d2dEllipse,
                    stroke,
                    (float)ellipse.StrokeThickness,
                    ellipse.GetStrokeStyle(compositionEngine.D2DFactory));
            }
            else if (fill != null)
            {
                renderTarget.FillEllipse(d2dEllipse, fill);
            }

            if (layer != null)
            {
                renderTarget.PopLayer();
                layer.Dispose();
            }
        }
        internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Border border)
        {
            var rect = border.GetBoundingRect(rootElement).ToSharpDX();
            var brush = border.Background.ToSharpDX(renderTarget, rect);

            var geometry = GetBorderFillGeometry(compositionEngine, border, rect);

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            renderTarget.FillGeometry(geometry, brush);

            //renderTarget.PopLayer();

            compositionEngine.RenderChildren(renderTarget, rootElement, border);
        }
Exemplo n.º 18
0
        internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Border border)
        {
            var rect  = border.GetBoundingRect(rootElement).ToSharpDX();
            var brush = border.Background.ToSharpDX(renderTarget, rect);

            var geometry = GetBorderFillGeometry(compositionEngine, border, rect);

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            renderTarget.FillGeometry(geometry, brush);

            //renderTarget.PopLayer();

            compositionEngine.RenderChildren(renderTarget, rootElement, border);
        }
Exemplo n.º 19
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse)
        {
            var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX();

            var d2dEllipse = new D2D.Ellipse(
                new DrawingPointF(
                    (float)((rect.Left + rect.Right) * 0.5),
                    (float)((rect.Top + rect.Bottom) * 0.5)),
                (float)(0.5 * rect.Width),
                (float)(0.5 * rect.Height));
            var fill = await ellipse.Fill.ToSharpDX(renderTarget, rect);

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            var stroke = await ellipse.Stroke.ToSharpDX(renderTarget, rect);

            if (ellipse.StrokeThickness > 0 &&
                stroke != null)
            {
                var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5);
                d2dEllipse.RadiusX -= halfStrokeThickness;
                d2dEllipse.RadiusY -= halfStrokeThickness;

                if (fill != null)
                {
                    renderTarget.FillEllipse(d2dEllipse, fill);
                }

                renderTarget.DrawEllipse(
                    d2dEllipse,
                    stroke,
                    (float)ellipse.StrokeThickness,
                    ellipse.GetStrokeStyle(compositionEngine.D2DFactory));
            }
            else if (fill != null)
            {
                renderTarget.FillEllipse(d2dEllipse, fill);
            }

            //renderTarget.PopLayer();
        }
        internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse)
        {
            var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX();

            var d2dEllipse = new D2D.Ellipse(
                new DrawingPointF(
                    (float)((rect.Left + rect.Right) * 0.5),
                    (float)((rect.Top + rect.Bottom) * 0.5)),
                (float)(0.5 * rect.Width),
                (float)(0.5 * rect.Height));
            var fill = ellipse.Fill.ToSharpDX(renderTarget, rect);

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            var stroke = ellipse.Stroke.ToSharpDX(renderTarget, rect);

            if (ellipse.StrokeThickness > 0 &&
                stroke != null)
            {
                var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5);
                d2dEllipse.RadiusX -= halfStrokeThickness;
                d2dEllipse.RadiusY -= halfStrokeThickness;

                if (fill != null)
                {
                    renderTarget.FillEllipse(d2dEllipse, fill);
                }

                renderTarget.DrawEllipse(
                    d2dEllipse,
                    stroke,
                    (float)ellipse.StrokeThickness,
                    ellipse.GetStrokeStyle(compositionEngine.D2DFactory));
            }
            else if (fill != null)
            {
                renderTarget.FillEllipse(d2dEllipse, fill);
            }

            //renderTarget.PopLayer();
        }
        internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, TextBlock textBlock)
        {
            using (var textFormat = new TextFormat(
                compositionEngine.DWriteFactory,
                textBlock.FontFamily.Source,
                (float)textBlock.FontSize)
            {
                TextAlignment = textBlock.TextAlignment.ToSharpDX(),
                ParagraphAlignment = ParagraphAlignment.Near
            })
            {
                var rect = textBlock.GetBoundingRect(rootElement).ToSharpDX();
                // For some reason we need a bigger rect for the TextBlock rendering to fit in the same boundaries
                rect.Right++;
                rect.Bottom++;

                using (
                    var textBrush = await textBlock.Foreground.ToSharpDX(renderTarget, rect))
                {
                    //using(var layer = new Layer(renderTarget))
                    //{
                    //var layerParameters = new LayerParameters();
                    //layerParameters.ContentBounds = rect;
                    //renderTarget.PushLayer(ref layerParameters, layer);

                    // You can render the bounding rectangle to debug composition
                    //renderTarget.DrawRectangle(
                    //    rect,
                    //    textBrush);
                    renderTarget.DrawText(
                        textBlock.Text,
                        textFormat,
                        rect,
                        textBrush);

                    //renderTarget.PopLayer();
                    //}
                }
            }
        }
Exemplo n.º 22
0
        internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, TextBlock textBlock)
        {
            using (var textFormat = new TextFormat(
                       compositionEngine.DWriteFactory,
                       textBlock.FontFamily.Source,
                       (float)textBlock.FontSize)
            {
                TextAlignment = textBlock.TextAlignment.ToSharpDX(),
                ParagraphAlignment = ParagraphAlignment.Near
            })
            {
                var rect = textBlock.GetBoundingRect(rootElement).ToSharpDX();
                // For some reason we need a bigger rect for the TextBlock rendering to fit in the same boundaries
                rect.Right++;
                rect.Bottom++;

                using (
                    var textBrush = await textBlock.Foreground.ToSharpDX(renderTarget, rect))
                {
                    //using(var layer = new Layer(renderTarget))
                    //{
                    //var layerParameters = new LayerParameters();
                    //layerParameters.ContentBounds = rect;
                    //renderTarget.PushLayer(ref layerParameters, layer);

                    // You can render the bounding rectangle to debug composition
                    //renderTarget.DrawRectangle(
                    //    rect,
                    //    textBrush);
                    renderTarget.DrawText(
                        textBlock.Text,
                        textFormat,
                        rect,
                        textBrush);

                    //renderTarget.PopLayer();
                    //}
                }
            }
        }
Exemplo n.º 23
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Border border)
        {
            var rect  = border.GetBoundingRect(rootElement).ToSharpDX();
            var brush = await border.Background.ToSharpDX(renderTarget, rect);

            if (brush != null)
            {
                var geometry = GetBorderFillGeometry(compositionEngine, border, rect);

                var layer = border.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                renderTarget.FillGeometry(geometry, brush);

                if (layer != null)
                {
                    renderTarget.PopLayer();
                    layer.Dispose();
                }
            }

            await compositionEngine.RenderChildren(renderTarget, rootElement, border);
        }
Exemplo n.º 24
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Border border)
        {
            var rect = border.GetBoundingRect(rootElement).ToSharpDX();
            var brush = await border.Background.ToSharpDX(renderTarget, rect);

            if (brush != null)
            {
                var geometry = GetBorderFillGeometry(compositionEngine, border, rect);

                var layer = border.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                renderTarget.FillGeometry(geometry, brush);

                if (layer != null)
                {
                    renderTarget.PopLayer();
                    layer.Dispose();
                }
            }

            await compositionEngine.RenderChildren(renderTarget, rootElement, border);
        }
Exemplo n.º 25
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, Jupiter.FrameworkElement rootElement, Jupiter.Controls.Image image)
        {
            var rect = image.GetBoundingRect(rootElement).ToSharpDX();

            if (rect.Width == 0 ||
                rect.Height == 0)
            {
                return;
            }

            var bitmap = await image.Source.ToSharpDX(renderTarget);

            if (bitmap == null)
            {
                return;
            }

            try
            {
                var layer = image.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                renderTarget.DrawBitmap(
                    bitmap,
                    rect,
                    (float)image.Opacity,
                    D2D.BitmapInterpolationMode.Linear);

                if (layer != null)
                {
                    renderTarget.PopLayer();
                    layer.Dispose();
                }
            }
            finally
            {
                bitmap.Dispose();
            }
        }
Exemplo n.º 26
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, Jupiter.FrameworkElement rootElement, Jupiter.Controls.Image image)
        {
            var rect = image.GetBoundingRect(rootElement).ToSharpDX();
            if (rect.Width == 0 ||
                rect.Height == 0)
            {
                return;
            }

            var bitmap = await image.Source.ToSharpDX(renderTarget);

            if (bitmap == null)
            {
                return;
            }

            try
            {
                var layer = image.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                renderTarget.DrawBitmap(
                    bitmap,
                    rect,
                    (float)image.Opacity,
                    D2D.BitmapInterpolationMode.Linear);

                if (layer != null)
                {
                    renderTarget.PopLayer();
                    layer.Dispose();
                }
            }
            finally
            {
                bitmap.Dispose();
            }
        }
        void Target_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            var Target = sender as TabItem;

            if (Target == null || Target.Tag == null || !(Target.Tag is Guid))
            {
                return;
            }

            var Position = e.GetPosition(Target);

            if (Position.Y > TABITEM_HEADER_HEIGHT)    // If double-clicking beyond the header... exit
            {
                return;
            }

            var ViewId = (Guid)Target.Tag;

            var TargetView = this.RegisteredViews.FirstOrDefault(doc => doc.GlobalId == ViewId);

            if (TargetView == null)
            {
                return;
            }

            var Context     = TargetView.EditEngine;
            var EditingView = (View)TargetView;

            // IMPORTANT: This avoid crashes by a double-click over the close button [X] of the tab header.
            if (EditingView.IsClosing)
            {
                return;
            }

            CompositionEngine.EditViewProperties(EditingView);
        }
Exemplo n.º 28
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, Jupiter.FrameworkElement rootElement, Jupiter.Controls.Image image)
        {
            var rect = image.GetBoundingRect(rootElement).ToSharpDX();

            if (rect.Width == 0 ||
                rect.Height == 0)
            {
                return;
            }

            var bitmap = await image.Source.ToSharpDX(renderTarget);

            if (bitmap == null)
            {
                return;
            }

            try
            {
                //var layer = new Layer(renderTarget);
                //var layerParameters = new LayerParameters();
                //layerParameters.ContentBounds = rect;
                //renderTarget.PushLayer(ref layerParameters, layer);
                renderTarget.DrawBitmap(
                    bitmap,
                    rect,
                    (float)image.Opacity,
                    D2D.BitmapInterpolationMode.Linear);

                //renderTarget.PopLayer();
            }
            finally
            {
                bitmap.Dispose();
            }
        }
Exemplo n.º 29
0
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle)
        {
            var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX();
            var fill = await rectangle.Fill.ToSharpDX(renderTarget, rect);

            var stroke = await rectangle.Stroke.ToSharpDX(renderTarget, rect);

            try
            {
                var layer = rectangle.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                if (rectangle.RadiusX > 0 &&
                    rectangle.RadiusY > 0)
                {
                    var roundedRect = new SharpDX.Direct2D1.RoundedRectangle();
                    roundedRect.Rect    = rect;
                    roundedRect.RadiusX = (float)rectangle.RadiusX;
                    roundedRect.RadiusY = (float)rectangle.RadiusY;

                    if (rectangle.StrokeThickness > 0 &&
                        stroke != null)
                    {
                        var halfThickness = (float)(rectangle.StrokeThickness * 0.5);
                        roundedRect.Rect = rect.Eroded(halfThickness);

                        if (fill != null)
                        {
                            renderTarget.FillRoundedRectangle(roundedRect, fill);
                        }

                        renderTarget.DrawRoundedRectangle(
                            roundedRect,
                            stroke,
                            (float)rectangle.StrokeThickness,
                            rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                    }
                    else
                    {
                        renderTarget.FillRoundedRectangle(roundedRect, fill);
                    }
                }
                else
                {
                    if (rectangle.StrokeThickness > 0 &&
                        stroke != null)
                    {
                        var halfThickness = (float)(rectangle.StrokeThickness * 0.5);

                        if (fill != null)
                        {
                            renderTarget.FillRectangle(rect.Eroded(halfThickness), fill);
                        }

                        var strokeRect = rect.Eroded(halfThickness);
                        renderTarget.DrawRectangle(
                            strokeRect,
                            stroke,
                            (float)rectangle.StrokeThickness,
                            rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                    }
                    else
                    {
                        renderTarget.FillRectangle(rect, fill);
                    }
                }

                if (layer != null)
                {
                    renderTarget.PopLayer();
                    layer.Dispose();
                }
            }
            finally
            {
                if (fill != null)
                {
                    fill.Dispose();
                }
                if (stroke != null)
                {
                    stroke.Dispose();
                }
            }
        }
Exemplo n.º 30
0
        private void NavTree_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            this.PreviousPointingPosition = default(Point);
            Idea PointedIdea = null;

            if (e.OriginalSource is FrameworkElement)
            {
                var SourceItem = Display.GetNearestVisualDominantOfType <TreeViewItem>(e.OriginalSource as FrameworkElement);

                if (SourceItem != null)
                {
                    var PointedView = SourceItem.Header as View;

                    if (PointedView == null)
                    {
                        PointedIdea = SourceItem.Header as Idea;
                    }
                    else
                    if (PointedView == this.CurrentView)
                    {
                        CompositionEngine.EditViewProperties(PointedView);
                        return;
                    }
                }
            }

            if (PointedIdea != null && PointedIdea == this.TargetIdea)
            {
                // Is clicking for jump...
                this.IsNavigating = true;

                var PointingShortcut = (this.CurrentView.Manipulator.CurrentTargetedObject is VisualElement &&
                                        ((VisualElement)this.CurrentView.Manipulator.CurrentTargetedObject).OwnerRepresentation.IsShortcut &&
                                        ((VisualElement)this.CurrentView.Manipulator.CurrentTargetedObject).OwnerRepresentation.RepresentedIdea == TargetIdea);

                if (PointingShortcut)
                {
                    ApplicationProduct.ProductDirector.EditorInterrelationsControl.SetTarget(TargetIdea);
                    // Do not "jump", it could interfere with resizing/moving of shortcut symbols
                }
                else
                if (TargetIdea.OwnerContainer != null)
                {
                    if (TargetIdea.OwnerContainer.CompositeActiveView == this.CurrentView &&
                        this.WorkspaceDirector.ActiveDocument.ActiveDocumentView == this.CurrentView)
                    {
                        var SelectableSymbols = this.CurrentView.ViewChildren
                                                .Where(child => child.Key is VisualSymbol &&
                                                       ((VisualSymbol)child.Key).OwnerRepresentation
                                                       .RepresentedIdea == TargetIdea)
                                                .Select(child => (VisualSymbol)child.Key);

                        if (SelectableSymbols.Any() && !SelectableSymbols.Any(symb => symb.OwnerRepresentation.RepresentedIdea.IsSelected))
                        {
                            this.CurrentView.Manipulator.ApplySelection(SelectableSymbols.First(), false,
                                                                        (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)));
                        }

                        ApplicationProduct.ProductDirector.EditorInterrelationsControl.SetTarget(TargetIdea);
                        this.CurrentView.Presenter.BringIntoView(
                            TargetIdea.VisualRepresentators.First(vrep => vrep.DisplayingView == this.CurrentView).MainSymbol.BaseArea);
                    }
                    else
                    {
                        var Representator = TargetIdea.MainRepresentator;

                        if (Representator != null && !CompositionEngine.IsSelectingByRectangle
                            /*- && this.IsMouseOver && Mouse.LeftButton == MouseButtonState.Pressed*/)
                        {
                            Representator.DisplayingView.Engine.ShowView(Representator.DisplayingView);

                            Representator.DisplayingView.Presenter.PostCall(
                                vpres =>
                            {
                                vpres.OwnerView.Manipulator.ApplySelection(Representator.MainSymbol);
                                vpres.OwnerView.Presenter.BringIntoView(Representator.MainSymbol.BaseArea);
                            });
                        }
                    }
                }

                this.TargetIdea   = null;
                this.IsNavigating = false;
            }
        }
Exemplo n.º 31
0
        public static void GeneratePdfXpsReport(CompositionEngine Engine)
        {
            if (Engine == null)
            {
                return;
            }

            if (!ProductDirector.ValidateEditionPermission(AppExec.LIC_EDITION_STANDARD, "Generate PDF/XPS Report"))
            {
                return;
            }

            if (Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration == null)
            {
                Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration = new ReportConfiguration();
            }

            if (!ReportingManager.EditReportConfiguration("PDF/XPS", Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration))
            {
                return;
            }

            var Generator = new ReportStandardGenerator(Engine.TargetComposition, Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration);

            var Title = "Report of " + Engine.TargetComposition.Name;

            ProgressiveThreadedExecutor <int> .Execute("Generating " + Title, Generator.Generate,
                                                       (opresult) =>
            {
                if (opresult.WasSuccessful && !File.Exists(Generator.GeneratedDocumentTempFilePath))
                {
                    opresult = OperationResult.Failure <int>("Cannot write temporal report file at: " + Generator.GeneratedDocumentTempFilePath);
                }

                if (!opresult.WasSuccessful)
                {
                    Display.DialogMessage("Report not completed!", opresult.Message, EMessageType.Warning);
                    return;
                }

                try
                {
                    var GeneratedDocument = Display.LoadDocumentFromXPS(Generator.GeneratedDocumentTempFilePath);
                    var Location          = new Uri(Generator.GeneratedDocumentTempFilePath, UriKind.Absolute);
                    var Package           = System.IO.Packaging.PackageStore.GetPackage(Location);

                    DocViewerControl = new PrintPreviewer(GeneratedDocument, Generator.GeneratedDocumentTempFilePath,
                                                          Engine.TargetComposition.Name);

                    Display.OpenContentDialogWindow(ref WinFlowDocViewer, Title, DocViewerControl);

                    Package.Close();        // Package remains open, so must closed!
                    //if you don't remove the package from the PackageStore, you won't be able to
                    //re-open the same file again later (due to System.IO.Packaging's Package store/caching
                    //rather than because of any file locks)
                    System.IO.Packaging.PackageStore.RemovePackage(Location);

                    if (File.Exists(Generator.GeneratedDocumentTempFilePath))
                    {
                        File.Delete(Generator.GeneratedDocumentTempFilePath);
                    }
                }
                catch (Exception Problem)
                {
                    Display.DialogMessage("Attention!", "Cannot show generated Report.\n"
                                          + (!Generator.GeneratedDocumentTempFilePath.IsAbsent() && File.Exists(Generator.GeneratedDocumentTempFilePath)
                                                 ? "It can still be found at: " + Generator.GeneratedDocumentTempFilePath : "")
                                          + "\nProblem: " + Problem.Message);
                }
            });
        }
Exemplo n.º 32
0
        public static void GenerateHtmlReport(CompositionEngine Engine)
        {
            if (Engine == null)
            {
                return;
            }

            if (!ProductDirector.ValidateEditionPermission(AppExec.LIC_EDITION_STANDARD, "Generate HTML Report", false, new DateTime(2013, 1, 1)))
            {
                return;
            }

            if (Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration == null)
            {
                Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration = new ReportConfiguration();
            }

            if (!ReportingManager.EditReportConfiguration("HTML", Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration))
            {
                return;
            }

            var FilePath       = Path.Combine(AppExec.UserDataDirectory, (Engine.TargetComposition.TechName + ".html").TextToUrlIdentifier());
            var DialogResponse = Display.DialogGetSaveFile("Select HTML file to create", ".html", "HTML document (*.html)|*.html", FilePath);

            if (DialogResponse == null)
            {
                return;
            }

            // Enforce url-identifier to avoid file-names with space in between.
            var Location = Path.Combine(Path.GetDirectoryName(DialogResponse.LocalPath),
                                        Path.GetFileName(DialogResponse.LocalPath).TextToUrlIdentifier());

            var WarnResponse = Display.DialogPersistableMultiOption("Note", "Your HTML Document is generated along with a '" + ReportHtmlGenerator.CONTENT_FOLDER_SUFFIX + "' directory.\n" +
                                                                    "Please don't forget to manage (copy/move/erase) them together to keep consistency." +
                                                                    (Location == DialogResponse.LocalPath ? ""
                                                                             : "\n\nThe file will be saved as '" + Path.GetFileName(Location) + "'."),
                                                                    null, "Reporting", "InformHTMLContentDir", null,
                                                                    new SimplePresentationElement("OK", "Ok", "", Display.GetAppImage("accept.png")));

            if (WarnResponse == null)
            {
                return;
            }

            var Title = "HTML Report of " + Engine.TargetComposition.Name;

            var Generator = new ReportHtmlGenerator(Engine.TargetComposition, Location,
                                                    Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration);

            ProgressiveThreadedExecutor <int> .Execute("Generating " + Title, Generator.Generate,
                                                       (opresult) =>
            {
                if (opresult.WasSuccessful && !File.Exists(Generator.GeneratedTempWorkingDocumentFile))
                {
                    opresult = OperationResult.Failure <int>("Cannot write temporal report file at: " + Generator.GeneratedTempWorkingDocumentFile);
                }

                if (!opresult.WasSuccessful)
                {
                    Display.DialogMessage("Report not completed!", opresult.Message, EMessageType.Warning);
                    return;
                }

                try
                {
                    var TargetFolder = Path.GetDirectoryName(Location);
                    General.CopyDirectory(Generator.GeneratedTempWorkingDocumentDir, TargetFolder);

                    AppExec.CallExternalProcess(Location);

                    if (File.Exists(Generator.GeneratedTempWorkingDocumentFile))
                    {
                        File.Delete(Generator.GeneratedTempWorkingDocumentFile);
                    }

                    if (Directory.Exists(Generator.GeneratedTempWorkingDocumentDir))
                    {
                        Directory.Delete(Generator.GeneratedTempWorkingDocumentDir, true);
                    }
                }
                catch (Exception Problem)
                {
                    Display.DialogMessage("Attention!", "Cannot show generated Report.\n"
                                          + (!Generator.GeneratedTempWorkingDocumentFile.IsAbsent() && File.Exists(Generator.GeneratedTempWorkingDocumentFile)
                                                 ? "It can be still found at: " + Generator.GeneratedTempWorkingDocumentFile : "")
                                          + "\nProblem: " + Problem.Message);
                }
            });
        }
Exemplo n.º 33
0
 internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, FrameworkElement fe)
 {
     await compositionEngine.RenderChildren(renderTarget, rootElement, fe);
 }
        internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle)
        {
            var rect   = rectangle.GetBoundingRect(rootElement).ToSharpDX();
            var fill   = rectangle.Fill.ToSharpDX(renderTarget, rect);
            var stroke = rectangle.Stroke.ToSharpDX(renderTarget, rect);

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            if (rectangle.RadiusX > 0 &&
                rectangle.RadiusY > 0)
            {
                var roundedRect = new SharpDX.Direct2D1.RoundedRect();
                roundedRect.Rect    = rect;
                roundedRect.RadiusX = (float)rectangle.RadiusX;
                roundedRect.RadiusY = (float)rectangle.RadiusY;

                if (rectangle.StrokeThickness > 0 &&
                    stroke != null)
                {
                    var halfThickness = (float)(rectangle.StrokeThickness * 0.5);
                    roundedRect.Rect = rect.Eroded(halfThickness);

                    if (fill != null)
                    {
                        renderTarget.FillRoundedRectangle(roundedRect, fill);
                    }

                    renderTarget.DrawRoundedRectangle(
                        roundedRect,
                        stroke,
                        (float)rectangle.StrokeThickness,
                        rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                }
                else
                {
                    renderTarget.FillRoundedRectangle(roundedRect, fill);
                }
            }
            else
            {
                if (rectangle.StrokeThickness > 0 &&
                    stroke != null)
                {
                    var halfThickness = (float)(rectangle.StrokeThickness * 0.5);

                    if (fill != null)
                    {
                        renderTarget.FillRectangle(rect.Eroded(halfThickness), fill);
                    }

                    var strokeRect = rect.Eroded(halfThickness);
                    renderTarget.DrawRectangle(
                        strokeRect,
                        stroke,
                        (float)rectangle.StrokeThickness,
                        rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                }
                else
                {
                    renderTarget.FillRectangle(rect, fill);
                }
            }
            //renderTarget.PopLayer();
        }
        internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle)
        {
            var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX();
            var fill = await rectangle.Fill.ToSharpDX(renderTarget, rect);
            var stroke = await rectangle.Stroke.ToSharpDX(renderTarget, rect);

            try
            {
                var layer = rectangle.CreateAndPushLayerIfNecessary(renderTarget, rootElement);

                if (rectangle.RadiusX > 0 &&
                    rectangle.RadiusY > 0)
                {
                    var roundedRect = new SharpDX.Direct2D1.RoundedRectangle();
                    roundedRect.Rect = rect;
                    roundedRect.RadiusX = (float)rectangle.RadiusX;
                    roundedRect.RadiusY = (float)rectangle.RadiusY;

                    if (rectangle.StrokeThickness > 0 &&
                        stroke != null)
                    {
                        var halfThickness = (float)(rectangle.StrokeThickness * 0.5);
                        roundedRect.Rect = rect.Eroded(halfThickness);

                        if (fill != null)
                        {
                            renderTarget.FillRoundedRectangle(roundedRect, fill);
                        }

                        renderTarget.DrawRoundedRectangle(
                            roundedRect,
                            stroke,
                            (float)rectangle.StrokeThickness,
                            rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                    }
                    else
                    {
                        renderTarget.FillRoundedRectangle(roundedRect, fill);
                    }
                }
                else
                {
                    if (rectangle.StrokeThickness > 0 &&
                        stroke != null)
                    {
                        var halfThickness = (float)(rectangle.StrokeThickness * 0.5);

                        if (fill != null)
                        {
                            renderTarget.FillRectangle(rect.Eroded(halfThickness), fill);
                        }

                        var strokeRect = rect.Eroded(halfThickness);
                        renderTarget.DrawRectangle(
                            strokeRect,
                            stroke,
                            (float)rectangle.StrokeThickness,
                            rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                    }
                    else
                    {
                        renderTarget.FillRectangle(rect, fill);
                    }
                }

                if (layer != null)
                {
                    renderTarget.PopLayer();
                    layer.Dispose();
                }
            }
            finally
            {
                if (fill != null)
                    fill.Dispose();
                if (stroke != null)
                    stroke.Dispose();
            }
        }
        internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle)
        {
            var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX();
            var fill = rectangle.Fill.ToSharpDX(renderTarget, rect);
            var stroke = rectangle.Stroke.ToSharpDX(renderTarget, rect);

            //var layer = new Layer(renderTarget);
            //var layerParameters = new LayerParameters();
            //layerParameters.ContentBounds = rect;
            //renderTarget.PushLayer(ref layerParameters, layer);

            if (rectangle.RadiusX > 0 &&
                rectangle.RadiusY > 0)
            {
                var roundedRect = new SharpDX.Direct2D1.RoundedRect();
                roundedRect.Rect = rect;
                roundedRect.RadiusX = (float)rectangle.RadiusX;
                roundedRect.RadiusY = (float)rectangle.RadiusY;

                if (rectangle.StrokeThickness > 0 &&
                    stroke != null)
                {
                    var halfThickness = (float)(rectangle.StrokeThickness * 0.5);
                    roundedRect.Rect = rect.Eroded(halfThickness);

                    if (fill != null)
                    {
                        renderTarget.FillRoundedRectangle(roundedRect, fill);
                    }

                    renderTarget.DrawRoundedRectangle(
                        roundedRect,
                        stroke,
                        (float)rectangle.StrokeThickness,
                        rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                }
                else
                {
                    renderTarget.FillRoundedRectangle(roundedRect, fill);
                }
            }
            else
            {
                if (rectangle.StrokeThickness > 0 &&
                    stroke != null)
                {
                    var halfThickness = (float)(rectangle.StrokeThickness * 0.5);

                    if (fill != null)
                    {
                        renderTarget.FillRectangle(rect.Eroded(halfThickness), fill);
                    }

                    var strokeRect = rect.Eroded(halfThickness);
                    renderTarget.DrawRectangle(
                        strokeRect,
                        stroke,
                        (float)rectangle.StrokeThickness,
                        rectangle.GetStrokeStyle(compositionEngine.D2DFactory));
                }
                else
                {
                    renderTarget.FillRectangle(rect, fill);
                }
            }
            //renderTarget.PopLayer();
        }
Exemplo n.º 37
0
 internal static void Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, FrameworkElement fe)
 {
     compositionEngine.RenderChildren(renderTarget, rootElement, fe);
 }
Exemplo n.º 38
0
        private static D2D.PathGeometry GetBorderFillGeometry(
            CompositionEngine compositionEngine, Border border, RectangleF rect)
        {
            var topLeftCornerSize = new DrawingSizeF(
                (float)border.CornerRadius.TopLeft,
                (float)border.CornerRadius.TopLeft);
            var topRightCornerSize = new DrawingSizeF(
                (float)border.CornerRadius.TopRight,
                (float)border.CornerRadius.TopRight);
            var bottomLeftCornerSize = new DrawingSizeF(
                (float)border.CornerRadius.BottomLeft,
                (float)border.CornerRadius.BottomLeft);
            var bottomRightCornerSize = new DrawingSizeF(
                (float)border.CornerRadius.BottomRight,
                (float)border.CornerRadius.BottomRight);

            var topCornersWidth = topLeftCornerSize.Width + topRightCornerSize.Width;

            if (topCornersWidth > rect.Width)
            {
                var scale = rect.Width / topCornersWidth;
                topLeftCornerSize.Width  *= scale;
                topRightCornerSize.Width *= scale;
            }

            var bottomCornersWidth = bottomLeftCornerSize.Width + bottomRightCornerSize.Width;

            if (bottomCornersWidth > rect.Width)
            {
                var scale = rect.Width / bottomCornersWidth;
                bottomLeftCornerSize.Width  *= scale;
                bottomRightCornerSize.Width *= scale;
            }

            var leftCornersHeight = topLeftCornerSize.Height + bottomLeftCornerSize.Height;

            if (leftCornersHeight > rect.Height)
            {
                var scale = rect.Height / leftCornersHeight;
                topLeftCornerSize.Height    *= scale;
                bottomLeftCornerSize.Height *= scale;
            }

            var rightCornersHeight = topRightCornerSize.Height + bottomRightCornerSize.Height;

            if (rightCornersHeight > rect.Height)
            {
                var scale = rect.Height / rightCornersHeight;
                topRightCornerSize.Height    *= scale;
                bottomRightCornerSize.Height *= scale;
            }

            var geometry = new D2D.PathGeometry(compositionEngine.D2DFactory);

            // Create the geometry of the irregular rounded rectangle.
            var geometrySink = geometry.Open();

            // Start to the right of the topleft corner.
            geometrySink.BeginFigure(
                new DrawingPointF(
                    rect.Left + topLeftCornerSize.Width,
                    rect.Top + 0),
                D2D.FigureBegin.Filled);

            //if (topCornersWidth < rect.Width)
            {
                // Top edge
                geometrySink.AddLine(
                    new DrawingPointF(
                        rect.Left + rect.Width - topRightCornerSize.Width,
                        rect.Top + 0));
            }

            //if (topRightCornerSize.Width > 0)

            // Top-right corner
            geometrySink.AddArc(
                new D2D.ArcSegment
            {
                Point = new DrawingPointF(
                    rect.Left + rect.Width,
                    rect.Top + topRightCornerSize.Height),
                Size           = topRightCornerSize,
                RotationAngle  = 0,
                SweepDirection = D2D.SweepDirection.Clockwise,
                ArcSize        = D2D.ArcSize.Small
            });

            // Right edge
            geometrySink.AddLine(
                new DrawingPointF(
                    rect.Left + rect.Width,
                    rect.Top + rect.Height - bottomRightCornerSize.Height));

            // Bottom-right corner
            geometrySink.AddArc(
                new D2D.ArcSegment
            {
                Point = new DrawingPointF(
                    rect.Left + rect.Width - bottomRightCornerSize.Width,
                    rect.Top + rect.Height),
                Size           = bottomRightCornerSize,
                RotationAngle  = 0,
                SweepDirection = D2D.SweepDirection.Clockwise,
                ArcSize        = D2D.ArcSize.Small
            });

            // Bottom edge
            geometrySink.AddLine(
                new DrawingPointF(
                    rect.Left + bottomLeftCornerSize.Width,
                    rect.Top + rect.Height));

            // Bottom-left corner
            geometrySink.AddArc(
                new D2D.ArcSegment
            {
                Point = new DrawingPointF(
                    rect.Left + 0,
                    rect.Top + rect.Height - bottomLeftCornerSize.Height),
                Size           = bottomLeftCornerSize,
                RotationAngle  = 0,
                SweepDirection = D2D.SweepDirection.Clockwise,
                ArcSize        = D2D.ArcSize.Small
            });

            // Left edge
            geometrySink.AddLine(
                new DrawingPointF(
                    rect.Left + 0,
                    rect.Top + topLeftCornerSize.Height));

            // Top-left corner
            geometrySink.AddArc(
                new D2D.ArcSegment
            {
                Point = new DrawingPointF(
                    rect.Left + topLeftCornerSize.Width,
                    rect.Top + 0),
                Size           = topLeftCornerSize,
                RotationAngle  = 0,
                SweepDirection = D2D.SweepDirection.Clockwise,
                ArcSize        = D2D.ArcSize.Small
            });

            geometrySink.EndFigure(D2D.FigureEnd.Closed);
            geometrySink.Close();
            return(geometry);
        }
Exemplo n.º 39
0
        private static D2D.PathGeometry GetBorderFillGeometry(
            CompositionEngine compositionEngine, Border border, RectangleF rect)
        {
            var topLeftCornerSize = new Size2F(
                (float)border.CornerRadius.TopLeft,
                (float)border.CornerRadius.TopLeft);
            var topRightCornerSize = new Size2F(
                (float)border.CornerRadius.TopRight,
                (float)border.CornerRadius.TopRight);
            var bottomLeftCornerSize = new Size2F(
                (float)border.CornerRadius.BottomLeft,
                (float)border.CornerRadius.BottomLeft);
            var bottomRightCornerSize = new Size2F(
                (float)border.CornerRadius.BottomRight,
                (float)border.CornerRadius.BottomRight);

            var topCornersWidth = topLeftCornerSize.Width + topRightCornerSize.Width;

            if (topCornersWidth > rect.Width)
            {
                var scale = rect.Width / topCornersWidth;
                topLeftCornerSize.Width *= scale;
                topRightCornerSize.Width *= scale;
            }

            var bottomCornersWidth = bottomLeftCornerSize.Width + bottomRightCornerSize.Width;

            if (bottomCornersWidth > rect.Width)
            {
                var scale = rect.Width / bottomCornersWidth;
                bottomLeftCornerSize.Width *= scale;
                bottomRightCornerSize.Width *= scale;
            }

            var leftCornersHeight = topLeftCornerSize.Height + bottomLeftCornerSize.Height;

            if (leftCornersHeight > rect.Height)
            {
                var scale = rect.Height / leftCornersHeight;
                topLeftCornerSize.Height *= scale;
                bottomLeftCornerSize.Height *= scale;
            }

            var rightCornersHeight = topRightCornerSize.Height + bottomRightCornerSize.Height;

            if (rightCornersHeight > rect.Height)
            {
                var scale = rect.Height / rightCornersHeight;
                topRightCornerSize.Height *= scale;
                bottomRightCornerSize.Height *= scale;
            }

            var geometry = new D2D.PathGeometry(compositionEngine.D2DFactory);

            // Create the geometry of the irregular rounded rectangle.
            var geometrySink = geometry.Open();

            // Start to the right of the topleft corner.
            geometrySink.BeginFigure(
                new Vector2(
                    rect.Left + topLeftCornerSize.Width,
                    rect.Top + 0), 
                D2D.FigureBegin.Filled);

            //if (topCornersWidth < rect.Width)
            {
                // Top edge
                geometrySink.AddLine(
                    new Vector2(
                        rect.Left + rect.Width - topRightCornerSize.Width,
                        rect.Top + 0));
            }

            //if (topRightCornerSize.Width > 0)

            // Top-right corner
            geometrySink.AddArc(
                new D2D.ArcSegment
                {
                    Point = new Vector2(
                        rect.Left + rect.Width,
                        rect.Top + topRightCornerSize.Height),
                    Size = topRightCornerSize,
                    RotationAngle = 0,
                    SweepDirection = D2D.SweepDirection.Clockwise,
                    ArcSize = D2D.ArcSize.Small
                });

            // Right edge
            geometrySink.AddLine(
                new Vector2(
                    rect.Left + rect.Width,
                    rect.Top + rect.Height - bottomRightCornerSize.Height));

            // Bottom-right corner
            geometrySink.AddArc(
                new D2D.ArcSegment
                {
                    Point = new Vector2(
                        rect.Left + rect.Width - bottomRightCornerSize.Width,
                        rect.Top + rect.Height),
                    Size = bottomRightCornerSize,
                    RotationAngle = 0,
                    SweepDirection = D2D.SweepDirection.Clockwise,
                    ArcSize = D2D.ArcSize.Small
                });

            // Bottom edge
            geometrySink.AddLine(
                new Vector2(
                    rect.Left + bottomLeftCornerSize.Width,
                    rect.Top + rect.Height));

            // Bottom-left corner
            geometrySink.AddArc(
                new D2D.ArcSegment
                {
                    Point = new Vector2(
                        rect.Left + 0,
                        rect.Top + rect.Height - bottomLeftCornerSize.Height),
                    Size = bottomLeftCornerSize,
                    RotationAngle = 0,
                    SweepDirection = D2D.SweepDirection.Clockwise,
                    ArcSize = D2D.ArcSize.Small
                });

            // Left edge
            geometrySink.AddLine(
                new Vector2(
                    rect.Left + 0,
                    rect.Top + topLeftCornerSize.Height));

            // Top-left corner
            geometrySink.AddArc(
                new D2D.ArcSegment
                {
                    Point = new Vector2(
                        rect.Left + topLeftCornerSize.Width,
                        rect.Top + 0),
                    Size = topLeftCornerSize,
                    RotationAngle = 0,
                    SweepDirection = D2D.SweepDirection.Clockwise,
                    ArcSize = D2D.ArcSize.Small
                });

            geometrySink.EndFigure(D2D.FigureEnd.Closed);
            geometrySink.Close();

            return geometry;
        }