コード例 #1
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var slider = new NSSlider();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);

            slider.ControlSize = ViewHelper.GetNSControlSize(controlVariant);

            slider.MinValue = 0;
            slider.MaxValue = 1;

            if (controlType == FigmaControlType.SliderLinear)
            {
                slider.DoubleValue = 0.618;
            }

            FigmaGroup group = frame.children
                               .OfType <FigmaGroup>()
                               .FirstOrDefault(s => s.visible);

            if (group?.name == ComponentString.STATE_DISABLED)
            {
                slider.Enabled = false;
            }

            return(new View(slider));
        }
コード例 #2
0
        public override IView ConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            string title = "";
            var    frame = (FigmaFrame)currentNode;

            var nativeView = new FakeWindowView(title);

            nativeView.LiveButtonAlwaysVisible = LiveButtonAlwaysVisible;
            nativeView.Configure(currentNode);

            var view = new View(nativeView);

            var windowComponent = currentNode.GetDialogInstanceFromParentContainer();

            if (windowComponent != null)
            {
                var optionsNode = windowComponent.Options();
                if (optionsNode is IFigmaNodeContainer figmaNodeContainer)
                {
                    nativeView.CloseButtonHidden = (figmaNodeContainer.HasChildrenVisible("close") == false);
                    nativeView.MinButtonHidden   = (figmaNodeContainer.HasChildrenVisible("min") == false);
                    nativeView.MaxButtonHidden   = (figmaNodeContainer.HasChildrenVisible("max") == false);

                    var titleText = (FigmaText)optionsNode.GetChildren().FirstOrDefault(s => s.name == "title" && s.visible);

                    if (titleText != null)
                    {
                        nativeView.Title = titleText.characters;
                    }
                }
            }

            nativeView.LiveButton.Activated += async(s, e) => {
                var window = new Window(view.Allocation);

                LivePreviewLoading?.Invoke(this, EventArgs.Empty);

                await newWindowProvider.LoadAsync(rendererService.NodeProvider.File);

                var secondaryRender = new ControlViewRenderingService(newWindowProvider);

                var options = new ViewRenderServiceOptions()
                {
                    GenerateMainView = false
                };
                secondaryRender.RenderInWindow(window, currentNode, options);

                var mainNodes = currentNode.GetChildren()
                                .ToArray();

                ViewNode[] processedNodes = secondaryRender.GetProcessedNodes(mainNodes);

                var layoutManager = new StoryboardLayoutManager()
                {
                    UsesConstraints = true
                };
                layoutManager.Run(processedNodes, window.Content, secondaryRender);

                var nativeWindow = (NSWindow)window.NativeObject;
                nativeWindow.Appearance     = nativeView.EffectiveAppearance;
                nativeWindow.ContentMinSize = nativeWindow.ContentView.Frame.Size;

                nativeWindow.Center();
                nativeWindow.MakeKeyAndOrderFront(null);

                LivePreviewLoaded?.Invoke(this, EventArgs.Empty);
            };

            return(view);
        }
コード例 #3
0
 protected abstract IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService);
