diff options
author | Rhys Weatherley <[email protected]> | 2010-12-01 15:44:50 +1000 |
---|---|---|
committer | Rhys Weatherley <[email protected]> | 2010-12-01 15:44:50 +1000 |
commit | e117f04fabde000f4c0aae7cc1a82c58da1ba4c3 (patch) | |
tree | 5f359f97cbb0f98892bc6c3265dda0dcb2cbe5de | |
parent | ecf4baec663e5c2368056a6a79efa7078719026c (diff) |
Show different icons for GLSL variable categories
Attributes, uniforms, varyings, and constants are shown with a
distinguished icon that is different from regular variables.
-rw-r--r-- | src/libs/glsl/glslengine.cpp | 3 | ||||
-rw-r--r-- | src/libs/glsl/glslengine.h | 2 | ||||
-rw-r--r-- | src/libs/glsl/glslsemantic.cpp | 6 | ||||
-rw-r--r-- | src/libs/glsl/glslsymbols.cpp | 1 | ||||
-rw-r--r-- | src/libs/glsl/glslsymbols.h | 4 | ||||
-rw-r--r-- | src/plugins/glsleditor/glslcodecompletion.cpp | 26 | ||||
-rw-r--r-- | src/plugins/glsleditor/glslcodecompletion.h | 4 | ||||
-rw-r--r-- | src/plugins/glsleditor/glsleditor.qrc | 4 | ||||
-rw-r--r-- | src/plugins/glsleditor/images/attribute.png | bin | 0 -> 583 bytes | |||
-rw-r--r-- | src/plugins/glsleditor/images/const.png | bin | 0 -> 478 bytes | |||
-rw-r--r-- | src/plugins/glsleditor/images/uniform.png | bin | 0 -> 583 bytes | |||
-rw-r--r-- | src/plugins/glsleditor/images/varying.png | bin | 0 -> 585 bytes |
12 files changed, 43 insertions, 7 deletions
diff --git a/src/libs/glsl/glslengine.cpp b/src/libs/glsl/glslengine.cpp index 73938e947ea..2b6ec6e0391 100644 --- a/src/libs/glsl/glslengine.cpp +++ b/src/libs/glsl/glslengine.cpp @@ -266,11 +266,12 @@ Argument *Engine::newArgument(Function *function, const QString &name, const Typ return a; } -Variable *Engine::newVariable(Scope *scope, const QString &name, const Type *type) +Variable *Engine::newVariable(Scope *scope, const QString &name, const Type *type, int qualifiers) { Variable *var = new Variable(scope); var->setName(name); var->setType(type); + var->setQualifiers(qualifiers); _symbols.append(var); return var; } diff --git a/src/libs/glsl/glslengine.h b/src/libs/glsl/glslengine.h index ab73debf9e7..2d668ba37f0 100644 --- a/src/libs/glsl/glslengine.h +++ b/src/libs/glsl/glslengine.h @@ -120,7 +120,7 @@ public: Block *newBlock(Scope *scope = 0); Function *newFunction(Scope *scope = 0); Argument *newArgument(Function *function, const QString &name, const Type *type); - Variable *newVariable(Scope *scope, const QString &name, const Type *type); + Variable *newVariable(Scope *scope, const QString &name, const Type *type, int qualifiers = 0); MemoryPool *pool(); diff --git a/src/libs/glsl/glslsemantic.cpp b/src/libs/glsl/glslsemantic.cpp index 29760e2eecd..ac07911ea5b 100644 --- a/src/libs/glsl/glslsemantic.cpp +++ b/src/libs/glsl/glslsemantic.cpp @@ -751,7 +751,11 @@ bool Semantic::visit(VariableDeclarationAST *ast) const Type *ty = type(ast->type); ExprResult initializer = expression(ast->initializer); if (ast->name) { - Variable *var = _engine->newVariable(_scope, *ast->name, ty); + QualifiedTypeAST *qtype = ast->type->asQualifiedType(); + int qualifiers = 0; + if (qtype) + qualifiers = qtype->qualifiers; + Variable *var = _engine->newVariable(_scope, *ast->name, ty, qualifiers); _scope->add(var); } return false; diff --git a/src/libs/glsl/glslsymbols.cpp b/src/libs/glsl/glslsymbols.cpp index e4ede5f6c5e..21608629177 100644 --- a/src/libs/glsl/glslsymbols.cpp +++ b/src/libs/glsl/glslsymbols.cpp @@ -78,6 +78,7 @@ Symbol *Block::find(const QString &name) const Variable::Variable(Scope *scope) : Symbol(scope) , _type(0) + , _qualifiers(0) { } diff --git a/src/libs/glsl/glslsymbols.h b/src/libs/glsl/glslsymbols.h index 6506c62fa7d..bf610dd3a24 100644 --- a/src/libs/glsl/glslsymbols.h +++ b/src/libs/glsl/glslsymbols.h @@ -59,10 +59,14 @@ public: virtual const Type *type() const; void setType(const Type *type); + int qualifiers() const { return _qualifiers; } + void setQualifiers(int qualifiers) { _qualifiers = qualifiers; } + virtual Variable *asVariable() { return this; } private: const Type *_type; + int _qualifiers; }; class GLSL_EXPORT Block: public Scope diff --git a/src/plugins/glsleditor/glslcodecompletion.cpp b/src/plugins/glsleditor/glslcodecompletion.cpp index ff891802759..042f4c8a778 100644 --- a/src/plugins/glsleditor/glslcodecompletion.cpp +++ b/src/plugins/glsleditor/glslcodecompletion.cpp @@ -492,6 +492,10 @@ CodeCompletion::CodeCompletion(QObject *parent) m_varIcon(":/glsleditor/images/var.png"), m_functionIcon(":/glsleditor/images/func.png"), m_typeIcon(":/glsleditor/images/type.png"), + m_constIcon(":/glsleditor/images/const.png"), + m_attributeIcon(":/glsleditor/images/attribute.png"), + m_uniformIcon(":/glsleditor/images/uniform.png"), + m_varyingIcon(":/glsleditor/images/varying.png"), m_otherIcon(":/glsleditor/images/other.png") { const QIcon keywordIcon(QLatin1String(":/glsleditor/images/keyword.png")); @@ -678,14 +682,28 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) foreach (GLSL::Symbol *s, members) { TextEditor::CompletionItem item(this); - if (s->asVariable() || s->asArgument()) + GLSL::Variable *var = s->asVariable(); + if (var) { + int storageType = var->qualifiers() & GLSL::QualifiedTypeAST::StorageMask; + if (storageType == GLSL::QualifiedTypeAST::Attribute) + item.icon = m_attributeIcon; + else if (storageType == GLSL::QualifiedTypeAST::Uniform) + item.icon = m_uniformIcon; + else if (storageType == GLSL::QualifiedTypeAST::Varying) + item.icon = m_varyingIcon; + else if (storageType == GLSL::QualifiedTypeAST::Const) + item.icon = m_constIcon; + else + item.icon = m_varIcon; + } else if (s->asArgument()) { item.icon = m_varIcon; - else if (s->asFunction() || s->asOverloadSet()) + } else if (s->asFunction() || s->asOverloadSet()) { item.icon = m_functionIcon; - else if (s->asStruct()) + } else if (s->asStruct()) { item.icon = m_typeIcon; - else + } else { item.icon = m_otherIcon; + } item.text = s->name(); if (specialMembers.contains(item.text)) item.order = SpecialMemberOrder; diff --git a/src/plugins/glsleditor/glslcodecompletion.h b/src/plugins/glsleditor/glslcodecompletion.h index f8110bcffcb..7eb3796e468 100644 --- a/src/plugins/glsleditor/glslcodecompletion.h +++ b/src/plugins/glsleditor/glslcodecompletion.h @@ -110,6 +110,10 @@ private: QIcon m_varIcon; QIcon m_functionIcon; QIcon m_typeIcon; + QIcon m_constIcon; + QIcon m_attributeIcon; + QIcon m_uniformIcon; + QIcon m_varyingIcon; QIcon m_otherIcon; }; diff --git a/src/plugins/glsleditor/glsleditor.qrc b/src/plugins/glsleditor/glsleditor.qrc index 40037911254..3455048e006 100644 --- a/src/plugins/glsleditor/glsleditor.qrc +++ b/src/plugins/glsleditor/glsleditor.qrc @@ -6,6 +6,10 @@ <file>images/var.png</file> <file>images/func.png</file> <file>images/type.png</file> + <file>images/const.png</file> + <file>images/attribute.png</file> + <file>images/uniform.png</file> + <file>images/varying.png</file> <file>images/other.png</file> </qresource> </RCC> diff --git a/src/plugins/glsleditor/images/attribute.png b/src/plugins/glsleditor/images/attribute.png Binary files differnew file mode 100644 index 00000000000..94f20ac42ac --- /dev/null +++ b/src/plugins/glsleditor/images/attribute.png diff --git a/src/plugins/glsleditor/images/const.png b/src/plugins/glsleditor/images/const.png Binary files differnew file mode 100644 index 00000000000..25fc49c6598 --- /dev/null +++ b/src/plugins/glsleditor/images/const.png diff --git a/src/plugins/glsleditor/images/uniform.png b/src/plugins/glsleditor/images/uniform.png Binary files differnew file mode 100644 index 00000000000..c6452fc8c6f --- /dev/null +++ b/src/plugins/glsleditor/images/uniform.png diff --git a/src/plugins/glsleditor/images/varying.png b/src/plugins/glsleditor/images/varying.png Binary files differnew file mode 100644 index 00000000000..c2551c00257 --- /dev/null +++ b/src/plugins/glsleditor/images/varying.png |