summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/glsleditor/glsleditor.cpp71
-rw-r--r--src/plugins/glsleditor/glsleditor.h4
-rw-r--r--src/plugins/glsleditor/glslhighlighter.cpp13
-rw-r--r--src/plugins/glsleditor/glslhighlighter.h5
4 files changed, 48 insertions, 45 deletions
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp
index 1350512c23..cb21ccb6b8 100644
--- a/src/plugins/glsleditor/glsleditor.cpp
+++ b/src/plugins/glsleditor/glsleditor.cpp
@@ -159,7 +159,7 @@ GLSLTextEditor::GLSLTextEditor(QWidget *parent) :
connect(this, SIGNAL(textChanged()), this, SLOT(updateDocument()));
- baseTextDocument()->setSyntaxHighlighter(new Highlighter(document()));
+ baseTextDocument()->setSyntaxHighlighter(new Highlighter(this, document()));
// if (m_modelManager) {
// m_semanticHighlighter->setModelManager(m_modelManager);
@@ -204,8 +204,8 @@ QString GLSLEditorEditable::id() const
bool GLSLEditorEditable::open(const QString &fileName)
{
- bool b = TextEditor::BaseTextEditorEditable::open(fileName);
editor()->setMimeType(Core::ICore::instance()->mimeDatabase()->findByFile(QFileInfo(fileName)).type());
+ bool b = TextEditor::BaseTextEditorEditable::open(fileName);
return b;
}
@@ -316,16 +316,7 @@ void GLSLTextEditor::updateDocumentNow()
{
m_updateDocumentTimer->stop();
- int variant = 0;
-
- if (isDesktopShader())
- variant |= Lexer::Variant_GLSL_120;
- else
- variant |= Lexer::Variant_GLSL_Qt;
- if (isVertexShader())
- variant |= Lexer::Variant_VertexShader;
- if (isFragmentShader())
- variant |= Lexer::Variant_FragmentShader;
+ int variant = languageVariant();
const QString contents = toPlainText(); // get the code from the editor
const QByteArray preprocessedCode = contents.toLatin1(); // ### use the QtCreator C++ preprocessor.
@@ -384,28 +375,42 @@ void GLSLTextEditor::updateDocumentNow()
}
}
-bool GLSLTextEditor::isDesktopShader() const
-{
- return mimeType() == QLatin1String("text/x-glsl-vert") ||
- mimeType() == QLatin1String("text/x-glsl-frag") ||
- mimeType() == QLatin1String("text/x-glsl") || // Could be either.
- mimeType() == QLatin1String("application/x-glsl");
-}
-
-bool GLSLTextEditor::isVertexShader() const
-{
- return mimeType() == QLatin1String("text/x-glsl-vert") ||
- mimeType() == QLatin1String("text/x-glsl-es-vert") ||
- mimeType() == QLatin1String("text/x-glsl") || // Could be either.
- mimeType() == QLatin1String("application/x-glsl");
-}
-
-bool GLSLTextEditor::isFragmentShader() const
+int GLSLTextEditor::languageVariant() const
{
- return mimeType() == QLatin1String("text/x-glsl-frag") ||
- mimeType() == QLatin1String("text/x-glsl-es-frag") ||
- mimeType() == QLatin1String("text/x-glsl") || // Could be either.
- mimeType() == QLatin1String("application/x-glsl");
+ int variant = 0;
+ QString type = mimeType();
+ bool isVertex = false;
+ bool isFragment = false;
+ bool isDesktop = false;
+ if (type.isEmpty()) {
+ // ### Before file has been opened, so don't know the mime type.
+ isVertex = true;
+ isFragment = true;
+ } else if (type == QLatin1String("text/x-glsl") ||
+ type == QLatin1String("application/x-glsl")) {
+ isVertex = true;
+ isFragment = true;
+ isDesktop = true;
+ } else if (type == QLatin1String("text/x-glsl-vert")) {
+ isVertex = true;
+ isDesktop = true;
+ } else if (type == QLatin1String("text/x-glsl-frag")) {
+ isFragment = true;
+ isDesktop = true;
+ } else if (type == QLatin1String("text/x-glsl-es-vert")) {
+ isVertex = true;
+ } else if (type == QLatin1String("text/x-glsl-es-frag")) {
+ isFragment = true;
+ }
+ if (isDesktop)
+ variant |= Lexer::Variant_GLSL_120;
+ else
+ variant |= Lexer::Variant_GLSL_Qt;
+ if (isVertex)
+ variant |= Lexer::Variant_VertexShader;
+ if (isFragment)
+ variant |= Lexer::Variant_FragmentShader;
+ return variant;
}
Document::Ptr GLSLTextEditor::glslDocument() const
diff --git a/src/plugins/glsleditor/glsleditor.h b/src/plugins/glsleditor/glsleditor.h
index cc5826314e..753802af88 100644
--- a/src/plugins/glsleditor/glsleditor.h
+++ b/src/plugins/glsleditor/glsleditor.h
@@ -97,9 +97,7 @@ public:
QSet<QString> identifiers() const;
- bool isDesktopShader() const;
- bool isVertexShader() const;
- bool isFragmentShader() const;
+ int languageVariant() const;
Document::Ptr glslDocument() const;
diff --git a/src/plugins/glsleditor/glslhighlighter.cpp b/src/plugins/glsleditor/glslhighlighter.cpp
index bf7bc57a9e..6d5edb802b 100644
--- a/src/plugins/glsleditor/glslhighlighter.cpp
+++ b/src/plugins/glsleditor/glslhighlighter.cpp
@@ -27,6 +27,7 @@
**
**************************************************************************/
#include "glslhighlighter.h"
+#include "glsleditor.h"
#include <glsl/glsllexer.h>
#include <glsl/glslparser.h>
#include <texteditor/basetextdocumentlayout.h>
@@ -37,8 +38,8 @@ using namespace GLSLEditor;
using namespace GLSLEditor::Internal;
using namespace TextEditor;
-Highlighter::Highlighter(QTextDocument *parent)
- : TextEditor::SyntaxHighlighter(parent)
+Highlighter::Highlighter(GLSLTextEditor *editor, QTextDocument *parent)
+ : TextEditor::SyntaxHighlighter(parent), m_editor(editor)
{
}
@@ -68,9 +69,7 @@ void Highlighter::highlightBlock(const QString &text)
lex.setState(state);
lex.setScanKeywords(false);
lex.setScanComments(true);
- const int variant = GLSL::Lexer::Variant_GLSL_Qt | // ### FIXME: hardcoded
- GLSL::Lexer::Variant_VertexShader |
- GLSL::Lexer::Variant_FragmentShader;
+ const int variant = m_editor->languageVariant();
lex.setVariant(variant);
int initialState = state;
@@ -341,9 +340,7 @@ void Highlighter::highlightBlock(const QString &text)
lex.setState(qMax(0, previousState));
lex.setScanKeywords(false);
lex.setScanComments(true);
- const int variant = GLSL::Lexer::Variant_GLSL_Qt | // ### FIXME: hardcoded
- GLSL::Lexer::Variant_VertexShader |
- GLSL::Lexer::Variant_FragmentShader;
+ const int variant = m_editor->languageVariant();
lex.setVariant(variant);
int foldingIndent = initialBraceDepth;
diff --git a/src/plugins/glsleditor/glslhighlighter.h b/src/plugins/glsleditor/glslhighlighter.h
index 8b31121d49..1c75cc1922 100644
--- a/src/plugins/glsleditor/glslhighlighter.h
+++ b/src/plugins/glsleditor/glslhighlighter.h
@@ -32,6 +32,8 @@
#include <texteditor/syntaxhighlighter.h>
namespace GLSLEditor {
+class GLSLTextEditor;
+
namespace Internal {
class Highlighter : public TextEditor::SyntaxHighlighter
@@ -55,7 +57,7 @@ public:
NumGLSLFormats
};
- explicit Highlighter(QTextDocument *parent);
+ explicit Highlighter(GLSLTextEditor *editor, QTextDocument *parent);
virtual ~Highlighter();
void setFormats(const QVector<QTextCharFormat> &formats);
@@ -67,6 +69,7 @@ protected:
private:
QTextCharFormat m_formats[NumGLSLFormats];
+ GLSLTextEditor *m_editor;
};
} // namespace Internal