コード例 #4
0
        public override void Configure(string propertyName, ViewNode currentViewNode, ViewNode parentViewNode, NodeConverter converter, ViewRenderService rendererService)
        {
            var currentNode = currentViewNode.Node;
            var parentNode  = parentViewNode?.Node;

            if (propertyName == PropertyNames.AddChild)
            {
                if (parentViewNode?.View != null)
                {
                    if (parentNode.IsStackView() && parentViewNode.View.NativeObject is AppKit.NSStackView stackView)
                    {
                        stackView.AddArrangedSubview(currentViewNode.View.NativeObject as NSView);
                    }
                    else
                    {
                        parentViewNode.View.AddChild(currentViewNode.View);
                    }
                }
                return;
            }
            if (propertyName == PropertyNames.Constraints)
            {
                if (!rendererService.HasConstraints(currentNode, converter))
                {
                    return;
                }

                if (currentNode is IConstraints constrainedNode && currentViewNode?.View?.NativeObject is AppKit.NSView nativeView && parentViewNode?.View?.NativeObject is AppKit.NSView parentNativeView)
                {
                    var constraints         = constrainedNode.constraints;
                    var absoluteBoundingBox = ((IAbsoluteBoundingBox)currentNode)
                                              .absoluteBoundingBox;
                    var absoluteBoundBoxParent = ((IAbsoluteBoundingBox)parentNode)
                                                 .absoluteBoundingBox;

                    if (constraints.horizontal.Contains("RIGHT") || constraints.horizontal == "SCALE")
                    {
                        var endPosition1 = absoluteBoundingBox.X + absoluteBoundingBox.Width;
                        var endPosition2 = absoluteBoundBoxParent.X + absoluteBoundBoxParent.Width;
                        var value        = Math.Max(endPosition1, endPosition2) - Math.Min(endPosition1, endPosition2);

                        var rightConstraint = nativeView.RightAnchor.ConstraintEqualToAnchor(parentNativeView.RightAnchor, -value);
                        rightConstraint.Active = true;
                    }

                    if (constraints.horizontal.Contains("LEFT"))
                    {
                        var value2 = absoluteBoundingBox.X - absoluteBoundBoxParent.X;
                        nativeView.LeftAnchor.ConstraintEqualToAnchor(parentNativeView.LeftAnchor, value2)
                        .Active = true;
                    }

                    if (constraints.vertical.Contains("BOTTOM") || constraints.horizontal == "SCALE")
                    {
                        var endPosition1 = absoluteBoundingBox.Y + absoluteBoundingBox.Height;
                        var endPosition2 = absoluteBoundBoxParent.Y + absoluteBoundBoxParent.Height;
                        var value2       = Math.Max(endPosition1, endPosition2) - Math.Min(endPosition1, endPosition2);

                        var bottomConstraint = nativeView.BottomAnchor.ConstraintEqualToAnchor(parentNativeView.BottomAnchor, -value2);
                        bottomConstraint.Active = true;
                    }

                    if (constraints.vertical.Contains("TOP"))
                    {
                        var value = absoluteBoundingBox.Y - absoluteBoundBoxParent.Y;
                        nativeView.TopAnchor.ConstraintEqualToAnchor(parentNativeView.TopAnchor, value)
                        .Active = true;
                    }

                    if (constraints.horizontal == "CENTER" || constraints.horizontal == "SCALE")
                    {
                        var delta = absoluteBoundingBox.X - absoluteBoundBoxParent.X - absoluteBoundBoxParent.Center.X;
                        nativeView.LeftAnchor.ConstraintEqualToAnchor(parentNativeView.CenterXAnchor, delta)
                        .Active = true;
                    }

                    if (constraints.vertical == "CENTER" || constraints.vertical == "SCALE")
                    {
                        var delta = absoluteBoundingBox.Y - absoluteBoundBoxParent.Y - absoluteBoundBoxParent.Center.Y;
                        //var delta = absoluteBoundBoxParent.Center.Substract(absoluteBoundingBox.Origin).Y;
                        var test = nativeView.TopAnchor.ConstraintEqualToAnchor(parentNativeView.CenterYAnchor, delta);
                        test.Active = true;
                    }
                }
                return;
            }

            if (propertyName == PropertyNames.Frame)
            {
                if (currentNode is IAbsoluteBoundingBox absoluteBounding)
                {
                    if (!rendererService.HasConstraints(currentNode, converter))
                    {
                        return;
                    }

                    var nativeView = currentViewNode?.View?.NativeObject as AppKit.NSView;
                    if (rendererService.HasWidthConstraint(currentNode, converter))
                    {
                        var widthConstraint = nativeView.WidthAnchor.ConstraintEqualToConstant(Math.Max(absoluteBounding.absoluteBoundingBox.Width, 1));
                        if (rendererService.IsFlexibleHorizontal(currentViewNode, converter))
                        {
                            widthConstraint.Priority = (float)NSLayoutPriority.DefaultLow;
                        }
                        widthConstraint.Active = true;
                    }

                    if (rendererService.HasHeightConstraint(currentNode, converter))
                    {
                        var heightConstraint = nativeView.HeightAnchor.ConstraintEqualToConstant(Math.Max(absoluteBounding.absoluteBoundingBox.Height, 1));
                        if (rendererService.IsFlexibleVertical(currentViewNode, converter))
                        {
                            heightConstraint.Priority = (float)NSLayoutPriority.DefaultLow;
                        }

                        heightConstraint.Active = true;
                    }
                }
                return;
            }
        }
