From e117f04fabde000f4c0aae7cc1a82c58da1ba4c3 Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Wed, 1 Dec 2010 15:44:50 +1000 Subject: [PATCH] Show different icons for GLSL variable categories Attributes, uniforms, varyings, and constants are shown with a distinguished icon that is different from regular variables. --- src/libs/glsl/glslengine.cpp | 3 +- src/libs/glsl/glslengine.h | 2 +- src/libs/glsl/glslsemantic.cpp | 6 +++- src/libs/glsl/glslsymbols.cpp | 1 + src/libs/glsl/glslsymbols.h | 4 +++ src/plugins/glsleditor/glslcodecompletion.cpp | 26 +++++++++++++++--- src/plugins/glsleditor/glslcodecompletion.h | 4 +++ src/plugins/glsleditor/glsleditor.qrc | 4 +++ src/plugins/glsleditor/images/attribute.png | Bin 0 -> 583 bytes src/plugins/glsleditor/images/const.png | Bin 0 -> 478 bytes src/plugins/glsleditor/images/uniform.png | Bin 0 -> 583 bytes src/plugins/glsleditor/images/varying.png | Bin 0 -> 585 bytes 12 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 src/plugins/glsleditor/images/attribute.png create mode 100644 src/plugins/glsleditor/images/const.png create mode 100644 src/plugins/glsleditor/images/uniform.png create mode 100644 src/plugins/glsleditor/images/varying.png 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 @@ images/var.png images/func.png images/type.png + images/const.png + images/attribute.png + images/uniform.png + images/varying.png images/other.png diff --git a/src/plugins/glsleditor/images/attribute.png b/src/plugins/glsleditor/images/attribute.png new file mode 100644 index 0000000000000000000000000000000000000000..94f20ac42ac8b268d0d962e9e0ab86b1a518ae00 GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4tLWt89g zF-_y0;TK-&;TwW6OO(EcQZOOI_gQ?%<{5iUF^Ude$=lLwVlqC6KyYz*l z-_ztd_1_kLK6v%yl-u%;a@eP@W>u0cO8IZ7cgFX7Ye(5~TZ?A9J$rt&dbCfe6VVLi z`V+PK;+>43m=$bhiHBsb{(LvJJt^}kv-VY?*7cRM9GRD@+{!4CU|!NN$C~H<&XV{u z`umoBS?eK?rx4n5g)7-4F*dOBd-SaqW{0b9k3P@$Orujv#Kaae5*rUuc@fMH4s@A-1E9#{B z*ss5^UZ){H>tyPhtw%oT$7S^#IsEQ`IN#IS{(JaZG%Q-e|yQz{EjrrIztFgAF)IEGZ*S`uvSaX3NX-=&so8)r99RuEa(t@lcV zt7~(z){TRjQ+VIYzpb7B);-}e12g-Jy)~0Qf4DJ+`$F~Ggz{olrWIkUPd@sT z&9%NUn%xA2ZO!}m literal 0 HcmV?d00001 diff --git a/src/plugins/glsleditor/images/uniform.png b/src/plugins/glsleditor/images/uniform.png new file mode 100644 index 0000000000000000000000000000000000000000..c6452fc8c6ffe14c756a9423241df93ce34d361b GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4FnYL=1?l=AkWM=zuZu6uQ zR*`b|YmH`$e)H%k6?v1l`$a(Uw?~qvx}Q!I5d8l5qh!y6W833j1YEw6xncKS@6|UK zU4HlBUMz3YB+2Ti=a(+uUbHXp_}_;?>;I{IV4e~pk;}1IK!I80t>=$xi)SzTR5f?+ zT-#l91+Io_EH%9KK)e6c`>r0(bByb3d*pTQ>EEfSh}~29Z`uLw3to$tI+ckAiagAo z&%gF7quiawWXr2hwNJOUR&zhPdpa~lVdBCg8O>o*$vpEu-njAKqKTcc@Rq${eQDg9 zy;08Iy_0_BmoGJRyWI8d<`=ua&F$MKoafpdwkzNir{aX5g;U+WioA`Reg57v7n^;@ z_UOL36;!A>eVOJe^~~?La(+e!e_UdHB7H;FbidehGmm_@`oBnFUYW;Fo-ke2vnos2 o9~~4pzKZjV%95jp4Gzdpe#*ZfP>hv{fq{X+)78&qol`;+0AfN3`v3p{ literal 0 HcmV?d00001 diff --git a/src/plugins/glsleditor/images/varying.png b/src/plugins/glsleditor/images/varying.png new file mode 100644 index 0000000000000000000000000000000000000000..c2551c002577c415d539876c0c1e690319ca74d6 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4Q+xF*`E)v^* z&VS4#^Wj^6mGMj;i=76Ws-tzQB{a(8t*k|6_^8df^JeYmm*VH=^&Eek#QLF3`oh7R zGu@T;sh@1FzJ5G*yZMouyn4A$E^0k^Fj4r-y*aNq1ru+)d+*5qZ|gVFwM=#E#3SO* zZr&QXEN->o|7}m)1(V-xICVYGUgZ9C`+#2`d#@((?T>TS?7TS3!HhA<;h1d8dcXVP z-Q2}FYeYGkth~%FL?v!n78Jhc_a4o~9nKCX-ySPpw*1ocb$3M9$J-tIuAQ+oz-v)T zbJ}LltJih(a!U)+`6qFzn@_f#Y*+rVZASf9k((bT8Xb`64dY7YnY!y?ZQgG7a;94g z@0S0061nliGs`INEt4|VUhrDjo4EVhljMD$_}|TIdcJGXjJ-8Fsx1zhKcD~J<*J+U zaixL8_x_8;$%`r;mZ+t!b^UkL`}Ea?6&K_x`kX&rx!5@+)3qj2vbSA#(sK)uwW?`v pGwx(2-PdGJzBcJ5C-Wb+D{J{9y*iXHGcYhPc)I$ztaD0e0sx(g1}Ojl literal 0 HcmV?d00001