X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/524c47aa3adf2af11a3069fd5da035a604f08f66..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/osx/core/colour.cpp?ds=sidebyside diff --git a/src/osx/core/colour.cpp b/src/osx/core/colour.cpp index 81348d24bd..c30e8bdc6f 100644 --- a/src/osx/core/colour.cpp +++ b/src/osx/core/colour.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/colour.cpp +// Name: src/osx/core/colour.cpp // Purpose: wxColour class // Author: Stefan Csomor // Modified by: @@ -19,9 +19,7 @@ #include "wx/osx/private.h" -IMPLEMENT_DYNAMIC_CLASS(wxColour, wxObject) - -#if wxOSX_USE_CARBON +#if wxOSX_USE_COCOA_OR_CARBON wxColour::wxColour(const RGBColor& col) { InitRGBColor(col); @@ -33,7 +31,7 @@ wxColour::wxColour(CGColorRef col) InitCGColorRef(col); } -#if wxOSX_USE_CARBON +#if wxOSX_USE_COCOA_OR_CARBON void wxColour::GetRGBColor( RGBColor *col ) const { col->red = (m_red << 8) + m_red; @@ -72,19 +70,19 @@ void wxColour::InitRGBA (ChannelType r, ChannelType g, ChannelType b, ChannelTyp m_alpha = a ; CGColorRef col = 0 ; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - if ( CGColorCreateGenericRGB ) +#if wxOSX_USE_COCOA_OR_CARBON && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + if ( CGColorCreateGenericRGB != NULL ) col = CGColorCreateGenericRGB( (CGFloat)(r / 255.0), (CGFloat) (g / 255.0), (CGFloat) (b / 255.0), (CGFloat) (a / 255.0) ); else #endif { - CGFloat components[4] = { (CGFloat)(r / 255.0), (CGFloat) (g / 255.0), (CGFloat) (b / 255.0), (CGFloat) (a / 255.0) } ; + CGFloat components[4] = { (CGFloat)(r / 255.0), (CGFloat) (g / 255.0), (CGFloat) (b / 255.0), (CGFloat) (a / 255.0) } ; col = CGColorCreate( wxMacGetGenericRGBColorSpace() , components ) ; } m_cgColour.reset( col ); } -#if wxOSX_USE_CARBON +#if wxOSX_USE_COCOA_OR_CARBON void wxColour::InitRGBColor( const RGBColor& col ) { m_red = col.red >> 8; @@ -93,14 +91,14 @@ void wxColour::InitRGBColor( const RGBColor& col ) m_alpha = wxALPHA_OPAQUE; CGColorRef cfcol; #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - if ( CGColorCreateGenericRGB ) - cfcol = CGColorCreateGenericRGB((CGFloat)(col.red / 65535.0), (CGFloat)(col.green / 65535.0), + if ( CGColorCreateGenericRGB != NULL ) + cfcol = CGColorCreateGenericRGB((CGFloat)(col.red / 65535.0), (CGFloat)(col.green / 65535.0), (CGFloat)(col.blue / 65535.0), (CGFloat) 1.0 ); else #endif { - CGFloat components[4] = { (CGFloat)(col.red / 65535.0), (CGFloat)(col.green / 65535.0), - (CGFloat)(col.blue / 65535.0), (CGFloat) 1.0 } ; + CGFloat components[4] = { (CGFloat)(col.red / 65535.0), (CGFloat)(col.green / 65535.0), + (CGFloat)(col.blue / 65535.0), (CGFloat) 1.0 } ; cfcol = CGColorCreate( wxMacGetGenericRGBColorSpace() , components ) ; } m_cgColour.reset( cfcol ); @@ -111,30 +109,39 @@ void wxColour::InitCGColorRef( CGColorRef col ) { m_cgColour.reset( col ); size_t noComp = CGColorGetNumberOfComponents( col ); + + const CGFloat *components = NULL; if ( noComp >= 1 && noComp <= 4 ) { // TODO verify whether we really are on a RGB color space m_alpha = wxALPHA_OPAQUE; - const CGFloat *components = CGColorGetComponents( col ); - if ( noComp >= 3 ) - { - m_red = (int)(components[0]*255+0.5); - m_green = (int)(components[1]*255+0.5); - m_blue = (int)(components[2]*255+0.5); - if ( noComp == 4 ) - m_alpha = (int)(components[3]*255+0.5); - } - else - { - m_red = (int)(components[0]*255+0.5); - m_green = (int)(components[0]*255+0.5); - m_blue = (int)(components[0]*255+0.5); - } + components = CGColorGetComponents( col ); } - else + InitFromComponents(components, noComp); +} + +void wxColour::InitFromComponents(const CGFloat* components, size_t numComponents ) +{ + if ( numComponents < 1 || !components ) { m_alpha = wxALPHA_OPAQUE; m_red = m_green = m_blue = 0; + return; + } + + if ( numComponents >= 3 ) + { + m_red = (int)(components[0]*255+0.5); + m_green = (int)(components[1]*255+0.5); + m_blue = (int)(components[2]*255+0.5); + if ( numComponents == 4 ) + m_alpha = (int)(components[3]*255+0.5); + } + else + { + m_red = (int)(components[0]*255+0.5); + m_green = (int)(components[0]*255+0.5); + m_blue = (int)(components[0]*255+0.5); } }