+static const char *gs_stripedback_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"4 4 2 1",
+". c #F0F0F0",
+"X c #ECECEC",
+/* pixels */
+"....",
+"....",
+"XXXX",
+"XXXX"
+};
+
+wxBitmap gs_stripedback_bmp( wxImage( (const char* const* ) gs_stripedback_xpm ), -1 ) ;
+
+// make sure we all use one class for all conversions from wx to native colour
+
+class wxMacCoreGraphicsColour
+{
+ public:
+ wxMacCoreGraphicsColour();
+ wxMacCoreGraphicsColour(const wxBrush &brush);
+ ~wxMacCoreGraphicsColour();
+
+ void Apply( CGContextRef cgContext );
+ protected:
+ void Init();
+ wxCFRef<CGColorRef> m_color;
+ wxCFRef<CGColorSpaceRef> m_colorSpace;
+
+ bool m_isPattern;
+ wxCFRef<CGPatternRef> m_pattern;
+ CGFloat* m_patternColorComponents;
+} ;
+
+wxMacCoreGraphicsColour::~wxMacCoreGraphicsColour()
+{
+ delete[] m_patternColorComponents;
+}
+
+void wxMacCoreGraphicsColour::Init()
+{
+ m_isPattern = false;
+ m_patternColorComponents = NULL;
+}
+
+void wxMacCoreGraphicsColour::Apply( CGContextRef cgContext )
+{
+ if ( m_isPattern )
+ {
+ CGAffineTransform matrix = CGContextGetCTM( cgContext );
+ CGContextSetPatternPhase( cgContext, CGSizeMake(matrix.tx, matrix.ty) );
+ CGContextSetFillColorSpace( cgContext , m_colorSpace );
+ CGContextSetFillPattern( cgContext, m_pattern , m_patternColorComponents );
+ }
+ else
+ {
+ CGContextSetFillColorWithColor( cgContext, m_color );
+ }
+}
+
+wxMacCoreGraphicsColour::wxMacCoreGraphicsColour()
+{
+ Init();
+}
+
+wxMacCoreGraphicsColour::wxMacCoreGraphicsColour( const wxBrush &brush )
+{
+ Init();
+ if ( brush.GetStyle() == wxSOLID )
+ {
+ m_color.reset( brush.GetColour().CreateCGColor() );
+ }
+ else if ( brush.IsHatch() )
+ {
+ m_isPattern = true;
+ m_colorSpace.reset( CGColorSpaceCreatePattern( wxMacGetGenericRGBColorSpace() ) );
+ m_pattern.reset( (CGPatternRef) *( new HatchPattern( brush.GetStyle() , CGAffineTransformMakeScale( 1,-1 ) ) ) );
+
+ m_patternColorComponents = new CGFloat[4] ;
+ m_patternColorComponents[0] = brush.GetColour().Red() / 255.0;
+ m_patternColorComponents[1] = brush.GetColour().Green() / 255.0;
+ m_patternColorComponents[2] = brush.GetColour().Blue() / 255.0;
+ m_patternColorComponents[3] = brush.GetColour().Alpha() / 255.0;
+ }
+ else
+ {
+ // now brush is a bitmap
+ wxBitmap* bmp = brush.GetStipple();
+ if ( bmp && bmp->Ok() )
+ {
+ m_isPattern = true;
+ m_patternColorComponents = new CGFloat[1] ;
+ m_patternColorComponents[0] = 1.0;
+ m_colorSpace.reset( CGColorSpaceCreatePattern( NULL ) );
+ m_pattern.reset( (CGPatternRef) *( new ImagePattern( bmp , CGAffineTransformMakeScale( 1,-1 ) ) ) );
+ }
+ }
+}
+