示例#1
0
 protected abstract IView OnConvertToView(FigmaNode currentNode, ViewNode parentNode, ViewRenderService rendererService);
示例#2
0
 public override Type GetControlType(FigmaNode currentNode) => typeof(Xamarin.Forms.View);
示例#3
0
 public override bool ScanChildren(FigmaNode currentNode) => false;
示例#4
0
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.name == LoadingSpinnerName);
 }
示例#5
0
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.GetType() == typeof(FigmaRegularPolygon));
 }
 internal static bool HasNodeImageName(this FigmaNode node)
 => node.GetNodeTypeName() == imageNodeName;
示例#7
0
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.GetType() == typeof(FigmaLine) || (currentNode.type == "VECTOR" && currentNode.name == "sep"));
 }
示例#8
0
        public static FigmaInstance GetBaseComponentNode(this NodeProvider fileProvider, FigmaNode node)
        {
            var figmaInstance = node.GetDialogInstanceFromParentContainer();

            if (figmaInstance != null)
            {
                foreach (var item in fileProvider.GetMainLayers())
                {
                    var instance = item.GetDialogInstanceFromParentContainer();
                    if (instance != null && instance.id == figmaInstance.id)
                    {
                        return(instance);
                    }
                }
            }
            return(null);
        }
        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.FileProvider.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);
        }
 public override bool CanConvert(FigmaNode currentNode) => currentNode.name == "WhySignInLink";
示例#11
0
 public override System.Type GetControlType(FigmaNode currentNode) => typeof(AppKit.NSView);
示例#12
0
 public override Type GetControlType(FigmaNode currentNode) => typeof(NSComboBox);
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.GetType() == typeof(FigmaVectorEntity));
 }
示例#14
0
        public IView GetViewWrapper(FigmaNode e)
        {
            var processed = ProcessedNodes.FirstOrDefault(s => s.Node == e);

            return(processed?.View);
        }
示例#15
0
 public override bool CanConvert(FigmaNode currentNode) => currentNode.name == SearchFilterId;
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.IsDialogParentContainer(FigmaControlType.WindowSheet));
 }
 public override bool CanConvert(FigmaNode currentNode) =>
 currentNode.name.EndsWith("NavigationMenuButton", System.StringComparison.Ordinal);
 public bool IsMainNode(FigmaNode figmaNode) => MainNode != null && figmaNode == MainNode?.Node;
示例#19
0
 internal static bool HasThemedTitle(this FigmaNode node) =>
 node.TryGetAttributeValue(themeNodeName, out _);
示例#20
0
 public override string ConvertToCode(FigmaNode currentNode)
 {
     return(string.Empty);
 }
示例#21
0
 public override bool ScanChildren(FigmaNode currentNode)
 {
     return(false);
 }
示例#22
0
 public override Type GetControlType(FigmaNode currentNode) => typeof(CanvasImage);
示例#23
0
 public override string ConvertToCode(FigmaNode currentNode, FigmaCodeRendererService rendererService)
 {
     return(string.Empty);
 }
示例#24
0
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.TryGetNativeControlType(out var controlType) &&
            controlType == FigmaControlType.CheckBox);
 }
 public override bool CanConvert(FigmaNode currentNode)
 {
     return(currentNode.TryGetNativeControlType(out var controlType) &&
            controlType == FigmaControlType.DisclosureView);
 }
示例#26
0
 internal virtual bool HasHeightConstraint(FigmaNode currentNode, NodeConverter converter)
 {
     return(converter.HasHeightConstraint());
 }
 public override Type GetControlType(FigmaNode currentNode) => typeof(NSView);
