@@ -550,6 +550,20 @@ rgba_from_rgb(uint8_t r, uint8_t g, uint8_t b) {
550
550
return rgba_from_rgba (r, g, b, 255 );
551
551
}
552
552
553
+ /*
554
+ * Return rgba from #RRGGBBAA
555
+ */
556
+
557
+ static int32_t
558
+ rgba_from_hex8_string (const char *str) {
559
+ return rgba_from_rgba (
560
+ (h (str[0 ]) << 4 ) + h (str[1 ]),
561
+ (h (str[2 ]) << 4 ) + h (str[3 ]),
562
+ (h (str[4 ]) << 4 ) + h (str[5 ]),
563
+ (h (str[6 ]) << 4 ) + h (str[7 ])
564
+ );
565
+ }
566
+
553
567
/*
554
568
* Return rgb from "#RRGGBB".
555
569
*/
@@ -563,6 +577,20 @@ rgba_from_hex6_string(const char *str) {
563
577
);
564
578
}
565
579
580
+ /*
581
+ * Return rgba from #RGBA
582
+ */
583
+
584
+ static int32_t
585
+ rgba_from_hex4_string (const char *str) {
586
+ return rgba_from_rgba (
587
+ (h (str[0 ]) << 4 ) + h (str[0 ]),
588
+ (h (str[1 ]) << 4 ) + h (str[1 ]),
589
+ (h (str[2 ]) << 4 ) + h (str[2 ]),
590
+ (h (str[3 ]) << 4 ) + h (str[3 ])
591
+ );
592
+ }
593
+
566
594
/*
567
595
* Return rgb from "#RGB"
568
596
*/
@@ -673,16 +701,22 @@ rgba_from_hsl_string(const char *str, short *ok) {
673
701
* Return rgb from:
674
702
*
675
703
* - "#RGB"
704
+ * - "#RGBA"
676
705
* - "#RRGGBB"
706
+ * - "#RRGGBBAA"
677
707
*
678
708
*/
679
709
680
710
static int32_t
681
711
rgba_from_hex_string (const char *str, short *ok) {
682
712
size_t len = strlen (str);
683
713
*ok = 1 ;
684
- if (6 == len) return rgba_from_hex6_string (str);
685
- if (3 == len) return rgba_from_hex3_string (str);
714
+ switch (len) {
715
+ case 8 : return rgba_from_hex8_string (str);
716
+ case 6 : return rgba_from_hex6_string (str);
717
+ case 4 : return rgba_from_hex4_string (str);
718
+ case 3 : return rgba_from_hex3_string (str);
719
+ }
686
720
return *ok = 0 ;
687
721
}
688
722
@@ -705,7 +739,9 @@ rgba_from_name_string(const char *str, short *ok) {
705
739
* Return rgb from:
706
740
*
707
741
* - #RGB
742
+ * - #RGBA
708
743
* - #RRGGBB
744
+ * - #RRGGBBAA
709
745
* - rgb(r,g,b)
710
746
* - rgba(r,g,b,a)
711
747
* - hsl(h,s,l)
0 commit comments