@@ -444,27 +444,26 @@ bool HyperHdrInstance::setInputInactive(quint8 priority)
444
444
445
445
void HyperHdrInstance::setColor (int priority, const std::vector<ColorRgb>& ledColors, int timeout_ms, const QString& origin, bool clearEffects)
446
446
{
447
+ if (ledColors.size () == 0 )
448
+ return ;
449
+
447
450
// clear effect if this call does not come from an effect
448
451
if (clearEffects)
449
452
{
450
453
_effectEngine->channelCleared (priority);
451
454
}
452
455
453
456
// create full led vector from single/multiple colors
454
- size_t size = _ledString.leds ().size ();
455
457
std::vector<ColorRgb> newLedColors;
456
- while (true )
458
+ auto currentCol = ledColors.begin ();
459
+
460
+ while (newLedColors.size () < _ledString.leds ().size ())
457
461
{
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 ();
466
466
}
467
- end:
468
467
469
468
if (getPriorityInfo (priority).componentId != hyperhdr::COMP_COLOR)
470
469
{
@@ -672,37 +671,55 @@ void HyperHdrInstance::updateResult(std::vector<ColorRgb> _ledBuffer)
672
671
673
672
_globalLedBuffer = _ledBuffer;
674
673
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);
677
678
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
+ }
679
690
680
- for (ColorRgb& color : _ledBuffer)
691
+ if (disabledProcessing == 0 )
692
+ emit rawLedColors (_ledBuffer);
693
+ }
694
+
695
+ if (_ledString.colorOrder != ColorOrder::ORDER_RGB)
681
696
{
682
- // correct the color byte order
683
- switch (_ledString.colorOrder )
697
+ for (ColorRgb& color : _ledBuffer)
684
698
{
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
+ }
706
723
}
707
724
}
708
725
0 commit comments