コード例 #5
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var segmentedControl = new NSSegmentedControl();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);

            segmentedControl.ControlSize = ViewHelper.GetNSControlSize(controlVariant);
            segmentedControl.Font        = ViewHelper.GetNSFont(controlVariant);

            FigmaNode items = frame.FirstChild(s => s.name == ComponentString.ITEMS);

            if (items != null)
            {
                segmentedControl.SegmentCount = items.GetChildren(t => t.visible).Count();

                if (controlType == FigmaControlType.SegmentedControlRoundRect)
                {
                    segmentedControl.SegmentStyle = NSSegmentStyle.RoundRect;
                }
                else
                {
                    segmentedControl.SegmentStyle = NSSegmentStyle.Rounded;
                }

                int i = 0;
                foreach (FigmaNode button in items.GetChildren(t => t.visible))
                {
                    FigmaNode state = button.FirstChild(s => s.visible &&
                                                        s.name.In(ComponentString.STATE_REGULAR, ComponentString.STATE_SELECTED));

                    if (state == null)
                    {
                        continue;
                    }

                    var text = (FigmaText)state.FirstChild(s => s.name == ComponentString.TITLE);
                    segmentedControl.SetLabel(rendererService.GetTranslatedText(text), i);
                    segmentedControl.SetSelected(selected: state.name == ComponentString.STATE_SELECTED, i);

                    i++;
                }

                bool hasSelection = (segmentedControl.SelectedSegment > -1);

                // Use tab-like behaviour if there is a selected item. Otherwise use the button-like behaviour
                if (hasSelection)
                {
                    segmentedControl.TrackingMode        = NSSegmentSwitchTracking.SelectOne;
                    segmentedControl.SegmentDistribution = NSSegmentDistribution.Fill;
                }
                else
                {
                    segmentedControl.TrackingMode        = NSSegmentSwitchTracking.Momentary;
                    segmentedControl.SegmentDistribution = NSSegmentDistribution.FillEqually;
                }
            }

            return(new View(segmentedControl));
        }
コード例 #6
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            var checkBox = new NSButton();

            checkBox.SetButtonType(NSButtonType.Switch);

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            if (text != null)
            {
                checkBox.Title = text.characters;
            }

            frame.TryGetNativeControlVariant(out var controlVariant);

            checkBox.ControlSize = ViewHelper.GetNSControlSize(controlVariant);
            checkBox.Font        = ViewHelper.GetNSFont(controlVariant, text);

            FigmaGroup group = frame.children
                               .OfType <FigmaGroup>()
                               .FirstOrDefault(s => s.name.In(ComponentString.STATE_ON,
                                                              ComponentString.STATE_OFF,
                                                              ComponentString.STATE_MIXED) && s.visible);

            if (group != null)
            {
                if (group.name == ComponentString.STATE_ON)
                {
                    checkBox.State = NSCellStateValue.On;
                }

                if (group.name == ComponentString.STATE_OFF)
                {
                    checkBox.State = NSCellStateValue.Off;
                }

                if (group.name == ComponentString.STATE_MIXED)
                {
                    checkBox.AllowsMixedState = true;
                    checkBox.State            = NSCellStateValue.Mixed;
                }
            }

            return(new View(checkBox));
        }
