X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e8427971f688b68194b25d068e38f36cb8d898c6..c13d6ac1ea199d1e3908d40d129e2fd5a4d82df7:/src/generic/clrpickerg.cpp?ds=sidebyside diff --git a/src/generic/clrpickerg.cpp b/src/generic/clrpickerg.cpp index 717b1811ae..ffc71547ad 100644 --- a/src/generic/clrpickerg.cpp +++ b/src/generic/clrpickerg.cpp @@ -27,8 +27,8 @@ #if wxUSE_COLOURPICKERCTRL #include "wx/clrpicker.h" - #include "wx/colordlg.h" +#include "wx/dcmemory.h" // ============================================================================ @@ -36,7 +36,7 @@ // ============================================================================ wxColourData wxGenericColourButton::ms_data; -IMPLEMENT_DYNAMIC_CLASS(wxGenericColourButton, wxButton) +IMPLEMENT_DYNAMIC_CLASS(wxGenericColourButton, wxBitmapButton) // ---------------------------------------------------------------------------- // wxGenericColourButton @@ -47,16 +47,18 @@ bool wxGenericColourButton::Create( wxWindow *parent, wxWindowID id, const wxSize &size, long style, const wxValidator& validator, const wxString &name) { + m_bitmap = wxBitmap( 60, 13 ); + // create this button - if (!wxButton::Create( parent, id, wxEmptyString, pos, - size, style, validator, name )) + if (!wxBitmapButton::Create( parent, id, m_bitmap, pos, + size, style | wxBU_AUTODRAW, validator, name )) { wxFAIL_MSG( wxT("wxGenericColourButton creation failed") ); return false; } // and handle user clicks on it - Connect(wxEVT_COMMAND_BUTTON_CLICKED, + Connect(GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxGenericColourButton::OnButtonClick), NULL, this); @@ -81,7 +83,7 @@ void wxGenericColourButton::InitColourData() void wxGenericColourButton::OnButtonClick(wxCommandEvent& WXUNUSED(ev)) { - // update the wxColouData to be shown in the the dialog + // update the wxColouData to be shown in the dialog ms_data.SetColour(m_colour); // create the colour dialog and display it @@ -99,33 +101,38 @@ void wxGenericColourButton::OnButtonClick(wxCommandEvent& WXUNUSED(ev)) void wxGenericColourButton::UpdateColour() { - if ( !m_colour.Ok() ) + wxMemoryDC dc(m_bitmap); + dc.SetPen( *wxTRANSPARENT_PEN ); + dc.SetBrush( wxBrush(m_colour) ); + dc.DrawRectangle( 0,0,m_bitmap.GetWidth(),m_bitmap.GetHeight() ); + + if ( HasFlag(wxCLRP_SHOW_LABEL) ) { - if ( HasFlag(wxCLRP_SHOW_LABEL) ) - SetLabel(wxEmptyString); - return; + wxColour col( ~m_colour.Red(), ~m_colour.Green(), ~m_colour.Blue() ); + dc.SetTextForeground( col ); + dc.SetFont( GetFont() ); + dc.DrawText( m_colour.GetAsString(wxC2S_HTML_SYNTAX), 0, 0 ); } - // some combinations of the fg/bg colours may be unreadable, so we invert - // the colour to make sure fg colour is different enough from m_colour - wxColour colFg(~m_colour.Red(), ~m_colour.Green(), ~m_colour.Blue()); - - SetForegroundColour(colFg); - SetBackgroundColour(m_colour); - - if ( HasFlag(wxCLRP_SHOW_LABEL) ) - SetLabel(m_colour.GetAsString(wxC2S_HTML_SYNTAX)); + dc.SelectObject( wxNullBitmap ); + SetBitmapLabel( m_bitmap ); } wxSize wxGenericColourButton::DoGetBestSize() const { - wxSize sz(wxButton::DoGetBestSize()); + wxSize sz(wxBitmapButton::DoGetBestSize()); +#ifdef __WXMAC__ + sz.y += 6; +#else + sz.y += 2; +#endif + sz.x += 30; if ( HasFlag(wxCLRP_SHOW_LABEL) ) return sz; // if we have no label, then make this button a square - // (like e.g. native GTK version of this control) - sz.SetWidth(sz.GetHeight()); + // (like e.g. native GTK version of this control) ??? + // sz.SetWidth(sz.GetHeight()); return sz; }