added alpha support to wxCocoa, also fixed compilation after alpha changes hopefully
[wxWidgets.git] / src / cocoa / colour.mm
1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        src/cococa/colour.mm
3 // Purpose:     wxColour class
4 // Author:      David Elliott
5 // Modified by:
6 // Created:     2003/06/17
7 // RCS-ID:      $Id$
8 // Copyright:   (c) 2003 David Elliott
9 // Licence:     wxWidgets licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #include "wx/wxprec.h"
13
14 #include "wx/colour.h"
15
16 #ifndef WX_PRECOMP
17     #include "wx/gdicmn.h"
18 #endif //WX_PRECOMP
19
20 #include "wx/cocoa/autorelease.h"
21
22 #import <AppKit/NSColor.h>
23
24 IMPLEMENT_DYNAMIC_CLASS(wxColour, wxObject)
25
26 void wxColour::Init()
27 {
28     m_cocoaNSColor = NULL;
29     m_red =
30     m_blue =
31     m_green = 0;
32 }
33
34 wxColour::wxColour (const wxColour& col)
35 :   m_cocoaNSColor(col.m_cocoaNSColor)
36 ,   m_red(col.m_red)
37 ,   m_green(col.m_green)
38 ,   m_blue(col.m_blue)
39 ,   m_alpha(col.m_alpha)
40 {
41     [m_cocoaNSColor retain];
42 }
43
44 wxColour::wxColour( WX_NSColor aColor )
45 :   m_cocoaNSColor(nil)
46 {
47     Set(aColor);
48 }
49
50 wxColour& wxColour::operator =(const wxColour& col)
51 {
52     m_cocoaNSColor = col.m_cocoaNSColor;
53     m_red = col.m_red;
54     m_green = col.m_green;
55     m_blue = col.m_blue;
56     m_alpha = col.m_alpha;
57     [m_cocoaNSColor retain];
58     return *this;
59 }
60
61 wxColour::~wxColour ()
62 {
63     [m_cocoaNSColor release];
64 }
65
66 void wxColour::InitWith(unsigned char r,
67                         unsigned char g,
68                         unsigned char b,
69                         unsigned char a)
70 {
71     wxAutoNSAutoreleasePool pool;
72     [m_cocoaNSColor release];
73     m_cocoaNSColor = [[NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a/255.0] retain];
74     m_red = r;
75     m_green = g;
76     m_blue = b;
77     m_alpha = a;
78 }
79
80 void wxColour::Set( WX_NSColor aColor )
81 {
82     [aColor retain];
83     [m_cocoaNSColor release];
84     m_cocoaNSColor = aColor;
85
86     /* Make a temporary color in RGB format and get the values.  Note that
87        unless the color was actually RGB to begin with it's likely that
88        these will be fairly bogus. Particulary if the color is a pattern. */
89     NSColor *rgbColor = [m_cocoaNSColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
90     m_red   = (wxUint8) ([rgbColor redComponent]   * 255.0);
91     m_green = (wxUint8) ([rgbColor greenComponent] * 255.0);
92     m_blue  = (wxUint8) ([rgbColor blueComponent]  * 255.0);
93     m_alpha  = (wxUint8) ([rgbColor alphaComponent]  * 255.0);
94 }