Browse Source

clamp r,g,b to 0..255, alpha to 0..1 (assuming everything is >= 0)

Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
v1.x
atomizer 14 years ago
committed by Tj Holowaychuk
parent
commit
d97748e9b6
  1. 14
      src/color.cc

14
src/color.cc

@ -20,14 +20,17 @@
*/ */
#define CHANNEL(NAME) \ #define CHANNEL(NAME) \
c = 0; \
if (*str >= '0' && *str <= '9') { \ if (*str >= '0' && *str <= '9') { \
do { \ do { \
NAME *= 10; \ c *= 10; \
NAME += *str++ - '0'; \ c += *str++ - '0'; \
} while (*str >= '0' && *str <= '9'); \ } while (*str >= '0' && *str <= '9'); \
} else { \ } else { \
return 0; \ return 0; \
} \ } \
if (c > 255) c = 255; \
NAME = c; \
while (' ' == *str || ',' == *str) str++; while (' ' == *str || ',' == *str) str++;
/* /*
@ -313,6 +316,7 @@ rgba_from_rgb_string(const char *str, short *ok) {
str += 4; str += 4;
WHITESPACE; WHITESPACE;
uint8_t r = 0, g = 0, b = 0; uint8_t r = 0, g = 0, b = 0;
int c;
CHANNEL(r); CHANNEL(r);
CHANNEL(g); CHANNEL(g);
CHANNEL(b); CHANNEL(b);
@ -331,15 +335,15 @@ rgba_from_rgba_string(const char *str, short *ok) {
str += 5; str += 5;
WHITESPACE; WHITESPACE;
uint8_t r = 0, g = 0, b = 0; uint8_t r = 0, g = 0, b = 0;
int c;
float a = 0; float a = 0;
CHANNEL(r); CHANNEL(r);
CHANNEL(g); CHANNEL(g);
CHANNEL(b); CHANNEL(b);
// TODO: less strict if (*str >= '1' && *str <= '9') {
if ('1' == *str) {
a = 1; a = 1;
} else { } else {
if ('0' == *str) a = 0, ++str; if ('0' == *str) ++str;
if ('.' == *str) { if ('.' == *str) {
++str; ++str;
float n = .1; float n = .1;

Loading…
Cancel
Save