Example #1
0
        public ExampleViewManager(IScrollView scrollView)
        {
            //we get the default basic view converters from the current loaded toolkit
            var converters = FigmaSharp.AppContext.Current.GetFigmaConverters();

            //TIP: the render consist in 2 steps:
            //1) generate all the views, decorating and calculate sizes
            //2) with this views we generate the hierarchy and position all the views based in the
            //native toolkit positioning system

            //in this case we want use a remote file provider (figma url from our document)
            fileProvider = new FigmaRemoteFileProvider();

            //we initialize our renderer service, this uses all the converters passed
            //and generate a collection of NodesProcessed which is basically contains <FigmaModel, IView, FigmaParentModel>
            var rendererService = new FigmaFileRendererService(fileProvider, converters);

            rendererService.Start(fileName, scrollView);

            //now we have all the views processed and the relationship we can distribute all the views into the desired base view
            var distributionService = new FigmaViewRendererDistributionService(rendererService);

            distributionService.Start();

            //We want know the background color of the figma camvas and apply to our scrollview
            var canvas = fileProvider.Nodes.OfType <FigmaCanvas>().FirstOrDefault();

            if (canvas != null)
            {
                scrollView.BackgroundColor = canvas.backgroundColor;
            }

            //NOTE: some toolkits requires set the real size of the content of the scrollview before position layers
            scrollView.AdjustToContent();
        }
Example #2
0
        public ExampleViewManager(IScrollView scrollView, FigmaViewConverter[] converters)
        {
            fileProvider    = new FigmaRemoteFileProvider();
            RendererService = new FigmaFileRendererService(fileProvider, converters);

            var options = new FigmaViewRendererServiceOptions()
            {
                ScanChildrenFromFigmaInstances = false
            };

            RendererService.Start(fileName, scrollView.ContentView, options);

            distributionService = new FigmaViewRendererDistributionService(RendererService);
            distributionService.Start();

            //We want know the background color of the figma camvas and apply to our scrollview
            var canvas = fileProvider.Nodes.OfType <FigmaCanvas>().FirstOrDefault();

            if (canvas != null)
            {
                scrollView.BackgroundColor = canvas.backgroundColor;
            }


            scrollView.AdjustToContent();
        }
Example #3
0
        //NSProgressIndicator progressIndicator;

        void Load(string version_id, string page_id)
        {
            if (string.IsNullOrEmpty(Link_ID))
            {
                return;
            }
            windowController.Title = string.Format("Opening “{0}”…", Link_ID);

            ToggleSpinnerState(toggle_on: true);
            windowController.EnableButtons(false);

            scrollview.ClearSubviews();

            new Thread(() => {
                this.InvokeOnMainThread(() => {
                    AppContext.Current.SetAccessToken(Token);

                    var converters = AppContext.Current.GetFigmaConverters();

                    Console.WriteLine("TOKEN: " + Token);

                    var fileProvider    = new FigmaRemoteFileProvider();
                    var rendererService = new FigmaFileRendererService(fileProvider, converters);

                    rendererService.Start(Link_ID, scrollview);

                    var distributionService = new FigmaViewRendererDistributionService(rendererService);
                    distributionService.Start();

                    fileProvider.ImageLinksProcessed += (s, e) =>
                    {
                        // done
                    };

                    //We want know the background color of the figma camvas and apply to our scrollview
                    var canvas = fileProvider.Nodes.OfType <FigmaCanvas>().FirstOrDefault();
                    if (canvas != null)
                    {
                        scrollview.BackgroundColor = canvas.backgroundColor;
                    }

                    ////NOTE: some toolkits requires set the real size of the content of the scrollview before position layers
                    scrollview.AdjustToContent();

                    windowController.Title = Link_ID;

                    windowController.UpdateVersionMenu();
                    windowController.UpdatePagesPopupButton();
                    windowController.EnableButtons(true);

                    ToggleSpinnerState(toggle_on: false);
                });
            }).Start();
        }
Example #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:FigmaSharp.FigmaFile"/> class.
        /// </summary>
        /// <param name="file">File.</param>
        /// <param name="figmaViewConverters">Figma view converters.</param>
        public FigmaFile(string file, FigmaViewConverter[] figmaViewConverters)
        {
            this.file = file;

            ContentView = AppContext.Current.CreateEmptyView();
            FigmaImages = new List <IImageView>();

            var assembly = System.Reflection.Assembly.GetCallingAssembly();

            figmaLocalFileProvider = new FigmaManifestFileProvider(assembly);
            fileService            = new FigmaFileRendererService(figmaLocalFileProvider, figmaViewConverters);
            rendererService        = new FigmaViewRendererDistributionService(fileService);
        }
Example #5
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            scrollViewWrapper = new ScrollViewWrapper(scrollview);
            outlinePanel      = new OutlinePanel();

            var converters = FigmaSharp.AppContext.Current.GetFigmaConverters();

            //we load all the services
            fileProvider        = new FigmaManifestFileProvider(this.GetType().Assembly);
            rendererService     = new FigmaFileRendererService(fileProvider, converters);
            distributionService = new FigmaViewRendererDistributionService(rendererService);

            designerDelegate = new FigmaDesignerDelegate();

            //figma session handles
            session         = new FigmaDesignerSession(fileProvider, rendererService, distributionService);
            designerSurface = new FigmaDesignerSurface(designerDelegate, session);

            // we set to our surface current window to listen changes on it
            var window = NSApplication.SharedApplication.DangerousWindows
                         .FirstOrDefault(s => s is WindowWrapper) as WindowWrapper;

            designerSurface.SetWindow(window);

            //time to reload a figma document in the current session
            session.Reload(scrollViewWrapper, "FigmaStoryboard.figma", new FigmaViewRendererServiceOptions());

            //
            designerSurface.StartHoverSelection();

            var second = new NSWindow(new CGRect(0, 0, 300, 600), NSWindowStyle.Titled | NSWindowStyle.Resizable | NSWindowStyle.Closable, NSBackingStore.Buffered, false);

            window.AddChildWindow(second, NSWindowOrderingMode.Above);

            //propertyPanel = new FigmaPropertyPanel();
            //second.ContentView = propertyPanel.View;
            //propertyPanel.Initialize();

            //surface.FocusedViewChanged += (sender, e) =>
            //{
            //    var model = session.GetModel(e);
            //    propertyPanel.Select(model);
            //};

            //propertyPanel.Select(session.MainViews[0].FigmaNode);
        }
