Index: src/OFColor.h ================================================================== --- src/OFColor.h +++ src/OFColor.h @@ -28,10 +28,29 @@ { float _red, _green, _blue, _alpha; OF_RESERVE_IVARS(4) } +#ifdef OF_HAVE_CLASS_PROPERTIES +@property (class, readonly, nonatomic) OFColor *black; +@property (class, readonly, nonatomic) OFColor *silver; +@property (class, readonly, nonatomic) OFColor *grey; +@property (class, readonly, nonatomic) OFColor *white; +@property (class, readonly, nonatomic) OFColor *maroon; +@property (class, readonly, nonatomic) OFColor *red; +@property (class, readonly, nonatomic) OFColor *purple; +@property (class, readonly, nonatomic) OFColor *fuchsia; +@property (class, readonly, nonatomic) OFColor *green; +@property (class, readonly, nonatomic) OFColor *lime; +@property (class, readonly, nonatomic) OFColor *olive; +@property (class, readonly, nonatomic) OFColor *yellow; +@property (class, readonly, nonatomic) OFColor *navy; +@property (class, readonly, nonatomic) OFColor *blue; +@property (class, readonly, nonatomic) OFColor *teal; +@property (class, readonly, nonatomic) OFColor *aqua; +#endif + /*! * @brief Creates a new color with the specified red, green, blue and alpha * value. * * @param red The red value of the color, between 0.0 and 1.0 @@ -43,10 +62,154 @@ + (instancetype)colorWithRed: (float)red green: (float)green blue: (float)blue alpha: (float)alpha; +/*! + * @brief Returns the HTML color `black`. + * + * The RGBA value is (0, 0, 0, 1). + * + * @return The HTML color `black` + */ ++ (OFColor *)black; + +/*! + * @brief Returns the HTML color `silver`. + * + * The RGBA value is (0.75, 0.75, 0.75, 1). + * + * @return The HTML color `silver` + */ ++ (OFColor *)silver; + +/*! + * @brief Returns the HTML color `grey`. + * + * The RGBA value is (0.5, 0.5, 0.5, 1). + * + * @return The HTML color `grey` + */ ++ (OFColor *)grey; + +/*! + * @brief Returns the HTML color `white`. + * + * The RGBA value is (1, 1, 1, 1). + * + * @return The HTML color `white` + */ ++ (OFColor *)white; + +/*! + * @brief Returns the HTML color `maroon`. + * + * The RGBA value is (0.5, 0, 0, 1). + * + * @return The HTML color `maroon` + */ ++ (OFColor *)maroon; + +/*! + * @brief Returns the HTML color `red`. + * + * The RGBA value is (1, 0, 0, 1). + * + * @return The HTML color `red` + */ ++ (OFColor *)red; + +/*! + * @brief Returns the HTML color `purple`. + * + * The RGBA value is (0.5, 0, 0.5, 1). + * + * @return The HTML color `purple` + */ ++ (OFColor *)purple; + +/*! + * @brief Returns the HTML color `fuchsia`. + * + * The RGBA value is (1, 0, 1, 1). + * + * @return The HTML color `fuchsia` + */ ++ (OFColor *)fuchsia; + +/*! + * @brief Returns the HTML color `green`. + * + * The RGBA value is (0, 0.5, 0, 1). + * + * @return The HTML color `green` + */ ++ (OFColor *)green; + +/*! + * @brief Returns the HTML color `lime`. + * + * The RGBA value is (0, 1, 0, 1). + * + * @return The HTML color `lime` + */ ++ (OFColor *)lime; + +/*! + * @brief Returns the HTML color `olive`. + * + * The RGBA value is (0.5, 0.5, 0, 1). + * + * @return The HTML color `olive` + */ ++ (OFColor *)olive; + +/*! + * @brief Returns the HTML color `yellow`. + * + * The RGBA value is (1, 1, 0, 1). + * + * @return The HTML color `yellow` + */ ++ (OFColor *)yellow; + +/*! + * @brief Returns the HTML color `navy`. + * + * The RGBA value is (0, 0, 0.5, 1). + * + * @return The HTML color `navy` + */ ++ (OFColor *)navy; + +/*! + * @brief Returns the HTML color `blue`. + * + * The RGBA value is (0, 0, 1, 1). + * + * @return The HTML color `blue` + */ ++ (OFColor *)blue; + +/*! + * @brief Returns the HTML color `teal`. + * + * The RGBA value is (0, 0.5, 0.5, 1). + * + * @return The HTML color `teal` + */ ++ (OFColor *)teal; + +/*! + * @brief Returns the HTML color `aqua`. + * + * The RGBA value is (0, 1, 1, 1). + * + * @return The HTML color `aqua` + */ ++ (OFColor *)aqua; + /*! * @brief Initializes an already allocated color with the specified red, green, * blue and alpha value. * * @param red The red value of the color, between 0.0 and 1.0 Index: src/OFColor.m ================================================================== --- src/OFColor.m +++ src/OFColor.m @@ -16,14 +16,53 @@ */ #include "config.h" #import "OFColor.h" + +#import "once.h" #import "OFInvalidArgumentException.h" @implementation OFColor +#define PREDEFINED_COLOR(name, r, g, b) \ + static OFColor *name = nil; \ + \ + static void \ + initPredefinedColor_##name(void) \ + { \ + name = [[OFColor alloc] initWithRed: r \ + green: g \ + blue: b \ + alpha: 1]; \ + } \ + \ + + (OFColor *)name \ + { \ + static of_once_t onceControl = OF_ONCE_INIT; \ + of_once(&onceControl, initPredefinedColor_##name); \ + \ + return name; \ + } + +PREDEFINED_COLOR(black, 0.00, 0.00, 0.00) +PREDEFINED_COLOR(silver, 0.75, 0.75, 0.75) +PREDEFINED_COLOR(grey, 0.50, 0.50, 0.50) +PREDEFINED_COLOR(white, 1.00, 1.00, 1.00) +PREDEFINED_COLOR(maroon, 0.50, 0.00, 0.00) +PREDEFINED_COLOR(red, 1.00, 0.00, 0.00) +PREDEFINED_COLOR(purple, 0.50, 0.00, 0.50) +PREDEFINED_COLOR(fuchsia, 1.00, 0.00, 1.00) +PREDEFINED_COLOR(green, 0.00, 0.50, 0.00) +PREDEFINED_COLOR(lime, 0.00, 1.00, 0.00) +PREDEFINED_COLOR(olive, 0.50, 0.50, 0.00) +PREDEFINED_COLOR(yellow, 1.00, 1.00, 0.00) +PREDEFINED_COLOR(navy, 0.00, 0.00, 0.50) +PREDEFINED_COLOR(blue, 0.00, 0.00, 1.00) +PREDEFINED_COLOR(teal, 0.00, 0.50, 0.50) +PREDEFINED_COLOR(aqua, 0.00, 1.00, 1.00) + + (instancetype)colorWithRed: (float)red green: (float)green blue: (float)blue alpha: (float)alpha {