コード例 #7
0
 public AnswerGroupController(ApplicationDbContext context, DataService dataService, ViewRenderService viewRenderService, Services.Configuration configurationService, IWebHostEnvironment hostingEnvironment)
 {
     _context            = context;
     _dataService        = dataService;
     _viewRenderService  = viewRenderService;
     _configuration      = configurationService;
     _hostingEnvironment = hostingEnvironment;
 }
コード例 #8
0
ファイル: UrsController.cs プロジェクト: P79N6A/projects
 public UrsController(ILogger <UrsController> logger, ViewRenderService viewRender) : base(logger)
 {
     this._viewRender = viewRender;
 }
コード例 #9
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var colorWell = new NSColorWell();
            var frame     = (FigmaFrame)currentNode;

            FigmaVector rectangle = frame.children
                                    .OfType <FigmaVector>()
                                    .FirstOrDefault(s => s.name == ComponentString.VALUE);

            foreach (var styleMap in rectangle?.styles)
            {
                if (rendererService.FileProvider.TryGetStyle(styleMap.Value, out FigmaStyle style))
                {
                    if (styleMap.Key == "fill")
                    {
                        colorWell.Color = ColorService.GetNSColor(style.name);
                    }
                }
            }

            return(new View(colorWell));
        }
コード例 #10
0
ファイル: WindowConverter.cs プロジェクト: kblok/FigmaSharp
 protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
 {
     return(null);
 }
コード例 #11
0
ファイル: StepperConverter.cs プロジェクト: kblok/FigmaSharp
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var stepper = new NSStepper();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlVariant(out var controlVariant);

            stepper.ControlSize = ViewHelper.GetNSControlSize(controlVariant);

            return(new View(stepper));
        }
コード例 #12
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlVariant(out var controlVariant);
            frame.TryGetNativeControlType(out var controlType);

            var popUp = new NSPopUpButton();

            if (controlType == FigmaControlType.PopUpButtonPullDown)
            {
                popUp.PullsDown = true;
            }

            popUp.ControlSize = ViewHelper.GetNSControlSize(controlVariant);
            popUp.Font        = ViewHelper.GetNSFont(controlVariant);

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            if (text != null)
            {
                popUp.AddItem(text.characters);
            }

            return(new View(popUp));
        }