Example #6
0
        protected override async Task OnInitialize(ModelDescriptor modelDescriptor, Properties status)
        {
            if (!(modelDescriptor is FileDescriptor fileDescriptor))
            {
                throw new InvalidOperationException();
            }

            if (session == null)
            {
                Owner         = fileDescriptor.Owner;
                fileName      = fileDescriptor.FilePath;
                DocumentTitle = fileDescriptor.FilePath.FileName;

                figmaDelegate = new FigmaDesignerDelegate();
                var converters = FigmaSharp.AppContext.Current.GetFigmaConverters();

                fileProvider        = new FigmaManifestFileProvider(this.GetType().Assembly);
                rendererService     = new FigmaFileRendererService(fileProvider, converters);
                distributionService = new FigmaViewRendererDistributionService(rendererService);

                session = new FigmaDesignerSession(fileProvider, rendererService, distributionService);
                //session.ModifiedChanged += HandleModifiedChanged;
                session.ReloadFinished += Session_ReloadFinished;

                surface = new FigmaDesignerSurface(figmaDelegate, session)
                {
                    Session = session
                };

                surface.FocusedViewChanged += Surface_FocusedViewChanged;

                var window = NSApplication.SharedApplication.MainWindow;
                surface.SetWindow(new WindowInternalWrapper(window));
                surface.StartHoverSelection();

                //IdeApp.Workbench.ActiveDocumentChanged += OnActiveDocumentChanged;
                IdeApp.Workbench.DocumentOpened += OnDocumentOpened;
            }

            if (fileDescriptor.Owner is DotNetProject project)
            {
                session.Reload(scrollViewWrapper, fileName, new FigmaViewRendererServiceOptions());
            }
            await base.OnInitialize(modelDescriptor, status);
        }
 public FigmaDesignerSession(IFigmaFileProvider figmaFileProvider, FigmaFileRendererService figmaViewRendererService, FigmaViewRendererDistributionService figmaViewRendererDistributionService)
 {
     fileProvider        = figmaFileProvider;
     rendererService     = figmaViewRendererService;
     distributionService = figmaViewRendererDistributionService;
 }
        void Load(string version_id, string page_id)
        {
            Title = string.Format("Opening “{0}”…", Link_ID);

            (Window.ContentViewController as DocumentViewController).ToggleSpinnerState(toggle_on: true);
            RefreshButton.Enabled = false;
            CodeButton.Enabled    = false;

            AppContext.Current.SetAccessToken(Token);
            var converters = AppContext.Current.GetFigmaConverters();

            my_scroll_view = new NSScrollView();
            ScrollViewWrapper wrapper = new ScrollViewWrapper(my_scroll_view);



            new Thread(() => {
                this.InvokeOnMainThread(() =>
                {
                    fileProvider        = new FigmaRemoteFileProvider();
                    var rendererService = new FigmaFileRendererService(fileProvider, converters);

                    rendererService.Start(Link_ID, wrapper);
                    var distributionService = new FigmaViewRendererDistributionService(rendererService);
                    distributionService.Start();

                    fileProvider.ImageLinksProcessed += (s, e) => {
                        this.InvokeOnMainThread(() =>
                        {
                            Console.WriteLine("LOADING DONE");



                            if (fileProvider.Response == null)
                            {
                                (Window.ContentViewController as DocumentViewController).ToggleSpinnerState(toggle_on: false);
                                ShowError();
                                return;
                            }

                            FigmaCanvas canvas;

                            if (!string.IsNullOrEmpty(page_id))
                            {
                                canvas = (FigmaCanvas)fileProvider.Nodes.First(x => x.name == page_id);
                            }
                            else
                            {
                                canvas = (FigmaCanvas)fileProvider.Nodes.OfType <FigmaCanvas>().FirstOrDefault();
                            }

                            wrapper.BackgroundColor = canvas.backgroundColor;
                            wrapper.AdjustToContent();
                            // TODO: scroll to middle


                            var scroll                = (NSScrollView)wrapper.NativeObject;
                            scroll.ScrollerStyle      = NSScrollerStyle.Overlay;
                            scroll.AutohidesScrollers = true;
                            Window.ContentView.AddSubview(scroll);
                            scroll.Frame = Window.ContentView.Bounds;

                            Title        = fileProvider.Response.name;
                            Window.Title = fileProvider.Response.name;

                            UpdateVersionMenu();
                            UpdatePagesPopupButton();

                            RefreshButton.Enabled   = true;
                            CodeButton.Enabled      = true;
                            PagePopUpButton.Enabled = true;

                            (Window.ContentViewController as DocumentViewController).ToggleSpinnerState(toggle_on: false);
                        });
                    };
                });
            }).Start();
        }