/////////////////////////////////////////////////////////////////////////////
-// Name: src/osx/carbon/colour.cpp
+// Name: src/osx/core/colour.cpp
// Purpose: wxColour class
// Author: Stefan Csomor
// Modified by:
#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);
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;
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 ) ;
}
+ wxASSERT_MSG(col != NULL, "Invalid CoreGraphics Color");
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;
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 ) ;
}
+ wxASSERT_MSG(cfcol != NULL, "Invalid CoreGraphics Color");
m_cgColour.reset( cfcol );
}
#endif
void wxColour::InitCGColorRef( CGColorRef col )
{
+ wxASSERT_MSG(col != NULL, "Invalid CoreGraphics Color");
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);
}
}