コード例 #13
0
        public override void Configure(string propertyName, IView view, FigmaNode currentNode, IView parent, FigmaNode parentNode, ViewRenderService rendererService)
        {
            if (propertyName == PropertyNames.AddChild)
            {
                parent?.AddChild(view);
                return;
            }
            if (propertyName == PropertyNames.Constraints)
            {
                if (currentNode is IConstraints constrainedNode && view.NativeObject is BindableObject && parent.NativeObject is BindableObject parentNativeView)
                {
                    float x = 0, y = 0;
                    var   constraints         = constrainedNode.constraints;
                    var   absoluteBoundingBox = ((IAbsoluteBoundingBox)currentNode)
                                                .absoluteBoundingBox;
                    var absoluteBoundBoxParent = ((IAbsoluteBoundingBox)parentNode)
                                                 .absoluteBoundingBox;

                    //if (constraints.horizontal.Contains("RIGHT") || constraints.horizontal == "SCALE")
                    //{
                    //    var endPosition1 = absoluteBoundingBox.X + absoluteBoundingBox.Width;
                    //    var endPosition2 = absoluteBoundBoxParent.X + absoluteBoundBoxParent.Width;
                    //    var value = Math.Max(endPosition1, endPosition2) - Math.Min(endPosition1, endPosition2);

                    //    var rightConstraint = nativeView.RightAnchor.ConstraintEqualToAnchor(parentNativeView.RightAnchor, -value);
                    //    rightConstraint.Active = true;
                    //}

                    //if (constraints.horizontal.Contains("LEFT"))
                    //{
                    x = Math.Max((absoluteBoundingBox.X - absoluteBoundBoxParent.X), 0);
                    //}

                    //if (constraints.vertical.Contains("BOTTOM") || constraints.horizontal == "SCALE")
                    //{
                    //    var endPosition1 = absoluteBoundingBox.Y + absoluteBoundingBox.Height;
                    //    var endPosition2 = absoluteBoundBoxParent.Y + absoluteBoundBoxParent.Height;
                    //    var value2 = Math.Max(endPosition1, endPosition2) - Math.Min(endPosition1, endPosition2);

                    //    var bottomConstraint = nativeView.BottomAnchor.ConstraintEqualToAnchor(parentNativeView.BottomAnchor, -value2);
                    //    bottomConstraint.Active = true;
                    //}

                    //if (constraints.vertical.Contains("TOP"))
                    //{
                    y = Math.Max((absoluteBoundingBox.Y - absoluteBoundBoxParent.Y), 0);
                    //}

                    //if (constraints.horizontal == "CENTER" || constraints.horizontal == "SCALE")
                    //{
                    //    var delta = absoluteBoundingBox.X - absoluteBoundBoxParent.X - absoluteBoundBoxParent.Center.X;
                    //    nativeView.LeftAnchor.ConstraintEqualToAnchor(parentNativeView.CenterXAnchor, delta)
                    //        .Active = true;
                    //}

                    //if (constraints.vertical == "CENTER" || constraints.vertical == "SCALE")
                    //{
                    //    var delta = absoluteBoundingBox.Y - absoluteBoundBoxParent.Y - absoluteBoundBoxParent.Center.Y;
                    //    //var delta = absoluteBoundBoxParent.Center.Substract(absoluteBoundingBox.Origin).Y;
                    //    var test = nativeView.TopAnchor.ConstraintEqualToAnchor(parentNativeView.CenterYAnchor, delta);
                    //    test.Active = true;
                    //}
                    AbsoluteLayout.SetLayoutBounds(view.NativeObject as BindableObject, new Xamarin.Forms.Rectangle(x, y, absoluteBoundingBox.Width, absoluteBoundingBox.Height));
                }
                return;
            }
            if (propertyName == PropertyNames.Frame)
            {
                if (currentNode is IAbsoluteBoundingBox container)
                {
                }
                return;
            }
        }
コード例 #14
0
 protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
 {
     throw new NotImplementedException();
 }
コード例 #15
0
        public override IView ConvertToView(FigmaNode currentNode, ViewNode parent, ViewRenderService rendererService)
        {
            var spinner = new ProgressBar();

            return(spinner);
        }
コード例 #16
0
 public PageChangesetRenderer(IHtmlHelper html, ViewRenderService viewRenderer, IUrlHelper url)
 {
     _html         = html;
     _viewRenderer = viewRenderer;
     _url          = url;
 }
コード例 #17
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var segmentedControl = new NSSegmentedControl();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);

            segmentedControl.ControlSize = ViewHelper.GetNSControlSize(controlVariant);
            segmentedControl.Font        = ViewHelper.GetNSFont(controlVariant);

            FigmaNode items = frame.FirstChild(s => s.name == ComponentString.ITEMS);

            if (items != null)
            {
                segmentedControl.SegmentCount        = items.GetChildren(t => t.visible).Count();
                segmentedControl.SegmentDistribution = NSSegmentDistribution.FillEqually;
                segmentedControl.SegmentStyle        = NSSegmentStyle.Rounded;
                segmentedControl.SelectedSegment     = 0;

                int i = 0;
                foreach (FigmaNode button in items.GetChildren(t => t.visible))
                {
                    FigmaNode state = button.FirstChild(s => s.visible &&
                                                        s.name.In(ComponentString.STATE_REGULAR, ComponentString.STATE_SELECTED));

                    if (state == null)
                    {
                        continue;
                    }

                    var text = (FigmaText)state.FirstChild(s => s.name == ComponentString.TITLE);
                    segmentedControl.SetLabel(rendererService.GetTranslatedText(text), i);

                    i++;
                }
            }

            segmentedControl.TrackingMode = NSSegmentSwitchTracking.SelectOne;

            return(new View(segmentedControl));
        }
