forked from qt-creator/qt-creator
Show different icons for GLSL variable categories
Attributes, uniforms, varyings, and constants are shown with a distinguished icon that is different from regular variables.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -78,6 +78,7 @@ Symbol *Block::find(const QString &name) const
|
||||
Variable::Variable(Scope *scope)
|
||||
: Symbol(scope)
|
||||
, _type(0)
|
||||
, _qualifiers(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
item.icon = m_varIcon;
|
||||
else if (s->asFunction() || s->asOverloadSet())
|
||||
item.icon = m_functionIcon;
|
||||
else if (s->asStruct())
|
||||
item.icon = m_typeIcon;
|
||||
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()) {
|
||||
item.icon = m_functionIcon;
|
||||
} else if (s->asStruct()) {
|
||||
item.icon = m_typeIcon;
|
||||
} else {
|
||||
item.icon = m_otherIcon;
|
||||
}
|
||||
item.text = s->name();
|
||||
if (specialMembers.contains(item.text))
|
||||
item.order = SpecialMemberOrder;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
BIN
src/plugins/glsleditor/images/attribute.png
Normal file
BIN
src/plugins/glsleditor/images/attribute.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 583 B |
BIN
src/plugins/glsleditor/images/const.png
Normal file
BIN
src/plugins/glsleditor/images/const.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 478 B |
BIN
src/plugins/glsleditor/images/uniform.png
Normal file
BIN
src/plugins/glsleditor/images/uniform.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 583 B |
BIN
src/plugins/glsleditor/images/varying.png
Normal file
BIN
src/plugins/glsleditor/images/varying.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 585 B |
Reference in New Issue
Block a user