MCPcopy Create free account
hub / github.com/TranslucentTB/TranslucentTB / SetColorChannel

Method SetColorChannel

Xaml/Controls/ColorPicker.cpp:862–938  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

860 }
861
862 void ColorPicker::SetColorChannel(txmp::ColorRepresentation representation, txmp::ColorChannel channel, double newValue)
863 {
864 Windows::UI::Color oldRgbColor = Color();
865 Windows::UI::Color newRgbColor{};
866
867 if (representation == txmp::ColorRepresentation::Hsva)
868 {
869 txmp::HsvColor oldHsvColor{};
870
871 // Warning: Always maintain/use HSV information in the saved HSV color
872 // This avoids loss of precision and drift caused by continuously converting to/from RGB
873 if (!m_SavedHsvColor)
874 {
875 oldHsvColor = Util::Color(oldRgbColor).ToHSV();
876 }
877 else
878 {
879 oldHsvColor = *m_SavedHsvColor;
880 }
881
882 switch (channel)
883 {
884 case txmp::ColorChannel::Channel1:
885 oldHsvColor.H = isnan(newValue) ? 0.0 : std::clamp(newValue, 0.0, 360.0);
886 break;
887
888 case txmp::ColorChannel::Channel2:
889 oldHsvColor.S = isnan(newValue) ? 0.0 : std::clamp(newValue / 100.0, 0.0, 1.0);
890 break;
891
892 case txmp::ColorChannel::Channel3:
893 oldHsvColor.V = isnan(newValue) ? 0.0 : std::clamp(newValue / 100.0, 0.0, 1.0);
894 break;
895
896 case txmp::ColorChannel::Alpha:
897 // Unlike color channels, default to no transparency
898 oldHsvColor.A = isnan(newValue) ? 1.0 : std::clamp(newValue / 100.0, 0.0, 1.0);
899 break;
900 }
901
902 newRgbColor = Util::Color::FromHSV(oldHsvColor);
903
904 // Must update HSV color
905 m_SavedHsvColor = oldHsvColor;
906 m_SavedHsvColorRgbEquivalent = newRgbColor;
907 }
908 else
909 {
910 switch (channel)
911 {
912 case txmp::ColorChannel::Channel1:
913 oldRgbColor.R = isnan(newValue) ? 0 : static_cast<uint8_t>(std::clamp(newValue, 0.0, 255.0));
914 break;
915
916 case txmp::ColorChannel::Channel2:
917 oldRgbColor.G = isnan(newValue) ? 0 : static_cast<uint8_t>(std::clamp(newValue, 0.0, 255.0));
918 break;
919

Callers

nothing calls this directly

Calls 2

ColorClass · 0.85
ToHSVMethod · 0.80

Tested by

no test coverage detected