コード例 #18
0
 public FigmaDesignerSession(INodeProvider figmaFileProvider, ViewRenderService figmaViewRendererService, StoryboardLayoutManager figmaViewRendererDistributionService)
 {
     fileProvider        = figmaFileProvider;
     rendererService     = figmaViewRendererService;
     distributionService = figmaViewRendererDistributionService;
 }
コード例 #19
0
ファイル: LabelConverter.cs プロジェクト: kblok/FigmaSharp
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var label = new NSTextField();

            label.Editable                = false;
            label.DrawsBackground         = false;
            label.Bordered                = false;
            label.PreferredMaxLayoutWidth = 1;

            var frame = (FigmaFrame)currentNode;

            FigmaText text = frame.children
                             .OfType <FigmaText>()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE);

            currentNode.TryGetNativeControlType(out FigmaControlType controlType);
            currentNode.TryGetNativeControlVariant(out NativeControlVariant controlVariant);

            if (text != null)
            {
                label.StringValue = rendererService.GetTranslatedText(text);
                label.Alignment   = ViewHelper.GetNSTextAlignment(text);
                label.Font        = ViewHelper.GetNSFont(controlVariant, text);
            }

            if (controlType == FigmaControlType.LabelHeader)
            {
                label.Font = NSFont.SystemFontOfSize(headerFontSize, ViewHelper.GetNSFontWeight(text));
            }

            if (text?.styles != null)
            {
                foreach (var styleMap in text.styles)
                {
                    if (rendererService.NodeProvider.TryGetStyle(styleMap.Value, out FigmaStyle style))
                    {
                        if (styleMap.Key == "fill")
                        {
                            label.TextColor = ColorService.GetNSColor(style.name);
                        }
                    }
                }
            }

            return(new View(label));
        }
コード例 #20
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            var disclosureView = new NSView();

            /* TODO
             * var subView = new NSView(disclosureView.Bounds);
             * subView.WantsLayer = true;
             * subView.Layer.BackgroundColor = NSColor.Red.CGColor;
             *
             *
             * var disclosureTriangle = new NSButton();
             * disclosureTriangle.SetFrameSize(new CoreGraphics.CGSize(130, 13));
             * disclosureTriangle.SetButtonType(NSButtonType.PushOnPushOff);
             * disclosureTriangle.BezelStyle = NSBezelStyle.Disclosure;
             *
             * disclosureTriangle.Activated += delegate {
             *
             * //	disclosureTriangle.State = NSCellStateValue.Off;
             *
             * };
             *
             *
             * disclosureView.AddSubview(disclosureTriangle);
             * disclosureView.AddSubview(subView);
             *
             *
             * disclosureTriangle.LeftAnchor.ConstraintEqualToAnchor(disclosureView.LeftAnchor, 8)
             *                              .Active = true;
             *
             * disclosureTriangle.TopAnchor.ConstraintEqualToAnchor(disclosureView.TopAnchor, 8)
             *                              .Active = true;
             */
            return(new View(disclosureView));
        }
コード例 #21
0
        public async Task <IActionResult> RenderCustomView([FromServices] IHostingEnvironment env, [FromServices] ViewRenderService viewRender)
        {
            ViewData["Type"] = 2;
            string result = await viewRender.RenderAsync("~/CustomViews/CustomTestView.cshtml", new TestViewModel { Title = "Test view" }, ViewData, true);

            return(Content(result));
        }
コード例 #22
0
 public ResultsController(ViewRenderService viewRenderService)
 {
     _viewRenderService = viewRenderService;
 }
