Exemplo n.º 1
0
        public ITagger <T> CreateTagger <T>(ITextView textView, ITextBuffer buffer) where T : ITag
        {
            //Debug.WriteLine($"CreateTagger: textView={textView}, buffer={buffer}");

            // Make sure we are only tagging the top buffer
            if (!ReferenceEquals(buffer, textView.TextBuffer))
            {
                return(null);
            }

            return(buffer.Properties.GetOrCreateSingletonProperty(() =>
            {
                var tagger = new SquiggleTagger(buffer);

                var typeName = buffer.ContentType.TypeName;

                var observableSourceCode = Observable.Return(buffer.CurrentSnapshot.GetText()).Concat(
                    Observable.FromEventPattern <TextContentChangedEventArgs>(h => buffer.Changed += h, h => buffer.Changed -= h)
                    .Select(e => e.EventArgs.After.GetText()));
                observableSourceCode
                .Throttle(TimeSpan.FromSeconds(OptionsPagePackage.Options.CompileDelay * 0.001f))
                .Subscribe(sourceCode => RequestCompileShader(tagger, sourceCode, typeName, GetDocumentDir(buffer)));

                return tagger;
            }) as ITagger <T>);
        }
Exemplo n.º 2
0
        private void RequestCompileShader(SquiggleTagger tagger, string shaderCode, string shaderType, string documentDir)
        {
            if (shaderCompiler is null)
            {
                return;
            }
            //if not currently compiling then compile shader from changed text otherwise add to the "to be compiled" list
            var options = OptionsPagePackage.Options;

            if (!options.LiveCompiling)
            {
                tagger.UpdateErrors(new List <ShaderLogLine>());
                return;
            }
            shaderCompiler.RequestCompile(shaderCode, shaderType, tagger.UpdateErrors, documentDir);
        }
Exemplo n.º 3
0
        public ITagger <T> CreateTagger <T>(ITextView textView, ITextBuffer buffer) where T : ITag
        {
            //Debug.WriteLine($"CreateTagger: textView={textView}, buffer={buffer}");

            // Make sure we are only tagging the top buffer
            if (!ReferenceEquals(buffer, textView.TextBuffer))
            {
                return(null);
            }

            return(buffer.Properties.GetOrCreateSingletonProperty(() =>
            {
                var tagger = new SquiggleTagger(buffer);

                var shaderType = buffer.ContentType.TypeName;

                var observableSourceCode = Observable.Return(buffer.CurrentSnapshot.GetText()).Concat(
                    Observable.FromEventPattern <TextContentChangedEventArgs>(h => buffer.Changed += h, h => buffer.Changed -= h)
                    .Select(e => e.EventArgs.After.GetText()));

                void RequestCompileShader(string shaderCode)
                {
                    //if not currently compiling then compile shader from changed text otherwise add to the "to be compiled" list
                    if (settings.LiveCompiling)
                    {
                        shaderCompiler.RequestCompile(shaderCode, shaderType, tagger.UpdateErrors, GetDocumentDir(buffer));
                    }
                    else
                    {
                        tagger.UpdateErrors(new List <ShaderLogLine>());
                    }
                }

                observableSourceCode
                .Throttle(TimeSpan.FromSeconds(settings.CompileDelay * 0.001f))
                .Subscribe(sourceCode => RequestCompileShader(sourceCode));

                return tagger;
            }) as ITagger <T>);
        }
Exemplo n.º 4
0
        public ITagger <T> CreateTagger <T>(ITextView textView, ITextBuffer buffer) where T : ITag
        {
            //Debug.WriteLine($"CreateTagger: textView={textView}, buffer={buffer}");

            // Make sure we are only tagging the top buffer
            if (!ReferenceEquals(buffer, textView.TextBuffer))
            {
                return(null);
            }

            return(buffer.Properties.GetOrCreateSingletonProperty(() =>
            {
                var tagger = new SquiggleTagger(buffer);

                // TODO: Move all this stuff into the SquiggleTagger constructor
                var typeName = buffer.ContentType.TypeName;
                buffer.Changed += (s, e) => RequestCompileShader(tagger, e.After.GetText(), typeName, GetDocumentDir(buffer));    //compile on text change. can be very often!
                RequestCompileShader(tagger, buffer.CurrentSnapshot.GetText(), typeName, GetDocumentDir(buffer));                 //initial compile

                return tagger;
            }) as ITagger <T>);
        }
Exemplo n.º 5
0
 public ITagger <T> CreateTagger <T>(ITextView textView, ITextBuffer buffer) where T : ITag
 {
     if (textView is null)
     {
         return(null);
     }
     // Make sure we are only tagging the top buffer
     if (!ReferenceEquals(buffer, textView.TextBuffer))
     {
         return(null);
     }
     //make sure only one tagger for a text buffer is created all views should share
     if (!taggers.ContainsKey(buffer))
     {
         var tagger = new SquiggleTagger(buffer);
         taggers[buffer] = tagger;
         var typeName = buffer.ContentType.TypeName;
         buffer.Changed += (s, e) => RequestCompileShader(tagger, e.After.GetText(), typeName, GetDocumentDir(buffer));    //compile on text change. can be very often!
         RequestCompileShader(tagger, buffer.CurrentSnapshot.GetText(), typeName, GetDocumentDir(buffer));                 //initial compile
     }
     return(taggers[buffer] as ITagger <T>);
 }