From ecf4baec663e5c2368056a6a79efa7078719026c Mon Sep 17 00:00:00 2001 From: Rhys Weatherley <rhys.weatherley@nokia.com> Date: Wed, 1 Dec 2010 14:00:30 +1000 Subject: [PATCH] Better icons for the GLSL code completer --- src/libs/glsl/glslsymbol.cpp | 4 +- src/libs/glsl/glslsymbol.h | 2 +- src/libs/glsl/glslsymbols.cpp | 9 +-- src/libs/glsl/glslsymbols.h | 4 +- src/libs/glsl/glsltypes.cpp | 12 ++-- src/libs/glsl/glsltypes.h | 6 +- src/plugins/glsleditor/glslcodecompletion.cpp | 58 ++++++------------ src/plugins/glsleditor/glslcodecompletion.h | 5 ++ src/plugins/glsleditor/glsleditor.qrc | 5 ++ src/plugins/glsleditor/images/func.png | Bin 0 -> 583 bytes src/plugins/glsleditor/images/keyword.png | Bin 0 -> 341 bytes src/plugins/glsleditor/images/other.png | Bin 0 -> 377 bytes src/plugins/glsleditor/images/type.png | Bin 0 -> 573 bytes src/plugins/glsleditor/images/var.png | Bin 0 -> 530 bytes 14 files changed, 47 insertions(+), 58 deletions(-) create mode 100644 src/plugins/glsleditor/images/func.png create mode 100644 src/plugins/glsleditor/images/keyword.png create mode 100644 src/plugins/glsleditor/images/other.png create mode 100644 src/plugins/glsleditor/images/type.png create mode 100644 src/plugins/glsleditor/images/var.png diff --git a/src/libs/glsl/glslsymbol.cpp b/src/libs/glsl/glslsymbol.cpp index 96300eb76de..903ff2bb63f 100644 --- a/src/libs/glsl/glslsymbol.cpp +++ b/src/libs/glsl/glslsymbol.cpp @@ -76,7 +76,7 @@ Symbol *Scope::lookup(const QString &name) const return 0; } -QStringList Scope::members() const +QList<Symbol *> Scope::members() const { - return QStringList(); + return QList<Symbol *>(); } diff --git a/src/libs/glsl/glslsymbol.h b/src/libs/glsl/glslsymbol.h index 1f7ce9dfcff..6782afb5843 100644 --- a/src/libs/glsl/glslsymbol.h +++ b/src/libs/glsl/glslsymbol.h @@ -73,7 +73,7 @@ public: Symbol *lookup(const QString &name) const; - virtual QStringList members() const; + virtual QList<Symbol *> members() const; virtual void add(Symbol *symbol) = 0; virtual Symbol *find(const QString &name) const = 0; diff --git a/src/libs/glsl/glslsymbols.cpp b/src/libs/glsl/glslsymbols.cpp index d1b4d623194..e4ede5f6c5e 100644 --- a/src/libs/glsl/glslsymbols.cpp +++ b/src/libs/glsl/glslsymbols.cpp @@ -54,9 +54,9 @@ Block::Block(Scope *enclosingScope) { } -QStringList Block::members() const +QList<Symbol *> Block::members() const { - return _members.keys(); + return _members.values(); } void Block::add(Symbol *symbol) @@ -100,9 +100,9 @@ Namespace::~Namespace() qDeleteAll(_overloadSets); } -QStringList Namespace::members() const +QList<Symbol *> Namespace::members() const { - return _members.keys(); + return _members.values(); } void Namespace::add(Symbol *symbol) @@ -116,6 +116,7 @@ void Namespace::add(Symbol *symbol) } else if (Function *firstFunction = sym->asFunction()) { OverloadSet *o = new OverloadSet(this); _overloadSets.append(o); + o->setName(symbol->name()); o->addFunction(firstFunction); o->addFunction(fun); sym = o; diff --git a/src/libs/glsl/glslsymbols.h b/src/libs/glsl/glslsymbols.h index 2c35a123fa8..6506c62fa7d 100644 --- a/src/libs/glsl/glslsymbols.h +++ b/src/libs/glsl/glslsymbols.h @@ -70,7 +70,7 @@ class GLSL_EXPORT Block: public Scope public: Block(Scope *enclosingScope = 0); - virtual QStringList members() const; + virtual QList<Symbol *> members() const; virtual void add(Symbol *symbol); virtual Block *asBlock() { return this; } @@ -92,7 +92,7 @@ public: virtual Namespace *asNamespace() { return this; } - virtual QStringList members() const; + virtual QList<Symbol *> members() const; virtual const Type *type() const; virtual Symbol *find(const QString &name) const; diff --git a/src/libs/glsl/glsltypes.cpp b/src/libs/glsl/glsltypes.cpp index c4f9e577c34..fe66540e628 100644 --- a/src/libs/glsl/glsltypes.cpp +++ b/src/libs/glsl/glsltypes.cpp @@ -331,12 +331,12 @@ bool ArrayType::isLessThan(const Type *other) const return elementType() < array->elementType(); } -QStringList Struct::members() const +QList<Symbol *> Struct::members() const { - QStringList m; + QList<Symbol *> m; foreach (Symbol *s, _members) { if (! s->name().isEmpty()) - m.append(s->name()); + m.append(s); } return m; } @@ -438,12 +438,12 @@ bool Function::isLessThan(const Type *other) const return false; } -QStringList Function::members() const +QList<Symbol *> Function::members() const { - QStringList m; + QList<Symbol *> m; foreach (Argument *arg, _arguments) { if (! arg->name().isEmpty()) - m.append(arg->name()); + m.append(arg); } return m; } diff --git a/src/libs/glsl/glsltypes.h b/src/libs/glsl/glsltypes.h index fd0b934a748..f96171e905f 100644 --- a/src/libs/glsl/glsltypes.h +++ b/src/libs/glsl/glsltypes.h @@ -131,7 +131,7 @@ public: const Type *elementType() const { return indexElementType(); } int dimension() const { return _dimension; } - QStringList members() const { return _members.keys(); } + QList<Symbol *> members() const { return _members.values(); } virtual void add(Symbol *symbol); virtual Symbol *find(const QString &name) const; @@ -193,7 +193,7 @@ public: Struct(Scope *scope = 0) : Scope(scope) {} - QStringList members() const; + QList<Symbol *> members() const; virtual void add(Symbol *member); virtual Symbol *find(const QString &name) const; @@ -238,7 +238,7 @@ public: virtual Symbol *find(const QString &name) const; - virtual QStringList members() const; + virtual QList<Symbol *> members() const; virtual void add(Symbol *symbol) { if (! symbol) return; diff --git a/src/plugins/glsleditor/glslcodecompletion.cpp b/src/plugins/glsleditor/glslcodecompletion.cpp index 9ae15059186..ff891802759 100644 --- a/src/plugins/glsleditor/glslcodecompletion.cpp +++ b/src/plugins/glsleditor/glslcodecompletion.cpp @@ -95,37 +95,6 @@ static bool checkStartOfIdentifier(const QString &word) return false; } -// Temporary workaround until we have proper icons for QML completion items -static QIcon iconForColor(const QColor &color) -{ - QPixmap pix(6, 6); - - int pixSize = 20; - QBrush br(color); - - QPixmap pm(2 * pixSize, 2 * pixSize); - QPainter pmp(&pm); - pmp.fillRect(0, 0, pixSize, pixSize, Qt::lightGray); - pmp.fillRect(pixSize, pixSize, pixSize, pixSize, Qt::lightGray); - pmp.fillRect(0, pixSize, pixSize, pixSize, Qt::darkGray); - pmp.fillRect(pixSize, 0, pixSize, pixSize, Qt::darkGray); - pmp.fillRect(0, 0, 2 * pixSize, 2 * pixSize, color); - br = QBrush(pm); - - QPainter p(&pix); - int corr = 1; - QRect r = pix.rect().adjusted(corr, corr, -corr, -corr); - p.setBrushOrigin((r.width() % pixSize + pixSize) / 2 + corr, (r.height() % pixSize + pixSize) / 2 + corr); - p.fillRect(r, br); - - p.fillRect(r.width() / 4 + corr, r.height() / 4 + corr, - r.width() / 2, r.height() / 2, - QColor(color.rgb())); - p.drawRect(pix.rect().adjusted(0, 0, -1, -1)); - - return pix; -} - static const char *glsl_keywords[] = { // ### TODO: get the keywords from the lexer "attribute", @@ -519,9 +488,13 @@ CodeCompletion::CodeCompletion(QObject *parent) : ICompletionCollector(parent), m_editor(0), m_startPosition(-1), - m_restartCompletion(false) + m_restartCompletion(false), + m_varIcon(":/glsleditor/images/var.png"), + m_functionIcon(":/glsleditor/images/func.png"), + m_typeIcon(":/glsleditor/images/type.png"), + m_otherIcon(":/glsleditor/images/other.png") { - const QIcon keywordIcon = iconForColor(Qt::darkYellow); + const QIcon keywordIcon(QLatin1String(":/glsleditor/images/keyword.png")); for (const char **it = glsl_keywords; *it; ++it) { TextEditor::CompletionItem item(this); item.text = QString::fromLatin1(*it); @@ -599,9 +572,7 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) CPlusPlus::ExpressionUnderCursor expressionUnderCursor; GLSLTextEditor *edit = qobject_cast<GLSLTextEditor *>(editor->widget()); - const QIcon symbolIcon = iconForColor(Qt::darkCyan); - - QStringList members; + QList<GLSL::Symbol *> members; QStringList specialMembers; bool functionCall = (ch == QLatin1Char('(') && pos == editor->position() - 1); @@ -705,11 +676,18 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) m_completions += m_keywordCompletions; } - foreach (const QString &s, members) { + foreach (GLSL::Symbol *s, members) { TextEditor::CompletionItem item(this); - item.icon = symbolIcon; - item.text = s; - if (specialMembers.contains(s)) + 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; + else + item.icon = m_otherIcon; + item.text = s->name(); + if (specialMembers.contains(item.text)) item.order = SpecialMemberOrder; m_completions.append(item); } diff --git a/src/plugins/glsleditor/glslcodecompletion.h b/src/plugins/glsleditor/glslcodecompletion.h index d3b110f1311..f8110bcffcb 100644 --- a/src/plugins/glsleditor/glslcodecompletion.h +++ b/src/plugins/glsleditor/glslcodecompletion.h @@ -106,6 +106,11 @@ private: QPointer<FunctionArgumentWidget> m_functionArgumentWidget; static bool glslCompletionItemLessThan(const TextEditor::CompletionItem &l, const TextEditor::CompletionItem &r); + + QIcon m_varIcon; + QIcon m_functionIcon; + QIcon m_typeIcon; + QIcon m_otherIcon; }; } // namespace Internal diff --git a/src/plugins/glsleditor/glsleditor.qrc b/src/plugins/glsleditor/glsleditor.qrc index cb1c737c9a1..40037911254 100644 --- a/src/plugins/glsleditor/glsleditor.qrc +++ b/src/plugins/glsleditor/glsleditor.qrc @@ -2,5 +2,10 @@ <qresource prefix="/glsleditor"> <file>GLSLEditor.mimetypes.xml</file> <file>images/glslfile.png</file> + <file>images/keyword.png</file> + <file>images/var.png</file> + <file>images/func.png</file> + <file>images/type.png</file> + <file>images/other.png</file> </qresource> </RCC> diff --git a/src/plugins/glsleditor/images/func.png b/src/plugins/glsleditor/images/func.png new file mode 100644 index 0000000000000000000000000000000000000000..e515e76e61f64cd285a4c67aaf1feaca38e84f8b GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFuwG3aSW-rwPf;ne_=<F<M+4R_DW6?_KZ2iD7;z1 z(?)`m)A2)!l5K~ah^@kr?s_)%M+dFz8O-zKd^!|oNiaWbDVoH*fo*l}cAYJ6%AUL5 ze*5l6S?ks-)8uBPnC;&D{`22+v%j}_Xg*YO=9K&FVy(aIdyv-GyWjs#iC%s8NWO7I z%!H~R#@CK2w7fsRHz0n0?PNcd$-8%yt+iCR#yf9D^*TQLa{{VYna`)iEuHG}sE32| z+yY;&`iGG%%Z*(AXf?gw6;S?qLi~TW`C<2N$1N6ICj9z|jh*${dvmKiDy}s|ZRPqF zCswptI^gDiUgzsuOLXL}FLwUJU)T9zv8U5ln+x)m8u_meXqk1aI&jjFgYUs<i(}ul z*M6{Vd7mOT;nH#64Q1aNgSq~&aIwr-FhTd(PW`6}MyyLE<z`o|x+f>8*t(SefQ)*P zb?LGu$8#o55~m|Nf;^OLtp2*l?ken-c)zdVfewq)a{<0Nk|KS4O3#gZpH%mrW)A;- z;^6c32Uvek&;D9+Tc+oe;&k1DE9||yR_p5PS*5OK=?PwN=b-1uxs0h>l<(Z}P`efy zefw5HU#_;uL&hE_*VR`9^WM5#{%n)``*~mR!X3;uxtF({YrXxo@#W%<!kQJ{Yl_Wx q%w?E!XPY+1_wwfEkM0eO42JdQ+?;~k(-;^S7(8A5T-G@yGywqqWCMr* literal 0 HcmV?d00001 diff --git a/src/plugins/glsleditor/images/keyword.png b/src/plugins/glsleditor/images/keyword.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a51858d9ed96ab65bf6544891cb48730607fa4 GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<_&E_u2*hFJ8zy==JZumKO-gZ=*ber)L{(l}U*(lYrb>e)@wpDMRVyg(t+=|IKD z3DYBA=*n`P6L=A(bwOzjzvqMQjt6spRIdJQ+;D&KBEx0jUXf{ed%iC&KDX|5l|8FO z@~>^V>}ySDNPf17XXL4zcYj;1_XL&zugJBgyVfxqGc!1GXmlN7@@RO%cIJ+O@eE0q zFSE|B6y5XvadD1-;Ivf79>L%H`j<02pTla<BH-ZCVVE>atwrFCAcLT%(dkY5R;_Z6 qy<VRhX~*!z{k;pz^!M=x>~ActNay&yX(9sy1B0ilpUXO@geCxM7=F+I literal 0 HcmV?d00001 diff --git a/src/plugins/glsleditor/images/other.png b/src/plugins/glsleditor/images/other.png new file mode 100644 index 0000000000000000000000000000000000000000..18d2941572e8a62e65954c4900aa9b1bdf21766f GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFiLy6IEGZ*Ix_iuR*QkavB$4s1;Qh%qW#5+J}}mB z-cOJ}vigVEZ;xoPssdFx7ftW?UG<wKrB#<KvCUb?EPwLPiJp_@D+0YP8gF#=Z&Q4# z@8iDA_Og2L!JTKaLYtE(sXX8J-Zu8Sr_6Enh8)}NxvwSL950#J{=JgGfAq4+!bAz1 zf1xZ#56oJ2bH*yhrsmH!`caEtTe)yJrbhnDdNeooGn?-X;k*gWpKR*2yO?G!t9+Ql z?JM=TQTo}Z=0%-KzXNO&)$e%SJN-uc0bA1{jjnr!$4qz*Yd=|_z_G6HalrlW;oGj( z%yycVy8f}nqFw7gzN!cfjYvDCx#6R36Vt@TjY`3O2RE(Z7P+x)uT@=nY<c2_e?LXG g)c=>3XX0TnT)4fydl%Dv1_lNOPgg&ebxsLQ0H~IsW&i*H literal 0 HcmV?d00001 diff --git a/src/plugins/glsleditor/images/type.png b/src/plugins/glsleditor/images/type.png new file mode 100644 index 0000000000000000000000000000000000000000..88432d2cb10c43de91fdb7ec7989285090747b0a GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFy8lcaSW-rHD&U7Z)r!7<NNbtKQ8*Z?c)>A7c1La z{;|7iR0MxnBB1-_-NG+Rn%d*M_`hbX5?}g{q1WDV;;+^0j)n^ymn@CY`k`znSZ2PF z<#AvBvAYx2*mv;D8SnmVXMF$rJswWQfSmWYPCR&c=kFTnSt6b`sYT4^cSj{|uztCD zzEbHfy(cmMwEI5perEsk^8vNc>w6l?_O{-e#~-rfnd9a6hqs<sCZ0IY|B#WcKx0Mh z;}99i+uppYnpxi;Twyva%rpCklx5OPjvo&TN+#SZYnf{Gm+xM{CgYWrthc8f{a}CO z|30UGZvHJ!iXl%~rFNz~%xF2Y)b`0D_9FjF9ljRkCt?h0%=k_liJlR=aqs5z<qBfm zfysBo<{IBW5!a>sxmG-TrmX1VLRDt@-S;0n$p|^fJTZA|z#Y43>k17uZ1?uQiQv)x zHm&QWc>N@m=!e%7A0C^2KquaVHSb@m1m|j*J>4qWy6)=}{_)zV#?OkA4iBBWJWl+> z71fDyJZ!Dz?!~(gzB?oLPwaht4wvQiz&20OpIm%v>pOS)*G8D<u1PJ{V*a$h^>|N| zl}uaa;eCe=9aXL4<vm?4aN%@I=<ey0r$_vquYDjXOXa5wD;u}p4*h_Gs<9g3osX8g gan0Q&n!s>~&vMP;?~fH37#J8lUHx3vIVCg!04d1;cmMzZ literal 0 HcmV?d00001 diff --git a/src/plugins/glsleditor/images/var.png b/src/plugins/glsleditor/images/var.png new file mode 100644 index 0000000000000000000000000000000000000000..089cfb45e5fc0f9629c508538ffc5886f79f84c1 GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFmCa5aSW-rwdC?yeP%}yh7a4f#%9jSn3C~G<LRM5 zrzQ=lLdA<}bLJd5%jqu2URYEp68=}*;`gdoD+L87D!HhvI{NNL|IN8&d)Gy|?pBHW zWOVcH&%Hlmrf1IjF#ic-bGKikvq^>Ryvt4t9|UUV9)9lg(_P%6y;WRoapT#oq4NW@ zV;<~YwqH!+p+|y_%%c_24KEJu@fX-9R`|Egy`61`NMM5`+ZWSo&J}4=-8<eY>7~m! z=`dd{wWzFWTYFmCVlu~%_V!wv^UJ&E{#;dIa71>$fQ2Zhiu`7UQ$`Z2*mkvfYCd7i z+E8yC&)LuOrC7S0f5M@_&P56#x)}*slUN?To0nvCt?Su5{o|j7A2*)6Czto`4;RNG z{~z~WS=1K(KXB}uP*;VSkyOUZcaNs&uXEhIY*m!<E#0J-2LD)ZvqsFT{44wRPSr25 zE&L0nMRj>{>^UZEzoC{Z#Js87Tf61SCI`_wrFRUvvX^Tu(+E5I^!N-z9_0$*Zb8%U zDT#Lv37zOn3H|d|E<sSN=FUCESwEOW%A@_P9(#RPI4r@f)$X2|Hp_IvdFw}BtP8$u jzp9w`k5~M$Zv!KP_b>mlc+-iX*k|x`^>bP0l+XkK26N@* literal 0 HcmV?d00001 -- GitLab