コード例 #23
0
ファイル: TextViewConverter.cs プロジェクト: kblok/FigmaSharp
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);

            var scrollView = new NSScrollView();

            var textView = new NSTextView(
                new CoreGraphics.CGRect(0, 0, scrollView.ContentSize.Width, scrollView.ContentSize.Height));

            textView.Font               = NSFont.SystemFontOfSize(NSFont.SystemFontSize);
            textView.AutoresizingMask   = NSViewResizingMask.WidthSizable;
            textView.TextContainer.Size = new CoreGraphics.CGSize(scrollView.ContentSize.Width, float.MaxValue);

            var       texts = frame.children.OfType <FigmaText>();
            FigmaText text  = texts.FirstOrDefault(s => s.name == "lbl" && s.visible);

            if (text != null)
            {
                textView.Value = rendererService.GetTranslatedText(text.characters);

                // TODO: text styling
                // textView.TextStorage.Append(new Foundation.NSAttributedString(""), null);
            }

            scrollView.BorderType            = NSBorderType.LineBorder;
            scrollView.HasHorizontalScroller = false;
            scrollView.HasVerticalScroller   = true;
            scrollView.DocumentView          = textView;

            frame.TryGetNativeControlVariant(out var controlVariant);

            if (controlVariant == NativeControlVariant.Small)
            {
                textView.Font = NSFont.SystemFontOfSize(NSFont.SmallSystemFontSize);
            }

            return(new View(scrollView));
        }
コード例 #24
0
ファイル: BoxConverter.cs プロジェクト: microsoft/FigmaSharp
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;
            var box   = new NSBox();

            currentNode.TryGetNativeControlType(out FigmaControlType controlType);

            if (controlType == FigmaControlType.Separator)
            {
                box.BoxType = NSBoxType.NSBoxSeparator;
            }

            if (controlType == FigmaControlType.BoxCustom)
            {
                box.BoxType     = NSBoxType.NSBoxCustom;
                box.BorderWidth = 0;

                RectangleVector rectangle = frame.children
                                            .OfType <RectangleVector>()
                                            .FirstOrDefault();

                if (rectangle != null)
                {
                    if (rectangle.styles != null)
                    {
                        foreach (var styleMap in rectangle.styles)
                        {
                            if (rendererService.NodeProvider.TryGetStyle(styleMap.Value, out FigmaStyle style))
                            {
                                if (styleMap.Key == "fill")
                                {
                                    box.FillColor = ColorService.GetNSColor(style.name);
                                }

                                if (styleMap.Key == "stroke")
                                {
                                    box.BorderColor = ColorService.GetNSColor(style.name);
                                    box.BorderWidth = rectangle.strokeWeight;
                                }
                            }
                        }
                    }

                    box.CornerRadius = rectangle.cornerRadius;
                }
            }

            if (controlType == FigmaControlType.Box)
            {
                FigmaText text = frame.children
                                 .OfType <FigmaText>()
                                 .FirstOrDefault(s => (s.name == ComponentString.TITLE && s.visible));

                if (text != null)
                {
                    box.Title = rendererService.GetTranslatedText(text);
                }
                else
                {
                    box.Title = string.Empty;
                }
            }

            return(new View(box));
        }
コード例 #25
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var textField = new NSTextField();

            var frame = (FigmaFrame)currentNode;

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);


            if (controlType == FigmaControlType.SearchField)
            {
                textField = new NSSearchField();
            }


            FigmaNode optionsGroup = frame.Options();

            FigmaNode passwordNode = optionsGroup?.GetChildren()
                                     .OfType <FigmaNode>()
                                     .FirstOrDefault(s => s.name == ComponentString.PASSWORD && s.visible);

            if (passwordNode != null)
            {
                textField             = new NSSecureTextField();
                textField.StringValue = "Password";
            }


            FigmaText placeholderText = optionsGroup?.GetChildren()
                                        .OfType <FigmaText>()
                                        .FirstOrDefault(s => s.name == ComponentString.PLACEHOLDER && s.visible);

            if (placeholderText != null && !placeholderText.characters.Equals(ComponentString.PLACEHOLDER, StringComparison.InvariantCultureIgnoreCase))
            {
                textField.PlaceholderString = rendererService.GetTranslatedText(placeholderText);
            }

            FigmaText text = frame.children
                             .OfType <FigmaText> ()
                             .FirstOrDefault(s => s.name == ComponentString.TITLE && s.visible);

            if (text != null)
            {
                textField.Alignment   = ViewHelper.GetNSTextAlignment(text);
                textField.StringValue = rendererService.GetTranslatedText(text);
            }

            textField.ControlSize = ViewHelper.GetNSControlSize(controlVariant);
            textField.Font        = ViewHelper.GetNSFont(controlVariant);

            return(new View(textField));
        }
