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>); }
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); }
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>); }
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>); }
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>); }