示例#28
0
        public override IView ConvertTo(FigmaNode currentNode, ProcessedNode parent, FigmaRendererService rendererService)
        {
            var figmaInstance = (FigmaInstance)currentNode;

            var button = new Button();
            var view   = (NSButton)button.NativeObject;

            view.Title      = "";
            view.BezelStyle = NSBezelStyle.Rounded;

            button.Size = new Size(figmaInstance.absoluteBoundingBox.Width, 30);

            var controlType = figmaInstance.ToControlType();

            switch (controlType)
            {
            case NativeControlType.ButtonLarge:
            case NativeControlType.ButtonLargeDark:
                view.ControlSize = NSControlSize.Regular;
                break;

            case NativeControlType.ButtonStandard:
            case NativeControlType.ButtonStandardDark:

                view.ControlSize = NSControlSize.Regular;
                break;

            case NativeControlType.ButtonSmall:
            case NativeControlType.ButtonSmallDark:
                view.ControlSize = NSControlSize.Small;
                break;
            }

            //first figma
            var group = figmaInstance.children
                        .OfType <FigmaGroup>()
                        .FirstOrDefault(s => s.visible);

            if (group != null)
            {
                var label = group.children
                            .OfType <FigmaText>()
                            .FirstOrDefault();

                if (label != null)
                {
                    button.Text = label.characters;
                    view.Font   = label.style.ToNSFont();
                }

                if (group.name == "Disabled")
                {
                    button.Enabled = false;
                }
            }
            else
            {
                var label = figmaInstance.children
                            .OfType <FigmaText>()
                            .FirstOrDefault();

                if (label != null)
                {
                    button.Text = label.characters;
                    view.Font   = label.style.ToNSFont();
                }
            }

            if (controlType.ToString().EndsWith("Dark", StringComparison.Ordinal))
            {
                view.Appearance = NSAppearance.GetAppearance(NSAppearance.NameDarkAqua);
            }
            return(button);
        }
示例#29
0
 public override bool CanConvert(FigmaNode currentNode) => false;
示例#30
0
        public override IViewWrapper ConvertTo(FigmaNode currentNode, ProcessedNode parent)
        {
            var view = new UIButton();

            view.Configure(currentNode);

            //if (currentNode is IFigmaDocumentContainer documentContainer)
            //{
            //    view.BackgroundColor = documentContainer.backgroundColor.ToUIColor();
            //    var figmaText = documentContainer.children.OfType<FigmaText>().FirstOrDefault();
            //    if (figmaText != null)
            //    {
            //        view.Alpha = figmaText.opacity;
            //        view.Font = figmaText.style.ToUIFont();
            //        view.SetTitle(figmaText.characters, UIControlState.Normal);
            //    }
            //    return new ViewWrapper(view);
            //}

            var keyValues = GetKeyValues(currentNode);

            foreach (var key in keyValues)
            {
                if (key.Key == "type")
                {
                    continue;
                }

                if (key.Key == "enabled")
                {
                    view.Enabled = key.Value == "true";
                }
                else if (key.Key == "size")
                {
                    //   view. = ToEnum<NSControlSize>(key.Value);
                }
                else if (key.Key == "style")
                {
                    //view.sth = ToEnum<NSBezelStyle>(key.Value);
                }
                else if (key.Key == "buttontype")
                {
                    //view.ButtonType = UIButtonType. (ToEnum<NSButtonType>(key.Value));
                }
            }
            if (currentNode is IFigmaDocumentContainer instance)
            {
                var figmaText = instance.children.OfType <FigmaText>().FirstOrDefault(s => s.name == "title");
                if (figmaText != null)
                {
                    view.Alpha = figmaText.opacity;
                    view.Font  = figmaText.style.ToUIFont();
                    view.SetTitle(figmaText.characters, UIControlState.Normal);
                }

                var image = instance.children.OfType <FigmaVectorEntity>().FirstOrDefault(s => s.name == "image");
                if (image != null)
                {
                    var paint = image.fills.OfType <FigmaPaint>().FirstOrDefault();
                    if (paint != null)
                    {
                        //var query = new FigmaImageQuery ()
                        //FigmaApiHelper.GetFigmaImage (new FigmaImageQuery ())
                    }
                }
            }

            return(new ViewWrapper(view));
        }