/** Copyright 2013, 2020 Haiku, Inc. All rights reserved.* Distributed under the terms of the MIT License.** Authors:* John Scipione, jscipione@gmail.com* Niels Sascha Reedijk, niels.reedijk@gmail.com** Corresponds to:* headers/os/interface/GraphicsDefs.h hrev57597* src/kits/interface/GraphicsDefs.cpp hrev49977*//*!\file GraphicsDefs.h\ingroup interface\ingroup libbe\brief Graphics-related functions and variables used by the Interface Kit.*////// Pattern //////*!\name Patterns*///! @{/*!\struct pattern\ingroup interface\ingroup libbe\brief A pattern to use when drawing.\since BeOS R3*//*!\fn bool operator==(const pattern &a, const pattern &b)\brief Comparison operator for two patterns\retval true The patterns match\retval false The patterns do not match\since Haiku R1*//*!\fn bool operator!=(const pattern &a, const pattern &b)\brief Comparison operator for two patterns\retval true The patterns do not match\retval false The patterns match\since Haiku R1*//*!\var B_SOLID_HIGHDraw using the view's high color.\since BeOS R3*//*!\var B_MIXED_COLORSDraw a pattern of the view's high and low colors.\since BeOS R3*//*!\var B_SOLID_LOWDraw using the view's low color.\since BeOS R3*///! @}///// struct rgb_color //////*!\name RGB Colors*///! @{/*!\struct rgb_color\ingroup interface\ingroup libbe\brief Structure representing a 32 bit RGBA color.\since BeOS R3*//*!\var uint8 rgb_color::red\brief Red value for the color.\since BeOS R3*//*!\var uint8 rgb_color::green\brief Green value for the color.\since BeOS R3*//*!\var uint8 rgb_color::blue\brief Blue value for the color.\since BeOS R3*//*!\var uint8 rgb_color::alpha\brief Alpha value for the color.\since BeOS R3*//*!\fn rgb_color& rgb_color::set_to(uint8 r, uint8 g, uint8 b, uint8 a=255)\brief Helper method to set all values of the color.\param r Red value.\param g Green value.\param b Blue value.\param a Alpha value.\return A reference to this object.\since Haiku R1*//*!\fn bool rgb_color::operator==(const rgb_color &other) const\brief Comparison operator.\param other The other color to compare to.\retval true The colors match.\retval false The colors are different.\since Haiku R1*//*!\fn bool rgb_color::operator!=(const rgb_color &other) const\brief Comparison operator.\param other The other color to compare to.\retval true The colors are different.\retval false The colors match.\since Haiku R1*//*!\fn rgb_color& rgb_color::operator=(const rgb_color &other)\brief Assign values from another color object.\param other The other color to copy.\return A reference to this object.\since Haiku R1*//*!\fn int32 rgb_color::Brightness() const\brief Calculates a value representing the brightness of this color.This method calculates the perceptual brightness of a color.\return A value representing the brightness. (0-255)\since Haiku R1*//*!\fn bool rgb_color::IsLight() const\brief Determines if the color is light.A color is considered 'light' if its Brightness() is > 127.\since Haiku R1*//*!\fn bool rgb_color::IsDark() const\brief Determines if the color is dark.A color is considered 'dark' if its Brightness() is <= 127.\since Haiku R1*//*!\fn static int32 rgb_color::Contrast(rgb_color colorA, rgb_color colorB)\brief Calculates the contrast between two colors.This method compares the Brightness of colorA and colorB and returnsthe Contrast that is between them.For example this can used to make sure a color combination is legibleon a specifc background.\return A value representing the Contrast. (0-255)\since Haiku R1*//*!\fn rgb_color make_color(uint8 red, uint8 green, uint8 blue, uint8 alpha=255)\brief Create a \a rgb_color from RGBA values.\param red The value for red.\param green The value for green.\param blue The value for blue.\param alpha The alpha value. Set to opaque by default.\return A new rgb_color set to the selected colors.\since Haiku R1*//*!\fn rgb_color mix_color(rgb_color color1, rgb_color color2, uint8 amount)\brief Mix two colors without respect for their alpha values.\param color1 First color.\param color2 Second color.\param amount The relative weight of \a color1 to mix in.\return The newly-mixed \ref rgb_color.\since Haiku R1*//*!\fn rgb_color blend_color(rgb_color color1, rgb_color color2, uint8 amount)\brief Mix two colors, respecting their alpha values.\param color1 First color.\param color2 Second color.\param amount The relative weight of \a color1 to mix in.\return The newly-mixed \ref rgb_color.\since Haiku R1*//*!\fn rgb_color disable_color(rgb_color color, rgb_color background)\brief Calculate a color for a disabled look.\param color The color that it would be if the use of your color is \em notdisabled.\param background The background on which will be drawn.\return A newly-mixed \ref rgb_color.\since Haiku R1*//*!\var const rgb_color B_TRANSPARENT_COLOR\brief A transparent color.\since Haiku R1*//*!\var const uint8 B_TRANSPARENT_MAGIC_CMAP8\brief Transparent color.\since Haiku R1*//*!\var const uint16 B_TRANSPARENT_MAGIC_RGBA15\brief Transparent color.\since Haiku R1*//*!\var const uint16 B_TRANSPARENT_MAGIC_RGBA15_BIG\brief Transparent color.\since Haiku R1*//*!\var const uint32 B_TRANSPARENT_MAGIC_RGBA32\brief Transparent color.\since Haiku R1*//*!\var const uint32 B_TRANSPARENT_MAGIC_RGBA32_BIG\brief Transparent color.\since Haiku R1*//*!\var const uint8 B_TRANSPARENT_8_BIT\brief Transparent color.\since BeOS R3*//*!\var const rgb_color B_TRANSPARENT_32_BIT\brief Transparent color.\since BeOS R3*///! @}///// Drawing modes //////*!\name Drawing Modes*///! @{/*!\enum source_alpha\ingroup interfaceBlending alpha mode constants.\since BeOS R3*//*!\var source_alpha B_PIXEL_ALPHAUse the alpha value of each pixel when drawing a bitmap.\since BeOS R3*//*!\var source_alpha B_CONSTANT_ALPHAUse the alpha channel of the view's high color.\since BeOS R3*//*!\enum alpha_function\ingroup interfaceBlending alpha function constants.\since BeOS R3*//*!\var alpha_function B_ALPHA_OVERLAYUsed for drawing a image with transparency over an opaque background.\since BeOS R3*//*!\var alpha_function B_ALPHA_COMPOSITEUsed to composite two or more transparent images together offscreen toproduce a new image drawn using \c B_ALPHA_OVERLAY mode.\since BeOS R3*//*!\var alpha_function B_ALPHA_COMPOSITE_SOURCE_OVERDraws source over destination preserving transparency. Same as\c B_ALPHA_COMPOSITE.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_SOURCE_OVER.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_SOURCE_INDraws source only where destination is not transparent.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_SOURCE_IN.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_SOURCE_OUTDraws source only where destination is transparent.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_SOURCE_OUT.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_SOURCE_ATOPDraws source only where destination is not transparent. Colors from bothare used in the result.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_SOURCE_ATOP.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_DESTINATION_OVERDraws source where destination is transparent, making it appear as if itis drawn behind.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_DESTINATION_OVER.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_DESTINATION_INBlends source alpha channel with destination.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_DESTINATION_IN.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_DESTINATION_OUTBlends inverse of source alpha channel with destination. Result appears asif source was cut out of destination.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_DESTINATION_OUT.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_DESTINATION_ATOPDraws source only where it is not transparent. Destination is blended ontop of it. Colors from both are used in the result.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_DESTINATION_ATOP.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_XORResult is transparent only where both source and destination are transparentor opaque.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_XOR.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_CLEARErases destination to full transparency, regardless of source alpha value.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_CLEAR.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_DIFFERENCESubtracts both inputs in a way that always yields positive result.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_DIFFERENCE.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_LIGHTENRetains lighter pixels of both inputs.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_LIGHTEN.png "Result"\since Haiku R1*//*!\var alpha_function B_ALPHA_COMPOSITE_DARKENRetains darker pixels of both inputs.\image{inline} html B_ALPHA_COMPOSITE_SOURCE.png "Source"->\image{inline} html B_ALPHA_COMPOSITE_DESTINATION.png "Destination"=\image{inline} html B_ALPHA_COMPOSITE_DARKEN.png "Result"\since Haiku R1*///! @}