コード例 #26
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            IView view = base.OnConvertToView(currentNode, parentNode, rendererService);

            (view.NativeObject as NSProgressIndicator).Style = NSProgressIndicatorStyle.Bar;

            return(view);
        }
コード例 #27
0
        public override IView ConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            var nativeView = new FakeSheetView();
            var view       = new View(nativeView);

            nativeView.Configure(frame);

            /* TODO: Create a base FakeView class with common elements
             * nativeView.LiveButton.Activated += (s, e) => {
             *      if (nativeView.Window == null)
             *              return;
             *
             *      var window = new Window(view.Allocation);
             *
             *      window.KeyDown += (send, eve) => {
             *              NSApplication.SharedApplication.EndSheet((NSWindow)window.NativeObject);
             *              window.Close();
             *      };
             *
             *      newWindowProvider.Load(rendererService.FileProvider.File);
             *      var secondaryRender = new NativeViewRenderingService(newWindowProvider);
             *      ////we want to include some special converters to handle windows like normal view containers
             *      //rendererService.CustomConverters.Add(new EmbededSheetDialogConverter());
             *      //rendererService.CustomConverters.Add(new EmbededWindowConverter());
             *      secondaryRender.RenderInWindow(window, currentNode);
             *      NSApplication.SharedApplication.BeginSheet((NSWindow)window.NativeObject, nativeView.Window);
             * };
             */

            return(view);
        }
コード例 #28
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var frame = (FigmaFrame)currentNode;

            var progressIndicator = new NSProgressIndicator();

            progressIndicator.Configure(frame);

            frame.TryGetNativeControlType(out var controlType);
            frame.TryGetNativeControlVariant(out var controlVariant);

            progressIndicator.ControlSize = ViewHelper.GetNSControlSize(controlVariant);

            FigmaGroup group = frame.children
                               .OfType <FigmaGroup>()
                               .FirstOrDefault(s => (s.name == ComponentString.STYLE_DETERMINATE || s.name == ComponentString.STYLE_INDETERMINATE) && s.visible);

            if (group?.name == ComponentString.STYLE_DETERMINATE)
            {
                progressIndicator.Indeterminate = false;
                progressIndicator.MinValue      = 0;
                progressIndicator.MaxValue      = 1;
                progressIndicator.DoubleValue   = 0.618;
            }

            if (group.name == ComponentString.STYLE_INDETERMINATE)
            {
                progressIndicator.Indeterminate = true;
            }

            return(new View(progressIndicator));
        }
コード例 #29
0
        public override IView ConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            var converted = OnConvertToView(currentNode, parentNode, rendererService);

            if (converted != null)
            {
                var nativeView = converted.NativeObject as AppKit.NSView;

                if (!currentNode.visible)
                {
                    nativeView.Hidden = true;
                }

                if (currentNode.IsA11Group())
                {
                    nativeView.AccessibilityRole = AppKit.NSAccessibilityRoles.GroupRole;
                }

                //label
                if (currentNode.TrySearchA11Label(out var label))
                {
                    try {
                        nativeView.AccessibilityTitle = label;
                    } catch (Exception) {
                        nativeView.AccessibilityLabel = label;
                    }
                }
                //help
                if (currentNode.TrySearchA11Help(out var help))
                {
                    nativeView.AccessibilityHelp = help;
                }
            }

            return(converted);
        }
コード例 #30
0
        protected override IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService)
        {
            IView view = base.OnConvertToView(currentNode, parentNode, rendererService);

            (view.NativeObject as NSSlider).SliderType = NSSliderType.Circular;

            return(view);
        }