protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService) { var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlVariant(out var controlVariant); frame.TryGetNativeControlType(out var controlType); var popUp = new NSPopUpButton(); if (controlType == NativeControlType.PopUpButtonPullDown) { popUp.PullsDown = true; } popUp.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant); popUp.Font = CocoaHelpers.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)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService) { var textField = new NSTextField(); var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlType(out var controlType); frame.TryGetNativeControlVariant(out var controlVariant); if (controlType == NativeControlType.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 = placeholderText.characters; } FigmaText text = frame.children .OfType <FigmaText> () .FirstOrDefault(s => s.name == ComponentString.TITLE && s.visible); if (text != null) { textField.Alignment = CocoaHelpers.GetNSTextAlignment(text); textField.StringValue = text.characters; } textField.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant); textField.Font = CocoaHelpers.GetNSFont(controlVariant); return(new View(textField)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService) { var button = new NSButton(); var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlType(out var controlType); frame.TryGetNativeControlVariant(out var controlVariant); switch (controlType) { case NativeControlType.Button: button.BezelStyle = NSBezelStyle.Rounded; break; case NativeControlType.ButtonHelp: button.BezelStyle = NSBezelStyle.HelpButton; button.Title = string.Empty; break; } button.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant); button.Font = CocoaHelpers.GetNSFont(controlVariant); FigmaGroup group = frame.children .OfType <FigmaGroup>() .FirstOrDefault(s => s.visible); if (group != null) { FigmaText text = group.children .OfType <FigmaText>() .FirstOrDefault(s => s.name == ComponentString.TITLE); if (text != null && controlType != NativeControlType.ButtonHelp) { button.Title = text.characters; } if (group.name == ComponentString.STATE_DISABLED) { button.Enabled = false; } if (group.name == ComponentString.STATE_DEFAULT) { button.KeyEquivalent = "\r"; } } return(new View(button)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService 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 = CocoaHelpers.GetNSControlSize(controlVariant); checkBox.Font = CocoaHelpers.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)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService) { var segmentedControl = new NSSegmentedControl(); var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlType(out var controlType); frame.TryGetNativeControlVariant(out var controlVariant); segmentedControl.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant); segmentedControl.Font = CocoaHelpers.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(text.characters, i); i++; } } segmentedControl.TrackingMode = NSSegmentSwitchTracking.SelectOne; return(new View(segmentedControl)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService 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 NativeControlType controlType); currentNode.TryGetNativeControlVariant(out NativeControlVariant controlVariant); if (text != null) { label.StringValue = text.characters; label.Alignment = CocoaHelpers.GetNSTextAlignment(text); label.Font = CocoaHelpers.GetNSFont(controlVariant, text); } if (controlType == NativeControlType.LabelHeader) { label.Font = NSFont.SystemFontOfSize(headerFontSize, CocoaHelpers.GetNSFontWeight(text)); } foreach (var styleMap in text?.styles) { if (rendererService.FileProvider.TryGetStyle(styleMap.Value, out FigmaStyle style)) { if (styleMap.Key == "fill") { label.TextColor = CocoaHelpers.GetNSColor(style.name); } } } return(new View(label)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService) { var frame = (FigmaFrame)currentNode; var radio = new NSButton(); radio.SetButtonType(NSButtonType.Radio); FigmaText text = frame.children .OfType <FigmaText>() .FirstOrDefault(s => s.name == ComponentString.TITLE); if (text != null) { radio.Title = text.characters; } frame.TryGetNativeControlVariant(out var controlVariant); radio.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant); radio.Font = CocoaHelpers.GetNSFont(controlVariant, text); FigmaGroup group = frame.children .OfType <FigmaGroup>() .FirstOrDefault(s => (s.name == ComponentString.STATE_ON || s.name == ComponentString.STATE_OFF) && s.visible); if (group != null) { if (group.name == ComponentString.STATE_ON) { radio.State = NSCellStateValue.On; } if (group.name == ComponentString.STATE_OFF) { radio.State = NSCellStateValue.Off; } } return(new View(radio)); }
protected override IView OnConvertToView(FigmaNode currentNode, ProcessedNode parentNode, FigmaRendererService rendererService) { var combobox = new NSComboBox(); var frame = (FigmaFrame)currentNode; frame.TryGetNativeControlVariant(out var controlVariant); combobox.ControlSize = CocoaHelpers.GetNSControlSize(controlVariant); combobox.Font = CocoaHelpers.GetNSFont(controlVariant); FigmaText text = frame.children .OfType <FigmaText> () .FirstOrDefault(s => s.name == ComponentString.TITLE); if (text != null && !string.IsNullOrEmpty(text.characters)) { combobox.StringValue = text.characters; } return(new View(combobox)); }