X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c668531784567b84a131875707d9a63a5977fd77..8a31648287be0ef976f133de2786b137f1e98340:/src/gtk/colour.cpp?ds=sidebyside diff --git a/src/gtk/colour.cpp b/src/gtk/colour.cpp index afb1cdc00e..185cb5c1d4 100644 --- a/src/gtk/colour.cpp +++ b/src/gtk/colour.cpp @@ -20,19 +20,23 @@ // wxColour //----------------------------------------------------------------------------- -class wxColourRefData: public wxObjectRefData +class wxColourRefData : public wxGDIRefData { public: - wxColourRefData(guint16 red, guint16 green, guint16 blue) + wxColourRefData(guint16 red, guint16 green, guint16 blue, wxByte alpha = 0xff) { + m_color.red = m_red = red; + m_color.green = m_green = green; + m_color.blue = m_blue = blue; + m_alpha = alpha; m_color.pixel = 0; m_colormap = NULL; } - ~wxColourRefData() + virtual ~wxColourRefData() { FreeColour(); } @@ -46,8 +50,9 @@ public: guint16 m_red; guint16 m_green; guint16 m_blue; + wxByte m_alpha; - DECLARE_NO_COPY_CLASS(wxColourRefData) + wxDECLARE_NO_COPY_CLASS(wxColourRefData); }; void wxColourRefData::FreeColour() @@ -78,13 +83,11 @@ void wxColourRefData::AllocColour( GdkColormap *cmap ) //----------------------------------------------------------------------------- -#define M_COLDATA wx_static_cast(wxColourRefData*, m_refData) +#define M_COLDATA static_cast(m_refData) // GDK's values are in 0..65535 range, ours are in 0..255 #define SHIFT 8 -IMPLEMENT_DYNAMIC_CLASS(wxColour,wxGDIObject) - wxColour::wxColour(const GdkColor& gdkColor) { m_refData = new wxColourRefData(gdkColor.red, gdkColor.green, gdkColor.blue); @@ -103,65 +106,75 @@ bool wxColour::operator == ( const wxColour& col ) const return false; wxColourRefData* refData = M_COLDATA; - wxColourRefData* that_refData = wx_static_cast(wxColourRefData*, col.m_refData); + wxColourRefData* that_refData = static_cast(col.m_refData); return refData->m_red == that_refData->m_red && refData->m_green == that_refData->m_green && - refData->m_blue == that_refData->m_blue; + refData->m_blue == that_refData->m_blue && + refData->m_alpha == that_refData->m_alpha; } -void wxColour::InitWith( unsigned char red, unsigned char green, unsigned char blue ) +void wxColour::InitRGBA(unsigned char red, unsigned char green, unsigned char blue, + unsigned char alpha) { UnRef(); m_refData = new wxColourRefData( (guint16(red) << SHIFT) + red, (guint16(green) << SHIFT) + green, - (guint16(blue) << SHIFT) + blue); + (guint16(blue) << SHIFT) + blue, + alpha); } unsigned char wxColour::Red() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return wxByte(M_COLDATA->m_red >> SHIFT); } unsigned char wxColour::Green() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return wxByte(M_COLDATA->m_green >> SHIFT); } unsigned char wxColour::Blue() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return wxByte(M_COLDATA->m_blue >> SHIFT); } +unsigned char wxColour::Alpha() const +{ + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); + + return M_COLDATA->m_alpha; +} + void wxColour::CalcPixel( GdkColormap *cmap ) { - if (!Ok()) return; + if (!IsOk()) return; M_COLDATA->AllocColour( cmap ); } int wxColour::GetPixel() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), 0, wxT("invalid colour") ); return M_COLDATA->m_color.pixel; } const GdkColor *wxColour::GetColor() const { - wxCHECK_MSG( Ok(), NULL, wxT("invalid colour") ); + wxCHECK_MSG( IsOk(), NULL, wxT("invalid colour") ); return &M_COLDATA->m_color; } -bool wxColour::FromString(const wxChar *str) +bool wxColour::FromString(const wxString& str) { GdkColor colGDK; if ( gdk_color_parse( wxGTK_CONV_SYS( str ), &colGDK ) )