+++ /dev/null
-#include "stdafx.h"\r
-/*\r
-* Copyright (c) 2007-2010 SlimDX Group\r
-* \r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"), to deal\r
-* in the Software without restriction, including without limitation the rights\r
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-* copies of the Software, and to permit persons to whom the Software is\r
-* furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included in\r
-* all copies or substantial portions of the Software.\r
-* \r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-* THE SOFTWARE.\r
-*/\r
-\r
-#include <d3dx9.h>\r
-\r
-#include "Color4.h"\r
-\r
-#include "Color3.h"\r
-#include "Vector3.h"\r
-#include "Vector4.h"\r
-\r
-using namespace System;\r
-using namespace System::Globalization;\r
-using namespace System::Drawing;\r
-\r
-namespace SlimDX\r
-{\r
- Color4 Color4::FromUnmanaged( const D3DXCOLOR &color )\r
- {\r
- return Color4( color.a, color.r, color.g, color.b );\r
- }\r
-\r
- D3DXCOLOR Color4::ToUnmanaged()\r
- {\r
- D3DXCOLOR result( Red, Green, Blue, Alpha );\r
- return result;\r
- }\r
-\r
- Color4::Color4( float alpha, float red, float green, float blue )\r
- {\r
- Alpha = alpha;\r
- Red = red;\r
- Green = green;\r
- Blue = blue;\r
- }\r
-\r
- Color4::Color4( float red, float green, float blue )\r
- {\r
- Alpha = 1.0f;\r
- Red = red;\r
- Green = green;\r
- Blue = blue;\r
- }\r
-\r
- Color4::Color4( Color color )\r
- {\r
- Alpha = color.A / 255.0f;\r
- Red = color.R / 255.0f;\r
- Green = color.G / 255.0f;\r
- Blue = color.B / 255.0f;\r
- }\r
-\r
- Color4::Color4( Color3 color )\r
- {\r
- Alpha = 1.0f;\r
- Red = color.Red;\r
- Green = color.Green;\r
- Blue = color.Blue;\r
- }\r
-\r
- Color4::Color4( Vector3 color )\r
- {\r
- Alpha = 1.0f;\r
- Red = color.X;\r
- Green = color.Y;\r
- Blue = color.Z;\r
- }\r
-\r
- Color4::Color4( Vector4 color )\r
- {\r
- Alpha = color.W;\r
- Red = color.X;\r
- Green = color.Y;\r
- Blue = color.Z;\r
- }\r
-\r
- Color4::Color4( int argb )\r
- {\r
- Alpha = ( ( argb >> 24 ) & 255 ) / 255.0f;\r
- Red = ( ( argb >> 16 ) & 255 ) / 255.0f;\r
- Green = ( ( argb >> 8 ) & 255 ) / 255.0f;\r
- Blue = ( argb & 255 ) / 255.0f;\r
- }\r
-\r
- Color Color4::ToColor()\r
- {\r
- return Color::FromArgb( static_cast<int>(Alpha * 255), static_cast<int>(Red * 255), static_cast<int>(Green * 255), static_cast<int>(Blue * 255) );\r
- }\r
-\r
- Color3 Color4::ToColor3()\r
- {\r
- return Color3( Red, Green, Blue );\r
- }\r
-\r
- int Color4::ToArgb()\r
- {\r
- unsigned int a, r, g, b;\r
-\r
- a = static_cast<unsigned int>(Alpha * 255.0f);\r
- r = static_cast<unsigned int>(Red * 255.0f);\r
- g = static_cast<unsigned int>(Green * 255.0f);\r
- b = static_cast<unsigned int>(Blue * 255.0f);\r
-\r
- unsigned int value = b;\r
- value += g << 8;\r
- value += r << 16;\r
- value += a << 24;\r
-\r
- return static_cast<int>( value );\r
- }\r
-\r
- Vector3 Color4::ToVector3()\r
- {\r
- return Vector3( Red, Green, Blue );\r
- }\r
-\r
- Vector4 Color4::ToVector4()\r
- {\r
- return Vector4( Red, Green, Blue, Alpha );\r
- }\r
-\r
- Color4 Color4::Add( Color4 color1, Color4 color2 )\r
- {\r
- return Color4( color1.Alpha + color2.Alpha, color1.Red + color2.Red, color1.Green + color2.Green, color1.Blue + color2.Blue );\r
- }\r
-\r
- void Color4::Add( Color4% color1, Color4% color2, [Out] Color4% result )\r
- {\r
- result = Color4( color1.Alpha + color2.Alpha, color1.Red + color2.Red, color1.Green + color2.Green, color1.Blue + color2.Blue );\r
- }\r
-\r
- Color4 Color4::Subtract( Color4 color1, Color4 color2 )\r
- {\r
- return Color4( color1.Alpha - color2.Alpha, color1.Red - color2.Red, color1.Green - color2.Green, color1.Blue - color2.Blue );\r
- }\r
-\r
- void Color4::Subtract( Color4% color1, Color4% color2, [Out] Color4% result )\r
- {\r
- result = Color4( color1.Alpha - color2.Alpha, color1.Red - color2.Red, color1.Green - color2.Green, color1.Blue - color2.Blue );\r
- }\r
-\r
- Color4 Color4::Modulate( Color4 color1, Color4 color2 )\r
- {\r
- return Color4( color1.Alpha * color2.Alpha, color1.Red * color2.Red, color1.Green * color2.Green, color1.Blue * color2.Blue );\r
- }\r
-\r
- void Color4::Modulate( Color4% color1, Color4% color2, [Out] Color4% result )\r
- {\r
- result = Color4( color1.Alpha * color2.Alpha, color1.Red * color2.Red, color1.Green * color2.Green, color1.Blue * color2.Blue );\r
- }\r
-\r
- Color4 Color4::Lerp( Color4 color1, Color4 color2, float amount )\r
- {\r
- float a = color1.Alpha + amount * ( color2.Alpha - color1.Alpha );\r
- float r = color1.Red + amount * ( color2.Red - color1.Red );\r
- float g = color1.Green + amount * ( color2.Green - color1.Green );\r
- float b = color1.Blue + amount * ( color2.Blue - color1.Blue );\r
-\r
- return Color4( a, r, g, b );\r
- }\r
-\r
- void Color4::Lerp( Color4% color1, Color4% color2, float amount, [Out] Color4% result )\r
- {\r
- float a = color1.Alpha + amount * ( color2.Alpha - color1.Alpha );\r
- float r = color1.Red + amount * ( color2.Red - color1.Red );\r
- float g = color1.Green + amount * ( color2.Green - color1.Green );\r
- float b = color1.Blue + amount * ( color2.Blue - color1.Blue );\r
-\r
- result = Color4( a, r, g, b );\r
- }\r
-\r
- Color4 Color4::Negate( Color4 color )\r
- {\r
- return Color4( 1.0f - color.Alpha, 1.0f - color.Red, 1.0f - color.Green, 1.0f - color.Blue );\r
- }\r
-\r
- void Color4::Negate( Color4% color, [Out] Color4% result )\r
- {\r
- result = Color4( 1.0f - color.Alpha, 1.0f - color.Red, 1.0f - color.Green, 1.0f - color.Blue );\r
- }\r
-\r
- Color4 Color4::AdjustContrast( Color4 color, float contrast )\r
- {\r
- float r = 0.5f + contrast * ( color.Red - 0.5f );\r
- float g = 0.5f + contrast * ( color.Green - 0.5f );\r
- float b = 0.5f + contrast * ( color.Blue - 0.5f );\r
-\r
- return Color4( color.Alpha, r, g, b );\r
- }\r
-\r
- void Color4::AdjustContrast( Color4% color, float contrast, [Out] Color4% result )\r
- {\r
- float r = 0.5f + contrast * ( color.Red - 0.5f );\r
- float g = 0.5f + contrast * ( color.Green - 0.5f );\r
- float b = 0.5f + contrast * ( color.Blue - 0.5f );\r
-\r
- result = Color4( color.Alpha, r, g, b );\r
- }\r
-\r
- Color4 Color4::AdjustSaturation( Color4 color, float saturation )\r
- {\r
- float grey = color.Red * 0.2125f + color.Green * 0.7154f + color.Blue * 0.0721f;\r
- float r = grey + saturation * ( color.Red - grey );\r
- float g = grey + saturation * ( color.Green - grey );\r
- float b = grey + saturation * ( color.Blue - grey );\r
-\r
- return Color4( color.Alpha, r, g, b );\r
- }\r
-\r
- void Color4::AdjustSaturation( Color4% color, float saturation, [Out] Color4% result )\r
- {\r
- float grey = color.Red * 0.2125f + color.Green * 0.7154f + color.Blue * 0.0721f;\r
- float r = grey + saturation * ( color.Red - grey );\r
- float g = grey + saturation * ( color.Green - grey );\r
- float b = grey + saturation * ( color.Blue - grey );\r
-\r
- result = Color4( color.Alpha, r, g, b );\r
- }\r
-\r
- Color4 Color4::Scale( Color4 color, float scale )\r
- {\r
- return Color4( color.Alpha, color.Red * scale, color.Green * scale, color.Blue * scale );\r
- }\r
-\r
- void Color4::Scale( Color4% color, float scale, [Out] Color4% result )\r
- {\r
- result = Color4( color.Alpha, color.Red * scale, color.Green * scale, color.Blue * scale );\r
- }\r
-\r
- Color4 Color4::operator + ( Color4 color1, Color4 color2 )\r
- {\r
- return Color4( color1.Alpha + color2.Alpha, color1.Red + color2.Red, color1.Green + color2.Green, color1.Blue + color2.Blue );\r
- }\r
-\r
- Color4 Color4::operator - ( Color4 color1, Color4 color2 )\r
- {\r
- return Color4( color1.Alpha - color2.Alpha, color1.Red - color2.Red, color1.Green - color2.Green, color1.Blue - color2.Blue );\r
- }\r
-\r
- Color4 Color4::operator - ( Color4 color )\r
- {\r
- return Color4( 1.0f - color.Alpha, 1.0f - color.Red, 1.0f - color.Green, 1.0f - color.Blue );\r
- }\r
-\r
- Color4 Color4::operator * ( Color4 color1, Color4 color2 )\r
- {\r
- return Color4( color1.Alpha * color2.Alpha, color1.Red * color2.Red, color1.Green * color2.Green, color1.Blue * color2.Blue );\r
- }\r
-\r
- Color4 Color4::operator * ( Color4 color, float scale )\r
- {\r
- return Color4( color.Alpha, color.Red * scale, color.Green * scale, color.Blue * scale );\r
- }\r
-\r
- Color4 Color4::operator * ( float scale, Color4 value )\r
- {\r
- return value * scale;\r
- }\r
-\r
- bool Color4::operator == ( Color4 left, Color4 right )\r
- {\r
- return Color4::Equals( left, right );\r
- }\r
-\r
- bool Color4::operator != ( Color4 left, Color4 right )\r
- {\r
- return !Color4::Equals( left, right );\r
- }\r
-\r
- Color4::operator int( Color4 value )\r
- {\r
- return value.ToArgb();\r
- }\r
-\r
- Color4::operator Color3( Color4 value )\r
- {\r
- return value.ToColor3();\r
- }\r
-\r
- Color4::operator System::Drawing::Color( Color4 value )\r
- {\r
- return value.ToColor();\r
- }\r
-\r
- Color4::operator Vector3( Color4 value )\r
- {\r
- return value.ToVector3();\r
- }\r
-\r
- Color4::operator Vector4( Color4 value )\r
- {\r
- return value.ToVector4();\r
- }\r
-\r
- Color4::operator Color4( int value )\r
- {\r
- return Color4( value );\r
- }\r
-\r
- Color4::operator Color4( Color3 value )\r
- {\r
- return Color4( value );\r
- }\r
-\r
- Color4::operator Color4( System::Drawing::Color value )\r
- {\r
- return Color4( value );\r
- }\r
-\r
- Color4::operator Color4( Vector3 value )\r
- {\r
- return Color4( value );\r
- }\r
-\r
- Color4::operator Color4( Vector4 value )\r
- {\r
- return Color4( value );\r
- }\r
-\r
- String^ Color4::ToString()\r
- {\r
- return String::Format( CultureInfo::CurrentCulture, "A:{0} R:{1} G:{2} B:{3}", \r
- Alpha.ToString(CultureInfo::CurrentCulture), Red.ToString(CultureInfo::CurrentCulture), \r
- Green.ToString(CultureInfo::CurrentCulture), Blue.ToString(CultureInfo::CurrentCulture) );\r
- }\r
-\r
- int Color4::GetHashCode()\r
- {\r
- return Alpha.GetHashCode() + Red.GetHashCode() + Green.GetHashCode() + Blue.GetHashCode();\r
- }\r
-\r
- bool Color4::Equals( Object^ value )\r
- {\r
- if( value == nullptr )\r
- return false;\r
-\r
- if( value->GetType() != GetType() )\r
- return false;\r
-\r
- return Equals( safe_cast<Color4>( value ) );\r
- }\r
-\r
- bool Color4::Equals( Color4 value )\r
- {\r
- return ( Alpha == value.Alpha && Red == value.Red && Green == value.Green && Blue == value.Blue );\r
- }\r
-\r
- bool Color4::Equals( Color4% value1, Color4% value2 )\r
- {\r
- return ( value1.Alpha == value2.Alpha && value1.Red == value2.Red && value1.Green == value2.Green && value1.Blue == value2.Blue );\r
- }\r
-}
\ No newline at end of file