void KbPerf::applyIndicators(int modeIndex, const bool indicatorState[]){ light()->resetIndicators(); if(_iOpacity <= 0.f) return; if(_dpiIndicator){ // Set DPI indicator according to index int index = baseDpiIdx(); if(index == -1 || index > OTHER) index = OTHER; lightIndicator("dpi", dpiClr[index].rgba()); } // KB indicators if(iEnable[MODE]){ for(int i = 0; i < Kb::HWMODE_MAX; i++){ char name[4]; snprintf(name, sizeof(name), "m%d", i + 1); if(modeIndex == i) lightIndicator(name, iColor[MODE][0].rgba()); else lightIndicator(name, iColor[MODE][1].rgba()); } } if(iEnable[MACRO]) lightIndicator("mr", iColor[MUTE][1].rgba()); if(iEnable[LIGHT]){ switch(light()->dimming()){ case 0: // 100% lightIndicator("light", light100Color.rgba()); break; case 1: // 67% lightIndicator("light", iColor[LIGHT][1].rgba()); break; case 2: // 33% case 3: // light off lightIndicator("light", iColor[LIGHT][0].rgba()); break; } } if(iEnable[LOCK]){ if(bind()->winLock()) lightIndicator("lock", iColor[LOCK][0].rgba()); else lightIndicator("lock", iColor[LOCK][1].rgba()); } if(iEnable[MUTE]){ switch(getMuteState()){ case MUTED: lightIndicator("mute", iColor[MUTE][0].rgba()); break; case UNMUTED: lightIndicator("mute", iColor[MUTE][1].rgba()); break; default: lightIndicator("mute", muteNAColor.rgba()); break; } } // Lock lights if(iEnable[NUM]) lightIndicator("numlock", indicatorState[0] ? iColor[NUM][0].rgba() : iColor[NUM][1].rgba()); if(iEnable[CAPS]) lightIndicator("caps", indicatorState[1] ? iColor[CAPS][0].rgba() : iColor[CAPS][1].rgba()); if(iEnable[SCROLL]) lightIndicator("scroll", indicatorState[2] ? iColor[SCROLL][0].rgba() : iColor[SCROLL][1].rgba()); }
QHash<QString, QRgb> KbPerf::indicatorLights(int modeIndex, const bool indicatorState[]) const { QHash<QString, QRgb> res; if(_iOpacity <= 0.f) return res; if(_dpiIndicator){ // Set DPI indicator according to index int index = curDpiIdx(); if(index == -1 || index > OTHER) index = OTHER; res["dpi"] = dpiClr[index].rgba(); } // KB indicators if(iEnable[MODE]){ for(int i = 0; i < Kb::HWMODE_MAX; i++){ QString name = "m%1"; name = name.arg(i + 1); if(modeIndex == i) res[name] = iColor[MODE][0].rgba(); else res[name] = iColor[MODE][1].rgba(); } } if(iEnable[MACRO]) res["mr"] = iColor[MUTE][1].rgba(); if(iEnable[LIGHT]){ switch(light()->dimming()){ case 0: res["light"] = light100Color.rgba(); break; case 1: res["light"] = iColor[LIGHT][1].rgba(); break; case 2: res["light"] = iColor[LIGHT][0].rgba(); break; // 3 (light off): do nothing } } if(iEnable[LOCK]){ if(bind()->winLock()) res["lock"] = iColor[LOCK][0].rgba(); else res["lock"] = iColor[LOCK][1].rgba(); } if(iEnable[MUTE]){ switch(getMuteState()){ case MUTED: res["mute"] = iColor[MUTE][0].rgba(); break; case UNMUTED: res["mute"] = iColor[MUTE][1].rgba(); break; default: res["mute"] = muteNAColor.rgba(); break; } } // Lock lights if(iEnable[NUM]) res["numlock"] = indicatorState[0] ? iColor[NUM][0].rgba() : iColor[NUM][1].rgba(); if(iEnable[CAPS]) res["caps"] = indicatorState[1] ? iColor[CAPS][0].rgba() : iColor[CAPS][1].rgba(); if(iEnable[SCROLL]) res["scroll"] = indicatorState[2] ? iColor[SCROLL][0].rgba() : iColor[SCROLL][1].rgba(); // Apply opacity if needed if(_iOpacity < 1.f){ QMutableHashIterator<QString, QRgb> i(res); while(i.hasNext()){ i.next(); QRgb& rgba = i.value(); int a = round(qAlpha(rgba) * _iOpacity); if(a <= 0) i.remove(); else rgba = qRgba(qRed(rgba), qGreen(rgba), qBlue(rgba), a); } } return res; }