49 auto invDiff = 1.0f / (float) (hi - lo);
51 auto red = (float) (hi -
r) * invDiff;
52 auto green = (float) (hi -
g) * invDiff;
53 auto blue = (float) (hi -
b) * invDiff;
55 if (
r == hi) hue = blue - green;
56 else if (
g == hi) hue = 2.0f +
red - blue;
57 else hue = 4.0f + green -
red;
73 auto r = (
int) col.getRed();
74 auto g = (
int) col.getGreen();
75 auto b = (
int) col.getBlue();
83 lightness = ((float) (hi + lo) / 2.0f) / 255.0f;
93 auto denominator = 1.0f - std::abs ((2.0f *
lightness) - 1.0f);
94 saturation = ((float) (hi - lo) / 255.0f) / denominator;
104 auto v =
l < 0.5f ?
l * (1.0f +
s) :
l +
s - (
l *
s);
109 auto min = (2.0f *
l) -
v;
110 auto sv = (
v -
min) /
v;
112 h = ((
h - std::floor (
h)) * 360.0f) / 60.0f;
113 auto f =
h - std::floor (
h);
114 auto vsf =
v * sv *
f;
115 auto mid1 =
min + vsf;
136 auto r = (
int) col.getRed();
137 auto g = (
int) col.getGreen();
138 auto b = (
int) col.getBlue();
161 v =
jlimit (0.0f, 255.0f,
v * 255.0f);
165 return PixelARGB (alpha, intV, intV, intV);
168 h = ((
h - std::floor (
h)) * 360.0f) / 60.0f;
169 auto f =
h - std::floor (
h);
188 auto r =
c.getFloatRed();
189 auto g =
c.getFloatGreen();
190 auto b =
c.getFloatBlue();
192 y = 0.2999f *
r + 0.5870f *
g + 0.1140f *
b;
193 i = 0.5957f *
r - 0.2744f *
g - 0.3212f *
b;
194 q = 0.2114f *
r - 0.5225f *
g - 0.3113f *
b;
195 alpha =
c.getFloatAlpha();
201 y - 0.2721f *
i - 0.6474f *
q,
202 y - 1.1070f *
i + 1.7046f *
q,
211bool Colour::operator== (
const Colour& other)
const noexcept {
return argb.getNativeARGB() == other.argb.getNativeARGB(); }
212bool Colour::operator!= (
const Colour& other)
const noexcept {
return argb.getNativeARGB() != other.argb.getNativeARGB(); }
216 :
argb (
static_cast<uint8> ((col >> 24) & 0xff),
217 static_cast<uint8> ((col >> 16) & 0xff),
218 static_cast<uint8> ((col >> 8) & 0xff),
219 static_cast<uint8> (col & 0xff))
225 argb.setARGB (0xff,
red, green, blue);
235 argb.setARGB (alpha,
red, green, blue);
262 return Colour (hue, saturation, brightness, alpha);
284 :
argb (
Colour (rgb.getInARGBMaskOrder()).argb)
289 :
argb (
Colour (alpha.getInARGBMaskOrder()).argb)
303 return argb.getInARGBMaskOrder();
326 jassert (newAlpha >= 0 && newAlpha <= 1.0f);
335 jassert (alphaMultiplier >= 0);
350 auto invA = 0xff - (
int) src.getAlpha();
351 auto resA = 0xff - (((0xff - destAlpha) * invA) >> 8);
356 auto da = (invA * destAlpha) / resA;
358 return Colour ((
uint8) (src.getRed() + ((((
int)
getRed() - src.getRed()) * da) >> 8)),
359 (
uint8) (src.getGreen() + ((((
int)
getGreen() - src.getGreen()) * da) >> 8)),
360 (
uint8) (src.getBlue() + ((((
int)
getBlue() - src.getBlue()) * da) >> 8)),
366 if (proportionOfOther <= 0)
369 if (proportionOfOther >= 1.0f)
428 hsb.
hue += amountToRotate;
464 amount = 1.0f / (1.0f + amount);
475 amount = 1.0f / (1.0f + amount);
487 return Colour (level, level, level);
503 if (std::abs (bg.
y - fg.
y) >= minContrast)
506 auto y1 =
jmax (0.0f, bg.
y - minContrast);
507 auto y2 =
jmin (1.0f, bg.
y + minContrast);
508 fg.
y = (std::abs (y1 - bg.
y) > std::abs (y2 - bg.
y)) ? y1 : y2;
516 auto b1 = colour1.getPerceivedBrightness();
517 auto b2 = colour2.getPerceivedBrightness();
518 float best = 0.0f, bestDist = 0.0f;
520 for (
float i = 0.0f;
i < 1.0f;
i += 0.02f)
522 auto d1 = std::abs (
i - b1);
523 auto d2 = std::abs (
i - b2);
524 auto dist =
jmin (d1, d2, 1.0f - d1, 1.0f - d2);
533 return colour1.overlaidWith (colour2.withMultipliedAlpha (0.5f))
534 .withBrightness (best);
567 void runTest()
override
569 auto testColour = [
this] (Colour colour,
571 uint8 expectedAlpha = 255,
float expectedFloatAlpha = 1.0f)
573 expectEquals (colour.getRed(), expectedRed);
574 expectEquals (colour.getGreen(), expectedGreen);
575 expectEquals (colour.getBlue(), expectedBlue);
576 expectEquals (colour.getAlpha(), expectedAlpha);
577 expectEquals (colour.getFloatAlpha(), expectedFloatAlpha);
580 beginTest (
"Constructors");
588 Colour c3 ((
uint32) 0xffffffff);
594 Colour c5 (255, 255, 255);
613 testColour (Colour::fromHSV (0.0f, 0.0f, 0.0f, 1.0f), 0, 0, 0);
615 testColour (Colour::fromHSV (0.0f, 0.0f, 1.0f, 1.0f), 255, 255, 255);
617 testColour (Colour::fromHSV (0.0f, 1.0f, 1.0f, 1.0f), 255, 0, 0);
618 testColour (Colour::fromHSV (1.0f, 1.0f, 1.0f, 1.0f), 255, 0, 0);
620 testColour (Colour::fromHSV (120 / 360.0f, 1.0f, 1.0f, 1.0f), 0, 255, 0);
622 testColour (Colour::fromHSV (240 / 360.0f, 1.0f, 1.0f, 1.0f), 0, 0, 255);
624 testColour (Colour::fromHSV (60 / 360.0f, 1.0f, 1.0f, 1.0f), 255, 255, 0);
626 testColour (Colour::fromHSV (180 / 360.0f, 1.0f, 1.0f, 1.0f), 0, 255, 255);
628 testColour (Colour::fromHSV (300 / 360.0f, 1.0f, 1.0f, 1.0f), 255, 0, 255);
630 testColour (Colour::fromHSV (0.0f, 0.0f, 0.75f, 1.0f), 191, 191, 191);
632 testColour (Colour::fromHSV (0.0f, 0.0f, 0.5f, 1.0f), 128, 128, 128);
634 testColour (Colour::fromHSV (0.0f, 1.0f, 0.5f, 1.0f), 128, 0, 0);
636 testColour (Colour::fromHSV (60 / 360.0f, 1.0f, 0.5f, 1.0f), 128, 128, 0);
638 testColour (Colour::fromHSV (120 / 360.0f, 1.0f, 0.5f, 1.0f), 0, 128, 0);
640 testColour (Colour::fromHSV (300 / 360.0f, 1.0f, 0.5f, 1.0f), 128, 0, 128);
642 testColour (Colour::fromHSV (180 / 360.0f, 1.0f, 0.5f, 1.0f), 0, 128, 128);
644 testColour (Colour::fromHSV (240 / 360.0f, 1.0f, 0.5f, 1.0f), 0, 0, 128);
650 testColour (Colour::fromHSL (0.0f, 0.0f, 0.0f, 1.0f), 0, 0, 0);
652 testColour (Colour::fromHSL (0.0f, 0.0f, 1.0f, 1.0f), 255, 255, 255);
654 testColour (Colour::fromHSL (0.0f, 1.0f, 0.5f, 1.0f), 255, 0, 0);
655 testColour (Colour::fromHSL (1.0f, 1.0f, 0.5f, 1.0f), 255, 0, 0);
657 testColour (Colour::fromHSL (120 / 360.0f, 1.0f, 0.5f, 1.0f), 0, 255, 0);
659 testColour (Colour::fromHSL (240 / 360.0f, 1.0f, 0.5f, 1.0f), 0, 0, 255);
661 testColour (Colour::fromHSL (60 / 360.0f, 1.0f, 0.5f, 1.0f), 255, 255, 0);
663 testColour (Colour::fromHSL (180 / 360.0f, 1.0f, 0.5f, 1.0f), 0, 255, 255);
665 testColour (Colour::fromHSL (300 / 360.0f, 1.0f, 0.5f, 1.0f), 255, 0, 255);
667 testColour (Colour::fromHSL (0.0f, 0.0f, 0.75f, 1.0f), 191, 191, 191);
669 testColour (Colour::fromHSL (0.0f, 0.0f, 0.5f, 1.0f), 128, 128, 128);
671 testColour (Colour::fromHSL (0.0f, 1.0f, 0.25f, 1.0f), 128, 0, 0);
673 testColour (Colour::fromHSL (60 / 360.0f, 1.0f, 0.25f, 1.0f), 128, 128, 0);
675 testColour (Colour::fromHSL (120 / 360.0f, 1.0f, 0.25f, 1.0f), 0, 128, 0);
677 testColour (Colour::fromHSL (300 / 360.0f, 1.0f, 0.25f, 1.0f), 128, 0, 128);
679 testColour (Colour::fromHSL (180 / 360.0f, 1.0f, 0.25f, 1.0f), 0, 128, 128);
681 testColour (Colour::fromHSL (240 / 360.0f, 1.0f, 0.25f, 1.0f), 0, 0, 128);
684 beginTest (
"Modifiers");
686 Colour
red (255, 0, 0);
687 testColour (
red, 255, 0, 0);
689 testColour (
red.withHue (120.0f / 360.0f), 0, 255, 0);
690 testColour (
red.withSaturation (0.5f), 255, 128, 128);
691 testColour (
red.withSaturationHSL (0.5f), 191, 64, 64);
692 testColour (
red.withBrightness (0.5f), 128, 0, 0);
693 testColour (
red.withLightness (1.0f), 255, 255, 255);
694 testColour (
red.withRotatedHue (120.0f / 360.0f), 0, 255, 0);
695 testColour (
red.withRotatedHue (480.0f / 360.0f), 0, 255, 0);
696 testColour (
red.withRotatedHue (-240.0f / 360.0f), 0, 255, 0);
697 testColour (
red.withRotatedHue (-600.0f / 360.0f), 0, 255, 0);
698 testColour (
red.withMultipliedSaturation (0.0f), 255, 255, 255);
699 testColour (
red.withMultipliedSaturationHSL (0.0f), 128, 128, 128);
700 testColour (
red.withMultipliedBrightness (0.5f), 128, 0, 0);
701 testColour (
red.withMultipliedLightness (2.0f), 255, 255, 255);
702 testColour (
red.withMultipliedLightness (1.0f), 255, 0, 0);
703 testColour (
red.withLightness (
red.getLightness()), 255, 0, 0);
708static ColourTests colourTests;
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
uint8_t uint8
Definition basics.h:86
uint32_t uint32
Definition basics.h:90
static String toHexString(int number)
Definition String.cpp:1830
Definition juce_Colour.h:38
uint8 getBlue() const noexcept
Definition juce_Colour.h:178
JUCE_NODISCARD Colour withSaturation(float newSaturation) const noexcept
Definition juce_Colour.cpp:411
Colour withAlpha(uint8 newAlpha) const noexcept
Definition juce_Colour.cpp:317
String toString() const
Definition juce_Colour.cpp:538
static Colour fromHSL(float hue, float saturation, float lightness, float alpha) noexcept
Definition juce_Colour.cpp:265
PixelARGB argb
Definition juce_Colour.h:413
JUCE_NODISCARD Colour withLightness(float newLightness) const noexcept
Definition juce_Colour.cpp:415
JUCE_NODISCARD Colour withMultipliedBrightness(float amount) const noexcept
Definition juce_Colour.cpp:446
float getFloatGreen() const noexcept
Definition juce_Colour.cpp:382
JUCE_NODISCARD Colour brighter(float amountBrighter=0.4f) const noexcept
Definition juce_Colour.cpp:461
float getSaturation() const noexcept
Definition juce_Colour.cpp:404
JUCE_NODISCARD Colour withMultipliedSaturation(float multiplier) const noexcept
Definition juce_Colour.cpp:432
static Colour fromRGBA(uint8 red, uint8 green, uint8 blue, uint8 alpha) noexcept
Definition juce_Colour.cpp:238
JUCE_NODISCARD Colour withHue(float newHue) const noexcept
Definition juce_Colour.cpp:410
JUCE_NODISCARD Colour darker(float amountDarker=0.4f) const noexcept
Definition juce_Colour.cpp:472
float getFloatBlue() const noexcept
Definition juce_Colour.cpp:383
float getSaturationHSL() const noexcept
Definition juce_Colour.cpp:407
float getBrightness() const noexcept
Definition juce_Colour.cpp:405
static JUCE_NODISCARD Colour greyLevel(float brightness) noexcept
Definition juce_Colour.cpp:484
static JUCE_NODISCARD Colour fromString(StringRef encodedColourString)
Definition juce_Colour.cpp:543
float getLightness() const noexcept
Definition juce_Colour.cpp:408
void getHSL(float &hue, float &saturation, float &lightness) const noexcept
Definition juce_Colour.cpp:395
JUCE_NODISCARD Colour withRotatedHue(float amountToRotate) const noexcept
Definition juce_Colour.cpp:425
Colour interpolatedWith(Colour other, float proportionOfOther) const noexcept
Definition juce_Colour.cpp:364
Colour withMultipliedAlpha(float alphaMultiplier) const noexcept
Definition juce_Colour.cpp:333
String toDisplayString(bool includeAlphaValue) const
Definition juce_Colour.cpp:548
const PixelARGB getPixelARGB() const noexcept
Definition juce_Colour.cpp:294
JUCE_NODISCARD Colour withSaturationHSL(float newSaturation) const noexcept
Definition juce_Colour.cpp:414
uint8 getGreen() const noexcept
Definition juce_Colour.h:173
bool isOpaque() const noexcept
Definition juce_Colour.cpp:312
JUCE_NODISCARD Colour withMultipliedSaturationHSL(float multiplier) const noexcept
Definition juce_Colour.cpp:439
uint32 getARGB() const noexcept
Definition juce_Colour.cpp:301
static Colour fromRGB(uint8 red, uint8 green, uint8 blue) noexcept
Definition juce_Colour.cpp:228
JUCE_NODISCARD Colour withBrightness(float newBrightness) const noexcept
Definition juce_Colour.cpp:412
void getHSB(float &hue, float &saturation, float &brightness) const noexcept
Definition juce_Colour.cpp:387
uint8 getRed() const noexcept
Definition juce_Colour.h:168
float getFloatRed() const noexcept
Definition juce_Colour.cpp:381
uint8 getAlpha() const noexcept
Definition juce_Colour.h:211
static Colour fromHSV(float hue, float saturation, float brightness, float alpha) noexcept
Definition juce_Colour.cpp:260
float getFloatAlpha() const noexcept
Definition juce_Colour.cpp:384
static Colour fromFloatRGBA(float red, float green, float blue, float alpha) noexcept
Definition juce_Colour.cpp:248
JUCE_NODISCARD Colour contrasting(float amount=1.0f) const noexcept
Definition juce_Colour.cpp:491
bool isTransparent() const noexcept
Definition juce_Colour.cpp:307
JUCE_NODISCARD Colour withMultipliedLightness(float amount) const noexcept
Definition juce_Colour.cpp:453
float getHue() const noexcept
Definition juce_Colour.cpp:403
float getPerceivedBrightness() const noexcept
Definition juce_Colour.cpp:417
Colour overlaidWith(Colour foregroundColour) const noexcept
Definition juce_Colour.cpp:343
Definition juce_PixelFormats.h:59
forcedinline void tween(const Pixel &src, uint32 amount) noexcept
Definition juce_PixelFormats.h:184
forcedinline void setAlpha(uint8 newAlpha) noexcept
Definition juce_PixelFormats.h:201
forcedinline void unpremultiply() noexcept
Definition juce_PixelFormats.h:253
forcedinline uint8 getAlpha() const noexcept
Definition juce_PixelFormats.h:107
Definition juce_PixelFormats.h:600
Definition juce_PixelFormats.h:354
Definition juce_String.h:53
Definition juce_StringRef.h:62
String::CharPointerType text
Definition juce_StringRef.h:130
Definition juce_UnitTest.h:70
String toUpperCase() const
Definition String.cpp:1331
String paddedLeft(water_uchar padCharacter, int minimumLength) const
Definition String.cpp:1042
int * l
Definition inflate.c:1579
unsigned v[N_MAX]
Definition inflate.c:1584
int g
Definition inflate.c:1573
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
unsigned f
Definition inflate.c:1572
static void c8(register WDL_FFT_COMPLEX *a)
Definition fft.c:314
static void c2(register WDL_FFT_COMPLEX *a)
Definition fft.c:270
static void c4(register WDL_FFT_COMPLEX *a)
Definition fft.c:283
Definition juce_Colour.cpp:30
static float getHue(Colour col)
Definition juce_Colour.cpp:36
static uint8 floatToUInt8(float n) noexcept
Definition juce_Colour.cpp:31
const Colour black
Definition juce_Colours.h:50
const Colour white
Definition juce_Colours.h:180
Definition juce_UnitTestCategories.h:27
Definition carla_juce.cpp:31
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
bool approximatelyEqual(Type a, Type b) noexcept
Definition juce_MathsFunctions.h:324
unsigned int uint32
Definition juce_MathsFunctions.h:45
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
constexpr NumericType square(NumericType n) noexcept
Definition juce_MathsFunctions.h:580
unsigned char uint8
Definition juce_MathsFunctions.h:37
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
#define min(x, y)
Definition os.h:74
png_structrp int png_fixed_point red
Definition png.h:1083
static ResultType parse(CharPointerType t) noexcept
Definition juce_CharacterFunctions.h:497
Definition juce_Colour.cpp:133
HSB(Colour col) noexcept
Definition juce_Colour.cpp:134
static PixelARGB toRGB(float h, float s, float v, uint8 alpha) noexcept
Definition juce_Colour.cpp:159
float brightness
Definition juce_Colour.cpp:180
float saturation
Definition juce_Colour.cpp:180
float hue
Definition juce_Colour.cpp:180
Colour toColour(Colour original) const noexcept
Definition juce_Colour.cpp:154
Definition juce_Colour.cpp:70
float saturation
Definition juce_Colour.cpp:128
float hue
Definition juce_Colour.cpp:128
static PixelARGB toRGB(float h, float s, float l, uint8 alpha) noexcept
Definition juce_Colour.cpp:102
HSL(Colour col) noexcept
Definition juce_Colour.cpp:71
float lightness
Definition juce_Colour.cpp:128
Colour toColour(Colour original) const noexcept
Definition juce_Colour.cpp:97
Definition juce_Colour.cpp:185
float q
Definition juce_Colour.cpp:206
float y
Definition juce_Colour.cpp:206
Colour toColour() const noexcept
Definition juce_Colour.cpp:198
float alpha
Definition juce_Colour.cpp:206
YIQ(Colour c) noexcept
Definition juce_Colour.cpp:186
float i
Definition juce_Colour.cpp:206
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
int r
Definition crypt.c:458
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137