@@ -444,27 +444,26 @@ bool HyperHdrInstance::setInputInactive(quint8 priority)
444444
445445void HyperHdrInstance::setColor (int priority, const std::vector<ColorRgb>& ledColors, int timeout_ms, const QString& origin, bool clearEffects)
446446{
447+ if (ledColors.size () == 0 )
448+ return ;
449+
447450 // clear effect if this call does not come from an effect
448451 if (clearEffects)
449452 {
450453 _effectEngine->channelCleared (priority);
451454 }
452455
453456 // create full led vector from single/multiple colors
454- size_t size = _ledString.leds ().size ();
455457 std::vector<ColorRgb> newLedColors;
456- while (true )
458+ auto currentCol = ledColors.begin ();
459+
460+ while (newLedColors.size () < _ledString.leds ().size ())
457461 {
458- for (const auto & entry : ledColors)
459- {
460- newLedColors.emplace_back (entry);
461- if (newLedColors.size () == size)
462- {
463- goto end;
464- }
465- }
462+ newLedColors.emplace_back (*currentCol);
463+
464+ if (++currentCol == ledColors.end ())
465+ currentCol = ledColors.begin ();
466466 }
467- end:
468467
469468 if (getPriorityInfo (priority).componentId != hyperhdr::COMP_COLOR )
470469 {
@@ -672,37 +671,55 @@ void HyperHdrInstance::updateResult(std::vector<ColorRgb> _ledBuffer)
672671
673672 _globalLedBuffer = _ledBuffer;
674673
675- // emit rawLedColors before transform
676- emit rawLedColors (_ledBuffer);
674+ for (int disabledProcessing = 0 ; disabledProcessing < 2 ; disabledProcessing++)
675+ {
676+ if (disabledProcessing == 1 )
677+ _raw2ledAdjustment->applyAdjustment (_ledBuffer);
677678
678- _raw2ledAdjustment->applyAdjustment (_ledBuffer);
679+ if (_ledString.hasDisabled )
680+ {
681+ auto ledIter = _ledString.leds ().begin ();
682+ for (ColorRgb& color : _ledBuffer)
683+ if (ledIter != _ledString.leds ().end ())
684+ {
685+ if ((*ledIter).disabled )
686+ color = ColorRgb::BLACK ;
687+ ++ledIter;
688+ }
689+ }
679690
680- for (ColorRgb& color : _ledBuffer)
691+ if (disabledProcessing == 0 )
692+ emit rawLedColors (_ledBuffer);
693+ }
694+
695+ if (_ledString.colorOrder != ColorOrder::ORDER_RGB )
681696 {
682- // correct the color byte order
683- switch (_ledString.colorOrder )
697+ for (ColorRgb& color : _ledBuffer)
684698 {
685- case ColorOrder::ORDER_RGB :
686- // leave as it is
687- break ;
688- case ColorOrder::ORDER_BGR :
689- std::swap (color.red , color.blue );
690- break ;
691- case ColorOrder::ORDER_RBG :
692- std::swap (color.green , color.blue );
693- break ;
694- case ColorOrder::ORDER_GRB :
695- std::swap (color.red , color.green );
696- break ;
697- case ColorOrder::ORDER_GBR :
698- std::swap (color.red , color.green );
699- std::swap (color.green , color.blue );
700- break ;
701-
702- case ColorOrder::ORDER_BRG :
703- std::swap (color.red , color.blue );
704- std::swap (color.green , color.blue );
705- break ;
699+ // correct the color byte order
700+ switch (_ledString.colorOrder )
701+ {
702+ case ColorOrder::ORDER_RGB :
703+ break ;
704+ case ColorOrder::ORDER_BGR :
705+ std::swap (color.red , color.blue );
706+ break ;
707+ case ColorOrder::ORDER_RBG :
708+ std::swap (color.green , color.blue );
709+ break ;
710+ case ColorOrder::ORDER_GRB :
711+ std::swap (color.red , color.green );
712+ break ;
713+ case ColorOrder::ORDER_GBR :
714+ std::swap (color.red , color.green );
715+ std::swap (color.green , color.blue );
716+ break ;
717+
718+ case ColorOrder::ORDER_BRG :
719+ std::swap (color.red , color.blue );
720+ std::swap (color.green , color.blue );
721+ break ;
722+ }
706723 }
707724 }
708725
0 commit comments